From 87cafbee64677d59b82361b967700492b79c2f98 Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Mon, 9 Dec 2024 13:47:26 +0000 Subject: [PATCH] Generate rough starting protos --- .../teleport/workloadidentity/v1/attrs.pb.go | 543 ++++ .../workloadidentity/v1/issuer_service.pb.go | 1013 ++++++++ .../v1/issuer_service_grpc.pb.go | 190 ++ .../teleport/legacy/types/events/events.proto | 6 + .../teleport/workloadidentity/v1/attrs.proto | 83 + .../workloadidentity/v1/issuer_service.proto | 151 ++ api/types/events/events.pb.go | 2286 +++++++++-------- lib/auth/grpcserver.go | 17 + .../workloadidentityv1/issuer_service.go | 581 +++++ .../workloadidentityv1/issuer_service_test.go | 175 ++ .../workloadidentityv1_test.go | 392 +++ lib/jwt/jwt.go | 12 + 12 files changed, 4353 insertions(+), 1096 deletions(-) create mode 100644 api/gen/proto/go/teleport/workloadidentity/v1/attrs.pb.go create mode 100644 api/gen/proto/go/teleport/workloadidentity/v1/issuer_service.pb.go create mode 100644 api/gen/proto/go/teleport/workloadidentity/v1/issuer_service_grpc.pb.go create mode 100644 api/proto/teleport/workloadidentity/v1/attrs.proto create mode 100644 api/proto/teleport/workloadidentity/v1/issuer_service.proto create mode 100644 lib/auth/machineid/workloadidentityv1/issuer_service.go create mode 100644 lib/auth/machineid/workloadidentityv1/issuer_service_test.go diff --git a/api/gen/proto/go/teleport/workloadidentity/v1/attrs.pb.go b/api/gen/proto/go/teleport/workloadidentity/v1/attrs.pb.go new file mode 100644 index 0000000000000..010083cc1053a --- /dev/null +++ b/api/gen/proto/go/teleport/workloadidentity/v1/attrs.pb.go @@ -0,0 +1,543 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.2 +// protoc (unknown) +// source: teleport/workloadidentity/v1/attrs.proto + +package workloadidentityv1pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Attributes sourced from the Kubernetes workload attestor. +type WorkloadAttrsKubernetes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether the workload passed Kubernetes attestation. + Attested bool `protobuf:"varint,1,opt,name=attested,proto3" json:"attested,omitempty"` + // The namespace of the workload pod. + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // The name of the workload pod. + PodName string `protobuf:"bytes,3,opt,name=pod_name,json=podName,proto3" json:"pod_name,omitempty"` + // The service account of the workload pod. + ServiceAccount string `protobuf:"bytes,4,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"` + // The UID of the workload pod. + PodUid string `protobuf:"bytes,5,opt,name=pod_uid,json=podUid,proto3" json:"pod_uid,omitempty"` + // The labels of the workload pod. + Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *WorkloadAttrsKubernetes) Reset() { + *x = WorkloadAttrsKubernetes{} + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkloadAttrsKubernetes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadAttrsKubernetes) ProtoMessage() {} + +func (x *WorkloadAttrsKubernetes) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkloadAttrsKubernetes.ProtoReflect.Descriptor instead. +func (*WorkloadAttrsKubernetes) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_attrs_proto_rawDescGZIP(), []int{0} +} + +func (x *WorkloadAttrsKubernetes) GetAttested() bool { + if x != nil { + return x.Attested + } + return false +} + +func (x *WorkloadAttrsKubernetes) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *WorkloadAttrsKubernetes) GetPodName() string { + if x != nil { + return x.PodName + } + return "" +} + +func (x *WorkloadAttrsKubernetes) GetServiceAccount() string { + if x != nil { + return x.ServiceAccount + } + return "" +} + +func (x *WorkloadAttrsKubernetes) GetPodUid() string { + if x != nil { + return x.PodUid + } + return "" +} + +func (x *WorkloadAttrsKubernetes) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +// Attributes sourced from the Unix workload attestor. +type WorkloadAttrsUnix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether the workload passed Kubernetes attestation. + Attested bool `protobuf:"varint,1,opt,name=attested,proto3" json:"attested,omitempty"` + // The PID of the workload process. + Pid int32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` + // The primary user ID of the workload process. + Gid uint32 `protobuf:"varint,3,opt,name=gid,proto3" json:"gid,omitempty"` + // The primary group ID of the workload process. + Uid uint32 `protobuf:"varint,4,opt,name=uid,proto3" json:"uid,omitempty"` +} + +func (x *WorkloadAttrsUnix) Reset() { + *x = WorkloadAttrsUnix{} + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkloadAttrsUnix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadAttrsUnix) ProtoMessage() {} + +func (x *WorkloadAttrsUnix) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkloadAttrsUnix.ProtoReflect.Descriptor instead. +func (*WorkloadAttrsUnix) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_attrs_proto_rawDescGZIP(), []int{1} +} + +func (x *WorkloadAttrsUnix) GetAttested() bool { + if x != nil { + return x.Attested + } + return false +} + +func (x *WorkloadAttrsUnix) GetPid() int32 { + if x != nil { + return x.Pid + } + return 0 +} + +func (x *WorkloadAttrsUnix) GetGid() uint32 { + if x != nil { + return x.Gid + } + return 0 +} + +func (x *WorkloadAttrsUnix) GetUid() uint32 { + if x != nil { + return x.Uid + } + return 0 +} + +// The attributes provided by `tbot` regarding the workload's attestation. +// This will be mostly unset if the workload has not requested credentials via +// the SPIFFE Workload API. +type WorkloadAttrs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Unix-specific attributes. + Unix *WorkloadAttrsUnix `protobuf:"bytes,1,opt,name=unix,proto3" json:"unix,omitempty"` + // The Kubernetes-specific attributes. + Kubernetes *WorkloadAttrsKubernetes `protobuf:"bytes,2,opt,name=kubernetes,proto3" json:"kubernetes,omitempty"` +} + +func (x *WorkloadAttrs) Reset() { + *x = WorkloadAttrs{} + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkloadAttrs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadAttrs) ProtoMessage() {} + +func (x *WorkloadAttrs) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkloadAttrs.ProtoReflect.Descriptor instead. +func (*WorkloadAttrs) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_attrs_proto_rawDescGZIP(), []int{2} +} + +func (x *WorkloadAttrs) GetUnix() *WorkloadAttrsUnix { + if x != nil { + return x.Unix + } + return nil +} + +func (x *WorkloadAttrs) GetKubernetes() *WorkloadAttrsKubernetes { + if x != nil { + return x.Kubernetes + } + return nil +} + +// Attributes related to the user/bot making the request for a workload +// identity. +type UserAttrs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the user. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Whether the user is a bot. + IsBot bool `protobuf:"varint,2,opt,name=is_bot,json=isBot,proto3" json:"is_bot,omitempty"` + // If the user is a bot, the name of the bot. + BotName string `protobuf:"bytes,3,opt,name=bot_name,json=botName,proto3" json:"bot_name,omitempty"` + // If the user is a bot, the instance ID of the bot. + BotInstanceId string `protobuf:"bytes,4,opt,name=bot_instance_id,json=botInstanceId,proto3" json:"bot_instance_id,omitempty"` + // Labels of the user. + Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *UserAttrs) Reset() { + *x = UserAttrs{} + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UserAttrs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserAttrs) ProtoMessage() {} + +func (x *UserAttrs) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserAttrs.ProtoReflect.Descriptor instead. +func (*UserAttrs) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_attrs_proto_rawDescGZIP(), []int{3} +} + +func (x *UserAttrs) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UserAttrs) GetIsBot() bool { + if x != nil { + return x.IsBot + } + return false +} + +func (x *UserAttrs) GetBotName() string { + if x != nil { + return x.BotName + } + return "" +} + +func (x *UserAttrs) GetBotInstanceId() string { + if x != nil { + return x.BotInstanceId + } + return "" +} + +func (x *UserAttrs) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +// The attributes of a principal requesting a workload identity. These +// attributes can be leveraged in rules, expressions and templating within the +// WorkloadIdentity resource. +type Attrs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Attributes sourced by workload attestation performed by `tbot`. + Workload *WorkloadAttrs `protobuf:"bytes,1,opt,name=workload,proto3" json:"workload,omitempty"` + // Attributes sourced from the user/bot making the request for a workload + // identity credential. + User *UserAttrs `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` +} + +func (x *Attrs) Reset() { + *x = Attrs{} + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Attrs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Attrs) ProtoMessage() {} + +func (x *Attrs) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_attrs_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Attrs.ProtoReflect.Descriptor instead. +func (*Attrs) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_attrs_proto_rawDescGZIP(), []int{4} +} + +func (x *Attrs) GetWorkload() *WorkloadAttrs { + if x != nil { + return x.Workload + } + return nil +} + +func (x *Attrs) GetUser() *UserAttrs { + if x != nil { + return x.User + } + return nil +} + +var File_teleport_workloadidentity_v1_attrs_proto protoreflect.FileDescriptor + +var file_teleport_workloadidentity_v1_attrs_proto_rawDesc = []byte{ + 0x0a, 0x28, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x61, + 0x74, 0x74, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x22, 0xc6, 0x02, 0x0a, 0x17, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x73, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x70, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x64, 0x55, 0x69, 0x64, 0x12, 0x59, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x73, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x65, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, + 0x72, 0x73, 0x55, 0x6e, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x70, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x0d, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x73, 0x12, 0x43, 0x0a, 0x04, 0x75, 0x6e, + 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x74, 0x74, 0x72, 0x73, 0x55, 0x6e, 0x69, 0x78, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x78, 0x12, + 0x55, 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x73, + 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x6b, 0x75, 0x62, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x22, 0x81, 0x02, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x41, + 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x62, + 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x42, 0x6f, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x62, 0x6f, + 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x6f, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, + 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8d, 0x01, 0x0a, 0x05, 0x41, + 0x74, 0x74, 0x72, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, + 0x74, 0x72, 0x73, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3b, 0x0a, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, + 0x74, 0x74, 0x72, 0x73, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x42, 0x66, 0x5a, 0x64, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x3b, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x76, 0x31, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_teleport_workloadidentity_v1_attrs_proto_rawDescOnce sync.Once + file_teleport_workloadidentity_v1_attrs_proto_rawDescData = file_teleport_workloadidentity_v1_attrs_proto_rawDesc +) + +func file_teleport_workloadidentity_v1_attrs_proto_rawDescGZIP() []byte { + file_teleport_workloadidentity_v1_attrs_proto_rawDescOnce.Do(func() { + file_teleport_workloadidentity_v1_attrs_proto_rawDescData = protoimpl.X.CompressGZIP(file_teleport_workloadidentity_v1_attrs_proto_rawDescData) + }) + return file_teleport_workloadidentity_v1_attrs_proto_rawDescData +} + +var file_teleport_workloadidentity_v1_attrs_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_teleport_workloadidentity_v1_attrs_proto_goTypes = []any{ + (*WorkloadAttrsKubernetes)(nil), // 0: teleport.workloadidentity.v1.WorkloadAttrsKubernetes + (*WorkloadAttrsUnix)(nil), // 1: teleport.workloadidentity.v1.WorkloadAttrsUnix + (*WorkloadAttrs)(nil), // 2: teleport.workloadidentity.v1.WorkloadAttrs + (*UserAttrs)(nil), // 3: teleport.workloadidentity.v1.UserAttrs + (*Attrs)(nil), // 4: teleport.workloadidentity.v1.Attrs + nil, // 5: teleport.workloadidentity.v1.WorkloadAttrsKubernetes.LabelsEntry + nil, // 6: teleport.workloadidentity.v1.UserAttrs.LabelsEntry +} +var file_teleport_workloadidentity_v1_attrs_proto_depIdxs = []int32{ + 5, // 0: teleport.workloadidentity.v1.WorkloadAttrsKubernetes.labels:type_name -> teleport.workloadidentity.v1.WorkloadAttrsKubernetes.LabelsEntry + 1, // 1: teleport.workloadidentity.v1.WorkloadAttrs.unix:type_name -> teleport.workloadidentity.v1.WorkloadAttrsUnix + 0, // 2: teleport.workloadidentity.v1.WorkloadAttrs.kubernetes:type_name -> teleport.workloadidentity.v1.WorkloadAttrsKubernetes + 6, // 3: teleport.workloadidentity.v1.UserAttrs.labels:type_name -> teleport.workloadidentity.v1.UserAttrs.LabelsEntry + 2, // 4: teleport.workloadidentity.v1.Attrs.workload:type_name -> teleport.workloadidentity.v1.WorkloadAttrs + 3, // 5: teleport.workloadidentity.v1.Attrs.user:type_name -> teleport.workloadidentity.v1.UserAttrs + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_teleport_workloadidentity_v1_attrs_proto_init() } +func file_teleport_workloadidentity_v1_attrs_proto_init() { + if File_teleport_workloadidentity_v1_attrs_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_teleport_workloadidentity_v1_attrs_proto_rawDesc, + NumEnums: 0, + NumMessages: 7, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_teleport_workloadidentity_v1_attrs_proto_goTypes, + DependencyIndexes: file_teleport_workloadidentity_v1_attrs_proto_depIdxs, + MessageInfos: file_teleport_workloadidentity_v1_attrs_proto_msgTypes, + }.Build() + File_teleport_workloadidentity_v1_attrs_proto = out.File + file_teleport_workloadidentity_v1_attrs_proto_rawDesc = nil + file_teleport_workloadidentity_v1_attrs_proto_goTypes = nil + file_teleport_workloadidentity_v1_attrs_proto_depIdxs = nil +} diff --git a/api/gen/proto/go/teleport/workloadidentity/v1/issuer_service.pb.go b/api/gen/proto/go/teleport/workloadidentity/v1/issuer_service.pb.go new file mode 100644 index 0000000000000..b963f0a856eb5 --- /dev/null +++ b/api/gen/proto/go/teleport/workloadidentity/v1/issuer_service.pb.go @@ -0,0 +1,1013 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.2 +// protoc (unknown) +// source: teleport/workloadidentity/v1/issuer_service.proto + +package workloadidentityv1pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// The parameters for issuing an X509 SVID. +type X509SVIDParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The PKIX, ASN.1 DER public key to encode into the X509 SVID. + PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` +} + +func (x *X509SVIDParams) Reset() { + *x = X509SVIDParams{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *X509SVIDParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*X509SVIDParams) ProtoMessage() {} + +func (x *X509SVIDParams) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use X509SVIDParams.ProtoReflect.Descriptor instead. +func (*X509SVIDParams) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{0} +} + +func (x *X509SVIDParams) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + +// The parameters for issuing a JWT SVID. +type JWTSVIDParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The audiences to encode into the JWT SVID as the `aud` claim. + Audiences []string `protobuf:"bytes,1,rep,name=audiences,proto3" json:"audiences,omitempty"` +} + +func (x *JWTSVIDParams) Reset() { + *x = JWTSVIDParams{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JWTSVIDParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JWTSVIDParams) ProtoMessage() {} + +func (x *JWTSVIDParams) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JWTSVIDParams.ProtoReflect.Descriptor instead. +func (*JWTSVIDParams) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{1} +} + +func (x *JWTSVIDParams) GetAudiences() []string { + if x != nil { + return x.Audiences + } + return nil +} + +// The issued X509 SVID credential and any X509 SVID specific metadata. +type X509SVIDCredential struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The X509 SVID that was issued. + // ASN.1 DER encoded X.509 certificate. No PEM. + Cert []byte `protobuf:"bytes,1,opt,name=cert,proto3" json:"cert,omitempty"` + // The serial number of the X509 SVID. + SerialNumber string `protobuf:"bytes,2,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"` +} + +func (x *X509SVIDCredential) Reset() { + *x = X509SVIDCredential{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *X509SVIDCredential) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*X509SVIDCredential) ProtoMessage() {} + +func (x *X509SVIDCredential) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use X509SVIDCredential.ProtoReflect.Descriptor instead. +func (*X509SVIDCredential) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{2} +} + +func (x *X509SVIDCredential) GetCert() []byte { + if x != nil { + return x.Cert + } + return nil +} + +func (x *X509SVIDCredential) GetSerialNumber() string { + if x != nil { + return x.SerialNumber + } + return "" +} + +// The issued JWT SVID credential and any JWT SVID specific metadata. +type JWTSVIDCredential struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The signed JWT + Jwt string `protobuf:"bytes,1,opt,name=jwt,proto3" json:"jwt,omitempty"` + // The JTI of the JWT + Jti string `protobuf:"bytes,2,opt,name=jti,proto3" json:"jti,omitempty"` +} + +func (x *JWTSVIDCredential) Reset() { + *x = JWTSVIDCredential{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JWTSVIDCredential) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JWTSVIDCredential) ProtoMessage() {} + +func (x *JWTSVIDCredential) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JWTSVIDCredential.ProtoReflect.Descriptor instead. +func (*JWTSVIDCredential) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{3} +} + +func (x *JWTSVIDCredential) GetJwt() string { + if x != nil { + return x.Jwt + } + return "" +} + +func (x *JWTSVIDCredential) GetJti() string { + if x != nil { + return x.Jti + } + return "" +} + +// A credential, and its metadata, that has been issued by Teleport Workload +// Identity. +type Credential struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The TTL that was chosen by the server. + Ttl *durationpb.Duration `protobuf:"bytes,1,opt,name=ttl,proto3" json:"ttl,omitempty"` + // The time that the TTL is reached for this credential. + Expiry *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiry,proto3" json:"expiry,omitempty"` + // The hint configured for this Workload Identity - if any. This is provided + // to workloads using the SPIFFE Workload API to fetch credentials. + Hint string `protobuf:"bytes,3,opt,name=hint,proto3" json:"hint,omitempty"` + // The name of the Workload Identity resource used to issue this credential. + WorkloadIdentityName string `protobuf:"bytes,4,opt,name=workload_identity_name,json=workloadIdentityName,proto3" json:"workload_identity_name,omitempty"` + // The revision of the Workload Identity resource used to issue this + // credential. + WorkloadIdentityRevision string `protobuf:"bytes,5,opt,name=workload_identity_revision,json=workloadIdentityRevision,proto3" json:"workload_identity_revision,omitempty"` + // The fully qualified SPIFFE ID that was encoded into the SVID. + SpiffeId string `protobuf:"bytes,6,opt,name=spiffe_id,json=spiffeId,proto3" json:"spiffe_id,omitempty"` + // Types that are assignable to Credential: + // + // *Credential_X509Svid + // *Credential_JwtSvid + Credential isCredential_Credential `protobuf_oneof:"credential"` +} + +func (x *Credential) Reset() { + *x = Credential{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Credential) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Credential) ProtoMessage() {} + +func (x *Credential) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Credential.ProtoReflect.Descriptor instead. +func (*Credential) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{4} +} + +func (x *Credential) GetTtl() *durationpb.Duration { + if x != nil { + return x.Ttl + } + return nil +} + +func (x *Credential) GetExpiry() *timestamppb.Timestamp { + if x != nil { + return x.Expiry + } + return nil +} + +func (x *Credential) GetHint() string { + if x != nil { + return x.Hint + } + return "" +} + +func (x *Credential) GetWorkloadIdentityName() string { + if x != nil { + return x.WorkloadIdentityName + } + return "" +} + +func (x *Credential) GetWorkloadIdentityRevision() string { + if x != nil { + return x.WorkloadIdentityRevision + } + return "" +} + +func (x *Credential) GetSpiffeId() string { + if x != nil { + return x.SpiffeId + } + return "" +} + +func (m *Credential) GetCredential() isCredential_Credential { + if m != nil { + return m.Credential + } + return nil +} + +func (x *Credential) GetX509Svid() *X509SVIDCredential { + if x, ok := x.GetCredential().(*Credential_X509Svid); ok { + return x.X509Svid + } + return nil +} + +func (x *Credential) GetJwtSvid() *JWTSVIDCredential { + if x, ok := x.GetCredential().(*Credential_JwtSvid); ok { + return x.JwtSvid + } + return nil +} + +type isCredential_Credential interface { + isCredential_Credential() +} + +type Credential_X509Svid struct { + // The X509 SVID that was issued. + X509Svid *X509SVIDCredential `protobuf:"bytes,7,opt,name=x509_svid,json=x509Svid,proto3,oneof"` +} + +type Credential_JwtSvid struct { + // The JWT SVID that was issued. + JwtSvid *JWTSVIDCredential `protobuf:"bytes,8,opt,name=jwt_svid,json=jwtSvid,proto3,oneof"` +} + +func (*Credential_X509Svid) isCredential_Credential() {} + +func (*Credential_JwtSvid) isCredential_Credential() {} + +// The request for the IssueWorkloadIdentity RPC. +type IssueWorkloadIdentityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the WorkloadIdentity resource to use for issuing the credential. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The parameters for issuing the credential, varying by credential type. + // + // Types that are assignable to Credential: + // + // *IssueWorkloadIdentityRequest_X509SvidParams + // *IssueWorkloadIdentityRequest_JwtSvidParams + Credential isIssueWorkloadIdentityRequest_Credential `protobuf_oneof:"credential"` + // The workload attributes to encode into the credential. + WorkloadAttrs *WorkloadAttrs `protobuf:"bytes,4,opt,name=workload_attrs,json=workloadAttrs,proto3" json:"workload_attrs,omitempty"` + // The TTL that the client is requesting for the resulting credentials. + // This may be adjusted by the server and therefore the client MUST check the + // returned TTL rather than assuming that the requested TTL was granted. + RequestedTtl *durationpb.Duration `protobuf:"bytes,5,opt,name=requested_ttl,json=requestedTtl,proto3" json:"requested_ttl,omitempty"` +} + +func (x *IssueWorkloadIdentityRequest) Reset() { + *x = IssueWorkloadIdentityRequest{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IssueWorkloadIdentityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IssueWorkloadIdentityRequest) ProtoMessage() {} + +func (x *IssueWorkloadIdentityRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IssueWorkloadIdentityRequest.ProtoReflect.Descriptor instead. +func (*IssueWorkloadIdentityRequest) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{5} +} + +func (x *IssueWorkloadIdentityRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (m *IssueWorkloadIdentityRequest) GetCredential() isIssueWorkloadIdentityRequest_Credential { + if m != nil { + return m.Credential + } + return nil +} + +func (x *IssueWorkloadIdentityRequest) GetX509SvidParams() *X509SVIDParams { + if x, ok := x.GetCredential().(*IssueWorkloadIdentityRequest_X509SvidParams); ok { + return x.X509SvidParams + } + return nil +} + +func (x *IssueWorkloadIdentityRequest) GetJwtSvidParams() *JWTSVIDParams { + if x, ok := x.GetCredential().(*IssueWorkloadIdentityRequest_JwtSvidParams); ok { + return x.JwtSvidParams + } + return nil +} + +func (x *IssueWorkloadIdentityRequest) GetWorkloadAttrs() *WorkloadAttrs { + if x != nil { + return x.WorkloadAttrs + } + return nil +} + +func (x *IssueWorkloadIdentityRequest) GetRequestedTtl() *durationpb.Duration { + if x != nil { + return x.RequestedTtl + } + return nil +} + +type isIssueWorkloadIdentityRequest_Credential interface { + isIssueWorkloadIdentityRequest_Credential() +} + +type IssueWorkloadIdentityRequest_X509SvidParams struct { + // The parameters for issuing an X509 SVID. + X509SvidParams *X509SVIDParams `protobuf:"bytes,2,opt,name=x509_svid_params,json=x509SvidParams,proto3,oneof"` +} + +type IssueWorkloadIdentityRequest_JwtSvidParams struct { + // The parameters for issuing a JWT SVID. + JwtSvidParams *JWTSVIDParams `protobuf:"bytes,3,opt,name=jwt_svid_params,json=jwtSvidParams,proto3,oneof"` +} + +func (*IssueWorkloadIdentityRequest_X509SvidParams) isIssueWorkloadIdentityRequest_Credential() {} + +func (*IssueWorkloadIdentityRequest_JwtSvidParams) isIssueWorkloadIdentityRequest_Credential() {} + +// The response for the IssueWorkloadIdentity RPC. +type IssueWorkloadIdentityResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The issued credential. + Credential *Credential `protobuf:"bytes,1,opt,name=credential,proto3" json:"credential,omitempty"` +} + +func (x *IssueWorkloadIdentityResponse) Reset() { + *x = IssueWorkloadIdentityResponse{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IssueWorkloadIdentityResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IssueWorkloadIdentityResponse) ProtoMessage() {} + +func (x *IssueWorkloadIdentityResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IssueWorkloadIdentityResponse.ProtoReflect.Descriptor instead. +func (*IssueWorkloadIdentityResponse) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{6} +} + +func (x *IssueWorkloadIdentityResponse) GetCredential() *Credential { + if x != nil { + return x.Credential + } + return nil +} + +// A key-values pair for selecting WorkloadIdentity resources based on their +// labels. +type LabelSelector struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key to match. + // If this is wildcard, then a single value of wildcard must also be provided. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // Any of the acceptable matching values. + Values []string `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *LabelSelector) Reset() { + *x = LabelSelector{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LabelSelector) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabelSelector) ProtoMessage() {} + +func (x *LabelSelector) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LabelSelector.ProtoReflect.Descriptor instead. +func (*LabelSelector) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{7} +} + +func (x *LabelSelector) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *LabelSelector) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +// The request for the IssueWorkloadIdentities RPC. +type IssueWorkloadIdentitiesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The label selectors to use for selecting WorkloadIdentity resources. + // At least one selector must be provided. + LabelSelectors []*LabelSelector `protobuf:"bytes,1,rep,name=label_selectors,json=labelSelectors,proto3" json:"label_selectors,omitempty"` + // The parameters for issuing the credentials, varying by credential type. + // + // Types that are assignable to Credential: + // + // *IssueWorkloadIdentitiesRequest_X509SvidParams + // *IssueWorkloadIdentitiesRequest_JwtSvidParams + Credential isIssueWorkloadIdentitiesRequest_Credential `protobuf_oneof:"credential"` + // The workload attributes to encode into the credentials. + WorkloadAttrs *WorkloadAttrs `protobuf:"bytes,4,opt,name=workload_attrs,json=workloadAttrs,proto3" json:"workload_attrs,omitempty"` + // The TTL that the client is requesting for the resulting credentials. + // This may be adjusted by the server and therefore the client MUST check the + // returned TTL rather than assuming that the requested TTL was granted. + RequestedTtl *durationpb.Duration `protobuf:"bytes,5,opt,name=requested_ttl,json=requestedTtl,proto3" json:"requested_ttl,omitempty"` +} + +func (x *IssueWorkloadIdentitiesRequest) Reset() { + *x = IssueWorkloadIdentitiesRequest{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IssueWorkloadIdentitiesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IssueWorkloadIdentitiesRequest) ProtoMessage() {} + +func (x *IssueWorkloadIdentitiesRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IssueWorkloadIdentitiesRequest.ProtoReflect.Descriptor instead. +func (*IssueWorkloadIdentitiesRequest) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{8} +} + +func (x *IssueWorkloadIdentitiesRequest) GetLabelSelectors() []*LabelSelector { + if x != nil { + return x.LabelSelectors + } + return nil +} + +func (m *IssueWorkloadIdentitiesRequest) GetCredential() isIssueWorkloadIdentitiesRequest_Credential { + if m != nil { + return m.Credential + } + return nil +} + +func (x *IssueWorkloadIdentitiesRequest) GetX509SvidParams() *X509SVIDParams { + if x, ok := x.GetCredential().(*IssueWorkloadIdentitiesRequest_X509SvidParams); ok { + return x.X509SvidParams + } + return nil +} + +func (x *IssueWorkloadIdentitiesRequest) GetJwtSvidParams() *JWTSVIDParams { + if x, ok := x.GetCredential().(*IssueWorkloadIdentitiesRequest_JwtSvidParams); ok { + return x.JwtSvidParams + } + return nil +} + +func (x *IssueWorkloadIdentitiesRequest) GetWorkloadAttrs() *WorkloadAttrs { + if x != nil { + return x.WorkloadAttrs + } + return nil +} + +func (x *IssueWorkloadIdentitiesRequest) GetRequestedTtl() *durationpb.Duration { + if x != nil { + return x.RequestedTtl + } + return nil +} + +type isIssueWorkloadIdentitiesRequest_Credential interface { + isIssueWorkloadIdentitiesRequest_Credential() +} + +type IssueWorkloadIdentitiesRequest_X509SvidParams struct { + // The parameters for issuing an X509 SVID. + X509SvidParams *X509SVIDParams `protobuf:"bytes,2,opt,name=x509_svid_params,json=x509SvidParams,proto3,oneof"` +} + +type IssueWorkloadIdentitiesRequest_JwtSvidParams struct { + // The parameters for issuing a JWT SVID. + JwtSvidParams *JWTSVIDParams `protobuf:"bytes,3,opt,name=jwt_svid_params,json=jwtSvidParams,proto3,oneof"` +} + +func (*IssueWorkloadIdentitiesRequest_X509SvidParams) isIssueWorkloadIdentitiesRequest_Credential() {} + +func (*IssueWorkloadIdentitiesRequest_JwtSvidParams) isIssueWorkloadIdentitiesRequest_Credential() {} + +// The response for the IssueWorkloadIdentities RPC. +type IssueWorkloadIdentitiesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The issued credentials. + Credentials []*Credential `protobuf:"bytes,1,rep,name=credentials,proto3" json:"credentials,omitempty"` +} + +func (x *IssueWorkloadIdentitiesResponse) Reset() { + *x = IssueWorkloadIdentitiesResponse{} + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IssueWorkloadIdentitiesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IssueWorkloadIdentitiesResponse) ProtoMessage() {} + +func (x *IssueWorkloadIdentitiesResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IssueWorkloadIdentitiesResponse.ProtoReflect.Descriptor instead. +func (*IssueWorkloadIdentitiesResponse) Descriptor() ([]byte, []int) { + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP(), []int{9} +} + +func (x *IssueWorkloadIdentitiesResponse) GetCredentials() []*Credential { + if x != nil { + return x.Credentials + } + return nil +} + +var File_teleport_workloadidentity_v1_issuer_service_proto protoreflect.FileDescriptor + +var file_teleport_workloadidentity_v1_issuer_service_proto_rawDesc = []byte{ + 0x0a, 0x31, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, + 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x28, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x61, 0x74, 0x74, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2f, 0x0a, 0x0e, + 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x2d, 0x0a, + 0x0d, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x12, + 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x63, 0x65, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x11, 0x4a, + 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, + 0x77, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x74, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6a, 0x74, 0x69, 0x22, 0xbf, 0x03, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, + 0x12, 0x32, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x68, 0x69, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, + 0x0a, 0x1a, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x18, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, + 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x09, 0x78, 0x35, 0x30, + 0x39, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, + 0x53, 0x56, 0x49, 0x44, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x48, 0x00, + 0x52, 0x08, 0x78, 0x35, 0x30, 0x39, 0x53, 0x76, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x6a, 0x77, + 0x74, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, 0x54, 0x53, + 0x56, 0x49, 0x44, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x48, 0x00, 0x52, + 0x07, 0x6a, 0x77, 0x74, 0x53, 0x76, 0x69, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x22, 0x85, 0x03, 0x0a, 0x1c, 0x49, 0x73, 0x73, 0x75, 0x65, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x58, 0x0a, 0x10, 0x78, + 0x35, 0x30, 0x39, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x78, 0x35, 0x30, 0x39, 0x53, 0x76, 0x69, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x55, 0x0a, 0x0f, 0x6a, 0x77, 0x74, 0x5f, 0x73, 0x76, 0x69, + 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, + 0x54, 0x53, 0x56, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x6a, + 0x77, 0x74, 0x53, 0x76, 0x69, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0e, + 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, + 0x73, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, 0x72, 0x73, + 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x74, + 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x74, 0x6c, + 0x42, 0x0c, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x22, 0x69, + 0x0a, 0x1d, 0x49, 0x73, 0x73, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x0a, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x22, 0x39, 0x0a, 0x0d, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x22, 0xc9, 0x03, 0x0a, 0x1e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x0f, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0e, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x58, 0x0a, + 0x10, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x78, 0x35, 0x30, 0x39, 0x53, 0x76, 0x69, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x55, 0x0a, 0x0f, 0x6a, 0x77, 0x74, 0x5f, 0x73, + 0x76, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, + 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, + 0x0d, 0x6a, 0x77, 0x74, 0x53, 0x76, 0x69, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, + 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, + 0x74, 0x72, 0x73, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x74, 0x74, + 0x72, 0x73, 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, + 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, + 0x74, 0x6c, 0x42, 0x0c, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x22, 0x6d, 0x0a, 0x1f, 0x49, 0x73, 0x73, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x32, + 0xcd, 0x02, 0x0a, 0x1f, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x49, 0x73, 0x73, 0x75, 0x65, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3a, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, + 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x17, 0x49, 0x73, 0x73, 0x75, 0x65, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x3c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x66, 0x5a, 0x64, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, + 0x76, 0x31, 0x3b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x76, 0x31, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_teleport_workloadidentity_v1_issuer_service_proto_rawDescOnce sync.Once + file_teleport_workloadidentity_v1_issuer_service_proto_rawDescData = file_teleport_workloadidentity_v1_issuer_service_proto_rawDesc +) + +func file_teleport_workloadidentity_v1_issuer_service_proto_rawDescGZIP() []byte { + file_teleport_workloadidentity_v1_issuer_service_proto_rawDescOnce.Do(func() { + file_teleport_workloadidentity_v1_issuer_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_teleport_workloadidentity_v1_issuer_service_proto_rawDescData) + }) + return file_teleport_workloadidentity_v1_issuer_service_proto_rawDescData +} + +var file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_teleport_workloadidentity_v1_issuer_service_proto_goTypes = []any{ + (*X509SVIDParams)(nil), // 0: teleport.workloadidentity.v1.X509SVIDParams + (*JWTSVIDParams)(nil), // 1: teleport.workloadidentity.v1.JWTSVIDParams + (*X509SVIDCredential)(nil), // 2: teleport.workloadidentity.v1.X509SVIDCredential + (*JWTSVIDCredential)(nil), // 3: teleport.workloadidentity.v1.JWTSVIDCredential + (*Credential)(nil), // 4: teleport.workloadidentity.v1.Credential + (*IssueWorkloadIdentityRequest)(nil), // 5: teleport.workloadidentity.v1.IssueWorkloadIdentityRequest + (*IssueWorkloadIdentityResponse)(nil), // 6: teleport.workloadidentity.v1.IssueWorkloadIdentityResponse + (*LabelSelector)(nil), // 7: teleport.workloadidentity.v1.LabelSelector + (*IssueWorkloadIdentitiesRequest)(nil), // 8: teleport.workloadidentity.v1.IssueWorkloadIdentitiesRequest + (*IssueWorkloadIdentitiesResponse)(nil), // 9: teleport.workloadidentity.v1.IssueWorkloadIdentitiesResponse + (*durationpb.Duration)(nil), // 10: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp + (*WorkloadAttrs)(nil), // 12: teleport.workloadidentity.v1.WorkloadAttrs +} +var file_teleport_workloadidentity_v1_issuer_service_proto_depIdxs = []int32{ + 10, // 0: teleport.workloadidentity.v1.Credential.ttl:type_name -> google.protobuf.Duration + 11, // 1: teleport.workloadidentity.v1.Credential.expiry:type_name -> google.protobuf.Timestamp + 2, // 2: teleport.workloadidentity.v1.Credential.x509_svid:type_name -> teleport.workloadidentity.v1.X509SVIDCredential + 3, // 3: teleport.workloadidentity.v1.Credential.jwt_svid:type_name -> teleport.workloadidentity.v1.JWTSVIDCredential + 0, // 4: teleport.workloadidentity.v1.IssueWorkloadIdentityRequest.x509_svid_params:type_name -> teleport.workloadidentity.v1.X509SVIDParams + 1, // 5: teleport.workloadidentity.v1.IssueWorkloadIdentityRequest.jwt_svid_params:type_name -> teleport.workloadidentity.v1.JWTSVIDParams + 12, // 6: teleport.workloadidentity.v1.IssueWorkloadIdentityRequest.workload_attrs:type_name -> teleport.workloadidentity.v1.WorkloadAttrs + 10, // 7: teleport.workloadidentity.v1.IssueWorkloadIdentityRequest.requested_ttl:type_name -> google.protobuf.Duration + 4, // 8: teleport.workloadidentity.v1.IssueWorkloadIdentityResponse.credential:type_name -> teleport.workloadidentity.v1.Credential + 7, // 9: teleport.workloadidentity.v1.IssueWorkloadIdentitiesRequest.label_selectors:type_name -> teleport.workloadidentity.v1.LabelSelector + 0, // 10: teleport.workloadidentity.v1.IssueWorkloadIdentitiesRequest.x509_svid_params:type_name -> teleport.workloadidentity.v1.X509SVIDParams + 1, // 11: teleport.workloadidentity.v1.IssueWorkloadIdentitiesRequest.jwt_svid_params:type_name -> teleport.workloadidentity.v1.JWTSVIDParams + 12, // 12: teleport.workloadidentity.v1.IssueWorkloadIdentitiesRequest.workload_attrs:type_name -> teleport.workloadidentity.v1.WorkloadAttrs + 10, // 13: teleport.workloadidentity.v1.IssueWorkloadIdentitiesRequest.requested_ttl:type_name -> google.protobuf.Duration + 4, // 14: teleport.workloadidentity.v1.IssueWorkloadIdentitiesResponse.credentials:type_name -> teleport.workloadidentity.v1.Credential + 5, // 15: teleport.workloadidentity.v1.WorkloadIdentityIssuanceService.IssueWorkloadIdentity:input_type -> teleport.workloadidentity.v1.IssueWorkloadIdentityRequest + 8, // 16: teleport.workloadidentity.v1.WorkloadIdentityIssuanceService.IssueWorkloadIdentities:input_type -> teleport.workloadidentity.v1.IssueWorkloadIdentitiesRequest + 6, // 17: teleport.workloadidentity.v1.WorkloadIdentityIssuanceService.IssueWorkloadIdentity:output_type -> teleport.workloadidentity.v1.IssueWorkloadIdentityResponse + 9, // 18: teleport.workloadidentity.v1.WorkloadIdentityIssuanceService.IssueWorkloadIdentities:output_type -> teleport.workloadidentity.v1.IssueWorkloadIdentitiesResponse + 17, // [17:19] is the sub-list for method output_type + 15, // [15:17] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_teleport_workloadidentity_v1_issuer_service_proto_init() } +func file_teleport_workloadidentity_v1_issuer_service_proto_init() { + if File_teleport_workloadidentity_v1_issuer_service_proto != nil { + return + } + file_teleport_workloadidentity_v1_attrs_proto_init() + file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[4].OneofWrappers = []any{ + (*Credential_X509Svid)(nil), + (*Credential_JwtSvid)(nil), + } + file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[5].OneofWrappers = []any{ + (*IssueWorkloadIdentityRequest_X509SvidParams)(nil), + (*IssueWorkloadIdentityRequest_JwtSvidParams)(nil), + } + file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes[8].OneofWrappers = []any{ + (*IssueWorkloadIdentitiesRequest_X509SvidParams)(nil), + (*IssueWorkloadIdentitiesRequest_JwtSvidParams)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_teleport_workloadidentity_v1_issuer_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 10, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_teleport_workloadidentity_v1_issuer_service_proto_goTypes, + DependencyIndexes: file_teleport_workloadidentity_v1_issuer_service_proto_depIdxs, + MessageInfos: file_teleport_workloadidentity_v1_issuer_service_proto_msgTypes, + }.Build() + File_teleport_workloadidentity_v1_issuer_service_proto = out.File + file_teleport_workloadidentity_v1_issuer_service_proto_rawDesc = nil + file_teleport_workloadidentity_v1_issuer_service_proto_goTypes = nil + file_teleport_workloadidentity_v1_issuer_service_proto_depIdxs = nil +} diff --git a/api/gen/proto/go/teleport/workloadidentity/v1/issuer_service_grpc.pb.go b/api/gen/proto/go/teleport/workloadidentity/v1/issuer_service_grpc.pb.go new file mode 100644 index 0000000000000..9477145da0907 --- /dev/null +++ b/api/gen/proto/go/teleport/workloadidentity/v1/issuer_service_grpc.pb.go @@ -0,0 +1,190 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc (unknown) +// source: teleport/workloadidentity/v1/issuer_service.proto + +package workloadidentityv1pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + WorkloadIdentityIssuanceService_IssueWorkloadIdentity_FullMethodName = "/teleport.workloadidentity.v1.WorkloadIdentityIssuanceService/IssueWorkloadIdentity" + WorkloadIdentityIssuanceService_IssueWorkloadIdentities_FullMethodName = "/teleport.workloadidentity.v1.WorkloadIdentityIssuanceService/IssueWorkloadIdentities" +) + +// WorkloadIdentityIssuanceServiceClient is the client API for WorkloadIdentityIssuanceService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// WorkloadIdentityIssuanceService is the service that issues workload identity +// credentials. +type WorkloadIdentityIssuanceServiceClient interface { + // IssueWorkloadIdentity issues a workload identity credential for the named + // WorkloadIdentity resource. If it is unable to issue a credential, + // an error will be returned. + IssueWorkloadIdentity(ctx context.Context, in *IssueWorkloadIdentityRequest, opts ...grpc.CallOption) (*IssueWorkloadIdentityResponse, error) + // IssueWorkloadIdentities can issue multiple workload identity credentials + // based on label selectors for the WorkloadIdentity resources. + IssueWorkloadIdentities(ctx context.Context, in *IssueWorkloadIdentitiesRequest, opts ...grpc.CallOption) (*IssueWorkloadIdentitiesResponse, error) +} + +type workloadIdentityIssuanceServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewWorkloadIdentityIssuanceServiceClient(cc grpc.ClientConnInterface) WorkloadIdentityIssuanceServiceClient { + return &workloadIdentityIssuanceServiceClient{cc} +} + +func (c *workloadIdentityIssuanceServiceClient) IssueWorkloadIdentity(ctx context.Context, in *IssueWorkloadIdentityRequest, opts ...grpc.CallOption) (*IssueWorkloadIdentityResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IssueWorkloadIdentityResponse) + err := c.cc.Invoke(ctx, WorkloadIdentityIssuanceService_IssueWorkloadIdentity_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workloadIdentityIssuanceServiceClient) IssueWorkloadIdentities(ctx context.Context, in *IssueWorkloadIdentitiesRequest, opts ...grpc.CallOption) (*IssueWorkloadIdentitiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IssueWorkloadIdentitiesResponse) + err := c.cc.Invoke(ctx, WorkloadIdentityIssuanceService_IssueWorkloadIdentities_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// WorkloadIdentityIssuanceServiceServer is the server API for WorkloadIdentityIssuanceService service. +// All implementations must embed UnimplementedWorkloadIdentityIssuanceServiceServer +// for forward compatibility. +// +// WorkloadIdentityIssuanceService is the service that issues workload identity +// credentials. +type WorkloadIdentityIssuanceServiceServer interface { + // IssueWorkloadIdentity issues a workload identity credential for the named + // WorkloadIdentity resource. If it is unable to issue a credential, + // an error will be returned. + IssueWorkloadIdentity(context.Context, *IssueWorkloadIdentityRequest) (*IssueWorkloadIdentityResponse, error) + // IssueWorkloadIdentities can issue multiple workload identity credentials + // based on label selectors for the WorkloadIdentity resources. + IssueWorkloadIdentities(context.Context, *IssueWorkloadIdentitiesRequest) (*IssueWorkloadIdentitiesResponse, error) + mustEmbedUnimplementedWorkloadIdentityIssuanceServiceServer() +} + +// UnimplementedWorkloadIdentityIssuanceServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWorkloadIdentityIssuanceServiceServer struct{} + +func (UnimplementedWorkloadIdentityIssuanceServiceServer) IssueWorkloadIdentity(context.Context, *IssueWorkloadIdentityRequest) (*IssueWorkloadIdentityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IssueWorkloadIdentity not implemented") +} +func (UnimplementedWorkloadIdentityIssuanceServiceServer) IssueWorkloadIdentities(context.Context, *IssueWorkloadIdentitiesRequest) (*IssueWorkloadIdentitiesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IssueWorkloadIdentities not implemented") +} +func (UnimplementedWorkloadIdentityIssuanceServiceServer) mustEmbedUnimplementedWorkloadIdentityIssuanceServiceServer() { +} +func (UnimplementedWorkloadIdentityIssuanceServiceServer) testEmbeddedByValue() {} + +// UnsafeWorkloadIdentityIssuanceServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to WorkloadIdentityIssuanceServiceServer will +// result in compilation errors. +type UnsafeWorkloadIdentityIssuanceServiceServer interface { + mustEmbedUnimplementedWorkloadIdentityIssuanceServiceServer() +} + +func RegisterWorkloadIdentityIssuanceServiceServer(s grpc.ServiceRegistrar, srv WorkloadIdentityIssuanceServiceServer) { + // If the following call pancis, it indicates UnimplementedWorkloadIdentityIssuanceServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&WorkloadIdentityIssuanceService_ServiceDesc, srv) +} + +func _WorkloadIdentityIssuanceService_IssueWorkloadIdentity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IssueWorkloadIdentityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkloadIdentityIssuanceServiceServer).IssueWorkloadIdentity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WorkloadIdentityIssuanceService_IssueWorkloadIdentity_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkloadIdentityIssuanceServiceServer).IssueWorkloadIdentity(ctx, req.(*IssueWorkloadIdentityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkloadIdentityIssuanceService_IssueWorkloadIdentities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IssueWorkloadIdentitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkloadIdentityIssuanceServiceServer).IssueWorkloadIdentities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WorkloadIdentityIssuanceService_IssueWorkloadIdentities_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkloadIdentityIssuanceServiceServer).IssueWorkloadIdentities(ctx, req.(*IssueWorkloadIdentitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// WorkloadIdentityIssuanceService_ServiceDesc is the grpc.ServiceDesc for WorkloadIdentityIssuanceService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var WorkloadIdentityIssuanceService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "teleport.workloadidentity.v1.WorkloadIdentityIssuanceService", + HandlerType: (*WorkloadIdentityIssuanceServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "IssueWorkloadIdentity", + Handler: _WorkloadIdentityIssuanceService_IssueWorkloadIdentity_Handler, + }, + { + MethodName: "IssueWorkloadIdentities", + Handler: _WorkloadIdentityIssuanceService_IssueWorkloadIdentities_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "teleport/workloadidentity/v1/issuer_service.proto", +} diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index 0fbe8abdb3247..aac7d5585f899 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -6732,6 +6732,12 @@ message SPIFFESVIDIssued { // Audiences is the list of audiences in the issued SVID. // Only present if the SVID is a JWT. repeated string Audiences = 11 [(gogoproto.jsontag) = "audiences,omitempty"]; + // The WorkloadIdentity resource that was used to issue the SVID, this will + // be empty if the legacy RPCs were used. + string WorkloadIdentity = 12 [(gogoproto.jsontag) = "workload_identity,omitempty"]; + // The revision of the WorkloadIdentity resource that was used to issue the + // SVID. This will be empty if the legacy RPCs were used. + string WorkloadIdentityRevision = 13 [(gogoproto.jsontag) = "workload_identity_revision,omitempty"]; } // AuthPreferenceUpdate is emitted when the auth preference is updated. diff --git a/api/proto/teleport/workloadidentity/v1/attrs.proto b/api/proto/teleport/workloadidentity/v1/attrs.proto new file mode 100644 index 0000000000000..5797146c700ce --- /dev/null +++ b/api/proto/teleport/workloadidentity/v1/attrs.proto @@ -0,0 +1,83 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package teleport.workloadidentity.v1; + +option go_package = "github.com/gravitational/teleport/api/gen/proto/go/teleport/workloadidentity/v1;workloadidentityv1pb"; + +// Attributes sourced from the Kubernetes workload attestor. +message WorkloadAttrsKubernetes { + // Whether the workload passed Kubernetes attestation. + bool attested = 1; + // The namespace of the workload pod. + string namespace = 2; + // The name of the workload pod. + string pod_name = 3; + // The service account of the workload pod. + string service_account = 4; + // The UID of the workload pod. + string pod_uid = 5; + // The labels of the workload pod. + map labels = 6; +} + +// Attributes sourced from the Unix workload attestor. +message WorkloadAttrsUnix { + // Whether the workload passed Kubernetes attestation. + bool attested = 1; + // The PID of the workload process. + int32 pid = 2; + // The primary user ID of the workload process. + uint32 gid = 3; + // The primary group ID of the workload process. + uint32 uid = 4; +} + +// The attributes provided by `tbot` regarding the workload's attestation. +// This will be mostly unset if the workload has not requested credentials via +// the SPIFFE Workload API. +message WorkloadAttrs { + // The Unix-specific attributes. + WorkloadAttrsUnix unix = 1; + // The Kubernetes-specific attributes. + WorkloadAttrsKubernetes kubernetes = 2; +} + +// Attributes related to the user/bot making the request for a workload +// identity. +message UserAttrs { + // The name of the user. + string name = 1; + // Whether the user is a bot. + bool is_bot = 2; + // If the user is a bot, the name of the bot. + string bot_name = 3; + // If the user is a bot, the instance ID of the bot. + string bot_instance_id = 4; + // Labels of the user. + map labels = 5; +} + +// The attributes of a principal requesting a workload identity. These +// attributes can be leveraged in rules, expressions and templating within the +// WorkloadIdentity resource. +message Attrs { + // Attributes sourced by workload attestation performed by `tbot`. + WorkloadAttrs workload = 1; + // Attributes sourced from the user/bot making the request for a workload + // identity credential. + UserAttrs user = 2; +} diff --git a/api/proto/teleport/workloadidentity/v1/issuer_service.proto b/api/proto/teleport/workloadidentity/v1/issuer_service.proto new file mode 100644 index 0000000000000..9bac63e4a47a1 --- /dev/null +++ b/api/proto/teleport/workloadidentity/v1/issuer_service.proto @@ -0,0 +1,151 @@ +// Copyright 2024 Gravitational, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package teleport.workloadidentity.v1; + +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "teleport/workloadidentity/v1/attrs.proto"; + +option go_package = "github.com/gravitational/teleport/api/gen/proto/go/teleport/workloadidentity/v1;workloadidentityv1pb"; + +// WorkloadIdentityIssuanceService is the service that issues workload identity +// credentials. +service WorkloadIdentityIssuanceService { + // IssueWorkloadIdentity issues a workload identity credential for the named + // WorkloadIdentity resource. If it is unable to issue a credential, + // an error will be returned. + rpc IssueWorkloadIdentity(IssueWorkloadIdentityRequest) returns (IssueWorkloadIdentityResponse); + // IssueWorkloadIdentities can issue multiple workload identity credentials + // based on label selectors for the WorkloadIdentity resources. + rpc IssueWorkloadIdentities(IssueWorkloadIdentitiesRequest) returns (IssueWorkloadIdentitiesResponse); +} + +// The parameters for issuing an X509 SVID. +message X509SVIDParams { + // The PKIX, ASN.1 DER public key to encode into the X509 SVID. + bytes public_key = 1; +} + +// The parameters for issuing a JWT SVID. +message JWTSVIDParams { + // The audiences to encode into the JWT SVID as the `aud` claim. + repeated string audiences = 1; +} + +// The issued X509 SVID credential and any X509 SVID specific metadata. +message X509SVIDCredential { + // The X509 SVID that was issued. + // ASN.1 DER encoded X.509 certificate. No PEM. + bytes cert = 1; + // The serial number of the X509 SVID. + string serial_number = 2; +} + +// The issued JWT SVID credential and any JWT SVID specific metadata. +message JWTSVIDCredential { + // The signed JWT + string jwt = 1; + // The JTI of the JWT + string jti = 2; +} + +// A credential, and its metadata, that has been issued by Teleport Workload +// Identity. +message Credential { + // The TTL that was chosen by the server. + google.protobuf.Duration ttl = 1; + // The time that the TTL is reached for this credential. + google.protobuf.Timestamp expiry = 2; + // The hint configured for this Workload Identity - if any. This is provided + // to workloads using the SPIFFE Workload API to fetch credentials. + string hint = 3; + // The name of the Workload Identity resource used to issue this credential. + string workload_identity_name = 4; + // The revision of the Workload Identity resource used to issue this + // credential. + string workload_identity_revision = 5; + // The fully qualified SPIFFE ID that was encoded into the SVID. + string spiffe_id = 6; + + oneof credential { + // The X509 SVID that was issued. + X509SVIDCredential x509_svid = 7; + // The JWT SVID that was issued. + JWTSVIDCredential jwt_svid = 8; + } +} + +// The request for the IssueWorkloadIdentity RPC. +message IssueWorkloadIdentityRequest { + // The name of the WorkloadIdentity resource to use for issuing the credential. + string name = 1; + // The parameters for issuing the credential, varying by credential type. + oneof credential { + // The parameters for issuing an X509 SVID. + X509SVIDParams x509_svid_params = 2; + // The parameters for issuing a JWT SVID. + JWTSVIDParams jwt_svid_params = 3; + } + // The workload attributes to encode into the credential. + WorkloadAttrs workload_attrs = 4; + // The TTL that the client is requesting for the resulting credentials. + // This may be adjusted by the server and therefore the client MUST check the + // returned TTL rather than assuming that the requested TTL was granted. + google.protobuf.Duration requested_ttl = 5; +} + +// The response for the IssueWorkloadIdentity RPC. +message IssueWorkloadIdentityResponse { + // The issued credential. + Credential credential = 1; +} + +// A key-values pair for selecting WorkloadIdentity resources based on their +// labels. +message LabelSelector { + // The key to match. + // If this is wildcard, then a single value of wildcard must also be provided. + string key = 1; + // Any of the acceptable matching values. + repeated string values = 2; +} + +// The request for the IssueWorkloadIdentities RPC. +message IssueWorkloadIdentitiesRequest { + // The label selectors to use for selecting WorkloadIdentity resources. + // At least one selector must be provided. + repeated LabelSelector label_selectors = 1; + // The parameters for issuing the credentials, varying by credential type. + oneof credential { + // The parameters for issuing an X509 SVID. + X509SVIDParams x509_svid_params = 2; + // The parameters for issuing a JWT SVID. + JWTSVIDParams jwt_svid_params = 3; + } + // The workload attributes to encode into the credentials. + WorkloadAttrs workload_attrs = 4; + // The TTL that the client is requesting for the resulting credentials. + // This may be adjusted by the server and therefore the client MUST check the + // returned TTL rather than assuming that the requested TTL was granted. + google.protobuf.Duration requested_ttl = 5; +} + +// The response for the IssueWorkloadIdentities RPC. +message IssueWorkloadIdentitiesResponse { + // The issued credentials. + repeated Credential credentials = 1; +} diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index 26ccadadc99aa..5a3996332afab 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -13793,10 +13793,16 @@ type SPIFFESVIDIssued struct { JTI string `protobuf:"bytes,10,opt,name=JTI,proto3" json:"jti,omitempty"` // Audiences is the list of audiences in the issued SVID. // Only present if the SVID is a JWT. - Audiences []string `protobuf:"bytes,11,rep,name=Audiences,proto3" json:"audiences,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Audiences []string `protobuf:"bytes,11,rep,name=Audiences,proto3" json:"audiences,omitempty"` + // The WorkloadIdentity resource that was used to issue the SVID, this will + // be empty if the legacy RPCs were used. + WorkloadIdentity string `protobuf:"bytes,12,opt,name=WorkloadIdentity,proto3" json:"workload_identity,omitempty"` + // The revision of the WorkloadIdentity resource that was used to issue the + // SVID. This will be empty if the legacy RPCs were used. + WorkloadIdentityRevision string `protobuf:"bytes,13,opt,name=WorkloadIdentityRevision,proto3" json:"workload_identity_revision,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *SPIFFESVIDIssued) Reset() { *m = SPIFFESVIDIssued{} } @@ -15673,1098 +15679,1100 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 17447 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x74, 0x25, 0xc9, - 0x75, 0x18, 0x86, 0xf7, 0x81, 0x07, 0xe0, 0xe2, 0x73, 0x6a, 0xbe, 0x7a, 0x66, 0x67, 0xf6, 0xed, - 0xf6, 0x72, 0x87, 0x33, 0xcb, 0x5d, 0x0c, 0x77, 0x76, 0x76, 0x97, 0xfb, 0xc5, 0xe5, 0x03, 0x1e, - 0x30, 0x78, 0x33, 0xf8, 0xda, 0x7e, 0x98, 0x19, 0x2e, 0x29, 0xf2, 0xa9, 0xf1, 0xba, 0x06, 0xe8, - 0xc5, 0x43, 0xf7, 0x53, 0x77, 0xbf, 0xc1, 0x60, 0x9d, 0x0f, 0xd1, 0x91, 0x65, 0xc9, 0xa2, 0x68, - 0x86, 0x8a, 0x44, 0x59, 0x76, 0x12, 0xca, 0x1f, 0x89, 0x2c, 0xcb, 0x62, 0xe4, 0x28, 0x92, 0x28, - 0x89, 0xb1, 0x64, 0xda, 0x09, 0x2d, 0x9d, 0xe8, 0x48, 0x4e, 0xe2, 0xe3, 0x93, 0x38, 0xa0, 0xa3, - 0xc4, 0x7f, 0x70, 0x92, 0x1c, 0x9d, 0x44, 0x27, 0x66, 0x1c, 0x27, 0xc7, 0xa7, 0x6e, 0x55, 0x77, - 0x57, 0x7f, 0x3d, 0x7c, 0xae, 0xb1, 0xd8, 0xc1, 0x9f, 0x19, 0xbc, 0x7b, 0x6f, 0xdd, 0xaa, 0xbe, - 0x75, 0xab, 0xea, 0x56, 0xd5, 0xad, 0x7b, 0xe1, 0x9a, 0x47, 0x5b, 0xb4, 0x6d, 0x3b, 0xde, 0xf5, - 0x16, 0x5d, 0xd1, 0x9b, 0x9b, 0xd7, 0xbd, 0xcd, 0x36, 0x75, 0xaf, 0xd3, 0x87, 0xd4, 0xf2, 0xfc, - 0xff, 0xc6, 0xdb, 0x8e, 0xed, 0xd9, 0xa4, 0xc4, 0x7f, 0x5d, 0x3c, 0xb3, 0x62, 0xaf, 0xd8, 0x08, - 0xba, 0xce, 0xfe, 0xe2, 0xd8, 0x8b, 0x97, 0x56, 0x6c, 0x7b, 0xa5, 0x45, 0xaf, 0xe3, 0xaf, 0xe5, - 0xce, 0x83, 0xeb, 0xae, 0xe7, 0x74, 0x9a, 0x9e, 0xc0, 0x96, 0xe3, 0x58, 0xcf, 0x5c, 0xa7, 0xae, - 0xa7, 0xaf, 0xb7, 0x05, 0xc1, 0x93, 0x71, 0x82, 0x0d, 0x47, 0x6f, 0xb7, 0xa9, 0x23, 0x2a, 0xbf, - 0xf8, 0xf1, 0xa0, 0x9d, 0x7a, 0xb3, 0x49, 0x5d, 0xb7, 0x65, 0xba, 0xde, 0xf5, 0x87, 0x2f, 0x4a, - 0xbf, 0x04, 0xe1, 0xd3, 0xe9, 0x1f, 0x84, 0xff, 0x0a, 0x92, 0x17, 0xd2, 0x49, 0xfc, 0x1a, 0x63, - 0x55, 0xab, 0x5f, 0xcb, 0x43, 0xff, 0x1c, 0xf5, 0x74, 0x43, 0xf7, 0x74, 0x72, 0x09, 0x7a, 0x6b, - 0x96, 0x41, 0x1f, 0x29, 0xb9, 0xa7, 0x72, 0x57, 0x0b, 0x13, 0xa5, 0xed, 0xad, 0x72, 0x9e, 0x9a, - 0x1a, 0x07, 0x92, 0xcb, 0x50, 0x5c, 0xda, 0x6c, 0x53, 0x25, 0xff, 0x54, 0xee, 0xea, 0xc0, 0xc4, - 0xc0, 0xf6, 0x56, 0xb9, 0x17, 0x85, 0xa6, 0x21, 0x98, 0x3c, 0x0d, 0xf9, 0x5a, 0x55, 0x29, 0x20, - 0xf2, 0xd4, 0xf6, 0x56, 0x79, 0xb8, 0x63, 0x1a, 0xcf, 0xdb, 0xeb, 0xa6, 0x47, 0xd7, 0xdb, 0xde, - 0xa6, 0x96, 0xaf, 0x55, 0xc9, 0x15, 0x28, 0x4e, 0xda, 0x06, 0x55, 0x8a, 0x48, 0x44, 0xb6, 0xb7, - 0xca, 0x23, 0x4d, 0xdb, 0xa0, 0x12, 0x15, 0xe2, 0xc9, 0x67, 0xa0, 0xb8, 0x64, 0xae, 0x53, 0xa5, - 0xf7, 0xa9, 0xdc, 0xd5, 0xc1, 0x1b, 0x17, 0xc7, 0xb9, 0xf8, 0xc6, 0x7d, 0xf1, 0x8d, 0x2f, 0xf9, - 0xf2, 0x9d, 0x18, 0xfb, 0xee, 0x56, 0xb9, 0x67, 0x7b, 0xab, 0x5c, 0x64, 0x22, 0xff, 0xea, 0xf7, - 0xca, 0x39, 0x0d, 0x4b, 0x92, 0x37, 0x61, 0x70, 0xb2, 0xd5, 0x71, 0x3d, 0xea, 0xcc, 0xeb, 0xeb, - 0x54, 0x29, 0x61, 0x85, 0x17, 0xb7, 0xb7, 0xca, 0xe7, 0x9a, 0x1c, 0xdc, 0xb0, 0xf4, 0x75, 0xb9, - 0x62, 0x99, 0x5c, 0xfd, 0x8d, 0x1c, 0x8c, 0xd6, 0xa9, 0xeb, 0x9a, 0xb6, 0x15, 0xc8, 0xe6, 0x59, - 0x18, 0x10, 0xa0, 0x5a, 0x15, 0xe5, 0x33, 0x30, 0xd1, 0xb7, 0xbd, 0x55, 0x2e, 0xb8, 0xa6, 0xa1, - 0x85, 0x18, 0xf2, 0x49, 0xe8, 0xbb, 0x6f, 0x7a, 0xab, 0x73, 0xd3, 0x15, 0x21, 0xa7, 0x73, 0xdb, - 0x5b, 0x65, 0xb2, 0x61, 0x7a, 0xab, 0x8d, 0xf5, 0x07, 0xba, 0x54, 0xa1, 0x4f, 0x46, 0x66, 0x61, - 0x6c, 0xd1, 0x31, 0x1f, 0xea, 0x1e, 0xbd, 0x43, 0x37, 0x17, 0xed, 0x96, 0xd9, 0xdc, 0x14, 0x52, - 0x7c, 0x6a, 0x7b, 0xab, 0x7c, 0xa9, 0xcd, 0x71, 0x8d, 0x35, 0xba, 0xd9, 0x68, 0x23, 0x56, 0x62, - 0x92, 0x28, 0xa9, 0xfe, 0x66, 0x09, 0x86, 0xee, 0xba, 0xd4, 0x09, 0xda, 0x7d, 0x05, 0x8a, 0xec, - 0xb7, 0x68, 0x32, 0xca, 0xbc, 0xe3, 0x52, 0x47, 0x96, 0x39, 0xc3, 0x93, 0x6b, 0xd0, 0x3b, 0x6b, - 0xaf, 0x98, 0x96, 0x68, 0xf6, 0xe9, 0xed, 0xad, 0xf2, 0x68, 0x8b, 0x01, 0x24, 0x4a, 0x4e, 0x41, - 0x3e, 0x0d, 0x43, 0xb5, 0x75, 0xa6, 0x43, 0xb6, 0xa5, 0x7b, 0xb6, 0x23, 0x5a, 0x8b, 0xd2, 0x35, - 0x25, 0xb8, 0x54, 0x30, 0x42, 0x4f, 0x5e, 0x07, 0xa8, 0xdc, 0xaf, 0x6b, 0x76, 0x8b, 0x56, 0xb4, - 0x79, 0xa1, 0x0c, 0x58, 0x5a, 0xdf, 0x70, 0x1b, 0x8e, 0xdd, 0xa2, 0x0d, 0xdd, 0x91, 0xab, 0x95, - 0xa8, 0xc9, 0x14, 0x8c, 0x54, 0x70, 0x54, 0x68, 0xf4, 0x87, 0x3a, 0xd4, 0xf5, 0x5c, 0xa5, 0xf7, - 0xa9, 0xc2, 0xd5, 0x81, 0x89, 0xcb, 0xdb, 0x5b, 0xe5, 0x0b, 0x7c, 0xbc, 0x34, 0x1c, 0x81, 0x92, - 0x58, 0xc4, 0x0a, 0x91, 0x09, 0x18, 0xae, 0xbc, 0xdf, 0x71, 0x68, 0xcd, 0xa0, 0x96, 0x67, 0x7a, - 0x9b, 0x42, 0x43, 0x2e, 0x6d, 0x6f, 0x95, 0x15, 0x9d, 0x21, 0x1a, 0xa6, 0xc0, 0x48, 0x4c, 0xa2, - 0x45, 0xc8, 0x02, 0x9c, 0xba, 0x35, 0xb9, 0x58, 0xa7, 0xce, 0x43, 0xb3, 0x49, 0x2b, 0xcd, 0xa6, - 0xdd, 0xb1, 0x3c, 0xa5, 0x0f, 0xf9, 0x3c, 0xbd, 0xbd, 0x55, 0xbe, 0xbc, 0xd2, 0x6c, 0x37, 0x5c, - 0x8e, 0x6d, 0xe8, 0x1c, 0x2d, 0x31, 0x4b, 0x96, 0x25, 0x9f, 0x83, 0xe1, 0x25, 0x87, 0x69, 0xa1, - 0x51, 0xa5, 0x0c, 0xae, 0xf4, 0xa3, 0xfe, 0x9f, 0x1b, 0x17, 0x33, 0x15, 0x87, 0xfa, 0x3d, 0xcb, - 0x1b, 0xeb, 0xf1, 0x02, 0x0d, 0x03, 0x71, 0x72, 0x63, 0x23, 0xac, 0x08, 0x05, 0x85, 0x7d, 0xbc, - 0xe9, 0x50, 0x23, 0xa1, 0x6d, 0x03, 0xd8, 0xe6, 0x6b, 0xdb, 0x5b, 0xe5, 0x67, 0x1d, 0x41, 0xd3, - 0xe8, 0xaa, 0x76, 0x99, 0xac, 0xc8, 0x14, 0xf4, 0x33, 0x6d, 0xba, 0x63, 0x5a, 0x86, 0x02, 0x4f, - 0xe5, 0xae, 0x8e, 0xdc, 0x18, 0xf3, 0x5b, 0xef, 0xc3, 0x27, 0xce, 0x6f, 0x6f, 0x95, 0x4f, 0x33, - 0x1d, 0x6c, 0xac, 0x99, 0x96, 0x3c, 0x45, 0x04, 0x45, 0xd9, 0x28, 0x9a, 0xb0, 0x3d, 0x1c, 0xba, - 0x83, 0xe1, 0x28, 0x5a, 0xb6, 0xbd, 0xf8, 0xb0, 0xf5, 0xc9, 0xc8, 0x24, 0x0c, 0x4f, 0xd8, 0x5e, - 0xcd, 0x72, 0x3d, 0xdd, 0x6a, 0xd2, 0x5a, 0x55, 0x19, 0xc2, 0x72, 0xa8, 0x16, 0xac, 0x9c, 0x29, - 0x30, 0x8d, 0xc8, 0xa4, 0x14, 0x2d, 0xa3, 0xfe, 0x8b, 0x22, 0x8c, 0xb0, 0x3e, 0x91, 0x86, 0x4f, - 0x85, 0xcd, 0x04, 0x0c, 0xc2, 0x6a, 0x71, 0xdb, 0x7a, 0x93, 0x8a, 0x91, 0x84, 0x5f, 0x61, 0xf9, - 0x40, 0x89, 0x67, 0x9c, 0x9e, 0x5c, 0x83, 0x7e, 0x0e, 0xaa, 0x55, 0xc5, 0xe0, 0x1a, 0xde, 0xde, - 0x2a, 0x0f, 0xb8, 0x08, 0x6b, 0x98, 0x86, 0x16, 0xa0, 0x99, 0x76, 0xf3, 0xbf, 0x67, 0x6c, 0xd7, - 0x63, 0xcc, 0xc5, 0xd8, 0xc2, 0xcf, 0x10, 0x05, 0x56, 0x05, 0x4a, 0xd6, 0xee, 0x68, 0x21, 0xf2, - 0x1a, 0x00, 0x87, 0x54, 0x0c, 0xc3, 0x11, 0x03, 0xec, 0xc2, 0xf6, 0x56, 0xf9, 0xac, 0x60, 0xa1, - 0x1b, 0x86, 0x3c, 0x3a, 0x25, 0x62, 0xb2, 0x0e, 0x43, 0xfc, 0xd7, 0xac, 0xbe, 0x4c, 0x5b, 0x7c, - 0x74, 0x0d, 0xde, 0xb8, 0xea, 0x77, 0x62, 0x54, 0x3a, 0xe3, 0x32, 0xe9, 0x94, 0xe5, 0x39, 0x9b, - 0x13, 0x65, 0x31, 0x21, 0x9f, 0x17, 0x55, 0xb5, 0x10, 0x27, 0x4f, 0x05, 0x72, 0x19, 0x36, 0x4f, - 0x4f, 0xdb, 0xce, 0x86, 0xee, 0x18, 0xd4, 0x98, 0xd8, 0x94, 0xe7, 0xe9, 0x07, 0x3e, 0xb8, 0xb1, - 0x2c, 0xab, 0x9e, 0x4c, 0xce, 0x3a, 0x9d, 0x73, 0xab, 0x77, 0x96, 0x51, 0xe5, 0xfa, 0x12, 0xd2, - 0x72, 0x3b, 0xcb, 0x71, 0x35, 0x8b, 0x96, 0x61, 0x53, 0x01, 0x07, 0xdc, 0xa3, 0x0e, 0x9b, 0xc4, - 0x71, 0xd4, 0x89, 0xa9, 0x40, 0x30, 0x79, 0xc8, 0x31, 0x49, 0x1e, 0xa2, 0xc8, 0xc5, 0xb7, 0xe1, - 0x54, 0x42, 0x14, 0x64, 0x0c, 0x0a, 0x6b, 0x74, 0x93, 0xab, 0x8b, 0xc6, 0xfe, 0x24, 0x67, 0xa0, - 0xf7, 0xa1, 0xde, 0xea, 0x88, 0x25, 0x54, 0xe3, 0x3f, 0x5e, 0xcf, 0x7f, 0x2a, 0xc7, 0x56, 0x1c, - 0x32, 0x69, 0x5b, 0x16, 0x6d, 0x7a, 0xf2, 0xa2, 0xf3, 0x0a, 0x0c, 0xcc, 0xda, 0x4d, 0xbd, 0x85, - 0xfd, 0xc8, 0xf5, 0x4e, 0xd9, 0xde, 0x2a, 0x9f, 0x61, 0x1d, 0x38, 0xde, 0x62, 0x18, 0xa9, 0x4d, - 0x21, 0x29, 0x53, 0x00, 0x8d, 0xae, 0xdb, 0x1e, 0xc5, 0x82, 0xf9, 0x50, 0x01, 0xb0, 0xa0, 0x83, - 0x28, 0x59, 0x01, 0x42, 0x62, 0x72, 0x1d, 0xfa, 0x17, 0xd9, 0x3a, 0xdb, 0xb4, 0x5b, 0x42, 0xf9, - 0x70, 0x29, 0xc0, 0xb5, 0x57, 0x1e, 0xab, 0x3e, 0x91, 0x3a, 0x03, 0x23, 0x93, 0x2d, 0x93, 0x5a, - 0x9e, 0xdc, 0x6a, 0x36, 0x92, 0x2b, 0x2b, 0xd4, 0xf2, 0xe4, 0x56, 0xe3, 0x98, 0xd7, 0x19, 0x54, - 0x6e, 0x75, 0x40, 0xaa, 0xfe, 0x41, 0x01, 0x2e, 0xdc, 0xe9, 0x2c, 0x53, 0xc7, 0xa2, 0x1e, 0x75, - 0xc5, 0x82, 0x1c, 0x70, 0x9d, 0x87, 0x53, 0x09, 0xa4, 0xe0, 0x8e, 0x0b, 0xe5, 0x5a, 0x80, 0x6c, - 0x88, 0x35, 0x5e, 0x9e, 0x6d, 0x13, 0x45, 0xc9, 0x0c, 0x8c, 0x86, 0x40, 0xd6, 0x08, 0x57, 0xc9, - 0xe3, 0x52, 0xf2, 0xe4, 0xf6, 0x56, 0xf9, 0xa2, 0xc4, 0x8d, 0x35, 0x5b, 0xd6, 0xe0, 0x78, 0x31, - 0x72, 0x07, 0xc6, 0x42, 0xd0, 0x2d, 0xc7, 0xee, 0xb4, 0x5d, 0xa5, 0x80, 0xac, 0xca, 0xdb, 0x5b, - 0xe5, 0x27, 0x24, 0x56, 0x2b, 0x88, 0x94, 0x17, 0xf0, 0x78, 0x41, 0xf2, 0x23, 0x39, 0x99, 0x9b, - 0x18, 0x85, 0x45, 0x1c, 0x85, 0xaf, 0xfa, 0xa3, 0x30, 0x53, 0x48, 0xe3, 0xf1, 0x92, 0x62, 0x50, - 0xc6, 0x9a, 0x91, 0x18, 0x94, 0x89, 0x1a, 0x2f, 0x4e, 0xc2, 0xd9, 0x54, 0x5e, 0x7b, 0xd2, 0xea, - 0x7f, 0x5e, 0x90, 0xb9, 0x2c, 0xda, 0x46, 0xd0, 0x99, 0x0b, 0x72, 0x67, 0x2e, 0xda, 0x06, 0x4e, - 0xf5, 0xb9, 0x70, 0xed, 0x94, 0x1a, 0xdb, 0xb6, 0x8d, 0xf8, 0xac, 0x9f, 0x2c, 0x4b, 0xbe, 0x08, - 0xe7, 0x12, 0x40, 0x3e, 0x5d, 0x73, 0xed, 0xbf, 0xb2, 0xbd, 0x55, 0x56, 0x53, 0xb8, 0xc6, 0x67, - 0xef, 0x0c, 0x2e, 0x44, 0x87, 0xf3, 0x92, 0xd4, 0x6d, 0xcb, 0xd3, 0x4d, 0x4b, 0x18, 0x97, 0x7c, - 0x94, 0x7c, 0x7c, 0x7b, 0xab, 0xfc, 0x8c, 0xac, 0x83, 0x3e, 0x4d, 0xbc, 0xf1, 0x59, 0x7c, 0x88, - 0x01, 0x4a, 0x0a, 0xaa, 0xb6, 0xae, 0xaf, 0xf8, 0x16, 0xf3, 0xd5, 0xed, 0xad, 0xf2, 0xc7, 0x52, - 0xeb, 0x30, 0x19, 0x95, 0xbc, 0x42, 0x67, 0x71, 0x22, 0x1a, 0x90, 0x10, 0x37, 0x6f, 0x1b, 0x14, - 0xbf, 0xa1, 0x17, 0xf9, 0xab, 0xdb, 0x5b, 0xe5, 0x27, 0x25, 0xfe, 0x96, 0x6d, 0xd0, 0x78, 0xf3, - 0x53, 0x4a, 0xab, 0xbf, 0x51, 0x80, 0x27, 0xeb, 0x95, 0xb9, 0xd9, 0x9a, 0xe1, 0x9b, 0x34, 0x8b, - 0x8e, 0xfd, 0xd0, 0x34, 0xa4, 0xd1, 0xbb, 0x0c, 0xe7, 0x63, 0xa8, 0x29, 0xb4, 0xa2, 0x02, 0x63, - 0x1a, 0xbf, 0xcd, 0x37, 0x97, 0xda, 0x82, 0xa6, 0xc1, 0x4d, 0xad, 0xe8, 0xa2, 0x9d, 0xc5, 0x88, - 0xf5, 0x51, 0x0c, 0x55, 0x5f, 0xb5, 0x1d, 0xaf, 0xd9, 0xf1, 0x84, 0x12, 0x60, 0x1f, 0x25, 0xea, - 0x70, 0x05, 0x51, 0x97, 0x2a, 0x7c, 0x3e, 0xe4, 0xc7, 0x73, 0x30, 0x56, 0xf1, 0x3c, 0xc7, 0x5c, - 0xee, 0x78, 0x74, 0x4e, 0x6f, 0xb7, 0x4d, 0x6b, 0x05, 0xc7, 0xfa, 0xe0, 0x8d, 0x37, 0x83, 0x35, - 0xb2, 0xab, 0x24, 0xc6, 0xe3, 0xc5, 0xa5, 0x21, 0xaa, 0xfb, 0xa8, 0xc6, 0x3a, 0xc7, 0xc9, 0x43, - 0x34, 0x5e, 0x8e, 0x0d, 0xd1, 0x54, 0x5e, 0x7b, 0x1a, 0xa2, 0x5f, 0x2b, 0xc0, 0xa5, 0x85, 0x35, - 0x4f, 0xd7, 0xa8, 0x6b, 0x77, 0x9c, 0x26, 0x75, 0xef, 0xb6, 0x0d, 0xdd, 0xa3, 0xe1, 0x48, 0x2d, - 0x43, 0x6f, 0xc5, 0x30, 0xa8, 0x81, 0xec, 0x7a, 0xf9, 0xb6, 0x4f, 0x67, 0x00, 0x8d, 0xc3, 0xc9, - 0xb3, 0xd0, 0x27, 0xca, 0x20, 0xf7, 0xde, 0x89, 0xc1, 0xed, 0xad, 0x72, 0x5f, 0x87, 0x83, 0x34, - 0x1f, 0xc7, 0xc8, 0xaa, 0xb4, 0x45, 0x19, 0x59, 0x21, 0x24, 0x33, 0x38, 0x48, 0xf3, 0x71, 0xe4, - 0x1d, 0x18, 0x41, 0xb6, 0x41, 0x7b, 0xc4, 0xdc, 0x77, 0xc6, 0x97, 0xae, 0xdc, 0x58, 0xbe, 0x34, - 0x61, 0x6b, 0x1a, 0x8e, 0x5f, 0x40, 0x8b, 0x31, 0x20, 0xf7, 0x61, 0x4c, 0x34, 0x22, 0x64, 0xda, - 0xdb, 0x85, 0xe9, 0xd9, 0xed, 0xad, 0xf2, 0x29, 0xd1, 0x7e, 0x89, 0x6d, 0x82, 0x09, 0x63, 0x2c, - 0x9a, 0x1d, 0x32, 0x2e, 0xed, 0xc4, 0x58, 0x7c, 0xb1, 0xcc, 0x38, 0xce, 0x44, 0x7d, 0x17, 0x86, - 0xe4, 0x82, 0xe4, 0x1c, 0x6e, 0xad, 0xf9, 0x38, 0xc1, 0x4d, 0xb9, 0x69, 0xe0, 0x7e, 0xfa, 0x45, - 0x18, 0xac, 0x52, 0xb7, 0xe9, 0x98, 0x6d, 0x66, 0x35, 0x08, 0x25, 0x1f, 0xdd, 0xde, 0x2a, 0x0f, - 0x1a, 0x21, 0x58, 0x93, 0x69, 0xd4, 0xff, 0x3b, 0x07, 0xe7, 0x18, 0xef, 0x8a, 0xeb, 0x9a, 0x2b, - 0xd6, 0xba, 0xbc, 0x6c, 0x3f, 0x0f, 0xa5, 0x3a, 0xd6, 0x27, 0x6a, 0x3a, 0xb3, 0xbd, 0x55, 0x1e, - 0xe3, 0x2d, 0x90, 0xf4, 0x50, 0xd0, 0x04, 0xfb, 0xca, 0xfc, 0x0e, 0xfb, 0x4a, 0x66, 0xd2, 0x7a, - 0xba, 0xe3, 0x99, 0xd6, 0x4a, 0xdd, 0xd3, 0xbd, 0x8e, 0x1b, 0x31, 0x69, 0x05, 0xa6, 0xe1, 0x22, - 0x2a, 0x62, 0xd2, 0x46, 0x0a, 0x91, 0xb7, 0x61, 0x68, 0xca, 0x32, 0x42, 0x26, 0x7c, 0x42, 0x7c, - 0x82, 0x59, 0x9a, 0x14, 0xe1, 0x49, 0x16, 0x91, 0x02, 0xea, 0xdf, 0xce, 0x81, 0xc2, 0x37, 0x81, - 0xb3, 0xa6, 0xeb, 0xcd, 0xd1, 0xf5, 0x65, 0x69, 0x76, 0x9a, 0xf6, 0x77, 0x95, 0x0c, 0x27, 0xad, - 0x45, 0x68, 0x0a, 0x88, 0x5d, 0x65, 0xcb, 0x74, 0x13, 0xdb, 0x8f, 0x58, 0x29, 0x52, 0x83, 0x3e, - 0xce, 0x99, 0xdb, 0x12, 0x83, 0x37, 0x14, 0x5f, 0x11, 0xe2, 0x55, 0x73, 0x65, 0x58, 0xe7, 0xc4, - 0xf2, 0x86, 0x46, 0x94, 0x57, 0xbf, 0x51, 0x80, 0xb1, 0x78, 0x21, 0x72, 0x1f, 0xfa, 0x6f, 0xdb, - 0xa6, 0x45, 0x8d, 0x05, 0x0b, 0x5b, 0xd8, 0xfd, 0x70, 0xc4, 0xb7, 0xc5, 0x4f, 0xbf, 0x87, 0x65, - 0x1a, 0xb2, 0x05, 0x8b, 0x67, 0x25, 0x01, 0x33, 0xf2, 0x39, 0x18, 0x60, 0x36, 0xe0, 0x43, 0xe4, - 0x9c, 0xdf, 0x91, 0xf3, 0x53, 0x82, 0xf3, 0x19, 0x87, 0x17, 0x4a, 0xb2, 0x0e, 0xd9, 0x31, 0xbd, - 0xd2, 0xa8, 0xee, 0xda, 0x96, 0xe8, 0x79, 0xd4, 0x2b, 0x07, 0x21, 0xb2, 0x5e, 0x71, 0x1a, 0x66, - 0xba, 0xf2, 0x8f, 0xc5, 0x6e, 0x90, 0xf6, 0x2e, 0x5c, 0x56, 0xf1, 0x1e, 0x90, 0x88, 0x89, 0x05, - 0xa3, 0x42, 0xa0, 0xab, 0x66, 0x1b, 0xad, 0x7e, 0x5c, 0xd7, 0x46, 0x6e, 0x5c, 0x19, 0xf7, 0x0f, - 0xc5, 0xc6, 0xa5, 0x23, 0xb5, 0x87, 0x2f, 0x8e, 0xcf, 0x05, 0xe4, 0xb8, 0x33, 0x45, 0x9d, 0x8c, - 0xb1, 0x90, 0x7b, 0x7b, 0x3d, 0x42, 0xae, 0xfe, 0x68, 0x1e, 0x5e, 0x08, 0xbb, 0x48, 0xa3, 0x0f, - 0x4d, 0xba, 0x11, 0x72, 0x14, 0x7b, 0x64, 0x36, 0xc4, 0xdc, 0xc9, 0x55, 0xdd, 0x5a, 0xa1, 0x06, - 0xb9, 0x06, 0xbd, 0x9a, 0xdd, 0xa2, 0xae, 0x92, 0x43, 0xf3, 0x10, 0xa7, 0x2f, 0x87, 0x01, 0xe4, - 0x43, 0x16, 0xa4, 0x20, 0x36, 0x94, 0x96, 0x1c, 0xdd, 0xf4, 0x7c, 0x4d, 0xaa, 0x24, 0x35, 0x69, - 0x17, 0x35, 0x8e, 0x73, 0x1e, 0x7c, 0x8d, 0x41, 0xc1, 0x7b, 0x08, 0x90, 0x05, 0xcf, 0x49, 0x2e, - 0xbe, 0x06, 0x83, 0x12, 0xf1, 0x9e, 0x16, 0x91, 0x6f, 0x15, 0xe5, 0xb1, 0xe5, 0x37, 0x4b, 0x8c, - 0xad, 0xeb, 0x6c, 0x4c, 0xb8, 0x2e, 0xb3, 0x62, 0xf8, 0xa0, 0x12, 0x9a, 0x8f, 0xa0, 0xa8, 0xe6, - 0x23, 0x88, 0xbc, 0x04, 0xfd, 0x9c, 0x45, 0xb0, 0x5f, 0xc6, 0xbd, 0xb6, 0x83, 0xb0, 0xa8, 0x29, - 0x10, 0x10, 0x92, 0x5f, 0xcc, 0xc1, 0xe5, 0xae, 0x92, 0x40, 0xe5, 0x1b, 0xbc, 0xf1, 0xf2, 0xbe, - 0xc4, 0x38, 0xf1, 0xc2, 0xf6, 0x56, 0xf9, 0x9a, 0xa4, 0x19, 0x8e, 0x44, 0xd3, 0x68, 0x72, 0x22, - 0xa9, 0x5d, 0xdd, 0x9b, 0xc2, 0x8c, 0x55, 0x5e, 0xe9, 0x34, 0x1e, 0x55, 0x59, 0xcd, 0x4d, 0xbf, - 0x91, 0xc5, 0xd0, 0x58, 0x15, 0xdf, 0xfb, 0xc0, 0x27, 0x49, 0xa9, 0x26, 0x83, 0x0b, 0x69, 0xc2, - 0x79, 0x8e, 0xa9, 0xea, 0x9b, 0x0b, 0x0f, 0xe6, 0x6c, 0xcb, 0x5b, 0xf5, 0x2b, 0xe8, 0x95, 0xcf, - 0x7a, 0xb0, 0x02, 0x43, 0xdf, 0x6c, 0xd8, 0x0f, 0x1a, 0xeb, 0x8c, 0x2a, 0xa5, 0x8e, 0x2c, 0x4e, - 0x6c, 0x62, 0x17, 0x63, 0xdc, 0x9f, 0xf2, 0x4a, 0xe1, 0x49, 0x9c, 0x3f, 0x2f, 0x24, 0x27, 0xb8, - 0x58, 0x21, 0xb5, 0x06, 0x43, 0xb3, 0x76, 0x73, 0x2d, 0x50, 0x97, 0xd7, 0xa0, 0xb4, 0xa4, 0x3b, - 0x2b, 0xd4, 0x43, 0x59, 0x0c, 0xde, 0x38, 0x35, 0xce, 0x4f, 0xb7, 0x19, 0x11, 0x47, 0x4c, 0x8c, - 0x88, 0xd9, 0xa7, 0xe4, 0xe1, 0x6f, 0x4d, 0x14, 0x50, 0xbf, 0xd7, 0x0b, 0x43, 0xe2, 0x24, 0x16, - 0x57, 0x0f, 0xf2, 0x7a, 0x78, 0xb6, 0x2d, 0xa6, 0xcb, 0xe0, 0x34, 0x2a, 0x38, 0x45, 0x1b, 0x62, - 0xcc, 0xfe, 0x70, 0xab, 0x9c, 0xdb, 0xde, 0x2a, 0xf7, 0x68, 0xfd, 0xd2, 0x26, 0x36, 0x5c, 0xdf, - 0xa4, 0x05, 0x5d, 0x3e, 0x5b, 0x8d, 0x95, 0xe5, 0xeb, 0xdd, 0xdb, 0xd0, 0x27, 0xda, 0x20, 0x34, - 0xee, 0x7c, 0x78, 0x76, 0x12, 0x39, 0x51, 0x8e, 0x95, 0xf6, 0x4b, 0x91, 0x37, 0xa1, 0xc4, 0xcf, - 0x12, 0x84, 0x00, 0xce, 0xa5, 0x9f, 0xbd, 0xc4, 0x8a, 0x8b, 0x32, 0x64, 0x06, 0x20, 0x3c, 0x47, - 0x08, 0x0e, 0xd0, 0x05, 0x87, 0xe4, 0x09, 0x43, 0x8c, 0x8b, 0x54, 0x96, 0xbc, 0x02, 0x43, 0x4b, - 0xd4, 0x59, 0x37, 0x2d, 0xbd, 0x55, 0x37, 0xdf, 0xf7, 0xcf, 0xd0, 0x71, 0xa1, 0x77, 0xcd, 0xf7, - 0xe5, 0x91, 0x1b, 0xa1, 0x23, 0x5f, 0x48, 0xdb, 0xa7, 0xf7, 0x61, 0x43, 0x9e, 0xde, 0x71, 0x03, - 0x1b, 0x6b, 0x4f, 0xca, 0xb6, 0xfd, 0x1d, 0x18, 0x8e, 0x6c, 0xd1, 0xc4, 0x21, 0xe9, 0xe5, 0x24, - 0x6b, 0x69, 0xbf, 0x19, 0x63, 0x1b, 0xe5, 0xc0, 0x34, 0xb9, 0x66, 0x99, 0x9e, 0xa9, 0xb7, 0x26, - 0xed, 0xf5, 0x75, 0xdd, 0x32, 0x94, 0x81, 0x50, 0x93, 0x4d, 0x8e, 0x69, 0x34, 0x39, 0x4a, 0xd6, - 0xe4, 0x68, 0x21, 0x72, 0x07, 0xc6, 0x44, 0x1f, 0x6a, 0xb4, 0x69, 0x3b, 0xcc, 0xf6, 0xc0, 0x33, - 0x50, 0x71, 0x0c, 0xe0, 0x72, 0x5c, 0xc3, 0xf1, 0x91, 0xb2, 0x71, 0x1f, 0x2f, 0x78, 0xbb, 0xd8, - 0x3f, 0x38, 0x36, 0x14, 0x3f, 0xb6, 0x56, 0xff, 0x66, 0x01, 0x06, 0x05, 0x29, 0x5b, 0xba, 0x4f, - 0x14, 0xfc, 0x20, 0x0a, 0x9e, 0xaa, 0xa8, 0xa5, 0xc3, 0x52, 0x54, 0xf5, 0xcb, 0xf9, 0x60, 0x36, - 0x5a, 0x74, 0x4c, 0xeb, 0x60, 0xb3, 0xd1, 0x15, 0x80, 0xc9, 0xd5, 0x8e, 0xb5, 0xc6, 0xaf, 0xe7, - 0xf2, 0xe1, 0xf5, 0x5c, 0xd3, 0xd4, 0x24, 0x0c, 0xb9, 0x0c, 0xc5, 0x2a, 0xe3, 0xcf, 0x7a, 0x66, - 0x68, 0x62, 0xe0, 0xbb, 0x9c, 0x53, 0xee, 0x05, 0x0d, 0xc1, 0x6c, 0x33, 0x37, 0xb1, 0xe9, 0x51, - 0x6e, 0x3e, 0x17, 0xf8, 0x66, 0x6e, 0x99, 0x01, 0x34, 0x0e, 0x27, 0x37, 0xe1, 0x54, 0x95, 0xb6, - 0xf4, 0xcd, 0x39, 0xb3, 0xd5, 0x32, 0x5d, 0xda, 0xb4, 0x2d, 0xc3, 0x45, 0x21, 0x8b, 0xea, 0xd6, - 0x5d, 0x2d, 0x49, 0x40, 0x54, 0x28, 0x2d, 0x3c, 0x78, 0xe0, 0x52, 0x0f, 0xc5, 0x57, 0x98, 0x00, - 0x36, 0x39, 0xdb, 0x08, 0xd1, 0x04, 0x46, 0xfd, 0x66, 0x8e, 0xed, 0x96, 0xdc, 0x35, 0xcf, 0x6e, - 0x07, 0x5a, 0x7e, 0x20, 0x91, 0x5c, 0x0b, 0xed, 0x8a, 0x3c, 0x7e, 0xed, 0xa8, 0xf8, 0xda, 0x3e, - 0x61, 0x5b, 0x84, 0x16, 0x45, 0xea, 0x57, 0x15, 0x76, 0xf8, 0x2a, 0xf5, 0x4f, 0xf2, 0x70, 0x5e, - 0xb4, 0x78, 0xb2, 0x65, 0xb6, 0x97, 0x6d, 0xdd, 0x31, 0x34, 0xda, 0xa4, 0xe6, 0x43, 0x7a, 0x3c, - 0x07, 0x5e, 0x74, 0xe8, 0x14, 0x0f, 0x30, 0x74, 0x6e, 0xe0, 0xc6, 0x93, 0x49, 0x06, 0x0f, 0x98, - 0xb9, 0x51, 0x31, 0xb6, 0xbd, 0x55, 0x1e, 0x32, 0x38, 0x18, 0xaf, 0x18, 0x34, 0x99, 0x88, 0x29, - 0xc9, 0x2c, 0xb5, 0x56, 0xbc, 0x55, 0x54, 0x92, 0x5e, 0xae, 0x24, 0x2d, 0x84, 0x68, 0x02, 0xa3, - 0xfe, 0xef, 0x79, 0x38, 0x13, 0x17, 0x79, 0x9d, 0x5a, 0xc6, 0x89, 0xbc, 0x3f, 0x18, 0x79, 0xff, - 0x69, 0x01, 0x9e, 0x10, 0x65, 0xea, 0xab, 0xba, 0x43, 0x8d, 0xaa, 0xe9, 0xd0, 0xa6, 0x67, 0x3b, - 0x9b, 0xc7, 0xd8, 0x80, 0x3a, 0x3c, 0xb1, 0xdf, 0x84, 0x92, 0x38, 0x6e, 0xe0, 0xeb, 0xcc, 0x48, - 0xd0, 0x12, 0x84, 0x26, 0x56, 0x28, 0x7e, 0x54, 0x11, 0xeb, 0xac, 0xd2, 0x6e, 0x3a, 0xeb, 0x53, - 0x30, 0x1c, 0x88, 0x1e, 0x37, 0xbe, 0x7d, 0xa1, 0xb5, 0x65, 0xf8, 0x08, 0xdc, 0xfb, 0x6a, 0x51, - 0x42, 0xac, 0xcd, 0x07, 0xd4, 0xaa, 0x68, 0x0d, 0x0d, 0x8b, 0xda, 0x82, 0x72, 0xa6, 0xa1, 0xc9, - 0x44, 0xea, 0x56, 0x11, 0x2e, 0xa6, 0x77, 0xbb, 0x46, 0x75, 0xe3, 0xa4, 0xd7, 0x3f, 0x92, 0xbd, - 0x4e, 0x9e, 0x86, 0xe2, 0xa2, 0xee, 0xad, 0x8a, 0xeb, 0x7e, 0xbc, 0x83, 0x7e, 0x60, 0xb6, 0x68, - 0xa3, 0xad, 0x7b, 0xab, 0x1a, 0xa2, 0xa4, 0x39, 0x03, 0x90, 0x63, 0xca, 0x9c, 0x21, 0x2d, 0xf6, - 0x83, 0x4f, 0xe5, 0xae, 0x16, 0x53, 0x17, 0xfb, 0xef, 0x15, 0xb3, 0xe6, 0x95, 0xfb, 0x8e, 0xe9, - 0xd1, 0x13, 0x0d, 0x3b, 0xd1, 0xb0, 0x03, 0x6a, 0xd8, 0x3f, 0xca, 0xc3, 0x70, 0xb0, 0x69, 0x7a, - 0x8f, 0x36, 0x8f, 0x66, 0xad, 0x0a, 0xb7, 0x32, 0x85, 0x03, 0x6f, 0x65, 0x0e, 0xa2, 0x50, 0x6a, - 0x70, 0xc4, 0xca, 0x4d, 0x03, 0x94, 0x18, 0x3f, 0x62, 0x0d, 0x0e, 0x56, 0x9f, 0x86, 0xbe, 0x39, - 0xfd, 0x91, 0xb9, 0xde, 0x59, 0x17, 0x56, 0x3a, 0xba, 0xaf, 0xad, 0xeb, 0x8f, 0x34, 0x1f, 0xae, - 0xfe, 0x77, 0x39, 0x18, 0x11, 0x42, 0x15, 0xcc, 0x0f, 0x24, 0xd5, 0x50, 0x3a, 0xf9, 0x03, 0x4b, - 0xa7, 0xb0, 0x7f, 0xe9, 0xa8, 0x7f, 0xa5, 0x00, 0xca, 0xb4, 0xd9, 0xa2, 0x4b, 0x8e, 0x6e, 0xb9, - 0x0f, 0xa8, 0x23, 0xb6, 0xd3, 0x53, 0x8c, 0xd5, 0x81, 0x3e, 0x50, 0x9a, 0x52, 0xf2, 0xfb, 0x9a, - 0x52, 0x3e, 0x01, 0x03, 0xa2, 0x31, 0x81, 0xeb, 0x24, 0x8e, 0x1a, 0xc7, 0x07, 0x6a, 0x21, 0x9e, - 0x11, 0x57, 0xda, 0x6d, 0xc7, 0x7e, 0x48, 0x1d, 0x7e, 0x2b, 0x26, 0x88, 0x75, 0x1f, 0xa8, 0x85, - 0x78, 0x89, 0x33, 0xf5, 0xed, 0x45, 0x99, 0x33, 0x75, 0xb4, 0x10, 0x4f, 0xae, 0x42, 0xff, 0xac, - 0xdd, 0xd4, 0x51, 0xd0, 0x7c, 0x5a, 0x19, 0xda, 0xde, 0x2a, 0xf7, 0xb7, 0x04, 0x4c, 0x0b, 0xb0, - 0x8c, 0xb2, 0x6a, 0x6f, 0x58, 0x2d, 0x5b, 0xe7, 0xce, 0x36, 0xfd, 0x9c, 0xd2, 0x10, 0x30, 0x2d, - 0xc0, 0x32, 0x4a, 0x26, 0x73, 0x74, 0x62, 0xea, 0x0f, 0x79, 0x3e, 0x10, 0x30, 0x2d, 0xc0, 0xaa, - 0xdf, 0x2c, 0x32, 0xed, 0x75, 0xcd, 0xf7, 0x1f, 0xfb, 0x75, 0x21, 0x1c, 0x30, 0xbd, 0xfb, 0x18, - 0x30, 0x8f, 0xcd, 0x81, 0x9d, 0xfa, 0x2f, 0xfa, 0x00, 0x84, 0xf4, 0xa7, 0x4e, 0x36, 0x87, 0x07, - 0xd3, 0x9a, 0x2a, 0x9c, 0x9a, 0xb2, 0x56, 0x75, 0xab, 0x49, 0x8d, 0xf0, 0xd8, 0xb2, 0x84, 0x43, - 0x1b, 0x9d, 0x2e, 0xa9, 0x40, 0x86, 0xe7, 0x96, 0x5a, 0xb2, 0x00, 0x79, 0x11, 0x06, 0x6b, 0x96, - 0x47, 0x1d, 0xbd, 0xe9, 0x99, 0x0f, 0xa9, 0x98, 0x1a, 0xf0, 0x26, 0xda, 0x0c, 0xc1, 0x9a, 0x4c, - 0x43, 0x6e, 0xc2, 0xd0, 0xa2, 0xee, 0x78, 0x66, 0xd3, 0x6c, 0xeb, 0x96, 0xe7, 0x2a, 0xfd, 0x38, - 0xa3, 0xa1, 0x85, 0xd1, 0x96, 0xe0, 0x5a, 0x84, 0x8a, 0x7c, 0x01, 0x06, 0x70, 0x6b, 0x8a, 0xfe, - 0xe1, 0x03, 0x3b, 0x5e, 0x54, 0x3e, 0x13, 0xba, 0x23, 0xf2, 0xd3, 0x57, 0xbc, 0x71, 0x8e, 0xdf, - 0x55, 0x06, 0x1c, 0xc9, 0x67, 0xa1, 0x6f, 0xca, 0x32, 0x90, 0x39, 0xec, 0xc8, 0x5c, 0x15, 0xcc, - 0xcf, 0x85, 0xcc, 0xed, 0x76, 0x8c, 0xb7, 0xcf, 0x2e, 0x7d, 0x94, 0x0d, 0x7e, 0x70, 0xa3, 0x6c, - 0xe8, 0x03, 0x38, 0x16, 0x1f, 0x3e, 0xac, 0x63, 0xf1, 0x91, 0x7d, 0x1e, 0x8b, 0xab, 0xef, 0xc3, - 0xe0, 0xc4, 0xe2, 0x74, 0x30, 0x7a, 0x2f, 0x40, 0x61, 0x51, 0x78, 0x46, 0x14, 0xb9, 0x3d, 0xd3, - 0x36, 0x0d, 0x8d, 0xc1, 0xc8, 0x35, 0xe8, 0x9f, 0x44, 0x77, 0x3b, 0x71, 0x8b, 0x58, 0xe4, 0xeb, - 0x5f, 0x13, 0x61, 0xe8, 0x75, 0xeb, 0xa3, 0xc9, 0xb3, 0xd0, 0xb7, 0xe8, 0xd8, 0x2b, 0x8e, 0xbe, - 0x2e, 0xd6, 0x60, 0x74, 0x4d, 0x69, 0x73, 0x90, 0xe6, 0xe3, 0xd4, 0x9f, 0xca, 0xf9, 0x66, 0x3b, - 0x2b, 0x51, 0xef, 0xe0, 0xd1, 0x3c, 0xd6, 0xdd, 0xcf, 0x4b, 0xb8, 0x1c, 0xa4, 0xf9, 0x38, 0x72, - 0x0d, 0x7a, 0xa7, 0x1c, 0xc7, 0x76, 0x64, 0x9f, 0x7a, 0xca, 0x00, 0xf2, 0x75, 0x2f, 0x52, 0x90, - 0x57, 0x61, 0x90, 0xcf, 0x39, 0xfc, 0x44, 0xb3, 0xd0, 0xed, 0xa6, 0x54, 0xa6, 0x54, 0xbf, 0x53, - 0x90, 0x6c, 0x36, 0x2e, 0xf1, 0xc7, 0xf0, 0x56, 0xe0, 0x25, 0x28, 0x4c, 0x2c, 0x4e, 0x8b, 0x09, - 0xf0, 0xb4, 0x5f, 0x54, 0x52, 0x95, 0x58, 0x39, 0x46, 0x4d, 0x2e, 0x41, 0x71, 0x91, 0xa9, 0x4f, - 0x09, 0xd5, 0xa3, 0x7f, 0x7b, 0xab, 0x5c, 0x6c, 0x33, 0xfd, 0x41, 0x28, 0x62, 0xd9, 0x66, 0x86, - 0xef, 0x98, 0x38, 0x36, 0xdc, 0xc7, 0x5c, 0x82, 0x62, 0xc5, 0x59, 0x79, 0x28, 0x66, 0x2d, 0xc4, - 0xea, 0xce, 0xca, 0x43, 0x0d, 0xa1, 0xe4, 0x3a, 0x80, 0x46, 0xbd, 0x8e, 0x63, 0xe1, 0x73, 0x97, - 0x01, 0x3c, 0x7f, 0xc3, 0xd9, 0xd0, 0x41, 0x68, 0xa3, 0x69, 0x1b, 0x54, 0x93, 0x48, 0xd4, 0xbf, - 0x11, 0x5e, 0xec, 0x54, 0x4d, 0x77, 0xed, 0xa4, 0x0b, 0xf7, 0xd0, 0x85, 0xba, 0x38, 0xe2, 0x4c, - 0x76, 0x52, 0x19, 0x7a, 0xa7, 0x5b, 0xfa, 0x8a, 0x8b, 0x7d, 0x28, 0x7c, 0xd7, 0x1e, 0x30, 0x80, - 0xc6, 0xe1, 0xb1, 0x7e, 0xea, 0xdf, 0xb9, 0x9f, 0xbe, 0xde, 0x1b, 0x8c, 0xb6, 0x79, 0xea, 0x6d, - 0xd8, 0xce, 0x49, 0x57, 0xed, 0xb6, 0xab, 0xae, 0x40, 0x5f, 0xdd, 0x69, 0x4a, 0x47, 0x17, 0xb8, - 0x1f, 0x70, 0x9d, 0x26, 0x3f, 0xb6, 0xf0, 0x91, 0x8c, 0xae, 0xea, 0x7a, 0x48, 0xd7, 0x17, 0xd2, - 0x19, 0xae, 0x27, 0xe8, 0x04, 0x52, 0xd0, 0x2d, 0xda, 0x8e, 0x27, 0x3a, 0x2e, 0xa0, 0x6b, 0xdb, - 0x8e, 0xa7, 0xf9, 0x48, 0xf2, 0x09, 0x80, 0xa5, 0xc9, 0x45, 0xdf, 0xb9, 0x7f, 0x20, 0xf4, 0x3d, - 0x14, 0x5e, 0xfd, 0x9a, 0x84, 0x26, 0x4b, 0x30, 0xb0, 0xd0, 0xa6, 0x0e, 0xdf, 0x0a, 0xf1, 0x07, - 0x2c, 0x1f, 0x8f, 0x89, 0x56, 0xf4, 0xfb, 0xb8, 0xf8, 0x3f, 0x20, 0xe7, 0xeb, 0x8b, 0xed, 0xff, - 0xd4, 0x42, 0x46, 0xe4, 0x55, 0x28, 0x55, 0xb8, 0x9d, 0x37, 0x88, 0x2c, 0x03, 0x91, 0xe1, 0x16, - 0x94, 0xa3, 0xf8, 0x9e, 0x5d, 0xc7, 0xbf, 0x35, 0x41, 0xae, 0x5e, 0x83, 0xb1, 0x78, 0x35, 0x64, - 0x10, 0xfa, 0x26, 0x17, 0xe6, 0xe7, 0xa7, 0x26, 0x97, 0xc6, 0x7a, 0x48, 0x3f, 0x14, 0xeb, 0x53, - 0xf3, 0xd5, 0xb1, 0x9c, 0xfa, 0x4b, 0xd2, 0x0c, 0xc2, 0x54, 0xeb, 0xe4, 0x6a, 0xf8, 0x40, 0xf7, - 0x2d, 0x63, 0x78, 0x1f, 0x8a, 0x27, 0x06, 0xeb, 0xa6, 0xe7, 0x51, 0x43, 0xac, 0x12, 0x78, 0x5f, - 0xe8, 0x3d, 0xd2, 0x12, 0x78, 0xf2, 0x3c, 0x0c, 0x23, 0x4c, 0x5c, 0x11, 0xf2, 0xfd, 0xb1, 0x28, - 0xe0, 0x3c, 0xd2, 0xa2, 0x48, 0xf5, 0xf7, 0xc3, 0xdb, 0xe1, 0x59, 0xaa, 0x1f, 0xd7, 0x1b, 0xc5, - 0x0f, 0x49, 0x7f, 0xa9, 0xff, 0xaa, 0xc8, 0x9f, 0x9c, 0xf0, 0xf7, 0x89, 0x47, 0x21, 0xca, 0xf0, - 0x48, 0xb7, 0xb0, 0x87, 0x23, 0xdd, 0xe7, 0xa1, 0x34, 0x47, 0xbd, 0x55, 0xdb, 0x77, 0xfc, 0x42, - 0x0f, 0xbd, 0x75, 0x84, 0xc8, 0x1e, 0x7a, 0x9c, 0x86, 0xac, 0x01, 0xf1, 0x1f, 0x1f, 0x06, 0x8e, - 0xdf, 0xfe, 0x11, 0xf2, 0xf9, 0xc4, 0x3e, 0xa5, 0x8e, 0x4f, 0x94, 0xd1, 0xa7, 0xff, 0x4c, 0xe0, - 0x58, 0x2e, 0x79, 0x62, 0xfd, 0xcb, 0xad, 0x72, 0x89, 0xd3, 0x68, 0x29, 0x6c, 0xc9, 0x3b, 0x30, - 0x30, 0x37, 0x5d, 0x11, 0x0f, 0x11, 0xb9, 0x57, 0xc4, 0x85, 0x40, 0x8a, 0x3e, 0x22, 0x10, 0x09, - 0xbe, 0xef, 0x59, 0x7f, 0xa0, 0x27, 0xdf, 0x21, 0x86, 0x5c, 0x98, 0xb6, 0xf0, 0x97, 0x42, 0xe2, - 0x74, 0x21, 0xd0, 0x96, 0xe8, 0xfb, 0xa1, 0xb8, 0xac, 0x38, 0x36, 0xa6, 0x2d, 0xfd, 0x07, 0x18, - 0xdd, 0x0b, 0x70, 0xaa, 0xd2, 0x6e, 0xb7, 0x4c, 0x6a, 0xa0, 0xbe, 0x68, 0x9d, 0x16, 0x75, 0x85, - 0xcb, 0x0f, 0x3e, 0x3e, 0xd1, 0x39, 0xb2, 0x81, 0xcf, 0x5f, 0x1b, 0x4e, 0x27, 0xea, 0x9f, 0x99, - 0x2c, 0xab, 0xfe, 0x4c, 0x1e, 0xce, 0x4d, 0x3a, 0x54, 0xf7, 0xe8, 0xdc, 0x74, 0xa5, 0xd2, 0x41, - 0x1f, 0xb9, 0x56, 0x8b, 0x5a, 0x2b, 0x47, 0x33, 0xac, 0xdf, 0x80, 0x91, 0xa0, 0x01, 0xf5, 0xa6, - 0xdd, 0xa6, 0xf2, 0x43, 0xae, 0xa6, 0x8f, 0x69, 0xb8, 0x0c, 0xa5, 0xc5, 0x48, 0xc9, 0x1d, 0x38, - 0x1d, 0x40, 0x2a, 0xad, 0x96, 0xbd, 0xa1, 0xd1, 0x8e, 0xcb, 0x1d, 0x71, 0xfb, 0xb9, 0x23, 0x6e, - 0xc8, 0x41, 0x67, 0xf8, 0x86, 0xc3, 0x08, 0xb4, 0xb4, 0x52, 0xea, 0x37, 0x0a, 0x70, 0xfe, 0x9e, - 0xde, 0x32, 0x8d, 0x50, 0x34, 0x1a, 0x75, 0xdb, 0xb6, 0xe5, 0xd2, 0x63, 0x34, 0x4a, 0x23, 0x43, - 0xa1, 0x78, 0x28, 0x43, 0x21, 0xd9, 0x45, 0xbd, 0x07, 0xee, 0xa2, 0xd2, 0xbe, 0xba, 0xe8, 0x7f, - 0xcb, 0xc1, 0x98, 0xff, 0xd0, 0x40, 0x7e, 0x34, 0x2e, 0x79, 0xc1, 0xe3, 0x11, 0x62, 0xcc, 0xef, - 0x1a, 0xf1, 0xa4, 0x0e, 0x7d, 0x53, 0x8f, 0xda, 0xa6, 0x43, 0xdd, 0x5d, 0x38, 0x8d, 0x5f, 0x16, - 0xc7, 0x25, 0xa7, 0x28, 0x2f, 0x92, 0x38, 0x29, 0xe1, 0x60, 0x7c, 0x3e, 0xc8, 0x9f, 0x5a, 0x4c, - 0xf8, 0x2f, 0xe1, 0xf9, 0xf3, 0x41, 0xf1, 0x24, 0x23, 0xf2, 0x1e, 0x34, 0x24, 0x25, 0xcf, 0x40, - 0x61, 0x69, 0x69, 0x56, 0xcc, 0xa4, 0x18, 0x81, 0xc0, 0xf3, 0xe4, 0xf7, 0x91, 0x0c, 0xab, 0xfe, - 0xd3, 0x3c, 0x00, 0x53, 0x05, 0x3e, 0x5c, 0x8f, 0x44, 0x09, 0x27, 0xa0, 0xdf, 0x17, 0xb8, 0x50, - 0xc3, 0xe0, 0x95, 0x40, 0xbc, 0x23, 0xe2, 0x75, 0x07, 0x2f, 0x42, 0xca, 0xbe, 0x23, 0x39, 0xbf, - 0x07, 0xc0, 0x9d, 0x0d, 0x3a, 0x92, 0xfb, 0xee, 0xe3, 0x9f, 0x80, 0x01, 0x31, 0xe3, 0xd9, 0x91, - 0xf3, 0xff, 0xa6, 0x0f, 0xd4, 0x42, 0x7c, 0x6c, 0x6a, 0x2d, 0x1d, 0x60, 0x21, 0xf6, 0xc5, 0xcb, - 0x7b, 0xe5, 0x44, 0xbc, 0x87, 0x2c, 0xde, 0xaf, 0x08, 0xf1, 0xf2, 0x17, 0x43, 0xc7, 0x56, 0xbc, - 0x87, 0x76, 0xf6, 0xad, 0xfe, 0xa3, 0x1c, 0x10, 0xd6, 0xac, 0x45, 0xdd, 0x75, 0x37, 0x6c, 0xc7, - 0xe0, 0xce, 0xe9, 0x47, 0x22, 0x98, 0xc3, 0xbb, 0xaf, 0xfc, 0x4e, 0x3f, 0x9c, 0x8e, 0x38, 0xfe, - 0x1e, 0xf3, 0xc9, 0xea, 0x5a, 0x74, 0x34, 0x75, 0x7b, 0xf5, 0xf2, 0x31, 0xf9, 0x42, 0xb4, 0x37, - 0xf2, 0xe0, 0x4d, 0xba, 0x09, 0x7d, 0x01, 0x86, 0xc4, 0x0f, 0xb6, 0x42, 0xfb, 0x37, 0x5d, 0x38, - 0x4a, 0x5d, 0x06, 0xd0, 0x22, 0x68, 0xf2, 0x32, 0x0c, 0xb0, 0x01, 0xb3, 0x82, 0xc1, 0x4a, 0xfa, - 0xc2, 0x17, 0x25, 0x86, 0x0f, 0x94, 0xd7, 0x93, 0x80, 0x52, 0x7a, 0xb7, 0xd4, 0xbf, 0x8b, 0x77, - 0x4b, 0x5f, 0x84, 0xc1, 0x8a, 0x65, 0xd9, 0x1e, 0x6e, 0xd2, 0x5d, 0x71, 0x35, 0x91, 0x69, 0x95, - 0x3f, 0x83, 0x8f, 0xf1, 0x43, 0xfa, 0x54, 0xb3, 0x5c, 0x66, 0x48, 0x6e, 0xf8, 0xaf, 0x62, 0xa8, - 0x23, 0xbc, 0xca, 0xf1, 0x7a, 0xc6, 0x11, 0xb0, 0xe4, 0xa3, 0x18, 0xec, 0xbc, 0xe1, 0x45, 0xc7, - 0x6e, 0xdb, 0x2e, 0x35, 0xb8, 0xa0, 0x06, 0xc3, 0xd0, 0x06, 0x6d, 0x81, 0xc0, 0x77, 0x73, 0x91, - 0xc0, 0x21, 0x91, 0x22, 0xe4, 0x01, 0x9c, 0xf1, 0x2f, 0x8a, 0x83, 0x17, 0x8a, 0xb5, 0xaa, 0xab, - 0x0c, 0xe1, 0xab, 0x24, 0x12, 0x57, 0x86, 0x5a, 0x75, 0xe2, 0x49, 0xff, 0x5a, 0xc4, 0x7f, 0xe2, - 0xd8, 0x30, 0x0d, 0xb9, 0xab, 0x53, 0xf9, 0x91, 0x1f, 0x84, 0xc1, 0x39, 0xfd, 0x51, 0xb5, 0x23, - 0xce, 0x5e, 0x86, 0x77, 0x7f, 0xfb, 0xb2, 0xae, 0x3f, 0x6a, 0x18, 0xa2, 0x5c, 0xcc, 0xa6, 0x90, - 0x59, 0x92, 0x06, 0x9c, 0x5b, 0x74, 0xec, 0x75, 0xdb, 0xa3, 0x46, 0xec, 0xb1, 0xdf, 0x68, 0xf8, - 0x3a, 0xb8, 0x2d, 0x28, 0x1a, 0x5d, 0x5e, 0xfd, 0x65, 0xb0, 0x21, 0xeb, 0x30, 0x5a, 0x71, 0xdd, - 0xce, 0x3a, 0x0d, 0x6f, 0xa8, 0xc6, 0x76, 0xfc, 0x8c, 0x8f, 0x0b, 0xaf, 0xe5, 0x27, 0x74, 0x2c, - 0xca, 0x2f, 0xa8, 0x1a, 0x9e, 0x29, 0xd7, 0x88, 0xdf, 0x12, 0xe7, 0x7d, 0xbb, 0xd8, 0x3f, 0x32, - 0x36, 0xaa, 0x9d, 0x4f, 0x36, 0x66, 0xc9, 0xf4, 0x5a, 0x54, 0xfd, 0x76, 0x0e, 0x20, 0x14, 0x30, - 0x79, 0x21, 0x1a, 0x11, 0x29, 0x17, 0x5e, 0x74, 0x88, 0x68, 0x09, 0x91, 0x10, 0x48, 0xe4, 0x12, - 0x14, 0x31, 0xa2, 0x46, 0x3e, 0x3c, 0x58, 0x5d, 0x33, 0x2d, 0x43, 0x43, 0x28, 0xc3, 0x4a, 0x4f, - 0xdf, 0x11, 0x8b, 0x97, 0xfa, 0xdc, 0x2a, 0xac, 0xc2, 0x68, 0xbd, 0xb3, 0xec, 0xd7, 0x2d, 0xbd, - 0xe3, 0xc3, 0xc0, 0x1e, 0x6e, 0x67, 0x39, 0x78, 0xfc, 0x1a, 0x09, 0x9b, 0x12, 0x2d, 0xa2, 0x7e, - 0x33, 0x17, 0x9b, 0x05, 0x8f, 0x70, 0xd1, 0xfb, 0x58, 0xd2, 0x4f, 0x23, 0x39, 0x2d, 0xa9, 0x7f, - 0x54, 0x80, 0xc1, 0x45, 0xdb, 0xf1, 0x44, 0x88, 0x92, 0xe3, 0xbd, 0x0a, 0x49, 0x7b, 0xa5, 0xe2, - 0x1e, 0xf6, 0x4a, 0x97, 0xa0, 0x28, 0xb9, 0x28, 0xf3, 0x7b, 0x11, 0xc3, 0x70, 0x34, 0x84, 0x7e, - 0xc0, 0x4f, 0x2e, 0x92, 0x97, 0xa0, 0x7d, 0x07, 0x76, 0x35, 0xf8, 0xe1, 0x3c, 0xc0, 0x67, 0x5f, - 0x7c, 0xf1, 0x31, 0xee, 0x52, 0xf5, 0x2f, 0xe7, 0x60, 0x54, 0x5c, 0x2d, 0x4a, 0xd1, 0xd0, 0xfa, - 0xfc, 0x4b, 0x61, 0x79, 0x26, 0xe1, 0x20, 0xcd, 0xc7, 0xb1, 0x45, 0x6b, 0xea, 0x91, 0xe9, 0xe1, - 0xed, 0x8a, 0x14, 0x0e, 0x8d, 0x0a, 0x98, 0xbc, 0x68, 0xf9, 0x74, 0xe4, 0x05, 0xff, 0xd2, 0xb4, - 0x10, 0xae, 0xd4, 0xac, 0xc0, 0x54, 0xea, 0xc5, 0xa9, 0xfa, 0x6b, 0x45, 0x28, 0x4e, 0x3d, 0xa2, - 0xcd, 0x63, 0xde, 0x35, 0xd2, 0x51, 0x6c, 0xf1, 0x80, 0x47, 0xb1, 0xfb, 0xf1, 0x02, 0x79, 0x3b, - 0xec, 0xcf, 0x52, 0xb4, 0xfa, 0x58, 0xcf, 0xc7, 0xab, 0xf7, 0x7b, 0xfa, 0xf8, 0x39, 0x11, 0xfd, - 0x83, 0x02, 0x14, 0xea, 0x93, 0x8b, 0x27, 0x7a, 0x73, 0xa4, 0x7a, 0xd3, 0xfd, 0x96, 0x5d, 0x0d, - 0x2e, 0xce, 0xfa, 0x43, 0xbf, 0xd6, 0xd8, 0x1d, 0xd9, 0x9f, 0x16, 0x60, 0xa4, 0x3e, 0xbd, 0xb4, - 0x28, 0x9d, 0x5d, 0xdf, 0xe1, 0xbe, 0x87, 0xe8, 0x05, 0xc7, 0xbb, 0xf4, 0x52, 0xc2, 0x02, 0xbb, - 0x5b, 0xb3, 0xbc, 0x57, 0x6e, 0xde, 0xd3, 0x5b, 0x1d, 0x8a, 0x87, 0x45, 0xdc, 0x53, 0xd9, 0x35, - 0xdf, 0xa7, 0xdf, 0xc0, 0xd0, 0x08, 0x3e, 0x03, 0xf2, 0x06, 0x14, 0xee, 0x0a, 0x1f, 0x92, 0x2c, - 0x3e, 0x2f, 0xdd, 0xe0, 0x7c, 0xd8, 0x24, 0x58, 0xe8, 0x98, 0x06, 0x72, 0x60, 0xa5, 0x58, 0xe1, - 0x5b, 0xc2, 0x64, 0xd8, 0x55, 0xe1, 0x15, 0xbf, 0xf0, 0xad, 0x5a, 0x95, 0xd4, 0x61, 0x70, 0x91, - 0x3a, 0xeb, 0x26, 0x76, 0x94, 0x3f, 0x67, 0x77, 0x67, 0xc2, 0xf6, 0x56, 0x83, 0xed, 0xb0, 0x10, - 0x32, 0x93, 0xb9, 0x90, 0x77, 0x01, 0xb8, 0x55, 0xb5, 0xcb, 0x08, 0x9b, 0x97, 0x71, 0xa7, 0xc2, - 0x8d, 0xe1, 0x14, 0xab, 0x54, 0x62, 0x46, 0xd6, 0x60, 0x6c, 0xce, 0x36, 0xcc, 0x07, 0x26, 0x77, - 0x16, 0xc5, 0x0a, 0x4a, 0x3b, 0xbb, 0x68, 0x31, 0xe3, 0x77, 0x5d, 0x2a, 0x97, 0x56, 0x4d, 0x82, - 0xb1, 0xfa, 0x77, 0x7b, 0xa1, 0xc8, 0xba, 0xfd, 0x64, 0xfc, 0x1e, 0x64, 0xfc, 0x56, 0x60, 0xec, - 0xbe, 0xed, 0xac, 0x99, 0xd6, 0x4a, 0xe0, 0xc7, 0x2f, 0x76, 0xd3, 0xe8, 0x7b, 0xb4, 0xc1, 0x71, - 0x8d, 0xc0, 0xe5, 0x5f, 0x4b, 0x90, 0xef, 0x30, 0x82, 0x5f, 0x03, 0xe0, 0xaf, 0xf3, 0x91, 0xa6, - 0x3f, 0x0c, 0xe7, 0xc1, 0xdf, 0xee, 0xe3, 0xd3, 0x00, 0x39, 0x9c, 0x47, 0x48, 0x4c, 0xae, 0xf9, - 0xde, 0x1b, 0x03, 0xf8, 0x52, 0x00, 0x8f, 0x0d, 0xd0, 0x7b, 0x43, 0x36, 0x02, 0xb8, 0x1f, 0xc7, - 0x22, 0x80, 0x74, 0x23, 0x06, 0x31, 0x41, 0x44, 0x26, 0x07, 0x11, 0x40, 0x2f, 0xe5, 0x42, 0x4c, - 0x93, 0x78, 0x90, 0x57, 0x62, 0x57, 0xf6, 0x24, 0xc2, 0x2d, 0xf3, 0xc6, 0x3e, 0x74, 0xf9, 0x1a, - 0xda, 0xc9, 0xe5, 0x4b, 0xfd, 0x5b, 0x05, 0x18, 0x64, 0xdc, 0xea, 0x9d, 0xf5, 0x75, 0xdd, 0xd9, - 0x3c, 0x51, 0xe4, 0x83, 0x28, 0x72, 0x03, 0x4e, 0xc9, 0x2e, 0xfe, 0xcc, 0x74, 0xf5, 0x83, 0x31, - 0x05, 0x07, 0x56, 0x71, 0x02, 0x6e, 0x5b, 0xe2, 0xbc, 0xef, 0x09, 0x30, 0x9e, 0x86, 0xb8, 0x5a, - 0x92, 0x97, 0xfa, 0xd3, 0x39, 0x18, 0x8b, 0x43, 0x03, 0xdd, 0xcf, 0xa5, 0xea, 0xfe, 0xf3, 0x30, - 0x20, 0x2e, 0xfd, 0x75, 0x43, 0xf8, 0x20, 0x8e, 0x6c, 0x6f, 0x95, 0x01, 0x5f, 0x5c, 0x37, 0x1c, - 0xaa, 0x1b, 0x5a, 0x48, 0x40, 0x5e, 0x86, 0x21, 0xfc, 0x71, 0xdf, 0x31, 0x3d, 0x8f, 0xf2, 0xce, - 0x28, 0xf2, 0x7b, 0x0c, 0x5e, 0x60, 0x83, 0x23, 0xb4, 0x08, 0x99, 0xfa, 0x7b, 0x79, 0x18, 0xa8, - 0x77, 0x96, 0xdd, 0x4d, 0xd7, 0xa3, 0xeb, 0xc7, 0x5c, 0x87, 0xfc, 0x63, 0x85, 0x62, 0xea, 0xb1, - 0xc2, 0x33, 0xfe, 0xd0, 0x92, 0xce, 0xdb, 0x83, 0x8d, 0x81, 0xef, 0x47, 0x19, 0x6a, 0x51, 0x69, - 0xef, 0x5a, 0xa4, 0xfe, 0x9d, 0x3c, 0x8c, 0xf1, 0xeb, 0xe6, 0xaa, 0xe9, 0x36, 0x0f, 0xe1, 0x09, - 0xcc, 0xd1, 0xcb, 0xf4, 0x60, 0x2e, 0x1a, 0xbb, 0x78, 0x58, 0xa4, 0x7e, 0x29, 0x0f, 0x83, 0x95, - 0x8e, 0xb7, 0x5a, 0xf1, 0x70, 0x7e, 0x7b, 0x2c, 0xf7, 0xc8, 0xff, 0x30, 0x07, 0xa3, 0xac, 0x21, - 0x4b, 0xf6, 0x1a, 0xb5, 0x0e, 0xe1, 0xb8, 0x5e, 0x3e, 0x76, 0xcf, 0xef, 0xf3, 0xd8, 0xdd, 0x97, - 0x65, 0x61, 0x6f, 0xb2, 0xc4, 0x4b, 0x26, 0xcd, 0x6e, 0xd1, 0xe3, 0xfd, 0x19, 0x87, 0x78, 0xc9, - 0xe4, 0x0b, 0xe4, 0x10, 0x2e, 0x35, 0x3f, 0x5a, 0x02, 0x39, 0x84, 0x13, 0xd9, 0x8f, 0x86, 0x40, - 0xbe, 0x93, 0x83, 0x81, 0x09, 0xdb, 0x3b, 0xe6, 0x03, 0x5f, 0x7c, 0xc5, 0xf1, 0x56, 0x73, 0xff, - 0x2b, 0x8e, 0xb7, 0x6e, 0xaa, 0x3f, 0x9b, 0x87, 0x33, 0x22, 0x82, 0xbf, 0x38, 0x03, 0x3b, 0x99, - 0x8e, 0xc5, 0x60, 0x4b, 0x8a, 0xe6, 0x64, 0x1e, 0x12, 0xa2, 0xf9, 0x85, 0x02, 0x9c, 0xc1, 0x80, - 0xc3, 0x6c, 0x47, 0xf5, 0x11, 0xb0, 0x45, 0x48, 0x33, 0xea, 0x3a, 0x30, 0x97, 0xe2, 0x3a, 0xf0, - 0x2f, 0xb7, 0xca, 0xaf, 0xac, 0x98, 0xde, 0x6a, 0x67, 0x79, 0xbc, 0x69, 0xaf, 0x5f, 0x5f, 0x71, - 0xf4, 0x87, 0x26, 0xbf, 0x34, 0xd7, 0x5b, 0xd7, 0xc3, 0xc4, 0x3a, 0x6d, 0x53, 0xa4, 0xc9, 0xa9, - 0xe3, 0x4e, 0x89, 0x71, 0xf5, 0x9d, 0x0e, 0x5c, 0x80, 0xdb, 0xb6, 0x69, 0x09, 0x4f, 0x5c, 0x6e, - 0xe8, 0xd6, 0xb7, 0xb7, 0xca, 0x67, 0xdf, 0xb3, 0x4d, 0xab, 0x11, 0x77, 0xc7, 0xdd, 0x6b, 0x7d, - 0x21, 0x6b, 0x4d, 0xaa, 0x46, 0xfd, 0x6f, 0x73, 0x70, 0x21, 0xaa, 0xc5, 0x1f, 0x05, 0xdb, 0xf1, - 0x2f, 0xe5, 0xe1, 0xec, 0x2d, 0x14, 0x4e, 0xe0, 0xfe, 0x74, 0x32, 0x6f, 0x89, 0xc1, 0x99, 0x22, - 0x9b, 0x13, 0x8b, 0x32, 0x5b, 0x36, 0x27, 0x93, 0xba, 0x90, 0xcd, 0x7f, 0x93, 0x83, 0xd3, 0x0b, - 0xb5, 0xea, 0xe4, 0x47, 0x64, 0x44, 0x25, 0xbf, 0xe7, 0x98, 0x1b, 0x9c, 0x89, 0xef, 0x39, 0xe6, - 0xa6, 0xe7, 0xd7, 0xf2, 0x70, 0xba, 0x5e, 0x99, 0x9b, 0xfd, 0xa8, 0xcc, 0xe0, 0x93, 0xb2, 0xaf, - 0xae, 0x7f, 0x08, 0x26, 0x6c, 0x01, 0xf9, 0x33, 0xef, 0xdd, 0xc8, 0xf6, 0xe1, 0x4d, 0x0a, 0xe5, - 0x98, 0x4f, 0xdd, 0x87, 0x22, 0x14, 0xa6, 0xf9, 0x11, 0xea, 0x63, 0xae, 0xf9, 0x7f, 0xbf, 0x04, - 0x83, 0x77, 0x3a, 0xcb, 0x54, 0xb8, 0x74, 0x3d, 0xd6, 0x27, 0xbf, 0x37, 0x60, 0x50, 0x88, 0x01, - 0x6f, 0x38, 0xa4, 0x90, 0x93, 0x22, 0x84, 0x10, 0x8f, 0xea, 0x25, 0x13, 0x91, 0x4b, 0x50, 0xbc, - 0x47, 0x9d, 0x65, 0xf9, 0x35, 0xf6, 0x43, 0xea, 0x2c, 0x6b, 0x08, 0x25, 0xb3, 0xe1, 0x43, 0x93, - 0xca, 0x62, 0x0d, 0xd3, 0x1d, 0x89, 0x4b, 0x43, 0xcc, 0xdf, 0x14, 0x78, 0x8b, 0xea, 0x6d, 0x93, - 0x27, 0x4a, 0x92, 0x23, 0x41, 0xc4, 0x4b, 0x92, 0x79, 0x38, 0x25, 0xbb, 0x0b, 0xf2, 0x5c, 0x3f, - 0xfd, 0x29, 0xec, 0xd2, 0xb2, 0xfc, 0x24, 0x8b, 0x92, 0xb7, 0x61, 0xc8, 0x07, 0xa2, 0xe3, 0xe3, - 0x40, 0x98, 0x60, 0x22, 0x60, 0x15, 0xcb, 0x07, 0x10, 0x29, 0x20, 0x33, 0xc0, 0x4b, 0x0c, 0x48, - 0x61, 0x10, 0x73, 0x24, 0x8d, 0x14, 0x20, 0x2f, 0x23, 0x03, 0x7c, 0x1c, 0x85, 0x0e, 0x53, 0x83, - 0xf8, 0x54, 0x19, 0x2f, 0x80, 0x1c, 0x01, 0xe7, 0x0f, 0xd2, 0x23, 0x64, 0x64, 0x01, 0x20, 0x74, - 0x6c, 0x11, 0x61, 0x3f, 0xf6, 0xec, 0x72, 0x23, 0xb1, 0x90, 0x6f, 0xf2, 0x86, 0xf7, 0x73, 0x93, - 0xa7, 0xfe, 0x4c, 0x01, 0x06, 0x2b, 0xed, 0x76, 0x30, 0x14, 0x5e, 0x80, 0x52, 0xa5, 0xdd, 0xbe, - 0xab, 0xd5, 0xe4, 0x04, 0x00, 0x7a, 0xbb, 0xdd, 0xe8, 0x38, 0xa6, 0xec, 0x49, 0xcd, 0x89, 0xc8, - 0x24, 0x0c, 0x57, 0xda, 0xed, 0xc5, 0xce, 0x72, 0xcb, 0x6c, 0x4a, 0xf9, 0xcb, 0x78, 0x86, 0xc7, - 0x76, 0xbb, 0xd1, 0x46, 0x4c, 0x3c, 0x89, 0x5d, 0xb4, 0x0c, 0xf9, 0x22, 0x06, 0xcb, 0x12, 0xe9, - 0xb3, 0x78, 0x82, 0x1e, 0x35, 0x08, 0xfd, 0x1f, 0xb6, 0x6d, 0x3c, 0x20, 0xe2, 0x29, 0x12, 0x2e, - 0xf9, 0x89, 0x2d, 0x58, 0x45, 0x89, 0x34, 0x59, 0x21, 0x4b, 0xf2, 0x49, 0xe8, 0xab, 0xb4, 0xdb, - 0xd2, 0x6d, 0x15, 0x3a, 0xb6, 0xb1, 0x52, 0xf1, 0x0c, 0x85, 0x82, 0x4c, 0x7c, 0x96, 0xb8, 0xdf, - 0xb6, 0x1d, 0x0f, 0x87, 0xd4, 0x70, 0xf8, 0x59, 0xfe, 0x85, 0xb8, 0x2d, 0xc7, 0xa7, 0xd1, 0xa2, - 0x65, 0x2e, 0xbe, 0x09, 0x23, 0xd1, 0x16, 0xef, 0x29, 0x4f, 0xc3, 0xf7, 0x73, 0x28, 0x95, 0x63, - 0xfe, 0x9c, 0xe0, 0x25, 0x28, 0x54, 0xda, 0x6d, 0x31, 0xa9, 0x9d, 0x4e, 0xe9, 0xd4, 0x78, 0xf4, - 0x81, 0x4a, 0xbb, 0xed, 0x7f, 0xfa, 0x31, 0x7f, 0x97, 0xb4, 0xaf, 0x4f, 0xff, 0x0e, 0xff, 0xf4, - 0xe3, 0xfd, 0x66, 0x48, 0xfd, 0xb5, 0x02, 0x8c, 0x56, 0xda, 0xed, 0x93, 0xfc, 0x0e, 0x87, 0x15, - 0xe3, 0xe0, 0x45, 0x00, 0x69, 0x8e, 0xed, 0x0b, 0x5e, 0x4d, 0x0e, 0x4a, 0xf3, 0xab, 0x92, 0xd3, - 0x24, 0x22, 0x5f, 0xfd, 0xfa, 0xf7, 0xa4, 0x7e, 0x5f, 0x2a, 0xe0, 0xc4, 0x77, 0xdc, 0xe3, 0xb5, - 0x7d, 0x58, 0xba, 0x4d, 0xf4, 0x41, 0x69, 0x4f, 0x7d, 0xf0, 0xbb, 0x91, 0xc1, 0x83, 0xf9, 0x02, - 0x4e, 0x7a, 0xa1, 0xf7, 0x40, 0xb6, 0xf5, 0x88, 0x2c, 0x4c, 0x11, 0x44, 0xca, 0xcf, 0x99, 0x26, - 0x42, 0x9a, 0x35, 0x19, 0xaa, 0x61, 0x1a, 0x5a, 0x8c, 0xd6, 0xef, 0xc3, 0xbe, 0x3d, 0xf5, 0xe1, - 0x56, 0x1e, 0xc3, 0x16, 0x04, 0x21, 0xd1, 0x0e, 0xbe, 0x45, 0xb9, 0x0e, 0xc0, 0xdd, 0x17, 0x02, - 0xff, 0xfc, 0x61, 0x1e, 0xfd, 0x88, 0xa7, 0x52, 0x13, 0xd1, 0x8f, 0x42, 0x92, 0xc0, 0xdd, 0xa9, - 0x90, 0xea, 0xee, 0x74, 0x0d, 0xfa, 0x35, 0x7d, 0xe3, 0x9d, 0x0e, 0x75, 0x36, 0x85, 0x4d, 0xc4, - 0x23, 0x8e, 0xea, 0x1b, 0x8d, 0x1f, 0x62, 0x40, 0x2d, 0x40, 0x13, 0x35, 0x88, 0x7b, 0x21, 0xb9, - 0x95, 0xf0, 0x83, 0xf6, 0x20, 0xda, 0xc5, 0x7e, 0x14, 0x9d, 0xbc, 0x0e, 0x85, 0xca, 0xfd, 0xba, - 0x90, 0x6c, 0xd0, 0xb5, 0x95, 0xfb, 0x75, 0x21, 0xaf, 0xcc, 0xb2, 0xf7, 0xeb, 0xea, 0x97, 0xf2, - 0x40, 0x92, 0x94, 0xe4, 0x15, 0x18, 0x40, 0xe8, 0x0a, 0xd3, 0x19, 0x39, 0x07, 0xef, 0x86, 0xdb, - 0x70, 0x10, 0x1a, 0xb1, 0x10, 0x7d, 0x52, 0xf2, 0x1a, 0x66, 0x39, 0x17, 0x59, 0x20, 0x23, 0x39, - 0x78, 0x37, 0x5c, 0x3f, 0x2f, 0x78, 0x2c, 0xc9, 0xb9, 0x20, 0x46, 0xe3, 0xf2, 0x7e, 0x7d, 0xc6, - 0x76, 0x3d, 0x21, 0x6a, 0x6e, 0x5c, 0x6e, 0xb8, 0x98, 0xfc, 0x39, 0x62, 0x5c, 0x72, 0x32, 0x4c, - 0x60, 0x77, 0xbf, 0xce, 0x5f, 0x88, 0x19, 0x9a, 0xdd, 0xf2, 0xad, 0x52, 0x9e, 0xc0, 0x6e, 0xc3, - 0x6d, 0xf0, 0xd7, 0x65, 0x06, 0xa6, 0x57, 0x8f, 0x24, 0xb0, 0x8b, 0x94, 0x52, 0x7f, 0xb2, 0x1f, - 0xc6, 0xaa, 0xba, 0xa7, 0x2f, 0xeb, 0x2e, 0x95, 0xb6, 0xe4, 0xa3, 0x3e, 0xcc, 0xff, 0x1c, 0x49, - 0x0e, 0xc6, 0x72, 0xca, 0xd7, 0xc4, 0x0b, 0x90, 0x37, 0x42, 0xbe, 0x41, 0x7a, 0x61, 0x39, 0x5f, - 0xe1, 0x72, 0xa3, 0x2d, 0xc0, 0x5a, 0x82, 0x90, 0x3c, 0x0f, 0x83, 0x3e, 0x8c, 0xed, 0x22, 0x0a, - 0xa1, 0xce, 0x18, 0xcb, 0x6c, 0x13, 0xa1, 0xc9, 0x68, 0xf2, 0x1a, 0x0c, 0xf9, 0x3f, 0x25, 0xfb, - 0x9c, 0x27, 0x5f, 0x5c, 0x4e, 0x6c, 0xc1, 0x64, 0x52, 0xb9, 0x28, 0xce, 0x6f, 0xbd, 0x91, 0xa2, - 0xb1, 0xfc, 0x86, 0x11, 0x52, 0xf2, 0x43, 0x30, 0xe2, 0xff, 0x16, 0xbb, 0x0e, 0xee, 0x7d, 0xf8, - 0x7c, 0x90, 0xbd, 0x3d, 0x26, 0xd6, 0xf1, 0x28, 0x39, 0xdf, 0x7f, 0x3c, 0xe1, 0xa7, 0xec, 0x33, - 0x96, 0x93, 0xdb, 0x8f, 0x58, 0x05, 0xa4, 0x06, 0xa7, 0x7c, 0x48, 0xa8, 0xa1, 0x7d, 0xe1, 0xb6, - 0xd3, 0x58, 0x6e, 0xa4, 0x2a, 0x69, 0xb2, 0x14, 0x69, 0xc1, 0xa5, 0x08, 0xd0, 0x70, 0x57, 0xcd, - 0x07, 0x9e, 0xd8, 0x33, 0x8a, 0xf0, 0xdf, 0x22, 0x47, 0x6b, 0xc0, 0x95, 0xd3, 0xf8, 0xc9, 0x96, - 0xa3, 0x89, 0xd9, 0xba, 0x72, 0x23, 0x75, 0x38, 0xe3, 0xe3, 0x6f, 0x4d, 0x2e, 0x2e, 0x3a, 0xf6, - 0x7b, 0xb4, 0xe9, 0xd5, 0xaa, 0x62, 0xcf, 0x8d, 0x61, 0x21, 0x8d, 0xe5, 0xc6, 0x4a, 0xb3, 0xcd, - 0x94, 0x82, 0xe1, 0xa2, 0xcc, 0x53, 0x0b, 0x93, 0x7b, 0x70, 0x56, 0x82, 0x4b, 0x99, 0xe0, 0x21, - 0x3c, 0x14, 0x10, 0x5c, 0xd3, 0x93, 0xc1, 0xa7, 0x17, 0x27, 0x6f, 0xc2, 0xb0, 0x8f, 0xe0, 0x57, - 0x91, 0x83, 0x78, 0x15, 0x89, 0x43, 0xd2, 0x58, 0x6e, 0xc4, 0x1f, 0x32, 0x47, 0x89, 0x65, 0x8d, - 0x5a, 0xda, 0x6c, 0x53, 0xe1, 0x16, 0xec, 0x6b, 0x94, 0xb7, 0xd9, 0x4e, 0x55, 0x46, 0x46, 0x4a, - 0xde, 0x0e, 0x35, 0x6a, 0xc1, 0x31, 0x57, 0x4c, 0xbe, 0x1d, 0xf7, 0xdf, 0x2e, 0x2f, 0x37, 0x6c, - 0x04, 0xa6, 0xe9, 0x07, 0x27, 0xbf, 0x58, 0x81, 0xd3, 0x29, 0x3a, 0xb6, 0xa7, 0x1d, 0xe3, 0x97, - 0xf3, 0x61, 0x23, 0x8e, 0xf9, 0xb6, 0x71, 0x02, 0xfa, 0xfd, 0x2f, 0x11, 0xc6, 0x83, 0x92, 0x35, - 0x34, 0xe3, 0x3c, 0x7c, 0x7c, 0x44, 0x1c, 0xc7, 0x7c, 0x2b, 0x79, 0x18, 0xe2, 0xf8, 0x6e, 0x2e, - 0x14, 0xc7, 0x31, 0xdf, 0x5e, 0xfe, 0x44, 0x31, 0x9c, 0x93, 0x4e, 0xf6, 0x98, 0x87, 0x65, 0x26, - 0x87, 0xce, 0xb4, 0xa5, 0x3d, 0xbc, 0x21, 0x96, 0x55, 0xb3, 0x6f, 0x7f, 0xaa, 0x49, 0xde, 0x84, - 0xc1, 0x45, 0xdb, 0xf5, 0x56, 0x1c, 0xea, 0x2e, 0x06, 0xe9, 0x2b, 0xf0, 0xfd, 0x79, 0x5b, 0x80, - 0x1b, 0xed, 0xc8, 0xec, 0x2f, 0x93, 0xab, 0xff, 0xb8, 0x90, 0xd0, 0x06, 0x6e, 0xb8, 0x1e, 0x4b, - 0x6d, 0x38, 0x84, 0xa1, 0x4e, 0x6e, 0x84, 0xab, 0x20, 0xb7, 0xf0, 0x7b, 0xa5, 0xd8, 0x9c, 0xcb, - 0xc2, 0xc0, 0x8f, 0x92, 0x90, 0xcf, 0xc3, 0xf9, 0x08, 0x60, 0x51, 0x77, 0xf4, 0x75, 0xea, 0x85, - 0xa9, 0x42, 0x31, 0xda, 0x9a, 0x5f, 0xba, 0xd1, 0x0e, 0xd0, 0x72, 0xfa, 0xd1, 0x0c, 0x0e, 0x92, - 0x6a, 0xf5, 0xed, 0xc1, 0x4f, 0xfb, 0xeb, 0x85, 0xd0, 0xd0, 0x89, 0x46, 0x4d, 0xd6, 0xa8, 0xdb, - 0x69, 0x79, 0x8f, 0x6f, 0x07, 0xef, 0x2f, 0x27, 0xcd, 0x0c, 0x8c, 0x56, 0x1e, 0x3c, 0xa0, 0x4d, - 0xcf, 0x0f, 0x06, 0xef, 0x8a, 0x38, 0x99, 0x7c, 0xe3, 0x21, 0x50, 0x22, 0xb8, 0xb7, 0xdc, 0xaf, - 0xf1, 0x62, 0xea, 0x3f, 0x29, 0x82, 0x12, 0x18, 0xfe, 0xc1, 0x7b, 0xc5, 0x23, 0x5c, 0x64, 0x3f, - 0x14, 0xbd, 0x62, 0xc2, 0xa9, 0x50, 0x18, 0xe2, 0xa1, 0x98, 0x48, 0x5e, 0x5f, 0x8e, 0x33, 0x0b, - 0x09, 0xf9, 0x5e, 0xe2, 0xa2, 0xd8, 0x4b, 0x90, 0xf0, 0x3d, 0x68, 0xc3, 0xe5, 0x2c, 0xb4, 0x24, - 0x57, 0xf2, 0x95, 0x1c, 0x9c, 0xf1, 0x3b, 0x65, 0x61, 0x99, 0x19, 0xd5, 0x93, 0x76, 0xc7, 0x0a, - 0x5e, 0x51, 0xbd, 0x9e, 0x5d, 0x1d, 0xef, 0xa4, 0xf1, 0xb4, 0xc2, 0xbc, 0x25, 0x41, 0x44, 0x98, - 0x40, 0x21, 0x6c, 0xa4, 0x69, 0x34, 0x91, 0x48, 0x4b, 0xad, 0xf7, 0xe2, 0x2d, 0xb8, 0x90, 0xc9, - 0x72, 0x27, 0x23, 0xb6, 0x57, 0x36, 0x62, 0xff, 0xfb, 0x5c, 0x38, 0x11, 0xc5, 0x84, 0x44, 0xc6, - 0x01, 0x42, 0x90, 0xd8, 0xd6, 0xe2, 0x23, 0xad, 0x50, 0x68, 0x9a, 0x44, 0x41, 0x16, 0xa0, 0x24, - 0xc4, 0xc2, 0xd3, 0x72, 0x7f, 0x62, 0x87, 0x5e, 0x18, 0x97, 0xe5, 0x80, 0x5b, 0x56, 0xf1, 0xcd, - 0x82, 0xcd, 0xc5, 0xd7, 0x60, 0x70, 0xbf, 0xdf, 0xf5, 0x95, 0x02, 0x10, 0x79, 0x0f, 0x7a, 0x84, - 0x06, 0xfa, 0x31, 0x9e, 0xc2, 0xae, 0x42, 0x3f, 0xfb, 0x04, 0x4c, 0x54, 0x23, 0x05, 0xa6, 0xee, - 0x08, 0x98, 0x16, 0x60, 0xc3, 0xa8, 0x70, 0x7d, 0xe9, 0x51, 0xe1, 0xd4, 0x9f, 0x2e, 0xc0, 0x39, - 0xb9, 0x43, 0xaa, 0x14, 0x73, 0x5d, 0x9c, 0x74, 0xca, 0x07, 0xd8, 0x29, 0x2a, 0x94, 0xf8, 0xd6, - 0x43, 0x24, 0x1d, 0xe1, 0xc7, 0x42, 0x08, 0xd1, 0x04, 0x46, 0xfd, 0x5f, 0xf2, 0x30, 0x1c, 0x98, - 0x77, 0xba, 0xe3, 0x3e, 0xc6, 0xdd, 0xf1, 0x29, 0x18, 0xc6, 0xb8, 0x5e, 0xeb, 0xd4, 0xe2, 0xb1, - 0xaf, 0x7a, 0xa5, 0x2c, 0x41, 0x3e, 0x42, 0x24, 0x84, 0x8b, 0x10, 0x32, 0xed, 0xe7, 0x96, 0x9f, - 0x14, 0x6d, 0x8d, 0x9b, 0x7d, 0x1c, 0xae, 0xfe, 0xd5, 0x02, 0x0c, 0xf9, 0x52, 0x9e, 0x30, 0x8f, - 0xeb, 0x3d, 0xcf, 0xd1, 0x0a, 0xf9, 0x3a, 0xc0, 0xa2, 0xed, 0x78, 0x7a, 0x6b, 0x3e, 0xd4, 0x7c, - 0x3c, 0x20, 0x6d, 0x23, 0x94, 0x97, 0x91, 0x48, 0x70, 0xfd, 0x0a, 0xcd, 0x6a, 0x3e, 0x31, 0xf1, - 0xf5, 0x2b, 0x80, 0x6a, 0x12, 0x85, 0xfa, 0x5b, 0x79, 0x18, 0xf5, 0x3b, 0x69, 0xea, 0x11, 0x6d, - 0x76, 0x1e, 0xe7, 0xb9, 0x29, 0x2a, 0xed, 0xde, 0x1d, 0xa5, 0xad, 0xfe, 0x5f, 0xd2, 0x44, 0x32, - 0xd9, 0xb2, 0x4f, 0x26, 0x92, 0x7f, 0x13, 0x3a, 0xae, 0xfe, 0x48, 0x01, 0xce, 0xf8, 0x52, 0x9f, - 0xee, 0x58, 0x78, 0xb4, 0x30, 0xa9, 0xb7, 0x5a, 0x8f, 0xf3, 0x6e, 0x7c, 0xd0, 0x17, 0xc4, 0x82, - 0x08, 0x94, 0x29, 0x92, 0x73, 0x3e, 0x10, 0xe0, 0x86, 0x6d, 0x1a, 0x9a, 0x4c, 0x44, 0xde, 0x86, - 0x21, 0xff, 0x67, 0xc5, 0x59, 0xf1, 0xb7, 0xe0, 0x78, 0x51, 0x10, 0x14, 0xd2, 0x9d, 0x48, 0x74, - 0x8d, 0x48, 0x01, 0xf5, 0x4b, 0x7d, 0x70, 0xf1, 0xbe, 0x69, 0x19, 0xf6, 0x86, 0xeb, 0xe7, 0x76, - 0x3d, 0xf6, 0x07, 0x65, 0x47, 0x9d, 0xd3, 0xf5, 0x1d, 0x38, 0x1b, 0x17, 0xa9, 0x13, 0x44, 0xdc, - 0x17, 0xbd, 0xb3, 0xc1, 0x09, 0x1a, 0x7e, 0x96, 0x57, 0x71, 0xdb, 0xa6, 0xa5, 0x97, 0x8c, 0xa7, - 0x89, 0xed, 0xdb, 0x4d, 0x9a, 0xd8, 0xe7, 0xa0, 0x54, 0xb5, 0xd7, 0x75, 0xd3, 0x8f, 0xb3, 0x84, - 0xa3, 0x38, 0xa8, 0x17, 0x31, 0x9a, 0xa0, 0x60, 0xfc, 0x45, 0xc5, 0xd8, 0x65, 0x03, 0x21, 0x7f, - 0xbf, 0x00, 0xb3, 0xd2, 0x34, 0x99, 0x88, 0xd8, 0x30, 0x2c, 0xaa, 0x13, 0x77, 0x63, 0x80, 0x9b, - 0xa7, 0x97, 0x7d, 0x19, 0x65, 0xab, 0xd5, 0x78, 0xa4, 0x1c, 0xdf, 0x46, 0xf1, 0xec, 0xb5, 0xe2, - 0x63, 0xf8, 0x2d, 0x99, 0x16, 0xe5, 0x2f, 0x09, 0x01, 0x27, 0x99, 0xc1, 0xa4, 0x10, 0x70, 0x96, - 0x91, 0x89, 0xc8, 0x14, 0x9c, 0xc2, 0xb8, 0xe8, 0xc1, 0x56, 0x8a, 0xa9, 0xc4, 0x10, 0x1a, 0x95, - 0x78, 0xe5, 0xc2, 0x43, 0xa9, 0xb3, 0x8f, 0x6b, 0x34, 0x05, 0x5a, 0x4b, 0x96, 0x20, 0x17, 0xa0, - 0x30, 0x3f, 0x5b, 0xc1, 0xbb, 0x9a, 0x7e, 0x9e, 0x93, 0xcc, 0x6a, 0xe9, 0x1a, 0x83, 0x5d, 0xfc, - 0x0c, 0x90, 0xe4, 0xe7, 0xec, 0xe9, 0x3e, 0xe6, 0xbf, 0x92, 0xb6, 0x7c, 0xc7, 0xdd, 0xa3, 0xe6, - 0x30, 0x26, 0xc2, 0x48, 0x3a, 0xc0, 0xde, 0x0f, 0x32, 0x1d, 0x60, 0xe9, 0x50, 0xd3, 0x01, 0xaa, - 0xbf, 0x9c, 0x83, 0x53, 0x89, 0xdc, 0x01, 0xe4, 0x25, 0x00, 0x0e, 0x91, 0x62, 0xb4, 0x62, 0x08, - 0xa1, 0x30, 0x9f, 0x80, 0x58, 0x1e, 0x43, 0x32, 0x72, 0x1d, 0xfa, 0xf9, 0x2f, 0x11, 0xa5, 0x2c, - 0x59, 0xa4, 0xd3, 0x31, 0x0d, 0x2d, 0x20, 0x0a, 0x6b, 0xc1, 0x1b, 0xc9, 0x42, 0x6a, 0x11, 0x6f, - 0xb3, 0x1d, 0xd4, 0xc2, 0xc8, 0xd4, 0x9f, 0xcc, 0xc3, 0x50, 0xd0, 0xe0, 0x8a, 0x71, 0x54, 0x3a, - 0x57, 0x12, 0x69, 0x18, 0x0a, 0x3b, 0xa5, 0x61, 0x88, 0xcd, 0xb7, 0x22, 0xef, 0xc2, 0xe1, 0xbd, - 0xca, 0xfa, 0x6a, 0x1e, 0x46, 0x83, 0x5a, 0x8f, 0xf0, 0xf2, 0xeb, 0x43, 0x24, 0x92, 0xaf, 0xe4, - 0x40, 0x99, 0x30, 0x5b, 0x2d, 0xd3, 0x5a, 0xa9, 0x59, 0x0f, 0x6c, 0x67, 0x1d, 0x27, 0xc4, 0xa3, - 0x3b, 0xc2, 0x55, 0xff, 0x7c, 0x0e, 0x4e, 0x89, 0x06, 0x4d, 0xea, 0x8e, 0x71, 0x74, 0xe7, 0x63, - 0xf1, 0x96, 0x1c, 0x9d, 0xbe, 0xa8, 0xdf, 0xca, 0x03, 0xcc, 0xda, 0xcd, 0xb5, 0x63, 0xfe, 0xa8, - 0xeb, 0x0d, 0x28, 0x71, 0xb7, 0x78, 0xa1, 0xb1, 0xa7, 0xc4, 0xe3, 0x25, 0xf6, 0x69, 0x1c, 0x31, - 0x31, 0x26, 0xe6, 0xe3, 0x12, 0xf7, 0xac, 0x57, 0x72, 0x9a, 0x28, 0xc2, 0x2a, 0x65, 0x74, 0x62, - 0xc1, 0x08, 0x2a, 0x65, 0xb0, 0x68, 0xa5, 0xdb, 0x5b, 0xe5, 0x62, 0xcb, 0x6e, 0xae, 0x69, 0x48, - 0xaf, 0xfe, 0xab, 0x1c, 0x97, 0xdd, 0x31, 0x7f, 0x9a, 0xea, 0x7f, 0x7e, 0x71, 0x8f, 0x9f, 0xff, - 0x17, 0x72, 0x70, 0x46, 0xa3, 0x4d, 0xfb, 0x21, 0x75, 0x36, 0x27, 0x6d, 0x83, 0xde, 0xa2, 0x16, - 0x75, 0x8e, 0x6a, 0x44, 0xfd, 0x36, 0xe6, 0xad, 0x09, 0x1b, 0x73, 0xd7, 0xa5, 0xc6, 0xf1, 0xc9, - 0x29, 0xa4, 0xfe, 0x6a, 0x1f, 0x28, 0xa9, 0x56, 0xef, 0xb1, 0x35, 0xe7, 0x32, 0xb7, 0x32, 0xc5, - 0xc3, 0xda, 0xca, 0xf4, 0xee, 0x6d, 0x2b, 0x53, 0xda, 0xeb, 0x56, 0xa6, 0x6f, 0x37, 0x5b, 0x99, - 0xf5, 0xf8, 0x56, 0xa6, 0x1f, 0xb7, 0x32, 0x2f, 0x75, 0xdd, 0xca, 0x4c, 0x59, 0xc6, 0x3e, 0x37, - 0x32, 0xc7, 0x36, 0xdf, 0xf5, 0x7e, 0x76, 0x60, 0x57, 0xd9, 0xa4, 0xd8, 0xb4, 0x1d, 0x83, 0x1a, - 0x62, 0xe3, 0x85, 0xa7, 0xfe, 0x8e, 0x80, 0x69, 0x01, 0x36, 0x91, 0x3c, 0x7c, 0x78, 0x37, 0xc9, - 0xc3, 0x0f, 0x61, 0xff, 0xf5, 0xe5, 0x3c, 0x9c, 0x9a, 0xa4, 0x8e, 0xc7, 0x63, 0xd1, 0x1e, 0x86, - 0x4b, 0x5c, 0x05, 0x46, 0x25, 0x86, 0x68, 0x91, 0xe7, 0x43, 0x37, 0xbf, 0x26, 0x75, 0xbc, 0xb8, - 0x97, 0x60, 0x9c, 0x9e, 0x55, 0xef, 0x27, 0xf0, 0x13, 0x63, 0x37, 0xa8, 0xde, 0x87, 0x73, 0x41, - 0x9a, 0xe2, 0x97, 0x16, 0xd0, 0x4b, 0x39, 0xf9, 0x8a, 0x7b, 0xcf, 0xc9, 0xa7, 0xfe, 0x52, 0x0e, - 0xae, 0x68, 0xd4, 0xa2, 0x1b, 0xfa, 0x72, 0x8b, 0x4a, 0xcd, 0x12, 0x2b, 0x03, 0x9b, 0x35, 0x4c, - 0x77, 0x5d, 0xf7, 0x9a, 0xab, 0x07, 0x92, 0xd1, 0x34, 0x0c, 0xc9, 0xf3, 0xd7, 0x1e, 0xe6, 0xb6, - 0x48, 0x39, 0xf5, 0x57, 0x8b, 0xd0, 0x37, 0x61, 0x7b, 0xb7, 0xed, 0x03, 0x26, 0x89, 0x0c, 0xa7, - 0xfc, 0xfc, 0x1e, 0xce, 0x7a, 0x3e, 0x89, 0x95, 0x4b, 0x79, 0x33, 0xd0, 0x85, 0x74, 0xd9, 0x4e, - 0xe4, 0x17, 0xf1, 0xc9, 0xf6, 0x98, 0x1e, 0xf2, 0x15, 0x18, 0xc0, 0x10, 0x32, 0xd2, 0x69, 0x2c, - 0x3a, 0x68, 0x7b, 0x0c, 0x18, 0xaf, 0x23, 0x24, 0x25, 0x9f, 0x8f, 0x04, 0xcf, 0x2d, 0x1d, 0x3c, - 0x9d, 0xa4, 0x1c, 0x47, 0xf7, 0x25, 0x7e, 0x91, 0x87, 0x6d, 0x92, 0x52, 0xef, 0xe0, 0x29, 0x4a, - 0xac, 0x49, 0x01, 0xe1, 0x21, 0xa6, 0x7a, 0x9c, 0x84, 0xe1, 0x09, 0xdb, 0x93, 0x9c, 0x81, 0x07, - 0xc2, 0xb7, 0xa4, 0x4c, 0xf2, 0xe9, 0x9e, 0xc0, 0xd1, 0x32, 0xea, 0x9f, 0x16, 0x61, 0xc8, 0xff, - 0x79, 0x44, 0xba, 0xf3, 0x02, 0x94, 0x66, 0x6c, 0x29, 0xfb, 0x08, 0x3a, 0x10, 0xaf, 0xda, 0x6e, - 0xcc, 0x33, 0x5a, 0x10, 0x31, 0xa9, 0xcf, 0xdb, 0x86, 0xec, 0xfe, 0x8e, 0x52, 0xb7, 0x6c, 0x23, - 0xf1, 0x06, 0x39, 0x20, 0x24, 0x57, 0xa0, 0x88, 0x2f, 0x07, 0xa4, 0x83, 0xfc, 0xd8, 0x6b, 0x01, - 0xc4, 0x4b, 0x5a, 0x59, 0xda, 0xab, 0x56, 0xf6, 0xed, 0x57, 0x2b, 0xfb, 0x0f, 0x57, 0x2b, 0xdf, - 0x85, 0x21, 0xac, 0xc9, 0x4f, 0x5e, 0xb8, 0xf3, 0xc2, 0x7a, 0x41, 0xac, 0x7d, 0xc3, 0xbc, 0xdd, - 0x22, 0x85, 0x21, 0x2e, 0x79, 0x11, 0x56, 0x31, 0xdd, 0x85, 0x03, 0x6c, 0xa7, 0xff, 0x71, 0x0e, - 0xfa, 0xee, 0x5a, 0x6b, 0x96, 0xbd, 0x71, 0x30, 0x8d, 0x7b, 0x09, 0x06, 0x05, 0x1b, 0x69, 0x75, - 0xc1, 0x67, 0xe5, 0x1d, 0x0e, 0x6e, 0x20, 0x27, 0x4d, 0xa6, 0x22, 0x6f, 0x06, 0x85, 0xf0, 0x71, - 0x50, 0x21, 0xcc, 0xdf, 0xe3, 0x17, 0x6a, 0x46, 0x13, 0x78, 0xc8, 0xe4, 0xe4, 0x12, 0x14, 0xab, - 0xac, 0xa9, 0x52, 0x20, 0x5f, 0xd6, 0x14, 0x0d, 0xa1, 0xea, 0x97, 0x8b, 0x30, 0x12, 0x3b, 0xf8, - 0x7a, 0x0e, 0x06, 0xc4, 0xc1, 0x93, 0xe9, 0x67, 0x14, 0xc1, 0xc7, 0x43, 0x01, 0x50, 0xeb, 0xe7, - 0x7f, 0xd6, 0x0c, 0xf2, 0x69, 0xe8, 0xb3, 0x5d, 0x5c, 0x14, 0xf1, 0x5b, 0x46, 0xc2, 0x21, 0xb4, - 0x50, 0x67, 0x6d, 0xe7, 0x83, 0x43, 0x90, 0xc8, 0x1a, 0x69, 0xbb, 0xf8, 0x69, 0x37, 0x61, 0x40, - 0x77, 0x5d, 0xea, 0x35, 0x3c, 0x7d, 0x45, 0x4e, 0x32, 0x12, 0x00, 0xe5, 0xd1, 0x81, 0xc0, 0x25, - 0x7d, 0x85, 0x7c, 0x06, 0x86, 0x9b, 0x0e, 0xc5, 0x65, 0x53, 0x6f, 0xb1, 0x56, 0x4a, 0x66, 0x6d, - 0x04, 0x21, 0xdf, 0x9f, 0x84, 0x88, 0x9a, 0x41, 0xee, 0xc1, 0xb0, 0xf8, 0x1c, 0xee, 0xb9, 0x8f, - 0x03, 0x6d, 0x24, 0x5c, 0xc6, 0xb8, 0x48, 0xb8, 0xef, 0xbe, 0x78, 0xc0, 0x21, 0x93, 0xcb, 0x7c, - 0x0d, 0x89, 0x94, 0x2c, 0x00, 0xd9, 0xa0, 0xcb, 0x0d, 0xbd, 0xe3, 0xad, 0xb2, 0xba, 0x78, 0x8c, - 0x7c, 0x91, 0x0d, 0x14, 0x5f, 0x3d, 0x24, 0xb1, 0xf2, 0x63, 0x90, 0x0d, 0xba, 0x5c, 0x89, 0x20, - 0xc9, 0x7d, 0x38, 0x9b, 0x2c, 0xc2, 0x3e, 0x99, 0x5f, 0x0e, 0x3c, 0xb3, 0xbd, 0x55, 0x2e, 0xa7, - 0x12, 0x48, 0x6c, 0x4f, 0x27, 0xd8, 0xd6, 0x8c, 0xdb, 0xc5, 0xfe, 0xbe, 0xb1, 0x7e, 0x6d, 0x84, - 0x95, 0xf5, 0x4d, 0x48, 0xd3, 0x50, 0x7f, 0x3f, 0xc7, 0x4c, 0x45, 0xf6, 0x41, 0x98, 0x0e, 0x9d, - 0xe9, 0xfa, 0xfa, 0x1e, 0x75, 0x7d, 0x3d, 0x4c, 0x5c, 0x5a, 0x72, 0xbb, 0xcc, 0xae, 0x9a, 0xc0, - 0x92, 0x71, 0x28, 0x19, 0xf2, 0xa9, 0xd9, 0xb9, 0x68, 0x27, 0xf8, 0xf5, 0x68, 0x82, 0x8a, 0x5c, - 0x85, 0x22, 0x5b, 0xb2, 0xe2, 0x5b, 0x66, 0xd9, 0xba, 0xd0, 0x90, 0x42, 0xfd, 0xe1, 0x3c, 0x0c, - 0x49, 0x5f, 0x73, 0xe3, 0x40, 0x9f, 0xf3, 0xfa, 0xee, 0x9a, 0xe9, 0x3b, 0xbd, 0xe0, 0x5e, 0xca, - 0x6f, 0xf2, 0xcd, 0x40, 0x14, 0xbb, 0xba, 0x90, 0x12, 0x82, 0x79, 0x45, 0x7c, 0x68, 0x69, 0xf7, - 0xdb, 0x47, 0x46, 0x7f, 0xbb, 0xd8, 0x9f, 0x1f, 0x2b, 0xdc, 0x2e, 0xf6, 0x17, 0xc7, 0x7a, 0x31, - 0x98, 0x17, 0xc6, 0xcf, 0xe6, 0x7b, 0x73, 0xeb, 0x81, 0xb9, 0x72, 0xcc, 0xdf, 0x8e, 0x1c, 0x6e, - 0xa0, 0xb3, 0x98, 0x6c, 0x8e, 0xf9, 0x43, 0x92, 0x0f, 0x54, 0x36, 0x27, 0x89, 0x4e, 0x85, 0x6c, - 0xfe, 0x49, 0x0e, 0x94, 0x54, 0xd9, 0x54, 0x8e, 0xc8, 0x0f, 0xe2, 0xf0, 0xd2, 0x9d, 0xfe, 0x71, - 0x1e, 0x4e, 0xd5, 0x2c, 0x8f, 0xae, 0xf0, 0x1d, 0xe3, 0x31, 0x9f, 0x2a, 0xee, 0xc0, 0xa0, 0xf4, - 0x31, 0xa2, 0xcf, 0x9f, 0x08, 0xf6, 0xe3, 0x21, 0x2a, 0x83, 0x93, 0x5c, 0xfa, 0xf0, 0x5e, 0xe2, - 0xc4, 0x85, 0x7c, 0xcc, 0xe7, 0x9c, 0xe3, 0x21, 0xe4, 0x63, 0x3e, 0x79, 0x7d, 0x48, 0x85, 0xfc, - 0xf7, 0xf2, 0x70, 0x3a, 0xa5, 0x72, 0x72, 0x05, 0xfa, 0xea, 0x9d, 0x65, 0x8c, 0xdd, 0x95, 0x0b, - 0x3d, 0x86, 0xdd, 0xce, 0x32, 0x86, 0xed, 0xd2, 0x7c, 0x24, 0x59, 0xc2, 0xc7, 0xf5, 0x0b, 0xb5, - 0xea, 0xa4, 0x90, 0xaa, 0x2a, 0x85, 0x09, 0x60, 0xe0, 0xb4, 0x2f, 0x0b, 0x1e, 0xe0, 0xdb, 0xa6, - 0xd1, 0x8c, 0x3d, 0xc0, 0x67, 0x65, 0xc8, 0x0f, 0xc0, 0x40, 0xe5, 0xfd, 0x8e, 0x43, 0x91, 0x2f, - 0x97, 0xf8, 0xc7, 0x02, 0xbe, 0x3e, 0x22, 0x8d, 0x33, 0x8f, 0x25, 0xc0, 0x28, 0xe2, 0xbc, 0x43, - 0x86, 0x64, 0x01, 0x4a, 0xb7, 0x4c, 0x6f, 0xa6, 0xb3, 0x2c, 0x7a, 0x21, 0x88, 0xef, 0xc5, 0xa1, - 0x69, 0x7c, 0x71, 0x57, 0xce, 0xe3, 0x14, 0xcb, 0x7b, 0x20, 0x5e, 0x40, 0xfd, 0xc9, 0x1c, 0x5c, - 0xcc, 0xfe, 0x5c, 0xf2, 0x49, 0xe8, 0x63, 0x5b, 0xfd, 0x8a, 0x36, 0x2f, 0x64, 0xc9, 0x73, 0x0d, - 0xdb, 0x2d, 0xda, 0xd0, 0x1d, 0x79, 0xf7, 0xe0, 0x93, 0x91, 0xb7, 0x60, 0xb0, 0xe6, 0xba, 0x1d, - 0xea, 0xd4, 0x5f, 0xba, 0xab, 0xd5, 0xc4, 0x26, 0x13, 0x37, 0x31, 0x26, 0x82, 0x1b, 0xee, 0x4b, - 0xb1, 0x70, 0x5f, 0x32, 0xbd, 0xfa, 0x63, 0x39, 0xb8, 0xd4, 0x4d, 0x4c, 0xe4, 0x25, 0xe8, 0x5f, - 0xa2, 0x96, 0x6e, 0x79, 0xb5, 0xaa, 0x68, 0x12, 0xee, 0xd9, 0x3c, 0x84, 0x45, 0xb7, 0x1e, 0x01, - 0x21, 0x2b, 0xc4, 0x0f, 0x2a, 0x03, 0xcf, 0x08, 0x7e, 0xa8, 0x8a, 0xb0, 0x58, 0x21, 0x9f, 0x50, - 0xfd, 0x3c, 0x5c, 0xc8, 0x94, 0x2a, 0xf9, 0x34, 0x0c, 0x2d, 0x38, 0x2b, 0xba, 0x65, 0xbe, 0xcf, - 0x07, 0x45, 0x2e, 0xdc, 0x17, 0xdb, 0x12, 0x5c, 0xde, 0xab, 0xc9, 0xf4, 0xea, 0x1f, 0xe4, 0x61, - 0x68, 0xb1, 0xd5, 0x59, 0x31, 0xa5, 0x65, 0x6e, 0xdf, 0xbb, 0x03, 0xdf, 0x56, 0xcf, 0xef, 0xcd, - 0x56, 0x67, 0x93, 0x83, 0xb3, 0xcf, 0xc9, 0xc1, 0x2f, 0x47, 0xde, 0x84, 0x52, 0x1b, 0xbf, 0x23, - 0x7e, 0x6e, 0xcc, 0xbf, 0x2e, 0xeb, 0xdc, 0x98, 0x97, 0x61, 0xb3, 0x41, 0xf3, 0x00, 0xb3, 0x41, - 0x58, 0x56, 0x12, 0x68, 0xb8, 0xa4, 0x9d, 0x08, 0xf4, 0x50, 0x04, 0x1a, 0x2e, 0x5f, 0x27, 0x02, - 0x3d, 0x80, 0x40, 0x7f, 0x35, 0x0f, 0x23, 0xd1, 0x2a, 0xc9, 0x27, 0x61, 0x90, 0x57, 0xc3, 0x4f, - 0xb1, 0x72, 0x92, 0x0b, 0x74, 0x08, 0xd6, 0x80, 0xff, 0x10, 0xc7, 0x71, 0xa3, 0xab, 0xba, 0xdb, - 0x08, 0xcf, 0x93, 0xf8, 0x6d, 0x73, 0x3f, 0xf7, 0xdb, 0x8a, 0xa1, 0xb4, 0x91, 0x55, 0xdd, 0x9d, - 0x0c, 0x7f, 0x93, 0x29, 0x20, 0x0e, 0xed, 0xb8, 0x34, 0xca, 0xa0, 0x88, 0x0c, 0x44, 0x16, 0xf9, - 0x38, 0x56, 0x3b, 0xc5, 0x61, 0x32, 0x9b, 0x2f, 0x04, 0xcd, 0x46, 0x65, 0xe8, 0xdd, 0x45, 0x8a, - 0x7b, 0x89, 0x3e, 0xfd, 0x50, 0x96, 0x13, 0x54, 0x75, 0x4f, 0xe7, 0x47, 0x08, 0x7e, 0x07, 0xa8, - 0xbf, 0xe7, 0x42, 0xef, 0x82, 0x45, 0x17, 0x1e, 0x90, 0x17, 0x61, 0x80, 0x29, 0xcc, 0xac, 0xcd, - 0xfa, 0x32, 0x27, 0xbc, 0x3d, 0x24, 0x4d, 0x42, 0xc4, 0x4c, 0x8f, 0x16, 0x52, 0x91, 0x9b, 0x00, - 0xe1, 0x83, 0x38, 0xa1, 0x7d, 0x44, 0x2e, 0xc3, 0x31, 0x33, 0x3d, 0x9a, 0x44, 0xe7, 0x97, 0x12, - 0xcf, 0x89, 0x0a, 0xc9, 0x52, 0x1c, 0xe3, 0x97, 0x12, 0xe3, 0x63, 0x16, 0x08, 0xfb, 0xb5, 0xa8, - 0xbb, 0xee, 0x86, 0xed, 0x18, 0x93, 0xab, 0xba, 0xb5, 0x42, 0xe3, 0x7b, 0xbd, 0x24, 0xc5, 0x4c, - 0x8f, 0x96, 0x52, 0x8e, 0xbc, 0x0e, 0x43, 0xb2, 0xfb, 0x6b, 0xdc, 0x45, 0x45, 0xc6, 0xcd, 0xf4, - 0x68, 0x11, 0x5a, 0xf2, 0x2a, 0x0c, 0x8a, 0xdf, 0xb7, 0x6d, 0x71, 0xff, 0x2d, 0x45, 0x4e, 0x92, - 0x50, 0x33, 0x3d, 0x9a, 0x4c, 0x29, 0x55, 0xba, 0xe8, 0x98, 0x96, 0x27, 0x5e, 0x54, 0xc7, 0x2b, - 0x45, 0x9c, 0x54, 0x29, 0xfe, 0x26, 0x6f, 0xc1, 0x70, 0x10, 0x92, 0xea, 0x3d, 0xda, 0xf4, 0xc4, - 0x51, 0xfd, 0xd9, 0x58, 0x61, 0x8e, 0x9c, 0xe9, 0xd1, 0xa2, 0xd4, 0xe4, 0x2a, 0x94, 0x34, 0xea, - 0x9a, 0xef, 0xfb, 0x97, 0xdb, 0x23, 0xd2, 0x38, 0x37, 0xdf, 0x67, 0x52, 0x12, 0x78, 0xd6, 0x3b, - 0xe1, 0x6d, 0xba, 0x38, 0x58, 0x27, 0xb1, 0x5a, 0xa6, 0x2c, 0x83, 0xf5, 0x8e, 0xe4, 0x4a, 0xf1, - 0x99, 0x30, 0x50, 0x97, 0xc8, 0x53, 0x3b, 0x18, 0x8f, 0x88, 0x20, 0x63, 0x67, 0x7a, 0xb4, 0x18, - 0xbd, 0x24, 0xd5, 0xaa, 0xe9, 0xae, 0x89, 0x00, 0xab, 0x71, 0xa9, 0x32, 0x94, 0x24, 0x55, 0xf6, - 0x53, 0xaa, 0x7a, 0x9e, 0x7a, 0x1b, 0xb6, 0xb3, 0x26, 0xc2, 0xa9, 0xc6, 0xab, 0x16, 0x58, 0xa9, - 0x6a, 0x01, 0x91, 0xab, 0x66, 0x03, 0x6e, 0x24, 0xbd, 0x6a, 0xdd, 0xd3, 0xe5, 0xaa, 0xf9, 0xb9, - 0xa1, 0xdf, 0x49, 0xb3, 0x54, 0x7f, 0x48, 0x95, 0xd1, 0xd4, 0x0e, 0x45, 0x9c, 0xd4, 0xa1, 0xf8, - 0x9b, 0x55, 0x2a, 0x25, 0xb1, 0x57, 0xc6, 0xa2, 0x95, 0x4a, 0x28, 0x56, 0xa9, 0x9c, 0xee, 0xfe, - 0xa6, 0x9c, 0x29, 0x5d, 0x39, 0x15, 0xed, 0xa0, 0x10, 0xc3, 0x3a, 0x48, 0xca, 0xa8, 0x5e, 0xc6, - 0x2c, 0xcc, 0x0a, 0x41, 0xf2, 0xc1, 0xa0, 0x85, 0x93, 0x8b, 0x33, 0x3d, 0x1a, 0xe6, 0x67, 0x56, - 0x79, 0x7e, 0x6f, 0xe5, 0x34, 0x52, 0x0c, 0xf9, 0x14, 0x0c, 0x36, 0xd3, 0xa3, 0xf1, 0xdc, 0xdf, - 0x2f, 0x4a, 0x39, 0x10, 0x95, 0x33, 0xd1, 0x29, 0x22, 0x40, 0xb0, 0x29, 0x22, 0xcc, 0x94, 0x38, - 0x9d, 0xcc, 0xf4, 0xa7, 0x9c, 0x8d, 0x2e, 0x35, 0x71, 0xfc, 0x4c, 0x8f, 0x96, 0xcc, 0x0e, 0xf8, - 0x6a, 0x24, 0xf9, 0x9d, 0x72, 0x2e, 0x16, 0xae, 0x2c, 0x44, 0x31, 0x71, 0xc9, 0x69, 0xf2, 0x16, - 0xe0, 0x34, 0xcf, 0x9d, 0x2b, 0x02, 0x8e, 0x89, 0xc9, 0xea, 0x7c, 0x74, 0x9b, 0x95, 0x42, 0x32, - 0xd3, 0xa3, 0xa5, 0x95, 0x24, 0x93, 0x89, 0x14, 0x74, 0x8a, 0x12, 0xf5, 0xe4, 0x89, 0xa1, 0x67, - 0x7a, 0xb4, 0x44, 0xd2, 0xba, 0x9b, 0x72, 0xee, 0x37, 0xe5, 0x42, 0xb4, 0x13, 0x43, 0x0c, 0xeb, - 0x44, 0x29, 0x47, 0xdc, 0x4d, 0x39, 0x1f, 0x98, 0x72, 0x31, 0x59, 0x2a, 0x9c, 0x39, 0xa5, 0xbc, - 0x61, 0x5a, 0x7a, 0x8a, 0x23, 0xe5, 0x09, 0x91, 0xe8, 0x58, 0x94, 0x4f, 0xa3, 0x99, 0xe9, 0xd1, - 0xd2, 0xd3, 0x23, 0x69, 0xe9, 0xb9, 0x81, 0x94, 0x4b, 0xdd, 0x78, 0x06, 0xad, 0x4b, 0xcf, 0x2b, - 0xa4, 0x77, 0xc9, 0xd4, 0xa2, 0x5c, 0x8e, 0x6e, 0xc8, 0x32, 0x09, 0x67, 0x7a, 0xb4, 0x2e, 0xf9, - 0x5e, 0xee, 0x66, 0xa4, 0x4d, 0x51, 0x9e, 0x8c, 0xe6, 0x39, 0x4f, 0x25, 0x9a, 0xe9, 0xd1, 0x32, - 0x92, 0xae, 0xdc, 0xcd, 0xc8, 0xaa, 0xa1, 0x94, 0xbb, 0xb2, 0x0d, 0xe4, 0x91, 0x91, 0x93, 0x63, - 0x21, 0x35, 0x21, 0x85, 0xf2, 0x54, 0x54, 0x75, 0x53, 0x48, 0x98, 0xea, 0xa6, 0xa5, 0xb2, 0x58, - 0x48, 0xcd, 0xa0, 0xa0, 0x3c, 0xdd, 0x85, 0x61, 0xd0, 0xc6, 0xd4, 0xdc, 0x0b, 0x0b, 0xa9, 0x29, - 0x0c, 0x14, 0x35, 0xca, 0x30, 0x85, 0x84, 0x31, 0x4c, 0x4b, 0x7e, 0xb0, 0x90, 0x1a, 0xe9, 0x5e, - 0x79, 0xa6, 0x0b, 0xc3, 0xb0, 0x85, 0x69, 0x31, 0xf2, 0x5f, 0x8d, 0x84, 0x9a, 0x57, 0x3e, 0x16, - 0x9d, 0x37, 0x24, 0x14, 0x9b, 0x37, 0xe4, 0xa0, 0xf4, 0x93, 0x89, 0x38, 0xb8, 0xca, 0xb3, 0xd1, - 0x61, 0x1e, 0x43, 0xb3, 0x61, 0x1e, 0x8f, 0x9c, 0x3b, 0x99, 0x88, 0x07, 0xaa, 0x5c, 0xc9, 0x62, - 0x82, 0xe8, 0x28, 0x13, 0x1e, 0x41, 0xb4, 0x96, 0x12, 0x90, 0x52, 0xf9, 0x78, 0xd4, 0x0b, 0x3d, - 0x41, 0x30, 0xd3, 0xa3, 0xa5, 0x84, 0xb1, 0xd4, 0xd2, 0xa3, 0x2f, 0x29, 0x57, 0xa3, 0xc3, 0x36, - 0x8d, 0x86, 0x0d, 0xdb, 0xd4, 0xc8, 0x4d, 0xb3, 0x69, 0x4f, 0x65, 0x94, 0x6b, 0x51, 0xc3, 0x2c, - 0x49, 0xc1, 0x0c, 0xb3, 0x94, 0x27, 0x36, 0x5a, 0x7a, 0x44, 0x20, 0xe5, 0xb9, 0xae, 0x2d, 0x44, - 0x9a, 0x94, 0x16, 0xf2, 0x00, 0x39, 0xa1, 0xed, 0x74, 0xb7, 0xdd, 0xb2, 0x75, 0x43, 0xf9, 0x44, - 0xaa, 0xed, 0xc4, 0x91, 0x92, 0xed, 0xc4, 0x01, 0x6c, 0x95, 0x97, 0x5f, 0x64, 0x28, 0xcf, 0x47, - 0x57, 0x79, 0x19, 0xc7, 0x56, 0xf9, 0xc8, 0xeb, 0x8d, 0xc9, 0xc4, 0xeb, 0x05, 0xe5, 0x85, 0xa8, - 0x02, 0xc4, 0xd0, 0x4c, 0x01, 0xe2, 0xef, 0x1d, 0xbe, 0x98, 0xed, 0xef, 0xaf, 0x8c, 0x23, 0xb7, - 0xa7, 0x7c, 0x6e, 0x59, 0x74, 0x33, 0x3d, 0x5a, 0xf6, 0x9b, 0x81, 0x5a, 0x8a, 0xfb, 0xbe, 0x72, - 0x3d, 0xaa, 0x60, 0x09, 0x02, 0xa6, 0x60, 0x49, 0xa7, 0xff, 0x5a, 0x8a, 0xff, 0xbd, 0xf2, 0xc9, - 0x4c, 0x56, 0xc1, 0x37, 0xa7, 0x78, 0xed, 0xdf, 0x94, 0x1d, 0xe8, 0x95, 0x17, 0xa3, 0x8b, 0x5d, - 0x88, 0x61, 0x8b, 0x9d, 0xe4, 0x68, 0x7f, 0x53, 0x76, 0x1d, 0x57, 0x6e, 0x24, 0x4b, 0x85, 0x4b, - 0xa4, 0xe4, 0x62, 0xae, 0xa5, 0x7b, 0x5c, 0x2b, 0x2f, 0x45, 0xb5, 0x2e, 0x8d, 0x86, 0x69, 0x5d, - 0xaa, 0xb7, 0xf6, 0x74, 0xd2, 0x71, 0x5a, 0xb9, 0x19, 0xdf, 0x64, 0x47, 0xf1, 0xcc, 0xf2, 0x49, - 0x38, 0x5b, 0x7f, 0x26, 0x1e, 0x1a, 0x50, 0x79, 0x39, 0x76, 0x49, 0x1d, 0xc1, 0x32, 0xfb, 0x36, - 0x16, 0x4a, 0xf0, 0x33, 0xf1, 0x68, 0x7a, 0xca, 0x2b, 0xe9, 0x1c, 0x02, 0x5d, 0x89, 0x47, 0xdf, - 0xfb, 0x4c, 0x3c, 0x00, 0x9d, 0xf2, 0x6a, 0x3a, 0x87, 0x40, 0xba, 0xf1, 0x80, 0x75, 0x2f, 0x4a, - 0x21, 0xf1, 0x95, 0x4f, 0x45, 0x4d, 0xc7, 0x00, 0xc1, 0x4c, 0xc7, 0x30, 0x70, 0xfe, 0x8b, 0x52, - 0x28, 0x79, 0xe5, 0xb5, 0x44, 0x91, 0xa0, 0xb1, 0x52, 0xc0, 0xf9, 0x17, 0xa5, 0x10, 0xec, 0xca, - 0xeb, 0x89, 0x22, 0x41, 0xeb, 0xa4, 0x40, 0xed, 0x46, 0xb7, 0xd7, 0xb6, 0xca, 0x1b, 0xd1, 0xa3, - 0xeb, 0x6c, 0xca, 0x99, 0x1e, 0xad, 0xdb, 0xab, 0xdd, 0x2f, 0x66, 0xbb, 0xa1, 0x2b, 0x6f, 0x46, - 0x87, 0x70, 0x16, 0x1d, 0x1b, 0xc2, 0x99, 0xae, 0xec, 0x6f, 0xc5, 0x22, 0x6f, 0x28, 0x6f, 0x45, - 0xa7, 0xb8, 0x08, 0x92, 0x4d, 0x71, 0xf1, 0x38, 0x1d, 0x91, 0x90, 0x12, 0xca, 0xa7, 0xa3, 0x53, - 0x9c, 0x8c, 0x63, 0x53, 0x5c, 0x24, 0xfc, 0xc4, 0x64, 0x22, 0xd2, 0x81, 0xf2, 0x76, 0x74, 0x8a, - 0x8b, 0xa1, 0xd9, 0x14, 0x17, 0x8f, 0x8d, 0xf0, 0x56, 0xec, 0xc1, 0xbf, 0xf2, 0x99, 0xf4, 0xf6, - 0x23, 0x52, 0x6e, 0x3f, 0x0f, 0x0f, 0xa0, 0xa5, 0xbf, 0x5c, 0x57, 0x2a, 0xd1, 0xf1, 0x9b, 0x46, - 0xc3, 0xc6, 0x6f, 0xea, 0xab, 0xf7, 0xf8, 0xc6, 0x41, 0x68, 0xd5, 0x44, 0x97, 0x8d, 0x43, 0x68, - 0x8a, 0xa4, 0x80, 0x23, 0x7b, 0x64, 0xbe, 0x11, 0x9a, 0xcc, 0xd8, 0x23, 0xfb, 0xdb, 0xa0, 0x18, - 0x3d, 0x9b, 0x5d, 0x13, 0x5e, 0xd1, 0x4a, 0x35, 0x3a, 0xbb, 0x26, 0x08, 0xd8, 0xec, 0x9a, 0xf4, - 0xa5, 0x9e, 0x86, 0x31, 0xa1, 0x45, 0xdc, 0xd9, 0xdb, 0xb4, 0x56, 0x94, 0xa9, 0xd8, 0xeb, 0xd0, - 0x18, 0x9e, 0xcd, 0x4e, 0x71, 0x18, 0xae, 0xd7, 0x1c, 0x36, 0xd9, 0x32, 0xdb, 0xcb, 0xb6, 0xee, - 0x18, 0x75, 0x6a, 0x19, 0xca, 0x74, 0x6c, 0xbd, 0x4e, 0xa1, 0xc1, 0xf5, 0x3a, 0x05, 0x8e, 0x01, - 0xed, 0x62, 0x70, 0x8d, 0x36, 0xa9, 0xf9, 0x90, 0x2a, 0xb7, 0x90, 0x6d, 0x39, 0x8b, 0xad, 0x20, - 0x9b, 0xe9, 0xd1, 0xb2, 0x38, 0x30, 0x5b, 0x7d, 0x6e, 0xb3, 0xfe, 0xce, 0x6c, 0x10, 0x2c, 0x61, - 0xd1, 0xa1, 0x6d, 0xdd, 0xa1, 0xca, 0x4c, 0xd4, 0x56, 0x4f, 0x25, 0x62, 0xb6, 0x7a, 0x2a, 0x22, - 0xc9, 0xd6, 0x1f, 0x0b, 0xb5, 0x6e, 0x6c, 0xc3, 0x11, 0x91, 0x5e, 0x9a, 0xcd, 0x4e, 0x51, 0x04, - 0x13, 0xd0, 0xac, 0x6d, 0xad, 0xe0, 0x49, 0xc5, 0xed, 0xe8, 0xec, 0x94, 0x4d, 0xc9, 0x66, 0xa7, - 0x6c, 0x2c, 0x53, 0xf5, 0x28, 0x96, 0x8f, 0xc1, 0x3b, 0x51, 0x55, 0x4f, 0x21, 0x61, 0xaa, 0x9e, - 0x02, 0x4e, 0x32, 0xd4, 0xa8, 0x4b, 0x3d, 0x65, 0xb6, 0x1b, 0x43, 0x24, 0x49, 0x32, 0x44, 0x70, - 0x92, 0xe1, 0x34, 0xf5, 0x9a, 0xab, 0xca, 0x5c, 0x37, 0x86, 0x48, 0x92, 0x64, 0x88, 0x60, 0xb6, - 0xd9, 0x8c, 0x82, 0x27, 0x3a, 0xad, 0x35, 0xbf, 0xcf, 0xe6, 0xa3, 0x9b, 0xcd, 0x4c, 0x42, 0xb6, - 0xd9, 0xcc, 0x44, 0x92, 0x1f, 0xdb, 0xb5, 0xd7, 0xbe, 0xb2, 0x80, 0x15, 0x8e, 0x87, 0x76, 0xc1, - 0x6e, 0x4a, 0xcd, 0xf4, 0x68, 0xbb, 0x7d, 0x15, 0xf0, 0x89, 0xc0, 0xc5, 0x55, 0x59, 0xc4, 0xaa, - 0x46, 0x83, 0xb3, 0x0a, 0x0e, 0x9e, 0xe9, 0xd1, 0x02, 0x27, 0xd8, 0x57, 0x61, 0x10, 0x3f, 0xaa, - 0x66, 0x99, 0x5e, 0x75, 0x42, 0x79, 0x27, 0xba, 0x65, 0x92, 0x50, 0x6c, 0xcb, 0x24, 0xfd, 0x64, - 0x93, 0x38, 0xfe, 0xe4, 0x53, 0x4c, 0x75, 0x42, 0xd1, 0xa2, 0x93, 0x78, 0x04, 0xc9, 0x26, 0xf1, - 0x08, 0x20, 0xa8, 0xb7, 0xea, 0xd8, 0xed, 0xea, 0x84, 0x52, 0x4f, 0xa9, 0x97, 0xa3, 0x82, 0x7a, - 0xf9, 0xcf, 0xa0, 0xde, 0xfa, 0x6a, 0xc7, 0xab, 0xb2, 0x6f, 0x5c, 0x4a, 0xa9, 0xd7, 0x47, 0x06, - 0xf5, 0xfa, 0x00, 0x36, 0x15, 0x22, 0x60, 0xd1, 0xb1, 0xd9, 0xa4, 0x7d, 0xc7, 0x6c, 0xb5, 0x94, - 0xbb, 0xd1, 0xa9, 0x30, 0x8e, 0x67, 0x53, 0x61, 0x1c, 0xc6, 0x4c, 0x4f, 0xde, 0x2a, 0xba, 0xdc, - 0x59, 0x51, 0xee, 0x45, 0x4d, 0xcf, 0x10, 0xc3, 0x4c, 0xcf, 0xf0, 0x17, 0xee, 0x2e, 0xd8, 0x2f, - 0x8d, 0x3e, 0x70, 0xa8, 0xbb, 0xaa, 0xdc, 0x8f, 0xed, 0x2e, 0x24, 0x1c, 0xee, 0x2e, 0xa4, 0xdf, - 0x64, 0x05, 0x9e, 0x88, 0x2c, 0x34, 0xfe, 0xa5, 0x4d, 0x9d, 0xea, 0x4e, 0x73, 0x55, 0xf9, 0x2c, - 0xb2, 0x7a, 0x26, 0x75, 0xa9, 0x8a, 0x92, 0xce, 0xf4, 0x68, 0xdd, 0x38, 0xe1, 0xb6, 0xfc, 0x9d, - 0x59, 0x1e, 0xb7, 0x56, 0x5b, 0x9c, 0xf4, 0x37, 0xa1, 0xef, 0xc6, 0xb6, 0xe5, 0x49, 0x12, 0xdc, - 0x96, 0x27, 0xc1, 0xa4, 0x0d, 0x4f, 0xc6, 0xb6, 0x6a, 0x73, 0x7a, 0x8b, 0xed, 0x4b, 0xa8, 0xb1, - 0xa8, 0x37, 0xd7, 0xa8, 0xa7, 0x7c, 0x0e, 0x79, 0x5f, 0xc9, 0xd8, 0xf0, 0xc5, 0xa8, 0x67, 0x7a, - 0xb4, 0x1d, 0xf8, 0x11, 0x15, 0x8a, 0xf5, 0xe9, 0xa5, 0x45, 0xe5, 0xf3, 0xd1, 0xf3, 0x4d, 0x06, - 0x9b, 0xe9, 0xd1, 0x10, 0xc7, 0xac, 0xb4, 0xbb, 0xed, 0x15, 0x47, 0x37, 0x28, 0x37, 0xb4, 0xd0, - 0x76, 0x13, 0x06, 0xe8, 0x0f, 0x44, 0xad, 0xb4, 0x2c, 0x3a, 0x66, 0xa5, 0x65, 0xe1, 0x98, 0xa2, - 0x46, 0x52, 0xb4, 0x28, 0x5f, 0x88, 0x2a, 0x6a, 0x04, 0xc9, 0x14, 0x35, 0x9a, 0xd0, 0xe5, 0xb3, - 0x70, 0x2e, 0xd8, 0xcf, 0x8b, 0xf5, 0x97, 0x77, 0x9a, 0xf2, 0x45, 0xe4, 0xf3, 0x64, 0xe2, 0x32, - 0x20, 0x42, 0x35, 0xd3, 0xa3, 0x65, 0x94, 0x67, 0x2b, 0x6e, 0x22, 0x85, 0x99, 0x30, 0x2f, 0x7e, - 0x30, 0xba, 0xe2, 0x66, 0x90, 0xb1, 0x15, 0x37, 0x03, 0x95, 0xca, 0x5c, 0x08, 0x55, 0xdf, 0x81, - 0x79, 0x20, 0xd3, 0x2c, 0x0e, 0xa9, 0xcc, 0x85, 0xa5, 0xb6, 0xbc, 0x03, 0xf3, 0xc0, 0x5a, 0xcb, - 0xe2, 0x40, 0xae, 0x42, 0xa9, 0x5e, 0x9f, 0xd3, 0x3a, 0x96, 0xd2, 0x8c, 0xf9, 0xf6, 0x22, 0x74, - 0xa6, 0x47, 0x13, 0x78, 0x66, 0x06, 0x4d, 0xb5, 0x74, 0xd7, 0x33, 0x9b, 0x2e, 0x8e, 0x18, 0x7f, - 0x84, 0x18, 0x51, 0x33, 0x28, 0x8d, 0x86, 0x99, 0x41, 0x69, 0x70, 0x66, 0x2f, 0x4e, 0xea, 0xae, - 0xab, 0x5b, 0x86, 0xa3, 0x4f, 0xe0, 0x32, 0x41, 0x63, 0x6f, 0xc7, 0x22, 0x58, 0x66, 0x2f, 0x46, - 0x21, 0x78, 0xf8, 0xee, 0x43, 0x7c, 0x33, 0xe7, 0x41, 0xec, 0xf0, 0x3d, 0x86, 0xc7, 0xc3, 0xf7, - 0x18, 0x0c, 0xed, 0x4e, 0x1f, 0xa6, 0xd1, 0x15, 0x93, 0x89, 0x48, 0x59, 0x89, 0xd9, 0x9d, 0x71, - 0x02, 0xb4, 0x3b, 0xe3, 0xc0, 0x48, 0x93, 0xfc, 0xe5, 0x76, 0x35, 0xa3, 0x49, 0xe1, 0x2a, 0x9b, - 0x28, 0xc3, 0xd6, 0xef, 0x70, 0x70, 0x54, 0x37, 0x2d, 0x7d, 0xdd, 0xae, 0x4e, 0xf8, 0x52, 0x37, - 0xa3, 0xeb, 0x77, 0x26, 0x21, 0x5b, 0xbf, 0x33, 0x91, 0x6c, 0x76, 0xf5, 0x37, 0x5a, 0xab, 0xba, - 0x43, 0x8d, 0xaa, 0xe9, 0xe0, 0xc9, 0xe2, 0x26, 0xdf, 0x1a, 0xbe, 0x17, 0x9d, 0x5d, 0xbb, 0x90, - 0xb2, 0xd9, 0xb5, 0x0b, 0x9a, 0x19, 0x79, 0xe9, 0x68, 0x8d, 0xea, 0x86, 0xb2, 0x16, 0x35, 0xf2, - 0xb2, 0x29, 0x99, 0x91, 0x97, 0x8d, 0xcd, 0xfe, 0x9c, 0xfb, 0x8e, 0xe9, 0x51, 0xa5, 0xb5, 0x9b, - 0xcf, 0x41, 0xd2, 0xec, 0xcf, 0x41, 0x34, 0xdb, 0x10, 0xc6, 0x3b, 0x64, 0x3d, 0xba, 0x21, 0x4c, - 0x76, 0x43, 0xbc, 0x04, 0xb3, 0x58, 0xc4, 0x13, 0x42, 0xc5, 0x8a, 0x5a, 0x2c, 0x02, 0xcc, 0x2c, - 0x96, 0xf0, 0x91, 0x61, 0xe4, 0xe1, 0x98, 0x62, 0x47, 0xd7, 0x50, 0x19, 0xc7, 0xd6, 0xd0, 0xc8, - 0x23, 0xb3, 0x57, 0x23, 0xaf, 0x22, 0x94, 0x76, 0xd4, 0xea, 0x90, 0x50, 0xcc, 0xea, 0x90, 0xdf, - 0x4f, 0x4c, 0xc2, 0x28, 0xde, 0x82, 0x6b, 0x9d, 0xe0, 0x1e, 0xe7, 0x87, 0xa2, 0x9f, 0x19, 0x43, - 0xb3, 0xcf, 0x8c, 0x81, 0x22, 0x4c, 0xc4, 0xb4, 0xe5, 0x64, 0x30, 0x09, 0xcf, 0x07, 0x63, 0x20, - 0x32, 0x0b, 0xa4, 0x5e, 0x99, 0x9b, 0xad, 0x19, 0x8b, 0xf2, 0x15, 0x99, 0x1b, 0x3d, 0x81, 0x4d, - 0x52, 0xcc, 0xf4, 0x68, 0x29, 0xe5, 0xc8, 0x7b, 0x70, 0x49, 0x40, 0xc5, 0xfb, 0xf0, 0x45, 0xc7, - 0x7e, 0x68, 0x1a, 0xc1, 0x82, 0xe0, 0x45, 0xbd, 0xee, 0xba, 0xd1, 0xce, 0xf4, 0x68, 0x5d, 0x79, - 0x65, 0xd7, 0x25, 0xd6, 0x87, 0xce, 0x6e, 0xea, 0x0a, 0x16, 0x89, 0xae, 0xbc, 0xb2, 0xeb, 0x12, - 0x72, 0x7f, 0xb8, 0x9b, 0xba, 0x82, 0x4e, 0xe8, 0xca, 0x8b, 0xb8, 0x50, 0xee, 0x86, 0xaf, 0xb4, - 0x5a, 0xca, 0x06, 0x56, 0xf7, 0xf1, 0xdd, 0x54, 0x57, 0x41, 0x83, 0x73, 0x27, 0x8e, 0x6c, 0x96, - 0x5e, 0x68, 0x53, 0xab, 0x1e, 0x59, 0x80, 0x1e, 0x45, 0x67, 0xe9, 0x04, 0x01, 0x9b, 0xa5, 0x13, - 0x40, 0x36, 0xa0, 0xe4, 0xc7, 0x35, 0xca, 0x66, 0x74, 0x40, 0xc9, 0x38, 0x36, 0xa0, 0x22, 0x0f, - 0x71, 0x16, 0xe0, 0xf4, 0xc2, 0x9a, 0xa7, 0xfb, 0x16, 0xa4, 0x2b, 0xba, 0xf2, 0xfd, 0xd8, 0x25, - 0x53, 0x92, 0x04, 0x2f, 0x99, 0x92, 0x60, 0x36, 0x46, 0x18, 0xb8, 0xbe, 0x69, 0x35, 0xa7, 0x75, - 0xb3, 0xd5, 0x71, 0xa8, 0xf2, 0x67, 0xa2, 0x63, 0x24, 0x86, 0x66, 0x63, 0x24, 0x06, 0x62, 0x0b, - 0x34, 0x03, 0x55, 0x5c, 0xd7, 0x5c, 0xb1, 0xc4, 0xbe, 0xb2, 0xd3, 0xf2, 0x94, 0x7f, 0x2b, 0xba, - 0x40, 0xa7, 0xd1, 0xb0, 0x05, 0x3a, 0x0d, 0x8e, 0xa7, 0x4e, 0xac, 0x17, 0xd8, 0xe2, 0x21, 0xdf, - 0x55, 0xfe, 0xdb, 0xb1, 0x53, 0xa7, 0x14, 0x1a, 0x3c, 0x75, 0x4a, 0x81, 0xb3, 0xf5, 0x91, 0xdb, - 0x64, 0xb3, 0x66, 0x70, 0x57, 0xfd, 0xef, 0x44, 0xd7, 0xc7, 0x38, 0x9e, 0xad, 0x8f, 0x71, 0x58, - 0x94, 0x8f, 0xe8, 0x82, 0x7f, 0x37, 0x8b, 0x4f, 0x20, 0xff, 0x44, 0x19, 0x72, 0x4b, 0xe6, 0x23, - 0x46, 0xca, 0x0f, 0xe7, 0xb2, 0x18, 0x05, 0xc3, 0x23, 0x51, 0x28, 0xca, 0x48, 0xa3, 0x0f, 0x4d, - 0xba, 0xa1, 0x7c, 0x29, 0x93, 0x11, 0x27, 0x88, 0x32, 0xe2, 0x30, 0xf2, 0x2e, 0x9c, 0x0b, 0x61, - 0x73, 0x74, 0x7d, 0x39, 0x98, 0x99, 0xfe, 0x6c, 0x2e, 0x6a, 0x06, 0xa7, 0x93, 0x31, 0x33, 0x38, - 0x1d, 0x93, 0xc6, 0x5a, 0x88, 0xee, 0xdf, 0xdb, 0x81, 0x75, 0x20, 0xc1, 0x0c, 0x06, 0x69, 0xac, - 0x85, 0x34, 0x7f, 0x64, 0x07, 0xd6, 0x81, 0x4c, 0x33, 0x18, 0x90, 0x1f, 0xcf, 0xc1, 0x95, 0x74, - 0x54, 0xa5, 0xd5, 0x9a, 0xb6, 0x9d, 0x10, 0xa7, 0xfc, 0xb9, 0x5c, 0xf4, 0xa0, 0x61, 0x77, 0xc5, - 0x66, 0x7a, 0xb4, 0x5d, 0x56, 0x40, 0x3e, 0x0d, 0xc3, 0x95, 0x8e, 0x61, 0x7a, 0x78, 0xf1, 0xc6, - 0x0c, 0xe7, 0x1f, 0xcd, 0xc5, 0xb6, 0x38, 0x32, 0x16, 0xb7, 0x38, 0x32, 0x80, 0xdc, 0x86, 0x53, - 0x75, 0xda, 0xec, 0x38, 0xa6, 0xb7, 0xa9, 0xd1, 0xb6, 0xed, 0x78, 0x8c, 0xc7, 0x9f, 0xcf, 0x45, - 0x27, 0xb1, 0x04, 0x05, 0x9b, 0xc4, 0x12, 0x40, 0x72, 0x2f, 0x71, 0x2b, 0x2f, 0x3a, 0xf3, 0xc7, - 0x72, 0x5d, 0xaf, 0xe5, 0x83, 0xbe, 0x4c, 0x2f, 0x4e, 0x16, 0x63, 0xb7, 0xe8, 0x82, 0xeb, 0x8f, - 0xe7, 0xba, 0x5c, 0xa3, 0x4b, 0x33, 0x5c, 0x12, 0xcc, 0x38, 0xa6, 0x24, 0xbd, 0x57, 0xfe, 0x42, - 0xae, 0xcb, 0xb5, 0x77, 0xc8, 0x31, 0x2d, 0x5f, 0xfe, 0xcb, 0xdc, 0x53, 0x44, 0x30, 0xfa, 0x89, - 0x5c, 0xd2, 0x55, 0x24, 0x28, 0x2f, 0x11, 0xb2, 0x62, 0x77, 0xdd, 0x40, 0xe9, 0xbf, 0x9c, 0x4b, - 0xfa, 0xe6, 0x85, 0xc5, 0xc2, 0x5f, 0x84, 0xc2, 0xc5, 0xa9, 0x47, 0x1e, 0x75, 0x2c, 0xbd, 0x85, - 0xdd, 0x59, 0xf7, 0x6c, 0x47, 0x5f, 0xa1, 0x53, 0x96, 0xbe, 0xdc, 0xa2, 0xca, 0x4f, 0xe6, 0xa2, - 0x16, 0x6c, 0x36, 0x29, 0xb3, 0x60, 0xb3, 0xb1, 0x64, 0x15, 0x9e, 0x48, 0xc3, 0x56, 0x4d, 0x17, - 0xeb, 0xf9, 0x4a, 0x2e, 0x6a, 0xc2, 0x76, 0xa1, 0x65, 0x26, 0x6c, 0x17, 0x34, 0xb9, 0x01, 0x03, - 0x13, 0xb6, 0x3f, 0xfd, 0xfe, 0xc5, 0x98, 0x33, 0x64, 0x80, 0x99, 0xe9, 0xd1, 0x42, 0x32, 0x51, - 0x46, 0x0c, 0xea, 0xaf, 0x26, 0xcb, 0x84, 0x97, 0x4f, 0xc1, 0x0f, 0x51, 0x46, 0x88, 0xfb, 0xdf, - 0x4f, 0x96, 0x09, 0xef, 0xb8, 0x82, 0x1f, 0x6c, 0x26, 0xe1, 0x35, 0xce, 0x4d, 0x57, 0x98, 0xdd, - 0x36, 0xb9, 0xaa, 0xb7, 0x5a, 0xd4, 0x5a, 0xa1, 0xca, 0xd7, 0x62, 0x33, 0x49, 0x3a, 0x19, 0x9b, - 0x49, 0xd2, 0x31, 0xe4, 0x07, 0xe0, 0xfc, 0x3d, 0xbd, 0x65, 0x1a, 0x21, 0xce, 0x4f, 0x81, 0xae, - 0xfc, 0x54, 0x2e, 0xba, 0x9b, 0xce, 0xa0, 0x63, 0xbb, 0xe9, 0x0c, 0x14, 0x99, 0x03, 0x82, 0xcb, - 0x68, 0x30, 0x5b, 0xb0, 0xf5, 0x59, 0xf9, 0x0f, 0x72, 0x51, 0x3b, 0x35, 0x49, 0xc2, 0xec, 0xd4, - 0x24, 0x94, 0x34, 0xb2, 0x13, 0x99, 0x28, 0x3f, 0x9d, 0x8b, 0x9e, 0xd6, 0x64, 0x11, 0xce, 0xf4, - 0x68, 0xd9, 0xd9, 0x50, 0x6e, 0xc1, 0x58, 0x7d, 0xb1, 0x36, 0x3d, 0x3d, 0x55, 0xbf, 0x57, 0xab, - 0xe2, 0x2b, 0x0a, 0x43, 0xf9, 0x99, 0xd8, 0x8a, 0x15, 0x27, 0x60, 0x2b, 0x56, 0x1c, 0x46, 0xde, - 0x80, 0x21, 0xd6, 0x7e, 0x36, 0x60, 0xf0, 0x93, 0xbf, 0x9e, 0x8b, 0x9a, 0x53, 0x32, 0x92, 0x99, - 0x53, 0xf2, 0x6f, 0x52, 0x87, 0x33, 0x4c, 0x8a, 0x8b, 0x0e, 0x7d, 0x40, 0x1d, 0x6a, 0x35, 0xfd, - 0x31, 0xfd, 0xb3, 0xb9, 0xa8, 0x95, 0x91, 0x46, 0xc4, 0xac, 0x8c, 0x34, 0x38, 0x59, 0x83, 0x4b, - 0xf1, 0x93, 0x20, 0xf9, 0x91, 0xac, 0xf2, 0x97, 0x72, 0x31, 0x63, 0xb8, 0x0b, 0x31, 0x1a, 0xc3, - 0x5d, 0xf0, 0xc4, 0x82, 0xcb, 0xe2, 0x58, 0x45, 0x38, 0x5c, 0xc6, 0x6b, 0xfb, 0x39, 0x5e, 0xdb, - 0xb3, 0xa1, 0x43, 0x60, 0x17, 0xea, 0x99, 0x1e, 0xad, 0x3b, 0x3b, 0xa6, 0x67, 0xc9, 0x74, 0x1d, - 0xca, 0x5f, 0xce, 0xa5, 0x7b, 0xa4, 0x44, 0xdc, 0x94, 0xd3, 0xf2, 0x7c, 0xbc, 0x9b, 0x95, 0x6c, - 0x42, 0xf9, 0x2b, 0xb1, 0xf1, 0x96, 0x4e, 0xc6, 0xc6, 0x5b, 0x46, 0xb6, 0x8a, 0xdb, 0x70, 0x8a, - 0x2b, 0xf5, 0xa2, 0x8e, 0xc3, 0xd0, 0x5a, 0xa1, 0x86, 0xf2, 0x1f, 0xc6, 0x56, 0xbb, 0x04, 0x05, - 0xba, 0xf6, 0xc4, 0x81, 0x6c, 0xea, 0xae, 0xb7, 0x75, 0xcb, 0xc2, 0x63, 0x56, 0xe5, 0x3f, 0x8a, - 0x4d, 0xdd, 0x21, 0x0a, 0x1d, 0x77, 0x83, 0x5f, 0x4c, 0x13, 0xba, 0x25, 0x6a, 0x52, 0xfe, 0xe3, - 0x98, 0x26, 0x74, 0x23, 0x66, 0x9a, 0xd0, 0x35, 0xeb, 0xd3, 0xbd, 0x8c, 0x07, 0xeb, 0xca, 0x37, - 0x62, 0x2b, 0x72, 0x2a, 0x15, 0x5b, 0x91, 0xd3, 0xdf, 0xbb, 0xdf, 0xcb, 0x78, 0xec, 0xad, 0xfc, - 0x7c, 0x77, 0xbe, 0xe1, 0x4a, 0x9f, 0xfe, 0x56, 0xfc, 0x5e, 0xc6, 0x43, 0x69, 0xe5, 0xaf, 0x76, - 0xe7, 0x1b, 0x3a, 0xf6, 0xa5, 0xbf, 0xb3, 0x6e, 0x64, 0x3f, 0x32, 0x56, 0xfe, 0x5a, 0x7c, 0xea, - 0xca, 0x20, 0xc4, 0xa9, 0x2b, 0xeb, 0xa5, 0xf2, 0x32, 0x5c, 0xe0, 0x1a, 0x72, 0xcb, 0xd1, 0xdb, - 0xab, 0x75, 0xea, 0x79, 0xa6, 0xb5, 0xe2, 0xef, 0xc4, 0xfe, 0x7a, 0x2e, 0x76, 0x3c, 0x96, 0x45, - 0x89, 0xc7, 0x63, 0x59, 0x48, 0xa6, 0xbc, 0x89, 0xe7, 0xc4, 0xca, 0xdf, 0x88, 0x29, 0x6f, 0x82, - 0x82, 0x29, 0x6f, 0xf2, 0x15, 0xf2, 0xed, 0x94, 0x57, 0xb3, 0xca, 0x7f, 0x92, 0xcd, 0x2b, 0x68, - 0x5f, 0xca, 0x63, 0xdb, 0xdb, 0x29, 0x8f, 0x43, 0x95, 0xff, 0x34, 0x9b, 0x57, 0xe8, 0x83, 0x94, - 0x7c, 0x53, 0xfa, 0x2e, 0x9c, 0xe3, 0xb3, 0xf9, 0x34, 0x35, 0x68, 0xe4, 0x43, 0x7f, 0x21, 0x36, - 0xf6, 0xd3, 0xc9, 0xf0, 0xc8, 0x3d, 0x15, 0x93, 0xc6, 0x5a, 0xb4, 0xf5, 0x6f, 0xee, 0xc0, 0x3a, - 0xdc, 0x10, 0xa4, 0x63, 0xd8, 0x7a, 0x23, 0x3f, 0x7e, 0x53, 0x7e, 0x31, 0xb6, 0xde, 0xc8, 0x48, - 0x74, 0xe7, 0x90, 0x5f, 0xca, 0xbd, 0x11, 0x7d, 0xe8, 0xa5, 0xfc, 0xad, 0xd4, 0xc2, 0x41, 0x07, - 0x44, 0x5f, 0x85, 0xbd, 0x11, 0x7d, 0xd4, 0xa4, 0xfc, 0x52, 0x6a, 0xe1, 0xe0, 0x03, 0xa2, 0x2f, - 0xa0, 0xd8, 0x16, 0xa9, 0xe3, 0xd9, 0x9c, 0x55, 0x64, 0x7a, 0xf8, 0xdb, 0xf1, 0x2d, 0x52, 0x2a, - 0x19, 0x6e, 0x91, 0x52, 0x31, 0x69, 0xac, 0xc5, 0xe7, 0xfd, 0xf2, 0x0e, 0xac, 0xa5, 0x8d, 0x5d, - 0x2a, 0x26, 0x8d, 0xb5, 0xf8, 0xf8, 0x6f, 0xee, 0xc0, 0x5a, 0xda, 0xd8, 0xa5, 0x62, 0x98, 0x39, - 0x16, 0x62, 0xee, 0x51, 0xc7, 0x0d, 0xd5, 0xef, 0x3f, 0x8b, 0x99, 0x63, 0x19, 0x74, 0xcc, 0x1c, - 0xcb, 0x40, 0xa5, 0x72, 0x17, 0x42, 0xf9, 0x95, 0x9d, 0xb8, 0x87, 0xf7, 0x32, 0x19, 0xa8, 0x54, - 0xee, 0x42, 0x2e, 0x7f, 0x67, 0x27, 0xee, 0xe1, 0xc5, 0x4c, 0x06, 0x8a, 0x19, 0x45, 0x75, 0x4f, - 0xf7, 0xcc, 0xe6, 0x8c, 0xed, 0x7a, 0xd2, 0x22, 0xff, 0x9f, 0xc7, 0x8c, 0xa2, 0x34, 0x22, 0x66, - 0x14, 0xa5, 0xc1, 0x93, 0x4c, 0x85, 0x34, 0x7e, 0xb5, 0x2b, 0xd3, 0xd0, 0xd2, 0x4a, 0x83, 0x27, - 0x99, 0x0a, 0x21, 0xfc, 0x17, 0x5d, 0x99, 0x86, 0x9e, 0xf2, 0x69, 0x70, 0x66, 0x99, 0x4e, 0x3a, - 0xf6, 0x86, 0x75, 0x9b, 0x6e, 0xd0, 0x96, 0xf8, 0xf4, 0x5f, 0x8b, 0x59, 0xa6, 0x71, 0x02, 0xbc, - 0x45, 0x89, 0xc1, 0xa2, 0x8c, 0xc4, 0xe7, 0xfe, 0x7a, 0x26, 0xa3, 0xf0, 0x98, 0x28, 0x0e, 0x8b, - 0x32, 0x12, 0x9f, 0xf8, 0x1b, 0x99, 0x8c, 0xc2, 0x63, 0xa2, 0x38, 0x8c, 0x54, 0x60, 0x04, 0xdf, - 0x4a, 0xe8, 0xae, 0xef, 0xf9, 0xf9, 0xdb, 0xb9, 0xe8, 0xad, 0x57, 0x14, 0x3d, 0xd3, 0xa3, 0xc5, - 0x0a, 0xc8, 0x2c, 0xc4, 0x27, 0x7d, 0x3b, 0x83, 0x45, 0xe8, 0xef, 0x18, 0x85, 0xc8, 0x2c, 0xc4, - 0xc7, 0xfc, 0x97, 0x19, 0x2c, 0x42, 0x87, 0xc7, 0x28, 0x84, 0x7c, 0x0a, 0x06, 0xeb, 0xd3, 0x4b, - 0x8b, 0x7e, 0x32, 0xc1, 0xbf, 0x9b, 0x8b, 0xbd, 0x2a, 0x0a, 0x71, 0xf8, 0xaa, 0x28, 0xfc, 0x49, - 0x3e, 0x0d, 0xc3, 0x93, 0xb6, 0xe5, 0xe9, 0x4d, 0x7f, 0x03, 0xfa, 0x3b, 0xb1, 0x33, 0x94, 0x08, - 0x76, 0xa6, 0x47, 0x8b, 0x92, 0x4b, 0xe5, 0x45, 0xdb, 0x7f, 0x37, 0xbd, 0x7c, 0xd0, 0xf4, 0x28, - 0x39, 0x9b, 0xd1, 0xee, 0xdb, 0xce, 0x5a, 0xcb, 0xd6, 0x0d, 0x3f, 0x7e, 0xa5, 0x68, 0xc8, 0xdf, - 0x8b, 0xcd, 0x68, 0xe9, 0x64, 0x6c, 0x46, 0x4b, 0xc7, 0xa4, 0xb1, 0x16, 0x5d, 0xf4, 0x9d, 0x1d, - 0x58, 0x87, 0xf3, 0x70, 0x3a, 0x26, 0x8d, 0xb5, 0xf8, 0xfc, 0xbf, 0xbf, 0x03, 0xeb, 0x70, 0x1e, - 0x4e, 0xc7, 0x30, 0xd3, 0xfa, 0x96, 0xe9, 0xf9, 0x0f, 0xdb, 0xfe, 0x41, 0xcc, 0xb4, 0x0e, 0x51, - 0xcc, 0xb4, 0x0e, 0x7f, 0x4d, 0xf4, 0x41, 0x2f, 0x1e, 0x89, 0xdf, 0x2e, 0xf5, 0x7f, 0x2b, 0x37, - 0xf6, 0x9b, 0xb9, 0xdb, 0xa5, 0xfe, 0xdf, 0xcc, 0x8d, 0xfd, 0x16, 0xfb, 0xff, 0xb7, 0x72, 0x63, - 0xbf, 0x9d, 0xd3, 0x2e, 0x84, 0xd3, 0x5b, 0x65, 0x85, 0x5a, 0xde, 0x62, 0x4b, 0x17, 0x93, 0x73, - 0x2a, 0x8a, 0xff, 0x4c, 0x45, 0x89, 0x04, 0x6c, 0xdf, 0xc8, 0xc1, 0x50, 0xdd, 0x73, 0xa8, 0xbe, - 0x2e, 0xe2, 0x19, 0x5e, 0x84, 0x7e, 0xee, 0xc4, 0xee, 0x3f, 0xe7, 0xd7, 0x82, 0xdf, 0xe4, 0x0a, - 0x8c, 0xcc, 0xea, 0xae, 0x87, 0x4d, 0xac, 0x59, 0x06, 0x7d, 0x84, 0x0f, 0x38, 0x0b, 0x5a, 0x0c, - 0x4a, 0x66, 0x39, 0x1d, 0x2f, 0x87, 0x21, 0x6c, 0x0b, 0x3b, 0x86, 0xf1, 0xeb, 0xff, 0xee, 0x56, - 0xb9, 0x07, 0xa3, 0xf6, 0xc5, 0xca, 0xaa, 0xbf, 0x9f, 0x83, 0x84, 0x7b, 0xfd, 0xfe, 0xe3, 0x76, - 0x2c, 0xc0, 0x68, 0x2c, 0x6c, 0xb2, 0x78, 0x85, 0xba, 0xcb, 0xa8, 0xca, 0xf1, 0xd2, 0xe4, 0xe3, - 0xc1, 0xeb, 0xc7, 0xbb, 0xda, 0xac, 0x08, 0xd1, 0x88, 0xc9, 0x45, 0x3a, 0x4e, 0x4b, 0x93, 0x50, - 0x22, 0x04, 0xd7, 0xf7, 0xc7, 0xc2, 0x98, 0xb0, 0xe4, 0x8a, 0x08, 0x22, 0x92, 0x0b, 0x03, 0x3b, - 0x76, 0x5c, 0xea, 0xc8, 0x81, 0x1d, 0x31, 0x68, 0xc8, 0xa7, 0x61, 0xa8, 0xb6, 0xde, 0xa6, 0x8e, - 0x6b, 0x5b, 0xba, 0x67, 0x3b, 0x22, 0x64, 0x02, 0x06, 0x37, 0x30, 0x25, 0xb8, 0x1c, 0xdc, 0x40, - 0xa6, 0x27, 0xd7, 0xfc, 0xfc, 0x88, 0x05, 0x8c, 0xc6, 0x8b, 0x4f, 0x93, 0xe3, 0xe9, 0xf1, 0x39, - 0x05, 0x23, 0xbd, 0xeb, 0xea, 0xf8, 0x4e, 0x36, 0x20, 0xed, 0x30, 0x80, 0x4c, 0x8a, 0x14, 0xe4, - 0x79, 0x28, 0xe1, 0xbd, 0xa2, 0x8b, 0x79, 0x4f, 0x45, 0xb8, 0xc9, 0x16, 0x42, 0xe4, 0xc0, 0x16, - 0x9c, 0x86, 0xdc, 0x81, 0xb1, 0xd0, 0x69, 0xe2, 0x96, 0x63, 0x77, 0xda, 0x7e, 0xa6, 0xa3, 0xf2, - 0xf6, 0x56, 0xf9, 0x89, 0xb5, 0x00, 0xd7, 0x58, 0x41, 0xa4, 0xc4, 0x22, 0x51, 0x90, 0xcc, 0xc0, - 0x68, 0x08, 0x63, 0x22, 0xf2, 0x33, 0xac, 0x61, 0x76, 0x5b, 0x89, 0x17, 0x13, 0x67, 0x24, 0xbb, - 0x6d, 0xac, 0x18, 0xa9, 0x41, 0x9f, 0x1f, 0x6b, 0xb2, 0x7f, 0x47, 0x25, 0x3d, 0x2d, 0x62, 0x4d, - 0xf6, 0xc9, 0x51, 0x26, 0xfd, 0xf2, 0x64, 0x1a, 0x46, 0x34, 0xbb, 0xe3, 0xd1, 0x25, 0x5b, 0x9c, - 0x36, 0x88, 0x98, 0xa6, 0xd8, 0x26, 0x87, 0x61, 0x1a, 0x9e, 0xdd, 0x68, 0x72, 0x9c, 0xd4, 0xa6, - 0x58, 0x29, 0x32, 0x0f, 0xa7, 0x12, 0xee, 0x25, 0xf8, 0xac, 0x76, 0x80, 0x47, 0x0d, 0x94, 0x3e, - 0x2f, 0xc9, 0x2c, 0x59, 0x94, 0xfc, 0x68, 0x0e, 0x4a, 0x4b, 0x8e, 0x6e, 0x7a, 0xae, 0x78, 0x62, - 0x7b, 0x76, 0x7c, 0xc3, 0xd1, 0xdb, 0x4c, 0x3f, 0xc6, 0x31, 0xdc, 0xf2, 0x3d, 0xbd, 0xd5, 0xa1, - 0xee, 0xc4, 0x7d, 0xf6, 0x75, 0xff, 0xc3, 0x56, 0xf9, 0x0d, 0x1e, 0x9c, 0x64, 0xbc, 0x69, 0xaf, - 0x5f, 0x5f, 0x71, 0xf4, 0x87, 0xa6, 0x87, 0x5b, 0x05, 0xbd, 0x75, 0xdd, 0xa3, 0x2d, 0x3c, 0x2b, - 0xbf, 0xae, 0xb7, 0xcd, 0xeb, 0x18, 0xd6, 0xff, 0x7a, 0xc0, 0x89, 0xd7, 0xc0, 0x54, 0xc0, 0xc3, - 0xbf, 0x64, 0x15, 0xe0, 0x38, 0x32, 0x0f, 0x20, 0x3e, 0xb5, 0xd2, 0x6e, 0x8b, 0xf7, 0xba, 0xd2, - 0x09, 0xb3, 0x8f, 0xe1, 0x8a, 0x1d, 0x08, 0x4c, 0x6f, 0x4b, 0xa1, 0xac, 0x35, 0x89, 0x03, 0xd3, - 0x82, 0x25, 0xd1, 0x22, 0x5f, 0x4c, 0xc3, 0xa1, 0xc4, 0xfd, 0xc6, 0xa6, 0x08, 0x29, 0x5e, 0x8c, - 0x2c, 0xc3, 0xa8, 0xe0, 0x1b, 0x24, 0xbe, 0x19, 0x89, 0xce, 0x0a, 0x31, 0x34, 0x57, 0xda, 0xa0, - 0x8d, 0x86, 0x00, 0xcb, 0x75, 0xc4, 0x4a, 0x90, 0x89, 0x30, 0x51, 0xf7, 0xbc, 0xbe, 0x4e, 0x5d, - 0x65, 0x14, 0x35, 0xf6, 0xd2, 0xf6, 0x56, 0x59, 0xf1, 0xcb, 0x63, 0xd8, 0x55, 0x59, 0x74, 0xd1, - 0x22, 0x32, 0x0f, 0xae, 0xf5, 0x63, 0x29, 0x3c, 0xe2, 0x3a, 0x1f, 0x2d, 0x42, 0x26, 0x61, 0x38, - 0x78, 0x2e, 0x74, 0xf7, 0x6e, 0xad, 0x8a, 0x0f, 0x82, 0x45, 0xe4, 0xdd, 0x58, 0x6a, 0x1a, 0x99, - 0x49, 0xa4, 0x8c, 0x14, 0xc0, 0x85, 0xbf, 0x10, 0x8e, 0x05, 0x70, 0x69, 0xa7, 0x04, 0x70, 0x59, - 0x24, 0x6f, 0xc1, 0x60, 0xe5, 0x7e, 0x5d, 0x04, 0xa6, 0x71, 0x95, 0xd3, 0x61, 0x9e, 0x33, 0x7d, - 0xc3, 0x6d, 0xf8, 0x41, 0x6c, 0xe4, 0xa6, 0xcb, 0xf4, 0x64, 0x0a, 0x46, 0x22, 0x1e, 0x87, 0xae, - 0x72, 0x06, 0x39, 0x60, 0xcb, 0x75, 0xc4, 0x34, 0x1c, 0x81, 0x92, 0x87, 0x57, 0xb4, 0x10, 0xd3, - 0x9a, 0xaa, 0xe9, 0x62, 0xce, 0x28, 0x8d, 0x62, 0x0c, 0x1c, 0x7c, 0x5e, 0xdc, 0xcf, 0xb5, 0xc6, - 0x10, 0xa8, 0x86, 0xc3, 0x71, 0x72, 0x8f, 0xc6, 0x8a, 0x91, 0xf7, 0x80, 0x60, 0x96, 0x29, 0x6a, - 0xf8, 0x17, 0xd0, 0xb5, 0xaa, 0xab, 0x9c, 0xc3, 0xb0, 0xf3, 0x24, 0x1e, 0x16, 0xa3, 0x56, 0x9d, - 0xb8, 0x22, 0xa6, 0x8f, 0x27, 0x75, 0x5e, 0xaa, 0xe1, 0x87, 0xc4, 0x68, 0x98, 0x91, 0x14, 0xdc, - 0x29, 0x5c, 0xc9, 0x06, 0x9c, 0x5f, 0x74, 0xe8, 0x43, 0xd3, 0xee, 0xb8, 0xfe, 0xf2, 0xe1, 0xcf, - 0x5b, 0xe7, 0x77, 0x9c, 0xb7, 0x9e, 0x16, 0x15, 0x9f, 0x6d, 0x3b, 0xf4, 0x61, 0xc3, 0x0f, 0x36, - 0x1e, 0x89, 0x95, 0x9b, 0xc5, 0x1d, 0x13, 0x89, 0xbf, 0xdf, 0x71, 0xa8, 0x80, 0x9b, 0xd4, 0x55, - 0x94, 0x70, 0xaa, 0xe5, 0xf1, 0x91, 0xcc, 0x00, 0x17, 0x49, 0x24, 0x1e, 0x2d, 0x46, 0x34, 0x20, - 0xb7, 0x26, 0x7d, 0x67, 0x84, 0x4a, 0x93, 0xa7, 0x5b, 0x56, 0x2e, 0x20, 0x33, 0x95, 0x89, 0x65, - 0xa5, 0x19, 0x24, 0x1e, 0x68, 0xe8, 0x02, 0x2f, 0x8b, 0x25, 0x59, 0x9a, 0xcc, 0xc2, 0xd8, 0xa2, - 0x83, 0x47, 0xa3, 0x77, 0xe8, 0xe6, 0xa2, 0xdd, 0x32, 0x9b, 0x9b, 0xf8, 0xca, 0x59, 0x4c, 0x95, - 0x6d, 0x8e, 0x6b, 0xac, 0xd1, 0xcd, 0x46, 0x1b, 0xb1, 0xf2, 0xb2, 0x12, 0x2f, 0x29, 0x07, 0x02, - 0x7f, 0x62, 0x77, 0x81, 0xc0, 0x29, 0x8c, 0x09, 0x57, 0x86, 0x47, 0x1e, 0xb5, 0xd8, 0x52, 0xef, - 0x8a, 0x17, 0xcd, 0x4a, 0xcc, 0xf5, 0x21, 0xc0, 0xf3, 0xa9, 0x43, 0x8c, 0x32, 0x1a, 0x80, 0xe5, - 0x86, 0xc5, 0x8b, 0x24, 0xa3, 0x65, 0x5f, 0xde, 0x47, 0xb4, 0xec, 0xff, 0xa3, 0x20, 0xcf, 0xbf, - 0xe4, 0x12, 0x14, 0xa5, 0x64, 0x56, 0x18, 0x0a, 0x18, 0x03, 0xff, 0x17, 0x45, 0x84, 0xf3, 0x01, - 0x61, 0xbb, 0x04, 0x21, 0x9a, 0x30, 0x7b, 0x69, 0x18, 0x1e, 0x56, 0x0b, 0x09, 0x30, 0x73, 0x64, - 0x67, 0xb9, 0x65, 0x36, 0x31, 0x1d, 0x44, 0x41, 0x0a, 0x9b, 0x82, 0x50, 0x9e, 0x0d, 0x42, 0x22, - 0x21, 0x37, 0x60, 0xd0, 0x3f, 0x92, 0x0f, 0x43, 0x61, 0x63, 0x96, 0x00, 0x31, 0x5b, 0x8b, 0x24, - 0x04, 0x12, 0x11, 0x79, 0x1d, 0x20, 0x9c, 0x0e, 0x84, 0xa5, 0x85, 0x4b, 0x85, 0x3c, 0x7b, 0xc8, - 0x4b, 0x45, 0x48, 0xcd, 0x26, 0x4e, 0x59, 0x1d, 0xfd, 0x5c, 0xb9, 0x38, 0x71, 0x46, 0x74, 0x58, - 0x56, 0x90, 0x68, 0x11, 0xb2, 0x00, 0xa7, 0x12, 0x1a, 0x28, 0x02, 0x67, 0x3f, 0xbd, 0xbd, 0x55, - 0xbe, 0x9c, 0xa2, 0xbe, 0xf2, 0xc2, 0x9c, 0x28, 0x4b, 0x9e, 0x81, 0xc2, 0x5d, 0xad, 0x26, 0x82, - 0xf7, 0xf2, 0xb8, 0xcf, 0x91, 0x40, 0x5c, 0x0c, 0x4b, 0x5e, 0x03, 0xe0, 0xc9, 0x71, 0x16, 0x6d, - 0xc7, 0x43, 0x8b, 0x62, 0x78, 0xe2, 0x02, 0x1b, 0xcb, 0x3c, 0x79, 0x4e, 0x83, 0x2d, 0x63, 0xf2, - 0x47, 0x87, 0xc4, 0xea, 0x9f, 0xcd, 0x27, 0x96, 0x35, 0x26, 0x78, 0xd1, 0x0a, 0xa9, 0xf3, 0x51, - 0xf0, 0x7e, 0xd3, 0xb9, 0xe0, 0x25, 0x22, 0x72, 0x15, 0xfa, 0x17, 0xd9, 0xa4, 0xd2, 0xb4, 0x5b, - 0x42, 0x15, 0x30, 0x82, 0x5b, 0x5b, 0xc0, 0xb4, 0x00, 0x4b, 0x6e, 0x48, 0xd9, 0xa1, 0xa5, 0x50, - 0xfa, 0x7e, 0x76, 0xe8, 0x78, 0x4c, 0x79, 0xcc, 0x13, 0x7d, 0x23, 0x96, 0x6d, 0x4e, 0x94, 0x49, - 0x59, 0x52, 0xc3, 0xec, 0x72, 0x81, 0x41, 0xdb, 0xbb, 0x93, 0x41, 0xab, 0xfe, 0x4e, 0x2e, 0x39, - 0x44, 0xc9, 0xcd, 0x64, 0x54, 0x6b, 0x5c, 0xbf, 0x02, 0xa0, 0x5c, 0x6b, 0x10, 0xdf, 0x3a, 0x12, - 0x9f, 0x3a, 0xbf, 0xef, 0xf8, 0xd4, 0x85, 0x3d, 0xc6, 0xa7, 0x56, 0xff, 0xdf, 0x62, 0x57, 0xaf, - 0xfd, 0x23, 0x89, 0x63, 0xf8, 0x1a, 0xdb, 0x94, 0xb1, 0xda, 0x2b, 0x6e, 0x62, 0x6b, 0xc1, 0x9d, - 0x92, 0x1b, 0x3a, 0x1f, 0x95, 0xae, 0x16, 0xa5, 0x24, 0x6f, 0xc3, 0x90, 0xff, 0x01, 0x18, 0xf7, - 0x5c, 0x8a, 0xd7, 0x1d, 0x2c, 0x88, 0xb1, 0x08, 0xe1, 0x91, 0x02, 0xe4, 0x65, 0x18, 0x40, 0x73, - 0xa8, 0xad, 0x37, 0xfd, 0xa0, 0xf8, 0x3c, 0x8a, 0xbe, 0x0f, 0x94, 0x63, 0xf5, 0x05, 0x94, 0xe4, - 0x0b, 0x50, 0x12, 0x99, 0x61, 0x4a, 0xb8, 0x44, 0x5f, 0xdf, 0xc5, 0x33, 0x87, 0x71, 0x39, 0x2b, - 0x0c, 0xdf, 0xe0, 0x20, 0x20, 0xb2, 0xc1, 0xe1, 0x09, 0x61, 0x96, 0xe0, 0xf4, 0xa2, 0x43, 0x0d, - 0x7c, 0x50, 0x33, 0xf5, 0xa8, 0xed, 0x88, 0x9c, 0x3d, 0x7c, 0x82, 0xc0, 0xf5, 0xad, 0xed, 0xa3, - 0xd9, 0xca, 0x2b, 0xf0, 0x72, 0x64, 0xee, 0x94, 0xe2, 0xcc, 0xe8, 0xe1, 0x2d, 0xb9, 0x43, 0x37, - 0x37, 0x6c, 0xc7, 0xe0, 0x69, 0x6d, 0xc4, 0xd4, 0x2f, 0x04, 0xbd, 0x26, 0x50, 0xb2, 0xd1, 0x13, - 0x2d, 0x74, 0xf1, 0x35, 0x18, 0xdc, 0x6f, 0x66, 0x95, 0x5f, 0xc9, 0x67, 0xbc, 0x7f, 0x7b, 0x7c, - 0x93, 0x5b, 0x06, 0x19, 0xd7, 0x7b, 0x33, 0x32, 0xae, 0xff, 0x69, 0x3e, 0xe3, 0x71, 0xdf, 0x63, - 0x9d, 0x19, 0x39, 0x10, 0x46, 0x34, 0x33, 0x72, 0x98, 0x94, 0xda, 0x34, 0x34, 0x99, 0x28, 0x96, - 0x43, 0xbd, 0xb4, 0x63, 0x0e, 0xf5, 0x5f, 0x28, 0x74, 0x7b, 0xfc, 0x78, 0x22, 0xfb, 0xbd, 0xc8, - 0xfe, 0x06, 0x0c, 0x06, 0x92, 0xad, 0x55, 0xd1, 0x5e, 0x1a, 0x0e, 0xf2, 0x38, 0x71, 0x30, 0x96, - 0x91, 0x88, 0xc8, 0x35, 0xde, 0xd6, 0xba, 0xf9, 0x3e, 0xcf, 0x28, 0x32, 0x2c, 0x72, 0x45, 0xe8, - 0x9e, 0xde, 0x70, 0xcd, 0xf7, 0xa9, 0x16, 0xa0, 0x31, 0x58, 0x6c, 0xda, 0x3b, 0xd0, 0x93, 0x3e, - 0xda, 0x7d, 0x1f, 0xa5, 0x08, 0x91, 0xbf, 0x7d, 0x3d, 0x11, 0xe2, 0x1e, 0x84, 0xf8, 0x27, 0xf9, - 0xd4, 0x97, 0xc2, 0x27, 0x42, 0xdc, 0xcb, 0x6c, 0xf1, 0x3c, 0x0c, 0x68, 0xf6, 0x86, 0x3b, 0x89, - 0x7b, 0x22, 0x3e, 0x57, 0xe0, 0x44, 0xed, 0xd8, 0x1b, 0x6e, 0x03, 0x77, 0x3b, 0x5a, 0x48, 0xa0, - 0x7e, 0x3f, 0xdf, 0xe5, 0x2d, 0xf5, 0x89, 0xe0, 0x3f, 0xc8, 0x25, 0xf2, 0xd7, 0xf3, 0x91, 0xb7, - 0xda, 0x8f, 0xaf, 0xb0, 0xaf, 0x03, 0xd4, 0x9b, 0xab, 0x74, 0x5d, 0x97, 0xb2, 0xb2, 0xe1, 0x91, - 0x85, 0x8b, 0x50, 0x91, 0xcd, 0x3b, 0x24, 0x51, 0xbf, 0x95, 0x8f, 0x3d, 0x56, 0x3f, 0x91, 0xdd, - 0xae, 0x65, 0x17, 0x68, 0x9d, 0x78, 0x7f, 0x7f, 0x22, 0xb9, 0xdd, 0x4a, 0xee, 0xc7, 0xf2, 0xb1, - 0x50, 0x05, 0x8f, 0xad, 0xec, 0xd8, 0x00, 0x4c, 0x86, 0x50, 0x78, 0x6c, 0x35, 0xe9, 0x79, 0x18, - 0x10, 0x72, 0x08, 0x96, 0x0a, 0x3e, 0xef, 0x73, 0x20, 0x1e, 0xd0, 0x06, 0x04, 0xea, 0x9f, 0xcb, - 0x43, 0x34, 0x84, 0xc4, 0x63, 0xaa, 0x43, 0xbf, 0x9e, 0x8f, 0x06, 0xcf, 0x78, 0x7c, 0xf5, 0x67, - 0x1c, 0xa0, 0xde, 0x59, 0x6e, 0x0a, 0x17, 0x95, 0x5e, 0xe9, 0x84, 0x3f, 0x80, 0x6a, 0x12, 0x85, - 0xfa, 0xff, 0xe5, 0x53, 0x23, 0x7a, 0x3c, 0xbe, 0x02, 0x7c, 0x09, 0x4f, 0xc5, 0x9b, 0x56, 0x38, - 0x91, 0xe3, 0x21, 0x24, 0x1b, 0x7f, 0x89, 0x54, 0x9e, 0x3e, 0x21, 0xf9, 0x54, 0x8a, 0xb9, 0x86, - 0x89, 0x46, 0x42, 0x73, 0x4d, 0x3e, 0xcc, 0x97, 0x0c, 0xb7, 0xdf, 0xcb, 0xef, 0x14, 0x00, 0xe5, - 0x71, 0x5e, 0x55, 0xfb, 0x16, 0xf5, 0x4d, 0x0c, 0xd4, 0xc9, 0x7a, 0x62, 0x88, 0x27, 0x9a, 0x6c, - 0x73, 0x90, 0x7c, 0x6d, 0x27, 0xa8, 0xd4, 0x7f, 0xde, 0x9b, 0x1e, 0x7d, 0xe3, 0xf1, 0x15, 0xe1, - 0x25, 0x28, 0x2e, 0xea, 0xde, 0xaa, 0xd0, 0x64, 0xbc, 0x0d, 0x6c, 0xeb, 0xde, 0xaa, 0x86, 0x50, - 0x72, 0x0d, 0xfa, 0x35, 0x7d, 0x83, 0x9f, 0x79, 0x96, 0xc2, 0x24, 0xa0, 0x8e, 0xbe, 0xd1, 0xe0, - 0xe7, 0x9e, 0x01, 0x9a, 0xa8, 0x41, 0x12, 0x5a, 0x7e, 0xf2, 0x8d, 0x19, 0x10, 0x79, 0x12, 0xda, - 0x20, 0xf5, 0xec, 0x25, 0x28, 0x4e, 0xd8, 0xc6, 0x26, 0xde, 0x7c, 0x0d, 0xf1, 0xca, 0x96, 0x6d, - 0x63, 0x53, 0x43, 0x28, 0xf9, 0xf1, 0x1c, 0xf4, 0xcd, 0x50, 0xdd, 0x60, 0x23, 0x64, 0xa0, 0x9b, - 0xc3, 0xca, 0x67, 0x0f, 0xc7, 0x61, 0xe5, 0xd4, 0x2a, 0xaf, 0x4c, 0x56, 0x14, 0x51, 0x3f, 0xb9, - 0x05, 0xfd, 0x93, 0xba, 0x47, 0x57, 0x6c, 0x67, 0x13, 0x5d, 0x70, 0x46, 0xc2, 0x17, 0x1c, 0x11, - 0xfd, 0xf1, 0x89, 0xf8, 0xcd, 0x58, 0x53, 0xfc, 0xd2, 0x82, 0xc2, 0x4c, 0x2c, 0xfc, 0x66, 0x4e, - 0x24, 0x5c, 0x47, 0xb1, 0xf0, 0x2b, 0x3c, 0x4d, 0x60, 0xc2, 0x63, 0xe5, 0xa1, 0xf4, 0x63, 0x65, - 0xb4, 0x1e, 0xd1, 0x4d, 0x0f, 0x53, 0xbf, 0x0e, 0xe3, 0xa2, 0xcf, 0xad, 0x47, 0x84, 0x62, 0xe6, - 0x57, 0x4d, 0x22, 0x51, 0xbf, 0xd7, 0x0b, 0xa9, 0x6f, 0xf5, 0x4f, 0x94, 0xfc, 0x44, 0xc9, 0x43, - 0x25, 0xaf, 0x26, 0x94, 0xfc, 0x62, 0x32, 0xfa, 0xc3, 0x87, 0x54, 0xc3, 0xbf, 0x5e, 0x4c, 0xc4, - 0x8e, 0x79, 0xbc, 0x77, 0x97, 0xa1, 0xf4, 0x7a, 0x77, 0x94, 0x5e, 0x30, 0x20, 0x4a, 0x3b, 0x0e, - 0x88, 0xbe, 0xdd, 0x0e, 0x88, 0xfe, 0xcc, 0x01, 0x11, 0x2a, 0xc8, 0x40, 0xa6, 0x82, 0xd4, 0xc4, - 0xa0, 0x81, 0xee, 0x29, 0x6c, 0x2e, 0x6d, 0x6f, 0x95, 0x47, 0xd8, 0x68, 0x4a, 0xcd, 0x5d, 0x83, - 0x2c, 0xd4, 0xdf, 0x2f, 0x76, 0x09, 0xf8, 0x74, 0x24, 0x3a, 0xf2, 0x12, 0x14, 0x2a, 0xed, 0xb6, - 0xd0, 0x8f, 0xd3, 0x52, 0xac, 0xa9, 0x8c, 0x52, 0x8c, 0x9a, 0xbc, 0x0e, 0x85, 0xca, 0xfd, 0x7a, - 0x3c, 0x6d, 0x4d, 0xe5, 0x7e, 0x5d, 0x7c, 0x49, 0x66, 0xd9, 0xfb, 0x75, 0xf2, 0x66, 0x18, 0x3f, - 0x76, 0xb5, 0x63, 0xad, 0x89, 0x8d, 0xa2, 0xf0, 0xd4, 0xf5, 0x3d, 0x79, 0x9a, 0x0c, 0xc5, 0xb6, - 0x8b, 0x31, 0xda, 0x98, 0x36, 0x95, 0x76, 0xaf, 0x4d, 0x7d, 0x3b, 0x6a, 0x53, 0xff, 0x6e, 0xb5, - 0x69, 0x60, 0x17, 0xda, 0x04, 0x3b, 0x6a, 0xd3, 0xe0, 0xc1, 0xb5, 0xa9, 0x0d, 0x17, 0x93, 0x41, - 0xfa, 0x02, 0x8d, 0xd0, 0x80, 0x24, 0xb1, 0xc2, 0xb1, 0x04, 0xaf, 0xfe, 0x3b, 0x1c, 0xdb, 0xd8, - 0x40, 0x74, 0xc3, 0x65, 0x78, 0xd9, 0xb5, 0x2d, 0x59, 0x5a, 0xfd, 0x95, 0x7c, 0x76, 0x6c, 0xc1, - 0xe3, 0x39, 0xc5, 0xfd, 0x60, 0xaa, 0x94, 0x8a, 0xd1, 0x58, 0x0f, 0xd9, 0x52, 0x8e, 0xb1, 0x4d, - 0x93, 0xd9, 0x37, 0xf3, 0x59, 0x01, 0x0f, 0x0f, 0x24, 0xb1, 0x67, 0x93, 0xce, 0x70, 0xe8, 0xe2, - 0xef, 0x46, 0xbd, 0xe0, 0xa6, 0x61, 0x48, 0x16, 0xa2, 0x90, 0xd2, 0x6e, 0x04, 0x1c, 0x29, 0x47, - 0xde, 0x0c, 0xb2, 0x0b, 0x49, 0xfe, 0x31, 0xe8, 0xe9, 0xe6, 0x8f, 0xd9, 0x98, 0x7b, 0x8c, 0x4c, - 0x4e, 0x9e, 0x87, 0xd2, 0x34, 0x86, 0xeb, 0x97, 0x07, 0x3b, 0x0f, 0xe0, 0x2f, 0x7b, 0xad, 0x70, - 0x1a, 0xf5, 0x77, 0x72, 0x70, 0xfa, 0x4e, 0x67, 0x99, 0x0a, 0x47, 0xbb, 0xa0, 0x0d, 0xef, 0x01, - 0x30, 0xb0, 0x70, 0x98, 0xc9, 0xa1, 0xc3, 0xcc, 0x27, 0xe4, 0xc0, 0x88, 0xb1, 0x02, 0xe3, 0x21, - 0x35, 0x77, 0x96, 0xb9, 0xec, 0xfb, 0x9c, 0xae, 0x75, 0x96, 0x69, 0x23, 0xe1, 0x35, 0x23, 0x71, - 0xbf, 0xf8, 0x16, 0xf7, 0xe6, 0xdf, 0xaf, 0x83, 0xca, 0x2f, 0xe7, 0x33, 0x63, 0x51, 0x1e, 0xdb, - 0x14, 0xaf, 0x9f, 0x4f, 0xed, 0x95, 0x78, 0xaa, 0xd7, 0x14, 0x92, 0x18, 0xc7, 0x34, 0x2e, 0xe9, - 0x02, 0x3b, 0xe6, 0x89, 0x87, 0x3f, 0x50, 0x81, 0xfd, 0x51, 0x2e, 0x33, 0x66, 0xe8, 0x71, 0x15, - 0x98, 0xfa, 0xbf, 0x16, 0xfc, 0x50, 0xa5, 0x07, 0xfa, 0x84, 0xe7, 0x61, 0x40, 0xbc, 0x5e, 0x8b, - 0xfa, 0x09, 0x8b, 0x63, 0x43, 0x3c, 0x86, 0x0e, 0x08, 0x98, 0x49, 0x21, 0x39, 0x31, 0x4b, 0x7e, - 0xc2, 0x92, 0x03, 0xb3, 0x26, 0x91, 0x30, 0xa3, 0x61, 0xea, 0x91, 0xe9, 0xa1, 0x05, 0xc2, 0xfa, - 0xb2, 0xc0, 0x8d, 0x06, 0xfa, 0xc8, 0xf4, 0xb8, 0xfd, 0x11, 0xa0, 0x99, 0x41, 0xc0, 0x6d, 0x11, - 0x31, 0xef, 0xa1, 0x41, 0xc0, 0x4d, 0x15, 0x4d, 0x60, 0x58, 0x6b, 0x85, 0xf3, 0xad, 0x70, 0x69, - 0x11, 0xad, 0x15, 0xee, 0xba, 0xd8, 0xda, 0x80, 0x80, 0x71, 0xd4, 0xe8, 0x4a, 0xe8, 0xc4, 0x87, - 0x1c, 0x1d, 0x84, 0x68, 0x02, 0x43, 0x6e, 0xc0, 0x48, 0xdd, 0xd3, 0x2d, 0x43, 0x77, 0x8c, 0x85, - 0x8e, 0xd7, 0xee, 0x78, 0xb2, 0x01, 0xec, 0x7a, 0x86, 0xdd, 0xf1, 0xb4, 0x18, 0x05, 0xf9, 0x24, - 0x0c, 0xfb, 0x90, 0x29, 0xc7, 0xb1, 0x1d, 0xd9, 0xca, 0x71, 0x3d, 0x83, 0x3a, 0x8e, 0x16, 0x25, - 0x20, 0x9f, 0x82, 0xe1, 0x9a, 0xf5, 0xd0, 0x6e, 0xf2, 0xa8, 0x05, 0xda, 0xac, 0xb0, 0x79, 0xf0, - 0xc5, 0x98, 0x19, 0x20, 0x1a, 0x1d, 0xa7, 0xa5, 0x45, 0x09, 0xd5, 0xed, 0x7c, 0x32, 0xa2, 0xeb, - 0xe3, 0xbb, 0x41, 0xba, 0x16, 0x75, 0xdc, 0x43, 0x6f, 0x55, 0x34, 0x3e, 0x65, 0xbf, 0x61, 0x6e, - 0x83, 0xde, 0x80, 0xfe, 0x3b, 0x74, 0x93, 0xfb, 0x98, 0x96, 0x42, 0xb7, 0xe4, 0x35, 0x01, 0x93, - 0x4f, 0x77, 0x7d, 0x3a, 0xf5, 0xdb, 0xf9, 0x64, 0xac, 0xda, 0xc7, 0x57, 0xd8, 0x9f, 0x84, 0x3e, - 0x14, 0x65, 0xcd, 0xbf, 0x5e, 0x40, 0x01, 0xa2, 0xb8, 0xa3, 0xde, 0xce, 0x3e, 0x99, 0xfa, 0xf3, - 0xa5, 0x78, 0x00, 0xe3, 0xc7, 0x57, 0x7a, 0x6f, 0xc0, 0xe0, 0xa4, 0x6d, 0xb9, 0xa6, 0xeb, 0x51, - 0xab, 0xe9, 0x2b, 0x2c, 0x3a, 0xfe, 0x37, 0x43, 0xb0, 0x6c, 0x03, 0x4a, 0xd4, 0xfb, 0x51, 0x5e, - 0xf2, 0x0a, 0x0c, 0xa0, 0xc8, 0xd1, 0xe6, 0xe4, 0x13, 0x1e, 0xde, 0x4c, 0x2c, 0x33, 0x60, 0xdc, - 0xe2, 0x0c, 0x49, 0xc9, 0x5d, 0xe8, 0x9f, 0x5c, 0x35, 0x5b, 0x86, 0x43, 0x2d, 0xf4, 0x4d, 0x96, - 0xe2, 0xc4, 0x44, 0xfb, 0x72, 0x1c, 0xff, 0x45, 0x5a, 0xde, 0x9c, 0xa6, 0x28, 0x16, 0x79, 0x2c, - 0x26, 0x60, 0x17, 0x7f, 0x3a, 0x0f, 0x10, 0x16, 0x20, 0x4f, 0x41, 0x3e, 0x48, 0x30, 0x8e, 0x2e, - 0x31, 0x11, 0x0d, 0xca, 0xe3, 0x52, 0x21, 0xc6, 0x76, 0x7e, 0xc7, 0xb1, 0x7d, 0x17, 0x4a, 0xfc, - 0x74, 0x0d, 0xbd, 0xd6, 0xa5, 0x98, 0xaa, 0x99, 0x0d, 0x1e, 0x47, 0x7a, 0x6e, 0x4b, 0xa3, 0xe5, - 0x19, 0xf1, 0x00, 0xe7, 0xcc, 0x2e, 0x36, 0xa1, 0x17, 0xff, 0x22, 0x57, 0xa0, 0xb8, 0xe4, 0xe7, - 0x0f, 0x1e, 0xe6, 0xb3, 0x74, 0x4c, 0x7e, 0x88, 0x67, 0xdd, 0x34, 0x69, 0x5b, 0x1e, 0xab, 0x1a, - 0x5b, 0x3d, 0x24, 0xe4, 0x22, 0x60, 0x11, 0xb9, 0x08, 0x98, 0xfa, 0x5f, 0xe7, 0x53, 0x42, 0x6b, - 0x3f, 0xbe, 0xc3, 0xe4, 0x35, 0x00, 0x7c, 0x79, 0xce, 0xe4, 0xe9, 0x3f, 0x07, 0xc1, 0x51, 0x82, - 0x8c, 0x50, 0x6d, 0x23, 0xdb, 0x8e, 0x90, 0x58, 0xfd, 0x87, 0xb9, 0x44, 0x3c, 0xe6, 0x03, 0xc9, - 0x51, 0xb6, 0xca, 0xf2, 0xfb, 0x34, 0x63, 0xfd, 0xbe, 0x28, 0xec, 0xad, 0x2f, 0xa2, 0xdf, 0x72, - 0x08, 0x96, 0xe9, 0x51, 0x7e, 0xcb, 0xf7, 0xf2, 0x69, 0xd1, 0xa9, 0x8f, 0xa7, 0x8a, 0xdf, 0x0c, - 0x8c, 0xd2, 0x62, 0x2c, 0x1f, 0x00, 0x42, 0xe3, 0x39, 0xce, 0x85, 0x99, 0xfa, 0x45, 0x18, 0x8d, - 0xc5, 0x6c, 0x16, 0xe9, 0xa6, 0xaf, 0x74, 0x0f, 0xfe, 0x9c, 0x1d, 0xb3, 0x20, 0x42, 0xa6, 0xfe, - 0xff, 0xb9, 0xee, 0x11, 0xbb, 0x8f, 0x5c, 0x75, 0x52, 0x04, 0x50, 0xf8, 0x37, 0x23, 0x80, 0x43, - 0xd8, 0x06, 0x1f, 0x6f, 0x01, 0x7c, 0x48, 0x26, 0x8f, 0x0f, 0x5a, 0x00, 0x3f, 0x9f, 0xdb, 0x31, - 0xe0, 0xfa, 0x51, 0xcb, 0x40, 0xfd, 0x9f, 0x72, 0xa9, 0x81, 0xd1, 0x0f, 0xd4, 0xae, 0x37, 0xa1, - 0xc4, 0x5d, 0x78, 0x44, 0xab, 0xa4, 0x54, 0x72, 0x0c, 0x9a, 0x51, 0x5e, 0x94, 0x21, 0xb3, 0xd0, - 0xc7, 0xdb, 0x60, 0x88, 0xde, 0xf8, 0x58, 0x97, 0xe8, 0xec, 0x46, 0xd6, 0xe4, 0x28, 0xd0, 0xea, - 0xef, 0xe6, 0x12, 0x71, 0xda, 0x8f, 0xf0, 0xdb, 0xc2, 0xa9, 0xba, 0xb0, 0xfb, 0xa9, 0x5a, 0xfd, - 0x67, 0xf9, 0xf4, 0x30, 0xf1, 0x47, 0xf8, 0x21, 0x87, 0x71, 0x9c, 0xb6, 0xbf, 0x75, 0x6b, 0x09, - 0x46, 0xa2, 0xb2, 0x10, 0xcb, 0xd6, 0x93, 0xe9, 0xc1, 0xf2, 0x33, 0x5a, 0x11, 0xe3, 0xa1, 0x7e, - 0x37, 0x97, 0x8c, 0x70, 0x7f, 0xe4, 0xf3, 0xd3, 0xfe, 0xb4, 0x25, 0xfa, 0x29, 0x1f, 0x92, 0xb5, - 0xe6, 0x30, 0x3e, 0xe5, 0x43, 0xb2, 0x6a, 0xec, 0xef, 0x53, 0x7e, 0x31, 0x9f, 0x95, 0x20, 0xe0, - 0xc8, 0x3f, 0xe8, 0x73, 0xb2, 0x90, 0x79, 0xcb, 0xc4, 0xa7, 0x3d, 0x95, 0x15, 0x91, 0x3f, 0x83, - 0x67, 0x82, 0xcf, 0xfe, 0xc6, 0x78, 0xaa, 0xb0, 0x3e, 0x24, 0x8a, 0x7c, 0x3c, 0x84, 0xf5, 0x21, - 0x19, 0x2a, 0x1f, 0x3e, 0x61, 0xfd, 0x66, 0x7e, 0xb7, 0x59, 0x29, 0x4e, 0x84, 0x97, 0x10, 0xde, - 0x57, 0xf3, 0xc9, 0x6c, 0x29, 0x47, 0x2e, 0xa6, 0x69, 0x28, 0x89, 0xbc, 0x2d, 0x99, 0xc2, 0xe1, - 0xf8, 0x2c, 0x8b, 0x46, 0x7c, 0xc7, 0x4d, 0x10, 0x17, 0x39, 0xbb, 0x13, 0x09, 0xa7, 0x55, 0xbf, - 0x9f, 0x8b, 0xa5, 0x16, 0x39, 0x92, 0x23, 0x84, 0x7d, 0x2d, 0x49, 0xe4, 0x2d, 0xff, 0x30, 0xb3, - 0x18, 0x0b, 0xed, 0x1e, 0x7c, 0x4f, 0x95, 0x7a, 0xba, 0xd9, 0x8a, 0x97, 0x17, 0xf1, 0x07, 0xbe, - 0x9d, 0x87, 0x53, 0x09, 0x52, 0x72, 0x25, 0x12, 0xf1, 0x07, 0x8f, 0x25, 0x63, 0x8e, 0xea, 0x3c, - 0xf6, 0xcf, 0x1e, 0x4e, 0x52, 0xaf, 0x40, 0xb1, 0xaa, 0x6f, 0xf2, 0x6f, 0xeb, 0xe5, 0x2c, 0x0d, - 0x7d, 0x53, 0x3e, 0x71, 0x43, 0x3c, 0x59, 0x86, 0xb3, 0xfc, 0x3e, 0xc4, 0xb4, 0xad, 0x25, 0x73, - 0x9d, 0xd6, 0xac, 0x39, 0xb3, 0xd5, 0x32, 0x5d, 0x71, 0xa9, 0xf7, 0xfc, 0xf6, 0x56, 0xf9, 0xaa, - 0x67, 0x7b, 0x7a, 0xab, 0x41, 0x7d, 0xb2, 0x86, 0x67, 0xae, 0xd3, 0x86, 0x69, 0x35, 0xd6, 0x91, - 0x52, 0x62, 0x99, 0xce, 0x8a, 0xd4, 0x78, 0x14, 0xff, 0x7a, 0x53, 0xb7, 0x2c, 0x6a, 0xd4, 0xac, - 0x89, 0x4d, 0x8f, 0xf2, 0xcb, 0xc0, 0x02, 0x3f, 0x12, 0xe4, 0xef, 0xd0, 0x39, 0x9a, 0x31, 0x5e, - 0x66, 0x04, 0x5a, 0x4a, 0x21, 0xf5, 0xb7, 0x8a, 0x29, 0x59, 0x65, 0x8e, 0x91, 0xfa, 0xf8, 0x3d, - 0x5d, 0xdc, 0xa1, 0xa7, 0xaf, 0x43, 0x9f, 0x08, 0x93, 0x2c, 0x2e, 0x18, 0xd0, 0x71, 0xfe, 0x21, - 0x07, 0xc9, 0x37, 0x34, 0x82, 0x8a, 0xb4, 0xe0, 0xe2, 0x12, 0xeb, 0xa6, 0xf4, 0xce, 0x2c, 0xed, - 0xa3, 0x33, 0xbb, 0xf0, 0x23, 0xef, 0xc2, 0x79, 0xc4, 0xa6, 0x74, 0x6b, 0x1f, 0x56, 0x85, 0xa1, - 0xb4, 0x78, 0x55, 0xe9, 0x9d, 0x9b, 0x55, 0x9e, 0x7c, 0x0e, 0x86, 0x82, 0x01, 0x62, 0x52, 0x57, - 0xdc, 0x5c, 0x74, 0x19, 0x67, 0x3c, 0x4e, 0x1d, 0x03, 0xa3, 0xbb, 0x5a, 0x34, 0xd6, 0x59, 0x84, - 0x97, 0xfa, 0x3f, 0xe6, 0xba, 0x65, 0xb7, 0x39, 0xf2, 0x59, 0xf9, 0x2d, 0xe8, 0x33, 0xf8, 0x47, - 0x09, 0x9d, 0xea, 0x9e, 0xff, 0x86, 0x93, 0x6a, 0x7e, 0x19, 0xf5, 0x9f, 0xe6, 0xba, 0x26, 0xd5, - 0x39, 0xee, 0x9f, 0xf7, 0xd5, 0x42, 0xc6, 0xe7, 0x89, 0x49, 0xf4, 0x1a, 0x8c, 0x99, 0x61, 0xd4, - 0xff, 0x46, 0x18, 0xea, 0x4a, 0x1b, 0x95, 0xe0, 0x38, 0xba, 0x6e, 0x42, 0xe0, 0xb0, 0xe5, 0xf8, - 0xde, 0x68, 0x6e, 0xa3, 0xe3, 0x98, 0x7c, 0x5c, 0x6a, 0x67, 0xdc, 0x98, 0xab, 0x9a, 0x7b, 0xd7, - 0x31, 0x59, 0x05, 0xba, 0xb7, 0x4a, 0x2d, 0xbd, 0xb1, 0x61, 0x3b, 0x6b, 0x18, 0x0c, 0x95, 0x0f, - 0x4e, 0x6d, 0x94, 0xc3, 0xef, 0xfb, 0x60, 0xf2, 0x0c, 0x0c, 0xaf, 0xb4, 0x3a, 0x34, 0x08, 0x3f, - 0xc9, 0xef, 0xfa, 0xb4, 0x21, 0x06, 0x0c, 0x6e, 0x48, 0x2e, 0x03, 0x20, 0x91, 0x87, 0x29, 0x8f, - 0xf0, 0x62, 0x4f, 0x1b, 0x60, 0x90, 0x25, 0xd1, 0x5d, 0x17, 0xb9, 0x56, 0x73, 0x21, 0x35, 0x5a, - 0xb6, 0xb5, 0xd2, 0xf0, 0xa8, 0xb3, 0x8e, 0x0d, 0x45, 0x67, 0x06, 0xed, 0x1c, 0x52, 0xe0, 0xd5, - 0x89, 0x3b, 0x6b, 0x5b, 0x2b, 0x4b, 0xd4, 0x59, 0x67, 0x4d, 0x7d, 0x1e, 0x88, 0x68, 0xaa, 0x83, - 0x87, 0x1e, 0xfc, 0xe3, 0xd0, 0x9b, 0x41, 0x13, 0x1f, 0xc1, 0x4f, 0x43, 0xf0, 0xc3, 0xca, 0x30, - 0xc8, 0x63, 0xf0, 0x71, 0xa1, 0xa1, 0x0b, 0x83, 0x06, 0x1c, 0x84, 0xf2, 0x3a, 0x07, 0xc2, 0xbb, - 0x82, 0x7b, 0x90, 0x6b, 0xe2, 0x97, 0xfa, 0xe5, 0x42, 0x5a, 0x1e, 0xa0, 0x03, 0x29, 0x5a, 0x38, - 0xad, 0xe6, 0xf7, 0x34, 0xad, 0x8e, 0x5a, 0x9d, 0xf5, 0x86, 0xde, 0x6e, 0x37, 0x1e, 0x98, 0x2d, - 0x7c, 0xc2, 0x85, 0x0b, 0x9f, 0x36, 0x6c, 0x75, 0xd6, 0x2b, 0xed, 0xf6, 0x34, 0x07, 0x92, 0xe7, - 0xe0, 0x14, 0xa3, 0xc3, 0x4e, 0x0a, 0x28, 0x8b, 0x48, 0xc9, 0x18, 0x60, 0x10, 0x5b, 0x9f, 0xf6, - 0x02, 0xf4, 0x0b, 0x9e, 0x7c, 0xad, 0xea, 0xd5, 0xfa, 0x38, 0x33, 0x97, 0xf5, 0x5c, 0xc0, 0x86, - 0x4f, 0xae, 0xbd, 0xda, 0x80, 0x5f, 0x1e, 0x43, 0x35, 0x5b, 0x9d, 0x75, 0x1e, 0x7d, 0xab, 0x0f, - 0x91, 0xc1, 0x6f, 0x72, 0x05, 0x46, 0x18, 0x97, 0x40, 0x60, 0x3c, 0xba, 0x6d, 0xaf, 0x16, 0x83, - 0x92, 0x1b, 0x70, 0x26, 0x02, 0xe1, 0x36, 0x28, 0x7f, 0x92, 0xd0, 0xab, 0xa5, 0xe2, 0xd4, 0x6f, - 0x15, 0xa2, 0xd9, 0x89, 0x8e, 0xa0, 0x23, 0xce, 0x43, 0x9f, 0xed, 0xac, 0x34, 0x3a, 0x4e, 0x4b, - 0x8c, 0xbd, 0x92, 0xed, 0xac, 0xdc, 0x75, 0x5a, 0xe4, 0x2c, 0x94, 0x58, 0xef, 0x98, 0x86, 0x18, - 0x62, 0xbd, 0x7a, 0xbb, 0x5d, 0x33, 0x48, 0x85, 0x77, 0x08, 0x46, 0x46, 0x6d, 0x34, 0x71, 0x6b, - 0xcf, 0x9d, 0x12, 0x7a, 0xf9, 0x8a, 0x97, 0x40, 0x62, 0x3f, 0x61, 0xbc, 0x54, 0x7e, 0x10, 0x10, - 0x63, 0x61, 0xe0, 0xb6, 0xc4, 0xe0, 0x7d, 0x12, 0x67, 0x21, 0x90, 0x21, 0x0b, 0xbe, 0x89, 0x31, - 0x48, 0x15, 0x48, 0x48, 0xb5, 0x6e, 0x1b, 0xe6, 0x03, 0x93, 0xf2, 0x17, 0x24, 0xbd, 0xfc, 0xe2, - 0x37, 0x89, 0xd5, 0xc6, 0x7c, 0x26, 0x73, 0x02, 0x42, 0xde, 0xe0, 0x4a, 0xc8, 0xe9, 0x70, 0xed, - 0xe3, 0x7d, 0xcb, 0xed, 0xb4, 0x18, 0x0a, 0x35, 0x13, 0xcb, 0xe3, 0x42, 0xa8, 0xfe, 0xf5, 0x62, - 0x32, 0x45, 0xd5, 0x91, 0xd8, 0x35, 0x33, 0x00, 0x22, 0x03, 0x5d, 0x78, 0xb9, 0x76, 0x51, 0x0a, - 0x37, 0x2f, 0x30, 0x19, 0x3c, 0xa4, 0xb2, 0xe4, 0x1a, 0xf4, 0xf3, 0x2f, 0xaa, 0x55, 0x85, 0xbd, - 0x83, 0x2e, 0x62, 0x6e, 0xdb, 0x7c, 0xf0, 0x00, 0xfd, 0xc9, 0x02, 0x34, 0xb9, 0x02, 0x7d, 0xd5, - 0xf9, 0x7a, 0xbd, 0x32, 0xef, 0xdf, 0x14, 0xe3, 0x5b, 0x16, 0xc3, 0x72, 0x1b, 0xae, 0x6e, 0xb9, - 0x9a, 0x8f, 0x24, 0xcf, 0x40, 0xa9, 0xb6, 0x88, 0x64, 0xfc, 0x85, 0xe6, 0xe0, 0xf6, 0x56, 0xb9, - 0xcf, 0x6c, 0x73, 0x2a, 0x81, 0xc2, 0x7a, 0xef, 0xd5, 0xaa, 0x92, 0xbb, 0x04, 0xaf, 0xf7, 0xa1, - 0x69, 0xe0, 0xb5, 0xb3, 0x16, 0xa0, 0xc9, 0xcb, 0x30, 0x54, 0xa7, 0x8e, 0xa9, 0xb7, 0xe6, 0x3b, - 0xb8, 0x55, 0x94, 0x22, 0x3e, 0xba, 0x08, 0x6f, 0x58, 0x88, 0xd0, 0x22, 0x64, 0xe4, 0x12, 0x14, - 0x67, 0x4c, 0xcb, 0x7f, 0x2e, 0x81, 0xfe, 0xf4, 0xab, 0xa6, 0xe5, 0x69, 0x08, 0x25, 0xcf, 0x40, - 0xe1, 0xf6, 0x52, 0x4d, 0x78, 0x82, 0x21, 0xaf, 0xf7, 0xbc, 0x48, 0xf4, 0xc8, 0xdb, 0x4b, 0x35, - 0xf2, 0x32, 0x0c, 0xb0, 0x45, 0x8c, 0x5a, 0x4d, 0xea, 0x2a, 0x83, 0xf8, 0x31, 0x3c, 0x64, 0xa1, - 0x0f, 0x94, 0x7d, 0x3a, 0x02, 0x4a, 0xf5, 0xff, 0xcc, 0xa7, 0xe7, 0x10, 0x3b, 0x82, 0xa1, 0xbe, - 0xcf, 0x5b, 0xe4, 0x98, 0x82, 0x15, 0x0f, 0xa0, 0x60, 0x0f, 0x60, 0xb4, 0x62, 0xac, 0x9b, 0x56, - 0x05, 0x7f, 0xba, 0x73, 0xd3, 0x15, 0x9c, 0x3a, 0xa4, 0xa7, 0x80, 0x31, 0xb4, 0xf8, 0x1e, 0x1e, - 0x97, 0x98, 0xa1, 0x1a, 0x3a, 0xc7, 0x35, 0xd6, 0x1f, 0xe8, 0x8d, 0x26, 0x4f, 0xbf, 0xa5, 0xc5, - 0x99, 0xaa, 0x3f, 0x95, 0xdf, 0x21, 0xed, 0xd9, 0xe3, 0x28, 0x7d, 0xf5, 0x6b, 0xf9, 0xee, 0x99, - 0xe7, 0x1e, 0x4b, 0xa1, 0xfc, 0x49, 0x3e, 0x25, 0x0f, 0xdc, 0x81, 0x24, 0x71, 0x0d, 0xfa, 0x39, - 0x9b, 0xc0, 0x8d, 0x17, 0x67, 0x33, 0xae, 0xac, 0x38, 0x8b, 0xfa, 0x68, 0x32, 0x0f, 0x67, 0x2a, - 0x0f, 0x1e, 0xd0, 0xa6, 0x17, 0x46, 0xa8, 0x9e, 0x0f, 0x03, 0xbe, 0xf2, 0x88, 0xbc, 0x02, 0x1f, - 0x46, 0xb8, 0xc6, 0xc0, 0x26, 0xa9, 0xe5, 0xc8, 0x12, 0x9c, 0x8b, 0xc3, 0xeb, 0x7c, 0x0b, 0x50, - 0x94, 0x82, 0xf4, 0x26, 0x38, 0xf2, 0xff, 0xb4, 0x8c, 0xb2, 0x69, 0xad, 0xc4, 0xa9, 0xba, 0xb7, - 0x5b, 0x2b, 0x71, 0xde, 0x4e, 0x2d, 0xa7, 0x7e, 0xbb, 0x20, 0xa7, 0xcb, 0x7b, 0x7c, 0x1d, 0xae, - 0x6e, 0x46, 0xdc, 0xac, 0x77, 0x3b, 0x64, 0x5e, 0x16, 0xd1, 0x4a, 0x8c, 0x8e, 0xe3, 0x7b, 0x24, - 0x06, 0xd1, 0x12, 0x10, 0x28, 0xaf, 0x43, 0x01, 0x25, 0xa9, 0x41, 0xb1, 0xe2, 0xac, 0x70, 0xf3, - 0x76, 0xa7, 0x07, 0x5c, 0xba, 0xb3, 0xe2, 0xa6, 0x3f, 0xe0, 0x62, 0x2c, 0xd4, 0xbf, 0x98, 0xef, - 0x92, 0xe1, 0xee, 0xb1, 0x9c, 0x44, 0x7e, 0x2e, 0x9f, 0x95, 0xab, 0xee, 0xb8, 0xba, 0x8e, 0x7d, - 0xc0, 0xc2, 0x39, 0xde, 0x7e, 0x75, 0x87, 0x28, 0x9c, 0x3f, 0xcc, 0x67, 0x25, 0xde, 0x3b, 0x11, - 0xce, 0xfe, 0x26, 0xc8, 0x54, 0x91, 0x3e, 0xc6, 0x36, 0xb7, 0xac, 0x0a, 0xbd, 0xfb, 0x74, 0x9f, - 0x4a, 0x13, 0xe9, 0xc9, 0x10, 0x3e, 0x90, 0x96, 0xfe, 0x51, 0x3e, 0x33, 0xc1, 0xe4, 0x89, 0x4c, - 0x0f, 0x53, 0xa6, 0x27, 0x43, 0xff, 0x40, 0x43, 0x3f, 0x55, 0xa6, 0x27, 0x63, 0xff, 0x40, 0x7a, - 0xfa, 0x07, 0xf9, 0xf4, 0x14, 0xaa, 0x47, 0xa0, 0xa4, 0x87, 0xe1, 0xe1, 0xe8, 0x77, 0x43, 0xf1, - 0x40, 0xdd, 0xd0, 0x7b, 0x00, 0x2b, 0x2a, 0x29, 0xd0, 0x23, 0x1b, 0xf5, 0x1f, 0x55, 0x81, 0x1e, - 0xc2, 0x90, 0x7f, 0x9c, 0x05, 0xfa, 0x13, 0x85, 0x64, 0xda, 0xe0, 0xc7, 0x75, 0x4d, 0x72, 0xf6, - 0xb9, 0x26, 0xf9, 0xe5, 0xc8, 0xdb, 0x30, 0x1a, 0xca, 0x52, 0x8e, 0x32, 0x86, 0xd7, 0x47, 0x4d, - 0x86, 0x6a, 0xbc, 0xc7, 0x70, 0x22, 0x1c, 0x4e, 0x9c, 0x5a, 0xfd, 0x7e, 0x21, 0x99, 0x7b, 0xf9, - 0xa4, 0x37, 0xf6, 0xd9, 0x1b, 0x77, 0xe1, 0xdc, 0x64, 0xc7, 0x71, 0xa8, 0xe5, 0xa5, 0x77, 0x0a, - 0x1e, 0xde, 0x37, 0x39, 0x45, 0x23, 0xd9, 0x39, 0x19, 0x85, 0x19, 0x5b, 0xf1, 0xba, 0x21, 0xce, - 0xb6, 0x2f, 0x64, 0xdb, 0xe1, 0x14, 0x69, 0x6c, 0xd3, 0x0b, 0xab, 0xbf, 0x97, 0x4f, 0x66, 0xcb, - 0x3e, 0xe9, 0xfa, 0xfd, 0x75, 0xbd, 0xfa, 0xe5, 0x42, 0x3c, 0x63, 0xf8, 0xc9, 0x02, 0xb1, 0xff, - 0xee, 0xf0, 0x25, 0x89, 0xe3, 0x46, 0xfa, 0x0a, 0x1f, 0x9e, 0xf5, 0x15, 0x3e, 0x5e, 0xfd, 0xe5, - 0x62, 0x3c, 0xfb, 0xfa, 0x49, 0x77, 0x1c, 0x5d, 0x77, 0x90, 0x05, 0x38, 0x23, 0xe6, 0x36, 0x1f, - 0x84, 0xe9, 0x26, 0xc4, 0xfc, 0xc5, 0xb3, 0xd6, 0x89, 0x69, 0xb1, 0xe3, 0x52, 0xa7, 0xe1, 0xe9, - 0xee, 0x5a, 0x03, 0xf3, 0x53, 0x68, 0xa9, 0x05, 0x19, 0x43, 0x31, 0xab, 0x45, 0x19, 0xf6, 0x87, - 0x0c, 0xfd, 0x09, 0x31, 0xc1, 0x30, 0xad, 0xa0, 0xfa, 0xeb, 0x39, 0x18, 0x8b, 0x7f, 0x0e, 0x19, - 0x87, 0x7e, 0xf6, 0x3b, 0x78, 0x76, 0x2f, 0xa5, 0xd3, 0xe6, 0x1c, 0xf9, 0x95, 0xbc, 0x4f, 0x43, - 0x5e, 0x81, 0x01, 0xf4, 0x7e, 0xc0, 0x02, 0xf9, 0x30, 0xda, 0x41, 0x58, 0x00, 0x73, 0xbc, 0xf2, - 0x62, 0x21, 0x29, 0x79, 0x03, 0x06, 0x6b, 0xa1, 0x9b, 0x97, 0xb8, 0xf3, 0x42, 0xef, 0x52, 0xa9, - 0x64, 0x48, 0xa0, 0xc9, 0xd4, 0xea, 0x77, 0xf3, 0xa1, 0xaa, 0x9f, 0x98, 0xa6, 0x07, 0x32, 0x4d, - 0x7f, 0xa5, 0x00, 0xc3, 0x93, 0xb6, 0xe5, 0xe9, 0x4d, 0xef, 0xe4, 0xfc, 0xe9, 0x20, 0xfb, 0x7a, - 0x52, 0x86, 0xde, 0xa9, 0x75, 0xdd, 0x6c, 0x09, 0xc3, 0x07, 0x63, 0xb2, 0x52, 0x06, 0xd0, 0x38, - 0x9c, 0xdc, 0xc2, 0x48, 0x24, 0x4c, 0xd2, 0x81, 0xaf, 0xcb, 0x48, 0x18, 0xbe, 0x52, 0x42, 0x89, - 0x04, 0xae, 0x1c, 0xc0, 0x47, 0x8e, 0x5c, 0x52, 0xee, 0xb3, 0x93, 0xb3, 0x98, 0x63, 0xd2, 0x67, - 0x5f, 0x2f, 0xc0, 0xb9, 0xfb, 0xb6, 0xb3, 0xd6, 0xb2, 0x75, 0xc3, 0xcf, 0x84, 0x7b, 0x32, 0xe0, - 0x44, 0xe7, 0xfd, 0x19, 0x38, 0x13, 0x97, 0x4d, 0x95, 0x49, 0xa3, 0xb7, 0xfb, 0x75, 0xf5, 0xf8, - 0xf6, 0x56, 0xf9, 0xa9, 0x0d, 0x51, 0x30, 0x4c, 0xc7, 0xcd, 0x2a, 0x4b, 0xbd, 0xc0, 0x4e, 0xad, - 0x24, 0xb5, 0x67, 0x3e, 0x24, 0x0f, 0xf1, 0x1e, 0xf3, 0x9e, 0xf9, 0xb9, 0x7c, 0xb2, 0x67, 0x4e, - 0x26, 0x3c, 0xff, 0x62, 0xbd, 0x08, 0x70, 0xcb, 0xf4, 0x44, 0x4c, 0xc0, 0x63, 0xee, 0x7b, 0x2a, - 0x79, 0xe4, 0x14, 0xf7, 0xe5, 0x91, 0x13, 0xbe, 0xf4, 0xef, 0xdd, 0xc7, 0x4b, 0xff, 0xb7, 0xa1, - 0x4f, 0xc8, 0x51, 0x98, 0xfb, 0xe7, 0xc3, 0xaf, 0x40, 0x70, 0x56, 0xf5, 0xbe, 0xf4, 0x9f, 0x85, - 0x3e, 0x91, 0xf6, 0x5b, 0x98, 0xe3, 0xe8, 0xe9, 0x2a, 0x40, 0x9a, 0xff, 0x07, 0xb9, 0x04, 0x18, - 0xc8, 0x59, 0x76, 0x44, 0xe5, 0x81, 0x9d, 0xd9, 0xbf, 0xa4, 0x06, 0x7d, 0xc2, 0xbf, 0x51, 0x01, - 0x7c, 0x45, 0x13, 0xa8, 0x65, 0xd8, 0xcf, 0xdc, 0xcd, 0x91, 0x1f, 0x75, 0x09, 0x62, 0xf9, 0x79, - 0x91, 0x00, 0xa9, 0xbf, 0x9b, 0x83, 0xb1, 0x78, 0x21, 0xf2, 0x3c, 0x94, 0xf8, 0x5f, 0xc2, 0xb0, - 0xc7, 0x20, 0x5c, 0xbc, 0x84, 0x1c, 0x84, 0x4b, 0x50, 0xbf, 0x0c, 0x03, 0x9a, 0xef, 0xb4, 0x2a, - 0x27, 0xe9, 0x0e, 0x3c, 0x59, 0x65, 0x4f, 0xa3, 0x80, 0x92, 0x3c, 0x03, 0x85, 0x85, 0x96, 0x9f, - 0x9b, 0x1b, 0xbd, 0x69, 0xed, 0x96, 0x1c, 0x61, 0x8c, 0x61, 0x19, 0xd1, 0x3c, 0xdd, 0x10, 0x6e, - 0x69, 0x48, 0x64, 0xd1, 0x0d, 0x99, 0x68, 0x9e, 0x6e, 0x3c, 0x37, 0xc7, 0x37, 0x61, 0x77, 0x4c, - 0xcb, 0x20, 0x17, 0xe0, 0xec, 0xdd, 0xfa, 0x94, 0xd6, 0xb8, 0x53, 0x9b, 0xaf, 0x36, 0xee, 0xce, - 0xd7, 0x17, 0xa7, 0x26, 0x6b, 0xd3, 0xb5, 0xa9, 0xea, 0x58, 0x0f, 0x39, 0x0d, 0xa3, 0x21, 0x6a, - 0xe6, 0xee, 0x5c, 0x65, 0x7e, 0x2c, 0x47, 0x4e, 0xc1, 0x70, 0x08, 0x9c, 0x58, 0x58, 0x1a, 0xcb, - 0x3f, 0xf7, 0x71, 0x18, 0xc4, 0x87, 0x17, 0xe2, 0xf3, 0x86, 0xa0, 0x7f, 0x61, 0xa2, 0x3e, 0xa5, - 0xdd, 0x43, 0x26, 0x00, 0xa5, 0xea, 0xd4, 0x3c, 0x63, 0x98, 0x7b, 0xee, 0xff, 0xc9, 0x01, 0xd4, - 0xa7, 0x97, 0x16, 0x05, 0xe1, 0x20, 0xf4, 0xd5, 0xe6, 0xef, 0x55, 0x66, 0x6b, 0x8c, 0xae, 0x1f, - 0x8a, 0x0b, 0x8b, 0x53, 0xac, 0x86, 0x01, 0xe8, 0x9d, 0x9c, 0x5d, 0xa8, 0x4f, 0x8d, 0xe5, 0x19, - 0x50, 0x9b, 0xaa, 0x54, 0xc7, 0x0a, 0x0c, 0x78, 0x5f, 0xab, 0x2d, 0x4d, 0x8d, 0x15, 0xd9, 0x9f, - 0xb3, 0xf5, 0xa5, 0xca, 0xd2, 0x58, 0x2f, 0xfb, 0x73, 0x1a, 0xff, 0x2c, 0x31, 0x66, 0xf5, 0xa9, - 0x25, 0xfc, 0xd1, 0xc7, 0x9a, 0x30, 0xed, 0xff, 0xea, 0x67, 0x28, 0xc6, 0xba, 0x5a, 0xd3, 0xc6, - 0x06, 0xd8, 0x0f, 0xc6, 0x92, 0xfd, 0x00, 0xd6, 0x38, 0x6d, 0x6a, 0x6e, 0xe1, 0xde, 0xd4, 0xd8, - 0x20, 0xe3, 0x35, 0x77, 0x87, 0x81, 0x87, 0xd8, 0x9f, 0xda, 0x1c, 0xfb, 0x73, 0x98, 0x71, 0xd2, - 0xa6, 0x2a, 0xb3, 0x8b, 0x95, 0xa5, 0x99, 0xb1, 0x11, 0xd6, 0x1e, 0xe4, 0x39, 0xca, 0x4b, 0xce, - 0x57, 0xe6, 0xa6, 0xc6, 0xc6, 0x04, 0x4d, 0x75, 0xb6, 0x36, 0x7f, 0x67, 0xec, 0x14, 0x36, 0xe4, - 0xdd, 0x39, 0xfc, 0x41, 0x58, 0x01, 0xfc, 0xeb, 0xf4, 0x73, 0x3f, 0x00, 0xa5, 0x85, 0x3a, 0xee, - 0xcf, 0xce, 0xc3, 0xe9, 0x85, 0x7a, 0x63, 0xe9, 0xdd, 0xc5, 0xa9, 0x98, 0xbc, 0x4f, 0xc1, 0xb0, - 0x8f, 0x98, 0xad, 0xcd, 0xdf, 0xfd, 0x2c, 0x97, 0xb6, 0x0f, 0x9a, 0xab, 0x4c, 0x2e, 0xd4, 0xc7, - 0xf2, 0xac, 0x57, 0x7c, 0xd0, 0xfd, 0xda, 0x7c, 0x75, 0xe1, 0x7e, 0x7d, 0xac, 0xf0, 0xdc, 0x43, - 0x18, 0xe2, 0x19, 0xe4, 0x17, 0x1c, 0x73, 0xc5, 0xb4, 0xc8, 0x65, 0xb8, 0x50, 0x9d, 0xba, 0x57, - 0x9b, 0x9c, 0x6a, 0x2c, 0x68, 0xb5, 0x5b, 0xb5, 0xf9, 0x58, 0x4d, 0x67, 0xe1, 0x54, 0x14, 0x5d, - 0x59, 0xac, 0x8d, 0xe5, 0xc8, 0x39, 0x20, 0x51, 0xf0, 0xed, 0xca, 0xdc, 0xf4, 0x58, 0x9e, 0x28, - 0x70, 0x26, 0x0a, 0xaf, 0xcd, 0x2f, 0xdd, 0x9d, 0x9f, 0x1a, 0x2b, 0x3c, 0xf7, 0xd7, 0x72, 0x70, - 0x36, 0x35, 0xcb, 0x08, 0x51, 0xe1, 0xc9, 0xa9, 0xd9, 0x4a, 0x7d, 0xa9, 0x36, 0x59, 0x9f, 0xaa, - 0x68, 0x93, 0x33, 0x8d, 0xc9, 0xca, 0xd2, 0xd4, 0xad, 0x05, 0xed, 0xdd, 0xc6, 0xad, 0xa9, 0xf9, - 0x29, 0xad, 0x32, 0x3b, 0xd6, 0x43, 0x9e, 0x81, 0x72, 0x06, 0x4d, 0x7d, 0x6a, 0xf2, 0xae, 0x56, - 0x5b, 0x7a, 0x77, 0x2c, 0x47, 0x9e, 0x86, 0xcb, 0x99, 0x44, 0xec, 0xf7, 0x58, 0x9e, 0x3c, 0x09, - 0x17, 0xb3, 0x48, 0xde, 0x99, 0x1d, 0x2b, 0x3c, 0xf7, 0xb3, 0x39, 0x20, 0xc9, 0x34, 0x11, 0xe4, - 0x29, 0xb8, 0xc4, 0xf4, 0xa2, 0x91, 0xdd, 0xc0, 0xa7, 0xe1, 0x72, 0x2a, 0x85, 0xd4, 0xbc, 0x32, - 0x3c, 0x91, 0x41, 0x22, 0x1a, 0x77, 0x09, 0x94, 0x74, 0x02, 0x6c, 0xda, 0xaf, 0xe5, 0xe0, 0x6c, - 0xaa, 0x6f, 0x36, 0xb9, 0x0a, 0x1f, 0xab, 0x54, 0xe7, 0x58, 0xdf, 0x4c, 0x2e, 0xd5, 0x16, 0xe6, - 0xeb, 0x8d, 0xb9, 0xe9, 0x4a, 0x83, 0x69, 0xdf, 0xdd, 0x7a, 0xac, 0x37, 0xaf, 0x80, 0xda, 0x85, - 0x72, 0x72, 0xa6, 0x32, 0x7f, 0x8b, 0x0d, 0x3f, 0xf2, 0x31, 0x78, 0x2a, 0x93, 0x6e, 0x6a, 0xbe, - 0x32, 0x31, 0x3b, 0x55, 0x1d, 0xcb, 0x93, 0x67, 0xe1, 0xe9, 0x4c, 0xaa, 0x6a, 0xad, 0xce, 0xc9, - 0x0a, 0xcf, 0xe9, 0x11, 0xf3, 0x9d, 0x7d, 0xe5, 0xe4, 0xc2, 0xfc, 0x52, 0x65, 0x72, 0x29, 0x4d, - 0xb3, 0x2f, 0xc0, 0xd9, 0x08, 0x76, 0xe2, 0x6e, 0xbd, 0x36, 0x3f, 0x55, 0xaf, 0x8f, 0xe5, 0x12, - 0xa8, 0x40, 0xb4, 0xf9, 0x89, 0xea, 0x77, 0xff, 0xe7, 0x27, 0x7b, 0xbe, 0xfb, 0xc7, 0x4f, 0xe6, - 0xfe, 0xf0, 0x8f, 0x9f, 0xcc, 0xfd, 0xb3, 0x3f, 0x7e, 0x32, 0xf7, 0xb9, 0x1b, 0x7b, 0xc9, 0x30, - 0xc2, 0x67, 0xf8, 0xe5, 0x12, 0x5a, 0x50, 0x2f, 0xfd, 0xeb, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3b, - 0xb1, 0xee, 0xca, 0xd1, 0x8f, 0x01, 0x00, + // 17484 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x74, 0x24, 0x49, + 0x72, 0x18, 0x86, 0xfe, 0x40, 0x03, 0x08, 0x7c, 0x4c, 0x4f, 0xce, 0x57, 0xcd, 0xec, 0xcc, 0xf6, + 0x6e, 0xed, 0xee, 0xdc, 0xcc, 0xde, 0x2e, 0xe6, 0x76, 0x76, 0x76, 0xf7, 0xf6, 0xeb, 0xf6, 0x1a, + 0x68, 0x60, 0xd0, 0x33, 0xf8, 0xda, 0x6a, 0xcc, 0xcc, 0xed, 0x1d, 0xef, 0x9a, 0x85, 0xae, 0x1c, + 0xa0, 0x76, 0x1a, 0x55, 0xcd, 0xaa, 0xea, 0xc1, 0x60, 0xe5, 0x0f, 0x9e, 0x4c, 0x51, 0xa4, 0x78, + 0x3c, 0x9d, 0x8f, 0x26, 0x8f, 0xa2, 0x64, 0xfb, 0x28, 0x59, 0x36, 0x45, 0x51, 0x3c, 0x53, 0xa6, + 0x49, 0x1e, 0xc9, 0xb3, 0x48, 0x9d, 0x64, 0x9f, 0xc8, 0x67, 0x3e, 0x52, 0xb6, 0x65, 0x3d, 0x5b, + 0xc6, 0xc9, 0xb4, 0xf5, 0x07, 0xcf, 0xf6, 0xe3, 0xb3, 0xf9, 0xac, 0xb3, 0x2c, 0xfb, 0xe9, 0x65, + 0x64, 0x56, 0x55, 0xd6, 0x57, 0xe3, 0x73, 0x85, 0xc5, 0x0d, 0xfe, 0xcc, 0xa0, 0x23, 0x22, 0x23, + 0xb3, 0x22, 0x23, 0x33, 0x23, 0x33, 0x23, 0x23, 0xe0, 0xaa, 0x47, 0xdb, 0xb4, 0x63, 0x3b, 0xde, + 0xb5, 0x36, 0x5d, 0xd1, 0x5b, 0x1b, 0xd7, 0xbc, 0x8d, 0x0e, 0x75, 0xaf, 0xd1, 0x87, 0xd4, 0xf2, + 0xfc, 0xff, 0xc6, 0x3b, 0x8e, 0xed, 0xd9, 0xa4, 0xc4, 0x7f, 0x5d, 0x38, 0xbd, 0x62, 0xaf, 0xd8, + 0x08, 0xba, 0xc6, 0xfe, 0xe2, 0xd8, 0x0b, 0x17, 0x57, 0x6c, 0x7b, 0xa5, 0x4d, 0xaf, 0xe1, 0xaf, + 0xe5, 0xee, 0xfd, 0x6b, 0xae, 0xe7, 0x74, 0x5b, 0x9e, 0xc0, 0x56, 0xe2, 0x58, 0xcf, 0x5c, 0xa3, + 0xae, 0xa7, 0xaf, 0x75, 0x04, 0xc1, 0x93, 0x71, 0x82, 0x75, 0x47, 0xef, 0x74, 0xa8, 0x23, 0x2a, + 0xbf, 0xf0, 0xb1, 0xa0, 0x9d, 0x7a, 0xab, 0x45, 0x5d, 0xb7, 0x6d, 0xba, 0xde, 0xb5, 0x87, 0x2f, + 0x49, 0xbf, 0x04, 0xe1, 0xd3, 0xe9, 0x1f, 0x84, 0xff, 0x0a, 0x92, 0x17, 0xd3, 0x49, 0xfc, 0x1a, + 0x63, 0x55, 0xab, 0x5f, 0xcd, 0xc3, 0xe0, 0x1c, 0xf5, 0x74, 0x43, 0xf7, 0x74, 0x72, 0x11, 0xfa, + 0xeb, 0x96, 0x41, 0x1f, 0x29, 0xb9, 0xa7, 0x72, 0x57, 0x0a, 0x13, 0xa5, 0xad, 0xcd, 0x4a, 0x9e, + 0x9a, 0x1a, 0x07, 0x92, 0x4b, 0x50, 0x5c, 0xda, 0xe8, 0x50, 0x25, 0xff, 0x54, 0xee, 0xca, 0xd0, + 0xc4, 0xd0, 0xd6, 0x66, 0xa5, 0x1f, 0x85, 0xa6, 0x21, 0x98, 0x3c, 0x0d, 0xf9, 0x7a, 0x4d, 0x29, + 0x20, 0xf2, 0xe4, 0xd6, 0x66, 0x65, 0xb4, 0x6b, 0x1a, 0x2f, 0xd8, 0x6b, 0xa6, 0x47, 0xd7, 0x3a, + 0xde, 0x86, 0x96, 0xaf, 0xd7, 0xc8, 0x65, 0x28, 0x4e, 0xda, 0x06, 0x55, 0x8a, 0x48, 0x44, 0xb6, + 0x36, 0x2b, 0x63, 0x2d, 0xdb, 0xa0, 0x12, 0x15, 0xe2, 0xc9, 0xa7, 0xa1, 0xb8, 0x64, 0xae, 0x51, + 0xa5, 0xff, 0xa9, 0xdc, 0x95, 0xe1, 0xeb, 0x17, 0xc6, 0xb9, 0xf8, 0xc6, 0x7d, 0xf1, 0x8d, 0x2f, + 0xf9, 0xf2, 0x9d, 0x28, 0x7f, 0x67, 0xb3, 0xd2, 0xb7, 0xb5, 0x59, 0x29, 0x32, 0x91, 0x7f, 0xe5, + 0xbb, 0x95, 0x9c, 0x86, 0x25, 0xc9, 0x5b, 0x30, 0x3c, 0xd9, 0xee, 0xba, 0x1e, 0x75, 0xe6, 0xf5, + 0x35, 0xaa, 0x94, 0xb0, 0xc2, 0x0b, 0x5b, 0x9b, 0x95, 0xb3, 0x2d, 0x0e, 0x6e, 0x5a, 0xfa, 0x9a, + 0x5c, 0xb1, 0x4c, 0xae, 0xfe, 0x46, 0x0e, 0x4e, 0x34, 0xa8, 0xeb, 0x9a, 0xb6, 0x15, 0xc8, 0xe6, + 0x39, 0x18, 0x12, 0xa0, 0x7a, 0x0d, 0xe5, 0x33, 0x34, 0x31, 0xb0, 0xb5, 0x59, 0x29, 0xb8, 0xa6, + 0xa1, 0x85, 0x18, 0xf2, 0x09, 0x18, 0xb8, 0x67, 0x7a, 0xab, 0x73, 0xd3, 0x55, 0x21, 0xa7, 0xb3, + 0x5b, 0x9b, 0x15, 0xb2, 0x6e, 0x7a, 0xab, 0xcd, 0xb5, 0xfb, 0xba, 0x54, 0xa1, 0x4f, 0x46, 0x66, + 0xa1, 0xbc, 0xe8, 0x98, 0x0f, 0x75, 0x8f, 0xde, 0xa6, 0x1b, 0x8b, 0x76, 0xdb, 0x6c, 0x6d, 0x08, + 0x29, 0x3e, 0xb5, 0xb5, 0x59, 0xb9, 0xd8, 0xe1, 0xb8, 0xe6, 0x03, 0xba, 0xd1, 0xec, 0x20, 0x56, + 0x62, 0x92, 0x28, 0xa9, 0xfe, 0x66, 0x09, 0x46, 0xee, 0xb8, 0xd4, 0x09, 0xda, 0x7d, 0x19, 0x8a, + 0xec, 0xb7, 0x68, 0x32, 0xca, 0xbc, 0xeb, 0x52, 0x47, 0x96, 0x39, 0xc3, 0x93, 0xab, 0xd0, 0x3f, + 0x6b, 0xaf, 0x98, 0x96, 0x68, 0xf6, 0xa9, 0xad, 0xcd, 0xca, 0x89, 0x36, 0x03, 0x48, 0x94, 0x9c, + 0x82, 0x7c, 0x0a, 0x46, 0xea, 0x6b, 0x4c, 0x87, 0x6c, 0x4b, 0xf7, 0x6c, 0x47, 0xb4, 0x16, 0xa5, + 0x6b, 0x4a, 0x70, 0xa9, 0x60, 0x84, 0x9e, 0xbc, 0x01, 0x50, 0xbd, 0xd7, 0xd0, 0xec, 0x36, 0xad, + 0x6a, 0xf3, 0x42, 0x19, 0xb0, 0xb4, 0xbe, 0xee, 0x36, 0x1d, 0xbb, 0x4d, 0x9b, 0xba, 0x23, 0x57, + 0x2b, 0x51, 0x93, 0x29, 0x18, 0xab, 0xe2, 0xa8, 0xd0, 0xe8, 0x0f, 0x75, 0xa9, 0xeb, 0xb9, 0x4a, + 0xff, 0x53, 0x85, 0x2b, 0x43, 0x13, 0x97, 0xb6, 0x36, 0x2b, 0xe7, 0xf9, 0x78, 0x69, 0x3a, 0x02, + 0x25, 0xb1, 0x88, 0x15, 0x22, 0x13, 0x30, 0x5a, 0xfd, 0xa0, 0xeb, 0xd0, 0xba, 0x41, 0x2d, 0xcf, + 0xf4, 0x36, 0x84, 0x86, 0x5c, 0xdc, 0xda, 0xac, 0x28, 0x3a, 0x43, 0x34, 0x4d, 0x81, 0x91, 0x98, + 0x44, 0x8b, 0x90, 0x05, 0x38, 0x79, 0x73, 0x72, 0xb1, 0x41, 0x9d, 0x87, 0x66, 0x8b, 0x56, 0x5b, + 0x2d, 0xbb, 0x6b, 0x79, 0xca, 0x00, 0xf2, 0x79, 0x7a, 0x6b, 0xb3, 0x72, 0x69, 0xa5, 0xd5, 0x69, + 0xba, 0x1c, 0xdb, 0xd4, 0x39, 0x5a, 0x62, 0x96, 0x2c, 0x4b, 0x3e, 0x0b, 0xa3, 0x4b, 0x0e, 0xd3, + 0x42, 0xa3, 0x46, 0x19, 0x5c, 0x19, 0x44, 0xfd, 0x3f, 0x3b, 0x2e, 0x66, 0x2a, 0x0e, 0xf5, 0x7b, + 0x96, 0x37, 0xd6, 0xe3, 0x05, 0x9a, 0x06, 0xe2, 0xe4, 0xc6, 0x46, 0x58, 0x11, 0x0a, 0x0a, 0xfb, + 0x78, 0xd3, 0xa1, 0x46, 0x42, 0xdb, 0x86, 0xb0, 0xcd, 0x57, 0xb7, 0x36, 0x2b, 0xcf, 0x39, 0x82, + 0xa6, 0xd9, 0x53, 0xed, 0x32, 0x59, 0x91, 0x29, 0x18, 0x64, 0xda, 0x74, 0xdb, 0xb4, 0x0c, 0x05, + 0x9e, 0xca, 0x5d, 0x19, 0xbb, 0x5e, 0xf6, 0x5b, 0xef, 0xc3, 0x27, 0xce, 0x6d, 0x6d, 0x56, 0x4e, + 0x31, 0x1d, 0x6c, 0x3e, 0x30, 0x2d, 0x79, 0x8a, 0x08, 0x8a, 0xb2, 0x51, 0x34, 0x61, 0x7b, 0x38, + 0x74, 0x87, 0xc3, 0x51, 0xb4, 0x6c, 0x7b, 0xf1, 0x61, 0xeb, 0x93, 0x91, 0x49, 0x18, 0x9d, 0xb0, + 0xbd, 0xba, 0xe5, 0x7a, 0xba, 0xd5, 0xa2, 0xf5, 0x9a, 0x32, 0x82, 0xe5, 0x50, 0x2d, 0x58, 0x39, + 0x53, 0x60, 0x9a, 0x91, 0x49, 0x29, 0x5a, 0x46, 0xfd, 0xe7, 0x45, 0x18, 0x63, 0x7d, 0x22, 0x0d, + 0x9f, 0x2a, 0x9b, 0x09, 0x18, 0x84, 0xd5, 0xe2, 0x76, 0xf4, 0x16, 0x15, 0x23, 0x09, 0xbf, 0xc2, + 0xf2, 0x81, 0x12, 0xcf, 0x38, 0x3d, 0xb9, 0x0a, 0x83, 0x1c, 0x54, 0xaf, 0x89, 0xc1, 0x35, 0xba, + 0xb5, 0x59, 0x19, 0x72, 0x11, 0xd6, 0x34, 0x0d, 0x2d, 0x40, 0x33, 0xed, 0xe6, 0x7f, 0xcf, 0xd8, + 0xae, 0xc7, 0x98, 0x8b, 0xb1, 0x85, 0x9f, 0x21, 0x0a, 0xac, 0x0a, 0x94, 0xac, 0xdd, 0xd1, 0x42, + 0xe4, 0x75, 0x00, 0x0e, 0xa9, 0x1a, 0x86, 0x23, 0x06, 0xd8, 0xf9, 0xad, 0xcd, 0xca, 0x19, 0xc1, + 0x42, 0x37, 0x0c, 0x79, 0x74, 0x4a, 0xc4, 0x64, 0x0d, 0x46, 0xf8, 0xaf, 0x59, 0x7d, 0x99, 0xb6, + 0xf9, 0xe8, 0x1a, 0xbe, 0x7e, 0xc5, 0xef, 0xc4, 0xa8, 0x74, 0xc6, 0x65, 0xd2, 0x29, 0xcb, 0x73, + 0x36, 0x26, 0x2a, 0x62, 0x42, 0x3e, 0x27, 0xaa, 0x6a, 0x23, 0x4e, 0x9e, 0x0a, 0xe4, 0x32, 0x6c, + 0x9e, 0x9e, 0xb6, 0x9d, 0x75, 0xdd, 0x31, 0xa8, 0x31, 0xb1, 0x21, 0xcf, 0xd3, 0xf7, 0x7d, 0x70, + 0x73, 0x59, 0x56, 0x3d, 0x99, 0x9c, 0x75, 0x3a, 0xe7, 0xd6, 0xe8, 0x2e, 0xa3, 0xca, 0x0d, 0x24, + 0xa4, 0xe5, 0x76, 0x97, 0xe3, 0x6a, 0x16, 0x2d, 0xc3, 0xa6, 0x02, 0x0e, 0xb8, 0x4b, 0x1d, 0x36, + 0x89, 0xe3, 0xa8, 0x13, 0x53, 0x81, 0x60, 0xf2, 0x90, 0x63, 0x92, 0x3c, 0x44, 0x91, 0x0b, 0xef, + 0xc0, 0xc9, 0x84, 0x28, 0x48, 0x19, 0x0a, 0x0f, 0xe8, 0x06, 0x57, 0x17, 0x8d, 0xfd, 0x49, 0x4e, + 0x43, 0xff, 0x43, 0xbd, 0xdd, 0x15, 0x4b, 0xa8, 0xc6, 0x7f, 0xbc, 0x91, 0xff, 0x64, 0x8e, 0xad, + 0x38, 0x64, 0xd2, 0xb6, 0x2c, 0xda, 0xf2, 0xe4, 0x45, 0xe7, 0x55, 0x18, 0x9a, 0xb5, 0x5b, 0x7a, + 0x1b, 0xfb, 0x91, 0xeb, 0x9d, 0xb2, 0xb5, 0x59, 0x39, 0xcd, 0x3a, 0x70, 0xbc, 0xcd, 0x30, 0x52, + 0x9b, 0x42, 0x52, 0xa6, 0x00, 0x1a, 0x5d, 0xb3, 0x3d, 0x8a, 0x05, 0xf3, 0xa1, 0x02, 0x60, 0x41, + 0x07, 0x51, 0xb2, 0x02, 0x84, 0xc4, 0xe4, 0x1a, 0x0c, 0x2e, 0xb2, 0x75, 0xb6, 0x65, 0xb7, 0x85, + 0xf2, 0xe1, 0x52, 0x80, 0x6b, 0xaf, 0x3c, 0x56, 0x7d, 0x22, 0x75, 0x06, 0xc6, 0x26, 0xdb, 0x26, + 0xb5, 0x3c, 0xb9, 0xd5, 0x6c, 0x24, 0x57, 0x57, 0xa8, 0xe5, 0xc9, 0xad, 0xc6, 0x31, 0xaf, 0x33, + 0xa8, 0xdc, 0xea, 0x80, 0x54, 0xfd, 0x83, 0x02, 0x9c, 0xbf, 0xdd, 0x5d, 0xa6, 0x8e, 0x45, 0x3d, + 0xea, 0x8a, 0x05, 0x39, 0xe0, 0x3a, 0x0f, 0x27, 0x13, 0x48, 0xc1, 0x1d, 0x17, 0xca, 0x07, 0x01, + 0xb2, 0x29, 0xd6, 0x78, 0x79, 0xb6, 0x4d, 0x14, 0x25, 0x33, 0x70, 0x22, 0x04, 0xb2, 0x46, 0xb8, + 0x4a, 0x1e, 0x97, 0x92, 0x27, 0xb7, 0x36, 0x2b, 0x17, 0x24, 0x6e, 0xac, 0xd9, 0xb2, 0x06, 0xc7, + 0x8b, 0x91, 0xdb, 0x50, 0x0e, 0x41, 0x37, 0x1d, 0xbb, 0xdb, 0x71, 0x95, 0x02, 0xb2, 0xaa, 0x6c, + 0x6d, 0x56, 0x9e, 0x90, 0x58, 0xad, 0x20, 0x52, 0x5e, 0xc0, 0xe3, 0x05, 0xc9, 0x8f, 0xe4, 0x64, + 0x6e, 0x62, 0x14, 0x16, 0x71, 0x14, 0xbe, 0xe6, 0x8f, 0xc2, 0x4c, 0x21, 0x8d, 0xc7, 0x4b, 0x8a, + 0x41, 0x19, 0x6b, 0x46, 0x62, 0x50, 0x26, 0x6a, 0xbc, 0x30, 0x09, 0x67, 0x52, 0x79, 0xed, 0x4a, + 0xab, 0xff, 0x59, 0x41, 0xe6, 0xb2, 0x68, 0x1b, 0x41, 0x67, 0x2e, 0xc8, 0x9d, 0xb9, 0x68, 0x1b, + 0x38, 0xd5, 0xe7, 0xc2, 0xb5, 0x53, 0x6a, 0x6c, 0xc7, 0x36, 0xe2, 0xb3, 0x7e, 0xb2, 0x2c, 0xf9, + 0x02, 0x9c, 0x4d, 0x00, 0xf9, 0x74, 0xcd, 0xb5, 0xff, 0xf2, 0xd6, 0x66, 0x45, 0x4d, 0xe1, 0x1a, + 0x9f, 0xbd, 0x33, 0xb8, 0x10, 0x1d, 0xce, 0x49, 0x52, 0xb7, 0x2d, 0x4f, 0x37, 0x2d, 0x61, 0x5c, + 0xf2, 0x51, 0xf2, 0xb1, 0xad, 0xcd, 0xca, 0x33, 0xb2, 0x0e, 0xfa, 0x34, 0xf1, 0xc6, 0x67, 0xf1, + 0x21, 0x06, 0x28, 0x29, 0xa8, 0xfa, 0x9a, 0xbe, 0xe2, 0x5b, 0xcc, 0x57, 0xb6, 0x36, 0x2b, 0xcf, + 0xa6, 0xd6, 0x61, 0x32, 0x2a, 0x79, 0x85, 0xce, 0xe2, 0x44, 0x34, 0x20, 0x21, 0x6e, 0xde, 0x36, + 0x28, 0x7e, 0x43, 0x3f, 0xf2, 0x57, 0xb7, 0x36, 0x2b, 0x4f, 0x4a, 0xfc, 0x2d, 0xdb, 0xa0, 0xf1, + 0xe6, 0xa7, 0x94, 0x56, 0x7f, 0xa3, 0x00, 0x4f, 0x36, 0xaa, 0x73, 0xb3, 0x75, 0xc3, 0x37, 0x69, + 0x16, 0x1d, 0xfb, 0xa1, 0x69, 0x48, 0xa3, 0x77, 0x19, 0xce, 0xc5, 0x50, 0x53, 0x68, 0x45, 0x05, + 0xc6, 0x34, 0x7e, 0x9b, 0x6f, 0x2e, 0x75, 0x04, 0x4d, 0x93, 0x9b, 0x5a, 0xd1, 0x45, 0x3b, 0x8b, + 0x11, 0xeb, 0xa3, 0x18, 0xaa, 0xb1, 0x6a, 0x3b, 0x5e, 0xab, 0xeb, 0x09, 0x25, 0xc0, 0x3e, 0x4a, + 0xd4, 0xe1, 0x0a, 0xa2, 0x1e, 0x55, 0xf8, 0x7c, 0xc8, 0x8f, 0xe7, 0xa0, 0x5c, 0xf5, 0x3c, 0xc7, + 0x5c, 0xee, 0x7a, 0x74, 0x4e, 0xef, 0x74, 0x4c, 0x6b, 0x05, 0xc7, 0xfa, 0xf0, 0xf5, 0xb7, 0x82, + 0x35, 0xb2, 0xa7, 0x24, 0xc6, 0xe3, 0xc5, 0xa5, 0x21, 0xaa, 0xfb, 0xa8, 0xe6, 0x1a, 0xc7, 0xc9, + 0x43, 0x34, 0x5e, 0x8e, 0x0d, 0xd1, 0x54, 0x5e, 0xbb, 0x1a, 0xa2, 0x5f, 0x2d, 0xc0, 0xc5, 0x85, + 0x07, 0x9e, 0xae, 0x51, 0xd7, 0xee, 0x3a, 0x2d, 0xea, 0xde, 0xe9, 0x18, 0xba, 0x47, 0xc3, 0x91, + 0x5a, 0x81, 0xfe, 0xaa, 0x61, 0x50, 0x03, 0xd9, 0xf5, 0xf3, 0x6d, 0x9f, 0xce, 0x00, 0x1a, 0x87, + 0x93, 0xe7, 0x60, 0x40, 0x94, 0x41, 0xee, 0xfd, 0x13, 0xc3, 0x5b, 0x9b, 0x95, 0x81, 0x2e, 0x07, + 0x69, 0x3e, 0x8e, 0x91, 0xd5, 0x68, 0x9b, 0x32, 0xb2, 0x42, 0x48, 0x66, 0x70, 0x90, 0xe6, 0xe3, + 0xc8, 0xbb, 0x30, 0x86, 0x6c, 0x83, 0xf6, 0x88, 0xb9, 0xef, 0xb4, 0x2f, 0x5d, 0xb9, 0xb1, 0x7c, + 0x69, 0xc2, 0xd6, 0x34, 0x1d, 0xbf, 0x80, 0x16, 0x63, 0x40, 0xee, 0x41, 0x59, 0x34, 0x22, 0x64, + 0xda, 0xdf, 0x83, 0xe9, 0x99, 0xad, 0xcd, 0xca, 0x49, 0xd1, 0x7e, 0x89, 0x6d, 0x82, 0x09, 0x63, + 0x2c, 0x9a, 0x1d, 0x32, 0x2e, 0x6d, 0xc7, 0x58, 0x7c, 0xb1, 0xcc, 0x38, 0xce, 0x44, 0x7d, 0x0f, + 0x46, 0xe4, 0x82, 0xe4, 0x2c, 0x6e, 0xad, 0xf9, 0x38, 0xc1, 0x4d, 0xb9, 0x69, 0xe0, 0x7e, 0xfa, + 0x25, 0x18, 0xae, 0x51, 0xb7, 0xe5, 0x98, 0x1d, 0x66, 0x35, 0x08, 0x25, 0x3f, 0xb1, 0xb5, 0x59, + 0x19, 0x36, 0x42, 0xb0, 0x26, 0xd3, 0xa8, 0xff, 0x77, 0x0e, 0xce, 0x32, 0xde, 0x55, 0xd7, 0x35, + 0x57, 0xac, 0x35, 0x79, 0xd9, 0x7e, 0x01, 0x4a, 0x0d, 0xac, 0x4f, 0xd4, 0x74, 0x7a, 0x6b, 0xb3, + 0x52, 0xe6, 0x2d, 0x90, 0xf4, 0x50, 0xd0, 0x04, 0xfb, 0xca, 0xfc, 0x36, 0xfb, 0x4a, 0x66, 0xd2, + 0x7a, 0xba, 0xe3, 0x99, 0xd6, 0x4a, 0xc3, 0xd3, 0xbd, 0xae, 0x1b, 0x31, 0x69, 0x05, 0xa6, 0xe9, + 0x22, 0x2a, 0x62, 0xd2, 0x46, 0x0a, 0x91, 0x77, 0x60, 0x64, 0xca, 0x32, 0x42, 0x26, 0x7c, 0x42, + 0x7c, 0x82, 0x59, 0x9a, 0x14, 0xe1, 0x49, 0x16, 0x91, 0x02, 0xea, 0xdf, 0xca, 0x81, 0xc2, 0x37, + 0x81, 0xb3, 0xa6, 0xeb, 0xcd, 0xd1, 0xb5, 0x65, 0x69, 0x76, 0x9a, 0xf6, 0x77, 0x95, 0x0c, 0x27, + 0xad, 0x45, 0x68, 0x0a, 0x88, 0x5d, 0x65, 0xdb, 0x74, 0x13, 0xdb, 0x8f, 0x58, 0x29, 0x52, 0x87, + 0x01, 0xce, 0x99, 0xdb, 0x12, 0xc3, 0xd7, 0x15, 0x5f, 0x11, 0xe2, 0x55, 0x73, 0x65, 0x58, 0xe3, + 0xc4, 0xf2, 0x86, 0x46, 0x94, 0x57, 0xbf, 0x5e, 0x80, 0x72, 0xbc, 0x10, 0xb9, 0x07, 0x83, 0xb7, + 0x6c, 0xd3, 0xa2, 0xc6, 0x82, 0x85, 0x2d, 0xec, 0x7d, 0x38, 0xe2, 0xdb, 0xe2, 0xa7, 0xde, 0xc7, + 0x32, 0x4d, 0xd9, 0x82, 0xc5, 0xb3, 0x92, 0x80, 0x19, 0xf9, 0x2c, 0x0c, 0x31, 0x1b, 0xf0, 0x21, + 0x72, 0xce, 0x6f, 0xcb, 0xf9, 0x29, 0xc1, 0xf9, 0xb4, 0xc3, 0x0b, 0x25, 0x59, 0x87, 0xec, 0x98, + 0x5e, 0x69, 0x54, 0x77, 0x6d, 0x4b, 0xf4, 0x3c, 0xea, 0x95, 0x83, 0x10, 0x59, 0xaf, 0x38, 0x0d, + 0x33, 0x5d, 0xf9, 0xc7, 0x62, 0x37, 0x48, 0x7b, 0x17, 0x2e, 0xab, 0x78, 0x0f, 0x48, 0xc4, 0xc4, + 0x82, 0x13, 0x42, 0xa0, 0xab, 0x66, 0x07, 0xad, 0x7e, 0x5c, 0xd7, 0xc6, 0xae, 0x5f, 0x1e, 0xf7, + 0x0f, 0xc5, 0xc6, 0xa5, 0x23, 0xb5, 0x87, 0x2f, 0x8d, 0xcf, 0x05, 0xe4, 0xb8, 0x33, 0x45, 0x9d, + 0x8c, 0xb1, 0x90, 0x7b, 0x7b, 0x2d, 0x42, 0xae, 0xfe, 0x68, 0x1e, 0x5e, 0x0c, 0xbb, 0x48, 0xa3, + 0x0f, 0x4d, 0xba, 0x1e, 0x72, 0x14, 0x7b, 0x64, 0x36, 0xc4, 0xdc, 0xc9, 0x55, 0xdd, 0x5a, 0xa1, + 0x06, 0xb9, 0x0a, 0xfd, 0x9a, 0xdd, 0xa6, 0xae, 0x92, 0x43, 0xf3, 0x10, 0xa7, 0x2f, 0x87, 0x01, + 0xe4, 0x43, 0x16, 0xa4, 0x20, 0x36, 0x94, 0x96, 0x1c, 0xdd, 0xf4, 0x7c, 0x4d, 0xaa, 0x26, 0x35, + 0x69, 0x07, 0x35, 0x8e, 0x73, 0x1e, 0x7c, 0x8d, 0x41, 0xc1, 0x7b, 0x08, 0x90, 0x05, 0xcf, 0x49, + 0x2e, 0xbc, 0x0e, 0xc3, 0x12, 0xf1, 0xae, 0x16, 0x91, 0x6f, 0x16, 0xe5, 0xb1, 0xe5, 0x37, 0x4b, + 0x8c, 0xad, 0x6b, 0x6c, 0x4c, 0xb8, 0x2e, 0xb3, 0x62, 0xf8, 0xa0, 0x12, 0x9a, 0x8f, 0xa0, 0xa8, + 0xe6, 0x23, 0x88, 0xbc, 0x0c, 0x83, 0x9c, 0x45, 0xb0, 0x5f, 0xc6, 0xbd, 0xb6, 0x83, 0xb0, 0xa8, + 0x29, 0x10, 0x10, 0x92, 0x5f, 0xcc, 0xc1, 0xa5, 0x9e, 0x92, 0x40, 0xe5, 0x1b, 0xbe, 0xfe, 0xca, + 0x9e, 0xc4, 0x38, 0xf1, 0xe2, 0xd6, 0x66, 0xe5, 0xaa, 0xa4, 0x19, 0x8e, 0x44, 0xd3, 0x6c, 0x71, + 0x22, 0xa9, 0x5d, 0xbd, 0x9b, 0xc2, 0x8c, 0x55, 0x5e, 0xe9, 0x34, 0x1e, 0x55, 0x59, 0xad, 0x0d, + 0xbf, 0x91, 0xc5, 0xd0, 0x58, 0x15, 0xdf, 0x7b, 0xdf, 0x27, 0x49, 0xa9, 0x26, 0x83, 0x0b, 0x69, + 0xc1, 0x39, 0x8e, 0xa9, 0xe9, 0x1b, 0x0b, 0xf7, 0xe7, 0x6c, 0xcb, 0x5b, 0xf5, 0x2b, 0xe8, 0x97, + 0xcf, 0x7a, 0xb0, 0x02, 0x43, 0xdf, 0x68, 0xda, 0xf7, 0x9b, 0x6b, 0x8c, 0x2a, 0xa5, 0x8e, 0x2c, + 0x4e, 0x6c, 0x62, 0x17, 0x63, 0xdc, 0x9f, 0xf2, 0x4a, 0xe1, 0x49, 0x9c, 0x3f, 0x2f, 0x24, 0x27, + 0xb8, 0x58, 0x21, 0xb5, 0x0e, 0x23, 0xb3, 0x76, 0xeb, 0x41, 0xa0, 0x2e, 0xaf, 0x43, 0x69, 0x49, + 0x77, 0x56, 0xa8, 0x87, 0xb2, 0x18, 0xbe, 0x7e, 0x72, 0x9c, 0x9f, 0x6e, 0x33, 0x22, 0x8e, 0x98, + 0x18, 0x13, 0xb3, 0x4f, 0xc9, 0xc3, 0xdf, 0x9a, 0x28, 0xa0, 0x7e, 0xb7, 0x1f, 0x46, 0xc4, 0x49, + 0x2c, 0xae, 0x1e, 0xe4, 0x8d, 0xf0, 0x6c, 0x5b, 0x4c, 0x97, 0xc1, 0x69, 0x54, 0x70, 0x8a, 0x36, + 0xc2, 0x98, 0xfd, 0xe1, 0x66, 0x25, 0xb7, 0xb5, 0x59, 0xe9, 0xd3, 0x06, 0xa5, 0x4d, 0x6c, 0xb8, + 0xbe, 0x49, 0x0b, 0xba, 0x7c, 0xb6, 0x1a, 0x2b, 0xcb, 0xd7, 0xbb, 0x77, 0x60, 0x40, 0xb4, 0x41, + 0x68, 0xdc, 0xb9, 0xf0, 0xec, 0x24, 0x72, 0xa2, 0x1c, 0x2b, 0xed, 0x97, 0x22, 0x6f, 0x41, 0x89, + 0x9f, 0x25, 0x08, 0x01, 0x9c, 0x4d, 0x3f, 0x7b, 0x89, 0x15, 0x17, 0x65, 0xc8, 0x0c, 0x40, 0x78, + 0x8e, 0x10, 0x1c, 0xa0, 0x0b, 0x0e, 0xc9, 0x13, 0x86, 0x18, 0x17, 0xa9, 0x2c, 0x79, 0x15, 0x46, + 0x96, 0xa8, 0xb3, 0x66, 0x5a, 0x7a, 0xbb, 0x61, 0x7e, 0xe0, 0x9f, 0xa1, 0xe3, 0x42, 0xef, 0x9a, + 0x1f, 0xc8, 0x23, 0x37, 0x42, 0x47, 0x3e, 0x9f, 0xb6, 0x4f, 0x1f, 0xc0, 0x86, 0x3c, 0xbd, 0xed, + 0x06, 0x36, 0xd6, 0x9e, 0x94, 0x6d, 0xfb, 0xbb, 0x30, 0x1a, 0xd9, 0xa2, 0x89, 0x43, 0xd2, 0x4b, + 0x49, 0xd6, 0xd2, 0x7e, 0x33, 0xc6, 0x36, 0xca, 0x81, 0x69, 0x72, 0xdd, 0x32, 0x3d, 0x53, 0x6f, + 0x4f, 0xda, 0x6b, 0x6b, 0xba, 0x65, 0x28, 0x43, 0xa1, 0x26, 0x9b, 0x1c, 0xd3, 0x6c, 0x71, 0x94, + 0xac, 0xc9, 0xd1, 0x42, 0xe4, 0x36, 0x94, 0x45, 0x1f, 0x6a, 0xb4, 0x65, 0x3b, 0xcc, 0xf6, 0xc0, + 0x33, 0x50, 0x71, 0x0c, 0xe0, 0x72, 0x5c, 0xd3, 0xf1, 0x91, 0xb2, 0x71, 0x1f, 0x2f, 0x78, 0xab, + 0x38, 0x38, 0x5c, 0x1e, 0x89, 0x1f, 0x5b, 0xab, 0x7f, 0xa3, 0x00, 0xc3, 0x82, 0x94, 0x2d, 0xdd, + 0xc7, 0x0a, 0xbe, 0x1f, 0x05, 0x4f, 0x55, 0xd4, 0xd2, 0x41, 0x29, 0xaa, 0xfa, 0xa5, 0x7c, 0x30, + 0x1b, 0x2d, 0x3a, 0xa6, 0xb5, 0xbf, 0xd9, 0xe8, 0x32, 0xc0, 0xe4, 0x6a, 0xd7, 0x7a, 0xc0, 0xaf, + 0xe7, 0xf2, 0xe1, 0xf5, 0x5c, 0xcb, 0xd4, 0x24, 0x0c, 0xb9, 0x04, 0xc5, 0x1a, 0xe3, 0xcf, 0x7a, + 0x66, 0x64, 0x62, 0xe8, 0x3b, 0x9c, 0x53, 0xee, 0x45, 0x0d, 0xc1, 0x6c, 0x33, 0x37, 0xb1, 0xe1, + 0x51, 0x6e, 0x3e, 0x17, 0xf8, 0x66, 0x6e, 0x99, 0x01, 0x34, 0x0e, 0x27, 0x37, 0xe0, 0x64, 0x8d, + 0xb6, 0xf5, 0x8d, 0x39, 0xb3, 0xdd, 0x36, 0x5d, 0xda, 0xb2, 0x2d, 0xc3, 0x45, 0x21, 0x8b, 0xea, + 0xd6, 0x5c, 0x2d, 0x49, 0x40, 0x54, 0x28, 0x2d, 0xdc, 0xbf, 0xef, 0x52, 0x0f, 0xc5, 0x57, 0x98, + 0x00, 0x36, 0x39, 0xdb, 0x08, 0xd1, 0x04, 0x46, 0xfd, 0x46, 0x8e, 0xed, 0x96, 0xdc, 0x07, 0x9e, + 0xdd, 0x09, 0xb4, 0x7c, 0x5f, 0x22, 0xb9, 0x1a, 0xda, 0x15, 0x79, 0xfc, 0xda, 0x13, 0xe2, 0x6b, + 0x07, 0x84, 0x6d, 0x11, 0x5a, 0x14, 0xa9, 0x5f, 0x55, 0xd8, 0xe6, 0xab, 0xd4, 0x3f, 0xc9, 0xc3, + 0x39, 0xd1, 0xe2, 0xc9, 0xb6, 0xd9, 0x59, 0xb6, 0x75, 0xc7, 0xd0, 0x68, 0x8b, 0x9a, 0x0f, 0xe9, + 0xd1, 0x1c, 0x78, 0xd1, 0xa1, 0x53, 0xdc, 0xc7, 0xd0, 0xb9, 0x8e, 0x1b, 0x4f, 0x26, 0x19, 0x3c, + 0x60, 0xe6, 0x46, 0x45, 0x79, 0x6b, 0xb3, 0x32, 0x62, 0x70, 0x30, 0x5e, 0x31, 0x68, 0x32, 0x11, + 0x53, 0x92, 0x59, 0x6a, 0xad, 0x78, 0xab, 0xa8, 0x24, 0xfd, 0x5c, 0x49, 0xda, 0x08, 0xd1, 0x04, + 0x46, 0xfd, 0xdf, 0xf3, 0x70, 0x3a, 0x2e, 0xf2, 0x06, 0xb5, 0x8c, 0x63, 0x79, 0x7f, 0x38, 0xf2, + 0xfe, 0xd3, 0x02, 0x3c, 0x21, 0xca, 0x34, 0x56, 0x75, 0x87, 0x1a, 0x35, 0xd3, 0xa1, 0x2d, 0xcf, + 0x76, 0x36, 0x8e, 0xb0, 0x01, 0x75, 0x70, 0x62, 0xbf, 0x01, 0x25, 0x71, 0xdc, 0xc0, 0xd7, 0x99, + 0xb1, 0xa0, 0x25, 0x08, 0x4d, 0xac, 0x50, 0xfc, 0xa8, 0x22, 0xd6, 0x59, 0xa5, 0x9d, 0x74, 0xd6, + 0x27, 0x61, 0x34, 0x10, 0x3d, 0x6e, 0x7c, 0x07, 0x42, 0x6b, 0xcb, 0xf0, 0x11, 0xb8, 0xf7, 0xd5, + 0xa2, 0x84, 0x58, 0x9b, 0x0f, 0xa8, 0xd7, 0xd0, 0x1a, 0x1a, 0x15, 0xb5, 0x05, 0xe5, 0x4c, 0x43, + 0x93, 0x89, 0xd4, 0xcd, 0x22, 0x5c, 0x48, 0xef, 0x76, 0x8d, 0xea, 0xc6, 0x71, 0xaf, 0x7f, 0x5f, + 0xf6, 0x3a, 0x79, 0x1a, 0x8a, 0x8b, 0xba, 0xb7, 0x2a, 0xae, 0xfb, 0xf1, 0x0e, 0xfa, 0xbe, 0xd9, + 0xa6, 0xcd, 0x8e, 0xee, 0xad, 0x6a, 0x88, 0x92, 0xe6, 0x0c, 0x40, 0x8e, 0x29, 0x73, 0x86, 0xb4, + 0xd8, 0x0f, 0x3f, 0x95, 0xbb, 0x52, 0x4c, 0x5d, 0xec, 0xbf, 0x5b, 0xcc, 0x9a, 0x57, 0xee, 0x39, + 0xa6, 0x47, 0x8f, 0x35, 0xec, 0x58, 0xc3, 0xf6, 0xa9, 0x61, 0xff, 0x30, 0x0f, 0xa3, 0xc1, 0xa6, + 0xe9, 0x7d, 0xda, 0x3a, 0x9c, 0xb5, 0x2a, 0xdc, 0xca, 0x14, 0xf6, 0xbd, 0x95, 0xd9, 0x8f, 0x42, + 0xa9, 0xc1, 0x11, 0x2b, 0x37, 0x0d, 0x50, 0x62, 0xfc, 0x88, 0x35, 0x38, 0x58, 0x7d, 0x1a, 0x06, + 0xe6, 0xf4, 0x47, 0xe6, 0x5a, 0x77, 0x4d, 0x58, 0xe9, 0xe8, 0xbe, 0xb6, 0xa6, 0x3f, 0xd2, 0x7c, + 0xb8, 0xfa, 0xdf, 0xe6, 0x60, 0x4c, 0x08, 0x55, 0x30, 0xdf, 0x97, 0x54, 0x43, 0xe9, 0xe4, 0xf7, + 0x2d, 0x9d, 0xc2, 0xde, 0xa5, 0xa3, 0xfe, 0x95, 0x02, 0x28, 0xd3, 0x66, 0x9b, 0x2e, 0x39, 0xba, + 0xe5, 0xde, 0xa7, 0x8e, 0xd8, 0x4e, 0x4f, 0x31, 0x56, 0xfb, 0xfa, 0x40, 0x69, 0x4a, 0xc9, 0xef, + 0x69, 0x4a, 0xf9, 0x38, 0x0c, 0x89, 0xc6, 0x04, 0xae, 0x93, 0x38, 0x6a, 0x1c, 0x1f, 0xa8, 0x85, + 0x78, 0x46, 0x5c, 0xed, 0x74, 0x1c, 0xfb, 0x21, 0x75, 0xf8, 0xad, 0x98, 0x20, 0xd6, 0x7d, 0xa0, + 0x16, 0xe2, 0x25, 0xce, 0xd4, 0xb7, 0x17, 0x65, 0xce, 0xd4, 0xd1, 0x42, 0x3c, 0xb9, 0x02, 0x83, + 0xb3, 0x76, 0x4b, 0x47, 0x41, 0xf3, 0x69, 0x65, 0x64, 0x6b, 0xb3, 0x32, 0xd8, 0x16, 0x30, 0x2d, + 0xc0, 0x32, 0xca, 0x9a, 0xbd, 0x6e, 0xb5, 0x6d, 0x9d, 0x3b, 0xdb, 0x0c, 0x72, 0x4a, 0x43, 0xc0, + 0xb4, 0x00, 0xcb, 0x28, 0x99, 0xcc, 0xd1, 0x89, 0x69, 0x30, 0xe4, 0x79, 0x5f, 0xc0, 0xb4, 0x00, + 0xab, 0x7e, 0xa3, 0xc8, 0xb4, 0xd7, 0x35, 0x3f, 0x78, 0xec, 0xd7, 0x85, 0x70, 0xc0, 0xf4, 0xef, + 0x61, 0xc0, 0x3c, 0x36, 0x07, 0x76, 0xea, 0x3f, 0x1f, 0x00, 0x10, 0xd2, 0x9f, 0x3a, 0xde, 0x1c, + 0xee, 0x4f, 0x6b, 0x6a, 0x70, 0x72, 0xca, 0x5a, 0xd5, 0xad, 0x16, 0x35, 0xc2, 0x63, 0xcb, 0x12, + 0x0e, 0x6d, 0x74, 0xba, 0xa4, 0x02, 0x19, 0x9e, 0x5b, 0x6a, 0xc9, 0x02, 0xe4, 0x25, 0x18, 0xae, + 0x5b, 0x1e, 0x75, 0xf4, 0x96, 0x67, 0x3e, 0xa4, 0x62, 0x6a, 0xc0, 0x9b, 0x68, 0x33, 0x04, 0x6b, + 0x32, 0x0d, 0xb9, 0x01, 0x23, 0x8b, 0xba, 0xe3, 0x99, 0x2d, 0xb3, 0xa3, 0x5b, 0x9e, 0xab, 0x0c, + 0xe2, 0x8c, 0x86, 0x16, 0x46, 0x47, 0x82, 0x6b, 0x11, 0x2a, 0xf2, 0x79, 0x18, 0xc2, 0xad, 0x29, + 0xfa, 0x87, 0x0f, 0x6d, 0x7b, 0x51, 0xf9, 0x4c, 0xe8, 0x8e, 0xc8, 0x4f, 0x5f, 0xf1, 0xc6, 0x39, + 0x7e, 0x57, 0x19, 0x70, 0x24, 0x9f, 0x81, 0x81, 0x29, 0xcb, 0x40, 0xe6, 0xb0, 0x2d, 0x73, 0x55, + 0x30, 0x3f, 0x1b, 0x32, 0xb7, 0x3b, 0x31, 0xde, 0x3e, 0xbb, 0xf4, 0x51, 0x36, 0xfc, 0xe1, 0x8d, + 0xb2, 0x91, 0x0f, 0xe1, 0x58, 0x7c, 0xf4, 0xa0, 0x8e, 0xc5, 0xc7, 0xf6, 0x78, 0x2c, 0xae, 0x7e, + 0x00, 0xc3, 0x13, 0x8b, 0xd3, 0xc1, 0xe8, 0x3d, 0x0f, 0x85, 0x45, 0xe1, 0x19, 0x51, 0xe4, 0xf6, + 0x4c, 0xc7, 0x34, 0x34, 0x06, 0x23, 0x57, 0x61, 0x70, 0x12, 0xdd, 0xed, 0xc4, 0x2d, 0x62, 0x91, + 0xaf, 0x7f, 0x2d, 0x84, 0xa1, 0xd7, 0xad, 0x8f, 0x26, 0xcf, 0xc1, 0xc0, 0xa2, 0x63, 0xaf, 0x38, + 0xfa, 0x9a, 0x58, 0x83, 0xd1, 0x35, 0xa5, 0xc3, 0x41, 0x9a, 0x8f, 0x53, 0x7f, 0x2a, 0xe7, 0x9b, + 0xed, 0xac, 0x44, 0xa3, 0x8b, 0x47, 0xf3, 0x58, 0xf7, 0x20, 0x2f, 0xe1, 0x72, 0x90, 0xe6, 0xe3, + 0xc8, 0x55, 0xe8, 0x9f, 0x72, 0x1c, 0xdb, 0x91, 0x7d, 0xea, 0x29, 0x03, 0xc8, 0xd7, 0xbd, 0x48, + 0x41, 0x5e, 0x83, 0x61, 0x3e, 0xe7, 0xf0, 0x13, 0xcd, 0x42, 0xaf, 0x9b, 0x52, 0x99, 0x52, 0xfd, + 0x76, 0x41, 0xb2, 0xd9, 0xb8, 0xc4, 0x1f, 0xc3, 0x5b, 0x81, 0x97, 0xa1, 0x30, 0xb1, 0x38, 0x2d, + 0x26, 0xc0, 0x53, 0x7e, 0x51, 0x49, 0x55, 0x62, 0xe5, 0x18, 0x35, 0xb9, 0x08, 0xc5, 0x45, 0xa6, + 0x3e, 0x25, 0x54, 0x8f, 0xc1, 0xad, 0xcd, 0x4a, 0xb1, 0xc3, 0xf4, 0x07, 0xa1, 0x88, 0x65, 0x9b, + 0x19, 0xbe, 0x63, 0xe2, 0xd8, 0x70, 0x1f, 0x73, 0x11, 0x8a, 0x55, 0x67, 0xe5, 0xa1, 0x98, 0xb5, + 0x10, 0xab, 0x3b, 0x2b, 0x0f, 0x35, 0x84, 0x92, 0x6b, 0x00, 0x1a, 0xf5, 0xba, 0x8e, 0x85, 0xcf, + 0x5d, 0x86, 0xf0, 0xfc, 0x0d, 0x67, 0x43, 0x07, 0xa1, 0xcd, 0x96, 0x6d, 0x50, 0x4d, 0x22, 0x51, + 0xff, 0x7a, 0x78, 0xb1, 0x53, 0x33, 0xdd, 0x07, 0xc7, 0x5d, 0xb8, 0x8b, 0x2e, 0xd4, 0xc5, 0x11, + 0x67, 0xb2, 0x93, 0x2a, 0xd0, 0x3f, 0xdd, 0xd6, 0x57, 0x5c, 0xec, 0x43, 0xe1, 0xbb, 0x76, 0x9f, + 0x01, 0x34, 0x0e, 0x8f, 0xf5, 0xd3, 0xe0, 0xf6, 0xfd, 0xf4, 0xb5, 0xfe, 0x60, 0xb4, 0xcd, 0x53, + 0x6f, 0xdd, 0x76, 0x8e, 0xbb, 0x6a, 0xa7, 0x5d, 0x75, 0x19, 0x06, 0x1a, 0x4e, 0x4b, 0x3a, 0xba, + 0xc0, 0xfd, 0x80, 0xeb, 0xb4, 0xf8, 0xb1, 0x85, 0x8f, 0x64, 0x74, 0x35, 0xd7, 0x43, 0xba, 0x81, + 0x90, 0xce, 0x70, 0x3d, 0x41, 0x27, 0x90, 0x82, 0x6e, 0xd1, 0x76, 0x3c, 0xd1, 0x71, 0x01, 0x5d, + 0xc7, 0x76, 0x3c, 0xcd, 0x47, 0x92, 0x8f, 0x03, 0x2c, 0x4d, 0x2e, 0xfa, 0xce, 0xfd, 0x43, 0xa1, + 0xef, 0xa1, 0xf0, 0xea, 0xd7, 0x24, 0x34, 0x59, 0x82, 0xa1, 0x85, 0x0e, 0x75, 0xf8, 0x56, 0x88, + 0x3f, 0x60, 0xf9, 0x58, 0x4c, 0xb4, 0xa2, 0xdf, 0xc7, 0xc5, 0xff, 0x01, 0x39, 0x5f, 0x5f, 0x6c, + 0xff, 0xa7, 0x16, 0x32, 0x22, 0xaf, 0x41, 0xa9, 0xca, 0xed, 0xbc, 0x61, 0x64, 0x19, 0x88, 0x0c, + 0xb7, 0xa0, 0x1c, 0xc5, 0xf7, 0xec, 0x3a, 0xfe, 0xad, 0x09, 0x72, 0xf5, 0x2a, 0x94, 0xe3, 0xd5, + 0x90, 0x61, 0x18, 0x98, 0x5c, 0x98, 0x9f, 0x9f, 0x9a, 0x5c, 0x2a, 0xf7, 0x91, 0x41, 0x28, 0x36, + 0xa6, 0xe6, 0x6b, 0xe5, 0x9c, 0xfa, 0x4b, 0xd2, 0x0c, 0xc2, 0x54, 0xeb, 0xf8, 0x6a, 0x78, 0x5f, + 0xf7, 0x2d, 0x65, 0xbc, 0x0f, 0xc5, 0x13, 0x83, 0x35, 0xd3, 0xf3, 0xa8, 0x21, 0x56, 0x09, 0xbc, + 0x2f, 0xf4, 0x1e, 0x69, 0x09, 0x3c, 0x79, 0x01, 0x46, 0x11, 0x26, 0xae, 0x08, 0xf9, 0xfe, 0x58, + 0x14, 0x70, 0x1e, 0x69, 0x51, 0xa4, 0xfa, 0xfb, 0xe1, 0xed, 0xf0, 0x2c, 0xd5, 0x8f, 0xea, 0x8d, + 0xe2, 0x47, 0xa4, 0xbf, 0xd4, 0x7f, 0x59, 0xe4, 0x4f, 0x4e, 0xf8, 0xfb, 0xc4, 0xc3, 0x10, 0x65, + 0x78, 0xa4, 0x5b, 0xd8, 0xc5, 0x91, 0xee, 0x0b, 0x50, 0x9a, 0xa3, 0xde, 0xaa, 0xed, 0x3b, 0x7e, + 0xa1, 0x87, 0xde, 0x1a, 0x42, 0x64, 0x0f, 0x3d, 0x4e, 0x43, 0x1e, 0x00, 0xf1, 0x1f, 0x1f, 0x06, + 0x8e, 0xdf, 0xfe, 0x11, 0xf2, 0xb9, 0xc4, 0x3e, 0xa5, 0x81, 0x4f, 0x94, 0xd1, 0xa7, 0xff, 0x74, + 0xe0, 0x58, 0x2e, 0x79, 0x62, 0xfd, 0x8b, 0xcd, 0x4a, 0x89, 0xd3, 0x68, 0x29, 0x6c, 0xc9, 0xbb, + 0x30, 0x34, 0x37, 0x5d, 0x15, 0x0f, 0x11, 0xb9, 0x57, 0xc4, 0xf9, 0x40, 0x8a, 0x3e, 0x22, 0x10, + 0x09, 0xbe, 0xef, 0x59, 0xbb, 0xaf, 0x27, 0xdf, 0x21, 0x86, 0x5c, 0x98, 0xb6, 0xf0, 0x97, 0x42, + 0xe2, 0x74, 0x21, 0xd0, 0x96, 0xe8, 0xfb, 0xa1, 0xb8, 0xac, 0x38, 0x36, 0xa6, 0x2d, 0x83, 0xfb, + 0x18, 0xdd, 0x0b, 0x70, 0xb2, 0xda, 0xe9, 0xb4, 0x4d, 0x6a, 0xa0, 0xbe, 0x68, 0xdd, 0x36, 0x75, + 0x85, 0xcb, 0x0f, 0x3e, 0x3e, 0xd1, 0x39, 0xb2, 0x89, 0xcf, 0x5f, 0x9b, 0x4e, 0x37, 0xea, 0x9f, + 0x99, 0x2c, 0xab, 0xfe, 0x4c, 0x1e, 0xce, 0x4e, 0x3a, 0x54, 0xf7, 0xe8, 0xdc, 0x74, 0xb5, 0xda, + 0x45, 0x1f, 0xb9, 0x76, 0x9b, 0x5a, 0x2b, 0x87, 0x33, 0xac, 0xdf, 0x84, 0xb1, 0xa0, 0x01, 0x8d, + 0x96, 0xdd, 0xa1, 0xf2, 0x43, 0xae, 0x96, 0x8f, 0x69, 0xba, 0x0c, 0xa5, 0xc5, 0x48, 0xc9, 0x6d, + 0x38, 0x15, 0x40, 0xaa, 0xed, 0xb6, 0xbd, 0xae, 0xd1, 0xae, 0xcb, 0x1d, 0x71, 0x07, 0xb9, 0x23, + 0x6e, 0xc8, 0x41, 0x67, 0xf8, 0xa6, 0xc3, 0x08, 0xb4, 0xb4, 0x52, 0xea, 0xd7, 0x0b, 0x70, 0xee, + 0xae, 0xde, 0x36, 0x8d, 0x50, 0x34, 0x1a, 0x75, 0x3b, 0xb6, 0xe5, 0xd2, 0x23, 0x34, 0x4a, 0x23, + 0x43, 0xa1, 0x78, 0x20, 0x43, 0x21, 0xd9, 0x45, 0xfd, 0xfb, 0xee, 0xa2, 0xd2, 0x9e, 0xba, 0xe8, + 0x7f, 0xcb, 0x41, 0xd9, 0x7f, 0x68, 0x20, 0x3f, 0x1a, 0x97, 0xbc, 0xe0, 0xf1, 0x08, 0x31, 0xe6, + 0x77, 0x8d, 0x78, 0xd2, 0x80, 0x81, 0xa9, 0x47, 0x1d, 0xd3, 0xa1, 0xee, 0x0e, 0x9c, 0xc6, 0x2f, + 0x89, 0xe3, 0x92, 0x93, 0x94, 0x17, 0x49, 0x9c, 0x94, 0x70, 0x30, 0x3e, 0x1f, 0xe4, 0x4f, 0x2d, + 0x26, 0xfc, 0x97, 0xf0, 0xfc, 0xf9, 0xa0, 0x78, 0x92, 0x11, 0x79, 0x0f, 0x1a, 0x92, 0x92, 0x67, + 0xa0, 0xb0, 0xb4, 0x34, 0x2b, 0x66, 0x52, 0x8c, 0x40, 0xe0, 0x79, 0xf2, 0xfb, 0x48, 0x86, 0x55, + 0xff, 0x49, 0x1e, 0x80, 0xa9, 0x02, 0x1f, 0xae, 0x87, 0xa2, 0x84, 0x13, 0x30, 0xe8, 0x0b, 0x5c, + 0xa8, 0x61, 0xf0, 0x4a, 0x20, 0xde, 0x11, 0xf1, 0xba, 0x83, 0x17, 0x21, 0x15, 0xdf, 0x91, 0x9c, + 0xdf, 0x03, 0xe0, 0xce, 0x06, 0x1d, 0xc9, 0x7d, 0xf7, 0xf1, 0x8f, 0xc3, 0x90, 0x98, 0xf1, 0xec, + 0xc8, 0xf9, 0x7f, 0xcb, 0x07, 0x6a, 0x21, 0x3e, 0x36, 0xb5, 0x96, 0xf6, 0xb1, 0x10, 0xfb, 0xe2, + 0xe5, 0xbd, 0x72, 0x2c, 0xde, 0x03, 0x16, 0xef, 0x97, 0x85, 0x78, 0xf9, 0x8b, 0xa1, 0x23, 0x2b, + 0xde, 0x03, 0x3b, 0xfb, 0x56, 0xff, 0x61, 0x0e, 0x08, 0x6b, 0xd6, 0xa2, 0xee, 0xba, 0xeb, 0xb6, + 0x63, 0x70, 0xe7, 0xf4, 0x43, 0x11, 0xcc, 0xc1, 0xdd, 0x57, 0x7e, 0x7b, 0x10, 0x4e, 0x45, 0x1c, + 0x7f, 0x8f, 0xf8, 0x64, 0x75, 0x35, 0x3a, 0x9a, 0x7a, 0xbd, 0x7a, 0x79, 0x56, 0xbe, 0x10, 0xed, + 0x8f, 0x3c, 0x78, 0x93, 0x6e, 0x42, 0x5f, 0x84, 0x11, 0xf1, 0x83, 0xad, 0xd0, 0xfe, 0x4d, 0x17, + 0x8e, 0x52, 0x97, 0x01, 0xb4, 0x08, 0x9a, 0xbc, 0x02, 0x43, 0x6c, 0xc0, 0xac, 0x60, 0xb0, 0x92, + 0x81, 0xf0, 0x45, 0x89, 0xe1, 0x03, 0xe5, 0xf5, 0x24, 0xa0, 0x94, 0xde, 0x2d, 0x0d, 0xee, 0xe0, + 0xdd, 0xd2, 0x17, 0x60, 0xb8, 0x6a, 0x59, 0xb6, 0x87, 0x9b, 0x74, 0x57, 0x5c, 0x4d, 0x64, 0x5a, + 0xe5, 0xcf, 0xe0, 0x63, 0xfc, 0x90, 0x3e, 0xd5, 0x2c, 0x97, 0x19, 0x92, 0xeb, 0xfe, 0xab, 0x18, + 0xea, 0x08, 0xaf, 0x72, 0xbc, 0x9e, 0x71, 0x04, 0x2c, 0xf9, 0x28, 0x06, 0x3b, 0x6f, 0x74, 0xd1, + 0xb1, 0x3b, 0xb6, 0x4b, 0x0d, 0x2e, 0xa8, 0xe1, 0x30, 0xb4, 0x41, 0x47, 0x20, 0xf0, 0xdd, 0x5c, + 0x24, 0x70, 0x48, 0xa4, 0x08, 0xb9, 0x0f, 0xa7, 0xfd, 0x8b, 0xe2, 0xe0, 0x85, 0x62, 0xbd, 0xe6, + 0x2a, 0x23, 0xf8, 0x2a, 0x89, 0xc4, 0x95, 0xa1, 0x5e, 0x9b, 0x78, 0xd2, 0xbf, 0x16, 0xf1, 0x9f, + 0x38, 0x36, 0x4d, 0x43, 0xee, 0xea, 0x54, 0x7e, 0xe4, 0x07, 0x61, 0x78, 0x4e, 0x7f, 0x54, 0xeb, + 0x8a, 0xb3, 0x97, 0xd1, 0x9d, 0xdf, 0xbe, 0xac, 0xe9, 0x8f, 0x9a, 0x86, 0x28, 0x17, 0xb3, 0x29, + 0x64, 0x96, 0xa4, 0x09, 0x67, 0x17, 0x1d, 0x7b, 0xcd, 0xf6, 0xa8, 0x11, 0x7b, 0xec, 0x77, 0x22, + 0x7c, 0x1d, 0xdc, 0x11, 0x14, 0xcd, 0x1e, 0xaf, 0xfe, 0x32, 0xd8, 0x90, 0x35, 0x38, 0x51, 0x75, + 0xdd, 0xee, 0x1a, 0x0d, 0x6f, 0xa8, 0xca, 0xdb, 0x7e, 0xc6, 0xc7, 0x84, 0xd7, 0xf2, 0x13, 0x3a, + 0x16, 0xe5, 0x17, 0x54, 0x4d, 0xcf, 0x94, 0x6b, 0xc4, 0x6f, 0x89, 0xf3, 0xbe, 0x55, 0x1c, 0x1c, + 0x2b, 0x9f, 0xd0, 0xce, 0x25, 0x1b, 0xb3, 0x64, 0x7a, 0x6d, 0xaa, 0x7e, 0x2b, 0x07, 0x10, 0x0a, + 0x98, 0xbc, 0x18, 0x8d, 0x88, 0x94, 0x0b, 0x2f, 0x3a, 0x44, 0xb4, 0x84, 0x48, 0x08, 0x24, 0x72, + 0x11, 0x8a, 0x18, 0x51, 0x23, 0x1f, 0x1e, 0xac, 0x3e, 0x30, 0x2d, 0x43, 0x43, 0x28, 0xc3, 0x4a, + 0x4f, 0xdf, 0x11, 0x8b, 0x97, 0xfa, 0xdc, 0x2a, 0xac, 0xc1, 0x89, 0x46, 0x77, 0xd9, 0xaf, 0x5b, + 0x7a, 0xc7, 0x87, 0x81, 0x3d, 0xdc, 0xee, 0x72, 0xf0, 0xf8, 0x35, 0x12, 0x36, 0x25, 0x5a, 0x44, + 0xfd, 0x46, 0x2e, 0x36, 0x0b, 0x1e, 0xe2, 0xa2, 0xf7, 0x6c, 0xd2, 0x4f, 0x23, 0x39, 0x2d, 0xa9, + 0x7f, 0x54, 0x80, 0xe1, 0x45, 0xdb, 0xf1, 0x44, 0x88, 0x92, 0xa3, 0xbd, 0x0a, 0x49, 0x7b, 0xa5, + 0xe2, 0x2e, 0xf6, 0x4a, 0x17, 0xa1, 0x28, 0xb9, 0x28, 0xf3, 0x7b, 0x11, 0xc3, 0x70, 0x34, 0x84, + 0x7e, 0xc8, 0x4f, 0x2e, 0x92, 0x97, 0xa0, 0x03, 0xfb, 0x76, 0x35, 0xf8, 0xe1, 0x3c, 0xc0, 0x67, + 0x5e, 0x7a, 0xe9, 0x31, 0xee, 0x52, 0xf5, 0x2f, 0xe7, 0xe0, 0x84, 0xb8, 0x5a, 0x94, 0xa2, 0xa1, + 0x0d, 0xf8, 0x97, 0xc2, 0xf2, 0x4c, 0xc2, 0x41, 0x9a, 0x8f, 0x63, 0x8b, 0xd6, 0xd4, 0x23, 0xd3, + 0xc3, 0xdb, 0x15, 0x29, 0x1c, 0x1a, 0x15, 0x30, 0x79, 0xd1, 0xf2, 0xe9, 0xc8, 0x8b, 0xfe, 0xa5, + 0x69, 0x21, 0x5c, 0xa9, 0x59, 0x81, 0xa9, 0xd4, 0x8b, 0x53, 0xf5, 0xd7, 0x8a, 0x50, 0x9c, 0x7a, + 0x44, 0x5b, 0x47, 0xbc, 0x6b, 0xa4, 0xa3, 0xd8, 0xe2, 0x3e, 0x8f, 0x62, 0xf7, 0xe2, 0x05, 0xf2, + 0x4e, 0xd8, 0x9f, 0xa5, 0x68, 0xf5, 0xb1, 0x9e, 0x8f, 0x57, 0xef, 0xf7, 0xf4, 0xd1, 0x73, 0x22, + 0xfa, 0xfb, 0x05, 0x28, 0x34, 0x26, 0x17, 0x8f, 0xf5, 0xe6, 0x50, 0xf5, 0xa6, 0xf7, 0x2d, 0xbb, + 0x1a, 0x5c, 0x9c, 0x0d, 0x86, 0x7e, 0xad, 0xb1, 0x3b, 0xb2, 0x3f, 0x2d, 0xc0, 0x58, 0x63, 0x7a, + 0x69, 0x51, 0x3a, 0xbb, 0xbe, 0xcd, 0x7d, 0x0f, 0xd1, 0x0b, 0x8e, 0x77, 0xe9, 0xc5, 0x84, 0x05, + 0x76, 0xa7, 0x6e, 0x79, 0xaf, 0xde, 0xb8, 0xab, 0xb7, 0xbb, 0x14, 0x0f, 0x8b, 0xb8, 0xa7, 0xb2, + 0x6b, 0x7e, 0x40, 0xbf, 0x8e, 0xa1, 0x11, 0x7c, 0x06, 0xe4, 0x4d, 0x28, 0xdc, 0x11, 0x3e, 0x24, + 0x59, 0x7c, 0x5e, 0xbe, 0xce, 0xf9, 0xb0, 0x49, 0xb0, 0xd0, 0x35, 0x0d, 0xe4, 0xc0, 0x4a, 0xb1, + 0xc2, 0x37, 0x85, 0xc9, 0xb0, 0xa3, 0xc2, 0x2b, 0x7e, 0xe1, 0x9b, 0xf5, 0x1a, 0x69, 0xc0, 0xf0, + 0x22, 0x75, 0xd6, 0x4c, 0xec, 0x28, 0x7f, 0xce, 0xee, 0xcd, 0x84, 0xed, 0xad, 0x86, 0x3b, 0x61, + 0x21, 0x64, 0x26, 0x73, 0x21, 0xef, 0x01, 0x70, 0xab, 0x6a, 0x87, 0x11, 0x36, 0x2f, 0xe1, 0x4e, + 0x85, 0x1b, 0xc3, 0x29, 0x56, 0xa9, 0xc4, 0x8c, 0x3c, 0x80, 0xf2, 0x9c, 0x6d, 0x98, 0xf7, 0x4d, + 0xee, 0x2c, 0x8a, 0x15, 0x94, 0xb6, 0x77, 0xd1, 0x62, 0xc6, 0xef, 0x9a, 0x54, 0x2e, 0xad, 0x9a, + 0x04, 0x63, 0xf5, 0xef, 0xf4, 0x43, 0x91, 0x75, 0xfb, 0xf1, 0xf8, 0xdd, 0xcf, 0xf8, 0xad, 0x42, + 0xf9, 0x9e, 0xed, 0x3c, 0x30, 0xad, 0x95, 0xc0, 0x8f, 0x5f, 0xec, 0xa6, 0xd1, 0xf7, 0x68, 0x9d, + 0xe3, 0x9a, 0x81, 0xcb, 0xbf, 0x96, 0x20, 0xdf, 0x66, 0x04, 0xbf, 0x0e, 0xc0, 0x5f, 0xe7, 0x23, + 0xcd, 0x60, 0x18, 0xce, 0x83, 0xbf, 0xdd, 0xc7, 0xa7, 0x01, 0x72, 0x38, 0x8f, 0x90, 0x98, 0x5c, + 0xf5, 0xbd, 0x37, 0x86, 0xf0, 0xa5, 0x00, 0x1e, 0x1b, 0xa0, 0xf7, 0x86, 0x6c, 0x04, 0x70, 0x3f, + 0x8e, 0x45, 0x00, 0xe9, 0x46, 0x0c, 0x62, 0x82, 0x88, 0x4c, 0x0e, 0x22, 0x80, 0x5e, 0xca, 0x85, + 0x98, 0x26, 0xf1, 0x20, 0xaf, 0xc6, 0xae, 0xec, 0x49, 0x84, 0x5b, 0xe6, 0x8d, 0x7d, 0xe8, 0xf2, + 0x35, 0xb2, 0x9d, 0xcb, 0x97, 0xfa, 0x37, 0x0b, 0x30, 0xcc, 0xb8, 0x35, 0xba, 0x6b, 0x6b, 0xba, + 0xb3, 0x71, 0xac, 0xc8, 0xfb, 0x51, 0xe4, 0x26, 0x9c, 0x94, 0x5d, 0xfc, 0x99, 0xe9, 0xea, 0x07, + 0x63, 0x0a, 0x0e, 0xac, 0xe2, 0x04, 0xdc, 0xb6, 0xc4, 0x79, 0xdf, 0x13, 0x60, 0x3c, 0x0d, 0x71, + 0xb5, 0x24, 0x2f, 0xf5, 0xa7, 0x73, 0x50, 0x8e, 0x43, 0x03, 0xdd, 0xcf, 0xa5, 0xea, 0xfe, 0x0b, + 0x30, 0x24, 0x2e, 0xfd, 0x75, 0x43, 0xf8, 0x20, 0x8e, 0x6d, 0x6d, 0x56, 0x00, 0x5f, 0x5c, 0x37, + 0x1d, 0xaa, 0x1b, 0x5a, 0x48, 0x40, 0x5e, 0x81, 0x11, 0xfc, 0x71, 0xcf, 0x31, 0x3d, 0x8f, 0xf2, + 0xce, 0x28, 0xf2, 0x7b, 0x0c, 0x5e, 0x60, 0x9d, 0x23, 0xb4, 0x08, 0x99, 0xfa, 0x7b, 0x79, 0x18, + 0x6a, 0x74, 0x97, 0xdd, 0x0d, 0xd7, 0xa3, 0x6b, 0x47, 0x5c, 0x87, 0xfc, 0x63, 0x85, 0x62, 0xea, + 0xb1, 0xc2, 0x33, 0xfe, 0xd0, 0x92, 0xce, 0xdb, 0x83, 0x8d, 0x81, 0xef, 0x47, 0x19, 0x6a, 0x51, + 0x69, 0xf7, 0x5a, 0xa4, 0xfe, 0xed, 0x3c, 0x94, 0xf9, 0x75, 0x73, 0xcd, 0x74, 0x5b, 0x07, 0xf0, + 0x04, 0xe6, 0xf0, 0x65, 0xba, 0x3f, 0x17, 0x8d, 0x1d, 0x3c, 0x2c, 0x52, 0xbf, 0x98, 0x87, 0xe1, + 0x6a, 0xd7, 0x5b, 0xad, 0x7a, 0x38, 0xbf, 0x3d, 0x96, 0x7b, 0xe4, 0x7f, 0x90, 0x83, 0x13, 0xac, + 0x21, 0x4b, 0xf6, 0x03, 0x6a, 0x1d, 0xc0, 0x71, 0xbd, 0x7c, 0xec, 0x9e, 0xdf, 0xe3, 0xb1, 0xbb, + 0x2f, 0xcb, 0xc2, 0xee, 0x64, 0x89, 0x97, 0x4c, 0x9a, 0xdd, 0xa6, 0x47, 0xfb, 0x33, 0x0e, 0xf0, + 0x92, 0xc9, 0x17, 0xc8, 0x01, 0x5c, 0x6a, 0x7e, 0x7f, 0x09, 0xe4, 0x00, 0x4e, 0x64, 0xbf, 0x3f, + 0x04, 0xf2, 0xed, 0x1c, 0x0c, 0x4d, 0xd8, 0xde, 0x11, 0x1f, 0xf8, 0xe2, 0x2b, 0x8e, 0xb6, 0x9a, + 0xfb, 0x5f, 0x71, 0xb4, 0x75, 0x53, 0xfd, 0xd9, 0x3c, 0x9c, 0x16, 0x11, 0xfc, 0xc5, 0x19, 0xd8, + 0xf1, 0x74, 0x2c, 0x06, 0x5b, 0x52, 0x34, 0xc7, 0xf3, 0x90, 0x10, 0xcd, 0x2f, 0x14, 0xe0, 0x34, + 0x06, 0x1c, 0x66, 0x3b, 0xaa, 0xef, 0x03, 0x5b, 0x84, 0xb4, 0xa2, 0xae, 0x03, 0x73, 0x29, 0xae, + 0x03, 0xff, 0x62, 0xb3, 0xf2, 0xea, 0x8a, 0xe9, 0xad, 0x76, 0x97, 0xc7, 0x5b, 0xf6, 0xda, 0xb5, + 0x15, 0x47, 0x7f, 0x68, 0xf2, 0x4b, 0x73, 0xbd, 0x7d, 0x2d, 0x4c, 0xac, 0xd3, 0x31, 0x45, 0x9a, + 0x9c, 0x06, 0xee, 0x94, 0x18, 0x57, 0xdf, 0xe9, 0xc0, 0x05, 0xb8, 0x65, 0x9b, 0x96, 0xf0, 0xc4, + 0xe5, 0x86, 0x6e, 0x63, 0x6b, 0xb3, 0x72, 0xe6, 0x7d, 0xdb, 0xb4, 0x9a, 0x71, 0x77, 0xdc, 0xdd, + 0xd6, 0x17, 0xb2, 0xd6, 0xa4, 0x6a, 0xd4, 0xff, 0x26, 0x07, 0xe7, 0xa3, 0x5a, 0xfc, 0xfd, 0x60, + 0x3b, 0xfe, 0xa5, 0x3c, 0x9c, 0xb9, 0x89, 0xc2, 0x09, 0xdc, 0x9f, 0x8e, 0xe7, 0x2d, 0x31, 0x38, + 0x53, 0x64, 0x73, 0x6c, 0x51, 0x66, 0xcb, 0xe6, 0x78, 0x52, 0x17, 0xb2, 0xf9, 0xaf, 0x73, 0x70, + 0x6a, 0xa1, 0x5e, 0x9b, 0xfc, 0x3e, 0x19, 0x51, 0xc9, 0xef, 0x39, 0xe2, 0x06, 0x67, 0xe2, 0x7b, + 0x8e, 0xb8, 0xe9, 0xf9, 0xd5, 0x3c, 0x9c, 0x6a, 0x54, 0xe7, 0x66, 0xbf, 0x5f, 0x66, 0xf0, 0x49, + 0xd9, 0x57, 0xd7, 0x3f, 0x04, 0x13, 0xb6, 0x80, 0xfc, 0x99, 0x77, 0xaf, 0x67, 0xfb, 0xf0, 0x26, + 0x85, 0x72, 0xc4, 0xa7, 0xee, 0x03, 0x11, 0x0a, 0xd3, 0xfc, 0x08, 0xf5, 0x11, 0xd7, 0xfc, 0xbf, + 0x57, 0x82, 0xe1, 0xdb, 0xdd, 0x65, 0x2a, 0x5c, 0xba, 0x1e, 0xeb, 0x93, 0xdf, 0xeb, 0x30, 0x2c, + 0xc4, 0x80, 0x37, 0x1c, 0x52, 0xc8, 0x49, 0x11, 0x42, 0x88, 0x47, 0xf5, 0x92, 0x89, 0xc8, 0x45, + 0x28, 0xde, 0xa5, 0xce, 0xb2, 0xfc, 0x1a, 0xfb, 0x21, 0x75, 0x96, 0x35, 0x84, 0x92, 0xd9, 0xf0, + 0xa1, 0x49, 0x75, 0xb1, 0x8e, 0xe9, 0x8e, 0xc4, 0xa5, 0x21, 0xe6, 0x6f, 0x0a, 0xbc, 0x45, 0xf5, + 0x8e, 0xc9, 0x13, 0x25, 0xc9, 0x91, 0x20, 0xe2, 0x25, 0xc9, 0x3c, 0x9c, 0x94, 0xdd, 0x05, 0x79, + 0xae, 0x9f, 0xc1, 0x14, 0x76, 0x69, 0x59, 0x7e, 0x92, 0x45, 0xc9, 0x3b, 0x30, 0xe2, 0x03, 0xd1, + 0xf1, 0x71, 0x28, 0x4c, 0x30, 0x11, 0xb0, 0x8a, 0xe5, 0x03, 0x88, 0x14, 0x90, 0x19, 0xe0, 0x25, + 0x06, 0xa4, 0x30, 0x88, 0x39, 0x92, 0x46, 0x0a, 0x90, 0x57, 0x90, 0x01, 0x3e, 0x8e, 0x42, 0x87, + 0xa9, 0x61, 0x7c, 0xaa, 0x8c, 0x17, 0x40, 0x8e, 0x80, 0xf3, 0x07, 0xe9, 0x11, 0x32, 0xb2, 0x00, + 0x10, 0x3a, 0xb6, 0x88, 0xb0, 0x1f, 0xbb, 0x76, 0xb9, 0x91, 0x58, 0xc8, 0x37, 0x79, 0xa3, 0x7b, + 0xb9, 0xc9, 0x53, 0x7f, 0xa6, 0x00, 0xc3, 0xd5, 0x4e, 0x27, 0x18, 0x0a, 0x2f, 0x42, 0xa9, 0xda, + 0xe9, 0xdc, 0xd1, 0xea, 0x72, 0x02, 0x00, 0xbd, 0xd3, 0x69, 0x76, 0x1d, 0x53, 0xf6, 0xa4, 0xe6, + 0x44, 0x64, 0x12, 0x46, 0xab, 0x9d, 0xce, 0x62, 0x77, 0xb9, 0x6d, 0xb6, 0xa4, 0xfc, 0x65, 0x3c, + 0xc3, 0x63, 0xa7, 0xd3, 0xec, 0x20, 0x26, 0x9e, 0xc4, 0x2e, 0x5a, 0x86, 0x7c, 0x01, 0x83, 0x65, + 0x89, 0xf4, 0x59, 0x3c, 0x41, 0x8f, 0x1a, 0x84, 0xfe, 0x0f, 0xdb, 0x36, 0x1e, 0x10, 0xf1, 0x14, + 0x09, 0x17, 0xfd, 0xc4, 0x16, 0xac, 0xa2, 0x44, 0x9a, 0xac, 0x90, 0x25, 0xf9, 0x04, 0x0c, 0x54, + 0x3b, 0x1d, 0xe9, 0xb6, 0x0a, 0x1d, 0xdb, 0x58, 0xa9, 0x78, 0x86, 0x42, 0x41, 0x26, 0x3e, 0x4b, + 0xdc, 0x6f, 0xdb, 0x8e, 0x87, 0x43, 0x6a, 0x34, 0xfc, 0x2c, 0xff, 0x42, 0xdc, 0x96, 0xe3, 0xd3, + 0x68, 0xd1, 0x32, 0x17, 0xde, 0x82, 0xb1, 0x68, 0x8b, 0x77, 0x95, 0xa7, 0xe1, 0x7b, 0x39, 0x94, + 0xca, 0x11, 0x7f, 0x4e, 0xf0, 0x32, 0x14, 0xaa, 0x9d, 0x8e, 0x98, 0xd4, 0x4e, 0xa5, 0x74, 0x6a, + 0x3c, 0xfa, 0x40, 0xb5, 0xd3, 0xf1, 0x3f, 0xfd, 0x88, 0xbf, 0x4b, 0xda, 0xd3, 0xa7, 0x7f, 0x9b, + 0x7f, 0xfa, 0xd1, 0x7e, 0x33, 0xa4, 0xfe, 0x5a, 0x01, 0x4e, 0x54, 0x3b, 0x9d, 0xe3, 0xfc, 0x0e, + 0x07, 0x15, 0xe3, 0xe0, 0x25, 0x00, 0x69, 0x8e, 0x1d, 0x08, 0x5e, 0x4d, 0x0e, 0x4b, 0xf3, 0xab, + 0x92, 0xd3, 0x24, 0x22, 0x5f, 0xfd, 0x06, 0x77, 0xa5, 0x7e, 0x5f, 0x2c, 0xe0, 0xc4, 0x77, 0xd4, + 0xe3, 0xb5, 0x7d, 0x54, 0xba, 0x4d, 0xf4, 0x41, 0x69, 0x57, 0x7d, 0xf0, 0xbb, 0x91, 0xc1, 0x83, + 0xf9, 0x02, 0x8e, 0x7b, 0xa1, 0x7f, 0x5f, 0xb6, 0xf5, 0x98, 0x2c, 0x4c, 0x11, 0x44, 0xca, 0xcf, + 0x99, 0x26, 0x42, 0x9a, 0xb5, 0x18, 0xaa, 0x69, 0x1a, 0x5a, 0x8c, 0xd6, 0xef, 0xc3, 0x81, 0x5d, + 0xf5, 0xe1, 0x66, 0x1e, 0xc3, 0x16, 0x04, 0x21, 0xd1, 0xf6, 0xbf, 0x45, 0xb9, 0x06, 0xc0, 0xdd, + 0x17, 0x02, 0xff, 0xfc, 0x51, 0x1e, 0xfd, 0x88, 0xa7, 0x52, 0x13, 0xd1, 0x8f, 0x42, 0x92, 0xc0, + 0xdd, 0xa9, 0x90, 0xea, 0xee, 0x74, 0x15, 0x06, 0x35, 0x7d, 0xfd, 0xdd, 0x2e, 0x75, 0x36, 0x84, + 0x4d, 0xc4, 0x23, 0x8e, 0xea, 0xeb, 0xcd, 0x1f, 0x62, 0x40, 0x2d, 0x40, 0x13, 0x35, 0x88, 0x7b, + 0x21, 0xb9, 0x95, 0xf0, 0x83, 0xf6, 0x20, 0xda, 0xc5, 0x5e, 0x14, 0x9d, 0xbc, 0x01, 0x85, 0xea, + 0xbd, 0x86, 0x90, 0x6c, 0xd0, 0xb5, 0xd5, 0x7b, 0x0d, 0x21, 0xaf, 0xcc, 0xb2, 0xf7, 0x1a, 0xea, + 0x17, 0xf3, 0x40, 0x92, 0x94, 0xe4, 0x55, 0x18, 0x42, 0xe8, 0x0a, 0xd3, 0x19, 0x39, 0x07, 0xef, + 0xba, 0xdb, 0x74, 0x10, 0x1a, 0xb1, 0x10, 0x7d, 0x52, 0xf2, 0x3a, 0x66, 0x39, 0x17, 0x59, 0x20, + 0x23, 0x39, 0x78, 0xd7, 0x5d, 0x3f, 0x2f, 0x78, 0x2c, 0xc9, 0xb9, 0x20, 0x46, 0xe3, 0xf2, 0x5e, + 0x63, 0xc6, 0x76, 0x3d, 0x21, 0x6a, 0x6e, 0x5c, 0xae, 0xbb, 0x98, 0xfc, 0x39, 0x62, 0x5c, 0x72, + 0x32, 0x4c, 0x60, 0x77, 0xaf, 0xc1, 0x5f, 0x88, 0x19, 0x9a, 0xdd, 0xf6, 0xad, 0x52, 0x9e, 0xc0, + 0x6e, 0xdd, 0x6d, 0xf2, 0xd7, 0x65, 0x06, 0xa6, 0x57, 0x8f, 0x24, 0xb0, 0x8b, 0x94, 0x52, 0x7f, + 0x72, 0x10, 0xca, 0x35, 0xdd, 0xd3, 0x97, 0x75, 0x97, 0x4a, 0x5b, 0xf2, 0x13, 0x3e, 0xcc, 0xff, + 0x1c, 0x49, 0x0e, 0xc6, 0x72, 0xca, 0xd7, 0xc4, 0x0b, 0x90, 0x37, 0x43, 0xbe, 0x41, 0x7a, 0x61, + 0x39, 0x5f, 0xe1, 0x72, 0xb3, 0x23, 0xc0, 0x5a, 0x82, 0x90, 0xbc, 0x00, 0xc3, 0x3e, 0x8c, 0xed, + 0x22, 0x0a, 0xa1, 0xce, 0x18, 0xcb, 0x6c, 0x13, 0xa1, 0xc9, 0x68, 0xf2, 0x3a, 0x8c, 0xf8, 0x3f, + 0x25, 0xfb, 0x9c, 0x27, 0x5f, 0x5c, 0x4e, 0x6c, 0xc1, 0x64, 0x52, 0xb9, 0x28, 0xce, 0x6f, 0xfd, + 0x91, 0xa2, 0xb1, 0xfc, 0x86, 0x11, 0x52, 0xf2, 0x43, 0x30, 0xe6, 0xff, 0x16, 0xbb, 0x0e, 0xee, + 0x7d, 0xf8, 0x42, 0x90, 0xbd, 0x3d, 0x26, 0xd6, 0xf1, 0x28, 0x39, 0xdf, 0x7f, 0x3c, 0xe1, 0xa7, + 0xec, 0x33, 0x96, 0x93, 0xdb, 0x8f, 0x58, 0x05, 0xa4, 0x0e, 0x27, 0x7d, 0x48, 0xa8, 0xa1, 0x03, + 0xe1, 0xb6, 0xd3, 0x58, 0x6e, 0xa6, 0x2a, 0x69, 0xb2, 0x14, 0x69, 0xc3, 0xc5, 0x08, 0xd0, 0x70, + 0x57, 0xcd, 0xfb, 0x9e, 0xd8, 0x33, 0x8a, 0xf0, 0xdf, 0x22, 0x47, 0x6b, 0xc0, 0x95, 0xd3, 0xf8, + 0xc9, 0x96, 0xa3, 0x89, 0xd9, 0x7a, 0x72, 0x23, 0x0d, 0x38, 0xed, 0xe3, 0x6f, 0x4e, 0x2e, 0x2e, + 0x3a, 0xf6, 0xfb, 0xb4, 0xe5, 0xd5, 0x6b, 0x62, 0xcf, 0x8d, 0x61, 0x21, 0x8d, 0xe5, 0xe6, 0x4a, + 0xab, 0xc3, 0x94, 0x82, 0xe1, 0xa2, 0xcc, 0x53, 0x0b, 0x93, 0xbb, 0x70, 0x46, 0x82, 0x4b, 0x99, + 0xe0, 0x21, 0x3c, 0x14, 0x10, 0x5c, 0xd3, 0x93, 0xc1, 0xa7, 0x17, 0x27, 0x6f, 0xc1, 0xa8, 0x8f, + 0xe0, 0x57, 0x91, 0xc3, 0x78, 0x15, 0x89, 0x43, 0xd2, 0x58, 0x6e, 0xc6, 0x1f, 0x32, 0x47, 0x89, + 0x65, 0x8d, 0x5a, 0xda, 0xe8, 0x50, 0xe1, 0x16, 0xec, 0x6b, 0x94, 0xb7, 0xd1, 0x49, 0x55, 0x46, + 0x46, 0x4a, 0xde, 0x09, 0x35, 0x6a, 0xc1, 0x31, 0x57, 0x4c, 0xbe, 0x1d, 0xf7, 0xdf, 0x2e, 0x2f, + 0x37, 0x6d, 0x04, 0xa6, 0xe9, 0x07, 0x27, 0xbf, 0x50, 0x85, 0x53, 0x29, 0x3a, 0xb6, 0xab, 0x1d, + 0xe3, 0x97, 0xf2, 0x61, 0x23, 0x8e, 0xf8, 0xb6, 0x71, 0x02, 0x06, 0xfd, 0x2f, 0x11, 0xc6, 0x83, + 0x92, 0x35, 0x34, 0xe3, 0x3c, 0x7c, 0x7c, 0x44, 0x1c, 0x47, 0x7c, 0x2b, 0x79, 0x10, 0xe2, 0xf8, + 0x4e, 0x2e, 0x14, 0xc7, 0x11, 0xdf, 0x5e, 0xfe, 0x44, 0x31, 0x9c, 0x93, 0x8e, 0xf7, 0x98, 0x07, + 0x65, 0x26, 0x87, 0xce, 0xb4, 0xa5, 0x5d, 0xbc, 0x21, 0x96, 0x55, 0x73, 0x60, 0x6f, 0xaa, 0x49, + 0xde, 0x82, 0xe1, 0x45, 0xdb, 0xf5, 0x56, 0x1c, 0xea, 0x2e, 0x06, 0xe9, 0x2b, 0xf0, 0xfd, 0x79, + 0x47, 0x80, 0x9b, 0x9d, 0xc8, 0xec, 0x2f, 0x93, 0xab, 0xff, 0xa8, 0x90, 0xd0, 0x06, 0x6e, 0xb8, + 0x1e, 0x49, 0x6d, 0x38, 0x80, 0xa1, 0x4e, 0xae, 0x87, 0xab, 0x20, 0xb7, 0xf0, 0xfb, 0xa5, 0xd8, + 0x9c, 0xcb, 0xc2, 0xc0, 0x8f, 0x92, 0x90, 0xcf, 0xc1, 0xb9, 0x08, 0x60, 0x51, 0x77, 0xf4, 0x35, + 0xea, 0x85, 0xa9, 0x42, 0x31, 0xda, 0x9a, 0x5f, 0xba, 0xd9, 0x09, 0xd0, 0x72, 0xfa, 0xd1, 0x0c, + 0x0e, 0x92, 0x6a, 0x0d, 0xec, 0xc2, 0x4f, 0xfb, 0x6b, 0x85, 0xd0, 0xd0, 0x89, 0x46, 0x4d, 0xd6, + 0xa8, 0xdb, 0x6d, 0x7b, 0x8f, 0x6f, 0x07, 0xef, 0x2d, 0x27, 0xcd, 0x0c, 0x9c, 0xa8, 0xde, 0xbf, + 0x4f, 0x5b, 0x9e, 0x1f, 0x0c, 0xde, 0x15, 0x71, 0x32, 0xf9, 0xc6, 0x43, 0xa0, 0x44, 0x70, 0x6f, + 0xb9, 0x5f, 0xe3, 0xc5, 0xd4, 0x7f, 0x5c, 0x04, 0x25, 0x30, 0xfc, 0x83, 0xf7, 0x8a, 0x87, 0xb8, + 0xc8, 0x7e, 0x24, 0x7a, 0xc5, 0x84, 0x93, 0xa1, 0x30, 0xc4, 0x43, 0x31, 0x91, 0xbc, 0xbe, 0x12, + 0x67, 0x16, 0x12, 0xf2, 0xbd, 0xc4, 0x05, 0xb1, 0x97, 0x20, 0xe1, 0x7b, 0xd0, 0xa6, 0xcb, 0x59, + 0x68, 0x49, 0xae, 0xe4, 0xcb, 0x39, 0x38, 0xed, 0x77, 0xca, 0xc2, 0x32, 0x33, 0xaa, 0x27, 0xed, + 0xae, 0x15, 0xbc, 0xa2, 0x7a, 0x23, 0xbb, 0x3a, 0xde, 0x49, 0xe3, 0x69, 0x85, 0x79, 0x4b, 0x82, + 0x88, 0x30, 0x81, 0x42, 0xd8, 0x48, 0xd3, 0x6c, 0x21, 0x91, 0x96, 0x5a, 0xef, 0x85, 0x9b, 0x70, + 0x3e, 0x93, 0xe5, 0x76, 0x46, 0x6c, 0xbf, 0x6c, 0xc4, 0xfe, 0x77, 0xb9, 0x70, 0x22, 0x8a, 0x09, + 0x89, 0x8c, 0x03, 0x84, 0x20, 0xb1, 0xad, 0xc5, 0x47, 0x5a, 0xa1, 0xd0, 0x34, 0x89, 0x82, 0x2c, + 0x40, 0x49, 0x88, 0x85, 0xa7, 0xe5, 0xfe, 0xf8, 0x36, 0xbd, 0x30, 0x2e, 0xcb, 0x01, 0xb7, 0xac, + 0xe2, 0x9b, 0x05, 0x9b, 0x0b, 0xaf, 0xc3, 0xf0, 0x5e, 0xbf, 0xeb, 0xcb, 0x05, 0x20, 0xf2, 0x1e, + 0xf4, 0x10, 0x0d, 0xf4, 0x23, 0x3c, 0x85, 0x5d, 0x81, 0x41, 0xf6, 0x09, 0x98, 0xa8, 0x46, 0x0a, + 0x4c, 0xdd, 0x15, 0x30, 0x2d, 0xc0, 0x86, 0x51, 0xe1, 0x06, 0xd2, 0xa3, 0xc2, 0xa9, 0x3f, 0x5d, + 0x80, 0xb3, 0x72, 0x87, 0xd4, 0x28, 0xe6, 0xba, 0x38, 0xee, 0x94, 0x0f, 0xb1, 0x53, 0x54, 0x28, + 0xf1, 0xad, 0x87, 0x48, 0x3a, 0xc2, 0x8f, 0x85, 0x10, 0xa2, 0x09, 0x8c, 0xfa, 0xbf, 0xe4, 0x61, + 0x34, 0x30, 0xef, 0x74, 0xc7, 0x7d, 0x8c, 0xbb, 0xe3, 0x93, 0x30, 0x8a, 0x71, 0xbd, 0xd6, 0xa8, + 0xc5, 0x63, 0x5f, 0xf5, 0x4b, 0x59, 0x82, 0x7c, 0x84, 0x48, 0x08, 0x17, 0x21, 0x64, 0xda, 0xcf, + 0x2d, 0x3f, 0x29, 0xda, 0x1a, 0x37, 0xfb, 0x38, 0x5c, 0xfd, 0xab, 0x05, 0x18, 0xf1, 0xa5, 0x3c, + 0x61, 0x1e, 0xd5, 0x7b, 0x9e, 0xc3, 0x15, 0xf2, 0x35, 0x80, 0x45, 0xdb, 0xf1, 0xf4, 0xf6, 0x7c, + 0xa8, 0xf9, 0x78, 0x40, 0xda, 0x41, 0x28, 0x2f, 0x23, 0x91, 0xe0, 0xfa, 0x15, 0x9a, 0xd5, 0x7c, + 0x62, 0xe2, 0xeb, 0x57, 0x00, 0xd5, 0x24, 0x0a, 0xf5, 0xb7, 0xf2, 0x70, 0xc2, 0xef, 0xa4, 0xa9, + 0x47, 0xb4, 0xd5, 0x7d, 0x9c, 0xe7, 0xa6, 0xa8, 0xb4, 0xfb, 0xb7, 0x95, 0xb6, 0xfa, 0x7f, 0x49, + 0x13, 0xc9, 0x64, 0xdb, 0x3e, 0x9e, 0x48, 0xfe, 0x75, 0xe8, 0xb8, 0xfa, 0x23, 0x05, 0x38, 0xed, + 0x4b, 0x7d, 0xba, 0x6b, 0xe1, 0xd1, 0xc2, 0xa4, 0xde, 0x6e, 0x3f, 0xce, 0xbb, 0xf1, 0x61, 0x5f, + 0x10, 0x0b, 0x22, 0x50, 0xa6, 0x48, 0xce, 0x79, 0x5f, 0x80, 0x9b, 0xb6, 0x69, 0x68, 0x32, 0x11, + 0x79, 0x07, 0x46, 0xfc, 0x9f, 0x55, 0x67, 0xc5, 0xdf, 0x82, 0xe3, 0x45, 0x41, 0x50, 0x48, 0x77, + 0x22, 0xd1, 0x35, 0x22, 0x05, 0xd4, 0x2f, 0x0e, 0xc0, 0x85, 0x7b, 0xa6, 0x65, 0xd8, 0xeb, 0xae, + 0x9f, 0xdb, 0xf5, 0xc8, 0x1f, 0x94, 0x1d, 0x76, 0x4e, 0xd7, 0x77, 0xe1, 0x4c, 0x5c, 0xa4, 0x4e, + 0x10, 0x71, 0x5f, 0xf4, 0xce, 0x3a, 0x27, 0x68, 0xfa, 0x59, 0x5e, 0xc5, 0x6d, 0x9b, 0x96, 0x5e, + 0x32, 0x9e, 0x26, 0x76, 0x60, 0x27, 0x69, 0x62, 0x9f, 0x87, 0x52, 0xcd, 0x5e, 0xd3, 0x4d, 0x3f, + 0xce, 0x12, 0x8e, 0xe2, 0xa0, 0x5e, 0xc4, 0x68, 0x82, 0x82, 0xf1, 0x17, 0x15, 0x63, 0x97, 0x0d, + 0x85, 0xfc, 0xfd, 0x02, 0xcc, 0x4a, 0xd3, 0x64, 0x22, 0x62, 0xc3, 0xa8, 0xa8, 0x4e, 0xdc, 0x8d, + 0x01, 0x6e, 0x9e, 0x5e, 0xf1, 0x65, 0x94, 0xad, 0x56, 0xe3, 0x91, 0x72, 0x7c, 0x1b, 0xc5, 0xb3, + 0xd7, 0x8a, 0x8f, 0xe1, 0xb7, 0x64, 0x5a, 0x94, 0xbf, 0x24, 0x04, 0x9c, 0x64, 0x86, 0x93, 0x42, + 0xc0, 0x59, 0x46, 0x26, 0x22, 0x53, 0x70, 0x12, 0xe3, 0xa2, 0x07, 0x5b, 0x29, 0xa6, 0x12, 0x23, + 0x68, 0x54, 0xe2, 0x95, 0x0b, 0x0f, 0xa5, 0xce, 0x3e, 0xae, 0xd9, 0x12, 0x68, 0x2d, 0x59, 0x82, + 0x9c, 0x87, 0xc2, 0xfc, 0x6c, 0x15, 0xef, 0x6a, 0x06, 0x79, 0x4e, 0x32, 0xab, 0xad, 0x6b, 0x0c, + 0x76, 0xe1, 0xd3, 0x40, 0x92, 0x9f, 0xb3, 0xab, 0xfb, 0x98, 0xff, 0x52, 0xda, 0xf2, 0x1d, 0x75, + 0x8f, 0x9a, 0x83, 0x98, 0x08, 0x23, 0xe9, 0x00, 0xfb, 0x3f, 0xcc, 0x74, 0x80, 0xa5, 0x03, 0x4d, + 0x07, 0xa8, 0xfe, 0x72, 0x0e, 0x4e, 0x26, 0x72, 0x07, 0x90, 0x97, 0x01, 0x38, 0x44, 0x8a, 0xd1, + 0x8a, 0x21, 0x84, 0xc2, 0x7c, 0x02, 0x62, 0x79, 0x0c, 0xc9, 0xc8, 0x35, 0x18, 0xe4, 0xbf, 0x44, + 0x94, 0xb2, 0x64, 0x91, 0x6e, 0xd7, 0x34, 0xb4, 0x80, 0x28, 0xac, 0x05, 0x6f, 0x24, 0x0b, 0xa9, + 0x45, 0xbc, 0x8d, 0x4e, 0x50, 0x0b, 0x23, 0x53, 0x7f, 0x32, 0x0f, 0x23, 0x41, 0x83, 0xab, 0xc6, + 0x61, 0xe9, 0x5c, 0x49, 0xa4, 0x61, 0x28, 0x6c, 0x97, 0x86, 0x21, 0x36, 0xdf, 0x8a, 0xbc, 0x0b, + 0x07, 0xf7, 0x2a, 0xeb, 0x2b, 0x79, 0x38, 0x11, 0xd4, 0x7a, 0x88, 0x97, 0x5f, 0x1f, 0x21, 0x91, + 0x7c, 0x39, 0x07, 0xca, 0x84, 0xd9, 0x6e, 0x9b, 0xd6, 0x4a, 0xdd, 0xba, 0x6f, 0x3b, 0x6b, 0x38, + 0x21, 0x1e, 0xde, 0x11, 0xae, 0xfa, 0xe7, 0x73, 0x70, 0x52, 0x34, 0x68, 0x52, 0x77, 0x8c, 0xc3, + 0x3b, 0x1f, 0x8b, 0xb7, 0xe4, 0xf0, 0xf4, 0x45, 0xfd, 0x66, 0x1e, 0x60, 0xd6, 0x6e, 0x3d, 0x38, + 0xe2, 0x8f, 0xba, 0xde, 0x84, 0x12, 0x77, 0x8b, 0x17, 0x1a, 0x7b, 0x52, 0x3c, 0x5e, 0x62, 0x9f, + 0xc6, 0x11, 0x13, 0x65, 0x31, 0x1f, 0x97, 0xb8, 0x67, 0xbd, 0x92, 0xd3, 0x44, 0x11, 0x56, 0x29, + 0xa3, 0x13, 0x0b, 0x46, 0x50, 0x29, 0x83, 0x45, 0x2b, 0xdd, 0xda, 0xac, 0x14, 0xdb, 0x76, 0xeb, + 0x81, 0x86, 0xf4, 0xea, 0xbf, 0xcc, 0x71, 0xd9, 0x1d, 0xf1, 0xa7, 0xa9, 0xfe, 0xe7, 0x17, 0x77, + 0xf9, 0xf9, 0x7f, 0x21, 0x07, 0xa7, 0x35, 0xda, 0xb2, 0x1f, 0x52, 0x67, 0x63, 0xd2, 0x36, 0xe8, + 0x4d, 0x6a, 0x51, 0xe7, 0xb0, 0x46, 0xd4, 0x6f, 0x63, 0xde, 0x9a, 0xb0, 0x31, 0x77, 0x5c, 0x6a, + 0x1c, 0x9d, 0x9c, 0x42, 0xea, 0xaf, 0x0e, 0x80, 0x92, 0x6a, 0xf5, 0x1e, 0x59, 0x73, 0x2e, 0x73, + 0x2b, 0x53, 0x3c, 0xa8, 0xad, 0x4c, 0xff, 0xee, 0xb6, 0x32, 0xa5, 0xdd, 0x6e, 0x65, 0x06, 0x76, + 0xb2, 0x95, 0x59, 0x8b, 0x6f, 0x65, 0x06, 0x71, 0x2b, 0xf3, 0x72, 0xcf, 0xad, 0xcc, 0x94, 0x65, + 0xec, 0x71, 0x23, 0x73, 0x64, 0xf3, 0x5d, 0xef, 0x65, 0x07, 0x76, 0x85, 0x4d, 0x8a, 0x2d, 0xdb, + 0x31, 0xa8, 0x21, 0x36, 0x5e, 0x78, 0xea, 0xef, 0x08, 0x98, 0x16, 0x60, 0x13, 0xc9, 0xc3, 0x47, + 0x77, 0x92, 0x3c, 0xfc, 0x00, 0xf6, 0x5f, 0x5f, 0xca, 0xc3, 0xc9, 0x49, 0xea, 0x78, 0x3c, 0x16, + 0xed, 0x41, 0xb8, 0xc4, 0x55, 0xe1, 0x84, 0xc4, 0x10, 0x2d, 0xf2, 0x7c, 0xe8, 0xe6, 0xd7, 0xa2, + 0x8e, 0x17, 0xf7, 0x12, 0x8c, 0xd3, 0xb3, 0xea, 0xfd, 0x04, 0x7e, 0x62, 0xec, 0x06, 0xd5, 0xfb, + 0x70, 0x2e, 0x48, 0x53, 0xfc, 0xd2, 0x02, 0x7a, 0x29, 0x27, 0x5f, 0x71, 0xf7, 0x39, 0xf9, 0xd4, + 0x5f, 0xca, 0xc1, 0x65, 0x8d, 0x5a, 0x74, 0x5d, 0x5f, 0x6e, 0x53, 0xa9, 0x59, 0x62, 0x65, 0x60, + 0xb3, 0x86, 0xe9, 0xae, 0xe9, 0x5e, 0x6b, 0x75, 0x5f, 0x32, 0x9a, 0x86, 0x11, 0x79, 0xfe, 0xda, + 0xc5, 0xdc, 0x16, 0x29, 0xa7, 0xfe, 0x6a, 0x11, 0x06, 0x26, 0x6c, 0xef, 0x96, 0xbd, 0xcf, 0x24, + 0x91, 0xe1, 0x94, 0x9f, 0xdf, 0xc5, 0x59, 0xcf, 0x27, 0xb0, 0x72, 0x29, 0x6f, 0x06, 0xba, 0x90, + 0x2e, 0xdb, 0x89, 0xfc, 0x22, 0x3e, 0xd9, 0x2e, 0xd3, 0x43, 0xbe, 0x0a, 0x43, 0x18, 0x42, 0x46, + 0x3a, 0x8d, 0x45, 0x07, 0x6d, 0x8f, 0x01, 0xe3, 0x75, 0x84, 0xa4, 0xe4, 0x73, 0x91, 0xe0, 0xb9, + 0xa5, 0xfd, 0xa7, 0x93, 0x94, 0xe3, 0xe8, 0xbe, 0xcc, 0x2f, 0xf2, 0xb0, 0x4d, 0x52, 0xea, 0x1d, + 0x3c, 0x45, 0x89, 0x35, 0x29, 0x20, 0x3c, 0xc0, 0x54, 0x8f, 0x93, 0x30, 0x3a, 0x61, 0x7b, 0x92, + 0x33, 0xf0, 0x50, 0xf8, 0x96, 0x94, 0x49, 0x3e, 0xdd, 0x13, 0x38, 0x5a, 0x46, 0xfd, 0xd3, 0x22, + 0x8c, 0xf8, 0x3f, 0x0f, 0x49, 0x77, 0x5e, 0x84, 0xd2, 0x8c, 0x2d, 0x65, 0x1f, 0x41, 0x07, 0xe2, + 0x55, 0xdb, 0x8d, 0x79, 0x46, 0x0b, 0x22, 0x26, 0xf5, 0x79, 0xdb, 0x90, 0xdd, 0xdf, 0x51, 0xea, + 0x96, 0x6d, 0x24, 0xde, 0x20, 0x07, 0x84, 0xe4, 0x32, 0x14, 0xf1, 0xe5, 0x80, 0x74, 0x90, 0x1f, + 0x7b, 0x2d, 0x80, 0x78, 0x49, 0x2b, 0x4b, 0xbb, 0xd5, 0xca, 0x81, 0xbd, 0x6a, 0xe5, 0xe0, 0xc1, + 0x6a, 0xe5, 0x7b, 0x30, 0x82, 0x35, 0xf9, 0xc9, 0x0b, 0xb7, 0x5f, 0x58, 0xcf, 0x8b, 0xb5, 0x6f, + 0x94, 0xb7, 0x5b, 0xa4, 0x30, 0xc4, 0x25, 0x2f, 0xc2, 0x2a, 0xa6, 0xbb, 0xb0, 0x8f, 0xed, 0xf4, + 0x3f, 0xca, 0xc1, 0xc0, 0x1d, 0xeb, 0x81, 0x65, 0xaf, 0xef, 0x4f, 0xe3, 0x5e, 0x86, 0x61, 0xc1, + 0x46, 0x5a, 0x5d, 0xf0, 0x59, 0x79, 0x97, 0x83, 0x9b, 0xc8, 0x49, 0x93, 0xa9, 0xc8, 0x5b, 0x41, + 0x21, 0x7c, 0x1c, 0x54, 0x08, 0xf3, 0xf7, 0xf8, 0x85, 0x5a, 0xd1, 0x04, 0x1e, 0x32, 0x39, 0xb9, + 0x08, 0xc5, 0x1a, 0x6b, 0xaa, 0x14, 0xc8, 0x97, 0x35, 0x45, 0x43, 0xa8, 0xfa, 0xa5, 0x22, 0x8c, + 0xc5, 0x0e, 0xbe, 0x9e, 0x87, 0x21, 0x71, 0xf0, 0x64, 0xfa, 0x19, 0x45, 0xf0, 0xf1, 0x50, 0x00, + 0xd4, 0x06, 0xf9, 0x9f, 0x75, 0x83, 0x7c, 0x0a, 0x06, 0x6c, 0x17, 0x17, 0x45, 0xfc, 0x96, 0xb1, + 0x70, 0x08, 0x2d, 0x34, 0x58, 0xdb, 0xf9, 0xe0, 0x10, 0x24, 0xb2, 0x46, 0xda, 0x2e, 0x7e, 0xda, + 0x0d, 0x18, 0xd2, 0x5d, 0x97, 0x7a, 0x4d, 0x4f, 0x5f, 0x91, 0x93, 0x8c, 0x04, 0x40, 0x79, 0x74, + 0x20, 0x70, 0x49, 0x5f, 0x21, 0x9f, 0x86, 0xd1, 0x96, 0x43, 0x71, 0xd9, 0xd4, 0xdb, 0xac, 0x95, + 0x92, 0x59, 0x1b, 0x41, 0xc8, 0xf7, 0x27, 0x21, 0xa2, 0x6e, 0x90, 0xbb, 0x30, 0x2a, 0x3e, 0x87, + 0x7b, 0xee, 0xe3, 0x40, 0x1b, 0x0b, 0x97, 0x31, 0x2e, 0x12, 0xee, 0xbb, 0x2f, 0x1e, 0x70, 0xc8, + 0xe4, 0x32, 0x5f, 0x43, 0x22, 0x25, 0x0b, 0x40, 0xd6, 0xe9, 0x72, 0x53, 0xef, 0x7a, 0xab, 0xac, + 0x2e, 0x1e, 0x23, 0x5f, 0x64, 0x03, 0xc5, 0x57, 0x0f, 0x49, 0xac, 0xfc, 0x18, 0x64, 0x9d, 0x2e, + 0x57, 0x23, 0x48, 0x72, 0x0f, 0xce, 0x24, 0x8b, 0xb0, 0x4f, 0xe6, 0x97, 0x03, 0xcf, 0x6c, 0x6d, + 0x56, 0x2a, 0xa9, 0x04, 0x12, 0xdb, 0x53, 0x09, 0xb6, 0x75, 0xe3, 0x56, 0x71, 0x70, 0xa0, 0x3c, + 0xa8, 0x8d, 0xb1, 0xb2, 0xbe, 0x09, 0x69, 0x1a, 0xea, 0xef, 0xe7, 0x98, 0xa9, 0xc8, 0x3e, 0x08, + 0xd3, 0xa1, 0x33, 0x5d, 0x5f, 0xdb, 0xa5, 0xae, 0xaf, 0x85, 0x89, 0x4b, 0x4b, 0x6e, 0x8f, 0xd9, + 0x55, 0x13, 0x58, 0x32, 0x0e, 0x25, 0x43, 0x3e, 0x35, 0x3b, 0x1b, 0xed, 0x04, 0xbf, 0x1e, 0x4d, + 0x50, 0x91, 0x2b, 0x50, 0x64, 0x4b, 0x56, 0x7c, 0xcb, 0x2c, 0x5b, 0x17, 0x1a, 0x52, 0xa8, 0x3f, + 0x9c, 0x87, 0x11, 0xe9, 0x6b, 0xae, 0xef, 0xeb, 0x73, 0xde, 0xd8, 0x59, 0x33, 0x7d, 0xa7, 0x17, + 0xdc, 0x4b, 0xf9, 0x4d, 0xbe, 0x11, 0x88, 0x62, 0x47, 0x17, 0x52, 0x42, 0x30, 0xaf, 0x8a, 0x0f, + 0x2d, 0xed, 0x7c, 0xfb, 0xc8, 0xe8, 0x6f, 0x15, 0x07, 0xf3, 0xe5, 0xc2, 0xad, 0xe2, 0x60, 0xb1, + 0xdc, 0x8f, 0xc1, 0xbc, 0x30, 0x7e, 0x36, 0xdf, 0x9b, 0x5b, 0xf7, 0xcd, 0x95, 0x23, 0xfe, 0x76, + 0xe4, 0x60, 0x03, 0x9d, 0xc5, 0x64, 0x73, 0xc4, 0x1f, 0x92, 0x7c, 0xa8, 0xb2, 0x39, 0x4e, 0x74, + 0x2a, 0x64, 0xf3, 0x8f, 0x73, 0xa0, 0xa4, 0xca, 0xa6, 0x7a, 0x48, 0x7e, 0x10, 0x07, 0x97, 0xee, + 0xf4, 0x8f, 0xf3, 0x70, 0xb2, 0x6e, 0x79, 0x74, 0x85, 0xef, 0x18, 0x8f, 0xf8, 0x54, 0x71, 0x1b, + 0x86, 0xa5, 0x8f, 0x11, 0x7d, 0xfe, 0x44, 0xb0, 0x1f, 0x0f, 0x51, 0x19, 0x9c, 0xe4, 0xd2, 0x07, + 0xf7, 0x12, 0x27, 0x2e, 0xe4, 0x23, 0x3e, 0xe7, 0x1c, 0x0d, 0x21, 0x1f, 0xf1, 0xc9, 0xeb, 0x23, + 0x2a, 0xe4, 0xbf, 0x9b, 0x87, 0x53, 0x29, 0x95, 0x93, 0xcb, 0x30, 0xd0, 0xe8, 0x2e, 0x63, 0xec, + 0xae, 0x5c, 0xe8, 0x31, 0xec, 0x76, 0x97, 0x31, 0x6c, 0x97, 0xe6, 0x23, 0xc9, 0x12, 0x3e, 0xae, + 0x5f, 0xa8, 0xd7, 0x26, 0x85, 0x54, 0x55, 0x29, 0x4c, 0x00, 0x03, 0xa7, 0x7d, 0x59, 0xf0, 0x00, + 0xdf, 0x36, 0x8d, 0x56, 0xec, 0x01, 0x3e, 0x2b, 0x43, 0x7e, 0x00, 0x86, 0xaa, 0x1f, 0x74, 0x1d, + 0x8a, 0x7c, 0xb9, 0xc4, 0x9f, 0x0d, 0xf8, 0xfa, 0x88, 0x34, 0xce, 0x3c, 0x96, 0x00, 0xa3, 0x88, + 0xf3, 0x0e, 0x19, 0x92, 0x05, 0x28, 0xdd, 0x34, 0xbd, 0x99, 0xee, 0xb2, 0xe8, 0x85, 0x20, 0xbe, + 0x17, 0x87, 0xa6, 0xf1, 0xc5, 0x5d, 0x39, 0x8f, 0x53, 0x2c, 0xef, 0x81, 0x78, 0x01, 0xf5, 0x27, + 0x73, 0x70, 0x21, 0xfb, 0x73, 0xc9, 0x27, 0x60, 0x80, 0x6d, 0xf5, 0xab, 0xda, 0xbc, 0x90, 0x25, + 0xcf, 0x35, 0x6c, 0xb7, 0x69, 0x53, 0x77, 0xe4, 0xdd, 0x83, 0x4f, 0x46, 0xde, 0x86, 0xe1, 0xba, + 0xeb, 0x76, 0xa9, 0xd3, 0x78, 0xf9, 0x8e, 0x56, 0x17, 0x9b, 0x4c, 0xdc, 0xc4, 0x98, 0x08, 0x6e, + 0xba, 0x2f, 0xc7, 0xc2, 0x7d, 0xc9, 0xf4, 0xea, 0x8f, 0xe5, 0xe0, 0x62, 0x2f, 0x31, 0x91, 0x97, + 0x61, 0x70, 0x89, 0x5a, 0xba, 0xe5, 0xd5, 0x6b, 0xa2, 0x49, 0xb8, 0x67, 0xf3, 0x10, 0x16, 0xdd, + 0x7a, 0x04, 0x84, 0xac, 0x10, 0x3f, 0xa8, 0x0c, 0x3c, 0x23, 0xf8, 0xa1, 0x2a, 0xc2, 0x62, 0x85, + 0x7c, 0x42, 0xf5, 0x73, 0x70, 0x3e, 0x53, 0xaa, 0xe4, 0x53, 0x30, 0xb2, 0xe0, 0xac, 0xe8, 0x96, + 0xf9, 0x01, 0x1f, 0x14, 0xb9, 0x70, 0x5f, 0x6c, 0x4b, 0x70, 0x79, 0xaf, 0x26, 0xd3, 0xab, 0x7f, + 0x90, 0x87, 0x91, 0xc5, 0x76, 0x77, 0xc5, 0x94, 0x96, 0xb9, 0x3d, 0xef, 0x0e, 0x7c, 0x5b, 0x3d, + 0xbf, 0x3b, 0x5b, 0x9d, 0x4d, 0x0e, 0xce, 0x1e, 0x27, 0x07, 0xbf, 0x1c, 0x79, 0x0b, 0x4a, 0x1d, + 0xfc, 0x8e, 0xf8, 0xb9, 0x31, 0xff, 0xba, 0xac, 0x73, 0x63, 0x5e, 0x86, 0xcd, 0x06, 0xad, 0x7d, + 0xcc, 0x06, 0x61, 0x59, 0x49, 0xa0, 0xe1, 0x92, 0x76, 0x2c, 0xd0, 0x03, 0x11, 0x68, 0xb8, 0x7c, + 0x1d, 0x0b, 0x74, 0x1f, 0x02, 0xfd, 0xd5, 0x3c, 0x8c, 0x45, 0xab, 0x24, 0x9f, 0x80, 0x61, 0x5e, + 0x0d, 0x3f, 0xc5, 0xca, 0x49, 0x2e, 0xd0, 0x21, 0x58, 0x03, 0xfe, 0x43, 0x1c, 0xc7, 0x9d, 0x58, + 0xd5, 0xdd, 0x66, 0x78, 0x9e, 0xc4, 0x6f, 0x9b, 0x07, 0xb9, 0xdf, 0x56, 0x0c, 0xa5, 0x8d, 0xad, + 0xea, 0xee, 0x64, 0xf8, 0x9b, 0x4c, 0x01, 0x71, 0x68, 0xd7, 0xa5, 0x51, 0x06, 0x45, 0x64, 0x20, + 0xb2, 0xc8, 0xc7, 0xb1, 0xda, 0x49, 0x0e, 0x93, 0xd9, 0x7c, 0x3e, 0x68, 0x36, 0x2a, 0x43, 0xff, + 0x0e, 0x52, 0xdc, 0x4b, 0xf4, 0xe9, 0x87, 0xb2, 0x9c, 0xa0, 0xa6, 0x7b, 0x3a, 0x3f, 0x42, 0xf0, + 0x3b, 0x40, 0xfd, 0x3d, 0x17, 0xfa, 0x17, 0x2c, 0xba, 0x70, 0x9f, 0xbc, 0x04, 0x43, 0x4c, 0x61, + 0x66, 0x6d, 0xd6, 0x97, 0x39, 0xe1, 0xed, 0x21, 0x69, 0x12, 0x22, 0x66, 0xfa, 0xb4, 0x90, 0x8a, + 0xdc, 0x00, 0x08, 0x1f, 0xc4, 0x09, 0xed, 0x23, 0x72, 0x19, 0x8e, 0x99, 0xe9, 0xd3, 0x24, 0x3a, + 0xbf, 0x94, 0x78, 0x4e, 0x54, 0x48, 0x96, 0xe2, 0x18, 0xbf, 0x94, 0x18, 0x1f, 0xb3, 0x40, 0xd8, + 0xaf, 0x45, 0xdd, 0x75, 0xd7, 0x6d, 0xc7, 0x98, 0x5c, 0xd5, 0xad, 0x15, 0x1a, 0xdf, 0xeb, 0x25, + 0x29, 0x66, 0xfa, 0xb4, 0x94, 0x72, 0xe4, 0x0d, 0x18, 0x91, 0xdd, 0x5f, 0xe3, 0x2e, 0x2a, 0x32, + 0x6e, 0xa6, 0x4f, 0x8b, 0xd0, 0x92, 0xd7, 0x60, 0x58, 0xfc, 0xbe, 0x65, 0x8b, 0xfb, 0x6f, 0x29, + 0x72, 0x92, 0x84, 0x9a, 0xe9, 0xd3, 0x64, 0x4a, 0xa9, 0xd2, 0x45, 0xc7, 0xb4, 0x3c, 0xf1, 0xa2, + 0x3a, 0x5e, 0x29, 0xe2, 0xa4, 0x4a, 0xf1, 0x37, 0x79, 0x1b, 0x46, 0x83, 0x90, 0x54, 0xef, 0xd3, + 0x96, 0x27, 0x8e, 0xea, 0xcf, 0xc4, 0x0a, 0x73, 0xe4, 0x4c, 0x9f, 0x16, 0xa5, 0x26, 0x57, 0xa0, + 0xa4, 0x51, 0xd7, 0xfc, 0xc0, 0xbf, 0xdc, 0x1e, 0x93, 0xc6, 0xb9, 0xf9, 0x01, 0x93, 0x92, 0xc0, + 0xb3, 0xde, 0x09, 0x6f, 0xd3, 0xc5, 0xc1, 0x3a, 0x89, 0xd5, 0x32, 0x65, 0x19, 0xac, 0x77, 0x24, + 0x57, 0x8a, 0x4f, 0x87, 0x81, 0xba, 0x44, 0x9e, 0xda, 0xe1, 0x78, 0x44, 0x04, 0x19, 0x3b, 0xd3, + 0xa7, 0xc5, 0xe8, 0x25, 0xa9, 0xd6, 0x4c, 0xf7, 0x81, 0x08, 0xb0, 0x1a, 0x97, 0x2a, 0x43, 0x49, + 0x52, 0x65, 0x3f, 0xa5, 0xaa, 0xe7, 0xa9, 0xb7, 0x6e, 0x3b, 0x0f, 0x44, 0x38, 0xd5, 0x78, 0xd5, + 0x02, 0x2b, 0x55, 0x2d, 0x20, 0x72, 0xd5, 0x6c, 0xc0, 0x8d, 0xa5, 0x57, 0xad, 0x7b, 0xba, 0x5c, + 0x35, 0x3f, 0x37, 0xf4, 0x3b, 0x69, 0x96, 0xea, 0x0f, 0xa9, 0x72, 0x22, 0xb5, 0x43, 0x11, 0x27, + 0x75, 0x28, 0xfe, 0x66, 0x95, 0x4a, 0x49, 0xec, 0x95, 0x72, 0xb4, 0x52, 0x09, 0xc5, 0x2a, 0x95, + 0xd3, 0xdd, 0xdf, 0x90, 0x33, 0xa5, 0x2b, 0x27, 0xa3, 0x1d, 0x14, 0x62, 0x58, 0x07, 0x49, 0x19, + 0xd5, 0x2b, 0x98, 0x85, 0x59, 0x21, 0x48, 0x3e, 0x1c, 0xb4, 0x70, 0x72, 0x71, 0xa6, 0x4f, 0xc3, + 0xfc, 0xcc, 0x2a, 0xcf, 0xef, 0xad, 0x9c, 0x42, 0x8a, 0x11, 0x9f, 0x82, 0xc1, 0x66, 0xfa, 0x34, + 0x9e, 0xfb, 0xfb, 0x25, 0x29, 0x07, 0xa2, 0x72, 0x3a, 0x3a, 0x45, 0x04, 0x08, 0x36, 0x45, 0x84, + 0x99, 0x12, 0xa7, 0x93, 0x99, 0xfe, 0x94, 0x33, 0xd1, 0xa5, 0x26, 0x8e, 0x9f, 0xe9, 0xd3, 0x92, + 0xd9, 0x01, 0x5f, 0x8b, 0x24, 0xbf, 0x53, 0xce, 0xc6, 0xc2, 0x95, 0x85, 0x28, 0x26, 0x2e, 0x39, + 0x4d, 0xde, 0x02, 0x9c, 0xe2, 0xb9, 0x73, 0x45, 0xc0, 0x31, 0x31, 0x59, 0x9d, 0x8b, 0x6e, 0xb3, + 0x52, 0x48, 0x66, 0xfa, 0xb4, 0xb4, 0x92, 0x64, 0x32, 0x91, 0x82, 0x4e, 0x51, 0xa2, 0x9e, 0x3c, + 0x31, 0xf4, 0x4c, 0x9f, 0x96, 0x48, 0x5a, 0x77, 0x43, 0xce, 0xfd, 0xa6, 0x9c, 0x8f, 0x76, 0x62, + 0x88, 0x61, 0x9d, 0x28, 0xe5, 0x88, 0xbb, 0x21, 0xe7, 0x03, 0x53, 0x2e, 0x24, 0x4b, 0x85, 0x33, + 0xa7, 0x94, 0x37, 0x4c, 0x4b, 0x4f, 0x71, 0xa4, 0x3c, 0x21, 0x12, 0x1d, 0x8b, 0xf2, 0x69, 0x34, + 0x33, 0x7d, 0x5a, 0x7a, 0x7a, 0x24, 0x2d, 0x3d, 0x37, 0x90, 0x72, 0xb1, 0x17, 0xcf, 0xa0, 0x75, + 0xe9, 0x79, 0x85, 0xf4, 0x1e, 0x99, 0x5a, 0x94, 0x4b, 0xd1, 0x0d, 0x59, 0x26, 0xe1, 0x4c, 0x9f, + 0xd6, 0x23, 0xdf, 0xcb, 0x9d, 0x8c, 0xb4, 0x29, 0xca, 0x93, 0xd1, 0x3c, 0xe7, 0xa9, 0x44, 0x33, + 0x7d, 0x5a, 0x46, 0xd2, 0x95, 0x3b, 0x19, 0x59, 0x35, 0x94, 0x4a, 0x4f, 0xb6, 0x81, 0x3c, 0x32, + 0x72, 0x72, 0x2c, 0xa4, 0x26, 0xa4, 0x50, 0x9e, 0x8a, 0xaa, 0x6e, 0x0a, 0x09, 0x53, 0xdd, 0xb4, + 0x54, 0x16, 0x0b, 0xa9, 0x19, 0x14, 0x94, 0xa7, 0x7b, 0x30, 0x0c, 0xda, 0x98, 0x9a, 0x7b, 0x61, + 0x21, 0x35, 0x85, 0x81, 0xa2, 0x46, 0x19, 0xa6, 0x90, 0x30, 0x86, 0x69, 0xc9, 0x0f, 0x16, 0x52, + 0x23, 0xdd, 0x2b, 0xcf, 0xf4, 0x60, 0x18, 0xb6, 0x30, 0x2d, 0x46, 0xfe, 0x6b, 0x91, 0x50, 0xf3, + 0xca, 0xb3, 0xd1, 0x79, 0x43, 0x42, 0xb1, 0x79, 0x43, 0x0e, 0x4a, 0x3f, 0x99, 0x88, 0x83, 0xab, + 0x3c, 0x17, 0x1d, 0xe6, 0x31, 0x34, 0x1b, 0xe6, 0xf1, 0xc8, 0xb9, 0x93, 0x89, 0x78, 0xa0, 0xca, + 0xe5, 0x2c, 0x26, 0x88, 0x8e, 0x32, 0xe1, 0x11, 0x44, 0xeb, 0x29, 0x01, 0x29, 0x95, 0x8f, 0x45, + 0xbd, 0xd0, 0x13, 0x04, 0x33, 0x7d, 0x5a, 0x4a, 0x18, 0x4b, 0x2d, 0x3d, 0xfa, 0x92, 0x72, 0x25, + 0x3a, 0x6c, 0xd3, 0x68, 0xd8, 0xb0, 0x4d, 0x8d, 0xdc, 0x34, 0x9b, 0xf6, 0x54, 0x46, 0xb9, 0x1a, + 0x35, 0xcc, 0x92, 0x14, 0xcc, 0x30, 0x4b, 0x79, 0x62, 0xa3, 0xa5, 0x47, 0x04, 0x52, 0x9e, 0xef, + 0xd9, 0x42, 0xa4, 0x49, 0x69, 0x21, 0x0f, 0x90, 0x13, 0xda, 0x4e, 0x77, 0x3a, 0x6d, 0x5b, 0x37, + 0x94, 0x8f, 0xa7, 0xda, 0x4e, 0x1c, 0x29, 0xd9, 0x4e, 0x1c, 0xc0, 0x56, 0x79, 0xf9, 0x45, 0x86, + 0xf2, 0x42, 0x74, 0x95, 0x97, 0x71, 0x6c, 0x95, 0x8f, 0xbc, 0xde, 0x98, 0x4c, 0xbc, 0x5e, 0x50, + 0x5e, 0x8c, 0x2a, 0x40, 0x0c, 0xcd, 0x14, 0x20, 0xfe, 0xde, 0xe1, 0x0b, 0xd9, 0xfe, 0xfe, 0xca, + 0x38, 0x72, 0x7b, 0xca, 0xe7, 0x96, 0x45, 0x37, 0xd3, 0xa7, 0x65, 0xbf, 0x19, 0xa8, 0xa7, 0xb8, + 0xef, 0x2b, 0xd7, 0xa2, 0x0a, 0x96, 0x20, 0x60, 0x0a, 0x96, 0x74, 0xfa, 0xaf, 0xa7, 0xf8, 0xdf, + 0x2b, 0x9f, 0xc8, 0x64, 0x15, 0x7c, 0x73, 0x8a, 0xd7, 0xfe, 0x0d, 0xd9, 0x81, 0x5e, 0x79, 0x29, + 0xba, 0xd8, 0x85, 0x18, 0xb6, 0xd8, 0x49, 0x8e, 0xf6, 0x37, 0x64, 0xd7, 0x71, 0xe5, 0x7a, 0xb2, + 0x54, 0xb8, 0x44, 0x4a, 0x2e, 0xe6, 0x5a, 0xba, 0xc7, 0xb5, 0xf2, 0x72, 0x54, 0xeb, 0xd2, 0x68, + 0x98, 0xd6, 0xa5, 0x7a, 0x6b, 0x4f, 0x27, 0x1d, 0xa7, 0x95, 0x1b, 0xf1, 0x4d, 0x76, 0x14, 0xcf, + 0x2c, 0x9f, 0x84, 0xb3, 0xf5, 0xa7, 0xe3, 0xa1, 0x01, 0x95, 0x57, 0x62, 0x97, 0xd4, 0x11, 0x2c, + 0xb3, 0x6f, 0x63, 0xa1, 0x04, 0x3f, 0x1d, 0x8f, 0xa6, 0xa7, 0xbc, 0x9a, 0xce, 0x21, 0xd0, 0x95, + 0x78, 0xf4, 0xbd, 0x4f, 0xc7, 0x03, 0xd0, 0x29, 0xaf, 0xa5, 0x73, 0x08, 0xa4, 0x1b, 0x0f, 0x58, + 0xf7, 0x92, 0x14, 0x12, 0x5f, 0xf9, 0x64, 0xd4, 0x74, 0x0c, 0x10, 0xcc, 0x74, 0x0c, 0x03, 0xe7, + 0xbf, 0x24, 0x85, 0x92, 0x57, 0x5e, 0x4f, 0x14, 0x09, 0x1a, 0x2b, 0x05, 0x9c, 0x7f, 0x49, 0x0a, + 0xc1, 0xae, 0xbc, 0x91, 0x28, 0x12, 0xb4, 0x4e, 0x0a, 0xd4, 0x6e, 0xf4, 0x7a, 0x6d, 0xab, 0xbc, + 0x19, 0x3d, 0xba, 0xce, 0xa6, 0x9c, 0xe9, 0xd3, 0x7a, 0xbd, 0xda, 0xfd, 0x42, 0xb6, 0x1b, 0xba, + 0xf2, 0x56, 0x74, 0x08, 0x67, 0xd1, 0xb1, 0x21, 0x9c, 0xe9, 0xca, 0xfe, 0x76, 0x2c, 0xf2, 0x86, + 0xf2, 0x76, 0x74, 0x8a, 0x8b, 0x20, 0xd9, 0x14, 0x17, 0x8f, 0xd3, 0x11, 0x09, 0x29, 0xa1, 0x7c, + 0x2a, 0x3a, 0xc5, 0xc9, 0x38, 0x36, 0xc5, 0x45, 0xc2, 0x4f, 0x4c, 0x26, 0x22, 0x1d, 0x28, 0xef, + 0x44, 0xa7, 0xb8, 0x18, 0x9a, 0x4d, 0x71, 0xf1, 0xd8, 0x08, 0x6f, 0xc7, 0x1e, 0xfc, 0x2b, 0x9f, + 0x4e, 0x6f, 0x3f, 0x22, 0xe5, 0xf6, 0xf3, 0xf0, 0x00, 0x5a, 0xfa, 0xcb, 0x75, 0xa5, 0x1a, 0x1d, + 0xbf, 0x69, 0x34, 0x6c, 0xfc, 0xa6, 0xbe, 0x7a, 0x8f, 0x6f, 0x1c, 0x84, 0x56, 0x4d, 0xf4, 0xd8, + 0x38, 0x84, 0xa6, 0x48, 0x0a, 0x38, 0xb2, 0x47, 0xe6, 0x1b, 0xa1, 0xc9, 0x8c, 0x3d, 0xb2, 0xbf, + 0x0d, 0x8a, 0xd1, 0xb3, 0xd9, 0x35, 0xe1, 0x15, 0xad, 0xd4, 0xa2, 0xb3, 0x6b, 0x82, 0x80, 0xcd, + 0xae, 0x49, 0x5f, 0xea, 0x69, 0x28, 0x0b, 0x2d, 0xe2, 0xce, 0xde, 0xa6, 0xb5, 0xa2, 0x4c, 0xc5, + 0x5e, 0x87, 0xc6, 0xf0, 0x6c, 0x76, 0x8a, 0xc3, 0x70, 0xbd, 0xe6, 0xb0, 0xc9, 0xb6, 0xd9, 0x59, + 0xb6, 0x75, 0xc7, 0x68, 0x50, 0xcb, 0x50, 0xa6, 0x63, 0xeb, 0x75, 0x0a, 0x0d, 0xae, 0xd7, 0x29, + 0x70, 0x0c, 0x68, 0x17, 0x83, 0x6b, 0xb4, 0x45, 0xcd, 0x87, 0x54, 0xb9, 0x89, 0x6c, 0x2b, 0x59, + 0x6c, 0x05, 0xd9, 0x4c, 0x9f, 0x96, 0xc5, 0x81, 0xd9, 0xea, 0x73, 0x1b, 0x8d, 0x77, 0x67, 0x83, + 0x60, 0x09, 0x8b, 0x0e, 0xed, 0xe8, 0x0e, 0x55, 0x66, 0xa2, 0xb6, 0x7a, 0x2a, 0x11, 0xb3, 0xd5, + 0x53, 0x11, 0x49, 0xb6, 0xfe, 0x58, 0xa8, 0xf7, 0x62, 0x1b, 0x8e, 0x88, 0xf4, 0xd2, 0x6c, 0x76, + 0x8a, 0x22, 0x98, 0x80, 0x66, 0x6d, 0x6b, 0x05, 0x4f, 0x2a, 0x6e, 0x45, 0x67, 0xa7, 0x6c, 0x4a, + 0x36, 0x3b, 0x65, 0x63, 0x99, 0xaa, 0x47, 0xb1, 0x7c, 0x0c, 0xde, 0x8e, 0xaa, 0x7a, 0x0a, 0x09, + 0x53, 0xf5, 0x14, 0x70, 0x92, 0xa1, 0x46, 0x5d, 0xea, 0x29, 0xb3, 0xbd, 0x18, 0x22, 0x49, 0x92, + 0x21, 0x82, 0x93, 0x0c, 0xa7, 0xa9, 0xd7, 0x5a, 0x55, 0xe6, 0x7a, 0x31, 0x44, 0x92, 0x24, 0x43, + 0x04, 0xb3, 0xcd, 0x66, 0x14, 0x3c, 0xd1, 0x6d, 0x3f, 0xf0, 0xfb, 0x6c, 0x3e, 0xba, 0xd9, 0xcc, + 0x24, 0x64, 0x9b, 0xcd, 0x4c, 0x24, 0xf9, 0xb1, 0x1d, 0x7b, 0xed, 0x2b, 0x0b, 0x58, 0xe1, 0x78, + 0x68, 0x17, 0xec, 0xa4, 0xd4, 0x4c, 0x9f, 0xb6, 0xd3, 0x57, 0x01, 0x1f, 0x0f, 0x5c, 0x5c, 0x95, + 0x45, 0xac, 0xea, 0x44, 0x70, 0x56, 0xc1, 0xc1, 0x33, 0x7d, 0x5a, 0xe0, 0x04, 0xfb, 0x1a, 0x0c, + 0xe3, 0x47, 0xd5, 0x2d, 0xd3, 0xab, 0x4d, 0x28, 0xef, 0x46, 0xb7, 0x4c, 0x12, 0x8a, 0x6d, 0x99, + 0xa4, 0x9f, 0x6c, 0x12, 0xc7, 0x9f, 0x7c, 0x8a, 0xa9, 0x4d, 0x28, 0x5a, 0x74, 0x12, 0x8f, 0x20, + 0xd9, 0x24, 0x1e, 0x01, 0x04, 0xf5, 0xd6, 0x1c, 0xbb, 0x53, 0x9b, 0x50, 0x1a, 0x29, 0xf5, 0x72, + 0x54, 0x50, 0x2f, 0xff, 0x19, 0xd4, 0xdb, 0x58, 0xed, 0x7a, 0x35, 0xf6, 0x8d, 0x4b, 0x29, 0xf5, + 0xfa, 0xc8, 0xa0, 0x5e, 0x1f, 0xc0, 0xa6, 0x42, 0x04, 0x2c, 0x3a, 0x36, 0x9b, 0xb4, 0x6f, 0x9b, + 0xed, 0xb6, 0x72, 0x27, 0x3a, 0x15, 0xc6, 0xf1, 0x6c, 0x2a, 0x8c, 0xc3, 0x98, 0xe9, 0xc9, 0x5b, + 0x45, 0x97, 0xbb, 0x2b, 0xca, 0xdd, 0xa8, 0xe9, 0x19, 0x62, 0x98, 0xe9, 0x19, 0xfe, 0xc2, 0xdd, + 0x05, 0xfb, 0xa5, 0xd1, 0xfb, 0x0e, 0x75, 0x57, 0x95, 0x7b, 0xb1, 0xdd, 0x85, 0x84, 0xc3, 0xdd, + 0x85, 0xf4, 0x9b, 0xac, 0xc0, 0x13, 0x91, 0x85, 0xc6, 0xbf, 0xb4, 0x69, 0x50, 0xdd, 0x69, 0xad, + 0x2a, 0x9f, 0x41, 0x56, 0xcf, 0xa4, 0x2e, 0x55, 0x51, 0xd2, 0x99, 0x3e, 0xad, 0x17, 0x27, 0xdc, + 0x96, 0xbf, 0x3b, 0xcb, 0xe3, 0xd6, 0x6a, 0x8b, 0x93, 0xfe, 0x26, 0xf4, 0xbd, 0xd8, 0xb6, 0x3c, + 0x49, 0x82, 0xdb, 0xf2, 0x24, 0x98, 0x74, 0xe0, 0xc9, 0xd8, 0x56, 0x6d, 0x4e, 0x6f, 0xb3, 0x7d, + 0x09, 0x35, 0x16, 0xf5, 0xd6, 0x03, 0xea, 0x29, 0x9f, 0x45, 0xde, 0x97, 0x33, 0x36, 0x7c, 0x31, + 0xea, 0x99, 0x3e, 0x6d, 0x1b, 0x7e, 0x44, 0x85, 0x62, 0x63, 0x7a, 0x69, 0x51, 0xf9, 0x5c, 0xf4, + 0x7c, 0x93, 0xc1, 0x66, 0xfa, 0x34, 0xc4, 0x31, 0x2b, 0xed, 0x4e, 0x67, 0xc5, 0xd1, 0x0d, 0xca, + 0x0d, 0x2d, 0xb4, 0xdd, 0x84, 0x01, 0xfa, 0x03, 0x51, 0x2b, 0x2d, 0x8b, 0x8e, 0x59, 0x69, 0x59, + 0x38, 0xa6, 0xa8, 0x91, 0x14, 0x2d, 0xca, 0xe7, 0xa3, 0x8a, 0x1a, 0x41, 0x32, 0x45, 0x8d, 0x26, + 0x74, 0xf9, 0x0c, 0x9c, 0x0d, 0xf6, 0xf3, 0x62, 0xfd, 0xe5, 0x9d, 0xa6, 0x7c, 0x01, 0xf9, 0x3c, + 0x99, 0xb8, 0x0c, 0x88, 0x50, 0xcd, 0xf4, 0x69, 0x19, 0xe5, 0xd9, 0x8a, 0x9b, 0x48, 0x61, 0x26, + 0xcc, 0x8b, 0x1f, 0x8c, 0xae, 0xb8, 0x19, 0x64, 0x6c, 0xc5, 0xcd, 0x40, 0xa5, 0x32, 0x17, 0x42, + 0xd5, 0xb7, 0x61, 0x1e, 0xc8, 0x34, 0x8b, 0x43, 0x2a, 0x73, 0x61, 0xa9, 0x2d, 0x6f, 0xc3, 0x3c, + 0xb0, 0xd6, 0xb2, 0x38, 0x90, 0x2b, 0x50, 0x6a, 0x34, 0xe6, 0xb4, 0xae, 0xa5, 0xb4, 0x62, 0xbe, + 0xbd, 0x08, 0x9d, 0xe9, 0xd3, 0x04, 0x9e, 0x99, 0x41, 0x53, 0x6d, 0xdd, 0xf5, 0xcc, 0x96, 0x8b, + 0x23, 0xc6, 0x1f, 0x21, 0x46, 0xd4, 0x0c, 0x4a, 0xa3, 0x61, 0x66, 0x50, 0x1a, 0x9c, 0xd9, 0x8b, + 0x93, 0xba, 0xeb, 0xea, 0x96, 0xe1, 0xe8, 0x13, 0xb8, 0x4c, 0xd0, 0xd8, 0xdb, 0xb1, 0x08, 0x96, + 0xd9, 0x8b, 0x51, 0x08, 0x1e, 0xbe, 0xfb, 0x10, 0xdf, 0xcc, 0xb9, 0x1f, 0x3b, 0x7c, 0x8f, 0xe1, + 0xf1, 0xf0, 0x3d, 0x06, 0x43, 0xbb, 0xd3, 0x87, 0x69, 0x74, 0xc5, 0x64, 0x22, 0x52, 0x56, 0x62, + 0x76, 0x67, 0x9c, 0x00, 0xed, 0xce, 0x38, 0x30, 0xd2, 0x24, 0x7f, 0xb9, 0x5d, 0xcd, 0x68, 0x52, + 0xb8, 0xca, 0x26, 0xca, 0xb0, 0xf5, 0x3b, 0x1c, 0x1c, 0xb5, 0x0d, 0x4b, 0x5f, 0xb3, 0x6b, 0x13, + 0xbe, 0xd4, 0xcd, 0xe8, 0xfa, 0x9d, 0x49, 0xc8, 0xd6, 0xef, 0x4c, 0x24, 0x9b, 0x5d, 0xfd, 0x8d, + 0xd6, 0xaa, 0xee, 0x50, 0xa3, 0x66, 0x3a, 0x78, 0xb2, 0xb8, 0xc1, 0xb7, 0x86, 0xef, 0x47, 0x67, + 0xd7, 0x1e, 0xa4, 0x6c, 0x76, 0xed, 0x81, 0x66, 0x46, 0x5e, 0x3a, 0x5a, 0xa3, 0xba, 0xa1, 0x3c, + 0x88, 0x1a, 0x79, 0xd9, 0x94, 0xcc, 0xc8, 0xcb, 0xc6, 0x66, 0x7f, 0xce, 0x3d, 0xc7, 0xf4, 0xa8, + 0xd2, 0xde, 0xc9, 0xe7, 0x20, 0x69, 0xf6, 0xe7, 0x20, 0x9a, 0x6d, 0x08, 0xe3, 0x1d, 0xb2, 0x16, + 0xdd, 0x10, 0x26, 0xbb, 0x21, 0x5e, 0x82, 0x59, 0x2c, 0xe2, 0x09, 0xa1, 0x62, 0x45, 0x2d, 0x16, + 0x01, 0x66, 0x16, 0x4b, 0xf8, 0xc8, 0x30, 0xf2, 0x70, 0x4c, 0xb1, 0xa3, 0x6b, 0xa8, 0x8c, 0x63, + 0x6b, 0x68, 0xe4, 0x91, 0xd9, 0x6b, 0x91, 0x57, 0x11, 0x4a, 0x27, 0x6a, 0x75, 0x48, 0x28, 0x66, + 0x75, 0xc8, 0xef, 0x27, 0x26, 0xe1, 0x04, 0xde, 0x82, 0x6b, 0xdd, 0xe0, 0x1e, 0xe7, 0x87, 0xa2, + 0x9f, 0x19, 0x43, 0xb3, 0xcf, 0x8c, 0x81, 0x22, 0x4c, 0xc4, 0xb4, 0xe5, 0x64, 0x30, 0x09, 0xcf, + 0x07, 0x63, 0x20, 0x32, 0x0b, 0xa4, 0x51, 0x9d, 0x9b, 0xad, 0x1b, 0x8b, 0xf2, 0x15, 0x99, 0x1b, + 0x3d, 0x81, 0x4d, 0x52, 0xcc, 0xf4, 0x69, 0x29, 0xe5, 0xc8, 0xfb, 0x70, 0x51, 0x40, 0xc5, 0xfb, + 0xf0, 0x45, 0xc7, 0x7e, 0x68, 0x1a, 0xc1, 0x82, 0xe0, 0x45, 0xbd, 0xee, 0x7a, 0xd1, 0xce, 0xf4, + 0x69, 0x3d, 0x79, 0x65, 0xd7, 0x25, 0xd6, 0x87, 0xee, 0x4e, 0xea, 0x0a, 0x16, 0x89, 0x9e, 0xbc, + 0xb2, 0xeb, 0x12, 0x72, 0x7f, 0xb8, 0x93, 0xba, 0x82, 0x4e, 0xe8, 0xc9, 0x8b, 0xb8, 0x50, 0xe9, + 0x85, 0xaf, 0xb6, 0xdb, 0xca, 0x3a, 0x56, 0xf7, 0xb1, 0x9d, 0x54, 0x57, 0x45, 0x83, 0x73, 0x3b, + 0x8e, 0x6c, 0x96, 0x5e, 0xe8, 0x50, 0xab, 0x11, 0x59, 0x80, 0x1e, 0x45, 0x67, 0xe9, 0x04, 0x01, + 0x9b, 0xa5, 0x13, 0x40, 0x36, 0xa0, 0xe4, 0xc7, 0x35, 0xca, 0x46, 0x74, 0x40, 0xc9, 0x38, 0x36, + 0xa0, 0x22, 0x0f, 0x71, 0x16, 0xe0, 0xd4, 0xc2, 0x03, 0x4f, 0xf7, 0x2d, 0x48, 0x57, 0x74, 0xe5, + 0x07, 0xb1, 0x4b, 0xa6, 0x24, 0x09, 0x5e, 0x32, 0x25, 0xc1, 0x6c, 0x8c, 0x30, 0x70, 0x63, 0xc3, + 0x6a, 0x4d, 0xeb, 0x66, 0xbb, 0xeb, 0x50, 0xe5, 0xcf, 0x44, 0xc7, 0x48, 0x0c, 0xcd, 0xc6, 0x48, + 0x0c, 0xc4, 0x16, 0x68, 0x06, 0xaa, 0xba, 0xae, 0xb9, 0x62, 0x89, 0x7d, 0x65, 0xb7, 0xed, 0x29, + 0xff, 0x46, 0x74, 0x81, 0x4e, 0xa3, 0x61, 0x0b, 0x74, 0x1a, 0x1c, 0x4f, 0x9d, 0x58, 0x2f, 0xb0, + 0xc5, 0x43, 0xbe, 0xab, 0xfc, 0x37, 0x63, 0xa7, 0x4e, 0x29, 0x34, 0x78, 0xea, 0x94, 0x02, 0x67, + 0xeb, 0x23, 0xb7, 0xc9, 0x66, 0xcd, 0xe0, 0xae, 0xfa, 0xdf, 0x8a, 0xae, 0x8f, 0x71, 0x3c, 0x5b, + 0x1f, 0xe3, 0xb0, 0x28, 0x1f, 0xd1, 0x05, 0xff, 0x76, 0x16, 0x9f, 0x40, 0xfe, 0x89, 0x32, 0xe4, + 0xa6, 0xcc, 0x47, 0x8c, 0x94, 0x1f, 0xce, 0x65, 0x31, 0x0a, 0x86, 0x47, 0xa2, 0x50, 0x94, 0x91, + 0x46, 0x1f, 0x9a, 0x74, 0x5d, 0xf9, 0x62, 0x26, 0x23, 0x4e, 0x10, 0x65, 0xc4, 0x61, 0xe4, 0x3d, + 0x38, 0x1b, 0xc2, 0xe6, 0xe8, 0xda, 0x72, 0x30, 0x33, 0xfd, 0xd9, 0x5c, 0xd4, 0x0c, 0x4e, 0x27, + 0x63, 0x66, 0x70, 0x3a, 0x26, 0x8d, 0xb5, 0x10, 0xdd, 0xbf, 0xb3, 0x0d, 0xeb, 0x40, 0x82, 0x19, + 0x0c, 0xd2, 0x58, 0x0b, 0x69, 0xfe, 0xc8, 0x36, 0xac, 0x03, 0x99, 0x66, 0x30, 0x20, 0x3f, 0x9e, + 0x83, 0xcb, 0xe9, 0xa8, 0x6a, 0xbb, 0x3d, 0x6d, 0x3b, 0x21, 0x4e, 0xf9, 0x73, 0xb9, 0xe8, 0x41, + 0xc3, 0xce, 0x8a, 0xcd, 0xf4, 0x69, 0x3b, 0xac, 0x80, 0x7c, 0x0a, 0x46, 0xab, 0x5d, 0xc3, 0xf4, + 0xf0, 0xe2, 0x8d, 0x19, 0xce, 0x3f, 0x9a, 0x8b, 0x6d, 0x71, 0x64, 0x2c, 0x6e, 0x71, 0x64, 0x00, + 0xb9, 0x05, 0x27, 0x1b, 0xb4, 0xd5, 0x75, 0x4c, 0x6f, 0x43, 0xa3, 0x1d, 0xdb, 0xf1, 0x18, 0x8f, + 0x3f, 0x9f, 0x8b, 0x4e, 0x62, 0x09, 0x0a, 0x36, 0x89, 0x25, 0x80, 0xe4, 0x6e, 0xe2, 0x56, 0x5e, + 0x74, 0xe6, 0x8f, 0xe5, 0x7a, 0x5e, 0xcb, 0x07, 0x7d, 0x99, 0x5e, 0x9c, 0x2c, 0xc6, 0x6e, 0xd1, + 0x05, 0xd7, 0x1f, 0xcf, 0xf5, 0xb8, 0x46, 0x97, 0x66, 0xb8, 0x24, 0x98, 0x71, 0x4c, 0x49, 0x7a, + 0xaf, 0xfc, 0x85, 0x5c, 0x8f, 0x6b, 0xef, 0x90, 0x63, 0x5a, 0xbe, 0xfc, 0x57, 0xb8, 0xa7, 0x88, + 0x60, 0xf4, 0x13, 0xb9, 0xa4, 0xab, 0x48, 0x50, 0x5e, 0x22, 0x64, 0xc5, 0xee, 0xb8, 0x81, 0xd2, + 0x7f, 0x29, 0x97, 0xf4, 0xcd, 0x0b, 0x8b, 0x85, 0xbf, 0x08, 0x85, 0x0b, 0x53, 0x8f, 0x3c, 0xea, + 0x58, 0x7a, 0x1b, 0xbb, 0xb3, 0xe1, 0xd9, 0x8e, 0xbe, 0x42, 0xa7, 0x2c, 0x7d, 0xb9, 0x4d, 0x95, + 0x9f, 0xcc, 0x45, 0x2d, 0xd8, 0x6c, 0x52, 0x66, 0xc1, 0x66, 0x63, 0xc9, 0x2a, 0x3c, 0x91, 0x86, + 0xad, 0x99, 0x2e, 0xd6, 0xf3, 0xe5, 0x5c, 0xd4, 0x84, 0xed, 0x41, 0xcb, 0x4c, 0xd8, 0x1e, 0x68, + 0x72, 0x1d, 0x86, 0x26, 0x6c, 0x7f, 0xfa, 0xfd, 0x8b, 0x31, 0x67, 0xc8, 0x00, 0x33, 0xd3, 0xa7, + 0x85, 0x64, 0xa2, 0x8c, 0x18, 0xd4, 0x5f, 0x49, 0x96, 0x09, 0x2f, 0x9f, 0x82, 0x1f, 0xa2, 0x8c, + 0x10, 0xf7, 0xbf, 0x9b, 0x2c, 0x13, 0xde, 0x71, 0x05, 0x3f, 0xd8, 0x4c, 0xc2, 0x6b, 0x9c, 0x9b, + 0xae, 0x32, 0xbb, 0x6d, 0x72, 0x55, 0x6f, 0xb7, 0xa9, 0xb5, 0x42, 0x95, 0xaf, 0xc6, 0x66, 0x92, + 0x74, 0x32, 0x36, 0x93, 0xa4, 0x63, 0xc8, 0x0f, 0xc0, 0xb9, 0xbb, 0x7a, 0xdb, 0x34, 0x42, 0x9c, + 0x9f, 0x02, 0x5d, 0xf9, 0xa9, 0x5c, 0x74, 0x37, 0x9d, 0x41, 0xc7, 0x76, 0xd3, 0x19, 0x28, 0x32, + 0x07, 0x04, 0x97, 0xd1, 0x60, 0xb6, 0x60, 0xeb, 0xb3, 0xf2, 0xef, 0xe5, 0xa2, 0x76, 0x6a, 0x92, + 0x84, 0xd9, 0xa9, 0x49, 0x28, 0x69, 0x66, 0x27, 0x32, 0x51, 0x7e, 0x3a, 0x17, 0x3d, 0xad, 0xc9, + 0x22, 0x9c, 0xe9, 0xd3, 0xb2, 0xb3, 0xa1, 0xdc, 0x84, 0x72, 0x63, 0xb1, 0x3e, 0x3d, 0x3d, 0xd5, + 0xb8, 0x5b, 0xaf, 0xe1, 0x2b, 0x0a, 0x43, 0xf9, 0x99, 0xd8, 0x8a, 0x15, 0x27, 0x60, 0x2b, 0x56, + 0x1c, 0x46, 0xde, 0x84, 0x11, 0xd6, 0x7e, 0x36, 0x60, 0xf0, 0x93, 0xbf, 0x96, 0x8b, 0x9a, 0x53, + 0x32, 0x92, 0x99, 0x53, 0xf2, 0x6f, 0xd2, 0x80, 0xd3, 0x4c, 0x8a, 0x8b, 0x0e, 0xbd, 0x4f, 0x1d, + 0x6a, 0xb5, 0xfc, 0x31, 0xfd, 0xb3, 0xb9, 0xa8, 0x95, 0x91, 0x46, 0xc4, 0xac, 0x8c, 0x34, 0x38, + 0x79, 0x00, 0x17, 0xe3, 0x27, 0x41, 0xf2, 0x23, 0x59, 0xe5, 0x2f, 0xe5, 0x62, 0xc6, 0x70, 0x0f, + 0x62, 0x34, 0x86, 0x7b, 0xe0, 0x89, 0x05, 0x97, 0xc4, 0xb1, 0x8a, 0x70, 0xb8, 0x8c, 0xd7, 0xf6, + 0x73, 0xbc, 0xb6, 0xe7, 0x42, 0x87, 0xc0, 0x1e, 0xd4, 0x33, 0x7d, 0x5a, 0x6f, 0x76, 0x4c, 0xcf, + 0x92, 0xe9, 0x3a, 0x94, 0xbf, 0x9c, 0x4b, 0xf7, 0x48, 0x89, 0xb8, 0x29, 0xa7, 0xe5, 0xf9, 0x78, + 0x2f, 0x2b, 0xd9, 0x84, 0xf2, 0x57, 0x62, 0xe3, 0x2d, 0x9d, 0x8c, 0x8d, 0xb7, 0x8c, 0x6c, 0x15, + 0xb7, 0xe0, 0x24, 0x57, 0xea, 0x45, 0x1d, 0x87, 0xa1, 0xb5, 0x42, 0x0d, 0xe5, 0xdf, 0x8f, 0xad, + 0x76, 0x09, 0x0a, 0x74, 0xed, 0x89, 0x03, 0xd9, 0xd4, 0xdd, 0xe8, 0xe8, 0x96, 0x85, 0xc7, 0xac, + 0xca, 0x7f, 0x10, 0x9b, 0xba, 0x43, 0x14, 0x3a, 0xee, 0x06, 0xbf, 0x98, 0x26, 0xf4, 0x4a, 0xd4, + 0xa4, 0xfc, 0x87, 0x31, 0x4d, 0xe8, 0x45, 0xcc, 0x34, 0xa1, 0x67, 0xd6, 0xa7, 0xbb, 0x19, 0x0f, + 0xd6, 0x95, 0xaf, 0xc7, 0x56, 0xe4, 0x54, 0x2a, 0xb6, 0x22, 0xa7, 0xbf, 0x77, 0xbf, 0x9b, 0xf1, + 0xd8, 0x5b, 0xf9, 0xf9, 0xde, 0x7c, 0xc3, 0x95, 0x3e, 0xfd, 0xad, 0xf8, 0xdd, 0x8c, 0x87, 0xd2, + 0xca, 0x5f, 0xed, 0xcd, 0x37, 0x74, 0xec, 0x4b, 0x7f, 0x67, 0xdd, 0xcc, 0x7e, 0x64, 0xac, 0xfc, + 0xb5, 0xf8, 0xd4, 0x95, 0x41, 0x88, 0x53, 0x57, 0xd6, 0x4b, 0xe5, 0x65, 0x38, 0xcf, 0x35, 0xe4, + 0xa6, 0xa3, 0x77, 0x56, 0x1b, 0xd4, 0xf3, 0x4c, 0x6b, 0xc5, 0xdf, 0x89, 0xfd, 0x47, 0xb9, 0xd8, + 0xf1, 0x58, 0x16, 0x25, 0x1e, 0x8f, 0x65, 0x21, 0x99, 0xf2, 0x26, 0x9e, 0x13, 0x2b, 0x7f, 0x3d, + 0xa6, 0xbc, 0x09, 0x0a, 0xa6, 0xbc, 0xc9, 0x57, 0xc8, 0xb7, 0x52, 0x5e, 0xcd, 0x2a, 0xff, 0x71, + 0x36, 0xaf, 0xa0, 0x7d, 0x29, 0x8f, 0x6d, 0x6f, 0xa5, 0x3c, 0x0e, 0x55, 0xfe, 0x93, 0x6c, 0x5e, + 0xa1, 0x0f, 0x52, 0xf2, 0x4d, 0xe9, 0x7b, 0x70, 0x96, 0xcf, 0xe6, 0xd3, 0xd4, 0xa0, 0x91, 0x0f, + 0xfd, 0x85, 0xd8, 0xd8, 0x4f, 0x27, 0xc3, 0x23, 0xf7, 0x54, 0x4c, 0x1a, 0x6b, 0xd1, 0xd6, 0xbf, + 0xb1, 0x0d, 0xeb, 0x70, 0x43, 0x90, 0x8e, 0x61, 0xeb, 0x8d, 0xfc, 0xf8, 0x4d, 0xf9, 0xc5, 0xd8, + 0x7a, 0x23, 0x23, 0xd1, 0x9d, 0x43, 0x7e, 0x29, 0xf7, 0x66, 0xf4, 0xa1, 0x97, 0xf2, 0x37, 0x53, + 0x0b, 0x07, 0x1d, 0x10, 0x7d, 0x15, 0xf6, 0x66, 0xf4, 0x51, 0x93, 0xf2, 0x4b, 0xa9, 0x85, 0x83, + 0x0f, 0x88, 0xbe, 0x80, 0x62, 0x5b, 0xa4, 0xae, 0x67, 0x73, 0x56, 0x91, 0xe9, 0xe1, 0x6f, 0xc5, + 0xb7, 0x48, 0xa9, 0x64, 0xb8, 0x45, 0x4a, 0xc5, 0xa4, 0xb1, 0x16, 0x9f, 0xf7, 0xcb, 0xdb, 0xb0, + 0x96, 0x36, 0x76, 0xa9, 0x98, 0x34, 0xd6, 0xe2, 0xe3, 0xbf, 0xb1, 0x0d, 0x6b, 0x69, 0x63, 0x97, + 0x8a, 0x61, 0xe6, 0x58, 0x88, 0xb9, 0x4b, 0x1d, 0x37, 0x54, 0xbf, 0xff, 0x34, 0x66, 0x8e, 0x65, + 0xd0, 0x31, 0x73, 0x2c, 0x03, 0x95, 0xca, 0x5d, 0x08, 0xe5, 0x57, 0xb6, 0xe3, 0x1e, 0xde, 0xcb, + 0x64, 0xa0, 0x52, 0xb9, 0x0b, 0xb9, 0xfc, 0xed, 0xed, 0xb8, 0x87, 0x17, 0x33, 0x19, 0x28, 0x66, + 0x14, 0x35, 0x3c, 0xdd, 0x33, 0x5b, 0x33, 0xb6, 0xeb, 0x49, 0x8b, 0xfc, 0x7f, 0x16, 0x33, 0x8a, + 0xd2, 0x88, 0x98, 0x51, 0x94, 0x06, 0x4f, 0x32, 0x15, 0xd2, 0xf8, 0xd5, 0x9e, 0x4c, 0x43, 0x4b, + 0x2b, 0x0d, 0x9e, 0x64, 0x2a, 0x84, 0xf0, 0x9f, 0xf7, 0x64, 0x1a, 0x7a, 0xca, 0xa7, 0xc1, 0x99, + 0x65, 0x3a, 0xe9, 0xd8, 0xeb, 0xd6, 0x2d, 0xba, 0x4e, 0xdb, 0xe2, 0xd3, 0x7f, 0x2d, 0x66, 0x99, + 0xc6, 0x09, 0xf0, 0x16, 0x25, 0x06, 0x8b, 0x32, 0x12, 0x9f, 0xfb, 0xeb, 0x99, 0x8c, 0xc2, 0x63, + 0xa2, 0x38, 0x2c, 0xca, 0x48, 0x7c, 0xe2, 0x6f, 0x64, 0x32, 0x0a, 0x8f, 0x89, 0xe2, 0x30, 0x52, + 0x85, 0x31, 0x7c, 0x2b, 0xa1, 0xbb, 0xbe, 0xe7, 0xe7, 0x6f, 0xe7, 0xa2, 0xb7, 0x5e, 0x51, 0xf4, + 0x4c, 0x9f, 0x16, 0x2b, 0x20, 0xb3, 0x10, 0x9f, 0xf4, 0xad, 0x0c, 0x16, 0xa1, 0xbf, 0x63, 0x14, + 0x22, 0xb3, 0x10, 0x1f, 0xf3, 0x5f, 0x64, 0xb0, 0x08, 0x1d, 0x1e, 0xa3, 0x10, 0xf2, 0x49, 0x18, + 0x6e, 0x4c, 0x2f, 0x2d, 0xfa, 0xc9, 0x04, 0xff, 0x4e, 0x2e, 0xf6, 0xaa, 0x28, 0xc4, 0xe1, 0xab, + 0xa2, 0xf0, 0x27, 0xf9, 0x14, 0x8c, 0x4e, 0xda, 0x96, 0xa7, 0xb7, 0xfc, 0x0d, 0xe8, 0xef, 0xc4, + 0xce, 0x50, 0x22, 0xd8, 0x99, 0x3e, 0x2d, 0x4a, 0x2e, 0x95, 0x17, 0x6d, 0xff, 0xdd, 0xf4, 0xf2, + 0x41, 0xd3, 0xa3, 0xe4, 0x6c, 0x46, 0xbb, 0x67, 0x3b, 0x0f, 0xda, 0xb6, 0x6e, 0xf8, 0xf1, 0x2b, + 0x45, 0x43, 0xfe, 0x6e, 0x6c, 0x46, 0x4b, 0x27, 0x63, 0x33, 0x5a, 0x3a, 0x26, 0x8d, 0xb5, 0xe8, + 0xa2, 0x6f, 0x6f, 0xc3, 0x3a, 0x9c, 0x87, 0xd3, 0x31, 0x69, 0xac, 0xc5, 0xe7, 0xff, 0xbd, 0x6d, + 0x58, 0x87, 0xf3, 0x70, 0x3a, 0x86, 0x99, 0xd6, 0x37, 0x4d, 0xcf, 0x7f, 0xd8, 0xf6, 0xf7, 0x63, + 0xa6, 0x75, 0x88, 0x62, 0xa6, 0x75, 0xf8, 0x6b, 0x62, 0x00, 0xfa, 0xf1, 0x48, 0xfc, 0x56, 0x69, + 0xf0, 0x9b, 0xb9, 0xf2, 0x6f, 0xe6, 0x6e, 0x95, 0x06, 0x7f, 0x33, 0x57, 0xfe, 0x2d, 0xf6, 0xff, + 0x6f, 0xe5, 0xca, 0xbf, 0x9d, 0xd3, 0xce, 0x87, 0xd3, 0x5b, 0x75, 0x85, 0x5a, 0xde, 0x62, 0x5b, + 0x17, 0x93, 0x73, 0x2a, 0x8a, 0xff, 0x4c, 0x45, 0x89, 0x04, 0x6c, 0x5f, 0xcf, 0xc1, 0x48, 0xc3, + 0x73, 0xa8, 0xbe, 0x26, 0xe2, 0x19, 0x5e, 0x80, 0x41, 0xee, 0xc4, 0xee, 0x3f, 0xe7, 0xd7, 0x82, + 0xdf, 0xe4, 0x32, 0x8c, 0xcd, 0xea, 0xae, 0x87, 0x4d, 0xac, 0x5b, 0x06, 0x7d, 0x84, 0x0f, 0x38, + 0x0b, 0x5a, 0x0c, 0x4a, 0x66, 0x39, 0x1d, 0x2f, 0x87, 0x21, 0x6c, 0x0b, 0xdb, 0x86, 0xf1, 0x1b, + 0xfc, 0xce, 0x66, 0xa5, 0x0f, 0xa3, 0xf6, 0xc5, 0xca, 0xaa, 0xbf, 0x9f, 0x83, 0x84, 0x7b, 0xfd, + 0xde, 0xe3, 0x76, 0x2c, 0xc0, 0x89, 0x58, 0xd8, 0x64, 0xf1, 0x0a, 0x75, 0x87, 0x51, 0x95, 0xe3, + 0xa5, 0xc9, 0xc7, 0x82, 0xd7, 0x8f, 0x77, 0xb4, 0x59, 0x11, 0xa2, 0x11, 0x93, 0x8b, 0x74, 0x9d, + 0xb6, 0x26, 0xa1, 0x44, 0x08, 0xae, 0xef, 0x95, 0xc3, 0x98, 0xb0, 0xe4, 0xb2, 0x08, 0x22, 0x92, + 0x0b, 0x03, 0x3b, 0x76, 0x5d, 0xea, 0xc8, 0x81, 0x1d, 0x31, 0x68, 0xc8, 0xa7, 0x60, 0xa4, 0xbe, + 0xd6, 0xa1, 0x8e, 0x6b, 0x5b, 0xba, 0x67, 0x3b, 0x22, 0x64, 0x02, 0x06, 0x37, 0x30, 0x25, 0xb8, + 0x1c, 0xdc, 0x40, 0xa6, 0x27, 0x57, 0xfd, 0xfc, 0x88, 0x05, 0x8c, 0xc6, 0x8b, 0x4f, 0x93, 0xe3, + 0xe9, 0xf1, 0x39, 0x05, 0x23, 0xbd, 0xe3, 0xea, 0xf8, 0x4e, 0x36, 0x20, 0xed, 0x32, 0x80, 0x4c, + 0x8a, 0x14, 0xe4, 0x05, 0x28, 0xe1, 0xbd, 0xa2, 0x8b, 0x79, 0x4f, 0x45, 0xb8, 0xc9, 0x36, 0x42, + 0xe4, 0xc0, 0x16, 0x9c, 0x86, 0xdc, 0x86, 0x72, 0xe8, 0x34, 0x71, 0xd3, 0xb1, 0xbb, 0x1d, 0x3f, + 0xd3, 0x51, 0x65, 0x6b, 0xb3, 0xf2, 0xc4, 0x83, 0x00, 0xd7, 0x5c, 0x41, 0xa4, 0xc4, 0x22, 0x51, + 0x90, 0xcc, 0xc0, 0x89, 0x10, 0xc6, 0x44, 0xe4, 0x67, 0x58, 0xc3, 0xec, 0xb6, 0x12, 0x2f, 0x26, + 0xce, 0x48, 0x76, 0xdb, 0x58, 0x31, 0x52, 0x87, 0x01, 0x3f, 0xd6, 0xe4, 0xe0, 0xb6, 0x4a, 0x7a, + 0x4a, 0xc4, 0x9a, 0x1c, 0x90, 0xa3, 0x4c, 0xfa, 0xe5, 0xc9, 0x34, 0x8c, 0x69, 0x76, 0xd7, 0xa3, + 0x4b, 0xb6, 0x38, 0x6d, 0x10, 0x31, 0x4d, 0xb1, 0x4d, 0x0e, 0xc3, 0x34, 0x3d, 0xbb, 0xd9, 0xe2, + 0x38, 0xa9, 0x4d, 0xb1, 0x52, 0x64, 0x1e, 0x4e, 0x26, 0xdc, 0x4b, 0xf0, 0x59, 0xed, 0x10, 0x8f, + 0x1a, 0x28, 0x7d, 0x5e, 0x92, 0x59, 0xb2, 0x28, 0xf9, 0xd1, 0x1c, 0x94, 0x96, 0x1c, 0xdd, 0xf4, + 0x5c, 0xf1, 0xc4, 0xf6, 0xcc, 0xf8, 0xba, 0xa3, 0x77, 0x98, 0x7e, 0x8c, 0x63, 0xb8, 0xe5, 0xbb, + 0x7a, 0xbb, 0x4b, 0xdd, 0x89, 0x7b, 0xec, 0xeb, 0xfe, 0x87, 0xcd, 0xca, 0x9b, 0x3c, 0x38, 0xc9, + 0x78, 0xcb, 0x5e, 0xbb, 0xb6, 0xe2, 0xe8, 0x0f, 0x4d, 0x0f, 0xb7, 0x0a, 0x7a, 0xfb, 0x9a, 0x47, + 0xdb, 0x78, 0x56, 0x7e, 0x4d, 0xef, 0x98, 0xd7, 0x30, 0xac, 0xff, 0xb5, 0x80, 0x13, 0xaf, 0x81, + 0xa9, 0x80, 0x87, 0x7f, 0xc9, 0x2a, 0xc0, 0x71, 0x64, 0x1e, 0x40, 0x7c, 0x6a, 0xb5, 0xd3, 0x11, + 0xef, 0x75, 0xa5, 0x13, 0x66, 0x1f, 0xc3, 0x15, 0x3b, 0x10, 0x98, 0xde, 0x91, 0x42, 0x59, 0x6b, + 0x12, 0x07, 0xa6, 0x05, 0x4b, 0xa2, 0x45, 0xbe, 0x98, 0x46, 0x43, 0x89, 0xfb, 0x8d, 0x4d, 0x11, + 0x52, 0xbc, 0x18, 0x59, 0x86, 0x13, 0x82, 0x6f, 0x90, 0xf8, 0x66, 0x2c, 0x3a, 0x2b, 0xc4, 0xd0, + 0x5c, 0x69, 0x83, 0x36, 0x1a, 0x02, 0x2c, 0xd7, 0x11, 0x2b, 0x41, 0x26, 0xc2, 0x44, 0xdd, 0xf3, + 0xfa, 0x1a, 0x75, 0x95, 0x13, 0xa8, 0xb1, 0x17, 0xb7, 0x36, 0x2b, 0x8a, 0x5f, 0x1e, 0xc3, 0xae, + 0xca, 0xa2, 0x8b, 0x16, 0x91, 0x79, 0x70, 0xad, 0x2f, 0xa7, 0xf0, 0x88, 0xeb, 0x7c, 0xb4, 0x08, + 0x99, 0x84, 0xd1, 0xe0, 0xb9, 0xd0, 0x9d, 0x3b, 0xf5, 0x1a, 0x3e, 0x08, 0x16, 0x91, 0x77, 0x63, + 0xa9, 0x69, 0x64, 0x26, 0x91, 0x32, 0x52, 0x00, 0x17, 0xfe, 0x42, 0x38, 0x16, 0xc0, 0xa5, 0x93, + 0x12, 0xc0, 0x65, 0x91, 0xbc, 0x0d, 0xc3, 0xd5, 0x7b, 0x0d, 0x11, 0x98, 0xc6, 0x55, 0x4e, 0x85, + 0x79, 0xce, 0xf4, 0x75, 0xb7, 0xe9, 0x07, 0xb1, 0x91, 0x9b, 0x2e, 0xd3, 0x93, 0x29, 0x18, 0x8b, + 0x78, 0x1c, 0xba, 0xca, 0x69, 0xe4, 0x80, 0x2d, 0xd7, 0x11, 0xd3, 0x74, 0x04, 0x4a, 0x1e, 0x5e, + 0xd1, 0x42, 0x4c, 0x6b, 0x6a, 0xa6, 0x8b, 0x39, 0xa3, 0x34, 0x8a, 0x31, 0x70, 0xf0, 0x79, 0xf1, + 0x20, 0xd7, 0x1a, 0x43, 0xa0, 0x9a, 0x0e, 0xc7, 0xc9, 0x3d, 0x1a, 0x2b, 0x46, 0xde, 0x07, 0x82, + 0x59, 0xa6, 0xa8, 0xe1, 0x5f, 0x40, 0xd7, 0x6b, 0xae, 0x72, 0x16, 0xc3, 0xce, 0x93, 0x78, 0x58, + 0x8c, 0x7a, 0x6d, 0xe2, 0xb2, 0x98, 0x3e, 0x9e, 0xd4, 0x79, 0xa9, 0xa6, 0x1f, 0x12, 0xa3, 0x69, + 0x46, 0x52, 0x70, 0xa7, 0x70, 0x25, 0xeb, 0x70, 0x6e, 0xd1, 0xa1, 0x0f, 0x4d, 0xbb, 0xeb, 0xfa, + 0xcb, 0x87, 0x3f, 0x6f, 0x9d, 0xdb, 0x76, 0xde, 0x7a, 0x5a, 0x54, 0x7c, 0xa6, 0xe3, 0xd0, 0x87, + 0x4d, 0x3f, 0xd8, 0x78, 0x24, 0x56, 0x6e, 0x16, 0x77, 0x4c, 0x24, 0xfe, 0x41, 0xd7, 0xa1, 0x02, + 0x6e, 0x52, 0x57, 0x51, 0xc2, 0xa9, 0x96, 0xc7, 0x47, 0x32, 0x03, 0x5c, 0x24, 0x91, 0x78, 0xb4, + 0x18, 0xd1, 0x80, 0xdc, 0x9c, 0xf4, 0x9d, 0x11, 0xaa, 0x2d, 0x9e, 0x6e, 0x59, 0x39, 0x8f, 0xcc, + 0x54, 0x26, 0x96, 0x95, 0x56, 0x90, 0x78, 0xa0, 0xa9, 0x0b, 0xbc, 0x2c, 0x96, 0x64, 0x69, 0x32, + 0x0b, 0xe5, 0x45, 0x07, 0x8f, 0x46, 0x6f, 0xd3, 0x8d, 0x45, 0xbb, 0x6d, 0xb6, 0x36, 0xf0, 0x95, + 0xb3, 0x98, 0x2a, 0x3b, 0x1c, 0xd7, 0x7c, 0x40, 0x37, 0x9a, 0x1d, 0xc4, 0xca, 0xcb, 0x4a, 0xbc, + 0xa4, 0x1c, 0x08, 0xfc, 0x89, 0x9d, 0x05, 0x02, 0xa7, 0x50, 0x16, 0xae, 0x0c, 0x8f, 0x3c, 0x6a, + 0xb1, 0xa5, 0xde, 0x15, 0x2f, 0x9a, 0x95, 0x98, 0xeb, 0x43, 0x80, 0xe7, 0x53, 0x87, 0x18, 0x65, + 0x34, 0x00, 0xcb, 0x0d, 0x8b, 0x17, 0x49, 0x46, 0xcb, 0xbe, 0xb4, 0x87, 0x68, 0xd9, 0xff, 0x47, + 0x41, 0x9e, 0x7f, 0xc9, 0x45, 0x28, 0x4a, 0xc9, 0xac, 0x30, 0x14, 0x30, 0x06, 0xfe, 0x2f, 0x8a, + 0x08, 0xe7, 0x43, 0xc2, 0x76, 0x09, 0x42, 0x34, 0x61, 0xf6, 0xd2, 0x30, 0x3c, 0xac, 0x16, 0x12, + 0x60, 0xe6, 0xc8, 0xee, 0x72, 0xdb, 0x6c, 0x61, 0x3a, 0x88, 0x82, 0x14, 0x36, 0x05, 0xa1, 0x3c, + 0x1b, 0x84, 0x44, 0x42, 0xae, 0xc3, 0xb0, 0x7f, 0x24, 0x1f, 0x86, 0xc2, 0xc6, 0x2c, 0x01, 0x62, + 0xb6, 0x16, 0x49, 0x08, 0x24, 0x22, 0xf2, 0x06, 0x40, 0x38, 0x1d, 0x08, 0x4b, 0x0b, 0x97, 0x0a, + 0x79, 0xf6, 0x90, 0x97, 0x8a, 0x90, 0x9a, 0x4d, 0x9c, 0xb2, 0x3a, 0xfa, 0xb9, 0x72, 0x71, 0xe2, + 0x8c, 0xe8, 0xb0, 0xac, 0x20, 0xd1, 0x22, 0x64, 0x01, 0x4e, 0x26, 0x34, 0x50, 0x04, 0xce, 0x7e, + 0x7a, 0x6b, 0xb3, 0x72, 0x29, 0x45, 0x7d, 0xe5, 0x85, 0x39, 0x51, 0x96, 0x3c, 0x03, 0x85, 0x3b, + 0x5a, 0x5d, 0x04, 0xef, 0xe5, 0x71, 0x9f, 0x23, 0x81, 0xb8, 0x18, 0x96, 0xbc, 0x0e, 0xc0, 0x93, + 0xe3, 0x2c, 0xda, 0x8e, 0x87, 0x16, 0xc5, 0xe8, 0xc4, 0x79, 0x36, 0x96, 0x79, 0xf2, 0x9c, 0x26, + 0x5b, 0xc6, 0xe4, 0x8f, 0x0e, 0x89, 0xd5, 0x3f, 0x9b, 0x4f, 0x2c, 0x6b, 0x4c, 0xf0, 0xa2, 0x15, + 0x52, 0xe7, 0xa3, 0xe0, 0xfd, 0xa6, 0x73, 0xc1, 0x4b, 0x44, 0xe4, 0x0a, 0x0c, 0x2e, 0xb2, 0x49, + 0xa5, 0x65, 0xb7, 0x85, 0x2a, 0x60, 0x04, 0xb7, 0x8e, 0x80, 0x69, 0x01, 0x96, 0x5c, 0x97, 0xb2, + 0x43, 0x4b, 0xa1, 0xf4, 0xfd, 0xec, 0xd0, 0xf1, 0x98, 0xf2, 0x98, 0x27, 0xfa, 0x7a, 0x2c, 0xdb, + 0x9c, 0x28, 0x93, 0xb2, 0xa4, 0x86, 0xd9, 0xe5, 0x02, 0x83, 0xb6, 0x7f, 0x3b, 0x83, 0x56, 0xfd, + 0x9d, 0x5c, 0x72, 0x88, 0x92, 0x1b, 0xc9, 0xa8, 0xd6, 0xb8, 0x7e, 0x05, 0x40, 0xb9, 0xd6, 0x20, + 0xbe, 0x75, 0x24, 0x3e, 0x75, 0x7e, 0xcf, 0xf1, 0xa9, 0x0b, 0xbb, 0x8c, 0x4f, 0xad, 0xfe, 0xbf, + 0xc5, 0x9e, 0x5e, 0xfb, 0x87, 0x12, 0xc7, 0xf0, 0x75, 0xb6, 0x29, 0x63, 0xb5, 0x57, 0xdd, 0xc4, + 0xd6, 0x82, 0x3b, 0x25, 0x37, 0x75, 0x3e, 0x2a, 0x5d, 0x2d, 0x4a, 0x49, 0xde, 0x81, 0x11, 0xff, + 0x03, 0x30, 0xee, 0xb9, 0x14, 0xaf, 0x3b, 0x58, 0x10, 0x63, 0x11, 0xc2, 0x23, 0x05, 0xc8, 0x2b, + 0x30, 0x84, 0xe6, 0x50, 0x47, 0x6f, 0xf9, 0x41, 0xf1, 0x79, 0x14, 0x7d, 0x1f, 0x28, 0xc7, 0xea, + 0x0b, 0x28, 0xc9, 0xe7, 0xa1, 0x24, 0x32, 0xc3, 0x94, 0x70, 0x89, 0xbe, 0xb6, 0x83, 0x67, 0x0e, + 0xe3, 0x72, 0x56, 0x18, 0xbe, 0xc1, 0x41, 0x40, 0x64, 0x83, 0xc3, 0x13, 0xc2, 0x2c, 0xc1, 0xa9, + 0x45, 0x87, 0x1a, 0xf8, 0xa0, 0x66, 0xea, 0x51, 0xc7, 0x11, 0x39, 0x7b, 0xf8, 0x04, 0x81, 0xeb, + 0x5b, 0xc7, 0x47, 0xb3, 0x95, 0x57, 0xe0, 0xe5, 0xc8, 0xdc, 0x29, 0xc5, 0x99, 0xd1, 0xc3, 0x5b, + 0x72, 0x9b, 0x6e, 0xac, 0xdb, 0x8e, 0xc1, 0xd3, 0xda, 0x88, 0xa9, 0x5f, 0x08, 0xfa, 0x81, 0x40, + 0xc9, 0x46, 0x4f, 0xb4, 0xd0, 0x85, 0xd7, 0x61, 0x78, 0xaf, 0x99, 0x55, 0x7e, 0x25, 0x9f, 0xf1, + 0xfe, 0xed, 0xf1, 0x4d, 0x6e, 0x19, 0x64, 0x5c, 0xef, 0xcf, 0xc8, 0xb8, 0xfe, 0xa7, 0xf9, 0x8c, + 0xc7, 0x7d, 0x8f, 0x75, 0x66, 0xe4, 0x40, 0x18, 0xd1, 0xcc, 0xc8, 0x61, 0x52, 0x6a, 0xd3, 0xd0, + 0x64, 0xa2, 0x58, 0x0e, 0xf5, 0xd2, 0xb6, 0x39, 0xd4, 0x7f, 0xa1, 0xd0, 0xeb, 0xf1, 0xe3, 0xb1, + 0xec, 0x77, 0x23, 0xfb, 0xeb, 0x30, 0x1c, 0x48, 0xb6, 0x5e, 0x43, 0x7b, 0x69, 0x34, 0xc8, 0xe3, + 0xc4, 0xc1, 0x58, 0x46, 0x22, 0x22, 0x57, 0x79, 0x5b, 0x1b, 0xe6, 0x07, 0x3c, 0xa3, 0xc8, 0xa8, + 0xc8, 0x15, 0xa1, 0x7b, 0x7a, 0xd3, 0x35, 0x3f, 0xa0, 0x5a, 0x80, 0xc6, 0x60, 0xb1, 0x69, 0xef, + 0x40, 0x8f, 0xfb, 0x68, 0xe7, 0x7d, 0x94, 0x22, 0x44, 0xfe, 0xf6, 0xf5, 0x58, 0x88, 0xbb, 0x10, + 0xe2, 0x9f, 0xe4, 0x53, 0x5f, 0x0a, 0x1f, 0x0b, 0x71, 0x37, 0xb3, 0xc5, 0x0b, 0x30, 0xa4, 0xd9, + 0xeb, 0xee, 0x24, 0xee, 0x89, 0xf8, 0x5c, 0x81, 0x13, 0xb5, 0x63, 0xaf, 0xbb, 0x4d, 0xdc, 0xed, + 0x68, 0x21, 0x81, 0xfa, 0xbd, 0x7c, 0x8f, 0xb7, 0xd4, 0xc7, 0x82, 0xff, 0x30, 0x97, 0xc8, 0x5f, + 0xcf, 0x47, 0xde, 0x6a, 0x3f, 0xbe, 0xc2, 0xbe, 0x06, 0xd0, 0x68, 0xad, 0xd2, 0x35, 0x5d, 0xca, + 0xca, 0x86, 0x47, 0x16, 0x2e, 0x42, 0x45, 0x36, 0xef, 0x90, 0x44, 0xfd, 0x66, 0x3e, 0xf6, 0x58, + 0xfd, 0x58, 0x76, 0x3b, 0x96, 0x5d, 0xa0, 0x75, 0xe2, 0xfd, 0xfd, 0xb1, 0xe4, 0x76, 0x2a, 0xb9, + 0x1f, 0xcb, 0xc7, 0x42, 0x15, 0x3c, 0xb6, 0xb2, 0x63, 0x03, 0x30, 0x19, 0x42, 0xe1, 0xb1, 0xd5, + 0xa4, 0x17, 0x60, 0x48, 0xc8, 0x21, 0x58, 0x2a, 0xf8, 0xbc, 0xcf, 0x81, 0x78, 0x40, 0x1b, 0x10, + 0xa8, 0x7f, 0x2e, 0x0f, 0xd1, 0x10, 0x12, 0x8f, 0xa9, 0x0e, 0xfd, 0x7a, 0x3e, 0x1a, 0x3c, 0xe3, + 0xf1, 0xd5, 0x9f, 0x71, 0x80, 0x46, 0x77, 0xb9, 0x25, 0x5c, 0x54, 0xfa, 0xa5, 0x13, 0xfe, 0x00, + 0xaa, 0x49, 0x14, 0xea, 0xff, 0x97, 0x4f, 0x8d, 0xe8, 0xf1, 0xf8, 0x0a, 0xf0, 0x65, 0x3c, 0x15, + 0x6f, 0x59, 0xe1, 0x44, 0x8e, 0x87, 0x90, 0x6c, 0xfc, 0x25, 0x52, 0x79, 0xfa, 0x84, 0xe4, 0x93, + 0x29, 0xe6, 0x1a, 0x26, 0x1a, 0x09, 0xcd, 0x35, 0xf9, 0x30, 0x5f, 0x32, 0xdc, 0x7e, 0x2f, 0xbf, + 0x5d, 0x00, 0x94, 0xc7, 0x79, 0x55, 0x1d, 0x58, 0xd4, 0x37, 0x30, 0x50, 0x27, 0xeb, 0x89, 0x11, + 0x9e, 0x68, 0xb2, 0xc3, 0x41, 0xf2, 0xb5, 0x9d, 0xa0, 0x52, 0xff, 0x59, 0x7f, 0x7a, 0xf4, 0x8d, + 0xc7, 0x57, 0x84, 0x17, 0xa1, 0xb8, 0xa8, 0x7b, 0xab, 0x42, 0x93, 0xf1, 0x36, 0xb0, 0xa3, 0x7b, + 0xab, 0x1a, 0x42, 0xc9, 0x55, 0x18, 0xd4, 0xf4, 0x75, 0x7e, 0xe6, 0x59, 0x0a, 0x93, 0x80, 0x3a, + 0xfa, 0x7a, 0x93, 0x9f, 0x7b, 0x06, 0x68, 0xa2, 0x06, 0x49, 0x68, 0xf9, 0xc9, 0x37, 0x66, 0x40, + 0xe4, 0x49, 0x68, 0x83, 0xd4, 0xb3, 0x17, 0xa1, 0x38, 0x61, 0x1b, 0x1b, 0x78, 0xf3, 0x35, 0xc2, + 0x2b, 0x5b, 0xb6, 0x8d, 0x0d, 0x0d, 0xa1, 0xe4, 0xc7, 0x73, 0x30, 0x30, 0x43, 0x75, 0x83, 0x8d, + 0x90, 0xa1, 0x5e, 0x0e, 0x2b, 0x9f, 0x39, 0x18, 0x87, 0x95, 0x93, 0xab, 0xbc, 0x32, 0x59, 0x51, + 0x44, 0xfd, 0xe4, 0x26, 0x0c, 0x4e, 0xea, 0x1e, 0x5d, 0xb1, 0x9d, 0x0d, 0x74, 0xc1, 0x19, 0x0b, + 0x5f, 0x70, 0x44, 0xf4, 0xc7, 0x27, 0xe2, 0x37, 0x63, 0x2d, 0xf1, 0x4b, 0x0b, 0x0a, 0x33, 0xb1, + 0xf0, 0x9b, 0x39, 0x91, 0x70, 0x1d, 0xc5, 0xc2, 0xaf, 0xf0, 0x34, 0x81, 0x09, 0x8f, 0x95, 0x47, + 0xd2, 0x8f, 0x95, 0xd1, 0x7a, 0x44, 0x37, 0x3d, 0x4c, 0xfd, 0x3a, 0x8a, 0x8b, 0x3e, 0xb7, 0x1e, + 0x11, 0x8a, 0x99, 0x5f, 0x35, 0x89, 0x44, 0xfd, 0x6e, 0x3f, 0xa4, 0xbe, 0xd5, 0x3f, 0x56, 0xf2, + 0x63, 0x25, 0x0f, 0x95, 0xbc, 0x96, 0x50, 0xf2, 0x0b, 0xc9, 0xe8, 0x0f, 0x1f, 0x51, 0x0d, 0xff, + 0x5a, 0x31, 0x11, 0x3b, 0xe6, 0xf1, 0xde, 0x5d, 0x86, 0xd2, 0xeb, 0xdf, 0x56, 0x7a, 0xc1, 0x80, + 0x28, 0x6d, 0x3b, 0x20, 0x06, 0x76, 0x3a, 0x20, 0x06, 0x33, 0x07, 0x44, 0xa8, 0x20, 0x43, 0x99, + 0x0a, 0x52, 0x17, 0x83, 0x06, 0x7a, 0xa7, 0xb0, 0xb9, 0xb8, 0xb5, 0x59, 0x19, 0x63, 0xa3, 0x29, + 0x35, 0x77, 0x0d, 0xb2, 0x50, 0x7f, 0xbf, 0xd8, 0x23, 0xe0, 0xd3, 0xa1, 0xe8, 0xc8, 0xcb, 0x50, + 0xa8, 0x76, 0x3a, 0x42, 0x3f, 0x4e, 0x49, 0xb1, 0xa6, 0x32, 0x4a, 0x31, 0x6a, 0xf2, 0x06, 0x14, + 0xaa, 0xf7, 0x1a, 0xf1, 0xb4, 0x35, 0xd5, 0x7b, 0x0d, 0xf1, 0x25, 0x99, 0x65, 0xef, 0x35, 0xc8, + 0x5b, 0x61, 0xfc, 0xd8, 0xd5, 0xae, 0xf5, 0x40, 0x6c, 0x14, 0x85, 0xa7, 0xae, 0xef, 0xc9, 0xd3, + 0x62, 0x28, 0xb6, 0x5d, 0x8c, 0xd1, 0xc6, 0xb4, 0xa9, 0xb4, 0x73, 0x6d, 0x1a, 0xd8, 0x56, 0x9b, + 0x06, 0x77, 0xaa, 0x4d, 0x43, 0x3b, 0xd0, 0x26, 0xd8, 0x56, 0x9b, 0x86, 0xf7, 0xaf, 0x4d, 0x1d, + 0xb8, 0x90, 0x0c, 0xd2, 0x17, 0x68, 0x84, 0x06, 0x24, 0x89, 0x15, 0x8e, 0x25, 0x78, 0xf5, 0xdf, + 0xe5, 0xd8, 0xe6, 0x3a, 0xa2, 0x9b, 0x2e, 0xc3, 0xcb, 0xae, 0x6d, 0xc9, 0xd2, 0xea, 0xaf, 0xe4, + 0xb3, 0x63, 0x0b, 0x1e, 0xcd, 0x29, 0xee, 0x07, 0x53, 0xa5, 0x54, 0x8c, 0xc6, 0x7a, 0xc8, 0x96, + 0x72, 0x8c, 0x6d, 0x9a, 0xcc, 0xbe, 0x91, 0xcf, 0x0a, 0x78, 0xb8, 0x2f, 0x89, 0x3d, 0x97, 0x74, + 0x86, 0x43, 0x17, 0x7f, 0x37, 0xea, 0x05, 0x37, 0x0d, 0x23, 0xb2, 0x10, 0x85, 0x94, 0x76, 0x22, + 0xe0, 0x48, 0x39, 0xf2, 0x56, 0x90, 0x5d, 0x48, 0xf2, 0x8f, 0x41, 0x4f, 0x37, 0x7f, 0xcc, 0xc6, + 0xdc, 0x63, 0x64, 0x72, 0xf2, 0x02, 0x94, 0xa6, 0x31, 0x5c, 0xbf, 0x3c, 0xd8, 0x79, 0x00, 0x7f, + 0xd9, 0x6b, 0x85, 0xd3, 0xa8, 0xbf, 0x93, 0x83, 0x53, 0xb7, 0xbb, 0xcb, 0x54, 0x38, 0xda, 0x05, + 0x6d, 0x78, 0x1f, 0x80, 0x81, 0x85, 0xc3, 0x4c, 0x0e, 0x1d, 0x66, 0x3e, 0x2e, 0x07, 0x46, 0x8c, + 0x15, 0x18, 0x0f, 0xa9, 0xb9, 0xb3, 0xcc, 0x25, 0xdf, 0xe7, 0xf4, 0x41, 0x77, 0x99, 0x36, 0x13, + 0x5e, 0x33, 0x12, 0xf7, 0x0b, 0x6f, 0x73, 0x6f, 0xfe, 0xbd, 0x3a, 0xa8, 0xfc, 0x72, 0x3e, 0x33, + 0x16, 0xe5, 0x91, 0x4d, 0xf1, 0xfa, 0xb9, 0xd4, 0x5e, 0x89, 0xa7, 0x7a, 0x4d, 0x21, 0x89, 0x71, + 0x4c, 0xe3, 0x92, 0x2e, 0xb0, 0x23, 0x9e, 0x78, 0xf8, 0x43, 0x15, 0xd8, 0x1f, 0xe5, 0x32, 0x63, + 0x86, 0x1e, 0x55, 0x81, 0xa9, 0xff, 0x6b, 0xc1, 0x0f, 0x55, 0xba, 0xaf, 0x4f, 0x78, 0x01, 0x86, + 0xc4, 0xeb, 0xb5, 0xa8, 0x9f, 0xb0, 0x38, 0x36, 0xc4, 0x63, 0xe8, 0x80, 0x80, 0x99, 0x14, 0x92, + 0x13, 0xb3, 0xe4, 0x27, 0x2c, 0x39, 0x30, 0x6b, 0x12, 0x09, 0x33, 0x1a, 0xa6, 0x1e, 0x99, 0x1e, + 0x5a, 0x20, 0xac, 0x2f, 0x0b, 0xdc, 0x68, 0xa0, 0x8f, 0x4c, 0x8f, 0xdb, 0x1f, 0x01, 0x9a, 0x19, + 0x04, 0xdc, 0x16, 0x11, 0xf3, 0x1e, 0x1a, 0x04, 0xdc, 0x54, 0xd1, 0x04, 0x86, 0xb5, 0x56, 0x38, + 0xdf, 0x0a, 0x97, 0x16, 0xd1, 0x5a, 0xe1, 0xae, 0x8b, 0xad, 0x0d, 0x08, 0x18, 0x47, 0x8d, 0xae, + 0x84, 0x4e, 0x7c, 0xc8, 0xd1, 0x41, 0x88, 0x26, 0x30, 0xe4, 0x3a, 0x8c, 0x35, 0x3c, 0xdd, 0x32, + 0x74, 0xc7, 0x58, 0xe8, 0x7a, 0x9d, 0xae, 0x27, 0x1b, 0xc0, 0xae, 0x67, 0xd8, 0x5d, 0x4f, 0x8b, + 0x51, 0x90, 0x4f, 0xc0, 0xa8, 0x0f, 0x99, 0x72, 0x1c, 0xdb, 0x91, 0xad, 0x1c, 0xd7, 0x33, 0xa8, + 0xe3, 0x68, 0x51, 0x02, 0xf2, 0x49, 0x18, 0xad, 0x5b, 0x0f, 0xed, 0x16, 0x8f, 0x5a, 0xa0, 0xcd, + 0x0a, 0x9b, 0x07, 0x5f, 0x8c, 0x99, 0x01, 0xa2, 0xd9, 0x75, 0xda, 0x5a, 0x94, 0x50, 0xdd, 0xca, + 0x27, 0x23, 0xba, 0x3e, 0xbe, 0x1b, 0xa4, 0xab, 0x51, 0xc7, 0x3d, 0xf4, 0x56, 0x45, 0xe3, 0x53, + 0xf6, 0x1b, 0xe6, 0x36, 0xe8, 0x75, 0x18, 0xbc, 0x4d, 0x37, 0xb8, 0x8f, 0x69, 0x29, 0x74, 0x4b, + 0x7e, 0x20, 0x60, 0xf2, 0xe9, 0xae, 0x4f, 0xa7, 0x7e, 0x2b, 0x9f, 0x8c, 0x55, 0xfb, 0xf8, 0x0a, + 0xfb, 0x13, 0x30, 0x80, 0xa2, 0xac, 0xfb, 0xd7, 0x0b, 0x28, 0x40, 0x14, 0x77, 0xd4, 0xdb, 0xd9, + 0x27, 0x53, 0x7f, 0xbe, 0x14, 0x0f, 0x60, 0xfc, 0xf8, 0x4a, 0xef, 0x4d, 0x18, 0x9e, 0xb4, 0x2d, + 0xd7, 0x74, 0x3d, 0x6a, 0xb5, 0x7c, 0x85, 0x45, 0xc7, 0xff, 0x56, 0x08, 0x96, 0x6d, 0x40, 0x89, + 0x7a, 0x2f, 0xca, 0x4b, 0x5e, 0x85, 0x21, 0x14, 0x39, 0xda, 0x9c, 0x7c, 0xc2, 0xc3, 0x9b, 0x89, + 0x65, 0x06, 0x8c, 0x5b, 0x9c, 0x21, 0x29, 0xb9, 0x03, 0x83, 0x93, 0xab, 0x66, 0xdb, 0x70, 0xa8, + 0x85, 0xbe, 0xc9, 0x52, 0x9c, 0x98, 0x68, 0x5f, 0x8e, 0xe3, 0xbf, 0x48, 0xcb, 0x9b, 0xd3, 0x12, + 0xc5, 0x22, 0x8f, 0xc5, 0x04, 0xec, 0xc2, 0x4f, 0xe7, 0x01, 0xc2, 0x02, 0xe4, 0x29, 0xc8, 0x07, + 0x09, 0xc6, 0xd1, 0x25, 0x26, 0xa2, 0x41, 0x79, 0x5c, 0x2a, 0xc4, 0xd8, 0xce, 0x6f, 0x3b, 0xb6, + 0xef, 0x40, 0x89, 0x9f, 0xae, 0xa1, 0xd7, 0xba, 0x14, 0x53, 0x35, 0xb3, 0xc1, 0xe3, 0x48, 0xcf, + 0x6d, 0x69, 0xb4, 0x3c, 0x23, 0x1e, 0xe0, 0x9c, 0xd9, 0x85, 0x16, 0xf4, 0xe3, 0x5f, 0xe4, 0x32, + 0x14, 0x97, 0xfc, 0xfc, 0xc1, 0xa3, 0x7c, 0x96, 0x8e, 0xc9, 0x0f, 0xf1, 0xac, 0x9b, 0x26, 0x6d, + 0xcb, 0x63, 0x55, 0x63, 0xab, 0x47, 0x84, 0x5c, 0x04, 0x2c, 0x22, 0x17, 0x01, 0x53, 0xff, 0xab, + 0x7c, 0x4a, 0x68, 0xed, 0xc7, 0x77, 0x98, 0xbc, 0x0e, 0x80, 0x2f, 0xcf, 0x99, 0x3c, 0xfd, 0xe7, + 0x20, 0x38, 0x4a, 0x90, 0x11, 0xaa, 0x6d, 0x64, 0xdb, 0x11, 0x12, 0xab, 0xff, 0x20, 0x97, 0x88, + 0xc7, 0xbc, 0x2f, 0x39, 0xca, 0x56, 0x59, 0x7e, 0x8f, 0x66, 0xac, 0xdf, 0x17, 0x85, 0xdd, 0xf5, + 0x45, 0xf4, 0x5b, 0x0e, 0xc0, 0x32, 0x3d, 0xcc, 0x6f, 0xf9, 0x6e, 0x3e, 0x2d, 0x3a, 0xf5, 0xd1, + 0x54, 0xf1, 0x1b, 0x81, 0x51, 0x5a, 0x8c, 0xe5, 0x03, 0x40, 0x68, 0x3c, 0xc7, 0xb9, 0x30, 0x53, + 0xbf, 0x00, 0x27, 0x62, 0x31, 0x9b, 0x45, 0xba, 0xe9, 0xcb, 0xbd, 0x83, 0x3f, 0x67, 0xc7, 0x2c, + 0x88, 0x90, 0xa9, 0xff, 0x7f, 0xae, 0x77, 0xc4, 0xee, 0x43, 0x57, 0x9d, 0x14, 0x01, 0x14, 0xfe, + 0xf5, 0x08, 0xe0, 0x00, 0xb6, 0xc1, 0x47, 0x5b, 0x00, 0x1f, 0x91, 0xc9, 0xe3, 0xc3, 0x16, 0xc0, + 0xcf, 0xe7, 0xb6, 0x0d, 0xb8, 0x7e, 0xd8, 0x32, 0x50, 0xff, 0xa7, 0x5c, 0x6a, 0x60, 0xf4, 0x7d, + 0xb5, 0xeb, 0x2d, 0x28, 0x71, 0x17, 0x1e, 0xd1, 0x2a, 0x29, 0x95, 0x1c, 0x83, 0x66, 0x94, 0x17, + 0x65, 0xc8, 0x2c, 0x0c, 0xf0, 0x36, 0x18, 0xa2, 0x37, 0x9e, 0xed, 0x11, 0x9d, 0xdd, 0xc8, 0x9a, + 0x1c, 0x05, 0x5a, 0xfd, 0xdd, 0x5c, 0x22, 0x4e, 0xfb, 0x21, 0x7e, 0x5b, 0x38, 0x55, 0x17, 0x76, + 0x3e, 0x55, 0xab, 0xff, 0x34, 0x9f, 0x1e, 0x26, 0xfe, 0x10, 0x3f, 0xe4, 0x20, 0x8e, 0xd3, 0xf6, + 0xb6, 0x6e, 0x2d, 0xc1, 0x58, 0x54, 0x16, 0x62, 0xd9, 0x7a, 0x32, 0x3d, 0x58, 0x7e, 0x46, 0x2b, + 0x62, 0x3c, 0xd4, 0xef, 0xe4, 0x92, 0x11, 0xee, 0x0f, 0x7d, 0x7e, 0xda, 0x9b, 0xb6, 0x44, 0x3f, + 0xe5, 0x23, 0xb2, 0xd6, 0x1c, 0xc4, 0xa7, 0x7c, 0x44, 0x56, 0x8d, 0xbd, 0x7d, 0xca, 0x2f, 0xe6, + 0xb3, 0x12, 0x04, 0x1c, 0xfa, 0x07, 0x7d, 0x56, 0x16, 0x32, 0x6f, 0x99, 0xf8, 0xb4, 0xa7, 0xb2, + 0x22, 0xf2, 0x67, 0xf0, 0x4c, 0xf0, 0xd9, 0xdb, 0x18, 0x4f, 0x15, 0xd6, 0x47, 0x44, 0x91, 0x8f, + 0x86, 0xb0, 0x3e, 0x22, 0x43, 0xe5, 0xa3, 0x27, 0xac, 0xdf, 0xcc, 0xef, 0x34, 0x2b, 0xc5, 0xb1, + 0xf0, 0x12, 0xc2, 0xfb, 0x4a, 0x3e, 0x99, 0x2d, 0xe5, 0xd0, 0xc5, 0x34, 0x0d, 0x25, 0x91, 0xb7, + 0x25, 0x53, 0x38, 0x1c, 0x9f, 0x65, 0xd1, 0x88, 0xef, 0xb8, 0x01, 0xe2, 0x22, 0x67, 0x67, 0x22, + 0xe1, 0xb4, 0xea, 0xf7, 0x72, 0xb1, 0xd4, 0x22, 0x87, 0x72, 0x84, 0xb0, 0xa7, 0x25, 0x89, 0xbc, + 0xed, 0x1f, 0x66, 0x16, 0x63, 0xa1, 0xdd, 0x83, 0xef, 0xa9, 0x51, 0x4f, 0x37, 0xdb, 0xf1, 0xf2, + 0x22, 0xfe, 0xc0, 0xb7, 0xf2, 0x70, 0x32, 0x41, 0x4a, 0x2e, 0x47, 0x22, 0xfe, 0xe0, 0xb1, 0x64, + 0xcc, 0x51, 0x9d, 0xc7, 0xfe, 0xd9, 0xc5, 0x49, 0xea, 0x65, 0x28, 0xd6, 0xf4, 0x0d, 0xfe, 0x6d, + 0xfd, 0x9c, 0xa5, 0xa1, 0x6f, 0xc8, 0x27, 0x6e, 0x88, 0x27, 0xcb, 0x70, 0x86, 0xdf, 0x87, 0x98, + 0xb6, 0xb5, 0x64, 0xae, 0xd1, 0xba, 0x35, 0x67, 0xb6, 0xdb, 0xa6, 0x2b, 0x2e, 0xf5, 0x5e, 0xd8, + 0xda, 0xac, 0x5c, 0xf1, 0x6c, 0x4f, 0x6f, 0x37, 0xa9, 0x4f, 0xd6, 0xf4, 0xcc, 0x35, 0xda, 0x34, + 0xad, 0xe6, 0x1a, 0x52, 0x4a, 0x2c, 0xd3, 0x59, 0x91, 0x3a, 0x8f, 0xe2, 0xdf, 0x68, 0xe9, 0x96, + 0x45, 0x8d, 0xba, 0x35, 0xb1, 0xe1, 0x51, 0x7e, 0x19, 0x58, 0xe0, 0x47, 0x82, 0xfc, 0x1d, 0x3a, + 0x47, 0x33, 0xc6, 0xcb, 0x8c, 0x40, 0x4b, 0x29, 0xa4, 0xfe, 0x56, 0x31, 0x25, 0xab, 0xcc, 0x11, + 0x52, 0x1f, 0xbf, 0xa7, 0x8b, 0xdb, 0xf4, 0xf4, 0x35, 0x18, 0x10, 0x61, 0x92, 0xc5, 0x05, 0x03, + 0x3a, 0xce, 0x3f, 0xe4, 0x20, 0xf9, 0x86, 0x46, 0x50, 0x91, 0x36, 0x5c, 0x58, 0x62, 0xdd, 0x94, + 0xde, 0x99, 0xa5, 0x3d, 0x74, 0x66, 0x0f, 0x7e, 0xe4, 0x3d, 0x38, 0x87, 0xd8, 0x94, 0x6e, 0x1d, + 0xc0, 0xaa, 0x30, 0x94, 0x16, 0xaf, 0x2a, 0xbd, 0x73, 0xb3, 0xca, 0x93, 0xcf, 0xc2, 0x48, 0x30, + 0x40, 0x4c, 0xea, 0x8a, 0x9b, 0x8b, 0x1e, 0xe3, 0x8c, 0xc7, 0xa9, 0x63, 0x60, 0x74, 0x57, 0x8b, + 0xc6, 0x3a, 0x8b, 0xf0, 0x52, 0xff, 0xc7, 0x5c, 0xaf, 0xec, 0x36, 0x87, 0x3e, 0x2b, 0xbf, 0x0d, + 0x03, 0x06, 0xff, 0x28, 0xa1, 0x53, 0xbd, 0xf3, 0xdf, 0x70, 0x52, 0xcd, 0x2f, 0xa3, 0xfe, 0x93, + 0x5c, 0xcf, 0xa4, 0x3a, 0x47, 0xfd, 0xf3, 0xbe, 0x52, 0xc8, 0xf8, 0x3c, 0x31, 0x89, 0x5e, 0x85, + 0xb2, 0x19, 0x46, 0xfd, 0x6f, 0x86, 0xa1, 0xae, 0xb4, 0x13, 0x12, 0x1c, 0x47, 0xd7, 0x0d, 0x08, + 0x1c, 0xb6, 0x1c, 0xdf, 0x1b, 0xcd, 0x6d, 0x76, 0x1d, 0x93, 0x8f, 0x4b, 0xed, 0xb4, 0x1b, 0x73, + 0x55, 0x73, 0xef, 0x38, 0x26, 0xab, 0x40, 0xf7, 0x56, 0xa9, 0xa5, 0x37, 0xd7, 0x6d, 0xe7, 0x01, + 0x06, 0x43, 0xe5, 0x83, 0x53, 0x3b, 0xc1, 0xe1, 0xf7, 0x7c, 0x30, 0x79, 0x06, 0x46, 0x57, 0xda, + 0x5d, 0x1a, 0x84, 0x9f, 0xe4, 0x77, 0x7d, 0xda, 0x08, 0x03, 0x06, 0x37, 0x24, 0x97, 0x00, 0x90, + 0xc8, 0xc3, 0x94, 0x47, 0x78, 0xb1, 0xa7, 0x0d, 0x31, 0xc8, 0x92, 0xe8, 0xae, 0x0b, 0x5c, 0xab, + 0xb9, 0x90, 0x9a, 0x6d, 0xdb, 0x5a, 0x69, 0x7a, 0xd4, 0x59, 0xc3, 0x86, 0xa2, 0x33, 0x83, 0x76, + 0x16, 0x29, 0xf0, 0xea, 0xc4, 0x9d, 0xb5, 0xad, 0x95, 0x25, 0xea, 0xac, 0xb1, 0xa6, 0xbe, 0x00, + 0x44, 0x34, 0xd5, 0xc1, 0x43, 0x0f, 0xfe, 0x71, 0xe8, 0xcd, 0xa0, 0x89, 0x8f, 0xe0, 0xa7, 0x21, + 0xf8, 0x61, 0x15, 0x18, 0xe6, 0x31, 0xf8, 0xb8, 0xd0, 0xd0, 0x85, 0x41, 0x03, 0x0e, 0x42, 0x79, + 0x9d, 0x05, 0xe1, 0x5d, 0xc1, 0x3d, 0xc8, 0x35, 0xf1, 0x4b, 0xfd, 0x52, 0x21, 0x2d, 0x0f, 0xd0, + 0xbe, 0x14, 0x2d, 0x9c, 0x56, 0xf3, 0xbb, 0x9a, 0x56, 0x4f, 0x58, 0xdd, 0xb5, 0xa6, 0xde, 0xe9, + 0x34, 0xef, 0x9b, 0x6d, 0x7c, 0xc2, 0x85, 0x0b, 0x9f, 0x36, 0x6a, 0x75, 0xd7, 0xaa, 0x9d, 0xce, + 0x34, 0x07, 0x92, 0xe7, 0xe1, 0x24, 0xa3, 0xc3, 0x4e, 0x0a, 0x28, 0x8b, 0x48, 0xc9, 0x18, 0x60, + 0x10, 0x5b, 0x9f, 0xf6, 0x3c, 0x0c, 0x0a, 0x9e, 0x7c, 0xad, 0xea, 0xd7, 0x06, 0x38, 0x33, 0x97, + 0xf5, 0x5c, 0xc0, 0x86, 0x4f, 0xae, 0xfd, 0xda, 0x90, 0x5f, 0x1e, 0x43, 0x35, 0x5b, 0xdd, 0x35, + 0x1e, 0x7d, 0x6b, 0x00, 0x91, 0xc1, 0x6f, 0x72, 0x19, 0xc6, 0x18, 0x97, 0x40, 0x60, 0x3c, 0xba, + 0x6d, 0xbf, 0x16, 0x83, 0x92, 0xeb, 0x70, 0x3a, 0x02, 0xe1, 0x36, 0x28, 0x7f, 0x92, 0xd0, 0xaf, + 0xa5, 0xe2, 0xd4, 0x6f, 0x16, 0xa2, 0xd9, 0x89, 0x0e, 0xa1, 0x23, 0xce, 0xc1, 0x80, 0xed, 0xac, + 0x34, 0xbb, 0x4e, 0x5b, 0x8c, 0xbd, 0x92, 0xed, 0xac, 0xdc, 0x71, 0xda, 0xe4, 0x0c, 0x94, 0x58, + 0xef, 0x98, 0x86, 0x18, 0x62, 0xfd, 0x7a, 0xa7, 0x53, 0x37, 0x48, 0x95, 0x77, 0x08, 0x46, 0x46, + 0x6d, 0xb6, 0x70, 0x6b, 0xcf, 0x9d, 0x12, 0xfa, 0xf9, 0x8a, 0x97, 0x40, 0x62, 0x3f, 0x61, 0xbc, + 0x54, 0x7e, 0x10, 0x10, 0x63, 0x61, 0xe0, 0xb6, 0xc4, 0xe0, 0x7d, 0x12, 0x67, 0x21, 0x90, 0x21, + 0x0b, 0xbe, 0x89, 0x31, 0x48, 0x0d, 0x48, 0x48, 0xb5, 0x66, 0x1b, 0xe6, 0x7d, 0x93, 0xf2, 0x17, + 0x24, 0xfd, 0xfc, 0xe2, 0x37, 0x89, 0xd5, 0xca, 0x3e, 0x93, 0x39, 0x01, 0x21, 0x6f, 0x72, 0x25, + 0xe4, 0x74, 0xb8, 0xf6, 0xf1, 0xbe, 0xe5, 0x76, 0x5a, 0x0c, 0x85, 0x9a, 0x89, 0xe5, 0x71, 0x21, + 0x54, 0xff, 0xfb, 0xfe, 0x64, 0x8a, 0xaa, 0x43, 0xb1, 0x6b, 0x66, 0x00, 0x44, 0x06, 0xba, 0xf0, + 0x72, 0xed, 0x82, 0x14, 0x6e, 0x5e, 0x60, 0x32, 0x78, 0x48, 0x65, 0xc9, 0x55, 0x18, 0xe4, 0x5f, + 0x54, 0xaf, 0x09, 0x7b, 0x07, 0x5d, 0xc4, 0xdc, 0x8e, 0x79, 0xff, 0x3e, 0xfa, 0x93, 0x05, 0x68, + 0x72, 0x19, 0x06, 0x6a, 0xf3, 0x8d, 0x46, 0x75, 0xde, 0xbf, 0x29, 0xc6, 0xb7, 0x2c, 0x86, 0xe5, + 0x36, 0x5d, 0xdd, 0x72, 0x35, 0x1f, 0x49, 0x9e, 0x81, 0x52, 0x7d, 0x11, 0xc9, 0xf8, 0x0b, 0xcd, + 0xe1, 0xad, 0xcd, 0xca, 0x80, 0xd9, 0xe1, 0x54, 0x02, 0x85, 0xf5, 0xde, 0xad, 0xd7, 0x24, 0x77, + 0x09, 0x5e, 0xef, 0x43, 0xd3, 0xc0, 0x6b, 0x67, 0x2d, 0x40, 0x93, 0x57, 0x60, 0xa4, 0x41, 0x1d, + 0x53, 0x6f, 0xcf, 0x77, 0x71, 0xab, 0x28, 0x45, 0x7c, 0x74, 0x11, 0xde, 0xb4, 0x10, 0xa1, 0x45, + 0xc8, 0xc8, 0x45, 0x28, 0xce, 0x98, 0x96, 0xff, 0x5c, 0x02, 0xfd, 0xe9, 0x57, 0x4d, 0xcb, 0xd3, + 0x10, 0x4a, 0x9e, 0x81, 0xc2, 0xad, 0xa5, 0xba, 0xf0, 0x04, 0x43, 0x5e, 0xef, 0x7b, 0x91, 0xe8, + 0x91, 0xb7, 0x96, 0xea, 0xe4, 0x15, 0x18, 0x62, 0x8b, 0x18, 0xb5, 0x5a, 0xd4, 0x55, 0x86, 0xf1, + 0x63, 0x78, 0xc8, 0x42, 0x1f, 0x28, 0xfb, 0x74, 0x04, 0x94, 0xe4, 0x36, 0x94, 0xe3, 0x91, 0xed, + 0xc5, 0x93, 0x1d, 0xb4, 0xb8, 0xd6, 0x05, 0x2e, 0x2d, 0x68, 0x66, 0xa2, 0x20, 0x31, 0x40, 0x89, + 0xc3, 0xd8, 0xbe, 0x0e, 0xad, 0x4e, 0x1e, 0xaf, 0xf9, 0xca, 0xd6, 0x66, 0xe5, 0xd9, 0x04, 0xd3, + 0xa6, 0x23, 0xa8, 0x24, 0xee, 0x99, 0x9c, 0xd4, 0xff, 0x33, 0x9f, 0x9e, 0xf6, 0xec, 0x10, 0x66, + 0xa7, 0x3d, 0x5e, 0x7c, 0xc7, 0xc6, 0x44, 0x71, 0x1f, 0x63, 0xe2, 0x3e, 0x9c, 0xa8, 0x1a, 0x6b, + 0xa6, 0x55, 0xc5, 0x9f, 0xee, 0xdc, 0x74, 0x15, 0x67, 0x3b, 0xe9, 0xf5, 0x62, 0x0c, 0x2d, 0xbe, + 0x87, 0x87, 0x52, 0x66, 0xa8, 0xa6, 0xce, 0x71, 0xcd, 0xb5, 0xfb, 0x7a, 0xb3, 0xc5, 0x33, 0x86, + 0x69, 0x71, 0xa6, 0xea, 0x4f, 0xe5, 0xb7, 0xc9, 0xd4, 0xf6, 0x38, 0x4a, 0x5f, 0xfd, 0x6a, 0xbe, + 0x77, 0xb2, 0xbc, 0xc7, 0x52, 0x28, 0x7f, 0x92, 0x4f, 0x49, 0x5d, 0xb7, 0x2f, 0x49, 0x5c, 0x85, + 0x41, 0xce, 0x26, 0xf0, 0x3c, 0xc6, 0x09, 0x98, 0x2b, 0x2b, 0x4e, 0xfc, 0x3e, 0x9a, 0xcc, 0xc3, + 0xe9, 0xea, 0xfd, 0xfb, 0xb4, 0xe5, 0x85, 0x41, 0xb5, 0xe7, 0xc3, 0x18, 0xb5, 0x3c, 0x88, 0xb0, + 0xc0, 0x87, 0x41, 0xb9, 0x31, 0x16, 0x4b, 0x6a, 0x39, 0xb2, 0x04, 0x67, 0xe3, 0xf0, 0x06, 0xdf, + 0xb5, 0x14, 0xa5, 0xb8, 0xc2, 0x09, 0x8e, 0xfc, 0x3f, 0x2d, 0xa3, 0x6c, 0x5a, 0x2b, 0x71, 0x75, + 0xe9, 0xef, 0xd5, 0x4a, 0x5c, 0x6a, 0x52, 0xcb, 0xa9, 0xdf, 0x2a, 0xc8, 0x19, 0xfe, 0x1e, 0x5f, + 0x1f, 0xb1, 0x1b, 0x11, 0xcf, 0xf0, 0x9d, 0x0e, 0x99, 0x57, 0x44, 0x80, 0x15, 0xa3, 0xeb, 0xf8, + 0x4e, 0x94, 0x41, 0x80, 0x07, 0x04, 0xca, 0x4b, 0x67, 0x40, 0x49, 0xea, 0x50, 0xac, 0x3a, 0x2b, + 0xdc, 0x22, 0xdf, 0xee, 0xcd, 0x99, 0xee, 0xac, 0xb8, 0xe9, 0x6f, 0xce, 0x18, 0x0b, 0xf5, 0x2f, + 0xe6, 0x7b, 0x24, 0xe5, 0x7b, 0x2c, 0x27, 0x91, 0x9f, 0xcb, 0x67, 0xa5, 0xd7, 0x3b, 0xaa, 0xde, + 0x6e, 0x1f, 0xb2, 0x70, 0x8e, 0xb6, 0x2b, 0xe0, 0x01, 0x0a, 0xe7, 0x0f, 0xf3, 0x59, 0xb9, 0x02, + 0x8f, 0x85, 0xb3, 0xb7, 0x09, 0x32, 0x55, 0xa4, 0x8f, 0xb1, 0xcd, 0x2d, 0xab, 0x42, 0xff, 0x1e, + 0x3d, 0xbe, 0xd2, 0x44, 0x7a, 0x3c, 0x84, 0xf7, 0xa5, 0xa5, 0x7f, 0x94, 0xcf, 0xcc, 0x89, 0x79, + 0x2c, 0xd3, 0x83, 0x94, 0xe9, 0xf1, 0xd0, 0xdf, 0xd7, 0xd0, 0x4f, 0x95, 0xe9, 0xf1, 0xd8, 0xdf, + 0x97, 0x9e, 0xfe, 0x41, 0x3e, 0x3d, 0xeb, 0xeb, 0x21, 0x28, 0xe9, 0x41, 0x38, 0x65, 0xfa, 0xdd, + 0x50, 0xdc, 0x57, 0x37, 0xf4, 0xef, 0xc3, 0x8a, 0x4a, 0x0a, 0xf4, 0xd0, 0x46, 0xfd, 0xf7, 0xab, + 0x40, 0x0f, 0x60, 0xc8, 0x3f, 0xce, 0x02, 0xfd, 0x89, 0x42, 0x32, 0xd3, 0xf1, 0xe3, 0xba, 0x26, + 0x39, 0x7b, 0x5c, 0x93, 0xfc, 0x72, 0xe4, 0x1d, 0x38, 0x11, 0xca, 0x52, 0x0e, 0x8c, 0x86, 0x37, + 0x5e, 0x2d, 0x86, 0x6a, 0xbe, 0xcf, 0x70, 0x22, 0x82, 0x4f, 0x9c, 0x5a, 0xfd, 0x5e, 0x21, 0x99, + 0x2e, 0xfa, 0xb8, 0x37, 0xf6, 0xd8, 0x1b, 0x77, 0xe0, 0xec, 0x64, 0xd7, 0x71, 0xa8, 0xe5, 0xa5, + 0x77, 0x0a, 0x1e, 0xde, 0xb7, 0x38, 0x45, 0x33, 0xd9, 0x39, 0x19, 0x85, 0x19, 0x5b, 0xf1, 0x20, + 0x23, 0xce, 0x76, 0x20, 0x64, 0xdb, 0xe5, 0x14, 0x69, 0x6c, 0xd3, 0x0b, 0xab, 0xbf, 0x97, 0x4f, + 0x26, 0xf8, 0x3e, 0xee, 0xfa, 0xbd, 0x75, 0xbd, 0xfa, 0xa5, 0x42, 0x3c, 0xc9, 0xf9, 0xf1, 0x02, + 0xb1, 0xf7, 0xee, 0xf0, 0x25, 0x89, 0xe3, 0x46, 0xfa, 0x0a, 0x1f, 0x9e, 0xf5, 0x15, 0x3e, 0x5e, + 0xfd, 0xe5, 0x62, 0x3c, 0x61, 0xfc, 0x71, 0x77, 0x1c, 0x5e, 0x77, 0x90, 0x05, 0x38, 0x2d, 0xe6, + 0x36, 0x1f, 0x84, 0x19, 0x32, 0xc4, 0xfc, 0xc5, 0x13, 0xed, 0x89, 0x69, 0xb1, 0xeb, 0x52, 0xa7, + 0xe9, 0xe9, 0xee, 0x83, 0x26, 0xa6, 0xd4, 0xd0, 0x52, 0x0b, 0x32, 0x86, 0x62, 0x56, 0x8b, 0x32, + 0x1c, 0x0c, 0x19, 0xfa, 0x13, 0x62, 0x82, 0x61, 0x5a, 0x41, 0xf5, 0xd7, 0x73, 0x50, 0x8e, 0x7f, + 0x0e, 0x19, 0x87, 0x41, 0xf6, 0x3b, 0x88, 0x14, 0x20, 0x65, 0x00, 0xe7, 0x1c, 0xb9, 0x17, 0x81, + 0x4f, 0x43, 0x5e, 0x85, 0x21, 0x74, 0xd8, 0xc0, 0x02, 0xf9, 0x30, 0x40, 0x43, 0x58, 0x00, 0xd3, + 0xd2, 0xf2, 0x62, 0x21, 0x29, 0x79, 0x13, 0x86, 0xeb, 0xa1, 0x67, 0x9a, 0xb8, 0xf3, 0x42, 0x87, + 0x58, 0xa9, 0x64, 0x48, 0xa0, 0xc9, 0xd4, 0xea, 0x77, 0xf2, 0xa1, 0xaa, 0x1f, 0x9b, 0xa6, 0xfb, + 0x32, 0x4d, 0x7f, 0xa5, 0x00, 0xa3, 0x93, 0xb6, 0xe5, 0xe9, 0x2d, 0xef, 0xf8, 0xfc, 0x69, 0x3f, + 0xfb, 0x7a, 0x52, 0x81, 0xfe, 0xa9, 0x35, 0xdd, 0x6c, 0x0b, 0xc3, 0x07, 0xc3, 0xc8, 0x52, 0x06, + 0xd0, 0x38, 0x9c, 0xdc, 0xc4, 0xe0, 0x29, 0x4c, 0xd2, 0x81, 0x7b, 0xce, 0x58, 0x18, 0x71, 0x53, + 0x42, 0x89, 0x9c, 0xb3, 0x1c, 0xc0, 0x47, 0x8e, 0x5c, 0x52, 0xee, 0xb3, 0xe3, 0xb3, 0x98, 0x23, + 0xd2, 0x67, 0x5f, 0x2b, 0xc0, 0xd9, 0xb8, 0x9b, 0xd0, 0xf1, 0x80, 0x13, 0x9d, 0xf7, 0x67, 0xe0, + 0x74, 0x5c, 0x36, 0x35, 0x26, 0x8d, 0xfe, 0xde, 0xd7, 0xd5, 0xe3, 0x5b, 0x9b, 0x95, 0xa7, 0x92, + 0x1e, 0x5a, 0xac, 0xb2, 0xd4, 0x0b, 0xec, 0xd4, 0x4a, 0x52, 0x7b, 0xe6, 0x23, 0xf2, 0x76, 0xf0, + 0x31, 0xef, 0x99, 0x9f, 0xcb, 0x27, 0x7b, 0xe6, 0x78, 0xc2, 0xf3, 0x2f, 0xd6, 0x8b, 0x00, 0x37, + 0x4d, 0x4f, 0x84, 0x31, 0x3c, 0xe2, 0xee, 0xb2, 0x92, 0x47, 0x4e, 0x71, 0x4f, 0x1e, 0x39, 0x61, + 0x70, 0x82, 0xfe, 0x3d, 0x04, 0x27, 0x78, 0x07, 0x06, 0x84, 0x1c, 0x85, 0xb9, 0x7f, 0x2e, 0xfc, + 0x0a, 0x04, 0x67, 0x55, 0xef, 0x4b, 0xff, 0x39, 0x18, 0x10, 0x99, 0xca, 0x85, 0x39, 0x8e, 0xce, + 0xb9, 0x02, 0xa4, 0xf9, 0x7f, 0x90, 0x8b, 0x80, 0xb1, 0xa7, 0x65, 0xdf, 0x59, 0x1e, 0x8b, 0x9a, + 0xfd, 0x4b, 0xea, 0x30, 0x20, 0xfc, 0x1b, 0x15, 0xc0, 0x87, 0x3f, 0x81, 0x5a, 0x86, 0xfd, 0xcc, + 0xdd, 0x1c, 0xf9, 0x51, 0x97, 0x20, 0x96, 0x5f, 0x44, 0x09, 0x90, 0xfa, 0xbb, 0x39, 0x28, 0xc7, + 0x0b, 0x91, 0x17, 0xa0, 0xc4, 0xff, 0x12, 0x86, 0x3d, 0xc6, 0x0d, 0xe3, 0x25, 0xe4, 0xb8, 0x61, + 0x82, 0xfa, 0x15, 0x18, 0xd2, 0x7c, 0xa7, 0x55, 0x39, 0xaf, 0x78, 0xe0, 0xc9, 0x2a, 0x7b, 0x1a, + 0x05, 0x94, 0xe4, 0x19, 0x28, 0x2c, 0xb4, 0xfd, 0x74, 0xe2, 0xe8, 0x00, 0x6c, 0xb7, 0xe5, 0xa0, + 0x68, 0x0c, 0xcb, 0x88, 0xe6, 0xe9, 0xba, 0x70, 0x4b, 0x43, 0x22, 0x8b, 0xae, 0xcb, 0x44, 0xf3, + 0x74, 0xfd, 0xf9, 0x39, 0xbe, 0x09, 0xbb, 0x6d, 0x5a, 0x06, 0x39, 0x0f, 0x67, 0xee, 0x34, 0xa6, + 0xb4, 0xe6, 0xed, 0xfa, 0x7c, 0xad, 0x79, 0x67, 0xbe, 0xb1, 0x38, 0x35, 0x59, 0x9f, 0xae, 0x4f, + 0xd5, 0xca, 0x7d, 0xe4, 0x14, 0x9c, 0x08, 0x51, 0x33, 0x77, 0xe6, 0xaa, 0xf3, 0xe5, 0x1c, 0x39, + 0x09, 0xa3, 0x21, 0x70, 0x62, 0x61, 0xa9, 0x9c, 0x7f, 0xfe, 0x63, 0x30, 0x8c, 0x6f, 0x45, 0xc4, + 0xe7, 0x8d, 0xc0, 0xe0, 0xc2, 0x44, 0x63, 0x4a, 0xbb, 0x8b, 0x4c, 0x00, 0x4a, 0xb5, 0xa9, 0x79, + 0xc6, 0x30, 0xf7, 0xfc, 0xff, 0x93, 0x03, 0x68, 0x4c, 0x2f, 0x2d, 0x0a, 0xc2, 0x61, 0x18, 0xa8, + 0xcf, 0xdf, 0xad, 0xce, 0xd6, 0x19, 0xdd, 0x20, 0x14, 0x17, 0x16, 0xa7, 0x58, 0x0d, 0x43, 0xd0, + 0x3f, 0x39, 0xbb, 0xd0, 0x98, 0x2a, 0xe7, 0x19, 0x50, 0x9b, 0xaa, 0xd6, 0xca, 0x05, 0x06, 0xbc, + 0xa7, 0xd5, 0x97, 0xa6, 0xca, 0x45, 0xf6, 0xe7, 0x6c, 0x63, 0xa9, 0xba, 0x54, 0xee, 0x67, 0x7f, + 0x4e, 0xe3, 0x9f, 0x25, 0xc6, 0xac, 0x31, 0xb5, 0x84, 0x3f, 0x06, 0x58, 0x13, 0xa6, 0xfd, 0x5f, + 0x83, 0x0c, 0xc5, 0x58, 0xd7, 0xea, 0x5a, 0x79, 0x88, 0xfd, 0x60, 0x2c, 0xd9, 0x0f, 0x60, 0x8d, + 0xd3, 0xa6, 0xe6, 0x16, 0xee, 0x4e, 0x95, 0x87, 0x19, 0xaf, 0xb9, 0xdb, 0x0c, 0x3c, 0xc2, 0xfe, + 0xd4, 0xe6, 0xd8, 0x9f, 0xa3, 0x8c, 0x93, 0x36, 0x55, 0x9d, 0x5d, 0xac, 0x2e, 0xcd, 0x94, 0xc7, + 0x58, 0x7b, 0x90, 0xe7, 0x09, 0x5e, 0x72, 0xbe, 0x3a, 0x37, 0x55, 0x2e, 0x0b, 0x9a, 0xda, 0x6c, + 0x7d, 0xfe, 0x76, 0xf9, 0x24, 0x36, 0xe4, 0xbd, 0x39, 0xfc, 0x41, 0x58, 0x01, 0xfc, 0xeb, 0xd4, + 0xf3, 0x3f, 0x00, 0xa5, 0x85, 0x06, 0xee, 0xcf, 0xce, 0xc1, 0xa9, 0x85, 0x46, 0x73, 0xe9, 0xbd, + 0xc5, 0xa9, 0x98, 0xbc, 0x4f, 0xc2, 0xa8, 0x8f, 0x98, 0xad, 0xcf, 0xdf, 0xf9, 0x0c, 0x97, 0xb6, + 0x0f, 0x9a, 0xab, 0x4e, 0x2e, 0x34, 0xca, 0x79, 0xd6, 0x2b, 0x3e, 0xe8, 0x5e, 0x7d, 0xbe, 0xb6, + 0x70, 0xaf, 0x51, 0x2e, 0x3c, 0xff, 0x10, 0x46, 0x78, 0xd2, 0xfb, 0x05, 0xc7, 0x5c, 0x31, 0x2d, + 0x72, 0x09, 0xce, 0xd7, 0xa6, 0xee, 0xd6, 0x27, 0xa7, 0x9a, 0x0b, 0x5a, 0xfd, 0x66, 0x7d, 0x3e, + 0x56, 0xd3, 0x19, 0x38, 0x19, 0x45, 0x57, 0x17, 0xeb, 0xe5, 0x1c, 0x39, 0x0b, 0x24, 0x0a, 0xbe, + 0x55, 0x9d, 0x9b, 0x2e, 0xe7, 0x89, 0x02, 0xa7, 0xa3, 0xf0, 0xfa, 0xfc, 0xd2, 0x9d, 0xf9, 0xa9, + 0x72, 0xe1, 0xf9, 0xbf, 0x96, 0x83, 0x33, 0xa9, 0x89, 0x51, 0x88, 0x0a, 0x4f, 0x4e, 0xcd, 0x56, + 0x1b, 0x4b, 0xf5, 0xc9, 0xc6, 0x54, 0x55, 0x9b, 0x9c, 0x69, 0x4e, 0x56, 0x97, 0xa6, 0x6e, 0x2e, + 0x68, 0xef, 0x35, 0x6f, 0x4e, 0xcd, 0x4f, 0x69, 0xd5, 0xd9, 0x72, 0x1f, 0x79, 0x06, 0x2a, 0x19, + 0x34, 0x8d, 0xa9, 0xc9, 0x3b, 0x5a, 0x7d, 0xe9, 0xbd, 0x72, 0x8e, 0x3c, 0x0d, 0x97, 0x32, 0x89, + 0xd8, 0xef, 0x72, 0x9e, 0x3c, 0x09, 0x17, 0xb2, 0x48, 0xde, 0x9d, 0x2d, 0x17, 0x9e, 0xff, 0xd9, + 0x1c, 0x90, 0x64, 0x66, 0x0b, 0xf2, 0x14, 0x5c, 0x64, 0x7a, 0xd1, 0xcc, 0x6e, 0xe0, 0xd3, 0x70, + 0x29, 0x95, 0x42, 0x6a, 0x5e, 0x05, 0x9e, 0xc8, 0x20, 0x11, 0x8d, 0xbb, 0x08, 0x4a, 0x3a, 0x01, + 0x36, 0xed, 0xd7, 0x72, 0x70, 0x26, 0xd5, 0x37, 0x9b, 0x5c, 0x81, 0x67, 0xab, 0xb5, 0x39, 0xd6, + 0x37, 0x93, 0x4b, 0xf5, 0x85, 0xf9, 0x46, 0x73, 0x6e, 0xba, 0xda, 0x64, 0xda, 0x77, 0xa7, 0x11, + 0xeb, 0xcd, 0xcb, 0xa0, 0xf6, 0xa0, 0x9c, 0x9c, 0xa9, 0xce, 0xdf, 0x64, 0xc3, 0x8f, 0x3c, 0x0b, + 0x4f, 0x65, 0xd2, 0x4d, 0xcd, 0x57, 0x27, 0x66, 0xa7, 0x6a, 0xe5, 0x3c, 0x79, 0x0e, 0x9e, 0xce, + 0xa4, 0xaa, 0xd5, 0x1b, 0x9c, 0xac, 0xf0, 0xbc, 0x1e, 0x31, 0xdf, 0xd9, 0x57, 0x4e, 0x2e, 0xcc, + 0x2f, 0x55, 0x27, 0x97, 0xd2, 0x34, 0xfb, 0x3c, 0x9c, 0x89, 0x60, 0x27, 0xee, 0x34, 0xea, 0xf3, + 0x53, 0x8d, 0x46, 0x39, 0x97, 0x40, 0x05, 0xa2, 0xcd, 0x4f, 0xd4, 0xbe, 0xf3, 0x3f, 0x3f, 0xd9, + 0xf7, 0x9d, 0x3f, 0x7e, 0x32, 0xf7, 0x87, 0x7f, 0xfc, 0x64, 0xee, 0x9f, 0xfe, 0xf1, 0x93, 0xb9, + 0xcf, 0x5e, 0xdf, 0x4d, 0x52, 0x14, 0x3e, 0xc3, 0x2f, 0x97, 0xd0, 0x82, 0x7a, 0xf9, 0x5f, 0x05, + 0x00, 0x00, 0xff, 0xff, 0xd8, 0xed, 0x0c, 0xf9, 0x84, 0x90, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -36995,6 +37003,20 @@ func (m *SPIFFESVIDIssued) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.WorkloadIdentityRevision) > 0 { + i -= len(m.WorkloadIdentityRevision) + copy(dAtA[i:], m.WorkloadIdentityRevision) + i = encodeVarintEvents(dAtA, i, uint64(len(m.WorkloadIdentityRevision))) + i-- + dAtA[i] = 0x6a + } + if len(m.WorkloadIdentity) > 0 { + i -= len(m.WorkloadIdentity) + copy(dAtA[i:], m.WorkloadIdentity) + i = encodeVarintEvents(dAtA, i, uint64(len(m.WorkloadIdentity))) + i-- + dAtA[i] = 0x62 + } if len(m.Audiences) > 0 { for iNdEx := len(m.Audiences) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.Audiences[iNdEx]) @@ -47638,6 +47660,14 @@ func (m *SPIFFESVIDIssued) Size() (n int) { n += 1 + l + sovEvents(uint64(l)) } } + l = len(m.WorkloadIdentity) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.WorkloadIdentityRevision) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -102784,6 +102814,70 @@ func (m *SPIFFESVIDIssued) Unmarshal(dAtA []byte) error { } m.Audiences = append(m.Audiences, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkloadIdentity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WorkloadIdentity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkloadIdentityRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WorkloadIdentityRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index f553dfbcda955..ae3a112b54853 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -5136,6 +5136,23 @@ func NewGRPCServer(cfg GRPCServerConfig) (*GRPCServer, error) { } workloadidentityv1pb.RegisterWorkloadIdentityResourceServiceServer(server, workloadIdentityResourceService) + clusterName, err := cfg.AuthServer.GetClusterName() + if err != nil { + return nil, trace.Wrap(err, "getting cluster name") + } + workloadIdentityIssuanceService, err := workloadidentityv1.NewIssuanceService(&workloadidentityv1.IssuanceServiceConfig{ + Authorizer: cfg.Authorizer, + Cache: cfg.AuthServer.Cache, + Emitter: cfg.Emitter, + Clock: cfg.AuthServer.GetClock(), + KeyStore: cfg.AuthServer.keyStore, + ClusterName: clusterName.GetClusterName(), + }) + if err != nil { + return nil, trace.Wrap(err, "creating workload identity issuance service") + } + workloadidentityv1pb.RegisterWorkloadIdentityIssuanceServiceServer(server, workloadIdentityIssuanceService) + dbObjectImportRuleService, err := dbobjectimportrulev1.NewDatabaseObjectImportRuleService(dbobjectimportrulev1.DatabaseObjectImportRuleServiceConfig{ Authorizer: cfg.Authorizer, Backend: cfg.AuthServer.Services, diff --git a/lib/auth/machineid/workloadidentityv1/issuer_service.go b/lib/auth/machineid/workloadidentityv1/issuer_service.go new file mode 100644 index 0000000000000..b6f5a25190626 --- /dev/null +++ b/lib/auth/machineid/workloadidentityv1/issuer_service.go @@ -0,0 +1,581 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package workloadidentityv1 + +import ( + "context" + "crypto" + "crypto/rand" + "crypto/x509" + "log/slog" + "math/big" + "net/url" + "regexp" + "strings" + "time" + "unicode" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "github.com/spiffe/go-spiffe/v2/spiffeid" + "go.opentelemetry.io/otel" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" + + "github.com/gravitational/teleport" + workloadidentityv1pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/workloadidentity/v1" + "github.com/gravitational/teleport/api/observability/tracing" + "github.com/gravitational/teleport/api/types" + apievents "github.com/gravitational/teleport/api/types/events" + "github.com/gravitational/teleport/lib/authz" + "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/jwt" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/tlsca" + "github.com/gravitational/teleport/lib/utils" + "github.com/gravitational/teleport/lib/utils/oidc" +) + +var tracer = otel.Tracer("github.com/gravitational/teleport/lib/auth/machineid/workloadidentityv1") + +// KeyStorer is an interface that provides methods to retrieve keys and +// certificates from the backend. +type KeyStorer interface { + GetTLSCertAndSigner(ctx context.Context, ca types.CertAuthority) ([]byte, crypto.Signer, error) + GetJWTSigner(ctx context.Context, ca types.CertAuthority) (crypto.Signer, error) +} + +type issuerCache interface { + workloadIdentityReader + GetProxies() ([]types.Server, error) + GetCertAuthority(ctx context.Context, id types.CertAuthID, loadKeys bool) (types.CertAuthority, error) +} + +// IssuanceServiceConfig holds configuration options for the IssuanceService. +type IssuanceServiceConfig struct { + Authorizer authz.Authorizer + Cache issuerCache + Clock clockwork.Clock + Emitter apievents.Emitter + Logger *slog.Logger + KeyStore KeyStorer + + ClusterName string +} + +// IssuanceService is the gRPC service for managing workload identity resources. +// It implements the workloadidentityv1pb.WorkloadIdentityIssuanceServiceServer. +type IssuanceService struct { + workloadidentityv1pb.UnimplementedWorkloadIdentityIssuanceServiceServer + + authorizer authz.Authorizer + cache issuerCache + clock clockwork.Clock + emitter apievents.Emitter + logger *slog.Logger + keyStore KeyStorer + + clusterName string +} + +// NewIssuanceService returns a new instance of the IssuanceService. +func NewIssuanceService(cfg *IssuanceServiceConfig) (*IssuanceService, error) { + switch { + case cfg.Cache == nil: + return nil, trace.BadParameter("cache service is required") + case cfg.Authorizer == nil: + return nil, trace.BadParameter("authorizer is required") + case cfg.Emitter == nil: + return nil, trace.BadParameter("emitter is required") + case cfg.KeyStore == nil: + return nil, trace.BadParameter("key store is required") + case cfg.ClusterName == "": + return nil, trace.BadParameter("cluster name is required") + } + + if cfg.Logger == nil { + cfg.Logger = slog.With(teleport.ComponentKey, "workload_identity_issuance.service") + } + if cfg.Clock == nil { + cfg.Clock = clockwork.NewRealClock() + } + return &IssuanceService{ + authorizer: cfg.Authorizer, + cache: cfg.Cache, + clock: cfg.Clock, + emitter: cfg.Emitter, + logger: cfg.Logger, + keyStore: cfg.KeyStore, + clusterName: cfg.ClusterName, + }, nil +} + +// getFieldStringValue +// TODO(noah): This is a fairly gnarly first pass of a reflection based +// attribute extraction function. This will eventually be replaced potentially +// by the chosen expression/predicate language mechanism. +func getFieldStringValue(attrs *workloadidentityv1pb.Attrs, attr string) (string, error) { + // join.gitlab.username + attrParts := strings.Split(attr, ".") + message := attrs.ProtoReflect() + // TODO: Improve errors by including the fully qualified attribute (e.g + // add up the parts of the attribute path processed thus far) + for i, part := range attrParts { + fieldDesc := message.Descriptor().Fields().ByTextName(part) + if fieldDesc == nil { + return "", trace.NotFound("attribute %q not found", part) + } + // We expect the final key to point to a string field - otherwise - we + // return an error. + if i == len(attrParts)-1 { + if fieldDesc.Kind() != protoreflect.StringKind { + return "", trace.BadParameter("attribute %q is not a string", part) + } + return message.Get(fieldDesc).String(), nil + } + // If we're not processing the final key part, we expect this to point + // to a message that we can further explore. + if fieldDesc.Kind() != protoreflect.MessageKind { + return "", trace.BadParameter("attribute %q is not a message", part) + } + message = message.Get(fieldDesc).Message() + } + return "", nil +} + +// This place is not a place of honor... +// no highly esteemed deed is commemorated here... +// nothing valued is here. +// +// What is here was dangerous and repulsive to us. +// This message is a warning about danger. +func templateString(in string, attrs *workloadidentityv1pb.Attrs) (string, error) { + re := regexp.MustCompile(`\{\{(.*?)\}\}`) + matches := re.FindAllStringSubmatch(in, -1) + + for _, match := range matches { + attrKey := strings.Trim(match[0], "{}") + attrKey = strings.TrimFunc(attrKey, unicode.IsSpace) + value, err := getFieldStringValue(attrs, attrKey) + if err != nil { + return "", trace.Wrap(err, "fetching attribute value for %q", attrKey) + } + // We want to have an implicit rule here that if an attribute is + // included in the template, but is not set, we should refuse to issue + // the credential. + if value == "" { + return "", trace.NotFound("attribute %q unset", attrKey) + } + in = strings.Replace(in, match[0], value, 1) + } + + return in, nil +} + +func evaluateRules( + wi *workloadidentityv1pb.WorkloadIdentity, + attrs *workloadidentityv1pb.Attrs, +) error { + if len(wi.GetSpec().GetRules().GetAllow()) == 0 { + return nil + } +ruleLoop: + for _, rule := range wi.GetSpec().GetRules().GetAllow() { + for _, condition := range rule.GetConditions() { + val, err := getFieldStringValue(attrs, condition.Attribute) + if err != nil { + return trace.Wrap(err) + } + if val != condition.Equals { + continue ruleLoop + } + } + return nil + } + return trace.AccessDenied("no matching rule found") +} + +func (s *IssuanceService) deriveAttrs( + authzCtx *authz.Context, + workloadAttrs *workloadidentityv1pb.WorkloadAttrs, +) (*workloadidentityv1pb.Attrs, error) { + attrs := &workloadidentityv1pb.Attrs{ + Workload: workloadAttrs, + User: &workloadidentityv1pb.UserAttrs{ + Name: authzCtx.Identity.GetIdentity().Username, + IsBot: authzCtx.Identity.GetIdentity().BotName != "", + BotName: authzCtx.Identity.GetIdentity().BotName, + Labels: authzCtx.User.GetAllLabels(), + }, + } + + return attrs, nil +} + +func (s *IssuanceService) IssueWorkloadIdentity( + ctx context.Context, + req *workloadidentityv1pb.IssueWorkloadIdentityRequest, +) (*workloadidentityv1pb.IssueWorkloadIdentityResponse, error) { + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + + switch { + case req.GetName() == "": + return nil, trace.BadParameter("name: is required") + case req.GetCredential() == nil: + return nil, trace.BadParameter("at least one credential type must be requested") + } + + wi, err := s.cache.GetWorkloadIdentity(ctx, req.GetName()) + if err != nil { + return nil, trace.Wrap(err) + } + // Check the principal has access to the workload identity resource by + // virtue of WorkloadIdentityLabels on a role. + if err := authCtx.Checker.CheckAccess( + types.Resource153ToResourceWithLabels(wi), + services.AccessState{}, + ); err != nil { + return nil, trace.Wrap(err) + } + + attrs, err := s.deriveAttrs(authCtx, req.GetWorkloadAttrs()) + if err != nil { + return nil, trace.Wrap(err, "deriving attributes") + } + // Evaluate any rules explicitly configured by the user + if err := evaluateRules(wi, attrs); err != nil { + return nil, trace.Wrap(err) + } + + // Perform any templating + spiffeIDPath, err := templateString(wi.GetSpec().GetSpiffe().GetId(), attrs) + if err != nil { + return nil, trace.Wrap(err, "templating spec.spiffe.id") + } + spiffeID, err := spiffeid.FromURI(&url.URL{ + Scheme: "spiffe", + Host: s.clusterName, + Path: spiffeIDPath, + }) + if err != nil { + return nil, trace.Wrap(err, "creating SPIFFE ID") + } + + hint, err := templateString(wi.GetSpec().GetSpiffe().GetHint(), attrs) + if err != nil { + return nil, trace.Wrap(err, "templating spec.spiffe.hint") + } + + // TODO: Actually like calculate the TTL. + ttl := time.Hour + now := s.clock.Now() + notBefore := now.Add(-1 * time.Minute) + notAfter := now.Add(ttl) + + // Prepare event + evt := &apievents.SPIFFESVIDIssued{ + Metadata: apievents.Metadata{ + Type: events.SPIFFESVIDIssuedEvent, + Code: events.SPIFFESVIDIssuedSuccessCode, + }, + UserMetadata: authz.ClientUserMetadata(ctx), + ConnectionMetadata: authz.ConnectionMetadata(ctx), + SPIFFEID: spiffeID.String(), + Hint: hint, + WorkloadIdentity: wi.GetMetadata().GetName(), + WorkloadIdentityRevision: wi.GetMetadata().GetRevision(), + } + cred := &workloadidentityv1pb.Credential{ + WorkloadIdentityName: wi.GetMetadata().GetName(), + WorkloadIdentityRevision: wi.GetMetadata().GetRevision(), + + SpiffeId: spiffeID.String(), + Hint: hint, + + Expiry: timestamppb.New(notAfter), + Ttl: durationpb.New(ttl), + } + + switch v := req.GetCredential().(type) { + case *workloadidentityv1pb.IssueWorkloadIdentityRequest_X509SvidParams: + evt.SVIDType = "x509" + certDer, certSerial, err := s.issueX509SVID( + ctx, + v.X509SvidParams, + notBefore, + notAfter, + spiffeID, + ) + if err != nil { + return nil, trace.Wrap(err, "issuing X509 SVID") + } + serialStr := serialString(certSerial) + cred.Credential = &workloadidentityv1pb.Credential_X509Svid{ + X509Svid: &workloadidentityv1pb.X509SVIDCredential{ + Cert: certDer, + SerialNumber: serialStr, + }, + } + evt.SerialNumber = serialStr + case *workloadidentityv1pb.IssueWorkloadIdentityRequest_JwtSvidParams: + evt.SVIDType = "jwt" + signedJwt, jti, err := s.issueJWTSVID( + ctx, + v.JwtSvidParams, + now, + notAfter, + spiffeID, + ) + if err != nil { + return nil, trace.Wrap(err, "issuing JWT SVID") + } + cred.Credential = &workloadidentityv1pb.Credential_JwtSvid{ + JwtSvid: &workloadidentityv1pb.JWTSVIDCredential{ + Jwt: signedJwt, + Jti: jti, + }, + } + evt.JTI = jti + default: + return nil, trace.BadParameter("credential: unknown type %T", req.GetCredential()) + } + + if err := s.emitter.EmitAuditEvent(ctx, evt); err != nil { + s.logger.WarnContext( + ctx, + "failed to emit audit event for SVID issuance", + "error", err, + "event", evt, + ) + } + + return &workloadidentityv1pb.IssueWorkloadIdentityResponse{ + Credential: cred, + }, nil +} + +func generateCertSerial() (*big.Int, error) { + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + return rand.Int(rand.Reader, serialNumberLimit) +} + +func x509Template( + serialNumber *big.Int, + notBefore time.Time, + notAfter time.Time, + spiffeID spiffeid.ID, +) *x509.Certificate { + return &x509.Certificate{ + SerialNumber: serialNumber, + NotBefore: notBefore, + NotAfter: notAfter, + // SPEC(X509-SVID) 4.3. Key Usage: + // - Leaf SVIDs MUST NOT set keyCertSign or cRLSign. + // - Leaf SVIDs MUST set digitalSignature + // - They MAY set keyEncipherment and/or keyAgreement; + KeyUsage: x509.KeyUsageDigitalSignature | + x509.KeyUsageKeyEncipherment | + x509.KeyUsageKeyAgreement, + // SPEC(X509-SVID) 4.4. Extended Key Usage: + // - Leaf SVIDs SHOULD include this extension, and it MAY be marked as critical. + // - When included, fields id-kp-serverAuth and id-kp-clientAuth MUST be set. + ExtKeyUsage: []x509.ExtKeyUsage{ + x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth, + }, + // SPEC(X509-SVID) 4.1. Basic Constraints: + // - leaf certificates MUST set the cA field to false + BasicConstraintsValid: true, + IsCA: false, + + // SPEC(X509-SVID) 2. SPIFFE ID: + // - The corresponding SPIFFE ID is set as a URI type in the Subject Alternative Name extension + // - An X.509 SVID MUST contain exactly one URI SAN, and by extension, exactly one SPIFFE ID. + // - An X.509 SVID MAY contain any number of other SAN field types, including DNS SANs. + URIs: []*url.URL{spiffeID.URL()}, + } +} + +func (s *IssuanceService) getX509CA( + ctx context.Context, +) (_ *tlsca.CertAuthority, err error) { + ctx, span := tracer.Start(ctx, "IssuanceService/getX509CA") + defer func() { tracing.EndSpan(span, err) }() + + ca, err := s.cache.GetCertAuthority(ctx, types.CertAuthID{ + Type: types.SPIFFECA, + DomainName: s.clusterName, + }, true) + tlsCert, tlsSigner, err := s.keyStore.GetTLSCertAndSigner(ctx, ca) + if err != nil { + return nil, trace.Wrap(err, "getting CA cert and key") + } + tlsCA, err := tlsca.FromCertAndSigner(tlsCert, tlsSigner) + if err != nil { + return nil, trace.Wrap(err) + } + return tlsCA, nil +} + +func (s *IssuanceService) issueX509SVID( + ctx context.Context, + params *workloadidentityv1pb.X509SVIDParams, + notBefore time.Time, + notAfter time.Time, + spiffeID spiffeid.ID, +) (_ []byte, _ *big.Int, err error) { + ctx, span := tracer.Start(ctx, "IssuanceService/issueX509SVID") + defer func() { tracing.EndSpan(span, err) }() + + switch { + case params == nil: + return nil, nil, trace.BadParameter("x509_svid_params: is required") + case len(params.PublicKey) == 0: + return nil, nil, trace.BadParameter("x509_svid_params.public_key: is required") + } + + pubKey, err := x509.ParsePKIXPublicKey(params.PublicKey) + if err != nil { + return nil, nil, trace.Wrap(err, "parsing public key") + } + + certSerial, err := generateCertSerial() + if err != nil { + return nil, nil, trace.Wrap(err, "generating certificate serial") + } + template := x509Template(certSerial, notBefore, notAfter, spiffeID) + + ca, err := s.getX509CA(ctx) + if err != nil { + return nil, nil, trace.Wrap(err, "fetching CA to sign X509 SVID") + } + certBytes, err := x509.CreateCertificate( + rand.Reader, template, ca.Cert, pubKey, ca.Signer, + ) + if err != nil { + return nil, nil, trace.Wrap(err) + } + + return certBytes, certSerial, nil +} + +const jtiLength = 16 + +func (s *IssuanceService) getJWTIssuerKey( + ctx context.Context, +) (_ *jwt.Key, err error) { + ctx, span := tracer.Start(ctx, "IssuanceService/getJWTIssuerKey") + defer func() { tracing.EndSpan(span, err) }() + + ca, err := s.cache.GetCertAuthority(ctx, types.CertAuthID{ + Type: types.SPIFFECA, + DomainName: s.clusterName, + }, true) + if err != nil { + return nil, trace.Wrap(err, "getting SPIFFE CA") + } + + jwtSigner, err := s.keyStore.GetJWTSigner(ctx, ca) + if err != nil { + return nil, trace.Wrap(err, "getting JWT signer") + } + + jwtKey, err := services.GetJWTSigner( + jwtSigner, s.clusterName, s.clock, + ) + if err != nil { + return nil, trace.Wrap(err, "creating JWT signer") + } + return jwtKey, nil +} + +func (s *IssuanceService) issueJWTSVID( + ctx context.Context, + params *workloadidentityv1pb.JWTSVIDParams, + now time.Time, + notAfter time.Time, + spiffeID spiffeid.ID, +) (_ string, _ string, err error) { + ctx, span := tracer.Start(ctx, "IssuanceService/issueJWTSVID") + defer func() { tracing.EndSpan(span, err) }() + + switch { + case params == nil: + return "", "", trace.BadParameter("jwt_svid_params: is required") + case len(params.Audiences) == 0: + return "", "", trace.BadParameter("jwt_svid_params.audiences: at least one audience should be specified") + } + + jti, err := utils.CryptoRandomHex(jtiLength) + if err != nil { + return "", "", trace.Wrap(err, "generating JTI") + } + + key, err := s.getJWTIssuerKey(ctx) + if err != nil { + return "", "", trace.Wrap(err, "getting JWT issuer key") + } + + // Determine the public address of the proxy for inclusion in the JWT as + // the issuer for purposes of OIDC compatibility. + issuer, err := oidc.IssuerForCluster(ctx, s.cache, "/workload-identity") + if err != nil { + return "", "", trace.Wrap(err, "determining issuer URI") + } + + signed, err := key.SignJWTSVID(jwt.SignParamsJWTSVID{ + Audiences: params.Audiences, + SPIFFEID: spiffeID, + JTI: jti, + Issuer: issuer, + + SetIssuedAt: now, + SetExpiry: notAfter, + }) + if err != nil { + return "", "", trace.Wrap(err, "signing jwt") + } + + return signed, jti, nil +} + +func (s *IssuanceService) IssueWorkloadIdentities( + ctx context.Context, + req *workloadidentityv1pb.IssueWorkloadIdentitiesRequest, +) (*workloadidentityv1pb.IssueWorkloadIdentitiesResponse, error) { + // TODO(noah): Coming to a PR near you soon! + return nil, trace.NotImplemented("not implemented") +} + +func serialString(serial *big.Int) string { + hex := serial.Text(16) + if len(hex)%2 == 1 { + hex = "0" + hex + } + + out := strings.Builder{} + for i := 0; i < len(hex); i += 2 { + if i != 0 { + out.WriteString(":") + } + out.WriteString(hex[i : i+2]) + } + return out.String() +} diff --git a/lib/auth/machineid/workloadidentityv1/issuer_service_test.go b/lib/auth/machineid/workloadidentityv1/issuer_service_test.go new file mode 100644 index 0000000000000..3e914e10c1b63 --- /dev/null +++ b/lib/auth/machineid/workloadidentityv1/issuer_service_test.go @@ -0,0 +1,175 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package workloadidentityv1 + +import ( + "testing" + + "github.com/stretchr/testify/require" + + headerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + workloadidentityv1pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/workloadidentity/v1" + "github.com/gravitational/teleport/api/types" +) + +func Test_getFieldStringValue(t *testing.T) { + tests := []struct { + name string + in *workloadidentityv1pb.Attrs + attr string + want string + requireErr require.ErrorAssertionFunc + }{ + { + name: "success", + in: &workloadidentityv1pb.Attrs{ + User: &workloadidentityv1pb.UserAttrs{ + Name: "jeff", + }, + }, + attr: "user.name", + want: "jeff", + requireErr: require.NoError, + }, + { + name: "non-string final field", + in: &workloadidentityv1pb.Attrs{ + User: &workloadidentityv1pb.UserAttrs{ + Name: "user", + }, + }, + attr: "user", + requireErr: func(t require.TestingT, err error, i ...interface{}) { + require.ErrorContains(t, err, "attribute \"user\" is not a string") + }, + }, + { + // We mostly just want this to not panic. + name: "nil root", + in: nil, + attr: "user.name", + want: "", + requireErr: require.NoError, + }, + { + // We mostly just want this to not panic. + name: "nil submessage", + in: &workloadidentityv1pb.Attrs{ + User: nil, + }, + attr: "user.name", + want: "", + requireErr: require.NoError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, gotErr := getFieldStringValue(tt.in, tt.attr) + require.Equal(t, tt.want, got) + tt.requireErr(t, gotErr) + }) + } +} + +func Test_templateString(t *testing.T) { + tests := []struct { + name string + in string + want string + attrs *workloadidentityv1pb.Attrs + requireErr require.ErrorAssertionFunc + }{ + { + name: "success mixed", + in: "hello{{user.name}}.{{user.name}} {{ workload.kubernetes.pod_name }}//{{ workload.kubernetes.namespace}}", + want: "hellojeff.jeff pod1//default", + attrs: &workloadidentityv1pb.Attrs{ + User: &workloadidentityv1pb.UserAttrs{ + Name: "jeff", + }, + Workload: &workloadidentityv1pb.WorkloadAttrs{ + Kubernetes: &workloadidentityv1pb.WorkloadAttrsKubernetes{ + PodName: "pod1", + Namespace: "default", + }, + }, + }, + requireErr: require.NoError, + }, + { + name: "success with spaces", + in: "hello {{user.name}}", + want: "hello jeff", + attrs: &workloadidentityv1pb.Attrs{ + User: &workloadidentityv1pb.UserAttrs{ + Name: "jeff", + }, + }, + requireErr: require.NoError, + }, + { + name: "fail due to unset", + in: "hello {{workload.kubernetes.pod_name}}", + attrs: &workloadidentityv1pb.Attrs{ + User: &workloadidentityv1pb.UserAttrs{ + Name: "jeff", + }, + }, + requireErr: func(t require.TestingT, err error, i ...interface{}) { + require.ErrorContains(t, err, "attribute \"workload.kubernetes.pod_name\" unset") + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, gotErr := templateString(tt.in, tt.attrs) + tt.requireErr(t, gotErr) + require.Equal(t, tt.want, got) + }) + } +} + +func Test_evaluateRules(t *testing.T) { + attrs := &workloadidentityv1pb.Attrs{ + User: &workloadidentityv1pb.UserAttrs{ + Name: "foo", + }, + } + wi := &workloadidentityv1pb.WorkloadIdentity{ + Kind: types.KindWorkloadIdentity, + Version: types.V1, + Metadata: &headerv1.Metadata{ + Name: "test", + }, + Spec: &workloadidentityv1pb.WorkloadIdentitySpec{ + Rules: &workloadidentityv1pb.WorkloadIdentityRules{ + Allow: []*workloadidentityv1pb.WorkloadIdentityRule{ + { + Conditions: []*workloadidentityv1pb.WorkloadIdentityCondition{ + { + Attribute: "user.name", + Equals: "foo", + }, + }, + }, + }, + }, + }, + } + err := evaluateRules(wi, attrs) + require.NoError(t, err) +} diff --git a/lib/auth/machineid/workloadidentityv1/workloadidentityv1_test.go b/lib/auth/machineid/workloadidentityv1/workloadidentityv1_test.go index 1c0601a34dd54..40685e6fe2da4 100644 --- a/lib/auth/machineid/workloadidentityv1/workloadidentityv1_test.go +++ b/lib/auth/machineid/workloadidentityv1/workloadidentityv1_test.go @@ -18,6 +18,7 @@ package workloadidentityv1_test import ( "context" + "crypto/x509" "errors" "fmt" "net" @@ -26,6 +27,7 @@ import ( "testing" "time" + "github.com/go-jose/go-jose/v3/jwt" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/gravitational/trace" @@ -33,6 +35,7 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/durationpb" headerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" workloadidentityv1pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/workloadidentity/v1" @@ -40,9 +43,12 @@ import ( "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/auth/authclient" + "github.com/gravitational/teleport/lib/cryptosuites" libevents "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/events/eventstest" + libjwt "github.com/gravitational/teleport/lib/jwt" "github.com/gravitational/teleport/lib/modules" + "github.com/gravitational/teleport/lib/services" ) func TestMain(m *testing.M) { @@ -74,6 +80,392 @@ func newTestTLSServer(t testing.TB) (*auth.TestTLSServer, *eventstest.MockRecord return srv, emitter } +func TestIssueWorkloadIdentity(t *testing.T) { + t.Parallel() + srv, eventRecorder := newTestTLSServer(t) + ctx := context.Background() + + // Upsert a fake proxy to ensure we have a public address to use for the + // issuer. + proxy, err := types.NewServer("proxy", types.KindProxy, types.ServerSpecV2{ + PublicAddrs: []string{"teleport.example.com"}, + }) + require.NoError(t, err) + err = srv.Auth().UpsertProxy(ctx, proxy) + require.NoError(t, err) + wantIssuer := "https://teleport.example.com/workload-identity" + + // Fetch X509 SPIFFE CA for validation of signature later + spiffeX509CA, err := srv.Auth().GetCertAuthority(ctx, types.CertAuthID{ + Type: types.SPIFFECA, + DomainName: srv.ClusterName(), + }, false) + require.NoError(t, err) + spiffeX509CAPool, err := services.CertPool(spiffeX509CA) + require.NoError(t, err) + // Fetch JWT CA to validate JWTs + jwtCA, err := srv.Auth().GetCertAuthority(ctx, types.CertAuthID{ + Type: types.SPIFFECA, + DomainName: "localhost", + }, true) + require.NoError(t, err) + jwtSigner, err := srv.Auth().GetKeyStore().GetJWTSigner(ctx, jwtCA) + require.NoError(t, err) + kid, err := libjwt.KeyID(jwtSigner.Public()) + require.NoError(t, err) + + wildcardAccess, _, err := auth.CreateUserAndRole( + srv.Auth(), + "dog", + []string{}, + []types.Rule{}, + auth.WithRoleMutator(func(role types.Role) { + role.SetWorkloadIdentityLabels(types.Allow, types.Labels{ + types.Wildcard: []string{types.Wildcard}, + }) + }), + ) + require.NoError(t, err) + wilcardAccessClient, err := srv.NewClient(auth.TestUser(wildcardAccess.GetName())) + require.NoError(t, err) + + specificAccess, _, err := auth.CreateUserAndRole( + srv.Auth(), + "cat", + []string{}, + []types.Rule{}, + auth.WithRoleMutator(func(role types.Role) { + role.SetWorkloadIdentityLabels(types.Allow, types.Labels{ + "foo": []string{"bar"}, + }) + }), + ) + require.NoError(t, err) + specificAccessClient, err := srv.NewClient(auth.TestUser(specificAccess.GetName())) + require.NoError(t, err) + + // Generate a keypair to generate x509 SVIDs for. + workloadKey, err := cryptosuites.GenerateKeyWithAlgorithm(cryptosuites.ECDSAP256) + require.NoError(t, err) + workloadKeyPubBytes, err := x509.MarshalPKIXPublicKey(workloadKey.Public()) + require.NoError(t, err) + + // Create some WorkloadIdentity resources + full, err := srv.Auth().CreateWorkloadIdentity(ctx, &workloadidentityv1pb.WorkloadIdentity{ + Kind: types.KindWorkloadIdentity, + Version: types.V1, + Metadata: &headerv1.Metadata{ + Name: "full", + }, + Spec: &workloadidentityv1pb.WorkloadIdentitySpec{ + Rules: &workloadidentityv1pb.WorkloadIdentityRules{ + Allow: []*workloadidentityv1pb.WorkloadIdentityRule{ + { + Conditions: []*workloadidentityv1pb.WorkloadIdentityCondition{ + { + Attribute: "user.name", + Equals: "dog", + }, + { + Attribute: "workload.kubernetes.namespace", + Equals: "default", + }, + }, + }, + }, + }, + Spiffe: &workloadidentityv1pb.WorkloadIdentitySPIFFE{ + Id: "/example/{{user.name}}/{{ workload.kubernetes.namespace }}/{{ workload.kubernetes.service_account }}", + Hint: "Wow - what a lovely hint, {{user.name}}!", + }, + }, + }) + require.NoError(t, err) + + workloadAttrs := func(f func(attrs *workloadidentityv1pb.WorkloadAttrs)) *workloadidentityv1pb.WorkloadAttrs { + attrs := &workloadidentityv1pb.WorkloadAttrs{ + Kubernetes: &workloadidentityv1pb.WorkloadAttrsKubernetes{ + Attested: true, + Namespace: "default", + PodName: "test", + ServiceAccount: "bar", + }, + } + if f != nil { + f(attrs) + } + return attrs + } + tests := []struct { + name string + client *authclient.Client + req *workloadidentityv1pb.IssueWorkloadIdentityRequest + requireErr require.ErrorAssertionFunc + assert func(*testing.T, *workloadidentityv1pb.IssueWorkloadIdentityResponse) + }{ + { + name: "jwt svid", + client: wilcardAccessClient, + req: &workloadidentityv1pb.IssueWorkloadIdentityRequest{ + Name: full.GetMetadata().GetName(), + Credential: &workloadidentityv1pb.IssueWorkloadIdentityRequest_JwtSvidParams{ + JwtSvidParams: &workloadidentityv1pb.JWTSVIDParams{ + Audiences: []string{"example.com", "test.example.com"}, + }, + }, + WorkloadAttrs: workloadAttrs(nil), + }, + requireErr: require.NoError, + assert: func(t *testing.T, res *workloadidentityv1pb.IssueWorkloadIdentityResponse) { + cred := res.Credential + require.NotNil(t, res.Credential) + + wantTTL := time.Hour + wantSPIFFEID := "spiffe://localhost/example/dog/default/bar" + require.Empty(t, cmp.Diff( + cred, + &workloadidentityv1pb.Credential{ + Ttl: durationpb.New(wantTTL), + SpiffeId: wantSPIFFEID, + Hint: "Wow - what a lovely hint, dog!", + WorkloadIdentityName: full.GetMetadata().GetName(), + WorkloadIdentityRevision: full.GetMetadata().GetRevision(), + }, + protocmp.Transform(), + protocmp.IgnoreFields( + &workloadidentityv1pb.Credential{}, + "expiry", + ), + protocmp.IgnoreOneofs( + &workloadidentityv1pb.Credential{}, + "credential", + ), + )) + // Check expiry makes sense + require.WithinDuration(t, time.Now().Add(wantTTL), cred.GetExpiry().AsTime(), time.Second) + + // Check the JWT + parsed, err := jwt.ParseSigned(cred.GetJwtSvid().GetJwt()) + require.NoError(t, err) + + claims := jwt.Claims{} + err = parsed.Claims(jwtSigner.Public(), &claims) + require.NoError(t, err) + // Check headers + require.Len(t, parsed.Headers, 1) + require.Equal(t, kid, parsed.Headers[0].KeyID) + // Check claims + require.Equal(t, wantSPIFFEID, claims.Subject) + require.NotEmpty(t, claims.ID) + require.Equal(t, jwt.Audience{"example.com", "test.example.com"}, claims.Audience) + require.Equal(t, wantIssuer, claims.Issuer) + require.WithinDuration(t, time.Now().Add(wantTTL), claims.Expiry.Time(), 5*time.Second) + require.WithinDuration(t, time.Now(), claims.IssuedAt.Time(), 5*time.Second) + + // Check audit log event + evt, ok := eventRecorder.LastEvent().(*events.SPIFFESVIDIssued) + require.True(t, ok) + require.NotEmpty(t, evt.ConnectionMetadata.RemoteAddr) + require.Equal(t, claims.ID, evt.JTI) + require.Equal(t, claims.ID, cred.GetJwtSvid().GetJti()) + require.Empty(t, cmp.Diff( + evt, + &events.SPIFFESVIDIssued{ + Metadata: events.Metadata{ + Type: libevents.SPIFFESVIDIssuedEvent, + Code: libevents.SPIFFESVIDIssuedSuccessCode, + }, + UserMetadata: events.UserMetadata{ + User: wildcardAccess.GetName(), + UserKind: events.UserKind_USER_KIND_HUMAN, + }, + SPIFFEID: "spiffe://localhost/example/dog/default/bar", + SVIDType: "jwt", + Hint: "Wow - what a lovely hint, dog!", + WorkloadIdentity: full.GetMetadata().GetName(), + WorkloadIdentityRevision: full.GetMetadata().GetRevision(), + }, + cmpopts.IgnoreFields( + events.SPIFFESVIDIssued{}, + "ConnectionMetadata", + "JTI", + ), + )) + }, + }, + { + name: "x509 svid", + client: wilcardAccessClient, + req: &workloadidentityv1pb.IssueWorkloadIdentityRequest{ + Name: full.GetMetadata().GetName(), + Credential: &workloadidentityv1pb.IssueWorkloadIdentityRequest_X509SvidParams{ + X509SvidParams: &workloadidentityv1pb.X509SVIDParams{ + PublicKey: workloadKeyPubBytes, + }, + }, + WorkloadAttrs: workloadAttrs(nil), + }, + requireErr: require.NoError, + assert: func(t *testing.T, res *workloadidentityv1pb.IssueWorkloadIdentityResponse) { + cred := res.Credential + require.NotNil(t, res.Credential) + + wantSPIFFEID := "spiffe://localhost/example/dog/default/bar" + wantTTL := time.Hour + require.Empty(t, cmp.Diff( + cred, + &workloadidentityv1pb.Credential{ + Ttl: durationpb.New(wantTTL), + SpiffeId: wantSPIFFEID, + Hint: "Wow - what a lovely hint, dog!", + WorkloadIdentityName: full.GetMetadata().GetName(), + WorkloadIdentityRevision: full.GetMetadata().GetRevision(), + }, + protocmp.Transform(), + protocmp.IgnoreFields( + &workloadidentityv1pb.Credential{}, + "expiry", + ), + protocmp.IgnoreOneofs( + &workloadidentityv1pb.Credential{}, + "credential", + ), + )) + // Check expiry makes sense + require.WithinDuration(t, time.Now().Add(wantTTL), cred.GetExpiry().AsTime(), time.Second) + + // Check the X509 + cert, err := x509.ParseCertificate(cred.GetX509Svid().GetCert()) + require.NoError(t, err) + // Check included public key matches + require.Equal(t, workloadKey.Public(), cert.PublicKey) + // Check cert expiry + require.WithinDuration(t, time.Now().Add(wantTTL), cert.NotAfter, time.Second) + // Check cert nbf + require.WithinDuration(t, time.Now().Add(-1*time.Minute), cert.NotBefore, time.Second) + // Check cert TTL + require.Equal(t, cert.NotAfter.Sub(cert.NotBefore), wantTTL+time.Minute) + + // Check against SPIFFE SPEC + // References are to https://github.com/spiffe/spiffe/blob/main/standards/X509-SVID.md + // 2: An X.509 SVID MUST contain exactly one URI SAN, and by extension, exactly one SPIFFE ID + require.Len(t, cert.URIs, 1) + require.Equal(t, wantSPIFFEID, cert.URIs[0].String()) + // 4.1: leaf certificates MUST set the cA field to false. + require.False(t, cert.IsCA) + require.Greater(t, cert.KeyUsage&x509.KeyUsageDigitalSignature, 0) + // 4.3: They MAY set keyEncipherment and/or keyAgreement + require.Greater(t, cert.KeyUsage&x509.KeyUsageKeyEncipherment, 0) + require.Greater(t, cert.KeyUsage&x509.KeyUsageKeyAgreement, 0) + // 4.3: Leaf SVIDs MUST NOT set keyCertSign or cRLSign + require.EqualValues(t, 0, cert.KeyUsage&x509.KeyUsageCertSign) + require.EqualValues(t, 0, cert.KeyUsage&x509.KeyUsageCRLSign) + // 4.4: When included, fields id-kp-serverAuth and id-kp-clientAuth MUST be set. + require.Contains(t, cert.ExtKeyUsage, x509.ExtKeyUsageServerAuth) + require.Contains(t, cert.ExtKeyUsage, x509.ExtKeyUsageClientAuth) + + // Check cert signature is valid + _, err = cert.Verify(x509.VerifyOptions{ + Roots: spiffeX509CAPool, + }) + require.NoError(t, err) + + // Check audit log event + evt, ok := eventRecorder.LastEvent().(*events.SPIFFESVIDIssued) + require.True(t, ok) + require.NotEmpty(t, evt.ConnectionMetadata.RemoteAddr) + require.Equal(t, cred.GetX509Svid().GetSerialNumber(), evt.SerialNumber) + require.Empty(t, cmp.Diff( + evt, + &events.SPIFFESVIDIssued{ + Metadata: events.Metadata{ + Type: libevents.SPIFFESVIDIssuedEvent, + Code: libevents.SPIFFESVIDIssuedSuccessCode, + }, + UserMetadata: events.UserMetadata{ + User: wildcardAccess.GetName(), + UserKind: events.UserKind_USER_KIND_HUMAN, + }, + SPIFFEID: "spiffe://localhost/example/dog/default/bar", + SVIDType: "x509", + Hint: "Wow - what a lovely hint, dog!", + WorkloadIdentity: full.GetMetadata().GetName(), + WorkloadIdentityRevision: full.GetMetadata().GetRevision(), + }, + cmpopts.IgnoreFields( + events.SPIFFESVIDIssued{}, + "ConnectionMetadata", + "SerialNumber", + ), + )) + }, + }, + { + name: "unauthorized by rules", + client: wilcardAccessClient, + req: &workloadidentityv1pb.IssueWorkloadIdentityRequest{ + Name: full.GetMetadata().GetName(), + Credential: &workloadidentityv1pb.IssueWorkloadIdentityRequest_JwtSvidParams{ + JwtSvidParams: &workloadidentityv1pb.JWTSVIDParams{ + Audiences: []string{"example.com", "test.example.com"}, + }, + }, + WorkloadAttrs: workloadAttrs(func(attrs *workloadidentityv1pb.WorkloadAttrs) { + attrs.Kubernetes.Namespace = "not-default" + }), + }, + requireErr: func(t require.TestingT, err error, i ...interface{}) { + require.True(t, trace.IsAccessDenied(err)) + }, + }, + { + name: "unauthorized by labels", + client: specificAccessClient, + req: &workloadidentityv1pb.IssueWorkloadIdentityRequest{ + Name: full.GetMetadata().GetName(), + Credential: &workloadidentityv1pb.IssueWorkloadIdentityRequest_JwtSvidParams{ + JwtSvidParams: &workloadidentityv1pb.JWTSVIDParams{ + Audiences: []string{"example.com", "test.example.com"}, + }, + }, + WorkloadAttrs: workloadAttrs(nil), + }, + requireErr: func(t require.TestingT, err error, i ...interface{}) { + require.True(t, trace.IsAccessDenied(err)) + }, + }, + { + name: "does not exist", + client: specificAccessClient, + req: &workloadidentityv1pb.IssueWorkloadIdentityRequest{ + Name: "does-not-exist", + Credential: &workloadidentityv1pb.IssueWorkloadIdentityRequest_JwtSvidParams{ + JwtSvidParams: &workloadidentityv1pb.JWTSVIDParams{ + Audiences: []string{"example.com", "test.example.com"}, + }, + }, + WorkloadAttrs: workloadAttrs(nil), + }, + requireErr: func(t require.TestingT, err error, i ...interface{}) { + require.True(t, trace.IsNotFound(err)) + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + eventRecorder.Reset() + c := workloadidentityv1pb.NewWorkloadIdentityIssuanceServiceClient( + tt.client.GetConnection(), + ) + res, err := c.IssueWorkloadIdentity(ctx, tt.req) + tt.requireErr(t, err) + if tt.assert != nil { + tt.assert(t, res) + } + }) + } +} + func TestResourceService_CreateWorkloadIdentity(t *testing.T) { t.Parallel() srv, eventRecorder := newTestTLSServer(t) diff --git a/lib/jwt/jwt.go b/lib/jwt/jwt.go index a0305acf55971..5afe58f20d96a 100644 --- a/lib/jwt/jwt.go +++ b/lib/jwt/jwt.go @@ -279,6 +279,12 @@ type SignParamsJWTSVID struct { // Issuer is the value that should be included in the `iss` claim of the // created token. Issuer string + + // SetExpiry overrides the expiry time of the token. This causes the value + // of TTL to be ignored. + SetExpiry time.Time + // SetIssuedAt overrides the issued at time of the token. + SetIssuedAt time.Time } // SignJWTSVID signs a JWT SVID token. @@ -310,6 +316,12 @@ func (k *Key) SignJWTSVID(p SignParamsJWTSVID) (string, error) { // understand OIDC. Issuer: p.Issuer, } + if !p.SetIssuedAt.IsZero() { + claims.IssuedAt = jwt.NewNumericDate(p.SetIssuedAt) + } + if !p.SetExpiry.IsZero() { + claims.Expiry = jwt.NewNumericDate(p.SetExpiry) + } // > 2.2. Key ID: // >The kid header is optional.