From c26cebe46f6bf3c8eb1f80a93570e5b002661761 Mon Sep 17 00:00:00 2001 From: mcll Date: Fri, 17 Nov 2023 17:42:48 +0800 Subject: [PATCH] feature: support aws eks --- .../api/clustermanager/clustermanager.pb.go | 8215 +++--- .../clustermanager.pb.validate.go | 24117 +++++++++++++++- .../api/clustermanager/clustermanager.proto | 12 + .../clustermanager.swagger.json | 823 +- bcs-services/bcs-cluster-manager/go.mod | 67 +- .../internal/actions/nodegroup/create.go | 1 + .../internal/cloudprovider/aws/api/as.go | 100 + .../cloudprovider/aws/api/constants.go | 66 + .../internal/cloudprovider/aws/api/ec2.go | 176 + .../internal/cloudprovider/aws/api/eks.go | 147 + .../cloudprovider/aws/api/eks_types.go | 361 + .../internal/cloudprovider/aws/api/iam.go | 63 + .../internal/cloudprovider/aws/api/node.go | 261 + .../internal/cloudprovider/aws/api/utils.go | 299 + .../internal/cloudprovider/aws/api/vpc.go | 97 + .../internal/cloudprovider/aws/cloud.go | 103 + .../internal/cloudprovider/aws/cluster.go | 64 +- .../internal/cloudprovider/aws/nodegroup.go | 227 +- .../internal/cloudprovider/aws/taskmgr.go | 589 + .../aws/tasks/cleanNodesInGroup.go | 153 + .../aws/tasks/createNodeGroup.go | 541 + .../aws/tasks/deleteNodeGroup.go | 111 + .../cloudprovider/aws/tasks/importCluster.go | 203 + .../aws/tasks/updateDesiredNodes.go | 442 + .../internal/cloudprovider/aws/tasks/utils.go | 36 + .../internal/cloudprovider/aws/utils.go | 278 + .../internal/cloudprovider/aws/validate.go | 276 + .../internal/cloudprovider/google/api/vpc.go | 10 +- 28 files changed, 31753 insertions(+), 6085 deletions(-) create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/as.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/constants.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks_types.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/iam.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/cleanNodesInGroup.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/createNodeGroup.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/deleteNodeGroup.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/importCluster.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/updateDesiredNodes.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/utils.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/utils.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/validate.go diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go index 0c6a22760b..8a24d5f4f4 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go @@ -4768,6 +4768,7 @@ type NodeGroup struct { Tags map[string]string `protobuf:"bytes,21,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` NodeGroupType string `protobuf:"bytes,22,opt,name=nodeGroupType,proto3" json:"nodeGroupType,omitempty"` Area *CloudArea `protobuf:"bytes,23,opt,name=area,proto3" json:"area,omitempty"` + NodeRole string `protobuf:"bytes,24,opt,name=nodeRole,proto3" json:"nodeRole,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -4959,6 +4960,13 @@ func (m *NodeGroup) GetArea() *CloudArea { return nil } +func (m *NodeGroup) GetNodeRole() string { + if m != nil { + return m.NodeRole + } + return "" +} + type CloudArea struct { BkCloudID uint32 `protobuf:"varint,1,opt,name=bkCloudID,proto3" json:"bkCloudID,omitempty"` BkCloudName string `protobuf:"bytes,2,opt,name=bkCloudName,proto3" json:"bkCloudName,omitempty"` @@ -5645,6 +5653,7 @@ type LaunchConfiguration struct { InitLoginUsername string `protobuf:"bytes,18,opt,name=initLoginUsername,proto3" json:"initLoginUsername,omitempty"` Selector map[string]string `protobuf:"bytes,19,rep,name=selector,proto3" json:"selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` KeyPair *KeyInfo `protobuf:"bytes,20,opt,name=keyPair,proto3" json:"keyPair,omitempty"` + SshKey string `protobuf:"bytes,21,opt,name=sshKey,proto3" json:"sshKey,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -5815,6 +5824,13 @@ func (m *LaunchConfiguration) GetKeyPair() *KeyInfo { return nil } +func (m *LaunchConfiguration) GetSshKey() string { + if m != nil { + return m.SshKey + } + return "" +} + type KeyInfo struct { KeyID string `protobuf:"bytes,1,opt,name=keyID,proto3" json:"keyID,omitempty"` KeySecret string `protobuf:"bytes,2,opt,name=keySecret,proto3" json:"keySecret,omitempty"` @@ -8358,7 +8374,7 @@ type CreateClusterReq struct { FederationClusterID string `protobuf:"bytes,12,opt,name=federationClusterID,proto3" json:"federationClusterID,omitempty"` Labels map[string]string `protobuf:"bytes,13,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Creator string `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"` - // 集群创建的控制信息 + //集群创建的控制信息 OnlyCreateInfo bool `protobuf:"varint,15,opt,name=onlyCreateInfo,proto3" json:"onlyCreateInfo,omitempty"` BcsAddons map[string]*BKOpsPlugin `protobuf:"bytes,17,rep,name=bcsAddons,proto3" json:"bcsAddons,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` ExtraAddons map[string]*BKOpsPlugin `protobuf:"bytes,18,rep,name=extraAddons,proto3" json:"extraAddons,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -14568,6 +14584,7 @@ type CreateNodeGroupRequest struct { CloudAreaName string `protobuf:"bytes,23,opt,name=cloudAreaName,proto3" json:"cloudAreaName,omitempty"` Extra *GroupExtraInfo `protobuf:"bytes,24,opt,name=extra,proto3" json:"extra,omitempty"` OnlyCreateInfo bool `protobuf:"varint,25,opt,name=onlyCreateInfo,proto3" json:"onlyCreateInfo,omitempty"` + NodeRole string `protobuf:"bytes,26,opt,name=nodeRole,proto3" json:"nodeRole,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -14731,6 +14748,13 @@ func (m *CreateNodeGroupRequest) GetOnlyCreateInfo() bool { return false } +func (m *CreateNodeGroupRequest) GetNodeRole() string { + if m != nil { + return m.NodeRole + } + return "" +} + type GroupExtraInfo struct { Provider string `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` PoolID string `protobuf:"bytes,2,opt,name=poolID,proto3" json:"poolID,omitempty"` @@ -28295,4080 +28319,4089 @@ func init() { func init() { proto.RegisterFile("clustermanager.proto", fileDescriptor_d789ea45d40d7a6b) } var fileDescriptor_d789ea45d40d7a6b = []byte{ - // 65162 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x0b, 0x70, 0x1b, 0x47, - 0xb2, 0x20, 0xf8, 0x9a, 0xfa, 0x91, 0x25, 0x51, 0x9f, 0xb6, 0x24, 0xd3, 0xb2, 0x2d, 0xc3, 0xb4, - 0x67, 0x86, 0xec, 0x21, 0x45, 0xa9, 0xfd, 0xa7, 0xc7, 0xf6, 0x34, 0x41, 0x4a, 0x86, 0xf5, 0xa3, - 0x9b, 0x92, 0x3c, 0xb6, 0xc7, 0xa3, 0x03, 0x81, 0x16, 0x05, 0x13, 0x04, 0x38, 0x00, 0x48, 0x49, - 0x9e, 0xb7, 0x6f, 0x40, 0x8a, 0x94, 0x48, 0x89, 0x3f, 0xb5, 0xf5, 0xa5, 0xa8, 0x0f, 0x6d, 0x7d, - 0x38, 0xb6, 0x44, 0x4a, 0xb6, 0x46, 0x02, 0x41, 0xd0, 0x8a, 0xdd, 0xdb, 0xbb, 0x7d, 0xbb, 0x7b, - 0xb1, 0x7b, 0xeb, 0xfb, 0xc6, 0xdd, 0xdb, 0xbd, 0x8d, 0x13, 0xba, 0x01, 0xec, 0xbd, 0x38, 0xee, - 0xbd, 0xb8, 0x17, 0xb7, 0xe1, 0xbb, 0x8d, 0xbb, 0xe8, 0xca, 0xea, 0xea, 0x6a, 0x00, 0xa4, 0x24, - 0xdb, 0x6f, 0xe6, 0x79, 0x6f, 0x1c, 0x8e, 0x10, 0x91, 0x55, 0x95, 0x95, 0x5d, 0x9f, 0xac, 0xcc, - 0xac, 0xac, 0x4c, 0xb4, 0xd2, 0xe3, 0x6f, 0x0b, 0x47, 0x94, 0x50, 0x8b, 0x3b, 0xe0, 0x6e, 0x52, - 0x42, 0xeb, 0x5a, 0x43, 0xc1, 0x48, 0x90, 0x5f, 0x6a, 0x87, 0xae, 0x79, 0xa2, 0x29, 0x18, 0x6c, - 0xf2, 0x2b, 0x55, 0xee, 0x56, 0x5f, 0x95, 0x3b, 0x10, 0x08, 0x46, 0xdc, 0x11, 0x5f, 0x30, 0x10, - 0x86, 0xda, 0xb4, 0x14, 0xff, 0x6a, 0x6c, 0xdb, 0x53, 0x15, 0x8e, 0x84, 0xda, 0x3c, 0x11, 0x52, - 0x5a, 0x81, 0xff, 0xf1, 0x54, 0x36, 0x29, 0x81, 0xca, 0xf0, 0x3e, 0x77, 0x53, 0x93, 0x12, 0xaa, - 0x0a, 0xb6, 0xe2, 0xf6, 0x79, 0x70, 0x3d, 0xda, 0xee, 0xf6, 0xfb, 0xbc, 0xee, 0x88, 0x52, 0x65, - 0xfe, 0x41, 0x0a, 0xd6, 0x66, 0x77, 0xb2, 0x2f, 0xe4, 0x6e, 0x6d, 0x55, 0x42, 0xa4, 0x61, 0xe9, - 0x91, 0x2a, 0xb4, 0xc8, 0x09, 0x54, 0xf3, 0xbf, 0x42, 0x45, 0xe4, 0x03, 0x5c, 0xb5, 0x25, 0x9c, + // 65303 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x0b, 0x74, 0x14, 0x47, + 0xb6, 0x20, 0xf8, 0x52, 0xfc, 0xa4, 0x00, 0xf1, 0x49, 0x03, 0x96, 0xb1, 0x8d, 0xcb, 0xb2, 0xbb, + 0x5b, 0xca, 0x96, 0x10, 0xa4, 0xff, 0x72, 0xdb, 0xee, 0x54, 0x49, 0xe0, 0x32, 0x3f, 0x39, 0x05, + 0xb8, 0x6d, 0xb7, 0x9b, 0x2d, 0xaa, 0x12, 0x51, 0x56, 0xa9, 0x4a, 0x5d, 0x55, 0x12, 0xe0, 0x7e, + 0xf3, 0xba, 0x24, 0x24, 0x90, 0x40, 0x3f, 0xd2, 0x20, 0x40, 0x88, 0x8f, 0x6c, 0x3e, 0x6a, 0x1b, + 0x24, 0xb0, 0x69, 0x28, 0x95, 0x4a, 0xe6, 0xcc, 0xec, 0xec, 0xce, 0x9b, 0x99, 0x3d, 0xb3, 0x3b, + 0xde, 0xef, 0xd9, 0x7d, 0x33, 0x3b, 0x67, 0xa9, 0xcc, 0xaa, 0x7a, 0xfb, 0xce, 0x6a, 0xf6, 0x9d, + 0x7d, 0x67, 0xf7, 0x78, 0x77, 0xce, 0xee, 0xc9, 0xb8, 0x91, 0x91, 0x91, 0x55, 0x25, 0x01, 0xb6, + 0x5f, 0xf7, 0xf3, 0x6c, 0xfb, 0xf8, 0x1c, 0x54, 0x37, 0x22, 0x6e, 0x44, 0xc6, 0xe7, 0xc6, 0xbd, + 0x37, 0xee, 0x07, 0xad, 0xf4, 0xf8, 0x5b, 0xc3, 0x11, 0x25, 0xd4, 0xec, 0x0e, 0xb8, 0x1b, 0x95, + 0xd0, 0xba, 0x96, 0x50, 0x30, 0x12, 0xe4, 0x97, 0xda, 0xa1, 0x6b, 0x9e, 0x68, 0x0c, 0x06, 0x1b, + 0xfd, 0x4a, 0x95, 0xbb, 0xc5, 0x57, 0xe5, 0x0e, 0x04, 0x82, 0x11, 0x77, 0xc4, 0x17, 0x0c, 0x84, + 0xa1, 0x36, 0x2d, 0xc5, 0xbf, 0xf6, 0xb4, 0xee, 0xad, 0x0a, 0x47, 0x42, 0xad, 0x9e, 0x08, 0x29, + 0xad, 0xc0, 0xff, 0x78, 0x2a, 0x1b, 0x95, 0x40, 0x65, 0x78, 0xbf, 0xbb, 0xb1, 0x51, 0x09, 0x55, + 0x05, 0x5b, 0x70, 0xfb, 0x3c, 0xb8, 0x1e, 0x6d, 0x73, 0xfb, 0x7d, 0x5e, 0x77, 0x44, 0xa9, 0x32, + 0xff, 0x20, 0x05, 0x6b, 0xb3, 0x3b, 0xd9, 0x1f, 0x72, 0xb7, 0xb4, 0x28, 0x21, 0xd2, 0xb0, 0xf4, + 0x68, 0x15, 0x5a, 0xe4, 0x84, 0x51, 0xf3, 0xbf, 0x42, 0x45, 0xe4, 0x03, 0x5c, 0xb5, 0x25, 0x9c, 0x83, 0x2b, 0x2b, 0xaa, 0xf9, 0xb9, 0x2a, 0xbd, 0x26, 0x58, 0x50, 0x71, 0x7d, 0x8d, 0xb3, 0x41, - 0x3b, 0xd4, 0x9d, 0x39, 0x38, 0x96, 0x9c, 0xbe, 0x9b, 0x3a, 0x3e, 0x96, 0x39, 0x7b, 0x28, 0xf5, - 0xd5, 0x25, 0x57, 0xed, 0x4c, 0xa2, 0x4f, 0xbf, 0x98, 0xd0, 0x12, 0x83, 0xc9, 0x58, 0xbc, 0xc6, + 0x3b, 0xdc, 0x95, 0x39, 0x34, 0x96, 0x9c, 0xbe, 0x9b, 0x3a, 0x31, 0x96, 0x39, 0x7b, 0x38, 0xf5, + 0xd5, 0x25, 0x57, 0xed, 0x4c, 0xa2, 0x57, 0xbf, 0x98, 0xd0, 0x12, 0x03, 0xc9, 0x58, 0xbc, 0xc6, 0xd9, 0x50, 0xb9, 0xf9, 0xe5, 0x86, 0xca, 0x5f, 0x18, 0xff, 0xc9, 0x56, 0x63, 0xfe, 0xe7, 0x68, - 0x31, 0xf9, 0xb1, 0xcd, 0xdd, 0xa2, 0x94, 0x14, 0xe0, 0x1e, 0xd6, 0xaa, 0xd2, 0xe3, 0x02, 0x0b, - 0x17, 0x97, 0x00, 0x52, 0x6d, 0xa8, 0x3f, 0x75, 0xf5, 0x86, 0xcc, 0x16, 0xf1, 0xa7, 0x38, 0xf4, - 0xc8, 0x1e, 0xc5, 0xab, 0x84, 0xf0, 0xc7, 0x3b, 0x29, 0xb1, 0xf3, 0x30, 0x2a, 0x45, 0x95, 0x1a, - 0x85, 0x7c, 0xe5, 0xe2, 0x66, 0xed, 0x4a, 0xa7, 0x7e, 0x7e, 0x24, 0x3d, 0x71, 0x19, 0x70, 0x27, - 0x63, 0xf1, 0x74, 0xc7, 0xf1, 0x4c, 0xe7, 0x15, 0xf8, 0x99, 0x1a, 0xee, 0x4a, 0xc6, 0xa2, 0x99, - 0x83, 0x63, 0x5a, 0xcf, 0xa1, 0x99, 0x44, 0x5f, 0xea, 0xf8, 0x58, 0x7a, 0xe2, 0xb2, 0xab, 0x36, - 0x3d, 0x7e, 0x43, 0x9b, 0x3e, 0x01, 0x15, 0xdf, 0x0c, 0x86, 0x23, 0xc9, 0xbb, 0xa3, 0x7a, 0xc7, - 0x84, 0x9c, 0xaf, 0x07, 0x7e, 0x33, 0x2a, 0x6c, 0x0d, 0x05, 0xdb, 0x7d, 0x5e, 0x25, 0x54, 0x32, - 0x1f, 0x53, 0x53, 0xa5, 0x4a, 0x15, 0x02, 0x05, 0x8a, 0x0e, 0xd2, 0x73, 0xfc, 0x58, 0xa6, 0xbb, - 0x3f, 0x35, 0x3d, 0x3e, 0x93, 0xe8, 0x4b, 0xc6, 0xe2, 0xc9, 0xf8, 0xb1, 0xd4, 0xcd, 0x29, 0xed, - 0xfc, 0x51, 0x57, 0xad, 0x4c, 0xeb, 0xf2, 0x2f, 0xa1, 0x85, 0x21, 0xa5, 0xc9, 0x17, 0x0c, 0x94, - 0x2c, 0xc0, 0xa8, 0x9e, 0x52, 0xa5, 0x27, 0x04, 0x02, 0x12, 0x79, 0x32, 0x3c, 0x7d, 0x71, 0xed, - 0xc2, 0x05, 0x42, 0x12, 0x29, 0xe3, 0xb7, 0xa0, 0x05, 0xed, 0xad, 0x1e, 0x57, 0x6d, 0xc9, 0x42, - 0xdc, 0xee, 0x45, 0x55, 0x7a, 0x4e, 0x00, 0x88, 0x28, 0x40, 0x33, 0xbd, 0x37, 0xaa, 0x8d, 0x8c, - 0xb5, 0xb7, 0x7a, 0x66, 0x12, 0x7d, 0xf0, 0xc1, 0xa9, 0x81, 0x09, 0xed, 0x93, 0x83, 0xc9, 0xd8, - 0xd1, 0xcc, 0xb9, 0xf3, 0xda, 0xdd, 0x6e, 0x6d, 0xf4, 0x73, 0x19, 0x9a, 0xf0, 0x6f, 0xa2, 0xa2, - 0xd6, 0x50, 0xf0, 0x43, 0xc5, 0x13, 0x71, 0xd5, 0x96, 0x2c, 0xc2, 0x18, 0x05, 0x55, 0xfa, 0x89, - 0x60, 0x41, 0xc5, 0x35, 0x16, 0xd6, 0xee, 0x2f, 0xd3, 0x1d, 0xc7, 0x53, 0xc3, 0x5d, 0x99, 0xd1, - 0xc9, 0xd4, 0xd9, 0x71, 0x57, 0xad, 0x6c, 0x55, 0xe3, 0x0f, 0x20, 0xd4, 0xd8, 0x16, 0xf6, 0x05, - 0x94, 0x70, 0xd8, 0x55, 0x5b, 0x52, 0x88, 0x51, 0xbd, 0xab, 0x4a, 0xbb, 0x04, 0x06, 0x2c, 0xbe, - 0x09, 0x2d, 0x53, 0x53, 0xc7, 0xb4, 0xf1, 0x61, 0x3c, 0x25, 0xc3, 0xda, 0x91, 0x51, 0x57, 0x6d, - 0x85, 0x23, 0xb7, 0x13, 0xb3, 0x6c, 0x26, 0xd1, 0x87, 0xa7, 0x4a, 0x3f, 0x77, 0x59, 0x8f, 0x0f, - 0x25, 0xe3, 0x03, 0xce, 0xad, 0xb5, 0x35, 0x32, 0x83, 0x95, 0xdf, 0x8b, 0x16, 0x2b, 0x81, 0x76, - 0x5f, 0x28, 0x18, 0x68, 0x51, 0x02, 0x91, 0x92, 0x22, 0xdc, 0xf7, 0x46, 0x55, 0x72, 0x0a, 0x2c, - 0x5c, 0x7c, 0xde, 0xea, 0x63, 0x62, 0x52, 0x8b, 0x1b, 0x7d, 0x90, 0x81, 0xc1, 0x23, 0x3c, 0x93, - 0xe8, 0x0b, 0x47, 0xdc, 0x4d, 0x33, 0x89, 0x3e, 0xaf, 0xd2, 0xd8, 0x66, 0xfc, 0xdb, 0x1a, 0x0a, - 0x7a, 0x65, 0x16, 0x05, 0xff, 0x36, 0x42, 0x4a, 0xa0, 0xc9, 0x17, 0x50, 0x76, 0x1c, 0x68, 0x55, - 0x4a, 0x10, 0xee, 0x68, 0x83, 0x2a, 0xad, 0x13, 0x18, 0xb0, 0xb9, 0x0c, 0x52, 0x89, 0x93, 0xfa, - 0x80, 0xaa, 0x25, 0x4e, 0xe8, 0x1f, 0x0f, 0xcc, 0x24, 0xfa, 0x9a, 0x5f, 0x0e, 0xdf, 0x8b, 0x76, - 0xb4, 0x28, 0xe1, 0x60, 0x58, 0x66, 0x6a, 0xf3, 0x1f, 0xa0, 0xc5, 0xbe, 0x70, 0xdd, 0x7e, 0x63, - 0x0b, 0xf8, 0xda, 0x95, 0x92, 0xc5, 0x0e, 0xae, 0xac, 0xb0, 0xe6, 0x55, 0x55, 0x7a, 0x59, 0x60, - 0xe1, 0x62, 0xb9, 0x7e, 0x7a, 0x42, 0x1b, 0xba, 0x02, 0x83, 0x92, 0x3a, 0x7a, 0x4d, 0xeb, 0xbf, - 0x08, 0xdd, 0x18, 0x93, 0x3c, 0x75, 0x3a, 0x3d, 0x6e, 0x2c, 0xf8, 0x3d, 0x6e, 0x7f, 0x58, 0x91, - 0xd9, 0x76, 0xfc, 0x2e, 0xba, 0x21, 0x31, 0xc9, 0x4b, 0x30, 0xc9, 0xcf, 0xab, 0xd2, 0x06, 0x81, - 0x85, 0x8b, 0xa5, 0x84, 0x66, 0xbc, 0x50, 0x67, 0x12, 0x7d, 0xd6, 0xfa, 0xbf, 0x17, 0xed, 0x08, - 0xfb, 0x02, 0x4d, 0x7e, 0x45, 0x66, 0x1b, 0xf0, 0xbb, 0xd0, 0x42, 0xbf, 0xbb, 0x51, 0xf1, 0x87, - 0x4b, 0x8a, 0x1d, 0xf3, 0xca, 0x16, 0x8b, 0xcf, 0xac, 0xcb, 0x62, 0x97, 0x64, 0xdf, 0xac, 0xdb, - 0x82, 0x6b, 0xd5, 0x05, 0x22, 0xa1, 0x03, 0x35, 0x8f, 0xa9, 0xd2, 0x6a, 0x81, 0xb4, 0x33, 0x79, - 0x80, 0x7e, 0xf1, 0x70, 0xea, 0xfa, 0x57, 0x32, 0x81, 0xf2, 0xaf, 0xa1, 0x45, 0x9e, 0x90, 0xe2, - 0x8e, 0x04, 0x43, 0x25, 0x4b, 0x31, 0xad, 0xcf, 0xa8, 0x92, 0x43, 0x30, 0x61, 0xe2, 0x2a, 0xb2, - 0xc5, 0xf0, 0x8c, 0x69, 0x3d, 0x67, 0xb5, 0xa9, 0x78, 0x3a, 0xda, 0x2d, 0x9b, 0xe5, 0xfc, 0x5a, - 0x84, 0xf0, 0x9f, 0xca, 0x0e, 0x5f, 0x8b, 0x52, 0xb2, 0xcc, 0xc0, 0x20, 0x33, 0x10, 0xa3, 0xbc, - 0xad, 0xd5, 0x6b, 0x96, 0x2f, 0x87, 0x72, 0x0b, 0xc2, 0x77, 0x14, 0xa0, 0xa2, 0x46, 0x4f, 0x58, - 0xf2, 0x7a, 0x83, 0x81, 0x70, 0xc9, 0x0a, 0xfc, 0x69, 0x3f, 0x9e, 0xed, 0xd3, 0x6a, 0xcc, 0x8a, - 0xf0, 0x75, 0x71, 0x4e, 0x95, 0x6e, 0x73, 0x82, 0xd5, 0x5e, 0x1c, 0xe3, 0x80, 0x44, 0xf2, 0xa5, - 0xa7, 0x6e, 0xa7, 0xef, 0x9e, 0x4d, 0x8f, 0xf6, 0x01, 0x83, 0x4d, 0x4d, 0x8f, 0xeb, 0x83, 0x6a, - 0x72, 0xea, 0xb6, 0x36, 0xde, 0x9b, 0xfe, 0xb4, 0x1b, 0x96, 0x39, 0x7c, 0x58, 0x32, 0x31, 0x9c, - 0xba, 0xf5, 0x89, 0x96, 0x38, 0x91, 0x8c, 0x1f, 0x4b, 0xc6, 0x8e, 0xc0, 0xfc, 0x02, 0x4f, 0x81, - 0x0a, 0x80, 0x47, 0x9b, 0x98, 0xd4, 0x27, 0x8e, 0x27, 0x63, 0x03, 0xe9, 0xd1, 0xcb, 0x5a, 0xb7, - 0x81, 0x01, 0xfa, 0x85, 0xfa, 0xda, 0x08, 0x61, 0xdd, 0xfa, 0xf5, 0x4f, 0xb5, 0x58, 0x4c, 0xeb, - 0x39, 0xa7, 0x5d, 0x3d, 0xaa, 0xf5, 0x9d, 0x4c, 0x4e, 0x1e, 0xd5, 0x86, 0x06, 0x00, 0x43, 0xfa, - 0xc6, 0xc1, 0xd4, 0xf1, 0xb1, 0x7b, 0xd1, 0x4e, 0xd9, 0xa2, 0x9a, 0xef, 0x2e, 0x40, 0x8b, 0x95, - 0xfd, 0x91, 0x90, 0x9b, 0x8c, 0x02, 0x8f, 0x47, 0xa1, 0x6c, 0xb6, 0x51, 0xa8, 0xb3, 0xaa, 0xc2, - 0x38, 0xc4, 0x38, 0x55, 0xba, 0xc5, 0x09, 0x2c, 0x0e, 0xf1, 0x52, 0xf6, 0x48, 0x64, 0x3e, 0x39, - 0xa7, 0x5d, 0x3a, 0xa9, 0xf7, 0xfe, 0x4e, 0xbb, 0x79, 0x22, 0x99, 0xb8, 0x98, 0x89, 0xaa, 0xc6, - 0x96, 0x37, 0x37, 0xa2, 0xc1, 0xc5, 0x31, 0xe7, 0x4a, 0xc6, 0xe2, 0x99, 0x4f, 0xba, 0x52, 0x27, - 0xce, 0x24, 0xe3, 0x7d, 0xfa, 0xc9, 0xc9, 0xaa, 0x64, 0xac, 0xd7, 0xf8, 0x47, 0x1f, 0xe9, 0xd7, - 0x8e, 0x8c, 0x6a, 0x27, 0x0e, 0x11, 0x04, 0xf8, 0xa0, 0x9a, 0xed, 0xfb, 0x53, 0x47, 0x6e, 0xeb, - 0xd1, 0x0e, 0x18, 0x85, 0xdc, 0x8f, 0x4f, 0xc6, 0x06, 0x60, 0x02, 0x8c, 0x51, 0x60, 0x69, 0xe6, - 0x77, 0xa2, 0xc2, 0xf0, 0x81, 0x70, 0x44, 0x69, 0x71, 0xd5, 0x96, 0x3c, 0x82, 0xd7, 0xe2, 0x2b, - 0xaa, 0xf4, 0xa2, 0x40, 0x81, 0xa2, 0xd0, 0xdc, 0xd6, 0xa8, 0x84, 0x02, 0x4a, 0x44, 0x09, 0x13, - 0x86, 0x3d, 0x32, 0xa6, 0x0d, 0x75, 0x25, 0xe3, 0xc7, 0xb4, 0xc9, 0x2f, 0xb5, 0xc1, 0x1b, 0xc9, - 0xd8, 0x91, 0xf4, 0xef, 0xbb, 0xf4, 0xf8, 0x90, 0xc1, 0xf9, 0xcd, 0x56, 0xfc, 0x2d, 0x0e, 0x21, - 0x18, 0x43, 0xbc, 0x23, 0x57, 0x62, 0xcc, 0x1f, 0x73, 0xaa, 0x34, 0xc8, 0x09, 0x4c, 0x81, 0x18, - 0xe5, 0x08, 0xf9, 0xe3, 0xa3, 0xa9, 0xa1, 0x43, 0x74, 0x67, 0x6a, 0xdd, 0xd7, 0xf4, 0x91, 0xde, - 0x64, 0xfc, 0x98, 0x7e, 0xea, 0x76, 0xea, 0xf8, 0x05, 0xfd, 0x44, 0xcf, 0x4c, 0xa2, 0x6f, 0xab, - 0xb4, 0x4d, 0xda, 0x54, 0x57, 0xbb, 0xdb, 0xb9, 0x65, 0x67, 0xc3, 0x8e, 0x3a, 0xb9, 0x0c, 0xd6, - 0x8d, 0xde, 0x7b, 0x3a, 0x35, 0x3e, 0x0a, 0x58, 0xca, 0x67, 0x12, 0x7d, 0xae, 0x6d, 0xb5, 0x75, - 0xf5, 0x75, 0xdb, 0x6a, 0xeb, 0xb6, 0xed, 0xa0, 0x35, 0x53, 0x47, 0xaf, 0xa5, 0x3e, 0x3f, 0x4a, - 0x59, 0x49, 0xfa, 0xf0, 0x67, 0xe9, 0xd1, 0xbe, 0xd4, 0xd4, 0x2d, 0xfd, 0xc8, 0xa5, 0x72, 0x99, - 0x21, 0x87, 0xdf, 0x8d, 0x16, 0xb6, 0xb8, 0x8d, 0x09, 0x2f, 0x59, 0x35, 0xf7, 0x86, 0xdf, 0x8a, - 0x6b, 0xc1, 0x52, 0x28, 0x55, 0xa5, 0xa7, 0x04, 0xd2, 0xce, 0xdc, 0xbb, 0xf0, 0xcb, 0xe1, 0xaa, - 0xd7, 0x7a, 0x4e, 0xa5, 0x47, 0xc7, 0x64, 0x52, 0xcc, 0x0f, 0x71, 0x68, 0x59, 0x40, 0x89, 0xec, - 0x0b, 0x86, 0x9a, 0x1b, 0x94, 0x48, 0xc4, 0x17, 0x68, 0x0a, 0x97, 0xac, 0x76, 0x70, 0x65, 0x8b, - 0xc5, 0xb5, 0xd9, 0x5d, 0x6d, 0xb3, 0x55, 0x03, 0x56, 0x9f, 0xdd, 0x56, 0x5c, 0x4f, 0x86, 0x6f, - 0xfa, 0x58, 0x6a, 0x6a, 0x44, 0xbb, 0x10, 0x4f, 0x8d, 0x46, 0xd3, 0xe3, 0x5f, 0xc1, 0xb1, 0x9c, - 0x19, 0x89, 0xa6, 0xaf, 0x74, 0xc0, 0x02, 0xd0, 0x4f, 0x4e, 0x02, 0x5c, 0xce, 0x46, 0xc1, 0xff, - 0x73, 0x8e, 0x4a, 0x81, 0x35, 0xee, 0xb0, 0xcf, 0x43, 0xe9, 0x7a, 0x14, 0xd3, 0x35, 0xdb, 0x10, - 0xb0, 0x75, 0x6b, 0x42, 0xaa, 0x14, 0x14, 0xf2, 0x62, 0x11, 0xdf, 0x21, 0xab, 0x06, 0xd3, 0x46, - 0x36, 0xb6, 0x49, 0x61, 0xf2, 0xab, 0xa3, 0xda, 0x95, 0x4e, 0x58, 0xd8, 0xa9, 0xde, 0x1e, 0x7d, - 0xe4, 0x1a, 0x9e, 0x7b, 0x72, 0x36, 0xb6, 0xb7, 0x7a, 0x52, 0xd7, 0x7b, 0x8d, 0xf9, 0x32, 0x3f, - 0x81, 0x7c, 0x11, 0x7c, 0x48, 0xde, 0xee, 0xf8, 0x7f, 0xc3, 0xa1, 0xd5, 0xa4, 0x40, 0xf2, 0xb6, - 0xbb, 0x03, 0x1e, 0x85, 0x7e, 0x4f, 0x09, 0xfe, 0x9e, 0x1f, 0xcd, 0xf2, 0x3d, 0xf6, 0xda, 0x35, - 0xbf, 0x55, 0xa5, 0x3f, 0x17, 0x1e, 0x35, 0xaa, 0x2a, 0xb9, 0xa8, 0x44, 0x37, 0x7c, 0x54, 0xfa, - 0xee, 0xd9, 0xcc, 0xe9, 0xdb, 0xa9, 0xde, 0x49, 0x3d, 0x7a, 0x35, 0xeb, 0xa3, 0xb4, 0xa1, 0x89, - 0xd4, 0xf1, 0x31, 0x5f, 0x6b, 0x7b, 0x18, 0x8a, 0x8d, 0x0f, 0x1b, 0x9f, 0xd4, 0xce, 0x8c, 0xa5, - 0xef, 0x0e, 0xa5, 0x47, 0xfb, 0x0c, 0x36, 0x89, 0x1b, 0xa4, 0xae, 0xf7, 0xde, 0x8b, 0x76, 0x1a, - 0x62, 0xdd, 0xa9, 0x8b, 0xa9, 0xde, 0x49, 0xad, 0xe7, 0xf3, 0xcc, 0x48, 0x54, 0xbf, 0xd9, 0x29, - 0xcf, 0xf2, 0x15, 0xfc, 0x7f, 0xcb, 0xa1, 0x25, 0x81, 0xa0, 0xd7, 0xfa, 0xac, 0xc7, 0xf0, 0x67, - 0x3d, 0x9e, 0xb3, 0x7c, 0xac, 0x3a, 0x35, 0x2a, 0xa7, 0x4a, 0x03, 0x9c, 0x60, 0x6b, 0x27, 0xfe, - 0x05, 0xf9, 0x86, 0x23, 0x9d, 0xa9, 0xce, 0xc9, 0x2c, 0xea, 0xf5, 0xbe, 0xce, 0xf4, 0xf4, 0x74, - 0xea, 0xec, 0xb8, 0x36, 0x7d, 0xc2, 0x90, 0x15, 0x82, 0x9e, 0x66, 0x25, 0xa4, 0x9f, 0xb8, 0xa1, - 0xf7, 0x8f, 0x03, 0x10, 0x26, 0x26, 0x97, 0x6c, 0x03, 0x38, 0x38, 0x91, 0x9c, 0xba, 0x9c, 0x8c, - 0xf5, 0x53, 0x9c, 0x35, 0xce, 0x06, 0x7d, 0x70, 0x28, 0xf9, 0xd5, 0x59, 0xc2, 0xb3, 0x06, 0x3b, - 0xf5, 0x13, 0x37, 0x64, 0x1b, 0x35, 0xfc, 0x17, 0x1c, 0x5a, 0x18, 0x8e, 0xb8, 0x23, 0x6d, 0xe1, - 0x92, 0x35, 0x98, 0x59, 0x9c, 0xe1, 0x54, 0xe9, 0x97, 0x02, 0x81, 0x89, 0x32, 0xcb, 0xe5, 0xa0, - 0x93, 0xf4, 0xc1, 0x69, 0xf8, 0xe9, 0x94, 0xeb, 0xa4, 0x1d, 0xae, 0x6d, 0x9b, 0x66, 0x12, 0x7d, - 0xf2, 0xce, 0x6d, 0xdb, 0xe0, 0xaf, 0xda, 0xba, 0x2d, 0x75, 0x04, 0xb8, 0x51, 0xda, 0xb2, 0x53, - 0xae, 0xc3, 0xac, 0xc1, 0xb5, 0xc3, 0x25, 0x6d, 0x71, 0xbd, 0x27, 0xed, 0x70, 0x6d, 0xdf, 0xf6, - 0x4d, 0xcd, 0x4b, 0xa1, 0x17, 0xe4, 0x42, 0xb3, 0xb5, 0xbc, 0x88, 0x34, 0x96, 0x0b, 0xcd, 0xb6, - 0xf2, 0x42, 0x68, 0x2a, 0x2f, 0xb5, 0xb7, 0x94, 0x09, 0x55, 0xc6, 0x39, 0x0e, 0xc7, 0x6a, 0xa8, - 0xe4, 0x71, 0xe6, 0x1c, 0x27, 0x30, 0xfb, 0x39, 0xae, 0x9f, 0xbd, 0xa5, 0x9f, 0xbc, 0x81, 0xcf, - 0x71, 0x52, 0xce, 0xb7, 0xa1, 0xc5, 0x64, 0x33, 0x62, 0x26, 0xf9, 0x04, 0x46, 0xd1, 0x60, 0xb0, - 0x5f, 0x16, 0x2e, 0xfe, 0x84, 0xdd, 0xe3, 0x94, 0x45, 0x96, 0xb5, 0x05, 0xbc, 0x4a, 0xc8, 0xef, - 0x3e, 0x50, 0x15, 0x6c, 0xc7, 0xff, 0x96, 0x7f, 0x53, 0xf3, 0x68, 0x68, 0x95, 0x5c, 0x68, 0xc2, - 0xe5, 0x45, 0xa4, 0x40, 0xfe, 0x33, 0x99, 0xc5, 0xc7, 0xff, 0x0b, 0x0e, 0x3d, 0xea, 0x6e, 0x8b, - 0x04, 0x37, 0x29, 0x01, 0x43, 0xfc, 0x51, 0x80, 0x97, 0x19, 0xeb, 0x25, 0x5c, 0xf2, 0x24, 0x96, - 0xcc, 0x08, 0xa3, 0x9e, 0xad, 0x96, 0x18, 0xb1, 0x9d, 0x73, 0x20, 0xb3, 0xe1, 0x4d, 0xac, 0xdd, - 0xf9, 0x42, 0xbb, 0x7e, 0x5a, 0x1b, 0x19, 0x83, 0x55, 0x55, 0xe1, 0x80, 0x19, 0xc7, 0x22, 0x5b, - 0x85, 0x43, 0xeb, 0xff, 0x92, 0x56, 0x4b, 0x4d, 0x0d, 0x42, 0xcd, 0xd4, 0x70, 0x97, 0x59, 0x39, - 0x39, 0x35, 0xc0, 0x22, 0x86, 0x75, 0x92, 0x8c, 0x5d, 0x4f, 0x0f, 0xdc, 0xd1, 0x06, 0x4f, 0xca, - 0xb3, 0x91, 0x63, 0xac, 0x9d, 0xc2, 0x88, 0xd2, 0xd2, 0xea, 0x77, 0x47, 0x94, 0x92, 0xb5, 0xf9, - 0xc5, 0x19, 0x57, 0x20, 0x1c, 0x31, 0xf6, 0xd1, 0x0e, 0x52, 0xcf, 0x19, 0x0c, 0xec, 0xf1, 0x35, - 0xd5, 0x04, 0x54, 0xa9, 0x59, 0xa0, 0x8d, 0xc5, 0xdd, 0xb3, 0x74, 0x91, 0x8c, 0xc5, 0x23, 0xa1, - 0x36, 0x45, 0x3f, 0x75, 0xbb, 0xc2, 0xc1, 0x92, 0x98, 0x3e, 0xfc, 0x99, 0x76, 0x64, 0xcc, 0x38, - 0xa1, 0x7a, 0x86, 0x7c, 0xa4, 0x87, 0x0a, 0x07, 0x08, 0x31, 0xe6, 0x6f, 0x7d, 0x6c, 0x54, 0x3f, - 0x77, 0x97, 0x28, 0x38, 0xb4, 0x2b, 0xfe, 0x5f, 0x71, 0xa8, 0x08, 0x1f, 0xc4, 0xae, 0xc0, 0x9e, - 0x60, 0xc9, 0x53, 0x73, 0x0b, 0x61, 0x75, 0x66, 0x45, 0x38, 0x71, 0x8e, 0x70, 0xaa, 0x74, 0x88, - 0x13, 0xac, 0xf6, 0xe2, 0x01, 0x63, 0x30, 0x3b, 0x4d, 0x59, 0x08, 0xe4, 0x05, 0xdc, 0x63, 0x85, - 0x03, 0x76, 0xb4, 0x12, 0x6e, 0xdc, 0xdd, 0x16, 0xf2, 0x57, 0xed, 0x53, 0x1a, 0xf7, 0x06, 0x83, - 0xcd, 0xbb, 0x7d, 0x2d, 0xee, 0x26, 0x43, 0x9b, 0xf6, 0xb5, 0xfb, 0xfc, 0x8a, 0xb7, 0x49, 0x01, - 0x40, 0xea, 0x7a, 0x2f, 0xdb, 0x58, 0xef, 0x39, 0x99, 0x8e, 0x76, 0xeb, 0xa7, 0x27, 0x32, 0x6a, - 0x8f, 0x36, 0x31, 0x99, 0x8c, 0xf5, 0x6b, 0x43, 0x7d, 0x86, 0xaa, 0x87, 0x59, 0x9a, 0x96, 0x30, - 0xf4, 0x18, 0xd9, 0xa2, 0x82, 0xdf, 0x8d, 0x0a, 0x5b, 0x82, 0xde, 0x36, 0xbf, 0xe2, 0xaa, 0x2d, - 0x71, 0xe0, 0xd5, 0xec, 0x54, 0xa5, 0x9f, 0x0b, 0x14, 0x48, 0xb5, 0x93, 0xb1, 0x51, 0xed, 0xdc, - 0x29, 0x57, 0x6d, 0x99, 0x53, 0xd2, 0xef, 0x4c, 0x69, 0x47, 0x2e, 0xc2, 0x0a, 0xd0, 0x4f, 0xdd, - 0x86, 0x92, 0xf4, 0xf4, 0xb5, 0xd4, 0xd5, 0x29, 0x87, 0x16, 0xbf, 0xa0, 0x25, 0x0e, 0x96, 0xcb, - 0xb4, 0x3d, 0xff, 0x17, 0x68, 0x29, 0xee, 0xcd, 0xd2, 0x98, 0x9f, 0xc6, 0xdd, 0xec, 0x52, 0xa5, - 0x06, 0x21, 0xab, 0x48, 0x94, 0xb4, 0x89, 0x84, 0xd6, 0x7d, 0x99, 0xaa, 0xc6, 0x20, 0x8d, 0x99, - 0x9a, 0xbe, 0x7e, 0xf1, 0x70, 0x7a, 0xe2, 0x10, 0x19, 0x24, 0x58, 0xa6, 0x86, 0xb0, 0xf1, 0xbb, - 0xb8, 0x16, 0x4d, 0x94, 0x99, 0x3d, 0x67, 0xa1, 0xe4, 0x7d, 0x68, 0x99, 0x2f, 0xec, 0x0c, 0xb6, - 0xb4, 0x50, 0x95, 0xb9, 0xa4, 0x14, 0xef, 0x98, 0x37, 0x54, 0xe9, 0x67, 0x42, 0x76, 0x99, 0xa5, - 0xcf, 0xc4, 0xb5, 0xee, 0x6b, 0x5a, 0xf7, 0x4d, 0xe8, 0xbb, 0x82, 0xd9, 0x14, 0xb4, 0xa7, 0xec, - 0xb6, 0xfc, 0x46, 0xb4, 0xd8, 0xab, 0x84, 0x3d, 0x21, 0x1f, 0xb6, 0x95, 0x94, 0x3c, 0x83, 0xbf, - 0xf3, 0x59, 0x55, 0x7a, 0x5a, 0x60, 0xe1, 0xa6, 0x16, 0x9d, 0x1a, 0x37, 0x4e, 0x46, 0x7d, 0x70, - 0x30, 0x7d, 0xf7, 0x86, 0xcc, 0x56, 0xe0, 0x2f, 0x73, 0x68, 0x19, 0x59, 0x55, 0x4e, 0x77, 0x44, - 0x69, 0x0a, 0x86, 0x0e, 0x94, 0x3c, 0x8b, 0x91, 0xfd, 0x46, 0x95, 0xf6, 0x0b, 0xd9, 0x65, 0xa2, - 0x62, 0x29, 0x49, 0x3d, 0x9f, 0x63, 0xe5, 0x7e, 0x2a, 0x7d, 0xa5, 0xc3, 0x90, 0x21, 0xe3, 0x03, - 0x86, 0xae, 0xde, 0x73, 0x88, 0x5a, 0x1f, 0xe0, 0xeb, 0xf4, 0xd3, 0x13, 0xc6, 0x36, 0x98, 0x8a, - 0xdf, 0x8b, 0x76, 0xc0, 0x88, 0x97, 0x35, 0xb6, 0xf9, 0xfc, 0x5e, 0x25, 0x54, 0xe5, 0x6b, 0x69, - 0x0d, 0x86, 0x22, 0x4a, 0xa8, 0xdc, 0x64, 0x04, 0xb4, 0xae, 0x9c, 0xdd, 0x2f, 0xbf, 0x0d, 0x15, - 0xf9, 0xc2, 0xbb, 0xc3, 0x7b, 0xdd, 0x21, 0xc5, 0x5b, 0xf2, 0x23, 0x3c, 0xa8, 0x58, 0xe9, 0xb4, - 0xa0, 0xe2, 0xd3, 0xcc, 0x70, 0xde, 0x4c, 0xc6, 0x3f, 0xcf, 0x1d, 0x4e, 0xb9, 0xd0, 0x17, 0x6e, - 0xc0, 0x95, 0xf9, 0xdd, 0x08, 0x19, 0x92, 0x2b, 0xec, 0xf3, 0x92, 0x1f, 0xe3, 0x2f, 0xc6, 0xb3, - 0xc4, 0x80, 0xc5, 0x75, 0xec, 0x12, 0x31, 0xce, 0xe4, 0xa3, 0x97, 0xf5, 0xd3, 0x13, 0x56, 0x05, - 0x28, 0xd6, 0x7a, 0xce, 0xc0, 0xf6, 0x92, 0x99, 0xb6, 0xfc, 0x15, 0x0e, 0x2d, 0x85, 0x0f, 0xa4, - 0xe3, 0xfa, 0x13, 0xdc, 0xcb, 0x5f, 0xa8, 0xd2, 0x6f, 0x84, 0xac, 0x22, 0xd1, 0xa7, 0x4d, 0x7f, - 0x9c, 0xf5, 0xc9, 0x26, 0x7f, 0x8b, 0x9b, 0xc3, 0x84, 0xd9, 0xcb, 0xdc, 0xe3, 0x6d, 0xf5, 0x5f, - 0xe5, 0xf1, 0x07, 0xdb, 0xbc, 0x40, 0x60, 0x05, 0x55, 0x8e, 0x53, 0xbf, 0x8b, 0xcb, 0x59, 0x5d, - 0xf3, 0xff, 0x8e, 0x43, 0x4b, 0x71, 0x65, 0xc9, 0xe3, 0x09, 0xb6, 0x05, 0x22, 0xae, 0xda, 0x92, - 0x32, 0x4c, 0xe8, 0x3f, 0xe4, 0x54, 0x69, 0x9a, 0x13, 0xb2, 0x0a, 0xc5, 0xcf, 0x88, 0x4c, 0x6e, - 0x19, 0x29, 0xe2, 0xc7, 0xd2, 0xb7, 0xae, 0x68, 0x83, 0x77, 0x5c, 0xb5, 0xb6, 0x9e, 0xee, 0x45, - 0x3b, 0x81, 0x5a, 0xed, 0xc8, 0x85, 0xf4, 0xc1, 0x69, 0x63, 0x72, 0x31, 0xa7, 0xa6, 0xf5, 0xb5, - 0xc3, 0xd7, 0xd3, 0x13, 0x1d, 0xf7, 0xa2, 0x9d, 0xa9, 0xab, 0x1d, 0x20, 0xcf, 0x6b, 0x23, 0x71, - 0xfd, 0xcc, 0x44, 0x32, 0x76, 0x34, 0x35, 0x75, 0x21, 0x19, 0x8b, 0x82, 0xd8, 0x8f, 0xfb, 0x87, - 0x16, 0x86, 0xb4, 0x17, 0xb5, 0xc4, 0x7f, 0xa8, 0x9e, 0x8a, 0x7f, 0x99, 0x1a, 0x1f, 0xa5, 0xdc, - 0x87, 0xc5, 0x2d, 0x67, 0x11, 0xcf, 0x1f, 0xe4, 0xd0, 0x7c, 0x77, 0x48, 0x71, 0x97, 0x94, 0x63, - 0xb1, 0xe8, 0xb1, 0x5c, 0x8e, 0x6a, 0x54, 0x0f, 0x29, 0xee, 0x9a, 0x1d, 0xaa, 0xf4, 0xb6, 0x80, - 0xeb, 0x8a, 0x2e, 0xb2, 0xe6, 0xa7, 0x6e, 0x69, 0xf1, 0x2b, 0xf0, 0xc1, 0xac, 0x59, 0xaa, 0xcc, - 0x90, 0x3e, 0x7b, 0xee, 0x24, 0x63, 0xfd, 0x7a, 0xdf, 0x61, 0x6d, 0x7c, 0xd8, 0x38, 0x03, 0xce, - 0x10, 0xbb, 0x21, 0x0c, 0x87, 0x59, 0xbf, 0x5c, 0xc6, 0x08, 0xf9, 0x43, 0x1c, 0x5a, 0x08, 0x4c, - 0xab, 0x44, 0xc0, 0x74, 0xac, 0xc9, 0xa6, 0x63, 0x2b, 0xb0, 0xb4, 0xc0, 0x9e, 0x60, 0x8d, 0xac, - 0x4a, 0xdb, 0x05, 0x52, 0x5d, 0xac, 0x63, 0x49, 0x01, 0xb6, 0x98, 0x8c, 0x1d, 0x49, 0xc6, 0x8e, - 0xea, 0xe7, 0x6f, 0xeb, 0xa7, 0x6e, 0x6b, 0xd3, 0x1f, 0x6b, 0xbd, 0xfd, 0xa6, 0xf1, 0x6f, 0x58, - 0x3b, 0x32, 0x9a, 0x8c, 0x1d, 0x05, 0x76, 0x09, 0xac, 0xd3, 0x34, 0xa4, 0x01, 0x3a, 0xe3, 0x68, - 0x5c, 0x65, 0x2e, 0xbb, 0x60, 0x20, 0xa0, 0x78, 0x22, 0x44, 0xe2, 0x2a, 0xf9, 0xe9, 0x9c, 0xd2, - 0xb0, 0xbd, 0x72, 0xcd, 0x4e, 0x55, 0x92, 0x85, 0xfc, 0x88, 0xc4, 0x57, 0xc8, 0x6a, 0x49, 0x44, - 0xb5, 0xa1, 0x09, 0xed, 0x50, 0xb7, 0x76, 0xe9, 0x64, 0x6a, 0xfa, 0x58, 0x7a, 0xfc, 0x2b, 0x56, - 0x8f, 0xd3, 0xee, 0x76, 0x67, 0x46, 0xa7, 0x40, 0x22, 0xd4, 0xaf, 0x9b, 0x22, 0x60, 0x7e, 0x8c, - 0x6b, 0x5e, 0x41, 0x8b, 0x19, 0x83, 0x0a, 0xbf, 0x1c, 0xcd, 0x6b, 0x56, 0x0e, 0x80, 0x21, 0x57, - 0x36, 0xfe, 0xe4, 0x57, 0xa2, 0x05, 0xed, 0x6e, 0x7f, 0x1b, 0x31, 0xbd, 0xca, 0xf0, 0xa3, 0xba, - 0xe0, 0x65, 0x6e, 0xcd, 0xbb, 0x68, 0xa9, 0xdd, 0x60, 0x91, 0xa7, 0xf5, 0x06, 0xb6, 0x75, 0x1e, - 0xc9, 0xb9, 0x66, 0xf3, 0xf6, 0xd6, 0x70, 0xbd, 0xbf, 0xad, 0xc9, 0x17, 0x60, 0x51, 0xbf, 0x8f, - 0x96, 0x67, 0x5b, 0x01, 0xbe, 0x3f, 0xe4, 0xdb, 0xd1, 0x62, 0x46, 0xa5, 0xcc, 0x83, 0x57, 0xb0, - 0xe3, 0x5d, 0x99, 0x4f, 0xdc, 0x67, 0x11, 0xfe, 0x0c, 0x2d, 0xb5, 0x0b, 0x0d, 0x0f, 0x33, 0x8c, - 0xd5, 0xaf, 0xa9, 0x52, 0x35, 0x7a, 0x59, 0x30, 0x2d, 0xea, 0x62, 0x25, 0x98, 0x90, 0x59, 0x79, - 0x16, 0xec, 0xcb, 0xc9, 0xf8, 0x00, 0xe8, 0xd1, 0xac, 0x7c, 0x5e, 0xfa, 0x1f, 0x8a, 0xd1, 0x7c, - 0x83, 0x20, 0xfe, 0x65, 0xb4, 0xd0, 0x90, 0xf2, 0xa9, 0x19, 0xde, 0xa1, 0x4a, 0x4f, 0x0a, 0x04, - 0x24, 0x3e, 0x42, 0x96, 0x77, 0xfc, 0x98, 0x29, 0x2a, 0xb9, 0x6a, 0x65, 0x52, 0xc8, 0xbf, 0x82, - 0x16, 0xf9, 0x02, 0x01, 0x25, 0xe4, 0xaa, 0x27, 0xf6, 0x75, 0x6c, 0x3b, 0x36, 0x61, 0xe2, 0x0a, - 0x68, 0x8b, 0x2d, 0x4c, 0xc7, 0x92, 0xb1, 0x29, 0x57, 0xbd, 0x6c, 0x96, 0xf1, 0xef, 0xa3, 0x25, - 0x26, 0x42, 0x2c, 0x57, 0x83, 0x51, 0xfd, 0x25, 0x55, 0x7a, 0x5e, 0xb0, 0x15, 0x88, 0xcf, 0xea, - 0x23, 0x71, 0xed, 0xfc, 0x51, 0x62, 0x67, 0xbb, 0x7e, 0x2a, 0x75, 0xed, 0x4a, 0x32, 0xf6, 0x05, - 0xd5, 0x2e, 0x08, 0x3b, 0xb5, 0xb5, 0xe1, 0x7f, 0x8a, 0xe6, 0x39, 0xeb, 0x77, 0x62, 0xd3, 0x78, - 0x31, 0x98, 0xfa, 0x8c, 0xdf, 0xe2, 0x32, 0xa0, 0xc7, 0x59, 0xbf, 0x93, 0x6c, 0x40, 0x03, 0xca, - 0xaf, 0x43, 0xf3, 0x5a, 0x94, 0x16, 0x6c, 0xfc, 0x2e, 0xae, 0x79, 0x42, 0x95, 0x1e, 0x13, 0x8c, - 0xdf, 0x22, 0x4f, 0x89, 0xd7, 0xae, 0x9f, 0x36, 0xeb, 0xb7, 0x28, 0x2d, 0xfc, 0xcb, 0x68, 0xde, - 0xa6, 0xfa, 0x9d, 0xd8, 0xe8, 0x5d, 0x5c, 0xf3, 0x63, 0x55, 0x7a, 0x46, 0x30, 0x7e, 0x8b, 0x4f, - 0x40, 0xfd, 0x4d, 0x26, 0x72, 0x96, 0xc2, 0xf5, 0xb2, 0x51, 0x85, 0x1f, 0xb4, 0xd4, 0x27, 0x30, - 0x70, 0xef, 0x53, 0xa5, 0x08, 0xd5, 0x9e, 0x3e, 0x04, 0x04, 0x30, 0x3b, 0x26, 0x8e, 0x1e, 0xfd, - 0xe2, 0xa4, 0xde, 0x3f, 0xae, 0x25, 0x0c, 0x59, 0x2e, 0x99, 0x88, 0xa5, 0x12, 0xbf, 0xd3, 0xc6, - 0x87, 0x93, 0x93, 0xbd, 0xa9, 0xe1, 0xae, 0x99, 0x44, 0xaf, 0xa5, 0x4d, 0x55, 0x38, 0xb0, 0x42, - 0x54, 0x87, 0xff, 0x34, 0xd5, 0xa5, 0x0a, 0xc7, 0x46, 0xc9, 0xb5, 0xa5, 0xae, 0xb6, 0xc2, 0x31, - 0x8b, 0x6e, 0x24, 0xa1, 0x85, 0x1f, 0x05, 0x03, 0x0a, 0x35, 0x93, 0x97, 0xab, 0xd2, 0x8f, 0x85, - 0xf9, 0x06, 0x48, 0x5c, 0x4b, 0xbe, 0x7f, 0xd0, 0x50, 0x91, 0xb5, 0xbe, 0x78, 0xf6, 0x88, 0x93, - 0x86, 0xfc, 0x9f, 0xa3, 0xc5, 0xc6, 0x6a, 0xd8, 0x14, 0x0a, 0xb6, 0xb5, 0xba, 0x6a, 0x89, 0xc9, - 0xfb, 0x3d, 0x55, 0x7a, 0x47, 0x60, 0xe1, 0xe2, 0x9b, 0x44, 0x7a, 0xec, 0x8d, 0x6a, 0x37, 0xcf, - 0xa7, 0x86, 0xbb, 0xb6, 0x99, 0x65, 0x0e, 0x57, 0x6d, 0x85, 0x83, 0xc5, 0x5c, 0x96, 0x9c, 0xea, - 0x76, 0x4a, 0xa4, 0xf7, 0x69, 0x55, 0xbb, 0x79, 0x3e, 0x19, 0x1f, 0xa0, 0xa8, 0xca, 0x65, 0x16, - 0x2d, 0xbf, 0x91, 0xbd, 0x45, 0x02, 0x2b, 0x78, 0x99, 0x2a, 0xfd, 0x88, 0xbd, 0x45, 0x2a, 0xc9, - 0xea, 0x99, 0x0a, 0x8a, 0xec, 0x6d, 0xd1, 0x06, 0x34, 0x6f, 0x57, 0xbd, 0x13, 0xdb, 0xbc, 0xc9, - 0x2a, 0x36, 0x7e, 0x8b, 0xab, 0xb2, 0xda, 0xee, 0xaa, 0x77, 0x3a, 0x5c, 0xb5, 0xb2, 0x51, 0xc6, - 0xbf, 0x4f, 0xef, 0x4d, 0x96, 0x58, 0x52, 0xb4, 0x79, 0x6f, 0xf2, 0x22, 0xdb, 0x10, 0x8e, 0x1d, - 0xcb, 0xea, 0x30, 0x79, 0x57, 0xbb, 0x73, 0x7e, 0x26, 0xd1, 0xa7, 0xdf, 0xb9, 0xa9, 0x8d, 0x7c, - 0x69, 0x0c, 0xec, 0x91, 0x8b, 0xda, 0x9d, 0xf3, 0xa9, 0xeb, 0xbd, 0xf4, 0x6e, 0x65, 0x1b, 0x5a, - 0xd8, 0xea, 0x0e, 0x87, 0xf7, 0x79, 0x4b, 0x8a, 0xad, 0xcb, 0x15, 0x02, 0x12, 0xcb, 0xb5, 0xf1, - 0xf3, 0x06, 0x2a, 0xd3, 0x8e, 0xaa, 0x4d, 0x1c, 0x4a, 0x5d, 0xec, 0xa8, 0x70, 0x10, 0xcb, 0x0b, - 0x98, 0x14, 0xaf, 0x7e, 0xaa, 0x4d, 0x1c, 0x92, 0x49, 0x13, 0xfe, 0x03, 0x84, 0x67, 0x15, 0x5b, - 0xb2, 0x8b, 0x6b, 0x5c, 0xaa, 0xb4, 0x51, 0x20, 0x13, 0x28, 0xfe, 0x2c, 0x6b, 0xa2, 0xf1, 0x3d, - 0x07, 0x3b, 0x21, 0xaf, 0x3a, 0x2c, 0x73, 0x30, 0x96, 0x24, 0xe0, 0x54, 0x4d, 0xc6, 0x07, 0x9c, - 0x92, 0x8c, 0xd1, 0xf2, 0x12, 0x2a, 0xf4, 0x2a, 0xed, 0x3e, 0x83, 0x39, 0x80, 0xa9, 0xbb, 0xe6, - 0x47, 0xaa, 0x54, 0x2a, 0x50, 0xa0, 0xb8, 0xda, 0x29, 0x39, 0xcc, 0x2d, 0x9a, 0x1e, 0xff, 0x4a, - 0xbb, 0x74, 0xd8, 0x55, 0xab, 0x0d, 0xde, 0x91, 0x69, 0x0d, 0x5e, 0x41, 0x4b, 0x8d, 0x89, 0x35, - 0x55, 0x3f, 0x57, 0x2d, 0xd8, 0xc4, 0x6b, 0x0c, 0x2e, 0x27, 0x64, 0x15, 0x89, 0x65, 0x84, 0x66, - 0x53, 0xf8, 0x21, 0xa3, 0x8d, 0x95, 0x38, 0xb2, 0x9e, 0x4c, 0x39, 0xcb, 0xde, 0x92, 0xf7, 0xa0, - 0x42, 0x0c, 0x31, 0x78, 0xce, 0x0a, 0xdc, 0xc1, 0x26, 0x55, 0xaa, 0x15, 0x28, 0x50, 0x7c, 0x99, - 0x6c, 0x43, 0xac, 0xc2, 0x9b, 0x92, 0x9e, 0xd6, 0xd7, 0xad, 0x0d, 0x7d, 0xee, 0xdc, 0xb5, 0xb5, - 0xca, 0x55, 0xeb, 0x64, 0xd0, 0x53, 0x81, 0xd9, 0xb9, 0x6b, 0xab, 0x4c, 0x71, 0xf0, 0x3b, 0xa0, - 0x13, 0x7c, 0xf1, 0xc8, 0xe3, 0x4e, 0x5e, 0x56, 0xa5, 0x17, 0x04, 0x0a, 0x14, 0xcb, 0x09, 0xfd, - 0xf8, 0xd6, 0xb1, 0xc2, 0x01, 0x82, 0xab, 0x36, 0xd4, 0x95, 0x8c, 0x7d, 0x66, 0xc8, 0x4e, 0x4c, - 0xa1, 0x4c, 0x1b, 0xf1, 0xaf, 0xa3, 0x22, 0xc2, 0x3d, 0xdb, 0x5f, 0x24, 0x66, 0x60, 0xcc, 0xaa, - 0x2d, 0xa8, 0xb8, 0x1c, 0x9a, 0xfa, 0x5a, 0xdb, 0x5f, 0xd4, 0x46, 0x6e, 0x68, 0xe7, 0xa2, 0xb2, - 0x55, 0xc8, 0x6f, 0x44, 0x85, 0xc6, 0x64, 0x61, 0xaa, 0x56, 0x5a, 0x17, 0x6c, 0x14, 0x28, 0x3e, - 0x6e, 0x2d, 0xda, 0x91, 0x31, 0xba, 0x1e, 0x4c, 0x3a, 0xcc, 0x6a, 0xbc, 0x82, 0x16, 0x46, 0xdc, - 0xe1, 0x66, 0x57, 0x6d, 0xc9, 0x2a, 0x8c, 0x65, 0xab, 0x2a, 0xbd, 0x25, 0x10, 0x90, 0xf8, 0x73, - 0x42, 0xbc, 0x79, 0xaf, 0x95, 0x9c, 0x9a, 0x22, 0xf7, 0x6a, 0xc9, 0xa9, 0x6e, 0x6d, 0x64, 0x2c, - 0x75, 0xfc, 0xcb, 0xf4, 0xc4, 0x1d, 0x30, 0x46, 0xe3, 0x6b, 0x88, 0xe9, 0x74, 0xec, 0x33, 0xd2, - 0x2f, 0x36, 0x5d, 0xc9, 0x04, 0x53, 0xf5, 0xbb, 0xaa, 0xb4, 0x0b, 0xed, 0x10, 0xf0, 0x19, 0x25, - 0x6e, 0x21, 0xd7, 0xa3, 0x70, 0x18, 0xe5, 0x3b, 0xdb, 0x58, 0xee, 0x69, 0x08, 0xa8, 0x9f, 0x7c, - 0x4e, 0x76, 0x77, 0x32, 0x86, 0xb9, 0x47, 0x93, 0xc1, 0x31, 0x60, 0xe5, 0x96, 0xde, 0x59, 0x82, - 0x96, 0xda, 0x2d, 0xb7, 0xfc, 0x2e, 0xaa, 0x80, 0xb9, 0xea, 0xdb, 0x9f, 0x77, 0xba, 0x6a, 0x65, - 0x72, 0x1a, 0x56, 0xa8, 0x52, 0xb9, 0x90, 0x5d, 0x26, 0xae, 0x26, 0xc2, 0x7e, 0x74, 0xca, 0x00, - 0xc1, 0x58, 0xeb, 0x37, 0x2f, 0xca, 0xd9, 0x15, 0x79, 0x0f, 0x5a, 0x16, 0x56, 0x42, 0x78, 0x8d, - 0x9b, 0x78, 0x0b, 0x2c, 0x0b, 0x7e, 0x76, 0x99, 0xf8, 0x0c, 0xe0, 0x25, 0x60, 0x62, 0x74, 0x1d, - 0xee, 0xca, 0xea, 0x24, 0xab, 0x15, 0x2f, 0xa3, 0xe2, 0x16, 0xf7, 0x7e, 0x63, 0xa0, 0xea, 0x83, - 0xde, 0x6d, 0x6d, 0x2d, 0xf8, 0x34, 0x2d, 0x06, 0xd2, 0xed, 0x25, 0x26, 0x37, 0x4c, 0xc6, 0x8e, - 0xe8, 0x23, 0x51, 0xed, 0xd2, 0xd5, 0xfa, 0xa0, 0x57, 0x3f, 0x71, 0x23, 0x73, 0x78, 0x50, 0xb6, - 0x57, 0xe4, 0x77, 0x61, 0x9c, 0x0d, 0xd0, 0x93, 0x81, 0x13, 0x4e, 0xd3, 0xf5, 0xaa, 0x54, 0x29, - 0xd8, 0x4b, 0xc4, 0x27, 0xc8, 0x60, 0x60, 0x84, 0xa9, 0xe1, 0x2e, 0x52, 0xc4, 0xe0, 0xb5, 0x2a, - 0xf3, 0xfd, 0x1c, 0x5a, 0xa2, 0x04, 0xdc, 0x8d, 0x7e, 0x65, 0x57, 0xbd, 0xd3, 0x19, 0xf0, 0xe1, - 0x83, 0xb7, 0xb0, 0xc6, 0xa7, 0x4a, 0x7b, 0x04, 0x5b, 0x81, 0xb8, 0x8b, 0xfd, 0x05, 0x5a, 0x25, - 0xc8, 0xaf, 0xbb, 0xea, 0x9d, 0x95, 0xce, 0x6d, 0x2e, 0xb0, 0xb5, 0x19, 0x12, 0x75, 0x62, 0xb0, - 0x2c, 0x39, 0x7d, 0x37, 0x7d, 0x70, 0xba, 0xbd, 0xd5, 0x53, 0xe9, 0x09, 0xf8, 0x00, 0x66, 0x68, - 0x6a, 0xfa, 0xc9, 0x1b, 0xda, 0x27, 0xe7, 0xf5, 0xdf, 0x77, 0xa4, 0xc6, 0x8e, 0x42, 0xe3, 0x72, - 0xd9, 0xd6, 0x0b, 0xaf, 0x18, 0xe4, 0xf8, 0x1a, 0xda, 0x1a, 0x03, 0x4a, 0xc4, 0x55, 0x1b, 0x2e, - 0x59, 0xe8, 0x98, 0x57, 0x56, 0x54, 0x23, 0xa9, 0xd2, 0xeb, 0x82, 0xad, 0x40, 0x5c, 0x97, 0xa7, - 0xdb, 0x64, 0xec, 0x68, 0x05, 0x9c, 0xcd, 0xa9, 0xe9, 0x63, 0x5a, 0xff, 0x68, 0x6a, 0xb8, 0x4b, - 0xbb, 0x3e, 0x94, 0x9a, 0x3e, 0xe6, 0xaa, 0x95, 0x6d, 0xad, 0xf9, 0x73, 0x1c, 0x5a, 0x12, 0xc6, - 0xbf, 0x1a, 0x82, 0x6d, 0x21, 0x8f, 0x82, 0x25, 0x80, 0xc5, 0xe2, 0x13, 0xd9, 0x22, 0x62, 0x03, - 0x53, 0xa7, 0xe6, 0x7d, 0x55, 0xfa, 0x85, 0xb0, 0xc2, 0x17, 0xde, 0x16, 0x0c, 0x34, 0x44, 0xdc, - 0x11, 0x9f, 0xc7, 0xd5, 0xba, 0xd5, 0xd8, 0x0d, 0x4e, 0x18, 0x70, 0x42, 0x10, 0xf9, 0x5a, 0x53, - 0xed, 0xce, 0x9c, 0x3b, 0xaf, 0x9d, 0x8d, 0x6b, 0xe3, 0xc3, 0xae, 0x7a, 0x7a, 0x23, 0x5b, 0xed, - 0xd8, 0x28, 0x6d, 0x69, 0xa8, 0x73, 0x30, 0x65, 0xb2, 0x8d, 0x1c, 0x43, 0x25, 0x5b, 0xea, 0x0b, - 0xb3, 0xbd, 0x60, 0x91, 0xa0, 0xf0, 0xef, 0x96, 0x86, 0xac, 0x2e, 0xf9, 0x7f, 0x80, 0x1e, 0xf1, - 0xf8, 0xdd, 0xbe, 0x96, 0xba, 0xfd, 0xad, 0xbe, 0x90, 0xe2, 0x6d, 0x50, 0x3c, 0xc1, 0x80, 0x37, - 0x8c, 0x85, 0x8a, 0xe2, 0x9a, 0xcd, 0xaa, 0xf4, 0xa6, 0x90, 0xaf, 0x5c, 0xdc, 0xf0, 0x00, 0x53, - 0xe3, 0xaa, 0xd7, 0xce, 0x9e, 0xd7, 0x8f, 0x1b, 0xfa, 0x59, 0xe6, 0xd4, 0x2d, 0x39, 0x1f, 0x1e, - 0xbe, 0x19, 0x2d, 0x6f, 0x69, 0xf3, 0x47, 0x7c, 0xa6, 0x7e, 0x65, 0xec, 0x56, 0x84, 0xd7, 0x03, - 0x36, 0x4a, 0xe4, 0x14, 0x8a, 0x65, 0xac, 0x2d, 0xcf, 0x80, 0x54, 0x80, 0x02, 0x8c, 0xf5, 0x5d, - 0x72, 0x4d, 0x8a, 0x01, 0x72, 0x4e, 0x5b, 0xbe, 0x0d, 0x15, 0x7a, 0x7c, 0xde, 0x50, 0x43, 0x44, - 0x69, 0xc5, 0x72, 0x47, 0x31, 0x38, 0x29, 0x50, 0xa0, 0xf8, 0x16, 0x18, 0x2e, 0xb5, 0x9e, 0x43, - 0x99, 0xee, 0x7e, 0x03, 0xaa, 0x5f, 0xbf, 0x9c, 0x39, 0x71, 0x17, 0xf4, 0xb3, 0x32, 0x7a, 0xf4, - 0xa4, 0x8e, 0x5f, 0x48, 0xc6, 0xaf, 0x82, 0xff, 0xc0, 0xf3, 0xeb, 0x5f, 0x79, 0xf1, 0x5e, 0xb4, - 0x43, 0xeb, 0xbe, 0x9d, 0x9c, 0x3a, 0x09, 0x20, 0x71, 0xfd, 0xf3, 0x2f, 0x97, 0xcb, 0x14, 0x2b, - 0xff, 0x5b, 0x54, 0x6c, 0xf2, 0xa8, 0x56, 0xe6, 0x22, 0x1e, 0xf7, 0x6d, 0x2f, 0x31, 0xd5, 0x5c, - 0xca, 0x85, 0x58, 0xe3, 0x76, 0x99, 0xaf, 0xb5, 0xfd, 0xf9, 0x2a, 0xe3, 0xa0, 0xa9, 0xf2, 0xb6, - 0xb9, 0xfd, 0xe5, 0x15, 0xa9, 0xb3, 0xe3, 0x86, 0xd2, 0x6b, 0x52, 0x65, 0x14, 0x43, 0x4d, 0xd9, - 0x8e, 0xd5, 0xce, 0x69, 0x5f, 0xc4, 0x63, 0x5c, 0x9c, 0x97, 0xd3, 0xbe, 0x98, 0xcb, 0x69, 0x5f, - 0xcc, 0xcb, 0x69, 0x5f, 0xcc, 0xe5, 0xb4, 0x80, 0x77, 0x69, 0x5e, 0x4e, 0xfb, 0xe2, 0x7d, 0x38, - 0xed, 0x8b, 0x79, 0x39, 0x2d, 0x6e, 0x55, 0xfa, 0x6f, 0x39, 0xb4, 0x84, 0xdd, 0xa2, 0xfc, 0xbb, - 0x68, 0x5e, 0x40, 0xd9, 0x57, 0xc2, 0x61, 0xd3, 0xf0, 0x63, 0xb9, 0xd7, 0x83, 0xfb, 0xa0, 0x36, - 0x7c, 0x9c, 0x51, 0x55, 0x2c, 0xcd, 0xbf, 0x58, 0xe1, 0x60, 0x84, 0x3d, 0x29, 0x1b, 0x15, 0xf9, - 0x36, 0xb4, 0x48, 0xd9, 0xef, 0x0b, 0x47, 0x14, 0x2f, 0xd1, 0x27, 0x1d, 0xd9, 0xe8, 0xeb, 0xa0, - 0x98, 0x72, 0x19, 0xf8, 0x54, 0xb3, 0x95, 0xf8, 0xd3, 0x7c, 0x3d, 0xd9, 0xaf, 0x00, 0x52, 0xc3, - 0x5d, 0xa4, 0x4b, 0xb3, 0x55, 0xe9, 0x36, 0x43, 0x85, 0xb6, 0xe3, 0xe5, 0xab, 0xd1, 0x3c, 0x9f, - 0x37, 0x8c, 0xbf, 0x92, 0x08, 0xd8, 0xc6, 0x6f, 0x71, 0x6d, 0xea, 0xec, 0x2d, 0x7d, 0xe0, 0x72, - 0x16, 0x4e, 0x93, 0x03, 0x86, 0x65, 0xa3, 0x52, 0xe9, 0x37, 0x1c, 0x2a, 0xa2, 0xe3, 0xc0, 0xd7, - 0xa3, 0xf9, 0x2d, 0xee, 0x70, 0x33, 0x3e, 0x5c, 0x8b, 0x6b, 0x7e, 0xa6, 0x4a, 0xaf, 0x08, 0x18, - 0x20, 0x6e, 0x80, 0x01, 0x20, 0x1c, 0x1c, 0x48, 0x06, 0xd2, 0xf4, 0x53, 0xb7, 0xe9, 0xe2, 0xd3, - 0x07, 0x7e, 0x97, 0xba, 0xd8, 0xa1, 0x5d, 0xba, 0xaa, 0xdd, 0x18, 0x94, 0x71, 0x43, 0x03, 0x23, - 0x16, 0x6d, 0xe1, 0x58, 0x05, 0x8c, 0x58, 0x83, 0x99, 0x13, 0x23, 0xc8, 0xd9, 0xc6, 0xb8, 0x0f, - 0x77, 0x51, 0x51, 0x87, 0x48, 0xb3, 0x2e, 0xb4, 0xc0, 0xd7, 0xea, 0x0c, 0x44, 0xc8, 0x31, 0xfa, - 0x9c, 0x2a, 0xad, 0x17, 0x00, 0x22, 0xfe, 0xe4, 0x3e, 0x54, 0xba, 0xea, 0x93, 0xb1, 0xcf, 0xf4, - 0x13, 0x37, 0x64, 0xa8, 0x5f, 0xfa, 0x1f, 0x17, 0xa1, 0x47, 0xf2, 0xdc, 0xc5, 0xf2, 0x1e, 0x54, - 0xb0, 0xbd, 0x81, 0x48, 0x18, 0x0d, 0xaa, 0x54, 0x2f, 0x14, 0x6c, 0x6f, 0x10, 0xdf, 0x62, 0xf7, - 0xdb, 0xf6, 0x06, 0x62, 0xd7, 0xca, 0x9c, 0x18, 0xd1, 0x0e, 0x0e, 0xba, 0x6a, 0xab, 0x88, 0x79, - 0x1a, 0xff, 0x34, 0x04, 0x53, 0x43, 0x00, 0xd5, 0x4f, 0xdd, 0x66, 0x6d, 0x5c, 0x66, 0xdd, 0x72, - 0xb9, 0x60, 0x7b, 0x03, 0x2f, 0xa1, 0x45, 0xed, 0x4a, 0x28, 0x6c, 0xa8, 0x28, 0x30, 0x38, 0x3f, - 0x51, 0xa5, 0x67, 0x05, 0x13, 0x26, 0x3e, 0x66, 0x39, 0x0d, 0x58, 0x5b, 0x1c, 0x5f, 0xf0, 0xca, - 0x66, 0x1d, 0xfe, 0x44, 0x81, 0xe5, 0xb5, 0xe3, 0x6e, 0x0a, 0x97, 0xcc, 0xc3, 0xeb, 0xfc, 0xf9, - 0x07, 0xb8, 0x6e, 0x36, 0x61, 0x46, 0x33, 0xb8, 0x10, 0x49, 0x70, 0xaa, 0x14, 0xe3, 0x04, 0x16, - 0x9f, 0x38, 0x66, 0xba, 0x16, 0x9c, 0x8d, 0x69, 0xdd, 0x5f, 0x46, 0xdc, 0x4d, 0x59, 0xb2, 0x1d, - 0xeb, 0x78, 0x00, 0xfe, 0x39, 0xe4, 0xd2, 0xe3, 0xcb, 0x31, 0xad, 0xfb, 0xf2, 0x3a, 0xac, 0x38, - 0x1e, 0xfe, 0x0c, 0x54, 0x62, 0x60, 0x8c, 0x58, 0x3a, 0x07, 0xad, 0x99, 0x1a, 0x23, 0xb5, 0xf1, - 0xf3, 0xa9, 0x81, 0x1b, 0x60, 0x8a, 0xd3, 0xc6, 0x87, 0xb5, 0x9e, 0xdb, 0x11, 0x77, 0x53, 0xb8, - 0x0c, 0xd4, 0xb1, 0x6a, 0x5a, 0xdf, 0x72, 0xe4, 0x02, 0xb7, 0x30, 0x62, 0xbb, 0xc3, 0x1d, 0x96, - 0xcb, 0x2c, 0xdd, 0x7c, 0x03, 0x5a, 0x4c, 0x86, 0x08, 0x8b, 0xd3, 0xf3, 0x2d, 0xff, 0x2b, 0x16, - 0x2e, 0x3e, 0x35, 0xeb, 0x10, 0x9b, 0x0e, 0x87, 0x4c, 0x6d, 0x7e, 0x88, 0x43, 0x85, 0x61, 0xb2, - 0xe7, 0x88, 0x33, 0x5e, 0x44, 0x95, 0x7e, 0x2d, 0x50, 0xa0, 0xa8, 0x68, 0xd3, 0x1f, 0x67, 0xa2, - 0xbd, 0xfa, 0xd1, 0xdf, 0x39, 0x7d, 0x7e, 0x5f, 0x5b, 0x8b, 0x63, 0x3b, 0xdc, 0x1e, 0x92, 0xcd, - 0x81, 0x9d, 0x78, 0xf4, 0x53, 0xb7, 0x67, 0x12, 0x7d, 0x3b, 0x36, 0xd7, 0x25, 0x13, 0xc3, 0xc9, - 0xa9, 0x81, 0xf4, 0xc4, 0x65, 0xd8, 0x90, 0x60, 0xf6, 0x15, 0x93, 0xb1, 0xcf, 0x5c, 0xf5, 0xa9, - 0xe3, 0x63, 0xfa, 0xb9, 0xcb, 0x70, 0x49, 0x06, 0xe6, 0x99, 0xf4, 0xad, 0x0b, 0xe9, 0xe9, 0x69, - 0xed, 0xdc, 0xe1, 0xf4, 0xe8, 0xa8, 0x4c, 0x3b, 0xe4, 0x7f, 0x85, 0x96, 0x90, 0xcf, 0xde, 0xa2, - 0xb4, 0x2b, 0x7e, 0xe2, 0xea, 0x57, 0xad, 0x4a, 0x2f, 0x09, 0xb6, 0x02, 0x7a, 0xff, 0x79, 0xbd, - 0x37, 0x15, 0xbf, 0x6a, 0x9c, 0xf9, 0xf8, 0x32, 0x8a, 0xf5, 0xfb, 0x00, 0x17, 0x11, 0xd9, 0xd6, - 0xcc, 0x10, 0x8b, 0x1e, 0xf3, 0x85, 0xa5, 0xb6, 0x48, 0x70, 0x67, 0x6b, 0x53, 0xc8, 0xed, 0x55, - 0x9c, 0x6c, 0x6f, 0x8b, 0xb0, 0x04, 0xb2, 0x5b, 0x95, 0x7e, 0x29, 0xcc, 0x5e, 0x4b, 0x7c, 0x83, - 0x95, 0x0d, 0xc9, 0x99, 0x39, 0x78, 0x3a, 0xd3, 0xdd, 0xff, 0xa0, 0x24, 0xcd, 0x8e, 0x7b, 0xcd, - 0xeb, 0x68, 0x79, 0xf6, 0x3a, 0x7e, 0x18, 0x1b, 0x5d, 0xe9, 0xe5, 0x22, 0xb4, 0x2a, 0xaf, 0xef, - 0x02, 0xff, 0x16, 0x9a, 0xef, 0xaa, 0xdf, 0x05, 0x3c, 0xa0, 0x10, 0xf4, 0x7b, 0x0c, 0x10, 0x7f, - 0xba, 0x39, 0xcb, 0x97, 0xc7, 0x80, 0x52, 0xff, 0x84, 0x2c, 0x0f, 0x3b, 0xdc, 0x84, 0xff, 0x08, - 0x2d, 0xf7, 0x04, 0x03, 0x11, 0xb7, 0x2f, 0xa0, 0x84, 0xe4, 0xb6, 0x40, 0xc4, 0x47, 0x1d, 0x5e, - 0xb7, 0xa9, 0xd2, 0x66, 0x21, 0xa7, 0x50, 0x7c, 0x89, 0x98, 0x83, 0xed, 0xce, 0x0e, 0xb0, 0x4d, - 0x40, 0xfb, 0xcf, 0x44, 0x7b, 0x6b, 0xb1, 0x43, 0xc1, 0xbd, 0x68, 0x87, 0xd3, 0x6c, 0xee, 0x95, - 0x73, 0x50, 0xf1, 0x32, 0x5a, 0x1a, 0x82, 0x3f, 0x77, 0x11, 0x5e, 0x33, 0xcf, 0xd2, 0x2d, 0xb3, - 0x8a, 0xc4, 0x55, 0x59, 0x3d, 0x12, 0x76, 0x93, 0x55, 0x8d, 0xff, 0x27, 0x05, 0xe4, 0xda, 0x55, - 0x0a, 0x35, 0x85, 0x4b, 0xe6, 0xcf, 0xc9, 0x73, 0xec, 0xc3, 0x4a, 0x7c, 0xc0, 0x42, 0x26, 0xcf, - 0xf9, 0x1b, 0x4e, 0x95, 0xfe, 0x77, 0xf3, 0x12, 0xd6, 0x00, 0x8b, 0xff, 0x96, 0x03, 0xb9, 0x4c, - 0x1b, 0xea, 0x22, 0xf7, 0x98, 0x26, 0xff, 0x00, 0x7b, 0xb7, 0x31, 0xc6, 0x9f, 0x74, 0x51, 0x23, - 0x5b, 0xb3, 0x72, 0x20, 0x19, 0x8b, 0x1b, 0x53, 0x22, 0xd5, 0xbb, 0x0c, 0x35, 0x46, 0x09, 0xcd, - 0x24, 0xfa, 0x36, 0xc3, 0x0d, 0x4f, 0x24, 0x14, 0xf4, 0xfb, 0x31, 0xa0, 0x2e, 0xe2, 0xf1, 0x12, - 0x78, 0x83, 0x67, 0xaf, 0xe2, 0x6d, 0xf3, 0x1b, 0x23, 0xd7, 0x89, 0x17, 0x42, 0x32, 0x16, 0xb7, - 0x3a, 0xbb, 0x7b, 0xd6, 0xd0, 0x44, 0x86, 0x26, 0xf0, 0x22, 0x25, 0xfd, 0x69, 0x97, 0x86, 0x93, - 0xb1, 0xcf, 0xc8, 0x4d, 0xd3, 0xe4, 0xd1, 0xcc, 0xa9, 0x5b, 0xc0, 0x2c, 0x5e, 0xcd, 0x9c, 0xba, - 0x95, 0x19, 0x3e, 0x4e, 0x0d, 0x47, 0x46, 0x27, 0xd5, 0x0e, 0x43, 0x99, 0xad, 0xf4, 0xba, 0x23, - 0xee, 0x4a, 0xaf, 0x2f, 0xf4, 0x5a, 0x95, 0xf1, 0x57, 0x55, 0xa3, 0x27, 0x5c, 0xe5, 0xf7, 0x35, - 0x56, 0x29, 0x11, 0x8f, 0xf7, 0x55, 0xd9, 0xfa, 0x5a, 0xfe, 0x7f, 0xe1, 0xec, 0xee, 0x0b, 0xc0, - 0x55, 0x4c, 0x4e, 0xcc, 0x3a, 0x30, 0x50, 0x4e, 0x6c, 0xf3, 0x60, 0xe8, 0xd1, 0xfa, 0xba, 0xf5, - 0xa3, 0xd7, 0x36, 0xc9, 0x65, 0x5a, 0xf7, 0x98, 0x76, 0x33, 0x9a, 0xbe, 0x33, 0x91, 0x3a, 0x7e, - 0xb3, 0x5c, 0x53, 0xfb, 0x88, 0x6c, 0x91, 0x8c, 0x5d, 0x4a, 0x5d, 0xed, 0x07, 0xd9, 0x82, 0x5d, - 0x9e, 0x9b, 0xe4, 0x75, 0xc9, 0xc9, 0x0b, 0xfa, 0xf1, 0x09, 0xbd, 0xaf, 0x03, 0x78, 0x15, 0x61, - 0x55, 0x66, 0xd5, 0x9e, 0xb2, 0x3d, 0x7e, 0x77, 0x20, 0xa0, 0xf8, 0xef, 0x45, 0x3b, 0x3c, 0x6e, - 0xbf, 0xcf, 0x13, 0xbc, 0x17, 0xed, 0x80, 0xbb, 0x6c, 0xf0, 0x19, 0x4b, 0x1f, 0xfe, 0x2c, 0x75, - 0xf1, 0x38, 0xcb, 0xd9, 0x52, 0xd7, 0x7b, 0xcb, 0x67, 0x12, 0xbd, 0x76, 0x47, 0x89, 0x26, 0xc4, - 0x7b, 0x15, 0xbf, 0x12, 0xf1, 0x05, 0x03, 0xf5, 0xa1, 0x60, 0x44, 0xf1, 0xe0, 0x9b, 0xd8, 0x85, - 0x78, 0x57, 0x61, 0x73, 0x72, 0x9e, 0x62, 0x71, 0x2d, 0x61, 0x19, 0xd8, 0xff, 0x87, 0xec, 0x85, - 0x9e, 0x8b, 0x99, 0x33, 0x97, 0x92, 0x77, 0xcf, 0xe9, 0x47, 0x2e, 0xc9, 0x79, 0xda, 0xf0, 0xdb, - 0xd1, 0x12, 0x77, 0x9b, 0xd7, 0x17, 0xa9, 0xc3, 0xda, 0xa3, 0x97, 0x30, 0xa7, 0x9f, 0xaa, 0x52, - 0x99, 0x60, 0x2b, 0x10, 0x4b, 0x58, 0x7e, 0xa4, 0x8d, 0x8f, 0xa6, 0xc7, 0x47, 0xc9, 0x2d, 0xbc, - 0xad, 0x1e, 0xbf, 0x05, 0x15, 0x82, 0x26, 0xfa, 0xa6, 0x9b, 0xe8, 0x5a, 0x58, 0xb9, 0xa6, 0x40, - 0xf1, 0x69, 0xb8, 0x86, 0x65, 0xef, 0x71, 0x01, 0x69, 0xe6, 0xf3, 0xd3, 0x20, 0xb3, 0xc8, 0xb4, - 0x32, 0xbd, 0x4b, 0xa0, 0x6b, 0xff, 0xa1, 0xf8, 0xd4, 0xff, 0x35, 0x9f, 0xf2, 0x29, 0xfb, 0x3d, - 0x0f, 0xdf, 0xc1, 0x21, 0xe4, 0x0b, 0x63, 0xd4, 0x01, 0x25, 0x42, 0xd8, 0x95, 0x5b, 0x95, 0x7e, - 0x25, 0x30, 0x60, 0xb1, 0xde, 0xfa, 0x9b, 0x0c, 0xa7, 0x75, 0xc7, 0x74, 0x37, 0x73, 0x6a, 0xbc, - 0x2c, 0x12, 0x6a, 0x53, 0x58, 0x80, 0x03, 0xf3, 0x2f, 0x72, 0xf6, 0x60, 0x88, 0xcd, 0x0f, 0xa5, - 0x5c, 0x66, 0xb0, 0xf3, 0x8d, 0xf4, 0x5c, 0xf4, 0x12, 0xbe, 0x86, 0x1d, 0xed, 0x28, 0xd0, 0xe4, - 0x67, 0xa9, 0xcf, 0x27, 0xb4, 0xc1, 0x4f, 0xc1, 0x7e, 0xc5, 0xa8, 0xe2, 0x65, 0xf4, 0xda, 0x8b, - 0x76, 0xa6, 0xf7, 0x46, 0x33, 0x23, 0xd1, 0x72, 0x7a, 0xd2, 0x79, 0x79, 0x27, 0x5a, 0xe8, 0x0d, - 0xb6, 0xb8, 0x7d, 0x26, 0xff, 0xc2, 0x13, 0x4b, 0x40, 0xe2, 0x5a, 0xb8, 0x5c, 0x04, 0x09, 0x03, - 0x30, 0xa4, 0x3e, 0x9f, 0x48, 0x75, 0x4e, 0x6a, 0x17, 0x2e, 0x68, 0x43, 0xfd, 0x32, 0xa9, 0xc7, - 0x0f, 0x70, 0xa8, 0x38, 0xac, 0x78, 0xda, 0x42, 0xbe, 0xc8, 0x01, 0x6c, 0xa2, 0x26, 0x92, 0xc1, - 0x5e, 0x55, 0x52, 0x04, 0x7b, 0x89, 0xb8, 0x83, 0x4a, 0x04, 0xda, 0x78, 0xaf, 0xd6, 0x3d, 0x96, - 0x9a, 0xea, 0xc2, 0xac, 0xf7, 0x33, 0x7d, 0xa4, 0x97, 0x1d, 0x29, 0xb0, 0xea, 0x82, 0x67, 0xaa, - 0xb1, 0x21, 0xe1, 0x5b, 0x98, 0x0a, 0x06, 0xe7, 0xbe, 0xdb, 0x9d, 0x4c, 0x5c, 0x34, 0xf6, 0x86, - 0xbd, 0x13, 0xfe, 0x02, 0x87, 0x0a, 0x7d, 0x81, 0x08, 0x3e, 0x4f, 0xf0, 0xe6, 0x5f, 0x2c, 0x96, - 0xe6, 0x7a, 0xdd, 0x40, 0xb9, 0xe4, 0xf1, 0x28, 0xe1, 0xb0, 0xaf, 0xd1, 0xaf, 0xc0, 0x91, 0x4b, - 0x1b, 0x8a, 0xf5, 0x20, 0x29, 0xf8, 0x1b, 0x2d, 0x96, 0xf5, 0x1d, 0xc9, 0xa4, 0xb8, 0x4b, 0x8f, - 0x2c, 0x46, 0x8b, 0x19, 0x37, 0x38, 0x43, 0x22, 0x58, 0x06, 0xae, 0x6c, 0x9b, 0x42, 0xee, 0xd6, - 0xbd, 0xf5, 0xee, 0xc8, 0x5e, 0x22, 0x27, 0x87, 0x55, 0xa9, 0x55, 0xc8, 0x2e, 0x13, 0x3f, 0x20, - 0xbe, 0x71, 0xe6, 0x91, 0x92, 0x8c, 0xc5, 0x89, 0x27, 0x9c, 0xe9, 0xbd, 0x47, 0x24, 0x46, 0xc6, - 0x31, 0x0e, 0xdc, 0xdd, 0x60, 0xb9, 0x41, 0x1d, 0x8b, 0x8d, 0x12, 0x8d, 0xaf, 0x0a, 0x90, 0xc8, - 0xd9, 0xfd, 0xf1, 0x1f, 0xa0, 0xc5, 0x2d, 0xc1, 0xb6, 0x40, 0x64, 0x87, 0x3b, 0xd4, 0xa4, 0x44, - 0xc8, 0x72, 0x04, 0x2f, 0x79, 0x06, 0x6e, 0x5a, 0x78, 0x89, 0x23, 0xde, 0xd9, 0xd3, 0xc4, 0x59, - 0xaf, 0x73, 0x92, 0xed, 0x1b, 0xf7, 0x2a, 0xb3, 0xed, 0xf8, 0xbb, 0x1c, 0x2a, 0x6e, 0x0b, 0x90, - 0x33, 0xc4, 0xd8, 0xda, 0x44, 0x09, 0x39, 0xcd, 0xa9, 0xd2, 0x71, 0x4e, 0xb0, 0x97, 0x89, 0x9d, - 0x1c, 0x90, 0xaf, 0x1d, 0xb9, 0xa8, 0x75, 0x5f, 0xb6, 0x0c, 0xe1, 0xc0, 0x2b, 0x06, 0x3b, 0x93, - 0xb1, 0x81, 0xf4, 0x8d, 0x83, 0x5a, 0xfc, 0x0a, 0x65, 0xcd, 0x5a, 0x34, 0xb1, 0x3e, 0x3d, 0x3a, - 0x96, 0xba, 0x14, 0xcf, 0x2e, 0x3e, 0x77, 0x9e, 0x14, 0x18, 0x62, 0x33, 0x53, 0x56, 0x06, 0xc8, - 0xa9, 0xf7, 0x8f, 0x21, 0x72, 0x5f, 0x39, 0x94, 0x3a, 0x7b, 0x12, 0x16, 0x43, 0xb9, 0x6c, 0xa7, - 0x89, 0xf7, 0x51, 0x7f, 0x7c, 0x38, 0xb8, 0x7f, 0x32, 0x87, 0xd3, 0xa3, 0xcd, 0x27, 0x1f, 0xeb, - 0x95, 0xa6, 0x4f, 0x3e, 0xb1, 0x45, 0x67, 0xa2, 0xc3, 0xb0, 0x47, 0x00, 0x4c, 0xbc, 0x4a, 0x4d, - 0x17, 0xfd, 0x1e, 0x9b, 0x9c, 0xb0, 0x00, 0x77, 0x27, 0xcc, 0xd5, 0x5d, 0x96, 0x74, 0x30, 0xcd, - 0xa9, 0xd2, 0xa4, 0x4d, 0x3a, 0xf8, 0xfc, 0xdb, 0x48, 0x07, 0x86, 0x90, 0xef, 0x57, 0x22, 0xdf, - 0xef, 0x61, 0xbf, 0x19, 0x90, 0x56, 0x3b, 0x42, 0xc1, 0x60, 0x04, 0x8e, 0xfa, 0x76, 0x77, 0x08, - 0x9f, 0xf2, 0xa4, 0x3f, 0xdb, 0x41, 0xef, 0x41, 0x2b, 0x7c, 0x01, 0x5f, 0x64, 0x4b, 0xb0, 0xc9, - 0x17, 0xd8, 0x19, 0x56, 0x42, 0x01, 0x43, 0x2d, 0x01, 0x69, 0xfd, 0x05, 0x55, 0x12, 0x85, 0xdc, - 0x52, 0xf1, 0x49, 0xfd, 0xe4, 0x0d, 0xf6, 0x26, 0x09, 0x06, 0xb7, 0x8d, 0x14, 0xcb, 0xb9, 0x2d, - 0xf8, 0x6e, 0x8e, 0xe9, 0xa5, 0xde, 0x1d, 0x0e, 0xef, 0x0b, 0x86, 0xbc, 0xe4, 0x2e, 0xf3, 0x1d, - 0x55, 0xda, 0x21, 0xe4, 0x96, 0x8a, 0x6f, 0xe4, 0xed, 0xa5, 0x95, 0x14, 0x57, 0xc0, 0x5b, 0x29, - 0xea, 0x88, 0x9a, 0xfa, 0x72, 0x2a, 0x35, 0x75, 0x81, 0xf5, 0xd8, 0x93, 0x73, 0x71, 0x1a, 0x67, - 0xd2, 0xa2, 0x66, 0xe5, 0x40, 0xbd, 0xdb, 0x17, 0xc2, 0x27, 0xe7, 0x62, 0xf1, 0xd1, 0xec, 0x59, - 0xdf, 0xac, 0x1c, 0xc0, 0x7e, 0x1b, 0x58, 0x00, 0x36, 0x2b, 0x9b, 0xb7, 0x13, 0xa9, 0xab, 0x1d, - 0x19, 0xf5, 0x32, 0xf5, 0xbd, 0x8b, 0x0d, 0xc0, 0x0d, 0x9a, 0x98, 0x89, 0xf6, 0x26, 0x63, 0xd1, - 0x99, 0x44, 0x9f, 0x98, 0x8e, 0x76, 0x1b, 0xba, 0x10, 0xf0, 0x8f, 0xc4, 0x69, 0xad, 0xbb, 0x47, - 0x9b, 0x38, 0x94, 0x51, 0x2f, 0xcb, 0x26, 0x2a, 0xfe, 0x3d, 0xb4, 0xd0, 0x10, 0x84, 0x23, 0xe1, - 0x92, 0x22, 0xbc, 0xee, 0x56, 0x65, 0x53, 0xb0, 0xc3, 0x28, 0x25, 0xc7, 0x08, 0xd4, 0x14, 0xd7, - 0x66, 0x8d, 0x85, 0xd6, 0x77, 0x12, 0x4a, 0x4c, 0x87, 0x10, 0xf8, 0xf5, 0x5d, 0x7c, 0x2b, 0xbe, - 0x9b, 0x18, 0xf0, 0x57, 0xf3, 0xd0, 0x0a, 0x53, 0x0c, 0x08, 0x29, 0x5e, 0x25, 0x10, 0xf1, 0xb9, - 0xfd, 0xfc, 0x13, 0xa8, 0x28, 0x8c, 0x25, 0xdf, 0xcd, 0x14, 0x8f, 0x05, 0x30, 0x4a, 0xad, 0x2b, - 0x58, 0xc0, 0xc8, 0x5c, 0xac, 0x96, 0x1a, 0x0a, 0xa4, 0x4f, 0x09, 0x44, 0xc0, 0x97, 0x06, 0x0e, - 0x57, 0xd9, 0x06, 0xe3, 0x9f, 0x35, 0x0e, 0x4d, 0x03, 0x9d, 0xe4, 0xf5, 0x86, 0x94, 0x70, 0x18, - 0x0e, 0x4d, 0xd9, 0x0e, 0xc4, 0x0f, 0x6a, 0xdc, 0x4e, 0x25, 0x14, 0xa9, 0x75, 0x47, 0xdc, 0x20, - 0xc8, 0xca, 0x0c, 0xc4, 0xa0, 0xc3, 0x58, 0xbb, 0x3b, 0x82, 0xcd, 0x0a, 0xc8, 0x7f, 0x45, 0xb2, - 0x05, 0x30, 0xfa, 0x20, 0x44, 0xd5, 0xc2, 0x29, 0xbf, 0x08, 0xfa, 0xb0, 0x01, 0x79, 0x07, 0x5a, - 0xec, 0x01, 0xf1, 0x87, 0x5a, 0xc0, 0x8b, 0x64, 0x16, 0x94, 0xf5, 0xac, 0xa7, 0xe8, 0x3e, 0xcf, - 0x7a, 0x50, 0xce, 0xb3, 0x1e, 0xa3, 0x3d, 0xfe, 0x76, 0x83, 0x6e, 0xb8, 0x6f, 0x96, 0x19, 0x08, - 0x8c, 0xa6, 0xf1, 0xcb, 0x18, 0xeb, 0x25, 0xe6, 0x68, 0x12, 0x80, 0xe9, 0xf2, 0x91, 0x3b, 0x47, - 0xe2, 0x33, 0x8d, 0x9e, 0x70, 0xa5, 0xc1, 0x18, 0x2a, 0xdd, 0x4d, 0x4a, 0x20, 0x92, 0x8c, 0x1d, - 0xd1, 0x8f, 0x18, 0x07, 0x02, 0xeb, 0x0d, 0x52, 0xfa, 0xcf, 0xe6, 0xa1, 0xa2, 0x6d, 0xee, 0x16, - 0x25, 0xdc, 0xea, 0xf6, 0x28, 0x3c, 0x8f, 0xe6, 0x63, 0x2e, 0x01, 0x33, 0x8a, 0xff, 0xe6, 0xd7, - 0xe7, 0x7f, 0xf2, 0x08, 0xd3, 0x9a, 0xf7, 0x2d, 0xe2, 0x13, 0xec, 0xbb, 0x3d, 0x98, 0x5d, 0xe6, - 0x2d, 0xde, 0x5a, 0xdb, 0x5b, 0x3c, 0x98, 0x57, 0xf6, 0xc1, 0xdc, 0x6b, 0xf4, 0xb0, 0x00, 0xee, - 0x9d, 0xe3, 0xea, 0x44, 0xc9, 0x65, 0x8f, 0x0a, 0x7a, 0x00, 0xac, 0x41, 0x85, 0x2d, 0xee, 0xfd, - 0x6f, 0xb7, 0x05, 0x23, 0x6e, 0x32, 0xe5, 0xf4, 0x77, 0xd6, 0x4c, 0x2d, 0xba, 0xcf, 0x4c, 0x15, - 0xe6, 0xcc, 0xd4, 0xab, 0xa8, 0xe8, 0xd7, 0x06, 0xa2, 0x2d, 0xbe, 0x70, 0x84, 0xec, 0xf1, 0x27, - 0xb3, 0xa9, 0x93, 0x95, 0x30, 0x36, 0x03, 0xe3, 0x1e, 0x65, 0xab, 0xfe, 0x77, 0xd8, 0xc1, 0xd5, - 0x3f, 0x56, 0xa5, 0x67, 0xd0, 0xd3, 0x82, 0x35, 0x51, 0xe2, 0x4a, 0xf6, 0x6d, 0x68, 0x80, 0x30, - 0x8b, 0xd2, 0x7f, 0x5d, 0x80, 0x8a, 0x6d, 0xfd, 0x1b, 0x53, 0x11, 0x30, 0x1b, 0x99, 0xfb, 0x94, - 0x02, 0xbe, 0xdd, 0xd4, 0x7a, 0xec, 0xaf, 0x5e, 0xd9, 0x9d, 0xfd, 0x2c, 0x2a, 0x0e, 0xb1, 0xdd, - 0x9b, 0xbb, 0xd6, 0x06, 0xe4, 0x57, 0xdb, 0x5f, 0x97, 0x52, 0x07, 0x07, 0xfb, 0xec, 0x2c, 0xbc, - 0xcf, 0xec, 0x2c, 0xca, 0x99, 0x9d, 0xd5, 0xd4, 0x95, 0x06, 0x66, 0xce, 0xf4, 0x68, 0x29, 0x41, - 0x8b, 0x5a, 0x94, 0x70, 0xd8, 0xdd, 0x64, 0x6e, 0x4e, 0xf3, 0x67, 0xf5, 0x3a, 0x55, 0xfa, 0x29, - 0x2a, 0x17, 0xec, 0x63, 0x26, 0x96, 0xb0, 0x63, 0x0b, 0xd7, 0xd2, 0x99, 0xee, 0xfe, 0xcc, 0x27, - 0xe7, 0x4a, 0xfb, 0xe7, 0x21, 0xc4, 0x30, 0xc1, 0xdc, 0x29, 0x34, 0x48, 0x50, 0x3c, 0x21, 0x53, - 0x08, 0x94, 0xc9, 0x2f, 0xfe, 0xc7, 0x68, 0x69, 0xb8, 0xad, 0x91, 0x3a, 0xf7, 0xd2, 0xb1, 0xcb, - 0x82, 0x1a, 0x8b, 0x37, 0xa2, 0x04, 0xdc, 0xd8, 0xd7, 0x13, 0xc6, 0x8e, 0xfe, 0xe6, 0x2b, 0xd0, - 0x0a, 0x73, 0x1c, 0xb1, 0x20, 0x8f, 0xad, 0x8c, 0x30, 0x82, 0xb9, 0x05, 0x06, 0x26, 0xe0, 0x11, - 0xe6, 0x63, 0x5c, 0x99, 0xfe, 0xb6, 0x18, 0x70, 0x03, 0xd0, 0xba, 0x88, 0x65, 0xc0, 0x00, 0xe3, - 0x45, 0xb4, 0x92, 0x88, 0xbd, 0xc4, 0x47, 0x93, 0xd4, 0x85, 0xa1, 0xcd, 0x5b, 0x66, 0xe0, 0x6d, - 0x6a, 0x56, 0xea, 0xe9, 0xd6, 0x87, 0xd1, 0xb6, 0xc1, 0xaa, 0x37, 0xab, 0xd2, 0x9b, 0x68, 0xa3, - 0xc0, 0x0c, 0xa3, 0xf8, 0x32, 0xd8, 0x75, 0x61, 0xd4, 0xc1, 0x4f, 0x54, 0xef, 0xb9, 0x63, 0x1e, - 0xc5, 0xe0, 0x67, 0xa1, 0x75, 0x8f, 0x65, 0x0e, 0x0f, 0x52, 0x27, 0x52, 0x90, 0xc8, 0x4a, 0x87, - 0x16, 0xa0, 0xc5, 0x8c, 0x63, 0x1e, 0xbf, 0x11, 0x2d, 0x84, 0x97, 0x6c, 0x44, 0x3d, 0x30, 0xe6, - 0x57, 0x20, 0x20, 0xf1, 0x69, 0x62, 0x31, 0xc0, 0xe2, 0xc4, 0x4c, 0xa2, 0x4f, 0x1f, 0xb9, 0x06, - 0x90, 0x64, 0x2c, 0xde, 0xd8, 0x1c, 0x0e, 0xb6, 0x86, 0x65, 0x52, 0x95, 0xff, 0x15, 0x9a, 0xef, - 0xf7, 0x05, 0x9a, 0x89, 0x24, 0xff, 0x96, 0x2a, 0x6d, 0x12, 0x30, 0x40, 0x7c, 0x03, 0x2a, 0x82, - 0x57, 0x49, 0xe6, 0xe3, 0xaf, 0xf4, 0x81, 0xcb, 0xd4, 0x2e, 0xad, 0x0d, 0x1e, 0x4b, 0xff, 0xfe, - 0x8e, 0x7e, 0xf1, 0xb0, 0x76, 0xf8, 0x50, 0xfa, 0xee, 0x50, 0x6a, 0xea, 0x56, 0x32, 0x7e, 0x54, - 0x3b, 0x32, 0x9a, 0xbe, 0x3b, 0x92, 0x1a, 0x3b, 0x0a, 0x6f, 0xa1, 0x64, 0x8c, 0x86, 0xbf, 0xcc, - 0xa1, 0x85, 0xad, 0xee, 0x90, 0xbb, 0xc5, 0xb4, 0x9e, 0xff, 0x64, 0x0e, 0x77, 0xc3, 0x75, 0xf5, - 0xb8, 0x26, 0x88, 0xa7, 0x5e, 0x55, 0x72, 0x0b, 0xa4, 0xad, 0xf8, 0x8e, 0x8d, 0x1a, 0xb0, 0xf6, - 0x63, 0xe1, 0xd8, 0x92, 0x2c, 0xc7, 0xcf, 0x67, 0xce, 0x74, 0x93, 0x77, 0x58, 0xa7, 0x6e, 0x13, - 0xcf, 0x31, 0x00, 0x8e, 0xf6, 0x19, 0x82, 0xa9, 0x29, 0xb9, 0xeb, 0x3d, 0x27, 0xc1, 0x0c, 0xae, - 0xf5, 0x9d, 0x94, 0x49, 0x07, 0x86, 0xe2, 0xf5, 0x88, 0xdb, 0xef, 0x0f, 0xee, 0x6b, 0x68, 0xf6, - 0xb5, 0xbe, 0xb3, 0x57, 0x09, 0x6c, 0x74, 0xfb, 0xfc, 0x8a, 0x17, 0x2f, 0xcd, 0xc2, 0x9a, 0x66, - 0x55, 0xda, 0x2b, 0xe4, 0x2b, 0x17, 0xdf, 0xce, 0x03, 0x24, 0x96, 0xe8, 0xde, 0xab, 0xe9, 0xd1, - 0x3e, 0xed, 0xd2, 0xcd, 0xf4, 0xad, 0xcb, 0x06, 0x41, 0xa0, 0x95, 0x74, 0x77, 0xa4, 0xc7, 0x63, - 0xe9, 0x3b, 0x5f, 0xa6, 0xef, 0x1e, 0x36, 0x55, 0x7e, 0x43, 0xe3, 0x60, 0xc0, 0x72, 0xbe, 0x7e, - 0x0c, 0x96, 0xca, 0x0c, 0xce, 0x43, 0xb1, 0xd4, 0x5d, 0xaa, 0xd4, 0x80, 0xde, 0x16, 0xd8, 0xe5, - 0x23, 0xd6, 0xb0, 0x93, 0xc7, 0x3e, 0xff, 0x80, 0xa5, 0x49, 0x67, 0x9a, 0x18, 0x94, 0xfb, 0x4e, - 0x6a, 0x77, 0x2e, 0x27, 0xa7, 0x47, 0xc0, 0x95, 0x00, 0xea, 0x94, 0x7e, 0xb1, 0x00, 0x2d, 0x94, - 0xc0, 0x3a, 0xd4, 0x8e, 0x50, 0x6b, 0x48, 0x81, 0x1f, 0xe6, 0x45, 0x19, 0x7e, 0xf0, 0xc0, 0x80, - 0xc5, 0x3a, 0x32, 0x0f, 0xbd, 0xc6, 0x82, 0xa6, 0x88, 0xa1, 0x73, 0x78, 0x83, 0x38, 0x93, 0xe8, - 0x73, 0xe3, 0xca, 0xda, 0xc8, 0x98, 0xfe, 0x71, 0x7f, 0x72, 0x7a, 0x84, 0x6d, 0x02, 0x03, 0x2a, - 0x33, 0x28, 0xf9, 0xfd, 0x68, 0x71, 0x6b, 0x30, 0x1c, 0x31, 0x3b, 0x2e, 0x98, 0xbb, 0xe3, 0xa1, - 0x81, 0x87, 0xee, 0x18, 0x37, 0x21, 0x1d, 0xb3, 0x5d, 0xf1, 0xcd, 0x68, 0x51, 0x2b, 0x1e, 0x4a, - 0x73, 0x5d, 0xe7, 0x3c, 0x42, 0x84, 0x9a, 0xeb, 0x60, 0xc0, 0xc9, 0x9a, 0xc6, 0xf7, 0xa0, 0x66, - 0x43, 0x71, 0xad, 0xd6, 0x7d, 0x27, 0x39, 0xfd, 0x31, 0x74, 0x45, 0xbc, 0x34, 0x8e, 0x8c, 0x25, - 0xa7, 0x47, 0x40, 0xc3, 0x92, 0xcd, 0x8a, 0x6b, 0xde, 0x41, 0x4b, 0x58, 0x34, 0xdf, 0x9b, 0x4f, - 0x6f, 0xf5, 0x0c, 0xa7, 0x4a, 0xff, 0x1b, 0x87, 0xd2, 0x9c, 0x40, 0x66, 0x52, 0xfc, 0xd7, 0x1c, - 0xcc, 0x2e, 0x55, 0xe3, 0xc0, 0x71, 0x9e, 0x8e, 0x1a, 0x21, 0x16, 0x8f, 0x5d, 0x85, 0x43, 0x9b, - 0x98, 0xd4, 0x07, 0x2e, 0x7f, 0x18, 0x6c, 0x04, 0x56, 0x53, 0xe1, 0xd0, 0xc6, 0xfb, 0xf4, 0x9e, - 0x21, 0xaa, 0x36, 0xc2, 0x58, 0xbe, 0xea, 0xc8, 0x7e, 0x9c, 0x33, 0xdc, 0x05, 0x7f, 0x43, 0xb9, - 0x3e, 0x36, 0x9a, 0xea, 0xed, 0x81, 0x9d, 0x9c, 0x19, 0x89, 0xd2, 0xd6, 0xd0, 0x4a, 0xbb, 0x74, - 0x15, 0xde, 0x20, 0x43, 0x65, 0x43, 0x45, 0x9c, 0xea, 0x06, 0x7b, 0x0b, 0xac, 0x0b, 0x18, 0x33, - 0x63, 0x57, 0xe3, 0xd9, 0x22, 0x43, 0xd8, 0xff, 0xa5, 0x36, 0x38, 0x61, 0x5e, 0x91, 0xa5, 0x8e, - 0xdf, 0x04, 0x2f, 0x85, 0xd2, 0x7f, 0xbd, 0x08, 0x21, 0x72, 0xc6, 0x6f, 0x6d, 0x0a, 0xf1, 0x7b, - 0xd0, 0x72, 0x77, 0xbb, 0xdb, 0x87, 0x75, 0x77, 0xd3, 0x82, 0x0f, 0xcb, 0x17, 0xdf, 0xf2, 0xe4, - 0x14, 0x8a, 0xcf, 0x68, 0x77, 0xbe, 0x00, 0xbb, 0xae, 0xa1, 0x00, 0xd3, 0xbb, 0x0a, 0x07, 0xb9, - 0xd7, 0x82, 0xa7, 0xb4, 0x39, 0xcd, 0xf8, 0x3f, 0x47, 0xc5, 0x70, 0xbc, 0x9b, 0x6f, 0x72, 0x60, - 0x9e, 0x56, 0xe7, 0x5f, 0x34, 0x35, 0xaf, 0xab, 0xd2, 0xab, 0x82, 0xbd, 0x85, 0x19, 0x55, 0x02, - 0x8c, 0x51, 0xfa, 0xa9, 0xdb, 0x70, 0x69, 0x68, 0x2d, 0x67, 0x58, 0x3f, 0xb0, 0x72, 0xec, 0x4d, - 0x8d, 0xde, 0xb1, 0x49, 0x97, 0xf6, 0x3e, 0xef, 0x01, 0x7a, 0xb7, 0xb5, 0xb0, 0x7a, 0xbf, 0x98, - 0x39, 0x73, 0xe9, 0x7e, 0xbd, 0xdb, 0x9a, 0xf2, 0x47, 0x39, 0xb4, 0xc2, 0xed, 0xf5, 0xe2, 0x57, - 0x6a, 0x3b, 0x82, 0x26, 0x09, 0xf3, 0xe7, 0x24, 0xa1, 0x4e, 0x95, 0x6a, 0x84, 0xdc, 0x56, 0x62, - 0x25, 0xfb, 0x18, 0x4b, 0xeb, 0xb9, 0x61, 0x3e, 0x33, 0xb8, 0x9e, 0x9f, 0x92, 0x5c, 0x0c, 0xfc, - 0x45, 0x0e, 0xad, 0x06, 0xfa, 0x70, 0xc1, 0xc6, 0x50, 0xb0, 0xc5, 0x24, 0x69, 0xc1, 0x9c, 0x24, - 0xd5, 0xab, 0xd2, 0x56, 0x61, 0x96, 0xa6, 0xe2, 0x73, 0xc9, 0xa9, 0x01, 0x76, 0x84, 0xa8, 0xbd, - 0x68, 0xae, 0x71, 0x9a, 0x05, 0x19, 0xff, 0x5b, 0x54, 0x4c, 0xde, 0xc7, 0x10, 0xc2, 0x16, 0xce, - 0x49, 0x18, 0xf6, 0xd6, 0xb2, 0xb7, 0x10, 0x2b, 0xe1, 0x41, 0x0a, 0x7d, 0x35, 0x04, 0x64, 0xa4, - 0x86, 0xbb, 0x66, 0x99, 0x31, 0x5b, 0xeb, 0x6a, 0x88, 0x1c, 0x80, 0x6e, 0x72, 0x02, 0xb3, 0x57, - 0xc4, 0x4f, 0x38, 0x56, 0x7a, 0x21, 0x5f, 0x7b, 0xb3, 0x33, 0x73, 0xee, 0x13, 0xf0, 0x68, 0xba, - 0x17, 0xed, 0x60, 0x4f, 0x12, 0xe3, 0x4c, 0x8e, 0x8d, 0x6b, 0x47, 0x7e, 0xc7, 0xae, 0xdb, 0x64, - 0x8c, 0x38, 0x2c, 0xae, 0x03, 0x8f, 0x99, 0xe4, 0x54, 0x37, 0xec, 0x26, 0x60, 0xbf, 0x65, 0xec, - 0xcb, 0xc5, 0x2a, 0x18, 0x4a, 0xf2, 0x83, 0x7c, 0x0a, 0x33, 0xfd, 0x55, 0xb9, 0x03, 0x5e, 0x5e, - 0x7a, 0xa8, 0x18, 0x2d, 0xa1, 0xde, 0xd5, 0xc6, 0x0e, 0xef, 0xe6, 0xd0, 0x32, 0xd8, 0x0d, 0x14, - 0x7c, 0x9f, 0xcd, 0x87, 0x5d, 0x99, 0xb3, 0xdb, 0x88, 0x95, 0xc4, 0x78, 0x32, 0xd5, 0xf5, 0x40, - 0x3b, 0x30, 0xbb, 0x3d, 0xa6, 0xc3, 0x9a, 0x6f, 0xa0, 0x63, 0xde, 0x03, 0xd0, 0x91, 0xd5, 0xc6, - 0x46, 0xc7, 0x03, 0xec, 0xc5, 0xec, 0xf6, 0xfc, 0x14, 0x87, 0x96, 0xb7, 0x04, 0xdb, 0x15, 0xb2, - 0x2d, 0x2c, 0x3b, 0xfd, 0xec, 0x84, 0x60, 0x47, 0xfd, 0x95, 0x4c, 0x23, 0x8b, 0x9a, 0x5f, 0xa6, - 0xae, 0x4e, 0x69, 0x47, 0xc8, 0x5b, 0xda, 0xf4, 0xe1, 0x2f, 0x29, 0x71, 0x73, 0x93, 0x55, 0x66, - 0x7d, 0xc4, 0xa5, 0x93, 0xa6, 0x55, 0x0a, 0x23, 0x62, 0x50, 0x94, 0xcb, 0x39, 0x84, 0xf2, 0xff, - 0x90, 0x43, 0x2b, 0x43, 0x0a, 0x05, 0x1b, 0xbb, 0x06, 0xbe, 0x60, 0xee, 0xbd, 0xdb, 0xa6, 0x4a, - 0x21, 0xa1, 0x24, 0xab, 0xa1, 0xf5, 0x15, 0xbb, 0x92, 0x53, 0x03, 0x59, 0xc3, 0xfa, 0x20, 0x1b, - 0x38, 0xff, 0x57, 0x64, 0xce, 0x5c, 0x4a, 0x5d, 0x3f, 0x99, 0x3a, 0x71, 0xb9, 0x5c, 0xce, 0x4b, - 0x2a, 0x7f, 0x8c, 0x43, 0x2b, 0x3c, 0x7e, 0xc5, 0x1d, 0xc0, 0x70, 0x57, 0x00, 0x3e, 0x60, 0xee, - 0x3d, 0x8e, 0xbd, 0xff, 0x72, 0x5b, 0x89, 0xcf, 0x51, 0x12, 0xf0, 0xdb, 0x88, 0xc9, 0x07, 0xe2, - 0x3b, 0xb9, 0x78, 0x0c, 0x9a, 0x78, 0xd0, 0x2f, 0x6b, 0x95, 0xb0, 0x2f, 0xa4, 0x00, 0xd7, 0x24, - 0x6e, 0x9a, 0xb3, 0x11, 0x85, 0x1d, 0xe9, 0xf3, 0x34, 0x13, 0xd7, 0x5b, 0xcb, 0xa0, 0xd7, 0xa2, - 0x6a, 0x2e, 0x92, 0xf2, 0x60, 0xe1, 0x63, 0x1c, 0x7a, 0xcc, 0xed, 0xf5, 0xd6, 0xed, 0x8f, 0x28, - 0xa1, 0x80, 0xdb, 0x9f, 0x75, 0x7e, 0x14, 0xce, 0x49, 0x5a, 0xa3, 0x2a, 0xed, 0x16, 0x66, 0x6f, - 0x2d, 0xd6, 0x50, 0x0a, 0x93, 0xb1, 0x23, 0xfa, 0xf9, 0xdb, 0xe4, 0x06, 0xed, 0xda, 0x35, 0x08, - 0x6c, 0xf2, 0x40, 0xc3, 0x38, 0x3b, 0x7a, 0xfe, 0x1f, 0x73, 0x68, 0x2d, 0x6c, 0x3c, 0x5b, 0x05, - 0xf6, 0xb0, 0x29, 0x9a, 0x93, 0x7e, 0xac, 0xfc, 0xdc, 0x07, 0x85, 0xf8, 0x46, 0xd6, 0x9a, 0xcd, - 0xfb, 0x11, 0x73, 0x7d, 0xc1, 0x7d, 0x3a, 0xa8, 0x9e, 0x2c, 0x50, 0xa5, 0xdf, 0x17, 0xa0, 0x2f, - 0x0a, 0x04, 0x1b, 0x4f, 0x15, 0x47, 0x0b, 0xf2, 0x9c, 0x04, 0xec, 0x23, 0x9d, 0x07, 0x38, 0x15, - 0x6c, 0xf5, 0xed, 0x67, 0x43, 0x85, 0x43, 0x53, 0xfb, 0x40, 0x36, 0x4e, 0x0d, 0x77, 0xc1, 0x23, - 0x52, 0xfc, 0xd6, 0x01, 0x8e, 0x0a, 0x12, 0x6e, 0xc8, 0xfc, 0xf6, 0x7b, 0xd1, 0x0e, 0x76, 0xcb, - 0x02, 0x64, 0x36, 0xb6, 0x74, 0x2f, 0xda, 0x31, 0xdb, 0x5e, 0xbf, 0x17, 0xed, 0xc8, 0xbb, 0x6c, - 0x6d, 0xf0, 0x58, 0x77, 0x6a, 0xe8, 0x10, 0x1b, 0x95, 0x42, 0x9b, 0xbc, 0x9d, 0x39, 0x1e, 0xd5, - 0x27, 0x3a, 0xf4, 0x91, 0xb8, 0x76, 0x66, 0x2c, 0x75, 0x9d, 0xc8, 0xbc, 0xa5, 0x7f, 0xb3, 0x00, - 0x2d, 0xdc, 0xde, 0x80, 0xdf, 0x9c, 0x77, 0x72, 0xb3, 0x4a, 0x99, 0x58, 0x57, 0xc9, 0x95, 0x32, - 0xdf, 0x80, 0x0b, 0x6e, 0x90, 0xaa, 0x69, 0x3c, 0x05, 0xe2, 0x5e, 0x8a, 0xe3, 0x54, 0x24, 0x63, - 0xd1, 0x64, 0xfc, 0x2c, 0x84, 0x2c, 0xb1, 0x55, 0x06, 0x9f, 0x92, 0x5c, 0x09, 0xf4, 0x3c, 0x97, - 0xf5, 0xe6, 0x0c, 0x94, 0xa5, 0x8f, 0x54, 0x69, 0x5f, 0xd6, 0x9b, 0xb3, 0x26, 0xc0, 0x47, 0x3e, - 0x68, 0x8e, 0xce, 0xc1, 0x71, 0x10, 0x93, 0x00, 0xd5, 0xa0, 0xc9, 0x4c, 0xa2, 0x4f, 0x3f, 0x39, - 0x99, 0xfc, 0xea, 0x2e, 0x5c, 0x1b, 0x6b, 0x23, 0x63, 0x1e, 0xbf, 0xef, 0x5e, 0xb4, 0xa3, 0xc1, - 0xed, 0x6e, 0x80, 0xe7, 0x39, 0xe0, 0xc4, 0x95, 0xf5, 0x6c, 0x6d, 0x90, 0x43, 0xab, 0xbc, 0xca, - 0x1e, 0x77, 0x9b, 0x3f, 0xd2, 0xc0, 0xde, 0xe2, 0x82, 0x82, 0x45, 0x7c, 0x74, 0xf3, 0xd7, 0x10, - 0x5f, 0xa3, 0x8f, 0x5c, 0x93, 0xb1, 0x23, 0xec, 0x85, 0xf2, 0x83, 0x11, 0x92, 0x1f, 0x2b, 0x7f, - 0x9a, 0x43, 0x8b, 0xc0, 0x60, 0x67, 0xde, 0xe6, 0xe5, 0x28, 0x79, 0x30, 0xc3, 0xeb, 0x64, 0xa8, - 0x05, 0x4a, 0x1e, 0x26, 0xd4, 0x6c, 0x28, 0x6e, 0x66, 0x63, 0x47, 0x19, 0xea, 0x09, 0xbe, 0xa9, - 0x64, 0xdf, 0xee, 0xce, 0x24, 0xfa, 0x9a, 0x95, 0x03, 0xfa, 0x69, 0xdb, 0xfb, 0x3e, 0xac, 0xa3, - 0x85, 0xf5, 0xd3, 0x13, 0xc9, 0xd8, 0x75, 0xfd, 0xe4, 0xe1, 0xf4, 0xc4, 0x2d, 0xfd, 0xf4, 0x80, - 0x6c, 0x62, 0x5d, 0x53, 0x8d, 0x96, 0xb0, 0x7d, 0x3e, 0x94, 0x3d, 0x80, 0x3c, 0x2d, 0x21, 0xab, - 0x53, 0x7c, 0xcb, 0x66, 0x93, 0x82, 0x99, 0xc5, 0x3b, 0x37, 0x35, 0xdc, 0x05, 0x6b, 0x2a, 0xcb, - 0x2b, 0x11, 0xf6, 0xef, 0xf6, 0x06, 0xd8, 0xe5, 0xe4, 0x69, 0xe2, 0xcd, 0x13, 0xa9, 0x4b, 0xf1, - 0xd2, 0x7f, 0xb1, 0x10, 0x2d, 0x22, 0x86, 0x32, 0xbe, 0x06, 0x15, 0x82, 0x49, 0x90, 0x3e, 0xad, - 0xc4, 0xcf, 0x05, 0x29, 0x50, 0x7c, 0x34, 0xdd, 0xfd, 0x55, 0x7a, 0x7c, 0x82, 0x5a, 0xba, 0xcc, - 0x02, 0x99, 0x56, 0xe1, 0x37, 0xa2, 0x22, 0xf8, 0x7b, 0xb3, 0x72, 0x80, 0x98, 0xa8, 0xe0, 0x81, - 0x1b, 0x85, 0x8a, 0x25, 0x79, 0xb1, 0x6c, 0x56, 0x0e, 0xc8, 0x56, 0x25, 0x7e, 0x73, 0x7e, 0xa3, - 0x24, 0x04, 0x43, 0xc9, 0x2a, 0x12, 0x97, 0x4a, 0x1f, 0xb5, 0x85, 0x14, 0x47, 0x7a, 0xfc, 0x93, - 0xcc, 0xe9, 0x6e, 0x57, 0x6d, 0x8e, 0xe5, 0xf2, 0x95, 0x6c, 0xcb, 0x65, 0xcd, 0x93, 0xaa, 0xb4, - 0x46, 0xa0, 0x40, 0x13, 0x41, 0xea, 0xea, 0x05, 0xbd, 0xe7, 0x8e, 0xf1, 0x3d, 0xd4, 0xb0, 0xf9, - 0xfe, 0xac, 0x86, 0xcd, 0x9a, 0x4a, 0x55, 0x12, 0x84, 0xdc, 0x52, 0x71, 0x15, 0xa1, 0x06, 0x1b, - 0x67, 0x0d, 0x96, 0x05, 0xae, 0x93, 0x79, 0xec, 0xa0, 0x9b, 0xb3, 0xed, 0xa0, 0x24, 0x2e, 0xa2, - 0x09, 0x14, 0x1d, 0x80, 0x8a, 0x3c, 0x47, 0x71, 0xd4, 0x87, 0x7c, 0x01, 0x8f, 0xaf, 0xd5, 0xed, - 0x77, 0x38, 0x49, 0x0d, 0xc6, 0x70, 0xfa, 0x7e, 0x3e, 0xc3, 0x29, 0x79, 0xa1, 0xca, 0x16, 0x88, - 0xcf, 0xce, 0x8d, 0x14, 0x6a, 0x65, 0x59, 0x5c, 0x3b, 0xb8, 0xb9, 0x4c, 0xae, 0xf0, 0xa4, 0x2a, - 0x6f, 0x05, 0x51, 0xdc, 0x84, 0x63, 0x6c, 0x3a, 0xf0, 0x1b, 0x79, 0x07, 0xa9, 0xe2, 0x70, 0x43, - 0x9d, 0xd4, 0x70, 0xd7, 0x87, 0xe1, 0x60, 0x80, 0x6e, 0xa3, 0xd4, 0xd5, 0xd3, 0x19, 0xf5, 0xf2, - 0x2c, 0x16, 0xdc, 0x2d, 0xf9, 0x2c, 0xb8, 0xb0, 0xba, 0x6c, 0x05, 0xe2, 0x2a, 0x5b, 0x97, 0x34, - 0xe4, 0xa2, 0xdd, 0xd6, 0x4b, 0x6c, 0x6c, 0xe6, 0xe2, 0x17, 0x37, 0x92, 0xad, 0x82, 0x9f, 0xb6, - 0x31, 0xaf, 0x22, 0x0c, 0x0d, 0x0c, 0x2f, 0x53, 0xba, 0xa7, 0x98, 0x42, 0x08, 0xeb, 0xa9, 0x75, - 0x27, 0xb4, 0xf1, 0x49, 0xed, 0x52, 0x57, 0x6a, 0xe8, 0x50, 0xe9, 0xc9, 0x45, 0x68, 0x89, 0x93, - 0x09, 0x1f, 0xc0, 0xef, 0x44, 0x8b, 0x70, 0x5d, 0xba, 0xa9, 0xb0, 0xf3, 0x85, 0x09, 0x13, 0x2b, - 0x6b, 0x9c, 0x0d, 0x10, 0xf4, 0x8c, 0x1a, 0x29, 0x68, 0xdc, 0xcb, 0x99, 0x44, 0x5f, 0xfa, 0xe8, - 0x4d, 0xfd, 0xe4, 0x61, 0x3a, 0x40, 0xb2, 0xd9, 0x8e, 0x6f, 0x62, 0xef, 0xb1, 0x60, 0xa3, 0x61, - 0xe9, 0x8e, 0x89, 0x3f, 0xf9, 0x0a, 0x4b, 0x07, 0x7d, 0x13, 0x0a, 0xe3, 0x61, 0x7d, 0xcd, 0x57, - 0x77, 0x93, 0xf1, 0x01, 0xfd, 0xc2, 0xe5, 0xf4, 0xc4, 0x27, 0x9a, 0xda, 0x97, 0xbe, 0x7b, 0x58, - 0x9f, 0xba, 0xc4, 0x5e, 0x89, 0xb9, 0x51, 0x91, 0x9b, 0xc6, 0x78, 0x98, 0x67, 0x3d, 0x1d, 0xb5, - 0xa0, 0xe2, 0x73, 0xf4, 0x1b, 0xe0, 0x0e, 0x9c, 0x8e, 0x99, 0xab, 0xb6, 0xc2, 0x41, 0x43, 0x9f, - 0x96, 0xd5, 0x38, 0x1b, 0x2a, 0x31, 0x49, 0x95, 0xae, 0xda, 0x72, 0xd9, 0x6a, 0xcf, 0xd7, 0xa1, - 0xc5, 0xe4, 0x07, 0xe3, 0x9d, 0x8c, 0x77, 0x3a, 0x0b, 0x17, 0x57, 0x30, 0x31, 0x1d, 0x4c, 0x7f, - 0x64, 0xa6, 0x9c, 0x7f, 0x11, 0xcd, 0xf7, 0x2a, 0x61, 0x0f, 0xd9, 0x9e, 0x38, 0x82, 0x1a, 0x06, - 0x88, 0x8f, 0x32, 0x0d, 0x21, 0x9c, 0x09, 0xb9, 0xc0, 0xc6, 0xc5, 0xfc, 0x76, 0xb4, 0x88, 0xa0, - 0x21, 0x32, 0xfd, 0xa3, 0xb9, 0x32, 0x1e, 0x2e, 0x86, 0xe7, 0xd6, 0x80, 0x93, 0x25, 0x86, 0x60, - 0x33, 0xb1, 0xf0, 0xdb, 0xd1, 0x42, 0xf0, 0x73, 0x23, 0x4e, 0x77, 0x78, 0x13, 0x12, 0x90, 0x28, - 0xb0, 0xc4, 0x30, 0x6e, 0x7d, 0x15, 0xf4, 0x2d, 0x0a, 0xfc, 0x4e, 0x0d, 0x77, 0xc9, 0xa4, 0x0d, - 0xff, 0x92, 0x15, 0xdb, 0xb1, 0xd0, 0xe2, 0x5f, 0x34, 0xb6, 0xe3, 0xb2, 0x59, 0xa3, 0x3a, 0xbe, - 0x64, 0x05, 0x93, 0x2a, 0x62, 0x1a, 0x9a, 0xc1, 0xa4, 0x96, 0xcd, 0x1a, 0x46, 0xaa, 0x1a, 0x15, - 0x61, 0x1c, 0xd6, 0xb5, 0x30, 0x7c, 0xbc, 0x05, 0x15, 0x97, 0x50, 0xb5, 0x3a, 0x73, 0xea, 0x96, - 0x6c, 0x15, 0xf0, 0xaf, 0xd9, 0xee, 0xc2, 0x16, 0x5b, 0xfd, 0x32, 0x60, 0x71, 0x09, 0x74, 0x4a, - 0x5a, 0x33, 0x25, 0xd5, 0x3b, 0x55, 0x49, 0x46, 0xf5, 0x82, 0x6d, 0x17, 0x89, 0x3f, 0x27, 0x6f, - 0x27, 0xb1, 0x67, 0xfd, 0xec, 0xdb, 0xb3, 0x2c, 0x39, 0xd5, 0x6d, 0xd4, 0x9c, 0x1e, 0x81, 0x9a, - 0x9a, 0xda, 0x07, 0xee, 0x2a, 0xe5, 0xa5, 0x7f, 0xbb, 0x00, 0x3d, 0xe6, 0x24, 0x46, 0x36, 0x0b, - 0xb1, 0xac, 0xfc, 0xba, 0x4d, 0x09, 0x47, 0xf8, 0xb7, 0xb3, 0x77, 0xe9, 0x4b, 0xc6, 0xd7, 0xd2, - 0x5d, 0x0a, 0x11, 0x41, 0xe8, 0xc6, 0xfc, 0xa6, 0xa6, 0x24, 0xb4, 0x7a, 0x79, 0x41, 0x49, 0xb4, - 0x50, 0x5c, 0xf6, 0xab, 0xf7, 0xd7, 0x57, 0xbe, 0xe2, 0xae, 0xfc, 0x48, 0xaa, 0x7c, 0xaf, 0xf2, - 0x83, 0x9f, 0x3e, 0x6b, 0xed, 0xd0, 0x2d, 0xf6, 0x55, 0x5d, 0x60, 0xba, 0x19, 0xdf, 0x77, 0x55, - 0x7f, 0x53, 0x33, 0x3f, 0x54, 0xb0, 0x9c, 0xcb, 0xbf, 0xb8, 0xe7, 0x3d, 0xe4, 0xe2, 0xfe, 0xad, - 0xb5, 0xb8, 0xe7, 0xcf, 0xbd, 0xb8, 0xb7, 0xa8, 0x92, 0x4b, 0x30, 0x2b, 0x8b, 0xaf, 0x9b, 0x5f, - 0xcc, 0x0e, 0x2f, 0xfb, 0x5c, 0x0c, 0xe4, 0x31, 0x7d, 0xa4, 0x57, 0x3f, 0xd1, 0xa3, 0x47, 0xaf, - 0x6a, 0x83, 0x47, 0x58, 0x3e, 0x68, 0x6d, 0x86, 0x0f, 0xe9, 0x66, 0x58, 0x40, 0xa2, 0x96, 0x40, - 0xd4, 0xe5, 0x75, 0x66, 0xd4, 0xe5, 0x75, 0x35, 0xc1, 0xa0, 0x7f, 0x97, 0x21, 0xec, 0x90, 0x67, - 0xe3, 0x64, 0xa3, 0x94, 0xdb, 0x29, 0x60, 0x1d, 0x4a, 0x2d, 0xf7, 0x30, 0xfc, 0x93, 0xee, 0x93, - 0x77, 0xac, 0x7d, 0xb2, 0xd0, 0x7c, 0x8d, 0xfd, 0x94, 0xb5, 0x4f, 0x56, 0xb2, 0x43, 0x6d, 0x6e, - 0x96, 0xb9, 0xe7, 0x92, 0xec, 0xa3, 0x5d, 0xb9, 0xd1, 0x7e, 0x5f, 0xc6, 0x81, 0x84, 0x2c, 0x6e, - 0xfb, 0xf4, 0x7d, 0xb9, 0x2d, 0xcc, 0x6b, 0x01, 0xc3, 0x5c, 0xab, 0xdd, 0xaa, 0xf4, 0x2b, 0xf4, - 0x4b, 0x61, 0xf6, 0x85, 0x29, 0x3e, 0x02, 0xd1, 0x78, 0x30, 0xe5, 0xe6, 0xb1, 0xf9, 0x35, 0x67, - 0x2e, 0xb2, 0xaf, 0x39, 0x76, 0x91, 0x7c, 0xcd, 0x2d, 0x62, 0x6a, 0x00, 0xe9, 0xa5, 0x87, 0x0a, - 0xd0, 0x9a, 0x7c, 0xe8, 0xc3, 0xad, 0xc1, 0x40, 0x58, 0xe1, 0xd7, 0xa1, 0xf9, 0x9e, 0xa0, 0x57, - 0x21, 0x0f, 0x9c, 0xd6, 0xa8, 0xd2, 0xa3, 0x02, 0x06, 0x88, 0xcb, 0xd2, 0x77, 0x8f, 0x6b, 0x67, - 0xcf, 0x67, 0x8e, 0x9f, 0x49, 0x4f, 0x4c, 0xa4, 0x2e, 0x76, 0xc8, 0x18, 0xcc, 0x57, 0x5b, 0x17, - 0xd6, 0x05, 0xd6, 0x9b, 0x6e, 0x13, 0x26, 0xf2, 0x6c, 0x2b, 0x93, 0x2f, 0x92, 0x42, 0x7e, 0x03, - 0x5a, 0x18, 0x52, 0xc2, 0x6d, 0x7e, 0x78, 0xa9, 0x54, 0x48, 0xa2, 0xda, 0x02, 0x48, 0x5c, 0x02, - 0x2d, 0x53, 0x53, 0x1f, 0xeb, 0xe7, 0x47, 0x64, 0x02, 0xe5, 0x5d, 0x68, 0xbe, 0xd7, 0x4d, 0x2e, - 0xeb, 0xf3, 0x3c, 0x3f, 0x65, 0x3f, 0xa9, 0xe6, 0x51, 0x55, 0x5a, 0x29, 0xe0, 0xea, 0x26, 0x32, - 0xf2, 0x44, 0x1b, 0xc3, 0x4a, 0xff, 0x6a, 0x21, 0x7a, 0x6c, 0x27, 0x66, 0x33, 0xf9, 0x18, 0xc0, - 0xaf, 0xb2, 0x19, 0x40, 0xad, 0x2a, 0xfd, 0xd8, 0x62, 0x00, 0x8f, 0xcf, 0x71, 0x28, 0x3f, 0x10, - 0x37, 0x78, 0x97, 0x3d, 0x46, 0xa9, 0x17, 0xe6, 0x93, 0xec, 0x31, 0xba, 0xdc, 0xbe, 0xe0, 0x5d, - 0xb5, 0x73, 0x21, 0x9e, 0xfd, 0xf8, 0x9c, 0xf7, 0x1d, 0x8f, 0xcf, 0xf9, 0x0f, 0xc9, 0x61, 0xfe, - 0x90, 0x1b, 0x7c, 0x3b, 0xbb, 0x0f, 0x17, 0x5a, 0xaf, 0x98, 0x1e, 0x6a, 0x1f, 0xb2, 0xd2, 0xcd, - 0x66, 0xeb, 0x80, 0x5c, 0x64, 0xa2, 0x5b, 0x69, 0x1d, 0x90, 0x45, 0xf4, 0x68, 0xc4, 0x81, 0x10, - 0x61, 0x2e, 0x96, 0x32, 0x73, 0x81, 0xe7, 0xd8, 0x3c, 0x34, 0xdf, 0xb7, 0x78, 0x6d, 0xe1, 0xdc, - 0xbc, 0x16, 0x4b, 0xad, 0x94, 0xd7, 0xae, 0x01, 0x61, 0x12, 0x77, 0x95, 0xc5, 0x71, 0x29, 0x1f, - 0xad, 0x3e, 0xc7, 0xa9, 0xd2, 0x19, 0x0e, 0x9d, 0xe4, 0x84, 0xd9, 0x57, 0xb1, 0xf8, 0x2e, 0x20, - 0x61, 0x26, 0x2c, 0x3d, 0x71, 0x07, 0x42, 0x68, 0xd2, 0x4b, 0x6b, 0xa3, 0xca, 0xf1, 0xc9, 0x2c, - 0xa1, 0x36, 0x73, 0xfa, 0x0b, 0xfd, 0xfa, 0x27, 0xda, 0xc4, 0xa4, 0x76, 0xfd, 0x74, 0xe6, 0xf0, - 0xa0, 0x19, 0x8f, 0xfd, 0x6a, 0xea, 0xf8, 0x05, 0x6d, 0xfa, 0xa6, 0xf6, 0x71, 0x3f, 0xcb, 0x73, - 0xac, 0xb5, 0xf7, 0x35, 0x67, 0x7e, 0x7c, 0xe9, 0x14, 0x87, 0xd6, 0xe4, 0x23, 0xec, 0x07, 0xc1, - 0x67, 0x4a, 0xff, 0xeb, 0xf9, 0x68, 0xcd, 0x56, 0x5f, 0x53, 0xe8, 0x8f, 0xc4, 0x1d, 0xf6, 0x20, - 0x44, 0xc7, 0x34, 0xcc, 0xbe, 0x19, 0xa8, 0xb2, 0xc0, 0x99, 0xe8, 0x70, 0xfa, 0xee, 0xe1, 0x8a, - 0xcc, 0xf0, 0x71, 0x2d, 0x11, 0x85, 0x57, 0x4f, 0x60, 0xb9, 0x02, 0x17, 0x5d, 0x98, 0xd0, 0x5c, - 0x26, 0x22, 0x33, 0x98, 0xf9, 0x3b, 0x1c, 0x5a, 0xa4, 0x04, 0x3c, 0xa1, 0x03, 0xad, 0x11, 0x72, - 0x97, 0x91, 0xe3, 0x23, 0xb6, 0x3d, 0xe4, 0x6b, 0xf2, 0x05, 0xea, 0xa0, 0x12, 0xc4, 0x9d, 0xfb, - 0x05, 0x69, 0xa2, 0x0d, 0x5c, 0xd0, 0xae, 0xe2, 0x17, 0xa8, 0x47, 0x2e, 0x6a, 0x13, 0x87, 0xf4, - 0x93, 0x93, 0x5a, 0x62, 0x30, 0x3d, 0x7d, 0x4d, 0xef, 0xff, 0x24, 0x19, 0x8b, 0xa7, 0x27, 0x2e, - 0xc3, 0x13, 0xee, 0xac, 0x0a, 0x10, 0xcc, 0x3f, 0xf5, 0xbb, 0x38, 0xb8, 0x6b, 0xeb, 0xa7, 0x07, - 0xf0, 0xf0, 0x18, 0x7a, 0x96, 0xf8, 0x94, 0x0d, 0x73, 0x2e, 0x5a, 0xd9, 0xa4, 0x96, 0xaf, 0x46, - 0xf3, 0xdc, 0x7e, 0x3f, 0xf1, 0xee, 0x80, 0x27, 0xbd, 0x6e, 0xbf, 0x5f, 0x5c, 0xeb, 0xf6, 0xfb, - 0xc9, 0x9d, 0x74, 0x6f, 0x54, 0x1f, 0xe9, 0xa5, 0xf2, 0x60, 0xfa, 0x6e, 0x47, 0xea, 0xea, 0x94, - 0x6c, 0x54, 0xaa, 0x8e, 0xa8, 0xd2, 0xaf, 0x51, 0x50, 0x98, 0x63, 0x82, 0xc5, 0x4d, 0x50, 0x3f, - 0xff, 0xc6, 0xb1, 0x82, 0xe7, 0xc1, 0x07, 0xc2, 0x1e, 0x81, 0x6a, 0xf4, 0x63, 0x01, 0x81, 0xb5, - 0x4d, 0x4a, 0xdf, 0x46, 0xc5, 0xb6, 0xb1, 0xe4, 0x1d, 0x68, 0x31, 0xf9, 0x1a, 0x6c, 0xce, 0x03, - 0xd3, 0x0f, 0x0b, 0xe2, 0x97, 0xa2, 0x82, 0xe6, 0x76, 0x62, 0xff, 0x29, 0x68, 0x6e, 0x37, 0x7e, - 0xfb, 0xda, 0x89, 0x3b, 0x56, 0x81, 0xaf, 0xbd, 0x34, 0xc1, 0xa1, 0xc7, 0xf3, 0x7e, 0xc4, 0x0f, - 0x63, 0x93, 0xfd, 0xe3, 0x02, 0xf4, 0x58, 0x2d, 0xb9, 0x69, 0xfe, 0xc3, 0xef, 0xb1, 0xf7, 0x72, - 0x4f, 0xe0, 0x9f, 0xa9, 0xd2, 0x5a, 0xf6, 0x04, 0xa6, 0x47, 0x24, 0xf5, 0xf1, 0x7a, 0xb0, 0x23, - 0xb8, 0xba, 0x59, 0x95, 0xf6, 0xa2, 0x3d, 0xc2, 0xec, 0x5f, 0x27, 0xbe, 0x04, 0x96, 0x6b, 0xa6, - 0x03, 0x58, 0x60, 0x15, 0x8e, 0xf4, 0xd1, 0xcb, 0x60, 0x2c, 0x37, 0xaf, 0xc6, 0x09, 0x9f, 0x86, - 0x06, 0x2c, 0xdf, 0x85, 0xd4, 0x13, 0x98, 0xd3, 0xe6, 0xeb, 0xe8, 0x87, 0xb1, 0x08, 0xfe, 0xf9, - 0x3c, 0xf4, 0xf8, 0x16, 0x5f, 0x38, 0xc2, 0xd2, 0x5e, 0xaf, 0x84, 0x5a, 0xcc, 0x65, 0xd0, 0xce, - 0x1e, 0xf1, 0xb0, 0x10, 0x7e, 0xa1, 0x4a, 0x3b, 0xd9, 0x23, 0xfe, 0xcd, 0x07, 0x31, 0x6c, 0xc0, - 0x86, 0x05, 0xc3, 0x06, 0xd4, 0x21, 0x29, 0x34, 0x20, 0x14, 0x23, 0x44, 0x7a, 0x64, 0x24, 0x81, - 0xd7, 0xec, 0xcb, 0x63, 0x9e, 0x19, 0x58, 0x8b, 0x59, 0x1e, 0xcb, 0xac, 0x40, 0x91, 0xe0, 0x36, - 0xc2, 0x08, 0x61, 0x6f, 0xe7, 0x13, 0xc2, 0xb0, 0x39, 0xcf, 0x26, 0x84, 0x3d, 0x49, 0x2c, 0x2d, - 0xf8, 0xae, 0xc4, 0xc6, 0x6d, 0xae, 0xe8, 0x07, 0xbb, 0x6d, 0x02, 0x59, 0xf5, 0x28, 0xa7, 0x4a, - 0xe7, 0x38, 0x34, 0xcc, 0x09, 0x73, 0x0d, 0x98, 0xf8, 0x1b, 0x40, 0x49, 0x69, 0xa3, 0x8c, 0x0b, - 0xde, 0x2a, 0x68, 0xa3, 0x9f, 0x6b, 0x87, 0xce, 0x24, 0xe3, 0x87, 0x52, 0x67, 0xc7, 0xf5, 0x8b, - 0xc6, 0x9e, 0xd1, 0xc7, 0x7f, 0x6f, 0x94, 0xf6, 0x9c, 0xc1, 0xc6, 0xc9, 0x1e, 0x80, 0x13, 0x4b, - 0x00, 0x46, 0x65, 0xb5, 0xed, 0x1e, 0x03, 0xd6, 0xad, 0xf5, 0x9c, 0x49, 0xc6, 0xe2, 0x26, 0xed, - 0xd8, 0xdd, 0x11, 0xbc, 0x7a, 0xf5, 0x02, 0xf4, 0x44, 0x7e, 0xe2, 0x7e, 0x18, 0xfa, 0xc5, 0x36, - 0xaa, 0x5f, 0xcc, 0xbb, 0xaf, 0x7e, 0x41, 0xac, 0x3f, 0x86, 0x7e, 0x61, 0x93, 0xa5, 0x61, 0x2d, - 0xe0, 0x82, 0xea, 0x77, 0x54, 0x69, 0x07, 0x92, 0x85, 0x39, 0xc7, 0x44, 0x7c, 0x3a, 0x6b, 0xc6, - 0xf4, 0x73, 0x07, 0x33, 0x67, 0x86, 0x40, 0x59, 0x01, 0x2a, 0xbf, 0xe6, 0xf0, 0x68, 0x7c, 0xcd, - 0x99, 0xdf, 0x56, 0x3a, 0x38, 0x1f, 0x3d, 0x9a, 0x8d, 0xd4, 0xdc, 0x32, 0x9b, 0xb3, 0x39, 0xe7, - 0x86, 0x87, 0xe0, 0x9c, 0x0b, 0x42, 0xf3, 0x4a, 0xa2, 0x85, 0x16, 0x9b, 0xac, 0xcb, 0x65, 0x93, - 0x38, 0x0e, 0x03, 0xb3, 0x0f, 0x1e, 0x9d, 0x65, 0x11, 0xb3, 0xfb, 0xa1, 0x3d, 0xc7, 0xcf, 0xfe, - 0x0f, 0xb3, 0x8d, 0xdf, 0x44, 0x85, 0xc1, 0x56, 0x25, 0x84, 0x6d, 0x00, 0xf3, 0xad, 0x38, 0x2d, - 0x14, 0x28, 0x3e, 0x69, 0xfe, 0x95, 0x35, 0xfc, 0x64, 0x1a, 0x69, 0x45, 0x46, 0xe0, 0x9e, 0x6d, - 0xe0, 0xff, 0xb8, 0x5b, 0xef, 0xff, 0x2e, 0x40, 0x8f, 0xed, 0x52, 0x42, 0xbe, 0x3d, 0x07, 0xfe, - 0x40, 0x06, 0x2d, 0x53, 0x41, 0x2c, 0xf8, 0xf6, 0x26, 0xa8, 0x79, 0x7f, 0x0c, 0x13, 0x54, 0xb5, - 0xac, 0x4a, 0xdb, 0xd1, 0x56, 0x61, 0xf6, 0xd1, 0x12, 0x9f, 0xd0, 0x3f, 0x8d, 0xea, 0x17, 0xec, - 0x56, 0x16, 0x72, 0xa9, 0x1a, 0xbd, 0xca, 0x1e, 0xc1, 0x26, 0x4e, 0x7c, 0x08, 0xe7, 0xc3, 0xf7, - 0xc3, 0x38, 0x84, 0xf7, 0xa0, 0xe5, 0x2c, 0xd9, 0xf8, 0xd2, 0xfb, 0x45, 0x6b, 0x9a, 0xb8, 0xfb, - 0x5b, 0x5b, 0x2c, 0x03, 0x1f, 0xf6, 0xe6, 0xc7, 0xf5, 0x88, 0x3f, 0xaf, 0x4c, 0x7f, 0x97, 0xfe, - 0xd5, 0x3c, 0x54, 0x92, 0xbb, 0x79, 0x7e, 0x18, 0x47, 0x83, 0x6c, 0x3b, 0x1a, 0x1c, 0x73, 0x0d, - 0x06, 0x7e, 0xba, 0xf7, 0x00, 0xc7, 0x03, 0x7f, 0x90, 0x43, 0xcb, 0xf6, 0x29, 0x8d, 0xbb, 0x99, - 0x24, 0x75, 0xc4, 0x6a, 0x92, 0x93, 0xaa, 0xe5, 0x1d, 0xa5, 0x51, 0xb2, 0x6a, 0x81, 0x77, 0x6b, - 0x76, 0x5b, 0xf1, 0x59, 0xb8, 0x28, 0xcf, 0x65, 0x8c, 0x2c, 0x67, 0x93, 0x97, 0xee, 0xb3, 0xe1, - 0xaa, 0xde, 0xa4, 0x4a, 0xb5, 0xa8, 0x46, 0x98, 0x75, 0x66, 0xc4, 0x55, 0xd9, 0x7c, 0x6d, 0x96, - 0x43, 0xe9, 0xe3, 0x42, 0x54, 0x88, 0x11, 0xec, 0xaa, 0x77, 0xf2, 0x1b, 0xb3, 0x39, 0x0e, 0xf8, - 0x4e, 0x9b, 0x1c, 0x67, 0xed, 0x1c, 0xa7, 0xd0, 0x4c, 0xa2, 0xcf, 0x62, 0x33, 0xd5, 0xf4, 0x09, - 0x0e, 0xc3, 0x68, 0xcc, 0x40, 0xa5, 0xab, 0xda, 0x5b, 0x3d, 0x6c, 0x94, 0xd2, 0xac, 0x1c, 0x6f, - 0x4e, 0x84, 0xe0, 0xaf, 0x6c, 0x4b, 0x18, 0x03, 0x16, 0x79, 0xf8, 0x1b, 0x10, 0x10, 0x4b, 0x18, - 0x53, 0xce, 0x7f, 0x60, 0x8f, 0x41, 0x31, 0x9f, 0x79, 0x32, 0xcd, 0x46, 0xa0, 0x28, 0x67, 0x7e, - 0xd8, 0x42, 0x8d, 0x91, 0x14, 0x19, 0x55, 0x66, 0xd2, 0x8c, 0x72, 0x7b, 0x04, 0x88, 0x4a, 0x33, - 0x0f, 0x1d, 0xdc, 0x53, 0x61, 0xab, 0x25, 0xc9, 0x43, 0xb7, 0x18, 0xff, 0x43, 0xbe, 0x89, 0x24, - 0x9a, 0xdb, 0x80, 0x16, 0xb5, 0xb7, 0x7a, 0xb6, 0x59, 0xef, 0x63, 0x71, 0x03, 0x13, 0x26, 0x16, - 0xb5, 0xb7, 0x7a, 0xc8, 0x37, 0x98, 0x30, 0xfe, 0x03, 0x54, 0x44, 0xbd, 0x49, 0x88, 0x59, 0x0b, - 0x07, 0x84, 0xb3, 0xa0, 0x62, 0x55, 0x7a, 0xe2, 0xb2, 0x31, 0x94, 0xe4, 0xe5, 0xb5, 0xc1, 0xe9, - 0x20, 0xe6, 0x01, 0xfe, 0x73, 0x26, 0xd1, 0x87, 0xc3, 0x1a, 0xe0, 0xa7, 0xd5, 0x06, 0xa0, 0x5c, - 0xb6, 0xda, 0xf2, 0x2f, 0xa1, 0x05, 0xf8, 0x21, 0x2f, 0xb9, 0x8b, 0x7a, 0xda, 0x50, 0xa2, 0x00, - 0x02, 0xd3, 0x83, 0x4f, 0x00, 0xfd, 0xe2, 0xe1, 0xf4, 0xb8, 0x79, 0x0e, 0x40, 0x29, 0x7b, 0x8d, - 0x55, 0xf4, 0x6d, 0xaf, 0xb1, 0xd0, 0xb7, 0xbf, 0xc6, 0x5a, 0xfc, 0x5d, 0xae, 0xb1, 0x96, 0x3c, - 0xe4, 0x35, 0x16, 0xff, 0x3e, 0x7e, 0x6f, 0xa6, 0x84, 0xda, 0x15, 0xaf, 0xab, 0x7e, 0x5b, 0x5b, - 0x0b, 0x8e, 0x1a, 0x57, 0x0c, 0xaf, 0x9b, 0xed, 0x25, 0xe2, 0xd3, 0xed, 0xad, 0x1e, 0x48, 0xd6, - 0xe5, 0xaa, 0x87, 0x28, 0x94, 0x34, 0x24, 0x7e, 0x3f, 0xc0, 0x65, 0x7b, 0x0b, 0xfe, 0x5d, 0xdb, - 0x3b, 0x45, 0x26, 0x6e, 0x1c, 0x9b, 0x33, 0xb0, 0xcc, 0x4a, 0x12, 0x98, 0x9c, 0x1e, 0x49, 0x1d, - 0x1f, 0x03, 0x5c, 0x10, 0x37, 0x9f, 0xe6, 0x09, 0x6c, 0x6f, 0xf5, 0xb0, 0x4f, 0x1c, 0xab, 0x7f, - 0xae, 0x4a, 0xaf, 0xa1, 0x57, 0x05, 0xba, 0xaf, 0xc5, 0x2a, 0xd6, 0xdd, 0x84, 0x24, 0x08, 0x98, - 0xd4, 0xe2, 0xc7, 0xe1, 0x20, 0x86, 0x5d, 0x04, 0x99, 0x95, 0x88, 0x60, 0x32, 0x55, 0x88, 0x56, - 0x31, 0x37, 0x0e, 0xbb, 0xea, 0x9d, 0xa6, 0x50, 0xf2, 0x41, 0x36, 0x8b, 0x70, 0x3e, 0x84, 0xa0, - 0x0a, 0xf6, 0x57, 0xef, 0x1c, 0x02, 0x4a, 0x56, 0xee, 0x9b, 0x02, 0x33, 0x5c, 0xd9, 0xb7, 0xde, - 0xb8, 0xdf, 0xd4, 0xac, 0x0a, 0x3d, 0x62, 0xe5, 0xbc, 0xb1, 0xd2, 0xe0, 0xd8, 0x36, 0xf4, 0x0e, - 0xca, 0xb0, 0xe6, 0x99, 0x56, 0x85, 0xfb, 0x31, 0xac, 0x39, 0xbe, 0x26, 0x3f, 0x2b, 0x9b, 0xff, - 0xed, 0x58, 0xd9, 0x66, 0x8b, 0x79, 0x2c, 0x60, 0xcc, 0xdb, 0xb9, 0xcc, 0x63, 0xae, 0xe1, 0x35, - 0xd9, 0xca, 0x26, 0x7b, 0x02, 0xcd, 0x0d, 0xb3, 0x30, 0xae, 0x39, 0x50, 0x11, 0x96, 0x16, 0xcc, - 0xe5, 0x4f, 0x6f, 0x7f, 0x47, 0xfe, 0xf4, 0x4d, 0xcd, 0xb2, 0x50, 0xb1, 0x3c, 0xdf, 0xa8, 0x22, - 0x2f, 0x80, 0x58, 0x53, 0xdf, 0x07, 0xc7, 0x7a, 0x3b, 0x9b, 0x63, 0xbd, 0x34, 0x27, 0xc7, 0x9a, - 0x73, 0x91, 0x12, 0x5e, 0x96, 0xc3, 0x17, 0xd0, 0xdf, 0x19, 0x5f, 0x58, 0xfc, 0x7d, 0xf2, 0x85, - 0x3d, 0xaa, 0xe4, 0x41, 0x6e, 0x21, 0xff, 0xce, 0x16, 0x57, 0xc1, 0x18, 0x80, 0x00, 0xdd, 0xde, - 0xea, 0x01, 0x4d, 0xc8, 0x76, 0x51, 0xc9, 0x6c, 0x99, 0xaf, 0x39, 0xb2, 0xca, 0xbf, 0xe6, 0xcc, - 0xd5, 0x45, 0xad, 0x5b, 0x77, 0x38, 0xb4, 0x3a, 0xbb, 0x8f, 0x1f, 0x86, 0x50, 0xfd, 0x4f, 0x17, - 0xa1, 0x55, 0xcc, 0x0d, 0xc8, 0x1f, 0x8e, 0xef, 0x7d, 0x90, 0x8f, 0xef, 0x7d, 0x7f, 0x02, 0x4b, - 0x75, 0x16, 0x7f, 0xfb, 0xf6, 0x02, 0xd9, 0xb7, 0xe4, 0x62, 0x1b, 0xb2, 0xb9, 0xd8, 0xfd, 0x45, - 0xa0, 0xef, 0x8d, 0x57, 0xfd, 0x3a, 0x97, 0x57, 0x35, 0x7c, 0x67, 0x5e, 0xb5, 0x22, 0xb4, 0x4c, - 0xfe, 0xb3, 0x59, 0xb9, 0xd5, 0x5b, 0x96, 0xb4, 0x03, 0xfc, 0x6a, 0xfd, 0xac, 0x77, 0x92, 0xab, - 0x43, 0x2b, 0x31, 0xf5, 0xb3, 0x5e, 0x49, 0x06, 0xb3, 0xb9, 0x4d, 0x11, 0x51, 0xed, 0xb2, 0xef, - 0x68, 0x77, 0xba, 0x02, 0x91, 0xe7, 0x44, 0xb8, 0xa5, 0xc5, 0x41, 0x40, 0xb2, 0x78, 0xd1, 0xa3, - 0xd0, 0x6b, 0x0e, 0x47, 0xca, 0xe6, 0x40, 0xfb, 0x72, 0x38, 0x50, 0xbe, 0xde, 0x1a, 0x22, 0x21, - 0x5f, 0xa0, 0x09, 0x7a, 0xfb, 0x9e, 0xf8, 0xd3, 0x16, 0x55, 0x72, 0xa1, 0x4d, 0x42, 0xfe, 0x1d, - 0x28, 0xf2, 0xf4, 0x76, 0x75, 0x57, 0xbd, 0x33, 0x97, 0x39, 0xc1, 0x64, 0x33, 0xb7, 0x99, 0x47, - 0x0a, 0xd0, 0xea, 0x6c, 0x4c, 0x3f, 0x0c, 0xb5, 0xf5, 0x6d, 0x9b, 0xc7, 0x44, 0x49, 0x5e, 0xb5, - 0x75, 0x57, 0xbd, 0x13, 0x76, 0x21, 0xa8, 0xab, 0x25, 0x30, 0x38, 0xda, 0xd0, 0x00, 0x28, 0x8f, - 0xbb, 0xea, 0x9d, 0xd4, 0x80, 0xe3, 0x8e, 0xb8, 0x4b, 0x0f, 0x16, 0xa0, 0x55, 0xcc, 0x85, 0xc3, - 0x1f, 0x8e, 0xb1, 0xd1, 0x5d, 0x5c, 0xf0, 0xdd, 0x76, 0x71, 0x75, 0x8d, 0x2a, 0xbd, 0x81, 0x5e, - 0x13, 0xf2, 0x7f, 0x85, 0xc8, 0x93, 0x60, 0x7a, 0x73, 0x2e, 0x0e, 0xbc, 0x24, 0xb2, 0xdb, 0xff, - 0xa7, 0xbb, 0x24, 0xb4, 0x3b, 0x5f, 0xc0, 0xa8, 0xe4, 0x5f, 0x12, 0x37, 0xe7, 0xa3, 0x47, 0xa8, - 0xf9, 0x80, 0x59, 0x10, 0x6f, 0x65, 0x2f, 0x88, 0xf5, 0x0f, 0xb1, 0x20, 0xe6, 0x87, 0x0a, 0x4a, - 0x56, 0x7e, 0x3f, 0x86, 0x00, 0xaa, 0x64, 0xcf, 0x7b, 0x20, 0x25, 0xbb, 0x2d, 0x9f, 0xca, 0xff, - 0x77, 0xaf, 0x39, 0x34, 0xd8, 0x98, 0x25, 0x9c, 0x6d, 0x38, 0x7c, 0x33, 0xcb, 0x0e, 0x4b, 0x2d, - 0x76, 0x08, 0xde, 0xb9, 0x24, 0x95, 0xb9, 0xc9, 0x0e, 0xb3, 0x19, 0xe1, 0x49, 0x4e, 0x95, 0x54, - 0x0e, 0x0d, 0x72, 0x42, 0xbe, 0x19, 0x12, 0xf7, 0x53, 0xdb, 0x0e, 0x5d, 0xec, 0x7f, 0x20, 0x83, - 0xf5, 0x5f, 0x16, 0xa0, 0x95, 0x76, 0x8a, 0x7e, 0x18, 0xdb, 0x67, 0xfb, 0x03, 0xdc, 0x11, 0x91, - 0xcf, 0x01, 0x03, 0x01, 0x6c, 0x21, 0x1e, 0x22, 0x18, 0x6b, 0x3d, 0x37, 0x68, 0x82, 0x6e, 0x72, - 0x49, 0x44, 0x54, 0xec, 0xbc, 0x83, 0x21, 0xf2, 0xb6, 0xf9, 0x99, 0xc5, 0xf0, 0xa6, 0x2f, 0x20, - 0x5e, 0xe6, 0xa4, 0xe5, 0x9f, 0x8c, 0x6f, 0x7f, 0x32, 0xbe, 0xdd, 0x47, 0x95, 0x7d, 0x3f, 0x9f, - 0x24, 0xf8, 0x7d, 0xe9, 0x9d, 0xef, 0xa0, 0xa5, 0x94, 0x44, 0x56, 0xab, 0xc5, 0x17, 0xe0, 0x59, - 0x45, 0xe2, 0x1a, 0x48, 0x38, 0x68, 0x8c, 0xdd, 0xe0, 0x84, 0x99, 0xc6, 0x80, 0x48, 0x93, 0x59, - 0x75, 0x4b, 0x47, 0x39, 0xe6, 0xda, 0x93, 0x3c, 0xa0, 0xfa, 0x3b, 0x38, 0x6b, 0xaa, 0xab, 0x55, - 0xe9, 0x25, 0xf4, 0x82, 0x30, 0x5b, 0x5f, 0xe2, 0x1a, 0xd8, 0x95, 0xa6, 0xcf, 0xb9, 0x36, 0x72, - 0x83, 0xae, 0xff, 0xd2, 0xff, 0xa9, 0x80, 0xb9, 0xe4, 0xa0, 0xed, 0x7e, 0x88, 0xf7, 0xdf, 0x8f, - 0xe7, 0xe5, 0x6d, 0xf0, 0x49, 0x0f, 0xc6, 0xda, 0xb6, 0xab, 0xd2, 0x16, 0xf4, 0x96, 0x30, 0xeb, - 0x78, 0x98, 0x0e, 0x10, 0x60, 0x47, 0x64, 0x46, 0x71, 0x36, 0x4e, 0xb7, 0x1b, 0x2d, 0x66, 0xf0, - 0xf0, 0x25, 0x59, 0x73, 0x6e, 0x71, 0xae, 0xb5, 0x36, 0xee, 0x03, 0x3e, 0x54, 0x2c, 0x63, 0x59, - 0x6d, 0xd7, 0x62, 0x4d, 0xae, 0x55, 0xda, 0xc7, 0xa1, 0x15, 0x9b, 0x94, 0xc8, 0xae, 0x7a, 0xa7, - 0xd3, 0xe7, 0x0d, 0x99, 0x6b, 0xab, 0xce, 0xe4, 0x13, 0x9c, 0xe5, 0xc8, 0x41, 0xf8, 0xc4, 0x33, - 0xc0, 0x02, 0xa1, 0x39, 0x9c, 0xbf, 0x0e, 0x8f, 0xcf, 0x1b, 0x82, 0x8b, 0x1e, 0x92, 0x57, 0x9a, - 0xc8, 0x9d, 0xeb, 0x55, 0xa9, 0x12, 0xfd, 0x54, 0xc8, 0xed, 0x40, 0x5c, 0x0d, 0xe3, 0xd0, 0xde, - 0xea, 0x49, 0x0d, 0x77, 0x19, 0xcd, 0xc9, 0x62, 0xfa, 0x27, 0x05, 0x88, 0x67, 0x6b, 0xff, 0x30, - 0x96, 0xd1, 0x5b, 0xb6, 0x65, 0x94, 0x73, 0xbf, 0x4b, 0xbe, 0xe6, 0xc1, 0x96, 0xd0, 0x46, 0x55, - 0x72, 0x22, 0x49, 0xc8, 0x33, 0x0a, 0xe6, 0x2e, 0xdc, 0x55, 0xef, 0x74, 0x58, 0x43, 0x36, 0xdb, - 0xca, 0xf1, 0xa0, 0x45, 0xa4, 0x3d, 0xbf, 0x1c, 0xcd, 0x6b, 0x6f, 0xf5, 0x98, 0x8f, 0x2d, 0xdb, - 0x5b, 0x3d, 0x3c, 0x8f, 0xe6, 0x1b, 0x18, 0xc8, 0x3a, 0xc1, 0x7f, 0xf3, 0x6b, 0x50, 0x21, 0x66, - 0x3a, 0x8d, 0x24, 0xde, 0x4a, 0xb1, 0x4c, 0x7f, 0x33, 0xf1, 0xdb, 0xe6, 0xb3, 0xf1, 0xdb, 0x4a, - 0xff, 0xfb, 0x55, 0x68, 0x01, 0x5e, 0x9f, 0x7c, 0x5d, 0x36, 0x37, 0xc2, 0x5a, 0x74, 0x11, 0x86, - 0xe1, 0x23, 0xeb, 0xf1, 0x07, 0x7a, 0xd7, 0xf5, 0x3c, 0x89, 0x72, 0xc8, 0xcc, 0x1a, 0x06, 0x88, - 0xab, 0x68, 0x73, 0x78, 0x60, 0x4a, 0xce, 0x1d, 0x88, 0x83, 0x78, 0x90, 0x43, 0x85, 0x8a, 0xd7, - 0x17, 0xa1, 0x11, 0x78, 0x0b, 0x6b, 0x9a, 0x54, 0xc9, 0x2b, 0x50, 0xa0, 0xf8, 0x0b, 0x6d, 0x62, - 0x32, 0x19, 0x1f, 0x68, 0x70, 0xbb, 0xc9, 0x33, 0x50, 0x9a, 0x24, 0xcf, 0x3a, 0x86, 0x12, 0x27, - 0xd3, 0x5f, 0x1d, 0x63, 0x03, 0xfe, 0xc2, 0xe3, 0x61, 0x9c, 0xe6, 0x9a, 0x04, 0x91, 0x35, 0xf3, - 0xea, 0xf5, 0x93, 0xfa, 0x13, 0xc7, 0x64, 0xda, 0x07, 0x7f, 0x94, 0x43, 0x28, 0x68, 0x46, 0x2d, - 0x32, 0x5f, 0xe0, 0xfe, 0x28, 0x2f, 0x4f, 0x59, 0x47, 0xa3, 0x1b, 0x91, 0x37, 0xb8, 0xb5, 0xaa, - 0x24, 0x09, 0x4c, 0x6b, 0xf1, 0x39, 0xf0, 0x77, 0x65, 0xc3, 0x5e, 0x41, 0xc0, 0xff, 0xd4, 0x70, - 0x17, 0x84, 0x06, 0x82, 0x97, 0xf1, 0x24, 0x9f, 0x38, 0x8e, 0xe0, 0x25, 0x33, 0x08, 0xf8, 0x31, - 0x0e, 0x2d, 0xc1, 0x47, 0x9f, 0x49, 0xcf, 0x82, 0xfc, 0xe1, 0xcc, 0x80, 0x9e, 0x3a, 0xa6, 0x26, - 0x50, 0x84, 0x33, 0x49, 0xd9, 0x30, 0x88, 0x6f, 0x42, 0xba, 0x6f, 0xb6, 0x7b, 0x5b, 0xe0, 0x2d, - 0x08, 0xa1, 0x84, 0x4b, 0x8d, 0x39, 0x9e, 0xb8, 0x0c, 0x71, 0x90, 0xc0, 0x9f, 0x0f, 0xae, 0x6a, - 0x61, 0x90, 0x65, 0x1b, 0x5e, 0xfe, 0x7f, 0xc5, 0xf9, 0xb4, 0x83, 0x6d, 0x5e, 0x2b, 0xf2, 0x1c, - 0x79, 0x8a, 0x96, 0x93, 0xe3, 0xd7, 0xaa, 0x51, 0x73, 0x96, 0x53, 0xa5, 0x53, 0x9c, 0x90, 0xdd, - 0x52, 0x3c, 0xc8, 0x19, 0x73, 0x1b, 0x3f, 0x46, 0x33, 0x22, 0xd3, 0xf8, 0xbf, 0xac, 0x67, 0x23, - 0x78, 0x10, 0x27, 0xa7, 0x2e, 0x83, 0xd4, 0x4e, 0xe5, 0x78, 0x7d, 0xa4, 0x17, 0x22, 0xd8, 0x81, - 0xdc, 0xaf, 0x4d, 0x7f, 0x4c, 0x82, 0x0b, 0xdc, 0x8b, 0x76, 0x90, 0xe7, 0x93, 0xc9, 0xd8, 0x51, - 0xfd, 0x8b, 0x51, 0x7d, 0x84, 0xa4, 0x30, 0xd1, 0x4f, 0xdd, 0x4e, 0x26, 0x86, 0xe1, 0x9d, 0x95, - 0xf1, 0xcd, 0xb8, 0xb5, 0x9c, 0x4d, 0x16, 0xff, 0x1b, 0xb4, 0x24, 0x18, 0xde, 0x8a, 0x3f, 0xa3, - 0x45, 0x09, 0x44, 0x66, 0x0b, 0x55, 0x01, 0x8f, 0x9c, 0x41, 0x66, 0xb2, 0x35, 0x10, 0x2b, 0xe8, - 0x67, 0x99, 0x4f, 0x99, 0xe9, 0x87, 0xb1, 0x99, 0x9f, 0x09, 0x33, 0xb1, 0xb5, 0xe5, 0x55, 0x1c, - 0xc2, 0x03, 0x22, 0xe3, 0x58, 0x24, 0x14, 0xce, 0x32, 0xc6, 0x34, 0x84, 0x4e, 0xcd, 0x9b, 0xaa, - 0x54, 0x27, 0xe4, 0xb6, 0x14, 0xd7, 0x53, 0x5a, 0xd8, 0x94, 0x2f, 0x40, 0x95, 0xb1, 0x40, 0xf1, - 0xda, 0xb0, 0xd1, 0x93, 0x8b, 0xc4, 0xd8, 0x2f, 0x8f, 0xd0, 0xec, 0xa0, 0x0c, 0x59, 0x28, 0xbf, - 0xfb, 0x05, 0x1b, 0xd1, 0x01, 0x44, 0xe2, 0x7c, 0xad, 0xc5, 0xa7, 0x29, 0x69, 0x6c, 0xc4, 0x06, - 0x1b, 0x2d, 0xf9, 0xda, 0xb1, 0xb7, 0xb3, 0x8b, 0xbf, 0xed, 0xed, 0xec, 0x92, 0x6f, 0x7f, 0x3b, - 0x5b, 0xfc, 0x5d, 0x6e, 0x67, 0x97, 0x3e, 0xec, 0xed, 0xec, 0x38, 0x87, 0x8a, 0xf1, 0x02, 0xad, - 0x0f, 0x05, 0xdb, 0x7d, 0x5e, 0x25, 0x44, 0xf2, 0x80, 0x1e, 0xe6, 0x54, 0xe9, 0x20, 0x27, 0xd8, - 0xcb, 0xc4, 0x10, 0xc4, 0x54, 0x03, 0x87, 0x37, 0x2b, 0xed, 0x08, 0x16, 0x63, 0xe1, 0x27, 0x49, - 0x28, 0x37, 0xd2, 0xfb, 0x6b, 0xdc, 0xb2, 0xaa, 0xd1, 0xdf, 0xa6, 0x34, 0xfb, 0x02, 0x4d, 0x55, - 0x10, 0x06, 0xb1, 0xca, 0xbd, 0x2f, 0x0c, 0x21, 0x0f, 0x53, 0x03, 0x37, 0xb4, 0xc1, 0xce, 0x74, - 0xf4, 0x20, 0x99, 0xdc, 0x4a, 0x32, 0xbb, 0xc9, 0xd8, 0x51, 0xdc, 0xb2, 0x95, 0xf4, 0x29, 0xdb, - 0x49, 0xe0, 0xa3, 0x1c, 0x5a, 0xe8, 0x81, 0xbc, 0xf3, 0xcb, 0xad, 0x18, 0xfd, 0x04, 0x24, 0xbe, - 0x0f, 0x4c, 0x07, 0x14, 0xf6, 0x0a, 0x47, 0xf2, 0xee, 0x39, 0xed, 0xfa, 0xe9, 0x4c, 0xb4, 0x33, - 0xd3, 0xdd, 0xaf, 0x0d, 0x75, 0xa5, 0xae, 0xf6, 0x9b, 0x82, 0x2b, 0x49, 0xf2, 0x46, 0xe2, 0x57, - 0x02, 0x8b, 0x85, 0x8b, 0x5c, 0x33, 0x70, 0x87, 0xe3, 0xc3, 0x70, 0x30, 0x90, 0xbe, 0xfa, 0xa9, - 0x7e, 0x7e, 0x88, 0xec, 0x64, 0xd2, 0x09, 0xff, 0x36, 0x5a, 0xec, 0x55, 0xe8, 0xbb, 0x7a, 0x92, - 0x8e, 0x14, 0x5c, 0x5c, 0x19, 0xb8, 0xf8, 0x24, 0xe8, 0x20, 0xe0, 0x02, 0x33, 0x71, 0x25, 0x35, - 0x75, 0x28, 0x39, 0x75, 0x34, 0x35, 0xd5, 0x4f, 0xd6, 0x1e, 0x5b, 0x97, 0xdf, 0x82, 0x90, 0x12, - 0x68, 0xf2, 0x05, 0x20, 0xc0, 0x05, 0x6f, 0x69, 0xae, 0x0c, 0x58, 0x7c, 0x5c, 0x8b, 0x9f, 0xd0, - 0x6e, 0x76, 0x5a, 0xf9, 0x07, 0x12, 0x27, 0xf4, 0x8f, 0x07, 0x48, 0xb6, 0x36, 0xa6, 0x22, 0xff, - 0x01, 0x7d, 0x89, 0x04, 0xe9, 0x46, 0x71, 0x4c, 0x32, 0xf3, 0xb5, 0xd1, 0xcb, 0xc9, 0xf8, 0x31, - 0x88, 0x5b, 0x07, 0x07, 0x9e, 0x29, 0xc7, 0x9c, 0x21, 0xb1, 0x26, 0x06, 0x27, 0xd2, 0x57, 0x3b, - 0xca, 0xb4, 0x68, 0x22, 0x19, 0x8b, 0x1b, 0xca, 0x98, 0xde, 0x73, 0x92, 0xa4, 0x76, 0x30, 0x1f, - 0x1f, 0xfd, 0x03, 0xaa, 0x9a, 0x1a, 0x1c, 0x0a, 0xe7, 0x24, 0x9d, 0xcd, 0x2f, 0x68, 0x9b, 0x55, - 0x0f, 0xec, 0xdb, 0x6c, 0x4b, 0xf1, 0x27, 0xf9, 0xf9, 0x33, 0x56, 0x63, 0xd9, 0x09, 0x92, 0xd9, - 0x56, 0xfc, 0x87, 0xa8, 0xd0, 0x98, 0x08, 0xdc, 0xf7, 0x2a, 0xdc, 0xf7, 0x53, 0x79, 0xfb, 0x86, - 0x54, 0xfe, 0xb8, 0x6b, 0x1c, 0xa2, 0x80, 0xb6, 0x12, 0xd7, 0x66, 0xf5, 0x9b, 0x8c, 0x1f, 0xb3, - 0x75, 0x47, 0x6b, 0xf2, 0x7f, 0x81, 0x96, 0xb4, 0xfa, 0xdd, 0x91, 0x3d, 0xc1, 0x50, 0x0b, 0xee, - 0x6f, 0xf5, 0x5c, 0x47, 0x67, 0x3d, 0x53, 0x13, 0x8e, 0x4e, 0xfc, 0x26, 0xcb, 0x86, 0x41, 0x5c, - 0x0b, 0x0f, 0xc4, 0xd9, 0x88, 0x82, 0xb6, 0xbe, 0x6d, 0xb5, 0xd7, 0xbc, 0x87, 0x96, 0x65, 0x09, - 0x08, 0xdf, 0x5f, 0x5a, 0xf4, 0x5f, 0xa2, 0x15, 0x39, 0x87, 0xfd, 0xf7, 0x87, 0xfd, 0x0d, 0xb4, - 0x22, 0x67, 0x3c, 0x1e, 0x2a, 0xd8, 0x47, 0x17, 0xa7, 0x4a, 0x51, 0x0e, 0xfd, 0x85, 0x00, 0x72, - 0xa5, 0xd8, 0x66, 0xcc, 0x18, 0x3d, 0xb1, 0x2f, 0x0d, 0x1b, 0x63, 0x47, 0x5e, 0x41, 0x1f, 0x25, - 0x31, 0x0b, 0x20, 0xe0, 0x7f, 0xf7, 0xcd, 0x64, 0xfc, 0x73, 0x5a, 0x93, 0xca, 0x70, 0xda, 0xc8, - 0x0d, 0x10, 0xe3, 0xd2, 0x1f, 0x9f, 0xcb, 0x7c, 0x11, 0x33, 0xe6, 0xdc, 0x14, 0xe6, 0x0c, 0x19, - 0xc5, 0x8c, 0xc5, 0x91, 0x25, 0xe1, 0x95, 0xfe, 0xc7, 0x05, 0x68, 0x59, 0xd6, 0x72, 0xe2, 0x7d, - 0xe8, 0x11, 0x10, 0x53, 0x03, 0x10, 0x7e, 0x08, 0x32, 0xc3, 0x90, 0x1c, 0x2b, 0xf8, 0x91, 0x7b, - 0xbe, 0x72, 0xf1, 0x49, 0x78, 0xde, 0xc6, 0x66, 0x99, 0x39, 0xd4, 0x9d, 0x39, 0x38, 0x46, 0xd8, - 0x4b, 0xbe, 0x36, 0x06, 0xaf, 0xc1, 0x60, 0x12, 0xfd, 0xbc, 0x80, 0xe1, 0x35, 0x0c, 0x9c, 0xa0, - 0x86, 0x1f, 0x80, 0x14, 0xac, 0x4a, 0x04, 0x35, 0x5b, 0x97, 0x7f, 0x17, 0x15, 0xb7, 0xb8, 0x3d, - 0x7b, 0x7d, 0x01, 0xa5, 0x96, 0x4d, 0x9c, 0x82, 0xed, 0xad, 0xf6, 0x12, 0xf1, 0x29, 0xdb, 0xcf, - 0x3c, 0x88, 0xed, 0xf5, 0xf9, 0x10, 0x5a, 0xe9, 0xf5, 0x85, 0x0d, 0xc2, 0x9d, 0xb6, 0x98, 0x91, - 0xf0, 0x5a, 0x09, 0x47, 0x67, 0xcc, 0x5b, 0x41, 0x7c, 0x86, 0x1d, 0x9a, 0xee, 0x2f, 0x33, 0xa7, - 0xae, 0xb3, 0xf1, 0xf4, 0x20, 0x8b, 0x96, 0x9c, 0xb7, 0x29, 0xd3, 0xa7, 0xcb, 0x16, 0x7a, 0x70, - 0x41, 0x6e, 0x9f, 0xb6, 0x0a, 0xf9, 0xfa, 0xc4, 0x4f, 0x8c, 0xf3, 0xf6, 0x69, 0x6b, 0xca, 0x7b, - 0xd0, 0x72, 0x02, 0xb7, 0x42, 0xe2, 0x31, 0xa9, 0x8b, 0x72, 0x0a, 0x45, 0x47, 0x4e, 0x5f, 0x24, - 0x50, 0xd7, 0xcd, 0x8b, 0xa4, 0xa3, 0x9c, 0x36, 0xbc, 0x0b, 0x15, 0xb5, 0xb7, 0x7a, 0xd8, 0xb0, - 0xf7, 0x44, 0x95, 0xa2, 0x50, 0xf1, 0x71, 0xfa, 0x67, 0x9e, 0xb9, 0xb1, 0xea, 0x55, 0x1b, 0xac, - 0x17, 0x3d, 0x2f, 0x64, 0x2f, 0x64, 0xf1, 0xe9, 0xac, 0xa8, 0xce, 0x24, 0x55, 0x21, 0xc3, 0x8f, - 0x4a, 0x87, 0x39, 0xe2, 0x22, 0xcb, 0xb0, 0x72, 0x7e, 0x13, 0x93, 0x03, 0x95, 0x73, 0xcc, 0x2b, - 0x2b, 0x06, 0xca, 0xac, 0x1c, 0xa8, 0x4f, 0x18, 0x7f, 0x41, 0xe8, 0x2e, 0x88, 0x48, 0xc5, 0xe6, - 0x40, 0xb5, 0xb2, 0x9a, 0x9a, 0x81, 0xf1, 0x73, 0x7a, 0xc0, 0x0e, 0x9d, 0x94, 0x32, 0x20, 0x2b, - 0xf7, 0x5c, 0x28, 0xfd, 0x0f, 0x2b, 0x51, 0x91, 0x35, 0x60, 0x6f, 0xd8, 0x53, 0xda, 0x73, 0x96, - 0x2c, 0x64, 0x4b, 0x69, 0xbf, 0x98, 0x06, 0xc5, 0x72, 0xd5, 0xda, 0xb3, 0xd2, 0xaf, 0xb3, 0xe9, - 0x9c, 0x60, 0x5c, 0xc0, 0x3a, 0xe7, 0x32, 0x2b, 0xee, 0x16, 0xab, 0x6d, 0xfe, 0x36, 0x27, 0xd0, - 0x7a, 0x8d, 0x5b, 0x95, 0x5e, 0x67, 0xb3, 0xd8, 0x6f, 0x60, 0x22, 0x73, 0x45, 0x69, 0xde, 0x73, - 0x58, 0x62, 0xa0, 0x1a, 0xb9, 0x6a, 0x93, 0xb1, 0xb8, 0xc1, 0xa5, 0x20, 0x69, 0x5c, 0xed, 0x37, - 0x35, 0x4f, 0x86, 0x1e, 0xcf, 0x7b, 0x89, 0x57, 0x3d, 0xbf, 0xc6, 0xd9, 0x50, 0xc9, 0xc6, 0x72, - 0x77, 0x52, 0x5b, 0xce, 0x7c, 0x26, 0xf9, 0x11, 0xb1, 0x52, 0xaf, 0xcd, 0xed, 0x3a, 0xaf, 0xb9, - 0x7a, 0x0f, 0x5a, 0x06, 0x07, 0xbb, 0xd4, 0x16, 0x09, 0x86, 0x3d, 0x6e, 0xf2, 0x80, 0xb9, 0x10, - 0x72, 0x72, 0x66, 0x97, 0x89, 0x3f, 0xb6, 0x31, 0x30, 0x46, 0xb2, 0xa6, 0x6f, 0x95, 0xe1, 0x22, - 0x3f, 0xbb, 0x21, 0x1f, 0x40, 0x8b, 0xdd, 0x6d, 0x91, 0x60, 0x83, 0xc7, 0xed, 0xf7, 0x05, 0x9a, - 0x88, 0x5e, 0x97, 0x23, 0x36, 0x48, 0x56, 0x15, 0x3c, 0x2d, 0x90, 0x90, 0x8e, 0x6d, 0x29, 0x96, - 0xd8, 0x22, 0xb0, 0x61, 0x59, 0xd4, 0xe4, 0x73, 0x4c, 0x35, 0xbe, 0x8f, 0x43, 0x4b, 0xfd, 0xee, - 0xb6, 0x80, 0x67, 0xaf, 0x99, 0x47, 0x9e, 0xa8, 0x5a, 0x39, 0xb1, 0xb0, 0xb6, 0xe0, 0x5a, 0xb0, - 0x2f, 0xda, 0x20, 0x9a, 0x3e, 0xe8, 0x5d, 0x59, 0xed, 0x45, 0x01, 0xfa, 0xd4, 0x4f, 0xdd, 0x26, - 0x39, 0x18, 0x4d, 0x41, 0x38, 0xf9, 0xd5, 0x51, 0x7a, 0x90, 0x43, 0xd0, 0x38, 0x39, 0xab, 0x2d, - 0x93, 0x5f, 0xa7, 0x70, 0x96, 0x94, 0x09, 0xe6, 0x4a, 0xb4, 0x65, 0xd7, 0xc1, 0x9f, 0x6f, 0x66, - 0xd7, 0x79, 0x32, 0x37, 0x11, 0x09, 0x2e, 0x31, 0x67, 0x94, 0xa4, 0x57, 0x68, 0xc9, 0xca, 0x71, - 0x32, 0x47, 0x57, 0x38, 0xdb, 0x09, 0xe9, 0x0a, 0x22, 0xb1, 0x93, 0x9c, 0x27, 0x4f, 0xe7, 0x76, - 0x65, 0xe8, 0x73, 0x37, 0x47, 0x69, 0x22, 0x77, 0x33, 0xed, 0x09, 0xbf, 0x07, 0x2d, 0x34, 0x76, - 0xd1, 0xf6, 0x06, 0xe2, 0x94, 0x8a, 0x73, 0xb7, 0x10, 0x90, 0x28, 0x51, 0x3c, 0x99, 0x68, 0x2f, - 0xc9, 0xa4, 0x89, 0x63, 0x73, 0x6d, 0x6f, 0xc0, 0x9a, 0x77, 0x67, 0xaa, 0xfb, 0x2a, 0x3d, 0xd9, - 0x93, 0xb1, 0xeb, 0x30, 0x86, 0xc6, 0x60, 0x9a, 0x79, 0x8f, 0x64, 0x82, 0x0a, 0xdb, 0x3c, 0x59, - 0xc5, 0xcc, 0xd2, 0xbc, 0x4a, 0xb2, 0x34, 0x2f, 0x4b, 0xb5, 0xb2, 0xe7, 0x2b, 0x28, 0xbe, 0x4f, - 0xbe, 0x82, 0xa5, 0x39, 0xf9, 0x0a, 0x7a, 0x39, 0xf6, 0xfd, 0x0e, 0xe8, 0x46, 0x38, 0xa6, 0x3a, - 0xf3, 0x7e, 0xe7, 0x7d, 0x3a, 0x9c, 0x0f, 0x15, 0x5c, 0xc8, 0xd8, 0x2f, 0x90, 0x7c, 0x2b, 0x36, - 0x40, 0xe6, 0x07, 0xda, 0x27, 0xef, 0x9e, 0xd3, 0xfb, 0x3a, 0x92, 0xb1, 0x68, 0xfa, 0xf0, 0x2d, - 0xf6, 0x49, 0xcf, 0x7f, 0xc3, 0xa1, 0x42, 0x53, 0x2d, 0x22, 0xca, 0xcf, 0x6d, 0x4e, 0x95, 0xbe, - 0xe0, 0x04, 0x0a, 0x16, 0x2f, 0x73, 0x94, 0x98, 0x2c, 0x2d, 0x8d, 0x30, 0x54, 0x08, 0x24, 0x8f, - 0xfb, 0xa1, 0x89, 0xf6, 0xaf, 0x53, 0xfb, 0x81, 0x89, 0x87, 0x58, 0x14, 0x6f, 0x1c, 0xd4, 0x4f, - 0x58, 0xd6, 0xa6, 0xd4, 0xd4, 0xa1, 0xf4, 0x91, 0xce, 0x7b, 0xd1, 0x4e, 0xf8, 0x1c, 0x6d, 0x64, - 0xcc, 0x90, 0x9d, 0x63, 0x9f, 0x19, 0x92, 0x18, 0x7e, 0x0f, 0x9c, 0x8c, 0x5d, 0x07, 0xfd, 0x8b, - 0xda, 0x80, 0x8c, 0x25, 0x83, 0xb7, 0x83, 0x31, 0x08, 0x58, 0x6f, 0x21, 0x79, 0xb5, 0x29, 0xc5, - 0xfc, 0x5f, 0x72, 0xd4, 0xa4, 0x08, 0x9a, 0xd4, 0x04, 0xa7, 0x4a, 0x3e, 0x81, 0xc0, 0xc4, 0xdd, - 0x56, 0x9c, 0xd0, 0x23, 0xb7, 0xf5, 0x68, 0x07, 0x98, 0x6b, 0xd2, 0x07, 0xa7, 0xe1, 0xa7, 0x53, - 0xae, 0x93, 0x76, 0xb8, 0xb6, 0x6d, 0x9a, 0x49, 0xf4, 0xc9, 0x3b, 0xb7, 0x6d, 0x83, 0xbf, 0x6a, - 0xeb, 0xb6, 0xd4, 0x11, 0xe0, 0x46, 0x69, 0xcb, 0x4e, 0xb9, 0x6e, 0x26, 0xd1, 0xe7, 0xda, 0xe6, - 0xda, 0xe1, 0x92, 0xb6, 0xb8, 0xde, 0x93, 0x76, 0xb8, 0xb6, 0x6f, 0x33, 0x2b, 0xd5, 0xd5, 0x7e, - 0x53, 0xf3, 0xf3, 0xd0, 0xeb, 0x72, 0xa1, 0x89, 0x47, 0x5e, 0x44, 0xd0, 0xc8, 0x85, 0x26, 0x16, - 0x79, 0x21, 0x20, 0x91, 0x97, 0xda, 0x71, 0xc8, 0x8b, 0x08, 0x0a, 0x9a, 0xc4, 0x62, 0x2f, 0x42, - 0x9e, 0x60, 0x20, 0xdc, 0xd6, 0x82, 0x0f, 0x04, 0xd0, 0xe2, 0xb0, 0xe1, 0x84, 0x01, 0x8b, 0x2f, - 0x59, 0x7f, 0x43, 0x10, 0x72, 0x33, 0x1e, 0x1a, 0x98, 0x20, 0x42, 0x10, 0xbc, 0x1c, 0xf2, 0x15, - 0x43, 0xec, 0x34, 0x18, 0x38, 0x99, 0x41, 0xc2, 0x87, 0xd0, 0x12, 0x63, 0x53, 0x50, 0xc6, 0xf6, - 0xc8, 0xec, 0x96, 0x12, 0xb3, 0x4e, 0xcd, 0x7a, 0x1c, 0x21, 0x8c, 0x6d, 0x26, 0xae, 0xb2, 0xce, - 0x35, 0xbc, 0x45, 0xe1, 0x7c, 0xfe, 0xa6, 0x66, 0xc1, 0x11, 0xae, 0x60, 0x39, 0x27, 0xdb, 0x2a, - 0xf3, 0x8d, 0x08, 0xde, 0xd4, 0x6f, 0x63, 0xce, 0xd8, 0x95, 0xf8, 0x1b, 0x71, 0x34, 0x8b, 0x9c, - 0x42, 0xf1, 0x29, 0xfa, 0xc3, 0xa1, 0x8d, 0x8c, 0x69, 0x43, 0x5d, 0xb0, 0x56, 0x92, 0xb1, 0x23, - 0xa9, 0xe1, 0x2e, 0x87, 0xab, 0x56, 0xce, 0x69, 0xc2, 0x37, 0xa3, 0xf9, 0x11, 0x77, 0x53, 0xb8, - 0x64, 0x55, 0xfe, 0xa0, 0x85, 0x2c, 0xdf, 0x32, 0x93, 0x81, 0x89, 0xaa, 0x54, 0x25, 0xe0, 0x56, - 0xe2, 0x4f, 0xf2, 0xf2, 0x2c, 0x18, 0x44, 0x36, 0x0b, 0xb1, 0x8c, 0xab, 0xf3, 0xbf, 0xe7, 0x50, - 0x31, 0x3d, 0xfe, 0xb1, 0xe2, 0xbd, 0x1a, 0x7f, 0xce, 0x00, 0xa7, 0x4a, 0x47, 0x38, 0xc1, 0x5e, - 0x26, 0x1e, 0xb0, 0x24, 0x36, 0xb8, 0x61, 0x0d, 0x04, 0x43, 0x2d, 0x6e, 0x7f, 0x95, 0x42, 0x62, - 0x90, 0x96, 0xdf, 0x8b, 0x76, 0xea, 0x67, 0xc6, 0x33, 0xd1, 0x61, 0xf6, 0x78, 0xa2, 0x8d, 0x34, - 0xb5, 0x8f, 0xc6, 0x37, 0xcd, 0x5b, 0xa1, 0xc2, 0xa1, 0xf5, 0x7f, 0xe9, 0xdc, 0xb5, 0x95, 0x00, - 0x7a, 0x4e, 0xba, 0x6a, 0x9d, 0xf0, 0xb7, 0x6c, 0xa7, 0x84, 0x8f, 0x72, 0x68, 0xbe, 0x3b, 0xa4, - 0xb8, 0x4b, 0x1e, 0xc5, 0xb3, 0xfe, 0x58, 0xfe, 0x17, 0x39, 0x21, 0xc5, 0x5d, 0xf3, 0xb6, 0x2a, - 0x6d, 0x13, 0x70, 0x5d, 0x71, 0x23, 0xc1, 0x8b, 0x93, 0x2c, 0x1a, 0xa2, 0x1e, 0x23, 0x0a, 0x94, - 0x81, 0xea, 0x9f, 0x8c, 0xf5, 0xeb, 0x7d, 0x87, 0xb5, 0xf1, 0xe1, 0x0a, 0x87, 0xd6, 0x73, 0x86, - 0xcd, 0x4f, 0x4d, 0xeb, 0x97, 0xcb, 0x18, 0xdb, 0x77, 0xc9, 0x74, 0xf5, 0x0a, 0x5a, 0xcc, 0x1c, - 0x3a, 0x0f, 0xd5, 0xf4, 0x25, 0x54, 0xf4, 0xad, 0xd2, 0xf9, 0x56, 0x1b, 0xe3, 0x80, 0xb6, 0x08, - 0x96, 0xac, 0xc8, 0x44, 0xa0, 0x35, 0x18, 0xca, 0xc4, 0x24, 0x28, 0x85, 0xf7, 0xa2, 0x1d, 0x54, - 0x11, 0xbc, 0x17, 0xed, 0x90, 0xde, 0x69, 0xb0, 0x4d, 0xd5, 0xc1, 0x69, 0xed, 0xc8, 0x59, 0xed, - 0x46, 0x47, 0xfa, 0xd3, 0xee, 0xd2, 0x3e, 0x0e, 0x15, 0xd1, 0x81, 0xe6, 0xab, 0x51, 0x51, 0x63, - 0xb3, 0x93, 0xb9, 0xf6, 0x28, 0x26, 0x16, 0x3c, 0x0a, 0x15, 0x97, 0xd0, 0x41, 0x34, 0x96, 0xbe, - 0x55, 0xc0, 0x3b, 0xd1, 0x62, 0xf2, 0x83, 0x89, 0x8f, 0x85, 0xef, 0xb3, 0x59, 0x38, 0x7e, 0x74, - 0x6d, 0xf3, 0x16, 0x60, 0x4b, 0x4b, 0xcf, 0xaf, 0x40, 0xcb, 0xb3, 0x45, 0x27, 0xfe, 0x30, 0x87, - 0x8a, 0x19, 0x89, 0x88, 0xca, 0xc4, 0x38, 0x0d, 0xa8, 0xbd, 0x44, 0xdc, 0x6a, 0x33, 0x92, 0x1a, - 0xb2, 0xb1, 0xc1, 0xb2, 0x19, 0x53, 0x27, 0xce, 0x03, 0x39, 0x9d, 0x3a, 0x71, 0x99, 0x11, 0x5b, - 0x21, 0xd1, 0xa9, 0xab, 0x96, 0xe6, 0x7f, 0x4d, 0x8f, 0x7f, 0xa5, 0x9f, 0x9c, 0x76, 0xd5, 0xca, - 0x76, 0xec, 0xfc, 0x4e, 0xb4, 0x8c, 0x01, 0x30, 0xdf, 0x89, 0x25, 0xd6, 0xec, 0x32, 0x71, 0x55, - 0x16, 0x31, 0xe4, 0x8b, 0xb3, 0xeb, 0xf1, 0x6f, 0xa1, 0x45, 0x2d, 0xbe, 0x40, 0x83, 0xef, 0x23, - 0x33, 0xdd, 0xe2, 0x7a, 0x55, 0x7a, 0x46, 0x30, 0x61, 0x62, 0x09, 0x45, 0xa0, 0x8f, 0x44, 0xb5, - 0x1b, 0x83, 0xc0, 0x1b, 0xf4, 0x13, 0x37, 0xbe, 0xa9, 0x59, 0x24, 0x2c, 0x28, 0x49, 0x2f, 0x2a, - 0xfb, 0x33, 0xd9, 0xac, 0xcc, 0xd7, 0xa3, 0x45, 0x2d, 0xee, 0xfd, 0x18, 0xd7, 0x7c, 0x8c, 0xeb, - 0x45, 0xec, 0x39, 0x42, 0x60, 0xe2, 0xda, 0x2c, 0x92, 0x0c, 0x8c, 0x97, 0xae, 0xe6, 0xc7, 0x08, - 0x4d, 0xf8, 0xed, 0xd8, 0x4e, 0xe8, 0x0b, 0x29, 0x5e, 0x8c, 0x75, 0x01, 0xc6, 0x8a, 0x4d, 0x51, - 0x2c, 0x5c, 0x7c, 0x9c, 0xc5, 0xac, 0x8f, 0x5c, 0xd0, 0x47, 0xce, 0x52, 0xb4, 0x32, 0x5b, 0x93, - 0x7f, 0xcd, 0xee, 0xcc, 0x8b, 0x9f, 0x23, 0x93, 0xcb, 0xd8, 0xc7, 0xb3, 0xc9, 0xc3, 0x27, 0xfc, - 0xae, 0x7a, 0xa7, 0xb1, 0xd8, 0x88, 0x13, 0xc7, 0x01, 0xb4, 0x8c, 0x84, 0x8b, 0x75, 0x06, 0x83, - 0x7e, 0x6f, 0x70, 0x1f, 0xa8, 0x95, 0xc5, 0x35, 0xdb, 0x55, 0x69, 0x8b, 0x90, 0x5d, 0x26, 0xbe, - 0x92, 0x85, 0x92, 0x5c, 0x85, 0xf5, 0xfe, 0x0e, 0x02, 0x76, 0x6b, 0x87, 0xee, 0x68, 0xfd, 0xb7, - 0xb4, 0x63, 0x63, 0xfa, 0xc8, 0x05, 0x2a, 0xfa, 0x3f, 0xb7, 0x7e, 0x7d, 0xea, 0xaa, 0x2a, 0x67, - 0xe3, 0xe2, 0xaf, 0x70, 0xa8, 0xc8, 0x4c, 0x4e, 0x0e, 0x02, 0x30, 0x35, 0x31, 0x5b, 0x70, 0xb1, - 0x3d, 0xe7, 0x23, 0x70, 0x47, 0x20, 0x3d, 0x5e, 0x39, 0x69, 0x08, 0x90, 0xc3, 0x5d, 0x4c, 0x82, - 0x58, 0x2b, 0x2d, 0x23, 0x01, 0xe8, 0x7d, 0xbd, 0xa9, 0xee, 0xab, 0x5a, 0x77, 0x8f, 0x36, 0x34, - 0x90, 0x19, 0x8d, 0x6b, 0xf1, 0xc1, 0xd4, 0xe8, 0xb8, 0xc1, 0xbf, 0x70, 0x2a, 0x40, 0x92, 0x4e, - 0xfc, 0xdc, 0x45, 0xad, 0xb7, 0x9f, 0x42, 0x32, 0x9f, 0x9f, 0x96, 0x2d, 0x12, 0xf8, 0xb3, 0x1c, - 0x5a, 0xf0, 0x51, 0x30, 0xa0, 0x80, 0xe8, 0x5c, 0x54, 0x03, 0x56, 0x28, 0x01, 0x60, 0xe2, 0xbe, - 0x07, 0x21, 0x90, 0x44, 0x17, 0xee, 0x8b, 0xb3, 0x04, 0x9a, 0xb0, 0x6f, 0x49, 0x21, 0xf4, 0xcf, - 0xdf, 0x2e, 0x40, 0x8b, 0x43, 0x4a, 0x24, 0x74, 0xa0, 0x3e, 0xe8, 0xf7, 0x79, 0x0e, 0x10, 0x79, - 0xfb, 0xe3, 0x02, 0x55, 0x1a, 0x2c, 0x10, 0xd8, 0x12, 0xf1, 0xff, 0xe5, 0x88, 0x86, 0x02, 0xc7, - 0xa1, 0x99, 0xcb, 0xc7, 0x10, 0x4d, 0x0f, 0xf7, 0xa7, 0x27, 0x4e, 0x40, 0xa0, 0xf7, 0x99, 0xc4, - 0xb0, 0x6b, 0xeb, 0xd6, 0xba, 0x5a, 0x97, 0xb4, 0xa3, 0x6e, 0xb7, 0x5c, 0xb7, 0x43, 0x7e, 0xb7, - 0x0c, 0xd6, 0xf5, 0x0b, 0xfa, 0xb5, 0xd1, 0x72, 0x2c, 0x35, 0x39, 0xe5, 0xba, 0xad, 0x75, 0xdb, - 0x76, 0x48, 0x5b, 0x76, 0xbb, 0xb6, 0xed, 0xa8, 0x93, 0x77, 0x49, 0x5b, 0x0c, 0xb9, 0x7d, 0xdb, - 0x76, 0xa8, 0x7e, 0x2f, 0xda, 0x49, 0xe5, 0xf4, 0x64, 0x2c, 0x9e, 0x85, 0xcc, 0x38, 0x11, 0x41, - 0xfb, 0x3f, 0x75, 0x9b, 0x1c, 0x24, 0x89, 0x61, 0x70, 0xa0, 0x83, 0x11, 0xd7, 0xd4, 0x3e, 0xe3, - 0xc3, 0x80, 0xcd, 0x64, 0xa2, 0x43, 0xc9, 0x58, 0x54, 0xbb, 0x71, 0x2e, 0x3d, 0x71, 0xc2, 0x3c, - 0xc5, 0x8d, 0x4f, 0x48, 0x9d, 0xbd, 0xa5, 0xf5, 0xdc, 0x20, 0xfb, 0x0d, 0x3e, 0xe4, 0xda, 0xa8, - 0x7e, 0xe2, 0x06, 0xb9, 0xf0, 0x84, 0x70, 0x37, 0x18, 0xa9, 0xd6, 0x3d, 0x06, 0x15, 0xee, 0x45, - 0x3b, 0x65, 0x76, 0x38, 0xf8, 0x7f, 0xc7, 0xa1, 0x55, 0x2d, 0x6d, 0xfe, 0x88, 0xef, 0xbd, 0x60, - 0x40, 0x69, 0xc0, 0x7d, 0x93, 0x21, 0x84, 0x2b, 0x9e, 0x2f, 0x39, 0x55, 0x9a, 0xe0, 0x84, 0xfc, - 0x75, 0xc4, 0x13, 0x1c, 0x64, 0x56, 0xd7, 0xa2, 0x89, 0x99, 0xc4, 0x70, 0xbd, 0xec, 0xda, 0x2e, - 0xbb, 0x76, 0xbc, 0x3b, 0x93, 0xe8, 0xab, 0x7b, 0x7b, 0xa7, 0xb4, 0xc5, 0xb5, 0xc3, 0xf8, 0x50, - 0x0b, 0x3a, 0x6c, 0xda, 0x1b, 0xc7, 0x32, 0x9f, 0x9f, 0xa6, 0xb3, 0x48, 0x97, 0x6d, 0x32, 0x36, - 0x40, 0x57, 0x03, 0x3b, 0x47, 0xf7, 0xa2, 0x9d, 0x26, 0xba, 0x99, 0xc4, 0x30, 0x7c, 0x16, 0xad, - 0x78, 0x2f, 0xda, 0x01, 0xad, 0xf5, 0x91, 0x78, 0x32, 0x31, 0x4c, 0xf2, 0xfd, 0xe7, 0x27, 0x97, - 0xbf, 0xca, 0xa1, 0xe5, 0x21, 0xa5, 0xd5, 0xef, 0xf6, 0x28, 0x3b, 0x03, 0x7b, 0x15, 0xb7, 0x3f, - 0xb2, 0x17, 0x72, 0x12, 0x16, 0xd6, 0xfc, 0x46, 0x95, 0xf6, 0x0b, 0x39, 0x85, 0xa2, 0x17, 0xb4, - 0xf9, 0xd4, 0xd9, 0x63, 0xfa, 0xc0, 0x55, 0x43, 0x42, 0xef, 0xb8, 0xac, 0xc5, 0xef, 0x10, 0x89, - 0xe1, 0xec, 0x5d, 0xbd, 0xff, 0x13, 0x7d, 0xa4, 0x5f, 0x3b, 0x32, 0x6a, 0x57, 0xf1, 0xef, 0x45, - 0x3b, 0xd3, 0x77, 0xcf, 0xa7, 0xa6, 0xae, 0x6f, 0xd0, 0x7a, 0x0e, 0x65, 0xd4, 0x0b, 0xad, 0xbe, - 0x40, 0x53, 0x32, 0xd6, 0x6f, 0x48, 0x40, 0x3d, 0x67, 0xd2, 0x57, 0x0f, 0x25, 0x63, 0x71, 0x8a, - 0x6b, 0x26, 0xd1, 0x21, 0xe7, 0xf4, 0xcb, 0xff, 0x35, 0x87, 0x16, 0x87, 0x81, 0x9f, 0xe3, 0xc4, - 0x8d, 0x70, 0xf7, 0xf5, 0x4f, 0x39, 0x55, 0xfa, 0x2f, 0x38, 0x81, 0x2d, 0x11, 0x7f, 0xcf, 0x91, - 0x95, 0x64, 0x66, 0x2c, 0x77, 0x6e, 0x91, 0x1a, 0x1a, 0x5c, 0xce, 0xdd, 0x0d, 0x4e, 0x69, 0x8b, - 0x6b, 0xdb, 0xa6, 0x32, 0xa0, 0xab, 0x1c, 0x0f, 0x1d, 0x59, 0x72, 0xe4, 0xdc, 0x32, 0x65, 0x42, - 0x43, 0x07, 0x4a, 0x98, 0xab, 0x11, 0x47, 0x3e, 0x37, 0xe1, 0x67, 0xdf, 0x91, 0x36, 0xd7, 0xed, - 0xde, 0x59, 0xbf, 0xbb, 0x61, 0xc7, 0xf6, 0xfa, 0xfa, 0xba, 0x5a, 0x13, 0xe9, 0x4c, 0x62, 0x98, - 0xb6, 0xd0, 0xba, 0xbf, 0x34, 0xc6, 0x3e, 0xd6, 0x0f, 0x4d, 0x67, 0x12, 0x7d, 0xb4, 0x1f, 0x92, - 0x68, 0xf4, 0xf8, 0xa5, 0xcc, 0x21, 0x15, 0xaa, 0xd1, 0x19, 0x95, 0xd9, 0x8f, 0xe0, 0xdb, 0x11, - 0x8a, 0xf8, 0x5a, 0x14, 0xd9, 0x1d, 0x68, 0x52, 0xc2, 0x25, 0x4b, 0xb1, 0x8c, 0x9b, 0x23, 0xbd, - 0xed, 0x30, 0x6b, 0xc0, 0xd5, 0x26, 0xd3, 0x42, 0x14, 0xb4, 0xf1, 0x61, 0xfd, 0xd4, 0x6d, 0xd6, - 0xae, 0xc6, 0x46, 0x74, 0xb7, 0xdd, 0x23, 0x30, 0xed, 0xf8, 0x0e, 0x0e, 0x4c, 0x2f, 0x3b, 0x5b, - 0x9b, 0x42, 0x6e, 0xaf, 0x82, 0xd5, 0xd8, 0x42, 0x48, 0x16, 0xcd, 0xc2, 0x0d, 0x19, 0xc0, 0x58, - 0x06, 0x24, 0xe4, 0x7e, 0xff, 0xe1, 0x54, 0xfc, 0xea, 0xa6, 0xcd, 0x75, 0x24, 0x41, 0x10, 0xbe, - 0xf9, 0x23, 0x79, 0x5f, 0xcd, 0x08, 0x3d, 0x71, 0x6d, 0xf0, 0x98, 0x16, 0x3b, 0x08, 0x35, 0x2a, - 0xb4, 0x9e, 0x33, 0x5a, 0x22, 0xae, 0xf5, 0xdc, 0x26, 0xc1, 0xea, 0x58, 0xdc, 0xa5, 0xb7, 0x0a, - 0x50, 0x11, 0xfd, 0x34, 0xfe, 0x75, 0x36, 0x87, 0x65, 0x8d, 0xc0, 0x78, 0x77, 0xc0, 0x27, 0xc2, - 0x29, 0xf3, 0x61, 0xb0, 0xd1, 0x7c, 0x95, 0xb7, 0x28, 0xb4, 0x00, 0x87, 0x65, 0x20, 0x96, 0xb7, - 0x3a, 0x54, 0x18, 0x26, 0xf9, 0xfa, 0x89, 0x20, 0x51, 0xae, 0x4a, 0x4f, 0x08, 0x14, 0x28, 0x2e, - 0x07, 0x3c, 0x9e, 0x50, 0x30, 0x00, 0xb7, 0x9e, 0x0c, 0x0a, 0x5a, 0x8b, 0xaf, 0x42, 0xf3, 0x0d, - 0xfe, 0x43, 0x6c, 0x77, 0x8f, 0xab, 0x52, 0x89, 0x80, 0x01, 0x59, 0xcd, 0xb5, 0xbe, 0xb8, 0x8c, - 0xe1, 0xfc, 0xcf, 0x11, 0x22, 0x07, 0xf2, 0xb6, 0xb6, 0x16, 0x22, 0x27, 0x60, 0xdf, 0x14, 0x06, - 0x2c, 0x2e, 0x83, 0x43, 0x9c, 0x6c, 0x9f, 0x13, 0x37, 0x64, 0xa6, 0xb0, 0xda, 0x38, 0xff, 0x51, - 0x99, 0x60, 0x8d, 0x85, 0xf8, 0xb8, 0x29, 0xd5, 0x28, 0xec, 0xb7, 0x93, 0xec, 0x79, 0x47, 0x0a, - 0x50, 0x61, 0xad, 0x3b, 0xe2, 0xae, 0xf5, 0x85, 0x9b, 0xf9, 0x13, 0x1c, 0x2a, 0xf4, 0xfa, 0xc2, - 0xcd, 0x56, 0xd8, 0xac, 0x9a, 0x03, 0xaa, 0xd4, 0x2e, 0x50, 0xa0, 0xf8, 0xa1, 0x99, 0x2e, 0xfb, - 0x34, 0xf5, 0xb0, 0xd9, 0xb2, 0xdd, 0x29, 0x6d, 0xd9, 0x5d, 0x23, 0x35, 0xb8, 0x9c, 0x33, 0x89, - 0x1e, 0xd8, 0x26, 0x33, 0x89, 0xde, 0x0a, 0x80, 0x37, 0x34, 0xd4, 0x56, 0x38, 0xb7, 0x6c, 0xdf, - 0x59, 0x6b, 0xd4, 0xa8, 0x23, 0x7f, 0x5a, 0xc0, 0x7a, 0xb9, 0x6e, 0xab, 0x6b, 0xe7, 0xd6, 0xb2, - 0xcc, 0xe7, 0xa7, 0xf5, 0xe8, 0xd5, 0xf4, 0xc1, 0x69, 0x43, 0xd7, 0x1f, 0xbd, 0x96, 0x3a, 0x7b, - 0xba, 0x5c, 0xa6, 0xbd, 0xf2, 0x7b, 0x80, 0x2c, 0x2c, 0xe5, 0x30, 0xe9, 0xf8, 0x28, 0x50, 0x7c, - 0x95, 0x92, 0x65, 0xf0, 0xf0, 0x1b, 0xc6, 0xfe, 0xdd, 0xb0, 0x7e, 0x53, 0xfa, 0xf7, 0x77, 0xd2, - 0x77, 0xbe, 0xa4, 0x3c, 0x25, 0x19, 0x8b, 0xaf, 0x87, 0x18, 0x69, 0xeb, 0x71, 0x3e, 0xf0, 0xfe, - 0xf4, 0xad, 0xeb, 0xc9, 0xc9, 0x1b, 0x32, 0x45, 0x53, 0xda, 0xb7, 0x00, 0x15, 0x63, 0x91, 0xf7, - 0x4f, 0x23, 0x02, 0x68, 0xf8, 0x2d, 0x08, 0xed, 0xf1, 0xf9, 0x95, 0x06, 0x48, 0xa8, 0x38, 0x8f, - 0xb9, 0x37, 0xb6, 0xc0, 0xe2, 0xe3, 0xfa, 0xc9, 0xc3, 0x34, 0xa9, 0x62, 0x99, 0xb2, 0x3f, 0xf2, - 0x9c, 0xa1, 0xb4, 0x3e, 0x5f, 0xb5, 0x7f, 0x4f, 0xb8, 0x5c, 0x66, 0x2a, 0xf2, 0x1f, 0x22, 0xde, - 0x58, 0x8b, 0x1b, 0x0d, 0xc5, 0x36, 0x22, 0x05, 0xbc, 0x5b, 0x69, 0xb8, 0xdc, 0x42, 0x88, 0xbb, - 0x90, 0xa7, 0x58, 0x7c, 0x9a, 0x5c, 0x23, 0xd3, 0x3c, 0x1d, 0x38, 0xce, 0xb5, 0xf1, 0x61, 0x93, - 0xb7, 0x21, 0x7b, 0xba, 0x9c, 0xa7, 0x19, 0xff, 0x73, 0x7b, 0x3e, 0x76, 0x70, 0x43, 0x5e, 0xab, - 0x4a, 0x8f, 0xdb, 0xf3, 0xb1, 0x2f, 0x21, 0x09, 0xd8, 0x71, 0x3e, 0x76, 0x7b, 0xca, 0xf5, 0xdf, - 0xa2, 0x62, 0x63, 0x1c, 0xea, 0xdd, 0xa1, 0x88, 0x0f, 0x5f, 0xc4, 0x83, 0x54, 0x8c, 0x93, 0x18, - 0xd8, 0x4b, 0xc4, 0x3a, 0xc0, 0x92, 0x1e, 0xff, 0x4a, 0xbb, 0x74, 0x58, 0x1b, 0xea, 0xd7, 0x7b, - 0x4e, 0x6a, 0x3d, 0x87, 0x8c, 0x03, 0x78, 0xa8, 0x1f, 0x1c, 0x18, 0x92, 0xb1, 0xe3, 0xc9, 0xa9, - 0x6e, 0x6d, 0xfa, 0x63, 0xc8, 0xd3, 0xa4, 0xdd, 0xf9, 0x42, 0x1f, 0xe9, 0xa5, 0xc9, 0x54, 0xc0, - 0x4e, 0x27, 0xdb, 0xb1, 0x96, 0x0e, 0x2e, 0x40, 0x7c, 0x6e, 0x12, 0x7e, 0x7e, 0xb4, 0x00, 0xf1, - 0x66, 0x9a, 0x7c, 0xe7, 0x5e, 0x83, 0x56, 0x66, 0x75, 0xfe, 0x7b, 0x4e, 0x95, 0xfe, 0x9a, 0x13, - 0xf2, 0x54, 0x10, 0xff, 0x3b, 0x0e, 0x6e, 0x38, 0xd2, 0xe3, 0xa3, 0xe9, 0x5b, 0x93, 0xb0, 0x5a, - 0xef, 0x45, 0x3b, 0x6b, 0xa4, 0x6d, 0xb5, 0xef, 0xb8, 0x6a, 0x77, 0xbc, 0x69, 0x2c, 0xbd, 0x7a, - 0xc9, 0x10, 0x2a, 0x87, 0x33, 0x9f, 0x74, 0x25, 0xa7, 0x4e, 0xa7, 0x6f, 0x4d, 0xea, 0x7d, 0xbd, - 0x5a, 0xec, 0x8a, 0x36, 0x3e, 0x9d, 0x9a, 0xfa, 0x38, 0x35, 0x7e, 0x6a, 0x26, 0xd1, 0xb7, 0x43, - 0x96, 0x36, 0x6e, 0x74, 0x39, 0x77, 0xd7, 0x6f, 0x6f, 0xd8, 0x61, 0xd4, 0xde, 0x5d, 0xf3, 0xee, - 0xee, 0x37, 0xb7, 0xef, 0x94, 0x8d, 0x83, 0xf1, 0xf7, 0x1d, 0x99, 0xc3, 0x83, 0x46, 0x93, 0x1b, - 0x83, 0x06, 0x57, 0x1b, 0x1a, 0x00, 0x24, 0x33, 0x89, 0x3e, 0xa6, 0x93, 0xdc, 0x76, 0xd0, 0xc3, - 0xfd, 0xda, 0x49, 0xce, 0xcd, 0xd2, 0xa6, 0x3a, 0x5a, 0x5d, 0xeb, 0xeb, 0x06, 0xab, 0x82, 0x9c, - 0xe7, 0x5b, 0xf9, 0xa3, 0x1c, 0x5a, 0x69, 0x82, 0xb7, 0xba, 0xf7, 0xd7, 0xb8, 0x03, 0xde, 0x7d, - 0x3e, 0x6f, 0x64, 0x2f, 0xd9, 0x2c, 0x38, 0x29, 0x79, 0xde, 0x0a, 0xe2, 0xcf, 0xb4, 0xee, 0x6b, - 0xa9, 0xe9, 0x63, 0xda, 0xe1, 0x38, 0xf4, 0x93, 0x8c, 0x1d, 0xc9, 0x9c, 0x19, 0x32, 0x26, 0xb1, - 0xff, 0x44, 0x72, 0xba, 0x7f, 0x26, 0x31, 0xbc, 0xb5, 0xb1, 0x35, 0xcc, 0xca, 0xa5, 0x33, 0x89, - 0xe1, 0xf5, 0x04, 0x26, 0xe7, 0xc5, 0xc9, 0x37, 0xa3, 0xe5, 0xad, 0x6d, 0x8d, 0x7e, 0x9f, 0xc7, - 0x55, 0x2f, 0x85, 0xc3, 0xbe, 0xa6, 0x80, 0xe2, 0x25, 0xce, 0x83, 0xf8, 0x16, 0x20, 0xa7, 0x50, - 0x2c, 0x23, 0x77, 0x20, 0x3d, 0x87, 0x32, 0xdd, 0xfd, 0x40, 0x90, 0xab, 0x9e, 0xf6, 0x99, 0x8c, - 0xc5, 0x4d, 0xf9, 0x48, 0xce, 0x69, 0xcb, 0xbf, 0x87, 0xf8, 0x46, 0xb3, 0xe7, 0x7a, 0xb7, 0xa7, - 0xd9, 0xdd, 0xa4, 0xb8, 0xbc, 0xe4, 0xfe, 0x06, 0x1b, 0xfb, 0xf3, 0x14, 0x8b, 0x2b, 0xe0, 0x56, - 0x9b, 0x0e, 0xad, 0xab, 0x56, 0xce, 0x53, 0xad, 0xf4, 0x2f, 0x57, 0xa3, 0xd5, 0x2e, 0x33, 0x35, - 0x09, 0xb1, 0xdb, 0xc1, 0xb5, 0x06, 0xff, 0x0a, 0xbd, 0x2a, 0xe2, 0x2c, 0x03, 0x83, 0x79, 0x55, - 0xb4, 0xd2, 0xcc, 0x67, 0xc2, 0x7a, 0x22, 0xd3, 0x0b, 0xa2, 0x9f, 0x92, 0x53, 0xb2, 0xc0, 0xf2, - 0xfc, 0x87, 0x53, 0x72, 0x89, 0x25, 0xc8, 0x5e, 0xb8, 0x40, 0x4e, 0xc8, 0xf5, 0xf6, 0x07, 0x47, - 0xf8, 0x12, 0x8d, 0xe8, 0xa8, 0x4b, 0xc9, 0x53, 0x1d, 0xbc, 0xca, 0x2d, 0xb5, 0xb4, 0x1e, 0x15, - 0x9a, 0xfa, 0x17, 0x19, 0x86, 0xe7, 0x55, 0x69, 0x83, 0x40, 0x81, 0xe2, 0x8f, 0x4c, 0xf5, 0x0e, - 0xd2, 0xeb, 0x30, 0x7d, 0x62, 0xfb, 0x73, 0x14, 0xc2, 0x30, 0xc8, 0xb4, 0x01, 0xff, 0x1a, 0x2a, - 0x74, 0xb7, 0xb6, 0xfa, 0x0f, 0x18, 0x67, 0x34, 0x68, 0xdd, 0xf8, 0x6b, 0x29, 0x50, 0xe4, 0xc1, - 0xbc, 0x4a, 0xd5, 0xec, 0xcc, 0xe1, 0x41, 0x99, 0x96, 0xf2, 0x4d, 0x68, 0x9e, 0xb3, 0x7e, 0x27, - 0x66, 0x27, 0xc5, 0x35, 0x3b, 0x55, 0x49, 0x16, 0x8c, 0xdf, 0xe2, 0x66, 0x43, 0xb0, 0x3b, 0x7f, - 0xd4, 0x59, 0xbf, 0x93, 0x49, 0x81, 0x30, 0x00, 0x40, 0x36, 0x1f, 0x4c, 0x32, 0xae, 0xea, 0x27, - 0x2f, 0x1b, 0x02, 0xe2, 0xc4, 0x71, 0x1b, 0x9c, 0x55, 0xe8, 0x0c, 0x8c, 0x46, 0x47, 0x5b, 0x95, - 0x16, 0xa2, 0x84, 0x43, 0x47, 0x5b, 0x95, 0x16, 0xb3, 0xa3, 0xad, 0x4a, 0xcb, 0xf7, 0xd1, 0xd1, - 0x56, 0xa5, 0x85, 0xdf, 0x87, 0xe6, 0x6d, 0xaa, 0xdf, 0x89, 0xdd, 0xfc, 0x8a, 0x6b, 0x14, 0x55, - 0x6a, 0x14, 0x8c, 0xdf, 0xe2, 0xfb, 0x80, 0x73, 0xd3, 0xf7, 0xf1, 0x45, 0x96, 0x1b, 0x65, 0x62, - 0xd8, 0x38, 0xb0, 0x64, 0xa3, 0x07, 0xfe, 0xd3, 0xec, 0xdc, 0x3d, 0x10, 0x3d, 0xe0, 0xb7, 0xaa, - 0xf4, 0xe7, 0x59, 0xb9, 0x7b, 0xfc, 0xd0, 0x2d, 0xb1, 0x38, 0x31, 0x6f, 0x72, 0xd2, 0x47, 0x89, - 0x27, 0xa5, 0xb3, 0x7e, 0xa7, 0x31, 0xfd, 0x87, 0xba, 0xb5, 0xeb, 0xa7, 0xc1, 0x06, 0x85, 0x95, - 0xce, 0x7e, 0x90, 0x39, 0xe9, 0xa1, 0x99, 0x3e, 0xfc, 0x59, 0x7a, 0xb4, 0x4f, 0x1b, 0xc2, 0x09, - 0x75, 0x6e, 0xdc, 0x4c, 0xdf, 0x3d, 0xa6, 0xf5, 0x19, 0xa2, 0x31, 0x8b, 0x3f, 0x2b, 0x81, 0xcf, - 0x49, 0xcc, 0xb1, 0x01, 0xc0, 0x70, 0x6c, 0xd0, 0xae, 0x35, 0x4e, 0x95, 0xee, 0x60, 0x8e, 0x9d, - 0x5d, 0x41, 0xbc, 0xc8, 0x01, 0x52, 0xe0, 0xd8, 0x86, 0x6a, 0x82, 0xe5, 0x8b, 0x6c, 0x16, 0x9a, - 0x97, 0x73, 0x36, 0xd4, 0x6f, 0xc7, 0x95, 0x52, 0x9f, 0x9f, 0x4f, 0x4e, 0xdd, 0xa1, 0x60, 0xc2, - 0xe3, 0xb5, 0xbe, 0x6e, 0x6d, 0xf2, 0x96, 0xd6, 0xd7, 0xad, 0x8f, 0xf4, 0xdc, 0x8b, 0x76, 0x6a, - 0x57, 0x3a, 0x8d, 0xd3, 0x1f, 0x5b, 0xe7, 0xc1, 0xa7, 0x45, 0x1f, 0xee, 0xa4, 0x4a, 0x35, 0xb8, - 0xb5, 0xb0, 0x4d, 0x52, 0xc3, 0x5d, 0x66, 0x3c, 0xb3, 0x9f, 0x84, 0x7e, 0x24, 0x2f, 0x22, 0x58, - 0xe5, 0xe5, 0xd9, 0xa4, 0xc9, 0x85, 0x26, 0x1d, 0x72, 0x9e, 0x0f, 0xe4, 0xfb, 0x39, 0x84, 0x20, - 0xdd, 0xb2, 0x21, 0x6d, 0x91, 0x57, 0xcc, 0x39, 0xef, 0x26, 0x4d, 0x69, 0xac, 0xa6, 0x41, 0x95, - 0xea, 0x05, 0xa6, 0x81, 0x58, 0x43, 0x52, 0x3b, 0x9d, 0x3d, 0x9d, 0xeb, 0x8f, 0x03, 0x5f, 0x93, - 0x8c, 0xc5, 0x6d, 0x92, 0xd4, 0x59, 0xbc, 0x90, 0xb0, 0x48, 0x94, 0x8c, 0xc5, 0x5f, 0x58, 0xbf, - 0x49, 0x66, 0xf0, 0xf1, 0xd7, 0x38, 0x54, 0xe4, 0x25, 0xbd, 0x85, 0x4b, 0x96, 0x60, 0x05, 0x6a, - 0x76, 0x72, 0x22, 0xaa, 0xf4, 0x6b, 0xc1, 0xaa, 0x2f, 0x7a, 0xa9, 0xcc, 0x45, 0xa9, 0xd1, 0x4f, - 0x5d, 0x64, 0xa9, 0xc1, 0x4f, 0xf6, 0x88, 0x94, 0x55, 0xa6, 0xdd, 0xf9, 0x42, 0x8b, 0x5f, 0xd0, - 0x12, 0x07, 0xf5, 0x81, 0x5e, 0x43, 0x77, 0xc4, 0xae, 0x62, 0xe0, 0x29, 0xe8, 0xb0, 0x49, 0xa1, - 0xe0, 0x6d, 0x08, 0x21, 0xd7, 0xca, 0x65, 0xab, 0x43, 0xbe, 0x15, 0x15, 0xf9, 0x5a, 0x0c, 0xce, - 0x1c, 0xd8, 0x13, 0xc4, 0xba, 0x6d, 0x1e, 0x75, 0xcf, 0x65, 0x56, 0x00, 0xd7, 0x11, 0xab, 0x01, - 0x7b, 0x9b, 0x31, 0x34, 0x61, 0x28, 0x7c, 0x60, 0xbe, 0xc1, 0x7b, 0x21, 0x73, 0x62, 0x44, 0x3b, - 0x38, 0x68, 0x86, 0xf1, 0xa6, 0x6d, 0xf8, 0x6e, 0x0e, 0xad, 0xf0, 0x05, 0x7c, 0x91, 0x2d, 0xc1, - 0x26, 0x5f, 0xa0, 0xde, 0x1d, 0x0e, 0xef, 0x0b, 0x86, 0xbc, 0xc4, 0x2b, 0x14, 0x1f, 0xaa, 0xb9, - 0xa5, 0xe2, 0x1b, 0x59, 0xb7, 0x26, 0x30, 0x14, 0xad, 0xa4, 0x98, 0x68, 0x7c, 0x74, 0xf9, 0xc1, - 0x8c, 0x82, 0xb4, 0x07, 0x59, 0x4e, 0xe4, 0x5c, 0x9c, 0xfc, 0x05, 0x0e, 0x2d, 0x0f, 0xb3, 0x39, - 0xa9, 0x5c, 0xb5, 0xe1, 0x92, 0x65, 0xd8, 0xa2, 0x16, 0x56, 0xa5, 0x56, 0x21, 0xa7, 0x50, 0xfc, - 0xa5, 0x45, 0x85, 0x99, 0x05, 0x8b, 0xba, 0x4b, 0xb8, 0x6a, 0x69, 0xb2, 0x63, 0x4a, 0x0d, 0x3c, - 0xd1, 0xa4, 0xd7, 0x8a, 0x40, 0x16, 0xc9, 0x55, 0x35, 0xdc, 0x45, 0x71, 0x90, 0x21, 0xca, 0xe9, - 0x0f, 0xe7, 0x76, 0xf5, 0x85, 0xcd, 0xbc, 0x59, 0x24, 0x09, 0x10, 0xbe, 0x55, 0x2d, 0xac, 0xf9, - 0x40, 0x95, 0xde, 0x13, 0x72, 0x4b, 0xc5, 0xba, 0xbc, 0x33, 0xc2, 0xfa, 0x43, 0x24, 0xe3, 0xc7, - 0xa0, 0xeb, 0x0a, 0x47, 0x26, 0xda, 0xab, 0x8d, 0x7e, 0xee, 0x00, 0x3f, 0x58, 0x5b, 0x10, 0xf7, - 0x5c, 0xcc, 0x38, 0xd1, 0x9a, 0x2f, 0xbc, 0x35, 0x18, 0xf0, 0x45, 0x82, 0x21, 0x93, 0x98, 0x15, - 0x98, 0x18, 0x48, 0xb4, 0x96, 0x5d, 0xc8, 0xce, 0xda, 0xec, 0xb4, 0x80, 0x41, 0x87, 0xd2, 0x62, - 0xa3, 0x22, 0x07, 0x25, 0xff, 0x7f, 0x72, 0x08, 0xc2, 0x21, 0xd6, 0xd2, 0x2d, 0xc6, 0xe3, 0x2d, - 0xf6, 0x64, 0xde, 0x1b, 0x26, 0xba, 0xcf, 0xae, 0x71, 0xaa, 0x34, 0xc6, 0x09, 0x59, 0x6d, 0xc5, - 0x13, 0x1c, 0xd5, 0x80, 0xd9, 0x5d, 0x57, 0x06, 0xc9, 0xe2, 0x53, 0x9f, 0x76, 0xa4, 0xce, 0x9e, - 0x06, 0xb9, 0x9c, 0x5c, 0xfe, 0x4f, 0x5d, 0xd6, 0x06, 0x8f, 0x90, 0x54, 0x42, 0x7d, 0x27, 0xd9, - 0xc8, 0x97, 0x7a, 0xcf, 0x9d, 0xf4, 0xd1, 0xcb, 0xc9, 0x58, 0x3f, 0xc9, 0x9e, 0x8c, 0x53, 0x23, - 0xe3, 0x1c, 0xe5, 0x5d, 0xa9, 0xa1, 0x43, 0xb4, 0x09, 0x60, 0x2b, 0x9f, 0x7b, 0x5f, 0xcb, 0x59, - 0x74, 0xf2, 0x1e, 0x66, 0xcb, 0xec, 0x0c, 0x2b, 0x21, 0x6c, 0x98, 0x00, 0xc7, 0x59, 0xfc, 0x28, - 0x30, 0xb7, 0x34, 0xc7, 0x0f, 0x03, 0x7a, 0x69, 0x23, 0xc5, 0x72, 0x6e, 0x0b, 0xbe, 0x83, 0x43, - 0x8b, 0x9a, 0x95, 0x03, 0xf5, 0x6e, 0x5f, 0x88, 0x38, 0xcc, 0xe6, 0x3c, 0x0e, 0xda, 0xac, 0x1c, - 0xc0, 0x7c, 0x00, 0xbb, 0x4f, 0x98, 0x95, 0xc5, 0x9f, 0x9b, 0xe9, 0x39, 0x3b, 0x32, 0xea, 0x65, - 0xd3, 0x5f, 0x39, 0x19, 0x1b, 0xd0, 0x26, 0x0e, 0xa5, 0x2e, 0x76, 0x88, 0x99, 0x68, 0x6f, 0x32, - 0x16, 0x9d, 0x49, 0xf4, 0x89, 0xe9, 0x68, 0xb7, 0x76, 0xee, 0x30, 0xe1, 0xaa, 0x60, 0x91, 0x9a, - 0x38, 0x94, 0x51, 0x2f, 0xcb, 0x26, 0x2a, 0x48, 0xe4, 0x1a, 0xf4, 0x34, 0x2b, 0xa1, 0x4d, 0x21, - 0x77, 0xeb, 0xde, 0x7a, 0x77, 0x64, 0x2f, 0x76, 0xa0, 0x2d, 0x82, 0x27, 0x1e, 0xd9, 0x65, 0x62, - 0x1d, 0xc9, 0x42, 0x78, 0x77, 0x28, 0x3d, 0xda, 0x67, 0x1c, 0x5f, 0xe3, 0x93, 0xda, 0x99, 0x31, - 0x50, 0xc5, 0x72, 0x39, 0x79, 0x95, 0xc1, 0xf7, 0xaa, 0x1a, 0x3d, 0xe1, 0x2a, 0x92, 0xb5, 0xaa, - 0x0a, 0xf0, 0xc9, 0xd9, 0x78, 0xf9, 0x4f, 0x38, 0x54, 0x18, 0x08, 0x7a, 0x15, 0x39, 0xe8, 0x37, - 0xaf, 0x5c, 0xbb, 0x39, 0x55, 0xea, 0xe0, 0x04, 0x0a, 0x16, 0xdb, 0x48, 0xdf, 0x57, 0xd5, 0x74, - 0xef, 0x17, 0x15, 0x0e, 0x6d, 0xf0, 0xa4, 0x16, 0x4d, 0x54, 0x6f, 0x95, 0x1a, 0x76, 0xd4, 0xc9, - 0xbb, 0xeb, 0x76, 0x38, 0x6b, 0x2b, 0x1c, 0xef, 0x6c, 0x97, 0x37, 0xd7, 0xc9, 0xf7, 0xa2, 0x9d, - 0x0c, 0x54, 0x1b, 0xfc, 0x4c, 0x1f, 0xe9, 0xd5, 0x46, 0xc6, 0xc0, 0xf6, 0xe7, 0x70, 0x6d, 0xab, - 0xad, 0xab, 0xaf, 0xdb, 0x56, 0x5b, 0xb7, 0x6d, 0xc7, 0x6e, 0xe7, 0x96, 0x9d, 0x46, 0x3d, 0x47, - 0xea, 0xe8, 0xb5, 0xd4, 0xe7, 0x47, 0x69, 0x82, 0x61, 0x58, 0x52, 0x70, 0xf1, 0x29, 0x53, 0x02, - 0x4a, 0xff, 0xe5, 0x2a, 0xf4, 0x48, 0x1e, 0xbf, 0x20, 0xfe, 0xb7, 0x68, 0x95, 0x3f, 0x17, 0x4c, - 0xaf, 0xd6, 0x70, 0xee, 0xa9, 0xfc, 0x35, 0xcc, 0x04, 0xb8, 0xac, 0x97, 0x10, 0xbe, 0x22, 0xc8, - 0xb9, 0x45, 0x4b, 0xc6, 0x8e, 0xb8, 0x6a, 0xe5, 0xfc, 0x58, 0xf8, 0x5f, 0xa1, 0x47, 0xec, 0x05, - 0x0a, 0x73, 0x9d, 0x86, 0x75, 0xff, 0x7c, 0xe5, 0x22, 0xcf, 0x76, 0x4b, 0xee, 0xd3, 0xf2, 0x55, - 0x34, 0x18, 0x63, 0x4e, 0xc4, 0xda, 0x16, 0x55, 0xfa, 0x90, 0xf5, 0x78, 0xf9, 0x80, 0x38, 0x93, - 0x8c, 0x8e, 0xe9, 0xa7, 0x07, 0xe8, 0x53, 0x17, 0xed, 0xe6, 0xf9, 0x64, 0x7c, 0x40, 0xfb, 0xf8, - 0xb3, 0x64, 0xec, 0x33, 0x70, 0x80, 0xa1, 0xae, 0x2f, 0xf0, 0x53, 0xbb, 0xd4, 0x0f, 0xef, 0x7a, - 0x8d, 0x26, 0xe0, 0x21, 0x13, 0xeb, 0xd7, 0x4f, 0x4f, 0x18, 0x2b, 0x69, 0x96, 0xbc, 0x14, 0x44, - 0x16, 0x9f, 0xff, 0x87, 0x92, 0xc5, 0x17, 0xfc, 0xa1, 0x64, 0xf1, 0x85, 0x7f, 0x7c, 0x59, 0x7c, - 0xd1, 0xdf, 0x47, 0x59, 0xfc, 0xaf, 0xb9, 0xbc, 0xb2, 0x38, 0xbc, 0xf2, 0x9e, 0xfa, 0x21, 0xcb, - 0xe2, 0x0f, 0x22, 0x61, 0x17, 0xfd, 0xb1, 0x25, 0xec, 0x36, 0x56, 0xc0, 0x46, 0xf7, 0x11, 0xb0, - 0x5f, 0x53, 0xa5, 0x6a, 0x56, 0xc0, 0xae, 0x7c, 0x28, 0x01, 0x9b, 0x95, 0x94, 0x3b, 0x39, 0xb4, - 0xd4, 0x67, 0x33, 0xa5, 0x11, 0x65, 0xa3, 0x34, 0x47, 0x5e, 0xce, 0x31, 0xb8, 0x81, 0xfb, 0x51, - 0x56, 0x73, 0xf1, 0x69, 0x30, 0xcb, 0x10, 0x47, 0x36, 0x73, 0xb6, 0xb4, 0xa9, 0x78, 0x7a, 0x7c, - 0x9c, 0xb8, 0x21, 0x67, 0x35, 0xb1, 0x09, 0x02, 0x54, 0x76, 0x5e, 0x92, 0x4f, 0x10, 0xa0, 0xb2, - 0xf3, 0x93, 0x73, 0xca, 0xce, 0xf9, 0x24, 0xe3, 0x89, 0x7c, 0x92, 0x71, 0x31, 0x96, 0x8c, 0x3b, - 0x39, 0x55, 0xfa, 0x6d, 0x1e, 0xd1, 0xb8, 0xf9, 0xdb, 0x8a, 0xc6, 0x74, 0x25, 0x80, 0x8c, 0xac, - 0x0d, 0x75, 0x51, 0x4f, 0x4b, 0x72, 0x57, 0x14, 0xbb, 0x4e, 0x62, 0x4a, 0x0d, 0xcf, 0x2e, 0x29, - 0xdb, 0xb4, 0x98, 0xa5, 0x7f, 0x08, 0x2d, 0xe6, 0x48, 0x5e, 0xd9, 0x1c, 0x6e, 0xad, 0x7e, 0xa9, - 0x4a, 0xef, 0xe6, 0x93, 0xcd, 0x6b, 0xbf, 0x85, 0x6c, 0x7e, 0xa0, 0x2d, 0x10, 0xf1, 0x11, 0xa1, - 0x18, 0x3b, 0xe5, 0x3f, 0xb0, 0x68, 0xbe, 0xfc, 0x0f, 0x2c, 0x9a, 0x87, 0x51, 0xa1, 0x21, 0x5d, - 0x1a, 0x3b, 0x8f, 0x78, 0x49, 0x62, 0x6d, 0x8e, 0x02, 0xc5, 0x37, 0x53, 0x53, 0x83, 0x86, 0x62, - 0x5a, 0xe3, 0x0e, 0x2b, 0x2f, 0x3e, 0xef, 0x48, 0x25, 0x4e, 0xa6, 0x2e, 0x76, 0x40, 0x20, 0x2b, - 0xeb, 0x41, 0x2e, 0xde, 0x9d, 0xc6, 0xa6, 0xc4, 0x77, 0xe9, 0x99, 0x13, 0x77, 0xb5, 0xf8, 0x15, - 0x63, 0x3b, 0xde, 0xee, 0x4e, 0xdf, 0x3d, 0xbc, 0xe1, 0xc5, 0xcd, 0x35, 0xf7, 0xa2, 0x9d, 0x32, - 0xc5, 0x99, 0x5f, 0x30, 0xe6, 0xbf, 0x67, 0xc1, 0xf8, 0x0a, 0x87, 0x0a, 0xc3, 0x8a, 0x5f, 0xf1, - 0x44, 0x82, 0xa1, 0x92, 0x47, 0x30, 0xc3, 0xd9, 0xf0, 0x00, 0xfe, 0xd9, 0xeb, 0x1a, 0x48, 0x1b, - 0x70, 0x02, 0x84, 0xd1, 0x30, 0xf1, 0x88, 0x6f, 0x12, 0x49, 0x0b, 0x2b, 0xeb, 0x26, 0x14, 0x27, - 0x2f, 0xc6, 0xd2, 0x17, 0xf6, 0x7d, 0xa8, 0x30, 0x04, 0x92, 0xde, 0x7e, 0x2b, 0x51, 0xa2, 0x3d, - 0xfb, 0x38, 0x54, 0x95, 0x29, 0xce, 0xbf, 0x0f, 0x12, 0xfc, 0x9a, 0x57, 0x51, 0xb1, 0xed, 0xbb, - 0x1f, 0xc6, 0x09, 0xae, 0xf4, 0xdf, 0x70, 0x68, 0x11, 0xa1, 0x90, 0x7f, 0x05, 0x2d, 0x68, 0x56, - 0x0e, 0x50, 0xa9, 0x15, 0x47, 0xa7, 0x01, 0x88, 0xf8, 0x28, 0x74, 0x0a, 0xce, 0x2b, 0x77, 0xbb, - 0x0d, 0x66, 0x82, 0xed, 0x1b, 0x32, 0x94, 0xf3, 0x9b, 0x51, 0x51, 0xb3, 0x72, 0x80, 0xa4, 0xbd, - 0x2d, 0xb0, 0x32, 0x00, 0x5b, 0x50, 0xf1, 0xc9, 0x66, 0xe5, 0x00, 0xfb, 0xb9, 0x65, 0x8d, 0x78, - 0x55, 0x42, 0xae, 0xa3, 0x72, 0xd9, 0xaa, 0x49, 0x90, 0xd5, 0x63, 0x1b, 0x39, 0x91, 0x35, 0x29, - 0x32, 0x80, 0x62, 0x64, 0x5a, 0xf7, 0xb5, 0xb9, 0x90, 0x41, 0xcd, 0xd2, 0x7f, 0xc7, 0xa1, 0x22, - 0xca, 0x88, 0xf8, 0x37, 0xd0, 0x22, 0xe0, 0x28, 0xe6, 0x47, 0xfe, 0x48, 0x95, 0x4a, 0x05, 0x13, - 0x26, 0x3e, 0x0a, 0xcc, 0x27, 0xf7, 0x33, 0xcd, 0x1a, 0xfc, 0x4b, 0x84, 0xef, 0x31, 0xe2, 0x35, - 0x8e, 0x00, 0x61, 0x41, 0xc5, 0x22, 0x40, 0xa2, 0x0d, 0xf5, 0xcb, 0x16, 0x94, 0xf7, 0x90, 0x86, - 0x58, 0x70, 0x99, 0x67, 0xbd, 0xc0, 0xb4, 0xa0, 0xe2, 0x0b, 0xd0, 0x90, 0x78, 0x92, 0xd6, 0xef, - 0xac, 0xd9, 0xe2, 0x72, 0xee, 0x76, 0x6d, 0x95, 0x36, 0xd5, 0x55, 0xd5, 0xcb, 0xae, 0x5d, 0xd2, - 0x8e, 0x3a, 0xf2, 0x6b, 0xab, 0x24, 0x6f, 0xae, 0xdb, 0x01, 0x3f, 0xca, 0x65, 0x0b, 0x43, 0xe9, - 0x57, 0x15, 0xa8, 0x84, 0x3c, 0x47, 0x62, 0xfc, 0xfe, 0xb6, 0xc3, 0x73, 0xd2, 0x5f, 0x63, 0xfe, - 0xe9, 0x71, 0xfb, 0x95, 0xda, 0xe0, 0xbe, 0x80, 0xed, 0x79, 0x1a, 0xce, 0x59, 0x9b, 0x5b, 0x2a, - 0xfe, 0x14, 0x3f, 0xd2, 0xa8, 0xf4, 0x06, 0xf7, 0x05, 0x2a, 0xe1, 0xe5, 0x86, 0xb7, 0xc2, 0x7c, - 0xaf, 0x84, 0x5f, 0xed, 0x27, 0xac, 0xc4, 0xf2, 0x72, 0x6e, 0x7b, 0x7e, 0x1f, 0x2a, 0x54, 0xf6, - 0xb7, 0xba, 0x03, 0x5e, 0x85, 0x04, 0x93, 0x00, 0xa5, 0x92, 0x02, 0xc5, 0x2d, 0xe6, 0x5f, 0x15, - 0xe0, 0xb9, 0x90, 0x1a, 0x3f, 0xa5, 0x7f, 0x69, 0xe8, 0x91, 0xec, 0x1d, 0x6c, 0xc8, 0x1d, 0xf0, - 0x06, 0x5b, 0x2a, 0x1c, 0x7e, 0xc5, 0x1d, 0x8e, 0x54, 0xee, 0x73, 0x87, 0x23, 0x4a, 0x85, 0xa3, - 0x25, 0x18, 0x8e, 0x54, 0xb6, 0x06, 0xbd, 0xe1, 0x0a, 0x47, 0x6b, 0xc8, 0x17, 0x34, 0x98, 0xb3, - 0x4c, 0xf1, 0xf2, 0x1f, 0x21, 0xbe, 0xc5, 0xbd, 0xbf, 0xae, 0xa5, 0x35, 0x72, 0xa0, 0xa6, 0xcd, - 0xdf, 0x0c, 0x91, 0xe9, 0x88, 0x3b, 0x20, 0xbe, 0x74, 0xcd, 0x53, 0x2c, 0x6e, 0x68, 0x71, 0xef, - 0xaf, 0x54, 0x0c, 0x60, 0x65, 0x63, 0x9b, 0xbf, 0xb9, 0xd2, 0x8b, 0xc1, 0x15, 0x5a, 0xff, 0x09, - 0xfd, 0xda, 0x28, 0xf1, 0xf9, 0xc0, 0x4c, 0xd2, 0xba, 0xc4, 0xcf, 0x83, 0x86, 0xff, 0x0d, 0x5a, - 0x1a, 0x36, 0xc7, 0xa1, 0x56, 0xf1, 0xbb, 0x0f, 0x10, 0x45, 0x05, 0x8b, 0x69, 0x59, 0x45, 0xe2, - 0xeb, 0x44, 0xe5, 0x04, 0x9f, 0xb1, 0xa1, 0x01, 0xed, 0xd2, 0x70, 0xe6, 0xc4, 0x5d, 0xf0, 0x4e, - 0x30, 0x18, 0xff, 0xd5, 0xa3, 0x5a, 0xcf, 0x25, 0x6d, 0x9c, 0xb8, 0x9c, 0x50, 0x19, 0x7a, 0xc3, - 0x7a, 0xf0, 0xae, 0x91, 0xb3, 0xf0, 0xf1, 0xff, 0x39, 0x87, 0x56, 0x51, 0xd0, 0xce, 0x40, 0x40, - 0x51, 0xbc, 0x8a, 0x17, 0x3f, 0x63, 0x00, 0x25, 0xa6, 0x8f, 0x53, 0xa5, 0x1e, 0x4e, 0xc8, 0x5f, - 0x47, 0x0c, 0x32, 0xf3, 0xdd, 0x46, 0x0a, 0x2a, 0x23, 0xbe, 0x16, 0xa5, 0x42, 0xef, 0xbd, 0x9a, - 0x1e, 0x25, 0xae, 0x32, 0xa9, 0xeb, 0xbd, 0xda, 0x57, 0xdd, 0x40, 0xa3, 0x21, 0xe7, 0x13, 0x83, - 0xc0, 0xf9, 0xd4, 0xd4, 0xf5, 0xd4, 0xef, 0xe2, 0x99, 0x53, 0x5f, 0x68, 0x97, 0x86, 0xb5, 0x1b, - 0xc7, 0x80, 0x42, 0x6d, 0x68, 0x20, 0xfd, 0xc9, 0xe7, 0xb3, 0x91, 0x9f, 0x9f, 0x0e, 0xfe, 0xdf, - 0x73, 0xe8, 0x49, 0xab, 0x24, 0xe2, 0xf3, 0xfb, 0x3e, 0xc2, 0x0c, 0x7e, 0xc7, 0xde, 0x90, 0xe2, - 0xde, 0x1b, 0xf4, 0x7b, 0x89, 0xa6, 0xf4, 0x3b, 0x4e, 0x95, 0x2e, 0x73, 0xc2, 0xdc, 0x75, 0xc5, - 0x83, 0x1c, 0xfb, 0x59, 0x56, 0x8d, 0xca, 0xc8, 0xde, 0x90, 0x12, 0x36, 0xaa, 0x54, 0xa4, 0xaf, - 0x5e, 0xd1, 0x06, 0x8f, 0x91, 0xe5, 0x8c, 0x5d, 0xc3, 0x33, 0xa7, 0x7b, 0xf0, 0x35, 0xa1, 0xf9, - 0x79, 0x8c, 0xd3, 0x7d, 0xe6, 0xf0, 0x60, 0x72, 0x7a, 0xc0, 0xd0, 0x6a, 0xf1, 0x77, 0xa6, 0xce, - 0x7c, 0xa5, 0xf5, 0x1c, 0xd2, 0x27, 0x8e, 0xc3, 0x4c, 0x41, 0xc4, 0x88, 0xcc, 0xa9, 0x2f, 0xd8, - 0x1b, 0xfb, 0x17, 0xd6, 0xcb, 0x73, 0x13, 0x69, 0xc8, 0xfc, 0x8f, 0x85, 0x9b, 0x7d, 0xad, 0xdb, - 0x82, 0x5e, 0x25, 0xfc, 0x8e, 0x2f, 0xb2, 0x77, 0x4b, 0xd0, 0xe3, 0xf6, 0x37, 0x44, 0x82, 0x21, - 0x77, 0x93, 0x99, 0x2a, 0x19, 0xbb, 0x64, 0xce, 0x5e, 0x4b, 0xac, 0x02, 0x5f, 0x5c, 0x7d, 0xa4, - 0x57, 0x1f, 0xb9, 0xa6, 0x8d, 0xdc, 0x00, 0x76, 0x68, 0x9c, 0xf6, 0xf8, 0x1b, 0x58, 0x82, 0xe0, - 0x39, 0xd6, 0xec, 0xb8, 0xf8, 0xf3, 0x1c, 0x7a, 0xd4, 0x56, 0x0a, 0xee, 0x00, 0xf5, 0x41, 0x6f, - 0x18, 0xeb, 0x5d, 0x85, 0x35, 0x5e, 0x55, 0x72, 0x0b, 0xb3, 0xd5, 0x11, 0x37, 0x02, 0x2d, 0xcd, - 0x6d, 0x8d, 0x4a, 0x25, 0xa8, 0x12, 0x8e, 0x6d, 0x0d, 0xc9, 0xd8, 0xd1, 0xcc, 0xb9, 0xf3, 0xb5, - 0x6e, 0xa5, 0x25, 0x18, 0x68, 0x50, 0x22, 0xf0, 0x54, 0x37, 0x35, 0xdc, 0x55, 0x1f, 0xf4, 0xe6, - 0x52, 0x09, 0x24, 0xce, 0xd6, 0x81, 0x21, 0x82, 0x3d, 0xee, 0x6b, 0x0a, 0x04, 0x43, 0x0a, 0xc5, - 0x17, 0x66, 0x46, 0x16, 0x6b, 0x4d, 0x85, 0x35, 0x3f, 0x57, 0xa5, 0xd7, 0x84, 0xb9, 0xea, 0x89, - 0x6b, 0x81, 0x50, 0x8b, 0x28, 0xf3, 0x71, 0x40, 0x7a, 0x7c, 0x34, 0x35, 0x7e, 0x4a, 0x9e, 0xab, - 0xb1, 0x71, 0xfe, 0x3f, 0x12, 0x6c, 0xde, 0x11, 0x8c, 0xb8, 0xfd, 0x3b, 0x03, 0x21, 0xc5, 0xed, - 0x3d, 0xe0, 0xc4, 0xee, 0x11, 0xc8, 0x72, 0xa1, 0xcd, 0x57, 0x2e, 0xbe, 0x10, 0x6c, 0xae, 0x8c, - 0x18, 0xd0, 0xca, 0x36, 0x00, 0x57, 0xe2, 0x1c, 0x13, 0x15, 0xc0, 0x56, 0x1d, 0x04, 0xe8, 0x20, - 0x42, 0xc2, 0x70, 0x17, 0xb9, 0x8e, 0xcc, 0x87, 0x8b, 0xff, 0x9a, 0x43, 0x8f, 0xb5, 0xb8, 0xf7, - 0xb3, 0x05, 0xf5, 0x4a, 0xc8, 0xa3, 0x04, 0x22, 0xc6, 0xca, 0x59, 0x8c, 0x29, 0xf9, 0x98, 0x53, - 0xa5, 0x41, 0x4e, 0x98, 0xbd, 0x9e, 0x18, 0x32, 0x98, 0x9f, 0x9d, 0xa4, 0x56, 0x5a, 0x5a, 0x41, - 0x40, 0x64, 0x2f, 0x60, 0xd1, 0x90, 0x30, 0xae, 0xe8, 0x14, 0x25, 0x92, 0x6e, 0x04, 0x63, 0xd7, - 0xe0, 0x3a, 0xfa, 0xf5, 0x4b, 0xb0, 0x8f, 0xb4, 0x9e, 0x33, 0x5a, 0xc7, 0x88, 0x7e, 0xfd, 0x13, - 0xd6, 0x4d, 0x4d, 0x9e, 0x9d, 0x1c, 0x5e, 0xe5, 0xd0, 0x4a, 0x86, 0x37, 0xe0, 0x62, 0x9a, 0x6a, - 0xa0, 0xb8, 0xe6, 0x57, 0xaa, 0xf4, 0xbe, 0x90, 0xb7, 0x82, 0xe8, 0xb4, 0xf1, 0x30, 0xf8, 0x12, - 0xcc, 0xc2, 0x6c, 0xdf, 0x90, 0x97, 0x93, 0x81, 0xb7, 0x40, 0xea, 0xaa, 0x2a, 0xe7, 0x45, 0xcd, - 0xff, 0x8f, 0x1c, 0x7a, 0xdc, 0xc0, 0xd2, 0xe4, 0x33, 0x4e, 0x58, 0x05, 0x3f, 0x52, 0x91, 0x95, - 0x96, 0x60, 0xbb, 0xdb, 0x4f, 0x5f, 0x92, 0x15, 0xd7, 0x9c, 0xe0, 0x54, 0xe9, 0x18, 0x27, 0xcc, - 0x55, 0x53, 0x0c, 0x99, 0x01, 0x2e, 0xdc, 0xe6, 0x4b, 0xc8, 0x10, 0xd0, 0x62, 0xe3, 0xff, 0x37, - 0x0e, 0x41, 0x94, 0x51, 0x7d, 0xe4, 0x33, 0x6d, 0x64, 0xcc, 0xd8, 0x4a, 0x86, 0x62, 0xaa, 0x84, - 0x93, 0xb1, 0xeb, 0xfa, 0x97, 0x63, 0xda, 0xa1, 0xbe, 0xdc, 0x4d, 0xf3, 0x1c, 0xe1, 0xac, 0x86, - 0x40, 0x8f, 0x2d, 0x10, 0xfa, 0x17, 0xa3, 0xe4, 0xa9, 0xd0, 0x5c, 0x04, 0xf1, 0xdb, 0x58, 0xfb, - 0xde, 0x52, 0x33, 0x60, 0x5c, 0x25, 0x6b, 0xdf, 0x73, 0x80, 0x39, 0x0e, 0x84, 0x23, 0xfa, 0x68, - 0x75, 0x16, 0x13, 0xdd, 0x56, 0xf6, 0x15, 0xec, 0x32, 0xeb, 0x81, 0x3a, 0xf3, 0x0a, 0xf6, 0x29, - 0xe6, 0x7d, 0xab, 0x0d, 0x25, 0x81, 0xb1, 0x6f, 0x5a, 0x99, 0xf0, 0x2b, 0xcb, 0x1f, 0x2a, 0xfc, - 0x8a, 0xd3, 0xf6, 0xd4, 0x6f, 0x05, 0x13, 0x76, 0xd1, 0x02, 0x8b, 0x7c, 0xd6, 0x93, 0x06, 0x1c, - 0x0f, 0x85, 0x79, 0x0f, 0xc8, 0xc4, 0x70, 0xe1, 0x1f, 0x2a, 0x86, 0x8b, 0xd3, 0xf6, 0x90, 0xf0, - 0x11, 0xa6, 0x77, 0x26, 0x0e, 0x0b, 0xcf, 0x36, 0xcf, 0x13, 0x8d, 0xe5, 0xaf, 0xd8, 0x17, 0x7e, - 0xf0, 0xb6, 0xea, 0x2e, 0xa7, 0x4a, 0x53, 0xec, 0x0b, 0xbf, 0x71, 0x2e, 0x57, 0xec, 0xfb, 0x81, - 0x3c, 0xf5, 0x1b, 0xe3, 0x72, 0x9f, 0x1a, 0xaf, 0xc2, 0xbc, 0x1b, 0xa7, 0x57, 0xcd, 0x79, 0x6a, - 0xbc, 0x97, 0xd5, 0x99, 0x29, 0x3b, 0xa1, 0x02, 0x06, 0x79, 0x82, 0x3c, 0x34, 0x90, 0x4c, 0x0c, - 0x6b, 0x23, 0x38, 0xe4, 0x12, 0x5e, 0x4f, 0x99, 0x83, 0x63, 0xa9, 0xe9, 0x2f, 0x1c, 0xb9, 0xc3, - 0xe4, 0x48, 0x4d, 0x75, 0x25, 0xa7, 0x6e, 0xb3, 0x87, 0xa3, 0x63, 0x96, 0xc7, 0xca, 0x7f, 0xc9, - 0xa1, 0x47, 0x1a, 0xdb, 0xf6, 0xec, 0x51, 0x42, 0x32, 0x79, 0x9e, 0x27, 0x1b, 0xc7, 0x00, 0xbe, - 0xae, 0xa0, 0xfb, 0x3e, 0x5f, 0x0d, 0xf1, 0x23, 0x00, 0x56, 0x9a, 0xcf, 0xfa, 0x2a, 0xb1, 0xc2, - 0x4a, 0xc4, 0x0e, 0xe0, 0x86, 0xac, 0xd8, 0xc1, 0x72, 0x52, 0xe2, 0xcc, 0xcb, 0xc8, 0x1f, 0xa9, - 0x81, 0xc3, 0xc0, 0x5e, 0xc1, 0xc2, 0x0a, 0xa1, 0xa8, 0x58, 0x54, 0xf4, 0x5b, 0x1c, 0x1b, 0xd6, - 0xaf, 0x97, 0xf3, 0x11, 0xc4, 0x5f, 0x82, 0x43, 0x63, 0x53, 0xc8, 0xed, 0x51, 0xf6, 0xb4, 0xf9, - 0x77, 0x28, 0xa1, 0x16, 0x5f, 0x00, 0x9f, 0x69, 0x0d, 0x8a, 0x07, 0xbf, 0x21, 0x2b, 0xae, 0xd9, - 0xa3, 0x4a, 0x1e, 0x61, 0xf6, 0x5a, 0xe2, 0x46, 0xe3, 0xc8, 0x68, 0x22, 0x65, 0x95, 0x11, 0xab, - 0xb0, 0x32, 0xac, 0x78, 0x2a, 0xa8, 0x93, 0xb4, 0xb1, 0xf6, 0x30, 0x6f, 0x73, 0xd4, 0x07, 0xbd, - 0x8e, 0x4c, 0x34, 0xaa, 0x1d, 0x8e, 0xeb, 0x23, 0x51, 0xca, 0xe6, 0xe4, 0xd9, 0xbb, 0xe0, 0xbb, - 0x38, 0xb4, 0x24, 0xec, 0x71, 0x07, 0xb0, 0x81, 0xaf, 0xdd, 0xed, 0x2f, 0x29, 0xc1, 0x94, 0xfd, - 0x67, 0xaa, 0xf4, 0x81, 0x60, 0x2b, 0x10, 0xb7, 0x1a, 0xbf, 0x2a, 0x7d, 0xe4, 0x67, 0x45, 0xd6, - 0xc2, 0xd0, 0x3f, 0x8d, 0xea, 0xbf, 0x3f, 0x0a, 0xfd, 0x19, 0xff, 0x0f, 0x1f, 0xa7, 0xec, 0xde, - 0x90, 0xd7, 0xae, 0xaa, 0xb6, 0xe9, 0xdf, 0xb0, 0x5e, 0xb6, 0x21, 0x37, 0x84, 0xa1, 0x95, 0x2d, - 0xee, 0xfd, 0x06, 0xd3, 0xc4, 0x31, 0x87, 0xc2, 0x86, 0xe8, 0x66, 0x6c, 0xe9, 0xc7, 0x30, 0x39, - 0x1f, 0xaa, 0x52, 0x93, 0x90, 0xb7, 0x82, 0xb8, 0xdd, 0x18, 0xa3, 0x40, 0xd0, 0xab, 0x54, 0xb6, - 0x9a, 0x70, 0x38, 0x8d, 0x60, 0x48, 0x88, 0x26, 0x81, 0xed, 0xc3, 0xec, 0x98, 0xb0, 0x87, 0x91, - 0x35, 0x9b, 0xaf, 0xac, 0x5f, 0x2f, 0xe7, 0xed, 0xc6, 0x90, 0x43, 0x96, 0xe1, 0x35, 0xba, 0xb3, - 0x75, 0x63, 0x28, 0xd8, 0xf2, 0x9e, 0x12, 0x0a, 0x96, 0xac, 0xc1, 0x9b, 0x08, 0x1b, 0x41, 0xb2, - 0xcb, 0x44, 0x09, 0x0e, 0xc9, 0xb6, 0xd6, 0xca, 0x3d, 0xa1, 0x60, 0x4b, 0xe5, 0x47, 0x4a, 0x28, - 0x48, 0x64, 0x0f, 0xf6, 0x80, 0x9e, 0x49, 0xf4, 0x40, 0x28, 0x33, 0x07, 0x2b, 0x8e, 0xe0, 0x29, - 0xed, 0x95, 0xb3, 0x71, 0xf2, 0xe7, 0x38, 0xb4, 0xda, 0xae, 0x8d, 0x48, 0x7b, 0x8c, 0xad, 0xe6, - 0xf5, 0x96, 0x3c, 0x6e, 0xdd, 0x6b, 0xcc, 0x52, 0x45, 0x7c, 0x93, 0x39, 0xb6, 0xbd, 0x46, 0x49, - 0xa5, 0x7b, 0x0f, 0x3e, 0x20, 0xbd, 0xde, 0x0a, 0x4b, 0x3b, 0xea, 0xb9, 0xa4, 0x9f, 0xbc, 0x6e, - 0x39, 0xec, 0xe7, 0x4c, 0xa6, 0x71, 0x76, 0xcf, 0xd2, 0x03, 0x7f, 0xc5, 0x90, 0xb0, 0x73, 0x8b, - 0x88, 0x6e, 0xf8, 0x04, 0x26, 0x11, 0xc7, 0x8d, 0x9a, 0xbd, 0xd6, 0xac, 0x54, 0x12, 0x55, 0x11, - 0x94, 0xa0, 0x64, 0xec, 0x92, 0xa5, 0x30, 0xce, 0x46, 0xe5, 0xec, 0x9d, 0xf0, 0xd7, 0x39, 0xb4, - 0x26, 0x4f, 0xe9, 0x46, 0xb7, 0xcf, 0xdf, 0x16, 0x52, 0x4a, 0x9e, 0xc4, 0x94, 0xe2, 0xdb, 0xb7, - 0x39, 0xaa, 0x89, 0x5b, 0x66, 0x21, 0x75, 0x0f, 0x94, 0x93, 0xfd, 0x09, 0x4f, 0x63, 0xb4, 0xa1, - 0x01, 0x78, 0x01, 0x34, 0x2b, 0xb9, 0x73, 0xf4, 0xc4, 0x77, 0x16, 0x20, 0x07, 0x2d, 0xde, 0xd4, - 0xda, 0x96, 0xa5, 0xdf, 0x60, 0x0d, 0xab, 0x64, 0x2d, 0xa6, 0xfa, 0xf7, 0x9c, 0x2a, 0xdd, 0xe4, - 0x84, 0xfb, 0x56, 0x17, 0xfb, 0x58, 0x9d, 0xad, 0xa9, 0xb5, 0xed, 0x21, 0xf5, 0xb6, 0xb2, 0x4d, - 0xf5, 0x3b, 0xcb, 0xbf, 0x47, 0xe5, 0xed, 0xbe, 0x04, 0xe3, 0x10, 0x64, 0xe4, 0xc5, 0xfa, 0x53, - 0x4c, 0x08, 0x32, 0xf2, 0x60, 0xfd, 0x7d, 0x78, 0x98, 0x5e, 0xe1, 0xd8, 0xb6, 0x5d, 0xde, 0x2a, - 0x6d, 0xa9, 0xd6, 0xaf, 0x7f, 0xaa, 0xc5, 0x62, 0x33, 0x89, 0xbe, 0x9d, 0xf5, 0xb5, 0xf8, 0x89, - 0x79, 0x35, 0x49, 0xc1, 0x10, 0xbb, 0x6e, 0x02, 0xeb, 0x2a, 0x37, 0x4a, 0xae, 0x2d, 0x75, 0xb5, - 0xa4, 0x04, 0x26, 0x6a, 0x26, 0xd1, 0x47, 0x9e, 0xa3, 0x54, 0x6b, 0x77, 0xbe, 0x00, 0x91, 0x9a, - 0xbe, 0x34, 0x77, 0xa2, 0x25, 0x4a, 0x28, 0x14, 0x0c, 0x6d, 0x25, 0xb1, 0x4d, 0x1d, 0x98, 0x0e, - 0x9c, 0xa7, 0xd7, 0x56, 0x20, 0x2e, 0xb1, 0x85, 0x36, 0xb5, 0x95, 0xf1, 0xff, 0x8a, 0x43, 0xab, - 0xed, 0x07, 0x86, 0xb3, 0xb5, 0x0d, 0x8e, 0xb9, 0xa7, 0xf1, 0x14, 0x9e, 0xe6, 0x54, 0xe9, 0x38, - 0x27, 0xcc, 0x52, 0xe9, 0x8f, 0x7a, 0xd2, 0xcd, 0x42, 0x53, 0x9e, 0x6f, 0xda, 0xaa, 0xb4, 0xc0, - 0x37, 0x95, 0xce, 0xf1, 0x4d, 0x66, 0xa5, 0xbf, 0x4f, 0xdf, 0x64, 0xd2, 0xc4, 0x07, 0xd1, 0xc2, - 0x96, 0x20, 0x7e, 0xea, 0xf2, 0x4c, 0xfe, 0x38, 0x8d, 0x5b, 0x71, 0x29, 0x36, 0x3d, 0xe3, 0x37, - 0x43, 0xa4, 0xba, 0xb8, 0x0e, 0xfe, 0x85, 0x88, 0x02, 0xa6, 0xe5, 0xd9, 0x29, 0x91, 0x9d, 0x32, - 0x7d, 0x2d, 0x75, 0x75, 0x8a, 0x2d, 0x93, 0x49, 0x3b, 0xfe, 0xb7, 0x68, 0xd1, 0x3e, 0xa5, 0x71, - 0x6f, 0x30, 0xd8, 0x5c, 0xf2, 0x6c, 0xfe, 0xa0, 0x5f, 0xef, 0x40, 0xf1, 0xd6, 0xa0, 0x57, 0x81, - 0x08, 0x07, 0x66, 0x03, 0xb1, 0xda, 0x29, 0x39, 0xc8, 0xdf, 0xf0, 0x56, 0x2b, 0x2b, 0xd2, 0x1e, - 0x73, 0x1f, 0x95, 0x39, 0x77, 0xde, 0x56, 0x53, 0x36, 0x91, 0xf0, 0xff, 0x15, 0x87, 0x9e, 0x50, - 0xf6, 0xb7, 0x2a, 0x01, 0xaf, 0x21, 0x95, 0xd5, 0x07, 0xbd, 0xe1, 0x7a, 0x62, 0xf8, 0x73, 0xb6, - 0x45, 0x82, 0x7b, 0xf6, 0x94, 0xfc, 0xc8, 0xc1, 0x95, 0x2d, 0x30, 0x5f, 0x90, 0xce, 0x59, 0x55, - 0xf4, 0xd0, 0x9b, 0x71, 0x60, 0x06, 0xfa, 0xf5, 0x4b, 0xc6, 0xc4, 0x0d, 0x77, 0x39, 0x5a, 0x83, - 0xde, 0x99, 0x44, 0x9f, 0xd1, 0xd4, 0x90, 0x0d, 0x93, 0xb1, 0xfe, 0x64, 0x62, 0x38, 0x6b, 0x76, - 0x28, 0x67, 0x4f, 0x26, 0x86, 0x53, 0x67, 0x6f, 0xe9, 0x03, 0x97, 0x1d, 0xcd, 0x3e, 0xbf, 0xdf, - 0x18, 0x45, 0xea, 0x5f, 0x5e, 0xb9, 0x61, 0xbd, 0x3c, 0x27, 0x09, 0x86, 0x86, 0xcb, 0x07, 0x94, - 0x7d, 0xf5, 0x41, 0x6f, 0x03, 0x1c, 0xa4, 0x60, 0x2b, 0xfc, 0x31, 0x5e, 0x90, 0x8d, 0xaa, 0xf4, - 0x0b, 0x21, 0x4f, 0xb1, 0x58, 0x93, 0x0b, 0x33, 0x54, 0xbd, 0x93, 0x37, 0x5a, 0x83, 0x5e, 0x6d, - 0x2a, 0x9e, 0xfa, 0xfc, 0xa8, 0x76, 0x69, 0x38, 0x39, 0xd9, 0x9d, 0x9c, 0x3c, 0xaa, 0x0d, 0x0d, - 0xe8, 0xbd, 0xfd, 0x40, 0xbb, 0x53, 0x32, 0x47, 0xd9, 0xb1, 0xfe, 0x9b, 0x9a, 0xf9, 0x42, 0x41, - 0xd9, 0x9f, 0xc9, 0x79, 0xd0, 0x97, 0xde, 0xe3, 0xd0, 0x62, 0x66, 0x1a, 0x79, 0x19, 0xcd, 0x6f, - 0x31, 0x23, 0x2b, 0x17, 0x41, 0xdc, 0x2c, 0x0c, 0x10, 0x9f, 0xcb, 0x9e, 0xd1, 0x32, 0x72, 0x73, - 0x12, 0xbf, 0xaa, 0x7d, 0xdc, 0xa1, 0xf5, 0x9d, 0x4c, 0x4e, 0x75, 0xeb, 0xc7, 0x27, 0xf4, 0xbe, - 0x8e, 0x77, 0x94, 0x46, 0xa8, 0x51, 0x2e, 0xe3, 0xa6, 0xfc, 0x26, 0xb4, 0x10, 0x47, 0x47, 0x0f, - 0xb1, 0x81, 0xcb, 0x08, 0x48, 0x2c, 0xcd, 0xc6, 0x0b, 0x70, 0xdb, 0x2b, 0x36, 0x52, 0x97, 0x7f, - 0x09, 0x2d, 0x88, 0x04, 0x9b, 0x15, 0x33, 0x56, 0x19, 0x44, 0x7b, 0xc7, 0x10, 0x71, 0x55, 0x36, - 0x1a, 0x0c, 0x96, 0xa1, 0xb4, 0xf4, 0x2b, 0x0e, 0x2d, 0xc0, 0xe1, 0x06, 0xf8, 0x1f, 0x33, 0x57, - 0x25, 0x35, 0x2b, 0x55, 0x69, 0x85, 0x60, 0xfc, 0x16, 0x11, 0x84, 0xb4, 0x71, 0x6c, 0x56, 0x0e, - 0xc0, 0x05, 0xca, 0x3a, 0xdb, 0x05, 0x4a, 0x4d, 0x89, 0x2a, 0xad, 0x12, 0x00, 0x22, 0x2e, 0x21, - 0x75, 0x71, 0xbe, 0x1e, 0x72, 0xb5, 0x82, 0x83, 0x2d, 0xee, 0xd9, 0xa3, 0x78, 0x22, 0xac, 0xa9, - 0x9f, 0x80, 0xc4, 0x97, 0xa1, 0x85, 0x7e, 0xa2, 0x47, 0x3f, 0x3f, 0x32, 0x93, 0xe8, 0x2b, 0xdb, - 0x16, 0x6c, 0x20, 0x8f, 0xcf, 0x2a, 0x1c, 0xf5, 0x21, 0x65, 0x8f, 0x12, 0x62, 0x21, 0xdb, 0x82, - 0x75, 0xfb, 0x15, 0x4f, 0x5b, 0x04, 0x07, 0x5b, 0xc4, 0x18, 0x4a, 0xa3, 0x65, 0x68, 0x09, 0x1b, - 0xc6, 0x83, 0xdf, 0x8c, 0x96, 0xb2, 0x61, 0x39, 0xec, 0x77, 0x38, 0x59, 0x45, 0xe2, 0x52, 0x22, - 0xc7, 0xe1, 0x78, 0x8f, 0xae, 0x5a, 0x39, 0xab, 0x9c, 0xdf, 0x60, 0x8b, 0x78, 0x05, 0x61, 0xa9, - 0xf1, 0x45, 0x1e, 0xcf, 0x36, 0xb4, 0x05, 0xbd, 0xfa, 0x30, 0xd7, 0x3d, 0x08, 0xa7, 0x2b, 0x66, - 0xcc, 0x07, 0x3f, 0x63, 0x1b, 0xdb, 0xe2, 0x5e, 0x99, 0x5e, 0x41, 0x8c, 0x03, 0x50, 0x1c, 0x42, - 0x2f, 0xd0, 0x52, 0xd6, 0xb4, 0xe0, 0xa7, 0x31, 0x93, 0x20, 0x86, 0x72, 0xd9, 0x5c, 0x01, 0x4e, - 0xbe, 0x73, 0xd8, 0xa4, 0xf7, 0x68, 0xd8, 0x24, 0x88, 0x90, 0xbc, 0x2a, 0xe7, 0x69, 0xa6, 0x51, - 0x4a, 0x82, 0x6c, 0x91, 0x30, 0x49, 0x6b, 0x73, 0x51, 0x43, 0x49, 0x56, 0x8c, 0xa4, 0x73, 0x79, - 0x7c, 0xef, 0xe0, 0xbd, 0x12, 0xf6, 0x87, 0xcd, 0xf1, 0xbd, 0xfb, 0x20, 0xcb, 0xf7, 0x2e, 0x19, - 0x8b, 0x43, 0x15, 0xfd, 0xd4, 0x6d, 0x72, 0x43, 0x08, 0xa6, 0x04, 0xe2, 0x71, 0xf1, 0x5d, 0x7d, - 0xf2, 0xfe, 0xb6, 0xc0, 0xfe, 0x1e, 0x0b, 0x7c, 0x83, 0xbe, 0x2e, 0x50, 0xa5, 0x7f, 0x51, 0x60, - 0x7f, 0x91, 0xf5, 0x55, 0x41, 0x96, 0x5b, 0x27, 0x79, 0xa1, 0xd5, 0x39, 0x49, 0xb9, 0x7b, 0xac, - 0x1f, 0x60, 0xb4, 0xca, 0xbd, 0x68, 0xa7, 0x76, 0xe7, 0x0b, 0xea, 0xa7, 0x69, 0x30, 0x5f, 0x65, - 0x7f, 0xe4, 0xb9, 0x99, 0x44, 0x9f, 0xb2, 0x3f, 0xf2, 0xfc, 0x4c, 0xa2, 0x6f, 0xff, 0x9e, 0xb0, - 0x83, 0x7d, 0xa5, 0x06, 0x76, 0x50, 0xf2, 0x40, 0xee, 0xc6, 0x21, 0x60, 0xbd, 0x80, 0x54, 0xeb, - 0xbe, 0x9d, 0x9c, 0x3a, 0xc9, 0x56, 0xd6, 0x7b, 0x4e, 0xea, 0x23, 0x9f, 0xb1, 0xd8, 0xd9, 0xb6, - 0x44, 0xcb, 0xa1, 0x6e, 0xa5, 0xb1, 0xb8, 0xd1, 0xa7, 0xa3, 0x2c, 0xe2, 0xf7, 0x05, 0xda, 0xf6, - 0x13, 0x0c, 0xd4, 0x83, 0xb4, 0x67, 0x68, 0xff, 0x9e, 0x70, 0x39, 0x7d, 0xba, 0x76, 0x2f, 0xda, - 0xa9, 0x9f, 0xba, 0x68, 0x7d, 0xaa, 0xd1, 0x53, 0xaf, 0x21, 0x4e, 0x9e, 0x3b, 0x65, 0xbd, 0x2b, - 0xc4, 0x89, 0x81, 0x92, 0xb1, 0x29, 0x7d, 0x24, 0xae, 0x5f, 0xa7, 0x5e, 0x37, 0xfd, 0xa9, 0xe3, - 0x17, 0xf4, 0x13, 0x3d, 0xf7, 0xa2, 0x9d, 0x74, 0x52, 0xf0, 0x74, 0xd8, 0x1f, 0xb1, 0x5d, 0x99, - 0x87, 0x50, 0x5b, 0x58, 0x09, 0x35, 0xe0, 0x50, 0xb0, 0xc4, 0xcd, 0xa9, 0x7b, 0x9e, 0x2a, 0x75, - 0xcc, 0x13, 0x98, 0x02, 0xf1, 0x6f, 0x0a, 0x88, 0xf0, 0x01, 0x97, 0xd3, 0x43, 0x03, 0xa9, 0xe9, - 0xf1, 0x74, 0xd7, 0xb0, 0x3e, 0x72, 0xad, 0xc2, 0x01, 0x17, 0xa2, 0x70, 0xe5, 0x9f, 0x1a, 0xee, - 0x22, 0xfe, 0xb2, 0xb8, 0x70, 0x9d, 0xa3, 0xf9, 0xe5, 0x30, 0x58, 0x3d, 0x60, 0x29, 0xe1, 0x93, - 0xe2, 0x6a, 0x7a, 0xb4, 0xcf, 0x8a, 0x3e, 0x75, 0xf7, 0x5c, 0x7a, 0xa2, 0x03, 0xaa, 0x43, 0xf4, - 0x82, 0xcc, 0xe1, 0x7e, 0xad, 0xfb, 0xb2, 0xa6, 0xf6, 0x81, 0xa2, 0x90, 0x89, 0x4e, 0xa5, 0xbf, - 0x3a, 0x06, 0x9e, 0x4f, 0xfa, 0xf9, 0x91, 0xf4, 0x95, 0x0e, 0xfd, 0x66, 0x27, 0xb9, 0x60, 0x07, - 0x77, 0xdc, 0x91, 0x31, 0xc8, 0x40, 0x4e, 0xb7, 0x80, 0x36, 0xde, 0xa7, 0xf7, 0x0c, 0xc1, 0xa9, - 0xa4, 0x0d, 0x4e, 0x68, 0x47, 0x2e, 0x6a, 0xdd, 0x97, 0xd3, 0x37, 0x0e, 0x6a, 0xf1, 0x2b, 0x06, - 0xfe, 0xee, 0x7e, 0x6d, 0xa8, 0xc7, 0xd1, 0x16, 0x20, 0xef, 0x70, 0x8d, 0x53, 0xd3, 0xa1, 0x0d, - 0x76, 0xea, 0x27, 0x6e, 0x80, 0x60, 0x50, 0xe1, 0xd0, 0x46, 0xc6, 0x1c, 0xd6, 0xd7, 0x3b, 0xf4, - 0x91, 0x28, 0x56, 0x09, 0xb3, 0xd1, 0x57, 0x38, 0xe0, 0xb9, 0x9e, 0xa3, 0xb9, 0xad, 0x51, 0xf1, - 0x44, 0xfc, 0x8e, 0xb6, 0x80, 0x27, 0x18, 0xf2, 0x06, 0x03, 0x0e, 0x83, 0xcf, 0x19, 0xec, 0xca, - 0x51, 0x59, 0x89, 0xcb, 0xb0, 0xef, 0xc0, 0x6b, 0x55, 0xa1, 0x60, 0x30, 0x52, 0xb5, 0xce, 0x80, - 0x54, 0x01, 0xc8, 0xa1, 0x1d, 0x9b, 0x4e, 0x4e, 0x19, 0x02, 0x09, 0x19, 0x59, 0x86, 0x54, 0x99, - 0x99, 0x00, 0xfe, 0x2e, 0x87, 0x8a, 0xdb, 0x02, 0x0d, 0x16, 0xc5, 0x24, 0x6f, 0x08, 0x91, 0x27, - 0xed, 0x65, 0x62, 0x27, 0x47, 0xfc, 0x9d, 0x30, 0x3a, 0x6a, 0xbb, 0x35, 0x43, 0xcc, 0x77, 0x26, - 0x63, 0x03, 0xd0, 0x07, 0x95, 0x00, 0xb5, 0x68, 0x62, 0x7d, 0x7a, 0x74, 0x2c, 0x75, 0x29, 0x9e, - 0x5d, 0x7c, 0xee, 0x3c, 0x29, 0xc0, 0xd1, 0xe6, 0xad, 0xb2, 0x32, 0x42, 0xab, 0xa9, 0xa9, 0x6b, - 0x83, 0x13, 0x60, 0xf2, 0x83, 0xa1, 0x2c, 0x97, 0xed, 0x34, 0xf1, 0x5f, 0x16, 0xe4, 0xfa, 0x76, - 0xdd, 0xc7, 0xb3, 0xfb, 0x6f, 0x39, 0x55, 0xfa, 0x3f, 0x38, 0xd6, 0xc5, 0xeb, 0x1e, 0xf7, 0x50, - 0x3e, 0x5e, 0xeb, 0x1c, 0xda, 0xa5, 0x61, 0x63, 0xe3, 0xd8, 0x99, 0x85, 0xd9, 0x74, 0xd8, 0xe0, - 0x9e, 0x53, 0x71, 0xfa, 0x09, 0xe9, 0x89, 0x3b, 0xa9, 0xd1, 0x71, 0x63, 0x45, 0xe2, 0xd6, 0xce, - 0x5d, 0x5b, 0xf1, 0x8a, 0xc4, 0x2b, 0x23, 0x71, 0x31, 0x13, 0x55, 0x93, 0xf1, 0x43, 0x50, 0x04, - 0x61, 0x35, 0x6c, 0x7b, 0x10, 0xec, 0x98, 0x13, 0x97, 0x49, 0xfd, 0xd8, 0x94, 0xb1, 0x52, 0x4f, - 0x4f, 0x64, 0xd4, 0x1e, 0x6d, 0x62, 0x92, 0x3e, 0x58, 0x48, 0xc6, 0xaf, 0xea, 0x23, 0x71, 0xed, - 0xcc, 0x58, 0x32, 0x76, 0x9c, 0xd0, 0x7b, 0x69, 0xd8, 0xe2, 0x17, 0x23, 0x71, 0xfd, 0xcc, 0x04, - 0xeb, 0x99, 0xd6, 0x5b, 0x80, 0x8a, 0x70, 0x8c, 0x7a, 0x29, 0xd4, 0x14, 0x2e, 0x59, 0x8c, 0x47, - 0xed, 0xa7, 0x73, 0x1e, 0x43, 0x75, 0x66, 0x6d, 0x38, 0x89, 0xa6, 0x39, 0x55, 0x9a, 0xe4, 0x04, - 0x0b, 0x89, 0xf8, 0x39, 0x47, 0xfc, 0x65, 0x87, 0xba, 0x40, 0xfc, 0xa6, 0x36, 0x54, 0x20, 0xdd, - 0x98, 0x74, 0x33, 0x0a, 0x6d, 0x6a, 0xb8, 0xab, 0x59, 0x39, 0x90, 0x8c, 0xc5, 0x8d, 0x35, 0xeb, - 0x57, 0x22, 0x58, 0xe6, 0x48, 0xc6, 0xe2, 0x56, 0xdb, 0xbb, 0x67, 0x53, 0x63, 0xc4, 0xd1, 0x88, - 0x36, 0x37, 0x83, 0x8e, 0xe0, 0x81, 0x98, 0x3c, 0x9a, 0x39, 0x75, 0x0b, 0x36, 0xd6, 0xab, 0x54, - 0xdd, 0x37, 0x0e, 0xac, 0x2b, 0x9d, 0x9b, 0x01, 0x69, 0xb5, 0xc3, 0xd8, 0x17, 0x95, 0x5e, 0x5f, - 0xe8, 0xb5, 0xaa, 0x76, 0x77, 0xa8, 0xca, 0xef, 0x6b, 0xac, 0x22, 0xfd, 0xbd, 0x2a, 0x5b, 0x84, - 0xf3, 0xff, 0x92, 0x43, 0x7c, 0x6b, 0x48, 0x69, 0x88, 0xb8, 0x43, 0x91, 0x9d, 0x16, 0xd3, 0x02, - 0x17, 0xb9, 0xf3, 0x9c, 0x2a, 0x0d, 0x73, 0x42, 0x9e, 0x0a, 0xe2, 0x41, 0xce, 0xc6, 0xbc, 0x7a, - 0xfb, 0x73, 0x98, 0x97, 0x63, 0x16, 0xee, 0x85, 0x3d, 0xb9, 0xc9, 0xae, 0x87, 0xd6, 0x86, 0xb4, - 0xdb, 0xdb, 0x4f, 0x79, 0x98, 0xfe, 0xe5, 0x98, 0xde, 0x35, 0x08, 0x02, 0xa9, 0x36, 0xf8, 0x99, - 0x36, 0x31, 0x99, 0xfb, 0x80, 0x17, 0x18, 0xb1, 0x9c, 0x87, 0x32, 0x63, 0x76, 0x57, 0x34, 0x7a, - 0xc0, 0x99, 0x61, 0x7b, 0x5b, 0x44, 0xf2, 0x7a, 0x83, 0x81, 0x30, 0x79, 0xaa, 0x93, 0x13, 0x91, - 0x5f, 0xf2, 0xe0, 0xc8, 0x90, 0xff, 0x88, 0x53, 0xa5, 0xaf, 0x38, 0x21, 0xb7, 0x9d, 0x38, 0xc6, - 0x25, 0x63, 0x47, 0xf4, 0xf3, 0xb7, 0xad, 0xf5, 0x8c, 0xd9, 0x62, 0x8d, 0xb3, 0x41, 0x3b, 0xd4, - 0x9d, 0x9a, 0x1e, 0x87, 0xe4, 0x0c, 0xda, 0x78, 0x6f, 0xfa, 0xd3, 0x6e, 0x10, 0x82, 0xc8, 0xcb, - 0x87, 0xc4, 0x70, 0xea, 0xd6, 0x27, 0x5a, 0xe2, 0x04, 0xf8, 0x7e, 0xc3, 0x66, 0x62, 0xe5, 0x60, - 0xc2, 0x5e, 0x27, 0x26, 0xf5, 0x89, 0xe3, 0xc6, 0xfe, 0x1f, 0xbd, 0xac, 0x75, 0x1b, 0x18, 0xa0, - 0x5f, 0x2b, 0xde, 0x08, 0xdc, 0xd3, 0x61, 0x83, 0x03, 0x1d, 0x36, 0x50, 0x0f, 0x00, 0x43, 0xfa, - 0xc6, 0xc1, 0xd4, 0xf1, 0xb1, 0x7b, 0xd1, 0x4e, 0x39, 0x97, 0x7a, 0xfe, 0x50, 0x01, 0x5a, 0x6e, - 0x42, 0x5d, 0x01, 0x32, 0x14, 0x4b, 0xe7, 0x1c, 0x8a, 0x7f, 0xc8, 0xa9, 0xd2, 0x34, 0x27, 0xe4, - 0x34, 0xc3, 0x23, 0x71, 0xf4, 0x87, 0x31, 0x12, 0x39, 0xc4, 0xf3, 0xc7, 0x0a, 0xd0, 0x23, 0x61, - 0x32, 0x36, 0xb0, 0x99, 0x61, 0x2c, 0x96, 0xcd, 0x39, 0x16, 0xff, 0x25, 0xa7, 0x4a, 0xff, 0x88, - 0x13, 0xf2, 0xb5, 0x14, 0x3f, 0xcb, 0x5e, 0x18, 0xb0, 0xca, 0xd9, 0x2c, 0x1a, 0xc0, 0xdf, 0x28, - 0x1f, 0x63, 0xd3, 0x66, 0x24, 0x63, 0x71, 0xf0, 0xd2, 0x4c, 0xc6, 0xfb, 0xf4, 0x93, 0x93, 0x55, - 0xe0, 0xa6, 0x56, 0x05, 0x21, 0x59, 0xb4, 0x13, 0x87, 0x08, 0x02, 0xbc, 0xc3, 0x67, 0x1b, 0x0a, - 0x30, 0x4a, 0xc1, 0x80, 0xe4, 0x8e, 0x43, 0x32, 0x36, 0x00, 0x73, 0x61, 0x0c, 0x48, 0xbe, 0x2f, - 0xe0, 0x7b, 0x0a, 0x10, 0x1f, 0x86, 0x51, 0x62, 0x87, 0x64, 0xf9, 0x9c, 0x43, 0x42, 0xee, 0xae, - 0xf2, 0x34, 0x14, 0x2f, 0x65, 0x2f, 0x90, 0xbf, 0x9f, 0x63, 0x91, 0x87, 0x74, 0xfe, 0x39, 0x1a, - 0xee, 0x74, 0x85, 0x15, 0x36, 0xc4, 0x0c, 0x77, 0x6a, 0x53, 0xb8, 0xb6, 0x37, 0xe4, 0x8b, 0x5d, - 0xfa, 0xc8, 0xac, 0xb1, 0x4b, 0x57, 0xce, 0x15, 0xbb, 0x74, 0xd5, 0x7d, 0x62, 0x97, 0xae, 0xce, - 0x89, 0x5d, 0xfa, 0x12, 0x9a, 0xef, 0x55, 0xc2, 0x70, 0xc5, 0x53, 0x64, 0x26, 0xb5, 0x54, 0xc2, - 0x1e, 0xb1, 0x84, 0x12, 0xa9, 0x9f, 0xbb, 0x0b, 0x59, 0x0a, 0x68, 0xe6, 0x21, 0x25, 0xec, 0xe1, - 0xdb, 0xd0, 0xa2, 0x50, 0x5b, 0x20, 0x62, 0x60, 0x2d, 0xc9, 0x6f, 0xff, 0x91, 0xdb, 0xf0, 0x65, - 0x04, 0x36, 0x39, 0x61, 0x53, 0x81, 0xd9, 0x40, 0x5c, 0x4f, 0x03, 0x1a, 0x66, 0xbf, 0x1e, 0x1a, - 0x9c, 0xa0, 0x7f, 0x43, 0xc0, 0x18, 0x33, 0xdf, 0x12, 0x69, 0xca, 0x1f, 0xe4, 0xa8, 0xa1, 0xeb, - 0xb1, 0xfb, 0x1a, 0xba, 0xb0, 0xc3, 0x85, 0x69, 0xe8, 0xaa, 0xc9, 0xea, 0x34, 0x19, 0x3b, 0x02, - 0xcb, 0xcb, 0xe8, 0x17, 0x67, 0xa7, 0x30, 0x23, 0xd6, 0x0c, 0x6b, 0x47, 0x46, 0x93, 0xb1, 0xa3, - 0x73, 0x18, 0xbf, 0x0e, 0xa0, 0xe5, 0x64, 0xd2, 0xeb, 0x43, 0x0a, 0x39, 0xe1, 0xd6, 0xe0, 0x11, - 0xdc, 0xaa, 0x4a, 0x6f, 0x09, 0x39, 0x85, 0xe2, 0x8b, 0xac, 0x6b, 0x5c, 0xbe, 0xc3, 0x2d, 0xff, - 0xd9, 0x26, 0xe7, 0x60, 0xe2, 0xff, 0x1c, 0xad, 0x30, 0x61, 0xc1, 0x70, 0x84, 0xf4, 0xfd, 0xb8, - 0x15, 0x53, 0x37, 0xb7, 0x34, 0xab, 0xf3, 0x07, 0x56, 0x0b, 0xe4, 0x5c, 0x54, 0xfc, 0x01, 0xb4, - 0xd8, 0x1d, 0x08, 0x04, 0x23, 0xd8, 0xda, 0x1d, 0x2e, 0x79, 0x02, 0x8b, 0x3a, 0x95, 0x73, 0x8a, - 0x3a, 0x92, 0x55, 0x1f, 0x84, 0x9d, 0x32, 0x55, 0xfa, 0x91, 0xc0, 0xa2, 0x11, 0x57, 0x03, 0x69, - 0x16, 0x88, 0x38, 0xdf, 0xb3, 0x95, 0xf8, 0xf7, 0xd1, 0xd2, 0x16, 0xf7, 0x7e, 0x6c, 0x39, 0x53, - 0x42, 0x46, 0x0f, 0xe4, 0xe6, 0x03, 0xc7, 0xa4, 0xcf, 0x2a, 0x12, 0xd7, 0xea, 0x13, 0x83, 0xc9, - 0xd8, 0x67, 0x96, 0xc3, 0x0c, 0x76, 0xd4, 0xab, 0x0f, 0x7a, 0xcd, 0xd4, 0x79, 0xf6, 0xfa, 0xbc, - 0x1f, 0x2d, 0x0d, 0x37, 0xfb, 0x5a, 0xc1, 0x9f, 0xc8, 0x15, 0xf0, 0x45, 0xf0, 0x05, 0x45, 0x21, - 0x64, 0x5a, 0xca, 0x2a, 0x12, 0xab, 0x48, 0x34, 0x93, 0x3b, 0x5f, 0xa6, 0xef, 0x1e, 0x26, 0x9e, - 0x70, 0x58, 0x45, 0xa4, 0xa7, 0x88, 0xa9, 0xe5, 0x42, 0xa1, 0x9c, 0x85, 0x80, 0xff, 0x84, 0x43, - 0x8f, 0xbb, 0xfd, 0xfe, 0xe0, 0xbe, 0x06, 0x03, 0x4e, 0x38, 0xe9, 0x3b, 0x7b, 0x95, 0xc0, 0x46, - 0xb7, 0xcf, 0xaf, 0x78, 0xf1, 0x8d, 0x41, 0x21, 0xdc, 0x6a, 0xce, 0x55, 0x4f, 0x7c, 0x9d, 0xdc, - 0x84, 0x99, 0x91, 0xdb, 0x58, 0x5f, 0x4c, 0x42, 0x1d, 0xce, 0xad, 0xc3, 0x28, 0xdd, 0x6c, 0xa1, - 0x3c, 0x17, 0x72, 0xfe, 0x63, 0x0e, 0xad, 0xb1, 0x97, 0xbb, 0x02, 0x0c, 0x8d, 0x0e, 0x4c, 0x23, - 0x71, 0x62, 0xb4, 0x8f, 0xcf, 0xeb, 0xec, 0x5d, 0xd2, 0xb7, 0x20, 0x6b, 0x8e, 0x6e, 0xbf, 0x4b, - 0x50, 0xd1, 0x9f, 0xa1, 0xa5, 0x76, 0xb1, 0xfb, 0xa1, 0x5a, 0xbf, 0x8e, 0x96, 0x67, 0xaf, 0xe4, - 0x87, 0x0a, 0x2f, 0xfa, 0x81, 0x2a, 0xbd, 0x87, 0x7e, 0x21, 0xd8, 0xec, 0x74, 0xa6, 0x0f, 0x3a, - 0x9c, 0x04, 0x15, 0x0e, 0xd0, 0x47, 0x48, 0xa2, 0x8a, 0x89, 0x49, 0xcb, 0xc3, 0x87, 0x8d, 0xe0, - 0x95, 0x1a, 0xee, 0xca, 0x44, 0x87, 0x53, 0xc7, 0xc7, 0x20, 0x29, 0x00, 0x6c, 0x95, 0xd2, 0xd1, - 0x05, 0x08, 0x59, 0x9c, 0x8f, 0xdf, 0x4b, 0x18, 0xd4, 0xf6, 0xb6, 0x08, 0x81, 0x9a, 0x26, 0x40, - 0x1c, 0xb0, 0x3d, 0xa7, 0x50, 0xfc, 0x91, 0xd3, 0x09, 0x9c, 0xce, 0x55, 0x5b, 0xe1, 0x94, 0x58, - 0x51, 0x9c, 0x65, 0x83, 0x72, 0x4e, 0x43, 0x5e, 0x21, 0x37, 0xcd, 0xae, 0x00, 0xed, 0x88, 0xc9, - 0xa9, 0x9f, 0x5d, 0x96, 0xd5, 0x0f, 0xcb, 0x98, 0x6c, 0xfd, 0x64, 0xb7, 0xe3, 0x83, 0xa8, 0xd8, - 0xec, 0xba, 0xc6, 0xf7, 0x11, 0xb5, 0x2a, 0xe2, 0xa7, 0x94, 0xf6, 0x12, 0xf1, 0x05, 0x96, 0x7a, - 0xa7, 0xd3, 0xca, 0x08, 0x4c, 0xf6, 0xe4, 0xe9, 0x09, 0xd3, 0xc9, 0x16, 0x07, 0xd2, 0x26, 0xc5, - 0xb2, 0x1d, 0x0b, 0xef, 0xc7, 0x9e, 0x06, 0x06, 0x0d, 0xd0, 0xdf, 0x7c, 0x2b, 0x52, 0xb3, 0xad, - 0x40, 0x7c, 0x81, 0xfd, 0x88, 0x07, 0xef, 0xce, 0x86, 0x84, 0x0f, 0x11, 0xc9, 0x89, 0x8e, 0x2c, - 0x93, 0xc0, 0xbf, 0x46, 0x95, 0xde, 0x10, 0xf2, 0x14, 0x8b, 0xe5, 0xe6, 0x58, 0x82, 0xed, 0x75, - 0xae, 0x79, 0xcb, 0xd3, 0x9c, 0x0f, 0xd2, 0x93, 0x84, 0xe9, 0x12, 0xec, 0x8d, 0x92, 0x2a, 0xbd, - 0x2e, 0xe4, 0x96, 0xe6, 0xe9, 0x71, 0xd6, 0x19, 0xcc, 0x6d, 0x5d, 0x3a, 0xc1, 0xa1, 0xc5, 0x8c, - 0x50, 0xc0, 0xcb, 0x68, 0xb9, 0x27, 0x18, 0x88, 0xb8, 0x7d, 0x01, 0x25, 0x24, 0x13, 0x59, 0x02, - 0x16, 0xe9, 0x8f, 0x55, 0xe9, 0x19, 0x21, 0xa7, 0x50, 0x5c, 0x06, 0xaf, 0x8b, 0xa9, 0x88, 0x20, - 0xe7, 0x54, 0xe1, 0xb7, 0xa0, 0xa5, 0x44, 0x54, 0xd8, 0xa5, 0x84, 0xc2, 0x56, 0x6e, 0xde, 0x67, - 0x55, 0xe9, 0x69, 0x21, 0xab, 0x48, 0x5c, 0x96, 0x25, 0x6c, 0xc8, 0x59, 0x15, 0x4a, 0xff, 0xd9, - 0x5a, 0xf4, 0x18, 0x64, 0x12, 0x61, 0xb7, 0xad, 0x99, 0xf7, 0x72, 0x0f, 0x6b, 0xe5, 0xe6, 0xcc, - 0xf5, 0x21, 0xb0, 0x56, 0xee, 0x27, 0x6d, 0x52, 0x94, 0x3d, 0xf2, 0xbb, 0xab, 0xf6, 0x9b, 0x9a, - 0x92, 0xd0, 0xea, 0xe5, 0x5c, 0x49, 0x74, 0x79, 0x6e, 0x32, 0x76, 0xc6, 0xc2, 0xfd, 0xb2, 0xcd, - 0x00, 0xff, 0x6c, 0x3e, 0x03, 0x3c, 0x7d, 0xaf, 0x8b, 0x93, 0xb5, 0x2e, 0xe7, 0x88, 0x1d, 0xde, - 0x94, 0xee, 0xe6, 0x3d, 0xac, 0x74, 0x77, 0x20, 0xcb, 0xa8, 0xfe, 0x42, 0x9e, 0xd4, 0x7a, 0xf9, - 0x47, 0xe5, 0x4f, 0x16, 0xf6, 0x3f, 0x59, 0xd8, 0x7f, 0x70, 0x16, 0xf6, 0xff, 0x87, 0xcb, 0x63, - 0x61, 0xff, 0x9f, 0x39, 0x55, 0xfa, 0x1f, 0x38, 0x9b, 0x85, 0xfd, 0x2f, 0x6d, 0x3a, 0xfa, 0x03, - 0x8b, 0xd2, 0x33, 0x89, 0xbe, 0xbf, 0x6f, 0x26, 0xf6, 0x3f, 0xd9, 0xad, 0xff, 0x64, 0xb7, 0xe6, - 0x4f, 0xe6, 0xb1, 0x5b, 0xbf, 0xfc, 0xe0, 0x9c, 0xfe, 0x3f, 0x5d, 0x23, 0xf6, 0xbf, 0x9a, 0xcb, - 0x88, 0x7d, 0x91, 0x53, 0xa5, 0x91, 0xfc, 0x46, 0xec, 0x6e, 0x3b, 0x7f, 0x60, 0xf4, 0xfc, 0x99, - 0x44, 0xdf, 0x5c, 0x56, 0x6c, 0xe3, 0x53, 0xfe, 0x8e, 0xcd, 0xd8, 0xb3, 0x59, 0x2c, 0x8b, 0xff, - 0x64, 0xb1, 0xcc, 0xb6, 0x58, 0x2e, 0xfd, 0xff, 0xb5, 0xc5, 0x72, 0xd9, 0x83, 0x5b, 0x2c, 0xdf, - 0xb1, 0x2c, 0x96, 0x60, 0xe7, 0x7c, 0x4d, 0x95, 0x9e, 0xb2, 0xde, 0x61, 0xac, 0x84, 0xbc, 0xa6, - 0xb7, 0xae, 0x68, 0x83, 0x77, 0xe8, 0x63, 0x0c, 0x10, 0x7a, 0x0b, 0x4a, 0xa2, 0x85, 0xb9, 0x42, - 0x2f, 0x35, 0x78, 0x7e, 0xc6, 0x59, 0xe6, 0x45, 0xfe, 0xfe, 0xe6, 0x45, 0x2c, 0xbd, 0x51, 0xf3, - 0xa2, 0xf2, 0xb0, 0xe6, 0xc5, 0x0a, 0x07, 0x44, 0x8e, 0x82, 0x00, 0x3f, 0xc6, 0x89, 0x0b, 0xfa, - 0x36, 0x6d, 0xa7, 0xf6, 0x99, 0xd5, 0x99, 0xac, 0x4b, 0xd4, 0x26, 0xf9, 0xa5, 0x65, 0x93, 0x7c, - 0xe4, 0xbe, 0x36, 0x49, 0x1c, 0x4a, 0xc5, 0xb4, 0x49, 0x86, 0x18, 0x6d, 0xd8, 0xf1, 0xdd, 0xed, - 0x93, 0x10, 0x7d, 0x05, 0x9c, 0x56, 0xb5, 0x9e, 0x33, 0x54, 0x0e, 0xb4, 0x29, 0x66, 0xa6, 0x0d, - 0xf3, 0x14, 0x87, 0x96, 0x37, 0x64, 0x1b, 0x31, 0x57, 0x92, 0x1c, 0x41, 0x4d, 0xc1, 0x60, 0x93, - 0x5f, 0x59, 0xd7, 0x1a, 0x0a, 0x46, 0x82, 0x8d, 0x6d, 0x7b, 0xd6, 0x35, 0x44, 0x42, 0xbe, 0x40, - 0x13, 0xf6, 0x69, 0x7a, 0x30, 0x13, 0xe7, 0x83, 0x5b, 0x19, 0x73, 0x88, 0xe0, 0x87, 0x39, 0xb4, - 0xa2, 0x21, 0xc7, 0xc6, 0xb9, 0xea, 0x01, 0x48, 0xfb, 0xde, 0x2d, 0xa0, 0x39, 0x64, 0xf0, 0x7e, - 0xbb, 0x05, 0x74, 0x75, 0xfe, 0x58, 0x17, 0x5b, 0xdd, 0xad, 0x0d, 0x91, 0x50, 0x9b, 0x27, 0x42, - 0xf2, 0x70, 0xb2, 0xd6, 0xce, 0x27, 0x49, 0x1f, 0xf8, 0x80, 0xce, 0xb6, 0x7c, 0x86, 0x6d, 0x46, - 0xcf, 0x3f, 0x9a, 0xb9, 0xcb, 0xcc, 0x86, 0x33, 0xbb, 0xf6, 0x2b, 0xf2, 0x64, 0x47, 0x33, 0x8a, - 0xe4, 0xd7, 0x9c, 0xa5, 0xb5, 0x7e, 0xcd, 0x61, 0x15, 0xf4, 0x6b, 0xce, 0xdc, 0xd3, 0xa5, 0xb7, - 0x0b, 0xd0, 0x9a, 0x7c, 0xe8, 0xc2, 0xad, 0xc1, 0x40, 0x58, 0xe1, 0xd7, 0xa1, 0xf9, 0x1e, 0xd3, - 0xb7, 0xb0, 0x98, 0x24, 0x56, 0x34, 0x00, 0x86, 0x96, 0x7e, 0x5c, 0x3b, 0x7b, 0x1e, 0x9c, 0x94, - 0x53, 0x17, 0x3b, 0x64, 0x0c, 0xe6, 0xab, 0xd1, 0xa2, 0x16, 0xe2, 0xd9, 0xcc, 0xe4, 0xff, 0x37, - 0x61, 0x22, 0xcf, 0xb6, 0x32, 0x6f, 0x11, 0x48, 0x21, 0xbf, 0x01, 0x2d, 0x0c, 0x29, 0xe1, 0x36, - 0x7f, 0x84, 0x84, 0xf0, 0xc5, 0x6f, 0xf6, 0x09, 0x48, 0x5c, 0x62, 0x66, 0x3b, 0xfe, 0x58, 0x3f, - 0x3f, 0x22, 0x13, 0x28, 0x7f, 0x00, 0x2d, 0xdb, 0xa7, 0x34, 0xee, 0x66, 0xe7, 0x7e, 0x7e, 0xfe, - 0xec, 0x84, 0xef, 0x28, 0x8d, 0x8c, 0xa5, 0x70, 0x97, 0x08, 0x39, 0xf3, 0xb2, 0x5b, 0x8b, 0x25, - 0xb0, 0x0c, 0xc0, 0x28, 0x00, 0x16, 0x01, 0xfd, 0xdc, 0xc1, 0xcc, 0x99, 0x21, 0x79, 0xe9, 0x3e, - 0x1b, 0x86, 0xd2, 0xaf, 0x1d, 0xe8, 0xb1, 0x9d, 0xf8, 0xca, 0x26, 0x9f, 0x15, 0xe2, 0xc5, 0x5c, - 0x2b, 0x04, 0xf6, 0x47, 0x64, 0xac, 0x10, 0x85, 0xa6, 0xc1, 0x81, 0xb5, 0x2a, 0xfc, 0x7f, 0xec, - 0xbd, 0x69, 0x74, 0x14, 0x57, 0xba, 0x20, 0x58, 0xa1, 0x0d, 0x71, 0xd9, 0x83, 0x4d, 0x06, 0x1b, - 0xa7, 0x55, 0x5e, 0xa4, 0x28, 0x89, 0x25, 0xec, 0xf2, 0x22, 0xaf, 0xa1, 0x05, 0x2c, 0x1b, 0x84, - 0x1c, 0x02, 0xca, 0x65, 0x97, 0xcb, 0x95, 0x28, 0x03, 0x9c, 0x46, 0xca, 0x54, 0x65, 0xa6, 0xb0, - 0x71, 0x2d, 0x2f, 0x59, 0x04, 0x12, 0x68, 0x23, 0xcc, 0x2a, 0x0b, 0x03, 0x36, 0x9b, 0x17, 0x21, - 0xf0, 0x02, 0x22, 0x25, 0x99, 0xe9, 0x33, 0xf3, 0x7a, 0x9d, 0xe9, 0xe9, 0xa6, 0xdf, 0xeb, 0xe9, - 0x37, 0xbd, 0x4c, 0xbf, 0x47, 0x46, 0x66, 0x6a, 0xce, 0x9b, 0xa6, 0xe7, 0xf4, 0xfc, 0xe8, 0xe1, - 0x4c, 0xcf, 0xcc, 0x89, 0xfb, 0xdd, 0xb8, 0x71, 0x63, 0xc9, 0x94, 0xc0, 0x2c, 0x12, 0xc6, 0xc7, - 0xe7, 0xa0, 0xbc, 0x5b, 0xdc, 0xe5, 0xbb, 0xdf, 0xfd, 0xf6, 0x6f, 0xbd, 0xc3, 0x46, 0x10, 0xb6, - 0x11, 0x07, 0xf1, 0xb6, 0xdb, 0x08, 0x3e, 0x66, 0xfd, 0x0d, 0x36, 0xe8, 0x26, 0xe9, 0x3f, 0x9a, - 0xe9, 0x60, 0x76, 0x7a, 0xd3, 0x41, 0x33, 0xd2, 0x98, 0x55, 0x64, 0x91, 0x73, 0xf3, 0x22, 0x8b, - 0x5c, 0x77, 0x91, 0x45, 0xda, 0x2d, 0xbc, 0x85, 0x22, 0x8b, 0xbc, 0x3b, 0x22, 0xb2, 0x98, 0x34, - 0x8e, 0x45, 0x16, 0xf9, 0xf7, 0x45, 0x16, 0x77, 0x44, 0x64, 0xd1, 0x61, 0x35, 0x0a, 0x84, 0x98, - 0xc9, 0x7f, 0x9f, 0xa5, 0x4a, 0xa9, 0x2c, 0x8b, 0xc8, 0xe2, 0x6f, 0xb2, 0x26, 0x96, 0x60, 0x62, - 0xa2, 0xda, 0xfe, 0xfd, 0x7b, 0x87, 0x0c, 0x05, 0xa5, 0x21, 0x58, 0xd6, 0x56, 0x07, 0x22, 0x4f, - 0x8a, 0x40, 0xb0, 0x4c, 0x54, 0x09, 0xcb, 0x94, 0xfb, 0x12, 0x96, 0x9b, 0x90, 0xb0, 0x4c, 0x75, - 0x97, 0xb0, 0xa4, 0x7f, 0x98, 0xee, 0x5d, 0x09, 0xcb, 0xf7, 0xee, 0x12, 0x16, 0x48, 0xee, 0x44, - 0x12, 0xaa, 0xb9, 0x49, 0x58, 0xde, 0x1f, 0xa7, 0x52, 0x94, 0xe9, 0xf7, 0xa5, 0x28, 0x76, 0x29, - 0xca, 0x8c, 0x9f, 0xb4, 0x14, 0x65, 0xe6, 0xd8, 0xa5, 0x28, 0xaf, 0xdb, 0xe3, 0x49, 0x2c, 0x53, - 0xa5, 0x39, 0x66, 0x3c, 0x89, 0xc9, 0x34, 0x92, 0xc4, 0xf5, 0xf2, 0xf9, 0xa1, 0xb9, 0x20, 0x3a, - 0x99, 0xce, 0x88, 0x4e, 0xb0, 0xe4, 0xc4, 0x30, 0x08, 0x63, 0x25, 0x27, 0xb3, 0x27, 0x90, 0xe4, - 0x64, 0xce, 0x04, 0x97, 0x9c, 0xcc, 0x1d, 0xbf, 0x92, 0x93, 0x79, 0xe3, 0x52, 0x72, 0x32, 0xff, - 0x1e, 0x95, 0x9c, 0x9c, 0xe0, 0x54, 0xe9, 0x18, 0x87, 0x8e, 0x70, 0x02, 0x61, 0xda, 0x21, 0x03, - 0x70, 0x3d, 0x8e, 0xe8, 0x64, 0x08, 0x4f, 0x7e, 0x0d, 0x77, 0x9a, 0x91, 0x8f, 0xa6, 0xfa, 0x2f, - 0x26, 0xce, 0x6f, 0xc3, 0x11, 0x9d, 0x89, 0x35, 0x94, 0xde, 0x64, 0xdf, 0x25, 0xa8, 0xa5, 0x50, - 0x3a, 0x72, 0xe8, 0x9b, 0x44, 0xdf, 0x67, 0x5a, 0xff, 0x25, 0xad, 0xef, 0xd0, 0xc8, 0xae, 0x2e, - 0x02, 0xd8, 0xb1, 0xd3, 0xc9, 0x7d, 0x47, 0xb5, 0xe1, 0xf3, 0xda, 0xc7, 0x1d, 0x56, 0x19, 0x8c, - 0x8d, 0x21, 0xbf, 0xc2, 0x19, 0x78, 0x02, 0x4b, 0x63, 0xdc, 0x08, 0x8f, 0xfb, 0xd2, 0x98, 0x51, - 0xa4, 0x31, 0x9f, 0x67, 0xa1, 0x07, 0x20, 0x32, 0x83, 0x9b, 0x34, 0x66, 0xb5, 0x53, 0x1a, 0xb3, - 0x4c, 0x95, 0x16, 0xb3, 0xd2, 0x98, 0x47, 0x58, 0x80, 0xb0, 0xd9, 0x84, 0x38, 0x23, 0x27, 0xdd, - 0x01, 0x31, 0x0d, 0x15, 0xf6, 0xa5, 0x5d, 0x96, 0xc8, 0x43, 0xe4, 0x29, 0x76, 0x9c, 0x8c, 0x80, - 0x86, 0xc1, 0xcb, 0x6d, 0xb8, 0xfb, 0xe0, 0x35, 0x0a, 0x78, 0xfd, 0x17, 0x0e, 0xcd, 0x5b, 0xa1, - 0x44, 0x6e, 0xa5, 0xa4, 0xef, 0xf5, 0x34, 0x20, 0x74, 0x33, 0xde, 0xc0, 0x65, 0x6b, 0x54, 0xe9, - 0x0d, 0xb4, 0x5a, 0x48, 0x33, 0x47, 0xb1, 0x20, 0x71, 0xf4, 0x64, 0xaa, 0xff, 0x33, 0x56, 0x56, - 0x97, 0xea, 0x3f, 0x95, 0xd8, 0xde, 0x92, 0x19, 0x5c, 0xfe, 0x3a, 0x1b, 0xcd, 0x77, 0x8c, 0x38, - 0x31, 0x60, 0x65, 0x35, 0xca, 0xd1, 0xf9, 0x3d, 0x02, 0x20, 0x0f, 0x66, 0xb2, 0x85, 0x26, 0x12, - 0x50, 0xbd, 0xb9, 0x55, 0x02, 0x0a, 0x5b, 0x24, 0xe3, 0x1a, 0x37, 0xe0, 0xcb, 0xbd, 0x33, 0xc0, - 0x57, 0xb6, 0x5a, 0x95, 0x56, 0xa2, 0xd7, 0x84, 0x74, 0x47, 0x21, 0x2e, 0x4a, 0x77, 0xba, 0xb0, - 0x33, 0x57, 0x38, 0x7c, 0x02, 0x57, 0x38, 0x63, 0x3f, 0x0b, 0xff, 0xa7, 0x2c, 0x34, 0x7f, 0xa5, - 0x3f, 0x3c, 0x7e, 0xc1, 0x19, 0xf2, 0xd2, 0xa0, 0x93, 0x9c, 0x90, 0x6e, 0x9e, 0xe2, 0x9f, 0xdd, - 0x16, 0x4d, 0x1e, 0x6b, 0x10, 0x79, 0x41, 0x30, 0xf5, 0x78, 0x6c, 0xa7, 0xbe, 0xb3, 0xc7, 0x76, - 0x41, 0x90, 0x60, 0x88, 0xe4, 0x01, 0x49, 0xa7, 0xa1, 0x9c, 0x08, 0x5e, 0xf1, 0x68, 0x66, 0xdf, - 0x96, 0x33, 0x94, 0xec, 0x8c, 0x0f, 0xc4, 0xa0, 0x56, 0x6b, 0xc1, 0x81, 0x69, 0x70, 0x7b, 0xf6, - 0xe2, 0x14, 0xfe, 0xeb, 0x2c, 0x54, 0xe0, 0x9c, 0xe7, 0x44, 0xbb, 0x28, 0xd9, 0x37, 0x7d, 0x51, - 0x20, 0x90, 0x3d, 0x5c, 0x94, 0xb2, 0xd7, 0x54, 0x69, 0x05, 0xaa, 0x12, 0xd2, 0x6e, 0x88, 0x2b, - 0x32, 0x4a, 0x03, 0xa8, 0x7f, 0x35, 0x13, 0x4d, 0xaa, 0x85, 0x6d, 0xe6, 0xdf, 0x76, 0x02, 0x26, - 0x64, 0x31, 0x30, 0x01, 0xb3, 0xd4, 0x00, 0xcc, 0x12, 0x23, 0x42, 0x7a, 0xec, 0x49, 0x31, 0x3e, - 0xdc, 0x41, 0x13, 0x61, 0x94, 0x58, 0xb2, 0x5f, 0x31, 0xd0, 0x5b, 0x63, 0x31, 0xe6, 0xc4, 0xaf, - 0x38, 0xa8, 0x44, 0x96, 0x18, 0xc1, 0x0e, 0xfa, 0x12, 0x07, 0x76, 0x81, 0x4a, 0x44, 0xa7, 0xf7, - 0x68, 0x00, 0xf6, 0xed, 0xc3, 0x10, 0x27, 0xe6, 0xe9, 0xa7, 0xe0, 0x23, 0x44, 0x5f, 0x12, 0x42, - 0x53, 0x94, 0xc0, 0xc6, 0x06, 0x7f, 0xf8, 0xbd, 0x1a, 0x53, 0xd3, 0x52, 0xab, 0x4a, 0xab, 0x04, - 0xb6, 0x5c, 0x7c, 0x09, 0x46, 0x4f, 0xed, 0x39, 0x9f, 0x38, 0xb0, 0x4b, 0xa7, 0xe9, 0x77, 0x1e, - 0xa6, 0xdf, 0xd0, 0xf6, 0xf5, 0x43, 0x74, 0x71, 0xe7, 0xc7, 0x9e, 0x14, 0xc9, 0xc7, 0xd8, 0xc1, - 0xd8, 0xf0, 0x8b, 0x39, 0x6e, 0xe1, 0x17, 0x49, 0x26, 0x17, 0x67, 0xf8, 0xc5, 0x17, 0x4d, 0x4e, - 0x37, 0xd7, 0xbc, 0xb3, 0x94, 0xd3, 0x9d, 0xcb, 0x12, 0x41, 0x2e, 0xf1, 0x13, 0x7f, 0x8d, 0xa6, - 0x90, 0x8d, 0xc4, 0x61, 0xb3, 0x21, 0xe8, 0x2f, 0x4e, 0x26, 0x90, 0x13, 0xd9, 0xd2, 0xa4, 0x88, - 0x25, 0xd0, 0x9f, 0x26, 0xf1, 0x85, 0x8c, 0xec, 0xcb, 0xca, 0x74, 0xa8, 0xd8, 0x10, 0x0c, 0x35, - 0x5e, 0x1b, 0x6a, 0x17, 0xcb, 0xd6, 0x37, 0x87, 0xfd, 0x01, 0x25, 0x1c, 0x96, 0xd9, 0xb1, 0xf8, - 0x0f, 0x71, 0xf0, 0xfc, 0xf2, 0xd7, 0x65, 0x25, 0x4c, 0xa2, 0xeb, 0xe2, 0x24, 0x02, 0xb4, 0x50, - 0x5c, 0x05, 0xd2, 0x57, 0x90, 0x1e, 0x40, 0x38, 0x0a, 0x88, 0xd3, 0x46, 0x03, 0xc4, 0x26, 0xce, - 0x1f, 0xc3, 0xe4, 0xbb, 0x69, 0xc3, 0x4f, 0x03, 0xc7, 0x42, 0xae, 0x10, 0x36, 0x8e, 0x2d, 0x1d, - 0x98, 0x5f, 0x8e, 0xa6, 0xf8, 0x94, 0x30, 0x66, 0x91, 0xfc, 0xc1, 0x00, 0xd1, 0x9f, 0x60, 0x73, - 0x65, 0xb6, 0x5c, 0xe4, 0xc9, 0xda, 0xce, 0xe2, 0x4c, 0x44, 0x58, 0xfd, 0x25, 0xb3, 0x0d, 0xf8, - 0x35, 0x68, 0xb2, 0x3f, 0xbc, 0x7a, 0xc3, 0x86, 0x06, 0x7f, 0x40, 0x21, 0xd1, 0x6e, 0x71, 0xd2, - 0x0b, 0xb3, 0x54, 0x7c, 0x9c, 0x20, 0x7f, 0x90, 0x23, 0x5f, 0xfc, 0x26, 0x39, 0xd8, 0x95, 0x3c, - 0x35, 0x98, 0x8c, 0x5d, 0xb6, 0x4d, 0xce, 0xec, 0xc2, 0xfb, 0x50, 0xce, 0x26, 0x7f, 0xc0, 0x47, - 0xf2, 0x1c, 0x62, 0xb8, 0xc2, 0x05, 0x62, 0x15, 0x05, 0x57, 0x22, 0x38, 0xb1, 0x6e, 0xfa, 0xa6, - 0x67, 0xc3, 0x4b, 0x1a, 0x95, 0x70, 0x30, 0x8c, 0x53, 0x09, 0x7c, 0x99, 0x38, 0x72, 0x32, 0xd5, - 0x7f, 0x92, 0x24, 0xc1, 0xeb, 0xea, 0x4f, 0x6d, 0x1f, 0x86, 0xb4, 0x79, 0x32, 0x1e, 0x8c, 0x5f, - 0x89, 0x90, 0x71, 0x2c, 0xd5, 0x95, 0x24, 0xdd, 0x3e, 0xa4, 0x28, 0x36, 0x8b, 0xc5, 0x85, 0xb0, - 0xeb, 0x15, 0xab, 0x2a, 0xcb, 0xe3, 0x03, 0x7d, 0x86, 0x21, 0xbd, 0x91, 0xca, 0xdc, 0x6c, 0xc8, - 0x47, 0x39, 0x84, 0x7c, 0x4a, 0x53, 0x43, 0x70, 0x0b, 0x06, 0x93, 0xa9, 0x66, 0x8c, 0x40, 0xa6, - 0x58, 0x5c, 0x0d, 0x23, 0x40, 0x20, 0x48, 0x73, 0xf6, 0x1d, 0xfb, 0x93, 0x7b, 0xbe, 0x86, 0x88, - 0x23, 0xc9, 0x4f, 0x7e, 0x88, 0x5f, 0x3e, 0x92, 0xdc, 0x7f, 0xf8, 0xda, 0x50, 0xfb, 0xb2, 0xb2, - 0x64, 0xdb, 0x17, 0xc9, 0xee, 0x9d, 0x89, 0xde, 0x18, 0xf4, 0xc0, 0xb0, 0x04, 0xf6, 0xe8, 0x50, - 0x20, 0x33, 0x83, 0xf3, 0xaf, 0xa0, 0x9c, 0xf5, 0x1b, 0xab, 0x2b, 0x89, 0x3c, 0x13, 0x2f, 0x05, - 0x17, 0x88, 0x8f, 0xc4, 0x63, 0x7b, 0xe2, 0x03, 0x3d, 0x46, 0x94, 0xd3, 0xc4, 0x91, 0x93, 0x89, - 0x58, 0xb7, 0x0e, 0x2a, 0x74, 0x6d, 0x32, 0x6e, 0xc8, 0xbf, 0x86, 0xf2, 0xd6, 0x6f, 0xc4, 0x57, - 0x1a, 0xc2, 0xaf, 0x8a, 0xaa, 0xb4, 0x44, 0x20, 0x45, 0xe2, 0x63, 0x74, 0x14, 0x7a, 0x89, 0xdd, - 0x46, 0x22, 0xcd, 0xf9, 0x0a, 0x94, 0xe7, 0x53, 0x9a, 0x22, 0x34, 0xf4, 0x2a, 0x28, 0x22, 0xa1, - 0x48, 0x5c, 0x34, 0xb2, 0xfd, 0xcc, 0xc8, 0xc1, 0x33, 0x69, 0xa7, 0x43, 0xda, 0xf1, 0xab, 0x50, - 0xbe, 0xfe, 0x17, 0x9e, 0xd2, 0x4c, 0x93, 0xb1, 0xa1, 0x85, 0x62, 0x21, 0x0c, 0x94, 0x71, 0x46, - 0xb4, 0x35, 0x5f, 0x8d, 0xf2, 0xeb, 0x95, 0x00, 0x04, 0x84, 0x9d, 0x65, 0x06, 0xf5, 0xa7, 0x85, - 0xe2, 0xa2, 0xf8, 0x40, 0x9f, 0x76, 0x79, 0x7b, 0xda, 0x79, 0xd1, 0x96, 0x7c, 0x1d, 0x42, 0xf0, - 0x77, 0x8d, 0x99, 0x7c, 0x02, 0x7b, 0x85, 0x31, 0xc5, 0x62, 0x21, 0x0c, 0x97, 0x71, 0x76, 0x4c, - 0x7b, 0xfe, 0x0d, 0x94, 0x8f, 0xf3, 0x7c, 0x84, 0x94, 0x08, 0x96, 0xa3, 0xe5, 0x43, 0x3e, 0x0b, - 0x5a, 0x28, 0x3e, 0x4e, 0x10, 0xc2, 0x40, 0x2c, 0x7e, 0xf9, 0x88, 0xd6, 0xbf, 0x93, 0xc6, 0xad, - 0xb1, 0x05, 0xd5, 0xa6, 0x3d, 0xf8, 0x2f, 0x39, 0x34, 0xa5, 0x3e, 0xa4, 0xf8, 0x94, 0x40, 0xc4, - 0xef, 0x6d, 0x08, 0x17, 0xcc, 0x71, 0x8f, 0x57, 0x43, 0x9e, 0xa1, 0xc5, 0x15, 0x66, 0x53, 0x10, - 0xff, 0xe3, 0x28, 0xc7, 0xec, 0x08, 0xe2, 0x4a, 0xe3, 0x12, 0xee, 0x49, 0xee, 0x3f, 0xac, 0xf5, - 0x1d, 0x4a, 0xf6, 0xec, 0x80, 0x04, 0x2e, 0x46, 0x00, 0xd6, 0x3d, 0x24, 0xc8, 0x58, 0xcf, 0x0e, - 0xb3, 0x1b, 0x95, 0x25, 0x80, 0x36, 0x40, 0x6f, 0x0d, 0xb9, 0x87, 0xd8, 0xa1, 0xf9, 0x32, 0x34, - 0x19, 0x63, 0x6d, 0xd3, 0xaf, 0xb4, 0xfc, 0x41, 0x55, 0x7a, 0x40, 0x30, 0x4b, 0xc5, 0xa9, 0x96, - 0x08, 0xb9, 0x66, 0x05, 0xff, 0xa2, 0xd3, 0xe9, 0x14, 0x9e, 0x08, 0x36, 0xce, 0xed, 0xd4, 0x74, - 0x11, 0x6e, 0x17, 0xbc, 0x85, 0x66, 0xda, 0xd7, 0xee, 0x22, 0x81, 0x59, 0xca, 0x4a, 0x60, 0x5c, - 0x24, 0x87, 0xe6, 0x10, 0xac, 0x74, 0xa6, 0x51, 0x95, 0xde, 0x47, 0xef, 0x09, 0xc6, 0x5b, 0x2f, - 0xbe, 0xc3, 0x3e, 0x39, 0x3a, 0x58, 0xec, 0xff, 0x2e, 0x3e, 0xfc, 0xb1, 0xd6, 0x7f, 0x69, 0x64, - 0xb8, 0xdb, 0xa7, 0x6c, 0x0e, 0x36, 0x11, 0x7d, 0xfc, 0xd5, 0xe8, 0x36, 0x70, 0x29, 0x04, 0xac, - 0x01, 0xa9, 0xb3, 0x40, 0xa5, 0x4b, 0x33, 0x99, 0x81, 0xa4, 0x18, 0x48, 0xeb, 0x91, 0x9e, 0x7d, - 0xc9, 0x53, 0x83, 0x85, 0xda, 0x0c, 0x94, 0xb3, 0xc6, 0x1b, 0xde, 0xc4, 0xbf, 0x81, 0xf2, 0x22, - 0xde, 0xf0, 0x26, 0x4a, 0x50, 0x3c, 0xa7, 0x4a, 0x4f, 0x0b, 0xa4, 0x48, 0x2c, 0x89, 0x0f, 0x0e, - 0x62, 0x64, 0x66, 0xc6, 0xe5, 0xbd, 0x3c, 0x9c, 0x88, 0xf5, 0xc7, 0x07, 0x3a, 0x93, 0xc7, 0xcf, - 0xea, 0xc0, 0x84, 0xeb, 0x41, 0x36, 0x2d, 0x93, 0x5e, 0xfc, 0x9f, 0x50, 0xbe, 0xfe, 0x17, 0xc6, - 0x71, 0x40, 0x4d, 0x78, 0x55, 0xe9, 0xb7, 0x02, 0x2d, 0x14, 0x65, 0xd2, 0xcd, 0xc0, 0x6d, 0xa0, - 0xa8, 0x01, 0x13, 0x1c, 0x12, 0xf8, 0x16, 0xc4, 0xe0, 0x38, 0x9e, 0xfa, 0x9a, 0xa0, 0x59, 0x66, - 0x72, 0xee, 0xe1, 0xe5, 0xa1, 0x60, 0x23, 0xa9, 0x48, 0xf6, 0xb5, 0xc9, 0x74, 0x74, 0xfe, 0x43, - 0x1a, 0xe0, 0x10, 0x68, 0x8e, 0xdf, 0x61, 0x0a, 0x90, 0x04, 0x38, 0x9c, 0xca, 0xce, 0xf8, 0x7a, - 0x79, 0x65, 0xa8, 0x5c, 0x9e, 0x5a, 0x5d, 0x53, 0xbd, 0xa6, 0x5a, 0x5a, 0x59, 0xfd, 0x56, 0x75, - 0xcd, 0x0a, 0x79, 0x92, 0xbc, 0xb6, 0xa6, 0x06, 0xff, 0x51, 0xb7, 0xb6, 0xa2, 0xa2, 0xaa, 0xae, - 0x4e, 0x9e, 0xb4, 0x5c, 0xaa, 0x5e, 0xb9, 0x56, 0xae, 0x92, 0x27, 0xad, 0xa9, 0x5e, 0x55, 0xb5, - 0x7a, 0xed, 0x1a, 0x79, 0xfa, 0xf2, 0xd5, 0x72, 0x45, 0xd5, 0x9a, 0x2a, 0x79, 0x55, 0x75, 0x8d, - 0xb4, 0xa6, 0x8a, 0x06, 0x36, 0xfc, 0xad, 0x49, 0xb7, 0x02, 0xf9, 0x81, 0xbd, 0x34, 0x29, 0xdd, - 0xfa, 0x34, 0x7c, 0x1b, 0x34, 0x3e, 0xe6, 0xc1, 0xee, 0x3e, 0x39, 0xb2, 0xef, 0x30, 0x18, 0x44, - 0x00, 0x49, 0x9b, 0xe8, 0xea, 0x4e, 0x9e, 0x88, 0xd1, 0xe3, 0x35, 0x69, 0xdb, 0xa7, 0x50, 0x6e, - 0x38, 0xe2, 0x0d, 0x59, 0x12, 0xce, 0x43, 0x89, 0xc8, 0xc3, 0xd8, 0x34, 0x67, 0x8f, 0x0e, 0xba, - 0x50, 0xc5, 0x2f, 0x46, 0xd9, 0x4a, 0xc0, 0x47, 0xdc, 0x49, 0xf0, 0x55, 0xd1, 0x7f, 0x1b, 0x3d, - 0x74, 0x5a, 0xf8, 0xc8, 0x51, 0xd2, 0x43, 0xaf, 0xe0, 0x57, 0xa2, 0x69, 0x0a, 0x0e, 0xe4, 0x65, - 0x04, 0x8f, 0x85, 0x14, 0xcf, 0xd8, 0xf5, 0xc9, 0x5a, 0x63, 0x8c, 0x01, 0x2b, 0x22, 0x63, 0x58, - 0x9b, 0xf0, 0x6b, 0xd1, 0x94, 0xfa, 0xe6, 0x50, 0x48, 0x09, 0x44, 0xea, 0x22, 0x4a, 0x13, 0xa1, - 0x22, 0x30, 0x12, 0x64, 0xcb, 0xc5, 0x47, 0xc8, 0x48, 0x7d, 0x9f, 0x6b, 0xbd, 0x67, 0x88, 0xeb, - 0x6a, 0xcf, 0x8e, 0x44, 0xdf, 0xc9, 0x91, 0x2f, 0xc9, 0x53, 0x22, 0xb3, 0xed, 0xf9, 0x6a, 0x34, - 0x35, 0x1c, 0x51, 0x9a, 0xea, 0x74, 0x56, 0x28, 0x50, 0xaf, 0xd3, 0x15, 0xd9, 0x46, 0x96, 0x14, - 0x4b, 0x85, 0x6d, 0x8a, 0x78, 0x3c, 0xd9, 0xd2, 0x82, 0xdf, 0xc6, 0xe9, 0xdb, 0xaa, 0x34, 0x19, - 0xe6, 0xf9, 0x0f, 0x3b, 0x8d, 0x64, 0xc2, 0x9b, 0x16, 0xeb, 0x5f, 0x25, 0xe8, 0xee, 0x75, 0x55, - 0x7a, 0x55, 0x80, 0x2e, 0xe2, 0xcb, 0x30, 0x7c, 0xaa, 0xff, 0x54, 0x72, 0x70, 0x27, 0x0c, 0xcf, - 0xa4, 0xc0, 0x33, 0x29, 0x2e, 0x28, 0x84, 0x4b, 0x83, 0xa3, 0x3f, 0x6f, 0xd3, 0x06, 0x06, 0x12, - 0x07, 0x2f, 0xc8, 0x30, 0x0e, 0xff, 0x0a, 0x1b, 0x87, 0x1c, 0xe8, 0x8c, 0x42, 0x55, 0x7a, 0x98, - 0x8d, 0x43, 0x4e, 0x57, 0x82, 0xb9, 0x65, 0x4c, 0xdb, 0xb0, 0xa1, 0xc7, 0x5f, 0x61, 0x99, 0x83, - 0xa9, 0xcc, 0x08, 0x26, 0x73, 0x60, 0x1d, 0xc1, 0x11, 0xb0, 0x8c, 0xa1, 0x9e, 0xa7, 0xb9, 0x06, - 0x2f, 0x07, 0x10, 0xc3, 0xb8, 0x35, 0x1e, 0x8b, 0x59, 0x82, 0x97, 0x37, 0x78, 0xc3, 0x11, 0x90, - 0xda, 0x12, 0xb2, 0x00, 0xc2, 0x87, 0x9b, 0xc5, 0x22, 0x1f, 0x1f, 0xd8, 0x9d, 0xf8, 0xfa, 0xb8, - 0x15, 0xb9, 0x9a, 0xf5, 0x6c, 0xf0, 0xf2, 0x19, 0xae, 0xc1, 0xcb, 0x61, 0xee, 0x10, 0x7e, 0x54, - 0xff, 0xba, 0x41, 0x7c, 0x37, 0xa2, 0xe9, 0x1b, 0x82, 0xa1, 0x7a, 0xc5, 0x08, 0xc9, 0x6c, 0x24, - 0xb8, 0xc2, 0xb1, 0xec, 0x6c, 0x55, 0xe2, 0x52, 0x72, 0x5e, 0x46, 0x76, 0x39, 0xc8, 0xf9, 0x97, - 0x1c, 0x6c, 0x4d, 0xf4, 0x7d, 0x46, 0x91, 0x1c, 0x78, 0x01, 0x27, 0x3a, 0x4f, 0x6b, 0xad, 0x17, - 0x64, 0xdb, 0x08, 0x7c, 0x07, 0x87, 0xa6, 0xd6, 0x07, 0x1b, 0x1b, 0x83, 0x81, 0x5a, 0x6f, 0xc8, - 0xdb, 0x18, 0x2e, 0x98, 0x85, 0xa1, 0xe6, 0x71, 0x57, 0xa8, 0xa9, 0x60, 0x1a, 0x02, 0xf0, 0x60, - 0x0f, 0x46, 0xcb, 0x00, 0xe2, 0x62, 0xad, 0xe5, 0x6b, 0xad, 0xe5, 0x3c, 0xd5, 0x6c, 0x43, 0xd8, - 0xf2, 0xd4, 0xc5, 0x33, 0x3a, 0xcc, 0x81, 0xc9, 0x88, 0x11, 0x60, 0xe4, 0xd8, 0x48, 0x54, 0x95, - 0x2d, 0xbd, 0xf9, 0x0a, 0xc0, 0xb6, 0x0c, 0x89, 0xf1, 0x84, 0x2a, 0x3d, 0x2a, 0xd0, 0x42, 0xb1, - 0x80, 0xc5, 0xb6, 0x2c, 0x17, 0x27, 0xd3, 0x36, 0x7c, 0x0d, 0x42, 0x81, 0xa0, 0x4f, 0xa9, 0xae, - 0xd5, 0x59, 0x56, 0x9c, 0xc9, 0x6a, 0x32, 0xc8, 0x6c, 0x98, 0x62, 0xf1, 0x21, 0xd0, 0x59, 0x91, - 0x83, 0xf8, 0xb8, 0x23, 0x3e, 0xdc, 0x9b, 0xec, 0xd9, 0x51, 0x5d, 0x4b, 0x78, 0x5f, 0xa6, 0x29, - 0xbf, 0x1e, 0x4d, 0xd1, 0x7f, 0x91, 0x34, 0x6c, 0x24, 0x1a, 0x3c, 0xce, 0x71, 0xc1, 0x96, 0x8b, - 0x8b, 0x53, 0x67, 0xcf, 0x69, 0xc3, 0xfb, 0xb1, 0x7f, 0xa8, 0x19, 0xad, 0x12, 0xc0, 0x0c, 0xe7, - 0xc5, 0x4f, 0xf6, 0xec, 0x60, 0xda, 0xcb, 0x6c, 0xe7, 0x05, 0x35, 0x08, 0x99, 0x97, 0xd2, 0xe5, - 0x1d, 0x16, 0xac, 0xef, 0xf0, 0x1c, 0xfb, 0x01, 0xe9, 0x9d, 0x59, 0xed, 0xca, 0xcb, 0x68, 0x96, - 0xe3, 0xb8, 0x6e, 0x48, 0xc1, 0xb2, 0x97, 0x53, 0xa5, 0x0e, 0x0e, 0xed, 0xe6, 0x04, 0xfc, 0xb4, - 0x8a, 0x5b, 0x39, 0xc2, 0x81, 0xe0, 0xf4, 0x21, 0x34, 0xca, 0x2f, 0xfc, 0x4c, 0x6d, 0x07, 0x93, - 0xa6, 0x68, 0xe2, 0xd0, 0x31, 0xed, 0xdc, 0x0e, 0x58, 0xb4, 0x0d, 0x75, 0xe8, 0x84, 0x9c, 0x11, - 0x7d, 0x10, 0xd8, 0x76, 0xad, 0xfd, 0x00, 0x20, 0x99, 0x6b, 0x43, 0xad, 0x89, 0xfd, 0xdf, 0x69, - 0xdd, 0xad, 0xf1, 0xd8, 0x5e, 0x6f, 0x93, 0x3f, 0x3e, 0x40, 0xc8, 0xc5, 0xc4, 0xb1, 0x5d, 0xda, - 0xae, 0x9d, 0xa9, 0xcb, 0xdd, 0xc9, 0xc1, 0xef, 0xae, 0x0d, 0xb5, 0x15, 0xfe, 0xed, 0x64, 0x94, - 0x83, 0x11, 0xe6, 0x2f, 0x08, 0x7b, 0x0f, 0xaf, 0xfc, 0x7c, 0x55, 0x9a, 0x43, 0xd8, 0xfb, 0xa9, - 0x16, 0x24, 0x0b, 0xbc, 0xfb, 0x6b, 0x28, 0x0f, 0x72, 0xa1, 0x90, 0xf7, 0x1b, 0x68, 0x7c, 0x28, - 0x12, 0x1f, 0x63, 0x83, 0x22, 0x82, 0xb5, 0x19, 0x7d, 0xc3, 0xd7, 0x6f, 0x0a, 0x07, 0x9b, 0xc2, - 0x4b, 0xbc, 0x4d, 0x7e, 0x99, 0x34, 0xe7, 0x9f, 0x41, 0x39, 0x0d, 0xfe, 0xc0, 0x26, 0x8b, 0xab, - 0xa7, 0x5e, 0x20, 0x16, 0x40, 0xfc, 0x1b, 0x68, 0x46, 0x58, 0xeb, 0xb6, 0x68, 0x72, 0xdf, 0x19, - 0x19, 0xd7, 0xf3, 0x8d, 0x28, 0xaf, 0x09, 0x6e, 0x18, 0x08, 0x66, 0x3c, 0x6e, 0x07, 0xb8, 0x98, - 0xbd, 0x5b, 0xf8, 0x59, 0x21, 0x9d, 0xc4, 0xc7, 0xc9, 0xba, 0x0c, 0x13, 0x13, 0x7a, 0xbd, 0x36, - 0x29, 0x5b, 0xae, 0x46, 0xb7, 0xe2, 0x63, 0xd3, 0xfa, 0x2f, 0xc9, 0xa4, 0x3d, 0xff, 0x0c, 0xca, - 0x0d, 0x29, 0x91, 0xd0, 0x16, 0x92, 0x80, 0x08, 0xa2, 0x74, 0xe2, 0x12, 0x71, 0x6e, 0xaa, 0xff, - 0x24, 0x8c, 0x46, 0xa2, 0x4f, 0x7f, 0x7d, 0x3c, 0xb1, 0xff, 0x9c, 0x0c, 0xb5, 0xfc, 0x62, 0xe3, - 0x55, 0xce, 0x63, 0x62, 0x6e, 0xc2, 0xab, 0x3c, 0xd5, 0xed, 0x3d, 0x2e, 0x82, 0xf7, 0x18, 0x6c, - 0x25, 0xe7, 0xa9, 0xd2, 0x6c, 0x78, 0x8f, 0xa7, 0x3a, 0x5f, 0xe2, 0xe5, 0xf6, 0x97, 0x38, 0x1f, - 0x4f, 0x0d, 0x4b, 0xc3, 0x6c, 0x2f, 0xf1, 0xd4, 0x4c, 0x6f, 0xb0, 0x6a, 0xc6, 0x7c, 0x06, 0x73, - 0xbc, 0x8f, 0x74, 0x8e, 0xc1, 0x20, 0x89, 0x8a, 0x60, 0x69, 0x40, 0x12, 0x61, 0xe1, 0xe0, 0x11, - 0xed, 0xf4, 0x1e, 0xca, 0x2c, 0xd4, 0xac, 0x5e, 0x53, 0xb7, 0x46, 0x92, 0xd7, 0x54, 0x55, 0x5e, - 0x2f, 0x2f, 0x0f, 0xbd, 0x22, 0x23, 0xb3, 0xe0, 0x47, 0x11, 0x4b, 0x6f, 0x9b, 0xc4, 0x12, 0x32, - 0x7d, 0xbb, 0x29, 0xb1, 0xf4, 0x24, 0xcc, 0xca, 0x46, 0x2c, 0xb1, 0x4f, 0x2a, 0x90, 0x49, 0x44, - 0x8f, 0x8e, 0x09, 0x27, 0x93, 0x52, 0xaa, 0xb6, 0xbc, 0x48, 0xf0, 0x9e, 0x16, 0xab, 0xd2, 0xe3, - 0x96, 0x17, 0x89, 0x20, 0xc6, 0x51, 0xde, 0xa5, 0xd7, 0x10, 0xd2, 0xd1, 0xe4, 0x2a, 0x25, 0xf2, - 0x5e, 0xd0, 0xc8, 0xa8, 0x89, 0x6d, 0x71, 0x99, 0x62, 0xf1, 0x01, 0xfd, 0x6f, 0x8a, 0xb2, 0xe2, - 0x83, 0x9f, 0x27, 0x8f, 0x6d, 0xd5, 0x76, 0x0d, 0xeb, 0x50, 0xc2, 0x34, 0xe3, 0x2b, 0x19, 0x5c, - 0x0d, 0x4f, 0x2c, 0x8e, 0x39, 0x62, 0xe2, 0x6a, 0xdb, 0x38, 0xee, 0xc8, 0x7a, 0x39, 0x9a, 0x1a, - 0xde, 0xe4, 0x6f, 0x5a, 0x6d, 0x44, 0xbc, 0x98, 0x8e, 0x9f, 0x3b, 0xfc, 0xd8, 0x5b, 0x2a, 0xc4, - 0x19, 0x34, 0xd2, 0x05, 0x09, 0x60, 0x61, 0xa9, 0x5e, 0xf0, 0x1c, 0x9a, 0x72, 0xb3, 0xa8, 0x6e, - 0x37, 0xa7, 0x4a, 0x3b, 0x39, 0xb4, 0x9d, 0x13, 0x30, 0x76, 0x11, 0xff, 0xc0, 0x52, 0x59, 0xfa, - 0x65, 0xdb, 0x7d, 0x26, 0x3e, 0xdc, 0x6b, 0xa0, 0x2a, 0xf2, 0xac, 0xc2, 0x55, 0xa4, 0xb9, 0x03, - 0xc0, 0x16, 0x43, 0x6f, 0x3c, 0xb4, 0x2d, 0xd1, 0x77, 0x12, 0xba, 0x50, 0x4c, 0x02, 0xd6, 0x6c, - 0x23, 0xbb, 0x3a, 0x12, 0x07, 0xce, 0x51, 0xc3, 0x29, 0x9d, 0x5c, 0x66, 0x82, 0x6f, 0x25, 0xfb, - 0xda, 0xae, 0x46, 0xb7, 0x15, 0x1e, 0xcf, 0x46, 0x93, 0xd6, 0x6c, 0x52, 0x2a, 0xfc, 0xbe, 0x10, - 0xff, 0x14, 0xca, 0x5e, 0x57, 0x5b, 0x41, 0xb0, 0x1c, 0xde, 0x12, 0xfd, 0xb7, 0x58, 0x90, 0x1c, - 0xde, 0x9b, 0x38, 0xfb, 0x3d, 0x55, 0x6a, 0xae, 0xab, 0xad, 0x20, 0xf2, 0x19, 0xbd, 0x5a, 0x47, - 0x8e, 0x15, 0xd5, 0x95, 0x32, 0xc1, 0x76, 0x80, 0x1c, 0xf5, 0x02, 0x71, 0x2a, 0x24, 0x27, 0x81, - 0xde, 0x32, 0x2e, 0xe3, 0xab, 0x50, 0x7e, 0x75, 0x6d, 0x4d, 0x73, 0xe3, 0x7a, 0x25, 0x44, 0x32, - 0xb5, 0x61, 0xc8, 0xa2, 0x85, 0xe2, 0x02, 0x68, 0x0e, 0xa9, 0xe2, 0xb5, 0xae, 0xfe, 0xe4, 0xbe, - 0x33, 0xd5, 0xb5, 0x5a, 0xef, 0x39, 0xed, 0x48, 0x54, 0xa6, 0xad, 0xf8, 0x67, 0xe8, 0x9d, 0xcc, - 0x31, 0xe3, 0x9f, 0x1b, 0x77, 0x92, 0x27, 0x43, 0x60, 0xe0, 0x36, 0xd8, 0x2b, 0x72, 0x71, 0xca, - 0xd0, 0x24, 0x82, 0x08, 0x09, 0x1f, 0x00, 0xd2, 0x71, 0x52, 0x66, 0x76, 0x55, 0x4d, 0x32, 0xd1, - 0xa8, 0xb4, 0x45, 0x65, 0xca, 0x1b, 0x25, 0x2a, 0xd3, 0x24, 0x7b, 0x54, 0xa6, 0xb2, 0x67, 0x54, - 0xe9, 0x29, 0x24, 0x0a, 0xc6, 0x76, 0x8b, 0x4f, 0xc0, 0xc9, 0xc2, 0x93, 0xb6, 0xe6, 0xf5, 0x2a, - 0xf2, 0xe0, 0xc1, 0x0c, 0x5a, 0x55, 0xad, 0x75, 0x27, 0x6c, 0x73, 0xe1, 0x7e, 0x0e, 0x4d, 0x25, - 0x9d, 0x20, 0x1b, 0xd4, 0x1c, 0x94, 0x8b, 0xf5, 0xcc, 0xa0, 0x14, 0x90, 0xe1, 0x87, 0x0e, 0x83, - 0xfa, 0xf1, 0x01, 0xbc, 0xe1, 0xa3, 0x59, 0x60, 0xdf, 0x6d, 0x66, 0x0b, 0xe7, 0x59, 0xb7, 0xd0, - 0xd8, 0xa1, 0x32, 0xfd, 0x3c, 0xd0, 0xa3, 0x82, 0xe5, 0x83, 0xe2, 0x9c, 0x35, 0xaf, 0x57, 0x79, - 0xf4, 0x03, 0x84, 0xc9, 0x92, 0x79, 0xfd, 0x9f, 0xcb, 0x30, 0x4f, 0x6f, 0x32, 0x9e, 0xb2, 0xf2, - 0x7b, 0x7e, 0x2f, 0xc7, 0x52, 0xe3, 0x9c, 0x69, 0xd4, 0xce, 0x50, 0xe3, 0xf5, 0x4c, 0x4a, 0x20, - 0x80, 0xd8, 0xf2, 0x8a, 0xba, 0xd2, 0xd7, 0x9f, 0xad, 0x2b, 0x5d, 0x8a, 0xff, 0x2b, 0xd2, 0x76, - 0x1e, 0xd6, 0x5a, 0x48, 0x64, 0xb8, 0xc4, 0xc1, 0x0b, 0x86, 0xc1, 0xf7, 0x2e, 0xed, 0x6c, 0x0f, - 0x1d, 0x05, 0x42, 0x62, 0x9b, 0xd2, 0x8a, 0xde, 0xa8, 0x76, 0xe9, 0x5b, 0xad, 0xeb, 0x1c, 0x48, - 0xe7, 0x8b, 0x59, 0xf2, 0xfe, 0x35, 0x34, 0x85, 0xfc, 0x60, 0x52, 0x3a, 0x16, 0xe9, 0x1c, 0x20, - 0x5b, 0x2e, 0x4e, 0x85, 0x69, 0x19, 0x31, 0x17, 0x26, 0x85, 0x72, 0x67, 0x72, 0x05, 0xd1, 0x7c, - 0x99, 0x6d, 0xc4, 0x87, 0x99, 0x44, 0x3d, 0xd9, 0x46, 0x42, 0xd6, 0x55, 0x4c, 0x9a, 0x1e, 0x89, - 0x44, 0x06, 0xc1, 0x72, 0xe4, 0x54, 0xb4, 0x45, 0x5f, 0x63, 0x6c, 0x2f, 0x93, 0xf5, 0x1d, 0x4c, - 0x3a, 0xe0, 0x72, 0xc4, 0x63, 0x7b, 0x53, 0x67, 0x7f, 0x48, 0x1c, 0x18, 0x86, 0x8d, 0x05, 0xe2, - 0x19, 0x87, 0x7b, 0x28, 0xf0, 0x30, 0xf9, 0x73, 0xde, 0x40, 0x79, 0x21, 0x65, 0xa3, 0x3f, 0x18, - 0x20, 0xf0, 0xfe, 0x1c, 0x86, 0x77, 0x28, 0x12, 0x79, 0x33, 0x14, 0x49, 0xef, 0x19, 0xfd, 0xaa, - 0x1c, 0x3d, 0x0a, 0x36, 0x65, 0x5c, 0x81, 0xcf, 0xe9, 0x8d, 0x47, 0x7a, 0xf1, 0x32, 0xca, 0xdd, - 0xdc, 0x54, 0x5f, 0x5d, 0x49, 0xee, 0xc1, 0x0b, 0xfa, 0xab, 0x06, 0x25, 0x62, 0x31, 0x81, 0xc4, - 0xd3, 0x5b, 0x13, 0xbd, 0x6d, 0xc9, 0xe1, 0xbd, 0xc9, 0xc1, 0x5e, 0xbf, 0x0f, 0x96, 0x11, 0x1f, - 0xd8, 0x4d, 0x36, 0x09, 0x6b, 0xc7, 0x8c, 0x99, 0x42, 0x47, 0x6b, 0x82, 0xa9, 0x3c, 0x23, 0xc1, - 0x94, 0xbb, 0xf2, 0xef, 0x7a, 0xf9, 0xdc, 0xd0, 0x6c, 0xb7, 0x09, 0x32, 0x4c, 0xd5, 0x5a, 0x8b, - 0x04, 0x79, 0x92, 0x91, 0x80, 0x76, 0x81, 0x45, 0x82, 0x3c, 0x15, 0x64, 0xc7, 0x20, 0x38, 0x4e, - 0x3b, 0x2a, 0x2b, 0x4a, 0x0e, 0xa3, 0x29, 0x4a, 0x60, 0xb3, 0x3f, 0x14, 0x0c, 0x34, 0x2a, 0x01, - 0xc3, 0xb9, 0xe1, 0x0d, 0x55, 0x7a, 0x5a, 0x60, 0xcb, 0xc5, 0x27, 0xc8, 0x36, 0x60, 0xa9, 0x5b, - 0x89, 0x07, 0x00, 0xf5, 0xed, 0xa6, 0x50, 0xd0, 0x57, 0xe2, 0xf1, 0x29, 0xeb, 0x9b, 0x37, 0x96, - 0x78, 0xc2, 0x11, 0xef, 0xc6, 0x77, 0xf0, 0x37, 0xe5, 0x1c, 0xfd, 0x6f, 0x39, 0x17, 0x57, 0xc8, - 0x39, 0x7a, 0x2b, 0x99, 0x1d, 0x8d, 0x7f, 0x0b, 0x21, 0x25, 0xb0, 0xd1, 0x1f, 0x80, 0xe4, 0xa0, - 0x93, 0x0d, 0x45, 0xd1, 0xe3, 0x02, 0x53, 0x2c, 0x16, 0x68, 0x43, 0xfb, 0x13, 0x1f, 0x77, 0x52, - 0xe1, 0x0e, 0x10, 0x12, 0x9b, 0x9e, 0x0d, 0x5f, 0x2f, 0x9f, 0x1e, 0x9a, 0x2a, 0x67, 0x6f, 0x7a, - 0x36, 0x2c, 0xe7, 0x62, 0x09, 0xbc, 0xcc, 0x74, 0xe3, 0x57, 0xa3, 0x29, 0xfe, 0x70, 0xd5, 0x87, - 0x3a, 0x98, 0xfa, 0x37, 0x03, 0x49, 0x90, 0x0f, 0x92, 0x57, 0xb6, 0x5c, 0x5c, 0x68, 0x0a, 0x37, - 0xf1, 0x76, 0x25, 0xf7, 0x7c, 0xad, 0x75, 0x1c, 0x23, 0x68, 0x8e, 0x6d, 0xc9, 0xff, 0x25, 0x47, - 0x6f, 0x0c, 0x9e, 0x2e, 0x10, 0x01, 0x9f, 0x71, 0xaa, 0xd4, 0xc2, 0x09, 0x6c, 0x8d, 0xb8, 0x99, - 0x55, 0x14, 0xd0, 0x4d, 0xda, 0xa0, 0xf8, 0x14, 0x48, 0xd7, 0x5b, 0xe2, 0x09, 0xfb, 0x03, 0x1b, - 0x1b, 0x94, 0x77, 0x4a, 0x3c, 0x66, 0xa1, 0x61, 0xbb, 0x1e, 0x4b, 0x6d, 0xdd, 0x37, 0xb2, 0xed, - 0x14, 0x0c, 0x71, 0x6d, 0xa8, 0x1d, 0x9a, 0x42, 0x6d, 0x72, 0xcf, 0xd7, 0xc9, 0xaf, 0xf6, 0xd0, - 0x2a, 0x4a, 0x52, 0x41, 0x9b, 0xeb, 0xe5, 0xf3, 0x42, 0x73, 0x64, 0x64, 0x0e, 0x29, 0xe7, 0x41, - 0x85, 0xcc, 0xce, 0x8e, 0x3f, 0xc8, 0xa1, 0xd9, 0x66, 0x9b, 0x0a, 0x8a, 0x96, 0x80, 0x12, 0xc1, - 0xb9, 0x6a, 0xdc, 0xea, 0xc5, 0xd7, 0x89, 0xd7, 0x83, 0x91, 0x58, 0xca, 0x36, 0x55, 0x4c, 0x5e, - 0x44, 0xc1, 0x3e, 0x15, 0x5e, 0xe8, 0x54, 0xff, 0xc9, 0xea, 0x4a, 0x60, 0xc8, 0xa0, 0xe1, 0xab, - 0xc1, 0x70, 0x84, 0xbc, 0x92, 0x6e, 0x5f, 0xe0, 0x3f, 0xe3, 0xa8, 0x67, 0xd3, 0x34, 0x4c, 0xa1, - 0x97, 0xb8, 0xbb, 0xe8, 0x9b, 0x98, 0xd5, 0xe2, 0xd0, 0xf4, 0x1b, 0x55, 0x7a, 0x83, 0x3a, 0x34, - 0xad, 0xa0, 0xb3, 0x82, 0x02, 0x93, 0x17, 0xef, 0x8e, 0x69, 0x03, 0xa7, 0xc0, 0xd0, 0x96, 0x35, - 0xae, 0x85, 0xc0, 0x69, 0xf1, 0x81, 0x0e, 0xed, 0x87, 0x83, 0xa0, 0x12, 0x14, 0x97, 0xc6, 0x07, - 0xbe, 0xbc, 0x5e, 0x9e, 0xdb, 0xc3, 0x65, 0xcd, 0x9c, 0x43, 0x5d, 0xa0, 0xca, 0x4c, 0xa1, 0xc6, - 0x74, 0xe3, 0xb5, 0x9c, 0x63, 0x0a, 0x35, 0x26, 0x53, 0x71, 0xc6, 0xf5, 0xf2, 0xbc, 0x50, 0xce, - 0xcc, 0xac, 0x82, 0x39, 0xa6, 0x5c, 0x63, 0x2b, 0x87, 0xa6, 0x07, 0x03, 0x0d, 0x5b, 0x60, 0x19, - 0x38, 0x85, 0x38, 0xe4, 0xf1, 0xfe, 0xb5, 0x2a, 0xad, 0x13, 0x6c, 0x55, 0x62, 0x65, 0x7c, 0xb0, - 0x05, 0x46, 0x23, 0x1b, 0x6e, 0x12, 0xad, 0x1d, 0x20, 0x81, 0x4d, 0xf6, 0x1e, 0xd5, 0xce, 0x92, - 0x37, 0x19, 0x5a, 0x3a, 0xa5, 0xf2, 0xb6, 0x51, 0xf9, 0x6b, 0x1c, 0x9a, 0xbc, 0xbe, 0x3e, 0x4c, - 0x4c, 0x97, 0x41, 0xd6, 0xb0, 0x64, 0xd4, 0x7d, 0x2e, 0x37, 0x7a, 0xc0, 0x56, 0x1f, 0xe5, 0x54, - 0xe9, 0x13, 0x4e, 0x30, 0x07, 0x12, 0x3b, 0x38, 0x76, 0xaa, 0x77, 0x20, 0xc6, 0x29, 0x6b, 0x90, - 0x40, 0xf4, 0xfd, 0xf0, 0x22, 0x62, 0xf1, 0xa7, 0x6c, 0x4e, 0x8d, 0x4f, 0x70, 0x68, 0x8a, 0xc2, - 0x98, 0x6b, 0xf3, 0xee, 0x79, 0xb5, 0x1d, 0x6b, 0x66, 0xcc, 0x9d, 0x61, 0xd5, 0xdd, 0x9c, 0x2a, - 0xb5, 0x73, 0x02, 0x3b, 0x98, 0xf8, 0x27, 0xdb, 0xb2, 0x6f, 0x8f, 0x05, 0x37, 0x5d, 0xec, 0xc8, - 0xbe, 0xc3, 0x96, 0x65, 0xb2, 0x73, 0xe1, 0x2b, 0x74, 0x42, 0x2e, 0xd8, 0xec, 0xab, 0xae, 0x24, - 0x29, 0xf7, 0x30, 0x1d, 0x69, 0x94, 0x89, 0x0b, 0xed, 0x61, 0xd6, 0xe2, 0x03, 0xbb, 0x41, 0x71, - 0x5b, 0x5d, 0x29, 0x1b, 0xad, 0xf8, 0x1f, 0x38, 0x84, 0x60, 0x4b, 0x30, 0x96, 0x03, 0x49, 0xcb, - 0x11, 0x4e, 0x95, 0x0e, 0x73, 0x02, 0x53, 0x21, 0xee, 0xb6, 0x08, 0x23, 0x4c, 0xb5, 0x62, 0xcb, - 0xd7, 0x89, 0xde, 0x36, 0xfd, 0x71, 0x3f, 0x78, 0x01, 0xbc, 0x0b, 0xae, 0x0d, 0xb5, 0xaf, 0x92, - 0x6a, 0xa4, 0x15, 0x55, 0x95, 0xef, 0x56, 0xac, 0x5c, 0x5b, 0xb7, 0xa6, 0x4a, 0x2e, 0x82, 0xb3, - 0x4e, 0xb4, 0x1d, 0x4a, 0x9e, 0x3d, 0x0e, 0xa3, 0x14, 0x53, 0xc0, 0x4d, 0x1c, 0xea, 0xf7, 0x54, - 0xd7, 0x54, 0x56, 0xd5, 0x56, 0xd5, 0x54, 0x56, 0xd5, 0xac, 0xa1, 0x7d, 0x6c, 0xb8, 0x2f, 0xb5, - 0xeb, 0x4b, 0xfd, 0x02, 0x0c, 0x7e, 0x97, 0xd8, 0x7d, 0xa2, 0x58, 0x66, 0x26, 0xc6, 0x97, 0xa1, - 0xbc, 0x46, 0x2f, 0xa6, 0x66, 0xe7, 0x62, 0xb1, 0x13, 0x26, 0xda, 0x49, 0x91, 0x38, 0x17, 0x06, - 0x80, 0x5f, 0x1e, 0x2a, 0x6a, 0x22, 0xd5, 0xfc, 0x2f, 0x51, 0x6e, 0x20, 0xe8, 0x53, 0xc2, 0x05, - 0xf3, 0x70, 0x57, 0x4c, 0x42, 0x43, 0x89, 0x38, 0x1b, 0x7a, 0xea, 0x3f, 0xcc, 0x7e, 0x50, 0xc7, - 0x1f, 0xe2, 0xd0, 0x8c, 0x80, 0x12, 0xf9, 0x20, 0x18, 0xda, 0x54, 0xa7, 0x44, 0x22, 0xfe, 0xc0, - 0x46, 0xc3, 0xea, 0x77, 0x91, 0xc3, 0xf8, 0xc3, 0xd2, 0xac, 0xbc, 0x46, 0x95, 0x2a, 0x04, 0x7b, - 0x5f, 0x71, 0x29, 0x25, 0x7b, 0x93, 0x83, 0xbd, 0xda, 0xd1, 0x58, 0xf2, 0x78, 0x14, 0x04, 0x8c, - 0xd4, 0x57, 0x0d, 0xac, 0xf4, 0x13, 0x07, 0x2e, 0x41, 0xf9, 0xf5, 0xf2, 0xdc, 0xcf, 0xb8, 0xac, - 0x7c, 0x4e, 0xb6, 0x0f, 0xc5, 0xff, 0x2b, 0x0e, 0xcd, 0x21, 0x53, 0x28, 0xf7, 0x86, 0xfd, 0xf5, - 0x74, 0x7e, 0x10, 0xcb, 0xf4, 0xe7, 0x4e, 0xc7, 0x26, 0x47, 0x5b, 0x9d, 0xbb, 0x0f, 0x0a, 0xae, - 0xa3, 0x88, 0xbf, 0x22, 0xc8, 0x07, 0xcf, 0x91, 0x5c, 0x58, 0x63, 0xa6, 0xf0, 0xee, 0x11, 0xbd, - 0x1c, 0xb6, 0x8d, 0x67, 0xb3, 0x5d, 0x6e, 0x6e, 0xaa, 0x4f, 0xf6, 0xb5, 0xe9, 0x27, 0x69, 0x2c, - 0x85, 0xac, 0xcc, 0xba, 0x20, 0xd7, 0xcf, 0xf2, 0x7f, 0xc7, 0xa1, 0x79, 0xa4, 0x42, 0xf2, 0x6d, - 0xf6, 0x06, 0xea, 0x15, 0xba, 0x2e, 0x08, 0x96, 0xfa, 0x58, 0x9a, 0x75, 0x59, 0x5b, 0x97, 0x6f, - 0xe3, 0x54, 0xe9, 0x2f, 0x84, 0xf9, 0x7a, 0x5b, 0xc5, 0x39, 0x96, 0xe8, 0x33, 0x8c, 0xfc, 0x3f, - 0x19, 0x39, 0x74, 0x81, 0x8d, 0x42, 0x48, 0x57, 0xa7, 0x75, 0xeb, 0xdc, 0x98, 0xbf, 0x69, 0x73, - 0x18, 0xaa, 0xf5, 0x15, 0x5a, 0x43, 0xb7, 0x41, 0x07, 0xe0, 0x2c, 0x5d, 0xcf, 0x4e, 0x4e, 0xb3, - 0x12, 0xfe, 0xaf, 0x38, 0x34, 0x55, 0x87, 0x2f, 0xba, 0xb4, 0x05, 0xee, 0x5e, 0x0e, 0x35, 0x66, - 0x9b, 0x72, 0x95, 0x53, 0xa5, 0x4e, 0x4e, 0xb0, 0xf4, 0x13, 0xff, 0xcc, 0x46, 0x55, 0xb4, 0x2d, - 0x80, 0xb8, 0xa6, 0x1a, 0xde, 0xb1, 0xc4, 0x83, 0x96, 0x71, 0x99, 0x85, 0x43, 0xd2, 0x5b, 0x1e, - 0x3c, 0x96, 0x6c, 0xbb, 0xa4, 0xb5, 0x7e, 0x35, 0xd2, 0x1b, 0x25, 0x36, 0x61, 0x58, 0x37, 0xa8, - 0xbf, 0x46, 0xc6, 0x98, 0xe5, 0x15, 0x75, 0x40, 0xe3, 0x13, 0x67, 0x13, 0x2c, 0x22, 0x93, 0x2d, - 0xb3, 0xe1, 0xb7, 0x71, 0x68, 0x06, 0xc8, 0xe8, 0x64, 0xc5, 0x1f, 0x08, 0x47, 0xbc, 0x0d, 0x0d, - 0x38, 0xac, 0x6b, 0x7e, 0xf9, 0x9b, 0xaa, 0xb4, 0x56, 0xb0, 0xd7, 0x89, 0xe5, 0x40, 0xa1, 0x8d, - 0xec, 0xea, 0x48, 0x7d, 0xde, 0x02, 0xf7, 0xd4, 0xcc, 0xbc, 0x6b, 0x48, 0x0b, 0x81, 0xbb, 0x4f, - 0x7d, 0xf6, 0x15, 0x20, 0x95, 0xc4, 0xf6, 0x16, 0x6d, 0xe7, 0xf7, 0xf1, 0x81, 0x3d, 0x89, 0xde, - 0xb6, 0xc4, 0xfe, 0x56, 0xd9, 0x3e, 0x28, 0x7f, 0x98, 0x43, 0xb3, 0xfc, 0x01, 0x7f, 0x64, 0x65, - 0x70, 0xa3, 0x3f, 0x50, 0xeb, 0x0d, 0x87, 0x3f, 0x08, 0x86, 0x7c, 0x38, 0x17, 0xde, 0xe4, 0xf2, - 0x4d, 0xaa, 0xf4, 0x9e, 0xe0, 0xac, 0x15, 0xeb, 0x32, 0x4c, 0x01, 0xd2, 0x3d, 0x52, 0xb9, 0x42, - 0x13, 0xe9, 0x33, 0xfa, 0xcc, 0x9c, 0xdf, 0xe1, 0xdf, 0x44, 0x53, 0xc8, 0x2d, 0xc6, 0x18, 0xf8, - 0x21, 0x3c, 0x29, 0x6c, 0xe1, 0xc2, 0x96, 0x8b, 0x8f, 0xb2, 0x48, 0x82, 0xe4, 0xce, 0x6f, 0x0e, - 0xf8, 0x94, 0x50, 0x83, 0x77, 0xcb, 0x92, 0xe0, 0x66, 0xfc, 0x6f, 0xb1, 0xcc, 0x76, 0xe1, 0xff, - 0x21, 0x87, 0xe6, 0x7b, 0x9b, 0x23, 0xc1, 0x15, 0x4a, 0x40, 0x27, 0xbe, 0x94, 0x55, 0x78, 0x29, - 0x58, 0xfb, 0x49, 0xc2, 0xc0, 0xee, 0xe1, 0x54, 0x69, 0x17, 0x27, 0xa4, 0x6b, 0x25, 0x36, 0xb0, - 0xcf, 0xdd, 0x2a, 0x66, 0x27, 0xc0, 0xca, 0xc0, 0xf0, 0x6f, 0xc6, 0xa4, 0x07, 0xa1, 0x68, 0xf1, - 0xfd, 0x67, 0x9d, 0xce, 0x9e, 0xf7, 0xc4, 0x07, 0x62, 0x91, 0x50, 0xb3, 0x92, 0x38, 0x78, 0xa1, - 0xc4, 0x03, 0x77, 0x02, 0x18, 0x54, 0x82, 0x96, 0xf1, 0x21, 0x05, 0xea, 0x15, 0x39, 0xdd, 0x34, - 0xf8, 0xff, 0xcc, 0xa1, 0xc9, 0x46, 0xab, 0x70, 0xc1, 0xc3, 0xee, 0x0a, 0x93, 0x6a, 0xd2, 0xc0, - 0xb0, 0x96, 0xab, 0xc0, 0x7e, 0xae, 0x46, 0xee, 0x74, 0xb3, 0xbf, 0x78, 0xd0, 0x4e, 0xbb, 0x78, - 0xd2, 0x7c, 0xd7, 0x98, 0x78, 0x89, 0x07, 0x4e, 0x9d, 0x35, 0x7d, 0x63, 0xc1, 0xc2, 0x58, 0x15, - 0x70, 0xe7, 0xf4, 0x43, 0xd0, 0x30, 0xd9, 0xb3, 0xc3, 0x92, 0x05, 0x0c, 0xb2, 0x45, 0x41, 0x7a, - 0x58, 0x10, 0xee, 0x68, 0xed, 0x31, 0x70, 0x98, 0x97, 0xcd, 0x49, 0xf2, 0xdf, 0x71, 0xc4, 0xc1, - 0x12, 0x93, 0x8d, 0x9e, 0x31, 0xd2, 0x6d, 0x55, 0x46, 0x0f, 0xa0, 0x60, 0x30, 0x75, 0x6f, 0x0e, - 0x23, 0xae, 0x85, 0x4c, 0xe9, 0x66, 0x2e, 0xfe, 0xf3, 0xfb, 0x0d, 0x77, 0x27, 0x40, 0x0f, 0x4a, - 0x78, 0xfd, 0xbb, 0xcd, 0xa1, 0x86, 0x25, 0x24, 0xa7, 0xd4, 0xbb, 0xfe, 0x46, 0xef, 0x46, 0x65, - 0x49, 0x53, 0xc8, 0xbf, 0xd9, 0xdf, 0xa0, 0xf8, 0x36, 0x2a, 0x50, 0x90, 0xec, 0x6b, 0x63, 0x3b, - 0xcb, 0xe6, 0x17, 0xf8, 0xdf, 0xa1, 0xfc, 0x46, 0x23, 0x5c, 0xea, 0x23, 0xa6, 0x0e, 0x9b, 0x16, - 0x8a, 0xbf, 0x24, 0x1f, 0x27, 0x3e, 0x4e, 0x45, 0x15, 0x12, 0xb8, 0x29, 0x52, 0x9f, 0x38, 0xe2, - 0xb2, 0x89, 0xfd, 0x93, 0x8a, 0x8b, 0xc0, 0x9a, 0xaa, 0x58, 0xa6, 0x03, 0xf0, 0x7f, 0x46, 0xd3, - 0xf1, 0xe7, 0x4c, 0x4e, 0xa6, 0x10, 0x7f, 0x67, 0x9d, 0x2a, 0xd5, 0x09, 0xb6, 0x2a, 0x51, 0xd2, - 0xfa, 0x87, 0xb4, 0x96, 0x93, 0x94, 0x39, 0x00, 0x72, 0xcd, 0x10, 0xbd, 0x24, 0x8e, 0xed, 0x4a, - 0xf5, 0x13, 0x49, 0x4e, 0x09, 0x21, 0x47, 0x0e, 0x5e, 0x48, 0x7e, 0x11, 0xd3, 0xa2, 0x43, 0xf4, - 0xcb, 0xb6, 0x21, 0x79, 0x3f, 0x9a, 0xe1, 0x0f, 0x83, 0xa2, 0x87, 0x14, 0xe2, 0xcc, 0x74, 0xf9, - 0xe5, 0x2f, 0xab, 0xd2, 0x0b, 0x82, 0xbd, 0x4e, 0x2c, 0xa6, 0x0c, 0x27, 0x68, 0xe9, 0xe0, 0xdb, - 0x25, 0xcc, 0xbd, 0xa1, 0x5f, 0xb2, 0xf7, 0xb5, 0x5b, 0xd0, 0x3d, 0x9a, 0xd6, 0x82, 0x8e, 0x50, - 0x66, 0xe9, 0x2c, 0xe8, 0x4e, 0x72, 0x68, 0x06, 0x81, 0x9c, 0x0a, 0x6f, 0x44, 0xd9, 0x18, 0x0c, - 0x6d, 0xc1, 0x49, 0xe4, 0x26, 0x97, 0xff, 0x41, 0x95, 0x3e, 0x14, 0xec, 0x75, 0xa2, 0x62, 0x32, - 0xb4, 0xad, 0x5f, 0xd9, 0xa4, 0xe6, 0x3a, 0xb0, 0xb6, 0xee, 0xa4, 0x5c, 0x21, 0xac, 0x2e, 0x71, - 0x08, 0x67, 0x28, 0x1e, 0x8c, 0x5d, 0x8d, 0x6e, 0x85, 0x1d, 0x2f, 0x5a, 0xdf, 0xec, 0x6f, 0xf0, - 0x29, 0xa1, 0x25, 0xfe, 0xc6, 0xa6, 0x60, 0x28, 0xa2, 0x84, 0x8a, 0x99, 0xb8, 0xb1, 0xd0, 0x56, - 0xb6, 0x7f, 0x97, 0xaf, 0x41, 0x93, 0xfd, 0xe1, 0x77, 0xc3, 0xef, 0x79, 0x43, 0x8a, 0x0f, 0x27, - 0x88, 0xcb, 0x27, 0x3e, 0x26, 0xb4, 0x54, 0x7c, 0x84, 0xd9, 0xce, 0xf3, 0xf1, 0xd8, 0x57, 0xce, - 0xed, 0xc4, 0x76, 0x49, 0xb8, 0x31, 0xff, 0xbf, 0x73, 0x68, 0x7a, 0x3d, 0xe3, 0x93, 0x52, 0x5d, - 0x59, 0xf0, 0x04, 0x5e, 0x36, 0x49, 0xdd, 0x60, 0xab, 0x14, 0xbf, 0x24, 0x34, 0x2e, 0x25, 0x5a, - 0xe2, 0xb1, 0xbd, 0xe0, 0xa6, 0x54, 0x5d, 0x59, 0x42, 0xf9, 0xac, 0xe4, 0x17, 0xb1, 0xab, 0xd1, - 0x6d, 0xb0, 0x27, 0xda, 0xee, 0xa3, 0xa9, 0xed, 0xc3, 0xfa, 0x92, 0x3a, 0x2f, 0x6a, 0x5d, 0x07, - 0x68, 0x7b, 0x6d, 0x57, 0x5f, 0xaa, 0x7f, 0xeb, 0xd5, 0xe8, 0x36, 0x10, 0x20, 0xc5, 0x63, 0x7b, - 0xc1, 0x85, 0x3a, 0x3e, 0xb0, 0x27, 0x39, 0x78, 0x34, 0x3e, 0x10, 0x05, 0x32, 0x9a, 0x71, 0x93, - 0xd2, 0x29, 0xa3, 0xa8, 0x49, 0x4e, 0x43, 0xf3, 0x64, 0xec, 0xdb, 0xe4, 0xd9, 0xe3, 0x80, 0x2b, - 0x6c, 0x63, 0xcb, 0xb6, 0xc9, 0xf3, 0x1b, 0x1d, 0xd6, 0xe3, 0x45, 0x78, 0xad, 0x18, 0x2c, 0xed, - 0xd6, 0xe3, 0x82, 0x85, 0xd1, 0xb4, 0xb9, 0xe9, 0x32, 0x6e, 0x35, 0x89, 0x23, 0x97, 0x1d, 0xb1, - 0x4f, 0xb6, 0x73, 0x28, 0xc7, 0x1b, 0x52, 0xbc, 0x05, 0xc5, 0xee, 0x8e, 0x6e, 0xe0, 0x05, 0x14, - 0x52, 0xbc, 0xe5, 0x6b, 0x74, 0x0e, 0x1d, 0xb7, 0x15, 0xab, 0x09, 0x48, 0x0d, 0x7e, 0xa7, 0xc5, - 0x4e, 0xc1, 0xce, 0xea, 0x90, 0x74, 0xf4, 0x28, 0xdc, 0xbe, 0x22, 0xb0, 0xe4, 0xa7, 0x0e, 0x97, - 0x25, 0x1e, 0xad, 0xf5, 0x30, 0x49, 0x94, 0x08, 0xfb, 0x6e, 0xb4, 0x2f, 0x96, 0xf1, 0x80, 0xfc, - 0x4e, 0xd3, 0xc3, 0x52, 0x18, 0xd5, 0xc3, 0x52, 0x56, 0xa5, 0xd5, 0xd4, 0xc3, 0xb2, 0x8a, 0x9d, - 0xca, 0x8f, 0x0f, 0x99, 0xff, 0x0d, 0x87, 0xe6, 0x1a, 0x80, 0x1c, 0x0c, 0x04, 0x94, 0xfa, 0x08, - 0x21, 0x7d, 0x0a, 0x7e, 0x91, 0x91, 0x34, 0xb5, 0x36, 0x2e, 0x5f, 0xab, 0x4a, 0xb2, 0xe0, 0x3e, - 0x90, 0xf8, 0x1c, 0x01, 0x4b, 0x48, 0xf9, 0xbd, 0xb3, 0x45, 0x3b, 0x71, 0x20, 0x39, 0xbc, 0x37, - 0x75, 0xf6, 0x07, 0x96, 0x01, 0xd3, 0x2e, 0xb7, 0x8c, 0x1c, 0x1f, 0x04, 0xd2, 0x2c, 0xd1, 0x67, - 0xd0, 0x62, 0xee, 0x23, 0xfe, 0x18, 0x27, 0xc2, 0x5f, 0xa3, 0xe9, 0x56, 0xe9, 0x80, 0x4b, 0xef, - 0x65, 0x56, 0xd5, 0xb9, 0x83, 0x84, 0x2d, 0x7f, 0x7d, 0x75, 0x53, 0xb8, 0xb6, 0xa1, 0x79, 0xa3, - 0x3f, 0xc0, 0x0e, 0xfd, 0x36, 0x9a, 0x69, 0x67, 0xc2, 0x6f, 0xdd, 0xe0, 0x86, 0xf3, 0x23, 0x7d, - 0x1d, 0x6f, 0x48, 0x61, 0xd5, 0x96, 0xa5, 0x4a, 0x2d, 0x59, 0x68, 0x5b, 0x96, 0xe0, 0x10, 0xf7, - 0x8b, 0x1b, 0xd8, 0xcb, 0x64, 0xf3, 0xa0, 0x20, 0x27, 0x87, 0x4d, 0x92, 0xf5, 0xc7, 0xb7, 0x57, - 0x67, 0xef, 0x59, 0x96, 0xfe, 0x6a, 0x74, 0x1b, 0xa8, 0x0e, 0x59, 0xa1, 0x4f, 0xaa, 0xff, 0x22, - 0x00, 0x3f, 0xe8, 0x10, 0x13, 0x9d, 0x27, 0xb5, 0xae, 0xcf, 0xaf, 0x70, 0xa6, 0x38, 0xff, 0x0a, - 0xc7, 0x0a, 0xe4, 0xaf, 0x70, 0x54, 0x4c, 0x7e, 0x85, 0x23, 0xc2, 0x6d, 0xab, 0x5b, 0x12, 0x23, - 0xfa, 0xbd, 0xc2, 0xb1, 0x32, 0xd9, 0x2b, 0x1c, 0x23, 0x44, 0xbd, 0xc2, 0xb1, 0x12, 0x50, 0xf3, - 0x1b, 0x50, 0x47, 0xe3, 0x5d, 0xfd, 0xd3, 0x1c, 0x34, 0xcb, 0xb6, 0x09, 0xe1, 0xa6, 0xf1, 0xee, - 0xa4, 0x51, 0x6b, 0xf1, 0x66, 0x9a, 0x9f, 0x8e, 0x0f, 0x26, 0x71, 0x99, 0xbc, 0x11, 0xaf, 0x58, - 0x90, 0xfa, 0xec, 0x2b, 0x38, 0x59, 0x9d, 0x70, 0x60, 0x4e, 0x87, 0xb8, 0x33, 0xfd, 0x09, 0xe5, - 0x44, 0xbc, 0xe1, 0x4d, 0xc4, 0x87, 0x69, 0x8e, 0x9b, 0xfd, 0x0e, 0xa4, 0x11, 0xc0, 0xcd, 0xc4, - 0x57, 0x59, 0xb9, 0x1d, 0xa8, 0x3b, 0xaf, 0x0d, 0xb5, 0x02, 0x94, 0x24, 0x7a, 0xdb, 0xae, 0x0d, - 0xb5, 0x01, 0x8b, 0x45, 0xc4, 0x96, 0xe0, 0xe0, 0x61, 0x18, 0x6d, 0x98, 0xb6, 0x76, 0x9f, 0xf6, - 0xca, 0x78, 0x3c, 0xfe, 0x8f, 0x4e, 0x6f, 0xaa, 0xbc, 0x31, 0x7a, 0x53, 0xe1, 0x47, 0xd5, 0xe1, - 0x4d, 0xb5, 0x90, 0xf5, 0xa6, 0xa2, 0x4b, 0x4e, 0xe3, 0x50, 0xb5, 0x42, 0x95, 0x2a, 0x51, 0xb9, - 0xe0, 0x84, 0x03, 0x71, 0x2e, 0x7b, 0x1b, 0xf4, 0xb7, 0xc4, 0xdd, 0x31, 0xe5, 0x0a, 0x87, 0x77, - 0xb1, 0xb0, 0xe3, 0x41, 0x34, 0x1f, 0x06, 0x59, 0xe7, 0x0f, 0x45, 0x9a, 0xbd, 0x0d, 0xf7, 0xf5, - 0x68, 0xf7, 0xf5, 0x68, 0xf7, 0xf5, 0x68, 0xf7, 0x8e, 0x1e, 0xed, 0x9f, 0xbb, 0xea, 0xd1, 0xbe, - 0x1a, 0x4f, 0x7a, 0xb4, 0x87, 0x43, 0x0f, 0xb9, 0xea, 0xd1, 0x26, 0x6d, 0x06, 0x94, 0x64, 0x55, - 0xa8, 0xb5, 0x70, 0x68, 0xda, 0x7b, 0xc1, 0x70, 0xc4, 0xae, 0x4a, 0x7b, 0x57, 0x95, 0x7e, 0x23, - 0x58, 0x6b, 0xc4, 0xd7, 0x2d, 0x3f, 0x53, 0x87, 0x7b, 0x12, 0x7b, 0x8e, 0x92, 0xa7, 0xe4, 0x87, - 0x23, 0x89, 0xb6, 0x43, 0xc9, 0x9e, 0x1d, 0x7a, 0x0b, 0xf6, 0x75, 0x29, 0x61, 0x35, 0x6e, 0x2c, - 0x93, 0x23, 0x5b, 0xc7, 0xe6, 0xbf, 0xe5, 0x10, 0xcf, 0x94, 0x10, 0x49, 0x33, 0xb1, 0x0b, 0xda, - 0xc6, 0xa9, 0xd2, 0x26, 0xc1, 0xa5, 0x5e, 0x5c, 0xeb, 0x2c, 0x73, 0x91, 0x2c, 0xf9, 0x94, 0xcd, - 0x01, 0x25, 0xb2, 0xc4, 0xef, 0xab, 0x2f, 0xc6, 0xcf, 0xd2, 0x01, 0x6d, 0xe7, 0xb7, 0xf1, 0x58, - 0xa7, 0x39, 0xd9, 0x64, 0xcf, 0x0e, 0xb6, 0xc3, 0xf5, 0xf2, 0x59, 0xa1, 0x19, 0x72, 0x1e, 0x74, - 0x93, 0xb3, 0xfd, 0xbe, 0x7a, 0xf9, 0x67, 0xb2, 0xcb, 0xe7, 0xf9, 0x2f, 0x4c, 0xa5, 0xdf, 0x74, - 0x2c, 0xd4, 0x78, 0xd2, 0x5d, 0xa8, 0xe1, 0x78, 0x0d, 0xee, 0xae, 0xee, 0x6f, 0xc6, 0x2d, 0xd0, - 0xfd, 0xcd, 0xbc, 0xd3, 0xba, 0x3f, 0x53, 0x35, 0x32, 0xeb, 0x86, 0x55, 0x23, 0xdd, 0x2e, 0x3a, - 0x0e, 0x7e, 0x4c, 0x3a, 0x8e, 0xe5, 0xb7, 0x46, 0xc7, 0xe1, 0xd4, 0x6d, 0xfc, 0xb3, 0x74, 0xba, - 0x8d, 0xd9, 0x63, 0xd7, 0x6d, 0x84, 0xee, 0xbc, 0x6e, 0xe3, 0xc6, 0x75, 0x1a, 0x73, 0xee, 0x5d, - 0x9d, 0xc6, 0xdc, 0x7b, 0x42, 0xa7, 0x31, 0x68, 0x11, 0xce, 0xce, 0xc3, 0x78, 0xec, 0xe9, 0xb1, - 0xe2, 0xb1, 0xbb, 0x2e, 0xa3, 0xb5, 0x89, 0x15, 0xe7, 0xdf, 0xac, 0x58, 0x31, 0xca, 0xa1, 0xac, - 0x80, 0xa1, 0x59, 0x74, 0x84, 0x4c, 0xd4, 0x29, 0xdc, 0x70, 0x93, 0xb7, 0x1e, 0x24, 0x30, 0x6f, - 0xa8, 0x52, 0x8d, 0x90, 0x15, 0x08, 0x8b, 0xaf, 0x6a, 0x7b, 0x87, 0x75, 0xaa, 0xf8, 0x8b, 0xd8, - 0xc8, 0xc1, 0xef, 0x68, 0xac, 0x2d, 0xc7, 0xc3, 0x68, 0x7f, 0x6b, 0x12, 0x47, 0xbb, 0xe3, 0x03, - 0x5f, 0xb2, 0x7d, 0xe5, 0xac, 0x40, 0x98, 0x7f, 0x89, 0x3a, 0x4e, 0x57, 0xe8, 0xbc, 0xe7, 0x03, - 0xa6, 0x8f, 0x12, 0x5b, 0x2e, 0x22, 0xa0, 0x14, 0x75, 0x0e, 0x44, 0x66, 0x2b, 0x6e, 0x45, 0x30, - 0xa5, 0x9b, 0x93, 0x27, 0x1c, 0xc8, 0x52, 0x25, 0x35, 0x0b, 0x75, 0x65, 0x09, 0xe9, 0xb8, 0x1f, - 0x43, 0xf7, 0xc2, 0xee, 0xcd, 0x4f, 0x40, 0xb8, 0xf0, 0x7f, 0x65, 0xa3, 0x69, 0x16, 0xd0, 0xa1, - 0xb1, 0x96, 0x39, 0x47, 0xac, 0x65, 0x16, 0x1c, 0x2c, 0xfe, 0x07, 0xeb, 0x29, 0x8d, 0x91, 0x85, - 0xef, 0x66, 0x71, 0x46, 0xe0, 0xb4, 0x50, 0x16, 0x60, 0x46, 0x4b, 0x28, 0x0b, 0xcb, 0x17, 0x12, - 0xc7, 0x76, 0x25, 0xfb, 0x7e, 0xa0, 0xc4, 0xc1, 0x66, 0x6b, 0xd4, 0xaf, 0x6c, 0xfc, 0xa1, 0xc5, - 0x99, 0x3f, 0xe4, 0x48, 0x19, 0x09, 0xb7, 0x8e, 0xe5, 0xc2, 0xad, 0x9f, 0xfc, 0xf6, 0x4c, 0xea, - 0xf4, 0xe7, 0xd6, 0x74, 0x91, 0xbf, 0x46, 0xb9, 0xbf, 0x6f, 0x0e, 0x52, 0x49, 0xc6, 0xa2, 0xb4, - 0x5f, 0x7c, 0x43, 0x6f, 0x05, 0x02, 0x0d, 0xe8, 0x21, 0xce, 0x67, 0xc7, 0xc6, 0x45, 0x23, 0x87, - 0xbb, 0xb5, 0xd6, 0x0b, 0x32, 0xd4, 0xff, 0x98, 0xdb, 0xf0, 0x23, 0xb3, 0x08, 0x16, 0xf6, 0x72, - 0x68, 0xba, 0x75, 0xe6, 0xbc, 0x07, 0x4d, 0xa9, 0x6f, 0x6a, 0x26, 0xc1, 0x4a, 0xc2, 0x64, 0x18, - 0xb6, 0x88, 0x7f, 0x10, 0x4d, 0xae, 0x6f, 0x6a, 0x5e, 0xe9, 0x6f, 0xf4, 0x47, 0xc2, 0x64, 0x48, - 0xb3, 0x80, 0x7f, 0x1c, 0x4d, 0x6f, 0x54, 0x1a, 0x83, 0xa1, 0x2d, 0x74, 0x08, 0xcc, 0x63, 0xcb, - 0xb6, 0x52, 0xbe, 0x10, 0x4d, 0x85, 0x12, 0x32, 0x10, 0xd8, 0x02, 0x5b, 0xca, 0x0a, 0xff, 0x43, - 0x0e, 0x2a, 0x70, 0xbf, 0xa7, 0xf7, 0x25, 0x5f, 0x3f, 0x31, 0xc9, 0x17, 0x89, 0x13, 0x95, 0x16, - 0x1c, 0xc4, 0x85, 0x4e, 0xbc, 0x3d, 0xba, 0x18, 0xec, 0x14, 0x87, 0xa6, 0xbd, 0xde, 0xbc, 0x9e, - 0x28, 0xad, 0x65, 0xe5, 0xf7, 0x7c, 0x0d, 0x42, 0x9b, 0x68, 0x01, 0x41, 0x7e, 0x8b, 0x55, 0xe9, - 0x51, 0x81, 0x29, 0x16, 0xe7, 0xc1, 0xf8, 0x66, 0x09, 0x44, 0x01, 0x37, 0x92, 0xe5, 0x31, 0x4d, - 0xcb, 0xaa, 0x54, 0xa9, 0x1c, 0xbd, 0x22, 0x58, 0xbf, 0x22, 0x16, 0x92, 0xc8, 0x83, 0x3f, 0x7c, - 0xac, 0xb5, 0x9c, 0x4c, 0x7c, 0x1e, 0x4d, 0x7c, 0xbf, 0xc7, 0x3e, 0xd8, 0x15, 0x8e, 0x19, 0xa6, - 0xf0, 0x7c, 0x2e, 0x9a, 0x63, 0x0e, 0x41, 0xd4, 0x0a, 0xfa, 0x7c, 0xd7, 0x3a, 0x65, 0x75, 0x38, - 0x82, 0x09, 0x23, 0xab, 0x7b, 0x22, 0x1e, 0xdb, 0x6b, 0x88, 0xeb, 0x8a, 0x80, 0x98, 0x29, 0xf3, - 0xa4, 0x5a, 0x7e, 0x48, 0x9d, 0xed, 0x8f, 0xc7, 0xf6, 0x96, 0x79, 0xea, 0x1b, 0xc2, 0xa5, 0x1f, - 0x7e, 0xf8, 0xa1, 0x45, 0xde, 0xf6, 0x7b, 0x84, 0xf4, 0x67, 0x23, 0x12, 0xf2, 0x06, 0x94, 0x08, - 0xbe, 0x2f, 0xf9, 0x40, 0x4c, 0x30, 0xc5, 0xe2, 0x2b, 0x8c, 0xfe, 0xcf, 0x03, 0xaa, 0x38, 0x6c, - 0x86, 0xb8, 0x57, 0x67, 0xf6, 0x20, 0xa7, 0x2d, 0x14, 0x12, 0xc5, 0xc9, 0xe5, 0x91, 0x83, 0x67, - 0x93, 0x3d, 0x3b, 0xcc, 0x00, 0xd9, 0x32, 0x33, 0x1a, 0xbf, 0xde, 0xb4, 0xab, 0xcb, 0x36, 0x92, - 0x1f, 0x3e, 0xaf, 0xaf, 0x23, 0xd8, 0xec, 0xc3, 0x82, 0x8a, 0xc5, 0x20, 0x84, 0xc3, 0x81, 0x97, - 0x4a, 0x3c, 0x96, 0x2c, 0x98, 0xb1, 0xbd, 0xc4, 0x59, 0x1e, 0x4b, 0xdf, 0x40, 0x12, 0xc7, 0x88, - 0xff, 0xa8, 0xd9, 0xdd, 0xe7, 0x1c, 0x9a, 0xec, 0xa5, 0x5a, 0xc9, 0x1c, 0x1a, 0x1d, 0x78, 0x8b, - 0x60, 0x16, 0x8b, 0x0d, 0xac, 0xf6, 0x9a, 0x72, 0x1b, 0x78, 0x08, 0x50, 0x02, 0x1a, 0xf4, 0x93, - 0x41, 0xc5, 0xc6, 0x92, 0x5f, 0xc4, 0x9e, 0xf7, 0x68, 0xc3, 0x1f, 0xc3, 0x9f, 0xd8, 0xe0, 0x02, - 0xea, 0x46, 0xa2, 0x3d, 0xa9, 0xcb, 0xbb, 0x40, 0xdf, 0x88, 0xb7, 0xc2, 0x31, 0xca, 0xf5, 0xf2, - 0xdc, 0x50, 0xb6, 0x3e, 0x47, 0x73, 0x02, 0xfc, 0x6a, 0x2a, 0x2b, 0xcc, 0x35, 0x0e, 0x74, 0x14, - 0x59, 0x61, 0x1a, 0x91, 0x19, 0xe9, 0x53, 0x16, 0x51, 0xa5, 0xdf, 0xa3, 0xa0, 0xe0, 0x0a, 0x41, - 0xa2, 0x04, 0xf0, 0x47, 0xc2, 0x04, 0x1b, 0x17, 0xc7, 0x84, 0x3d, 0x38, 0x37, 0xb2, 0x1b, 0x3b, - 0x5b, 0x96, 0xc0, 0x69, 0x12, 0x0d, 0x34, 0x0e, 0x6c, 0xab, 0xd3, 0x11, 0xb0, 0xc1, 0x2c, 0x3d, - 0x53, 0xd8, 0x92, 0x85, 0xa6, 0xb3, 0x60, 0x3f, 0xee, 0x71, 0xb6, 0x81, 0x64, 0x6c, 0xb3, 0x16, - 0x1f, 0xb3, 0xdf, 0x50, 0xc0, 0x9a, 0x89, 0xe8, 0x69, 0xe8, 0x3f, 0x0a, 0x92, 0x69, 0xcf, 0x42, - 0x73, 0x5d, 0x76, 0xfe, 0xa7, 0xba, 0x1d, 0x7f, 0xc7, 0xa1, 0x19, 0xd5, 0xd8, 0x3c, 0x01, 0xab, - 0xac, 0x57, 0xe9, 0x0b, 0x5b, 0x6d, 0xde, 0x7d, 0xce, 0x90, 0x11, 0x8b, 0xa6, 0x4d, 0xed, 0x98, - 0x31, 0x18, 0xbd, 0xe8, 0x2b, 0x2c, 0x68, 0x3c, 0xcb, 0x74, 0xb0, 0x1e, 0x03, 0x1a, 0xb7, 0xe0, - 0x6f, 0x7d, 0x22, 0x68, 0xa9, 0x60, 0x9f, 0xb1, 0xf8, 0x50, 0x3c, 0xb6, 0xd7, 0x20, 0xd0, 0x59, - 0x7c, 0x91, 0x38, 0x73, 0x5c, 0x1b, 0xea, 0x2a, 0xfc, 0x9b, 0xf9, 0x68, 0xa6, 0xd1, 0x85, 0x2a, - 0x56, 0x8e, 0xb8, 0x28, 0x56, 0x70, 0x14, 0x62, 0x06, 0x59, 0x07, 0x47, 0x53, 0xac, 0x24, 0xda, - 0xf6, 0xe8, 0x4f, 0xf4, 0xf0, 0xfe, 0x51, 0xd5, 0x2b, 0x24, 0x66, 0x18, 0xcc, 0x2e, 0x3e, 0xd4, - 0x03, 0xd8, 0x1a, 0x94, 0x2b, 0xc6, 0x57, 0x6e, 0x9b, 0x92, 0xc5, 0xc6, 0xed, 0x66, 0xdf, 0x2c, - 0xb7, 0x5b, 0xcf, 0x28, 0x6b, 0x00, 0x5f, 0xaf, 0x50, 0xa5, 0x32, 0x46, 0x59, 0x73, 0xf3, 0xaf, - 0x82, 0xa9, 0x9c, 0xb9, 0xd5, 0x08, 0x97, 0x7f, 0xcb, 0xa9, 0x46, 0x79, 0xc1, 0x1e, 0xd5, 0x81, - 0x9d, 0x2a, 0x30, 0xca, 0x19, 0x74, 0x3e, 0x8c, 0x4a, 0xe5, 0x57, 0x2e, 0x2a, 0x95, 0x67, 0x46, - 0x51, 0xa9, 0xa4, 0x1d, 0xf7, 0xae, 0x2b, 0x55, 0x7e, 0xe3, 0xa2, 0x54, 0x79, 0xe1, 0x06, 0x94, - 0x2a, 0x33, 0x43, 0xd3, 0x2d, 0x4a, 0x95, 0x9f, 0x59, 0xd4, 0x2a, 0x5b, 0x9c, 0x6a, 0x95, 0x29, - 0xe2, 0x02, 0x47, 0xe4, 0xea, 0xf2, 0x60, 0xb0, 0x01, 0xe2, 0x56, 0xe3, 0x2c, 0xe3, 0x16, 0x95, - 0x4b, 0x71, 0x06, 0x95, 0x8b, 0x69, 0x9d, 0x14, 0x09, 0x35, 0x2b, 0x56, 0x05, 0xcc, 0x3f, 0x72, - 0x55, 0xc0, 0x9c, 0x18, 0x4f, 0x0a, 0x98, 0x82, 0xd0, 0x3c, 0x57, 0x05, 0xcc, 0xcf, 0xac, 0x9a, - 0x17, 0xc6, 0x61, 0x68, 0xaa, 0xbb, 0xc3, 0x90, 0x1d, 0xd3, 0xdd, 0x05, 0xa5, 0xc1, 0xf3, 0xf6, - 0x28, 0x28, 0x8f, 0xa4, 0x55, 0x1a, 0x30, 0x64, 0x21, 0xd1, 0x1a, 0x9c, 0xc7, 0x88, 0x99, 0xa0, - 0x76, 0x92, 0x7b, 0xe1, 0xe1, 0x74, 0x8b, 0x24, 0xcd, 0xca, 0x43, 0xaa, 0xb4, 0x51, 0x30, 0xbb, - 0x89, 0x6f, 0x11, 0xb3, 0xb1, 0xd8, 0x5e, 0x70, 0x21, 0x16, 0x93, 0xa7, 0x3b, 0xe0, 0x35, 0x28, - 0xf3, 0xc4, 0x63, 0x7b, 0xab, 0x2b, 0x35, 0xb5, 0xdd, 0x7c, 0x58, 0x4a, 0x3c, 0xf1, 0xc1, 0xc1, - 0xc4, 0x8e, 0xae, 0xf8, 0x40, 0x34, 0x79, 0xba, 0x43, 0xeb, 0xf8, 0x56, 0xeb, 0xea, 0xa7, 0x79, - 0x8b, 0x06, 0x4f, 0x1a, 0xf8, 0x39, 0x3e, 0x10, 0xd3, 0x76, 0xed, 0xa4, 0x76, 0xfa, 0xe6, 0xe7, - 0xec, 0x1e, 0x24, 0x33, 0x26, 0x9c, 0x07, 0x89, 0xdf, 0x6a, 0x80, 0x3d, 0xd3, 0x40, 0xee, 0x95, - 0x56, 0x03, 0xec, 0x5f, 0x8e, 0xc5, 0x00, 0xbb, 0x84, 0xce, 0x89, 0x94, 0x58, 0x2d, 0xb2, 0xad, - 0x56, 0xbd, 0x69, 0xbc, 0xb1, 0x1c, 0x40, 0x7c, 0xd7, 0x25, 0xc6, 0x9b, 0x1d, 0x36, 0xb7, 0x10, - 0x29, 0x06, 0x07, 0xd7, 0xb7, 0xdb, 0xdc, 0x3e, 0x77, 0xd3, 0x36, 0xb7, 0x0e, 0x5b, 0x5b, 0x37, - 0xc3, 0xd5, 0xd9, 0xe3, 0xdd, 0x70, 0x75, 0xce, 0x8f, 0x37, 0x5c, 0x7d, 0x15, 0x4d, 0xda, 0x4c, - 0xb2, 0xfc, 0xcf, 0x35, 0x18, 0xff, 0x9f, 0x0b, 0x46, 0x99, 0x58, 0x60, 0xd9, 0x61, 0x26, 0x6b, - 0x05, 0xe5, 0xe1, 0x8c, 0xa6, 0x36, 0x3e, 0x73, 0xde, 0xf8, 0xe4, 0x33, 0xef, 0x9e, 0x18, 0x7e, - 0x90, 0x53, 0xa5, 0x8b, 0x1c, 0xfa, 0x8e, 0x13, 0x1c, 0x44, 0xb2, 0x58, 0x0a, 0x8c, 0xa8, 0x76, - 0xf1, 0x1b, 0x90, 0xad, 0x53, 0xc1, 0x10, 0xec, 0x56, 0x79, 0x45, 0x1d, 0xd1, 0xcc, 0x62, 0x6c, - 0x9b, 0x41, 0x68, 0x7e, 0xdb, 0x64, 0xe5, 0xff, 0x22, 0x0b, 0xcd, 0xb2, 0x4d, 0x7b, 0xfc, 0x8b, - 0x23, 0xeb, 0x6c, 0xe2, 0x48, 0x97, 0xe4, 0x1d, 0xcd, 0xf5, 0x11, 0x08, 0x17, 0x07, 0xe2, 0xc8, - 0x85, 0x30, 0x8e, 0x05, 0x48, 0xd5, 0x76, 0x10, 0x0c, 0x92, 0x88, 0xc9, 0x86, 0x39, 0x9a, 0x63, - 0x37, 0xc4, 0xb9, 0x36, 0x6c, 0x34, 0x0a, 0x4f, 0xf8, 0xbf, 0x66, 0xa3, 0xf9, 0x10, 0x24, 0xd0, - 0x69, 0x8e, 0xb6, 0xce, 0xc9, 0x34, 0x3d, 0x8b, 0x4d, 0x92, 0x4c, 0xa6, 0x29, 0xdf, 0x40, 0x73, - 0xd7, 0xcb, 0x1f, 0x0a, 0x2d, 0x74, 0xa5, 0x74, 0xcb, 0x72, 0x74, 0x3e, 0x8a, 0xe5, 0x76, 0xe2, - 0xc4, 0x54, 0x00, 0xbe, 0x8b, 0x5f, 0x06, 0x90, 0x73, 0x01, 0x74, 0x0a, 0xb6, 0x4a, 0xf1, 0x04, - 0x67, 0xd5, 0xfb, 0x5f, 0x8d, 0x6e, 0xa3, 0xf1, 0xc8, 0x88, 0x9f, 0x8d, 0x8e, 0xfb, 0x06, 0x5b, - 0x20, 0xb7, 0x01, 0xf9, 0x50, 0x29, 0x79, 0x5e, 0x12, 0x6d, 0x51, 0x70, 0xd2, 0x66, 0x89, 0x9b, - 0xf8, 0x40, 0x47, 0x7c, 0xa8, 0x27, 0x75, 0xfa, 0x94, 0xd6, 0xb5, 0x37, 0x3e, 0x38, 0x18, 0x1f, - 0xde, 0x6f, 0xc6, 0x8b, 0xc2, 0x3c, 0x8b, 0xfe, 0x0d, 0x23, 0x87, 0x98, 0x81, 0x05, 0x3a, 0xfd, - 0xe1, 0xe5, 0xc1, 0x50, 0xbd, 0xe2, 0xd3, 0xba, 0x71, 0x4a, 0x9c, 0x8e, 0x2e, 0xad, 0xbb, 0x5d, - 0xbb, 0x78, 0x32, 0x3e, 0xdc, 0x7b, 0x35, 0xba, 0x4d, 0xb6, 0x4d, 0x9b, 0x7f, 0x05, 0xe5, 0x07, - 0x9b, 0x74, 0x0a, 0x2f, 0x18, 0x62, 0xb9, 0x30, 0x5a, 0x28, 0xce, 0x85, 0xf9, 0x12, 0xfc, 0x8c, - 0xe3, 0x83, 0xc5, 0x63, 0x31, 0x99, 0x36, 0x28, 0x7b, 0x49, 0x95, 0x9e, 0x47, 0xcf, 0x09, 0xe9, - 0x0e, 0xc8, 0x48, 0xe6, 0xc0, 0xea, 0xca, 0x2c, 0x72, 0xa0, 0x58, 0x0e, 0x2a, 0x70, 0xef, 0x3b, - 0xfe, 0xaf, 0xcd, 0xba, 0xb1, 0x49, 0xf1, 0xb1, 0x0b, 0x30, 0x5c, 0x9b, 0x45, 0xe4, 0xda, 0x5c, - 0xfc, 0x06, 0xb6, 0xc5, 0x5d, 0x96, 0xff, 0xbb, 0x31, 0xc8, 0xf2, 0xb1, 0x33, 0x5a, 0xae, 0xde, - 0x2c, 0x2c, 0x0a, 0xec, 0x1e, 0xb3, 0x71, 0xc5, 0x0c, 0xc1, 0x7e, 0x3b, 0x15, 0xec, 0x8f, 0x27, - 0x43, 0xd5, 0xb4, 0xe7, 0x6e, 0x85, 0xba, 0xf4, 0x08, 0xa2, 0xf0, 0xdf, 0x65, 0xa1, 0x07, 0x41, - 0x63, 0x6a, 0x1d, 0x04, 0x2b, 0xab, 0x6e, 0x27, 0x7a, 0x58, 0x65, 0x28, 0xfc, 0xb2, 0xc6, 0xa4, - 0xf0, 0xc3, 0xd1, 0x87, 0x88, 0xc2, 0x6f, 0x8a, 0x53, 0xc9, 0xc7, 0x97, 0x9b, 0x71, 0x12, 0xb3, - 0x0d, 0xb9, 0xca, 0x43, 0x66, 0x9c, 0x44, 0x9e, 0x5e, 0x3c, 0x6d, 0xef, 0x21, 0x43, 0xb2, 0x62, - 0x50, 0x15, 0xa4, 0x91, 0x91, 0x57, 0x25, 0xe3, 0x7e, 0x88, 0x05, 0x24, 0xd0, 0x39, 0xa3, 0x07, - 0x19, 0x69, 0xe9, 0x18, 0xf9, 0xec, 0x88, 0x55, 0xd7, 0x0c, 0xd3, 0x2a, 0x6c, 0xcb, 0x46, 0x0f, - 0x65, 0x18, 0x6e, 0xfc, 0x5f, 0xd0, 0x7a, 0xcb, 0x05, 0x1d, 0xed, 0x94, 0x70, 0x0e, 0x28, 0xb8, - 0xa7, 0x8f, 0xc2, 0x70, 0xb0, 0x5b, 0x5a, 0x77, 0x67, 0xb2, 0x67, 0x07, 0xab, 0xa7, 0x05, 0xe7, - 0x41, 0xf2, 0xce, 0xf9, 0x54, 0xc9, 0x8b, 0xde, 0x15, 0x32, 0xef, 0x94, 0x58, 0xea, 0xdc, 0x79, - 0xdb, 0x88, 0x23, 0x9f, 0x1d, 0xc9, 0x00, 0xea, 0x7d, 0xf9, 0x68, 0x26, 0xdc, 0x97, 0x3b, 0xf0, - 0xfa, 0x9d, 0xcf, 0x42, 0xf9, 0xc6, 0x43, 0x42, 0xde, 0xbd, 0x7d, 0x59, 0xaa, 0xd4, 0x9d, 0x25, - 0xd0, 0x62, 0x71, 0x7b, 0x16, 0x09, 0xed, 0x8e, 0xa3, 0x6d, 0xc2, 0x85, 0xb5, 0x86, 0x76, 0xbf, - 0x1a, 0xdd, 0xc6, 0x56, 0xc6, 0x87, 0x7a, 0xe2, 0x03, 0x51, 0xed, 0xd2, 0x05, 0xcb, 0x13, 0x48, - 0xce, 0x82, 0x30, 0xa0, 0x46, 0x78, 0x7b, 0x2a, 0xdf, 0x04, 0xe3, 0x22, 0x1a, 0x67, 0x31, 0x71, - 0xfe, 0x18, 0x98, 0x3c, 0xb1, 0x03, 0x6b, 0x7b, 0xcf, 0x24, 0x7a, 0x8f, 0xa6, 0x7e, 0xd8, 0x3e, - 0xb2, 0xff, 0xf2, 0xb5, 0xa1, 0xf6, 0xc4, 0x40, 0x4b, 0xb2, 0x7b, 0x27, 0xbc, 0x79, 0xfa, 0x03, - 0x7a, 0xf9, 0x13, 0x9d, 0xd6, 0xd8, 0x7f, 0x59, 0xeb, 0xee, 0xd4, 0xba, 0xce, 0x91, 0x58, 0xa1, - 0xd8, 0x8c, 0x4a, 0x9f, 0x2e, 0x83, 0x7d, 0xe1, 0xc1, 0x4d, 0x7e, 0xb5, 0x47, 0x6b, 0x1d, 0x4c, - 0x7d, 0xf6, 0x95, 0x3e, 0xce, 0x17, 0x31, 0xf0, 0x01, 0xd3, 0x97, 0x7a, 0x62, 0x87, 0xce, 0xb1, - 0x00, 0xda, 0xc6, 0xd1, 0xbb, 0xf4, 0x07, 0x95, 0xee, 0x07, 0x7f, 0x94, 0x43, 0xbc, 0xe1, 0x2a, - 0x0a, 0x07, 0x85, 0xe5, 0x05, 0x70, 0x9f, 0x83, 0xaa, 0xd4, 0x20, 0xb8, 0x54, 0x8b, 0xeb, 0x08, - 0x28, 0x90, 0xe4, 0xcc, 0xfa, 0xe0, 0x3a, 0xeb, 0xd5, 0x77, 0x20, 0xb9, 0xff, 0x64, 0x99, 0x27, - 0x62, 0x44, 0x28, 0x2d, 0x1a, 0xd9, 0x17, 0x4d, 0xf4, 0x6f, 0x85, 0x66, 0xc5, 0x9e, 0x90, 0x12, - 0xf1, 0xfa, 0x03, 0x45, 0xf1, 0xc1, 0x96, 0xe4, 0xe9, 0xc1, 0x91, 0xc3, 0x27, 0x4a, 0x20, 0x74, - 0x3c, 0xa9, 0xc6, 0xf9, 0x02, 0x9d, 0xdf, 0x72, 0xa3, 0x69, 0x72, 0xee, 0x71, 0x9a, 0x26, 0xf7, - 0x66, 0x68, 0x1a, 0xbe, 0x95, 0x43, 0xb3, 0x7d, 0xd6, 0xbb, 0x56, 0x1f, 0x0c, 0x41, 0xb8, 0xe5, - 0x7c, 0x70, 0x6a, 0x75, 0xab, 0x17, 0x5f, 0x00, 0x28, 0xd6, 0xf6, 0x1e, 0x82, 0x51, 0x4b, 0x3c, - 0xb0, 0x5f, 0x64, 0xb3, 0xe8, 0x4e, 0x91, 0x2f, 0x63, 0x6b, 0x38, 0x2d, 0xf6, 0x31, 0x6c, 0x93, - 0xec, 0x36, 0xa4, 0x11, 0x9c, 0xcd, 0x71, 0xf5, 0x47, 0xa5, 0xab, 0xbe, 0xce, 0x41, 0xb3, 0x6c, - 0x9d, 0xee, 0x13, 0x54, 0xf7, 0x2a, 0x41, 0xf5, 0x8a, 0x2a, 0xbd, 0x88, 0x9e, 0x17, 0x9c, 0x07, - 0x3e, 0x66, 0x4a, 0xea, 0xaf, 0x8b, 0xd1, 0x4c, 0x23, 0x83, 0x20, 0x7d, 0x5e, 0xdc, 0xcd, 0x07, - 0x4a, 0xd8, 0xe7, 0xe5, 0xe1, 0x51, 0x34, 0x52, 0xa6, 0x64, 0x81, 0x8d, 0x6a, 0xed, 0xa2, 0x49, - 0x5a, 0x94, 0x59, 0x93, 0x64, 0xd5, 0x1f, 0x45, 0x1c, 0x4e, 0x3a, 0x6f, 0xde, 0x7a, 0x27, 0x1d, - 0x32, 0x71, 0x53, 0x11, 0xf4, 0x8c, 0xcd, 0x4b, 0xe7, 0xe1, 0x51, 0x14, 0x41, 0x54, 0xe1, 0x53, - 0x67, 0xf5, 0xc5, 0x79, 0xf1, 0x26, 0x7d, 0x71, 0xc8, 0x84, 0x88, 0x33, 0xce, 0x4b, 0x4e, 0x2d, - 0x92, 0x27, 0xbd, 0x33, 0x8e, 0x71, 0x0a, 0xa6, 0xa6, 0xa8, 0xca, 0x45, 0x53, 0xf4, 0xd8, 0x28, - 0x9a, 0x22, 0x32, 0x0a, 0xab, 0x17, 0x7a, 0xdb, 0x4d, 0x2f, 0xf4, 0xdc, 0x4d, 0xeb, 0x85, 0xac, - 0xfa, 0x9f, 0x37, 0x5d, 0xf4, 0x3f, 0xcf, 0xaa, 0xd2, 0x2f, 0x2d, 0xfa, 0x9f, 0x27, 0x6c, 0xfa, - 0x9f, 0xb7, 0x37, 0x3d, 0x1b, 0x2e, 0xf1, 0x60, 0x85, 0xcf, 0x3b, 0xac, 0x3a, 0xc8, 0xa2, 0xfb, - 0xd9, 0x74, 0xa3, 0xba, 0x9f, 0x1f, 0xe3, 0x6e, 0xf3, 0xb5, 0xab, 0xb6, 0xa7, 0x6d, 0xfc, 0x68, - 0x7b, 0xee, 0x9d, 0xe8, 0x74, 0x76, 0x1c, 0x76, 0x17, 0x94, 0x4d, 0x0c, 0x33, 0x37, 0xfd, 0x26, - 0x99, 0x39, 0xfe, 0x1f, 0x9b, 0xd1, 0x9d, 0x41, 0x77, 0xd3, 0xcf, 0xa9, 0xd2, 0x06, 0x1a, 0x4a, - 0xf6, 0x37, 0x6c, 0xfe, 0x68, 0x30, 0xd4, 0x4b, 0x6d, 0x1f, 0x86, 0x9f, 0x15, 0x72, 0x95, 0xb4, - 0xa6, 0xba, 0x66, 0xc5, 0xb5, 0xa1, 0x76, 0x12, 0xc9, 0xf9, 0xda, 0x50, 0x7b, 0x65, 0xd5, 0xca, - 0x2a, 0x52, 0xb8, 0x5c, 0x5a, 0xb9, 0x56, 0xae, 0xba, 0x36, 0xd4, 0x4e, 0x53, 0x64, 0x48, 0x6b, - 0xaa, 0x57, 0xd7, 0x18, 0x8d, 0xaa, 0x2a, 0xaf, 0x97, 0x57, 0x84, 0x24, 0x39, 0xdf, 0x18, 0xc7, - 0x0c, 0x08, 0x9d, 0x6f, 0x8c, 0x62, 0x46, 0x84, 0x9e, 0x6e, 0x1d, 0x44, 0x9e, 0x44, 0xc6, 0x90, - 0x7f, 0x46, 0x43, 0xdb, 0x8e, 0x29, 0xd8, 0x9d, 0xe3, 0xd8, 0x7e, 0x02, 0xc1, 0xee, 0x1c, 0x6b, - 0x9e, 0x70, 0xc1, 0xee, 0xd6, 0xa2, 0x7c, 0x08, 0xea, 0x44, 0xa3, 0xdd, 0x61, 0xc4, 0x4f, 0x0b, - 0x45, 0xc1, 0x1e, 0xee, 0x4e, 0x7f, 0x1b, 0x71, 0xce, 0x20, 0xf0, 0xe5, 0x65, 0xa3, 0xdf, 0xd1, - 0x5e, 0xfc, 0x77, 0x6e, 0xe1, 0xef, 0x3e, 0xe6, 0x54, 0xa9, 0xcb, 0xaa, 0xbc, 0x8c, 0xde, 0x72, - 0xe5, 0xe5, 0x5d, 0x0b, 0x7a, 0xe7, 0xe6, 0xd9, 0x35, 0x6f, 0x9c, 0x7a, 0x76, 0xcd, 0xbf, 0xc7, - 0x3c, 0xbb, 0x0a, 0xee, 0x5d, 0xcf, 0xae, 0x07, 0xee, 0x09, 0xcf, 0x2e, 0x5b, 0x30, 0xb6, 0x05, - 0xb7, 0x2e, 0x18, 0xdb, 0x77, 0x1c, 0x9a, 0x4c, 0x35, 0x95, 0x05, 0x0b, 0xc7, 0xf8, 0x36, 0xb9, - 0xaa, 0xfe, 0xab, 0x6e, 0xbb, 0xea, 0x9f, 0x7e, 0x81, 0x7f, 0x93, 0x09, 0xe8, 0xf5, 0xa0, 0x61, - 0x14, 0xf5, 0x1c, 0x13, 0xd0, 0xab, 0xf4, 0x86, 0x02, 0x7a, 0x31, 0x81, 0xbc, 0x9c, 0x46, 0x05, - 0x0f, 0xdd, 0x11, 0xa3, 0x82, 0x3f, 0x39, 0x03, 0x78, 0x2d, 0x1a, 0x95, 0x24, 0xc7, 0xa6, 0xec, - 0x8e, 0xe0, 0x5e, 0x8f, 0x8c, 0x1a, 0xdc, 0xcb, 0x19, 0xd4, 0xcb, 0x67, 0xb5, 0x47, 0x7c, 0x98, - 0x64, 0x57, 0x76, 0x51, 0x83, 0xfa, 0x03, 0x1b, 0xe1, 0xe3, 0xb7, 0x28, 0xe4, 0x97, 0x67, 0x1c, - 0x5a, 0x4e, 0xbc, 0xcf, 0x5a, 0x4e, 0x3c, 0x32, 0xea, 0x31, 0xfc, 0x28, 0xab, 0x8a, 0x88, 0x25, - 0x79, 0x01, 0x44, 0x8d, 0xc3, 0x21, 0xaa, 0x98, 0x62, 0xb1, 0x82, 0x75, 0x98, 0x63, 0xf3, 0x00, - 0x96, 0x24, 0x8e, 0x0d, 0x69, 0x43, 0x5d, 0xf1, 0x81, 0x58, 0x51, 0xc4, 0xdf, 0xa8, 0x2c, 0xae, - 0x09, 0x7e, 0x50, 0x54, 0xbc, 0x78, 0x79, 0x30, 0xd4, 0xe8, 0x8d, 0x40, 0x89, 0xbc, 0xbc, 0xe2, - 0xc9, 0x27, 0x9f, 0x7c, 0xae, 0xb8, 0xd8, 0x92, 0x12, 0xa1, 0xdc, 0xb4, 0x07, 0xfb, 0x39, 0x43, - 0xa2, 0x1b, 0xf6, 0x60, 0x3c, 0xb5, 0x07, 0x73, 0x21, 0xd1, 0x0d, 0xb3, 0xb0, 0x53, 0x1c, 0x9a, - 0x0e, 0xbb, 0x4a, 0x0f, 0x13, 0x82, 0xc1, 0xfd, 0x59, 0x95, 0xfe, 0x20, 0xd8, 0xaa, 0x44, 0xbf, - 0x36, 0xfc, 0xb1, 0x6d, 0x9f, 0x01, 0xd7, 0xc5, 0x07, 0x62, 0xc6, 0xd9, 0x60, 0x93, 0x8d, 0xcc, - 0x87, 0x6c, 0x9a, 0x88, 0x2d, 0x01, 0x23, 0x0e, 0x7c, 0xca, 0x96, 0x38, 0x68, 0xb2, 0xed, 0xd3, - 0x6e, 0x11, 0xd7, 0x1e, 0xbb, 0x57, 0x23, 0xae, 0xdd, 0x0f, 0xa2, 0x75, 0xa3, 0xd6, 0x36, 0xff, - 0x8e, 0x53, 0xa5, 0x7f, 0xc3, 0xa1, 0xbf, 0xe6, 0x04, 0x87, 0xfc, 0x4f, 0xfc, 0x8e, 0x73, 0xf5, - 0x54, 0x85, 0xb7, 0x3c, 0xd5, 0x7f, 0x12, 0xdc, 0x54, 0xe3, 0x83, 0x2d, 0x6c, 0x3e, 0x3c, 0xa2, - 0x33, 0x53, 0xdb, 0xe3, 0x97, 0xcf, 0x26, 0xfa, 0x3e, 0x77, 0x17, 0xfa, 0x1f, 0x6f, 0xd7, 0xd1, - 0x03, 0xce, 0x0e, 0x73, 0x35, 0xba, 0x8d, 0x78, 0xce, 0x42, 0xbc, 0x4e, 0x9c, 0x6e, 0x86, 0x0a, - 0x5c, 0x93, 0x9f, 0x0c, 0x68, 0x2d, 0xdf, 0x82, 0x48, 0x0e, 0x7f, 0xf4, 0x62, 0xe2, 0xd8, 0xa5, - 0x44, 0xc7, 0x59, 0x68, 0x4c, 0x02, 0x9b, 0x1a, 0xb9, 0x75, 0x9c, 0x6e, 0xb3, 0x85, 0xff, 0x34, - 0x1b, 0xcd, 0xb2, 0xad, 0x6b, 0xe2, 0x99, 0xe3, 0xa4, 0xa1, 0xb4, 0x9d, 0xe6, 0x38, 0x54, 0x5f, - 0xe9, 0x22, 0x03, 0xff, 0xe3, 0xcd, 0x67, 0xfa, 0xbf, 0x05, 0x12, 0xea, 0x0a, 0x55, 0x7a, 0x05, - 0xbd, 0x24, 0x38, 0xcf, 0xc2, 0x50, 0x49, 0x5b, 0x60, 0x2c, 0x8d, 0x90, 0xfa, 0xdf, 0x70, 0x68, - 0xae, 0xac, 0x44, 0x42, 0x5b, 0x1c, 0xd9, 0x5d, 0x9e, 0x76, 0x4a, 0xaa, 0x0b, 0xd2, 0x29, 0x42, - 0x59, 0x51, 0xf4, 0x8b, 0x8c, 0xae, 0x28, 0xcb, 0xb0, 0x0c, 0x9e, 0xcb, 0xe8, 0x8a, 0x26, 0x83, - 0xb4, 0x26, 0x15, 0x6d, 0x81, 0x78, 0x22, 0x5c, 0x81, 0x8f, 0x31, 0x7e, 0x79, 0x55, 0x95, 0xaa, - 0x50, 0x85, 0xe0, 0x3e, 0x29, 0x71, 0x11, 0x64, 0x3a, 0x8a, 0x0f, 0xec, 0xd1, 0xba, 0xf6, 0x3a, - 0xe3, 0xd1, 0x59, 0xe0, 0xf4, 0x8b, 0x6c, 0x34, 0xcf, 0x6d, 0x94, 0xf1, 0x0f, 0xac, 0xab, 0xc6, - 0x06, 0xac, 0x78, 0x12, 0x00, 0xac, 0x73, 0xe1, 0x99, 0x70, 0x57, 0xd5, 0xbc, 0x36, 0x06, 0x55, - 0x0d, 0x8c, 0x85, 0xfd, 0x58, 0xcd, 0xb1, 0xd8, 0x6c, 0x7b, 0xa0, 0x94, 0x29, 0x5b, 0xab, 0x4a, - 0x32, 0xaa, 0x15, 0xd2, 0x6c, 0x6c, 0x86, 0xf3, 0xc9, 0x6c, 0x8f, 0xb6, 0x27, 0x0b, 0x4d, 0x5b, - 0xa1, 0x44, 0xd2, 0xe9, 0xe1, 0xb3, 0x6e, 0x9d, 0x1e, 0xbe, 0x81, 0x58, 0x9e, 0x63, 0xf6, 0x04, - 0x4e, 0x04, 0x53, 0xe2, 0x66, 0xa9, 0xf8, 0x92, 0xf3, 0xb1, 0xb6, 0x44, 0x2e, 0xa2, 0x56, 0xe3, - 0x9d, 0xa6, 0xbe, 0x11, 0x6f, 0x19, 0xfc, 0x94, 0xcd, 0xa1, 0xca, 0x9e, 0x52, 0xa5, 0x65, 0x68, - 0x89, 0x60, 0x5d, 0x9b, 0xc8, 0x83, 0xf3, 0x6f, 0x5a, 0xc8, 0x3d, 0x95, 0x83, 0xa6, 0xb3, 0x3d, - 0x7e, 0x72, 0x10, 0xab, 0xa0, 0x5c, 0xcc, 0xcd, 0xa4, 0x43, 0xa7, 0x55, 0x2c, 0xab, 0x13, 0xd8, - 0x10, 0x04, 0x55, 0x02, 0xf4, 0x11, 0x1f, 0xb1, 0x8d, 0xac, 0xb5, 0x5c, 0x88, 0x0f, 0x92, 0x57, - 0x8f, 0x7c, 0x05, 0x5a, 0xde, 0x65, 0x0d, 0xa3, 0xa4, 0x4a, 0x2f, 0xa1, 0x17, 0x04, 0xdb, 0x49, - 0xdb, 0x80, 0x23, 0xf3, 0xb5, 0xf9, 0x03, 0x21, 0x82, 0x98, 0xad, 0xe0, 0x37, 0xa2, 0xa9, 0x86, - 0x7a, 0x0d, 0xf3, 0xf6, 0x80, 0xba, 0xf5, 0xc7, 0x42, 0xb0, 0x54, 0x18, 0x02, 0x2d, 0x2d, 0xb6, - 0x5f, 0x3b, 0xbf, 0x8d, 0xe6, 0x19, 0x67, 0x35, 0x3f, 0x45, 0x91, 0x4d, 0xca, 0x92, 0x4d, 0xcf, - 0x86, 0x97, 0x60, 0xcd, 0x4f, 0xb1, 0x6c, 0xe9, 0x5f, 0xd8, 0xc3, 0xa1, 0x59, 0x15, 0xef, 0x29, - 0xf5, 0x9b, 0x70, 0x10, 0x71, 0x12, 0x67, 0x80, 0x7f, 0x19, 0xe5, 0xfb, 0x03, 0x01, 0x25, 0x54, - 0x5d, 0x1b, 0x2e, 0xe0, 0xb0, 0xd0, 0x0e, 0x7b, 0xdc, 0xd3, 0x42, 0x71, 0x0e, 0x70, 0xcc, 0xe0, - 0xb8, 0x4c, 0xa5, 0x76, 0xb4, 0xbe, 0xac, 0x52, 0x95, 0x24, 0xf4, 0xb2, 0xe0, 0x1c, 0x5a, 0x7c, - 0x38, 0xf1, 0x79, 0x34, 0x71, 0xf4, 0x64, 0x20, 0xe8, 0x53, 0x88, 0x9d, 0x0c, 0x36, 0x58, 0x5e, - 0x5f, 0x4f, 0x24, 0xa1, 0x57, 0x38, 0x3a, 0x4a, 0xe1, 0x85, 0x6c, 0xc4, 0xb3, 0x23, 0x84, 0x9b, - 0x82, 0x81, 0xb0, 0x32, 0xde, 0xaf, 0x51, 0x03, 0xbd, 0x46, 0xee, 0x79, 0x82, 0x1c, 0x0b, 0x5a, - 0x5c, 0xe9, 0x8d, 0x78, 0x41, 0x66, 0x82, 0x93, 0x2d, 0xc2, 0xdd, 0x7a, 0x18, 0x06, 0xc7, 0x1b, - 0x85, 0xb7, 0x0c, 0x3e, 0x53, 0xb2, 0x49, 0xd9, 0x92, 0x38, 0xd4, 0x5f, 0x5d, 0x0b, 0xb7, 0x6c, - 0x41, 0x1d, 0x9a, 0x4c, 0xbb, 0xdf, 0x44, 0x82, 0x76, 0x7d, 0x22, 0x32, 0x9e, 0x37, 0x4b, 0xfc, - 0x12, 0xe3, 0x55, 0x97, 0xcd, 0x37, 0x76, 0x8b, 0xe4, 0x18, 0xc0, 0x9a, 0x15, 0x27, 0x41, 0x72, - 0x95, 0x43, 0xc8, 0x1c, 0x99, 0xaf, 0x40, 0x93, 0xfc, 0xe1, 0xaa, 0x0f, 0xfd, 0x61, 0xc8, 0x80, - 0x97, 0x4f, 0x92, 0xbf, 0x90, 0x32, 0x71, 0x21, 0x11, 0xbf, 0x30, 0xe0, 0x60, 0x28, 0xca, 0xfa, - 0x64, 0xa3, 0x15, 0x5f, 0xee, 0x7c, 0x4b, 0xb0, 0xac, 0x81, 0x79, 0x4b, 0x08, 0x54, 0x82, 0xae, - 0xd9, 0x8d, 0xac, 0x59, 0x69, 0xd5, 0xb0, 0x67, 0x9b, 0x09, 0x2e, 0x2d, 0x1a, 0xf6, 0x02, 0xe7, - 0x38, 0x2e, 0xda, 0xf6, 0xc2, 0x7f, 0x93, 0x85, 0x66, 0xaf, 0x0d, 0x54, 0x04, 0x43, 0xbe, 0x60, - 0x00, 0x56, 0x7b, 0x6b, 0x6e, 0x0f, 0x5f, 0xe7, 0x5c, 0xea, 0x2f, 0x55, 0xe9, 0x17, 0xec, 0x52, - 0x17, 0x11, 0xb3, 0x39, 0x3a, 0x51, 0x8c, 0xaa, 0x68, 0x3d, 0x0e, 0xaa, 0xe0, 0xe1, 0xd8, 0xb5, - 0x87, 0x8c, 0xfc, 0x31, 0xd9, 0x78, 0x4a, 0xbf, 0x51, 0xa5, 0x5f, 0x1b, 0xf9, 0x63, 0x6a, 0xc9, - 0x7c, 0xf0, 0x1a, 0x61, 0x36, 0xd7, 0x86, 0xda, 0x35, 0xb5, 0xdd, 0x6d, 0x9e, 0xf1, 0x58, 0xfb, - 0x48, 0xb4, 0x2d, 0x3e, 0x10, 0xd5, 0x39, 0x98, 0xa1, 0x43, 0x5a, 0x4b, 0xab, 0xb3, 0x37, 0x49, - 0x3e, 0x63, 0x58, 0xe9, 0xb8, 0xed, 0x92, 0xb8, 0x10, 0x64, 0x9d, 0xa4, 0x73, 0x57, 0x7f, 0xea, - 0xdc, 0x76, 0x2d, 0x76, 0x0a, 0x20, 0xaa, 0xf0, 0x4a, 0x16, 0x9a, 0x63, 0xed, 0x34, 0x31, 0xee, - 0xbe, 0x35, 0x7e, 0xc9, 0xcf, 0xdd, 0x6e, 0xdb, 0xea, 0x26, 0xa2, 0xbe, 0xad, 0xc3, 0x7a, 0x40, - 0x92, 0x81, 0x13, 0x5f, 0x79, 0x32, 0x26, 0xa1, 0x40, 0xc0, 0x8a, 0xb2, 0x5a, 0x95, 0x96, 0xa3, - 0x4a, 0xc1, 0x75, 0x37, 0xc4, 0x85, 0x2c, 0x14, 0xd8, 0xf6, 0xd0, 0x79, 0x2b, 0xff, 0x97, 0x2c, - 0x34, 0xeb, 0x3e, 0xb4, 0xa6, 0x87, 0xd6, 0x67, 0x55, 0xe9, 0x97, 0xe8, 0x49, 0xc1, 0xb9, 0x47, - 0xe2, 0x22, 0x16, 0x56, 0xe3, 0x03, 0x1d, 0x76, 0x70, 0xfd, 0x97, 0x59, 0x88, 0xbf, 0x0f, 0xac, - 0xde, 0xb2, 0xd7, 0x54, 0x69, 0x05, 0xaa, 0x12, 0x5c, 0xf6, 0xc2, 0x0a, 0x02, 0xce, 0x2d, 0x74, - 0x42, 0x6b, 0x2c, 0xc7, 0x90, 0x50, 0xb0, 0xd0, 0x5a, 0xed, 0x80, 0xd6, 0xd2, 0x31, 0x40, 0xeb, - 0xf5, 0xf2, 0x49, 0x2a, 0x97, 0x93, 0xcf, 0xcd, 0xf4, 0x31, 0x70, 0x7b, 0xc9, 0xb4, 0x25, 0x80, - 0xdd, 0x3e, 0xc6, 0xa9, 0xd2, 0x9b, 0xd4, 0x96, 0xa0, 0x86, 0x9d, 0x30, 0x4c, 0xb2, 0xc8, 0xaa, - 0xd5, 0x5f, 0x42, 0x0c, 0x00, 0x96, 0x18, 0xfa, 0xff, 0x25, 0x52, 0x65, 0x65, 0x29, 0x31, 0x01, - 0x58, 0x22, 0x57, 0xad, 0x5a, 0xbd, 0xae, 0xca, 0xf8, 0x59, 0x0c, 0x09, 0xa5, 0x1d, 0x76, 0x01, - 0x4e, 0x1b, 0x82, 0x29, 0xcc, 0x20, 0xf2, 0x74, 0xeb, 0x28, 0xd4, 0x78, 0x40, 0xb6, 0xe6, 0x9c, - 0xcf, 0x36, 0x62, 0x0e, 0x97, 0x5a, 0x73, 0xce, 0xbb, 0xdf, 0x3b, 0xbd, 0xc5, 0x46, 0xbd, 0x85, - 0x25, 0xc7, 0x3c, 0xbf, 0x92, 0xbd, 0xc7, 0x39, 0x86, 0x2b, 0xdf, 0x8d, 0xdc, 0x63, 0xf6, 0x02, - 0x3f, 0x6b, 0x5a, 0x7b, 0xe4, 0x1a, 0x86, 0x6c, 0x73, 0x4c, 0x6b, 0x8f, 0xc9, 0x64, 0xa4, 0x68, - 0x8b, 0x71, 0xf9, 0xa9, 0xc1, 0x7e, 0xb9, 0x2a, 0xbd, 0x8c, 0x5e, 0x14, 0x9c, 0x87, 0x2f, 0x3e, - 0x04, 0x1e, 0x7b, 0x90, 0x7b, 0x1f, 0x06, 0xc0, 0x37, 0x17, 0x60, 0x90, 0xa5, 0x1c, 0xff, 0x36, - 0x0b, 0xf1, 0x6c, 0xff, 0x89, 0x71, 0x21, 0x7f, 0x65, 0xb9, 0x90, 0xae, 0xb4, 0x1a, 0xb9, 0x87, - 0x38, 0x2a, 0x07, 0xdc, 0xc3, 0x07, 0x49, 0x36, 0xef, 0xd6, 0x6e, 0x6d, 0xf7, 0x51, 0x4d, 0x6d, - 0x87, 0x3c, 0xd8, 0xe4, 0x98, 0xc9, 0xbd, 0xac, 0x53, 0xa5, 0x5a, 0x54, 0x23, 0xb8, 0x6c, 0x89, - 0xf8, 0x04, 0x2b, 0x66, 0x22, 0x8a, 0x4d, 0x3c, 0x37, 0xd3, 0xda, 0x01, 0x53, 0x64, 0xce, 0x0b, - 0xfa, 0x12, 0xd0, 0x78, 0x30, 0x23, 0xbe, 0x00, 0x4d, 0x0a, 0x37, 0xd7, 0xd7, 0x2b, 0x61, 0x72, - 0x2f, 0x65, 0xe3, 0x27, 0x3f, 0x0f, 0xe5, 0x6d, 0x80, 0xe4, 0xdd, 0x59, 0xb8, 0x82, 0xfc, 0x2a, - 0x3c, 0x8d, 0xa5, 0x56, 0xf5, 0xc1, 0x90, 0x4f, 0x1f, 0x46, 0x67, 0x7b, 0x8c, 0x4b, 0xbe, 0xd6, - 0x40, 0xfe, 0x1c, 0x26, 0xa1, 0xe7, 0xb8, 0x6d, 0x84, 0x4e, 0x43, 0x2e, 0x34, 0x9e, 0x04, 0x9e, - 0x4c, 0xbc, 0xff, 0x54, 0x62, 0x7b, 0x8b, 0x71, 0xe5, 0xf3, 0x55, 0x2e, 0x37, 0x9f, 0x9b, 0x99, - 0x9a, 0x64, 0xa3, 0x46, 0xdc, 0x3f, 0x2a, 0xce, 0x82, 0xe8, 0x20, 0x16, 0x80, 0x82, 0x8e, 0x85, - 0x1a, 0x87, 0x59, 0x79, 0x16, 0x0f, 0xbd, 0x88, 0x26, 0x11, 0x60, 0x23, 0xbc, 0xd9, 0xcf, 0x55, - 0xe9, 0x01, 0xc1, 0x28, 0x13, 0xa7, 0x5b, 0xb1, 0x10, 0x86, 0xf1, 0x0f, 0x39, 0xd9, 0xa8, 0xe7, - 0xdf, 0x40, 0x93, 0xc2, 0xef, 0x05, 0x3f, 0xa8, 0xfd, 0xc0, 0x70, 0x23, 0xc0, 0x3a, 0x3b, 0xa3, - 0x4c, 0x2c, 0x26, 0xdd, 0xfb, 0x77, 0x26, 0x8f, 0x6d, 0x25, 0x74, 0xf1, 0xf9, 0xfd, 0xc9, 0x13, - 0xb1, 0x22, 0x43, 0xcf, 0xd0, 0x01, 0xbf, 0x8b, 0x65, 0xa3, 0x0f, 0xcb, 0x89, 0xb2, 0x77, 0xc6, - 0x03, 0x77, 0xc6, 0x98, 0x09, 0x89, 0x58, 0x46, 0xb6, 0x0b, 0x84, 0x16, 0xc6, 0xac, 0x0a, 0xff, - 0xe7, 0x2c, 0x34, 0x83, 0x76, 0x9f, 0x18, 0x57, 0xe6, 0x35, 0x0b, 0xb3, 0xe5, 0x0e, 0x29, 0xae, - 0x02, 0x0b, 0xf2, 0x10, 0x31, 0x02, 0x0b, 0xc3, 0x53, 0xc8, 0xbe, 0x05, 0xe2, 0x23, 0x96, 0x4d, - 0x1b, 0xd3, 0xe5, 0x30, 0x78, 0xfb, 0x63, 0x1c, 0xe2, 0xc9, 0x70, 0x2c, 0x80, 0xff, 0x38, 0xe8, - 0x29, 0x7b, 0x5d, 0x95, 0x5e, 0x45, 0xcb, 0x05, 0x97, 0x91, 0xc5, 0xc7, 0x33, 0x1d, 0xb7, 0x7e, - 0x3b, 0x60, 0xc5, 0xcc, 0xa1, 0x27, 0xb3, 0xd0, 0x6c, 0xcb, 0x40, 0x13, 0xe3, 0xe0, 0x6b, 0x2c, - 0xb8, 0xb2, 0xc0, 0xed, 0xe0, 0xb1, 0x50, 0x69, 0xac, 0x87, 0xef, 0x55, 0xa5, 0xdf, 0xa2, 0xdf, - 0x08, 0x6e, 0x5b, 0x21, 0x96, 0xa6, 0xdb, 0xc6, 0x1b, 0x03, 0x86, 0x68, 0x16, 0x60, 0x4c, 0x50, - 0x54, 0xf2, 0x6f, 0xa3, 0xa9, 0x86, 0x33, 0x0a, 0x23, 0xe3, 0xc1, 0x88, 0xc0, 0x52, 0x21, 0x3e, - 0x9a, 0xe8, 0x8d, 0x69, 0x9f, 0xee, 0x81, 0x4f, 0x6a, 0x7d, 0x07, 0x93, 0x5f, 0x9f, 0x8a, 0x0f, - 0x7c, 0x43, 0xcd, 0x1b, 0x89, 0x7a, 0xd3, 0xd2, 0x87, 0xff, 0x05, 0xca, 0xae, 0xa8, 0x5d, 0x8b, - 0x4f, 0x62, 0x1a, 0x6c, 0xa7, 0xfe, 0x5b, 0x9c, 0x01, 0x6b, 0xa8, 0xa8, 0x5d, 0x4b, 0x16, 0xaf, - 0x97, 0xf2, 0x8b, 0x51, 0x76, 0xa3, 0xd2, 0x48, 0x12, 0xfc, 0xe3, 0x88, 0xb4, 0xfa, 0x6f, 0x03, - 0xab, 0x6a, 0x3b, 0x5b, 0xb4, 0xbe, 0x43, 0x46, 0xfb, 0x46, 0xa5, 0x91, 0x7f, 0x16, 0x65, 0xaf, - 0xa8, 0x5d, 0x8b, 0xb7, 0x7e, 0x1a, 0x68, 0x5b, 0xf4, 0xdf, 0xe2, 0x83, 0xd0, 0x7e, 0x85, 0x31, - 0x38, 0x3b, 0xc3, 0xa5, 0xb2, 0xde, 0xa4, 0x70, 0x70, 0x0a, 0xca, 0x37, 0xb6, 0x97, 0x7f, 0x0b, - 0xe5, 0xeb, 0xf8, 0xb5, 0xc6, 0x0c, 0x98, 0xfa, 0x92, 0x2a, 0x3d, 0x2f, 0xd0, 0x42, 0x71, 0x09, - 0x4b, 0xab, 0x97, 0x78, 0x12, 0x47, 0xbb, 0xe3, 0xb1, 0x4f, 0xa8, 0xaa, 0x14, 0x76, 0x9b, 0x6d, - 0x22, 0xd3, 0xae, 0xfc, 0xfb, 0x30, 0x36, 0xde, 0xd8, 0x2c, 0xd3, 0x54, 0x83, 0x16, 0x8a, 0x2f, - 0x13, 0xc2, 0x8e, 0x58, 0x14, 0x93, 0x4c, 0x77, 0xd8, 0xfa, 0x8d, 0x0c, 0xa9, 0xb6, 0x57, 0x57, - 0x56, 0xc0, 0xdf, 0x45, 0x15, 0xeb, 0x56, 0x2d, 0xa9, 0xae, 0xac, 0x28, 0x2e, 0xd1, 0xba, 0xfa, - 0xc9, 0x7e, 0xd3, 0xa1, 0xf8, 0x67, 0x51, 0x1e, 0x26, 0x49, 0x0c, 0x3a, 0x0c, 0x83, 0x1c, 0x29, - 0x12, 0x67, 0x13, 0x58, 0x8b, 0xed, 0x35, 0xce, 0xa7, 0xba, 0x52, 0x26, 0x95, 0xfc, 0x73, 0x26, - 0x1e, 0x60, 0x4c, 0xe7, 0x29, 0x1e, 0x98, 0xc5, 0xe2, 0x81, 0xf8, 0xc0, 0x60, 0x75, 0xad, 0xf9, - 0x82, 0x2c, 0x67, 0xa9, 0xb5, 0x5c, 0x43, 0x59, 0xff, 0x18, 0x4b, 0xad, 0x15, 0xd8, 0xe8, 0xb4, - 0x0a, 0x37, 0x3a, 0x6d, 0x19, 0xca, 0x5e, 0x57, 0x5b, 0x41, 0x0c, 0xe5, 0xf1, 0xe7, 0xf5, 0xdf, - 0xe2, 0x5c, 0x5b, 0xdf, 0x75, 0xb5, 0x15, 0x9e, 0xea, 0x4a, 0x59, 0xaf, 0xe3, 0xdf, 0xa6, 0xf6, - 0xfe, 0x93, 0x4c, 0xb1, 0xa4, 0x61, 0xef, 0xff, 0x34, 0xdb, 0x11, 0xd2, 0x60, 0x99, 0x36, 0x5e, - 0x97, 0x2e, 0x6b, 0x17, 0xf5, 0xeb, 0x92, 0xb8, 0x78, 0x5e, 0xeb, 0xfd, 0x56, 0x87, 0x8f, 0xdd, - 0xc7, 0xb4, 0x8b, 0x9f, 0x26, 0xfb, 0xda, 0xa8, 0x4f, 0xc0, 0x6a, 0x94, 0xef, 0x53, 0x36, 0xfb, - 0xf5, 0x6d, 0x22, 0x46, 0xf3, 0x4f, 0xaa, 0xd2, 0x52, 0x81, 0x16, 0x8a, 0x8f, 0x56, 0x48, 0x34, - 0x0b, 0x63, 0xea, 0xec, 0x0f, 0xda, 0x89, 0x5d, 0xd5, 0x95, 0x5a, 0xd7, 0x45, 0x1c, 0xd4, 0xc1, - 0xbc, 0x0d, 0xb4, 0x3d, 0xff, 0x9d, 0x49, 0xe6, 0x83, 0xa1, 0xfc, 0x27, 0x9c, 0x2a, 0x1d, 0xe4, - 0x28, 0x9d, 0xdf, 0xce, 0xb1, 0x24, 0x3e, 0x49, 0xf1, 0x65, 0x25, 0xd3, 0x3d, 0x90, 0x75, 0x2c, - 0x3e, 0xd0, 0x67, 0x1a, 0x0f, 0x7b, 0xc0, 0x2e, 0x2d, 0x3e, 0xd0, 0x57, 0xe2, 0x01, 0xe3, 0x5e, - 0xbd, 0x90, 0x78, 0xf4, 0xe9, 0x85, 0x0c, 0x19, 0x4f, 0xfa, 0x03, 0x65, 0x66, 0x34, 0x67, 0x2a, - 0xf7, 0xd0, 0xca, 0x62, 0x4a, 0xe1, 0x1f, 0xe2, 0xd0, 0x74, 0x63, 0x99, 0x24, 0x20, 0x1b, 0x4a, - 0x4f, 0x16, 0x92, 0xfc, 0x91, 0xd8, 0x42, 0xc4, 0xd6, 0xcd, 0x80, 0x74, 0xd6, 0x96, 0x97, 0x1a, - 0xcd, 0x24, 0x0e, 0xf5, 0x03, 0x72, 0xb9, 0x1a, 0xdd, 0x5a, 0x51, 0xbb, 0xf6, 0x6a, 0x74, 0xeb, - 0xaa, 0xaa, 0x55, 0x57, 0xa3, 0x5b, 0x57, 0xd4, 0xae, 0x4d, 0xf6, 0xb5, 0x91, 0x3b, 0x6f, 0x1b, - 0x90, 0x6f, 0xe7, 0x50, 0xfe, 0x47, 0xc1, 0x00, 0x78, 0xca, 0x4d, 0x71, 0xc7, 0xbf, 0x6f, 0x91, - 0x7a, 0xf0, 0x0a, 0xa3, 0xcd, 0xc5, 0x15, 0x54, 0x56, 0x01, 0xc9, 0x24, 0x4d, 0x4c, 0x81, 0xc3, - 0xff, 0xe8, 0xed, 0xf4, 0xfb, 0x7b, 0x6d, 0xa8, 0x1d, 0x77, 0xa9, 0x2c, 0xf2, 0x36, 0x95, 0x86, - 0xdf, 0x53, 0x02, 0x1f, 0xbd, 0xa7, 0x04, 0x4a, 0x9f, 0xf2, 0x2c, 0xf1, 0x3c, 0xf9, 0xcc, 0xd2, - 0xa5, 0x4b, 0x9f, 0x2a, 0x96, 0xe9, 0x90, 0x7c, 0x0b, 0x87, 0x72, 0x31, 0x3b, 0x83, 0x0d, 0xf1, - 0x5d, 0x92, 0xbc, 0xd5, 0x18, 0x4c, 0x0e, 0xec, 0x0f, 0x34, 0x16, 0x5f, 0xb5, 0x41, 0x38, 0x6d, - 0xe5, 0xa9, 0xae, 0xb4, 0x02, 0x53, 0x51, 0x7c, 0xb0, 0xa5, 0x42, 0x22, 0x13, 0x1f, 0x56, 0x71, - 0x90, 0xb4, 0x4e, 0xca, 0x39, 0x15, 0xcb, 0x30, 0x20, 0xbf, 0x83, 0x58, 0x19, 0x1a, 0xe9, 0xe7, - 0x70, 0x48, 0xa5, 0x29, 0xe2, 0x83, 0x6e, 0xd3, 0x31, 0xda, 0x94, 0xeb, 0xcc, 0x8e, 0x60, 0xe9, - 0x46, 0xb1, 0x9e, 0xa1, 0xb9, 0x62, 0x13, 0xdc, 0x31, 0xc1, 0x4d, 0x18, 0xcc, 0xcf, 0x76, 0x2f, - 0xfb, 0xb5, 0x2a, 0xad, 0x43, 0x6b, 0x04, 0x8a, 0x66, 0xc5, 0x57, 0x89, 0x27, 0x81, 0xe3, 0xf5, - 0xb2, 0x9b, 0x4e, 0xf5, 0x5f, 0x4a, 0x74, 0x9e, 0xd4, 0xda, 0x3a, 0x92, 0x5f, 0xf5, 0x27, 0x5a, - 0x0f, 0x68, 0x27, 0x0e, 0x8c, 0x6c, 0x3f, 0x03, 0xc9, 0x44, 0x41, 0xb1, 0x50, 0xf8, 0x0f, 0x38, - 0x34, 0x67, 0xa5, 0x3f, 0x1c, 0xb1, 0x18, 0x89, 0xc9, 0xca, 0xef, 0xf9, 0x10, 0x9a, 0xaa, 0x93, - 0xa1, 0xeb, 0x0c, 0x1b, 0x35, 0xce, 0x54, 0xc9, 0x59, 0x2a, 0xc4, 0xe7, 0x81, 0x6c, 0xdd, 0x4c, - 0xb6, 0x84, 0x9a, 0xc8, 0xbd, 0x17, 0x0c, 0x47, 0x58, 0xab, 0x28, 0x42, 0xe7, 0x6a, 0x2d, 0x67, - 0x46, 0xb6, 0x9f, 0x31, 0x48, 0x5d, 0xcb, 0x50, 0x46, 0x8c, 0x41, 0xd7, 0x09, 0x89, 0x05, 0xf0, - 0x62, 0xb3, 0x96, 0x6e, 0xc0, 0x16, 0x14, 0xfe, 0xdb, 0x6c, 0x34, 0xd7, 0xa5, 0xcb, 0xf8, 0xd7, - 0xce, 0x59, 0x29, 0xdd, 0xb4, 0xda, 0x39, 0x88, 0x39, 0x8e, 0xe9, 0x1d, 0x9e, 0x55, 0xca, 0x11, - 0x51, 0x17, 0xa8, 0xe6, 0xa2, 0x5c, 0x3a, 0xa5, 0xd9, 0xa2, 0xcc, 0x4a, 0x33, 0x62, 0x5b, 0x68, - 0x57, 0x99, 0x3d, 0xc2, 0xaa, 0xcc, 0xc0, 0xb9, 0x6a, 0x8c, 0xa1, 0x89, 0xdd, 0xcf, 0x42, 0x5c, - 0x94, 0xee, 0xfc, 0x46, 0xd1, 0xa5, 0xfd, 0x47, 0x72, 0xba, 0xb5, 0x24, 0x6e, 0xbe, 0x09, 0xa2, - 0x2f, 0xb2, 0x6e, 0x61, 0x9c, 0xf1, 0xda, 0xa5, 0x73, 0x0b, 0xcb, 0x09, 0x65, 0x15, 0xf8, 0x58, - 0xaf, 0xb0, 0x97, 0xe8, 0x9b, 0x07, 0x67, 0xfd, 0xf8, 0xa8, 0xc1, 0x0e, 0x61, 0x08, 0xe3, 0x59, - 0xbb, 0x2b, 0xe9, 0xb3, 0x3a, 0x39, 0xc6, 0x8c, 0x03, 0x08, 0x0c, 0x6c, 0x79, 0x6e, 0x9a, 0x71, - 0xd4, 0x53, 0x33, 0x8e, 0xa2, 0xf8, 0xd0, 0x31, 0xad, 0x6b, 0x5b, 0xe2, 0xe0, 0x05, 0xa0, 0x92, - 0x53, 0xfd, 0x27, 0x49, 0x4c, 0x21, 0x6c, 0x45, 0x64, 0x26, 0x37, 0xc0, 0xc7, 0x49, 0xf0, 0x10, - 0xb6, 0x60, 0x3a, 0x06, 0x2e, 0xbc, 0xd0, 0x8d, 0x3d, 0x2b, 0x68, 0x54, 0xcc, 0xd8, 0x85, 0x10, - 0xd1, 0x8e, 0xfb, 0x11, 0x89, 0x8f, 0x12, 0x05, 0x3c, 0x4e, 0x9f, 0x00, 0x67, 0x11, 0x1f, 0xd8, - 0x63, 0xaa, 0x80, 0xe1, 0x02, 0xef, 0xca, 0x43, 0xf3, 0xdc, 0xfa, 0xff, 0xb4, 0x6e, 0xf0, 0x10, - 0x87, 0x66, 0x92, 0xfe, 0xa6, 0xa1, 0x76, 0x1e, 0x1e, 0xf8, 0x05, 0xfb, 0xc0, 0xee, 0xbb, 0x65, - 0x7c, 0xcf, 0x66, 0xb5, 0x8d, 0xd3, 0x8f, 0x3a, 0x86, 0x16, 0x9f, 0x67, 0xd5, 0xf0, 0x16, 0x13, - 0x66, 0xd2, 0x14, 0xaf, 0x75, 0x47, 0xfc, 0xd2, 0x1e, 0xf0, 0x0e, 0x03, 0x09, 0x0a, 0x1c, 0xa8, - 0xec, 0x18, 0x0e, 0x27, 0x5a, 0xb7, 0x23, 0xa0, 0xfc, 0x31, 0x6a, 0xed, 0x6f, 0x15, 0x0a, 0x5a, - 0xf0, 0x5b, 0x34, 0xd7, 0x75, 0x0f, 0x5c, 0xd4, 0xa8, 0x4b, 0xac, 0x6a, 0xd4, 0x07, 0x5c, 0x6d, - 0x19, 0x30, 0xcf, 0xc8, 0x68, 0x51, 0x7f, 0xab, 0x4a, 0x6f, 0xa3, 0x5f, 0x0b, 0x69, 0xa0, 0x55, - 0x7c, 0x02, 0x70, 0x9c, 0x0d, 0xdc, 0x6f, 0x00, 0xd9, 0xb5, 0xcf, 0x44, 0xd3, 0x31, 0xfa, 0x34, - 0xb1, 0xdc, 0x0a, 0x37, 0x17, 0xe2, 0xc7, 0x46, 0x0b, 0x46, 0x0b, 0xa8, 0xea, 0xee, 0xa7, 0xfb, - 0x7b, 0xc9, 0xe6, 0x48, 0x7c, 0xa3, 0x48, 0xf6, 0x76, 0xe4, 0xf6, 0x7b, 0xd1, 0xe9, 0x4e, 0x7c, - 0x23, 0xef, 0x46, 0xa5, 0x8b, 0x37, 0xf1, 0xa3, 0xa3, 0x78, 0x13, 0xc3, 0x20, 0xb7, 0xc7, 0x99, - 0x38, 0xa2, 0x84, 0x23, 0x77, 0xcc, 0x99, 0xf8, 0x96, 0xe7, 0xe7, 0xbb, 0xef, 0x30, 0x7c, 0x8b, - 0x1c, 0x86, 0xff, 0x91, 0xc9, 0x14, 0x43, 0xe0, 0xd7, 0xb3, 0x77, 0xd2, 0x8f, 0xb6, 0x3c, 0xf4, - 0x4a, 0x66, 0x3f, 0xda, 0x3c, 0x18, 0x64, 0x2c, 0x6e, 0xb4, 0xcf, 0xa3, 0xbc, 0xe0, 0x86, 0x0d, - 0x61, 0x25, 0x82, 0x9d, 0x8a, 0xa7, 0x81, 0x24, 0x95, 0x14, 0x89, 0x33, 0x08, 0x19, 0xb9, 0xb5, - 0x2b, 0x79, 0x7a, 0x70, 0x64, 0x57, 0xd7, 0xf5, 0xf2, 0x1c, 0x21, 0xab, 0xe8, 0x67, 0x32, 0xa9, - 0xe7, 0x5f, 0x40, 0xb9, 0x0d, 0xfe, 0x46, 0x7f, 0x04, 0x3b, 0x13, 0x63, 0x51, 0xd6, 0x42, 0x01, - 0x4a, 0xa8, 0x05, 0x17, 0x8e, 0x47, 0x95, 0xd8, 0x7f, 0x0e, 0xf7, 0xce, 0x15, 0xb2, 0x0b, 0x52, - 0x93, 0x64, 0x68, 0x62, 0x25, 0xaf, 0x66, 0xde, 0x7d, 0xf2, 0x8a, 0xaf, 0x62, 0xfc, 0x4e, 0x67, - 0xe1, 0xf9, 0x14, 0xab, 0xd2, 0xc3, 0x8c, 0xdf, 0xe9, 0x6c, 0x12, 0xe9, 0x3d, 0x75, 0x79, 0x57, - 0x62, 0x90, 0x04, 0xbf, 0x30, 0xf0, 0x8d, 0xe9, 0x67, 0x7a, 0xb7, 0x22, 0xa8, 0x7a, 0x9d, 0xce, - 0x4e, 0xb3, 0x4d, 0xe5, 0xc8, 0x2d, 0x71, 0x68, 0xb2, 0xd8, 0x43, 0xcf, 0x19, 0xb3, 0x3d, 0x74, - 0xd9, 0x71, 0x4e, 0x95, 0x8e, 0x70, 0xa8, 0x87, 0x13, 0x6c, 0x2f, 0xae, 0xb8, 0x8b, 0xd3, 0x5a, - 0xbf, 0xd0, 0x8f, 0xf2, 0xc8, 0xf1, 0xf8, 0xe0, 0x05, 0x76, 0x63, 0xc9, 0x1b, 0x6e, 0xf8, 0x05, - 0x90, 0xd7, 0x1e, 0x37, 0x8b, 0x0f, 0xc4, 0xa4, 0x80, 0x4f, 0x6b, 0xf9, 0x36, 0xf9, 0xed, 0xa0, - 0x19, 0x34, 0xe5, 0x68, 0xf7, 0xc8, 0xf1, 0x4b, 0x6c, 0x33, 0x2d, 0x3a, 0x04, 0x2c, 0xbe, 0xde, - 0xa6, 0xf5, 0xb0, 0x76, 0x79, 0x38, 0xb9, 0xff, 0x24, 0x89, 0xc6, 0xb4, 0xef, 0x4c, 0xa2, 0xef, - 0x04, 0xfb, 0xd1, 0xc2, 0xbf, 0xcd, 0x45, 0x33, 0x2c, 0x93, 0xfb, 0x69, 0x51, 0xc4, 0xdf, 0xa7, - 0xa7, 0x88, 0x7f, 0xe9, 0x46, 0x11, 0x8f, 0x17, 0x52, 0x38, 0x9a, 0x96, 0x14, 0xbe, 0x53, 0xbc, - 0xf8, 0x6d, 0x27, 0x84, 0x89, 0x3b, 0x80, 0x1d, 0x3a, 0x0d, 0x29, 0xcd, 0x0d, 0x90, 0xbc, 0x07, - 0xb3, 0x19, 0xc7, 0x54, 0xbe, 0x85, 0x43, 0xa8, 0xde, 0x1b, 0x80, 0xe8, 0x3e, 0x3e, 0x22, 0x75, - 0xc2, 0xcf, 0x2a, 0x53, 0x2c, 0xae, 0x61, 0xc7, 0x37, 0xb7, 0x02, 0x52, 0xed, 0x6c, 0x1f, 0xd6, - 0x4e, 0x1c, 0x05, 0xa9, 0x6d, 0x91, 0x11, 0x3b, 0xe0, 0x18, 0xec, 0x5d, 0x20, 0xe8, 0x53, 0x4c, - 0xc7, 0xd0, 0xb6, 0x0e, 0xad, 0x65, 0x6b, 0xea, 0xec, 0x00, 0xb4, 0x2d, 0x96, 0x99, 0x2f, 0x38, - 0xac, 0x75, 0xb3, 0x6e, 0x93, 0xb5, 0x2e, 0x7f, 0x88, 0x43, 0x93, 0xbd, 0xcd, 0x91, 0x60, 0x5d, - 0xbd, 0xb7, 0x41, 0x21, 0xd7, 0xec, 0x23, 0x55, 0xfa, 0x40, 0x30, 0x4b, 0xc5, 0xf7, 0x2d, 0x9e, - 0x8f, 0x58, 0xad, 0xa1, 0x0d, 0x5d, 0x4a, 0x44, 0x4f, 0xc7, 0x87, 0x06, 0x92, 0x43, 0x5f, 0x94, - 0x78, 0xb4, 0xde, 0x33, 0x3a, 0xa5, 0xee, 0xa8, 0xd1, 0x67, 0xd2, 0xd6, 0xa1, 0x13, 0xf4, 0x03, - 0x7b, 0x0c, 0x65, 0x0b, 0x4c, 0x8a, 0x8c, 0xe8, 0xe8, 0x21, 0x9b, 0x9f, 0x2d, 0x3c, 0xc1, 0xa1, - 0xe9, 0x56, 0xf8, 0xe4, 0x5f, 0x46, 0xb9, 0x4d, 0x4a, 0xa8, 0xd1, 0x50, 0xe3, 0x17, 0x67, 0x06, - 0xe7, 0xc5, 0xb5, 0x7a, 0x5b, 0x0c, 0x77, 0x32, 0xf4, 0x5b, 0xf0, 0x06, 0x42, 0x66, 0xa1, 0x0b, - 0x30, 0x96, 0x5a, 0x81, 0x31, 0x5d, 0x7c, 0x5e, 0x36, 0x77, 0xdb, 0xdb, 0x68, 0xa6, 0x9d, 0xa1, - 0xe4, 0x57, 0x98, 0xf3, 0xcc, 0x18, 0xe6, 0x17, 0xbf, 0x14, 0xd0, 0x54, 0x9c, 0xca, 0x3e, 0xd4, - 0x64, 0xbe, 0x85, 0x9d, 0x93, 0xd0, 0x03, 0x3a, 0x8c, 0x63, 0x8b, 0xd9, 0x6a, 0x46, 0x1e, 0x49, - 0x0c, 0xed, 0x1c, 0xbe, 0x38, 0x8f, 0xa4, 0x77, 0x86, 0x30, 0x9c, 0x6a, 0x18, 0x55, 0xcd, 0x8f, - 0x95, 0x41, 0x51, 0xf6, 0x28, 0xfb, 0xd6, 0xb1, 0x47, 0x2b, 0xad, 0x86, 0x48, 0x39, 0x86, 0x45, - 0xad, 0xc7, 0x6a, 0x88, 0x34, 0x0b, 0xae, 0x54, 0x8d, 0x59, 0x44, 0xb9, 0x4e, 0xd6, 0x04, 0x69, - 0xb9, 0x4d, 0x25, 0x0a, 0x7c, 0x1c, 0x0e, 0x18, 0x61, 0x55, 0x89, 0xce, 0x00, 0xad, 0x05, 0x55, - 0x86, 0xda, 0xb4, 0x9f, 0xdb, 0x4c, 0xf2, 0x16, 0x58, 0xb6, 0xf7, 0x55, 0x69, 0x23, 0xa5, 0x6e, - 0xdf, 0x61, 0x15, 0x3e, 0x37, 0x4c, 0xdd, 0x56, 0x8f, 0x42, 0xde, 0xba, 0x50, 0xa6, 0x93, 0x7e, - 0x04, 0x65, 0x9a, 0x7f, 0x33, 0x94, 0x29, 0x63, 0x5e, 0x32, 0xf9, 0x16, 0x99, 0x97, 0x7c, 0xc3, - 0xa9, 0xd2, 0x59, 0x0e, 0x7d, 0xc5, 0x09, 0xe9, 0x41, 0x1c, 0x07, 0x9f, 0x71, 0x27, 0x86, 0xc8, - 0x17, 0xef, 0x30, 0x49, 0xf4, 0xd7, 0xd9, 0x68, 0x81, 0xdb, 0x6c, 0x27, 0x9a, 0x89, 0x43, 0xb6, - 0x9b, 0xdb, 0xab, 0x91, 0xac, 0x3c, 0xe8, 0x53, 0x5c, 0x28, 0x24, 0x76, 0xc3, 0x09, 0x85, 0xd4, - 0x78, 0xf3, 0x9e, 0x8e, 0xf8, 0x0a, 0x3a, 0x48, 0x0d, 0x2b, 0x12, 0xb4, 0x4b, 0xf8, 0x89, 0x22, - 0x2a, 0xc3, 0x01, 0x18, 0x62, 0x7e, 0x17, 0x10, 0xc9, 0x4c, 0x06, 0xec, 0x9a, 0x8d, 0xa6, 0x30, - 0xcb, 0x67, 0x34, 0xf0, 0xdc, 0xcd, 0x6b, 0xe0, 0xb3, 0x6e, 0x50, 0x03, 0x6f, 0xb7, 0xdf, 0xc8, - 0xbe, 0x0d, 0xf6, 0x1b, 0x39, 0x37, 0x62, 0xbf, 0x91, 0x7b, 0x83, 0xf6, 0x1b, 0x79, 0x37, 0x6c, - 0xbf, 0xc1, 0x77, 0x99, 0x88, 0x15, 0x64, 0x59, 0x1f, 0xa8, 0x52, 0x84, 0x22, 0xd6, 0xf7, 0x9d, - 0x9a, 0xf4, 0x6b, 0x43, 0xad, 0xe0, 0x98, 0xcc, 0xd2, 0x0d, 0xda, 0xd9, 0x9e, 0xf8, 0xa5, 0xb6, - 0x64, 0xcf, 0x0e, 0x48, 0xa7, 0x49, 0x10, 0x2d, 0xa3, 0x47, 0x2f, 0xf1, 0x18, 0x78, 0xb8, 0xc4, - 0xa3, 0x63, 0xdc, 0xaa, 0xca, 0x12, 0x8f, 0x4d, 0x14, 0x60, 0x60, 0x59, 0x09, 0xe5, 0x81, 0xa6, - 0x98, 0x48, 0xc5, 0x20, 0x06, 0xa6, 0x5e, 0x24, 0x2e, 0xb2, 0xe9, 0x9a, 0xed, 0x3b, 0x4e, 0x3a, - 0xf2, 0x7f, 0xb4, 0xbe, 0x61, 0x20, 0x01, 0x7b, 0x4b, 0x95, 0x7e, 0x65, 0x7d, 0xc3, 0x6e, 0x9d, - 0xc2, 0xd8, 0xf6, 0xe6, 0x31, 0x64, 0x01, 0xfa, 0xd1, 0x86, 0x1c, 0x53, 0x6e, 0xca, 0x90, 0x63, - 0xea, 0xad, 0x37, 0xe4, 0xa8, 0x41, 0x79, 0x4d, 0xde, 0x70, 0xf8, 0x03, 0x1f, 0x91, 0x30, 0xe1, - 0xc0, 0x34, 0xa4, 0x48, 0x2c, 0x36, 0x02, 0xfb, 0x1e, 0xd1, 0x4e, 0xef, 0xd1, 0xda, 0x0f, 0xc0, - 0x53, 0x54, 0xe2, 0x21, 0x71, 0x7d, 0x70, 0xa8, 0xb1, 0xd4, 0xe9, 0xcf, 0xb5, 0xfe, 0x9d, 0x32, - 0xe9, 0xc2, 0xbf, 0x83, 0xf0, 0xa9, 0x12, 0x31, 0x4f, 0xb5, 0x2a, 0x2d, 0x17, 0xc8, 0x01, 0x8a, - 0x2f, 0xd8, 0x0e, 0x1a, 0xe4, 0xcf, 0xcc, 0x81, 0x3c, 0xef, 0x31, 0xe3, 0x9c, 0x61, 0x8d, 0x37, - 0xd0, 0xde, 0xf1, 0x58, 0x67, 0x85, 0x24, 0xe3, 0x61, 0x79, 0x89, 0xb1, 0x3b, 0x99, 0x61, 0x88, - 0xcd, 0x0b, 0x19, 0xbb, 0x93, 0x79, 0xee, 0x76, 0x27, 0x8c, 0xa5, 0xc9, 0xef, 0x68, 0x10, 0xbe, - 0x99, 0x18, 0x63, 0x3f, 0x91, 0x01, 0x63, 0x67, 0xc8, 0xe3, 0x4c, 0xf6, 0x1d, 0x67, 0x70, 0x26, - 0xb7, 0xd6, 0x08, 0xa1, 0xf7, 0x2a, 0xca, 0x8b, 0x78, 0xfd, 0x81, 0x88, 0x11, 0x2f, 0x6e, 0xae, - 0xd3, 0x0d, 0xd8, 0x1f, 0x88, 0x90, 0xb7, 0x05, 0x5a, 0x8a, 0x53, 0x2d, 0xc6, 0x6e, 0xa4, 0x94, - 0xff, 0x33, 0x9a, 0xd6, 0x1c, 0xa8, 0xab, 0x7f, 0x4f, 0xf1, 0x35, 0x37, 0x78, 0xd7, 0x37, 0x28, - 0x58, 0xc4, 0x33, 0xad, 0xfc, 0x4d, 0x55, 0x5a, 0x2b, 0x58, 0x6b, 0xc4, 0x4a, 0xd6, 0x4e, 0x9f, - 0x8a, 0x3c, 0xb5, 0xe8, 0xd0, 0x52, 0x90, 0x88, 0x6a, 0x5d, 0xdb, 0xe2, 0x03, 0x9d, 0xd0, 0xe8, - 0xda, 0x50, 0xfb, 0x32, 0x43, 0x8a, 0xda, 0xc1, 0x56, 0xc8, 0xd6, 0x41, 0xf9, 0x4a, 0xc6, 0xf6, - 0x6b, 0xb6, 0x09, 0xf4, 0xa6, 0xed, 0xd7, 0x03, 0x16, 0xdb, 0xaf, 0x4d, 0xcf, 0x86, 0x3d, 0x7a, - 0x55, 0xc0, 0xdb, 0xa8, 0x30, 0x56, 0x5e, 0xaf, 0xa3, 0x5c, 0xef, 0x46, 0x25, 0x10, 0xc1, 0xa2, - 0x9c, 0x69, 0x90, 0xff, 0x10, 0x4a, 0x0c, 0x1a, 0x47, 0xd2, 0x7f, 0x78, 0xe8, 0xdc, 0x97, 0x69, - 0xbd, 0x67, 0x92, 0xb1, 0xcb, 0xd7, 0x86, 0xda, 0x97, 0xea, 0x13, 0xc4, 0x3f, 0x64, 0xe8, 0xc1, - 0x17, 0xa2, 0x6c, 0xbf, 0xaf, 0x9e, 0x24, 0xb1, 0x99, 0xa9, 0x4a, 0xd3, 0x04, 0xfd, 0xb7, 0x98, - 0x97, 0xe8, 0x8d, 0x25, 0x5a, 0x2f, 0xcb, 0xfa, 0x0f, 0xfe, 0x31, 0x94, 0x13, 0xf2, 0xd6, 0x6f, - 0x22, 0xc9, 0x69, 0x66, 0xa9, 0xd2, 0x74, 0x01, 0x17, 0x40, 0xab, 0x4f, 0x2f, 0xc8, 0xf8, 0x17, - 0x5f, 0x86, 0xa6, 0x00, 0x54, 0x54, 0x34, 0x78, 0xc3, 0x61, 0x92, 0xb5, 0x1e, 0xb3, 0x0f, 0x6c, - 0x39, 0xee, 0xa4, 0x7d, 0xba, 0x47, 0x66, 0x0b, 0xf9, 0x97, 0xd0, 0x64, 0xf2, 0xc2, 0x6c, 0x7e, - 0x1a, 0xc7, 0xe0, 0x22, 0xcf, 0x99, 0x59, 0x2a, 0xce, 0x84, 0xb5, 0xf9, 0x9b, 0x36, 0x3f, 0xad, - 0x53, 0xfa, 0x47, 0xa2, 0xb2, 0x59, 0xc9, 0x57, 0xa3, 0x69, 0x14, 0xbd, 0xe0, 0xed, 0x7d, 0xc0, - 0xb0, 0x30, 0xf5, 0x08, 0xd6, 0x1a, 0xe3, 0x35, 0x49, 0x9c, 0x3f, 0x46, 0xec, 0xe7, 0xac, 0xf5, - 0xfc, 0x73, 0x68, 0xf2, 0xfa, 0x4d, 0x15, 0x24, 0xc5, 0xe4, 0x02, 0xbc, 0xc5, 0x0b, 0x55, 0xa9, - 0x40, 0x30, 0x4b, 0xc5, 0x29, 0x38, 0x73, 0x97, 0x8e, 0x1c, 0x74, 0x6c, 0x44, 0xcb, 0xf9, 0x88, - 0x35, 0xe3, 0xf8, 0xc2, 0x34, 0xbe, 0x90, 0xcc, 0x85, 0x18, 0x4b, 0xbe, 0x71, 0x32, 0x5f, 0x9c, - 0x69, 0x9c, 0x00, 0xb4, 0x25, 0xdf, 0xf8, 0x72, 0x30, 0x4c, 0xc2, 0xcb, 0x7e, 0xd0, 0x74, 0xee, - 0xa3, 0x85, 0xe2, 0x42, 0x8b, 0x85, 0x9f, 0x81, 0x2f, 0x0c, 0xeb, 0x41, 0xa3, 0x19, 0xff, 0xbe, - 0x7e, 0xcf, 0xc2, 0x9b, 0x68, 0x98, 0x27, 0x2c, 0x09, 0x22, 0x45, 0x62, 0x95, 0x0d, 0xa3, 0x26, - 0xda, 0xbe, 0xd0, 0xce, 0x5e, 0xaa, 0xae, 0x2d, 0xa1, 0x26, 0x55, 0x23, 0x6a, 0xab, 0xd6, 0x7f, - 0x09, 0x42, 0xda, 0x93, 0x4f, 0x61, 0x72, 0x9a, 0xc4, 0x58, 0xc7, 0x26, 0x38, 0x32, 0x19, 0xee, - 0x2e, 0x26, 0x32, 0x37, 0x4c, 0xc6, 0x59, 0x52, 0x4a, 0x2c, 0x65, 0xad, 0x85, 0x28, 0x1d, 0x00, - 0xc8, 0x92, 0xa5, 0xd0, 0x60, 0x45, 0x85, 0x9f, 0x64, 0xa1, 0x85, 0x3a, 0x81, 0xb7, 0x0a, 0xc7, - 0xeb, 0xbb, 0xf5, 0x4c, 0x6f, 0x59, 0x8c, 0x53, 0xa5, 0x0b, 0x1c, 0xfa, 0x96, 0x13, 0x32, 0x7d, - 0x47, 0xfc, 0x38, 0x2d, 0xe7, 0x01, 0x91, 0x04, 0xef, 0x0e, 0xff, 0xf1, 0x9f, 0xb2, 0xd1, 0x83, - 0xee, 0xb3, 0xfe, 0x69, 0x72, 0x20, 0x77, 0x37, 0xd6, 0x0a, 0x31, 0xf1, 0xce, 0x78, 0x22, 0xe2, - 0xa3, 0x2c, 0x4b, 0xe2, 0x02, 0x3b, 0x99, 0x19, 0x93, 0xae, 0x2c, 0x34, 0xdf, 0x0c, 0x05, 0x50, - 0x11, 0x52, 0x7c, 0x4a, 0x20, 0xe2, 0xf7, 0x36, 0xc8, 0xca, 0xef, 0xf9, 0x2f, 0x38, 0x34, 0x39, - 0xac, 0x84, 0x36, 0x2b, 0xa1, 0xd7, 0x8d, 0x0b, 0x5a, 0xbe, 0x9b, 0x53, 0xa5, 0x3f, 0x0b, 0x66, - 0xb1, 0xf8, 0xfb, 0xf8, 0xc0, 0xee, 0xc4, 0x6e, 0x42, 0xab, 0x24, 0x7b, 0x76, 0x24, 0x07, 0x77, - 0xc4, 0x07, 0x2f, 0x24, 0x7b, 0x76, 0x6c, 0x52, 0xb6, 0xe8, 0x20, 0xd7, 0x7f, 0x29, 0x1e, 0xeb, - 0xdc, 0xd4, 0xbc, 0x5e, 0x29, 0xc5, 0x8f, 0x16, 0xe4, 0x0c, 0xa7, 0xb7, 0x85, 0xb6, 0xc0, 0xd2, - 0xc3, 0x52, 0x5f, 0xc8, 0xbf, 0x59, 0x09, 0x91, 0x0c, 0x8a, 0xe4, 0x17, 0xf4, 0x48, 0xf4, 0xb6, - 0x55, 0xd7, 0x1a, 0x39, 0xce, 0xe8, 0xad, 0xa3, 0xd3, 0x30, 0x24, 0xb6, 0xe9, 0xd6, 0x22, 0x3e, - 0xc8, 0xee, 0x92, 0x59, 0x45, 0xc3, 0x60, 0xd0, 0x91, 0x0a, 0xaf, 0x65, 0xa1, 0x02, 0xf7, 0x51, - 0xc6, 0xbf, 0x7a, 0xe2, 0x1d, 0x8b, 0x8f, 0xc1, 0x23, 0x69, 0xc0, 0xdf, 0x5c, 0x93, 0x25, 0xf2, - 0x10, 0x01, 0xc5, 0x6f, 0xcf, 0x68, 0x3b, 0xdb, 0x93, 0x3d, 0x3b, 0x52, 0xfd, 0x5b, 0xe3, 0x97, - 0x4e, 0x59, 0x5c, 0x0e, 0x48, 0x18, 0x96, 0xb4, 0xdb, 0x93, 0x76, 0x97, 0x33, 0xc3, 0xe0, 0xdf, - 0x4c, 0x42, 0x0b, 0x2c, 0xe1, 0x84, 0x26, 0x2c, 0x18, 0x5a, 0x5f, 0x8f, 0xac, 0x9b, 0x10, 0x99, - 0xae, 0x45, 0x53, 0xeb, 0x1b, 0xfc, 0x4a, 0x20, 0xb2, 0x0a, 0x47, 0x72, 0x24, 0x3c, 0xfa, 0x32, - 0x9d, 0xd4, 0xb4, 0x54, 0x88, 0x73, 0x61, 0xc1, 0xfa, 0x73, 0x8e, 0x43, 0x40, 0x6a, 0xdd, 0x1d, - 0x5a, 0xdf, 0x41, 0x73, 0x4c, 0x4b, 0x6b, 0x7e, 0x1d, 0x9a, 0x06, 0x93, 0x94, 0x7c, 0xbe, 0x90, - 0x12, 0x0e, 0x13, 0xb9, 0xe7, 0x52, 0xfd, 0xf8, 0xad, 0x35, 0x54, 0x2e, 0x0b, 0x01, 0x85, 0x31, - 0xb5, 0x46, 0x93, 0xa9, 0xce, 0x94, 0xad, 0x8d, 0xf9, 0x15, 0x08, 0xd5, 0x7b, 0x2b, 0x94, 0x50, - 0xa4, 0x52, 0x07, 0xbb, 0x5c, 0x23, 0x01, 0xf7, 0x83, 0x02, 0x53, 0x2c, 0x4e, 0x27, 0xf0, 0x20, - 0x81, 0x62, 0x89, 0x44, 0xe0, 0xf3, 0xc8, 0x4c, 0x1b, 0xbe, 0x16, 0x4d, 0x6e, 0x0e, 0x2b, 0xa1, - 0x35, 0xc1, 0x4d, 0x4a, 0x80, 0x88, 0x40, 0x45, 0x9d, 0x12, 0x32, 0x4b, 0xc5, 0x05, 0x6c, 0x8a, - 0xfa, 0x64, 0xcf, 0x8e, 0x88, 0x5e, 0x6a, 0x49, 0x7b, 0x38, 0x53, 0x36, 0x9b, 0xf3, 0x35, 0x68, - 0x1a, 0xd9, 0xd6, 0xca, 0x60, 0xa3, 0xd7, 0x6f, 0xd8, 0xfe, 0xe3, 0x00, 0x81, 0xd6, 0x1a, 0x6a, - 0x5d, 0x74, 0xf4, 0xa8, 0xd6, 0xdd, 0x41, 0xc7, 0xb2, 0x36, 0xe2, 0x57, 0x23, 0x04, 0x5b, 0xaa, - 0xcf, 0x99, 0xf0, 0xee, 0x4b, 0x70, 0xae, 0x71, 0xb3, 0xd8, 0xc8, 0x35, 0x6e, 0x96, 0xc0, 0x2d, - 0x62, 0x96, 0x4c, 0x6b, 0xf8, 0xd7, 0x75, 0x58, 0xd1, 0x7f, 0xe9, 0x60, 0x0d, 0x3c, 0x7c, 0xa9, - 0xce, 0xc1, 0x99, 0xa5, 0x46, 0xb0, 0x61, 0x5a, 0x60, 0x1b, 0xcd, 0x6c, 0x59, 0xb6, 0x9f, 0x53, - 0xa5, 0xbd, 0x1c, 0xea, 0xe4, 0x84, 0x0c, 0x57, 0xc9, 0x70, 0xbd, 0x4c, 0x8b, 0x05, 0x99, 0xcc, - 0x51, 0x16, 0xf8, 0xb9, 0xc2, 0x59, 0xcf, 0xfd, 0x0a, 0xc7, 0x9c, 0xdd, 0x15, 0xce, 0xdc, 0xf5, - 0x2b, 0x9c, 0x75, 0xd7, 0x0a, 0x0f, 0x64, 0xa1, 0x85, 0x69, 0x27, 0x34, 0xfe, 0x73, 0xe3, 0xeb, - 0xec, 0x25, 0xaa, 0x13, 0x32, 0x2d, 0x21, 0xed, 0xa6, 0x66, 0x46, 0x7a, 0x3d, 0x59, 0x68, 0x81, - 0x25, 0xcb, 0xc7, 0x04, 0x42, 0x7a, 0x59, 0xd6, 0xb7, 0xb7, 0x56, 0x95, 0x56, 0xa1, 0xd7, 0x85, - 0x0c, 0xcb, 0x11, 0x1f, 0xb1, 0xe4, 0xcb, 0x71, 0x7b, 0x62, 0x2c, 0x6f, 0x70, 0x6f, 0x16, 0x5a, - 0x98, 0x76, 0xb4, 0xf1, 0x0f, 0x35, 0xc4, 0x8e, 0x32, 0xd3, 0x12, 0xc4, 0x42, 0x76, 0x47, 0xec, - 0x57, 0x71, 0x14, 0xd8, 0xd9, 0x9d, 0x8b, 0x0a, 0x18, 0xd5, 0xb4, 0x15, 0x72, 0x3e, 0x71, 0x81, - 0x9c, 0x3f, 0xa9, 0x52, 0x98, 0x05, 0x9c, 0x0d, 0xec, 0x41, 0x50, 0xf0, 0xb1, 0x43, 0x0d, 0x06, - 0x9a, 0xf4, 0x10, 0x63, 0x01, 0x18, 0xf8, 0xc1, 0x36, 0xfe, 0x85, 0xbf, 0x89, 0x9a, 0x17, 0x9a, - 0x0f, 0xe4, 0x8b, 0xce, 0x07, 0xf2, 0xe1, 0xf4, 0x0f, 0x24, 0xe9, 0x6e, 0x3e, 0x8f, 0x01, 0x03, - 0x09, 0x33, 0x29, 0xb9, 0x6a, 0x54, 0xa9, 0x52, 0x60, 0x8a, 0xc5, 0xa7, 0xb5, 0xb3, 0x9f, 0x25, - 0x5a, 0x2f, 0x26, 0xbf, 0xea, 0x87, 0xc4, 0xdc, 0xd7, 0x86, 0xda, 0xe9, 0x72, 0xae, 0x46, 0xb7, - 0x9a, 0xd3, 0xbd, 0x1a, 0xdd, 0xca, 0xac, 0x84, 0xda, 0x31, 0x9a, 0x43, 0xf1, 0xbf, 0x41, 0x53, - 0xea, 0x83, 0x81, 0x80, 0x52, 0x0f, 0x1f, 0x84, 0x57, 0xb3, 0x4c, 0x95, 0x96, 0x0a, 0x6c, 0xb9, - 0xf8, 0xc8, 0xc8, 0xc7, 0x3f, 0x24, 0x3a, 0x4f, 0xd2, 0xcf, 0x25, 0x3f, 0xf9, 0x2e, 0xb5, 0x75, - 0x5f, 0xa2, 0xf5, 0x40, 0x2a, 0xda, 0x32, 0xd2, 0x73, 0x7a, 0x64, 0xeb, 0xc7, 0xa6, 0xcd, 0xaa, - 0xd9, 0x8d, 0x51, 0xb8, 0xe5, 0xfe, 0x08, 0x85, 0x5b, 0xde, 0x4d, 0x28, 0xdc, 0x0c, 0x7a, 0x39, - 0x2d, 0x18, 0x19, 0xc6, 0xbe, 0x19, 0x6e, 0x2c, 0x31, 0x6f, 0xdf, 0x96, 0x0d, 0x3a, 0xe4, 0x09, - 0x49, 0x30, 0xd7, 0x5b, 0xf8, 0xc5, 0x31, 0x10, 0xcc, 0x25, 0xaa, 0x54, 0x4c, 0x08, 0xe6, 0x47, - 0x46, 0xdd, 0x1b, 0xab, 0xa7, 0x6e, 0xfa, 0x5d, 0x1a, 0xf3, 0x66, 0xa7, 0xc5, 0x08, 0x0b, 0x50, - 0x41, 0x75, 0xc0, 0x1f, 0x59, 0x6e, 0xb7, 0x9c, 0x94, 0x95, 0xdf, 0x17, 0x2e, 0x44, 0x0f, 0xa4, - 0xa9, 0x0b, 0x37, 0x15, 0x1e, 0xce, 0x42, 0xf3, 0x24, 0x9f, 0x8f, 0x54, 0x2a, 0x3e, 0xc6, 0x34, - 0xfb, 0x2d, 0x77, 0x5b, 0x50, 0xce, 0x14, 0x7e, 0xba, 0xda, 0x82, 0x4e, 0x67, 0x2d, 0x3f, 0xab, - 0x2b, 0xdd, 0xcd, 0x39, 0x5f, 0x70, 0xa2, 0x01, 0x9c, 0x37, 0x8a, 0x41, 0x03, 0xd3, 0xc1, 0xe8, - 0xc4, 0xcd, 0xb8, 0x4d, 0x51, 0xa5, 0xf5, 0xe8, 0x77, 0x42, 0x9a, 0x89, 0x8b, 0x8f, 0x6a, 0xe7, - 0x76, 0x12, 0x8a, 0x6e, 0xf7, 0x31, 0xad, 0xe5, 0xa4, 0xcd, 0x14, 0xd5, 0xa0, 0x76, 0xdc, 0x26, - 0x66, 0x09, 0x88, 0xd8, 0x9b, 0x85, 0xe6, 0xbb, 0x7e, 0x62, 0xfc, 0xbf, 0x40, 0xeb, 0x55, 0xe9, - 0x5d, 0xf4, 0x8e, 0x90, 0x6e, 0xfa, 0xa2, 0x30, 0x96, 0x2d, 0x1a, 0xe5, 0x15, 0xfa, 0x4f, 0xb3, - 0x11, 0x6f, 0xc4, 0xe2, 0x0c, 0x36, 0xfb, 0x0c, 0x01, 0xda, 0xbb, 0x68, 0x12, 0x31, 0xda, 0x24, - 0xa0, 0x52, 0xa5, 0x4a, 0x45, 0x24, 0xd0, 0x25, 0xd6, 0x2e, 0x2e, 0x8c, 0xc7, 0xf6, 0x52, 0xb3, - 0xec, 0xd4, 0x9e, 0xf3, 0x89, 0x03, 0xbb, 0xa8, 0x8e, 0xf1, 0x7a, 0xf9, 0xfc, 0xd0, 0xdc, 0x99, - 0x59, 0x05, 0x73, 0x1c, 0x31, 0x35, 0x65, 0x63, 0x54, 0xfe, 0x45, 0x94, 0x13, 0x30, 0x7d, 0x05, - 0x8a, 0xb1, 0xbb, 0xbc, 0x5e, 0x20, 0xce, 0xa5, 0x03, 0xc7, 0x07, 0xfa, 0xf4, 0x51, 0x89, 0xb7, - 0x00, 0x90, 0x2c, 0xaf, 0xc8, 0xb8, 0x15, 0xbf, 0x9d, 0x43, 0xf9, 0x8a, 0xcf, 0x1f, 0xc1, 0x4a, - 0x04, 0xd8, 0xd0, 0x8d, 0xaa, 0xe4, 0x13, 0x68, 0xa1, 0xf8, 0x26, 0x3c, 0x72, 0x75, 0x5e, 0x6f, - 0x9d, 0x0e, 0x80, 0x47, 0x3e, 0xa3, 0xba, 0x18, 0x62, 0x7a, 0xd0, 0xd5, 0x9f, 0x1c, 0x3a, 0x90, - 0xfa, 0x61, 0x2f, 0xa4, 0x3d, 0x20, 0x56, 0xa2, 0xd8, 0xaf, 0x00, 0xdb, 0x93, 0xee, 0x00, 0x75, - 0x21, 0xcd, 0x45, 0x49, 0xda, 0xf7, 0xef, 0x95, 0xe9, 0x37, 0xf8, 0x43, 0x1c, 0x42, 0x41, 0x23, - 0x08, 0x74, 0x98, 0xe0, 0x1f, 0xd1, 0x81, 0x7f, 0x1c, 0xdb, 0xbb, 0x98, 0x46, 0x8e, 0x26, 0x42, - 0xe7, 0x4a, 0x55, 0x92, 0x04, 0x66, 0x28, 0xf1, 0x49, 0x08, 0xa8, 0x90, 0x38, 0xb6, 0x4b, 0xdb, - 0xb5, 0x33, 0x75, 0xb9, 0x3b, 0x39, 0xf8, 0x9d, 0x76, 0xf6, 0xd3, 0x64, 0xe7, 0x39, 0x22, 0xf9, - 0x3d, 0xbf, 0x1f, 0xbc, 0x19, 0xe0, 0x75, 0x82, 0xec, 0x3a, 0x32, 0x33, 0x00, 0xff, 0x3d, 0x87, - 0xa6, 0x62, 0x43, 0x57, 0x63, 0x72, 0xb9, 0x78, 0x72, 0x4f, 0x8d, 0x61, 0x72, 0x55, 0x4c, 0x37, - 0x98, 0xde, 0xdb, 0xaa, 0xf4, 0xa6, 0x60, 0x19, 0x4e, 0x7c, 0x95, 0xcd, 0x74, 0x43, 0x03, 0x42, - 0x13, 0x81, 0xed, 0xae, 0x2f, 0x61, 0xf3, 0xa0, 0x96, 0x4d, 0x7c, 0x03, 0xd6, 0x6c, 0x20, 0x3e, - 0x83, 0xed, 0x97, 0x2d, 0xe3, 0xf2, 0x7f, 0x87, 0xa3, 0xf2, 0x07, 0x9b, 0x7d, 0x26, 0x72, 0x25, - 0x3e, 0x82, 0x0b, 0x5c, 0xa6, 0x6e, 0x20, 0x74, 0xe2, 0x5c, 0x6d, 0xef, 0x29, 0x6e, 0xe7, 0xf4, - 0x53, 0x8f, 0xed, 0xa5, 0x21, 0xce, 0xa9, 0x0e, 0x38, 0xf5, 0xdd, 0xa9, 0x44, 0xeb, 0x45, 0x56, - 0xe3, 0x4c, 0xd3, 0xf6, 0xb3, 0xf9, 0x04, 0xc1, 0x7d, 0x99, 0x48, 0x5d, 0x87, 0x3f, 0x26, 0xb7, - 0xef, 0x6a, 0x74, 0x2b, 0xf1, 0xac, 0x89, 0x0f, 0xec, 0x49, 0x7c, 0x73, 0x3c, 0xd1, 0xdb, 0x06, - 0xa1, 0xba, 0x12, 0x07, 0x2f, 0xc4, 0x87, 0x7a, 0x40, 0xcd, 0xa7, 0xaf, 0x19, 0x12, 0xd3, 0xda, - 0xa7, 0xc5, 0xff, 0x01, 0x4d, 0x0d, 0x86, 0x57, 0xe1, 0x65, 0x60, 0xcf, 0x8a, 0x49, 0x78, 0x81, - 0xf3, 0xec, 0x0b, 0x5c, 0x5d, 0x87, 0x7d, 0x99, 0x5f, 0x56, 0xa5, 0x17, 0x04, 0x4b, 0x07, 0xb1, - 0x84, 0x2e, 0x6b, 0x35, 0x81, 0x6e, 0xba, 0x30, 0x36, 0x94, 0x3b, 0xc1, 0x41, 0x96, 0xbe, 0xbc, - 0xca, 0xa1, 0x59, 0xe4, 0x43, 0xcc, 0x14, 0xf2, 0xd3, 0xec, 0x31, 0x69, 0xb8, 0x31, 0x54, 0xae, - 0x13, 0x1b, 0x82, 0xb3, 0xa7, 0xb8, 0x94, 0xce, 0x85, 0xcd, 0xff, 0x03, 0xb3, 0xd2, 0xa1, 0x15, - 0xc3, 0x86, 0x65, 0x3e, 0xce, 0x41, 0xf8, 0x3d, 0x1c, 0x9a, 0x4d, 0xb5, 0x40, 0xcc, 0xb4, 0x50, - 0x7a, 0x67, 0x66, 0x68, 0xba, 0x31, 0x54, 0xfe, 0xbc, 0x2a, 0x3d, 0x2b, 0xb8, 0xf5, 0x16, 0x1f, - 0xa1, 0x53, 0xb3, 0x58, 0x1c, 0xb2, 0x73, 0x71, 0xeb, 0xc7, 0xbf, 0x61, 0x26, 0x24, 0x98, 0x62, - 0x98, 0x57, 0x2c, 0x30, 0x13, 0x12, 0xcc, 0x30, 0x5e, 0xf3, 0x4f, 0xb4, 0xc1, 0x18, 0x8e, 0x25, - 0x95, 0x01, 0xdf, 0x91, 0xfc, 0x04, 0x2b, 0xd1, 0x34, 0x0c, 0x05, 0xb5, 0x86, 0x7b, 0xd3, 0x54, - 0xc3, 0x98, 0xee, 0xe7, 0x82, 0xb5, 0x46, 0xe4, 0x21, 0x15, 0x0d, 0xdc, 0x77, 0xa0, 0x46, 0x65, - 0x6b, 0x13, 0x3e, 0xca, 0xa1, 0xbc, 0x7a, 0x70, 0xcf, 0x07, 0x35, 0xf7, 0x7b, 0xaa, 0xa4, 0x08, - 0xa4, 0x48, 0x7c, 0x1b, 0xee, 0x9d, 0xd6, 0x77, 0x30, 0x71, 0xf6, 0xfb, 0x12, 0x4f, 0xfc, 0xf2, - 0x11, 0xad, 0xef, 0xd0, 0x48, 0x74, 0xdb, 0x48, 0x4b, 0x87, 0xd6, 0xbd, 0x23, 0x79, 0xba, 0x03, - 0x0f, 0xa6, 0x63, 0x39, 0xc6, 0x39, 0xbf, 0x84, 0x84, 0xec, 0x81, 0xc0, 0xfe, 0x38, 0xbe, 0x56, - 0xb0, 0xd9, 0xe7, 0x79, 0x3f, 0x1c, 0x0c, 0xa4, 0x4e, 0x7f, 0x9e, 0xf8, 0xb4, 0x9b, 0x00, 0x33, - 0xf9, 0x08, 0xff, 0x86, 0x35, 0x49, 0xc7, 0x74, 0x43, 0x94, 0x52, 0x62, 0x4d, 0xc3, 0xf1, 0x10, - 0xa4, 0xde, 0x80, 0xa4, 0x02, 0xfd, 0xa7, 0x92, 0x83, 0x3b, 0xe3, 0x83, 0x7b, 0x92, 0x83, 0x1d, - 0x86, 0x1e, 0x8d, 0xcd, 0xc8, 0xb1, 0xd2, 0xe2, 0x12, 0x04, 0xea, 0x70, 0x4c, 0xaa, 0xb1, 0x2e, - 0x41, 0x0b, 0x33, 0x98, 0xb1, 0x5a, 0xdc, 0x80, 0xaa, 0x51, 0x9e, 0x12, 0xc0, 0xef, 0xc3, 0x4c, - 0x43, 0xfc, 0xb6, 0x58, 0x20, 0x45, 0xe2, 0xa3, 0xe0, 0x35, 0x96, 0x6c, 0x6b, 0x25, 0x16, 0xb9, - 0xe4, 0xfd, 0x3d, 0x4c, 0xdc, 0x23, 0xba, 0xfa, 0x53, 0xa7, 0xb7, 0xca, 0xa4, 0x35, 0xff, 0x27, - 0x9a, 0xf2, 0x06, 0x9b, 0x77, 0xcf, 0x72, 0x57, 0x1e, 0x60, 0x24, 0x5a, 0x63, 0xb6, 0x23, 0xae, - 0x52, 0x4c, 0x4f, 0xf1, 0x09, 0x77, 0x74, 0x84, 0x2d, 0x1f, 0xd9, 0xc3, 0x90, 0xd9, 0x5e, 0xfc, - 0xfb, 0x28, 0x5f, 0xdf, 0x74, 0xfc, 0x6d, 0x1e, 0x7f, 0xfb, 0x61, 0xd7, 0x6f, 0x43, 0xa0, 0x04, - 0x33, 0xa8, 0x31, 0xed, 0x25, 0x2e, 0xb2, 0x7d, 0x37, 0x1e, 0xdb, 0x6b, 0xf9, 0x1c, 0x6d, 0xa9, - 0x5f, 0xc4, 0xa9, 0x4d, 0x0d, 0xde, 0xc8, 0x86, 0x60, 0xa8, 0x11, 0x7f, 0x70, 0xf6, 0x98, 0xdf, - 0x8d, 0x5a, 0xa6, 0x1b, 0xbc, 0x1b, 0x78, 0xcb, 0x2d, 0xc3, 0x89, 0x8b, 0x8c, 0x54, 0x63, 0x24, - 0x7d, 0x84, 0x0d, 0x0a, 0x65, 0x4b, 0xeb, 0x05, 0x6f, 0xa1, 0x19, 0xb6, 0xa7, 0xf2, 0xd6, 0x25, - 0x6a, 0xf8, 0x0d, 0x9a, 0xe5, 0x78, 0xe9, 0x6e, 0xdd, 0xe8, 0x2f, 0xa3, 0x59, 0x8e, 0xfd, 0xb8, - 0x21, 0x2d, 0xe9, 0x3a, 0x55, 0xaa, 0x43, 0x6f, 0x08, 0x2e, 0xc4, 0x99, 0x38, 0x0b, 0x30, 0x0f, - 0xb9, 0x53, 0x24, 0x9a, 0x16, 0x21, 0xac, 0xae, 0x70, 0x98, 0x40, 0xba, 0xc2, 0x59, 0x90, 0xbe, - 0x5e, 0x0f, 0x88, 0xa8, 0xf0, 0x3b, 0x0e, 0xcd, 0xb6, 0x8c, 0x39, 0x21, 0x74, 0x82, 0x85, 0x7f, - 0x35, 0xdb, 0x08, 0xad, 0x67, 0xa1, 0x53, 0x5f, 0xb7, 0xd3, 0xa9, 0xcb, 0x70, 0x8c, 0x5f, 0x52, - 0x36, 0x0a, 0x95, 0x4a, 0x73, 0xc8, 0x10, 0x9a, 0xf4, 0x05, 0x0b, 0x4d, 0x5a, 0x34, 0x3a, 0x4d, - 0x4a, 0x06, 0x98, 0x78, 0x24, 0xa9, 0x73, 0x27, 0xc7, 0x11, 0x49, 0xea, 0x32, 0xb9, 0xfb, 0x24, - 0xe9, 0x7d, 0x92, 0xf4, 0xa7, 0x4d, 0x92, 0xbe, 0x6e, 0x06, 0x36, 0x9d, 0x62, 0x20, 0xba, 0x34, - 0x81, 0x4d, 0x81, 0x18, 0x8d, 0xe6, 0x8b, 0xd3, 0x19, 0x6a, 0x14, 0x13, 0xa3, 0x46, 0x3e, 0xdb, - 0xfb, 0xc4, 0xe8, 0x9d, 0x26, 0x46, 0xdf, 0xb1, 0x11, 0xa3, 0x55, 0xaa, 0x54, 0x4e, 0x89, 0xd1, - 0x67, 0xc7, 0x42, 0x8c, 0x16, 0x81, 0x0d, 0x50, 0x24, 0xd4, 0xac, 0x24, 0x5a, 0x0f, 0x60, 0x47, - 0xd3, 0xe2, 0xfb, 0x04, 0x6a, 0x7a, 0x02, 0xd5, 0xe5, 0x15, 0xb9, 0x4f, 0xa0, 0xde, 0x4a, 0x02, - 0x95, 0xe4, 0x90, 0x9a, 0x03, 0x1b, 0x4d, 0x1e, 0x1f, 0x83, 0x44, 0x25, 0x39, 0xfb, 0xc0, 0x11, - 0xd4, 0x49, 0xa3, 0x1a, 0x98, 0xa8, 0x70, 0x57, 0x16, 0x9a, 0x6d, 0x39, 0xa9, 0x89, 0x61, 0xa1, - 0xf6, 0x86, 0xc5, 0x44, 0x67, 0xae, 0x2b, 0xb0, 0x5b, 0xcc, 0x72, 0x68, 0x2a, 0x30, 0xc8, 0x09, - 0xc4, 0x86, 0x55, 0x03, 0xfd, 0x42, 0xe1, 0x3f, 0xe1, 0x10, 0x6f, 0xa8, 0x1a, 0x19, 0x02, 0xf7, - 0x1d, 0x3b, 0x81, 0x5b, 0x71, 0x03, 0x04, 0xee, 0xe8, 0x62, 0xd8, 0x02, 0x34, 0xc9, 0x1f, 0x5e, - 0x1e, 0x0c, 0xd5, 0xc3, 0xbe, 0xe5, 0xcb, 0xc6, 0xcf, 0xb2, 0x32, 0x55, 0x7a, 0x06, 0xfd, 0x52, - 0x70, 0x99, 0x93, 0x38, 0x97, 0xc4, 0x1b, 0x34, 0xd6, 0x61, 0x3f, 0x5f, 0x7c, 0xaa, 0x96, 0x7e, - 0xf7, 0xe8, 0xa9, 0x6a, 0x17, 0xbf, 0x81, 0xad, 0x48, 0x7b, 0xaa, 0xbd, 0x1c, 0x8e, 0x6d, 0x6c, - 0x39, 0xd2, 0x55, 0xf6, 0x23, 0x7d, 0x52, 0x9f, 0x1a, 0x3d, 0xd2, 0x29, 0x4c, 0x40, 0x9b, 0x31, - 0x1c, 0xa1, 0x71, 0x50, 0xf6, 0xcf, 0x98, 0xc1, 0xe8, 0x2e, 0xc6, 0x87, 0x3f, 0x76, 0xbf, 0x88, - 0x85, 0xff, 0x30, 0x0b, 0xcd, 0x34, 0xfb, 0x4d, 0x8c, 0x53, 0x7a, 0x7d, 0x2c, 0xa7, 0x34, 0xc6, - 0x6c, 0x51, 0x65, 0xcb, 0x55, 0xa9, 0x02, 0x49, 0x82, 0x63, 0x13, 0xc4, 0xb9, 0xb0, 0x7b, 0x26, - 0x8c, 0x67, 0x56, 0xa3, 0x24, 0x73, 0xd0, 0x4c, 0xd0, 0x0c, 0x32, 0x07, 0xfd, 0x9a, 0xfd, 0xa0, - 0x97, 0xde, 0xc0, 0xdd, 0xcd, 0x09, 0x65, 0x15, 0xcc, 0x31, 0x2f, 0xea, 0x53, 0x16, 0xde, 0xd4, - 0x33, 0x1a, 0x6f, 0x3a, 0xae, 0x78, 0xd2, 0x65, 0xa6, 0x38, 0x15, 0x74, 0xef, 0x38, 0x9f, 0x03, - 0x15, 0xa7, 0x4e, 0xa6, 0x82, 0x54, 0x53, 0x5c, 0xba, 0xcc, 0x1e, 0xc7, 0x7f, 0x7e, 0x1a, 0x72, - 0x37, 0x03, 0x51, 0x9b, 0xf7, 0x23, 0x88, 0xda, 0xb2, 0x03, 0x9c, 0x2a, 0xa9, 0x1c, 0xea, 0xe2, - 0x04, 0xc7, 0xb9, 0x8a, 0x7f, 0xb0, 0xc3, 0x86, 0x61, 0xd9, 0x4d, 0xf3, 0xf4, 0x6b, 0x3b, 0x0f, - 0xc7, 0x63, 0x3b, 0x93, 0x9f, 0x9c, 0xd5, 0xb9, 0x65, 0x4c, 0xf9, 0x02, 0xbf, 0x96, 0x1c, 0xdc, - 0xa1, 0x75, 0xb7, 0x42, 0x39, 0xd9, 0x65, 0x3c, 0x94, 0xd9, 0xb7, 0xe5, 0x0c, 0x70, 0x7c, 0x5a, - 0xeb, 0xe1, 0xf8, 0x40, 0xcc, 0xb8, 0xc2, 0x67, 0x46, 0x76, 0x75, 0x41, 0xfb, 0xc2, 0x1f, 0xb2, - 0xd0, 0x2c, 0x66, 0x46, 0x13, 0xe3, 0xce, 0xbe, 0x6a, 0xd1, 0xd0, 0xa7, 0xb9, 0xb3, 0xac, 0x2d, - 0x37, 0xdc, 0x59, 0xad, 0xf5, 0x9c, 0x8e, 0x59, 0xd9, 0x0b, 0xfb, 0x8a, 0x2a, 0xbd, 0x88, 0x9e, - 0x17, 0x9c, 0x5b, 0x30, 0xd6, 0x1b, 0x5b, 0x38, 0x3c, 0x1b, 0xcd, 0x03, 0x01, 0x18, 0x65, 0xd9, - 0x8c, 0x0b, 0xfb, 0x2c, 0xb9, 0x64, 0x9c, 0x11, 0x30, 0x6b, 0x3e, 0xb9, 0x64, 0xc4, 0x65, 0x05, - 0x1f, 0x1f, 0x88, 0x7e, 0xc0, 0x96, 0xf2, 0xff, 0xe3, 0xc8, 0x45, 0xfb, 0x0b, 0xa7, 0x2a, 0xdc, - 0xab, 0x4a, 0x2f, 0xb1, 0xaa, 0xf0, 0x65, 0x74, 0x8c, 0x44, 0x5b, 0x94, 0x86, 0x59, 0xa5, 0x21, - 0x9d, 0x70, 0x30, 0xa5, 0xf8, 0x40, 0x4c, 0xbf, 0x64, 0x96, 0xdc, 0x84, 0x59, 0x63, 0xca, 0x4d, - 0xf8, 0x0e, 0x75, 0xaa, 0xcb, 0x36, 0xf5, 0xb5, 0x86, 0x53, 0xdd, 0x22, 0xe7, 0xa7, 0xc1, 0x7b, - 0xc6, 0xb0, 0x07, 0xd3, 0x5f, 0x19, 0xae, 0xc0, 0xe3, 0x7c, 0x65, 0x0c, 0xb7, 0xba, 0x0d, 0x68, - 0x06, 0xb0, 0x1a, 0x52, 0x73, 0x24, 0x18, 0xc6, 0x71, 0x20, 0x72, 0xf0, 0xe1, 0xe3, 0x54, 0xe7, - 0xf6, 0x3a, 0xf1, 0x71, 0x82, 0x3c, 0x86, 0xa2, 0x5a, 0x77, 0x3f, 0xcb, 0xe8, 0x52, 0x47, 0x2e, - 0x12, 0x29, 0xc7, 0xd6, 0x91, 0xdf, 0x8c, 0xa6, 0x18, 0xc1, 0x1d, 0xfc, 0x81, 0x8d, 0xe9, 0xcc, - 0xf4, 0x25, 0xb3, 0x09, 0x44, 0xd8, 0xc5, 0x56, 0xa6, 0x6c, 0x4f, 0xb1, 0xc0, 0xe2, 0xf9, 0x09, - 0x6f, 0x20, 0x26, 0xe3, 0xaf, 0x97, 0xe7, 0xee, 0xe6, 0xb2, 0x66, 0x72, 0x32, 0xdb, 0x9c, 0xdf, - 0xc7, 0xa1, 0xe9, 0x0d, 0xde, 0xe6, 0x40, 0xfd, 0x7b, 0x34, 0x8e, 0x6e, 0x9e, 0x7b, 0x7e, 0x9a, - 0x95, 0xb8, 0x15, 0x70, 0x32, 0xcd, 0x60, 0x78, 0x50, 0xbe, 0x42, 0x95, 0x5e, 0x10, 0x6c, 0xfd, - 0x45, 0x01, 0xbe, 0x9d, 0x38, 0x78, 0x01, 0xf0, 0x1b, 0x4c, 0x02, 0x3c, 0x10, 0x29, 0x53, 0x01, - 0xa0, 0x4a, 0xe7, 0x64, 0x1b, 0x83, 0xdf, 0x4c, 0x7d, 0xfb, 0x26, 0x65, 0xd2, 0x2d, 0xdb, 0x01, - 0xd9, 0xe2, 0xe6, 0x87, 0x7d, 0x91, 0x0c, 0x37, 0xbf, 0x87, 0x74, 0x2a, 0xd4, 0xea, 0x04, 0x89, - 0x6b, 0x6c, 0x1e, 0x7f, 0xdb, 0x38, 0xea, 0xf2, 0x97, 0x7f, 0x43, 0x1f, 0xc6, 0x9e, 0x80, 0xe4, - 0xc3, 0xe0, 0x7a, 0x49, 0xfc, 0x01, 0x8b, 0x9d, 0x1f, 0x4e, 0xf6, 0xec, 0x48, 0x9c, 0x3f, 0x4e, - 0xfd, 0x7d, 0x8a, 0xb4, 0xd8, 0x51, 0x6d, 0x68, 0x7b, 0x31, 0x75, 0x16, 0xdc, 0x00, 0xee, 0xd5, - 0xab, 0xeb, 0x88, 0x5d, 0x2d, 0x0e, 0x04, 0x45, 0x8a, 0x44, 0x89, 0x8e, 0x37, 0x12, 0x6d, 0x03, - 0xe6, 0x1b, 0x82, 0x06, 0xaf, 0xae, 0xc3, 0xb2, 0xb3, 0x6d, 0xc9, 0x96, 0xd3, 0x3a, 0x43, 0x49, - 0xde, 0xa5, 0x3e, 0xd8, 0x6e, 0x7d, 0xdf, 0x0d, 0x3f, 0x42, 0x99, 0x0c, 0xc5, 0x6a, 0xfb, 0xd0, - 0x2d, 0xd2, 0xf6, 0x9d, 0xe2, 0x98, 0x40, 0x86, 0x96, 0x70, 0x71, 0x66, 0x28, 0xc3, 0x2d, 0x74, - 0xf3, 0x48, 0xb4, 0xc2, 0x1f, 0x8e, 0xa4, 0xbe, 0x3f, 0x00, 0x94, 0x24, 0x79, 0x99, 0x0e, 0x5c, - 0x4a, 0x1c, 0x6f, 0xa5, 0x32, 0x4c, 0xf8, 0x09, 0x4f, 0x48, 0x7c, 0xa0, 0x13, 0xe4, 0x2a, 0x57, - 0xa3, 0xdb, 0xd8, 0x24, 0xe0, 0xf4, 0x21, 0x49, 0x9d, 0xda, 0x0a, 0xf2, 0x3f, 0xbd, 0xe4, 0x72, - 0xcb, 0xc8, 0xf1, 0xc1, 0xc4, 0xa1, 0x7e, 0xe2, 0x26, 0xc7, 0xc4, 0x3e, 0x7c, 0x0f, 0xa1, 0xfa, - 0x60, 0x20, 0xdc, 0xdc, 0xc8, 0x04, 0xdc, 0xc2, 0x52, 0x35, 0xa6, 0x58, 0x7c, 0xc6, 0xfc, 0x1b, - 0xa2, 0x35, 0x87, 0x94, 0x70, 0xb0, 0x39, 0x54, 0xaf, 0x80, 0x7c, 0x2a, 0x04, 0xb6, 0xeb, 0xc9, - 0x7d, 0xdf, 0xa6, 0xfa, 0x2f, 0xa6, 0xbe, 0xdf, 0x91, 0x88, 0x75, 0x83, 0x40, 0x44, 0x66, 0x06, - 0xe1, 0xdf, 0xb7, 0x85, 0xa9, 0x9e, 0x3d, 0x86, 0x30, 0xd5, 0xd8, 0x3e, 0xc9, 0x1a, 0xa6, 0x7a, - 0xae, 0x89, 0x89, 0xf1, 0xe9, 0xc3, 0x22, 0xad, 0xc1, 0xa8, 0xf9, 0x0f, 0x51, 0x4e, 0xc4, 0xbb, - 0x31, 0x5c, 0x30, 0x07, 0xc3, 0xee, 0xd2, 0x31, 0xc3, 0xee, 0x46, 0x02, 0xb9, 0xa2, 0x2a, 0x2d, - 0x11, 0xf0, 0x10, 0xe2, 0x13, 0xae, 0x70, 0x0b, 0xab, 0xb4, 0x38, 0xcb, 0xe2, 0xe6, 0xfc, 0xf7, - 0x1c, 0xe3, 0x07, 0x89, 0x25, 0x47, 0xe0, 0xd8, 0xd9, 0xc9, 0xa9, 0xd2, 0x6e, 0x4e, 0xb0, 0xd6, - 0x89, 0x5b, 0xa8, 0x27, 0x24, 0x09, 0xc3, 0x13, 0x08, 0x86, 0x1a, 0xbd, 0x0d, 0x4b, 0x94, 0x0f, - 0x23, 0x4a, 0x28, 0xe0, 0x6d, 0x28, 0xbe, 0x1a, 0xdd, 0x96, 0x38, 0x7c, 0x76, 0x24, 0xda, 0xc3, - 0x62, 0x33, 0xd3, 0x7d, 0x52, 0x6d, 0x4f, 0x7e, 0xfd, 0x75, 0x7c, 0xa0, 0x2d, 0x71, 0xe0, 0x92, - 0x6b, 0x83, 0x12, 0x8f, 0xd6, 0xf1, 0x6d, 0xc5, 0xba, 0x55, 0xa4, 0xa0, 0xf5, 0x00, 0x4d, 0x2d, - 0x20, 0x5b, 0x67, 0x62, 0xf5, 0xb9, 0x9c, 0x77, 0x43, 0x3e, 0x97, 0xd5, 0x84, 0xee, 0x92, 0x42, - 0x8a, 0x17, 0xbb, 0x40, 0xce, 0x67, 0x3c, 0x3f, 0x2d, 0x35, 0xe2, 0x0c, 0x3a, 0x84, 0xe1, 0xf9, - 0x69, 0xa9, 0xd7, 0xd1, 0x0e, 0x49, 0xde, 0x5a, 0xe0, 0x1e, 0x8a, 0x0a, 0x4f, 0x98, 0x46, 0x62, - 0x2a, 0x5f, 0xa9, 0x4a, 0xd5, 0x46, 0xea, 0xd6, 0x57, 0xcc, 0x6d, 0xc1, 0x37, 0x15, 0x97, 0x1a, - 0xd2, 0x44, 0x9b, 0x8f, 0x24, 0x88, 0x75, 0xe2, 0x03, 0x5f, 0xea, 0x44, 0x60, 0xfb, 0x01, 0x48, - 0xfd, 0x6f, 0x64, 0x76, 0x7d, 0x1f, 0x4d, 0x0f, 0x06, 0x1a, 0x48, 0x82, 0x62, 0x2c, 0x61, 0x7a, - 0x00, 0xbf, 0x74, 0x38, 0x66, 0xba, 0xad, 0x4a, 0x2c, 0xb5, 0xfe, 0x8e, 0x0f, 0xb6, 0x40, 0x3e, - 0x1f, 0x70, 0x92, 0x28, 0x89, 0x0f, 0x74, 0x40, 0x06, 0x75, 0x10, 0x39, 0xcb, 0xb6, 0xee, 0x3f, - 0xc6, 0x0b, 0xf3, 0x39, 0x34, 0x85, 0x41, 0xb6, 0x37, 0xd4, 0xf5, 0x19, 0x34, 0x99, 0xc2, 0xfa, - 0x0d, 0x89, 0x7c, 0xb6, 0x71, 0xaa, 0xf4, 0x17, 0xe8, 0x4f, 0x42, 0x1a, 0xfa, 0x49, 0x9c, 0x4b, - 0x90, 0xa4, 0x71, 0x45, 0x0d, 0x7e, 0x93, 0xa8, 0x24, 0x59, 0xcf, 0x04, 0x42, 0x58, 0x5c, 0xe1, - 0xd8, 0x67, 0xf8, 0x0a, 0x67, 0x7b, 0x00, 0x4d, 0xbd, 0xe5, 0x15, 0x8e, 0xa0, 0xeb, 0xc2, 0x4a, - 0x34, 0xdd, 0x0a, 0x06, 0xfc, 0x02, 0x06, 0xd9, 0xc2, 0x3a, 0x4c, 0x04, 0x37, 0x0f, 0xe5, 0x35, - 0x05, 0x83, 0x0d, 0x06, 0x55, 0x26, 0x93, 0x5f, 0x85, 0x1d, 0xd9, 0x68, 0xbe, 0x63, 0x15, 0x13, - 0x83, 0x98, 0x7e, 0xd3, 0xc2, 0x00, 0xff, 0x62, 0x54, 0xec, 0x06, 0xab, 0xaa, 0xf4, 0x46, 0xbc, - 0xa3, 0x24, 0xd2, 0xe3, 0xb7, 0xdc, 0xbc, 0xa3, 0x24, 0xce, 0xd9, 0xe6, 0x70, 0x94, 0x2c, 0xb0, - 0x44, 0x85, 0xcb, 0xe0, 0x25, 0x59, 0xf8, 0x4f, 0x38, 0xb4, 0x30, 0xc3, 0xcc, 0xf9, 0x37, 0xd1, - 0x64, 0x8a, 0xb1, 0x48, 0xc4, 0xac, 0x0c, 0x19, 0x17, 0x70, 0x68, 0x03, 0xb3, 0x03, 0xe3, 0x72, - 0x4e, 0xf6, 0xdf, 0xac, 0xe3, 0x6b, 0x49, 0x8a, 0xf3, 0xac, 0x0c, 0x29, 0xce, 0x41, 0xe8, 0x83, - 0x53, 0x9c, 0x2f, 0x64, 0x61, 0x1c, 0xfb, 0xb0, 0x77, 0x6a, 0x5d, 0xe7, 0xc0, 0xc7, 0x1a, 0x12, - 0x9d, 0x17, 0x5e, 0x99, 0x85, 0xe6, 0x99, 0x39, 0xcf, 0x2c, 0x1c, 0xc6, 0x72, 0x6b, 0xd0, 0x0f, - 0xce, 0x8c, 0xcc, 0x6b, 0x09, 0xfa, 0x31, 0x85, 0x5e, 0x21, 0xc3, 0x80, 0x7e, 0x8e, 0x35, 0x7c, - 0xc7, 0x5d, 0xe7, 0x37, 0x16, 0x13, 0x56, 0x09, 0xb8, 0x8d, 0x05, 0xe9, 0x59, 0x25, 0xc2, 0x20, - 0x55, 0xd8, 0x82, 0x2c, 0xff, 0xe2, 0x06, 0xf8, 0x13, 0xca, 0x85, 0x6c, 0xe3, 0x9c, 0x6c, 0x48, - 0x2e, 0xd1, 0x12, 0xda, 0xa3, 0xa7, 0x95, 0x07, 0x83, 0x0d, 0xeb, 0x74, 0xcc, 0x75, 0xab, 0x59, - 0x94, 0x80, 0x95, 0x45, 0xc9, 0x1b, 0x23, 0x8b, 0x22, 0x8c, 0x9d, 0x45, 0xb1, 0xb2, 0x26, 0xed, - 0x4e, 0xd6, 0x64, 0xd2, 0xd8, 0x59, 0x93, 0x97, 0x7f, 0x24, 0x6b, 0xe2, 0x60, 0x49, 0xec, 0x74, - 0x5c, 0xfe, 0x6d, 0xa4, 0xe3, 0x4c, 0xf6, 0x67, 0x72, 0x26, 0x3b, 0x86, 0x5b, 0xce, 0xfe, 0x7c, - 0x44, 0xb9, 0x1f, 0x74, 0x43, 0xdf, 0x65, 0xb9, 0x1f, 0x8c, 0x10, 0x0d, 0xee, 0xe7, 0x91, 0x51, - 0xb9, 0x1f, 0xca, 0xf5, 0x18, 0xb4, 0xeb, 0x14, 0x77, 0xda, 0x35, 0xed, 0x97, 0x7f, 0x3c, 0xed, - 0x6a, 0xf2, 0x5b, 0x53, 0x6f, 0x37, 0xbf, 0x65, 0xc8, 0xf6, 0xa6, 0x31, 0xfc, 0x96, 0x21, 0xdb, - 0x23, 0xfc, 0x96, 0x43, 0xa1, 0xed, 0xc6, 0x6f, 0x19, 0xb2, 0x3f, 0x0b, 0xbf, 0x35, 0x7d, 0xc2, - 0xf0, 0x5b, 0x33, 0x6e, 0x23, 0xbf, 0x55, 0x86, 0x72, 0x7c, 0x4a, 0xb8, 0x9e, 0xe8, 0x9b, 0x89, - 0xd6, 0x42, 0x09, 0xd7, 0x5b, 0xb3, 0x37, 0xeb, 0x28, 0x17, 0xeb, 0xc4, 0xa9, 0x90, 0x4d, 0x09, - 0xd7, 0xeb, 0x8f, 0xad, 0xc9, 0x0d, 0xcc, 0x22, 0x17, 0xdc, 0x8e, 0x60, 0xd7, 0x56, 0x07, 0x22, - 0x4f, 0x8a, 0x80, 0x62, 0x71, 0xf4, 0x2f, 0x86, 0x57, 0x98, 0x4a, 0x09, 0x7d, 0x8f, 0x95, 0x59, - 0xd8, 0x68, 0x67, 0x16, 0xf8, 0x34, 0xa3, 0xd7, 0x45, 0x42, 0xfe, 0xc0, 0x46, 0x18, 0xfd, 0x66, - 0x58, 0x09, 0x42, 0xc5, 0xc3, 0x75, 0x21, 0x7a, 0x62, 0x2b, 0x15, 0x6f, 0x56, 0x01, 0x15, 0x6f, - 0xfe, 0x8e, 0x0f, 0xb6, 0x90, 0xec, 0xa6, 0x19, 0xa8, 0x78, 0xb3, 0xf9, 0x44, 0xa3, 0xe2, 0x9f, - 0x52, 0xa5, 0x65, 0x68, 0x89, 0x90, 0x86, 0x44, 0x11, 0xe7, 0xc2, 0xda, 0x69, 0x39, 0x10, 0xf1, - 0x85, 0xbb, 0xb2, 0xd1, 0x7c, 0x47, 0x8f, 0x89, 0x41, 0x30, 0xcb, 0x16, 0x82, 0x39, 0x03, 0xd9, - 0x88, 0x01, 0x0d, 0xc8, 0xe3, 0x02, 0xaa, 0xb1, 0xa5, 0x79, 0x8b, 0x59, 0x39, 0xf4, 0xdd, 0x24, - 0x95, 0x77, 0xe4, 0xa3, 0x79, 0xa0, 0x5d, 0x75, 0x90, 0x97, 0xbf, 0x76, 0x23, 0x2f, 0x9f, 0x19, - 0x85, 0xbc, 0x4c, 0x8b, 0x5e, 0x2d, 0x14, 0xe7, 0x5f, 0x72, 0x36, 0x55, 0x71, 0xf9, 0x97, 0x9c, - 0x2a, 0x9d, 0xe2, 0x04, 0xa3, 0x54, 0xec, 0xe1, 0xb4, 0xa1, 0x98, 0xd6, 0x7a, 0x01, 0x54, 0xa2, - 0x90, 0x5c, 0x2d, 0xb1, 0xe7, 0xeb, 0xc4, 0x40, 0x4b, 0xb2, 0x7b, 0xa7, 0x29, 0xe9, 0xc0, 0xa6, - 0x4e, 0xfa, 0xeb, 0xd7, 0x1b, 0xd3, 0x0e, 0x9f, 0xb9, 0x1a, 0xdd, 0x06, 0x29, 0xbf, 0x00, 0x91, - 0x41, 0xdf, 0xd4, 0xf0, 0xd7, 0x5a, 0xcb, 0x49, 0xa0, 0xac, 0x89, 0x87, 0xed, 0xfe, 0xcb, 0x40, - 0x62, 0x6b, 0xfd, 0x97, 0xb4, 0xd6, 0x83, 0x66, 0x0a, 0x84, 0xa1, 0x1e, 0x38, 0x72, 0x9d, 0x4c, - 0x27, 0x0f, 0xc7, 0x81, 0x4b, 0xf1, 0x1f, 0x2e, 0x27, 0x8f, 0x9f, 0x4d, 0x9d, 0x3d, 0x91, 0xba, - 0xfc, 0x89, 0x16, 0x3b, 0x75, 0x35, 0xba, 0x8d, 0xea, 0xb5, 0xf9, 0x7f, 0xc2, 0xa1, 0xb9, 0x21, - 0x05, 0xfb, 0xb2, 0x5a, 0xc3, 0x43, 0x12, 0x78, 0x52, 0x39, 0x55, 0xea, 0xe4, 0x04, 0xf7, 0x36, - 0x62, 0x73, 0xfc, 0xf2, 0x91, 0xe4, 0xfe, 0xc3, 0x24, 0x36, 0x4b, 0xef, 0x19, 0x23, 0x53, 0x42, - 0xdf, 0xb5, 0xa1, 0x76, 0x9d, 0xf9, 0x87, 0xe9, 0x1b, 0x6b, 0xd5, 0xc9, 0xec, 0xd3, 0x9f, 0xd3, - 0x92, 0xf8, 0x40, 0xa7, 0xc9, 0x36, 0x60, 0x2a, 0x57, 0x5f, 0xfd, 0xf0, 0xc7, 0xf1, 0x81, 0x7d, - 0x58, 0x70, 0xf0, 0x31, 0xbb, 0x7f, 0x89, 0x83, 0x17, 0x92, 0xfb, 0x8e, 0x26, 0xf6, 0xb7, 0xea, - 0xb3, 0x77, 0x9f, 0x0d, 0x3f, 0xcc, 0xa1, 0x59, 0x9b, 0x14, 0xa5, 0x89, 0x14, 0x43, 0x94, 0x38, - 0x22, 0x98, 0x27, 0x12, 0x27, 0x67, 0xbd, 0xd8, 0x4c, 0x66, 0x33, 0xd8, 0x69, 0x84, 0xdf, 0x1d, - 0x84, 0xf3, 0x22, 0x27, 0x85, 0x0f, 0x42, 0x5f, 0xcf, 0xf0, 0xce, 0xf8, 0x40, 0xc7, 0xc8, 0xbe, - 0x68, 0xa2, 0x7f, 0x2b, 0x1c, 0x96, 0x5e, 0x88, 0xd7, 0x0f, 0x3f, 0x21, 0x17, 0xe1, 0x58, 0xd7, - 0xe0, 0x9c, 0x09, 0xff, 0x22, 0x93, 0xc9, 0x20, 0xd7, 0x8c, 0xb3, 0x61, 0x66, 0x32, 0x98, 0x4c, - 0x33, 0x19, 0x98, 0x3e, 0xeb, 0x66, 0xe2, 0x01, 0x82, 0xe3, 0xe1, 0x2e, 0x90, 0xc0, 0xeb, 0x56, - 0x1c, 0x6f, 0x56, 0x01, 0x8e, 0x37, 0x7f, 0xd3, 0xc3, 0xca, 0x84, 0xe3, 0xcd, 0xe6, 0x65, 0x5d, - 0x9c, 0x2a, 0xed, 0xe1, 0x50, 0x2b, 0x27, 0xa4, 0xb9, 0x7b, 0xe2, 0x5a, 0x18, 0x8f, 0x96, 0x27, - 0x3f, 0x19, 0xd0, 0x5a, 0xbe, 0x35, 0xcd, 0x39, 0x87, 0x3f, 0x36, 0x51, 0xea, 0xe5, 0x43, 0x89, - 0xde, 0x36, 0xad, 0xab, 0x9f, 0x5e, 0x06, 0xbd, 0x2a, 0x71, 0xf0, 0x02, 0xd6, 0x12, 0xea, 0xa3, - 0x40, 0x5e, 0xc6, 0xab, 0xd1, 0x6d, 0x57, 0x38, 0xf6, 0x16, 0x5e, 0xe1, 0xe8, 0xea, 0xb1, 0x04, - 0xc3, 0x31, 0x95, 0x7b, 0x42, 0x82, 0x91, 0x66, 0x55, 0xe3, 0x5c, 0x82, 0xf1, 0x29, 0x0d, 0x77, - 0xe0, 0x2e, 0xc1, 0xf0, 0xdd, 0x90, 0x04, 0x03, 0xf3, 0xc7, 0x8c, 0x04, 0xc3, 0x62, 0x6b, 0x42, - 0x9b, 0x39, 0xa5, 0x19, 0x87, 0xb8, 0x31, 0x88, 0x33, 0x02, 0xaa, 0xb4, 0x89, 0x88, 0x33, 0xea, - 0xed, 0x50, 0xdb, 0xb3, 0x83, 0x95, 0x68, 0xc0, 0x07, 0xae, 0x46, 0xb7, 0x91, 0x08, 0x9c, 0xb6, - 0xfb, 0xdd, 0x16, 0x4d, 0xf4, 0xb6, 0xd1, 0x68, 0xf5, 0xf1, 0xa1, 0x9e, 0x78, 0xec, 0x74, 0x72, - 0xdf, 0x51, 0x5b, 0x5f, 0x22, 0x16, 0xf9, 0x87, 0x1c, 0x4d, 0xf9, 0x6c, 0x79, 0xb4, 0x36, 0xbb, - 0x3d, 0x5a, 0x6b, 0x54, 0xe9, 0x19, 0xeb, 0xa3, 0x55, 0xc4, 0x46, 0x3e, 0xd5, 0x31, 0xeb, 0xae, - 0x2f, 0xb5, 0xc1, 0x58, 0x75, 0x25, 0xd8, 0x9b, 0xd3, 0x5c, 0x4f, 0x63, 0x7e, 0xd1, 0x8c, 0xc4, - 0xec, 0x6e, 0x73, 0x12, 0x17, 0x82, 0x32, 0xd9, 0xb6, 0xd1, 0x84, 0x14, 0xfa, 0x17, 0xd9, 0x68, - 0x8e, 0xb5, 0xd3, 0x3d, 0x4c, 0x07, 0x51, 0xeb, 0x19, 0x3b, 0xd0, 0xdd, 0xed, 0x0b, 0x57, 0xf6, - 0x9a, 0x2a, 0xad, 0x40, 0x55, 0x82, 0xeb, 0x51, 0xdc, 0xa8, 0xfd, 0xce, 0xe7, 0xd9, 0x10, 0x50, - 0x90, 0x89, 0x2d, 0x67, 0x81, 0xd1, 0xbf, 0x70, 0x06, 0x14, 0xbc, 0xb3, 0xf2, 0xb6, 0xc3, 0x1c, - 0x9a, 0x0a, 0x92, 0xa8, 0xe5, 0xfe, 0x06, 0x9d, 0x5a, 0x01, 0x1a, 0xac, 0x59, 0x95, 0x42, 0x82, - 0xa5, 0x42, 0x5c, 0xcf, 0xfe, 0x32, 0x2c, 0x86, 0x0f, 0x5e, 0x28, 0xf1, 0xa4, 0x7e, 0xf8, 0x58, - 0xdb, 0x15, 0x03, 0x98, 0x48, 0xb4, 0xb7, 0x25, 0x5b, 0x4e, 0xa7, 0x13, 0x81, 0x25, 0x3a, 0x55, - 0x2d, 0xd6, 0x55, 0x04, 0x15, 0x3a, 0xa9, 0x86, 0x7f, 0x6b, 0xbd, 0x67, 0xb4, 0xee, 0xce, 0x91, - 0x23, 0x9f, 0x15, 0xcb, 0x96, 0x2f, 0x96, 0x6d, 0x54, 0x25, 0x1f, 0x5a, 0x2f, 0x64, 0xda, 0x40, - 0xb1, 0x82, 0x84, 0x33, 0x64, 0x8e, 0x35, 0xd9, 0xb3, 0x83, 0xd2, 0xd6, 0x25, 0x1e, 0xa0, 0xe7, - 0xc0, 0xec, 0x9b, 0xb9, 0xa5, 0x5a, 0xc7, 0x2e, 0x2d, 0xd6, 0x05, 0xa7, 0x57, 0xf8, 0x37, 0x24, - 0xb0, 0xa1, 0xf3, 0x23, 0x13, 0xe3, 0x02, 0xae, 0xb4, 0x98, 0xc1, 0x64, 0xb8, 0x80, 0x63, 0x31, - 0x85, 0xb9, 0x9b, 0x57, 0xef, 0x0d, 0x55, 0xaa, 0x41, 0x2b, 0x85, 0x8c, 0x87, 0x61, 0xe0, 0x50, - 0x18, 0xc8, 0x14, 0xbe, 0xb8, 0xc7, 0xc0, 0x28, 0xfc, 0x97, 0xd9, 0x90, 0xe5, 0xd7, 0x71, 0xf5, - 0x16, 0x5b, 0x8c, 0x72, 0x46, 0x97, 0x34, 0xbf, 0xeb, 0x14, 0x8d, 0x4b, 0x3f, 0xfa, 0xaa, 0xb2, - 0x57, 0xb1, 0xc2, 0x66, 0x6a, 0x73, 0x53, 0xa2, 0xec, 0x95, 0x6c, 0x82, 0x3f, 0x10, 0x89, 0xe3, - 0x43, 0x61, 0x12, 0xfc, 0xb9, 0x0c, 0x45, 0xf2, 0x35, 0x92, 0x57, 0x9f, 0x36, 0x2d, 0xdb, 0xc7, - 0xa9, 0x52, 0x37, 0x87, 0x3a, 0x38, 0xc1, 0x75, 0x0f, 0xc5, 0x66, 0x38, 0x0a, 0x7a, 0xdd, 0xee, - 0x90, 0xad, 0xda, 0x3f, 0xcd, 0x82, 0xbc, 0xb8, 0x3f, 0xed, 0x8b, 0x5a, 0x56, 0xa9, 0x4a, 0x12, - 0x7a, 0x59, 0x70, 0xdf, 0x0a, 0xe3, 0xa5, 0x62, 0x98, 0x03, 0x77, 0xbb, 0xb5, 0xbf, 0xcf, 0x47, - 0x33, 0x24, 0x9f, 0x0f, 0x73, 0x50, 0x66, 0x98, 0x0e, 0xc7, 0xb3, 0x24, 0xa9, 0xd2, 0x22, 0x16, - 0xd6, 0x67, 0x41, 0xa0, 0x60, 0x0a, 0xdf, 0xc6, 0xb3, 0xc3, 0x8d, 0xe9, 0xd9, 0xa9, 0x46, 0xb9, - 0x3a, 0xd0, 0x84, 0x0b, 0xb2, 0x3c, 0xd9, 0x60, 0xa9, 0xfc, 0xb8, 0x00, 0x25, 0xe2, 0x43, 0xb6, - 0x81, 0x01, 0x5a, 0xab, 0x6b, 0x69, 0xb4, 0x41, 0x95, 0xcb, 0xc9, 0xe7, 0x0a, 0x38, 0x19, 0xda, - 0xf3, 0x7e, 0x34, 0xcb, 0x1f, 0xf0, 0x47, 0x56, 0x06, 0x37, 0xfa, 0x03, 0xb5, 0xde, 0x70, 0xf8, - 0x83, 0x60, 0xc8, 0x47, 0x6e, 0x10, 0x76, 0x97, 0x72, 0xd6, 0x8a, 0x3f, 0x1f, 0xd9, 0xd5, 0x91, - 0xfa, 0xbc, 0x45, 0x67, 0x23, 0x7b, 0x76, 0x10, 0x19, 0x36, 0x09, 0xd9, 0xae, 0x75, 0xf5, 0x93, - 0x78, 0xfa, 0xce, 0x7e, 0x7c, 0xc8, 0x2d, 0x3d, 0x4c, 0xad, 0x2a, 0xad, 0xb2, 0x52, 0x94, 0x2f, - 0xc1, 0x0a, 0x08, 0x33, 0x8f, 0x61, 0x1a, 0x22, 0xc1, 0x43, 0x38, 0x15, 0x7a, 0x22, 0xd7, 0x86, - 0xda, 0x49, 0x39, 0xbe, 0x2d, 0x70, 0x15, 0xab, 0x2b, 0xad, 0xf2, 0x91, 0x2b, 0x9c, 0xc3, 0x6e, - 0x20, 0x17, 0x83, 0xdb, 0x17, 0x9c, 0x2a, 0x9d, 0xe4, 0x1c, 0x96, 0x03, 0x2a, 0xa7, 0xb3, 0xa0, - 0xfa, 0x68, 0x27, 0x6d, 0x51, 0x8f, 0x89, 0x8d, 0xed, 0xa1, 0x7e, 0xac, 0x80, 0xd2, 0x69, 0x6f, - 0xb7, 0x86, 0xc0, 0x2d, 0xc6, 0x87, 0x7a, 0xe0, 0xc9, 0x24, 0x47, 0x06, 0xb8, 0x1b, 0x8b, 0x42, - 0x0d, 0x99, 0x33, 0x80, 0x97, 0xed, 0x1b, 0xda, 0xa5, 0x0b, 0x20, 0xae, 0x8e, 0x0f, 0xc4, 0x48, - 0x22, 0x04, 0x9d, 0x50, 0xb7, 0x4d, 0x92, 0xaf, 0x61, 0x18, 0x74, 0x1a, 0xcf, 0x31, 0x1d, 0x83, - 0x9e, 0x96, 0xea, 0x36, 0x39, 0xf6, 0x35, 0x68, 0x3a, 0xab, 0xe0, 0xa1, 0xb9, 0x49, 0xb1, 0x63, - 0x95, 0xad, 0x4a, 0x9c, 0xef, 0x9a, 0x8b, 0xbe, 0xba, 0x52, 0xb6, 0x35, 0xe4, 0xbb, 0x39, 0x34, - 0xdd, 0x1f, 0xae, 0x22, 0x46, 0x33, 0xfa, 0xb1, 0x61, 0xad, 0x54, 0x3e, 0x38, 0xa2, 0xfd, 0x9c, - 0xe4, 0xa4, 0x3a, 0xd4, 0x4f, 0x8d, 0x65, 0x60, 0xbc, 0x22, 0x6a, 0x0d, 0x53, 0x2c, 0xbe, 0x14, - 0x1f, 0xd8, 0x9d, 0xf8, 0xf4, 0x82, 0xad, 0xc5, 0x48, 0x6f, 0x14, 0xb6, 0x48, 0xa7, 0xa1, 0x4a, - 0x3c, 0xf1, 0x81, 0x7d, 0x20, 0xda, 0x87, 0x89, 0x31, 0xa7, 0x2f, 0xdb, 0xbe, 0x5f, 0x76, 0x99, - 0x53, 0xa5, 0x41, 0x0e, 0x0d, 0x70, 0x82, 0xfd, 0xce, 0x8a, 0xdd, 0x5c, 0x72, 0xf0, 0x70, 0xa2, - 0x7d, 0x97, 0x76, 0xb6, 0xc7, 0xbc, 0x3b, 0x38, 0xf5, 0x00, 0x80, 0xe3, 0xb5, 0xa1, 0xf6, 0x6b, - 0x43, 0x5b, 0x13, 0xdf, 0x9e, 0x49, 0xec, 0xe8, 0xd2, 0xff, 0x30, 0x6e, 0x19, 0xc8, 0x5c, 0x88, - 0x1b, 0xe8, 0xa1, 0xfe, 0x54, 0xcb, 0x0f, 0xa9, 0xb3, 0xfd, 0xf1, 0xd8, 0xde, 0xfa, 0xcd, 0x8d, - 0x54, 0x16, 0x06, 0xf7, 0x05, 0x14, 0x33, 0x38, 0xcf, 0x7e, 0x47, 0x6a, 0xfb, 0x30, 0xf1, 0x4e, - 0xfb, 0xea, 0xd3, 0xf8, 0xe0, 0xc5, 0xd4, 0xd9, 0xe3, 0xa9, 0xef, 0x2e, 0x81, 0xb5, 0x11, 0x1d, - 0xd3, 0x6a, 0x99, 0x01, 0xd7, 0xb5, 0x70, 0x77, 0x0e, 0x9a, 0x69, 0x4e, 0x7d, 0x62, 0xa0, 0xed, - 0x55, 0x16, 0x06, 0xc7, 0x9d, 0xf7, 0xb5, 0xf0, 0x36, 0x00, 0x57, 0x17, 0x07, 0xb5, 0xdd, 0xc7, - 0x58, 0x9e, 0xf5, 0xee, 0x13, 0x58, 0xed, 0x9c, 0x2a, 0xb5, 0x72, 0xa8, 0x85, 0x13, 0x1c, 0x87, - 0x20, 0xd6, 0x6b, 0x9f, 0x7d, 0xaa, 0xed, 0x3e, 0xc6, 0x62, 0x5d, 0xd8, 0x0d, 0x7c, 0xe2, 0xc4, - 0xd0, 0x49, 0xeb, 0xea, 0x18, 0x39, 0xd5, 0x0a, 0x32, 0x28, 0x9d, 0x53, 0xde, 0x7d, 0x46, 0x6b, - 0x3f, 0x90, 0xba, 0xbc, 0x2b, 0x79, 0x46, 0x3f, 0x77, 0x76, 0xb1, 0x38, 0xbd, 0xc6, 0xe5, 0x78, - 0xac, 0x33, 0x71, 0xf4, 0xe4, 0xc8, 0xa1, 0x16, 0x48, 0x5a, 0x40, 0x9f, 0x1f, 0x60, 0x8f, 0xce, - 0xe5, 0xa0, 0x45, 0xe5, 0xde, 0x48, 0xfd, 0x7b, 0x96, 0x60, 0x88, 0x96, 0xa7, 0xe8, 0x37, 0xce, - 0xa7, 0xe8, 0x25, 0x7b, 0x30, 0x30, 0x9c, 0x84, 0xe5, 0xd2, 0xcd, 0xbc, 0x43, 0xab, 0xd1, 0x24, - 0x9c, 0x3a, 0xa7, 0x36, 0x4c, 0x00, 0x09, 0x27, 0x5d, 0x30, 0xca, 0xc4, 0x27, 0x00, 0x3f, 0xc3, - 0xf8, 0xc9, 0x9e, 0x1d, 0xd5, 0xb5, 0x40, 0x66, 0x96, 0x80, 0x43, 0xc5, 0x13, 0x25, 0x4f, 0x8c, - 0xf4, 0xec, 0xd3, 0x86, 0xa2, 0xb2, 0xd1, 0x83, 0x0f, 0xa0, 0xe9, 0x9b, 0xfd, 0xa1, 0x48, 0x33, - 0xdc, 0xd7, 0xea, 0xca, 0x30, 0x79, 0x8a, 0x96, 0xab, 0x52, 0x85, 0x60, 0xab, 0x12, 0x97, 0xd9, - 0x86, 0xb7, 0xc4, 0xd8, 0x77, 0xff, 0x90, 0x6d, 0x08, 0x0b, 0x26, 0xcd, 0xf9, 0xf1, 0x98, 0xb4, - 0xec, 0x53, 0x4e, 0x95, 0x7a, 0x38, 0x74, 0x90, 0x13, 0x46, 0x39, 0x18, 0xd1, 0x9b, 0x68, 0xbb, - 0xa4, 0x93, 0x64, 0x03, 0x7b, 0x12, 0x9f, 0x5e, 0x20, 0x40, 0x87, 0xb1, 0x0f, 0xc1, 0x82, 0x20, - 0xa5, 0x37, 0xf2, 0xb8, 0xed, 0xd1, 0x76, 0x9f, 0x89, 0x0f, 0xec, 0x86, 0xd6, 0xd0, 0xe2, 0x6a, - 0x74, 0xab, 0x91, 0x56, 0xe6, 0x6a, 0x74, 0xab, 0x0d, 0x45, 0x26, 0xfb, 0xda, 0x8a, 0x5d, 0xf1, - 0xc7, 0xc5, 0x1c, 0xf4, 0x70, 0xda, 0x99, 0x4d, 0x0c, 0x74, 0xf2, 0x6b, 0x0b, 0x15, 0xe8, 0xb8, - 0xf4, 0x78, 0x75, 0x78, 0x41, 0x75, 0x38, 0x29, 0x90, 0x15, 0xb5, 0xe0, 0x01, 0x0d, 0xb9, 0xbf, - 0xbe, 0x99, 0x64, 0xf0, 0xbb, 0x8e, 0x5a, 0x4c, 0xc8, 0x19, 0xed, 0x7c, 0xc4, 0x0d, 0x2c, 0xe8, - 0xa4, 0xc3, 0x34, 0x64, 0xeb, 0x3e, 0x19, 0xd0, 0x62, 0xfb, 0xd8, 0x96, 0x14, 0xcd, 0x5c, 0x1b, - 0x6a, 0x27, 0xda, 0x18, 0x66, 0x37, 0xc8, 0xa3, 0xdc, 0xda, 0xad, 0xed, 0x3e, 0x6a, 0x43, 0x36, - 0xff, 0x1d, 0x87, 0x66, 0xda, 0xf7, 0x96, 0x2f, 0x30, 0x11, 0x00, 0xa7, 0x93, 0xa2, 0xe6, 0x4d, - 0x2e, 0x40, 0x93, 0xc2, 0xcd, 0xf5, 0xf5, 0x4a, 0x38, 0x6c, 0xb8, 0x30, 0x92, 0x9f, 0x7a, 0x8d, - 0x01, 0x2e, 0xf8, 0x72, 0x9b, 0xc0, 0x30, 0x8f, 0x66, 0xda, 0xc8, 0x01, 0xab, 0x40, 0xf8, 0xc5, - 0x7b, 0xac, 0x84, 0x23, 0xd6, 0x49, 0x58, 0xc9, 0xbc, 0x47, 0xed, 0xf6, 0xbd, 0x98, 0x2c, 0xb2, - 0x99, 0xd3, 0x16, 0x7e, 0x33, 0xd9, 0x70, 0xe6, 0xbc, 0x83, 0x38, 0xb2, 0xd6, 0xa4, 0xd5, 0x69, - 0x80, 0x53, 0x42, 0xab, 0x8f, 0x15, 0x3f, 0x62, 0x5b, 0xb3, 0x99, 0x94, 0x64, 0xff, 0x82, 0x43, - 0xc8, 0x87, 0x97, 0xc1, 0x44, 0x6a, 0x6d, 0xe5, 0x54, 0x69, 0x07, 0x27, 0x30, 0x15, 0xe2, 0x66, - 0x22, 0x0e, 0x36, 0x22, 0xa7, 0xca, 0x55, 0x6b, 0xa4, 0xea, 0x9a, 0x22, 0x50, 0x2c, 0x51, 0xb6, - 0x3a, 0x3e, 0xbc, 0x33, 0x71, 0xa8, 0x1f, 0x14, 0x48, 0xf1, 0x81, 0xc1, 0x44, 0x6f, 0xac, 0xf8, - 0xda, 0x50, 0xfb, 0x9a, 0x2a, 0x79, 0x55, 0x75, 0x8d, 0xb4, 0xa6, 0xaa, 0x48, 0xeb, 0xfa, 0x12, - 0x92, 0x7d, 0x26, 0xda, 0xdb, 0x46, 0x76, 0x75, 0x11, 0x52, 0xc5, 0x20, 0x52, 0x8a, 0x59, 0xca, - 0x18, 0x3e, 0x20, 0x33, 0x73, 0xe0, 0xff, 0x6c, 0xaa, 0x27, 0x41, 0x01, 0xe6, 0x53, 0x25, 0xaf, - 0xa9, 0x9c, 0x5c, 0x17, 0x1f, 0xe8, 0x48, 0x9e, 0x3d, 0x4e, 0x70, 0xf6, 0x89, 0x1d, 0xf1, 0x58, - 0x67, 0x7c, 0x70, 0x30, 0x3e, 0xbc, 0x1f, 0xde, 0xbb, 0x91, 0xed, 0xc3, 0x36, 0xe5, 0x25, 0x11, - 0x78, 0xe3, 0x74, 0x4e, 0x5a, 0x6b, 0x0f, 0xb5, 0xa0, 0xb9, 0x36, 0xd4, 0x5e, 0x13, 0x8c, 0xc8, - 0x8a, 0xd7, 0xb7, 0x25, 0xd9, 0xd7, 0x66, 0xea, 0x15, 0x6b, 0x1c, 0xba, 0xac, 0x1f, 0x47, 0x2a, - 0x7f, 0xc3, 0xa5, 0xd1, 0x6e, 0x11, 0xc3, 0x16, 0xbb, 0x7e, 0x2b, 0x4c, 0xcd, 0x52, 0x0c, 0xb6, - 0x81, 0x12, 0xf8, 0x44, 0x02, 0xc8, 0xaa, 0x28, 0x09, 0xd4, 0x94, 0x12, 0x2c, 0x93, 0x68, 0x8b, - 0x42, 0x02, 0x16, 0xca, 0xba, 0x02, 0xf5, 0x18, 0x1f, 0xea, 0x49, 0x9d, 0x3e, 0xa5, 0x75, 0xed, - 0x85, 0xbd, 0xa2, 0x84, 0x04, 0x28, 0xc9, 0x16, 0xdb, 0xb5, 0x64, 0xb7, 0x89, 0xbe, 0x7f, 0xc7, - 0x7a, 0x2b, 0xf3, 0x4d, 0x9e, 0xd1, 0xc2, 0xce, 0x15, 0x13, 0x3c, 0xeb, 0xa0, 0xe1, 0xe1, 0x3b, - 0x54, 0xf5, 0x6a, 0xe7, 0xdc, 0x5c, 0xd8, 0x87, 0xc9, 0x37, 0xce, 0x3e, 0xec, 0xb9, 0x95, 0xec, - 0x43, 0x58, 0x95, 0x9a, 0x50, 0x40, 0x70, 0xc1, 0x21, 0x62, 0x25, 0x11, 0x9e, 0xe2, 0xab, 0x0c, - 0x20, 0x85, 0x0f, 0xb6, 0x13, 0x1e, 0x75, 0xaa, 0x90, 0x26, 0x68, 0x16, 0x17, 0x1a, 0x4c, 0x39, - 0xdd, 0x6a, 0xd7, 0x17, 0x7b, 0x67, 0x8e, 0xe1, 0xb5, 0xfd, 0x13, 0x20, 0xfa, 0x61, 0x7b, 0xc6, - 0x17, 0xd1, 0xdf, 0xc2, 0xa9, 0xd2, 0x56, 0x0e, 0xfd, 0x85, 0xe0, 0x76, 0x0c, 0xe2, 0x5b, 0x63, - 0x79, 0x86, 0x6f, 0xc9, 0x03, 0xbc, 0x3b, 0x1b, 0xcd, 0x5f, 0x15, 0x24, 0xd6, 0x06, 0x6b, 0x82, - 0x16, 0x69, 0xec, 0x3a, 0xe7, 0x13, 0xf6, 0x6c, 0xfa, 0xd0, 0xdf, 0xfa, 0xe3, 0x95, 0x3b, 0xa6, - 0xc7, 0xab, 0xce, 0x2a, 0x68, 0x7a, 0x51, 0x95, 0x16, 0x1b, 0x8f, 0xd7, 0x63, 0xfa, 0x3f, 0x1e, - 0xe3, 0xc9, 0xba, 0x36, 0xd4, 0x9e, 0xe8, 0x8d, 0x6a, 0x27, 0x4e, 0x03, 0x73, 0x9b, 0xba, 0xd0, - 0x92, 0xba, 0xbc, 0x6b, 0xd9, 0xd2, 0xa5, 0xd7, 0xcb, 0x27, 0xab, 0x5c, 0x5e, 0x3e, 0x37, 0xd3, - 0x67, 0x8a, 0x9c, 0xd6, 0x5b, 0x11, 0x07, 0xbc, 0x5f, 0xaf, 0xa8, 0xd2, 0xcf, 0xad, 0x88, 0x63, - 0x0e, 0x45, 0x44, 0x96, 0x4c, 0xc1, 0x63, 0xd3, 0x22, 0x92, 0x30, 0xf1, 0xe9, 0x36, 0x8c, 0x09, - 0xd2, 0x1b, 0x1f, 0xe8, 0x23, 0x07, 0x73, 0x7a, 0x90, 0x0a, 0x73, 0x12, 0xe7, 0x8f, 0x31, 0xd1, - 0x8c, 0x5d, 0x6e, 0xe5, 0xff, 0x91, 0x8d, 0x0a, 0x9c, 0x63, 0x4f, 0x8c, 0xab, 0xf9, 0x9b, 0x31, - 0x5c, 0x4d, 0xb0, 0x57, 0xc5, 0x57, 0xf3, 0x09, 0xed, 0xdc, 0xce, 0x74, 0x3b, 0x64, 0x35, 0xb3, - 0xbf, 0xdb, 0x37, 0x95, 0x24, 0x99, 0x4d, 0x7b, 0x30, 0x19, 0x97, 0xc2, 0x6e, 0x95, 0x53, 0xcc, - 0xfb, 0x5f, 0xb3, 0xd0, 0x42, 0x59, 0x69, 0x34, 0x06, 0x5e, 0x1e, 0x0a, 0x36, 0xde, 0x91, 0x0b, - 0x58, 0x65, 0xbd, 0x80, 0x4b, 0x74, 0x8c, 0x49, 0x2e, 0xe0, 0x7c, 0x42, 0x3d, 0x62, 0x72, 0x8e, - 0xa1, 0x1e, 0xef, 0xd6, 0x95, 0x23, 0xa1, 0x11, 0x33, 0x6d, 0x93, 0xb8, 0x88, 0xbe, 0x88, 0xe6, - 0xd6, 0xe3, 0xf9, 0x67, 0x78, 0x00, 0xff, 0x4b, 0x36, 0x7a, 0xd0, 0x7d, 0xcc, 0x89, 0x71, 0xdd, - 0xd6, 0x8d, 0xe1, 0xba, 0xb1, 0xa1, 0xef, 0xe3, 0x83, 0x9d, 0xb6, 0xcd, 0x19, 0x77, 0x17, 0xcd, - 0x48, 0x9e, 0x96, 0xe9, 0x58, 0x8c, 0x44, 0xac, 0xc9, 0xc1, 0x1d, 0xec, 0x11, 0xd3, 0x27, 0x92, - 0x7d, 0xfb, 0xa0, 0x01, 0xfb, 0xf6, 0x15, 0xfe, 0x7d, 0x36, 0x2a, 0xa8, 0x68, 0x50, 0xbc, 0x01, - 0x62, 0x9b, 0x76, 0x47, 0x6e, 0xdb, 0xeb, 0xd6, 0xdb, 0xf6, 0x4b, 0x56, 0xaf, 0x02, 0xb7, 0x0d, - 0x8c, 0xf1, 0xb4, 0x4f, 0x3e, 0x4d, 0xec, 0xbb, 0x70, 0xf7, 0xef, 0xdc, 0x2d, 0x97, 0x5f, 0x7d, - 0xa0, 0x4a, 0x11, 0x14, 0x12, 0xd2, 0xee, 0xbc, 0x58, 0xcc, 0x42, 0x67, 0x7c, 0xa0, 0x8f, 0xdd, - 0x0f, 0x83, 0xaa, 0x75, 0xbb, 0xcb, 0x56, 0x73, 0x39, 0xd8, 0x21, 0xd6, 0x6c, 0x6e, 0x6f, 0x0e, - 0x7a, 0xc0, 0xe5, 0xa3, 0x13, 0xe3, 0x86, 0xbf, 0x36, 0x86, 0x1b, 0x6e, 0x09, 0x7d, 0x03, 0x83, - 0xf4, 0xec, 0x80, 0xdd, 0x1b, 0x2f, 0xb7, 0xba, 0x83, 0x53, 0xa5, 0x36, 0x0e, 0xed, 0xe4, 0x84, - 0xf4, 0x47, 0x21, 0xfa, 0x59, 0xc3, 0x61, 0xf3, 0x32, 0xef, 0x3b, 0x1f, 0x8f, 0x75, 0xa6, 0xfa, - 0x4f, 0x02, 0xc9, 0x14, 0x1f, 0x88, 0x69, 0x43, 0xdb, 0x12, 0x7d, 0x27, 0x69, 0x0c, 0x16, 0xbd, - 0x0a, 0x48, 0xe1, 0xc1, 0x96, 0xd4, 0xf6, 0x61, 0xb8, 0xfc, 0xec, 0xf2, 0xc9, 0xe5, 0xef, 0xfb, - 0x5c, 0x1b, 0x18, 0x00, 0xf7, 0xa7, 0xc2, 0xff, 0x96, 0x8d, 0x16, 0x38, 0x26, 0xb2, 0x4e, 0xbc, - 0xdd, 0x48, 0xe0, 0x4d, 0xab, 0xc0, 0xa6, 0x5c, 0xe7, 0x68, 0x09, 0x12, 0x58, 0x92, 0x11, 0x09, - 0x60, 0x61, 0xca, 0xe5, 0xe4, 0xbe, 0x33, 0x4f, 0x94, 0x3c, 0xa1, 0xb5, 0xee, 0xd4, 0xda, 0xbe, - 0xb1, 0x09, 0x6e, 0x26, 0x22, 0x46, 0xd8, 0xa2, 0x4a, 0x9b, 0x51, 0x44, 0xc8, 0x70, 0x10, 0xb7, - 0x0d, 0x27, 0xec, 0xcf, 0x41, 0x0b, 0x5d, 0x3f, 0x7b, 0x1f, 0x2b, 0xdc, 0x41, 0xac, 0x60, 0x9a, - 0x58, 0x67, 0x3a, 0x8c, 0x3b, 0x89, 0x17, 0xfe, 0xc7, 0x2c, 0xc8, 0x8a, 0xe4, 0x8e, 0x16, 0xee, - 0x92, 0xdd, 0x2a, 0xff, 0x11, 0xca, 0x0b, 0x36, 0x47, 0x9a, 0x9a, 0x23, 0x04, 0xb8, 0xd6, 0xab, - 0xd2, 0xbb, 0x02, 0x29, 0x12, 0xd7, 0x82, 0x95, 0x9f, 0x69, 0xc8, 0xd3, 0xd5, 0x3f, 0x12, 0x6d, - 0xd3, 0xa2, 0x43, 0x9e, 0x0f, 0xfc, 0x3e, 0xa5, 0x48, 0x6b, 0x39, 0x33, 0xb2, 0xfd, 0x0c, 0xd4, - 0x16, 0x97, 0x78, 0xd6, 0x7b, 0xc3, 0xfe, 0xfa, 0x22, 0xed, 0x68, 0x2c, 0xd1, 0xfb, 0x35, 0x29, - 0x34, 0x53, 0xad, 0x33, 0xa5, 0x32, 0x19, 0xbe, 0xec, 0x79, 0x55, 0x7a, 0x16, 0x3d, 0x2d, 0xcc, - 0xb7, 0xef, 0x4a, 0x3a, 0xbb, 0x59, 0x56, 0x47, 0x56, 0xf8, 0xbf, 0x65, 0xa3, 0x05, 0x6e, 0xdb, - 0x39, 0x31, 0x6e, 0xd9, 0x6a, 0x8b, 0x36, 0xe8, 0xa1, 0xb4, 0x36, 0x41, 0x38, 0x2f, 0x31, 0x76, - 0x88, 0x83, 0xeb, 0x36, 0x0b, 0xa3, 0x1b, 0x67, 0x46, 0xa9, 0xbb, 0x79, 0xd5, 0x08, 0x07, 0x95, - 0xe1, 0x34, 0xc4, 0xc7, 0x88, 0x06, 0xeb, 0xb3, 0xaf, 0x4c, 0xea, 0xda, 0xf0, 0x56, 0xd0, 0x57, - 0x64, 0xb3, 0xe3, 0x03, 0xc9, 0xd1, 0xc7, 0x53, 0xd0, 0x34, 0xcb, 0x46, 0xf0, 0xcf, 0x82, 0x53, - 0x29, 0xbd, 0x1f, 0xf8, 0x8c, 0x48, 0x91, 0x38, 0x9b, 0x08, 0xa4, 0x62, 0x7b, 0xfd, 0xc4, 0x25, - 0xa4, 0xba, 0x52, 0x26, 0x95, 0xfc, 0x73, 0x68, 0x12, 0x49, 0x2f, 0x6f, 0xa6, 0x98, 0x7b, 0x50, - 0x30, 0xca, 0xc4, 0x59, 0x04, 0xb4, 0x76, 0xb6, 0x24, 0x87, 0xf7, 0xc6, 0x07, 0x06, 0xab, 0x6b, - 0x65, 0xa3, 0x8e, 0x7f, 0x1b, 0x4d, 0x35, 0x06, 0xc4, 0x3a, 0x9a, 0x6c, 0xc3, 0x0f, 0xea, 0x29, - 0xc1, 0x52, 0x21, 0x3e, 0x0a, 0xa9, 0xf0, 0xc9, 0xe1, 0x18, 0xc1, 0xf7, 0xe0, 0xda, 0xa4, 0xb6, - 0x0f, 0x13, 0x0b, 0x23, 0x4b, 0x1f, 0xfe, 0x17, 0x28, 0xbb, 0xa2, 0x76, 0x2d, 0x46, 0xb6, 0xd3, - 0x00, 0x6e, 0xf4, 0xdf, 0x86, 0x35, 0x62, 0x45, 0xed, 0x5a, 0x02, 0x6b, 0x7a, 0x29, 0xbf, 0x18, - 0x65, 0x37, 0x2a, 0x8d, 0x24, 0x33, 0x1c, 0x06, 0x0a, 0xfd, 0xb7, 0x91, 0x52, 0x5e, 0xdb, 0xd9, - 0xa2, 0xf5, 0x1d, 0x32, 0xda, 0x37, 0x2a, 0x8d, 0xfc, 0xb3, 0x28, 0x7b, 0x45, 0xed, 0x5a, 0x33, - 0x1b, 0xdc, 0xcf, 0x05, 0xfd, 0xb7, 0xf8, 0x20, 0xb4, 0x5f, 0x61, 0x0c, 0xce, 0xce, 0x70, 0xa9, - 0xac, 0x37, 0xe1, 0xbb, 0x38, 0x94, 0x17, 0xc6, 0xba, 0x32, 0x22, 0x73, 0xd7, 0x29, 0x6c, 0x81, - 0x14, 0x89, 0xef, 0x93, 0x43, 0xc4, 0xca, 0x0e, 0x63, 0x8c, 0xd6, 0xc4, 0xb1, 0x4b, 0x89, 0x8e, - 0xb3, 0x16, 0x37, 0x74, 0x23, 0x66, 0xf7, 0xb5, 0xa1, 0xb6, 0x6b, 0x43, 0xed, 0xc4, 0x34, 0xa8, - 0xc4, 0x53, 0x59, 0xb5, 0xb2, 0x6a, 0x4d, 0x15, 0xfe, 0xb3, 0x42, 0xae, 0x92, 0xd6, 0xe0, 0xbf, - 0x96, 0x4b, 0xd5, 0x2b, 0xab, 0x2a, 0x4b, 0x3c, 0xd5, 0x35, 0xd5, 0x6b, 0xaa, 0xa5, 0x95, 0xd5, - 0x6f, 0x49, 0x6b, 0xaa, 0x57, 0xd7, 0xc8, 0xe4, 0x9b, 0xbc, 0x84, 0xf2, 0x3e, 0x0a, 0x06, 0x14, - 0x2a, 0xb1, 0x2f, 0xd6, 0x99, 0x9c, 0x1c, 0xbd, 0xc8, 0x30, 0x6d, 0xa4, 0xa9, 0xf0, 0xed, 0x3b, - 0x4e, 0x3a, 0xf2, 0x7f, 0xb4, 0xa2, 0x58, 0x88, 0x03, 0xf5, 0x96, 0x2a, 0xfd, 0xca, 0x8a, 0x62, - 0x5f, 0xb5, 0xe5, 0xc6, 0x67, 0x31, 0x2e, 0x36, 0x15, 0xa3, 0x23, 0x17, 0xc5, 0x07, 0x5b, 0x0c, - 0x65, 0xb6, 0x36, 0xac, 0x6a, 0xe7, 0x3f, 0x8d, 0xc7, 0x3a, 0xe9, 0x50, 0xc5, 0x56, 0x44, 0xbb, - 0x9c, 0xa5, 0xfb, 0x90, 0x99, 0x31, 0x8d, 0xa1, 0xfb, 0x0a, 0x6c, 0x5f, 0xa6, 0x39, 0xc8, 0x58, - 0x3a, 0x6f, 0x19, 0xca, 0x5e, 0x57, 0x5b, 0x41, 0xe2, 0x40, 0x61, 0x28, 0xd6, 0x7f, 0x1b, 0x2e, - 0xf0, 0xb4, 0xef, 0xba, 0xda, 0x0a, 0x4f, 0x75, 0xa5, 0xac, 0xd7, 0xf1, 0x6f, 0x53, 0x1b, 0xd3, - 0xa9, 0x46, 0xd4, 0xd7, 0x57, 0xa8, 0x8d, 0xe9, 0xd3, 0x6c, 0x47, 0xb0, 0x2e, 0x35, 0x15, 0x56, - 0x97, 0x2e, 0x6b, 0x17, 0xf5, 0x07, 0x31, 0x71, 0xf1, 0xbc, 0xd6, 0xfb, 0xad, 0xbe, 0xb1, 0xbb, - 0x8f, 0x69, 0x17, 0x3f, 0x4d, 0xf6, 0xb5, 0x51, 0xdb, 0xd3, 0x1a, 0x94, 0xd7, 0xe4, 0x0d, 0x87, - 0x3f, 0xf0, 0x11, 0xff, 0x6b, 0x08, 0xd4, 0x05, 0x45, 0x62, 0xb1, 0xcd, 0x63, 0xdc, 0x30, 0xb8, - 0x03, 0x82, 0x14, 0x0c, 0x95, 0x52, 0xa7, 0x3f, 0xd7, 0xfa, 0x77, 0xca, 0xa4, 0x0b, 0xff, 0x0e, - 0xc2, 0xa7, 0x8a, 0x1d, 0xaf, 0xa7, 0x95, 0x57, 0xab, 0xd2, 0x72, 0x81, 0x1c, 0xa0, 0xc1, 0x9a, - 0xd3, 0x83, 0x86, 0xf4, 0x93, 0xcc, 0x81, 0x3c, 0xef, 0xa1, 0x01, 0x27, 0x41, 0x94, 0x0d, 0x84, - 0x6d, 0x3c, 0xd6, 0x59, 0x21, 0xc9, 0x78, 0x58, 0x5e, 0x42, 0xf9, 0x3e, 0x65, 0xb3, 0x5f, 0x47, - 0x0e, 0xc4, 0x63, 0xfa, 0x31, 0x55, 0x2a, 0x14, 0x68, 0xa1, 0x38, 0xaf, 0x42, 0xf2, 0x18, 0x57, - 0x34, 0x75, 0xf6, 0x07, 0xed, 0xc4, 0xae, 0xea, 0x4a, 0xad, 0xeb, 0xa2, 0x4c, 0x5b, 0xf0, 0x7f, - 0x34, 0x11, 0x82, 0x1c, 0xa4, 0x41, 0xb8, 0xdf, 0x54, 0xa5, 0xb5, 0x82, 0xa5, 0x42, 0xac, 0x22, - 0x64, 0xc5, 0x69, 0x35, 0xd5, 0xa6, 0xe3, 0x81, 0x55, 0x52, 0xdd, 0x9a, 0x2a, 0xb9, 0xc4, 0xf3, - 0xab, 0xd5, 0xf2, 0xeb, 0xfa, 0xbf, 0x55, 0x6b, 0x2a, 0x2a, 0x4b, 0x3c, 0x50, 0xfa, 0x2e, 0xfe, - 0x21, 0xad, 0x5c, 0x69, 0x18, 0xaf, 0xc7, 0x07, 0x62, 0xd0, 0x4e, 0xb6, 0x0c, 0xca, 0xff, 0x19, - 0x4d, 0x6b, 0x0e, 0xd4, 0xd5, 0xbf, 0xa7, 0xf8, 0x9a, 0x1b, 0x70, 0x24, 0xce, 0x59, 0x78, 0xa3, - 0xf0, 0xe7, 0xad, 0x35, 0x62, 0x65, 0xea, 0xdc, 0x76, 0x2d, 0x76, 0x0a, 0xee, 0xa9, 0xf9, 0x14, - 0x47, 0x87, 0x96, 0xa6, 0x8e, 0x9f, 0x49, 0x9e, 0x88, 0x69, 0x5d, 0xdb, 0xe2, 0x03, 0x9d, 0xd0, - 0xe8, 0xda, 0x50, 0xfb, 0x32, 0x28, 0xc5, 0x71, 0x37, 0xcd, 0x0a, 0xd9, 0x3a, 0x68, 0xe1, 0x95, - 0x6c, 0xc8, 0x34, 0x3a, 0x11, 0x39, 0xde, 0xe5, 0x96, 0x57, 0x77, 0x8e, 0xdb, 0xab, 0x3b, 0xde, - 0x1f, 0xdb, 0x35, 0xaa, 0xf4, 0x06, 0x5a, 0x2d, 0xa4, 0x3d, 0x82, 0x9b, 0x7b, 0x6a, 0xff, 0x79, - 0x36, 0x7a, 0x10, 0xfc, 0xb1, 0x21, 0x55, 0x80, 0x3f, 0xb0, 0xca, 0xfb, 0x61, 0x9d, 0xff, 0x23, - 0xe5, 0x46, 0x7d, 0x81, 0x1d, 0xac, 0x9f, 0x1b, 0xf3, 0x6a, 0x45, 0x8c, 0x6f, 0xa2, 0x49, 0x8d, - 0xfe, 0x80, 0xfe, 0x31, 0x0c, 0x03, 0xd3, 0xca, 0x5f, 0xd2, 0x9f, 0x56, 0xa3, 0x4c, 0x2c, 0x8e, - 0x5f, 0x3e, 0x9b, 0xd8, 0x77, 0x29, 0xc0, 0xf8, 0x94, 0x79, 0x49, 0xf8, 0x14, 0x7f, 0x60, 0x23, - 0x18, 0x34, 0xc6, 0x07, 0xf6, 0x8c, 0x1c, 0xee, 0x36, 0xd2, 0xa1, 0x1a, 0x5d, 0xf1, 0xc8, 0xb0, - 0x0c, 0x0c, 0x22, 0x74, 0x64, 0x28, 0x1b, 0xe3, 0xc8, 0xbb, 0x2d, 0x23, 0x43, 0x57, 0xfe, 0x15, - 0x07, 0xbb, 0xfa, 0xa8, 0x2a, 0x15, 0x30, 0xec, 0xea, 0x54, 0x60, 0x57, 0xe3, 0xb1, 0x98, 0xb6, - 0xf7, 0x90, 0x99, 0x82, 0xdd, 0x64, 0x50, 0xdf, 0x51, 0xa5, 0xb7, 0xd0, 0x9b, 0x42, 0xc6, 0x5d, - 0x17, 0x05, 0x98, 0x21, 0xdd, 0xd4, 0x44, 0x6f, 0x54, 0x3b, 0xd7, 0x05, 0x1a, 0x2b, 0x92, 0x28, - 0xe5, 0xec, 0xa5, 0x91, 0xc3, 0xdd, 0x23, 0x9f, 0x1d, 0xb1, 0xf2, 0xa5, 0x85, 0x3d, 0xd9, 0xe8, - 0xa1, 0x34, 0x43, 0x4f, 0x8c, 0xab, 0xea, 0x72, 0xc5, 0x72, 0xee, 0xd0, 0x15, 0x7b, 0x57, 0x95, - 0x7e, 0x83, 0xde, 0x12, 0x32, 0xef, 0x9f, 0xf8, 0xdc, 0xd8, 0xcf, 0x86, 0xea, 0xe4, 0x60, 0x8d, - 0x85, 0x3b, 0xac, 0x87, 0x53, 0xa9, 0x84, 0xfd, 0x21, 0xc5, 0x77, 0x87, 0xae, 0x5b, 0x05, 0xce, - 0x6e, 0x61, 0x7c, 0x90, 0x5c, 0xb9, 0x47, 0x54, 0x69, 0x91, 0xc0, 0x96, 0x8b, 0x33, 0x6c, 0x97, - 0x43, 0x66, 0x6b, 0xf9, 0x97, 0x18, 0xf8, 0x07, 0x7a, 0xb8, 0x30, 0x23, 0xfc, 0x43, 0xa6, 0x63, - 0x13, 0xfa, 0x8d, 0xd8, 0x6f, 0x99, 0xb7, 0x41, 0x7c, 0xc5, 0xb1, 0xc7, 0x47, 0x13, 0xbd, 0x9f, - 0x98, 0x36, 0x1e, 0xfb, 0xcf, 0x95, 0xc0, 0x3e, 0x6b, 0x6d, 0x1d, 0xf1, 0xcb, 0x47, 0x52, 0xfd, - 0x5b, 0xc1, 0x7f, 0x37, 0x3e, 0x10, 0x4d, 0xed, 0xfa, 0x2e, 0x11, 0x3d, 0x6d, 0x97, 0xd6, 0xb0, - 0x8b, 0x28, 0xec, 0xce, 0x46, 0x8b, 0xd2, 0x7d, 0xff, 0xfe, 0x25, 0x19, 0xdb, 0x3b, 0xe4, 0xb2, - 0x81, 0xfa, 0x69, 0xd1, 0x5b, 0x52, 0x6a, 0x8b, 0xff, 0x01, 0x27, 0x48, 0x8f, 0xcf, 0x7e, 0x33, - 0x0e, 0xe4, 0xb8, 0xdd, 0x0c, 0x18, 0xf1, 0xb6, 0xdf, 0x8c, 0x95, 0xf4, 0x66, 0x60, 0xb3, 0x1d, - 0xb8, 0x19, 0x10, 0x69, 0x8b, 0x29, 0x17, 0x0b, 0x60, 0x0d, 0x36, 0xa9, 0x44, 0x62, 0xff, 0x39, - 0x99, 0x6d, 0xc6, 0x57, 0x3a, 0xae, 0x48, 0x91, 0x7e, 0xc9, 0xcc, 0x2b, 0xc2, 0x03, 0xe8, 0x66, - 0xbc, 0x28, 0xfc, 0x7e, 0x0e, 0xe5, 0x35, 0x7a, 0x03, 0xcd, 0xde, 0x06, 0x62, 0x88, 0xf6, 0x27, - 0x55, 0xfa, 0x48, 0x20, 0x45, 0x62, 0x13, 0x98, 0xd8, 0xb2, 0x03, 0x95, 0x18, 0x27, 0x68, 0xaf, - 0xd0, 0xc9, 0xba, 0xad, 0x3d, 0x70, 0x3f, 0x74, 0x18, 0x8c, 0x46, 0x41, 0x5e, 0xa5, 0x93, 0xd0, - 0xe7, 0xf7, 0xeb, 0xd4, 0x20, 0x0e, 0x64, 0xa4, 0xa3, 0xae, 0xbe, 0x93, 0x23, 0x5f, 0xe2, 0x10, - 0x0e, 0xd8, 0x80, 0x0e, 0x06, 0x1c, 0xd9, 0xd5, 0x91, 0xea, 0xdf, 0x2f, 0x93, 0x2f, 0x97, 0x05, - 0x54, 0x69, 0x13, 0xf2, 0x0b, 0x99, 0x0f, 0x4b, 0x7c, 0xc4, 0xf5, 0xf4, 0xd9, 0xfb, 0x9b, 0xee, - 0x82, 0xd6, 0x60, 0xe2, 0xc4, 0x14, 0xaa, 0xfe, 0x9d, 0xeb, 0x5d, 0x65, 0x41, 0x6d, 0xbc, 0xdf, - 0xd5, 0xda, 0x31, 0xc8, 0x55, 0xd9, 0x74, 0x10, 0xa6, 0x5c, 0x95, 0xf1, 0x2b, 0x1a, 0x2f, 0xd2, - 0xd5, 0xdb, 0x73, 0xfb, 0xaf, 0x70, 0xe8, 0xe1, 0x2a, 0xec, 0x0b, 0x4c, 0x7b, 0x18, 0x91, 0xef, - 0xee, 0xc0, 0xfd, 0x37, 0x16, 0x35, 0xda, 0x14, 0xc4, 0x45, 0xe0, 0xca, 0x6c, 0x22, 0x00, 0x6c, - 0xc8, 0x98, 0x68, 0xfb, 0x02, 0xcc, 0xe8, 0x6c, 0x94, 0xd8, 0xde, 0x6c, 0xe4, 0x49, 0x3f, 0xe2, - 0xfd, 0x77, 0x66, 0x14, 0x48, 0xab, 0x53, 0xa5, 0x5a, 0x54, 0x23, 0x8c, 0xba, 0x85, 0xa2, 0x90, - 0xf9, 0x54, 0xd8, 0x75, 0x15, 0xfe, 0x15, 0x87, 0x3c, 0x95, 0xfe, 0xf0, 0x5d, 0x83, 0xb4, 0xb5, - 0xaa, 0x24, 0xa3, 0x5a, 0x61, 0xd4, 0x39, 0x88, 0x8b, 0xb4, 0x96, 0x6f, 0x47, 0x0e, 0xf6, 0x8d, - 0x11, 0xd4, 0x3e, 0xce, 0x46, 0x8f, 0x64, 0x18, 0xf2, 0x3e, 0xac, 0x8d, 0x0d, 0xab, 0x8d, 0xbe, - 0x87, 0xa2, 0x90, 0xf9, 0x5c, 0x2c, 0xc0, 0xf6, 0x77, 0x08, 0xcd, 0x02, 0x2f, 0x48, 0x1d, 0xc7, - 0x1b, 0xd0, 0xf5, 0x27, 0x94, 0x1f, 0xf1, 0x86, 0x37, 0x61, 0x89, 0x32, 0x0d, 0x01, 0xf1, 0x5b, - 0x81, 0x16, 0x8a, 0x32, 0xe0, 0x7a, 0x9a, 0xd3, 0x05, 0x24, 0x72, 0x46, 0xb2, 0x55, 0xbc, 0x11, - 0xd7, 0x86, 0xda, 0x0d, 0x7f, 0xae, 0x35, 0x41, 0xb3, 0x8c, 0xb1, 0xf7, 0x5c, 0x1e, 0x0a, 0x36, - 0x92, 0x8a, 0x64, 0x5f, 0x9b, 0x4c, 0x47, 0xe7, 0x37, 0x52, 0xf9, 0x2e, 0x9c, 0xe9, 0x6a, 0x7c, - 0x30, 0x44, 0xbe, 0x3b, 0x95, 0x7c, 0x1a, 0xcb, 0x8d, 0xae, 0x97, 0x3f, 0x19, 0x5a, 0x26, 0x4f, - 0xa5, 0x62, 0xd9, 0xea, 0x9a, 0x15, 0xf2, 0x24, 0x22, 0xca, 0x95, 0x27, 0xd5, 0xad, 0xad, 0xa8, - 0xa8, 0xaa, 0xab, 0x93, 0xf3, 0x40, 0x7c, 0x2b, 0x4f, 0x5a, 0x53, 0xbd, 0xaa, 0x6a, 0xf5, 0xda, - 0x35, 0x54, 0x6e, 0xfb, 0x5b, 0x9b, 0xdb, 0x04, 0xa4, 0x02, 0xa5, 0xd0, 0xf3, 0x34, 0x51, 0x97, - 0xe1, 0x68, 0x49, 0x54, 0x1c, 0x9d, 0xd8, 0x7d, 0x72, 0x64, 0xdf, 0xe1, 0xc4, 0xc1, 0x0b, 0xf1, - 0x81, 0x18, 0x00, 0x56, 0xa2, 0xab, 0x3b, 0x79, 0x22, 0x66, 0x06, 0x81, 0xa1, 0x10, 0xf6, 0x14, - 0xca, 0x0d, 0x47, 0xbc, 0xa1, 0x08, 0x61, 0xc3, 0x17, 0xa9, 0xd2, 0x42, 0x01, 0x4a, 0x44, 0x9e, - 0x04, 0xf9, 0xea, 0xee, 0xd7, 0xcf, 0xe6, 0xe0, 0x85, 0x91, 0x83, 0xdf, 0xc9, 0x50, 0xc5, 0x2f, - 0x46, 0xd9, 0x4a, 0xc0, 0x47, 0x4c, 0xeb, 0x41, 0x92, 0xae, 0x04, 0x7c, 0x46, 0x0f, 0xfd, 0xe0, - 0x8e, 0x1c, 0x25, 0x3d, 0xf4, 0x0a, 0x7e, 0x25, 0x9a, 0xa6, 0x7c, 0xa8, 0xd4, 0x37, 0xeb, 0x70, - 0xb2, 0xc6, 0xdf, 0xa8, 0xb0, 0x32, 0x75, 0x6b, 0x8d, 0x31, 0x06, 0x89, 0xff, 0x04, 0x63, 0x58, - 0x9b, 0xf0, 0x6b, 0xd1, 0x94, 0xfa, 0xe6, 0x50, 0x48, 0x09, 0x44, 0xea, 0x22, 0x4a, 0x13, 0x91, - 0xb0, 0x3f, 0xa9, 0x4a, 0x4b, 0x05, 0xb6, 0x5c, 0x7c, 0x84, 0x8c, 0xd4, 0xf7, 0xb9, 0xd6, 0x7b, - 0x06, 0xc6, 0xa3, 0xd4, 0x19, 0x09, 0x52, 0xc0, 0xb6, 0xe7, 0xdf, 0x40, 0x53, 0xc3, 0x11, 0xa5, - 0xa9, 0x4e, 0x87, 0xb0, 0x40, 0xbd, 0x82, 0x93, 0x2d, 0x4c, 0x2e, 0x2f, 0x55, 0xa5, 0x42, 0xc1, - 0x52, 0x61, 0x9b, 0x22, 0x1e, 0xef, 0x7a, 0x79, 0xae, 0xca, 0x65, 0xe5, 0x73, 0xb2, 0xa5, 0x25, - 0x7f, 0x98, 0xd3, 0xb7, 0x57, 0x69, 0x32, 0x62, 0xa6, 0x96, 0xb8, 0xc7, 0x87, 0x66, 0x00, 0x7b, - 0xb1, 0x3e, 0x15, 0x12, 0x3d, 0x74, 0xad, 0x2a, 0xbd, 0x2a, 0x40, 0x7f, 0xf1, 0x65, 0xf8, 0x26, - 0x24, 0x4a, 0x84, 0x6f, 0x32, 0xbe, 0x01, 0x83, 0xa9, 0x53, 0x5b, 0x41, 0x50, 0x0b, 0x85, 0xa0, - 0x50, 0xd5, 0x49, 0xd3, 0xa1, 0x6d, 0xda, 0xc0, 0x40, 0xe2, 0xe0, 0x85, 0xeb, 0xe5, 0x93, 0x7a, - 0xb8, 0x9c, 0x7c, 0x6e, 0xe6, 0x1c, 0x19, 0x46, 0xe4, 0x7f, 0xe7, 0x14, 0xa8, 0x97, 0xab, 0xd2, - 0xc3, 0xac, 0x40, 0x9d, 0x2e, 0xd4, 0xbc, 0xfa, 0x37, 0x12, 0x26, 0xe5, 0x2d, 0x36, 0xac, 0x02, - 0x08, 0xdc, 0x5f, 0xc0, 0x5f, 0x30, 0xc3, 0x2a, 0x58, 0xbf, 0x80, 0x03, 0x2a, 0x18, 0x9a, 0x57, - 0x97, 0x04, 0x28, 0x66, 0x47, 0xfe, 0x15, 0x33, 0x4f, 0x04, 0xcd, 0x97, 0x69, 0xc9, 0x13, 0x01, - 0xb0, 0x8b, 0x55, 0xc7, 0xf1, 0x58, 0xcc, 0x88, 0x58, 0x36, 0xc7, 0x4c, 0x0b, 0x51, 0x8d, 0x50, - 0x83, 0x37, 0x1c, 0x01, 0x12, 0x8c, 0x08, 0xdf, 0xb1, 0x56, 0x84, 0x29, 0x16, 0x0b, 0x88, 0x51, - 0xfa, 0xc0, 0xee, 0xc4, 0xd7, 0xc7, 0x49, 0x1c, 0x4a, 0x80, 0x49, 0xa6, 0xd5, 0x82, 0x1a, 0x84, - 0xcc, 0x63, 0x73, 0x09, 0xff, 0x28, 0x58, 0xb3, 0x02, 0x3a, 0x88, 0x57, 0xbd, 0x33, 0x1b, 0x14, - 0xb2, 0x49, 0x95, 0x1a, 0xd1, 0x26, 0xc1, 0x89, 0xf6, 0x8c, 0x54, 0x7e, 0x06, 0x30, 0x80, 0xa1, - 0x32, 0x45, 0x4b, 0x57, 0x38, 0x0b, 0xf8, 0x5d, 0xe1, 0xe0, 0xa8, 0xad, 0xf6, 0x17, 0xe6, 0x26, - 0x32, 0x89, 0xa8, 0xff, 0x3d, 0x87, 0x78, 0xf6, 0x6b, 0x13, 0xe3, 0xad, 0x2b, 0x1a, 0x9d, 0x27, - 0x20, 0xa9, 0xdf, 0xae, 0x72, 0x68, 0xa6, 0xac, 0x44, 0x42, 0x5b, 0xd8, 0x37, 0xe4, 0x55, 0xea, - 0x78, 0x46, 0x33, 0x82, 0xf1, 0x02, 0x29, 0x12, 0xf3, 0x61, 0x8f, 0x75, 0xa2, 0xa4, 0x20, 0x34, - 0x0f, 0x72, 0xb8, 0x3a, 0x33, 0xf2, 0x10, 0x57, 0xb5, 0x15, 0x66, 0x14, 0x5d, 0x58, 0x77, 0xa9, - 0x2a, 0x79, 0xcc, 0x28, 0xba, 0x73, 0x61, 0x2c, 0xe0, 0x01, 0xb5, 0xae, 0xbd, 0xa9, 0xef, 0x2f, - 0x62, 0x98, 0x9c, 0x14, 0xca, 0xc5, 0x03, 0xd3, 0xd8, 0xb9, 0x65, 0x2f, 0xa8, 0xd2, 0x73, 0xe8, - 0x19, 0xc1, 0x31, 0x57, 0x71, 0x26, 0x74, 0xd6, 0x8b, 0x8c, 0x63, 0x27, 0x1f, 0x67, 0x12, 0x38, - 0xfe, 0x3f, 0x1c, 0x9a, 0xc5, 0xf4, 0x9c, 0x68, 0xe9, 0xa8, 0xd2, 0x33, 0x76, 0xf8, 0x59, 0x02, - 0xc6, 0x6e, 0x36, 0x8d, 0x05, 0x6a, 0x46, 0x99, 0x24, 0x87, 0x9c, 0xcc, 0x43, 0xb3, 0xe0, 0x46, - 0xb2, 0xa7, 0xbc, 0xc2, 0x76, 0xca, 0x4b, 0xd2, 0x9c, 0x32, 0x60, 0x9d, 0x47, 0xd3, 0x1f, 0xf2, - 0x3d, 0xf3, 0xe6, 0x93, 0xd7, 0x3b, 0xe7, 0xa6, 0x5f, 0xef, 0xdc, 0x5b, 0xf8, 0x7a, 0xe7, 0xdd, - 0xa2, 0xd7, 0xdb, 0x7c, 0x6a, 0x27, 0xb9, 0x3f, 0xb5, 0x0e, 0xc8, 0xb8, 0x73, 0x4f, 0xed, 0x2b, - 0x26, 0x7a, 0xc8, 0x67, 0x1e, 0x2b, 0x33, 0xc8, 0x36, 0x2c, 0x15, 0x03, 0xb6, 0xf5, 0xb1, 0x22, - 0x4d, 0x6e, 0xf9, 0x0b, 0xf3, 0xa2, 0x2a, 0x95, 0xa1, 0x67, 0x05, 0xe7, 0x75, 0x11, 0x67, 0xc2, - 0x34, 0x32, 0x23, 0x9a, 0xff, 0xc6, 0x21, 0x9e, 0xed, 0xfa, 0x53, 0xc3, 0x34, 0xdb, 0xb3, 0xd0, - 0x2c, 0x60, 0x13, 0x6e, 0x0b, 0xa6, 0x89, 0xd8, 0xa3, 0xfb, 0x62, 0x2b, 0x0b, 0xea, 0x3e, 0xbb, - 0x92, 0xf5, 0x8e, 0x35, 0xe7, 0xa6, 0xc3, 0x60, 0xc7, 0xb7, 0xf1, 0xe1, 0xcb, 0x89, 0xde, 0x2f, - 0xc1, 0x72, 0x0e, 0xae, 0x8d, 0x76, 0xb6, 0x3d, 0xd1, 0x8a, 0x63, 0xc8, 0x5e, 0x3a, 0x8a, 0x43, - 0xf4, 0x7e, 0xa2, 0xb5, 0x9c, 0x4c, 0x0e, 0xb6, 0x26, 0xfa, 0x3e, 0x63, 0x83, 0xf1, 0x96, 0x2d, - 0x51, 0xa5, 0x12, 0x24, 0x08, 0xce, 0x85, 0x89, 0x53, 0x49, 0x8e, 0x59, 0xbc, 0x02, 0x0a, 0x0f, - 0x85, 0xd1, 0x2c, 0xc3, 0xb1, 0x7a, 0x22, 0x41, 0xc1, 0xeb, 0x63, 0x80, 0x02, 0xac, 0xcf, 0x01, - 0x28, 0x98, 0xc7, 0xc6, 0xfa, 0x74, 0x00, 0xc2, 0x2e, 0x0e, 0x4d, 0x5f, 0xa1, 0x44, 0x58, 0x28, - 0x58, 0x6e, 0x83, 0x82, 0xc5, 0xaa, 0x34, 0x8b, 0x42, 0xc1, 0x24, 0xbd, 0xa5, 0x67, 0x2c, 0x40, - 0x50, 0x56, 0xaa, 0x4a, 0x02, 0x2a, 0x12, 0x6c, 0xc3, 0x8b, 0xf3, 0xc0, 0xa8, 0xcf, 0x9c, 0x09, - 0x89, 0x83, 0xf9, 0x0f, 0xb2, 0x70, 0x72, 0xdb, 0x7b, 0xf9, 0x3e, 0xd2, 0xe8, 0x97, 0xf6, 0x63, - 0x28, 0xab, 0x52, 0xa5, 0x72, 0xf4, 0x8a, 0x60, 0xdf, 0x80, 0x1b, 0x0d, 0x3c, 0xf9, 0x5f, 0xf3, - 0xd0, 0x8c, 0x95, 0xfe, 0xb0, 0xe5, 0x38, 0xeb, 0x9d, 0xf6, 0xe6, 0x55, 0xaa, 0xf4, 0x3c, 0xcb, - 0x26, 0x2d, 0x36, 0x99, 0x98, 0xb1, 0x45, 0x9a, 0x04, 0x2d, 0x85, 0x25, 0x5a, 0x00, 0xc3, 0x29, - 0x65, 0x19, 0xf6, 0xdb, 0x45, 0x2c, 0xa7, 0xb4, 0xd0, 0xf6, 0x11, 0x36, 0xfa, 0x1c, 0x8c, 0xe8, - 0x61, 0xf9, 0xa3, 0x97, 0x4c, 0xfe, 0x28, 0xdb, 0xcc, 0x6b, 0xe3, 0xce, 0x1f, 0x61, 0xa3, 0x70, - 0x23, 0xc5, 0x2d, 0xe1, 0x8e, 0x5e, 0x32, 0x9f, 0xac, 0x1c, 0xa6, 0xbf, 0xeb, 0x93, 0xc5, 0xf6, - 0x37, 0x92, 0x40, 0xb0, 0xf2, 0x99, 0xdc, 0x3b, 0x2f, 0x9f, 0x09, 0x51, 0x5a, 0x2d, 0xcf, 0x34, - 0x53, 0x33, 0x68, 0xb5, 0x55, 0x2c, 0xad, 0x56, 0xc4, 0x52, 0x69, 0x25, 0x1e, 0x6a, 0x64, 0x47, - 0xa8, 0x34, 0xd3, 0xb0, 0x8e, 0x50, 0x69, 0x25, 0x9e, 0xe5, 0xab, 0xe5, 0x8a, 0x2a, 0x1a, 0x29, - 0xa1, 0x98, 0x92, 0x6d, 0x6b, 0x89, 0x75, 0x65, 0x2d, 0x91, 0x48, 0xe8, 0x6f, 0x2c, 0xb1, 0xae, - 0xac, 0x15, 0x97, 0x26, 0x8e, 0x76, 0xc7, 0x63, 0x9f, 0x68, 0xbd, 0xb1, 0xc4, 0xe1, 0xfe, 0xf8, - 0xc0, 0x1e, 0x33, 0xb6, 0x66, 0x75, 0x2d, 0x09, 0xd6, 0xd7, 0x7f, 0x49, 0x8b, 0xed, 0xa3, 0x7e, - 0xc2, 0xc4, 0xf4, 0xb2, 0x96, 0xff, 0x95, 0x9b, 0xc3, 0x3d, 0x8e, 0xb8, 0x63, 0x91, 0xa3, 0xfe, - 0x1c, 0x46, 0x64, 0x1c, 0xeb, 0x53, 0x97, 0x77, 0x25, 0x06, 0x4f, 0x18, 0x07, 0x8d, 0xcd, 0x6f, - 0x2c, 0x52, 0xd4, 0xdd, 0x9c, 0x2a, 0xed, 0xe4, 0xd0, 0x76, 0x4e, 0xb0, 0x03, 0xbd, 0xd8, 0x04, - 0x53, 0xd2, 0xb7, 0xf3, 0x0e, 0x45, 0x27, 0xfc, 0x2a, 0x1b, 0x72, 0x36, 0x4f, 0x24, 0xfc, 0x55, - 0x97, 0xd9, 0x1c, 0x0a, 0xe3, 0x2f, 0xb0, 0xb3, 0xc4, 0xf8, 0x6b, 0x91, 0x25, 0x26, 0x21, 0x73, - 0x2c, 0x16, 0x97, 0x77, 0x05, 0xa1, 0x06, 0x6f, 0x44, 0x81, 0x9d, 0x20, 0x0a, 0x29, 0xf7, 0xa1, - 0xf5, 0xf7, 0x9a, 0x0c, 0xfd, 0x28, 0x1d, 0x5a, 0x1b, 0xfe, 0x58, 0x6b, 0xeb, 0x48, 0xf4, 0x46, - 0x13, 0x07, 0xce, 0xd9, 0x62, 0x4b, 0xc9, 0xcc, 0xc0, 0x94, 0xd1, 0xb4, 0xef, 0xb9, 0xc8, 0x13, - 0x94, 0x09, 0x34, 0x70, 0x9a, 0xf0, 0x87, 0x83, 0x8f, 0xa2, 0x45, 0x70, 0x55, 0x99, 0xd4, 0x4a, - 0xab, 0x9b, 0x74, 0x1a, 0xdf, 0xc0, 0x9b, 0xbf, 0x47, 0xb3, 0xfc, 0x61, 0x2c, 0xf5, 0xad, 0x0c, - 0x7e, 0x10, 0x00, 0xf5, 0x03, 0x3e, 0xc8, 0x7c, 0xb0, 0x9f, 0x74, 0xd6, 0x8a, 0xbf, 0xc0, 0x39, - 0x9d, 0x4a, 0x7d, 0xc1, 0x0f, 0x02, 0xa5, 0x10, 0xd3, 0xd6, 0x57, 0x42, 0xa2, 0xe2, 0xb6, 0x6c, - 0x4d, 0x9d, 0x1d, 0x20, 0xc2, 0x61, 0xc8, 0x99, 0xe8, 0xec, 0xcf, 0x7f, 0x80, 0xf2, 0x95, 0x0f, - 0x9b, 0xbc, 0x01, 0x1f, 0x65, 0xc3, 0xdf, 0x56, 0xa5, 0x37, 0x05, 0x5a, 0x28, 0xae, 0x34, 0xfe, - 0x22, 0x66, 0x0f, 0xc9, 0xb3, 0x07, 0x13, 0xdf, 0xee, 0xc7, 0x31, 0xde, 0x5a, 0xc1, 0xb8, 0xef, - 0xda, 0x50, 0x5b, 0xc8, 0x1b, 0xf0, 0x05, 0x1b, 0x4b, 0x3c, 0x0d, 0x8a, 0x37, 0x1c, 0x29, 0xfd, - 0xc0, 0x1b, 0x8e, 0x28, 0x25, 0x9e, 0xc6, 0x60, 0x38, 0x52, 0xda, 0x14, 0xf4, 0x85, 0x4b, 0x3c, - 0x4d, 0x21, 0x7f, 0x30, 0xe4, 0x8f, 0x6c, 0x91, 0xe9, 0xb8, 0xfc, 0x47, 0x88, 0x6f, 0xf4, 0x7e, - 0x58, 0xd5, 0xd8, 0x14, 0xd9, 0x52, 0xde, 0xdc, 0xb0, 0x09, 0x10, 0x14, 0xb1, 0x99, 0x7a, 0x4d, - 0x95, 0x56, 0x08, 0x2e, 0xd5, 0xe2, 0xb2, 0x46, 0xef, 0x87, 0xa5, 0x8a, 0x5e, 0x58, 0xba, 0xbe, - 0xb9, 0x61, 0x53, 0x29, 0x84, 0x4f, 0x29, 0xd1, 0x3a, 0xf6, 0x27, 0xbe, 0x3e, 0x4e, 0x22, 0x4a, - 0x60, 0x6b, 0x18, 0x53, 0x41, 0xee, 0x32, 0x0c, 0xff, 0x07, 0x34, 0x3d, 0x6c, 0xec, 0x43, 0xa5, - 0xd2, 0xe0, 0xdd, 0x42, 0x8c, 0xa1, 0xeb, 0x54, 0xa9, 0x56, 0xb0, 0x55, 0x89, 0x2f, 0x19, 0x91, - 0xa5, 0xb0, 0xd1, 0x47, 0x77, 0xa7, 0x76, 0xa2, 0x67, 0x64, 0xff, 0x65, 0xe0, 0xd3, 0xb4, 0xa1, - 0xa8, 0x76, 0x7a, 0x8f, 0xd6, 0x7a, 0x42, 0x3b, 0xdb, 0x03, 0x9f, 0xa7, 0x26, 0x8f, 0xcb, 0x96, - 0x6a, 0xad, 0x3b, 0x47, 0xd4, 0xa3, 0xb2, 0x6d, 0x3c, 0xfe, 0xbf, 0xe7, 0xd0, 0x5c, 0x5a, 0xb4, - 0x36, 0x10, 0x50, 0x14, 0x9f, 0xe2, 0x63, 0x58, 0x44, 0x88, 0x9c, 0x26, 0xb8, 0xb7, 0x11, 0x83, - 0xcc, 0x79, 0x37, 0x93, 0x8a, 0xd2, 0x88, 0xbf, 0x51, 0x29, 0x21, 0xfc, 0x1e, 0x44, 0xc8, 0xe9, - 0x6b, 0xd3, 0x7e, 0x68, 0x81, 0x39, 0xea, 0x0f, 0x2a, 0x71, 0x35, 0xf9, 0x34, 0x39, 0xd8, 0x97, - 0xfc, 0x22, 0x36, 0x72, 0xf0, 0x1b, 0xed, 0x44, 0x8f, 0x76, 0x6e, 0x2f, 0xcc, 0x50, 0xeb, 0xee, - 0x4c, 0x7d, 0xf6, 0x55, 0xba, 0xe9, 0xbb, 0xcf, 0x83, 0xff, 0xcf, 0x1c, 0x7a, 0xc8, 0xac, 0x89, - 0xf8, 0x1b, 0xfc, 0x1f, 0x61, 0x8d, 0xc6, 0x9a, 0xf7, 0x42, 0x8a, 0xf7, 0xbd, 0x60, 0x83, 0x8f, - 0x88, 0xab, 0x49, 0xf0, 0xc8, 0xcc, 0x6d, 0xc5, 0xed, 0x1c, 0xbb, 0x2c, 0xb3, 0x45, 0x69, 0xe4, - 0xbd, 0x90, 0x12, 0xd6, 0x9b, 0x94, 0x40, 0x18, 0x17, 0x02, 0xce, 0x38, 0xc3, 0xc3, 0xc8, 0xa1, - 0x56, 0x2d, 0x3a, 0x64, 0x2e, 0x8f, 0x49, 0x24, 0xa4, 0xe3, 0xc8, 0xe1, 0xce, 0x78, 0xac, 0x13, - 0xd6, 0x99, 0x3c, 0xfc, 0x83, 0xd6, 0xba, 0x33, 0xd1, 0xbf, 0x0f, 0x4e, 0x0a, 0xd0, 0xea, 0xc8, - 0xc1, 0x6f, 0xcc, 0x2c, 0x1c, 0x03, 0xb1, 0x5f, 0x2e, 0x95, 0x33, 0x4f, 0x92, 0xef, 0xe0, 0xd0, - 0x03, 0xe1, 0x4d, 0x7e, 0x48, 0x01, 0xf1, 0x2b, 0x7f, 0xe4, 0xbd, 0x95, 0xc1, 0x7a, 0x6f, 0x43, - 0x5d, 0x24, 0x18, 0xd2, 0x91, 0xe7, 0x24, 0x7c, 0x4d, 0x57, 0xab, 0xd2, 0x4a, 0x21, 0x7d, 0x2b, - 0x71, 0x89, 0x76, 0x79, 0x38, 0xb9, 0xff, 0x64, 0xa2, 0xb7, 0x2d, 0xd1, 0xfb, 0xb5, 0xd6, 0x7b, - 0x4e, 0xeb, 0x3b, 0xa4, 0x6d, 0x3b, 0x43, 0xad, 0x13, 0xd8, 0x09, 0x41, 0xf6, 0xb6, 0xf4, 0x63, - 0xf1, 0x9f, 0x72, 0x68, 0xbe, 0xa5, 0xb6, 0x6e, 0x4b, 0x38, 0xa2, 0x34, 0xd6, 0x06, 0x7d, 0x61, - 0x12, 0x3e, 0x12, 0x47, 0x10, 0x4a, 0xd7, 0x46, 0x5c, 0x0e, 0x73, 0xd9, 0xd4, 0xbc, 0x5e, 0x29, - 0x0d, 0xe3, 0x62, 0x4f, 0x4d, 0x9d, 0xfe, 0xcc, 0x1e, 0xf9, 0xb4, 0xd2, 0xab, 0x34, 0x06, 0x03, - 0x75, 0x4a, 0x84, 0x9a, 0x71, 0xd6, 0x06, 0x7d, 0xce, 0x59, 0xc2, 0x14, 0xd3, 0x7d, 0x80, 0xef, - 0xe6, 0xd0, 0x42, 0xff, 0xc6, 0x40, 0x30, 0xa4, 0xd0, 0xf1, 0xc2, 0xcc, 0xce, 0x92, 0x20, 0x35, - 0x38, 0x4b, 0x57, 0xa6, 0x76, 0x62, 0x09, 0x4c, 0xd4, 0x9c, 0x94, 0x91, 0x03, 0x2c, 0x75, 0xf6, - 0x78, 0xf2, 0xec, 0x41, 0xdb, 0x74, 0x32, 0x0d, 0xc5, 0x6f, 0xe5, 0xd0, 0xec, 0xe0, 0xa6, 0x35, - 0xc1, 0x88, 0xb7, 0x61, 0x6d, 0x20, 0xa4, 0x78, 0x7d, 0x5b, 0x2a, 0x82, 0xcd, 0x81, 0x08, 0x96, - 0xe5, 0x4f, 0x83, 0xd3, 0x73, 0xab, 0x17, 0x7f, 0x19, 0xdc, 0x54, 0x1a, 0xd1, 0x4b, 0x4b, 0x9b, - 0xa1, 0xb8, 0xb4, 0x5e, 0x2f, 0x2f, 0x01, 0x24, 0xeb, 0x21, 0x85, 0x1e, 0x1a, 0xb7, 0x24, 0xb1, - 0xff, 0xdc, 0xc8, 0xae, 0x2e, 0xd9, 0x6d, 0x2c, 0xfe, 0x0a, 0x87, 0x1e, 0x68, 0xf4, 0x7e, 0xc8, - 0x56, 0xd4, 0x2a, 0xa1, 0x7a, 0x25, 0x10, 0xd1, 0xe1, 0x68, 0x0a, 0x9e, 0xc9, 0xc7, 0x9c, 0x2a, - 0x75, 0x71, 0x42, 0xfa, 0x76, 0x62, 0x48, 0x47, 0x85, 0xd6, 0x29, 0x35, 0xd1, 0xda, 0x12, 0x52, - 0x44, 0x6e, 0x06, 0x0e, 0x31, 0x42, 0xd0, 0x58, 0x74, 0x90, 0x4e, 0x92, 0x5e, 0x0b, 0xfd, 0x0e, - 0xe1, 0x36, 0x89, 0xbe, 0x13, 0x70, 0xab, 0xb4, 0xd6, 0xc3, 0xda, 0xd6, 0xde, 0x44, 0xdf, 0x67, - 0x54, 0xcb, 0xa8, 0x9d, 0xbd, 0x24, 0xa7, 0x9f, 0x0e, 0xaf, 0x72, 0x68, 0x0e, 0x83, 0x29, 0x70, - 0x35, 0x46, 0x6a, 0x53, 0xf1, 0x7a, 0x7e, 0xab, 0x4a, 0x6f, 0x0b, 0xae, 0x0d, 0xc4, 0x0a, 0x0b, - 0x46, 0x83, 0x95, 0x60, 0x84, 0x66, 0x59, 0x83, 0x2b, 0x5e, 0xd3, 0x3a, 0xf6, 0xc7, 0x87, 0x3b, - 0x92, 0xa7, 0x55, 0xd9, 0x75, 0x68, 0xfe, 0x2f, 0x39, 0xb4, 0x50, 0x1f, 0x65, 0xa3, 0x5f, 0x27, - 0x04, 0x0c, 0x43, 0x91, 0xc6, 0xe0, 0x66, 0x6f, 0x03, 0x9e, 0xdb, 0x34, 0x3c, 0x37, 0x6c, 0x18, - 0x28, 0x64, 0x6a, 0x28, 0xfe, 0xce, 0x08, 0x37, 0x65, 0x18, 0xeb, 0x62, 0xda, 0x59, 0xfb, 0xa1, - 0xc5, 0xf2, 0x18, 0x9c, 0xdb, 0x49, 0xc2, 0x88, 0xf5, 0x7e, 0xa9, 0xf5, 0x9e, 0xd1, 0xef, 0x55, - 0x28, 0xa0, 0x44, 0x94, 0x70, 0x7c, 0xa0, 0x2f, 0xf1, 0xed, 0x19, 0x6d, 0x67, 0xbb, 0xf3, 0x06, - 0x3d, 0x69, 0xa0, 0xd9, 0x4c, 0x9f, 0xe7, 0x1b, 0x59, 0x7e, 0x6a, 0xba, 0x21, 0x48, 0x2d, 0x61, - 0xf9, 0xa9, 0x87, 0x19, 0x66, 0x49, 0xdf, 0x19, 0x2b, 0x53, 0x75, 0x63, 0xa1, 0xfa, 0xcb, 0x4c, - 0x3e, 0x68, 0x86, 0x41, 0x12, 0xce, 0x31, 0xf9, 0xa0, 0xc9, 0x0c, 0x07, 0xe4, 0xd0, 0x10, 0xbd, - 0xc8, 0xe4, 0xb1, 0x9b, 0x69, 0x64, 0xc4, 0x59, 0xc4, 0x64, 0xb1, 0xe3, 0x93, 0x6d, 0x97, 0x12, - 0xd1, 0xd3, 0x24, 0x61, 0x1d, 0x0e, 0xb8, 0xc6, 0xa4, 0x97, 0x3b, 0xe3, 0x92, 0x20, 0x73, 0x16, - 0x46, 0x13, 0x7f, 0x56, 0xa5, 0x3f, 0x38, 0x93, 0x60, 0xbe, 0xc7, 0x66, 0x00, 0xb0, 0x69, 0xc4, - 0xb1, 0x7c, 0x11, 0x67, 0x06, 0xe8, 0xee, 0x8c, 0x0f, 0xf5, 0x68, 0xbd, 0x67, 0x52, 0xfd, 0x27, - 0x61, 0x3f, 0x46, 0xb6, 0x9f, 0x49, 0x0e, 0x7f, 0xe3, 0x21, 0x6c, 0x10, 0x43, 0x8f, 0x79, 0x92, - 0x83, 0x3b, 0xe2, 0x83, 0x17, 0x58, 0x3c, 0xec, 0x49, 0x93, 0x46, 0xf3, 0x1f, 0x73, 0x68, 0xf6, - 0xfa, 0xe6, 0x0d, 0x1b, 0x94, 0x90, 0x4c, 0xb2, 0xdb, 0xc9, 0x3a, 0x8e, 0xc1, 0x09, 0xe1, 0xa6, - 0x95, 0xef, 0xe7, 0x54, 0x69, 0x2f, 0x27, 0xb8, 0xb5, 0x10, 0x3f, 0x82, 0xc2, 0x52, 0x23, 0x2b, - 0x5e, 0x29, 0x4e, 0x75, 0x49, 0x5e, 0x38, 0x62, 0x7a, 0xc5, 0xbc, 0x70, 0xec, 0x35, 0x25, 0x31, - 0x53, 0x99, 0xa7, 0x2e, 0xd9, 0xb9, 0x0b, 0xee, 0x6e, 0xaa, 0xff, 0x24, 0x3c, 0x87, 0x5a, 0xeb, - 0x61, 0x76, 0x28, 0xba, 0x16, 0xcf, 0xb2, 0xa5, 0x4b, 0x65, 0xb7, 0x09, 0xf1, 0x27, 0x00, 0x23, - 0xad, 0x08, 0x79, 0xeb, 0x95, 0x0d, 0xcd, 0x0d, 0x6b, 0x94, 0x50, 0xa3, 0x3f, 0x80, 0x11, 0x66, - 0x9d, 0x52, 0x8f, 0xf3, 0xce, 0x4d, 0x2b, 0xdf, 0xa0, 0x4a, 0xf5, 0x42, 0xfa, 0x56, 0xe2, 0x72, - 0x1d, 0x1f, 0x6d, 0x24, 0x75, 0xa5, 0x11, 0xb3, 0xb2, 0x34, 0xac, 0xd4, 0x97, 0x10, 0xda, 0x0c, - 0xc7, 0x70, 0x83, 0x9b, 0xe3, 0xa9, 0x0d, 0xfa, 0x3c, 0x23, 0xd1, 0xa8, 0xb6, 0x2b, 0x96, 0xe8, - 0x8d, 0xd2, 0x4b, 0x24, 0xa7, 0xff, 0x04, 0xbf, 0x83, 0x43, 0x53, 0xc3, 0xf5, 0xde, 0x40, 0x75, - 0x20, 0xa2, 0x84, 0x36, 0x7b, 0x1b, 0x0a, 0xe6, 0xe0, 0x99, 0xfd, 0x4e, 0x95, 0xde, 0x11, 0x2c, - 0x15, 0xe2, 0x2a, 0xfd, 0x57, 0xa9, 0x9f, 0xfc, 0x2c, 0xb1, 0x01, 0x46, 0xe2, 0xf3, 0x68, 0xe2, - 0xfb, 0x3d, 0xf0, 0x3d, 0xfd, 0xff, 0x9e, 0x7d, 0x14, 0x97, 0xe8, 0xa4, 0xc1, 0x69, 0xd5, 0x72, - 0xfc, 0xcb, 0x96, 0xca, 0x96, 0xc1, 0xf5, 0x77, 0x77, 0x4e, 0xa3, 0xf7, 0x43, 0xfd, 0x92, 0xd6, - 0xea, 0x70, 0x1b, 0x36, 0x44, 0xfc, 0x73, 0xf1, 0x74, 0xde, 0x57, 0xa5, 0x8d, 0x82, 0x6b, 0x03, - 0x71, 0xb5, 0xbe, 0x47, 0x3a, 0x3b, 0x59, 0xda, 0x64, 0x94, 0x03, 0xaa, 0x83, 0x2d, 0x21, 0x44, - 0x6b, 0x57, 0x77, 0xfc, 0x87, 0x4f, 0xd8, 0x3d, 0x61, 0x31, 0x9d, 0x79, 0x9a, 0xcf, 0x2d, 0x5d, - 0x2a, 0xbb, 0x7e, 0x86, 0x3f, 0xc2, 0xa1, 0x19, 0x18, 0x46, 0xd7, 0x36, 0xe9, 0xcc, 0xfe, 0x5b, - 0x4a, 0x28, 0x88, 0x53, 0xa2, 0x67, 0xce, 0x32, 0xfb, 0x2b, 0x55, 0x5a, 0x23, 0xd8, 0xfb, 0x89, - 0x12, 0x60, 0xe7, 0xe6, 0xa6, 0xd2, 0x0d, 0xa1, 0x60, 0x63, 0xe9, 0x47, 0x4a, 0x28, 0x48, 0x1e, - 0x3d, 0xf6, 0x65, 0xb8, 0x36, 0xd4, 0x9a, 0xf8, 0xe6, 0x78, 0xa2, 0xb7, 0xcd, 0xc3, 0xbe, 0x83, - 0xf8, 0xb8, 0xdb, 0x64, 0xfb, 0x98, 0xfa, 0xfc, 0xe6, 0x59, 0x89, 0x62, 0x69, 0x83, 0x7e, 0x0d, - 0x7d, 0x3e, 0x9c, 0x7a, 0x7d, 0x5a, 0xb9, 0xa2, 0x4a, 0xeb, 0x85, 0x34, 0x4d, 0xc4, 0x57, 0x99, - 0xf7, 0xc2, 0xa7, 0xd7, 0x94, 0x7a, 0x37, 0x60, 0xd4, 0xec, 0xf3, 0x95, 0x98, 0x44, 0x7a, 0xeb, - 0x89, 0xc4, 0x81, 0x3e, 0x0a, 0x75, 0xce, 0x83, 0xd6, 0x1f, 0x8d, 0x34, 0x5f, 0xe0, 0x4f, 0xe9, - 0x84, 0x9e, 0xb3, 0x8a, 0xb0, 0x28, 0x05, 0x78, 0x8a, 0x38, 0xb4, 0x5e, 0xfa, 0x56, 0x69, 0x67, - 0x49, 0x38, 0x16, 0xa0, 0xc5, 0xe3, 0x03, 0x27, 0x4c, 0xbe, 0x25, 0xdd, 0x2c, 0xd3, 0x7f, 0x84, - 0xff, 0x67, 0x1c, 0x5a, 0xe0, 0x52, 0xbb, 0xdc, 0xeb, 0x6f, 0x68, 0x0e, 0x29, 0x38, 0xed, 0xfb, - 0x68, 0x89, 0x2f, 0x1b, 0x55, 0xe9, 0x7d, 0x21, 0xc3, 0x20, 0xe2, 0xca, 0x34, 0x0b, 0xd9, 0x00, - 0xf5, 0xe4, 0x66, 0x43, 0xba, 0x2f, 0xad, 0xbb, 0x13, 0x54, 0xae, 0x69, 0x17, 0x93, 0xe1, 0x4b, - 0xfc, 0xb6, 0x2c, 0xe4, 0xa1, 0xd5, 0x2b, 0x9a, 0x9a, 0x6d, 0x44, 0x38, 0x66, 0x03, 0x0a, 0x16, - 0xe0, 0xdd, 0xff, 0x9e, 0x53, 0xa5, 0xf3, 0x9c, 0x30, 0x6a, 0x73, 0xb1, 0x9d, 0x65, 0x2c, 0x36, - 0x36, 0x35, 0xdf, 0x20, 0x73, 0x51, 0xb4, 0xa2, 0x76, 0x6d, 0xf1, 0x2d, 0xe4, 0x30, 0x46, 0x9d, - 0x30, 0xff, 0xd7, 0x1c, 0x9a, 0x67, 0x45, 0xd1, 0x15, 0x4d, 0xcd, 0xf0, 0xb0, 0x2c, 0xc4, 0x4b, - 0xef, 0xe5, 0x54, 0xe9, 0x10, 0x27, 0xa4, 0x69, 0x24, 0xfe, 0xd9, 0xbd, 0xfc, 0x06, 0x1e, 0x97, - 0xfa, 0xa6, 0xe6, 0x1f, 0xf1, 0xbe, 0xa4, 0x99, 0x97, 0xcb, 0xba, 0x56, 0x29, 0x8d, 0xb0, 0xae, - 0x07, 0x33, 0xac, 0xcb, 0x68, 0x64, 0x5f, 0x97, 0x51, 0x7e, 0x03, 0xeb, 0x6a, 0x54, 0x1a, 0x6f, - 0xdd, 0xba, 0x8c, 0xef, 0x97, 0xe9, 0xcf, 0x22, 0xf2, 0x0a, 0xa3, 0x48, 0x76, 0xc4, 0x87, 0x80, - 0x66, 0x72, 0xd4, 0xbb, 0xc5, 0xcd, 0x73, 0x35, 0x36, 0xf9, 0x7f, 0x39, 0xf4, 0x70, 0xda, 0x6f, - 0x4c, 0x0c, 0xd1, 0xdf, 0x0b, 0x16, 0xd5, 0x45, 0x91, 0xc3, 0xac, 0xcb, 0x41, 0x8c, 0x91, 0xe5, - 0x11, 0x43, 0x85, 0x5f, 0x18, 0xd6, 0xf8, 0xe3, 0x49, 0x7c, 0x76, 0x9a, 0x73, 0xc8, 0xcf, 0x76, - 0x73, 0xb7, 0x51, 0x80, 0x76, 0xbd, 0xbc, 0x24, 0x24, 0xc8, 0x79, 0xd0, 0x5c, 0x9e, 0xc2, 0x34, - 0x97, 0x27, 0xd3, 0xe6, 0x3a, 0x3d, 0xed, 0x90, 0xb7, 0x6d, 0xe7, 0x32, 0x08, 0xdc, 0xea, 0x6e, - 0x9d, 0xc0, 0xed, 0x7a, 0x79, 0x9e, 0x90, 0x53, 0xe0, 0x2b, 0xe2, 0x5c, 0x25, 0x6f, 0x3b, 0xb9, - 0x34, 0xa2, 0xb7, 0xdf, 0xde, 0x06, 0xd1, 0xdb, 0xf5, 0xf2, 0x7c, 0x21, 0xaf, 0x20, 0xfa, 0x79, - 0x6e, 0xd1, 0x0b, 0x0e, 0x29, 0xdc, 0x3f, 0x1f, 0x45, 0x0a, 0x77, 0x70, 0x5c, 0x49, 0xe1, 0xd8, - 0x95, 0xa4, 0x11, 0xc8, 0xfd, 0xdf, 0x63, 0x14, 0xc8, 0x7d, 0x33, 0x71, 0x04, 0x72, 0x00, 0x4a, - 0xb5, 0x45, 0x3f, 0x1b, 0x4d, 0x32, 0xf7, 0xc5, 0xa8, 0x92, 0xb9, 0xcc, 0xa4, 0xef, 0x9d, 0x94, - 0xda, 0xc5, 0x46, 0x91, 0xda, 0x65, 0x9e, 0xe9, 0x5d, 0x96, 0xe8, 0x7d, 0x3a, 0x06, 0x89, 0x5e, - 0xe6, 0x05, 0xbc, 0xa2, 0x4a, 0x2f, 0x66, 0x96, 0xf6, 0x2d, 0xca, 0x2c, 0xed, 0xcb, 0x2c, 0xdf, - 0x6b, 0xcf, 0x28, 0xdf, 0x7b, 0xeb, 0x16, 0xcb, 0xf7, 0xc8, 0xb5, 0xfc, 0x1f, 0x66, 0x17, 0xfd, - 0xcc, 0x5d, 0xd4, 0xf7, 0x6f, 0xc7, 0x20, 0xea, 0xeb, 0x1d, 0x8f, 0xa2, 0x3e, 0x03, 0x8b, 0xff, - 0x2c, 0x93, 0xcc, 0xef, 0xd3, 0xcc, 0x32, 0xbf, 0xf7, 0x6f, 0xaf, 0xcc, 0xef, 0x7a, 0xf9, 0x64, - 0x61, 0x12, 0xc6, 0x89, 0xe7, 0x26, 0xdf, 0xe3, 0xf2, 0xbf, 0xb5, 0xac, 0xa9, 0xc3, 0x74, 0xc3, - 0x29, 0xa8, 0x94, 0x35, 0x75, 0xf0, 0x80, 0x6d, 0x83, 0x4d, 0xf8, 0x97, 0xd9, 0xde, 0x61, 0x0d, - 0x2b, 0x56, 0x9c, 0x61, 0x44, 0x52, 0xb9, 0x41, 0xb1, 0xa2, 0xc3, 0x2e, 0xa3, 0xcc, 0xb4, 0x82, - 0x98, 0xc9, 0x48, 0x0f, 0x0d, 0x2b, 0x88, 0xc9, 0x19, 0x4c, 0xf6, 0x2c, 0xd2, 0xc3, 0x59, 0x37, - 0x2e, 0x3d, 0x1c, 0x13, 0x07, 0xc9, 0xdf, 0xe3, 0x1c, 0xe4, 0xb5, 0x34, 0x72, 0xc9, 0xd9, 0x63, - 0x90, 0x06, 0x7c, 0x3a, 0x3e, 0xa5, 0x96, 0x26, 0x36, 0x72, 0x15, 0x5f, 0xf6, 0x67, 0x14, 0x5f, - 0x82, 0x90, 0xf0, 0xf7, 0x77, 0x46, 0x7c, 0xc9, 0x12, 0x6a, 0x19, 0x24, 0x99, 0x5d, 0x76, 0x49, - 0x26, 0x88, 0x0e, 0x37, 0xdd, 0x6e, 0x49, 0xa6, 0x39, 0xbd, 0x5c, 0x9b, 0x50, 0xf3, 0xcb, 0x74, - 0x42, 0xcd, 0x79, 0x78, 0x66, 0x9b, 0xef, 0x9c, 0x50, 0xd3, 0xc4, 0xeb, 0x3b, 0x26, 0xdd, 0x80, - 0x80, 0x73, 0xfe, 0x38, 0x12, 0x70, 0x7e, 0x91, 0x5e, 0xc0, 0x59, 0x60, 0x40, 0xe3, 0x1d, 0x10, - 0x70, 0x5a, 0x5e, 0xc8, 0x74, 0xc2, 0xce, 0xf3, 0x19, 0x85, 0x9d, 0x0f, 0xe0, 0xe9, 0x86, 0xef, - 0x94, 0xb0, 0xd3, 0x84, 0xcf, 0x9f, 0x65, 0x92, 0x7b, 0xfe, 0xeb, 0xcc, 0x72, 0xcf, 0x05, 0x63, - 0xc0, 0x74, 0x1f, 0xde, 0x51, 0xb9, 0x27, 0x8b, 0x16, 0x32, 0x89, 0x40, 0xff, 0xc3, 0x68, 0xd2, - 0xbf, 0x93, 0xe3, 0x5a, 0xfa, 0x67, 0xe2, 0xe9, 0x74, 0x62, 0xc0, 0xff, 0x30, 0x9a, 0x18, 0xf0, - 0xe4, 0xb8, 0x16, 0x03, 0xa6, 0x5d, 0xa0, 0x31, 0x11, 0xde, 0x8b, 0xf2, 0x1a, 0x83, 0xbe, 0xe6, - 0x06, 0xa5, 0xe0, 0x21, 0x82, 0x90, 0x6c, 0x62, 0xae, 0x55, 0xb8, 0xb6, 0x3a, 0xb0, 0x21, 0x58, - 0x5e, 0xaa, 0x4a, 0x82, 0x40, 0x9a, 0x8b, 0x1e, 0x98, 0x9e, 0x11, 0xdb, 0x2f, 0x35, 0xfc, 0x75, - 0xf2, 0xf4, 0xa0, 0x4e, 0xe1, 0x1c, 0x39, 0x68, 0x64, 0x5e, 0x86, 0x96, 0xfc, 0x46, 0x34, 0xe9, - 0x03, 0x65, 0xfd, 0x7b, 0xc1, 0xe0, 0xa6, 0x82, 0x45, 0xf8, 0x1b, 0x0b, 0x5d, 0xbc, 0x94, 0xf5, - 0xea, 0x55, 0x41, 0x9f, 0x52, 0xbe, 0x54, 0x27, 0x14, 0x8d, 0x0e, 0x62, 0xa1, 0xf1, 0x15, 0x0f, - 0x29, 0x01, 0x1a, 0x6a, 0xa4, 0xa5, 0x23, 0x39, 0x6c, 0xa4, 0x65, 0x36, 0x1a, 0xf3, 0x4d, 0x90, - 0xc0, 0x09, 0xa4, 0x6e, 0x38, 0x81, 0xd3, 0xc3, 0x58, 0x98, 0xf6, 0xaa, 0x2a, 0x55, 0x09, 0xb6, - 0x2a, 0xf1, 0xc9, 0xf8, 0x60, 0x0b, 0x90, 0x76, 0x15, 0x12, 0x28, 0x51, 0x61, 0x50, 0xad, 0x6b, - 0x5b, 0x62, 0xff, 0x39, 0x18, 0xba, 0x24, 0x3e, 0xd0, 0x41, 0xf6, 0x16, 0xe7, 0x5f, 0x92, 0x6d, - 0x83, 0xf0, 0x49, 0x0e, 0x3d, 0xa8, 0x7c, 0xd8, 0xa4, 0x04, 0x7c, 0xde, 0xf5, 0x0d, 0x8a, 0xce, - 0x72, 0xd6, 0x12, 0x49, 0x56, 0x45, 0x73, 0x24, 0xb8, 0x61, 0x43, 0xc1, 0x63, 0x64, 0xc1, 0xf6, - 0xab, 0xcd, 0xdc, 0x6c, 0x48, 0x42, 0x23, 0x64, 0x1c, 0x47, 0xf4, 0xc6, 0x87, 0x0e, 0x69, 0x2d, - 0xad, 0xc9, 0xd8, 0x69, 0xa0, 0xc1, 0x12, 0x7d, 0x27, 0x74, 0x68, 0xe9, 0xd9, 0xe1, 0x69, 0x0a, - 0xfa, 0xae, 0x0d, 0xb5, 0xeb, 0x5d, 0xfd, 0x81, 0x8d, 0x1e, 0x36, 0x85, 0x14, 0x85, 0x07, 0x8a, - 0xc3, 0xe2, 0x43, 0x3d, 0xc9, 0x4f, 0xbe, 0x4b, 0x74, 0x9e, 0xf4, 0x6c, 0xf2, 0x37, 0x34, 0x18, - 0x51, 0xf4, 0xb4, 0xe8, 0x50, 0xe9, 0xb2, 0xa5, 0x72, 0xc6, 0x09, 0xf0, 0xe7, 0x38, 0xc4, 0x07, - 0x94, 0x0f, 0x6a, 0x83, 0xbe, 0x3a, 0x78, 0x3c, 0x40, 0x18, 0xf6, 0xf8, 0x18, 0x50, 0xd7, 0x7a, - 0x55, 0x7a, 0x53, 0x70, 0xe9, 0x2c, 0x96, 0x3b, 0xcb, 0xae, 0x0d, 0xb5, 0x27, 0x0e, 0x9c, 0x6b, - 0x0a, 0xfa, 0xb4, 0xc1, 0x58, 0xf2, 0xab, 0x3d, 0xda, 0x89, 0x9e, 0xf8, 0xa5, 0x96, 0xf8, 0xa5, - 0x3d, 0x5a, 0x77, 0x67, 0xa2, 0x8d, 0x9c, 0x45, 0x85, 0x64, 0xcc, 0xdc, 0xb3, 0xd4, 0x88, 0x3a, - 0xe6, 0x32, 0x3c, 0x15, 0x75, 0x67, 0x96, 0xc2, 0x8a, 0x0f, 0x01, 0x14, 0xdc, 0xb8, 0xa8, 0xdb, - 0x70, 0x94, 0x39, 0x95, 0x8d, 0x1e, 0x4e, 0xfb, 0x8d, 0x89, 0x21, 0xea, 0xf6, 0xdf, 0x9c, 0xa8, - 0x1b, 0x32, 0xb1, 0x83, 0x79, 0xaa, 0x87, 0x7a, 0xd2, 0x38, 0x9a, 0x8d, 0x93, 0x74, 0x4f, 0x85, - 0xff, 0xaa, 0x18, 0x3d, 0x58, 0xb7, 0x25, 0x50, 0x7f, 0x5f, 0x20, 0x7f, 0x33, 0x02, 0xf9, 0xc3, - 0x99, 0x04, 0xf2, 0x7e, 0x9d, 0x13, 0x70, 0x13, 0xc8, 0xaf, 0xb8, 0x61, 0x81, 0xfc, 0xf3, 0x9e, - 0x0a, 0x49, 0xbb, 0x74, 0xc1, 0xe4, 0x4e, 0x71, 0x45, 0x66, 0x31, 0xfd, 0xfe, 0x74, 0x62, 0xfa, - 0x46, 0x55, 0x7a, 0xd7, 0x21, 0xa6, 0x5f, 0xf5, 0xe3, 0xc4, 0xf4, 0xd7, 0x86, 0x3e, 0x49, 0x1c, - 0x3c, 0x96, 0xd8, 0xdf, 0x0a, 0x4f, 0xc5, 0x7d, 0xa9, 0xfd, 0x4f, 0x44, 0x6a, 0xdf, 0x3e, 0x06, - 0x7b, 0x5a, 0x6c, 0x1c, 0x9a, 0x41, 0x32, 0xbf, 0x78, 0xec, 0x92, 0xf9, 0x48, 0xa8, 0x39, 0xa3, - 0x60, 0xfe, 0xc8, 0xa8, 0xe6, 0xb4, 0xf5, 0xaa, 0xf4, 0xbb, 0xf4, 0xc2, 0xf7, 0xaa, 0x1f, 0x2d, - 0x7c, 0xc7, 0x33, 0x4c, 0x2b, 0x7b, 0xdf, 0x3b, 0x26, 0x6b, 0x5a, 0xac, 0xca, 0xc8, 0x28, 0x5f, - 0x2f, 0xcd, 0x2c, 0x5f, 0x67, 0x62, 0x01, 0xe3, 0xf9, 0xdc, 0x17, 0xb7, 0xdf, 0x17, 0xb7, 0x8f, - 0x51, 0xdc, 0x6e, 0x91, 0x27, 0x4f, 0xbb, 0x0d, 0xf2, 0xe4, 0xe9, 0x37, 0x2a, 0x4f, 0x1e, 0x93, - 0x40, 0x78, 0xc6, 0x3d, 0x2e, 0x10, 0xfe, 0x97, 0x69, 0x04, 0xc2, 0x33, 0xf1, 0xba, 0x27, 0xa6, - 0xc8, 0xf7, 0xeb, 0x8c, 0x22, 0x5f, 0x08, 0x4f, 0x1e, 0xd0, 0xd1, 0x75, 0x06, 0x91, 0x6f, 0xc5, - 0xd8, 0x44, 0xbe, 0xb7, 0x45, 0xde, 0xcb, 0x8f, 0x5b, 0x79, 0xef, 0xec, 0x71, 0x28, 0xef, 0x3d, - 0x01, 0xa4, 0xb2, 0x5e, 0x51, 0x17, 0xf1, 0x86, 0x22, 0xcd, 0x4d, 0x78, 0xaa, 0x20, 0xd9, 0x8f, - 0xa8, 0x92, 0x22, 0xb8, 0x54, 0x33, 0x13, 0x0d, 0x43, 0x29, 0x3b, 0x4d, 0xad, 0xeb, 0x50, 0x7c, - 0x20, 0x86, 0x71, 0x17, 0xce, 0xd0, 0x7d, 0xa3, 0x13, 0x75, 0xf9, 0x20, 0xff, 0x8f, 0x39, 0x54, - 0xc0, 0x16, 0x93, 0x10, 0xf6, 0x0a, 0x63, 0x1c, 0xbc, 0x87, 0x53, 0xa5, 0x3f, 0x0a, 0x69, 0x5b, - 0x89, 0xbf, 0xb3, 0xce, 0xb9, 0x34, 0x4c, 0x2a, 0x9d, 0x3b, 0x0c, 0x0b, 0xd0, 0xba, 0xfa, 0x49, - 0xc0, 0xfd, 0x9b, 0x59, 0x44, 0xda, 0x79, 0x8c, 0x7b, 0x13, 0xe2, 0x2f, 0x46, 0x33, 0x21, 0x9e, - 0x30, 0x12, 0xf6, 0x82, 0x89, 0x28, 0x61, 0x7f, 0xe0, 0x5e, 0x94, 0xb0, 0x2f, 0xb8, 0xd7, 0x25, - 0xec, 0x0b, 0xef, 0x09, 0x09, 0x3b, 0x23, 0xfe, 0x7e, 0xf0, 0xb6, 0x8a, 0xbf, 0x47, 0x15, 0x46, - 0x3f, 0x74, 0x8f, 0x0b, 0xa3, 0x17, 0x8d, 0x63, 0x61, 0xf4, 0x9b, 0xaa, 0xb4, 0x16, 0xd5, 0x09, - 0x19, 0xe5, 0x8f, 0xe2, 0x43, 0x5a, 0x77, 0x7b, 0xa2, 0xef, 0xa4, 0xa3, 0x1e, 0x04, 0x4d, 0x56, - 0x51, 0x34, 0x15, 0x3f, 0x9f, 0xc8, 0x46, 0x0f, 0xa5, 0x19, 0xf5, 0xa7, 0x23, 0x7c, 0x86, 0x8d, - 0x4b, 0xf6, 0xec, 0x18, 0xb7, 0xc2, 0xe7, 0x2f, 0xb3, 0xd1, 0x22, 0x78, 0xac, 0xd2, 0x8a, 0x9f, - 0x7f, 0xed, 0x0c, 0x43, 0xf3, 0xbc, 0x2a, 0x15, 0xb0, 0xfc, 0xe8, 0x14, 0x4b, 0x8c, 0x99, 0xb1, - 0xbb, 0x48, 0xfe, 0x47, 0xce, 0x1e, 0x6e, 0xea, 0x2f, 0x39, 0x55, 0xfa, 0x07, 0x9c, 0x19, 0x70, - 0xea, 0x7b, 0x8e, 0x8d, 0x38, 0x95, 0x66, 0x1b, 0x6f, 0x2e, 0xfc, 0x94, 0xd6, 0x7f, 0x29, 0x1e, - 0xeb, 0xd4, 0x89, 0x27, 0x9c, 0xec, 0xcc, 0x69, 0x9b, 0xa6, 0x9d, 0x6d, 0x4b, 0x7d, 0xde, 0x92, - 0xec, 0xd9, 0x41, 0x43, 0xa7, 0xe8, 0x57, 0xef, 0x50, 0xbf, 0x25, 0x27, 0xeb, 0xc5, 0x6f, 0xc0, - 0x0b, 0x32, 0xd9, 0xb3, 0xa3, 0x42, 0x02, 0x45, 0xa3, 0x25, 0xb4, 0xd5, 0x6b, 0xaa, 0xb4, 0x02, - 0x55, 0x09, 0xa3, 0x6c, 0xb2, 0x38, 0x3f, 0xcd, 0x02, 0xd9, 0xdb, 0x55, 0xf8, 0x45, 0x36, 0x7a, - 0x38, 0xed, 0x38, 0x13, 0xe3, 0x56, 0x35, 0xdc, 0xe4, 0xad, 0xc2, 0x70, 0xfe, 0xff, 0xb3, 0xf7, - 0xae, 0xe1, 0x51, 0x1c, 0x59, 0x82, 0xe8, 0x64, 0x21, 0x81, 0x08, 0x84, 0xc1, 0x61, 0x03, 0x72, - 0x61, 0x70, 0xb9, 0x8c, 0x0d, 0x94, 0x05, 0x82, 0x34, 0xc6, 0xb6, 0xdc, 0x7e, 0xa4, 0x24, 0xa0, - 0x65, 0x1e, 0x96, 0x0b, 0x4c, 0x3f, 0xdc, 0x3d, 0x74, 0xa9, 0x2a, 0x2d, 0xaa, 0x91, 0xaa, 0xaa, - 0xab, 0x4a, 0xb2, 0xb1, 0xc7, 0x7b, 0x65, 0x23, 0x01, 0x32, 0xc2, 0x48, 0x69, 0x1e, 0x46, 0x96, - 0x79, 0xb4, 0x79, 0xd9, 0x6d, 0x24, 0x30, 0x6e, 0x10, 0x7a, 0x34, 0x33, 0xdf, 0xee, 0xfe, 0x98, - 0xd9, 0x9e, 0x97, 0x67, 0x77, 0x66, 0xee, 0xee, 0xb7, 0x77, 0x76, 0x6f, 0x57, 0x56, 0x49, 0xbb, - 0xdf, 0x2c, 0x77, 0xee, 0xde, 0x7b, 0xbf, 0xfd, 0xfa, 0xee, 0xcc, 0xbd, 0x5f, 0xc6, 0x89, 0x88, - 0x8c, 0xac, 0xcc, 0x2c, 0x95, 0x6c, 0x77, 0x63, 0x3c, 0xfd, 0x07, 0x54, 0x11, 0x27, 0x22, 0xe3, - 0x9c, 0x38, 0x8f, 0x78, 0x9c, 0x38, 0x07, 0xa4, 0xea, 0x01, 0x31, 0x2c, 0xd6, 0xd7, 0x56, 0xb0, - 0xae, 0x7b, 0xd0, 0xc2, 0x0d, 0x6a, 0xfa, 0x56, 0x48, 0x55, 0x9b, 0xe0, 0xfe, 0xe7, 0x31, 0x63, - 0x10, 0x99, 0xee, 0x7f, 0x1b, 0x6b, 0x15, 0xc0, 0x20, 0x33, 0xdc, 0xcb, 0x0a, 0x49, 0x7e, 0xbc, - 0xcc, 0xc8, 0x59, 0x96, 0x8e, 0x0d, 0xfe, 0xcf, 0x1e, 0xbb, 0x5a, 0xe9, 0xd3, 0xcf, 0x1c, 0xcc, - 0x1d, 0xbe, 0xc0, 0x6e, 0x27, 0xf2, 0xda, 0x99, 0x7e, 0x83, 0xd5, 0x1b, 0x34, 0xa5, 0x0e, 0xd5, - 0x04, 0x0a, 0xa1, 0x2d, 0x3f, 0x00, 0x31, 0x5e, 0x5c, 0xa6, 0x8d, 0x06, 0x14, 0xfb, 0x1f, 0xd3, - 0xd0, 0xbd, 0xce, 0x9d, 0xfc, 0xf3, 0x31, 0x1d, 0x3c, 0xe2, 0xd8, 0xd7, 0x95, 0xc3, 0x59, 0x7c, - 0xff, 0x82, 0x33, 0x25, 0x2f, 0x72, 0x99, 0x6f, 0xb7, 0xf0, 0x3e, 0x17, 0x4a, 0xd0, 0xbd, 0x9b, - 0xa2, 0x29, 0x77, 0xb9, 0x89, 0xd9, 0xe5, 0xa6, 0x41, 0x53, 0xd6, 0x8b, 0x72, 0xf3, 0x84, 0xad, - 0xf1, 0x97, 0x88, 0x8f, 0xf6, 0x92, 0x3d, 0x3e, 0xda, 0x53, 0x9a, 0xf2, 0x88, 0xe8, 0x34, 0xfc, - 0x90, 0xfb, 0xf7, 0x26, 0x71, 0x1d, 0xae, 0xcf, 0x0f, 0x95, 0x56, 0xa5, 0x29, 0x0f, 0x9a, 0x21, - 0x02, 0xbc, 0xf6, 0x25, 0x97, 0x6b, 0xd4, 0xb4, 0xfa, 0xfc, 0xa8, 0x69, 0xd0, 0x15, 0x3b, 0xdf, - 0xb5, 0x77, 0xe5, 0x1a, 0x40, 0xad, 0xfa, 0x8c, 0xa4, 0x29, 0xa7, 0x24, 0xf4, 0x81, 0x14, 0x28, - 0x38, 0x15, 0xf2, 0x1b, 0x2e, 0x73, 0xfb, 0x5b, 0x8a, 0xdb, 0xf5, 0x0f, 0x1e, 0xb4, 0xc8, 0x65, - 0x7c, 0xb7, 0x87, 0x9a, 0x78, 0xc9, 0x12, 0xc4, 0xab, 0x78, 0x35, 0xb1, 0x48, 0x53, 0xbc, 0x54, - 0x4d, 0x60, 0x4b, 0x60, 0x2f, 0x31, 0x2e, 0x21, 0xcd, 0x88, 0x50, 0x98, 0x42, 0x53, 0x16, 0xcf, - 0x4f, 0x3d, 0x0e, 0xcf, 0x07, 0xb7, 0x92, 0x20, 0x74, 0x4c, 0x40, 0x9f, 0x45, 0xd3, 0x55, 0xd1, - 0x45, 0x81, 0xa4, 0x4a, 0xa5, 0x45, 0xf2, 0x42, 0x31, 0xd0, 0x04, 0xbf, 0xef, 0x86, 0xcd, 0x57, - 0x90, 0x02, 0x59, 0x2f, 0x40, 0x3c, 0xbf, 0x81, 0x0b, 0x90, 0x69, 0x53, 0xbd, 0x00, 0xf9, 0x96, - 0x60, 0x51, 0x4b, 0x4c, 0xce, 0x30, 0x2d, 0xea, 0x9d, 0x05, 0xec, 0xa2, 0xb3, 0x27, 0x0e, 0x23, - 0xda, 0xef, 0x2c, 0xda, 0xd7, 0x67, 0xcd, 0x96, 0x93, 0x10, 0x0a, 0x92, 0xdc, 0xb8, 0xc4, 0x8d, - 0x6e, 0x35, 0x4f, 0xbe, 0x0b, 0x76, 0x86, 0xd1, 0x89, 0x24, 0xdf, 0x2d, 0xd7, 0xfb, 0x2f, 0xe9, - 0x27, 0x4f, 0x32, 0xa7, 0x42, 0x9a, 0x52, 0xb7, 0x16, 0x21, 0xf8, 0x6b, 0x4b, 0xa8, 0x85, 0xcd, - 0xcc, 0x03, 0x9a, 0xe2, 0x0b, 0x08, 0xc5, 0x32, 0x16, 0x9b, 0xd2, 0x80, 0xd2, 0x42, 0x3d, 0x7e, - 0x16, 0xcd, 0x82, 0x5f, 0x06, 0x8f, 0xb0, 0x40, 0xdc, 0x24, 0x1a, 0xa9, 0x58, 0xce, 0x46, 0x00, - 0xb1, 0x24, 0x83, 0x62, 0x55, 0xf5, 0x7d, 0x9a, 0x72, 0x2f, 0xf2, 0x06, 0x04, 0x64, 0xac, 0xe3, - 0xf5, 0xff, 0x95, 0x84, 0xe6, 0x6f, 0x50, 0xd3, 0xb5, 0xcd, 0xf1, 0xd6, 0x08, 0x00, 0x71, 0xf9, - 0x7d, 0x1c, 0xcd, 0x08, 0x1b, 0xc5, 0xdc, 0xbc, 0x2e, 0x86, 0xb0, 0x35, 0x50, 0x26, 0xcf, 0xcc, - 0x0c, 0xf7, 0x0a, 0xf6, 0x6c, 0xae, 0x27, 0xc8, 0xaa, 0xf0, 0xb3, 0x68, 0x66, 0x28, 0x4c, 0x6e, - 0xa0, 0xb9, 0xdc, 0x92, 0xdc, 0x82, 0x66, 0xa9, 0x3c, 0x2b, 0x33, 0xdc, 0xab, 0xef, 0xbb, 0x38, - 0x3e, 0xf8, 0x26, 0x95, 0xd1, 0xb9, 0x9e, 0xa0, 0x59, 0xcd, 0x62, 0x43, 0xbb, 0x0c, 0x8d, 0x85, - 0x31, 0x24, 0xdf, 0xf3, 0x01, 0x3e, 0x10, 0xc6, 0xd0, 0x0c, 0x44, 0xbb, 0xc0, 0xd6, 0xf4, 0xf6, - 0x10, 0xb0, 0xcd, 0x16, 0x5b, 0x60, 0x73, 0x77, 0x35, 0x27, 0xb2, 0x38, 0xed, 0xff, 0xb8, 0xa6, - 0x3c, 0x8a, 0x1e, 0x09, 0xb8, 0x51, 0x43, 0xae, 0x70, 0xa3, 0xa4, 0xff, 0x1d, 0x0f, 0x2a, 0xfb, - 0x7e, 0x3c, 0x06, 0x8e, 0xa4, 0xab, 0x78, 0xea, 0x6e, 0x60, 0x85, 0x0a, 0x4d, 0x99, 0xc7, 0x73, - 0x3a, 0xcf, 0x12, 0xb2, 0x39, 0xf3, 0x4c, 0xdd, 0x6b, 0x68, 0x0e, 0x68, 0x81, 0x66, 0x22, 0xeb, - 0xcf, 0xe1, 0x6d, 0x28, 0xdf, 0x43, 0x6a, 0xe7, 0x6a, 0x54, 0x66, 0xfc, 0x4f, 0x84, 0xa6, 0x38, - 0x76, 0xe7, 0xf0, 0xf8, 0x5b, 0x68, 0xa6, 0xf1, 0x37, 0xc8, 0x4a, 0x49, 0x51, 0x8d, 0xcd, 0x06, - 0xd5, 0xc6, 0x08, 0xd1, 0xc2, 0x00, 0x47, 0x59, 0x18, 0x21, 0x15, 0x95, 0xe1, 0xe9, 0x68, 0x2e, - 0xa1, 0x21, 0xcb, 0xe9, 0x6d, 0x10, 0xe6, 0x09, 0xfb, 0x2a, 0x74, 0x61, 0xfe, 0xee, 0x2d, 0x33, - 0xdc, 0xcb, 0xcc, 0x91, 0x68, 0x87, 0x9e, 0x45, 0xb3, 0xe8, 0x0f, 0x41, 0x47, 0xc0, 0x88, 0x85, - 0x72, 0xb9, 0x1c, 0xda, 0xf2, 0x78, 0xf3, 0x66, 0x15, 0x7e, 0x09, 0x61, 0xfa, 0xb3, 0x4e, 0x4d, - 0x85, 0x93, 0x51, 0xa2, 0x43, 0x29, 0xdd, 0x88, 0xc2, 0x75, 0xa8, 0x96, 0x31, 0xd5, 0x7c, 0x87, - 0x0e, 0x8d, 0xdf, 0xa0, 0x7e, 0xc4, 0x41, 0x07, 0x38, 0x5c, 0x8f, 0xee, 0xa0, 0xa5, 0xdb, 0xd5, - 0x64, 0xca, 0xe8, 0xb8, 0xc4, 0x7c, 0x41, 0x96, 0x57, 0xc5, 0x06, 0x99, 0xeb, 0xda, 0x9f, 0xed, - 0xff, 0x24, 0x98, 0x57, 0x6b, 0xe8, 0x03, 0x5a, 0xf2, 0xfc, 0x56, 0x1a, 0x89, 0xd7, 0x2f, 0xa6, - 0x79, 0x79, 0x7e, 0x2b, 0x1f, 0x15, 0xc9, 0x73, 0x98, 0xbb, 0x32, 0x92, 0x1b, 0x39, 0x19, 0x34, - 0xab, 0x05, 0x5a, 0x91, 0x68, 0xbe, 0xd3, 0xed, 0xb4, 0x22, 0x01, 0x7d, 0xd9, 0x30, 0x48, 0x40, - 0xdf, 0xa0, 0x58, 0x85, 0x0f, 0x4a, 0x68, 0x36, 0xfd, 0xbd, 0x55, 0xcc, 0x8a, 0xdf, 0xa4, 0x29, - 0x91, 0x80, 0xb5, 0x46, 0xa6, 0x2b, 0x0a, 0x1a, 0x9c, 0x37, 0xd8, 0x1a, 0x8b, 0x45, 0x63, 0x4d, - 0xbe, 0xf1, 0x1b, 0x3d, 0xe3, 0xa7, 0xbb, 0x33, 0x43, 0x17, 0x7d, 0x24, 0x70, 0x84, 0x51, 0x44, - 0x33, 0xa1, 0x0c, 0x5d, 0xf4, 0xd5, 0x47, 0x48, 0xb8, 0xab, 0x89, 0x63, 0x9f, 0xe6, 0xc6, 0x06, - 0x8c, 0x02, 0xa5, 0x31, 0x16, 0x4f, 0xb6, 0x84, 0x9a, 0x7d, 0x10, 0x93, 0x7f, 0x79, 0xd0, 0xfa, - 0x0d, 0x1c, 0x45, 0x65, 0xcd, 0xf1, 0x30, 0xb8, 0x1a, 0x41, 0x3c, 0xdd, 0xcd, 0x9a, 0xf2, 0x5c, - 0x80, 0x17, 0xca, 0x4f, 0x1b, 0x1a, 0x52, 0x50, 0xd5, 0xcb, 0x9a, 0x76, 0xa9, 0x90, 0xcd, 0x11, - 0x32, 0xbc, 0xe7, 0x86, 0xcf, 0xeb, 0xfb, 0x7f, 0xa6, 0x6b, 0xdd, 0x9c, 0x4f, 0xa1, 0x04, 0xc6, - 0xbe, 0x3c, 0xc8, 0x7b, 0xc2, 0xdf, 0x45, 0xe5, 0xf4, 0xdb, 0x9b, 0xd4, 0x36, 0xb5, 0x99, 0x66, - 0xcd, 0x5f, 0xa3, 0x29, 0xab, 0x03, 0x96, 0x0a, 0xf9, 0x7e, 0x8a, 0x37, 0xe9, 0x67, 0x19, 0x88, - 0xcd, 0xaf, 0xda, 0xdf, 0x34, 0x84, 0x04, 0xca, 0x96, 0x07, 0x2d, 0x0d, 0xaa, 0x8d, 0x25, 0x1d, - 0x7a, 0x20, 0x60, 0x13, 0x0b, 0x79, 0x0e, 0xe7, 0x79, 0x2a, 0x3c, 0xa7, 0xe8, 0x1a, 0x5d, 0x50, - 0x42, 0x14, 0xfe, 0xcb, 0x9b, 0x9b, 0xc7, 0xb9, 0x79, 0xe6, 0xca, 0xc6, 0xc5, 0x3c, 0xb3, 0xa6, - 0xcc, 0x4a, 0x5b, 0x0c, 0xd5, 0xb4, 0x2f, 0x62, 0xa8, 0xea, 0x35, 0x65, 0x3d, 0xaa, 0x0b, 0x14, - 0xc6, 0x4d, 0x7e, 0x40, 0xd0, 0xb2, 0x30, 0x1e, 0x2a, 0xd4, 0xa2, 0xd1, 0xca, 0x7a, 0xd0, 0x62, - 0xb7, 0x6e, 0x6e, 0x0f, 0xdb, 0xb5, 0xc3, 0x62, 0xbb, 0x7c, 0xf6, 0xc5, 0xa1, 0x95, 0x4b, 0x5c, - 0x03, 0x13, 0x8b, 0xc4, 0xb1, 0x58, 0xb3, 0x3a, 0x4d, 0x51, 0xd0, 0x33, 0x81, 0x49, 0xc8, 0x24, - 0x2f, 0x2a, 0x48, 0x6e, 0x7f, 0x8f, 0x07, 0x79, 0xad, 0xf6, 0xd0, 0x50, 0xfa, 0x5f, 0xc1, 0xba, - 0x67, 0x75, 0x1e, 0x23, 0x16, 0xb1, 0x4e, 0x7c, 0xc2, 0xce, 0x81, 0x0b, 0x0b, 0x70, 0xa0, 0xc8, - 0x7a, 0xf4, 0x40, 0xb9, 0x00, 0x2a, 0xf2, 0x52, 0x07, 0xeb, 0xce, 0xed, 0xae, 0xc8, 0x7b, 0x7f, - 0x01, 0x87, 0x94, 0xf6, 0x7e, 0x6e, 0xb7, 0x7c, 0x0a, 0x06, 0xe3, 0x55, 0xe4, 0x33, 0x1e, 0xb3, - 0xe9, 0xc5, 0x2d, 0x99, 0x68, 0x20, 0xff, 0x42, 0xf4, 0x90, 0xef, 0x9f, 0x94, 0xb0, 0xfe, 0xb3, - 0x25, 0xa8, 0xfc, 0x79, 0x92, 0xfb, 0x36, 0x1a, 0x8f, 0x6d, 0x8a, 0x37, 0xe1, 0x5a, 0x54, 0xce, - 0x1c, 0xbf, 0x84, 0x94, 0x81, 0xc6, 0x0a, 0x3d, 0x60, 0xa9, 0x90, 0xcb, 0xe1, 0xba, 0x97, 0x5a, - 0x31, 0x4b, 0x1d, 0x7e, 0xc2, 0xd8, 0x57, 0xc0, 0x6f, 0xbe, 0xb6, 0x26, 0x04, 0x12, 0x8a, 0xe5, - 0x32, 0xe8, 0xa0, 0xbe, 0x2e, 0x28, 0x94, 0xe2, 0x47, 0x78, 0x52, 0x08, 0x81, 0xcf, 0x58, 0x52, - 0x88, 0x3b, 0x58, 0x6a, 0x90, 0xf1, 0x81, 0x4b, 0xfa, 0xd8, 0x11, 0x9e, 0x06, 0x44, 0x98, 0xc8, - 0x12, 0xa7, 0x89, 0xd4, 0x07, 0x4e, 0x8f, 0x0f, 0x9c, 0xce, 0x1e, 0x3b, 0xab, 0xdf, 0x38, 0x96, - 0x3f, 0x91, 0x2b, 0xd1, 0xf4, 0x78, 0xe2, 0xc5, 0x94, 0x9a, 0xa4, 0x36, 0x7f, 0xbe, 0xa6, 0xdc, - 0x15, 0xa0, 0x45, 0xf2, 0x4c, 0x9e, 0x34, 0x39, 0x48, 0x8b, 0xf0, 0x53, 0x08, 0x85, 0x21, 0xff, - 0x17, 0x4b, 0xcf, 0x37, 0x13, 0x66, 0x4c, 0x28, 0x96, 0xcb, 0xc1, 0xe6, 0xb2, 0x0c, 0x68, 0x66, - 0x0d, 0x5e, 0x27, 0x2e, 0xc5, 0xc0, 0xb8, 0x2f, 0xd5, 0x94, 0x25, 0xe2, 0x52, 0x6c, 0x01, 0x7c, - 0xd4, 0x76, 0x4a, 0x20, 0x2e, 0xcb, 0xd6, 0x89, 0xe7, 0x7c, 0x65, 0x42, 0x37, 0xe6, 0x39, 0x9f, - 0xad, 0x1b, 0x1a, 0x2b, 0x40, 0x38, 0xd1, 0xab, 0x36, 0xda, 0x20, 0x7f, 0xc0, 0xc2, 0x02, 0x32, - 0x86, 0x86, 0x40, 0x2e, 0x20, 0x9d, 0xff, 0x92, 0x07, 0xcd, 0xdd, 0x16, 0x4a, 0xed, 0xb2, 0xf0, - 0x8a, 0xdf, 0x89, 0x57, 0xf2, 0x58, 0x61, 0xb1, 0x9d, 0x15, 0x2c, 0xf3, 0x3d, 0xdf, 0x3a, 0xdf, - 0x7c, 0x4a, 0x2b, 0xf2, 0xa6, 0xd4, 0x9c, 0xb0, 0xf9, 0xd6, 0x09, 0xe3, 0x13, 0xb3, 0xd8, 0x3e, - 0x31, 0x16, 0xca, 0xdf, 0x6b, 0xa3, 0xbc, 0x48, 0xd0, 0x7b, 0x6d, 0x04, 0x15, 0x4f, 0x3e, 0xe7, - 0xf3, 0x2c, 0x09, 0x33, 0xe1, 0x9b, 0x34, 0x93, 0x81, 0x57, 0x48, 0xde, 0x40, 0x32, 0x03, 0x9a, - 0x99, 0x15, 0xfc, 0x7f, 0x35, 0x03, 0xce, 0x86, 0x89, 0x78, 0xd6, 0xc7, 0x52, 0xe9, 0x50, 0x0c, - 0x68, 0xf2, 0xe5, 0x55, 0xf8, 0x9a, 0x3c, 0x15, 0x4e, 0x52, 0x53, 0x31, 0x15, 0x3e, 0x27, 0x6f, - 0x49, 0xf6, 0x15, 0x68, 0x71, 0xdc, 0x40, 0xf7, 0x49, 0x25, 0x2c, 0x37, 0xa1, 0x1c, 0x20, 0x05, - 0x72, 0x80, 0x2b, 0x14, 0x38, 0x0a, 0xf5, 0x85, 0x12, 0x2b, 0x9a, 0x5a, 0x43, 0xb1, 0xa6, 0xd7, - 0x76, 0xc6, 0x5b, 0x57, 0xac, 0xae, 0xf4, 0xb5, 0xa6, 0x56, 0xbc, 0xa2, 0xa6, 0xd2, 0xab, 0x57, - 0x84, 0xd8, 0x81, 0x32, 0xec, 0xa1, 0xea, 0x10, 0x8a, 0xc5, 0x23, 0xea, 0xfa, 0x50, 0x4b, 0xb4, - 0x79, 0x37, 0x15, 0x3d, 0x92, 0x39, 0x43, 0x28, 0x96, 0xcb, 0xb3, 0xfd, 0xc3, 0xfa, 0x89, 0x03, - 0xb9, 0x2b, 0x23, 0xfa, 0xfe, 0x63, 0xac, 0xbd, 0x00, 0x80, 0x1f, 0x42, 0xd3, 0xc2, 0x89, 0x56, - 0xfa, 0x5c, 0xe2, 0x6e, 0x4d, 0xb9, 0x33, 0x60, 0xfc, 0x96, 0x51, 0x6d, 0xc3, 0x8b, 0xbe, 0xec, - 0xa9, 0xa1, 0xec, 0x91, 0x4b, 0x41, 0xa3, 0x00, 0x3f, 0x85, 0xa6, 0xb7, 0xa8, 0x2d, 0xf1, 0xe4, - 0x6e, 0x32, 0xf1, 0xb3, 0x6b, 0x1e, 0xd4, 0x14, 0x7f, 0x80, 0x16, 0xc9, 0x15, 0xfa, 0xde, 0x4e, - 0xfd, 0xe2, 0x7b, 0xfa, 0x99, 0xf3, 0xfa, 0xa5, 0x43, 0xdc, 0xbd, 0xc8, 0xb7, 0xa1, 0x26, 0x48, - 0x21, 0xf0, 0x76, 0xbb, 0xb4, 0x19, 0x5b, 0x56, 0x51, 0xda, 0x96, 0x31, 0xf1, 0xaa, 0xf4, 0x41, - 0xea, 0xab, 0xec, 0x7b, 0x83, 0xa0, 0x7e, 0xc7, 0xf7, 0x7d, 0xac, 0x8f, 0x0c, 0x83, 0xb2, 0xcb, - 0x5e, 0x3e, 0x25, 0xb2, 0xd5, 0x76, 0x54, 0xda, 0x18, 0x7d, 0x8d, 0x67, 0x95, 0x24, 0x61, 0x72, - 0xa0, 0x44, 0x5e, 0x93, 0x19, 0xea, 0x23, 0xaa, 0xce, 0xd6, 0x1f, 0x54, 0xe4, 0xce, 0xbf, 0x99, - 0xed, 0xef, 0xca, 0xef, 0x1b, 0x1a, 0xe3, 0x28, 0x9a, 0xd1, 0x46, 0xb7, 0x43, 0xb3, 0x58, 0xe0, - 0xe0, 0x4d, 0x01, 0x56, 0x26, 0x2b, 0xf4, 0x0f, 0xd8, 0x08, 0x65, 0x4f, 0xed, 0x1b, 0x1f, 0xdc, - 0xab, 0xef, 0xed, 0x9c, 0xd8, 0x73, 0x81, 0x3a, 0xef, 0xf4, 0x75, 0x64, 0xdf, 0x39, 0xab, 0x1f, - 0xfa, 0x10, 0x00, 0x2a, 0x73, 0x17, 0xae, 0xe8, 0x03, 0x7d, 0x7a, 0xcf, 0x3b, 0xfa, 0xa1, 0x41, - 0x7d, 0xf8, 0xa4, 0x3e, 0xba, 0x27, 0xc8, 0xfa, 0xc2, 0x2f, 0x08, 0x67, 0x8d, 0xe5, 0x66, 0xc6, - 0x0d, 0xf3, 0xac, 0xf1, 0x21, 0xf6, 0x17, 0x1f, 0x25, 0x75, 0x13, 0x3d, 0x7a, 0x7d, 0xd9, 0xee, - 0xd6, 0x58, 0x3a, 0x5a, 0x95, 0x52, 0x9b, 0x5f, 0x5e, 0x2e, 0x5c, 0xcc, 0xf5, 0x49, 0x9a, 0x72, - 0x54, 0x42, 0xef, 0x4a, 0x81, 0x05, 0x86, 0xfc, 0x38, 0x88, 0x8e, 0xfc, 0x2a, 0x1c, 0x04, 0x03, - 0x7b, 0x80, 0x29, 0xfb, 0x2d, 0x1d, 0xe3, 0xff, 0x8d, 0xb8, 0x45, 0xb0, 0x0e, 0xed, 0xf6, 0x58, - 0x85, 0x3c, 0x6f, 0x59, 0x85, 0xdc, 0x9b, 0xbf, 0x0a, 0x11, 0x51, 0x2a, 0x6e, 0x25, 0xb2, 0x5e, - 0x53, 0x6a, 0x91, 0x12, 0xb8, 0xdb, 0xa0, 0xca, 0x96, 0x78, 0xc4, 0x42, 0x0c, 0xb9, 0xc2, 0x3e, - 0x51, 0x6e, 0x87, 0xf5, 0xff, 0x54, 0x86, 0xca, 0xc5, 0xaf, 0xe3, 0xc7, 0x50, 0x59, 0x8c, 0xf6, - 0x27, 0x1e, 0x5a, 0xf0, 0x42, 0x50, 0x0f, 0xc7, 0x2f, 0xd0, 0x25, 0x08, 0x2f, 0x37, 0x1a, 0xa6, - 0x77, 0x27, 0x54, 0xe1, 0xc0, 0x02, 0x1a, 0xb2, 0x42, 0xa6, 0x57, 0xe8, 0x69, 0x05, 0x2f, 0x37, - 0x6c, 0xbb, 0xa0, 0x94, 0xa6, 0x09, 0xb6, 0xdd, 0x4d, 0x29, 0x59, 0xb4, 0xd1, 0x83, 0xa0, 0x8d, - 0xe0, 0xd1, 0xdc, 0x5d, 0x9a, 0x32, 0x17, 0xb4, 0xd1, 0xcc, 0x70, 0xa2, 0xd5, 0x59, 0x19, 0x95, - 0xba, 0x2b, 0xa3, 0x81, 0xeb, 0x13, 0xfb, 0x9c, 0x95, 0xd1, 0x83, 0x68, 0x5a, 0x13, 0xd7, 0x79, - 0xf0, 0x95, 0x26, 0xe3, 0x2b, 0x4d, 0xe6, 0x57, 0x9a, 0x12, 0xad, 0x38, 0xc5, 0x4d, 0xd6, 0x0c, - 0x33, 0xc3, 0x07, 0x4b, 0xec, 0xb3, 0x85, 0xe2, 0x40, 0xce, 0x0e, 0x6e, 0x8e, 0x76, 0x6f, 0x5d, - 0xb7, 0x69, 0xd3, 0xcd, 0xd1, 0xbe, 0xf1, 0xd3, 0x17, 0x72, 0x67, 0x86, 0xf5, 0x81, 0x13, 0x99, - 0x5f, 0x1c, 0xd0, 0x0f, 0x0d, 0x8e, 0x7f, 0x76, 0x31, 0x73, 0xfd, 0x92, 0x51, 0xfd, 0xfc, 0xa6, - 0xba, 0x1d, 0xcf, 0xbf, 0xb8, 0x2d, 0x1f, 0xe4, 0xda, 0xa7, 0xfa, 0xe1, 0x81, 0xdc, 0x58, 0x07, - 0xb7, 0x87, 0xf5, 0x68, 0x66, 0x6b, 0x2c, 0x9a, 0x6e, 0x48, 0x46, 0x49, 0x5a, 0x60, 0x69, 0x99, - 0x07, 0x8e, 0x78, 0xcc, 0x52, 0x79, 0x21, 0xb4, 0xcd, 0x8c, 0x5c, 0xcb, 0x9e, 0x1a, 0xe5, 0x08, - 0xde, 0x1c, 0xed, 0xd3, 0x3b, 0xf7, 0x04, 0x4d, 0x38, 0xbc, 0x06, 0x95, 0x1a, 0x86, 0x02, 0x12, - 0x02, 0xb3, 0x7c, 0xcb, 0xa4, 0x44, 0xc6, 0x70, 0xc2, 0x90, 0xeb, 0xeb, 0xe0, 0xd6, 0x27, 0x08, - 0x55, 0xf8, 0x27, 0x82, 0x3a, 0x02, 0xa5, 0xfa, 0xa2, 0xa6, 0x04, 0x05, 0x75, 0xb4, 0x5e, 0x1f, - 0xbc, 0x9e, 0x7d, 0xe7, 0xac, 0xa9, 0x8c, 0xfa, 0x0f, 0x1a, 0xda, 0xb4, 0xaf, 0xc3, 0xf4, 0x2c, - 0xc8, 0xd3, 0xb7, 0xa0, 0xae, 0xf8, 0xc7, 0xa0, 0xa5, 0x10, 0x7f, 0xa8, 0x09, 0xdd, 0xc1, 0xd6, - 0x33, 0x0d, 0xf1, 0x78, 0x33, 0xcf, 0xe0, 0xfb, 0x8c, 0xa6, 0x7c, 0x2b, 0x90, 0x57, 0x25, 0x07, - 0x40, 0x63, 0xeb, 0xda, 0x05, 0x43, 0x2a, 0x2e, 0x9f, 0xaa, 0xaf, 0xab, 0x14, 0x33, 0x25, 0xea, - 0xdd, 0xd7, 0x27, 0x3a, 0x0f, 0xd2, 0x4f, 0xe4, 0xb5, 0xc5, 0x27, 0x25, 0x84, 0xe0, 0x8d, 0x59, - 0x5d, 0x34, 0xb5, 0x8b, 0x68, 0x5b, 0x87, 0x6d, 0x44, 0x5d, 0x28, 0x1d, 0x32, 0xea, 0x21, 0x9e, - 0xb2, 0xd0, 0x40, 0xde, 0xc6, 0x19, 0x37, 0x37, 0x72, 0x32, 0xf7, 0xfe, 0x7b, 0x0c, 0x53, 0xf8, - 0x74, 0x9e, 0x29, 0x59, 0xe9, 0xcb, 0x8c, 0x74, 0x66, 0x46, 0x3a, 0x19, 0x9a, 0x99, 0xa1, 0x61, - 0x43, 0x4f, 0x13, 0x0f, 0x0b, 0xf0, 0x28, 0xd2, 0x3b, 0xaf, 0x64, 0xaf, 0x5c, 0x08, 0x0a, 0x5f, - 0xc0, 0xfd, 0x12, 0x9a, 0x19, 0xa1, 0xdf, 0x4f, 0x55, 0xcc, 0x76, 0xde, 0xe7, 0xf0, 0x01, 0x92, - 0xb0, 0x76, 0x26, 0x3c, 0x1b, 0x5f, 0xf6, 0xc8, 0xa5, 0xec, 0xc1, 0x81, 0xaf, 0x6c, 0x7c, 0xe6, - 0x07, 0xaa, 0x0d, 0x51, 0x46, 0x15, 0x81, 0xb2, 0x2d, 0x8e, 0x0a, 0xc4, 0xbf, 0x7f, 0x1a, 0xba, - 0xc7, 0xa6, 0xda, 0x53, 0xb7, 0x6a, 0xb5, 0xb6, 0xc3, 0xbe, 0x5a, 0x53, 0x34, 0xe5, 0x69, 0x71, - 0xb5, 0xb6, 0x5a, 0x58, 0xad, 0x55, 0xfa, 0x20, 0xad, 0x55, 0xb6, 0x7b, 0x9f, 0x3e, 0xd0, 0x67, - 0xe8, 0xe8, 0xe1, 0xde, 0xf1, 0xcf, 0xce, 0xe9, 0x87, 0xae, 0x51, 0x5f, 0x15, 0xc2, 0xcb, 0xe2, - 0x9a, 0xee, 0x25, 0x34, 0x3d, 0x9a, 0x30, 0xf0, 0xa5, 0xab, 0xba, 0x5a, 0x4d, 0x79, 0x22, 0x40, - 0x8b, 0xe4, 0x2a, 0xa3, 0x39, 0x7f, 0xd8, 0x46, 0xd6, 0x1a, 0xb9, 0xb1, 0xde, 0xdc, 0x48, 0x7f, - 0x7d, 0x83, 0x31, 0xda, 0x0f, 0xda, 0xd9, 0xf7, 0x2a, 0x27, 0xfa, 0x0e, 0xeb, 0xa3, 0xed, 0x80, - 0xb4, 0x14, 0xa4, 0xed, 0xd9, 0xd5, 0x88, 0x3b, 0x3d, 0xe5, 0x85, 0xd4, 0xb8, 0xf6, 0x74, 0x64, - 0x86, 0x3e, 0xe6, 0x5f, 0xa3, 0xdb, 0xd2, 0xff, 0xe4, 0x41, 0x5e, 0xa7, 0xa6, 0xb7, 0x87, 0x89, - 0x0d, 0x5a, 0x4c, 0xec, 0x3d, 0x8e, 0x27, 0x4c, 0x06, 0x0f, 0xc2, 0x5d, 0x1b, 0xd8, 0x57, 0x7a, - 0xc5, 0x21, 0x52, 0xc1, 0x62, 0x65, 0x8d, 0x15, 0x1c, 0x7a, 0x2e, 0x50, 0x80, 0x2a, 0x8c, 0xa2, - 0x79, 0xb4, 0x74, 0x33, 0xb7, 0x3f, 0x9f, 0x81, 0x66, 0xf2, 0x91, 0xe0, 0xc7, 0x69, 0x4a, 0x36, - 0xc6, 0xdc, 0x84, 0x40, 0xb4, 0x48, 0xbe, 0x0b, 0xfa, 0xcb, 0x0c, 0xf7, 0x46, 0xe9, 0x47, 0xeb, - 0xeb, 0x68, 0xd6, 0xb5, 0x3a, 0xfc, 0x04, 0x9a, 0x11, 0x8d, 0xc5, 0xd4, 0x64, 0x7d, 0x03, 0xa5, - 0x2d, 0x39, 0x2b, 0x60, 0x65, 0xf2, 0x9d, 0x74, 0x2c, 0x7b, 0x3b, 0x73, 0x63, 0xbd, 0x99, 0xa1, - 0x91, 0xfa, 0x86, 0x20, 0xab, 0xc3, 0x2f, 0xa1, 0xf2, 0xa8, 0x60, 0xf0, 0x29, 0x97, 0x3f, 0xa6, - 0x29, 0x6b, 0x02, 0x96, 0x0a, 0x79, 0x09, 0x68, 0x06, 0x7a, 0x05, 0x79, 0xf1, 0x58, 0xee, 0x93, - 0x73, 0x99, 0xa1, 0x4f, 0x0d, 0xe3, 0x71, 0x68, 0x70, 0x7c, 0xcf, 0x18, 0x2c, 0xd9, 0x82, 0x96, - 0x36, 0xf8, 0x61, 0xd1, 0x18, 0x93, 0x49, 0x23, 0xc6, 0x78, 0x0e, 0x8c, 0x27, 0x9c, 0x68, 0xa5, - 0xe4, 0x25, 0x26, 0x79, 0x25, 0x9a, 0xd6, 0xa2, 0xb6, 0x50, 0x7b, 0x0c, 0x89, 0x7e, 0x5b, 0xd4, - 0x16, 0x19, 0xf3, 0xc1, 0xeb, 0x17, 0xdf, 0x63, 0xf0, 0x2d, 0x6a, 0x0b, 0x7e, 0x5c, 0xb4, 0xc1, - 0x24, 0xbd, 0x2f, 0xb1, 0xc1, 0xf7, 0x02, 0x7c, 0x13, 0xeb, 0x5c, 0x1c, 0xe1, 0x2a, 0x30, 0xcb, - 0xab, 0xd1, 0xb4, 0xb6, 0x44, 0x98, 0xda, 0x64, 0x42, 0x2a, 0xe3, 0xb7, 0x3c, 0x8f, 0xbe, 0x7c, - 0x21, 0xb7, 0xbe, 0xb9, 0xbe, 0x8e, 0xed, 0x0d, 0xb5, 0xbe, 0xfa, 0xba, 0xa0, 0x51, 0x67, 0x08, - 0x2a, 0xd5, 0x1f, 0x65, 0x4c, 0x50, 0x9f, 0xe5, 0xfa, 0x63, 0xad, 0xd8, 0x10, 0xce, 0xdc, 0x79, - 0x8e, 0x40, 0xfd, 0xfa, 0x0d, 0xfd, 0xda, 0x89, 0x9b, 0xa3, 0xdd, 0xd9, 0x6b, 0x97, 0xf5, 0xfe, - 0x2b, 0xc6, 0x68, 0xde, 0x3e, 0xa5, 0x5f, 0x3b, 0x91, 0xbb, 0xd8, 0xc5, 0xd5, 0xcc, 0xd3, 0x68, - 0x26, 0x9d, 0x8e, 0xb6, 0xb5, 0xf4, 0xcc, 0x9d, 0xcc, 0xbd, 0x59, 0x2a, 0xcf, 0x85, 0x4f, 0x44, - 0x13, 0x6d, 0x6b, 0x41, 0xf6, 0x83, 0x66, 0x25, 0x5e, 0xc7, 0xef, 0xdc, 0x10, 0xcb, 0xe7, 0x1d, - 0xe0, 0x77, 0x6e, 0x3e, 0xf6, 0x6a, 0x89, 0xdf, 0xbc, 0xe5, 0xcf, 0x19, 0xbb, 0x88, 0x7b, 0x8a, - 0x6e, 0x30, 0x67, 0x99, 0xd9, 0xe5, 0x61, 0x83, 0xb9, 0x38, 0xaf, 0x8b, 0xfc, 0x0e, 0x60, 0x37, - 0xf9, 0xac, 0x70, 0x23, 0x57, 0xce, 0xf6, 0x92, 0xf7, 0x07, 0x78, 0x21, 0xa3, 0x6f, 0xfe, 0x7d, - 0x9e, 0x79, 0x2f, 0x17, 0x41, 0x73, 0xc2, 0xe6, 0x39, 0x9a, 0x21, 0x13, 0xe4, 0x31, 0x6b, 0x59, - 0x4d, 0xb5, 0xa6, 0x3c, 0x16, 0xc8, 0xaf, 0x93, 0x97, 0x80, 0x67, 0x88, 0xb1, 0x48, 0x18, 0x3c, - 0x9b, 0x19, 0xee, 0x35, 0xb6, 0x4c, 0x27, 0x7b, 0x32, 0x43, 0x1f, 0x83, 0x2e, 0xa7, 0xa1, 0x2a, - 0xf2, 0x9b, 0x55, 0x1b, 0x1a, 0x1c, 0x7d, 0x2b, 0x30, 0x8b, 0x9e, 0x05, 0x93, 0xae, 0x56, 0xc0, - 0x61, 0x16, 0x95, 0x31, 0xc6, 0x37, 0xd4, 0xe8, 0x09, 0x82, 0xac, 0x5f, 0x3e, 0x92, 0x3b, 0x33, - 0xec, 0x3f, 0x2f, 0x9c, 0x0b, 0x2b, 0xa0, 0xcc, 0x6f, 0xe5, 0xa1, 0xc2, 0x6f, 0xda, 0x4c, 0xb1, - 0xbb, 0xe1, 0x02, 0x38, 0x0b, 0xc9, 0x4b, 0xa1, 0x2b, 0x6a, 0xcf, 0x27, 0x84, 0xe3, 0x62, 0x4b, - 0xab, 0xdb, 0xc3, 0x8a, 0x7c, 0xcf, 0xe2, 0xc4, 0xe2, 0x7c, 0x4f, 0x21, 0xa0, 0x35, 0x15, 0x63, - 0xd2, 0xa0, 0x29, 0x9b, 0xd1, 0xc6, 0x40, 0x21, 0xea, 0x88, 0xd6, 0x44, 0x20, 0xaa, 0x9b, 0x35, - 0xe9, 0x95, 0xe8, 0xb5, 0xb3, 0xd0, 0x15, 0x7e, 0x03, 0x95, 0xa4, 0xcd, 0xcd, 0x5b, 0x54, 0x53, - 0x5e, 0x0e, 0x90, 0x02, 0xf9, 0xf7, 0xf3, 0x7a, 0x5d, 0x06, 0x3e, 0x2f, 0xb4, 0xa8, 0xaf, 0x03, - 0x96, 0x1a, 0x3c, 0xe3, 0xe9, 0xd6, 0x6d, 0xca, 0x96, 0x3a, 0x25, 0x58, 0x67, 0xec, 0xc8, 0x4f, - 0xed, 0xd3, 0xf7, 0xed, 0x05, 0xf0, 0x9b, 0xa3, 0xdd, 0x9b, 0xd6, 0x6d, 0x50, 0x6a, 0xbf, 0x97, - 0x19, 0x1a, 0xce, 0x8c, 0x9e, 0x32, 0x16, 0xb5, 0xa4, 0x7c, 0x79, 0x90, 0x7c, 0xc5, 0x3f, 0xe6, - 0x41, 0x3e, 0x86, 0x61, 0x4d, 0x28, 0x16, 0x79, 0x25, 0x1a, 0x49, 0xef, 0x6c, 0x08, 0x85, 0x77, - 0x85, 0x9a, 0xbe, 0xf0, 0xb2, 0x4e, 0x32, 0xe5, 0xe5, 0xc9, 0x3c, 0x79, 0x79, 0xa0, 0x90, 0xbc, - 0xf0, 0xf5, 0xd1, 0x6f, 0x4b, 0x6c, 0xa8, 0xa6, 0x99, 0x94, 0x00, 0x6c, 0x87, 0x6e, 0x7c, 0xac, - 0xf3, 0x72, 0x66, 0xf8, 0x67, 0xfa, 0xd0, 0x39, 0x7d, 0x60, 0x4c, 0xef, 0xee, 0xf4, 0xff, 0x4f, - 0x0f, 0xba, 0xbf, 0x40, 0xf3, 0xdb, 0x43, 0x8a, 0xc2, 0x96, 0xb5, 0xd8, 0x92, 0x7c, 0x29, 0xca, - 0xc7, 0xcb, 0xe5, 0xc6, 0xcf, 0x4e, 0x1d, 0x9a, 0x27, 0x16, 0xe4, 0x89, 0xfa, 0x16, 0x4f, 0x4e, - 0x2d, 0x77, 0x6a, 0xdb, 0x45, 0x4a, 0x93, 0xd0, 0xdd, 0x4e, 0xc3, 0xc3, 0x77, 0x20, 0x4f, 0x34, - 0x42, 0x0f, 0xdb, 0x3d, 0xd1, 0x08, 0xc6, 0xa8, 0x24, 0xc6, 0x8f, 0x3a, 0x82, 0xe4, 0x6f, 0xec, - 0x43, 0xb3, 0x62, 0x6a, 0xfa, 0x95, 0x78, 0x72, 0x97, 0xb9, 0xb2, 0x0a, 0x8a, 0x45, 0xc2, 0x91, - 0x76, 0x89, 0xe5, 0x48, 0xfb, 0x5e, 0x34, 0xb3, 0x91, 0x7d, 0x95, 0x2c, 0x88, 0x4a, 0x83, 0x66, - 0x81, 0x7f, 0x68, 0x1a, 0x5a, 0xc0, 0x97, 0xa0, 0xcf, 0xa7, 0xea, 0x5b, 0x42, 0x4d, 0xb7, 0xe3, - 0x79, 0xf6, 0x35, 0xc9, 0xe6, 0x22, 0x09, 0xa7, 0x8e, 0xc2, 0x49, 0x41, 0x97, 0x34, 0x71, 0xa4, - 0x5f, 0xdf, 0x73, 0x88, 0x1f, 0x57, 0xc2, 0xd2, 0x63, 0xa2, 0xbd, 0x4b, 0x6f, 0x1f, 0xad, 0xf6, - 0x35, 0xbc, 0x58, 0xb3, 0xa9, 0xbe, 0x76, 0x47, 0xfd, 0x66, 0x65, 0xc3, 0xba, 0x65, 0x7a, 0xe7, - 0x27, 0x7a, 0xe7, 0x65, 0x80, 0x5f, 0x5e, 0xd9, 0x10, 0xac, 0xdf, 0xae, 0x6c, 0x5b, 0x47, 0xeb, - 0x60, 0xf7, 0xc4, 0xea, 0xb6, 0x7e, 0x5b, 0x09, 0xae, 0xab, 0xe3, 0xcd, 0x0c, 0x1e, 0x60, 0x55, - 0x9b, 0x95, 0xe0, 0xc6, 0x75, 0xdb, 0x58, 0xd5, 0xd0, 0x5b, 0x7a, 0xff, 0x30, 0xad, 0x12, 0x0e, - 0x47, 0x99, 0xab, 0x94, 0xcb, 0x24, 0xf0, 0x03, 0x37, 0xc1, 0x45, 0x85, 0xee, 0xa9, 0xfe, 0xa3, - 0x07, 0x55, 0xd8, 0x5b, 0xdd, 0x1e, 0x52, 0xfc, 0x9c, 0x45, 0x8a, 0x17, 0xe4, 0x4b, 0x31, 0xc5, - 0xa6, 0xb8, 0xf3, 0xca, 0xed, 0x9a, 0xb2, 0x15, 0xbd, 0x10, 0x70, 0xa5, 0x85, 0xbc, 0xc4, 0x4e, - 0x42, 0x98, 0x87, 0xc2, 0x1b, 0xaa, 0x23, 0xa5, 0x68, 0x06, 0xed, 0x0a, 0xaf, 0x46, 0x33, 0xa2, - 0xc6, 0x1f, 0x5c, 0x14, 0x16, 0x10, 0x51, 0xa0, 0x65, 0xf2, 0x4c, 0xe8, 0xcf, 0x58, 0xe1, 0xb3, - 0x32, 0xbc, 0x12, 0x95, 0x86, 0x9a, 0xa3, 0xa1, 0x14, 0xa5, 0x27, 0xf1, 0x5d, 0x83, 0x12, 0xb9, - 0x9c, 0x7d, 0xfe, 0x67, 0x7a, 0xcf, 0xc1, 0x20, 0x14, 0x1a, 0x33, 0x16, 0x4a, 0x86, 0x77, 0x52, - 0xc6, 0x87, 0x19, 0x33, 0x0a, 0xe4, 0x39, 0x00, 0x5d, 0xdb, 0xf0, 0x62, 0xf6, 0xc4, 0xd5, 0xec, - 0x89, 0x8e, 0x20, 0x29, 0xc6, 0x41, 0x34, 0x27, 0x9e, 0xaa, 0x6d, 0x4d, 0xa5, 0xe3, 0x2d, 0xd1, - 0xd7, 0x60, 0xbf, 0x05, 0x8c, 0x4f, 0x3c, 0x9e, 0xf3, 0xeb, 0x64, 0xac, 0x0f, 0xf4, 0xe9, 0xfb, - 0xaf, 0xd2, 0xc3, 0x22, 0x38, 0x61, 0xcd, 0x07, 0xc2, 0x8f, 0xa1, 0xe9, 0xf1, 0x14, 0x59, 0x74, - 0x97, 0x9a, 0xfb, 0x19, 0x5a, 0xc4, 0xae, 0x11, 0x29, 0x0f, 0xc2, 0x7a, 0x9b, 0xd6, 0xe1, 0x7a, - 0x84, 0x52, 0x6a, 0x32, 0xaa, 0x42, 0xe3, 0xe9, 0xe6, 0xa2, 0x5f, 0x28, 0x96, 0x2b, 0xc4, 0x0e, - 0xe0, 0xb8, 0x95, 0xb9, 0x9f, 0x9a, 0x50, 0x58, 0xc9, 0x3b, 0xe7, 0x24, 0xdd, 0xb0, 0x73, 0xce, - 0x7b, 0x81, 0x16, 0x70, 0xce, 0x59, 0xed, 0xdb, 0xf2, 0x7c, 0x70, 0xb3, 0xb2, 0x69, 0x19, 0x3c, - 0xba, 0x33, 0xf3, 0x91, 0x5b, 0xb4, 0x41, 0xd9, 0xed, 0xa4, 0x0d, 0xfc, 0x9a, 0x72, 0x1f, 0x5a, - 0x14, 0x60, 0x7c, 0x67, 0xa5, 0x39, 0x80, 0xfb, 0xff, 0x51, 0x12, 0xe4, 0xbe, 0x01, 0xee, 0x9e, - 0x52, 0xb7, 0x9f, 0xce, 0xae, 0x5e, 0xab, 0x29, 0x8f, 0xa0, 0xd5, 0x01, 0x57, 0x5c, 0x84, 0x6d, - 0x00, 0xdc, 0xc5, 0x51, 0xbd, 0xf7, 0x1f, 0x3c, 0xc2, 0xb1, 0x9e, 0xd9, 0xe6, 0x1b, 0x71, 0x5b, - 0x23, 0xe2, 0x54, 0x9c, 0xf6, 0xdb, 0xa2, 0x29, 0x1b, 0x51, 0x7d, 0xc0, 0x9d, 0x22, 0xc2, 0xc2, - 0x5f, 0x24, 0xa3, 0x9b, 0xd6, 0xdb, 0x82, 0xca, 0xc5, 0x6e, 0xac, 0xf7, 0xe8, 0x06, 0x51, 0x4b, - 0xc4, 0x0b, 0x4f, 0x1f, 0x9a, 0x45, 0x7f, 0x98, 0x97, 0x33, 0x41, 0xb1, 0xc8, 0xff, 0x2f, 0x3d, - 0xe8, 0x6e, 0x3e, 0xb6, 0xed, 0x89, 0xf0, 0x6d, 0xc8, 0xa9, 0xf8, 0x59, 0x54, 0xda, 0x96, 0x08, - 0xd7, 0xd7, 0x51, 0x05, 0x1b, 0xd0, 0x94, 0xa5, 0x01, 0x28, 0x91, 0x17, 0x1b, 0x8b, 0xf8, 0x91, - 0x33, 0xd4, 0xc2, 0x90, 0xd5, 0x7c, 0x5b, 0x22, 0x6c, 0x4e, 0x12, 0x80, 0x55, 0x3f, 0xad, 0x29, - 0x4f, 0xa2, 0x27, 0x02, 0x8e, 0x94, 0x90, 0xef, 0xe7, 0x13, 0x44, 0x1f, 0x09, 0x90, 0x69, 0xca, - 0xf5, 0x75, 0xb4, 0x25, 0xc2, 0x94, 0xe7, 0xff, 0x9d, 0x07, 0xcd, 0xcb, 0x6b, 0xfb, 0x8d, 0xf0, - 0x91, 0x62, 0xf8, 0x14, 0xc7, 0xeb, 0x74, 0x9b, 0xeb, 0x4c, 0x09, 0x1b, 0x19, 0xa9, 0xcf, 0xb5, - 0x40, 0x46, 0x3b, 0xb7, 0x9f, 0x96, 0x50, 0x19, 0xeb, 0x89, 0xaf, 0xbb, 0x25, 0x61, 0xdd, 0x7d, - 0x37, 0x4c, 0x7d, 0x84, 0xb2, 0x36, 0xfc, 0xc0, 0x5e, 0x54, 0x16, 0x4d, 0xb4, 0xad, 0xa9, 0x8d, - 0x46, 0xe8, 0x6b, 0x9e, 0x20, 0xff, 0x4d, 0xeb, 0xd6, 0x92, 0xba, 0x12, 0x5e, 0x47, 0x7e, 0xe3, - 0x47, 0x50, 0x69, 0x38, 0x1a, 0x49, 0xa6, 0x2a, 0x4a, 0x09, 0x39, 0x16, 0xe5, 0x93, 0x43, 0x49, - 0xa5, 0xa2, 0xa9, 0x74, 0x28, 0x96, 0x36, 0xa0, 0x83, 0x00, 0xeb, 0x7f, 0x06, 0xcd, 0xb6, 0x94, - 0x1b, 0xe3, 0x34, 0x6a, 0xd8, 0x38, 0xc3, 0xf4, 0xab, 0xc6, 0xff, 0x64, 0x19, 0xe0, 0x21, 0x8b, - 0x7c, 0xfe, 0xdb, 0xff, 0x5f, 0xc5, 0x35, 0xfe, 0xd6, 0xd6, 0xc6, 0x98, 0x7a, 0xeb, 0xec, 0xc5, - 0x97, 0xf6, 0x7d, 0xc5, 0xeb, 0xad, 0xc2, 0x48, 0x42, 0x83, 0x50, 0x61, 0x5c, 0xe2, 0x26, 0x8c, - 0xfa, 0xc5, 0x9e, 0xdc, 0x58, 0x2f, 0xdd, 0xe2, 0x01, 0x30, 0xde, 0x44, 0x4f, 0x28, 0x4b, 0x4d, - 0xf7, 0x0f, 0x38, 0xa1, 0x5c, 0xe1, 0xda, 0x0b, 0x3f, 0x6c, 0x14, 0xbb, 0x83, 0x03, 0xcb, 0xf5, - 0xa8, 0x2c, 0x45, 0x28, 0x5b, 0x5f, 0x47, 0x97, 0x3f, 0x44, 0x4b, 0xf0, 0x42, 0xa6, 0x85, 0xa1, - 0x3f, 0x28, 0xe5, 0x03, 0x0b, 0x72, 0xb0, 0xea, 0x67, 0x35, 0xe5, 0x29, 0xf4, 0x64, 0x00, 0x1b, - 0xf3, 0x65, 0x9d, 0x2a, 0xf9, 0x41, 0x73, 0xab, 0x29, 0x7c, 0xbf, 0x72, 0xa2, 0xfd, 0xad, 0x89, - 0xce, 0x83, 0x99, 0xa1, 0x83, 0x7a, 0x4f, 0x77, 0x66, 0xb8, 0xd7, 0xff, 0x37, 0xe2, 0xb6, 0x80, - 0x77, 0x71, 0x7b, 0x68, 0x8b, 0x17, 0x2d, 0xda, 0x62, 0x7e, 0xbe, 0x78, 0x00, 0x36, 0xae, 0x0e, - 0xbc, 0x22, 0x59, 0x9c, 0x7c, 0x2b, 0xef, 0xb2, 0x10, 0xd5, 0xba, 0x81, 0x17, 0xdb, 0xba, 0x99, - 0xc6, 0x8b, 0x25, 0x68, 0x3a, 0x34, 0xc7, 0x4b, 0x19, 0x13, 0x82, 0xd0, 0xdc, 0xa9, 0x29, 0x77, - 0x30, 0x26, 0x84, 0xff, 0x18, 0x97, 0x3d, 0x22, 0xf0, 0x85, 0xc7, 0xdc, 0x39, 0x98, 0x7c, 0x51, - 0x06, 0x5f, 0xae, 0xaf, 0x33, 0x99, 0x00, 0x3f, 0x85, 0x10, 0xfc, 0x2d, 0xbc, 0x48, 0x01, 0xb7, - 0x05, 0xb3, 0x58, 0x2e, 0xa7, 0x43, 0x66, 0x2b, 0x68, 0x5e, 0x83, 0x9f, 0x46, 0x33, 0x0d, 0xd9, - 0x0f, 0x86, 0x62, 0x56, 0xff, 0x49, 0xb3, 0x54, 0x9e, 0x0b, 0x8d, 0x7d, 0xf5, 0x0d, 0x6d, 0x6b, - 0x7c, 0xb5, 0xf5, 0x75, 0xc1, 0xa0, 0x59, 0x89, 0x9f, 0x43, 0xb3, 0x99, 0xc6, 0x82, 0x3e, 0x4a, - 0xcd, 0x13, 0x78, 0x6b, 0x8d, 0xd8, 0xcf, 0x5a, 0xe8, 0xc7, 0x0a, 0xc0, 0x1f, 0xe4, 0x4c, 0x37, - 0x87, 0x01, 0x52, 0x36, 0x0f, 0x5a, 0x1a, 0xaa, 0xba, 0xff, 0x82, 0x79, 0xed, 0x0f, 0xd2, 0xa4, - 0xa2, 0x05, 0xa1, 0xb6, 0x50, 0xb4, 0x39, 0xd4, 0xd8, 0xac, 0xd6, 0x37, 0x28, 0x91, 0x48, 0x52, - 0x4d, 0xa5, 0x20, 0x28, 0xa9, 0xb1, 0x29, 0x28, 0x01, 0x27, 0x04, 0x37, 0x18, 0x79, 0xb6, 0xde, - 0xf5, 0x51, 0x66, 0xec, 0xb8, 0xaf, 0xbe, 0xc1, 0x97, 0x3d, 0x72, 0x29, 0xe8, 0x06, 0x67, 0xb9, - 0x65, 0x28, 0x73, 0xbc, 0x65, 0x70, 0x1e, 0x24, 0x07, 0xa8, 0x36, 0x56, 0x10, 0x68, 0x7e, 0x80, - 0xb2, 0x05, 0x9b, 0x13, 0xea, 0x5a, 0xf4, 0x33, 0xd1, 0xb5, 0x7e, 0xab, 0x1a, 0x6e, 0x4d, 0x46, - 0xd3, 0xbb, 0x37, 0x24, 0xe3, 0xad, 0x89, 0x5b, 0xa6, 0x7e, 0x7f, 0x64, 0x57, 0xbf, 0x35, 0x9a, - 0xf2, 0x8c, 0xa8, 0x7e, 0x65, 0x41, 0xfd, 0x2e, 0x9b, 0xf8, 0xe0, 0x84, 0x7e, 0xa3, 0x33, 0x33, - 0x7a, 0xaa, 0x52, 0xef, 0x1c, 0xd5, 0x07, 0xae, 0xe7, 0xce, 0xfc, 0x42, 0xef, 0x1e, 0xce, 0x75, - 0xed, 0xd7, 0xb5, 0x6e, 0xf0, 0x30, 0xcb, 0x75, 0xed, 0x5f, 0x2e, 0xae, 0xea, 0x1f, 0xd3, 0x94, - 0x35, 0x48, 0x86, 0xf5, 0xa8, 0x23, 0xce, 0x6c, 0x59, 0xaf, 0x0f, 0x74, 0xe9, 0x9d, 0x17, 0x72, - 0x23, 0x1d, 0x74, 0x89, 0xf3, 0x2b, 0x0f, 0xba, 0xcf, 0x95, 0x5a, 0xb7, 0x87, 0xfa, 0x6a, 0xb0, - 0xa8, 0x2f, 0x9b, 0x75, 0xb7, 0x20, 0x55, 0xdc, 0x8a, 0x47, 0xbc, 0x25, 0x76, 0xa6, 0x09, 0xbf, - 0x77, 0xb7, 0x92, 0xd3, 0x4d, 0x87, 0xf5, 0x79, 0x10, 0x51, 0x83, 0x1b, 0xd5, 0xdd, 0x0d, 0xa1, - 0x68, 0xf2, 0x1b, 0xcc, 0x88, 0xab, 0x35, 0x65, 0x25, 0xaa, 0x0c, 0x38, 0x61, 0xcb, 0x59, 0x70, - 0x70, 0xef, 0x84, 0x76, 0x56, 0x1f, 0x64, 0x5e, 0x0a, 0x7f, 0x4c, 0xf7, 0x2a, 0x26, 0xf8, 0x37, - 0xe2, 0x34, 0x8d, 0xa2, 0x33, 0x75, 0xef, 0xbf, 0x7c, 0x3a, 0x70, 0x63, 0x09, 0x74, 0x2b, 0xc8, - 0x68, 0xff, 0x56, 0x42, 0x33, 0x68, 0x7b, 0x1c, 0x40, 0xa5, 0x1b, 0xd5, 0xdd, 0x9c, 0xb5, 0x88, - 0x5f, 0x2f, 0x94, 0xc8, 0x65, 0xd0, 0x97, 0x61, 0x30, 0x49, 0x01, 0x5e, 0x43, 0x9a, 0x09, 0xae, - 0x7e, 0x84, 0xda, 0xac, 0x4c, 0x2e, 0xa7, 0xdf, 0x06, 0xab, 0xc7, 0x8a, 0xf1, 0x7a, 0x34, 0x2b, - 0x62, 0x7b, 0x8c, 0x48, 0x94, 0xb9, 0x58, 0x2e, 0x63, 0x68, 0x6d, 0x79, 0x85, 0x28, 0x02, 0xb0, - 0x97, 0xcb, 0x6c, 0xe4, 0xf2, 0x1c, 0xce, 0x22, 0x54, 0xa7, 0xf7, 0x22, 0x58, 0x5d, 0x89, 0x7e, - 0xf3, 0x5c, 0x88, 0xfe, 0x5c, 0x72, 0x7c, 0x6c, 0xf1, 0xb1, 0xa4, 0x29, 0x91, 0xbc, 0xd7, 0x16, - 0xdb, 0xc4, 0xd7, 0x16, 0x95, 0xc2, 0xc1, 0x13, 0x9d, 0xbb, 0x4a, 0x1f, 0x0b, 0x04, 0x15, 0x8d, - 0x35, 0xc5, 0xc9, 0xe0, 0x2a, 0x7d, 0x44, 0xe4, 0xe8, 0x7f, 0x6d, 0x89, 0x70, 0xa5, 0x2f, 0x16, - 0x8f, 0xa8, 0x4d, 0x86, 0x3a, 0xa8, 0xf4, 0xa5, 0x43, 0xa9, 0x5d, 0xbf, 0xae, 0x79, 0x36, 0xf9, - 0xb4, 0x21, 0x99, 0xf0, 0x30, 0xe9, 0x4e, 0x5b, 0x17, 0xc1, 0x52, 0xb8, 0xc0, 0x2e, 0x63, 0x5d, - 0x04, 0x67, 0xf2, 0x2e, 0x82, 0x25, 0x46, 0x17, 0x5f, 0xdd, 0xc3, 0x8f, 0xef, 0xa0, 0x99, 0x24, - 0xfa, 0x29, 0xf1, 0xde, 0x9f, 0x46, 0xac, 0xf6, 0x13, 0x9a, 0x52, 0x15, 0x30, 0x4b, 0x65, 0x3f, - 0xe4, 0x15, 0xe0, 0xc1, 0x4e, 0x37, 0x6c, 0xde, 0xe6, 0x83, 0x1f, 0xd9, 0xfd, 0x57, 0x6e, 0x8e, - 0x76, 0x93, 0x88, 0x90, 0x25, 0xb2, 0xc7, 0xf7, 0x7b, 0x41, 0xb3, 0x15, 0x7e, 0x01, 0xcd, 0x50, - 0x63, 0x90, 0x2f, 0xa0, 0x84, 0x74, 0x4b, 0xb2, 0x28, 0xb2, 0x32, 0xd9, 0x6f, 0x08, 0xc7, 0x07, - 0x27, 0x8b, 0xe9, 0x94, 0xb5, 0xc1, 0x8f, 0xa2, 0xd2, 0xe6, 0x68, 0x4b, 0x34, 0x4d, 0x1d, 0x46, - 0xee, 0x23, 0x67, 0xb5, 0xa4, 0x44, 0x2e, 0xcf, 0x0e, 0x1e, 0x9a, 0x38, 0xfd, 0x73, 0x16, 0xbb, - 0xbc, 0x24, 0x60, 0x34, 0x84, 0x3a, 0x5c, 0x89, 0x4a, 0x12, 0x86, 0x8c, 0x83, 0xdb, 0x48, 0x85, - 0xb1, 0x08, 0x24, 0x05, 0xf2, 0xf4, 0x89, 0xd3, 0x3f, 0xcf, 0x9d, 0x7a, 0x93, 0x81, 0x93, 0x42, - 0x5c, 0x8b, 0xa6, 0xa7, 0xa2, 0x2d, 0x89, 0x66, 0x16, 0x15, 0x9f, 0xac, 0x61, 0x68, 0x91, 0xbc, - 0x58, 0x3f, 0xf4, 0x31, 0x38, 0x04, 0xf8, 0xe2, 0x22, 0x6b, 0xf9, 0x98, 0xde, 0x04, 0x38, 0xdc, - 0x2e, 0x21, 0x04, 0x2f, 0x2a, 0xb6, 0xb4, 0x36, 0x37, 0xd3, 0x90, 0xf6, 0x3f, 0xd2, 0x94, 0x1f, - 0x06, 0x84, 0x62, 0xf9, 0x79, 0x21, 0x0f, 0x6c, 0x25, 0x6c, 0x67, 0xa0, 0x16, 0x9c, 0x2c, 0x78, - 0x4c, 0xb1, 0x27, 0x7d, 0xfa, 0xd8, 0xbb, 0x34, 0x46, 0x7c, 0xf6, 0xd8, 0x55, 0x92, 0xd9, 0xc7, - 0x09, 0x3a, 0x28, 0x74, 0x8e, 0x7f, 0x28, 0xbe, 0xbb, 0x98, 0x69, 0xba, 0x46, 0x0a, 0x2f, 0x5e, - 0xaa, 0x78, 0xf8, 0xe2, 0xdc, 0x47, 0xc3, 0x95, 0x3e, 0xe8, 0x93, 0x3e, 0xf3, 0x1c, 0xf9, 0x8c, - 0x06, 0xba, 0x85, 0xd7, 0x2c, 0xe4, 0x39, 0x8a, 0xf8, 0x70, 0xe3, 0x87, 0xe2, 0x81, 0x13, 0x12, - 0xba, 0x37, 0x7d, 0xf3, 0x9d, 0xbb, 0x87, 0x53, 0x13, 0xe7, 0xee, 0xcd, 0x13, 0xab, 0x75, 0xfc, - 0x78, 0x79, 0x96, 0xe0, 0xdf, 0x42, 0x8f, 0x97, 0x7d, 0xd6, 0x8e, 0xe1, 0x75, 0x12, 0x1c, 0x36, - 0xe7, 0x2e, 0xbe, 0x3f, 0xd1, 0xde, 0xc5, 0x8f, 0x98, 0x37, 0x0a, 0x0f, 0x45, 0xca, 0x59, 0xc0, - 0x9b, 0xca, 0x00, 0x2f, 0x74, 0xe9, 0x8a, 0x88, 0x3b, 0xed, 0x8a, 0xc3, 0xe2, 0xb5, 0xc8, 0xd3, - 0x26, 0x53, 0xf7, 0x14, 0xe2, 0x7c, 0xe4, 0x69, 0x93, 0xe5, 0x45, 0xe0, 0x91, 0x02, 0x1e, 0xfc, - 0x6d, 0x32, 0x71, 0x48, 0x31, 0x94, 0x2f, 0x7d, 0xed, 0xec, 0x69, 0x93, 0x71, 0x1d, 0xf7, 0xf8, - 0x83, 0x98, 0xea, 0x95, 0x9a, 0xb2, 0x9c, 0x7b, 0xfc, 0xdd, 0x67, 0xf1, 0xe7, 0x83, 0x42, 0xa0, - 0x14, 0x8c, 0x85, 0xbb, 0xf6, 0x19, 0xd4, 0x45, 0xd5, 0x01, 0x57, 0xb5, 0xc6, 0x36, 0x59, 0xe2, - 0x2b, 0x22, 0x78, 0xc0, 0x07, 0x11, 0x18, 0xfd, 0x47, 0xe9, 0x81, 0x6c, 0x5e, 0xe3, 0xdb, 0xc3, - 0x76, 0x7e, 0xdf, 0xe2, 0x95, 0xb1, 0x22, 0xdf, 0x76, 0xba, 0xe2, 0x55, 0x17, 0x4a, 0x87, 0x60, - 0x2f, 0x07, 0x16, 0x95, 0xf6, 0x0e, 0xce, 0xae, 0x34, 0xdb, 0xfd, 0xa0, 0x04, 0x6f, 0x0b, 0x5c, - 0x3b, 0xc0, 0x6b, 0x50, 0x29, 0x59, 0xaf, 0x50, 0xea, 0x80, 0x53, 0x34, 0x29, 0xb1, 0xbe, 0xda, - 0x02, 0xf5, 0x13, 0x84, 0x2a, 0xfc, 0x5d, 0x34, 0x03, 0x46, 0x9f, 0xaa, 0xf0, 0x10, 0x93, 0xef, - 0xb7, 0x5d, 0xa0, 0x09, 0x5f, 0xac, 0x53, 0xd3, 0xa1, 0x68, 0x33, 0xb5, 0xa3, 0xb4, 0x5d, 0xde, - 0x70, 0x59, 0xb1, 0x7f, 0xac, 0x04, 0x61, 0x7b, 0xdb, 0xaf, 0xe6, 0x11, 0x61, 0xb5, 0x83, 0x2d, - 0x21, 0x83, 0x12, 0x6d, 0xc9, 0x4c, 0xe8, 0xc0, 0x97, 0x67, 0x4c, 0x9e, 0xca, 0x7b, 0x45, 0x08, - 0x2e, 0xf6, 0xf4, 0x15, 0x61, 0x05, 0x30, 0xb4, 0xcf, 0xc1, 0x1b, 0x8d, 0x3e, 0x3e, 0x5b, 0x93, - 0xff, 0x9e, 0x10, 0x88, 0xc1, 0x78, 0xaa, 0xfc, 0x8b, 0xbf, 0x24, 0x1c, 0x6f, 0xef, 0x9c, 0xea, - 0x4b, 0xc2, 0x43, 0xbd, 0xb9, 0xc3, 0x27, 0x1d, 0x5e, 0x12, 0x6e, 0x47, 0xc4, 0x02, 0xd3, 0x4c, - 0xe7, 0x77, 0xe7, 0x4f, 0xe9, 0xb6, 0x50, 0x6a, 0x17, 0x48, 0x38, 0x01, 0x93, 0xef, 0x07, 0xac, - 0xc7, 0x07, 0xcf, 0xe5, 0x46, 0xf6, 0xda, 0xdd, 0x13, 0x89, 0x2f, 0x9d, 0x01, 0x48, 0x5e, 0x4f, - 0x30, 0x55, 0x55, 0x26, 0xbe, 0x9e, 0x60, 0xaa, 0xaa, 0x5c, 0x54, 0x4e, 0x82, 0x5a, 0x5a, 0x6d, - 0x7d, 0x24, 0x47, 0xa5, 0x89, 0xaa, 0xca, 0x72, 0x51, 0x39, 0x32, 0xb5, 0xe8, 0x3f, 0xe9, 0x41, - 0xb3, 0x2d, 0xfb, 0x14, 0xbc, 0x11, 0xcd, 0x49, 0x89, 0x05, 0x7c, 0x15, 0x48, 0x22, 0x3a, 0xe4, - 0xd7, 0xc9, 0xb3, 0xf8, 0x3e, 0xa6, 0xbe, 0x2e, 0x98, 0x5f, 0x8b, 0x5f, 0x44, 0x77, 0x5a, 0x8a, - 0x84, 0x65, 0x22, 0x79, 0x2d, 0x69, 0xaf, 0x95, 0xe7, 0x98, 0x1b, 0x23, 0x58, 0x33, 0xda, 0x61, - 0x70, 0xad, 0xd3, 0xea, 0x91, 0x8c, 0xcf, 0xb2, 0x7a, 0x34, 0xbb, 0x82, 0x05, 0xa4, 0x75, 0xe9, - 0x68, 0xb0, 0x24, 0xf2, 0x05, 0xac, 0xe8, 0x0b, 0x6d, 0xe8, 0x02, 0xf2, 0x88, 0x84, 0xee, 0xda, - 0x12, 0x8f, 0xa8, 0x5c, 0xca, 0x68, 0x64, 0x86, 0x27, 0x51, 0xc9, 0xcb, 0xa1, 0x68, 0x73, 0x85, - 0x44, 0x04, 0x7a, 0x69, 0xfe, 0xec, 0x3b, 0x34, 0xa9, 0x8f, 0xbd, 0x1c, 0x0f, 0x92, 0x46, 0x58, - 0x41, 0x33, 0x52, 0xad, 0xe1, 0xb0, 0x9a, 0x62, 0x0a, 0xa1, 0xe8, 0xf6, 0xac, 0x9d, 0xff, 0x79, - 0xb4, 0xc0, 0x05, 0x06, 0x7b, 0xe1, 0xdd, 0xce, 0x16, 0xf3, 0x6c, 0x9c, 0xff, 0x16, 0x9f, 0x75, - 0x7a, 0x2c, 0xcf, 0x3a, 0xfd, 0xff, 0xb9, 0x14, 0xcd, 0xad, 0x4b, 0x86, 0xa2, 0x31, 0xc8, 0x83, - 0x0d, 0x2b, 0xe4, 0xd7, 0x51, 0x19, 0x75, 0x35, 0x4d, 0x11, 0x4c, 0x67, 0xd6, 0xec, 0xd0, 0x94, - 0x1f, 0x04, 0x78, 0xa1, 0xdc, 0x20, 0xba, 0x17, 0xd7, 0x37, 0x98, 0x4f, 0xc1, 0x34, 0x9a, 0x6b, - 0x03, 0x66, 0x91, 0x1e, 0xf2, 0x0d, 0x77, 0x4f, 0xb4, 0x77, 0x65, 0x86, 0xda, 0x6f, 0x8e, 0x76, - 0x43, 0xf4, 0x65, 0x3b, 0x4c, 0x90, 0xf7, 0x8d, 0xb7, 0xdb, 0x03, 0x7b, 0x3d, 0xae, 0x29, 0x2b, - 0xc5, 0x85, 0xcb, 0xfd, 0x89, 0x78, 0x64, 0xfc, 0xc6, 0x9b, 0xb9, 0xf3, 0x23, 0x79, 0xfe, 0xbb, - 0x1c, 0x84, 0xec, 0x7f, 0x7d, 0x92, 0xb8, 0x62, 0x49, 0xa2, 0x52, 0x83, 0x1e, 0xa9, 0x8a, 0x69, - 0x04, 0xa3, 0x1f, 0x68, 0xca, 0xf7, 0x02, 0x50, 0xc2, 0xd1, 0x11, 0x06, 0x64, 0x41, 0xc6, 0x82, - 0x66, 0x51, 0xe8, 0x40, 0xc7, 0xf8, 0x6e, 0x54, 0xfa, 0x32, 0x89, 0x5b, 0x6b, 0xe8, 0xb3, 0xb2, - 0x20, 0xfc, 0xc0, 0x2b, 0x11, 0x26, 0xa9, 0x30, 0x1a, 0xd4, 0x64, 0x34, 0x1e, 0xd9, 0xaa, 0x86, - 0xe3, 0xb1, 0x48, 0x8a, 0x3a, 0xfd, 0x38, 0xd4, 0xe0, 0x55, 0xe8, 0x2e, 0x48, 0x0c, 0xa4, 0x34, - 0x37, 0x9b, 0xb9, 0x81, 0x88, 0xea, 0x2a, 0x0b, 0x3a, 0x55, 0x19, 0xf3, 0x9d, 0x8e, 0xb6, 0xa8, - 0xf1, 0x56, 0x38, 0x89, 0x9b, 0x1d, 0x64, 0x3f, 0xf1, 0x32, 0x34, 0x07, 0xe2, 0xd8, 0x93, 0x7c, - 0x4c, 0x86, 0x75, 0x83, 0xd5, 0x69, 0x30, 0xbf, 0xd8, 0xe0, 0xa7, 0x94, 0xda, 0xac, 0x86, 0xd3, - 0xf1, 0x24, 0x7d, 0x7e, 0xcb, 0x7f, 0x93, 0x0b, 0x45, 0x63, 0x7c, 0xb4, 0x1a, 0xd1, 0x0b, 0x45, - 0xb3, 0x88, 0x7c, 0x27, 0x9a, 0x0a, 0x35, 0x36, 0xab, 0xeb, 0xda, 0xa2, 0xe1, 0x34, 0x7b, 0x13, - 0x69, 0x7c, 0xc7, 0x5a, 0x8c, 0xbf, 0x8d, 0xee, 0x4b, 0xed, 0x8a, 0x26, 0xbe, 0x13, 0x8a, 0xa6, - 0xd7, 0xc7, 0x69, 0x4c, 0xfc, 0x6d, 0x30, 0x5a, 0x46, 0x1a, 0x92, 0x74, 0x27, 0x38, 0x19, 0x18, - 0x9e, 0x8f, 0xa6, 0x47, 0x92, 0xbb, 0x83, 0xad, 0x31, 0x58, 0xa4, 0x05, 0xe9, 0x2f, 0x7f, 0x87, - 0x07, 0xdd, 0x29, 0xf0, 0xf8, 0xed, 0x76, 0x4a, 0x65, 0xd8, 0x99, 0x07, 0x8a, 0xd0, 0x14, 0x93, - 0xad, 0x73, 0xba, 0x3c, 0xe8, 0x0e, 0xa3, 0x99, 0x19, 0xcc, 0x0c, 0x3f, 0x9d, 0xaf, 0x33, 0xe0, - 0x9a, 0x87, 0x17, 0xca, 0xe5, 0x22, 0x6f, 0x33, 0xa1, 0x32, 0xf5, 0xca, 0x2b, 0x68, 0x96, 0x18, - 0x82, 0x0d, 0xb4, 0x5a, 0x95, 0xd3, 0x58, 0xcd, 0x8f, 0xae, 0x14, 0x82, 0xa9, 0xad, 0x8b, 0xa5, - 0x93, 0xbb, 0xe9, 0x09, 0x80, 0x18, 0x8d, 0x8d, 0xbe, 0x00, 0xc8, 0x5e, 0xb9, 0x30, 0x7e, 0xfe, - 0x43, 0x76, 0x02, 0x20, 0x00, 0x78, 0x9f, 0x46, 0x73, 0xf3, 0xbb, 0xc1, 0x73, 0xd1, 0xb4, 0x5d, - 0xea, 0x6e, 0xaa, 0xfb, 0x8c, 0x3f, 0xc9, 0xb5, 0x60, 0xa8, 0xb9, 0x55, 0xe5, 0xd7, 0x82, 0xc6, - 0x8f, 0x6a, 0xcf, 0xe3, 0x92, 0xff, 0x5f, 0x4a, 0xe8, 0x5e, 0x88, 0xb6, 0x67, 0x1d, 0x1c, 0x3f, - 0x24, 0xd8, 0x6a, 0x8f, 0xdd, 0xf4, 0xa8, 0xa6, 0x3c, 0x2c, 0x6a, 0xa1, 0xc5, 0x34, 0x38, 0x66, - 0xf1, 0x2a, 0x68, 0x0b, 0x53, 0x41, 0x40, 0xa8, 0xc5, 0x85, 0x09, 0x45, 0x9d, 0x91, 0x40, 0x45, - 0x95, 0x8b, 0x5e, 0xc5, 0x54, 0xbd, 0xf8, 0xff, 0xce, 0x83, 0x16, 0xb9, 0x60, 0xf1, 0xcf, 0x94, - 0xc9, 0xab, 0x37, 0x6b, 0xca, 0x73, 0xe8, 0xdb, 0x81, 0xc2, 0x64, 0x91, 0xe7, 0x8b, 0x53, 0x67, - 0xf2, 0x95, 0xfd, 0x7c, 0x2c, 0x2b, 0xa1, 0x99, 0x46, 0x27, 0x9b, 0x42, 0x8d, 0x6a, 0xf3, 0x97, - 0x16, 0x97, 0xdf, 0x47, 0xd3, 0x9b, 0x8d, 0x8e, 0x18, 0x03, 0x3c, 0xe8, 0x84, 0x30, 0xf9, 0xd4, - 0x4a, 0xf2, 0x2f, 0x95, 0x0f, 0xf0, 0xef, 0x82, 0x96, 0x5c, 0x34, 0x4e, 0xed, 0xcb, 0x5d, 0xfc, - 0x05, 0x3b, 0x76, 0x80, 0x3a, 0xef, 0x13, 0x68, 0x96, 0xd0, 0x6e, 0x4a, 0x02, 0x71, 0x5d, 0x42, - 0x0b, 0x4c, 0x9a, 0x41, 0x2f, 0x4c, 0x16, 0xea, 0x19, 0xdb, 0x4a, 0xce, 0x2f, 0xab, 0x78, 0x8b, - 0x49, 0x39, 0xd6, 0x2a, 0x56, 0x9e, 0xaf, 0x46, 0xac, 0xfc, 0x7f, 0xe1, 0x41, 0x15, 0xf6, 0xb1, - 0xff, 0x73, 0x95, 0x80, 0x5a, 0x4d, 0x79, 0x16, 0x3d, 0x1d, 0x70, 0xa5, 0x88, 0x7c, 0xa7, 0x48, - 0x60, 0xc2, 0x39, 0x76, 0xbe, 0x7f, 0x9f, 0xf2, 0xfd, 0xb6, 0x50, 0x34, 0x96, 0xfe, 0xd2, 0x7c, - 0xbf, 0xc5, 0xd8, 0x17, 0x46, 0x63, 0x7c, 0x23, 0x3c, 0xcf, 0xbe, 0x6b, 0x8a, 0xc6, 0xd2, 0x94, - 0xcf, 0x01, 0x92, 0xf3, 0xf9, 0xe5, 0xd3, 0xfc, 0x7d, 0x4e, 0x90, 0xd6, 0xe5, 0x31, 0x2b, 0x69, - 0x3c, 0x25, 0x66, 0x85, 0xcf, 0xdd, 0x1a, 0x66, 0xfd, 0x4b, 0x0b, 0xb3, 0xb2, 0xb1, 0xff, 0x73, - 0x65, 0x56, 0x1a, 0xb4, 0xcb, 0x95, 0x22, 0x32, 0x16, 0x09, 0x0c, 0xd3, 0x6f, 0xe7, 0xd6, 0x67, - 0xd0, 0xec, 0x6f, 0xab, 0xa1, 0xe6, 0xf4, 0x4e, 0xca, 0x04, 0xd5, 0x2b, 0x35, 0xe5, 0x61, 0xb4, - 0x3c, 0x60, 0x2d, 0x95, 0x2b, 0xf4, 0x37, 0xcf, 0xea, 0xc3, 0xd7, 0xb2, 0x1f, 0xb6, 0x67, 0x4f, - 0x9e, 0x85, 0x50, 0x1b, 0x34, 0xc4, 0xd5, 0x5e, 0x0f, 0xba, 0x83, 0xc1, 0xde, 0x82, 0xa9, 0x58, - 0x8f, 0x66, 0xf2, 0xcb, 0x6f, 0xba, 0xaf, 0x25, 0xee, 0xc1, 0x66, 0xa9, 0x5c, 0x21, 0x4e, 0xc8, - 0xb2, 0x74, 0xb2, 0x55, 0xad, 0x22, 0xe7, 0xc6, 0xcb, 0x83, 0x26, 0x10, 0x73, 0x4b, 0xc9, 0x43, - 0xc5, 0x11, 0x6f, 0x97, 0xfb, 0xa0, 0x83, 0x12, 0x1c, 0x12, 0xb2, 0x4c, 0x40, 0x5b, 0xc3, 0x3b, - 0xd5, 0x96, 0x10, 0x93, 0xad, 0x95, 0xf9, 0xd7, 0x8f, 0xe4, 0x8e, 0x88, 0x5f, 0x3f, 0x4e, 0xcf, - 0x0c, 0xf7, 0x12, 0xe7, 0x6a, 0x5a, 0xc0, 0xc6, 0xe3, 0xde, 0xa3, 0xbc, 0x18, 0x4e, 0x4b, 0xe9, - 0xfb, 0xf2, 0x0b, 0xa7, 0xcd, 0x70, 0x15, 0x30, 0x31, 0x9f, 0x48, 0xa8, 0x62, 0x83, 0xfa, 0xd5, - 0x0c, 0x07, 0x3f, 0x2c, 0xbe, 0xd8, 0xa0, 0x9c, 0x19, 0x03, 0xf5, 0x45, 0xbe, 0xcf, 0xa2, 0x8d, - 0x1a, 0x65, 0xd5, 0x8f, 0x68, 0xca, 0x2a, 0xb4, 0x32, 0xe0, 0xfa, 0x75, 0x76, 0x39, 0x27, 0x0e, - 0xdd, 0xff, 0x87, 0xd3, 0x90, 0xf7, 0x85, 0x56, 0x35, 0xb9, 0xbb, 0x41, 0x4d, 0xb6, 0xd4, 0xec, - 0x56, 0xc8, 0x0e, 0xa7, 0xbe, 0x2e, 0xa8, 0xfe, 0x84, 0x6c, 0xa9, 0x1e, 0x47, 0x88, 0x1e, 0x71, - 0xef, 0x60, 0x4f, 0x49, 0xe8, 0x3d, 0x8d, 0x59, 0x2c, 0x97, 0xd9, 0x23, 0x46, 0x45, 0x8c, 0x96, - 0x54, 0xd8, 0x8c, 0x96, 0xe2, 0x0d, 0x8f, 0x59, 0x2c, 0x97, 0xd9, 0x43, 0x56, 0x45, 0xf0, 0x6a, - 0x8a, 0xb4, 0xe0, 0x9f, 0x02, 0x48, 0x63, 0xbd, 0x77, 0xcc, 0xc0, 0xf8, 0xa3, 0xe1, 0x89, 0x63, - 0x9f, 0x89, 0xa8, 0xe3, 0xa7, 0xd1, 0xac, 0xb4, 0xda, 0x92, 0x68, 0x0e, 0xa5, 0x55, 0xe3, 0x6b, - 0x25, 0x66, 0x4b, 0xb1, 0x5c, 0x9e, 0x95, 0xbd, 0x70, 0x3a, 0xfb, 0xc1, 0x8d, 0x89, 0xf7, 0xf7, - 0xd6, 0xd7, 0x05, 0x11, 0xab, 0xa9, 0x8f, 0xe0, 0x27, 0x11, 0xa2, 0x17, 0xbc, 0x46, 0xf3, 0x52, - 0xf3, 0xbe, 0x59, 0x28, 0x26, 0xfe, 0x63, 0xf0, 0x96, 0x4a, 0xf4, 0xe2, 0x34, 0x1a, 0x97, 0xc1, - 0xd5, 0x4a, 0x3c, 0x49, 0x0f, 0xe7, 0xc8, 0x3d, 0x0f, 0x2f, 0x14, 0x8e, 0xf4, 0xd8, 0xeb, 0x2e, - 0x5e, 0xc7, 0x9e, 0x5f, 0x15, 0x98, 0x03, 0x79, 0x31, 0x84, 0x75, 0x06, 0xfe, 0xca, 0xf5, 0x75, - 0x64, 0x86, 0xde, 0xce, 0x0c, 0x1d, 0xc8, 0x1e, 0xa5, 0x91, 0x69, 0xfc, 0x87, 0x3d, 0x6e, 0x53, - 0x48, 0x78, 0xee, 0x09, 0x54, 0x16, 0xa2, 0x45, 0x74, 0x02, 0x09, 0x61, 0x78, 0xa1, 0x7c, 0x07, - 0xf4, 0xcf, 0x7e, 0x07, 0x79, 0x0d, 0xde, 0x89, 0xca, 0x12, 0x6a, 0xb2, 0x65, 0x47, 0x38, 0xfd, - 0x2a, 0x99, 0xc1, 0x59, 0x72, 0x20, 0x5f, 0x83, 0xba, 0x8f, 0x1b, 0x0e, 0xba, 0x78, 0x07, 0x32, - 0x16, 0xd1, 0x60, 0xe7, 0xc3, 0x46, 0x6d, 0x6d, 0xfa, 0xd5, 0xea, 0x17, 0x34, 0x65, 0x0b, 0xda, - 0x14, 0x28, 0x80, 0x07, 0xbb, 0x23, 0xa6, 0x51, 0xaf, 0x85, 0xbe, 0x3e, 0x97, 0xf8, 0x88, 0x3f, - 0x97, 0xf8, 0xf7, 0xfc, 0xbd, 0x12, 0x2a, 0x35, 0x7a, 0x4a, 0xe1, 0xb5, 0xa8, 0xd4, 0x28, 0x65, - 0x06, 0xd6, 0xf6, 0x42, 0x92, 0x40, 0xc1, 0xbf, 0x64, 0x19, 0x1a, 0x04, 0x70, 0x6f, 0x03, 0x42, - 0x66, 0xa1, 0xc3, 0xda, 0xb4, 0x52, 0x5c, 0x9b, 0xce, 0x92, 0xe7, 0xdb, 0x52, 0x61, 0x91, 0x24, - 0x58, 0xe2, 0x9a, 0xb5, 0x57, 0x42, 0x0b, 0x1d, 0x51, 0xfc, 0x82, 0x2a, 0xbc, 0x86, 0x9a, 0x37, - 0x18, 0xc0, 0x3c, 0x47, 0xc4, 0x1c, 0x0c, 0x1a, 0x35, 0x92, 0xb0, 0xc9, 0xd6, 0x3c, 0x08, 0xd5, - 0xc6, 0x5b, 0x5a, 0x20, 0x7c, 0xfe, 0xd7, 0xdd, 0xa0, 0xd7, 0x59, 0x0c, 0xfa, 0x02, 0x1b, 0xc9, - 0xb7, 0xa6, 0x93, 0xad, 0xe1, 0xf4, 0x64, 0x46, 0x9c, 0x05, 0x12, 0x37, 0xf1, 0x96, 0xcb, 0x27, - 0xda, 0xfb, 0x72, 0x87, 0xa9, 0xdb, 0x81, 0xff, 0x43, 0x0f, 0xba, 0x03, 0x2a, 0xa9, 0x25, 0xf8, - 0xda, 0x13, 0x66, 0x83, 0x85, 0x30, 0xf6, 0x3c, 0x9c, 0x06, 0x1e, 0x90, 0x94, 0x6d, 0x12, 0xda, - 0x2c, 0xd7, 0x94, 0x87, 0xd0, 0x92, 0x40, 0x1e, 0xfa, 0x32, 0x06, 0xfa, 0x88, 0xce, 0x19, 0xfe, - 0x4d, 0x88, 0xf8, 0x93, 0xd6, 0x6c, 0xa4, 0x91, 0x25, 0x61, 0x29, 0x43, 0xdf, 0x5f, 0x38, 0x54, - 0xc9, 0x0b, 0xcd, 0x57, 0x92, 0x24, 0x02, 0x81, 0xc5, 0x72, 0x5e, 0x9e, 0x46, 0x7d, 0xd1, 0x6b, - 0xb7, 0xc5, 0x13, 0xf1, 0xe6, 0x78, 0xd3, 0x6e, 0xa6, 0xc2, 0xb6, 0xdb, 0x8f, 0x36, 0x1e, 0x37, - 0x54, 0xac, 0xb0, 0xac, 0x2d, 0xb3, 0x66, 0x14, 0x2a, 0x2d, 0x2a, 0xa3, 0x90, 0xa1, 0x22, 0x20, - 0xae, 0x1a, 0xcc, 0xd0, 0xeb, 0x9a, 0xf2, 0x2a, 0x8b, 0xab, 0x16, 0x0f, 0xb7, 0x44, 0x1a, 0x59, - 0x6c, 0xb5, 0x65, 0xd9, 0x93, 0x3d, 0x99, 0xe1, 0xf7, 0x79, 0xc2, 0x2c, 0x9a, 0x2a, 0x8b, 0x46, - 0xfd, 0xba, 0x9a, 0x19, 0x39, 0xca, 0x20, 0x73, 0x7d, 0x1d, 0xd9, 0x03, 0xef, 0x66, 0xbb, 0x7a, - 0x97, 0xb3, 0x4c, 0x75, 0x54, 0x6d, 0xf5, 0x75, 0x64, 0xdf, 0xa3, 0xa9, 0x21, 0x20, 0xd2, 0x22, - 0xb4, 0xd0, 0x7b, 0xdf, 0x03, 0x78, 0x16, 0x92, 0x6d, 0x27, 0x9a, 0xf5, 0x72, 0xb4, 0x99, 0xc4, - 0x94, 0x65, 0x39, 0x1d, 0x0a, 0xa7, 0x55, 0x25, 0xfe, 0xc0, 0x62, 0x1b, 0xb9, 0x82, 0x66, 0xa3, - 0xb8, 0x7c, 0x68, 0xfc, 0xf0, 0x18, 0xa4, 0x85, 0xce, 0xf6, 0x0f, 0x67, 0x2f, 0x9f, 0x0a, 0x8a, - 0x60, 0xd5, 0x35, 0x9a, 0xf2, 0x0c, 0x7a, 0x2a, 0xe0, 0x4c, 0x73, 0x79, 0x89, 0x18, 0x44, 0x2e, - 0x33, 0x34, 0x62, 0xf4, 0x40, 0xd2, 0x80, 0xc1, 0x70, 0xe9, 0x9c, 0x7d, 0x54, 0x4a, 0x52, 0x1a, - 0xd5, 0xec, 0xda, 0x1a, 0x4f, 0xa4, 0xb6, 0x51, 0x83, 0x0a, 0x3c, 0xc3, 0xac, 0x0f, 0x6a, 0x6c, - 0x4d, 0x45, 0x63, 0x6a, 0x2a, 0xc5, 0xe7, 0x0e, 0x96, 0x01, 0x66, 0xb1, 0x5c, 0xc6, 0xa8, 0x17, - 0x14, 0x4a, 0xf1, 0xef, 0x0b, 0x76, 0xd5, 0x63, 0x7a, 0x72, 0x99, 0x76, 0xf5, 0x91, 0xf1, 0xc1, - 0xb3, 0x60, 0x0e, 0xf4, 0xfe, 0x0b, 0xfa, 0xd8, 0xbb, 0x7a, 0xd7, 0x41, 0x36, 0xdc, 0x03, 0xd9, - 0xfe, 0x2e, 0xb0, 0x11, 0x06, 0xe1, 0x89, 0xd5, 0x67, 0xc7, 0xf6, 0xac, 0x39, 0xee, 0x97, 0xd0, - 0x1d, 0x6c, 0x0d, 0xb0, 0x95, 0x2c, 0x97, 0xe8, 0x92, 0x23, 0xad, 0x29, 0xdf, 0x0d, 0xe4, 0x55, - 0xc9, 0xeb, 0xa1, 0x97, 0xec, 0x07, 0x67, 0xb3, 0xc3, 0x3d, 0x95, 0x3e, 0x36, 0xce, 0xec, 0xfe, - 0xa3, 0xe3, 0xed, 0x9d, 0x61, 0x22, 0x2b, 0x10, 0xf2, 0x0a, 0x16, 0x43, 0xd9, 0x9f, 0xbf, 0x99, - 0xbb, 0x70, 0x20, 0xbb, 0xff, 0xa8, 0x31, 0x17, 0xe4, 0x99, 0x17, 0x94, 0xfc, 0xba, 0x66, 0x7e, - 0xf2, 0xee, 0x60, 0x19, 0x6b, 0x1e, 0x9c, 0x0e, 0x4d, 0x83, 0xbf, 0x17, 0xcc, 0xfb, 0x20, 0xfe, - 0x07, 0x09, 0x95, 0xa6, 0xc2, 0x71, 0xfe, 0xfc, 0xee, 0xdf, 0x4b, 0x9a, 0x32, 0x2a, 0x05, 0xa0, - 0x4c, 0xfe, 0x54, 0x6a, 0xdc, 0xb5, 0xa3, 0x31, 0xfa, 0xda, 0x8e, 0x68, 0xc4, 0x97, 0xfd, 0xb0, - 0x3d, 0xf7, 0x99, 0xc1, 0x61, 0x99, 0xb1, 0x7e, 0x43, 0x44, 0x4f, 0x9e, 0x5c, 0x69, 0x7a, 0x09, - 0x18, 0x6c, 0x6c, 0x00, 0x56, 0x66, 0x2f, 0x9e, 0xc9, 0x1e, 0xbb, 0xca, 0x61, 0xb3, 0xef, 0x0d, - 0xe6, 0x46, 0x7a, 0xe1, 0x91, 0xb8, 0xaf, 0x76, 0x73, 0x5d, 0x8d, 0x0f, 0x68, 0xe7, 0xab, 0xaf, - 0xf3, 0x65, 0x86, 0x86, 0x7d, 0x66, 0xf7, 0x3c, 0x24, 0x68, 0xa5, 0x41, 0xe3, 0xf6, 0x51, 0xa3, - 0x96, 0xae, 0xf3, 0x7c, 0xd9, 0x63, 0x57, 0xf5, 0xfd, 0xc7, 0xa1, 0x53, 0x00, 0x2a, 0xd0, 0xfe, - 0xd7, 0x35, 0x0b, 0x92, 0xf3, 0x82, 0x65, 0x6c, 0x44, 0xc1, 0x19, 0xb4, 0x97, 0xe0, 0xef, 0x05, - 0x01, 0xab, 0xea, 0x97, 0x34, 0xe5, 0xbb, 0x68, 0x7b, 0xa0, 0x20, 0x4b, 0x71, 0xb7, 0x01, 0x61, - 0x56, 0x81, 0x1b, 0x41, 0x8b, 0x7e, 0x2e, 0x09, 0x4c, 0xf4, 0xb9, 0xc4, 0xe7, 0xdb, 0x7f, 0xdd, - 0x83, 0x16, 0xb9, 0x74, 0x7c, 0x0b, 0x76, 0x50, 0xcc, 0x25, 0x7d, 0x9a, 0xf3, 0x83, 0x2d, 0x36, - 0x3e, 0xf2, 0xce, 0x5c, 0x8c, 0xd8, 0x60, 0x41, 0xdb, 0x66, 0xcd, 0xab, 0x5f, 0xd4, 0x94, 0x20, - 0x6a, 0x08, 0x14, 0x46, 0xd4, 0x91, 0x84, 0xa4, 0x2f, 0x46, 0x42, 0x87, 0x53, 0xc5, 0x72, 0x71, - 0x48, 0xd8, 0x8f, 0xca, 0x19, 0xbf, 0x0a, 0xf7, 0x77, 0x96, 0x32, 0xbc, 0x18, 0x99, 0x6b, 0x6c, - 0x1e, 0xd2, 0xd5, 0x2c, 0x31, 0xea, 0x05, 0xdd, 0x30, 0x8d, 0x5c, 0x99, 0x88, 0x0a, 0xc0, 0x8f, - 0xca, 0xd9, 0x2f, 0xf2, 0x0d, 0x78, 0xf5, 0x62, 0x29, 0xc3, 0x15, 0x66, 0xaa, 0x29, 0x88, 0xf2, - 0xca, 0x33, 0x47, 0xcd, 0x47, 0xd3, 0xd5, 0x48, 0x94, 0x2f, 0xca, 0x83, 0xf4, 0x97, 0xf5, 0xe1, - 0xd9, 0x8c, 0xbc, 0x00, 0xae, 0xfe, 0x8c, 0x93, 0x42, 0x23, 0x37, 0x9a, 0x5f, 0x5e, 0xa1, 0x3d, - 0x61, 0xa7, 0x07, 0x6d, 0x6a, 0x16, 0xcb, 0x65, 0x30, 0x29, 0x96, 0x0d, 0x8a, 0x55, 0x17, 0x4e, - 0xfb, 0xed, 0xe8, 0xc2, 0x92, 0xaf, 0xa5, 0x2e, 0x2c, 0xfd, 0x9d, 0x2e, 0x14, 0xb8, 0x31, 0x4f, - 0x90, 0x89, 0xdb, 0x54, 0x51, 0xba, 0xf0, 0xdf, 0x3a, 0xe9, 0x42, 0xe8, 0xf8, 0x16, 0xe8, 0xc2, - 0x1f, 0x73, 0x5d, 0x28, 0x39, 0x39, 0x1d, 0xb1, 0xf1, 0x81, 0xd3, 0x10, 0xd1, 0x88, 0xb2, 0xa6, - 0x54, 0x51, 0x8d, 0xb8, 0x14, 0x90, 0x87, 0x3e, 0x73, 0x7d, 0x1d, 0x7a, 0xe7, 0x05, 0xfd, 0x72, - 0x3b, 0xa5, 0x85, 0x5d, 0x41, 0x52, 0xb2, 0x16, 0xc6, 0x9e, 0xad, 0x7e, 0x28, 0x5d, 0x6d, 0x3d, - 0xba, 0xa9, 0xc9, 0x16, 0x84, 0xed, 0x83, 0xc5, 0x3e, 0xf3, 0x74, 0xe2, 0xc5, 0x64, 0x33, 0x55, - 0x95, 0x62, 0x11, 0x7e, 0x14, 0x4d, 0x27, 0x9b, 0x44, 0x76, 0xdc, 0x6c, 0x73, 0xf1, 0xaf, 0x8d, - 0x93, 0x90, 0x65, 0xb0, 0x82, 0x0f, 0x52, 0x60, 0xff, 0x0e, 0x34, 0xdb, 0x52, 0xe1, 0xb0, 0x47, - 0x75, 0x8a, 0xf9, 0x71, 0x37, 0x2a, 0x8d, 0xc6, 0x22, 0xea, 0xab, 0x54, 0xe5, 0xc2, 0x0f, 0x03, - 0x32, 0xa2, 0xa6, 0xc2, 0x54, 0xcb, 0x92, 0xbf, 0xfd, 0xe3, 0x12, 0x61, 0x93, 0xfa, 0x58, 0x4c, - 0x4d, 0x32, 0xc4, 0xc8, 0x97, 0xf8, 0xe1, 0xf5, 0x5a, 0xfb, 0xd2, 0xbc, 0xc2, 0x6d, 0x69, 0x2e, - 0x2e, 0xbd, 0x1f, 0xb3, 0x2d, 0xee, 0xc0, 0x79, 0x88, 0x2b, 0xb4, 0x72, 0xfa, 0x42, 0x9d, 0xe8, - 0x34, 0xe1, 0xc0, 0x84, 0x46, 0x65, 0x28, 0x3c, 0x2c, 0x79, 0x15, 0x9d, 0x3f, 0x12, 0x05, 0x68, - 0xfc, 0x46, 0x4f, 0x6e, 0xe4, 0x33, 0xe2, 0x13, 0x31, 0x90, 0x1d, 0xfa, 0x34, 0x7b, 0xf2, 0x5d, - 0x26, 0x2f, 0xef, 0x4d, 0xec, 0x3b, 0x44, 0x57, 0xb2, 0xff, 0xc6, 0x83, 0x16, 0xbb, 0xf5, 0x79, - 0x0b, 0x44, 0x62, 0xbb, 0x65, 0x79, 0xb0, 0xc8, 0x4d, 0x24, 0x60, 0x0b, 0xe0, 0xb0, 0x3e, 0x00, - 0xd4, 0xec, 0xec, 0xaf, 0x6a, 0x4a, 0x23, 0xfa, 0x51, 0x60, 0x12, 0x54, 0xe5, 0x15, 0xc5, 0xd3, - 0x4f, 0x6f, 0x1f, 0xb5, 0x0b, 0xc2, 0x6e, 0x34, 0xdb, 0xd2, 0xb3, 0xe3, 0x1b, 0x58, 0xc6, 0x71, - 0x1e, 0x93, 0xe3, 0x0c, 0xde, 0x4c, 0xaa, 0x2f, 0xb3, 0x64, 0x76, 0x41, 0xf8, 0x61, 0x94, 0xa6, - 0x93, 0xa1, 0x18, 0x0b, 0x41, 0x03, 0x3f, 0xcc, 0xbb, 0xc1, 0x52, 0xe1, 0x6e, 0xd0, 0xff, 0x17, - 0xa5, 0x68, 0x7e, 0x9d, 0xda, 0xd8, 0xda, 0x44, 0xc5, 0x3b, 0x94, 0xda, 0x65, 0xe6, 0xf0, 0xb3, - 0xdb, 0x6e, 0x9f, 0xab, 0xed, 0x66, 0x87, 0x75, 0xa2, 0x09, 0x7f, 0xd6, 0xc1, 0x84, 0xfb, 0x5c, - 0x4d, 0x38, 0xef, 0x41, 0xb0, 0xe4, 0xdb, 0x6d, 0x96, 0xbc, 0x5a, 0x53, 0x56, 0x09, 0x8c, 0xbf, - 0x84, 0x9b, 0x6b, 0xc8, 0xf6, 0x3c, 0x3e, 0x78, 0x16, 0xfa, 0xcb, 0xf5, 0x75, 0x24, 0xd3, 0xaf, - 0x82, 0x40, 0xd8, 0x0e, 0x12, 0xbf, 0xee, 0x16, 0x7c, 0xbf, 0x84, 0xca, 0xc2, 0x54, 0x57, 0xd1, - 0x57, 0xca, 0x6b, 0x6c, 0x01, 0x5f, 0x1d, 0x67, 0x8d, 0xeb, 0x3e, 0xb8, 0x5a, 0x5e, 0xab, 0x29, - 0x8f, 0x04, 0x78, 0x57, 0xf2, 0x52, 0x91, 0x45, 0xa9, 0xeb, 0xa0, 0x69, 0x03, 0x08, 0x7f, 0x12, - 0xbd, 0x1d, 0xe4, 0x4d, 0xbc, 0x4f, 0x9a, 0x5a, 0x73, 0xca, 0xb7, 0xce, 0xd5, 0x29, 0x4d, 0x49, - 0xa0, 0x58, 0xc0, 0x85, 0xc3, 0xe4, 0x25, 0xe3, 0x97, 0xf6, 0x8c, 0x0f, 0x1e, 0xb1, 0x0f, 0x4a, - 0x74, 0x6c, 0xce, 0xb3, 0xca, 0x02, 0x77, 0x08, 0x26, 0xfa, 0x73, 0x89, 0x8f, 0xd8, 0xff, 0xe7, - 0x1e, 0xb4, 0xc0, 0xf6, 0xc1, 0x5b, 0xa0, 0x94, 0x76, 0x5a, 0xec, 0xf4, 0x03, 0x93, 0xcc, 0x1f, - 0x31, 0xd4, 0xc4, 0x7b, 0x1d, 0x54, 0x93, 0x3b, 0x6d, 0x04, 0x9b, 0x4a, 0xd5, 0xd4, 0xef, 0x6b, - 0xca, 0x4b, 0xe8, 0x7b, 0x01, 0x37, 0xac, 0xbf, 0xb4, 0x7e, 0x7a, 0x06, 0xdd, 0xe5, 0x30, 0x5a, - 0xbc, 0x8c, 0xba, 0xca, 0x4a, 0xee, 0xae, 0xb2, 0xe0, 0xfc, 0xea, 0xff, 0xa7, 0x99, 0x68, 0x0e, - 0x39, 0xda, 0xda, 0x1c, 0x8f, 0xb4, 0x36, 0xab, 0xeb, 0x9b, 0x43, 0x4d, 0xf8, 0xc5, 0xfc, 0xdb, - 0x9d, 0x27, 0x35, 0xe5, 0x71, 0xf3, 0x76, 0x67, 0x45, 0x4d, 0xed, 0x56, 0xfd, 0xfa, 0x15, 0xfd, - 0xd0, 0x25, 0x1e, 0x96, 0x3a, 0x33, 0xdc, 0xcb, 0x83, 0xd7, 0x8d, 0x1f, 0xb8, 0x9c, 0x3d, 0xba, - 0x8f, 0x07, 0x2d, 0x35, 0x2f, 0x81, 0x42, 0x66, 0x90, 0x7e, 0x98, 0xb1, 0x0d, 0x9a, 0x52, 0x67, - 0x06, 0xe9, 0x7f, 0x82, 0x77, 0x02, 0x1e, 0xfc, 0xcb, 0xf4, 0x73, 0x6f, 0x6d, 0xdb, 0xb8, 0xae, - 0xda, 0xb7, 0x7a, 0xa5, 0xbc, 0x6a, 0xe5, 0xda, 0xca, 0xd5, 0x2b, 0x57, 0x3f, 0xbe, 0x72, 0x8d, - 0xf1, 0xdf, 0x9a, 0x95, 0x8f, 0xac, 0x48, 0xef, 0x7a, 0x3c, 0x65, 0xfc, 0xbd, 0x76, 0xe5, 0x23, - 0xcb, 0xcd, 0xe0, 0xfc, 0xaf, 0xa3, 0xb2, 0x16, 0x82, 0x07, 0x77, 0x84, 0x06, 0xf7, 0x49, 0x56, - 0x28, 0x37, 0xe4, 0x46, 0x3a, 0x32, 0x23, 0x57, 0xe1, 0xd2, 0x65, 0xd9, 0xc6, 0xd6, 0x46, 0x55, - 0x69, 0xa8, 0xdf, 0xaa, 0x26, 0xdb, 0xd4, 0xe4, 0xcd, 0xd1, 0x6e, 0xe3, 0x77, 0x6d, 0x3c, 0x96, - 0x4e, 0xc6, 0x9b, 0x9b, 0x49, 0xc1, 0xba, 0x74, 0x38, 0x42, 0xcb, 0xb7, 0x86, 0x77, 0xaa, 0x46, - 0x27, 0x46, 0xf1, 0xae, 0xd6, 0x46, 0xb5, 0x59, 0x4d, 0xe7, 0x2e, 0x76, 0x2d, 0x0f, 0xf2, 0xbe, - 0xf1, 0x1a, 0x54, 0xf6, 0x72, 0x73, 0xa8, 0xc9, 0xdc, 0xe2, 0xc1, 0x0a, 0x82, 0x17, 0xca, 0x33, - 0x41, 0x6c, 0xf4, 0x9e, 0x83, 0x41, 0x5e, 0x68, 0x2c, 0x20, 0x8c, 0xbf, 0xeb, 0x0c, 0x03, 0x52, - 0x2a, 0x2c, 0x20, 0x58, 0xa1, 0x5c, 0x0e, 0xad, 0xa8, 0x4b, 0x2d, 0x2f, 0xc7, 0xeb, 0x51, 0x79, - 0x44, 0x7d, 0x39, 0xd4, 0xda, 0x0c, 0x6b, 0x26, 0x7a, 0x65, 0x43, 0x32, 0xb8, 0x59, 0x2a, 0xe4, - 0x39, 0xd0, 0x01, 0xec, 0x1e, 0xf4, 0xf6, 0xd1, 0xa0, 0xa5, 0x1a, 0x57, 0xf3, 0x84, 0xb0, 0xf0, - 0xec, 0x86, 0xf4, 0xc0, 0x12, 0xc2, 0xce, 0xa3, 0x47, 0x70, 0x3d, 0x24, 0x12, 0xf8, 0xe0, 0x59, - 0xaa, 0x84, 0x58, 0x2a, 0xd8, 0xc7, 0xcc, 0x5d, 0x6b, 0x99, 0x79, 0x25, 0xc3, 0x13, 0x24, 0xcf, - 0xa1, 0x01, 0x6c, 0x59, 0x56, 0x64, 0x73, 0x53, 0xfb, 0x98, 0x99, 0xed, 0x75, 0xa6, 0xd0, 0x90, - 0x65, 0x7b, 0xa5, 0x0d, 0x79, 0x0e, 0x64, 0x33, 0xd5, 0x6b, 0x35, 0x9a, 0x49, 0xfa, 0x20, 0x2e, - 0xe4, 0xc8, 0xbc, 0xe0, 0x32, 0x4b, 0xf3, 0x72, 0xd1, 0x98, 0x15, 0xf8, 0x29, 0x84, 0xa0, 0x1b, - 0xd2, 0x78, 0x96, 0xe0, 0x7f, 0x6e, 0x16, 0xcb, 0xe5, 0xf0, 0x51, 0xe6, 0x7f, 0x6e, 0xd6, 0xe0, - 0x34, 0xcc, 0x94, 0xf0, 0xa4, 0xe5, 0xbb, 0x9a, 0xf2, 0x62, 0x80, 0x17, 0xca, 0xf5, 0x34, 0xb3, - 0x04, 0xa1, 0x11, 0x0d, 0xf4, 0x18, 0x8d, 0xa5, 0x1f, 0x91, 0xab, 0x1a, 0xe3, 0xf1, 0xe6, 0xaa, - 0x54, 0x3a, 0x19, 0x8d, 0x35, 0x55, 0x45, 0x5a, 0xe1, 0x9a, 0xbe, 0xaa, 0x25, 0x94, 0xa0, 0x65, - 0xa9, 0xdc, 0xc5, 0x2e, 0xfd, 0xe4, 0x70, 0xee, 0x74, 0x3b, 0xb4, 0x5a, 0x1e, 0xe4, 0x9d, 0xe2, - 0x20, 0x9a, 0x6d, 0xfc, 0x4d, 0xe6, 0x8a, 0x3c, 0x65, 0x99, 0x4d, 0x9c, 0x68, 0x89, 0xa3, 0xbb, - 0xb5, 0x46, 0xae, 0xa0, 0xfc, 0x45, 0x1e, 0xcb, 0x19, 0xd6, 0xa3, 0x7d, 0x94, 0x6e, 0x90, 0xad, - 0x80, 0xf8, 0x7b, 0xc6, 0xe2, 0xa4, 0x49, 0x7d, 0x95, 0x3c, 0x8b, 0x71, 0x48, 0x67, 0x49, 0xcc, - 0x44, 0xd0, 0x80, 0x00, 0xb7, 0x71, 0x80, 0x96, 0x17, 0x52, 0x4e, 0xec, 0xef, 0xca, 0x1e, 0xd9, - 0x9f, 0x6d, 0x3f, 0x9f, 0x3d, 0x75, 0x7a, 0xe2, 0xe3, 0xee, 0xf1, 0xf3, 0x1d, 0xfa, 0xfe, 0xe3, - 0x41, 0x80, 0xc1, 0x71, 0x54, 0x9a, 0x24, 0x6f, 0xe2, 0xe7, 0x90, 0xae, 0x17, 0xda, 0x3c, 0x15, - 0x5a, 0x5b, 0x1a, 0x55, 0x78, 0xfb, 0x5e, 0xf3, 0x2d, 0x4d, 0x79, 0x22, 0x00, 0xe0, 0xf2, 0xaa, - 0xf1, 0x03, 0x94, 0xb9, 0x32, 0x43, 0xc3, 0x06, 0x12, 0xed, 0xa3, 0xa6, 0x46, 0x81, 0x10, 0xfc, - 0xb0, 0x6f, 0xe9, 0xde, 0xa3, 0xbf, 0xff, 0x99, 0xc1, 0xc5, 0xd0, 0x90, 0x45, 0x8e, 0xc9, 0x57, - 0x62, 0xf2, 0x43, 0x10, 0x50, 0x36, 0x37, 0x70, 0x3a, 0xd7, 0xb3, 0x17, 0xa2, 0x3f, 0x10, 0x45, - 0x94, 0xeb, 0xeb, 0xa0, 0x3a, 0x00, 0x1e, 0xe7, 0xfc, 0x91, 0x07, 0xa6, 0x95, 0x79, 0x72, 0x73, - 0x11, 0xa6, 0x9e, 0xdc, 0x5c, 0x50, 0xbd, 0x82, 0xa0, 0x7a, 0xcc, 0x3a, 0x22, 0x8b, 0xfe, 0x3c, - 0x59, 0x84, 0x45, 0x9f, 0x55, 0xce, 0x64, 0x2e, 0x67, 0x25, 0x93, 0x9d, 0x85, 0x73, 0xf9, 0xf2, - 0x0a, 0x2c, 0x57, 0x6a, 0x7e, 0x93, 0x30, 0xc6, 0x92, 0x7c, 0xc6, 0x98, 0x6e, 0x30, 0x46, 0xfe, - 0x54, 0xaf, 0x62, 0x53, 0x3d, 0x63, 0xb2, 0xa9, 0x66, 0x33, 0xb8, 0x9a, 0xcd, 0x60, 0xd9, 0xa4, - 0x33, 0x48, 0xe7, 0xc0, 0x5f, 0x87, 0x90, 0xd9, 0x0f, 0xbe, 0x17, 0xcd, 0x6c, 0x0b, 0x35, 0x47, - 0x23, 0x44, 0x2d, 0x00, 0x15, 0xcd, 0x82, 0x02, 0x0e, 0xf1, 0xab, 0xd1, 0x2c, 0xa1, 0x6f, 0x63, - 0x35, 0xd3, 0x12, 0x85, 0xdc, 0xbe, 0xa5, 0x41, 0xe3, 0x4f, 0x52, 0x12, 0x7a, 0x95, 0x86, 0x6f, - 0x31, 0xfe, 0xf4, 0x67, 0x4b, 0xd0, 0xbd, 0x24, 0xed, 0xa3, 0x9a, 0x37, 0xfd, 0x6c, 0xa5, 0x7c, - 0xfb, 0x9a, 0xb2, 0xb7, 0x24, 0x9b, 0x2d, 0x7b, 0xf9, 0x37, 0x6c, 0xcb, 0xf8, 0x62, 0x9c, 0x9b, - 0xb4, 0x1d, 0xc0, 0x7f, 0x34, 0x68, 0xbe, 0x63, 0x84, 0x22, 0x26, 0x3b, 0x35, 0xcb, 0xc9, 0x35, - 0x39, 0x03, 0x97, 0xb1, 0x28, 0x65, 0xa0, 0x86, 0x7e, 0x5d, 0x53, 0xaa, 0x49, 0x9e, 0x32, 0x29, - 0xc8, 0xa1, 0xf0, 0xb3, 0xc2, 0x2e, 0x42, 0x88, 0xa2, 0x61, 0xee, 0x22, 0xe6, 0x59, 0xbb, 0x61, - 0x86, 0xc4, 0xdc, 0x47, 0x47, 0x34, 0x25, 0x84, 0x76, 0x04, 0x0a, 0xb2, 0x81, 0x3c, 0x8f, 0xa6, - 0x04, 0x1d, 0xee, 0x15, 0xbb, 0xfb, 0x5c, 0x62, 0x13, 0xfa, 0xb9, 0xc4, 0xe8, 0xfe, 0xb9, 0xc4, - 0xb1, 0x17, 0xcf, 0x99, 0x74, 0x09, 0x2d, 0x72, 0xf9, 0xc2, 0x6f, 0x7f, 0xfd, 0x5a, 0x6d, 0xd8, - 0x1d, 0xb4, 0x35, 0x50, 0x78, 0x44, 0xf2, 0xfd, 0x8e, 0x48, 0x8b, 0x7b, 0x69, 0xfb, 0x7a, 0xf2, - 0x7f, 0x2b, 0x61, 0xde, 0xd9, 0xdf, 0x38, 0x81, 0xba, 0xa5, 0x6b, 0xc3, 0xaf, 0x99, 0x20, 0x99, - 0x0b, 0x2b, 0xbb, 0x20, 0x15, 0x9a, 0x7e, 0x79, 0x1e, 0x4b, 0xc3, 0xff, 0x45, 0x05, 0xe9, 0xef, - 0x24, 0xe6, 0x38, 0xff, 0x75, 0x10, 0xa4, 0xa0, 0xa6, 0x3c, 0x8f, 0x36, 0x07, 0x0a, 0x8f, 0x48, - 0x5e, 0xe8, 0x88, 0xb4, 0x9b, 0x23, 0xdf, 0x9f, 0x95, 0xa0, 0x7b, 0xe1, 0x91, 0xcc, 0xef, 0x44, - 0xe8, 0xab, 0x14, 0xa1, 0xe7, 0x51, 0x39, 0x5b, 0x8b, 0x71, 0x31, 0xa2, 0x09, 0xb5, 0x2d, 0x15, - 0x72, 0x85, 0x45, 0x60, 0xc4, 0xb7, 0x61, 0x16, 0xb8, 0x29, 0xdb, 0x9e, 0x53, 0x13, 0xc7, 0xcf, - 0x38, 0x8b, 0x4c, 0xa1, 0xe9, 0x36, 0x6c, 0x8f, 0xd1, 0xf2, 0xcb, 0x89, 0x8c, 0xcb, 0x17, 0x6e, - 0xa1, 0xc8, 0x14, 0x1c, 0x91, 0xbc, 0xd0, 0x11, 0x69, 0x37, 0x91, 0xf9, 0x93, 0x12, 0x21, 0xfb, - 0xcd, 0xef, 0x04, 0xe6, 0x9b, 0x2b, 0x30, 0x8d, 0x9a, 0xb2, 0x03, 0xfd, 0x30, 0x50, 0x60, 0xb2, - 0xe5, 0x79, 0xdc, 0xb5, 0xea, 0x0b, 0x8a, 0xcb, 0xa0, 0x07, 0x2d, 0x74, 0xec, 0xff, 0x16, 0x1c, - 0x34, 0x06, 0x2d, 0xb7, 0x1f, 0xf7, 0x39, 0x46, 0xf7, 0x34, 0x87, 0x68, 0x0d, 0x40, 0x24, 0x78, - 0xb4, 0x39, 0xe6, 0xb2, 0x28, 0x80, 0xa3, 0xe0, 0x9f, 0x56, 0x8c, 0xf8, 0xed, 0xf1, 0x10, 0x5f, - 0x81, 0x75, 0xaf, 0xa6, 0xd5, 0x64, 0x2c, 0xd4, 0xbc, 0x25, 0x1e, 0x51, 0xb7, 0x92, 0x67, 0xdb, - 0x4c, 0x00, 0x7f, 0x88, 0x66, 0xc5, 0xe2, 0x11, 0xd5, 0xfa, 0x3e, 0xfd, 0x4b, 0x09, 0xa1, 0xd8, - 0x1f, 0x5e, 0x63, 0xbb, 0x43, 0xab, 0x70, 0x74, 0x3c, 0xce, 0x0c, 0x0f, 0x0b, 0xbc, 0x44, 0x03, - 0xfb, 0x16, 0x1c, 0x39, 0x23, 0x44, 0xee, 0x93, 0x4f, 0x32, 0x43, 0x5d, 0xd9, 0xa3, 0xd7, 0xc7, - 0x3b, 0xfa, 0xb2, 0xfd, 0x9f, 0x30, 0x9e, 0x12, 0x47, 0xe1, 0xff, 0xd3, 0x69, 0xe4, 0x8e, 0xd0, - 0xa9, 0xaf, 0xdb, 0xe3, 0x8d, 0xc8, 0x1a, 0xc1, 0x73, 0x92, 0x85, 0x12, 0x24, 0xbc, 0x34, 0xaf, - 0x31, 0x94, 0x52, 0xd7, 0xae, 0xc9, 0x8d, 0x1e, 0xcd, 0x9d, 0x32, 0x26, 0x06, 0x88, 0x00, 0xec, - 0x64, 0xec, 0x33, 0xe7, 0xbc, 0xa2, 0x36, 0xee, 0x10, 0x5f, 0x93, 0x96, 0x3a, 0x67, 0x60, 0xf9, - 0x8e, 0xda, 0x28, 0x3c, 0xe9, 0xdb, 0x2e, 0x43, 0xe6, 0xaa, 0xfc, 0xd6, 0xf2, 0xfd, 0xd4, 0xb5, - 0xd9, 0x1a, 0xab, 0x17, 0x2e, 0x4f, 0xe1, 0x42, 0x28, 0x78, 0xc7, 0x2b, 0x96, 0xae, 0xb8, 0x51, - 0x29, 0x48, 0x7f, 0x97, 0xc9, 0x74, 0xe3, 0xea, 0x4e, 0x09, 0xcd, 0xdc, 0x1c, 0x4a, 0x80, 0x23, - 0x2d, 0x7e, 0x8a, 0xdf, 0x4c, 0x4b, 0xce, 0x0f, 0x00, 0x39, 0x28, 0x78, 0x3b, 0x53, 0x0f, 0x6a, - 0xda, 0xc8, 0xfb, 0x04, 0x9a, 0x25, 0x14, 0x4f, 0xe9, 0x7d, 0xdf, 0x9f, 0x4c, 0x03, 0x4f, 0x9c, - 0x50, 0x3a, 0xbc, 0x13, 0xa2, 0xc9, 0x6f, 0x55, 0xd3, 0xe9, 0x68, 0x8c, 0x9b, 0xb7, 0x10, 0x9a, - 0x49, 0x3c, 0x25, 0x84, 0xc8, 0x21, 0x24, 0xe3, 0x95, 0x59, 0x2a, 0x3f, 0x02, 0x6f, 0x1d, 0xe0, - 0xf0, 0x8b, 0x9e, 0x2c, 0x36, 0x46, 0x5f, 0xab, 0x6a, 0x8c, 0xbe, 0xb6, 0x23, 0xa5, 0xa6, 0x97, - 0x57, 0xfa, 0x72, 0xef, 0x0f, 0xe8, 0x5d, 0x07, 0x33, 0x23, 0x9d, 0x20, 0x7e, 0x8d, 0xd1, 0xd7, - 0x82, 0x66, 0x7b, 0xfc, 0x23, 0x34, 0x83, 0xfc, 0x60, 0x71, 0x7a, 0x6b, 0xd6, 0x6b, 0x4a, 0x6d, - 0x80, 0x95, 0xc9, 0x8f, 0x8b, 0xdd, 0xd7, 0xd7, 0x2d, 0x63, 0x37, 0x87, 0x55, 0xf0, 0x07, 0x79, - 0x67, 0xe0, 0xfc, 0x0d, 0xd6, 0x05, 0xfe, 0xa9, 0x84, 0x10, 0x68, 0x63, 0x62, 0x6b, 0xe0, 0xa5, - 0xff, 0x9b, 0x92, 0xa6, 0xfc, 0x8b, 0x80, 0x50, 0x2e, 0x27, 0xcc, 0xbf, 0x61, 0x32, 0x27, 0x3a, - 0x0f, 0xe6, 0xc6, 0x06, 0x0c, 0x2e, 0x21, 0x3e, 0x3d, 0xfa, 0x07, 0xc7, 0x78, 0x14, 0x80, 0xcc, - 0xd0, 0xc1, 0xcc, 0xe8, 0x29, 0x38, 0xfc, 0xa3, 0xd7, 0x24, 0x5d, 0xed, 0xd9, 0xfe, 0x2e, 0x00, - 0x5b, 0x96, 0x37, 0x1a, 0x5f, 0x34, 0xb1, 0x83, 0xbd, 0x92, 0xdf, 0xb1, 0x33, 0x9e, 0x4a, 0xef, - 0x68, 0x8e, 0xa6, 0xd2, 0xcb, 0x83, 0xc2, 0xd7, 0xd9, 0xab, 0x98, 0x82, 0xd3, 0xc1, 0xe2, 0x05, - 0xf2, 0x81, 0xe9, 0x7b, 0x3b, 0xf5, 0x81, 0xeb, 0xf4, 0x76, 0x7d, 0x94, 0xfa, 0x9b, 0x38, 0xb4, - 0xfe, 0x82, 0x4a, 0x62, 0x8d, 0x18, 0x9a, 0xc2, 0x90, 0x74, 0x08, 0xbd, 0x42, 0xcb, 0xe4, 0x72, - 0x9a, 0x77, 0x6b, 0x7f, 0x8f, 0xfe, 0xf6, 0x49, 0x1e, 0x8d, 0x02, 0x3f, 0x86, 0xca, 0xd4, 0x64, - 0x32, 0x9e, 0xdc, 0x9c, 0x6a, 0x12, 0x63, 0x75, 0xf3, 0x42, 0xb9, 0xdc, 0xa2, 0x56, 0x78, 0x39, - 0x5e, 0x8b, 0x66, 0x26, 0x01, 0xd1, 0xfa, 0x88, 0x78, 0x4b, 0x61, 0x96, 0xca, 0x65, 0x80, 0x6b, - 0x7d, 0x5d, 0xd0, 0x2c, 0xe4, 0xfe, 0xea, 0xa5, 0x53, 0xf5, 0x57, 0xb7, 0xf8, 0xe8, 0xd7, 0xa2, - 0x99, 0x5b, 0x09, 0xc3, 0xc4, 0x5e, 0x8e, 0xe3, 0x7b, 0x6d, 0x7c, 0x2f, 0xb2, 0x6c, 0x45, 0x1e, - 0xcb, 0x72, 0x56, 0xf3, 0x9f, 0x2b, 0x41, 0xf7, 0x18, 0x73, 0x10, 0x7d, 0x8d, 0xf9, 0xfa, 0x7e, - 0x3b, 0x6e, 0x3a, 0xea, 0x7e, 0x23, 0xa4, 0x29, 0x8a, 0xca, 0x42, 0xcd, 0xcd, 0x84, 0x54, 0x54, - 0xff, 0x6f, 0xd6, 0x94, 0xe7, 0x02, 0xbc, 0x50, 0x7e, 0x1a, 0xd8, 0x42, 0x14, 0x0b, 0x0b, 0x52, - 0xcc, 0x7b, 0x9b, 0x50, 0xbf, 0xe3, 0xe6, 0x68, 0x37, 0xf7, 0x1d, 0x23, 0x6f, 0xd7, 0x82, 0xbc, - 0x27, 0x7c, 0x54, 0xa2, 0x04, 0x13, 0xce, 0x26, 0x6c, 0x4f, 0x37, 0xf9, 0xa4, 0xd5, 0xfc, 0x50, - 0x53, 0xbe, 0x1f, 0x30, 0x1b, 0xc8, 0x9b, 0xc7, 0xcf, 0xbd, 0x49, 0x47, 0x21, 0x7c, 0xd0, 0x30, - 0x32, 0xc2, 0x70, 0xb2, 0x47, 0x2e, 0xe5, 0x46, 0x3a, 0x96, 0xd9, 0x31, 0x36, 0xa3, 0x91, 0x81, - 0xaf, 0x79, 0xd0, 0xec, 0xf9, 0xab, 0x11, 0x56, 0xaf, 0x13, 0xa3, 0x7c, 0xb3, 0x25, 0x75, 0x83, - 0x45, 0x52, 0xa7, 0xf6, 0x80, 0xc2, 0x22, 0xac, 0xeb, 0x11, 0x49, 0x1c, 0xcb, 0x42, 0x92, 0xc4, - 0x1b, 0xe1, 0x45, 0x1c, 0xbb, 0x18, 0x61, 0xbf, 0xf1, 0x62, 0x84, 0x78, 0x9a, 0x4c, 0x90, 0x88, - 0x92, 0xa0, 0x50, 0xe2, 0xff, 0xdb, 0xe9, 0x68, 0xc1, 0x06, 0x35, 0xcd, 0xe6, 0xc0, 0xe8, 0x33, - 0xf5, 0x8d, 0x92, 0xd6, 0x1d, 0xf0, 0x48, 0x9b, 0x1b, 0x3e, 0x87, 0xc3, 0x3d, 0x46, 0x48, 0x7a, - 0xb8, 0xc7, 0xc0, 0x65, 0x4c, 0x5f, 0x21, 0xc0, 0x2b, 0x66, 0x22, 0x26, 0xe6, 0xe1, 0x1e, 0x83, - 0x32, 0x8c, 0xeb, 0xec, 0x94, 0x1a, 0x4a, 0x86, 0x77, 0x1a, 0xbb, 0x41, 0x35, 0xc6, 0x32, 0xd8, - 0xfe, 0x81, 0xa6, 0xec, 0x0e, 0x58, 0x6b, 0xe4, 0x9d, 0xd9, 0x0b, 0xa7, 0x73, 0x57, 0xde, 0xce, - 0xf6, 0xf4, 0xe7, 0x3e, 0xfb, 0x29, 0x88, 0xc3, 0xcd, 0xd1, 0xfd, 0x30, 0x6a, 0xbd, 0xa7, 0x3b, - 0x7b, 0xec, 0xaa, 0x3e, 0x78, 0x1d, 0xde, 0x41, 0xd4, 0x37, 0x54, 0xc1, 0x1f, 0x7a, 0xcf, 0xc1, - 0x2a, 0x31, 0x91, 0x4a, 0x95, 0xf9, 0xb0, 0x85, 0xec, 0x06, 0xc7, 0x6f, 0xbc, 0x3f, 0x7e, 0xba, - 0x5b, 0xec, 0xf8, 0xe6, 0x68, 0x57, 0xd0, 0xfa, 0x61, 0xdc, 0x2d, 0x91, 0x84, 0x3e, 0x6d, 0x2a, - 0xe5, 0xbc, 0x85, 0x36, 0xce, 0xab, 0x8f, 0xa5, 0x1f, 0x91, 0x81, 0xf5, 0xbe, 0xa7, 0x29, 0xdb, - 0x03, 0x00, 0x2e, 0x6f, 0x86, 0x78, 0x7f, 0xd9, 0x0f, 0x4e, 0x67, 0x46, 0xae, 0xde, 0x1c, 0xed, - 0x23, 0xa5, 0x37, 0x47, 0xfb, 0x56, 0x65, 0x86, 0x86, 0x95, 0x26, 0x35, 0x96, 0xd6, 0x47, 0xdf, - 0xd2, 0x87, 0x86, 0x6e, 0x8e, 0x76, 0xaf, 0x66, 0x25, 0x90, 0xd0, 0x86, 0xaf, 0x11, 0x48, 0xf2, - 0xfa, 0x83, 0x34, 0x6c, 0x20, 0xf4, 0x8a, 0x37, 0xa0, 0x52, 0x12, 0x12, 0x93, 0xdc, 0x8b, 0x97, - 0xd4, 0xac, 0xd6, 0x94, 0x95, 0x01, 0x28, 0x91, 0x1f, 0x84, 0x5d, 0xd5, 0xf8, 0xcf, 0xaf, 0xe9, - 0xe7, 0x0f, 0x64, 0xc6, 0x0c, 0xd5, 0xc1, 0xbb, 0xe2, 0x7a, 0x72, 0x55, 0x10, 0xa0, 0xf1, 0x0f, - 0x51, 0x59, 0x22, 0xd4, 0xa4, 0x6e, 0x8d, 0xbe, 0x06, 0x37, 0xe4, 0xa5, 0x90, 0xb8, 0x8e, 0x17, - 0xca, 0x72, 0xf6, 0x40, 0x97, 0xa1, 0xff, 0x48, 0xa7, 0x10, 0x88, 0xee, 0xe6, 0x68, 0x77, 0xb6, - 0xbf, 0x5d, 0x3f, 0x73, 0xfe, 0xd1, 0x55, 0xab, 0xec, 0x5d, 0xcb, 0xab, 0x82, 0xbc, 0x75, 0xb5, - 0xb1, 0x8d, 0x42, 0x6b, 0x03, 0x6e, 0x12, 0xc2, 0xe3, 0xe2, 0x83, 0x76, 0xed, 0xeb, 0xa0, 0x33, - 0x06, 0x01, 0x79, 0xff, 0x95, 0x87, 0x3c, 0xd2, 0xcd, 0x6b, 0xf8, 0xcd, 0xd6, 0x6f, 0x2f, 0x58, - 0xf4, 0x9b, 0x2d, 0xc1, 0x5d, 0x3e, 0x39, 0x5c, 0xe2, 0x10, 0x5a, 0x34, 0x5d, 0xb7, 0x84, 0xee, - 0x76, 0x6a, 0x67, 0xac, 0xea, 0x81, 0x89, 0x20, 0xb1, 0x0b, 0xe5, 0x08, 0xaf, 0xc0, 0x11, 0x34, - 0x97, 0x04, 0xfb, 0x4d, 0x3c, 0xfc, 0xe2, 0xe9, 0x50, 0x33, 0x44, 0x74, 0x0d, 0xc2, 0x0f, 0x5c, - 0x59, 0x38, 0xcb, 0x87, 0x61, 0x96, 0x8c, 0xef, 0xd1, 0xe1, 0xfc, 0xa9, 0x84, 0xca, 0x58, 0x11, - 0x9e, 0x8f, 0xa6, 0x1b, 0xab, 0x59, 0xaa, 0x77, 0x4b, 0x82, 0xf4, 0x17, 0x49, 0x8a, 0x97, 0xa0, - 0x4b, 0x23, 0x4f, 0x34, 0x81, 0x31, 0x2a, 0x89, 0x26, 0xda, 0xd6, 0xd2, 0xab, 0x67, 0xf2, 0xb7, - 0x31, 0x50, 0x03, 0x5a, 0x78, 0x74, 0xc0, 0x7f, 0x1b, 0x03, 0x35, 0xa5, 0x75, 0x36, 0x93, 0x9a, - 0xf9, 0x3c, 0xc1, 0x15, 0x7d, 0x6c, 0x40, 0xf3, 0x57, 0x3d, 0x89, 0x66, 0x92, 0x9d, 0xbe, 0x92, - 0x54, 0x43, 0xf4, 0x2a, 0x79, 0x91, 0x13, 0x16, 0xb5, 0x0c, 0x28, 0x68, 0xc2, 0xfb, 0x1f, 0x41, - 0xb3, 0x2d, 0x75, 0x42, 0x42, 0xbf, 0xd9, 0x6e, 0x09, 0xfd, 0xfc, 0xbf, 0x9a, 0x4e, 0xfc, 0x58, - 0x45, 0xcb, 0x5d, 0x1f, 0x49, 0xfd, 0xce, 0x78, 0xfc, 0xce, 0x78, 0xdc, 0x4e, 0xc6, 0xe3, 0xbb, - 0x36, 0xe3, 0x41, 0x9c, 0x5e, 0x4c, 0xe3, 0xb1, 0xc2, 0xd1, 0x78, 0x88, 0xdd, 0x51, 0x00, 0xb2, - 0xc6, 0x17, 0xec, 0x06, 0x8d, 0xdf, 0x31, 0x89, 0x8c, 0xc8, 0x8b, 0x1c, 0xcd, 0x47, 0x7d, 0x1d, - 0x35, 0x20, 0x9f, 0x7b, 0xd0, 0x7d, 0xae, 0x3d, 0x7c, 0xb3, 0xed, 0xc8, 0x77, 0x2d, 0x76, 0xe4, - 0xe1, 0x02, 0x76, 0x44, 0xa4, 0x4a, 0x31, 0xe6, 0xa4, 0x4f, 0x22, 0x79, 0x98, 0xdd, 0x9a, 0x7f, - 0x65, 0x56, 0xe5, 0x11, 0x8b, 0x55, 0xb9, 0xcf, 0x49, 0x1f, 0xd7, 0xd7, 0xa5, 0x98, 0xf6, 0xa0, - 0x83, 0xdb, 0x8a, 0xe6, 0xe4, 0x55, 0xb8, 0x9a, 0x98, 0x65, 0xa8, 0xa4, 0x45, 0xe5, 0xaf, 0xf2, - 0x6d, 0x5e, 0xa4, 0x9b, 0x55, 0xa3, 0x53, 0x03, 0xc2, 0xff, 0x03, 0x54, 0x62, 0xfc, 0xc2, 0x8b, - 0x10, 0x22, 0x7a, 0x6d, 0x47, 0xda, 0x71, 0x4f, 0x7f, 0x0f, 0x2a, 0x83, 0xea, 0x68, 0xfe, 0xa6, - 0x1e, 0x7b, 0xd1, 0x4c, 0xfe, 0xba, 0x88, 0xda, 0xb0, 0x19, 0x8d, 0xbb, 0x6a, 0xa2, 0xaf, 0xd5, - 0x47, 0xfc, 0xed, 0xd3, 0xd0, 0xfc, 0x0d, 0x6a, 0xda, 0x18, 0x76, 0x0a, 0x9e, 0xa3, 0x7c, 0xb3, - 0x4c, 0xc0, 0xf7, 0xc0, 0x4c, 0x0b, 0x26, 0x60, 0xb2, 0xb9, 0x04, 0x9f, 0x47, 0xde, 0x4a, 0x9e, - 0x0d, 0x33, 0x96, 0x62, 0xef, 0xe1, 0x58, 0x05, 0xcb, 0x56, 0xe0, 0x42, 0x3e, 0x79, 0x69, 0xf6, - 0xd4, 0xf5, 0xec, 0xc1, 0x01, 0xa6, 0x14, 0x52, 0x74, 0x27, 0xdf, 0x3f, 0xac, 0x1f, 0xbf, 0x30, - 0x3e, 0x78, 0x2e, 0xbb, 0xa7, 0x93, 0xc6, 0xe6, 0xb8, 0xe1, 0x21, 0x7b, 0x38, 0x6b, 0x1f, 0xdf, - 0x6c, 0xfd, 0xb0, 0x99, 0xeb, 0x07, 0xc7, 0x60, 0x1b, 0x6c, 0x81, 0xf6, 0x9d, 0x68, 0x7a, 0xa7, - 0xc1, 0xfb, 0x93, 0x29, 0x85, 0xff, 0x4f, 0x42, 0x73, 0xf3, 0xdb, 0x7c, 0x03, 0x16, 0x77, 0x5c, - 0x49, 0x94, 0x4d, 0xaa, 0x24, 0x86, 0x4b, 0xc8, 0x66, 0x85, 0x9c, 0x25, 0x91, 0xee, 0x76, 0xaa, - 0xe1, 0x5d, 0xdf, 0x28, 0x41, 0x7e, 0x91, 0xc7, 0x9b, 0x87, 0xf3, 0xef, 0xa7, 0x34, 0xa5, 0x9a, - 0xc7, 0x9b, 0x5f, 0x55, 0xdf, 0xd0, 0xb6, 0x06, 0x56, 0x69, 0x95, 0x3e, 0xba, 0xa4, 0x1a, 0xbc, - 0xce, 0x17, 0x4b, 0xe2, 0x32, 0x49, 0xef, 0xbe, 0x3e, 0xd1, 0x79, 0x90, 0x05, 0xa0, 0xc7, 0x2f, - 0x41, 0xc6, 0x3c, 0xe1, 0x12, 0x97, 0x04, 0xfc, 0xe7, 0x85, 0xa4, 0xeb, 0xb5, 0x53, 0xea, 0x9a, - 0xb7, 0xc5, 0x4d, 0x68, 0xc6, 0x2e, 0x75, 0x37, 0xe9, 0xbb, 0x94, 0xf4, 0x4d, 0x4e, 0x1a, 0x59, - 0x99, 0xfc, 0x8c, 0xde, 0x79, 0x65, 0xe2, 0xf0, 0x80, 0x7e, 0xf1, 0x18, 0xeb, 0x7f, 0xfc, 0xfc, - 0x87, 0xd9, 0x13, 0x3d, 0xfa, 0xbe, 0x61, 0x73, 0x33, 0xda, 0x73, 0xb0, 0x0a, 0x18, 0x37, 0x77, - 0xb1, 0x8b, 0xc3, 0xb3, 0x1b, 0x2d, 0xda, 0x53, 0xb5, 0xb1, 0xf0, 0x41, 0x8f, 0x05, 0x5c, 0x59, - 0x40, 0x5e, 0x48, 0xf3, 0xca, 0x39, 0xee, 0x74, 0xaf, 0x7b, 0xc8, 0xa1, 0x6f, 0x7e, 0xcb, 0x6f, - 0xb6, 0x0a, 0x5a, 0x67, 0x51, 0x41, 0xae, 0xdb, 0xc6, 0x49, 0x54, 0x8f, 0x3c, 0xf4, 0x7f, 0x4a, - 0xe8, 0x8e, 0x5a, 0x68, 0xbb, 0x19, 0xda, 0xe2, 0x5f, 0x4a, 0x68, 0x36, 0x73, 0x1f, 0x24, 0x15, - 0xd8, 0xa6, 0xe1, 0x2c, 0xd5, 0x41, 0xf5, 0x27, 0xde, 0xfb, 0x27, 0x81, 0x48, 0x25, 0xfc, 0x6d, - 0x9a, 0xb2, 0x05, 0xcf, 0x06, 0xc7, 0x43, 0x5a, 0xee, 0x7d, 0xca, 0xf2, 0xf3, 0xe6, 0x68, 0x37, - 0x4d, 0x74, 0x41, 0x24, 0x18, 0xb2, 0x15, 0x8d, 0xbf, 0x79, 0x78, 0xe2, 0xad, 0x73, 0x34, 0xaa, - 0x88, 0xd6, 0x9d, 0x3b, 0xf0, 0x49, 0xee, 0x67, 0x07, 0xe0, 0xe7, 0x5b, 0x7f, 0x95, 0x79, 0xd7, - 0x73, 0x9f, 0xdf, 0x5b, 0x65, 0xfd, 0x76, 0x55, 0xdb, 0x6a, 0x56, 0x52, 0x2d, 0x05, 0x70, 0xbb, - 0x07, 0xcd, 0x0f, 0xaa, 0xe9, 0xe4, 0x6e, 0xcb, 0x90, 0xb6, 0x85, 0x52, 0xbb, 0xb0, 0xed, 0xa6, - 0xcf, 0x0e, 0x67, 0x20, 0xf7, 0x50, 0x31, 0x60, 0xa9, 0x84, 0xff, 0xa8, 0xa4, 0x29, 0x3f, 0xc0, - 0xf7, 0x4c, 0xec, 0x3b, 0x38, 0x3e, 0x78, 0xc4, 0x82, 0x19, 0x3c, 0x02, 0xf2, 0x3e, 0x33, 0xa1, - 0xed, 0x27, 0x29, 0x93, 0x8c, 0x2a, 0x8a, 0xd2, 0x99, 0xcb, 0xe3, 0x9f, 0x9d, 0x85, 0xa8, 0x2b, - 0x06, 0xfe, 0xfb, 0x0e, 0x66, 0x8f, 0x5e, 0xca, 0x0c, 0x1d, 0xd0, 0x0f, 0xf5, 0x8a, 0x60, 0xd0, - 0x01, 0x41, 0x78, 0xb5, 0xbf, 0xd2, 0x1d, 0xe1, 0xaa, 0xd7, 0xf9, 0xfb, 0xd3, 0x37, 0xaa, 0x92, - 0xc6, 0x30, 0x0d, 0x12, 0xfc, 0x89, 0x84, 0xee, 0x26, 0x52, 0x41, 0xd4, 0x34, 0x75, 0x1d, 0x79, - 0x39, 0xda, 0x84, 0x6d, 0xba, 0xdc, 0xac, 0x33, 0x10, 0x5f, 0x5c, 0xa8, 0x3a, 0x95, 0xf0, 0xa7, - 0x34, 0xa5, 0x06, 0xdf, 0xb3, 0x8b, 0x17, 0x42, 0x9a, 0xb7, 0x6c, 0xfb, 0xf9, 0xec, 0x87, 0xed, - 0xd9, 0x9f, 0x1f, 0xf0, 0x3e, 0x68, 0x56, 0x8d, 0xdf, 0x38, 0x91, 0x7d, 0xe7, 0x2c, 0xc5, 0xd9, - 0x0a, 0x46, 0xb0, 0x5a, 0xe6, 0x7d, 0xc0, 0x11, 0xab, 0x78, 0x6b, 0xa4, 0xca, 0xec, 0xc5, 0x40, - 0xe6, 0x2d, 0x0f, 0x5a, 0xe8, 0x84, 0x4c, 0x6d, 0x3c, 0x16, 0x53, 0xc3, 0x69, 0xbc, 0xc4, 0x7d, - 0xd0, 0x14, 0xc4, 0x40, 0xed, 0xc1, 0x22, 0xa0, 0x52, 0x09, 0xff, 0x11, 0x49, 0x53, 0x9e, 0xc3, - 0x3e, 0x01, 0xc5, 0xbd, 0x9d, 0x55, 0xfa, 0x99, 0xa3, 0xb9, 0xb1, 0xde, 0xf1, 0x81, 0x1b, 0x13, - 0xc7, 0x06, 0x20, 0x88, 0xbf, 0xf7, 0x21, 0x01, 0x53, 0x52, 0x4e, 0x31, 0xe5, 0xd0, 0x00, 0x47, - 0x50, 0xad, 0xc1, 0xcf, 0xba, 0xa1, 0x9a, 0x32, 0xe6, 0x8f, 0x78, 0x4d, 0xbc, 0xc1, 0x40, 0x52, - 0x96, 0x29, 0x0d, 0x53, 0x24, 0xff, 0x8b, 0x84, 0x66, 0xd7, 0xb7, 0x24, 0xe2, 0xc9, 0xb4, 0xab, - 0x8c, 0x5a, 0xaa, 0x1d, 0x65, 0x34, 0x0f, 0x22, 0x95, 0xf0, 0xbf, 0x2b, 0x69, 0x4a, 0x04, 0xdf, - 0xa3, 0x0f, 0x8e, 0xea, 0x9d, 0x34, 0xd6, 0x82, 0x95, 0x83, 0x37, 0x88, 0x55, 0x80, 0xe3, 0x32, - 0x6a, 0x55, 0xce, 0xf4, 0x65, 0x86, 0x7b, 0x29, 0xda, 0x04, 0x48, 0x7f, 0xfb, 0xe4, 0xf8, 0x9e, - 0xb1, 0x6a, 0x1f, 0x7b, 0x1b, 0x2d, 0xcc, 0xe3, 0x72, 0x42, 0x88, 0x87, 0xfc, 0xf7, 0x17, 0xe0, - 0xe4, 0x28, 0x19, 0x9d, 0x31, 0xe3, 0x7b, 0x3d, 0x68, 0x36, 0x73, 0xc3, 0x74, 0x41, 0xd6, 0x52, - 0xed, 0x88, 0x6c, 0x1e, 0x44, 0x2a, 0xe1, 0x1f, 0x94, 0x34, 0xe5, 0x75, 0x3c, 0x1b, 0x3c, 0x38, - 0x99, 0x46, 0xfa, 0xb1, 0xe5, 0x27, 0xcf, 0x0d, 0x31, 0x3e, 0x48, 0x63, 0x34, 0x66, 0x46, 0x3a, - 0xe1, 0xf5, 0x08, 0x75, 0xfc, 0x64, 0x00, 0x64, 0x5b, 0xde, 0x37, 0x7e, 0xfe, 0x9c, 0x7e, 0xa8, - 0x37, 0x33, 0x32, 0x92, 0x19, 0x3b, 0x42, 0x55, 0x19, 0x79, 0x64, 0x92, 0xeb, 0xeb, 0x18, 0xdf, - 0xf7, 0xb1, 0xfe, 0xf6, 0x05, 0xbd, 0xfb, 0xa8, 0xfe, 0xf6, 0x85, 0xcc, 0x58, 0xff, 0xaf, 0xda, - 0xdf, 0x22, 0x34, 0x78, 0xd8, 0xfb, 0x50, 0x71, 0xd2, 0x6c, 0x10, 0xa2, 0xdb, 0x83, 0xee, 0x54, - 0x22, 0x11, 0xb2, 0x5d, 0xdc, 0x16, 0x67, 0xc4, 0xb0, 0xed, 0x08, 0x18, 0x08, 0xb5, 0x9e, 0x5e, - 0x9f, 0x3b, 0x00, 0x18, 0x49, 0xff, 0x15, 0x49, 0x53, 0x5e, 0xc3, 0x38, 0x33, 0xf4, 0x76, 0xf6, - 0xc4, 0x55, 0x18, 0x38, 0x1c, 0x1d, 0x79, 0x23, 0x90, 0x75, 0xb5, 0xbe, 0xe1, 0xe6, 0x68, 0x77, - 0x6e, 0xe4, 0x38, 0x9d, 0xdf, 0x9f, 0x9e, 0xd0, 0xdf, 0x3e, 0x05, 0x10, 0xcb, 0x32, 0xc3, 0xbd, - 0xb5, 0xdb, 0x37, 0xd3, 0x50, 0xad, 0x5a, 0x77, 0x7d, 0x5d, 0xad, 0xe9, 0x85, 0x41, 0x0a, 0x97, - 0x93, 0x98, 0xfc, 0x94, 0x36, 0xb9, 0xf7, 0x87, 0xf4, 0xce, 0x2b, 0x9c, 0x18, 0xf0, 0xc6, 0x96, - 0x50, 0x62, 0x95, 0xff, 0xe1, 0x22, 0xf5, 0x5a, 0x2c, 0x1e, 0x51, 0x0d, 0x72, 0xfc, 0x57, 0x09, - 0xcd, 0x07, 0x5f, 0x43, 0x82, 0xcd, 0xfa, 0x64, 0xbc, 0x85, 0xd1, 0xc4, 0x6f, 0x7f, 0xb8, 0xc9, - 0xe1, 0x18, 0x59, 0x1e, 0x28, 0x08, 0x43, 0x29, 0xb3, 0x4f, 0xd2, 0x94, 0x17, 0x0c, 0xca, 0x1c, - 0xc8, 0xa7, 0xcc, 0x93, 0x8c, 0x32, 0x7a, 0xff, 0x25, 0xfd, 0x83, 0xf6, 0xdc, 0xe8, 0x47, 0xfa, - 0xc0, 0x75, 0x80, 0x30, 0x06, 0xc8, 0x56, 0x5b, 0xc6, 0x52, 0x4b, 0xeb, 0xce, 0x23, 0x09, 0x41, - 0x78, 0x45, 0x60, 0x2a, 0x08, 0xe3, 0x21, 0x0f, 0x5a, 0x48, 0x6e, 0x3b, 0x5d, 0x50, 0x5e, 0x99, - 0x8f, 0x8e, 0x00, 0x4c, 0x61, 0x2c, 0xe8, 0x57, 0x15, 0x0d, 0x4f, 0x49, 0x71, 0x4d, 0xd2, 0x94, - 0x57, 0x70, 0x45, 0xb6, 0xeb, 0xfa, 0xc4, 0xbe, 0x43, 0x0e, 0x04, 0x79, 0xc9, 0xad, 0x66, 0x99, - 0xde, 0xdd, 0x99, 0x3d, 0xf0, 0x09, 0x75, 0xf3, 0xe9, 0x3a, 0x60, 0x48, 0x00, 0x04, 0x78, 0x3c, - 0x71, 0x15, 0x20, 0x7e, 0xd5, 0xfe, 0x66, 0xad, 0xc2, 0xff, 0xcc, 0x23, 0x56, 0xee, 0x62, 0x17, - 0xe8, 0x8b, 0xc7, 0x02, 0x8f, 0xba, 0x13, 0x2c, 0x65, 0xa3, 0x58, 0xaa, 0x6a, 0x45, 0x55, 0xa3, - 0x81, 0x13, 0x1e, 0x81, 0xc0, 0x07, 0x76, 0xff, 0xa1, 0x1a, 0x9e, 0x1e, 0xa5, 0xd2, 0xe1, 0x90, - 0xc7, 0xd5, 0x77, 0xcc, 0xbb, 0xa2, 0x48, 0x68, 0x4a, 0xb9, 0x11, 0x49, 0x53, 0xfe, 0x05, 0xa6, - 0x0f, 0x7a, 0x29, 0x52, 0x23, 0x1d, 0xb9, 0xbe, 0x8e, 0x3c, 0x4c, 0x41, 0xfe, 0xc0, 0x77, 0xc9, - 0xbb, 0x19, 0xc0, 0xb9, 0x1f, 0x1a, 0x38, 0x4d, 0x65, 0x86, 0x7b, 0xed, 0xed, 0xa0, 0x85, 0x6d, - 0x03, 0x92, 0x56, 0x63, 0x61, 0x35, 0x06, 0x7b, 0x33, 0x42, 0xc0, 0x35, 0x58, 0x76, 0x20, 0x20, - 0x4f, 0x63, 0x97, 0xaa, 0x7a, 0x5d, 0xf0, 0x7a, 0x7b, 0xa3, 0x0a, 0x12, 0xb4, 0xe0, 0x23, 0x1e, - 0x88, 0x81, 0x47, 0xb8, 0xa1, 0x3e, 0xc6, 0xf8, 0x6d, 0xb9, 0x53, 0xbe, 0x27, 0x2b, 0x0c, 0x23, - 0x57, 0xa0, 0x18, 0x50, 0x4a, 0xab, 0xf3, 0x92, 0xa6, 0xfc, 0x04, 0xfb, 0xe1, 0x6c, 0x92, 0xa9, - 0xe1, 0xa1, 0x03, 0xd4, 0x91, 0x41, 0x08, 0x08, 0xed, 0xdd, 0x48, 0x2f, 0xf8, 0x61, 0x81, 0xe4, - 0x04, 0x72, 0x73, 0xb4, 0x5b, 0x3f, 0xf7, 0x56, 0xf6, 0x44, 0x7f, 0xf6, 0x64, 0x0f, 0x1c, 0x03, - 0x43, 0x76, 0x1f, 0xa3, 0x7c, 0xff, 0x71, 0xfd, 0xc6, 0x58, 0xee, 0xc8, 0xd9, 0xf1, 0xc1, 0xb3, - 0x7a, 0xfb, 0x28, 0x08, 0x24, 0x9e, 0x92, 0x40, 0x7e, 0x44, 0x53, 0x5e, 0x6e, 0x0e, 0x11, 0xfe, - 0x33, 0x29, 0xf3, 0xb0, 0x13, 0xba, 0xf9, 0x50, 0x8c, 0x36, 0x95, 0xc5, 0x01, 0x53, 0xea, 0xfc, - 0x5c, 0xd2, 0x94, 0x37, 0xf0, 0x32, 0x67, 0xea, 0xb4, 0x90, 0x56, 0x16, 0x1a, 0xbd, 0xe0, 0x48, - 0x23, 0x3b, 0xe0, 0x14, 0x29, 0x55, 0x85, 0x57, 0x14, 0x49, 0x29, 0xf8, 0x14, 0xfe, 0x99, 0x84, - 0x66, 0x5b, 0x54, 0x8b, 0xdd, 0x84, 0x5b, 0xaa, 0x1d, 0x4d, 0x78, 0x1e, 0x44, 0x2a, 0xe1, 0x7f, - 0x51, 0x53, 0x96, 0x18, 0x7b, 0x8a, 0x53, 0x13, 0xc7, 0xcf, 0x30, 0x0b, 0x7e, 0x17, 0xfc, 0xcc, - 0x75, 0x5d, 0xd7, 0x07, 0xfa, 0x68, 0x21, 0x2c, 0x31, 0x03, 0x45, 0x9a, 0x5a, 0x7c, 0x45, 0x42, - 0x68, 0x83, 0xca, 0x97, 0x56, 0x8b, 0x1c, 0xa4, 0x5d, 0x18, 0xe7, 0xe2, 0x42, 0xd5, 0xa9, 0x84, - 0xff, 0x65, 0x4d, 0x79, 0x14, 0xcf, 0xb6, 0x4c, 0x99, 0x77, 0x89, 0x98, 0xd2, 0xbc, 0x96, 0x7d, - 0x99, 0xfb, 0x42, 0xc2, 0xb2, 0x02, 0x46, 0x8d, 0x8b, 0x1d, 0xf5, 0x3e, 0x2a, 0xa7, 0x0d, 0x10, - 0x66, 0x89, 0x8d, 0xfe, 0x41, 0x27, 0x06, 0xb3, 0xc2, 0x38, 0x6e, 0x72, 0x9c, 0xc0, 0x52, 0x09, - 0xff, 0x69, 0x49, 0x53, 0x5e, 0xc6, 0x34, 0xa1, 0x7a, 0xf6, 0x64, 0x4f, 0x66, 0xe8, 0x63, 0x70, - 0xe4, 0xcc, 0x0c, 0x1d, 0xc8, 0xf5, 0x75, 0x50, 0x50, 0xca, 0x7e, 0x4f, 0x51, 0xf6, 0x13, 0x00, - 0xe8, 0x0a, 0x42, 0xc8, 0x34, 0x9e, 0xef, 0xfc, 0xc3, 0x42, 0x2d, 0x83, 0xd2, 0x97, 0xf1, 0x2a, - 0x07, 0xfc, 0x69, 0x28, 0xa9, 0x54, 0xd5, 0xeb, 0x3c, 0xae, 0x99, 0xb9, 0x62, 0xc6, 0x1f, 0x7a, - 0xd0, 0x2c, 0xf0, 0x81, 0x06, 0x12, 0x2c, 0x76, 0xc2, 0x4d, 0xc0, 0xfd, 0xbe, 0x82, 0xf5, 0xa9, - 0x84, 0xff, 0x73, 0x49, 0x53, 0x3e, 0x91, 0xf0, 0x5d, 0x96, 0x49, 0xa4, 0x38, 0x1e, 0x96, 0xe0, - 0xa4, 0x94, 0x52, 0x84, 0x08, 0x0f, 0x1c, 0x57, 0x58, 0xe0, 0x44, 0x09, 0x9b, 0x38, 0x7d, 0x1d, - 0xe0, 0x20, 0xbc, 0x56, 0x9e, 0x9c, 0x65, 0x2f, 0x9e, 0x81, 0xda, 0x5f, 0xb5, 0xbf, 0x45, 0x9b, - 0x80, 0x73, 0x23, 0x29, 0x9c, 0x60, 0x29, 0xca, 0xa0, 0x89, 0x18, 0x80, 0x13, 0xc0, 0x84, 0xbd, - 0xf1, 0xbd, 0xb8, 0xc0, 0xde, 0x18, 0xff, 0xad, 0x84, 0xee, 0x24, 0x88, 0x92, 0x80, 0x26, 0x8c, - 0x56, 0x4b, 0x1c, 0x69, 0x21, 0x82, 0x38, 0x6e, 0x9f, 0x1c, 0xa0, 0x60, 0xcf, 0xff, 0x1c, 0xbe, - 0x87, 0x05, 0x11, 0xfd, 0x44, 0xef, 0xbc, 0x6c, 0xa5, 0xdd, 0x0a, 0xb1, 0x8a, 0x6d, 0x0e, 0xdf, - 0x16, 0x7f, 0x82, 0xd5, 0x03, 0xdf, 0x60, 0x82, 0xd3, 0x03, 0xd8, 0x69, 0xd3, 0x90, 0xda, 0x19, - 0x4a, 0xaa, 0x11, 0xce, 0x00, 0x7f, 0x61, 0x6c, 0x78, 0xc9, 0xfe, 0x7c, 0x7b, 0x34, 0x99, 0x6e, - 0x0d, 0x35, 0x33, 0xec, 0x96, 0x3a, 0x9f, 0x53, 0x58, 0xa1, 0x0c, 0x04, 0x97, 0x15, 0x07, 0x98, - 0x4a, 0xf8, 0x55, 0x4d, 0xf9, 0x16, 0xc6, 0xf4, 0xfd, 0xe9, 0xf1, 0xbe, 0xec, 0x81, 0x93, 0x30, - 0x72, 0xef, 0x43, 0xf6, 0xb2, 0xca, 0xcc, 0x2f, 0x3e, 0xc8, 0x76, 0xbd, 0x97, 0x19, 0x7e, 0x67, - 0x67, 0x3c, 0x95, 0x16, 0x66, 0xca, 0xe7, 0x5f, 0xe8, 0x80, 0x55, 0x9b, 0x70, 0x8c, 0xf1, 0xaf, - 0x25, 0x74, 0x37, 0x28, 0xc0, 0xc9, 0x50, 0x72, 0x82, 0x72, 0x44, 0xc9, 0x19, 0x30, 0x95, 0xf0, - 0x7f, 0x5f, 0x53, 0x96, 0x19, 0x28, 0x91, 0x57, 0x1a, 0x22, 0x4a, 0x0e, 0x65, 0x64, 0xf8, 0xcb, - 0x03, 0x4b, 0x0b, 0x0c, 0xdf, 0xa2, 0xa5, 0xfe, 0xa3, 0x84, 0xee, 0x81, 0xbd, 0x98, 0xf5, 0xc3, - 0x2f, 0xb4, 0xc6, 0xd3, 0x21, 0xfb, 0x32, 0xcc, 0x15, 0xd4, 0xc0, 0x68, 0xc5, 0x14, 0xa0, 0x53, - 0x09, 0x7f, 0xd8, 0x40, 0x8b, 0x06, 0x71, 0x98, 0xe8, 0x3c, 0x38, 0xf1, 0xd3, 0x0f, 0xbc, 0x15, - 0xf4, 0xb9, 0xa3, 0x80, 0x10, 0xd4, 0x80, 0xee, 0xf1, 0xae, 0x28, 0x12, 0xad, 0xaa, 0x9f, 0x18, - 0x5f, 0x31, 0xe6, 0xe9, 0x82, 0x84, 0x66, 0x6c, 0x50, 0xc9, 0xea, 0x06, 0x3b, 0x59, 0x06, 0x21, - 0xa5, 0x9b, 0x5d, 0xef, 0xf0, 0x7a, 0x6a, 0xee, 0x7f, 0xa0, 0x29, 0xab, 0x30, 0x02, 0x21, 0x31, - 0x2a, 0xbc, 0x7e, 0xd1, 0x6e, 0xd4, 0x43, 0x76, 0x36, 0x63, 0x73, 0x09, 0xcb, 0x47, 0xd3, 0x6a, - 0x38, 0x4b, 0x89, 0xb1, 0x6c, 0xa9, 0x7a, 0x9d, 0x26, 0x75, 0x7b, 0x03, 0xff, 0x83, 0x84, 0x66, - 0xd1, 0x2f, 0x42, 0xc0, 0x4b, 0x97, 0xe1, 0x08, 0xd1, 0xf8, 0xec, 0x9b, 0x26, 0x0b, 0x0c, 0x1d, - 0xf6, 0x7b, 0x92, 0xa6, 0x34, 0xe1, 0xf9, 0xe6, 0xb8, 0xc5, 0x0b, 0x23, 0xef, 0xe6, 0x42, 0x38, - 0x88, 0x90, 0x95, 0x99, 0xa1, 0x91, 0xf1, 0x73, 0x6f, 0xc2, 0x7e, 0x5b, 0x1f, 0xbc, 0x6e, 0xec, - 0xc0, 0xbb, 0x0e, 0xe6, 0x7e, 0x36, 0x08, 0xde, 0x04, 0xd0, 0x4d, 0x01, 0x23, 0x69, 0x45, 0xb7, - 0x2a, 0x6a, 0xe0, 0x78, 0x41, 0x42, 0x77, 0x04, 0xd5, 0x70, 0x3c, 0x19, 0xe1, 0x68, 0x3b, 0x9c, - 0x02, 0x8a, 0xf5, 0x0c, 0x73, 0xaf, 0x3d, 0x60, 0x1d, 0x8b, 0xac, 0xed, 0xdf, 0xaa, 0x29, 0x2b, - 0x71, 0x85, 0x3e, 0x76, 0x44, 0xef, 0x3c, 0x6b, 0xc7, 0xc3, 0x8b, 0xc5, 0x1a, 0xb8, 0xcf, 0x07, - 0xfd, 0xec, 0x5f, 0xe0, 0x32, 0x6c, 0x83, 0x93, 0xfe, 0x1f, 0x09, 0x21, 0x33, 0x05, 0x07, 0x76, - 0x39, 0xd1, 0x10, 0xf9, 0xc9, 0x5f, 0x08, 0x84, 0xce, 0xcd, 0x29, 0x72, 0xea, 0x31, 0x17, 0xf8, - 0xde, 0xf8, 0x14, 0x1d, 0x63, 0x53, 0x7e, 0xc9, 0x6f, 0xf2, 0xd4, 0xe3, 0x5e, 0x6f, 0x21, 0xc4, - 0xff, 0x5e, 0x42, 0x98, 0x9c, 0xf0, 0xc1, 0x14, 0x30, 0x45, 0x67, 0x3f, 0x63, 0x66, 0x30, 0x29, - 0x57, 0x02, 0x88, 0x20, 0x94, 0x00, 0x87, 0x24, 0x4d, 0xf9, 0x11, 0x7e, 0xd0, 0xdc, 0x5d, 0xd1, - 0x80, 0x32, 0x10, 0xcd, 0xe6, 0xe2, 0x7b, 0x7a, 0xff, 0x85, 0xc6, 0x70, 0x8a, 0x2a, 0xbc, 0xc7, - 0x20, 0x3f, 0x07, 0x9d, 0x39, 0x27, 0x90, 0xca, 0x89, 0xf7, 0x3e, 0xcd, 0x5e, 0xfc, 0xe9, 0xf8, - 0xe0, 0xa0, 0xfe, 0xfe, 0x89, 0xec, 0xe1, 0xab, 0xc2, 0x06, 0xdf, 0xf9, 0x7c, 0x8b, 0x70, 0xa5, - 0x99, 0x1e, 0x44, 0x0a, 0xe0, 0x21, 0x09, 0xa1, 0xda, 0x78, 0x32, 0x12, 0x8f, 0x39, 0x4f, 0xb4, - 0x59, 0xe7, 0x8e, 0xa7, 0x00, 0x42, 0xf1, 0x0c, 0x6b, 0xca, 0x63, 0x78, 0x1e, 0xdb, 0x58, 0x1e, - 0xd4, 0x0f, 0x0d, 0x8e, 0x5f, 0xda, 0xa3, 0x0f, 0x9f, 0xcb, 0xb6, 0xbf, 0xe9, 0x5d, 0x4c, 0x99, - 0x74, 0xe0, 0x17, 0xb9, 0xb1, 0x01, 0xb1, 0x52, 0x38, 0xa6, 0x7c, 0xc0, 0xbb, 0xd8, 0x6d, 0xf4, - 0x61, 0xf2, 0x35, 0x63, 0xe8, 0xc3, 0x12, 0x2a, 0x7f, 0x31, 0x26, 0x0c, 0xde, 0xa6, 0x1f, 0xc4, - 0x5a, 0x36, 0xfc, 0x25, 0x85, 0x81, 0x28, 0x02, 0x3b, 0x34, 0x65, 0x35, 0xa6, 0x19, 0x87, 0x2c, - 0xa3, 0x5f, 0x28, 0x8e, 0xde, 0x69, 0xe8, 0x0f, 0x7a, 0x7d, 0x6e, 0x43, 0x6f, 0x8d, 0x59, 0x06, - 0x3f, 0x93, 0xa7, 0x20, 0x74, 0xd8, 0x90, 0xe4, 0x65, 0xe0, 0x74, 0xd8, 0x90, 0xe4, 0xe7, 0x2f, - 0xf4, 0xef, 0xd4, 0x94, 0xa7, 0x70, 0x00, 0xc6, 0xc7, 0xf3, 0x61, 0x56, 0xea, 0x97, 0xf6, 0xf2, - 0x0d, 0x7e, 0xae, 0xaf, 0xc3, 0xd7, 0x10, 0x8f, 0xf8, 0x26, 0x3e, 0xba, 0x3c, 0xd1, 0xde, 0xe3, - 0x9d, 0x93, 0x07, 0x4b, 0xc6, 0xef, 0xf7, 0x2f, 0x72, 0x1b, 0x7f, 0xc4, 0xf8, 0xa4, 0x31, 0xf8, - 0x11, 0x09, 0xcd, 0xcd, 0xcf, 0x26, 0x65, 0x5f, 0x0b, 0xb8, 0x64, 0x0f, 0xb3, 0xaf, 0x05, 0xdc, - 0x12, 0x53, 0xf9, 0xb7, 0x91, 0xb5, 0x80, 0x25, 0xa3, 0x12, 0xc9, 0x72, 0xe6, 0x75, 0x28, 0x9b, - 0x8c, 0x6f, 0x20, 0x23, 0x9a, 0x31, 0xfa, 0x3f, 0x97, 0xd0, 0x3c, 0xc7, 0x6c, 0x70, 0x6e, 0x2b, - 0x00, 0xe7, 0x8c, 0x80, 0x6e, 0x2b, 0x00, 0x97, 0x14, 0x73, 0xfe, 0xef, 0xd9, 0x91, 0x21, 0xd9, - 0x0c, 0xbd, 0x0e, 0x65, 0x05, 0xae, 0x25, 0x40, 0x84, 0x85, 0x47, 0x6a, 0xb6, 0xf9, 0x80, 0x84, - 0x49, 0x85, 0xe6, 0xc3, 0x92, 0x20, 0xab, 0xd0, 0x7c, 0x58, 0x73, 0x2f, 0x39, 0xcd, 0x07, 0xc9, - 0xc6, 0xe5, 0x75, 0x28, 0x9b, 0x6c, 0x3e, 0x20, 0x75, 0x93, 0x31, 0xfa, 0x7f, 0x04, 0x37, 0x57, - 0xaa, 0x6a, 0x6b, 0x93, 0x6a, 0x44, 0x8d, 0xa5, 0xa3, 0xa1, 0x66, 0x3b, 0x06, 0x4e, 0x50, 0x8e, - 0xab, 0x4b, 0x67, 0xc0, 0x54, 0xc2, 0xdf, 0x2b, 0x69, 0xca, 0x76, 0xbc, 0xc8, 0xb2, 0x97, 0x32, - 0x41, 0xc0, 0x70, 0x7a, 0x1f, 0xa5, 0x9b, 0xaa, 0x43, 0x3d, 0x99, 0x5f, 0xbc, 0x9f, 0xeb, 0xeb, - 0x80, 0x87, 0xcf, 0x1b, 0xd5, 0xdd, 0x05, 0x9b, 0x15, 0xd8, 0x31, 0xd2, 0x92, 0x30, 0x6f, 0x51, - 0xf5, 0x7a, 0x8a, 0xf5, 0xf9, 0x06, 0xfe, 0x3f, 0x78, 0xf2, 0x32, 0x3b, 0x09, 0x02, 0x05, 0xaf, - 0x12, 0xac, 0x54, 0x78, 0xb8, 0x68, 0xd8, 0x54, 0xc2, 0xff, 0x07, 0x9a, 0xf2, 0x34, 0x5e, 0x64, - 0xb9, 0x70, 0xb0, 0xd1, 0x61, 0x11, 0x2c, 0x93, 0x5c, 0x80, 0x08, 0xbe, 0x8f, 0x7a, 0xa7, 0x8c, - 0xaf, 0x31, 0xe5, 0xff, 0x59, 0x42, 0x0b, 0x2c, 0x27, 0x2a, 0x85, 0x50, 0x76, 0x01, 0x74, 0x44, - 0xd9, 0x15, 0x36, 0x95, 0xf0, 0xb7, 0x68, 0x8a, 0x8c, 0x17, 0x58, 0x0e, 0x6c, 0x4c, 0x08, 0xaf, - 0x5b, 0x05, 0x4c, 0x6b, 0x60, 0xea, 0xd3, 0xfa, 0xf7, 0x12, 0xcd, 0xb7, 0x61, 0xc3, 0x70, 0x59, - 0x81, 0x2d, 0xbf, 0x15, 0xbf, 0xe5, 0x45, 0x42, 0xa6, 0x12, 0xfe, 0xff, 0x45, 0x53, 0x1a, 0x5c, - 0x19, 0x9b, 0x6e, 0x79, 0xab, 0xec, 0xa7, 0x05, 0x05, 0x1b, 0xc0, 0x4a, 0x02, 0x2f, 0x29, 0x06, - 0x77, 0xfc, 0xa7, 0x12, 0x9a, 0x57, 0x1f, 0x8b, 0xa6, 0xd7, 0xab, 0x11, 0x9a, 0xf1, 0x8d, 0x2d, - 0x9e, 0x6c, 0xf8, 0x3a, 0x82, 0x39, 0xe2, 0xeb, 0x02, 0x99, 0x4a, 0x18, 0x16, 0x7a, 0x15, 0x9e, - 0xaf, 0xef, 0xff, 0x40, 0x3f, 0x7f, 0x40, 0xef, 0x3e, 0x0a, 0x57, 0xf5, 0xec, 0x88, 0xcb, 0xa5, - 0xbc, 0xc0, 0xca, 0x28, 0x1a, 0x8b, 0xa6, 0x5f, 0xe6, 0xbb, 0x78, 0x83, 0x47, 0xff, 0xbd, 0x84, - 0xee, 0x52, 0x22, 0x11, 0xfa, 0x75, 0x35, 0xc2, 0xb0, 0x79, 0xc8, 0xe1, 0x46, 0x2b, 0x1f, 0xc8, - 0xc0, 0x65, 0x69, 0x51, 0x70, 0xa9, 0x84, 0x3f, 0x49, 0x44, 0x51, 0xbf, 0xb4, 0x97, 0x9d, 0x4f, - 0xbc, 0x7d, 0xca, 0x58, 0xb0, 0x5b, 0x10, 0x2a, 0x5c, 0x0d, 0xb7, 0x79, 0x7e, 0xa7, 0x7d, 0x48, - 0x28, 0x12, 0x79, 0x99, 0x7d, 0x54, 0x40, 0xee, 0x13, 0x09, 0xcd, 0x12, 0xc2, 0x34, 0xd9, 0xb7, - 0x5f, 0x42, 0xa5, 0xeb, 0xf6, 0xcb, 0x02, 0x63, 0x9a, 0x88, 0x95, 0x78, 0x0e, 0x0f, 0xf1, 0x04, - 0x91, 0x42, 0xbd, 0x0b, 0xf3, 0x0a, 0x68, 0xf8, 0x3b, 0x73, 0xcf, 0xb8, 0xc8, 0x5f, 0xe1, 0x76, - 0x2f, 0x6d, 0x0c, 0xf7, 0x92, 0x84, 0x66, 0x09, 0xc1, 0x70, 0xb0, 0xdf, 0x4d, 0xd5, 0x15, 0x1a, - 0xae, 0x05, 0x86, 0x0e, 0xf7, 0xbb, 0x86, 0x45, 0x9b, 0xc3, 0x03, 0xe9, 0xd0, 0xe1, 0xce, 0xcb, - 0x2b, 0x10, 0x06, 0xba, 0xd4, 0xeb, 0x77, 0xf5, 0x15, 0xe0, 0xf7, 0xe7, 0xc6, 0x90, 0xaf, 0x49, - 0x68, 0x96, 0x10, 0x8c, 0xc4, 0xed, 0x56, 0xb0, 0xf0, 0x90, 0x2d, 0x30, 0xe6, 0xd2, 0x54, 0xc6, - 0x77, 0x32, 0x6d, 0x15, 0x6f, 0x8d, 0xd0, 0x41, 0x2f, 0x12, 0xcf, 0x9e, 0xc3, 0x66, 0x85, 0x30, - 0xf8, 0x25, 0x81, 0x22, 0x06, 0x8f, 0x3f, 0x96, 0x50, 0x19, 0x31, 0xa0, 0xc6, 0xb0, 0xef, 0x73, - 0x34, 0xad, 0xc2, 0x98, 0x7d, 0xee, 0x00, 0x74, 0xc0, 0x2f, 0x19, 0x2c, 0x31, 0x8b, 0x29, 0x9a, - 0x78, 0x6b, 0xc4, 0x7b, 0x9f, 0xb8, 0x0b, 0xa7, 0xdf, 0xb5, 0x0f, 0x16, 0x17, 0x33, 0xd8, 0x93, - 0x1e, 0x34, 0x93, 0x87, 0x9c, 0xb0, 0xaf, 0xa3, 0x79, 0x95, 0xeb, 0x3a, 0x5a, 0x80, 0xa0, 0xe3, - 0xfd, 0xa5, 0xa4, 0x29, 0x17, 0x24, 0x7c, 0xa7, 0x30, 0x62, 0xaa, 0x3f, 0xb5, 0x02, 0xc7, 0xad, - 0x1c, 0xea, 0x56, 0x1c, 0xb6, 0x7a, 0xb1, 0xab, 0xf8, 0x18, 0x3b, 0xbc, 0x3b, 0x04, 0x49, 0xdd, - 0xde, 0x50, 0x6b, 0x3f, 0x75, 0xb0, 0xd6, 0x33, 0x5a, 0x3d, 0x34, 0x19, 0x18, 0x25, 0xd8, 0x77, - 0x8c, 0x09, 0xc6, 0x5c, 0xc4, 0xb7, 0x37, 0xd4, 0xd2, 0x7d, 0x7d, 0x85, 0x58, 0x66, 0x93, 0x79, - 0xe7, 0x73, 0x47, 0x32, 0xe8, 0xb6, 0x44, 0xd8, 0x90, 0xa1, 0x5f, 0x48, 0xe8, 0x0e, 0x41, 0x6a, - 0x1d, 0x87, 0x6e, 0xad, 0x77, 0x1d, 0x7a, 0x3e, 0x18, 0x1d, 0xfa, 0x0f, 0x35, 0xc5, 0xcf, 0x8e, - 0xe5, 0x32, 0xc3, 0xbd, 0x6d, 0x89, 0x30, 0x5b, 0xcb, 0xc2, 0x2f, 0x61, 0xb8, 0xce, 0x07, 0x72, - 0x6c, 0xb8, 0x82, 0xf3, 0xcc, 0xeb, 0x6d, 0x89, 0x30, 0x55, 0x02, 0x7f, 0x2a, 0xa1, 0x3b, 0x04, - 0x19, 0x76, 0x44, 0xc0, 0x5a, 0xef, 0x8a, 0x40, 0x3e, 0x18, 0x45, 0xa0, 0x59, 0x53, 0xd6, 0xe0, - 0x79, 0x82, 0x36, 0xf0, 0xf1, 0x51, 0x7b, 0x17, 0xda, 0x34, 0x82, 0xcf, 0x8a, 0x52, 0x55, 0x60, - 0x6a, 0x28, 0xe1, 0x2b, 0x1e, 0x54, 0xce, 0x05, 0xc6, 0xc0, 0xe6, 0x01, 0x57, 0x71, 0x12, 0x70, - 0x59, 0x52, 0x18, 0x88, 0x62, 0xf2, 0x37, 0x92, 0xa6, 0x5c, 0x92, 0xf0, 0x3c, 0x41, 0xec, 0x7c, - 0xdb, 0x1b, 0x6a, 0xa9, 0xe8, 0x1d, 0x2d, 0x2c, 0x7a, 0x26, 0xe4, 0xad, 0x10, 0xbf, 0x45, 0xb8, - 0x10, 0x27, 0xe3, 0x5f, 0x49, 0x68, 0xae, 0xa0, 0x66, 0x9a, 0xc8, 0x5e, 0x73, 0x69, 0x01, 0x45, - 0xd4, 0x24, 0x6e, 0x33, 0x97, 0x4d, 0x0e, 0x48, 0x29, 0xf8, 0x07, 0x9a, 0x52, 0x8f, 0x2b, 0x44, - 0xfa, 0x25, 0x09, 0x04, 0xbf, 0xf0, 0x20, 0x14, 0xa4, 0x93, 0xca, 0xdf, 0xe8, 0xeb, 0x97, 0x4f, - 0xb0, 0x08, 0xb4, 0x7a, 0xff, 0x25, 0xfd, 0xe4, 0x49, 0x81, 0x41, 0x02, 0x78, 0x99, 0x1b, 0x62, - 0xd0, 0xb5, 0xa0, 0x89, 0xff, 0x08, 0x2e, 0x2e, 0xb7, 0x37, 0xd4, 0xd6, 0x46, 0x23, 0x0e, 0x27, - 0x66, 0x66, 0x9d, 0xeb, 0x49, 0x92, 0x08, 0x62, 0xf2, 0xf7, 0x33, 0xf8, 0x6e, 0xc0, 0xa9, 0x2d, - 0x11, 0xf6, 0x85, 0xa3, 0x11, 0x76, 0x81, 0x43, 0x5f, 0x09, 0x10, 0xd6, 0x14, 0xb1, 0x69, 0x4b, - 0x84, 0x73, 0x7d, 0x1d, 0x06, 0xe0, 0xa4, 0xd6, 0xa4, 0x2d, 0x11, 0x36, 0xe0, 0x38, 0x7f, 0xff, - 0x99, 0x84, 0xe6, 0x80, 0x92, 0xdb, 0xc2, 0x9c, 0x11, 0xb0, 0x8b, 0x16, 0xe4, 0x00, 0x0c, 0x9b, - 0xa5, 0x93, 0xc2, 0x51, 0x94, 0x7e, 0xac, 0x29, 0xcf, 0xb2, 0x25, 0x12, 0x77, 0xc8, 0xf0, 0xae, - 0xc8, 0x2b, 0x00, 0xb7, 0xef, 0x9b, 0xa3, 0xdd, 0xf4, 0x08, 0x7a, 0xf4, 0x7a, 0xb6, 0xfd, 0x7c, - 0x66, 0x74, 0x28, 0x37, 0xfa, 0x11, 0x3b, 0xc9, 0xbc, 0xdf, 0x7f, 0x6f, 0x21, 0x97, 0x0a, 0x43, - 0x01, 0xfd, 0x2b, 0x09, 0xcd, 0x31, 0xb7, 0xf3, 0x2e, 0x08, 0xe5, 0x01, 0xb8, 0x22, 0x64, 0x83, - 0xa3, 0x08, 0xfd, 0x48, 0x58, 0x44, 0xf1, 0x5a, 0xb6, 0x88, 0xe2, 0x05, 0xa2, 0xde, 0xf1, 0x06, - 0x0a, 0x0d, 0xdc, 0xea, 0x0a, 0x42, 0xd0, 0xf0, 0xa0, 0x39, 0xa6, 0xeb, 0x91, 0x0b, 0x1a, 0x79, - 0x00, 0xae, 0x68, 0xd8, 0xe0, 0x28, 0x1a, 0x7f, 0x27, 0x69, 0xca, 0x47, 0x92, 0x31, 0x33, 0x86, - 0xd6, 0x34, 0x11, 0x39, 0x22, 0x89, 0x7a, 0x94, 0x97, 0x1b, 0x5a, 0x63, 0xec, 0x5d, 0xfe, 0x33, - 0xdb, 0xdf, 0x95, 0x3b, 0x72, 0x5c, 0xbf, 0xf8, 0x5e, 0xae, 0xaf, 0xc3, 0x28, 0xcc, 0x1e, 0xbb, - 0x0a, 0x87, 0xd4, 0x7a, 0xe7, 0x9b, 0xe3, 0x03, 0x43, 0xb9, 0xf7, 0x3f, 0xcb, 0xbe, 0x73, 0x16, - 0x3a, 0xe2, 0xfa, 0x66, 0xfc, 0xdc, 0x9b, 0x50, 0x92, 0xed, 0xef, 0x32, 0xda, 0xf0, 0x9b, 0x88, - 0xdc, 0x48, 0x07, 0x39, 0x02, 0xbf, 0x46, 0xcf, 0x19, 0x47, 0x87, 0xf5, 0xfd, 0x57, 0x29, 0x28, - 0x53, 0x59, 0x84, 0x92, 0x95, 0x81, 0x29, 0x50, 0x12, 0xff, 0xa1, 0x84, 0xca, 0xe9, 0x9d, 0x09, - 0xd0, 0xd0, 0xed, 0x46, 0xc5, 0x42, 0xc0, 0x25, 0x85, 0x81, 0x28, 0xf5, 0x54, 0x63, 0x3f, 0x36, - 0xc7, 0xbc, 0x76, 0x01, 0xda, 0x2d, 0x12, 0x57, 0x7a, 0x5b, 0xcc, 0xb1, 0x08, 0xcc, 0x50, 0x89, - 0xa7, 0x82, 0xc2, 0xdf, 0x4b, 0xe0, 0xf8, 0x22, 0x78, 0x89, 0x01, 0x2a, 0x0f, 0x17, 0xd8, 0x2a, - 0xdb, 0x50, 0xaa, 0x2c, 0x0e, 0x98, 0xa2, 0xf6, 0x9a, 0xa6, 0x3c, 0x85, 0x17, 0x8b, 0xde, 0x2c, - 0x74, 0x8e, 0x09, 0x18, 0xd5, 0x46, 0x34, 0x0a, 0x94, 0xe8, 0x7b, 0x96, 0xbd, 0x7c, 0x4a, 0xd8, - 0x47, 0x3b, 0x3b, 0x40, 0xb9, 0x7a, 0x90, 0x81, 0x57, 0x14, 0xbe, 0xe6, 0x41, 0xb3, 0x99, 0xc7, - 0x12, 0x20, 0xba, 0xc4, 0xcd, 0xa1, 0xc9, 0x82, 0xe1, 0x83, 0x93, 0x40, 0x51, 0xd4, 0xfe, 0xd6, - 0x62, 0x74, 0xf3, 0x71, 0x72, 0x37, 0xba, 0x79, 0x90, 0xb7, 0xc2, 0xe8, 0x2e, 0xc6, 0x05, 0xb5, - 0x1f, 0xfe, 0xbf, 0x24, 0x34, 0x77, 0x73, 0xbc, 0x4d, 0xa5, 0x1e, 0xab, 0x40, 0x3c, 0x9b, 0x32, - 0xc8, 0x87, 0x70, 0xb5, 0xba, 0x76, 0x40, 0x4a, 0xc2, 0x6e, 0x49, 0x53, 0x9e, 0x67, 0x97, 0x1d, - 0xb9, 0xf3, 0x23, 0xe6, 0x65, 0xdb, 0xe5, 0x53, 0xde, 0xb5, 0xfa, 0xa5, 0xbd, 0xd4, 0xb7, 0xe0, - 0xda, 0xa7, 0x86, 0x8a, 0xe0, 0x12, 0x2e, 0x00, 0x1a, 0xda, 0x9e, 0xbc, 0x85, 0xc9, 0x0d, 0x5f, - 0xc9, 0x0d, 0x9c, 0x66, 0xb2, 0xbd, 0xc6, 0x5f, 0x55, 0xbc, 0x60, 0xf0, 0x0b, 0xac, 0x5e, 0x0f, - 0xba, 0x3b, 0xa8, 0xb6, 0xb0, 0xd1, 0xae, 0x4f, 0xc6, 0x5b, 0x5c, 0x04, 0xc4, 0x09, 0xca, 0x55, - 0x40, 0x9c, 0x81, 0x29, 0x09, 0x3e, 0x20, 0xd7, 0x5a, 0xf3, 0x4c, 0xef, 0xc2, 0xf3, 0x23, 0x13, - 0xc7, 0x99, 0x6b, 0xe6, 0x06, 0xab, 0xaf, 0x6a, 0x66, 0xe4, 0x1d, 0x0e, 0x97, 0x19, 0xba, 0x08, - 0xa0, 0x86, 0xa6, 0x1c, 0xdb, 0x9b, 0x7d, 0x6f, 0x70, 0x7c, 0x90, 0xd2, 0x24, 0x33, 0x72, 0x30, - 0xd7, 0x71, 0x55, 0xef, 0xbf, 0xc0, 0xdc, 0xc7, 0x2e, 0x02, 0x4d, 0x02, 0x5f, 0x84, 0x26, 0xbf, - 0x9e, 0x86, 0xee, 0xac, 0x6d, 0x56, 0x43, 0x31, 0xea, 0xf7, 0x07, 0x04, 0xb1, 0xbb, 0x59, 0xe4, - 0x83, 0x30, 0x6a, 0x2c, 0x2f, 0x02, 0x92, 0xdd, 0xf0, 0x4d, 0xd3, 0x94, 0x5f, 0x7a, 0xf0, 0x42, - 0xf1, 0x42, 0x8e, 0x62, 0xca, 0xa6, 0xde, 0xfb, 0x89, 0xa7, 0x48, 0x92, 0x5c, 0x3f, 0x99, 0x19, - 0x79, 0x87, 0x13, 0x80, 0x97, 0xeb, 0xd7, 0xaf, 0x66, 0x87, 0x3a, 0x73, 0x3d, 0x7b, 0x69, 0x96, - 0x7a, 0xe1, 0x53, 0xbf, 0x6a, 0x7f, 0xcb, 0xbc, 0x38, 0x1d, 0x1a, 0xd6, 0x47, 0xdf, 0xca, 0x5e, - 0xa4, 0x3f, 0x8d, 0x86, 0x63, 0xef, 0xf2, 0x5a, 0x78, 0x6e, 0x4e, 0xc3, 0x39, 0x82, 0xad, 0x1a, - 0xe9, 0x1c, 0xdf, 0x33, 0x96, 0x3b, 0x3d, 0x60, 0xc8, 0x1c, 0xe9, 0x1f, 0x1c, 0xef, 0x01, 0x12, - 0x96, 0x27, 0x60, 0xd2, 0xc6, 0xf7, 0x8c, 0x65, 0x6e, 0x7c, 0x30, 0x3e, 0xf8, 0x26, 0x65, 0x74, - 0x02, 0xac, 0x5f, 0xfb, 0x34, 0x37, 0x72, 0x48, 0x1f, 0xe8, 0xce, 0xee, 0xef, 0xe1, 0xfa, 0x00, - 0x32, 0xf9, 0x42, 0x9f, 0xe3, 0x37, 0xde, 0xd7, 0x87, 0xcf, 0xdd, 0x1c, 0xed, 0x86, 0xc2, 0x89, - 0xf6, 0xbe, 0xf1, 0x1b, 0xfb, 0xe8, 0xbb, 0xa0, 0xbe, 0x8e, 0x6d, 0xa1, 0xd4, 0x2e, 0x90, 0x82, - 0xf1, 0xc1, 0x73, 0xb9, 0x91, 0xbd, 0x20, 0xf5, 0x4c, 0x16, 0x9e, 0x08, 0xac, 0x99, 0xc2, 0xbc, - 0x93, 0x32, 0x36, 0xf9, 0x9f, 0x94, 0xa0, 0xbb, 0x6c, 0xf3, 0xb5, 0x5d, 0xb6, 0x9f, 0x33, 0x3b, - 0x00, 0x31, 0x06, 0x78, 0xb8, 0x28, 0x58, 0xe6, 0x71, 0x3b, 0x4d, 0x53, 0xfe, 0x5f, 0x0f, 0x7e, - 0xae, 0x00, 0x0b, 0x10, 0x7e, 0xbf, 0x91, 0x3b, 0x7c, 0xe1, 0x27, 0xad, 0x6a, 0x72, 0x37, 0x0d, - 0x7e, 0x4d, 0x78, 0x82, 0xa6, 0x3e, 0x26, 0x14, 0xfd, 0x1d, 0xc7, 0x7c, 0x09, 0x8e, 0x59, 0xeb, - 0xc0, 0x31, 0xf2, 0xe4, 0x1c, 0x83, 0xff, 0x9a, 0x6e, 0xd6, 0x2c, 0xaa, 0xa2, 0xa8, 0x75, 0xd2, - 0xb2, 0x02, 0x9e, 0xc6, 0x56, 0x25, 0x91, 0xd2, 0x94, 0x27, 0xf0, 0x5c, 0x18, 0xaf, 0xf1, 0x51, - 0x6a, 0x6e, 0xa9, 0x63, 0x23, 0xf1, 0xb4, 0x7e, 0x87, 0x6b, 0x42, 0xf0, 0xd6, 0xde, 0xc2, 0xc1, - 0xe0, 0x21, 0x16, 0x9e, 0xaa, 0x1e, 0xc4, 0xff, 0x49, 0xb2, 0xb8, 0x52, 0x33, 0x31, 0x58, 0x3e, - 0xd9, 0xa8, 0x4d, 0x29, 0x08, 0x14, 0x03, 0xfa, 0x1b, 0x45, 0x51, 0x9e, 0x04, 0xc5, 0x69, 0x68, - 0x3e, 0x6c, 0x52, 0x48, 0x79, 0x9d, 0x9a, 0x8a, 0x26, 0x55, 0xe2, 0x4c, 0x83, 0x5d, 0x2e, 0x6b, - 0xf3, 0xe1, 0x18, 0xaa, 0x2b, 0x8b, 0x05, 0xa7, 0xe8, 0x66, 0x3d, 0x9a, 0x72, 0xda, 0x83, 0x17, - 0xc0, 0x9e, 0x47, 0x80, 0xa0, 0x47, 0x31, 0x9d, 0x9e, 0xfc, 0xdd, 0xd0, 0xd0, 0x45, 0x1b, 0x14, - 0xf5, 0x7a, 0x81, 0xe3, 0xa7, 0xd1, 0x3e, 0x7d, 0x70, 0x74, 0x7c, 0xdf, 0x67, 0xbc, 0x05, 0xe5, - 0x7e, 0x22, 0xc0, 0xc6, 0xca, 0x72, 0xf4, 0x88, 0xde, 0x79, 0x96, 0xbe, 0x89, 0x27, 0x52, 0xc0, - 0xef, 0x3c, 0xf4, 0xeb, 0x57, 0xe1, 0x92, 0x00, 0x14, 0x81, 0x28, 0xe1, 0xb0, 0x9f, 0xc8, 0xf5, - 0x75, 0x44, 0xcc, 0x8f, 0xeb, 0x87, 0x3e, 0x1e, 0xdf, 0x33, 0x96, 0x1d, 0x3c, 0x0c, 0x79, 0x6d, - 0xc7, 0xcf, 0x93, 0x88, 0x97, 0x67, 0xce, 0x73, 0xc9, 0xcd, 0x0e, 0x1e, 0xce, 0x5c, 0x3f, 0xa0, - 0x77, 0x1d, 0xd4, 0x2f, 0x1d, 0xba, 0x39, 0xfa, 0xbe, 0xb9, 0x77, 0xd9, 0x77, 0x48, 0xbf, 0x74, - 0x48, 0x9c, 0x42, 0x68, 0x3b, 0x3e, 0x78, 0x0d, 0xb4, 0x9b, 0x4d, 0x4b, 0x92, 0x89, 0x7d, 0xd2, - 0xbf, 0x76, 0x0a, 0xbc, 0x4b, 0x07, 0xca, 0xb4, 0xf9, 0xb0, 0xc7, 0x69, 0x8a, 0x49, 0x34, 0x8a, - 0x22, 0xa6, 0xd8, 0x80, 0x9b, 0xc2, 0x14, 0x03, 0x38, 0x9d, 0xe2, 0x3f, 0x94, 0x34, 0xe5, 0x0f, - 0xf2, 0x66, 0xd8, 0x00, 0xa0, 0x33, 0x1c, 0xb2, 0x4f, 0x70, 0xa8, 0x35, 0x1d, 0x4f, 0x85, 0x43, - 0xcd, 0xd1, 0x58, 0x13, 0x4f, 0x9f, 0x2a, 0x34, 0xe4, 0x2e, 0x59, 0x84, 0xd0, 0x23, 0x86, 0xda, - 0x7f, 0x6f, 0x30, 0x73, 0x63, 0x20, 0x7b, 0xf1, 0x43, 0x1a, 0x5f, 0x79, 0xe8, 0x60, 0x66, 0xa8, - 0x7d, 0x7c, 0xdf, 0x67, 0xd9, 0x3d, 0x9d, 0xfa, 0xde, 0x9f, 0x7f, 0x71, 0xe2, 0xa5, 0xa2, 0xaf, - 0x11, 0xe2, 0x7d, 0xe6, 0x61, 0x9e, 0x0f, 0x04, 0x62, 0x73, 0x34, 0xb6, 0x39, 0xf4, 0x2a, 0xa1, - 0x5d, 0x65, 0x01, 0x62, 0x98, 0x60, 0x93, 0x78, 0x3e, 0xd8, 0xa0, 0x29, 0xe5, 0xc6, 0x88, 0xdb, - 0x17, 0x4d, 0x57, 0xd0, 0x12, 0x8d, 0x19, 0x95, 0x55, 0x2d, 0x00, 0x44, 0xa9, 0xf7, 0x83, 0xe2, - 0xa8, 0x07, 0xd1, 0xcb, 0x8c, 0x7f, 0x2f, 0x1d, 0x9a, 0x38, 0xde, 0x33, 0xf1, 0xd3, 0x0f, 0x44, - 0xda, 0xe9, 0x07, 0x0f, 0x8d, 0x5f, 0xda, 0xa3, 0x9f, 0xe9, 0xe3, 0x34, 0x00, 0x69, 0x81, 0x15, - 0x84, 0x7f, 0x2a, 0x2b, 0x88, 0xc6, 0x78, 0x6b, 0x8c, 0x93, 0xed, 0x88, 0x07, 0x55, 0xac, 0x23, - 0x99, 0x8f, 0xf8, 0xf8, 0x94, 0xd6, 0x74, 0x7c, 0x6b, 0x38, 0xd4, 0xac, 0x62, 0xdb, 0x53, 0x26, - 0x37, 0x48, 0x46, 0xbc, 0x55, 0xc5, 0x37, 0xa0, 0xf4, 0x3b, 0x22, 0x69, 0xca, 0x26, 0xbc, 0x44, - 0x1f, 0x6d, 0xd7, 0x7b, 0x06, 0xf9, 0xde, 0x82, 0x3a, 0x22, 0x11, 0x27, 0xb7, 0x6c, 0xd7, 0x47, - 0xf0, 0x06, 0xcc, 0x6b, 0x81, 0xa2, 0x42, 0x49, 0x40, 0xe0, 0xe8, 0x08, 0xde, 0x45, 0x12, 0x82, - 0x3c, 0xeb, 0x7f, 0x72, 0x0a, 0x04, 0x61, 0xb3, 0xa1, 0x56, 0x41, 0x0e, 0x28, 0x83, 0x2e, 0xc7, - 0x3d, 0xe8, 0x9e, 0xba, 0x68, 0xca, 0x85, 0x30, 0x36, 0x3c, 0x5d, 0x41, 0x19, 0x65, 0x56, 0x4f, - 0xa1, 0x05, 0x25, 0xcd, 0x51, 0x4a, 0x9a, 0xce, 0x2b, 0x13, 0xc7, 0x2e, 0x4e, 0x4a, 0x1a, 0x01, - 0xaa, 0x20, 0x69, 0x14, 0xff, 0xb7, 0xbe, 0x10, 0x69, 0x22, 0x30, 0x5e, 0x83, 0x36, 0x03, 0x12, - 0x42, 0x70, 0x00, 0x48, 0x5e, 0x7b, 0xbb, 0xbc, 0x51, 0x17, 0x72, 0x5b, 0x7a, 0xfd, 0x85, 0x40, - 0x4c, 0x1f, 0xa2, 0x35, 0x98, 0x26, 0x92, 0xa3, 0xaf, 0x62, 0x97, 0xd0, 0xa7, 0xda, 0x47, 0x6e, - 0x40, 0x6e, 0xb8, 0xf1, 0x1b, 0x3d, 0xc6, 0x4e, 0xb2, 0xaf, 0x43, 0xef, 0x79, 0x47, 0x3f, 0x74, - 0x49, 0x78, 0xbc, 0xed, 0xec, 0xf1, 0x99, 0x0e, 0xa5, 0x76, 0x19, 0x03, 0xde, 0xe3, 0x41, 0x33, - 0xc9, 0xdb, 0x72, 0x32, 0x5e, 0x9f, 0xe3, 0xb3, 0x73, 0x71, 0xb8, 0xf7, 0x17, 0x80, 0xa0, 0xa3, - 0xbd, 0x44, 0x34, 0xe6, 0x5c, 0xfa, 0x26, 0x9d, 0x3c, 0x36, 0x37, 0xea, 0xbd, 0x3b, 0xe9, 0x53, - 0x74, 0x52, 0x92, 0xeb, 0xeb, 0x80, 0x31, 0x56, 0xfa, 0xc0, 0x8c, 0x01, 0x38, 0x84, 0xee, 0x5a, - 0xe9, 0x83, 0x5f, 0x99, 0x91, 0xce, 0x89, 0xe3, 0x3d, 0x99, 0xe1, 0x77, 0xa0, 0x0d, 0x34, 0xc8, - 0x0c, 0x1d, 0xce, 0x8c, 0xbc, 0x03, 0x46, 0x0b, 0xca, 0x53, 0x69, 0x35, 0x61, 0xf0, 0xff, 0xf9, - 0x03, 0x90, 0xdb, 0xb5, 0xc0, 0x2b, 0x57, 0x03, 0xed, 0xaa, 0xd7, 0x8d, 0x7f, 0x2d, 0xaf, 0xd5, - 0x4f, 0x73, 0xbf, 0x57, 0xe7, 0x69, 0x33, 0xeb, 0x26, 0xf1, 0x7b, 0xb5, 0x10, 0x62, 0x93, 0xa6, - 0x2c, 0xc6, 0x08, 0x54, 0x1c, 0xa1, 0xc0, 0x5c, 0xf3, 0x6f, 0xe1, 0x24, 0xcc, 0xd9, 0x75, 0xd0, - 0x32, 0x52, 0x63, 0x8c, 0x27, 0x24, 0x84, 0xe0, 0x0c, 0xd3, 0x79, 0x8c, 0x66, 0x9d, 0xeb, 0x18, - 0x45, 0x10, 0x3a, 0xc6, 0x7a, 0x32, 0x46, 0x38, 0x63, 0x84, 0x31, 0x8a, 0xa7, 0x9e, 0x46, 0x09, - 0xb8, 0x07, 0x06, 0x26, 0x1d, 0x23, 0xfe, 0x00, 0xdc, 0xd0, 0xc9, 0xe8, 0x9c, 0xdc, 0xd0, 0xc5, - 0xa1, 0xdd, 0xe7, 0x5a, 0x4f, 0xc7, 0xf5, 0x82, 0xa6, 0x3c, 0xc4, 0xdc, 0xd0, 0xc9, 0xb8, 0x2a, - 0xc4, 0x23, 0x45, 0x92, 0x5a, 0x54, 0x3c, 0x4d, 0xf4, 0xe3, 0xc9, 0xc7, 0x77, 0xdc, 0x83, 0xca, - 0x8c, 0xa5, 0x2b, 0x19, 0xa0, 0xe3, 0xfb, 0x1b, 0x71, 0x84, 0x3e, 0x77, 0x00, 0x3a, 0xc4, 0x3f, - 0x96, 0x34, 0xe5, 0x9c, 0xc4, 0x56, 0xbb, 0x46, 0x15, 0x5d, 0xed, 0xf6, 0xba, 0x9e, 0x9f, 0x99, - 0x40, 0xb7, 0xe2, 0xe8, 0xec, 0x1e, 0xec, 0xa6, 0x09, 0x70, 0x8f, 0x07, 0x2d, 0x00, 0xc5, 0xc3, - 0x94, 0x6d, 0x34, 0xd6, 0xf4, 0x7c, 0x22, 0x1d, 0x8d, 0xc7, 0xec, 0xaf, 0x7c, 0x5d, 0x00, 0x5d, - 0x5f, 0xf9, 0xba, 0xc2, 0x53, 0x42, 0xbe, 0x2b, 0x69, 0x4a, 0x08, 0x2f, 0xb6, 0x84, 0xaf, 0xb0, - 0x41, 0x7b, 0x9f, 0x29, 0x5c, 0xcf, 0xaf, 0x4c, 0xe8, 0xc7, 0x57, 0x70, 0xfd, 0x9c, 0x84, 0x78, - 0xcc, 0xf0, 0x6a, 0xc4, 0xef, 0xe4, 0xd5, 0x24, 0xac, 0x39, 0xe2, 0xa4, 0x33, 0x43, 0xde, 0x32, - 0x1e, 0xe6, 0x9f, 0x57, 0x04, 0x49, 0x5c, 0x00, 0x5d, 0x49, 0xe2, 0x0a, 0x4f, 0x49, 0x92, 0x03, - 0x67, 0x84, 0xc7, 0x2d, 0x4e, 0x78, 0x36, 0xf0, 0x4a, 0x9f, 0x65, 0x0f, 0xdf, 0x79, 0x61, 0x62, - 0xdf, 0x21, 0x68, 0xe1, 0x6d, 0xb6, 0xb5, 0x4c, 0xe5, 0x51, 0x2b, 0x33, 0xd4, 0x9e, 0x19, 0xfa, - 0xd8, 0xad, 0x6b, 0x43, 0x51, 0x0f, 0x1f, 0x06, 0x18, 0x60, 0x21, 0x83, 0xc0, 0x9f, 0xfd, 0x54, - 0x1f, 0x3d, 0x02, 0x62, 0x97, 0x19, 0x1a, 0xe6, 0x47, 0xd7, 0x05, 0x7c, 0x02, 0x6d, 0xa4, 0xcd, - 0x0f, 0x30, 0xb0, 0xcf, 0xc3, 0x7c, 0x02, 0x8b, 0x20, 0xb3, 0x0b, 0xa0, 0x2b, 0x99, 0x5d, 0xe1, - 0x29, 0x99, 0xdf, 0x26, 0x87, 0xb8, 0x8b, 0x2d, 0x3e, 0x80, 0x76, 0xce, 0x5b, 0x41, 0xaf, 0x60, - 0xe0, 0xa4, 0x86, 0xdd, 0x04, 0xb8, 0x81, 0x17, 0xf0, 0x1c, 0x2c, 0x48, 0x0c, 0x83, 0x12, 0x77, - 0x6f, 0x50, 0xd3, 0x76, 0x32, 0x38, 0x45, 0x03, 0x74, 0xa5, 0x41, 0x65, 0x71, 0xc0, 0x82, 0xe8, - 0x7d, 0x97, 0x5d, 0x72, 0xb8, 0x12, 0x60, 0xad, 0xa8, 0x7b, 0x39, 0x01, 0x0a, 0xd0, 0x40, 0xf4, - 0x9f, 0xc0, 0x53, 0xa7, 0xc4, 0xff, 0xed, 0x01, 0x1f, 0x4a, 0x3b, 0x29, 0x1c, 0x6f, 0x70, 0x5c, - 0x69, 0xb1, 0xa2, 0x48, 0x68, 0x4a, 0x8c, 0x7f, 0x92, 0x34, 0xe5, 0xcf, 0x24, 0xbc, 0xa4, 0x30, - 0x35, 0xa8, 0x92, 0x3f, 0x3b, 0xd9, 0x1b, 0x4c, 0x97, 0x86, 0xb7, 0x42, 0xf1, 0x3b, 0xfb, 0x72, - 0xda, 0xe6, 0x00, 0xbf, 0xed, 0xa4, 0xf2, 0xb6, 0xa6, 0x43, 0xe9, 0xd6, 0x54, 0x11, 0x2a, 0x0f, - 0x00, 0x8b, 0x57, 0x79, 0x0c, 0x9e, 0x52, 0xff, 0xa0, 0xa4, 0x29, 0xdf, 0xc6, 0x7e, 0xd8, 0xc8, - 0x54, 0xc1, 0xa2, 0x9d, 0xde, 0xa1, 0x90, 0x4b, 0x70, 0x73, 0x45, 0x5f, 0x04, 0x0c, 0x41, 0xfb, - 0x5b, 0xde, 0xc7, 0xa6, 0xca, 0x7a, 0x55, 0x29, 0x32, 0x28, 0x43, 0x31, 0xbd, 0xed, 0x41, 0xf3, - 0xb6, 0xee, 0x8e, 0x85, 0x8b, 0x60, 0x42, 0x47, 0x30, 0x57, 0x26, 0x74, 0x81, 0x16, 0x24, 0xb2, - 0x01, 0x3f, 0x54, 0xab, 0x50, 0xbc, 0x06, 0x4e, 0x4c, 0x1c, 0xef, 0x64, 0xc9, 0xb0, 0xba, 0xb3, - 0x17, 0xcf, 0x8e, 0xef, 0xbb, 0x92, 0x1b, 0x38, 0x9d, 0x7d, 0xe7, 0x7c, 0xee, 0x67, 0x83, 0xde, - 0x22, 0xe1, 0x08, 0x39, 0xaa, 0xbd, 0x8f, 0x4e, 0x9d, 0x1c, 0xbb, 0x63, 0xc4, 0x25, 0xeb, 0xbf, - 0x4b, 0x08, 0x9b, 0x8e, 0x0d, 0xdb, 0x68, 0x6a, 0x7d, 0xfb, 0x29, 0xa2, 0x1d, 0xc6, 0xf5, 0x14, - 0xd1, 0x09, 0x94, 0xd2, 0xa0, 0x53, 0xd2, 0x94, 0x1a, 0x5c, 0x21, 0x46, 0xa3, 0xa2, 0x9b, 0xbc, - 0x0b, 0xa7, 0x73, 0x5d, 0xfb, 0xd9, 0x33, 0x57, 0x7b, 0xcd, 0x32, 0x9a, 0xe0, 0x87, 0x24, 0x72, - 0x80, 0xc7, 0xdc, 0xd5, 0xfe, 0x47, 0x8b, 0x7d, 0xcc, 0x6d, 0x6c, 0xef, 0xd2, 0x74, 0x2c, 0x84, - 0x05, 0xfe, 0xa7, 0x84, 0xb0, 0xf0, 0x2a, 0xc2, 0x15, 0x6b, 0x3b, 0x8c, 0x2b, 0xd6, 0x4e, 0xa0, - 0x14, 0xeb, 0x77, 0x24, 0x4d, 0xa9, 0xc6, 0x8b, 0xe9, 0x63, 0x51, 0x82, 0x88, 0x88, 0x1b, 0x73, - 0xae, 0xb3, 0xbc, 0xb9, 0x10, 0x6a, 0x08, 0xb6, 0x1b, 0xbd, 0xeb, 0xbf, 0x10, 0xb6, 0xb0, 0xb7, - 0x65, 0x43, 0xa2, 0xa6, 0xd9, 0x98, 0x74, 0xd3, 0x6b, 0xc2, 0x1d, 0x7d, 0x3b, 0x8c, 0x2b, 0xfa, - 0x4e, 0xa0, 0xc2, 0xa4, 0xaf, 0x31, 0x26, 0xfd, 0x14, 0xbf, 0x44, 0x14, 0x9d, 0x43, 0xbd, 0x15, - 0xe2, 0xc6, 0x44, 0x44, 0x9f, 0x20, 0xfe, 0xed, 0xc0, 0x57, 0x84, 0x38, 0xfe, 0xb5, 0xc7, 0xbc, - 0x09, 0xe0, 0x38, 0x2f, 0x75, 0x3b, 0x03, 0xcf, 0xc7, 0x78, 0xd9, 0xe4, 0x80, 0x14, 0x5f, 0xcd, - 0xa3, 0x29, 0x7f, 0xc9, 0xad, 0x8d, 0x18, 0xaf, 0x40, 0x44, 0x8e, 0x5a, 0x9b, 0x0b, 0xae, 0xd6, - 0x46, 0xa4, 0xd4, 0x6f, 0xcd, 0xc2, 0xf0, 0xd1, 0x8a, 0x01, 0x50, 0x84, 0xd9, 0x78, 0x0c, 0x7f, - 0x31, 0xa1, 0x33, 0x24, 0x6e, 0x0e, 0xbd, 0x64, 0xe1, 0xb4, 0x7f, 0xc8, 0xe5, 0x16, 0x26, 0x9f, - 0xf4, 0x4b, 0x27, 0x85, 0xa3, 0x94, 0x3f, 0x26, 0x69, 0xca, 0x7a, 0x1c, 0xb0, 0x13, 0x5e, 0xef, - 0xbc, 0x96, 0x19, 0x7b, 0x57, 0xc4, 0x86, 0x3e, 0x89, 0xa9, 0x10, 0xe3, 0xe8, 0x88, 0x35, 0xc0, - 0x7b, 0xf8, 0xab, 0xe2, 0xbd, 0x7f, 0xc7, 0xd5, 0x2c, 0x44, 0x37, 0x0d, 0x87, 0xe3, 0xad, 0xb1, - 0xb4, 0x9b, 0x9a, 0x15, 0x61, 0x26, 0x51, 0xb3, 0x56, 0x50, 0xf3, 0xe5, 0xe0, 0x4a, 0x6c, 0x26, - 0xa3, 0x1e, 0xff, 0xec, 0x9c, 0x7e, 0xe8, 0x1a, 0x95, 0x36, 0xe7, 0xe2, 0x82, 0xd1, 0x00, 0xf3, - 0x82, 0xc9, 0x85, 0xe0, 0x6b, 0x44, 0x91, 0xfe, 0x07, 0xae, 0x48, 0x0b, 0xe3, 0x65, 0x87, 0x99, - 0x44, 0x91, 0x3a, 0xe2, 0x15, 0xb3, 0x7a, 0xf7, 0x03, 0x02, 0x82, 0x77, 0xbf, 0x0d, 0xa3, 0xa7, - 0xbc, 0x8f, 0x4f, 0x05, 0xa3, 0xaa, 0xd7, 0xe9, 0x5f, 0x54, 0x4f, 0x1e, 0xf6, 0xa0, 0xbb, 0x36, - 0x47, 0x9b, 0x92, 0xf9, 0xe8, 0xd9, 0xc6, 0xec, 0x00, 0xe4, 0x7a, 0xd5, 0xec, 0x08, 0x4b, 0x11, - 0xfc, 0x50, 0xd2, 0x94, 0x28, 0x9e, 0x03, 0xcf, 0x37, 0x4d, 0x0c, 0xb7, 0x43, 0x81, 0xfe, 0xf6, - 0x29, 0x7d, 0x70, 0x6f, 0x1e, 0x9e, 0x2c, 0x64, 0xde, 0xc1, 0x23, 0x99, 0xa1, 0x8f, 0xa1, 0x02, - 0xa0, 0x7f, 0xd5, 0xfe, 0xa6, 0x7e, 0xa6, 0x0f, 0x4a, 0x8c, 0xbf, 0x3b, 0x2f, 0x4c, 0xec, 0xb9, - 0x20, 0x02, 0x80, 0x19, 0x5d, 0xed, 0x9d, 0xf2, 0xa4, 0xff, 0x17, 0x6e, 0x3e, 0x0a, 0x4f, 0xba, - 0x1d, 0x66, 0x12, 0xf3, 0xe1, 0x48, 0x93, 0x37, 0x0c, 0xe3, 0x59, 0x21, 0x7a, 0x44, 0x5b, 0xf8, - 0x79, 0xb1, 0xdd, 0x29, 0xda, 0xc6, 0x06, 0xd5, 0x81, 0x2f, 0xcc, 0x06, 0xf8, 0xaf, 0x3d, 0x82, - 0xb3, 0x2f, 0x43, 0xd5, 0xdd, 0xd9, 0x37, 0x0f, 0xd1, 0x65, 0x93, 0x03, 0x52, 0x34, 0xff, 0x9b, - 0xa4, 0x29, 0x57, 0x25, 0xab, 0xbb, 0x2f, 0x20, 0x42, 0x2d, 0xc5, 0xf1, 0x49, 0x3c, 0xa6, 0x45, - 0xe0, 0xdf, 0xda, 0x5e, 0x04, 0x3e, 0x4a, 0x88, 0xbc, 0x12, 0x4f, 0x89, 0x91, 0xf0, 0x7f, 0xf7, - 0xa0, 0xf9, 0xf9, 0xd4, 0xd8, 0x16, 0x6f, 0x50, 0x93, 0x2d, 0x6e, 0xbe, 0x7f, 0x26, 0x9c, 0x01, - 0x35, 0x89, 0xef, 0x5f, 0x3e, 0x30, 0x25, 0xf3, 0x3f, 0x4a, 0x9a, 0xf2, 0xd7, 0x12, 0x7e, 0xdc, - 0x8d, 0xcc, 0x95, 0x3e, 0x31, 0x50, 0x04, 0xc4, 0x8a, 0xa1, 0x77, 0xb4, 0xa4, 0xc5, 0xd7, 0x7e, - 0x1a, 0x9c, 0x7d, 0xd7, 0x39, 0xd5, 0x75, 0x09, 0xe1, 0xed, 0x6a, 0x32, 0xfa, 0xf2, 0xee, 0xc2, - 0xb2, 0x6b, 0x87, 0x71, 0x95, 0x5d, 0x27, 0x50, 0x4a, 0xed, 0x57, 0xc9, 0xca, 0x0f, 0xe2, 0x1e, - 0x70, 0xbd, 0xc5, 0x43, 0xb6, 0x7a, 0x5d, 0x6b, 0x0a, 0x5c, 0x8d, 0xba, 0x4b, 0xad, 0x25, 0x0e, - 0xc2, 0x2f, 0x61, 0xbd, 0x61, 0x71, 0xd1, 0x7f, 0xc8, 0xfd, 0x69, 0x93, 0xc5, 0x43, 0x7f, 0xe9, - 0xa4, 0x70, 0xa6, 0x9d, 0x95, 0xf1, 0x02, 0x98, 0x08, 0x32, 0x1e, 0x70, 0xb8, 0xa7, 0x02, 0xeb, - 0x56, 0x51, 0x30, 0x3e, 0x5c, 0x1e, 0x72, 0x49, 0x3a, 0xf4, 0x71, 0x09, 0xdd, 0x65, 0x1d, 0xc5, - 0xf7, 0xe3, 0x31, 0x35, 0x65, 0xb7, 0x44, 0x0e, 0x40, 0xae, 0x96, 0xc8, 0x11, 0xd6, 0x9c, 0xb9, - 0x3a, 0xec, 0xb3, 0x63, 0x40, 0x66, 0x48, 0xef, 0xa6, 0xf1, 0xb2, 0xbd, 0x93, 0x42, 0xc0, 0x95, - 0x0d, 0x5e, 0x5e, 0x0c, 0xb2, 0xaf, 0x11, 0x94, 0xfe, 0x9b, 0x24, 0xe8, 0x05, 0x18, 0x1a, 0x7b, - 0xaa, 0xb9, 0x62, 0x92, 0xa7, 0x13, 0x79, 0xe1, 0xf0, 0x56, 0x16, 0x0b, 0x4e, 0x71, 0x6e, 0x85, - 0x37, 0xd4, 0xf9, 0x18, 0x89, 0x51, 0xc6, 0xbc, 0x85, 0xab, 0xa7, 0xa2, 0x08, 0x79, 0x80, 0xa9, - 0xbf, 0x94, 0xc0, 0x25, 0x18, 0x5e, 0xd0, 0x24, 0xc2, 0x29, 0x5c, 0xe0, 0x81, 0x4d, 0x22, 0x9c, - 0x2a, 0xe8, 0x12, 0x2c, 0x40, 0x99, 0x9e, 0x3b, 0xcf, 0xe2, 0xc5, 0x3c, 0x53, 0x33, 0xbc, 0xa9, - 0x80, 0xa1, 0xb7, 0x25, 0xc2, 0x14, 0xad, 0x49, 0xea, 0x27, 0x7b, 0x3c, 0x22, 0xe2, 0xd5, 0x66, - 0x60, 0xf0, 0x77, 0xe2, 0x13, 0x99, 0xad, 0xad, 0x8d, 0x31, 0x35, 0x5d, 0xe8, 0x89, 0x0c, 0x85, - 0x98, 0xdc, 0x6a, 0x72, 0x40, 0x93, 0x4d, 0x6b, 0x98, 0xb7, 0xb3, 0x31, 0xda, 0x8b, 0x3d, 0xb9, - 0xb1, 0x5e, 0x8a, 0xd3, 0xf2, 0x82, 0xef, 0x49, 0x00, 0x54, 0x58, 0x24, 0x14, 0x29, 0x91, 0x29, - 0x8a, 0x4c, 0x4e, 0x42, 0x0b, 0xcc, 0x61, 0xa9, 0xe1, 0xd6, 0x64, 0x34, 0x0d, 0x11, 0x40, 0x1d, - 0x8e, 0xd4, 0x5c, 0x00, 0x5d, 0x8f, 0xd4, 0x5c, 0xe1, 0x29, 0xda, 0xbb, 0xc8, 0x02, 0x9f, 0xfa, - 0x5e, 0x0d, 0x74, 0xe9, 0x9d, 0x17, 0x72, 0x23, 0x1d, 0x14, 0x6d, 0xe7, 0xe2, 0x82, 0x2e, 0xeb, - 0xf9, 0x28, 0xd2, 0x8f, 0x52, 0x97, 0xf5, 0x3f, 0x94, 0xe0, 0x91, 0xd8, 0x46, 0x75, 0x77, 0x22, - 0x14, 0x4d, 0xa6, 0x9c, 0x1f, 0x89, 0x6d, 0x54, 0x77, 0x37, 0x18, 0xb5, 0x05, 0x1f, 0x89, 0x99, - 0x40, 0xe6, 0x2b, 0x03, 0x13, 0x91, 0xc1, 0xbd, 0x13, 0xda, 0x59, 0x12, 0xd3, 0xdc, 0x82, 0x88, - 0xb5, 0x78, 0x2a, 0x22, 0xb6, 0x8b, 0x8d, 0xf8, 0xa6, 0xa8, 0x53, 0xea, 0x69, 0xce, 0xc8, 0x6d, - 0xbb, 0x13, 0x6a, 0x0a, 0xbb, 0x2f, 0x1f, 0x44, 0xb8, 0x82, 0x07, 0xcf, 0x0e, 0xd0, 0x26, 0x7b, - 0x7e, 0x8b, 0xdd, 0x23, 0x92, 0x47, 0x24, 0xfd, 0xc3, 0xfa, 0x89, 0x03, 0xde, 0x65, 0xc0, 0x99, - 0x62, 0x4e, 0xa9, 0x7c, 0x18, 0x01, 0xd9, 0x47, 0xf0, 0xea, 0x62, 0x90, 0x65, 0xa9, 0x30, 0xd3, - 0x04, 0xad, 0x3f, 0x67, 0x01, 0xf9, 0x8c, 0x6a, 0x1a, 0x7a, 0x31, 0x85, 0xdd, 0x05, 0x8b, 0x81, - 0xb8, 0xba, 0x48, 0x3b, 0x40, 0x5a, 0xe6, 0x90, 0x2b, 0x10, 0xd8, 0x77, 0xb3, 0x39, 0x74, 0x2c, - 0x9e, 0xca, 0x1c, 0xb2, 0xdd, 0x36, 0xfe, 0x1f, 0xa2, 0x4a, 0x79, 0x3e, 0x55, 0xdf, 0x12, 0x6a, - 0x52, 0x0b, 0xa8, 0x14, 0x0a, 0x31, 0xb9, 0x4a, 0xe1, 0x80, 0x14, 0x9d, 0x1e, 0x49, 0x53, 0xbe, - 0xcf, 0x82, 0xc6, 0x92, 0x09, 0x11, 0xb2, 0x8e, 0x4d, 0x1c, 0xe9, 0xd7, 0xf7, 0x1c, 0xa2, 0xc8, - 0xad, 0x29, 0x38, 0x8d, 0x2e, 0xad, 0xa6, 0xa2, 0x6b, 0xe2, 0xa9, 0x28, 0xc1, 0x72, 0x82, 0xba, - 0x7a, 0x5a, 0x18, 0x2d, 0x85, 0x97, 0x4f, 0xca, 0x8c, 0xa9, 0x82, 0xae, 0x9e, 0xf9, 0xa0, 0xe6, - 0xb3, 0xc3, 0x3a, 0x91, 0x69, 0x29, 0xb6, 0xab, 0xdc, 0xb0, 0xd5, 0x7b, 0x3a, 0x32, 0x43, 0x1f, - 0x43, 0x30, 0x61, 0x31, 0x0e, 0x6c, 0xc1, 0xe8, 0xae, 0x2e, 0xcc, 0x9b, 0xc2, 0xff, 0xbb, 0xb0, - 0xd2, 0x61, 0xbb, 0x82, 0xdd, 0x09, 0xd5, 0x7d, 0xa5, 0x23, 0x00, 0x4d, 0xba, 0xd2, 0xb1, 0xc0, - 0x52, 0x74, 0x93, 0x9a, 0xf2, 0x38, 0x53, 0x41, 0x7c, 0x25, 0x0a, 0x59, 0x23, 0xbc, 0xf7, 0x01, - 0xce, 0xca, 0xc6, 0xad, 0x1b, 0x1d, 0x01, 0x0a, 0xf8, 0xee, 0xba, 0xad, 0x53, 0x0d, 0xf1, 0x34, - 0x26, 0xf4, 0x1e, 0x36, 0xa6, 0x9a, 0x50, 0x2c, 0xf2, 0x4a, 0x34, 0x92, 0xde, 0xd9, 0x10, 0x0a, - 0xef, 0x0a, 0x35, 0xa9, 0x29, 0xbb, 0xa7, 0x95, 0x2b, 0xa8, 0xab, 0xa7, 0x55, 0x81, 0x16, 0x14, - 0xed, 0x26, 0x58, 0x9a, 0x33, 0xac, 0xf4, 0xce, 0xcb, 0x99, 0xe1, 0x9f, 0xe9, 0x43, 0xe7, 0xf4, - 0x81, 0x31, 0xbd, 0xbb, 0xd3, 0xeb, 0x5a, 0x33, 0x95, 0xa5, 0x40, 0xe3, 0x2b, 0x89, 0x14, 0xfe, - 0x63, 0xaa, 0x89, 0x9e, 0x4f, 0xd0, 0xa8, 0x1f, 0x9b, 0xe2, 0x4d, 0x2e, 0x9a, 0xc8, 0x02, 0x52, - 0x50, 0x13, 0xe5, 0x41, 0x9a, 0xa1, 0x14, 0x38, 0x4e, 0x20, 0x7f, 0xd9, 0x63, 0x67, 0xf5, 0x1b, - 0x34, 0xd7, 0xbb, 0xd7, 0xb5, 0xa6, 0x80, 0xa7, 0x49, 0x9c, 0x7d, 0xa8, 0xd9, 0x18, 0xf5, 0xbf, - 0xa1, 0x82, 0x18, 0x54, 0x53, 0xf1, 0xd6, 0x64, 0x58, 0xdd, 0x1a, 0xde, 0xa9, 0xb6, 0x84, 0x9c, - 0x05, 0xd1, 0x0a, 0xc3, 0xb0, 0x59, 0xec, 0x1c, 0xf9, 0x8f, 0x36, 0x48, 0xf8, 0x7f, 0x2c, 0xa0, - 0x40, 0xf7, 0x9d, 0x17, 0x4e, 0x73, 0x7b, 0xe0, 0x75, 0xad, 0x29, 0xa0, 0x56, 0x92, 0x74, 0x20, - 0x29, 0x32, 0x10, 0xe1, 0x85, 0xef, 0x2f, 0x25, 0x74, 0xe7, 0x06, 0x35, 0x1f, 0x19, 0xa7, 0xe0, - 0x4b, 0xce, 0xb8, 0x14, 0x8a, 0x62, 0xf8, 0x13, 0x17, 0x3c, 0xd8, 0xb9, 0xab, 0x5b, 0x4d, 0x81, - 0x75, 0x8a, 0x1b, 0x1e, 0x55, 0xaf, 0xc7, 0x42, 0x2d, 0xea, 0x1b, 0xf8, 0xa8, 0x07, 0xdd, 0xf5, - 0x42, 0xab, 0x9a, 0xdc, 0x6d, 0x6c, 0xf8, 0x6b, 0x76, 0x2b, 0x61, 0x63, 0xda, 0xea, 0xeb, 0xec, - 0x9a, 0xc3, 0x01, 0xc8, 0x55, 0x73, 0x38, 0xc2, 0x52, 0x76, 0x3b, 0x2b, 0x69, 0x4a, 0x33, 0x5e, - 0x93, 0x3d, 0x75, 0x7a, 0xe2, 0xe3, 0x6e, 0x48, 0x63, 0x01, 0x07, 0x06, 0x95, 0xfa, 0xd8, 0xbb, - 0xd9, 0x63, 0xa7, 0xe0, 0x47, 0xf6, 0xd8, 0x55, 0xf6, 0xc6, 0x82, 0x96, 0xbc, 0x18, 0xdc, 0xe4, - 0xfd, 0x42, 0xad, 0x0a, 0xe4, 0x36, 0x48, 0xa8, 0xc9, 0x96, 0x54, 0x55, 0x88, 0x0c, 0x91, 0x1c, - 0x60, 0xc1, 0x58, 0xdf, 0x60, 0xc1, 0x61, 0x0c, 0x06, 0xab, 0xd9, 0xe8, 0x12, 0xba, 0x44, 0xa8, - 0x2c, 0x96, 0x4f, 0xbf, 0x27, 0x2c, 0xdc, 0xcc, 0x4c, 0x9c, 0x96, 0x85, 0x5b, 0x5e, 0x71, 0x01, - 0x21, 0x8b, 0xc5, 0x23, 0x6a, 0x4b, 0x28, 0x46, 0x03, 0x5c, 0x7c, 0x2e, 0xa1, 0x3b, 0x88, 0x79, - 0xaa, 0x65, 0xa9, 0x0d, 0x9d, 0xe3, 0x4e, 0x9b, 0xf5, 0xc5, 0x30, 0xe4, 0x1b, 0x64, 0x1b, 0x44, - 0x47, 0x46, 0x52, 0x6d, 0x41, 0xe2, 0x27, 0x83, 0xf9, 0x3e, 0x38, 0x06, 0xd9, 0xa0, 0xbc, 0x93, - 0xd4, 0x4f, 0xfe, 0xee, 0xd3, 0x9a, 0x60, 0x25, 0x5c, 0x95, 0x66, 0x18, 0x5c, 0xf0, 0xa0, 0x79, - 0x1b, 0xd4, 0x74, 0xcd, 0xae, 0xad, 0xf1, 0x44, 0x8a, 0xdd, 0x0c, 0x90, 0xcc, 0x58, 0x4e, 0x7e, - 0x1d, 0x76, 0xb0, 0x42, 0xd9, 0x02, 0x9c, 0xa0, 0x29, 0x8b, 0x5e, 0x96, 0x34, 0xa5, 0x05, 0x2f, - 0xa5, 0x8a, 0xef, 0xd4, 0x3e, 0x7d, 0xdf, 0xde, 0xf1, 0x1b, 0x3d, 0xb9, 0x91, 0xcf, 0xc0, 0xe5, - 0x32, 0xd7, 0xd7, 0x21, 0x5e, 0x30, 0x79, 0x6b, 0x00, 0x90, 0x72, 0x65, 0x7f, 0x17, 0x70, 0x1e, - 0x49, 0x92, 0x05, 0x14, 0x39, 0x30, 0x69, 0x1f, 0x70, 0x74, 0x83, 0x9f, 0x70, 0xa0, 0x51, 0xe3, - 0xae, 0x54, 0x3c, 0x91, 0xaa, 0x6a, 0x6c, 0x4d, 0x45, 0x63, 0x6a, 0x2a, 0x55, 0xf5, 0x3a, 0xfb, - 0xcb, 0x20, 0x96, 0x79, 0x55, 0xf4, 0x73, 0x27, 0x52, 0x91, 0xe8, 0xaa, 0x93, 0x93, 0x4a, 0x0c, - 0xb2, 0xba, 0xa2, 0x48, 0x68, 0x4a, 0xaa, 0x5f, 0xdc, 0x1a, 0x52, 0x39, 0xdf, 0x31, 0x15, 0x47, - 0xaa, 0xaa, 0xd7, 0xd3, 0xc2, 0x1d, 0xd3, 0x79, 0x0f, 0xc9, 0x5f, 0x49, 0xa2, 0xe0, 0x32, 0x0c, - 0x49, 0x26, 0xdb, 0x14, 0x76, 0x22, 0x85, 0x03, 0x9c, 0xeb, 0xc1, 0x89, 0x1b, 0x38, 0x25, 0xdd, - 0x45, 0x92, 0xf2, 0x85, 0x5e, 0x78, 0xd6, 0xd4, 0x6e, 0xd5, 0xaf, 0x5f, 0xd1, 0x0f, 0x5d, 0xd2, - 0xf7, 0x76, 0xc2, 0xdb, 0x14, 0x8a, 0xf3, 0xa1, 0xf7, 0x26, 0xf6, 0x1d, 0xf2, 0x06, 0x8b, 0x81, - 0xaa, 0xa4, 0xc7, 0xaf, 0x43, 0x9f, 0x66, 0x4f, 0xbe, 0x0b, 0x24, 0x36, 0x20, 0x6c, 0x04, 0x05, - 0xb7, 0x88, 0x02, 0x4b, 0x12, 0x4a, 0x47, 0x46, 0xa6, 0x36, 0x20, 0xc7, 0xbf, 0x96, 0xd0, 0x9c, - 0x3a, 0xb5, 0xb1, 0xb5, 0x89, 0xb2, 0x43, 0x28, 0xb5, 0xcb, 0x29, 0xfc, 0x80, 0x05, 0xa0, 0x40, - 0xf8, 0x81, 0x3c, 0x38, 0x4a, 0x94, 0x10, 0xb1, 0x80, 0xe3, 0x97, 0xf6, 0x8c, 0x0f, 0x1e, 0xb1, - 0x8f, 0xdc, 0xeb, 0x5a, 0x03, 0xe1, 0x2d, 0xfc, 0xf7, 0xb9, 0x63, 0x13, 0x31, 0xbe, 0x68, 0x28, - 0xf6, 0x77, 0xa9, 0xa4, 0x84, 0xd2, 0xe1, 0x9d, 0xb5, 0xad, 0xa9, 0x74, 0xbc, 0x65, 0xab, 0x9a, - 0x4e, 0x47, 0x63, 0x4d, 0xce, 0x92, 0x62, 0x03, 0x2b, 0x28, 0x29, 0x0e, 0xd0, 0x14, 0xb3, 0x7e, - 0x89, 0x1c, 0x0e, 0xc2, 0xd6, 0xae, 0xbe, 0xc1, 0xd8, 0x0e, 0x1c, 0xf8, 0x48, 0x3f, 0x7e, 0x01, - 0xdc, 0x31, 0x27, 0x4e, 0xd3, 0xe0, 0xd1, 0xde, 0x49, 0x21, 0x08, 0xaa, 0xcf, 0xfb, 0x9f, 0x73, - 0x40, 0xf5, 0x15, 0xb5, 0xb1, 0x2a, 0x2c, 0x7e, 0x3d, 0x55, 0x45, 0xd2, 0x1f, 0x56, 0xbd, 0xce, - 0x33, 0x2d, 0xbe, 0x41, 0xff, 0xae, 0x8f, 0xbc, 0x01, 0xb9, 0x59, 0x36, 0xa8, 0x24, 0xc5, 0xd3, - 0xa0, 0x07, 0x61, 0x03, 0x81, 0xe8, 0x6b, 0x62, 0x6a, 0x5c, 0xfb, 0x22, 0xcd, 0x0e, 0xe3, 0xba, - 0x5b, 0x72, 0x02, 0xa5, 0xc4, 0xf8, 0x23, 0x49, 0x53, 0x62, 0xf8, 0x51, 0xba, 0xcf, 0x25, 0xb2, - 0x6f, 0xb0, 0x2a, 0xb1, 0x17, 0xd9, 0x53, 0xbd, 0xb6, 0x44, 0x2a, 0x14, 0x84, 0x38, 0xb2, 0x78, - 0xbf, 0x58, 0x33, 0x42, 0xb6, 0xe7, 0xfc, 0xeb, 0x5c, 0xc8, 0x56, 0x88, 0x4e, 0xcc, 0x1e, 0x91, - 0x44, 0x8a, 0xb5, 0xc6, 0x7e, 0xc4, 0xa0, 0xd8, 0x87, 0x1e, 0x34, 0x37, 0x3f, 0x31, 0xbd, 0x63, - 0xb4, 0x4e, 0x0b, 0x84, 0xeb, 0xd6, 0xda, 0x0e, 0x28, 0xe4, 0xae, 0x79, 0x19, 0x63, 0x7a, 0x18, - 0x47, 0x70, 0x05, 0x23, 0xeb, 0x6d, 0x10, 0xcb, 0x78, 0x52, 0xc6, 0x82, 0x54, 0x60, 0x37, 0xfb, - 0x57, 0x33, 0x23, 0x34, 0x4a, 0x43, 0x76, 0xff, 0xd1, 0xf1, 0xf6, 0x4e, 0x30, 0xd8, 0x84, 0x46, - 0x9b, 0xfc, 0x1b, 0xbe, 0x2c, 0x8d, 0x52, 0x90, 0xfe, 0x87, 0x44, 0xaf, 0x82, 0xe4, 0xb4, 0x4e, - 0xf9, 0x96, 0xf1, 0xca, 0x22, 0xf3, 0x3a, 0xbb, 0x9e, 0xf8, 0x4d, 0x92, 0x1d, 0x9b, 0xb0, 0xd9, - 0x8f, 0xf1, 0xdd, 0x76, 0xd2, 0xd5, 0xd7, 0x79, 0x83, 0x8e, 0xc4, 0xab, 0xaf, 0xfb, 0xb2, 0xe4, - 0xdb, 0xe2, 0xaf, 0xff, 0xb2, 0xe4, 0x8b, 0x46, 0x04, 0x02, 0x76, 0x7a, 0xc8, 0x9d, 0x8c, 0x98, - 0xdd, 0xd7, 0xf1, 0x4e, 0xc6, 0x21, 0x85, 0xb0, 0xe3, 0x9d, 0x8c, 0x53, 0x9a, 0x60, 0x12, 0x93, - 0x3c, 0x88, 0x8b, 0xcd, 0x38, 0xec, 0x2d, 0x16, 0x90, 0x10, 0x64, 0x9d, 0xff, 0xd9, 0x2f, 0x40, - 0x10, 0x60, 0xa3, 0x08, 0x8c, 0x93, 0x46, 0xbf, 0xb9, 0xd3, 0x96, 0x64, 0xd4, 0x71, 0xdf, 0xe5, - 0x98, 0xc1, 0xd4, 0xbb, 0xbc, 0x08, 0x48, 0x4a, 0x8d, 0xff, 0x55, 0xd2, 0x94, 0x83, 0x12, 0x96, - 0x01, 0xcb, 0xfa, 0x86, 0xaa, 0xfa, 0x86, 0xb6, 0xb5, 0x66, 0x46, 0xfd, 0xdc, 0xc5, 0x2e, 0x40, - 0x8f, 0xe9, 0x21, 0x33, 0x15, 0xaa, 0xf7, 0x3b, 0x94, 0x14, 0x24, 0x2d, 0x0b, 0x5f, 0xd4, 0xf8, - 0xe8, 0x82, 0x87, 0x64, 0xde, 0x1a, 0xff, 0xc5, 0xbb, 0x7a, 0xe7, 0xd9, 0x5c, 0x5f, 0x47, 0x71, - 0x1d, 0x0b, 0x94, 0xac, 0xf1, 0x3f, 0xf5, 0x05, 0x29, 0x59, 0x15, 0x36, 0x10, 0x34, 0xc8, 0xd8, - 0xe1, 0x41, 0xf3, 0x04, 0x27, 0x98, 0xcd, 0xf1, 0x48, 0x6b, 0xb3, 0xba, 0xbe, 0x39, 0xe4, 0x60, - 0xfd, 0x1c, 0xc1, 0x5c, 0xad, 0x9f, 0x0b, 0xb4, 0xe0, 0xce, 0xaa, 0xe0, 0x79, 0x10, 0x86, 0x3f, - 0x33, 0xdc, 0x9b, 0x1b, 0xe9, 0xc8, 0x8c, 0x5c, 0x85, 0x95, 0x88, 0x77, 0x19, 0x2f, 0x66, 0x61, - 0x10, 0x89, 0x6b, 0x75, 0xae, 0x6b, 0x7f, 0xb6, 0xff, 0x13, 0x10, 0x2d, 0x61, 0xcd, 0x52, 0xeb, - 0x7f, 0xba, 0xa8, 0x1b, 0x15, 0x35, 0x99, 0x82, 0x6d, 0x1d, 0xfd, 0xeb, 0x8d, 0xaa, 0x16, 0x32, - 0x2e, 0xc2, 0x4d, 0x07, 0xf8, 0x23, 0xd0, 0x49, 0xc9, 0xe0, 0x08, 0x36, 0xc9, 0x23, 0x50, 0x37, - 0x32, 0x1c, 0x96, 0x34, 0xe5, 0x29, 0x6c, 0xfa, 0xde, 0x58, 0xc8, 0xb0, 0xc4, 0x0c, 0xb8, 0x29, - 0xe0, 0x9f, 0xeb, 0xeb, 0x10, 0xa1, 0x40, 0xc7, 0x78, 0xeb, 0xbf, 0x1c, 0x09, 0xaa, 0x5e, 0x87, - 0x3f, 0xe8, 0x5e, 0x77, 0xbf, 0x07, 0xcd, 0x13, 0x9c, 0x49, 0x0a, 0x51, 0xc3, 0x11, 0xcc, 0x95, - 0x1a, 0x2e, 0xd0, 0x94, 0x1a, 0xbd, 0x40, 0x0d, 0xf0, 0x45, 0xb1, 0x51, 0x83, 0x17, 0x4f, 0x46, - 0x8d, 0x8d, 0x81, 0xaf, 0x8e, 0x1a, 0x86, 0xba, 0xbd, 0x8b, 0x1f, 0xf3, 0x0a, 0x84, 0x70, 0x3f, - 0x0b, 0xb6, 0x93, 0xe1, 0xe1, 0xa2, 0x60, 0x05, 0x96, 0x78, 0x56, 0x38, 0x14, 0xb0, 0x10, 0x61, - 0xa9, 0x9b, 0xdb, 0x44, 0x1e, 0x20, 0xd0, 0x01, 0x7f, 0x85, 0x74, 0x38, 0x2d, 0xa1, 0xe9, 0xdf, - 0x56, 0x43, 0xcd, 0xe9, 0x9d, 0xf6, 0xec, 0x5b, 0x50, 0xee, 0x7a, 0xe8, 0xc1, 0xaa, 0xcd, 0xe8, - 0xb2, 0x6b, 0x70, 0x45, 0xb6, 0xff, 0xa0, 0xb1, 0xf5, 0x78, 0xf3, 0xac, 0x3e, 0x7c, 0x0d, 0x1c, - 0x18, 0xe0, 0xa5, 0x8e, 0xd7, 0xb5, 0x86, 0xe0, 0xb4, 0x10, 0xdf, 0xe3, 0x80, 0xd3, 0x4e, 0xf2, - 0x85, 0x9a, 0x1e, 0x49, 0x53, 0xba, 0x25, 0xec, 0x43, 0x0b, 0xe8, 0xa5, 0xb4, 0x8f, 0x66, 0x50, - 0xf6, 0x29, 0x0d, 0xf5, 0xbe, 0xba, 0x78, 0x58, 0x2e, 0x5d, 0xb5, 0x72, 0xf5, 0xca, 0x55, 0x7e, - 0x54, 0xd5, 0x18, 0x4e, 0x85, 0x12, 0xd1, 0xaa, 0xb6, 0x35, 0x01, 0xc9, 0x23, 0xcf, 0x0d, 0x25, - 0x12, 0xcd, 0xd1, 0x30, 0x39, 0xa1, 0xac, 0xfa, 0x71, 0x2a, 0x1e, 0xab, 0xb6, 0x95, 0x7c, 0xff, - 0x01, 0x74, 0x3f, 0x42, 0x4a, 0x22, 0xba, 0x51, 0xdd, 0xad, 0xb4, 0xa6, 0x77, 0xe2, 0xbb, 0xca, - 0x3c, 0xde, 0xd9, 0xc6, 0x5f, 0xf1, 0x64, 0xf4, 0x35, 0x02, 0xe7, 0xf3, 0x34, 0xce, 0x45, 0x77, - 0x58, 0x80, 0x7e, 0xaf, 0x71, 0x7a, 0x22, 0x19, 0x4f, 0xc7, 0x1f, 0xf9, 0xff, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xf4, 0x92, 0xde, 0x31, 0x99, 0xf8, 0x03, 0x00, + 0x31, 0xf9, 0xb1, 0xcd, 0xdd, 0xac, 0x94, 0x14, 0xe0, 0x1e, 0xd6, 0xaa, 0xd2, 0xe3, 0x02, 0x0b, + 0x17, 0x97, 0x00, 0x52, 0x6d, 0xb0, 0x2f, 0x75, 0xf5, 0x86, 0xcc, 0x16, 0xf1, 0xa7, 0x38, 0xf4, + 0xc8, 0x5e, 0xc5, 0xab, 0x84, 0xf0, 0xc7, 0x3b, 0xe9, 0x60, 0xe7, 0x61, 0x54, 0x8a, 0x2a, 0xed, + 0x11, 0xf2, 0x95, 0x8b, 0x9b, 0xb5, 0x2b, 0x1d, 0xfa, 0xf9, 0x91, 0xf4, 0xc4, 0x65, 0xc0, 0x9d, + 0x8c, 0xc5, 0xd3, 0xed, 0x27, 0x32, 0x1d, 0x57, 0xe0, 0x67, 0x6a, 0xb8, 0x33, 0x19, 0x8b, 0x66, + 0x0e, 0x8d, 0x69, 0xdd, 0x87, 0x67, 0x12, 0xbd, 0xa9, 0x13, 0x63, 0xe9, 0x89, 0xcb, 0xae, 0xda, + 0xf4, 0xf8, 0x0d, 0x6d, 0xfa, 0x24, 0x54, 0x7c, 0x33, 0x18, 0x8e, 0x24, 0xef, 0x8e, 0xea, 0xed, + 0x13, 0x72, 0xbe, 0x1e, 0xf8, 0xcd, 0xa8, 0xb0, 0x25, 0x14, 0x6c, 0xf3, 0x79, 0x95, 0x50, 0xc9, + 0x7c, 0x3c, 0x9a, 0x2a, 0x55, 0xaa, 0x10, 0x28, 0x50, 0x74, 0x90, 0x9e, 0xe3, 0xc7, 0x33, 0x5d, + 0x7d, 0xa9, 0xe9, 0xf1, 0x99, 0x44, 0x6f, 0x32, 0x16, 0x4f, 0xc6, 0x8f, 0xa7, 0x6e, 0x4e, 0x69, + 0xe7, 0x8f, 0xb9, 0x6a, 0x65, 0x5a, 0x97, 0x7f, 0x09, 0x2d, 0x0c, 0x29, 0x8d, 0xbe, 0x60, 0xa0, + 0x64, 0x01, 0x46, 0xf5, 0x94, 0x2a, 0x3d, 0x21, 0x10, 0x90, 0xc8, 0x93, 0xe9, 0xe9, 0x8d, 0x6b, + 0x17, 0x2e, 0x90, 0x21, 0x91, 0x32, 0x7e, 0x0b, 0x5a, 0xd0, 0xd6, 0xe2, 0x71, 0xd5, 0x96, 0x2c, + 0xc4, 0xed, 0x5e, 0x54, 0xa5, 0xe7, 0x04, 0x80, 0x88, 0x02, 0x34, 0xd3, 0x7b, 0xa2, 0xda, 0xc8, + 0x58, 0x5b, 0x8b, 0x67, 0x26, 0xd1, 0x0b, 0x1f, 0x9c, 0xea, 0x9f, 0xd0, 0x3e, 0x39, 0x94, 0x8c, + 0x1d, 0xcb, 0x9c, 0x3b, 0xaf, 0xdd, 0xed, 0xd2, 0x46, 0x3f, 0x97, 0xa1, 0x09, 0xff, 0x26, 0x2a, + 0x6a, 0x09, 0x05, 0x3f, 0x54, 0x3c, 0x11, 0x57, 0x6d, 0xc9, 0x22, 0x8c, 0x51, 0x50, 0xa5, 0x9f, + 0x08, 0x16, 0x54, 0x5c, 0x63, 0x61, 0xed, 0xfa, 0x32, 0xdd, 0x7e, 0x22, 0x35, 0xdc, 0x99, 0x19, + 0x9d, 0x4c, 0x9d, 0x1d, 0x77, 0xd5, 0xca, 0x56, 0x35, 0xfe, 0x20, 0x42, 0x7b, 0x5a, 0xc3, 0xbe, + 0x80, 0x12, 0x0e, 0xbb, 0x6a, 0x4b, 0x0a, 0x31, 0xaa, 0x77, 0x55, 0x69, 0x97, 0xc0, 0x80, 0xc5, + 0x37, 0xa1, 0x65, 0x6a, 0xea, 0xb8, 0x36, 0x3e, 0x8c, 0x97, 0x64, 0x58, 0x3b, 0x3a, 0xea, 0xaa, + 0xad, 0x70, 0xe4, 0x76, 0x62, 0x96, 0xcd, 0x24, 0x7a, 0xf1, 0x52, 0xe9, 0xe7, 0x2e, 0xeb, 0xf1, + 0xc1, 0x64, 0xbc, 0xdf, 0xb9, 0xb5, 0xb6, 0x46, 0x66, 0xb0, 0xf2, 0xfb, 0xd0, 0x62, 0x25, 0xd0, + 0xe6, 0x0b, 0x05, 0x03, 0xcd, 0x4a, 0x20, 0x52, 0x52, 0x84, 0xfb, 0xde, 0xa8, 0x4a, 0x4e, 0x81, + 0x85, 0x8b, 0xcf, 0x5b, 0x7d, 0x4c, 0x4c, 0x6a, 0x71, 0xa3, 0x0f, 0x32, 0x31, 0x78, 0x86, 0x67, + 0x12, 0xbd, 0xe1, 0x88, 0xbb, 0x71, 0x26, 0xd1, 0xeb, 0x55, 0xf6, 0xb4, 0x1a, 0xff, 0xb6, 0x84, + 0x82, 0x5e, 0x99, 0x45, 0xc1, 0xbf, 0x8d, 0x90, 0x12, 0x68, 0xf4, 0x05, 0x94, 0x1d, 0x07, 0x5b, + 0x94, 0x12, 0x84, 0x3b, 0xda, 0xa0, 0x4a, 0xeb, 0x04, 0x06, 0x6c, 0x6e, 0x83, 0x54, 0x62, 0x48, + 0xef, 0x57, 0xb5, 0xc4, 0x49, 0xfd, 0xe3, 0xfe, 0x99, 0x44, 0x6f, 0xd3, 0xcb, 0xe1, 0x7b, 0xd1, + 0xf6, 0x66, 0x25, 0x1c, 0x0c, 0xcb, 0x4c, 0x6d, 0xfe, 0x03, 0xb4, 0xd8, 0x17, 0xae, 0x3b, 0x60, + 0x1c, 0x01, 0x5f, 0x9b, 0x52, 0xb2, 0xd8, 0xc1, 0x95, 0x15, 0xd6, 0xbc, 0xaa, 0x4a, 0x2f, 0x0b, + 0x2c, 0x5c, 0x2c, 0xd7, 0x4f, 0x4f, 0x68, 0x83, 0x57, 0x60, 0x52, 0x52, 0xc7, 0xae, 0x69, 0x7d, + 0x17, 0xa1, 0x1b, 0x63, 0x91, 0xa7, 0x4e, 0xa7, 0xc7, 0x8d, 0x0d, 0xbf, 0xd7, 0xed, 0x0f, 0x2b, + 0x32, 0xdb, 0x8e, 0xdf, 0x45, 0x0f, 0x24, 0x1e, 0xf2, 0x12, 0x3c, 0xe4, 0xe7, 0x55, 0x69, 0x83, + 0xc0, 0xc2, 0xc5, 0x52, 0x32, 0x66, 0xbc, 0x51, 0x67, 0x12, 0xbd, 0xd6, 0xfe, 0xbf, 0x17, 0x6d, + 0x0f, 0xfb, 0x02, 0x8d, 0x7e, 0x45, 0x66, 0x1b, 0xf0, 0xbb, 0xd0, 0x42, 0xbf, 0x7b, 0x8f, 0xe2, + 0x0f, 0x97, 0x14, 0x3b, 0xe6, 0x95, 0x2d, 0x16, 0x9f, 0x59, 0x97, 0x45, 0x2e, 0xc9, 0xb9, 0x59, + 0xb7, 0x05, 0xd7, 0xaa, 0x0b, 0x44, 0x42, 0x07, 0x6b, 0x1e, 0x53, 0xa5, 0xd5, 0x02, 0x69, 0x67, + 0xd2, 0x00, 0xfd, 0xe2, 0x91, 0xd4, 0xf5, 0xaf, 0x64, 0x02, 0xe5, 0x5f, 0x43, 0x8b, 0x3c, 0x21, + 0xc5, 0x1d, 0x09, 0x86, 0x4a, 0x96, 0xe2, 0xb1, 0x3e, 0xa3, 0x4a, 0x0e, 0xc1, 0x84, 0x89, 0xab, + 0xc8, 0x11, 0xc3, 0x2b, 0xa6, 0x75, 0x9f, 0xd5, 0xa6, 0xe2, 0xe9, 0x68, 0x97, 0x6c, 0x96, 0xf3, + 0x6b, 0x11, 0xc2, 0x7f, 0x2a, 0x3b, 0x7c, 0xcd, 0x4a, 0xc9, 0x32, 0x03, 0x83, 0xcc, 0x40, 0x8c, + 0xf2, 0xd6, 0x16, 0xaf, 0x59, 0xbe, 0x1c, 0xca, 0x2d, 0x08, 0xdf, 0x5e, 0x80, 0x8a, 0xf6, 0x78, + 0xc2, 0x92, 0xd7, 0x1b, 0x0c, 0x84, 0x4b, 0x56, 0xe0, 0x4f, 0xfb, 0xf1, 0x6c, 0x9f, 0x56, 0x63, + 0x56, 0x84, 0xaf, 0x8b, 0x73, 0xaa, 0x74, 0x9b, 0x13, 0xac, 0xf6, 0xe2, 0x18, 0x07, 0x43, 0x24, + 0x5f, 0x7a, 0xea, 0x76, 0xfa, 0xee, 0xd9, 0xf4, 0x68, 0x2f, 0x10, 0xd8, 0xd4, 0xf4, 0xb8, 0x3e, + 0xa0, 0x26, 0xa7, 0x6e, 0x6b, 0xe3, 0x3d, 0xe9, 0x4f, 0xbb, 0x60, 0x9b, 0xc3, 0x87, 0x25, 0x13, + 0xc3, 0xa9, 0x5b, 0x9f, 0x68, 0x89, 0x93, 0xc9, 0xf8, 0xf1, 0x64, 0xec, 0x28, 0xac, 0x2f, 0xd0, + 0x14, 0xa8, 0x00, 0x78, 0xb4, 0x89, 0x49, 0x7d, 0xe2, 0x44, 0x32, 0xd6, 0x9f, 0x1e, 0xbd, 0xac, + 0x75, 0x19, 0x18, 0xa0, 0x5f, 0xa8, 0xaf, 0x8d, 0x10, 0xd2, 0xad, 0x5f, 0xff, 0x54, 0x8b, 0xc5, + 0xb4, 0xee, 0x73, 0xda, 0xd5, 0x63, 0x5a, 0xef, 0x50, 0x72, 0xf2, 0x98, 0x36, 0xd8, 0x0f, 0x18, + 0xd2, 0x37, 0x0e, 0xa5, 0x4e, 0x8c, 0xdd, 0x8b, 0x76, 0xc8, 0xd6, 0xa8, 0xf9, 0xae, 0x02, 0xb4, + 0x58, 0x39, 0x10, 0x09, 0xb9, 0xc9, 0x2c, 0xf0, 0x78, 0x16, 0xca, 0x66, 0x9b, 0x85, 0x3a, 0xab, + 0x2a, 0xcc, 0x43, 0x8c, 0x53, 0xa5, 0x5b, 0x9c, 0xc0, 0xe2, 0x10, 0x2f, 0x65, 0xcf, 0x44, 0xe6, + 0x93, 0x73, 0xda, 0xa5, 0x21, 0xbd, 0xe7, 0x77, 0xda, 0xcd, 0x93, 0xc9, 0xc4, 0xc5, 0x4c, 0x54, + 0x35, 0x8e, 0xbc, 0x79, 0x10, 0x0d, 0x2a, 0x8e, 0x29, 0x57, 0x32, 0x16, 0xcf, 0x7c, 0xd2, 0x99, + 0x3a, 0x79, 0x26, 0x19, 0xef, 0xd5, 0x87, 0x26, 0xab, 0x92, 0xb1, 0x1e, 0xe3, 0x1f, 0x7d, 0xa4, + 0x4f, 0x3b, 0x3a, 0xaa, 0x9d, 0x3c, 0x4c, 0x10, 0xe0, 0x8b, 0x6a, 0xb6, 0xef, 0x4f, 0x1d, 0xbd, + 0xad, 0x47, 0xdb, 0x61, 0x16, 0x72, 0x3f, 0x3e, 0x19, 0xeb, 0x87, 0x05, 0x30, 0x66, 0x81, 0x1d, + 0x33, 0xbf, 0x13, 0x15, 0x86, 0x0f, 0x86, 0x23, 0x4a, 0xb3, 0xab, 0xb6, 0xe4, 0x11, 0xbc, 0x17, + 0x5f, 0x51, 0xa5, 0x17, 0x05, 0x0a, 0x14, 0x85, 0xa6, 0xd6, 0x3d, 0x4a, 0x28, 0xa0, 0x44, 0x94, + 0x30, 0x21, 0xd8, 0x23, 0x63, 0xda, 0x60, 0x67, 0x32, 0x7e, 0x5c, 0x9b, 0xfc, 0x52, 0x1b, 0xb8, + 0x91, 0x8c, 0x1d, 0x4d, 0xff, 0xbe, 0x53, 0x8f, 0x0f, 0x1a, 0x94, 0xdf, 0x6c, 0xc5, 0xdf, 0xe2, + 0x10, 0x82, 0x39, 0xc4, 0x27, 0x72, 0x25, 0xc6, 0xfc, 0x31, 0xa7, 0x4a, 0x03, 0x9c, 0xc0, 0x14, + 0x88, 0x51, 0x8e, 0x0c, 0x7f, 0x7c, 0x34, 0x35, 0x78, 0x98, 0x9e, 0x4c, 0xad, 0xeb, 0x9a, 0x3e, + 0xd2, 0x93, 0x8c, 0x1f, 0xd7, 0x4f, 0xdd, 0x4e, 0x9d, 0xb8, 0xa0, 0x9f, 0xec, 0x9e, 0x49, 0xf4, + 0x6e, 0x95, 0xb6, 0x49, 0x9b, 0xea, 0x6a, 0x77, 0x3b, 0xb7, 0xec, 0x6c, 0xd8, 0x51, 0x27, 0x97, + 0xc1, 0xbe, 0xd1, 0x7b, 0x4e, 0xa7, 0xc6, 0x47, 0x01, 0x4b, 0xf9, 0x4c, 0xa2, 0xd7, 0xb5, 0xad, + 0xb6, 0xae, 0xbe, 0x6e, 0x5b, 0x6d, 0xdd, 0xb6, 0x1d, 0xb4, 0x66, 0xea, 0xd8, 0xb5, 0xd4, 0xe7, + 0xc7, 0x28, 0x29, 0x49, 0x1f, 0xf9, 0x2c, 0x3d, 0xda, 0x9b, 0x9a, 0xba, 0xa5, 0x1f, 0xbd, 0x54, + 0x2e, 0x33, 0xc3, 0xe1, 0x77, 0xa3, 0x85, 0xcd, 0x6e, 0x63, 0xc1, 0x4b, 0x56, 0xcd, 0x7d, 0xe0, + 0xb7, 0xe2, 0x5a, 0xb0, 0x15, 0x4a, 0x55, 0xe9, 0x29, 0x81, 0xb4, 0x33, 0xcf, 0x2e, 0xfc, 0x72, + 0xb8, 0xea, 0xb5, 0xee, 0x53, 0xe9, 0xd1, 0x31, 0x99, 0x14, 0xf3, 0x83, 0x1c, 0x5a, 0x16, 0x50, + 0x22, 0xfb, 0x83, 0xa1, 0xa6, 0x06, 0x25, 0x12, 0xf1, 0x05, 0x1a, 0xc3, 0x25, 0xab, 0x1d, 0x5c, + 0xd9, 0x62, 0x71, 0x6d, 0x76, 0x57, 0xdb, 0x6c, 0xd5, 0x80, 0xd4, 0x67, 0xb7, 0x15, 0xd7, 0x93, + 0xe9, 0x9b, 0x3e, 0x9e, 0x9a, 0x1a, 0xd1, 0x2e, 0xc4, 0x53, 0xa3, 0xd1, 0xf4, 0xf8, 0x57, 0x70, + 0x2d, 0x67, 0x46, 0xa2, 0xe9, 0x2b, 0xed, 0xb0, 0x01, 0xf4, 0xa1, 0x49, 0x80, 0xcb, 0xd9, 0x28, + 0xf8, 0x7f, 0xc9, 0x51, 0x2e, 0xb0, 0xc6, 0x1d, 0xf6, 0x79, 0xe8, 0xb8, 0x1e, 0xc5, 0xe3, 0x9a, + 0x6d, 0x0a, 0xd8, 0xba, 0x35, 0x21, 0x55, 0x0a, 0x0a, 0x79, 0xb1, 0x88, 0xef, 0x90, 0x5d, 0x83, + 0xc7, 0x46, 0x0e, 0xb6, 0x39, 0xc2, 0xe4, 0x57, 0xc7, 0xb4, 0x2b, 0x1d, 0xb0, 0xb1, 0x53, 0x3d, + 0xdd, 0xfa, 0xc8, 0x35, 0xbc, 0xf6, 0xe4, 0x6e, 0x6c, 0x6b, 0xf1, 0xa4, 0xae, 0xf7, 0x18, 0xeb, + 0x65, 0x7e, 0x02, 0xf9, 0x22, 0xf8, 0x90, 0xbc, 0xdd, 0xf1, 0xff, 0x96, 0x43, 0xab, 0x49, 0x81, + 0xe4, 0x6d, 0x73, 0x07, 0x3c, 0x0a, 0xfd, 0x9e, 0x12, 0xfc, 0x3d, 0x3f, 0x9a, 0xe5, 0x7b, 0xec, + 0xb5, 0x6b, 0x7e, 0xab, 0x4a, 0x7f, 0x2e, 0x3c, 0x6a, 0x54, 0x55, 0x72, 0x51, 0x89, 0x6e, 0xf8, + 0xa8, 0xf4, 0xdd, 0xb3, 0x99, 0xd3, 0xb7, 0x53, 0x3d, 0x93, 0x7a, 0xf4, 0x6a, 0xd6, 0x47, 0x69, + 0x83, 0x13, 0xa9, 0x13, 0x63, 0xbe, 0x96, 0xb6, 0x30, 0x14, 0x1b, 0x1f, 0x36, 0x3e, 0xa9, 0x9d, + 0x19, 0x4b, 0xdf, 0x1d, 0x4c, 0x8f, 0xf6, 0x1a, 0x64, 0x12, 0x37, 0x48, 0x5d, 0xef, 0xb9, 0x17, + 0xed, 0x30, 0xd8, 0xba, 0x53, 0x17, 0x53, 0x3d, 0x93, 0x5a, 0xf7, 0xe7, 0x99, 0x91, 0xa8, 0x7e, + 0xb3, 0x43, 0x9e, 0xe5, 0x2b, 0xf8, 0xff, 0x86, 0x43, 0x4b, 0x02, 0x41, 0xaf, 0xf5, 0x59, 0x8f, + 0xe1, 0xcf, 0x7a, 0x3c, 0x67, 0xfb, 0x58, 0x75, 0x6a, 0x54, 0x4e, 0x95, 0xfa, 0x39, 0xc1, 0xd6, + 0x4e, 0xfc, 0x0b, 0xf2, 0x0d, 0x47, 0x3b, 0x52, 0x1d, 0x93, 0x59, 0xa3, 0xd7, 0x7b, 0x3b, 0xd2, + 0xd3, 0xd3, 0xa9, 0xb3, 0xe3, 0xda, 0xf4, 0x49, 0x83, 0x57, 0x08, 0x7a, 0x9a, 0x94, 0x90, 0x7e, + 0xf2, 0x86, 0xde, 0x37, 0x0e, 0x40, 0x58, 0x98, 0xdc, 0x61, 0x1b, 0xc0, 0x81, 0x89, 0xe4, 0xd4, + 0xe5, 0x64, 0xac, 0x8f, 0xe2, 0xac, 0x71, 0x36, 0xe8, 0x03, 0x83, 0xc9, 0xaf, 0xce, 0x12, 0x9a, + 0x35, 0xd0, 0xa1, 0x9f, 0xbc, 0x21, 0xdb, 0x46, 0xc3, 0x7f, 0xc1, 0xa1, 0x85, 0xe1, 0x88, 0x3b, + 0xd2, 0x1a, 0x2e, 0x59, 0x83, 0x89, 0xc5, 0x19, 0x4e, 0x95, 0x7e, 0x29, 0x10, 0x98, 0x28, 0xb3, + 0x54, 0x0e, 0x3a, 0x49, 0x1f, 0x9a, 0x86, 0x9f, 0x4e, 0xb9, 0x4e, 0xda, 0xe1, 0xda, 0xb6, 0x69, + 0x26, 0xd1, 0x2b, 0xef, 0xdc, 0xb6, 0x0d, 0xfe, 0xaa, 0xad, 0xdb, 0x52, 0x47, 0x80, 0x1b, 0xa5, + 0x2d, 0x3b, 0xe5, 0x3a, 0x4c, 0x1a, 0x5c, 0x3b, 0x5c, 0xd2, 0x16, 0xd7, 0x7b, 0xd2, 0x0e, 0xd7, + 0xf6, 0x6d, 0xdf, 0xd4, 0xbc, 0x14, 0x7a, 0x41, 0x2e, 0x34, 0x5b, 0xcb, 0x8b, 0x48, 0x63, 0xb9, + 0xd0, 0x6c, 0x2b, 0x2f, 0x84, 0xa6, 0xf2, 0x52, 0x7b, 0x4b, 0x99, 0x8c, 0xca, 0xb8, 0xc7, 0xe1, + 0x5a, 0x0d, 0x95, 0x3c, 0xce, 0xdc, 0xe3, 0x04, 0x66, 0xbf, 0xc7, 0xf5, 0xb3, 0xb7, 0xf4, 0xa1, + 0x1b, 0xf8, 0x1e, 0x27, 0xe5, 0x7c, 0x2b, 0x5a, 0x4c, 0x0e, 0x23, 0x26, 0x92, 0x4f, 0x60, 0x14, + 0x0d, 0x06, 0xf9, 0x65, 0xe1, 0xe2, 0x4f, 0xd8, 0x33, 0x4e, 0x49, 0x64, 0x59, 0x6b, 0xc0, 0xab, + 0x84, 0xfc, 0xee, 0x83, 0x55, 0xc1, 0x36, 0xfc, 0x6f, 0xf9, 0x37, 0x35, 0x8f, 0x86, 0x56, 0xc9, + 0x85, 0x26, 0x5c, 0x5e, 0x44, 0x0a, 0xe4, 0x3f, 0x93, 0x59, 0x7c, 0xfc, 0xbf, 0xe2, 0xd0, 0xa3, + 0xee, 0xd6, 0x48, 0x70, 0x93, 0x12, 0x30, 0xd8, 0x1f, 0x05, 0x68, 0x99, 0xb1, 0x5f, 0xc2, 0x25, + 0x4f, 0x62, 0xce, 0x8c, 0x10, 0xea, 0xd9, 0x6a, 0x89, 0x11, 0xdb, 0x3d, 0x07, 0x3c, 0x1b, 0x3e, + 0xc4, 0xda, 0x9d, 0x2f, 0xb4, 0xeb, 0xa7, 0xb5, 0x91, 0x31, 0xd8, 0x55, 0x15, 0x0e, 0x58, 0x71, + 0xcc, 0xb2, 0x55, 0x38, 0xb4, 0xbe, 0x2f, 0x69, 0xb5, 0xd4, 0xd4, 0x00, 0xd4, 0x4c, 0x0d, 0x77, + 0x9a, 0x95, 0x93, 0x53, 0xfd, 0x2c, 0x62, 0xd8, 0x27, 0xc9, 0xd8, 0xf5, 0x74, 0xff, 0x1d, 0x6d, + 0x60, 0x48, 0x9e, 0x6d, 0x38, 0xc6, 0xde, 0x29, 0x8c, 0x28, 0xcd, 0x2d, 0x7e, 0x77, 0x44, 0x29, + 0x59, 0x9b, 0x9f, 0x9d, 0x71, 0x05, 0xc2, 0x11, 0xe3, 0x1c, 0xed, 0x20, 0xf5, 0x9c, 0xc1, 0xc0, + 0x5e, 0x5f, 0x63, 0x4d, 0x40, 0x95, 0x9a, 0x04, 0xda, 0x58, 0xdc, 0x3d, 0x4b, 0x17, 0xc9, 0x58, + 0x3c, 0x12, 0x6a, 0x55, 0xf4, 0x53, 0xb7, 0x2b, 0x1c, 0xec, 0x10, 0xd3, 0x47, 0x3e, 0xd3, 0x8e, + 0x8e, 0x19, 0x37, 0x54, 0xf7, 0xa0, 0x8f, 0xf4, 0x50, 0xe1, 0x00, 0x26, 0xc6, 0xfc, 0xad, 0x8f, + 0x8d, 0xea, 0xe7, 0xee, 0x12, 0x01, 0x87, 0x76, 0xc5, 0xff, 0x6b, 0x0e, 0x15, 0xe1, 0x8b, 0xd8, + 0x15, 0xd8, 0x1b, 0x2c, 0x79, 0x6a, 0x6e, 0x26, 0xac, 0xce, 0xac, 0x08, 0x37, 0xce, 0x51, 0x4e, + 0x95, 0x0e, 0x73, 0x82, 0xd5, 0x5e, 0x3c, 0x68, 0x4c, 0x66, 0x87, 0xc9, 0x0b, 0x01, 0xbf, 0x80, + 0x7b, 0xac, 0x70, 0xc0, 0x89, 0x56, 0xc2, 0x7b, 0x76, 0xb7, 0x86, 0xfc, 0x55, 0xfb, 0x95, 0x3d, + 0xfb, 0x82, 0xc1, 0xa6, 0xdd, 0xbe, 0x66, 0x77, 0xa3, 0x21, 0x4d, 0xfb, 0xda, 0x7c, 0x7e, 0xc5, + 0xdb, 0xa8, 0x00, 0x20, 0x75, 0xbd, 0x87, 0x6d, 0xac, 0x77, 0x0f, 0xa5, 0xa3, 0x5d, 0xfa, 0xe9, + 0x89, 0x8c, 0xda, 0xad, 0x4d, 0x4c, 0x26, 0x63, 0x7d, 0xda, 0x60, 0xaf, 0x21, 0xea, 0x61, 0x92, + 0xa6, 0x25, 0x0c, 0x39, 0x46, 0xb6, 0x46, 0xc1, 0xef, 0x46, 0x85, 0xcd, 0x41, 0x6f, 0xab, 0x5f, + 0x71, 0xd5, 0x96, 0x38, 0xf0, 0x6e, 0x76, 0xaa, 0xd2, 0xcf, 0x05, 0x0a, 0xa4, 0xd2, 0xc9, 0xd8, + 0xa8, 0x76, 0xee, 0x94, 0xab, 0xb6, 0xcc, 0x29, 0xe9, 0x77, 0xa6, 0xb4, 0xa3, 0x17, 0x61, 0x07, + 0xe8, 0xa7, 0x6e, 0x43, 0x49, 0x7a, 0xfa, 0x5a, 0xea, 0xea, 0x94, 0x43, 0x8b, 0x5f, 0xd0, 0x12, + 0x87, 0xca, 0x65, 0xda, 0x9e, 0xff, 0x0b, 0xb4, 0x14, 0xf7, 0x66, 0x49, 0xcc, 0x4f, 0xe3, 0x6e, + 0x76, 0xa9, 0x52, 0x83, 0x90, 0x55, 0x24, 0x4a, 0xda, 0x44, 0x42, 0xeb, 0xba, 0x4c, 0x45, 0x63, + 0xe0, 0xc6, 0x4c, 0x49, 0x5f, 0xbf, 0x78, 0x24, 0x3d, 0x71, 0x98, 0x4c, 0x12, 0x6c, 0x53, 0x83, + 0xd9, 0xf8, 0x5d, 0x5c, 0x8b, 0x26, 0xca, 0xcc, 0x9e, 0xb3, 0x50, 0xf2, 0x3e, 0xb4, 0xcc, 0x17, + 0x76, 0x06, 0x9b, 0x9b, 0xa9, 0xc8, 0x5c, 0x52, 0x8a, 0x4f, 0xcc, 0x1b, 0xaa, 0xf4, 0x33, 0x21, + 0xbb, 0xcc, 0x92, 0x67, 0xe2, 0x5a, 0xd7, 0x35, 0xad, 0xeb, 0x26, 0xf4, 0x5d, 0xc1, 0x1c, 0x0a, + 0xda, 0x53, 0x76, 0x5b, 0x7e, 0x23, 0x5a, 0xec, 0x55, 0xc2, 0x9e, 0x90, 0x0f, 0xeb, 0x4a, 0x4a, + 0x9e, 0xc1, 0xdf, 0xf9, 0xac, 0x2a, 0x3d, 0x2d, 0xb0, 0x70, 0x53, 0x8a, 0x4e, 0x8d, 0x1b, 0x37, + 0xa3, 0x3e, 0x30, 0x90, 0xbe, 0x7b, 0x43, 0x66, 0x2b, 0xf0, 0x97, 0x39, 0xb4, 0x8c, 0xec, 0x2a, + 0xa7, 0x3b, 0xa2, 0x34, 0x06, 0x43, 0x07, 0x4b, 0x9e, 0xc5, 0xc8, 0x7e, 0xa3, 0x4a, 0x07, 0x84, + 0xec, 0x32, 0x51, 0xb1, 0x84, 0xa4, 0xee, 0xcf, 0xb1, 0x70, 0x3f, 0x95, 0xbe, 0xd2, 0x6e, 0xf0, + 0x90, 0xf1, 0x7e, 0x43, 0x56, 0xef, 0x3e, 0x4c, 0xb5, 0x0f, 0xf0, 0x75, 0xfa, 0xe9, 0x09, 0xe3, + 0x18, 0x4c, 0xc5, 0xef, 0x45, 0xdb, 0x61, 0xc6, 0xcb, 0xf6, 0xb4, 0xfa, 0xfc, 0x5e, 0x25, 0x54, + 0xe5, 0x6b, 0x6e, 0x09, 0x86, 0x22, 0x4a, 0xa8, 0xdc, 0x24, 0x04, 0xb4, 0xae, 0x9c, 0xdd, 0x2f, + 0xbf, 0x0d, 0x15, 0xf9, 0xc2, 0xbb, 0xc3, 0xfb, 0xdc, 0x21, 0xc5, 0x5b, 0xf2, 0x23, 0x3c, 0xa9, + 0x58, 0xe8, 0xb4, 0xa0, 0xe2, 0xd3, 0xcc, 0x74, 0xde, 0x4c, 0xc6, 0x3f, 0xcf, 0x9d, 0x4e, 0xb9, + 0xd0, 0x17, 0x6e, 0xc0, 0x95, 0xf9, 0xdd, 0x08, 0x19, 0x9c, 0x2b, 0x9c, 0xf3, 0x92, 0x1f, 0xe3, + 0x2f, 0xc6, 0xab, 0xc4, 0x80, 0xc5, 0x75, 0xec, 0x16, 0x31, 0xee, 0xe4, 0x63, 0x97, 0xf5, 0xd3, + 0x13, 0x56, 0x05, 0x28, 0xd6, 0xba, 0xcf, 0xc0, 0xf1, 0x92, 0x99, 0xb6, 0xfc, 0x15, 0x0e, 0x2d, + 0x85, 0x0f, 0xa4, 0xf3, 0xfa, 0x13, 0xdc, 0xcb, 0x5f, 0xa8, 0xd2, 0x6f, 0x84, 0xac, 0x22, 0xd1, + 0xa7, 0x4d, 0x7f, 0x9c, 0xf5, 0xc9, 0x26, 0x7d, 0x8b, 0x9b, 0xd3, 0x84, 0xc9, 0xcb, 0xdc, 0xf3, + 0x6d, 0xf5, 0x5f, 0xe5, 0xf1, 0x07, 0x5b, 0xbd, 0x30, 0xc0, 0x0a, 0x2a, 0x1c, 0xa7, 0x7e, 0x17, + 0x97, 0xb3, 0xba, 0xe6, 0xff, 0x9a, 0x43, 0x4b, 0x71, 0x65, 0xc9, 0xe3, 0x09, 0xb6, 0x06, 0x22, + 0xae, 0xda, 0x92, 0x32, 0x3c, 0xd0, 0x7f, 0xcc, 0xa9, 0xd2, 0x34, 0x27, 0x64, 0x15, 0x8a, 0x9f, + 0x11, 0x9e, 0xdc, 0x52, 0x52, 0xc4, 0x8f, 0xa7, 0x6f, 0x5d, 0xd1, 0x06, 0xee, 0xb8, 0x6a, 0x6d, + 0x3d, 0xdd, 0x8b, 0x76, 0xc0, 0x68, 0xb5, 0xa3, 0x17, 0xd2, 0x87, 0xa6, 0x8d, 0xc5, 0xc5, 0x94, + 0x9a, 0xd6, 0xd7, 0x8e, 0x5c, 0x4f, 0x4f, 0xb4, 0xdf, 0x8b, 0x76, 0xa4, 0xae, 0xb6, 0x03, 0x3f, + 0xaf, 0x8d, 0xc4, 0xf5, 0x33, 0x13, 0xc9, 0xd8, 0xb1, 0xd4, 0xd4, 0x85, 0x64, 0x2c, 0x0a, 0x6c, + 0x3f, 0xee, 0x1f, 0x5a, 0x18, 0xdc, 0x5e, 0xd4, 0x62, 0xff, 0xa1, 0x7a, 0x2a, 0xfe, 0x65, 0x6a, + 0x7c, 0x94, 0x52, 0x1f, 0x16, 0xb7, 0x9c, 0x35, 0x78, 0xfe, 0x10, 0x87, 0xe6, 0xbb, 0x43, 0x8a, + 0xbb, 0xa4, 0x1c, 0xb3, 0x45, 0x8f, 0xe5, 0x52, 0x54, 0xa3, 0x7a, 0x48, 0x71, 0xd7, 0xec, 0x50, + 0xa5, 0xb7, 0x05, 0x5c, 0x57, 0x74, 0x91, 0x3d, 0x3f, 0x75, 0x4b, 0x8b, 0x5f, 0x81, 0x0f, 0x66, + 0xd5, 0x52, 0x65, 0x06, 0xf7, 0xd9, 0x7d, 0x27, 0x19, 0xeb, 0xd3, 0x7b, 0x8f, 0x68, 0xe3, 0xc3, + 0xc6, 0x1d, 0x70, 0x86, 0xe8, 0x0d, 0x61, 0x3a, 0xcc, 0xfa, 0xe5, 0x32, 0x46, 0xc8, 0x1f, 0xe6, + 0xd0, 0x42, 0x20, 0x5a, 0x25, 0x02, 0x1e, 0xc7, 0x9a, 0xec, 0x71, 0x6c, 0x05, 0x92, 0x16, 0xd8, + 0x1b, 0xac, 0x91, 0x55, 0x69, 0xbb, 0x40, 0xaa, 0x8b, 0x75, 0xec, 0x50, 0x80, 0x2c, 0x26, 0x63, + 0x47, 0x93, 0xb1, 0x63, 0xfa, 0xf9, 0xdb, 0xfa, 0xa9, 0xdb, 0xda, 0xf4, 0xc7, 0x5a, 0x4f, 0x9f, + 0xa9, 0xfc, 0x1b, 0xd6, 0x8e, 0x8e, 0x26, 0x63, 0xc7, 0x80, 0x5c, 0x02, 0xe9, 0x34, 0x15, 0x69, + 0x80, 0xce, 0xb8, 0x1a, 0x57, 0x99, 0xdb, 0x2e, 0x18, 0x08, 0x28, 0x9e, 0x08, 0xe1, 0xb8, 0x4a, + 0x7e, 0x3a, 0x27, 0x37, 0x6c, 0xaf, 0x5c, 0xb3, 0x53, 0x95, 0x64, 0x21, 0x3f, 0x22, 0xf1, 0x15, + 0xb2, 0x5b, 0x12, 0x51, 0x6d, 0x70, 0x42, 0x3b, 0xdc, 0xa5, 0x5d, 0x1a, 0x4a, 0x4d, 0x1f, 0x4f, + 0x8f, 0x7f, 0xc5, 0xca, 0x71, 0xda, 0xdd, 0xae, 0xcc, 0xe8, 0x14, 0x70, 0x84, 0xfa, 0x75, 0x93, + 0x05, 0xcc, 0x8f, 0x71, 0xcd, 0x2b, 0x68, 0x31, 0xa3, 0x50, 0xe1, 0x97, 0xa3, 0x79, 0x4d, 0xca, + 0x41, 0x50, 0xe4, 0xca, 0xc6, 0x9f, 0xfc, 0x4a, 0xb4, 0xa0, 0xcd, 0xed, 0x6f, 0x25, 0xaa, 0x57, + 0x19, 0x7e, 0x54, 0x17, 0xbc, 0xcc, 0xad, 0x79, 0x17, 0x2d, 0xb5, 0x2b, 0x2c, 0xf2, 0xb4, 0xde, + 0xc0, 0xb6, 0xce, 0xc3, 0x39, 0xd7, 0x6c, 0xde, 0xde, 0x12, 0xae, 0xf7, 0xb7, 0x36, 0xfa, 0x02, + 0x2c, 0xea, 0xf7, 0xd1, 0xf2, 0x6c, 0x2d, 0xc0, 0xf7, 0x87, 0x7c, 0x3b, 0x5a, 0xcc, 0x88, 0x94, + 0x79, 0xf0, 0x0a, 0x76, 0xbc, 0x2b, 0xf3, 0xb1, 0xfb, 0x2c, 0xc2, 0x9f, 0xa1, 0xa5, 0x76, 0xa6, + 0xe1, 0x61, 0xa6, 0xb1, 0xfa, 0x35, 0x55, 0xaa, 0x46, 0x2f, 0x0b, 0xa6, 0x46, 0x5d, 0xac, 0x04, + 0x15, 0x32, 0xcb, 0xcf, 0x82, 0x7e, 0x39, 0x19, 0xef, 0x07, 0x39, 0x9a, 0xe5, 0xcf, 0x4b, 0xff, + 0xaf, 0x62, 0x34, 0xdf, 0x18, 0x10, 0xff, 0x32, 0x5a, 0x68, 0x70, 0xf9, 0x54, 0x0d, 0xef, 0x50, + 0xa5, 0x27, 0x05, 0x02, 0x12, 0x1f, 0x21, 0xdb, 0x3b, 0x7e, 0xdc, 0x64, 0x95, 0x5c, 0xb5, 0x32, + 0x29, 0xe4, 0x5f, 0x41, 0x8b, 0x7c, 0x81, 0x80, 0x12, 0x72, 0xd5, 0x13, 0xfd, 0x3a, 0xd6, 0x1d, + 0x9b, 0x30, 0x71, 0x05, 0xb4, 0xc5, 0x1a, 0xa6, 0xe3, 0xc9, 0xd8, 0x94, 0xab, 0x5e, 0x36, 0xcb, + 0xf8, 0xf7, 0xd1, 0x12, 0x13, 0x21, 0xe6, 0xab, 0x41, 0xa9, 0xfe, 0x92, 0x2a, 0x3d, 0x2f, 0xd8, + 0x0a, 0xc4, 0x67, 0xf5, 0x91, 0xb8, 0x76, 0xfe, 0x18, 0xd1, 0xb3, 0x5d, 0x3f, 0x95, 0xba, 0x76, + 0x25, 0x19, 0xfb, 0x82, 0x4a, 0x17, 0x84, 0x9c, 0xda, 0xda, 0xf0, 0x3f, 0x45, 0xf3, 0x9c, 0xf5, + 0x3b, 0xb1, 0x6a, 0xbc, 0x18, 0x54, 0x7d, 0xc6, 0x6f, 0x71, 0x19, 0x8c, 0xc7, 0x59, 0xbf, 0x93, + 0x1c, 0x40, 0x03, 0xca, 0xaf, 0x43, 0xf3, 0x9a, 0x95, 0x66, 0xac, 0xfc, 0x2e, 0xae, 0x79, 0x42, + 0x95, 0x1e, 0x13, 0x8c, 0xdf, 0x22, 0x4f, 0x07, 0xaf, 0x5d, 0x3f, 0x6d, 0xd6, 0x6f, 0x56, 0x9a, + 0xf9, 0x97, 0xd1, 0xbc, 0x4d, 0xf5, 0x3b, 0xb1, 0xd2, 0xbb, 0xb8, 0xe6, 0xc7, 0xaa, 0xf4, 0x8c, + 0x60, 0xfc, 0x16, 0x9f, 0x80, 0xfa, 0x9b, 0x4c, 0xe4, 0xec, 0x08, 0xd7, 0xcb, 0x46, 0x15, 0x7e, + 0xc0, 0x12, 0x9f, 0x40, 0xc1, 0xbd, 0x5f, 0x95, 0x22, 0x54, 0x7a, 0xfa, 0x10, 0x10, 0xc0, 0xea, + 0x98, 0x38, 0xba, 0xf5, 0x8b, 0x93, 0x7a, 0xdf, 0xb8, 0x96, 0x30, 0x78, 0xb9, 0x64, 0x22, 0x96, + 0x4a, 0xfc, 0x4e, 0x1b, 0x1f, 0x4e, 0x4e, 0xf6, 0xa4, 0x86, 0x3b, 0x67, 0x12, 0x3d, 0x96, 0x34, + 0x55, 0xe1, 0xc0, 0x02, 0x51, 0x1d, 0xfe, 0xd3, 0x14, 0x97, 0x2a, 0x1c, 0x1b, 0x25, 0xd7, 0x96, + 0xba, 0xda, 0x0a, 0xc7, 0x2c, 0xb2, 0x91, 0x84, 0x16, 0x7e, 0x14, 0x0c, 0x28, 0x54, 0x4d, 0x5e, + 0xae, 0x4a, 0x3f, 0x16, 0xe6, 0x1b, 0x20, 0x71, 0x2d, 0xf9, 0xfe, 0x01, 0x43, 0x44, 0xd6, 0x7a, + 0xe3, 0xd9, 0x33, 0x4e, 0x1a, 0xf2, 0x7f, 0x8e, 0x16, 0x1b, 0xbb, 0x61, 0x53, 0x28, 0xd8, 0xda, + 0xe2, 0xaa, 0x25, 0x2a, 0xef, 0xf7, 0x54, 0xe9, 0x1d, 0x81, 0x85, 0x8b, 0x6f, 0x12, 0xee, 0xb1, + 0x27, 0xaa, 0xdd, 0x3c, 0x9f, 0x1a, 0xee, 0xdc, 0x66, 0x96, 0x39, 0x5c, 0xb5, 0x15, 0x0e, 0x16, + 0x73, 0x59, 0x72, 0xaa, 0xcb, 0x29, 0x91, 0xde, 0xa7, 0x55, 0xed, 0xe6, 0xf9, 0x64, 0xbc, 0x9f, + 0xa2, 0x2a, 0x97, 0x59, 0xb4, 0xfc, 0x46, 0xf6, 0x15, 0x09, 0xb4, 0xe0, 0x65, 0xaa, 0xf4, 0x23, + 0xf6, 0x15, 0xa9, 0x24, 0xab, 0x67, 0xca, 0x28, 0xb2, 0xaf, 0x45, 0x1b, 0xd0, 0xbc, 0x5d, 0xf5, + 0x4e, 0xac, 0xf3, 0x26, 0xbb, 0xd8, 0xf8, 0x2d, 0xae, 0xca, 0x6a, 0xbb, 0xab, 0xde, 0xe9, 0x70, + 0xd5, 0xca, 0x46, 0x19, 0xff, 0x3e, 0x7d, 0x37, 0x59, 0x62, 0x71, 0xd1, 0xe6, 0xbb, 0xc9, 0x8b, + 0x6c, 0x43, 0xb8, 0x76, 0x2c, 0xad, 0xc3, 0xe4, 0x5d, 0xed, 0xce, 0xf9, 0x99, 0x44, 0xaf, 0x7e, + 0xe7, 0xa6, 0x36, 0xf2, 0xa5, 0x31, 0xb1, 0x47, 0x2f, 0x6a, 0x77, 0xce, 0xa7, 0xae, 0xf7, 0xd0, + 0xb7, 0x95, 0x6d, 0x68, 0x61, 0x8b, 0x3b, 0x1c, 0xde, 0xef, 0x2d, 0x29, 0xb6, 0x1e, 0x57, 0x08, + 0x48, 0x2c, 0xd7, 0xc6, 0xcf, 0x1b, 0xa8, 0x4c, 0x3d, 0xaa, 0x36, 0x71, 0x38, 0x75, 0xb1, 0xbd, + 0xc2, 0x41, 0x34, 0x2f, 0xa0, 0x52, 0xbc, 0xfa, 0xa9, 0x36, 0x71, 0x58, 0x26, 0x4d, 0xf8, 0x0f, + 0x10, 0x5e, 0x55, 0xac, 0xc9, 0x2e, 0xae, 0x71, 0xa9, 0xd2, 0x46, 0x81, 0x2c, 0xa0, 0xf8, 0xb3, + 0xac, 0x85, 0xc6, 0xef, 0x1c, 0xec, 0x82, 0xbc, 0xea, 0xb0, 0xd4, 0xc1, 0x98, 0x93, 0x80, 0x5b, + 0x35, 0x19, 0xef, 0x77, 0x4a, 0x32, 0x46, 0xcb, 0x4b, 0xa8, 0xd0, 0xab, 0xb4, 0xf9, 0x0c, 0xe2, + 0x00, 0xaa, 0xee, 0x9a, 0x1f, 0xa9, 0x52, 0xa9, 0x40, 0x81, 0xe2, 0x6a, 0xa7, 0xe4, 0x30, 0x8f, + 0x68, 0x7a, 0xfc, 0x2b, 0xed, 0xd2, 0x11, 0x57, 0xad, 0x36, 0x70, 0x47, 0xa6, 0x35, 0x78, 0x05, + 0x2d, 0x35, 0x16, 0xd6, 0x14, 0xfd, 0x5c, 0xb5, 0xa0, 0x13, 0xaf, 0x31, 0xa8, 0x9c, 0x90, 0x55, + 0x24, 0x96, 0x91, 0x31, 0x9b, 0xcc, 0x0f, 0x99, 0x6d, 0x2c, 0xc4, 0x91, 0xfd, 0x64, 0xf2, 0x59, + 0xf6, 0x96, 0xbc, 0x07, 0x15, 0x62, 0x88, 0x41, 0x73, 0x56, 0xe0, 0x0e, 0x36, 0xa9, 0x52, 0xad, + 0x40, 0x81, 0xe2, 0xcb, 0xe4, 0x18, 0x62, 0x11, 0xde, 0xe4, 0xf4, 0xb4, 0xde, 0x2e, 0x6d, 0xf0, + 0x73, 0xe7, 0xae, 0xad, 0x55, 0xae, 0x5a, 0x27, 0x83, 0x9e, 0x32, 0xcc, 0xce, 0x5d, 0x5b, 0x65, + 0x8a, 0x83, 0xdf, 0x01, 0x9d, 0xe0, 0x87, 0x47, 0x1e, 0x77, 0xf2, 0xb2, 0x2a, 0xbd, 0x20, 0x50, + 0xa0, 0x58, 0x4e, 0xc6, 0x8f, 0x5f, 0x1d, 0x2b, 0x1c, 0xc0, 0xb8, 0x6a, 0x83, 0x9d, 0xc9, 0xd8, + 0x67, 0x06, 0xef, 0xc4, 0x14, 0xca, 0xb4, 0x11, 0xff, 0x3a, 0x2a, 0x22, 0xd4, 0xb3, 0xed, 0x45, + 0xa2, 0x06, 0xc6, 0xa4, 0xda, 0x82, 0x8a, 0xcb, 0xa1, 0xa9, 0xaf, 0xa5, 0xed, 0x45, 0x6d, 0xe4, + 0x86, 0x76, 0x2e, 0x2a, 0x5b, 0x85, 0xfc, 0x46, 0x54, 0x68, 0x2c, 0x16, 0x1e, 0xd5, 0x4a, 0xeb, + 0x81, 0x8d, 0x02, 0xc5, 0xc7, 0xad, 0x4d, 0x3b, 0x32, 0x46, 0xf7, 0x83, 0x39, 0x0e, 0xb3, 0x1a, + 0xaf, 0xa0, 0x85, 0x11, 0x77, 0xb8, 0xc9, 0x55, 0x5b, 0xb2, 0x0a, 0x63, 0xd9, 0xaa, 0x4a, 0x6f, + 0x09, 0x04, 0x24, 0xfe, 0x9c, 0x0c, 0xde, 0x7c, 0xd7, 0x4a, 0x4e, 0x4d, 0x91, 0x77, 0xb5, 0xe4, + 0x54, 0x97, 0x36, 0x32, 0x96, 0x3a, 0xf1, 0x65, 0x7a, 0xe2, 0x0e, 0x28, 0xa3, 0xf1, 0x33, 0xc4, + 0x74, 0x3a, 0xf6, 0x19, 0xe9, 0x17, 0xab, 0xae, 0x64, 0x82, 0xa9, 0xfa, 0x5d, 0x55, 0xda, 0x85, + 0x76, 0x08, 0xf8, 0x8e, 0x12, 0xb7, 0x90, 0xe7, 0x51, 0xb8, 0x8c, 0xf2, 0xdd, 0x6d, 0x2c, 0xf5, + 0x34, 0x18, 0xd4, 0x4f, 0x3e, 0x27, 0xa7, 0x3b, 0x19, 0xc3, 0xd4, 0xa3, 0xd1, 0xa0, 0x18, 0xb0, + 0x73, 0x4b, 0xef, 0x2c, 0x41, 0x4b, 0xed, 0x9a, 0x5b, 0x7e, 0x17, 0x15, 0xc0, 0x5c, 0xf5, 0x6d, + 0xcf, 0x3b, 0x5d, 0xb5, 0x32, 0xb9, 0x0d, 0x2b, 0x54, 0xa9, 0x5c, 0xc8, 0x2e, 0x13, 0x57, 0x13, + 0x66, 0x3f, 0x3a, 0x65, 0x80, 0x60, 0xae, 0xf5, 0x9b, 0x17, 0xe5, 0xec, 0x8a, 0xbc, 0x07, 0x2d, + 0x0b, 0x2b, 0x21, 0xbc, 0xc7, 0x4d, 0xbc, 0x05, 0x96, 0x06, 0x3f, 0xbb, 0x4c, 0x7c, 0x06, 0xf0, + 0x12, 0x30, 0x51, 0xba, 0x0e, 0x77, 0x66, 0x75, 0x92, 0xd5, 0x8a, 0x97, 0x51, 0x71, 0xb3, 0xfb, + 0x80, 0x31, 0x51, 0xf5, 0x41, 0xef, 0xb6, 0xd6, 0x66, 0x7c, 0x9b, 0x16, 0xc3, 0xd0, 0xed, 0x25, + 0x26, 0x35, 0x4c, 0xc6, 0x8e, 0xea, 0x23, 0x51, 0xed, 0xd2, 0xd5, 0xfa, 0xa0, 0x57, 0x3f, 0x79, + 0x23, 0x73, 0x64, 0x40, 0xb6, 0x57, 0xe4, 0x77, 0x61, 0x9c, 0x0d, 0xd0, 0x93, 0x81, 0x13, 0x6e, + 0xd3, 0xf5, 0xaa, 0x54, 0x29, 0xd8, 0x4b, 0xc4, 0x27, 0xc8, 0x64, 0x60, 0x84, 0xa9, 0xe1, 0x4e, + 0x52, 0xc4, 0xe0, 0xb5, 0x2a, 0xf3, 0x7d, 0x1c, 0x5a, 0xa2, 0x04, 0xdc, 0x7b, 0xfc, 0xca, 0xae, + 0x7a, 0xa7, 0x33, 0xe0, 0xc3, 0x17, 0x6f, 0x61, 0x8d, 0x4f, 0x95, 0xf6, 0x0a, 0xb6, 0x02, 0x71, + 0x17, 0xfb, 0x0b, 0xa4, 0x4a, 0xe0, 0x5f, 0x77, 0xd5, 0x3b, 0x2b, 0x9d, 0xdb, 0x5c, 0xa0, 0x6b, + 0x33, 0x38, 0xea, 0xc4, 0x40, 0x59, 0x72, 0xfa, 0x6e, 0xfa, 0xd0, 0x74, 0x5b, 0x8b, 0xa7, 0xd2, + 0x13, 0xf0, 0x01, 0xcc, 0x90, 0xd4, 0xf4, 0xa1, 0x1b, 0xda, 0x27, 0xe7, 0xf5, 0xdf, 0xb7, 0xa7, + 0xc6, 0x8e, 0x41, 0xe3, 0x72, 0xd9, 0xd6, 0x0b, 0xaf, 0x18, 0xc3, 0xf1, 0x35, 0xb4, 0xee, 0x09, + 0x28, 0x11, 0x57, 0x6d, 0xb8, 0x64, 0xa1, 0x63, 0x5e, 0x59, 0x51, 0x8d, 0xa4, 0x4a, 0xaf, 0x0b, + 0xb6, 0x02, 0x71, 0x5d, 0x9e, 0x6e, 0x93, 0xb1, 0x63, 0x15, 0x70, 0x37, 0xa7, 0xa6, 0x8f, 0x6b, + 0x7d, 0xa3, 0xa9, 0xe1, 0x4e, 0xed, 0xfa, 0x60, 0x6a, 0xfa, 0xb8, 0xab, 0x56, 0xb6, 0xb5, 0xe6, + 0xcf, 0x71, 0x68, 0x49, 0x18, 0xff, 0x6a, 0x08, 0xb6, 0x86, 0x3c, 0x0a, 0xe6, 0x00, 0x16, 0x8b, + 0x4f, 0x64, 0xb3, 0x88, 0x0d, 0x4c, 0x9d, 0x9a, 0xf7, 0x55, 0xe9, 0x17, 0xc2, 0x0a, 0x5f, 0x78, + 0x5b, 0x30, 0xd0, 0x10, 0x71, 0x47, 0x7c, 0x1e, 0x57, 0xcb, 0x56, 0xe3, 0x34, 0x38, 0x61, 0xc2, + 0xc9, 0x80, 0xc8, 0xd7, 0x9a, 0x62, 0x77, 0xe6, 0xdc, 0x79, 0xed, 0x6c, 0x5c, 0x1b, 0x1f, 0x76, + 0xd5, 0xd3, 0x17, 0xd9, 0x6a, 0xc7, 0x46, 0x69, 0x4b, 0x43, 0x9d, 0x83, 0x29, 0x93, 0x6d, 0xc3, + 0x31, 0x44, 0xb2, 0xa5, 0xbe, 0x30, 0xdb, 0x0b, 0x66, 0x09, 0x0a, 0xff, 0x7e, 0xc7, 0x90, 0xd5, + 0x25, 0xff, 0x8f, 0xd0, 0x23, 0x1e, 0xbf, 0xdb, 0xd7, 0x5c, 0x77, 0xa0, 0xc5, 0x17, 0x52, 0xbc, + 0x0d, 0x8a, 0x27, 0x18, 0xf0, 0x86, 0x31, 0x53, 0x51, 0x5c, 0xb3, 0x59, 0x95, 0xde, 0x14, 0xf2, + 0x95, 0x8b, 0x1b, 0x1e, 0x60, 0x69, 0x5c, 0xf5, 0xda, 0xd9, 0xf3, 0xfa, 0x09, 0x43, 0x3e, 0xcb, + 0x9c, 0xba, 0x25, 0xe7, 0xc3, 0xc3, 0x37, 0xa1, 0xe5, 0xcd, 0xad, 0xfe, 0x88, 0xcf, 0x94, 0xaf, + 0x8c, 0xd3, 0x8a, 0xf0, 0x7e, 0xc0, 0x4a, 0x89, 0x9c, 0x42, 0xb1, 0x8c, 0xd5, 0xe5, 0x19, 0x90, + 0x0a, 0x10, 0x80, 0xb1, 0xbc, 0x4b, 0x9e, 0x49, 0x31, 0x40, 0xce, 0x69, 0xcb, 0xb7, 0xa2, 0x42, + 0x8f, 0xcf, 0x1b, 0x6a, 0x88, 0x28, 0x2d, 0x98, 0xef, 0x28, 0x06, 0x23, 0x05, 0x0a, 0x14, 0xdf, + 0x02, 0xc5, 0xa5, 0xd6, 0x7d, 0x38, 0xd3, 0xd5, 0x67, 0x40, 0xf5, 0xeb, 0x97, 0x33, 0x27, 0xef, + 0x82, 0x7c, 0x56, 0x46, 0xaf, 0x9e, 0xd4, 0x89, 0x0b, 0xc9, 0xf8, 0x55, 0xb0, 0x1f, 0x78, 0x7e, + 0xfd, 0x2b, 0x2f, 0xde, 0x8b, 0xb6, 0x6b, 0x5d, 0xb7, 0x93, 0x53, 0x43, 0x00, 0x12, 0xd7, 0x3f, + 0xff, 0x72, 0xb9, 0x4c, 0xb1, 0xf2, 0xbf, 0x45, 0xc5, 0x26, 0x8d, 0x6a, 0x61, 0x1e, 0xe2, 0x71, + 0xdf, 0xf6, 0x12, 0x53, 0xcc, 0xa5, 0x54, 0x88, 0x55, 0x6e, 0x97, 0xf9, 0x5a, 0xda, 0x9e, 0xaf, + 0x32, 0x2e, 0x9a, 0x2a, 0x6f, 0xab, 0xdb, 0x5f, 0x5e, 0x91, 0x3a, 0x3b, 0x6e, 0x08, 0xbd, 0xe6, + 0xa8, 0x8c, 0x62, 0xa8, 0x29, 0xdb, 0xb1, 0xda, 0x29, 0xed, 0x8b, 0x78, 0x8e, 0x8b, 0xf3, 0x52, + 0xda, 0x17, 0x73, 0x29, 0xed, 0x8b, 0x79, 0x29, 0xed, 0x8b, 0xb9, 0x94, 0x16, 0xf0, 0x2e, 0xcd, + 0x4b, 0x69, 0x5f, 0xbc, 0x0f, 0xa5, 0x7d, 0x31, 0x2f, 0xa5, 0xc5, 0xad, 0x4a, 0xff, 0x1d, 0x87, + 0x96, 0xb0, 0x47, 0x94, 0x7f, 0x17, 0xcd, 0x0b, 0x28, 0xfb, 0x4b, 0x38, 0xac, 0x1a, 0x7e, 0x2c, + 0xf7, 0x79, 0x70, 0x3f, 0xd4, 0x86, 0x8f, 0x33, 0xaa, 0x8a, 0xa5, 0xf9, 0x37, 0x2b, 0x5c, 0x8c, + 0x70, 0x26, 0x65, 0xa3, 0x22, 0xdf, 0x8a, 0x16, 0x29, 0x07, 0x7c, 0xe1, 0x88, 0xe2, 0x25, 0xf2, + 0xa4, 0x23, 0x1b, 0x7d, 0x1d, 0x14, 0x53, 0x2a, 0x03, 0x9f, 0x6a, 0xb6, 0x12, 0x7f, 0x9a, 0xaf, + 0x27, 0xfb, 0x13, 0x40, 0x6a, 0xb8, 0x93, 0x74, 0x69, 0xb6, 0x2a, 0xdd, 0x66, 0x88, 0xd0, 0x76, + 0xbc, 0x7c, 0x35, 0x9a, 0xe7, 0xf3, 0x86, 0xf1, 0x57, 0x12, 0x06, 0xdb, 0xf8, 0x2d, 0xae, 0x4d, + 0x9d, 0xbd, 0xa5, 0xf7, 0x5f, 0xce, 0xc2, 0x69, 0x52, 0xc0, 0xb0, 0x6c, 0x54, 0x2a, 0xfd, 0x86, + 0x43, 0x45, 0x74, 0x1e, 0xf8, 0x7a, 0x34, 0xbf, 0xd9, 0x1d, 0x6e, 0xc2, 0x97, 0x6b, 0x71, 0xcd, + 0xcf, 0x54, 0xe9, 0x15, 0x01, 0x03, 0xc4, 0x0d, 0x30, 0x01, 0x84, 0x82, 0xc3, 0x90, 0x61, 0x68, + 0xfa, 0xa9, 0xdb, 0x74, 0xf3, 0xe9, 0xfd, 0xbf, 0x4b, 0x5d, 0x6c, 0xd7, 0x2e, 0x5d, 0xd5, 0x6e, + 0x0c, 0xc8, 0xb8, 0xa1, 0x81, 0x11, 0xb3, 0xb6, 0x70, 0xad, 0x02, 0x46, 0x2c, 0xc1, 0xcc, 0x89, + 0x11, 0xf8, 0x6c, 0x63, 0xde, 0x87, 0x3b, 0x29, 0xab, 0x43, 0xb8, 0x59, 0x17, 0x5a, 0xe0, 0x6b, + 0x71, 0x06, 0x22, 0xe4, 0x1a, 0x7d, 0x4e, 0x95, 0xd6, 0x0b, 0x00, 0x11, 0x7f, 0x72, 0x9f, 0x51, + 0xba, 0xea, 0x93, 0xb1, 0xcf, 0xf4, 0x93, 0x37, 0x64, 0xa8, 0x5f, 0xfa, 0x1f, 0x16, 0xa1, 0x47, + 0xf2, 0xbc, 0xc5, 0xf2, 0x1e, 0x54, 0xb0, 0xbd, 0x81, 0x70, 0x18, 0x0d, 0xaa, 0x54, 0x2f, 0x14, + 0x6c, 0x6f, 0x10, 0xdf, 0x62, 0xcf, 0xdb, 0xf6, 0x06, 0xa2, 0xd7, 0xca, 0x9c, 0x1c, 0xd1, 0x0e, + 0x0d, 0xb8, 0x6a, 0xab, 0x88, 0x7a, 0x1a, 0xff, 0x34, 0x18, 0x53, 0x83, 0x01, 0xd5, 0x4f, 0xdd, + 0x66, 0x75, 0x5c, 0x66, 0xdd, 0x72, 0xb9, 0x60, 0x7b, 0x03, 0x2f, 0xa1, 0x45, 0x6d, 0x4a, 0x28, + 0x6c, 0x88, 0x28, 0x30, 0x39, 0x3f, 0x51, 0xa5, 0x67, 0x05, 0x13, 0x26, 0x3e, 0x66, 0x19, 0x0d, + 0x58, 0x47, 0x1c, 0x3f, 0xf0, 0xca, 0x66, 0x1d, 0xfe, 0x64, 0x81, 0x65, 0xb5, 0xe3, 0x6e, 0x0c, + 0x97, 0xcc, 0xc3, 0xfb, 0xfc, 0xf9, 0x07, 0x78, 0x6e, 0x36, 0x61, 0x46, 0x33, 0x78, 0x10, 0x49, + 0x70, 0xaa, 0x14, 0xe3, 0x04, 0x16, 0x9f, 0x38, 0x66, 0x9a, 0x16, 0x9c, 0x8d, 0x69, 0x5d, 0x5f, + 0x46, 0xdc, 0x8d, 0x59, 0xbc, 0x1d, 0x6b, 0x78, 0x00, 0xf6, 0x39, 0xe4, 0xd1, 0xe3, 0xcb, 0x31, + 0xad, 0xeb, 0xf2, 0x3a, 0x2c, 0x38, 0x1e, 0xf9, 0x0c, 0x44, 0x62, 0x20, 0x8c, 0x98, 0x3b, 0x07, + 0xa9, 0x99, 0x2a, 0x23, 0xb5, 0xf1, 0xf3, 0xa9, 0xfe, 0x1b, 0xa0, 0x8a, 0xd3, 0xc6, 0x87, 0xb5, + 0xee, 0xdb, 0x11, 0x77, 0x63, 0xb8, 0x0c, 0xc4, 0xb1, 0x6a, 0x5a, 0xdf, 0x32, 0xe4, 0x02, 0xb3, + 0x30, 0xa2, 0xbb, 0xc3, 0x1d, 0x96, 0xcb, 0xec, 0xb8, 0xf9, 0x06, 0xb4, 0x98, 0x4c, 0x11, 0x66, + 0xa7, 0xe7, 0x5b, 0xf6, 0x57, 0x2c, 0x5c, 0x7c, 0x6a, 0xd6, 0x29, 0x36, 0x0d, 0x0e, 0x99, 0xda, + 0xfc, 0x20, 0x87, 0x0a, 0xc3, 0xe4, 0xcc, 0x11, 0x63, 0xbc, 0x88, 0x2a, 0xfd, 0x5a, 0xa0, 0x40, + 0x51, 0xd1, 0xa6, 0x3f, 0xce, 0x44, 0x7b, 0xf4, 0x63, 0xbf, 0x73, 0xfa, 0xfc, 0xbe, 0xd6, 0x66, + 0xc7, 0x76, 0x78, 0x3d, 0x24, 0x87, 0x03, 0x1b, 0xf1, 0xe8, 0xa7, 0x6e, 0xcf, 0x24, 0x7a, 0x77, + 0x6c, 0xae, 0x4b, 0x26, 0x86, 0x93, 0x53, 0xfd, 0xe9, 0x89, 0xcb, 0x70, 0x20, 0x41, 0xed, 0x2b, + 0x26, 0x63, 0x9f, 0xb9, 0xea, 0x53, 0x27, 0xc6, 0xf4, 0x73, 0x97, 0xe1, 0x91, 0x0c, 0xd4, 0x33, + 0xe9, 0x5b, 0x17, 0xd2, 0xd3, 0xd3, 0xda, 0xb9, 0x23, 0xe9, 0xd1, 0x51, 0x99, 0x76, 0xc8, 0xff, + 0x0a, 0x2d, 0x21, 0x9f, 0xbd, 0x45, 0x69, 0x53, 0xfc, 0xc4, 0xd4, 0xaf, 0x5a, 0x95, 0x5e, 0x12, + 0x6c, 0x05, 0xf4, 0xfd, 0xf3, 0x7a, 0x4f, 0x2a, 0x7e, 0xd5, 0xb8, 0xf3, 0xf1, 0x63, 0x14, 0x6b, + 0xf7, 0x01, 0x26, 0x22, 0xb2, 0xad, 0x99, 0xc1, 0x16, 0x3d, 0xe6, 0x0b, 0x4b, 0xad, 0x91, 0xe0, + 0xce, 0x96, 0xc6, 0x90, 0xdb, 0xab, 0x38, 0xd9, 0xde, 0x16, 0x61, 0x0e, 0x64, 0xb7, 0x2a, 0xfd, + 0x52, 0x98, 0xbd, 0x96, 0xf8, 0x06, 0xcb, 0x1b, 0x92, 0x3b, 0x73, 0xe0, 0x74, 0xa6, 0xab, 0xef, + 0x41, 0x87, 0x34, 0x3b, 0xee, 0x35, 0xaf, 0xa3, 0xe5, 0xd9, 0xfb, 0xf8, 0x61, 0x74, 0x74, 0xa5, + 0x97, 0x8b, 0xd0, 0xaa, 0xbc, 0xb6, 0x0b, 0xfc, 0x5b, 0x68, 0xbe, 0xab, 0x7e, 0x17, 0xd0, 0x80, + 0x42, 0x90, 0xef, 0x31, 0x40, 0xfc, 0xe9, 0xe6, 0x2c, 0x5b, 0x1e, 0x03, 0x4a, 0xed, 0x13, 0xb2, + 0x2c, 0xec, 0x70, 0x13, 0xfe, 0x23, 0xb4, 0xdc, 0x13, 0x0c, 0x44, 0xdc, 0xbe, 0x80, 0x12, 0x92, + 0x5b, 0x03, 0x11, 0x1f, 0x35, 0x78, 0xdd, 0xa6, 0x4a, 0x9b, 0x85, 0x9c, 0x42, 0xf1, 0x25, 0xa2, + 0x0e, 0xb6, 0x1b, 0x3b, 0xc0, 0x31, 0x01, 0xe9, 0x3f, 0x13, 0xed, 0xa9, 0xc5, 0x06, 0x05, 0xf7, + 0xa2, 0xed, 0x4e, 0xb3, 0xb9, 0x57, 0xce, 0x41, 0xc5, 0xcb, 0x68, 0x69, 0x08, 0xfe, 0xdc, 0x45, + 0x68, 0xcd, 0x3c, 0x4b, 0xb6, 0xcc, 0x2a, 0x12, 0x57, 0x65, 0xf5, 0x48, 0xc8, 0x4d, 0x56, 0x35, + 0xfe, 0x9f, 0x15, 0x90, 0x67, 0x57, 0x29, 0xd4, 0x18, 0x2e, 0x99, 0x3f, 0x27, 0xcd, 0xb1, 0x4f, + 0x2b, 0xb1, 0x01, 0x0b, 0x99, 0x34, 0xe7, 0x6f, 0x39, 0x55, 0xfa, 0xdf, 0xcc, 0x47, 0x58, 0x03, + 0x2c, 0xfe, 0x3b, 0x0e, 0xf8, 0x32, 0x6d, 0xb0, 0x93, 0xbc, 0x63, 0x9a, 0xf4, 0x03, 0xf4, 0xdd, + 0xc6, 0x1c, 0x7f, 0xd2, 0x49, 0x95, 0x6c, 0x4d, 0xca, 0xc1, 0x64, 0x2c, 0x6e, 0x2c, 0x89, 0x54, + 0xef, 0x32, 0xc4, 0x18, 0x25, 0x34, 0x93, 0xe8, 0xdd, 0x0c, 0x2f, 0x3c, 0x91, 0x50, 0xd0, 0xef, + 0xc7, 0x80, 0xba, 0x88, 0xc7, 0x4b, 0xe0, 0x0d, 0x9e, 0x7d, 0x8a, 0xb7, 0xd5, 0x6f, 0xcc, 0x5c, + 0x07, 0xde, 0x08, 0xc9, 0x58, 0xdc, 0xea, 0xec, 0xee, 0x59, 0x43, 0x12, 0x19, 0x9c, 0xc0, 0x9b, + 0x94, 0xf4, 0xa7, 0x5d, 0x1a, 0x4e, 0xc6, 0x3e, 0x23, 0x2f, 0x4d, 0x93, 0xc7, 0x32, 0xa7, 0x6e, + 0x01, 0xb1, 0x78, 0x35, 0x73, 0xea, 0x56, 0x66, 0xf8, 0x04, 0x55, 0x1c, 0x19, 0x9d, 0x54, 0x3b, + 0x0c, 0x61, 0xb6, 0xd2, 0xeb, 0x8e, 0xb8, 0x2b, 0xbd, 0xbe, 0xd0, 0x6b, 0x55, 0xc6, 0x5f, 0x55, + 0x7b, 0x3c, 0xe1, 0x2a, 0xbf, 0x6f, 0x4f, 0x95, 0x12, 0xf1, 0x78, 0x5f, 0x95, 0xad, 0xaf, 0xe5, + 0xff, 0x67, 0xce, 0x6e, 0xbe, 0x00, 0x54, 0xc5, 0xa4, 0xc4, 0xac, 0x01, 0x03, 0xa5, 0xc4, 0x36, + 0x0b, 0x86, 0x6e, 0xad, 0xb7, 0x4b, 0x3f, 0x76, 0x6d, 0x93, 0x5c, 0xa6, 0x75, 0x8d, 0x69, 0x37, + 0xa3, 0xe9, 0x3b, 0x13, 0xa9, 0x13, 0x37, 0xcb, 0x35, 0xb5, 0x97, 0xf0, 0x16, 0xc9, 0xd8, 0xa5, + 0xd4, 0xd5, 0x3e, 0xe0, 0x2d, 0xd8, 0xed, 0xb9, 0x49, 0x5e, 0x97, 0x9c, 0xbc, 0xa0, 0x9f, 0x98, + 0xd0, 0x7b, 0xdb, 0x81, 0x56, 0x11, 0x52, 0x65, 0x56, 0xed, 0x2e, 0xdb, 0xeb, 0x77, 0x07, 0x02, + 0x8a, 0xff, 0x5e, 0xb4, 0xdd, 0xe3, 0xf6, 0xfb, 0x3c, 0xc1, 0x7b, 0xd1, 0x76, 0x78, 0xcb, 0x06, + 0x9b, 0xb1, 0xf4, 0x91, 0xcf, 0x52, 0x17, 0x4f, 0xb0, 0x94, 0x2d, 0x75, 0xbd, 0xa7, 0x7c, 0x26, + 0xd1, 0x63, 0x37, 0x94, 0x68, 0x44, 0xbc, 0x57, 0xf1, 0x2b, 0x11, 0x5f, 0x30, 0x50, 0x1f, 0x0a, + 0x46, 0x14, 0x0f, 0x7e, 0x89, 0x5d, 0x88, 0x4f, 0x15, 0x56, 0x27, 0xe7, 0x29, 0x16, 0xd7, 0x12, + 0x92, 0x81, 0xed, 0x7f, 0xc8, 0x59, 0xe8, 0xbe, 0x98, 0x39, 0x73, 0x29, 0x79, 0xf7, 0x9c, 0x7e, + 0xf4, 0x92, 0x9c, 0xa7, 0x0d, 0xbf, 0x1d, 0x2d, 0x71, 0xb7, 0x7a, 0x7d, 0x91, 0x3a, 0x2c, 0x3d, + 0x7a, 0x09, 0x71, 0xfa, 0xa9, 0x2a, 0x95, 0x09, 0xb6, 0x02, 0xb1, 0x84, 0xa5, 0x47, 0xda, 0xf8, + 0x68, 0x7a, 0x7c, 0x94, 0xbc, 0xc2, 0xdb, 0xea, 0xf1, 0x5b, 0x50, 0x21, 0x48, 0xa2, 0x6f, 0xba, + 0x89, 0xac, 0x85, 0x85, 0x6b, 0x0a, 0x14, 0x9f, 0x86, 0x67, 0x58, 0xf6, 0x1d, 0x17, 0x90, 0x66, + 0x3e, 0x3f, 0x0d, 0x3c, 0x8b, 0x4c, 0x2b, 0xd3, 0xb7, 0x04, 0xba, 0xf7, 0x1f, 0x8a, 0x4e, 0xfd, + 0x9f, 0xf3, 0x29, 0x9d, 0xb2, 0xbf, 0xf3, 0xf0, 0xed, 0x1c, 0x42, 0xbe, 0x30, 0x46, 0x1d, 0x50, + 0x22, 0x84, 0x5c, 0xb9, 0x55, 0xe9, 0x57, 0x02, 0x03, 0x16, 0xeb, 0xad, 0xbf, 0xc9, 0x74, 0x5a, + 0x6f, 0x4c, 0x77, 0x33, 0xa7, 0xc6, 0xcb, 0x22, 0xa1, 0x56, 0x85, 0x05, 0x38, 0x30, 0xfd, 0x22, + 0x77, 0x0f, 0x86, 0xd8, 0xec, 0x50, 0xca, 0x65, 0x06, 0x3b, 0xbf, 0x87, 0xde, 0x8b, 0x5e, 0x42, + 0xd7, 0xb0, 0xa1, 0x1d, 0x05, 0x9a, 0xf4, 0x2c, 0xf5, 0xf9, 0x84, 0x36, 0xf0, 0x29, 0xe8, 0xaf, + 0x18, 0x51, 0xbc, 0x8c, 0x3e, 0x7b, 0xd1, 0xce, 0xf4, 0x9e, 0x68, 0x66, 0x24, 0x5a, 0x4e, 0x6f, + 0x3a, 0x2f, 0xef, 0x44, 0x0b, 0xbd, 0xc1, 0x66, 0xb7, 0xcf, 0xa4, 0x5f, 0x78, 0x61, 0x09, 0x48, + 0x5c, 0x0b, 0x8f, 0x8b, 0xc0, 0x61, 0x00, 0x86, 0xd4, 0xe7, 0x13, 0xa9, 0x8e, 0x49, 0xed, 0xc2, + 0x05, 0x6d, 0xb0, 0x4f, 0x26, 0xf5, 0xf8, 0x7e, 0x0e, 0x15, 0x87, 0x15, 0x4f, 0x6b, 0xc8, 0x17, + 0x39, 0x88, 0x55, 0xd4, 0x84, 0x33, 0xd8, 0xa7, 0x4a, 0x8a, 0x60, 0x2f, 0x11, 0x77, 0x50, 0x8e, + 0x40, 0x1b, 0xef, 0xd1, 0xba, 0xc6, 0x52, 0x53, 0x9d, 0x98, 0xf4, 0x7e, 0xa6, 0x8f, 0xf4, 0xb0, + 0x33, 0x05, 0x5a, 0x5d, 0xb0, 0x4c, 0x35, 0x0e, 0x24, 0x7c, 0x0b, 0x53, 0xc1, 0xa0, 0xdc, 0x77, + 0xbb, 0x92, 0x89, 0x8b, 0xc6, 0xd9, 0xb0, 0x77, 0xc2, 0x5f, 0xe0, 0x50, 0xa1, 0x2f, 0x10, 0xc1, + 0xf7, 0x09, 0x3e, 0xfc, 0x8b, 0xc5, 0xd2, 0x5c, 0xab, 0x1b, 0x28, 0x97, 0x3c, 0x1e, 0x25, 0x1c, + 0xf6, 0xed, 0xf1, 0x2b, 0x70, 0xe5, 0xd2, 0x86, 0x62, 0x3d, 0x70, 0x0a, 0xfe, 0x3d, 0x16, 0xc9, + 0xfa, 0x8e, 0xc3, 0xa4, 0xb8, 0x4b, 0x8f, 0x2e, 0x46, 0x8b, 0x19, 0x33, 0x38, 0x83, 0x23, 0x58, + 0x06, 0xa6, 0x6c, 0x9b, 0x42, 0xee, 0x96, 0x7d, 0xf5, 0xee, 0xc8, 0x3e, 0xc2, 0x27, 0x87, 0x55, + 0xa9, 0x45, 0xc8, 0x2e, 0x13, 0x3f, 0x20, 0xb6, 0x71, 0xe6, 0x95, 0x92, 0x8c, 0xc5, 0x89, 0x25, + 0x9c, 0x69, 0xbd, 0x47, 0x38, 0x46, 0xc6, 0x30, 0x0e, 0xcc, 0xdd, 0x60, 0xbb, 0x41, 0x1d, 0x8b, + 0x8c, 0x12, 0x89, 0xaf, 0x0a, 0x90, 0xc8, 0xd9, 0xfd, 0xf1, 0x1f, 0xa0, 0xc5, 0xcd, 0xc1, 0xd6, + 0x40, 0x64, 0x87, 0x3b, 0xd4, 0xa8, 0x44, 0xc8, 0x76, 0x04, 0x2b, 0x79, 0x06, 0x6e, 0x6a, 0x78, + 0x89, 0x21, 0xde, 0xd9, 0xd3, 0xc4, 0x58, 0xaf, 0x63, 0x92, 0xed, 0x1b, 0xf7, 0x2a, 0xb3, 0xed, + 0xf8, 0xbb, 0x1c, 0x2a, 0x6e, 0x0d, 0x90, 0x3b, 0xc4, 0x38, 0xda, 0x44, 0x08, 0x39, 0xcd, 0xa9, + 0xd2, 0x09, 0x4e, 0xb0, 0x97, 0x89, 0x1d, 0x1c, 0x0c, 0x5f, 0x3b, 0x7a, 0x51, 0xeb, 0xba, 0x6c, + 0x29, 0xc2, 0x81, 0x56, 0x0c, 0x74, 0x24, 0x63, 0xfd, 0xe9, 0x1b, 0x87, 0xb4, 0xf8, 0x15, 0x4a, + 0x9a, 0xb5, 0x68, 0x62, 0x7d, 0x7a, 0x74, 0x2c, 0x75, 0x29, 0x9e, 0x5d, 0x7c, 0xee, 0x3c, 0x29, + 0x30, 0xd8, 0x66, 0xa6, 0xac, 0x0c, 0x90, 0x53, 0xeb, 0x1f, 0x83, 0xe5, 0xbe, 0x72, 0x38, 0x75, + 0x76, 0x08, 0x36, 0x43, 0xb9, 0x6c, 0x1f, 0x13, 0xef, 0xa3, 0xf6, 0xf8, 0x70, 0x71, 0xff, 0x64, + 0x0e, 0xa3, 0x47, 0x9b, 0x4d, 0x3e, 0x96, 0x2b, 0x4d, 0x9b, 0x7c, 0xa2, 0x8b, 0xce, 0x44, 0x87, + 0xe1, 0x8c, 0x00, 0x98, 0x58, 0x95, 0x9a, 0x26, 0xfa, 0xdd, 0x36, 0x3e, 0x61, 0x01, 0xee, 0x4e, + 0x98, 0xab, 0xbb, 0x2c, 0xee, 0x60, 0x9a, 0x53, 0xa5, 0x49, 0x1b, 0x77, 0xf0, 0xf9, 0xb7, 0xe1, + 0x0e, 0x0c, 0x26, 0xdf, 0xaf, 0x44, 0xbe, 0xdf, 0xcb, 0x7e, 0x33, 0x20, 0xad, 0x76, 0x84, 0x82, + 0xc1, 0x08, 0x5c, 0xf5, 0x6d, 0xee, 0x10, 0xbe, 0xe5, 0x49, 0x7f, 0xb6, 0x8b, 0xde, 0x83, 0x56, + 0xf8, 0x02, 0xbe, 0xc8, 0x96, 0x60, 0xa3, 0x2f, 0xb0, 0x33, 0xac, 0x84, 0x02, 0x86, 0x58, 0x02, + 0xdc, 0xfa, 0x0b, 0xaa, 0x24, 0x0a, 0xb9, 0xa5, 0xe2, 0x93, 0xfa, 0xd0, 0x0d, 0xf6, 0x25, 0x09, + 0x26, 0xb7, 0x95, 0x14, 0xcb, 0xb9, 0x2d, 0xf8, 0x2e, 0x8e, 0xe9, 0xa5, 0xde, 0x1d, 0x0e, 0xef, + 0x0f, 0x86, 0xbc, 0xe4, 0x2d, 0xf3, 0x1d, 0x55, 0xda, 0x21, 0xe4, 0x96, 0x8a, 0x6f, 0xe4, 0xed, + 0xa5, 0x85, 0x14, 0x57, 0x80, 0xaf, 0x14, 0x35, 0x44, 0x4d, 0x7d, 0x39, 0x95, 0x9a, 0xba, 0xc0, + 0x5a, 0xec, 0xc9, 0xb9, 0x38, 0x8d, 0x3b, 0x69, 0x51, 0x93, 0x72, 0xb0, 0xde, 0xed, 0x0b, 0xe1, + 0x9b, 0x73, 0xb1, 0xf8, 0x68, 0xf6, 0xaa, 0x6f, 0x56, 0x0e, 0x62, 0xbb, 0x0d, 0xcc, 0x00, 0x9b, + 0x95, 0xcd, 0xd7, 0x89, 0xd4, 0xd5, 0xf6, 0x8c, 0x7a, 0x99, 0xda, 0xde, 0xc5, 0xfa, 0xe1, 0x05, + 0x4d, 0xcc, 0x44, 0x7b, 0x92, 0xb1, 0xe8, 0x4c, 0xa2, 0x57, 0x4c, 0x47, 0xbb, 0x0c, 0x59, 0x08, + 0xe8, 0x47, 0xe2, 0xb4, 0xd6, 0xd5, 0xad, 0x4d, 0x1c, 0xce, 0xa8, 0x97, 0x65, 0x13, 0x15, 0xff, + 0x1e, 0x5a, 0x68, 0x30, 0xc2, 0x91, 0x70, 0x49, 0x11, 0xde, 0x77, 0xab, 0xb2, 0x47, 0xb0, 0xc3, + 0x28, 0x25, 0xd7, 0x08, 0xd4, 0x14, 0xd7, 0x66, 0xcd, 0x85, 0xd6, 0x3b, 0x04, 0x25, 0xa6, 0x41, + 0x08, 0xfc, 0xfa, 0x2e, 0xb6, 0x15, 0xdf, 0x8d, 0x0d, 0xf8, 0xab, 0x79, 0x68, 0x85, 0xc9, 0x06, + 0x84, 0x14, 0xaf, 0x12, 0x88, 0xf8, 0xdc, 0x7e, 0xfe, 0x09, 0x54, 0x14, 0xc6, 0x9c, 0xef, 0x66, + 0x8a, 0xc7, 0x02, 0x18, 0xa5, 0xd6, 0x13, 0x2c, 0x60, 0x64, 0x1e, 0x56, 0x4b, 0x0d, 0x01, 0xd2, + 0xa7, 0x04, 0x22, 0x60, 0x4b, 0x03, 0x97, 0xab, 0x6c, 0x83, 0xf1, 0xcf, 0x1a, 0x97, 0xa6, 0x81, + 0x4e, 0xf2, 0x7a, 0x43, 0x4a, 0x38, 0x0c, 0x97, 0xa6, 0x6c, 0x07, 0x62, 0x87, 0x1a, 0xb7, 0x53, + 0x09, 0x45, 0x6a, 0xdd, 0x11, 0x37, 0x30, 0xb2, 0x32, 0x03, 0x31, 0xc6, 0x61, 0xec, 0xdd, 0x1d, + 0xc1, 0x26, 0x05, 0xf8, 0xbf, 0x22, 0xd9, 0x02, 0x18, 0x7d, 0x90, 0x41, 0xd5, 0xc2, 0x2d, 0xbf, + 0x08, 0xfa, 0xb0, 0x01, 0x79, 0x07, 0x5a, 0xec, 0x01, 0xf6, 0x87, 0x6a, 0xc0, 0x8b, 0x64, 0x16, + 0x94, 0xe5, 0xd6, 0x53, 0x74, 0x1f, 0xb7, 0x1e, 0x94, 0xe3, 0xd6, 0x63, 0xb4, 0xc7, 0xdf, 0x6e, + 0x8c, 0x1b, 0xde, 0x9b, 0x65, 0x06, 0x02, 0xb3, 0x69, 0xfc, 0x32, 0xe6, 0x7a, 0x89, 0x39, 0x9b, + 0x04, 0x60, 0x9a, 0x7c, 0xe4, 0xae, 0x91, 0xf8, 0xcc, 0x1e, 0x4f, 0xb8, 0xd2, 0x20, 0x0c, 0x95, + 0xee, 0x46, 0x25, 0x10, 0x49, 0xc6, 0x8e, 0xea, 0x47, 0x8d, 0x0b, 0x81, 0xb5, 0x06, 0x29, 0xfd, + 0x17, 0xf3, 0x50, 0xd1, 0x36, 0x77, 0xb3, 0x12, 0x6e, 0x71, 0x7b, 0x14, 0x9e, 0x47, 0xf3, 0x31, + 0x95, 0x80, 0x15, 0xc5, 0x7f, 0xf3, 0xeb, 0xf3, 0xbb, 0x3c, 0xc2, 0xb2, 0xe6, 0xf5, 0x45, 0x7c, + 0x82, 0xf5, 0xdb, 0x83, 0xd5, 0x65, 0x7c, 0xf1, 0xd6, 0xda, 0x7c, 0xf1, 0x60, 0x5d, 0x59, 0x87, + 0xb9, 0xd7, 0xe8, 0x65, 0x01, 0xd4, 0x3b, 0xc7, 0xd4, 0x89, 0x0e, 0x97, 0xbd, 0x2a, 0xe8, 0x05, + 0xb0, 0x06, 0x15, 0x36, 0xbb, 0x0f, 0xbc, 0xdd, 0x1a, 0x8c, 0xb8, 0xc9, 0x92, 0xd3, 0xdf, 0x59, + 0x2b, 0xb5, 0xe8, 0x3e, 0x2b, 0x55, 0x98, 0xb3, 0x52, 0xaf, 0xa2, 0xa2, 0x5f, 0x1b, 0x88, 0xb6, + 0xf8, 0xc2, 0x11, 0x72, 0xc6, 0x9f, 0xcc, 0x1e, 0x9d, 0xac, 0x84, 0xb1, 0x1a, 0x18, 0xf7, 0x28, + 0x5b, 0xf5, 0xbf, 0xc3, 0x09, 0xae, 0xfe, 0xb1, 0x2a, 0x3d, 0x83, 0x9e, 0x16, 0xac, 0x85, 0x12, + 0x57, 0xb2, 0xbe, 0xa1, 0x01, 0x42, 0x2c, 0x4a, 0xff, 0x4d, 0x01, 0x2a, 0xb6, 0xf5, 0x6f, 0x2c, + 0x45, 0xc0, 0x6c, 0x64, 0x9e, 0x53, 0x0a, 0xf8, 0x76, 0x4b, 0xeb, 0xb1, 0x7b, 0xbd, 0xb2, 0x27, + 0xfb, 0x59, 0x54, 0x1c, 0x62, 0xbb, 0x37, 0x4f, 0xad, 0x0d, 0xc8, 0xaf, 0xb6, 0x7b, 0x97, 0x52, + 0x03, 0x07, 0xfb, 0xea, 0x2c, 0xbc, 0xcf, 0xea, 0x2c, 0xca, 0x59, 0x9d, 0xd5, 0xd4, 0x94, 0x06, + 0x56, 0xce, 0xb4, 0x68, 0x29, 0x41, 0x8b, 0x9a, 0x95, 0x70, 0xd8, 0xdd, 0x68, 0x1e, 0x4e, 0xf3, + 0x67, 0xf5, 0x3a, 0x55, 0xfa, 0x29, 0x2a, 0x17, 0xec, 0x73, 0x26, 0x96, 0xb0, 0x73, 0x0b, 0xcf, + 0xd2, 0x99, 0xae, 0xbe, 0xcc, 0x27, 0xe7, 0x4a, 0xfb, 0xe6, 0x21, 0xc4, 0x10, 0xc1, 0xdc, 0x25, + 0x34, 0x86, 0xa0, 0x78, 0x42, 0x26, 0x13, 0x28, 0x93, 0x5f, 0xfc, 0x8f, 0xd1, 0xd2, 0x70, 0xeb, + 0x1e, 0x6a, 0xdc, 0x4b, 0xe7, 0x2e, 0x0b, 0x6a, 0x6c, 0xde, 0x88, 0x12, 0x70, 0x63, 0x5b, 0x4f, + 0x98, 0x3b, 0xfa, 0x9b, 0xaf, 0x40, 0x2b, 0xcc, 0x79, 0xc4, 0x8c, 0x3c, 0xd6, 0x32, 0xc2, 0x0c, + 0xe6, 0x16, 0x18, 0x98, 0x80, 0x46, 0x98, 0xce, 0xb8, 0x32, 0xfd, 0x6d, 0x11, 0xe0, 0x06, 0x18, + 0xeb, 0x22, 0x96, 0x00, 0x03, 0x8c, 0x17, 0xd1, 0x4a, 0xc2, 0xf6, 0x12, 0x1b, 0x4d, 0x52, 0x17, + 0xa6, 0x36, 0x6f, 0x99, 0x81, 0xb7, 0xb1, 0x49, 0xa9, 0xa7, 0x47, 0x1f, 0x66, 0xdb, 0x06, 0xab, + 0xde, 0xac, 0x4a, 0x6f, 0xa2, 0x8d, 0x02, 0x33, 0x8d, 0xe2, 0xcb, 0xa0, 0xd7, 0x85, 0x59, 0x07, + 0x3b, 0x51, 0xbd, 0xfb, 0x8e, 0x79, 0x15, 0x83, 0x9d, 0x85, 0xd6, 0x35, 0x96, 0x39, 0x32, 0x40, + 0x8d, 0x48, 0x81, 0x23, 0x2b, 0x1d, 0x5c, 0x80, 0x16, 0x33, 0x86, 0x79, 0xfc, 0x46, 0xb4, 0x10, + 0x3c, 0xd9, 0x88, 0x78, 0x60, 0xac, 0xaf, 0x40, 0x40, 0xe2, 0xd3, 0x44, 0x63, 0x80, 0xd9, 0x89, + 0x99, 0x44, 0xaf, 0x3e, 0x72, 0x0d, 0x20, 0xc9, 0x58, 0x7c, 0x4f, 0x53, 0x38, 0xd8, 0x12, 0x96, + 0x49, 0x55, 0xfe, 0x57, 0x68, 0xbe, 0xdf, 0x17, 0x68, 0x22, 0x9c, 0xfc, 0x5b, 0xaa, 0xb4, 0x49, + 0xc0, 0x00, 0xf1, 0x0d, 0xa8, 0x08, 0x56, 0x25, 0x99, 0x8f, 0xbf, 0xd2, 0xfb, 0x2f, 0x53, 0xbd, + 0xb4, 0x36, 0x70, 0x3c, 0xfd, 0xfb, 0x3b, 0xfa, 0xc5, 0x23, 0xda, 0x91, 0xc3, 0xe9, 0xbb, 0x83, + 0xa9, 0xa9, 0x5b, 0xc9, 0xf8, 0x31, 0xed, 0xe8, 0x68, 0xfa, 0xee, 0x48, 0x6a, 0xec, 0x18, 0xf8, + 0x42, 0xc9, 0x18, 0x0d, 0x7f, 0x99, 0x43, 0x0b, 0x5b, 0xdc, 0x21, 0x77, 0xb3, 0xa9, 0x3d, 0xff, + 0xc9, 0x1c, 0xe6, 0x86, 0xeb, 0xea, 0x71, 0x4d, 0x60, 0x4f, 0xbd, 0xaa, 0xe4, 0x16, 0x48, 0x5b, + 0xf1, 0x1d, 0xdb, 0x68, 0x40, 0xdb, 0x8f, 0x99, 0x63, 0x8b, 0xb3, 0x1c, 0x3f, 0x9f, 0x39, 0xd3, + 0x45, 0xfc, 0xb0, 0x4e, 0xdd, 0x26, 0x96, 0x63, 0x00, 0x1c, 0xed, 0x35, 0x18, 0x53, 0x93, 0x73, + 0xd7, 0xbb, 0x87, 0x40, 0x0d, 0xae, 0xf5, 0x0e, 0xc9, 0xa4, 0x03, 0x43, 0xf0, 0x7a, 0xc4, 0xed, + 0xf7, 0x07, 0xf7, 0x37, 0x34, 0xf9, 0x5a, 0xde, 0xd9, 0xa7, 0x04, 0x36, 0xba, 0x7d, 0x7e, 0xc5, + 0x8b, 0xb7, 0x66, 0x61, 0x4d, 0x93, 0x2a, 0xed, 0x13, 0xf2, 0x95, 0x8b, 0x6f, 0xe7, 0x01, 0x12, + 0x4d, 0x74, 0xcf, 0xd5, 0xf4, 0x68, 0xaf, 0x76, 0xe9, 0x66, 0xfa, 0xd6, 0x65, 0x63, 0x40, 0x20, + 0x95, 0x74, 0xb5, 0xa7, 0xc7, 0x63, 0xe9, 0x3b, 0x5f, 0xa6, 0xef, 0x1e, 0x31, 0x45, 0x7e, 0x43, + 0xe2, 0x60, 0xc0, 0x72, 0xbe, 0x7e, 0x0c, 0x92, 0xca, 0x4c, 0xce, 0x43, 0x91, 0xd4, 0x5d, 0xaa, + 0xd4, 0x80, 0xde, 0x16, 0xd8, 0xed, 0x23, 0xd6, 0xb0, 0x8b, 0xc7, 0xba, 0x7f, 0xc0, 0xd6, 0xa4, + 0x2b, 0x4d, 0x14, 0xca, 0xbd, 0x43, 0xda, 0x9d, 0xcb, 0xc9, 0xe9, 0x11, 0x30, 0x25, 0x80, 0x3a, + 0xa5, 0x5f, 0x2c, 0x40, 0x0b, 0x25, 0xd0, 0x0e, 0xb5, 0x21, 0xd4, 0x12, 0x52, 0xe0, 0x87, 0xf9, + 0x50, 0x86, 0x1d, 0x1e, 0x18, 0xb0, 0x58, 0x47, 0xd6, 0xa1, 0xc7, 0xd8, 0xd0, 0x14, 0x31, 0x74, + 0x0e, 0x3e, 0x88, 0x33, 0x89, 0x5e, 0x37, 0xae, 0xac, 0x8d, 0x8c, 0xe9, 0x1f, 0xf7, 0x25, 0xa7, + 0x47, 0xd8, 0x26, 0x30, 0xa1, 0x32, 0x83, 0x92, 0x3f, 0x80, 0x16, 0xb7, 0x04, 0xc3, 0x11, 0xb3, + 0xe3, 0x82, 0xb9, 0x3b, 0x1e, 0xec, 0x7f, 0xe8, 0x8e, 0x71, 0x13, 0xd2, 0x31, 0xdb, 0x15, 0xdf, + 0x84, 0x16, 0xb5, 0xe0, 0xa9, 0x34, 0xf7, 0x75, 0x8e, 0x13, 0x22, 0xd4, 0x5c, 0x07, 0x13, 0x4e, + 0xf6, 0x34, 0x7e, 0x07, 0x35, 0x1b, 0x8a, 0x6b, 0xb5, 0xae, 0x3b, 0xc9, 0xe9, 0x8f, 0xa1, 0x2b, + 0x62, 0xa5, 0x71, 0x74, 0x2c, 0x39, 0x3d, 0x02, 0x12, 0x96, 0x6c, 0x56, 0x5c, 0xf3, 0x0e, 0x5a, + 0xc2, 0xa2, 0xf9, 0xde, 0x6c, 0x7a, 0xab, 0x67, 0x38, 0x55, 0xfa, 0x5f, 0x39, 0x94, 0xe6, 0x04, + 0xb2, 0x92, 0xe2, 0xbf, 0xe1, 0x60, 0x75, 0xa9, 0x18, 0x07, 0x86, 0xf3, 0x74, 0xd6, 0xc8, 0x60, + 0xf1, 0xdc, 0x55, 0x38, 0xb4, 0x89, 0x49, 0xbd, 0xff, 0xf2, 0x87, 0xc1, 0x3d, 0x40, 0x6a, 0x2a, + 0x1c, 0xda, 0x78, 0xaf, 0xde, 0x3d, 0x48, 0xc5, 0x46, 0x98, 0xcb, 0x57, 0x1d, 0xd9, 0xce, 0x39, + 0xc3, 0x9d, 0xf0, 0x37, 0x94, 0xeb, 0x63, 0xa3, 0xa9, 0x9e, 0x6e, 0x38, 0xc9, 0x99, 0x91, 0x28, + 0x6d, 0x0d, 0xad, 0xb4, 0x4b, 0x57, 0xc1, 0x07, 0x19, 0x2a, 0x1b, 0x22, 0xe2, 0x54, 0x17, 0xe8, + 0x5b, 0x60, 0x5f, 0xc0, 0x9c, 0x19, 0xa7, 0x1a, 0xaf, 0x16, 0x99, 0xc2, 0xbe, 0x2f, 0xb5, 0x81, + 0x09, 0xf3, 0x89, 0x2c, 0x75, 0xe2, 0x26, 0x58, 0x29, 0x94, 0xfe, 0x9b, 0x45, 0x08, 0x91, 0x3b, + 0x7e, 0x6b, 0x63, 0x88, 0xdf, 0x8b, 0x96, 0xbb, 0xdb, 0xdc, 0x3e, 0x2c, 0xbb, 0x9b, 0x1a, 0x7c, + 0xd8, 0xbe, 0xf8, 0x95, 0x27, 0xa7, 0x50, 0x7c, 0x46, 0xbb, 0xf3, 0x05, 0xe8, 0x75, 0x0d, 0x01, + 0x98, 0xbe, 0x55, 0x38, 0xc8, 0xbb, 0x16, 0xb8, 0xd2, 0xe6, 0x34, 0xe3, 0xff, 0x1c, 0x15, 0xc3, + 0xf5, 0x6e, 0xfa, 0xe4, 0xc0, 0x3a, 0xad, 0xce, 0xbf, 0x69, 0x6a, 0x5e, 0x57, 0xa5, 0x57, 0x05, + 0x7b, 0x0b, 0x33, 0xaa, 0x04, 0x28, 0xa3, 0xf4, 0x53, 0xb7, 0xe1, 0xd1, 0xd0, 0xda, 0xce, 0xb0, + 0x7f, 0x60, 0xe7, 0xd8, 0x9b, 0x1a, 0xbd, 0x63, 0x95, 0x2e, 0xed, 0x7d, 0xde, 0x03, 0xf4, 0x6e, + 0x6b, 0x61, 0xf5, 0x7e, 0x31, 0x73, 0xe6, 0xd2, 0xfd, 0x7a, 0xb7, 0x35, 0xe5, 0x8f, 0x71, 0x68, + 0x85, 0xdb, 0xeb, 0xc5, 0x5e, 0x6a, 0x3b, 0x82, 0xe6, 0x10, 0xe6, 0xcf, 0x39, 0x84, 0x3a, 0x55, + 0xaa, 0x11, 0x72, 0x5b, 0x89, 0x95, 0xac, 0x33, 0x96, 0xd6, 0x7d, 0xc3, 0x74, 0x33, 0xb8, 0x9e, + 0x7f, 0x24, 0xb9, 0x18, 0xf8, 0x8b, 0x1c, 0x5a, 0x0d, 0xe3, 0xc3, 0x05, 0x1b, 0x43, 0xc1, 0x66, + 0x73, 0x48, 0x0b, 0xe6, 0x1c, 0x52, 0xbd, 0x2a, 0x6d, 0x15, 0x66, 0x69, 0x2a, 0x3e, 0x97, 0x9c, + 0xea, 0x67, 0x67, 0x88, 0xea, 0x8b, 0xe6, 0x9a, 0xa7, 0x59, 0x90, 0xf1, 0xbf, 0x45, 0xc5, 0xc4, + 0x3f, 0x86, 0x0c, 0x6c, 0xe1, 0x9c, 0x03, 0xc3, 0xd6, 0x5a, 0xf6, 0x16, 0x62, 0x25, 0x38, 0xa4, + 0x50, 0xaf, 0x21, 0x18, 0x46, 0x6a, 0xb8, 0x73, 0x96, 0x15, 0xb3, 0xb5, 0xae, 0x86, 0xc8, 0x01, + 0xe8, 0x26, 0x27, 0x30, 0x67, 0x45, 0xfc, 0x84, 0x63, 0xb9, 0x17, 0xf2, 0xb5, 0x37, 0x3b, 0x32, + 0xe7, 0x3e, 0x01, 0x8b, 0xa6, 0x7b, 0xd1, 0x76, 0xf6, 0x26, 0x31, 0xee, 0xe4, 0xd8, 0xb8, 0x76, + 0xf4, 0x77, 0xec, 0xbe, 0x4d, 0xc6, 0x88, 0xc1, 0xe2, 0x3a, 0xb0, 0x98, 0x49, 0x4e, 0x75, 0xc1, + 0x69, 0x02, 0xf2, 0x5b, 0xc6, 0x7a, 0x2e, 0x56, 0xc1, 0x54, 0x92, 0x1f, 0xe4, 0x53, 0x98, 0xe5, + 0xaf, 0xca, 0x9d, 0xf0, 0xf2, 0xd2, 0xc3, 0xc5, 0x68, 0x09, 0xb5, 0xae, 0x36, 0x4e, 0x78, 0x17, + 0x87, 0x96, 0xc1, 0x69, 0xa0, 0xe0, 0xfb, 0x1c, 0x3e, 0x6c, 0xca, 0x9c, 0xdd, 0x46, 0xac, 0x24, + 0xca, 0x93, 0xa9, 0xce, 0x07, 0x3a, 0x81, 0xd9, 0xed, 0xf1, 0x38, 0xac, 0xf5, 0x86, 0x71, 0xcc, + 0x7b, 0x80, 0x71, 0x64, 0xb5, 0xb1, 0x8d, 0xe3, 0x01, 0xce, 0x62, 0x76, 0x7b, 0x7e, 0x8a, 0x43, + 0xcb, 0x9b, 0x83, 0x6d, 0x0a, 0x39, 0x16, 0x96, 0x9e, 0x7e, 0xf6, 0x81, 0x60, 0x43, 0xfd, 0x95, + 0x4c, 0x23, 0x6b, 0x34, 0xbf, 0x4c, 0x5d, 0x9d, 0xd2, 0x8e, 0x12, 0x5f, 0xda, 0xf4, 0x91, 0x2f, + 0xe9, 0xe0, 0xe6, 0x1e, 0x56, 0x99, 0xf5, 0x11, 0x97, 0x86, 0x4c, 0xad, 0x14, 0x46, 0xc4, 0xa0, + 0x28, 0x97, 0x73, 0x06, 0xca, 0xff, 0x63, 0x0e, 0xad, 0x0c, 0x29, 0x14, 0x6c, 0x9c, 0x1a, 0xf8, + 0x82, 0xb9, 0xcf, 0x6e, 0xab, 0x2a, 0x85, 0x84, 0x92, 0xac, 0x86, 0xd6, 0x57, 0xec, 0x4a, 0x4e, + 0xf5, 0x67, 0x4d, 0xeb, 0x83, 0x1c, 0xe0, 0xfc, 0x5f, 0x91, 0x39, 0x73, 0x29, 0x75, 0x7d, 0x28, + 0x75, 0xf2, 0x72, 0xb9, 0x9c, 0x77, 0xa8, 0xfc, 0x71, 0x0e, 0xad, 0xf0, 0xf8, 0x15, 0x77, 0x00, + 0xc3, 0x5d, 0x01, 0xf8, 0x80, 0xb9, 0xcf, 0x38, 0xb6, 0xfe, 0xcb, 0x6d, 0x25, 0x3e, 0x47, 0x87, + 0x80, 0x7d, 0x23, 0x26, 0x1f, 0x88, 0xee, 0xe4, 0xe2, 0x31, 0xc6, 0xc4, 0x83, 0x7c, 0x59, 0xab, + 0x84, 0x7d, 0x21, 0x05, 0xa8, 0x26, 0x31, 0xd3, 0x9c, 0x6d, 0x50, 0xd8, 0x90, 0x3e, 0x4f, 0x33, + 0x71, 0xbd, 0xb5, 0x0d, 0x7a, 0xac, 0x51, 0xcd, 0x35, 0xa4, 0x3c, 0x58, 0xf8, 0x18, 0x87, 0x1e, + 0x73, 0x7b, 0xbd, 0x75, 0x07, 0x22, 0x4a, 0x28, 0xe0, 0xf6, 0x67, 0xdd, 0x1f, 0x85, 0x73, 0x0e, + 0x6d, 0x8f, 0x2a, 0xed, 0x16, 0x66, 0x6f, 0x2d, 0xd6, 0xd0, 0x11, 0x26, 0x63, 0x47, 0xf5, 0xf3, + 0xb7, 0xc9, 0x0b, 0xda, 0xb5, 0x6b, 0x10, 0xd8, 0xe4, 0x81, 0xa6, 0x71, 0x76, 0xf4, 0xfc, 0x3f, + 0xe5, 0xd0, 0x5a, 0x38, 0x78, 0xb6, 0x0a, 0xec, 0x65, 0x53, 0x34, 0xe7, 0xf8, 0xb1, 0xf0, 0x73, + 0x1f, 0x14, 0xe2, 0x1b, 0x59, 0x7b, 0x36, 0xef, 0x47, 0xcc, 0xf5, 0x05, 0xf7, 0xe9, 0xa0, 0x7a, + 0xb2, 0x40, 0x95, 0x7e, 0x5f, 0x80, 0xbe, 0x28, 0x10, 0x6c, 0x34, 0x55, 0x1c, 0x2d, 0xc8, 0x73, + 0x13, 0xb0, 0x4e, 0x3a, 0x0f, 0x70, 0x2b, 0xd8, 0xea, 0xdb, 0xef, 0x86, 0x0a, 0x87, 0xa6, 0xf6, + 0x02, 0x6f, 0x9c, 0x1a, 0xee, 0x04, 0x27, 0x52, 0xec, 0xeb, 0x00, 0x57, 0x05, 0x09, 0x37, 0x64, + 0x7e, 0xfb, 0xbd, 0x68, 0x3b, 0x7b, 0x64, 0x01, 0x32, 0x1b, 0x59, 0xba, 0x17, 0x6d, 0x9f, 0xed, + 0xac, 0xdf, 0x8b, 0xb6, 0xe7, 0xdd, 0xb6, 0x36, 0x78, 0xac, 0x2b, 0x35, 0x78, 0x98, 0x8d, 0x4a, + 0xa1, 0x4d, 0xde, 0xce, 0x9c, 0x88, 0xea, 0x13, 0xed, 0xfa, 0x48, 0x5c, 0x3b, 0x33, 0x96, 0xba, + 0x4e, 0x78, 0xde, 0xd2, 0xbf, 0x5d, 0x80, 0x16, 0x6e, 0x6f, 0xc0, 0x3e, 0xe7, 0x1d, 0xdc, 0xac, + 0x5c, 0x26, 0x96, 0x55, 0x72, 0xb9, 0xcc, 0x37, 0xe0, 0x81, 0x1b, 0xb8, 0x6a, 0x1a, 0x4f, 0x81, + 0x98, 0x97, 0xe2, 0x38, 0x15, 0xc9, 0x58, 0x34, 0x19, 0x3f, 0x0b, 0x21, 0x4b, 0x6c, 0x95, 0xc1, + 0xa6, 0x24, 0x97, 0x03, 0x3d, 0xcf, 0x65, 0xf9, 0x9c, 0x81, 0xb0, 0xf4, 0x91, 0x2a, 0xed, 0xcf, + 0xf2, 0x39, 0x6b, 0x04, 0x7c, 0xe4, 0x83, 0xe6, 0xe8, 0x1c, 0x0c, 0x07, 0xf1, 0x10, 0xa0, 0x1a, + 0x34, 0x99, 0x49, 0xf4, 0xea, 0x43, 0x93, 0xc9, 0xaf, 0xee, 0xc2, 0xb3, 0xb1, 0x36, 0x32, 0xe6, + 0xf1, 0xfb, 0xee, 0x45, 0xdb, 0x1b, 0xdc, 0xee, 0x06, 0x70, 0xcf, 0x01, 0x23, 0xae, 0x2c, 0xb7, + 0xb5, 0x01, 0x0e, 0xad, 0xf2, 0x2a, 0x7b, 0xdd, 0xad, 0xfe, 0x48, 0x03, 0xfb, 0x8a, 0x0b, 0x02, + 0x16, 0xb1, 0xd1, 0xcd, 0x5f, 0x43, 0x7c, 0x8d, 0x3a, 0xb9, 0x26, 0x63, 0x47, 0xd9, 0x07, 0xe5, + 0x07, 0x1b, 0x48, 0x7e, 0xac, 0xfc, 0x69, 0x0e, 0x2d, 0x02, 0x85, 0x9d, 0xf9, 0x9a, 0x97, 0x23, + 0xe4, 0xc1, 0x0a, 0xaf, 0x93, 0xa1, 0x16, 0x08, 0x79, 0x78, 0xa0, 0x66, 0x43, 0x71, 0x33, 0x1b, + 0x3b, 0xca, 0x10, 0x4f, 0xf0, 0x4b, 0x25, 0xeb, 0xbb, 0x3b, 0x93, 0xe8, 0x6d, 0x52, 0x0e, 0xea, + 0xa7, 0x6d, 0xfe, 0x7d, 0x58, 0x46, 0x0b, 0xeb, 0xa7, 0x27, 0x92, 0xb1, 0xeb, 0xfa, 0xd0, 0x91, + 0xf4, 0xc4, 0x2d, 0xfd, 0x74, 0xbf, 0x6c, 0x62, 0x5d, 0x53, 0x8d, 0x96, 0xb0, 0x7d, 0x3e, 0x94, + 0x3e, 0x80, 0xb8, 0x96, 0x90, 0xdd, 0x29, 0xbe, 0x65, 0xd3, 0x49, 0xc1, 0xca, 0xe2, 0x93, 0x9b, + 0x1a, 0xee, 0x84, 0x3d, 0x95, 0x65, 0x95, 0x08, 0xe7, 0x77, 0x7b, 0x03, 0x9c, 0x72, 0xe2, 0x9a, + 0x78, 0xf3, 0x64, 0xea, 0x52, 0xbc, 0xf4, 0x5f, 0x2d, 0x44, 0x8b, 0x88, 0xa2, 0x8c, 0xaf, 0x41, + 0x85, 0xa0, 0x12, 0xa4, 0xae, 0x95, 0xd8, 0x5d, 0x90, 0x02, 0xc5, 0x47, 0xd3, 0x5d, 0x5f, 0xa5, + 0xc7, 0x27, 0xa8, 0xa6, 0xcb, 0x2c, 0x90, 0x69, 0x15, 0x7e, 0x23, 0x2a, 0x82, 0xbf, 0x37, 0x2b, + 0x07, 0x89, 0x8a, 0x0a, 0x1c, 0xdc, 0x28, 0x54, 0x2c, 0xc9, 0x8b, 0x65, 0xb3, 0x72, 0x50, 0xb6, + 0x2a, 0xf1, 0x9b, 0xf3, 0x2b, 0x25, 0x21, 0x18, 0x4a, 0x56, 0x91, 0xb8, 0x54, 0xfa, 0xa8, 0x35, + 0xa4, 0x38, 0xd2, 0xe3, 0x9f, 0x64, 0x4e, 0x77, 0xb9, 0x6a, 0x73, 0x34, 0x97, 0xaf, 0x64, 0x6b, + 0x2e, 0x6b, 0x9e, 0x54, 0xa5, 0x35, 0x02, 0x05, 0x9a, 0x08, 0x52, 0x57, 0x2f, 0xe8, 0xdd, 0x77, + 0x8c, 0xef, 0xa1, 0x8a, 0xcd, 0xf7, 0x67, 0x55, 0x6c, 0xd6, 0x54, 0xaa, 0x92, 0x20, 0xe4, 0x96, + 0x8a, 0xab, 0xc8, 0x68, 0xb0, 0x72, 0xd6, 0x20, 0x59, 0x60, 0x3a, 0x99, 0x47, 0x0f, 0xba, 0x39, + 0x5b, 0x0f, 0x4a, 0xe2, 0x22, 0x9a, 0x40, 0xd1, 0x01, 0xa8, 0x88, 0x3b, 0x8a, 0xa3, 0x3e, 0xe4, + 0x0b, 0x78, 0x7c, 0x2d, 0x6e, 0xbf, 0xc3, 0x49, 0x6a, 0x30, 0x8a, 0xd3, 0xf7, 0xf3, 0x29, 0x4e, + 0x89, 0x87, 0x2a, 0x5b, 0x20, 0x3e, 0x3b, 0x37, 0x52, 0xa8, 0x95, 0xa5, 0x71, 0x6d, 0xe7, 0xe6, + 0x52, 0xb9, 0x82, 0x4b, 0x55, 0xde, 0x0a, 0xa2, 0xb8, 0x09, 0xc7, 0xd8, 0x74, 0x60, 0x1f, 0x79, + 0x07, 0xa9, 0xe2, 0x70, 0x43, 0x9d, 0xd4, 0x70, 0xe7, 0x87, 0xe1, 0x60, 0x80, 0x1e, 0xa3, 0xd4, + 0xd5, 0xd3, 0x19, 0xf5, 0xf2, 0x2c, 0x1a, 0xdc, 0x2d, 0xf9, 0x34, 0xb8, 0xb0, 0xbb, 0x6c, 0x05, + 0xe2, 0x2a, 0x5b, 0x97, 0x34, 0xe4, 0xa2, 0x5d, 0xd7, 0x4b, 0x74, 0x6c, 0xe6, 0xe6, 0x17, 0x37, + 0x92, 0xa3, 0x82, 0x5d, 0xdb, 0x18, 0xaf, 0x08, 0x43, 0x02, 0xc3, 0xdb, 0x94, 0x9e, 0x29, 0xa6, + 0x10, 0xc2, 0x7a, 0x6a, 0x5d, 0x09, 0x6d, 0x7c, 0x52, 0xbb, 0xd4, 0x99, 0x1a, 0x3c, 0x5c, 0x3a, + 0xb4, 0x08, 0x2d, 0x71, 0x32, 0xe1, 0x03, 0xf8, 0x9d, 0x68, 0x11, 0xae, 0x4b, 0x0f, 0x15, 0x36, + 0xbe, 0x30, 0x61, 0x62, 0x65, 0x8d, 0xb3, 0x01, 0x82, 0x9e, 0x51, 0x25, 0x05, 0x8d, 0x7b, 0x39, + 0x93, 0xe8, 0x4d, 0x1f, 0xbb, 0xa9, 0x0f, 0x1d, 0xa1, 0x13, 0x24, 0x9b, 0xed, 0xf8, 0x46, 0xf6, + 0x1d, 0x0b, 0x0e, 0x1a, 0xe6, 0xee, 0x98, 0xf8, 0x93, 0xaf, 0xb0, 0xe3, 0xa0, 0x3e, 0xa1, 0x30, + 0x1f, 0xd6, 0xd7, 0x7c, 0x75, 0x37, 0x19, 0xef, 0xd7, 0x2f, 0x5c, 0x4e, 0x4f, 0x7c, 0xa2, 0xa9, + 0xbd, 0xe9, 0xbb, 0x47, 0xf4, 0xa9, 0x4b, 0xec, 0x93, 0x98, 0x1b, 0x15, 0xb9, 0x69, 0x8c, 0x87, + 0x79, 0x96, 0xeb, 0xa8, 0x05, 0x15, 0x9f, 0xa3, 0xdf, 0x00, 0x6f, 0xe0, 0x74, 0xce, 0x5c, 0xb5, + 0x15, 0x0e, 0x1a, 0xfa, 0xb4, 0xac, 0xc6, 0xd9, 0x50, 0x89, 0x87, 0x54, 0xe9, 0xaa, 0x2d, 0x97, + 0xad, 0xf6, 0x7c, 0x1d, 0x5a, 0x4c, 0x7e, 0x30, 0xd6, 0xc9, 0xf8, 0xa4, 0xb3, 0x70, 0x71, 0x05, + 0x13, 0xd3, 0xc1, 0xb4, 0x47, 0x66, 0xca, 0xf9, 0x17, 0xd1, 0x7c, 0xaf, 0x12, 0xf6, 0x90, 0xe3, + 0x89, 0x23, 0xa8, 0x61, 0x80, 0xf8, 0x28, 0xd3, 0x10, 0xc2, 0x99, 0x90, 0x07, 0x6c, 0x5c, 0xcc, + 0x6f, 0x47, 0x8b, 0x08, 0x1a, 0xc2, 0xd3, 0x3f, 0x9a, 0xcb, 0xe3, 0xe1, 0x62, 0x70, 0xb7, 0x06, + 0x9c, 0xec, 0x60, 0x08, 0x36, 0x13, 0x0b, 0xbf, 0x1d, 0x2d, 0x04, 0x3b, 0x37, 0x62, 0x74, 0x87, + 0x0f, 0x21, 0x01, 0x89, 0x02, 0x3b, 0x18, 0xc6, 0xac, 0xaf, 0x82, 0xfa, 0xa2, 0xc0, 0xef, 0xd4, + 0x70, 0xa7, 0x4c, 0xda, 0xf0, 0x2f, 0x59, 0xb1, 0x1d, 0x0b, 0x2d, 0xfa, 0x45, 0x63, 0x3b, 0x2e, + 0x9b, 0x35, 0xaa, 0xe3, 0x4b, 0x56, 0x30, 0xa9, 0x22, 0xa6, 0xa1, 0x19, 0x4c, 0x6a, 0xd9, 0xac, + 0x61, 0xa4, 0xaa, 0x51, 0x11, 0xc6, 0x61, 0x3d, 0x0b, 0xc3, 0xc7, 0x5b, 0x50, 0x71, 0x09, 0x15, + 0xab, 0x33, 0xa7, 0x6e, 0xc9, 0x56, 0x01, 0xff, 0x9a, 0xed, 0x2d, 0x6c, 0xb1, 0xd5, 0x2f, 0x03, + 0x16, 0x97, 0x40, 0xa7, 0xa4, 0x35, 0x53, 0x52, 0xbd, 0x53, 0x95, 0x64, 0x54, 0x2f, 0xd8, 0x4e, + 0x91, 0xf8, 0x73, 0xe2, 0x3b, 0x89, 0x2d, 0xeb, 0x67, 0x3f, 0x9e, 0x65, 0xc9, 0xa9, 0x2e, 0xa3, + 0xe6, 0xf4, 0x08, 0xd4, 0xd4, 0xd4, 0x5e, 0x30, 0x57, 0x29, 0x2f, 0xfd, 0xbb, 0x05, 0xe8, 0x31, + 0x27, 0x51, 0xb2, 0x59, 0x88, 0x65, 0xe5, 0xd7, 0xad, 0x4a, 0x38, 0xc2, 0xbf, 0x9d, 0x7d, 0x4a, + 0x5f, 0x32, 0xbe, 0x96, 0x9e, 0x52, 0x88, 0x08, 0x42, 0x0f, 0xe6, 0x37, 0x35, 0x25, 0xa1, 0xd5, + 0xcb, 0x0b, 0x4a, 0xa2, 0x85, 0xe2, 0xb2, 0x5f, 0xbd, 0xbf, 0xbe, 0xf2, 0x15, 0x77, 0xe5, 0x47, + 0x52, 0xe5, 0x7b, 0x95, 0x1f, 0xfc, 0xf4, 0x59, 0xeb, 0x84, 0x6e, 0xb1, 0xef, 0xea, 0x02, 0xd3, + 0xcc, 0xf8, 0xbe, 0xbb, 0xfa, 0x9b, 0x9a, 0xf9, 0xa1, 0x82, 0xe5, 0x5c, 0xfe, 0xcd, 0x3d, 0xef, + 0x21, 0x37, 0xf7, 0x6f, 0xad, 0xcd, 0x3d, 0x7f, 0xee, 0xcd, 0xbd, 0x45, 0x95, 0x5c, 0x82, 0x59, + 0x59, 0x7c, 0xdd, 0xfc, 0x62, 0x76, 0x7a, 0x59, 0x77, 0x31, 0xe0, 0xc7, 0xf4, 0x91, 0x1e, 0xfd, + 0x64, 0xb7, 0x1e, 0xbd, 0xaa, 0x0d, 0x1c, 0x65, 0xe9, 0xa0, 0x75, 0x18, 0x3e, 0xa4, 0x87, 0x61, + 0x01, 0x89, 0x5a, 0x02, 0x51, 0x97, 0xd7, 0x99, 0x51, 0x97, 0xd7, 0xd5, 0x04, 0x83, 0xfe, 0x5d, + 0x06, 0xb3, 0x43, 0xdc, 0xc6, 0xc9, 0x41, 0x29, 0xb7, 0x8f, 0x80, 0x35, 0x28, 0xb5, 0xcc, 0xc3, + 0xf0, 0x4f, 0x7a, 0x4e, 0xde, 0xb1, 0xce, 0xc9, 0x42, 0xd3, 0x1b, 0xfb, 0x29, 0xeb, 0x9c, 0xac, + 0x64, 0xa7, 0xda, 0x3c, 0x2c, 0x73, 0xaf, 0x25, 0x39, 0x47, 0xbb, 0x72, 0xa3, 0xfd, 0xbe, 0x8c, + 0x03, 0x09, 0x59, 0xd4, 0xf6, 0xe9, 0xfb, 0x52, 0x5b, 0x58, 0xd7, 0x02, 0x86, 0xb8, 0x56, 0xbb, + 0x55, 0xe9, 0x57, 0xe8, 0x97, 0xc2, 0xec, 0x1b, 0x53, 0x7c, 0x04, 0xa2, 0xf1, 0xe0, 0x91, 0x9b, + 0xd7, 0xe6, 0xd7, 0x9c, 0xb9, 0xc9, 0xbe, 0xe6, 0xd8, 0x4d, 0xf2, 0x35, 0xb7, 0x88, 0xa9, 0x01, + 0x43, 0x2f, 0x3d, 0x5c, 0x80, 0xd6, 0xe4, 0x43, 0x1f, 0x6e, 0x09, 0x06, 0xc2, 0x0a, 0xbf, 0x0e, + 0xcd, 0xf7, 0x04, 0xbd, 0x0a, 0x71, 0x70, 0x5a, 0xa3, 0x4a, 0x8f, 0x0a, 0x18, 0x20, 0x2e, 0x4b, + 0xdf, 0x3d, 0xa1, 0x9d, 0x3d, 0x9f, 0x39, 0x71, 0x26, 0x3d, 0x31, 0x91, 0xba, 0xd8, 0x2e, 0x63, + 0x30, 0x5f, 0x6d, 0x3d, 0x58, 0x17, 0x58, 0x3e, 0xdd, 0x26, 0x4c, 0xe4, 0xd9, 0x56, 0x26, 0x5d, + 0x24, 0x85, 0xfc, 0x06, 0xb4, 0x30, 0xa4, 0x84, 0x5b, 0xfd, 0xe0, 0xa9, 0x54, 0x48, 0xa2, 0xda, + 0x02, 0x48, 0x5c, 0x02, 0x2d, 0x53, 0x53, 0x1f, 0xeb, 0xe7, 0x47, 0x64, 0x02, 0xe5, 0x5d, 0x68, + 0xbe, 0xd7, 0x4d, 0x1e, 0xeb, 0xf3, 0xb8, 0x9f, 0xb2, 0x9f, 0x54, 0xf3, 0xa8, 0x2a, 0xad, 0x14, + 0x70, 0x75, 0x13, 0x19, 0x71, 0xd1, 0xc6, 0xb0, 0xd2, 0xbf, 0x5a, 0x88, 0x1e, 0xdb, 0x89, 0xc9, + 0x4c, 0x3e, 0x02, 0xf0, 0xab, 0x6c, 0x02, 0x50, 0xab, 0x4a, 0x3f, 0xb6, 0x08, 0xc0, 0xe3, 0x73, + 0x5c, 0xca, 0x0f, 0x44, 0x0d, 0xde, 0x65, 0xaf, 0x51, 0x6a, 0x85, 0xf9, 0x24, 0x7b, 0x8d, 0x2e, + 0xb7, 0x6f, 0x78, 0x57, 0xed, 0x5c, 0x88, 0x67, 0xbf, 0x3e, 0xe7, 0x7d, 0xc7, 0xeb, 0x73, 0xfe, + 0x43, 0x52, 0x98, 0x3f, 0xe4, 0x01, 0xdf, 0xce, 0x9e, 0xc3, 0x85, 0x96, 0x17, 0xd3, 0x43, 0x9d, + 0x43, 0x96, 0xbb, 0xd9, 0x6c, 0x5d, 0x90, 0x8b, 0x4c, 0x74, 0x2b, 0xad, 0x0b, 0xb2, 0x88, 0x5e, + 0x8d, 0x38, 0x10, 0x22, 0xac, 0xc5, 0x52, 0x66, 0x2d, 0xf0, 0x1a, 0x9b, 0x97, 0xe6, 0xfb, 0x16, + 0xad, 0x2d, 0x9c, 0x9b, 0xd6, 0x62, 0xae, 0x95, 0xd2, 0xda, 0x35, 0xc0, 0x4c, 0xe2, 0xae, 0xb2, + 0x28, 0x2e, 0xa5, 0xa3, 0xd5, 0xe7, 0x38, 0x55, 0x3a, 0xc3, 0xa1, 0x21, 0x4e, 0x98, 0x7d, 0x17, + 0x8b, 0xef, 0x02, 0x12, 0x66, 0xc1, 0xd2, 0x13, 0x77, 0x20, 0x84, 0x26, 0x7d, 0xb4, 0x36, 0xaa, + 0x9c, 0x98, 0xcc, 0x62, 0x6a, 0x33, 0xa7, 0xbf, 0xd0, 0xaf, 0x7f, 0xa2, 0x4d, 0x4c, 0x6a, 0xd7, + 0x4f, 0x67, 0x8e, 0x0c, 0x98, 0xf1, 0xd8, 0xaf, 0xa6, 0x4e, 0x5c, 0xd0, 0xa6, 0x6f, 0x6a, 0x1f, + 0xf7, 0xb1, 0x34, 0xc7, 0xda, 0x7b, 0x5f, 0x73, 0xe6, 0xc7, 0x97, 0x4e, 0x71, 0x68, 0x4d, 0xbe, + 0x81, 0xfd, 0x20, 0xe8, 0x4c, 0xe9, 0x7f, 0x35, 0x1f, 0xad, 0xd9, 0xea, 0x6b, 0x0c, 0xfd, 0x91, + 0xa8, 0xc3, 0x5e, 0x84, 0xe8, 0x9c, 0x86, 0x59, 0x9f, 0x81, 0x2a, 0x0b, 0x9c, 0x89, 0x0e, 0xa7, + 0xef, 0x1e, 0xa9, 0xc8, 0x0c, 0x9f, 0xd0, 0x12, 0x51, 0xf0, 0x7a, 0x02, 0xcd, 0x15, 0x98, 0xe8, + 0xc2, 0x82, 0xe6, 0x12, 0x11, 0x99, 0xc1, 0xcc, 0xdf, 0xe1, 0xd0, 0x22, 0x25, 0xe0, 0x09, 0x1d, + 0x6c, 0x89, 0x90, 0xb7, 0x8c, 0x1c, 0x1b, 0xb1, 0xed, 0x21, 0x5f, 0xa3, 0x2f, 0x50, 0x07, 0x95, + 0x20, 0xee, 0xdc, 0x2f, 0x48, 0x13, 0xad, 0xff, 0x82, 0x76, 0x15, 0x7b, 0xa0, 0x1e, 0xbd, 0xa8, + 0x4d, 0x1c, 0xd6, 0x87, 0x26, 0xb5, 0xc4, 0x40, 0x7a, 0xfa, 0x9a, 0xde, 0xf7, 0x49, 0x32, 0x16, + 0x4f, 0x4f, 0x5c, 0x06, 0x17, 0xee, 0xac, 0x0a, 0x10, 0xcc, 0x3f, 0xf5, 0xbb, 0x38, 0x98, 0x6b, + 0xeb, 0xa7, 0xfb, 0xf1, 0xf4, 0x18, 0x72, 0x96, 0xf8, 0x94, 0x0d, 0x73, 0x2e, 0x5a, 0xd9, 0x1c, + 0x2d, 0x5f, 0x8d, 0xe6, 0xb9, 0xfd, 0x7e, 0x62, 0xdd, 0x01, 0x2e, 0xbd, 0x6e, 0xbf, 0x5f, 0x5c, + 0xeb, 0xf6, 0xfb, 0xc9, 0x9b, 0x74, 0x4f, 0x54, 0x1f, 0xe9, 0xa1, 0xfc, 0x60, 0xfa, 0x6e, 0x7b, + 0xea, 0xea, 0x94, 0x6c, 0x54, 0xaa, 0x8e, 0xa8, 0xd2, 0xaf, 0x51, 0x50, 0x98, 0x63, 0x81, 0xc5, + 0x4d, 0x50, 0x3f, 0xff, 0xc1, 0xb1, 0x82, 0xe7, 0xc1, 0x07, 0xc2, 0x19, 0x81, 0x6a, 0xf4, 0x63, + 0x01, 0x81, 0x75, 0x4c, 0x4a, 0xdf, 0x46, 0xc5, 0xb6, 0xb9, 0xe4, 0x1d, 0x68, 0x31, 0xf9, 0x1a, + 0xac, 0xce, 0x03, 0xd5, 0x0f, 0x0b, 0xe2, 0x97, 0xa2, 0x82, 0xa6, 0x36, 0xa2, 0xff, 0x29, 0x68, + 0x6a, 0x33, 0x7e, 0xfb, 0xda, 0x88, 0x39, 0x56, 0x81, 0xaf, 0xad, 0x34, 0xc1, 0xa1, 0xc7, 0xf3, + 0x7e, 0xc4, 0x0f, 0xe3, 0x90, 0xfd, 0xd3, 0x02, 0xf4, 0x58, 0x2d, 0x79, 0x69, 0xfe, 0xc3, 0x9f, + 0xb1, 0xf7, 0x72, 0x6f, 0xe0, 0x9f, 0xa9, 0xd2, 0x5a, 0xf6, 0x06, 0xa6, 0x57, 0x24, 0xb5, 0xf1, + 0x7a, 0xb0, 0x2b, 0xb8, 0xba, 0x49, 0x95, 0xf6, 0xa1, 0xbd, 0xc2, 0xec, 0x5f, 0x27, 0xbe, 0x04, + 0x9a, 0x6b, 0xa6, 0x03, 0xd8, 0x60, 0x15, 0x8e, 0xf4, 0xb1, 0xcb, 0xa0, 0x2c, 0x37, 0x9f, 0xc6, + 0x09, 0x9d, 0x86, 0x06, 0x2c, 0xdd, 0x85, 0xd4, 0x13, 0x98, 0xd2, 0xe6, 0xeb, 0xe8, 0x87, 0xb1, + 0x09, 0xfe, 0xe5, 0x3c, 0xf4, 0xf8, 0x16, 0x5f, 0x38, 0xc2, 0x8e, 0xbd, 0x5e, 0x09, 0x35, 0x9b, + 0xdb, 0xa0, 0x8d, 0xbd, 0xe2, 0x61, 0x23, 0xfc, 0x42, 0x95, 0x76, 0xb2, 0x57, 0xfc, 0x9b, 0x0f, + 0xa2, 0xd8, 0x80, 0x03, 0x0b, 0x8a, 0x0d, 0xa8, 0x43, 0x52, 0x68, 0x40, 0x28, 0x46, 0x88, 0xf4, + 0xc8, 0x70, 0x02, 0xaf, 0xd9, 0xb7, 0xc7, 0x3c, 0x33, 0xb0, 0x16, 0xb3, 0x3d, 0x96, 0x59, 0x81, + 0x22, 0xc1, 0x6c, 0x84, 0x61, 0xc2, 0xde, 0xce, 0xc7, 0x84, 0x61, 0x75, 0x9e, 0x8d, 0x09, 0x7b, + 0x92, 0x68, 0x5a, 0xf0, 0x5b, 0x89, 0x8d, 0xda, 0x5c, 0xd1, 0x0f, 0x75, 0xd9, 0x18, 0xb2, 0xea, + 0x51, 0x4e, 0x95, 0xce, 0x71, 0x68, 0x98, 0x13, 0xe6, 0x9a, 0x30, 0xf1, 0x37, 0x80, 0x92, 0x8e, + 0x8d, 0x12, 0x2e, 0xf0, 0x55, 0xd0, 0x46, 0x3f, 0xd7, 0x0e, 0x9f, 0x49, 0xc6, 0x0f, 0xa7, 0xce, + 0x8e, 0xeb, 0x17, 0x8d, 0x33, 0xa3, 0x8f, 0xff, 0xde, 0x28, 0xed, 0x3e, 0x83, 0x95, 0x93, 0xdd, + 0x00, 0x27, 0x9a, 0x00, 0x8c, 0xca, 0x6a, 0xdb, 0x35, 0x06, 0xa4, 0x5b, 0xeb, 0x3e, 0x93, 0x8c, + 0xc5, 0xcd, 0xb1, 0x63, 0x73, 0x47, 0xb0, 0xea, 0xd5, 0x0b, 0xd0, 0x13, 0xf9, 0x07, 0xf7, 0xc3, + 0x90, 0x2f, 0xb6, 0x51, 0xf9, 0x62, 0xde, 0x7d, 0xe5, 0x0b, 0xa2, 0xfd, 0x31, 0xe4, 0x0b, 0x1b, + 0x2f, 0x0d, 0x7b, 0x01, 0x17, 0x54, 0xbf, 0xa3, 0x4a, 0x3b, 0x90, 0x2c, 0xcc, 0x39, 0x27, 0xe2, + 0xd3, 0x59, 0x2b, 0xa6, 0x9f, 0x3b, 0x94, 0x39, 0x33, 0x08, 0xc2, 0x0a, 0x8c, 0xf2, 0x6b, 0x0e, + 0xcf, 0xc6, 0xd7, 0x9c, 0xf9, 0x6d, 0xa5, 0x03, 0xf3, 0xd1, 0xa3, 0xd9, 0x48, 0xcd, 0x23, 0xb3, + 0x39, 0x9b, 0x72, 0x6e, 0x78, 0x08, 0xca, 0xb9, 0x20, 0x34, 0xaf, 0x24, 0x5a, 0x68, 0x91, 0xc9, + 0xba, 0x5c, 0x32, 0x89, 0xe3, 0x30, 0x30, 0xe7, 0xe0, 0xd1, 0x59, 0x36, 0x31, 0x7b, 0x1e, 0xda, + 0x72, 0xec, 0xec, 0xff, 0x30, 0xc7, 0xf8, 0x4d, 0x54, 0x18, 0x6c, 0x51, 0x42, 0x58, 0x07, 0x30, + 0xdf, 0x8a, 0xd3, 0x42, 0x81, 0xe2, 0x93, 0xe6, 0x5f, 0x59, 0xd3, 0x4f, 0x96, 0x91, 0x56, 0x64, + 0x18, 0xee, 0xd9, 0x26, 0xfe, 0x8f, 0x7b, 0xf4, 0xfe, 0xef, 0x02, 0xf4, 0xd8, 0x2e, 0x25, 0xe4, + 0xdb, 0x7b, 0xf0, 0x0f, 0xa4, 0xd0, 0x32, 0x05, 0xc4, 0x82, 0x6f, 0xaf, 0x82, 0x9a, 0xf7, 0xc7, + 0x50, 0x41, 0x55, 0xcb, 0xaa, 0xb4, 0x1d, 0x6d, 0x15, 0x66, 0x9f, 0x2d, 0xf1, 0x09, 0xfd, 0xd3, + 0xa8, 0x7e, 0xc1, 0xae, 0x65, 0x21, 0x8f, 0xaa, 0xd1, 0xab, 0xec, 0x15, 0x6c, 0xe2, 0xc4, 0x97, + 0x70, 0x3e, 0x7c, 0x3f, 0x8c, 0x4b, 0x78, 0x2f, 0x5a, 0xce, 0x0e, 0x1b, 0x3f, 0x7a, 0xbf, 0x68, + 0x2d, 0x13, 0x77, 0x7f, 0x6d, 0x8b, 0xa5, 0xe0, 0xc3, 0xd6, 0xfc, 0xb8, 0x1e, 0xb1, 0xe7, 0x95, + 0xe9, 0xef, 0xd2, 0xbf, 0x9a, 0x87, 0x4a, 0x72, 0x0f, 0xcf, 0x0f, 0xe3, 0x6a, 0x90, 0x6d, 0x57, + 0x83, 0x63, 0xae, 0xc9, 0xc0, 0xae, 0x7b, 0x0f, 0x70, 0x3d, 0xf0, 0x87, 0x38, 0xb4, 0x6c, 0xbf, + 0xb2, 0x67, 0x37, 0x93, 0xa4, 0x8e, 0x68, 0x4d, 0x72, 0x52, 0xb5, 0xbc, 0xa3, 0xec, 0x91, 0xac, + 0x5a, 0x60, 0xdd, 0x9a, 0xdd, 0x56, 0x7c, 0x16, 0x1e, 0xca, 0x73, 0x09, 0x23, 0x4b, 0xd9, 0xe4, + 0xa5, 0xfb, 0x6d, 0xb8, 0xaa, 0x37, 0xa9, 0x52, 0x2d, 0xaa, 0x11, 0x66, 0x5d, 0x19, 0x71, 0x55, + 0x36, 0x5d, 0x9b, 0xe5, 0x52, 0xfa, 0xb8, 0x10, 0x15, 0x62, 0x04, 0xbb, 0xea, 0x9d, 0xfc, 0xc6, + 0x6c, 0x8a, 0x03, 0xb6, 0xd3, 0x26, 0xc5, 0x59, 0x3b, 0xc7, 0x2d, 0x34, 0x93, 0xe8, 0xb5, 0xc8, + 0x4c, 0x35, 0x75, 0xc1, 0x61, 0x08, 0x8d, 0x19, 0xa8, 0x74, 0x55, 0x5b, 0x8b, 0x87, 0x8d, 0x52, + 0x9a, 0x95, 0xe3, 0xcd, 0x89, 0x10, 0xfc, 0x95, 0xad, 0x09, 0x63, 0xc0, 0x22, 0x0f, 0x7f, 0x03, + 0x02, 0xa2, 0x09, 0x63, 0xca, 0xf9, 0x0f, 0xec, 0x31, 0x28, 0xe6, 0x33, 0x2e, 0xd3, 0x6c, 0x04, + 0x8a, 0x72, 0xe6, 0x87, 0x2d, 0xd4, 0x18, 0x49, 0x91, 0x51, 0x65, 0x26, 0xcd, 0x28, 0xb7, 0x47, + 0x80, 0xa8, 0x34, 0xf3, 0xd0, 0xc1, 0x3b, 0x15, 0xd6, 0x5a, 0x92, 0x3c, 0x74, 0x8b, 0xf1, 0x3f, + 0xe4, 0x9b, 0x48, 0xa2, 0xb9, 0x0d, 0x68, 0x51, 0x5b, 0x8b, 0x67, 0x9b, 0xe5, 0x1f, 0x8b, 0x1b, + 0x98, 0x30, 0xb1, 0xa8, 0xad, 0xc5, 0x43, 0xbe, 0xc1, 0x84, 0xf1, 0x1f, 0xa0, 0x22, 0x6a, 0x4d, + 0x42, 0xd4, 0x5a, 0x38, 0x20, 0x9c, 0x05, 0x15, 0xab, 0xd2, 0x13, 0x97, 0x8d, 0xa9, 0x24, 0x9e, + 0xd7, 0x06, 0xa5, 0x83, 0x98, 0x07, 0xf8, 0xcf, 0x99, 0x44, 0x2f, 0x0e, 0x6b, 0x80, 0x5d, 0xab, + 0x0d, 0x40, 0xb9, 0x6c, 0xb5, 0xe5, 0x5f, 0x42, 0x0b, 0xb0, 0x23, 0x2f, 0x79, 0x8b, 0x7a, 0xda, + 0x10, 0xa2, 0x00, 0x02, 0xcb, 0x83, 0x6f, 0x00, 0xfd, 0xe2, 0x91, 0xf4, 0xb8, 0x79, 0x0f, 0x40, + 0x29, 0xfb, 0x8c, 0x55, 0xf4, 0x6d, 0x9f, 0xb1, 0xd0, 0xb7, 0x7f, 0xc6, 0x5a, 0xfc, 0x5d, 0x9e, + 0xb1, 0x96, 0x3c, 0xe4, 0x33, 0x16, 0xff, 0x3e, 0xf6, 0x37, 0x53, 0x42, 0x6d, 0x8a, 0xd7, 0x55, + 0xbf, 0xad, 0xb5, 0x19, 0x47, 0x8d, 0x2b, 0x06, 0xef, 0x66, 0x7b, 0x89, 0xf8, 0x74, 0x5b, 0x8b, + 0x07, 0x92, 0x75, 0xb9, 0xea, 0x21, 0x0a, 0x25, 0x0d, 0x89, 0xdf, 0x07, 0x70, 0xd9, 0xde, 0x82, + 0x7f, 0xd7, 0xe6, 0xa7, 0xc8, 0xc4, 0x8d, 0x63, 0x73, 0x06, 0x96, 0x59, 0x49, 0x02, 0x93, 0xd3, + 0x23, 0xa9, 0x13, 0x63, 0x80, 0x0b, 0xe2, 0xe6, 0xd3, 0x3c, 0x81, 0x6d, 0x2d, 0x1e, 0xd6, 0xc5, + 0xb1, 0xfa, 0xe7, 0xaa, 0xf4, 0x1a, 0x7a, 0x55, 0xa0, 0xe7, 0x5a, 0xac, 0x62, 0xcd, 0x4d, 0x48, + 0x82, 0x80, 0x49, 0x2d, 0x7e, 0x02, 0x2e, 0x62, 0x38, 0x45, 0x90, 0x59, 0x89, 0x30, 0x26, 0x53, + 0x85, 0x68, 0x15, 0xf3, 0xe2, 0xb0, 0xab, 0xde, 0x69, 0x32, 0x25, 0x1f, 0x64, 0x93, 0x08, 0xe7, + 0x43, 0x30, 0xaa, 0xa0, 0x7f, 0xf5, 0xce, 0xc1, 0xa0, 0x64, 0xe5, 0xbe, 0x29, 0x30, 0xc3, 0x95, + 0x7d, 0xeb, 0x83, 0xfb, 0x4d, 0xcd, 0xaa, 0xd0, 0x23, 0x56, 0xce, 0x1b, 0x2b, 0x0d, 0x8e, 0xed, + 0x40, 0xef, 0xa0, 0x04, 0x6b, 0x9e, 0xa9, 0x55, 0xb8, 0x1f, 0xc1, 0x9a, 0xe3, 0x6b, 0xf2, 0x93, + 0xb2, 0xf9, 0xdf, 0x8e, 0x94, 0x6d, 0xb6, 0x88, 0xc7, 0x02, 0x46, 0xbd, 0x9d, 0x4b, 0x3c, 0xe6, + 0x9a, 0x5e, 0x93, 0xac, 0x6c, 0xb2, 0x27, 0xd0, 0xdc, 0x30, 0x0b, 0xe1, 0x9a, 0x03, 0x15, 0x21, + 0x69, 0xc1, 0x5c, 0xfa, 0xf4, 0xf6, 0x77, 0xa4, 0x4f, 0xdf, 0xd4, 0x2c, 0x0b, 0x15, 0xcb, 0xf3, + 0x8d, 0x2a, 0xf2, 0x02, 0x88, 0x35, 0xf5, 0x7d, 0x50, 0xac, 0xb7, 0xb3, 0x29, 0xd6, 0x4b, 0x73, + 0x52, 0xac, 0x39, 0x37, 0x29, 0xa1, 0x65, 0x39, 0x74, 0x01, 0xfd, 0xbd, 0xd1, 0x85, 0xc5, 0xdf, + 0x27, 0x5d, 0xd8, 0xab, 0x4a, 0x1e, 0xe4, 0x16, 0xf2, 0x9f, 0x6c, 0x71, 0x15, 0xcc, 0x01, 0x30, + 0xd0, 0x6d, 0x2d, 0x1e, 0x90, 0x84, 0x6c, 0x0f, 0x95, 0xcc, 0x91, 0xf9, 0x9a, 0x23, 0xbb, 0xfc, + 0x6b, 0xce, 0xdc, 0x5d, 0x54, 0xbb, 0x75, 0x87, 0x43, 0xab, 0xb3, 0xfb, 0xf8, 0x61, 0x30, 0xd5, + 0xff, 0x7c, 0x11, 0x5a, 0xc5, 0xbc, 0x80, 0xfc, 0xe1, 0xe8, 0xde, 0x07, 0xf9, 0xe8, 0xde, 0xf7, + 0xc7, 0xb0, 0x54, 0x67, 0xd1, 0xb7, 0x6f, 0xcf, 0x90, 0x7d, 0x4b, 0x2a, 0xb6, 0x21, 0x9b, 0x8a, + 0xdd, 0x9f, 0x05, 0xfa, 0xde, 0x68, 0xd5, 0xaf, 0x73, 0x69, 0x55, 0xc3, 0x77, 0xa6, 0x55, 0x2b, + 0x42, 0xcb, 0xe4, 0x3f, 0x9b, 0x95, 0x5a, 0xbd, 0x65, 0x71, 0x3b, 0x40, 0xaf, 0xd6, 0xcf, 0xfa, + 0x26, 0xb9, 0x3a, 0xb4, 0x12, 0x8f, 0x7e, 0xd6, 0x27, 0xc9, 0x60, 0x36, 0xb5, 0x29, 0x22, 0xa2, + 0x5d, 0xf6, 0x1b, 0xed, 0x4e, 0x57, 0x20, 0xf2, 0x9c, 0x08, 0xaf, 0xb4, 0x38, 0x08, 0x48, 0x16, + 0x2d, 0x7a, 0x14, 0x7a, 0xcd, 0xa1, 0x48, 0xd9, 0x14, 0x68, 0x7f, 0x0e, 0x05, 0xca, 0xd7, 0x5b, + 0x43, 0x24, 0xe4, 0x0b, 0x34, 0x42, 0x6f, 0xdf, 0x13, 0x7d, 0xda, 0xa2, 0x4a, 0x2e, 0xb4, 0x49, + 0xc8, 0x7f, 0x02, 0x45, 0x9e, 0xbe, 0xae, 0xee, 0xaa, 0x77, 0xe6, 0x12, 0x27, 0x58, 0x6c, 0xe6, + 0x35, 0xf3, 0x68, 0x01, 0x5a, 0x9d, 0x8d, 0xe9, 0x87, 0x21, 0xb6, 0xbe, 0x6d, 0xb3, 0x98, 0x28, + 0xc9, 0x2b, 0xb6, 0xee, 0xaa, 0x77, 0xc2, 0x29, 0x04, 0x71, 0xb5, 0x04, 0x26, 0x47, 0x1b, 0xec, + 0x07, 0xe1, 0x71, 0x57, 0xbd, 0x93, 0x2a, 0x70, 0xdc, 0x11, 0x77, 0xe9, 0xa1, 0x02, 0xb4, 0x8a, + 0x79, 0x70, 0xf8, 0xc3, 0x11, 0x36, 0x7a, 0x8a, 0x0b, 0xbe, 0xdb, 0x29, 0xae, 0xae, 0x51, 0xa5, + 0x37, 0xd0, 0x6b, 0x42, 0xfe, 0xaf, 0x10, 0x79, 0x12, 0x4c, 0x6f, 0xce, 0xcd, 0x81, 0xb7, 0x44, + 0x76, 0xfb, 0xff, 0x78, 0xb7, 0x84, 0x76, 0xe7, 0x0b, 0x98, 0x95, 0xfc, 0x5b, 0xe2, 0xe6, 0x7c, + 0xf4, 0x08, 0x55, 0x1f, 0x30, 0x1b, 0xe2, 0xad, 0xec, 0x0d, 0xb1, 0xfe, 0x21, 0x36, 0xc4, 0xfc, + 0x50, 0x41, 0xc9, 0xca, 0xef, 0x47, 0x11, 0x40, 0x85, 0xec, 0x79, 0x0f, 0x24, 0x64, 0xb7, 0xe6, + 0x13, 0xf9, 0xff, 0xfe, 0x25, 0x87, 0x06, 0x1b, 0xb1, 0x84, 0xbb, 0x0d, 0x87, 0x6f, 0x66, 0xc9, + 0x61, 0xa9, 0x45, 0x0e, 0xc1, 0x3a, 0x97, 0xa4, 0x32, 0x37, 0xc9, 0x61, 0x36, 0x21, 0x1c, 0xe2, + 0x54, 0x49, 0xe5, 0xd0, 0x00, 0x27, 0xe4, 0x5b, 0x21, 0xf1, 0x00, 0xd5, 0xed, 0xd0, 0xcd, 0xfe, + 0x07, 0x52, 0x58, 0xff, 0x65, 0x01, 0x5a, 0x69, 0x1f, 0xd1, 0x0f, 0xe3, 0xf8, 0x6c, 0x7f, 0x80, + 0x37, 0x22, 0xf2, 0x39, 0xa0, 0x20, 0x80, 0x23, 0xc4, 0x43, 0x04, 0x63, 0xad, 0xfb, 0x06, 0x4d, + 0xd0, 0x4d, 0x1e, 0x89, 0x88, 0x88, 0x9d, 0x77, 0x32, 0x44, 0xde, 0xb6, 0x3e, 0xb3, 0x28, 0xde, + 0xf4, 0x05, 0xc4, 0xca, 0x9c, 0xb4, 0xfc, 0x93, 0xf2, 0xed, 0x4f, 0xca, 0xb7, 0xfb, 0x88, 0xb2, + 0xef, 0xe7, 0xe3, 0x04, 0xbf, 0x2f, 0xb9, 0xf3, 0x1d, 0xb4, 0x94, 0x0e, 0x91, 0x95, 0x6a, 0xf1, + 0x03, 0x78, 0x56, 0x91, 0xb8, 0x06, 0x12, 0x0e, 0x1a, 0x73, 0x37, 0x30, 0x61, 0xa6, 0x31, 0x20, + 0xdc, 0x64, 0x56, 0xdd, 0xd2, 0x51, 0x8e, 0x79, 0xf6, 0x24, 0x0e, 0x54, 0x7f, 0x0f, 0x77, 0x4d, + 0x75, 0xb5, 0x2a, 0xbd, 0x84, 0x5e, 0x10, 0x66, 0xeb, 0x4b, 0x5c, 0x03, 0xa7, 0xd2, 0xb4, 0x39, + 0xd7, 0x46, 0x6e, 0xd0, 0xfd, 0x5f, 0xfa, 0x3f, 0x16, 0x30, 0x8f, 0x1c, 0xb4, 0xdd, 0x0f, 0xf1, + 0xfd, 0xfb, 0xf1, 0xbc, 0xb4, 0x0d, 0x3e, 0xe9, 0xc1, 0x48, 0xdb, 0x76, 0x55, 0xda, 0x82, 0xde, + 0x12, 0x66, 0x9d, 0x0f, 0xd3, 0x00, 0x02, 0xf4, 0x88, 0xcc, 0x2c, 0xce, 0x46, 0xe9, 0x76, 0xa3, + 0xc5, 0x0c, 0x1e, 0xbe, 0x24, 0x6b, 0xcd, 0x2d, 0xca, 0xb5, 0xd6, 0x46, 0x7d, 0xc0, 0x86, 0x8a, + 0x25, 0x2c, 0xab, 0xed, 0x52, 0xac, 0x49, 0xb5, 0x4a, 0x7b, 0x39, 0xb4, 0x62, 0x93, 0x12, 0xd9, + 0x55, 0xef, 0x74, 0xfa, 0xbc, 0x21, 0x73, 0x6f, 0xd5, 0x99, 0x74, 0x82, 0xb3, 0x0c, 0x39, 0x08, + 0x9d, 0x78, 0x06, 0x48, 0x20, 0x34, 0x87, 0xfb, 0xd7, 0xe1, 0xf1, 0x79, 0x43, 0xf0, 0xd0, 0x43, + 0xf2, 0x4a, 0x13, 0xbe, 0x73, 0xbd, 0x2a, 0x55, 0xa2, 0x9f, 0x0a, 0xb9, 0x1d, 0x88, 0xab, 0x61, + 0x1e, 0xda, 0x5a, 0x3c, 0xa9, 0xe1, 0x4e, 0xa3, 0x39, 0xd9, 0x4c, 0xff, 0xac, 0x00, 0xf1, 0x6c, + 0xed, 0x1f, 0xc6, 0x36, 0x7a, 0xcb, 0xb6, 0x8d, 0x72, 0xde, 0x77, 0xc9, 0xd7, 0x3c, 0xd8, 0x16, + 0xda, 0xa8, 0x4a, 0x4e, 0x24, 0x09, 0x79, 0x66, 0xc1, 0x3c, 0x85, 0xbb, 0xea, 0x9d, 0x0e, 0x6b, + 0xca, 0x66, 0xdb, 0x39, 0x1e, 0xb4, 0x88, 0xb4, 0xe7, 0x97, 0xa3, 0x79, 0x6d, 0x2d, 0x1e, 0xd3, + 0xd9, 0xb2, 0xad, 0xc5, 0xc3, 0xf3, 0x68, 0xbe, 0x81, 0x81, 0xec, 0x13, 0xfc, 0x37, 0xbf, 0x06, + 0x15, 0x62, 0xa2, 0xb3, 0x87, 0xc4, 0x5b, 0x29, 0x96, 0xe9, 0x6f, 0x26, 0x7e, 0xdb, 0x7c, 0x36, + 0x7e, 0x5b, 0xe9, 0x7f, 0xb7, 0x0a, 0x2d, 0xc0, 0xfb, 0x93, 0xaf, 0xcb, 0xa6, 0x46, 0x58, 0x8a, + 0x2e, 0xc2, 0x30, 0x7c, 0x65, 0x3d, 0xfe, 0x40, 0x7e, 0x5d, 0xcf, 0x93, 0x28, 0x87, 0xcc, 0xaa, + 0x61, 0x80, 0xb8, 0x8a, 0x36, 0x07, 0x07, 0x53, 0x72, 0xef, 0x40, 0x1c, 0xc4, 0x43, 0x1c, 0x2a, + 0x54, 0xbc, 0xbe, 0x08, 0x8d, 0xc0, 0x5b, 0x58, 0xd3, 0xa8, 0x4a, 0x5e, 0x81, 0x02, 0xc5, 0x5f, + 0x68, 0x13, 0x93, 0xc9, 0x78, 0x7f, 0x83, 0xdb, 0x4d, 0xdc, 0x40, 0x69, 0x92, 0x3c, 0xeb, 0x1a, + 0x4a, 0x0c, 0xa5, 0xbf, 0x3a, 0xce, 0x06, 0xfc, 0x05, 0xe7, 0x61, 0x9c, 0xe6, 0x9a, 0x04, 0x91, + 0x35, 0xf3, 0xea, 0xf5, 0x91, 0xfa, 0x13, 0xc7, 0x65, 0xda, 0x07, 0x7f, 0x8c, 0x43, 0x28, 0x68, + 0x46, 0x2d, 0x32, 0x3d, 0x70, 0x7f, 0x94, 0x97, 0xa6, 0xac, 0xa3, 0xd1, 0x8d, 0x88, 0x0f, 0x6e, + 0xad, 0x2a, 0x49, 0x02, 0xd3, 0x5a, 0x7c, 0x0e, 0xec, 0x5d, 0xd9, 0xb0, 0x57, 0x10, 0xf0, 0x3f, + 0x35, 0xdc, 0x09, 0xa1, 0x81, 0xc0, 0x33, 0x9e, 0xe4, 0x13, 0xc7, 0x11, 0xbc, 0x64, 0x06, 0x01, + 0x3f, 0xc6, 0xa1, 0x25, 0xf8, 0xea, 0x33, 0xc7, 0xb3, 0x20, 0x7f, 0x38, 0x33, 0x18, 0x4f, 0x1d, + 0x53, 0x13, 0x46, 0x84, 0x33, 0x49, 0xd9, 0x30, 0x88, 0x6f, 0x42, 0xba, 0x6f, 0xb6, 0x7b, 0x5b, + 0xe0, 0x2d, 0x08, 0xa1, 0x84, 0x4b, 0x8d, 0x35, 0x9e, 0xb8, 0x0c, 0x71, 0x90, 0xc0, 0x9e, 0x0f, + 0x9e, 0x6a, 0x61, 0x92, 0x65, 0x1b, 0x5e, 0xfe, 0x7f, 0xc1, 0xf9, 0xb4, 0x83, 0xad, 0x5e, 0x2b, + 0xf2, 0x1c, 0x71, 0x45, 0xcb, 0xc9, 0xf1, 0x6b, 0xd5, 0xa8, 0x39, 0xcb, 0xa9, 0xd2, 0x29, 0x4e, + 0xc8, 0x6e, 0x29, 0x1e, 0xe2, 0x8c, 0xb5, 0x8d, 0x1f, 0xa7, 0x19, 0x91, 0x69, 0xfc, 0x5f, 0xd6, + 0xb2, 0x11, 0x2c, 0x88, 0x93, 0x53, 0x97, 0x81, 0x6b, 0xa7, 0x7c, 0xbc, 0x3e, 0xd2, 0x03, 0x11, + 0xec, 0x80, 0xef, 0xd7, 0xa6, 0x3f, 0x26, 0xc1, 0x05, 0xee, 0x45, 0xdb, 0x89, 0xfb, 0x64, 0x32, + 0x76, 0x4c, 0xff, 0x62, 0x54, 0x1f, 0x21, 0x29, 0x4c, 0xf4, 0x53, 0xb7, 0x93, 0x89, 0x61, 0xf0, + 0xb3, 0x32, 0xbe, 0x19, 0xb7, 0x96, 0xb3, 0x87, 0xc5, 0xff, 0x06, 0x2d, 0x09, 0x86, 0xb7, 0xe2, + 0xcf, 0x68, 0x56, 0x02, 0x91, 0xd9, 0x42, 0x55, 0x80, 0x93, 0x33, 0xf0, 0x4c, 0xb6, 0x06, 0x62, + 0x05, 0xfd, 0x2c, 0xd3, 0x95, 0x99, 0x7e, 0x18, 0x9b, 0xf9, 0x99, 0x10, 0x13, 0x5b, 0x5b, 0x5e, + 0xc5, 0x21, 0x3c, 0x20, 0x32, 0x8e, 0x35, 0x84, 0xc2, 0x59, 0xe6, 0x98, 0x86, 0xd0, 0xa9, 0x79, + 0x53, 0x95, 0xea, 0x84, 0xdc, 0x96, 0xe2, 0x7a, 0x3a, 0x16, 0x36, 0xe5, 0x0b, 0x8c, 0xca, 0xd8, + 0xa0, 0x78, 0x6f, 0xd8, 0xc6, 0x93, 0x8b, 0xc4, 0x38, 0x2f, 0x8f, 0xd0, 0xec, 0xa0, 0xcc, 0xb0, + 0x50, 0x7e, 0xf3, 0x0b, 0x36, 0xa2, 0x03, 0xb0, 0xc4, 0xf9, 0x5a, 0x8b, 0x4f, 0xd3, 0xa1, 0xb1, + 0x11, 0x1b, 0x6c, 0x63, 0xc9, 0xd7, 0x8e, 0x7d, 0x9d, 0x5d, 0xfc, 0x6d, 0x5f, 0x67, 0x97, 0x7c, + 0xfb, 0xd7, 0xd9, 0xe2, 0xef, 0xf2, 0x3a, 0xbb, 0xf4, 0x61, 0x5f, 0x67, 0xc7, 0x39, 0x54, 0x8c, + 0x37, 0x68, 0x7d, 0x28, 0xd8, 0xe6, 0xf3, 0x2a, 0x21, 0x92, 0x07, 0xf4, 0x08, 0xa7, 0x4a, 0x87, + 0x38, 0xc1, 0x5e, 0x26, 0x86, 0x20, 0xa6, 0x1a, 0x18, 0xbc, 0x59, 0x69, 0x47, 0x30, 0x1b, 0x0b, + 0x3f, 0x49, 0x42, 0xb9, 0x91, 0x9e, 0x5f, 0xe3, 0x96, 0x55, 0x7b, 0xfc, 0xad, 0x4a, 0x93, 0x2f, + 0xd0, 0x58, 0x05, 0x61, 0x10, 0xab, 0xdc, 0xfb, 0xc3, 0x10, 0xf2, 0x30, 0xd5, 0x7f, 0x43, 0x1b, + 0xe8, 0x48, 0x47, 0x0f, 0x91, 0xc5, 0xad, 0x24, 0xab, 0x9b, 0x8c, 0x1d, 0xc3, 0x2d, 0x5b, 0x48, + 0x9f, 0xb2, 0x7d, 0x08, 0x7c, 0x94, 0x43, 0x0b, 0x3d, 0x90, 0x77, 0x7e, 0xb9, 0x15, 0xa3, 0x9f, + 0x80, 0xc4, 0xf7, 0x81, 0xe8, 0x80, 0xc0, 0x5e, 0xe1, 0x48, 0xde, 0x3d, 0xa7, 0x5d, 0x3f, 0x9d, + 0x89, 0x76, 0x64, 0xba, 0xfa, 0xb4, 0xc1, 0xce, 0xd4, 0xd5, 0x3e, 0x93, 0x71, 0x25, 0x49, 0xde, + 0x48, 0xfc, 0x4a, 0x20, 0xb1, 0xf0, 0x90, 0x6b, 0x06, 0xee, 0x70, 0x7c, 0x18, 0x0e, 0x06, 0xd2, + 0x57, 0x3f, 0xd5, 0xcf, 0x0f, 0x92, 0x93, 0x4c, 0x3a, 0xe1, 0xdf, 0x46, 0x8b, 0xbd, 0x0a, 0xf5, + 0xab, 0x27, 0xe9, 0x48, 0xc1, 0xc4, 0x95, 0x81, 0x8b, 0x4f, 0x82, 0x0c, 0x02, 0x26, 0x30, 0x13, + 0x57, 0x52, 0x53, 0x87, 0x93, 0x53, 0xc7, 0x52, 0x53, 0x7d, 0x64, 0xef, 0xb1, 0x75, 0xf9, 0x2d, + 0x08, 0x29, 0x81, 0x46, 0x5f, 0x00, 0x02, 0x5c, 0xf0, 0x96, 0xe4, 0xca, 0x80, 0xc5, 0xc7, 0xb5, + 0xf8, 0x49, 0xed, 0x66, 0x87, 0x95, 0x7f, 0x20, 0x71, 0x52, 0xff, 0xb8, 0x9f, 0x64, 0x6b, 0x63, + 0x2a, 0xf2, 0x1f, 0x50, 0x4f, 0x24, 0x48, 0x37, 0x8a, 0x63, 0x92, 0x99, 0xde, 0x46, 0x2f, 0x27, + 0xe3, 0xc7, 0x21, 0x6e, 0x1d, 0x5c, 0x78, 0x26, 0x1f, 0x73, 0x86, 0xc4, 0x9a, 0x18, 0x98, 0x48, + 0x5f, 0x6d, 0x2f, 0xd3, 0xa2, 0x89, 0x64, 0x2c, 0x6e, 0x08, 0x63, 0x7a, 0xf7, 0x10, 0x49, 0xed, + 0x60, 0x3a, 0x1f, 0xfd, 0x23, 0x2a, 0x9a, 0x1a, 0x14, 0x0a, 0xe7, 0x24, 0x9d, 0xcd, 0x2e, 0x68, + 0x9b, 0x55, 0x0f, 0xf4, 0xdb, 0x6c, 0x4b, 0xf1, 0x27, 0xf9, 0xe9, 0x33, 0x16, 0x63, 0xd9, 0x05, + 0x92, 0xd9, 0x56, 0xfc, 0x87, 0xa8, 0xd0, 0x58, 0x08, 0xdc, 0xf7, 0x2a, 0xdc, 0xf7, 0x53, 0x79, + 0xfb, 0x86, 0x54, 0xfe, 0xb8, 0x6b, 0x1c, 0xa2, 0x80, 0xb6, 0x12, 0xd7, 0x66, 0xf5, 0x9b, 0x8c, + 0x1f, 0xb7, 0x75, 0x47, 0x6b, 0xf2, 0x7f, 0x81, 0x96, 0xb4, 0xf8, 0xdd, 0x91, 0xbd, 0xc1, 0x50, + 0x33, 0xee, 0x6f, 0xf5, 0x5c, 0x57, 0x67, 0x3d, 0x53, 0x13, 0xae, 0x4e, 0xec, 0x93, 0x65, 0xc3, + 0x20, 0xae, 0x05, 0x07, 0x71, 0x36, 0xa2, 0xa0, 0xad, 0x6f, 0x5b, 0xed, 0x35, 0xef, 0xa1, 0x65, + 0x59, 0x0c, 0xc2, 0xf7, 0x97, 0x16, 0xfd, 0x97, 0x68, 0x45, 0xce, 0x65, 0xff, 0xfd, 0x61, 0x7f, + 0x03, 0xad, 0xc8, 0x99, 0x8f, 0x87, 0x0a, 0xf6, 0xd1, 0xc9, 0xa9, 0x52, 0x94, 0x43, 0x7f, 0x21, + 0x00, 0x5f, 0x29, 0xb6, 0x1a, 0x2b, 0x46, 0x6f, 0xec, 0x4b, 0xc3, 0xc6, 0xdc, 0x11, 0x2f, 0xe8, + 0x63, 0x24, 0x66, 0x01, 0x04, 0xfc, 0xef, 0xba, 0x99, 0x8c, 0x7f, 0x4e, 0x6b, 0x52, 0x1e, 0x4e, + 0x1b, 0xb9, 0x01, 0x6c, 0x5c, 0xfa, 0xe3, 0x73, 0x99, 0x2f, 0x62, 0xc6, 0x9a, 0x9b, 0xcc, 0x9c, + 0xc1, 0xa3, 0x98, 0xb1, 0x38, 0xb2, 0x38, 0xbc, 0xd2, 0xff, 0xb0, 0x00, 0x2d, 0xcb, 0xda, 0x4e, + 0xbc, 0x0f, 0x3d, 0x02, 0x6c, 0x6a, 0x00, 0xc2, 0x0f, 0x41, 0x66, 0x18, 0x92, 0x63, 0x05, 0x3b, + 0xb9, 0xe7, 0x2b, 0x17, 0x9f, 0x04, 0xf7, 0x36, 0x36, 0xcb, 0xcc, 0xe1, 0xae, 0xcc, 0xa1, 0x31, + 0x42, 0x5e, 0xf2, 0xb5, 0x31, 0x68, 0x0d, 0x06, 0x93, 0xe8, 0xe7, 0x05, 0x0c, 0xad, 0x61, 0xe0, + 0x04, 0x35, 0xfc, 0x00, 0xa4, 0xa0, 0x55, 0x22, 0xa8, 0xd9, 0xba, 0xfc, 0xbb, 0xa8, 0xb8, 0xd9, + 0xed, 0xd9, 0xe7, 0x0b, 0x28, 0xb5, 0x6c, 0xe2, 0x14, 0xac, 0x6f, 0xb5, 0x97, 0x88, 0x4f, 0xd9, + 0x7e, 0xe6, 0x41, 0x6c, 0xaf, 0xcf, 0x87, 0xd0, 0x4a, 0xaf, 0x2f, 0x6c, 0x0c, 0xdc, 0x69, 0x8b, + 0x19, 0x09, 0xde, 0x4a, 0x38, 0x3a, 0x63, 0xde, 0x0a, 0xe2, 0x33, 0xec, 0xd4, 0x74, 0x7d, 0x99, + 0x39, 0x75, 0x9d, 0x8d, 0xa7, 0x07, 0x59, 0xb4, 0xe4, 0xbc, 0x4d, 0x99, 0x3e, 0x5d, 0xb6, 0xd0, + 0x83, 0x0b, 0x72, 0xfb, 0xb4, 0x55, 0xc8, 0xd7, 0x27, 0x76, 0x31, 0xce, 0xdb, 0xa7, 0xad, 0x29, + 0xef, 0x41, 0xcb, 0x09, 0xdc, 0x0a, 0x89, 0xc7, 0xa4, 0x2e, 0xca, 0x29, 0x14, 0x1d, 0x39, 0x7d, + 0x91, 0x40, 0x5d, 0x37, 0x2f, 0x92, 0x8e, 0x72, 0xda, 0xf0, 0x2e, 0x54, 0xd4, 0xd6, 0xe2, 0x61, + 0xc3, 0xde, 0x13, 0x51, 0x8a, 0x42, 0xc5, 0xc7, 0xe9, 0x9f, 0x79, 0xd6, 0xc6, 0xaa, 0x57, 0x6d, + 0x90, 0x5e, 0xf4, 0xbc, 0x90, 0xbd, 0x91, 0xc5, 0xa7, 0xb3, 0xa2, 0x3a, 0x93, 0x54, 0x85, 0x0c, + 0x3d, 0x2a, 0x1d, 0xe6, 0x88, 0x89, 0x2c, 0x43, 0xca, 0xf9, 0x4d, 0x4c, 0x0e, 0x54, 0xce, 0x31, + 0xaf, 0xac, 0x18, 0x46, 0x66, 0xe5, 0x40, 0x7d, 0xc2, 0xf8, 0x0b, 0x42, 0x77, 0x41, 0x44, 0x2a, + 0x36, 0x07, 0xaa, 0x95, 0xd5, 0xd4, 0x0c, 0x8c, 0x9f, 0xd3, 0x03, 0x36, 0xe8, 0xa4, 0x23, 0x83, + 0x61, 0xe5, 0xde, 0x0b, 0xa5, 0x5f, 0xaf, 0x42, 0x45, 0xd6, 0x84, 0xbd, 0x61, 0x4f, 0x69, 0xcf, + 0x59, 0xbc, 0x90, 0x2d, 0xa5, 0xfd, 0x62, 0x1a, 0x14, 0xcb, 0x55, 0x6b, 0xcf, 0x4a, 0xbf, 0xce, + 0x26, 0x73, 0x82, 0x72, 0x01, 0xcb, 0x9c, 0xcb, 0xac, 0xb8, 0x5b, 0xac, 0xb4, 0xf9, 0xdb, 0x9c, + 0x40, 0xeb, 0x35, 0x6e, 0x55, 0x7a, 0x9d, 0xcd, 0x62, 0xbf, 0x81, 0x89, 0xcc, 0x15, 0xa5, 0x79, + 0xcf, 0x61, 0x8b, 0x81, 0x68, 0xe4, 0xaa, 0x4d, 0xc6, 0xe2, 0x06, 0x95, 0x82, 0xa4, 0x71, 0xb5, + 0xdf, 0xd4, 0x3c, 0x19, 0x7a, 0x3c, 0xef, 0x23, 0x5e, 0xf5, 0xfc, 0x1a, 0x67, 0x43, 0x25, 0x1b, + 0xcb, 0xdd, 0x49, 0x75, 0x39, 0xf3, 0x99, 0xe4, 0x47, 0x44, 0x4b, 0xbd, 0x36, 0xb7, 0xeb, 0xbc, + 0xea, 0xea, 0xbd, 0x68, 0x19, 0x5c, 0xec, 0x52, 0x6b, 0x24, 0x18, 0xf6, 0xb8, 0x89, 0x03, 0x73, + 0x21, 0xe4, 0xe4, 0xcc, 0x2e, 0x13, 0x7f, 0x6c, 0x23, 0x60, 0x0c, 0x67, 0x4d, 0x7d, 0x95, 0xe1, + 0x21, 0x3f, 0xbb, 0x21, 0x1f, 0x40, 0x8b, 0xdd, 0xad, 0x91, 0x60, 0x83, 0xc7, 0xed, 0xf7, 0x05, + 0x1a, 0x89, 0x5c, 0x97, 0xc3, 0x36, 0x48, 0x56, 0x15, 0xbc, 0x2c, 0x90, 0x90, 0x8e, 0x6d, 0x29, + 0x96, 0xd8, 0x22, 0xb0, 0x61, 0x5e, 0xd4, 0xa4, 0x73, 0x4c, 0x35, 0xbe, 0x97, 0x43, 0x4b, 0xfd, + 0xee, 0xd6, 0x80, 0x67, 0x9f, 0x99, 0x47, 0x9e, 0x88, 0x5a, 0x39, 0xb1, 0xb0, 0xb6, 0xe0, 0x5a, + 0x70, 0x2e, 0x5a, 0x21, 0x9a, 0x3e, 0xc8, 0x5d, 0x59, 0xed, 0x45, 0x01, 0xfa, 0xd4, 0x4f, 0xdd, + 0x26, 0x39, 0x18, 0x4d, 0x46, 0x38, 0xf9, 0xd5, 0x31, 0x7a, 0x91, 0x43, 0xd0, 0x38, 0x39, 0xab, + 0x2d, 0x93, 0x5f, 0xa7, 0x70, 0x96, 0x94, 0x09, 0xe6, 0x4e, 0xb4, 0x65, 0xd7, 0xc1, 0x9f, 0x6f, + 0x66, 0xd7, 0x79, 0x32, 0x37, 0x11, 0x09, 0x2e, 0x31, 0x57, 0x94, 0xa4, 0x57, 0x68, 0xce, 0xca, + 0x71, 0x32, 0x47, 0x57, 0x38, 0xdb, 0x09, 0xe9, 0x0a, 0x22, 0xb1, 0x93, 0x9c, 0x27, 0x4f, 0xe7, + 0x76, 0x65, 0xc8, 0x73, 0x37, 0x47, 0x69, 0x22, 0x77, 0x33, 0xed, 0x09, 0xbf, 0x17, 0x2d, 0x34, + 0x4e, 0xd1, 0xf6, 0x06, 0x62, 0x94, 0x8a, 0x73, 0xb7, 0x10, 0x90, 0x28, 0x51, 0x3c, 0x99, 0x68, + 0x0f, 0xc9, 0xa4, 0x89, 0x63, 0x73, 0x6d, 0x6f, 0xc0, 0x92, 0x77, 0x47, 0xaa, 0xeb, 0x2a, 0xbd, + 0xd9, 0x93, 0xb1, 0xeb, 0x30, 0x87, 0xc6, 0x64, 0x9a, 0x79, 0x8f, 0x64, 0x82, 0x0a, 0xeb, 0x3c, + 0x59, 0xc1, 0xcc, 0x92, 0xbc, 0x4a, 0xb2, 0x24, 0x2f, 0x4b, 0xb4, 0xb2, 0xe7, 0x2b, 0x28, 0xbe, + 0x4f, 0xbe, 0x82, 0xa5, 0x39, 0xf9, 0x0a, 0x7a, 0x38, 0xd6, 0x7f, 0x07, 0x64, 0x23, 0x1c, 0x53, + 0x9d, 0xf1, 0xdf, 0x79, 0x9f, 0x4e, 0xe7, 0x43, 0x05, 0x17, 0x32, 0xce, 0x0b, 0x24, 0xdf, 0x8a, + 0xf5, 0x93, 0xf5, 0x81, 0xf6, 0xc9, 0xbb, 0xe7, 0xf4, 0xde, 0xf6, 0x64, 0x2c, 0x9a, 0x3e, 0x72, + 0x8b, 0x75, 0xe9, 0xf9, 0xaf, 0x39, 0x54, 0x68, 0x8a, 0x45, 0x44, 0xf8, 0xb9, 0xcd, 0xa9, 0xd2, + 0x17, 0x9c, 0x40, 0xc1, 0xe2, 0x65, 0x8e, 0x0e, 0x26, 0x4b, 0x4a, 0x23, 0x04, 0x15, 0x02, 0xc9, + 0xe3, 0x7e, 0x68, 0xa2, 0xfd, 0xeb, 0x54, 0x7f, 0x60, 0xe2, 0x21, 0x1a, 0xc5, 0x1b, 0x87, 0xf4, + 0x93, 0x96, 0xb6, 0x29, 0x35, 0x75, 0x38, 0x7d, 0xb4, 0xe3, 0x5e, 0xb4, 0x03, 0x3e, 0x47, 0x1b, + 0x19, 0x33, 0x78, 0xe7, 0xd8, 0x67, 0x06, 0x27, 0x86, 0xfd, 0x81, 0x93, 0xb1, 0xeb, 0x20, 0x7f, + 0x51, 0x1d, 0x90, 0xb1, 0x65, 0xf0, 0x71, 0x30, 0x26, 0x01, 0xcb, 0x2d, 0x24, 0xaf, 0x36, 0x1d, + 0x31, 0xff, 0x97, 0x1c, 0x55, 0x29, 0x82, 0x24, 0x35, 0xc1, 0xa9, 0x92, 0x4f, 0x20, 0x30, 0x71, + 0xb7, 0x15, 0x27, 0xf4, 0xe8, 0x6d, 0x3d, 0xda, 0x0e, 0xea, 0x9a, 0xf4, 0xa1, 0x69, 0xf8, 0xe9, + 0x94, 0xeb, 0xa4, 0x1d, 0xae, 0x6d, 0x9b, 0x66, 0x12, 0xbd, 0xf2, 0xce, 0x6d, 0xdb, 0xe0, 0xaf, + 0xda, 0xba, 0x2d, 0x75, 0x04, 0xb8, 0x51, 0xda, 0xb2, 0x53, 0xae, 0x9b, 0x49, 0xf4, 0xba, 0xb6, + 0xb9, 0x76, 0xb8, 0xa4, 0x2d, 0xae, 0xf7, 0xa4, 0x1d, 0xae, 0xed, 0xdb, 0xcc, 0x4a, 0x75, 0xb5, + 0xdf, 0xd4, 0xfc, 0x3c, 0xf4, 0xba, 0x5c, 0x68, 0xe2, 0x91, 0x17, 0x11, 0x34, 0x72, 0xa1, 0x89, + 0x45, 0x5e, 0x08, 0x48, 0xe4, 0xa5, 0x76, 0x1c, 0xf2, 0x22, 0x82, 0x82, 0x26, 0xb1, 0xd8, 0x87, + 0x90, 0x27, 0x18, 0x08, 0xb7, 0x36, 0xe3, 0x0b, 0x01, 0xa4, 0x38, 0xac, 0x38, 0x61, 0xc0, 0xe2, + 0x4b, 0xd6, 0xdf, 0x10, 0x84, 0xdc, 0x8c, 0x87, 0x06, 0x2a, 0x88, 0x10, 0x04, 0x2f, 0x87, 0x7c, + 0xc5, 0x10, 0x3b, 0x0d, 0x26, 0x4e, 0x66, 0x90, 0xf0, 0x21, 0xb4, 0xc4, 0x38, 0x14, 0x94, 0xb0, + 0x3d, 0x32, 0xbb, 0xa6, 0xc4, 0xac, 0x53, 0xb3, 0x1e, 0x47, 0x08, 0x63, 0x9b, 0x89, 0xab, 0xac, + 0x7b, 0x0d, 0x1f, 0x51, 0xb8, 0x9f, 0xbf, 0xa9, 0x59, 0x70, 0x94, 0x2b, 0x58, 0xce, 0xc9, 0xb6, + 0xca, 0xfc, 0x1e, 0x04, 0x3e, 0xf5, 0xdb, 0x98, 0x3b, 0x76, 0x25, 0xfe, 0x46, 0x1c, 0xcd, 0x22, + 0xa7, 0x50, 0x7c, 0x8a, 0xfe, 0x70, 0x68, 0x23, 0x63, 0xda, 0x60, 0x27, 0xec, 0x95, 0x64, 0xec, + 0x68, 0x6a, 0xb8, 0xd3, 0xe1, 0xaa, 0x95, 0x73, 0x9a, 0xf0, 0x4d, 0x68, 0x7e, 0xc4, 0xdd, 0x18, + 0x2e, 0x59, 0x95, 0x3f, 0x68, 0x21, 0x4b, 0xb7, 0xcc, 0x64, 0x60, 0xa2, 0x2a, 0x55, 0x09, 0xb8, + 0x95, 0xf8, 0x93, 0xbc, 0x34, 0x0b, 0x26, 0x91, 0xcd, 0x42, 0x2c, 0xe3, 0xea, 0xfc, 0xef, 0x39, + 0x54, 0x4c, 0xaf, 0x7f, 0x2c, 0x78, 0xaf, 0xc6, 0x9f, 0xd3, 0xcf, 0xa9, 0xd2, 0x51, 0x4e, 0xb0, + 0x97, 0x89, 0x07, 0x2d, 0x8e, 0x0d, 0x5e, 0x58, 0x03, 0xc1, 0x50, 0xb3, 0xdb, 0x5f, 0xa5, 0x90, + 0x18, 0xa4, 0xe5, 0xf7, 0xa2, 0x1d, 0xfa, 0x99, 0xf1, 0x4c, 0x74, 0x98, 0xbd, 0x9e, 0x68, 0x23, + 0x4d, 0xed, 0xa5, 0xf1, 0x4d, 0xf3, 0x56, 0xa8, 0x70, 0x68, 0x7d, 0x5f, 0x3a, 0x77, 0x6d, 0x25, + 0x80, 0xee, 0x21, 0x57, 0xad, 0x13, 0xfe, 0x96, 0xed, 0x23, 0xe1, 0xa3, 0x1c, 0x9a, 0xef, 0x0e, + 0x29, 0xee, 0x92, 0x47, 0xf1, 0xaa, 0x3f, 0x96, 0xdf, 0x23, 0x27, 0xa4, 0xb8, 0x6b, 0xde, 0x56, + 0xa5, 0x6d, 0x02, 0xae, 0x2b, 0x6e, 0x24, 0x78, 0x71, 0x92, 0x45, 0x83, 0xd5, 0x63, 0x58, 0x81, + 0x32, 0x10, 0xfd, 0x93, 0xb1, 0x3e, 0xbd, 0xf7, 0x88, 0x36, 0x3e, 0x5c, 0xe1, 0xd0, 0xba, 0xcf, + 0xb0, 0xf9, 0xa9, 0x69, 0xfd, 0x72, 0x19, 0x63, 0xe3, 0x7f, 0x81, 0x0a, 0x8d, 0x31, 0xc9, 0x41, + 0xbf, 0x52, 0x52, 0x62, 0x25, 0xf0, 0xa6, 0x40, 0xb1, 0x12, 0x2e, 0x48, 0xa5, 0x29, 0x4c, 0x3f, + 0x50, 0x3f, 0x75, 0x1b, 0xd0, 0xa7, 0x86, 0x3b, 0x7d, 0xee, 0xe6, 0xf4, 0x55, 0x35, 0xdd, 0xf3, + 0x05, 0xe1, 0xa7, 0x68, 0xc3, 0xef, 0x92, 0x43, 0xeb, 0x15, 0xb4, 0x98, 0xb9, 0xce, 0x1e, 0xaa, + 0xe9, 0x4b, 0xa8, 0xe8, 0x5b, 0x25, 0x0a, 0xae, 0x36, 0x66, 0x18, 0x6d, 0x11, 0x2c, 0x2e, 0x94, + 0x89, 0x6d, 0x6b, 0x90, 0xaa, 0x89, 0x49, 0x10, 0x37, 0xef, 0x45, 0xdb, 0xa9, 0x88, 0x79, 0x2f, + 0xda, 0x2e, 0xbd, 0xd3, 0x60, 0xdb, 0x04, 0x87, 0xa6, 0xb5, 0xa3, 0x67, 0xb5, 0x1b, 0xed, 0xe9, + 0x4f, 0xbb, 0x4a, 0x7b, 0x39, 0x54, 0x44, 0x97, 0x90, 0xaf, 0x46, 0x45, 0x7b, 0x9a, 0x9c, 0xcc, + 0x83, 0x4a, 0x31, 0xd1, 0x0d, 0x52, 0xa8, 0xb8, 0x84, 0x2e, 0x8f, 0x71, 0xa8, 0xac, 0x02, 0xde, + 0x89, 0x16, 0x93, 0x1f, 0x4c, 0xe4, 0x2d, 0xfc, 0x52, 0xce, 0xc2, 0xb1, 0x3b, 0xb7, 0xcd, 0x0e, + 0x81, 0x2d, 0x2d, 0x3d, 0xbf, 0x02, 0x2d, 0xcf, 0x66, 0xca, 0xf8, 0x23, 0x1c, 0x2a, 0x66, 0x78, + 0x2d, 0xca, 0x6d, 0xe3, 0x04, 0xa3, 0xf6, 0x12, 0x71, 0xab, 0x4d, 0xfd, 0x6a, 0x70, 0xdd, 0xc6, + 0x65, 0xc0, 0x28, 0x51, 0x71, 0x86, 0xc9, 0xe9, 0xd4, 0xc9, 0xcb, 0x0c, 0x43, 0x0c, 0x29, 0x54, + 0x5d, 0xb5, 0x34, 0xb3, 0x6c, 0x7a, 0xfc, 0x2b, 0x7d, 0x68, 0xda, 0x55, 0x2b, 0xdb, 0xb1, 0xf3, + 0x3b, 0xd1, 0x32, 0x06, 0xc0, 0x7c, 0x27, 0xe6, 0x85, 0xb3, 0xcb, 0xc4, 0x55, 0x59, 0x83, 0x21, + 0x5f, 0x9c, 0x5d, 0x8f, 0x7f, 0x0b, 0x2d, 0x6a, 0xf6, 0x05, 0x1a, 0x7c, 0x1f, 0x99, 0x89, 0x1c, + 0xd7, 0xab, 0xd2, 0x33, 0x82, 0x09, 0x13, 0x4b, 0x28, 0x02, 0x7d, 0x24, 0xaa, 0xdd, 0x18, 0x00, + 0xaa, 0xa3, 0x9f, 0xbc, 0xf1, 0x4d, 0xcd, 0x22, 0x61, 0x41, 0x49, 0x7a, 0x51, 0xd9, 0x9f, 0xc9, + 0x66, 0x65, 0xbe, 0x1e, 0x2d, 0x6a, 0x76, 0x1f, 0xc0, 0xb8, 0xe6, 0x63, 0x5c, 0x2f, 0x62, 0x9b, + 0x14, 0x02, 0x13, 0xd7, 0x66, 0x0d, 0xc9, 0xc0, 0x78, 0xe9, 0x6a, 0x7e, 0x8c, 0xd0, 0x84, 0xdf, + 0x8e, 0x35, 0x90, 0xbe, 0x90, 0xe2, 0xc5, 0x58, 0x17, 0x60, 0xac, 0x58, 0xc9, 0xc5, 0xc2, 0xc5, + 0xc7, 0x59, 0xcc, 0xfa, 0xc8, 0x05, 0x7d, 0xe4, 0x2c, 0x45, 0x2b, 0xb3, 0x35, 0xf9, 0xd7, 0xec, + 0x66, 0xc2, 0xd8, 0xd1, 0x99, 0x3c, 0xf3, 0x3e, 0x9e, 0x3d, 0x3c, 0xcc, 0x3b, 0xec, 0xaa, 0x77, + 0x1a, 0x9b, 0x8d, 0x98, 0x87, 0x1c, 0x44, 0xcb, 0x48, 0x20, 0x5a, 0x67, 0x30, 0xe8, 0xf7, 0x06, + 0xf7, 0x83, 0xc0, 0x5a, 0x5c, 0xb3, 0x5d, 0x95, 0xb6, 0x08, 0xd9, 0x65, 0xe2, 0x2b, 0x59, 0x28, + 0xc9, 0x23, 0x5b, 0xcf, 0xef, 0x20, 0x14, 0xb8, 0x76, 0xf8, 0x8e, 0xd6, 0x77, 0x4b, 0x3b, 0x3e, + 0xa6, 0x8f, 0x5c, 0xa0, 0x42, 0xc5, 0x73, 0xeb, 0xd7, 0xa7, 0xae, 0xaa, 0x72, 0x36, 0x2e, 0xfe, + 0x0a, 0x87, 0x8a, 0xcc, 0xb4, 0xe7, 0xc0, 0x5a, 0x53, 0xe5, 0xb5, 0x05, 0x17, 0xdb, 0x72, 0x3e, + 0x02, 0x77, 0x04, 0x7c, 0xe9, 0x95, 0x21, 0x83, 0x35, 0x1d, 0xee, 0x64, 0x52, 0xcf, 0x5a, 0x09, + 0x1f, 0x09, 0x40, 0xef, 0xed, 0x49, 0x75, 0x5d, 0xd5, 0xba, 0xba, 0xb5, 0xc1, 0xfe, 0xcc, 0x68, + 0x5c, 0x8b, 0x0f, 0xa4, 0x46, 0xc7, 0x0d, 0xca, 0x88, 0x93, 0x0c, 0x92, 0x44, 0xe5, 0xe7, 0x2e, + 0x6a, 0x3d, 0x7d, 0x14, 0x92, 0xf9, 0xfc, 0xb4, 0x6c, 0x0d, 0x81, 0x3f, 0xcb, 0xa1, 0x05, 0x1f, + 0x05, 0x03, 0x0a, 0x30, 0xe5, 0x45, 0x35, 0xa0, 0xdf, 0x12, 0x00, 0x26, 0xee, 0x7f, 0x90, 0x01, + 0x92, 0xb8, 0xc5, 0xbd, 0x71, 0x76, 0x80, 0x26, 0xec, 0x5b, 0x8e, 0x10, 0xfa, 0xe7, 0x6f, 0x17, + 0xa0, 0xc5, 0x21, 0x25, 0x12, 0x3a, 0x58, 0x1f, 0xf4, 0xfb, 0x3c, 0x07, 0x09, 0x27, 0xff, 0x71, + 0x81, 0x2a, 0x0d, 0x14, 0x08, 0x6c, 0x89, 0xf8, 0xff, 0x72, 0x44, 0xf6, 0x81, 0x8b, 0xd6, 0xcc, + 0x12, 0x64, 0x30, 0xbd, 0x47, 0xfa, 0xd2, 0x13, 0x27, 0x21, 0x84, 0xfc, 0x4c, 0x62, 0xd8, 0xb5, + 0x75, 0x6b, 0x5d, 0xad, 0x4b, 0xda, 0x51, 0xb7, 0x5b, 0xae, 0xdb, 0x21, 0xbf, 0x5b, 0x06, 0xfb, + 0xfa, 0x05, 0xfd, 0xda, 0x68, 0x39, 0xe6, 0xc7, 0x9c, 0x72, 0xdd, 0xd6, 0xba, 0x6d, 0x3b, 0xa4, + 0x2d, 0xbb, 0x5d, 0xdb, 0x76, 0xd4, 0xc9, 0xbb, 0xa4, 0x2d, 0x86, 0x44, 0xb0, 0x6d, 0x3b, 0x54, + 0xbf, 0x17, 0xed, 0xa0, 0x12, 0x40, 0x32, 0x16, 0xcf, 0x42, 0x66, 0xdc, 0xb5, 0xa0, 0x57, 0x38, + 0x75, 0x9b, 0x5c, 0x51, 0x89, 0x61, 0x30, 0xcd, 0x83, 0x19, 0xd7, 0xd4, 0x5e, 0xe3, 0xc3, 0x80, + 0xcc, 0x64, 0xa2, 0x83, 0xc9, 0x58, 0x54, 0xbb, 0x71, 0x2e, 0x3d, 0x71, 0xd2, 0xe4, 0x0f, 0x8c, + 0x4f, 0x48, 0x9d, 0xbd, 0xa5, 0x75, 0xdf, 0x20, 0xe7, 0x0d, 0x3e, 0xe4, 0xda, 0xa8, 0x7e, 0xf2, + 0x06, 0x79, 0x4a, 0x85, 0x40, 0x3a, 0x18, 0xa9, 0xd6, 0x35, 0x06, 0x15, 0xee, 0x45, 0x3b, 0x64, + 0x76, 0x3a, 0xf8, 0xbf, 0xe6, 0xd0, 0xaa, 0xe6, 0x56, 0x7f, 0xc4, 0xf7, 0x5e, 0x30, 0xa0, 0x34, + 0xe0, 0xbe, 0xc9, 0x14, 0xc2, 0xe3, 0xd1, 0x97, 0x9c, 0x2a, 0x4d, 0x70, 0x42, 0xfe, 0x3a, 0xe2, + 0x49, 0x0e, 0x72, 0xb6, 0x6b, 0xd1, 0xc4, 0x4c, 0x62, 0xb8, 0x5e, 0x76, 0x6d, 0x97, 0x5d, 0x3b, + 0xde, 0x9d, 0x49, 0xf4, 0xd6, 0xbd, 0xbd, 0x53, 0xda, 0xe2, 0xda, 0x61, 0x7c, 0xa8, 0x05, 0x1d, + 0x36, 0x35, 0x99, 0x63, 0x99, 0xcf, 0x4f, 0xd3, 0x55, 0xa4, 0xdb, 0x36, 0x19, 0xeb, 0xa7, 0xbb, + 0x81, 0x5d, 0xa3, 0x7b, 0xd1, 0x0e, 0x13, 0xdd, 0x4c, 0x62, 0x18, 0x3e, 0x8b, 0x56, 0xbc, 0x17, + 0x6d, 0x87, 0xd6, 0xfa, 0x48, 0x3c, 0x99, 0x18, 0xd6, 0xce, 0x1d, 0x49, 0x8f, 0x8e, 0xca, 0xf9, + 0x87, 0xcb, 0x5f, 0xe5, 0xd0, 0xf2, 0x90, 0xd2, 0xe2, 0x77, 0x7b, 0x94, 0x9d, 0x81, 0x7d, 0x8a, + 0xdb, 0x1f, 0xd9, 0x07, 0xd9, 0x0e, 0x0b, 0x6b, 0x7e, 0xa3, 0x4a, 0x07, 0x84, 0x9c, 0x42, 0xd1, + 0x0b, 0x7a, 0x82, 0xd4, 0xd9, 0xe3, 0x7a, 0xff, 0x55, 0x83, 0xf7, 0x6f, 0xbf, 0xac, 0xc5, 0xef, + 0x10, 0x9e, 0xe0, 0xec, 0x5d, 0xbd, 0xef, 0x13, 0x7d, 0xa4, 0x4f, 0x3b, 0x3a, 0x6a, 0x57, 0x1e, + 0xdc, 0x8b, 0x76, 0xa4, 0xef, 0x9e, 0x4f, 0x4d, 0x5d, 0xdf, 0xa0, 0x75, 0x1f, 0xce, 0xa8, 0x17, + 0x5a, 0x7c, 0x81, 0xc6, 0x64, 0xac, 0xcf, 0xe0, 0xad, 0xba, 0xcf, 0xa4, 0xaf, 0x1e, 0x4e, 0xc6, + 0xe2, 0x14, 0xd7, 0x4c, 0xa2, 0x5d, 0xce, 0xe9, 0x97, 0xff, 0x1b, 0x0e, 0x2d, 0x0e, 0x03, 0x3d, + 0xc7, 0x29, 0x21, 0xe1, 0x55, 0xed, 0x9f, 0x73, 0xaa, 0xf4, 0x9f, 0x71, 0x02, 0x5b, 0x22, 0xfe, + 0x9e, 0x23, 0x3b, 0xc9, 0xcc, 0x85, 0xee, 0xdc, 0x22, 0x35, 0x34, 0xb8, 0x9c, 0xbb, 0x1b, 0x9c, + 0xd2, 0x16, 0xd7, 0xb6, 0x4d, 0x65, 0x30, 0xae, 0x72, 0x3c, 0x75, 0x64, 0xcb, 0x91, 0x7b, 0xcb, + 0xe4, 0x36, 0x0d, 0xe9, 0x2a, 0x61, 0xee, 0x46, 0x1c, 0x53, 0xdd, 0x84, 0x9f, 0x7d, 0x47, 0xda, + 0x5c, 0xb7, 0x7b, 0x67, 0xfd, 0xee, 0x86, 0x1d, 0xdb, 0xeb, 0xeb, 0xeb, 0x6a, 0x4d, 0xa4, 0x33, + 0x89, 0x61, 0xda, 0x42, 0xeb, 0xfa, 0xd2, 0x98, 0xfb, 0x58, 0x1f, 0x34, 0x9d, 0x49, 0xf4, 0xd2, + 0x7e, 0x48, 0x0a, 0xd3, 0x13, 0x97, 0x32, 0x87, 0x55, 0xa8, 0x46, 0x57, 0x54, 0x66, 0x3f, 0x82, + 0x6f, 0x43, 0x28, 0xe2, 0x6b, 0x56, 0x64, 0x77, 0xa0, 0x51, 0x09, 0x97, 0x2c, 0xc5, 0xdc, 0x73, + 0x0e, 0x5f, 0xb8, 0xc3, 0xac, 0x01, 0x8f, 0xa6, 0x4c, 0x0b, 0x51, 0xd0, 0xc6, 0x87, 0xf5, 0x53, + 0xb7, 0x59, 0x8d, 0x1d, 0x1b, 0x2b, 0xde, 0xf6, 0x42, 0xc1, 0xb4, 0xe3, 0xdb, 0x39, 0x50, 0xea, + 0xec, 0x6c, 0x69, 0x0c, 0xb9, 0xbd, 0x0a, 0x16, 0x90, 0x0b, 0x21, 0x0d, 0x35, 0x0b, 0x37, 0x78, + 0x00, 0x63, 0x1b, 0x90, 0x60, 0xfe, 0x7d, 0x47, 0x52, 0xf1, 0xab, 0x9b, 0x36, 0xd7, 0x91, 0xd4, + 0x43, 0xf8, 0x4d, 0x91, 0x64, 0x94, 0x35, 0x63, 0xff, 0xc4, 0xb5, 0x81, 0xe3, 0x5a, 0xec, 0x10, + 0xd4, 0xa8, 0xd0, 0xba, 0xcf, 0x68, 0x89, 0xb8, 0xd6, 0x7d, 0x9b, 0x84, 0xc1, 0x63, 0x71, 0x97, + 0xde, 0x2a, 0x40, 0x45, 0xf4, 0xd3, 0xf8, 0xd7, 0xd9, 0xec, 0x98, 0x35, 0x02, 0x63, 0x37, 0x02, + 0x9f, 0x08, 0xb7, 0xcc, 0x87, 0xc1, 0x3d, 0xa6, 0xbf, 0xdf, 0xa2, 0xd0, 0x02, 0x1c, 0xf0, 0x81, + 0xe8, 0xf4, 0xea, 0x50, 0x61, 0x18, 0xb2, 0x22, 0x9b, 0x8c, 0x44, 0xb9, 0x2a, 0x3d, 0x21, 0x50, + 0xa0, 0xb8, 0x1c, 0xf0, 0x78, 0x42, 0xc1, 0x00, 0xbc, 0xa7, 0x32, 0x28, 0x68, 0x2d, 0xbe, 0x0a, + 0xcd, 0x37, 0xe8, 0x0f, 0xd1, 0x0a, 0x3e, 0xae, 0x4a, 0x25, 0x02, 0x06, 0x64, 0x35, 0xd7, 0x7a, + 0xe3, 0x32, 0x86, 0xf3, 0x3f, 0x47, 0x88, 0x5c, 0xc8, 0xdb, 0x5a, 0x9b, 0x09, 0x9f, 0x80, 0xad, + 0x5e, 0x18, 0xb0, 0xb8, 0x0c, 0x2e, 0x71, 0x72, 0x7c, 0x4e, 0xde, 0x90, 0x99, 0xc2, 0x6a, 0xe3, + 0xfe, 0x47, 0x65, 0x82, 0x35, 0x17, 0xe2, 0xe3, 0x26, 0x57, 0xa3, 0xb0, 0xdf, 0x4e, 0xf2, 0xf2, + 0x1d, 0x2d, 0x40, 0x85, 0xb5, 0xee, 0x88, 0xbb, 0xd6, 0x17, 0x6e, 0xe2, 0x4f, 0x72, 0xa8, 0xd0, + 0xeb, 0x0b, 0x37, 0x59, 0x01, 0xb9, 0x6a, 0x0e, 0xaa, 0x52, 0x9b, 0x40, 0x81, 0xe2, 0x87, 0x66, + 0x22, 0xee, 0xd3, 0xd4, 0x76, 0x67, 0xcb, 0x76, 0xa7, 0xb4, 0x65, 0x77, 0x8d, 0xd4, 0xe0, 0x72, + 0xce, 0x24, 0xba, 0xe1, 0x98, 0xcc, 0x24, 0x7a, 0x2a, 0x00, 0xde, 0xd0, 0x50, 0x5b, 0xe1, 0xdc, + 0xb2, 0x7d, 0x67, 0xad, 0x51, 0xa3, 0x8e, 0xfc, 0x69, 0x01, 0xeb, 0xe5, 0xba, 0xad, 0xae, 0x9d, + 0x5b, 0xcb, 0x32, 0x9f, 0x9f, 0xd6, 0xa3, 0x57, 0xd3, 0x87, 0xa6, 0x93, 0xf1, 0xe3, 0xa9, 0xd1, + 0x6b, 0xa9, 0xb3, 0xa7, 0xcb, 0x65, 0xda, 0x2b, 0xbf, 0x17, 0x86, 0x85, 0xb9, 0x1c, 0x26, 0xd1, + 0x1f, 0x05, 0x8a, 0xaf, 0xd2, 0x61, 0x19, 0x34, 0xfc, 0x86, 0x71, 0x7e, 0x37, 0xac, 0xdf, 0x94, + 0xfe, 0xfd, 0x9d, 0xf4, 0x9d, 0x2f, 0x29, 0x4d, 0x49, 0xc6, 0xe2, 0xeb, 0x21, 0xfa, 0xda, 0x7a, + 0x9c, 0x69, 0xbc, 0x2f, 0x7d, 0xeb, 0x7a, 0x72, 0xf2, 0x86, 0x4c, 0xd1, 0x94, 0xf6, 0x2e, 0x40, + 0xc5, 0x98, 0xe5, 0xfd, 0xd3, 0x8c, 0x00, 0x1a, 0x7e, 0x0b, 0x42, 0x7b, 0x7d, 0x7e, 0xa5, 0x01, + 0x52, 0x35, 0xce, 0x63, 0x5e, 0xa4, 0x2d, 0xb0, 0xf8, 0xb8, 0x3e, 0x74, 0x84, 0xa6, 0x6b, 0x2c, + 0x53, 0x0e, 0x44, 0x9e, 0x33, 0xc4, 0xe1, 0xe7, 0xab, 0x0e, 0xec, 0x0d, 0x97, 0xcb, 0x4c, 0x45, + 0xfe, 0x43, 0xc4, 0x1b, 0x7b, 0x71, 0xa3, 0x21, 0x32, 0x47, 0xa4, 0x80, 0x77, 0x2b, 0x0d, 0xc4, + 0x5b, 0x08, 0x11, 0x1d, 0xf2, 0x14, 0x8b, 0x4f, 0x93, 0x07, 0x6a, 0x9a, 0x01, 0x04, 0x47, 0xd0, + 0x36, 0x3e, 0x6c, 0xf2, 0x36, 0xe4, 0x65, 0x97, 0xf3, 0x34, 0xe3, 0x7f, 0x6e, 0xcf, 0xf4, 0x0e, + 0x06, 0xce, 0x6b, 0x55, 0xe9, 0x71, 0x7b, 0xa6, 0xf7, 0x25, 0x24, 0xb5, 0x3b, 0xce, 0xf4, 0x6e, + 0x4f, 0xe6, 0xfe, 0x5b, 0x54, 0x6c, 0xcc, 0x43, 0xbd, 0x3b, 0x14, 0xf1, 0xe1, 0x27, 0x7e, 0xe0, + 0x8a, 0x71, 0x7a, 0x04, 0x7b, 0x89, 0x58, 0x07, 0x58, 0xd2, 0xe3, 0x5f, 0x69, 0x97, 0x8e, 0x68, + 0x83, 0x7d, 0x7a, 0xf7, 0x90, 0xd6, 0x7d, 0xd8, 0xb8, 0x80, 0x07, 0xfb, 0xc0, 0x34, 0x22, 0x19, + 0x3b, 0x91, 0x9c, 0xea, 0xd2, 0xa6, 0x3f, 0x86, 0x0c, 0x50, 0xda, 0x9d, 0x2f, 0xf4, 0x91, 0x1e, + 0x9a, 0xa6, 0x05, 0x34, 0x80, 0xb2, 0x1d, 0x6b, 0xe9, 0xc0, 0x02, 0xc4, 0xe7, 0xa6, 0xf7, 0xe7, + 0x47, 0x0b, 0x10, 0x6f, 0x26, 0xe0, 0x77, 0xee, 0x33, 0xc6, 0xca, 0xec, 0xce, 0x7f, 0xcf, 0xa9, + 0xd2, 0xdf, 0x70, 0x42, 0x9e, 0x0a, 0xe2, 0x7f, 0xcb, 0xc1, 0xdb, 0x49, 0x7a, 0x7c, 0x34, 0x7d, + 0x6b, 0x12, 0x76, 0xeb, 0xbd, 0x68, 0x47, 0x8d, 0xb4, 0xad, 0xf6, 0x1d, 0x57, 0xed, 0x8e, 0x37, + 0x8d, 0xad, 0x57, 0x2f, 0x19, 0x4c, 0xe5, 0x70, 0xe6, 0x93, 0xce, 0xe4, 0xd4, 0xe9, 0xf4, 0xad, + 0x49, 0xbd, 0xb7, 0x47, 0x8b, 0x5d, 0xd1, 0xc6, 0xa7, 0x53, 0x53, 0x1f, 0xa7, 0xc6, 0x4f, 0xcd, + 0x24, 0x7a, 0x77, 0xc8, 0xd2, 0xc6, 0x8d, 0x2e, 0xe7, 0xee, 0xfa, 0xed, 0x0d, 0x3b, 0x8c, 0xda, + 0xbb, 0x6b, 0xde, 0xdd, 0xfd, 0xe6, 0xf6, 0x9d, 0xb2, 0x71, 0x31, 0xfe, 0xbe, 0x3d, 0x73, 0x64, + 0xc0, 0x68, 0x72, 0x63, 0xc0, 0xa0, 0x6a, 0x83, 0xfd, 0x80, 0x64, 0x26, 0xd1, 0xcb, 0x74, 0x92, + 0xdb, 0x0e, 0x7a, 0xb8, 0x5f, 0x3b, 0xc9, 0xb9, 0x59, 0xda, 0x54, 0x47, 0xab, 0x6b, 0xbd, 0x5d, + 0xa0, 0xaf, 0x90, 0xf3, 0x7c, 0x2b, 0x7f, 0x8c, 0x43, 0x2b, 0x4d, 0xf0, 0x56, 0xf7, 0x81, 0x1a, + 0x77, 0xc0, 0xbb, 0xdf, 0xe7, 0x8d, 0xec, 0x23, 0x87, 0x05, 0xa7, 0x3b, 0xcf, 0x5b, 0x41, 0xfc, + 0x99, 0xd6, 0x75, 0x2d, 0x35, 0x7d, 0x5c, 0x3b, 0x12, 0x87, 0x7e, 0x92, 0xb1, 0xa3, 0x99, 0x33, + 0x83, 0xc6, 0x22, 0xf6, 0x9d, 0x4c, 0x4e, 0xf7, 0xcd, 0x24, 0x86, 0xb7, 0xee, 0x69, 0x09, 0xb3, + 0x7c, 0xe9, 0x4c, 0x62, 0x78, 0x3d, 0x81, 0xc9, 0x79, 0x71, 0xf2, 0x4d, 0x68, 0x79, 0x4b, 0xeb, + 0x1e, 0xbf, 0xcf, 0xe3, 0xaa, 0x97, 0xc2, 0x61, 0x5f, 0x63, 0x40, 0xf1, 0x12, 0xb3, 0x44, 0xfc, + 0xbe, 0x90, 0x53, 0x28, 0x96, 0x91, 0xd7, 0x95, 0xee, 0xc3, 0x99, 0xae, 0x3e, 0x18, 0x90, 0xab, + 0x9e, 0xf6, 0x99, 0x8c, 0xc5, 0x4d, 0xfe, 0x48, 0xce, 0x69, 0xcb, 0xbf, 0x87, 0xf8, 0x3d, 0x66, + 0xcf, 0xf5, 0x6e, 0x4f, 0x93, 0xbb, 0x51, 0x71, 0x79, 0xc9, 0xcb, 0x10, 0x7e, 0x46, 0xc8, 0x53, + 0x2c, 0xae, 0x80, 0xf7, 0x72, 0x3a, 0xb5, 0xae, 0x5a, 0x39, 0x4f, 0xb5, 0xd2, 0xbf, 0x5c, 0x8d, + 0x56, 0xbb, 0xcc, 0xa4, 0x27, 0x44, 0x23, 0x08, 0x0f, 0x26, 0xfc, 0x2b, 0xf4, 0x11, 0x8a, 0xb3, + 0x14, 0x0c, 0xe6, 0x23, 0xd4, 0x4a, 0x33, 0x53, 0x0a, 0x6b, 0xe3, 0x4c, 0x9f, 0x9e, 0x7e, 0x4a, + 0x6e, 0xc9, 0x02, 0xcb, 0xa7, 0x00, 0x6e, 0xc9, 0x25, 0x16, 0x23, 0x7b, 0xe1, 0x02, 0xb9, 0x21, + 0xd7, 0xdb, 0x5d, 0x99, 0xf0, 0xf3, 0x1c, 0x91, 0x51, 0x97, 0x12, 0x27, 0x20, 0xbc, 0xcb, 0x2d, + 0xb1, 0xb4, 0x1e, 0x15, 0x9a, 0xf2, 0x17, 0x99, 0x86, 0xe7, 0x55, 0x69, 0x83, 0x40, 0x81, 0xe2, + 0x8f, 0x4c, 0xf1, 0x0e, 0x12, 0xf7, 0x30, 0x7d, 0x62, 0xcd, 0x76, 0x14, 0x02, 0x3c, 0xc8, 0xb4, + 0x01, 0xff, 0x1a, 0x2a, 0x74, 0xb7, 0xb4, 0xf8, 0x0f, 0x1a, 0x77, 0x34, 0x48, 0xdd, 0xf8, 0x6b, + 0x29, 0x50, 0xe4, 0x41, 0x71, 0x4b, 0xc5, 0xec, 0xcc, 0x91, 0x01, 0x99, 0x96, 0xf2, 0x8d, 0x68, + 0x9e, 0xb3, 0x7e, 0x27, 0x26, 0x27, 0xc5, 0x35, 0x3b, 0x55, 0x49, 0x16, 0x8c, 0xdf, 0xe2, 0x66, + 0x83, 0xb1, 0x3b, 0x7f, 0xcc, 0x59, 0xbf, 0x93, 0x49, 0xae, 0xd0, 0x0f, 0x40, 0x36, 0xd3, 0x4c, + 0x32, 0xae, 0xea, 0x43, 0x97, 0x0d, 0x06, 0x71, 0xe2, 0x84, 0x0d, 0xce, 0x0a, 0x74, 0x06, 0x46, + 0xa3, 0xa3, 0xad, 0x4a, 0x33, 0x11, 0xc2, 0xa1, 0xa3, 0xad, 0x4a, 0xb3, 0xd9, 0xd1, 0x56, 0xa5, + 0xf9, 0xfb, 0xe8, 0x68, 0xab, 0xd2, 0xcc, 0xef, 0x47, 0xf3, 0x36, 0xd5, 0xef, 0xc4, 0x06, 0x84, + 0xc5, 0x35, 0x8a, 0x2a, 0xed, 0x11, 0x8c, 0xdf, 0xe2, 0xfb, 0x80, 0x73, 0xd3, 0xf7, 0xf1, 0x45, + 0x96, 0x81, 0x66, 0x62, 0xd8, 0xb8, 0xb0, 0x64, 0xa3, 0x07, 0xfe, 0xd3, 0xec, 0xac, 0x40, 0x10, + 0x97, 0xe0, 0xb7, 0xaa, 0xf4, 0xe7, 0x59, 0x59, 0x81, 0xfc, 0xd0, 0x2d, 0xd1, 0x38, 0x31, 0xde, + 0x3e, 0xe9, 0x63, 0xc4, 0x46, 0xd3, 0x59, 0xbf, 0xd3, 0x58, 0xfe, 0xc3, 0x5d, 0xda, 0xf5, 0xd3, + 0xa0, 0x83, 0xc2, 0x42, 0x67, 0x1f, 0xf0, 0x9c, 0xf4, 0xd2, 0x4c, 0x1f, 0xf9, 0x2c, 0x3d, 0xda, + 0xab, 0x0d, 0xe2, 0x54, 0x3d, 0x37, 0x6e, 0xa6, 0xef, 0x1e, 0xd7, 0x7a, 0x0d, 0xd6, 0x98, 0xc5, + 0x9f, 0x95, 0x1a, 0x68, 0x08, 0x53, 0x6c, 0x00, 0x30, 0x14, 0x1b, 0xa4, 0x6b, 0x8d, 0x53, 0xa5, + 0x3b, 0x98, 0x62, 0x67, 0x57, 0x10, 0x2f, 0x72, 0x80, 0x14, 0x28, 0xb6, 0x21, 0x9a, 0x60, 0xfe, + 0x22, 0x9b, 0x84, 0xe6, 0xa5, 0x9c, 0x0d, 0xf5, 0xdb, 0x71, 0xa5, 0xd4, 0xe7, 0xe7, 0x93, 0x53, + 0x77, 0x28, 0x98, 0xd0, 0x78, 0xad, 0xb7, 0x4b, 0x9b, 0xbc, 0xa5, 0xf5, 0x76, 0xe9, 0x23, 0xdd, + 0xf7, 0xa2, 0x1d, 0xda, 0x95, 0x0e, 0xe3, 0xf6, 0xc7, 0x7a, 0x7f, 0xb0, 0x96, 0xd1, 0x87, 0x3b, + 0xa8, 0x50, 0x0d, 0x06, 0x33, 0x6c, 0x93, 0xd4, 0x70, 0xa7, 0x19, 0x29, 0xed, 0x27, 0xa1, 0x1f, + 0xc9, 0x8b, 0x08, 0x56, 0x79, 0x79, 0xf6, 0xd0, 0xe4, 0x42, 0x73, 0x1c, 0x72, 0x9e, 0x0f, 0xe4, + 0xfb, 0x38, 0x84, 0x20, 0x91, 0xb3, 0xc1, 0x6d, 0x11, 0xff, 0xe8, 0x1c, 0x8f, 0x4c, 0x93, 0x1b, + 0xab, 0x69, 0x50, 0xa5, 0x7a, 0x81, 0x69, 0x20, 0xd6, 0x90, 0xa4, 0x51, 0x67, 0x4f, 0xe7, 0x5a, + 0xfa, 0xc0, 0xd7, 0x24, 0x63, 0x71, 0x1b, 0x27, 0x75, 0x16, 0x6f, 0x24, 0xcc, 0x12, 0x25, 0x63, + 0xf1, 0x17, 0xd6, 0x6f, 0x92, 0x19, 0x7c, 0xfc, 0x35, 0x0e, 0x15, 0x79, 0x49, 0x6f, 0xe1, 0x92, + 0x25, 0x58, 0x80, 0x9a, 0x7d, 0x38, 0x11, 0x55, 0xfa, 0xb5, 0x60, 0xd5, 0x17, 0xbd, 0x94, 0xe7, + 0xa2, 0xa3, 0xd1, 0x4f, 0x5d, 0x64, 0x47, 0x83, 0x9d, 0x01, 0x09, 0x97, 0x55, 0xa6, 0xdd, 0xf9, + 0x42, 0x8b, 0x5f, 0xd0, 0x12, 0x87, 0xf4, 0xfe, 0x1e, 0x43, 0x76, 0xc4, 0x46, 0x68, 0x60, 0x83, + 0xe8, 0xb0, 0x71, 0xa1, 0x60, 0xc7, 0x08, 0xc1, 0xdc, 0xca, 0x65, 0xab, 0x43, 0xbe, 0x05, 0x15, + 0xf9, 0x9a, 0x0d, 0xca, 0x1c, 0xd8, 0x1b, 0xc4, 0xb2, 0x6d, 0x1e, 0x71, 0xcf, 0x65, 0x56, 0x00, + 0xa3, 0x14, 0xab, 0x01, 0xfb, 0x4e, 0x32, 0x38, 0x61, 0x08, 0x7c, 0xa0, 0xbe, 0xc1, 0x67, 0x21, + 0x73, 0x72, 0x44, 0x3b, 0x34, 0x60, 0x06, 0x08, 0xa7, 0x6d, 0xf8, 0x2e, 0x0e, 0xad, 0xf0, 0x05, + 0x7c, 0x91, 0x2d, 0xc1, 0x46, 0x5f, 0xa0, 0xde, 0x1d, 0x0e, 0xef, 0x0f, 0x86, 0xbc, 0xc4, 0xde, + 0x14, 0x5f, 0xaa, 0xb9, 0xa5, 0xe2, 0x1b, 0x59, 0xef, 0x31, 0x30, 0x15, 0x2d, 0xa4, 0x98, 0x48, + 0x7c, 0x74, 0xfb, 0xc1, 0x8a, 0x02, 0xb7, 0x07, 0xf9, 0x53, 0xe4, 0x5c, 0x9c, 0xfc, 0x05, 0x0e, + 0x2d, 0x0f, 0xb3, 0xd9, 0xae, 0x5c, 0xb5, 0xe1, 0x92, 0x65, 0x58, 0xa3, 0x16, 0x56, 0xa5, 0x16, + 0x21, 0xa7, 0x50, 0xfc, 0xa5, 0x35, 0x0a, 0x33, 0xbf, 0x16, 0x35, 0xc4, 0x70, 0xd5, 0xd2, 0x34, + 0xca, 0x74, 0x34, 0xe0, 0xfc, 0x49, 0x1f, 0x2c, 0x61, 0x58, 0x24, 0x0b, 0xd6, 0x70, 0x27, 0xc5, + 0x41, 0xa6, 0x28, 0xa7, 0x3f, 0x9c, 0x35, 0xd6, 0x17, 0x36, 0x33, 0x72, 0x91, 0xf4, 0x42, 0xf8, + 0xbd, 0xb6, 0xb0, 0xe6, 0x03, 0x55, 0x7a, 0x4f, 0xc8, 0x2d, 0x15, 0xeb, 0xf2, 0xae, 0x08, 0x6b, + 0x69, 0x91, 0x8c, 0x1f, 0x87, 0xae, 0x2b, 0x1c, 0x99, 0x68, 0x8f, 0x36, 0xfa, 0xb9, 0x03, 0x2c, + 0x6c, 0x6d, 0xe1, 0xe1, 0x73, 0x31, 0xe3, 0x14, 0x6e, 0xbe, 0xf0, 0xd6, 0x60, 0xc0, 0x17, 0x09, + 0x86, 0xcc, 0xc1, 0xac, 0xc0, 0x83, 0x81, 0x14, 0x6e, 0xd9, 0x85, 0xec, 0xaa, 0xcd, 0x3e, 0x16, + 0x50, 0xe8, 0xd0, 0xb1, 0xd8, 0x46, 0x91, 0x83, 0x92, 0xff, 0x3f, 0x38, 0x04, 0x81, 0x16, 0x6b, + 0xe9, 0x11, 0xe3, 0xf1, 0x11, 0x7b, 0x32, 0xef, 0xdb, 0x15, 0x3d, 0x67, 0xd7, 0x38, 0x55, 0x1a, + 0xe3, 0x84, 0xac, 0xb6, 0xe2, 0x49, 0x8e, 0x4a, 0xc0, 0xec, 0xa9, 0x2b, 0x83, 0x34, 0xf4, 0xa9, + 0x4f, 0xdb, 0x53, 0x67, 0x4f, 0x03, 0x5f, 0x4e, 0xcc, 0x0a, 0xa6, 0x2e, 0x6b, 0x03, 0x47, 0x49, + 0x92, 0xa2, 0xde, 0x21, 0x36, 0xa6, 0xa6, 0xde, 0x7d, 0x27, 0x7d, 0xec, 0x72, 0x32, 0xd6, 0x47, + 0xf2, 0x32, 0xe3, 0xa4, 0xcb, 0x38, 0xfb, 0x79, 0x67, 0x6a, 0xf0, 0x30, 0x6d, 0x02, 0xd8, 0xca, + 0xe7, 0x3e, 0xd7, 0x72, 0xd6, 0x38, 0x79, 0x0f, 0x73, 0x64, 0x76, 0x86, 0x95, 0x10, 0x56, 0x4c, + 0x80, 0x49, 0x2e, 0x76, 0x37, 0xcc, 0x2d, 0xcd, 0xb1, 0xf0, 0x80, 0x5e, 0x5a, 0x49, 0xb1, 0x9c, + 0xdb, 0x82, 0x6f, 0xe7, 0xd0, 0xa2, 0x26, 0xe5, 0x60, 0xbd, 0xdb, 0x17, 0x22, 0xa6, 0xb8, 0x39, + 0x6e, 0x47, 0x9b, 0x95, 0x83, 0x98, 0x0e, 0x60, 0xc3, 0x0c, 0xb3, 0xb2, 0xf8, 0x73, 0x33, 0xf1, + 0x67, 0x7b, 0x46, 0xbd, 0x6c, 0x5a, 0x42, 0x27, 0x63, 0xfd, 0xda, 0xc4, 0xe1, 0xd4, 0xc5, 0x76, + 0x31, 0x13, 0xed, 0x49, 0xc6, 0xa2, 0x33, 0x89, 0x5e, 0x31, 0x1d, 0xed, 0xd2, 0xce, 0x1d, 0x21, + 0x54, 0x15, 0x34, 0x52, 0x13, 0x87, 0x33, 0xea, 0x65, 0xd9, 0x44, 0x05, 0x29, 0x62, 0x83, 0x9e, + 0x26, 0x25, 0xb4, 0x29, 0xe4, 0x6e, 0xd9, 0x57, 0xef, 0x8e, 0xec, 0xc3, 0xa6, 0xb9, 0x45, 0xe0, + 0x3c, 0x92, 0x5d, 0x26, 0xd6, 0x91, 0xfc, 0x86, 0x77, 0x07, 0xd3, 0xa3, 0xbd, 0xc6, 0xf5, 0x35, + 0x3e, 0xa9, 0x9d, 0x19, 0x03, 0x51, 0x2c, 0x97, 0x92, 0x57, 0x19, 0x74, 0xaf, 0x6a, 0x8f, 0x27, + 0x5c, 0x45, 0xf2, 0x61, 0x55, 0x01, 0x3e, 0x39, 0x1b, 0x2f, 0xff, 0x09, 0xc7, 0xbc, 0x4b, 0xc2, + 0x63, 0x6e, 0x17, 0xa7, 0x4a, 0xed, 0x1c, 0xf3, 0x32, 0xd9, 0x4a, 0xfa, 0xc6, 0xcf, 0x8f, 0x15, + 0x0e, 0x6d, 0x60, 0x48, 0x8b, 0x26, 0xaa, 0xb7, 0x4a, 0x0d, 0x3b, 0xea, 0xe4, 0xdd, 0x75, 0x3b, + 0x9c, 0xb5, 0x15, 0x8e, 0x77, 0xb6, 0xcb, 0x9b, 0xeb, 0xe4, 0x7b, 0xd1, 0x0e, 0x06, 0xaa, 0x0d, + 0x7c, 0xa6, 0x8f, 0xf4, 0x68, 0x23, 0x63, 0xa0, 0xfb, 0x73, 0xb8, 0xb6, 0xd5, 0xd6, 0xd5, 0xd7, + 0x6d, 0xab, 0xad, 0xdb, 0xb6, 0x63, 0xb7, 0x73, 0xcb, 0x4e, 0xa3, 0x9e, 0x23, 0x75, 0xec, 0x5a, + 0xea, 0xf3, 0x63, 0x34, 0x75, 0x31, 0x6c, 0x29, 0x78, 0xf3, 0xb4, 0x5e, 0x38, 0x4b, 0xaf, 0xac, + 0x46, 0x8f, 0xe4, 0xb1, 0x38, 0xe2, 0x7f, 0x8b, 0x56, 0xf9, 0x73, 0xc1, 0xf4, 0x69, 0x0d, 0x67, + 0xb5, 0xca, 0x5f, 0xc3, 0x4c, 0xad, 0xcb, 0xda, 0x1f, 0xe1, 0x27, 0x82, 0x9c, 0x57, 0xb4, 0x64, + 0xec, 0xa8, 0xab, 0x56, 0xce, 0x8f, 0x85, 0xff, 0x15, 0x7a, 0xc4, 0x5e, 0xa0, 0x30, 0xcf, 0x69, + 0x58, 0xf6, 0xcf, 0x57, 0x2e, 0xf2, 0x6c, 0xb7, 0xe4, 0x3d, 0x2d, 0x5f, 0x45, 0x83, 0x30, 0xe6, + 0xc4, 0xc2, 0x6d, 0x56, 0xa5, 0x0f, 0x59, 0x5b, 0x9a, 0x0f, 0x88, 0x99, 0xca, 0xe8, 0x98, 0x7e, + 0xba, 0x9f, 0x3a, 0xd1, 0x68, 0x37, 0xcf, 0x27, 0xe3, 0xfd, 0xda, 0xc7, 0x9f, 0x25, 0x63, 0x9f, + 0x81, 0x69, 0x0d, 0x35, 0xaa, 0x81, 0x9f, 0xda, 0xa5, 0x3e, 0xf0, 0x18, 0x36, 0x9a, 0x80, 0xed, + 0x4d, 0xac, 0x4f, 0x3f, 0x3d, 0x61, 0xec, 0xa4, 0x59, 0x32, 0x5e, 0x10, 0x5e, 0x7c, 0xfe, 0x1f, + 0x8a, 0x17, 0x5f, 0xf0, 0x87, 0xe2, 0xc5, 0x17, 0xfe, 0xf1, 0x79, 0xf1, 0x45, 0xff, 0x10, 0x79, + 0xf1, 0xbf, 0xe1, 0xf2, 0xf2, 0xe2, 0xe0, 0x3f, 0x3e, 0xf5, 0x43, 0xe6, 0xc5, 0x1f, 0x84, 0xc3, + 0x2e, 0xfa, 0x63, 0x73, 0xd8, 0xad, 0x2c, 0x83, 0x8d, 0xee, 0xc3, 0x60, 0xbf, 0xa6, 0x4a, 0xd5, + 0x2c, 0x83, 0x5d, 0xf9, 0x50, 0x0c, 0x36, 0xcb, 0x29, 0x77, 0x70, 0x68, 0xa9, 0xcf, 0xa6, 0x4a, + 0x23, 0xc2, 0x46, 0x69, 0x0e, 0xbf, 0x9c, 0xa3, 0x70, 0x03, 0xc3, 0xa6, 0xac, 0xe6, 0xe2, 0xd3, + 0xa0, 0x96, 0x21, 0x26, 0x72, 0xe6, 0x6a, 0x69, 0x53, 0xf1, 0xf4, 0xf8, 0x38, 0x31, 0x70, 0xce, + 0x6a, 0x62, 0x63, 0x04, 0x28, 0xef, 0xbc, 0x24, 0x1f, 0x23, 0x40, 0x79, 0xe7, 0x27, 0xe7, 0xe4, + 0x9d, 0xf3, 0x71, 0xc6, 0x13, 0xf9, 0x38, 0xe3, 0x62, 0xcc, 0x19, 0x77, 0x70, 0xaa, 0xf4, 0xdb, + 0x3c, 0xac, 0x71, 0xd3, 0xb7, 0x65, 0x8d, 0xe9, 0x4e, 0x00, 0x1e, 0x59, 0x1b, 0xec, 0xa4, 0x36, + 0x9c, 0xe4, 0xad, 0x28, 0x76, 0x9d, 0x44, 0xab, 0x1a, 0x9e, 0x9d, 0x53, 0xb6, 0x49, 0x31, 0x4b, + 0xff, 0x10, 0x52, 0xcc, 0xd1, 0xbc, 0xbc, 0x39, 0xbc, 0x5a, 0xfd, 0x52, 0x95, 0xde, 0xcd, 0xc7, + 0x9b, 0xd7, 0x7e, 0x0b, 0xde, 0xfc, 0x60, 0x6b, 0x20, 0xe2, 0x23, 0x4c, 0x31, 0x36, 0xf7, 0x7f, + 0x60, 0xd6, 0x7c, 0xf9, 0x1f, 0x98, 0x35, 0x0f, 0xa3, 0x42, 0x83, 0xbb, 0x34, 0x4e, 0x1e, 0xb1, + 0xbf, 0xc4, 0xd2, 0x1c, 0x05, 0x8a, 0x6f, 0xa6, 0xa6, 0x06, 0x0c, 0xc1, 0xb4, 0xc6, 0x1d, 0x56, + 0x5e, 0x7c, 0xde, 0x91, 0x4a, 0x0c, 0xa5, 0x2e, 0xb6, 0x43, 0x88, 0x2c, 0xcb, 0xd5, 0x17, 0x9f, + 0x4e, 0xe3, 0x50, 0xe2, 0xb7, 0xf4, 0xcc, 0xc9, 0xbb, 0x5a, 0xfc, 0x8a, 0x71, 0x1c, 0x6f, 0x77, + 0xa5, 0xef, 0x1e, 0xd9, 0xf0, 0xe2, 0xe6, 0x9a, 0x7b, 0xd1, 0x0e, 0x99, 0xe2, 0xcc, 0xcf, 0x18, + 0xf3, 0xdf, 0x33, 0x63, 0x7c, 0x85, 0x43, 0x85, 0x61, 0xc5, 0xaf, 0x78, 0x22, 0xc1, 0x50, 0xc9, + 0x23, 0x98, 0xe0, 0x6c, 0x78, 0x00, 0xcb, 0xef, 0x75, 0x0d, 0xa4, 0x0d, 0x98, 0x17, 0xc2, 0x6c, + 0x98, 0x78, 0xc4, 0x37, 0x09, 0xa7, 0x85, 0x85, 0x75, 0x13, 0x8a, 0xd3, 0x22, 0x63, 0xee, 0x0b, + 0xdb, 0x3e, 0x54, 0x18, 0x0c, 0x49, 0x4f, 0x9f, 0x95, 0x82, 0xd1, 0x9e, 0xd7, 0x1c, 0xaa, 0xca, + 0x14, 0xe7, 0x3f, 0x08, 0x0e, 0x7e, 0x27, 0x5a, 0x18, 0x0e, 0xef, 0xdb, 0xac, 0x1c, 0x24, 0x7c, + 0x3b, 0x26, 0xc0, 0x04, 0x24, 0xae, 0x07, 0xa6, 0x2c, 0x1c, 0xde, 0x97, 0x3a, 0x33, 0xa5, 0x4d, + 0x9f, 0xa4, 0x06, 0xef, 0x80, 0x45, 0xef, 0x1e, 0x82, 0x3f, 0x80, 0xf9, 0x33, 0x96, 0x9a, 0xb4, + 0x5c, 0xf3, 0x2a, 0x2a, 0xb6, 0x4d, 0xe7, 0xc3, 0xd8, 0xd6, 0x95, 0xfe, 0x5b, 0x0e, 0x2d, 0x22, + 0x1f, 0xce, 0xbf, 0x82, 0x16, 0x34, 0x29, 0x07, 0x29, 0x33, 0x8c, 0xc3, 0xe9, 0x00, 0x44, 0x7c, + 0x14, 0x3a, 0x07, 0x9b, 0x98, 0xbb, 0x5d, 0x06, 0x8d, 0xc2, 0x6a, 0x13, 0x19, 0xca, 0xf9, 0xcd, + 0xa8, 0xa8, 0x49, 0x39, 0x48, 0xf2, 0xf4, 0x16, 0x58, 0x29, 0x8b, 0x2d, 0xa8, 0xf8, 0x64, 0x93, + 0x72, 0x90, 0x9d, 0xc5, 0xb2, 0x3d, 0x78, 0xb3, 0x43, 0x72, 0xa6, 0x72, 0xd9, 0xaa, 0x49, 0x90, + 0xd5, 0x63, 0xd5, 0x3b, 0x61, 0x61, 0x29, 0x32, 0x80, 0x62, 0x64, 0x5a, 0xd7, 0xb5, 0xb9, 0x90, + 0x41, 0xcd, 0xd2, 0xbf, 0xe6, 0x50, 0x11, 0xa5, 0x6f, 0xfc, 0x1b, 0x68, 0x11, 0x10, 0x2a, 0xf3, + 0x23, 0x7f, 0xa4, 0x4a, 0xa5, 0x82, 0x09, 0x13, 0x1f, 0x05, 0x9a, 0x96, 0xfb, 0x99, 0x66, 0x0d, + 0xfe, 0x25, 0x42, 0x4e, 0x19, 0xae, 0x1d, 0x87, 0xac, 0xb0, 0xa0, 0x62, 0x11, 0x20, 0xd1, 0x06, + 0xfb, 0x64, 0x0b, 0xca, 0x7b, 0x48, 0x43, 0xcc, 0x0f, 0xcd, 0xb3, 0x5c, 0x46, 0x2d, 0xa8, 0xf8, + 0x02, 0x34, 0x24, 0xa6, 0xaf, 0xf5, 0x3b, 0x6b, 0xb6, 0xb8, 0x9c, 0xbb, 0x5d, 0x5b, 0xa5, 0x4d, + 0x75, 0x55, 0xf5, 0xb2, 0x6b, 0x97, 0xb4, 0xa3, 0x8e, 0xfc, 0xda, 0x2a, 0xc9, 0x9b, 0xeb, 0x76, + 0xc0, 0x8f, 0x72, 0xd9, 0xc2, 0x50, 0xfa, 0x55, 0x05, 0x2a, 0x21, 0xfe, 0x53, 0x8c, 0x39, 0xe1, + 0x76, 0xf0, 0x7f, 0xfd, 0x35, 0x26, 0xcb, 0x1e, 0xb7, 0x5f, 0xa9, 0x0d, 0xee, 0x0f, 0xd8, 0xfc, + 0xe9, 0x70, 0x92, 0xdd, 0xdc, 0x52, 0xf1, 0xa7, 0xd8, 0xab, 0xa4, 0xd2, 0x1b, 0xdc, 0x1f, 0xa8, + 0x04, 0x57, 0x13, 0x6f, 0x85, 0xe9, 0x60, 0x85, 0xc3, 0x0c, 0x24, 0xac, 0x4c, 0xf8, 0x72, 0x6e, + 0x7b, 0x7e, 0x3f, 0x2a, 0x54, 0x0e, 0xb4, 0xb8, 0x03, 0x5e, 0x85, 0x44, 0xbf, 0x00, 0x59, 0x95, + 0x02, 0xc5, 0x2d, 0xe6, 0x5f, 0x15, 0x60, 0x10, 0x91, 0x1a, 0x3f, 0xa5, 0x7f, 0x69, 0x88, 0xa7, + 0xec, 0xd3, 0x6e, 0xc8, 0x1d, 0xf0, 0x06, 0x9b, 0x2b, 0x1c, 0x7e, 0xc5, 0x1d, 0x8e, 0x54, 0xee, + 0x77, 0x87, 0x23, 0x4a, 0x85, 0xa3, 0x39, 0x18, 0x8e, 0x54, 0xb6, 0x04, 0xbd, 0xe1, 0x0a, 0x47, + 0x4b, 0xc8, 0x17, 0x34, 0x68, 0xbe, 0x4c, 0xf1, 0xf2, 0x1f, 0x21, 0xbe, 0xd9, 0x7d, 0xa0, 0xae, + 0xb9, 0x25, 0x72, 0xb0, 0xa6, 0xd5, 0xdf, 0x04, 0xa1, 0xf4, 0x88, 0x95, 0x21, 0x7e, 0xcb, 0xcd, + 0x53, 0x2c, 0x6e, 0x68, 0x76, 0x1f, 0xa8, 0x54, 0x0c, 0x60, 0xe5, 0x9e, 0x56, 0x7f, 0x53, 0xa5, + 0x17, 0x83, 0x2b, 0xb4, 0xbe, 0x93, 0xfa, 0xb5, 0x51, 0x62, 0x4a, 0x82, 0x69, 0xaf, 0x65, 0x1b, + 0x90, 0x07, 0x0d, 0xff, 0x1b, 0xb4, 0x34, 0x6c, 0xce, 0x43, 0xad, 0xe2, 0x77, 0x1f, 0x24, 0xf2, + 0x0f, 0xe6, 0xfe, 0xb2, 0x8a, 0xc4, 0xd7, 0x89, 0x24, 0x0b, 0xa6, 0x68, 0x83, 0xfd, 0xda, 0xa5, + 0xe1, 0xcc, 0xc9, 0xbb, 0x60, 0xf4, 0x60, 0xdc, 0x27, 0x57, 0x8f, 0x69, 0xdd, 0x97, 0xb4, 0x71, + 0x62, 0xc9, 0x42, 0x59, 0xf3, 0x0d, 0xeb, 0xc1, 0x68, 0x47, 0xce, 0xc2, 0xc7, 0xff, 0xa7, 0x1c, + 0x5a, 0x45, 0x41, 0x3b, 0x03, 0x01, 0x45, 0xf1, 0x2a, 0x5e, 0xec, 0x77, 0x01, 0xb2, 0x51, 0x2f, + 0xa7, 0x4a, 0xdd, 0x9c, 0x90, 0xbf, 0x8e, 0x18, 0x64, 0xd6, 0xbb, 0x95, 0x14, 0x54, 0x46, 0x7c, + 0xcd, 0x4a, 0x85, 0xde, 0x73, 0x35, 0x3d, 0x4a, 0x2c, 0x70, 0x52, 0xd7, 0x7b, 0xb4, 0xaf, 0xba, + 0x60, 0x8c, 0x86, 0xf8, 0x40, 0xf4, 0x0c, 0xe7, 0x53, 0x53, 0xd7, 0x53, 0xbf, 0x8b, 0x67, 0x4e, + 0x7d, 0xa1, 0x5d, 0x1a, 0xd6, 0x6e, 0x1c, 0x87, 0x11, 0x6a, 0x83, 0xfd, 0xe9, 0x4f, 0x3e, 0x9f, + 0x6d, 0xf8, 0xf9, 0xc7, 0xc1, 0xff, 0x7b, 0x0e, 0x3d, 0x69, 0x95, 0x44, 0x7c, 0x7e, 0xdf, 0x47, + 0xf8, 0xde, 0xd8, 0xb1, 0x2f, 0xa4, 0xb8, 0xf7, 0x05, 0xfd, 0x5e, 0x22, 0x80, 0xfd, 0x8e, 0x53, + 0xa5, 0xcb, 0x9c, 0x30, 0x77, 0x5d, 0xf1, 0x10, 0xc7, 0x7e, 0x96, 0x55, 0xa3, 0x32, 0xb2, 0x2f, + 0xa4, 0x84, 0x8d, 0x2a, 0x15, 0xe9, 0xab, 0x57, 0xb4, 0x81, 0xe3, 0x64, 0x3b, 0x63, 0x5b, 0xf6, + 0xcc, 0xe9, 0x6e, 0xfc, 0xfa, 0x68, 0x7e, 0x1e, 0xe3, 0x25, 0x90, 0x39, 0x32, 0x90, 0x9c, 0xee, + 0x37, 0x84, 0x65, 0xfc, 0x9d, 0xa9, 0x33, 0x5f, 0x69, 0xdd, 0x87, 0xf5, 0x89, 0x13, 0xb0, 0x52, + 0x10, 0xe2, 0x22, 0x73, 0xea, 0x0b, 0xd6, 0x10, 0xe0, 0x85, 0xf5, 0xf2, 0xdc, 0x83, 0x34, 0x44, + 0x89, 0xc7, 0xc2, 0x4d, 0xbe, 0x96, 0x6d, 0x41, 0xaf, 0x12, 0x7e, 0xc7, 0x17, 0xd9, 0xb7, 0x25, + 0xe8, 0x71, 0xfb, 0x1b, 0x22, 0xc1, 0x90, 0xbb, 0xd1, 0xcc, 0xed, 0x8c, 0x2d, 0x3d, 0x67, 0xaf, + 0x25, 0x56, 0x81, 0x89, 0xaf, 0x3e, 0xd2, 0xa3, 0x8f, 0x5c, 0xd3, 0x46, 0x6e, 0x00, 0x39, 0x34, + 0x98, 0x08, 0xfc, 0x0d, 0xec, 0x80, 0xc0, 0x7f, 0x6c, 0x76, 0x5c, 0xfc, 0x79, 0x0e, 0x3d, 0x6a, + 0x2b, 0x05, 0x2b, 0x83, 0xfa, 0xa0, 0x37, 0x8c, 0xc5, 0xb9, 0xc2, 0x1a, 0xaf, 0x2a, 0xb9, 0x85, + 0xd9, 0xea, 0x88, 0x1b, 0x61, 0x2c, 0x4d, 0xad, 0x7b, 0x94, 0x4a, 0x90, 0x50, 0x1c, 0xdb, 0x1a, + 0x92, 0xb1, 0x63, 0x99, 0x73, 0xe7, 0x6b, 0xdd, 0x4a, 0x73, 0x30, 0xd0, 0xa0, 0x44, 0xc0, 0xb7, + 0x38, 0x35, 0xdc, 0x59, 0x1f, 0xf4, 0xe6, 0x8e, 0x12, 0x86, 0x38, 0x5b, 0x07, 0x06, 0x67, 0xf7, + 0xb8, 0xaf, 0x31, 0x10, 0x0c, 0x29, 0x14, 0x5f, 0x98, 0x99, 0x59, 0x2c, 0x8c, 0x15, 0xd6, 0xfc, + 0x5c, 0x95, 0x5e, 0x13, 0xe6, 0xaa, 0x27, 0xae, 0x85, 0x81, 0x5a, 0x83, 0x32, 0xbd, 0x19, 0xd2, + 0xe3, 0xa3, 0xa9, 0xf1, 0x53, 0xf2, 0x5c, 0x8d, 0x0d, 0xb6, 0xe2, 0x91, 0x60, 0xd3, 0x8e, 0x60, + 0xc4, 0xed, 0xdf, 0x19, 0x08, 0x29, 0x6e, 0xef, 0x41, 0x27, 0xb6, 0xba, 0x40, 0x96, 0x65, 0x6e, + 0xbe, 0x72, 0xf1, 0x85, 0x60, 0x53, 0x65, 0xc4, 0x80, 0x56, 0xb6, 0x02, 0xb8, 0x12, 0x27, 0xc5, + 0xa8, 0x00, 0xb2, 0xea, 0x20, 0x40, 0x07, 0xe1, 0x3d, 0x86, 0x3b, 0xc9, 0x2b, 0x67, 0x3e, 0x5c, + 0xfc, 0xd7, 0x1c, 0x7a, 0xac, 0xd9, 0x7d, 0x80, 0x2d, 0xa8, 0x57, 0x42, 0x1e, 0x25, 0x10, 0x31, + 0x76, 0xce, 0x62, 0x3c, 0x92, 0x8f, 0x39, 0x55, 0x1a, 0xe0, 0x84, 0xd9, 0xeb, 0x89, 0x21, 0x83, + 0xf8, 0xd9, 0x87, 0xd4, 0x42, 0x4b, 0x2b, 0x08, 0x88, 0x9c, 0x05, 0xcc, 0x71, 0x12, 0xc2, 0x15, + 0x9d, 0xa2, 0x83, 0xa4, 0x07, 0xc1, 0x38, 0x35, 0xb8, 0x8e, 0x7e, 0xfd, 0x12, 0x9c, 0x23, 0xad, + 0xfb, 0x8c, 0xd6, 0x3e, 0xa2, 0x5f, 0xff, 0x84, 0xb5, 0x7e, 0x93, 0x67, 0x1f, 0x0e, 0xaf, 0x72, + 0x68, 0x25, 0x43, 0x1b, 0x70, 0x31, 0xcd, 0x8d, 0x50, 0x5c, 0xf3, 0x2b, 0x55, 0x7a, 0x5f, 0xc8, + 0x5b, 0x41, 0x74, 0xda, 0x68, 0x18, 0x7c, 0x09, 0x26, 0x61, 0xb6, 0x6f, 0xc8, 0x4b, 0xc9, 0xc0, + 0x08, 0x21, 0x75, 0x55, 0x95, 0xf3, 0xa2, 0xe6, 0xff, 0x07, 0x0e, 0x3d, 0x6e, 0x60, 0x69, 0xf4, + 0x19, 0x37, 0xac, 0x82, 0xbd, 0x6a, 0x64, 0xa5, 0x39, 0xd8, 0xe6, 0xf6, 0x53, 0xd7, 0xb7, 0xe2, + 0x9a, 0x93, 0x9c, 0x2a, 0x1d, 0xe7, 0x84, 0xb9, 0x6a, 0x8a, 0x21, 0x33, 0x22, 0x87, 0xdb, 0x74, + 0xdd, 0x0c, 0xc1, 0x58, 0x6c, 0xf4, 0xff, 0xc6, 0x61, 0x08, 0x8b, 0xaa, 0x8f, 0x7c, 0xa6, 0x8d, + 0x8c, 0x19, 0x47, 0xc9, 0x90, 0x77, 0x95, 0x70, 0x32, 0x76, 0x5d, 0xff, 0x72, 0x4c, 0x3b, 0xdc, + 0x9b, 0x7b, 0x68, 0x9e, 0x23, 0x94, 0xd5, 0x90, 0x13, 0xb0, 0x62, 0x43, 0xff, 0x62, 0x94, 0xf8, + 0x36, 0xcd, 0x35, 0x20, 0x7e, 0x1b, 0xab, 0x36, 0x5c, 0x6a, 0x46, 0xb8, 0xab, 0x64, 0xd5, 0x86, + 0x0e, 0xd0, 0xf2, 0x01, 0x73, 0x44, 0xbd, 0x6c, 0x67, 0xd1, 0xfc, 0x6d, 0x65, 0xdd, 0x76, 0x97, + 0x59, 0x1e, 0xf5, 0x8c, 0xdb, 0xee, 0x53, 0x8c, 0x43, 0xae, 0x0d, 0x25, 0x81, 0xb1, 0x4e, 0xb8, + 0x4c, 0xbc, 0x98, 0xe5, 0x0f, 0x15, 0x2f, 0xc6, 0x69, 0xf3, 0x4d, 0x5c, 0xc1, 0xc4, 0x89, 0xb4, + 0xc0, 0x22, 0x9f, 0xe5, 0x29, 0x81, 0x03, 0xb8, 0x30, 0x0e, 0x8c, 0x4c, 0xd0, 0x19, 0xfe, 0xa1, + 0x82, 0xce, 0x38, 0x6d, 0x9e, 0x8f, 0x8f, 0x30, 0xbd, 0x33, 0x81, 0x63, 0x78, 0xb6, 0x79, 0x9e, + 0xf0, 0x31, 0x7f, 0xc5, 0xba, 0x24, 0x82, 0x33, 0xd8, 0x5d, 0x4e, 0x95, 0xa6, 0x58, 0x97, 0xc4, + 0x71, 0x2e, 0x97, 0xed, 0xfb, 0x81, 0xf8, 0x26, 0x8e, 0x71, 0xb9, 0xbe, 0xd1, 0xab, 0x30, 0xed, + 0xc6, 0xf9, 0x60, 0x73, 0x7c, 0xa3, 0xf7, 0xb1, 0xa2, 0x38, 0x25, 0x27, 0x94, 0xc1, 0x20, 0x3e, + 0xd3, 0x83, 0xfd, 0xc9, 0xc4, 0xb0, 0x36, 0x82, 0x63, 0x44, 0xe1, 0xfd, 0x94, 0x39, 0x34, 0x96, + 0x9a, 0xfe, 0xc2, 0x91, 0x3b, 0x4d, 0x8e, 0xd4, 0x54, 0x67, 0x72, 0xea, 0x36, 0x7b, 0x39, 0x3a, + 0x66, 0xf1, 0xae, 0xfe, 0x4b, 0x0e, 0x3d, 0xb2, 0xa7, 0x75, 0xef, 0x5e, 0x25, 0x24, 0x13, 0x7f, + 0x42, 0xd9, 0xb8, 0x06, 0xf0, 0x2b, 0x08, 0x3d, 0xf7, 0xf9, 0x6a, 0x88, 0x1f, 0x01, 0xb0, 0xd2, + 0xf4, 0x43, 0xac, 0xc4, 0x72, 0x30, 0x61, 0x3b, 0x80, 0x1a, 0xb2, 0x6c, 0x07, 0x4b, 0x49, 0x89, + 0x8d, 0x30, 0xc3, 0x7f, 0xa4, 0xfa, 0x8f, 0x00, 0x79, 0x05, 0xc5, 0x2d, 0xc4, 0xce, 0x62, 0x51, + 0xd1, 0x6f, 0x71, 0x6c, 0x58, 0xbf, 0x5e, 0xce, 0x37, 0x20, 0xfe, 0x12, 0x5c, 0x1a, 0x9b, 0x42, + 0x6e, 0x8f, 0xb2, 0xb7, 0xd5, 0xbf, 0x43, 0x09, 0x35, 0xfb, 0x02, 0xf8, 0x4e, 0x6b, 0x50, 0x3c, + 0xd8, 0xe9, 0xad, 0xb8, 0x66, 0xaf, 0x2a, 0x79, 0x84, 0xd9, 0x6b, 0x89, 0x1b, 0x8d, 0x2b, 0xa3, + 0x91, 0x94, 0x55, 0x46, 0xac, 0xc2, 0xca, 0xb0, 0xe2, 0xa9, 0xa0, 0xb6, 0xd7, 0xc6, 0xde, 0xc3, + 0xb4, 0xcd, 0x51, 0x1f, 0xf4, 0x3a, 0x32, 0xd1, 0xa8, 0x76, 0x24, 0xae, 0x8f, 0x44, 0x29, 0x99, + 0x93, 0x67, 0xef, 0x82, 0xef, 0xe4, 0xd0, 0x92, 0xb0, 0xc7, 0x1d, 0xc0, 0x7a, 0xc3, 0x36, 0xb7, + 0x1f, 0x3b, 0xc2, 0x15, 0xd7, 0xfc, 0x27, 0xaa, 0xf4, 0x81, 0x60, 0x2b, 0x10, 0xb7, 0x1a, 0xbf, + 0x2a, 0x7d, 0xe4, 0x67, 0x45, 0xd6, 0xc6, 0xd0, 0x3f, 0x8d, 0xea, 0xbf, 0x3f, 0x06, 0xfd, 0x19, + 0xff, 0x0f, 0x9f, 0xa0, 0xe4, 0xde, 0xe0, 0xd7, 0xae, 0xaa, 0xb6, 0xe5, 0xdf, 0xb0, 0x5e, 0xb6, + 0x21, 0x37, 0x98, 0xa1, 0x95, 0xcd, 0xee, 0x03, 0x06, 0xd1, 0xc4, 0x41, 0x92, 0xc2, 0x06, 0xeb, + 0x66, 0x1c, 0xe9, 0xc7, 0xf0, 0x70, 0x3e, 0x54, 0xa5, 0x46, 0x21, 0x6f, 0x05, 0x71, 0xbb, 0x31, + 0x47, 0x81, 0xa0, 0x57, 0xa9, 0x6c, 0x31, 0xe1, 0x70, 0x1b, 0xc1, 0x94, 0x10, 0x49, 0x02, 0xab, + 0x9d, 0xd9, 0x39, 0x61, 0x2f, 0x23, 0x6b, 0x35, 0x5f, 0x59, 0xbf, 0x5e, 0xce, 0xdb, 0x8d, 0xc1, + 0x87, 0x2c, 0xc3, 0x7b, 0x74, 0x67, 0xcb, 0xc6, 0x50, 0xb0, 0xf9, 0x3d, 0x25, 0x14, 0x2c, 0x59, + 0x83, 0x0f, 0x11, 0xd6, 0xad, 0x64, 0x97, 0x89, 0x12, 0x5c, 0x92, 0xad, 0x2d, 0x95, 0x7b, 0x43, + 0xc1, 0xe6, 0xca, 0x8f, 0x94, 0x50, 0x90, 0xf0, 0x1e, 0xec, 0x05, 0x3d, 0x93, 0xe8, 0x86, 0xd8, + 0x6b, 0x0e, 0x96, 0x1d, 0xc1, 0x4b, 0xda, 0x23, 0x67, 0xe3, 0xe4, 0xcf, 0x71, 0x68, 0xb5, 0x5d, + 0x1a, 0x91, 0xf6, 0x1a, 0x47, 0xcd, 0xeb, 0x2d, 0x79, 0xdc, 0x7a, 0x2e, 0x99, 0xa5, 0x8a, 0xf8, + 0x26, 0x73, 0x6d, 0x7b, 0x8d, 0x92, 0x4a, 0xf7, 0x5e, 0x7c, 0x41, 0x7a, 0xbd, 0x15, 0x96, 0x74, + 0xd4, 0x7d, 0x49, 0x1f, 0xba, 0x6e, 0xf9, 0x01, 0xe4, 0x2c, 0xa6, 0x71, 0x77, 0xcf, 0xd2, 0x03, + 0x7f, 0xc5, 0xe0, 0xb0, 0x73, 0x8b, 0x88, 0x6c, 0xf8, 0x04, 0x1e, 0x22, 0x0e, 0x74, 0x35, 0x7b, + 0xad, 0x59, 0x47, 0x49, 0x44, 0x45, 0x10, 0x82, 0x92, 0xb1, 0x4b, 0x96, 0xc0, 0x38, 0xdb, 0x28, + 0x67, 0xef, 0x84, 0xbf, 0xce, 0xa1, 0x35, 0x79, 0x4a, 0x37, 0xba, 0x7d, 0xfe, 0xd6, 0x90, 0x52, + 0xf2, 0x24, 0x1e, 0x29, 0x7e, 0xd4, 0x9b, 0xa3, 0x9a, 0xb8, 0x65, 0x96, 0xa1, 0xee, 0x85, 0x72, + 0x72, 0x3e, 0xc1, 0xe3, 0x46, 0x1b, 0xec, 0x07, 0xc7, 0xa2, 0x59, 0x87, 0x3b, 0x47, 0x4f, 0x7c, + 0x47, 0x01, 0x72, 0xd0, 0xe2, 0x4d, 0x2d, 0xad, 0x59, 0xf2, 0x0d, 0x96, 0xb0, 0x4a, 0xd6, 0xe2, + 0x51, 0xff, 0x9e, 0x53, 0xa5, 0x9b, 0x9c, 0x70, 0xdf, 0xea, 0x62, 0x2f, 0x2b, 0xb3, 0x35, 0xb6, + 0xb4, 0x3e, 0xa4, 0xdc, 0x56, 0xb6, 0xa9, 0x7e, 0x67, 0xf9, 0xf7, 0x28, 0xbc, 0xdd, 0x77, 0xc0, + 0x38, 0x66, 0x1a, 0x71, 0xb1, 0x7f, 0x8a, 0x89, 0x99, 0x46, 0x3c, 0xec, 0xdf, 0x07, 0x4f, 0xfa, + 0x0a, 0xc7, 0xb6, 0xed, 0xf2, 0x56, 0x69, 0x4b, 0xb5, 0x7e, 0xfd, 0x53, 0x2d, 0x16, 0x9b, 0x49, + 0xf4, 0xee, 0xac, 0xaf, 0xc5, 0x3e, 0xf1, 0xd5, 0x24, 0x67, 0x44, 0xec, 0xba, 0x09, 0xac, 0xab, + 0xdc, 0x28, 0xb9, 0xb6, 0xd4, 0xd5, 0x92, 0x12, 0x58, 0xa8, 0x99, 0x44, 0x2f, 0xf1, 0x72, 0xa9, + 0xd6, 0xee, 0x7c, 0x01, 0x2c, 0x35, 0x75, 0x8d, 0x77, 0xa2, 0x25, 0x4a, 0x28, 0x14, 0x0c, 0x6d, + 0x25, 0xc1, 0x58, 0x1d, 0x78, 0x1c, 0x38, 0xb1, 0xb0, 0xad, 0x40, 0x5c, 0x62, 0x8b, 0xc5, 0x6a, + 0x2b, 0xe3, 0xff, 0x35, 0x87, 0x56, 0xdb, 0x2f, 0x0c, 0x67, 0x4b, 0x2b, 0x5c, 0x73, 0x4f, 0xe3, + 0x25, 0x3c, 0xcd, 0xa9, 0xd2, 0x09, 0x4e, 0x98, 0xa5, 0xd2, 0x1f, 0xf5, 0xa6, 0x9b, 0x65, 0x4c, + 0x79, 0xbe, 0x69, 0xab, 0xd2, 0x0c, 0xdf, 0x54, 0x3a, 0xc7, 0x37, 0x99, 0x95, 0xfe, 0x21, 0x7d, + 0x93, 0x39, 0x26, 0x3e, 0x88, 0x16, 0x36, 0x07, 0xb1, 0x07, 0xcd, 0x33, 0xf9, 0x03, 0x4b, 0x6e, + 0xc5, 0xa5, 0x58, 0xa3, 0x8d, 0x5d, 0x91, 0x48, 0x75, 0x71, 0x1d, 0xfc, 0x0b, 0x21, 0x10, 0x4c, + 0x85, 0xb6, 0x53, 0x22, 0x27, 0x65, 0xfa, 0x5a, 0xea, 0xea, 0x14, 0x5b, 0x26, 0x93, 0x76, 0xfc, + 0x6f, 0xd1, 0xa2, 0xfd, 0xca, 0x9e, 0x7d, 0xc1, 0x60, 0x53, 0xc9, 0xb3, 0xf9, 0xa3, 0x94, 0xbd, + 0x03, 0xc5, 0x5b, 0x83, 0x5e, 0x05, 0x42, 0x32, 0x98, 0x0d, 0xc4, 0x6a, 0xa7, 0xe4, 0x20, 0x7f, + 0x83, 0x0b, 0x58, 0x56, 0x68, 0x40, 0xe6, 0x99, 0x2b, 0x73, 0xee, 0xbc, 0xad, 0xa6, 0x6c, 0x22, + 0xe1, 0xff, 0x0b, 0x0e, 0x3d, 0xa1, 0x1c, 0x68, 0x51, 0x02, 0x5e, 0x83, 0x2b, 0xab, 0x0f, 0x7a, + 0xc3, 0xf5, 0x44, 0xf1, 0xe7, 0x6c, 0x8d, 0x04, 0xf7, 0xee, 0x2d, 0xf9, 0x91, 0x83, 0x2b, 0x5b, + 0x60, 0x3a, 0xa6, 0xce, 0x59, 0x55, 0xf4, 0xd0, 0x07, 0x77, 0x20, 0x06, 0xfa, 0xf5, 0x4b, 0xc6, + 0xc2, 0x0d, 0x77, 0x3a, 0x5a, 0x82, 0xde, 0x99, 0x44, 0xaf, 0xd1, 0xd4, 0xe0, 0x0d, 0x93, 0xb1, + 0xbe, 0x64, 0x62, 0x38, 0x6b, 0x75, 0x28, 0x65, 0x4f, 0x26, 0x86, 0x53, 0x67, 0x6f, 0xe9, 0xfd, + 0x97, 0x1d, 0x4d, 0x3e, 0xbf, 0xdf, 0x98, 0x45, 0x6a, 0xb6, 0x5e, 0xb9, 0x61, 0xbd, 0x3c, 0xe7, + 0x10, 0x0c, 0x09, 0x97, 0x0f, 0x28, 0xfb, 0xeb, 0x83, 0xde, 0x06, 0xb8, 0x48, 0x41, 0x57, 0xf8, + 0x63, 0xbc, 0x21, 0xf7, 0xa8, 0xd2, 0x2f, 0x84, 0x3c, 0xc5, 0x62, 0x4d, 0x2e, 0xcc, 0x10, 0xf5, + 0x86, 0x6e, 0xb4, 0x04, 0xbd, 0xda, 0x54, 0x3c, 0xf5, 0xf9, 0x31, 0xed, 0xd2, 0x70, 0x72, 0xb2, + 0x2b, 0x39, 0x79, 0x4c, 0x1b, 0xec, 0xd7, 0x7b, 0xfa, 0x60, 0xec, 0x4e, 0xc9, 0x9c, 0x65, 0xc7, + 0xfa, 0x6f, 0x6a, 0xe6, 0x0b, 0x05, 0x65, 0x7f, 0x26, 0xe7, 0x41, 0x5f, 0x7a, 0x8f, 0x43, 0x8b, + 0x99, 0x65, 0xe4, 0x65, 0x34, 0xbf, 0xd9, 0x0c, 0x05, 0x5d, 0x04, 0x81, 0xbe, 0x30, 0x40, 0x7c, + 0x2e, 0x7b, 0x45, 0xcb, 0xc8, 0x83, 0x4c, 0xfc, 0xaa, 0xf6, 0x71, 0xbb, 0xd6, 0x3b, 0x94, 0x9c, + 0xea, 0xd2, 0x4f, 0x4c, 0xe8, 0xbd, 0xed, 0xef, 0x28, 0x7b, 0xa0, 0x46, 0xb9, 0x8c, 0x9b, 0xf2, + 0x9b, 0xd0, 0x42, 0x1c, 0xce, 0x3d, 0xc4, 0x46, 0x5a, 0x23, 0x20, 0xb1, 0x34, 0x1b, 0x2f, 0xc0, + 0x6d, 0xce, 0x71, 0xa4, 0x2e, 0xff, 0x12, 0x5a, 0x10, 0x09, 0x36, 0x29, 0x66, 0x70, 0x35, 0x08, + 0x4f, 0x8f, 0x21, 0xe2, 0xaa, 0x6c, 0x34, 0x18, 0x2c, 0x43, 0x69, 0xe9, 0x57, 0x1c, 0x5a, 0x80, + 0xa3, 0x18, 0xf0, 0x3f, 0x66, 0x9e, 0x4a, 0x6a, 0x56, 0xaa, 0xd2, 0x0a, 0xc1, 0xf8, 0x2d, 0x22, + 0x88, 0xc1, 0xe3, 0xd8, 0xac, 0x1c, 0x84, 0x07, 0x94, 0x75, 0xb6, 0x07, 0x94, 0x9a, 0x12, 0x55, + 0x5a, 0x25, 0x00, 0x44, 0x5c, 0x42, 0xea, 0xe2, 0x04, 0x43, 0xe4, 0x69, 0x05, 0x47, 0x87, 0xdc, + 0xbb, 0x57, 0xf1, 0x44, 0x58, 0x55, 0x3f, 0x01, 0x89, 0x2f, 0x43, 0x0b, 0xfd, 0x64, 0xb7, 0x7e, + 0x7e, 0x64, 0x26, 0xd1, 0x5b, 0xb6, 0x2d, 0xd8, 0x40, 0x7c, 0xda, 0x2a, 0x1c, 0xf5, 0x21, 0x65, + 0xaf, 0x12, 0x62, 0x21, 0xdb, 0x82, 0x75, 0x07, 0x14, 0x4f, 0x6b, 0x04, 0x47, 0x87, 0xc4, 0x18, + 0x4a, 0xa3, 0x65, 0x68, 0x09, 0x1b, 0x77, 0x84, 0xdf, 0x8c, 0x96, 0xb2, 0x71, 0x44, 0xec, 0x6f, + 0x38, 0x59, 0x45, 0xe2, 0x52, 0xc2, 0xc7, 0xe1, 0x00, 0x95, 0xae, 0x5a, 0x39, 0xab, 0x9c, 0xdf, + 0x60, 0x0b, 0xd1, 0x05, 0x71, 0xb4, 0xf1, 0xfb, 0x20, 0xcf, 0x36, 0xb4, 0x45, 0xe9, 0xfa, 0x30, + 0xd7, 0xea, 0x08, 0xe7, 0x57, 0x66, 0xd4, 0x07, 0x3f, 0x63, 0x1b, 0xdb, 0x02, 0x75, 0x99, 0xc6, + 0x46, 0x8c, 0x5d, 0x51, 0x1c, 0x22, 0x3a, 0xd0, 0x52, 0x56, 0xb5, 0xe0, 0xa7, 0x41, 0x9e, 0x20, + 0xe8, 0x73, 0xd9, 0x5c, 0x11, 0x59, 0xbe, 0x73, 0x9c, 0xa7, 0xf7, 0x68, 0x9c, 0x27, 0x08, 0xe9, + 0xbc, 0x2a, 0xc7, 0xe3, 0xd3, 0x28, 0x25, 0x51, 0xc1, 0x48, 0x5c, 0xa7, 0xb5, 0xb9, 0xa8, 0xa1, + 0x24, 0x2b, 0xa8, 0xd3, 0xb9, 0x3c, 0x26, 0x7d, 0xe0, 0x06, 0x85, 0xcd, 0x6c, 0x73, 0x4c, 0xfa, + 0x3e, 0xc8, 0x32, 0xe9, 0x4b, 0xc6, 0xe2, 0x50, 0x45, 0x3f, 0x75, 0x9b, 0x3c, 0x3c, 0x82, 0x2a, + 0x81, 0x18, 0x72, 0x7c, 0x57, 0x53, 0xbf, 0xbf, 0x2b, 0xb0, 0xbb, 0x79, 0x81, 0xc9, 0xd1, 0xd7, + 0x05, 0xaa, 0xf4, 0xaf, 0x0a, 0xec, 0x8e, 0x5e, 0x5f, 0x15, 0x64, 0x59, 0x8b, 0x12, 0xc7, 0xaf, + 0x8e, 0x49, 0x4a, 0xdd, 0x63, 0x7d, 0x00, 0xa3, 0x55, 0xee, 0x45, 0x3b, 0xb4, 0x3b, 0x5f, 0x50, + 0xf3, 0x4f, 0x83, 0xf8, 0x2a, 0x07, 0x22, 0xcf, 0xcd, 0x24, 0x7a, 0x95, 0x03, 0x91, 0xe7, 0x67, + 0x12, 0xbd, 0x07, 0xf6, 0x86, 0x1d, 0xac, 0xf3, 0x1b, 0xe8, 0x41, 0x89, 0xdf, 0xdd, 0x8d, 0xc3, + 0x40, 0x7a, 0x01, 0xa9, 0xd6, 0x75, 0x3b, 0x39, 0x35, 0xc4, 0x56, 0xd6, 0xbb, 0x87, 0xf4, 0x91, + 0xcf, 0x58, 0xec, 0x6c, 0x5b, 0x22, 0xe5, 0x50, 0x6b, 0xd5, 0x58, 0xdc, 0xe8, 0xd3, 0x51, 0x16, + 0xf1, 0xfb, 0x02, 0xad, 0x07, 0x08, 0x06, 0x6a, 0x98, 0xda, 0x3d, 0x78, 0x60, 0x6f, 0xb8, 0x9c, + 0x7a, 0xc4, 0xdd, 0x8b, 0x76, 0xe8, 0xa7, 0x2e, 0x5a, 0x9f, 0x6a, 0xf4, 0xd4, 0x63, 0xb0, 0x93, + 0xe7, 0x4e, 0x59, 0xee, 0x8a, 0x38, 0x93, 0x51, 0x32, 0x36, 0xa5, 0x8f, 0xc4, 0xf5, 0xeb, 0xd4, + 0x98, 0xa7, 0x2f, 0x75, 0xe2, 0x82, 0x7e, 0xb2, 0xfb, 0x5e, 0xb4, 0x83, 0x2e, 0x0a, 0x5e, 0x0e, + 0xbb, 0x6f, 0xdc, 0x95, 0x79, 0x08, 0xb5, 0x86, 0x95, 0x50, 0x03, 0x8e, 0x5d, 0x4b, 0xac, 0xa7, + 0xba, 0xe6, 0xa9, 0x52, 0xfb, 0x3c, 0x81, 0x29, 0x10, 0xff, 0xb6, 0x80, 0x30, 0x1f, 0xf0, 0xe6, + 0x3d, 0xd8, 0x9f, 0x9a, 0x1e, 0x4f, 0x77, 0x0e, 0xeb, 0x23, 0xd7, 0x2a, 0x1c, 0xf0, 0x20, 0x0a, + 0x96, 0x04, 0xa9, 0xe1, 0x4e, 0x62, 0x86, 0x8b, 0x0b, 0xd7, 0x39, 0x9a, 0x5e, 0x0e, 0x83, 0xd6, + 0x03, 0xb6, 0x12, 0xbe, 0x29, 0xae, 0xa6, 0x47, 0x7b, 0xad, 0x70, 0x59, 0x77, 0xcf, 0xa5, 0x27, + 0xda, 0xa1, 0x3a, 0x04, 0x45, 0xc8, 0x1c, 0xe9, 0xd3, 0xba, 0x2e, 0x6b, 0x6a, 0x2f, 0x08, 0x0a, + 0x99, 0xe8, 0x54, 0xfa, 0xab, 0xe3, 0x60, 0x50, 0xa5, 0x9f, 0x1f, 0x49, 0x5f, 0x69, 0xd7, 0x6f, + 0x76, 0x90, 0x77, 0x7b, 0xb0, 0xf2, 0x1d, 0x19, 0x83, 0x94, 0xe9, 0xf4, 0x08, 0x68, 0xe3, 0xbd, + 0x7a, 0xf7, 0x20, 0xdc, 0x4a, 0xda, 0xc0, 0x84, 0x76, 0xf4, 0xa2, 0xd6, 0x75, 0x39, 0x7d, 0xe3, + 0x90, 0x16, 0xbf, 0x62, 0xe0, 0xef, 0xea, 0xd3, 0x06, 0xbb, 0x1d, 0xad, 0x01, 0xe2, 0xde, 0x6b, + 0xdc, 0x9a, 0x0e, 0x6d, 0xa0, 0x43, 0x3f, 0x79, 0x03, 0x18, 0x83, 0x0a, 0x87, 0x36, 0x32, 0xe6, + 0xb0, 0xbe, 0xde, 0xa1, 0x8f, 0x44, 0xb1, 0x48, 0x98, 0x8d, 0xbe, 0xc2, 0x01, 0x5e, 0x80, 0x8e, + 0xa6, 0xd6, 0x3d, 0x8a, 0x27, 0xe2, 0x77, 0xb4, 0x06, 0x3c, 0xc1, 0x90, 0x37, 0x18, 0x70, 0x18, + 0x74, 0xce, 0x20, 0x57, 0x8e, 0xca, 0x4a, 0x5c, 0x86, 0x4d, 0x12, 0x5e, 0xab, 0x0a, 0x05, 0x83, + 0x91, 0xaa, 0x75, 0x06, 0xa4, 0x0a, 0x40, 0x0e, 0xed, 0xf8, 0x74, 0x72, 0xca, 0x60, 0x48, 0xc8, + 0xcc, 0x32, 0x43, 0x95, 0x99, 0x05, 0xe0, 0xef, 0x72, 0xa8, 0xb8, 0x35, 0xd0, 0x60, 0x8d, 0x98, + 0x24, 0x3a, 0x21, 0xfc, 0xa4, 0xbd, 0x4c, 0xec, 0xe0, 0x88, 0x19, 0x15, 0x46, 0x47, 0x75, 0xb7, + 0x66, 0x4c, 0xfc, 0x8e, 0x64, 0xac, 0x1f, 0xfa, 0xa0, 0x1c, 0xa0, 0x16, 0x4d, 0xac, 0x4f, 0x8f, + 0x8e, 0xa5, 0x2e, 0xc5, 0xb3, 0x8b, 0xcf, 0x9d, 0x27, 0x05, 0x38, 0x3c, 0xbe, 0x55, 0x56, 0x46, + 0xc6, 0x6a, 0x4a, 0xea, 0xda, 0xc0, 0x04, 0xa8, 0xfc, 0x60, 0x2a, 0xcb, 0x65, 0xfb, 0x98, 0xf8, + 0x2f, 0x0b, 0x72, 0x4d, 0xc6, 0xee, 0x63, 0x30, 0xfe, 0x77, 0x9c, 0x2a, 0xfd, 0xef, 0x1c, 0x6b, + 0x39, 0x76, 0x8f, 0x7b, 0x28, 0xd3, 0xb1, 0x75, 0x0e, 0xed, 0xd2, 0xb0, 0x71, 0x70, 0xec, 0xc4, + 0xc2, 0x6c, 0x3a, 0x6c, 0x50, 0xcf, 0xa9, 0x38, 0xfd, 0x84, 0xf4, 0xc4, 0x9d, 0xd4, 0xe8, 0xb8, + 0xb1, 0x23, 0x71, 0x6b, 0xe7, 0xae, 0xad, 0x78, 0x47, 0xe2, 0x9d, 0x91, 0xb8, 0x98, 0x89, 0xaa, + 0xc9, 0xf8, 0x61, 0x28, 0x82, 0x68, 0x1d, 0xb6, 0x33, 0x08, 0x7a, 0xcc, 0x89, 0xcb, 0xa4, 0x7e, + 0x6c, 0xca, 0xd8, 0xa9, 0xa7, 0x27, 0x32, 0x6a, 0xb7, 0x36, 0x31, 0x49, 0xfd, 0x20, 0x92, 0xf1, + 0xab, 0xfa, 0x48, 0x5c, 0x3b, 0x33, 0x96, 0x8c, 0x9d, 0x20, 0xe3, 0xbd, 0x34, 0x6c, 0xd1, 0x8b, + 0x91, 0xb8, 0x7e, 0x66, 0x82, 0x35, 0x78, 0xeb, 0x29, 0x40, 0x45, 0x38, 0xa8, 0xbe, 0x14, 0x6a, + 0x0c, 0x97, 0x2c, 0xc6, 0xb3, 0xf6, 0xd3, 0x39, 0xaf, 0xa1, 0x3a, 0xb3, 0x36, 0xdc, 0x44, 0xd3, + 0x9c, 0x2a, 0x4d, 0x72, 0x82, 0x85, 0x44, 0xfc, 0x9c, 0x23, 0x66, 0xb8, 0x83, 0x9d, 0xc0, 0x7e, + 0x53, 0x1d, 0x2a, 0x0c, 0xdd, 0x58, 0x74, 0x33, 0x6c, 0x6e, 0x6a, 0xb8, 0xb3, 0x49, 0x39, 0x98, + 0x8c, 0xc5, 0x8d, 0x3d, 0xeb, 0x57, 0x22, 0x98, 0xe7, 0x48, 0xc6, 0xe2, 0x56, 0xdb, 0xbb, 0x67, + 0x53, 0x63, 0xc4, 0x7e, 0x89, 0x36, 0x37, 0x63, 0x99, 0xe0, 0x89, 0x98, 0x3c, 0x96, 0x39, 0x75, + 0x0b, 0x0e, 0xd6, 0xab, 0x54, 0xdc, 0x37, 0x2e, 0xac, 0x2b, 0x1d, 0x9b, 0x01, 0x69, 0xb5, 0xc3, + 0x38, 0x17, 0x95, 0x5e, 0x5f, 0xe8, 0xb5, 0xaa, 0x36, 0x77, 0xa8, 0xca, 0xef, 0xdb, 0x53, 0x45, + 0xfa, 0x7b, 0x55, 0xb6, 0x06, 0xce, 0xff, 0x97, 0x1c, 0xe2, 0x5b, 0x42, 0x4a, 0x43, 0xc4, 0x1d, + 0x8a, 0xec, 0xb4, 0x88, 0x16, 0x58, 0xde, 0x9d, 0xe7, 0x54, 0x69, 0x98, 0x13, 0xf2, 0x54, 0x10, + 0x0f, 0x71, 0x36, 0xe2, 0xd5, 0xd3, 0x97, 0x43, 0xbc, 0x1c, 0xb3, 0x50, 0x2f, 0x6c, 0x20, 0x4e, + 0x4e, 0x3d, 0xb4, 0x36, 0xb8, 0xdd, 0x9e, 0x3e, 0x4a, 0xc3, 0xf4, 0x2f, 0xc7, 0xf4, 0xce, 0x01, + 0x60, 0x48, 0xb5, 0x81, 0xcf, 0xb4, 0x89, 0xc9, 0x5c, 0xbf, 0x60, 0x20, 0xc4, 0x72, 0x9e, 0x91, + 0x19, 0xab, 0xbb, 0x62, 0x8f, 0x07, 0x8c, 0x19, 0xb6, 0xb7, 0x46, 0x24, 0xaf, 0x37, 0x18, 0x08, + 0x13, 0x0f, 0xa0, 0x9c, 0x14, 0x02, 0x92, 0x07, 0x87, 0xb2, 0xfc, 0x27, 0x9c, 0x2a, 0x7d, 0xc5, + 0x09, 0xb9, 0xed, 0xc4, 0x31, 0x2e, 0x19, 0x3b, 0xaa, 0x9f, 0xbf, 0x6d, 0xed, 0x67, 0x4c, 0x16, + 0x6b, 0x9c, 0x0d, 0xda, 0xe1, 0xae, 0xd4, 0xf4, 0x38, 0x64, 0x93, 0xd0, 0xc6, 0x7b, 0xd2, 0x9f, + 0x76, 0x01, 0x13, 0x44, 0x1c, 0x2a, 0x12, 0xc3, 0xa9, 0x5b, 0x9f, 0x68, 0x89, 0x93, 0x60, 0x52, + 0x0e, 0x87, 0x89, 0xe5, 0x83, 0x09, 0x79, 0x9d, 0x98, 0xd4, 0x27, 0x4e, 0x18, 0xe7, 0x7f, 0xf4, + 0xb2, 0xd6, 0x65, 0x60, 0x80, 0x7e, 0xad, 0x30, 0x26, 0xf0, 0x4e, 0x87, 0x15, 0x0e, 0x74, 0xda, + 0x40, 0x3c, 0x00, 0x0c, 0xe9, 0x1b, 0x87, 0x52, 0x27, 0xc6, 0xee, 0x45, 0x3b, 0xe4, 0xdc, 0xd1, + 0xf3, 0x87, 0x0b, 0xd0, 0x72, 0x13, 0xea, 0x0a, 0x90, 0xa9, 0x58, 0x3a, 0xe7, 0x54, 0xfc, 0x63, + 0x4e, 0x95, 0xa6, 0x39, 0x21, 0xa7, 0x19, 0x9e, 0x89, 0x63, 0x3f, 0x8c, 0x99, 0xc8, 0x19, 0x3c, + 0x7f, 0xbc, 0x00, 0x3d, 0x12, 0x26, 0x73, 0x03, 0x87, 0x19, 0xe6, 0x62, 0xd9, 0x9c, 0x73, 0xf1, + 0x9f, 0x73, 0xaa, 0xf4, 0x4f, 0x38, 0x21, 0x5f, 0x4b, 0xf1, 0xb3, 0xec, 0x8d, 0x01, 0xbb, 0x9c, + 0x4d, 0xfb, 0x01, 0xf4, 0x8d, 0xd2, 0x31, 0x36, 0xcf, 0x47, 0x32, 0x16, 0x07, 0xe3, 0xcf, 0x64, + 0xbc, 0x57, 0x1f, 0x9a, 0xac, 0x02, 0xeb, 0xb7, 0x2a, 0x88, 0xf4, 0xa2, 0x9d, 0x3c, 0x4c, 0x10, + 0xe0, 0x13, 0x3e, 0xdb, 0x54, 0x80, 0x52, 0x0a, 0x26, 0x24, 0x77, 0x1e, 0x92, 0xb1, 0x7e, 0x58, + 0x0b, 0x63, 0x42, 0xf2, 0x7d, 0x01, 0xdf, 0x5d, 0x80, 0xf8, 0x30, 0xcc, 0x12, 0x3b, 0x25, 0xcb, + 0xe7, 0x9c, 0x12, 0xf2, 0x76, 0x95, 0xa7, 0xa1, 0x78, 0x29, 0x7b, 0x83, 0xfc, 0xc3, 0x9c, 0x8b, + 0x3c, 0x43, 0xe7, 0x9f, 0xa3, 0xf1, 0x59, 0x57, 0x58, 0xd1, 0x48, 0xcc, 0xf8, 0xac, 0x36, 0x81, + 0x6b, 0x7b, 0x43, 0xbe, 0x60, 0xab, 0x8f, 0xcc, 0x1a, 0x6c, 0x75, 0xe5, 0x5c, 0xc1, 0x56, 0x57, + 0xdd, 0x27, 0xd8, 0xea, 0xea, 0x9c, 0x60, 0xab, 0x2f, 0xa1, 0xf9, 0x5e, 0x25, 0x0c, 0x4f, 0x3c, + 0x45, 0x66, 0x16, 0x4e, 0x25, 0xec, 0x11, 0x4b, 0xe8, 0x20, 0xf5, 0x73, 0x77, 0x21, 0xad, 0x02, + 0x4d, 0x95, 0xa4, 0x84, 0x3d, 0x7c, 0x2b, 0x5a, 0x14, 0x6a, 0x0d, 0x44, 0x0c, 0xac, 0x25, 0xf9, + 0xf5, 0x3f, 0x72, 0x2b, 0x7e, 0x8c, 0xc0, 0x2a, 0x27, 0xac, 0x2a, 0x30, 0x1b, 0x88, 0xeb, 0x69, + 0x80, 0xc2, 0x6c, 0xa7, 0xa4, 0x81, 0x09, 0xfa, 0x37, 0xc4, 0xa1, 0x31, 0x13, 0x44, 0x91, 0xa6, + 0xfc, 0x21, 0x8e, 0x2a, 0xba, 0x1e, 0xbb, 0xaf, 0xa2, 0x0b, 0x1b, 0x5c, 0x98, 0x8a, 0xae, 0x9a, + 0xac, 0x4e, 0x93, 0xb1, 0xa3, 0xb0, 0xbd, 0x8c, 0x7e, 0x71, 0x3a, 0x0d, 0x33, 0x10, 0xce, 0xb0, + 0x76, 0x74, 0x34, 0x19, 0x3b, 0x36, 0x87, 0xf2, 0xeb, 0x20, 0x5a, 0x4e, 0x16, 0xbd, 0x3e, 0xa4, + 0x90, 0x1b, 0x6e, 0x0d, 0x9e, 0xc1, 0xad, 0xaa, 0xf4, 0x96, 0x90, 0x53, 0x28, 0xbe, 0xc8, 0x9a, + 0xc6, 0xe5, 0xbb, 0xdc, 0xf2, 0xdf, 0x6d, 0x72, 0x0e, 0x26, 0xfe, 0xcf, 0xd1, 0x0a, 0x13, 0x16, + 0x0c, 0x47, 0x48, 0xdf, 0x8f, 0x5b, 0x41, 0x80, 0x73, 0x4b, 0xb3, 0x3a, 0x7f, 0x60, 0xb1, 0x40, + 0xce, 0x45, 0xc5, 0x1f, 0x44, 0x8b, 0xdd, 0x81, 0x40, 0x30, 0x82, 0xb5, 0xdd, 0xe1, 0x92, 0x27, + 0x30, 0xab, 0x53, 0x39, 0x27, 0xab, 0x23, 0x59, 0xf5, 0x81, 0xd9, 0x29, 0x53, 0xa5, 0x1f, 0x09, + 0x2c, 0x1a, 0x71, 0x35, 0x0c, 0xcd, 0x02, 0x11, 0x9b, 0x7e, 0xb6, 0x12, 0xff, 0x3e, 0x5a, 0xda, + 0xec, 0x3e, 0x80, 0x35, 0x67, 0x4a, 0xc8, 0xe8, 0x81, 0xbc, 0x7c, 0xe0, 0x20, 0xfa, 0x59, 0x45, + 0xe2, 0x5a, 0x7d, 0x62, 0x20, 0x19, 0xfb, 0xcc, 0x32, 0x98, 0xc1, 0x86, 0x7a, 0xf5, 0x41, 0xaf, + 0x99, 0xeb, 0xcf, 0x5e, 0x9f, 0xf7, 0xa3, 0xa5, 0xe1, 0x26, 0x5f, 0x0b, 0xd8, 0x13, 0xb9, 0x02, + 0xbe, 0x08, 0x7e, 0xa0, 0x28, 0x84, 0xd4, 0x50, 0x59, 0x45, 0x62, 0x15, 0x09, 0x92, 0x72, 0xe7, + 0xcb, 0xf4, 0xdd, 0x23, 0xc4, 0x12, 0x0e, 0x8b, 0x88, 0xf4, 0x16, 0x31, 0xa5, 0x5c, 0x28, 0x94, + 0xb3, 0x10, 0xf0, 0x9f, 0x70, 0xe8, 0x71, 0xb7, 0xdf, 0x1f, 0xdc, 0xdf, 0x60, 0xc0, 0x09, 0x25, + 0x7d, 0x67, 0x9f, 0x12, 0xd8, 0xe8, 0xf6, 0xf9, 0x15, 0x2f, 0x7e, 0x31, 0x28, 0x84, 0x57, 0xcd, + 0xb9, 0xea, 0x89, 0xaf, 0x93, 0x97, 0x30, 0x33, 0x20, 0x1c, 0x6b, 0x8b, 0x49, 0x46, 0x87, 0x93, + 0x01, 0x31, 0x42, 0x37, 0x5b, 0x28, 0xcf, 0x85, 0x9c, 0xff, 0x98, 0x43, 0x6b, 0xec, 0xe5, 0xae, + 0x00, 0x33, 0x46, 0x07, 0x1e, 0x23, 0x31, 0x62, 0xb4, 0xcf, 0xcf, 0xeb, 0xec, 0x5b, 0xd2, 0xb7, + 0x18, 0xd6, 0x1c, 0xdd, 0x7e, 0x97, 0x58, 0xa5, 0x3f, 0x43, 0x4b, 0xed, 0x6c, 0xf7, 0x43, 0xb5, + 0x7e, 0x1d, 0x2d, 0xcf, 0xde, 0xc9, 0x0f, 0x15, 0xb5, 0xf4, 0x03, 0x55, 0x7a, 0x0f, 0xfd, 0x42, + 0xb0, 0xe9, 0xe9, 0x4c, 0xd3, 0x76, 0xb8, 0x09, 0x2a, 0x1c, 0x20, 0x8f, 0x90, 0xcc, 0x1a, 0x13, + 0x93, 0x96, 0x85, 0x0f, 0x1b, 0x18, 0x2c, 0x35, 0xdc, 0x99, 0x89, 0x0e, 0xa7, 0x4e, 0x8c, 0x41, + 0x16, 0x03, 0x38, 0x2a, 0xa5, 0xa3, 0x0b, 0x10, 0xb2, 0x28, 0x1f, 0xbf, 0x8f, 0x10, 0xa8, 0xed, + 0xad, 0x11, 0x02, 0x35, 0x55, 0x80, 0x38, 0x68, 0x6c, 0x4e, 0xa1, 0xf8, 0x23, 0xa7, 0x13, 0x28, + 0x9d, 0xab, 0xb6, 0xc2, 0x29, 0xb1, 0xac, 0x38, 0x4b, 0x06, 0xe5, 0x9c, 0x86, 0xbc, 0x42, 0x5e, + 0x9a, 0x5d, 0x01, 0xda, 0x51, 0x81, 0x95, 0x38, 0x35, 0xbb, 0x2c, 0xab, 0x1f, 0x96, 0x30, 0xd9, + 0xfa, 0xc9, 0x6e, 0xc7, 0x07, 0x51, 0xb1, 0xd9, 0x75, 0x8d, 0xef, 0x23, 0xaa, 0x55, 0xc4, 0x1e, + 0x9a, 0xf6, 0x12, 0xf1, 0x05, 0x76, 0xf4, 0x4e, 0xa7, 0x95, 0xc2, 0x98, 0x9c, 0xc9, 0xd3, 0x13, + 0xa6, 0x91, 0x2d, 0x8e, 0xfc, 0x4d, 0x8a, 0x65, 0x3b, 0x16, 0xde, 0x8f, 0x2d, 0x0d, 0x8c, 0x31, + 0x40, 0x7f, 0xf3, 0xad, 0xd0, 0xd2, 0xb6, 0x02, 0xf1, 0x05, 0xf6, 0x23, 0x1e, 0xbc, 0x3b, 0x1b, + 0x12, 0x3e, 0x44, 0x38, 0x27, 0x3a, 0xb3, 0xd8, 0xa0, 0x1c, 0xe2, 0x28, 0xd5, 0xa8, 0xd2, 0x1b, + 0x42, 0x9e, 0x62, 0xb1, 0xdc, 0x9c, 0x4b, 0xd0, 0xbd, 0xce, 0xb5, 0x6e, 0x79, 0x9a, 0xf3, 0x41, + 0x7a, 0x93, 0x30, 0x5d, 0x82, 0xbe, 0x51, 0x52, 0xa5, 0xd7, 0x85, 0xdc, 0xd2, 0x3c, 0x3d, 0xce, + 0xba, 0x82, 0xb9, 0xad, 0x4b, 0x27, 0x38, 0xb4, 0x98, 0x61, 0x0a, 0x78, 0x19, 0x2d, 0xf7, 0x04, + 0x03, 0x11, 0xb7, 0x2f, 0xa0, 0x84, 0x64, 0xc2, 0x4b, 0xc0, 0x26, 0xfd, 0xb1, 0x2a, 0x3d, 0x23, + 0xe4, 0x14, 0x8a, 0xcb, 0xc0, 0x69, 0x99, 0xb2, 0x08, 0x72, 0x4e, 0x15, 0x7e, 0x0b, 0x5a, 0x4a, + 0x58, 0x85, 0x5d, 0x4a, 0x28, 0x6c, 0x25, 0x13, 0x7e, 0x56, 0x95, 0x9e, 0x16, 0xb2, 0x8a, 0xc4, + 0x65, 0x59, 0xcc, 0x86, 0x9c, 0x55, 0xa1, 0xf4, 0x5f, 0xac, 0x45, 0x8f, 0x41, 0xea, 0x13, 0xf6, + 0xd8, 0x9a, 0x89, 0x3a, 0xf7, 0xb2, 0x5a, 0x6e, 0xce, 0xdc, 0x1f, 0x02, 0xab, 0xe5, 0x7e, 0xd2, + 0xc6, 0x45, 0xd9, 0x43, 0xd5, 0xbb, 0x6a, 0xbf, 0xa9, 0x29, 0x09, 0xad, 0x5e, 0xce, 0x95, 0x44, + 0x97, 0xe7, 0x66, 0x8f, 0x67, 0x34, 0xdc, 0x2f, 0xdb, 0x14, 0xf0, 0xcf, 0xe6, 0x53, 0xc0, 0x53, + 0x37, 0x60, 0x9c, 0x5d, 0x76, 0x39, 0x47, 0xf4, 0xf0, 0x26, 0x77, 0x37, 0xef, 0x61, 0xb9, 0xbb, + 0x83, 0x59, 0x4a, 0xf5, 0x17, 0xf2, 0xe4, 0x02, 0xcc, 0x3f, 0x2b, 0x7f, 0xd2, 0xb0, 0xff, 0x49, + 0xc3, 0xfe, 0x83, 0xd3, 0xb0, 0xff, 0x3f, 0x5c, 0x1e, 0x0d, 0xfb, 0xff, 0xc4, 0xa9, 0xd2, 0x7f, + 0xcf, 0xd9, 0x34, 0xec, 0x7f, 0x69, 0x93, 0xd1, 0x1f, 0x98, 0x95, 0x9e, 0x49, 0xf4, 0xfe, 0x43, + 0x53, 0xb1, 0xff, 0x49, 0x6f, 0xfd, 0x27, 0xbd, 0x35, 0x3f, 0x94, 0x47, 0x6f, 0xfd, 0xf2, 0x83, + 0x53, 0xfa, 0xff, 0x78, 0x95, 0xd8, 0xff, 0x7a, 0x2e, 0x25, 0xf6, 0x45, 0x4e, 0x95, 0x46, 0xf2, + 0x2b, 0xb1, 0xbb, 0xec, 0xf4, 0x81, 0x91, 0xf3, 0x67, 0x12, 0xbd, 0x73, 0x69, 0xb1, 0x8d, 0x4f, + 0xf9, 0x7b, 0x56, 0x63, 0xcf, 0xa6, 0xb1, 0x2c, 0xfe, 0x93, 0xc6, 0x32, 0x5b, 0x63, 0xb9, 0xf4, + 0xff, 0xd7, 0x1a, 0xcb, 0x65, 0x0f, 0xae, 0xb1, 0x7c, 0xc7, 0xd2, 0x58, 0xae, 0x30, 0x7d, 0x98, + 0x9f, 0xb2, 0xfc, 0x30, 0x56, 0x42, 0x22, 0xd6, 0x5b, 0x57, 0xb4, 0x81, 0x3b, 0xd4, 0x19, 0x03, + 0x98, 0xde, 0x82, 0x92, 0x68, 0x61, 0x2e, 0xd3, 0x4b, 0x15, 0x9e, 0x9f, 0x71, 0x96, 0x7a, 0x91, + 0xbf, 0xbf, 0x7a, 0x11, 0x73, 0x6f, 0x54, 0xbd, 0xa8, 0x3c, 0xac, 0x7a, 0xb1, 0xc2, 0x01, 0x01, + 0xa9, 0x20, 0x6e, 0x90, 0x71, 0xe3, 0x82, 0xbc, 0x4d, 0xdb, 0xa9, 0xbd, 0x66, 0x75, 0x26, 0x4d, + 0x14, 0xd5, 0x49, 0x7e, 0x69, 0xe9, 0x24, 0x1f, 0xb9, 0xaf, 0x4e, 0x12, 0x47, 0x68, 0x31, 0x75, + 0x92, 0x21, 0x46, 0x1a, 0x76, 0x7c, 0x77, 0xfd, 0x24, 0x04, 0x75, 0x01, 0xa3, 0x55, 0xad, 0xfb, + 0x0c, 0xe5, 0x03, 0x6d, 0x82, 0x99, 0xa9, 0xc3, 0x3c, 0xc5, 0xa1, 0xe5, 0x0d, 0xd9, 0x4a, 0xcc, + 0x95, 0x24, 0xa9, 0x51, 0x63, 0x30, 0xd8, 0xe8, 0x57, 0xd6, 0xb5, 0x84, 0x82, 0x91, 0xe0, 0x9e, + 0xd6, 0xbd, 0xeb, 0x1a, 0x22, 0x21, 0x5f, 0xa0, 0x11, 0xdb, 0x34, 0x3d, 0x98, 0x8a, 0xf3, 0xc1, + 0xb5, 0x8c, 0x39, 0x83, 0xe0, 0x87, 0x39, 0xb4, 0xa2, 0x21, 0x47, 0xc7, 0xb9, 0xea, 0x01, 0x86, + 0xf6, 0xbd, 0x6b, 0x40, 0x73, 0x86, 0xc1, 0xfb, 0xed, 0x1a, 0xd0, 0xd5, 0xf9, 0x43, 0x68, 0x6c, + 0x75, 0xb7, 0x34, 0x44, 0x42, 0xad, 0x9e, 0x08, 0x49, 0x1c, 0xca, 0x6a, 0x3b, 0x9f, 0x24, 0x7d, + 0xe0, 0x0b, 0x3a, 0x5b, 0xf3, 0x19, 0xb6, 0x29, 0x3d, 0xff, 0x68, 0xea, 0x2e, 0x33, 0xc9, 0xce, + 0xec, 0xd2, 0xaf, 0xc8, 0x93, 0x13, 0xcd, 0x08, 0x92, 0x5f, 0x73, 0x96, 0xd4, 0xfa, 0x35, 0x87, + 0x45, 0xd0, 0xaf, 0x39, 0xf3, 0x4c, 0x97, 0xde, 0x2e, 0x40, 0x6b, 0xf2, 0xa1, 0x0b, 0xb7, 0x04, + 0x03, 0x61, 0x85, 0x5f, 0x87, 0xe6, 0x7b, 0x4c, 0xdb, 0xc2, 0x62, 0x92, 0x09, 0xd2, 0x00, 0x18, + 0x52, 0xfa, 0x09, 0xed, 0xec, 0x79, 0x30, 0x52, 0x4e, 0x5d, 0x6c, 0x97, 0x31, 0x98, 0xaf, 0x46, + 0x8b, 0x9a, 0x89, 0x65, 0x33, 0x08, 0xc6, 0x38, 0x74, 0xbb, 0x09, 0x13, 0x79, 0xb6, 0x95, 0xf9, + 0x8a, 0x40, 0x0a, 0xf9, 0x0d, 0x68, 0x61, 0xe8, 0xff, 0x63, 0xef, 0x4d, 0xa3, 0xa3, 0xb8, 0xd6, + 0x04, 0xc1, 0x17, 0xda, 0x10, 0x97, 0x3d, 0xd8, 0x64, 0xb0, 0x71, 0x5a, 0xcf, 0x8b, 0x14, 0x4f, + 0x62, 0x09, 0xfb, 0x79, 0x91, 0xd7, 0xd0, 0x02, 0x96, 0x0d, 0x42, 0x0e, 0x01, 0xcf, 0xcf, 0x7e, + 0x7e, 0x7e, 0x89, 0x32, 0xc0, 0x69, 0xa4, 0x4c, 0xbd, 0xcc, 0x14, 0x36, 0x7e, 0x4b, 0x25, 0x8b, + 0x40, 0x02, 0x09, 0x89, 0x30, 0xab, 0x2c, 0x0c, 0xd8, 0x6c, 0x5e, 0x84, 0xc0, 0x0b, 0x88, 0x94, + 0x64, 0xa6, 0xcf, 0x4c, 0x55, 0x57, 0x55, 0xcf, 0xd4, 0x74, 0xd1, 0x55, 0x3d, 0x55, 0xd3, 0xdd, + 0x35, 0x53, 0x45, 0x46, 0x66, 0x6a, 0x4e, 0x4d, 0xd3, 0x73, 0x7a, 0x7e, 0xf4, 0x70, 0xa6, 0x67, + 0xfa, 0xc4, 0xfd, 0x6e, 0xdc, 0xb8, 0xb1, 0x64, 0x4a, 0xec, 0x12, 0xc6, 0xc7, 0xe7, 0xa0, 0xbc, + 0x5b, 0xdc, 0xe5, 0xbb, 0xdf, 0xfd, 0xf6, 0x4f, 0x09, 0x37, 0x37, 0x44, 0x48, 0x64, 0x60, 0xec, + 0xb3, 0x4f, 0x8a, 0xc4, 0xc9, 0x46, 0x7a, 0xe6, 0x8f, 0x13, 0x9f, 0xf6, 0xc8, 0xa4, 0x94, 0xdf, + 0x84, 0xa6, 0x7d, 0xa0, 0xac, 0x7d, 0x97, 0x3d, 0xfb, 0x1c, 0xf7, 0x74, 0x8a, 0xbf, 0x50, 0xd6, + 0x32, 0x92, 0xc2, 0x35, 0x22, 0x24, 0xf9, 0xb3, 0xf7, 0x16, 0x0b, 0x00, 0x0c, 0x40, 0x28, 0x00, + 0x12, 0x81, 0xc4, 0xe1, 0xad, 0xc3, 0x87, 0xba, 0xe4, 0xa9, 0x1f, 0x58, 0x46, 0x28, 0xbc, 0xec, + 0x41, 0x0f, 0xac, 0xc6, 0x2a, 0x1b, 0x37, 0x29, 0xc4, 0xd3, 0x4e, 0x29, 0x04, 0xb6, 0x47, 0x64, + 0xa4, 0x10, 0xf9, 0x86, 0xc0, 0x81, 0x95, 0x2a, 0xac, 0x75, 0xd8, 0x08, 0xc2, 0x36, 0xe2, 0xd8, + 0xe0, 0x76, 0x1b, 0xc1, 0xc7, 0xac, 0xbf, 0xc1, 0x06, 0xdd, 0x24, 0xfd, 0x47, 0x32, 0x1d, 0xcc, + 0x4e, 0x6f, 0x3a, 0x68, 0x06, 0x30, 0xb3, 0x8a, 0x2c, 0x72, 0x6e, 0x5c, 0x64, 0x91, 0xeb, 0x2e, + 0xb2, 0x48, 0xbb, 0x85, 0xb7, 0x50, 0x64, 0x91, 0x77, 0x47, 0x44, 0x16, 0x13, 0xc6, 0xb0, 0xc8, + 0x22, 0xff, 0xbe, 0xc8, 0xe2, 0x8e, 0x88, 0x2c, 0x3a, 0xac, 0x46, 0x81, 0x10, 0x8a, 0xf9, 0x9f, + 0xb3, 0x54, 0x29, 0x95, 0x65, 0x11, 0x59, 0xfc, 0x7d, 0xd6, 0xf8, 0x12, 0x4c, 0x8c, 0x57, 0xdb, + 0xbf, 0xff, 0xe0, 0x90, 0xa1, 0xa0, 0x34, 0x04, 0xcb, 0xea, 0xea, 0x40, 0xe4, 0x49, 0x11, 0x08, + 0x96, 0xf1, 0x2a, 0x61, 0x99, 0x74, 0x5f, 0xc2, 0x72, 0x03, 0x12, 0x96, 0xc9, 0xee, 0x12, 0x96, + 0xf4, 0x0f, 0xd3, 0xbd, 0x2b, 0x61, 0xf9, 0xde, 0x5d, 0xc2, 0x02, 0x39, 0xa3, 0x48, 0x9e, 0x36, + 0x37, 0x09, 0xcb, 0xfb, 0x63, 0x54, 0x8a, 0x32, 0xf5, 0xbe, 0x14, 0xc5, 0x2e, 0x45, 0x99, 0xf6, + 0xa3, 0x96, 0xa2, 0x4c, 0x1f, 0xbd, 0x14, 0xe5, 0x75, 0x7b, 0x3c, 0x89, 0x25, 0xaa, 0x34, 0xcb, + 0x8c, 0x27, 0x31, 0x91, 0x46, 0x92, 0xb8, 0x56, 0x3e, 0x37, 0x34, 0x1b, 0x44, 0x27, 0x53, 0x19, + 0xd1, 0x09, 0x96, 0x9c, 0x18, 0x06, 0x61, 0xac, 0xe4, 0x64, 0xe6, 0x38, 0x92, 0x9c, 0xcc, 0x1a, + 0xe7, 0x92, 0x93, 0xd9, 0x63, 0x57, 0x72, 0x32, 0x67, 0x4c, 0x4a, 0x4e, 0xe6, 0xde, 0xa3, 0x92, + 0x93, 0xe3, 0x9c, 0x2a, 0x1d, 0xe5, 0xd0, 0x61, 0x4e, 0x20, 0x4c, 0x3b, 0x24, 0x16, 0xae, 0xc7, + 0x11, 0x9d, 0x0c, 0xe1, 0xc9, 0x2f, 0xe1, 0x4e, 0x33, 0xf2, 0xd1, 0x54, 0xdf, 0x85, 0xc4, 0xb9, + 0x2d, 0x38, 0x50, 0x34, 0xb1, 0x86, 0xd2, 0x9b, 0xec, 0xbd, 0x08, 0xb5, 0x14, 0x4a, 0x87, 0x0f, + 0x7e, 0x93, 0xe8, 0xfd, 0x4c, 0xeb, 0xbb, 0xa8, 0xf5, 0x1e, 0x1c, 0xde, 0xd1, 0x49, 0x00, 0x3b, + 0x76, 0x2a, 0xb9, 0xf7, 0x88, 0x36, 0x74, 0x4e, 0xfb, 0xb8, 0xc3, 0x2a, 0x83, 0xb1, 0x31, 0xe4, + 0x97, 0x39, 0x03, 0x4f, 0x60, 0x69, 0x8c, 0x1b, 0xe1, 0x71, 0x5f, 0x1a, 0x33, 0x82, 0x34, 0xe6, + 0xf3, 0x2c, 0xf4, 0x00, 0x44, 0x66, 0x70, 0x93, 0xc6, 0xac, 0x74, 0x4a, 0x63, 0x96, 0xa8, 0xd2, + 0x42, 0x56, 0x1a, 0xf3, 0x08, 0x0b, 0x10, 0x36, 0x9b, 0x10, 0x67, 0xe4, 0xa4, 0x3b, 0x20, 0xa6, + 0xa1, 0xc2, 0xbe, 0xb4, 0xcb, 0x12, 0x79, 0x88, 0x3c, 0xc5, 0x8e, 0x93, 0x11, 0xd0, 0x30, 0x78, + 0xb9, 0x0d, 0x77, 0x1f, 0xbc, 0x46, 0x00, 0xaf, 0xff, 0xcc, 0xa1, 0x39, 0xcb, 0x94, 0xc8, 0xad, + 0x94, 0xf4, 0xbd, 0x9e, 0x06, 0x84, 0x6e, 0xc4, 0x1b, 0xb8, 0x6c, 0x95, 0x2a, 0xbd, 0x81, 0x56, + 0x0a, 0x69, 0xe6, 0x28, 0x16, 0x24, 0x8e, 0x9c, 0x48, 0xf5, 0x7d, 0xc6, 0xca, 0xea, 0x52, 0x7d, + 0x27, 0x13, 0x5b, 0x5b, 0x32, 0x83, 0xcb, 0xdf, 0x66, 0xa3, 0xb9, 0x8e, 0x11, 0xc7, 0x07, 0xac, + 0xac, 0x44, 0x39, 0x3a, 0xbf, 0x47, 0x00, 0xe4, 0xc1, 0x4c, 0xb6, 0xd0, 0x44, 0x02, 0xaa, 0x37, + 0xb7, 0x4a, 0x40, 0x61, 0x8b, 0x64, 0x5c, 0xe3, 0x06, 0x7c, 0xb9, 0x77, 0x06, 0xf8, 0xca, 0x56, + 0xaa, 0xd2, 0x72, 0xf4, 0x9a, 0x90, 0xee, 0x28, 0xc4, 0x05, 0xe9, 0x4e, 0x17, 0x76, 0xe6, 0x32, + 0x87, 0x4f, 0xe0, 0x32, 0x67, 0xec, 0x67, 0xe1, 0xff, 0x94, 0x85, 0xe6, 0x2e, 0xf7, 0x87, 0xc7, + 0x2e, 0x38, 0x43, 0xba, 0x1b, 0x74, 0x82, 0x13, 0xd2, 0xcd, 0x53, 0xfc, 0xa3, 0xdb, 0xa2, 0xc9, + 0x63, 0x0d, 0x22, 0x2f, 0x88, 0xd1, 0x1e, 0x8f, 0x6d, 0xd7, 0x77, 0xf6, 0xe8, 0x0e, 0x08, 0x12, + 0x0c, 0x91, 0x3c, 0x20, 0x97, 0x35, 0x94, 0x13, 0xc1, 0x2b, 0x1e, 0xcd, 0xec, 0xdb, 0x72, 0x9a, + 0x92, 0x9d, 0xf1, 0xfe, 0x18, 0xd4, 0x6a, 0x2d, 0x38, 0x30, 0x0d, 0x6e, 0xcf, 0x5e, 0x9c, 0xc2, + 0x7f, 0x9b, 0x85, 0x0a, 0x9c, 0xf3, 0x1c, 0x6f, 0x17, 0x25, 0xfb, 0x86, 0x2f, 0x0a, 0xc4, 0xc7, + 0x87, 0x8b, 0x52, 0xf6, 0x9a, 0x2a, 0x2d, 0x43, 0x55, 0x42, 0xda, 0x0d, 0x71, 0x45, 0x46, 0x69, + 0x00, 0xf5, 0x6f, 0xa6, 0xa3, 0x09, 0xb5, 0xb0, 0xcd, 0xfc, 0xdb, 0x4e, 0xc0, 0x84, 0xe4, 0x08, + 0x26, 0x60, 0x96, 0x1a, 0x80, 0x59, 0x62, 0x04, 0x5e, 0x8f, 0x3d, 0x29, 0xc6, 0x87, 0x3a, 0x68, + 0x7e, 0x8d, 0x12, 0x4b, 0x52, 0x2d, 0x06, 0x7a, 0x6b, 0x2c, 0xc6, 0x9c, 0xf8, 0x15, 0x07, 0x95, + 0xc8, 0x22, 0x23, 0xd8, 0x41, 0x6f, 0x62, 0xff, 0x0e, 0x50, 0x89, 0xe8, 0xf4, 0x1e, 0x8d, 0xeb, + 0xbe, 0x75, 0x08, 0xe2, 0xc4, 0x3c, 0xfd, 0x14, 0x7c, 0x84, 0xe8, 0x4b, 0x42, 0x68, 0x92, 0x12, + 0x58, 0xdf, 0xe0, 0x0f, 0xbf, 0x57, 0x63, 0x6a, 0x5a, 0x6a, 0x55, 0x69, 0x85, 0xc0, 0x96, 0x8b, + 0x2f, 0xc1, 0xe8, 0xa9, 0x5d, 0xe7, 0x12, 0xfb, 0x77, 0xe8, 0x34, 0xfd, 0xf6, 0x43, 0xf4, 0x1b, + 0xda, 0xde, 0x3e, 0x08, 0x5a, 0xee, 0xfc, 0xd8, 0x93, 0x22, 0xf9, 0x18, 0x3b, 0x18, 0x1b, 0x7e, + 0x31, 0xc7, 0x2d, 0xfc, 0x22, 0x49, 0x10, 0xe3, 0x0c, 0xbf, 0xf8, 0xa2, 0xc9, 0xe9, 0xe6, 0x9a, + 0x77, 0x96, 0x72, 0xba, 0xb3, 0x59, 0x22, 0xc8, 0x25, 0x7e, 0xe2, 0x2f, 0xd1, 0x24, 0xb2, 0x91, + 0x38, 0x6c, 0x36, 0x04, 0xfd, 0xc5, 0x39, 0x0a, 0x72, 0x22, 0x9b, 0x9a, 0x14, 0xb1, 0x04, 0xfa, + 0xd3, 0xdc, 0xc0, 0x90, 0xe8, 0x7d, 0x49, 0x99, 0x0e, 0x15, 0xeb, 0x82, 0xa1, 0xc6, 0xab, 0x83, + 0xed, 0x62, 0xd9, 0xda, 0xe6, 0xb0, 0x3f, 0xa0, 0x84, 0xc3, 0x32, 0x3b, 0x16, 0xff, 0x21, 0x8e, + 0xc9, 0x5f, 0xfe, 0xba, 0xac, 0x84, 0x49, 0x74, 0x5d, 0x9c, 0x9b, 0x80, 0x16, 0x8a, 0x2b, 0x40, + 0xfa, 0x0a, 0xd2, 0x03, 0x08, 0x47, 0x01, 0x71, 0xda, 0x68, 0x80, 0xd8, 0xc4, 0xb9, 0xa3, 0x98, + 0x7c, 0x37, 0x6d, 0xf8, 0x69, 0xe0, 0x58, 0x48, 0x41, 0xc2, 0xc6, 0xb1, 0xa5, 0x03, 0xf3, 0x4b, + 0xd1, 0x24, 0x9f, 0x12, 0xc6, 0x2c, 0x92, 0x3f, 0x18, 0x20, 0xfa, 0x13, 0x6c, 0xae, 0xcc, 0x96, + 0x8b, 0x3c, 0x59, 0xdb, 0x19, 0x9c, 0xe0, 0x08, 0xab, 0xbf, 0x64, 0xb6, 0x01, 0xbf, 0x0a, 0x4d, + 0xf4, 0x87, 0x57, 0xae, 0x5b, 0xd7, 0xe0, 0x0f, 0x28, 0x24, 0xda, 0x2d, 0xce, 0xa5, 0x61, 0x96, + 0x8a, 0x8f, 0x13, 0xe4, 0x0f, 0x72, 0xe4, 0x0b, 0xdf, 0x24, 0x07, 0x3a, 0x93, 0x27, 0x07, 0x92, + 0xb1, 0x4b, 0xb6, 0xc9, 0x99, 0x5d, 0x78, 0x1f, 0xca, 0xd9, 0xe0, 0x0f, 0xf8, 0x48, 0xfa, 0x44, + 0x0c, 0x57, 0xb8, 0x40, 0xac, 0xa2, 0xe0, 0x4a, 0x04, 0x27, 0xd6, 0x4d, 0xdf, 0xf0, 0x6c, 0x78, + 0x51, 0xa3, 0x12, 0x0e, 0x86, 0x71, 0x86, 0x82, 0x2f, 0x13, 0x87, 0x4f, 0xa4, 0xfa, 0x4e, 0x90, + 0xdc, 0x7a, 0x9d, 0x7d, 0xa9, 0xad, 0x43, 0x90, 0x8d, 0x4f, 0xc6, 0x83, 0xf1, 0xcb, 0x11, 0x32, + 0x8e, 0xa5, 0xba, 0x92, 0x64, 0xf1, 0x87, 0xcc, 0xc7, 0x66, 0xb1, 0x38, 0x1f, 0x76, 0xbd, 0x62, + 0x45, 0x65, 0x79, 0xbc, 0xbf, 0xd7, 0x30, 0xa4, 0x37, 0x32, 0xa4, 0x9b, 0x0d, 0xf9, 0x28, 0x87, + 0x90, 0x4f, 0x69, 0x6a, 0x08, 0x6e, 0xc2, 0x60, 0x32, 0xd9, 0x8c, 0x11, 0xc8, 0x14, 0x8b, 0x2b, + 0x61, 0x04, 0x08, 0x04, 0x69, 0xce, 0xbe, 0x63, 0x5f, 0x72, 0xd7, 0xd7, 0x10, 0x71, 0x24, 0xf9, + 0xc9, 0x0f, 0xf1, 0x4b, 0x87, 0x93, 0xfb, 0x0e, 0x5d, 0x1d, 0x6c, 0x5f, 0x52, 0x96, 0x6c, 0xfb, + 0x22, 0xd9, 0xb5, 0x3d, 0xd1, 0x13, 0x83, 0x1e, 0x18, 0x96, 0xc0, 0x1e, 0x1d, 0x0a, 0x64, 0x66, + 0x70, 0xfe, 0x15, 0x94, 0xb3, 0x76, 0x7d, 0x75, 0x25, 0x91, 0x67, 0xe2, 0xa5, 0xe0, 0x02, 0xf1, + 0x91, 0x78, 0x6c, 0x57, 0xbc, 0xbf, 0xdb, 0x88, 0x72, 0x9a, 0x38, 0x7c, 0x22, 0x11, 0xeb, 0xd2, + 0x41, 0x85, 0xae, 0x4d, 0xc6, 0x0d, 0xf9, 0xd7, 0x50, 0xde, 0xda, 0xf5, 0xf8, 0x4a, 0x43, 0xf8, + 0x55, 0x51, 0x95, 0x16, 0x09, 0xa4, 0x48, 0x7c, 0x8c, 0x8e, 0x42, 0x2f, 0xb1, 0xdb, 0x48, 0xa4, + 0x39, 0x5f, 0x81, 0xf2, 0x7c, 0x4a, 0x53, 0x84, 0x86, 0x5e, 0x05, 0x45, 0x24, 0x14, 0x89, 0x0b, + 0x86, 0xb7, 0x9e, 0x1e, 0x3e, 0x70, 0x3a, 0xed, 0x74, 0x48, 0x3b, 0x7e, 0x05, 0xca, 0xd7, 0xff, + 0xc2, 0x53, 0x9a, 0x6e, 0x32, 0x36, 0xb4, 0x50, 0x2c, 0x84, 0x81, 0x32, 0xce, 0x88, 0xb6, 0xe6, + 0xab, 0x51, 0x7e, 0xbd, 0x12, 0x80, 0x80, 0xb0, 0x33, 0xcc, 0xa0, 0xfe, 0xb4, 0x50, 0x5c, 0x10, + 0xef, 0xef, 0xd5, 0x2e, 0x6d, 0x4d, 0x3b, 0x2f, 0xda, 0x92, 0xaf, 0x43, 0x08, 0xfe, 0xae, 0x31, + 0x73, 0x5a, 0x60, 0xaf, 0x30, 0xa6, 0x58, 0x2c, 0x84, 0xe1, 0x32, 0xce, 0x8e, 0x69, 0xcf, 0xbf, + 0x81, 0xf2, 0x71, 0xfa, 0x90, 0x90, 0x12, 0xc1, 0x72, 0xb4, 0x7c, 0x48, 0x93, 0x41, 0x0b, 0xc5, + 0xc7, 0x09, 0x42, 0xe8, 0x8f, 0xc5, 0x2f, 0x1d, 0xd6, 0xfa, 0xb6, 0xd3, 0xb8, 0x35, 0xb6, 0xa0, + 0xda, 0xb4, 0x07, 0xff, 0x25, 0x87, 0x26, 0xd5, 0x87, 0x14, 0x9f, 0x12, 0x88, 0xf8, 0xbd, 0x0d, + 0xe1, 0x82, 0x59, 0xee, 0xf1, 0x6a, 0xc8, 0x33, 0xb4, 0xb0, 0xc2, 0x6c, 0x0a, 0xe2, 0x7f, 0x1c, + 0xe5, 0x98, 0x1d, 0x41, 0x5c, 0x6e, 0x5c, 0xc2, 0x5d, 0xc9, 0x7d, 0x87, 0xb4, 0xde, 0x83, 0xc9, + 0xee, 0x6d, 0x90, 0x17, 0xc6, 0x08, 0xc0, 0xba, 0x8b, 0x04, 0x19, 0xeb, 0xde, 0x66, 0x76, 0xa3, + 0xb2, 0x04, 0xd0, 0x06, 0xe8, 0xad, 0x21, 0xa5, 0x11, 0x3b, 0x34, 0x5f, 0x86, 0x26, 0x62, 0xac, + 0x6d, 0xfa, 0x95, 0x96, 0x3f, 0xa8, 0x4a, 0x0f, 0x08, 0x66, 0xa9, 0x38, 0xd9, 0x12, 0x21, 0xd7, + 0xac, 0xe0, 0x5f, 0x74, 0x3a, 0x9d, 0xc2, 0x13, 0xc1, 0xc6, 0xb9, 0x9d, 0x9c, 0x2e, 0xc2, 0xed, + 0xbc, 0xb7, 0xd0, 0x74, 0xfb, 0xda, 0x5d, 0x24, 0x30, 0x8b, 0x59, 0x09, 0x8c, 0x8b, 0xe4, 0xd0, + 0x1c, 0x82, 0x95, 0xce, 0x34, 0xaa, 0xd2, 0xfb, 0xe8, 0x3d, 0xc1, 0x78, 0xeb, 0xc5, 0x77, 0xd8, + 0x27, 0x47, 0x07, 0x8b, 0x7d, 0xdf, 0xc5, 0x87, 0x3e, 0xd6, 0xfa, 0x2e, 0x0e, 0x0f, 0x75, 0xf9, + 0x94, 0x8d, 0xc1, 0x26, 0xa2, 0x8f, 0xbf, 0x12, 0xdd, 0x02, 0x2e, 0x85, 0x80, 0x35, 0x20, 0x23, + 0x17, 0xa8, 0x74, 0x69, 0x82, 0x34, 0x90, 0x14, 0x03, 0x69, 0x3d, 0xdc, 0xbd, 0x37, 0x79, 0x72, + 0xa0, 0x50, 0x9b, 0x86, 0x72, 0x56, 0x79, 0xc3, 0x1b, 0xf8, 0x37, 0x50, 0x5e, 0xc4, 0x1b, 0xde, + 0x40, 0x09, 0x8a, 0xe7, 0x54, 0xe9, 0x69, 0x81, 0x14, 0x89, 0x25, 0xf1, 0x81, 0x01, 0x8c, 0xcc, + 0xcc, 0xb8, 0xbc, 0x97, 0x86, 0x12, 0xb1, 0xbe, 0x78, 0xff, 0xee, 0xe4, 0xb1, 0x33, 0x3a, 0x30, + 0xe1, 0x7a, 0x90, 0x4d, 0xcb, 0xa4, 0x17, 0xff, 0x07, 0x94, 0xaf, 0xff, 0x85, 0x71, 0x1c, 0x50, + 0x13, 0x5e, 0x55, 0xfa, 0xb5, 0x40, 0x0b, 0x45, 0x99, 0x74, 0x33, 0x70, 0x1b, 0x28, 0x6a, 0xc0, + 0x04, 0x87, 0x04, 0xbe, 0x05, 0x31, 0x38, 0x8e, 0xa7, 0xbe, 0x2a, 0x68, 0x96, 0x99, 0x9c, 0x7b, + 0x78, 0x69, 0x28, 0xd8, 0x48, 0x2a, 0x92, 0xbd, 0x6d, 0x32, 0x1d, 0x9d, 0xff, 0x90, 0x06, 0x38, + 0x04, 0x9a, 0xe3, 0x37, 0x98, 0x02, 0x24, 0x01, 0x0e, 0x27, 0xb3, 0x33, 0xbe, 0x56, 0x5e, 0x19, + 0x2a, 0x97, 0x27, 0x57, 0xd7, 0x54, 0xaf, 0xaa, 0x96, 0x96, 0x57, 0xbf, 0x55, 0x5d, 0xb3, 0x4c, + 0x9e, 0x20, 0xaf, 0xae, 0xa9, 0xc1, 0x7f, 0xd4, 0xad, 0xae, 0xa8, 0xa8, 0xaa, 0xab, 0x93, 0x27, + 0x2c, 0x95, 0xaa, 0x97, 0xaf, 0x96, 0xab, 0xe4, 0x09, 0xab, 0xaa, 0x57, 0x54, 0xad, 0x5c, 0xbd, + 0x4a, 0x9e, 0xba, 0x74, 0xa5, 0x5c, 0x51, 0xb5, 0xaa, 0x4a, 0x5e, 0x51, 0x5d, 0x23, 0xad, 0xaa, + 0xa2, 0x81, 0x0d, 0x7f, 0x6d, 0xd2, 0xad, 0x40, 0x7e, 0x60, 0x2f, 0x4d, 0x4a, 0xb7, 0x3e, 0x0d, + 0xdf, 0x06, 0x8d, 0x8f, 0x79, 0xb0, 0x3b, 0x4f, 0x0c, 0xef, 0x3d, 0x04, 0x06, 0x11, 0x40, 0xd2, + 0x26, 0x3a, 0xbb, 0x92, 0xc7, 0x63, 0xf4, 0x78, 0x4d, 0xda, 0xf6, 0x29, 0x94, 0x1b, 0x8e, 0x78, + 0x43, 0x96, 0x3c, 0xf6, 0x50, 0x22, 0xf2, 0x30, 0x36, 0x4d, 0x05, 0xa4, 0x83, 0x2e, 0x54, 0xf1, + 0x0b, 0x51, 0xb6, 0x12, 0xf0, 0x11, 0x77, 0x12, 0x7c, 0x55, 0xf4, 0xdf, 0x46, 0x0f, 0x9d, 0x16, + 0x3e, 0x7c, 0x84, 0xf4, 0xd0, 0x2b, 0xf8, 0xe5, 0x68, 0x8a, 0x82, 0x03, 0x79, 0x19, 0xc1, 0x63, + 0x21, 0x73, 0x34, 0x76, 0x7d, 0xb2, 0xd6, 0x18, 0x63, 0xc0, 0x8a, 0xc8, 0x18, 0xd6, 0x26, 0xfc, + 0x6a, 0x34, 0xa9, 0xbe, 0x39, 0x14, 0x52, 0x02, 0x91, 0xba, 0x88, 0xd2, 0x44, 0xa8, 0x08, 0x8c, + 0x04, 0xd9, 0x72, 0xf1, 0x11, 0x32, 0x52, 0xef, 0xe7, 0x5a, 0xcf, 0x69, 0xe2, 0xba, 0xda, 0xbd, + 0x2d, 0xd1, 0x7b, 0x62, 0xf8, 0x4b, 0xf2, 0x94, 0xc8, 0x6c, 0x7b, 0xbe, 0x1a, 0x4d, 0x0e, 0x47, + 0x94, 0xa6, 0x3a, 0x9d, 0x15, 0x0a, 0xd4, 0xeb, 0x74, 0x45, 0xb6, 0x91, 0x25, 0xc5, 0x52, 0x61, + 0x9b, 0x22, 0x1e, 0x4f, 0xb6, 0xb4, 0xe0, 0xb7, 0x70, 0xfa, 0xb6, 0x2a, 0x4d, 0x86, 0x79, 0xfe, + 0xc3, 0x4e, 0x23, 0x99, 0xf0, 0x86, 0x85, 0xfa, 0x57, 0x09, 0xba, 0x7b, 0x5d, 0x95, 0x5e, 0x15, + 0xa0, 0x8b, 0xf8, 0x32, 0x0c, 0x9f, 0xea, 0x3b, 0x99, 0x1c, 0xd8, 0x0e, 0xc3, 0x33, 0x99, 0xf5, + 0x4c, 0x8a, 0x0b, 0x0a, 0xe1, 0xd2, 0xe0, 0xe8, 0xcf, 0x5b, 0xb4, 0xfe, 0xfe, 0xc4, 0x81, 0xf3, + 0x32, 0x8c, 0xc3, 0xbf, 0xc2, 0xc6, 0x21, 0x07, 0x3a, 0xa3, 0x50, 0x95, 0x1e, 0x66, 0xe3, 0x90, + 0xd3, 0x95, 0x60, 0x6e, 0x19, 0xd3, 0x36, 0x6c, 0xe8, 0xf1, 0x57, 0x58, 0xe6, 0x60, 0x32, 0x33, + 0x82, 0xc9, 0x1c, 0x58, 0x47, 0x70, 0x04, 0x2c, 0x63, 0xa8, 0xe7, 0x29, 0xae, 0xc1, 0xcb, 0x01, + 0xc4, 0x30, 0x6e, 0x8d, 0xc7, 0x62, 0x96, 0xe0, 0xe5, 0x0d, 0xde, 0x70, 0x04, 0xa4, 0xb6, 0x84, + 0x2c, 0x80, 0xf0, 0xe1, 0x66, 0xb1, 0xc8, 0xc7, 0xfb, 0x77, 0x26, 0xbe, 0x3e, 0x66, 0x45, 0xae, + 0x66, 0x3d, 0x1b, 0xbc, 0x7c, 0x9a, 0x6b, 0xf0, 0x72, 0x98, 0x3b, 0x84, 0x1f, 0xd5, 0xbf, 0x6e, + 0x10, 0xdf, 0x8d, 0x68, 0xea, 0xba, 0x60, 0xa8, 0x5e, 0x31, 0x42, 0x32, 0x1b, 0x79, 0xb3, 0x70, + 0x2c, 0x3b, 0x5b, 0x95, 0xb8, 0x98, 0x9c, 0x97, 0x91, 0xb4, 0x0e, 0x52, 0x09, 0x26, 0x07, 0x5a, + 0x13, 0xbd, 0x9f, 0x51, 0x24, 0x07, 0x5e, 0xc0, 0x89, 0xdd, 0xa7, 0xb4, 0xd6, 0xf3, 0xb2, 0x6d, + 0x04, 0xbe, 0x83, 0x43, 0x93, 0xeb, 0x83, 0x8d, 0x8d, 0xc1, 0x40, 0xad, 0x37, 0xe4, 0x6d, 0x0c, + 0x17, 0xcc, 0xc0, 0x50, 0xf3, 0xb8, 0x2b, 0xd4, 0x54, 0x30, 0x0d, 0x01, 0x78, 0xb0, 0x07, 0xa3, + 0x65, 0x00, 0x71, 0xa1, 0xd6, 0xf2, 0xb5, 0xd6, 0x72, 0x8e, 0x6a, 0xb6, 0x21, 0x6c, 0x79, 0xea, + 0xc2, 0x69, 0x1d, 0xe6, 0xc0, 0x64, 0xc4, 0x08, 0x30, 0x72, 0x74, 0x38, 0xaa, 0xca, 0x96, 0xde, + 0x7c, 0x05, 0x60, 0x5b, 0x86, 0xc4, 0x78, 0x42, 0x95, 0x1e, 0x15, 0x68, 0xa1, 0x58, 0xc0, 0x62, + 0x5b, 0x96, 0x8b, 0x93, 0x69, 0x1b, 0xbe, 0x06, 0xa1, 0x40, 0xd0, 0xa7, 0x54, 0xd7, 0xea, 0x2c, + 0x2b, 0x4e, 0x90, 0x35, 0x11, 0x64, 0x36, 0x4c, 0xb1, 0xf8, 0x10, 0xe8, 0xac, 0xc8, 0x41, 0x7c, + 0xdc, 0x11, 0x1f, 0xea, 0x49, 0x76, 0x6f, 0xab, 0xae, 0x25, 0xbc, 0x2f, 0xd3, 0x94, 0x5f, 0x8b, + 0x26, 0xe9, 0xbf, 0x48, 0x76, 0x37, 0x12, 0x0d, 0x1e, 0xe7, 0xb8, 0x60, 0xcb, 0xc5, 0x85, 0xa9, + 0x33, 0x67, 0xb5, 0xa1, 0x7d, 0xd8, 0x3f, 0xd4, 0x8c, 0x56, 0x09, 0x60, 0x86, 0xd3, 0xed, 0x27, + 0xbb, 0xb7, 0x31, 0xed, 0x65, 0xb6, 0xf3, 0xbc, 0x1a, 0x84, 0xcc, 0x4b, 0xe9, 0xf2, 0x0e, 0x0b, + 0xd6, 0x77, 0x78, 0x96, 0xfd, 0x80, 0xf4, 0xce, 0xac, 0x76, 0xe5, 0x65, 0x34, 0xc3, 0x71, 0x5c, + 0xd7, 0xa5, 0x60, 0xd9, 0xc3, 0xa9, 0x52, 0x07, 0x87, 0x76, 0x72, 0x02, 0x7e, 0x5a, 0xc5, 0xcd, + 0x1c, 0xe1, 0x40, 0x70, 0xfa, 0x10, 0x1a, 0xe5, 0x17, 0x7e, 0xa6, 0xb6, 0x82, 0x49, 0x53, 0x34, + 0x71, 0xf0, 0xa8, 0x76, 0x76, 0x1b, 0x2c, 0xda, 0x86, 0x3a, 0x74, 0x42, 0xce, 0x88, 0x3e, 0x08, + 0x6c, 0xbb, 0xd6, 0xbe, 0x1f, 0x90, 0xcc, 0xd5, 0xc1, 0xd6, 0xc4, 0xbe, 0xef, 0xb4, 0xae, 0xd6, + 0x78, 0x6c, 0x8f, 0xb7, 0xc9, 0x1f, 0xef, 0x27, 0xe4, 0x62, 0xe2, 0xe8, 0x0e, 0x6d, 0xc7, 0xf6, + 0xd4, 0xa5, 0xae, 0xe4, 0xc0, 0x77, 0x57, 0x07, 0xdb, 0x0a, 0xff, 0x71, 0x22, 0xca, 0xc1, 0x08, + 0xf3, 0x67, 0x84, 0xbd, 0x87, 0x57, 0x7e, 0xae, 0x2a, 0xcd, 0x22, 0xec, 0xfd, 0x64, 0x0b, 0x92, + 0x05, 0xde, 0xfd, 0x35, 0x94, 0x07, 0xb9, 0x50, 0xc8, 0xfb, 0x0d, 0x34, 0x3e, 0x14, 0x89, 0x8f, + 0xb1, 0x41, 0x11, 0xc1, 0xda, 0x8c, 0xbe, 0xe1, 0x6b, 0x37, 0x84, 0x83, 0x4d, 0xe1, 0x45, 0xde, + 0x26, 0xbf, 0x4c, 0x9a, 0xf3, 0xcf, 0xa0, 0x9c, 0x06, 0x7f, 0x60, 0x83, 0xc5, 0xd5, 0x53, 0x2f, + 0x10, 0x0b, 0x20, 0xfe, 0x0d, 0x34, 0x23, 0xac, 0x75, 0x5b, 0x34, 0xb9, 0xf7, 0xb4, 0x8c, 0xeb, + 0xf9, 0x46, 0x94, 0xd7, 0x04, 0x37, 0x0c, 0x04, 0x33, 0x1e, 0xb7, 0x03, 0x5c, 0xc8, 0xde, 0x2d, + 0xfc, 0xac, 0x90, 0x4e, 0xe2, 0xe3, 0x64, 0x5d, 0x86, 0x89, 0x09, 0xbd, 0x5e, 0x1b, 0x94, 0x4d, + 0x57, 0xa2, 0x9b, 0xf1, 0xb1, 0x69, 0x7d, 0x17, 0x65, 0xd2, 0x9e, 0x7f, 0x06, 0xe5, 0x86, 0x94, + 0x48, 0x68, 0x13, 0x49, 0x40, 0x04, 0x51, 0x3a, 0x71, 0x89, 0x38, 0x3b, 0xd5, 0x77, 0x02, 0x46, + 0x23, 0xd1, 0xa7, 0xbf, 0x3e, 0x96, 0xd8, 0x77, 0x56, 0x86, 0x5a, 0x7e, 0xa1, 0xf1, 0x2a, 0xe7, + 0x31, 0x31, 0x37, 0xe1, 0x55, 0x9e, 0xec, 0xf6, 0x1e, 0x17, 0xc1, 0x7b, 0x0c, 0xb6, 0x92, 0x73, + 0x54, 0x69, 0x26, 0xbc, 0xc7, 0x93, 0x9d, 0x2f, 0xf1, 0x52, 0xfb, 0x4b, 0x9c, 0x8f, 0xa7, 0x86, + 0xa5, 0x61, 0xb6, 0x97, 0x78, 0x72, 0xa6, 0x37, 0x58, 0x35, 0x63, 0x3e, 0x83, 0x39, 0xde, 0x47, + 0x3a, 0xc7, 0x60, 0x90, 0x44, 0x45, 0xb0, 0x34, 0x20, 0x89, 0xb0, 0x70, 0xf0, 0xb0, 0x76, 0x6a, + 0x17, 0x65, 0x16, 0x6a, 0x56, 0xae, 0xaa, 0x5b, 0x25, 0xc9, 0xab, 0xaa, 0x2a, 0xaf, 0x95, 0x97, + 0x87, 0x5e, 0x91, 0x91, 0x59, 0x70, 0x53, 0xc4, 0xd2, 0xdb, 0x26, 0xb1, 0x84, 0x4c, 0xdf, 0x6e, + 0x4a, 0x2c, 0x3d, 0x09, 0xb3, 0xb2, 0x11, 0x4b, 0xec, 0x93, 0x0a, 0x64, 0x12, 0xd1, 0xa3, 0x63, + 0xc2, 0xc9, 0xa4, 0x94, 0xaa, 0x2d, 0x2f, 0x12, 0xbc, 0xa7, 0xc5, 0xaa, 0xf4, 0xb8, 0xe5, 0x45, + 0x22, 0x88, 0x71, 0x84, 0x77, 0xe9, 0x35, 0x84, 0x74, 0x34, 0xb9, 0x42, 0x89, 0xbc, 0x17, 0x34, + 0x12, 0x75, 0x62, 0x5b, 0x5c, 0xa6, 0x58, 0x7c, 0x40, 0xff, 0x9b, 0xa2, 0xac, 0xf8, 0xc0, 0xe7, + 0xc9, 0xa3, 0x9b, 0xb5, 0x1d, 0x43, 0x3a, 0x94, 0x30, 0xcd, 0xf8, 0x4a, 0x06, 0x57, 0xc3, 0x13, + 0x8b, 0x63, 0x8e, 0x98, 0xb8, 0xda, 0x36, 0x8e, 0x3b, 0xb2, 0x5e, 0x8a, 0x26, 0x87, 0x37, 0xf8, + 0x9b, 0x56, 0x1a, 0x11, 0x2f, 0xa6, 0xe2, 0xe7, 0x0e, 0x3f, 0xf6, 0x96, 0x0a, 0x71, 0x1a, 0x8d, + 0x74, 0x41, 0x02, 0x58, 0x58, 0xaa, 0xe7, 0x3d, 0x87, 0x26, 0xdd, 0x28, 0xaa, 0xdb, 0xc9, 0xa9, + 0xd2, 0x76, 0x0e, 0x6d, 0xe5, 0x04, 0x8c, 0x5d, 0xc4, 0xdf, 0xb1, 0x54, 0x96, 0x7e, 0xd9, 0x76, + 0x9e, 0x8e, 0x0f, 0xf5, 0x18, 0xa8, 0x8a, 0x3c, 0xab, 0x70, 0x15, 0x69, 0xee, 0x00, 0xb0, 0xc5, + 0xd0, 0x1b, 0x0f, 0x6e, 0x49, 0xf4, 0x9e, 0x80, 0x2e, 0x14, 0x93, 0x80, 0x35, 0xdb, 0xf0, 0x8e, + 0x8e, 0xc4, 0xfe, 0xb3, 0xd4, 0x70, 0x4a, 0x27, 0x97, 0x99, 0xe0, 0x5b, 0xc9, 0xde, 0xb6, 0x2b, + 0xd1, 0x2d, 0x85, 0xc7, 0xb2, 0xd1, 0x84, 0x55, 0x1b, 0x94, 0x0a, 0xbf, 0x2f, 0xc4, 0x3f, 0x85, + 0xb2, 0xd7, 0xd4, 0x56, 0x10, 0x2c, 0x87, 0xb7, 0x44, 0xff, 0x2d, 0x16, 0x24, 0x87, 0xf6, 0x24, + 0xce, 0x7c, 0x4f, 0x95, 0x9a, 0x6b, 0x6a, 0x2b, 0x88, 0x7c, 0x46, 0xaf, 0xd6, 0x91, 0x63, 0x45, + 0x75, 0xa5, 0x4c, 0xb0, 0x1d, 0x20, 0x47, 0xbd, 0x40, 0x9c, 0x0c, 0xc9, 0x49, 0xa0, 0xb7, 0x8c, + 0xcb, 0xf8, 0x2a, 0x94, 0x5f, 0x5d, 0x5b, 0xd3, 0xdc, 0xb8, 0x56, 0x09, 0x91, 0x4c, 0x6d, 0x18, + 0xb2, 0x68, 0xa1, 0x38, 0x0f, 0x9a, 0x43, 0x06, 0x7a, 0xad, 0xb3, 0x2f, 0xb9, 0xf7, 0x74, 0x75, + 0xad, 0xd6, 0x73, 0x56, 0x3b, 0x1c, 0x95, 0x69, 0x2b, 0xfe, 0x19, 0x7a, 0x27, 0x73, 0xcc, 0xf8, + 0xe7, 0xc6, 0x9d, 0xe4, 0xc9, 0x10, 0x18, 0xb8, 0x0d, 0xf6, 0x8a, 0x5c, 0x9c, 0x32, 0x34, 0x81, + 0x20, 0x42, 0xc2, 0x07, 0x80, 0x74, 0x9c, 0x94, 0x99, 0x5d, 0x55, 0x93, 0x4c, 0x34, 0x2a, 0x6d, + 0x51, 0x99, 0xf2, 0x46, 0x88, 0xca, 0x34, 0xc1, 0x1e, 0x95, 0xa9, 0xec, 0x19, 0x55, 0x7a, 0x0a, + 0x89, 0x82, 0xb1, 0xdd, 0xe2, 0x13, 0x70, 0xb2, 0xf0, 0xa4, 0xad, 0x7a, 0xbd, 0x8a, 0x3c, 0x78, + 0x30, 0x83, 0x56, 0x55, 0x6b, 0xdd, 0x0e, 0xdb, 0x5c, 0xb8, 0x8f, 0x43, 0x93, 0x49, 0x27, 0xc8, + 0x06, 0x35, 0x0b, 0xe5, 0x62, 0x3d, 0x33, 0x28, 0x05, 0x64, 0xf8, 0xa1, 0xc3, 0xa0, 0x7e, 0x7c, + 0x00, 0x6f, 0xf8, 0x68, 0xe6, 0xd9, 0x77, 0x9b, 0xd9, 0xc2, 0x39, 0xd6, 0x2d, 0x34, 0x76, 0xa8, + 0x4c, 0x3f, 0x0f, 0xf4, 0xa8, 0x60, 0xf9, 0xa0, 0x38, 0x6b, 0xd5, 0xeb, 0x55, 0x1e, 0xfd, 0x00, + 0x61, 0xb2, 0x64, 0x5e, 0xff, 0xd7, 0x12, 0xcc, 0xd3, 0x9b, 0x8c, 0xa7, 0xac, 0xfc, 0x96, 0xdf, + 0xc3, 0xb1, 0xd4, 0x38, 0x67, 0x1a, 0xb5, 0x33, 0xd4, 0x78, 0x3d, 0x93, 0x12, 0x08, 0x20, 0xb6, + 0xbc, 0xa2, 0xae, 0xf4, 0xf5, 0x67, 0xeb, 0x4a, 0x17, 0xe3, 0xff, 0x8a, 0xb4, 0xed, 0x87, 0xb4, + 0x16, 0x12, 0x19, 0x2e, 0x71, 0xe0, 0xbc, 0x61, 0xf0, 0xbd, 0x43, 0x3b, 0xd3, 0x4d, 0x47, 0x81, + 0x90, 0xd8, 0xa6, 0xb4, 0xa2, 0x27, 0xaa, 0x5d, 0xfc, 0x56, 0xeb, 0x3c, 0x0b, 0xd2, 0xf9, 0x62, + 0x96, 0xbc, 0x7f, 0x0d, 0x4d, 0x22, 0x3f, 0x98, 0x94, 0x8e, 0x45, 0x3a, 0x07, 0xc8, 0x96, 0x8b, + 0x93, 0x61, 0x5a, 0x46, 0xcc, 0x85, 0x09, 0xa1, 0xdc, 0xe9, 0x5c, 0x41, 0x34, 0x5f, 0x66, 0x1b, + 0xf1, 0x61, 0x26, 0x51, 0x4f, 0xb6, 0x91, 0xe7, 0x75, 0x05, 0x93, 0xa6, 0x47, 0x22, 0x91, 0x41, + 0xb0, 0x1c, 0x39, 0x15, 0x6d, 0xd1, 0xd7, 0x18, 0xdb, 0xc3, 0x24, 0x93, 0x07, 0x93, 0x0e, 0xb8, + 0x1c, 0xf1, 0xd8, 0x9e, 0xd4, 0x99, 0x1f, 0x12, 0xfb, 0x87, 0x60, 0x63, 0x81, 0x78, 0xc6, 0xe1, + 0x1e, 0x0a, 0x3c, 0x4c, 0xfe, 0x9c, 0x37, 0x50, 0x5e, 0x48, 0x59, 0xef, 0x0f, 0x06, 0x08, 0xbc, + 0x3f, 0x87, 0xe1, 0x1d, 0x8a, 0x44, 0xde, 0x0c, 0x45, 0xd2, 0x73, 0x5a, 0xbf, 0x2a, 0x47, 0x8e, + 0x80, 0x4d, 0x19, 0x57, 0xe0, 0x73, 0x7a, 0xe3, 0x91, 0x5e, 0xbc, 0x8c, 0x72, 0x37, 0x36, 0xd5, + 0x57, 0x57, 0x92, 0x7b, 0xf0, 0x82, 0xfe, 0xaa, 0x41, 0x89, 0x58, 0x4c, 0x20, 0xf1, 0xd4, 0xe6, + 0x44, 0x4f, 0x5b, 0x72, 0x68, 0x4f, 0x72, 0xa0, 0xc7, 0xef, 0x83, 0x65, 0xc4, 0xfb, 0x77, 0x92, + 0x4d, 0xc2, 0xda, 0x31, 0x63, 0xa6, 0xd0, 0xd1, 0x9a, 0x60, 0x2a, 0xcf, 0x48, 0x30, 0xe5, 0xae, + 0xfc, 0xbb, 0x56, 0x3e, 0x3b, 0x34, 0xd3, 0x6d, 0x82, 0x0c, 0x53, 0xb5, 0xda, 0x22, 0x41, 0x9e, + 0x60, 0xe4, 0xb5, 0x9d, 0x67, 0x91, 0x20, 0x4f, 0x06, 0xd9, 0x31, 0x08, 0x8e, 0xd3, 0x8e, 0xca, + 0x8a, 0x92, 0xc3, 0x68, 0x92, 0x12, 0xd8, 0xe8, 0x0f, 0x05, 0x03, 0x8d, 0x4a, 0xc0, 0x70, 0x6e, + 0x78, 0x43, 0x95, 0x9e, 0x16, 0xd8, 0x72, 0xf1, 0x09, 0xb2, 0x0d, 0x58, 0xea, 0x56, 0xe2, 0x01, + 0x40, 0x7d, 0xbb, 0x29, 0x14, 0xf4, 0x95, 0x78, 0x7c, 0xca, 0xda, 0xe6, 0xf5, 0x25, 0x9e, 0x70, + 0xc4, 0xbb, 0xfe, 0x1d, 0xfc, 0x4d, 0x39, 0x47, 0xff, 0x5b, 0xce, 0xc5, 0x15, 0x72, 0x8e, 0xde, + 0x4a, 0x66, 0x47, 0xe3, 0xdf, 0x42, 0x48, 0x09, 0xac, 0xf7, 0x07, 0x20, 0x39, 0xe8, 0x44, 0x43, + 0x51, 0xf4, 0xb8, 0xc0, 0x14, 0x8b, 0x05, 0xda, 0xe0, 0xbe, 0xc4, 0xc7, 0xbb, 0xa9, 0x70, 0x07, + 0x08, 0x89, 0x0d, 0xcf, 0x86, 0xaf, 0x95, 0x4f, 0x0d, 0x4d, 0x96, 0xb3, 0x37, 0x3c, 0x1b, 0x96, + 0x73, 0xb1, 0x04, 0x5e, 0x66, 0xba, 0xf1, 0x2b, 0xd1, 0x24, 0x7f, 0xb8, 0xea, 0x43, 0x1d, 0x4c, + 0xfd, 0x1b, 0x81, 0x24, 0xc8, 0x07, 0xc9, 0x2b, 0x5b, 0x2e, 0xce, 0x37, 0x85, 0x9b, 0x78, 0xbb, + 0x92, 0xbb, 0xbe, 0xd6, 0x3a, 0x8e, 0x12, 0x34, 0xc7, 0xb6, 0xe4, 0xff, 0x94, 0xa3, 0x37, 0x06, + 0x4f, 0x17, 0x88, 0x80, 0xcf, 0x38, 0x55, 0x6a, 0xe1, 0x04, 0xb6, 0x46, 0xdc, 0xc8, 0x2a, 0x0a, + 0xe8, 0x26, 0xad, 0x53, 0x7c, 0x0a, 0x64, 0x01, 0x2e, 0xf1, 0x84, 0xfd, 0x81, 0xf5, 0x0d, 0xca, + 0x3b, 0x25, 0x1e, 0xb3, 0xd0, 0xb0, 0x5d, 0x8f, 0xa5, 0x36, 0xef, 0x1d, 0xde, 0x72, 0x12, 0x86, + 0xb8, 0x3a, 0xd8, 0x0e, 0x4d, 0xa1, 0x36, 0xb9, 0xeb, 0xeb, 0xe4, 0x57, 0xbb, 0x68, 0x15, 0x25, + 0xa9, 0xa0, 0xcd, 0xb5, 0xf2, 0x39, 0xa1, 0x59, 0x32, 0x32, 0x87, 0x94, 0xf3, 0xa0, 0x42, 0x66, + 0x67, 0xc7, 0x1f, 0xe0, 0xd0, 0x4c, 0xb3, 0x4d, 0x05, 0x45, 0x4b, 0x40, 0x89, 0xe0, 0x5c, 0x35, + 0x6e, 0xf5, 0xe2, 0xeb, 0xc4, 0xeb, 0xc1, 0x48, 0x2c, 0x65, 0x9b, 0x2a, 0x26, 0x2f, 0xa2, 0x60, + 0x9f, 0x0a, 0x2f, 0x74, 0xaa, 0xef, 0x44, 0x75, 0x25, 0x30, 0x64, 0xd0, 0xf0, 0xd5, 0x60, 0x38, + 0x42, 0x5e, 0x49, 0xb7, 0x2f, 0xf0, 0x9f, 0x71, 0xd4, 0xb3, 0x69, 0x0a, 0xa6, 0xd0, 0x4b, 0xdc, + 0x5d, 0xf4, 0x4d, 0xcc, 0x6a, 0x71, 0x68, 0xfa, 0x95, 0x2a, 0xbd, 0x41, 0x1d, 0x9a, 0x96, 0xd1, + 0x59, 0x41, 0x81, 0xc9, 0x8b, 0x77, 0xc5, 0xb4, 0xfe, 0x93, 0x60, 0x68, 0xcb, 0x1a, 0xd7, 0x42, + 0xe0, 0xb4, 0x78, 0x7f, 0x87, 0xf6, 0xc3, 0x01, 0x50, 0x09, 0x8a, 0x8b, 0xe3, 0xfd, 0x5f, 0x5e, + 0x2b, 0xcf, 0xed, 0xe6, 0xb2, 0xa6, 0xcf, 0xa2, 0x2e, 0x50, 0x65, 0xa6, 0x50, 0x63, 0xaa, 0xf1, + 0x5a, 0xce, 0x32, 0x85, 0x1a, 0x13, 0xa9, 0x38, 0xe3, 0x5a, 0x79, 0x5e, 0x28, 0x67, 0x7a, 0x56, + 0xc1, 0x2c, 0x53, 0xae, 0xb1, 0x99, 0x43, 0x53, 0x83, 0x81, 0x86, 0x4d, 0xb0, 0x0c, 0x9c, 0x99, + 0x1c, 0xd2, 0x83, 0xff, 0x52, 0x95, 0xd6, 0x08, 0xb6, 0x2a, 0xb1, 0x32, 0x3e, 0xd0, 0x02, 0xa3, + 0x91, 0x0d, 0x37, 0x89, 0xd6, 0x0e, 0x90, 0xc0, 0x26, 0x7b, 0x8e, 0x68, 0x67, 0xc8, 0x9b, 0x0c, + 0x2d, 0x9d, 0x52, 0x79, 0xdb, 0xa8, 0xfc, 0x55, 0x0e, 0x4d, 0x5c, 0x5b, 0x1f, 0x26, 0xa6, 0xcb, + 0x20, 0x6b, 0x58, 0x34, 0xe2, 0x3e, 0x97, 0x1b, 0x3d, 0x60, 0xab, 0x8f, 0x70, 0xaa, 0xf4, 0x09, + 0x27, 0x98, 0x03, 0x89, 0x1d, 0x1c, 0x3b, 0xd5, 0x3b, 0x10, 0xe3, 0x94, 0x35, 0x48, 0x20, 0xfa, + 0x7e, 0x78, 0x11, 0xb1, 0xf8, 0x53, 0x36, 0xa7, 0xc6, 0x27, 0x38, 0x34, 0x49, 0x61, 0xcc, 0xb5, + 0x79, 0xf7, 0x74, 0xdd, 0x8e, 0x35, 0x33, 0xe6, 0xce, 0xb0, 0xea, 0x2e, 0x4e, 0x95, 0xda, 0x39, + 0x81, 0x1d, 0x4c, 0xfc, 0x83, 0x6d, 0xd9, 0xb7, 0xc7, 0x82, 0x9b, 0x2e, 0x76, 0x78, 0xef, 0x21, + 0xcb, 0x32, 0xd9, 0xb9, 0xf0, 0x15, 0x3a, 0x21, 0x17, 0x6c, 0xf6, 0x55, 0x57, 0x92, 0x94, 0x7b, + 0x98, 0x8e, 0x34, 0xca, 0xc4, 0xf9, 0xf6, 0x30, 0x6b, 0xf1, 0xfe, 0x9d, 0xa0, 0xb8, 0xad, 0xae, + 0x94, 0x8d, 0x56, 0xfc, 0x0f, 0x1c, 0x42, 0xb0, 0x25, 0x18, 0xcb, 0x81, 0xa4, 0xe5, 0x30, 0xa7, + 0x4a, 0x87, 0x38, 0x81, 0xa9, 0x10, 0x77, 0x5a, 0x84, 0x11, 0xa6, 0x5a, 0xb1, 0xe5, 0xeb, 0x44, + 0x4f, 0x9b, 0xfe, 0xb8, 0x1f, 0x38, 0x0f, 0xde, 0x05, 0x57, 0x07, 0xdb, 0x57, 0x48, 0x35, 0xd2, + 0xb2, 0xaa, 0xca, 0x77, 0x2b, 0x96, 0xaf, 0xae, 0x5b, 0x55, 0x25, 0x17, 0xc1, 0x59, 0x27, 0xda, + 0x0e, 0x26, 0xcf, 0x1c, 0x83, 0x51, 0x8a, 0x29, 0xe0, 0x26, 0x0e, 0xf6, 0x79, 0xaa, 0x6b, 0x2a, + 0xab, 0x6a, 0xab, 0x6a, 0x2a, 0xab, 0x6a, 0x56, 0xd1, 0x3e, 0x36, 0xdc, 0x97, 0xda, 0xf1, 0xa5, + 0x7e, 0x01, 0x06, 0xbe, 0x4b, 0xec, 0x3c, 0x5e, 0x2c, 0x33, 0x13, 0xe3, 0xcb, 0x50, 0x5e, 0xa3, + 0x17, 0x53, 0xb3, 0xb3, 0xb1, 0xd8, 0x09, 0x13, 0xed, 0xa4, 0x48, 0x9c, 0x0d, 0x03, 0xc0, 0x2f, + 0x0f, 0x15, 0x35, 0x91, 0x6a, 0xfe, 0xe7, 0x28, 0x37, 0x10, 0xf4, 0x29, 0xe1, 0x82, 0x39, 0xb8, + 0x2b, 0x26, 0xa1, 0xa1, 0x44, 0x9c, 0x09, 0x3d, 0xf5, 0x1f, 0x66, 0x3f, 0xa8, 0xe3, 0x0f, 0x72, + 0x68, 0x5a, 0x40, 0x89, 0x7c, 0x10, 0x0c, 0x6d, 0xa8, 0x53, 0x22, 0x11, 0x7f, 0x60, 0xbd, 0x61, + 0xf5, 0xbb, 0xc0, 0x61, 0xfc, 0x61, 0x69, 0x56, 0x5e, 0xa3, 0x4a, 0x15, 0x82, 0xbd, 0xaf, 0xb8, + 0x98, 0x92, 0xbd, 0xc9, 0x81, 0x1e, 0xed, 0x48, 0x2c, 0x79, 0x2c, 0x0a, 0x02, 0x46, 0xea, 0xab, + 0x06, 0x56, 0xfa, 0x89, 0xfd, 0x17, 0xa1, 0xfc, 0x5a, 0x79, 0xee, 0x67, 0x5c, 0x56, 0x3e, 0x27, + 0xdb, 0x87, 0xe2, 0xff, 0x0d, 0x87, 0x66, 0x91, 0x29, 0x94, 0x7b, 0xc3, 0xfe, 0x7a, 0x3a, 0x3f, + 0x88, 0x65, 0xfa, 0x53, 0xa7, 0x63, 0x93, 0xa3, 0xad, 0xce, 0xdd, 0x07, 0x05, 0xd7, 0x51, 0xc4, + 0x5f, 0x10, 0xe4, 0x83, 0xe7, 0x48, 0x2e, 0xac, 0x31, 0x53, 0x78, 0xf7, 0x88, 0x5e, 0x0e, 0xdb, + 0xc6, 0xb3, 0xd9, 0x2e, 0x37, 0x36, 0xd5, 0x27, 0x7b, 0xdb, 0xf4, 0x93, 0x34, 0x96, 0x42, 0x56, + 0x66, 0x5d, 0x90, 0xeb, 0x67, 0xf9, 0x7f, 0xe2, 0xd0, 0x1c, 0x52, 0x21, 0xf9, 0x36, 0x7a, 0x03, + 0xf5, 0x0a, 0x5d, 0x17, 0x04, 0x4b, 0x7d, 0x2c, 0xcd, 0xba, 0xac, 0xad, 0xcb, 0xb7, 0x70, 0xaa, + 0xf4, 0x27, 0xc2, 0x5c, 0xbd, 0xad, 0xe2, 0x1c, 0x4b, 0xf4, 0x19, 0x46, 0xfe, 0x9f, 0x0c, 0x1f, + 0x3c, 0xcf, 0x46, 0x21, 0xa4, 0xab, 0xd3, 0xba, 0x74, 0x6e, 0xcc, 0xdf, 0xb4, 0x31, 0x0c, 0xd5, + 0xfa, 0x0a, 0xad, 0xa1, 0xdb, 0xa0, 0x03, 0x70, 0x96, 0xae, 0x67, 0x27, 0xa7, 0x59, 0x09, 0xff, + 0x37, 0x1c, 0x9a, 0xac, 0xc3, 0x17, 0x5d, 0xda, 0x3c, 0x77, 0x2f, 0x87, 0x1a, 0xb3, 0x4d, 0xb9, + 0xca, 0xa9, 0xd2, 0x6e, 0x4e, 0xb0, 0xf4, 0x13, 0xff, 0xc8, 0x46, 0x55, 0xb4, 0x2d, 0x80, 0xb8, + 0xa6, 0x1a, 0xde, 0xb1, 0xc4, 0x83, 0x96, 0x71, 0x99, 0x85, 0x43, 0xd2, 0x5b, 0x1e, 0x38, 0x9a, + 0x6c, 0xbb, 0xa8, 0xb5, 0x7e, 0x35, 0xdc, 0x13, 0x25, 0x36, 0x61, 0x58, 0x37, 0xa8, 0xbf, 0x46, + 0xc6, 0x98, 0xe5, 0x15, 0x75, 0x40, 0xe3, 0x13, 0x67, 0x13, 0x2c, 0x22, 0x93, 0x2d, 0xb3, 0xe1, + 0xb7, 0x70, 0x68, 0x1a, 0xc8, 0xe8, 0x64, 0xc5, 0x1f, 0x08, 0x47, 0xbc, 0x0d, 0x0d, 0x38, 0xac, + 0x6b, 0x7e, 0xf9, 0x9b, 0xaa, 0xb4, 0x5a, 0xb0, 0xd7, 0x89, 0xe5, 0x40, 0xa1, 0x0d, 0xef, 0xe8, + 0x48, 0x7d, 0xde, 0x02, 0xf7, 0xd4, 0xcc, 0xbc, 0x6b, 0x48, 0x0b, 0x81, 0xbb, 0x4f, 0x7d, 0xf6, + 0x15, 0x20, 0x95, 0xc4, 0xd6, 0x16, 0x6d, 0xfb, 0xf7, 0xf1, 0xfe, 0x5d, 0x89, 0x9e, 0xb6, 0xc4, + 0xbe, 0x56, 0xd9, 0x3e, 0x28, 0x7f, 0x88, 0x43, 0x33, 0xfc, 0x01, 0x7f, 0x64, 0x79, 0x70, 0xbd, + 0x3f, 0x50, 0xeb, 0x0d, 0x87, 0x3f, 0x08, 0x86, 0x7c, 0x38, 0x17, 0xde, 0xc4, 0xf2, 0x0d, 0xaa, + 0xf4, 0x9e, 0xe0, 0xac, 0x15, 0xeb, 0x32, 0x4c, 0x01, 0xd2, 0x3d, 0x52, 0xb9, 0x42, 0x13, 0xe9, + 0x33, 0xf2, 0xcc, 0x9c, 0xdf, 0xe1, 0xdf, 0x44, 0x93, 0xc8, 0x2d, 0xc6, 0x18, 0xf8, 0x21, 0x3c, + 0x29, 0x6c, 0xe1, 0xc2, 0x96, 0x8b, 0x8f, 0xb2, 0x48, 0x82, 0xe4, 0xce, 0x6f, 0x0e, 0xf8, 0x94, + 0x50, 0x83, 0x77, 0xd3, 0xa2, 0xe0, 0x46, 0xfc, 0x6f, 0xb1, 0xcc, 0x76, 0xe1, 0xff, 0x8c, 0x43, + 0x73, 0xbd, 0xcd, 0x91, 0xe0, 0x32, 0x25, 0xa0, 0x13, 0x5f, 0xca, 0x0a, 0xbc, 0x14, 0xac, 0xfd, + 0x24, 0x61, 0x60, 0x77, 0x71, 0xaa, 0xb4, 0x83, 0x13, 0xd2, 0xb5, 0x12, 0x1b, 0xd8, 0xe7, 0x6e, + 0x05, 0xb3, 0x13, 0x60, 0x65, 0x60, 0xf8, 0x37, 0x63, 0xd2, 0x83, 0x50, 0xb4, 0xf8, 0xfe, 0xb3, + 0x4e, 0x67, 0xcf, 0x7b, 0xe2, 0xfd, 0xb1, 0x48, 0xa8, 0x59, 0x49, 0x1c, 0x38, 0x5f, 0xe2, 0x81, + 0x3b, 0x01, 0x0c, 0x2a, 0x41, 0xcb, 0xf8, 0x90, 0x02, 0xf5, 0x8a, 0x9c, 0x6e, 0x1a, 0xfc, 0x7f, + 0xe2, 0xd0, 0x44, 0xa3, 0x55, 0xb8, 0xe0, 0x61, 0x77, 0x85, 0x49, 0x35, 0x69, 0x60, 0x58, 0xcb, + 0x55, 0x60, 0x3f, 0x57, 0x23, 0x77, 0xba, 0xd9, 0x5f, 0x3c, 0x60, 0xa7, 0x5d, 0x3c, 0x69, 0xbe, + 0x6b, 0x4c, 0xbc, 0xc4, 0x03, 0xa7, 0xce, 0x9a, 0xbe, 0xb1, 0x60, 0x61, 0xac, 0x0a, 0xb8, 0x73, + 0xfa, 0x21, 0x68, 0x98, 0xec, 0xde, 0x66, 0xc9, 0x02, 0x06, 0xd9, 0xa2, 0x20, 0x3d, 0x2c, 0x08, + 0x77, 0xb4, 0xf6, 0x18, 0x38, 0xcc, 0xcb, 0xe6, 0x24, 0xf9, 0xef, 0x38, 0xe2, 0x60, 0x89, 0xc9, + 0x46, 0xcf, 0x28, 0xe9, 0xb6, 0x2a, 0xa3, 0x07, 0x50, 0x30, 0x98, 0xba, 0x37, 0x87, 0x11, 0x57, + 0x43, 0xa6, 0x74, 0x33, 0x17, 0xff, 0xb9, 0x7d, 0x86, 0xbb, 0x13, 0xa0, 0x07, 0x25, 0xbc, 0xf6, + 0xdd, 0xe6, 0x50, 0xc3, 0x22, 0x92, 0x53, 0xea, 0x5d, 0x7f, 0xa3, 0x77, 0xbd, 0xb2, 0xa8, 0x29, + 0xe4, 0xdf, 0xe8, 0x6f, 0x50, 0x7c, 0xeb, 0x15, 0x28, 0x48, 0xf6, 0xb6, 0xb1, 0x9d, 0x65, 0xf3, + 0x0b, 0xfc, 0x6f, 0x50, 0x7e, 0xa3, 0x11, 0x2e, 0xf5, 0x11, 0x53, 0x87, 0x4d, 0x0b, 0xc5, 0x9f, + 0x93, 0x8f, 0x13, 0x1f, 0xa7, 0xa2, 0x0a, 0x09, 0xdc, 0x14, 0xa9, 0x4f, 0x1c, 0x71, 0xd9, 0xc4, + 0xfe, 0x49, 0xc5, 0x45, 0x60, 0x4d, 0x55, 0x2c, 0xd3, 0x01, 0xf8, 0x3f, 0xa2, 0xa9, 0xf8, 0x73, + 0x26, 0x27, 0x53, 0x88, 0xbf, 0xb3, 0x46, 0x95, 0xea, 0x04, 0x5b, 0x95, 0x28, 0x69, 0x7d, 0x83, + 0x5a, 0xcb, 0x09, 0xca, 0x1c, 0x00, 0xb9, 0x66, 0x88, 0x5e, 0x12, 0x47, 0x77, 0xa4, 0xfa, 0x88, + 0x24, 0xa7, 0x84, 0x90, 0x23, 0x07, 0xce, 0x27, 0xbf, 0x88, 0x69, 0xd1, 0x41, 0xfa, 0x65, 0xdb, + 0x90, 0xbc, 0x1f, 0x4d, 0xf3, 0x87, 0x41, 0xd1, 0x43, 0x0a, 0x71, 0x66, 0xba, 0xfc, 0xf2, 0x97, + 0x55, 0xe9, 0x05, 0xc1, 0x5e, 0x27, 0x16, 0x53, 0x86, 0x13, 0xb4, 0x74, 0xf0, 0xed, 0x12, 0xe6, + 0xde, 0xd0, 0x2f, 0xd9, 0xfb, 0xda, 0x2d, 0xe8, 0x1e, 0x4d, 0x6b, 0x41, 0x47, 0x28, 0xb3, 0x74, + 0x16, 0x74, 0x27, 0x38, 0x34, 0x8d, 0x40, 0x4e, 0x85, 0x37, 0xa2, 0xac, 0x0f, 0x86, 0x36, 0xe1, + 0x24, 0x72, 0x13, 0xcb, 0x7f, 0xa7, 0x4a, 0x1f, 0x0a, 0xf6, 0x3a, 0x51, 0x31, 0x19, 0xda, 0xd6, + 0xaf, 0x6c, 0x52, 0x73, 0x1d, 0x58, 0x5b, 0xb7, 0x53, 0xae, 0x10, 0x56, 0x97, 0x38, 0x88, 0x33, + 0x14, 0x0f, 0xc4, 0xae, 0x44, 0x37, 0xc3, 0x8e, 0x17, 0xad, 0x6d, 0xf6, 0x37, 0xf8, 0x94, 0xd0, + 0x22, 0x7f, 0x63, 0x53, 0x30, 0x14, 0x51, 0x42, 0xc5, 0x4c, 0xdc, 0x58, 0x68, 0x2b, 0xdb, 0xbf, + 0xcb, 0xd7, 0xa0, 0x89, 0xfe, 0xf0, 0xbb, 0xe1, 0xf7, 0xbc, 0x21, 0xc5, 0x87, 0x13, 0xc4, 0xe5, + 0x13, 0x1f, 0x13, 0x5a, 0x2a, 0x3e, 0xc2, 0x6c, 0xe7, 0xb9, 0x78, 0xec, 0x2b, 0xe7, 0x76, 0x62, + 0xbb, 0x24, 0xdc, 0x98, 0xff, 0x3f, 0x38, 0x34, 0xb5, 0x9e, 0xf1, 0x49, 0xa9, 0xae, 0x2c, 0x78, + 0x02, 0x2f, 0x9b, 0xa4, 0x6e, 0xb0, 0x55, 0x8a, 0x5f, 0x12, 0x1a, 0x97, 0x12, 0x2d, 0xf1, 0xd8, + 0x1e, 0x70, 0x53, 0xaa, 0xae, 0x2c, 0xa1, 0x7c, 0x56, 0xf2, 0x8b, 0xd8, 0x95, 0xe8, 0x16, 0xd8, + 0x13, 0x6d, 0xe7, 0x91, 0xd4, 0xd6, 0x21, 0x7d, 0x49, 0xbb, 0x2f, 0x68, 0x9d, 0xfb, 0x69, 0x7b, + 0x6d, 0x47, 0x6f, 0xaa, 0x6f, 0xf3, 0x95, 0xe8, 0x16, 0x10, 0x20, 0xc5, 0x63, 0x7b, 0xc0, 0x85, + 0x3a, 0xde, 0xbf, 0x2b, 0x39, 0x70, 0x24, 0xde, 0x1f, 0x05, 0x32, 0x9a, 0x71, 0x93, 0xd2, 0x29, + 0xa3, 0xa8, 0x49, 0x4e, 0x43, 0xf3, 0x64, 0xec, 0xdb, 0xe4, 0x99, 0x63, 0x80, 0x2b, 0x6c, 0x63, + 0xcb, 0xb6, 0xc9, 0xf3, 0xeb, 0x1d, 0xd6, 0xe3, 0x45, 0x78, 0xad, 0x18, 0x2c, 0xed, 0xd6, 0xe3, + 0x82, 0x85, 0xd1, 0xb4, 0xb9, 0xe9, 0x32, 0x6e, 0x35, 0x89, 0xc3, 0x97, 0x1c, 0xb1, 0x4f, 0xb6, + 0x72, 0x28, 0xc7, 0x1b, 0x52, 0xbc, 0x05, 0xc5, 0xee, 0x8e, 0x6e, 0xe0, 0x05, 0x14, 0x52, 0xbc, + 0xe5, 0xab, 0x74, 0x0e, 0x1d, 0xb7, 0x15, 0xab, 0x09, 0x48, 0x0d, 0x7c, 0xa7, 0xc5, 0x4e, 0xc2, + 0xce, 0xea, 0x90, 0x74, 0xe4, 0x08, 0xdc, 0xbe, 0x22, 0xb0, 0xe4, 0xa7, 0x0e, 0x97, 0x25, 0x1e, + 0xad, 0xf5, 0x10, 0x49, 0x94, 0x08, 0xfb, 0x6e, 0xb4, 0x2f, 0x96, 0xf1, 0x80, 0xfc, 0x76, 0xd3, + 0xc3, 0x52, 0x18, 0xd1, 0xc3, 0x52, 0x56, 0xa5, 0x95, 0xd4, 0xc3, 0xb2, 0x8a, 0x9d, 0xca, 0xcd, + 0x87, 0xcc, 0xff, 0x86, 0x43, 0xb3, 0x0d, 0x40, 0x0e, 0x06, 0x02, 0x4a, 0x7d, 0x84, 0x90, 0x3e, + 0x05, 0x3f, 0xcb, 0x48, 0x9a, 0x5a, 0x1b, 0x97, 0xaf, 0x56, 0x25, 0x59, 0x70, 0x1f, 0x48, 0x7c, + 0x8e, 0x80, 0x25, 0xa4, 0xfc, 0xde, 0xde, 0xa2, 0x1d, 0xdf, 0x9f, 0x1c, 0xda, 0x93, 0x3a, 0xf3, + 0x03, 0xcb, 0x80, 0x69, 0x97, 0x5a, 0x86, 0x8f, 0x0d, 0x00, 0x69, 0x96, 0xe8, 0x35, 0x68, 0x31, + 0xf7, 0x11, 0x6f, 0xc6, 0x89, 0xf0, 0x97, 0x68, 0xaa, 0x55, 0x3a, 0xe0, 0xd2, 0x7b, 0x89, 0x55, + 0x75, 0xee, 0x20, 0x61, 0xcb, 0x5f, 0x5f, 0xd9, 0x14, 0xae, 0x6d, 0x68, 0x5e, 0xef, 0x0f, 0xb0, + 0x43, 0xbf, 0x8d, 0xa6, 0xdb, 0x99, 0xf0, 0x5b, 0x37, 0xb8, 0xe1, 0xfc, 0x48, 0x5f, 0xc7, 0xeb, + 0x52, 0x58, 0xb5, 0x65, 0xa9, 0x52, 0x4b, 0x16, 0xda, 0x92, 0x25, 0x38, 0xc4, 0xfd, 0xe2, 0x3a, + 0xf6, 0x32, 0xd9, 0x3c, 0x28, 0xc8, 0xc9, 0x61, 0x93, 0x64, 0xfd, 0xf1, 0xed, 0xd1, 0xd9, 0x7b, + 0x96, 0xa5, 0xbf, 0x12, 0xdd, 0x02, 0xaa, 0x43, 0x56, 0xe8, 0x93, 0xea, 0xbb, 0x00, 0xc0, 0x0f, + 0x3a, 0xc4, 0xc4, 0xee, 0x13, 0x5a, 0xe7, 0xe7, 0x97, 0x39, 0x53, 0x9c, 0x7f, 0x99, 0x63, 0x05, + 0xf2, 0x97, 0x39, 0x2a, 0x26, 0xbf, 0xcc, 0x11, 0xe1, 0xb6, 0xd5, 0x2d, 0x89, 0x11, 0xfd, 0x5e, + 0xe6, 0x58, 0x99, 0xec, 0x65, 0x8e, 0x11, 0xa2, 0x5e, 0xe6, 0x58, 0x09, 0xa8, 0xf9, 0x0d, 0xa8, + 0xa3, 0xf1, 0xae, 0xfe, 0x32, 0x07, 0xcd, 0xb0, 0x6d, 0x42, 0xb8, 0x69, 0xac, 0x3b, 0x69, 0xd4, + 0x5a, 0xbc, 0x99, 0xe6, 0xa6, 0xe3, 0x83, 0x49, 0x5c, 0x26, 0x6f, 0xc4, 0x2b, 0x16, 0xa4, 0x3e, + 0xfb, 0x0a, 0x4e, 0x56, 0x27, 0x1c, 0x98, 0xd3, 0x21, 0xee, 0x4c, 0x7f, 0x40, 0x39, 0x11, 0x6f, + 0x78, 0x03, 0xf1, 0x61, 0x9a, 0xe5, 0x66, 0xbf, 0x03, 0x69, 0x04, 0x70, 0x33, 0xf1, 0x55, 0x56, + 0x6e, 0x07, 0xea, 0xce, 0xab, 0x83, 0xad, 0x00, 0x25, 0x89, 0x9e, 0xb6, 0xab, 0x83, 0x6d, 0xc0, + 0x62, 0x11, 0xb1, 0x25, 0x38, 0x78, 0x18, 0x46, 0x1b, 0xa6, 0xad, 0xdd, 0xa7, 0x3d, 0x32, 0x1e, + 0x8f, 0xff, 0xbd, 0xd3, 0x9b, 0x2a, 0x6f, 0x94, 0xde, 0x54, 0xf8, 0x51, 0x75, 0x78, 0x53, 0xcd, + 0x67, 0xbd, 0xa9, 0xe8, 0x92, 0xd3, 0x38, 0x54, 0x2d, 0x53, 0xa5, 0x4a, 0x54, 0x2e, 0x38, 0xe1, + 0x40, 0x9c, 0xcd, 0xde, 0x06, 0xfd, 0x2d, 0x71, 0x77, 0x4c, 0xb9, 0xcc, 0xe1, 0x5d, 0x2c, 0xec, + 0x78, 0x10, 0xcd, 0x85, 0x41, 0xd6, 0xf8, 0x43, 0x91, 0x66, 0x6f, 0xc3, 0x7d, 0x3d, 0xda, 0x7d, + 0x3d, 0xda, 0x7d, 0x3d, 0xda, 0xbd, 0xa3, 0x47, 0xfb, 0x2b, 0x57, 0x3d, 0xda, 0x57, 0x63, 0x49, + 0x8f, 0xf6, 0x70, 0xe8, 0x21, 0x57, 0x3d, 0xda, 0x84, 0x8d, 0x80, 0x92, 0xac, 0x0a, 0xb5, 0x16, + 0x0e, 0x4d, 0x79, 0x2f, 0x18, 0x8e, 0xd8, 0x55, 0x69, 0xef, 0xaa, 0xd2, 0xaf, 0x04, 0x6b, 0x8d, + 0xf8, 0xba, 0xe5, 0x67, 0xea, 0x50, 0x77, 0x62, 0xd7, 0x11, 0xf2, 0x94, 0xfc, 0x70, 0x38, 0xd1, + 0x76, 0x30, 0xd9, 0xbd, 0x4d, 0x6f, 0xc1, 0xbe, 0x2e, 0x25, 0xac, 0xc6, 0x8d, 0x65, 0x72, 0x64, + 0xeb, 0xd8, 0xfc, 0xb7, 0x1c, 0xe2, 0x99, 0x12, 0x22, 0x69, 0x26, 0x76, 0x41, 0x5b, 0x38, 0x55, + 0xda, 0x20, 0xb8, 0xd4, 0x8b, 0xab, 0x9d, 0x65, 0x2e, 0x92, 0x25, 0x9f, 0xb2, 0x31, 0xa0, 0x44, + 0x16, 0xf9, 0x7d, 0xf5, 0xc5, 0xf8, 0x59, 0xda, 0xaf, 0x6d, 0xff, 0x36, 0x1e, 0xdb, 0x6d, 0x4e, + 0x36, 0xd9, 0xbd, 0x8d, 0xed, 0x70, 0xad, 0x7c, 0x46, 0x68, 0x9a, 0x9c, 0x07, 0xdd, 0xe4, 0x6c, + 0xbf, 0xaf, 0x5e, 0xfe, 0x89, 0xec, 0xf2, 0x79, 0xfe, 0x0b, 0x53, 0xe9, 0x37, 0x15, 0x0b, 0x35, + 0x9e, 0x74, 0x17, 0x6a, 0x38, 0x5e, 0x83, 0xbb, 0xab, 0xfb, 0x9b, 0x76, 0x0b, 0x74, 0x7f, 0xd3, + 0xef, 0xb4, 0xee, 0xcf, 0x54, 0x8d, 0xcc, 0xb8, 0x6e, 0xd5, 0x48, 0x97, 0x8b, 0x8e, 0x83, 0x1f, + 0x95, 0x8e, 0x63, 0xe9, 0xad, 0xd1, 0x71, 0x38, 0x75, 0x1b, 0xff, 0x2a, 0x9d, 0x6e, 0x63, 0xe6, + 0xe8, 0x75, 0x1b, 0xa1, 0x3b, 0xaf, 0xdb, 0xb8, 0x7e, 0x9d, 0xc6, 0xac, 0x7b, 0x57, 0xa7, 0x31, + 0xfb, 0x9e, 0xd0, 0x69, 0x0c, 0x58, 0x84, 0xb3, 0x73, 0x30, 0x1e, 0x7b, 0x7a, 0xb4, 0x78, 0xec, + 0xae, 0xcb, 0x68, 0x6d, 0x62, 0xc5, 0xb9, 0x37, 0x2a, 0x56, 0x8c, 0x72, 0x28, 0x2b, 0x60, 0x68, + 0x16, 0x1d, 0x21, 0x13, 0x75, 0x0a, 0x37, 0xdc, 0xe4, 0xad, 0x07, 0x09, 0xcc, 0x1b, 0xaa, 0x54, + 0x23, 0x64, 0x05, 0xc2, 0xe2, 0xab, 0xda, 0x9e, 0x21, 0x9d, 0x2a, 0xfe, 0x22, 0x36, 0x7c, 0xe0, + 0x3b, 0x1a, 0x6b, 0xcb, 0xf1, 0x30, 0xda, 0xdf, 0x9a, 0xc4, 0x91, 0xae, 0x78, 0xff, 0x97, 0x6c, + 0x5f, 0x39, 0x2b, 0x10, 0xe6, 0x5f, 0xa2, 0x8e, 0xd3, 0x15, 0x3a, 0xef, 0xf9, 0x80, 0xe9, 0xa3, + 0xc4, 0x96, 0x8b, 0x08, 0x28, 0x45, 0x9d, 0x03, 0x91, 0xd9, 0x8a, 0x5b, 0x11, 0x4c, 0xe9, 0xc6, + 0xe4, 0x09, 0xfb, 0xb3, 0x54, 0x49, 0xcd, 0x42, 0x9d, 0x59, 0x42, 0x3a, 0xee, 0xc7, 0xd0, 0xbd, + 0xb0, 0x7b, 0xf3, 0x23, 0x10, 0x2e, 0xfc, 0xdf, 0xd9, 0x68, 0x8a, 0x05, 0x74, 0x68, 0xac, 0x65, + 0xce, 0x11, 0x6b, 0x99, 0x05, 0x07, 0x8b, 0xff, 0xc1, 0x5a, 0x4a, 0x63, 0x64, 0xe1, 0xbb, 0x59, + 0x9c, 0x11, 0x38, 0x2d, 0x94, 0x05, 0x98, 0xd1, 0x12, 0xca, 0xc2, 0xf2, 0x85, 0xc4, 0xd1, 0x1d, + 0xc9, 0xde, 0x1f, 0x28, 0x71, 0xb0, 0xd1, 0x1a, 0xf5, 0x2b, 0x1b, 0x7f, 0x68, 0x61, 0xe6, 0x0f, + 0x39, 0x52, 0x46, 0xc2, 0xad, 0x63, 0xb9, 0x70, 0xeb, 0x27, 0xbf, 0x3d, 0x9d, 0x3a, 0xf5, 0xb9, + 0x35, 0x5d, 0xe4, 0x2f, 0x51, 0xee, 0x6f, 0x9b, 0x83, 0x54, 0x92, 0xb1, 0x20, 0xed, 0x17, 0xdf, + 0xd0, 0x5b, 0x81, 0x40, 0x03, 0x7a, 0x88, 0x73, 0xd9, 0xb1, 0x71, 0xd1, 0xf0, 0xa1, 0x2e, 0xad, + 0xf5, 0xbc, 0x0c, 0xf5, 0x37, 0x73, 0x1b, 0x6e, 0x32, 0x8b, 0x60, 0x61, 0x0f, 0x87, 0xa6, 0x5a, + 0x67, 0xce, 0x7b, 0xd0, 0xa4, 0xfa, 0xa6, 0x66, 0x12, 0xac, 0x24, 0x4c, 0x86, 0x61, 0x8b, 0xf8, + 0x07, 0xd1, 0xc4, 0xfa, 0xa6, 0xe6, 0xe5, 0xfe, 0x46, 0x7f, 0x24, 0x4c, 0x86, 0x34, 0x0b, 0xf8, + 0xc7, 0xd1, 0xd4, 0x46, 0xa5, 0x31, 0x18, 0xda, 0x44, 0x87, 0xc0, 0x3c, 0xb6, 0x6c, 0x2b, 0xe5, + 0x0b, 0xd1, 0x64, 0x28, 0x21, 0x03, 0x81, 0x2d, 0xb0, 0xa5, 0xac, 0xf0, 0x1f, 0x72, 0x50, 0x81, + 0xfb, 0x3d, 0xbd, 0x2f, 0xf9, 0xfa, 0x91, 0x49, 0xbe, 0x48, 0x9c, 0xa8, 0xb4, 0xe0, 0x20, 0xce, + 0x77, 0xe2, 0xed, 0x91, 0xc5, 0x60, 0x27, 0x39, 0x34, 0xe5, 0xf5, 0xe6, 0xb5, 0x44, 0x69, 0x2d, + 0x2b, 0xbf, 0xe5, 0x6b, 0x10, 0xda, 0x40, 0x0b, 0x08, 0xf2, 0x5b, 0xa8, 0x4a, 0x8f, 0x0a, 0x4c, + 0xb1, 0x38, 0x07, 0xc6, 0x37, 0x4b, 0x20, 0x0a, 0xb8, 0x91, 0x2c, 0x8f, 0x69, 0x5a, 0x56, 0xa5, + 0x4a, 0xe5, 0xe8, 0x15, 0xc1, 0xfa, 0x15, 0xb1, 0x90, 0x44, 0x1e, 0xfc, 0xe1, 0x63, 0xad, 0xe5, + 0x44, 0xe2, 0xf3, 0x68, 0xe2, 0xfb, 0x5d, 0xf6, 0xc1, 0x2e, 0x73, 0xcc, 0x30, 0x85, 0xe7, 0x72, + 0xd1, 0x2c, 0x73, 0x08, 0xa2, 0x56, 0xd0, 0xe7, 0xbb, 0xda, 0x29, 0xab, 0xc3, 0x11, 0x4c, 0x18, + 0x59, 0xdd, 0x13, 0xf1, 0xd8, 0x1e, 0x43, 0x5c, 0x57, 0x04, 0xc4, 0x4c, 0x99, 0x27, 0xd5, 0xf2, + 0x43, 0xea, 0x4c, 0x5f, 0x3c, 0xb6, 0xa7, 0xcc, 0x53, 0xdf, 0x10, 0x2e, 0xfd, 0xf0, 0xc3, 0x0f, + 0x2d, 0xf2, 0xb6, 0xdf, 0x22, 0xa4, 0x3f, 0x1b, 0x91, 0x90, 0x37, 0xa0, 0x44, 0xf0, 0x7d, 0xc9, + 0x07, 0x62, 0x82, 0x29, 0x16, 0x5f, 0x61, 0xf4, 0x7f, 0x1e, 0x50, 0xc5, 0x61, 0x33, 0xc4, 0x3d, + 0x3a, 0xb3, 0x07, 0x39, 0x6d, 0xa1, 0x90, 0x28, 0x4e, 0x2e, 0x0d, 0x1f, 0x38, 0x93, 0xec, 0xde, + 0x66, 0x06, 0xc8, 0x96, 0x99, 0xd1, 0xf8, 0xb5, 0xa6, 0x5d, 0x5d, 0xb6, 0x91, 0xfc, 0xf0, 0x79, + 0x7d, 0x1d, 0xc1, 0x66, 0x1f, 0x16, 0x54, 0x2c, 0x04, 0x21, 0x1c, 0x0e, 0xbc, 0x54, 0xe2, 0xb1, + 0x64, 0xc1, 0x8c, 0xed, 0x21, 0xce, 0xf2, 0x58, 0xfa, 0x06, 0x92, 0x38, 0x46, 0xfc, 0x47, 0xcd, + 0xee, 0x3e, 0xe7, 0xd0, 0x44, 0x2f, 0xd5, 0x4a, 0xe6, 0xd0, 0xe8, 0xc0, 0x9b, 0x04, 0xb3, 0x58, + 0x6c, 0x60, 0xb5, 0xd7, 0x94, 0xdb, 0xc0, 0x43, 0x80, 0x12, 0xd0, 0xa0, 0x9f, 0x0c, 0x2a, 0x36, + 0x96, 0xfc, 0x22, 0xf6, 0xbc, 0x47, 0x1b, 0xfa, 0x18, 0xfe, 0xc4, 0x06, 0x17, 0x50, 0x37, 0x1c, + 0xed, 0x4e, 0x5d, 0xda, 0x01, 0xfa, 0x46, 0xbc, 0x15, 0x8e, 0x51, 0xae, 0x95, 0xe7, 0x86, 0xb2, + 0xf5, 0x39, 0x9a, 0x13, 0xe0, 0x57, 0x52, 0x59, 0x61, 0xae, 0x71, 0xa0, 0x23, 0xc8, 0x0a, 0xd3, + 0x88, 0xcc, 0x48, 0x9f, 0xb2, 0x88, 0x2a, 0xfd, 0x16, 0x05, 0x05, 0x57, 0x08, 0x12, 0x25, 0x80, + 0x3f, 0x12, 0x26, 0xd8, 0xb8, 0x38, 0x26, 0xec, 0xc1, 0xb9, 0x91, 0xdd, 0xd8, 0xde, 0xb2, 0x08, + 0x4e, 0x93, 0x68, 0xa0, 0x71, 0x60, 0x5b, 0x9d, 0x8e, 0x80, 0x0d, 0x66, 0xe9, 0x99, 0xc2, 0x96, + 0x2c, 0x34, 0x95, 0x05, 0xfb, 0x31, 0x8f, 0xb3, 0x0d, 0x24, 0x63, 0x9b, 0xb5, 0xf8, 0x98, 0xfd, + 0x86, 0x02, 0xd6, 0x4c, 0x44, 0x4f, 0x41, 0xff, 0x11, 0x90, 0x4c, 0x7b, 0x16, 0x9a, 0xed, 0xb2, + 0xf3, 0x3f, 0xd6, 0xed, 0xf8, 0x27, 0x0e, 0x4d, 0xab, 0xc6, 0xe6, 0x09, 0x58, 0x65, 0xbd, 0x42, + 0x5f, 0xd8, 0x4a, 0xf3, 0xee, 0x73, 0x86, 0x8c, 0x58, 0x34, 0x6d, 0x6a, 0x47, 0x8d, 0xc1, 0xe8, + 0x45, 0x5f, 0x66, 0x41, 0xe3, 0x59, 0xa6, 0x83, 0xf5, 0x28, 0xd0, 0xb8, 0x05, 0x7f, 0xeb, 0x13, + 0x41, 0x8b, 0x05, 0xfb, 0x8c, 0xc5, 0x87, 0xe2, 0xb1, 0x3d, 0x06, 0x81, 0xce, 0xe2, 0x8b, 0xc4, + 0xe9, 0x63, 0xda, 0x60, 0x67, 0xe1, 0xdf, 0xcf, 0x45, 0xd3, 0x8d, 0x2e, 0x54, 0xb1, 0x72, 0xd8, + 0x45, 0xb1, 0x82, 0xa3, 0x10, 0x33, 0xc8, 0x3a, 0x38, 0x92, 0x62, 0x25, 0xd1, 0xb6, 0x4b, 0x7f, + 0xa2, 0x87, 0xf6, 0x8d, 0xa8, 0x5e, 0x21, 0x31, 0xc3, 0x60, 0x76, 0xf1, 0xc1, 0x6e, 0xc0, 0xd6, + 0xa0, 0x5c, 0x31, 0xbe, 0x72, 0xdb, 0x94, 0x2c, 0x36, 0x6e, 0x37, 0xfb, 0x46, 0xb9, 0xdd, 0x7a, + 0x46, 0x59, 0x03, 0xf8, 0x7a, 0x99, 0x2a, 0x95, 0x31, 0xca, 0x9a, 0x1b, 0x7f, 0x15, 0x4c, 0xe5, + 0xcc, 0xad, 0x46, 0xb8, 0xfc, 0x5b, 0x4e, 0x35, 0xca, 0x0b, 0xf6, 0xa8, 0x0e, 0xec, 0x54, 0x81, + 0x51, 0xce, 0xa0, 0xf3, 0x61, 0x54, 0x2a, 0xbf, 0x70, 0x51, 0xa9, 0x3c, 0x33, 0x82, 0x4a, 0x25, + 0xed, 0xb8, 0x77, 0x5d, 0xa9, 0xf2, 0x2b, 0x17, 0xa5, 0xca, 0x0b, 0xd7, 0xa1, 0x54, 0x99, 0x1e, + 0x9a, 0x6a, 0x51, 0xaa, 0xfc, 0xc4, 0xa2, 0x56, 0xd9, 0xe4, 0x54, 0xab, 0x4c, 0x12, 0xe7, 0x39, + 0x22, 0x57, 0x97, 0x07, 0x83, 0x0d, 0x10, 0xb7, 0x1a, 0x67, 0x19, 0xb7, 0xa8, 0x5c, 0x8a, 0x33, + 0xa8, 0x5c, 0x4c, 0xeb, 0xa4, 0x48, 0xa8, 0x59, 0xb1, 0x2a, 0x60, 0xfe, 0xa5, 0xab, 0x02, 0xe6, + 0xf8, 0x58, 0x52, 0xc0, 0x14, 0x84, 0xe6, 0xb8, 0x2a, 0x60, 0x7e, 0x62, 0xd5, 0xbc, 0x30, 0x0e, + 0x43, 0x93, 0xdd, 0x1d, 0x86, 0xec, 0x98, 0xee, 0x2e, 0x28, 0x0d, 0x9e, 0xb7, 0x47, 0x41, 0x79, + 0x24, 0xad, 0xd2, 0x80, 0x21, 0x0b, 0x89, 0xd6, 0xe0, 0x1c, 0x46, 0xcc, 0x04, 0xb5, 0x93, 0xdc, + 0x0b, 0x0f, 0xa7, 0x5b, 0x24, 0x69, 0x56, 0x1e, 0x52, 0xa5, 0xf5, 0x82, 0xd9, 0x4d, 0x7c, 0x8b, + 0x98, 0x8d, 0xc5, 0xf6, 0x80, 0x0b, 0xb1, 0x98, 0x3c, 0xd5, 0x01, 0xaf, 0x41, 0x99, 0x27, 0x1e, + 0xdb, 0x53, 0x5d, 0xa9, 0xa9, 0xed, 0xe6, 0xc3, 0x52, 0xe2, 0x89, 0x0f, 0x0c, 0x24, 0xb6, 0x75, + 0xc6, 0xfb, 0xa3, 0xc9, 0x53, 0x1d, 0x5a, 0xc7, 0xb7, 0x5a, 0x67, 0x1f, 0xcd, 0x5b, 0x34, 0x70, + 0xc2, 0xc0, 0xcf, 0xf1, 0xfe, 0x98, 0xb6, 0x63, 0x3b, 0xb5, 0xd3, 0x37, 0x3f, 0x67, 0xf7, 0x20, + 0x99, 0x36, 0xee, 0x3c, 0x48, 0xfc, 0x56, 0x03, 0xec, 0xe9, 0x06, 0x72, 0xaf, 0xb4, 0x1a, 0x60, + 0xff, 0x7c, 0x34, 0x06, 0xd8, 0x25, 0x74, 0x4e, 0xa4, 0xc4, 0x6a, 0x91, 0x6d, 0xb5, 0xea, 0x4d, + 0xe3, 0x8d, 0xe5, 0x00, 0xe2, 0xbb, 0x2e, 0x31, 0xde, 0xe8, 0xb0, 0xb9, 0x85, 0x48, 0x31, 0x38, + 0xb8, 0xbe, 0xdd, 0xe6, 0xf6, 0xb9, 0x1b, 0xb6, 0xb9, 0x75, 0xd8, 0xda, 0xba, 0x19, 0xae, 0xce, + 0x1c, 0xeb, 0x86, 0xab, 0xb3, 0x6e, 0xde, 0x70, 0xf5, 0x55, 0x34, 0x61, 0x23, 0xc9, 0xf2, 0x3f, + 0xdb, 0x60, 0xfc, 0x7f, 0x2a, 0x18, 0x65, 0x62, 0x81, 0x65, 0x87, 0x99, 0xac, 0x15, 0x94, 0x87, + 0x33, 0x9a, 0xda, 0xf8, 0xcc, 0x39, 0x63, 0x93, 0xcf, 0xbc, 0x7b, 0x62, 0xf8, 0x01, 0x4e, 0x95, + 0x2e, 0x70, 0xe8, 0x3b, 0x4e, 0x70, 0x10, 0xc9, 0x62, 0x29, 0x30, 0xa2, 0xda, 0x85, 0x6f, 0x40, + 0xb6, 0x4e, 0x05, 0x43, 0xb0, 0x5b, 0xe5, 0x15, 0x75, 0x44, 0x33, 0x8b, 0xb1, 0x6d, 0x06, 0xa1, + 0xf9, 0x6d, 0x93, 0x95, 0xff, 0xeb, 0x2c, 0x34, 0xc3, 0x36, 0xed, 0xb1, 0x2f, 0x8e, 0xac, 0xb3, + 0x89, 0x23, 0x5d, 0x92, 0x77, 0x34, 0xd7, 0x47, 0x20, 0x5c, 0x1c, 0x88, 0x23, 0xe7, 0xc3, 0x38, + 0x16, 0x20, 0x55, 0xdb, 0x41, 0x30, 0x48, 0x22, 0x26, 0x1b, 0xe6, 0x68, 0x8e, 0xdd, 0x10, 0x67, + 0xdb, 0xb0, 0xd1, 0x08, 0x3c, 0xe1, 0xff, 0x9a, 0x8d, 0xe6, 0x42, 0x90, 0x40, 0xa7, 0x39, 0xda, + 0x1a, 0x27, 0xd3, 0xf4, 0x2c, 0x36, 0x49, 0x32, 0x99, 0xa6, 0x7c, 0x03, 0xcd, 0x5d, 0x2b, 0x7f, + 0x28, 0x34, 0xdf, 0x95, 0xd2, 0x2d, 0xcb, 0xd1, 0xf9, 0x28, 0x96, 0xdb, 0x89, 0x13, 0x53, 0x01, + 0xf8, 0x2e, 0x7e, 0x19, 0x40, 0xce, 0x05, 0xd0, 0x29, 0xd8, 0x2a, 0xc5, 0xe3, 0x9c, 0x55, 0xef, + 0x7f, 0x25, 0xba, 0x85, 0xc6, 0x23, 0x23, 0x7e, 0x36, 0x3a, 0xee, 0x1b, 0x68, 0x81, 0xdc, 0x06, + 0xe4, 0x43, 0xa5, 0xe4, 0x79, 0x49, 0xb4, 0x45, 0xc1, 0x49, 0x9b, 0x25, 0x6e, 0xe2, 0xfd, 0x1d, + 0xf1, 0xc1, 0xee, 0xd4, 0xa9, 0x93, 0x5a, 0xe7, 0x9e, 0xf8, 0xc0, 0x40, 0x7c, 0x68, 0x9f, 0x19, + 0x2f, 0x0a, 0xf3, 0x2c, 0xfa, 0x37, 0x8c, 0x1c, 0x62, 0x06, 0x16, 0xd8, 0xed, 0x0f, 0x2f, 0x0d, + 0x86, 0xea, 0x15, 0x9f, 0xd6, 0x85, 0x53, 0xe2, 0x74, 0x74, 0x6a, 0x5d, 0xed, 0xda, 0x85, 0x13, + 0xf1, 0xa1, 0x9e, 0x2b, 0xd1, 0x2d, 0xb2, 0x6d, 0xda, 0xfc, 0x2b, 0x28, 0x3f, 0xd8, 0xa4, 0x53, + 0x78, 0xc1, 0x10, 0xcb, 0x85, 0xd1, 0x42, 0x71, 0x36, 0xcc, 0x97, 0xe0, 0x67, 0x1c, 0x1f, 0x2c, + 0x1e, 0x8b, 0xc9, 0xb4, 0x41, 0xd9, 0x4b, 0xaa, 0xf4, 0x3c, 0x7a, 0x4e, 0x48, 0x77, 0x40, 0x46, + 0x32, 0x07, 0x56, 0x57, 0x66, 0x91, 0x03, 0xc5, 0x72, 0x50, 0x81, 0x7b, 0xdf, 0xb1, 0x7f, 0x6d, + 0xd6, 0x8c, 0x4e, 0x8a, 0x8f, 0x5d, 0x80, 0xe1, 0xda, 0x2c, 0x20, 0xd7, 0xe6, 0xc2, 0x37, 0xb0, + 0x2d, 0xee, 0xb2, 0xfc, 0xdf, 0x8c, 0x42, 0x96, 0x8f, 0x9d, 0xd1, 0x72, 0xf5, 0x66, 0x61, 0x51, + 0x60, 0xf7, 0x98, 0x8d, 0x2b, 0x66, 0x08, 0xf6, 0xdb, 0xa9, 0x60, 0x7f, 0x2c, 0x19, 0xaa, 0xa6, + 0x3d, 0x77, 0x2b, 0xd4, 0xa5, 0x47, 0x10, 0x85, 0xff, 0x3e, 0x0b, 0x3d, 0x08, 0x1a, 0x53, 0xeb, + 0x20, 0x58, 0x59, 0x75, 0x3b, 0xd1, 0xc3, 0x0a, 0x43, 0xe1, 0x97, 0x35, 0x2a, 0x85, 0x1f, 0x8e, + 0x3e, 0x44, 0x14, 0x7e, 0x93, 0x9c, 0x4a, 0x3e, 0xbe, 0xdc, 0x8c, 0x93, 0x98, 0x6d, 0xc8, 0x55, + 0x1e, 0x32, 0xe3, 0x24, 0xf2, 0xf4, 0xe2, 0x69, 0x7b, 0x0e, 0x1a, 0x92, 0x15, 0x83, 0xaa, 0x20, + 0x8d, 0x8c, 0xbc, 0x2a, 0x19, 0xf7, 0x43, 0x2c, 0x20, 0x81, 0xce, 0x19, 0x3d, 0xc8, 0x70, 0x4b, + 0xc7, 0xf0, 0x67, 0x87, 0xad, 0xba, 0x66, 0x98, 0x56, 0x61, 0x5b, 0x36, 0x7a, 0x28, 0xc3, 0x70, + 0x63, 0xff, 0x82, 0xd6, 0x5b, 0x2e, 0xe8, 0x48, 0xa7, 0x84, 0x73, 0x40, 0xc1, 0x3d, 0x7d, 0x14, + 0x86, 0x83, 0xdd, 0xd2, 0xba, 0x76, 0x27, 0xbb, 0xb7, 0xb1, 0x7a, 0x5a, 0x70, 0x1e, 0x24, 0xef, + 0x9c, 0x4f, 0x95, 0xbc, 0xe8, 0x5d, 0x21, 0xf3, 0x4e, 0x89, 0xa5, 0xce, 0x9d, 0xb7, 0x8d, 0x38, + 0xfc, 0xd9, 0xe1, 0x0c, 0xa0, 0xde, 0x9b, 0x8f, 0xa6, 0xc3, 0x7d, 0xb9, 0x03, 0xaf, 0xdf, 0xb9, + 0x2c, 0x94, 0x6f, 0x3c, 0x24, 0xe4, 0xdd, 0xdb, 0x9b, 0xa5, 0x4a, 0x5d, 0x59, 0x02, 0x2d, 0x16, + 0xb7, 0x66, 0x91, 0xd0, 0xee, 0x38, 0xda, 0x26, 0x5c, 0x58, 0x6b, 0x68, 0xf7, 0x2b, 0xd1, 0x2d, + 0x6c, 0x65, 0x7c, 0xb0, 0x3b, 0xde, 0x1f, 0xd5, 0x2e, 0x9e, 0xb7, 0x3c, 0x81, 0xe4, 0x2c, 0x08, + 0x03, 0x6a, 0x84, 0xb7, 0xa7, 0xf2, 0x4d, 0x30, 0x2e, 0xa2, 0x71, 0x16, 0x13, 0xe7, 0x8e, 0x82, + 0xc9, 0x13, 0x3b, 0xb0, 0xb6, 0xe7, 0x74, 0xa2, 0xe7, 0x48, 0xea, 0x87, 0xad, 0xc3, 0xfb, 0x2e, + 0x5d, 0x1d, 0x6c, 0x4f, 0xf4, 0xb7, 0x24, 0xbb, 0xb6, 0xc3, 0x9b, 0xa7, 0x3f, 0xa0, 0x97, 0x3e, + 0xd1, 0x69, 0x8d, 0x7d, 0x97, 0xb4, 0xae, 0xdd, 0x5a, 0xe7, 0x59, 0x12, 0x2b, 0x14, 0x9b, 0x51, + 0xe9, 0xd3, 0x65, 0xb0, 0x2f, 0x3c, 0xb8, 0xc9, 0xaf, 0x76, 0x69, 0xad, 0x03, 0xa9, 0xcf, 0xbe, + 0xd2, 0xc7, 0xf9, 0x22, 0x06, 0x3e, 0x60, 0xfa, 0x52, 0x8f, 0x6f, 0xd3, 0x39, 0x16, 0x40, 0xdb, + 0x38, 0x7a, 0x97, 0xfe, 0xa0, 0xd2, 0xfd, 0xe0, 0x8f, 0x70, 0x88, 0x37, 0x5c, 0x45, 0xe1, 0xa0, + 0xb0, 0xbc, 0x00, 0xee, 0x73, 0x50, 0x95, 0x1a, 0x04, 0x97, 0x6a, 0x71, 0x0d, 0x01, 0x05, 0x92, + 0x9c, 0x59, 0x1f, 0x5c, 0x67, 0xbd, 0x7a, 0xf7, 0x27, 0xf7, 0x9d, 0x28, 0xf3, 0x44, 0x8c, 0x08, + 0xa5, 0x45, 0xc3, 0x7b, 0xa3, 0x89, 0xbe, 0xcd, 0xd0, 0xac, 0xd8, 0x13, 0x52, 0x22, 0x5e, 0x7f, + 0xa0, 0x28, 0x3e, 0xd0, 0x92, 0x3c, 0x35, 0x30, 0x7c, 0xe8, 0x78, 0x09, 0x84, 0x8e, 0x27, 0xd5, + 0x38, 0x5f, 0xa0, 0xf3, 0x5b, 0x6e, 0x34, 0x4d, 0xce, 0x3d, 0x4e, 0xd3, 0xe4, 0xde, 0x08, 0x4d, + 0xc3, 0xb7, 0x72, 0x68, 0xa6, 0xcf, 0x7a, 0xd7, 0xea, 0x83, 0x21, 0x08, 0xb7, 0x9c, 0x0f, 0x4e, + 0xad, 0x6e, 0xf5, 0xe2, 0x0b, 0x00, 0xc5, 0xda, 0x9e, 0x83, 0x30, 0x6a, 0x89, 0x07, 0xf6, 0x8b, + 0x6c, 0x16, 0xdd, 0x29, 0xf2, 0x65, 0x6c, 0x0d, 0xa7, 0xc5, 0x3e, 0x86, 0x6d, 0x92, 0xdd, 0x86, + 0x34, 0x82, 0xb3, 0x39, 0xae, 0xfe, 0x88, 0x74, 0xd5, 0xd7, 0x39, 0x68, 0x86, 0xad, 0xd3, 0x7d, + 0x82, 0xea, 0x5e, 0x25, 0xa8, 0x5e, 0x51, 0xa5, 0x17, 0xd1, 0xf3, 0x82, 0xf3, 0xc0, 0x47, 0x4d, + 0x49, 0xfd, 0x6d, 0x31, 0x9a, 0x6e, 0x64, 0x10, 0xa4, 0xcf, 0x8b, 0xbb, 0xf9, 0x40, 0x09, 0xfb, + 0xbc, 0x3c, 0x3c, 0x82, 0x46, 0xca, 0x94, 0x2c, 0xb0, 0x51, 0xad, 0x5d, 0x34, 0x49, 0x0b, 0x32, + 0x6b, 0x92, 0xac, 0xfa, 0xa3, 0x88, 0xc3, 0x49, 0xe7, 0xcd, 0x5b, 0xef, 0xa4, 0x43, 0x26, 0x6e, + 0x2a, 0x82, 0x9e, 0xb1, 0x79, 0xe9, 0x3c, 0x3c, 0x82, 0x22, 0x88, 0x2a, 0x7c, 0xea, 0xac, 0xbe, + 0x38, 0x2f, 0xde, 0xa0, 0x2f, 0x0e, 0x99, 0x10, 0x71, 0xc6, 0x79, 0xc9, 0xa9, 0x45, 0xf2, 0xa4, + 0x77, 0xc6, 0x31, 0x4e, 0xc1, 0xd4, 0x14, 0x55, 0xb9, 0x68, 0x8a, 0x1e, 0x1b, 0x41, 0x53, 0x44, + 0x46, 0x61, 0xf5, 0x42, 0x6f, 0xbb, 0xe9, 0x85, 0x9e, 0xbb, 0x61, 0xbd, 0x90, 0x55, 0xff, 0xf3, + 0xa6, 0x8b, 0xfe, 0xe7, 0x59, 0x55, 0xfa, 0xb9, 0x45, 0xff, 0xf3, 0x84, 0x4d, 0xff, 0xf3, 0xf6, + 0x86, 0x67, 0xc3, 0x25, 0x1e, 0xac, 0xf0, 0x79, 0x87, 0x55, 0x07, 0x59, 0x74, 0x3f, 0x1b, 0xae, + 0x57, 0xf7, 0x73, 0x33, 0xee, 0x36, 0x5f, 0xbb, 0x6a, 0x7b, 0xda, 0xc6, 0x8e, 0xb6, 0xe7, 0xde, + 0x89, 0x4e, 0x67, 0xc7, 0x61, 0x77, 0x41, 0xd9, 0xc4, 0x30, 0x73, 0x53, 0x6f, 0x90, 0x99, 0xe3, + 0xff, 0xdc, 0x8c, 0xee, 0x0c, 0xba, 0x9b, 0x3e, 0x4e, 0x95, 0xd6, 0xd1, 0x50, 0xb2, 0xbf, 0x62, + 0xf3, 0x47, 0x83, 0xa1, 0x5e, 0x6a, 0xeb, 0x10, 0xfc, 0xac, 0x90, 0xab, 0xa4, 0x55, 0xd5, 0x35, + 0xcb, 0xae, 0x0e, 0xb6, 0x93, 0x48, 0xce, 0x57, 0x07, 0xdb, 0x2b, 0xab, 0x96, 0x57, 0x91, 0xc2, + 0xa5, 0xd2, 0xf2, 0xd5, 0x72, 0xd5, 0xd5, 0xc1, 0x76, 0x9a, 0x22, 0x43, 0x5a, 0x55, 0xbd, 0xb2, + 0xc6, 0x68, 0x54, 0x55, 0x79, 0xad, 0xbc, 0x22, 0x24, 0xc9, 0xf9, 0xc6, 0x38, 0x66, 0x40, 0xe8, + 0x7c, 0x63, 0x14, 0x33, 0x22, 0xf4, 0x54, 0xeb, 0x20, 0xf2, 0x04, 0x32, 0x86, 0xfc, 0x13, 0x1a, + 0xda, 0x76, 0x54, 0xc1, 0xee, 0x1c, 0xc7, 0xf6, 0x23, 0x08, 0x76, 0xe7, 0x58, 0xf3, 0xb8, 0x0b, + 0x76, 0xb7, 0x1a, 0xe5, 0x43, 0x50, 0x27, 0x1a, 0xed, 0x0e, 0x23, 0x7e, 0x5a, 0x28, 0x0a, 0xf6, + 0x70, 0x77, 0xfa, 0xdb, 0x88, 0x73, 0x06, 0x81, 0x2f, 0x2f, 0x1b, 0xfd, 0x8e, 0xf6, 0xe2, 0xbf, + 0x73, 0x0b, 0x7f, 0xf7, 0x31, 0xa7, 0x4a, 0x9d, 0x56, 0xe5, 0x65, 0xf4, 0x96, 0x2b, 0x2f, 0xef, + 0x5a, 0xd0, 0x3b, 0x37, 0xcf, 0xae, 0x39, 0x63, 0xd4, 0xb3, 0x6b, 0xee, 0x3d, 0xe6, 0xd9, 0x55, + 0x70, 0xef, 0x7a, 0x76, 0x3d, 0x70, 0x4f, 0x78, 0x76, 0xd9, 0x82, 0xb1, 0xcd, 0xbb, 0x75, 0xc1, + 0xd8, 0xbe, 0xe3, 0xd0, 0x44, 0xaa, 0xa9, 0x2c, 0x98, 0x3f, 0xca, 0xb7, 0xc9, 0x55, 0xf5, 0x5f, + 0x75, 0xdb, 0x55, 0xff, 0xf4, 0x0b, 0xfc, 0x9b, 0x4c, 0x40, 0xaf, 0x07, 0x0d, 0xa3, 0xa8, 0xe7, + 0x98, 0x80, 0x5e, 0xa5, 0xd7, 0x15, 0xd0, 0x8b, 0x09, 0xe4, 0xe5, 0x34, 0x2a, 0x78, 0xe8, 0x8e, + 0x18, 0x15, 0xfc, 0xc1, 0x19, 0xc0, 0x6b, 0xc1, 0x88, 0x24, 0x39, 0x36, 0x65, 0x77, 0x04, 0xf7, + 0x7a, 0x64, 0xc4, 0xe0, 0x5e, 0xce, 0xa0, 0x5e, 0x3e, 0xab, 0x3d, 0xe2, 0xc3, 0x24, 0xbb, 0xb2, + 0x8b, 0x1a, 0xd4, 0x1f, 0x58, 0x0f, 0x1f, 0xbf, 0x45, 0x21, 0xbf, 0x3c, 0x63, 0xd0, 0x72, 0xe2, + 0x7d, 0xd6, 0x72, 0xe2, 0x91, 0x11, 0x8f, 0xe1, 0xa6, 0xac, 0x2a, 0x22, 0x96, 0xe4, 0x05, 0x10, + 0x35, 0x0e, 0x87, 0xa8, 0x62, 0x8a, 0xc5, 0x0a, 0xd6, 0x61, 0x8e, 0xcd, 0x03, 0x58, 0x92, 0x38, + 0x3a, 0xa8, 0x0d, 0x76, 0xc6, 0xfb, 0x63, 0x45, 0x11, 0x7f, 0xa3, 0xb2, 0xb0, 0x26, 0xf8, 0x41, + 0x51, 0xf1, 0xc2, 0xa5, 0xc1, 0x50, 0xa3, 0x37, 0x02, 0x25, 0xf2, 0xd2, 0x8a, 0x27, 0x9f, 0x7c, + 0xf2, 0xb9, 0xe2, 0x62, 0x4b, 0x4a, 0x84, 0x72, 0xd3, 0x1e, 0xec, 0xa7, 0x0c, 0x89, 0x6e, 0xd8, + 0x83, 0xf1, 0xd4, 0x1e, 0xcc, 0x85, 0x44, 0x37, 0xcc, 0xc2, 0x4e, 0x72, 0x68, 0x2a, 0xec, 0x2a, + 0x3d, 0x4c, 0x08, 0x06, 0xf7, 0x47, 0x55, 0xfa, 0x9d, 0x60, 0xab, 0x12, 0xfd, 0xda, 0xd0, 0xc7, + 0xb6, 0x7d, 0x06, 0x5c, 0x17, 0xef, 0x8f, 0x19, 0x67, 0x83, 0x4d, 0x36, 0x32, 0x1f, 0xb2, 0x69, + 0x22, 0xb6, 0x08, 0x8c, 0x38, 0xf0, 0x29, 0x5b, 0xe2, 0xa0, 0xc9, 0xb6, 0x4f, 0xbb, 0x45, 0x5c, + 0x7b, 0xec, 0x5e, 0x8d, 0xb8, 0x76, 0x3f, 0x88, 0xd6, 0xf5, 0x5a, 0xdb, 0xfc, 0x7b, 0x4e, 0x95, + 0xfe, 0x8e, 0x43, 0x7f, 0xcb, 0x09, 0x0e, 0xf9, 0x9f, 0xf8, 0x1d, 0xe7, 0xea, 0xa9, 0x0a, 0x6f, + 0x79, 0xaa, 0xef, 0x04, 0xb8, 0xa9, 0xc6, 0x07, 0x5a, 0xd8, 0x7c, 0x78, 0x44, 0x67, 0xa6, 0xb6, + 0xc7, 0x2f, 0x9d, 0x49, 0xf4, 0x7e, 0xee, 0x2e, 0xf4, 0x3f, 0xd6, 0xae, 0xa3, 0x07, 0x9c, 0x1d, + 0xe6, 0x4a, 0x74, 0x0b, 0xf1, 0x9c, 0x85, 0x78, 0x9d, 0x38, 0xdd, 0x0c, 0x15, 0xb8, 0x26, 0x3f, + 0xe9, 0xd7, 0x5a, 0xbe, 0x05, 0x91, 0x1c, 0xfe, 0xe8, 0x85, 0xc4, 0xd1, 0x8b, 0x89, 0x8e, 0x33, + 0xd0, 0x98, 0x04, 0x36, 0x35, 0x72, 0xeb, 0x38, 0xdd, 0x66, 0x0b, 0xff, 0x32, 0x1b, 0xcd, 0xb0, + 0xad, 0x6b, 0xfc, 0x99, 0xe3, 0xa4, 0xa1, 0xb4, 0x9d, 0xe6, 0x38, 0x54, 0x5f, 0xe9, 0x22, 0x03, + 0xff, 0xfd, 0x8d, 0x67, 0xfa, 0xbf, 0x05, 0x12, 0xea, 0x0a, 0x55, 0x7a, 0x05, 0xbd, 0x24, 0x38, + 0xcf, 0xc2, 0x50, 0x49, 0x5b, 0x60, 0x2c, 0x8d, 0x90, 0xfa, 0xef, 0x38, 0x34, 0x5b, 0x56, 0x22, + 0xa1, 0x4d, 0x8e, 0xec, 0x2e, 0x4f, 0x3b, 0x25, 0xd5, 0x05, 0xe9, 0x14, 0xa1, 0xac, 0x28, 0xfa, + 0x45, 0x46, 0x57, 0x94, 0x65, 0x58, 0x06, 0xcf, 0x66, 0x74, 0x45, 0x13, 0x41, 0x5a, 0x93, 0x8a, + 0xb6, 0x40, 0x3c, 0x11, 0xae, 0xc0, 0xc7, 0x18, 0xbf, 0xbc, 0xaa, 0x4a, 0x55, 0xa8, 0x42, 0x70, + 0x9f, 0x94, 0xb8, 0x00, 0x32, 0x1d, 0xc5, 0xfb, 0x77, 0x69, 0x9d, 0x7b, 0x9c, 0xf1, 0xe8, 0x2c, + 0x70, 0xfa, 0x45, 0x36, 0x9a, 0xe3, 0x36, 0xca, 0xd8, 0x07, 0xd6, 0x15, 0xa3, 0x03, 0x56, 0x3c, + 0x09, 0x00, 0xd6, 0xd9, 0xf0, 0x4c, 0xb8, 0xab, 0x6a, 0x5e, 0x1b, 0x85, 0xaa, 0x06, 0xc6, 0xc2, + 0x7e, 0xac, 0xe6, 0x58, 0x6c, 0xb6, 0x3d, 0x50, 0xca, 0x94, 0xad, 0x56, 0x25, 0x19, 0xd5, 0x0a, + 0x69, 0x36, 0x36, 0xc3, 0xf9, 0x64, 0xb6, 0x47, 0xdb, 0x95, 0x85, 0xa6, 0x2c, 0x53, 0x22, 0xe9, + 0xf4, 0xf0, 0x59, 0xb7, 0x4e, 0x0f, 0xdf, 0x40, 0x2c, 0xcf, 0x31, 0x7b, 0x02, 0x27, 0x82, 0x29, + 0x71, 0xb3, 0x54, 0x7c, 0xc9, 0xf9, 0x58, 0x5b, 0x22, 0x17, 0x51, 0xab, 0xf1, 0xdd, 0xa6, 0xbe, + 0x11, 0x6f, 0x19, 0xfc, 0x94, 0xcd, 0xa1, 0xca, 0x9e, 0x52, 0xa5, 0x25, 0x68, 0x91, 0x60, 0x5d, + 0x9b, 0xc8, 0x83, 0xf3, 0x6f, 0x5a, 0xc8, 0x3d, 0x99, 0x83, 0xa6, 0xb2, 0x3d, 0x7e, 0x74, 0x10, + 0xab, 0xa0, 0x5c, 0xcc, 0xcd, 0xa4, 0x43, 0xa7, 0x55, 0x2c, 0xab, 0x13, 0x58, 0x17, 0x04, 0x55, + 0x02, 0xf4, 0x11, 0x1f, 0xb1, 0x8d, 0xac, 0xb5, 0x9c, 0x8f, 0x0f, 0x90, 0x57, 0x8f, 0x7c, 0x05, + 0x5a, 0xde, 0x65, 0x0d, 0xa3, 0xa4, 0x4a, 0x2f, 0xa1, 0x17, 0x04, 0xdb, 0x49, 0xdb, 0x80, 0x23, + 0xf3, 0xb5, 0xf9, 0x1d, 0x21, 0x82, 0x98, 0xad, 0xe0, 0xd7, 0xa3, 0xc9, 0x86, 0x7a, 0x0d, 0xf3, + 0xf6, 0x80, 0xba, 0xf5, 0xc7, 0x42, 0xb0, 0x54, 0x18, 0x02, 0x2d, 0x2d, 0xb6, 0x4f, 0x3b, 0xb7, + 0x85, 0xe6, 0x19, 0x67, 0x35, 0x3f, 0x45, 0x91, 0x0d, 0xca, 0xa2, 0x0d, 0xcf, 0x86, 0x17, 0x61, + 0xcd, 0x4f, 0xb1, 0x6c, 0xe9, 0x5f, 0xd8, 0xcd, 0xa1, 0x19, 0x15, 0xef, 0x29, 0xf5, 0x1b, 0x70, + 0x10, 0x71, 0x12, 0x67, 0x80, 0x7f, 0x19, 0xe5, 0xfb, 0x03, 0x01, 0x25, 0x54, 0x5d, 0x1b, 0x2e, + 0xe0, 0xb0, 0xd0, 0x0e, 0x7b, 0xdc, 0xd3, 0x42, 0x71, 0x16, 0x70, 0xcc, 0xe0, 0xb8, 0x4c, 0xa5, + 0x76, 0xb4, 0xbe, 0xac, 0x52, 0x95, 0x24, 0xf4, 0xb2, 0xe0, 0x1c, 0x5a, 0x7c, 0x38, 0xf1, 0x79, + 0x34, 0x71, 0xe4, 0x44, 0x20, 0xe8, 0x53, 0x88, 0x9d, 0x0c, 0x36, 0x58, 0x5e, 0x5b, 0x4f, 0x24, + 0xa1, 0x97, 0x39, 0x3a, 0x4a, 0xe1, 0xf9, 0x6c, 0xc4, 0xb3, 0x23, 0x84, 0x9b, 0x82, 0x81, 0xb0, + 0x32, 0xd6, 0xaf, 0x51, 0x03, 0xbd, 0x46, 0xee, 0x79, 0x82, 0x1c, 0x0b, 0x5a, 0x58, 0xe9, 0x8d, + 0x78, 0x41, 0x66, 0x82, 0x93, 0x2d, 0xc2, 0xdd, 0x7a, 0x18, 0x06, 0xc7, 0x1b, 0x85, 0xb7, 0x0c, + 0x3e, 0x53, 0xb2, 0x41, 0xd9, 0x94, 0x38, 0xd8, 0x57, 0x5d, 0x0b, 0xb7, 0x6c, 0x5e, 0x1d, 0x9a, + 0x48, 0xbb, 0xdf, 0x40, 0x82, 0x76, 0x7d, 0x22, 0x32, 0x9e, 0x37, 0x4b, 0xfc, 0x12, 0xe3, 0x55, + 0x97, 0xcd, 0x37, 0x76, 0x8b, 0xe4, 0x18, 0xc0, 0x9a, 0x15, 0x27, 0x41, 0x72, 0x85, 0x43, 0xc8, + 0x1c, 0x99, 0xaf, 0x40, 0x13, 0xfc, 0xe1, 0xaa, 0x0f, 0xfd, 0x61, 0xc8, 0x80, 0x97, 0x4f, 0x92, + 0xbf, 0x90, 0x32, 0x71, 0x3e, 0x11, 0xbf, 0x30, 0xe0, 0x60, 0x28, 0xca, 0x7a, 0x65, 0xa3, 0x15, + 0x5f, 0xee, 0x7c, 0x4b, 0xb0, 0xac, 0x81, 0x79, 0x4b, 0x08, 0x54, 0x82, 0xae, 0xd9, 0x8d, 0xac, + 0x59, 0x6e, 0xd5, 0xb0, 0x67, 0x9b, 0x09, 0x2e, 0x2d, 0x1a, 0xf6, 0x02, 0xe7, 0x38, 0x2e, 0xda, + 0xf6, 0xc2, 0xbf, 0xcb, 0x42, 0x33, 0x57, 0x07, 0x2a, 0x82, 0x21, 0x5f, 0x30, 0x00, 0xab, 0xbd, + 0x35, 0xb7, 0x87, 0xaf, 0x73, 0x2e, 0xf5, 0xe7, 0xaa, 0xf4, 0x33, 0x76, 0xa9, 0x0b, 0x88, 0xd9, + 0x1c, 0x9d, 0x28, 0x46, 0x55, 0xb4, 0x1e, 0x07, 0x55, 0xf0, 0x70, 0xec, 0xda, 0x43, 0x46, 0xfe, + 0x98, 0x6c, 0x3c, 0xa5, 0x5f, 0xa9, 0xd2, 0x2f, 0x8d, 0xfc, 0x31, 0xb5, 0x64, 0x3e, 0x78, 0x8d, + 0x30, 0x9b, 0xab, 0x83, 0xed, 0x9a, 0xda, 0xee, 0x36, 0xcf, 0x78, 0xac, 0x7d, 0x38, 0xda, 0x16, + 0xef, 0x8f, 0xea, 0x1c, 0xcc, 0xe0, 0x41, 0xad, 0xa5, 0xd5, 0xd9, 0x9b, 0x24, 0x9f, 0x31, 0xac, + 0x74, 0xdc, 0x76, 0x49, 0x9c, 0x0f, 0xb2, 0x4e, 0xd2, 0xb9, 0xb3, 0x2f, 0x75, 0x76, 0xab, 0x16, + 0x3b, 0x09, 0x10, 0x55, 0x78, 0x39, 0x0b, 0xcd, 0xb2, 0x76, 0x1a, 0x1f, 0x77, 0xdf, 0x1a, 0xbf, + 0xe4, 0xa7, 0x6e, 0xb7, 0x6d, 0x65, 0x13, 0x51, 0xdf, 0xd6, 0x61, 0x3d, 0x20, 0xc9, 0xc0, 0x89, + 0xaf, 0x3c, 0x19, 0x93, 0x50, 0x20, 0x60, 0x45, 0x59, 0xad, 0x4a, 0x4b, 0x51, 0xa5, 0xe0, 0xba, + 0x1b, 0xe2, 0x7c, 0x16, 0x0a, 0x6c, 0x7b, 0xe8, 0xbc, 0x95, 0xff, 0x4b, 0x16, 0x9a, 0x71, 0x1f, + 0x5a, 0xd3, 0x43, 0xeb, 0xb3, 0xaa, 0xf4, 0x73, 0xf4, 0xa4, 0xe0, 0xdc, 0x23, 0x71, 0x01, 0x0b, + 0xab, 0xf1, 0xfe, 0x0e, 0x3b, 0xb8, 0xfe, 0x75, 0x16, 0xe2, 0xef, 0x03, 0xab, 0xb7, 0xec, 0x35, + 0x55, 0x5a, 0x86, 0xaa, 0x04, 0x97, 0xbd, 0xb0, 0x82, 0x80, 0x73, 0x0b, 0x9d, 0xd0, 0x1a, 0xcb, + 0x31, 0x24, 0x14, 0x2c, 0xb4, 0x56, 0x3b, 0xa0, 0xb5, 0x74, 0x14, 0xd0, 0x7a, 0xad, 0x7c, 0x82, + 0xca, 0xe5, 0xe4, 0x73, 0xd3, 0x7d, 0x0c, 0xdc, 0x5e, 0x34, 0x6d, 0x09, 0x60, 0xb7, 0x8f, 0x72, + 0xaa, 0xf4, 0x26, 0xb5, 0x25, 0xa8, 0x61, 0x27, 0x0c, 0x93, 0x2c, 0xb2, 0x6a, 0xf5, 0x17, 0x11, + 0x03, 0x80, 0x45, 0x86, 0xfe, 0x7f, 0x91, 0x54, 0x59, 0x59, 0x4a, 0x4c, 0x00, 0x16, 0xc9, 0x55, + 0x2b, 0x56, 0xae, 0xa9, 0x32, 0x7e, 0x16, 0x43, 0x42, 0x69, 0x87, 0x5d, 0x80, 0xd3, 0x86, 0x60, + 0x12, 0x33, 0x88, 0x3c, 0xd5, 0x3a, 0x0a, 0x35, 0x1e, 0x90, 0xad, 0x39, 0xe7, 0xb3, 0x8d, 0x98, + 0xc3, 0xa5, 0xd6, 0x9c, 0xf3, 0xee, 0xf7, 0x4e, 0x6f, 0xb1, 0x5e, 0x6f, 0x61, 0xc9, 0x31, 0xcf, + 0x2f, 0x67, 0xef, 0x71, 0x8e, 0xe1, 0xca, 0x77, 0x3d, 0xf7, 0x98, 0xbd, 0xc0, 0xcf, 0x9a, 0xd6, + 0x1e, 0xb9, 0x86, 0x21, 0xdb, 0x2c, 0xd3, 0xda, 0x63, 0x22, 0x19, 0x29, 0xda, 0x62, 0x5c, 0x7e, + 0x6a, 0xb0, 0x5f, 0xae, 0x4a, 0x2f, 0xa3, 0x17, 0x05, 0xe7, 0xe1, 0x8b, 0x0f, 0x81, 0xc7, 0x1e, + 0xe4, 0xde, 0x87, 0x01, 0xf0, 0xcd, 0x05, 0x18, 0x64, 0x29, 0xc7, 0x7f, 0xcc, 0x42, 0x3c, 0xdb, + 0x7f, 0x7c, 0x5c, 0xc8, 0x5f, 0x58, 0x2e, 0xa4, 0x2b, 0xad, 0x46, 0xee, 0x21, 0x8e, 0xca, 0x01, + 0xf7, 0xf0, 0x41, 0x92, 0xcd, 0xbb, 0xb5, 0x4b, 0xdb, 0x79, 0x44, 0x53, 0xdb, 0x21, 0x0f, 0x36, + 0x39, 0x66, 0x72, 0x2f, 0xeb, 0x54, 0xa9, 0x16, 0xd5, 0x08, 0x2e, 0x5b, 0x22, 0x3e, 0xc1, 0x8a, + 0x99, 0x88, 0x62, 0x13, 0xcf, 0xcd, 0xb4, 0x76, 0xc0, 0x14, 0x99, 0xf3, 0x82, 0xbe, 0x04, 0x34, + 0x1e, 0xcc, 0x88, 0x2f, 0x40, 0x13, 0xc2, 0xcd, 0xf5, 0xf5, 0x4a, 0x98, 0xdc, 0x4b, 0xd9, 0xf8, + 0xc9, 0xcf, 0x41, 0x79, 0xeb, 0x20, 0x79, 0x77, 0x16, 0xae, 0x20, 0xbf, 0x0a, 0x4f, 0x61, 0xa9, + 0x55, 0x7d, 0x30, 0xe4, 0xd3, 0x87, 0xd1, 0xd9, 0x1e, 0xe3, 0x92, 0xaf, 0x36, 0x90, 0x3f, 0x87, + 0x49, 0xe8, 0x59, 0x6e, 0x1b, 0xa1, 0xd3, 0x90, 0xf3, 0x8d, 0x27, 0x81, 0x27, 0x13, 0xef, 0x3b, + 0x99, 0xd8, 0xda, 0x62, 0x5c, 0xf9, 0x7c, 0x95, 0xcb, 0xcd, 0xe7, 0xa6, 0xa7, 0x26, 0xd8, 0xa8, + 0x11, 0xf7, 0x8f, 0x8a, 0x33, 0x20, 0x3a, 0x88, 0x05, 0xa0, 0xa0, 0x63, 0xa1, 0xc6, 0x61, 0x56, + 0x9e, 0xc5, 0x43, 0x2f, 0xa2, 0x09, 0x04, 0xd8, 0x08, 0x6f, 0xf6, 0x53, 0x55, 0x7a, 0x40, 0x30, + 0xca, 0xc4, 0xa9, 0x56, 0x2c, 0x84, 0x61, 0xfc, 0x43, 0x4e, 0x36, 0xea, 0xf9, 0x37, 0xd0, 0x84, + 0xf0, 0x7b, 0xc1, 0x0f, 0x6a, 0x3f, 0x30, 0xdc, 0x08, 0xb0, 0xce, 0xce, 0x28, 0x13, 0x8b, 0x49, + 0xf7, 0xbe, 0xed, 0xc9, 0xa3, 0x9b, 0x09, 0x5d, 0x7c, 0x6e, 0x5f, 0xf2, 0x78, 0xac, 0xc8, 0xd0, + 0x33, 0x74, 0xc0, 0xef, 0x62, 0xd9, 0xe8, 0xc3, 0x72, 0xa2, 0xec, 0x9d, 0xf1, 0xc0, 0x9d, 0x31, + 0x66, 0x42, 0x22, 0x96, 0x91, 0xed, 0x02, 0xa1, 0x85, 0x31, 0xab, 0xc2, 0xff, 0x39, 0x0b, 0x4d, + 0xa3, 0xdd, 0xc7, 0xc7, 0x95, 0x79, 0xcd, 0xc2, 0x6c, 0xb9, 0x43, 0x8a, 0xab, 0xc0, 0x82, 0x3c, + 0x44, 0x8c, 0xc0, 0xc2, 0xf0, 0x14, 0xb2, 0x6f, 0x81, 0xf8, 0x88, 0x65, 0xd3, 0x46, 0x75, 0x39, + 0x0c, 0xde, 0xfe, 0x28, 0x87, 0x78, 0x32, 0x1c, 0x0b, 0xe0, 0x37, 0x07, 0x3d, 0x65, 0xaf, 0xab, + 0xd2, 0xab, 0x68, 0xa9, 0xe0, 0x32, 0xb2, 0xf8, 0x78, 0xa6, 0xe3, 0xd6, 0x6f, 0x07, 0xac, 0x98, + 0x39, 0xf4, 0x64, 0x16, 0x9a, 0x69, 0x19, 0x68, 0x7c, 0x1c, 0x7c, 0x8d, 0x05, 0x57, 0x16, 0xb8, + 0x1d, 0x3c, 0x16, 0x2a, 0x8d, 0xf6, 0xf0, 0xbd, 0xaa, 0xf4, 0x6b, 0xf4, 0x2b, 0xc1, 0x6d, 0x2b, + 0xc4, 0xd2, 0x74, 0xdb, 0x78, 0x7d, 0xc0, 0x10, 0xcd, 0x02, 0x8c, 0x09, 0x8a, 0x4a, 0xfe, 0x6d, + 0x34, 0xd9, 0x70, 0x46, 0x61, 0x64, 0x3c, 0x18, 0x11, 0x58, 0x2a, 0xc4, 0x47, 0x13, 0x3d, 0x31, + 0xed, 0xd3, 0x5d, 0xf0, 0x49, 0xad, 0xf7, 0x40, 0xf2, 0xeb, 0x93, 0xf1, 0xfe, 0x6f, 0xa8, 0x79, + 0x23, 0x51, 0x6f, 0x5a, 0xfa, 0xf0, 0x3f, 0x43, 0xd9, 0x15, 0xb5, 0xab, 0xf1, 0x49, 0x4c, 0x81, + 0xed, 0xd4, 0x7f, 0x8b, 0xd3, 0x60, 0x0d, 0x15, 0xb5, 0xab, 0xc9, 0xe2, 0xf5, 0x52, 0x7e, 0x21, + 0xca, 0x6e, 0x54, 0x1a, 0x49, 0x82, 0x7f, 0x1c, 0x91, 0x56, 0xff, 0x6d, 0x60, 0x55, 0x6d, 0x7b, + 0x8b, 0xd6, 0x7b, 0xd0, 0x68, 0xdf, 0xa8, 0x34, 0xf2, 0xcf, 0xa2, 0xec, 0x65, 0xb5, 0xab, 0xf1, + 0xd6, 0x4f, 0x01, 0x6d, 0x8b, 0xfe, 0x5b, 0x7c, 0x10, 0xda, 0x2f, 0x33, 0x06, 0x67, 0x67, 0xb8, + 0x58, 0xd6, 0x9b, 0x14, 0x0e, 0x4c, 0x42, 0xf9, 0xc6, 0xf6, 0xf2, 0x6f, 0xa1, 0x7c, 0x1d, 0xbf, + 0xd6, 0x98, 0x01, 0x53, 0x5f, 0x52, 0xa5, 0xe7, 0x05, 0x5a, 0x28, 0x2e, 0x62, 0x69, 0xf5, 0x12, + 0x4f, 0xe2, 0x48, 0x57, 0x3c, 0xf6, 0x09, 0x55, 0x95, 0xc2, 0x6e, 0xb3, 0x4d, 0x64, 0xda, 0x95, + 0x7f, 0x1f, 0xc6, 0xc6, 0x1b, 0x9b, 0x65, 0x9a, 0x6a, 0xd0, 0x42, 0xf1, 0x65, 0x42, 0xd8, 0x11, + 0x8b, 0x62, 0x92, 0xe9, 0x0e, 0x5b, 0xbf, 0x91, 0x21, 0xd5, 0xf6, 0xea, 0xca, 0x0a, 0xf8, 0xbb, + 0xa8, 0x62, 0xcd, 0x8a, 0x45, 0xd5, 0x95, 0x15, 0xc5, 0x25, 0x5a, 0x67, 0x1f, 0xd9, 0x6f, 0x3a, + 0x14, 0xff, 0x2c, 0xca, 0xc3, 0x24, 0x89, 0x41, 0x87, 0x61, 0x90, 0x23, 0x45, 0xe2, 0x4c, 0x02, + 0x6b, 0xb1, 0x3d, 0xc6, 0xf9, 0x54, 0x57, 0xca, 0xa4, 0x92, 0x7f, 0xce, 0xc4, 0x03, 0x8c, 0xe9, + 0x3c, 0xc5, 0x03, 0x33, 0x58, 0x3c, 0x10, 0xef, 0x1f, 0xa8, 0xae, 0x35, 0x5f, 0x90, 0xa5, 0x2c, + 0xb5, 0x96, 0x6b, 0x28, 0xeb, 0x1f, 0x63, 0xa9, 0xb5, 0x02, 0x1b, 0x9d, 0x56, 0xe1, 0x46, 0xa7, + 0x2d, 0x41, 0xd9, 0x6b, 0x6a, 0x2b, 0x88, 0xa1, 0x3c, 0xfe, 0xbc, 0xfe, 0x5b, 0x9c, 0x6d, 0xeb, + 0xbb, 0xa6, 0xb6, 0xc2, 0x53, 0x5d, 0x29, 0xeb, 0x75, 0xfc, 0xdb, 0xd4, 0xde, 0x7f, 0x82, 0x29, + 0x96, 0x34, 0xec, 0xfd, 0x9f, 0x66, 0x3b, 0x42, 0x1a, 0x2c, 0xd3, 0xc6, 0xeb, 0xe2, 0x25, 0xed, + 0x82, 0x7e, 0x5d, 0x12, 0x17, 0xce, 0x69, 0x3d, 0xdf, 0xea, 0xf0, 0xb1, 0xf3, 0xa8, 0x76, 0xe1, + 0xd3, 0x64, 0x6f, 0x1b, 0xf5, 0x09, 0x58, 0x89, 0xf2, 0x7d, 0xca, 0x46, 0xbf, 0xbe, 0x4d, 0xc4, + 0x68, 0xfe, 0x49, 0x55, 0x5a, 0x2c, 0xd0, 0x42, 0xf1, 0xd1, 0x0a, 0x89, 0x66, 0x61, 0x4c, 0x9d, + 0xf9, 0x41, 0x3b, 0xbe, 0xa3, 0xba, 0x52, 0xeb, 0xbc, 0x80, 0x83, 0x3a, 0x98, 0xb7, 0x81, 0xb6, + 0xe7, 0xbf, 0x33, 0xc9, 0x7c, 0x30, 0x94, 0xff, 0x84, 0x53, 0xa5, 0x03, 0x1c, 0xa5, 0xf3, 0xdb, + 0x39, 0x96, 0xc4, 0x27, 0x29, 0xbe, 0xac, 0x64, 0xba, 0x07, 0xb2, 0x8e, 0xc5, 0xfb, 0x7b, 0x4d, + 0xe3, 0x61, 0x0f, 0xd8, 0xa5, 0xc5, 0xfb, 0x7b, 0x4b, 0x3c, 0x60, 0xdc, 0xab, 0x17, 0x12, 0x8f, + 0x3e, 0xbd, 0x90, 0x21, 0xe3, 0x49, 0x7f, 0xa0, 0xcc, 0x8c, 0xe6, 0x4c, 0xe5, 0x2e, 0x5a, 0x59, + 0x4c, 0x29, 0xfc, 0x83, 0x1c, 0x9a, 0x6a, 0x2c, 0x93, 0x04, 0x64, 0x43, 0xe9, 0xc9, 0x42, 0x92, + 0x3f, 0x12, 0x5b, 0x88, 0xd8, 0xba, 0x19, 0x90, 0xce, 0xda, 0xf2, 0x52, 0xa3, 0x99, 0xc4, 0xc1, + 0x3e, 0x40, 0x2e, 0x57, 0xa2, 0x9b, 0x2b, 0x6a, 0x57, 0x5f, 0x89, 0x6e, 0x5e, 0x51, 0xb5, 0xe2, + 0x4a, 0x74, 0xf3, 0xb2, 0xda, 0xd5, 0xc9, 0xde, 0x36, 0x72, 0xe7, 0x6d, 0x03, 0xf2, 0xed, 0x1c, + 0xca, 0xff, 0x28, 0x18, 0x00, 0x4f, 0xb9, 0x49, 0xee, 0xf8, 0xf7, 0x2d, 0x52, 0x0f, 0x5e, 0x61, + 0xb4, 0xb9, 0xb8, 0x8c, 0xca, 0x2a, 0x20, 0x99, 0xa4, 0x89, 0x29, 0x70, 0xf8, 0x1f, 0xbd, 0x9d, + 0x7e, 0x7f, 0xaf, 0x0e, 0xb6, 0xe3, 0x2e, 0x95, 0x45, 0xde, 0xa6, 0xd2, 0xf0, 0x7b, 0x4a, 0xe0, + 0xa3, 0xf7, 0x94, 0x40, 0xe9, 0x53, 0x9e, 0x45, 0x9e, 0x27, 0x9f, 0x59, 0xbc, 0x78, 0xf1, 0x53, + 0xc5, 0x32, 0x1d, 0x92, 0x6f, 0xe1, 0x50, 0x2e, 0x66, 0x67, 0xb0, 0x21, 0xbe, 0x4b, 0x92, 0xb7, + 0x1a, 0x83, 0xc9, 0x81, 0xfd, 0x81, 0xc6, 0xe2, 0xab, 0x36, 0x08, 0xa7, 0xad, 0x3c, 0xd5, 0x95, + 0x56, 0x60, 0x2a, 0x8a, 0x0f, 0xb4, 0x54, 0x48, 0x64, 0xe2, 0x43, 0x2a, 0x0e, 0x92, 0xb6, 0x9b, + 0x72, 0x4e, 0xc5, 0x32, 0x0c, 0xc8, 0x6f, 0x23, 0x56, 0x86, 0x46, 0xfa, 0x39, 0x1c, 0x52, 0x69, + 0x92, 0xf8, 0xa0, 0xdb, 0x74, 0x8c, 0x36, 0xe5, 0x3a, 0xb3, 0x23, 0x58, 0xba, 0x51, 0xac, 0x67, + 0x68, 0xae, 0xd8, 0x04, 0x77, 0x4c, 0x70, 0x13, 0x06, 0xf3, 0xb3, 0xdd, 0xcb, 0x7e, 0xa9, 0x4a, + 0x6b, 0xd0, 0x2a, 0x81, 0xa2, 0x59, 0xf1, 0x55, 0xe2, 0x49, 0xe0, 0x78, 0xbd, 0xec, 0xa6, 0x53, + 0x7d, 0x17, 0x13, 0xbb, 0x4f, 0x68, 0x6d, 0x1d, 0xc9, 0xaf, 0xfa, 0x12, 0xad, 0xfb, 0xb5, 0xe3, + 0xfb, 0x87, 0xb7, 0x9e, 0x86, 0x64, 0xa2, 0xa0, 0x58, 0x28, 0xfc, 0x17, 0x1c, 0x9a, 0xb5, 0xdc, + 0x1f, 0x8e, 0x58, 0x8c, 0xc4, 0x64, 0xe5, 0xb7, 0x7c, 0x08, 0x4d, 0xd6, 0xc9, 0xd0, 0x35, 0x86, + 0x8d, 0x1a, 0x67, 0xaa, 0xe4, 0x2c, 0x15, 0xe2, 0xf3, 0x40, 0xb6, 0x6e, 0x24, 0x5b, 0x42, 0x4d, + 0xe4, 0xde, 0x0b, 0x86, 0x23, 0xac, 0x55, 0x14, 0xa1, 0x73, 0xb5, 0x96, 0xd3, 0xc3, 0x5b, 0x4f, + 0x1b, 0xa4, 0xae, 0x65, 0x28, 0x23, 0xc6, 0xa0, 0xeb, 0x84, 0xc4, 0x02, 0x78, 0xb1, 0x59, 0x4b, + 0x37, 0x60, 0x0b, 0x0a, 0xff, 0x5d, 0x36, 0x9a, 0xed, 0xd2, 0x65, 0xec, 0x6b, 0xe7, 0xac, 0x94, + 0x6e, 0x5a, 0xed, 0x1c, 0xc4, 0x1c, 0xc7, 0xf4, 0x0e, 0xcf, 0x2a, 0xe5, 0x88, 0xa8, 0x0b, 0x54, + 0x73, 0x51, 0x2e, 0x9d, 0xd2, 0x6c, 0x41, 0x66, 0xa5, 0x19, 0xb1, 0x2d, 0xb4, 0xab, 0xcc, 0x1e, + 0x61, 0x55, 0x66, 0xe0, 0x5c, 0x35, 0xca, 0xd0, 0xc4, 0xee, 0x67, 0x21, 0x2e, 0x48, 0x77, 0x7e, + 0x23, 0xe8, 0xd2, 0xfe, 0x77, 0x72, 0xba, 0xb5, 0x24, 0x6e, 0xbe, 0x09, 0xa2, 0x2f, 0xb2, 0x6e, + 0x61, 0x9c, 0xf1, 0xda, 0xa5, 0x73, 0x0b, 0xcb, 0x09, 0x65, 0x15, 0xf8, 0x58, 0xaf, 0xb0, 0x97, + 0xe8, 0x9b, 0x07, 0x67, 0xfd, 0xf8, 0x88, 0xc1, 0x0e, 0x61, 0x08, 0xe3, 0x59, 0xbb, 0x2b, 0xe9, + 0xb3, 0x76, 0x73, 0x8c, 0x19, 0x07, 0x10, 0x18, 0xd8, 0xf2, 0xdc, 0x34, 0xe3, 0xa8, 0xa7, 0x66, + 0x1c, 0x45, 0xf1, 0xc1, 0xa3, 0x5a, 0xe7, 0x96, 0xc4, 0x81, 0xf3, 0x40, 0x25, 0xa7, 0xfa, 0x4e, + 0x90, 0x98, 0x42, 0xd8, 0x8a, 0xc8, 0x4c, 0x6e, 0x80, 0x8f, 0x93, 0xe0, 0x21, 0x6c, 0xc1, 0x74, + 0x14, 0x5c, 0x78, 0xa1, 0x1b, 0x7b, 0x56, 0xd0, 0xa8, 0x98, 0xb1, 0x0b, 0x21, 0xa2, 0x1d, 0xf7, + 0x23, 0x12, 0x1f, 0x25, 0x0a, 0x78, 0x9c, 0x3e, 0x01, 0xce, 0x22, 0xde, 0xbf, 0xcb, 0x54, 0x01, + 0xc3, 0x05, 0xde, 0x91, 0x87, 0xe6, 0xb8, 0xf5, 0xff, 0x71, 0xdd, 0xe0, 0x41, 0x0e, 0x4d, 0x27, + 0xfd, 0x4d, 0x43, 0xed, 0x3c, 0x3c, 0xf0, 0x0b, 0xf6, 0x81, 0xdd, 0x77, 0xcb, 0xf8, 0x9e, 0xcd, + 0x6a, 0x1b, 0xa7, 0x1f, 0x75, 0x0c, 0x2d, 0x3e, 0xcf, 0xaa, 0xe1, 0x2d, 0x26, 0xcc, 0xa4, 0x29, + 0x5e, 0xeb, 0xb6, 0xf8, 0xc5, 0x5d, 0xe0, 0x1d, 0x06, 0x12, 0x14, 0x38, 0x50, 0xd9, 0x31, 0x1c, + 0x4e, 0xb4, 0x6e, 0x47, 0x40, 0xf9, 0xa3, 0xd4, 0xda, 0xdf, 0x2a, 0x14, 0x34, 0xef, 0xd7, 0x68, + 0xb6, 0xeb, 0x1e, 0xb8, 0xa8, 0x51, 0x17, 0x59, 0xd5, 0xa8, 0x0f, 0xb8, 0xda, 0x32, 0x60, 0x9e, + 0x91, 0xd1, 0xa2, 0xfe, 0x5a, 0x95, 0xde, 0x46, 0xbf, 0x14, 0xd2, 0x40, 0xab, 0xf8, 0x04, 0xe0, + 0x38, 0x1b, 0xb8, 0x5f, 0x07, 0xb2, 0x6b, 0x9f, 0x8e, 0xa6, 0x62, 0xf4, 0x69, 0x62, 0xb9, 0x65, + 0x6e, 0x2e, 0xc4, 0x8f, 0x8d, 0x14, 0x8c, 0x16, 0x50, 0xd5, 0xdd, 0x4f, 0xf7, 0xf7, 0x92, 0xcd, + 0x91, 0xf8, 0x7a, 0x91, 0xec, 0xed, 0xc8, 0xed, 0xf7, 0xa2, 0xd3, 0x9d, 0xf8, 0x7a, 0xde, 0x8d, + 0x4a, 0x17, 0x6f, 0xe2, 0x47, 0x47, 0xf0, 0x26, 0x86, 0x41, 0x6e, 0x8f, 0x33, 0x71, 0x44, 0x09, + 0x47, 0xee, 0x98, 0x33, 0xf1, 0x2d, 0xcf, 0xcf, 0x77, 0xdf, 0x61, 0xf8, 0x16, 0x39, 0x0c, 0xff, + 0x4b, 0x93, 0x29, 0x86, 0xc0, 0xaf, 0x67, 0xee, 0xa4, 0x1f, 0x6d, 0x79, 0xe8, 0x95, 0xcc, 0x7e, + 0xb4, 0x79, 0x30, 0xc8, 0x68, 0xdc, 0x68, 0x9f, 0x47, 0x79, 0xc1, 0x75, 0xeb, 0xc2, 0x4a, 0x04, + 0x3b, 0x15, 0x4f, 0x01, 0x49, 0x2a, 0x29, 0x12, 0xa7, 0x11, 0x32, 0x72, 0x73, 0x67, 0xf2, 0xd4, + 0xc0, 0xf0, 0x8e, 0xce, 0x6b, 0xe5, 0x39, 0x42, 0x56, 0xd1, 0x4f, 0x64, 0x52, 0xcf, 0xbf, 0x80, + 0x72, 0x1b, 0xfc, 0x8d, 0xfe, 0x08, 0x76, 0x26, 0xc6, 0xa2, 0xac, 0xf9, 0x02, 0x94, 0x50, 0x0b, + 0x2e, 0x1c, 0x8f, 0x2a, 0xb1, 0xef, 0x2c, 0xee, 0x9d, 0x2b, 0x64, 0x17, 0xa4, 0x26, 0xc8, 0xd0, + 0xc4, 0x4a, 0x5e, 0x4d, 0xbf, 0xfb, 0xe4, 0x15, 0x5f, 0xc5, 0xf8, 0x9d, 0xce, 0xc0, 0xf3, 0x29, + 0x56, 0xa5, 0x87, 0x19, 0xbf, 0xd3, 0x99, 0x24, 0xd2, 0x7b, 0xea, 0xd2, 0x8e, 0xc4, 0x00, 0x09, + 0x7e, 0x61, 0xe0, 0x1b, 0xd3, 0xcf, 0xf4, 0x6e, 0x45, 0x50, 0xf5, 0x3a, 0x9d, 0x9d, 0x66, 0x9a, + 0xca, 0x91, 0x5b, 0xe2, 0xd0, 0x64, 0xb1, 0x87, 0x9e, 0x35, 0x6a, 0x7b, 0xe8, 0xb2, 0x63, 0x9c, + 0x2a, 0x1d, 0xe6, 0x50, 0x37, 0x27, 0xd8, 0x5e, 0x5c, 0x71, 0x07, 0xa7, 0xb5, 0x7e, 0xa1, 0x1f, + 0xe5, 0xe1, 0x63, 0xf1, 0x81, 0xf3, 0xec, 0xc6, 0x92, 0x37, 0xdc, 0xf0, 0x0b, 0x20, 0xaf, 0x3d, + 0x6e, 0x16, 0xef, 0x8f, 0x49, 0x01, 0x9f, 0xd6, 0xf2, 0x6d, 0xf2, 0xdb, 0x01, 0x33, 0x68, 0xca, + 0x91, 0xae, 0xe1, 0x63, 0x17, 0xd9, 0x66, 0x5a, 0x74, 0x10, 0x58, 0x7c, 0xbd, 0x4d, 0xeb, 0x21, + 0xed, 0xd2, 0x50, 0x72, 0xdf, 0x09, 0x12, 0x8d, 0x69, 0xef, 0xe9, 0x44, 0xef, 0x71, 0xf6, 0xa3, + 0x85, 0xff, 0x98, 0x8b, 0xa6, 0x59, 0x26, 0xf7, 0xe3, 0xa2, 0x88, 0xbf, 0x4f, 0x4f, 0x11, 0xff, + 0xdc, 0x8d, 0x22, 0x1e, 0x2b, 0xa4, 0x70, 0x34, 0x2d, 0x29, 0x7c, 0xa7, 0x78, 0xf1, 0xdb, 0x4e, + 0x08, 0x13, 0x77, 0x00, 0x3b, 0x74, 0x1a, 0x52, 0x9a, 0xeb, 0x20, 0x79, 0x0f, 0x64, 0x33, 0x8e, + 0xa9, 0x7c, 0x0b, 0x87, 0x50, 0xbd, 0x37, 0x00, 0xd1, 0x7d, 0x7c, 0x44, 0xea, 0x84, 0x9f, 0x55, + 0xa6, 0x58, 0x5c, 0xc5, 0x8e, 0x6f, 0x6e, 0x05, 0xa4, 0xda, 0xd9, 0x3a, 0xa4, 0x1d, 0x3f, 0x02, + 0x52, 0xdb, 0x22, 0x23, 0x76, 0xc0, 0x51, 0xd8, 0xbb, 0x40, 0xd0, 0xa7, 0x98, 0x8e, 0xa1, 0x6d, + 0x1d, 0x5a, 0xcb, 0xe6, 0xd4, 0x99, 0x7e, 0x68, 0x5b, 0x2c, 0x33, 0x5f, 0x70, 0x58, 0xeb, 0x66, + 0xdd, 0x26, 0x6b, 0x5d, 0xfe, 0x20, 0x87, 0x26, 0x7a, 0x9b, 0x23, 0xc1, 0xba, 0x7a, 0x6f, 0x83, + 0x42, 0xae, 0xd9, 0x47, 0xaa, 0xf4, 0x81, 0x60, 0x96, 0x8a, 0xef, 0x5b, 0x3c, 0x1f, 0xb1, 0x5a, + 0x43, 0x1b, 0xbc, 0x98, 0x88, 0x9e, 0x8a, 0x0f, 0xf6, 0x27, 0x07, 0xbf, 0x28, 0xf1, 0x68, 0x3d, + 0xa7, 0x75, 0x4a, 0xdd, 0x51, 0xa3, 0xcf, 0xa4, 0xad, 0x43, 0x27, 0xe8, 0xfb, 0x77, 0x19, 0xca, + 0x16, 0x98, 0x14, 0x19, 0xd1, 0xd1, 0x43, 0x36, 0x3f, 0x5b, 0x78, 0x9c, 0x43, 0x53, 0xad, 0xf0, + 0xc9, 0xbf, 0x8c, 0x72, 0x9b, 0x94, 0x50, 0xa3, 0xa1, 0xc6, 0x2f, 0xce, 0x0c, 0xce, 0x0b, 0x6b, + 0xf5, 0xb6, 0x18, 0xee, 0x64, 0xe8, 0x37, 0xef, 0x0d, 0x84, 0xcc, 0x42, 0x17, 0x60, 0x2c, 0xb5, + 0x02, 0x63, 0xba, 0xf8, 0xbc, 0x6c, 0xee, 0xb6, 0xb7, 0xd1, 0x74, 0x3b, 0x43, 0xc9, 0x2f, 0x33, + 0xe7, 0x99, 0x31, 0xcc, 0x2f, 0x7e, 0x29, 0xa0, 0xa9, 0x38, 0x99, 0x7d, 0xa8, 0xc9, 0x7c, 0x0b, + 0x77, 0x4f, 0x40, 0x0f, 0xe8, 0x30, 0x8e, 0x2d, 0x66, 0xab, 0x19, 0x79, 0x24, 0x31, 0xb4, 0x73, + 0xf8, 0xe2, 0x3c, 0x92, 0xde, 0x19, 0xc2, 0x70, 0xaa, 0x61, 0x54, 0x35, 0x37, 0x2b, 0x83, 0xa2, + 0xec, 0x51, 0xf6, 0xad, 0x63, 0x8f, 0x96, 0x5b, 0x0d, 0x91, 0x72, 0x0c, 0x8b, 0x5a, 0x8f, 0xd5, + 0x10, 0x69, 0x06, 0x5c, 0xa9, 0x1a, 0xb3, 0x88, 0x72, 0x9d, 0xac, 0x09, 0xd2, 0x52, 0x9b, 0x4a, + 0x14, 0xf8, 0x38, 0x1c, 0x30, 0xc2, 0xaa, 0x12, 0x9d, 0x06, 0x5a, 0x0b, 0xaa, 0x0c, 0xb5, 0x69, + 0x3f, 0xb7, 0x98, 0xe4, 0x2d, 0xb0, 0x6c, 0xef, 0xab, 0xd2, 0x7a, 0x4a, 0xdd, 0xbe, 0xc3, 0x2a, + 0x7c, 0xae, 0x9b, 0xba, 0xad, 0x1e, 0x81, 0xbc, 0x75, 0xa1, 0x4c, 0x27, 0xdc, 0x04, 0x65, 0x9a, + 0x7f, 0x23, 0x94, 0x29, 0x63, 0x5e, 0x32, 0xf1, 0x16, 0x99, 0x97, 0x7c, 0xc3, 0xa9, 0xd2, 0x19, + 0x0e, 0x7d, 0xc5, 0x09, 0xe9, 0x41, 0x1c, 0x07, 0x9f, 0x71, 0x27, 0x86, 0xc8, 0x17, 0xef, 0x30, + 0x49, 0xf4, 0xb7, 0xd9, 0x68, 0x9e, 0xdb, 0x6c, 0xc7, 0x9b, 0x89, 0x43, 0xb6, 0x9b, 0xdb, 0xab, + 0x91, 0xac, 0x3c, 0xe8, 0x53, 0x5c, 0x28, 0x24, 0x76, 0xc3, 0x09, 0x85, 0xd4, 0x78, 0xe3, 0x9e, + 0x8e, 0xf8, 0x0a, 0x3a, 0x48, 0x0d, 0x2b, 0x12, 0xb4, 0x4b, 0xf8, 0x89, 0x22, 0x2a, 0xc3, 0x01, + 0x18, 0x62, 0x7e, 0x17, 0x10, 0xc9, 0x4c, 0x06, 0xec, 0x98, 0x89, 0x26, 0x31, 0xcb, 0x67, 0x34, + 0xf0, 0xdc, 0x8d, 0x6b, 0xe0, 0xb3, 0xae, 0x53, 0x03, 0x6f, 0xb7, 0xdf, 0xc8, 0xbe, 0x0d, 0xf6, + 0x1b, 0x39, 0xd7, 0x63, 0xbf, 0x91, 0x7b, 0x9d, 0xf6, 0x1b, 0x79, 0xd7, 0x6d, 0xbf, 0xc1, 0x77, + 0x9a, 0x88, 0x15, 0x64, 0x59, 0x1f, 0xa8, 0x52, 0x84, 0x22, 0xd6, 0xf7, 0x9d, 0x9a, 0xf4, 0xab, + 0x83, 0xad, 0xe0, 0x98, 0xcc, 0xd2, 0x0d, 0xda, 0x99, 0xee, 0xf8, 0xc5, 0xb6, 0x64, 0xf7, 0x36, + 0x48, 0xa7, 0x49, 0x10, 0x2d, 0xa3, 0x47, 0x2f, 0xf1, 0x18, 0x78, 0xb8, 0xc4, 0xa3, 0x63, 0xdc, + 0xaa, 0xca, 0x12, 0x8f, 0x4d, 0x14, 0x60, 0x60, 0x59, 0x09, 0xe5, 0x81, 0xa6, 0x98, 0x48, 0xc5, + 0x20, 0x06, 0xa6, 0x5e, 0x24, 0x2e, 0xb0, 0xe9, 0x9a, 0xed, 0x3b, 0x4e, 0x3a, 0xf2, 0xbf, 0xb7, + 0xbe, 0x61, 0x20, 0x01, 0x7b, 0x4b, 0x95, 0x7e, 0x61, 0x7d, 0xc3, 0x6e, 0x9d, 0xc2, 0xd8, 0xf6, + 0xe6, 0x31, 0x64, 0x01, 0xba, 0x69, 0x43, 0x8e, 0x49, 0x37, 0x64, 0xc8, 0x31, 0xf9, 0xd6, 0x1b, + 0x72, 0xd4, 0xa0, 0xbc, 0x26, 0x6f, 0x38, 0xfc, 0x81, 0x8f, 0x48, 0x98, 0x70, 0x60, 0x1a, 0x52, + 0x24, 0x16, 0x1b, 0x81, 0x7d, 0x0f, 0x6b, 0xa7, 0x76, 0x69, 0xed, 0xfb, 0xe1, 0x29, 0x2a, 0xf1, + 0x90, 0xb8, 0x3e, 0x38, 0xd4, 0x58, 0xea, 0xd4, 0xe7, 0x5a, 0xdf, 0x76, 0x99, 0x74, 0xe1, 0xdf, + 0x41, 0xf8, 0x54, 0x89, 0x98, 0xa7, 0x5a, 0x95, 0x96, 0x0a, 0xe4, 0x00, 0xc5, 0x17, 0x6c, 0x07, + 0x0d, 0xf2, 0x67, 0xe6, 0x40, 0x9e, 0xf7, 0x98, 0x71, 0xce, 0xb0, 0xc6, 0x1b, 0x68, 0xef, 0x78, + 0x6c, 0x77, 0x85, 0x24, 0xe3, 0x61, 0x79, 0x89, 0xb1, 0x3b, 0x99, 0x66, 0x88, 0xcd, 0x0b, 0x19, + 0xbb, 0x93, 0x39, 0xee, 0x76, 0x27, 0x8c, 0xa5, 0xc9, 0x6f, 0x68, 0x10, 0xbe, 0xe9, 0x18, 0x63, + 0x3f, 0x91, 0x01, 0x63, 0x67, 0xc8, 0xe3, 0x4c, 0xf6, 0x1d, 0x67, 0x70, 0x26, 0xb7, 0xd6, 0x08, + 0xa1, 0xf7, 0x2a, 0xca, 0x8b, 0x78, 0xfd, 0x81, 0x88, 0x11, 0x2f, 0x6e, 0xb6, 0xd3, 0x0d, 0xd8, + 0x1f, 0x88, 0x90, 0xb7, 0x05, 0x5a, 0x8a, 0x93, 0x2d, 0xc6, 0x6e, 0xa4, 0x94, 0xff, 0x23, 0x9a, + 0xd2, 0x1c, 0xa8, 0xab, 0x7f, 0x4f, 0xf1, 0x35, 0x37, 0x78, 0xd7, 0x36, 0x28, 0x58, 0xc4, 0x33, + 0xa5, 0xfc, 0x4d, 0x55, 0x5a, 0x2d, 0x58, 0x6b, 0xc4, 0x4a, 0xd6, 0x4e, 0x9f, 0x8a, 0x3c, 0xb5, + 0xe8, 0xe0, 0x62, 0x90, 0x88, 0x6a, 0x9d, 0x5b, 0xe2, 0xfd, 0xbb, 0xa1, 0xd1, 0xd5, 0xc1, 0xf6, + 0x25, 0x86, 0x14, 0xb5, 0x83, 0xad, 0x90, 0xad, 0x83, 0xf2, 0x95, 0x8c, 0xed, 0xd7, 0x4c, 0x13, + 0xe8, 0x4d, 0xdb, 0xaf, 0x07, 0x2c, 0xb6, 0x5f, 0x1b, 0x9e, 0x0d, 0x7b, 0xf4, 0xaa, 0x80, 0xb7, + 0x51, 0x61, 0xac, 0xbc, 0x5e, 0x47, 0xb9, 0xde, 0xf5, 0x4a, 0x20, 0x82, 0x45, 0x39, 0x53, 0x20, + 0xff, 0x21, 0x94, 0x18, 0x34, 0x8e, 0xa4, 0xff, 0xf0, 0xd0, 0xb9, 0x2f, 0xd1, 0x7a, 0x4e, 0x27, + 0x63, 0x97, 0xae, 0x0e, 0xb6, 0x2f, 0xd6, 0x27, 0x88, 0x7f, 0xc8, 0xd0, 0x83, 0x2f, 0x44, 0xd9, + 0x7e, 0x5f, 0x3d, 0x49, 0x62, 0x33, 0x5d, 0x95, 0xa6, 0x08, 0xfa, 0x6f, 0x31, 0x2f, 0xd1, 0x13, + 0x4b, 0xb4, 0x5e, 0x92, 0xf5, 0x1f, 0xfc, 0x63, 0x28, 0x27, 0xe4, 0xad, 0xdf, 0x40, 0x92, 0xd3, + 0xcc, 0x50, 0xa5, 0xa9, 0x02, 0x2e, 0x80, 0x56, 0x9f, 0x9e, 0x97, 0xf1, 0x2f, 0xbe, 0x0c, 0x4d, + 0x02, 0xa8, 0xa8, 0x68, 0xf0, 0x86, 0xc3, 0x24, 0x6b, 0x3d, 0x66, 0x1f, 0xd8, 0x72, 0xdc, 0x49, + 0xfb, 0x74, 0x97, 0xcc, 0x16, 0xf2, 0x2f, 0xa1, 0x89, 0xe4, 0x85, 0xd9, 0xf8, 0x34, 0x8e, 0xc1, + 0x45, 0x9e, 0x33, 0xb3, 0x54, 0x9c, 0x0e, 0x6b, 0xf3, 0x37, 0x6d, 0x7c, 0x5a, 0xa7, 0xf4, 0x0f, + 0x47, 0x65, 0xb3, 0x92, 0xaf, 0x46, 0x53, 0x28, 0x7a, 0xc1, 0xdb, 0xfb, 0x80, 0x61, 0x61, 0xea, + 0x11, 0xac, 0x35, 0xc6, 0x6b, 0x92, 0x38, 0x77, 0x94, 0xd8, 0xcf, 0x59, 0xeb, 0xf9, 0xe7, 0xd0, + 0xc4, 0xb5, 0x1b, 0x2a, 0x48, 0x8a, 0xc9, 0x79, 0x78, 0x8b, 0xe7, 0xab, 0x52, 0x81, 0x60, 0x96, + 0x8a, 0x93, 0x70, 0xe6, 0x2e, 0x1d, 0x39, 0xe8, 0xd8, 0x88, 0x96, 0xf3, 0x11, 0x6b, 0xc6, 0xf1, + 0xf9, 0x69, 0x7c, 0x21, 0x99, 0x0b, 0x31, 0x9a, 0x7c, 0xe3, 0x64, 0xbe, 0x38, 0xd3, 0x38, 0x01, + 0x68, 0x4b, 0xbe, 0xf1, 0xa5, 0x60, 0x98, 0x84, 0x97, 0xfd, 0xa0, 0xe9, 0xdc, 0x47, 0x0b, 0xc5, + 0xf9, 0x16, 0x0b, 0x3f, 0x03, 0x5f, 0x18, 0xd6, 0x83, 0x46, 0x33, 0xfe, 0x7d, 0xfd, 0x9e, 0x85, + 0x37, 0xd0, 0x30, 0x4f, 0x58, 0x12, 0x44, 0x8a, 0xc4, 0x2a, 0x1b, 0x46, 0x4d, 0xb4, 0x7d, 0xa1, + 0x9d, 0xb9, 0x58, 0x5d, 0x5b, 0x42, 0x4d, 0xaa, 0x86, 0xd5, 0x56, 0xad, 0xef, 0x22, 0x84, 0xb4, + 0x27, 0x9f, 0xc2, 0xe4, 0x34, 0x89, 0xb1, 0x8e, 0x4d, 0x70, 0x64, 0x32, 0xdc, 0x5d, 0x4c, 0x64, + 0x6e, 0x98, 0x8c, 0xb3, 0xa4, 0x94, 0x58, 0xca, 0x5a, 0x0b, 0x51, 0x3a, 0x00, 0x90, 0x25, 0x4b, + 0xa1, 0xc1, 0x8a, 0x0a, 0x3f, 0xc9, 0x42, 0xf3, 0x75, 0x02, 0x6f, 0x05, 0x8e, 0xd7, 0x77, 0xeb, + 0x99, 0xde, 0xb2, 0x18, 0xa7, 0x4a, 0xe7, 0x39, 0xf4, 0x2d, 0x27, 0x64, 0xfa, 0x8e, 0xf8, 0x71, + 0x5a, 0xce, 0x03, 0x22, 0x09, 0xde, 0x1d, 0xfe, 0xe3, 0x3f, 0x66, 0xa3, 0x07, 0xdd, 0x67, 0xfd, + 0xe3, 0xe4, 0x40, 0xee, 0x6e, 0xac, 0x15, 0x62, 0xe2, 0x9d, 0xf1, 0x44, 0xc4, 0x47, 0x59, 0x96, + 0xc4, 0x05, 0x76, 0x32, 0x33, 0x26, 0x9d, 0x59, 0x68, 0xae, 0x19, 0x0a, 0xa0, 0x22, 0xa4, 0xf8, + 0x94, 0x40, 0xc4, 0xef, 0x6d, 0x90, 0x95, 0xdf, 0xf2, 0x5f, 0x70, 0x68, 0x62, 0x58, 0x09, 0x6d, + 0x54, 0x42, 0xaf, 0x1b, 0x17, 0xb4, 0x7c, 0x27, 0xa7, 0x4a, 0x7f, 0x14, 0xcc, 0x62, 0xf1, 0xb7, + 0xf1, 0xfe, 0x9d, 0x89, 0x9d, 0x84, 0x56, 0x49, 0x76, 0x6f, 0x4b, 0x0e, 0x6c, 0x8b, 0x0f, 0x9c, + 0x4f, 0x76, 0x6f, 0xdb, 0xa0, 0x6c, 0xd2, 0x41, 0xae, 0xef, 0x62, 0x3c, 0xb6, 0x7b, 0x43, 0xf3, + 0x5a, 0xa5, 0x14, 0x3f, 0x5a, 0x90, 0x33, 0x9c, 0xde, 0x16, 0xda, 0x02, 0x4b, 0x0f, 0x4b, 0x7d, + 0x21, 0xff, 0x46, 0x25, 0x44, 0x32, 0x28, 0x92, 0x5f, 0xd0, 0x23, 0xd1, 0xd3, 0x56, 0x5d, 0x6b, + 0xe4, 0x38, 0xa3, 0xb7, 0x8e, 0x4e, 0xc3, 0x90, 0xd8, 0xa6, 0x5b, 0x8b, 0xf8, 0x20, 0xbb, 0x4b, + 0x66, 0x15, 0x0d, 0x83, 0x41, 0x47, 0x2a, 0xbc, 0x9a, 0x85, 0x0a, 0xdc, 0x47, 0x19, 0xfb, 0xea, + 0x89, 0x77, 0x2c, 0x3e, 0x06, 0x8f, 0xa4, 0x01, 0x7f, 0x73, 0x4d, 0x96, 0xc8, 0x43, 0x04, 0x14, + 0xbf, 0x3d, 0xad, 0x6d, 0x6f, 0x4f, 0x76, 0x6f, 0x4b, 0xf5, 0x6d, 0x8e, 0x5f, 0x3c, 0x69, 0x71, + 0x39, 0x20, 0x61, 0x58, 0xd2, 0x6e, 0x4f, 0xda, 0x5d, 0xce, 0x0c, 0x83, 0x7f, 0x3f, 0x01, 0xcd, + 0xb3, 0x84, 0x13, 0x1a, 0xb7, 0x60, 0x68, 0x7d, 0x3d, 0xb2, 0x6e, 0x40, 0x64, 0xba, 0x1a, 0x4d, + 0xae, 0x6f, 0xf0, 0x2b, 0x81, 0xc8, 0x0a, 0x1c, 0xc9, 0x91, 0xf0, 0xe8, 0x4b, 0x74, 0x52, 0xd3, + 0x52, 0x21, 0xce, 0x86, 0x05, 0xeb, 0xcf, 0x39, 0x0e, 0x01, 0xa9, 0x75, 0x75, 0x68, 0xbd, 0x07, + 0xcc, 0x31, 0x2d, 0xad, 0xf9, 0x35, 0x68, 0x0a, 0x4c, 0x52, 0xf2, 0xf9, 0x42, 0x4a, 0x38, 0x4c, + 0xe4, 0x9e, 0x8b, 0xf5, 0xe3, 0xb7, 0xd6, 0x50, 0xb9, 0x2c, 0x04, 0x14, 0xc6, 0xd4, 0x1a, 0x4d, + 0xa6, 0x3a, 0x5d, 0xb6, 0x36, 0xe6, 0x97, 0x21, 0x54, 0xef, 0xad, 0x50, 0x42, 0x91, 0x4a, 0x1d, + 0xec, 0x72, 0x8d, 0x04, 0xdc, 0x0f, 0x0a, 0x4c, 0xb1, 0x38, 0x95, 0xc0, 0x83, 0x04, 0x8a, 0x25, + 0x12, 0x81, 0xcf, 0x23, 0x33, 0x6d, 0xf8, 0x5a, 0x34, 0xb1, 0x39, 0xac, 0x84, 0x56, 0x05, 0x37, + 0x28, 0x01, 0x22, 0x02, 0x15, 0x75, 0x4a, 0xc8, 0x2c, 0x15, 0xe7, 0xb1, 0x29, 0xea, 0x93, 0xdd, + 0xdb, 0x22, 0x7a, 0xa9, 0x25, 0xed, 0xe1, 0x74, 0xd9, 0x6c, 0xce, 0xd7, 0xa0, 0x29, 0x64, 0x5b, + 0x2b, 0x83, 0x8d, 0x5e, 0xbf, 0x61, 0xfb, 0x8f, 0x03, 0x04, 0x5a, 0x6b, 0xa8, 0x75, 0xd1, 0x91, + 0x23, 0x5a, 0x57, 0x07, 0x1d, 0xcb, 0xda, 0x88, 0x5f, 0x89, 0x10, 0x6c, 0xa9, 0x3e, 0x67, 0xc2, + 0xbb, 0x2f, 0xc2, 0xb9, 0xc6, 0xcd, 0x62, 0x23, 0xd7, 0xb8, 0x59, 0x02, 0xb7, 0x88, 0x59, 0x32, + 0xad, 0xe1, 0x5f, 0xd7, 0x61, 0x45, 0xff, 0xa5, 0x83, 0x35, 0xf0, 0xf0, 0xa5, 0x3a, 0x07, 0x67, + 0x96, 0x1a, 0xc1, 0x86, 0x69, 0x81, 0x6d, 0x34, 0xb3, 0x65, 0xd9, 0x3e, 0x4e, 0x95, 0xf6, 0x70, + 0x68, 0x37, 0x27, 0x64, 0xb8, 0x4a, 0x86, 0xeb, 0x65, 0x5a, 0x2c, 0xc8, 0x64, 0x8e, 0xb2, 0xc0, + 0xcf, 0x65, 0xce, 0x7a, 0xee, 0x97, 0x39, 0xe6, 0xec, 0x2e, 0x73, 0xe6, 0xae, 0x5f, 0xe6, 0xac, + 0xbb, 0x56, 0xb8, 0x3f, 0x0b, 0xcd, 0x4f, 0x3b, 0xa1, 0xb1, 0x9f, 0x1b, 0x5f, 0x67, 0x2f, 0x51, + 0x9d, 0x90, 0x69, 0x09, 0x69, 0x37, 0x35, 0x33, 0xd2, 0xeb, 0xce, 0x42, 0xf3, 0x2c, 0x59, 0x3e, + 0xc6, 0x11, 0xd2, 0xcb, 0xb2, 0xbe, 0xbd, 0xb5, 0xaa, 0xb4, 0x02, 0xbd, 0x2e, 0x64, 0x58, 0x8e, + 0xf8, 0x88, 0x25, 0x5f, 0x8e, 0xdb, 0x13, 0x63, 0x79, 0x83, 0x7b, 0xb2, 0xd0, 0xfc, 0xb4, 0xa3, + 0x8d, 0x7d, 0xa8, 0x21, 0x76, 0x94, 0x99, 0x96, 0x20, 0x16, 0xb2, 0x3b, 0x62, 0xbf, 0x8a, 0x23, + 0xc0, 0xce, 0xce, 0x5c, 0x54, 0xc0, 0xa8, 0xa6, 0xad, 0x90, 0xf3, 0x89, 0x0b, 0xe4, 0xfc, 0x41, + 0x95, 0xc2, 0x2c, 0xe0, 0xac, 0x63, 0x0f, 0x82, 0x82, 0x8f, 0x1d, 0x6a, 0x30, 0xd0, 0xa4, 0x87, + 0x18, 0x0b, 0xc0, 0xc0, 0x0f, 0xb6, 0xf1, 0xcf, 0xfc, 0x4d, 0xd4, 0xbc, 0xd0, 0x7c, 0x20, 0x5f, + 0x74, 0x3e, 0x90, 0x0f, 0xa7, 0x7f, 0x20, 0x49, 0x77, 0xf3, 0x79, 0x0c, 0x18, 0x48, 0x98, 0x49, + 0xc9, 0x55, 0xa3, 0x4a, 0x95, 0x02, 0x53, 0x2c, 0x3e, 0xad, 0x9d, 0xf9, 0x2c, 0xd1, 0x7a, 0x21, + 0xf9, 0x55, 0x1f, 0x24, 0xe6, 0xbe, 0x3a, 0xd8, 0x4e, 0x97, 0x73, 0x25, 0xba, 0xd9, 0x9c, 0xee, + 0x95, 0xe8, 0x66, 0x66, 0x25, 0xd4, 0x8e, 0xd1, 0x1c, 0x8a, 0xff, 0x15, 0x9a, 0x54, 0x1f, 0x0c, + 0x04, 0x94, 0x7a, 0xf8, 0x20, 0xbc, 0x9a, 0x65, 0xaa, 0xb4, 0x58, 0x60, 0xcb, 0xc5, 0x47, 0x86, + 0x3f, 0xfe, 0x21, 0xb1, 0xfb, 0x04, 0xfd, 0x5c, 0xf2, 0x93, 0xef, 0x52, 0x9b, 0xf7, 0x26, 0x5a, + 0xf7, 0xa7, 0xa2, 0x2d, 0xc3, 0xdd, 0xa7, 0x86, 0x37, 0x7f, 0x6c, 0xda, 0xac, 0x9a, 0xdd, 0x18, + 0x85, 0x5b, 0xee, 0x4d, 0x28, 0xdc, 0xf2, 0x6e, 0x40, 0xe1, 0x66, 0xd0, 0xcb, 0x69, 0xc1, 0xc8, + 0x30, 0xf6, 0xcd, 0x70, 0x63, 0x89, 0x79, 0xfb, 0x96, 0x6c, 0xd0, 0x21, 0x8f, 0x4b, 0x82, 0xb9, + 0xde, 0xc2, 0x2f, 0x8e, 0x82, 0x60, 0x2e, 0x51, 0xa5, 0x62, 0x42, 0x30, 0x3f, 0x32, 0xe2, 0xde, + 0x58, 0x3d, 0x75, 0xd3, 0xef, 0xd2, 0xa8, 0x37, 0x3b, 0x2d, 0x46, 0x98, 0x87, 0x0a, 0xaa, 0x03, + 0xfe, 0xc8, 0x52, 0xbb, 0xe5, 0xa4, 0xac, 0xfc, 0xb6, 0x70, 0x3e, 0x7a, 0x20, 0x4d, 0x5d, 0xb8, + 0xa9, 0xf0, 0x50, 0x16, 0x9a, 0x23, 0xf9, 0x7c, 0xa4, 0x52, 0xf1, 0x31, 0xa6, 0xd9, 0x6f, 0xb9, + 0xdb, 0x82, 0x72, 0xa6, 0xf0, 0xd3, 0xd5, 0x16, 0x74, 0x2a, 0x6b, 0xf9, 0x59, 0x5d, 0xe9, 0x6e, + 0xce, 0xf9, 0x82, 0x13, 0x0d, 0xe0, 0xbc, 0x51, 0x0c, 0x1a, 0x98, 0x0a, 0x46, 0x27, 0x6e, 0xc6, + 0x6d, 0x8a, 0x2a, 0xad, 0x45, 0xbf, 0x11, 0xd2, 0x4c, 0x5c, 0x7c, 0x54, 0x3b, 0xbb, 0x9d, 0x50, + 0x74, 0x3b, 0x8f, 0x6a, 0x2d, 0x27, 0x6c, 0xa6, 0xa8, 0x06, 0xb5, 0xe3, 0x36, 0x31, 0x4b, 0x40, + 0xc4, 0x9e, 0x2c, 0x34, 0xd7, 0xf5, 0x13, 0x63, 0xff, 0x05, 0x5a, 0xab, 0x4a, 0xef, 0xa2, 0x77, + 0x84, 0x74, 0xd3, 0x17, 0x85, 0xd1, 0x6c, 0xd1, 0x08, 0xaf, 0xd0, 0x7f, 0x9c, 0x89, 0x78, 0x23, + 0x16, 0x67, 0xb0, 0xd9, 0x67, 0x08, 0xd0, 0xde, 0x45, 0x13, 0x88, 0xd1, 0x26, 0x01, 0x95, 0x2a, + 0x55, 0x2a, 0x22, 0x81, 0x2e, 0xb1, 0x76, 0x71, 0x7e, 0x3c, 0xb6, 0x87, 0x9a, 0x65, 0xa7, 0x76, + 0x9d, 0x4b, 0xec, 0xdf, 0x41, 0x75, 0x8c, 0xd7, 0xca, 0xe7, 0x86, 0x66, 0x4f, 0xcf, 0x2a, 0x98, + 0xe5, 0x88, 0xa9, 0x29, 0x1b, 0xa3, 0xf2, 0x2f, 0xa2, 0x9c, 0x80, 0xe9, 0x2b, 0x50, 0x8c, 0xdd, + 0xe5, 0xf5, 0x02, 0x71, 0x36, 0x1d, 0x38, 0xde, 0xdf, 0xab, 0x8f, 0x4a, 0xbc, 0x05, 0x80, 0x64, + 0x79, 0x45, 0xc6, 0xad, 0xf8, 0xad, 0x1c, 0xca, 0x57, 0x7c, 0xfe, 0x08, 0x56, 0x22, 0xc0, 0x86, + 0xae, 0x57, 0x25, 0x9f, 0x40, 0x0b, 0xc5, 0x37, 0xe1, 0x91, 0xab, 0xf3, 0x7a, 0xeb, 0x74, 0x00, + 0x3c, 0xfc, 0x19, 0xd5, 0xc5, 0x10, 0xd3, 0x83, 0xce, 0xbe, 0xe4, 0xe0, 0xfe, 0xd4, 0x0f, 0x7b, + 0x20, 0xed, 0x01, 0xb1, 0x12, 0xc5, 0x7e, 0x05, 0xd8, 0x9e, 0x74, 0x1b, 0xa8, 0x0b, 0x69, 0x2e, + 0x4a, 0xd2, 0xbe, 0x6f, 0x8f, 0x4c, 0xbf, 0xc1, 0x1f, 0xe4, 0x10, 0x0a, 0x1a, 0x41, 0xa0, 0xc3, + 0x04, 0xff, 0x88, 0x0e, 0xfc, 0xe3, 0xd8, 0xde, 0x85, 0x34, 0x72, 0x34, 0x11, 0x3a, 0x57, 0xaa, + 0x92, 0x24, 0x30, 0x43, 0x89, 0x4f, 0x42, 0x40, 0x85, 0xc4, 0xd1, 0x1d, 0xda, 0x8e, 0xed, 0xa9, + 0x4b, 0x5d, 0xc9, 0x81, 0xef, 0xb4, 0x33, 0x9f, 0x26, 0x77, 0x9f, 0x25, 0x92, 0xdf, 0x73, 0xfb, + 0xc0, 0x9b, 0x01, 0x5e, 0x27, 0xc8, 0xae, 0x23, 0x33, 0x03, 0xf0, 0xdf, 0x73, 0x68, 0x32, 0x36, + 0x74, 0x35, 0x26, 0x97, 0x8b, 0x27, 0xf7, 0xd4, 0x28, 0x26, 0x57, 0xc5, 0x74, 0x83, 0xe9, 0xbd, + 0xad, 0x4a, 0x6f, 0x0a, 0x96, 0xe1, 0xc4, 0x57, 0xd9, 0x4c, 0x37, 0x34, 0x20, 0x34, 0x11, 0xd8, + 0xee, 0xf8, 0x12, 0x36, 0x0f, 0x6a, 0xd9, 0xc4, 0x37, 0x60, 0xcd, 0x06, 0xe2, 0x33, 0xd8, 0x7e, + 0xd9, 0x32, 0x2e, 0xff, 0x4f, 0x38, 0x2a, 0x7f, 0xb0, 0xd9, 0x67, 0x22, 0x57, 0xe2, 0x23, 0x38, + 0xcf, 0x65, 0xea, 0x06, 0x42, 0x27, 0xce, 0xd5, 0xf6, 0x9e, 0xe2, 0x56, 0x4e, 0x3f, 0xf5, 0xd8, + 0x1e, 0x1a, 0xe2, 0x9c, 0xea, 0x80, 0x53, 0xdf, 0x9d, 0x4c, 0xb4, 0x5e, 0x60, 0x35, 0xce, 0x34, + 0x6d, 0x3f, 0x9b, 0x4f, 0x10, 0xdc, 0x97, 0x89, 0xd4, 0x75, 0xe8, 0x63, 0x72, 0xfb, 0xae, 0x44, + 0x37, 0x13, 0xcf, 0x9a, 0x78, 0xff, 0xae, 0xc4, 0x37, 0xc7, 0x12, 0x3d, 0x6d, 0x10, 0xaa, 0x2b, + 0x71, 0xe0, 0x7c, 0x7c, 0xb0, 0x1b, 0xd4, 0x7c, 0xfa, 0x9a, 0x21, 0x31, 0xad, 0x7d, 0x5a, 0xfc, + 0xef, 0xd0, 0xe4, 0x60, 0x78, 0x05, 0x5e, 0x06, 0xf6, 0xac, 0x98, 0x80, 0x17, 0x38, 0xc7, 0xbe, + 0xc0, 0x95, 0x75, 0xd8, 0x97, 0xf9, 0x65, 0x55, 0x7a, 0x41, 0xb0, 0x74, 0x10, 0x4b, 0xe8, 0xb2, + 0x56, 0x12, 0xe8, 0xa6, 0x0b, 0x63, 0x43, 0xb9, 0x13, 0x1c, 0x64, 0xe9, 0xcb, 0xab, 0x1c, 0x9a, + 0x41, 0x3e, 0xc4, 0x4c, 0x21, 0x3f, 0xcd, 0x1e, 0x93, 0x86, 0xeb, 0x43, 0xe5, 0x3a, 0xb1, 0x21, + 0x38, 0x7b, 0x8a, 0x8b, 0xe9, 0x5c, 0xd8, 0xfc, 0x3f, 0x30, 0x2b, 0x1d, 0x5a, 0x31, 0x6c, 0x58, + 0xe6, 0xe3, 0x1c, 0x84, 0xdf, 0xc5, 0xa1, 0x99, 0x54, 0x0b, 0xc4, 0x4c, 0x0b, 0xa5, 0x77, 0x66, + 0x86, 0xa6, 0xeb, 0x43, 0xe5, 0xcf, 0xab, 0xd2, 0xb3, 0x82, 0x5b, 0x6f, 0xf1, 0x11, 0x3a, 0x35, + 0x8b, 0xc5, 0x21, 0x3b, 0x17, 0xb7, 0x7e, 0xfc, 0x1b, 0x66, 0x42, 0x82, 0x49, 0x86, 0x79, 0xc5, + 0x3c, 0x33, 0x21, 0xc1, 0x34, 0xe3, 0x35, 0xff, 0x44, 0x1b, 0x88, 0xe1, 0x58, 0x52, 0x19, 0xf0, + 0x1d, 0xc9, 0x4f, 0xb0, 0x1c, 0x4d, 0xc1, 0x50, 0x50, 0x6b, 0xb8, 0x37, 0x4d, 0x36, 0x8c, 0xe9, + 0x7e, 0x2a, 0x58, 0x6b, 0x44, 0x1e, 0x52, 0xd1, 0xc0, 0x7d, 0x07, 0x6a, 0x54, 0xb6, 0x36, 0xe1, + 0xa3, 0x1c, 0xca, 0xab, 0x07, 0xf7, 0x7c, 0x50, 0x73, 0xbf, 0xa7, 0x4a, 0x8a, 0x40, 0x8a, 0xc4, + 0xb7, 0xe1, 0xde, 0x69, 0xbd, 0x07, 0x12, 0x67, 0xbe, 0x2f, 0xf1, 0xc4, 0x2f, 0x1d, 0xd6, 0x7a, + 0x0f, 0x0e, 0x47, 0xb7, 0x0c, 0xb7, 0x74, 0x68, 0x5d, 0xdb, 0x92, 0xa7, 0x3a, 0xf0, 0x60, 0x3a, + 0x96, 0x63, 0x9c, 0xf3, 0x4b, 0x48, 0xc8, 0x1e, 0x08, 0xec, 0x8f, 0xe3, 0x6b, 0x05, 0x9b, 0x7d, + 0x9e, 0xf7, 0xc3, 0xc1, 0x40, 0xea, 0xd4, 0xe7, 0x89, 0x4f, 0xbb, 0x08, 0x30, 0x93, 0x8f, 0xf0, + 0x6f, 0x58, 0x93, 0x74, 0x4c, 0x35, 0x44, 0x29, 0x25, 0xd6, 0x34, 0x1c, 0x0f, 0x41, 0xea, 0x0d, + 0x48, 0x2a, 0xd0, 0x77, 0x32, 0x39, 0xb0, 0x3d, 0x3e, 0xb0, 0x2b, 0x39, 0xd0, 0x61, 0xe8, 0xd1, + 0xd8, 0x8c, 0x1c, 0xcb, 0x2d, 0x2e, 0x41, 0xa0, 0x0e, 0xc7, 0xa4, 0x1a, 0xeb, 0x12, 0x34, 0x3f, + 0x83, 0x19, 0xab, 0xc5, 0x0d, 0xa8, 0x1a, 0xe5, 0x29, 0x01, 0xfc, 0x3e, 0x4c, 0x37, 0xc4, 0x6f, + 0x0b, 0x05, 0x52, 0x24, 0x3e, 0x0a, 0x5e, 0x63, 0xc9, 0xb6, 0x56, 0x62, 0x91, 0x4b, 0xde, 0xdf, + 0x43, 0xc4, 0x3d, 0xa2, 0xb3, 0x2f, 0x75, 0x6a, 0xb3, 0x4c, 0x5a, 0xf3, 0x7f, 0xa0, 0x29, 0x6f, + 0xb0, 0x79, 0xf7, 0x0c, 0x77, 0xe5, 0x01, 0x46, 0xa2, 0x35, 0x66, 0x3b, 0xe2, 0x2a, 0xc5, 0xf4, + 0x14, 0x9f, 0x70, 0x47, 0x47, 0xd8, 0xf2, 0x91, 0x3d, 0x0c, 0x99, 0xed, 0xc5, 0xbf, 0x8f, 0xf2, + 0xf5, 0x4d, 0xc7, 0xdf, 0xe6, 0xf1, 0xb7, 0x1f, 0x76, 0xfd, 0x36, 0x04, 0x4a, 0x30, 0x83, 0x1a, + 0xd3, 0x5e, 0xe2, 0x02, 0xdb, 0x77, 0xe3, 0xb1, 0x3d, 0x96, 0xcf, 0xd1, 0x96, 0xfa, 0x45, 0x9c, + 0xdc, 0xd4, 0xe0, 0x8d, 0xac, 0x0b, 0x86, 0x1a, 0xf1, 0x07, 0x67, 0x8e, 0xfa, 0xdd, 0xa8, 0x65, + 0xba, 0xc1, 0xbb, 0x81, 0xb7, 0xdc, 0x32, 0x9c, 0xb8, 0xc0, 0x48, 0x35, 0x46, 0xd2, 0x47, 0xd8, + 0xa0, 0x50, 0xb6, 0xb4, 0x9e, 0xf7, 0x16, 0x9a, 0x66, 0x7b, 0x2a, 0x6f, 0x5d, 0xa2, 0x86, 0x5f, + 0xa1, 0x19, 0x8e, 0x97, 0xee, 0xd6, 0x8d, 0xfe, 0x32, 0x9a, 0xe1, 0xd8, 0x8f, 0xeb, 0xd2, 0x92, + 0xae, 0x51, 0xa5, 0x3a, 0xf4, 0x86, 0xe0, 0x42, 0x9c, 0x89, 0x33, 0x00, 0xf3, 0x90, 0x3b, 0x45, + 0xa2, 0x69, 0x11, 0xc2, 0xea, 0x32, 0x87, 0x09, 0xa4, 0xcb, 0x9c, 0x05, 0xe9, 0xeb, 0xf5, 0x80, + 0x88, 0x0a, 0xbf, 0xe3, 0xd0, 0x4c, 0xcb, 0x98, 0xe3, 0x42, 0x27, 0x58, 0xf8, 0x37, 0x33, 0x8d, + 0xd0, 0x7a, 0x16, 0x3a, 0xf5, 0x75, 0x3b, 0x9d, 0xba, 0x04, 0xc7, 0xf8, 0x25, 0x65, 0x23, 0x50, + 0xa9, 0x34, 0x87, 0x0c, 0xa1, 0x49, 0x5f, 0xb0, 0xd0, 0xa4, 0x45, 0x23, 0xd3, 0xa4, 0x64, 0x80, + 0xf1, 0x47, 0x92, 0x3a, 0x77, 0x72, 0x0c, 0x91, 0xa4, 0x2e, 0x93, 0xbb, 0x4f, 0x92, 0xde, 0x27, + 0x49, 0x7f, 0xdc, 0x24, 0xe9, 0xeb, 0x66, 0x60, 0xd3, 0x49, 0x06, 0xa2, 0x4b, 0x13, 0xd8, 0x14, + 0x88, 0xd1, 0x68, 0xbe, 0x38, 0x95, 0xa1, 0x46, 0x31, 0x31, 0x6a, 0xe4, 0xb3, 0xbd, 0x4f, 0x8c, + 0xde, 0x69, 0x62, 0xf4, 0x1d, 0x1b, 0x31, 0x5a, 0xa5, 0x4a, 0xe5, 0x94, 0x18, 0x7d, 0x76, 0x34, + 0xc4, 0x68, 0x11, 0xd8, 0x00, 0x45, 0x42, 0xcd, 0x4a, 0xa2, 0x75, 0x3f, 0x76, 0x34, 0x2d, 0xbe, + 0x4f, 0xa0, 0xa6, 0x27, 0x50, 0x5d, 0x5e, 0x91, 0xfb, 0x04, 0xea, 0xad, 0x24, 0x50, 0x49, 0x0e, + 0xa9, 0x59, 0xb0, 0xd1, 0xe4, 0xf1, 0x31, 0x48, 0x54, 0x92, 0xb3, 0x0f, 0x1c, 0x41, 0x9d, 0x34, + 0xaa, 0x81, 0x89, 0x0a, 0x77, 0x64, 0xa1, 0x99, 0x96, 0x93, 0x1a, 0x1f, 0x16, 0x6a, 0x6f, 0x58, + 0x4c, 0x74, 0x66, 0xbb, 0x02, 0xbb, 0xc5, 0x2c, 0x87, 0xa6, 0x02, 0x83, 0x9c, 0x40, 0x6c, 0x58, + 0x35, 0xd0, 0x2f, 0x14, 0xfe, 0x05, 0x87, 0x78, 0x43, 0xd5, 0xc8, 0x10, 0xb8, 0xef, 0xd8, 0x09, + 0xdc, 0x8a, 0xeb, 0x20, 0x70, 0x47, 0x16, 0xc3, 0x16, 0xa0, 0x09, 0xfe, 0xf0, 0xd2, 0x60, 0xa8, + 0x1e, 0xf6, 0x2d, 0x5f, 0x36, 0x7e, 0x96, 0x95, 0xa9, 0xd2, 0x33, 0xe8, 0xe7, 0x82, 0xcb, 0x9c, + 0xc4, 0xd9, 0x24, 0xde, 0xa0, 0xb1, 0x0e, 0xfb, 0xf9, 0xe2, 0x53, 0xb5, 0xf4, 0xbb, 0x47, 0x4f, + 0x55, 0xbb, 0xf0, 0x0d, 0x6c, 0x45, 0xda, 0x53, 0xed, 0xe1, 0x70, 0x6c, 0x63, 0xcb, 0x91, 0xae, + 0xb0, 0x1f, 0xe9, 0x93, 0xfa, 0xd4, 0xe8, 0x91, 0x4e, 0x62, 0x02, 0xda, 0x8c, 0xe2, 0x08, 0x8d, + 0x83, 0xb2, 0x7f, 0xc6, 0x0c, 0x46, 0x77, 0x21, 0x3e, 0xf4, 0xb1, 0xfb, 0x45, 0x2c, 0xfc, 0xb3, + 0x2c, 0x34, 0xdd, 0xec, 0x37, 0x3e, 0x4e, 0xe9, 0xf5, 0xd1, 0x9c, 0xd2, 0x28, 0xb3, 0x45, 0x95, + 0x2d, 0x55, 0xa5, 0x0a, 0x24, 0x09, 0x8e, 0x4d, 0x10, 0x67, 0xc3, 0xee, 0x99, 0x30, 0x9e, 0x59, + 0x8d, 0x92, 0xcc, 0x41, 0xd3, 0x41, 0x33, 0xc8, 0x1c, 0xf4, 0x6b, 0xf6, 0x83, 0x5e, 0x7c, 0x1d, + 0x77, 0x37, 0x27, 0x94, 0x55, 0x30, 0xcb, 0xbc, 0xa8, 0x4f, 0x59, 0x78, 0x53, 0xcf, 0x48, 0xbc, + 0xe9, 0x98, 0xe2, 0x49, 0x97, 0x98, 0xe2, 0x54, 0xd0, 0xbd, 0xe3, 0x7c, 0x0e, 0x54, 0x9c, 0x3a, + 0x91, 0x0a, 0x52, 0x4d, 0x71, 0xe9, 0x12, 0x7b, 0x1c, 0xff, 0xb9, 0x69, 0xc8, 0xdd, 0x0c, 0x44, + 0x6d, 0xde, 0x4d, 0x10, 0xb5, 0x65, 0xfb, 0x39, 0x55, 0x52, 0x39, 0xd4, 0xc9, 0x09, 0x8e, 0x73, + 0x15, 0x7f, 0x67, 0x87, 0x0d, 0xc3, 0xb2, 0x9b, 0xe6, 0xe9, 0xd7, 0xb6, 0x1f, 0x8a, 0xc7, 0xb6, + 0x27, 0x3f, 0x39, 0xa3, 0x73, 0xcb, 0x98, 0xf2, 0x05, 0x7e, 0x2d, 0x39, 0xb0, 0x4d, 0xeb, 0x6a, + 0x85, 0x72, 0xb2, 0xcb, 0x78, 0x28, 0xb3, 0x6f, 0xcb, 0x69, 0xe0, 0xf8, 0xb4, 0xd6, 0x43, 0xf1, + 0xfe, 0x98, 0x71, 0x85, 0x4f, 0x0f, 0xef, 0xe8, 0x84, 0xf6, 0x85, 0x3f, 0x64, 0xa1, 0x19, 0xcc, + 0x8c, 0xc6, 0xc7, 0x9d, 0x7d, 0xd5, 0xa2, 0xa1, 0x4f, 0x73, 0x67, 0x59, 0x5b, 0x6e, 0xb8, 0xb3, + 0x5a, 0xeb, 0x59, 0x1d, 0xb3, 0xb2, 0x17, 0xf6, 0x15, 0x55, 0x7a, 0x11, 0x3d, 0x2f, 0x38, 0xb7, + 0x60, 0xb4, 0x37, 0xb6, 0xf0, 0xc0, 0x2c, 0x34, 0x07, 0x04, 0x60, 0x94, 0x65, 0x33, 0x2e, 0xec, + 0xb3, 0xe4, 0x92, 0x71, 0x46, 0xc0, 0xac, 0xb9, 0xe4, 0x92, 0x11, 0x97, 0x15, 0x7c, 0x7c, 0x20, + 0xfa, 0x01, 0x5b, 0xca, 0xff, 0x9f, 0x23, 0x17, 0xed, 0x4f, 0x9c, 0xaa, 0x70, 0xaf, 0x2a, 0xbd, + 0xc4, 0xaa, 0xc2, 0x97, 0xd0, 0x31, 0x12, 0x6d, 0x51, 0x1a, 0x66, 0x95, 0x86, 0x74, 0xc2, 0xc1, + 0x94, 0xe2, 0xfd, 0x31, 0xfd, 0x92, 0x59, 0x72, 0x13, 0x66, 0x8d, 0x2a, 0x37, 0xe1, 0x3b, 0xd4, + 0xa9, 0x2e, 0xdb, 0xd4, 0xd7, 0x1a, 0x4e, 0x75, 0x0b, 0x9c, 0x9f, 0x06, 0xef, 0x19, 0xc3, 0x1e, + 0x4c, 0x7f, 0x65, 0xb8, 0x02, 0x8f, 0xf3, 0x95, 0x31, 0xdc, 0xea, 0xd6, 0xa1, 0x69, 0xc0, 0x6a, + 0x48, 0xcd, 0x91, 0x60, 0x18, 0xc7, 0x81, 0xc8, 0xc1, 0x87, 0x8f, 0x53, 0x9d, 0xdb, 0xeb, 0xc4, + 0xc7, 0x09, 0xf2, 0x18, 0x8c, 0x6a, 0x5d, 0x7d, 0x2c, 0xa3, 0x4b, 0x1d, 0xb9, 0x48, 0xa4, 0x1c, + 0x5b, 0x47, 0x7e, 0x23, 0x9a, 0x64, 0x04, 0x77, 0xf0, 0x07, 0xd6, 0xa7, 0x33, 0xd3, 0x97, 0xcc, + 0x26, 0x10, 0x61, 0x17, 0x5b, 0x99, 0xb2, 0x3d, 0xc5, 0x02, 0x8b, 0xe7, 0x27, 0xbc, 0x81, 0x98, + 0x8c, 0xbf, 0x56, 0x9e, 0xbb, 0x93, 0xcb, 0x9a, 0xce, 0xc9, 0x6c, 0x73, 0x7e, 0x2f, 0x87, 0xa6, + 0x36, 0x78, 0x9b, 0x03, 0xf5, 0xef, 0xd1, 0x38, 0xba, 0x79, 0xee, 0xf9, 0x69, 0x96, 0xe3, 0x56, + 0xc0, 0xc9, 0x34, 0x83, 0xe1, 0x41, 0xf9, 0x32, 0x55, 0x7a, 0x41, 0xb0, 0xf5, 0x17, 0x05, 0xf8, + 0x76, 0xe2, 0xc0, 0x79, 0xc0, 0x6f, 0x30, 0x09, 0xf0, 0x40, 0xa4, 0x4c, 0x05, 0x80, 0x2a, 0x9d, + 0x93, 0x6d, 0x0c, 0x7e, 0x23, 0xf5, 0xed, 0x9b, 0x90, 0x49, 0xb7, 0x6c, 0x07, 0x64, 0x8b, 0x9b, + 0x1f, 0xf6, 0x45, 0x32, 0xdc, 0xfc, 0x1e, 0xd2, 0xa9, 0x50, 0xab, 0x13, 0x24, 0xae, 0xb1, 0x79, + 0xfc, 0x6d, 0xe1, 0xa8, 0xcb, 0x5f, 0xfe, 0x75, 0x7d, 0x18, 0x7b, 0x02, 0x92, 0x0f, 0x83, 0xeb, + 0x25, 0xf1, 0x07, 0x2c, 0x76, 0x7e, 0x38, 0xd9, 0xbd, 0x2d, 0x71, 0xee, 0x18, 0xf5, 0xf7, 0x29, + 0xd2, 0x62, 0x47, 0xb4, 0xc1, 0xad, 0xc5, 0xd4, 0x59, 0x70, 0x1d, 0xb8, 0x57, 0xaf, 0xac, 0x23, + 0x76, 0xb5, 0x38, 0x10, 0x14, 0x29, 0x12, 0x25, 0x3a, 0xde, 0x70, 0xb4, 0x0d, 0x98, 0x6f, 0x08, + 0x1a, 0xbc, 0xb2, 0x0e, 0xcb, 0xce, 0xb6, 0x24, 0x5b, 0x4e, 0xe9, 0x0c, 0x25, 0x79, 0x97, 0x7a, + 0x61, 0xbb, 0xf5, 0x7d, 0x37, 0xfc, 0x08, 0x65, 0x32, 0x14, 0xab, 0xed, 0x43, 0xb7, 0x48, 0xdb, + 0x77, 0x92, 0x63, 0x02, 0x19, 0x5a, 0xc2, 0xc5, 0x99, 0xa1, 0x0c, 0x37, 0xd1, 0xcd, 0x23, 0xd1, + 0x0a, 0x7f, 0x38, 0x9c, 0xfa, 0x7e, 0x3f, 0x50, 0x92, 0xe4, 0x65, 0xda, 0x7f, 0x31, 0x71, 0xac, + 0x95, 0xca, 0x30, 0xe1, 0x27, 0x3c, 0x21, 0xf1, 0xfe, 0xdd, 0x20, 0x57, 0xb9, 0x12, 0xdd, 0xc2, + 0x26, 0x01, 0xa7, 0x0f, 0x49, 0xea, 0xe4, 0x66, 0x90, 0xff, 0xe9, 0x25, 0x97, 0x5a, 0x86, 0x8f, + 0x0d, 0x24, 0x0e, 0xf6, 0x11, 0x37, 0x39, 0x26, 0xf6, 0xe1, 0x7b, 0x08, 0xd5, 0x07, 0x03, 0xe1, + 0xe6, 0x46, 0x26, 0xe0, 0x16, 0x96, 0xaa, 0x31, 0xc5, 0xe2, 0x33, 0xe6, 0xdf, 0x10, 0xad, 0x39, + 0xa4, 0x84, 0x83, 0xcd, 0xa1, 0x7a, 0x05, 0xe4, 0x53, 0x21, 0xb0, 0x5d, 0x4f, 0xee, 0xfd, 0x36, + 0xd5, 0x77, 0x21, 0xf5, 0xfd, 0xb6, 0x44, 0xac, 0x0b, 0x04, 0x22, 0x32, 0x33, 0x08, 0xff, 0xbe, + 0x2d, 0x4c, 0xf5, 0xcc, 0x51, 0x84, 0xa9, 0xc6, 0xf6, 0x49, 0xd6, 0x30, 0xd5, 0xb3, 0x4d, 0x4c, + 0x8c, 0x4f, 0x1f, 0x16, 0x69, 0x0d, 0x46, 0xcd, 0x7f, 0x88, 0x72, 0x22, 0xde, 0xf5, 0xe1, 0x82, + 0x59, 0x18, 0x76, 0x17, 0x8f, 0x1a, 0x76, 0xd7, 0x13, 0xc8, 0x15, 0x55, 0x69, 0x91, 0x80, 0x87, + 0x10, 0x9f, 0x70, 0x85, 0x5b, 0x58, 0xa5, 0xc5, 0x59, 0x16, 0x37, 0xe7, 0xbf, 0xe7, 0x18, 0x3f, + 0x48, 0x2c, 0x39, 0x02, 0xc7, 0xce, 0xdd, 0x9c, 0x2a, 0xed, 0xe4, 0x04, 0x6b, 0x9d, 0xb8, 0x89, + 0x7a, 0x42, 0x92, 0x30, 0x3c, 0x81, 0x60, 0xa8, 0xd1, 0xdb, 0xb0, 0x48, 0xf9, 0x30, 0xa2, 0x84, + 0x02, 0xde, 0x86, 0xe2, 0x2b, 0xd1, 0x2d, 0x89, 0x43, 0x67, 0x86, 0xa3, 0xdd, 0x2c, 0x36, 0x33, + 0xdd, 0x27, 0xd5, 0xf6, 0xe4, 0xd7, 0x5f, 0xc7, 0xfb, 0xdb, 0x12, 0xfb, 0x2f, 0xba, 0x36, 0x28, + 0xf1, 0x68, 0x1d, 0xdf, 0x56, 0xac, 0x59, 0x41, 0x0a, 0x5a, 0xf7, 0xd3, 0xd4, 0x02, 0xb2, 0x75, + 0x26, 0x56, 0x9f, 0xcb, 0x39, 0xd7, 0xe5, 0x73, 0x59, 0x4d, 0xe8, 0x2e, 0x29, 0xa4, 0x78, 0xb1, + 0x0b, 0xe4, 0x5c, 0xc6, 0xf3, 0xd3, 0x52, 0x23, 0x4e, 0xa3, 0x43, 0x18, 0x9e, 0x9f, 0x96, 0x7a, + 0x1d, 0xed, 0x90, 0xe4, 0xad, 0x05, 0xee, 0xa1, 0xa8, 0xf0, 0x84, 0x69, 0x24, 0xa6, 0xf2, 0xe5, + 0xaa, 0x54, 0x6d, 0xa4, 0x6e, 0x7d, 0xc5, 0xdc, 0x16, 0x7c, 0x53, 0x71, 0xa9, 0x21, 0x4d, 0xb4, + 0xf9, 0x48, 0x82, 0x58, 0x27, 0xde, 0xff, 0xa5, 0x4e, 0x04, 0xb6, 0xef, 0x87, 0xd4, 0xff, 0x46, + 0x66, 0xd7, 0xf7, 0xd1, 0xd4, 0x60, 0xa0, 0x81, 0x24, 0x28, 0xc6, 0x12, 0xa6, 0x07, 0xf0, 0x4b, + 0x87, 0x63, 0xa6, 0xdb, 0xaa, 0xc4, 0x52, 0xeb, 0xef, 0xf8, 0x40, 0x0b, 0xe4, 0xf3, 0x01, 0x27, + 0x89, 0x92, 0x78, 0x7f, 0x07, 0x64, 0x50, 0x07, 0x91, 0xb3, 0x6c, 0xeb, 0xce, 0xbf, 0x09, 0xfe, + 0xc8, 0x72, 0xb0, 0x41, 0xc1, 0x9e, 0xae, 0x13, 0xe1, 0x3d, 0xa5, 0x85, 0x62, 0x29, 0x59, 0xcc, + 0x86, 0x30, 0x5d, 0x5e, 0xe2, 0xc0, 0xf9, 0x44, 0xfb, 0x0e, 0xed, 0x4c, 0x77, 0xb2, 0x7b, 0x9b, + 0xdf, 0xdb, 0x98, 0x3a, 0xa5, 0xa6, 0xda, 0xbe, 0x61, 0x33, 0x51, 0xe8, 0x1d, 0x6f, 0xc6, 0xbf, + 0xf3, 0x39, 0x34, 0x89, 0x41, 0xe3, 0xd7, 0xd5, 0xf5, 0x19, 0x34, 0x91, 0xde, 0xa2, 0xeb, 0x12, + 0x26, 0x6d, 0xe1, 0x54, 0xe9, 0x4f, 0xd0, 0x1f, 0x84, 0x34, 0x94, 0x99, 0x38, 0x9b, 0xa0, 0x5f, + 0xe3, 0xf2, 0x1b, 0x9c, 0x2c, 0x51, 0x76, 0xb2, 0x3e, 0x0f, 0x84, 0x64, 0xb9, 0xcc, 0xb1, 0x0f, + 0xfc, 0x65, 0xce, 0xf6, 0xb4, 0x9a, 0x1a, 0xd1, 0xcb, 0x1c, 0x79, 0x08, 0x0a, 0x2b, 0xd1, 0x54, + 0x2b, 0x80, 0xf1, 0xf3, 0x18, 0x34, 0x0e, 0xeb, 0x30, 0x51, 0xe7, 0x1c, 0x94, 0xd7, 0x14, 0x0c, + 0x36, 0x18, 0xf4, 0x9e, 0x4c, 0x7e, 0x15, 0x76, 0x64, 0xa3, 0xb9, 0x8e, 0x55, 0x8c, 0x0f, 0x32, + 0xfd, 0x4d, 0x0b, 0x6b, 0xfd, 0xb3, 0x11, 0xf1, 0x26, 0xac, 0xaa, 0xd2, 0x1b, 0xf1, 0x8e, 0x90, + 0xa2, 0x8f, 0xdf, 0x74, 0xe3, 0x2e, 0x98, 0x38, 0x1b, 0x9c, 0xc3, 0x05, 0xb3, 0xc0, 0x12, 0x6f, + 0x2e, 0x83, 0xff, 0x65, 0xe1, 0x5f, 0x70, 0x68, 0x7e, 0x86, 0x99, 0xf3, 0x6f, 0xa2, 0x89, 0x14, + 0x17, 0x92, 0x58, 0x5c, 0x19, 0x72, 0x39, 0xe0, 0xa0, 0x09, 0x66, 0x07, 0xc6, 0x99, 0x9d, 0xec, + 0xbf, 0x59, 0xc7, 0xd7, 0x92, 0xe4, 0xe9, 0x59, 0x19, 0x92, 0xa7, 0x83, 0x38, 0x09, 0x27, 0x4f, + 0x9f, 0xcf, 0xc2, 0x38, 0xf6, 0x8e, 0xdf, 0xad, 0x75, 0x9e, 0x05, 0xef, 0x6d, 0x48, 0xa1, 0x5e, + 0x78, 0x79, 0x06, 0x9a, 0x63, 0x66, 0x53, 0xb3, 0xf0, 0x2e, 0x4b, 0xad, 0xe1, 0x44, 0x38, 0x33, + 0xe6, 0xaf, 0x25, 0x9c, 0xc8, 0x24, 0x7a, 0x85, 0x0c, 0xd3, 0xfc, 0x59, 0xd6, 0xc0, 0x20, 0x77, + 0x9d, 0x93, 0x59, 0x48, 0x98, 0x30, 0xe0, 0x63, 0xe6, 0xa5, 0x67, 0xc2, 0x08, 0xeb, 0x55, 0x61, + 0x0b, 0xdf, 0xfc, 0xb3, 0xeb, 0xe0, 0x7c, 0x28, 0x7f, 0xb3, 0x85, 0x73, 0x32, 0x38, 0xb9, 0x44, + 0xff, 0x68, 0x8f, 0xcb, 0x56, 0x1e, 0x0c, 0x36, 0xac, 0xd1, 0x31, 0xd7, 0xad, 0x66, 0x7e, 0x02, + 0x56, 0xe6, 0x27, 0x6f, 0x94, 0xcc, 0x8f, 0x30, 0x7a, 0xe6, 0xc7, 0xca, 0xf4, 0xb4, 0x3b, 0x99, + 0x9e, 0x09, 0xa3, 0x67, 0x7a, 0x5e, 0xbe, 0x49, 0xa6, 0xc7, 0xc1, 0xec, 0xd8, 0x29, 0xc4, 0xfc, + 0xdb, 0x48, 0x21, 0x9a, 0x8c, 0xd5, 0xc4, 0x4c, 0x16, 0x12, 0xb7, 0x9c, 0xb1, 0xfa, 0x88, 0xf2, + 0x55, 0xe8, 0xba, 0xbe, 0xcb, 0xf2, 0x55, 0x18, 0x21, 0x1a, 0x7c, 0xd5, 0x23, 0x23, 0xf2, 0x55, + 0x94, 0x9f, 0x32, 0xa8, 0xe2, 0x49, 0xee, 0x54, 0x71, 0xda, 0x2f, 0xdf, 0x3c, 0x55, 0x6c, 0x72, + 0x72, 0x93, 0x6f, 0x37, 0x27, 0x67, 0x48, 0x0d, 0xa7, 0x30, 0x9c, 0x9c, 0x21, 0x35, 0x24, 0x9c, + 0x9c, 0x43, 0x55, 0xee, 0xc6, 0xc9, 0x19, 0x52, 0x45, 0x0b, 0x27, 0x37, 0x75, 0xdc, 0x70, 0x72, + 0xd3, 0x6e, 0x23, 0x27, 0x57, 0x86, 0x72, 0x7c, 0x4a, 0xb8, 0x9e, 0x68, 0xb2, 0x89, 0x3e, 0x44, + 0x09, 0xd7, 0x5b, 0xf3, 0x42, 0xeb, 0x28, 0x17, 0x6b, 0xdb, 0xa9, 0xf8, 0x4e, 0x09, 0xd7, 0xeb, + 0x8f, 0xad, 0xc9, 0x67, 0xcc, 0x20, 0x17, 0xdc, 0x8e, 0x60, 0x57, 0x57, 0x07, 0x22, 0x4f, 0x8a, + 0x80, 0x62, 0x71, 0x5c, 0x31, 0x86, 0x0b, 0x99, 0x4c, 0x59, 0x08, 0x8f, 0x95, 0x0d, 0x59, 0x6f, + 0x67, 0x43, 0xf8, 0x34, 0xa3, 0xd7, 0x45, 0x42, 0xfe, 0xc0, 0x7a, 0x18, 0xfd, 0x46, 0x98, 0x14, + 0xc2, 0x1f, 0xc0, 0x75, 0x21, 0x1a, 0x68, 0x2b, 0x7f, 0x60, 0x56, 0x01, 0x7f, 0x60, 0xfe, 0x8e, + 0x0f, 0xb4, 0x90, 0xbc, 0xa9, 0x19, 0xf8, 0x03, 0xb3, 0xf9, 0x78, 0xa3, 0xe2, 0x9f, 0x52, 0xa5, + 0x25, 0x68, 0x91, 0x90, 0x86, 0x44, 0x11, 0x67, 0xc3, 0xda, 0x69, 0x39, 0x10, 0xf1, 0x85, 0x3b, + 0xb2, 0xd1, 0x5c, 0x47, 0x8f, 0xf1, 0x41, 0x30, 0xcb, 0x16, 0x82, 0x39, 0x03, 0xd9, 0x88, 0x01, + 0x0d, 0xc8, 0xe3, 0x02, 0xaa, 0x0b, 0xa6, 0x19, 0x91, 0x59, 0x09, 0xf7, 0xdd, 0x24, 0x95, 0xb7, + 0xe5, 0xa3, 0x39, 0xa0, 0xb7, 0x75, 0x90, 0x97, 0xbf, 0x74, 0x23, 0x2f, 0x9f, 0x19, 0x81, 0xbc, + 0x4c, 0x8b, 0x5e, 0x2d, 0x14, 0xe7, 0x9f, 0x72, 0x36, 0x25, 0x74, 0xf9, 0x97, 0x9c, 0x2a, 0x9d, + 0xe4, 0x04, 0xa3, 0x54, 0xec, 0xe6, 0xb4, 0xc1, 0x98, 0xd6, 0x7a, 0x1e, 0x94, 0xad, 0x90, 0xb6, + 0x2d, 0xb1, 0xeb, 0xeb, 0x44, 0x7f, 0x4b, 0xb2, 0x6b, 0xbb, 0x29, 0x43, 0xc1, 0x46, 0x54, 0xfa, + 0xeb, 0xd7, 0x13, 0xd3, 0x0e, 0x9d, 0xbe, 0x12, 0xdd, 0x02, 0xc9, 0xc4, 0x00, 0x91, 0x41, 0xdf, + 0xd4, 0xd0, 0xd7, 0x5a, 0xcb, 0x09, 0xa0, 0xac, 0x89, 0xef, 0xee, 0xbe, 0x4b, 0x40, 0x62, 0x6b, + 0x7d, 0x17, 0xb5, 0xd6, 0x03, 0x66, 0x72, 0x85, 0xc1, 0x6e, 0x38, 0x72, 0x9d, 0x4c, 0x27, 0x0f, + 0xc7, 0xfe, 0x8b, 0xf1, 0x1f, 0x2e, 0x25, 0x8f, 0x9d, 0x49, 0x9d, 0x39, 0x9e, 0xba, 0xf4, 0x89, + 0x16, 0x3b, 0x79, 0x25, 0xba, 0x85, 0x6a, 0xcc, 0xf9, 0xbf, 0xe0, 0xd0, 0xec, 0x90, 0x82, 0xbd, + 0x64, 0xad, 0x81, 0x27, 0x09, 0x3c, 0xa9, 0x9c, 0x2a, 0xed, 0xe6, 0x04, 0xf7, 0x36, 0x62, 0x73, + 0xfc, 0xd2, 0xe1, 0xe4, 0xbe, 0x43, 0x24, 0xea, 0x4b, 0xcf, 0x69, 0x23, 0x07, 0x43, 0xef, 0xd5, + 0xc1, 0xf6, 0xf8, 0x40, 0x0b, 0x99, 0xbe, 0xb1, 0x56, 0x9d, 0xcc, 0x3e, 0xf5, 0x39, 0x2d, 0x89, + 0xf7, 0xef, 0x36, 0xd9, 0x06, 0x4c, 0xe5, 0xea, 0xab, 0x1f, 0xfa, 0x38, 0xde, 0xbf, 0x17, 0x8b, + 0x24, 0x3e, 0x66, 0xf7, 0x2f, 0x71, 0xe0, 0x7c, 0x72, 0xef, 0x91, 0xc4, 0xbe, 0x56, 0x7d, 0xf6, + 0xee, 0xb3, 0xe1, 0x87, 0x38, 0x34, 0x63, 0x83, 0xa2, 0x34, 0x91, 0x62, 0x88, 0x3f, 0x47, 0x44, + 0xfe, 0x44, 0x96, 0xe5, 0xac, 0x17, 0x9b, 0xc9, 0x6c, 0x06, 0x76, 0x1b, 0x81, 0x7d, 0x07, 0xe0, + 0xbc, 0xc8, 0x49, 0xe1, 0x83, 0xd0, 0xd7, 0x33, 0xb4, 0x3d, 0xde, 0xdf, 0x31, 0xbc, 0x37, 0x9a, + 0xe8, 0xdb, 0x0c, 0x87, 0xa5, 0x17, 0xe2, 0xf5, 0xc3, 0x4f, 0xc8, 0x72, 0x38, 0xda, 0x35, 0x38, + 0x67, 0xc2, 0xbf, 0xc8, 0xe4, 0x48, 0xc8, 0x35, 0x23, 0x78, 0x98, 0x39, 0x12, 0x26, 0xd2, 0x1c, + 0x09, 0xa6, 0x37, 0xbc, 0x99, 0xd2, 0x80, 0xe0, 0x78, 0xb8, 0x0b, 0x24, 0xa4, 0xbb, 0x15, 0xc7, + 0x9b, 0x55, 0x80, 0xe3, 0xcd, 0xdf, 0xf4, 0xb0, 0x32, 0xe1, 0x78, 0xb3, 0x79, 0x59, 0x27, 0xa7, + 0x4a, 0xbb, 0x38, 0xd4, 0xca, 0x09, 0x69, 0xee, 0x9e, 0xb8, 0x1a, 0xc6, 0xa3, 0xe5, 0xc9, 0x4f, + 0xfa, 0xb5, 0x96, 0x6f, 0x4d, 0x43, 0xd1, 0xa1, 0x8f, 0x4d, 0x94, 0x7a, 0xe9, 0x60, 0xa2, 0xa7, + 0x4d, 0xeb, 0xec, 0xa3, 0x97, 0x41, 0xaf, 0x4a, 0x1c, 0x38, 0x8f, 0xf5, 0x8f, 0xfa, 0x28, 0x90, + 0xf1, 0xf1, 0x4a, 0x74, 0xcb, 0x65, 0x8e, 0xbd, 0x85, 0x97, 0x39, 0xba, 0x7a, 0x2c, 0xc1, 0x70, + 0x4c, 0xe5, 0x9e, 0x90, 0x60, 0xa4, 0x59, 0xd5, 0x18, 0x97, 0x60, 0x7c, 0x4a, 0x03, 0x29, 0xb8, + 0x4b, 0x30, 0x7c, 0xd7, 0x25, 0xc1, 0xc0, 0xfc, 0x31, 0x23, 0xc1, 0xb0, 0x58, 0xb1, 0xd0, 0x66, + 0x4e, 0x69, 0xc6, 0x41, 0x6e, 0x14, 0xe2, 0x8c, 0x80, 0x2a, 0x6d, 0x20, 0xe2, 0x8c, 0x7a, 0x3b, + 0xd4, 0x76, 0x6f, 0x63, 0x25, 0x1a, 0xf0, 0x81, 0x2b, 0xd1, 0x2d, 0x24, 0xb6, 0xa7, 0xed, 0x7e, + 0xb7, 0x45, 0x13, 0x3d, 0x6d, 0x34, 0x0e, 0x7e, 0x7c, 0xb0, 0x3b, 0x1e, 0x3b, 0x95, 0xdc, 0x7b, + 0xc4, 0xd6, 0x97, 0x88, 0x45, 0xfe, 0x8c, 0xa3, 0xc9, 0xa4, 0x2d, 0x8f, 0xd6, 0x46, 0xb7, 0x47, + 0x6b, 0x95, 0x2a, 0x3d, 0x63, 0x7d, 0xb4, 0x8a, 0xd8, 0x98, 0xaa, 0x3a, 0x66, 0xdd, 0xf1, 0xa5, + 0x36, 0x10, 0xab, 0xae, 0x04, 0x4b, 0x76, 0x9a, 0x45, 0x6a, 0xd4, 0x2f, 0x9a, 0x91, 0xf2, 0xdd, + 0x6d, 0x4e, 0xe2, 0x7c, 0x50, 0x53, 0xdb, 0x36, 0x9a, 0x90, 0x42, 0xff, 0x3a, 0x1b, 0xcd, 0xb2, + 0x76, 0xba, 0x87, 0xe9, 0x20, 0x6a, 0x97, 0x63, 0x07, 0xba, 0xbb, 0x7d, 0xe1, 0xca, 0x5e, 0x53, + 0xa5, 0x65, 0xa8, 0x4a, 0x70, 0x3d, 0x8a, 0xeb, 0xb5, 0x0c, 0xfa, 0x3c, 0x1b, 0x42, 0x15, 0x32, + 0x51, 0xeb, 0x2c, 0x30, 0xfa, 0x27, 0xce, 0x50, 0x85, 0x77, 0x56, 0xde, 0x76, 0x88, 0x43, 0x93, + 0x41, 0x12, 0xb5, 0xd4, 0xdf, 0xa0, 0x53, 0x2b, 0x40, 0x83, 0x35, 0xab, 0x52, 0x48, 0xb0, 0x54, + 0x88, 0x6b, 0xd9, 0x5f, 0x86, 0x2d, 0xf2, 0x81, 0xf3, 0x25, 0x9e, 0xd4, 0x0f, 0x1f, 0x6b, 0x3b, + 0x62, 0x00, 0x13, 0x89, 0xf6, 0xb6, 0x64, 0xcb, 0xa9, 0x74, 0x22, 0xb0, 0xc4, 0x6e, 0x55, 0x8b, + 0x75, 0x16, 0x41, 0x85, 0x4e, 0xaa, 0xe1, 0xdf, 0x5a, 0xcf, 0x69, 0xad, 0x6b, 0xf7, 0xf0, 0xe1, + 0xcf, 0x8a, 0x65, 0xcb, 0x17, 0xcb, 0xd6, 0xab, 0x92, 0x0f, 0xad, 0x15, 0x32, 0x6d, 0xa0, 0x58, + 0x41, 0x02, 0x25, 0x32, 0xc7, 0x9a, 0xec, 0xde, 0x46, 0x69, 0xeb, 0x12, 0x0f, 0xd0, 0x73, 0x60, + 0x50, 0xce, 0xdc, 0x52, 0xad, 0x63, 0x87, 0x16, 0xeb, 0x84, 0xd3, 0x2b, 0xfc, 0x7b, 0x12, 0x32, + 0xd1, 0xf9, 0x91, 0xf1, 0x71, 0x01, 0x97, 0x5b, 0x0c, 0x6c, 0x32, 0x5c, 0xc0, 0xd1, 0x18, 0xd9, + 0xdc, 0xcd, 0xab, 0xf7, 0x86, 0x2a, 0xd5, 0xa0, 0xe5, 0x42, 0xc6, 0xc3, 0x30, 0x70, 0x28, 0x0c, + 0x64, 0x0a, 0x5f, 0xdc, 0xa3, 0x6b, 0x14, 0xfe, 0x75, 0x36, 0xe4, 0x0f, 0x76, 0x5c, 0xbd, 0x85, + 0x16, 0x73, 0x9f, 0x91, 0x25, 0xcd, 0xef, 0x3a, 0x45, 0xe3, 0xd2, 0x4d, 0x5f, 0x55, 0xf6, 0x2a, + 0x56, 0xd8, 0x8c, 0x78, 0x6e, 0x48, 0x94, 0xbd, 0x9c, 0x4d, 0x1d, 0x08, 0x22, 0x71, 0x7c, 0x28, + 0x4c, 0xea, 0x40, 0x97, 0xa1, 0x48, 0x26, 0x48, 0xf2, 0xea, 0xd3, 0xa6, 0x65, 0x7b, 0x39, 0x55, + 0xea, 0xe2, 0x50, 0x07, 0x27, 0xb8, 0xee, 0xa1, 0xd8, 0x0c, 0x47, 0x41, 0xaf, 0xdb, 0x1d, 0xb2, + 0x82, 0xfb, 0xcb, 0x2c, 0xc8, 0xb8, 0xfb, 0xe3, 0xbe, 0xa8, 0x65, 0x95, 0xaa, 0x24, 0xa1, 0x97, + 0x05, 0xf7, 0xad, 0x30, 0x5e, 0x2a, 0x86, 0x39, 0x70, 0xb7, 0x88, 0xfb, 0xe7, 0x7c, 0x34, 0x4d, + 0xf2, 0xf9, 0x30, 0x07, 0x65, 0x06, 0x00, 0x71, 0x3c, 0x4b, 0x92, 0x2a, 0x2d, 0x60, 0x61, 0x7d, + 0x06, 0x84, 0x20, 0xa6, 0xf0, 0x6d, 0x3c, 0x3b, 0xdc, 0xa8, 0x9e, 0x9d, 0x6a, 0x94, 0xab, 0x03, + 0x4d, 0xb8, 0x20, 0xcb, 0x93, 0x0d, 0x36, 0xd0, 0x8f, 0x0b, 0x50, 0x22, 0x3e, 0x64, 0x1b, 0x18, + 0xa0, 0xb5, 0xba, 0x96, 0xc6, 0x31, 0x54, 0xb9, 0x9c, 0x7c, 0xae, 0x80, 0x93, 0xa1, 0x3d, 0xef, + 0x47, 0x33, 0xfc, 0x01, 0x7f, 0x64, 0x79, 0x70, 0xbd, 0x3f, 0x50, 0xeb, 0x0d, 0x87, 0x3f, 0x08, + 0x86, 0x7c, 0xe4, 0x06, 0x61, 0x47, 0x2c, 0x67, 0xad, 0xf8, 0xd3, 0xe1, 0x1d, 0x1d, 0xa9, 0xcf, + 0x5b, 0x74, 0x36, 0xb2, 0x7b, 0x1b, 0x91, 0x61, 0x93, 0x60, 0xf0, 0x5a, 0x67, 0x1f, 0x89, 0xd4, + 0xef, 0xec, 0xc7, 0x87, 0xdc, 0x12, 0xcf, 0xd4, 0xaa, 0xd2, 0x0a, 0x2b, 0x45, 0xf9, 0x12, 0xac, + 0x80, 0x30, 0xf3, 0x18, 0xa6, 0x21, 0xc6, 0x3c, 0x04, 0x6a, 0xa1, 0x27, 0x72, 0x75, 0xb0, 0x9d, + 0x94, 0xe3, 0xdb, 0x02, 0x57, 0xb1, 0xba, 0xd2, 0x2a, 0x1f, 0xb9, 0xcc, 0x39, 0x2c, 0x12, 0x72, + 0x31, 0xb8, 0x7d, 0xc1, 0xa9, 0xd2, 0x09, 0xce, 0x61, 0x93, 0xa0, 0x72, 0x3a, 0x0b, 0xaa, 0x8f, + 0x76, 0xc2, 0x16, 0x4f, 0x99, 0x58, 0xef, 0x1e, 0xec, 0xc3, 0x0a, 0x28, 0x9d, 0xf6, 0x76, 0x6b, + 0x08, 0xdc, 0x62, 0x7c, 0xb0, 0x1b, 0x9e, 0x4c, 0x72, 0x64, 0x80, 0xbb, 0xb1, 0x28, 0xd4, 0x90, + 0x39, 0x03, 0x78, 0xd9, 0xbe, 0xa1, 0x5d, 0x3c, 0x0f, 0xe2, 0xea, 0x78, 0x7f, 0x8c, 0xa4, 0x58, + 0xd0, 0x09, 0x75, 0xbb, 0xe5, 0x43, 0x0d, 0xc3, 0xa0, 0xd3, 0x48, 0x91, 0xe9, 0x18, 0xf4, 0xb4, + 0x54, 0xb7, 0xc9, 0xb1, 0xaf, 0x42, 0x53, 0x59, 0x05, 0x0f, 0xcd, 0x7a, 0x8a, 0x5d, 0xb6, 0x6c, + 0x55, 0xe2, 0x5c, 0xd7, 0x2c, 0xf7, 0xd5, 0x95, 0xb2, 0xad, 0x21, 0xdf, 0xc5, 0xa1, 0xa9, 0xfe, + 0x70, 0x15, 0x31, 0xc7, 0xd1, 0x8f, 0x0d, 0x6b, 0xa5, 0xf2, 0xc1, 0xc5, 0xed, 0xa7, 0x24, 0xdb, + 0xd5, 0xc1, 0x3e, 0x6a, 0x86, 0x03, 0xe3, 0x15, 0x51, 0x3b, 0x9b, 0x62, 0xf1, 0xa5, 0x78, 0xff, + 0xce, 0xc4, 0xa7, 0xe7, 0x6d, 0x2d, 0x86, 0x7b, 0xa2, 0xb0, 0x45, 0x3a, 0x0d, 0x55, 0xe2, 0x89, + 0xf7, 0xef, 0x05, 0xd1, 0x3e, 0x4c, 0x8c, 0x39, 0x7d, 0xd9, 0xf6, 0xfd, 0xb2, 0x4b, 0x9c, 0x2a, + 0x0d, 0x70, 0xa8, 0x9f, 0x13, 0xec, 0x77, 0x56, 0xec, 0xe2, 0x92, 0x03, 0x87, 0xa8, 0x6d, 0x08, + 0xb9, 0x3b, 0x38, 0xa9, 0x01, 0x80, 0xe3, 0xd5, 0xc1, 0xf6, 0xab, 0x83, 0x9b, 0x13, 0xdf, 0x9e, + 0x4e, 0x6c, 0xeb, 0xd4, 0xff, 0x30, 0x6e, 0x19, 0xc8, 0x5c, 0x88, 0x83, 0xe9, 0xc1, 0xbe, 0x54, + 0xcb, 0x0f, 0xa9, 0x33, 0x7d, 0xf1, 0xd8, 0x9e, 0xfa, 0x8d, 0x8d, 0x54, 0x16, 0x06, 0xf7, 0x05, + 0x14, 0x33, 0x38, 0x83, 0x7f, 0x47, 0x6a, 0xeb, 0x10, 0xf1, 0x7b, 0xfb, 0xea, 0xd3, 0xf8, 0xc0, + 0x85, 0xd4, 0x99, 0x63, 0xa9, 0xef, 0x2e, 0x82, 0x1d, 0x13, 0x1d, 0xd3, 0x6a, 0x99, 0x01, 0xd7, + 0xb5, 0x70, 0x67, 0x0e, 0x9a, 0x6e, 0x4e, 0x7d, 0x7c, 0xa0, 0xed, 0x15, 0x16, 0x06, 0xc7, 0x9d, + 0xf7, 0xb5, 0xf0, 0x36, 0x00, 0x57, 0x17, 0x06, 0xb4, 0x9d, 0x47, 0x59, 0x9e, 0xf5, 0xee, 0x13, + 0x58, 0xed, 0x9c, 0x2a, 0xb5, 0x72, 0xa8, 0x85, 0x13, 0x1c, 0x87, 0x20, 0xd6, 0x6b, 0x9f, 0x7d, + 0xaa, 0xed, 0x3c, 0xca, 0x62, 0x5d, 0xd8, 0x0d, 0x7c, 0xe2, 0xc4, 0x84, 0x4a, 0xeb, 0xec, 0x18, + 0x3e, 0xd9, 0x0a, 0x32, 0x28, 0x9d, 0x53, 0xde, 0x79, 0x5a, 0x6b, 0xdf, 0x9f, 0xba, 0xb4, 0x23, + 0x79, 0x5a, 0x3f, 0x77, 0x76, 0xb1, 0x38, 0x71, 0xc7, 0xa5, 0x78, 0x6c, 0x77, 0xe2, 0xc8, 0x89, + 0xe1, 0x83, 0x2d, 0x90, 0x0e, 0x81, 0x3e, 0x3f, 0xc0, 0x1e, 0x9d, 0xcd, 0x41, 0x0b, 0xca, 0xbd, + 0x91, 0xfa, 0xf7, 0x2c, 0x61, 0x16, 0x2d, 0x4f, 0xd1, 0xaf, 0x9c, 0x4f, 0xd1, 0x4b, 0xf6, 0x30, + 0x63, 0x38, 0xbd, 0xcb, 0xc5, 0x1b, 0x79, 0x87, 0x56, 0xa2, 0x09, 0x38, 0x29, 0x4f, 0x6d, 0x98, + 0x00, 0x12, 0x4e, 0xe7, 0x60, 0x94, 0x89, 0x4f, 0x00, 0x7e, 0x86, 0xf1, 0x93, 0xdd, 0xdb, 0xaa, + 0x6b, 0x81, 0xcc, 0x2c, 0x01, 0x57, 0x8d, 0x27, 0x4a, 0x9e, 0x18, 0xee, 0xde, 0xab, 0x0d, 0x46, + 0x65, 0xa3, 0x07, 0x1f, 0x40, 0x53, 0x37, 0xfa, 0x43, 0x91, 0x66, 0xb8, 0xaf, 0xd5, 0x95, 0x61, + 0xf2, 0x14, 0x2d, 0x55, 0xa5, 0x0a, 0xc1, 0x56, 0x25, 0x2e, 0xb1, 0x0d, 0x6f, 0x89, 0xde, 0xef, + 0xfe, 0x21, 0xdb, 0x10, 0x16, 0x4c, 0x9a, 0x73, 0xf3, 0x98, 0xb4, 0xec, 0x53, 0x4e, 0x95, 0xba, + 0x39, 0x74, 0x80, 0x13, 0x46, 0x38, 0x18, 0xd1, 0x9b, 0x68, 0xbb, 0xa8, 0x93, 0x64, 0xfd, 0xbb, + 0x12, 0x9f, 0x9e, 0x27, 0x40, 0x87, 0xb1, 0x0f, 0xc1, 0x82, 0x20, 0xa5, 0x37, 0x32, 0xc4, 0xed, + 0xd2, 0x76, 0x9e, 0x8e, 0xf7, 0xef, 0x84, 0xd6, 0xd0, 0xe2, 0x4a, 0x74, 0xb3, 0x91, 0xb0, 0xe6, + 0x4a, 0x74, 0xb3, 0x0d, 0x45, 0x26, 0x7b, 0xdb, 0x8a, 0x5d, 0xf1, 0xc7, 0x85, 0x1c, 0xf4, 0x70, + 0xda, 0x99, 0x8d, 0x0f, 0x74, 0xf2, 0x4b, 0x0b, 0x15, 0xe8, 0xb8, 0xf4, 0x78, 0x75, 0x78, 0x41, + 0x75, 0x38, 0xdd, 0x90, 0x15, 0xb5, 0xe0, 0x01, 0x0d, 0xb9, 0xbf, 0xbe, 0x99, 0x64, 0xf0, 0xbb, + 0x8e, 0x5a, 0x4c, 0xc8, 0x19, 0xe9, 0x7c, 0xc4, 0x75, 0x2c, 0xe8, 0xa4, 0xc3, 0x34, 0x64, 0xeb, + 0x3e, 0xe9, 0xd7, 0x62, 0x7b, 0xd9, 0x96, 0x14, 0xcd, 0x5c, 0x1d, 0x6c, 0x27, 0xda, 0x18, 0x66, + 0x37, 0xc8, 0xa3, 0xdc, 0xda, 0xa5, 0xed, 0x3c, 0x62, 0x43, 0x36, 0xff, 0x1d, 0x87, 0xa6, 0xdb, + 0xf7, 0x96, 0x2f, 0x30, 0x11, 0x00, 0xa7, 0x93, 0xa2, 0xe6, 0x4d, 0x2e, 0x40, 0x13, 0xc2, 0xcd, + 0xf5, 0xf5, 0x4a, 0x38, 0x6c, 0x38, 0x47, 0x92, 0x9f, 0x7a, 0x8d, 0x01, 0x2e, 0xf8, 0x72, 0x9b, + 0xc0, 0x30, 0x87, 0xe6, 0xf0, 0xc8, 0x01, 0xab, 0x40, 0xf8, 0xc5, 0x7b, 0xac, 0x84, 0x23, 0xd6, + 0x49, 0x58, 0xc9, 0xbc, 0x47, 0xed, 0x96, 0xc3, 0x98, 0x2c, 0xb2, 0x19, 0xea, 0x16, 0x7e, 0x33, + 0xd1, 0x70, 0x13, 0xbd, 0x83, 0x38, 0xb2, 0xd6, 0xa4, 0xd5, 0x69, 0xe8, 0x54, 0x42, 0xab, 0x8f, + 0x16, 0x3f, 0x62, 0x5b, 0xb3, 0xe9, 0x94, 0x64, 0xff, 0x82, 0x43, 0xc8, 0x87, 0x97, 0xc1, 0xc4, + 0x80, 0x6d, 0xe5, 0x54, 0x69, 0x1b, 0x27, 0x30, 0x15, 0xe2, 0x46, 0x22, 0x0e, 0x36, 0x62, 0xb2, + 0xca, 0x55, 0xab, 0xa4, 0xea, 0x9a, 0x22, 0x50, 0x2c, 0x51, 0xb6, 0x3a, 0x3e, 0xb4, 0x3d, 0x71, + 0xb0, 0x0f, 0x14, 0x48, 0xf1, 0xfe, 0x81, 0x44, 0x4f, 0xac, 0xf8, 0xea, 0x60, 0xfb, 0xaa, 0x2a, + 0x79, 0x45, 0x75, 0x8d, 0xb4, 0xaa, 0xaa, 0x48, 0xeb, 0xfc, 0x12, 0xd2, 0x88, 0x26, 0xda, 0xdb, + 0x86, 0x77, 0x74, 0x12, 0x52, 0xc5, 0x20, 0x52, 0x8a, 0x59, 0xca, 0x18, 0x3e, 0x20, 0x33, 0x73, + 0xe0, 0xff, 0x68, 0xaa, 0x27, 0x41, 0x01, 0xe6, 0x53, 0x25, 0xaf, 0xa9, 0x9c, 0x5c, 0x13, 0xef, + 0xef, 0x48, 0x9e, 0x39, 0x46, 0x70, 0xf6, 0xf1, 0x6d, 0xf1, 0xd8, 0xee, 0xf8, 0xc0, 0x40, 0x7c, + 0x68, 0x1f, 0xbc, 0x77, 0xc3, 0x5b, 0x87, 0x6c, 0xca, 0x4b, 0x22, 0xf0, 0xc6, 0x89, 0xa2, 0xb4, + 0xd6, 0x6e, 0x6a, 0x41, 0x73, 0x75, 0xb0, 0xbd, 0x26, 0x18, 0x91, 0x15, 0xaf, 0x6f, 0x53, 0xb2, + 0xb7, 0xcd, 0xd4, 0x2b, 0xd6, 0x38, 0x74, 0x59, 0x37, 0x47, 0x2a, 0x7f, 0xc3, 0xa5, 0xd1, 0x6e, + 0x11, 0xc3, 0x16, 0xbb, 0x7e, 0x2b, 0x4c, 0xcd, 0x52, 0x0c, 0xb6, 0x81, 0x12, 0xf8, 0x44, 0x02, + 0xc8, 0xaa, 0x28, 0x09, 0xd4, 0x94, 0x12, 0x2c, 0x93, 0x68, 0x8b, 0x42, 0x6a, 0x17, 0xca, 0xba, + 0x02, 0xf5, 0x18, 0x1f, 0xec, 0x4e, 0x9d, 0x3a, 0xa9, 0x75, 0xee, 0x81, 0xbd, 0xa2, 0x84, 0x04, + 0x28, 0xc9, 0x16, 0xda, 0xb5, 0x64, 0xb7, 0x89, 0xbe, 0x7f, 0xc7, 0x7a, 0x2b, 0xf3, 0x4d, 0x9e, + 0xd1, 0xc2, 0xce, 0x15, 0x13, 0x3c, 0xeb, 0xa0, 0xe1, 0xe1, 0x3b, 0x54, 0xf5, 0x6a, 0xe7, 0xdc, + 0x5c, 0xd8, 0x87, 0x89, 0xd7, 0xcf, 0x3e, 0xec, 0xba, 0x95, 0xec, 0x43, 0x58, 0x95, 0x9a, 0x50, + 0x40, 0x70, 0xc1, 0x21, 0x62, 0x25, 0x11, 0x9e, 0xe2, 0xab, 0x0c, 0x20, 0x85, 0x0f, 0x76, 0x37, + 0x3c, 0xea, 0x54, 0x21, 0x4d, 0xd0, 0x2c, 0x2e, 0x34, 0x98, 0x72, 0xba, 0xd5, 0xae, 0x2f, 0xf6, + 0xf6, 0x1c, 0xc3, 0x1f, 0xfc, 0x47, 0x40, 0xf4, 0xc3, 0xf6, 0x8c, 0x2d, 0xa2, 0xbf, 0x85, 0x53, + 0xa5, 0xcd, 0x1c, 0xfa, 0x13, 0xc1, 0xed, 0x18, 0xc4, 0xb7, 0x46, 0xf3, 0x0c, 0xdf, 0x92, 0x07, + 0x78, 0x67, 0x36, 0x9a, 0xbb, 0x22, 0x48, 0xac, 0x0d, 0x56, 0x05, 0x2d, 0xd2, 0xd8, 0x35, 0xce, + 0x27, 0xec, 0xd9, 0xf4, 0x41, 0xc5, 0xf5, 0xc7, 0x2b, 0x77, 0x54, 0x8f, 0x57, 0x9d, 0x55, 0xd0, + 0xf4, 0xa2, 0x2a, 0x2d, 0x34, 0x1e, 0xaf, 0xc7, 0xf4, 0x7f, 0x3c, 0xc6, 0x93, 0x75, 0x75, 0xb0, + 0x3d, 0xd1, 0x13, 0xd5, 0x8e, 0x9f, 0x02, 0xe6, 0x36, 0x75, 0xbe, 0x25, 0x75, 0x69, 0xc7, 0x92, + 0xc5, 0x8b, 0xaf, 0x95, 0x4f, 0x54, 0xb9, 0xbc, 0x7c, 0x6e, 0xba, 0xcf, 0x14, 0x39, 0xad, 0xb5, + 0x22, 0x0e, 0x78, 0xbf, 0x5e, 0x51, 0xa5, 0x9f, 0x5a, 0x11, 0xc7, 0x2c, 0x8a, 0x88, 0x2c, 0x39, + 0x88, 0x47, 0xa7, 0x45, 0x24, 0x01, 0xe8, 0xd3, 0x6d, 0x18, 0x13, 0xfe, 0x37, 0xde, 0xdf, 0x4b, + 0x0e, 0xe6, 0xd4, 0x00, 0x15, 0xe6, 0x24, 0xce, 0x1d, 0x65, 0xe2, 0x24, 0xbb, 0xdc, 0xca, 0xff, + 0x33, 0x1b, 0x15, 0x38, 0xc7, 0x1e, 0x1f, 0x57, 0xf3, 0x57, 0xa3, 0xb8, 0x9a, 0x60, 0xaf, 0x8a, + 0xaf, 0xe6, 0x13, 0xda, 0xd9, 0xed, 0xe9, 0x76, 0xc8, 0x6a, 0x66, 0x7f, 0xb7, 0x6f, 0x2a, 0x49, + 0x5f, 0x9b, 0xf6, 0x60, 0x32, 0x2e, 0x85, 0xdd, 0x2a, 0xa7, 0x98, 0xf7, 0xbf, 0x64, 0xa1, 0xf9, + 0xb2, 0xd2, 0x68, 0x0c, 0xbc, 0x34, 0x14, 0x6c, 0xbc, 0x23, 0x17, 0xb0, 0xca, 0x7a, 0x01, 0x17, + 0xe9, 0x18, 0x93, 0x5c, 0xc0, 0xb9, 0x84, 0x7a, 0xc4, 0xe4, 0x1c, 0x43, 0x3d, 0xde, 0xad, 0x2b, + 0x47, 0x82, 0x2e, 0x66, 0xda, 0x26, 0x71, 0x01, 0x7d, 0x11, 0xcd, 0xad, 0xc7, 0xf3, 0xcf, 0xf0, + 0x00, 0xfe, 0xe7, 0x6c, 0xf4, 0xa0, 0xfb, 0x98, 0xe3, 0xe3, 0xba, 0xad, 0x19, 0xc5, 0x75, 0x63, + 0x83, 0xea, 0xc7, 0x07, 0x76, 0xdb, 0x36, 0x67, 0xcc, 0x5d, 0x34, 0x23, 0x2d, 0x5b, 0xa6, 0x63, + 0x31, 0x52, 0xbc, 0x26, 0x07, 0xb6, 0xb1, 0x47, 0x4c, 0x9f, 0x48, 0xf6, 0xed, 0x83, 0x06, 0xec, + 0xdb, 0x57, 0xf8, 0xcf, 0xd9, 0xa8, 0xa0, 0xa2, 0x41, 0xf1, 0x06, 0x88, 0x6d, 0xda, 0x1d, 0xb9, + 0x6d, 0xaf, 0x5b, 0x6f, 0xdb, 0xcf, 0x59, 0xbd, 0x0a, 0xdc, 0x36, 0x30, 0xc6, 0xd3, 0x3e, 0xf9, + 0x34, 0xb1, 0xf7, 0xfc, 0xdd, 0xbf, 0x73, 0xb7, 0x5c, 0x7e, 0xf5, 0x81, 0x2a, 0x45, 0x50, 0x48, + 0x48, 0xbb, 0xf3, 0x62, 0x31, 0x0b, 0x9d, 0xf1, 0xfe, 0x5e, 0x76, 0x3f, 0x0c, 0xaa, 0xd6, 0xed, + 0x2e, 0x5b, 0xcd, 0xe5, 0x60, 0x87, 0x58, 0xb3, 0xb9, 0x3d, 0x39, 0xe8, 0x01, 0x97, 0x8f, 0x8e, + 0x8f, 0x1b, 0xfe, 0xda, 0x28, 0x6e, 0xb8, 0x25, 0xa8, 0x0e, 0x0c, 0xd2, 0xbd, 0x0d, 0x76, 0x6f, + 0xac, 0xdc, 0xea, 0x0e, 0x4e, 0x95, 0xda, 0x38, 0xb4, 0x9d, 0x13, 0xd2, 0x1f, 0x85, 0xe8, 0x67, + 0x0d, 0x87, 0xcd, 0xcb, 0xbc, 0xf7, 0x5c, 0x3c, 0xb6, 0x3b, 0xd5, 0x77, 0x02, 0x48, 0xa6, 0x78, + 0x7f, 0x4c, 0x1b, 0xdc, 0x92, 0xe8, 0x3d, 0x41, 0xa3, 0xbb, 0xe8, 0x55, 0x40, 0x0a, 0x0f, 0xb4, + 0xa4, 0xb6, 0x0e, 0xc1, 0xe5, 0x67, 0x97, 0x4f, 0x2e, 0x7f, 0xef, 0xe7, 0x5a, 0x7f, 0x3f, 0xb8, + 0x3f, 0x15, 0xfe, 0xd7, 0x6c, 0x34, 0xcf, 0x31, 0x91, 0x35, 0xe2, 0xed, 0x46, 0x02, 0x6f, 0x5a, + 0x05, 0x36, 0xe5, 0x3a, 0x47, 0x4b, 0x90, 0xc0, 0xa2, 0x8c, 0x48, 0x00, 0x0b, 0x53, 0x2e, 0x25, + 0xf7, 0x9e, 0x7e, 0xa2, 0xe4, 0x09, 0xad, 0x75, 0xbb, 0xd6, 0xf6, 0x8d, 0x4d, 0x70, 0x33, 0x1e, + 0x31, 0xc2, 0x26, 0x55, 0xda, 0x88, 0x22, 0x42, 0x86, 0x83, 0xb8, 0x6d, 0x38, 0x61, 0x5f, 0x0e, + 0x9a, 0xef, 0xfa, 0xd9, 0xfb, 0x58, 0xe1, 0x0e, 0x62, 0x05, 0xd3, 0xc4, 0x3a, 0xd3, 0x61, 0xdc, + 0x49, 0xbc, 0xf0, 0x3f, 0x66, 0x41, 0xbe, 0x25, 0x77, 0xb4, 0x70, 0x97, 0xec, 0x56, 0xf9, 0x8f, + 0x50, 0x5e, 0xb0, 0x39, 0xd2, 0xd4, 0x1c, 0x21, 0xc0, 0xb5, 0x56, 0x95, 0xde, 0x15, 0x48, 0x91, + 0xb8, 0x1a, 0xac, 0xfc, 0x4c, 0x43, 0x9e, 0xce, 0xbe, 0xe1, 0x68, 0x9b, 0x16, 0x1d, 0xf4, 0x7c, + 0xe0, 0xf7, 0x29, 0x45, 0x5a, 0xcb, 0xe9, 0xe1, 0xad, 0xa7, 0xa1, 0xb6, 0xb8, 0xc4, 0xb3, 0xd6, + 0x1b, 0xf6, 0xd7, 0x17, 0x69, 0x47, 0x62, 0x89, 0x9e, 0xaf, 0x49, 0xa1, 0x99, 0xc4, 0x9d, 0x29, + 0x95, 0xc9, 0xf0, 0x65, 0xcf, 0xab, 0xd2, 0xb3, 0xe8, 0x69, 0x61, 0xae, 0x7d, 0x57, 0xd2, 0xd9, + 0xcd, 0xb2, 0x3a, 0xb2, 0xc2, 0xff, 0x2d, 0x1b, 0xcd, 0x73, 0xdb, 0xce, 0xf1, 0x71, 0xcb, 0x56, + 0x5a, 0xb4, 0x41, 0x0f, 0xa5, 0xb5, 0x09, 0xc2, 0x19, 0x8f, 0xb1, 0x43, 0x1c, 0x5c, 0xb7, 0x19, + 0x18, 0xdd, 0x38, 0x73, 0x55, 0xdd, 0xcd, 0xab, 0x46, 0x38, 0xa8, 0x0c, 0xa7, 0x21, 0x3e, 0x46, + 0x34, 0x58, 0x9f, 0x7d, 0x65, 0x52, 0xd7, 0x86, 0xb7, 0x82, 0xbe, 0x22, 0x9b, 0x1d, 0x1f, 0x48, + 0x8e, 0x3e, 0x9e, 0x84, 0xa6, 0x58, 0x36, 0x82, 0x7f, 0x16, 0x9c, 0x4a, 0xe9, 0xfd, 0xc0, 0x67, + 0x44, 0x8a, 0xc4, 0x99, 0x44, 0x20, 0x15, 0xdb, 0xe3, 0x27, 0x2e, 0x21, 0xd5, 0x95, 0x32, 0xa9, + 0xe4, 0x9f, 0x43, 0x13, 0x48, 0xe2, 0x7a, 0x33, 0x79, 0xdd, 0x83, 0x82, 0x51, 0x26, 0xce, 0x20, + 0xa0, 0xb5, 0xbd, 0x25, 0x39, 0xb4, 0x27, 0xde, 0x3f, 0x50, 0x5d, 0x2b, 0x1b, 0x75, 0xfc, 0xdb, + 0x68, 0xb2, 0x31, 0x20, 0xd6, 0xd1, 0x64, 0x1b, 0x7e, 0x50, 0x4f, 0x09, 0x96, 0x0a, 0xf1, 0x51, + 0x48, 0xb2, 0x4f, 0x0e, 0xc7, 0x08, 0xeb, 0x07, 0xd7, 0x26, 0xb5, 0x75, 0x88, 0x58, 0x18, 0x59, + 0xfa, 0xf0, 0x3f, 0x43, 0xd9, 0x15, 0xb5, 0xab, 0x31, 0xb2, 0x9d, 0x02, 0x70, 0xa3, 0xff, 0x36, + 0xac, 0x11, 0x2b, 0x6a, 0x57, 0x13, 0x58, 0xd3, 0x4b, 0xf9, 0x85, 0x28, 0xbb, 0x51, 0x69, 0x24, + 0x39, 0xe7, 0x30, 0x50, 0xe8, 0xbf, 0x8d, 0x64, 0xf5, 0xda, 0xf6, 0x16, 0xad, 0xf7, 0xa0, 0xd1, + 0xbe, 0x51, 0x69, 0xe4, 0x9f, 0x45, 0xd9, 0xcb, 0x6a, 0x57, 0x9b, 0x79, 0xe6, 0x7e, 0x2a, 0xe8, + 0xbf, 0xc5, 0x07, 0xa1, 0xfd, 0x32, 0x63, 0x70, 0x76, 0x86, 0x8b, 0x65, 0xbd, 0x09, 0xdf, 0xc9, + 0xa1, 0xbc, 0x30, 0xd6, 0x95, 0x11, 0x99, 0xbb, 0x4e, 0x61, 0x0b, 0xa4, 0x48, 0x7c, 0x9f, 0x1c, + 0x22, 0x56, 0x76, 0x18, 0x63, 0xb4, 0x26, 0x8e, 0x5e, 0x4c, 0x74, 0x9c, 0xb1, 0xb8, 0xa1, 0x1b, + 0xd1, 0xc0, 0xaf, 0x0e, 0xb6, 0x5d, 0x1d, 0x6c, 0x27, 0xa6, 0x41, 0x25, 0x9e, 0xca, 0xaa, 0xe5, + 0x55, 0xab, 0xaa, 0xf0, 0x9f, 0x15, 0x72, 0x95, 0xb4, 0x0a, 0xff, 0xb5, 0x54, 0xaa, 0x5e, 0x5e, + 0x55, 0x59, 0xe2, 0xa9, 0xae, 0xa9, 0x5e, 0x55, 0x2d, 0x2d, 0xaf, 0x7e, 0x4b, 0x5a, 0x55, 0xbd, + 0xb2, 0x46, 0x26, 0xdf, 0xe4, 0x25, 0x94, 0xf7, 0x51, 0x30, 0xa0, 0x50, 0x89, 0x7d, 0xb1, 0xce, + 0xe4, 0xe4, 0xe8, 0x45, 0x86, 0x69, 0x23, 0x4d, 0xb2, 0x6f, 0xdf, 0x71, 0xd2, 0x91, 0xff, 0xbd, + 0x15, 0xc5, 0x42, 0x84, 0xa9, 0xb7, 0x54, 0xe9, 0x17, 0x56, 0x14, 0xfb, 0xaa, 0x2d, 0xeb, 0x3e, + 0x8b, 0x71, 0xb1, 0xa9, 0x18, 0x1d, 0xb9, 0x28, 0x3e, 0xd0, 0x62, 0x28, 0xb3, 0xb5, 0x21, 0x55, + 0x3b, 0xf7, 0x69, 0x3c, 0xb6, 0x9b, 0x0e, 0x55, 0x6c, 0x45, 0xb4, 0x4b, 0x59, 0xba, 0x0f, 0x99, + 0xb9, 0xd8, 0x18, 0xba, 0xaf, 0xc0, 0xf6, 0x65, 0x9a, 0xdd, 0x8c, 0xa5, 0xf3, 0x96, 0xa0, 0xec, + 0x35, 0xb5, 0x15, 0x24, 0xc2, 0x14, 0x86, 0x62, 0xfd, 0xb7, 0xe1, 0x02, 0x4f, 0xfb, 0xae, 0xa9, + 0xad, 0xf0, 0x54, 0x57, 0xca, 0x7a, 0x1d, 0xff, 0x36, 0xb5, 0x31, 0x9d, 0x6c, 0xc4, 0x93, 0x7d, + 0x85, 0xda, 0x98, 0x3e, 0xcd, 0x76, 0x04, 0xeb, 0x52, 0x53, 0x61, 0x75, 0xf1, 0x92, 0x76, 0x41, + 0x7f, 0x10, 0x13, 0x17, 0xce, 0x69, 0x3d, 0xdf, 0xea, 0x1b, 0xbb, 0xf3, 0xa8, 0x76, 0xe1, 0xd3, + 0x64, 0x6f, 0x1b, 0xb5, 0x3d, 0xad, 0x41, 0x79, 0x4d, 0xde, 0x70, 0xf8, 0x03, 0x1f, 0xf1, 0xbf, + 0x86, 0x10, 0x60, 0x50, 0x24, 0x16, 0xdb, 0x3c, 0xc6, 0x0d, 0x83, 0x3b, 0x20, 0x48, 0xc1, 0x50, + 0x29, 0x75, 0xea, 0x73, 0xad, 0x6f, 0xbb, 0x4c, 0xba, 0xf0, 0xef, 0x20, 0x7c, 0xaa, 0xd8, 0xf1, + 0x7a, 0x4a, 0x79, 0xb5, 0x2a, 0x2d, 0x15, 0xc8, 0x01, 0x1a, 0xac, 0x39, 0x3d, 0x68, 0x48, 0x6c, + 0xc9, 0x1c, 0xc8, 0xf3, 0x1e, 0x1a, 0xca, 0x12, 0x44, 0xd9, 0x40, 0xd8, 0xc6, 0x63, 0xbb, 0x2b, + 0x24, 0x19, 0x0f, 0xcb, 0x4b, 0x28, 0xdf, 0xa7, 0x6c, 0xf4, 0xeb, 0xc8, 0x81, 0x78, 0x4c, 0x3f, + 0xa6, 0x4a, 0x85, 0x02, 0x2d, 0x14, 0xe7, 0x54, 0x48, 0x1e, 0xe3, 0x8a, 0xa6, 0xce, 0xfc, 0xa0, + 0x1d, 0xdf, 0x51, 0x5d, 0xa9, 0x75, 0x5e, 0x90, 0x69, 0x0b, 0xfe, 0xf7, 0x26, 0x42, 0xc0, 0x51, + 0x7c, 0xc0, 0x29, 0xfa, 0x4d, 0x55, 0x5a, 0x2d, 0x58, 0x2a, 0xc4, 0x2a, 0x42, 0x56, 0xe0, 0x70, + 0x3d, 0x57, 0x07, 0xdb, 0x57, 0x48, 0x75, 0xab, 0xaa, 0xe4, 0x12, 0xcf, 0x2f, 0x56, 0xca, 0xaf, + 0xeb, 0xff, 0x56, 0xad, 0xaa, 0xa8, 0x2c, 0xf1, 0x40, 0xe9, 0xbb, 0xf8, 0x87, 0xb4, 0x7c, 0xb9, + 0x61, 0xbc, 0x1e, 0xef, 0x8f, 0x41, 0x3b, 0xd9, 0x32, 0x28, 0xff, 0x47, 0x34, 0xa5, 0x39, 0x50, + 0x57, 0xff, 0x9e, 0xe2, 0x6b, 0x6e, 0xc0, 0x31, 0x3e, 0x67, 0xe0, 0x8d, 0xc2, 0x9f, 0xb7, 0xd6, + 0x88, 0x95, 0xa9, 0xb3, 0x5b, 0xb5, 0xd8, 0x49, 0xb8, 0xa7, 0xe6, 0x53, 0x1c, 0x1d, 0x5c, 0x9c, + 0x3a, 0x76, 0x3a, 0x79, 0x3c, 0xa6, 0x75, 0x6e, 0x89, 0xf7, 0xef, 0x86, 0x46, 0x57, 0x07, 0xdb, + 0x97, 0x40, 0x29, 0x8e, 0xe8, 0x69, 0x56, 0xc8, 0xd6, 0x41, 0x0b, 0x2f, 0x67, 0x43, 0x0e, 0xd3, + 0xf1, 0xc8, 0xf1, 0x2e, 0xb5, 0xbc, 0xba, 0xb3, 0xdc, 0x5e, 0xdd, 0xb1, 0xfe, 0xd8, 0xae, 0x52, + 0xa5, 0x37, 0xd0, 0x4a, 0x21, 0xed, 0x11, 0xdc, 0xd8, 0x53, 0xfb, 0x57, 0xd9, 0xe8, 0x41, 0xf0, + 0xc7, 0x86, 0x24, 0x04, 0xfe, 0xc0, 0x0a, 0xef, 0x87, 0x75, 0xfe, 0x8f, 0x94, 0xeb, 0xf5, 0x05, + 0x76, 0xb0, 0x7e, 0x6e, 0xcc, 0xab, 0x15, 0x31, 0xbe, 0x89, 0x26, 0x34, 0xfa, 0x03, 0xfa, 0xc7, + 0x30, 0x0c, 0x4c, 0x29, 0x7f, 0x49, 0x7f, 0x5a, 0x8d, 0x32, 0xb1, 0x38, 0x7e, 0xe9, 0x4c, 0x62, + 0xef, 0xc5, 0x00, 0xe3, 0x53, 0xe6, 0x25, 0xe1, 0x53, 0xfc, 0x81, 0xf5, 0x60, 0xd0, 0x18, 0xef, + 0xdf, 0x35, 0x7c, 0xa8, 0xcb, 0x48, 0xb4, 0x6a, 0x74, 0xc5, 0x23, 0xc3, 0x32, 0x30, 0x88, 0xd0, + 0x91, 0xa1, 0x6c, 0x94, 0x23, 0xef, 0xb4, 0x8c, 0x0c, 0x5d, 0xf9, 0x57, 0x1c, 0xec, 0xea, 0xa3, + 0xaa, 0x54, 0xc0, 0xb0, 0xab, 0x93, 0x81, 0x5d, 0x8d, 0xc7, 0x62, 0xda, 0x9e, 0x83, 0x66, 0x72, + 0x77, 0x93, 0x41, 0x7d, 0x47, 0x95, 0xde, 0x42, 0x6f, 0x0a, 0x19, 0x77, 0x5d, 0x14, 0x60, 0x86, + 0x74, 0x53, 0x13, 0x3d, 0x51, 0xed, 0x6c, 0x27, 0x68, 0xac, 0x48, 0x0a, 0x96, 0x33, 0x17, 0x87, + 0x0f, 0x75, 0x0d, 0x7f, 0x76, 0xd8, 0xca, 0x97, 0x16, 0x76, 0x67, 0xa3, 0x87, 0xd2, 0x0c, 0x3d, + 0x3e, 0xae, 0xaa, 0xcb, 0x15, 0xcb, 0xb9, 0x43, 0x57, 0xec, 0x5d, 0x55, 0xfa, 0x15, 0x7a, 0x4b, + 0xc8, 0xbc, 0x7f, 0xe2, 0x73, 0xa3, 0x3f, 0x1b, 0xaa, 0x93, 0x83, 0x35, 0x16, 0x6e, 0xb3, 0x1e, + 0x4e, 0xa5, 0x12, 0xf6, 0x87, 0x14, 0xdf, 0x1d, 0xba, 0x6e, 0x15, 0x38, 0x6f, 0x86, 0xf1, 0x41, + 0x72, 0xe5, 0x1e, 0x51, 0xa5, 0x05, 0x02, 0x5b, 0x2e, 0x4e, 0xb3, 0x5d, 0x0e, 0x99, 0xad, 0xe5, + 0x5f, 0x62, 0xe0, 0x1f, 0xe8, 0xe1, 0xc2, 0x8c, 0xf0, 0x0f, 0x39, 0x94, 0x4d, 0xe8, 0x37, 0x62, + 0xbf, 0x65, 0xde, 0x06, 0xf1, 0x15, 0xc7, 0x1e, 0x1f, 0x49, 0xf4, 0x7c, 0x62, 0xda, 0x78, 0xec, + 0x3b, 0x5b, 0x02, 0xfb, 0xac, 0xb5, 0x75, 0xc4, 0x2f, 0x1d, 0x4e, 0xf5, 0x6d, 0x06, 0xff, 0xdd, + 0x78, 0x7f, 0x34, 0xb5, 0xe3, 0xbb, 0x44, 0xf4, 0x94, 0x5d, 0x5a, 0xc3, 0x2e, 0xa2, 0xb0, 0x2b, + 0x1b, 0x2d, 0x48, 0xf7, 0xfd, 0xfb, 0x97, 0x64, 0x74, 0xef, 0x90, 0xcb, 0x06, 0xea, 0xa7, 0x45, + 0x6f, 0x49, 0xa9, 0x2d, 0xfe, 0x07, 0x9c, 0x20, 0x3d, 0x3e, 0xfb, 0xcd, 0xd8, 0x9f, 0xe3, 0x76, + 0x33, 0x60, 0xc4, 0xdb, 0x7e, 0x33, 0x96, 0xd3, 0x9b, 0x81, 0xcd, 0x76, 0xe0, 0x66, 0x40, 0xa4, + 0x2d, 0xa6, 0x5c, 0x2c, 0x80, 0x35, 0xd8, 0xa4, 0x12, 0x89, 0x7d, 0x67, 0x65, 0xb6, 0x19, 0x5f, + 0xe9, 0xb8, 0x22, 0x45, 0xfa, 0x25, 0x33, 0xaf, 0x08, 0x0f, 0xa0, 0x9b, 0xf1, 0xa2, 0xf0, 0xfb, + 0x38, 0x94, 0xd7, 0xe8, 0x0d, 0x34, 0x7b, 0x1b, 0x88, 0x21, 0xda, 0x1f, 0x54, 0xe9, 0x23, 0x81, + 0x14, 0x89, 0x4d, 0x60, 0x62, 0xcb, 0x0e, 0x54, 0x62, 0x9c, 0xa0, 0xbd, 0x42, 0x27, 0xeb, 0x36, + 0x77, 0xc3, 0xfd, 0xd0, 0x61, 0x30, 0x1a, 0x05, 0x79, 0x95, 0x4e, 0x42, 0x9f, 0xdb, 0xa7, 0x53, + 0x83, 0x38, 0x90, 0x91, 0x8e, 0xba, 0x7a, 0x4f, 0x0c, 0x7f, 0x89, 0x43, 0x38, 0x60, 0x03, 0x3a, + 0x18, 0x70, 0x78, 0x47, 0x47, 0xaa, 0x6f, 0x9f, 0x4c, 0xbe, 0x5c, 0x16, 0x50, 0xa5, 0x0d, 0xc8, + 0x2f, 0x64, 0x3e, 0x2c, 0xf1, 0x11, 0xd7, 0xd3, 0x67, 0xef, 0x6f, 0xba, 0x0b, 0x5a, 0x83, 0x89, + 0x13, 0x53, 0xa8, 0xfa, 0x4f, 0xae, 0x77, 0x95, 0x05, 0xb5, 0xb1, 0x7e, 0x57, 0x6b, 0x47, 0x21, + 0x57, 0x65, 0x13, 0x4d, 0x98, 0x72, 0x55, 0xc6, 0xaf, 0x68, 0xac, 0x48, 0x57, 0x6f, 0xcf, 0xed, + 0xbf, 0xcc, 0xa1, 0x87, 0xab, 0xb0, 0x2f, 0x30, 0xed, 0x61, 0x44, 0xbe, 0xbb, 0x03, 0xf7, 0xdf, + 0x58, 0xd4, 0x48, 0x53, 0x10, 0x17, 0x80, 0x2b, 0xb3, 0x89, 0x00, 0xb0, 0x21, 0x63, 0xa2, 0xed, + 0x0b, 0x30, 0xa3, 0xb3, 0x51, 0x62, 0x7b, 0xb2, 0x91, 0x27, 0xfd, 0x88, 0xf7, 0xdf, 0x99, 0x11, + 0x20, 0xad, 0x4e, 0x95, 0x6a, 0x51, 0x8d, 0x30, 0xe2, 0x16, 0x8a, 0x42, 0xe6, 0x53, 0x61, 0xd7, + 0x55, 0xf8, 0x37, 0x1c, 0xf2, 0x54, 0xfa, 0xc3, 0x77, 0x0d, 0xd2, 0x56, 0xab, 0x92, 0x8c, 0x6a, + 0x85, 0x11, 0xe7, 0x20, 0x2e, 0xd0, 0x5a, 0xbe, 0x1d, 0x3e, 0xd0, 0x3b, 0x4a, 0x50, 0xfb, 0x38, + 0x1b, 0x3d, 0x92, 0x61, 0xc8, 0xfb, 0xb0, 0x36, 0x3a, 0xac, 0x36, 0xf2, 0x1e, 0x8a, 0x42, 0xe6, + 0x73, 0xb1, 0x00, 0xdb, 0x3f, 0x21, 0x34, 0x03, 0xbc, 0x20, 0x75, 0x1c, 0x6f, 0x40, 0xd7, 0x1f, + 0x50, 0x7e, 0xc4, 0x1b, 0xde, 0x80, 0x25, 0xca, 0x34, 0x04, 0xc4, 0xaf, 0x05, 0x5a, 0x28, 0xca, + 0x80, 0xeb, 0x69, 0xb6, 0x18, 0x90, 0xc8, 0x19, 0x69, 0x5c, 0xf1, 0x46, 0x5c, 0x1d, 0x6c, 0x37, + 0xfc, 0xb9, 0x56, 0x05, 0xcd, 0x32, 0xc6, 0xde, 0x73, 0x69, 0x28, 0xd8, 0x48, 0x2a, 0x92, 0xbd, + 0x6d, 0x32, 0x1d, 0x9d, 0x5f, 0x4f, 0xe5, 0xbb, 0x70, 0xa6, 0x2b, 0xf1, 0xc1, 0x10, 0xf9, 0xee, + 0x64, 0xf2, 0x69, 0x2c, 0x37, 0xba, 0x56, 0xfe, 0x64, 0x68, 0x89, 0x3c, 0x99, 0x8a, 0x65, 0xab, + 0x6b, 0x96, 0xc9, 0x13, 0x88, 0x28, 0x57, 0x9e, 0x50, 0xb7, 0xba, 0xa2, 0xa2, 0xaa, 0xae, 0x4e, + 0xce, 0x03, 0xf1, 0xad, 0x3c, 0x61, 0x55, 0xf5, 0x8a, 0xaa, 0x95, 0xab, 0x57, 0x51, 0xb9, 0xed, + 0xaf, 0x6d, 0x6e, 0x13, 0x90, 0x64, 0x94, 0x42, 0xcf, 0xd3, 0x44, 0x5d, 0x86, 0xa3, 0x25, 0x51, + 0x71, 0x74, 0x62, 0xe7, 0x89, 0xe1, 0xbd, 0x87, 0x12, 0x07, 0xce, 0xc7, 0xfb, 0x63, 0x00, 0x58, + 0x89, 0xce, 0xae, 0xe4, 0xf1, 0x98, 0x19, 0x04, 0x86, 0x42, 0xd8, 0x53, 0x28, 0x37, 0x1c, 0xf1, + 0x86, 0x22, 0x84, 0x0d, 0x5f, 0xa0, 0x4a, 0xf3, 0x05, 0x28, 0x11, 0x79, 0x12, 0xe4, 0xab, 0xab, + 0x4f, 0x3f, 0x9b, 0x03, 0xe7, 0x87, 0x0f, 0x7c, 0x27, 0x43, 0x15, 0xbf, 0x10, 0x65, 0x2b, 0x01, + 0x1f, 0x31, 0xad, 0x07, 0x49, 0xba, 0x12, 0xf0, 0x19, 0x3d, 0xf4, 0x83, 0x3b, 0x7c, 0x84, 0xf4, + 0xd0, 0x2b, 0xf8, 0xe5, 0x68, 0x8a, 0xf2, 0xa1, 0x52, 0xdf, 0xac, 0xc3, 0xc9, 0x2a, 0x7f, 0xa3, + 0xc2, 0xca, 0xd4, 0xad, 0x35, 0xc6, 0x18, 0x24, 0xfe, 0x13, 0x8c, 0x61, 0x6d, 0xc2, 0xaf, 0x46, + 0x93, 0xea, 0x9b, 0x43, 0x21, 0x25, 0x10, 0xa9, 0x8b, 0x28, 0x4d, 0x44, 0xc2, 0xfe, 0xa4, 0x2a, + 0x2d, 0x16, 0xd8, 0x72, 0xf1, 0x11, 0x32, 0x52, 0xef, 0xe7, 0x5a, 0xcf, 0x69, 0x18, 0x8f, 0x52, + 0x67, 0x24, 0x48, 0x01, 0xdb, 0x9e, 0x7f, 0x03, 0x4d, 0x0e, 0x47, 0x94, 0xa6, 0x3a, 0x1d, 0xc2, + 0x02, 0xf5, 0x0a, 0x4e, 0xe3, 0x30, 0xb1, 0xbc, 0x54, 0x95, 0x0a, 0x05, 0x4b, 0x85, 0x6d, 0x8a, + 0x78, 0xbc, 0x6b, 0xe5, 0xb9, 0x2a, 0x97, 0x95, 0xcf, 0xc9, 0x96, 0x96, 0xfc, 0x21, 0x4e, 0xdf, + 0x5e, 0xa5, 0xc9, 0x88, 0x99, 0x5a, 0xe2, 0x1e, 0x1f, 0x9a, 0x01, 0xec, 0x85, 0xfa, 0x54, 0x48, + 0xf4, 0xd0, 0xd5, 0xaa, 0xf4, 0xaa, 0x00, 0xfd, 0xc5, 0x97, 0xe1, 0x9b, 0x90, 0x82, 0x11, 0xbe, + 0xc9, 0xf8, 0x06, 0x0c, 0xa4, 0x4e, 0x6e, 0x06, 0x41, 0x2d, 0x14, 0x82, 0x42, 0x55, 0x27, 0x4d, + 0x07, 0xb7, 0x68, 0xfd, 0xfd, 0x89, 0x03, 0xe7, 0xaf, 0x95, 0x4f, 0xe8, 0xe6, 0x72, 0xf2, 0xb9, + 0xe9, 0xb3, 0x64, 0x18, 0x91, 0xff, 0x8d, 0x53, 0xa0, 0x5e, 0xae, 0x4a, 0x0f, 0xb3, 0x02, 0x75, + 0xba, 0x50, 0xf3, 0xea, 0x5f, 0x4f, 0x98, 0x94, 0xb7, 0xd8, 0xb0, 0x0a, 0x93, 0x8c, 0x58, 0xed, + 0x0f, 0xb3, 0x61, 0x15, 0xac, 0x5f, 0xc0, 0x01, 0x15, 0x0c, 0xcd, 0xab, 0x4b, 0x6a, 0x15, 0xb3, + 0x23, 0xff, 0x8a, 0x99, 0x81, 0x82, 0x66, 0xe2, 0xb4, 0x64, 0xa0, 0x00, 0xd8, 0xc5, 0xaa, 0xe3, + 0x78, 0x2c, 0x66, 0x44, 0x2c, 0x9b, 0x65, 0x26, 0x9c, 0xa8, 0x46, 0xa8, 0xc1, 0x1b, 0x8e, 0x00, + 0x09, 0x46, 0x84, 0xef, 0x58, 0x2b, 0xc2, 0x14, 0x8b, 0x05, 0xc4, 0x28, 0xbd, 0x7f, 0x67, 0xe2, + 0xeb, 0x63, 0x24, 0x0e, 0x25, 0xc0, 0x24, 0xd3, 0x6a, 0x5e, 0x0d, 0x42, 0xe6, 0xb1, 0xb9, 0x84, + 0x7f, 0x14, 0xac, 0xf9, 0x06, 0x1d, 0xc4, 0xab, 0xde, 0x99, 0x0d, 0x0a, 0xd9, 0xa4, 0x4a, 0x8d, + 0x68, 0x83, 0xe0, 0x44, 0x7b, 0x46, 0x92, 0x40, 0x03, 0x18, 0xc0, 0x50, 0x99, 0xa2, 0xa5, 0xcb, + 0x9c, 0x05, 0xfc, 0x2e, 0x73, 0x70, 0xd4, 0x56, 0xfb, 0x0b, 0x73, 0x13, 0x99, 0x14, 0xd7, 0xff, + 0x81, 0x43, 0x3c, 0xfb, 0xb5, 0xf1, 0xf1, 0xd6, 0x15, 0x8d, 0xcc, 0x13, 0x90, 0xa4, 0x72, 0x57, + 0x38, 0x34, 0x5d, 0x56, 0x22, 0xa1, 0x4d, 0xec, 0x1b, 0xf2, 0x2a, 0x75, 0x3c, 0xa3, 0xb9, 0xc6, + 0x78, 0x81, 0x14, 0x89, 0xf9, 0xb0, 0xc7, 0x3a, 0x51, 0x52, 0x10, 0x9a, 0x03, 0xd9, 0x61, 0x9d, + 0xb9, 0x7e, 0x88, 0xab, 0xda, 0x32, 0x33, 0x8a, 0x2e, 0xac, 0xbb, 0x54, 0x95, 0x3c, 0x66, 0x14, + 0xdd, 0xd9, 0x30, 0x16, 0xf0, 0x80, 0x5a, 0xe7, 0x9e, 0xd4, 0xf7, 0x17, 0x30, 0x4c, 0x4e, 0x08, + 0xe5, 0xe2, 0x81, 0x69, 0xec, 0xdc, 0xb2, 0x17, 0x54, 0xe9, 0x39, 0xf4, 0x8c, 0xe0, 0x98, 0xab, + 0x38, 0x1d, 0x3a, 0xeb, 0x45, 0xc6, 0xb1, 0x93, 0x8f, 0x33, 0xa9, 0x21, 0xff, 0x5f, 0x0e, 0xcd, + 0x60, 0x7a, 0x8e, 0xb7, 0x44, 0x57, 0xe9, 0x19, 0x3b, 0xfc, 0x2c, 0x01, 0x63, 0x37, 0x93, 0xc6, + 0x02, 0x35, 0xa3, 0x4c, 0x92, 0x43, 0x4e, 0xe6, 0xa1, 0x19, 0x70, 0x23, 0xd9, 0x53, 0x5e, 0x66, + 0x3b, 0xe5, 0x45, 0x69, 0x4e, 0x19, 0xb0, 0xce, 0xa3, 0xe9, 0x0f, 0xf9, 0x9e, 0x79, 0xf3, 0xc9, + 0xeb, 0x9d, 0x73, 0xc3, 0xaf, 0x77, 0xee, 0x2d, 0x7c, 0xbd, 0xf3, 0x6e, 0xd1, 0xeb, 0x6d, 0x3e, + 0xb5, 0x13, 0xdc, 0x9f, 0x5a, 0x07, 0x64, 0xdc, 0xb9, 0xa7, 0xf6, 0x15, 0x13, 0x3d, 0xe4, 0x33, + 0x8f, 0x95, 0x19, 0x64, 0x1b, 0x96, 0x8a, 0x01, 0xdb, 0xfa, 0x58, 0x91, 0x26, 0xb7, 0xfc, 0x85, + 0x79, 0x51, 0x95, 0xca, 0xd0, 0xb3, 0x82, 0xf3, 0xba, 0x88, 0xd3, 0x61, 0x1a, 0x99, 0x11, 0xcd, + 0x7f, 0xe5, 0x10, 0xcf, 0x76, 0xfd, 0xb1, 0x61, 0x9a, 0xad, 0x59, 0x68, 0x06, 0xb0, 0x09, 0xb7, + 0x05, 0xd3, 0x44, 0xec, 0xd1, 0x7d, 0xb1, 0x95, 0x05, 0x75, 0x9f, 0x5d, 0xce, 0x7a, 0xc7, 0x9a, + 0x73, 0xd3, 0x61, 0xb0, 0xe3, 0xdb, 0xf8, 0xd0, 0xa5, 0x44, 0xcf, 0x97, 0x60, 0x39, 0x07, 0xd7, + 0x46, 0x3b, 0xd3, 0x9e, 0x68, 0xc5, 0x31, 0x64, 0x2f, 0x1e, 0xc1, 0x21, 0x7a, 0x3f, 0xd1, 0x5a, + 0x4e, 0x24, 0x07, 0x5a, 0x13, 0xbd, 0x9f, 0xb1, 0xc1, 0x78, 0xcb, 0x16, 0xa9, 0x52, 0x09, 0x12, + 0x04, 0xe7, 0xc2, 0xc4, 0xc9, 0x24, 0x7b, 0x2d, 0x5e, 0x01, 0x85, 0x87, 0xc2, 0x68, 0x96, 0xe1, + 0x58, 0x3d, 0x9e, 0xa0, 0xe0, 0xf5, 0x51, 0x40, 0x01, 0xd6, 0xe7, 0x00, 0x14, 0xcc, 0x61, 0x63, + 0x7d, 0x3a, 0x00, 0x61, 0x07, 0x87, 0xa6, 0x2e, 0x53, 0x22, 0x2c, 0x14, 0x2c, 0xb5, 0x41, 0xc1, + 0x42, 0x55, 0x9a, 0x41, 0xa1, 0x60, 0x82, 0xde, 0xd2, 0x33, 0x1a, 0x20, 0x28, 0x2b, 0x55, 0x25, + 0x01, 0x15, 0x09, 0xb6, 0xe1, 0xc5, 0x39, 0x60, 0xd4, 0x67, 0xce, 0x84, 0xc4, 0xc1, 0xfc, 0x17, + 0x59, 0x38, 0x6d, 0xee, 0xbd, 0x7c, 0x1f, 0x69, 0xf4, 0x4b, 0xfb, 0x31, 0x94, 0x55, 0xa9, 0x52, + 0x39, 0x7a, 0x45, 0xb0, 0x6f, 0xc0, 0xf5, 0x06, 0x9e, 0xfc, 0x2f, 0x79, 0x68, 0xda, 0x72, 0x7f, + 0xd8, 0x72, 0x9c, 0xf5, 0x4e, 0x7b, 0xf3, 0x2a, 0x55, 0x7a, 0x9e, 0x65, 0x93, 0x16, 0x9a, 0x4c, + 0xcc, 0xe8, 0x22, 0x4d, 0x82, 0x96, 0xc2, 0x12, 0x2d, 0x80, 0xe1, 0x94, 0xb2, 0x0c, 0xfb, 0xed, + 0x22, 0x96, 0x53, 0x9a, 0x6f, 0xfb, 0x08, 0x1b, 0x7d, 0x0e, 0x46, 0xf4, 0xb0, 0xfc, 0xd1, 0x4b, + 0x26, 0x7f, 0x94, 0x6d, 0xe6, 0xb5, 0x71, 0xe7, 0x8f, 0xb0, 0x51, 0xb8, 0x91, 0x3c, 0x97, 0x70, + 0x47, 0x2f, 0x99, 0x4f, 0x56, 0x0e, 0xd3, 0xdf, 0xf5, 0xc9, 0x62, 0xfb, 0x1b, 0x49, 0x20, 0x58, + 0xf9, 0x4c, 0xee, 0x9d, 0x97, 0xcf, 0x84, 0x28, 0xad, 0x96, 0x67, 0x9a, 0xa9, 0x19, 0xb4, 0xda, + 0x0a, 0x96, 0x56, 0x2b, 0x62, 0xa9, 0xb4, 0x12, 0x0f, 0x35, 0xb2, 0x23, 0x54, 0x9a, 0x69, 0x58, + 0x47, 0xa8, 0xb4, 0x12, 0xcf, 0xd2, 0x95, 0x72, 0x45, 0x15, 0x8d, 0x94, 0x50, 0x4c, 0xc9, 0xb6, + 0xd5, 0xc4, 0xba, 0xb2, 0x96, 0x48, 0x24, 0xf4, 0x37, 0x96, 0x58, 0x57, 0xd6, 0x8a, 0x8b, 0x13, + 0x47, 0xba, 0xe2, 0xb1, 0x4f, 0xb4, 0x9e, 0x58, 0xe2, 0x50, 0x5f, 0xbc, 0x7f, 0x97, 0x19, 0x5b, + 0xb3, 0xba, 0x96, 0x04, 0xeb, 0xeb, 0xbb, 0xa8, 0xc5, 0xf6, 0x52, 0x3f, 0x61, 0x62, 0x7a, 0x59, + 0xcb, 0xff, 0xc2, 0xcd, 0xe1, 0x1e, 0x47, 0xdc, 0xb1, 0xc8, 0x51, 0x7f, 0x0a, 0x23, 0x32, 0x8e, + 0xf5, 0xa9, 0x4b, 0x3b, 0x12, 0x03, 0xc7, 0x8d, 0x83, 0xc6, 0xe6, 0x37, 0x16, 0x29, 0xea, 0x4e, + 0x4e, 0x95, 0xb6, 0x73, 0x68, 0x2b, 0x27, 0xd8, 0x81, 0x5e, 0x6c, 0x82, 0x29, 0xe9, 0xdb, 0x79, + 0x87, 0xa2, 0x13, 0x7e, 0x95, 0x0d, 0xd9, 0xa0, 0xc7, 0x13, 0xfe, 0xaa, 0xcb, 0x6c, 0x0e, 0x85, + 0xf1, 0x17, 0xd8, 0x59, 0x62, 0xfc, 0xb5, 0xc0, 0x12, 0x93, 0x90, 0x39, 0x16, 0x8b, 0xcb, 0xbb, + 0x82, 0x50, 0x83, 0x37, 0xa2, 0xc0, 0x4e, 0x10, 0x85, 0x94, 0xfb, 0xd0, 0xfa, 0x7b, 0x4d, 0x86, + 0x7e, 0x94, 0x0e, 0xad, 0x0d, 0x7d, 0xac, 0xb5, 0x75, 0x24, 0x7a, 0xa2, 0x89, 0xfd, 0x67, 0x6d, + 0xb1, 0xa5, 0x64, 0x66, 0x60, 0xca, 0x68, 0xda, 0xf7, 0x5c, 0xe4, 0x09, 0xca, 0x04, 0x1a, 0x38, + 0x4d, 0xf8, 0xc3, 0x81, 0x47, 0xd1, 0x02, 0xb8, 0xaa, 0x4c, 0x6a, 0xa5, 0x95, 0x4d, 0x3a, 0x8d, + 0x6f, 0xe0, 0xcd, 0xdf, 0xa2, 0x19, 0xfe, 0x30, 0x96, 0xfa, 0x56, 0x06, 0x3f, 0x08, 0x80, 0xfa, + 0x01, 0x1f, 0x64, 0x3e, 0xd8, 0x4f, 0x3a, 0x6b, 0xc5, 0x9f, 0xe1, 0x9c, 0x4e, 0xa5, 0xbe, 0xe0, + 0x07, 0x81, 0x52, 0x88, 0x69, 0xeb, 0x2b, 0x21, 0x51, 0x71, 0x5b, 0x36, 0xa7, 0xce, 0xf4, 0x13, + 0xe1, 0x30, 0x64, 0x63, 0x74, 0xf6, 0xe7, 0x3f, 0x40, 0xf9, 0xca, 0x87, 0x4d, 0xde, 0x80, 0x8f, + 0xb2, 0xe1, 0x6f, 0xab, 0xd2, 0x9b, 0x02, 0x2d, 0x14, 0x97, 0x1b, 0x7f, 0x11, 0xb3, 0x87, 0xe4, + 0x99, 0x03, 0x89, 0x6f, 0xf7, 0xe1, 0x18, 0x6f, 0xad, 0x60, 0xdc, 0x77, 0x75, 0xb0, 0x2d, 0xe4, + 0x0d, 0xf8, 0x82, 0x8d, 0x25, 0x9e, 0x06, 0xc5, 0x1b, 0x8e, 0x94, 0x7e, 0xe0, 0x0d, 0x47, 0x94, + 0x12, 0x4f, 0x63, 0x30, 0x1c, 0x29, 0x6d, 0x0a, 0xfa, 0xc2, 0x25, 0x9e, 0xa6, 0x90, 0x3f, 0x18, + 0xf2, 0x47, 0x36, 0xc9, 0x74, 0x5c, 0xfe, 0x23, 0xc4, 0x37, 0x7a, 0x3f, 0xac, 0x6a, 0x6c, 0x8a, + 0x6c, 0x2a, 0x6f, 0x6e, 0xd8, 0x00, 0x08, 0x8a, 0xd8, 0x4c, 0xbd, 0xa6, 0x4a, 0xcb, 0x04, 0x97, + 0x6a, 0x71, 0x49, 0xa3, 0xf7, 0xc3, 0x52, 0x45, 0x2f, 0x2c, 0x5d, 0xdb, 0xdc, 0xb0, 0xa1, 0x14, + 0xc2, 0xa7, 0x94, 0x68, 0x1d, 0xfb, 0x12, 0x5f, 0x1f, 0x23, 0x11, 0x25, 0xb0, 0x35, 0x8c, 0xa9, + 0x20, 0x77, 0x19, 0x86, 0xff, 0x1d, 0x9a, 0x1a, 0x36, 0xf6, 0xa1, 0x52, 0x69, 0xf0, 0x6e, 0x22, + 0xc6, 0xd0, 0x75, 0xaa, 0x54, 0x2b, 0xd8, 0xaa, 0xc4, 0x97, 0x8c, 0xc8, 0x52, 0xd8, 0xe8, 0xa3, + 0x6b, 0xb7, 0x76, 0xbc, 0x7b, 0x78, 0xdf, 0x25, 0xe0, 0xd3, 0xb4, 0xc1, 0xa8, 0x76, 0x6a, 0x97, + 0xd6, 0x7a, 0x5c, 0x3b, 0xd3, 0x0d, 0x9f, 0xa7, 0x26, 0x8f, 0x4b, 0x16, 0x6b, 0xad, 0xdb, 0x87, + 0xd5, 0x23, 0xb2, 0x6d, 0x3c, 0xfe, 0xbf, 0xe7, 0xd0, 0x6c, 0x5a, 0xb4, 0x3a, 0x10, 0x50, 0x14, + 0x9f, 0xe2, 0x63, 0x58, 0x44, 0x88, 0x9c, 0x26, 0xb8, 0xb7, 0x11, 0x83, 0xcc, 0x79, 0x37, 0x93, + 0x8a, 0xd2, 0x88, 0xbf, 0x51, 0x29, 0x21, 0xfc, 0x1e, 0x44, 0xc8, 0xe9, 0x6d, 0xd3, 0x7e, 0x68, + 0x81, 0x39, 0xea, 0x0f, 0x2a, 0x71, 0x35, 0xf9, 0x34, 0x39, 0xd0, 0x9b, 0xfc, 0x22, 0x36, 0x7c, + 0xe0, 0x1b, 0xed, 0x78, 0xb7, 0x76, 0x76, 0x0f, 0xcc, 0x50, 0xeb, 0xda, 0x9d, 0xfa, 0xec, 0xab, + 0x74, 0xd3, 0x77, 0x9f, 0x07, 0xff, 0x9f, 0x38, 0xf4, 0x90, 0x59, 0x13, 0xf1, 0x37, 0xf8, 0x3f, + 0xc2, 0x1a, 0x8d, 0x55, 0xef, 0x85, 0x14, 0xef, 0x7b, 0xc1, 0x06, 0x1f, 0x11, 0x57, 0x93, 0xe0, + 0x91, 0x99, 0xdb, 0x8a, 0x5b, 0x39, 0x76, 0x59, 0x66, 0x8b, 0xd2, 0xc8, 0x7b, 0x21, 0x25, 0xac, + 0x37, 0x29, 0x81, 0x30, 0x2e, 0x04, 0x9c, 0x71, 0x86, 0x87, 0xe1, 0x83, 0xad, 0x5a, 0x74, 0xd0, + 0x5c, 0x1e, 0x93, 0x48, 0x48, 0xc7, 0x91, 0x43, 0xbb, 0xe3, 0xb1, 0xdd, 0xb0, 0xce, 0xe4, 0xa1, + 0x1f, 0xb4, 0xd6, 0xed, 0x89, 0xbe, 0xbd, 0x70, 0x52, 0x80, 0x56, 0x87, 0x0f, 0x7c, 0x63, 0x66, + 0xe1, 0xe8, 0x8f, 0xfd, 0x7c, 0xb1, 0x9c, 0x79, 0x92, 0x7c, 0x07, 0x87, 0x1e, 0x08, 0x6f, 0xf0, + 0x43, 0x0a, 0x88, 0x5f, 0xf8, 0x23, 0xef, 0x2d, 0x0f, 0xd6, 0x7b, 0x1b, 0xea, 0x22, 0xc1, 0x90, + 0x8e, 0x3c, 0x27, 0xe0, 0x6b, 0xba, 0x52, 0x95, 0x96, 0x0b, 0xe9, 0x5b, 0x89, 0x8b, 0xb4, 0x4b, + 0x43, 0xc9, 0x7d, 0x27, 0x12, 0x3d, 0x6d, 0x89, 0x9e, 0xaf, 0xb5, 0x9e, 0xb3, 0x5a, 0xef, 0x41, + 0x6d, 0xcb, 0x69, 0x6a, 0x9d, 0xc0, 0x4e, 0x08, 0xb2, 0xb7, 0xa5, 0x1f, 0x8b, 0xff, 0x94, 0x43, + 0x73, 0x2d, 0xb5, 0x75, 0x9b, 0xc2, 0x11, 0xa5, 0xb1, 0x36, 0xe8, 0x0b, 0x93, 0xf0, 0x91, 0x38, + 0x82, 0x50, 0xba, 0x36, 0xe2, 0x52, 0x98, 0xcb, 0x86, 0xe6, 0xb5, 0x4a, 0x69, 0x18, 0x17, 0x7b, + 0x6a, 0xea, 0xf4, 0x67, 0xf6, 0xf0, 0xa7, 0x95, 0x5e, 0xa5, 0x31, 0x18, 0xa8, 0x53, 0x22, 0xd4, + 0x8c, 0xb3, 0x36, 0xe8, 0x73, 0xce, 0x12, 0xa6, 0x98, 0xee, 0x03, 0x7c, 0x17, 0x87, 0xe6, 0xfb, + 0xd7, 0x07, 0x82, 0x21, 0x85, 0x8e, 0x17, 0x66, 0x76, 0x96, 0x04, 0xa9, 0xc1, 0x59, 0xba, 0x32, + 0xb5, 0x13, 0x4b, 0x60, 0xa2, 0xe6, 0xa4, 0x8c, 0x1c, 0x60, 0xa9, 0x33, 0xc7, 0x92, 0x67, 0x0e, + 0xd8, 0xa6, 0x93, 0x69, 0x28, 0x7e, 0x33, 0x87, 0x66, 0x06, 0x37, 0xac, 0x0a, 0x46, 0xbc, 0x0d, + 0xab, 0x03, 0x21, 0xc5, 0xeb, 0xdb, 0x54, 0x11, 0x6c, 0x0e, 0x44, 0xb0, 0x2c, 0x7f, 0x0a, 0x9c, + 0x9e, 0x5b, 0xbd, 0xf8, 0xf3, 0xe0, 0x86, 0xd2, 0x88, 0x5e, 0x5a, 0xda, 0x0c, 0xc5, 0xa5, 0xf5, + 0x7a, 0x79, 0x09, 0x20, 0x59, 0x0f, 0x29, 0xf4, 0xd0, 0xb8, 0x25, 0x89, 0x7d, 0x67, 0x87, 0x77, + 0x74, 0xca, 0x6e, 0x63, 0xf1, 0x97, 0x39, 0xf4, 0x40, 0xa3, 0xf7, 0x43, 0xb6, 0xa2, 0x56, 0x09, + 0xd5, 0x2b, 0x81, 0x88, 0x0e, 0x47, 0x93, 0xf0, 0x4c, 0x3e, 0xe6, 0x54, 0xa9, 0x93, 0x13, 0xd2, + 0xb7, 0x13, 0x43, 0x3a, 0x2a, 0xb4, 0x4e, 0xa9, 0x89, 0xd6, 0x96, 0x90, 0x22, 0x72, 0x33, 0x70, + 0x88, 0x11, 0x82, 0xc6, 0xa2, 0x03, 0x74, 0x92, 0xf4, 0x5a, 0xe8, 0x77, 0x08, 0xb7, 0x49, 0xf4, + 0x1e, 0x87, 0x5b, 0xa5, 0xb5, 0x1e, 0xd2, 0x36, 0xf7, 0x24, 0x7a, 0x3f, 0xa3, 0x5a, 0x46, 0xed, + 0xcc, 0x45, 0x39, 0xfd, 0x74, 0x78, 0x95, 0x43, 0xb3, 0x18, 0x4c, 0x81, 0xab, 0x31, 0x52, 0x9b, + 0x8c, 0xd7, 0xf3, 0x6b, 0x55, 0x7a, 0x5b, 0x70, 0x6d, 0x20, 0x56, 0x58, 0x30, 0x1a, 0xac, 0x04, + 0x23, 0x34, 0xcb, 0x1a, 0x5c, 0xf1, 0x9a, 0xd6, 0xb1, 0x2f, 0x3e, 0xd4, 0x91, 0x3c, 0xa5, 0xca, + 0xae, 0x43, 0xf3, 0x7f, 0xca, 0xa1, 0xf9, 0xfa, 0x28, 0xeb, 0xfd, 0x3a, 0x21, 0x60, 0x18, 0x8a, + 0x34, 0x06, 0x37, 0x7a, 0x1b, 0xf0, 0xdc, 0xa6, 0xe0, 0xb9, 0x61, 0xc3, 0x40, 0x21, 0x53, 0x43, + 0xf1, 0x37, 0x46, 0xb8, 0x29, 0xc3, 0x58, 0x17, 0xd3, 0xce, 0xda, 0x0f, 0x2d, 0x96, 0xc7, 0xe0, + 0xec, 0x76, 0x12, 0x46, 0xac, 0xe7, 0x4b, 0xad, 0xe7, 0xb4, 0x7e, 0xaf, 0x42, 0x01, 0x25, 0xa2, + 0x84, 0xe3, 0xfd, 0xbd, 0x89, 0x6f, 0x4f, 0x6b, 0xdb, 0xdb, 0x9d, 0x37, 0xe8, 0x49, 0x03, 0xcd, + 0x66, 0xfa, 0x3c, 0xdf, 0xc8, 0xf2, 0x53, 0x53, 0x0d, 0x41, 0x6a, 0x09, 0xcb, 0x4f, 0x3d, 0xcc, + 0x30, 0x4b, 0xfa, 0xce, 0x58, 0x99, 0xaa, 0xeb, 0x0b, 0xd5, 0x5f, 0x66, 0xf2, 0x41, 0xd3, 0x0c, + 0x92, 0x70, 0x96, 0xc9, 0x07, 0x4d, 0x64, 0x38, 0x20, 0x87, 0x86, 0xe8, 0x45, 0x26, 0x8f, 0xdd, + 0x74, 0x23, 0x23, 0xce, 0x02, 0x26, 0x8b, 0x1d, 0x9f, 0x6c, 0xbb, 0x98, 0x88, 0x9e, 0x22, 0x09, + 0xeb, 0x70, 0xc0, 0x35, 0x26, 0xbd, 0xdc, 0x69, 0x97, 0x04, 0x99, 0x33, 0x30, 0x9a, 0xf8, 0xa3, + 0x2a, 0xfd, 0xce, 0x99, 0x04, 0xf3, 0x3d, 0x36, 0x03, 0x80, 0x4d, 0x23, 0x8e, 0xe5, 0x8b, 0x38, + 0x33, 0x40, 0xd7, 0xee, 0xf8, 0x60, 0xb7, 0xd6, 0x73, 0x3a, 0xd5, 0x77, 0x02, 0xf6, 0x63, 0x78, + 0xeb, 0xe9, 0xe4, 0xd0, 0x37, 0x1e, 0xc2, 0x06, 0x31, 0xf4, 0x98, 0x27, 0x39, 0xb0, 0x2d, 0x3e, + 0x70, 0x9e, 0xc5, 0xc3, 0x9e, 0x34, 0x69, 0x34, 0xff, 0x9c, 0x43, 0x33, 0xd7, 0x36, 0xaf, 0x5b, + 0xa7, 0x84, 0x64, 0x92, 0xdd, 0x4e, 0xd6, 0x71, 0x0c, 0x4e, 0x08, 0x37, 0xa5, 0x7c, 0x1f, 0xa7, + 0x4a, 0x7b, 0x38, 0xc1, 0xad, 0x85, 0xf8, 0x11, 0x14, 0x96, 0x1a, 0x59, 0xf1, 0x4a, 0x71, 0xaa, + 0x4b, 0xf2, 0xc2, 0x11, 0xd3, 0x2b, 0xe6, 0x85, 0x63, 0xaf, 0x29, 0x89, 0x99, 0xca, 0x3c, 0x75, + 0xc9, 0xdd, 0x3b, 0xe0, 0xee, 0xa6, 0xfa, 0x4e, 0xc0, 0x73, 0xa8, 0xb5, 0x1e, 0x62, 0x87, 0xa2, + 0x6b, 0xf1, 0x2c, 0x59, 0xbc, 0x58, 0x76, 0x9b, 0x10, 0x7f, 0x1c, 0x30, 0xd2, 0xb2, 0x90, 0xb7, + 0x5e, 0x59, 0xd7, 0xdc, 0xb0, 0x4a, 0x09, 0x35, 0xfa, 0x03, 0x18, 0x61, 0xd6, 0x29, 0xf5, 0x38, + 0xef, 0xdc, 0x94, 0xf2, 0x75, 0xaa, 0x54, 0x2f, 0xa4, 0x6f, 0x25, 0x2e, 0xd5, 0xf1, 0xd1, 0x7a, + 0x52, 0x57, 0x1a, 0x31, 0x2b, 0x4b, 0xc3, 0x4a, 0x7d, 0x09, 0xa1, 0xcd, 0x70, 0x0c, 0x37, 0xb8, + 0x39, 0x9e, 0xda, 0xa0, 0xcf, 0x33, 0x1c, 0x8d, 0x6a, 0x3b, 0x62, 0x89, 0x9e, 0x28, 0xbd, 0x44, + 0x72, 0xfa, 0x4f, 0xf0, 0xdb, 0x38, 0x34, 0x39, 0x5c, 0xef, 0x0d, 0x54, 0x07, 0x22, 0x4a, 0x68, + 0xa3, 0xb7, 0xa1, 0x60, 0x16, 0x9e, 0xd9, 0x6f, 0x54, 0xe9, 0x1d, 0xc1, 0x52, 0x21, 0xae, 0xd0, + 0x7f, 0x95, 0xfa, 0xc9, 0xcf, 0x12, 0x1b, 0x60, 0x24, 0x3e, 0x8f, 0x26, 0xbe, 0xdf, 0x05, 0xdf, + 0xd3, 0xff, 0xef, 0xde, 0x4b, 0x71, 0x89, 0x4e, 0x1a, 0x9c, 0x52, 0x2d, 0xc7, 0xbf, 0x64, 0xb1, + 0x6c, 0x19, 0x5c, 0x7f, 0x77, 0x67, 0x35, 0x7a, 0x3f, 0xd4, 0x2f, 0x69, 0xad, 0x0e, 0xb7, 0x61, + 0x43, 0xc4, 0x3f, 0x1b, 0x4f, 0xe7, 0x7d, 0x55, 0x5a, 0x2f, 0xb8, 0x36, 0x10, 0x57, 0xea, 0x7b, + 0xa4, 0xb3, 0x93, 0xa5, 0x4d, 0x46, 0x39, 0xa0, 0x3a, 0xd8, 0x12, 0x42, 0xb4, 0x76, 0x76, 0xc5, + 0x7f, 0xf8, 0x84, 0xdd, 0x13, 0x16, 0xd3, 0x99, 0xa7, 0xf9, 0xdc, 0xe2, 0xc5, 0xb2, 0xeb, 0x67, + 0xf8, 0xc3, 0x1c, 0x9a, 0x86, 0x61, 0x74, 0x75, 0x93, 0xce, 0xec, 0xbf, 0xa5, 0x84, 0x82, 0x38, + 0xd9, 0x7a, 0xe6, 0x2c, 0xb3, 0xbf, 0x50, 0xa5, 0x55, 0x82, 0xbd, 0x9f, 0x28, 0x01, 0x76, 0x6e, + 0x6e, 0x2a, 0x5d, 0x17, 0x0a, 0x36, 0x96, 0x7e, 0xa4, 0x84, 0x82, 0xe4, 0xd1, 0x63, 0x5f, 0x86, + 0xab, 0x83, 0xad, 0x89, 0x6f, 0x8e, 0x25, 0x7a, 0xda, 0x3c, 0xec, 0x3b, 0x88, 0x8f, 0xbb, 0x4d, + 0xb6, 0x8f, 0xa9, 0xcf, 0x6f, 0x8e, 0x95, 0x28, 0x96, 0xd6, 0xe9, 0xd7, 0xd0, 0xe7, 0xc3, 0x49, + 0xdd, 0xa7, 0x94, 0x2b, 0xaa, 0xb4, 0x56, 0x48, 0xd3, 0x44, 0x7c, 0x95, 0x79, 0x2f, 0x7c, 0x7a, + 0x4d, 0xa9, 0x77, 0x1d, 0x46, 0xcd, 0x3e, 0x5f, 0x89, 0x49, 0xa4, 0xb7, 0x1e, 0x4f, 0xec, 0xef, + 0xa5, 0x50, 0xe7, 0x3c, 0x68, 0xfd, 0xd1, 0x48, 0xf3, 0x05, 0xfe, 0xa4, 0x4e, 0xe8, 0x39, 0xab, + 0x08, 0x8b, 0x52, 0x80, 0xa7, 0x88, 0x43, 0xeb, 0xa5, 0x6f, 0x95, 0x76, 0x96, 0x84, 0x63, 0x01, + 0x5a, 0x3c, 0xde, 0x7f, 0xdc, 0xe4, 0x5b, 0xd2, 0xcd, 0x32, 0xfd, 0x47, 0xf8, 0x7f, 0xc5, 0xa1, + 0x79, 0x2e, 0xb5, 0x4b, 0xbd, 0xfe, 0x86, 0xe6, 0x90, 0x82, 0x13, 0xca, 0x8f, 0x94, 0xf8, 0xb2, + 0x51, 0x95, 0xde, 0x17, 0x32, 0x0c, 0x22, 0x2e, 0x4f, 0xb3, 0x90, 0x75, 0x50, 0x4f, 0x6e, 0x36, + 0xa4, 0xfb, 0xd2, 0xba, 0x76, 0x83, 0xca, 0x35, 0xed, 0x62, 0x32, 0x7c, 0x89, 0xdf, 0x92, 0x85, + 0x3c, 0xb4, 0x7a, 0x59, 0x53, 0xb3, 0x8d, 0x08, 0xc7, 0x6c, 0x00, 0x4e, 0x5f, 0x3f, 0xa5, 0xfc, + 0x7b, 0x4e, 0x95, 0xce, 0x71, 0xc2, 0x88, 0xcd, 0xc5, 0x76, 0x96, 0xb1, 0x58, 0xdf, 0xd4, 0x7c, + 0x9d, 0xcc, 0x45, 0xd1, 0xb2, 0xda, 0xd5, 0xc5, 0xb7, 0x90, 0xc3, 0x18, 0x71, 0xc2, 0xfc, 0xdf, + 0x72, 0x68, 0x8e, 0x15, 0x45, 0x57, 0x34, 0x35, 0xc3, 0xc3, 0x32, 0x1f, 0x2f, 0xbd, 0x87, 0x53, + 0xa5, 0x83, 0x9c, 0x90, 0xa6, 0x91, 0xf8, 0x47, 0xf7, 0xf2, 0xeb, 0x78, 0x5c, 0xea, 0x9b, 0x9a, + 0x6f, 0xe2, 0x7d, 0x49, 0x33, 0x2f, 0x97, 0x75, 0xad, 0x50, 0x1a, 0x61, 0x5d, 0x0f, 0x66, 0x58, + 0x97, 0xd1, 0xc8, 0xbe, 0x2e, 0xa3, 0xfc, 0x3a, 0xd6, 0xd5, 0xa8, 0x34, 0xde, 0xba, 0x75, 0x19, + 0xdf, 0x2f, 0xd3, 0x9f, 0x45, 0xe4, 0x15, 0x46, 0x90, 0xec, 0x88, 0x0f, 0x01, 0xcd, 0xe4, 0xa8, + 0x77, 0x8b, 0x9b, 0xe7, 0x6a, 0x6c, 0xf2, 0xff, 0x71, 0xe8, 0xe1, 0xb4, 0xdf, 0x18, 0x1f, 0xa2, + 0xbf, 0x17, 0x2c, 0xaa, 0x8b, 0x22, 0x87, 0x59, 0x97, 0x83, 0x18, 0x23, 0xcb, 0x23, 0x86, 0x0a, + 0x3f, 0x33, 0xac, 0xf1, 0xc7, 0x92, 0xf8, 0xec, 0x14, 0xe7, 0x90, 0x9f, 0xed, 0xe4, 0x6e, 0xa3, + 0x00, 0xed, 0x5a, 0x79, 0x49, 0x48, 0x90, 0xf3, 0xa0, 0xb9, 0x3c, 0x89, 0x69, 0x2e, 0x4f, 0xa4, + 0xcd, 0x75, 0x7a, 0xda, 0x21, 0x6f, 0xdb, 0xca, 0x65, 0x10, 0xb8, 0xd5, 0xdd, 0x3a, 0x81, 0xdb, + 0xb5, 0xf2, 0x3c, 0x21, 0xa7, 0xc0, 0x57, 0xc4, 0xb9, 0x4a, 0xde, 0xb6, 0x73, 0x69, 0x44, 0x6f, + 0xbf, 0xbe, 0x0d, 0xa2, 0xb7, 0x6b, 0xe5, 0xf9, 0x42, 0x5e, 0x41, 0xf4, 0xf3, 0xdc, 0xa2, 0x17, + 0x1c, 0x52, 0xb8, 0xbf, 0x1a, 0x41, 0x0a, 0x77, 0x60, 0x4c, 0x49, 0xe1, 0xd8, 0x95, 0xa4, 0x11, + 0xc8, 0xfd, 0x3f, 0xa3, 0x14, 0xc8, 0x7d, 0x33, 0x7e, 0x04, 0x72, 0x00, 0x4a, 0xb5, 0x45, 0x3f, + 0x19, 0x49, 0x32, 0xf7, 0xc5, 0x88, 0x92, 0xb9, 0xcc, 0xa4, 0xef, 0x9d, 0x94, 0xda, 0xc5, 0x46, + 0x90, 0xda, 0x65, 0x9e, 0xe9, 0x5d, 0x96, 0xe8, 0x7d, 0x3a, 0x0a, 0x89, 0x5e, 0xe6, 0x05, 0xbc, + 0xa2, 0x4a, 0x2f, 0x66, 0x96, 0xf6, 0x2d, 0xc8, 0x2c, 0xed, 0xcb, 0x2c, 0xdf, 0x6b, 0xcf, 0x28, + 0xdf, 0x7b, 0xeb, 0x16, 0xcb, 0xf7, 0xc8, 0xb5, 0xfc, 0x1f, 0x66, 0x16, 0xfd, 0xc4, 0x5d, 0xd4, + 0xf7, 0xef, 0x46, 0x21, 0xea, 0xeb, 0x19, 0x8b, 0xa2, 0x3e, 0x03, 0x8b, 0xff, 0x24, 0x93, 0xcc, + 0xef, 0xd3, 0xcc, 0x32, 0xbf, 0xf7, 0x6f, 0xaf, 0xcc, 0xef, 0x5a, 0xf9, 0x44, 0x61, 0x02, 0xc6, + 0x89, 0x67, 0x27, 0xde, 0xe3, 0xf2, 0xbf, 0xd5, 0xac, 0xa9, 0xc3, 0x54, 0xc3, 0x29, 0xa8, 0x94, + 0x35, 0x75, 0xf0, 0x80, 0x6d, 0x83, 0x4d, 0xf8, 0x97, 0xd9, 0xde, 0x61, 0x15, 0x2b, 0x56, 0x9c, + 0x66, 0x44, 0x52, 0xb9, 0x4e, 0xb1, 0xa2, 0xc3, 0x2e, 0xa3, 0xcc, 0xb4, 0x82, 0x98, 0xce, 0x48, + 0x0f, 0x0d, 0x2b, 0x88, 0x89, 0x19, 0x4c, 0xf6, 0x2c, 0xd2, 0xc3, 0x19, 0xd7, 0x2f, 0x3d, 0x1c, + 0x15, 0x07, 0xc9, 0xdf, 0xe3, 0x1c, 0xe4, 0xd5, 0x34, 0x72, 0xc9, 0x99, 0xa3, 0x90, 0x06, 0x7c, + 0x3a, 0x36, 0xa5, 0x96, 0x26, 0x36, 0x72, 0x15, 0x5f, 0xf6, 0x65, 0x14, 0x5f, 0x82, 0x90, 0xf0, + 0xb7, 0x77, 0x46, 0x7c, 0xc9, 0x12, 0x6a, 0x19, 0x24, 0x99, 0x9d, 0x76, 0x49, 0x26, 0x88, 0x0e, + 0x37, 0xdc, 0x6e, 0x49, 0xa6, 0x39, 0xbd, 0x5c, 0x9b, 0x50, 0xf3, 0xcb, 0x74, 0x42, 0xcd, 0x39, + 0x78, 0x66, 0x1b, 0xef, 0x9c, 0x50, 0xd3, 0xc4, 0xeb, 0xdb, 0x26, 0x5c, 0x87, 0x80, 0x73, 0xee, + 0x18, 0x12, 0x70, 0x7e, 0x91, 0x5e, 0xc0, 0x59, 0x60, 0x40, 0xe3, 0x1d, 0x10, 0x70, 0x5a, 0x5e, + 0xc8, 0x74, 0xc2, 0xce, 0x73, 0x19, 0x85, 0x9d, 0x0f, 0xe0, 0xe9, 0x86, 0xef, 0x94, 0xb0, 0xd3, + 0x84, 0xcf, 0x9f, 0x64, 0x92, 0x7b, 0xfe, 0xdb, 0xcc, 0x72, 0xcf, 0x79, 0xa3, 0xc0, 0x74, 0x1f, + 0xde, 0x51, 0xb9, 0x27, 0x8b, 0x16, 0x32, 0x89, 0x40, 0xff, 0x61, 0x24, 0xe9, 0xdf, 0x89, 0x31, + 0x2d, 0xfd, 0x33, 0xf1, 0x74, 0x3a, 0x31, 0xe0, 0x3f, 0x8c, 0x24, 0x06, 0x3c, 0x31, 0xa6, 0xc5, + 0x80, 0x69, 0x17, 0x68, 0x4c, 0x84, 0xf7, 0xa2, 0xbc, 0xc6, 0xa0, 0xaf, 0xb9, 0x41, 0x29, 0x78, + 0x88, 0x20, 0x24, 0x9b, 0x98, 0x6b, 0x05, 0xae, 0xad, 0x0e, 0xac, 0x0b, 0x96, 0x97, 0xaa, 0x92, + 0x20, 0x90, 0xe6, 0xa2, 0x07, 0xa6, 0x67, 0xc4, 0xf6, 0x4b, 0x0d, 0x7d, 0x9d, 0x3c, 0x35, 0xa0, + 0x53, 0x38, 0x87, 0x0f, 0x18, 0x99, 0x97, 0xa1, 0x25, 0xbf, 0x1e, 0x4d, 0xf8, 0x40, 0x59, 0xfb, + 0x5e, 0x30, 0xb8, 0xa1, 0x60, 0x01, 0xfe, 0xc6, 0x7c, 0x17, 0x2f, 0x65, 0xbd, 0x7a, 0x45, 0xd0, + 0xa7, 0x94, 0x2f, 0xd6, 0x09, 0x45, 0xa3, 0x83, 0x58, 0x68, 0x7c, 0xc5, 0x43, 0x4a, 0x80, 0x86, + 0x1a, 0x6e, 0xe9, 0x48, 0x0e, 0x19, 0x69, 0x99, 0x8d, 0xc6, 0x7c, 0x13, 0x24, 0x70, 0x02, 0xa9, + 0x1b, 0x4e, 0xe0, 0xf4, 0x30, 0x16, 0xa6, 0xbd, 0xaa, 0x4a, 0x55, 0x82, 0xad, 0x4a, 0x7c, 0x32, + 0x3e, 0xd0, 0x02, 0xa4, 0x5d, 0x85, 0x04, 0x4a, 0x54, 0x18, 0x54, 0xeb, 0xdc, 0x92, 0xd8, 0x77, + 0x16, 0x86, 0x2e, 0x89, 0xf7, 0x77, 0x90, 0xbd, 0xc5, 0xf9, 0x97, 0x64, 0xdb, 0x20, 0x7c, 0x92, + 0x43, 0x0f, 0x2a, 0x1f, 0x36, 0x29, 0x01, 0x9f, 0x77, 0x6d, 0x83, 0xa2, 0xb3, 0x9c, 0xb5, 0x44, + 0x92, 0x55, 0xd1, 0x1c, 0x09, 0xae, 0x5b, 0x57, 0xf0, 0x18, 0x59, 0xb0, 0xfd, 0x6a, 0x33, 0x37, + 0x1b, 0x92, 0xd0, 0x08, 0x19, 0xc7, 0x11, 0xbd, 0xf1, 0xc1, 0x83, 0x5a, 0x4b, 0x6b, 0x32, 0x76, + 0x0a, 0x68, 0xb0, 0x44, 0xef, 0x71, 0x1d, 0x5a, 0xba, 0xb7, 0x79, 0x9a, 0x82, 0xbe, 0xab, 0x83, + 0xed, 0x7a, 0x57, 0x7f, 0x60, 0xbd, 0x87, 0x4d, 0x21, 0x45, 0xe1, 0x81, 0xe2, 0xb0, 0xf8, 0x60, + 0x77, 0xf2, 0x93, 0xef, 0x12, 0xbb, 0x4f, 0x78, 0x36, 0xf8, 0x1b, 0x1a, 0x8c, 0x28, 0x7a, 0x5a, + 0x74, 0xb0, 0x74, 0xc9, 0x62, 0x39, 0xe3, 0x04, 0xf8, 0xb3, 0x1c, 0xe2, 0x03, 0xca, 0x07, 0xb5, + 0x41, 0x5f, 0x1d, 0x3c, 0x1e, 0x20, 0x0c, 0x7b, 0x7c, 0x14, 0xa8, 0x6b, 0xad, 0x2a, 0xbd, 0x29, + 0xb8, 0x74, 0x16, 0xcb, 0x9d, 0x65, 0x57, 0x07, 0xdb, 0x13, 0xfb, 0xcf, 0x36, 0x05, 0x7d, 0xda, + 0x40, 0x2c, 0xf9, 0xd5, 0x2e, 0xed, 0x78, 0x77, 0xfc, 0x62, 0x4b, 0xfc, 0xe2, 0x2e, 0xad, 0x6b, + 0x77, 0xa2, 0x8d, 0x9c, 0x45, 0x85, 0x64, 0xcc, 0xdc, 0xb3, 0xd8, 0x88, 0x3a, 0xe6, 0x32, 0x3c, + 0x15, 0x75, 0x67, 0x96, 0xc2, 0x8a, 0x0f, 0x01, 0x14, 0x5c, 0xbf, 0xa8, 0xdb, 0x70, 0x94, 0x39, + 0x99, 0x8d, 0x1e, 0x4e, 0xfb, 0x8d, 0xf1, 0x21, 0xea, 0xf6, 0xdf, 0x98, 0xa8, 0x1b, 0x32, 0xb1, + 0x83, 0x79, 0xaa, 0x87, 0x7a, 0xd2, 0x38, 0x9a, 0x8d, 0x91, 0x74, 0x4f, 0x85, 0xff, 0xa6, 0x18, + 0x3d, 0x58, 0xb7, 0x29, 0x50, 0x7f, 0x5f, 0x20, 0x7f, 0x23, 0x02, 0xf9, 0x43, 0x99, 0x04, 0xf2, + 0x7e, 0x9d, 0x13, 0x70, 0x13, 0xc8, 0x2f, 0xbb, 0x6e, 0x81, 0xfc, 0xf3, 0x9e, 0x0a, 0x49, 0xbb, + 0x78, 0xde, 0xe4, 0x4e, 0x71, 0x45, 0x66, 0x31, 0xfd, 0xbe, 0x74, 0x62, 0xfa, 0x46, 0x55, 0x7a, + 0xd7, 0x21, 0xa6, 0x5f, 0x71, 0x73, 0x62, 0xfa, 0xab, 0x83, 0x9f, 0x24, 0x0e, 0x1c, 0x4d, 0xec, + 0x6b, 0x85, 0xa7, 0xe2, 0xbe, 0xd4, 0xfe, 0x47, 0x22, 0xb5, 0x6f, 0x1f, 0x85, 0x3d, 0x2d, 0x36, + 0x0e, 0xcd, 0x20, 0x99, 0x5f, 0x38, 0x7a, 0xc9, 0x7c, 0x24, 0xd4, 0x9c, 0x51, 0x30, 0x7f, 0x78, + 0x44, 0x73, 0xda, 0x7a, 0x55, 0xfa, 0x4d, 0x7a, 0xe1, 0x7b, 0xd5, 0x4d, 0x0b, 0xdf, 0xf1, 0x0c, + 0xd3, 0xca, 0xde, 0xf7, 0x8c, 0xca, 0x9a, 0x16, 0xab, 0x32, 0x32, 0xca, 0xd7, 0x4b, 0x33, 0xcb, + 0xd7, 0x99, 0x58, 0xc0, 0x78, 0x3e, 0xf7, 0xc5, 0xed, 0xf7, 0xc5, 0xed, 0xa3, 0x14, 0xb7, 0x5b, + 0xe4, 0xc9, 0x53, 0x6e, 0x83, 0x3c, 0x79, 0xea, 0xf5, 0xca, 0x93, 0x47, 0x25, 0x10, 0x9e, 0x76, + 0x8f, 0x0b, 0x84, 0xff, 0x3a, 0x8d, 0x40, 0x78, 0x3a, 0x5e, 0xf7, 0xf8, 0x14, 0xf9, 0x7e, 0x9d, + 0x51, 0xe4, 0x0b, 0xe1, 0xc9, 0x03, 0x3a, 0xba, 0xce, 0x20, 0xf2, 0xad, 0x18, 0x9d, 0xc8, 0xf7, + 0xb6, 0xc8, 0x7b, 0xf9, 0x31, 0x2b, 0xef, 0x9d, 0x39, 0x06, 0xe5, 0xbd, 0xc7, 0x81, 0x54, 0xd6, + 0x2b, 0xea, 0x22, 0xde, 0x50, 0xa4, 0xb9, 0x09, 0x4f, 0x15, 0x24, 0xfb, 0x11, 0x55, 0x52, 0x04, + 0x97, 0x6a, 0x66, 0xa2, 0x61, 0x28, 0x65, 0xa7, 0xa9, 0x75, 0x1e, 0x8c, 0xf7, 0xc7, 0x30, 0xee, + 0xc2, 0x19, 0xba, 0xaf, 0x77, 0xa2, 0x2e, 0x1f, 0xe4, 0xff, 0x9c, 0x43, 0x05, 0x6c, 0x31, 0x09, + 0x61, 0xaf, 0x30, 0xc6, 0xc1, 0xbb, 0x38, 0x55, 0xfa, 0xbd, 0x90, 0xb6, 0x95, 0xf8, 0x1b, 0xeb, + 0x9c, 0x4b, 0xc3, 0xa4, 0xd2, 0xb9, 0xc3, 0xb0, 0x00, 0xad, 0xb3, 0x8f, 0x04, 0xdc, 0xbf, 0x91, + 0x45, 0xa4, 0x9d, 0xc7, 0x98, 0x37, 0x21, 0xfe, 0x62, 0x24, 0x13, 0xe2, 0x71, 0x23, 0x61, 0x2f, + 0x18, 0x8f, 0x12, 0xf6, 0x07, 0xee, 0x45, 0x09, 0xfb, 0xbc, 0x7b, 0x5d, 0xc2, 0x3e, 0xff, 0x9e, + 0x90, 0xb0, 0x33, 0xe2, 0xef, 0x07, 0x6f, 0xab, 0xf8, 0x7b, 0x44, 0x61, 0xf4, 0x43, 0xf7, 0xb8, + 0x30, 0x7a, 0xc1, 0x18, 0x16, 0x46, 0xbf, 0xa9, 0x4a, 0xab, 0x51, 0x9d, 0x90, 0x51, 0xfe, 0x28, + 0x3e, 0xa4, 0x75, 0xb5, 0x27, 0x7a, 0x4f, 0x38, 0xea, 0xff, 0x1b, 0x7b, 0xef, 0x1a, 0x1e, 0xc5, + 0x91, 0x25, 0x88, 0x4e, 0x16, 0x12, 0x88, 0x40, 0x18, 0x1c, 0x36, 0x20, 0x17, 0x06, 0x97, 0xcb, + 0xd8, 0x40, 0x59, 0x20, 0x48, 0x63, 0x6c, 0xcb, 0xed, 0x47, 0x4a, 0x02, 0x5a, 0xe6, 0x61, 0xb9, + 0xc0, 0x74, 0xbb, 0xdd, 0x3d, 0x74, 0xa9, 0x2a, 0x2d, 0xaa, 0x91, 0xaa, 0xaa, 0xab, 0x4a, 0xb2, + 0xb1, 0xc7, 0x7b, 0x65, 0x23, 0x01, 0x32, 0xc2, 0x48, 0x69, 0x03, 0x46, 0xc6, 0x3c, 0xda, 0xbc, + 0xec, 0x36, 0x12, 0x18, 0x1b, 0x84, 0x1e, 0xcd, 0xcc, 0xb7, 0x3b, 0x3f, 0x66, 0xb6, 0xe7, 0xe5, + 0xd9, 0x9d, 0x99, 0xbb, 0xfb, 0xed, 0x9d, 0xd9, 0xeb, 0xca, 0x2a, 0x69, 0xf7, 0x9b, 0xe5, 0xce, + 0xdd, 0x7b, 0xef, 0xb7, 0x5f, 0xdf, 0x9d, 0xb9, 0xf7, 0xcb, 0x38, 0x11, 0x91, 0x91, 0x95, 0x99, + 0xa5, 0x12, 0x76, 0x37, 0xc6, 0xdd, 0x7f, 0x40, 0x15, 0x71, 0x22, 0x32, 0xce, 0x89, 0xf3, 0x88, + 0xc7, 0x89, 0x73, 0xe0, 0xa0, 0xc9, 0x7a, 0x14, 0xcd, 0x8f, 0x9f, 0x4f, 0x4d, 0x41, 0x0b, 0x5c, + 0x7a, 0xfd, 0xed, 0x39, 0x7c, 0x06, 0xc2, 0xe5, 0xfa, 0x3a, 0xbe, 0xb1, 0x87, 0xcf, 0x1f, 0x4f, + 0x41, 0x0b, 0xc1, 0x58, 0xb9, 0x1e, 0x3f, 0xbf, 0x60, 0x0f, 0x43, 0xf3, 0xb8, 0xa6, 0x54, 0x88, + 0xfb, 0xd1, 0x19, 0x96, 0x18, 0x33, 0xc5, 0x3f, 0x91, 0xfc, 0x07, 0x29, 0x3f, 0xdc, 0xd4, 0x1f, + 0x4b, 0x9a, 0xf2, 0x47, 0x92, 0x19, 0x70, 0xea, 0x73, 0x49, 0x8c, 0x38, 0xe5, 0x42, 0xc6, 0x1b, + 0x0b, 0x3f, 0xa5, 0x0f, 0x5c, 0xcd, 0x0c, 0xbd, 0x6d, 0x2c, 0x9e, 0x48, 0xb2, 0x33, 0xbb, 0x6f, + 0x9a, 0xde, 0xdf, 0x35, 0xf6, 0x61, 0x67, 0xae, 0xaf, 0x83, 0x87, 0x4e, 0x31, 0x44, 0xef, 0xbd, + 0x01, 0x4b, 0x4e, 0xd6, 0x2b, 0x9f, 0xc2, 0x2b, 0xc8, 0x5c, 0x5f, 0x47, 0xad, 0x02, 0x17, 0x8d, + 0x96, 0xd0, 0x56, 0xcf, 0x68, 0xca, 0x3a, 0xb4, 0x26, 0x30, 0x01, 0x91, 0xe5, 0x79, 0x2e, 0x08, + 0x8a, 0xd2, 0xe5, 0xff, 0x68, 0x0a, 0xba, 0xc7, 0xb5, 0x9f, 0x5b, 0x43, 0xaa, 0x9a, 0x6f, 0x50, + 0xaa, 0x08, 0x9f, 0x83, 0x54, 0xdd, 0x27, 0x86, 0xc5, 0xfa, 0xc6, 0x0a, 0xd6, 0x55, 0x0f, 0x9a, + 0xbf, 0x4e, 0x4d, 0xdf, 0x0c, 0xa9, 0x6a, 0x13, 0xdc, 0xff, 0x3c, 0x66, 0x0c, 0x22, 0xd3, 0xfd, + 0x6f, 0x7d, 0xad, 0x02, 0x18, 0x64, 0x86, 0x7a, 0x59, 0x21, 0xc9, 0x8f, 0x97, 0x19, 0x3e, 0xcd, + 0xd2, 0xb1, 0xc1, 0xff, 0xd9, 0xc3, 0x97, 0x2b, 0x7d, 0xfa, 0xa9, 0xfd, 0xb9, 0x77, 0xcf, 0xb1, + 0xdb, 0x89, 0xbc, 0x76, 0xa6, 0xdf, 0x60, 0xf5, 0x3a, 0x4d, 0xa9, 0x43, 0x35, 0x81, 0x42, 0x68, + 0xcb, 0xf7, 0x41, 0x8c, 0x17, 0x97, 0x69, 0xa3, 0x01, 0xc5, 0xfe, 0xc7, 0x14, 0x74, 0xb7, 0x73, + 0x27, 0xbf, 0x3d, 0xa6, 0x83, 0x47, 0x1c, 0xfb, 0xa6, 0x72, 0x38, 0x8b, 0xef, 0x5f, 0x70, 0xa6, + 0xe4, 0x05, 0x2e, 0xf3, 0xed, 0x16, 0xde, 0xe7, 0x5c, 0x09, 0xba, 0x7b, 0x43, 0x34, 0xe5, 0x2e, + 0x37, 0x31, 0xbb, 0xdc, 0x34, 0x68, 0xca, 0x5a, 0x51, 0x6e, 0x1e, 0xb3, 0x35, 0xfe, 0x0a, 0xf1, + 0xd1, 0x5e, 0xb4, 0xc7, 0x47, 0x7b, 0x42, 0x53, 0x1e, 0x12, 0x9d, 0x86, 0x1f, 0x70, 0xff, 0xde, + 0x04, 0xae, 0xc3, 0xf5, 0xf9, 0xa1, 0xd2, 0xaa, 0x34, 0xe5, 0x7e, 0x33, 0x44, 0x80, 0xd7, 0xbe, + 0xe4, 0x72, 0x8d, 0x9a, 0x56, 0x9f, 0x1f, 0x35, 0x0d, 0xba, 0x62, 0xe7, 0xbb, 0xf6, 0xae, 0x5c, + 0x03, 0xa8, 0x55, 0x9f, 0x92, 0x34, 0xe5, 0x84, 0x84, 0x3e, 0x90, 0x02, 0x05, 0xa7, 0x42, 0x7e, + 0xdd, 0x65, 0x6e, 0x7f, 0x43, 0x71, 0xbb, 0xfe, 0xc9, 0x83, 0x16, 0xb8, 0x8c, 0xef, 0xd6, 0x50, + 0x13, 0x2f, 0x5a, 0x82, 0x78, 0x15, 0xaf, 0x26, 0x16, 0x68, 0x8a, 0x97, 0xaa, 0x09, 0x6c, 0x09, + 0xec, 0x25, 0xc6, 0x25, 0xa4, 0x19, 0x11, 0x0a, 0x53, 0x68, 0xd2, 0xe2, 0xf9, 0xa9, 0xc7, 0xe1, + 0xf9, 0xe0, 0x66, 0x12, 0x84, 0x8e, 0x09, 0xe8, 0xd3, 0x68, 0xaa, 0x2a, 0xba, 0x28, 0x90, 0x54, + 0xa9, 0xb4, 0x48, 0x9e, 0x2f, 0x06, 0x9a, 0xe0, 0xf7, 0xdd, 0xb0, 0xf9, 0x0a, 0x52, 0x20, 0xeb, + 0x05, 0x88, 0xe7, 0xd7, 0x70, 0x01, 0x32, 0x65, 0xb2, 0x17, 0x20, 0xdf, 0x11, 0x2c, 0x6a, 0x89, + 0xc9, 0x19, 0xa6, 0x45, 0xbd, 0xbd, 0x80, 0x5d, 0x74, 0xf6, 0xc4, 0x61, 0x44, 0xfb, 0x9d, 0x45, + 0xfb, 0xe6, 0xac, 0xd9, 0x72, 0x12, 0x42, 0x41, 0x92, 0x1b, 0x97, 0xb8, 0xd1, 0xad, 0xe4, 0xc9, + 0x77, 0xc1, 0xce, 0x30, 0x3a, 0x91, 0xe4, 0xbb, 0xe5, 0xfa, 0xd1, 0x0b, 0xfa, 0xf1, 0xe3, 0xcc, + 0xa9, 0x90, 0xa6, 0xd4, 0xad, 0x45, 0x08, 0xfe, 0xda, 0x14, 0x6a, 0x61, 0x33, 0x73, 0x9f, 0xa6, + 0xf8, 0x02, 0x42, 0xb1, 0x8c, 0xc5, 0xa6, 0x34, 0xa0, 0xb4, 0x50, 0x8f, 0x9f, 0x46, 0x33, 0xe0, + 0x97, 0xc1, 0x23, 0x2c, 0x10, 0x37, 0x89, 0x46, 0x2a, 0x96, 0xb3, 0x11, 0x40, 0x2c, 0xc9, 0xa0, + 0x58, 0x55, 0x7d, 0x8f, 0xa6, 0xdc, 0x8d, 0xbc, 0x01, 0x01, 0x19, 0xeb, 0x78, 0xfd, 0x7f, 0x2d, + 0xa1, 0xb9, 0xeb, 0xd4, 0x74, 0x6d, 0x73, 0xbc, 0x35, 0x02, 0x40, 0x5c, 0x7e, 0x1f, 0x45, 0xd3, + 0xc2, 0x46, 0x31, 0x37, 0xaf, 0x0b, 0x21, 0x6c, 0x0d, 0x94, 0xc9, 0xd3, 0x33, 0x43, 0xbd, 0x82, + 0x3d, 0x9b, 0xed, 0x09, 0xb2, 0x2a, 0xfc, 0x34, 0x9a, 0x1e, 0x0a, 0x93, 0x1b, 0x68, 0x2e, 0xb7, + 0x24, 0xb7, 0xa0, 0x59, 0x2a, 0xcf, 0xc8, 0x0c, 0xf5, 0xea, 0x7b, 0xce, 0x8f, 0x0d, 0xbc, 0x41, + 0x65, 0x74, 0xb6, 0x27, 0x68, 0x56, 0xb3, 0xd8, 0xd0, 0x2e, 0x43, 0x63, 0x61, 0x0c, 0xc9, 0xf7, + 0x7c, 0x80, 0x0f, 0x84, 0x31, 0x34, 0x03, 0xd1, 0xce, 0xb3, 0x35, 0xbd, 0x35, 0x04, 0x6c, 0xa3, + 0xc5, 0x16, 0xd8, 0xdc, 0x5d, 0xcd, 0x89, 0x2c, 0x4e, 0xfb, 0x3f, 0xaa, 0x29, 0x0f, 0xa3, 0x87, + 0x02, 0x6e, 0xd4, 0x90, 0x2b, 0xdc, 0x28, 0xe9, 0x7f, 0xdb, 0x83, 0xca, 0x7e, 0x10, 0x8f, 0x81, + 0x23, 0xe9, 0x0a, 0x9e, 0xba, 0x1b, 0x58, 0xa1, 0x42, 0x53, 0xe6, 0xf0, 0x9c, 0xce, 0x33, 0x84, + 0x6c, 0xce, 0x3c, 0x53, 0xf7, 0x2a, 0x9a, 0x03, 0x5a, 0xa0, 0x99, 0xc8, 0xfa, 0xb3, 0x78, 0x1b, + 0xca, 0xf7, 0x90, 0xda, 0xb9, 0x1a, 0x95, 0x19, 0xff, 0x13, 0xa1, 0x29, 0x8e, 0xdd, 0x39, 0x3c, + 0xfe, 0x0e, 0x9a, 0x6e, 0xfc, 0x0d, 0xb2, 0x52, 0x52, 0x54, 0x63, 0xb3, 0x41, 0xb5, 0x31, 0x42, + 0x34, 0x3f, 0xc0, 0x51, 0x16, 0x46, 0x48, 0x45, 0x65, 0x68, 0x2a, 0x9a, 0x4d, 0x68, 0xc8, 0x72, + 0x7a, 0x1b, 0x84, 0x79, 0xcc, 0xbe, 0x0a, 0x9d, 0x9f, 0xbf, 0x7b, 0xcb, 0x0c, 0xf5, 0x32, 0x73, + 0x24, 0xda, 0xa1, 0xa7, 0xd1, 0x0c, 0xfa, 0x43, 0xd0, 0x11, 0x30, 0x62, 0xa1, 0x5c, 0x2e, 0x87, + 0xb6, 0x3c, 0xde, 0xbc, 0x59, 0x85, 0x5f, 0x44, 0x98, 0xfe, 0xac, 0x53, 0x53, 0xe1, 0x64, 0x94, + 0xe8, 0x50, 0x4a, 0x37, 0xa2, 0x70, 0x1d, 0xaa, 0x65, 0x4c, 0x35, 0xdf, 0x81, 0x03, 0x63, 0xd7, + 0xa8, 0x1f, 0x71, 0xd0, 0x01, 0x0e, 0xd7, 0xa3, 0xdb, 0x68, 0xe9, 0x56, 0x35, 0x99, 0x32, 0x3a, + 0x2e, 0x31, 0x5f, 0x90, 0xe5, 0x55, 0xb1, 0x41, 0xe6, 0xba, 0xf6, 0x66, 0x8f, 0x7e, 0x12, 0xcc, + 0xab, 0x35, 0xf4, 0x01, 0x2d, 0x79, 0x76, 0x33, 0x8d, 0xc4, 0xeb, 0x17, 0xd3, 0xbc, 0x3c, 0xbb, + 0x99, 0x8f, 0x8a, 0xe4, 0x39, 0xcc, 0x5d, 0x1a, 0xce, 0x0d, 0x1f, 0x0f, 0x9a, 0xd5, 0x02, 0xad, + 0x48, 0x34, 0xdf, 0xa9, 0x76, 0x5a, 0x91, 0x80, 0xbe, 0x6c, 0x18, 0x24, 0xa0, 0x6f, 0x50, 0xac, + 0xc2, 0xfb, 0x25, 0x34, 0x93, 0xfe, 0xde, 0x2c, 0x66, 0xc5, 0x6f, 0xd2, 0x94, 0x48, 0xc0, 0x5a, + 0x23, 0xd3, 0x15, 0x05, 0x0d, 0xce, 0x1b, 0x6c, 0x8d, 0xc5, 0xa2, 0xb1, 0x26, 0xdf, 0xd8, 0xb5, + 0x9e, 0xb1, 0x93, 0xdd, 0x99, 0xc1, 0xf3, 0x3e, 0x12, 0x38, 0xc2, 0x28, 0xa2, 0x99, 0x50, 0x06, + 0xcf, 0xfb, 0xea, 0x23, 0x24, 0xdc, 0xd5, 0xf8, 0xe1, 0x4f, 0x73, 0xa3, 0xfd, 0x46, 0x81, 0xd2, + 0x18, 0x8b, 0x27, 0x5b, 0x42, 0xcd, 0x3e, 0x88, 0xc9, 0xbf, 0x34, 0x68, 0xfd, 0x06, 0x8e, 0xa2, + 0xb2, 0xe6, 0x78, 0x18, 0x5c, 0x8d, 0x20, 0x9e, 0xee, 0x46, 0x4d, 0x79, 0x26, 0xc0, 0x0b, 0xe5, + 0x27, 0x0d, 0x0d, 0x29, 0xa8, 0xea, 0x25, 0x4d, 0x3b, 0x54, 0xc8, 0xe6, 0x08, 0x19, 0xde, 0x73, + 0x43, 0x67, 0xf5, 0xbd, 0x3f, 0xd7, 0xb5, 0x6e, 0xce, 0xa7, 0x50, 0x02, 0x63, 0x5f, 0x1a, 0xe4, + 0x3d, 0xe1, 0xef, 0xa3, 0x72, 0xfa, 0xed, 0x0d, 0x6a, 0x9b, 0xda, 0x4c, 0xb3, 0xe6, 0xaf, 0xd2, + 0x94, 0x95, 0x01, 0x4b, 0x85, 0x7c, 0x2f, 0xc5, 0x9b, 0xf4, 0xb3, 0x04, 0xc4, 0xe6, 0xcb, 0xf6, + 0x37, 0x0c, 0x21, 0x81, 0xb2, 0xa5, 0x41, 0x4b, 0x83, 0x6a, 0x63, 0x49, 0x87, 0xee, 0x0b, 0xd8, + 0xc4, 0x42, 0x9e, 0xc5, 0x79, 0x9e, 0x0a, 0xcf, 0x09, 0xba, 0x46, 0x17, 0x94, 0x10, 0x85, 0xff, + 0xea, 0xe6, 0xe6, 0x51, 0x6e, 0x9e, 0xb9, 0xb2, 0x71, 0x31, 0xcf, 0xac, 0x29, 0xb3, 0xd2, 0x16, + 0x43, 0x35, 0xe5, 0x46, 0x0c, 0x55, 0xbd, 0xa6, 0xac, 0x45, 0x75, 0x81, 0xc2, 0xb8, 0xc9, 0xf7, + 0x09, 0x5a, 0x16, 0xc6, 0x43, 0x85, 0x5a, 0x34, 0x5a, 0x59, 0x0f, 0x5a, 0xe8, 0xd6, 0xcd, 0xad, + 0x61, 0xbb, 0xb6, 0x59, 0x6c, 0x97, 0xcf, 0xbe, 0x38, 0xb4, 0x72, 0x89, 0x6b, 0x60, 0x62, 0x91, + 0x38, 0x16, 0x6b, 0x56, 0xa7, 0x29, 0x0a, 0x7a, 0x2a, 0x30, 0x01, 0x99, 0xe4, 0x05, 0x05, 0xc9, + 0xed, 0xef, 0xf1, 0x20, 0xaf, 0xd5, 0x1e, 0x1a, 0x4a, 0xff, 0x6b, 0x58, 0xf7, 0xac, 0xcc, 0x63, + 0xc4, 0x22, 0xd6, 0x89, 0x8f, 0xd9, 0x39, 0x70, 0x7e, 0x01, 0x0e, 0x14, 0x59, 0x8f, 0x1e, 0x28, + 0x17, 0x40, 0x45, 0x5e, 0xec, 0x60, 0xdd, 0xb9, 0xdd, 0x15, 0x79, 0xef, 0x2f, 0xe1, 0x90, 0xd2, + 0xde, 0xcf, 0xad, 0x96, 0x4f, 0xc1, 0x60, 0xbc, 0x8a, 0x7c, 0xc6, 0x63, 0x36, 0xbd, 0xb8, 0x25, + 0x13, 0x0d, 0xe4, 0x5f, 0x88, 0x1e, 0xf2, 0xbd, 0x13, 0x12, 0xd6, 0x7f, 0xba, 0x04, 0x95, 0x3f, + 0x4b, 0x72, 0xdf, 0x46, 0xe3, 0xb1, 0x0d, 0xf1, 0x26, 0x5c, 0x8b, 0xca, 0x99, 0xe3, 0x97, 0x90, + 0x32, 0xd0, 0x58, 0xa1, 0x07, 0x2c, 0x15, 0x72, 0x39, 0x5c, 0xf7, 0x52, 0x2b, 0x66, 0xa9, 0xc3, + 0x8f, 0x19, 0xfb, 0x0a, 0xf8, 0xcd, 0xd7, 0xd6, 0x84, 0x40, 0x42, 0xb1, 0x5c, 0x06, 0x1d, 0xd4, + 0xd7, 0x05, 0x85, 0x52, 0xfc, 0x10, 0x4f, 0x0a, 0x21, 0xf0, 0x19, 0x4b, 0x0a, 0x71, 0x1b, 0x4b, + 0x0d, 0x32, 0xd6, 0x7f, 0x41, 0x1f, 0x3d, 0xc8, 0xd3, 0x80, 0x08, 0x13, 0x59, 0xe2, 0x34, 0x91, + 0x7a, 0xff, 0xc9, 0xb1, 0xfe, 0x93, 0xd9, 0xc3, 0xa7, 0xf5, 0x6b, 0x87, 0xf3, 0x27, 0x72, 0x39, + 0x9a, 0x1a, 0x4f, 0x3c, 0x9f, 0x52, 0x93, 0xd4, 0xe6, 0xcf, 0xd5, 0x94, 0x3b, 0x02, 0xb4, 0x48, + 0x9e, 0xce, 0x93, 0x26, 0x07, 0x69, 0x11, 0x7e, 0x02, 0xa1, 0x30, 0xe4, 0xff, 0x62, 0xe9, 0xf9, + 0xa6, 0xc3, 0x8c, 0x09, 0xc5, 0x72, 0x39, 0xd8, 0x5c, 0x96, 0x01, 0xcd, 0xac, 0xc1, 0x6b, 0xc4, + 0xa5, 0x18, 0x18, 0xf7, 0xc5, 0x9a, 0xb2, 0x48, 0x5c, 0x8a, 0xcd, 0x83, 0x8f, 0xda, 0x4e, 0x09, + 0xc4, 0x65, 0xd9, 0x1a, 0xf1, 0x9c, 0xaf, 0x4c, 0xe8, 0xc6, 0x3c, 0xe7, 0xb3, 0x75, 0x43, 0x63, + 0x05, 0x08, 0x27, 0x7a, 0xd5, 0x46, 0x1b, 0xe4, 0x0f, 0x58, 0x58, 0x40, 0xc6, 0xd0, 0x10, 0xc8, + 0x05, 0xa4, 0xf3, 0x5f, 0xf0, 0xa0, 0xd9, 0x5b, 0x42, 0xa9, 0x1d, 0x16, 0x5e, 0xf1, 0x3b, 0xf1, + 0x4a, 0x1e, 0x2b, 0x2c, 0xb4, 0xb3, 0x82, 0x65, 0xbe, 0xe7, 0x5a, 0xe7, 0x9b, 0x4f, 0x69, 0x45, + 0xde, 0x94, 0x9a, 0x13, 0x36, 0xd7, 0x3a, 0x61, 0x7c, 0x62, 0x16, 0xda, 0x27, 0xc6, 0x42, 0xf9, + 0xbb, 0x6d, 0x94, 0x17, 0x09, 0x7a, 0xb7, 0x8d, 0xa0, 0xe2, 0xc9, 0xe7, 0x5c, 0x9e, 0x25, 0x61, + 0x3a, 0x7c, 0x93, 0x66, 0x32, 0xf0, 0x0a, 0xc9, 0x1b, 0x48, 0x66, 0x40, 0x33, 0xb3, 0x82, 0xff, + 0xaf, 0xa7, 0xc1, 0xd9, 0x30, 0x11, 0xcf, 0xfa, 0x58, 0x2a, 0x1d, 0x8a, 0x01, 0x4d, 0xbe, 0xba, + 0x0a, 0x5f, 0x95, 0xa7, 0xc2, 0x49, 0x6a, 0x2a, 0xa6, 0xc2, 0x67, 0xe5, 0x2d, 0xc9, 0xbe, 0x06, + 0x2d, 0x8e, 0x1b, 0xe8, 0x3e, 0xa9, 0x84, 0xe5, 0x26, 0x94, 0x03, 0xa4, 0x40, 0x0e, 0x70, 0x85, + 0x02, 0x47, 0xa1, 0xbe, 0x50, 0x62, 0x59, 0x53, 0x6b, 0x28, 0xd6, 0xf4, 0xea, 0xf6, 0x78, 0xeb, + 0xb2, 0x95, 0x95, 0xbe, 0xd6, 0xd4, 0xb2, 0x97, 0xd5, 0x54, 0x7a, 0xe5, 0xb2, 0x10, 0x3b, 0x50, + 0x86, 0x3d, 0x54, 0x1d, 0x42, 0xb1, 0x78, 0x44, 0x5d, 0x1b, 0x6a, 0x89, 0x36, 0xef, 0xa4, 0xa2, + 0x47, 0x32, 0x67, 0x08, 0xc5, 0x72, 0x79, 0xf6, 0xe8, 0x90, 0x7e, 0x6c, 0x5f, 0xee, 0xd2, 0xb0, + 0xbe, 0xf7, 0x30, 0x6b, 0x2f, 0x00, 0xe0, 0x07, 0xd0, 0x94, 0x70, 0xa2, 0x95, 0x3e, 0x97, 0xb8, + 0x53, 0x53, 0x6e, 0x0f, 0x18, 0xbf, 0x65, 0x54, 0xdb, 0xf0, 0xbc, 0x2f, 0x7b, 0x62, 0x30, 0x7b, + 0xf0, 0x42, 0xd0, 0x28, 0xc0, 0x4f, 0xa0, 0xa9, 0x2d, 0x6a, 0x4b, 0x3c, 0xb9, 0x93, 0x4c, 0xfc, + 0xcc, 0x9a, 0xfb, 0x35, 0xc5, 0x1f, 0xa0, 0x45, 0x72, 0x85, 0xbe, 0xbb, 0x53, 0x3f, 0xff, 0x9e, + 0x7e, 0xea, 0xac, 0x7e, 0xe1, 0x00, 0x77, 0x2f, 0xf2, 0xad, 0xab, 0x09, 0x52, 0x08, 0xbc, 0xd5, + 0x2e, 0x6d, 0xc6, 0x96, 0x55, 0x94, 0xb6, 0x25, 0x4c, 0xbc, 0x2a, 0x7d, 0x90, 0xfa, 0x2a, 0xfb, + 0xde, 0x00, 0xa8, 0xdf, 0xb1, 0x3d, 0x1f, 0xeb, 0xc3, 0x43, 0xa0, 0xec, 0xb2, 0x17, 0x4f, 0x88, + 0x6c, 0xb5, 0x15, 0x95, 0x36, 0x46, 0x5f, 0xe5, 0x59, 0x25, 0x49, 0x98, 0x1c, 0x28, 0x91, 0x57, + 0x65, 0x06, 0xfb, 0x88, 0xaa, 0xb3, 0xf5, 0x07, 0x15, 0xb9, 0xb3, 0x6f, 0x64, 0x8f, 0x76, 0xe5, + 0xf7, 0x0d, 0x8d, 0x71, 0x14, 0x4d, 0x6b, 0xa3, 0xdb, 0xa1, 0x19, 0x2c, 0x70, 0xf0, 0x86, 0x00, + 0x2b, 0x93, 0x15, 0xfa, 0x07, 0x6c, 0x84, 0xb2, 0x27, 0xf6, 0x8c, 0x0d, 0xec, 0xd6, 0x77, 0x77, + 0x8e, 0xef, 0x3a, 0x47, 0x9d, 0x77, 0xfa, 0x3a, 0xb2, 0x6f, 0x9f, 0xd6, 0x0f, 0x7c, 0x08, 0x00, + 0x95, 0xb9, 0x73, 0x97, 0xf4, 0xfe, 0x3e, 0xbd, 0xe7, 0x6d, 0xfd, 0xc0, 0x80, 0x3e, 0x74, 0x5c, + 0x1f, 0xd9, 0x15, 0x64, 0x7d, 0xe1, 0xe7, 0x84, 0xb3, 0xc6, 0x72, 0x33, 0xe3, 0x86, 0x79, 0xd6, + 0xf8, 0x00, 0xfb, 0x8b, 0x8f, 0x92, 0xba, 0x89, 0x1e, 0xba, 0xba, 0x64, 0x67, 0x6b, 0x2c, 0x1d, + 0xad, 0x4a, 0xa9, 0xcd, 0x2f, 0x2d, 0x15, 0x2e, 0xe6, 0xfa, 0x24, 0x4d, 0x39, 0x24, 0xa1, 0x77, + 0xa4, 0xc0, 0x3c, 0x43, 0x7e, 0x1c, 0x44, 0x47, 0x7e, 0x05, 0x0e, 0x82, 0x81, 0x3d, 0xc0, 0x94, + 0xfd, 0x86, 0x8e, 0xf1, 0xff, 0x56, 0xdc, 0x22, 0x58, 0x87, 0x76, 0x6b, 0xac, 0x42, 0x9e, 0xb5, + 0xac, 0x42, 0xee, 0xce, 0x5f, 0x85, 0x88, 0x28, 0x15, 0xb7, 0x12, 0x59, 0xab, 0x29, 0xb5, 0x48, + 0x09, 0xdc, 0x69, 0x50, 0x65, 0x53, 0x3c, 0x62, 0x21, 0x86, 0x5c, 0x61, 0x9f, 0x28, 0xb7, 0xc3, + 0xfa, 0x7f, 0x29, 0x43, 0xe5, 0xe2, 0xd7, 0xf1, 0x23, 0xa8, 0x2c, 0x46, 0xfb, 0x13, 0x0f, 0x2d, + 0x78, 0x21, 0xa8, 0x87, 0x23, 0xe7, 0xe8, 0x12, 0x84, 0x97, 0x1b, 0x0d, 0xd3, 0x3b, 0x13, 0xaa, + 0x70, 0x60, 0x01, 0x0d, 0x59, 0x21, 0xd3, 0x2b, 0xf4, 0xb4, 0x82, 0x97, 0x1b, 0xb6, 0x5d, 0x50, + 0x4a, 0x53, 0x04, 0xdb, 0xee, 0xa6, 0x94, 0x2c, 0xda, 0xe8, 0x7e, 0xd0, 0x46, 0xf0, 0x68, 0xee, + 0x0e, 0x4d, 0x99, 0x0d, 0xda, 0x68, 0x7a, 0x38, 0xd1, 0xea, 0xac, 0x8c, 0x4a, 0xdd, 0x95, 0x51, + 0xff, 0xd5, 0xf1, 0x3d, 0xce, 0xca, 0xe8, 0x7e, 0x34, 0xa5, 0x89, 0xeb, 0x3c, 0xf8, 0x4a, 0x93, + 0xf1, 0x95, 0x26, 0xf3, 0x2b, 0x4d, 0x89, 0x56, 0x9c, 0xe2, 0x26, 0x6b, 0x9a, 0x99, 0xe1, 0x83, + 0x25, 0xf6, 0xd9, 0x44, 0x71, 0x20, 0x67, 0x07, 0xd7, 0x47, 0xba, 0x37, 0xaf, 0xd9, 0xb0, 0xe1, + 0xfa, 0x48, 0xdf, 0xd8, 0xc9, 0x73, 0xb9, 0x53, 0x43, 0x7a, 0xff, 0xb1, 0xcc, 0x2f, 0xf6, 0xe9, + 0x07, 0x06, 0xc6, 0x3e, 0x3b, 0x9f, 0xb9, 0x7a, 0xc1, 0xa8, 0x7e, 0x76, 0x43, 0xdd, 0xb6, 0x67, + 0x9f, 0xdf, 0x92, 0x0f, 0x72, 0xe5, 0x53, 0xfd, 0xdd, 0xfe, 0xdc, 0x68, 0x07, 0xb7, 0x87, 0xf5, + 0x68, 0x7a, 0x6b, 0x2c, 0x9a, 0x6e, 0x48, 0x46, 0x49, 0x5a, 0x60, 0x69, 0x89, 0x07, 0x8e, 0x78, + 0xcc, 0x52, 0x79, 0x3e, 0xb4, 0xcd, 0x0c, 0x5f, 0xc9, 0x9e, 0x18, 0xe1, 0x08, 0x5e, 0x1f, 0xe9, + 0xd3, 0x3b, 0x77, 0x05, 0x4d, 0x38, 0xbc, 0x0a, 0x95, 0x1a, 0x86, 0x02, 0x12, 0x02, 0xb3, 0x7c, + 0xcb, 0xa4, 0x44, 0xc6, 0x70, 0xc2, 0x90, 0xeb, 0xeb, 0xe0, 0xd6, 0x27, 0x08, 0x55, 0xf8, 0xa7, + 0x82, 0x3a, 0x02, 0xa5, 0xfa, 0xbc, 0xa6, 0x04, 0x05, 0x75, 0xb4, 0x56, 0x1f, 0xb8, 0x9a, 0x7d, + 0xfb, 0xb4, 0xa9, 0x8c, 0x8e, 0xee, 0x37, 0xb4, 0x69, 0x5f, 0x87, 0xe9, 0x59, 0x90, 0xa7, 0x6f, + 0x41, 0x5d, 0xf1, 0x8f, 0x41, 0x4b, 0x21, 0xfe, 0x50, 0x13, 0xba, 0x8d, 0xad, 0x67, 0x1a, 0xe2, + 0xf1, 0x66, 0x9e, 0xc1, 0xf7, 0x29, 0x4d, 0xf9, 0x4e, 0x20, 0xaf, 0x4a, 0x0e, 0x80, 0xc6, 0xd6, + 0xb5, 0x73, 0x86, 0x54, 0x5c, 0x3c, 0x51, 0x5f, 0x57, 0x29, 0x66, 0x4a, 0xd4, 0xbb, 0xaf, 0x8e, + 0x77, 0xee, 0xa7, 0x9f, 0xc8, 0x6b, 0x8b, 0x8f, 0x4b, 0x08, 0xc1, 0x1b, 0xb3, 0xba, 0x68, 0x6a, + 0x07, 0xd1, 0xb6, 0x0e, 0xdb, 0x88, 0xba, 0x50, 0x3a, 0x64, 0xd4, 0x43, 0x3c, 0x65, 0xa1, 0x81, + 0xbc, 0x85, 0x33, 0x6e, 0x6e, 0xf8, 0x78, 0xee, 0xfd, 0xf7, 0x18, 0xa6, 0xf0, 0xe9, 0x3c, 0x53, + 0xb2, 0xdc, 0x97, 0x19, 0xee, 0xcc, 0x0c, 0x77, 0x32, 0x34, 0x33, 0x83, 0x43, 0x86, 0x9e, 0x26, + 0x1e, 0x16, 0xe0, 0x51, 0xa4, 0x77, 0x5e, 0xca, 0x5e, 0x3a, 0x17, 0x14, 0xbe, 0x80, 0x8f, 0x4a, + 0x68, 0x7a, 0x84, 0x7e, 0x3f, 0x55, 0x31, 0xd3, 0x79, 0x9f, 0xc3, 0x07, 0x48, 0xc2, 0xda, 0x99, + 0xf0, 0x6c, 0x7c, 0xd9, 0x83, 0x17, 0xb2, 0xfb, 0xfb, 0xbf, 0xb6, 0xf1, 0x99, 0x1f, 0xa8, 0x36, + 0x44, 0x19, 0x55, 0x04, 0xca, 0x36, 0x39, 0x2a, 0x10, 0xff, 0xde, 0x29, 0xe8, 0x2e, 0x9b, 0x6a, + 0x4f, 0xdd, 0xac, 0xd5, 0xda, 0x36, 0xfb, 0x6a, 0x4d, 0xd1, 0x94, 0x27, 0xc5, 0xd5, 0xda, 0x4a, + 0x61, 0xb5, 0x56, 0xe9, 0x83, 0xb4, 0x56, 0xd9, 0xee, 0x3d, 0x7a, 0x7f, 0x9f, 0xa1, 0xa3, 0x87, + 0x7a, 0xc7, 0x3e, 0x3b, 0xa3, 0x1f, 0xb8, 0x42, 0x7d, 0x55, 0x08, 0x2f, 0x8b, 0x6b, 0xba, 0x17, + 0xd1, 0xd4, 0x68, 0xc2, 0xc0, 0x97, 0xae, 0xea, 0x6a, 0x35, 0xe5, 0xb1, 0x00, 0x2d, 0x92, 0xab, + 0x8c, 0xe6, 0xfc, 0x61, 0x1b, 0x59, 0x6b, 0xe4, 0x46, 0x7b, 0x73, 0xc3, 0x47, 0xeb, 0x1b, 0x8c, + 0xd1, 0x7e, 0xd0, 0xce, 0xbe, 0x57, 0x39, 0xde, 0xf7, 0xae, 0x3e, 0xd2, 0x0e, 0x48, 0x4b, 0x41, + 0xda, 0x9e, 0x5d, 0x8d, 0xb8, 0xd3, 0x53, 0x9e, 0x4f, 0x8d, 0x6b, 0x4f, 0x47, 0x66, 0xf0, 0x63, + 0xfe, 0x35, 0xba, 0x2d, 0xfd, 0x07, 0x0f, 0xf2, 0x3a, 0x35, 0xbd, 0x35, 0x4c, 0x6c, 0xd0, 0x62, + 0x62, 0xef, 0x72, 0x3c, 0x61, 0x32, 0x78, 0x10, 0xee, 0xda, 0xc0, 0xbe, 0xd2, 0x2b, 0x0e, 0x91, + 0x0a, 0x16, 0x2b, 0x6b, 0xac, 0xe0, 0xd0, 0x33, 0x81, 0x02, 0x54, 0x61, 0x14, 0xcd, 0xa3, 0xa5, + 0x9b, 0xb9, 0xfd, 0x7c, 0x1a, 0x9a, 0xce, 0x47, 0x82, 0x1f, 0xa5, 0x29, 0xd9, 0x18, 0x73, 0x13, + 0x02, 0xd1, 0x22, 0xf9, 0x0e, 0xe8, 0x2f, 0x33, 0xd4, 0x1b, 0xa5, 0x1f, 0xad, 0xaf, 0xa3, 0x59, + 0xd7, 0xea, 0xf0, 0x63, 0x68, 0x5a, 0x34, 0x16, 0x53, 0x93, 0xf5, 0x0d, 0x94, 0xb6, 0xe4, 0xac, + 0x80, 0x95, 0xc9, 0xb7, 0xd3, 0xb1, 0xec, 0xee, 0xcc, 0x8d, 0xf6, 0x66, 0x06, 0x87, 0xeb, 0x1b, + 0x82, 0xac, 0x0e, 0xbf, 0x88, 0xca, 0xa3, 0x82, 0xc1, 0xa7, 0x5c, 0xfe, 0x88, 0xa6, 0xac, 0x0a, + 0x58, 0x2a, 0xe4, 0x45, 0xa0, 0x19, 0xe8, 0x15, 0xe4, 0xf9, 0xc3, 0xb9, 0x4f, 0xce, 0x64, 0x06, + 0x3f, 0x35, 0x8c, 0xc7, 0x81, 0x81, 0xb1, 0x5d, 0xa3, 0xb0, 0x64, 0x0b, 0x5a, 0xda, 0xe0, 0x07, + 0x45, 0x63, 0x4c, 0x26, 0x8d, 0x18, 0xe3, 0x59, 0x30, 0x9e, 0x70, 0xa2, 0x95, 0x92, 0x97, 0x98, + 0xe4, 0xe5, 0x68, 0x4a, 0x8b, 0xda, 0x42, 0xed, 0x31, 0x24, 0xfa, 0x6d, 0x51, 0x5b, 0x64, 0xcc, + 0x07, 0xaf, 0x9f, 0x7f, 0x8f, 0xc1, 0xb7, 0xa8, 0x2d, 0xf8, 0x51, 0xd1, 0x06, 0x93, 0xf4, 0xbe, + 0xc4, 0x06, 0xdf, 0x0d, 0xf0, 0x4d, 0xac, 0x73, 0x71, 0x84, 0x2b, 0xc0, 0x2c, 0xaf, 0x44, 0x53, + 0xda, 0x12, 0x61, 0x6a, 0x93, 0x09, 0xa9, 0x8c, 0xdf, 0xf2, 0x1c, 0xfa, 0xf2, 0x85, 0xdc, 0xfa, + 0xe6, 0xfa, 0x3a, 0xb6, 0x36, 0xd4, 0xfa, 0xea, 0xeb, 0x82, 0x46, 0x9d, 0x21, 0xa8, 0x54, 0x7f, + 0x94, 0x31, 0x41, 0x7d, 0x9a, 0xeb, 0x8f, 0xd5, 0x62, 0x43, 0x38, 0x73, 0xe7, 0x39, 0x02, 0xf5, + 0xab, 0xd7, 0xf4, 0x2b, 0xc7, 0xae, 0x8f, 0x74, 0x67, 0xaf, 0x5c, 0xd4, 0x8f, 0x5e, 0x32, 0x46, + 0xf3, 0xd6, 0x09, 0xfd, 0xca, 0xb1, 0xdc, 0xf9, 0x2e, 0xae, 0x66, 0x9e, 0x44, 0xd3, 0xe9, 0x74, + 0xb4, 0xad, 0xa6, 0x67, 0xee, 0x64, 0xee, 0xcd, 0x52, 0x79, 0x36, 0x7c, 0x22, 0x9a, 0x68, 0x5b, + 0x0d, 0xb2, 0x1f, 0x34, 0x2b, 0xf1, 0x1a, 0x7e, 0xe7, 0x86, 0x58, 0x3e, 0xef, 0x00, 0xbf, 0x73, + 0xf3, 0xb1, 0x57, 0x4b, 0xfc, 0xe6, 0x2d, 0x7f, 0xce, 0xd8, 0x45, 0xdc, 0x13, 0x74, 0x83, 0x39, + 0xc3, 0xcc, 0x2e, 0x0f, 0x1b, 0xcc, 0x85, 0x79, 0x5d, 0xe4, 0x77, 0x00, 0xbb, 0xc9, 0xa7, 0x85, + 0x1b, 0xb9, 0x72, 0xb6, 0x97, 0xbc, 0x37, 0xc0, 0x0b, 0x19, 0x7d, 0xf3, 0xef, 0xf3, 0xcc, 0x7b, + 0xb9, 0x08, 0x9a, 0x15, 0x36, 0xcf, 0xd1, 0x0c, 0x99, 0x20, 0x8f, 0x59, 0xcb, 0x6a, 0xaa, 0x35, + 0xe5, 0x91, 0x40, 0x7e, 0x9d, 0xbc, 0x08, 0x3c, 0x43, 0x8c, 0x45, 0xc2, 0xc0, 0xe9, 0xcc, 0x50, + 0xaf, 0xb1, 0x65, 0x3a, 0xde, 0x93, 0x19, 0xfc, 0x18, 0x74, 0x39, 0x0d, 0x55, 0x91, 0xdf, 0xac, + 0xda, 0xd0, 0xe0, 0xe8, 0x3b, 0x81, 0x19, 0xf4, 0x2c, 0x98, 0x74, 0xb5, 0x0c, 0x0e, 0xb3, 0xa8, + 0x8c, 0x31, 0xbe, 0xa1, 0x46, 0x4f, 0x10, 0x64, 0xfd, 0xe2, 0xc1, 0xdc, 0xa9, 0x21, 0xff, 0x59, + 0xe1, 0x5c, 0x58, 0x01, 0x65, 0x7e, 0x33, 0x0f, 0x15, 0x7e, 0xdd, 0x66, 0x8a, 0xdd, 0x0d, 0x17, + 0xc0, 0x59, 0x48, 0x5e, 0x0a, 0x5d, 0x51, 0x7b, 0x3e, 0x2e, 0x1c, 0x17, 0x5b, 0x5a, 0xdd, 0x1a, + 0x56, 0xe4, 0x05, 0x8b, 0x13, 0x8b, 0xf3, 0x3d, 0x85, 0x80, 0xd6, 0x64, 0x8c, 0x49, 0x83, 0xa6, + 0x6c, 0x44, 0xeb, 0x03, 0x85, 0xa8, 0x23, 0x5a, 0x13, 0x81, 0xa8, 0x6e, 0xd6, 0xa4, 0x57, 0xa2, + 0xd7, 0xce, 0x42, 0x57, 0xf8, 0x75, 0x54, 0x92, 0x36, 0x37, 0x6f, 0x51, 0x4d, 0x79, 0x29, 0x40, + 0x0a, 0xe4, 0xdf, 0xcf, 0xeb, 0x75, 0x09, 0xf8, 0xbc, 0xd0, 0xa2, 0xbe, 0x0e, 0x58, 0x6a, 0xf0, + 0x8c, 0xa7, 0x9b, 0xb7, 0x28, 0x9b, 0xea, 0x94, 0x60, 0x9d, 0xb1, 0x23, 0x3f, 0xb1, 0x47, 0xdf, + 0xb3, 0x1b, 0xc0, 0xaf, 0x8f, 0x74, 0x6f, 0x58, 0xb3, 0x4e, 0xa9, 0x7d, 0x21, 0x33, 0x38, 0x94, + 0x19, 0x39, 0x61, 0x2c, 0x6a, 0x49, 0xf9, 0xd2, 0x20, 0xf9, 0x8a, 0x7f, 0xd4, 0x83, 0x7c, 0x0c, + 0xc3, 0x9a, 0x50, 0x2c, 0xf2, 0x72, 0x34, 0x92, 0xde, 0xde, 0x10, 0x0a, 0xef, 0x08, 0x35, 0xdd, + 0xf0, 0xb2, 0x4e, 0x32, 0xe5, 0xe5, 0xf1, 0x3c, 0x79, 0xb9, 0xaf, 0x90, 0xbc, 0xf0, 0xf5, 0xd1, + 0x6f, 0x4a, 0x6c, 0xa8, 0xa6, 0x99, 0x90, 0x00, 0x6c, 0x87, 0x6e, 0x7c, 0xac, 0xf3, 0x62, 0x66, + 0xe8, 0xe7, 0xfa, 0xe0, 0x19, 0xbd, 0x7f, 0x54, 0xef, 0xee, 0xf4, 0xff, 0x4f, 0x0f, 0xba, 0xb7, + 0x40, 0xf3, 0x5b, 0x43, 0x8a, 0xc2, 0x96, 0xb5, 0xd8, 0xa2, 0x7c, 0x29, 0xca, 0xc7, 0xcb, 0xe5, + 0xc6, 0xcf, 0x4e, 0x1d, 0x9a, 0x27, 0x16, 0xe4, 0x89, 0xfa, 0x16, 0x4f, 0x4c, 0x2d, 0x77, 0x6a, + 0xdb, 0x45, 0x4a, 0x93, 0xd0, 0x9d, 0x4e, 0xc3, 0xc3, 0xb7, 0x21, 0x4f, 0x34, 0x42, 0x0f, 0xdb, + 0x3d, 0xd1, 0x08, 0xc6, 0xa8, 0x24, 0xc6, 0x8f, 0x3a, 0x82, 0xe4, 0x6f, 0xec, 0x43, 0x33, 0x62, + 0x6a, 0xfa, 0xe5, 0x78, 0x72, 0x87, 0xb9, 0xb2, 0x0a, 0x8a, 0x45, 0xc2, 0x91, 0x76, 0x89, 0xe5, + 0x48, 0xfb, 0x6e, 0x34, 0xbd, 0x91, 0x7d, 0x95, 0x2c, 0x88, 0x4a, 0x83, 0x66, 0x81, 0x7f, 0x70, + 0x0a, 0x9a, 0xc7, 0x97, 0xa0, 0xcf, 0xa6, 0xea, 0x5b, 0x42, 0x4d, 0xb7, 0xe2, 0x79, 0xf6, 0x15, + 0xc9, 0xe6, 0x22, 0x09, 0xa7, 0x8e, 0xc2, 0x49, 0x41, 0x97, 0x34, 0x7e, 0xf0, 0xa8, 0xbe, 0xeb, + 0x00, 0x3f, 0xae, 0x84, 0xa5, 0xc7, 0x78, 0x7b, 0x97, 0xde, 0x3e, 0x52, 0xed, 0x6b, 0x78, 0xbe, + 0x66, 0x43, 0x7d, 0xed, 0xb6, 0xfa, 0x8d, 0xca, 0xba, 0x35, 0x4b, 0xf4, 0xce, 0x4f, 0xf4, 0xce, + 0x8b, 0x00, 0xbf, 0xb4, 0xb2, 0x21, 0x58, 0xbf, 0x55, 0xd9, 0xb2, 0x86, 0xd6, 0xc1, 0xee, 0x89, + 0xd5, 0x6d, 0xfe, 0xae, 0x12, 0x5c, 0x53, 0xc7, 0x9b, 0x19, 0x3c, 0xc0, 0xaa, 0x36, 0x2a, 0xc1, + 0xf5, 0x6b, 0xb6, 0xb0, 0xaa, 0xc1, 0x37, 0xf5, 0xa3, 0x43, 0xb4, 0x4a, 0x38, 0x1c, 0x65, 0xae, + 0x52, 0x2e, 0x93, 0xc0, 0x0f, 0xdc, 0x04, 0x17, 0x15, 0xba, 0xa7, 0xfa, 0x4f, 0x1e, 0x54, 0x61, + 0x6f, 0x75, 0x6b, 0x48, 0xf1, 0x33, 0x16, 0x29, 0x9e, 0x97, 0x2f, 0xc5, 0x14, 0x9b, 0xe2, 0xce, + 0x2b, 0xb7, 0x6a, 0xca, 0x66, 0xf4, 0x5c, 0xc0, 0x95, 0x16, 0xf2, 0x22, 0x3b, 0x09, 0x61, 0x1e, + 0x0a, 0x6f, 0xa8, 0x0e, 0x96, 0xa2, 0x69, 0xb4, 0x2b, 0xbc, 0x12, 0x4d, 0x8b, 0x1a, 0x7f, 0x70, + 0x51, 0x98, 0x47, 0x44, 0x81, 0x96, 0xc9, 0xd3, 0xa1, 0x3f, 0x63, 0x85, 0xcf, 0xca, 0xf0, 0x72, + 0x54, 0x1a, 0x6a, 0x8e, 0x86, 0x52, 0x94, 0x9e, 0xc4, 0x77, 0x0d, 0x4a, 0xe4, 0x72, 0xf6, 0xf9, + 0x9f, 0xeb, 0x3d, 0xfb, 0x83, 0x50, 0x68, 0xcc, 0x58, 0x28, 0x19, 0xde, 0x4e, 0x19, 0x1f, 0x66, + 0xcc, 0x28, 0x90, 0x67, 0x01, 0x74, 0x6d, 0xc3, 0xf3, 0xd9, 0x63, 0x97, 0xb3, 0xc7, 0x3a, 0x82, + 0xa4, 0x18, 0x07, 0xd1, 0xac, 0x78, 0xaa, 0xb6, 0x35, 0x95, 0x8e, 0xb7, 0x44, 0x5f, 0x85, 0xfd, + 0x16, 0x30, 0x3e, 0xf1, 0x78, 0xce, 0xaf, 0x93, 0xb1, 0xde, 0xdf, 0xa7, 0xef, 0xbd, 0x4c, 0x0f, + 0x8b, 0xe0, 0x84, 0x35, 0x1f, 0x08, 0x3f, 0x82, 0xa6, 0xc6, 0x53, 0x64, 0xd1, 0x5d, 0x6a, 0xee, + 0x67, 0x68, 0x11, 0xbb, 0x46, 0xa4, 0x3c, 0x08, 0xeb, 0x6d, 0x5a, 0x87, 0xeb, 0x11, 0x4a, 0xa9, + 0xc9, 0xa8, 0x0a, 0x8d, 0xa7, 0x9a, 0x8b, 0x7e, 0xa1, 0x58, 0xae, 0x10, 0x3b, 0x80, 0xe3, 0x56, + 0xe6, 0x7e, 0x6a, 0x42, 0x61, 0x25, 0xef, 0x9c, 0x93, 0x74, 0xc3, 0xce, 0x39, 0xef, 0x06, 0x5a, + 0xc0, 0x39, 0x67, 0xb5, 0x6f, 0xd3, 0xb3, 0xc1, 0x8d, 0xca, 0x86, 0x25, 0xf0, 0xe8, 0xce, 0xcc, + 0x47, 0x6e, 0xd1, 0x06, 0x65, 0xb7, 0x92, 0x36, 0xf0, 0x6b, 0xca, 0x3d, 0x68, 0x41, 0x80, 0xf1, + 0x9d, 0x95, 0xe6, 0x00, 0xee, 0xff, 0x67, 0x49, 0x90, 0xfb, 0x06, 0xb8, 0x7b, 0x4a, 0xdd, 0x7a, + 0x3a, 0xbb, 0x7a, 0xb5, 0xa6, 0x3c, 0x84, 0x56, 0x06, 0x5c, 0x71, 0x11, 0xb6, 0x01, 0x70, 0x17, + 0x47, 0xf5, 0xde, 0x7f, 0xf4, 0x08, 0xc7, 0x7a, 0x66, 0x9b, 0x6f, 0xc5, 0x6d, 0x8d, 0x88, 0x53, + 0x71, 0xda, 0x6f, 0x93, 0xa6, 0xac, 0x47, 0xf5, 0x01, 0x77, 0x8a, 0x08, 0x0b, 0x7f, 0x91, 0x8c, + 0x6e, 0x5a, 0x6f, 0x13, 0x2a, 0x17, 0xbb, 0xb1, 0xde, 0xa3, 0x1b, 0x44, 0x2d, 0x11, 0x2f, 0x3c, + 0x7d, 0x68, 0x06, 0xfd, 0x61, 0x5e, 0xce, 0x04, 0xc5, 0x22, 0xff, 0xbf, 0xf6, 0xa0, 0x3b, 0xf9, + 0xd8, 0xb6, 0x26, 0xc2, 0xb7, 0x20, 0xa7, 0xe2, 0xa7, 0x51, 0x69, 0x5b, 0x22, 0x5c, 0x5f, 0x47, + 0x15, 0x6c, 0x40, 0x53, 0x16, 0x07, 0xa0, 0x44, 0x5e, 0x68, 0x2c, 0xe2, 0x87, 0x4f, 0x51, 0x0b, + 0x43, 0x56, 0xf3, 0x6d, 0x89, 0xb0, 0x39, 0x49, 0x00, 0x56, 0xfd, 0xa4, 0xa6, 0x3c, 0x8e, 0x1e, + 0x0b, 0x38, 0x52, 0x42, 0xbe, 0x97, 0x4f, 0x10, 0x7d, 0x24, 0x40, 0xa6, 0x29, 0xd7, 0xd7, 0xd1, + 0x96, 0x08, 0x53, 0x9e, 0xff, 0xf7, 0x1e, 0x34, 0x27, 0xaf, 0xed, 0xb7, 0xc2, 0x47, 0x8a, 0xe1, + 0x53, 0x1c, 0xaf, 0xd3, 0x6d, 0xae, 0x33, 0x25, 0x6c, 0x64, 0xa4, 0x3e, 0xd7, 0x02, 0x19, 0xed, + 0xdc, 0x7e, 0x52, 0x42, 0x65, 0xac, 0x27, 0xbe, 0xee, 0x96, 0x84, 0x75, 0xf7, 0x9d, 0x30, 0xf5, + 0x11, 0xca, 0xda, 0xf0, 0x03, 0x7b, 0x51, 0x59, 0x34, 0xd1, 0xb6, 0xaa, 0x36, 0x1a, 0xa1, 0xaf, + 0x79, 0x82, 0xfc, 0x37, 0xad, 0x5b, 0x4d, 0xea, 0x4a, 0x78, 0x1d, 0xf9, 0x8d, 0x1f, 0x42, 0xa5, + 0xe1, 0x68, 0x24, 0x99, 0xaa, 0x28, 0x25, 0xe4, 0x58, 0x90, 0x4f, 0x0e, 0x25, 0x95, 0x8a, 0xa6, + 0xd2, 0xa1, 0x58, 0xda, 0x80, 0x0e, 0x02, 0xac, 0xff, 0x29, 0x34, 0xd3, 0x52, 0x6e, 0x8c, 0xd3, + 0xa8, 0x61, 0xe3, 0x0c, 0xd3, 0xaf, 0x1a, 0xff, 0x93, 0x65, 0x80, 0x87, 0x2c, 0xf2, 0xf9, 0x6f, + 0xff, 0x7f, 0x15, 0xd7, 0xf8, 0x9b, 0x5b, 0x1b, 0x63, 0xea, 0xcd, 0xb3, 0x17, 0x5f, 0xd9, 0xf7, + 0x15, 0xaf, 0xb5, 0x0a, 0x23, 0x09, 0x0d, 0x42, 0x85, 0x71, 0x91, 0x9b, 0x30, 0xea, 0xe7, 0x7b, + 0x72, 0xa3, 0xbd, 0x74, 0x8b, 0x07, 0xc0, 0x78, 0x03, 0x3d, 0xa1, 0x2c, 0x35, 0xdd, 0x3f, 0xe0, + 0x84, 0x72, 0x99, 0x6b, 0x2f, 0xfc, 0xb0, 0x51, 0xec, 0x0e, 0x0e, 0x2c, 0xd7, 0xa2, 0xb2, 0x14, + 0xa1, 0x6c, 0x7d, 0x1d, 0x5d, 0xfe, 0x10, 0x2d, 0xc1, 0x0b, 0x99, 0x16, 0x86, 0xfe, 0xa0, 0x94, + 0x0f, 0x2c, 0xc8, 0xc1, 0xaa, 0x9f, 0xd6, 0x94, 0x27, 0xd0, 0xe3, 0x01, 0x6c, 0xcc, 0x97, 0x75, + 0xaa, 0xe4, 0xfb, 0xcd, 0xad, 0xa6, 0xf0, 0xfd, 0xca, 0xf1, 0xf6, 0x37, 0xc7, 0x3b, 0xf7, 0x67, + 0x06, 0xf7, 0xeb, 0x3d, 0xdd, 0x99, 0xa1, 0x5e, 0xff, 0xdf, 0x8a, 0xdb, 0x02, 0xde, 0xc5, 0xad, + 0xa1, 0x2d, 0x9e, 0xb7, 0x68, 0x8b, 0xb9, 0xf9, 0xe2, 0x01, 0xd8, 0xb8, 0x3a, 0xf0, 0x8a, 0x64, + 0x71, 0xf2, 0xad, 0xbc, 0xc3, 0x42, 0x54, 0xeb, 0x06, 0x5e, 0x6c, 0xeb, 0x66, 0x1a, 0xcf, 0x97, + 0xa0, 0xa9, 0xd0, 0x1c, 0x2f, 0x66, 0x4c, 0x08, 0x42, 0x73, 0xbb, 0xa6, 0xdc, 0xc6, 0x98, 0x10, + 0xfe, 0x63, 0x5c, 0xf6, 0x90, 0xc0, 0x17, 0x1e, 0x73, 0xe7, 0x60, 0xf2, 0x45, 0x19, 0x7c, 0xb9, + 0xbe, 0xce, 0x64, 0x02, 0xfc, 0x04, 0x42, 0xf0, 0xb7, 0xf0, 0x22, 0x05, 0xdc, 0x16, 0xcc, 0x62, + 0xb9, 0x9c, 0x0e, 0x99, 0xad, 0xa0, 0x79, 0x0d, 0x7e, 0x12, 0x4d, 0x37, 0x64, 0x3f, 0x18, 0x8a, + 0x59, 0xfd, 0x27, 0xcd, 0x52, 0x79, 0x36, 0x34, 0xf6, 0xd5, 0x37, 0xb4, 0xad, 0xf2, 0xd5, 0xd6, + 0xd7, 0x05, 0x83, 0x66, 0x25, 0x7e, 0x06, 0xcd, 0x64, 0x1a, 0x0b, 0xfa, 0x28, 0x35, 0x4f, 0xe0, + 0xad, 0x35, 0x62, 0x3f, 0xab, 0xa1, 0x1f, 0x2b, 0x00, 0x7f, 0x90, 0x33, 0xd5, 0x1c, 0x06, 0x48, + 0xd9, 0x1c, 0x68, 0x69, 0xa8, 0xea, 0xa3, 0xe7, 0xcc, 0x6b, 0x7f, 0x90, 0x26, 0x15, 0xcd, 0x0b, + 0xb5, 0x85, 0xa2, 0xcd, 0xa1, 0xc6, 0x66, 0xb5, 0xbe, 0x41, 0x89, 0x44, 0x92, 0x6a, 0x2a, 0x05, + 0x41, 0x49, 0x8d, 0x4d, 0x41, 0x09, 0x38, 0x21, 0xb8, 0xc1, 0xc8, 0x33, 0xf5, 0xae, 0x8f, 0x32, + 0xa3, 0x47, 0x7c, 0xf5, 0x0d, 0xbe, 0xec, 0xc1, 0x0b, 0x41, 0x37, 0x38, 0xcb, 0x2d, 0x43, 0x99, + 0xe3, 0x2d, 0x83, 0xf3, 0x20, 0x39, 0x40, 0xb5, 0xb1, 0x82, 0x40, 0x73, 0x03, 0x94, 0x2d, 0xd8, + 0x9c, 0x50, 0xd7, 0xa2, 0x9f, 0x8b, 0xae, 0xf5, 0x9b, 0xd5, 0x70, 0x6b, 0x32, 0x9a, 0xde, 0xb9, + 0x2e, 0x19, 0x6f, 0x4d, 0xdc, 0x34, 0xf5, 0xfb, 0x63, 0xbb, 0xfa, 0xad, 0xd1, 0x94, 0xa7, 0x44, + 0xf5, 0x2b, 0x0b, 0xea, 0x77, 0xc9, 0xf8, 0x07, 0xc7, 0xf4, 0x6b, 0x9d, 0x99, 0x91, 0x13, 0x95, + 0x7a, 0xe7, 0x88, 0xde, 0x7f, 0x35, 0x77, 0xea, 0x17, 0x7a, 0xf7, 0x50, 0xae, 0x6b, 0xaf, 0xae, + 0x75, 0x83, 0x87, 0x59, 0xae, 0x6b, 0xef, 0x52, 0x71, 0x55, 0xff, 0x88, 0xa6, 0xac, 0x42, 0x32, + 0xac, 0x47, 0x1d, 0x71, 0x66, 0xcb, 0x7a, 0xbd, 0xbf, 0x4b, 0xef, 0x3c, 0x97, 0x1b, 0xee, 0xa0, + 0x4b, 0x9c, 0x2f, 0x3d, 0xe8, 0x1e, 0x57, 0x6a, 0xdd, 0x1a, 0xea, 0xab, 0xc1, 0xa2, 0xbe, 0x6c, + 0xd6, 0xdd, 0x82, 0x54, 0x71, 0x2b, 0x1e, 0xf1, 0x96, 0xd8, 0x99, 0x26, 0xfc, 0xde, 0xdd, 0x4a, + 0x4e, 0x37, 0x1d, 0xd6, 0xe7, 0x41, 0x44, 0x0d, 0xae, 0x57, 0x77, 0x36, 0x84, 0xa2, 0xc9, 0x6f, + 0x31, 0x23, 0xae, 0xd4, 0x94, 0xe5, 0xa8, 0x32, 0xe0, 0x84, 0x2d, 0x67, 0xc1, 0x81, 0xdd, 0xe3, + 0xda, 0x69, 0x7d, 0x80, 0x79, 0x29, 0xfc, 0x09, 0xdd, 0xab, 0x98, 0xe0, 0xdf, 0x8a, 0xd3, 0x34, + 0x8a, 0xce, 0xe4, 0xbd, 0xff, 0xf2, 0xe9, 0xc0, 0x8d, 0x25, 0xd0, 0xad, 0x20, 0xa3, 0xfd, 0x3b, + 0x09, 0x4d, 0xa3, 0xed, 0x71, 0x00, 0x95, 0xae, 0x57, 0x77, 0x72, 0xd6, 0x22, 0x7e, 0xbd, 0x50, + 0x22, 0x97, 0x41, 0x5f, 0x86, 0xc1, 0x24, 0x05, 0x78, 0x15, 0x69, 0x26, 0xb8, 0xfa, 0x11, 0x6a, + 0xb3, 0x32, 0xb9, 0x9c, 0x7e, 0x1b, 0xac, 0x1e, 0x2b, 0xc6, 0x6b, 0xd1, 0x8c, 0x88, 0xed, 0x31, + 0x22, 0x51, 0xe6, 0x62, 0xb9, 0x8c, 0xa1, 0xb5, 0xe5, 0x15, 0xa2, 0x08, 0xc0, 0x5e, 0x2e, 0xb3, + 0x91, 0xcb, 0xb3, 0x38, 0x8b, 0x50, 0x9d, 0xde, 0x8b, 0x60, 0x75, 0x25, 0xfa, 0xcd, 0x73, 0x21, + 0xfa, 0x0b, 0xc9, 0xf1, 0xb1, 0xc5, 0xc7, 0x92, 0xa6, 0x44, 0xf2, 0x5e, 0x5b, 0x6c, 0x11, 0x5f, + 0x5b, 0x54, 0x0a, 0x07, 0x4f, 0x74, 0xee, 0x2a, 0x7d, 0x2c, 0x10, 0x54, 0x34, 0xd6, 0x14, 0x27, + 0x83, 0xab, 0xf4, 0x11, 0x91, 0xa3, 0xff, 0xb5, 0x25, 0xc2, 0x95, 0xbe, 0x58, 0x3c, 0xa2, 0x36, + 0x19, 0xea, 0xa0, 0xd2, 0x97, 0x0e, 0xa5, 0x76, 0xfc, 0xaa, 0xe6, 0xe9, 0xe4, 0x93, 0x86, 0x64, + 0xc2, 0xc3, 0xa4, 0xdb, 0x6d, 0x5d, 0x04, 0x4b, 0xe1, 0x02, 0xbb, 0x8c, 0x75, 0x11, 0x9c, 0xce, + 0xbb, 0x08, 0x96, 0x18, 0x5d, 0x7c, 0x7d, 0x0f, 0x3f, 0xbe, 0x87, 0xa6, 0x93, 0xe8, 0xa7, 0xc4, + 0x7b, 0x7f, 0x0a, 0xb1, 0xda, 0x8f, 0x69, 0x4a, 0x55, 0xc0, 0x2c, 0x95, 0xfd, 0x90, 0x57, 0x80, + 0x07, 0x3b, 0x5d, 0xb7, 0x71, 0x8b, 0x0f, 0x7e, 0x64, 0xf7, 0x5e, 0xba, 0x3e, 0xd2, 0x4d, 0x22, + 0x42, 0x96, 0xc8, 0x1e, 0xdf, 0xef, 0x05, 0xcd, 0x56, 0xf8, 0x39, 0x34, 0x4d, 0x8d, 0x41, 0xbe, + 0x80, 0x12, 0xd2, 0x2d, 0xc9, 0xa2, 0xc8, 0xca, 0x64, 0xbf, 0x21, 0x1c, 0x1f, 0x1c, 0x2f, 0xa6, + 0x53, 0xd6, 0x06, 0x3f, 0x8c, 0x4a, 0x9b, 0xa3, 0x2d, 0xd1, 0x34, 0x75, 0x18, 0xb9, 0x87, 0x9c, + 0xd5, 0x92, 0x12, 0xb9, 0x3c, 0x3b, 0x70, 0x60, 0xfc, 0xe4, 0xe7, 0x2c, 0x76, 0x79, 0x49, 0xc0, + 0x68, 0x08, 0x75, 0xb8, 0x12, 0x95, 0x24, 0x0c, 0x19, 0x07, 0xb7, 0x91, 0x0a, 0x63, 0x11, 0x48, + 0x0a, 0xe4, 0xa9, 0xe3, 0x27, 0x3f, 0xcf, 0x9d, 0x78, 0x83, 0x81, 0x93, 0x42, 0x5c, 0x8b, 0xa6, + 0xa6, 0xa2, 0x2d, 0x89, 0x66, 0x16, 0x15, 0x9f, 0xac, 0x61, 0x68, 0x91, 0xbc, 0x50, 0x3f, 0xf0, + 0x31, 0x38, 0x04, 0xf8, 0xe2, 0x22, 0x6b, 0xf9, 0x98, 0xde, 0x04, 0x38, 0xdc, 0x2e, 0x21, 0x04, + 0x2f, 0x2a, 0x36, 0xb5, 0x36, 0x37, 0xd3, 0x90, 0xf6, 0x3f, 0xd6, 0x94, 0x1f, 0x05, 0x84, 0x62, + 0xf9, 0x59, 0x21, 0x0f, 0x6c, 0x25, 0x6c, 0x67, 0xa0, 0x16, 0x9c, 0x2c, 0x78, 0x4c, 0xb1, 0xc7, + 0x7d, 0xfa, 0xe8, 0x3b, 0x34, 0x46, 0x7c, 0xf6, 0xf0, 0x65, 0x92, 0xd9, 0xc7, 0x09, 0x3a, 0x28, + 0x74, 0x8e, 0x7f, 0x24, 0xbe, 0xbb, 0x98, 0x6e, 0xba, 0x46, 0x0a, 0x2f, 0x5e, 0xaa, 0x78, 0xf8, + 0xe2, 0xdc, 0x47, 0x43, 0x95, 0x3e, 0xe8, 0x93, 0x3e, 0xf3, 0x1c, 0xfe, 0x8c, 0x06, 0xba, 0x85, + 0xd7, 0x2c, 0xe4, 0x39, 0x8a, 0xf8, 0x70, 0xe3, 0x47, 0xe2, 0x81, 0x13, 0x12, 0xba, 0x37, 0x7d, + 0xf3, 0x9d, 0xbb, 0x87, 0x53, 0x13, 0xe7, 0xee, 0xcd, 0x13, 0xab, 0x35, 0xfc, 0x78, 0x79, 0x86, + 0xe0, 0xdf, 0x42, 0x8f, 0x97, 0x7d, 0xd6, 0x8e, 0xe1, 0x75, 0x12, 0x1c, 0x36, 0xe7, 0xce, 0xbf, + 0x3f, 0xde, 0xde, 0xc5, 0x8f, 0x98, 0xd7, 0x0b, 0x0f, 0x45, 0xca, 0x59, 0xc0, 0x9b, 0xca, 0x00, + 0x2f, 0x74, 0xe9, 0x8a, 0x88, 0x3b, 0xed, 0x8a, 0xc3, 0xe2, 0xd5, 0xc8, 0xd3, 0x26, 0x53, 0xf7, + 0x14, 0xe2, 0x7c, 0xe4, 0x69, 0x93, 0xe5, 0x05, 0xe0, 0x91, 0x02, 0x1e, 0xfc, 0x6d, 0x32, 0x71, + 0x48, 0x31, 0x94, 0x2f, 0x7d, 0xed, 0xec, 0x69, 0x93, 0x71, 0x1d, 0xf7, 0xf8, 0x83, 0x98, 0xea, + 0x95, 0x9a, 0xb2, 0x94, 0x7b, 0xfc, 0xdd, 0x63, 0xf1, 0xe7, 0x83, 0x42, 0xa0, 0x14, 0x8c, 0x85, + 0xbb, 0xf6, 0x19, 0xd4, 0x45, 0xd5, 0x01, 0x57, 0xb5, 0xc6, 0x36, 0x59, 0xe2, 0x2b, 0x22, 0x78, + 0xc0, 0x07, 0x11, 0x18, 0xfd, 0x87, 0xe8, 0x81, 0x6c, 0x5e, 0xe3, 0x5b, 0xc3, 0x76, 0xfe, 0xc0, + 0xe2, 0x95, 0xb1, 0x2c, 0xdf, 0x76, 0xba, 0xe2, 0x55, 0x17, 0x4a, 0x87, 0x60, 0x2f, 0x07, 0x16, + 0x95, 0xf6, 0x0e, 0xce, 0xae, 0x34, 0xdb, 0xfd, 0x80, 0x04, 0x6f, 0x0b, 0x5c, 0x3b, 0xc0, 0xab, + 0x50, 0x29, 0x59, 0xaf, 0x50, 0xea, 0x80, 0x53, 0x34, 0x29, 0xb1, 0xbe, 0xda, 0x02, 0xf5, 0x13, + 0x84, 0x2a, 0xfc, 0x7d, 0x34, 0x0d, 0x46, 0x9f, 0xaa, 0xf0, 0x10, 0x93, 0xef, 0xb7, 0x5d, 0xa0, + 0x09, 0x5f, 0xac, 0x53, 0xd3, 0xa1, 0x68, 0x33, 0xb5, 0xa3, 0xb4, 0x5d, 0xde, 0x70, 0x59, 0xb1, + 0x7f, 0xb4, 0x04, 0x61, 0x7b, 0xdb, 0xaf, 0xe7, 0x11, 0x61, 0xb5, 0x83, 0x2d, 0x21, 0x83, 0x12, + 0x6d, 0xc9, 0x74, 0xe8, 0xc0, 0x97, 0x67, 0x4c, 0x9e, 0xc8, 0x7b, 0x45, 0x08, 0x2e, 0xf6, 0xf4, + 0x15, 0x61, 0x05, 0x30, 0xb4, 0xcf, 0xc1, 0x1b, 0x8d, 0x3e, 0x3e, 0x5b, 0x95, 0xff, 0x9e, 0x10, + 0x88, 0xc1, 0x78, 0xaa, 0xfc, 0xc6, 0x5f, 0x12, 0x8e, 0xb5, 0x77, 0x4e, 0xf6, 0x25, 0xe1, 0x81, + 0xde, 0xdc, 0xbb, 0xc7, 0x1d, 0x5e, 0x12, 0x6e, 0x45, 0xc4, 0x02, 0xd3, 0x4c, 0xe7, 0x77, 0xe6, + 0x4f, 0xe9, 0x96, 0x50, 0x6a, 0x07, 0x48, 0x38, 0x01, 0x93, 0xef, 0x05, 0xac, 0xc7, 0x06, 0xce, + 0xe4, 0x86, 0x77, 0xdb, 0xdd, 0x13, 0x89, 0x2f, 0x9d, 0x01, 0x48, 0x5e, 0x4f, 0x30, 0x55, 0x55, + 0x26, 0xbe, 0x9e, 0x60, 0xaa, 0xaa, 0x5c, 0x54, 0x4e, 0x82, 0x5a, 0x5a, 0x69, 0x7d, 0x24, 0x47, + 0xa5, 0x89, 0xaa, 0xca, 0x72, 0x51, 0x39, 0x32, 0xb5, 0xe8, 0x3f, 0xee, 0x41, 0x33, 0x2d, 0xfb, + 0x14, 0xbc, 0x1e, 0xcd, 0x4a, 0x89, 0x05, 0x7c, 0x15, 0x48, 0x22, 0x3a, 0xe4, 0xd7, 0xc9, 0x33, + 0xf8, 0x3e, 0xa6, 0xbe, 0x2e, 0x98, 0x5f, 0x8b, 0x9f, 0x47, 0xb7, 0x5b, 0x8a, 0x84, 0x65, 0x22, + 0x79, 0x2d, 0x69, 0xaf, 0x95, 0x67, 0x99, 0x1b, 0x23, 0x58, 0x33, 0xda, 0x61, 0x70, 0xad, 0xd3, + 0xea, 0x91, 0x8c, 0xcf, 0xb2, 0x7a, 0x34, 0xbb, 0x82, 0x05, 0xa4, 0x75, 0xe9, 0x68, 0xb0, 0x24, + 0xf2, 0x05, 0xac, 0xe8, 0x0b, 0x6d, 0xe8, 0x02, 0xf2, 0xa0, 0x84, 0xee, 0xd8, 0x14, 0x8f, 0xa8, + 0x5c, 0xca, 0x68, 0x64, 0x86, 0xc7, 0x51, 0xc9, 0x4b, 0xa1, 0x68, 0x73, 0x85, 0x44, 0x04, 0x7a, + 0x71, 0xfe, 0xec, 0x3b, 0x34, 0xa9, 0x8f, 0xbd, 0x14, 0x0f, 0x92, 0x46, 0x58, 0x41, 0xd3, 0x52, + 0xad, 0xe1, 0xb0, 0x9a, 0x62, 0x0a, 0xa1, 0xe8, 0xf6, 0xac, 0x9d, 0xff, 0x59, 0x34, 0xcf, 0x05, + 0x06, 0x7b, 0xe1, 0xdd, 0xce, 0x26, 0xf3, 0x6c, 0x9c, 0xff, 0x16, 0x9f, 0x75, 0x7a, 0x2c, 0xcf, + 0x3a, 0xfd, 0xff, 0xb9, 0x14, 0xcd, 0xae, 0x4b, 0x86, 0xa2, 0x31, 0xc8, 0x83, 0x0d, 0x2b, 0xe4, + 0xd7, 0x50, 0x19, 0x75, 0x35, 0x4d, 0x11, 0x4c, 0xa7, 0xd7, 0x6c, 0xd3, 0x94, 0x1f, 0x06, 0x78, + 0xa1, 0xdc, 0x20, 0xba, 0x17, 0xd7, 0x37, 0x98, 0x4f, 0xc1, 0x34, 0x9a, 0x6b, 0x03, 0x66, 0x91, + 0x1e, 0xf2, 0x0d, 0x75, 0x8f, 0xb7, 0x77, 0x65, 0x06, 0xdb, 0xaf, 0x8f, 0x74, 0x43, 0xf4, 0x65, + 0x3b, 0x4c, 0x90, 0xf7, 0x8d, 0xb7, 0xda, 0x03, 0x7b, 0x3d, 0xaa, 0x29, 0xcb, 0xc5, 0x85, 0xcb, + 0xbd, 0x89, 0x78, 0x64, 0xec, 0xda, 0x1b, 0xb9, 0xb3, 0xc3, 0x79, 0xfe, 0xbb, 0x1c, 0x84, 0xec, + 0x7f, 0x7d, 0x92, 0xb8, 0x62, 0x49, 0xa2, 0x52, 0x83, 0x1e, 0xa9, 0x8a, 0x29, 0x04, 0xa3, 0x1f, + 0x6a, 0xca, 0x0b, 0x01, 0x28, 0xe1, 0xe8, 0x08, 0x03, 0xb2, 0x20, 0x63, 0x41, 0xb3, 0x28, 0x74, + 0xa0, 0x63, 0x7c, 0x27, 0x2a, 0x7d, 0x89, 0xc4, 0xad, 0x35, 0xf4, 0x59, 0x59, 0x10, 0x7e, 0xe0, + 0xe5, 0x08, 0x93, 0x54, 0x18, 0x0d, 0x6a, 0x32, 0x1a, 0x8f, 0x6c, 0x56, 0xc3, 0xf1, 0x58, 0x24, + 0x45, 0x9d, 0x7e, 0x1c, 0x6a, 0xf0, 0x0a, 0x74, 0x07, 0x24, 0x06, 0x52, 0x9a, 0x9b, 0xcd, 0xdc, + 0x40, 0x44, 0x75, 0x95, 0x05, 0x9d, 0xaa, 0x8c, 0xf9, 0x4e, 0x47, 0x5b, 0xd4, 0x78, 0x2b, 0x9c, + 0xc4, 0xcd, 0x0c, 0xb2, 0x9f, 0x78, 0x09, 0x9a, 0x05, 0x71, 0xec, 0x49, 0x3e, 0x26, 0xc3, 0xba, + 0xc1, 0xea, 0x34, 0x98, 0x5f, 0x6c, 0xf0, 0x53, 0x4a, 0x6d, 0x56, 0xc3, 0xe9, 0x78, 0x92, 0x3e, + 0xbf, 0xe5, 0xbf, 0xc9, 0x85, 0xa2, 0x31, 0x3e, 0x5a, 0x8d, 0xe8, 0x85, 0xa2, 0x59, 0x44, 0xbe, + 0x13, 0x4d, 0x85, 0x1a, 0x9b, 0xd5, 0x35, 0x6d, 0xd1, 0x70, 0x9a, 0xbd, 0x89, 0x34, 0xbe, 0x63, + 0x2d, 0xc6, 0xdf, 0x45, 0xf7, 0xa4, 0x76, 0x44, 0x13, 0xdf, 0x0b, 0x45, 0xd3, 0x6b, 0xe3, 0x34, + 0x26, 0xfe, 0x16, 0x18, 0x2d, 0x23, 0x0d, 0x49, 0xba, 0x13, 0x9c, 0x08, 0x0c, 0xcf, 0x45, 0x53, + 0x23, 0xc9, 0x9d, 0xc1, 0xd6, 0x18, 0x2c, 0xd2, 0x82, 0xf4, 0x97, 0xbf, 0xc3, 0x83, 0x6e, 0x17, + 0x78, 0xfc, 0x56, 0x3b, 0xa5, 0x32, 0xec, 0xcc, 0x7d, 0x45, 0x68, 0x8a, 0x89, 0xd6, 0x39, 0x5d, + 0x1e, 0x74, 0x9b, 0xd1, 0xcc, 0x0c, 0x66, 0x86, 0x9f, 0xcc, 0xd7, 0x19, 0x70, 0xcd, 0xc3, 0x0b, + 0xe5, 0x72, 0x91, 0xb7, 0x99, 0x50, 0x99, 0x7a, 0xe5, 0x65, 0x34, 0x43, 0x0c, 0xc1, 0x06, 0x5a, + 0xad, 0xca, 0x69, 0xac, 0xe6, 0x47, 0x97, 0x0b, 0xc1, 0xd4, 0xd6, 0xc4, 0xd2, 0xc9, 0x9d, 0xf4, + 0x04, 0x40, 0x8c, 0xc6, 0x46, 0x5f, 0x00, 0x64, 0x2f, 0x9d, 0x1b, 0x3b, 0xfb, 0x21, 0x3b, 0x01, + 0x10, 0x00, 0xbc, 0x4f, 0xa2, 0xd9, 0xf9, 0xdd, 0xe0, 0xd9, 0x68, 0xca, 0x0e, 0x75, 0x27, 0xd5, + 0x7d, 0xc6, 0x9f, 0xe4, 0x5a, 0x30, 0xd4, 0xdc, 0xaa, 0xf2, 0x6b, 0x41, 0xe3, 0x47, 0xb5, 0xe7, + 0x51, 0xc9, 0xff, 0xaf, 0x25, 0x74, 0x37, 0x44, 0xdb, 0xb3, 0x0e, 0x8e, 0x1f, 0x12, 0x6c, 0xb6, + 0xc7, 0x6e, 0x7a, 0x58, 0x53, 0x1e, 0x14, 0xb5, 0xd0, 0x42, 0x1a, 0x1c, 0xb3, 0x78, 0x15, 0xb4, + 0x89, 0xa9, 0x20, 0x20, 0xd4, 0xc2, 0xc2, 0x84, 0xa2, 0xce, 0x48, 0xa0, 0xa2, 0xca, 0x45, 0xaf, + 0x62, 0xaa, 0x5e, 0xfc, 0x7f, 0xef, 0x41, 0x0b, 0x5c, 0xb0, 0xf8, 0x2d, 0x65, 0xf2, 0xea, 0x8d, + 0x9a, 0xf2, 0x0c, 0xfa, 0x6e, 0xa0, 0x30, 0x59, 0xe4, 0xb9, 0xe2, 0xd4, 0x99, 0x7c, 0x65, 0x3f, + 0x1f, 0xcb, 0x4a, 0x68, 0xba, 0xd1, 0xc9, 0x86, 0x50, 0xa3, 0xda, 0xfc, 0x95, 0xc5, 0xe5, 0xf7, + 0xd1, 0xd4, 0x66, 0xa3, 0x23, 0xc6, 0x00, 0xf7, 0x3b, 0x21, 0x4c, 0x3e, 0xb5, 0x9c, 0xfc, 0x4b, + 0xe5, 0x03, 0xfc, 0xbb, 0xa0, 0x25, 0x17, 0x8d, 0x13, 0x7b, 0x72, 0xe7, 0x7f, 0xc1, 0x8e, 0x1d, + 0xa0, 0xce, 0xfb, 0x18, 0x9a, 0x21, 0xb4, 0x9b, 0x94, 0x40, 0x5c, 0x95, 0xd0, 0x3c, 0x93, 0x66, + 0xd0, 0x0b, 0x93, 0x85, 0x7a, 0xc6, 0xb6, 0x92, 0xf3, 0xcb, 0x2a, 0xde, 0x62, 0x42, 0x8e, 0xb5, + 0x8a, 0x95, 0xe7, 0xeb, 0x11, 0x2b, 0xff, 0x5f, 0x7a, 0x50, 0x85, 0x7d, 0xec, 0xbf, 0xad, 0x12, + 0x50, 0xab, 0x29, 0x4f, 0xa3, 0x27, 0x03, 0xae, 0x14, 0x91, 0x6f, 0x17, 0x09, 0x4c, 0x38, 0xc7, + 0xce, 0xf7, 0xef, 0x53, 0xbe, 0xdf, 0x12, 0x8a, 0xc6, 0xd2, 0x5f, 0x99, 0xef, 0x37, 0x19, 0xfb, + 0xc2, 0x68, 0x8c, 0x6f, 0x84, 0xe7, 0xd8, 0x77, 0x4d, 0xd1, 0x58, 0x9a, 0xf2, 0x39, 0x40, 0x72, + 0x3e, 0xbf, 0x78, 0x92, 0xbf, 0xcf, 0x09, 0xd2, 0xba, 0x3c, 0x66, 0x25, 0x8d, 0x27, 0xc5, 0xac, + 0xf0, 0xb9, 0x9b, 0xc3, 0xac, 0x7f, 0x65, 0x61, 0x56, 0x36, 0xf6, 0xdf, 0x56, 0x66, 0xa5, 0x41, + 0xbb, 0x5c, 0x29, 0x22, 0x63, 0x91, 0xc0, 0x30, 0xfd, 0x76, 0x6e, 0x7d, 0x0a, 0xcd, 0xfc, 0xae, + 0x1a, 0x6a, 0x4e, 0x6f, 0xa7, 0x4c, 0x50, 0xbd, 0x5c, 0x53, 0x1e, 0x44, 0x4b, 0x03, 0xd6, 0x52, + 0xb9, 0x42, 0x7f, 0xe3, 0xb4, 0x3e, 0x74, 0x25, 0xfb, 0x61, 0x7b, 0xf6, 0xf8, 0x69, 0x08, 0xb5, + 0x41, 0x43, 0x5c, 0xed, 0xf6, 0xa0, 0xdb, 0x18, 0xec, 0x4d, 0x98, 0x8a, 0xb5, 0x68, 0x3a, 0xbf, + 0xfc, 0xa6, 0xfb, 0x5a, 0xe2, 0x1e, 0x6c, 0x96, 0xca, 0x15, 0xe2, 0x84, 0x2c, 0x49, 0x27, 0x5b, + 0xd5, 0x2a, 0x72, 0x6e, 0xbc, 0x34, 0x68, 0x02, 0x31, 0xb7, 0x94, 0x3c, 0x54, 0x1c, 0xf1, 0x76, + 0xb9, 0x0f, 0xda, 0x2f, 0xc1, 0x21, 0x21, 0xcb, 0x04, 0xb4, 0x39, 0xbc, 0x5d, 0x6d, 0x09, 0x31, + 0xd9, 0x5a, 0x9e, 0x7f, 0xfd, 0x48, 0xee, 0x88, 0xf8, 0xf5, 0xe3, 0xd4, 0xcc, 0x50, 0x2f, 0x71, + 0xae, 0xa6, 0x05, 0x6c, 0x3c, 0xee, 0x3d, 0xca, 0x0b, 0xe1, 0xb4, 0x94, 0xbe, 0x2f, 0x3f, 0x77, + 0xd2, 0x0c, 0x57, 0x01, 0x13, 0xf3, 0x89, 0x84, 0x2a, 0xd6, 0xa9, 0x5f, 0xcf, 0x70, 0xf0, 0x83, + 0xe2, 0x8b, 0x0d, 0xca, 0x99, 0x31, 0x50, 0x5f, 0xe4, 0xfb, 0x2c, 0xda, 0xa8, 0x51, 0x56, 0xfd, + 0x90, 0xa6, 0xac, 0x40, 0xcb, 0x03, 0xae, 0x5f, 0x67, 0x97, 0x73, 0xe2, 0xd0, 0xfd, 0x7f, 0x38, + 0x05, 0x79, 0x9f, 0x6b, 0x55, 0x93, 0x3b, 0x1b, 0xd4, 0x64, 0x4b, 0xcd, 0x4e, 0x85, 0xec, 0x70, + 0xea, 0xeb, 0x82, 0xea, 0x4f, 0xc9, 0x96, 0xea, 0x51, 0x84, 0xe8, 0x11, 0xf7, 0x36, 0xf6, 0x94, + 0x84, 0xde, 0xd3, 0x98, 0xc5, 0x72, 0x99, 0x3d, 0x62, 0x54, 0xc4, 0x68, 0x49, 0x85, 0xcd, 0x68, + 0x29, 0xde, 0xf0, 0x98, 0xc5, 0x72, 0x99, 0x3d, 0x64, 0x55, 0x04, 0xaf, 0xa4, 0x48, 0x0b, 0xfe, + 0x29, 0x80, 0x34, 0xd6, 0x7b, 0x47, 0x0d, 0x8c, 0x3f, 0x1a, 0x1a, 0x3f, 0xfc, 0x99, 0x88, 0x3a, + 0x7e, 0x12, 0xcd, 0x48, 0xab, 0x2d, 0x89, 0xe6, 0x50, 0x5a, 0x35, 0xbe, 0x56, 0x62, 0xb6, 0x14, + 0xcb, 0xe5, 0x19, 0xd9, 0x73, 0x27, 0xb3, 0x1f, 0x5c, 0x1b, 0x7f, 0x7f, 0x77, 0x7d, 0x5d, 0x10, + 0xb1, 0x9a, 0xfa, 0x08, 0x7e, 0x1c, 0x21, 0x7a, 0xc1, 0x6b, 0x34, 0x2f, 0x35, 0xef, 0x9b, 0x85, + 0x62, 0xe2, 0x3f, 0x06, 0x6f, 0xa9, 0x44, 0x2f, 0x4e, 0xa3, 0x71, 0x19, 0x5c, 0xad, 0xc4, 0x93, + 0xf4, 0x70, 0x8e, 0xdc, 0xf3, 0xf0, 0x42, 0xe1, 0x48, 0x8f, 0xbd, 0xee, 0xe2, 0x75, 0xec, 0xf9, + 0x55, 0x81, 0x39, 0x90, 0x17, 0x42, 0x58, 0x67, 0xe0, 0xaf, 0x5c, 0x5f, 0x47, 0x66, 0xf0, 0xad, + 0xcc, 0xe0, 0xbe, 0xec, 0x21, 0x1a, 0x99, 0xc6, 0xff, 0xae, 0xc7, 0x6d, 0x0a, 0x09, 0xcf, 0x3d, + 0x86, 0xca, 0x42, 0xb4, 0x88, 0x4e, 0x20, 0x21, 0x0c, 0x2f, 0x94, 0x6f, 0x83, 0xfe, 0xd9, 0xef, + 0x20, 0xaf, 0xc1, 0xdb, 0x51, 0x59, 0x42, 0x4d, 0xb6, 0x6c, 0x0b, 0xa7, 0x5f, 0x21, 0x33, 0x38, + 0x43, 0x0e, 0xe4, 0x6b, 0x50, 0xf7, 0x71, 0xc3, 0x41, 0x17, 0xef, 0x40, 0xc6, 0x22, 0x1a, 0xec, + 0x7c, 0xd8, 0xa8, 0xad, 0x4d, 0xbf, 0x52, 0xfd, 0x9c, 0xa6, 0x6c, 0x42, 0x1b, 0x02, 0x05, 0xf0, + 0x60, 0x77, 0xc4, 0x34, 0xea, 0xb5, 0xd0, 0xd7, 0x17, 0x12, 0x1f, 0xf1, 0x17, 0x12, 0xff, 0x9e, + 0xbf, 0x57, 0x42, 0xa5, 0x46, 0x4f, 0x29, 0xbc, 0x1a, 0x95, 0x1a, 0xa5, 0xcc, 0xc0, 0xda, 0x5e, + 0x48, 0x12, 0x28, 0xf8, 0x97, 0x2c, 0x43, 0x83, 0x00, 0xee, 0x6d, 0x40, 0xc8, 0x2c, 0x74, 0x58, + 0x9b, 0x56, 0x8a, 0x6b, 0xd3, 0x19, 0xf2, 0x5c, 0x5b, 0x2a, 0x2c, 0x92, 0x04, 0x4b, 0x5c, 0xb3, + 0xf6, 0x4a, 0x68, 0xbe, 0x23, 0x8a, 0x37, 0xa8, 0xc2, 0x6b, 0xa8, 0x79, 0x83, 0x01, 0xcc, 0x71, + 0x44, 0xcc, 0xc1, 0xa0, 0x51, 0x23, 0x09, 0x9b, 0x6c, 0xcd, 0x83, 0x50, 0x6d, 0xbc, 0xa5, 0x05, + 0xc2, 0xe7, 0x7f, 0xd3, 0x0d, 0x7a, 0x9d, 0xc5, 0xa0, 0xcf, 0xb3, 0x91, 0x7c, 0x73, 0x3a, 0xd9, + 0x1a, 0x4e, 0x4f, 0x64, 0xc4, 0x59, 0x20, 0x71, 0x13, 0x6f, 0xb9, 0x7c, 0xbc, 0xbd, 0x2f, 0xf7, + 0x2e, 0x75, 0x3b, 0xf0, 0x7f, 0xe8, 0x41, 0xb7, 0x41, 0x25, 0xb5, 0x04, 0xdf, 0x78, 0xc2, 0xac, + 0xb3, 0x10, 0xc6, 0x9e, 0x87, 0xd3, 0xc0, 0x03, 0x92, 0xb2, 0x4d, 0x40, 0x9b, 0xa5, 0x9a, 0xf2, + 0x00, 0x5a, 0x14, 0xc8, 0x43, 0x5f, 0xc6, 0x40, 0x1f, 0xd1, 0x39, 0xc3, 0xbf, 0x01, 0x11, 0x7f, + 0xd2, 0x9a, 0xf5, 0x34, 0xb2, 0x24, 0x2c, 0x65, 0xe8, 0xfb, 0x0b, 0x87, 0x2a, 0x79, 0xbe, 0xf9, + 0x4a, 0x92, 0x44, 0x20, 0xb0, 0x58, 0xce, 0x8b, 0x53, 0xa8, 0x2f, 0x7a, 0xed, 0x96, 0x78, 0x22, + 0xde, 0x1c, 0x6f, 0xda, 0xc9, 0x54, 0xd8, 0x56, 0xfb, 0xd1, 0xc6, 0xa3, 0x86, 0x8a, 0x15, 0x96, + 0xb5, 0x65, 0xd6, 0x8c, 0x42, 0xa5, 0x45, 0x65, 0x14, 0x32, 0x54, 0x04, 0xc4, 0x55, 0x83, 0x19, + 0x7a, 0x4d, 0x53, 0x5e, 0x61, 0x71, 0xd5, 0xe2, 0xe1, 0x96, 0x48, 0x23, 0x8b, 0xad, 0xb6, 0x24, + 0x7b, 0xbc, 0x27, 0x33, 0xf4, 0x3e, 0x4f, 0x98, 0x45, 0x53, 0x65, 0xd1, 0xa8, 0x5f, 0x97, 0x33, + 0xc3, 0x87, 0x18, 0x64, 0xae, 0xaf, 0x23, 0xbb, 0xef, 0x9d, 0x6c, 0x57, 0xef, 0x52, 0x96, 0xa9, + 0x8e, 0xaa, 0xad, 0xbe, 0x8e, 0xec, 0x7b, 0x34, 0x35, 0x04, 0x44, 0x5a, 0x84, 0x16, 0x7a, 0xef, + 0x7b, 0x00, 0xcf, 0x42, 0xb2, 0x6d, 0x47, 0x33, 0x5e, 0x8a, 0x36, 0x93, 0x98, 0xb2, 0x2c, 0xa7, + 0x43, 0xe1, 0xb4, 0xaa, 0xc4, 0x1f, 0x58, 0x6c, 0x23, 0x57, 0xd0, 0x6c, 0x14, 0x17, 0x0f, 0x8c, + 0xbd, 0x3b, 0x0a, 0x69, 0xa1, 0xb3, 0x47, 0x87, 0xb2, 0x17, 0x4f, 0x04, 0x45, 0xb0, 0xea, 0x1a, + 0x4d, 0x79, 0x0a, 0x3d, 0x11, 0x70, 0xa6, 0xb9, 0xbc, 0x48, 0x0c, 0x22, 0x97, 0x19, 0x1c, 0x36, + 0x7a, 0x20, 0x69, 0xc0, 0x60, 0xb8, 0x74, 0xce, 0x3e, 0x2a, 0x25, 0x29, 0x8d, 0x6a, 0x76, 0x6c, + 0x8e, 0x27, 0x52, 0x5b, 0xa8, 0x41, 0x05, 0x9e, 0x61, 0xd6, 0x07, 0x35, 0xb6, 0xa6, 0xa2, 0x31, + 0x35, 0x95, 0xe2, 0x73, 0x07, 0xcb, 0x00, 0xb3, 0x58, 0x2e, 0x63, 0xd4, 0x0b, 0x0a, 0xa5, 0xf8, + 0xf7, 0x05, 0xbb, 0xea, 0x31, 0x3d, 0xb9, 0x4c, 0xbb, 0xfa, 0xd0, 0xd8, 0xc0, 0x69, 0x30, 0x07, + 0xfa, 0xd1, 0x73, 0xfa, 0xe8, 0x3b, 0x7a, 0xd7, 0x7e, 0x36, 0xdc, 0x7d, 0xd9, 0xa3, 0x5d, 0x60, + 0x23, 0x0c, 0xc2, 0x13, 0xab, 0xcf, 0x8e, 0xed, 0x59, 0x73, 0x7c, 0x54, 0x42, 0xb7, 0xb1, 0x35, + 0xc0, 0x66, 0xb2, 0x5c, 0xa2, 0x4b, 0x8e, 0xb4, 0xa6, 0x7c, 0x3f, 0x90, 0x57, 0x25, 0xaf, 0x85, + 0x5e, 0xb2, 0x1f, 0x9c, 0xce, 0x0e, 0xf5, 0x54, 0xfa, 0xd8, 0x38, 0xb3, 0x7b, 0x0f, 0x8d, 0xb5, + 0x77, 0x86, 0x89, 0xac, 0x40, 0xc8, 0x2b, 0x58, 0x0c, 0x65, 0x3f, 0x7f, 0x23, 0x77, 0x6e, 0x5f, + 0x76, 0xef, 0x21, 0x63, 0x2e, 0xc8, 0x33, 0x2f, 0x28, 0xf9, 0x55, 0xcd, 0xdc, 0xe4, 0x9d, 0xc1, + 0x32, 0xd6, 0x3c, 0x38, 0x15, 0x9a, 0x06, 0x7f, 0x2f, 0x98, 0xf7, 0x41, 0xfc, 0x4f, 0x12, 0x2a, + 0x4d, 0x85, 0xe3, 0xfc, 0xf9, 0xdd, 0x7f, 0x90, 0x34, 0x65, 0x44, 0x0a, 0x40, 0x99, 0xfc, 0xa9, + 0xd4, 0xb8, 0x63, 0x5b, 0x63, 0xf4, 0xd5, 0x6d, 0xd1, 0x88, 0x2f, 0xfb, 0x61, 0x7b, 0xee, 0x33, + 0x83, 0xc3, 0x32, 0xa3, 0x47, 0x0d, 0x11, 0x3d, 0x7e, 0x7c, 0xb9, 0xe9, 0x25, 0x60, 0xb0, 0xb1, + 0x01, 0x58, 0x99, 0x3d, 0x7f, 0x2a, 0x7b, 0xf8, 0x32, 0x87, 0xcd, 0xbe, 0x37, 0x90, 0x1b, 0xee, + 0x85, 0x47, 0xe2, 0xbe, 0xda, 0x8d, 0x75, 0x35, 0x3e, 0xa0, 0x9d, 0xaf, 0xbe, 0xce, 0x97, 0x19, + 0x1c, 0xf2, 0x99, 0xdd, 0xf3, 0x90, 0xa0, 0x95, 0x06, 0x8d, 0xdb, 0x47, 0x8c, 0x5a, 0xba, 0xce, + 0xf3, 0x65, 0x0f, 0x5f, 0xd6, 0xf7, 0x1e, 0x81, 0x4e, 0x01, 0xa8, 0x40, 0xfb, 0x5f, 0xd5, 0xcc, + 0x4b, 0xce, 0x09, 0x96, 0xb1, 0x11, 0x05, 0xa7, 0xd1, 0x5e, 0x82, 0xbf, 0x17, 0x04, 0xac, 0xaa, + 0x5f, 0xd4, 0x94, 0xef, 0xa3, 0xad, 0x81, 0x82, 0x2c, 0xc5, 0xdd, 0x06, 0x84, 0x59, 0x05, 0x6e, + 0x04, 0x2d, 0xfa, 0x85, 0x24, 0x30, 0xd1, 0x17, 0x12, 0x9f, 0x6f, 0xff, 0x55, 0x0f, 0x5a, 0xe0, + 0xd2, 0xf1, 0x4d, 0xd8, 0x41, 0x31, 0x97, 0xf4, 0x29, 0xce, 0x0f, 0xb6, 0xd8, 0xf8, 0xc8, 0x3b, + 0x73, 0x31, 0x62, 0x83, 0x05, 0x6d, 0x9b, 0x35, 0xaf, 0x7e, 0x5e, 0x53, 0x82, 0xa8, 0x21, 0x50, + 0x18, 0x51, 0x47, 0x12, 0x92, 0xbe, 0x18, 0x09, 0x1d, 0x4e, 0x15, 0xcb, 0xc5, 0x21, 0x61, 0x3f, + 0x2a, 0x67, 0xfc, 0x2a, 0xdc, 0xdf, 0x59, 0xca, 0xf0, 0x42, 0x64, 0xae, 0xb1, 0x79, 0x48, 0x57, + 0xb3, 0xc4, 0xa8, 0x17, 0x74, 0xc3, 0x14, 0x72, 0x65, 0x22, 0x2a, 0x00, 0x3f, 0x2a, 0x67, 0xbf, + 0xc8, 0x37, 0xe0, 0xd5, 0x8b, 0xa5, 0x0c, 0x57, 0x98, 0xa9, 0xa6, 0x20, 0xca, 0x2b, 0xcf, 0x1c, + 0x35, 0x17, 0x4d, 0x55, 0x23, 0x51, 0xbe, 0x28, 0x0f, 0xd2, 0x5f, 0xd6, 0x87, 0x67, 0xd3, 0xf2, + 0x02, 0xb8, 0xfa, 0x33, 0x4e, 0x0a, 0x8d, 0xdc, 0x68, 0x7e, 0x75, 0x85, 0xf6, 0x98, 0x9d, 0x1e, + 0xb4, 0xa9, 0x59, 0x2c, 0x97, 0xc1, 0xa4, 0x58, 0x36, 0x28, 0x56, 0x5d, 0x38, 0xe5, 0x37, 0xa3, + 0x0b, 0x4b, 0xbe, 0x91, 0xba, 0xb0, 0xf4, 0x77, 0xba, 0x50, 0xe0, 0xc6, 0x3c, 0x41, 0x26, 0x6e, + 0x53, 0x45, 0xe9, 0xc2, 0x7f, 0xe7, 0xa4, 0x0b, 0xa1, 0xe3, 0x9b, 0xa0, 0x0b, 0x7f, 0xc2, 0x75, + 0xa1, 0xe4, 0xe4, 0x74, 0xc4, 0xc6, 0x07, 0x4e, 0x43, 0x44, 0x23, 0xca, 0x9a, 0x52, 0x45, 0x35, + 0xe2, 0x62, 0x40, 0x1e, 0xfa, 0xcc, 0xf5, 0x75, 0xe8, 0x9d, 0xe7, 0xf4, 0x8b, 0xed, 0x94, 0x16, + 0x76, 0x05, 0x49, 0xc9, 0x5a, 0x18, 0x7b, 0xb6, 0xfa, 0xa1, 0x74, 0xb5, 0xf5, 0xe8, 0xa6, 0x26, + 0x5b, 0x10, 0xb6, 0x0f, 0x16, 0xfb, 0xcc, 0xd3, 0x89, 0xe7, 0x93, 0xcd, 0x54, 0x55, 0x8a, 0x45, + 0xf8, 0x61, 0x34, 0x95, 0x6c, 0x12, 0xd9, 0x71, 0xb3, 0xcd, 0xc5, 0xbf, 0x36, 0x4e, 0x42, 0x96, + 0xc1, 0x0a, 0x3e, 0x48, 0x81, 0xfd, 0xdb, 0xd0, 0x4c, 0x4b, 0x85, 0xc3, 0x1e, 0xd5, 0x29, 0xe6, + 0xc7, 0x9d, 0xa8, 0x34, 0x1a, 0x8b, 0xa8, 0xaf, 0x50, 0x95, 0x0b, 0x3f, 0x0c, 0xc8, 0x88, 0x9a, + 0x0a, 0x53, 0x2d, 0x4b, 0xfe, 0xf6, 0x8f, 0x49, 0x84, 0x4d, 0xea, 0x63, 0x31, 0x35, 0xc9, 0x10, + 0x23, 0x5f, 0xe2, 0x87, 0xd7, 0xab, 0xed, 0x4b, 0xf3, 0x0a, 0xb7, 0xa5, 0xb9, 0xb8, 0xf4, 0x7e, + 0xc4, 0xb6, 0xb8, 0x03, 0xe7, 0x21, 0xae, 0xd0, 0xca, 0xe9, 0x0b, 0x75, 0xa2, 0xd3, 0x84, 0x03, + 0x13, 0x1a, 0x95, 0xa1, 0xf0, 0xb0, 0xe4, 0x15, 0x74, 0xfe, 0x48, 0x14, 0xa0, 0xb1, 0x6b, 0x3d, + 0xb9, 0xe1, 0xcf, 0x88, 0x4f, 0x44, 0x7f, 0x76, 0xf0, 0xd3, 0xec, 0xf1, 0x77, 0x98, 0xbc, 0xbc, + 0x37, 0xbe, 0xe7, 0x00, 0x5d, 0xc9, 0xfe, 0x5b, 0x0f, 0x5a, 0xe8, 0xd6, 0xe7, 0x4d, 0x10, 0x89, + 0xad, 0x96, 0xe5, 0xc1, 0x02, 0x37, 0x91, 0x80, 0x2d, 0x80, 0xc3, 0xfa, 0x00, 0x50, 0xb3, 0xb3, + 0xbf, 0xaa, 0x29, 0x8d, 0xe8, 0xc7, 0x81, 0x09, 0x50, 0x95, 0x97, 0x15, 0x4f, 0x3f, 0xbd, 0x7d, + 0xc4, 0x2e, 0x08, 0x3b, 0xd1, 0x4c, 0x4b, 0xcf, 0x8e, 0x6f, 0x60, 0x19, 0xc7, 0x79, 0x4c, 0x8e, + 0x33, 0x78, 0x33, 0xa9, 0xbe, 0xc4, 0x92, 0xd9, 0x05, 0xe1, 0x87, 0x51, 0x9a, 0x4e, 0x86, 0x62, + 0x2c, 0x04, 0x0d, 0xfc, 0x30, 0xef, 0x06, 0x4b, 0x85, 0xbb, 0x41, 0xff, 0x5f, 0x96, 0xa2, 0xb9, + 0x75, 0x6a, 0x63, 0x6b, 0x13, 0x15, 0xef, 0x50, 0x6a, 0x87, 0x99, 0xc3, 0xcf, 0x6e, 0xbb, 0x7d, + 0xae, 0xb6, 0x9b, 0x1d, 0xd6, 0x89, 0x26, 0xfc, 0x69, 0x07, 0x13, 0xee, 0x73, 0x35, 0xe1, 0xbc, + 0x07, 0xc1, 0x92, 0x6f, 0xb5, 0x59, 0xf2, 0x6a, 0x4d, 0x59, 0x21, 0x30, 0xfe, 0x22, 0x6e, 0xae, + 0x21, 0xdb, 0xf3, 0xd8, 0xc0, 0x69, 0xe8, 0x2f, 0xd7, 0xd7, 0x91, 0x4c, 0xbf, 0x02, 0x02, 0x61, + 0x3b, 0x48, 0xfc, 0xa6, 0x5b, 0xf0, 0xbd, 0x12, 0x2a, 0x0b, 0x53, 0x5d, 0x45, 0x5f, 0x29, 0xaf, + 0xb2, 0x05, 0x7c, 0x75, 0x9c, 0x35, 0xae, 0xfb, 0xe0, 0x6a, 0x79, 0xb5, 0xa6, 0x3c, 0x14, 0xe0, + 0x5d, 0xc9, 0x8b, 0x45, 0x16, 0xa5, 0xae, 0x83, 0xa6, 0x0d, 0x20, 0xfc, 0x49, 0xf4, 0x76, 0x90, + 0x37, 0xf1, 0x3e, 0x6e, 0x6a, 0xcd, 0x49, 0xdf, 0x3a, 0x57, 0xa7, 0x34, 0x25, 0x81, 0x62, 0x01, + 0x17, 0x0e, 0x93, 0x17, 0x8d, 0x5d, 0xd8, 0x35, 0x36, 0x70, 0xd0, 0x3e, 0x28, 0xd1, 0xb1, 0x39, + 0xcf, 0x2a, 0x0b, 0xdc, 0x21, 0x98, 0xe8, 0x2f, 0x24, 0x3e, 0x62, 0xff, 0x5f, 0x78, 0xd0, 0x3c, + 0xdb, 0x07, 0x6f, 0x82, 0x52, 0xda, 0x6e, 0xb1, 0xd3, 0xf7, 0x4d, 0x30, 0x7f, 0xc4, 0x50, 0x13, + 0xef, 0x75, 0x50, 0x4d, 0xee, 0xb4, 0x11, 0x6c, 0x2a, 0x55, 0x53, 0xbf, 0xaf, 0x29, 0x2f, 0xa2, + 0x17, 0x02, 0x6e, 0x58, 0x7f, 0x65, 0xfd, 0xf4, 0x14, 0xba, 0xc3, 0x61, 0xb4, 0x78, 0x09, 0x75, + 0x95, 0x95, 0xdc, 0x5d, 0x65, 0xc1, 0xf9, 0xd5, 0xff, 0x2f, 0xd3, 0xd1, 0x2c, 0x72, 0xb4, 0xb5, + 0x31, 0x1e, 0x69, 0x6d, 0x56, 0xd7, 0x36, 0x87, 0x9a, 0xf0, 0xf3, 0xf9, 0xb7, 0x3b, 0x8f, 0x6b, + 0xca, 0xa3, 0xe6, 0xed, 0xce, 0xb2, 0x9a, 0xda, 0xcd, 0xfa, 0xd5, 0x4b, 0xfa, 0x81, 0x0b, 0x3c, + 0x2c, 0x75, 0x66, 0xa8, 0x97, 0x07, 0xaf, 0x1b, 0xdb, 0x77, 0x31, 0x7b, 0x68, 0x0f, 0x0f, 0x5a, + 0x6a, 0x5e, 0x02, 0x85, 0xcc, 0x20, 0xfd, 0x30, 0x63, 0xeb, 0x34, 0xa5, 0xce, 0x0c, 0xd2, 0xff, + 0x18, 0xef, 0x04, 0x3c, 0xf8, 0x97, 0xe8, 0x67, 0xde, 0xdc, 0xb2, 0x7e, 0x4d, 0xb5, 0x6f, 0xe5, + 0x72, 0x79, 0xc5, 0xf2, 0xd5, 0x95, 0x2b, 0x97, 0xaf, 0x7c, 0x74, 0xf9, 0x2a, 0xe3, 0xbf, 0x55, + 0xcb, 0x1f, 0x5a, 0x96, 0xde, 0xf1, 0x68, 0xca, 0xf8, 0x7b, 0xf5, 0xf2, 0x87, 0x96, 0x9a, 0xc1, + 0xf9, 0x5f, 0x43, 0x65, 0x2d, 0x04, 0x0f, 0xee, 0x08, 0x0d, 0xee, 0x93, 0xac, 0x50, 0x6e, 0xc8, + 0x0d, 0x77, 0x64, 0x86, 0x2f, 0xc3, 0xa5, 0xcb, 0x92, 0xf5, 0xad, 0x8d, 0xaa, 0xd2, 0x50, 0xbf, + 0x59, 0x4d, 0xb6, 0xa9, 0xc9, 0xeb, 0x23, 0xdd, 0xc6, 0xef, 0xda, 0x78, 0x2c, 0x9d, 0x8c, 0x37, + 0x37, 0x93, 0x82, 0x35, 0xe9, 0x70, 0x84, 0x96, 0x6f, 0x0e, 0x6f, 0x57, 0x8d, 0x4e, 0x8c, 0xe2, + 0x1d, 0xad, 0x8d, 0x6a, 0xb3, 0x9a, 0xce, 0x9d, 0xef, 0x5a, 0x1a, 0xe4, 0x7d, 0xe3, 0x55, 0xa8, + 0xec, 0xa5, 0xe6, 0x50, 0x93, 0xb9, 0xc5, 0x83, 0x15, 0x04, 0x2f, 0x94, 0xa7, 0x83, 0xd8, 0xe8, + 0x3d, 0xfb, 0x83, 0xbc, 0xd0, 0x58, 0x40, 0x18, 0x7f, 0xd7, 0x19, 0x06, 0xa4, 0x54, 0x58, 0x40, + 0xb0, 0x42, 0xb9, 0x1c, 0x5a, 0x51, 0x97, 0x5a, 0x5e, 0x8e, 0xd7, 0xa2, 0xf2, 0x88, 0xfa, 0x52, + 0xa8, 0xb5, 0x19, 0xd6, 0x4c, 0xf4, 0xca, 0x86, 0x64, 0x70, 0xb3, 0x54, 0xc8, 0xb3, 0xa0, 0x03, + 0xd8, 0x3d, 0xe8, 0xed, 0x23, 0x41, 0x4b, 0x35, 0xae, 0xe6, 0x09, 0x61, 0xe1, 0xd9, 0x0d, 0xe9, + 0x81, 0x25, 0x84, 0x9d, 0x43, 0x8f, 0xe0, 0x7a, 0x48, 0x24, 0xf0, 0x81, 0xd3, 0x54, 0x09, 0xb1, + 0x54, 0xb0, 0x8f, 0x98, 0xbb, 0xd6, 0x32, 0xf3, 0x4a, 0x86, 0x27, 0x48, 0x9e, 0x45, 0x03, 0xd8, + 0xb2, 0xac, 0xc8, 0xe6, 0xa6, 0xf6, 0x11, 0x33, 0xdb, 0xeb, 0x74, 0xa1, 0x21, 0xcb, 0xf6, 0x4a, + 0x1b, 0xf2, 0x1c, 0xc8, 0x66, 0xaa, 0xd7, 0x6a, 0x34, 0x9d, 0xf4, 0x41, 0x5c, 0xc8, 0x91, 0x79, + 0xc1, 0x65, 0x96, 0xe6, 0xe5, 0xa2, 0x31, 0x2b, 0xf0, 0x13, 0x08, 0x41, 0x37, 0xa4, 0xf1, 0x0c, + 0xc1, 0xff, 0xdc, 0x2c, 0x96, 0xcb, 0xe1, 0xa3, 0xcc, 0xff, 0xdc, 0xac, 0xc1, 0x69, 0x98, 0x29, + 0xe1, 0x49, 0xcb, 0xf7, 0x35, 0xe5, 0xf9, 0x00, 0x2f, 0x94, 0xeb, 0x69, 0x66, 0x09, 0x42, 0x23, + 0x1a, 0xe8, 0x31, 0x1a, 0x4b, 0x3f, 0x24, 0x57, 0x35, 0xc6, 0xe3, 0xcd, 0x55, 0xa9, 0x74, 0x32, + 0x1a, 0x6b, 0xaa, 0x8a, 0xb4, 0xc2, 0x35, 0x7d, 0x55, 0x4b, 0x28, 0x41, 0xcb, 0x52, 0xb9, 0xf3, + 0x5d, 0xfa, 0xf1, 0xa1, 0xdc, 0xc9, 0x76, 0x68, 0xb5, 0x34, 0xc8, 0x3b, 0xc5, 0x41, 0x34, 0xd3, + 0xf8, 0x9b, 0xcc, 0x15, 0x79, 0xca, 0x32, 0x93, 0x38, 0xd1, 0x12, 0x47, 0x77, 0x6b, 0x8d, 0x5c, + 0x41, 0xf9, 0x8b, 0x3c, 0x96, 0x33, 0xac, 0x47, 0xfb, 0x08, 0xdd, 0x20, 0x5b, 0x01, 0xf1, 0x0b, + 0xc6, 0xe2, 0xa4, 0x49, 0x7d, 0x85, 0x3c, 0x8b, 0x71, 0x48, 0x67, 0x49, 0xcc, 0x44, 0xd0, 0x80, + 0x00, 0xb7, 0x71, 0x80, 0x96, 0xe7, 0x53, 0x4e, 0x3c, 0xda, 0x95, 0x3d, 0xb8, 0x37, 0xdb, 0x7e, + 0x36, 0x7b, 0xe2, 0xe4, 0xf8, 0xc7, 0xdd, 0x63, 0x67, 0x3b, 0xf4, 0xbd, 0x47, 0x82, 0x00, 0x83, + 0xe3, 0xa8, 0x34, 0x49, 0xde, 0xc4, 0xcf, 0x22, 0x5d, 0xcf, 0xb7, 0x79, 0x2a, 0xb4, 0xb6, 0x34, + 0xaa, 0xf0, 0xf6, 0xbd, 0xe6, 0x3b, 0x9a, 0xf2, 0x58, 0x00, 0xc0, 0xe5, 0x15, 0x63, 0xfb, 0x28, + 0x73, 0x65, 0x06, 0x87, 0x0c, 0x24, 0xda, 0x47, 0x4c, 0x8d, 0x02, 0x21, 0xf8, 0x61, 0xdf, 0xd2, + 0xbd, 0x4b, 0x7f, 0xff, 0x33, 0x83, 0x8b, 0xa1, 0x21, 0x8b, 0x1c, 0x93, 0xaf, 0xc4, 0xe4, 0x07, + 0x20, 0xa0, 0x6c, 0xae, 0xff, 0x64, 0xae, 0x67, 0x37, 0x44, 0x7f, 0x20, 0x8a, 0x28, 0xd7, 0xd7, + 0x41, 0x75, 0x00, 0x3c, 0xce, 0xf9, 0x23, 0x0f, 0x4c, 0x2b, 0xf3, 0xe4, 0xe6, 0x22, 0x4c, 0x3d, + 0xb9, 0xb9, 0xa0, 0x7a, 0x05, 0x41, 0xf5, 0x98, 0x75, 0x44, 0x16, 0xfd, 0x79, 0xb2, 0x08, 0x8b, + 0x3e, 0xab, 0x9c, 0xc9, 0x5c, 0xce, 0x4a, 0x26, 0x3a, 0x0b, 0xe7, 0xf2, 0xe5, 0x15, 0x58, 0xae, + 0xd4, 0xfc, 0x26, 0x61, 0x8c, 0x45, 0xf9, 0x8c, 0x31, 0xd5, 0x60, 0x8c, 0xfc, 0xa9, 0x5e, 0xc1, + 0xa6, 0x7a, 0xda, 0x44, 0x53, 0xcd, 0x66, 0x70, 0x25, 0x9b, 0xc1, 0xb2, 0x09, 0x67, 0x90, 0xce, + 0x81, 0xbf, 0x0e, 0x21, 0xb3, 0x1f, 0x7c, 0x37, 0x9a, 0xde, 0x16, 0x6a, 0x8e, 0x46, 0x88, 0x5a, + 0x00, 0x2a, 0x9a, 0x05, 0x05, 0x1c, 0xe2, 0x57, 0xa2, 0x19, 0x42, 0xdf, 0xc6, 0x6a, 0xa6, 0x25, + 0x0a, 0xb9, 0x7d, 0x4b, 0x83, 0xc6, 0x9f, 0xa4, 0x24, 0xf4, 0x0a, 0x0d, 0xdf, 0x62, 0xfc, 0xe9, + 0xcf, 0x96, 0xa0, 0xbb, 0x49, 0xda, 0x47, 0x35, 0x6f, 0xfa, 0xd9, 0x4a, 0xf9, 0xd6, 0x35, 0x65, + 0x6f, 0x4a, 0x36, 0x5b, 0xf6, 0xd2, 0xaf, 0xd9, 0x96, 0xf1, 0xc5, 0x38, 0x37, 0x69, 0xdb, 0x80, + 0xff, 0x68, 0xd0, 0x7c, 0xc7, 0x08, 0x45, 0x4c, 0x76, 0x6a, 0x96, 0x92, 0x6b, 0x72, 0x06, 0x2e, + 0x63, 0x51, 0xca, 0x40, 0x0d, 0xfd, 0xaa, 0xa6, 0x54, 0x93, 0x3c, 0x65, 0x52, 0x90, 0x43, 0xe1, + 0xa7, 0x85, 0x5d, 0x84, 0x10, 0x45, 0xc3, 0xdc, 0x45, 0xcc, 0xb1, 0x76, 0xc3, 0x0c, 0x89, 0xb9, + 0x8f, 0x8e, 0x68, 0x4a, 0x08, 0x6d, 0x0b, 0x14, 0x64, 0x03, 0x79, 0x0e, 0x4d, 0x09, 0x3a, 0xd4, + 0x2b, 0x76, 0xf7, 0x85, 0xc4, 0x26, 0xf4, 0x0b, 0x89, 0xd1, 0xfd, 0x0b, 0x89, 0x63, 0x2f, 0x9e, + 0x33, 0xe9, 0x12, 0x5a, 0xe0, 0xf2, 0x85, 0xdf, 0xfc, 0xfa, 0xb5, 0xda, 0xb0, 0x3b, 0x68, 0x73, + 0xa0, 0xf0, 0x88, 0xe4, 0x7b, 0x1d, 0x91, 0x16, 0xf7, 0xd2, 0xf6, 0xf5, 0xe4, 0xff, 0x56, 0xc2, + 0xbc, 0xb3, 0xbf, 0x75, 0x02, 0x75, 0x53, 0xd7, 0x86, 0xdf, 0x30, 0x41, 0x32, 0x17, 0x56, 0x76, + 0x41, 0x2a, 0x34, 0xfd, 0xf2, 0x1c, 0x96, 0x86, 0xff, 0x46, 0x05, 0xe9, 0xef, 0x25, 0xe6, 0x38, + 0xff, 0x4d, 0x10, 0xa4, 0xa0, 0xa6, 0x3c, 0x8b, 0x36, 0x06, 0x0a, 0x8f, 0x48, 0x9e, 0xef, 0x88, + 0xb4, 0x9b, 0x23, 0xdf, 0x9f, 0x97, 0xa0, 0xbb, 0xe1, 0x91, 0xcc, 0xef, 0x44, 0xe8, 0xeb, 0x14, + 0xa1, 0x67, 0x51, 0x39, 0x5b, 0x8b, 0x71, 0x31, 0xa2, 0x09, 0xb5, 0x2d, 0x15, 0x72, 0x85, 0x45, + 0x60, 0xc4, 0xb7, 0x61, 0x16, 0xb8, 0x49, 0xdb, 0x9e, 0x13, 0xe3, 0x47, 0x4e, 0x39, 0x8b, 0x4c, + 0xa1, 0xe9, 0x36, 0x6c, 0x8f, 0xd1, 0xf2, 0xab, 0x89, 0x8c, 0xcb, 0x17, 0x6e, 0xa2, 0xc8, 0x14, + 0x1c, 0x91, 0x3c, 0xdf, 0x11, 0x69, 0x37, 0x91, 0xf9, 0xd3, 0x12, 0x21, 0xfb, 0xcd, 0xef, 0x04, + 0xe6, 0xdb, 0x2b, 0x30, 0x8d, 0x9a, 0xb2, 0x0d, 0xfd, 0x28, 0x50, 0x60, 0xb2, 0xe5, 0x39, 0xdc, + 0xb5, 0xea, 0x06, 0xc5, 0x65, 0xc0, 0x83, 0xe6, 0x3b, 0xf6, 0x7f, 0x13, 0x0e, 0x1a, 0x83, 0x96, + 0xdb, 0x8f, 0x7b, 0x1c, 0xa3, 0x7b, 0x9a, 0x43, 0xb4, 0x06, 0x20, 0x12, 0x3c, 0xda, 0x1c, 0x73, + 0x59, 0x14, 0xc0, 0x51, 0xf0, 0x4f, 0x2b, 0x46, 0xfc, 0x76, 0x79, 0x88, 0xaf, 0xc0, 0x9a, 0x57, + 0xd2, 0x6a, 0x32, 0x16, 0x6a, 0xde, 0x14, 0x8f, 0xa8, 0x9b, 0xc9, 0xb3, 0x6d, 0x26, 0x80, 0x3f, + 0x42, 0x33, 0x62, 0xf1, 0x88, 0x6a, 0x7d, 0x9f, 0xfe, 0x95, 0x84, 0x50, 0xec, 0x0f, 0xaf, 0xb2, + 0xdd, 0xa1, 0x55, 0x38, 0x3a, 0x1e, 0x67, 0x86, 0x86, 0x04, 0x5e, 0xa2, 0x81, 0x7d, 0x0b, 0x8e, + 0x9c, 0x11, 0x22, 0xf7, 0xc9, 0x27, 0x99, 0xc1, 0xae, 0xec, 0xa1, 0xab, 0x63, 0x1d, 0x7d, 0xd9, + 0xa3, 0x9f, 0x30, 0x9e, 0x12, 0x47, 0xe1, 0xff, 0xb3, 0x29, 0xe4, 0x8e, 0xd0, 0xa9, 0xaf, 0x5b, + 0xe3, 0x8d, 0xc8, 0x2a, 0xc1, 0x73, 0x92, 0x85, 0x12, 0x24, 0xbc, 0x34, 0xa7, 0x31, 0x94, 0x52, + 0x57, 0xaf, 0xca, 0x8d, 0x1c, 0xca, 0x9d, 0x30, 0x26, 0x06, 0x88, 0x00, 0xec, 0x64, 0xec, 0x33, + 0x67, 0xbd, 0xac, 0x36, 0x6e, 0x13, 0x5f, 0x93, 0x96, 0x3a, 0x67, 0x60, 0xf9, 0x9e, 0xda, 0x28, + 0x3c, 0xe9, 0xdb, 0x2a, 0x43, 0xe6, 0xaa, 0xfc, 0xd6, 0xf2, 0xbd, 0xd4, 0xb5, 0xd9, 0x1a, 0xab, + 0x17, 0x2e, 0x4f, 0xe1, 0x42, 0x28, 0x78, 0xdb, 0xcb, 0x96, 0xae, 0xb8, 0x51, 0x29, 0x48, 0x7f, + 0x97, 0xc9, 0x74, 0xe3, 0xea, 0x4e, 0x09, 0x4d, 0xdf, 0x18, 0x4a, 0x80, 0x23, 0x2d, 0x7e, 0x82, + 0xdf, 0x4c, 0x4b, 0xce, 0x0f, 0x00, 0x39, 0x28, 0x78, 0x3b, 0x53, 0x0f, 0x6a, 0xda, 0xc8, 0xfb, + 0x18, 0x9a, 0x21, 0x14, 0x4f, 0xea, 0x7d, 0xdf, 0x9f, 0x4e, 0x01, 0x4f, 0x9c, 0x50, 0x3a, 0xbc, + 0x1d, 0xa2, 0xc9, 0x6f, 0x56, 0xd3, 0xe9, 0x68, 0x8c, 0x9b, 0xb7, 0x10, 0x9a, 0x4e, 0x3c, 0x25, + 0x84, 0xc8, 0x21, 0x24, 0xe3, 0x95, 0x59, 0x2a, 0x3f, 0x04, 0x6f, 0x1d, 0xe0, 0xf0, 0x8b, 0x9e, + 0x2c, 0x36, 0x46, 0x5f, 0xad, 0x6a, 0x8c, 0xbe, 0xba, 0x2d, 0xa5, 0xa6, 0x97, 0x56, 0xfa, 0x72, + 0xef, 0xf7, 0xeb, 0x5d, 0xfb, 0x33, 0xc3, 0x9d, 0x20, 0x7e, 0x8d, 0xd1, 0x57, 0x83, 0x66, 0x7b, + 0xfc, 0x63, 0x34, 0x8d, 0xfc, 0x60, 0x71, 0x7a, 0x6b, 0xd6, 0x6a, 0x4a, 0x6d, 0x80, 0x95, 0xc9, + 0x8f, 0x8a, 0xdd, 0xd7, 0xd7, 0x2d, 0x61, 0x37, 0x87, 0x55, 0xf0, 0x07, 0x79, 0x67, 0xe0, 0xfc, + 0x0d, 0xd6, 0x05, 0xfe, 0x99, 0x84, 0x10, 0x68, 0x63, 0x62, 0x6b, 0xe0, 0xa5, 0xff, 0x1b, 0x92, + 0xa6, 0xfc, 0xab, 0x80, 0x50, 0x2e, 0x27, 0xcc, 0xbf, 0x61, 0x32, 0xc7, 0x3b, 0xf7, 0xe7, 0x46, + 0xfb, 0x0d, 0x2e, 0x21, 0x3e, 0x3d, 0xfa, 0x07, 0x87, 0x79, 0x14, 0x80, 0xcc, 0xe0, 0xfe, 0xcc, + 0xc8, 0x09, 0x38, 0xfc, 0xa3, 0xd7, 0x24, 0x5d, 0xed, 0xd9, 0xa3, 0x5d, 0x00, 0xb6, 0x24, 0x6f, + 0x34, 0xbe, 0x68, 0x62, 0x1b, 0x7b, 0x25, 0xbf, 0x6d, 0x7b, 0x3c, 0x95, 0xde, 0xd6, 0x1c, 0x4d, + 0xa5, 0x97, 0x06, 0x85, 0xaf, 0xb3, 0x57, 0x31, 0x05, 0xa7, 0x83, 0xc5, 0x0b, 0xe4, 0x03, 0xd3, + 0x77, 0x77, 0xea, 0xfd, 0x57, 0xe9, 0xed, 0xfa, 0x08, 0xf5, 0x37, 0x71, 0x68, 0x7d, 0x83, 0x4a, + 0x62, 0x95, 0x18, 0x9a, 0xc2, 0x90, 0x74, 0x08, 0xbd, 0x42, 0xcb, 0xe4, 0x72, 0x9a, 0x77, 0x6b, + 0x6f, 0x8f, 0xfe, 0xd6, 0x71, 0x1e, 0x8d, 0x02, 0x3f, 0x82, 0xca, 0xd4, 0x64, 0x32, 0x9e, 0xdc, + 0x98, 0x6a, 0x12, 0x63, 0x75, 0xf3, 0x42, 0xb9, 0xdc, 0xa2, 0x56, 0x78, 0x39, 0x5e, 0x8d, 0xa6, + 0x27, 0x01, 0xd1, 0xfa, 0x88, 0x78, 0x4b, 0x61, 0x96, 0xca, 0x65, 0x80, 0x6b, 0x7d, 0x5d, 0xd0, + 0x2c, 0xe4, 0xfe, 0xea, 0xa5, 0x93, 0xf5, 0x57, 0xb7, 0xf8, 0xe8, 0xd7, 0xa2, 0xe9, 0x9b, 0x09, + 0xc3, 0xc4, 0x5e, 0x8a, 0xe3, 0xbb, 0x6d, 0x7c, 0x2f, 0xb2, 0x6c, 0x45, 0x1e, 0xcb, 0x72, 0x56, + 0xf3, 0x9f, 0x29, 0x41, 0x77, 0x19, 0x73, 0x10, 0x7d, 0x95, 0xf9, 0xfa, 0x7e, 0x37, 0x6e, 0x3a, + 0xea, 0x7e, 0x2b, 0xa4, 0x29, 0x8a, 0xca, 0x42, 0xcd, 0xcd, 0x84, 0x54, 0x54, 0xff, 0x6f, 0xd4, + 0x94, 0x67, 0x02, 0xbc, 0x50, 0x7e, 0x12, 0xd8, 0x42, 0x14, 0x0b, 0x0b, 0x52, 0xcc, 0x7b, 0x9b, + 0x50, 0xbf, 0xe3, 0xfa, 0x48, 0x37, 0xf7, 0x1d, 0x23, 0x6f, 0xd7, 0x82, 0xbc, 0x27, 0x7c, 0x48, + 0xa2, 0x04, 0x13, 0xce, 0x26, 0x6c, 0x4f, 0x37, 0xf9, 0xa4, 0xd5, 0xfc, 0x48, 0x53, 0x7e, 0x10, + 0x30, 0x1b, 0xc8, 0x1b, 0xc7, 0xce, 0xbc, 0x41, 0x47, 0x21, 0x7c, 0xd0, 0x30, 0x32, 0xc2, 0x70, + 0xb2, 0x07, 0x2f, 0xe4, 0x86, 0x3b, 0x96, 0xd8, 0x31, 0x36, 0xa3, 0x91, 0x81, 0xaf, 0x79, 0xd0, + 0xec, 0xf9, 0xeb, 0x11, 0x56, 0xaf, 0x13, 0xa3, 0x7c, 0xbb, 0x25, 0x75, 0x9d, 0x45, 0x52, 0x27, + 0xf7, 0x80, 0xc2, 0x22, 0xac, 0x6b, 0x11, 0x49, 0x1c, 0xcb, 0x42, 0x92, 0xc4, 0x1b, 0xe1, 0x45, + 0x1c, 0xbb, 0x18, 0x61, 0xbf, 0xf1, 0x42, 0x84, 0x78, 0x9a, 0x4c, 0x90, 0x88, 0x92, 0xa0, 0x50, + 0xe2, 0xff, 0xbb, 0xa9, 0x68, 0xde, 0x3a, 0x35, 0xcd, 0xe6, 0xc0, 0xe8, 0x33, 0xf5, 0xad, 0x92, + 0xd6, 0x6d, 0xf0, 0x48, 0x9b, 0x1b, 0x3e, 0x87, 0xc3, 0x3d, 0x46, 0x48, 0x7a, 0xb8, 0xc7, 0xc0, + 0x65, 0x4c, 0x5f, 0x21, 0xc0, 0x2b, 0x66, 0x22, 0x26, 0xe6, 0xe1, 0x1e, 0x83, 0x32, 0x8c, 0xeb, + 0xcc, 0x94, 0x1a, 0x4a, 0x86, 0xb7, 0x1b, 0xbb, 0x41, 0x35, 0xc6, 0x32, 0xd8, 0xfe, 0x81, 0xa6, + 0xec, 0x0c, 0x58, 0x6b, 0xe4, 0xed, 0xd9, 0x73, 0x27, 0x73, 0x97, 0xde, 0xca, 0xf6, 0x1c, 0xcd, + 0x7d, 0xf6, 0x33, 0x10, 0x87, 0xeb, 0x23, 0x7b, 0x61, 0xd4, 0x7a, 0x4f, 0x77, 0xf6, 0xf0, 0x65, + 0x7d, 0xe0, 0x2a, 0xbc, 0x83, 0xa8, 0x6f, 0xa8, 0x82, 0x3f, 0xf4, 0x9e, 0xfd, 0x55, 0x62, 0x22, + 0x95, 0x2a, 0xf3, 0x61, 0x0b, 0xd9, 0x0d, 0x8e, 0x5d, 0x7b, 0x7f, 0xec, 0x64, 0xb7, 0xd8, 0xf1, + 0xf5, 0x91, 0xae, 0xa0, 0xf5, 0xc3, 0xb8, 0x5b, 0x22, 0x09, 0x7d, 0xda, 0x54, 0xca, 0x79, 0xf3, + 0x6d, 0x9c, 0x57, 0x1f, 0x4b, 0x3f, 0x24, 0x03, 0xeb, 0xbd, 0xa0, 0x29, 0x5b, 0x03, 0x00, 0x2e, + 0x6f, 0x84, 0x78, 0x7f, 0xd9, 0x0f, 0x4e, 0x66, 0x86, 0x2f, 0x5f, 0x1f, 0xe9, 0x23, 0xa5, 0xd7, + 0x47, 0xfa, 0x56, 0x64, 0x06, 0x87, 0x94, 0x26, 0x35, 0x96, 0xd6, 0x47, 0xde, 0xd4, 0x07, 0x07, + 0xaf, 0x8f, 0x74, 0xaf, 0x64, 0x25, 0x90, 0xd0, 0x86, 0xaf, 0x11, 0x48, 0xf2, 0xfa, 0xfd, 0x34, + 0x6c, 0x20, 0xf4, 0x8a, 0xd7, 0xa1, 0x52, 0x12, 0x12, 0x93, 0xdc, 0x8b, 0x97, 0xd4, 0xac, 0xd4, + 0x94, 0xe5, 0x01, 0x28, 0x91, 0xef, 0x87, 0x5d, 0xd5, 0xd8, 0xe7, 0x57, 0xf4, 0xb3, 0xfb, 0x32, + 0xa3, 0x86, 0xea, 0xe0, 0x5d, 0x71, 0x3d, 0xb9, 0x22, 0x08, 0xd0, 0xf8, 0x47, 0xa8, 0x2c, 0x11, + 0x6a, 0x52, 0x37, 0x47, 0x5f, 0x85, 0x1b, 0xf2, 0x52, 0x48, 0x5c, 0xc7, 0x0b, 0x65, 0x39, 0xbb, + 0xaf, 0xcb, 0xd0, 0x7f, 0xa4, 0x53, 0x08, 0x44, 0x77, 0x7d, 0xa4, 0x3b, 0x7b, 0xb4, 0x5d, 0x3f, + 0x75, 0xf6, 0xe1, 0x15, 0x2b, 0xec, 0x5d, 0xcb, 0x2b, 0x82, 0xbc, 0x75, 0xb5, 0xb1, 0x8d, 0x42, + 0xab, 0x03, 0x6e, 0x12, 0xc2, 0xe3, 0xe2, 0x83, 0x76, 0xed, 0xeb, 0xa0, 0x33, 0x06, 0x01, 0x79, + 0xff, 0x8d, 0x87, 0x3c, 0xd2, 0xcd, 0x6b, 0xf8, 0xed, 0xd6, 0x6f, 0xcf, 0x59, 0xf4, 0x9b, 0x2d, + 0xc1, 0x5d, 0x3e, 0x39, 0x5c, 0xe2, 0x10, 0x5a, 0x34, 0x5d, 0xb7, 0x84, 0xee, 0x74, 0x6a, 0x67, + 0xac, 0xea, 0x81, 0x89, 0x20, 0xb1, 0x0b, 0xe5, 0x08, 0xaf, 0xc0, 0x11, 0x34, 0x97, 0x04, 0xfb, + 0x4d, 0x3c, 0xfc, 0xe2, 0xe9, 0x50, 0x33, 0x44, 0x74, 0x0d, 0xc2, 0x0f, 0x5c, 0x59, 0x38, 0xcb, + 0x87, 0x61, 0x96, 0x8c, 0xef, 0xd1, 0xe1, 0xfc, 0x99, 0x84, 0xca, 0x58, 0x11, 0x9e, 0x8b, 0xa6, + 0x1a, 0xab, 0x59, 0xaa, 0x77, 0x4b, 0x82, 0xf4, 0x17, 0x49, 0x8a, 0x97, 0xa0, 0x4b, 0x23, 0x4f, + 0x34, 0x81, 0x31, 0x2a, 0x89, 0x26, 0xda, 0x56, 0xd3, 0xab, 0x67, 0xf2, 0xb7, 0x31, 0x50, 0x03, + 0x5a, 0x78, 0x74, 0xc0, 0x7f, 0x1b, 0x03, 0x35, 0xa5, 0x75, 0x26, 0x93, 0x9a, 0xb9, 0x3c, 0xc1, + 0x15, 0x7d, 0x6c, 0x40, 0xf3, 0x57, 0x3d, 0x8e, 0xa6, 0x93, 0x9d, 0xbe, 0x92, 0x54, 0x43, 0xf4, + 0x2a, 0x79, 0x81, 0x13, 0x16, 0xb5, 0x0c, 0x28, 0x68, 0xc2, 0xfb, 0x1f, 0x42, 0x33, 0x2d, 0x75, + 0x42, 0x42, 0xbf, 0x99, 0x6e, 0x09, 0xfd, 0xfc, 0x5f, 0x4e, 0x25, 0x7e, 0xac, 0xa2, 0xe5, 0xae, + 0x8f, 0xa4, 0x7e, 0x67, 0x3c, 0x7e, 0x67, 0x3c, 0x6e, 0x25, 0xe3, 0xf1, 0x7d, 0x9b, 0xf1, 0x20, + 0x4e, 0x2f, 0xa6, 0xf1, 0x58, 0xe6, 0x68, 0x3c, 0xc4, 0xee, 0x28, 0x00, 0x59, 0xe3, 0x0b, 0x76, + 0x83, 0xc6, 0xef, 0x98, 0x40, 0x46, 0xe4, 0x05, 0x8e, 0xe6, 0xa3, 0xbe, 0x8e, 0x1a, 0x90, 0x2f, + 0x3c, 0xe8, 0x1e, 0xd7, 0x1e, 0xbe, 0xdd, 0x76, 0xe4, 0xfb, 0x16, 0x3b, 0xf2, 0x60, 0x01, 0x3b, + 0x22, 0x52, 0xa5, 0x18, 0x73, 0xd2, 0x27, 0x91, 0x3c, 0xcc, 0x6e, 0xcd, 0xbf, 0x36, 0xab, 0xf2, + 0x90, 0xc5, 0xaa, 0xdc, 0xe3, 0xa4, 0x8f, 0xeb, 0xeb, 0x52, 0x4c, 0x7b, 0xd0, 0xc1, 0x6d, 0x46, + 0xb3, 0xf2, 0x2a, 0x5c, 0x4d, 0xcc, 0x12, 0x54, 0xd2, 0xa2, 0xf2, 0x57, 0xf9, 0x36, 0x2f, 0xd2, + 0x8d, 0xaa, 0xd1, 0xa9, 0x01, 0xe1, 0xff, 0x21, 0x2a, 0x31, 0x7e, 0xe1, 0x05, 0x08, 0x11, 0xbd, + 0xb6, 0x2d, 0xed, 0xb8, 0xa7, 0xbf, 0x0b, 0x95, 0x41, 0x75, 0x34, 0x7f, 0x53, 0x8f, 0xbd, 0x68, + 0x3a, 0x7f, 0x5d, 0x44, 0x6d, 0xd8, 0xb4, 0xc6, 0x1d, 0x35, 0xd1, 0x57, 0xeb, 0x23, 0xfe, 0xf6, + 0x29, 0x68, 0xee, 0x3a, 0x35, 0x6d, 0x0c, 0x3b, 0x05, 0xcf, 0x51, 0xbe, 0x5d, 0x26, 0xe0, 0x05, + 0x30, 0xd3, 0x82, 0x09, 0x98, 0x68, 0x2e, 0xc1, 0xe7, 0x91, 0xb7, 0x92, 0x67, 0xc2, 0x8c, 0xa5, + 0xd8, 0x7b, 0x38, 0x56, 0xc1, 0xb2, 0x15, 0xb8, 0x90, 0x4f, 0x5e, 0x9c, 0x3d, 0x71, 0x35, 0xbb, + 0xbf, 0x9f, 0x29, 0x85, 0x14, 0xdd, 0xc9, 0x1f, 0x1d, 0xd2, 0x8f, 0x9c, 0x1b, 0x1b, 0x38, 0x93, + 0xdd, 0xd5, 0x49, 0x63, 0x73, 0x5c, 0xf3, 0x90, 0x3d, 0x9c, 0xb5, 0x8f, 0x6f, 0xb7, 0x7e, 0xd8, + 0xc8, 0xf5, 0x83, 0x63, 0xb0, 0x0d, 0xb6, 0x40, 0xfb, 0x5e, 0x34, 0xbd, 0xdd, 0xe0, 0xfd, 0x89, + 0x94, 0xc2, 0xff, 0x27, 0xa1, 0xd9, 0xf9, 0x6d, 0xbe, 0x05, 0x8b, 0x3b, 0xae, 0x24, 0xca, 0x26, + 0x54, 0x12, 0x43, 0x25, 0x64, 0xb3, 0x42, 0xce, 0x92, 0x48, 0x77, 0xdb, 0xd5, 0xf0, 0x8e, 0x6f, + 0x95, 0x20, 0x3f, 0xcf, 0xe3, 0xcd, 0xc3, 0xf9, 0xf7, 0x13, 0x9a, 0x52, 0xcd, 0xe3, 0xcd, 0xaf, + 0xa8, 0x6f, 0x68, 0x5b, 0x05, 0xab, 0xb4, 0x4a, 0x1f, 0x5d, 0x52, 0x0d, 0x5c, 0xe5, 0x8b, 0x25, + 0x71, 0x99, 0xa4, 0x77, 0x5f, 0x1d, 0xef, 0xdc, 0xcf, 0x02, 0xd0, 0xe3, 0x17, 0x21, 0x63, 0x9e, + 0x70, 0x89, 0x4b, 0x02, 0xfe, 0xf3, 0x42, 0xd2, 0xf5, 0xea, 0x49, 0x75, 0xcd, 0xdb, 0xe2, 0x26, + 0x34, 0x6d, 0x87, 0xba, 0x93, 0xf4, 0x5d, 0x4a, 0xfa, 0x26, 0x27, 0x8d, 0xac, 0x4c, 0x7e, 0x4a, + 0xef, 0xbc, 0x34, 0xfe, 0x6e, 0xbf, 0x7e, 0xfe, 0x30, 0xeb, 0x7f, 0xec, 0xec, 0x87, 0xd9, 0x63, + 0x3d, 0xfa, 0x9e, 0x21, 0x73, 0x33, 0xda, 0xb3, 0xbf, 0x0a, 0x18, 0x37, 0x77, 0xbe, 0x8b, 0xc3, + 0xb3, 0x1b, 0x2d, 0xda, 0x53, 0xb5, 0xb1, 0xf0, 0x41, 0x8f, 0x04, 0x5c, 0x59, 0x40, 0x9e, 0x4f, + 0xf3, 0xca, 0x39, 0xee, 0x74, 0xaf, 0x7a, 0xc8, 0xa1, 0x6f, 0x7e, 0xcb, 0x6f, 0xb7, 0x0a, 0x5a, + 0x63, 0x51, 0x41, 0xae, 0xdb, 0xc6, 0x09, 0x54, 0x8f, 0x3c, 0xf8, 0x7f, 0x4a, 0xe8, 0xb6, 0x5a, + 0x68, 0xbb, 0x11, 0xda, 0xe2, 0x5f, 0x4a, 0x68, 0x26, 0x73, 0x1f, 0x24, 0x15, 0xd8, 0xa6, 0xe1, + 0x2c, 0xd5, 0x41, 0xf5, 0xa7, 0xde, 0x7b, 0x27, 0x80, 0x48, 0x25, 0xfc, 0x6d, 0x9a, 0xb2, 0x09, + 0xcf, 0x04, 0xc7, 0x43, 0x5a, 0xee, 0x7d, 0xc2, 0xf2, 0xf3, 0xfa, 0x48, 0x37, 0x4d, 0x74, 0x41, + 0x24, 0x18, 0xb2, 0x15, 0x8d, 0xbd, 0xf1, 0xee, 0xf8, 0x9b, 0x67, 0x68, 0x54, 0x11, 0xad, 0x3b, + 0xb7, 0xef, 0x93, 0xdc, 0xcf, 0xf7, 0xc1, 0xcf, 0x37, 0xff, 0x3a, 0xf3, 0x8e, 0xe7, 0x1e, 0xbf, + 0xb7, 0xca, 0xfa, 0xed, 0xaa, 0xb6, 0x95, 0xac, 0xa4, 0x5a, 0x0a, 0xe0, 0x76, 0x0f, 0x9a, 0x1b, + 0x54, 0xd3, 0xc9, 0x9d, 0x96, 0x21, 0x6d, 0x09, 0xa5, 0x76, 0x60, 0xdb, 0x4d, 0x9f, 0x1d, 0xce, + 0x40, 0xee, 0x81, 0x62, 0xc0, 0x52, 0x09, 0xff, 0x21, 0x49, 0x53, 0x7e, 0x88, 0xef, 0x1a, 0xdf, + 0xb3, 0x7f, 0x6c, 0xe0, 0xa0, 0x05, 0x33, 0x78, 0x04, 0xe4, 0x7d, 0x6a, 0x5c, 0xdb, 0x4b, 0x52, + 0x26, 0x19, 0x55, 0x14, 0xa5, 0x53, 0x17, 0xc7, 0x3e, 0x3b, 0x0d, 0x51, 0x57, 0x0c, 0xfc, 0xf7, + 0xec, 0xcf, 0x1e, 0xba, 0x90, 0x19, 0xdc, 0xa7, 0x1f, 0xe8, 0x15, 0xc1, 0xa0, 0x03, 0x82, 0xf0, + 0x4a, 0x7f, 0xa5, 0x3b, 0xc2, 0x55, 0xaf, 0xf1, 0xf7, 0xa7, 0xaf, 0x57, 0x25, 0x8d, 0x61, 0x1a, + 0x24, 0xf8, 0x53, 0x09, 0xdd, 0x49, 0xa4, 0x82, 0xa8, 0x69, 0xea, 0x3a, 0xf2, 0x52, 0xb4, 0x09, + 0xdb, 0x74, 0xb9, 0x59, 0x67, 0x20, 0xbe, 0xb0, 0x50, 0x75, 0x2a, 0xe1, 0x4f, 0x69, 0x4a, 0x0d, + 0xbe, 0x6b, 0x07, 0x2f, 0x84, 0x34, 0x6f, 0xd9, 0xf6, 0xb3, 0xd9, 0x0f, 0xdb, 0xb3, 0x9f, 0xef, + 0xf3, 0xde, 0x6f, 0x56, 0x8d, 0x5d, 0x3b, 0x96, 0x7d, 0xfb, 0x34, 0xc5, 0xd9, 0x0a, 0x46, 0xb0, + 0x5a, 0xe2, 0xbd, 0xcf, 0x11, 0xab, 0x78, 0x6b, 0xa4, 0xca, 0xec, 0xc5, 0x40, 0xe6, 0x4d, 0x0f, + 0x9a, 0xef, 0x84, 0x4c, 0x6d, 0x3c, 0x16, 0x53, 0xc3, 0x69, 0xbc, 0xc8, 0x7d, 0xd0, 0x14, 0xc4, + 0x40, 0xed, 0xfe, 0x22, 0xa0, 0x52, 0x09, 0xff, 0x41, 0x49, 0x53, 0x9e, 0xc1, 0x3e, 0x01, 0xc5, + 0xdd, 0x9d, 0x55, 0xfa, 0xa9, 0x43, 0xb9, 0xd1, 0xde, 0xb1, 0xfe, 0x6b, 0xe3, 0x87, 0xfb, 0x21, + 0x88, 0xbf, 0xf7, 0x01, 0x01, 0x53, 0x52, 0x4e, 0x31, 0xe5, 0xd0, 0x00, 0x47, 0x50, 0xad, 0xc1, + 0x4f, 0xbb, 0xa1, 0x9a, 0x32, 0xe6, 0x8f, 0x78, 0x4d, 0xbc, 0xce, 0x40, 0x52, 0x96, 0x29, 0x0d, + 0x53, 0x24, 0xff, 0x8b, 0x84, 0x66, 0xd6, 0xb7, 0x24, 0xe2, 0xc9, 0xb4, 0xab, 0x8c, 0x5a, 0xaa, + 0x1d, 0x65, 0x34, 0x0f, 0x22, 0x95, 0xf0, 0xbf, 0x23, 0x69, 0x4a, 0x04, 0xdf, 0xa5, 0x0f, 0x8c, + 0xe8, 0x9d, 0x34, 0xd6, 0x82, 0x95, 0x83, 0xd7, 0x89, 0x55, 0x80, 0xe3, 0x12, 0x6a, 0x55, 0x4e, + 0xf5, 0x65, 0x86, 0x7a, 0x29, 0xda, 0x04, 0x48, 0x7f, 0xeb, 0xf8, 0xd8, 0xae, 0xd1, 0x6a, 0x1f, + 0x7b, 0x1b, 0x2d, 0xcc, 0xe3, 0x52, 0x42, 0x88, 0x07, 0xfc, 0xf7, 0x16, 0xe0, 0xe4, 0x28, 0x19, + 0x9d, 0x31, 0xe3, 0xbb, 0x3d, 0x68, 0x26, 0x73, 0xc3, 0x74, 0x41, 0xd6, 0x52, 0xed, 0x88, 0x6c, + 0x1e, 0x44, 0x2a, 0xe1, 0x1f, 0x90, 0x34, 0xe5, 0x35, 0x3c, 0x13, 0x3c, 0x38, 0x99, 0x46, 0xfa, + 0x89, 0xe5, 0x27, 0xcf, 0x0d, 0x31, 0x36, 0x40, 0x63, 0x34, 0x66, 0x86, 0x3b, 0xe1, 0xf5, 0x08, + 0x75, 0xfc, 0x64, 0x00, 0x64, 0x5b, 0xde, 0x37, 0x76, 0xf6, 0x8c, 0x7e, 0xa0, 0x37, 0x33, 0x3c, + 0x9c, 0x19, 0x3d, 0x48, 0x55, 0x19, 0x79, 0x64, 0x92, 0xeb, 0xeb, 0x18, 0xdb, 0xf3, 0xb1, 0xfe, + 0xd6, 0x39, 0xbd, 0xfb, 0x90, 0xfe, 0xd6, 0xb9, 0xcc, 0xe8, 0xd1, 0x2f, 0xdb, 0xdf, 0x24, 0x34, + 0x78, 0xd0, 0xfb, 0x40, 0x71, 0xd2, 0x6c, 0x10, 0xa2, 0xdb, 0x83, 0x6e, 0x57, 0x22, 0x11, 0xb2, + 0x5d, 0xdc, 0x12, 0x67, 0xc4, 0xb0, 0xed, 0x08, 0x18, 0x08, 0xb5, 0x9e, 0x5e, 0x9f, 0x3b, 0x00, + 0x18, 0x49, 0xff, 0x25, 0x49, 0x53, 0x5e, 0xc5, 0x38, 0x33, 0xf8, 0x56, 0xf6, 0xd8, 0x65, 0x18, + 0x38, 0x1c, 0x1d, 0x79, 0x23, 0x90, 0x75, 0xb5, 0xbe, 0xe1, 0xfa, 0x48, 0x77, 0x6e, 0xf8, 0x08, + 0x9d, 0xdf, 0x9f, 0x1d, 0xd3, 0xdf, 0x3a, 0x01, 0x10, 0x4b, 0x32, 0x43, 0xbd, 0xb5, 0x5b, 0x37, + 0xd2, 0x50, 0xad, 0x5a, 0x77, 0x7d, 0x5d, 0xad, 0xe9, 0x85, 0x41, 0x0a, 0x97, 0x92, 0x98, 0xfc, + 0x94, 0x36, 0xb9, 0xf7, 0x07, 0xf5, 0xce, 0x4b, 0x9c, 0x18, 0xf0, 0xc6, 0x96, 0x50, 0x62, 0x85, + 0xff, 0xc1, 0x22, 0xf5, 0x5a, 0x2c, 0x1e, 0x51, 0x0d, 0x72, 0xfc, 0x57, 0x09, 0xcd, 0x05, 0x5f, + 0x43, 0x82, 0xcd, 0xda, 0x64, 0xbc, 0x85, 0xd1, 0xc4, 0x6f, 0x7f, 0xb8, 0xc9, 0xe1, 0x18, 0x59, + 0xee, 0x2b, 0x08, 0x43, 0x29, 0xb3, 0x47, 0xd2, 0x94, 0xe7, 0x0c, 0xca, 0xec, 0xcb, 0xa7, 0xcc, + 0xe3, 0x8c, 0x32, 0xfa, 0xd1, 0x0b, 0xfa, 0x07, 0xed, 0xb9, 0x91, 0x8f, 0xf4, 0xfe, 0xab, 0x00, + 0x61, 0x0c, 0x90, 0xad, 0xb6, 0x8c, 0xa5, 0x96, 0xd6, 0x9d, 0x47, 0x12, 0x82, 0xf0, 0xb2, 0xc0, + 0x64, 0x10, 0xc6, 0x83, 0x1e, 0x34, 0x9f, 0xdc, 0x76, 0xba, 0xa0, 0xbc, 0x3c, 0x1f, 0x1d, 0x01, + 0x98, 0xc2, 0x58, 0xd0, 0xaf, 0x2a, 0x1a, 0x9e, 0x92, 0xe2, 0x8a, 0xa4, 0x29, 0x2f, 0xe3, 0x8a, + 0x6c, 0xd7, 0xd5, 0xf1, 0x3d, 0x07, 0x1c, 0x08, 0xf2, 0xa2, 0x5b, 0xcd, 0x12, 0xbd, 0xbb, 0x33, + 0xbb, 0xef, 0x13, 0xea, 0xe6, 0xd3, 0xb5, 0xcf, 0x90, 0x00, 0x08, 0xf0, 0x78, 0xec, 0x32, 0x40, + 0x7c, 0xd9, 0xfe, 0x46, 0xad, 0xc2, 0xff, 0xcc, 0x23, 0x56, 0xee, 0x7c, 0x17, 0xe8, 0x8b, 0x47, + 0x02, 0x0f, 0xbb, 0x13, 0x2c, 0x65, 0xa3, 0x58, 0xaa, 0x6a, 0x59, 0x55, 0xa3, 0x81, 0x13, 0x1e, + 0x86, 0xc0, 0x07, 0x76, 0xff, 0xa1, 0x1a, 0x9e, 0x1e, 0xa5, 0xd2, 0xe1, 0x90, 0xc7, 0xd5, 0x77, + 0xcc, 0xbb, 0xac, 0x48, 0x68, 0x4a, 0xb9, 0x61, 0x49, 0x53, 0xfe, 0x15, 0xa6, 0x0f, 0x7a, 0x29, + 0x52, 0xc3, 0x1d, 0xb9, 0xbe, 0x8e, 0x3c, 0x4c, 0x41, 0xfe, 0xc0, 0x77, 0xc9, 0xbb, 0x11, 0xc0, + 0xb9, 0x1f, 0x1a, 0x38, 0x4d, 0x65, 0x86, 0x7a, 0xed, 0xed, 0xa0, 0x85, 0x6d, 0x03, 0x92, 0x56, + 0x63, 0x61, 0x35, 0x06, 0x7b, 0x33, 0x42, 0xc0, 0x55, 0x58, 0x76, 0x20, 0x20, 0x4f, 0x63, 0x97, + 0xaa, 0x7a, 0x4d, 0xf0, 0x7a, 0x7b, 0xbd, 0x0a, 0x12, 0xb4, 0xe0, 0x83, 0x1e, 0x88, 0x81, 0x47, + 0xb8, 0xa1, 0x3e, 0xc6, 0xf8, 0x6d, 0xa9, 0x53, 0xbe, 0x27, 0x2b, 0x0c, 0x23, 0x57, 0xa0, 0x18, + 0x50, 0x4a, 0xab, 0xb3, 0x92, 0xa6, 0xfc, 0x14, 0xfb, 0xe1, 0x6c, 0x92, 0xa9, 0xe1, 0xc1, 0x7d, + 0xd4, 0x91, 0x41, 0x08, 0x08, 0xed, 0x5d, 0x4f, 0x2f, 0xf8, 0x61, 0x81, 0xe4, 0x04, 0x72, 0x7d, + 0xa4, 0x5b, 0x3f, 0xf3, 0x66, 0xf6, 0xd8, 0xd1, 0xec, 0xf1, 0x1e, 0x38, 0x06, 0x86, 0xec, 0x3e, + 0x46, 0xf9, 0xde, 0x23, 0xfa, 0xb5, 0xd1, 0xdc, 0xc1, 0xd3, 0x63, 0x03, 0xa7, 0xf5, 0xf6, 0x11, + 0x10, 0x48, 0x3c, 0x29, 0x81, 0xfc, 0x88, 0xa6, 0xbc, 0xdc, 0x18, 0x22, 0xfc, 0x67, 0x52, 0xe6, + 0x41, 0x27, 0x74, 0xf3, 0xa1, 0x18, 0x6d, 0x2a, 0x8b, 0x03, 0xa6, 0xd4, 0xf9, 0x5c, 0xd2, 0x94, + 0xd7, 0xf1, 0x12, 0x67, 0xea, 0xb4, 0x90, 0x56, 0x16, 0x1a, 0x3d, 0xe7, 0x48, 0x23, 0x3b, 0xe0, + 0x24, 0x29, 0x55, 0x85, 0x97, 0x15, 0x49, 0x29, 0xf8, 0x14, 0xfe, 0xb9, 0x84, 0x66, 0x5a, 0x54, + 0x8b, 0xdd, 0x84, 0x5b, 0xaa, 0x1d, 0x4d, 0x78, 0x1e, 0x44, 0x2a, 0xe1, 0x7f, 0x5e, 0x53, 0x16, + 0x19, 0x7b, 0x8a, 0x13, 0xe3, 0x47, 0x4e, 0x31, 0x0b, 0x7e, 0x07, 0xfc, 0xcc, 0x75, 0x5d, 0xd5, + 0xfb, 0xfb, 0x68, 0x21, 0x2c, 0x31, 0x03, 0x45, 0x9a, 0x5a, 0x7c, 0x49, 0x42, 0x68, 0x9d, 0xca, + 0x97, 0x56, 0x0b, 0x1c, 0xa4, 0x5d, 0x18, 0xe7, 0xc2, 0x42, 0xd5, 0xa9, 0x84, 0xff, 0x25, 0x4d, + 0x79, 0x18, 0xcf, 0xb4, 0x4c, 0x99, 0x77, 0x91, 0x98, 0xd2, 0xbc, 0x96, 0x7d, 0x99, 0xfb, 0x42, + 0xc2, 0xb2, 0x02, 0x46, 0x8d, 0x8b, 0x1d, 0xf5, 0x1e, 0x2a, 0xa7, 0x0d, 0x10, 0x66, 0x89, 0x8d, + 0xfe, 0x7e, 0x27, 0x06, 0xb3, 0xc2, 0x38, 0x6e, 0x72, 0x9c, 0xc0, 0x52, 0x09, 0xff, 0x49, 0x49, + 0x53, 0x5e, 0xc2, 0x34, 0xa1, 0x7a, 0xf6, 0x78, 0x4f, 0x66, 0xf0, 0x63, 0x70, 0xe4, 0xcc, 0x0c, + 0xee, 0xcb, 0xf5, 0x75, 0x50, 0x50, 0xca, 0x7e, 0x4f, 0x50, 0xf6, 0x13, 0x00, 0xe8, 0x0a, 0x42, + 0xc8, 0x34, 0x9e, 0xef, 0xfc, 0xc3, 0x42, 0x2d, 0x83, 0xd2, 0x97, 0xf1, 0x0a, 0x07, 0xfc, 0x69, + 0x28, 0xa9, 0x54, 0xd5, 0x6b, 0x3c, 0xae, 0x99, 0xb9, 0x62, 0xc6, 0x1f, 0x7a, 0xd0, 0x0c, 0xf0, + 0x81, 0x06, 0x12, 0x2c, 0x74, 0xc2, 0x4d, 0xc0, 0xfd, 0x9e, 0x82, 0xf5, 0xa9, 0x84, 0xff, 0x0b, + 0x49, 0x53, 0x3e, 0x91, 0xf0, 0x1d, 0x96, 0x49, 0xa4, 0x38, 0xbe, 0x2b, 0xc1, 0x49, 0x29, 0xa5, + 0x08, 0x11, 0x1e, 0x38, 0xae, 0xb0, 0xc0, 0x89, 0x12, 0x36, 0x7e, 0xf2, 0x2a, 0xc0, 0x41, 0x78, + 0xad, 0x3c, 0x39, 0xcb, 0x9e, 0x3f, 0x05, 0xb5, 0x5f, 0xb6, 0xbf, 0x49, 0x9b, 0x80, 0x73, 0x23, + 0x29, 0x1c, 0x67, 0x29, 0xca, 0xa0, 0x89, 0x18, 0x80, 0x13, 0xc0, 0x84, 0xbd, 0xf1, 0xdd, 0xb8, + 0xc0, 0xde, 0x18, 0xff, 0x9d, 0x84, 0x6e, 0x27, 0x88, 0x92, 0x80, 0x26, 0x8c, 0x56, 0x8b, 0x1c, + 0x69, 0x21, 0x82, 0x38, 0x6e, 0x9f, 0x1c, 0xa0, 0x60, 0xcf, 0xff, 0x0c, 0xbe, 0x8b, 0x05, 0x11, + 0xfd, 0x44, 0xef, 0xbc, 0x68, 0xa5, 0xdd, 0x32, 0xb1, 0x8a, 0x6d, 0x0e, 0xdf, 0x12, 0x7f, 0x82, + 0xd5, 0x03, 0xdf, 0x60, 0x82, 0xd3, 0x7d, 0xd8, 0x69, 0xd3, 0x90, 0xda, 0x1e, 0x4a, 0xaa, 0x11, + 0xce, 0x00, 0x7f, 0x69, 0x6c, 0x78, 0xc9, 0xfe, 0x7c, 0x6b, 0x34, 0x99, 0x6e, 0x0d, 0x35, 0x33, + 0xec, 0x16, 0x3b, 0x9f, 0x53, 0x58, 0xa1, 0x0c, 0x04, 0x97, 0x14, 0x07, 0x98, 0x4a, 0xf8, 0x55, + 0x4d, 0xf9, 0x0e, 0xc6, 0xf4, 0xfd, 0xe9, 0x91, 0xbe, 0xec, 0xbe, 0xe3, 0x30, 0x72, 0xef, 0x03, + 0xf6, 0xb2, 0xca, 0xcc, 0x2f, 0x3e, 0xc8, 0x76, 0xbd, 0x97, 0x19, 0x7a, 0x7b, 0x7b, 0x3c, 0x95, + 0x16, 0x66, 0xca, 0xe7, 0x9f, 0xef, 0x80, 0x55, 0x9b, 0x70, 0x8c, 0xf1, 0xc7, 0x12, 0xba, 0x13, + 0x14, 0xe0, 0x44, 0x28, 0x39, 0x41, 0x39, 0xa2, 0xe4, 0x0c, 0x98, 0x4a, 0xf8, 0x7f, 0xa0, 0x29, + 0x4b, 0x0c, 0x94, 0xc8, 0x2b, 0x0d, 0x11, 0x25, 0x87, 0x32, 0x32, 0xfc, 0xa5, 0x81, 0xc5, 0x05, + 0x86, 0x6f, 0xd1, 0x52, 0xff, 0x49, 0x42, 0x77, 0xc1, 0x5e, 0xcc, 0xfa, 0xe1, 0xe7, 0x5a, 0xe3, + 0xe9, 0x90, 0x7d, 0x19, 0xe6, 0x0a, 0x6a, 0x60, 0xb4, 0x6c, 0x12, 0xd0, 0xa9, 0x84, 0x3f, 0x6c, + 0xa0, 0x45, 0x83, 0x38, 0x8c, 0x77, 0xee, 0x1f, 0xff, 0xd9, 0x07, 0xde, 0x0a, 0xfa, 0xdc, 0x51, + 0x40, 0x08, 0x6a, 0x40, 0xf7, 0x78, 0x97, 0x15, 0x89, 0x56, 0xd5, 0x4f, 0x8d, 0xaf, 0x18, 0xf3, + 0x74, 0x4e, 0x42, 0xd3, 0xd6, 0xa9, 0x64, 0x75, 0x83, 0x9d, 0x2c, 0x83, 0x90, 0xd2, 0xcd, 0xae, + 0x77, 0x78, 0x3d, 0x35, 0xf7, 0x3f, 0xd4, 0x94, 0x15, 0x18, 0x81, 0x90, 0x18, 0x15, 0x5e, 0xbf, + 0x68, 0x37, 0xea, 0x21, 0x3b, 0x9b, 0xb1, 0xb9, 0x84, 0xe5, 0xa3, 0x69, 0x35, 0x9c, 0xa5, 0xc4, + 0x58, 0xb6, 0x54, 0xbd, 0x46, 0x93, 0xba, 0xbd, 0x8e, 0xff, 0x49, 0x42, 0x33, 0xe8, 0x17, 0x21, + 0xe0, 0xa5, 0xcb, 0x70, 0x84, 0x68, 0x7c, 0xf6, 0x4d, 0x93, 0x05, 0x86, 0x0e, 0xfb, 0x3d, 0x49, + 0x53, 0x9a, 0xf0, 0x5c, 0x73, 0xdc, 0xe2, 0x85, 0x91, 0x77, 0x63, 0x21, 0x1c, 0x44, 0xc8, 0xca, + 0xcc, 0xe0, 0xf0, 0xd8, 0x99, 0x37, 0x60, 0xbf, 0xad, 0x0f, 0x5c, 0x35, 0x76, 0xe0, 0x5d, 0xfb, + 0x73, 0x3f, 0x1f, 0x00, 0x6f, 0x02, 0xe8, 0xa6, 0x80, 0x91, 0xb4, 0xa2, 0x5b, 0x15, 0x35, 0x70, + 0x3c, 0x27, 0xa1, 0xdb, 0x82, 0x6a, 0x38, 0x9e, 0x8c, 0x70, 0xb4, 0x1d, 0x4e, 0x01, 0xc5, 0x7a, + 0x86, 0xb9, 0xd7, 0x1e, 0xb0, 0x8e, 0x45, 0xd6, 0xf6, 0x6f, 0xd6, 0x94, 0xe5, 0xb8, 0x42, 0x1f, + 0x3d, 0xa8, 0x77, 0x9e, 0xb6, 0xe3, 0xe1, 0xc5, 0x62, 0x0d, 0xdc, 0xe7, 0x83, 0x7e, 0xf6, 0xcf, + 0x73, 0x19, 0xb6, 0xc1, 0x49, 0xff, 0x8f, 0x84, 0x90, 0x99, 0x82, 0x03, 0xbb, 0x9c, 0x68, 0x88, + 0xfc, 0xe4, 0x2f, 0x04, 0x42, 0xe7, 0xe6, 0x04, 0x39, 0xf5, 0x98, 0x0d, 0x7c, 0x6f, 0x7c, 0x8a, + 0x8e, 0xb1, 0x29, 0xbf, 0xe4, 0xd7, 0x79, 0xea, 0x71, 0xb7, 0xb7, 0x10, 0xe2, 0xff, 0x28, 0x21, + 0x4c, 0x4e, 0xf8, 0x60, 0x0a, 0x98, 0xa2, 0xb3, 0x9f, 0x31, 0x33, 0x98, 0x94, 0x2b, 0x01, 0x44, + 0x10, 0x4a, 0x80, 0x03, 0x92, 0xa6, 0xfc, 0x18, 0xdf, 0x6f, 0xee, 0xae, 0x68, 0x40, 0x19, 0x88, + 0x66, 0x73, 0xfe, 0x3d, 0xfd, 0xe8, 0xb9, 0xc6, 0x70, 0x8a, 0x2a, 0xbc, 0x47, 0x20, 0x3f, 0x07, + 0x9d, 0x39, 0x27, 0x90, 0xca, 0xf1, 0xf7, 0x3e, 0xcd, 0x9e, 0xff, 0xd9, 0xd8, 0xc0, 0x80, 0xfe, + 0xfe, 0xb1, 0xec, 0xbb, 0x97, 0x85, 0x0d, 0xbe, 0xf3, 0xf9, 0x16, 0xe1, 0x4a, 0x33, 0x3d, 0x88, + 0x14, 0xc0, 0x83, 0x12, 0x42, 0xb5, 0xf1, 0x64, 0x24, 0x1e, 0x73, 0x9e, 0x68, 0xb3, 0xce, 0x1d, + 0x4f, 0x01, 0x84, 0xe2, 0x19, 0xd6, 0x94, 0x47, 0xf0, 0x1c, 0xb6, 0xb1, 0xdc, 0xaf, 0x1f, 0x18, + 0x18, 0xbb, 0xb0, 0x4b, 0x1f, 0x3a, 0x93, 0x6d, 0x7f, 0xc3, 0xbb, 0x90, 0x32, 0x69, 0xff, 0x2f, + 0x72, 0xa3, 0xfd, 0x62, 0xa5, 0x70, 0x4c, 0x79, 0x9f, 0x77, 0xa1, 0xdb, 0xe8, 0xc3, 0xe4, 0x6b, + 0xc6, 0xd0, 0x87, 0x24, 0x54, 0xfe, 0x7c, 0x4c, 0x18, 0xbc, 0x4d, 0x3f, 0x88, 0xb5, 0x6c, 0xf8, + 0x8b, 0x0a, 0x03, 0x51, 0x04, 0xb6, 0x69, 0xca, 0x4a, 0x4c, 0x33, 0x0e, 0x59, 0x46, 0x3f, 0x5f, + 0x1c, 0xbd, 0xd3, 0xd0, 0xef, 0xf7, 0xfa, 0xdc, 0x86, 0xde, 0x1a, 0xb3, 0x0c, 0x7e, 0x3a, 0x4f, + 0x41, 0xe8, 0xb0, 0x21, 0xc9, 0xcb, 0xc0, 0xe9, 0xb0, 0x21, 0xc9, 0xcf, 0x5f, 0xe8, 0xdf, 0xae, + 0x29, 0x4f, 0xe0, 0x00, 0x8c, 0x8f, 0xe7, 0xc3, 0xac, 0xd4, 0x2f, 0xec, 0xe6, 0x1b, 0xfc, 0x5c, + 0x5f, 0x87, 0xaf, 0x21, 0x1e, 0xf1, 0x8d, 0x7f, 0x74, 0x71, 0xbc, 0xbd, 0xc7, 0x3b, 0x2b, 0x0f, + 0x96, 0x8c, 0xdf, 0xef, 0x5f, 0xe0, 0x36, 0xfe, 0x88, 0xf1, 0x49, 0x63, 0xf0, 0xc3, 0x12, 0x9a, + 0x9d, 0x9f, 0x4d, 0xca, 0xbe, 0x16, 0x70, 0xc9, 0x1e, 0x66, 0x5f, 0x0b, 0xb8, 0x25, 0xa6, 0xf2, + 0x6f, 0x21, 0x6b, 0x01, 0x4b, 0x46, 0x25, 0x92, 0xe5, 0xcc, 0xeb, 0x50, 0x36, 0x11, 0xdf, 0x40, + 0x46, 0x34, 0x63, 0xf4, 0x7f, 0x21, 0xa1, 0x39, 0x8e, 0xd9, 0xe0, 0xdc, 0x56, 0x00, 0xce, 0x19, + 0x01, 0xdd, 0x56, 0x00, 0x2e, 0x29, 0xe6, 0xfc, 0x2f, 0xd8, 0x91, 0x21, 0xd9, 0x0c, 0xbd, 0x0e, + 0x65, 0x05, 0xae, 0x25, 0x40, 0x84, 0x85, 0x47, 0x6a, 0xb6, 0xf9, 0x80, 0x84, 0x49, 0x85, 0xe6, + 0xc3, 0x92, 0x20, 0xab, 0xd0, 0x7c, 0x58, 0x73, 0x2f, 0x39, 0xcd, 0x07, 0xc9, 0xc6, 0xe5, 0x75, + 0x28, 0x9b, 0x68, 0x3e, 0x20, 0x75, 0x93, 0x31, 0xfa, 0x7f, 0x06, 0x37, 0x57, 0xaa, 0x6a, 0x6b, + 0x93, 0x6a, 0x44, 0x8d, 0xa5, 0xa3, 0xa1, 0x66, 0x3b, 0x06, 0x4e, 0x50, 0x8e, 0xab, 0x4b, 0x67, + 0xc0, 0x54, 0xc2, 0xdf, 0x2b, 0x69, 0xca, 0x56, 0xbc, 0xc0, 0xb2, 0x97, 0x32, 0x41, 0xc0, 0x70, + 0x7a, 0x1f, 0xa6, 0x9b, 0xaa, 0x03, 0x3d, 0x99, 0x5f, 0xbc, 0x9f, 0xeb, 0xeb, 0x80, 0x87, 0xcf, + 0xeb, 0xd5, 0x9d, 0x05, 0x9b, 0x15, 0xd8, 0x31, 0xd2, 0x92, 0x30, 0x6f, 0x51, 0xf5, 0x5a, 0x8a, + 0xf5, 0xf9, 0x3a, 0xfe, 0x3f, 0x78, 0xf2, 0x32, 0x3b, 0x09, 0x02, 0x05, 0xaf, 0x12, 0xac, 0x54, + 0x78, 0xb0, 0x68, 0xd8, 0x54, 0xc2, 0xff, 0x07, 0x9a, 0xf2, 0x24, 0x5e, 0x60, 0xb9, 0x70, 0xb0, + 0xd1, 0x61, 0x01, 0x2c, 0x93, 0x5c, 0x80, 0x08, 0xbe, 0x0f, 0x7b, 0x27, 0x8d, 0xaf, 0x31, 0xe5, + 0xff, 0x59, 0x42, 0xf3, 0x2c, 0x27, 0x2a, 0x85, 0x50, 0x76, 0x01, 0x74, 0x44, 0xd9, 0x15, 0x36, + 0x95, 0xf0, 0xb7, 0x68, 0x8a, 0x8c, 0xe7, 0x59, 0x0e, 0x6c, 0x4c, 0x08, 0xaf, 0x5b, 0x05, 0x4c, + 0x6b, 0x60, 0xf2, 0xd3, 0xfa, 0x8f, 0x12, 0xcd, 0xb7, 0x61, 0xc3, 0x70, 0x49, 0x81, 0x2d, 0xbf, + 0x15, 0xbf, 0xa5, 0x45, 0x42, 0xa6, 0x12, 0xfe, 0xff, 0x45, 0x53, 0x1a, 0x5c, 0x19, 0x9b, 0x6e, + 0x79, 0xab, 0xec, 0xa7, 0x05, 0x05, 0x1b, 0xc0, 0x4a, 0x02, 0x2f, 0x2a, 0x06, 0x77, 0xfc, 0x67, + 0x12, 0x9a, 0x53, 0x1f, 0x8b, 0xa6, 0xd7, 0xaa, 0x11, 0x9a, 0xf1, 0x8d, 0x2d, 0x9e, 0x6c, 0xf8, + 0x3a, 0x82, 0x39, 0xe2, 0xeb, 0x02, 0x99, 0x4a, 0x18, 0x16, 0x7a, 0x05, 0x9e, 0xab, 0xef, 0xfd, + 0x40, 0x3f, 0xbb, 0x4f, 0xef, 0x3e, 0x04, 0x57, 0xf5, 0xec, 0x88, 0xcb, 0xa5, 0xbc, 0xc0, 0xca, + 0x28, 0x1a, 0x8b, 0xa6, 0x5f, 0xe2, 0xbb, 0x78, 0x83, 0x47, 0xff, 0x83, 0x84, 0xee, 0x50, 0x22, + 0x11, 0xfa, 0x75, 0x35, 0xc2, 0xb0, 0x79, 0xc0, 0xe1, 0x46, 0x2b, 0x1f, 0xc8, 0xc0, 0x65, 0x71, + 0x51, 0x70, 0xa9, 0x84, 0x3f, 0x49, 0x44, 0x51, 0xbf, 0xb0, 0x9b, 0x9d, 0x4f, 0xbc, 0x75, 0xc2, + 0x58, 0xb0, 0x5b, 0x10, 0x2a, 0x5c, 0x0d, 0xb7, 0x79, 0x7e, 0xa7, 0x7d, 0x48, 0x28, 0x12, 0x79, + 0x89, 0x7d, 0x54, 0x40, 0xee, 0x13, 0x09, 0xcd, 0x10, 0xc2, 0x34, 0xd9, 0xb7, 0x5f, 0x42, 0xa5, + 0xeb, 0xf6, 0xcb, 0x02, 0x63, 0x9a, 0x88, 0xe5, 0x78, 0x16, 0x0f, 0xf1, 0x04, 0x91, 0x42, 0xbd, + 0xf3, 0xf3, 0x0a, 0x68, 0xf8, 0x3b, 0x73, 0xcf, 0xb8, 0xc0, 0x5f, 0xe1, 0x76, 0x2f, 0x6d, 0x0c, + 0xf7, 0x82, 0x84, 0x66, 0x08, 0xc1, 0x70, 0xb0, 0xdf, 0x4d, 0xd5, 0x15, 0x1a, 0xae, 0x05, 0x86, + 0x0e, 0xf7, 0xfb, 0x86, 0x45, 0x9b, 0xc5, 0x03, 0xe9, 0xd0, 0xe1, 0xce, 0xc9, 0x2b, 0x10, 0x06, + 0xba, 0xd8, 0xeb, 0x77, 0xf5, 0x15, 0xe0, 0xf7, 0xe7, 0xc6, 0x90, 0xaf, 0x48, 0x68, 0x86, 0x10, + 0x8c, 0xc4, 0xed, 0x56, 0xb0, 0xf0, 0x90, 0x2d, 0x30, 0xe6, 0xd2, 0x54, 0xc6, 0xb7, 0x33, 0x6d, + 0x15, 0x6f, 0x8d, 0xd0, 0x41, 0x2f, 0x10, 0xcf, 0x9e, 0xc3, 0x66, 0x85, 0x30, 0xf8, 0x45, 0x81, + 0x22, 0x06, 0x8f, 0x3f, 0x96, 0x50, 0x19, 0x31, 0xa0, 0xc6, 0xb0, 0xef, 0x71, 0x34, 0xad, 0xc2, + 0x98, 0x7d, 0xee, 0x00, 0x74, 0xc0, 0x2f, 0x1a, 0x2c, 0x31, 0x83, 0x29, 0x9a, 0x78, 0x6b, 0xc4, + 0x7b, 0x8f, 0xb8, 0x0b, 0xa7, 0xdf, 0xb5, 0x0f, 0x16, 0x17, 0x33, 0xd8, 0xe3, 0x1e, 0x34, 0x9d, + 0x87, 0x9c, 0xb0, 0xaf, 0xa3, 0x79, 0x95, 0xeb, 0x3a, 0x5a, 0x80, 0xa0, 0xe3, 0xfd, 0xa5, 0xa4, + 0x29, 0xe7, 0x24, 0x7c, 0xbb, 0x30, 0x62, 0xaa, 0x3f, 0xb5, 0x02, 0xc7, 0xad, 0x1c, 0xea, 0x66, + 0x1c, 0xb6, 0x7a, 0xb1, 0xab, 0xf8, 0x18, 0x3b, 0xbc, 0xdb, 0x04, 0x49, 0xdd, 0xda, 0x50, 0x6b, + 0x3f, 0x75, 0xb0, 0xd6, 0x33, 0x5a, 0x3d, 0x30, 0x11, 0x18, 0x25, 0xd8, 0xf7, 0x8c, 0x09, 0xc6, + 0x5c, 0xc4, 0xb7, 0x36, 0xd4, 0xd2, 0x7d, 0x7d, 0x85, 0x58, 0x66, 0x93, 0x79, 0xe7, 0x73, 0x47, + 0x32, 0xe8, 0xb6, 0x44, 0xd8, 0x90, 0xa1, 0x5f, 0x48, 0xe8, 0x36, 0x41, 0x6a, 0x1d, 0x87, 0x6e, + 0xad, 0x77, 0x1d, 0x7a, 0x3e, 0x18, 0x1d, 0xfa, 0x8f, 0x34, 0xc5, 0xcf, 0x8e, 0xe5, 0x32, 0x43, + 0xbd, 0x6d, 0x89, 0x30, 0x5b, 0xcb, 0xc2, 0x2f, 0x61, 0xb8, 0xce, 0x07, 0x72, 0x6c, 0xb8, 0x82, + 0xf3, 0xcc, 0x6b, 0x6d, 0x89, 0x30, 0x55, 0x02, 0x7f, 0x26, 0xa1, 0xdb, 0x04, 0x19, 0x76, 0x44, + 0xc0, 0x5a, 0xef, 0x8a, 0x40, 0x3e, 0x18, 0x45, 0xa0, 0x59, 0x53, 0x56, 0xe1, 0x39, 0x82, 0x36, + 0xf0, 0xf1, 0x51, 0x7b, 0xe7, 0xdb, 0x34, 0x82, 0xcf, 0x8a, 0x52, 0x55, 0x60, 0x72, 0x28, 0xe1, + 0x4b, 0x1e, 0x54, 0xce, 0x05, 0xc6, 0xc0, 0xe6, 0x3e, 0x57, 0x71, 0x12, 0x70, 0x59, 0x54, 0x18, + 0x88, 0x62, 0xf2, 0xb7, 0x92, 0xa6, 0x5c, 0x90, 0xf0, 0x1c, 0x41, 0xec, 0x7c, 0x5b, 0x1b, 0x6a, + 0xa9, 0xe8, 0x1d, 0x2a, 0x2c, 0x7a, 0x26, 0xe4, 0xcd, 0x10, 0xbf, 0x05, 0xb8, 0x10, 0x27, 0xe3, + 0x2f, 0x25, 0x34, 0x5b, 0x50, 0x33, 0x4d, 0x64, 0xaf, 0xb9, 0xb8, 0x80, 0x22, 0x6a, 0x12, 0xb7, + 0x99, 0x4b, 0x26, 0x06, 0xa4, 0x14, 0xfc, 0x03, 0x4d, 0xa9, 0xc7, 0x15, 0x22, 0xfd, 0x92, 0x04, + 0x82, 0x5f, 0x78, 0x10, 0x0a, 0xd2, 0x49, 0xe5, 0x6f, 0xf4, 0xf5, 0x8b, 0xc7, 0x58, 0x04, 0x5a, + 0xfd, 0xe8, 0x05, 0xfd, 0xf8, 0x71, 0x81, 0x41, 0x02, 0x78, 0x89, 0x1b, 0x62, 0xd0, 0xb5, 0xa0, + 0x89, 0xff, 0x08, 0x2e, 0x2e, 0xb7, 0x36, 0xd4, 0xd6, 0x46, 0x23, 0x0e, 0x27, 0x66, 0x66, 0x9d, + 0xeb, 0x49, 0x92, 0x08, 0x62, 0xf2, 0xf7, 0x53, 0xf8, 0x4e, 0xc0, 0xa9, 0x2d, 0x11, 0xf6, 0x85, + 0xa3, 0x11, 0x76, 0x81, 0x43, 0x5f, 0x09, 0x10, 0xd6, 0x14, 0xb1, 0x69, 0x4b, 0x84, 0x73, 0x7d, + 0x1d, 0x06, 0xe0, 0x84, 0xd6, 0xa4, 0x2d, 0x11, 0x36, 0xe0, 0x38, 0x7f, 0xff, 0xb9, 0x84, 0x66, + 0x81, 0x92, 0xdb, 0xc4, 0x9c, 0x11, 0xb0, 0x8b, 0x16, 0xe4, 0x00, 0x0c, 0x9b, 0xc5, 0x13, 0xc2, + 0x51, 0x94, 0x7e, 0xa2, 0x29, 0x4f, 0xb3, 0x25, 0x12, 0x77, 0xc8, 0xf0, 0x2e, 0xcb, 0x2b, 0x00, + 0xb7, 0xef, 0xeb, 0x23, 0xdd, 0xf4, 0x08, 0x7a, 0xe4, 0x6a, 0xb6, 0xfd, 0x6c, 0x66, 0x64, 0x30, + 0x37, 0xf2, 0x11, 0x3b, 0xc9, 0xbc, 0xd7, 0x7f, 0x77, 0x21, 0x97, 0x0a, 0x43, 0x01, 0xfd, 0x1b, + 0x09, 0xcd, 0x32, 0xb7, 0xf3, 0x2e, 0x08, 0xe5, 0x01, 0xb8, 0x22, 0x64, 0x83, 0xa3, 0x08, 0xfd, + 0x58, 0x58, 0x44, 0xf1, 0x5a, 0xb6, 0x88, 0xe2, 0x05, 0xa2, 0xde, 0xf1, 0x06, 0x0a, 0x0d, 0xdc, + 0xea, 0x0a, 0x42, 0xd0, 0xf0, 0xa0, 0x59, 0xa6, 0xeb, 0x91, 0x0b, 0x1a, 0x79, 0x00, 0xae, 0x68, + 0xd8, 0xe0, 0x28, 0x1a, 0x7f, 0x2f, 0x69, 0xca, 0x47, 0x92, 0x31, 0x33, 0x86, 0xd6, 0x34, 0x11, + 0x39, 0x28, 0x89, 0x7a, 0x94, 0x97, 0x1b, 0x5a, 0x63, 0xf4, 0x1d, 0xfe, 0x33, 0x7b, 0xb4, 0x2b, + 0x77, 0xf0, 0x88, 0x7e, 0xfe, 0xbd, 0x5c, 0x5f, 0x87, 0x51, 0x98, 0x3d, 0x7c, 0x19, 0x0e, 0xa9, + 0xf5, 0xce, 0x37, 0xc6, 0xfa, 0x07, 0x73, 0xef, 0x7f, 0x96, 0x7d, 0xfb, 0x34, 0x74, 0xc4, 0xf5, + 0xcd, 0xd8, 0x99, 0x37, 0xa0, 0x24, 0x7b, 0xb4, 0xcb, 0x68, 0xc3, 0x6f, 0x22, 0x72, 0xc3, 0x1d, + 0xe4, 0x08, 0xfc, 0x0a, 0x3d, 0x67, 0x1c, 0x19, 0xd2, 0xf7, 0x5e, 0xa6, 0xa0, 0x4c, 0x65, 0x11, + 0x4a, 0x56, 0x06, 0x26, 0x41, 0x49, 0xfc, 0x87, 0x12, 0x2a, 0xa7, 0x77, 0x26, 0x40, 0x43, 0xb7, + 0x1b, 0x15, 0x0b, 0x01, 0x17, 0x15, 0x06, 0xa2, 0xd4, 0x53, 0x8d, 0xfd, 0xd8, 0x2c, 0xf3, 0xda, + 0x05, 0x68, 0xb7, 0x40, 0x5c, 0xe9, 0x6d, 0x32, 0xc7, 0x22, 0x30, 0x43, 0x25, 0x9e, 0x0c, 0x0a, + 0xff, 0x28, 0x81, 0xe3, 0x8b, 0xe0, 0x25, 0x06, 0xa8, 0x3c, 0x58, 0x60, 0xab, 0x6c, 0x43, 0xa9, + 0xb2, 0x38, 0x60, 0x8a, 0xda, 0xab, 0x9a, 0xf2, 0x04, 0x5e, 0x28, 0x7a, 0xb3, 0xd0, 0x39, 0x26, + 0x60, 0x54, 0x1b, 0xd1, 0x28, 0x50, 0xa2, 0xef, 0x59, 0xf6, 0xe2, 0x09, 0x61, 0x1f, 0xed, 0xec, + 0x00, 0xe5, 0xea, 0x41, 0x06, 0x5e, 0x51, 0xf8, 0x8a, 0x07, 0xcd, 0x64, 0x1e, 0x4b, 0x80, 0xe8, + 0x22, 0x37, 0x87, 0x26, 0x0b, 0x86, 0xf7, 0x4f, 0x00, 0x45, 0x51, 0xfb, 0x3b, 0x8b, 0xd1, 0xcd, + 0xc7, 0xc9, 0xdd, 0xe8, 0xe6, 0x41, 0xde, 0x0c, 0xa3, 0xbb, 0x10, 0x17, 0xd4, 0x7e, 0xf8, 0xff, + 0x92, 0xd0, 0xec, 0x8d, 0xf1, 0x36, 0x95, 0x7a, 0xac, 0x02, 0xf1, 0x6c, 0xca, 0x20, 0x1f, 0xc2, + 0xd5, 0xea, 0xda, 0x01, 0x29, 0x09, 0xbb, 0x25, 0x4d, 0x79, 0x96, 0x5d, 0x76, 0xe4, 0xce, 0x0e, + 0x9b, 0x97, 0x6d, 0x17, 0x4f, 0x78, 0x57, 0xeb, 0x17, 0x76, 0x53, 0xdf, 0x82, 0x2b, 0x9f, 0x1a, + 0x2a, 0x82, 0x4b, 0xb8, 0x00, 0x68, 0x68, 0x7b, 0xf2, 0x16, 0x26, 0x37, 0x74, 0x29, 0xd7, 0x7f, + 0x92, 0xc9, 0xf6, 0x2a, 0x7f, 0x55, 0xf1, 0x82, 0xc1, 0x2f, 0xb0, 0x7a, 0x3d, 0xe8, 0xce, 0xa0, + 0xda, 0xc2, 0x46, 0xbb, 0x36, 0x19, 0x6f, 0x71, 0x11, 0x10, 0x27, 0x28, 0x57, 0x01, 0x71, 0x06, + 0xa6, 0x24, 0xf8, 0x80, 0x5c, 0x6b, 0xcd, 0x31, 0xbd, 0x0b, 0xcf, 0x0e, 0x8f, 0x1f, 0x61, 0xae, + 0x99, 0xeb, 0xac, 0xbe, 0xaa, 0x99, 0xe1, 0xb7, 0x39, 0x5c, 0x66, 0xf0, 0x3c, 0x80, 0x1a, 0x9a, + 0x72, 0x74, 0x77, 0xf6, 0xbd, 0x81, 0xb1, 0x01, 0x4a, 0x93, 0xcc, 0xf0, 0xfe, 0x5c, 0xc7, 0x65, + 0xfd, 0xe8, 0x39, 0xe6, 0x3e, 0x76, 0x1e, 0x68, 0x12, 0xb8, 0x11, 0x9a, 0xfc, 0x6a, 0x0a, 0xba, + 0xbd, 0xb6, 0x59, 0x0d, 0xc5, 0xa8, 0xdf, 0x1f, 0x10, 0xc4, 0xee, 0x66, 0x91, 0x0f, 0xc2, 0xa8, + 0xb1, 0xb4, 0x08, 0x48, 0x76, 0xc3, 0x37, 0x45, 0x53, 0x7e, 0xe9, 0xc1, 0xf3, 0xc5, 0x0b, 0x39, + 0x8a, 0x29, 0x9b, 0x7a, 0xef, 0x27, 0x9e, 0x22, 0x49, 0x72, 0xf5, 0x78, 0x66, 0xf8, 0x6d, 0x4e, + 0x00, 0x5e, 0xae, 0x5f, 0xbd, 0x9c, 0x1d, 0xec, 0xcc, 0xf5, 0xec, 0xa6, 0x59, 0xea, 0x85, 0x4f, + 0x7d, 0xd9, 0xfe, 0xa6, 0x79, 0x71, 0x3a, 0x38, 0xa4, 0x8f, 0xbc, 0x99, 0x3d, 0x4f, 0x7f, 0x1a, + 0x0d, 0x47, 0xdf, 0xe1, 0xb5, 0xf0, 0xdc, 0x9c, 0x86, 0x73, 0x04, 0x5b, 0x35, 0xdc, 0x39, 0xb6, + 0x6b, 0x34, 0x77, 0xb2, 0xdf, 0x90, 0x39, 0xd2, 0x3f, 0x38, 0xde, 0x03, 0x24, 0x2c, 0x4f, 0xc0, + 0xa4, 0x8d, 0xed, 0x1a, 0xcd, 0x5c, 0xfb, 0x60, 0x6c, 0xe0, 0x0d, 0xca, 0xe8, 0x04, 0x58, 0xbf, + 0xf2, 0x69, 0x6e, 0xf8, 0x80, 0xde, 0xdf, 0x9d, 0xdd, 0xdb, 0xc3, 0xf5, 0x01, 0x64, 0xf2, 0x85, + 0x3e, 0xc7, 0xae, 0xbd, 0xaf, 0x0f, 0x9d, 0xb9, 0x3e, 0xd2, 0x0d, 0x85, 0xe3, 0xed, 0x7d, 0x63, + 0xd7, 0xf6, 0xd0, 0x77, 0x41, 0x7d, 0x1d, 0x5b, 0x42, 0xa9, 0x1d, 0x20, 0x05, 0x63, 0x03, 0x67, + 0x72, 0xc3, 0xbb, 0x41, 0xea, 0x99, 0x2c, 0x3c, 0x16, 0x58, 0x35, 0x89, 0x79, 0x27, 0x65, 0x6c, + 0xf2, 0x3f, 0x29, 0x41, 0x77, 0xd8, 0xe6, 0x6b, 0xab, 0x6c, 0x3f, 0x67, 0x76, 0x00, 0x62, 0x0c, + 0xf0, 0x60, 0x51, 0xb0, 0xcc, 0xe3, 0x76, 0x8a, 0xa6, 0xfc, 0xbf, 0x1e, 0xfc, 0x4c, 0x01, 0x16, + 0x20, 0xfc, 0x7e, 0x2d, 0xf7, 0xee, 0xb9, 0x9f, 0xb6, 0xaa, 0xc9, 0x9d, 0x34, 0xf8, 0x35, 0xe1, + 0x09, 0x9a, 0xfa, 0x98, 0x50, 0xf4, 0x77, 0x1c, 0xf3, 0x15, 0x38, 0x66, 0xb5, 0x03, 0xc7, 0xc8, + 0x13, 0x73, 0x0c, 0xfe, 0x1b, 0xba, 0x59, 0xb3, 0xa8, 0x8a, 0xa2, 0xd6, 0x49, 0x4b, 0x0a, 0x78, + 0x1a, 0x5b, 0x95, 0x44, 0x4a, 0x53, 0x1e, 0xc3, 0xb3, 0x61, 0xbc, 0xc6, 0x47, 0xa9, 0xb9, 0xa5, + 0x8e, 0x8d, 0xc4, 0xd3, 0xfa, 0x6d, 0xae, 0x09, 0xc1, 0x5b, 0x7b, 0x13, 0x07, 0x83, 0x87, 0x58, + 0x78, 0xb2, 0x7a, 0x10, 0xff, 0x83, 0x64, 0x71, 0xa5, 0x66, 0x62, 0xb0, 0x74, 0xa2, 0x51, 0x9b, + 0x52, 0x10, 0x28, 0x06, 0xf4, 0xd7, 0x8a, 0xa2, 0x3c, 0x01, 0x8a, 0x53, 0xd0, 0x5c, 0xd8, 0xa4, + 0x90, 0xf2, 0x3a, 0x35, 0x15, 0x4d, 0xaa, 0xc4, 0x99, 0x06, 0xbb, 0x5c, 0xd6, 0xe6, 0xc3, 0x31, + 0x54, 0x97, 0x17, 0x0b, 0x4e, 0xd1, 0xcd, 0x7a, 0x34, 0xe5, 0xa4, 0x07, 0xcf, 0x83, 0x3d, 0x8f, + 0x00, 0x41, 0x8f, 0x62, 0x3a, 0x3d, 0xf9, 0xbb, 0xa1, 0xc1, 0xf3, 0x36, 0x28, 0xea, 0xf5, 0x02, + 0xc7, 0x4f, 0x23, 0x7d, 0xfa, 0xc0, 0xc8, 0xd8, 0x9e, 0xcf, 0x78, 0x0b, 0xca, 0xfd, 0x44, 0x80, + 0x8d, 0x95, 0xe5, 0xc8, 0x41, 0xbd, 0xf3, 0x34, 0x7d, 0x13, 0x4f, 0xa4, 0x80, 0xdf, 0x79, 0xe8, + 0x57, 0x2f, 0xc3, 0x25, 0x01, 0x28, 0x02, 0x51, 0xc2, 0x61, 0x3f, 0x91, 0xeb, 0xeb, 0x88, 0x98, + 0x1f, 0xd7, 0x0f, 0x7c, 0x3c, 0xb6, 0x6b, 0x34, 0x3b, 0xf0, 0x2e, 0xe4, 0xb5, 0x1d, 0x3b, 0x4b, + 0x22, 0x5e, 0x9e, 0x3a, 0xcb, 0x25, 0x37, 0x3b, 0xf0, 0x6e, 0xe6, 0xea, 0x3e, 0xbd, 0x6b, 0xbf, + 0x7e, 0xe1, 0xc0, 0xf5, 0x91, 0xf7, 0xcd, 0xbd, 0xcb, 0x9e, 0x03, 0xfa, 0x85, 0x03, 0xe2, 0x14, + 0x42, 0xdb, 0xb1, 0x81, 0x2b, 0xa0, 0xdd, 0x6c, 0x5a, 0x92, 0x4c, 0xec, 0xe3, 0xfe, 0xd5, 0x93, + 0xe0, 0x5d, 0x3a, 0x50, 0xa6, 0xcd, 0x87, 0x3c, 0x4e, 0x53, 0x4c, 0xa2, 0x51, 0x14, 0x31, 0xc5, + 0x06, 0xdc, 0x24, 0xa6, 0x18, 0xc0, 0xe9, 0x14, 0xff, 0xa1, 0xa4, 0x29, 0x7f, 0x90, 0x37, 0xc3, + 0x06, 0x00, 0x9d, 0xe1, 0x90, 0x7d, 0x82, 0x43, 0xad, 0xe9, 0x78, 0x2a, 0x1c, 0x6a, 0x8e, 0xc6, + 0x9a, 0x78, 0xfa, 0x54, 0xa1, 0x21, 0x77, 0xc9, 0x22, 0x84, 0x1e, 0x36, 0xd4, 0xfe, 0x7b, 0x03, + 0x99, 0x6b, 0xfd, 0xd9, 0xf3, 0x1f, 0xd2, 0xf8, 0xca, 0x83, 0xfb, 0x33, 0x83, 0xed, 0x63, 0x7b, + 0x3e, 0xcb, 0xee, 0xea, 0xd4, 0x77, 0x7f, 0x7e, 0xe3, 0xc4, 0x4b, 0x45, 0x5f, 0x25, 0xc4, 0xfb, + 0xcc, 0xc3, 0x3c, 0x1f, 0x08, 0xc4, 0xc6, 0x68, 0x6c, 0x63, 0xe8, 0x15, 0x42, 0xbb, 0xca, 0x02, + 0xc4, 0x30, 0xc1, 0x26, 0xf0, 0x7c, 0xb0, 0x41, 0x53, 0xca, 0x8d, 0x12, 0xb7, 0x2f, 0x9a, 0xae, + 0xa0, 0x25, 0x1a, 0x33, 0x2a, 0xab, 0x5a, 0x00, 0x88, 0x52, 0xef, 0x87, 0xc5, 0x51, 0x0f, 0xa2, + 0x97, 0x19, 0xff, 0x5e, 0x38, 0x30, 0x7e, 0xa4, 0x67, 0xfc, 0x67, 0x1f, 0x88, 0xb4, 0xd3, 0xf7, + 0x1f, 0x18, 0xbb, 0xb0, 0x4b, 0x3f, 0xd5, 0xc7, 0x69, 0x00, 0xd2, 0x02, 0x2b, 0x08, 0xff, 0x64, + 0x56, 0x10, 0x8d, 0xf1, 0xd6, 0x18, 0x27, 0xdb, 0x41, 0x0f, 0xaa, 0x58, 0x43, 0x32, 0x1f, 0xf1, + 0xf1, 0x29, 0xad, 0xe9, 0xf8, 0xe6, 0x70, 0xa8, 0x59, 0xc5, 0xb6, 0xa7, 0x4c, 0x6e, 0x90, 0x8c, + 0x78, 0x2b, 0x8a, 0x6f, 0x40, 0xe9, 0x77, 0x50, 0xd2, 0x94, 0x0d, 0x78, 0x91, 0x3e, 0xd2, 0xae, + 0xf7, 0x0c, 0xf0, 0xbd, 0x05, 0x75, 0x44, 0x22, 0x4e, 0x6e, 0xd9, 0xae, 0x8f, 0xe0, 0x0d, 0x98, + 0xd7, 0x02, 0x45, 0x85, 0x92, 0x80, 0xc0, 0xd1, 0x11, 0xbc, 0x8b, 0x24, 0x04, 0x79, 0xda, 0xff, + 0xf8, 0x24, 0x08, 0xc2, 0x66, 0x43, 0xad, 0x82, 0x1c, 0x50, 0x06, 0x5d, 0x8e, 0x78, 0xd0, 0x5d, + 0x75, 0xd1, 0x94, 0x0b, 0x61, 0x6c, 0x78, 0xba, 0x82, 0x32, 0xca, 0xac, 0x9c, 0x44, 0x0b, 0x4a, + 0x9a, 0x43, 0x94, 0x34, 0x9d, 0x97, 0xc6, 0x0f, 0x9f, 0x9f, 0x90, 0x34, 0x02, 0x54, 0x41, 0xd2, + 0x28, 0xfe, 0xef, 0xdc, 0x10, 0x69, 0x22, 0x30, 0x5e, 0x83, 0x36, 0xfd, 0x12, 0x42, 0x70, 0x00, + 0x48, 0x5e, 0x7b, 0xbb, 0xbc, 0x51, 0x17, 0x72, 0x5b, 0x7a, 0xfd, 0x85, 0x40, 0x4c, 0x1f, 0xa2, + 0x55, 0x98, 0x26, 0x92, 0xa3, 0xaf, 0x62, 0x17, 0xd1, 0xa7, 0xda, 0x07, 0xaf, 0x41, 0x6e, 0xb8, + 0xb1, 0x6b, 0x3d, 0xc6, 0x4e, 0xb2, 0xaf, 0x43, 0xef, 0x79, 0x5b, 0x3f, 0x70, 0x41, 0x78, 0xbc, + 0xed, 0xec, 0xf1, 0x99, 0x0e, 0xa5, 0x76, 0x18, 0x03, 0xde, 0xe5, 0x41, 0xd3, 0xc9, 0xdb, 0x72, + 0x32, 0x5e, 0x9f, 0xe3, 0xb3, 0x73, 0x71, 0xb8, 0xf7, 0x16, 0x80, 0xa0, 0xa3, 0xbd, 0x40, 0x34, + 0xe6, 0x6c, 0xfa, 0x26, 0x9d, 0x3c, 0x36, 0x37, 0xea, 0xbd, 0xdb, 0xe9, 0x53, 0x74, 0x52, 0x92, + 0xeb, 0xeb, 0x80, 0x31, 0x56, 0xfa, 0xc0, 0x8c, 0x01, 0x38, 0x84, 0xee, 0x5a, 0xee, 0x83, 0x5f, + 0x99, 0xe1, 0xce, 0xf1, 0x23, 0x3d, 0x99, 0xa1, 0xb7, 0xa1, 0x0d, 0x34, 0xc8, 0x0c, 0xbe, 0x9b, + 0x19, 0x7e, 0x1b, 0x8c, 0x16, 0x94, 0xa7, 0xd2, 0x6a, 0xc2, 0xe0, 0xff, 0xb3, 0xfb, 0x20, 0xb7, + 0x6b, 0x81, 0x57, 0xae, 0x06, 0xda, 0x55, 0xaf, 0x19, 0xff, 0x5a, 0x5e, 0xab, 0x9f, 0xe4, 0x7e, + 0xaf, 0xce, 0xd3, 0x66, 0xd6, 0x4d, 0xe0, 0xf7, 0x6a, 0x21, 0xc4, 0x06, 0x4d, 0x59, 0x88, 0x11, + 0xa8, 0x38, 0x42, 0x81, 0xd9, 0xe6, 0xdf, 0xc2, 0x49, 0x98, 0xb3, 0xeb, 0xa0, 0x65, 0xa4, 0xc6, + 0x18, 0x8f, 0x49, 0x08, 0xc1, 0x19, 0xa6, 0xf3, 0x18, 0xcd, 0x3a, 0xd7, 0x31, 0x8a, 0x20, 0x74, + 0x8c, 0xf5, 0x64, 0x8c, 0x70, 0xc6, 0x08, 0x63, 0x14, 0x4f, 0x3d, 0x8d, 0x12, 0x70, 0x0f, 0x0c, + 0x4c, 0x38, 0x46, 0xfc, 0x01, 0xb8, 0xa1, 0x93, 0xd1, 0x39, 0xb9, 0xa1, 0x8b, 0x43, 0xbb, 0xc7, + 0xb5, 0x9e, 0x8e, 0xeb, 0x39, 0x4d, 0x79, 0x80, 0xb9, 0xa1, 0x93, 0x71, 0x55, 0x88, 0x47, 0x8a, + 0x24, 0xb5, 0xa8, 0x78, 0x9a, 0xe8, 0xc7, 0x13, 0x8f, 0xef, 0x88, 0x07, 0x95, 0x19, 0x4b, 0x57, + 0x32, 0x40, 0xc7, 0xf7, 0x37, 0xe2, 0x08, 0x7d, 0xee, 0x00, 0x74, 0x88, 0x7f, 0x22, 0x69, 0xca, + 0x19, 0x89, 0xad, 0x76, 0x8d, 0x2a, 0xba, 0xda, 0xed, 0x75, 0x3d, 0x3f, 0x33, 0x81, 0x6e, 0xc6, + 0xd1, 0xd9, 0x5d, 0xd8, 0x4d, 0x13, 0xe0, 0x1e, 0x0f, 0x9a, 0x07, 0x8a, 0x87, 0x29, 0xdb, 0x68, + 0xac, 0xe9, 0xd9, 0x44, 0x3a, 0x1a, 0x8f, 0xd9, 0x5f, 0xf9, 0xba, 0x00, 0xba, 0xbe, 0xf2, 0x75, + 0x85, 0xa7, 0x84, 0x7c, 0x47, 0xd2, 0x94, 0x10, 0x5e, 0x68, 0x09, 0x5f, 0x61, 0x83, 0xf6, 0x3e, + 0x55, 0xb8, 0x9e, 0x5f, 0x99, 0xd0, 0x8f, 0x2f, 0xe3, 0xfa, 0x39, 0x09, 0xf1, 0x98, 0xe1, 0xd5, + 0x88, 0xdf, 0xc9, 0xab, 0x49, 0x58, 0x73, 0xc4, 0x49, 0x67, 0x86, 0xbc, 0x65, 0x3c, 0xcc, 0x3f, + 0xaf, 0x08, 0x92, 0xb8, 0x00, 0xba, 0x92, 0xc4, 0x15, 0x9e, 0x92, 0x24, 0x07, 0xce, 0x08, 0x8f, + 0x5a, 0x9c, 0xf0, 0x6c, 0xe0, 0x95, 0x3e, 0xcb, 0x1e, 0xbe, 0xf3, 0xdc, 0xf8, 0x9e, 0x03, 0xd0, + 0xc2, 0xdb, 0x6c, 0x6b, 0x99, 0xca, 0xa3, 0x56, 0x66, 0xb0, 0x3d, 0x33, 0xf8, 0xb1, 0x5b, 0xd7, + 0x86, 0xa2, 0x1e, 0x7a, 0x17, 0x60, 0x80, 0x85, 0x0c, 0x02, 0x7f, 0xf6, 0x33, 0x7d, 0xe4, 0x20, + 0x88, 0x5d, 0x66, 0x70, 0x88, 0x1f, 0x5d, 0x17, 0xf0, 0x09, 0xb4, 0x91, 0x36, 0x3f, 0xc0, 0xc0, + 0x1e, 0x0f, 0xf3, 0x09, 0x2c, 0x82, 0xcc, 0x2e, 0x80, 0xae, 0x64, 0x76, 0x85, 0xa7, 0x64, 0x7e, + 0x8b, 0x1c, 0xe2, 0x2e, 0xb4, 0xf8, 0x00, 0xda, 0x39, 0x6f, 0x19, 0xbd, 0x82, 0x81, 0x93, 0x1a, + 0x76, 0x13, 0xe0, 0x06, 0x5e, 0xc0, 0x73, 0xb0, 0x20, 0x31, 0x0c, 0x4a, 0xdc, 0xb9, 0x4e, 0x4d, + 0xdb, 0xc9, 0xe0, 0x14, 0x0d, 0xd0, 0x95, 0x06, 0x95, 0xc5, 0x01, 0x0b, 0xa2, 0xf7, 0x7d, 0x76, + 0xc9, 0xe1, 0x4a, 0x80, 0xd5, 0xa2, 0xee, 0xe5, 0x04, 0x28, 0x40, 0x03, 0xd1, 0x7f, 0x02, 0x4f, + 0x9e, 0x12, 0xff, 0xb7, 0x07, 0x7c, 0x28, 0xed, 0xa4, 0x70, 0xbc, 0xc1, 0x71, 0xa5, 0xc5, 0xb2, + 0x22, 0xa1, 0x29, 0x31, 0xfe, 0x45, 0xd2, 0x94, 0x3f, 0x97, 0xf0, 0xa2, 0xc2, 0xd4, 0xa0, 0x4a, + 0xfe, 0xf4, 0x44, 0x6f, 0x30, 0x5d, 0x1a, 0xde, 0x0c, 0xc5, 0xef, 0xec, 0xcb, 0x69, 0x9b, 0x03, + 0xfc, 0x96, 0x93, 0xca, 0xdb, 0x9c, 0x0e, 0xa5, 0x5b, 0x53, 0x45, 0xa8, 0x3c, 0x00, 0x2c, 0x5e, + 0xe5, 0x31, 0x78, 0x4a, 0xfd, 0xfd, 0x92, 0xa6, 0x7c, 0x17, 0xfb, 0x61, 0x23, 0x53, 0x05, 0x8b, + 0x76, 0x7a, 0x87, 0x42, 0x2e, 0xc1, 0xcd, 0x15, 0x7d, 0x11, 0x30, 0x04, 0xed, 0xef, 0x78, 0x1f, + 0x99, 0x2c, 0xeb, 0x55, 0xa5, 0xc8, 0xa0, 0x0c, 0xc5, 0xf4, 0x96, 0x07, 0xcd, 0xd9, 0xbc, 0x33, + 0x16, 0x2e, 0x82, 0x09, 0x1d, 0xc1, 0x5c, 0x99, 0xd0, 0x05, 0x5a, 0x90, 0xc8, 0x06, 0xfc, 0x40, + 0xad, 0x42, 0xf1, 0xea, 0x3f, 0x36, 0x7e, 0xa4, 0x93, 0x25, 0xc3, 0xea, 0xce, 0x9e, 0x3f, 0x3d, + 0xb6, 0xe7, 0x52, 0xae, 0xff, 0x64, 0xf6, 0xed, 0xb3, 0xb9, 0x9f, 0x0f, 0x78, 0x8b, 0x84, 0x23, + 0xe4, 0xa8, 0xf6, 0x3e, 0x3c, 0x79, 0x72, 0xec, 0x8c, 0x11, 0x97, 0xac, 0xff, 0x2e, 0x21, 0x6c, + 0x3a, 0x36, 0x6c, 0xa1, 0xa9, 0xf5, 0xed, 0xa7, 0x88, 0x76, 0x18, 0xd7, 0x53, 0x44, 0x27, 0x50, + 0x4a, 0x83, 0x4e, 0x49, 0x53, 0x6a, 0x70, 0x85, 0x18, 0x8d, 0x8a, 0x6e, 0xf2, 0xce, 0x9d, 0xcc, + 0x75, 0xed, 0x65, 0xcf, 0x5c, 0xed, 0x35, 0x4b, 0x68, 0x82, 0x1f, 0x92, 0xc8, 0x01, 0x1e, 0x73, + 0x57, 0xfb, 0x1f, 0x2e, 0xf6, 0x31, 0xb7, 0xb1, 0xbd, 0x4b, 0xd3, 0xb1, 0x10, 0x16, 0xf8, 0x9f, + 0x12, 0xc2, 0xc2, 0xab, 0x08, 0x57, 0xac, 0xed, 0x30, 0xae, 0x58, 0x3b, 0x81, 0x52, 0xac, 0xdf, + 0x96, 0x34, 0xa5, 0x1a, 0x2f, 0xa4, 0x8f, 0x45, 0x09, 0x22, 0x22, 0x6e, 0xcc, 0xb9, 0xce, 0xf2, + 0xe6, 0x42, 0xa8, 0x21, 0xd8, 0xae, 0xf7, 0xae, 0xbd, 0x21, 0x6c, 0x61, 0x6f, 0xcb, 0x86, 0x44, + 0x4d, 0xb3, 0x31, 0xe9, 0xa6, 0xd7, 0x84, 0x3b, 0xfa, 0x76, 0x18, 0x57, 0xf4, 0x9d, 0x40, 0x85, + 0x49, 0x5f, 0x65, 0x4c, 0xfa, 0x09, 0x7e, 0x89, 0x28, 0x3a, 0x87, 0x7a, 0x2b, 0xc4, 0x8d, 0x89, + 0x88, 0x3e, 0x41, 0xfc, 0xbb, 0x81, 0xaf, 0x09, 0x71, 0xfc, 0x2b, 0x8f, 0x79, 0x13, 0xc0, 0x71, + 0x5e, 0xec, 0x76, 0x06, 0x9e, 0x8f, 0xf1, 0x92, 0x89, 0x01, 0x29, 0xbe, 0x9a, 0x47, 0x53, 0xfe, + 0x8a, 0x5b, 0x1b, 0x31, 0x5e, 0x81, 0x88, 0x1c, 0xb5, 0x36, 0xe7, 0x5c, 0xad, 0x8d, 0x48, 0xa9, + 0xdf, 0x98, 0x85, 0xe1, 0xa3, 0x15, 0x03, 0xa0, 0x08, 0xb3, 0xf1, 0x08, 0xbe, 0x31, 0xa1, 0x33, + 0x24, 0x6e, 0x16, 0xbd, 0x64, 0xe1, 0xb4, 0x7f, 0xc0, 0xe5, 0x16, 0x26, 0x9f, 0xf4, 0x8b, 0x27, + 0x84, 0xa3, 0x94, 0x3f, 0x2c, 0x69, 0xca, 0x5a, 0x1c, 0xb0, 0x13, 0x5e, 0xef, 0xbc, 0x92, 0x19, + 0x7d, 0x47, 0xc4, 0x86, 0x3e, 0x89, 0xa9, 0x10, 0xe3, 0xe8, 0x88, 0x35, 0xc0, 0x7b, 0xf8, 0xeb, + 0xe2, 0xbd, 0x7f, 0xcf, 0xd5, 0x2c, 0x44, 0x37, 0x0d, 0x87, 0xe3, 0xad, 0xb1, 0xb4, 0x9b, 0x9a, + 0x15, 0x61, 0x26, 0x50, 0xb3, 0x56, 0x50, 0xf3, 0xe5, 0xe0, 0x72, 0x6c, 0x26, 0xa3, 0x1e, 0xfb, + 0xec, 0x8c, 0x7e, 0xe0, 0x0a, 0x95, 0x36, 0xe7, 0xe2, 0x82, 0xd1, 0x00, 0xf3, 0x82, 0xc9, 0x85, + 0xe0, 0x6b, 0x44, 0x91, 0xfe, 0x47, 0xae, 0x48, 0x0b, 0xe3, 0x65, 0x87, 0x99, 0x40, 0x91, 0x3a, + 0xe2, 0x15, 0xb3, 0x7a, 0xf7, 0x03, 0x02, 0x82, 0x77, 0xbf, 0x0d, 0xa3, 0x27, 0xbc, 0x8f, 0x4e, + 0x06, 0xa3, 0xaa, 0xd7, 0xe8, 0x5f, 0x54, 0x4f, 0xbe, 0xeb, 0x41, 0x77, 0x6c, 0x8c, 0x36, 0x25, + 0xf3, 0xd1, 0xb3, 0x8d, 0xd9, 0x01, 0xc8, 0xf5, 0xaa, 0xd9, 0x11, 0x96, 0x22, 0xf8, 0xa1, 0xa4, + 0x29, 0x51, 0x3c, 0x0b, 0x9e, 0x6f, 0x9a, 0x18, 0x6e, 0x85, 0x02, 0xfd, 0xad, 0x13, 0xfa, 0xc0, + 0xee, 0x3c, 0x3c, 0x59, 0xc8, 0xbc, 0xfd, 0x07, 0x33, 0x83, 0x1f, 0x43, 0x05, 0x40, 0x7f, 0xd9, + 0xfe, 0x86, 0x7e, 0xaa, 0x0f, 0x4a, 0x8c, 0xbf, 0x3b, 0xcf, 0x8d, 0xef, 0x3a, 0x27, 0x02, 0x80, + 0x19, 0x5d, 0xe9, 0x9d, 0xf4, 0xa4, 0xff, 0x17, 0x6e, 0x3e, 0x0a, 0x4f, 0xba, 0x1d, 0x66, 0x02, + 0xf3, 0xe1, 0x48, 0x93, 0xd7, 0x0d, 0xe3, 0x59, 0x21, 0x7a, 0x44, 0x5b, 0xf8, 0x79, 0xa1, 0xdd, + 0x29, 0xda, 0xc6, 0x06, 0xd5, 0x81, 0x1b, 0x66, 0x03, 0xfc, 0x37, 0x1e, 0xc1, 0xd9, 0x97, 0xa1, + 0xea, 0xee, 0xec, 0x9b, 0x87, 0xe8, 0x92, 0x89, 0x01, 0x29, 0x9a, 0xff, 0x4d, 0xd2, 0x94, 0xcb, + 0x92, 0xd5, 0xdd, 0x17, 0x10, 0xa1, 0x96, 0xe2, 0xc8, 0x04, 0x1e, 0xd3, 0x22, 0xf0, 0x6f, 0x6c, + 0x2f, 0x02, 0x1f, 0x25, 0x44, 0x5e, 0x8e, 0x27, 0xc5, 0x48, 0xf8, 0xbf, 0x7b, 0xd0, 0xdc, 0x7c, + 0x6a, 0x6c, 0x89, 0x37, 0xa8, 0xc9, 0x16, 0x37, 0xdf, 0x3f, 0x13, 0xce, 0x80, 0x9a, 0xc0, 0xf7, + 0x2f, 0x1f, 0x98, 0x92, 0xf9, 0x9f, 0x25, 0x4d, 0xf9, 0x1b, 0x09, 0x3f, 0xea, 0x46, 0xe6, 0x4a, + 0x9f, 0x18, 0x28, 0x02, 0x62, 0xc5, 0xd0, 0x3b, 0x5a, 0xd2, 0xe2, 0x1b, 0x3f, 0x0d, 0xce, 0xbe, + 0xeb, 0x9c, 0xea, 0xba, 0x84, 0xf0, 0x56, 0x35, 0x19, 0x7d, 0x69, 0x67, 0x61, 0xd9, 0xb5, 0xc3, + 0xb8, 0xca, 0xae, 0x13, 0x28, 0xa5, 0xf6, 0x2b, 0x64, 0xe5, 0x07, 0x71, 0x0f, 0xb8, 0xde, 0xe2, + 0x21, 0x5b, 0xbd, 0xae, 0x35, 0x05, 0xae, 0x46, 0xdd, 0xa5, 0xd6, 0x12, 0x07, 0xe1, 0x97, 0xb0, + 0xde, 0xb0, 0xb8, 0xe8, 0x3f, 0xe0, 0xfe, 0xb4, 0xc9, 0xe2, 0xa1, 0xbf, 0x78, 0x42, 0x38, 0xd3, + 0xce, 0xca, 0x78, 0x1e, 0x4c, 0x04, 0x19, 0x0f, 0x38, 0xdc, 0x53, 0x81, 0x75, 0xab, 0x28, 0x18, + 0x1f, 0x2e, 0x0f, 0xb9, 0x24, 0x1d, 0xfa, 0x98, 0x84, 0xee, 0xb0, 0x8e, 0xe2, 0x07, 0xf1, 0x98, + 0x9a, 0xb2, 0x5b, 0x22, 0x07, 0x20, 0x57, 0x4b, 0xe4, 0x08, 0x6b, 0xce, 0x5c, 0x1d, 0xf6, 0xd9, + 0x31, 0x20, 0x33, 0xa4, 0x77, 0xd3, 0x78, 0xd9, 0xde, 0x09, 0x21, 0xe0, 0xca, 0x06, 0x2f, 0x2d, + 0x06, 0xd9, 0x57, 0x09, 0x4a, 0xff, 0x4d, 0x12, 0xf4, 0x02, 0x0c, 0x8d, 0x3d, 0xd5, 0x5c, 0x36, + 0xc1, 0xd3, 0x89, 0xbc, 0x70, 0x78, 0xcb, 0x8b, 0x05, 0xa7, 0x38, 0xb7, 0xc2, 0x1b, 0xea, 0x7c, + 0x8c, 0xc4, 0x28, 0x63, 0xde, 0xc2, 0xd5, 0x93, 0x51, 0x84, 0x3c, 0xc0, 0xd4, 0x5f, 0x49, 0xe0, + 0x12, 0x0c, 0x2f, 0x68, 0x12, 0xe1, 0x14, 0x2e, 0xf0, 0xc0, 0x26, 0x11, 0x4e, 0x15, 0x74, 0x09, + 0x16, 0xa0, 0x4c, 0xcf, 0x9d, 0xa7, 0xf1, 0x42, 0x9e, 0xa9, 0x19, 0xde, 0x54, 0xc0, 0xd0, 0xdb, + 0x12, 0x61, 0x8a, 0xd6, 0x04, 0xf5, 0x13, 0x3d, 0x1e, 0x11, 0xf1, 0x6a, 0x33, 0x30, 0xf8, 0x7b, + 0xf1, 0x89, 0xcc, 0xe6, 0xd6, 0xc6, 0x98, 0x9a, 0x2e, 0xf4, 0x44, 0x86, 0x42, 0x4c, 0x6c, 0x35, + 0x39, 0xa0, 0xc9, 0xa6, 0x35, 0xcc, 0xdb, 0xd9, 0x18, 0xed, 0xf9, 0x9e, 0xdc, 0x68, 0x2f, 0xc5, + 0x69, 0x69, 0xc1, 0xf7, 0x24, 0x00, 0x2a, 0x2c, 0x12, 0x8a, 0x94, 0xc8, 0x14, 0x45, 0x26, 0x27, + 0xa1, 0x79, 0xe6, 0xb0, 0xd4, 0x70, 0x6b, 0x32, 0x9a, 0x86, 0x08, 0xa0, 0x0e, 0x47, 0x6a, 0x2e, + 0x80, 0xae, 0x47, 0x6a, 0xae, 0xf0, 0x14, 0xed, 0x1d, 0x64, 0x81, 0x4f, 0x7d, 0xaf, 0xfa, 0xbb, + 0xf4, 0xce, 0x73, 0xb9, 0xe1, 0x0e, 0x8a, 0xb6, 0x73, 0x71, 0x41, 0x97, 0xf5, 0x7c, 0x14, 0xe9, + 0x47, 0xa9, 0xcb, 0xfa, 0x1f, 0x4a, 0xf0, 0x48, 0x6c, 0xbd, 0xba, 0x33, 0x11, 0x8a, 0x26, 0x53, + 0xce, 0x8f, 0xc4, 0xd6, 0xab, 0x3b, 0x1b, 0x8c, 0xda, 0x82, 0x8f, 0xc4, 0x4c, 0x20, 0xf3, 0x95, + 0x81, 0x89, 0xc8, 0xc0, 0xee, 0x71, 0xed, 0x34, 0x89, 0x69, 0x6e, 0x41, 0xc4, 0x5a, 0x3c, 0x19, + 0x11, 0xdb, 0xc1, 0x46, 0x7c, 0x5d, 0xd4, 0x29, 0xf5, 0x34, 0x67, 0xe4, 0x96, 0x9d, 0x09, 0x35, + 0x85, 0xdd, 0x97, 0x0f, 0x22, 0x5c, 0xc1, 0x83, 0x67, 0x07, 0x68, 0x93, 0x3d, 0xbf, 0xc3, 0xee, + 0x11, 0xc9, 0x23, 0x92, 0xa3, 0x43, 0xfa, 0xb1, 0x7d, 0xde, 0x25, 0xc0, 0x99, 0x62, 0x4e, 0xa9, + 0x7c, 0x18, 0x01, 0xd9, 0x87, 0xf0, 0xca, 0x62, 0x90, 0x65, 0xa9, 0x30, 0xd3, 0x04, 0xad, 0xbf, + 0x60, 0x01, 0xf9, 0x8c, 0x6a, 0x1a, 0x7a, 0x31, 0x85, 0xdd, 0x05, 0x8b, 0x81, 0xb8, 0xba, 0x48, + 0x3b, 0x40, 0x5a, 0xe6, 0x90, 0x2b, 0x10, 0xd8, 0x77, 0xb3, 0x39, 0x74, 0x2c, 0x9e, 0xcc, 0x1c, + 0xb2, 0xdd, 0x36, 0xfe, 0x1f, 0xa2, 0x4a, 0x79, 0x36, 0x55, 0xdf, 0x12, 0x6a, 0x52, 0x0b, 0xa8, + 0x14, 0x0a, 0x31, 0xb1, 0x4a, 0xe1, 0x80, 0x14, 0x9d, 0x1e, 0x49, 0x53, 0x7e, 0xc0, 0x82, 0xc6, + 0x92, 0x09, 0x11, 0xb2, 0x8e, 0x8d, 0x1f, 0x3c, 0xaa, 0xef, 0x3a, 0x40, 0x91, 0x5b, 0x55, 0x70, + 0x1a, 0x5d, 0x5a, 0x4d, 0x46, 0xd7, 0xc4, 0x53, 0x51, 0x82, 0xe5, 0x38, 0x75, 0xf5, 0xb4, 0x30, + 0x5a, 0x0a, 0x2f, 0x9d, 0x90, 0x19, 0x53, 0x05, 0x5d, 0x3d, 0xf3, 0x41, 0xcd, 0x67, 0x87, 0x75, + 0x22, 0xd3, 0x52, 0x6c, 0x57, 0xb8, 0x61, 0xab, 0xf7, 0x74, 0x64, 0x06, 0x3f, 0x86, 0x60, 0xc2, + 0x62, 0x1c, 0xd8, 0x82, 0xd1, 0x5d, 0x5d, 0x98, 0x37, 0x85, 0xff, 0x77, 0x61, 0xa5, 0xc3, 0x76, + 0x05, 0x3b, 0x13, 0xaa, 0xfb, 0x4a, 0x47, 0x00, 0x9a, 0x70, 0xa5, 0x63, 0x81, 0xa5, 0xe8, 0x26, + 0x35, 0xe5, 0x51, 0xa6, 0x82, 0xf8, 0x4a, 0x14, 0xb2, 0x46, 0x78, 0xef, 0x01, 0x9c, 0x95, 0xf5, + 0x9b, 0xd7, 0x3b, 0x02, 0x14, 0xf0, 0xdd, 0x75, 0x5b, 0xa7, 0x1a, 0xe2, 0x69, 0x4c, 0xe8, 0x5d, + 0x6c, 0x4c, 0x35, 0xa1, 0x58, 0xe4, 0xe5, 0x68, 0x24, 0xbd, 0xbd, 0x21, 0x14, 0xde, 0x11, 0x6a, + 0x52, 0x53, 0x76, 0x4f, 0x2b, 0x57, 0x50, 0x57, 0x4f, 0xab, 0x02, 0x2d, 0x28, 0xda, 0x4d, 0xb0, + 0x34, 0x67, 0x58, 0xe9, 0x9d, 0x17, 0x33, 0x43, 0x3f, 0xd7, 0x07, 0xcf, 0xe8, 0xfd, 0xa3, 0x7a, + 0x77, 0xa7, 0xd7, 0xb5, 0x66, 0x32, 0x4b, 0x81, 0xc6, 0x97, 0x13, 0x29, 0xfc, 0x27, 0x54, 0x13, + 0x3d, 0x9b, 0xa0, 0x51, 0x3f, 0x36, 0xc4, 0x9b, 0x5c, 0x34, 0x91, 0x05, 0xa4, 0xa0, 0x26, 0xca, + 0x83, 0x34, 0x43, 0x29, 0x70, 0x9c, 0x40, 0xfe, 0xb2, 0x87, 0x4f, 0xeb, 0xd7, 0x68, 0xae, 0x77, + 0xaf, 0x6b, 0x4d, 0x01, 0x4f, 0x93, 0x38, 0xfb, 0x50, 0xb3, 0x31, 0xea, 0x7f, 0x4b, 0x05, 0x31, + 0xa8, 0xa6, 0xe2, 0xad, 0xc9, 0xb0, 0xba, 0x39, 0xbc, 0x5d, 0x6d, 0x09, 0x39, 0x0b, 0xa2, 0x15, + 0x86, 0x61, 0xb3, 0xd0, 0x39, 0xf2, 0x1f, 0x6d, 0x90, 0xf0, 0xff, 0x44, 0x40, 0x81, 0xee, 0x3b, + 0xcf, 0x9d, 0xe4, 0xf6, 0xc0, 0xeb, 0x5a, 0x53, 0x40, 0xad, 0x24, 0xe9, 0x40, 0x52, 0x64, 0x20, + 0xc2, 0x0b, 0xdf, 0x5f, 0x4a, 0xe8, 0xf6, 0x75, 0x6a, 0x3e, 0x32, 0x4e, 0xc1, 0x97, 0x9c, 0x71, + 0x29, 0x14, 0xc5, 0xf0, 0xa7, 0x2e, 0x78, 0xb0, 0x73, 0x57, 0xb7, 0x9a, 0x02, 0xeb, 0x14, 0x37, + 0x3c, 0xaa, 0x5e, 0x8b, 0x85, 0x5a, 0xd4, 0xd7, 0xf1, 0x21, 0x0f, 0xba, 0xe3, 0xb9, 0x56, 0x35, + 0xb9, 0xd3, 0xd8, 0xf0, 0xd7, 0xec, 0x54, 0xc2, 0xc6, 0xb4, 0xd5, 0xd7, 0xd9, 0x35, 0x87, 0x03, + 0x90, 0xab, 0xe6, 0x70, 0x84, 0xa5, 0xec, 0x76, 0x5a, 0xd2, 0x94, 0x66, 0xbc, 0x2a, 0x7b, 0xe2, + 0xe4, 0xf8, 0xc7, 0xdd, 0x90, 0xc6, 0x02, 0x0e, 0x0c, 0x2a, 0xf5, 0xd1, 0x77, 0xb2, 0x87, 0x4f, + 0xc0, 0x8f, 0xec, 0xe1, 0xcb, 0xec, 0x8d, 0x05, 0x2d, 0x79, 0x3e, 0xb8, 0xc1, 0x7b, 0x43, 0xad, + 0x0a, 0xe4, 0x36, 0x48, 0xa8, 0xc9, 0x96, 0x54, 0x55, 0x88, 0x0c, 0x91, 0x1c, 0x60, 0xc1, 0x58, + 0x5f, 0x67, 0xc1, 0x61, 0x0c, 0x06, 0xab, 0x59, 0xef, 0x12, 0xba, 0x44, 0xa8, 0x2c, 0x96, 0x4f, + 0x5f, 0x10, 0x16, 0x6e, 0x66, 0x26, 0x4e, 0xcb, 0xc2, 0x2d, 0xaf, 0xb8, 0x80, 0x90, 0xc5, 0xe2, + 0x11, 0xb5, 0x25, 0x14, 0xa3, 0x01, 0x2e, 0xbe, 0x90, 0xd0, 0x6d, 0xc4, 0x3c, 0xd5, 0xb2, 0xd4, + 0x86, 0xce, 0x71, 0xa7, 0xcd, 0xfa, 0x62, 0x18, 0xf2, 0x75, 0xb2, 0x0d, 0xa2, 0x23, 0x23, 0xa9, + 0xb6, 0x20, 0xf1, 0x93, 0xc1, 0x7c, 0x1f, 0x1c, 0x86, 0x6c, 0x50, 0xde, 0x09, 0xea, 0x27, 0x7e, + 0xf7, 0x69, 0x4d, 0xb0, 0x12, 0xae, 0x4a, 0x33, 0x0c, 0xce, 0x79, 0xd0, 0x9c, 0x75, 0x6a, 0xba, + 0x66, 0xc7, 0xe6, 0x78, 0x22, 0xc5, 0x6e, 0x06, 0x48, 0x66, 0x2c, 0x27, 0xbf, 0x0e, 0x3b, 0x58, + 0xa1, 0x6c, 0x01, 0x4e, 0xd0, 0x94, 0x45, 0x2f, 0x4a, 0x9a, 0xd2, 0x82, 0x17, 0x53, 0xc5, 0x77, + 0x62, 0x8f, 0xbe, 0x67, 0xf7, 0xd8, 0xb5, 0x9e, 0xdc, 0xf0, 0x67, 0xe0, 0x72, 0x99, 0xeb, 0xeb, + 0x10, 0x2f, 0x98, 0xbc, 0x35, 0x00, 0x48, 0xb9, 0xf2, 0x68, 0x17, 0x70, 0x1e, 0x49, 0x92, 0x05, + 0x14, 0xd9, 0x37, 0x61, 0x1f, 0x70, 0x74, 0x83, 0x1f, 0x73, 0xa0, 0x51, 0xe3, 0x8e, 0x54, 0x3c, + 0x91, 0xaa, 0x6a, 0x6c, 0x4d, 0x45, 0x63, 0x6a, 0x2a, 0x55, 0xf5, 0x1a, 0xfb, 0xcb, 0x20, 0x96, + 0x79, 0x55, 0xf4, 0xb9, 0x13, 0xa9, 0x48, 0x74, 0xd5, 0x89, 0x49, 0x25, 0x06, 0x59, 0x5d, 0x56, + 0x24, 0x34, 0x25, 0xd5, 0x2f, 0x6e, 0x0e, 0xa9, 0x9c, 0xef, 0x98, 0x8a, 0x23, 0x55, 0xd5, 0x6b, + 0x69, 0xe1, 0x8e, 0xe9, 0xac, 0x87, 0xe4, 0xaf, 0x24, 0x51, 0x70, 0x19, 0x86, 0x24, 0x93, 0x6d, + 0x0a, 0x3b, 0x91, 0xc2, 0x01, 0xce, 0xf5, 0xe0, 0xc4, 0x0d, 0x9c, 0x92, 0xee, 0x3c, 0x49, 0xf9, + 0x42, 0x2f, 0x3c, 0x6b, 0x6a, 0x37, 0xeb, 0x57, 0x2f, 0xe9, 0x07, 0x2e, 0xe8, 0xbb, 0x3b, 0xe1, + 0x6d, 0x0a, 0xc5, 0xf9, 0xc0, 0x7b, 0xe3, 0x7b, 0x0e, 0x78, 0x83, 0xc5, 0x40, 0x55, 0xd2, 0xe3, + 0xd7, 0xc1, 0x4f, 0xb3, 0xc7, 0xdf, 0x01, 0x12, 0x1b, 0x10, 0x36, 0x82, 0x82, 0x5b, 0x44, 0x81, + 0x25, 0x09, 0xa5, 0x23, 0x23, 0x53, 0x1b, 0x90, 0xe3, 0x8f, 0x25, 0x34, 0xab, 0x4e, 0x6d, 0x6c, + 0x6d, 0xa2, 0xec, 0x10, 0x4a, 0xed, 0x70, 0x0a, 0x3f, 0x60, 0x01, 0x28, 0x10, 0x7e, 0x20, 0x0f, + 0x8e, 0x12, 0x25, 0x44, 0x2c, 0xe0, 0xd8, 0x85, 0x5d, 0x63, 0x03, 0x07, 0xed, 0x23, 0xf7, 0xba, + 0xd6, 0x40, 0x78, 0x0b, 0xff, 0x3d, 0xee, 0xd8, 0x44, 0x8c, 0x2f, 0x1a, 0x8a, 0xfd, 0x1d, 0x2a, + 0x29, 0xa1, 0x74, 0x78, 0x7b, 0x6d, 0x6b, 0x2a, 0x1d, 0x6f, 0xd9, 0xac, 0xa6, 0xd3, 0xd1, 0x58, + 0x93, 0xb3, 0xa4, 0xd8, 0xc0, 0x0a, 0x4a, 0x8a, 0x03, 0x34, 0xc5, 0xec, 0xa8, 0x44, 0x0e, 0x07, + 0x61, 0x6b, 0x57, 0xdf, 0x60, 0x6c, 0x07, 0xf6, 0x7d, 0xa4, 0x1f, 0x39, 0x07, 0xee, 0x98, 0xe3, + 0x27, 0x69, 0xf0, 0x68, 0xef, 0x84, 0x10, 0x04, 0xd5, 0x67, 0xfd, 0xcf, 0x38, 0xa0, 0xfa, 0xb2, + 0xda, 0x58, 0x15, 0x16, 0xbf, 0x9e, 0xaa, 0x22, 0xe9, 0x0f, 0xab, 0x5e, 0xe3, 0x99, 0x16, 0x5f, + 0xa7, 0x7f, 0xd7, 0x47, 0x5e, 0x87, 0xdc, 0x2c, 0xeb, 0x54, 0x92, 0xe2, 0x69, 0xc0, 0x83, 0xb0, + 0x81, 0x40, 0xf4, 0x55, 0x31, 0x35, 0xae, 0x7d, 0x91, 0x66, 0x87, 0x71, 0xdd, 0x2d, 0x39, 0x81, + 0x52, 0x62, 0xfc, 0x91, 0xa4, 0x29, 0x31, 0xfc, 0x30, 0xdd, 0xe7, 0x12, 0xd9, 0x37, 0x58, 0x95, + 0xd8, 0x8b, 0xec, 0x89, 0x5e, 0x5b, 0x22, 0x15, 0x0a, 0x42, 0x1c, 0x59, 0xbc, 0x37, 0xd6, 0x8c, + 0x90, 0xed, 0x19, 0xff, 0x1a, 0x17, 0xb2, 0x15, 0xa2, 0x13, 0xb3, 0x47, 0x24, 0x91, 0x62, 0xad, + 0xb1, 0x1f, 0x31, 0x28, 0xf6, 0xa1, 0x07, 0xcd, 0xce, 0x4f, 0x4c, 0xef, 0x18, 0xad, 0xd3, 0x02, + 0xe1, 0xba, 0xb5, 0xb6, 0x03, 0x0a, 0xb9, 0x6b, 0x5e, 0xc2, 0x98, 0x1e, 0xc6, 0x11, 0x5c, 0xc1, + 0xc8, 0x7a, 0x1b, 0xc4, 0x32, 0x9e, 0x94, 0xb1, 0x20, 0x15, 0xd8, 0xcd, 0xfe, 0xe5, 0xcc, 0x30, + 0x8d, 0xd2, 0x90, 0xdd, 0x7b, 0x68, 0xac, 0xbd, 0x13, 0x0c, 0x36, 0xa1, 0xd1, 0x06, 0xff, 0xba, + 0xaf, 0x4a, 0xa3, 0x14, 0xa4, 0xff, 0x21, 0xd1, 0xab, 0x20, 0x39, 0xad, 0x53, 0xbe, 0x65, 0xbc, + 0xbc, 0xc8, 0xbc, 0xce, 0xae, 0x27, 0x7e, 0x13, 0x64, 0xc7, 0x26, 0x6c, 0xf6, 0x13, 0x7c, 0xa7, + 0x9d, 0x74, 0xf5, 0x75, 0xde, 0xa0, 0x23, 0xf1, 0xea, 0xeb, 0xbe, 0x2a, 0xf9, 0x36, 0xf9, 0xeb, + 0xbf, 0x2a, 0xf9, 0xa2, 0x11, 0x81, 0x80, 0x9d, 0x1e, 0x72, 0x27, 0x23, 0x66, 0xf7, 0x75, 0xbc, + 0x93, 0x71, 0x48, 0x21, 0xec, 0x78, 0x27, 0xe3, 0x94, 0x26, 0x98, 0xc4, 0x24, 0x0f, 0xe2, 0x62, + 0x33, 0x0e, 0x7b, 0x8b, 0x05, 0x24, 0x04, 0x59, 0xe3, 0x7f, 0xfa, 0x06, 0x08, 0x02, 0x6c, 0x14, + 0x81, 0x71, 0xd2, 0xe8, 0x37, 0xb7, 0xdb, 0x92, 0x8c, 0x3a, 0xee, 0xbb, 0x1c, 0x33, 0x98, 0x7a, + 0x97, 0x16, 0x01, 0x49, 0xa9, 0xf1, 0xbf, 0x4a, 0x9a, 0xb2, 0x5f, 0xc2, 0x32, 0x60, 0x59, 0xdf, + 0x50, 0x55, 0xdf, 0xd0, 0xb6, 0xda, 0xcc, 0xa8, 0x9f, 0x3b, 0xdf, 0x05, 0xe8, 0x31, 0x3d, 0x64, + 0xa6, 0x42, 0xf5, 0x7e, 0x8f, 0x92, 0x82, 0xa4, 0x65, 0xe1, 0x8b, 0x1a, 0x1f, 0x5d, 0xf0, 0x90, + 0xcc, 0x5b, 0x63, 0xbf, 0x78, 0x47, 0xef, 0x3c, 0x9d, 0xeb, 0xeb, 0x28, 0xae, 0x63, 0x81, 0x92, + 0x35, 0xfe, 0x27, 0x6e, 0x90, 0x92, 0x55, 0x61, 0x03, 0x41, 0x83, 0x8c, 0x1d, 0x1e, 0x34, 0x47, + 0x70, 0x82, 0xd9, 0x18, 0x8f, 0xb4, 0x36, 0xab, 0x6b, 0x9b, 0x43, 0x0e, 0xd6, 0xcf, 0x11, 0xcc, + 0xd5, 0xfa, 0xb9, 0x40, 0x0b, 0xee, 0xac, 0x0a, 0x9e, 0x03, 0x61, 0xf8, 0x33, 0x43, 0xbd, 0xb9, + 0xe1, 0x8e, 0xcc, 0xf0, 0x65, 0x58, 0x89, 0x78, 0x97, 0xf0, 0x62, 0x16, 0x06, 0x91, 0xb8, 0x56, + 0xe7, 0xba, 0xf6, 0x66, 0x8f, 0x7e, 0x02, 0xa2, 0x25, 0xac, 0x59, 0x6a, 0xfd, 0x4f, 0x16, 0x75, + 0xa3, 0xa2, 0x26, 0x53, 0xb0, 0xad, 0xa3, 0x7f, 0xbd, 0x5e, 0xd5, 0x42, 0xc6, 0x45, 0xb8, 0x69, + 0x1f, 0x7f, 0x04, 0x3a, 0x21, 0x19, 0x1c, 0xc1, 0x26, 0x78, 0x04, 0xea, 0x46, 0x86, 0x77, 0x25, + 0x4d, 0x79, 0x02, 0x9b, 0xbe, 0x37, 0x16, 0x32, 0x2c, 0x32, 0x03, 0x6e, 0x0a, 0xf8, 0xe7, 0xfa, + 0x3a, 0x44, 0x28, 0xd0, 0x31, 0xde, 0xfa, 0xaf, 0x46, 0x82, 0xaa, 0xd7, 0xe0, 0x0f, 0xba, 0xd7, + 0xdd, 0xeb, 0x41, 0x73, 0x04, 0x67, 0x92, 0x42, 0xd4, 0x70, 0x04, 0x73, 0xa5, 0x86, 0x0b, 0x34, + 0xa5, 0x46, 0x2f, 0x50, 0x03, 0x7c, 0x51, 0x6c, 0xd4, 0xe0, 0xc5, 0x13, 0x51, 0x63, 0x7d, 0xe0, + 0xeb, 0xa3, 0x86, 0xa1, 0x6e, 0xef, 0xe0, 0xc7, 0xbc, 0x02, 0x21, 0xdc, 0xcf, 0x82, 0xed, 0x64, + 0x78, 0xb0, 0x28, 0x58, 0x81, 0x25, 0x9e, 0x16, 0x0e, 0x05, 0x2c, 0x44, 0x58, 0xec, 0xe6, 0x36, + 0x91, 0x07, 0x08, 0x74, 0xc0, 0x5f, 0x23, 0x1d, 0x4e, 0x4a, 0x68, 0xea, 0x77, 0xd5, 0x50, 0x73, + 0x7a, 0xbb, 0x3d, 0xfb, 0x16, 0x94, 0xbb, 0x1e, 0x7a, 0xb0, 0x6a, 0x33, 0xba, 0xec, 0x2a, 0x5c, + 0x91, 0x3d, 0xba, 0xdf, 0xd8, 0x7a, 0xbc, 0x71, 0x5a, 0x1f, 0xba, 0x02, 0x0e, 0x0c, 0xf0, 0x52, + 0xc7, 0xeb, 0x5a, 0x43, 0x70, 0x9a, 0x8f, 0xef, 0x72, 0xc0, 0x69, 0x3b, 0xf9, 0x42, 0x4d, 0x8f, + 0xa4, 0x29, 0xdd, 0x12, 0xf6, 0xa1, 0x79, 0xf4, 0x52, 0xda, 0x47, 0x33, 0x28, 0xfb, 0x94, 0x86, + 0x7a, 0x5f, 0x5d, 0x3c, 0x2c, 0x97, 0xae, 0x58, 0xbe, 0x72, 0xf9, 0x0a, 0x3f, 0xaa, 0x6a, 0x0c, + 0xa7, 0x42, 0x89, 0x68, 0x55, 0xdb, 0xaa, 0x80, 0xe4, 0x91, 0x67, 0x87, 0x12, 0x89, 0xe6, 0x68, + 0x98, 0x9c, 0x50, 0x56, 0xfd, 0x24, 0x15, 0x8f, 0x55, 0xdb, 0x4a, 0x7e, 0x70, 0x1f, 0xba, 0x17, + 0x21, 0x25, 0x11, 0x5d, 0xaf, 0xee, 0x54, 0x5a, 0xd3, 0xdb, 0xf1, 0x1d, 0x65, 0x1e, 0xef, 0x4c, + 0xe3, 0xaf, 0x78, 0x32, 0xfa, 0x2a, 0x81, 0xf3, 0x79, 0x1a, 0x67, 0xa3, 0xdb, 0x2c, 0x40, 0xbf, + 0xd7, 0x38, 0x35, 0x91, 0x8c, 0xa7, 0xe3, 0x0f, 0xfd, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2f, + 0x3c, 0xd4, 0x22, 0xa4, 0xf9, 0x03, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -32383,7 +32416,7 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ClusterManagerClient interface { - // * cluster management + //* cluster management CreateCluster(ctx context.Context, in *CreateClusterReq, opts ...grpc.CallOption) (*CreateClusterResp, error) RetryCreateClusterTask(ctx context.Context, in *RetryCreateClusterReq, opts ...grpc.CallOption) (*RetryCreateClusterResp, error) CheckCloudKubeConfig(ctx context.Context, in *KubeConfigReq, opts ...grpc.CallOption) (*KubeConfigResp, error) @@ -32404,7 +32437,7 @@ type ClusterManagerClient interface { CreateVirtualCluster(ctx context.Context, in *CreateVirtualClusterReq, opts ...grpc.CallOption) (*CreateVirtualClusterResp, error) DeleteVirtualCluster(ctx context.Context, in *DeleteVirtualClusterReq, opts ...grpc.CallOption) (*DeleteVirtualClusterResp, error) UpdateVirtualClusterQuota(ctx context.Context, in *UpdateVirtualClusterQuotaReq, opts ...grpc.CallOption) (*UpdateVirtualClusterQuotaResp, error) - // * node management + //* node management GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) RecordNodeInfo(ctx context.Context, in *RecordNodeInfoRequest, opts ...grpc.CallOption) (*CommonResp, error) @@ -32416,28 +32449,28 @@ type ClusterManagerClient interface { UpdateNodeLabels(ctx context.Context, in *UpdateNodeLabelsRequest, opts ...grpc.CallOption) (*UpdateNodeLabelsResponse, error) UpdateNodeAnnotations(ctx context.Context, in *UpdateNodeAnnotationsRequest, opts ...grpc.CallOption) (*UpdateNodeAnnotationsResponse, error) UpdateNodeTaints(ctx context.Context, in *UpdateNodeTaintsRequest, opts ...grpc.CallOption) (*UpdateNodeTaintsResponse, error) - // * cluster credential management + //* cluster credential management GetClusterCredential(ctx context.Context, in *GetClusterCredentialReq, opts ...grpc.CallOption) (*GetClusterCredentialResp, error) UpdateClusterCredential(ctx context.Context, in *UpdateClusterCredentialReq, opts ...grpc.CallOption) (*UpdateClusterCredentialResp, error) DeleteClusterCredential(ctx context.Context, in *DeleteClusterCredentialReq, opts ...grpc.CallOption) (*DeleteClusterCredentialResp, error) ListClusterCredential(ctx context.Context, in *ListClusterCredentialReq, opts ...grpc.CallOption) (*ListClusterCredentialResp, error) - // * federation cluster management + //* federation cluster management InitFederationCluster(ctx context.Context, in *InitFederationClusterReq, opts ...grpc.CallOption) (*InitFederationClusterResp, error) AddFederatedCluster(ctx context.Context, in *AddFederatedClusterReq, opts ...grpc.CallOption) (*AddFederatedClusterResp, error) - // * Cloud information management * + //* Cloud information management * CreateCloud(ctx context.Context, in *CreateCloudRequest, opts ...grpc.CallOption) (*CreateCloudResponse, error) UpdateCloud(ctx context.Context, in *UpdateCloudRequest, opts ...grpc.CallOption) (*UpdateCloudResponse, error) DeleteCloud(ctx context.Context, in *DeleteCloudRequest, opts ...grpc.CallOption) (*DeleteCloudResponse, error) GetCloud(ctx context.Context, in *GetCloudRequest, opts ...grpc.CallOption) (*GetCloudResponse, error) ListCloud(ctx context.Context, in *ListCloudRequest, opts ...grpc.CallOption) (*ListCloudResponse, error) - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(ctx context.Context, in *CreateCloudVPCRequest, opts ...grpc.CallOption) (*CreateCloudVPCResponse, error) UpdateCloudVPC(ctx context.Context, in *UpdateCloudVPCRequest, opts ...grpc.CallOption) (*UpdateCloudVPCResponse, error) DeleteCloudVPC(ctx context.Context, in *DeleteCloudVPCRequest, opts ...grpc.CallOption) (*DeleteCloudVPCResponse, error) ListCloudVPC(ctx context.Context, in *ListCloudVPCRequest, opts ...grpc.CallOption) (*ListCloudVPCResponse, error) ListCloudRegions(ctx context.Context, in *ListCloudRegionsRequest, opts ...grpc.CallOption) (*ListCloudRegionsResponse, error) GetVPCCidr(ctx context.Context, in *GetVPCCidrRequest, opts ...grpc.CallOption) (*GetVPCCidrResponse, error) - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(ctx context.Context, in *CreateNodeGroupRequest, opts ...grpc.CallOption) (*CreateNodeGroupResponse, error) UpdateNodeGroup(ctx context.Context, in *UpdateNodeGroupRequest, opts ...grpc.CallOption) (*UpdateNodeGroupResponse, error) DeleteNodeGroup(ctx context.Context, in *DeleteNodeGroupRequest, opts ...grpc.CallOption) (*DeleteNodeGroupResponse, error) @@ -32455,14 +32488,14 @@ type ClusterManagerClient interface { UpdateGroupMinMaxSize(ctx context.Context, in *UpdateGroupMinMaxSizeRequest, opts ...grpc.CallOption) (*UpdateGroupMinMaxSizeResponse, error) EnableNodeGroupAutoScale(ctx context.Context, in *EnableNodeGroupAutoScaleRequest, opts ...grpc.CallOption) (*EnableNodeGroupAutoScaleResponse, error) DisableNodeGroupAutoScale(ctx context.Context, in *DisableNodeGroupAutoScaleRequest, opts ...grpc.CallOption) (*DisableNodeGroupAutoScaleResponse, error) - // * Task information management * + //* Task information management * CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*CreateTaskResponse, error) RetryTask(ctx context.Context, in *RetryTaskRequest, opts ...grpc.CallOption) (*RetryTaskResponse, error) UpdateTask(ctx context.Context, in *UpdateTaskRequest, opts ...grpc.CallOption) (*UpdateTaskResponse, error) DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...grpc.CallOption) (*DeleteTaskResponse, error) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskResponse, error) ListTask(ctx context.Context, in *ListTaskRequest, opts ...grpc.CallOption) (*ListTaskResponse, error) - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(ctx context.Context, in *CreateAutoScalingOptionRequest, opts ...grpc.CallOption) (*CreateAutoScalingOptionResponse, error) UpdateAutoScalingOption(ctx context.Context, in *UpdateAutoScalingOptionRequest, opts ...grpc.CallOption) (*UpdateAutoScalingOptionResponse, error) DeleteAutoScalingOption(ctx context.Context, in *DeleteAutoScalingOptionRequest, opts ...grpc.CallOption) (*DeleteAutoScalingOptionResponse, error) @@ -33662,7 +33695,7 @@ func (c *clusterManagerClient) Health(ctx context.Context, in *HealthRequest, op // ClusterManagerServer is the server API for ClusterManager service. type ClusterManagerServer interface { - // * cluster management + //* cluster management CreateCluster(context.Context, *CreateClusterReq) (*CreateClusterResp, error) RetryCreateClusterTask(context.Context, *RetryCreateClusterReq) (*RetryCreateClusterResp, error) CheckCloudKubeConfig(context.Context, *KubeConfigReq) (*KubeConfigResp, error) @@ -33683,7 +33716,7 @@ type ClusterManagerServer interface { CreateVirtualCluster(context.Context, *CreateVirtualClusterReq) (*CreateVirtualClusterResp, error) DeleteVirtualCluster(context.Context, *DeleteVirtualClusterReq) (*DeleteVirtualClusterResp, error) UpdateVirtualClusterQuota(context.Context, *UpdateVirtualClusterQuotaReq) (*UpdateVirtualClusterQuotaResp, error) - // * node management + //* node management GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) GetNodeInfo(context.Context, *GetNodeInfoRequest) (*GetNodeInfoResponse, error) RecordNodeInfo(context.Context, *RecordNodeInfoRequest) (*CommonResp, error) @@ -33695,28 +33728,28 @@ type ClusterManagerServer interface { UpdateNodeLabels(context.Context, *UpdateNodeLabelsRequest) (*UpdateNodeLabelsResponse, error) UpdateNodeAnnotations(context.Context, *UpdateNodeAnnotationsRequest) (*UpdateNodeAnnotationsResponse, error) UpdateNodeTaints(context.Context, *UpdateNodeTaintsRequest) (*UpdateNodeTaintsResponse, error) - // * cluster credential management + //* cluster credential management GetClusterCredential(context.Context, *GetClusterCredentialReq) (*GetClusterCredentialResp, error) UpdateClusterCredential(context.Context, *UpdateClusterCredentialReq) (*UpdateClusterCredentialResp, error) DeleteClusterCredential(context.Context, *DeleteClusterCredentialReq) (*DeleteClusterCredentialResp, error) ListClusterCredential(context.Context, *ListClusterCredentialReq) (*ListClusterCredentialResp, error) - // * federation cluster management + //* federation cluster management InitFederationCluster(context.Context, *InitFederationClusterReq) (*InitFederationClusterResp, error) AddFederatedCluster(context.Context, *AddFederatedClusterReq) (*AddFederatedClusterResp, error) - // * Cloud information management * + //* Cloud information management * CreateCloud(context.Context, *CreateCloudRequest) (*CreateCloudResponse, error) UpdateCloud(context.Context, *UpdateCloudRequest) (*UpdateCloudResponse, error) DeleteCloud(context.Context, *DeleteCloudRequest) (*DeleteCloudResponse, error) GetCloud(context.Context, *GetCloudRequest) (*GetCloudResponse, error) ListCloud(context.Context, *ListCloudRequest) (*ListCloudResponse, error) - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(context.Context, *CreateCloudVPCRequest) (*CreateCloudVPCResponse, error) UpdateCloudVPC(context.Context, *UpdateCloudVPCRequest) (*UpdateCloudVPCResponse, error) DeleteCloudVPC(context.Context, *DeleteCloudVPCRequest) (*DeleteCloudVPCResponse, error) ListCloudVPC(context.Context, *ListCloudVPCRequest) (*ListCloudVPCResponse, error) ListCloudRegions(context.Context, *ListCloudRegionsRequest) (*ListCloudRegionsResponse, error) GetVPCCidr(context.Context, *GetVPCCidrRequest) (*GetVPCCidrResponse, error) - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(context.Context, *CreateNodeGroupRequest) (*CreateNodeGroupResponse, error) UpdateNodeGroup(context.Context, *UpdateNodeGroupRequest) (*UpdateNodeGroupResponse, error) DeleteNodeGroup(context.Context, *DeleteNodeGroupRequest) (*DeleteNodeGroupResponse, error) @@ -33734,14 +33767,14 @@ type ClusterManagerServer interface { UpdateGroupMinMaxSize(context.Context, *UpdateGroupMinMaxSizeRequest) (*UpdateGroupMinMaxSizeResponse, error) EnableNodeGroupAutoScale(context.Context, *EnableNodeGroupAutoScaleRequest) (*EnableNodeGroupAutoScaleResponse, error) DisableNodeGroupAutoScale(context.Context, *DisableNodeGroupAutoScaleRequest) (*DisableNodeGroupAutoScaleResponse, error) - // * Task information management * + //* Task information management * CreateTask(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) RetryTask(context.Context, *RetryTaskRequest) (*RetryTaskResponse, error) UpdateTask(context.Context, *UpdateTaskRequest) (*UpdateTaskResponse, error) DeleteTask(context.Context, *DeleteTaskRequest) (*DeleteTaskResponse, error) GetTask(context.Context, *GetTaskRequest) (*GetTaskResponse, error) ListTask(context.Context, *ListTaskRequest) (*ListTaskResponse, error) - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(context.Context, *CreateAutoScalingOptionRequest) (*CreateAutoScalingOptionResponse, error) UpdateAutoScalingOption(context.Context, *UpdateAutoScalingOptionRequest) (*UpdateAutoScalingOptionResponse, error) DeleteAutoScalingOption(context.Context, *DeleteAutoScalingOptionRequest) (*DeleteAutoScalingOptionResponse, error) diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go index 2d3f2a7ffd..1d095b6173 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go @@ -11,11 +11,12 @@ import ( "net/mail" "net/url" "regexp" + "sort" "strings" "time" "unicode/utf8" - "github.com/golang/protobuf/ptypes" + "google.golang.org/protobuf/types/known/anypb" ) // ensure the imports are used @@ -30,19 +31,31 @@ var ( _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = ptypes.DynamicAny{} + _ = anypb.Any{} + _ = sort.Sort ) -// define the regex for a UUID once up-front -var _clustermanager_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") - // Validate checks the field values on Cluster with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Cluster) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Cluster with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in ClusterMultiError, or nil if none found. +func (m *Cluster) ValidateAll() error { + return m.validate(true) +} + +func (m *Cluster) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for ClusterName @@ -75,62 +88,168 @@ func (m *Cluster) Validate() error { // no validation rules for UpdateTime - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for SystemID // no validation rules for ManageType - for key, val := range m.GetMaster() { - _ = val + { + sorted_keys := make([]string, len(m.GetMaster())) + i := 0 + for key := range m.GetMaster() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetMaster()[key] + _ = val + + // no validation rules for Master[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for Master[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("Master[%v]", key), + errors = append(errors, ClusterValidationError{ + field: "NetworkSettings", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "NetworkSettings", @@ -140,7 +259,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "ClusterBasicSettings", @@ -150,7 +288,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "ClusterAdvanceSettings", @@ -160,7 +317,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "NodeSettings", @@ -171,19 +347,27 @@ func (m *Cluster) Validate() error { } if _, ok := _Cluster_Status_InLookup[m.GetStatus()]; !ok { - return ClusterValidationError{ + err := ClusterValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Updater if _, ok := _Cluster_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return ClusterValidationError{ + err := ClusterValidationError{ field: "NetworkType", reason: "value must be in list [underlay overlay ]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AutoGenerateMasterNodes @@ -191,7 +375,26 @@ func (m *Cluster) Validate() error { for idx, item := range m.GetTemplate() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Template[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Template[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: fmt.Sprintf("Template[%v]", idx), @@ -223,7 +426,26 @@ func (m *Cluster) Validate() error { // no validation rules for CloudAccountID - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "Area", @@ -233,7 +455,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "Module", @@ -243,7 +484,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterConnectSetting()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "ClusterConnectSetting", @@ -253,9 +513,29 @@ func (m *Cluster) Validate() error { } } + if len(errors) > 0 { + return ClusterMultiError(errors) + } + return nil } +// ClusterMultiError is an error wrapping multiple validation errors returned +// by Cluster.ValidateAll() if the designated constraints aren't met. +type ClusterMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterMultiError) AllErrors() []error { return m } + // ClusterValidationError is the validation error returned by Cluster.Validate // if the designated constraints aren't met. type ClusterValidationError struct { @@ -325,12 +605,26 @@ var _Cluster_NetworkType_InLookup = map[string]struct{}{ } // Validate checks the field values on Node with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Node) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Node with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in NodeMultiError, or nil if none found. +func (m *Node) ValidateAll() error { + return m.validate(true) +} + +func (m *Node) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -373,9 +667,29 @@ func (m *Node) Validate() error { // no validation rules for TaskID + if len(errors) > 0 { + return NodeMultiError(errors) + } + return nil } +// NodeMultiError is an error wrapping multiple validation errors returned by +// Node.ValidateAll() if the designated constraints aren't met. +type NodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeMultiError) AllErrors() []error { return m } + // NodeValidationError is the validation error returned by Node.Validate if the // designated constraints aren't met. type NodeValidationError struct { @@ -431,13 +745,27 @@ var _ interface { } = NodeValidationError{} // Validate checks the field values on NetworkSetting with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NetworkSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NetworkSetting with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NetworkSettingMultiError, +// or nil if none found. +func (m *NetworkSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *NetworkSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterIPv4CIDR // no validation rules for ServiceIPv4CIDR @@ -448,7 +776,26 @@ func (m *NetworkSetting) Validate() error { // no validation rules for EnableVPCCni - if v, ok := interface{}(m.GetSubnetSource()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSubnetSource()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NetworkSettingValidationError{ + field: "SubnetSource", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NetworkSettingValidationError{ + field: "SubnetSource", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSubnetSource()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NetworkSettingValidationError{ field: "SubnetSource", @@ -470,9 +817,30 @@ func (m *NetworkSetting) Validate() error { // no validation rules for ServiceIPv6CIDR + if len(errors) > 0 { + return NetworkSettingMultiError(errors) + } + return nil } +// NetworkSettingMultiError is an error wrapping multiple validation errors +// returned by NetworkSetting.ValidateAll() if the designated constraints +// aren't met. +type NetworkSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NetworkSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NetworkSettingMultiError) AllErrors() []error { return m } + // NetworkSettingValidationError is the validation error returned by // NetworkSetting.Validate if the designated constraints aren't met. type NetworkSettingValidationError struct { @@ -528,17 +896,50 @@ var _ interface { } = NetworkSettingValidationError{} // Validate checks the field values on SubnetSource with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *SubnetSource) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SubnetSource with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in SubnetSourceMultiError, or +// nil if none found. +func (m *SubnetSource) ValidateAll() error { + return m.validate(true) +} + +func (m *SubnetSource) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNew() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: fmt.Sprintf("New[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: fmt.Sprintf("New[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SubnetSourceValidationError{ field: fmt.Sprintf("New[%v]", idx), @@ -550,7 +951,26 @@ func (m *SubnetSource) Validate() error { } - if v, ok := interface{}(m.GetExisted()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExisted()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: "Existed", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: "Existed", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExisted()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SubnetSourceValidationError{ field: "Existed", @@ -560,9 +980,29 @@ func (m *SubnetSource) Validate() error { } } + if len(errors) > 0 { + return SubnetSourceMultiError(errors) + } + return nil } +// SubnetSourceMultiError is an error wrapping multiple validation errors +// returned by SubnetSource.ValidateAll() if the designated constraints aren't met. +type SubnetSourceMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubnetSourceMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SubnetSourceMultiError) AllErrors() []error { return m } + // SubnetSourceValidationError is the validation error returned by // SubnetSource.Validate if the designated constraints aren't met. type SubnetSourceValidationError struct { @@ -618,16 +1058,51 @@ var _ interface { } = SubnetSourceValidationError{} // Validate checks the field values on ExistedSubnetIDs with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ExistedSubnetIDs) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExistedSubnetIDs with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ExistedSubnetIDsMultiError, or nil if none found. +func (m *ExistedSubnetIDs) ValidateAll() error { + return m.validate(true) +} + +func (m *ExistedSubnetIDs) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ExistedSubnetIDsMultiError(errors) + } + return nil } +// ExistedSubnetIDsMultiError is an error wrapping multiple validation errors +// returned by ExistedSubnetIDs.ValidateAll() if the designated constraints +// aren't met. +type ExistedSubnetIDsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExistedSubnetIDsMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ExistedSubnetIDsMultiError) AllErrors() []error { return m } + // ExistedSubnetIDsValidationError is the validation error returned by // ExistedSubnetIDs.Validate if the designated constraints aren't met. type ExistedSubnetIDsValidationError struct { @@ -683,21 +1158,56 @@ var _ interface { } = ExistedSubnetIDsValidationError{} // Validate checks the field values on NewSubnet with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NewSubnet) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NewSubnet with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NewSubnetMultiError, or nil +// if none found. +func (m *NewSubnet) ValidateAll() error { + return m.validate(true) +} + +func (m *NewSubnet) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Mask // no validation rules for Zone // no validation rules for IpCnt + if len(errors) > 0 { + return NewSubnetMultiError(errors) + } + return nil } +// NewSubnetMultiError is an error wrapping multiple validation errors returned +// by NewSubnet.ValidateAll() if the designated constraints aren't met. +type NewSubnetMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NewSubnetMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NewSubnetMultiError) AllErrors() []error { return m } + // NewSubnetValidationError is the validation error returned by // NewSubnet.Validate if the designated constraints aren't met. type NewSubnetValidationError struct { @@ -754,12 +1264,26 @@ var _ interface { // Validate checks the field values on ClusterBasicSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterBasicSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterBasicSetting with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterBasicSettingMultiError, or nil if none found. +func (m *ClusterBasicSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterBasicSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for OS // no validation rules for Version @@ -774,9 +1298,30 @@ func (m *ClusterBasicSetting) Validate() error { // no validation rules for IsAutoUpgradeClusterLevel + if len(errors) > 0 { + return ClusterBasicSettingMultiError(errors) + } + return nil } +// ClusterBasicSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterBasicSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterBasicSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterBasicSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterBasicSettingMultiError) AllErrors() []error { return m } + // ClusterBasicSettingValidationError is the validation error returned by // ClusterBasicSetting.Validate if the designated constraints aren't met. type ClusterBasicSettingValidationError struct { @@ -835,12 +1380,26 @@ var _ interface { // Validate checks the field values on ClusterAdvanceSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterAdvanceSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterAdvanceSetting with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterAdvanceSettingMultiError, or nil if none found. +func (m *ClusterAdvanceSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterAdvanceSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IPVS // no validation rules for ContainerRuntime @@ -857,9 +1416,30 @@ func (m *ClusterAdvanceSetting) Validate() error { // no validation rules for EnableHa + if len(errors) > 0 { + return ClusterAdvanceSettingMultiError(errors) + } + return nil } +// ClusterAdvanceSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterAdvanceSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterAdvanceSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterAdvanceSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterAdvanceSettingMultiError) AllErrors() []error { return m } + // ClusterAdvanceSettingValidationError is the validation error returned by // ClusterAdvanceSetting.Validate if the designated constraints aren't met. type ClusterAdvanceSettingValidationError struct { @@ -918,12 +1498,26 @@ var _ interface { // Validate checks the field values on ClusterConnectSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterConnectSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterConnectSetting with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterConnectSettingMultiError, or nil if none found. +func (m *ClusterConnectSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterConnectSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsExtranet // no validation rules for SubnetId @@ -932,7 +1526,26 @@ func (m *ClusterConnectSetting) Validate() error { // no validation rules for SecurityGroup - if v, ok := interface{}(m.GetInternet()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternet()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterConnectSettingValidationError{ + field: "Internet", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterConnectSettingValidationError{ + field: "Internet", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternet()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterConnectSettingValidationError{ field: "Internet", @@ -942,9 +1555,30 @@ func (m *ClusterConnectSetting) Validate() error { } } + if len(errors) > 0 { + return ClusterConnectSettingMultiError(errors) + } + return nil } +// ClusterConnectSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterConnectSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterConnectSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterConnectSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterConnectSettingMultiError) AllErrors() []error { return m } + // ClusterConnectSettingValidationError is the validation error returned by // ClusterConnectSetting.Validate if the designated constraints aren't met. type ClusterConnectSettingValidationError struct { @@ -1002,13 +1636,27 @@ var _ interface { } = ClusterConnectSettingValidationError{} // Validate checks the field values on NodeSetting with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeSetting with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeSettingMultiError, or +// nil if none found. +func (m *NodeSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DockerGraphPath // no validation rules for MountTarget @@ -1023,7 +1671,26 @@ func (m *NodeSetting) Validate() error { // no validation rules for InitLoginPassword - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeSettingValidationError{ field: "KeyPair", @@ -1036,7 +1703,26 @@ func (m *NodeSetting) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeSettingValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -1048,9 +1734,29 @@ func (m *NodeSetting) Validate() error { } + if len(errors) > 0 { + return NodeSettingMultiError(errors) + } + return nil } +// NodeSettingMultiError is an error wrapping multiple validation errors +// returned by NodeSetting.ValidateAll() if the designated constraints aren't met. +type NodeSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeSettingMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeSettingMultiError) AllErrors() []error { return m } + // NodeSettingValidationError is the validation error returned by // NodeSetting.Validate if the designated constraints aren't met. type NodeSettingValidationError struct { @@ -1106,13 +1812,27 @@ var _ interface { } = NodeSettingValidationError{} // Validate checks the field values on ClusterCredential with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ClusterCredential) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterCredential with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterCredentialMultiError, or nil if none found. +func (m *ClusterCredential) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterCredential) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ServerKey // no validation rules for ClusterID @@ -1137,9 +1857,30 @@ func (m *ClusterCredential) Validate() error { // no validation rules for ClientKey + if len(errors) > 0 { + return ClusterCredentialMultiError(errors) + } + return nil } +// ClusterCredentialMultiError is an error wrapping multiple validation errors +// returned by ClusterCredential.ValidateAll() if the designated constraints +// aren't met. +type ClusterCredentialMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterCredentialMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterCredentialMultiError) AllErrors() []error { return m } + // ClusterCredentialValidationError is the validation error returned by // ClusterCredential.Validate if the designated constraints aren't met. type ClusterCredentialValidationError struct { @@ -1197,12 +1938,27 @@ var _ interface { } = ClusterCredentialValidationError{} // Validate checks the field values on Namespace with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Namespace) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Namespace with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NamespaceMultiError, or nil +// if none found. +func (m *Namespace) ValidateAll() error { + return m.validate(true) +} + +func (m *Namespace) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for FederationClusterID @@ -1222,7 +1978,26 @@ func (m *Namespace) Validate() error { for idx, item := range m.GetQuotaList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NamespaceValidationError{ + field: fmt.Sprintf("QuotaList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NamespaceValidationError{ + field: fmt.Sprintf("QuotaList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NamespaceValidationError{ field: fmt.Sprintf("QuotaList[%v]", idx), @@ -1234,9 +2009,29 @@ func (m *Namespace) Validate() error { } + if len(errors) > 0 { + return NamespaceMultiError(errors) + } + return nil } +// NamespaceMultiError is an error wrapping multiple validation errors returned +// by Namespace.ValidateAll() if the designated constraints aren't met. +type NamespaceMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NamespaceMultiError) AllErrors() []error { return m } + // NamespaceValidationError is the validation error returned by // Namespace.Validate if the designated constraints aren't met. type NamespaceValidationError struct { @@ -1292,13 +2087,27 @@ var _ interface { } = NamespaceValidationError{} // Validate checks the field values on ResourceQuota with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ResourceQuota) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ResourceQuota with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ResourceQuotaMultiError, or +// nil if none found. +func (m *ResourceQuota) ValidateAll() error { + return m.validate(true) +} + +func (m *ResourceQuota) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Namespace // no validation rules for FederationClusterID @@ -1317,9 +2126,30 @@ func (m *ResourceQuota) Validate() error { // no validation rules for Message + if len(errors) > 0 { + return ResourceQuotaMultiError(errors) + } + return nil } +// ResourceQuotaMultiError is an error wrapping multiple validation errors +// returned by ResourceQuota.ValidateAll() if the designated constraints +// aren't met. +type ResourceQuotaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ResourceQuotaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ResourceQuotaMultiError) AllErrors() []error { return m } + // ResourceQuotaValidationError is the validation error returned by // ResourceQuota.Validate if the designated constraints aren't met. type ResourceQuotaValidationError struct { @@ -1375,12 +2205,27 @@ var _ interface { } = ResourceQuotaValidationError{} // Validate checks the field values on Credential with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Credential) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Credential with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CredentialMultiError, or +// nil if none found. +func (m *Credential) ValidateAll() error { + return m.validate(true) +} + +func (m *Credential) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Secret @@ -1399,9 +2244,29 @@ func (m *Credential) Validate() error { // no validation rules for GkeProjectID + if len(errors) > 0 { + return CredentialMultiError(errors) + } + return nil } +// CredentialMultiError is an error wrapping multiple validation errors +// returned by Credential.ValidateAll() if the designated constraints aren't met. +type CredentialMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CredentialMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CredentialMultiError) AllErrors() []error { return m } + // CredentialValidationError is the validation error returned by // Credential.Validate if the designated constraints aren't met. type CredentialValidationError struct { @@ -1457,13 +2322,27 @@ var _ interface { } = CredentialValidationError{} // Validate checks the field values on BKOpsPlugin with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *BKOpsPlugin) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BKOpsPlugin with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in BKOpsPluginMultiError, or +// nil if none found. +func (m *BKOpsPlugin) ValidateAll() error { + return m.validate(true) +} + +func (m *BKOpsPlugin) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for System // no validation rules for Link @@ -1472,9 +2351,29 @@ func (m *BKOpsPlugin) Validate() error { // no validation rules for AllowSkipWhenFailed + if len(errors) > 0 { + return BKOpsPluginMultiError(errors) + } + return nil } +// BKOpsPluginMultiError is an error wrapping multiple validation errors +// returned by BKOpsPlugin.ValidateAll() if the designated constraints aren't met. +type BKOpsPluginMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BKOpsPluginMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BKOpsPluginMultiError) AllErrors() []error { return m } + // BKOpsPluginValidationError is the validation error returned by // BKOpsPlugin.Validate if the designated constraints aren't met. type BKOpsPluginValidationError struct { @@ -1530,32 +2429,95 @@ var _ interface { } = BKOpsPluginValidationError{} // Validate checks the field values on Action with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Action) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Action with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in ActionMultiError, or nil if none found. +func (m *Action) ValidateAll() error { + return m.validate(true) +} + +func (m *Action) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPlugins() { - _ = val + var errors []error - // no validation rules for Plugins[key] + { + sorted_keys := make([]string, len(m.GetPlugins())) + i := 0 + for key := range m.GetPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPlugins()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ActionValidationError{ - field: fmt.Sprintf("Plugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Plugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return ActionMultiError(errors) } return nil } +// ActionMultiError is an error wrapping multiple validation errors returned by +// Action.ValidateAll() if the designated constraints aren't met. +type ActionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ActionMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ActionMultiError) AllErrors() []error { return m } + // ActionValidationError is the validation error returned by Action.Validate if // the designated constraints aren't met. type ActionValidationError struct { @@ -1611,13 +2573,47 @@ var _ interface { } = ActionValidationError{} // Validate checks the field values on ClusterMgr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ClusterMgr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterMgr with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ClusterMgrMultiError, or +// nil if none found. +func (m *ClusterMgr) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterMgr) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetCreateCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "CreateCluster", @@ -1627,7 +2623,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "DeleteCluster", @@ -1637,7 +2652,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetAddNodesToCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAddNodesToCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "AddNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "AddNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAddNodesToCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "AddNodesToCluster", @@ -1647,7 +2681,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodesFromCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodesFromCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodesFromCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "DeleteNodesFromCluster", @@ -1657,7 +2710,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetImportCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImportCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "ImportCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "ImportCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImportCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "ImportCluster", @@ -1667,9 +2739,29 @@ func (m *ClusterMgr) Validate() error { } } + if len(errors) > 0 { + return ClusterMgrMultiError(errors) + } + return nil } +// ClusterMgrMultiError is an error wrapping multiple validation errors +// returned by ClusterMgr.ValidateAll() if the designated constraints aren't met. +type ClusterMgrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterMgrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterMgrMultiError) AllErrors() []error { return m } + // ClusterMgrValidationError is the validation error returned by // ClusterMgr.Validate if the designated constraints aren't met. type ClusterMgrValidationError struct { @@ -1725,14 +2817,47 @@ var _ interface { } = ClusterMgrValidationError{} // Validate checks the field values on NodeGroupMgr with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeGroupMgr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroupMgr with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeGroupMgrMultiError, or +// nil if none found. +func (m *NodeGroupMgr) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroupMgr) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetCreateNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "CreateNodeGroup", @@ -1742,7 +2867,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "DeleteNodeGroup", @@ -1752,7 +2896,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetMoveNodesToGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMoveNodesToGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "MoveNodesToGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "MoveNodesToGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMoveNodesToGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "MoveNodesToGroup", @@ -1762,7 +2925,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetRemoveNodesFromGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRemoveNodesFromGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "RemoveNodesFromGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "RemoveNodesFromGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRemoveNodesFromGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "RemoveNodesFromGroup", @@ -1772,7 +2954,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetCleanNodesInGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCleanNodesInGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CleanNodesInGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CleanNodesInGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCleanNodesInGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "CleanNodesInGroup", @@ -1782,7 +2983,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetUpdateDesiredNodes()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUpdateDesiredNodes()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "UpdateDesiredNodes", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "UpdateDesiredNodes", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdateDesiredNodes()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "UpdateDesiredNodes", @@ -1792,7 +3012,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetAddExternalNodesToCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAddExternalNodesToCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "AddExternalNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "AddExternalNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAddExternalNodesToCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "AddExternalNodesToCluster", @@ -1802,7 +3041,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteExternalNodesFromCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteExternalNodesFromCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteExternalNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteExternalNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteExternalNodesFromCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "DeleteExternalNodesFromCluster", @@ -1812,9 +3070,29 @@ func (m *NodeGroupMgr) Validate() error { } } + if len(errors) > 0 { + return NodeGroupMgrMultiError(errors) + } + return nil } +// NodeGroupMgrMultiError is an error wrapping multiple validation errors +// returned by NodeGroupMgr.ValidateAll() if the designated constraints aren't met. +type NodeGroupMgrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupMgrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeGroupMgrMultiError) AllErrors() []error { return m } + // NodeGroupMgrValidationError is the validation error returned by // NodeGroupMgr.Validate if the designated constraints aren't met. type NodeGroupMgrValidationError struct { @@ -1870,17 +3148,51 @@ var _ interface { } = NodeGroupMgrValidationError{} // Validate checks the field values on OSInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OSInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OSInfo with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in OSInfoMultiError, or nil if none found. +func (m *OSInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *OSInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Regions + if len(errors) > 0 { + return OSInfoMultiError(errors) + } + return nil } +// OSInfoMultiError is an error wrapping multiple validation errors returned by +// OSInfo.ValidateAll() if the designated constraints aren't met. +type OSInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OSInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OSInfoMultiError) AllErrors() []error { return m } + // OSInfoValidationError is the validation error returned by OSInfo.Validate if // the designated constraints aren't met. type OSInfoValidationError struct { @@ -1936,12 +3248,26 @@ var _ interface { } = OSInfoValidationError{} // Validate checks the field values on Account with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Account) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Account with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in AccountMultiError, or nil if none found. +func (m *Account) ValidateAll() error { + return m.validate(true) +} + +func (m *Account) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for SecretID // no validation rules for SecretKey @@ -1960,9 +3286,29 @@ func (m *Account) Validate() error { // no validation rules for GkeProjectID + if len(errors) > 0 { + return AccountMultiError(errors) + } + return nil } +// AccountMultiError is an error wrapping multiple validation errors returned +// by Account.ValidateAll() if the designated constraints aren't met. +type AccountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AccountMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AccountMultiError) AllErrors() []error { return m } + // AccountValidationError is the validation error returned by Account.Validate // if the designated constraints aren't met. type AccountValidationError struct { @@ -2018,13 +3364,27 @@ var _ interface { } = AccountValidationError{} // Validate checks the field values on CloudAccount with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudAccount) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccount with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudAccountMultiError, or +// nil if none found. +func (m *CloudAccount) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccount) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for ProjectID @@ -2035,7 +3395,26 @@ func (m *CloudAccount) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudAccountValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudAccountValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudAccountValidationError{ field: "Account", @@ -2055,9 +3434,29 @@ func (m *CloudAccount) Validate() error { // no validation rules for UpdateTime + if len(errors) > 0 { + return CloudAccountMultiError(errors) + } + return nil } +// CloudAccountMultiError is an error wrapping multiple validation errors +// returned by CloudAccount.ValidateAll() if the designated constraints aren't met. +type CloudAccountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAccountMultiError) AllErrors() []error { return m } + // CloudAccountValidationError is the validation error returned by // CloudAccount.Validate if the designated constraints aren't met. type CloudAccountValidationError struct { @@ -2114,36 +3513,81 @@ var _ interface { // Validate checks the field values on CreateCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudAccountRequestMultiError, or nil if none found. +func (m *CreateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountName()) < 1 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "AccountName", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountRequestValidationError{ field: "Account", @@ -2153,7 +3597,26 @@ func (m *CreateCloudAccountRequest) Validate() error { } } - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountRequestValidationError{ field: "Enable", @@ -2164,29 +3627,62 @@ func (m *CreateCloudAccountRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 1024 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudAccountRequest_Creator_Pattern.MatchString(m.GetCreator()) { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "Creator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) < 2 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "ProjectID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CreateCloudAccountRequestMultiError(errors) } return nil } +// CreateCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by CreateCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type CreateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudAccountRequestMultiError) AllErrors() []error { return m } + // CreateCloudAccountRequestValidationError is the validation error returned by // CreateCloudAccountRequest.Validate if the designated constraints aren't met. type CreateCloudAccountRequestValidationError struct { @@ -2249,19 +3745,52 @@ var _CreateCloudAccountRequest_Creator_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on CreateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudAccountResponseMultiError, or nil if none found. +func (m *CreateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountResponseValidationError{ field: "Data", @@ -2271,9 +3800,30 @@ func (m *CreateCloudAccountResponse) Validate() error { } } + if len(errors) > 0 { + return CreateCloudAccountResponseMultiError(errors) + } + return nil } +// CreateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by CreateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type CreateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudAccountResponseMultiError) AllErrors() []error { return m } + // CreateCloudAccountResponseValidationError is the validation error returned // by CreateCloudAccountResponse.Validate if the designated constraints aren't met. type CreateCloudAccountResponseValidationError struct { @@ -2332,45 +3882,94 @@ var _ interface { // Validate checks the field values on UpdateCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudAccountRequestMultiError, or nil if none found. +func (m *UpdateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetAccountID()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "AccountID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudAccountRequest_AccountID_Pattern.MatchString(m.GetAccountID()) { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "AccountID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountName // no validation rules for Desc - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudAccountRequestValidationError{ field: "Enable", @@ -2383,20 +3982,47 @@ func (m *UpdateCloudAccountRequest) Validate() error { // no validation rules for ProjectID if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudAccountRequest_Updater_Pattern.MatchString(m.GetUpdater()) { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "Updater", reason: "value does not match regex pattern \"^[0-9a-zA-Z]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudAccountRequestValidationError{ field: "Account", @@ -2406,9 +4032,30 @@ func (m *UpdateCloudAccountRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudAccountRequestMultiError(errors) + } + return nil } +// UpdateCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type UpdateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudAccountRequestMultiError) AllErrors() []error { return m } + // UpdateCloudAccountRequestValidationError is the validation error returned by // UpdateCloudAccountRequest.Validate if the designated constraints aren't met. type UpdateCloudAccountRequestValidationError struct { @@ -2473,21 +4120,56 @@ var _UpdateCloudAccountRequest_Updater_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on UpdateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudAccountResponseMultiError, or nil if none found. +func (m *UpdateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateCloudAccountResponseMultiError(errors) + } + return nil } +// UpdateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudAccountResponseMultiError) AllErrors() []error { return m } + // UpdateCloudAccountResponseValidationError is the validation error returned // by UpdateCloudAccountResponse.Validate if the designated constraints aren't met. type UpdateCloudAccountResponseValidationError struct { @@ -2546,29 +4228,70 @@ var _ interface { // Validate checks the field values on MigrateCloudAccountRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MigrateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MigrateCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MigrateCloudAccountRequestMultiError, or nil if none found. +func (m *MigrateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *MigrateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return MigrateCloudAccountRequestValidationError{ + err := MigrateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_MigrateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return MigrateCloudAccountRequestValidationError{ + err := MigrateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountIDs - if v, ok := interface{}(m.GetEncrypt()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEncrypt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MigrateCloudAccountRequestValidationError{ + field: "Encrypt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MigrateCloudAccountRequestValidationError{ + field: "Encrypt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEncrypt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MigrateCloudAccountRequestValidationError{ field: "Encrypt", @@ -2580,9 +4303,30 @@ func (m *MigrateCloudAccountRequest) Validate() error { // no validation rules for All + if len(errors) > 0 { + return MigrateCloudAccountRequestMultiError(errors) + } + return nil } +// MigrateCloudAccountRequestMultiError is an error wrapping multiple +// validation errors returned by MigrateCloudAccountRequest.ValidateAll() if +// the designated constraints aren't met. +type MigrateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MigrateCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MigrateCloudAccountRequestMultiError) AllErrors() []error { return m } + // MigrateCloudAccountRequestValidationError is the validation error returned // by MigrateCloudAccountRequest.Validate if the designated constraints aren't met. type MigrateCloudAccountRequestValidationError struct { @@ -2642,22 +4386,57 @@ var _ interface { var _MigrateCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on OriginEncrypt with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OriginEncrypt) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OriginEncrypt with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in OriginEncryptMultiError, or +// nil if none found. +func (m *OriginEncrypt) ValidateAll() error { + return m.validate(true) +} + +func (m *OriginEncrypt) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for EncryptType // no validation rules for Kv // no validation rules for Iv + if len(errors) > 0 { + return OriginEncryptMultiError(errors) + } + return nil } +// OriginEncryptMultiError is an error wrapping multiple validation errors +// returned by OriginEncrypt.ValidateAll() if the designated constraints +// aren't met. +type OriginEncryptMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OriginEncryptMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OriginEncryptMultiError) AllErrors() []error { return m } + // OriginEncryptValidationError is the validation error returned by // OriginEncrypt.Validate if the designated constraints aren't met. type OriginEncryptValidationError struct { @@ -2714,21 +4493,56 @@ var _ interface { // Validate checks the field values on MigrateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MigrateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MigrateCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MigrateCloudAccountResponseMultiError, or nil if none found. +func (m *MigrateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *MigrateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return MigrateCloudAccountResponseMultiError(errors) + } + return nil } +// MigrateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by MigrateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type MigrateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MigrateCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MigrateCloudAccountResponseMultiError) AllErrors() []error { return m } + // MigrateCloudAccountResponseValidationError is the validation error returned // by MigrateCloudAccountResponse.Validate if the designated constraints // aren't met. @@ -2788,43 +4602,94 @@ var _ interface { // Validate checks the field values on DeleteCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudAccountRequestMultiError, or nil if none found. +func (m *DeleteCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetAccountID()); l < 2 || l > 1024 { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "AccountID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudAccountRequest_AccountID_Pattern.MatchString(m.GetAccountID()) { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "AccountID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCloudAccountRequestMultiError(errors) } return nil } +// DeleteCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type DeleteCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudAccountRequestMultiError) AllErrors() []error { return m } + // DeleteCloudAccountRequestValidationError is the validation error returned by // DeleteCloudAccountRequest.Validate if the designated constraints aren't met. type DeleteCloudAccountRequestValidationError struct { @@ -2887,21 +4752,56 @@ var _DeleteCloudAccountRequest_AccountID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on DeleteCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudAccountResponseMultiError, or nil if none found. +func (m *DeleteCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return DeleteCloudAccountResponseMultiError(errors) + } + return nil } +// DeleteCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type DeleteCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudAccountResponseMultiError) AllErrors() []error { return m } + // DeleteCloudAccountResponseValidationError is the validation error returned // by DeleteCloudAccountResponse.Validate if the designated constraints aren't met. type DeleteCloudAccountResponseValidationError struct { @@ -2960,19 +4860,54 @@ var _ interface { // Validate checks the field values on ListCloudAccountPermRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountPermRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountPermRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountPermRequestMultiError, or nil if none found. +func (m *ListCloudAccountPermRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountPermRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for AccountName + if len(errors) > 0 { + return ListCloudAccountPermRequestMultiError(errors) + } + return nil } +// ListCloudAccountPermRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudAccountPermRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudAccountPermRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountPermRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountPermRequestMultiError) AllErrors() []error { return m } + // ListCloudAccountPermRequestValidationError is the validation error returned // by ListCloudAccountPermRequest.Validate if the designated constraints // aren't met. @@ -3032,12 +4967,26 @@ var _ interface { // Validate checks the field values on ListCloudAccountPermResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountPermResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountPermResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountPermResponseMultiError, or nil if none found. +func (m *ListCloudAccountPermResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountPermResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -3047,7 +4996,26 @@ func (m *ListCloudAccountPermResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountPermResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountPermResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudAccountPermResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -3059,9 +5027,30 @@ func (m *ListCloudAccountPermResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudAccountPermResponseMultiError(errors) + } + return nil } +// ListCloudAccountPermResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudAccountPermResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudAccountPermResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountPermResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountPermResponseMultiError) AllErrors() []error { return m } + // ListCloudAccountPermResponseValidationError is the validation error returned // by ListCloudAccountPermResponse.Validate if the designated constraints // aren't met. @@ -3121,17 +5110,35 @@ var _ interface { // Validate checks the field values on ListCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountRequestMultiError, or nil if none found. +func (m *ListCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 1024 { - return ListCloudAccountRequestValidationError{ + err := ListCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID @@ -3140,9 +5147,30 @@ func (m *ListCloudAccountRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return ListCloudAccountRequestMultiError(errors) + } + return nil } +// ListCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudAccountRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountRequestMultiError) AllErrors() []error { return m } + // ListCloudAccountRequestValidationError is the validation error returned by // ListCloudAccountRequest.Validate if the designated constraints aren't met. type ListCloudAccountRequestValidationError struct { @@ -3201,29 +5229,70 @@ var _ interface { // Validate checks the field values on VerifyCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *VerifyCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VerifyCloudAccountRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// VerifyCloudAccountRequestMultiError, or nil if none found. +func (m *VerifyCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *VerifyCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return VerifyCloudAccountRequestValidationError{ + err := VerifyCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_VerifyCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return VerifyCloudAccountRequestValidationError{ + err := VerifyCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, VerifyCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, VerifyCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return VerifyCloudAccountRequestValidationError{ field: "Account", @@ -3233,9 +5302,30 @@ func (m *VerifyCloudAccountRequest) Validate() error { } } + if len(errors) > 0 { + return VerifyCloudAccountRequestMultiError(errors) + } + return nil } +// VerifyCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by VerifyCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type VerifyCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VerifyCloudAccountRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m VerifyCloudAccountRequestMultiError) AllErrors() []error { return m } + // VerifyCloudAccountRequestValidationError is the validation error returned by // VerifyCloudAccountRequest.Validate if the designated constraints aren't met. type VerifyCloudAccountRequestValidationError struct { @@ -3296,21 +5386,56 @@ var _VerifyCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on VerifyCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *VerifyCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VerifyCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// VerifyCloudAccountResponseMultiError, or nil if none found. +func (m *VerifyCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *VerifyCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return VerifyCloudAccountResponseMultiError(errors) + } + return nil } +// VerifyCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by VerifyCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type VerifyCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VerifyCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m VerifyCloudAccountResponseMultiError) AllErrors() []error { return m } + // VerifyCloudAccountResponseValidationError is the validation error returned // by VerifyCloudAccountResponse.Validate if the designated constraints aren't met. type VerifyCloudAccountResponseValidationError struct { @@ -3368,14 +5493,47 @@ var _ interface { } = VerifyCloudAccountResponseValidationError{} // Validate checks the field values on CloudAccountInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudAccountInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccountInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudAccountInfoMultiError, or nil if none found. +func (m *CloudAccountInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccountInfo) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudAccountInfoValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudAccountInfoValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudAccountInfoValidationError{ field: "Account", @@ -3385,9 +5543,30 @@ func (m *CloudAccountInfo) Validate() error { } } + if len(errors) > 0 { + return CloudAccountInfoMultiError(errors) + } + return nil } +// CloudAccountInfoMultiError is an error wrapping multiple validation errors +// returned by CloudAccountInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudAccountInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAccountInfoMultiError) AllErrors() []error { return m } + // CloudAccountInfoValidationError is the validation error returned by // CloudAccountInfo.Validate if the designated constraints aren't met. type CloudAccountInfoValidationError struct { @@ -3444,12 +5623,26 @@ var _ interface { // Validate checks the field values on ListCloudAccountResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudAccountResponseMultiError, or nil if none found. +func (m *ListCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -3459,7 +5652,26 @@ func (m *ListCloudAccountResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudAccountResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -3471,7 +5683,26 @@ func (m *ListCloudAccountResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudAccountResponseValidationError{ field: "WebAnnotations", @@ -3481,9 +5712,30 @@ func (m *ListCloudAccountResponse) Validate() error { } } + if len(errors) > 0 { + return ListCloudAccountResponseMultiError(errors) + } + return nil } +// ListCloudAccountResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudAccountResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudAccountResponseMultiError) AllErrors() []error { return m } + // ListCloudAccountResponseValidationError is the validation error returned by // ListCloudAccountResponse.Validate if the designated constraints aren't met. type ListCloudAccountResponseValidationError struct { @@ -3541,12 +5793,27 @@ var _ interface { } = ListCloudAccountResponseValidationError{} // Validate checks the field values on CloudVPC with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudVPC) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVPC with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudVPCMultiError, or nil +// if none found. +func (m *CloudVPC) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVPC) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Region @@ -3575,9 +5842,29 @@ func (m *CloudVPC) Validate() error { // no validation rules for BusinessID + if len(errors) > 0 { + return CloudVPCMultiError(errors) + } + return nil } +// CloudVPCMultiError is an error wrapping multiple validation errors returned +// by CloudVPC.ValidateAll() if the designated constraints aren't met. +type CloudVPCMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVPCMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudVPCMultiError) AllErrors() []error { return m } + // CloudVPCValidationError is the validation error returned by // CloudVPC.Validate if the designated constraints aren't met. type CloudVPCValidationError struct { @@ -3634,107 +5921,190 @@ var _ interface { // Validate checks the field values on CreateCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudVPCRequestMultiError, or nil if none found. +func (m *CreateCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateCloudVPCRequest_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "NetworkType", reason: "value must be in list [overlay underlay]", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Region", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_Region_Pattern.MatchString(m.GetRegion()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for RegionName if l := utf8.RuneCountInString(m.GetVpcName()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcName", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_VpcName_Pattern.MatchString(m.GetVpcName()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcName", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateCloudVPCRequest_Available_InLookup[m.GetAvailable()]; !ok { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Available", reason: "value must be in list [true false]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Extra if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_Creator_Pattern.MatchString(m.GetCreator()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Creator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ReservedIPNum // no validation rules for BusinessID + if len(errors) > 0 { + return CreateCloudVPCRequestMultiError(errors) + } + return nil } +// CreateCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by CreateCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudVPCRequestMultiError) AllErrors() []error { return m } + // CreateCloudVPCRequestValidationError is the validation error returned by // CreateCloudVPCRequest.Validate if the designated constraints aren't met. type CreateCloudVPCRequestValidationError struct { @@ -3813,21 +6183,56 @@ var _CreateCloudVPCRequest_Creator_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$ // Validate checks the field values on CreateCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudVPCResponseMultiError, or nil if none found. +func (m *CreateCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return CreateCloudVPCResponseMultiError(errors) + } + return nil } +// CreateCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by CreateCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudVPCResponseMultiError) AllErrors() []error { return m } + // CreateCloudVPCResponseValidationError is the validation error returned by // CreateCloudVPCResponse.Validate if the designated constraints aren't met. type CreateCloudVPCResponseValidationError struct { @@ -3886,24 +6291,46 @@ var _ interface { // Validate checks the field values on UpdateCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudVPCRequestMultiError, or nil if none found. +func (m *UpdateCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NetworkType @@ -3915,41 +6342,80 @@ func (m *UpdateCloudVPCRequest) Validate() error { // no validation rules for VpcName if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateCloudVPCRequest_Available_InLookup[m.GetAvailable()]; !ok { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "Available", reason: "value must be in list [ true false]", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudVPCRequest_Updater_Pattern.MatchString(m.GetUpdater()) { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "Updater", reason: "value does not match regex pattern \"^[0-9a-zA-Z]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetReservedIPNum()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetReservedIPNum()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "ReservedIPNum", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "ReservedIPNum", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetReservedIPNum()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "ReservedIPNum", @@ -3959,7 +6425,26 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } - if v, ok := interface{}(m.GetBusinessID()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBusinessID()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "BusinessID", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "BusinessID", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBusinessID()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "BusinessID", @@ -3969,9 +6454,30 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudVPCRequestMultiError(errors) + } + return nil } +// UpdateCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudVPCRequestMultiError) AllErrors() []error { return m } + // UpdateCloudVPCRequestValidationError is the validation error returned by // UpdateCloudVPCRequest.Validate if the designated constraints aren't met. type UpdateCloudVPCRequestValidationError struct { @@ -4042,19 +6548,52 @@ var _UpdateCloudVPCRequest_Updater_Pattern = regexp.MustCompile("^[0-9a-zA-Z]+$" // Validate checks the field values on UpdateCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudVPCResponseMultiError, or nil if none found. +func (m *UpdateCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCResponseValidationError{ field: "Data", @@ -4064,9 +6603,30 @@ func (m *UpdateCloudVPCResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudVPCResponseMultiError(errors) + } + return nil } +// UpdateCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudVPCResponseMultiError) AllErrors() []error { return m } + // UpdateCloudVPCResponseValidationError is the validation error returned by // UpdateCloudVPCResponse.Validate if the designated constraints aren't met. type UpdateCloudVPCResponseValidationError struct { @@ -4125,43 +6685,94 @@ var _ interface { // Validate checks the field values on DeleteCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudVPCRequestMultiError, or nil if none found. +func (m *DeleteCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCloudVPCRequestMultiError(errors) } return nil } +// DeleteCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudVPCRequestMultiError) AllErrors() []error { return m } + // DeleteCloudVPCRequestValidationError is the validation error returned by // DeleteCloudVPCRequest.Validate if the designated constraints aren't met. type DeleteCloudVPCRequestValidationError struct { @@ -4224,19 +6835,52 @@ var _DeleteCloudVPCRequest_VpcID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudVPCResponseMultiError, or nil if none found. +func (m *DeleteCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteCloudVPCResponseValidationError{ field: "Data", @@ -4246,9 +6890,30 @@ func (m *DeleteCloudVPCResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteCloudVPCResponseMultiError(errors) + } + return nil } +// DeleteCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudVPCResponseMultiError) AllErrors() []error { return m } + // DeleteCloudVPCResponseValidationError is the validation error returned by // DeleteCloudVPCResponse.Validate if the designated constraints aren't met. type DeleteCloudVPCResponseValidationError struct { @@ -4307,17 +6972,35 @@ var _ interface { // Validate checks the field values on ListCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVPCRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVPCRequestMultiError, or nil if none found. +func (m *ListCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudVPCRequestValidationError{ + err := ListCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -4325,17 +7008,42 @@ func (m *ListCloudVPCRequest) Validate() error { // no validation rules for VpcID if _, ok := _ListCloudVPCRequest_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return ListCloudVPCRequestValidationError{ + err := ListCloudVPCRequestValidationError{ field: "NetworkType", reason: "value must be in list [overlay underlay]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for BusinessID + if len(errors) > 0 { + return ListCloudVPCRequestMultiError(errors) + } + return nil } +// ListCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVPCRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVPCRequestMultiError) AllErrors() []error { return m } + // ListCloudVPCRequestValidationError is the validation error returned by // ListCloudVPCRequest.Validate if the designated constraints aren't met. type ListCloudVPCRequestValidationError struct { @@ -4399,12 +7107,26 @@ var _ListCloudVPCRequest_NetworkType_InLookup = map[string]struct{}{ // Validate checks the field values on ListCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVPCResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVPCResponseMultiError, or nil if none found. +func (m *ListCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -4414,7 +7136,26 @@ func (m *ListCloudVPCResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudVPCResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudVPCResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudVPCResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -4426,9 +7167,30 @@ func (m *ListCloudVPCResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudVPCResponseMultiError(errors) + } + return nil } +// ListCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVPCResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVPCResponseMultiError) AllErrors() []error { return m } + // ListCloudVPCResponseValidationError is the validation error returned by // ListCloudVPCResponse.Validate if the designated constraints aren't met. type ListCloudVPCResponseValidationError struct { @@ -4486,13 +7248,27 @@ var _ interface { } = ListCloudVPCResponseValidationError{} // Validate checks the field values on CloudVPCResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudVPCResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVPCResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudVPCRespMultiError, or +// nil if none found. +func (m *CloudVPCResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVPCResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Region @@ -4513,9 +7289,29 @@ func (m *CloudVPCResp) Validate() error { // no validation rules for AvailableIPNum + if len(errors) > 0 { + return CloudVPCRespMultiError(errors) + } + return nil } +// CloudVPCRespMultiError is an error wrapping multiple validation errors +// returned by CloudVPCResp.ValidateAll() if the designated constraints aren't met. +type CloudVPCRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVPCRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudVPCRespMultiError) AllErrors() []error { return m } + // CloudVPCRespValidationError is the validation error returned by // CloudVPCResp.Validate if the designated constraints aren't met. type CloudVPCRespValidationError struct { @@ -4572,22 +7368,61 @@ var _ interface { // Validate checks the field values on ListCloudRegionsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudRegionsRequestMultiError, or nil if none found. +func (m *ListCloudRegionsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudRegionsRequestValidationError{ + err := ListCloudRegionsRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudRegionsRequestMultiError(errors) } return nil } +// ListCloudRegionsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudRegionsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudRegionsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionsRequestMultiError) AllErrors() []error { return m } + // ListCloudRegionsRequestValidationError is the validation error returned by // ListCloudRegionsRequest.Validate if the designated constraints aren't met. type ListCloudRegionsRequestValidationError struct { @@ -4646,12 +7481,26 @@ var _ interface { // Validate checks the field values on ListCloudRegionsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudRegionsResponseMultiError, or nil if none found. +func (m *ListCloudRegionsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -4661,7 +7510,26 @@ func (m *ListCloudRegionsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudRegionsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -4673,9 +7541,30 @@ func (m *ListCloudRegionsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudRegionsResponseMultiError(errors) + } + return nil } +// ListCloudRegionsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudRegionsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudRegionsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionsResponseMultiError) AllErrors() []error { return m } + // ListCloudRegionsResponseValidationError is the validation error returned by // ListCloudRegionsResponse.Validate if the designated constraints aren't met. type ListCloudRegionsResponseValidationError struct { @@ -4733,22 +7622,56 @@ var _ interface { } = ListCloudRegionsResponseValidationError{} // Validate checks the field values on CloudRegion with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudRegion) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudRegion with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudRegionMultiError, or +// nil if none found. +func (m *CloudRegion) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudRegion) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for RegionName // no validation rules for Region + if len(errors) > 0 { + return CloudRegionMultiError(errors) + } + return nil } +// CloudRegionMultiError is an error wrapping multiple validation errors +// returned by CloudRegion.ValidateAll() if the designated constraints aren't met. +type CloudRegionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudRegionMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudRegionMultiError) AllErrors() []error { return m } + // CloudRegionValidationError is the validation error returned by // CloudRegion.Validate if the designated constraints aren't met. type CloudRegionValidationError struct { @@ -4804,18 +7727,53 @@ var _ interface { } = CloudRegionValidationError{} // Validate checks the field values on GetVPCCidrRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetVPCCidrRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetVPCCidrRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetVPCCidrRequestMultiError, or nil if none found. +func (m *GetVPCCidrRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetVPCCidrRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VpcID + if len(errors) > 0 { + return GetVPCCidrRequestMultiError(errors) + } + return nil } +// GetVPCCidrRequestMultiError is an error wrapping multiple validation errors +// returned by GetVPCCidrRequest.ValidateAll() if the designated constraints +// aren't met. +type GetVPCCidrRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetVPCCidrRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetVPCCidrRequestMultiError) AllErrors() []error { return m } + // GetVPCCidrRequestValidationError is the validation error returned by // GetVPCCidrRequest.Validate if the designated constraints aren't met. type GetVPCCidrRequestValidationError struct { @@ -4874,12 +7832,26 @@ var _ interface { // Validate checks the field values on GetVPCCidrResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetVPCCidrResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetVPCCidrResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetVPCCidrResponseMultiError, or nil if none found. +func (m *GetVPCCidrResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetVPCCidrResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -4889,7 +7861,26 @@ func (m *GetVPCCidrResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetVPCCidrResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetVPCCidrResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetVPCCidrResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -4901,9 +7892,30 @@ func (m *GetVPCCidrResponse) Validate() error { } + if len(errors) > 0 { + return GetVPCCidrResponseMultiError(errors) + } + return nil } +// GetVPCCidrResponseMultiError is an error wrapping multiple validation errors +// returned by GetVPCCidrResponse.ValidateAll() if the designated constraints +// aren't met. +type GetVPCCidrResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetVPCCidrResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetVPCCidrResponseMultiError) AllErrors() []error { return m } + // GetVPCCidrResponseValidationError is the validation error returned by // GetVPCCidrResponse.Validate if the designated constraints aren't met. type GetVPCCidrResponseValidationError struct { @@ -4961,12 +7973,26 @@ var _ interface { } = GetVPCCidrResponseValidationError{} // Validate checks the field values on VPCCidr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *VPCCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VPCCidr with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in VPCCidrMultiError, or nil if none found. +func (m *VPCCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *VPCCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Vpc // no validation rules for Cidr @@ -4975,9 +8001,29 @@ func (m *VPCCidr) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return VPCCidrMultiError(errors) + } + return nil } +// VPCCidrMultiError is an error wrapping multiple validation errors returned +// by VPCCidr.ValidateAll() if the designated constraints aren't met. +type VPCCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VPCCidrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m VPCCidrMultiError) AllErrors() []error { return m } + // VPCCidrValidationError is the validation error returned by VPCCidr.Validate // if the designated constraints aren't met. type VPCCidrValidationError struct { @@ -5033,53 +8079,144 @@ var _ interface { } = VPCCidrValidationError{} // Validate checks the field values on Cloud with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Cloud) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Cloud with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in CloudMultiError, or nil if none found. +func (m *Cloud) ValidateAll() error { + return m.validate(true) +} + +func (m *Cloud) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Name // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CloudValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return CloudValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, CloudValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "CloudCredential", @@ -5089,7 +8226,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "OsManagement", @@ -5099,7 +8255,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "ClusterManagement", @@ -5109,7 +8284,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "NodeGroupManagement", @@ -5137,7 +8331,26 @@ func (m *Cloud) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "NetworkInfo", @@ -5147,7 +8360,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "ConfInfo", @@ -5159,9 +8391,29 @@ func (m *Cloud) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return CloudMultiError(errors) + } + return nil } +// CloudMultiError is an error wrapping multiple validation errors returned by +// Cloud.ValidateAll() if the designated constraints aren't met. +type CloudMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudMultiError) AllErrors() []error { return m } + // CloudValidationError is the validation error returned by Cloud.Validate if // the designated constraints aren't met. type CloudValidationError struct { @@ -5217,13 +8469,27 @@ var _ interface { } = CloudValidationError{} // Validate checks the field values on CloudConfigInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudConfigInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudConfigInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudConfigInfoMultiError, or nil if none found. +func (m *CloudConfigInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudConfigInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudInternalEnable // no validation rules for CloudDomain @@ -5238,9 +8504,30 @@ func (m *CloudConfigInfo) Validate() error { // no validation rules for VpcDomain + if len(errors) > 0 { + return CloudConfigInfoMultiError(errors) + } + return nil } +// CloudConfigInfoMultiError is an error wrapping multiple validation errors +// returned by CloudConfigInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudConfigInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudConfigInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudConfigInfoMultiError) AllErrors() []error { return m } + // CloudConfigInfoValidationError is the validation error returned by // CloudConfigInfo.Validate if the designated constraints aren't met. type CloudConfigInfoValidationError struct { @@ -5296,16 +8583,51 @@ var _ interface { } = CloudConfigInfoValidationError{} // Validate checks the field values on CloudNetworkInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudNetworkInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudNetworkInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudNetworkInfoMultiError, or nil if none found. +func (m *CloudNetworkInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudNetworkInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return CloudNetworkInfoMultiError(errors) + } + return nil } +// CloudNetworkInfoMultiError is an error wrapping multiple validation errors +// returned by CloudNetworkInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudNetworkInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudNetworkInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudNetworkInfoMultiError) AllErrors() []error { return m } + // CloudNetworkInfoValidationError is the validation error returned by // CloudNetworkInfo.Validate if the designated constraints aren't met. type CloudNetworkInfoValidationError struct { @@ -5361,42 +8683,88 @@ var _ interface { } = CloudNetworkInfoValidationError{} // Validate checks the field values on NodeGroup with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroup with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeGroupMultiError, or nil +// if none found. +func (m *NodeGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeGroupID // no validation rules for Name if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_NodeGroup_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for EnableAutoscale - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "AutoScaling", @@ -5406,7 +8774,26 @@ func (m *NodeGroup) Validate() error { } } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "LaunchTemplate", @@ -5435,22 +8822,49 @@ func (m *NodeGroup) Validate() error { // no validation rules for Provider if _, ok := _NodeGroup_Status_InLookup[m.GetStatus()]; !ok { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION DELETED]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ConsumerID if m.GetNodeTemplate() == nil { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "NodeTemplate", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "NodeTemplate", @@ -5466,7 +8880,26 @@ func (m *NodeGroup) Validate() error { // no validation rules for NodeGroupType - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "Area", @@ -5476,9 +8909,31 @@ func (m *NodeGroup) Validate() error { } } + // no validation rules for NodeRole + + if len(errors) > 0 { + return NodeGroupMultiError(errors) + } + return nil } +// NodeGroupMultiError is an error wrapping multiple validation errors returned +// by NodeGroup.ValidateAll() if the designated constraints aren't met. +type NodeGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeGroupMultiError) AllErrors() []error { return m } + // NodeGroupValidationError is the validation error returned by // NodeGroup.Validate if the designated constraints aren't met. type NodeGroupValidationError struct { @@ -5545,19 +9000,54 @@ var _NodeGroup_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on CloudArea with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudArea) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudArea with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudAreaMultiError, or nil +// if none found. +func (m *CloudArea) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudArea) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BkCloudID // no validation rules for BkCloudName + if len(errors) > 0 { + return CloudAreaMultiError(errors) + } + return nil } +// CloudAreaMultiError is an error wrapping multiple validation errors returned +// by CloudArea.ValidateAll() if the designated constraints aren't met. +type CloudAreaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAreaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAreaMultiError) AllErrors() []error { return m } + // CloudAreaValidationError is the validation error returned by // CloudArea.Validate if the designated constraints aren't met. type CloudAreaValidationError struct { @@ -5613,29 +9103,51 @@ var _ interface { } = CloudAreaValidationError{} // Validate checks the field values on AutoScalingGroup with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *AutoScalingGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AutoScalingGroup with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AutoScalingGroupMultiError, or nil if none found. +func (m *AutoScalingGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *AutoScalingGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for AutoScalingID // no validation rules for AutoScalingName if val := m.GetMinSize(); val < 0 || val > 1000 { - return AutoScalingGroupValidationError{ + err := AutoScalingGroupValidationError{ field: "MinSize", reason: "value must be inside range [0, 1000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxSize(); val < 0 || val > 1000 { - return AutoScalingGroupValidationError{ + err := AutoScalingGroupValidationError{ field: "MaxSize", reason: "value must be inside range [0, 1000]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredSize @@ -5655,7 +9167,26 @@ func (m *AutoScalingGroup) Validate() error { for idx, item := range m.GetTimeRanges() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AutoScalingGroupValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AutoScalingGroupValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AutoScalingGroupValidationError{ field: fmt.Sprintf("TimeRanges[%v]", idx), @@ -5669,9 +9200,30 @@ func (m *AutoScalingGroup) Validate() error { // no validation rules for AutoUpgrade + if len(errors) > 0 { + return AutoScalingGroupMultiError(errors) + } + return nil } +// AutoScalingGroupMultiError is an error wrapping multiple validation errors +// returned by AutoScalingGroup.ValidateAll() if the designated constraints +// aren't met. +type AutoScalingGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AutoScalingGroupMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AutoScalingGroupMultiError) AllErrors() []error { return m } + // AutoScalingGroupValidationError is the validation error returned by // AutoScalingGroup.Validate if the designated constraints aren't met. type AutoScalingGroupValidationError struct { @@ -5727,33 +9279,76 @@ var _ interface { } = AutoScalingGroupValidationError{} // Validate checks the field values on TimeRange with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TimeRange) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TimeRange with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TimeRangeMultiError, or nil +// if none found. +func (m *TimeRange) ValidateAll() error { + return m.validate(true) +} + +func (m *TimeRange) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetName()); l < 2 || l > 1024 { - return TimeRangeValidationError{ + err := TimeRangeValidationError{ field: "Name", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetSchedule()); l < 2 || l > 1024 { - return TimeRangeValidationError{ + err := TimeRangeValidationError{ field: "Schedule", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Zone // no validation rules for DesiredNum + if len(errors) > 0 { + return TimeRangeMultiError(errors) + } + return nil } +// TimeRangeMultiError is an error wrapping multiple validation errors returned +// by TimeRange.ValidateAll() if the designated constraints aren't met. +type TimeRangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TimeRangeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TimeRangeMultiError) AllErrors() []error { return m } + // TimeRangeValidationError is the validation error returned by // TimeRange.Validate if the designated constraints aren't met. type TimeRangeValidationError struct { @@ -5809,19 +9404,54 @@ var _ interface { } = TimeRangeValidationError{} // Validate checks the field values on DataDisk with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *DataDisk) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DataDisk with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in DataDiskMultiError, or nil +// if none found. +func (m *DataDisk) ValidateAll() error { + return m.validate(true) +} + +func (m *DataDisk) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DiskType // no validation rules for DiskSize + if len(errors) > 0 { + return DataDiskMultiError(errors) + } + return nil } +// DataDiskMultiError is an error wrapping multiple validation errors returned +// by DataDisk.ValidateAll() if the designated constraints aren't met. +type DataDiskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DataDiskMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DataDiskMultiError) AllErrors() []error { return m } + // DataDiskValidationError is the validation error returned by // DataDisk.Validate if the designated constraints aren't met. type DataDiskValidationError struct { @@ -5877,13 +9507,27 @@ var _ interface { } = DataDiskValidationError{} // Validate checks the field values on CloudDataDisk with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudDataDisk) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudDataDisk with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudDataDiskMultiError, or +// nil if none found. +func (m *CloudDataDisk) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudDataDisk) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DiskType // no validation rules for DiskSize @@ -5896,9 +9540,30 @@ func (m *CloudDataDisk) Validate() error { // no validation rules for DiskPartition + if len(errors) > 0 { + return CloudDataDiskMultiError(errors) + } + return nil } +// CloudDataDiskMultiError is an error wrapping multiple validation errors +// returned by CloudDataDisk.ValidateAll() if the designated constraints +// aren't met. +type CloudDataDiskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudDataDiskMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudDataDiskMultiError) AllErrors() []error { return m } + // CloudDataDiskValidationError is the validation error returned by // CloudDataDisk.Validate if the designated constraints aren't met. type CloudDataDiskValidationError struct { @@ -5955,12 +9620,26 @@ var _ interface { // Validate checks the field values on InternetAccessible with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InternetAccessible) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InternetAccessible with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InternetAccessibleMultiError, or nil if none found. +func (m *InternetAccessible) ValidateAll() error { + return m.validate(true) +} + +func (m *InternetAccessible) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InternetChargeType // no validation rules for InternetMaxBandwidth @@ -5969,9 +9648,30 @@ func (m *InternetAccessible) Validate() error { // no validation rules for BandwidthPackageId + if len(errors) > 0 { + return InternetAccessibleMultiError(errors) + } + return nil } +// InternetAccessibleMultiError is an error wrapping multiple validation errors +// returned by InternetAccessible.ValidateAll() if the designated constraints +// aren't met. +type InternetAccessibleMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InternetAccessibleMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InternetAccessibleMultiError) AllErrors() []error { return m } + // InternetAccessibleValidationError is the validation error returned by // InternetAccessible.Validate if the designated constraints aren't met. type InternetAccessibleValidationError struct { @@ -6030,12 +9730,26 @@ var _ interface { // Validate checks the field values on InstanceTemplateConfig with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InstanceTemplateConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceTemplateConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InstanceTemplateConfigMultiError, or nil if none found. +func (m *InstanceTemplateConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceTemplateConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Region // no validation rules for Zone @@ -6055,13 +9769,36 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for InstanceType if _, ok := _InstanceTemplateConfig_InstanceChargeType_InLookup[m.GetInstanceChargeType()]; !ok { - return InstanceTemplateConfigValidationError{ + err := InstanceTemplateConfigValidationError{ field: "InstanceChargeType", reason: "value must be in list [PREPAID POSTPAID_BY_HOUR SPOTPAID]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "SystemDisk", @@ -6074,7 +9811,26 @@ func (m *InstanceTemplateConfig) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -6086,7 +9842,26 @@ func (m *InstanceTemplateConfig) Validate() error { } - if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImageInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "ImageInfo", @@ -6105,7 +9880,26 @@ func (m *InstanceTemplateConfig) Validate() error { for idx, item := range m.GetCloudDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("CloudDataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("CloudDataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: fmt.Sprintf("CloudDataDisks[%v]", idx), @@ -6119,7 +9913,26 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for InitLoginUsername - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "KeyPair", @@ -6133,9 +9946,30 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for NodeRole + if len(errors) > 0 { + return InstanceTemplateConfigMultiError(errors) + } + return nil } +// InstanceTemplateConfigMultiError is an error wrapping multiple validation +// errors returned by InstanceTemplateConfig.ValidateAll() if the designated +// constraints aren't met. +type InstanceTemplateConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceTemplateConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InstanceTemplateConfigMultiError) AllErrors() []error { return m } + // InstanceTemplateConfigValidationError is the validation error returned by // InstanceTemplateConfig.Validate if the designated constraints aren't met. type InstanceTemplateConfigValidationError struct { @@ -6200,12 +10034,26 @@ var _InstanceTemplateConfig_InstanceChargeType_InLookup = map[string]struct{}{ // Validate checks the field values on LaunchConfiguration with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *LaunchConfiguration) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on LaunchConfiguration with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// LaunchConfigurationMultiError, or nil if none found. +func (m *LaunchConfiguration) ValidateAll() error { + return m.validate(true) +} + +func (m *LaunchConfiguration) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for LaunchConfigurationID // no validation rules for LaunchConfigureName @@ -6222,7 +10070,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for InstanceChargeType - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "SystemDisk", @@ -6235,7 +10102,26 @@ func (m *LaunchConfiguration) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -6247,7 +10133,26 @@ func (m *LaunchConfiguration) Validate() error { } - if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternetAccess()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "InternetAccess", @@ -6259,7 +10164,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for InitLoginPassword - if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImageInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "ImageInfo", @@ -6279,7 +10203,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for Selector - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "KeyPair", @@ -6289,9 +10232,32 @@ func (m *LaunchConfiguration) Validate() error { } } + // no validation rules for SshKey + + if len(errors) > 0 { + return LaunchConfigurationMultiError(errors) + } + return nil } +// LaunchConfigurationMultiError is an error wrapping multiple validation +// errors returned by LaunchConfiguration.ValidateAll() if the designated +// constraints aren't met. +type LaunchConfigurationMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m LaunchConfigurationMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m LaunchConfigurationMultiError) AllErrors() []error { return m } + // LaunchConfigurationValidationError is the validation error returned by // LaunchConfiguration.Validate if the designated constraints aren't met. type LaunchConfigurationValidationError struct { @@ -6349,21 +10315,55 @@ var _ interface { } = LaunchConfigurationValidationError{} // Validate checks the field values on KeyInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KeyInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KeyInfo with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in KeyInfoMultiError, or nil if none found. +func (m *KeyInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *KeyInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for KeyID // no validation rules for KeySecret // no validation rules for KeyPublic + if len(errors) > 0 { + return KeyInfoMultiError(errors) + } + return nil } +// KeyInfoMultiError is an error wrapping multiple validation errors returned +// by KeyInfo.ValidateAll() if the designated constraints aren't met. +type KeyInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KeyInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KeyInfoMultiError) AllErrors() []error { return m } + // KeyInfoValidationError is the validation error returned by KeyInfo.Validate // if the designated constraints aren't met. type KeyInfoValidationError struct { @@ -6419,21 +10419,56 @@ var _ interface { } = KeyInfoValidationError{} // Validate checks the field values on ImageInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ImageInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImageInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ImageInfoMultiError, or nil +// if none found. +func (m *ImageInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ImageInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ImageID // no validation rules for ImageName // no validation rules for ImageType + if len(errors) > 0 { + return ImageInfoMultiError(errors) + } + return nil } +// ImageInfoMultiError is an error wrapping multiple validation errors returned +// by ImageInfo.ValidateAll() if the designated constraints aren't met. +type ImageInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImageInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImageInfoMultiError) AllErrors() []error { return m } + // ImageInfoValidationError is the validation error returned by // ImageInfo.Validate if the designated constraints aren't met. type ImageInfoValidationError struct { @@ -6490,12 +10525,26 @@ var _ interface { // Validate checks the field values on ClusterAutoScalingOption with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterAutoScalingOption) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterAutoScalingOption with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ClusterAutoScalingOptionMultiError, or nil if none found. +func (m *ClusterAutoScalingOption) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterAutoScalingOption) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable // no validation rules for Expander @@ -6564,7 +10613,26 @@ func (m *ClusterAutoScalingOption) Validate() error { // no validation rules for BufferResourceMemRatio - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAutoScalingOptionValidationError{ field: "Module", @@ -6574,7 +10642,26 @@ func (m *ClusterAutoScalingOption) Validate() error { } } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAutoScalingOptionValidationError{ field: "Webhook", @@ -6587,15 +10674,40 @@ func (m *ClusterAutoScalingOption) Validate() error { // no validation rules for ExpendablePodsPriorityCutoff if m.GetNewPodScaleUpDelay() < 0 { - return ClusterAutoScalingOptionValidationError{ + err := ClusterAutoScalingOptionValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ClusterAutoScalingOptionMultiError(errors) } return nil } +// ClusterAutoScalingOptionMultiError is an error wrapping multiple validation +// errors returned by ClusterAutoScalingOption.ValidateAll() if the designated +// constraints aren't met. +type ClusterAutoScalingOptionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterAutoScalingOptionMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterAutoScalingOptionMultiError) AllErrors() []error { return m } + // ClusterAutoScalingOptionValidationError is the validation error returned by // ClusterAutoScalingOption.Validate if the designated constraints aren't met. type ClusterAutoScalingOptionValidationError struct { @@ -6653,22 +10765,56 @@ var _ interface { } = ClusterAutoScalingOptionValidationError{} // Validate checks the field values on WebhookMode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *WebhookMode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebhookMode with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in WebhookModeMultiError, or +// nil if none found. +func (m *WebhookMode) ValidateAll() error { + return m.validate(true) +} + +func (m *WebhookMode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Mode // no validation rules for Server // no validation rules for Token + if len(errors) > 0 { + return WebhookModeMultiError(errors) + } + return nil } +// WebhookModeMultiError is an error wrapping multiple validation errors +// returned by WebhookMode.ValidateAll() if the designated constraints aren't met. +type WebhookModeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebhookModeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WebhookModeMultiError) AllErrors() []error { return m } + // WebhookModeValidationError is the validation error returned by // WebhookMode.Validate if the designated constraints aren't met. type WebhookModeValidationError struct { @@ -6724,21 +10870,55 @@ var _ interface { } = WebhookModeValidationError{} // Validate checks the field values on Taint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Taint) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Taint with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in TaintMultiError, or nil if none found. +func (m *Taint) ValidateAll() error { + return m.validate(true) +} + +func (m *Taint) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Value // no validation rules for Effect + if len(errors) > 0 { + return TaintMultiError(errors) + } + return nil } +// TaintMultiError is an error wrapping multiple validation errors returned by +// Taint.ValidateAll() if the designated constraints aren't met. +type TaintMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaintMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TaintMultiError) AllErrors() []error { return m } + // TaintValidationError is the validation error returned by Taint.Validate if // the designated constraints aren't met. type TaintValidationError struct { @@ -6794,13 +10974,27 @@ var _ interface { } = TaintValidationError{} // Validate checks the field values on NodeTemplate with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeTemplate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeTemplate with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeTemplateMultiError, or +// nil if none found. +func (m *NodeTemplate) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeTemplate) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeTemplateID // no validation rules for Name @@ -6812,7 +11006,26 @@ func (m *NodeTemplate) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -6835,7 +11048,26 @@ func (m *NodeTemplate) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -6851,7 +11083,26 @@ func (m *NodeTemplate) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetBcsScaleOutAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBcsScaleOutAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleOutAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleOutAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBcsScaleOutAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "BcsScaleOutAddons", @@ -6861,7 +11112,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetBcsScaleInAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBcsScaleInAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleInAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleInAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBcsScaleInAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "BcsScaleInAddons", @@ -6871,7 +11141,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "ScaleOutExtraAddons", @@ -6881,7 +11170,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "ScaleInExtraAddons", @@ -6903,7 +11211,26 @@ func (m *NodeTemplate) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "Runtime", @@ -6913,7 +11240,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "Module", @@ -6937,9 +11283,29 @@ func (m *NodeTemplate) Validate() error { // no validation rules for AllowSkipScaleInWhenFailed + if len(errors) > 0 { + return NodeTemplateMultiError(errors) + } + return nil } +// NodeTemplateMultiError is an error wrapping multiple validation errors +// returned by NodeTemplate.ValidateAll() if the designated constraints aren't met. +type NodeTemplateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeTemplateMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeTemplateMultiError) AllErrors() []error { return m } + // NodeTemplateValidationError is the validation error returned by // NodeTemplate.Validate if the designated constraints aren't met. type NodeTemplateValidationError struct { @@ -6995,12 +11361,27 @@ var _ interface { } = NodeTemplateValidationError{} // Validate checks the field values on ModuleInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ModuleInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ModuleInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ModuleInfoMultiError, or +// nil if none found. +func (m *ModuleInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ModuleInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScaleOutModuleID // no validation rules for ScaleInModuleID @@ -7013,9 +11394,29 @@ func (m *ModuleInfo) Validate() error { // no validation rules for ScaleInModuleName + if len(errors) > 0 { + return ModuleInfoMultiError(errors) + } + return nil } +// ModuleInfoMultiError is an error wrapping multiple validation errors +// returned by ModuleInfo.ValidateAll() if the designated constraints aren't met. +type ModuleInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ModuleInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ModuleInfoMultiError) AllErrors() []error { return m } + // ModuleInfoValidationError is the validation error returned by // ModuleInfo.Validate if the designated constraints aren't met. type ModuleInfoValidationError struct { @@ -7071,20 +11472,54 @@ var _ interface { } = ModuleInfoValidationError{} // Validate checks the field values on RunTimeInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *RunTimeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RunTimeInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in RunTimeInfoMultiError, or +// nil if none found. +func (m *RunTimeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *RunTimeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ContainerRuntime // no validation rules for RuntimeVersion + if len(errors) > 0 { + return RunTimeInfoMultiError(errors) + } + return nil } +// RunTimeInfoMultiError is an error wrapping multiple validation errors +// returned by RunTimeInfo.ValidateAll() if the designated constraints aren't met. +type RunTimeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RunTimeInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RunTimeInfoMultiError) AllErrors() []error { return m } + // RunTimeInfoValidationError is the validation error returned by // RunTimeInfo.Validate if the designated constraints aren't met. type RunTimeInfoValidationError struct { @@ -7141,31 +11576,57 @@ var _ interface { // Validate checks the field values on CreateNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeTemplateRequestMultiError, or nil if none found. +func (m *CreateNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetProjectID()); l < 1 || l > 2048 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "ProjectID", reason: "value length must be between 1 and 2048 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeTemplateRequest_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetName()) < 1 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "Name", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc @@ -7175,7 +11636,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -7198,7 +11678,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -7214,7 +11713,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleOutExtraAddons", @@ -7224,7 +11742,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInExtraAddons", @@ -7237,20 +11774,47 @@ func (m *CreateNodeTemplateRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 1024 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeTemplateRequest_Creator_Pattern.MatchString(m.GetCreator()) { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "Creator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Runtime", @@ -7260,7 +11824,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Module", @@ -7270,7 +11853,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPreScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInPreScript", @@ -7280,7 +11882,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPostScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInPostScript", @@ -7290,7 +11911,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Annotations", @@ -7300,9 +11940,30 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } + if len(errors) > 0 { + return CreateNodeTemplateRequestMultiError(errors) + } + return nil } +// CreateNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by CreateNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type CreateNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeTemplateRequestMultiError) AllErrors() []error { return m } + // CreateNodeTemplateRequestValidationError is the validation error returned by // CreateNodeTemplateRequest.Validate if the designated constraints aren't met. type CreateNodeTemplateRequestValidationError struct { @@ -7365,19 +12026,52 @@ var _CreateNodeTemplateRequest_Creator_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on CreateNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeTemplateResponseMultiError, or nil if none found. +func (m *CreateNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -7387,9 +12081,30 @@ func (m *CreateNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return CreateNodeTemplateResponseMultiError(errors) + } + return nil } +// CreateNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by CreateNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type CreateNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeTemplateResponseMultiError) AllErrors() []error { return m } + // CreateNodeTemplateResponseValidationError is the validation error returned // by CreateNodeTemplateResponse.Validate if the designated constraints aren't met. type CreateNodeTemplateResponseValidationError struct { @@ -7448,12 +12163,26 @@ var _ interface { // Validate checks the field values on UpdateNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTemplateRequestMultiError, or nil if none found. +func (m *UpdateNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID @@ -7467,7 +12196,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -7485,7 +12233,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for UserScript - if v, ok := interface{}(m.GetUnSchedulable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUnSchedulable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "UnSchedulable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "UnSchedulable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUnSchedulable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "UnSchedulable", @@ -7498,7 +12265,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -7514,7 +12300,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleOutExtraAddons", @@ -7524,7 +12329,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInExtraAddons", @@ -7537,20 +12361,47 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateNodeTemplateRequestValidationError{ + err := UpdateNodeTemplateRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateNodeTemplateRequest_Updater_Pattern.MatchString(m.GetUpdater()) { - return UpdateNodeTemplateRequestValidationError{ + err := UpdateNodeTemplateRequestValidationError{ field: "Updater", reason: "value does not match regex pattern \"^[0-9a-zA-Z]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Runtime", @@ -7560,7 +12411,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Module", @@ -7570,7 +12440,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPreScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInPreScript", @@ -7580,7 +12469,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPostScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInPostScript", @@ -7590,7 +12498,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Annotations", @@ -7600,9 +12527,30 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTemplateRequestMultiError(errors) + } + return nil } +// UpdateNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type UpdateNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTemplateRequestMultiError) AllErrors() []error { return m } + // UpdateNodeTemplateRequestValidationError is the validation error returned by // UpdateNodeTemplateRequest.Validate if the designated constraints aren't met. type UpdateNodeTemplateRequestValidationError struct { @@ -7663,19 +12611,52 @@ var _UpdateNodeTemplateRequest_Updater_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on UpdateNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTemplateResponseMultiError, or nil if none found. +func (m *UpdateNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -7685,9 +12666,30 @@ func (m *UpdateNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTemplateResponseMultiError(errors) + } + return nil } +// UpdateNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTemplateResponseMultiError) AllErrors() []error { return m } + // UpdateNodeTemplateResponseValidationError is the validation error returned // by UpdateNodeTemplateResponse.Validate if the designated constraints aren't met. type UpdateNodeTemplateResponseValidationError struct { @@ -7746,19 +12748,54 @@ var _ interface { // Validate checks the field values on DeleteNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeTemplateRequestMultiError, or nil if none found. +func (m *DeleteNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return DeleteNodeTemplateRequestMultiError(errors) + } + return nil } +// DeleteNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type DeleteNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeTemplateRequestMultiError) AllErrors() []error { return m } + // DeleteNodeTemplateRequestValidationError is the validation error returned by // DeleteNodeTemplateRequest.Validate if the designated constraints aren't met. type DeleteNodeTemplateRequestValidationError struct { @@ -7817,19 +12854,52 @@ var _ interface { // Validate checks the field values on DeleteNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeTemplateResponseMultiError, or nil if none found. +func (m *DeleteNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -7839,9 +12909,30 @@ func (m *DeleteNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeTemplateResponseMultiError(errors) + } + return nil } +// DeleteNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type DeleteNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeTemplateResponseMultiError) AllErrors() []error { return m } + // DeleteNodeTemplateResponseValidationError is the validation error returned // by DeleteNodeTemplateResponse.Validate if the designated constraints aren't met. type DeleteNodeTemplateResponseValidationError struct { @@ -7900,19 +12991,54 @@ var _ interface { // Validate checks the field values on GetNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeTemplateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeTemplateRequestMultiError, or nil if none found. +func (m *GetNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return GetNodeTemplateRequestMultiError(errors) + } + return nil } +// GetNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by GetNodeTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type GetNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeTemplateRequestMultiError) AllErrors() []error { return m } + // GetNodeTemplateRequestValidationError is the validation error returned by // GetNodeTemplateRequest.Validate if the designated constraints aren't met. type GetNodeTemplateRequestValidationError struct { @@ -7971,19 +13097,52 @@ var _ interface { // Validate checks the field values on GetNodeTemplateResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeTemplateResponseMultiError, or nil if none found. +func (m *GetNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeTemplateResponseValidationError{ field: "Data", @@ -7993,7 +13152,26 @@ func (m *GetNodeTemplateResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -8003,9 +13181,30 @@ func (m *GetNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeTemplateResponseMultiError(errors) + } + return nil } +// GetNodeTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeTemplateResponseMultiError) AllErrors() []error { return m } + // GetNodeTemplateResponseValidationError is the validation error returned by // GetNodeTemplateResponse.Validate if the designated constraints aren't met. type GetNodeTemplateResponseValidationError struct { @@ -8064,19 +13263,54 @@ var _ interface { // Validate checks the field values on ListNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeTemplateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeTemplateRequestMultiError, or nil if none found. +func (m *ListNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return ListNodeTemplateRequestMultiError(errors) + } + return nil } +// ListNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodeTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type ListNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeTemplateRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeTemplateRequestMultiError) AllErrors() []error { return m } + // ListNodeTemplateRequestValidationError is the validation error returned by // ListNodeTemplateRequest.Validate if the designated constraints aren't met. type ListNodeTemplateRequestValidationError struct { @@ -8135,12 +13369,26 @@ var _ interface { // Validate checks the field values on ListNodeTemplateResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeTemplateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeTemplateResponseMultiError, or nil if none found. +func (m *ListNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -8150,7 +13398,26 @@ func (m *ListNodeTemplateResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodeTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodeTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodeTemplateResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -8162,9 +13429,30 @@ func (m *ListNodeTemplateResponse) Validate() error { } + if len(errors) > 0 { + return ListNodeTemplateResponseMultiError(errors) + } + return nil } +// ListNodeTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodeTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeTemplateResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeTemplateResponseMultiError) AllErrors() []error { return m } + // ListNodeTemplateResponseValidationError is the validation error returned by // ListNodeTemplateResponse.Validate if the designated constraints aren't met. type ListNodeTemplateResponseValidationError struct { @@ -8222,12 +13510,26 @@ var _ interface { } = ListNodeTemplateResponseValidationError{} // Validate checks the field values on Project with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Project) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Project with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in ProjectMultiError, or nil if none found. +func (m *Project) ValidateAll() error { + return m.validate(true) +} + +func (m *Project) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for Name @@ -8266,30 +13568,79 @@ func (m *Project) Validate() error { // no validation rules for IsSecret - for key, val := range m.GetCredentials() { - _ = val - - // no validation rules for Credentials[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ProjectValidationError{ - field: fmt.Sprintf("Credentials[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetCredentials())) + i := 0 + for key := range m.GetCredentials() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetCredentials()[key] + _ = val + + // no validation rules for Credentials[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for CreatTime // no validation rules for UpdateTime + if len(errors) > 0 { + return ProjectMultiError(errors) + } + return nil } +// ProjectMultiError is an error wrapping multiple validation errors returned +// by Project.ValidateAll() if the designated constraints aren't met. +type ProjectMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ProjectMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ProjectMultiError) AllErrors() []error { return m } + // ProjectValidationError is the validation error returned by Project.Validate // if the designated constraints aren't met. type ProjectValidationError struct { @@ -8345,21 +13696,39 @@ var _ interface { } = ProjectValidationError{} // Validate checks the field values on Task with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Task) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Task with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in TaskMultiError, or nil if none found. +func (m *Task) ValidateAll() error { + return m.validate(true) +} + +func (m *Task) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskID // no validation rules for TaskType if _, ok := _Task_Status_InLookup[m.GetStatus()]; !ok { - return TaskValidationError{ + err := TaskValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILURE TIMEOUT FORCETERMINATE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -8372,21 +13741,50 @@ func (m *Task) Validate() error { // no validation rules for CurrentStep - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TaskValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for ClusterID @@ -8407,9 +13805,29 @@ func (m *Task) Validate() error { // no validation rules for NodeGroupID + if len(errors) > 0 { + return TaskMultiError(errors) + } + return nil } +// TaskMultiError is an error wrapping multiple validation errors returned by +// Task.ValidateAll() if the designated constraints aren't met. +type TaskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TaskMultiError) AllErrors() []error { return m } + // TaskValidationError is the validation error returned by Task.Validate if the // designated constraints aren't met. type TaskValidationError struct { @@ -8474,12 +13892,26 @@ var _Task_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on Step with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Step) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Step with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in StepMultiError, or nil if none found. +func (m *Step) ValidateAll() error { + return m.validate(true) +} + +func (m *Step) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for System @@ -8497,10 +13929,14 @@ func (m *Step) Validate() error { // no validation rules for ExecutionTime if _, ok := _Step_Status_InLookup[m.GetStatus()]; !ok { - return StepValidationError{ + err := StepValidationError{ field: "Status", reason: "value must be in list [NOTSTARTED RUNNING SUCCESS FAILURE TIMEOUT FORCETERMINATE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -8513,9 +13949,29 @@ func (m *Step) Validate() error { // no validation rules for SkipOnFailed + if len(errors) > 0 { + return StepMultiError(errors) + } + return nil } +// StepMultiError is an error wrapping multiple validation errors returned by +// Step.ValidateAll() if the designated constraints aren't met. +type StepMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StepMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m StepMultiError) AllErrors() []error { return m } + // StepValidationError is the validation error returned by Step.Validate if the // designated constraints aren't met. type StepValidationError struct { @@ -8580,12 +14036,26 @@ var _Step_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on TkeCidr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TkeCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TkeCidr with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in TkeCidrMultiError, or nil if none found. +func (m *TkeCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *TkeCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VPC // no validation rules for CIDR @@ -8600,9 +14070,29 @@ func (m *TkeCidr) Validate() error { // no validation rules for UpdateTime + if len(errors) > 0 { + return TkeCidrMultiError(errors) + } + return nil } +// TkeCidrMultiError is an error wrapping multiple validation errors returned +// by TkeCidr.ValidateAll() if the designated constraints aren't met. +type TkeCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TkeCidrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TkeCidrMultiError) AllErrors() []error { return m } + // TkeCidrValidationError is the validation error returned by TkeCidr.Validate // if the designated constraints aren't met. type TkeCidrValidationError struct { @@ -8658,13 +14148,27 @@ var _ interface { } = TkeCidrValidationError{} // Validate checks the field values on TkeCidrCount with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TkeCidrCount) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TkeCidrCount with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TkeCidrCountMultiError, or +// nil if none found. +func (m *TkeCidrCount) ValidateAll() error { + return m.validate(true) +} + +func (m *TkeCidrCount) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Count // no validation rules for VPC @@ -8673,9 +14177,29 @@ func (m *TkeCidrCount) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return TkeCidrCountMultiError(errors) + } + return nil } +// TkeCidrCountMultiError is an error wrapping multiple validation errors +// returned by TkeCidrCount.ValidateAll() if the designated constraints aren't met. +type TkeCidrCountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TkeCidrCountMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TkeCidrCountMultiError) AllErrors() []error { return m } + // TkeCidrCountValidationError is the validation error returned by // TkeCidrCount.Validate if the designated constraints aren't met. type TkeCidrCountValidationError struct { @@ -8731,151 +14255,279 @@ var _ interface { } = TkeCidrCountValidationError{} // Validate checks the field values on CreateClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CreateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateClusterReqMultiError, or nil if none found. +func (m *CreateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Region", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsExclusive if _, ok := _CreateClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for FederationClusterID if len(m.GetLabels()) > 20 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyCreateInfo - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateClusterReqValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateClusterReqValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for CloudID @@ -8883,10 +14535,14 @@ func (m *CreateClusterReq) Validate() error { // no validation rules for ManageType if m.GetNetworkSettings() == nil { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "NetworkSettings", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetNetworkSettings(); a != nil { @@ -8894,17 +14550,40 @@ func (m *CreateClusterReq) Validate() error { } if m.GetClusterBasicSettings() == nil { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterBasicSettings", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetClusterBasicSettings(); a != nil { } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -8914,7 +14593,26 @@ func (m *CreateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "NodeSettings", @@ -8935,7 +14633,26 @@ func (m *CreateClusterReq) Validate() error { for idx, item := range m.GetInstances() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("Instances[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("Instances[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: fmt.Sprintf("Instances[%v]", idx), @@ -8965,7 +14682,26 @@ func (m *CreateClusterReq) Validate() error { // no validation rules for NodeTemplateID - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "Area", @@ -8975,7 +14711,26 @@ func (m *CreateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "Module", @@ -8985,7 +14740,26 @@ func (m *CreateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterConnectSetting()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "ClusterConnectSetting", @@ -8995,9 +14769,30 @@ func (m *CreateClusterReq) Validate() error { } } + if len(errors) > 0 { + return CreateClusterReqMultiError(errors) + } + return nil } +// CreateClusterReqMultiError is an error wrapping multiple validation errors +// returned by CreateClusterReq.ValidateAll() if the designated constraints +// aren't met. +type CreateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateClusterReqMultiError) AllErrors() []error { return m } + // CreateClusterReqValidationError is the validation error returned by // CreateClusterReq.Validate if the designated constraints aren't met. type CreateClusterReqValidationError struct { @@ -9075,20 +14870,53 @@ var _CreateClusterReq_ClusterType_InLookup = map[string]struct{}{ } // Validate checks the field values on CreateClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CreateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateClusterRespMultiError, or nil if none found. +func (m *CreateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "Data", @@ -9098,7 +14926,26 @@ func (m *CreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "Task", @@ -9108,7 +14955,26 @@ func (m *CreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "WebAnnotations", @@ -9118,9 +14984,30 @@ func (m *CreateClusterResp) Validate() error { } } + if len(errors) > 0 { + return CreateClusterRespMultiError(errors) + } + return nil } +// CreateClusterRespMultiError is an error wrapping multiple validation errors +// returned by CreateClusterResp.ValidateAll() if the designated constraints +// aren't met. +type CreateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateClusterRespMultiError) AllErrors() []error { return m } + // CreateClusterRespValidationError is the validation error returned by // CreateClusterResp.Validate if the designated constraints aren't met. type CreateClusterRespValidationError struct { @@ -9179,126 +15066,219 @@ var _ interface { // Validate checks the field values on CreateVirtualClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateVirtualClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateVirtualClusterReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateVirtualClusterReqMultiError, or nil if none found. +func (m *CreateVirtualClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateVirtualClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Region", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateVirtualClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateVirtualClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsExclusive if _, ok := _CreateVirtualClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single virtual]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for HostClusterID if _, ok := _CreateVirtualClusterReq_HostClusterNetwork_InLookup[m.GetHostClusterNetwork()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "HostClusterNetwork", reason: "value must be in list [devnet idc ]", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetLabels()) > 20 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyCreateInfo - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "NetworkSettings", @@ -9308,7 +15288,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "ClusterBasicSettings", @@ -9318,7 +15317,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -9328,7 +15346,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "NodeSettings", @@ -9342,7 +15379,26 @@ func (m *CreateVirtualClusterReq) Validate() error { // no validation rules for Description - if v, ok := interface{}(m.GetNs()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNs()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "Ns", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "Ns", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNs()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "Ns", @@ -9354,9 +15410,30 @@ func (m *CreateVirtualClusterReq) Validate() error { // no validation rules for ProjectCode + if len(errors) > 0 { + return CreateVirtualClusterReqMultiError(errors) + } + return nil } +// CreateVirtualClusterReqMultiError is an error wrapping multiple validation +// errors returned by CreateVirtualClusterReq.ValidateAll() if the designated +// constraints aren't met. +type CreateVirtualClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateVirtualClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateVirtualClusterReqMultiError) AllErrors() []error { return m } + // CreateVirtualClusterReqValidationError is the validation error returned by // CreateVirtualClusterReq.Validate if the designated constraints aren't met. type CreateVirtualClusterReqValidationError struct { @@ -9443,20 +15520,53 @@ var _CreateVirtualClusterReq_HostClusterNetwork_InLookup = map[string]struct{}{ } // Validate checks the field values on NamespaceInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NamespaceInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NamespaceInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NamespaceInfoMultiError, or +// nil if none found. +func (m *NamespaceInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NamespaceInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Labels // no validation rules for Annotations - if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetQuota()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NamespaceInfoValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NamespaceInfoValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NamespaceInfoValidationError{ field: "Quota", @@ -9466,9 +15576,30 @@ func (m *NamespaceInfo) Validate() error { } } + if len(errors) > 0 { + return NamespaceInfoMultiError(errors) + } + return nil } +// NamespaceInfoMultiError is an error wrapping multiple validation errors +// returned by NamespaceInfo.ValidateAll() if the designated constraints +// aren't met. +type NamespaceInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NamespaceInfoMultiError) AllErrors() []error { return m } + // NamespaceInfoValidationError is the validation error returned by // NamespaceInfo.Validate if the designated constraints aren't met. type NamespaceInfoValidationError struct { @@ -9524,13 +15655,27 @@ var _ interface { } = NamespaceInfoValidationError{} // Validate checks the field values on NamespaceQuota with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NamespaceQuota) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NamespaceQuota with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NamespaceQuotaMultiError, +// or nil if none found. +func (m *NamespaceQuota) ValidateAll() error { + return m.validate(true) +} + +func (m *NamespaceQuota) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CpuRequests // no validation rules for CpuLimits @@ -9539,9 +15684,30 @@ func (m *NamespaceQuota) Validate() error { // no validation rules for MemoryLimits + if len(errors) > 0 { + return NamespaceQuotaMultiError(errors) + } + return nil } +// NamespaceQuotaMultiError is an error wrapping multiple validation errors +// returned by NamespaceQuota.ValidateAll() if the designated constraints +// aren't met. +type NamespaceQuotaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceQuotaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NamespaceQuotaMultiError) AllErrors() []error { return m } + // NamespaceQuotaValidationError is the validation error returned by // NamespaceQuota.Validate if the designated constraints aren't met. type NamespaceQuotaValidationError struct { @@ -9598,19 +15764,52 @@ var _ interface { // Validate checks the field values on CreateVirtualClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateVirtualClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateVirtualClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateVirtualClusterRespMultiError, or nil if none found. +func (m *CreateVirtualClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateVirtualClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "Data", @@ -9620,7 +15819,26 @@ func (m *CreateVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "Task", @@ -9630,7 +15848,26 @@ func (m *CreateVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "WebAnnotations", @@ -9640,9 +15877,30 @@ func (m *CreateVirtualClusterResp) Validate() error { } } + if len(errors) > 0 { + return CreateVirtualClusterRespMultiError(errors) + } + return nil } +// CreateVirtualClusterRespMultiError is an error wrapping multiple validation +// errors returned by CreateVirtualClusterResp.ValidateAll() if the designated +// constraints aren't met. +type CreateVirtualClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateVirtualClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateVirtualClusterRespMultiError) AllErrors() []error { return m } + // CreateVirtualClusterRespValidationError is the validation error returned by // CreateVirtualClusterResp.Validate if the designated constraints aren't met. type CreateVirtualClusterRespValidationError struct { @@ -9700,23 +15958,62 @@ var _ interface { } = CreateVirtualClusterRespValidationError{} // Validate checks the field values on KubeConfigReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KubeConfigReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigReq with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in KubeConfigReqMultiError, or +// nil if none found. +func (m *KubeConfigReq) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetKubeConfig()) < 1 { - return KubeConfigReqValidationError{ + err := KubeConfigReqValidationError{ field: "KubeConfig", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return KubeConfigReqMultiError(errors) } return nil } +// KubeConfigReqMultiError is an error wrapping multiple validation errors +// returned by KubeConfigReq.ValidateAll() if the designated constraints +// aren't met. +type KubeConfigReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigReqMultiError) AllErrors() []error { return m } + // KubeConfigReqValidationError is the validation error returned by // KubeConfigReq.Validate if the designated constraints aren't met. type KubeConfigReqValidationError struct { @@ -9773,47 +16070,98 @@ var _ interface { // Validate checks the field values on KubeConfigConnectReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *KubeConfigConnectReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigConnectReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// KubeConfigConnectReqMultiError, or nil if none found. +func (m *KubeConfigConnectReq) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigConnectReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for IsExtranet if l := utf8.RuneCountInString(m.GetCloudID()); l < 1 || l > 1024 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "CloudID", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) > 1024 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "AccountID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_KubeConfigConnectReq_Region_Pattern.MatchString(m.GetRegion()) { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return KubeConfigConnectReqMultiError(errors) } return nil } +// KubeConfigConnectReqMultiError is an error wrapping multiple validation +// errors returned by KubeConfigConnectReq.ValidateAll() if the designated +// constraints aren't met. +type KubeConfigConnectReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigConnectReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigConnectReqMultiError) AllErrors() []error { return m } + // KubeConfigConnectReqValidationError is the validation error returned by // KubeConfigConnectReq.Validate if the designated constraints aren't met. type KubeConfigConnectReqValidationError struct { @@ -9873,22 +16221,57 @@ var _ interface { var _KubeConfigConnectReq_Region_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on KubeConfigResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KubeConfigResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in KubeConfigRespMultiError, +// or nil if none found. +func (m *KubeConfigResp) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return KubeConfigRespMultiError(errors) + } + return nil } +// KubeConfigRespMultiError is an error wrapping multiple validation errors +// returned by KubeConfigResp.ValidateAll() if the designated constraints +// aren't met. +type KubeConfigRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigRespMultiError) AllErrors() []error { return m } + // KubeConfigRespValidationError is the validation error returned by // KubeConfigResp.Validate if the designated constraints aren't met. type KubeConfigRespValidationError struct { @@ -9945,21 +16328,56 @@ var _ interface { // Validate checks the field values on KubeConfigConnectResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *KubeConfigConnectResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigConnectResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// KubeConfigConnectRespMultiError, or nil if none found. +func (m *KubeConfigConnectResp) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigConnectResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return KubeConfigConnectRespMultiError(errors) + } + return nil } +// KubeConfigConnectRespMultiError is an error wrapping multiple validation +// errors returned by KubeConfigConnectResp.ValidateAll() if the designated +// constraints aren't met. +type KubeConfigConnectRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigConnectRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KubeConfigConnectRespMultiError) AllErrors() []error { return m } + // KubeConfigConnectRespValidationError is the validation error returned by // KubeConfigConnectResp.Validate if the designated constraints aren't met. type KubeConfigConnectRespValidationError struct { @@ -10017,20 +16435,55 @@ var _ interface { } = KubeConfigConnectRespValidationError{} // Validate checks the field values on ImportCloudMode with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ImportCloudMode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportCloudMode with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ImportCloudModeMultiError, or nil if none found. +func (m *ImportCloudMode) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportCloudMode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for KubeConfig + if len(errors) > 0 { + return ImportCloudModeMultiError(errors) + } + return nil } +// ImportCloudModeMultiError is an error wrapping multiple validation errors +// returned by ImportCloudMode.ValidateAll() if the designated constraints +// aren't met. +type ImportCloudModeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportCloudModeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImportCloudModeMultiError) AllErrors() []error { return m } + // ImportCloudModeValidationError is the validation error returned by // ImportCloudMode.Validate if the designated constraints aren't met. type ImportCloudModeValidationError struct { @@ -10086,88 +16539,161 @@ var _ interface { } = ImportCloudModeValidationError{} // Validate checks the field values on ImportClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ImportClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ImportClusterReqMultiError, or nil if none found. +func (m *ImportClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Description if l := utf8.RuneCountInString(m.GetProvider()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Provider", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetProjectID()); l < 1 || l > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ProjectID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetBusinessID()); l < 1 || l > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "BusinessID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _ImportClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _ImportClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos ]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsExclusive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ImportClusterReqValidationError{ field: "IsExclusive", @@ -10178,31 +16704,47 @@ func (m *ImportClusterReq) Validate() error { } if _, ok := _ImportClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single ]", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetLabels()) > 20 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Creator", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if m.GetCloudMode() == nil { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "CloudMode", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetCloudMode(); a != nil { @@ -10222,22 +16764,51 @@ func (m *ImportClusterReq) Validate() error { // no validation rules for IsShared if utf8.RuneCountInString(m.GetVersion()) > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Version", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "AccountID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ImportClusterReqMultiError(errors) } return nil } +// ImportClusterReqMultiError is an error wrapping multiple validation errors +// returned by ImportClusterReq.ValidateAll() if the designated constraints +// aren't met. +type ImportClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImportClusterReqMultiError) AllErrors() []error { return m } + // ImportClusterReqValidationError is the validation error returned by // ImportClusterReq.Validate if the designated constraints aren't met. type ImportClusterReqValidationError struct { @@ -10317,20 +16888,53 @@ var _ImportClusterReq_ClusterType_InLookup = map[string]struct{}{ } // Validate checks the field values on ImportClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ImportClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ImportClusterRespMultiError, or nil if none found. +func (m *ImportClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ImportClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ImportClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ImportClusterRespValidationError{ field: "Data", @@ -10340,9 +16944,30 @@ func (m *ImportClusterResp) Validate() error { } } + if len(errors) > 0 { + return ImportClusterRespMultiError(errors) + } + return nil } +// ImportClusterRespMultiError is an error wrapping multiple validation errors +// returned by ImportClusterResp.ValidateAll() if the designated constraints +// aren't met. +type ImportClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ImportClusterRespMultiError) AllErrors() []error { return m } + // ImportClusterRespValidationError is the validation error returned by // ImportClusterResp.Validate if the designated constraints aren't met. type ImportClusterRespValidationError struct { @@ -10401,40 +17026,87 @@ var _ interface { // Validate checks the field values on DeleteVirtualClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteVirtualClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteVirtualClusterReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteVirtualClusterReqMultiError, or nil if none found. +func (m *DeleteVirtualClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteVirtualClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteVirtualClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo // no validation rules for Operator + if len(errors) > 0 { + return DeleteVirtualClusterReqMultiError(errors) + } + return nil } +// DeleteVirtualClusterReqMultiError is an error wrapping multiple validation +// errors returned by DeleteVirtualClusterReq.ValidateAll() if the designated +// constraints aren't met. +type DeleteVirtualClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteVirtualClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteVirtualClusterReqMultiError) AllErrors() []error { return m } + // DeleteVirtualClusterReqValidationError is the validation error returned by // DeleteVirtualClusterReq.Validate if the designated constraints aren't met. type DeleteVirtualClusterReqValidationError struct { @@ -10495,19 +17167,52 @@ var _DeleteVirtualClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on DeleteVirtualClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteVirtualClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteVirtualClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteVirtualClusterRespMultiError, or nil if none found. +func (m *DeleteVirtualClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteVirtualClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "Data", @@ -10517,7 +17222,26 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "Task", @@ -10527,7 +17251,26 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "WebAnnotations", @@ -10537,9 +17280,30 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } + if len(errors) > 0 { + return DeleteVirtualClusterRespMultiError(errors) + } + return nil } +// DeleteVirtualClusterRespMultiError is an error wrapping multiple validation +// errors returned by DeleteVirtualClusterResp.ValidateAll() if the designated +// constraints aren't met. +type DeleteVirtualClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteVirtualClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteVirtualClusterRespMultiError) AllErrors() []error { return m } + // DeleteVirtualClusterRespValidationError is the validation error returned by // DeleteVirtualClusterResp.Validate if the designated constraints aren't met. type DeleteVirtualClusterRespValidationError struct { @@ -10598,34 +17362,79 @@ var _ interface { // Validate checks the field values on UpdateVirtualClusterQuotaReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateVirtualClusterQuotaReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateVirtualClusterQuotaReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateVirtualClusterQuotaReqMultiError, or nil if none found. +func (m *UpdateVirtualClusterQuotaReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateVirtualClusterQuotaReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateVirtualClusterQuotaReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetQuota()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaReqValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaReqValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateVirtualClusterQuotaReqValidationError{ field: "Quota", @@ -10636,15 +17445,40 @@ func (m *UpdateVirtualClusterQuotaReq) Validate() error { } if utf8.RuneCountInString(m.GetUpdater()) > 1024 { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "Updater", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateVirtualClusterQuotaReqMultiError(errors) } return nil } +// UpdateVirtualClusterQuotaReqMultiError is an error wrapping multiple +// validation errors returned by UpdateVirtualClusterQuotaReq.ValidateAll() if +// the designated constraints aren't met. +type UpdateVirtualClusterQuotaReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateVirtualClusterQuotaReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateVirtualClusterQuotaReqMultiError) AllErrors() []error { return m } + // UpdateVirtualClusterQuotaReqValidationError is the validation error returned // by UpdateVirtualClusterQuotaReq.Validate if the designated constraints // aren't met. @@ -10706,19 +17540,52 @@ var _UpdateVirtualClusterQuotaReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a // Validate checks the field values on UpdateVirtualClusterQuotaResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateVirtualClusterQuotaResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateVirtualClusterQuotaResp with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateVirtualClusterQuotaRespMultiError, or nil if none found. +func (m *UpdateVirtualClusterQuotaResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateVirtualClusterQuotaResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateVirtualClusterQuotaRespValidationError{ field: "Data", @@ -10728,9 +17595,30 @@ func (m *UpdateVirtualClusterQuotaResp) Validate() error { } } + if len(errors) > 0 { + return UpdateVirtualClusterQuotaRespMultiError(errors) + } + return nil } +// UpdateVirtualClusterQuotaRespMultiError is an error wrapping multiple +// validation errors returned by UpdateVirtualClusterQuotaResp.ValidateAll() +// if the designated constraints aren't met. +type UpdateVirtualClusterQuotaRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateVirtualClusterQuotaRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateVirtualClusterQuotaRespMultiError) AllErrors() []error { return m } + // UpdateVirtualClusterQuotaRespValidationError is the validation error // returned by UpdateVirtualClusterQuotaResp.Validate if the designated // constraints aren't met. @@ -10789,32 +17677,58 @@ var _ interface { } = UpdateVirtualClusterQuotaRespValidationError{} // Validate checks the field values on DeleteClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterReqMultiError, or nil if none found. +func (m *DeleteClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForced @@ -10827,9 +17741,30 @@ func (m *DeleteClusterReq) Validate() error { // no validation rules for DeleteClusterRecord + if len(errors) > 0 { + return DeleteClusterReqMultiError(errors) + } + return nil } +// DeleteClusterReqMultiError is an error wrapping multiple validation errors +// returned by DeleteClusterReq.ValidateAll() if the designated constraints +// aren't met. +type DeleteClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterReqMultiError) AllErrors() []error { return m } + // DeleteClusterReqValidationError is the validation error returned by // DeleteClusterReq.Validate if the designated constraints aren't met. type DeleteClusterReqValidationError struct { @@ -10887,20 +17822,53 @@ var _ interface { var _DeleteClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterRespMultiError, or nil if none found. +func (m *DeleteClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "Data", @@ -10910,7 +17878,26 @@ func (m *DeleteClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "Task", @@ -10920,7 +17907,26 @@ func (m *DeleteClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "WebAnnotations", @@ -10930,9 +17936,30 @@ func (m *DeleteClusterResp) Validate() error { } } + if len(errors) > 0 { + return DeleteClusterRespMultiError(errors) + } + return nil } +// DeleteClusterRespMultiError is an error wrapping multiple validation errors +// returned by DeleteClusterResp.ValidateAll() if the designated constraints +// aren't met. +type DeleteClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterRespMultiError) AllErrors() []error { return m } + // DeleteClusterRespValidationError is the validation error returned by // DeleteClusterResp.Validate if the designated constraints aren't met. type DeleteClusterRespValidationError struct { @@ -10990,57 +18017,110 @@ var _ interface { } = DeleteClusterRespValidationError{} // Validate checks the field values on UpdateClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterReqMultiError, or nil if none found. +func (m *UpdateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "ClusterID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ClusterName if utf8.RuneCountInString(m.GetProvider()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Provider", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region if utf8.RuneCountInString(m.GetVpcID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Environment // no validation rules for EngineType - if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsExclusive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsExclusive", @@ -11055,65 +18135,154 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for FederationClusterID if len(m.GetLabels()) > 20 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Updater", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateClusterReq_Status_InLookup[m.GetStatus()]; !ok { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FAILURE INITIALIZATION DELETED ]", } - } - - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateClusterReqValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateClusterReqValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for SystemID // no validation rules for ManageType - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "NetworkSettings", @@ -11123,7 +18292,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "ClusterBasicSettings", @@ -11133,7 +18321,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -11143,7 +18350,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "NodeSettings", @@ -11161,7 +18387,26 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for ExtraClusterID - if v, ok := interface{}(m.GetIsCommonCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsCommonCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsCommonCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsCommonCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsCommonCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsCommonCluster", @@ -11171,7 +18416,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetDescription()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDescription()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "Description", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "Description", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDescription()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "Description", @@ -11183,7 +18447,26 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for ClusterCategory - if v, ok := interface{}(m.GetIsShared()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsShared()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsShared", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsShared", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsShared()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsShared", @@ -11196,19 +18479,44 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for CreateTime if utf8.RuneCountInString(m.GetCreator()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Creator", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ImportCategory // no validation rules for CloudAccountID + if len(errors) > 0 { + return UpdateClusterReqMultiError(errors) + } + return nil } +// UpdateClusterReqMultiError is an error wrapping multiple validation errors +// returned by UpdateClusterReq.ValidateAll() if the designated constraints +// aren't met. +type UpdateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterReqMultiError) AllErrors() []error { return m } + // UpdateClusterReqValidationError is the validation error returned by // UpdateClusterReq.Validate if the designated constraints aren't met. type UpdateClusterReqValidationError struct { @@ -11274,20 +18582,53 @@ var _UpdateClusterReq_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on UpdateClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterRespMultiError, or nil if none found. +func (m *UpdateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterRespValidationError{ field: "Data", @@ -11297,7 +18638,26 @@ func (m *UpdateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterRespValidationError{ field: "WebAnnotations", @@ -11307,9 +18667,30 @@ func (m *UpdateClusterResp) Validate() error { } } + if len(errors) > 0 { + return UpdateClusterRespMultiError(errors) + } + return nil } +// UpdateClusterRespMultiError is an error wrapping multiple validation errors +// returned by UpdateClusterResp.ValidateAll() if the designated constraints +// aren't met. +type UpdateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterRespMultiError) AllErrors() []error { return m } + // UpdateClusterRespValidationError is the validation error returned by // UpdateClusterResp.Validate if the designated constraints aren't met. type UpdateClusterRespValidationError struct { @@ -11368,24 +18749,63 @@ var _ interface { // Validate checks the field values on RetryCreateClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RetryCreateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryCreateClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryCreateClusterReqMultiError, or nil if none found. +func (m *RetryCreateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryCreateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetOperator()); l < 1 || l > 100 { - return RetryCreateClusterReqValidationError{ + err := RetryCreateClusterReqValidationError{ field: "Operator", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RetryCreateClusterReqMultiError(errors) } return nil } +// RetryCreateClusterReqMultiError is an error wrapping multiple validation +// errors returned by RetryCreateClusterReq.ValidateAll() if the designated +// constraints aren't met. +type RetryCreateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryCreateClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryCreateClusterReqMultiError) AllErrors() []error { return m } + // RetryCreateClusterReqValidationError is the validation error returned by // RetryCreateClusterReq.Validate if the designated constraints aren't met. type RetryCreateClusterReqValidationError struct { @@ -11444,19 +18864,52 @@ var _ interface { // Validate checks the field values on RetryCreateClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RetryCreateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryCreateClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryCreateClusterRespMultiError, or nil if none found. +func (m *RetryCreateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryCreateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryCreateClusterRespValidationError{ field: "Data", @@ -11466,7 +18919,26 @@ func (m *RetryCreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryCreateClusterRespValidationError{ field: "Task", @@ -11476,9 +18948,30 @@ func (m *RetryCreateClusterResp) Validate() error { } } + if len(errors) > 0 { + return RetryCreateClusterRespMultiError(errors) + } + return nil } +// RetryCreateClusterRespMultiError is an error wrapping multiple validation +// errors returned by RetryCreateClusterResp.ValidateAll() if the designated +// constraints aren't met. +type RetryCreateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryCreateClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryCreateClusterRespMultiError) AllErrors() []error { return m } + // RetryCreateClusterRespValidationError is the validation error returned by // RetryCreateClusterResp.Validate if the designated constraints aren't met. type RetryCreateClusterRespValidationError struct { @@ -11536,39 +19029,86 @@ var _ interface { } = RetryCreateClusterRespValidationError{} // Validate checks the field values on GetClusterReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterReq with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetClusterReqMultiError, or +// nil if none found. +func (m *GetClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_GetClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudInfo + if len(errors) > 0 { + return GetClusterReqMultiError(errors) + } + return nil } +// GetClusterReqMultiError is an error wrapping multiple validation errors +// returned by GetClusterReq.ValidateAll() if the designated constraints +// aren't met. +type GetClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterReqMultiError) AllErrors() []error { return m } + // GetClusterReqValidationError is the validation error returned by // GetClusterReq.Validate if the designated constraints aren't met. type GetClusterReqValidationError struct { @@ -11626,20 +19166,53 @@ var _ interface { var _GetClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetClusterResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetClusterRespMultiError, +// or nil if none found. +func (m *GetClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "Data", @@ -11649,7 +19222,26 @@ func (m *GetClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExtra()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "Extra", @@ -11659,7 +19251,26 @@ func (m *GetClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "WebAnnotations", @@ -11669,9 +19280,30 @@ func (m *GetClusterResp) Validate() error { } } + if len(errors) > 0 { + return GetClusterRespMultiError(errors) + } + return nil } +// GetClusterRespMultiError is an error wrapping multiple validation errors +// returned by GetClusterResp.ValidateAll() if the designated constraints +// aren't met. +type GetClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterRespMultiError) AllErrors() []error { return m } + // GetClusterRespValidationError is the validation error returned by // GetClusterResp.Validate if the designated constraints aren't met. type GetClusterRespValidationError struct { @@ -11727,18 +19359,53 @@ var _ interface { } = GetClusterRespValidationError{} // Validate checks the field values on ExtraClusterInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ExtraClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExtraClusterInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ExtraClusterInfoMultiError, or nil if none found. +func (m *ExtraClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ExtraClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProviderType + if len(errors) > 0 { + return ExtraClusterInfoMultiError(errors) + } + return nil } +// ExtraClusterInfoMultiError is an error wrapping multiple validation errors +// returned by ExtraClusterInfo.ValidateAll() if the designated constraints +// aren't met. +type ExtraClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExtraClusterInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ExtraClusterInfoMultiError) AllErrors() []error { return m } + // ExtraClusterInfoValidationError is the validation error returned by // ExtraClusterInfo.Validate if the designated constraints aren't met. type ExtraClusterInfoValidationError struct { @@ -11794,16 +19461,51 @@ var _ interface { } = ExtraClusterInfoValidationError{} // Validate checks the field values on CheckNodesRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CheckNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckNodesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CheckNodesRequestMultiError, or nil if none found. +func (m *CheckNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return CheckNodesRequestMultiError(errors) + } + return nil } +// CheckNodesRequestMultiError is an error wrapping multiple validation errors +// returned by CheckNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type CheckNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CheckNodesRequestMultiError) AllErrors() []error { return m } + // CheckNodesRequestValidationError is the validation error returned by // CheckNodesRequest.Validate if the designated constraints aren't met. type CheckNodesRequestValidationError struct { @@ -11862,38 +19564,102 @@ var _ interface { // Validate checks the field values on CheckNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CheckNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckNodesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CheckNodesResponseMultiError, or nil if none found. +func (m *CheckNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - for key, val := range m.GetData() { - _ = val - - // no validation rules for Data[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CheckNodesResponseValidationError{ - field: fmt.Sprintf("Data[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetData())) + i := 0 + for key := range m.GetData() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetData()[key] + _ = val + + // no validation rules for Data[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return CheckNodesResponseMultiError(errors) } return nil } +// CheckNodesResponseMultiError is an error wrapping multiple validation errors +// returned by CheckNodesResponse.ValidateAll() if the designated constraints +// aren't met. +type CheckNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CheckNodesResponseMultiError) AllErrors() []error { return m } + // CheckNodesResponseValidationError is the validation error returned by // CheckNodesResponse.Validate if the designated constraints aren't met. type CheckNodesResponseValidationError struct { @@ -11951,21 +19717,56 @@ var _ interface { } = CheckNodesResponseValidationError{} // Validate checks the field values on NodeResult with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeResult) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeResult with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeResultMultiError, or +// nil if none found. +func (m *NodeResult) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeResult) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsExist // no validation rules for ClusterID // no validation rules for ClusterName + if len(errors) > 0 { + return NodeResultMultiError(errors) + } + return nil } +// NodeResultMultiError is an error wrapping multiple validation errors +// returned by NodeResult.ValidateAll() if the designated constraints aren't met. +type NodeResultMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeResultMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeResultMultiError) AllErrors() []error { return m } + // NodeResultValidationError is the validation error returned by // NodeResult.Validate if the designated constraints aren't met. type NodeResultValidationError struct { @@ -12022,22 +19823,61 @@ var _ interface { // Validate checks the field values on UnCordonNodeRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UnCordonNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnCordonNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UnCordonNodeRequestMultiError, or nil if none found. +func (m *UnCordonNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UnCordonNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return UnCordonNodeRequestValidationError{ + err := UnCordonNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UnCordonNodeRequestMultiError(errors) } return nil } +// UnCordonNodeRequestMultiError is an error wrapping multiple validation +// errors returned by UnCordonNodeRequest.ValidateAll() if the designated +// constraints aren't met. +type UnCordonNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnCordonNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UnCordonNodeRequestMultiError) AllErrors() []error { return m } + // UnCordonNodeRequestValidationError is the validation error returned by // UnCordonNodeRequest.Validate if the designated constraints aren't met. type UnCordonNodeRequestValidationError struct { @@ -12096,19 +19936,52 @@ var _ interface { // Validate checks the field values on UnCordonNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UnCordonNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnCordonNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UnCordonNodeResponseMultiError, or nil if none found. +func (m *UnCordonNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UnCordonNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UnCordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UnCordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UnCordonNodeResponseValidationError{ field: "Data", @@ -12118,9 +19991,30 @@ func (m *UnCordonNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UnCordonNodeResponseMultiError(errors) + } + return nil } +// UnCordonNodeResponseMultiError is an error wrapping multiple validation +// errors returned by UnCordonNodeResponse.ValidateAll() if the designated +// constraints aren't met. +type UnCordonNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnCordonNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UnCordonNodeResponseMultiError) AllErrors() []error { return m } + // UnCordonNodeResponseValidationError is the validation error returned by // UnCordonNodeResponse.Validate if the designated constraints aren't met. type UnCordonNodeResponseValidationError struct { @@ -12178,23 +20072,62 @@ var _ interface { } = UnCordonNodeResponseValidationError{} // Validate checks the field values on CordonNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CordonNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CordonNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CordonNodeRequestMultiError, or nil if none found. +func (m *CordonNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CordonNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return CordonNodeRequestValidationError{ + err := CordonNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CordonNodeRequestMultiError(errors) } return nil } +// CordonNodeRequestMultiError is an error wrapping multiple validation errors +// returned by CordonNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type CordonNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CordonNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CordonNodeRequestMultiError) AllErrors() []error { return m } + // CordonNodeRequestValidationError is the validation error returned by // CordonNodeRequest.Validate if the designated constraints aren't met. type CordonNodeRequestValidationError struct { @@ -12253,19 +20186,52 @@ var _ interface { // Validate checks the field values on CordonNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CordonNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CordonNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CordonNodeResponseMultiError, or nil if none found. +func (m *CordonNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CordonNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CordonNodeResponseValidationError{ field: "Data", @@ -12275,9 +20241,30 @@ func (m *CordonNodeResponse) Validate() error { } } + if len(errors) > 0 { + return CordonNodeResponseMultiError(errors) + } + return nil } +// CordonNodeResponseMultiError is an error wrapping multiple validation errors +// returned by CordonNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type CordonNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CordonNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CordonNodeResponseMultiError) AllErrors() []error { return m } + // CordonNodeResponseValidationError is the validation error returned by // CordonNodeResponse.Validate if the designated constraints aren't met. type CordonNodeResponseValidationError struct { @@ -12335,25 +20322,47 @@ var _ interface { } = CordonNodeResponseValidationError{} // Validate checks the field values on UpdateNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeRequestMultiError, or nil if none found. +func (m *UpdateNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := len(m.GetInnerIPs()); l < 1 || l > 100 { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "InnerIPs", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateNodeRequest_Status_InLookup[m.GetStatus()]; !ok { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZATION RUNNING DELETING ADD-FAILURE REMOVE-FAILURE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeGroupID @@ -12361,15 +20370,40 @@ func (m *UpdateNodeRequest) Validate() error { // no validation rules for ClusterID if len(m.GetUpdater()) < 1 { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "Updater", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeRequestMultiError(errors) } return nil } +// UpdateNodeRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeRequestMultiError) AllErrors() []error { return m } + // UpdateNodeRequestValidationError is the validation error returned by // UpdateNodeRequest.Validate if the designated constraints aren't met. type UpdateNodeRequestValidationError struct { @@ -12436,19 +20470,52 @@ var _UpdateNodeRequest_Status_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeResponseMultiError, or nil if none found. +func (m *UpdateNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeResponseValidationError{ field: "Data", @@ -12458,9 +20525,30 @@ func (m *UpdateNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeResponseMultiError(errors) + } + return nil } +// UpdateNodeResponseMultiError is an error wrapping multiple validation errors +// returned by UpdateNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type UpdateNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeResponseMultiError) AllErrors() []error { return m } + // UpdateNodeResponseValidationError is the validation error returned by // UpdateNodeResponse.Validate if the designated constraints aren't met. type UpdateNodeResponseValidationError struct { @@ -12518,15 +20606,50 @@ var _ interface { } = UpdateNodeResponseValidationError{} // Validate checks the field values on NodeStatus with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeStatus with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeStatusMultiError, or +// nil if none found. +func (m *NodeStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return NodeStatusMultiError(errors) + } + return nil } +// NodeStatusMultiError is an error wrapping multiple validation errors +// returned by NodeStatus.ValidateAll() if the designated constraints aren't met. +type NodeStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeStatusMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeStatusMultiError) AllErrors() []error { return m } + // NodeStatusValidationError is the validation error returned by // NodeStatus.Validate if the designated constraints aren't met. type NodeStatusValidationError struct { @@ -12583,23 +20706,60 @@ var _ interface { // Validate checks the field values on RecordNodeInfoRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RecordNodeInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RecordNodeInfoRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RecordNodeInfoRequestMultiError, or nil if none found. +func (m *RecordNodeInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RecordNodeInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := len(m.GetNodes()); l < 1 || l > 1000 { - return RecordNodeInfoRequestValidationError{ + err := RecordNodeInfoRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 1000 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RecordNodeInfoRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RecordNodeInfoRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RecordNodeInfoRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -12611,9 +20771,30 @@ func (m *RecordNodeInfoRequest) Validate() error { } + if len(errors) > 0 { + return RecordNodeInfoRequestMultiError(errors) + } + return nil } +// RecordNodeInfoRequestMultiError is an error wrapping multiple validation +// errors returned by RecordNodeInfoRequest.ValidateAll() if the designated +// constraints aren't met. +type RecordNodeInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RecordNodeInfoRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RecordNodeInfoRequestMultiError) AllErrors() []error { return m } + // RecordNodeInfoRequestValidationError is the validation error returned by // RecordNodeInfoRequest.Validate if the designated constraints aren't met. type RecordNodeInfoRequestValidationError struct { @@ -12671,25 +20852,64 @@ var _ interface { } = RecordNodeInfoRequestValidationError{} // Validate checks the field values on GetNodeRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetNodeRequestMultiError, +// or nil if none found. +func (m *GetNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if ip := net.ParseIP(m.GetInnerIP()); ip == nil || ip.To4() == nil { - return GetNodeRequestValidationError{ + err := GetNodeRequestValidationError{ field: "InnerIP", reason: "value must be a valid IPv4 address", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ShowPwd + if len(errors) > 0 { + return GetNodeRequestMultiError(errors) + } + return nil } +// GetNodeRequestMultiError is an error wrapping multiple validation errors +// returned by GetNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type GetNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeRequestMultiError) AllErrors() []error { return m } + // GetNodeRequestValidationError is the validation error returned by // GetNodeRequest.Validate if the designated constraints aren't met. type GetNodeRequestValidationError struct { @@ -12745,13 +20965,27 @@ var _ interface { } = GetNodeRequestValidationError{} // Validate checks the field values on GetNodeResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeResponseMultiError, or nil if none found. +func (m *GetNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -12761,7 +20995,26 @@ func (m *GetNodeResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -12773,9 +21026,30 @@ func (m *GetNodeResponse) Validate() error { } + if len(errors) > 0 { + return GetNodeResponseMultiError(errors) + } + return nil } +// GetNodeResponseMultiError is an error wrapping multiple validation errors +// returned by GetNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type GetNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeResponseMultiError) AllErrors() []error { return m } + // GetNodeResponseValidationError is the validation error returned by // GetNodeResponse.Validate if the designated constraints aren't met. type GetNodeResponseValidationError struct { @@ -12832,22 +21106,61 @@ var _ interface { // Validate checks the field values on GetNodeInfoRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeInfoRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeInfoRequestMultiError, or nil if none found. +func (m *GetNodeInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if ip := net.ParseIP(m.GetInnerIP()); ip == nil || ip.To4() == nil { - return GetNodeInfoRequestValidationError{ + err := GetNodeInfoRequestValidationError{ field: "InnerIP", reason: "value must be a valid IPv4 address", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetNodeInfoRequestMultiError(errors) } return nil } +// GetNodeInfoRequestMultiError is an error wrapping multiple validation errors +// returned by GetNodeInfoRequest.ValidateAll() if the designated constraints +// aren't met. +type GetNodeInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeInfoRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeInfoRequestMultiError) AllErrors() []error { return m } + // GetNodeInfoRequestValidationError is the validation error returned by // GetNodeInfoRequest.Validate if the designated constraints aren't met. type GetNodeInfoRequestValidationError struct { @@ -12906,19 +21219,52 @@ var _ interface { // Validate checks the field values on GetNodeInfoResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeInfoResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeInfoResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeInfoResponseMultiError, or nil if none found. +func (m *GetNodeInfoResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeInfoResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeInfoResponseValidationError{ field: "Data", @@ -12928,9 +21274,30 @@ func (m *GetNodeInfoResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeInfoResponseMultiError(errors) + } + return nil } +// GetNodeInfoResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeInfoResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeInfoResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeInfoResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeInfoResponseMultiError) AllErrors() []error { return m } + // GetNodeInfoResponseValidationError is the validation error returned by // GetNodeInfoResponse.Validate if the designated constraints aren't met. type GetNodeInfoResponseValidationError struct { @@ -12988,12 +21355,27 @@ var _ interface { } = GetNodeInfoResponseValidationError{} // Validate checks the field values on NodeConfig with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeConfig with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeConfigMultiError, or +// nil if none found. +func (m *NodeConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InstanceType // no validation rules for CPU @@ -13002,9 +21384,29 @@ func (m *NodeConfig) Validate() error { // no validation rules for GPU + if len(errors) > 0 { + return NodeConfigMultiError(errors) + } + return nil } +// NodeConfigMultiError is an error wrapping multiple validation errors +// returned by NodeConfig.ValidateAll() if the designated constraints aren't met. +type NodeConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeConfigMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeConfigMultiError) AllErrors() []error { return m } + // NodeConfigValidationError is the validation error returned by // NodeConfig.Validate if the designated constraints aren't met. type NodeConfigValidationError struct { @@ -13060,12 +21462,27 @@ var _ interface { } = NodeConfigValidationError{} // Validate checks the field values on NodeInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeInfoMultiError, or nil +// if none found. +func (m *NodeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeName // no validation rules for NodeType @@ -13084,7 +21501,26 @@ func (m *NodeInfo) Validate() error { // no validation rules for Status - if v, ok := interface{}(m.GetInstanceConfig()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInstanceConfig()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "InstanceConfig", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "InstanceConfig", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInstanceConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "InstanceConfig", @@ -13094,7 +21530,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetZoneInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetZoneInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "ZoneInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "ZoneInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetZoneInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "ZoneInfo", @@ -13104,7 +21559,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "Group", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "Group", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "Group", @@ -13114,7 +21588,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "NodeTemplate", @@ -13124,9 +21617,29 @@ func (m *NodeInfo) Validate() error { } } + if len(errors) > 0 { + return NodeInfoMultiError(errors) + } + return nil } +// NodeInfoMultiError is an error wrapping multiple validation errors returned +// by NodeInfo.ValidateAll() if the designated constraints aren't met. +type NodeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeInfoMultiError) AllErrors() []error { return m } + // NodeInfoValidationError is the validation error returned by // NodeInfo.Validate if the designated constraints aren't met. type NodeInfoValidationError struct { @@ -13183,17 +21696,52 @@ var _ interface { // Validate checks the field values on ListCommonClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCommonClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCommonClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCommonClusterReqMultiError, or nil if none found. +func (m *ListCommonClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCommonClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ShowVCluster + if len(errors) > 0 { + return ListCommonClusterReqMultiError(errors) + } + return nil } +// ListCommonClusterReqMultiError is an error wrapping multiple validation +// errors returned by ListCommonClusterReq.ValidateAll() if the designated +// constraints aren't met. +type ListCommonClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCommonClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCommonClusterReqMultiError) AllErrors() []error { return m } + // ListCommonClusterReqValidationError is the validation error returned by // ListCommonClusterReq.Validate if the designated constraints aren't met. type ListCommonClusterReqValidationError struct { @@ -13252,12 +21800,26 @@ var _ interface { // Validate checks the field values on ListCommonClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCommonClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCommonClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCommonClusterRespMultiError, or nil if none found. +func (m *ListCommonClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCommonClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -13267,7 +21829,26 @@ func (m *ListCommonClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCommonClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -13279,7 +21860,26 @@ func (m *ListCommonClusterResp) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCommonClusterRespValidationError{ field: "WebAnnotations", @@ -13289,9 +21889,30 @@ func (m *ListCommonClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListCommonClusterRespMultiError(errors) + } + return nil } +// ListCommonClusterRespMultiError is an error wrapping multiple validation +// errors returned by ListCommonClusterResp.ValidateAll() if the designated +// constraints aren't met. +type ListCommonClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCommonClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCommonClusterRespMultiError) AllErrors() []error { return m } + // ListCommonClusterRespValidationError is the validation error returned by // ListCommonClusterResp.Validate if the designated constraints aren't met. type ListCommonClusterRespValidationError struct { @@ -13350,38 +21971,85 @@ var _ interface { // Validate checks the field values on ListProjectClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListProjectClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListProjectClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListProjectClusterReqMultiError, or nil if none found. +func (m *ListProjectClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListProjectClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Operator + if len(errors) > 0 { + return ListProjectClusterReqMultiError(errors) + } + return nil } +// ListProjectClusterReqMultiError is an error wrapping multiple validation +// errors returned by ListProjectClusterReq.ValidateAll() if the designated +// constraints aren't met. +type ListProjectClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListProjectClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListProjectClusterReqMultiError) AllErrors() []error { return m } + // ListProjectClusterReqValidationError is the validation error returned by // ListProjectClusterReq.Validate if the designated constraints aren't met. type ListProjectClusterReqValidationError struct { @@ -13440,12 +22108,26 @@ var _ interface { // Validate checks the field values on ListProjectClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListProjectClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListProjectClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListProjectClusterRespMultiError, or nil if none found. +func (m *ListProjectClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListProjectClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -13455,7 +22137,26 @@ func (m *ListProjectClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListProjectClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -13467,24 +22168,72 @@ func (m *ListProjectClusterResp) Validate() error { } - for key, val := range m.GetClusterExtraInfo() { - _ = val + { + sorted_keys := make([]string, len(m.GetClusterExtraInfo())) + i := 0 + for key := range m.GetClusterExtraInfo() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetClusterExtraInfo()[key] + _ = val + + // no validation rules for ClusterExtraInfo[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ClusterExtraInfo[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ListProjectClusterRespValidationError{ - field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + errors = append(errors, ListProjectClusterRespValidationError{ + field: "WebAnnotations", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListProjectClusterRespValidationError{ field: "WebAnnotations", @@ -13494,9 +22243,30 @@ func (m *ListProjectClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListProjectClusterRespMultiError(errors) + } + return nil } +// ListProjectClusterRespMultiError is an error wrapping multiple validation +// errors returned by ListProjectClusterResp.ValidateAll() if the designated +// constraints aren't met. +type ListProjectClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListProjectClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListProjectClusterRespMultiError) AllErrors() []error { return m } + // ListProjectClusterRespValidationError is the validation error returned by // ListProjectClusterResp.Validate if the designated constraints aren't met. type ListProjectClusterRespValidationError struct { @@ -13554,53 +22324,91 @@ var _ interface { } = ListProjectClusterRespValidationError{} // Validate checks the field values on ListClusterReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ListClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterReq with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ListClusterReqMultiError, +// or nil if none found. +func (m *ListClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterName()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "ClusterName", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Environment @@ -13614,33 +22422,49 @@ func (m *ListClusterReq) Validate() error { // no validation rules for FederationClusterID if _, ok := _ListClusterReq_Status_InLookup[m.GetStatus()]; !ok { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION DELETED ]", } + if !all { + return err + } + errors = append(errors, err) } if m.GetOffset() < 0 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Operator if utf8.RuneCountInString(m.GetSystemID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "SystemID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ExtraClusterID @@ -13649,9 +22473,30 @@ func (m *ListClusterReq) Validate() error { // no validation rules for ClusterID + if len(errors) > 0 { + return ListClusterReqMultiError(errors) + } + return nil } +// ListClusterReqMultiError is an error wrapping multiple validation errors +// returned by ListClusterReq.ValidateAll() if the designated constraints +// aren't met. +type ListClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterReqMultiError) AllErrors() []error { return m } + // ListClusterReqValidationError is the validation error returned by // ListClusterReq.Validate if the designated constraints aren't met. type ListClusterReqValidationError struct { @@ -13717,13 +22562,27 @@ var _ListClusterReq_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on ListClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterResp with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterRespMultiError, or nil if none found. +func (m *ListClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -13733,7 +22592,26 @@ func (m *ListClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -13745,24 +22623,72 @@ func (m *ListClusterResp) Validate() error { } - for key, val := range m.GetClusterExtraInfo() { - _ = val + { + sorted_keys := make([]string, len(m.GetClusterExtraInfo())) + i := 0 + for key := range m.GetClusterExtraInfo() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetClusterExtraInfo()[key] + _ = val + + // no validation rules for ClusterExtraInfo[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ClusterExtraInfo[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ListClusterRespValidationError{ - field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + errors = append(errors, ListClusterRespValidationError{ + field: "WebAnnotations", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterRespValidationError{ field: "WebAnnotations", @@ -13772,9 +22698,30 @@ func (m *ListClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListClusterRespMultiError(errors) + } + return nil } +// ListClusterRespMultiError is an error wrapping multiple validation errors +// returned by ListClusterResp.ValidateAll() if the designated constraints +// aren't met. +type ListClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterRespMultiError) AllErrors() []error { return m } + // ListClusterRespValidationError is the validation error returned by // ListClusterResp.Validate if the designated constraints aren't met. type ListClusterRespValidationError struct { @@ -13830,21 +22777,56 @@ var _ interface { } = ListClusterRespValidationError{} // Validate checks the field values on ExtraInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ExtraInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExtraInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ExtraInfoMultiError, or nil +// if none found. +func (m *ExtraInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ExtraInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CanDeleted // no validation rules for ProviderType // no validation rules for AutoScale + if len(errors) > 0 { + return ExtraInfoMultiError(errors) + } + return nil } +// ExtraInfoMultiError is an error wrapping multiple validation errors returned +// by ExtraInfo.ValidateAll() if the designated constraints aren't met. +type ExtraInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExtraInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ExtraInfoMultiError) AllErrors() []error { return m } + // ExtraInfoValidationError is the validation error returned by // ExtraInfo.Validate if the designated constraints aren't met. type ExtraInfoValidationError struct { @@ -13900,33 +22882,97 @@ var _ interface { } = ExtraInfoValidationError{} // Validate checks the field values on WebAnnotations with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *WebAnnotations) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebAnnotations with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in WebAnnotationsMultiError, +// or nil if none found. +func (m *WebAnnotations) ValidateAll() error { + return m.validate(true) +} + +func (m *WebAnnotations) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPerms() { - _ = val + var errors []error - // no validation rules for Perms[key] + { + sorted_keys := make([]string, len(m.GetPerms())) + i := 0 + for key := range m.GetPerms() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPerms()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return WebAnnotationsValidationError{ - field: fmt.Sprintf("Perms[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Perms[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return WebAnnotationsMultiError(errors) } return nil } +// WebAnnotationsMultiError is an error wrapping multiple validation errors +// returned by WebAnnotations.ValidateAll() if the designated constraints +// aren't met. +type WebAnnotationsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebAnnotationsMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WebAnnotationsMultiError) AllErrors() []error { return m } + // WebAnnotationsValidationError is the validation error returned by // WebAnnotations.Validate if the designated constraints aren't met. type WebAnnotationsValidationError struct { @@ -13982,14 +23028,47 @@ var _ interface { } = WebAnnotationsValidationError{} // Validate checks the field values on WebAnnotationsV2 with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *WebAnnotationsV2) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebAnnotationsV2 with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// WebAnnotationsV2MultiError, or nil if none found. +func (m *WebAnnotationsV2) ValidateAll() error { + return m.validate(true) +} + +func (m *WebAnnotationsV2) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetPerms()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetPerms()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WebAnnotationsV2ValidationError{ + field: "Perms", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WebAnnotationsV2ValidationError{ + field: "Perms", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetPerms()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return WebAnnotationsV2ValidationError{ field: "Perms", @@ -13999,9 +23078,30 @@ func (m *WebAnnotationsV2) Validate() error { } } + if len(errors) > 0 { + return WebAnnotationsV2MultiError(errors) + } + return nil } +// WebAnnotationsV2MultiError is an error wrapping multiple validation errors +// returned by WebAnnotationsV2.ValidateAll() if the designated constraints +// aren't met. +type WebAnnotationsV2MultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebAnnotationsV2MultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WebAnnotationsV2MultiError) AllErrors() []error { return m } + // WebAnnotationsV2ValidationError is the validation error returned by // WebAnnotationsV2.Validate if the designated constraints aren't met. type WebAnnotationsV2ValidationError struct { @@ -14058,38 +23158,68 @@ var _ interface { // Validate checks the field values on ListNodesInClusterRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInClusterRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInClusterRequestMultiError, or nil if none found. +func (m *ListNodesInClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodeGroupID()) > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "NodeGroupID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for InstanceType @@ -14097,24 +23227,53 @@ func (m *ListNodesInClusterRequest) Validate() error { // no validation rules for Status if m.GetOffset() < 0 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ShowPwd + if len(errors) > 0 { + return ListNodesInClusterRequestMultiError(errors) + } + return nil } +// ListNodesInClusterRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodesInClusterRequest.ValidateAll() if the +// designated constraints aren't met. +type ListNodesInClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInClusterRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInClusterRequestMultiError) AllErrors() []error { return m } + // ListNodesInClusterRequestValidationError is the validation error returned by // ListNodesInClusterRequest.Validate if the designated constraints aren't met. type ListNodesInClusterRequestValidationError struct { @@ -14173,12 +23332,26 @@ var _ interface { // Validate checks the field values on ListNodesInClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInClusterResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInClusterResponseMultiError, or nil if none found. +func (m *ListNodesInClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14188,7 +23361,26 @@ func (m *ListNodesInClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14200,7 +23392,26 @@ func (m *ListNodesInClusterResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInClusterResponseValidationError{ field: "WebAnnotations", @@ -14210,9 +23421,30 @@ func (m *ListNodesInClusterResponse) Validate() error { } } + if len(errors) > 0 { + return ListNodesInClusterResponseMultiError(errors) + } + return nil } +// ListNodesInClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListNodesInClusterResponse.ValidateAll() if +// the designated constraints aren't met. +type ListNodesInClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInClusterResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInClusterResponseMultiError) AllErrors() []error { return m } + // ListNodesInClusterResponseValidationError is the validation error returned // by ListNodesInClusterResponse.Validate if the designated constraints aren't met. type ListNodesInClusterResponseValidationError struct { @@ -14270,13 +23502,27 @@ var _ interface { } = ListNodesInClusterResponseValidationError{} // Validate checks the field values on ClusterNode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ClusterNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterNode with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ClusterNodeMultiError, or +// nil if none found. +func (m *ClusterNode) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -14312,7 +23558,26 @@ func (m *ClusterNode) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterNodeValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterNodeValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterNodeValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -14348,9 +23613,29 @@ func (m *ClusterNode) Validate() error { // no validation rules for TaskID + if len(errors) > 0 { + return ClusterNodeMultiError(errors) + } + return nil } +// ClusterNodeMultiError is an error wrapping multiple validation errors +// returned by ClusterNode.ValidateAll() if the designated constraints aren't met. +type ClusterNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterNodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ClusterNodeMultiError) AllErrors() []error { return m } + // ClusterNodeValidationError is the validation error returned by // ClusterNode.Validate if the designated constraints aren't met. type ClusterNodeValidationError struct { @@ -14407,22 +23692,61 @@ var _ interface { // Validate checks the field values on ListMastersInClusterRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListMastersInClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListMastersInClusterRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListMastersInClusterRequestMultiError, or nil if none found. +func (m *ListMastersInClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListMastersInClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListMastersInClusterRequestValidationError{ + err := ListMastersInClusterRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListMastersInClusterRequestMultiError(errors) } return nil } +// ListMastersInClusterRequestMultiError is an error wrapping multiple +// validation errors returned by ListMastersInClusterRequest.ValidateAll() if +// the designated constraints aren't met. +type ListMastersInClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListMastersInClusterRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListMastersInClusterRequestMultiError) AllErrors() []error { return m } + // ListMastersInClusterRequestValidationError is the validation error returned // by ListMastersInClusterRequest.Validate if the designated constraints // aren't met. @@ -14482,12 +23806,26 @@ var _ interface { // Validate checks the field values on ListMastersInClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListMastersInClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListMastersInClusterResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListMastersInClusterResponseMultiError, or nil if none found. +func (m *ListMastersInClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListMastersInClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14497,7 +23835,26 @@ func (m *ListMastersInClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListMastersInClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14509,7 +23866,26 @@ func (m *ListMastersInClusterResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListMastersInClusterResponseValidationError{ field: "WebAnnotations", @@ -14519,9 +23895,30 @@ func (m *ListMastersInClusterResponse) Validate() error { } } + if len(errors) > 0 { + return ListMastersInClusterResponseMultiError(errors) + } + return nil } +// ListMastersInClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListMastersInClusterResponse.ValidateAll() if +// the designated constraints aren't met. +type ListMastersInClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListMastersInClusterResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListMastersInClusterResponseMultiError) AllErrors() []error { return m } + // ListMastersInClusterResponseValidationError is the validation error returned // by ListMastersInClusterResponse.Validate if the designated constraints // aren't met. @@ -14581,22 +23978,61 @@ var _ interface { // Validate checks the field values on GetClusterCredentialReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetClusterCredentialReqMultiError, or nil if none found. +func (m *GetClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 1 || l > 100 { - return GetClusterCredentialReqValidationError{ + err := GetClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetClusterCredentialReqMultiError(errors) } return nil } +// GetClusterCredentialReqMultiError is an error wrapping multiple validation +// errors returned by GetClusterCredentialReq.ValidateAll() if the designated +// constraints aren't met. +type GetClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterCredentialReqMultiError) AllErrors() []error { return m } + // GetClusterCredentialReqValidationError is the validation error returned by // GetClusterCredentialReq.Validate if the designated constraints aren't met. type GetClusterCredentialReqValidationError struct { @@ -14655,19 +24091,52 @@ var _ interface { // Validate checks the field values on GetClusterCredentialResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetClusterCredentialRespMultiError, or nil if none found. +func (m *GetClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterCredentialRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterCredentialRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterCredentialRespValidationError{ field: "Data", @@ -14677,9 +24146,30 @@ func (m *GetClusterCredentialResp) Validate() error { } } + if len(errors) > 0 { + return GetClusterCredentialRespMultiError(errors) + } + return nil } +// GetClusterCredentialRespMultiError is an error wrapping multiple validation +// errors returned by GetClusterCredentialResp.ValidateAll() if the designated +// constraints aren't met. +type GetClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetClusterCredentialRespMultiError) AllErrors() []error { return m } + // GetClusterCredentialRespValidationError is the validation error returned by // GetClusterCredentialResp.Validate if the designated constraints aren't met. type GetClusterCredentialRespValidationError struct { @@ -14738,78 +24228,149 @@ var _ interface { // Validate checks the field values on UpdateClusterCredentialReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterCredentialReqMultiError, or nil if none found. +func (m *UpdateClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClientModule()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientModule", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetServerAddress()); l < 1 || l > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ServerAddress", reason: "value length must be between 1 and 2048 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCaCertData()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "CaCertData", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUserToken()) > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "UserToken", reason: "value length must be at most 2048 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterDomain()) > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClusterDomain", reason: "value length must be at most 2048 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientCert()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientCert", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientKey()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientKey", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateClusterCredentialReqMultiError(errors) } return nil } +// UpdateClusterCredentialReqMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterCredentialReq.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterCredentialReqMultiError) AllErrors() []error { return m } + // UpdateClusterCredentialReqValidationError is the validation error returned // by UpdateClusterCredentialReq.Validate if the designated constraints aren't met. type UpdateClusterCredentialReqValidationError struct { @@ -14868,21 +24429,56 @@ var _ interface { // Validate checks the field values on UpdateClusterCredentialResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateClusterCredentialRespMultiError, or nil if none found. +func (m *UpdateClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateClusterCredentialRespMultiError(errors) + } + return nil } +// UpdateClusterCredentialRespMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterCredentialResp.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateClusterCredentialRespMultiError) AllErrors() []error { return m } + // UpdateClusterCredentialRespValidationError is the validation error returned // by UpdateClusterCredentialResp.Validate if the designated constraints // aren't met. @@ -14942,22 +24538,61 @@ var _ interface { // Validate checks the field values on DeleteClusterCredentialReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterCredentialReqMultiError, or nil if none found. +func (m *DeleteClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 2 || l > 100 { - return DeleteClusterCredentialReqValidationError{ + err := DeleteClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteClusterCredentialReqMultiError(errors) } return nil } +// DeleteClusterCredentialReqMultiError is an error wrapping multiple +// validation errors returned by DeleteClusterCredentialReq.ValidateAll() if +// the designated constraints aren't met. +type DeleteClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterCredentialReqMultiError) AllErrors() []error { return m } + // DeleteClusterCredentialReqValidationError is the validation error returned // by DeleteClusterCredentialReq.Validate if the designated constraints aren't met. type DeleteClusterCredentialReqValidationError struct { @@ -15016,21 +24651,56 @@ var _ interface { // Validate checks the field values on DeleteClusterCredentialResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteClusterCredentialRespMultiError, or nil if none found. +func (m *DeleteClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return DeleteClusterCredentialRespMultiError(errors) + } + return nil } +// DeleteClusterCredentialRespMultiError is an error wrapping multiple +// validation errors returned by DeleteClusterCredentialResp.ValidateAll() if +// the designated constraints aren't met. +type DeleteClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteClusterCredentialRespMultiError) AllErrors() []error { return m } + // DeleteClusterCredentialRespValidationError is the validation error returned // by DeleteClusterCredentialResp.Validate if the designated constraints // aren't met. @@ -15090,57 +24760,116 @@ var _ interface { // Validate checks the field values on ListClusterCredentialReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterCredentialReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterCredentialReqMultiError, or nil if none found. +func (m *ListClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetServerKey()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientMode()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ClientMode", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetConnectMode()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ConnectMode", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if m.GetOffset() < 0 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListClusterCredentialReqMultiError(errors) } return nil } +// ListClusterCredentialReqMultiError is an error wrapping multiple validation +// errors returned by ListClusterCredentialReq.ValidateAll() if the designated +// constraints aren't met. +type ListClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterCredentialReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterCredentialReqMultiError) AllErrors() []error { return m } + // ListClusterCredentialReqValidationError is the validation error returned by // ListClusterCredentialReq.Validate if the designated constraints aren't met. type ListClusterCredentialReqValidationError struct { @@ -15199,12 +24928,26 @@ var _ interface { // Validate checks the field values on ListClusterCredentialResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterCredentialResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterCredentialRespMultiError, or nil if none found. +func (m *ListClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -15214,7 +24957,26 @@ func (m *ListClusterCredentialResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterCredentialRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterCredentialRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterCredentialRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -15226,9 +24988,30 @@ func (m *ListClusterCredentialResp) Validate() error { } + if len(errors) > 0 { + return ListClusterCredentialRespMultiError(errors) + } + return nil } +// ListClusterCredentialRespMultiError is an error wrapping multiple validation +// errors returned by ListClusterCredentialResp.ValidateAll() if the +// designated constraints aren't met. +type ListClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterCredentialRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterCredentialRespMultiError) AllErrors() []error { return m } + // ListClusterCredentialRespValidationError is the validation error returned by // ListClusterCredentialResp.Validate if the designated constraints aren't met. type ListClusterCredentialRespValidationError struct { @@ -15287,15 +25070,50 @@ var _ interface { // Validate checks the field values on InitFederationClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InitFederationClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InitFederationClusterReq with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InitFederationClusterReqMultiError, or nil if none found. +func (m *InitFederationClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *InitFederationClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return InitFederationClusterReqMultiError(errors) + } + return nil } +// InitFederationClusterReqMultiError is an error wrapping multiple validation +// errors returned by InitFederationClusterReq.ValidateAll() if the designated +// constraints aren't met. +type InitFederationClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InitFederationClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InitFederationClusterReqMultiError) AllErrors() []error { return m } + // InitFederationClusterReqValidationError is the validation error returned by // InitFederationClusterReq.Validate if the designated constraints aren't met. type InitFederationClusterReqValidationError struct { @@ -15354,15 +25172,50 @@ var _ interface { // Validate checks the field values on InitFederationClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InitFederationClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InitFederationClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// InitFederationClusterRespMultiError, or nil if none found. +func (m *InitFederationClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *InitFederationClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return InitFederationClusterRespMultiError(errors) + } + return nil } +// InitFederationClusterRespMultiError is an error wrapping multiple validation +// errors returned by InitFederationClusterResp.ValidateAll() if the +// designated constraints aren't met. +type InitFederationClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InitFederationClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InitFederationClusterRespMultiError) AllErrors() []error { return m } + // InitFederationClusterRespValidationError is the validation error returned by // InitFederationClusterResp.Validate if the designated constraints aren't met. type InitFederationClusterRespValidationError struct { @@ -15421,19 +25274,54 @@ var _ interface { // Validate checks the field values on AddFederatedClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddFederatedClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddFederatedClusterReq with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddFederatedClusterReqMultiError, or nil if none found. +func (m *AddFederatedClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *AddFederatedClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for FederationClusterID // no validation rules for ClusterID + if len(errors) > 0 { + return AddFederatedClusterReqMultiError(errors) + } + return nil } +// AddFederatedClusterReqMultiError is an error wrapping multiple validation +// errors returned by AddFederatedClusterReq.ValidateAll() if the designated +// constraints aren't met. +type AddFederatedClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddFederatedClusterReqMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddFederatedClusterReqMultiError) AllErrors() []error { return m } + // AddFederatedClusterReqValidationError is the validation error returned by // AddFederatedClusterReq.Validate if the designated constraints aren't met. type AddFederatedClusterReqValidationError struct { @@ -15492,21 +25380,56 @@ var _ interface { // Validate checks the field values on AddFederatedClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddFederatedClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddFederatedClusterResp with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddFederatedClusterRespMultiError, or nil if none found. +func (m *AddFederatedClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *AddFederatedClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return AddFederatedClusterRespMultiError(errors) + } + return nil } +// AddFederatedClusterRespMultiError is an error wrapping multiple validation +// errors returned by AddFederatedClusterResp.ValidateAll() if the designated +// constraints aren't met. +type AddFederatedClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddFederatedClusterRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddFederatedClusterRespMultiError) AllErrors() []error { return m } + // AddFederatedClusterRespValidationError is the validation error returned by // AddFederatedClusterResp.Validate if the designated constraints aren't met. type AddFederatedClusterRespValidationError struct { @@ -15565,70 +25488,173 @@ var _ interface { // Validate checks the field values on CreateCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudRequestMultiError, or nil if none found. +func (m *CreateCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetName()); l < 2 || l > 64 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "Name", reason: "value length must be between 2 and 64 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateCloudRequestValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return CreateCloudRequestValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, CreateCloudRequestValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "CloudCredential", @@ -15638,7 +25664,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "OsManagement", @@ -15648,7 +25693,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "ClusterManagement", @@ -15658,7 +25722,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "NodeGroupManagement", @@ -15669,17 +25752,25 @@ func (m *CreateCloudRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudRequest_Creator_Pattern.MatchString(m.GetCreator()) { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "Creator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudProvider @@ -15692,7 +25783,26 @@ func (m *CreateCloudRequest) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "NetworkInfo", @@ -15702,7 +25812,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "ConfInfo", @@ -15714,9 +25843,30 @@ func (m *CreateCloudRequest) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return CreateCloudRequestMultiError(errors) + } + return nil } +// CreateCloudRequestMultiError is an error wrapping multiple validation errors +// returned by CreateCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type CreateCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudRequestMultiError) AllErrors() []error { return m } + // CreateCloudRequestValidationError is the validation error returned by // CreateCloudRequest.Validate if the designated constraints aren't met. type CreateCloudRequestValidationError struct { @@ -15779,21 +25929,56 @@ var _CreateCloudRequest_Creator_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on CreateCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudResponseMultiError, or nil if none found. +func (m *CreateCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return CreateCloudResponseMultiError(errors) + } + return nil } +// CreateCloudResponseMultiError is an error wrapping multiple validation +// errors returned by CreateCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudResponseMultiError) AllErrors() []error { return m } + // CreateCloudResponseValidationError is the validation error returned by // CreateCloudResponse.Validate if the designated constraints aren't met. type CreateCloudResponseValidationError struct { @@ -15852,63 +26037,162 @@ var _ interface { // Validate checks the field values on UpdateCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudRequestMultiError, or nil if none found. +func (m *UpdateCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "CloudID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetName()) > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "Name", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateCloudRequestValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return UpdateCloudRequestValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, UpdateCloudRequestValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "CloudCredential", @@ -15918,7 +26202,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "OsManagement", @@ -15928,7 +26231,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "ClusterManagement", @@ -15938,7 +26260,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "NodeGroupManagement", @@ -15949,17 +26290,25 @@ func (m *UpdateCloudRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudRequest_Updater_Pattern.MatchString(m.GetUpdater()) { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "Updater", reason: "value does not match regex pattern \"^[0-9a-zA-Z]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudProvider @@ -15972,7 +26321,26 @@ func (m *UpdateCloudRequest) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "NetworkInfo", @@ -15982,7 +26350,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "ConfInfo", @@ -15994,9 +26381,30 @@ func (m *UpdateCloudRequest) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return UpdateCloudRequestMultiError(errors) + } + return nil } +// UpdateCloudRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudRequestMultiError) AllErrors() []error { return m } + // UpdateCloudRequestValidationError is the validation error returned by // UpdateCloudRequest.Validate if the designated constraints aren't met. type UpdateCloudRequestValidationError struct { @@ -16057,19 +26465,52 @@ var _UpdateCloudRequest_Updater_Pattern = regexp.MustCompile("^[0-9a-zA-Z]+$") // Validate checks the field values on UpdateCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudResponseMultiError, or nil if none found. +func (m *UpdateCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudResponseValidationError{ field: "Data", @@ -16079,9 +26520,30 @@ func (m *UpdateCloudResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudResponseMultiError(errors) + } + return nil } +// UpdateCloudResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudResponseMultiError) AllErrors() []error { return m } + // UpdateCloudResponseValidationError is the validation error returned by // UpdateCloudResponse.Validate if the designated constraints aren't met. type UpdateCloudResponseValidationError struct { @@ -16140,31 +26602,74 @@ var _ interface { // Validate checks the field values on DeleteCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudRequestMultiError, or nil if none found. +func (m *DeleteCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return DeleteCloudRequestValidationError{ + err := DeleteCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudRequestValidationError{ + err := DeleteCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteCloudRequestMultiError(errors) + } + return nil } +// DeleteCloudRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudRequestMultiError) AllErrors() []error { return m } + // DeleteCloudRequestValidationError is the validation error returned by // DeleteCloudRequest.Validate if the designated constraints aren't met. type DeleteCloudRequestValidationError struct { @@ -16225,19 +26730,52 @@ var _DeleteCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudResponseMultiError, or nil if none found. +func (m *DeleteCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteCloudResponseValidationError{ field: "Data", @@ -16247,9 +26785,30 @@ func (m *DeleteCloudResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteCloudResponseMultiError(errors) + } + return nil } +// DeleteCloudResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudResponseMultiError) AllErrors() []error { return m } + // DeleteCloudResponseValidationError is the validation error returned by // DeleteCloudResponse.Validate if the designated constraints aren't met. type DeleteCloudResponseValidationError struct { @@ -16307,30 +26866,73 @@ var _ interface { } = DeleteCloudResponseValidationError{} // Validate checks the field values on GetCloudRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRequestMultiError, or nil if none found. +func (m *GetCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return GetCloudRequestValidationError{ + err := GetCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return GetCloudRequestValidationError{ + err := GetCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetCloudRequestMultiError(errors) } return nil } +// GetCloudRequestMultiError is an error wrapping multiple validation errors +// returned by GetCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type GetCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRequestMultiError) AllErrors() []error { return m } + // GetCloudRequestValidationError is the validation error returned by // GetCloudRequest.Validate if the designated constraints aren't met. type GetCloudRequestValidationError struct { @@ -16388,20 +26990,53 @@ var _ interface { var _GetCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetCloudResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudResponseMultiError, or nil if none found. +func (m *GetCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudResponseValidationError{ field: "Data", @@ -16411,9 +27046,30 @@ func (m *GetCloudResponse) Validate() error { } } + if len(errors) > 0 { + return GetCloudResponseMultiError(errors) + } + return nil } +// GetCloudResponseMultiError is an error wrapping multiple validation errors +// returned by GetCloudResponse.ValidateAll() if the designated constraints +// aren't met. +type GetCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudResponseMultiError) AllErrors() []error { return m } + // GetCloudResponseValidationError is the validation error returned by // GetCloudResponse.Validate if the designated constraints aren't met. type GetCloudResponseValidationError struct { @@ -16469,18 +27125,36 @@ var _ interface { } = GetCloudResponseValidationError{} // Validate checks the field values on ListCloudRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudRequestMultiError, or nil if none found. +func (m *ListCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudRequestValidationError{ + err := ListCloudRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Name @@ -16493,9 +27167,30 @@ func (m *ListCloudRequest) Validate() error { // no validation rules for CloudProvider + if len(errors) > 0 { + return ListCloudRequestMultiError(errors) + } + return nil } +// ListCloudRequestMultiError is an error wrapping multiple validation errors +// returned by ListCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type ListCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRequestMultiError) AllErrors() []error { return m } + // ListCloudRequestValidationError is the validation error returned by // ListCloudRequest.Validate if the designated constraints aren't met. type ListCloudRequestValidationError struct { @@ -16551,13 +27246,27 @@ var _ interface { } = ListCloudRequestValidationError{} // Validate checks the field values on ListCloudResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudResponseMultiError, or nil if none found. +func (m *ListCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -16567,7 +27276,26 @@ func (m *ListCloudResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -16579,9 +27307,30 @@ func (m *ListCloudResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudResponseMultiError(errors) + } + return nil } +// ListCloudResponseMultiError is an error wrapping multiple validation errors +// returned by ListCloudResponse.ValidateAll() if the designated constraints +// aren't met. +type ListCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudResponseMultiError) AllErrors() []error { return m } + // ListCloudResponseValidationError is the validation error returned by // ListCloudResponse.Validate if the designated constraints aren't met. type ListCloudResponseValidationError struct { @@ -16640,64 +27389,125 @@ var _ interface { // Validate checks the field values on CreateNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeGroupRequestMultiError, or nil if none found. +func (m *CreateNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetName()); l < 1 || l > 255 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Name", reason: "value length must be between 1 and 255 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 32 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Region", reason: "value length must be between 1 and 32 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeGroupRequest_Region_Pattern.MatchString(m.GetRegion()) { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for EnableAutoscale if m.GetAutoScaling() == nil { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "AutoScaling", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "AutoScaling", @@ -16708,13 +27518,36 @@ func (m *CreateNodeGroupRequest) Validate() error { } if m.GetLaunchTemplate() == nil { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "LaunchTemplate", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "LaunchTemplate", @@ -16731,24 +27564,51 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeGroupRequest_Creator_Pattern.MatchString(m.GetCreator()) { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Creator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider // no validation rules for ConsumerID - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "NodeTemplate", @@ -16766,7 +27626,26 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for CloudAreaName - if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExtra()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "Extra", @@ -16778,9 +27657,32 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for OnlyCreateInfo + // no validation rules for NodeRole + + if len(errors) > 0 { + return CreateNodeGroupRequestMultiError(errors) + } + return nil } +// CreateNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by CreateNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type CreateNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeGroupRequestMultiError) AllErrors() []error { return m } + // CreateNodeGroupRequestValidationError is the validation error returned by // CreateNodeGroupRequest.Validate if the designated constraints aren't met. type CreateNodeGroupRequestValidationError struct { @@ -16844,20 +27746,55 @@ var _CreateNodeGroupRequest_Region_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$ var _CreateNodeGroupRequest_Creator_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GroupExtraInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GroupExtraInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GroupExtraInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GroupExtraInfoMultiError, +// or nil if none found. +func (m *GroupExtraInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *GroupExtraInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Provider // no validation rules for PoolID + if len(errors) > 0 { + return GroupExtraInfoMultiError(errors) + } + return nil } +// GroupExtraInfoMultiError is an error wrapping multiple validation errors +// returned by GroupExtraInfo.ValidateAll() if the designated constraints +// aren't met. +type GroupExtraInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GroupExtraInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GroupExtraInfoMultiError) AllErrors() []error { return m } + // GroupExtraInfoValidationError is the validation error returned by // GroupExtraInfo.Validate if the designated constraints aren't met. type GroupExtraInfoValidationError struct { @@ -16914,19 +27851,52 @@ var _ interface { // Validate checks the field values on CreateNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeGroupResponseMultiError, or nil if none found. +func (m *CreateNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseValidationError{ field: "Data", @@ -16936,7 +27906,26 @@ func (m *CreateNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -16946,9 +27935,30 @@ func (m *CreateNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return CreateNodeGroupResponseMultiError(errors) + } + return nil } +// CreateNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by CreateNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeGroupResponseMultiError) AllErrors() []error { return m } + // CreateNodeGroupResponseValidationError is the validation error returned by // CreateNodeGroupResponse.Validate if the designated constraints aren't met. type CreateNodeGroupResponseValidationError struct { @@ -17007,13 +28017,46 @@ var _ interface { // Validate checks the field values on CreateNodeGroupResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupResponseData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateNodeGroupResponseDataMultiError, or nil if none found. +func (m *CreateNodeGroupResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupResponseData) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseDataValidationError{ field: "NodeGroup", @@ -17023,7 +28066,26 @@ func (m *CreateNodeGroupResponseData) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseDataValidationError{ field: "Task", @@ -17033,9 +28095,30 @@ func (m *CreateNodeGroupResponseData) Validate() error { } } + if len(errors) > 0 { + return CreateNodeGroupResponseDataMultiError(errors) + } + return nil } +// CreateNodeGroupResponseDataMultiError is an error wrapping multiple +// validation errors returned by CreateNodeGroupResponseData.ValidateAll() if +// the designated constraints aren't met. +type CreateNodeGroupResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupResponseDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateNodeGroupResponseDataMultiError) AllErrors() []error { return m } + // CreateNodeGroupResponseDataValidationError is the validation error returned // by CreateNodeGroupResponseData.Validate if the designated constraints // aren't met. @@ -17095,45 +28178,94 @@ var _ interface { // Validate checks the field values on UpdateNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeGroupRequestMultiError, or nil if none found. +func (m *UpdateNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetNodeGroupID()) > 20 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Name // no validation rules for Region - if v, ok := interface{}(m.GetEnableAutoscale()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnableAutoscale()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "EnableAutoscale", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "EnableAutoscale", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnableAutoscale()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "EnableAutoscale", @@ -17143,7 +28275,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "AutoScaling", @@ -17153,7 +28304,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "LaunchTemplate", @@ -17163,7 +28333,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "NodeTemplate", @@ -17182,17 +28371,25 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateNodeGroupRequest_Updater_Pattern.MatchString(m.GetUpdater()) { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "Updater", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -17201,7 +28398,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetBkCloudID()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBkCloudID()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "BkCloudID", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "BkCloudID", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBkCloudID()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "BkCloudID", @@ -17211,7 +28427,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetCloudAreaName()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudAreaName()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "CloudAreaName", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "CloudAreaName", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudAreaName()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "CloudAreaName", @@ -17223,9 +28458,30 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for OnlyUpdateInfo + if len(errors) > 0 { + return UpdateNodeGroupRequestMultiError(errors) + } + return nil } +// UpdateNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeGroupRequestMultiError) AllErrors() []error { return m } + // UpdateNodeGroupRequestValidationError is the validation error returned by // UpdateNodeGroupRequest.Validate if the designated constraints aren't met. type UpdateNodeGroupRequestValidationError struct { @@ -17288,19 +28544,52 @@ var _UpdateNodeGroupRequest_Updater_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+ // Validate checks the field values on UpdateNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeGroupResponseMultiError, or nil if none found. +func (m *UpdateNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupResponseValidationError{ field: "Data", @@ -17310,7 +28599,26 @@ func (m *UpdateNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -17320,9 +28628,30 @@ func (m *UpdateNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeGroupResponseMultiError(errors) + } + return nil } +// UpdateNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeGroupResponseMultiError) AllErrors() []error { return m } + // UpdateNodeGroupResponseValidationError is the validation error returned by // UpdateNodeGroupResponse.Validate if the designated constraints aren't met. type UpdateNodeGroupResponseValidationError struct { @@ -17381,24 +28710,46 @@ var _ interface { // Validate checks the field values on DeleteNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeGroupRequestMultiError, or nil if none found. +func (m *DeleteNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteNodeGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce @@ -17408,17 +28759,42 @@ func (m *DeleteNodeGroupRequest) Validate() error { // no validation rules for KeepNodesInstance if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 100 { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo + if len(errors) > 0 { + return DeleteNodeGroupRequestMultiError(errors) + } + return nil } +// DeleteNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeGroupRequestMultiError) AllErrors() []error { return m } + // DeleteNodeGroupRequestValidationError is the validation error returned by // DeleteNodeGroupRequest.Validate if the designated constraints aren't met. type DeleteNodeGroupRequestValidationError struct { @@ -17479,19 +28855,52 @@ var _DeleteNodeGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA- // Validate checks the field values on DeleteNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeGroupResponseMultiError, or nil if none found. +func (m *DeleteNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseValidationError{ field: "Data", @@ -17501,7 +28910,26 @@ func (m *DeleteNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -17511,9 +28939,30 @@ func (m *DeleteNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeGroupResponseMultiError(errors) + } + return nil } +// DeleteNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeGroupResponseMultiError) AllErrors() []error { return m } + // DeleteNodeGroupResponseValidationError is the validation error returned by // DeleteNodeGroupResponse.Validate if the designated constraints aren't met. type DeleteNodeGroupResponseValidationError struct { @@ -17572,13 +29021,46 @@ var _ interface { // Validate checks the field values on DeleteNodeGroupResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupResponseData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodeGroupResponseDataMultiError, or nil if none found. +func (m *DeleteNodeGroupResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupResponseData) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseDataValidationError{ field: "NodeGroup", @@ -17588,7 +29070,26 @@ func (m *DeleteNodeGroupResponseData) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseDataValidationError{ field: "Task", @@ -17598,9 +29099,30 @@ func (m *DeleteNodeGroupResponseData) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeGroupResponseDataMultiError(errors) + } + return nil } +// DeleteNodeGroupResponseDataMultiError is an error wrapping multiple +// validation errors returned by DeleteNodeGroupResponseData.ValidateAll() if +// the designated constraints aren't met. +type DeleteNodeGroupResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupResponseDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodeGroupResponseDataMultiError) AllErrors() []error { return m } + // DeleteNodeGroupResponseDataValidationError is the validation error returned // by DeleteNodeGroupResponseData.Validate if the designated constraints // aren't met. @@ -17660,29 +29182,72 @@ var _ interface { // Validate checks the field values on GetNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeGroupRequestMultiError, or nil if none found. +func (m *GetNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return GetNodeGroupRequestValidationError{ + err := GetNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetNodeGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return GetNodeGroupRequestValidationError{ + err := GetNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetNodeGroupRequestMultiError(errors) } return nil } +// GetNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by GetNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type GetNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeGroupRequestMultiError) AllErrors() []error { return m } + // GetNodeGroupRequestValidationError is the validation error returned by // GetNodeGroupRequest.Validate if the designated constraints aren't met. type GetNodeGroupRequestValidationError struct { @@ -17743,19 +29308,52 @@ var _GetNodeGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on GetNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeGroupResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetNodeGroupResponseMultiError, or nil if none found. +func (m *GetNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeGroupResponseValidationError{ field: "Data", @@ -17765,7 +29363,26 @@ func (m *GetNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -17775,9 +29392,30 @@ func (m *GetNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeGroupResponseMultiError(errors) + } + return nil } +// GetNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetNodeGroupResponseMultiError) AllErrors() []error { return m } + // GetNodeGroupResponseValidationError is the validation error returned by // GetNodeGroupResponse.Validate if the designated constraints aren't met. type GetNodeGroupResponseValidationError struct { @@ -17836,38 +29474,85 @@ var _ interface { // Validate checks the field values on ListClusterNodeGroupRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterNodeGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterNodeGroupRequestMultiError, or nil if none found. +func (m *ListClusterNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_ListClusterNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for EnableFilter + if len(errors) > 0 { + return ListClusterNodeGroupRequestMultiError(errors) + } + return nil } +// ListClusterNodeGroupRequestMultiError is an error wrapping multiple +// validation errors returned by ListClusterNodeGroupRequest.ValidateAll() if +// the designated constraints aren't met. +type ListClusterNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterNodeGroupRequestMultiError) AllErrors() []error { return m } + // ListClusterNodeGroupRequestValidationError is the validation error returned // by ListClusterNodeGroupRequest.Validate if the designated constraints // aren't met. @@ -17929,12 +29614,26 @@ var _ListClusterNodeGroupRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on ListClusterNodeGroupResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterNodeGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListClusterNodeGroupResponseMultiError, or nil if none found. +func (m *ListClusterNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -17944,7 +29643,26 @@ func (m *ListClusterNodeGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterNodeGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -17956,7 +29674,26 @@ func (m *ListClusterNodeGroupResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -17966,9 +29703,30 @@ func (m *ListClusterNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return ListClusterNodeGroupResponseMultiError(errors) + } + return nil } +// ListClusterNodeGroupResponseMultiError is an error wrapping multiple +// validation errors returned by ListClusterNodeGroupResponse.ValidateAll() if +// the designated constraints aren't met. +type ListClusterNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListClusterNodeGroupResponseMultiError) AllErrors() []error { return m } + // ListClusterNodeGroupResponseValidationError is the validation error returned // by ListClusterNodeGroupResponse.Validate if the designated constraints // aren't met. @@ -18028,12 +29786,26 @@ var _ interface { // Validate checks the field values on ListNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeGroupRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeGroupRequestMultiError, or nil if none found. +func (m *ListNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for ClusterID @@ -18042,9 +29814,30 @@ func (m *ListNodeGroupRequest) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return ListNodeGroupRequestMultiError(errors) + } + return nil } +// ListNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type ListNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeGroupRequestMultiError) AllErrors() []error { return m } + // ListNodeGroupRequestValidationError is the validation error returned by // ListNodeGroupRequest.Validate if the designated constraints aren't met. type ListNodeGroupRequestValidationError struct { @@ -18103,12 +29896,26 @@ var _ interface { // Validate checks the field values on ListNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeGroupResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodeGroupResponseMultiError, or nil if none found. +func (m *ListNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -18118,7 +29925,26 @@ func (m *ListNodeGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodeGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -18130,9 +29956,30 @@ func (m *ListNodeGroupResponse) Validate() error { } + if len(errors) > 0 { + return ListNodeGroupResponseMultiError(errors) + } + return nil } +// ListNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodeGroupResponseMultiError) AllErrors() []error { return m } + // ListNodeGroupResponseValidationError is the validation error returned by // ListNodeGroupResponse.Validate if the designated constraints aren't met. type ListNodeGroupResponseValidationError struct { @@ -18190,39 +30037,69 @@ var _ interface { } = ListNodeGroupResponseValidationError{} // Validate checks the field values on AddNodesRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *AddNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddNodesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddNodesRequestMultiError, or nil if none found. +func (m *AddNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *AddNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_AddNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetNodes()) < 1 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "Nodes", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } _AddNodesRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -18231,10 +30108,14 @@ func (m *AddNodesRequest) Validate() error { _, _ = idx, item if _, exists := _AddNodesRequest_Nodes_Unique[item]; exists { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _AddNodesRequest_Nodes_Unique[item] = struct{}{} } @@ -18249,26 +30130,55 @@ func (m *AddNodesRequest) Validate() error { // no validation rules for OnlyCreateInfo if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_AddNodesRequest_Operator_Pattern.MatchString(m.GetOperator()) { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "Operator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeTemplateID // no validation rules for IsExternalNode + if len(errors) > 0 { + return AddNodesRequestMultiError(errors) + } + return nil } +// AddNodesRequestMultiError is an error wrapping multiple validation errors +// returned by AddNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type AddNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddNodesRequestMultiError) AllErrors() []error { return m } + // AddNodesRequestValidationError is the validation error returned by // AddNodesRequest.Validate if the designated constraints aren't met. type AddNodesRequestValidationError struct { @@ -18328,20 +30238,53 @@ var _AddNodesRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") var _AddNodesRequest_Operator_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on AddNodesResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *AddNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddNodesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// AddNodesResponseMultiError, or nil if none found. +func (m *AddNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *AddNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesResponseValidationError{ field: "Data", @@ -18351,7 +30294,26 @@ func (m *AddNodesResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesResponseValidationError{ field: "WebAnnotations", @@ -18361,9 +30323,30 @@ func (m *AddNodesResponse) Validate() error { } } + if len(errors) > 0 { + return AddNodesResponseMultiError(errors) + } + return nil } +// AddNodesResponseMultiError is an error wrapping multiple validation errors +// returned by AddNodesResponse.ValidateAll() if the designated constraints +// aren't met. +type AddNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AddNodesResponseMultiError) AllErrors() []error { return m } + // AddNodesResponseValidationError is the validation error returned by // AddNodesResponse.Validate if the designated constraints aren't met. type AddNodesResponseValidationError struct { @@ -18420,31 +30403,57 @@ var _ interface { // Validate checks the field values on BatchDeleteClusterNodesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BatchDeleteClusterNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchDeleteClusterNodesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// BatchDeleteClusterNodesRequestMultiError, or nil if none found. +func (m *BatchDeleteClusterNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchDeleteClusterNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_BatchDeleteClusterNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeIPs @@ -18452,22 +30461,51 @@ func (m *BatchDeleteClusterNodesRequest) Validate() error { // no validation rules for VirtualNodeIDs if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_BatchDeleteClusterNodesRequest_Operator_Pattern.MatchString(m.GetOperator()) { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "Operator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return BatchDeleteClusterNodesRequestMultiError(errors) } return nil } +// BatchDeleteClusterNodesRequestMultiError is an error wrapping multiple +// validation errors returned by BatchDeleteClusterNodesRequest.ValidateAll() +// if the designated constraints aren't met. +type BatchDeleteClusterNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchDeleteClusterNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BatchDeleteClusterNodesRequestMultiError) AllErrors() []error { return m } + // BatchDeleteClusterNodesRequestValidationError is the validation error // returned by BatchDeleteClusterNodesRequest.Validate if the designated // constraints aren't met. @@ -18531,12 +30569,26 @@ var _BatchDeleteClusterNodesRequest_Operator_Pattern = regexp.MustCompile("^[0-9 // Validate checks the field values on BatchDeleteClusterNodesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BatchDeleteClusterNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchDeleteClusterNodesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// BatchDeleteClusterNodesResponseMultiError, or nil if none found. +func (m *BatchDeleteClusterNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchDeleteClusterNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -18546,7 +30598,26 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return BatchDeleteClusterNodesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -18558,7 +30629,26 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return BatchDeleteClusterNodesResponseValidationError{ field: "WebAnnotations", @@ -18568,9 +30658,30 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { } } + if len(errors) > 0 { + return BatchDeleteClusterNodesResponseMultiError(errors) + } + return nil } +// BatchDeleteClusterNodesResponseMultiError is an error wrapping multiple +// validation errors returned by BatchDeleteClusterNodesResponse.ValidateAll() +// if the designated constraints aren't met. +type BatchDeleteClusterNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchDeleteClusterNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BatchDeleteClusterNodesResponseMultiError) AllErrors() []error { return m } + // BatchDeleteClusterNodesResponseValidationError is the validation error // returned by BatchDeleteClusterNodesResponse.Validate if the designated // constraints aren't met. @@ -18629,13 +30740,27 @@ var _ interface { } = BatchDeleteClusterNodesResponseValidationError{} // Validate checks the field values on BatchNodesStatus with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *BatchNodesStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchNodesStatus with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// BatchNodesStatusMultiError, or nil if none found. +func (m *BatchNodesStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchNodesStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Success // no validation rules for Message @@ -18646,9 +30771,30 @@ func (m *BatchNodesStatus) Validate() error { // no validation rules for NodeGroupType + if len(errors) > 0 { + return BatchNodesStatusMultiError(errors) + } + return nil } +// BatchNodesStatusMultiError is an error wrapping multiple validation errors +// returned by BatchNodesStatus.ValidateAll() if the designated constraints +// aren't met. +type BatchNodesStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchNodesStatusMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BatchNodesStatusMultiError) AllErrors() []error { return m } + // BatchNodesStatusValidationError is the validation error returned by // BatchNodesStatus.Validate if the designated constraints aren't met. type BatchNodesStatusValidationError struct { @@ -18705,38 +30851,68 @@ var _ interface { // Validate checks the field values on DeleteNodesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodesRequestMultiError, or nil if none found. +func (m *DeleteNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodes()) < 1 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "Nodes", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DeleteMode @@ -18744,17 +30920,25 @@ func (m *DeleteNodesRequest) Validate() error { // no validation rules for IsForce if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteNodesRequest_Operator_Pattern.MatchString(m.GetOperator()) { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "Operator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo @@ -18765,9 +30949,30 @@ func (m *DeleteNodesRequest) Validate() error { // no validation rules for IsExternalNode + if len(errors) > 0 { + return DeleteNodesRequestMultiError(errors) + } + return nil } +// DeleteNodesRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodesRequestMultiError) AllErrors() []error { return m } + // DeleteNodesRequestValidationError is the validation error returned by // DeleteNodesRequest.Validate if the designated constraints aren't met. type DeleteNodesRequestValidationError struct { @@ -18830,19 +31035,52 @@ var _DeleteNodesRequest_Operator_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteNodesResponseMultiError, or nil if none found. +func (m *DeleteNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodesResponseValidationError{ field: "Data", @@ -18852,7 +31090,26 @@ func (m *DeleteNodesResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodesResponseValidationError{ field: "WebAnnotations", @@ -18862,9 +31119,30 @@ func (m *DeleteNodesResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodesResponseMultiError(errors) + } + return nil } +// DeleteNodesResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteNodesResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteNodesResponseMultiError) AllErrors() []error { return m } + // DeleteNodesResponseValidationError is the validation error returned by // DeleteNodesResponse.Validate if the designated constraints aren't met. type DeleteNodesResponseValidationError struct { @@ -18923,38 +31201,68 @@ var _ interface { // Validate checks the field values on MoveNodesToGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MoveNodesToGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MoveNodesToGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MoveNodesToGroupRequestMultiError, or nil if none found. +func (m *MoveNodesToGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *MoveNodesToGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_MoveNodesToGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _MoveNodesToGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -18963,10 +31271,14 @@ func (m *MoveNodesToGroupRequest) Validate() error { _, _ = idx, item if _, exists := _MoveNodesToGroupRequest_Nodes_Unique[item]; exists { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _MoveNodesToGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -18975,22 +31287,51 @@ func (m *MoveNodesToGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_MoveNodesToGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return MoveNodesToGroupRequestMultiError(errors) } return nil } +// MoveNodesToGroupRequestMultiError is an error wrapping multiple validation +// errors returned by MoveNodesToGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type MoveNodesToGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MoveNodesToGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MoveNodesToGroupRequestMultiError) AllErrors() []error { return m } + // MoveNodesToGroupRequestValidationError is the validation error returned by // MoveNodesToGroupRequest.Validate if the designated constraints aren't met. type MoveNodesToGroupRequestValidationError struct { @@ -19053,19 +31394,52 @@ var _MoveNodesToGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on MoveNodesToGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MoveNodesToGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MoveNodesToGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MoveNodesToGroupResponseMultiError, or nil if none found. +func (m *MoveNodesToGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *MoveNodesToGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MoveNodesToGroupResponseValidationError{ field: "Data", @@ -19075,7 +31449,26 @@ func (m *MoveNodesToGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MoveNodesToGroupResponseValidationError{ field: "WebAnnotations", @@ -19085,9 +31478,30 @@ func (m *MoveNodesToGroupResponse) Validate() error { } } + if len(errors) > 0 { + return MoveNodesToGroupResponseMultiError(errors) + } + return nil } +// MoveNodesToGroupResponseMultiError is an error wrapping multiple validation +// errors returned by MoveNodesToGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type MoveNodesToGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MoveNodesToGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MoveNodesToGroupResponseMultiError) AllErrors() []error { return m } + // MoveNodesToGroupResponseValidationError is the validation error returned by // MoveNodesToGroupResponse.Validate if the designated constraints aren't met. type MoveNodesToGroupResponseValidationError struct { @@ -19146,38 +31560,68 @@ var _ interface { // Validate checks the field values on RemoveNodesFromGroupRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RemoveNodesFromGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RemoveNodesFromGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RemoveNodesFromGroupRequestMultiError, or nil if none found. +func (m *RemoveNodesFromGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RemoveNodesFromGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_RemoveNodesFromGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _RemoveNodesFromGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -19186,10 +31630,14 @@ func (m *RemoveNodesFromGroupRequest) Validate() error { _, _ = idx, item if _, exists := _RemoveNodesFromGroupRequest_Nodes_Unique[item]; exists { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _RemoveNodesFromGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -19198,22 +31646,51 @@ func (m *RemoveNodesFromGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_RemoveNodesFromGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RemoveNodesFromGroupRequestMultiError(errors) } return nil } +// RemoveNodesFromGroupRequestMultiError is an error wrapping multiple +// validation errors returned by RemoveNodesFromGroupRequest.ValidateAll() if +// the designated constraints aren't met. +type RemoveNodesFromGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RemoveNodesFromGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RemoveNodesFromGroupRequestMultiError) AllErrors() []error { return m } + // RemoveNodesFromGroupRequestValidationError is the validation error returned // by RemoveNodesFromGroupRequest.Validate if the designated constraints // aren't met. @@ -19277,19 +31754,52 @@ var _RemoveNodesFromGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9 // Validate checks the field values on RemoveNodesFromGroupResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RemoveNodesFromGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RemoveNodesFromGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RemoveNodesFromGroupResponseMultiError, or nil if none found. +func (m *RemoveNodesFromGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RemoveNodesFromGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RemoveNodesFromGroupResponseValidationError{ field: "Data", @@ -19299,7 +31809,26 @@ func (m *RemoveNodesFromGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RemoveNodesFromGroupResponseValidationError{ field: "WebAnnotations", @@ -19309,9 +31838,30 @@ func (m *RemoveNodesFromGroupResponse) Validate() error { } } + if len(errors) > 0 { + return RemoveNodesFromGroupResponseMultiError(errors) + } + return nil } +// RemoveNodesFromGroupResponseMultiError is an error wrapping multiple +// validation errors returned by RemoveNodesFromGroupResponse.ValidateAll() if +// the designated constraints aren't met. +type RemoveNodesFromGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RemoveNodesFromGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RemoveNodesFromGroupResponseMultiError) AllErrors() []error { return m } + // RemoveNodesFromGroupResponseValidationError is the validation error returned // by RemoveNodesFromGroupResponse.Validate if the designated constraints // aren't met. @@ -19371,38 +31921,68 @@ var _ interface { // Validate checks the field values on CleanNodesInGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupRequestMultiError, or nil if none found. +func (m *CleanNodesInGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _CleanNodesInGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -19411,10 +31991,14 @@ func (m *CleanNodesInGroupRequest) Validate() error { _, _ = idx, item if _, exists := _CleanNodesInGroupRequest_Nodes_Unique[item]; exists { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _CleanNodesInGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -19423,36 +32007,73 @@ func (m *CleanNodesInGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupRequest_Operator_Pattern.MatchString(m.GetOperator()) { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "Operator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CleanNodesInGroupRequestMultiError(errors) } return nil } +// CleanNodesInGroupRequestMultiError is an error wrapping multiple validation +// errors returned by CleanNodesInGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type CleanNodesInGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupRequestMultiError) AllErrors() []error { return m } + // CleanNodesInGroupRequestValidationError is the validation error returned by // CleanNodesInGroupRequest.Validate if the designated constraints aren't met. type CleanNodesInGroupRequestValidationError struct { @@ -19517,19 +32138,52 @@ var _CleanNodesInGroupRequest_Operator_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on CleanNodesInGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupResponseMultiError, or nil if none found. +func (m *CleanNodesInGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupResponseValidationError{ field: "Data", @@ -19539,7 +32193,26 @@ func (m *CleanNodesInGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupResponseValidationError{ field: "WebAnnotations", @@ -19549,9 +32222,30 @@ func (m *CleanNodesInGroupResponse) Validate() error { } } + if len(errors) > 0 { + return CleanNodesInGroupResponseMultiError(errors) + } + return nil } +// CleanNodesInGroupResponseMultiError is an error wrapping multiple validation +// errors returned by CleanNodesInGroupResponse.ValidateAll() if the +// designated constraints aren't met. +type CleanNodesInGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupResponseMultiError) AllErrors() []error { return m } + // CleanNodesInGroupResponseValidationError is the validation error returned by // CleanNodesInGroupResponse.Validate if the designated constraints aren't met. type CleanNodesInGroupResponseValidationError struct { @@ -19610,71 +32304,138 @@ var _ interface { // Validate checks the field values on CleanNodesInGroupV2Request with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupV2Request) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupV2Request with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupV2RequestMultiError, or nil if none found. +func (m *CleanNodesInGroupV2Request) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupV2Request) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupV2Request_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodes()) < 1 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "Nodes", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupV2Request_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupV2Request_Operator_Pattern.MatchString(m.GetOperator()) { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "Operator", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CleanNodesInGroupV2RequestMultiError(errors) } return nil } +// CleanNodesInGroupV2RequestMultiError is an error wrapping multiple +// validation errors returned by CleanNodesInGroupV2Request.ValidateAll() if +// the designated constraints aren't met. +type CleanNodesInGroupV2RequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupV2RequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupV2RequestMultiError) AllErrors() []error { return m } + // CleanNodesInGroupV2RequestValidationError is the validation error returned // by CleanNodesInGroupV2Request.Validate if the designated constraints aren't met. type CleanNodesInGroupV2RequestValidationError struct { @@ -19739,19 +32500,52 @@ var _CleanNodesInGroupV2Request_Operator_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on CleanNodesInGroupV2Response with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupV2Response) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupV2Response with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CleanNodesInGroupV2ResponseMultiError, or nil if none found. +func (m *CleanNodesInGroupV2Response) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupV2Response) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupV2ResponseValidationError{ field: "Data", @@ -19761,7 +32555,26 @@ func (m *CleanNodesInGroupV2Response) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupV2ResponseValidationError{ field: "WebAnnotations", @@ -19771,9 +32584,30 @@ func (m *CleanNodesInGroupV2Response) Validate() error { } } + if len(errors) > 0 { + return CleanNodesInGroupV2ResponseMultiError(errors) + } + return nil } +// CleanNodesInGroupV2ResponseMultiError is an error wrapping multiple +// validation errors returned by CleanNodesInGroupV2Response.ValidateAll() if +// the designated constraints aren't met. +type CleanNodesInGroupV2ResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupV2ResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CleanNodesInGroupV2ResponseMultiError) AllErrors() []error { return m } + // CleanNodesInGroupV2ResponseValidationError is the validation error returned // by CleanNodesInGroupV2Response.Validate if the designated constraints // aren't met. @@ -19833,31 +32667,74 @@ var _ interface { // Validate checks the field values on ListNodesInGroupV2Request with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupV2Request) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupV2Request with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInGroupV2RequestMultiError, or nil if none found. +func (m *ListNodesInGroupV2Request) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupV2Request) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return ListNodesInGroupV2RequestValidationError{ + err := ListNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ListNodesInGroupV2Request_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return ListNodesInGroupV2RequestValidationError{ + err := ListNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Output + if len(errors) > 0 { + return ListNodesInGroupV2RequestMultiError(errors) + } + return nil } +// ListNodesInGroupV2RequestMultiError is an error wrapping multiple validation +// errors returned by ListNodesInGroupV2Request.ValidateAll() if the +// designated constraints aren't met. +type ListNodesInGroupV2RequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupV2RequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInGroupV2RequestMultiError) AllErrors() []error { return m } + // ListNodesInGroupV2RequestValidationError is the validation error returned by // ListNodesInGroupV2Request.Validate if the designated constraints aren't met. type ListNodesInGroupV2RequestValidationError struct { @@ -19918,12 +32795,26 @@ var _ListNodesInGroupV2Request_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on ListNodesInGroupV2Response with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupV2Response) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupV2Response with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInGroupV2ResponseMultiError, or nil if none found. +func (m *ListNodesInGroupV2Response) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupV2Response) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -19933,7 +32824,26 @@ func (m *ListNodesInGroupV2Response) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupV2ResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -19945,7 +32855,26 @@ func (m *ListNodesInGroupV2Response) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupV2ResponseValidationError{ field: "WebAnnotations", @@ -19955,9 +32884,30 @@ func (m *ListNodesInGroupV2Response) Validate() error { } } + if len(errors) > 0 { + return ListNodesInGroupV2ResponseMultiError(errors) + } + return nil } +// ListNodesInGroupV2ResponseMultiError is an error wrapping multiple +// validation errors returned by ListNodesInGroupV2Response.ValidateAll() if +// the designated constraints aren't met. +type ListNodesInGroupV2ResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupV2ResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInGroupV2ResponseMultiError) AllErrors() []error { return m } + // ListNodesInGroupV2ResponseValidationError is the validation error returned // by ListNodesInGroupV2Response.Validate if the designated constraints aren't met. type ListNodesInGroupV2ResponseValidationError struct { @@ -20015,13 +32965,27 @@ var _ interface { } = ListNodesInGroupV2ResponseValidationError{} // Validate checks the field values on NodeGroupNode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeGroupNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroupNode with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeGroupNodeMultiError, or +// nil if none found. +func (m *NodeGroupNode) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroupNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -20056,9 +33020,30 @@ func (m *NodeGroupNode) Validate() error { // no validation rules for UnSchedulable + if len(errors) > 0 { + return NodeGroupNodeMultiError(errors) + } + return nil } +// NodeGroupNodeMultiError is an error wrapping multiple validation errors +// returned by NodeGroupNode.ValidateAll() if the designated constraints +// aren't met. +type NodeGroupNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupNodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeGroupNodeMultiError) AllErrors() []error { return m } + // NodeGroupNodeValidationError is the validation error returned by // NodeGroupNode.Validate if the designated constraints aren't met. type NodeGroupNodeValidationError struct { @@ -20115,12 +33100,26 @@ var _ interface { // Validate checks the field values on ListNodesInGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListNodesInGroupResponseMultiError, or nil if none found. +func (m *ListNodesInGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -20130,7 +33129,26 @@ func (m *ListNodesInGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -20142,7 +33160,26 @@ func (m *ListNodesInGroupResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupResponseValidationError{ field: "WebAnnotations", @@ -20152,9 +33189,30 @@ func (m *ListNodesInGroupResponse) Validate() error { } } + if len(errors) > 0 { + return ListNodesInGroupResponseMultiError(errors) + } + return nil } +// ListNodesInGroupResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodesInGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodesInGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListNodesInGroupResponseMultiError) AllErrors() []error { return m } + // ListNodesInGroupResponseValidationError is the validation error returned by // ListNodesInGroupResponse.Validate if the designated constraints aren't met. type ListNodesInGroupResponseValidationError struct { @@ -20213,50 +33271,105 @@ var _ interface { // Validate checks the field values on UpdateGroupMinMaxSizeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupMinMaxSizeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupMinMaxSizeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateGroupMinMaxSizeRequestMultiError, or nil if none found. +func (m *UpdateGroupMinMaxSizeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupMinMaxSizeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupMinMaxSizeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if m.GetMinSize() < 0 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "MinSize", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetMaxSize() < 0 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "MaxSize", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 1 || l > 100 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "Operator", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateGroupMinMaxSizeRequestMultiError(errors) } return nil } +// UpdateGroupMinMaxSizeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupMinMaxSizeRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateGroupMinMaxSizeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupMinMaxSizeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupMinMaxSizeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupMinMaxSizeRequestValidationError is the validation error returned // by UpdateGroupMinMaxSizeRequest.Validate if the designated constraints // aren't met. @@ -20318,19 +33431,52 @@ var _UpdateGroupMinMaxSizeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on UpdateGroupMinMaxSizeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupMinMaxSizeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupMinMaxSizeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupMinMaxSizeResponseMultiError, or nil if none found. +func (m *UpdateGroupMinMaxSizeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupMinMaxSizeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupMinMaxSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupMinMaxSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupMinMaxSizeResponseValidationError{ field: "WebAnnotations", @@ -20340,9 +33486,30 @@ func (m *UpdateGroupMinMaxSizeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupMinMaxSizeResponseMultiError(errors) + } + return nil } +// UpdateGroupMinMaxSizeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupMinMaxSizeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupMinMaxSizeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupMinMaxSizeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupMinMaxSizeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupMinMaxSizeResponseValidationError is the validation error // returned by UpdateGroupMinMaxSizeResponse.Validate if the designated // constraints aren't met. @@ -20402,38 +33569,85 @@ var _ interface { // Validate checks the field values on UpdateGroupDesiredSizeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredSizeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredSizeRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredSizeRequestMultiError, or nil if none found. +func (m *UpdateGroupDesiredSizeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredSizeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupDesiredSizeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredSize if utf8.RuneCountInString(m.GetOperator()) > 100 { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "Operator", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateGroupDesiredSizeRequestMultiError(errors) } return nil } +// UpdateGroupDesiredSizeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredSizeRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredSizeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredSizeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredSizeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredSizeRequestValidationError is the validation error // returned by UpdateGroupDesiredSizeRequest.Validate if the designated // constraints aren't met. @@ -20495,19 +33709,52 @@ var _UpdateGroupDesiredSizeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on UpdateGroupDesiredSizeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredSizeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredSizeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredSizeResponseMultiError, or nil if none found. +func (m *UpdateGroupDesiredSizeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredSizeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredSizeResponseValidationError{ field: "WebAnnotations", @@ -20517,9 +33764,30 @@ func (m *UpdateGroupDesiredSizeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupDesiredSizeResponseMultiError(errors) + } + return nil } +// UpdateGroupDesiredSizeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredSizeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredSizeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredSizeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredSizeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredSizeResponseValidationError is the validation error // returned by UpdateGroupDesiredSizeResponse.Validate if the designated // constraints aren't met. @@ -20579,40 +33847,87 @@ var _ interface { // Validate checks the field values on UpdateGroupDesiredNodeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredNodeRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredNodeRequestMultiError, or nil if none found. +func (m *UpdateGroupDesiredNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupDesiredNodeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredNode if utf8.RuneCountInString(m.GetOperator()) > 100 { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "Operator", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Manual + if len(errors) > 0 { + return UpdateGroupDesiredNodeRequestMultiError(errors) + } + return nil } +// UpdateGroupDesiredNodeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredNodeRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredNodeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredNodeRequestValidationError is the validation error // returned by UpdateGroupDesiredNodeRequest.Validate if the designated // constraints aren't met. @@ -20674,19 +33989,52 @@ var _UpdateGroupDesiredNodeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on UpdateGroupDesiredNodeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredNodeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateGroupDesiredNodeResponseMultiError, or nil if none found. +func (m *UpdateGroupDesiredNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredNodeResponseValidationError{ field: "Data", @@ -20696,7 +34044,26 @@ func (m *UpdateGroupDesiredNodeResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredNodeResponseValidationError{ field: "WebAnnotations", @@ -20706,9 +34073,30 @@ func (m *UpdateGroupDesiredNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupDesiredNodeResponseMultiError(errors) + } + return nil } +// UpdateGroupDesiredNodeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredNodeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateGroupDesiredNodeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredNodeResponseValidationError is the validation error // returned by UpdateGroupDesiredNodeResponse.Validate if the designated // constraints aren't met. @@ -20768,29 +34156,72 @@ var _ interface { // Validate checks the field values on EnableNodeGroupAutoScaleRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *EnableNodeGroupAutoScaleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EnableNodeGroupAutoScaleRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// EnableNodeGroupAutoScaleRequestMultiError, or nil if none found. +func (m *EnableNodeGroupAutoScaleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *EnableNodeGroupAutoScaleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return EnableNodeGroupAutoScaleRequestValidationError{ + err := EnableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_EnableNodeGroupAutoScaleRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return EnableNodeGroupAutoScaleRequestValidationError{ + err := EnableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return EnableNodeGroupAutoScaleRequestMultiError(errors) } return nil } +// EnableNodeGroupAutoScaleRequestMultiError is an error wrapping multiple +// validation errors returned by EnableNodeGroupAutoScaleRequest.ValidateAll() +// if the designated constraints aren't met. +type EnableNodeGroupAutoScaleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EnableNodeGroupAutoScaleRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m EnableNodeGroupAutoScaleRequestMultiError) AllErrors() []error { return m } + // EnableNodeGroupAutoScaleRequestValidationError is the validation error // returned by EnableNodeGroupAutoScaleRequest.Validate if the designated // constraints aren't met. @@ -20852,19 +34283,53 @@ var _EnableNodeGroupAutoScaleRequest_NodeGroupID_Pattern = regexp.MustCompile("^ // Validate checks the field values on EnableNodeGroupAutoScaleResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *EnableNodeGroupAutoScaleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EnableNodeGroupAutoScaleResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// EnableNodeGroupAutoScaleResponseMultiError, or nil if none found. +func (m *EnableNodeGroupAutoScaleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *EnableNodeGroupAutoScaleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, EnableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, EnableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return EnableNodeGroupAutoScaleResponseValidationError{ field: "WebAnnotations", @@ -20874,9 +34339,31 @@ func (m *EnableNodeGroupAutoScaleResponse) Validate() error { } } + if len(errors) > 0 { + return EnableNodeGroupAutoScaleResponseMultiError(errors) + } + return nil } +// EnableNodeGroupAutoScaleResponseMultiError is an error wrapping multiple +// validation errors returned by +// EnableNodeGroupAutoScaleResponse.ValidateAll() if the designated +// constraints aren't met. +type EnableNodeGroupAutoScaleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EnableNodeGroupAutoScaleResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m EnableNodeGroupAutoScaleResponseMultiError) AllErrors() []error { return m } + // EnableNodeGroupAutoScaleResponseValidationError is the validation error // returned by EnableNodeGroupAutoScaleResponse.Validate if the designated // constraints aren't met. @@ -20936,29 +34423,74 @@ var _ interface { // Validate checks the field values on DisableNodeGroupAutoScaleRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *DisableNodeGroupAutoScaleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableNodeGroupAutoScaleRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DisableNodeGroupAutoScaleRequestMultiError, or nil if none found. +func (m *DisableNodeGroupAutoScaleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableNodeGroupAutoScaleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return DisableNodeGroupAutoScaleRequestValidationError{ + err := DisableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DisableNodeGroupAutoScaleRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return DisableNodeGroupAutoScaleRequestValidationError{ + err := DisableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DisableNodeGroupAutoScaleRequestMultiError(errors) } return nil } +// DisableNodeGroupAutoScaleRequestMultiError is an error wrapping multiple +// validation errors returned by +// DisableNodeGroupAutoScaleRequest.ValidateAll() if the designated +// constraints aren't met. +type DisableNodeGroupAutoScaleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableNodeGroupAutoScaleRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DisableNodeGroupAutoScaleRequestMultiError) AllErrors() []error { return m } + // DisableNodeGroupAutoScaleRequestValidationError is the validation error // returned by DisableNodeGroupAutoScaleRequest.Validate if the designated // constraints aren't met. @@ -21020,19 +34552,53 @@ var _DisableNodeGroupAutoScaleRequest_NodeGroupID_Pattern = regexp.MustCompile(" // Validate checks the field values on DisableNodeGroupAutoScaleResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *DisableNodeGroupAutoScaleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableNodeGroupAutoScaleResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// DisableNodeGroupAutoScaleResponseMultiError, or nil if none found. +func (m *DisableNodeGroupAutoScaleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableNodeGroupAutoScaleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DisableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DisableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DisableNodeGroupAutoScaleResponseValidationError{ field: "WebAnnotations", @@ -21042,9 +34608,31 @@ func (m *DisableNodeGroupAutoScaleResponse) Validate() error { } } + if len(errors) > 0 { + return DisableNodeGroupAutoScaleResponseMultiError(errors) + } + return nil } +// DisableNodeGroupAutoScaleResponseMultiError is an error wrapping multiple +// validation errors returned by +// DisableNodeGroupAutoScaleResponse.ValidateAll() if the designated +// constraints aren't met. +type DisableNodeGroupAutoScaleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableNodeGroupAutoScaleResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DisableNodeGroupAutoScaleResponseMultiError) AllErrors() []error { return m } + // DisableNodeGroupAutoScaleResponseValidationError is the validation error // returned by DisableNodeGroupAutoScaleResponse.Validate if the designated // constraints aren't met. @@ -21103,20 +34691,38 @@ var _ interface { } = DisableNodeGroupAutoScaleResponseValidationError{} // Validate checks the field values on CreateTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CreateTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTaskRequestMultiError, or nil if none found. +func (m *CreateTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskType if _, ok := _CreateTaskRequest_Status_InLookup[m.GetStatus()]; !ok { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILED TIMEOUT]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -21130,83 +34736,165 @@ func (m *CreateTaskRequest) Validate() error { // no validation rules for CurrentStep if len(m.GetStepSequence()) < 1 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "StepSequence", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetSteps()); l < 1 || l > 20 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Steps", reason: "value must contain between 1 and 20 pairs, inclusive", } - } - - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateTaskRequestValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateTaskRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetProjectID()); l < 2 || l > 32 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ProjectID", reason: "value length must be between 2 and 32 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateTaskRequest_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for LastUpdate + if len(errors) > 0 { + return CreateTaskRequestMultiError(errors) + } + return nil } +// CreateTaskRequestMultiError is an error wrapping multiple validation errors +// returned by CreateTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type CreateTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTaskRequestMultiError) AllErrors() []error { return m } + // CreateTaskRequestValidationError is the validation error returned by // CreateTaskRequest.Validate if the designated constraints aren't met. type CreateTaskRequestValidationError struct { @@ -21277,19 +34965,52 @@ var _CreateTaskRequest_ProjectID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on CreateTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateTaskResponseMultiError, or nil if none found. +func (m *CreateTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateTaskResponseValidationError{ field: "Data", @@ -21299,9 +35020,30 @@ func (m *CreateTaskResponse) Validate() error { } } + if len(errors) > 0 { + return CreateTaskResponseMultiError(errors) + } + return nil } +// CreateTaskResponseMultiError is an error wrapping multiple validation errors +// returned by CreateTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type CreateTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateTaskResponseMultiError) AllErrors() []error { return m } + // CreateTaskResponseValidationError is the validation error returned by // CreateTaskResponse.Validate if the designated constraints aren't met. type CreateTaskResponseValidationError struct { @@ -21359,37 +35101,84 @@ var _ interface { } = CreateTaskResponseValidationError{} // Validate checks the field values on RetryTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *RetryTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryTaskRequestMultiError, or nil if none found. +func (m *RetryTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 1024 { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_RetryTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RetryTaskRequestMultiError(errors) } return nil } +// RetryTaskRequestMultiError is an error wrapping multiple validation errors +// returned by RetryTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type RetryTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryTaskRequestMultiError) AllErrors() []error { return m } + // RetryTaskRequestValidationError is the validation error returned by // RetryTaskRequest.Validate if the designated constraints aren't met. type RetryTaskRequestValidationError struct { @@ -21447,20 +35236,53 @@ var _ interface { var _RetryTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on RetryTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *RetryTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// RetryTaskResponseMultiError, or nil if none found. +func (m *RetryTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryTaskResponseValidationError{ field: "Data", @@ -21470,9 +35292,30 @@ func (m *RetryTaskResponse) Validate() error { } } + if len(errors) > 0 { + return RetryTaskResponseMultiError(errors) + } + return nil } +// RetryTaskResponseMultiError is an error wrapping multiple validation errors +// returned by RetryTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type RetryTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RetryTaskResponseMultiError) AllErrors() []error { return m } + // RetryTaskResponseValidationError is the validation error returned by // RetryTaskResponse.Validate if the designated constraints aren't met. type RetryTaskResponseValidationError struct { @@ -21530,32 +35373,58 @@ var _ interface { } = RetryTaskResponseValidationError{} // Validate checks the field values on UpdateTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *UpdateTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTaskRequestMultiError, or nil if none found. +func (m *UpdateTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateTaskRequest_Status_InLookup[m.GetStatus()]; !ok { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILED TIMEOUT]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -21567,39 +35436,97 @@ func (m *UpdateTaskRequest) Validate() error { // no validation rules for CurrentStep if l := len(m.GetSteps()); l < 1 || l > 20 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Steps", reason: "value must contain between 1 and 20 pairs, inclusive", } - } - - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateTaskRequestValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateTaskRequestMultiError(errors) } return nil } +// UpdateTaskRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTaskRequestMultiError) AllErrors() []error { return m } + // UpdateTaskRequestValidationError is the validation error returned by // UpdateTaskRequest.Validate if the designated constraints aren't met. type UpdateTaskRequestValidationError struct { @@ -21668,19 +35595,52 @@ var _UpdateTaskRequest_Status_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateTaskResponseMultiError, or nil if none found. +func (m *UpdateTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateTaskResponseValidationError{ field: "Data", @@ -21690,9 +35650,30 @@ func (m *UpdateTaskResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateTaskResponseMultiError(errors) + } + return nil } +// UpdateTaskResponseMultiError is an error wrapping multiple validation errors +// returned by UpdateTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type UpdateTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateTaskResponseMultiError) AllErrors() []error { return m } + // UpdateTaskResponseValidationError is the validation error returned by // UpdateTaskResponse.Validate if the designated constraints aren't met. type UpdateTaskResponseValidationError struct { @@ -21750,32 +35731,75 @@ var _ interface { } = UpdateTaskResponseValidationError{} // Validate checks the field values on DeleteTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DeleteTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTaskRequestMultiError, or nil if none found. +func (m *DeleteTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return DeleteTaskRequestValidationError{ + err := DeleteTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return DeleteTaskRequestValidationError{ + err := DeleteTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteTaskRequestMultiError(errors) + } + return nil } +// DeleteTaskRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTaskRequestMultiError) AllErrors() []error { return m } + // DeleteTaskRequestValidationError is the validation error returned by // DeleteTaskRequest.Validate if the designated constraints aren't met. type DeleteTaskRequestValidationError struct { @@ -21836,19 +35860,52 @@ var _DeleteTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteTaskResponseMultiError, or nil if none found. +func (m *DeleteTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteTaskResponseValidationError{ field: "Data", @@ -21858,9 +35915,30 @@ func (m *DeleteTaskResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteTaskResponseMultiError(errors) + } + return nil } +// DeleteTaskResponseMultiError is an error wrapping multiple validation errors +// returned by DeleteTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type DeleteTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteTaskResponseMultiError) AllErrors() []error { return m } + // DeleteTaskResponseValidationError is the validation error returned by // DeleteTaskResponse.Validate if the designated constraints aren't met. type DeleteTaskResponseValidationError struct { @@ -21918,30 +35996,73 @@ var _ interface { } = DeleteTaskResponseValidationError{} // Validate checks the field values on GetTaskRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *GetTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTaskRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in GetTaskRequestMultiError, +// or nil if none found. +func (m *GetTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return GetTaskRequestValidationError{ + err := GetTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return GetTaskRequestValidationError{ + err := GetTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetTaskRequestMultiError(errors) } return nil } +// GetTaskRequestMultiError is an error wrapping multiple validation errors +// returned by GetTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type GetTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTaskRequestMultiError) AllErrors() []error { return m } + // GetTaskRequestValidationError is the validation error returned by // GetTaskRequest.Validate if the designated constraints aren't met. type GetTaskRequestValidationError struct { @@ -21999,20 +36120,53 @@ var _ interface { var _GetTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *GetTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTaskResponseMultiError, or nil if none found. +func (m *GetTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTaskResponseValidationError{ field: "Data", @@ -22022,9 +36176,30 @@ func (m *GetTaskResponse) Validate() error { } } + if len(errors) > 0 { + return GetTaskResponseMultiError(errors) + } + return nil } +// GetTaskResponseMultiError is an error wrapping multiple validation errors +// returned by GetTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type GetTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTaskResponseMultiError) AllErrors() []error { return m } + // GetTaskResponseValidationError is the validation error returned by // GetTaskResponse.Validate if the designated constraints aren't met. type GetTaskResponseValidationError struct { @@ -22080,39 +36255,69 @@ var _ interface { } = GetTaskResponseValidationError{} // Validate checks the field values on ListTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListTaskRequestMultiError, or nil if none found. +func (m *ListTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCreator()) > 20 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "Creator", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 20 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "Updater", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for TaskType @@ -22123,9 +36328,30 @@ func (m *ListTaskRequest) Validate() error { // no validation rules for NodeGroupID + if len(errors) > 0 { + return ListTaskRequestMultiError(errors) + } + return nil } +// ListTaskRequestMultiError is an error wrapping multiple validation errors +// returned by ListTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type ListTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListTaskRequestMultiError) AllErrors() []error { return m } + // ListTaskRequestValidationError is the validation error returned by // ListTaskRequest.Validate if the designated constraints aren't met. type ListTaskRequestValidationError struct { @@ -22181,13 +36407,27 @@ var _ interface { } = ListTaskRequestValidationError{} // Validate checks the field values on ListTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *ListTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListTaskResponseMultiError, or nil if none found. +func (m *ListTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -22197,7 +36437,26 @@ func (m *ListTaskResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListTaskResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -22209,7 +36468,26 @@ func (m *ListTaskResponse) Validate() error { } - if v, ok := interface{}(m.GetLatestTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLatestTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: "LatestTask", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: "LatestTask", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLatestTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListTaskResponseValidationError{ field: "LatestTask", @@ -22219,9 +36497,30 @@ func (m *ListTaskResponse) Validate() error { } } + if len(errors) > 0 { + return ListTaskResponseMultiError(errors) + } + return nil } +// ListTaskResponseMultiError is an error wrapping multiple validation errors +// returned by ListTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type ListTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListTaskResponseMultiError) AllErrors() []error { return m } + // ListTaskResponseValidationError is the validation error returned by // ListTaskResponse.Validate if the designated constraints aren't met. type ListTaskResponseValidationError struct { @@ -22278,12 +36577,26 @@ var _ interface { // Validate checks the field values on CreateAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateAutoScalingOptionRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CreateAutoScalingOptionRequestMultiError, or nil if none found. +func (m *CreateAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable // no validation rules for Expander @@ -22311,31 +36624,47 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for UnregisteredNodeRemovalTime if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -22350,7 +36679,26 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for MaxNodeProvisionTime - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -22364,7 +36712,26 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for ScaleDownDelayAfterDelete - if v, ok := interface{}(m.GetScaleDownDelayAfterFailure()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleDownDelayAfterFailure()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleDownDelayAfterFailure", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleDownDelayAfterFailure", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleDownDelayAfterFailure()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", @@ -22380,9 +36747,30 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for BufferResourceMemRatio + if len(errors) > 0 { + return CreateAutoScalingOptionRequestMultiError(errors) + } + return nil } +// CreateAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by CreateAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type CreateAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // CreateAutoScalingOptionRequestValidationError is the validation error // returned by CreateAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -22444,19 +36832,52 @@ var _CreateAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on CreateAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CreateAutoScalingOptionResponseMultiError, or nil if none found. +func (m *CreateAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionResponseValidationError{ field: "Data", @@ -22466,9 +36887,30 @@ func (m *CreateAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return CreateAutoScalingOptionResponseMultiError(errors) + } + return nil } +// CreateAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by CreateAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type CreateAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // CreateAutoScalingOptionResponseValidationError is the validation error // returned by CreateAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -22528,50 +36970,103 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingOptionRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingOptionRequestMultiError, or nil if none found. +func (m *UpdateAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable if _, ok := _UpdateAutoScalingOptionRequest_Expander_InLookup[m.GetExpander()]; !ok { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "Expander", reason: "value must be in list [random least-waste most-pods priority]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxEmptyBulkDelete(); val < 1 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxEmptyBulkDelete", reason: "value must be inside range [1, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelay(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelay", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnneededTime(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUnneededTime", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUtilizationThreahold(); val < 0 || val > 80 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUtilizationThreahold", reason: "value must be inside range [0, 80]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSkipNodesWithLocalStorage()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSkipNodesWithLocalStorage()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithLocalStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithLocalStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSkipNodesWithLocalStorage()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "SkipNodesWithLocalStorage", @@ -22581,7 +37076,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetSkipNodesWithSystemPods()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSkipNodesWithSystemPods()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithSystemPods", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithSystemPods", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSkipNodesWithSystemPods()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "SkipNodesWithSystemPods", @@ -22591,7 +37105,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetIgnoreDaemonSetsUtilization()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIgnoreDaemonSetsUtilization()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "IgnoreDaemonSetsUtilization", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "IgnoreDaemonSetsUtilization", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIgnoreDaemonSetsUtilization()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "IgnoreDaemonSetsUtilization", @@ -22602,47 +37135,71 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } if val := m.GetOkTotalUnreadyCount(); val < 0 || val > 320000 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "OkTotalUnreadyCount", reason: "value must be inside range [0, 320000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxTotalUnreadyPercentage(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxTotalUnreadyPercentage", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnreadyTime(); val < 1200 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUnreadyTime", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for UnregisteredNodeRemovalTime if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -22652,36 +37209,71 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { if wrapper := m.GetBufferResourceRatio(); wrapper != nil { if val := wrapper.GetValue(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetMaxGracefulTerminationSec(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxGracefulTerminationSec", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScanInterval(); val < 5 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScanInterval", reason: "value must be inside range [5, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeProvisionTime(); val < 900 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxNodeProvisionTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -22692,45 +37284,84 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } if val := m.GetScaleDownDelayAfterAdd(); val < 1200 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterAdd", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelayAfterDelete(); val < 0 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterDelete", reason: "value must be inside range [0, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if wrapper := m.GetScaleDownDelayAfterFailure(); wrapper != nil { if val := wrapper.GetValue(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetBufferResourceCpuRatio(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceCpuRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetBufferResourceMemRatio(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceMemRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "Module", @@ -22740,7 +37371,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "Webhook", @@ -22752,7 +37402,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { // no validation rules for OnlyUpdateInfo - if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExpendablePodsPriorityCutoff()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "ExpendablePodsPriorityCutoff", @@ -22765,17 +37434,42 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { if wrapper := m.GetNewPodScaleUpDelay(); wrapper != nil { if wrapper.GetValue() < 0 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } } + if len(errors) > 0 { + return UpdateAutoScalingOptionRequestMultiError(errors) + } + return nil } +// UpdateAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // UpdateAutoScalingOptionRequestValidationError is the validation error // returned by UpdateAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -22842,19 +37536,52 @@ var _UpdateAutoScalingOptionRequest_Expander_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingOptionResponseMultiError, or nil if none found. +func (m *UpdateAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionResponseValidationError{ field: "Data", @@ -22864,7 +37591,26 @@ func (m *UpdateAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -22874,9 +37620,30 @@ func (m *UpdateAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateAutoScalingOptionResponseMultiError(errors) + } + return nil } +// UpdateAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // UpdateAutoScalingOptionResponseValidationError is the validation error // returned by UpdateAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -22936,47 +37703,81 @@ var _ interface { // Validate checks the field values on SyncAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *SyncAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncAutoScalingOptionRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// SyncAutoScalingOptionRequestMultiError, or nil if none found. +func (m *SyncAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable if _, ok := _SyncAutoScalingOptionRequest_Expander_InLookup[m.GetExpander()]; !ok { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "Expander", reason: "value must be in list [random least-waste most-pods priority]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxEmptyBulkDelete(); val < 1 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxEmptyBulkDelete", reason: "value must be inside range [1, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelay(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelay", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnneededTime(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUnneededTime", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUtilizationThreahold(); val < 0 || val > 80 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUtilizationThreahold", reason: "value must be inside range [0, 80]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for SkipNodesWithLocalStorage @@ -22986,85 +37787,148 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { // no validation rules for IgnoreDaemonSetsUtilization if val := m.GetOkTotalUnreadyCount(); val < 0 || val > 320000 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "OkTotalUnreadyCount", reason: "value must be inside range [0, 320000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxTotalUnreadyPercentage(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxTotalUnreadyPercentage", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnreadyTime(); val < 1200 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUnreadyTime", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ScaleDownGpuUtilizationThreshold if val := m.GetBufferResourceRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxGracefulTerminationSec(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxGracefulTerminationSec", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScanInterval(); val < 5 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScanInterval", reason: "value must be inside range [5, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeProvisionTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeProvisionTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeStartupTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeStartupTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeStartScheduleTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeStartScheduleTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -23075,45 +37939,84 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { } if val := m.GetScaleDownDelayAfterAdd(); val < 1200 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterAdd", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelayAfterDelete(); val < 0 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterDelete", reason: "value must be inside range [0, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if wrapper := m.GetScaleDownDelayAfterFailure(); wrapper != nil { if val := wrapper.GetValue(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetBufferResourceCpuRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceCpuRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetBufferResourceMemRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceMemRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "Webhook", @@ -23123,7 +38026,26 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExpendablePodsPriorityCutoff()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "ExpendablePodsPriorityCutoff", @@ -23136,17 +38058,42 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { if wrapper := m.GetNewPodScaleUpDelay(); wrapper != nil { if wrapper.GetValue() < 0 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } } + if len(errors) > 0 { + return SyncAutoScalingOptionRequestMultiError(errors) + } + return nil } +// SyncAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by SyncAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type SyncAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SyncAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // SyncAutoScalingOptionRequestValidationError is the validation error returned // by SyncAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -23213,19 +38160,52 @@ var _SyncAutoScalingOptionRequest_Expander_InLookup = map[string]struct{}{ // Validate checks the field values on SyncAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *SyncAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// SyncAutoScalingOptionResponseMultiError, or nil if none found. +func (m *SyncAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionResponseValidationError{ field: "Data", @@ -23235,7 +38215,26 @@ func (m *SyncAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -23245,9 +38244,30 @@ func (m *SyncAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return SyncAutoScalingOptionResponseMultiError(errors) + } + return nil } +// SyncAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by SyncAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type SyncAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SyncAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // SyncAutoScalingOptionResponseValidationError is the validation error // returned by SyncAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -23307,38 +38327,85 @@ var _ interface { // Validate checks the field values on DeleteAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteAutoScalingOptionRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DeleteAutoScalingOptionRequestMultiError, or nil if none found. +func (m *DeleteAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteAutoScalingOptionRequestMultiError(errors) + } + return nil } +// DeleteAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by DeleteAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type DeleteAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // DeleteAutoScalingOptionRequestValidationError is the validation error // returned by DeleteAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -23400,19 +38467,52 @@ var _DeleteAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on DeleteAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DeleteAutoScalingOptionResponseMultiError, or nil if none found. +func (m *DeleteAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteAutoScalingOptionResponseValidationError{ field: "Data", @@ -23422,7 +38522,26 @@ func (m *DeleteAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -23432,9 +38551,30 @@ func (m *DeleteAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteAutoScalingOptionResponseMultiError(errors) + } + return nil } +// DeleteAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type DeleteAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // DeleteAutoScalingOptionResponseValidationError is the validation error // returned by DeleteAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -23494,38 +38634,85 @@ var _ interface { // Validate checks the field values on GetAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAutoScalingOptionRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetAutoScalingOptionRequestMultiError, or nil if none found. +func (m *GetAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_GetAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return GetAutoScalingOptionRequestMultiError(errors) + } + return nil } +// GetAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by GetAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type GetAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // GetAutoScalingOptionRequestValidationError is the validation error returned // by GetAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -23587,19 +38774,52 @@ var _GetAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on GetAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAutoScalingOptionResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetAutoScalingOptionResponseMultiError, or nil if none found. +func (m *GetAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetAutoScalingOptionResponseValidationError{ field: "Data", @@ -23609,7 +38829,26 @@ func (m *GetAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -23619,9 +38858,30 @@ func (m *GetAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return GetAutoScalingOptionResponseMultiError(errors) + } + return nil } +// GetAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by GetAutoScalingOptionResponse.ValidateAll() if +// the designated constraints aren't met. +type GetAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // GetAutoScalingOptionResponseValidationError is the validation error returned // by GetAutoScalingOptionResponse.Validate if the designated constraints // aren't met. @@ -23681,43 +38941,94 @@ var _ interface { // Validate checks the field values on ListAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAutoScalingOptionRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListAutoScalingOptionRequestMultiError, or nil if none found. +func (m *ListAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCreator()) > 20 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "Creator", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 20 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListAutoScalingOptionRequestMultiError(errors) } return nil } +// ListAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by ListAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type ListAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAutoScalingOptionRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // ListAutoScalingOptionRequestValidationError is the validation error returned // by ListAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -23777,12 +39088,26 @@ var _ interface { // Validate checks the field values on ListAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAutoScalingOptionResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListAutoScalingOptionResponseMultiError, or nil if none found. +func (m *ListAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -23792,7 +39117,26 @@ func (m *ListAutoScalingOptionResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListAutoScalingOptionResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListAutoScalingOptionResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListAutoScalingOptionResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -23804,9 +39148,30 @@ func (m *ListAutoScalingOptionResponse) Validate() error { } + if len(errors) > 0 { + return ListAutoScalingOptionResponseMultiError(errors) + } + return nil } +// ListAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by ListAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type ListAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAutoScalingOptionResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // ListAutoScalingOptionResponseValidationError is the validation error // returned by ListAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -23866,33 +39231,76 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingStatusRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingStatusRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingStatusRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingStatusRequestMultiError, or nil if none found. +func (m *UpdateAutoScalingStatusRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingStatusRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Enable if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAutoScalingStatusRequestValidationError{ + err := UpdateAutoScalingStatusRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateAutoScalingStatusRequestValidationError{ + err := UpdateAutoScalingStatusRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return UpdateAutoScalingStatusRequestMultiError(errors) + } + return nil } +// UpdateAutoScalingStatusRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingStatusRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingStatusRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingStatusRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingStatusRequestMultiError) AllErrors() []error { return m } + // UpdateAutoScalingStatusRequestValidationError is the validation error // returned by UpdateAutoScalingStatusRequest.Validate if the designated // constraints aren't met. @@ -23952,19 +39360,52 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingStatusResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingStatusResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingStatusResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateAutoScalingStatusResponseMultiError, or nil if none found. +func (m *UpdateAutoScalingStatusResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingStatusResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingStatusResponseValidationError{ field: "Data", @@ -23974,7 +39415,26 @@ func (m *UpdateAutoScalingStatusResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingStatusResponseValidationError{ field: "WebAnnotations", @@ -23984,9 +39444,30 @@ func (m *UpdateAutoScalingStatusResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateAutoScalingStatusResponseMultiError(errors) + } + return nil } +// UpdateAutoScalingStatusResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingStatusResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingStatusResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingStatusResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateAutoScalingStatusResponseMultiError) AllErrors() []error { return m } + // UpdateAutoScalingStatusResponseValidationError is the validation error // returned by UpdateAutoScalingStatusResponse.Validate if the designated // constraints aren't met. @@ -24045,21 +39526,56 @@ var _ interface { } = UpdateAutoScalingStatusResponseValidationError{} // Validate checks the field values on RegionInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *RegionInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RegionInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in RegionInfoMultiError, or +// nil if none found. +func (m *RegionInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *RegionInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Region // no validation rules for RegionName // no validation rules for RegionState + if len(errors) > 0 { + return RegionInfoMultiError(errors) + } + return nil } +// RegionInfoMultiError is an error wrapping multiple validation errors +// returned by RegionInfo.ValidateAll() if the designated constraints aren't met. +type RegionInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RegionInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RegionInfoMultiError) AllErrors() []error { return m } + // RegionInfoValidationError is the validation error returned by // RegionInfo.Validate if the designated constraints aren't met. type RegionInfoValidationError struct { @@ -24116,29 +39632,72 @@ var _ interface { // Validate checks the field values on GetCloudRegionsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionsRequestMultiError, or nil if none found. +func (m *GetCloudRegionsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudRegionsRequestValidationError{ + err := GetCloudRegionsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) < 2 { - return GetCloudRegionsRequestValidationError{ + err := GetCloudRegionsRequestValidationError{ field: "AccountID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetCloudRegionsRequestMultiError(errors) } return nil } +// GetCloudRegionsRequestMultiError is an error wrapping multiple validation +// errors returned by GetCloudRegionsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetCloudRegionsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionsRequestMultiError) AllErrors() []error { return m } + // GetCloudRegionsRequestValidationError is the validation error returned by // GetCloudRegionsRequest.Validate if the designated constraints aren't met. type GetCloudRegionsRequestValidationError struct { @@ -24197,12 +39756,26 @@ var _ interface { // Validate checks the field values on GetCloudRegionsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionsResponseMultiError, or nil if none found. +func (m *GetCloudRegionsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -24212,7 +39785,26 @@ func (m *GetCloudRegionsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudRegionsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -24224,9 +39816,30 @@ func (m *GetCloudRegionsResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudRegionsResponseMultiError(errors) + } + return nil } +// GetCloudRegionsResponseMultiError is an error wrapping multiple validation +// errors returned by GetCloudRegionsResponse.ValidateAll() if the designated +// constraints aren't met. +type GetCloudRegionsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionsResponseMultiError) AllErrors() []error { return m } + // GetCloudRegionsResponseValidationError is the validation error returned by // GetCloudRegionsResponse.Validate if the designated constraints aren't met. type GetCloudRegionsResponseValidationError struct { @@ -24284,12 +39897,27 @@ var _ interface { } = GetCloudRegionsResponseValidationError{} // Validate checks the field values on ZoneInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ZoneInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ZoneInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ZoneInfoMultiError, or nil +// if none found. +func (m *ZoneInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ZoneInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ZoneID // no validation rules for Zone @@ -24298,9 +39926,29 @@ func (m *ZoneInfo) Validate() error { // no validation rules for ZoneState + if len(errors) > 0 { + return ZoneInfoMultiError(errors) + } + return nil } +// ZoneInfoMultiError is an error wrapping multiple validation errors returned +// by ZoneInfo.ValidateAll() if the designated constraints aren't met. +type ZoneInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ZoneInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ZoneInfoMultiError) AllErrors() []error { return m } + // ZoneInfoValidationError is the validation error returned by // ZoneInfo.Validate if the designated constraints aren't met. type ZoneInfoValidationError struct { @@ -24356,13 +40004,27 @@ var _ interface { } = ZoneInfoValidationError{} // Validate checks the field values on CloudClusterInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudClusterInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudClusterInfoMultiError, or nil if none found. +func (m *CloudClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for ClusterName @@ -24381,9 +40043,30 @@ func (m *CloudClusterInfo) Validate() error { // no validation rules for ClusterLevel + if len(errors) > 0 { + return CloudClusterInfoMultiError(errors) + } + return nil } +// CloudClusterInfoMultiError is an error wrapping multiple validation errors +// returned by CloudClusterInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudClusterInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudClusterInfoMultiError) AllErrors() []error { return m } + // CloudClusterInfoValidationError is the validation error returned by // CloudClusterInfo.Validate if the designated constraints aren't met. type CloudClusterInfoValidationError struct { @@ -24440,36 +40123,83 @@ var _ interface { // Validate checks the field values on ListCloudRegionClusterRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionClusterRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudRegionClusterRequestMultiError, or nil if none found. +func (m *ListCloudRegionClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "Region", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "AccountID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudRegionClusterRequestMultiError(errors) } return nil } +// ListCloudRegionClusterRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudRegionClusterRequest.ValidateAll() +// if the designated constraints aren't met. +type ListCloudRegionClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionClusterRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionClusterRequestMultiError) AllErrors() []error { return m } + // ListCloudRegionClusterRequestValidationError is the validation error // returned by ListCloudRegionClusterRequest.Validate if the designated // constraints aren't met. @@ -24529,12 +40259,26 @@ var _ interface { // Validate checks the field values on ListCloudRegionClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionClusterResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudRegionClusterResponseMultiError, or nil if none found. +func (m *ListCloudRegionClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -24544,7 +40288,26 @@ func (m *ListCloudRegionClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudRegionClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudRegionClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudRegionClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -24556,9 +40319,30 @@ func (m *ListCloudRegionClusterResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudRegionClusterResponseMultiError(errors) + } + return nil } +// ListCloudRegionClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudRegionClusterResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudRegionClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionClusterResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudRegionClusterResponseMultiError) AllErrors() []error { return m } + // ListCloudRegionClusterResponseValidationError is the validation error // returned by ListCloudRegionClusterResponse.Validate if the designated // constraints aren't met. @@ -24618,26 +40402,65 @@ var _ interface { // Validate checks the field values on GetCloudRegionZonesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionZonesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionZonesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionZonesRequestMultiError, or nil if none found. +func (m *GetCloudRegionZonesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionZonesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudRegionZonesRequestValidationError{ + err := GetCloudRegionZonesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudRegionZonesRequestMultiError(errors) + } + return nil } +// GetCloudRegionZonesRequestMultiError is an error wrapping multiple +// validation errors returned by GetCloudRegionZonesRequest.ValidateAll() if +// the designated constraints aren't met. +type GetCloudRegionZonesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionZonesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionZonesRequestMultiError) AllErrors() []error { return m } + // GetCloudRegionZonesRequestValidationError is the validation error returned // by GetCloudRegionZonesRequest.Validate if the designated constraints aren't met. type GetCloudRegionZonesRequestValidationError struct { @@ -24696,12 +40519,26 @@ var _ interface { // Validate checks the field values on GetCloudRegionZonesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionZonesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionZonesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudRegionZonesResponseMultiError, or nil if none found. +func (m *GetCloudRegionZonesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionZonesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -24711,7 +40548,26 @@ func (m *GetCloudRegionZonesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudRegionZonesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudRegionZonesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudRegionZonesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -24723,9 +40579,30 @@ func (m *GetCloudRegionZonesResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudRegionZonesResponseMultiError(errors) + } + return nil } +// GetCloudRegionZonesResponseMultiError is an error wrapping multiple +// validation errors returned by GetCloudRegionZonesResponse.ValidateAll() if +// the designated constraints aren't met. +type GetCloudRegionZonesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionZonesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudRegionZonesResponseMultiError) AllErrors() []error { return m } + // GetCloudRegionZonesResponseValidationError is the validation error returned // by GetCloudRegionZonesResponse.Validate if the designated constraints // aren't met. @@ -24784,13 +40661,27 @@ var _ interface { } = GetCloudRegionZonesResponseValidationError{} // Validate checks the field values on OperationLog with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OperationLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OperationLog with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in OperationLogMultiError, or +// nil if none found. +func (m *OperationLog) ValidateAll() error { + return m.validate(true) +} + +func (m *OperationLog) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -24807,9 +40698,29 @@ func (m *OperationLog) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return OperationLogMultiError(errors) + } + return nil } +// OperationLogMultiError is an error wrapping multiple validation errors +// returned by OperationLog.ValidateAll() if the designated constraints aren't met. +type OperationLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OperationLogMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OperationLogMultiError) AllErrors() []error { return m } + // OperationLogValidationError is the validation error returned by // OperationLog.Validate if the designated constraints aren't met. type OperationLogValidationError struct { @@ -24865,13 +40776,27 @@ var _ interface { } = OperationLogValidationError{} // Validate checks the field values on TaskOperationLog with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *TaskOperationLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskOperationLog with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// TaskOperationLogMultiError, or nil if none found. +func (m *TaskOperationLog) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskOperationLog) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -24892,9 +40817,30 @@ func (m *TaskOperationLog) Validate() error { // no validation rules for TaskType + if len(errors) > 0 { + return TaskOperationLogMultiError(errors) + } + return nil } +// TaskOperationLogMultiError is an error wrapping multiple validation errors +// returned by TaskOperationLog.ValidateAll() if the designated constraints +// aren't met. +type TaskOperationLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskOperationLogMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TaskOperationLogMultiError) AllErrors() []error { return m } + // TaskOperationLogValidationError is the validation error returned by // TaskOperationLog.Validate if the designated constraints aren't met. type TaskOperationLogValidationError struct { @@ -24951,17 +40897,35 @@ var _ interface { // Validate checks the field values on ListCloudInstanceTypeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstanceTypeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstanceTypeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudInstanceTypeRequestMultiError, or nil if none found. +func (m *ListCloudInstanceTypeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstanceTypeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -24969,17 +40933,25 @@ func (m *ListCloudInstanceTypeRequest) Validate() error { // no validation rules for AccountID if utf8.RuneCountInString(m.GetZone()) > 32 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "Zone", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodeFamily()) > 32 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "NodeFamily", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Cpu @@ -24994,9 +40966,30 @@ func (m *ListCloudInstanceTypeRequest) Validate() error { // no validation rules for Provider + if len(errors) > 0 { + return ListCloudInstanceTypeRequestMultiError(errors) + } + return nil } +// ListCloudInstanceTypeRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstanceTypeRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudInstanceTypeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstanceTypeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstanceTypeRequestMultiError) AllErrors() []error { return m } + // ListCloudInstanceTypeRequestValidationError is the validation error returned // by ListCloudInstanceTypeRequest.Validate if the designated constraints // aren't met. @@ -25056,12 +41049,26 @@ var _ interface { // Validate checks the field values on ListCloudInstanceTypeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstanceTypeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstanceTypeResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudInstanceTypeResponseMultiError, or nil if none found. +func (m *ListCloudInstanceTypeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstanceTypeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -25071,7 +41078,26 @@ func (m *ListCloudInstanceTypeResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudInstanceTypeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudInstanceTypeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudInstanceTypeResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -25083,9 +41109,30 @@ func (m *ListCloudInstanceTypeResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudInstanceTypeResponseMultiError(errors) + } + return nil } +// ListCloudInstanceTypeResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstanceTypeResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudInstanceTypeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstanceTypeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstanceTypeResponseMultiError) AllErrors() []error { return m } + // ListCloudInstanceTypeResponseValidationError is the validation error // returned by ListCloudInstanceTypeResponse.Validate if the designated // constraints aren't met. @@ -25144,13 +41191,27 @@ var _ interface { } = ListCloudInstanceTypeResponseValidationError{} // Validate checks the field values on InstanceType with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *InstanceType) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceType with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in InstanceTypeMultiError, or +// nil if none found. +func (m *InstanceType) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceType) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeType // no validation rules for TypeName @@ -25171,7 +41232,26 @@ func (m *InstanceType) Validate() error { // no validation rules for ResourcePoolID - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTypeValidationError{ field: "SystemDisk", @@ -25184,7 +41264,26 @@ func (m *InstanceType) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTypeValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -25196,9 +41295,29 @@ func (m *InstanceType) Validate() error { } + if len(errors) > 0 { + return InstanceTypeMultiError(errors) + } + return nil } +// InstanceTypeMultiError is an error wrapping multiple validation errors +// returned by InstanceType.ValidateAll() if the designated constraints aren't met. +type InstanceTypeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceTypeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InstanceTypeMultiError) AllErrors() []error { return m } + // InstanceTypeValidationError is the validation error returned by // InstanceType.Validate if the designated constraints aren't met. type InstanceTypeValidationError struct { @@ -25255,17 +41374,35 @@ var _ interface { // Validate checks the field values on ListCloudInstancesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstancesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstancesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudInstancesRequestMultiError, or nil if none found. +func (m *ListCloudInstancesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstancesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudInstancesRequestValidationError{ + err := ListCloudInstancesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -25273,15 +41410,40 @@ func (m *ListCloudInstancesRequest) Validate() error { // no validation rules for AccountID if utf8.RuneCountInString(m.GetIpList()) < 1 { - return ListCloudInstancesRequestValidationError{ + err := ListCloudInstancesRequestValidationError{ field: "IpList", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudInstancesRequestMultiError(errors) } return nil } +// ListCloudInstancesRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudInstancesRequest.ValidateAll() if the +// designated constraints aren't met. +type ListCloudInstancesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstancesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstancesRequestMultiError) AllErrors() []error { return m } + // ListCloudInstancesRequestValidationError is the validation error returned by // ListCloudInstancesRequest.Validate if the designated constraints aren't met. type ListCloudInstancesRequestValidationError struct { @@ -25340,12 +41502,26 @@ var _ interface { // Validate checks the field values on ListCloudInstancesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstancesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstancesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudInstancesResponseMultiError, or nil if none found. +func (m *ListCloudInstancesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstancesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -25355,7 +41531,26 @@ func (m *ListCloudInstancesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudInstancesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudInstancesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudInstancesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -25367,9 +41562,30 @@ func (m *ListCloudInstancesResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudInstancesResponseMultiError(errors) + } + return nil } +// ListCloudInstancesResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstancesResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudInstancesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstancesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudInstancesResponseMultiError) AllErrors() []error { return m } + // ListCloudInstancesResponseValidationError is the validation error returned // by ListCloudInstancesResponse.Validate if the designated constraints aren't met. type ListCloudInstancesResponseValidationError struct { @@ -25427,12 +41643,27 @@ var _ interface { } = ListCloudInstancesResponseValidationError{} // Validate checks the field values on CloudNode with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudNode with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudNodeMultiError, or nil +// if none found. +func (m *CloudNode) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -25459,9 +41690,29 @@ func (m *CloudNode) Validate() error { // no validation rules for CloudRegionNode + if len(errors) > 0 { + return CloudNodeMultiError(errors) + } + return nil } +// CloudNodeMultiError is an error wrapping multiple validation errors returned +// by CloudNode.ValidateAll() if the designated constraints aren't met. +type CloudNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudNodeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudNodeMultiError) AllErrors() []error { return m } + // CloudNodeValidationError is the validation error returned by // CloudNode.Validate if the designated constraints aren't met. type CloudNodeValidationError struct { @@ -25518,26 +41769,65 @@ var _ interface { // Validate checks the field values on GetCloudAccountTypeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudAccountTypeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudAccountTypeRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudAccountTypeRequestMultiError, or nil if none found. +func (m *GetCloudAccountTypeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudAccountTypeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudAccountTypeRequestValidationError{ + err := GetCloudAccountTypeRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudAccountTypeRequestMultiError(errors) + } + return nil } +// GetCloudAccountTypeRequestMultiError is an error wrapping multiple +// validation errors returned by GetCloudAccountTypeRequest.ValidateAll() if +// the designated constraints aren't met. +type GetCloudAccountTypeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudAccountTypeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudAccountTypeRequestMultiError) AllErrors() []error { return m } + // GetCloudAccountTypeRequestValidationError is the validation error returned // by GetCloudAccountTypeRequest.Validate if the designated constraints aren't met. type GetCloudAccountTypeRequestValidationError struct { @@ -25596,19 +41886,52 @@ var _ interface { // Validate checks the field values on GetCloudAccountTypeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudAccountTypeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudAccountTypeResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetCloudAccountTypeResponseMultiError, or nil if none found. +func (m *GetCloudAccountTypeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudAccountTypeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudAccountTypeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudAccountTypeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudAccountTypeResponseValidationError{ field: "Data", @@ -25618,9 +41941,30 @@ func (m *GetCloudAccountTypeResponse) Validate() error { } } + if len(errors) > 0 { + return GetCloudAccountTypeResponseMultiError(errors) + } + return nil } +// GetCloudAccountTypeResponseMultiError is an error wrapping multiple +// validation errors returned by GetCloudAccountTypeResponse.ValidateAll() if +// the designated constraints aren't met. +type GetCloudAccountTypeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudAccountTypeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudAccountTypeResponseMultiError) AllErrors() []error { return m } + // GetCloudAccountTypeResponseValidationError is the validation error returned // by GetCloudAccountTypeResponse.Validate if the designated constraints // aren't met. @@ -25679,18 +42023,53 @@ var _ interface { } = GetCloudAccountTypeResponseValidationError{} // Validate checks the field values on CloudAccountType with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudAccountType) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccountType with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudAccountTypeMultiError, or nil if none found. +func (m *CloudAccountType) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccountType) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Type + if len(errors) > 0 { + return CloudAccountTypeMultiError(errors) + } + return nil } +// CloudAccountTypeMultiError is an error wrapping multiple validation errors +// returned by CloudAccountType.ValidateAll() if the designated constraints +// aren't met. +type CloudAccountTypeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountTypeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudAccountTypeMultiError) AllErrors() []error { return m } + // CloudAccountTypeValidationError is the validation error returned by // CloudAccountType.Validate if the designated constraints aren't met. type CloudAccountTypeValidationError struct { @@ -25747,31 +42126,76 @@ var _ interface { // Validate checks the field values on GetCloudBandwidthPackagesRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetCloudBandwidthPackagesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudBandwidthPackagesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetCloudBandwidthPackagesRequestMultiError, or nil if none found. +func (m *GetCloudBandwidthPackagesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudBandwidthPackagesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 1 { - return GetCloudBandwidthPackagesRequestValidationError{ + err := GetCloudBandwidthPackagesRequestValidationError{ field: "CloudID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 1 { - return GetCloudBandwidthPackagesRequestValidationError{ + err := GetCloudBandwidthPackagesRequestValidationError{ field: "Region", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudBandwidthPackagesRequestMultiError(errors) + } + return nil } +// GetCloudBandwidthPackagesRequestMultiError is an error wrapping multiple +// validation errors returned by +// GetCloudBandwidthPackagesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetCloudBandwidthPackagesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudBandwidthPackagesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudBandwidthPackagesRequestMultiError) AllErrors() []error { return m } + // GetCloudBandwidthPackagesRequestValidationError is the validation error // returned by GetCloudBandwidthPackagesRequest.Validate if the designated // constraints aren't met. @@ -25831,12 +42255,27 @@ var _ interface { // Validate checks the field values on GetCloudBandwidthPackagesResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetCloudBandwidthPackagesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudBandwidthPackagesResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// GetCloudBandwidthPackagesResponseMultiError, or nil if none found. +func (m *GetCloudBandwidthPackagesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudBandwidthPackagesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -25846,7 +42285,26 @@ func (m *GetCloudBandwidthPackagesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudBandwidthPackagesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudBandwidthPackagesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudBandwidthPackagesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -25858,9 +42316,31 @@ func (m *GetCloudBandwidthPackagesResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudBandwidthPackagesResponseMultiError(errors) + } + return nil } +// GetCloudBandwidthPackagesResponseMultiError is an error wrapping multiple +// validation errors returned by +// GetCloudBandwidthPackagesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetCloudBandwidthPackagesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudBandwidthPackagesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetCloudBandwidthPackagesResponseMultiError) AllErrors() []error { return m } + // GetCloudBandwidthPackagesResponseValidationError is the validation error // returned by GetCloudBandwidthPackagesResponse.Validate if the designated // constraints aren't met. @@ -25920,12 +42400,26 @@ var _ interface { // Validate checks the field values on BandwidthPackageInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BandwidthPackageInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BandwidthPackageInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// BandwidthPackageInfoMultiError, or nil if none found. +func (m *BandwidthPackageInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *BandwidthPackageInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Id // no validation rules for Name @@ -25936,9 +42430,30 @@ func (m *BandwidthPackageInfo) Validate() error { // no validation rules for Bandwidth + if len(errors) > 0 { + return BandwidthPackageInfoMultiError(errors) + } + return nil } +// BandwidthPackageInfoMultiError is an error wrapping multiple validation +// errors returned by BandwidthPackageInfo.ValidateAll() if the designated +// constraints aren't met. +type BandwidthPackageInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BandwidthPackageInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m BandwidthPackageInfoMultiError) AllErrors() []error { return m } + // BandwidthPackageInfoValidationError is the validation error returned by // BandwidthPackageInfo.Validate if the designated constraints aren't met. type BandwidthPackageInfoValidationError struct { @@ -25997,17 +42512,35 @@ var _ interface { // Validate checks the field values on ListCloudOsImageRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudOsImageRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudOsImageRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudOsImageRequestMultiError, or nil if none found. +func (m *ListCloudOsImageRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudOsImageRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudOsImageRequestValidationError{ + err := ListCloudOsImageRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -26016,9 +42549,30 @@ func (m *ListCloudOsImageRequest) Validate() error { // no validation rules for Provider + if len(errors) > 0 { + return ListCloudOsImageRequestMultiError(errors) + } + return nil } +// ListCloudOsImageRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudOsImageRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudOsImageRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudOsImageRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudOsImageRequestMultiError) AllErrors() []error { return m } + // ListCloudOsImageRequestValidationError is the validation error returned by // ListCloudOsImageRequest.Validate if the designated constraints aren't met. type ListCloudOsImageRequestValidationError struct { @@ -26077,12 +42631,26 @@ var _ interface { // Validate checks the field values on ListCloudOsImageResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudOsImageResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudOsImageResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudOsImageResponseMultiError, or nil if none found. +func (m *ListCloudOsImageResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudOsImageResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26092,7 +42660,26 @@ func (m *ListCloudOsImageResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudOsImageResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudOsImageResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudOsImageResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26104,9 +42691,30 @@ func (m *ListCloudOsImageResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudOsImageResponseMultiError(errors) + } + return nil } +// ListCloudOsImageResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudOsImageResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudOsImageResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudOsImageResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudOsImageResponseMultiError) AllErrors() []error { return m } + // ListCloudOsImageResponseValidationError is the validation error returned by // ListCloudOsImageResponse.Validate if the designated constraints aren't met. type ListCloudOsImageResponseValidationError struct { @@ -26164,12 +42772,26 @@ var _ interface { } = ListCloudOsImageResponseValidationError{} // Validate checks the field values on OsImage with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *OsImage) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OsImage with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in OsImageMultiError, or nil if none found. +func (m *OsImage) ValidateAll() error { + return m.validate(true) +} + +func (m *OsImage) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ImageID // no validation rules for Alias @@ -26186,9 +42808,29 @@ func (m *OsImage) Validate() error { // no validation rules for Provider + if len(errors) > 0 { + return OsImageMultiError(errors) + } + return nil } +// OsImageMultiError is an error wrapping multiple validation errors returned +// by OsImage.ValidateAll() if the designated constraints aren't met. +type OsImageMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OsImageMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OsImageMultiError) AllErrors() []error { return m } + // OsImageValidationError is the validation error returned by OsImage.Validate // if the designated constraints aren't met. type OsImageValidationError struct { @@ -26245,26 +42887,65 @@ var _ interface { // Validate checks the field values on ListCloudProjectsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudProjectsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudProjectsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudProjectsRequestMultiError, or nil if none found. +func (m *ListCloudProjectsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudProjectsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudProjectsRequestValidationError{ + err := ListCloudProjectsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return ListCloudProjectsRequestMultiError(errors) + } + return nil } +// ListCloudProjectsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudProjectsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudProjectsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudProjectsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudProjectsRequestMultiError) AllErrors() []error { return m } + // ListCloudProjectsRequestValidationError is the validation error returned by // ListCloudProjectsRequest.Validate if the designated constraints aren't met. type ListCloudProjectsRequestValidationError struct { @@ -26323,12 +43004,26 @@ var _ interface { // Validate checks the field values on ListCloudProjectsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudProjectsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudProjectsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudProjectsResponseMultiError, or nil if none found. +func (m *ListCloudProjectsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudProjectsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26338,7 +43033,26 @@ func (m *ListCloudProjectsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudProjectsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudProjectsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudProjectsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26350,9 +43064,30 @@ func (m *ListCloudProjectsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudProjectsResponseMultiError(errors) + } + return nil } +// ListCloudProjectsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudProjectsResponse.ValidateAll() if the +// designated constraints aren't met. +type ListCloudProjectsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudProjectsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudProjectsResponseMultiError) AllErrors() []error { return m } + // ListCloudProjectsResponseValidationError is the validation error returned by // ListCloudProjectsResponse.Validate if the designated constraints aren't met. type ListCloudProjectsResponseValidationError struct { @@ -26410,20 +43145,54 @@ var _ interface { } = ListCloudProjectsResponseValidationError{} // Validate checks the field values on CloudProject with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudProject) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudProject with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudProjectMultiError, or +// nil if none found. +func (m *CloudProject) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudProject) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for ProjectName + if len(errors) > 0 { + return CloudProjectMultiError(errors) + } + return nil } +// CloudProjectMultiError is an error wrapping multiple validation errors +// returned by CloudProject.ValidateAll() if the designated constraints aren't met. +type CloudProjectMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudProjectMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudProjectMultiError) AllErrors() []error { return m } + // CloudProjectValidationError is the validation error returned by // CloudProject.Validate if the designated constraints aren't met. type CloudProjectValidationError struct { @@ -26480,17 +43249,35 @@ var _ interface { // Validate checks the field values on ListCloudVpcsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVpcsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVpcsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVpcsRequestMultiError, or nil if none found. +func (m *ListCloudVpcsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVpcsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudVpcsRequestValidationError{ + err := ListCloudVpcsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -26499,9 +43286,30 @@ func (m *ListCloudVpcsRequest) Validate() error { // no validation rules for VpcID + if len(errors) > 0 { + return ListCloudVpcsRequestMultiError(errors) + } + return nil } +// ListCloudVpcsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudVpcsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVpcsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVpcsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVpcsRequestMultiError) AllErrors() []error { return m } + // ListCloudVpcsRequestValidationError is the validation error returned by // ListCloudVpcsRequest.Validate if the designated constraints aren't met. type ListCloudVpcsRequestValidationError struct { @@ -26560,12 +43368,26 @@ var _ interface { // Validate checks the field values on ListCloudVpcsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVpcsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVpcsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudVpcsResponseMultiError, or nil if none found. +func (m *ListCloudVpcsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVpcsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26575,7 +43397,26 @@ func (m *ListCloudVpcsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudVpcsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudVpcsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudVpcsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26587,9 +43428,30 @@ func (m *ListCloudVpcsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudVpcsResponseMultiError(errors) + } + return nil } +// ListCloudVpcsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudVpcsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVpcsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVpcsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudVpcsResponseMultiError) AllErrors() []error { return m } + // ListCloudVpcsResponseValidationError is the validation error returned by // ListCloudVpcsResponse.Validate if the designated constraints aren't met. type ListCloudVpcsResponseValidationError struct { @@ -26647,12 +43509,27 @@ var _ interface { } = ListCloudVpcsResponseValidationError{} // Validate checks the field values on CloudVpc with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CloudVpc) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVpc with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CloudVpcMultiError, or nil +// if none found. +func (m *CloudVpc) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVpc) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for VpcId @@ -26664,7 +43541,26 @@ func (m *CloudVpc) Validate() error { for idx, item := range m.GetCidrs() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudVpcValidationError{ + field: fmt.Sprintf("Cidrs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudVpcValidationError{ + field: fmt.Sprintf("Cidrs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudVpcValidationError{ field: fmt.Sprintf("Cidrs[%v]", idx), @@ -26676,9 +43572,29 @@ func (m *CloudVpc) Validate() error { } + if len(errors) > 0 { + return CloudVpcMultiError(errors) + } + return nil } +// CloudVpcMultiError is an error wrapping multiple validation errors returned +// by CloudVpc.ValidateAll() if the designated constraints aren't met. +type CloudVpcMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVpcMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudVpcMultiError) AllErrors() []error { return m } + // CloudVpcValidationError is the validation error returned by // CloudVpc.Validate if the designated constraints aren't met. type CloudVpcValidationError struct { @@ -26734,20 +43650,55 @@ var _ interface { } = CloudVpcValidationError{} // Validate checks the field values on AssistantCidr with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *AssistantCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AssistantCidr with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in AssistantCidrMultiError, or +// nil if none found. +func (m *AssistantCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *AssistantCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Cidr // no validation rules for CidrType + if len(errors) > 0 { + return AssistantCidrMultiError(errors) + } + return nil } +// AssistantCidrMultiError is an error wrapping multiple validation errors +// returned by AssistantCidr.ValidateAll() if the designated constraints +// aren't met. +type AssistantCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AssistantCidrMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m AssistantCidrMultiError) AllErrors() []error { return m } + // AssistantCidrValidationError is the validation error returned by // AssistantCidr.Validate if the designated constraints aren't met. type AssistantCidrValidationError struct { @@ -26804,26 +43755,48 @@ var _ interface { // Validate checks the field values on ListCloudSubnetsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSubnetsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSubnetsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudSubnetsRequestMultiError, or nil if none found. +func (m *ListCloudSubnetsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSubnetsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudSubnetsRequestValidationError{ + err := ListCloudSubnetsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region if utf8.RuneCountInString(m.GetAccountID()) < 2 { - return ListCloudSubnetsRequestValidationError{ + err := ListCloudSubnetsRequestValidationError{ field: "AccountID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for VpcID @@ -26832,9 +43805,30 @@ func (m *ListCloudSubnetsRequest) Validate() error { // no validation rules for SubnetID + if len(errors) > 0 { + return ListCloudSubnetsRequestMultiError(errors) + } + return nil } +// ListCloudSubnetsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudSubnetsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudSubnetsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSubnetsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSubnetsRequestMultiError) AllErrors() []error { return m } + // ListCloudSubnetsRequestValidationError is the validation error returned by // ListCloudSubnetsRequest.Validate if the designated constraints aren't met. type ListCloudSubnetsRequestValidationError struct { @@ -26893,12 +43887,26 @@ var _ interface { // Validate checks the field values on ListCloudSubnetsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSubnetsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSubnetsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudSubnetsResponseMultiError, or nil if none found. +func (m *ListCloudSubnetsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSubnetsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26908,7 +43916,26 @@ func (m *ListCloudSubnetsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudSubnetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudSubnetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudSubnetsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26920,9 +43947,30 @@ func (m *ListCloudSubnetsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudSubnetsResponseMultiError(errors) + } + return nil } +// ListCloudSubnetsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudSubnetsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudSubnetsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSubnetsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSubnetsResponseMultiError) AllErrors() []error { return m } + // ListCloudSubnetsResponseValidationError is the validation error returned by // ListCloudSubnetsResponse.Validate if the designated constraints aren't met. type ListCloudSubnetsResponseValidationError struct { @@ -26980,12 +44028,26 @@ var _ interface { } = ListCloudSubnetsResponseValidationError{} // Validate checks the field values on Subnet with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Subnet) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Subnet with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in SubnetMultiError, or nil if none found. +func (m *Subnet) ValidateAll() error { + return m.validate(true) +} + +func (m *Subnet) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VpcID // no validation rules for SubnetID @@ -27002,9 +44064,29 @@ func (m *Subnet) Validate() error { // no validation rules for ZoneName + if len(errors) > 0 { + return SubnetMultiError(errors) + } + return nil } +// SubnetMultiError is an error wrapping multiple validation errors returned by +// Subnet.ValidateAll() if the designated constraints aren't met. +type SubnetMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubnetMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SubnetMultiError) AllErrors() []error { return m } + // SubnetValidationError is the validation error returned by Subnet.Validate if // the designated constraints aren't met. type SubnetValidationError struct { @@ -27061,26 +44143,65 @@ var _ interface { // Validate checks the field values on ListCloudSecurityGroupsRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSecurityGroupsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSecurityGroupsRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudSecurityGroupsRequestMultiError, or nil if none found. +func (m *ListCloudSecurityGroupsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSecurityGroupsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudSecurityGroupsRequestValidationError{ + err := ListCloudSecurityGroupsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return ListCloudSecurityGroupsRequestMultiError(errors) + } + return nil } +// ListCloudSecurityGroupsRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudSecurityGroupsRequest.ValidateAll() +// if the designated constraints aren't met. +type ListCloudSecurityGroupsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSecurityGroupsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSecurityGroupsRequestMultiError) AllErrors() []error { return m } + // ListCloudSecurityGroupsRequestValidationError is the validation error // returned by ListCloudSecurityGroupsRequest.Validate if the designated // constraints aren't met. @@ -27140,12 +44261,26 @@ var _ interface { // Validate checks the field values on ListCloudSecurityGroupsResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSecurityGroupsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSecurityGroupsResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListCloudSecurityGroupsResponseMultiError, or nil if none found. +func (m *ListCloudSecurityGroupsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSecurityGroupsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27155,7 +44290,26 @@ func (m *ListCloudSecurityGroupsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudSecurityGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudSecurityGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudSecurityGroupsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27167,9 +44321,30 @@ func (m *ListCloudSecurityGroupsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudSecurityGroupsResponseMultiError(errors) + } + return nil } +// ListCloudSecurityGroupsResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudSecurityGroupsResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudSecurityGroupsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSecurityGroupsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudSecurityGroupsResponseMultiError) AllErrors() []error { return m } + // ListCloudSecurityGroupsResponseValidationError is the validation error // returned by ListCloudSecurityGroupsResponse.Validate if the designated // constraints aren't met. @@ -27229,26 +44404,65 @@ var _ interface { // Validate checks the field values on ListKeyPairsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListKeyPairsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListKeyPairsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListKeyPairsRequestMultiError, or nil if none found. +func (m *ListKeyPairsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListKeyPairsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListKeyPairsRequestValidationError{ + err := ListKeyPairsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return ListKeyPairsRequestMultiError(errors) + } + return nil } +// ListKeyPairsRequestMultiError is an error wrapping multiple validation +// errors returned by ListKeyPairsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListKeyPairsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListKeyPairsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListKeyPairsRequestMultiError) AllErrors() []error { return m } + // ListKeyPairsRequestValidationError is the validation error returned by // ListKeyPairsRequest.Validate if the designated constraints aren't met. type ListKeyPairsRequestValidationError struct { @@ -27307,12 +44521,26 @@ var _ interface { // Validate checks the field values on ListKeyPairsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListKeyPairsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListKeyPairsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListKeyPairsResponseMultiError, or nil if none found. +func (m *ListKeyPairsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListKeyPairsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27322,7 +44550,26 @@ func (m *ListKeyPairsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListKeyPairsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListKeyPairsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListKeyPairsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27334,9 +44581,30 @@ func (m *ListKeyPairsResponse) Validate() error { } + if len(errors) > 0 { + return ListKeyPairsResponseMultiError(errors) + } + return nil } +// ListKeyPairsResponseMultiError is an error wrapping multiple validation +// errors returned by ListKeyPairsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListKeyPairsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListKeyPairsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListKeyPairsResponseMultiError) AllErrors() []error { return m } + // ListKeyPairsResponseValidationError is the validation error returned by // ListKeyPairsResponse.Validate if the designated constraints aren't met. type ListKeyPairsResponseValidationError struct { @@ -27394,21 +44662,55 @@ var _ interface { } = ListKeyPairsResponseValidationError{} // Validate checks the field values on KeyPair with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *KeyPair) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KeyPair with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in KeyPairMultiError, or nil if none found. +func (m *KeyPair) ValidateAll() error { + return m.validate(true) +} + +func (m *KeyPair) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for KeyID // no validation rules for KeyName // no validation rules for Description + if len(errors) > 0 { + return KeyPairMultiError(errors) + } + return nil } +// KeyPairMultiError is an error wrapping multiple validation errors returned +// by KeyPair.ValidateAll() if the designated constraints aren't met. +type KeyPairMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KeyPairMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m KeyPairMultiError) AllErrors() []error { return m } + // KeyPairValidationError is the validation error returned by KeyPair.Validate // if the designated constraints aren't met. type KeyPairValidationError struct { @@ -27465,47 +44767,81 @@ var _ interface { // Validate checks the field values on ListOperationLogsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListOperationLogsRequestMultiError, or nil if none found. +func (m *ListOperationLogsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if _, ok := _ListOperationLogsRequest_ResourceType_InLookup[m.GetResourceType()]; !ok { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "ResourceType", reason: "value must be in list [cluster autoscalingoption cloud cloudvpc nodegroup task]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ResourceID if m.GetStartTime() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "StartTime", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetEndTime() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "EndTime", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "Limit", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetPage() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "Page", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Simple @@ -27524,9 +44860,30 @@ func (m *ListOperationLogsRequest) Validate() error { // no validation rules for IpList + if len(errors) > 0 { + return ListOperationLogsRequestMultiError(errors) + } + return nil } +// ListOperationLogsRequestMultiError is an error wrapping multiple validation +// errors returned by ListOperationLogsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListOperationLogsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListOperationLogsRequestMultiError) AllErrors() []error { return m } + // ListOperationLogsRequestValidationError is the validation error returned by // ListOperationLogsRequest.Validate if the designated constraints aren't met. type ListOperationLogsRequestValidationError struct { @@ -27594,19 +44951,52 @@ var _ListOperationLogsRequest_ResourceType_InLookup = map[string]struct{}{ // Validate checks the field values on ListOperationLogsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListOperationLogsResponseMultiError, or nil if none found. +func (m *ListOperationLogsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListOperationLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListOperationLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListOperationLogsResponseValidationError{ field: "Data", @@ -27616,9 +45006,30 @@ func (m *ListOperationLogsResponse) Validate() error { } } + if len(errors) > 0 { + return ListOperationLogsResponseMultiError(errors) + } + return nil } +// ListOperationLogsResponseMultiError is an error wrapping multiple validation +// errors returned by ListOperationLogsResponse.ValidateAll() if the +// designated constraints aren't met. +type ListOperationLogsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListOperationLogsResponseMultiError) AllErrors() []error { return m } + // ListOperationLogsResponseValidationError is the validation error returned by // ListOperationLogsResponse.Validate if the designated constraints aren't met. type ListOperationLogsResponseValidationError struct { @@ -27677,18 +45088,51 @@ var _ interface { // Validate checks the field values on ListOperationLogsResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsResponseData with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ListOperationLogsResponseDataMultiError, or nil if none found. +func (m *ListOperationLogsResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsResponseData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Count for idx, item := range m.GetResults() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListOperationLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListOperationLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListOperationLogsResponseDataValidationError{ field: fmt.Sprintf("Results[%v]", idx), @@ -27700,9 +45144,30 @@ func (m *ListOperationLogsResponseData) Validate() error { } + if len(errors) > 0 { + return ListOperationLogsResponseDataMultiError(errors) + } + return nil } +// ListOperationLogsResponseDataMultiError is an error wrapping multiple +// validation errors returned by ListOperationLogsResponseData.ValidateAll() +// if the designated constraints aren't met. +type ListOperationLogsResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsResponseDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListOperationLogsResponseDataMultiError) AllErrors() []error { return m } + // ListOperationLogsResponseDataValidationError is the validation error // returned by ListOperationLogsResponseData.Validate if the designated // constraints aren't met. @@ -27762,12 +45227,26 @@ var _ interface { // Validate checks the field values on OperationLogDetail with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *OperationLogDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OperationLogDetail with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// OperationLogDetailMultiError, or nil if none found. +func (m *OperationLogDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *OperationLogDetail) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -27780,7 +45259,26 @@ func (m *OperationLogDetail) Validate() error { // no validation rules for CreateTime - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OperationLogDetailValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OperationLogDetailValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return OperationLogDetailValidationError{ field: "Task", @@ -27794,9 +45292,30 @@ func (m *OperationLogDetail) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return OperationLogDetailMultiError(errors) + } + return nil } +// OperationLogDetailMultiError is an error wrapping multiple validation errors +// returned by OperationLogDetail.ValidateAll() if the designated constraints +// aren't met. +type OperationLogDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OperationLogDetailMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OperationLogDetailMultiError) AllErrors() []error { return m } + // OperationLogDetailValidationError is the validation error returned by // OperationLogDetail.Validate if the designated constraints aren't met. type OperationLogDetailValidationError struct { @@ -27854,22 +45373,57 @@ var _ interface { } = OperationLogDetailValidationError{} // Validate checks the field values on SecurityGroup with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *SecurityGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SecurityGroup with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in SecurityGroupMultiError, or +// nil if none found. +func (m *SecurityGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *SecurityGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for SecurityGroupID // no validation rules for SecurityGroupName // no validation rules for Description + if len(errors) > 0 { + return SecurityGroupMultiError(errors) + } + return nil } +// SecurityGroupMultiError is an error wrapping multiple validation errors +// returned by SecurityGroup.ValidateAll() if the designated constraints +// aren't met. +type SecurityGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SecurityGroupMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m SecurityGroupMultiError) AllErrors() []error { return m } + // SecurityGroupValidationError is the validation error returned by // SecurityGroup.Validate if the designated constraints aren't met. type SecurityGroupValidationError struct { @@ -27926,16 +45480,49 @@ var _ interface { // Validate checks the field values on NodeOperationStatus with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *NodeOperationStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeOperationStatus with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NodeOperationStatusMultiError, or nil if none found. +func (m *NodeOperationStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeOperationStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetFail() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Fail[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Fail[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeOperationStatusValidationError{ field: fmt.Sprintf("Fail[%v]", idx), @@ -27950,7 +45537,26 @@ func (m *NodeOperationStatus) Validate() error { for idx, item := range m.GetSuccess() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Success[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Success[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeOperationStatusValidationError{ field: fmt.Sprintf("Success[%v]", idx), @@ -27962,9 +45568,30 @@ func (m *NodeOperationStatus) Validate() error { } + if len(errors) > 0 { + return NodeOperationStatusMultiError(errors) + } + return nil } +// NodeOperationStatusMultiError is an error wrapping multiple validation +// errors returned by NodeOperationStatus.ValidateAll() if the designated +// constraints aren't met. +type NodeOperationStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeOperationStatusMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeOperationStatusMultiError) AllErrors() []error { return m } + // NodeOperationStatusValidationError is the validation error returned by // NodeOperationStatus.Validate if the designated constraints aren't met. type NodeOperationStatusValidationError struct { @@ -28023,19 +45650,54 @@ var _ interface { // Validate checks the field values on NodeOperationStatusInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *NodeOperationStatusInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeOperationStatusInfo with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// NodeOperationStatusInfoMultiError, or nil if none found. +func (m *NodeOperationStatusInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeOperationStatusInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeName // no validation rules for Message + if len(errors) > 0 { + return NodeOperationStatusInfoMultiError(errors) + } + return nil } +// NodeOperationStatusInfoMultiError is an error wrapping multiple validation +// errors returned by NodeOperationStatusInfo.ValidateAll() if the designated +// constraints aren't met. +type NodeOperationStatusInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeOperationStatusInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeOperationStatusInfoMultiError) AllErrors() []error { return m } + // NodeOperationStatusInfoValidationError is the validation error returned by // NodeOperationStatusInfo.Validate if the designated constraints aren't met. type NodeOperationStatusInfoValidationError struct { @@ -28093,18 +45755,36 @@ var _ interface { } = NodeOperationStatusInfoValidationError{} // Validate checks the field values on DrainNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DrainNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DrainNodeRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DrainNodeRequestMultiError, or nil if none found. +func (m *DrainNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DrainNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return DrainNodeRequestValidationError{ + err := DrainNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Force @@ -28127,9 +45807,30 @@ func (m *DrainNodeRequest) Validate() error { // no validation rules for DryRun + if len(errors) > 0 { + return DrainNodeRequestMultiError(errors) + } + return nil } +// DrainNodeRequestMultiError is an error wrapping multiple validation errors +// returned by DrainNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type DrainNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DrainNodeRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DrainNodeRequestMultiError) AllErrors() []error { return m } + // DrainNodeRequestValidationError is the validation error returned by // DrainNodeRequest.Validate if the designated constraints aren't met. type DrainNodeRequestValidationError struct { @@ -28185,20 +45886,53 @@ var _ interface { } = DrainNodeRequestValidationError{} // Validate checks the field values on DrainNodeResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *DrainNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DrainNodeResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DrainNodeResponseMultiError, or nil if none found. +func (m *DrainNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DrainNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DrainNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DrainNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DrainNodeResponseValidationError{ field: "Data", @@ -28208,9 +45942,30 @@ func (m *DrainNodeResponse) Validate() error { } } + if len(errors) > 0 { + return DrainNodeResponseMultiError(errors) + } + return nil } +// DrainNodeResponseMultiError is an error wrapping multiple validation errors +// returned by DrainNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type DrainNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DrainNodeResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DrainNodeResponseMultiError) AllErrors() []error { return m } + // DrainNodeResponseValidationError is the validation error returned by // DrainNodeResponse.Validate if the designated constraints aren't met. type DrainNodeResponseValidationError struct { @@ -28268,25 +46023,64 @@ var _ interface { } = DrainNodeResponseValidationError{} // Validate checks the field values on NodeAnnotation with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeAnnotation) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeAnnotation with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeAnnotationMultiError, +// or nil if none found. +func (m *NodeAnnotation) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeAnnotation) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeAnnotationValidationError{ + err := NodeAnnotationValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Annotations + if len(errors) > 0 { + return NodeAnnotationMultiError(errors) + } + return nil } +// NodeAnnotationMultiError is an error wrapping multiple validation errors +// returned by NodeAnnotation.ValidateAll() if the designated constraints +// aren't met. +type NodeAnnotationMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeAnnotationMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeAnnotationMultiError) AllErrors() []error { return m } + // NodeAnnotationValidationError is the validation error returned by // NodeAnnotation.Validate if the designated constraints aren't met. type NodeAnnotationValidationError struct { @@ -28343,23 +46137,60 @@ var _ interface { // Validate checks the field values on UpdateNodeAnnotationsRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeAnnotationsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeAnnotationsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeAnnotationsRequestMultiError, or nil if none found. +func (m *UpdateNodeAnnotationsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeAnnotationsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return UpdateNodeAnnotationsRequestValidationError{ + err := UpdateNodeAnnotationsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeAnnotationsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeAnnotationsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeAnnotationsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -28371,9 +46202,30 @@ func (m *UpdateNodeAnnotationsRequest) Validate() error { } + if len(errors) > 0 { + return UpdateNodeAnnotationsRequestMultiError(errors) + } + return nil } +// UpdateNodeAnnotationsRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeAnnotationsRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateNodeAnnotationsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeAnnotationsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeAnnotationsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeAnnotationsRequestValidationError is the validation error returned // by UpdateNodeAnnotationsRequest.Validate if the designated constraints // aren't met. @@ -28433,19 +46285,52 @@ var _ interface { // Validate checks the field values on UpdateNodeAnnotationsResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeAnnotationsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeAnnotationsResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateNodeAnnotationsResponseMultiError, or nil if none found. +func (m *UpdateNodeAnnotationsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeAnnotationsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeAnnotationsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeAnnotationsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeAnnotationsResponseValidationError{ field: "Data", @@ -28455,9 +46340,30 @@ func (m *UpdateNodeAnnotationsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeAnnotationsResponseMultiError(errors) + } + return nil } +// UpdateNodeAnnotationsResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeAnnotationsResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateNodeAnnotationsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeAnnotationsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeAnnotationsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeAnnotationsResponseValidationError is the validation error // returned by UpdateNodeAnnotationsResponse.Validate if the designated // constraints aren't met. @@ -28516,24 +46422,63 @@ var _ interface { } = UpdateNodeAnnotationsResponseValidationError{} // Validate checks the field values on NodeLabel with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeLabel) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeLabel with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeLabelMultiError, or nil +// if none found. +func (m *NodeLabel) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeLabel) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeLabelValidationError{ + err := NodeLabelValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Labels + if len(errors) > 0 { + return NodeLabelMultiError(errors) + } + return nil } +// NodeLabelMultiError is an error wrapping multiple validation errors returned +// by NodeLabel.ValidateAll() if the designated constraints aren't met. +type NodeLabelMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeLabelMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeLabelMultiError) AllErrors() []error { return m } + // NodeLabelValidationError is the validation error returned by // NodeLabel.Validate if the designated constraints aren't met. type NodeLabelValidationError struct { @@ -28590,16 +46535,49 @@ var _ interface { // Validate checks the field values on UpdateNodeLabelsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeLabelsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeLabelsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeLabelsRequestMultiError, or nil if none found. +func (m *UpdateNodeLabelsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeLabelsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeLabelsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeLabelsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeLabelsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -28612,15 +46590,40 @@ func (m *UpdateNodeLabelsRequest) Validate() error { } if len(m.GetClusterID()) < 1 { - return UpdateNodeLabelsRequestValidationError{ + err := UpdateNodeLabelsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeLabelsRequestMultiError(errors) } return nil } +// UpdateNodeLabelsRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeLabelsRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeLabelsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeLabelsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeLabelsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeLabelsRequestValidationError is the validation error returned by // UpdateNodeLabelsRequest.Validate if the designated constraints aren't met. type UpdateNodeLabelsRequestValidationError struct { @@ -28679,19 +46682,52 @@ var _ interface { // Validate checks the field values on UpdateNodeLabelsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeLabelsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeLabelsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeLabelsResponseMultiError, or nil if none found. +func (m *UpdateNodeLabelsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeLabelsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeLabelsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeLabelsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeLabelsResponseValidationError{ field: "Data", @@ -28701,9 +46737,30 @@ func (m *UpdateNodeLabelsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeLabelsResponseMultiError(errors) + } + return nil } +// UpdateNodeLabelsResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeLabelsResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeLabelsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeLabelsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeLabelsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeLabelsResponseValidationError is the validation error returned by // UpdateNodeLabelsResponse.Validate if the designated constraints aren't met. type UpdateNodeLabelsResponseValidationError struct { @@ -28761,23 +46818,61 @@ var _ interface { } = UpdateNodeLabelsResponseValidationError{} // Validate checks the field values on NodeTaint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeTaint) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeTaint with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeTaintMultiError, or nil +// if none found. +func (m *NodeTaint) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeTaint) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeTaintValidationError{ + err := NodeTaintValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTaintValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTaintValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTaintValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -28789,9 +46884,29 @@ func (m *NodeTaint) Validate() error { } + if len(errors) > 0 { + return NodeTaintMultiError(errors) + } + return nil } +// NodeTaintMultiError is an error wrapping multiple validation errors returned +// by NodeTaint.ValidateAll() if the designated constraints aren't met. +type NodeTaintMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeTaintMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeTaintMultiError) AllErrors() []error { return m } + // NodeTaintValidationError is the validation error returned by // NodeTaint.Validate if the designated constraints aren't met. type NodeTaintValidationError struct { @@ -28848,16 +46963,49 @@ var _ interface { // Validate checks the field values on UpdateNodeTaintsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTaintsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTaintsRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTaintsRequestMultiError, or nil if none found. +func (m *UpdateNodeTaintsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTaintsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTaintsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTaintsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTaintsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -28870,15 +47018,40 @@ func (m *UpdateNodeTaintsRequest) Validate() error { } if len(m.GetClusterID()) < 1 { - return UpdateNodeTaintsRequestValidationError{ + err := UpdateNodeTaintsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeTaintsRequestMultiError(errors) } return nil } +// UpdateNodeTaintsRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTaintsRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeTaintsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTaintsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTaintsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeTaintsRequestValidationError is the validation error returned by // UpdateNodeTaintsRequest.Validate if the designated constraints aren't met. type UpdateNodeTaintsRequestValidationError struct { @@ -28937,19 +47110,52 @@ var _ interface { // Validate checks the field values on UpdateNodeTaintsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTaintsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTaintsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateNodeTaintsResponseMultiError, or nil if none found. +func (m *UpdateNodeTaintsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTaintsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTaintsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTaintsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTaintsResponseValidationError{ field: "Data", @@ -28959,9 +47165,30 @@ func (m *UpdateNodeTaintsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTaintsResponseMultiError(errors) + } + return nil } +// UpdateNodeTaintsResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTaintsResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeTaintsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTaintsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateNodeTaintsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeTaintsResponseValidationError is the validation error returned by // UpdateNodeTaintsResponse.Validate if the designated constraints aren't met. type UpdateNodeTaintsResponseValidationError struct { @@ -29019,16 +47246,51 @@ var _ interface { } = UpdateNodeTaintsResponseValidationError{} // Validate checks the field values on HealthRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HealthRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HealthRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HealthRequestMultiError, or +// nil if none found. +func (m *HealthRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *HealthRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return HealthRequestMultiError(errors) + } + return nil } +// HealthRequestMultiError is an error wrapping multiple validation errors +// returned by HealthRequest.ValidateAll() if the designated constraints +// aren't met. +type HealthRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HealthRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HealthRequestMultiError) AllErrors() []error { return m } + // HealthRequestValidationError is the validation error returned by // HealthRequest.Validate if the designated constraints aren't met. type HealthRequestValidationError struct { @@ -29084,22 +47346,57 @@ var _ interface { } = HealthRequestValidationError{} // Validate checks the field values on HealthResponse with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HealthResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HealthResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HealthResponseMultiError, +// or nil if none found. +func (m *HealthResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *HealthResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Available + if len(errors) > 0 { + return HealthResponseMultiError(errors) + } + return nil } +// HealthResponseMultiError is an error wrapping multiple validation errors +// returned by HealthResponse.ValidateAll() if the designated constraints +// aren't met. +type HealthResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HealthResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HealthResponseMultiError) AllErrors() []error { return m } + // HealthResponseValidationError is the validation error returned by // HealthResponse.Validate if the designated constraints aren't met. type HealthResponseValidationError struct { @@ -29156,17 +47453,52 @@ var _ interface { // Validate checks the field values on ListResourceSchemaRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListResourceSchemaRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListResourceSchemaRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListResourceSchemaRequestMultiError, or nil if none found. +func (m *ListResourceSchemaRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListResourceSchemaRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID + if len(errors) > 0 { + return ListResourceSchemaRequestMultiError(errors) + } + return nil } +// ListResourceSchemaRequestMultiError is an error wrapping multiple validation +// errors returned by ListResourceSchemaRequest.ValidateAll() if the +// designated constraints aren't met. +type ListResourceSchemaRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListResourceSchemaRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListResourceSchemaRequestMultiError) AllErrors() []error { return m } + // ListResourceSchemaRequestValidationError is the validation error returned by // ListResourceSchemaRequest.Validate if the designated constraints aren't met. type ListResourceSchemaRequestValidationError struct { @@ -29225,19 +47557,54 @@ var _ interface { // Validate checks the field values on GetResourceSchemaRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetResourceSchemaRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetResourceSchemaRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetResourceSchemaRequestMultiError, or nil if none found. +func (m *GetResourceSchemaRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetResourceSchemaRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Name + if len(errors) > 0 { + return GetResourceSchemaRequestMultiError(errors) + } + return nil } +// GetResourceSchemaRequestMultiError is an error wrapping multiple validation +// errors returned by GetResourceSchemaRequest.ValidateAll() if the designated +// constraints aren't met. +type GetResourceSchemaRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetResourceSchemaRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetResourceSchemaRequestMultiError) AllErrors() []error { return m } + // GetResourceSchemaRequestValidationError is the validation error returned by // GetResourceSchemaRequest.Validate if the designated constraints aren't met. type GetResourceSchemaRequestValidationError struct { @@ -29296,12 +47663,26 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDReqData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDReqData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDReqData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// QueryPermByActionIDReqDataMultiError, or nil if none found. +func (m *QueryPermByActionIDReqData) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDReqData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectId // no validation rules for ClusterId @@ -29313,15 +47694,40 @@ func (m *QueryPermByActionIDReqData) Validate() error { // no validation rules for AccountId if utf8.RuneCountInString(m.GetOperator()) < 1 { - return QueryPermByActionIDReqDataValidationError{ + err := QueryPermByActionIDReqDataValidationError{ field: "Operator", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return QueryPermByActionIDReqDataMultiError(errors) } return nil } +// QueryPermByActionIDReqDataMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDReqData.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDReqDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDReqDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m QueryPermByActionIDReqDataMultiError) AllErrors() []error { return m } + // QueryPermByActionIDReqDataValidationError is the validation error returned // by QueryPermByActionIDReqData.Validate if the designated constraints aren't met. type QueryPermByActionIDReqDataValidationError struct { @@ -29380,15 +47786,48 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// QueryPermByActionIDRequestMultiError, or nil if none found. +func (m *QueryPermByActionIDRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ActionID - if v, ok := interface{}(m.GetPermCtx()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetPermCtx()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, QueryPermByActionIDRequestValidationError{ + field: "PermCtx", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, QueryPermByActionIDRequestValidationError{ + field: "PermCtx", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetPermCtx()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return QueryPermByActionIDRequestValidationError{ field: "PermCtx", @@ -29398,9 +47837,30 @@ func (m *QueryPermByActionIDRequest) Validate() error { } } + if len(errors) > 0 { + return QueryPermByActionIDRequestMultiError(errors) + } + return nil } +// QueryPermByActionIDRequestMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDRequest.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m QueryPermByActionIDRequestMultiError) AllErrors() []error { return m } + // QueryPermByActionIDRequestValidationError is the validation error returned // by QueryPermByActionIDRequest.Validate if the designated constraints aren't met. type QueryPermByActionIDRequestValidationError struct { @@ -29458,32 +47918,95 @@ var _ interface { } = QueryPermByActionIDRequestValidationError{} // Validate checks the field values on Perms with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *Perms) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Perms with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in PermsMultiError, or nil if none found. +func (m *Perms) ValidateAll() error { + return m.validate(true) +} + +func (m *Perms) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPerms() { - _ = val + var errors []error - // no validation rules for Perms[key] + { + sorted_keys := make([]string, len(m.GetPerms())) + i := 0 + for key := range m.GetPerms() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPerms()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PermsValidationError{ - field: fmt.Sprintf("Perms[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Perms[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return PermsMultiError(errors) } return nil } +// PermsMultiError is an error wrapping multiple validation errors returned by +// Perms.ValidateAll() if the designated constraints aren't met. +type PermsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m PermsMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m PermsMultiError) AllErrors() []error { return m } + // PermsValidationError is the validation error returned by Perms.Validate if // the designated constraints aren't met. type PermsValidationError struct { @@ -29540,15 +48063,48 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// QueryPermByActionIDResponseMultiError, or nil if none found. +func (m *QueryPermByActionIDResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, QueryPermByActionIDResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, QueryPermByActionIDResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return QueryPermByActionIDResponseValidationError{ field: "Data", @@ -29558,9 +48114,30 @@ func (m *QueryPermByActionIDResponse) Validate() error { } } + if len(errors) > 0 { + return QueryPermByActionIDResponseMultiError(errors) + } + return nil } +// QueryPermByActionIDResponseMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDResponse.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m QueryPermByActionIDResponseMultiError) AllErrors() []error { return m } + // QueryPermByActionIDResponseValidationError is the validation error returned // by QueryPermByActionIDResponse.Validate if the designated constraints // aren't met. @@ -29619,19 +48196,53 @@ var _ interface { } = QueryPermByActionIDResponseValidationError{} // Validate checks the field values on CommonResp with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CommonResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CommonResp with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CommonRespMultiError, or +// nil if none found. +func (m *CommonResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CommonResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommonRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommonRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CommonRespValidationError{ field: "Data", @@ -29641,9 +48252,29 @@ func (m *CommonResp) Validate() error { } } + if len(errors) > 0 { + return CommonRespMultiError(errors) + } + return nil } +// CommonRespMultiError is an error wrapping multiple validation errors +// returned by CommonResp.ValidateAll() if the designated constraints aren't met. +type CommonRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommonRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CommonRespMultiError) AllErrors() []error { return m } + // CommonRespValidationError is the validation error returned by // CommonResp.Validate if the designated constraints aren't met. type CommonRespValidationError struct { @@ -29699,20 +48330,53 @@ var _ interface { } = CommonRespValidationError{} // Validate checks the field values on CommonListResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *CommonListResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CommonListResp with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in CommonListRespMultiError, +// or nil if none found. +func (m *CommonListResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CommonListResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommonListRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommonListRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CommonListRespValidationError{ field: "Data", @@ -29722,9 +48386,30 @@ func (m *CommonListResp) Validate() error { } } + if len(errors) > 0 { + return CommonListRespMultiError(errors) + } + return nil } +// CommonListRespMultiError is an error wrapping multiple validation errors +// returned by CommonListResp.ValidateAll() if the designated constraints +// aren't met. +type CommonListRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommonListRespMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CommonListRespMultiError) AllErrors() []error { return m } + // CommonListRespValidationError is the validation error returned by // CommonListResp.Validate if the designated constraints aren't met. type CommonListRespValidationError struct { @@ -29781,15 +48466,50 @@ var _ interface { // Validate checks the field values on ListBKCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListBKCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListBKCloudRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListBKCloudRequestMultiError, or nil if none found. +func (m *ListBKCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListBKCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ListBKCloudRequestMultiError(errors) + } + return nil } +// ListBKCloudRequestMultiError is an error wrapping multiple validation errors +// returned by ListBKCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type ListBKCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListBKCloudRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListBKCloudRequestMultiError) AllErrors() []error { return m } + // ListBKCloudRequestValidationError is the validation error returned by // ListBKCloudRequest.Validate if the designated constraints aren't met. type ListBKCloudRequestValidationError struct { @@ -29848,36 +48568,81 @@ var _ interface { // Validate checks the field values on ListCCTopologyRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCCTopologyRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCCTopologyRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCCTopologyRequestMultiError, or nil if none found. +func (m *ListCCTopologyRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCCTopologyRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return ListCCTopologyRequestValidationError{ + err := ListCCTopologyRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return ListCCTopologyRequestValidationError{ + err := ListCCTopologyRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_ListCCTopologyRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return ListCCTopologyRequestValidationError{ + err := ListCCTopologyRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for BizID - if v, ok := interface{}(m.GetFilterInter()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetFilterInter()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCCTopologyRequestValidationError{ + field: "FilterInter", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCCTopologyRequestValidationError{ + field: "FilterInter", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFilterInter()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCCTopologyRequestValidationError{ field: "FilterInter", @@ -29887,9 +48652,30 @@ func (m *ListCCTopologyRequest) Validate() error { } } + if len(errors) > 0 { + return ListCCTopologyRequestMultiError(errors) + } + return nil } +// ListCCTopologyRequestMultiError is an error wrapping multiple validation +// errors returned by ListCCTopologyRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCCTopologyRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCCTopologyRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCCTopologyRequestMultiError) AllErrors() []error { return m } + // ListCCTopologyRequestValidationError is the validation error returned by // ListCCTopologyRequest.Validate if the designated constraints aren't met. type ListCCTopologyRequestValidationError struct { @@ -29950,33 +48736,76 @@ var _ListCCTopologyRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on GetBkSopsTemplateListRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateListRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateListRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateListRequestMultiError, or nil if none found. +func (m *GetBkSopsTemplateListRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateListRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BusinessID // no validation rules for Operator if _, ok := _GetBkSopsTemplateListRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return GetBkSopsTemplateListRequestValidationError{ + err := GetBkSopsTemplateListRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetBkSopsTemplateListRequest_Scope_InLookup[m.GetScope()]; !ok { - return GetBkSopsTemplateListRequestValidationError{ + err := GetBkSopsTemplateListRequestValidationError{ field: "Scope", reason: "value must be in list [cmdb_biz project ]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetBkSopsTemplateListRequestMultiError(errors) } return nil } +// GetBkSopsTemplateListRequestMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateListRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBkSopsTemplateListRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateListRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateListRequestMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateListRequestValidationError is the validation error returned // by GetBkSopsTemplateListRequest.Validate if the designated constraints // aren't met. @@ -30048,12 +48877,26 @@ var _GetBkSopsTemplateListRequest_Scope_InLookup = map[string]struct{}{ // Validate checks the field values on GetBkSopsTemplateListResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateListResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateListResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateListResponseMultiError, or nil if none found. +func (m *GetBkSopsTemplateListResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateListResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -30061,7 +48904,26 @@ func (m *GetBkSopsTemplateListResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBkSopsTemplateListResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBkSopsTemplateListResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBkSopsTemplateListResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -30073,9 +48935,30 @@ func (m *GetBkSopsTemplateListResponse) Validate() error { } + if len(errors) > 0 { + return GetBkSopsTemplateListResponseMultiError(errors) + } + return nil } +// GetBkSopsTemplateListResponseMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateListResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBkSopsTemplateListResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateListResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateListResponseMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateListResponseValidationError is the validation error // returned by GetBkSopsTemplateListResponse.Validate if the designated // constraints aren't met. @@ -30134,13 +49017,27 @@ var _ interface { } = GetBkSopsTemplateListResponseValidationError{} // Validate checks the field values on TemplateInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TemplateInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TemplateInfoMultiError, or +// nil if none found. +func (m *TemplateInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TemplateName // no validation rules for TemplateID @@ -30155,9 +49052,29 @@ func (m *TemplateInfo) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return TemplateInfoMultiError(errors) + } + return nil } +// TemplateInfoMultiError is an error wrapping multiple validation errors +// returned by TemplateInfo.ValidateAll() if the designated constraints aren't met. +type TemplateInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TemplateInfoMultiError) AllErrors() []error { return m } + // TemplateInfoValidationError is the validation error returned by // TemplateInfo.Validate if the designated constraints aren't met. type TemplateInfoValidationError struct { @@ -30214,12 +49131,26 @@ var _ interface { // Validate checks the field values on GetBkSopsTemplateInfoRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateInfoRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateInfoRequestMultiError, or nil if none found. +func (m *GetBkSopsTemplateInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BusinessID // no validation rules for TemplateID @@ -30227,22 +49158,51 @@ func (m *GetBkSopsTemplateInfoRequest) Validate() error { // no validation rules for Operator if _, ok := _GetBkSopsTemplateInfoRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return GetBkSopsTemplateInfoRequestValidationError{ + err := GetBkSopsTemplateInfoRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetBkSopsTemplateInfoRequest_Scope_InLookup[m.GetScope()]; !ok { - return GetBkSopsTemplateInfoRequestValidationError{ + err := GetBkSopsTemplateInfoRequestValidationError{ field: "Scope", reason: "value must be in list [cmdb_biz project ]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetBkSopsTemplateInfoRequestMultiError(errors) } return nil } +// GetBkSopsTemplateInfoRequestMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateInfoRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBkSopsTemplateInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateInfoRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateInfoRequestMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateInfoRequestValidationError is the validation error returned // by GetBkSopsTemplateInfoRequest.Validate if the designated constraints // aren't met. @@ -30314,17 +49274,50 @@ var _GetBkSopsTemplateInfoRequest_Scope_InLookup = map[string]struct{}{ // Validate checks the field values on GetBkSopsTemplateInfoResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateInfoResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateInfoResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetBkSopsTemplateInfoResponseMultiError, or nil if none found. +func (m *GetBkSopsTemplateInfoResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateInfoResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBkSopsTemplateInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBkSopsTemplateInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBkSopsTemplateInfoResponseValidationError{ field: "Data", @@ -30334,9 +49327,30 @@ func (m *GetBkSopsTemplateInfoResponse) Validate() error { } } + if len(errors) > 0 { + return GetBkSopsTemplateInfoResponseMultiError(errors) + } + return nil } +// GetBkSopsTemplateInfoResponseMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateInfoResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBkSopsTemplateInfoResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateInfoResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBkSopsTemplateInfoResponseMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateInfoResponseValidationError is the validation error // returned by GetBkSopsTemplateInfoResponse.Validate if the designated // constraints aren't met. @@ -30396,18 +49410,51 @@ var _ interface { // Validate checks the field values on TemplateDetailInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *TemplateDetailInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateDetailInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// TemplateDetailInfoMultiError, or nil if none found. +func (m *TemplateDetailInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateDetailInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TemplateUrl for idx, item := range m.GetValues() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TemplateDetailInfoValidationError{ + field: fmt.Sprintf("Values[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TemplateDetailInfoValidationError{ + field: fmt.Sprintf("Values[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return TemplateDetailInfoValidationError{ field: fmt.Sprintf("Values[%v]", idx), @@ -30419,9 +49466,30 @@ func (m *TemplateDetailInfo) Validate() error { } + if len(errors) > 0 { + return TemplateDetailInfoMultiError(errors) + } + return nil } +// TemplateDetailInfoMultiError is an error wrapping multiple validation errors +// returned by TemplateDetailInfo.ValidateAll() if the designated constraints +// aren't met. +type TemplateDetailInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateDetailInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TemplateDetailInfoMultiError) AllErrors() []error { return m } + // TemplateDetailInfoValidationError is the validation error returned by // TemplateDetailInfo.Validate if the designated constraints aren't met. type TemplateDetailInfoValidationError struct { @@ -30479,13 +49547,27 @@ var _ interface { } = TemplateDetailInfoValidationError{} // Validate checks the field values on ConstantValue with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ConstantValue) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ConstantValue with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ConstantValueMultiError, or +// nil if none found. +func (m *ConstantValue) ValidateAll() error { + return m.validate(true) +} + +func (m *ConstantValue) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Name @@ -30494,9 +49576,30 @@ func (m *ConstantValue) Validate() error { // no validation rules for Desc + if len(errors) > 0 { + return ConstantValueMultiError(errors) + } + return nil } +// ConstantValueMultiError is an error wrapping multiple validation errors +// returned by ConstantValue.ValidateAll() if the designated constraints +// aren't met. +type ConstantValueMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ConstantValueMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ConstantValueMultiError) AllErrors() []error { return m } + // ConstantValueValidationError is the validation error returned by // ConstantValue.Validate if the designated constraints aren't met. type ConstantValueValidationError struct { @@ -30553,19 +49656,54 @@ var _ interface { // Validate checks the field values on GetInnerTemplateValuesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetInnerTemplateValuesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetInnerTemplateValuesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetInnerTemplateValuesRequestMultiError, or nil if none found. +func (m *GetInnerTemplateValuesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetInnerTemplateValuesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for Operator + if len(errors) > 0 { + return GetInnerTemplateValuesRequestMultiError(errors) + } + return nil } +// GetInnerTemplateValuesRequestMultiError is an error wrapping multiple +// validation errors returned by GetInnerTemplateValuesRequest.ValidateAll() +// if the designated constraints aren't met. +type GetInnerTemplateValuesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetInnerTemplateValuesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetInnerTemplateValuesRequestMultiError) AllErrors() []error { return m } + // GetInnerTemplateValuesRequestValidationError is the validation error // returned by GetInnerTemplateValuesRequest.Validate if the designated // constraints aren't met. @@ -30625,12 +49763,26 @@ var _ interface { // Validate checks the field values on GetInnerTemplateValuesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetInnerTemplateValuesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetInnerTemplateValuesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetInnerTemplateValuesResponseMultiError, or nil if none found. +func (m *GetInnerTemplateValuesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetInnerTemplateValuesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -30638,7 +49790,26 @@ func (m *GetInnerTemplateValuesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetInnerTemplateValuesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetInnerTemplateValuesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetInnerTemplateValuesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -30650,9 +49821,30 @@ func (m *GetInnerTemplateValuesResponse) Validate() error { } + if len(errors) > 0 { + return GetInnerTemplateValuesResponseMultiError(errors) + } + return nil } +// GetInnerTemplateValuesResponseMultiError is an error wrapping multiple +// validation errors returned by GetInnerTemplateValuesResponse.ValidateAll() +// if the designated constraints aren't met. +type GetInnerTemplateValuesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetInnerTemplateValuesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetInnerTemplateValuesResponseMultiError) AllErrors() []error { return m } + // GetInnerTemplateValuesResponseValidationError is the validation error // returned by GetInnerTemplateValuesResponse.Validate if the designated // constraints aren't met. @@ -30711,13 +49903,27 @@ var _ interface { } = GetInnerTemplateValuesResponseValidationError{} // Validate checks the field values on TemplateValue with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *TemplateValue) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateValue with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in TemplateValueMultiError, or +// nil if none found. +func (m *TemplateValue) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateValue) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Desc @@ -30728,9 +49934,30 @@ func (m *TemplateValue) Validate() error { // no validation rules for Value + if len(errors) > 0 { + return TemplateValueMultiError(errors) + } + return nil } +// TemplateValueMultiError is an error wrapping multiple validation errors +// returned by TemplateValue.ValidateAll() if the designated constraints +// aren't met. +type TemplateValueMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateValueMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m TemplateValueMultiError) AllErrors() []error { return m } + // TemplateValueValidationError is the validation error returned by // TemplateValue.Validate if the designated constraints aren't met. type TemplateValueValidationError struct { @@ -30787,45 +50014,96 @@ var _ interface { // Validate checks the field values on DebugBkSopsTaskRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DebugBkSopsTaskRequestMultiError, or nil if none found. +func (m *DebugBkSopsTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetBusinessID()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "BusinessID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetTemplateID()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "TemplateID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetOperator()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "Operator", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _DebugBkSopsTaskRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Constant + if len(errors) > 0 { + return DebugBkSopsTaskRequestMultiError(errors) + } + return nil } +// DebugBkSopsTaskRequestMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DebugBkSopsTaskRequestMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskRequestValidationError is the validation error returned by // DebugBkSopsTaskRequest.Validate if the designated constraints aren't met. type DebugBkSopsTaskRequestValidationError struct { @@ -30890,17 +50168,50 @@ var _DebugBkSopsTaskRequest_TemplateSource_InLookup = map[string]struct{}{ // Validate checks the field values on DebugBkSopsTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DebugBkSopsTaskResponseMultiError, or nil if none found. +func (m *DebugBkSopsTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DebugBkSopsTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DebugBkSopsTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DebugBkSopsTaskResponseValidationError{ field: "Data", @@ -30910,9 +50221,30 @@ func (m *DebugBkSopsTaskResponse) Validate() error { } } + if len(errors) > 0 { + return DebugBkSopsTaskResponseMultiError(errors) + } + return nil } +// DebugBkSopsTaskResponseMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskResponse.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DebugBkSopsTaskResponseMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskResponseValidationError is the validation error returned by // DebugBkSopsTaskResponse.Validate if the designated constraints aren't met. type DebugBkSopsTaskResponseValidationError struct { @@ -30971,13 +50303,46 @@ var _ interface { // Validate checks the field values on DebugBkSopsTaskInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DebugBkSopsTaskInfoMultiError, or nil if none found. +func (m *DebugBkSopsTaskInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskInfo) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DebugBkSopsTaskInfoValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DebugBkSopsTaskInfoValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DebugBkSopsTaskInfoValidationError{ field: "Task", @@ -30987,9 +50352,30 @@ func (m *DebugBkSopsTaskInfo) Validate() error { } } + if len(errors) > 0 { + return DebugBkSopsTaskInfoMultiError(errors) + } + return nil } +// DebugBkSopsTaskInfoMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskInfo.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DebugBkSopsTaskInfoMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskInfoValidationError is the validation error returned by // DebugBkSopsTaskInfo.Validate if the designated constraints aren't met. type DebugBkSopsTaskInfoValidationError struct { @@ -31047,13 +50433,27 @@ var _ interface { } = DebugBkSopsTaskInfoValidationError{} // Validate checks the field values on CloudModuleFlag with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *CloudModuleFlag) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudModuleFlag with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CloudModuleFlagMultiError, or nil if none found. +func (m *CloudModuleFlag) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudModuleFlag) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -31078,7 +50478,26 @@ func (m *CloudModuleFlag) Validate() error { // no validation rules for FlagType - if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRegex()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudModuleFlagValidationError{ field: "Regex", @@ -31088,7 +50507,26 @@ func (m *CloudModuleFlag) Validate() error { } } - if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRange()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudModuleFlagValidationError{ field: "Range", @@ -31098,9 +50536,30 @@ func (m *CloudModuleFlag) Validate() error { } } + if len(errors) > 0 { + return CloudModuleFlagMultiError(errors) + } + return nil } +// CloudModuleFlagMultiError is an error wrapping multiple validation errors +// returned by CloudModuleFlag.ValidateAll() if the designated constraints +// aren't met. +type CloudModuleFlagMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudModuleFlagMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CloudModuleFlagMultiError) AllErrors() []error { return m } + // CloudModuleFlagValidationError is the validation error returned by // CloudModuleFlag.Validate if the designated constraints aren't met. type CloudModuleFlagValidationError struct { @@ -31156,19 +50615,53 @@ var _ interface { } = CloudModuleFlagValidationError{} // Validate checks the field values on FlagInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *FlagInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on FlagInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in FlagInfoMultiError, or nil +// if none found. +func (m *FlagInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *FlagInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for FlagName // no validation rules for FlagDesc // no validation rules for DefaultValue - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Enable", @@ -31180,7 +50673,26 @@ func (m *FlagInfo) Validate() error { // no validation rules for FlagType - if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRegex()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Regex", @@ -31190,7 +50702,26 @@ func (m *FlagInfo) Validate() error { } } - if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRange()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Range", @@ -31200,9 +50731,29 @@ func (m *FlagInfo) Validate() error { } } + if len(errors) > 0 { + return FlagInfoMultiError(errors) + } + return nil } +// FlagInfoMultiError is an error wrapping multiple validation errors returned +// by FlagInfo.ValidateAll() if the designated constraints aren't met. +type FlagInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m FlagInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m FlagInfoMultiError) AllErrors() []error { return m } + // FlagInfoValidationError is the validation error returned by // FlagInfo.Validate if the designated constraints aren't met. type FlagInfoValidationError struct { @@ -31258,19 +50809,54 @@ var _ interface { } = FlagInfoValidationError{} // Validate checks the field values on ValueRegex with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ValueRegex) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ValueRegex with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ValueRegexMultiError, or +// nil if none found. +func (m *ValueRegex) ValidateAll() error { + return m.validate(true) +} + +func (m *ValueRegex) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Validator // no validation rules for Message + if len(errors) > 0 { + return ValueRegexMultiError(errors) + } + return nil } +// ValueRegexMultiError is an error wrapping multiple validation errors +// returned by ValueRegex.ValidateAll() if the designated constraints aren't met. +type ValueRegexMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ValueRegexMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ValueRegexMultiError) AllErrors() []error { return m } + // ValueRegexValidationError is the validation error returned by // ValueRegex.Validate if the designated constraints aren't met. type ValueRegexValidationError struct { @@ -31326,20 +50912,54 @@ var _ interface { } = ValueRegexValidationError{} // Validate checks the field values on NumberRange with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NumberRange) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NumberRange with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NumberRangeMultiError, or +// nil if none found. +func (m *NumberRange) ValidateAll() error { + return m.validate(true) +} + +func (m *NumberRange) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Min // no validation rules for Max + if len(errors) > 0 { + return NumberRangeMultiError(errors) + } + return nil } +// NumberRangeMultiError is an error wrapping multiple validation errors +// returned by NumberRange.ValidateAll() if the designated constraints aren't met. +type NumberRangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NumberRangeMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NumberRangeMultiError) AllErrors() []error { return m } + // NumberRangeValidationError is the validation error returned by // NumberRange.Validate if the designated constraints aren't met. type NumberRangeValidationError struct { @@ -31396,34 +51016,75 @@ var _ interface { // Validate checks the field values on CreateCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// CreateCloudModuleFlagRequestMultiError, or nil if none found. +func (m *CreateCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version if utf8.RuneCountInString(m.GetModuleID()) < 1 { - return CreateCloudModuleFlagRequestValidationError{ + err := CreateCloudModuleFlagRequestValidationError{ field: "ModuleID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetFlagList()) < 1 { - return CreateCloudModuleFlagRequestValidationError{ + err := CreateCloudModuleFlagRequestValidationError{ field: "FlagList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetFlagList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudModuleFlagRequestValidationError{ field: fmt.Sprintf("FlagList[%v]", idx), @@ -31437,9 +51098,30 @@ func (m *CreateCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return CreateCloudModuleFlagRequestMultiError(errors) + } + return nil } +// CreateCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by CreateCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type CreateCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // CreateCloudModuleFlagRequestValidationError is the validation error returned // by CreateCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -31499,19 +51181,54 @@ var _ interface { // Validate checks the field values on CreateCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudModuleFlagResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// CreateCloudModuleFlagResponseMultiError, or nil if none found. +func (m *CreateCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return CreateCloudModuleFlagResponseMultiError(errors) + } + return nil } +// CreateCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by CreateCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type CreateCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m CreateCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // CreateCloudModuleFlagResponseValidationError is the validation error // returned by CreateCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -31571,12 +51288,26 @@ var _ interface { // Validate checks the field values on UpdateCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// UpdateCloudModuleFlagRequestMultiError, or nil if none found. +func (m *UpdateCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -31584,16 +51315,39 @@ func (m *UpdateCloudModuleFlagRequest) Validate() error { // no validation rules for ModuleID if len(m.GetFlagList()) < 1 { - return UpdateCloudModuleFlagRequestValidationError{ + err := UpdateCloudModuleFlagRequestValidationError{ field: "FlagList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetFlagList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudModuleFlagRequestValidationError{ field: fmt.Sprintf("FlagList[%v]", idx), @@ -31607,9 +51361,30 @@ func (m *UpdateCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return UpdateCloudModuleFlagRequestMultiError(errors) + } + return nil } +// UpdateCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // UpdateCloudModuleFlagRequestValidationError is the validation error returned // by UpdateCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -31669,19 +51444,54 @@ var _ interface { // Validate checks the field values on UpdateCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudModuleFlagResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// UpdateCloudModuleFlagResponseMultiError, or nil if none found. +func (m *UpdateCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return UpdateCloudModuleFlagResponseMultiError(errors) + } + return nil } +// UpdateCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m UpdateCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // UpdateCloudModuleFlagResponseValidationError is the validation error // returned by UpdateCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -31741,12 +51551,26 @@ var _ interface { // Validate checks the field values on DeleteCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeleteCloudModuleFlagRequestMultiError, or nil if none found. +func (m *DeleteCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -31755,9 +51579,30 @@ func (m *DeleteCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return DeleteCloudModuleFlagRequestMultiError(errors) + } + return nil } +// DeleteCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type DeleteCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // DeleteCloudModuleFlagRequestValidationError is the validation error returned // by DeleteCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -31817,19 +51662,54 @@ var _ interface { // Validate checks the field values on DeleteCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudModuleFlagResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// DeleteCloudModuleFlagResponseMultiError, or nil if none found. +func (m *DeleteCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return DeleteCloudModuleFlagResponseMultiError(errors) + } + return nil } +// DeleteCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type DeleteCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeleteCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // DeleteCloudModuleFlagResponseValidationError is the validation error // returned by DeleteCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -31889,12 +51769,26 @@ var _ interface { // Validate checks the field values on ListCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudModuleFlagRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudModuleFlagRequestMultiError, or nil if none found. +func (m *ListCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -31903,9 +51797,30 @@ func (m *ListCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return ListCloudModuleFlagRequestMultiError(errors) + } + return nil } +// ListCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudModuleFlagRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // ListCloudModuleFlagRequestValidationError is the validation error returned // by ListCloudModuleFlagRequest.Validate if the designated constraints aren't met. type ListCloudModuleFlagRequestValidationError struct { @@ -31964,12 +51879,26 @@ var _ interface { // Validate checks the field values on ListCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudModuleFlagResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListCloudModuleFlagResponseMultiError, or nil if none found. +func (m *ListCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -31977,7 +51906,26 @@ func (m *ListCloudModuleFlagResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudModuleFlagResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudModuleFlagResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudModuleFlagResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -31989,9 +51937,30 @@ func (m *ListCloudModuleFlagResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudModuleFlagResponseMultiError(errors) + } + return nil } +// ListCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudModuleFlagResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudModuleFlagResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // ListCloudModuleFlagResponseValidationError is the validation error returned // by ListCloudModuleFlagResponse.Validate if the designated constraints // aren't met. @@ -32051,19 +52020,54 @@ var _ interface { // Validate checks the field values on GetExternalNodeScriptRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetExternalNodeScriptRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetExternalNodeScriptRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetExternalNodeScriptRequestMultiError, or nil if none found. +func (m *GetExternalNodeScriptRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetExternalNodeScriptRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeGroupID // no validation rules for Operator + if len(errors) > 0 { + return GetExternalNodeScriptRequestMultiError(errors) + } + return nil } +// GetExternalNodeScriptRequestMultiError is an error wrapping multiple +// validation errors returned by GetExternalNodeScriptRequest.ValidateAll() if +// the designated constraints aren't met. +type GetExternalNodeScriptRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetExternalNodeScriptRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetExternalNodeScriptRequestMultiError) AllErrors() []error { return m } + // GetExternalNodeScriptRequestValidationError is the validation error returned // by GetExternalNodeScriptRequest.Validate if the designated constraints // aren't met. @@ -32123,12 +52127,26 @@ var _ interface { // Validate checks the field values on GetExternalNodeScriptResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetExternalNodeScriptResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetExternalNodeScriptResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetExternalNodeScriptResponseMultiError, or nil if none found. +func (m *GetExternalNodeScriptResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetExternalNodeScriptResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -32137,7 +52155,26 @@ func (m *GetExternalNodeScriptResponse) Validate() error { // no validation rules for Data - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetExternalNodeScriptResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetExternalNodeScriptResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetExternalNodeScriptResponseValidationError{ field: "WebAnnotations", @@ -32147,9 +52184,30 @@ func (m *GetExternalNodeScriptResponse) Validate() error { } } + if len(errors) > 0 { + return GetExternalNodeScriptResponseMultiError(errors) + } + return nil } +// GetExternalNodeScriptResponseMultiError is an error wrapping multiple +// validation errors returned by GetExternalNodeScriptResponse.ValidateAll() +// if the designated constraints aren't met. +type GetExternalNodeScriptResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetExternalNodeScriptResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetExternalNodeScriptResponseMultiError) AllErrors() []error { return m } + // GetExternalNodeScriptResponseValidationError is the validation error // returned by GetExternalNodeScriptResponse.Validate if the designated // constraints aren't met. @@ -32208,17 +52266,52 @@ var _ interface { } = GetExternalNodeScriptResponseValidationError{} // Validate checks the field values on MapStruct with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *MapStruct) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MapStruct with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in MapStructMultiError, or nil +// if none found. +func (m *MapStruct) ValidateAll() error { + return m.validate(true) +} + +func (m *MapStruct) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Values + if len(errors) > 0 { + return MapStructMultiError(errors) + } + return nil } +// MapStructMultiError is an error wrapping multiple validation errors returned +// by MapStruct.ValidateAll() if the designated constraints aren't met. +type MapStructMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MapStructMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MapStructMultiError) AllErrors() []error { return m } + // MapStructValidationError is the validation error returned by // MapStruct.Validate if the designated constraints aren't met. type MapStructValidationError struct { @@ -32275,19 +52368,54 @@ var _ interface { // Validate checks the field values on GetBatchCustomSettingRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBatchCustomSettingRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBatchCustomSettingRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBatchCustomSettingRequestMultiError, or nil if none found. +func (m *GetBatchCustomSettingRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBatchCustomSettingRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return GetBatchCustomSettingRequestMultiError(errors) + } + return nil } +// GetBatchCustomSettingRequestMultiError is an error wrapping multiple +// validation errors returned by GetBatchCustomSettingRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBatchCustomSettingRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBatchCustomSettingRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBatchCustomSettingRequestMultiError) AllErrors() []error { return m } + // GetBatchCustomSettingRequestValidationError is the validation error returned // by GetBatchCustomSettingRequest.Validate if the designated constraints // aren't met. @@ -32347,12 +52475,26 @@ var _ interface { // Validate checks the field values on GetBatchCustomSettingResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBatchCustomSettingResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBatchCustomSettingResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetBatchCustomSettingResponseMultiError, or nil if none found. +func (m *GetBatchCustomSettingResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBatchCustomSettingResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -32361,7 +52503,26 @@ func (m *GetBatchCustomSettingResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBatchCustomSettingResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBatchCustomSettingResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBatchCustomSettingResponseValidationError{ field: "Data", @@ -32371,9 +52532,30 @@ func (m *GetBatchCustomSettingResponse) Validate() error { } } + if len(errors) > 0 { + return GetBatchCustomSettingResponseMultiError(errors) + } + return nil } +// GetBatchCustomSettingResponseMultiError is an error wrapping multiple +// validation errors returned by GetBatchCustomSettingResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBatchCustomSettingResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBatchCustomSettingResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBatchCustomSettingResponseMultiError) AllErrors() []error { return m } + // GetBatchCustomSettingResponseValidationError is the validation error // returned by GetBatchCustomSettingResponse.Validate if the designated // constraints aren't met. @@ -32432,19 +52614,54 @@ var _ interface { } = GetBatchCustomSettingResponseValidationError{} // Validate checks the field values on ScopeInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *ScopeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ScopeInfo with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ScopeInfoMultiError, or nil +// if none found. +func (m *ScopeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ScopeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return ScopeInfoMultiError(errors) + } + return nil } +// ScopeInfoMultiError is an error wrapping multiple validation errors returned +// by ScopeInfo.ValidateAll() if the designated constraints aren't met. +type ScopeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ScopeInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ScopeInfoMultiError) AllErrors() []error { return m } + // ScopeInfoValidationError is the validation error returned by // ScopeInfo.Validate if the designated constraints aren't met. type ScopeInfoValidationError struct { @@ -32501,12 +52718,26 @@ var _ interface { // Validate checks the field values on GetBizTopologyHostRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBizTopologyHostRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBizTopologyHostRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBizTopologyHostRequestMultiError, or nil if none found. +func (m *GetBizTopologyHostRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBizTopologyHostRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId @@ -32516,7 +52747,26 @@ func (m *GetBizTopologyHostRequest) Validate() error { for idx, item := range m.GetScopeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBizTopologyHostRequestValidationError{ + field: fmt.Sprintf("ScopeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBizTopologyHostRequestValidationError{ + field: fmt.Sprintf("ScopeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBizTopologyHostRequestValidationError{ field: fmt.Sprintf("ScopeList[%v]", idx), @@ -32528,9 +52778,30 @@ func (m *GetBizTopologyHostRequest) Validate() error { } + if len(errors) > 0 { + return GetBizTopologyHostRequestMultiError(errors) + } + return nil } +// GetBizTopologyHostRequestMultiError is an error wrapping multiple validation +// errors returned by GetBizTopologyHostRequest.ValidateAll() if the +// designated constraints aren't met. +type GetBizTopologyHostRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBizTopologyHostRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBizTopologyHostRequestMultiError) AllErrors() []error { return m } + // GetBizTopologyHostRequestValidationError is the validation error returned by // GetBizTopologyHostRequest.Validate if the designated constraints aren't met. type GetBizTopologyHostRequestValidationError struct { @@ -32589,12 +52860,26 @@ var _ interface { // Validate checks the field values on GetBizTopologyHostResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBizTopologyHostResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBizTopologyHostResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetBizTopologyHostResponseMultiError, or nil if none found. +func (m *GetBizTopologyHostResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBizTopologyHostResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -32603,7 +52888,26 @@ func (m *GetBizTopologyHostResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBizTopologyHostResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBizTopologyHostResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBizTopologyHostResponseValidationError{ field: "Data", @@ -32613,9 +52917,30 @@ func (m *GetBizTopologyHostResponse) Validate() error { } } + if len(errors) > 0 { + return GetBizTopologyHostResponseMultiError(errors) + } + return nil } +// GetBizTopologyHostResponseMultiError is an error wrapping multiple +// validation errors returned by GetBizTopologyHostResponse.ValidateAll() if +// the designated constraints aren't met. +type GetBizTopologyHostResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBizTopologyHostResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetBizTopologyHostResponseMultiError) AllErrors() []error { return m } + // GetBizTopologyHostResponseValidationError is the validation error returned // by GetBizTopologyHostResponse.Validate if the designated constraints aren't met. type GetBizTopologyHostResponseValidationError struct { @@ -32673,19 +52998,54 @@ var _ interface { } = GetBizTopologyHostResponseValidationError{} // Validate checks the field values on NodeData with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *NodeData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeData with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in NodeDataMultiError, or nil +// if none found. +func (m *NodeData) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ObjectId // no validation rules for InstanceId + if len(errors) > 0 { + return NodeDataMultiError(errors) + } + return nil } +// NodeDataMultiError is an error wrapping multiple validation errors returned +// by NodeData.ValidateAll() if the designated constraints aren't met. +type NodeDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m NodeDataMultiError) AllErrors() []error { return m } + // NodeDataValidationError is the validation error returned by // NodeData.Validate if the designated constraints aren't met. type NodeDataValidationError struct { @@ -32742,27 +53102,64 @@ var _ interface { // Validate checks the field values on GetTopologyNodesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyNodesRequestMultiError, or nil if none found. +func (m *GetTopologyNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId if len(m.GetNodeList()) < 1 { - return GetTopologyNodesRequestValidationError{ + err := GetTopologyNodesRequestValidationError{ field: "NodeList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesRequestValidationError{ field: fmt.Sprintf("NodeList[%v]", idx), @@ -32776,7 +53173,26 @@ func (m *GetTopologyNodesRequest) Validate() error { // no validation rules for SearchContent - if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAlive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesRequestValidationError{ field: "Alive", @@ -32790,9 +53206,30 @@ func (m *GetTopologyNodesRequest) Validate() error { // no validation rules for PageSize + if len(errors) > 0 { + return GetTopologyNodesRequestMultiError(errors) + } + return nil } +// GetTopologyNodesRequestMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyNodesRequestMultiError) AllErrors() []error { return m } + // GetTopologyNodesRequestValidationError is the validation error returned by // GetTopologyNodesRequest.Validate if the designated constraints aren't met. type GetTopologyNodesRequestValidationError struct { @@ -32851,12 +53288,26 @@ var _ interface { // Validate checks the field values on GetTopologyNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyNodesResponseMultiError, or nil if none found. +func (m *GetTopologyNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -32865,7 +53316,26 @@ func (m *GetTopologyNodesResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesResponseValidationError{ field: "Data", @@ -32875,9 +53345,30 @@ func (m *GetTopologyNodesResponse) Validate() error { } } + if len(errors) > 0 { + return GetTopologyNodesResponseMultiError(errors) + } + return nil } +// GetTopologyNodesResponseMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyNodesResponseMultiError) AllErrors() []error { return m } + // GetTopologyNodesResponseValidationError is the validation error returned by // GetTopologyNodesResponse.Validate if the designated constraints aren't met. type GetTopologyNodesResponseValidationError struct { @@ -32936,12 +53427,26 @@ var _ interface { // Validate checks the field values on GetTopologyNodesData with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesData with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyNodesDataMultiError, or nil if none found. +func (m *GetTopologyNodesData) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Start // no validation rules for PageSize @@ -32951,7 +53456,26 @@ func (m *GetTopologyNodesData) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesDataValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -32963,9 +53487,30 @@ func (m *GetTopologyNodesData) Validate() error { } + if len(errors) > 0 { + return GetTopologyNodesDataMultiError(errors) + } + return nil } +// GetTopologyNodesDataMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesData.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyNodesDataMultiError) AllErrors() []error { return m } + // GetTopologyNodesDataValidationError is the validation error returned by // GetTopologyNodesData.Validate if the designated constraints aren't met. type GetTopologyNodesDataValidationError struct { @@ -33023,12 +53568,27 @@ var _ interface { } = GetTopologyNodesDataValidationError{} // Validate checks the field values on HostData with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HostData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostData with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HostDataMultiError, or nil +// if none found. +func (m *HostData) ValidateAll() error { + return m.validate(true) +} + +func (m *HostData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId // no validation rules for Ip @@ -33041,7 +53601,26 @@ func (m *HostData) Validate() error { // no validation rules for OsName - if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataValidationError{ field: "CloudArea", @@ -33051,9 +53630,29 @@ func (m *HostData) Validate() error { } } + if len(errors) > 0 { + return HostDataMultiError(errors) + } + return nil } +// HostDataMultiError is an error wrapping multiple validation errors returned +// by HostData.ValidateAll() if the designated constraints aren't met. +type HostDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostDataMultiError) AllErrors() []error { return m } + // HostDataValidationError is the validation error returned by // HostData.Validate if the designated constraints aren't met. type HostDataValidationError struct { @@ -33109,20 +53708,55 @@ var _ interface { } = HostDataValidationError{} // Validate checks the field values on HostCloudArea with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. func (m *HostCloudArea) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostCloudArea with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in HostCloudAreaMultiError, or +// nil if none found. +func (m *HostCloudArea) ValidateAll() error { + return m.validate(true) +} + +func (m *HostCloudArea) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Id // no validation rules for Name + if len(errors) > 0 { + return HostCloudAreaMultiError(errors) + } + return nil } +// HostCloudAreaMultiError is an error wrapping multiple validation errors +// returned by HostCloudArea.ValidateAll() if the designated constraints +// aren't met. +type HostCloudAreaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostCloudAreaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostCloudAreaMultiError) AllErrors() []error { return m } + // HostCloudAreaValidationError is the validation error returned by // HostCloudArea.Validate if the designated constraints aren't met. type HostCloudAreaValidationError struct { @@ -33179,27 +53813,64 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetTopologyHostIdsNodesRequestMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId if len(m.GetNodeList()) < 1 { - return GetTopologyHostIdsNodesRequestValidationError{ + err := GetTopologyHostIdsNodesRequestValidationError{ field: "NodeList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesRequestValidationError{ field: fmt.Sprintf("NodeList[%v]", idx), @@ -33213,7 +53884,26 @@ func (m *GetTopologyHostIdsNodesRequest) Validate() error { // no validation rules for SearchContent - if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAlive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesRequestValidationError{ field: "Alive", @@ -33227,9 +53917,30 @@ func (m *GetTopologyHostIdsNodesRequest) Validate() error { // no validation rules for PageSize + if len(errors) > 0 { + return GetTopologyHostIdsNodesRequestMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesRequestMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesRequest.ValidateAll() +// if the designated constraints aren't met. +type GetTopologyHostIdsNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyHostIdsNodesRequestMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesRequestValidationError is the validation error // returned by GetTopologyHostIdsNodesRequest.Validate if the designated // constraints aren't met. @@ -33289,12 +54000,26 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// GetTopologyHostIdsNodesResponseMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -33303,7 +54028,26 @@ func (m *GetTopologyHostIdsNodesResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesResponseValidationError{ field: "Data", @@ -33313,9 +54057,30 @@ func (m *GetTopologyHostIdsNodesResponse) Validate() error { } } + if len(errors) > 0 { + return GetTopologyHostIdsNodesResponseMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesResponseMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesResponse.ValidateAll() +// if the designated constraints aren't met. +type GetTopologyHostIdsNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyHostIdsNodesResponseMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesResponseValidationError is the validation error // returned by GetTopologyHostIdsNodesResponse.Validate if the designated // constraints aren't met. @@ -33375,12 +54140,26 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesData with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetTopologyHostIdsNodesDataMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesData) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Start // no validation rules for PageSize @@ -33390,7 +54169,26 @@ func (m *GetTopologyHostIdsNodesData) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesDataValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -33402,9 +54200,30 @@ func (m *GetTopologyHostIdsNodesData) Validate() error { } + if len(errors) > 0 { + return GetTopologyHostIdsNodesDataMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesDataMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesData.ValidateAll() if +// the designated constraints aren't met. +type GetTopologyHostIdsNodesDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetTopologyHostIdsNodesDataMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesDataValidationError is the validation error returned // by GetTopologyHostIdsNodesData.Validate if the designated constraints // aren't met. @@ -33463,16 +54282,49 @@ var _ interface { } = GetTopologyHostIdsNodesDataValidationError{} // Validate checks the field values on HostIDsNodeData with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *HostIDsNodeData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostIDsNodeData with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// HostIDsNodeDataMultiError, or nil if none found. +func (m *HostIDsNodeData) ValidateAll() error { + return m.validate(true) +} + +func (m *HostIDsNodeData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId - if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostIDsNodeDataValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostIDsNodeDataValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostIDsNodeDataValidationError{ field: "Meta", @@ -33482,9 +54334,30 @@ func (m *HostIDsNodeData) Validate() error { } } + if len(errors) > 0 { + return HostIDsNodeDataMultiError(errors) + } + return nil } +// HostIDsNodeDataMultiError is an error wrapping multiple validation errors +// returned by HostIDsNodeData.ValidateAll() if the designated constraints +// aren't met. +type HostIDsNodeDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostIDsNodeDataMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostIDsNodeDataMultiError) AllErrors() []error { return m } + // HostIDsNodeDataValidationError is the validation error returned by // HostIDsNodeData.Validate if the designated constraints aren't met. type HostIDsNodeDataValidationError struct { @@ -33540,21 +54413,55 @@ var _ interface { } = HostIDsNodeDataValidationError{} // Validate checks the field values on Meta with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Meta) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Meta with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in MetaMultiError, or nil if none found. +func (m *Meta) ValidateAll() error { + return m.validate(true) +} + +func (m *Meta) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId // no validation rules for BkBizId + if len(errors) > 0 { + return MetaMultiError(errors) + } + return nil } +// MetaMultiError is an error wrapping multiple validation errors returned by +// Meta.ValidateAll() if the designated constraints aren't met. +type MetaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MetaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MetaMultiError) AllErrors() []error { return m } + // MetaValidationError is the validation error returned by Meta.Validate if the // designated constraints aren't met. type MetaValidationError struct { @@ -33611,12 +54518,26 @@ var _ interface { // Validate checks the field values on GetHostsDetailsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetHostsDetailsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetHostsDetailsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetHostsDetailsRequestMultiError, or nil if none found. +func (m *GetHostsDetailsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetHostsDetailsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId @@ -33624,7 +54545,26 @@ func (m *GetHostsDetailsRequest) Validate() error { for idx, item := range m.GetHostList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetHostsDetailsRequestValidationError{ + field: fmt.Sprintf("HostList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetHostsDetailsRequestValidationError{ + field: fmt.Sprintf("HostList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetHostsDetailsRequestValidationError{ field: fmt.Sprintf("HostList[%v]", idx), @@ -33636,9 +54576,30 @@ func (m *GetHostsDetailsRequest) Validate() error { } + if len(errors) > 0 { + return GetHostsDetailsRequestMultiError(errors) + } + return nil } +// GetHostsDetailsRequestMultiError is an error wrapping multiple validation +// errors returned by GetHostsDetailsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetHostsDetailsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetHostsDetailsRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetHostsDetailsRequestMultiError) AllErrors() []error { return m } + // GetHostsDetailsRequestValidationError is the validation error returned by // GetHostsDetailsRequest.Validate if the designated constraints aren't met. type GetHostsDetailsRequestValidationError struct { @@ -33697,12 +54658,26 @@ var _ interface { // Validate checks the field values on GetHostsDetailsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetHostsDetailsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetHostsDetailsResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetHostsDetailsResponseMultiError, or nil if none found. +func (m *GetHostsDetailsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetHostsDetailsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -33714,7 +54689,26 @@ func (m *GetHostsDetailsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetHostsDetailsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetHostsDetailsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetHostsDetailsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -33726,9 +54720,30 @@ func (m *GetHostsDetailsResponse) Validate() error { } + if len(errors) > 0 { + return GetHostsDetailsResponseMultiError(errors) + } + return nil } +// GetHostsDetailsResponseMultiError is an error wrapping multiple validation +// errors returned by GetHostsDetailsResponse.ValidateAll() if the designated +// constraints aren't met. +type GetHostsDetailsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetHostsDetailsResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetHostsDetailsResponseMultiError) AllErrors() []error { return m } + // GetHostsDetailsResponseValidationError is the validation error returned by // GetHostsDetailsResponse.Validate if the designated constraints aren't met. type GetHostsDetailsResponseValidationError struct { @@ -33786,13 +54801,27 @@ var _ interface { } = GetHostsDetailsResponseValidationError{} // Validate checks the field values on HostDataWithMeta with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. func (m *HostDataWithMeta) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostDataWithMeta with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// HostDataWithMetaMultiError, or nil if none found. +func (m *HostDataWithMeta) ValidateAll() error { + return m.validate(true) +} + +func (m *HostDataWithMeta) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId // no validation rules for Ip @@ -33805,7 +54834,26 @@ func (m *HostDataWithMeta) Validate() error { // no validation rules for OsName - if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataWithMetaValidationError{ field: "CloudArea", @@ -33815,7 +54863,26 @@ func (m *HostDataWithMeta) Validate() error { } } - if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataWithMetaValidationError{ field: "Meta", @@ -33825,9 +54892,30 @@ func (m *HostDataWithMeta) Validate() error { } } + if len(errors) > 0 { + return HostDataWithMetaMultiError(errors) + } + return nil } +// HostDataWithMetaMultiError is an error wrapping multiple validation errors +// returned by HostDataWithMeta.ValidateAll() if the designated constraints +// aren't met. +type HostDataWithMetaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostDataWithMetaMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m HostDataWithMetaMultiError) AllErrors() []error { return m } + // HostDataWithMetaValidationError is the validation error returned by // HostDataWithMeta.Validate if the designated constraints aren't met. type HostDataWithMetaValidationError struct { @@ -33884,19 +54972,54 @@ var _ interface { // Validate checks the field values on GetScopeHostCheckRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetScopeHostCheckRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetScopeHostCheckRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetScopeHostCheckRequestMultiError, or nil if none found. +func (m *GetScopeHostCheckRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetScopeHostCheckRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return GetScopeHostCheckRequestMultiError(errors) + } + return nil } +// GetScopeHostCheckRequestMultiError is an error wrapping multiple validation +// errors returned by GetScopeHostCheckRequest.ValidateAll() if the designated +// constraints aren't met. +type GetScopeHostCheckRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetScopeHostCheckRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetScopeHostCheckRequestMultiError) AllErrors() []error { return m } + // GetScopeHostCheckRequestValidationError is the validation error returned by // GetScopeHostCheckRequest.Validate if the designated constraints aren't met. type GetScopeHostCheckRequestValidationError struct { @@ -33955,12 +55078,26 @@ var _ interface { // Validate checks the field values on GetScopeHostCheckResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetScopeHostCheckResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetScopeHostCheckResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetScopeHostCheckResponseMultiError, or nil if none found. +func (m *GetScopeHostCheckResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetScopeHostCheckResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -33972,7 +55109,26 @@ func (m *GetScopeHostCheckResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetScopeHostCheckResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetScopeHostCheckResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetScopeHostCheckResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -33984,9 +55140,30 @@ func (m *GetScopeHostCheckResponse) Validate() error { } + if len(errors) > 0 { + return GetScopeHostCheckResponseMultiError(errors) + } + return nil } +// GetScopeHostCheckResponseMultiError is an error wrapping multiple validation +// errors returned by GetScopeHostCheckResponse.ValidateAll() if the +// designated constraints aren't met. +type GetScopeHostCheckResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetScopeHostCheckResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetScopeHostCheckResponseMultiError) AllErrors() []error { return m } + // GetScopeHostCheckResponseValidationError is the validation error returned by // GetScopeHostCheckResponse.Validate if the designated constraints aren't met. type GetScopeHostCheckResponseValidationError struct { diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto index 66d9f10109..95556ad35b 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto @@ -3166,6 +3166,10 @@ message NodeGroup { title: "area", description: "节点所在云区域信息(用户不指定, 则使用默认云区域)" }]; + string nodeRole = 24[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "nodeRole", + description: "创建eks节点池时指定的iam角色名称" + }]; } message CloudArea { @@ -3514,6 +3518,10 @@ message LaunchConfiguration { title: "keyPair", description: "节点私钥信息, 与密码2选一,2者均设置优先密钥" }]; + string sshKey = 21[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "sshKey", + description: "用于ssh登录实例的密钥或密钥名称。" + }]; } message KeyInfo { @@ -7601,6 +7609,10 @@ message CreateNodeGroupRequest { title: "onlyCreateInfo", description: "onlyCreateInfo仅录入数据,不执行流程" }]; + string nodeRole = 26[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "nodeRole", + description: "创建eks节点池时指定的iam角色名称" + }]; } message GroupExtraInfo { diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json index 77ddfb2d93..7fb8206876 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json @@ -28,7 +28,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -79,7 +79,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -113,7 +113,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -165,7 +165,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -199,7 +199,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -237,7 +237,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -256,8 +256,7 @@ "description": "isForce. 强制删除AutoScalingOption信息,即使未正常执行完成,也会进入终止。对于自定义cluster-autoscaler安装的场景下,是需要清理已部署的CA模块。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -276,7 +275,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -317,7 +316,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -358,7 +357,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -399,7 +398,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -453,7 +452,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -514,7 +513,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -548,7 +547,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -588,7 +587,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -614,8 +613,7 @@ "description": "editable. 对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "creator", @@ -655,7 +653,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -689,7 +687,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -723,7 +721,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -754,7 +752,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -772,8 +770,7 @@ "name": "isForce", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -792,7 +789,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -833,7 +830,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -866,7 +863,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -918,7 +915,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -957,7 +954,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -998,7 +995,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1039,7 +1036,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1077,7 +1074,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1125,7 +1122,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1172,7 +1169,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1219,7 +1216,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1266,7 +1263,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1292,8 +1289,7 @@ "description": "isExtranet. 默认false 获取内网,是否获取外网访问的kubeconfig", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "accountID", @@ -1328,7 +1324,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1382,7 +1378,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1487,7 +1483,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1534,7 +1530,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1588,7 +1584,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1635,7 +1631,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1675,7 +1671,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1722,7 +1718,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1790,7 +1786,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1838,7 +1834,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1901,7 +1897,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -1964,7 +1960,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2019,7 +2015,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2073,7 +2069,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2120,7 +2116,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2179,7 +2175,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2213,7 +2209,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2251,7 +2247,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2299,7 +2295,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2367,8 +2363,7 @@ "description": "isExclusive. 是否为业务独占集群", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "clusterType", @@ -2433,8 +2428,7 @@ "description": "isCommonCluster. 是否为公共集群,默认false", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "clusterID", @@ -2460,7 +2454,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2494,7 +2488,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2528,7 +2522,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2547,8 +2541,7 @@ "description": "cloudInfo. 集群关联的云集群信息, 默认从数据库获取数据", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2567,7 +2560,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2586,8 +2579,7 @@ "description": "isForced. 是否强制删除,默认false。强制删除会一并删除clustermanager管理的资源,例如节点,节点池等。强制删除周期较长,清理工作会进入长后台任务运行,集群信息不会立刻被清空,而是处于删除状态。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "instanceDeleteMode", @@ -2601,8 +2593,7 @@ "description": "onlyDeleteInfo. 默认为false。设置为true时,仅删除cluster-manager所记录的信息,不会触发任何自动化流程。该参数可以与isForced同时协同工作。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -2616,8 +2607,7 @@ "description": "deleteClusterRecord. 管理员操作, 设置true时仅删除集群数据库记录", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2636,7 +2626,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2677,7 +2667,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2703,8 +2693,7 @@ "description": "filterInter. 是否屏蔽空闲机池", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2725,7 +2714,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2758,7 +2747,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2828,8 +2817,7 @@ "description": "showPwd. 节点密码是否展示(默认不展示)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2848,7 +2836,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2881,8 +2869,7 @@ "description": "isForce. 不管节点处于任何状态都强制删除,例如可能刚初始化,NotReady等", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -2896,8 +2883,7 @@ "description": "onlyDeleteInfo. 默认为false。设置为true时,仅删除cluster-manager所记录的信息,不会触发任何自动化流程.", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "nodeTemplateID", @@ -2918,8 +2904,7 @@ "description": "是否是第三方节点(IDC节点). 下架第三方节点需置为true, 且必须关联nodeGroupID", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -2938,7 +2923,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -2979,7 +2964,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3020,7 +3005,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3090,7 +3075,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3121,7 +3106,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3152,7 +3137,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3193,7 +3178,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3212,8 +3197,7 @@ "description": "enableFilter. enableFilter为true时, 输出结果按照是否开启弹性伸缩排序(开启的排序在后面)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3234,7 +3218,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3288,7 +3272,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3312,7 +3296,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3346,7 +3330,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3378,7 +3362,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3412,7 +3396,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3446,7 +3430,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3480,7 +3464,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3514,7 +3498,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3548,7 +3532,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3582,7 +3566,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3616,7 +3600,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3650,7 +3634,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3669,8 +3653,7 @@ "description": "showPwd. 节点密码是否展示(默认不展示)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3691,7 +3674,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3724,7 +3707,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3776,7 +3759,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3810,7 +3793,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3841,7 +3824,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3860,24 +3843,21 @@ "description": "isForce. 强制删除,包括清理节点池管理的机器。外部资源删除转入后台删除长任务对列,默认会返回Task信息方便确认进度。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "reserveNodesInCluster", "description": "reserveNodesInCluster. 保留节点在集群中,仅删除节点池,解除节点与节点池关联。当且仅当强制删除时生效。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "keepNodesInstance", "description": "keepNodesInstance. 节点从集群移除,清理资源,但不销毁机器,保留机器运行。当且仅当强制删除时生效。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -3891,8 +3871,7 @@ "description": "onlyDeleteInfo. onlyDeleteInfo仅删除数据,不执行流程", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -3911,7 +3890,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3952,7 +3931,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -3993,7 +3972,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4034,7 +4013,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4075,7 +4054,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4116,7 +4095,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4157,7 +4136,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4198,7 +4177,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4229,7 +4208,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4268,7 +4247,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4309,7 +4288,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4349,7 +4328,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4373,7 +4352,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4431,16 +4410,14 @@ "description": "simple. 只展示 operationLogs 信息", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "taskIDNull", "description": "taskIDNull. 默认false,过滤taskID为空的场景; 当为true时,不过滤taskID为空的", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "clusterID", @@ -4475,8 +4452,7 @@ "description": "v2. 是否使用v2的查询版本", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "ipList", @@ -4504,7 +4480,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4545,7 +4521,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4599,7 +4575,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4637,7 +4613,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4678,7 +4654,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4716,7 +4692,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4754,7 +4730,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4802,7 +4778,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4835,7 +4811,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4875,7 +4851,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4887,8 +4863,7 @@ "description": "showVCluster. 展示vcluster集群的host共享集群(默认全部展示)", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -4909,7 +4884,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -4989,7 +4964,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5023,7 +4998,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5054,7 +5029,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5073,8 +5048,7 @@ "description": "isForce. 强制删除Task信息,即使未正常执行完成,也会进入终止。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" } ], "tags": [ @@ -5093,7 +5067,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5134,7 +5108,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5175,7 +5149,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5209,7 +5183,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5228,8 +5202,7 @@ "description": "onlyDeleteInfo. 默认为false。设置为true时,仅删除cluster-manager所记录的信息,不会触发任何自动化流程。该参数可以与isForced同时协同工作。", "in": "query", "required": false, - "type": "boolean", - "format": "boolean" + "type": "boolean" }, { "name": "operator", @@ -5257,7 +5230,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5298,7 +5271,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5331,7 +5304,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5379,7 +5352,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5427,7 +5400,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5475,7 +5448,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5523,7 +5496,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5571,7 +5544,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5619,7 +5592,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5673,7 +5646,7 @@ } }, "default": { - "description": "An unexpected error response", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/runtimeError" } @@ -5777,7 +5750,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "具体行为流程动作定义", + "title": "plugins" } }, "description": "记录各模块功能自动化行为模板, 对接job系统, 完成自定义操作; 针对不同云的不同操作模版参数需自定义针对大部分操作,仅需要前置动作或后置动作即可. 可自由扩展", @@ -5820,7 +5795,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -5861,7 +5835,6 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "仅写入节点信息,默认是false。仅写入节点信息时,会通过cluster所属cloudprovider查询节点信息,并设置为RUNNING。", "title": "onlyCreateInfo" }, @@ -5877,7 +5850,6 @@ }, "isExternalNode": { "type": "boolean", - "format": "boolean", "description": "上架第三方节点需置为true, 且必须关联nodeGroupID", "title": "是否是第三方节点(IDC节点)" } @@ -5905,7 +5877,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6010,7 +5981,6 @@ }, "replaceUnhealthy": { "type": "boolean", - "format": "boolean", "description": "开启监控不健康节点替换服务,默认false。连续1分钟ping不通则视为不健康!", "title": "replaceUnhealthy" }, @@ -6029,7 +5999,6 @@ }, "autoUpgrade": { "type": "boolean", - "format": "boolean", "description": "开启自动升级GKE版本功能,如果集群为发布版本,则强制开启", "title": "autoUpgrade" } @@ -6053,11 +6022,12 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "bksops模板默认通用参数,实际调用时根据实际行为可覆盖或定制化", + "title": "params" }, "allowSkipWhenFailed": { "type": "boolean", - "format": "boolean", "description": "allowSkipWhenFailed插件执行失败时是否允许跳过, 默认不允许跳过", "title": "allowSkipWhenFailed" } @@ -6102,7 +6072,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6137,8 +6106,7 @@ } }, "success": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "message": { "type": "string" @@ -6188,7 +6156,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6196,7 +6163,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerNodeResult" - } + }, + "description": "返回node检查结果,key是IP", + "title": "data" } }, "description": "返回节点状态", @@ -6258,7 +6227,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6292,7 +6260,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -6325,7 +6292,6 @@ }, "editable": { "type": "boolean", - "format": "boolean", "description": "对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "title": "editable" }, @@ -6333,13 +6299,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "通过标准运维实现的扩展流程或者插件", + "title": "opsPlugins" }, "extraPlugins": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "额外扩展流程,用于自定义扩展,该部分允许用户编辑", + "title": "extraPlugins" }, "cloudCredential": { "$ref": "#/definitions/clustermanagerCredential", @@ -6420,7 +6390,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "平台不同云的配置信息", + "title": "platformInfo" } }, "description": "云信息,多云管理下用于定义共享信息,BCS默认地提供蓝鲸云预定义,腾讯云预定义信息", @@ -6461,7 +6433,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "cloud账号是否启用,默认是启用的", "title": "enable" }, @@ -6587,7 +6558,6 @@ "properties": { "cloudInternalEnable": { "type": "boolean", - "format": "boolean", "description": "cloud是否开启内部配置", "title": "cloudInternalEnable" }, @@ -6603,19 +6573,16 @@ }, "disableCreateCluster": { "type": "boolean", - "format": "boolean", "description": "cloud是否关闭创建集群特性", "title": "disableCreateCluster" }, "disableImportCluster": { "type": "boolean", - "format": "boolean", "description": "cloud是否关闭导入集群特性", "title": "disableImportCluster" }, "disableNodeGroup": { "type": "boolean", - "format": "boolean", "description": "cloud是否关闭节点池特性", "title": "disableNodeGroup" }, @@ -6648,7 +6615,6 @@ }, "autoFormatAndMount": { "type": "boolean", - "format": "boolean", "description": "是否自动化格式盘并挂载", "title": "autoFormatAndMount" }, @@ -6700,7 +6666,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "是否启用该参数", "title": "enable" }, @@ -6835,7 +6800,6 @@ }, "cloudRegionNode": { "type": "boolean", - "format": "boolean", "description": "是否是该云的某个地域节点", "title": "cloudRegionNode" } @@ -7083,7 +7047,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否业务独占集群,默认为false", "title": "isExclusive" }, @@ -7096,7 +7059,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群标签", + "title": "labels" }, "creator": { "type": "string", @@ -7113,13 +7078,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时进行BCS内置插件安装,该信息会索引云上默认配置信息进行对比与补充,Addons默认在集群正常初始化之后进行调用。", + "title": "bcsAddons" }, "extraAddons": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时额外扩展传递的信息,该部分为预留二方/三方/服务商扩展使用,Addons默认在集群状态正常之后进行调用与安装。", + "title": "extraAddons" }, "systemID": { "type": "string", @@ -7135,7 +7104,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerNode" - } + }, + "description": "集群master IP列表", + "title": "master" }, "networkSettings": { "$ref": "#/definitions/clustermanagerNetworkSetting", @@ -7174,7 +7145,6 @@ }, "autoGenerateMasterNodes": { "type": "boolean", - "format": "boolean", "description": "创建集群是否使用已存在节点, 默认false, 即使用已经存在的节点, 从创建集群参数中获取", "title": "autoGenerateMasterNodes" }, @@ -7190,7 +7160,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息或者是针对不同云特性开关", + "title": "extraInfo" }, "moduleID": { "type": "string", @@ -7204,7 +7176,6 @@ }, "isCommonCluster": { "type": "boolean", - "format": "boolean", "description": "是否为公共集群,默认false(废弃)", "title": "isCommonCluster" }, @@ -7220,7 +7191,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -7263,7 +7233,6 @@ "properties": { "IPVS": { "type": "boolean", - "format": "boolean", "description": "Kubernetes集群IPVS特性,默认为false", "title": "IPVS" }, @@ -7281,7 +7250,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为KubeAPIServer,KubeController,Etcd,KubeScheduler。value为各模块进程启动参数,多个参数之间使用;间隔,例如Etcd: node-data-dir=/data/bcs/lib/etcd;", + "title": "extraArgs" }, "networkType": { "type": "string", @@ -7290,19 +7261,16 @@ }, "deletionProtection": { "type": "boolean", - "format": "boolean", "description": "是否启用集群删除保护", "title": "deletionProtection" }, "auditEnabled": { "type": "boolean", - "format": "boolean", "description": "是否开启审计开关", "title": "auditEnabled" }, "enableHa": { "type": "boolean", - "format": "boolean", "description": "自建集群是否开启高可用", "title": "enableHa" } @@ -7313,7 +7281,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -7348,19 +7315,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为false", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认false", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算", "title": "ignoreDaemonSetsUtilization" }, @@ -7425,7 +7389,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启自动扩缩容,开启后会在该集群部署 ClusterAutoScaling 组件,默认为 false", "title": "enableAutoscale" }, @@ -7455,7 +7418,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -7547,7 +7509,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群相关tag信息,用于集群管理标签信息注入. 可自定义设置, 可根据不同云实现业务定制tags(例如:可根据businessID绑定业务信息)", + "title": "clusterTags" }, "versionName": { "type": "string", @@ -7566,7 +7530,6 @@ }, "isAutoUpgradeClusterLevel": { "type": "boolean", - "format": "boolean", "description": "是否开启自动变配集群等级,针对托管集群生效", "title": "isAutoUpgradeClusterLevel" } @@ -7577,7 +7540,6 @@ "properties": { "isExtranet": { "type": "boolean", - "format": "boolean", "description": "isExtranet集群内外网访问(true外网访问 false内网访问, 默认false)", "title": "isExtranet" }, @@ -7773,7 +7735,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点标签信息", + "title": "labels" }, "taints": { "type": "array", @@ -7835,7 +7799,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点注解信息", + "title": "annotations" }, "zoneName": { "type": "string", @@ -7867,7 +7833,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -7899,7 +7864,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -7974,7 +7938,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -7996,7 +7959,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -8031,19 +7993,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为false", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认false", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算,默认false", "title": "ignoreDaemonSetsUtilization" }, @@ -8088,7 +8047,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启自动扩缩容,开启后会在该集群部署 ClusterAutoScaling 组件,默认为 false", "title": "enableAutoscale" }, @@ -8118,7 +8076,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -8183,7 +8140,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8217,7 +8173,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "cloud云账号是否开启,默认开启", "title": "enable" }, @@ -8257,7 +8212,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8346,7 +8300,6 @@ }, "editable": { "type": "boolean", - "format": "boolean", "description": "对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "title": "editable" }, @@ -8354,13 +8307,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "通过标准运维实现的扩展流程或者插件", + "title": "opsPlugins" }, "extraPlugins": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "额外扩展流程,用于自定义扩展,该部分允许用户编辑", + "title": "extraPlugins" }, "cloudCredential": { "$ref": "#/definitions/clustermanagerCredential", @@ -8426,7 +8383,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "平台不同云的配置信息", + "title": "platformInfo" } }, "description": "创建cloud请求", @@ -8454,7 +8413,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -8546,7 +8504,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -8602,7 +8559,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群", "title": "isExclusive" }, @@ -8620,7 +8576,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "creator": { "type": "string", @@ -8629,7 +8587,6 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "仅创建集群信息,不进行真实集群创建,默认为false", "title": "onlyCreateInfo" }, @@ -8637,13 +8594,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时进行BCS内置插件安装,该信息会索引云上默认配置信息进行对比与补充,如果填写错误直接报错", + "title": "bcsAddons" }, "extraAddons": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时额外扩展传递的信息,该部分为预留二方/三方/服务商扩展使用,如果填错直接报错", + "title": "extraAddons" }, "cloudID": { "type": "string", @@ -8693,7 +8654,6 @@ }, "systemReinstall": { "type": "boolean", - "format": "boolean", "description": "是否重装master节点的系统,机器被托管情况下有效", "title": "systemReinstall" }, @@ -8709,7 +8669,6 @@ }, "autoGenerateMasterNodes": { "type": "boolean", - "format": "boolean", "description": "创建集群Master节点来源, 默认false表示使用已有节点; 为true时, 需要生成master instance", "title": "autoGenerateMasterNodes" }, @@ -8725,7 +8684,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "extraInfo" }, "moduleID": { "type": "string", @@ -8739,7 +8700,6 @@ }, "isCommonCluster": { "type": "boolean", - "format": "boolean", "description": "是否为公共集群,默认false(废弃)", "title": "isCommonCluster" }, @@ -8755,7 +8715,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -8817,7 +8776,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -8865,7 +8823,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启弹性伸缩,默认false", "title": "enableAutoscale" }, @@ -8883,13 +8840,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的污点信息(废弃)", + "title": "taints" }, "nodeOS": { "type": "string", @@ -8920,7 +8881,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的资源标签信息", + "title": "tags" }, "nodeGroupType": { "type": "string", @@ -8945,9 +8908,13 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "onlyCreateInfo仅录入数据,不执行流程", "title": "onlyCreateInfo" + }, + "nodeRole": { + "type": "string", + "description": "创建eks节点池时指定的iam角色名称", + "title": "nodeRole" } }, "description": "创建节点组请求", @@ -8978,7 +8945,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9031,7 +8997,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "array", @@ -9074,7 +9042,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "preStartUserScript": { "type": "string", @@ -9151,7 +9121,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9213,7 +9182,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerStep" - } + }, + "description": "任务详细步骤信息,主要用于信息确认,异常时", + "title": "steps" }, "clusterID": { "type": "string", @@ -9263,7 +9234,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9322,7 +9292,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群", "title": "isExclusive" }, @@ -9345,7 +9314,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "creator": { "type": "string", @@ -9354,7 +9325,6 @@ }, "onlyCreateInfo": { "type": "boolean", - "format": "boolean", "description": "仅创建集群信息,不进行真实集群创建,默认为false", "title": "onlyCreateInfo" }, @@ -9390,7 +9360,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "extraInfo" }, "description": { "type": "string", @@ -9440,7 +9412,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9553,7 +9524,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "标准运维任务的全局变量参数", + "title": "constant" } }, "description": "调试标准运维任务请求参数", @@ -9608,7 +9581,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9640,7 +9612,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -9684,7 +9655,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9711,7 +9681,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9738,7 +9707,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -9767,7 +9735,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9810,7 +9777,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9857,7 +9823,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9884,7 +9849,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9922,7 +9886,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -9949,7 +9912,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10007,7 +9969,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10045,24 +10006,21 @@ "title": "nodes" }, "force": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "gracePeriodSeconds": { "type": "integer", "format": "int32" }, "ignoreAllDaemonSets": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "timeout": { "type": "integer", "format": "int64" }, "deleteLocalData": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "selector": { "type": "string" @@ -10071,16 +10029,14 @@ "type": "string" }, "disableEviction": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "skipWaitForDeleteTimeoutSeconds": { "type": "integer", "format": "int64" }, "dryRun": { - "type": "boolean", - "format": "boolean" + "type": "boolean" } } }, @@ -10100,7 +10056,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10142,7 +10097,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10183,7 +10137,6 @@ "properties": { "canDeleted": { "type": "boolean", - "format": "boolean", "description": "集群列表的集群是否能够删除(集群无所属node节点时才允许删除)", "title": "canDeleted" }, @@ -10194,7 +10147,6 @@ }, "autoScale": { "type": "boolean", - "format": "boolean", "description": "集群是否支持弹性伸缩, 在云支持弹性伸缩的前提下, 某些类型集群支持弹性伸缩", "title": "autoScale" } @@ -10216,7 +10168,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10274,7 +10225,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -10310,7 +10260,6 @@ }, "allScope": { "type": "boolean", - "format": "boolean", "description": "是否获取所有资源范围的拓扑结构,默认为false", "title": "allScope" }, @@ -10337,7 +10286,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -10434,7 +10382,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10467,7 +10414,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10503,7 +10449,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10535,7 +10480,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10567,7 +10511,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10601,7 +10544,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10635,7 +10577,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10679,7 +10620,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10737,7 +10677,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -10807,7 +10746,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10846,7 +10784,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10880,7 +10817,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10917,7 +10853,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -10991,7 +10926,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -11031,7 +10965,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11131,7 +11064,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -11234,7 +11166,6 @@ }, "success": { "type": "boolean", - "format": "boolean", "description": "是否成功", "title": "success" }, @@ -11271,7 +11202,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11500,7 +11430,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群,默认为true", "title": "isExclusive" }, @@ -11513,7 +11442,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "creator": { "type": "string", @@ -11539,7 +11470,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "extraInfo" }, "extraClusterID": { "type": "string", @@ -11553,7 +11486,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -11598,7 +11530,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -11712,13 +11643,11 @@ }, "isSecurityService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云安全, 选填 qcloud默认开启", "title": "isSecurityService" }, "isMonitorService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云监控, 选填 默认开启", "title": "isMonitorService" }, @@ -11850,7 +11779,6 @@ }, "publicIPAssigned": { "type": "boolean", - "format": "boolean", "description": "是否分配公网IP。默认为false。", "title": "publicIPAssigned" }, @@ -11920,7 +11848,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -11964,7 +11891,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -12061,13 +11987,11 @@ }, "isSecurityService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云安全, 选填 yunti默认关闭", "title": "isSecurityService" }, "isMonitorService": { "type": "boolean", - "format": "boolean", "description": "新实例启动时的是否开启云监控, 选填 默认开启", "title": "isMonitorService" }, @@ -12085,12 +12009,19 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点通过selector的匹配策略,目前仅用作第三方节点匹配", + "title": "selector" }, "keyPair": { "$ref": "#/definitions/clustermanagerKeyInfo", "description": "节点私钥信息, 与密码2选一,2者均设置优先密钥", "title": "keyPair" + }, + "sshKey": { + "type": "string", + "description": "用于ssh登录实例的密钥或密钥名称。", + "title": "sshKey" } }, "title": "LaunchConfigure template for scaling node" @@ -12111,7 +12042,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12147,7 +12077,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12183,7 +12112,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12224,7 +12152,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12260,7 +12187,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12326,7 +12252,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12362,7 +12287,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12398,7 +12322,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12430,7 +12353,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12466,7 +12388,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12502,7 +12423,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12538,7 +12458,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12574,7 +12493,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12610,7 +12528,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12646,7 +12563,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12683,7 +12599,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12724,7 +12639,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12740,7 +12654,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerExtraInfo" - } + }, + "description": "集群其他标识信息,cluster结构之外的数据获取", + "title": "clusterExtraInfo" }, "web_annotations": { "$ref": "#/definitions/clustermanagerWebAnnotations", @@ -12772,7 +12688,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12814,7 +12729,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12850,7 +12764,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12892,7 +12805,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12928,7 +12840,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -12964,7 +12875,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13006,7 +12916,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13047,7 +12956,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13088,7 +12996,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13134,7 +13041,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13150,7 +13056,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerExtraInfo" - } + }, + "description": "集群其他标识信息,cluster结构之外的数据获取", + "title": "clusterExtraInfo" }, "web_annotations": { "$ref": "#/definitions/clustermanagerWebAnnotationsV2", @@ -13182,7 +13090,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13252,7 +13159,6 @@ }, "all": { "type": "boolean", - "format": "boolean", "description": "all操作所有的账号迁移", "title": "all" } @@ -13279,7 +13185,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -13366,7 +13271,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -13400,13 +13304,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "命名空间标签", + "title": "labels" }, "annotations": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "命名空间注解", + "title": "annotations" }, "quota": { "$ref": "#/definitions/clustermanagerNamespaceQuota", @@ -13459,7 +13367,6 @@ }, "enableVPCCni": { "type": "boolean", - "format": "boolean", "description": "enableVPCCni是否开启VPC-CNI网络模式(使能vpc-cni模式时,新增流程开启)", "title": "enableVPCCni" }, @@ -13478,7 +13385,6 @@ }, "isStaticIpMode": { "type": "boolean", - "format": "boolean", "description": "集群VPC-CNI模式是否为非固定IP,默认: FALSE 非固定IP", "title": "isNonStaticIpMode" }, @@ -13669,7 +13575,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点注解信息", + "title": "annotations" } } }, @@ -13738,7 +13646,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启弹性伸缩,默认false", "title": "enableAutoscale" }, @@ -13756,13 +13663,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的污点信息", + "title": "taints" }, "nodeOS": { "type": "string", @@ -13815,7 +13726,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的资源标签信息", + "title": "tags" }, "nodeGroupType": { "type": "string", @@ -13826,6 +13739,11 @@ "$ref": "#/definitions/clustermanagerCloudArea", "description": "节点所在云区域信息(用户不指定, 则使用默认云区域)", "title": "area" + }, + "nodeRole": { + "type": "string", + "description": "创建eks节点池时指定的iam角色名称", + "title": "nodeRole" } }, "description": "节点组,对蓝鲸、腾讯云、AWS弹性伸缩能力封装", @@ -14057,7 +13975,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点标签信息", + "title": "labels" } } }, @@ -14094,7 +14014,6 @@ "properties": { "isExist": { "type": "boolean", - "format": "boolean", "description": "节点是否存在集群中", "title": "isExist" }, @@ -14133,13 +14052,17 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点通用的labels设置", + "title": "labels" }, "extraArgs": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "initLoginUsername": { "type": "string", @@ -14224,7 +14147,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "array", @@ -14267,7 +14192,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "preStartUserScript": { "type": "string", @@ -14340,7 +14267,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "节点annotation设置", + "title": "annotations" }, "maxPodsPerNode": { "type": "integer", @@ -14350,19 +14279,16 @@ }, "skipSystemInit": { "type": "boolean", - "format": "boolean", "description": "是否跳过执行系统初始化, 默认执行", "title": "skipSystemInit" }, "allowSkipScaleOutWhenFailed": { "type": "boolean", - "format": "boolean", "description": "扩容失败时是否允许跳过流程, 默认不允许跳过", "title": "allowSkipScaleOutWhenFailed" }, "allowSkipScaleInWhenFailed": { "type": "boolean", - "format": "boolean", "description": "缩容失败时是否允许跳过流程, 默认不允许跳过", "title": "skipSystemInit" } @@ -14414,7 +14340,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "云上默认置入的区域信息,key是字符串,values是中文说明", + "title": "regions" } }, "description": "用于记录一些固定的系统信息,用于帮助OS层面信息展示", @@ -14701,7 +14629,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -14755,7 +14682,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -14815,7 +14741,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -14897,7 +14822,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "步骤定义的参数,key、value对", + "title": "params" }, "retry": { "type": "integer", @@ -14948,7 +14875,6 @@ }, "skipOnFailed": { "type": "boolean", - "format": "boolean", "description": "失败时跳过", "title": "skipOnFailed" } @@ -15027,7 +14953,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -15062,19 +14987,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为true", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认true", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算, 默认为true", "title": "ignoreDaemonSetsUtilization" }, @@ -15150,7 +15072,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -15225,7 +15146,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15318,7 +15238,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerStep" - } + }, + "description": "任务详细步骤信息,主要用于信息确认,异常时", + "title": "steps" }, "clusterID": { "type": "string", @@ -15347,7 +15269,6 @@ }, "forceTerminate": { "type": "boolean", - "format": "boolean", "description": "任务设置为强制终止,用于流程控制", "title": "forceTerminate" }, @@ -15355,7 +15276,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "公共参数,便于跨Step完成信息传递", + "title": "commonParams" }, "taskName": { "type": "string", @@ -15512,7 +15435,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15534,7 +15456,6 @@ "properties": { "isScaleDownEnable": { "type": "boolean", - "format": "boolean", "description": "scale-down-enabled,是否允许缩容节点", "title": "isScaleDownEnable" }, @@ -15569,19 +15490,16 @@ }, "skipNodesWithLocalStorage": { "type": "boolean", - "format": "boolean", "description": "忽略有本地存储的节点,默认为false", "title": "skipNodesWithLocalStorage" }, "skipNodesWithSystemPods": { "type": "boolean", - "format": "boolean", "description": "忽略kube-system NS下非DaemonSet管理的Pod的节点,默认false", "title": "skipNodesWithSystemPods" }, "ignoreDaemonSetsUtilization": { "type": "boolean", - "format": "boolean", "description": "忽略DaemonSet的资源计算", "title": "ignoreDaemonSetsUtilization" }, @@ -15661,7 +15579,6 @@ }, "scaleUpFromZero": { "type": "boolean", - "format": "boolean", "description": "scale-up-from-zero,允许自动扩容(没有 ready 节点时)", "title": "scaleUpFromZero" }, @@ -15707,7 +15624,6 @@ }, "onlyUpdateInfo": { "type": "boolean", - "format": "boolean", "description": "仅更新CA组件配置参数信息,不触发流程", "title": "onlyUpdateInfo" }, @@ -15748,7 +15664,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15769,7 +15684,6 @@ "properties": { "enable": { "type": "boolean", - "format": "boolean", "description": "是否开启集群扩缩容", "title": "enable" }, @@ -15806,7 +15720,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -15847,7 +15760,6 @@ }, "enable": { "type": "boolean", - "format": "boolean", "description": "cloud云账号是否开启,默认开启", "title": "enable" }, @@ -15891,7 +15803,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -15975,7 +15886,6 @@ }, "editable": { "type": "boolean", - "format": "boolean", "description": "对于SaaS层面该信息是否可编辑,BCS默认提供的预定义信息不可编译", "title": "editable" }, @@ -15983,13 +15893,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "通过标准运维实现的扩展流程或者插件", + "title": "opsPlugins" }, "extraPlugins": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "额外扩展流程,用于自定义扩展,该部分允许用户编辑", + "title": "extraPlugins" }, "cloudCredential": { "$ref": "#/definitions/clustermanagerCredential", @@ -16055,7 +15969,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "平台不同云的配置信息", + "title": "platformInfo" } }, "description": "创建项目请求", @@ -16081,7 +15997,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16171,7 +16086,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16258,7 +16172,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -16321,7 +16234,6 @@ }, "isExclusive": { "type": "boolean", - "format": "boolean", "description": "是否为业务独占集群", "title": "isExclusive" }, @@ -16339,7 +16251,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "集群的labels,用于携带额外的信息,最大不得超过20个", + "title": "labels" }, "updater": { "type": "string", @@ -16355,13 +16269,17 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时进行BCS内置插件安装,该信息会索引云上默认配置信息进行对比与补充,如果填写错误直接报错", + "title": "bcsAddons" }, "extraAddons": { "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerBKOpsPlugin" - } + }, + "description": "创建集群时额外扩展传递的信息,该部分为预留二方/三方/服务商扩展使用,如果填错直接报错", + "title": "extraAddons" }, "systemID": { "type": "string", @@ -16410,7 +16328,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "存储集群扩展信息, 例如esb_url/webhook_image/priviledge_image等扩展信息", + "title": "ExtraInfo" }, "moduleID": { "type": "string", @@ -16424,7 +16344,6 @@ }, "isCommonCluster": { "type": "boolean", - "format": "boolean", "description": "是否为公共集群,默认false", "title": "isCommonCluster" }, @@ -16440,7 +16359,6 @@ }, "is_shared": { "type": "boolean", - "format": "boolean", "description": "是否为共享集群,默认false", "title": "is_shared" }, @@ -16487,7 +16405,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16530,7 +16447,6 @@ }, "manual": { "type": "boolean", - "format": "boolean", "description": "手动扩容操作,用户手动扩容操作不做数据回退清理,展示具体的步骤,支持用户重试", "title": "manual" } @@ -16559,7 +16475,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16620,7 +16535,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16681,7 +16595,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16728,7 +16641,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16770,7 +16682,6 @@ }, "enableAutoscale": { "type": "boolean", - "format": "boolean", "description": "是否开启弹性伸缩,默认false", "title": "enableAutoscale" }, @@ -16793,19 +16704,25 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的污点信息", + "title": "taints" }, "tags": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化的资源标签信息", + "title": "tags" }, "nodeOS": { "type": "string", @@ -16845,7 +16762,6 @@ }, "onlyUpdateInfo": { "type": "boolean", - "format": "boolean", "description": "onlyUpdateInfo仅更新数据,不执行流程", "title": "onlyUpdateInfo" } @@ -16869,7 +16785,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16919,7 +16834,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -16990,7 +16904,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17041,7 +16954,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17085,7 +16997,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "新实例初始化label信息", + "title": "labels" }, "taints": { "type": "array", @@ -17128,7 +17042,9 @@ "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "配置各模块自定义参数,预定义的key为kubeletvalue为各模块进程启动参数,多个参数之间使用;间隔,例如Kubelet: root-dir=/var/lib/kubelet;", + "title": "extraArgs" }, "preStartUserScript": { "type": "string", @@ -17205,7 +17121,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17254,7 +17169,9 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/clustermanagerStep" - } + }, + "description": "任务详细步骤信息,主要用于信息确认,异常时", + "title": "steps" }, "updater": { "type": "string", @@ -17285,7 +17202,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17338,7 +17254,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" }, @@ -17415,7 +17330,6 @@ }, "result": { "type": "boolean", - "format": "boolean", "description": "返回结果", "title": "result" } @@ -17504,8 +17418,7 @@ "type": "string" }, "enable": { - "type": "boolean", - "format": "boolean" + "type": "boolean" }, "flagType": { "type": "string" diff --git a/bcs-services/bcs-cluster-manager/go.mod b/bcs-services/bcs-cluster-manager/go.mod index 52caec7f11..162df25eb3 100644 --- a/bcs-services/bcs-cluster-manager/go.mod +++ b/bcs-services/bcs-cluster-manager/go.mod @@ -43,39 +43,41 @@ require ( github.com/kirito41dd/xslice v0.0.1 github.com/micro/go-micro/v2 v2.9.1 github.com/parnurzeal/gorequest v0.2.16 - github.com/prometheus/client_golang v1.11.0 + github.com/prometheus/client_golang v1.14.0 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.398 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.768 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.376 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.544 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.714 go.mongodb.org/mongo-driver v1.5.3 - google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 - google.golang.org/grpc v1.46.0 + google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 + google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 - k8s.io/api v0.23.1 - k8s.io/apimachinery v0.23.1 + k8s.io/api v0.26.1 + k8s.io/apimachinery v0.26.1 k8s.io/client-go v11.0.0+incompatible k8s.io/kubectl v0.0.0-00010101000000-000000000000 ) require ( github.com/leodido/go-urn v1.2.1 // indirect - golang.org/x/tools v0.1.12 + golang.org/x/tools v0.2.0 ) require ( github.com/Tencent/bk-bcs/bcs-common/pkg/i18n v0.0.0-20230908142111-fef103db0120 github.com/apparentlymart/go-cidr v1.1.0 + github.com/aws/aws-sdk-go v1.44.213 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.768 - golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 + golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b google.golang.org/api v0.44.0 gopkg.in/yaml.v2 v2.4.0 k8s.io/apiextensions-apiserver v0.20.0 + sigs.k8s.io/aws-iam-authenticator v0.6.12 ) require ( @@ -93,48 +95,46 @@ require ( github.com/BurntSushi/toml v1.1.0 // indirect github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/RichardKnop/logging v0.0.0-20190827224416-1a693bdd4fae // indirect github.com/Tencent/bk-bcs/bcs-runtime/bcs-k8s/kubernetes/common v0.0.0-20220330120237-0bbed74dcf6d // indirect github.com/TencentBlueKing/bk-audit-go-sdk v0.0.5 // indirect github.com/TencentBlueKing/crypto-golang-sdk v1.0.0 // indirect github.com/TencentBlueKing/iam-go-sdk v0.0.8 // indirect - github.com/aws/aws-sdk-go v1.37.27 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bitly/go-simplejson v0.5.0 // indirect - github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/cloudflare/circl v1.2.0 // indirect github.com/coreos/bbolt v1.3.4 // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f // indirect github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/swag v0.19.14 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.11.2 // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/go-stack/stack v1.8.0 // indirect + github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect github.com/gomodule/redigo v2.0.0+incompatible // indirect github.com/google/btree v1.0.1 // indirect - github.com/google/go-cmp v0.5.7 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/gax-go/v2 v2.0.5 // indirect @@ -142,7 +142,7 @@ require ( github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/imdario/mergo v0.3.13 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -157,13 +157,13 @@ require ( github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.6 // indirect github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect github.com/miekg/dns v1.1.50 // indirect github.com/mitchellh/go-wordwrap v1.0.0 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/moby/spdystream v0.2.0 // indirect - github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 // indirect + github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect @@ -173,15 +173,15 @@ require ( github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.28.0 // indirect - github.com/prometheus/procfs v0.6.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/russross/blackfriday v1.5.2 // indirect github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect - github.com/spf13/cobra v1.2.1 // indirect + github.com/spf13/cobra v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/streadway/amqp v1.0.0 // indirect github.com/stretchr/testify v1.8.4 // indirect @@ -200,27 +200,26 @@ require ( go.uber.org/zap v1.19.0 // indirect golang.org/x/crypto v0.5.0 // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.5.0 // indirect golang.org/x/sync v0.0.0-20220907140024-f12130a52804 // indirect - golang.org/x/sys v0.4.0 // indirect - golang.org/x/term v0.4.0 // indirect - golang.org/x/text v0.6.0 // indirect - golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/term v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect + golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/cli-runtime v0.23.1 // indirect - k8s.io/component-base v0.23.1 // indirect + k8s.io/component-base v0.26.1 // indirect k8s.io/klog v1.0.0 // indirect k8s.io/klog/v2 v2.100.1 // indirect - k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect - k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b // indirect + k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect + k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect moul.io/http2curl v1.0.0 // indirect - sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect sigs.k8s.io/kustomize/api v0.10.1 // indirect sigs.k8s.io/kustomize/kyaml v0.13.0 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect - sigs.k8s.io/yaml v1.2.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/bcs-services/bcs-cluster-manager/internal/actions/nodegroup/create.go b/bcs-services/bcs-cluster-manager/internal/actions/nodegroup/create.go index b7a0dfbe7e..112a121b10 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/nodegroup/create.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/nodegroup/create.go @@ -91,6 +91,7 @@ func (ca *CreateAction) constructNodeGroup() *cmproto.NodeGroup { Taints: ca.req.Taints, Tags: ca.req.Tags, NodeOS: ca.req.NodeOS, + NodeRole: ca.req.NodeRole, Provider: ca.req.Provider, Status: common.StatusCreateNodeGroupCreating, ConsumerID: ca.req.ConsumerID, diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/as.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/as.go new file mode 100644 index 0000000000..ba632c2ac9 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/as.go @@ -0,0 +1,100 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +import ( + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/service/autoscaling" + + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" +) + +// AutoScalingClient aws auto scaling client +type AutoScalingClient struct { + asClient *autoscaling.AutoScaling +} + +// NewAutoScalingClient init autoscaling client +func NewAutoScalingClient(opt *cloudprovider.CommonOption) (*AutoScalingClient, error) { + sess, err := NewSession(opt) + if err != nil { + return nil, err + } + + return &AutoScalingClient{ + asClient: autoscaling.New(sess), + }, nil +} + +// DescribeAutoScalingGroups describes AutoScalingGroups +func (as *AutoScalingClient) DescribeAutoScalingGroups(input *autoscaling.DescribeAutoScalingGroupsInput) ([]*autoscaling.Group, error) { + blog.Infof("DescribeAutoScalingGroups input: %", utils.ToJSONString(input)) + output, err := as.asClient.DescribeAutoScalingGroups(input) + if err != nil { + blog.Errorf("DescribeAutoScalingGroups failed: %v", err) + return nil, err + } + if output == nil || output.AutoScalingGroups == nil { + blog.Errorf("DescribeAutoScalingGroups lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("DescribeAutoScalingGroups %s successful: %", utils.ToJSONString(input)) + + return output.AutoScalingGroups, nil +} + +// SetDesiredCapacity describes AutoScalingGroups +func (as *AutoScalingClient) SetDesiredCapacity(asgName string, capacity int64) error { + blog.Infof("SetDesiredCapacity set autoScalingGroup[%s] capacity to %d", asgName, capacity) + _, err := as.asClient.SetDesiredCapacity( + &autoscaling.SetDesiredCapacityInput{ + AutoScalingGroupName: &asgName, + DesiredCapacity: &capacity, + }, + ) + if err != nil { + blog.Errorf("SetDesiredCapacity failed: %v", err) + return err + } + blog.Infof("SetDesiredCapacity for %s successful, capacity %d", asgName, capacity) + + return nil +} + +// TerminateInstanceInAutoScalingGroup terminates instance in AutoScalingGroups +func (as *AutoScalingClient) TerminateInstanceInAutoScalingGroup( + input *autoscaling.TerminateInstanceInAutoScalingGroupInput) (*autoscaling.Activity, error) { + blog.Infof("TerminateInstanceInAutoScalingGroup input: %", utils.ToJSONString(input)) + output, err := as.asClient.TerminateInstanceInAutoScalingGroup(input) + if err != nil { + blog.Errorf("TerminateInstanceInAutoScalingGroup failed: %v", err) + return nil, err + } + blog.Infof("TerminateInstanceInAutoScalingGroup instance %s successful", input.InstanceId) + + return output.Activity, nil +} + +// DetachInstances detach instances in AutoScalingGroups +func (as *AutoScalingClient) DetachInstances(input *autoscaling.DetachInstancesInput) ([]*autoscaling.Activity, error) { + blog.Infof("DetachInstances input: %", utils.ToJSONString(input)) + output, err := as.asClient.DetachInstances(input) + if err != nil { + blog.Errorf("DetachInstances failed: %v", err) + return nil, err + } + blog.Infof("DetachInstances instances %v for group %s successful", input.InstanceIds, input.AutoScalingGroupName) + + return output.Activities, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/constants.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/constants.go new file mode 100644 index 0000000000..399bdc1e49 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/constants.go @@ -0,0 +1,66 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +const ( + // NodeGroupStatusCreating node group status creating + NodeGroupStatusCreating = "CREATING" + // NodeGroupStatusActive node group status active + NodeGroupStatusActive = "ACTIVE" + // NodeGroupStatusUpdating node group status updating + NodeGroupStatusUpdating = "UPDATING" + // NodeGroupStatusDeleting node group status deleting + NodeGroupStatusDeleting = "DELETING" + // NodeGroupStatusCreateFailed node group status create failed + NodeGroupStatusCreateFailed = "CREATE_FAILED" + // NodeGroupStatusDeleteFailed node group status delete failed + NodeGroupStatusDeleteFailed = "DELETE_FAILED" + // NodeGroupStatusDegraded node group status degraded + NodeGroupStatusDegraded = "DEGRADED" +) + +const ( + // InstanceLifecycleStateInService instance life cycle state InService + InstanceLifecycleStateInService = "InService" + // InstanceLifecycleStatePending instance life cycle state Pending + InstanceLifecycleStatePending = "Pending" + // InstanceLifecycleStateTerminating instance life cycle state Terminating + InstanceLifecycleStateTerminating = "Terminating" + // InstanceLifecycleStateTerminated instance life cycle state Terminated + InstanceLifecycleStateTerminated = "Terminated" + // InstanceLifecycleStateEnteringStandby instance life cycle state EnteringStandby + InstanceLifecycleStateEnteringStandby = "EnteringStandby" + // InstanceLifecycleStateStandby instance life cycle state service + InstanceLifecycleStateStandby = "Standby" + // InstanceLifecycleStateQuarantined instance life cycle state Quarantined + InstanceLifecycleStateQuarantined = "Quarantined" + // InstanceLifecycleStateDetaching instance life cycle state Detaching + InstanceLifecycleStateDetaching = "Detaching" + // InstanceLifecycleStateDetached instance life cycle state Detached + InstanceLifecycleStateDetached = "Detached" +) + +const ( + // InstanceStateRunning instance state running + InstanceStateRunning = "running" + // InstanceStatePending instance state pending + InstanceStatePending = "pending" + // InstanceStateShuttingDown instance state shutting down + InstanceStateShuttingDown = "shutting-down" + // InstanceStateTerminated instance state terminated + InstanceStateTerminated = "terminated" + // InstanceStateStopping instance state stopping + InstanceStateStopping = "stopping" + // InstanceStateStopped instance state stopped + InstanceStateStopped = "stopped" +) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go new file mode 100644 index 0000000000..4c5b273e80 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go @@ -0,0 +1,176 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +import ( + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/service/ec2" + + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" +) + +// EC2Client aws ec2 client +type EC2Client struct { + ec2Client *ec2.EC2 +} + +// NewEC2Client init Eks client +func NewEC2Client(opt *cloudprovider.CommonOption) (*EC2Client, error) { + sess, err := NewSession(opt) + + if err != nil { + return nil, err + } + + return &EC2Client{ + ec2Client: ec2.New(sess), + }, nil +} + +// DescribeAvailabilityZones describes availability zones +func (c *EC2Client) DescribeAvailabilityZones(input *ec2.DescribeAvailabilityZonesInput) ([]*ec2.AvailabilityZone, error) { + blog.Infof("DescribeAvailabilityZones input: %", utils.ToJSONString(input)) + output, err := c.ec2Client.DescribeAvailabilityZones(input) + if err != nil { + blog.Errorf("DescribeAvailabilityZones failed: %v", err) + return nil, err + } + if output == nil || output.AvailabilityZones == nil { + blog.Errorf("DescribeAvailabilityZones lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("DescribeAvailabilityZones %s successful: %", utils.ToJSONString(input)) + + return output.AvailabilityZones, nil +} + +// CreateLaunchTemplate creates a LaunchTemplate +func (c *EC2Client) CreateLaunchTemplate(input *CreateLaunchTemplateInput) (*ec2.LaunchTemplate, error) { + blog.Infof("CreateLaunchTemplate input: %", utils.ToJSONString(input)) + awsInput := generateAwsCreateLaunchTemplateInput(input) + output, err := c.ec2Client.CreateLaunchTemplate(awsInput) + if err != nil { + blog.Errorf("CreateLaunchTemplate failed: %v", err) + return nil, err + } + if output == nil || output.LaunchTemplate == nil { + blog.Errorf("CreateLaunchTemplate created launch template but lost response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("ec2 client CreateLaunchTemplate[%s] successful", *output.LaunchTemplate.LaunchTemplateName) + + return output.LaunchTemplate, nil +} + +// DescribeLaunchTemplates describes a LaunchTemplate +func (c *EC2Client) DescribeLaunchTemplates(input *ec2.DescribeLaunchTemplatesInput) ([]*ec2.LaunchTemplate, error) { + blog.Infof("DescribeLaunchTemplates input: %", utils.ToJSONString(input)) + output, err := c.ec2Client.DescribeLaunchTemplates(input) + if err != nil { + blog.Errorf("DescribeLaunchTemplates failed: %v", err) + return nil, err + } + if output == nil || output.LaunchTemplates == nil { + blog.Errorf("DescribeLaunchTemplates lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + + return output.LaunchTemplates, nil +} + +// CreateLaunchTemplateVersion creates a versioned LaunchTemplate +func (c *EC2Client) CreateLaunchTemplateVersion(input *ec2.CreateLaunchTemplateVersionInput) ( + *ec2.LaunchTemplateVersion, error) { + blog.Infof("CreateLaunchTemplateVersion input: %", utils.ToJSONString(input)) + output, err := c.ec2Client.CreateLaunchTemplateVersion(input) + if err != nil { + blog.Errorf("CreateLaunchTemplateVersion failed: %v", err) + return nil, err + } + if output == nil || output.LaunchTemplateVersion == nil { + blog.Errorf("CreateLaunchTemplateVersion created launch template version but lost response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("ec2 client CreateLaunchTemplateVersion[%s] version %d successful", + *output.LaunchTemplateVersion.LaunchTemplateName, *output.LaunchTemplateVersion.VersionNumber) + + return output.LaunchTemplateVersion, nil +} + +// DescribeLaunchTemplateVersions describes versioned LaunchTemplate +func (c *EC2Client) DescribeLaunchTemplateVersions(input *ec2.DescribeLaunchTemplateVersionsInput) ( + []*ec2.LaunchTemplateVersion, error) { + blog.Infof("DescribeLaunchTemplateVersions input: %", utils.ToJSONString(input)) + output, err := c.ec2Client.DescribeLaunchTemplateVersions(input) + if err != nil { + blog.Errorf("DescribeLaunchTemplateVersions failed: %v", err) + return nil, err + } + if output == nil || output.LaunchTemplateVersions == nil { + blog.Errorf("DescribeLaunchTemplateVersions lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("DescribeLaunchTemplateVersions %s successful: %", *input.LaunchTemplateName) + + return output.LaunchTemplateVersions, nil +} + +// DescribeImages gets image info +func (c *EC2Client) DescribeImages(input *ec2.DescribeImagesInput) (*ec2.Image, error) { + blog.Infof("DescribeImages input: %", utils.ToJSONString(input)) + output, err := c.ec2Client.DescribeImages(input) + if err != nil { + blog.Errorf("DescribeImages failed: %v", err) + return nil, err + } + if output == nil || output.Images == nil { + blog.Errorf("DescribeImages lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("ec2 client DescribeImages successful") + + return output.Images[0], nil +} + +// DescribeInstances gets image info +func (c *EC2Client) DescribeInstances(input *ec2.DescribeInstancesInput) ([]*ec2.Instance, error) { + blog.Infof("DescribeInstances input: %", utils.ToJSONString(input)) + output, err := c.ec2Client.DescribeInstances(input) + if err != nil { + blog.Errorf("DescribeInstances failed: %v", err) + return nil, err + } + if output == nil || output.Reservations == nil { + blog.Errorf("DescribeInstances lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("ec2 client DescribeInstances successful") + return output.Reservations[0].Instances, nil +} + +// TerminateInstances terminates instances +func (c *EC2Client) TerminateInstances(input *ec2.TerminateInstancesInput) ([]*ec2.InstanceStateChange, error) { + blog.Infof("TerminateInstances input: %", utils.ToJSONString(input)) + output, err := c.ec2Client.TerminateInstances(input) + if err != nil { + blog.Errorf("TerminateInstances failed: %v", err) + return nil, err + } + if output == nil || output.TerminatingInstances == nil { + blog.Errorf("TerminateInstances lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("ec2 client TerminateInstances successful") + return output.TerminatingInstances, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks.go new file mode 100644 index 0000000000..68122b6d57 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks.go @@ -0,0 +1,147 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +import ( + "fmt" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/eks" + + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" +) + +// EksClient aws eks client +type EksClient struct { + eksClient *eks.EKS +} + +// NewEksClient init Eks client +func NewEksClient(opt *cloudprovider.CommonOption) (*EksClient, error) { + sess, err := NewSession(opt) + if err != nil { + return nil, err + } + + return &EksClient{ + eksClient: eks.New(sess), + }, nil +} + +// ListEksCluster get eks cluster list, region parameter init eks client +func (cli *EksClient) ListEksCluster() ([]*string, error) { + if cli == nil { + return nil, cloudprovider.ErrServerIsNil + } + + input := &eks.ListClustersInput{} + output, err := cli.eksClient.ListClusters(input) + if err != nil { + return nil, err + } + + return output.Clusters, nil +} + +// GetEksCluster gets the eks cluster +func (cli *EksClient) GetEksCluster(clusterName string) (*eks.Cluster, error) { + if cli == nil { + return nil, cloudprovider.ErrServerIsNil + } + + input := &eks.DescribeClusterInput{ + Name: aws.String(clusterName), + } + output, err := cli.eksClient.DescribeCluster(input) + if err != nil { + return nil, err + } + + return output.Cluster, nil +} + +// CreateNodegroup creates a eks node group +func (cli *EksClient) CreateNodegroup(input *CreateNodegroupInput) (*eks.Nodegroup, error) { + blog.Infof("CreateNodegroup request: %s", utils.ToJSONString(input)) + if cli == nil { + return nil, cloudprovider.ErrServerIsNil + } + output, err := cli.eksClient.CreateNodegroup(generateAwsCreateNodegroupInput(input)) + if err != nil { + return nil, err + } + if output == nil || output.Nodegroup == nil { + blog.Errorf("CreateNodegroup resp is nil") + return nil, fmt.Errorf("CreateNodegroup resp is nil") + } + blog.Infof("CreateNodegroup create nodegroup[%s] successful", *output.Nodegroup.NodegroupName) + + return output.Nodegroup, nil +} + +// DescribeNodegroup gets a eks node group info +func (cli *EksClient) DescribeNodegroup(ngName, clusterName *string) (*eks.Nodegroup, error) { + blog.Infof("DescribeNodegroup[%s] in cluster %s", ngName, clusterName) + output, err := cli.eksClient.DescribeNodegroup(&eks.DescribeNodegroupInput{ + NodegroupName: ngName, + ClusterName: clusterName, + }, + ) + if err != nil { + return nil, err + } + if output == nil || output.Nodegroup == nil { + blog.Errorf("DescribeNodegroup resp is nil") + return nil, fmt.Errorf("DescribeNodegroup resp is nil") + } + blog.Infof("DescribeNodegroup[%s] successful", *output.Nodegroup.NodegroupName) + + return output.Nodegroup, nil +} + +// UpdateNodegroupConfig gets a eks node group info +func (cli *EksClient) UpdateNodegroupConfig(input *eks.UpdateNodegroupConfigInput) (*eks.Update, error) { + blog.Infof("UpdateNodegroupConfig request: %s", utils.ToJSONString(input)) + output, err := cli.eksClient.UpdateNodegroupConfig(input) + if err != nil { + return nil, err + } + if output == nil || output.Update == nil { + blog.Errorf("UpdateNodegroupConfig resp is nil") + return nil, fmt.Errorf("UpdateNodegroupConfig resp is nil") + } + blog.Infof("UpdateNodegroupConfig[%s] successful, update id %s", *input.NodegroupName, *output.Update.Id) + + return output.Update, nil +} + +// DeleteNodegroup deletes a eks node group +func (cli *EksClient) DeleteNodegroup(input *eks.DeleteNodegroupInput) (*eks.Nodegroup, error) { + blog.Infof("DeleteNodegroup request: %s", utils.ToJSONString(input)) + if cli == nil { + return nil, cloudprovider.ErrServerIsNil + } + output, err := cli.eksClient.DeleteNodegroup(input) + if err != nil { + return nil, err + } + if output == nil || output.Nodegroup == nil { + blog.Errorf("DeleteNodegroup resp is nil") + return nil, fmt.Errorf("DeleteNodegroup resp is nil") + } + blog.Infof("DeleteNodegroup delete nodegroup[%s] successful", *output.Nodegroup.NodegroupName) + + return output.Nodegroup, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks_types.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks_types.go new file mode 100644 index 0000000000..d0b16a93ba --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/eks_types.go @@ -0,0 +1,361 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +// LaunchTemplate describes a launch template. +type LaunchTemplate struct { + // The version number of the default version of the launch template. + DefaultVersionNumber *int64 `locationName:"defaultVersionNumber" type:"long"` + // The version number of the latest version of the launch template. + LatestVersionNumber *int64 `locationName:"latestVersionNumber" type:"long"` + // The ID of the launch template. + LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` + // The name of the launch template. + LaunchTemplateName *string `locationName:"launchTemplateName" min:"3" type:"string"` + // The tags for the launch template. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` +} + +// CreateLaunchTemplateInput represents input when creating launch template +type CreateLaunchTemplateInput struct { + // Unique, case-sensitive identifier you provide to ensure the idempotency of the request. + ClientToken *string `type:"string"` + // The information for the launch template. + LaunchTemplateData *RequestLaunchTemplateData `type:"structure" required:"true" sensitive:"true"` + // A name for the launch template. + LaunchTemplateName *string `min:"3" type:"string" required:"true"` + // The tags to apply to the launch template on creation + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + // A description for the first version of the launch template. + VersionDescription *string `type:"string"` +} + +// RequestLaunchTemplateData represents the information to include in the launch template. +type RequestLaunchTemplateData struct { + // The block device mapping. + BlockDeviceMappings []*LaunchTemplateBlockDeviceMappingRequest `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` + // The Capacity Reservation targeting option + CapacityReservationSpecification *LaunchTemplateCapacityReservationSpecificationRequest `type:"structure"` + // Indicates whether the instance is optimized for Amazon EBS I/O + EbsOptimized *bool `type:"boolean"` + // An elastic GPU to associate with the instance. + ElasticGpuSpecifications []*ElasticGpuSpecification `locationName:"ElasticGpuSpecification" locationNameList:"ElasticGpuSpecification" type:"list"` + // The elastic inference accelerator for the instance. + ElasticInferenceAccelerators []*LaunchTemplateElasticInferenceAccelerator `locationName:"ElasticInferenceAccelerator" locationNameList:"item" type:"list"` + // Indicates whether an instance is enabled for hibernation + HibernationOptions *LaunchTemplateHibernationOptionsRequest `type:"structure"` + // The ID of the AMI. + ImageId *string `type:"string"` + // Indicates whether an instance stops or terminates when you initiate shutdown + // from the instance (using the operating system command for system shutdown) + InstanceInitiatedShutdownBehavior *string `type:"string" enum:"ShutdownBehavior"` + // The instance type + InstanceType *string `type:"string" enum:"InstanceType"` + // The ID of the kernel. + KernelId *string `type:"string"` + // The name of the key pair. + KeyName *string `type:"string"` + // The license configurations. + LicenseSpecifications []*LaunchTemplateLicenseConfigurationRequest `locationName:"LicenseSpecification" locationNameList:"item" type:"list"` + // The metadata options for the instance + MetadataOptions *LaunchTemplateInstanceMetadataOptionsRequest `type:"structure"` + // The monitoring for the instance. + Monitoring *LaunchTemplatesMonitoringRequest `type:"structure"` + // One or more network interfaces + NetworkInterfaces []*LaunchTemplateInstanceNetworkInterfaceSpecificationRequest `locationName:"NetworkInterface" locationNameList:"InstanceNetworkInterfaceSpecification" type:"list"` + // The placement for the instance. + Placement *LaunchTemplatePlacementRequest `type:"structure"` + // The ID of the RAM disk + RamDiskId *string `type:"string"` + // One or more security group IDs + SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + // [EC2-Classic, default VPC] One or more security group names + SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"SecurityGroup" type:"list"` + // The tags to apply to the resources during launch + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"LaunchTemplateTagSpecificationRequest" type:"list"` + // The Base64-encoded user data to make available to the instance + UserData *string `type:"string"` +} + +// LaunchTemplatePlacementRequest describes the placement of an instance. +type LaunchTemplatePlacementRequest struct { + // The affinity setting for an instance on a Dedicated Host. + Affinity *string `type:"string"` + // The Availability Zone for the instance. + AvailabilityZone *string `type:"string"` + // The name of the placement group for the instance. + GroupName *string `type:"string"` + // The ID of the Dedicated Host for the instance. + HostId *string `type:"string"` + // The ARN of the host resource group in which to launch the instances + HostResourceGroupArn *string `type:"string"` + // The number of the partition the instance should launch in. Valid only if + // the placement group strategy is set to partition. + PartitionNumber *int64 `type:"integer"` + // Reserved for future use. + SpreadDomain *string `type:"string"` + // The tenancy of the instance (if the instance is running in a VPC) + Tenancy *string `type:"string" enum:"Tenancy"` +} + +// LaunchTemplateInstanceNetworkInterfaceSpecificationRequest represents the parameters for a network interface +type LaunchTemplateInstanceNetworkInterfaceSpecificationRequest struct { + // Associates a Carrier IP address with eth0 for a new network interface + AssociateCarrierIpAddress *bool `type:"boolean"` + // Associates a public IPv4 address with eth0 for a new network interface + AssociatePublicIpAddress *bool `type:"boolean"` + // Indicates whether the network interface is deleted when the instance is terminated + DeleteOnTermination *bool `type:"boolean"` + // A description for the network interface + Description *string `type:"string"` + // The device index for the network interface attachment + DeviceIndex *int64 `type:"integer"` + // The IDs of one or more security groups + Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + // The type of network interface + InterfaceType *string `type:"string"` + // The number of IPv6 addresses to assign to a network interface + Ipv6AddressCount *int64 `type:"integer"` + // One or more specific IPv6 addresses from the IPv6 CIDR block range of your + // subnet. You can't use this option if you're specifying a number of IPv6 addresses. + Ipv6Addresses []*InstanceIpv6AddressRequest `locationNameList:"InstanceIpv6Address" type:"list"` + // The index of the network card + NetworkCardIndex *int64 `type:"integer"` + // The ID of the network interface + NetworkInterfaceId *string `type:"string"` + // The primary private IPv4 address of the network interface. + PrivateIpAddress *string `type:"string"` + // One or more private IPv4 addresses. + PrivateIpAddresses []*PrivateIpAddressSpecification `locationNameList:"item" type:"list"` + // The number of secondary private IPv4 addresses to assign to a network interface. + SecondaryPrivateIpAddressCount *int64 `type:"integer"` + // The ID of the subnet for the network interface. + SubnetId *string `type:"string"` +} + +// PrivateIpAddressSpecification describes a secondary private IPv4 address for a network interface. +type PrivateIpAddressSpecification struct { + // Indicates whether the private IPv4 address is the primary private IPv4 address. + // Only one IPv4 address can be designated as primary. + Primary *bool `locationName:"primary" type:"boolean"` + // The private IPv4 addresses. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` +} + +// InstanceIpv6AddressRequest describes an IPv6 address. +type InstanceIpv6AddressRequest struct { + // The IPv6 address. + Ipv6Address *string `type:"string"` +} + +// LaunchTemplatesMonitoringRequest describes the monitoring for the instance. +type LaunchTemplatesMonitoringRequest struct { + // Specify true to enable detailed monitoring. Otherwise, basic monitoring is enabled. + Enabled *bool `type:"boolean"` +} + +// LaunchTemplateInstanceMetadataOptionsRequest represents the metadata options for the instance +type LaunchTemplateInstanceMetadataOptionsRequest struct { + // This parameter enables or disables the HTTP metadata endpoint on your instances. + HttpEndpoint *string `type:"string" enum:"LaunchTemplateInstanceMetadataEndpointState"` + // The desired HTTP PUT response hop limit for instance metadata requests. + HttpPutResponseHopLimit *int64 `type:"integer"` + // The state of token usage for your instance metadata requests + HttpTokens *string `type:"string" enum:"LaunchTemplateHttpTokensState"` +} + +// LaunchTemplateLicenseConfigurationRequest describes a license configuration. +type LaunchTemplateLicenseConfigurationRequest struct { + // The Amazon Resource Name (ARN) of the license configuration + LicenseConfigurationArn *string `type:"string"` +} + +// LaunchTemplateHibernationOptionsRequest indicates whether the instance is configured for hibernation +type LaunchTemplateHibernationOptionsRequest struct { + // If you set this parameter to true, the instance is enabled for hibernation + Configured *bool `type:"boolean"` +} + +// LaunchTemplateCapacityReservationSpecificationRequest describes an instance's Capacity Reservation targeting option +type LaunchTemplateCapacityReservationSpecificationRequest struct { + // Indicates the instance's Capacity Reservation preferences + CapacityReservationPreference *string `type:"string" enum:"CapacityReservationPreference"` + // Information about the target Capacity Reservation or Capacity Reservation group + CapacityReservationTarget *CapacityReservationTarget `type:"structure"` +} + +// CapacityReservationTarget describes a target Capacity Reservation or Capacity Reservation group +type CapacityReservationTarget struct { + // The ID of the Capacity Reservation in which to run the instance + CapacityReservationId *string `type:"string"` + // The ARN of the Capacity Reservation resource group in which to run the instance + CapacityReservationResourceGroupArn *string `type:"string"` +} + +// ElasticGpuSpecification indicates a specification for an Elastic Graphics accelerator. +type ElasticGpuSpecification struct { + // The type of Elastic Graphics accelerator + Type *string `type:"string" required:"true"` +} + +// LaunchTemplateElasticInferenceAccelerator describes an elastic inference accelerator. +type LaunchTemplateElasticInferenceAccelerator struct { + // The number of elastic inference accelerators to attach to the instance + Count *int64 `min:"1" type:"integer"` + // The type of elastic inference accelerator. + Type *string `type:"string" required:"true"` +} + +// LaunchTemplateBlockDeviceMappingRequest describes a block device mapping. +type LaunchTemplateBlockDeviceMappingRequest struct { + // The device name (for example, /dev/sdh or xvdh) + DeviceName *string `type:"string"` + // Parameters used to automatically set up EBS volumes when the instance is launched + Ebs *LaunchTemplateEbsBlockDeviceRequest `type:"structure"` + // To omit the device from the block device mapping, specify an empty string + NoDevice *string `type:"string"` + // The virtual device name (ephemeralN) + VirtualName *string `type:"string"` +} + +// LaunchTemplateEbsBlockDeviceRequest describes the parameters for a block device for an EBS volume +type LaunchTemplateEbsBlockDeviceRequest struct { + // Indicates whether the EBS volume is deleted on instance termination + DeleteOnTermination *bool `type:"boolean"` + // Indicates whether the EBS volume is encrypted + Encrypted *bool `type:"boolean"` + // The number of I/O operations per second (IOPS) + Iops *int64 `type:"integer"` + // The ARN of the symmetric AWS Key Management Service (AWS KMS) CMK used for encryption + KmsKeyId *string `type:"string"` + // The ID of the snapshot. + SnapshotId *string `type:"string"` + // The throughput to provision for a gp3 volume, with a maximum of 1,000 MiB/s + Throughput *int64 `type:"integer"` + // The size of the volume, in GiBs + VolumeSize *int64 `type:"integer"` + // The volume type + VolumeType *string `type:"string" enum:"VolumeType"` +} + +// TagSpecification specifies tags to apply to a resource when the resource is being created. When +// you specify a tag, you must specify the resource type to tag, otherwise the +// request will fail +type TagSpecification struct { + // The type of resource to tag on creation. + ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` + // The tags to apply to the resource. + Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list"` +} + +// Tag describes a tag. +type Tag struct { + // The key of the tag. + Key *string `locationName:"key" type:"string"` + // The value of the tag + Value *string `locationName:"value" type:"string"` +} + +// CreateNodegroupInput for create node group +type CreateNodegroupInput struct { + // The AMI type for your node group + AmiType *string `locationName:"amiType" type:"string" enum:"AMITypes"` + // The capacity type for your node group. + CapacityType *string `locationName:"capacityType" type:"string" enum:"CapacityTypes"` + // Identifier that you provide to ensure the idempotency of the request + ClientRequestToken *string `locationName:"clientRequestToken" type:"string" idempotencyToken:"true"` + // The name of the cluster to create the node group in. + ClusterName *string `location:"uri" locationName:"name" type:"string" required:"true"` + // The root device disk size (in GiB) for your node group instances + DiskSize *int64 `locationName:"diskSize" type:"integer"` + // Image ID to create instances + ImageID *string `locationName:"imageID" type:"string"` + // Specify the instance types for a node group + InstanceTypes []*string `locationName:"instanceTypes" type:"list"` + // The Kubernetes labels to be applied to the nodes in the node group + Labels map[string]*string `locationName:"labels" type:"map"` + // An object representing a node group's launch template specification. If specified, + // then do not specify instanceTypes, diskSize, or remoteAccess and make sure + // that the launch template meets the requirements in launchTemplateSpecification. + LaunchTemplate *LaunchTemplateSpecification `locationName:"launchTemplate" type:"structure"` + // The Amazon Resource Name (ARN) of the IAM role to associate with your node group + NodeRole *string `locationName:"nodeRole" type:"string" required:"true"` + // The unique name to give your node group + NodegroupName *string `locationName:"nodegroupName" type:"string" required:"true"` + // The AMI version of the Amazon EKS optimized AMI to use with your node group + ReleaseVersion *string `locationName:"releaseVersion" type:"string"` + // The remote access configuration to use with your node group + RemoteAccess *RemoteAccessConfig `locationName:"remoteAccess" type:"structure"` + // The scaling configuration details for the Auto Scaling group + ScalingConfig *NodegroupScalingConfig `locationName:"scalingConfig" type:"structure"` + // The subnets to use for the Auto Scaling group + Subnets []*string `locationName:"subnets" type:"list" required:"true"` + // The metadata to apply to the node group to assist with categorization and organization + Tags map[string]*string `locationName:"tags" min:"1" type:"map"` + // The Kubernetes taints to be applied to the nodes in the node group + Taints []*Taint `locationName:"taints" type:"list"` + // The node group update configuration + UpdateConfig *NodegroupUpdateConfig `locationName:"updateConfig" type:"structure"` +} + +// LaunchTemplateSpecification represents a node group launch template specification. +// You must specify either the launch template ID or the launch template name +// in the request, but not both. +type LaunchTemplateSpecification struct { + // The ID of the launch template + Id *string `locationName:"id" type:"string"` + // The name of the launch template + Name *string `locationName:"name" type:"string"` + // The version number of the launch template to use + Version *string `locationName:"version" type:"string"` +} + +// RemoteAccessConfig represents the remote access configuration for the managed node group +type RemoteAccessConfig struct { + // The Amazon EC2 SSH key name that provides access for SSH communication with + // the nodes in the managed node group + Ec2SshKey *string `locationName:"ec2SshKey" type:"string"` + // The security group IDs that are allowed SSH access (port 22) to the nodes + SourceSecurityGroups []*string `locationName:"sourceSecurityGroups" type:"list"` +} + +// NodegroupScalingConfig is the scaling configuration details for the Auto Scaling +// group that is associated with your node group. When creating a node group, +// you must specify all or none of the properties. When updating a node group, +// you can specify any or none of the properties. +type NodegroupScalingConfig struct { + // The current number of nodes that the managed node group should maintain + DesiredSize *int64 `locationName:"desiredSize" type:"integer"` + // The maximum number of nodes that the managed node group can scale out to + MaxSize *int64 `locationName:"maxSize" min:"1" type:"integer"` + // The minimum number of nodes that the managed node group can scale in to + MinSize *int64 `locationName:"minSize" type:"integer"` +} + +// Taint allows a node to repel a set of pods +type Taint struct { + // The effect of the taint + Effect *string `locationName:"effect" type:"string" enum:"TaintEffect"` + // The key of the taint + Key *string `locationName:"key" min:"1" type:"string"` + // The value of the taint + Value *string `locationName:"value" type:"string"` +} + +// NodegroupUpdateConfig is the node group update configuration. +type NodegroupUpdateConfig struct { + // The maximum number of nodes unavailable at once during a version update + MaxUnavailable *int64 `locationName:"maxUnavailable" min:"1" type:"integer"` + // The maximum percentage of nodes unavailable during a version update + MaxUnavailablePercentage *int64 `locationName:"maxUnavailablePercentage" min:"1" type:"integer"` +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/iam.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/iam.go new file mode 100644 index 0000000000..4d78bec198 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/iam.go @@ -0,0 +1,63 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +import ( + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/iam" + + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" +) + +// IAMClient aws iam client +type IAMClient struct { + iamClient *iam.IAM +} + +// NewIAMClient init aws iam client +func NewIAMClient(opt *cloudprovider.CommonOption) (*IAMClient, error) { + if opt == nil || opt.Account == nil || len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 { + return nil, cloudprovider.ErrCloudCredentialLost + } + + awsConf := &aws.Config{Credentials: credentials.NewStaticCredentials(opt.Account.SecretID, opt.Account.SecretKey, "")} + sess, err := session.NewSession(awsConf) + if err != nil { + return nil, err + } + + return &IAMClient{ + iamClient: iam.New(sess), + }, nil +} + +// GetRole gets the iam role +func (c *IAMClient) GetRole(input *iam.GetRoleInput) (*iam.Role, error) { + blog.Infof("GetRole input: %", utils.ToJSONString(input)) + output, err := c.iamClient.GetRole(input) + if err != nil { + blog.Errorf("GetRole failed: %v", err) + return nil, err + } + if output == nil || output.Role == nil { + blog.Errorf("GetRole lose response information") + return nil, cloudprovider.ErrCloudLostResponse + } + blog.Infof("GetRole %s successful: %", *input.RoleName) + + return output.Role, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go new file mode 100644 index 0000000000..5b0223ad1b --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go @@ -0,0 +1,261 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package api + +import ( + "fmt" + "strconv" + "strings" + "sync" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/ec2" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" +) + +const ( + defaultRegion = "ap-northeast-1" + limit = 100 +) + +var nodeMgr sync.Once + +func init() { + nodeMgr.Do(func() { + // init Node + cloudprovider.InitNodeManager("aws", &NodeManager{}) + }) +} + +// GetEc2Client get ec2 client from common option +func GetEc2Client(opt *cloudprovider.CommonOption) (*ec2.EC2, error) { + if opt == nil || len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 { + return nil, cloudprovider.ErrCloudCredentialLost + } + + awsConf := &aws.Config{} + awsConf.Credentials = credentials.NewStaticCredentials(opt.Account.SecretID, opt.Account.SecretKey, "") + + sess, err := session.NewSession(awsConf) + if err != nil { + return nil, err + } + + return ec2.New(sess), nil +} + +// NodeManager CVM relative API management +type NodeManager struct { +} + +// GetNodeByIP get specified Node by innerIP address +func (nm *NodeManager) GetNodeByIP(ip string, opt *cloudprovider.GetNodeOption) (*proto.Node, error) { + return nil, nil +} + +// ListNodesByIP list node by IP set +func (nm *NodeManager) ListNodesByIP(ips []string, opt *cloudprovider.ListNodesOption) ([]*proto.Node, error) { + return nil, nil +} + +// GetCVMImageIDByImageName get imageID by imageName +func (nm *NodeManager) GetCVMImageIDByImageName(imageName string, opt *cloudprovider.CommonOption) (string, error) { + return "", nil +} + +// GetCloudRegions get cloud regions +func (nm *NodeManager) GetCloudRegions(opt *cloudprovider.CommonOption) ([]*proto.RegionInfo, error) { + client, err := GetEc2Client(opt) + if err != nil { + blog.Errorf("create ec2 client when GetRegionsInfo failed: %v", err) + return nil, err + } + + input := &ec2.DescribeRegionsInput{ + AllRegions: aws.Bool(true), + } + output, err := client.DescribeRegions(input) + if err != nil { + blog.Errorf("ec2 client DescribeRegions failed: %v", err) + return nil, err + } + + regions := make([]*proto.RegionInfo, 0) + for _, v := range output.Regions { + regions = append(regions, &proto.RegionInfo{ + Region: *v.Endpoint, + RegionName: *v.RegionName, + RegionState: *v.OptInStatus, + }) + } + + return regions, nil +} + +// GetZoneList get zoneList by region +func (nm *NodeManager) GetZoneList(opt *cloudprovider.CommonOption) ([]*proto.ZoneInfo, error) { + client, err := NewEC2Client(opt) + if err != nil { + return nil, fmt.Errorf("create ec2 client failed, err %s", err.Error()) + } + zones, err := client.DescribeAvailabilityZones( + &ec2.DescribeAvailabilityZonesInput{AllAvailabilityZones: aws.Bool(true)}) + if err != nil { + return nil, fmt.Errorf("list regions failed, err %s", err.Error()) + } + var zonesInfo []*proto.ZoneInfo + for _, z := range zones { + zonesInfo = append(zonesInfo, &proto.ZoneInfo{ + ZoneID: *z.ZoneId, + Zone: *z.ZoneId, + ZoneName: *z.ZoneName, + ZoneState: *z.State, + }) + } + + return zonesInfo, nil +} + +// ListNodeInstanceType list node type by zone and node family +func (nm *NodeManager) ListNodeInstanceType(info cloudprovider.InstanceInfo, opt *cloudprovider.CommonOption) ( + []*proto.InstanceType, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// GetExternalNodeByIP get specified Node by innerIP address +func (nm *NodeManager) GetExternalNodeByIP(ip string, opt *cloudprovider.GetNodeOption) (*proto.Node, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// ListNodesByInstanceID list node by instanceIDs +func (nm *NodeManager) ListNodesByInstanceID(ids []string, opt *cloudprovider.ListNodesOption) ([]*proto.Node, error) { + idChunks := utils.SplitStringsChunks(ids, limit) + nodeList := make([]*proto.Node, 0) + + blog.Infof("ListNodesByInstanceID ipChunks %+v", idChunks) + for _, chunk := range idChunks { + if len(chunk) > 0 { + nodes, err := nm.transInstanceIDsToNodes(chunk, opt) + if err != nil { + blog.Errorf("ListNodesByInstanceID failed: %v", err) + return nil, err + } + if len(nodes) == 0 { + continue + } + + nodeList = append(nodeList, nodes...) + } + } + + return nodeList, nil +} + +// transInstanceIDsToNodes trans IDList to Nodes +func (nm *NodeManager) transInstanceIDsToNodes(ids []string, opt *cloudprovider.ListNodesOption) ([]*proto.Node, error) { + client, err := NewEC2Client(opt.Common) + if err != nil { + blog.Errorf("create ec2 client when GetNodeByIP failed, %s", err.Error()) + return nil, err + } + + instances, err := client.DescribeInstances(&ec2.DescribeInstancesInput{InstanceIds: aws.StringSlice(ids)}) + if err != nil { + blog.Errorf("ec2 client DescribeInstances len(%d) ip address failed, %s", len(ids), err.Error()) + return nil, err + } + blog.Infof("ec2 client DescribeInstances len(%d) ip response num %d", len(ids), len(instances)) + + if len(instances) == 0 { + // * no data response + return nil, nil + } + if len(instances) != len(ids) { + blog.Warnf("ec2 client DescribeInstances, expect %d, but got %d") + } + zoneInfo, err := client.DescribeAvailabilityZones(&ec2.DescribeAvailabilityZonesInput{AllAvailabilityZones: aws.Bool(true)}) + if err != nil { + blog.Errorf("ec2 client DescribeAvailabilityZones failed: %v", err) + } + zoneMap := make(map[string]string) + for _, z := range zoneInfo { + zoneMap[*z.ZoneName] = *z.ZoneId + } + + nodeMap := make(map[string]*proto.Node) + var nodes []*proto.Node + for _, inst := range instances { + node := InstanceToNode(inst, zoneMap) + // clean duplicated Node if user input multiple ip that + // belong to one cvm instance + if _, ok := nodeMap[node.NodeID]; ok { + continue + } + + nodeMap[node.NodeID] = node + // default get first privateIP + node.InnerIP = *inst.PrivateIpAddress + node.Region = opt.Common.Region + + // check node vpc and cluster vpc + if !strings.EqualFold(node.VPC, opt.ClusterVPCID) { + return nil, fmt.Errorf(cloudprovider.ErrCloudNodeVPCDiffWithClusterResponse, node.InnerIP) + } + + nodes = append(nodes, node) + } + + return nodes, nil +} + +// InstanceToNode parse Instance information in qcloud to Node in clustermanager +// @param Instance: qcloud instance information, can not be nil; +// @return Node: cluster-manager node information; +func InstanceToNode(inst *ec2.Instance, zoneInfo map[string]string) *proto.Node { + var zoneID int + if zoneInfo != nil { + zoneID, _ = strconv.Atoi(zoneInfo[*inst.Placement.AvailabilityZone]) + } + node := &proto.Node{ + NodeID: *inst.InstanceId, + InstanceType: *inst.InstanceType, + CPU: uint32(*inst.CpuOptions.CoreCount), + GPU: 0, + VPC: *inst.VpcId, + ZoneID: *inst.Placement.AvailabilityZone, + Zone: uint32(zoneID), + } + return node +} + +// ListExternalNodesByIP list node by IP set +func (nm *NodeManager) ListExternalNodesByIP(ips []string, opt *cloudprovider.ListNodesOption) ([]*proto.Node, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// ListOsImage get osimage list +func (nm *NodeManager) ListOsImage(provider string, opt *cloudprovider.CommonOption) ([]*proto.OsImage, error) { + return nil, nil +} + +// ListKeyPairs keyPairs list +func (nm *NodeManager) ListKeyPairs(opt *cloudprovider.CommonOption) ([]*proto.KeyPair, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go new file mode 100644 index 0000000000..ee17148261 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go @@ -0,0 +1,299 @@ +package api + +import ( + "context" + "encoding/base64" + "encoding/json" + "fmt" + "net" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/autoscaling" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/aws/aws-sdk-go/service/eks" + "k8s.io/client-go/rest" + "sigs.k8s.io/aws-iam-authenticator/pkg/token" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + cutils "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/utils" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/types" +) + +const ( + // ResourceTypeLaunchTemplate is a ResourceType enum value + ResourceTypeLaunchTemplate = "launch-template" +) + +var ( + // DefaultUserDataHeader default user data header for creating launch template userdata + DefaultUserDataHeader = "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"==MYBOUNDARY==\"\n\n" + + "-==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n" + // DefaultUserDataTail default user data tail for creating launch template userdata + DefaultUserDataTail = "\n\n--==MYBOUNDARY==--" +) + +var ( + // DeviceName device name list + DeviceName = []string{"/dev/xvdb", "/dev/xvdc", "/dev/xvdd", "/dev/xvde", "/dev/xvdf", "/dev/xvdg", "/dev/xvdh", + "/dev/xvdi", "/dev/xvdj", "/dev/xvdk", "/dev/xvdl", "/dev/xvdm", "/dev/xvdn", "/dev/xvdo", "/dev/xvdp", + "/dev/xvdq", "/dev/xvdr", "/dev/xvds", "/dev/xvdt", "/dev/xvdu", "/dev/xvdv", "/dev/xvdw", "/dev/xvdx", + "/dev/xvdy", "/dev/xvdz", "/dev/xvdba", "/dev/xvdbb", "/dev/xvdbc", "/dev/xvdbd", "/dev/xvdbe", "/dev/xvdbf", + "/dev/xvdbg", "/dev/xvdbh", "/dev/xvdbi", "/dev/xvdbj", "/dev/xvdbk", "/dev/xvdbl", "/dev/xvdbm", "/dev/xvdbn", + "/dev/xvdbo", "/dev/xvdbp", "/dev/xvdbq", "/dev/xvdbr", "/dev/xvdbs", "/dev/xvdbt", "/dev/xvdbu", "/dev/xvdbv", + "/dev/xvdbw", "/dev/xvdbx", "/dev/xvdby", "/dev/xvdbz"} +) + +// AWSClientSet aws client set +type AWSClientSet struct { + *AutoScalingClient + *EC2Client + *EksClient + *IAMClient +} + +// NewSession generates a new aws session +func NewSession(opt *cloudprovider.CommonOption) (*session.Session, error) { + if opt == nil || opt.Account == nil || len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 { + return nil, cloudprovider.ErrCloudCredentialLost + } + if len(opt.Region) == 0 { + return nil, cloudprovider.ErrCloudRegionLost + } + + awsConf := &aws.Config{} + awsConf.Region = aws.String(opt.Region) + awsConf.Credentials = credentials.NewStaticCredentials(opt.Account.SecretID, opt.Account.SecretKey, "") + + sess, err := session.NewSession(awsConf) + if err != nil { + return nil, err + } + return sess, nil +} + +// NewAWSClientSet creates a aws client set +func NewAWSClientSet(opt *cloudprovider.CommonOption) (*AWSClientSet, error) { + sess, err := NewSession(opt) + if err != nil { + return nil, err + } + + iam, err := NewIAMClient(opt) + if err != nil { + return nil, err + } + + return &AWSClientSet{ + AutoScalingClient: &AutoScalingClient{asClient: autoscaling.New(sess)}, + EC2Client: &EC2Client{ec2.New(sess)}, + EksClient: &EksClient{eks.New(sess)}, + IAMClient: &IAMClient{iam.iamClient}, + }, nil +} + +// GetClusterKubeConfig constructs the cluster kubeConfig +func GetClusterKubeConfig(opt *cloudprovider.CommonOption, cluster *eks.Cluster) (string, error) { + sess, err := NewSession(opt) + if err != nil { + return "", err + } + generator, err := token.NewGenerator(false, false) + if err != nil { + return "", err + } + + awsToken, err := generator.GetWithOptions(&token.GetTokenOptions{ + Session: sess, + ClusterID: *cluster.Name, + }) + if err != nil { + return "", err + } + + decodedCA, err := base64.StdEncoding.DecodeString(*cluster.CertificateAuthority.Data) + if err != nil { + return "", err + } + + restConfig := &rest.Config{ + Host: *cluster.Endpoint, + TLSClientConfig: rest.TLSClientConfig{ + CAData: decodedCA, + }, + BearerToken: awsToken.Token, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + } + + cert, err := base64.StdEncoding.DecodeString(*cluster.CertificateAuthority.Data) + if err != nil { + return "", fmt.Errorf("GetClusterKubeConfig invalid certificate failed, cluster=%s: %w", *cluster.Name, err) + } + + saToken, err := cutils.GenerateSATokenByRestConfig(context.Background(), restConfig) + if err != nil { + return "", fmt.Errorf("getClusterKubeConfig generate k8s serviceaccount token failed,cluster=%s: %w", + *cluster.Name, err) + } + + typesConfig := &types.Config{ + APIVersion: "v1", + Kind: "Config", + Clusters: []types.NamedCluster{ + { + Name: *cluster.Name, + Cluster: types.ClusterInfo{ + Server: "https://" + *cluster.Endpoint, + CertificateAuthorityData: cert, + }, + }, + }, + AuthInfos: []types.NamedAuthInfo{ + { + Name: *cluster.Name, + AuthInfo: types.AuthInfo{ + Token: saToken, + }, + }, + }, + Contexts: []types.NamedContext{ + { + Name: *cluster.Name, + Context: types.Context{ + Cluster: *cluster.Name, + AuthInfo: *cluster.Name, + }, + }, + }, + CurrentContext: *cluster.Name, + } + + configByte, err := json.Marshal(typesConfig) + if err != nil { + return "", fmt.Errorf("GetClusterKubeConfig marsh kubeconfig failed, %v", err) + } + + return base64.StdEncoding.EncodeToString(configByte), nil +} + +// MapToTaints converts a map of string-string to a slice of Taint +func MapToTaints(taints []*proto.Taint) []*Taint { + result := make([]*Taint, 0) + for _, v := range taints { + key := v.Key + value := v.Value + effect := v.Effect + result = append(result, &Taint{Key: &key, Value: &value, Effect: &effect}) + } + return result +} + +// MapToAwsTaints converts a map of string-string to a slice of aws Taint +func MapToAwsTaints(taints []*proto.Taint) []*eks.Taint { + result := make([]*eks.Taint, 0) + for _, v := range taints { + key := v.Key + value := v.Value + effect := v.Effect + result = append(result, &eks.Taint{Key: &key, Value: &value, Effect: &effect}) + } + return result +} + +func generateAwsCreateNodegroupInput(input *CreateNodegroupInput) *eks.CreateNodegroupInput { + newInput := &eks.CreateNodegroupInput{ + ClusterName: input.ClusterName, + NodegroupName: input.NodegroupName, + //AmiType: input.AmiType, + ScalingConfig: func(c *NodegroupScalingConfig) *eks.NodegroupScalingConfig { + if c == nil { + return nil + } + return &eks.NodegroupScalingConfig{ + DesiredSize: c.DesiredSize, + MaxSize: c.MaxSize, + MinSize: c.MinSize, + } + }(input.ScalingConfig), + NodeRole: input.NodeRole, + Labels: input.Labels, + Tags: input.Tags, + CapacityType: input.CapacityType, + } + newInput.Taints = make([]*eks.Taint, 0) + for _, v := range input.Taints { + newInput.Taints = append(newInput.Taints, &eks.Taint{ + Key: v.Key, + Value: v.Value, + Effect: v.Effect, + }) + } + if input.LaunchTemplate != nil { + newInput.LaunchTemplate = &eks.LaunchTemplateSpecification{ + Id: input.LaunchTemplate.Id, + Name: input.LaunchTemplate.Name, + Version: input.LaunchTemplate.Version, + } + } + return newInput +} + +// CreateTagSpecs creates tag specs +func CreateTagSpecs(instanceTags map[string]*string) []*ec2.LaunchTemplateTagSpecificationRequest { + if len(instanceTags) == 0 { + return nil + } + + tags := make([]*ec2.Tag, 0) + for key, value := range instanceTags { + tags = append(tags, &ec2.Tag{Key: aws.String(key), Value: value}) + } + return []*ec2.LaunchTemplateTagSpecificationRequest{ + { + ResourceType: aws.String(ec2.ResourceTypeInstance), + Tags: tags, + }, + } +} + +func generateAwsCreateLaunchTemplateInput(input *CreateLaunchTemplateInput) *ec2.CreateLaunchTemplateInput { + awsInput := &ec2.CreateLaunchTemplateInput{ + LaunchTemplateName: input.LaunchTemplateName, + TagSpecifications: generateAwsTagSpecs(input.TagSpecifications), + } + if input.LaunchTemplateData != nil { + awsInput.LaunchTemplateData = &ec2.RequestLaunchTemplateData{ + ImageId: input.LaunchTemplateData.ImageId, + InstanceType: input.LaunchTemplateData.InstanceType, + KeyName: input.LaunchTemplateData.KeyName, + UserData: input.LaunchTemplateData.UserData, + } + } + return awsInput +} + +func generateAwsTagSpecs(tagSpecs []*TagSpecification) []*ec2.TagSpecification { + if tagSpecs == nil { + return nil + } + awsTagSpecs := make([]*ec2.TagSpecification, 0) + for _, t := range tagSpecs { + awsTagSpecs = append(awsTagSpecs, &ec2.TagSpecification{ + ResourceType: t.ResourceType, + Tags: func(t []*Tag) []*ec2.Tag { + awsTags := make([]*ec2.Tag, 0) + for _, v := range t { + awsTags = append(awsTags, &ec2.Tag{Key: v.Key, Value: v.Value}) + } + return awsTags + }(t.Tags), + }) + } + return awsTagSpecs +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go new file mode 100644 index 0000000000..7ea3333f67 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go @@ -0,0 +1,97 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +import ( + "fmt" + "strings" + "sync" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" +) + +var vpcMgr sync.Once + +func init() { + vpcMgr.Do(func() { + // init VPC manager + cloudprovider.InitVPCManager("aws", &VPCManager{}) + }) +} + +// VPCManager is the manager for VPC +type VPCManager struct{} + +// ListVpcs list vpcs +func (vm *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.CloudVpc, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// ListSubnets list vpc subnets +func (vm *VPCManager) ListSubnets(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.Subnet, error) { + locationList := strings.Split(opt.Region, "-") + if len(locationList) == 3 { + opt.Region = strings.Join(locationList[:2], "-") + } + + client, err := GetEc2Client(opt) + if err != nil { + return nil, fmt.Errorf("create google client failed, err %s", err.Error()) + } + output, err := client.DescribeSubnets(&ec2.DescribeSubnetsInput{}) + if err != nil { + return nil, fmt.Errorf("list regions failed, err %s", err.Error()) + } + + result := make([]*proto.Subnet, 0) + for _, v := range output.Subnets { + subnet := &proto.Subnet{ + VpcID: aws.StringValue(v.VpcId), + SubnetID: aws.StringValue(v.SubnetId), + SubnetName: aws.StringValue(v.SubnetId), + CidrRange: aws.StringValue(v.CidrBlock), + Zone: aws.StringValue(v.AvailabilityZone), + } + + ipv6CidrBlocks := make([]string, 0) + for _, y := range v.Ipv6CidrBlockAssociationSet { + ipv6CidrBlocks = append(ipv6CidrBlocks, aws.StringValue(y.Ipv6CidrBlock)) + } + + if len(ipv6CidrBlocks) > 0 { + subnet.Ipv6CidrRange = strings.Join(ipv6CidrBlocks, ",") + } + + result = append(result, subnet) + } + return result, nil +} + +// ListSecurityGroups list security groups +func (vm *VPCManager) ListSecurityGroups(opt *cloudprovider.CommonOption) ([]*proto.SecurityGroup, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// GetCloudNetworkAccountType 查询用户网络类型 +func (vm *VPCManager) GetCloudNetworkAccountType(opt *cloudprovider.CommonOption) (*proto.CloudAccountType, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// ListBandwidthPacks list bandWidthPacks +func (vm *VPCManager) ListBandwidthPacks(opt *cloudprovider.CommonOption) ([]*proto.BandwidthPackageInfo, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go new file mode 100644 index 0000000000..6c85a78b52 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go @@ -0,0 +1,103 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package aws + +import ( + "fmt" + "sync" + + "github.com/aws/aws-sdk-go/service/eks" + + cmproto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" +) + +var cloudInfoMgr sync.Once + +func init() { + cloudInfoMgr.Do(func() { + // init Cluster + cloudprovider.InitCloudInfoManager(cloudName, &CloudInfoManager{}) + }) +} + +// CloudInfoManager management cluster info +type CloudInfoManager struct { +} + +// InitCloudClusterDefaultInfo init cluster defaultConfig +func (c *CloudInfoManager) InitCloudClusterDefaultInfo(cls *cmproto.Cluster, + opt *cloudprovider.InitClusterConfigOption) error { + return nil +} + +// SyncClusterCloudInfo get cluster cloudInfo by clusterID or kubeConfig +func (c *CloudInfoManager) SyncClusterCloudInfo(cls *cmproto.Cluster, + opt *cloudprovider.SyncClusterCloudInfoOption) error { + if c == nil || cls == nil { + return fmt.Errorf("%s SyncClusterCloudInfo request is empty", cloudName) + } + + if opt == nil || opt.Cloud == nil { + return fmt.Errorf("%s SyncClusterCloudInfo option is empty", cloudName) + } + + // get cloud cluster + + client, err := api.NewEksClient(opt.Common) + if err != nil { + return fmt.Errorf("create new eks Client failed: %v", err) + } + + cluster, err := client.GetEksCluster(opt.ImportMode.CloudID) + if err != nil { + return fmt.Errorf("get eks Cluster failed: %v", err) + } + cls.SystemID = *cluster.Name + cls.VpcID = *cluster.ResourcesVpcConfig.VpcId + + kubeConfig, err := api.GetClusterKubeConfig(opt.Common, cluster) + if err != nil { + return fmt.Errorf("SyncClusterCloudInfo GetClusterKubeConfig failed: %v", err) + } + + cls.KubeConfig = kubeConfig + cls.SystemID = *cluster.Name + cls.VpcID = *cluster.ResourcesVpcConfig.VpcId + + // cluster cloud basic setting + clusterBasicSettingByEKS(cls, cluster) + + // cluster cloud network setting + clusterNetworkSettingByEKS(cls, cluster) + + return nil +} + +func clusterBasicSettingByEKS(cls *cmproto.Cluster, cluster *eks.Cluster) { + cls.ClusterBasicSettings = &cmproto.ClusterBasicSetting{ + Version: *cluster.Version, + VersionName: *cluster.Version, + } +} + +func clusterNetworkSettingByEKS(cls *cmproto.Cluster, cluster *eks.Cluster) { + if cluster.KubernetesNetworkConfig.ServiceIpv4Cidr != nil { + cls.NetworkSettings = &cmproto.NetworkSetting{ + ClusterIPv4CIDR: *cluster.KubernetesNetworkConfig.ServiceIpv4Cidr, + ServiceIPv4CIDR: *cluster.KubernetesNetworkConfig.ServiceIpv4Cidr, + } + } +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cluster.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cluster.go index 4b25d4bea2..0499ab7b4e 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cluster.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cluster.go @@ -14,8 +14,11 @@ package aws import ( + "fmt" + "github.com/Tencent/bk-bcs/bcs-common/common/blog" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" ) func init() { @@ -45,8 +48,37 @@ func (c *Cluster) DeleteVirtualCluster(cls *proto.Cluster, // ImportCluster import cluster according cloudprovider func (c *Cluster) ImportCluster(cls *proto.Cluster, opt *cloudprovider.ImportClusterOption) (*proto.Task, error) { - // call qcloud interface to create cluster - return nil, cloudprovider.ErrCloudNotImplemented + // call aws interface to create cluster + if cls == nil { + return nil, fmt.Errorf("qcloud ImportCluster cluster is empty") + } + + if opt == nil || opt.Cloud == nil { + return nil, fmt.Errorf("qcloud ImportCluster cluster opt or cloud is empty") + } + + if len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 || len(opt.Region) == 0 { + return nil, fmt.Errorf("qcloud CreateCluster opt lost valid crendential info") + } + + mgr, err := cloudprovider.GetTaskManager(opt.Cloud.CloudProvider) + if err != nil { + blog.Errorf("get cloud %s TaskManager when ImportCluster %d failed, %s", + opt.Cloud.CloudID, cls.ClusterName, err.Error(), + ) + return nil, err + } + + // build import cluster task + task, err := mgr.BuildImportClusterTask(cls, opt) + if err != nil { + blog.Errorf("build ImportCluster task for cluster %s with cloudprovider %s failed, %s", + cls.ClusterName, cls.Provider, err.Error(), + ) + return nil, err + } + + return task, nil } // DeleteCluster delete kubenretes cluster according cloudprovider @@ -61,7 +93,29 @@ func (c *Cluster) GetCluster(cloudID string, opt *cloudprovider.GetClusterOption // ListCluster get cloud cluster list by region func (c *Cluster) ListCluster(opt *cloudprovider.ListClusterOption) ([]*proto.CloudClusterInfo, error) { - return nil, cloudprovider.ErrCloudNotImplemented + if opt == nil || len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 || len(opt.Region) == 0 { + return nil, fmt.Errorf("qcloud ListCluster cluster lost operation") + } + + cli, err := api.NewEksClient(&opt.CommonOption) + if err != nil { + return nil, err + } + + clusters, err := cli.ListEksCluster() + if err != nil { + return nil, err + } + + cloudClusterList := make([]*proto.CloudClusterInfo, 0) + for _, v := range clusters { + cloudClusterList = append(cloudClusterList, &proto.CloudClusterInfo{ + ClusterID: *v, + ClusterName: *v, + }) + } + + return cloudClusterList, nil } // GetNodesInCluster get all nodes belong to cluster according cloudprovider @@ -82,8 +136,8 @@ func (c *Cluster) DeleteNodesFromCluster(cls *proto.Cluster, nodes []*proto.Node } // CheckClusterCidrAvailable check cluster CIDR nodesNum when add nodes -func (c *Cluster) CheckClusterCidrAvailable(cls *proto.Cluster, - opt *cloudprovider.CheckClusterCIDROption) (bool, error) { +func (c *Cluster) CheckClusterCidrAvailable(cls *proto.Cluster, opt *cloudprovider.CheckClusterCIDROption) (bool, + error) { if cls == nil || opt == nil { return true, nil } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go index ac716e6e56..bd0b8a0e63 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go @@ -13,8 +13,20 @@ package aws import ( + "context" + "fmt" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/Tencent/bk-bcs/bcs-common/pkg/odm/operator" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/actions" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" + storeopt "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/store/options" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/autoscaling" + "github.com/aws/aws-sdk-go/service/eks" ) func init() { @@ -26,32 +38,97 @@ type NodeGroup struct { } // CreateNodeGroup create nodegroup by cloudprovider api, only create NodeGroup entity -func (ng *NodeGroup) CreateNodeGroup(group *proto.NodeGroup, - opt *cloudprovider.CreateNodeGroupOption) (*proto.Task, error) { - return nil, nil +func (ng *NodeGroup) CreateNodeGroup(group *proto.NodeGroup, opt *cloudprovider.CreateNodeGroupOption) (*proto.Task, + error) { + mgr, err := cloudprovider.GetTaskManager(cloudName) + if err != nil { + blog.Errorf("get cloud %s TaskManager when CreateNodeGroup %s failed, %s", + cloudName, group.Name, err.Error(), + ) + return nil, err + } + task, err := mgr.BuildCreateNodeGroupTask(group, opt) + if err != nil { + blog.Errorf("build CreateNodeGroup task for cluster %s with cloudprovider %s failed, %s", + group.ClusterID, cloudName, err.Error(), + ) + return nil, err + } + return task, nil } // DeleteNodeGroup delete nodegroup by cloudprovider api, all nodes belong to NodeGroup // will be released. Task is backgroup automatic task func (ng *NodeGroup) DeleteNodeGroup(group *proto.NodeGroup, nodes []*proto.Node, opt *cloudprovider.DeleteNodeGroupOption) (*proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + mgr, err := cloudprovider.GetTaskManager(cloudName) + if err != nil { + blog.Errorf("get cloud %s TaskManager when DeleteNodeGroup %s failed, %s", + cloudName, group.Name, err.Error(), + ) + return nil, err + } + task, err := mgr.BuildDeleteNodeGroupTask(group, nodes, opt) + if err != nil { + blog.Errorf("build DeleteNodeGroup task for cluster %s with cloudprovider %s failed, %s", + group.ClusterID, cloudName, err.Error(), + ) + return nil, err + } + return task, nil } // UpdateNodeGroup update specified nodegroup configuration -func (ng *NodeGroup) UpdateNodeGroup( - group *proto.NodeGroup, opt *cloudprovider.UpdateNodeGroupOption) (*proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented +func (ng *NodeGroup) UpdateNodeGroup(group *proto.NodeGroup, opt *cloudprovider.UpdateNodeGroupOption) ( + *proto.Task, error) { + _, cluster, err := actions.GetCloudAndCluster(cloudprovider.GetStorageModel(), group.Provider, group.ClusterID) + if err != nil { + blog.Errorf("get cluster %s failed, %s", group.ClusterID, err.Error()) + return nil, err + } + eksCli, err := api.NewEksClient(&opt.CommonOption) + if err != nil { + blog.Errorf("create eks client failed, err: %s", err.Error()) + return nil, err + } + if group.NodeGroupID == "" || group.ClusterID == "" { + blog.Errorf("nodegroup id or cluster id is empty") + return nil, fmt.Errorf("nodegroup id or cluster id is empty") + } + _, err = eksCli.UpdateNodegroupConfig(ng.generateUpdateNodegroupConfigInput(group, cluster.SystemID)) + if err != nil { + return nil, err + } + return nil, nil } -// GetNodesInGroup get all nodes belong to NodeGroup -func (ng *NodeGroup) GetNodesInGroup(group *proto.NodeGroup, opt *cloudprovider.CommonOption) ([]*proto.Node, error) { - return nil, cloudprovider.ErrCloudNotImplemented +func (ng *NodeGroup) generateUpdateNodegroupConfigInput(group *proto.NodeGroup, + cluster string) *eks.UpdateNodegroupConfigInput { + input := &eks.UpdateNodegroupConfigInput{ + ClusterName: &cluster, + NodegroupName: &group.CloudNodeGroupID, + Labels: &eks.UpdateLabelsPayload{ + AddOrUpdateLabels: aws.StringMap(group.Labels), + }, + } + if group.AutoScaling != nil { + input.ScalingConfig = &eks.NodegroupScalingConfig{ + MaxSize: aws.Int64(int64(group.AutoScaling.MaxSize)), + MinSize: aws.Int64(int64(group.AutoScaling.MinSize)), + } + } + if group.NodeTemplate != nil && group.NodeTemplate.Taints != nil { + input.Taints = &eks.UpdateTaintsPayload{ + AddOrUpdateTaints: api.MapToAwsTaints(group.NodeTemplate.Taints), + } + } + + return input } -// GetNodesInGroupV2 get nodeGroup nodes by v2 version -func (ng *NodeGroup) GetNodesInGroupV2(group *proto.NodeGroup, - opt *cloudprovider.CommonOption) ([]*proto.NodeGroupNode, error) { +// GetNodesInGroup get all nodes belong to NodeGroup +func (ng *NodeGroup) GetNodesInGroup(group *proto.NodeGroup, opt *cloudprovider.CommonOption) ([]*proto.Node, + error) { return nil, cloudprovider.ErrCloudNotImplemented } @@ -64,25 +141,95 @@ func (ng *NodeGroup) MoveNodesToGroup(nodes []*proto.Node, group *proto.NodeGrou // RemoveNodesFromGroup remove nodes from NodeGroup, nodes are still in cluster func (ng *NodeGroup) RemoveNodesFromGroup(nodes []*proto.Node, group *proto.NodeGroup, opt *cloudprovider.RemoveNodesOption) error { - return cloudprovider.ErrCloudNotImplemented + if group.ClusterID == "" || group.NodeGroupID == "" { + blog.Errorf("nodegroup id or cluster id is empty") + return fmt.Errorf("nodegroup id or cluster id is empty") + } + client, err := api.NewAutoScalingClient(&opt.CommonOption) + if err != nil { + blog.Errorf("create gce client failed, err: %s", err.Error()) + return err + } + ids := make([]string, 0) + for _, v := range nodes { + ids = append(ids, v.NodeID) + } + _, err = client.DetachInstances(&autoscaling.DetachInstancesInput{ + AutoScalingGroupName: aws.String(group.AutoScaling.AutoScalingName), + InstanceIds: aws.StringSlice(ids), + }) + return err } // CleanNodesInGroup clean specified nodes in NodeGroup, func (ng *NodeGroup) CleanNodesInGroup(nodes []*proto.Node, group *proto.NodeGroup, opt *cloudprovider.CleanNodesOption) (*proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + if len(nodes) == 0 || opt == nil || opt.Cluster == nil || opt.Cloud == nil { + return nil, fmt.Errorf("invalid request") + } + + mgr, err := cloudprovider.GetTaskManager(cloudName) + if err != nil { + blog.Errorf("get cloud %s TaskManager when CleanNodesInGroup %s failed, %s", + cloudName, group.Name, err.Error()) + return nil, err + } + task, err := mgr.BuildCleanNodesInGroupTask(nodes, group, opt) + if err != nil { + blog.Errorf("build CleanNodesInGroup task for cluster %s with cloudprovider %s failed, %s", + group.ClusterID, cloudName, err.Error()) + return nil, err + } + return task, nil } // UpdateDesiredNodes update nodegroup desired node func (ng *NodeGroup) UpdateDesiredNodes(desiredNode uint32, group *proto.NodeGroup, opt *cloudprovider.UpdateDesiredNodeOption) (*cloudprovider.ScalingResponse, error) { - return nil, cloudprovider.ErrCloudNotImplemented + if group == nil || opt == nil || opt.Cluster == nil || opt.Cloud == nil { + return nil, fmt.Errorf("invalid request") + } + + taskType := cloudprovider.GetTaskType(opt.Cloud.CloudProvider, cloudprovider.UpdateNodeGroupDesiredNode) + + cond := operator.NewLeafCondition(operator.Eq, operator.M{ + "clusterid": opt.Cluster.ClusterID, + "tasktype": taskType, + "nodegroupid": group.NodeGroupID, + "status": cloudprovider.TaskStatusRunning, + }) + taskList, err := cloudprovider.GetStorageModel().ListTask(context.Background(), cond, &storeopt.ListOption{}) + if err != nil { + blog.Errorf("UpdateDesiredNodes failed: %v", err) + return nil, err + } + if len(taskList) != 0 { + return nil, fmt.Errorf("%d %s task(s) is still running", len(taskList), taskType) + } + + return &cloudprovider.ScalingResponse{ + ScalingUp: desiredNode, + }, nil } // SwitchNodeGroupAutoScaling switch nodegroup autoscaling func (ng *NodeGroup) SwitchNodeGroupAutoScaling(group *proto.NodeGroup, enable bool, opt *cloudprovider.SwitchNodeGroupAutoScalingOption) (*proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + mgr, err := cloudprovider.GetTaskManager(cloudName) + if err != nil { + blog.Errorf("get cloud %s TaskManager when SwitchNodeGroupAutoScaling %s failed, %s", + cloudName, group.NodeGroupID, err.Error(), + ) + return nil, err + } + task, err := mgr.BuildSwitchNodeGroupAutoScalingTask(group, enable, opt) + if err != nil { + blog.Errorf("build SwitchNodeGroupAutoScaling task for nodeGroup %s with cloudprovider %s failed, %s", + group.NodeGroupID, cloudName, err.Error(), + ) + return nil, err + } + return task, nil } // CreateAutoScalingOption create cluster autoscaling option, cloudprovider will @@ -104,28 +251,58 @@ func (ng *NodeGroup) DeleteAutoScalingOption(scalingOption *proto.ClusterAutoSca // Implementation is optional. func (ng *NodeGroup) UpdateAutoScalingOption(scalingOption *proto.ClusterAutoScalingOption, opt *cloudprovider.UpdateScalingOption) (*proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + mgr, err := cloudprovider.GetTaskManager(cloudName) + if err != nil { + blog.Errorf("get cloud %s TaskManager when UpdateAutoScalingOption %s failed, %s", + cloudName, scalingOption.ClusterID, err.Error(), + ) + return nil, err + } + task, err := mgr.BuildUpdateAutoScalingOptionTask(scalingOption, opt) + if err != nil { + blog.Errorf("build UpdateAutoScalingOption task for cluster %s with cloudprovider %s failed, %s", + scalingOption.ClusterID, cloudName, err.Error(), + ) + return nil, err + } + return task, nil } // SwitchAutoScalingOptionStatus switch cluster autoscaling option status func (ng *NodeGroup) SwitchAutoScalingOptionStatus(scalingOption *proto.ClusterAutoScalingOption, enable bool, opt *cloudprovider.CommonOption) (*proto.Task, error) { + mgr, err := cloudprovider.GetTaskManager(cloudName) + if err != nil { + blog.Errorf("get cloud %s TaskManager when SwitchAutoScalingOptionStatus %s failed, %s", + cloudName, scalingOption.ClusterID, err.Error(), + ) + return nil, err + } + task, err := mgr.BuildSwitchAsOptionStatusTask(scalingOption, enable, opt) + if err != nil { + blog.Errorf("build SwitchAutoScalingOptionStatus task for cluster %s with cloudprovider %s failed, %s", + scalingOption.ClusterID, cloudName, err.Error(), + ) + return nil, err + } + return task, nil +} + +func (ng *NodeGroup) GetNodesInGroupV2(group *proto.NodeGroup, + opt *cloudprovider.CommonOption) ([]*proto.NodeGroupNode, error) { return nil, cloudprovider.ErrCloudNotImplemented } -// AddExternalNodeToCluster add external to cluster -func (ng *NodeGroup) AddExternalNodeToCluster(group *proto.NodeGroup, nodes []*proto.Node, - opt *cloudprovider.AddExternalNodesOption) (*proto.Task, error) { +func (ng *NodeGroup) AddExternalNodeToCluster(group *proto.NodeGroup, + nodes []*proto.Node, opt *cloudprovider.AddExternalNodesOption) (*proto.Task, error) { return nil, cloudprovider.ErrCloudNotImplemented } -// DeleteExternalNodeFromCluster remove external node from cluster -func (ng *NodeGroup) DeleteExternalNodeFromCluster(group *proto.NodeGroup, nodes []*proto.Node, - opt *cloudprovider.DeleteExternalNodesOption) (*proto.Task, error) { +func (ng *NodeGroup) DeleteExternalNodeFromCluster(group *proto.NodeGroup, + nodes []*proto.Node, opt *cloudprovider.DeleteExternalNodesOption) (*proto.Task, error) { return nil, cloudprovider.ErrCloudNotImplemented } -// GetExternalNodeScript get nodegroup external node script func (ng *NodeGroup) GetExternalNodeScript(group *proto.NodeGroup) (string, error) { return "", cloudprovider.ErrCloudNotImplemented } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go new file mode 100644 index 0000000000..0eb17cfe70 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go @@ -0,0 +1,589 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package aws + +import ( + "fmt" + "strconv" + "strings" + "sync" + "time" + + "github.com/google/uuid" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/common" +) + +var taskMgr sync.Once + +func init() { + taskMgr.Do(func() { + cloudprovider.InitTaskManager(cloudName, newtask()) + }) +} + +func newtask() *Task { + task := &Task{ + works: make(map[string]interface{}), + } + + // import task + task.works[importClusterNodesStep.StepMethod] = tasks.ImportClusterNodesTask + task.works[registerClusterKubeConfigStep.StepMethod] = tasks.RegisterClusterKubeConfigTask + + // create nodeGroup task + task.works[createCloudNodeGroupStep.StepMethod] = tasks.CreateCloudNodeGroupTask + task.works[checkCloudNodeGroupStatusStep.StepMethod] = tasks.CheckCloudNodeGroupStatusTask + + // delete nodeGroup task + task.works[deleteNodeGroupStep.StepMethod] = tasks.DeleteCloudNodeGroupTask + + // update desired nodes task + task.works[applyInstanceMachinesStep.StepMethod] = tasks.ApplyInstanceMachinesTask + task.works[checkClusterNodesStatusStep.StepMethod] = tasks.CheckClusterNodesStatusTask + + // clean node in nodeGroup task + task.works[cleanNodeGroupNodesStep.StepMethod] = tasks.CleanNodeGroupNodesTask + + return task +} + +// Task eks cluster task struct +type Task struct { + works map[string]interface{} +} + +// Name get cloudName +func (t *Task) Name() string { + return cloudName +} + +// GetAllTask register all backgroup task for worker running +func (t *Task) GetAllTask() map[string]interface{} { + return t.works +} + +// BuildCreateVirtualClusterTask build create virtual cluster task +func (t *Task) BuildCreateVirtualClusterTask(cls *proto.Cluster, + opt *cloudprovider.CreateVirtualClusterOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildDeleteVirtualClusterTask build delete virtual cluster task +func (t *Task) BuildDeleteVirtualClusterTask(cls *proto.Cluster, + opt *cloudprovider.DeleteVirtualClusterOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildCreateClusterTask build create cluster task +func (t *Task) BuildCreateClusterTask(cls *proto.Cluster, opt *cloudprovider.CreateClusterOption) ( + *proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildImportClusterTask build import cluster task +func (t *Task) BuildImportClusterTask(cls *proto.Cluster, opt *cloudprovider.ImportClusterOption) ( + *proto.Task, error) { + // validate request params + if cls == nil { + return nil, fmt.Errorf("BuildImportClusterTask cluster info empty") + } + if opt == nil || opt.Cloud == nil { + return nil, fmt.Errorf("BuildImportClusterTask TaskOptions is lost") + } + + // init task information + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.ImportCluster), + TaskName: cloudprovider.ImportClusterTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: cls.ClusterID, + ProjectID: cls.ProjectID, + Creator: opt.Operator, + Updater: opt.Operator, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + } + + // setting all steps details + importCluster := &ImportClusterTaskOption{Cluster: cls} + // step1: import cluster registerKubeConfigStep + importCluster.BuildRegisterKubeConfigStep(task) + // step2: import cluster nodes step + importCluster.BuildImportClusterNodesStep(task) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildImportClusterTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.OperatorKey.String()] = opt.Operator + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.ImportClusterJob.String() + + return task, nil +} + +// BuildDeleteClusterTask build deleteCluster task +func (t *Task) BuildDeleteClusterTask(cls *proto.Cluster, opt *cloudprovider.DeleteClusterOption) ( + *proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildAddNodesToClusterTask build addNodes task +func (t *Task) BuildAddNodesToClusterTask(cls *proto.Cluster, nodes []*proto.Node, + opt *cloudprovider.AddNodesOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildRemoveNodesFromClusterTask build removeNodes task +func (t *Task) BuildRemoveNodesFromClusterTask(cls *proto.Cluster, nodes []*proto.Node, + opt *cloudprovider.DeleteNodesOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildCreateNodeGroupTask build create node group task +func (t *Task) BuildCreateNodeGroupTask(group *proto.NodeGroup, opt *cloudprovider.CreateNodeGroupOption) ( + *proto.Task, error) { + // validate request params + if group == nil { + return nil, fmt.Errorf("BuildCreateNodeGroupTask group info empty") + } + if opt == nil { + return nil, fmt.Errorf("BuildCreateNodeGroupTask TaskOptions is lost") + } + + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.CreateNodeGroup), + TaskName: cloudprovider.CreateNodeGroupTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: group.ClusterID, + ProjectID: group.ProjectID, + Creator: group.Creator, + Updater: group.Updater, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + NodeGroupID: group.NodeGroupID, + } + // generate taskName + taskName := fmt.Sprintf(createNodeGroupTaskTemplate, group.ClusterID, group.Name) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + // setting all steps details + createNodeGroup := &CreateNodeGroupTaskOption{Group: group} + // step1. call gke create node group + createNodeGroup.BuildCreateCloudNodeGroupStep(task) + // step2. wait gke create node group complete + createNodeGroup.BuildCheckCloudNodeGroupStatusStep(task) + // step3. ensure autoscaler in cluster + common.BuildEnsureAutoScalerTaskStep(task, group.ClusterID, group.Provider) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildCreateNodeGroupTask task StepSequence empty") + } + + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.CreateNodeGroupJob.String() + + return task, nil +} + +// BuildCleanNodesInGroupTask clean specified nodes in NodeGroup +// including remove nodes from NodeGroup, clean data in nodes +func (t *Task) BuildCleanNodesInGroupTask(nodes []*proto.Node, group *proto.NodeGroup, + opt *cloudprovider.CleanNodesOption) (*proto.Task, error) { + // clean nodeGroup nodes in cloud only has two steps: + // 1. call asg RemoveInstances to clean cluster nodes + + // validate request params + if nodes == nil { + return nil, fmt.Errorf("BuildCleanNodesInGroupTask nodes info empty") + } + if group == nil { + return nil, fmt.Errorf("BuildCleanNodesInGroupTask group info empty") + } + if opt == nil || len(opt.Operator) == 0 || opt.Cluster == nil { + return nil, fmt.Errorf("BuildCleanNodesInGroupTask TaskOptions is lost") + } + + var ( + nodeIPs, nodeIDs = make([]string, 0), make([]string, 0) + ) + for _, node := range nodes { + nodeIPs = append(nodeIPs, node.InnerIP) + nodeIDs = append(nodeIDs, node.NodeID) + } + + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.CleanNodeGroupNodes), + TaskName: cloudprovider.CleanNodesInGroupTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: group.ClusterID, + ProjectID: group.ProjectID, + Creator: group.Creator, + Updater: group.Updater, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + NodeGroupID: group.NodeGroupID, + } + // generate taskName + taskName := fmt.Sprintf(cleanNodeGroupNodesTaskTemplate, group.ClusterID, group.Name) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + // setting all steps details + cleanNodes := &CleanNodeInGroupTaskOption{ + Group: group, + NodeIPs: nodeIPs, + NodeIds: nodeIDs, + Operator: opt.Operator, + } + + // step1: cluster scaleIn to clean cluster nodes + common.BuildCordonNodesTaskStep(task, opt.Cluster.ClusterID, nodeIPs) + // step2: cluster delete nodes + cleanNodes.BuildCleanNodeGroupNodesStep(task) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildCleanNodesInGroupTask task StepSequence empty") + } + + task.CurrentStep = task.StepSequence[0] + + // set global task paras + task.CommonParams[cloudprovider.NodeIDsKey.String()] = strings.Join(nodeIDs, ",") + task.CommonParams[cloudprovider.NodeIPsKey.String()] = strings.Join(nodeIPs, ",") + + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.CleanNodeGroupNodesJob.String() + return task, nil +} + +// BuildDeleteNodeGroupTask when delete nodegroup, we need to create background +// task to clean all nodes in nodegroup, release all resource in cloudprovider, +// finnally delete nodes information in local storage. +// @param group: need to delete +func (t *Task) BuildDeleteNodeGroupTask(group *proto.NodeGroup, nodes []*proto.Node, + opt *cloudprovider.DeleteNodeGroupOption) (*proto.Task, error) { + // validate request params + if group == nil { + return nil, fmt.Errorf("BuildDeleteNodeGroupTask group info empty") + } + if opt == nil { + return nil, fmt.Errorf("BuildDeleteNodeGroupTask TaskOptions is lost") + } + + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.DeleteNodeGroup), + TaskName: cloudprovider.DeleteNodeGroupTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: group.ClusterID, + ProjectID: group.ProjectID, + Creator: group.Creator, + Updater: group.Updater, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + NodeGroupID: group.NodeGroupID, + } + // generate taskName + taskName := fmt.Sprintf(deleteNodeGroupTaskTemplate, group.ClusterID, group.Name) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + // setting all steps details + deleteNodeGroup := &DeleteNodeGroupTaskOption{Group: group} + // step1. call gke delete node group + deleteNodeGroup.BuildDeleteNodeGroupStep(task) + // step2: update autoscaler component + common.BuildEnsureAutoScalerTaskStep(task, group.ClusterID, group.Provider) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildDeleteNodeGroupTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.DeleteNodeGroupJob.String() + return task, nil +} + +// BuildMoveNodesToGroupTask build move nodes to group task +func (t *Task) BuildMoveNodesToGroupTask(nodes []*proto.Node, group *proto.NodeGroup, + opt *cloudprovider.MoveNodesOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildUpdateDesiredNodesTask build update desired nodes task +func (t *Task) BuildUpdateDesiredNodesTask(desired uint32, group *proto.NodeGroup, + opt *cloudprovider.UpdateDesiredNodeOption) (*proto.Task, error) { + // validate request params + if desired == 0 { + return nil, fmt.Errorf("BuildUpdateDesiredNodesTask desired is zero") + } + if group == nil { + return nil, fmt.Errorf("BuildUpdateDesiredNodesTask group info empty") + } + if opt == nil || len(opt.Operator) == 0 || opt.Cluster == nil { + return nil, fmt.Errorf("BuildUpdateDesiredNodesTask TaskOptions is lost") + } + + // generate main task + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.UpdateNodeGroupDesiredNode), + TaskName: cloudprovider.UpdateDesiredNodesTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: group.ClusterID, + ProjectID: group.ProjectID, + Creator: group.Creator, + Updater: group.Updater, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + NodeGroupID: group.NodeGroupID, + } + // generate taskName + taskName := fmt.Sprintf(updateNodeGroupDesiredNodeTemplate, group.ClusterID, group.Name) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + passwd := group.LaunchTemplate.InitLoginPassword + task.CommonParams[cloudprovider.PasswordKey.String()] = passwd + + // setting all steps details + updateDesired := &UpdateDesiredNodesTaskOption{ + Group: group, + Desired: desired, + Operator: opt.Operator, + } + // step1. call qcloud interface to set desired nodes + updateDesired.BuildApplyInstanceMachinesStep(task) + // step2. check cluster nodes and all nodes status is running + updateDesired.BuildCheckClusterNodeStatusStep(task) + // install gse agent + common.BuildInstallGseAgentTaskStep(task, &common.GseInstallInfo{ + ClusterId: opt.Cluster.ClusterID, + BusinessId: opt.Cluster.BusinessID, + CloudArea: group.GetArea(), + User: group.GetLaunchTemplate().GetInitLoginUsername(), + Passwd: passwd, + KeyInfo: group.GetLaunchTemplate().GetKeyPair(), + Port: "", + }) + // transfer host module + if group.NodeTemplate != nil && group.NodeTemplate.Module != nil && + len(group.NodeTemplate.Module.ScaleOutModuleID) != 0 { + common.BuildTransferHostModuleStep(task, opt.Cluster.BusinessID, group.NodeTemplate.Module.ScaleOutModuleID) + } + common.BuildUnCordonNodesTaskStep(task, group.ClusterID, nil) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildUpdateDesiredNodesTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + + // must set job-type + task.CommonParams[cloudprovider.ScalingNodesNumKey.String()] = strconv.Itoa(int(desired)) + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.UpdateNodeGroupDesiredNodeJob.String() + return task, nil +} + +// BuildSwitchNodeGroupAutoScalingTask ensure auto scaler status and update nodegroup status to normal +func (t *Task) BuildSwitchNodeGroupAutoScalingTask(group *proto.NodeGroup, enable bool, + opt *cloudprovider.SwitchNodeGroupAutoScalingOption) (*proto.Task, error) { + // validate request params + if group == nil { + return nil, fmt.Errorf("BuildSwitchNodeGroupAutoScalingTask nodegroup info empty") + } + if opt == nil { + return nil, fmt.Errorf("BuildSwitchNodeGroupAutoScalingTask TaskOptions is lost") + } + + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.SwitchNodeGroupAutoScaling), + TaskName: cloudprovider.SwitchAutoScalingOptionStatusTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: group.ClusterID, + NodeGroupID: group.NodeGroupID, + ProjectID: group.ProjectID, + Creator: group.Creator, + Updater: group.Updater, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + } + // generate taskName + taskName := fmt.Sprintf(switchNodeGroupAutoScalingTaskTemplate, group.ClusterID, group.Name) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + // setting all steps details + // step1. ensure auto scaler + common.BuildEnsureAutoScalerTaskStep(task, group.ClusterID, group.Provider) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildSwitchNodeGroupAutoScalingTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.SwitchNodeGroupAutoScalingJob.String() + return task, nil +} + +// BuildUpdateAutoScalingOptionTask update auto scaling option +func (t *Task) BuildUpdateAutoScalingOptionTask(scalingOption *proto.ClusterAutoScalingOption, + opt *cloudprovider.UpdateScalingOption) (*proto.Task, error) { + // validate request params + if scalingOption == nil { + return nil, fmt.Errorf("BuildUpdateAutoScalingOptionTask scaling option info empty") + } + if opt == nil { + return nil, fmt.Errorf("BuildUpdateAutoScalingOptionTask TaskOptions is lost") + } + + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.UpdateAutoScalingOption), + TaskName: cloudprovider.UpdateAutoScalingOptionTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: scalingOption.ClusterID, + ProjectID: scalingOption.ProjectID, + Creator: scalingOption.Creator, + Updater: scalingOption.Updater, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + } + // generate taskName + taskName := fmt.Sprintf(updateAutoScalingOptionTemplate, scalingOption.ClusterID) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + // setting all steps details + // step1. ensure auto scaler + common.BuildEnsureAutoScalerTaskStep(task, scalingOption.ClusterID, scalingOption.Provider) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildUpdateAutoScalingOptionTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.UpdateAutoScalingOptionJob.String() + return task, nil +} + +// BuildSwitchAsOptionStatusTask switch auto scaling option status +func (t *Task) BuildSwitchAsOptionStatusTask(scalingOption *proto.ClusterAutoScalingOption, enable bool, + opt *cloudprovider.CommonOption) (*proto.Task, error) { + // validate request params + if scalingOption == nil { + return nil, fmt.Errorf("BuildSwitchAutoScalingOptionStatusTask scalingOption info empty") + } + if opt == nil { + return nil, fmt.Errorf("BuildSwitchAutoScalingOptionStatusTask TaskOptions is lost") + } + + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.SwitchAutoScalingOptionStatus), + TaskName: cloudprovider.SwitchNodeGroupAutoScalingTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: scalingOption.ClusterID, + ProjectID: scalingOption.ProjectID, + Creator: scalingOption.Creator, + Updater: scalingOption.Updater, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + } + // generate taskName + taskName := fmt.Sprintf(switchAutoScalingOptionStatusTemplate, scalingOption.ClusterID) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + // setting all steps details + // step1. ensure auto scaler + common.BuildEnsureAutoScalerTaskStep(task, scalingOption.ClusterID, scalingOption.Provider) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildSwitchAutoScalingOptionStatusTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.SwitchAutoScalingOptionStatusJob.String() + return task, nil +} + +// BuildUpdateNodeGroupTask when update nodegroup, we need to create background task, +func (t *Task) BuildUpdateNodeGroupTask(group *proto.NodeGroup, opt *cloudprovider.CommonOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildAddExternalNodeToCluster add external to cluster +func (t *Task) BuildAddExternalNodeToCluster(group *proto.NodeGroup, nodes []*proto.Node, + opt *cloudprovider.AddExternalNodesOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} + +// BuildDeleteExternalNodeFromCluster remove external node from cluster +func (t *Task) BuildDeleteExternalNodeFromCluster(group *proto.NodeGroup, nodes []*proto.Node, + opt *cloudprovider.DeleteExternalNodesOption) (*proto.Task, error) { + return nil, cloudprovider.ErrCloudNotImplemented +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/cleanNodesInGroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/cleanNodesInGroup.go new file mode 100644 index 0000000000..ac9ff97787 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/cleanNodesInGroup.go @@ -0,0 +1,153 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package tasks + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/avast/retry-go" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" +) + +// CleanNodeGroupNodesTask clean node group nodes task +func CleanNodeGroupNodesTask(taskID string, stepName string) error { + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + return nil + } + + // extract parameter && check validate + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + nodeIDs := strings.Split(state.Task.CommonParams[cloudprovider.NodeIDsKey.String()], ",") + + if len(clusterID) == 0 || len(nodeGroupID) == 0 || len(cloudID) == 0 || len(nodeIDs) == 0 { + blog.Errorf("CleanNodeGroupNodesTask[%s]: check parameter validate failed", taskID) + retErr := fmt.Errorf("CleanNodeGroupNodesTask check parameters failed") + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + NodeGroupID: nodeGroupID, + }) + if err != nil { + blog.Errorf("CleanNodeGroupNodesTask[%s]: GetClusterDependBasicInfo failed: %s", taskID, err.Error()) + retErr := fmt.Errorf("CleanNodeGroupNodesTask GetClusterDependBasicInfo failed") + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + if dependInfo.NodeGroup.AutoScaling == nil || dependInfo.NodeGroup.AutoScaling.AutoScalingID == "" { + blog.Errorf("CleanNodeGroupNodesTask[%s]: nodegroup %s in task %s step %s has no autoscaling group", + taskID, nodeGroupID, taskID, stepName) + retErr := fmt.Errorf("get autoScalingID err, %v", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // inject taskID + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + err = removeAsgInstances(ctx, dependInfo, nodeIDs) + if err != nil { + blog.Errorf("CleanNodeGroupNodesTask[%s] nodegroup %s removeAsgInstances failed: %v", + taskID, nodeGroupID, err) + retErr := fmt.Errorf("removeAsgInstances err, %v", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update step + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CleanNodeGroupNodesTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + return nil +} + +func removeAsgInstances(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, nodeIDs []string) error { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + asgName, err := getAsgNameByNodeGroup(ctx, info) + if err != nil { + return fmt.Errorf("removeAsgInstances[%s] getAsgIDByNodePool failed: %v", taskID, err) + } + + asCli, err := api.NewAutoScalingClient(info.CmOption) + if err != nil { + blog.Errorf("removeAsgInstances[%s] get as client failed: %v", taskID, err.Error()) + return err + } + + // check instances if exist + var ( + instanceIDList, validateInstances = make([]string, 0), make([]string, 0) + ) + asgInstances, err := getInstancesFromAsg(asCli, asgName, taskID) + if err != nil { + blog.Errorf("removeAsgInstances[%s] getInstancesFromAsg[%s] failed: %v", taskID, asgName, err.Error()) + return err + } + for _, ins := range asgInstances { + instanceIDList = append(instanceIDList, *ins.InstanceId) + } + for _, id := range nodeIDs { + if utils.StringInSlice(id, instanceIDList) { + validateInstances = append(validateInstances, id) + } + } + if len(validateInstances) == 0 { + blog.Infof("removeAsgInstances[%s] validateInstances is empty", taskID) + return nil + } + + blog.Infof("removeAsgInstances[%s] validateInstances[%v]", taskID, validateInstances) + ec2Cli, err := api.NewEC2Client(info.CmOption) + if err != nil { + blog.Errorf("removeAsgInstances[%s] get ec2 client failed: %v", taskID, err.Error()) + return err + } + err = retry.Do(func() error { + _, err := ec2Cli.TerminateInstances(&ec2.TerminateInstancesInput{InstanceIds: aws.StringSlice(validateInstances)}) + if err != nil { + blog.Errorf("removeAsgInstances[%s] RemoveInstances failed: %v", taskID, err) + return err + } + + blog.Infof("removeAsgInstances[%s] RemoveInstances[%v] successful", taskID, nodeIDs) + return nil + }, retry.Attempts(3)) + + if err != nil { + return err + } + + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/createNodeGroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/createNodeGroup.go new file mode 100644 index 0000000000..46181d71ae --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/createNodeGroup.go @@ -0,0 +1,541 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package tasks + +import ( + "context" + "encoding/base64" + "fmt" + "strconv" + "strings" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/autoscaling" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/aws/aws-sdk-go/service/eks" + "github.com/aws/aws-sdk-go/service/iam" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" + icommon "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/loop" +) + +const ( + launchTemplateNameFormat = "bcs-managed-lt-%s" + launchTemplateTagKey = "bcs-managed-template" + launchTemplateTagValue = "do-not-modify-or-delete" + defaultStorageDeviceName = "/dev/xvda" +) + +// CreateCloudNodeGroupTask create cloud node group task +func CreateCloudNodeGroupTask(taskID string, stepName string) error { + start := time.Now() + // get task information and validate + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + if step == nil { + return nil + } + + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + NodeGroupID: nodeGroupID, + }) + if err != nil { + blog.Errorf("CreateCloudNodeGroupTask[%s]: GetClusterDependBasicInfo failed: %s", taskID, err.Error()) + retErr := fmt.Errorf("CreateCloudNodeGroupTask GetClusterDependBasicInfo failed") + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + cmOption := dependInfo.CmOption + cluster := dependInfo.Cluster + group := dependInfo.NodeGroup + + // step login started here + client, err := api.NewAWSClientSet(cmOption) + if err != nil { + blog.Errorf("CreateCloudNodeGroupTask[%s]: get aws clientSet for nodegroup[%s] in task %s step %s failed, %s", + taskID, nodeGroupID, taskID, stepName, err.Error()) + retErr := fmt.Errorf("get aws client set err, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return err + } + + // set default value for nodegroup + if group.AutoScaling != nil && group.AutoScaling.VpcID == "" { + group.AutoScaling.VpcID = cluster.VpcID + } + + ng, err := client.CreateNodegroup(generateCreateNodegroupInput(group, cluster, client)) + if err != nil { + blog.Errorf("CreateCloudNodeGroupTask[%s]: call CreateClusterNodePool[%s] api in task %s step %s failed, %s", + taskID, nodeGroupID, taskID, stepName, err.Error()) + retErr := fmt.Errorf("call CreateClusterNodePool[%s] api err, %s", nodeGroupID, err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + blog.Infof("CreateCloudNodeGroupTask[%s]: call CreateClusterNodePool successful", taskID) + group.CloudNodeGroupID = *ng.NodegroupName + + // update nodegorup cloudNodeGroupID + err = updateNodeGroupCloudNodeGroupID(nodeGroupID, group) + if err != nil { + blog.Errorf("CreateCloudNodeGroupTask[%s]: updateNodeGroupCloudNodeGroupID[%s] in task %s step %s failed, %s", + taskID, nodeGroupID, taskID, stepName, err.Error()) + retErr := fmt.Errorf("call CreateCloudNodeGroupTask updateNodeGroupCloudNodeGroupID[%s] api err, %s", nodeGroupID, + err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + blog.Infof("CreateCloudNodeGroupTask[%s]: call CreateNodegroup updateNodeGroupCloudNodeGroupID successful", + taskID) + + // update response information to task common params + if state.Task.CommonParams == nil { + state.Task.CommonParams = make(map[string]string) + } + + state.Task.CommonParams["CloudNodeGroupID"] = *ng.NodegroupName + // update step + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CreateCloudNodeGroupTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + return nil +} + +func generateCreateNodegroupInput(group *proto.NodeGroup, cluster *proto.Cluster, + cli *api.AWSClientSet) *api.CreateNodegroupInput { + if group.AutoScaling == nil || group.LaunchTemplate == nil || group.LaunchTemplate.SystemDisk == nil { + return nil + } + sysDiskSize, _ := strconv.Atoi(group.LaunchTemplate.SystemDisk.DiskSize) + nodeGroup := &api.CreateNodegroupInput{ + ClusterName: &cluster.SystemID, + NodegroupName: &group.NodeGroupID, + ScalingConfig: &api.NodegroupScalingConfig{ + DesiredSize: aws.Int64(0), + MaxSize: aws.Int64(int64(group.AutoScaling.MaxSize)), + MinSize: aws.Int64(int64(group.AutoScaling.MinSize)), + }, + DiskSize: aws.Int64(int64(sysDiskSize)), + Tags: aws.StringMap(group.Tags), + Labels: aws.StringMap(group.Labels), + } + nodeGroup.CapacityType = &group.LaunchTemplate.InstanceChargeType + if nodeGroup.CapacityType != aws.String(eks.CapacityTypesOnDemand) && + nodeGroup.CapacityType != aws.String(eks.CapacityTypesSpot) { + nodeGroup.CapacityType = aws.String(eks.CapacityTypesOnDemand) + } + if group.NodeTemplate != nil { + nodeGroup.Taints = api.MapToTaints(group.NodeTemplate.Taints) + } + + lt, err := createLaunchTemplate(cluster.SystemID, cli.EC2Client) + if err != nil { + blog.Errorf("create launch template failed, %v", err) + return nil + } + nodeGroup.LaunchTemplate, err = createNewLaunchTemplateVersion(*lt.LaunchTemplateId, nodeGroup, group, cli.EC2Client) + if err != nil { + blog.Errorf("createNewLaunchTemplateVersion failed, %v", err) + return nil + } + + role, err := cli.GetRole(&iam.GetRoleInput{RoleName: aws.String(group.NodeRole)}) + if err != nil { + blog.Errorf("GetRole failed, %v", err) + return nil + } + nodeGroup.NodeRole = role.Arn + + return nodeGroup +} + +func createLaunchTemplate(clusterName string, cli *api.EC2Client) (*api.LaunchTemplate, error) { + // Create first version of the launch template as default version. It will not be used for any node group. + lt, err := cli.DescribeLaunchTemplates(&ec2.DescribeLaunchTemplatesInput{ + LaunchTemplateNames: []*string{aws.String(fmt.Sprintf(launchTemplateNameFormat, clusterName))}}) + if err != nil { + if strings.Contains(err.Error(), "does not exist") { + launchTemplateCreateInput := &api.CreateLaunchTemplateInput{ + LaunchTemplateName: aws.String(fmt.Sprintf(launchTemplateNameFormat, clusterName)), + LaunchTemplateData: &api.RequestLaunchTemplateData{ + UserData: aws.String("bcs managed lt user data"), + }, + TagSpecifications: []*api.TagSpecification{ + { + ResourceType: aws.String(api.ResourceTypeLaunchTemplate), + Tags: []*api.Tag{ + { + Key: aws.String(launchTemplateTagKey), + Value: aws.String(launchTemplateTagValue), + }, + }, + }, + }, + } + output, err := cli.CreateLaunchTemplate(launchTemplateCreateInput) + if err != nil { + return nil, err + } + return &api.LaunchTemplate{ + LaunchTemplateName: output.LaunchTemplateName, + LaunchTemplateId: output.LaunchTemplateId, + LatestVersionNumber: output.LatestVersionNumber, + }, nil + } + return nil, err + } + + return &api.LaunchTemplate{ + LaunchTemplateName: lt[0].LaunchTemplateName, + LaunchTemplateId: lt[0].LaunchTemplateId, + LatestVersionNumber: lt[0].LatestVersionNumber, + }, nil +} + +func createNewLaunchTemplateVersion(ltID string, input *api.CreateNodegroupInput, group *proto.NodeGroup, + cli *api.EC2Client) (*api.LaunchTemplateSpecification, error) { + ltData, err := buildLaunchTemplateData(input, group, cli) + if err != nil { + return nil, err + } + + launchTemplateVersionInput := &ec2.CreateLaunchTemplateVersionInput{ + LaunchTemplateData: ltData, + LaunchTemplateId: aws.String(ltID), + } + + output, err := cli.CreateLaunchTemplateVersion(launchTemplateVersionInput) + if err != nil { + return nil, err + } + version := strconv.Itoa(int(*output.VersionNumber)) + + return &api.LaunchTemplateSpecification{ + Id: output.LaunchTemplateName, + Name: output.LaunchTemplateId, + Version: aws.String(version), + }, nil +} + +func buildLaunchTemplateData(input *api.CreateNodegroupInput, group *proto.NodeGroup, cli *api.EC2Client) ( + *ec2.RequestLaunchTemplateData, error) { + var imageID *string + if group.LaunchTemplate.ImageInfo != nil { + imageID = aws.String(group.LaunchTemplate.ImageInfo.ImageID) + } + + deviceName := aws.String(defaultStorageDeviceName) + if rootDeviceName, err := getImageRootDeviceName([]*string{imageID}, cli); err != nil { + return nil, err + } else if rootDeviceName != nil { + deviceName = rootDeviceName + } + + userdata := group.LaunchTemplate.UserData + if userdata != "" { + userdata = api.DefaultUserDataHeader + userdata + api.DefaultUserDataTail + userdata = base64.StdEncoding.EncodeToString([]byte(userdata)) + } + + launchTemplateData := &ec2.RequestLaunchTemplateData{ + ImageId: imageID, + KeyName: aws.String(group.LaunchTemplate.SshKey), + UserData: aws.String(userdata), + InstanceType: aws.String(group.LaunchTemplate.InstanceType), + SecurityGroupIds: aws.StringSlice(group.LaunchTemplate.SecurityGroupIDs), + BlockDeviceMappings: []*ec2.LaunchTemplateBlockDeviceMappingRequest{ + { + DeviceName: deviceName, + Ebs: &ec2.LaunchTemplateEbsBlockDeviceRequest{ + VolumeSize: input.DiskSize, + DeleteOnTermination: aws.Bool(true), + VolumeType: aws.String(group.LaunchTemplate.SystemDisk.DiskType), + }, + }, + }, + TagSpecifications: api.CreateTagSpecs(aws.StringMap(group.Tags)), + } + + if len(group.LaunchTemplate.DataDisks) != 0 { + for k, v := range group.LaunchTemplate.DataDisks { + if k >= len(api.DeviceName) { + return nil, fmt.Errorf("data disks counts can't larger than %d", len(api.DeviceName)) + } + size, err := strconv.Atoi(v.DiskSize) + if err != nil { + return nil, err + } + launchTemplateData.BlockDeviceMappings = append(launchTemplateData.BlockDeviceMappings, + &ec2.LaunchTemplateBlockDeviceMappingRequest{ + DeviceName: aws.String(api.DeviceName[k]), + Ebs: &ec2.LaunchTemplateEbsBlockDeviceRequest{ + VolumeSize: aws.Int64(int64(size)), + DeleteOnTermination: aws.Bool(true), + VolumeType: aws.String(v.DiskType), + }, + }) + } + } + launchTemplateData.InstanceType = aws.String(group.LaunchTemplate.InstanceType) + + return launchTemplateData, nil +} + +func getImageRootDeviceName(imageID []*string, cli *api.EC2Client) (*string, error) { + describeOutput, err := cli.DescribeImages(&ec2.DescribeImagesInput{ImageIds: imageID}) + if err != nil { + return nil, err + } + return describeOutput.RootDeviceName, nil +} + +// CheckCloudNodeGroupStatusTask check cloud node group status task +func CheckCloudNodeGroupStatusTask(taskID string, stepName string) error { + start := time.Now() + // get task information and validate + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + if step == nil { + return nil + } + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + NodeGroupID: nodeGroupID, + }) + if err != nil { + blog.Errorf("CheckCloudNodeGroupStatusTask[%s]: GetClusterDependBasicInfo failed: %v", taskID, err) + retErr := fmt.Errorf("GetClusterDependBasicInfo failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + cmOption := dependInfo.CmOption + cluster := dependInfo.Cluster + group := dependInfo.NodeGroup + + // get eks client + client, err := api.NewAWSClientSet(cmOption) + if err != nil { + blog.Errorf("CheckCloudNodeGroupStatusTask[%s]: get aws clientSet for nodegroup[%s] failed, %s", + taskID, nodeGroupID, err.Error()) + retErr := fmt.Errorf("get aws client set err, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return err + } + + // wait node group state to normal + ctx, cancel := context.WithTimeout(context.TODO(), 20*time.Minute) + defer cancel() + var asgName, ltName, ltVersion *string + err = loop.LoopDoFunc(ctx, func() error { + ng, errPool := client.DescribeNodegroup(&group.CloudNodeGroupID, &cluster.SystemID) + if errPool != nil { + blog.Errorf("CheckCloudNodeGroupStatusTask[%s] DescribeNodegroup[%s] failed: %v", taskID, + group.CloudNodeGroupID, errPool) + return nil + } + if ng == nil { + return nil + } + + if ng.Resources != nil && ng.Resources.AutoScalingGroups != nil { + asgName = ng.Resources.AutoScalingGroups[0].Name + } + if ng.LaunchTemplate != nil { + ltName = ng.LaunchTemplate.Name + ltVersion = ng.LaunchTemplate.Version + } + switch { + case *ng.Status == api.NodeGroupStatusCreating: + blog.Infof("taskID[%s] DescribeNodegroup[%s] still creating, status[%s]", + taskID, group.CloudNodeGroupID, *ng.Status) + return nil + case *ng.Status == api.NodeGroupStatusActive: + return loop.EndLoop + case *ng.Status == api.NodeGroupStatusCreateFailed: + return fmt.Errorf("create nodegroup[%s] failed, status[%s]", group.CloudNodeGroupID, *ng.Status) + default: + return nil + } + }, loop.LoopInterval(5*time.Second)) + if err != nil { + blog.Errorf("CheckCloudNodeGroupStatusTask[%s]: DescribeNodegroup failed: %v", taskID, err) + retErr := fmt.Errorf("DescribeNodegroup failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + asgInfo, ltvInfo, err := getAsgAndLtv(client, asgName, ltName, ltVersion) + if err != nil { + blog.Errorf("CheckCloudNodeGroupStatusTask[%s]: getAsgAndLtv failed: %v", taskID, err) + retErr := fmt.Errorf("getAsgAndLtv failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + err = cloudprovider.GetStorageModel().UpdateNodeGroup(context.Background(), generateNodeGroupFromAsgAndLtv(group, + asgInfo[0], ltvInfo[0])) + if err != nil { + blog.Errorf("CheckCloudNodeGroupStatusTask[%s]: UpdateNodeGroup[%s] failed, %s", + taskID, nodeGroupID, err.Error()) + retErr := fmt.Errorf("CheckCloudNodeGroupStatusTask UpdateNodeGroup[%s] err, %s", + nodeGroupID, err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update response information to task common params + if state.Task.CommonParams == nil { + state.Task.CommonParams = make(map[string]string) + } + + // update step + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CheckCloudNodeGroupStatusTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + return nil +} + +func getAsgAndLtv(client *api.AWSClientSet, asgName, ltName, ltVersion *string) ([]*autoscaling.Group, + []*ec2.LaunchTemplateVersion, error) { + // get asg info + asgInfo, err := client.DescribeAutoScalingGroups(&autoscaling.DescribeAutoScalingGroupsInput{ + AutoScalingGroupNames: []*string{asgName}}) + if err != nil { + return nil, nil, err + } + // get launchTemplateVersion + ltvInfo, err := client.DescribeLaunchTemplateVersions(&ec2.DescribeLaunchTemplateVersionsInput{ + LaunchTemplateName: ltName, Versions: []*string{ltVersion}}) + if err != nil { + return nil, nil, err + } + + return asgInfo, ltvInfo, nil +} + +func generateNodeGroupFromAsgAndLtv(group *proto.NodeGroup, asg *autoscaling.Group, + ltv *ec2.LaunchTemplateVersion) *proto.NodeGroup { + group = generateNodeGroupFromAsg(group, asg) + return generateNodeGroupFromLtv(group, ltv) +} + +func generateNodeGroupFromAsg(group *proto.NodeGroup, asg *autoscaling.Group) *proto.NodeGroup { + if asg.AutoScalingGroupName != nil { + group.AutoScaling.AutoScalingName = *asg.AutoScalingGroupName + group.AutoScaling.AutoScalingID = *asg.AutoScalingGroupName + } + if asg.MaxSize != nil { + group.AutoScaling.MinSize = uint32(*asg.MaxSize) + } + if asg.MinSize != nil { + group.AutoScaling.MinSize = uint32(*asg.MinSize) + } + if asg.DesiredCapacity != nil { + group.AutoScaling.DesiredSize = uint32(*asg.DesiredCapacity) + } + if asg.DefaultCooldown != nil { + group.AutoScaling.DefaultCooldown = uint32(*asg.DefaultCooldown) + } + if asg.VPCZoneIdentifier != nil { + subnetIDs := strings.Split(*asg.VPCZoneIdentifier, ",") + group.AutoScaling.SubnetIDs = subnetIDs + } + + return group +} + +func generateNodeGroupFromLtv(group *proto.NodeGroup, ltv *ec2.LaunchTemplateVersion) *proto.NodeGroup { + if ltv.LaunchTemplateId != nil { + group.LaunchTemplate.LaunchConfigurationID = *ltv.LaunchTemplateId + } + if ltv.LaunchTemplateName != nil { + group.LaunchTemplate.LaunchConfigureName = *ltv.LaunchTemplateName + } + if ltv.LaunchTemplateData != nil { + group.LaunchTemplate.InstanceType = *ltv.LaunchTemplateData.InstanceType + if ltv.LaunchTemplateData.SecurityGroupIds != nil { + group.LaunchTemplate.SecurityGroupIDs = make([]string, 0) + for _, v := range ltv.LaunchTemplateData.SecurityGroupIds { + group.LaunchTemplate.SecurityGroupIDs = append(group.LaunchTemplate.SecurityGroupIDs, *v) + } + } + group.LaunchTemplate.ImageInfo = &proto.ImageInfo{ImageID: *ltv.LaunchTemplateData.ImageId} + group.LaunchTemplate.UserData = *ltv.LaunchTemplateData.UserData + if ltv.LaunchTemplateData.Monitoring != nil { + group.LaunchTemplate.IsMonitorService = *ltv.LaunchTemplateData.Monitoring.Enabled + } + } + + return group +} + +// UpdateCreateNodeGroupDBInfoTask update create node group db info task +func UpdateCreateNodeGroupDBInfoTask(taskID string, stepName string) error { + start := time.Now() + // get task information and validate + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + if step == nil { + return nil + } + + // step login started here + nodeGroupID := step.Params["NodeGroupID"] + + np, err := cloudprovider.GetStorageModel().GetNodeGroup(context.Background(), nodeGroupID) + if err != nil { + blog.Errorf("UpdateCreateNodeGroupDBInfoTask[%s]: get cluster for %s failed", taskID, nodeGroupID) + retErr := fmt.Errorf("get nodegroup information failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + np.Status = icommon.StatusRunning + + err = cloudprovider.GetStorageModel().UpdateNodeGroup(context.Background(), np) + if err != nil { + blog.Errorf("UpdateCreateNodeGroupDBInfoTask[%s]: update nodegroup status for %s failed", taskID, np.Status) + } + + // update step + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("UpdateCreateNodeGroupDBInfoTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/deleteNodeGroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/deleteNodeGroup.go new file mode 100644 index 0000000000..c9f1c90b8d --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/deleteNodeGroup.go @@ -0,0 +1,111 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package tasks + +import ( + "fmt" + "strings" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/service/eks" + + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" +) + +// DeleteCloudNodeGroupTask delete cloud node group task +func DeleteCloudNodeGroupTask(taskID string, stepName string) error { + start := time.Now() + // get task information and validate + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + if step == nil { + return nil + } + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + NodeGroupID: nodeGroupID, + }) + if err != nil { + blog.Errorf("DeleteCloudNodeGroupTask[%s]: getClusterDependBasicInfo failed: %v", taskID, err) + retErr := fmt.Errorf("getClusterDependBasicInfo failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + cmOption := dependInfo.CmOption + cluster := dependInfo.Cluster + group := dependInfo.NodeGroup + + // create node group + eksCli, err := api.NewEksClient(cmOption) + if err != nil { + blog.Errorf("DeleteCloudNodeGroupTask[%s]: get eks client for nodegroup[%s] in task %s step %s failed, %s", + taskID, nodeGroupID, taskID, stepName, err.Error()) + retErr := fmt.Errorf("get eks client err, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return err + } + found := true + if group.CloudNodeGroupID != "" { + _, err := eksCli.DescribeNodegroup(&group.CloudNodeGroupID, &cluster.SystemID) + if err != nil { + if strings.Contains(err.Error(), "ResourceNotFoundException") { + blog.Warnf("DeleteCloudNodeGroupTask[%s]: nodegroup[%s/%s] in task %s step %s not found, skip delete", + taskID, nodeGroupID, group.CloudNodeGroupID, stepName, stepName) + found = false + } else { + blog.Errorf( + "DeleteCloudNodeGroupTask[%s]: call DescribeClusterNodePoolDetail[%s] api in task %s step %s failed, %s", + taskID, nodeGroupID, taskID, stepName, err.Error()) + retErr := fmt.Errorf("call DescribeClusterNodePoolDetail[%s] api err, %s", nodeGroupID, err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + } + } + if found && group.CloudNodeGroupID != "" { + _, err = eksCli.DeleteNodegroup(&eks.DeleteNodegroupInput{ + NodegroupName: &group.CloudNodeGroupID, + ClusterName: &cluster.SystemID}) + if err != nil { + blog.Errorf("DeleteCloudNodeGroupTask[%s]: call DeleteNodegroup[%s] api in task %s step %s failed, %s", + taskID, nodeGroupID, taskID, stepName, err.Error()) + retErr := fmt.Errorf("call DeleteNodegroup[%s] api err, %s", nodeGroupID, err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + } + blog.Infof("DeleteCloudNodeGroupTask[%s]: call DeleteNodegroup successful", taskID) + + // update response information to task common params + if state.Task.CommonParams == nil { + state.Task.CommonParams = make(map[string]string) + } + + // update step + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("DeleteCloudNodeGroupTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/importCluster.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/importCluster.go new file mode 100644 index 0000000000..46bfb6622b --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/importCluster.go @@ -0,0 +1,203 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package tasks + +import ( + "context" + "encoding/base64" + "encoding/json" + "fmt" + "time" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/types" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + k8scorev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/clientcmd" +) + +// RegisterClusterKubeConfigTask register cluster kubeConfig connection +func RegisterClusterKubeConfigTask(taskID string, stepName string) error { + start := time.Now() + // get task information and validate + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + if step == nil { + return nil + } + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + + basicInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("RegisterClusterKubeConfigTask[%s]: getClusterDependBasicInfo failed: %v", taskID, err) + retErr := fmt.Errorf("getClusterDependBasicInfo failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + + err = importClusterCredential(ctx, basicInfo) + if err != nil { + blog.Errorf("RegisterClusterKubeConfigTask[%s]: importClusterCredential failed: %v", taskID, err) + retErr := fmt.Errorf("importClusterCredential failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("RegisterClusterKubeConfigTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} + +func importClusterCredential(ctx context.Context, data *cloudprovider.CloudDependBasicInfo) error { + configByte, err := base64.StdEncoding.DecodeString(data.Cluster.KubeConfig) + if err != nil { + return fmt.Errorf("failed to decode kubeconfig, %v", err) + } + typesConfig := &types.Config{} + err = json.Unmarshal(configByte, typesConfig) + if err != nil { + return fmt.Errorf("failed to unmarshal kubeconfig, %v", err) + } + err = cloudprovider.UpdateClusterCredentialByConfig(data.Cluster.ClusterID, typesConfig) + if err != nil { + return err + } + + return nil +} + +// ImportClusterNodesTask call gkeInterface or kubeConfig import cluster nodes +func ImportClusterNodesTask(taskID string, stepName string) error { + start := time.Now() + // get task information and validate + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + if step == nil { + return nil + } + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + + basicInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("ImportClusterNodesTask[%s]: getClusterDependBasicInfo failed: %v", taskID, err) + retErr := fmt.Errorf("getClusterDependBasicInfo failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // import cluster instances + err = importClusterInstances(basicInfo) + if err != nil { + blog.Errorf("ImportClusterNodesTask[%s]: importClusterInstances failed: %v", taskID, err) + retErr := fmt.Errorf("importClusterInstances failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update cluster masterNodes info + err = cloudprovider.GetStorageModel().UpdateCluster(context.Background(), basicInfo.Cluster) + if err != nil { + blog.Errorf("ImportClusterNodesTask[%s]: update cluster failed: %v", taskID, err) + retErr := fmt.Errorf("update cluster failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("ImportClusterNodesTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} + +func importClusterInstances(data *cloudprovider.CloudDependBasicInfo) error { + kubeConfigByte, err := base64.StdEncoding.DecodeString(data.Cluster.KubeConfig) + if err != nil { + return fmt.Errorf("decode kube config failed: %v", err) + } + + config, err := clientcmd.RESTConfigFromKubeConfig(kubeConfigByte) + if err != nil { + return fmt.Errorf("build rest config failed: %v", err) + } + + config.Burst = 200 + config.QPS = 100 + kubeCli, err := kubernetes.NewForConfig(config) + if err != nil { + return fmt.Errorf("build kube client failed: %s", err) + } + + nodes, err := kubeCli.CoreV1().Nodes().List(context.Background(), metav1.ListOptions{}) + if err != nil { + return fmt.Errorf("list nodes failed, %s", err.Error()) + } + + err = importClusterNodesToCM(context.Background(), nodes.Items, data.Cluster.ClusterID) + if err != nil { + return fmt.Errorf("inport cluster nodes to cm failed, %s", err.Error()) + } + + return nil +} + +// ImportClusterNodesToCM writes cluster nodes to DB +func importClusterNodesToCM(ctx context.Context, nodes []k8scorev1.Node, clusterID string) error { + for i := range nodes { + ipv4, ipv6 := utils.GetNodeIPAddress(&nodes[i]) + node := &proto.Node{ + InnerIP: utils.SliceToString(ipv4), + InnerIPv6: utils.SliceToString(ipv6), + Status: common.StatusRunning, + NodeName: nodes[i].Name, + ClusterID: clusterID, + } + err := cloudprovider.GetStorageModel().CreateNode(ctx, node) + if err != nil { + blog.Errorf("ImportClusterNodesToCM CreateNode[%s] failed: %v", nodes[i].Name, err) + } + } + + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/updateDesiredNodes.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/updateDesiredNodes.go new file mode 100644 index 0000000000..a14a9f75ed --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/updateDesiredNodes.go @@ -0,0 +1,442 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package tasks + +import ( + "context" + "errors" + "fmt" + "strconv" + "strings" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/avast/retry-go" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/autoscaling" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/aws/aws-sdk-go/service/eks" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/loop" +) + +// ApplyInstanceMachinesTask update desired nodes task +func ApplyInstanceMachinesTask(taskID string, stepName string) error { + start := time.Now() + + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + return nil + } + + // extract parameter && check validate + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + desiredNodes := step.Params[cloudprovider.ScalingNodesNumKey.String()] + nodeNum, _ := strconv.Atoi(desiredNodes) + operator := step.Params[cloudprovider.OperatorKey.String()] + if len(clusterID) == 0 || len(nodeGroupID) == 0 || len(cloudID) == 0 || len(desiredNodes) == 0 || len(operator) == 0 { + blog.Errorf("ApplyInstanceMachinesTask[%s]: check parameter validate failed", taskID) + retErr := fmt.Errorf("ApplyInstanceMachinesTask check parameters failed") + _ = cloudprovider.UpdateNodeGroupDesiredSize(nodeGroupID, nodeNum, true) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + NodeGroupID: nodeGroupID, + }) + if err != nil { + blog.Errorf("ApplyInstanceMachinesTask[%s]: GetClusterDependBasicInfo failed: %s", taskID, err.Error()) + retErr := fmt.Errorf("ApplyInstanceMachinesTask GetClusterDependBasicInfo failed") + _ = cloudprovider.UpdateNodeGroupDesiredSize(nodeGroupID, nodeNum, true) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // inject taskID + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + err = applyInstanceMachines(ctx, dependInfo, uint64(nodeNum)) + if err != nil { + blog.Errorf("ApplyInstanceMachinesTask[%s]: applyInstanceMachines failed: %s", taskID, err.Error()) + retErr := fmt.Errorf("ApplyInstanceMachinesTask applyInstanceMachines failed") + _ = cloudprovider.UpdateNodeGroupDesiredSize(nodeGroupID, nodeNum, true) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // trans success nodes to cm DB and record common paras, not handle error + _ = recordClusterInstanceToDB(ctx, state, dependInfo, uint64(nodeNum)) + + // update step + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("ApplyInstanceMachinesTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + return nil +} + +// applyInstanceMachines apply machines from asg +func applyInstanceMachines(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, nodeNum uint64) error { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + asgName, err := getAsgNameByNodeGroup(ctx, info) + if err != nil { + return fmt.Errorf("applyInstanceMachines[%s] getAsgNameByNodeGroup failed: %v", taskID, err) + } + + asCli, err := api.NewAutoScalingClient(info.CmOption) + if err != nil { + return err + } + + err = loop.LoopDoFunc(context.Background(), func() error { + err = asCli.SetDesiredCapacity(asgName, int64(nodeNum)) + if err != nil { + if strings.Contains(err.Error(), autoscaling.ErrCodeScalingActivityInProgressFault) { + blog.Infof("applyInstanceMachines[%s] ScaleOutInstances: %v", taskID, + autoscaling.ErrCodeScalingActivityInProgressFault) + return nil + } + blog.Errorf("applyInstanceMachines[%s] ScaleOutInstances failed: %v", taskID, err) + return err + } + return loop.EndLoop + }, loop.LoopInterval(10*time.Second)) + if err != nil { + return fmt.Errorf("applyInstanceMachines[%s] SetDesiredCapacity failed: %v", taskID, err) + } + + return nil +} + +func getInstancesFromAsg(asCli *api.AutoScalingClient, asgName, taskID string) ([]*autoscaling.Instance, error) { + asgInfo, err := asCli.DescribeAutoScalingGroups(&autoscaling.DescribeAutoScalingGroupsInput{ + AutoScalingGroupNames: []*string{&asgName}}) + if err != nil { + blog.Errorf("taskID[%s] DescribeAutoScalingGroups[%s] failed: %v", taskID, asgName, err) + return nil, err + } + var instances []*autoscaling.Instance + if asgInfo != nil { + instances = asgInfo[0].Instances + } + return instances, nil +} + +// recordClusterInstanceToDB already auto build instances to cluster, thus not handle error +func recordClusterInstanceToDB(ctx context.Context, state *cloudprovider.TaskState, + info *cloudprovider.CloudDependBasicInfo, nodeNum uint64) error { + // get success instances + var ( + successInstanceID []string + failedInstanceID []string + ) + taskID := cloudprovider.GetTaskIDFromContext(ctx) + asgName, err := getAsgNameByNodeGroup(ctx, info) + if err != nil { + return fmt.Errorf("applyInstanceMachines[%s] getAsgNameByNodeGroup failed: %v", taskID, err) + } + asCli, err := api.NewAutoScalingClient(info.CmOption) + if err != nil { + return err + } + instances, err := getInstancesFromAsg(asCli, asgName, taskID) + if err != nil { + return err + } + for _, ins := range instances { + if *ins.LifecycleState == api.InstanceLifecycleStateInService { + successInstanceID = append(successInstanceID, *ins.InstanceId) + } else { + failedInstanceID = append(failedInstanceID, *ins.InstanceId) + } + } + // rollback desired num + if len(successInstanceID) != int(nodeNum) { + _ = cloudprovider.UpdateNodeGroupDesiredSize(info.NodeGroup.NodeGroupID, int(nodeNum)-len(successInstanceID), true) + } + + // record instanceIDs to task common + if state.Task.CommonParams == nil { + state.Task.CommonParams = make(map[string]string) + } + // remove existed instanceID + var newInstancesID []string + for _, n := range successInstanceID { + if existNode, _ := cloudprovider.GetStorageModel().GetNode(ctx, n); existNode != nil && existNode.InnerIP != "" { + continue + } + newInstancesID = append(newInstancesID, n) + } + if len(newInstancesID) > 0 { + state.Task.CommonParams[cloudprovider.SuccessNodeIDsKey.String()] = strings.Join(newInstancesID, ",") + state.Task.CommonParams[cloudprovider.NodeIDsKey.String()] = strings.Join(newInstancesID, ",") + } + if len(failedInstanceID) > 0 { + state.Task.CommonParams[cloudprovider.FailedNodeIDsKey.String()] = strings.Join(failedInstanceID, ",") + } + + // record successNodes to cluster manager DB + nodeIPs, err := transInstancesToNode(ctx, successInstanceID, info) + if err != nil { + blog.Errorf("recordClusterInstanceToDB[%s] failed: %v", taskID, err) + } + if len(nodeIPs) > 0 { + state.Task.CommonParams[cloudprovider.NodeIPsKey.String()] = strings.Join(nodeIPs, ",") + } + + return nil +} + +// transInstancesToNode record success nodes to cm DB +func transInstancesToNode(ctx context.Context, successInstanceID []string, info *cloudprovider.CloudDependBasicInfo) ( + []string, error) { + var ( + client = api.NodeManager{} + nodes = make([]*proto.Node, 0) + nodeIPs = make([]string, 0) + err error + ) + + taskID := cloudprovider.GetTaskIDFromContext(ctx) + err = retry.Do(func() error { + nodes, err = client.ListNodesByInstanceID(successInstanceID, &cloudprovider.ListNodesOption{ + Common: info.CmOption, + ClusterVPCID: info.Cluster.VpcID, + }) + if err != nil { + return err + } + return nil + }, retry.Attempts(3)) + if err != nil { + blog.Errorf("transInstancesToNode[%s] failed: %v", taskID, err) + return nil, err + } + + for _, n := range nodes { + nodeIPs = append(nodeIPs, n.InnerIP) + n.ClusterID = info.NodeGroup.ClusterID + n.NodeGroupID = info.NodeGroup.NodeGroupID + n.Status = common.StatusInitialization + err = cloudprovider.SaveNodeInfoToDB(ctx, n, true) + if err != nil { + blog.Errorf("transInstancesToNode[%s] SaveNodeInfoToDB[%s] failed: %v", taskID, n.InnerIP, err) + } + } + + return nodeIPs, nil +} + +func getAsgNameByNodeGroup(ctx context.Context, info *cloudprovider.CloudDependBasicInfo) (string, error) { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + ngName := info.NodeGroup.CloudNodeGroupID + eksCli, err := api.NewEksClient(info.CmOption) + if err != nil { + return "", err + } + + var ng *eks.Nodegroup + err = retry.Do( + func() error { + ng, err = eksCli.DescribeNodegroup(&ngName, &info.Cluster.SystemID) + if err != nil { + return err + } + + return nil + }, + retry.Context(ctx), retry.Attempts(3), + ) + if err != nil { + blog.Errorf("ApplyInstanceMachinesTask[%s] getAsgNameByNodeGroup[%s] failed: %v", taskID, ngName, err) + return "", err + } + if ng.Resources != nil && ng.Resources.AutoScalingGroups != nil { + return *ng.Resources.AutoScalingGroups[0].Name, nil + } + + return "", fmt.Errorf("ApplyInstanceMachinesTask[%s] getAsgNameByNodeGroup[%s] failed: %v", taskID, ngName, err) +} + +func checkClusterInstanceStatus(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, + instanceIDs []string) ([]string, []string, error) { + var ( + addSucessNodes = make([]string, 0) + addFailureNodes = make([]string, 0) + ) + + taskID := cloudprovider.GetTaskIDFromContext(ctx) + ec2Cli, err := api.NewEC2Client(info.CmOption) + if err != nil { + return nil, nil, err + } + // wait node group state to normal + timeCtx, cancel := context.WithTimeout(context.TODO(), 10*time.Minute) + defer cancel() + + // wait all nodes to be ready + err = loop.LoopDoFunc(timeCtx, func() error { + instances, err := ec2Cli.DescribeInstances(&ec2.DescribeInstancesInput{InstanceIds: aws.StringSlice(instanceIDs)}) + if err != nil { + blog.Errorf("checkClusterInstanceStatus[%s] DescribeInstances failed: %v", taskID, err) + return nil + } + index := 0 + running, failure := make([]string, 0), make([]string, 0) + for _, inst := range instances { + blog.Infof("checkClusterInstanceStatus[%s] instance[%s] status[%s]", taskID, *inst.InstanceId, + *inst.State) + switch *inst.State.Name { + case api.InstanceStateRunning: + running = append(running, *inst.InstanceId) + index++ + default: + failure = append(failure, *inst.InstanceId) + index++ + } + } + if index == len(instanceIDs) { + addSucessNodes = running + addFailureNodes = failure + return loop.EndLoop + } + + return nil + }, loop.LoopInterval(20*time.Second)) + + // other error + if err != nil && !errors.Is(err, context.DeadlineExceeded) { + blog.Errorf("checkClusterInstanceStatus[%s] getInstancesFromAsg failed: %v", taskID, err) + return nil, nil, err + } + // timeout error + if errors.Is(err, context.DeadlineExceeded) { + running, failure := make([]string, 0), make([]string, 0) + instances, err := ec2Cli.DescribeInstances(&ec2.DescribeInstancesInput{InstanceIds: aws.StringSlice(instanceIDs)}) + if err != nil { + blog.Errorf("checkClusterInstanceStatus[%s] DescribeInstances failed: %v", taskID, err) + return nil, nil, err + } + + for _, inst := range instances { + blog.Infof("checkClusterInstanceStatus[%s] instance[%s] status[%s]", taskID, *inst.InstanceId, + *inst.State.Name) + + switch *inst.State.Name { + case api.InstanceStateRunning: + running = append(running, *inst.InstanceId) + default: + failure = append(failure, *inst.InstanceId) + } + } + addSucessNodes = running + addFailureNodes = failure + } + blog.Infof("checkClusterInstanceStatus[%s] success[%v] failure[%v]", taskID, addSucessNodes, addFailureNodes) + + // set cluster node status + for _, n := range addFailureNodes { + err = cloudprovider.UpdateNodeStatusByInstanceID(n, common.StatusAddNodesFailed) + if err != nil { + blog.Errorf("checkClusterInstanceStatus[%s] UpdateNodeStatusByInstanceID[%s] failed: %v", taskID, n, err) + } + } + + return addSucessNodes, addFailureNodes, nil +} + +// CheckClusterNodesStatusTask check update desired nodes status task. nodes already add to cluster, +// thus not rollback desiredNum and only record status +func CheckClusterNodesStatusTask(taskID string, stepName string) error { + start := time.Now() + + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + return nil + } + + // step login started here + // extract parameter && check validate + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + successInstanceID := strings.Split(state.Task.CommonParams[cloudprovider.SuccessNodeIDsKey.String()], ",") + + if len(clusterID) == 0 || len(nodeGroupID) == 0 || len(cloudID) == 0 || len(successInstanceID) == 0 { + blog.Errorf("CheckClusterNodesStatusTask[%s]: check parameter validate failed", taskID) + retErr := fmt.Errorf("CheckClusterNodesStatusTask check parameters failed") + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + NodeGroupID: nodeGroupID, + }) + if err != nil { + blog.Errorf("CheckClusterNodesStatusTask[%s]: GetClusterDependBasicInfo failed: %s", taskID, err.Error()) + retErr := fmt.Errorf("CheckClusterNodesStatusTask GetClusterDependBasicInfo failed") + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // inject taskID + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + successInstances, failureInstances, err := checkClusterInstanceStatus(ctx, dependInfo, successInstanceID) + if err != nil { + blog.Errorf("CheckClusterNodesStatusTask[%s]: checkClusterInstanceStatus failed: %s", taskID, err.Error()) + retErr := fmt.Errorf("CheckClusterNodesStatusTask checkClusterInstanceStatus failed") + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update response information to task common params + if state.Task.CommonParams == nil { + state.Task.CommonParams = make(map[string]string) + } + if len(successInstances) > 0 { + state.Task.CommonParams[cloudprovider.SuccessClusterNodeIDsKey.String()] = strings.Join(successInstances, ",") + // dynamic inject paras + state.Task.CommonParams[cloudprovider.DynamicNodeIPListKey.String()] = strings.Join(successInstances, ",") + } + if len(failureInstances) > 0 { + state.Task.CommonParams[cloudprovider.FailedClusterNodeIDsKey.String()] = strings.Join(failureInstances, ",") + } + + // update step + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CheckClusterNodesStatusTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/utils.go new file mode 100644 index 0000000000..405e4a49f3 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/utils.go @@ -0,0 +1,36 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package tasks + +import ( + "context" + + cmproto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" +) + +// updateNodeGroupCloudNodeGroupID set nodegroup cloudNodeGroupID +func updateNodeGroupCloudNodeGroupID(nodeGroupID string, newGroup *cmproto.NodeGroup) error { + group, err := cloudprovider.GetStorageModel().GetNodeGroup(context.Background(), nodeGroupID) + if err != nil { + return err + } + + group.CloudNodeGroupID = newGroup.CloudNodeGroupID + err = cloudprovider.GetStorageModel().UpdateNodeGroup(context.Background(), group) + if err != nil { + return err + } + + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/utils.go new file mode 100644 index 0000000000..5f3d7148ed --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/utils.go @@ -0,0 +1,278 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package aws + +import ( + "fmt" + "strconv" + "strings" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" +) + +var ( + cloudName = "aws" +) + +// awsCloud taskName +const ( + // importClusterTaskTemplate bk-sops add task template + importClusterTaskTemplate = "aws-import cluster: %s" + + // deleteClusterTaskTemplate bk-sops add task template + deleteClusterTaskTemplate = "aws-delete cluster: %s" + // awsAddNodeTaskTemplate bk-sops add task template + awsAddNodeTaskTemplate = "aws-add node: %s" + // awsCleanNodeTaskTemplate bk-sops add task template + awsCleanNodeTaskTemplate = "aws-remove node: %s" + // createNodeGroupTaskTemplate bk-sops add task template + createNodeGroupTaskTemplate = "aws-create node group: %s/%s" + // deleteNodeGroupTaskTemplate bk-sops add task template + deleteNodeGroupTaskTemplate = "aws-delete node group: %s/%s" + // updateNodeGroupDesiredNode bk-sops add task template + updateNodeGroupDesiredNodeTemplate = "aws-update node group desired node: %s/%s" + // cleanNodeGroupNodesTaskTemplate bk-sops add task template + cleanNodeGroupNodesTaskTemplate = "aws-remove node group nodes: %s/%s" + // moveNodesToNodeGroupTaskTemplate bk-sops add task template + moveNodesToNodeGroupTaskTemplate = "aws-move nodes to node group: %s/%s" + // switchNodeGroupAutoScalingTaskTemplate bk-sops add task template + switchNodeGroupAutoScalingTaskTemplate = "aws-switch node group auto scaling: %s/%s" + // updateAutoScalingOptionTemplate bk-sops add task template + updateAutoScalingOptionTemplate = "aws-update auto scaling option: %s" + // switchAutoScalingOptionStatusTemplate bk-sops add task template + switchAutoScalingOptionStatusTemplate = "aws-switch auto scaling option status: %s" +) + +// tasks +var ( + // import cluster task + importClusterNodesStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-ImportClusterNodesTask", cloudName), + StepName: "导入集群节点", + } + registerClusterKubeConfigStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-RegisterClusterKubeConfigTask", cloudName), + StepName: "注册集群kubeConfig认证", + } + + // delete cluster task + deleteGKEClusterStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-DeleteGKEClusterTask", cloudName), + StepName: "删除集群", + } + cleanClusterDBInfoStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CleanClusterDBInfoTask", cloudName), + StepName: "清理集群数据", + } + + // create nodeGroup task + createCloudNodeGroupStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CreateCloudNodeGroupTask", cloudName), + StepName: "创建云节点组", + } + checkCloudNodeGroupStatusStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CheckCloudNodeGroupStatusTask", cloudName), + StepName: "检测云节点组状态", + } + + // delete nodeGroup task + deleteNodeGroupStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-DeleteNodeGroupTask", cloudName), + StepName: "删除云节点组", + } + + // update desired nodes task + applyInstanceMachinesStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-%s", cloudName, cloudprovider.ApplyInstanceMachinesTask), + StepName: "申请节点任务", + } + checkClusterNodesStatusStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CheckClusterNodesStatusTask", cloudName), + StepName: "检测节点状态", + } + updateDesiredNodesDBInfoStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-UpdateDesiredNodesDBInfoTask", cloudName), + StepName: "更新节点数据", + } + + // clean node in nodeGroup task + cleanNodeGroupNodesStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CleanNodeGroupNodesTask", cloudName), + StepName: "下架节点组节点", + } + checkCleanNodeGroupNodesStatusStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CheckCleanNodeGroupNodesStatusTask", cloudName), + StepName: "检查节点组状态", + } + updateCleanNodeGroupNodesDBInfoStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-UpdateCleanNodeGroupNodesDBInfoTask", cloudName), + StepName: "更新节点组数据", + } +) + +// ImportClusterTaskOption 纳管集群 +type ImportClusterTaskOption struct { + Cluster *proto.Cluster +} + +// BuildRegisterKubeConfigStep 注册集群kubeConfig +func (ic *ImportClusterTaskOption) BuildRegisterKubeConfigStep(task *proto.Task) { + registerKubeConfigStep := cloudprovider.InitTaskStep(registerClusterKubeConfigStep) + registerKubeConfigStep.Params[cloudprovider.ClusterIDKey.String()] = ic.Cluster.ClusterID + registerKubeConfigStep.Params[cloudprovider.CloudIDKey.String()] = ic.Cluster.Provider + + task.Steps[registerClusterKubeConfigStep.StepMethod] = registerKubeConfigStep + task.StepSequence = append(task.StepSequence, registerClusterKubeConfigStep.StepMethod) +} + +// BuildImportClusterNodesStep 纳管集群节点 +func (ic *ImportClusterTaskOption) BuildImportClusterNodesStep(task *proto.Task) { + importNodesStep := cloudprovider.InitTaskStep(importClusterNodesStep) + importNodesStep.Params[cloudprovider.ClusterIDKey.String()] = ic.Cluster.ClusterID + importNodesStep.Params[cloudprovider.CloudIDKey.String()] = ic.Cluster.Provider + + task.Steps[importClusterNodesStep.StepMethod] = importNodesStep + task.StepSequence = append(task.StepSequence, importClusterNodesStep.StepMethod) +} + +// DeleteClusterTaskOption 删除集群 +type DeleteClusterTaskOption struct { + Cluster *proto.Cluster + DeleteMode string +} + +// BuildDeleteGKEClusterStep 删除集群 +func (dc *DeleteClusterTaskOption) BuildDeleteGKEClusterStep(task *proto.Task) { + deleteStep := cloudprovider.InitTaskStep(deleteGKEClusterStep) + + deleteStep.Params[cloudprovider.ClusterIDKey.String()] = dc.Cluster.ClusterID + deleteStep.Params[cloudprovider.CloudIDKey.String()] = dc.Cluster.Provider + deleteStep.Params[cloudprovider.DeleteModeKey.String()] = dc.DeleteMode + + task.Steps[deleteGKEClusterStep.StepMethod] = deleteStep + task.StepSequence = append(task.StepSequence, deleteGKEClusterStep.StepMethod) +} + +// BuildCleanClusterDBInfoStep 清理集群数据 +func (dc *DeleteClusterTaskOption) BuildCleanClusterDBInfoStep(task *proto.Task) { + updateStep := cloudprovider.InitTaskStep(cleanClusterDBInfoStep) + + updateStep.Params[cloudprovider.ClusterIDKey.String()] = dc.Cluster.ClusterID + updateStep.Params[cloudprovider.CloudIDKey.String()] = dc.Cluster.Provider + + task.Steps[cleanClusterDBInfoStep.StepMethod] = updateStep + task.StepSequence = append(task.StepSequence, cleanClusterDBInfoStep.StepMethod) +} + +// CreateNodeGroupTaskOption 创建节点组 +type CreateNodeGroupTaskOption struct { + Group *proto.NodeGroup +} + +// BuildCreateCloudNodeGroupStep 通过云接口创建节点组 +func (cn *CreateNodeGroupTaskOption) BuildCreateCloudNodeGroupStep(task *proto.Task) { + createStep := cloudprovider.InitTaskStep(createCloudNodeGroupStep) + + createStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Group.ClusterID + createStep.Params[cloudprovider.NodeGroupIDKey.String()] = cn.Group.NodeGroupID + createStep.Params[cloudprovider.CloudIDKey.String()] = cn.Group.Provider + + task.Steps[createCloudNodeGroupStep.StepMethod] = createStep + task.StepSequence = append(task.StepSequence, createCloudNodeGroupStep.StepMethod) +} + +// BuildCheckCloudNodeGroupStatusStep 检测节点组状态 +func (cn *CreateNodeGroupTaskOption) BuildCheckCloudNodeGroupStatusStep(task *proto.Task) { + checkStep := cloudprovider.InitTaskStep(checkCloudNodeGroupStatusStep) + + checkStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Group.ClusterID + checkStep.Params[cloudprovider.NodeGroupIDKey.String()] = cn.Group.NodeGroupID + checkStep.Params[cloudprovider.CloudIDKey.String()] = cn.Group.Provider + + task.Steps[checkCloudNodeGroupStatusStep.StepMethod] = checkStep + task.StepSequence = append(task.StepSequence, checkCloudNodeGroupStatusStep.StepMethod) +} + +// CleanNodeInGroupTaskOption 节点组缩容节点 +type CleanNodeInGroupTaskOption struct { + Group *proto.NodeGroup + NodeIPs []string + NodeIds []string + Operator string +} + +// BuildCleanNodeGroupNodesStep 清理节点池节点 +func (cn *CleanNodeInGroupTaskOption) BuildCleanNodeGroupNodesStep(task *proto.Task) { + cleanStep := cloudprovider.InitTaskStep(cleanNodeGroupNodesStep) + + cleanStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Group.ClusterID + cleanStep.Params[cloudprovider.NodeGroupIDKey.String()] = cn.Group.NodeGroupID + cleanStep.Params[cloudprovider.CloudIDKey.String()] = cn.Group.Provider + cleanStep.Params[cloudprovider.NodeIPsKey.String()] = strings.Join(cn.NodeIPs, ",") + cleanStep.Params[cloudprovider.NodeIDsKey.String()] = strings.Join(cn.NodeIds, ",") + + task.Steps[cleanNodeGroupNodesStep.StepMethod] = cleanStep + task.StepSequence = append(task.StepSequence, cleanNodeGroupNodesStep.StepMethod) +} + +// DeleteNodeGroupTaskOption 删除节点组 +type DeleteNodeGroupTaskOption struct { + Group *proto.NodeGroup +} + +// BuildDeleteNodeGroupStep 删除云节点组 +func (dn *DeleteNodeGroupTaskOption) BuildDeleteNodeGroupStep(task *proto.Task) { + deleteStep := cloudprovider.InitTaskStep(deleteNodeGroupStep) + + deleteStep.Params[cloudprovider.ClusterIDKey.String()] = dn.Group.ClusterID + deleteStep.Params[cloudprovider.NodeGroupIDKey.String()] = dn.Group.NodeGroupID + deleteStep.Params[cloudprovider.CloudIDKey.String()] = dn.Group.Provider + + task.Steps[deleteNodeGroupStep.StepMethod] = deleteStep + task.StepSequence = append(task.StepSequence, deleteNodeGroupStep.StepMethod) +} + +// UpdateDesiredNodesTaskOption 扩容节点组节点 +type UpdateDesiredNodesTaskOption struct { + Group *proto.NodeGroup + Desired uint32 + Operator string +} + +// BuildApplyInstanceMachinesStep 申请节点实例 +func (ud *UpdateDesiredNodesTaskOption) BuildApplyInstanceMachinesStep(task *proto.Task) { + applyInstanceStep := cloudprovider.InitTaskStep(applyInstanceMachinesStep) + + applyInstanceStep.Params[cloudprovider.ClusterIDKey.String()] = ud.Group.ClusterID + applyInstanceStep.Params[cloudprovider.NodeGroupIDKey.String()] = ud.Group.NodeGroupID + applyInstanceStep.Params[cloudprovider.CloudIDKey.String()] = ud.Group.Provider + applyInstanceStep.Params[cloudprovider.ScalingNodesNumKey.String()] = strconv.Itoa(int(ud.Desired)) + applyInstanceStep.Params[cloudprovider.OperatorKey.String()] = ud.Operator + + task.Steps[applyInstanceMachinesStep.StepMethod] = applyInstanceStep + task.StepSequence = append(task.StepSequence, applyInstanceMachinesStep.StepMethod) +} + +// BuildCheckClusterNodeStatusStep 检测节点实例状态 +func (ud *UpdateDesiredNodesTaskOption) BuildCheckClusterNodeStatusStep(task *proto.Task) { + checkClusterNodeStatusStep := cloudprovider.InitTaskStep(checkClusterNodesStatusStep) + + checkClusterNodeStatusStep.Params[cloudprovider.ClusterIDKey.String()] = ud.Group.ClusterID + checkClusterNodeStatusStep.Params[cloudprovider.NodeGroupIDKey.String()] = ud.Group.NodeGroupID + checkClusterNodeStatusStep.Params[cloudprovider.CloudIDKey.String()] = ud.Group.Provider + + task.Steps[checkClusterNodesStatusStep.StepMethod] = checkClusterNodeStatusStep + task.StepSequence = append(task.StepSequence, checkClusterNodesStatusStep.StepMethod) +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/validate.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/validate.go new file mode 100644 index 0000000000..6ef0ecceba --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/validate.go @@ -0,0 +1,276 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package aws + +import ( + "encoding/base64" + "fmt" + "sync" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/clusterops" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/types" +) + +var validateMgr sync.Once + +func init() { + validateMgr.Do(func() { + // init Cluster + cloudprovider.InitCloudValidateManager("aws", &CloudValidate{}) + }) +} + +// CloudValidate aws validate management implementation +type CloudValidate struct { +} + +// CreateClusterValidate create cluster validate +func (c *CloudValidate) CreateClusterValidate(req *proto.CreateClusterReq, opt *cloudprovider.CommonOption) error { + return cloudprovider.ErrCloudNotImplemented +} + +// CreateCloudAccountValidate create cloud account validate +func (c *CloudValidate) CreateCloudAccountValidate(account *proto.Account) error { + return cloudprovider.ErrCloudNotImplemented +} + +// ListCloudVpcsValidate list vpcs validate +func (c *CloudValidate) ListCloudVpcsValidate(req *proto.ListCloudVpcsRequest, account *proto.Account) error { + return cloudprovider.ErrCloudNotImplemented +} + +// ImportClusterValidate check importCluster operation +func (c *CloudValidate) ImportClusterValidate(req *proto.ImportClusterReq, opt *cloudprovider.CommonOption) error { + // call aws interface to check cluster + if c == nil || req == nil { + return fmt.Errorf("%s ImportClusterValidate request is empty", cloudName) + } + + if opt == nil { + return fmt.Errorf("%s ImportClusterValidate options is empty", cloudName) + } + + if len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 || len(opt.Region) == 0 { + return fmt.Errorf("%s ImportClusterValidate opt lost valid crendential info", cloudName) + } + + if req.CloudMode.CloudID == "" && req.CloudMode.KubeConfig == "" { + return fmt.Errorf("%s ImportClusterValidate cluster cloudID & kubeConfig empty", cloudName) + } + + if req.CloudMode.CloudID != "" { + cli, err := api.NewEksClient(opt) + if err != nil { + return fmt.Errorf("%s ImportClusterValidate getEksClient failed: %v", cloudName, err) + } + + _, err = cli.GetEksCluster(req.CloudMode.CloudID) + if err != nil { + return fmt.Errorf("%s ImportClusterValidate GetEksCluster[%s] failed: %v", cloudName, + req.CloudMode.CloudID, err) + } + blog.Infof("%s ImportClusterValidate CloudMode CloudID[%s] success", cloudName, req.CloudMode.CloudID) + + return nil + } + + if req.CloudMode.KubeConfig != "" { + _, err := types.GetKubeConfigFromYAMLBody(false, types.YamlInput{ + FileName: "", + YamlContent: req.CloudMode.KubeConfig, + }) + if err != nil { + return fmt.Errorf("%s ImportClusterValidate GetKubeConfigFromYAMLBody failed: %v", cloudName, err) + } + + kubeRet := base64.StdEncoding.EncodeToString([]byte(req.CloudMode.KubeConfig)) + kubeCli, err := clusterops.NewKubeClient(kubeRet) + if err != nil { + return fmt.Errorf("%s ImportClusterValidate NewKubeClient failed: %v", cloudName, err) + } + + _, err = kubeCli.Discovery().ServerVersion() + if err != nil { + return fmt.Errorf("%s ImportClusterValidate connect cluster by kubeConfig failed: %v", cloudName, err) + } + + blog.Infof("%s ImportClusterValidate CloudMode connect cluster ByKubeConfig success", cloudName) + } + + return nil +} + +// ImportCloudAccountValidate create cloudAccount account validation +func (c *CloudValidate) ImportCloudAccountValidate(account *proto.Account) error { + // call aws interface to check account + if c == nil || account == nil { + return fmt.Errorf("%s ImportCloudAccountValidate request is empty", cloudName) + } + + if len(account.SecretID) == 0 || len(account.SecretKey) == 0 { + return fmt.Errorf("%s ImportCloudAccountValidate request lost valid crendential info", cloudName) + } + + return nil +} + +// GetCloudRegionZonesValidate xxx +func (c *CloudValidate) GetCloudRegionZonesValidate(req *proto.GetCloudRegionZonesRequest, + account *proto.Account) error { + // call aws interface to check account + if c == nil || account == nil { + return fmt.Errorf("%s GetCloudRegionZonesValidate request is empty", cloudName) + } + + if len(account.SecretID) == 0 || len(account.SecretKey) == 0 { + return fmt.Errorf("%s GetCloudRegionZonesValidate request lost valid crendential info", cloudName) + } + + if len(req.Region) == 0 { + return fmt.Errorf("%s GetCloudRegionZonesValidate request lost valid region info", cloudName) + } + + return nil +} + +// ListCloudRegionClusterValidate xxx +func (c *CloudValidate) ListCloudRegionClusterValidate(req *proto.ListCloudRegionClusterRequest, + account *proto.Account) error { + // call aws interface to check account + if c == nil || account == nil { + return fmt.Errorf("%s ListCloudRegionClusterValidate request is empty", cloudName) + } + + if len(account.SecretID) == 0 || len(account.SecretKey) == 0 { + return fmt.Errorf("%s ListCloudRegionClusterValidate request lost valid crendential info", cloudName) + } + + if len(req.Region) == 0 { + return fmt.Errorf("%s ListCloudRegionClusterValidate request lost valid region info", cloudName) + } + + return nil +} + +// ListCloudSubnetsValidate xxx +func (c *CloudValidate) ListCloudSubnetsValidate(req *proto.ListCloudSubnetsRequest, account *proto.Account) error { + // call aws interface to check account + if c == nil || account == nil { + return fmt.Errorf("%s ListCloudSubnetsValidate request is empty", cloudName) + } + + if len(account.SecretID) == 0 || len(account.SecretKey) == 0 { + return fmt.Errorf("%s ListCloudSubnetsValidate request lost valid crendential info", cloudName) + } + + if len(req.Region) == 0 { + return fmt.Errorf("%s ListCloudSubnetsValidate request lost valid region info", cloudName) + } + if len(req.VpcID) == 0 { + return fmt.Errorf("%s ListCloudSubnetsValidate request lost valid vpcID info", cloudName) + } + + return nil +} + +// ListSecurityGroupsValidate xxx +func (c *CloudValidate) ListSecurityGroupsValidate(req *proto.ListCloudSecurityGroupsRequest, + account *proto.Account) error { + // call aws interface to check account + if c == nil || account == nil { + return fmt.Errorf("%s ListSecurityGroupsValidate request is empty", cloudName) + } + + if len(account.SecretID) == 0 || len(account.SecretKey) == 0 { + return fmt.Errorf("%s ListSecurityGroupsValidate request lost valid crendential info", cloudName) + } + + if len(req.Region) == 0 { + return fmt.Errorf("%s ListSecurityGroupsValidate request lost valid region info", cloudName) + } + + return nil +} + +// ListInstanceTypeValidate xxx +func (c *CloudValidate) ListInstanceTypeValidate(req *proto.ListCloudInstanceTypeRequest, + account *proto.Account) error { + // call aws interface to check account + if c == nil || account == nil { + return fmt.Errorf("%s ListInstanceTypeValidate request is empty", cloudName) + } + + if len(account.SecretID) == 0 || len(account.SecretKey) == 0 { + return fmt.Errorf("%s ListInstanceTypeValidate request lost valid crendential info", cloudName) + } + + if len(req.Region) == 0 { + return fmt.Errorf("%s ListInstanceTypeValidate request lost valid region info", cloudName) + } + + return nil +} + +// ListCloudOsImageValidate xxx +func (c *CloudValidate) ListCloudOsImageValidate(req *proto.ListCloudOsImageRequest, account *proto.Account) error { + // call aws interface to check account + if c == nil || account == nil { + return fmt.Errorf("%s ListCloudOsImageValidate request is empty", cloudName) + } + + if len(account.SecretID) == 0 || len(account.SecretKey) == 0 { + return fmt.Errorf("%s ListCloudOsImageValidate request lost valid crendential info", cloudName) + } + + if len(req.Region) == 0 { + return fmt.Errorf("%s ListCloudOsImageValidate request lost valid region info", cloudName) + } + + return nil +} + +// CreateNodeGroupValidate xxx +func (c *CloudValidate) CreateNodeGroupValidate(req *proto.CreateNodeGroupRequest, + opt *cloudprovider.CommonOption) error { + if len(req.Region) == 0 { + return fmt.Errorf("%s CreateNodeGroupValidate request lost valid region info", cloudName) + } + + if req.NodeRole == "" { + return fmt.Errorf("%s CreateNodeGroupValidate request lost valid nodeRole info", cloudName) + } + + return nil +} + +func (c *CloudValidate) AddNodesToClusterValidate(req *proto.AddNodesRequest, opt *cloudprovider.CommonOption) error { + return nil +} + +func (c *CloudValidate) DeleteNodesFromClusterValidate(req *proto.DeleteNodesRequest, + opt *cloudprovider.CommonOption) error { + return nil +} + +func (c *CloudValidate) ListKeyPairsValidate(req *proto.ListKeyPairsRequest, account *proto.Account) error { + return nil +} + +func (c *CloudValidate) ListInstancesValidate(req *proto.ListCloudInstancesRequest, account *proto.Account) error { + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go index e2b6794871..8f906a4ff5 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/google/api/vpc.go @@ -35,12 +35,12 @@ func init() { type VPCManager struct{} // ListVpcs list vpcs -func (c *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.CloudVpc, error) { +func (vm *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.CloudVpc, error) { return nil, cloudprovider.ErrCloudNotImplemented } // ListSubnets list vpc subnets -func (vm VPCManager) ListSubnets(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.Subnet, error) { +func (vm *VPCManager) ListSubnets(vpcID string, opt *cloudprovider.CommonOption) ([]*proto.Subnet, error) { locationList := strings.Split(opt.Region, "-") if len(locationList) == 3 { opt.Region = strings.Join(locationList[:2], "-") @@ -75,16 +75,16 @@ func (vm VPCManager) ListSubnets(vpcID string, opt *cloudprovider.CommonOption) } // ListSecurityGroups list security groups -func (vm VPCManager) ListSecurityGroups(opt *cloudprovider.CommonOption) ([]*proto.SecurityGroup, error) { +func (vm *VPCManager) ListSecurityGroups(opt *cloudprovider.CommonOption) ([]*proto.SecurityGroup, error) { return nil, cloudprovider.ErrCloudNotImplemented } // GetCloudNetworkAccountType 查询用户网络类型 -func (vm VPCManager) GetCloudNetworkAccountType(opt *cloudprovider.CommonOption) (*proto.CloudAccountType, error) { +func (vm *VPCManager) GetCloudNetworkAccountType(opt *cloudprovider.CommonOption) (*proto.CloudAccountType, error) { return nil, cloudprovider.ErrCloudNotImplemented } // ListBandwidthPacks list bandWidthPacks -func (vm VPCManager) ListBandwidthPacks(opt *cloudprovider.CommonOption) ([]*proto.BandwidthPackageInfo, error) { +func (vm *VPCManager) ListBandwidthPacks(opt *cloudprovider.CommonOption) ([]*proto.BandwidthPackageInfo, error) { return nil, cloudprovider.ErrCloudNotImplemented }