From 1f574976b593d37da541e5fd12104be8f9de644b Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Mon, 29 Apr 2024 15:29:37 +0200 Subject: [PATCH 01/28] Fix roles filtering (#40994) --- api/types/role.go | 4 ++-- api/types/role_test.go | 26 +++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/api/types/role.go b/api/types/role.go index 722946fb61a36..39e1768b70470 100644 --- a/api/types/role.go +++ b/api/types/role.go @@ -50,8 +50,8 @@ const ( // Match checks if the given role matches this filter. func (f *RoleFilter) Match(role *RoleV6) bool { - if f.SkipSystemRoles { - return !IsSystemResource(role) + if f.SkipSystemRoles && IsSystemResource(role) { + return false } if len(f.SearchKeywords) != 0 { diff --git a/api/types/role_test.go b/api/types/role_test.go index 45469a46d1aa1..3cf330ed7c834 100644 --- a/api/types/role_test.go +++ b/api/types/role_test.go @@ -548,11 +548,17 @@ func TestRoleFilterMatch(t *testing.T) { shouldMatch: true, }, { - name: "correct search keyword should match the role", + name: "correct search keyword should match the regular role", role: ®ularRole, filter: &RoleFilter{SearchKeywords: []string{"appr"}}, shouldMatch: true, }, + { + name: "correct search keyword should match the system role", + role: &systemRole, + filter: &RoleFilter{SearchKeywords: []string{"bot"}}, + shouldMatch: true, + }, { name: "incorrect search keyword shouldn't match the role", role: ®ularRole, @@ -571,6 +577,24 @@ func TestRoleFilterMatch(t *testing.T) { filter: &RoleFilter{SkipSystemRoles: true}, shouldMatch: true, }, + { + name: "skip system roles filter and incorrect search keywords shouldn't match the regular role", + role: ®ularRole, + filter: &RoleFilter{SkipSystemRoles: true, SearchKeywords: []string{"xyz"}}, + shouldMatch: false, + }, + { + name: "skip system roles filter and correct search keywords shouldn't match the system role", + role: &systemRole, + filter: &RoleFilter{SkipSystemRoles: true, SearchKeywords: []string{"bot"}}, + shouldMatch: false, + }, + { + name: "skip system roles filter and correct search keywords should match the regular role", + role: ®ularRole, + filter: &RoleFilter{SkipSystemRoles: true, SearchKeywords: []string{"appr"}}, + shouldMatch: true, + }, } for _, tt := range tests { From 00147ccca01340354e0bac1547de2b2103fd8e37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:30:51 +0000 Subject: [PATCH 02/28] Bump parking_lot from 0.12.1 to 0.12.2 in the rust group (#40982) Bumps the rust group with 1 update: [parking_lot](https://github.com/Amanieu/parking_lot). Updates `parking_lot` from 0.12.1 to 0.12.2 - [Changelog](https://github.com/Amanieu/parking_lot/blob/master/CHANGELOG.md) - [Commits](https://github.com/Amanieu/parking_lot/compare/0.12.1...0.12.2) --- updated-dependencies: - dependency-name: parking_lot dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- lib/srv/desktop/rdp/rdpclient/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8a02ea439e3c6..85c8fd07a4260 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1724,9 +1724,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" dependencies = [ "lock_api", "parking_lot_core 0.9.9", @@ -2035,7 +2035,7 @@ dependencies = [ "iso7816", "iso7816-tlv", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.2", "rand", "rand_chacha", "rsa", @@ -2826,7 +2826,7 @@ dependencies = [ "libc", "mio", "num_cpus", - "parking_lot 0.12.1", + "parking_lot 0.12.2", "pin-project-lite", "signal-hook-registry", "socket2 0.5.5", diff --git a/lib/srv/desktop/rdp/rdpclient/Cargo.toml b/lib/srv/desktop/rdp/rdpclient/Cargo.toml index f9863b6bad3fc..1a8e54c5414ff 100644 --- a/lib/srv/desktop/rdp/rdpclient/Cargo.toml +++ b/lib/srv/desktop/rdp/rdpclient/Cargo.toml @@ -26,7 +26,7 @@ ironrdp-tokio.workspace = true iso7816 = "0.1.2" iso7816-tlv = "0.4.4" log = "0.4.21" -parking_lot = "0.12.1" +parking_lot = "0.12.2" rand = { version = "0.8.5", features = ["getrandom"] } rand_chacha = "0.3.1" rsa = "0.9.6" From e9289ac0f1b9077573a064d5c98560c57d9d31eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:31:16 +0000 Subject: [PATCH 03/28] Bump github.com/aws/aws-sdk-go-v2/service/ec2 (#40980) Bumps the go group in /assets/aws with 1 update: [github.com/aws/aws-sdk-go-v2/service/ec2](https://github.com/aws/aws-sdk-go-v2). Updates `github.com/aws/aws-sdk-go-v2/service/ec2` from 1.157.0 to 1.159.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ec2/v1.157.0...service/ec2/v1.159.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2/service/ec2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- assets/aws/go.mod | 2 +- assets/aws/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/aws/go.mod b/assets/aws/go.mod index 42256decab847..28c17bc8969ed 100644 --- a/assets/aws/go.mod +++ b/assets/aws/go.mod @@ -6,7 +6,7 @@ require ( github.com/alecthomas/kingpin/v2 v2.3.2 // replaced github.com/aws/aws-sdk-go-v2 v1.26.1 github.com/aws/aws-sdk-go-v2/config v1.27.11 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 ) require ( diff --git a/assets/aws/go.sum b/assets/aws/go.sum index ce54a9ef052b9..bc2d1a91b6f88 100644 --- a/assets/aws/go.sum +++ b/assets/aws/go.sum @@ -14,8 +14,8 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3C github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 h1:BCNvChkZM4xqssztw+rFllaDnoS4Hm6bZ20XBj8RsI0= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 h1:DmmVmiLPlcntOcjWMRwDPMNx/wi2kAVrf2ZmSN5gkAg= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= From 3a8dacdbf775701756d9067b00eb9ef6edbc08d1 Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Mon, 29 Apr 2024 16:28:23 +0100 Subject: [PATCH 04/28] Allow a unix socket to be used as listener for Machine ID `database-tunnel` (#40992) --- lib/tbot/service_database_tunnel.go | 11 +++-------- lib/tbot/service_spiffe_workload_api.go | 3 ++- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/tbot/service_database_tunnel.go b/lib/tbot/service_database_tunnel.go index 847b1510b0736..3204cc1150b35 100644 --- a/lib/tbot/service_database_tunnel.go +++ b/lib/tbot/service_database_tunnel.go @@ -24,7 +24,6 @@ import ( "fmt" "log/slog" "net" - "net/url" "github.com/gravitational/trace" @@ -180,13 +179,9 @@ func (s *DatabaseTunnelService) Run(ctx context.Context) error { l := s.cfg.Listener if l == nil { - listenUrl, err := url.Parse(s.cfg.Listen) - if err != nil { - return trace.Wrap(err, "parsing listen url") - } - - s.log.DebugContext(ctx, "Opening listener for database tunnel.", "address", listenUrl.String()) - l, err = net.Listen("tcp", listenUrl.Host) + s.log.DebugContext(ctx, "Opening listener for database tunnel.", "listen", s.cfg.Listen) + var err error + l, err = createListener(ctx, s.log, s.cfg.Listen) if err != nil { return trace.Wrap(err, "opening listener") } diff --git a/lib/tbot/service_spiffe_workload_api.go b/lib/tbot/service_spiffe_workload_api.go index cee5ed5ff1997..2be97e13c47cf 100644 --- a/lib/tbot/service_spiffe_workload_api.go +++ b/lib/tbot/service_spiffe_workload_api.go @@ -176,7 +176,8 @@ func createListener(ctx context.Context, log *slog.Logger, addr string) (net.Lis } switch parsed.Scheme { - case "tcp": + // If no scheme is provided, default to TCP. + case "tcp", "": return net.Listen("tcp", parsed.Host) case "unix": absPath, err := filepath.Abs(parsed.Path) From a6ccb5ebf500f017a64b9bc2f460560877d1e9e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Cie=C5=9Blak?= Date: Mon, 29 Apr 2024 17:44:51 +0200 Subject: [PATCH 05/28] Capture access_through in protocol use events in Connect (#40995) * Update prehog.ConnectProtocolUseEvent with access_through * Add accessThrough as extra arg to captureProtocolUse --- gen/proto/go/prehog/v1alpha/connect.pb.go | 263 +++++++++--------- gen/proto/ts/prehog/v1alpha/connect_pb.ts | 22 +- proto/prehog/v1alpha/connect.proto | 8 +- .../ui/DocumentGateway/useDocumentGateway.ts | 14 +- .../DocumentTerminal/useDocumentTerminal.ts | 20 +- .../src/ui/services/usage/usageService.ts | 45 ++- .../documentsService/connectToApp.ts | 7 +- .../documentsService/types.ts | 3 + 8 files changed, 243 insertions(+), 139 deletions(-) diff --git a/gen/proto/go/prehog/v1alpha/connect.pb.go b/gen/proto/go/prehog/v1alpha/connect.pb.go index ce629a2bc45f6..a20ab187552fe 100644 --- a/gen/proto/go/prehog/v1alpha/connect.pb.go +++ b/gen/proto/go/prehog/v1alpha/connect.pb.go @@ -147,8 +147,14 @@ type ConnectProtocolUseEvent struct { UserName string `protobuf:"bytes,2,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` // one of ssh/db/kube Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"` - // one of resource_table/search_bar/connection_list/reopened_session (optional) + // origin denotes which part of Connect UI was used to access a resource. + // One of resource_table/search_bar/connection_list/reopened_session/vnet (optional for backwards + // compatibility). Origin string `protobuf:"bytes,4,opt,name=origin,proto3" json:"origin,omitempty"` + // access_through describes whether a resource was accessed by speaking to the proxy service + // directly, through a local proxy or through VNet. + // One of proxy_service/local_proxy/vnet (optional for backwards compatibility). + AccessThrough string `protobuf:"bytes,5,opt,name=access_through,json=accessThrough,proto3" json:"access_through,omitempty"` } func (x *ConnectProtocolUseEvent) Reset() { @@ -211,6 +217,13 @@ func (x *ConnectProtocolUseEvent) GetOrigin() string { return "" } +func (x *ConnectProtocolUseEvent) GetAccessThrough() string { + if x != nil { + return x.AccessThrough + } + return "" +} + type ConnectAccessRequestCreateEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -892,7 +905,7 @@ var file_prehog_v1alpha_connect_proto_rawDesc = []byte{ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x8d, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x6e, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb4, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x55, 0x73, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, @@ -901,143 +914,145 @@ var file_prehog_v1alpha_connect_proto_rawDesc = []byte{ 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x61, + 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x75, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x65, 0x0a, 0x23, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x61, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7a, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, - 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x75, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x3a, 0x0a, 0x1d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x6f, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x52, 0x6f, 0x6c, 0x65, - 0x22, 0x9a, 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x65, 0x74, - 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x65, 0x70, 0x22, 0x64, 0x0a, - 0x22, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, - 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x85, 0x08, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4f, 0x0a, 0x0d, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x4c, 0x0a, - 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x55, 0x73, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x55, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x15, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x23, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x65, 0x0a, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x7a, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x69, 0x73, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x3a, 0x0a, 0x1d, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x52, 0x6f, 0x6c, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6a, 0x6f, 0x62, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, + 0x75, 0x74, 0x65, 0x72, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x74, + 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x53, 0x74, 0x65, 0x70, 0x22, 0x64, 0x0a, 0x22, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x85, 0x08, 0x0a, 0x19, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x4f, 0x0a, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6c, + 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x5f, 0x75, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x55, 0x73, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x55, + 0x73, 0x65, 0x12, 0x65, 0x0a, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x72, 0x0a, 0x1a, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x75, - 0x6d, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x59, 0x0a, - 0x11, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x72, - 0x75, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x65, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x65, 0x0a, 0x15, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x75, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x12, 0x60, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x62, - 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x12, 0x72, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x59, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, + 0x66, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x12, + 0x60, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x6f, 0x6c, 0x65, + 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x65, 0x74, 0x75, 0x70, 0x48, 0x00, 0x52, 0x16, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x7a, 0x0a, 0x1f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x5f, 0x6d, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, - 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x48, 0x00, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, - 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x1a, 0x53, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x52, 0x6f, 0x6c, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, + 0x75, 0x73, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x79, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x65, + 0x74, 0x75, 0x70, 0x48, 0x00, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, + 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x7a, 0x0a, + 0x1f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x75, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x00, 0x52, 0x1b, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0x88, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6d, 0x0a, 0x12, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x88, 0x01, 0x0a, 0x17, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6d, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x42, 0xc8, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0c, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 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, 0x67, - 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, - 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xca, - 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, - 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc8, 0x01, 0x0a, 0x12, + 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x42, 0x0c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x4b, 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, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x3b, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, + 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xca, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, + 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/proto/ts/prehog/v1alpha/connect_pb.ts b/gen/proto/ts/prehog/v1alpha/connect_pb.ts index ff25fae53db57..da1b693e81f4c 100644 --- a/gen/proto/ts/prehog/v1alpha/connect_pb.ts +++ b/gen/proto/ts/prehog/v1alpha/connect_pb.ts @@ -94,11 +94,21 @@ export interface ConnectProtocolUseEvent { */ protocol: string; /** - * one of resource_table/search_bar/connection_list/reopened_session (optional) + * origin denotes which part of Connect UI was used to access a resource. + * One of resource_table/search_bar/connection_list/reopened_session/vnet (optional for backwards + * compatibility). * * @generated from protobuf field: string origin = 4; */ origin: string; + /** + * access_through describes whether a resource was accessed by speaking to the proxy service + * directly, through a local proxy or through VNet. + * One of proxy_service/local_proxy/vnet (optional for backwards compatibility). + * + * @generated from protobuf field: string access_through = 5; + */ + accessThrough: string; } /** * @generated from protobuf message prehog.v1alpha.ConnectAccessRequestCreateEvent @@ -417,7 +427,8 @@ class ConnectProtocolUseEvent$Type extends MessageType { no: 1, name: "cluster_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "user_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 3, name: "protocol", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 4, name: "origin", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + { no: 4, name: "origin", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 5, name: "access_through", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value?: PartialMessage): ConnectProtocolUseEvent { @@ -426,6 +437,7 @@ class ConnectProtocolUseEvent$Type extends MessageType message.userName = ""; message.protocol = ""; message.origin = ""; + message.accessThrough = ""; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -447,6 +459,9 @@ class ConnectProtocolUseEvent$Type extends MessageType case /* string origin */ 4: message.origin = reader.string(); break; + case /* string access_through */ 5: + message.accessThrough = reader.string(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -471,6 +486,9 @@ class ConnectProtocolUseEvent$Type extends MessageType /* string origin = 4; */ if (message.origin !== "") writer.tag(4, WireType.LengthDelimited).string(message.origin); + /* string access_through = 5; */ + if (message.accessThrough !== "") + writer.tag(5, WireType.LengthDelimited).string(message.accessThrough); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); diff --git a/proto/prehog/v1alpha/connect.proto b/proto/prehog/v1alpha/connect.proto index 95bfa2fe7e543..49cb3c2f6c085 100644 --- a/proto/prehog/v1alpha/connect.proto +++ b/proto/prehog/v1alpha/connect.proto @@ -42,8 +42,14 @@ message ConnectProtocolUseEvent { string user_name = 2; // one of ssh/db/kube string protocol = 3; - // one of resource_table/search_bar/connection_list/reopened_session (optional) + // origin denotes which part of Connect UI was used to access a resource. + // One of resource_table/search_bar/connection_list/reopened_session/vnet (optional for backwards + // compatibility). string origin = 4; + // access_through describes whether a resource was accessed by speaking to the proxy service + // directly, through a local proxy or through VNet. + // One of proxy_service/local_proxy/vnet (optional for backwards compatibility). + string access_through = 5; } message ConnectAccessRequestCreateEvent { diff --git a/web/packages/teleterm/src/ui/DocumentGateway/useDocumentGateway.ts b/web/packages/teleterm/src/ui/DocumentGateway/useDocumentGateway.ts index 1177d86d3bf4b..17374d401282c 100644 --- a/web/packages/teleterm/src/ui/DocumentGateway/useDocumentGateway.ts +++ b/web/packages/teleterm/src/ui/DocumentGateway/useDocumentGateway.ts @@ -71,10 +71,20 @@ export function useGateway(doc: types.DocumentGateway) { status: 'connected', }); if (isDatabaseUri(doc.targetUri)) { - ctx.usageService.captureProtocolUse(doc.targetUri, 'db', doc.origin); + ctx.usageService.captureProtocolUse({ + uri: doc.targetUri, + protocol: 'db', + origin: doc.origin, + accessThrough: 'local_proxy', + }); } if (isAppUri(doc.targetUri)) { - ctx.usageService.captureProtocolUse(doc.targetUri, 'app', doc.origin); + ctx.usageService.captureProtocolUse({ + uri: doc.targetUri, + protocol: 'app', + origin: doc.origin, + accessThrough: 'local_proxy', + }); } }); diff --git a/web/packages/teleterm/src/ui/DocumentTerminal/useDocumentTerminal.ts b/web/packages/teleterm/src/ui/DocumentTerminal/useDocumentTerminal.ts index 9bf4031ea2293..029d7df11f38d 100644 --- a/web/packages/teleterm/src/ui/DocumentTerminal/useDocumentTerminal.ts +++ b/web/packages/teleterm/src/ui/DocumentTerminal/useDocumentTerminal.ts @@ -233,10 +233,26 @@ async function setUpPtyProcess( const ptyProcess = await createPtyProcess(ctx, cmd); if (doc.kind === 'doc.terminal_tsh_node') { - ctx.usageService.captureProtocolUse(clusterUri, 'ssh', doc.origin); + ctx.usageService.captureProtocolUse({ + uri: clusterUri, + protocol: 'ssh', + origin: doc.origin, + accessThrough: 'proxy_service', + }); } if (doc.kind === 'doc.terminal_tsh_kube' || doc.kind === 'doc.gateway_kube') { - ctx.usageService.captureProtocolUse(clusterUri, 'kube', doc.origin); + ctx.usageService.captureProtocolUse({ + uri: clusterUri, + // Other gateways send one protocol use event per gateway being created, but here we're + // sending one event per kube tab being opened. In the context of protocol usage, that is fine + // since we now count not protocol _uses_ but protocol _users_. + protocol: 'kube', + origin: doc.origin, + // This will likely need to be adjusted after adding kube support to VNet. VNet is probably + // going to send one protocol use event per kube cluster seen, but Connect sends one event per + // tab opened. + accessThrough: 'local_proxy', + }); } const openContextMenu = () => ctx.mainProcessClient.openTerminalContextMenu(); diff --git a/web/packages/teleterm/src/ui/services/usage/usageService.ts b/web/packages/teleterm/src/ui/services/usage/usageService.ts index 950ae27747e3c..58b840a5a323b 100644 --- a/web/packages/teleterm/src/ui/services/usage/usageService.ts +++ b/web/packages/teleterm/src/ui/services/usage/usageService.ts @@ -17,11 +17,10 @@ */ import { SubmitConnectEventRequest } from 'gen-proto-ts/prehog/v1alpha/connect_pb'; - import { Timestamp } from 'gen-proto-ts/google/protobuf/timestamp_pb'; +import { Cluster } from 'gen-proto-ts/teleport/lib/teleterm/v1/cluster_pb'; import { ClusterOrResourceUri, ClusterUri, routing } from 'teleterm/ui/uri'; -import { Cluster } from 'teleterm/services/tshd/types'; import { TshdClient } from 'teleterm/services/tshd'; import { RuntimeSettings } from 'teleterm/mainProcess/types'; import { ConfigService } from 'teleterm/services/config'; @@ -35,6 +34,20 @@ type PrehogEventReq = Omit< 'distinctId' | 'timestamp' >; +/** + * Origin denotes which part of Connect UI was used to access a resource. + * + * 'vnet' is a special case this signals that a resource was opened through means other than Connect + * UI itself. Either the user copied the address from Connect or they deduced the name from seeing + * other VNet addresses, or perhaps the address is saved in some other app or source code. + */ +type Origin = DocumentOrigin | 'vnet'; +/** + * AccessThrough describes whether a resource was accessed by speaking to the proxy service + * directly, through a local proxy or through VNet. + */ +type AccessThrough = 'proxy_service' | 'local_proxy' | 'vnet'; + export class UsageService { private logger = new Logger('UsageService'); @@ -75,11 +88,28 @@ export class UsageService { }); } - captureProtocolUse( - uri: ClusterOrResourceUri, - protocol: 'ssh' | 'kube' | 'db' | 'app', - origin: DocumentOrigin - ): void { + captureProtocolUse({ + uri, + protocol, + origin, + accessThrough, + }: { + /** + * uri is used to find details of the root cluster. As such, it can be URI of any resource + * belonging to a root cluster or one of its leaves. + */ + uri: ClusterOrResourceUri; + protocol: 'ssh' | 'kube' | 'db' | 'app'; + /** + * origin denotes which part of Connect UI was used to access a resource. + */ + origin: Origin; + /** + * accessThrough describes whether a resource was accessed by speaking to the proxy service + * directly, through a local proxy or through VNet. + */ + accessThrough: AccessThrough; + }): void { const clusterProperties = this.getClusterProperties(uri); if (!clusterProperties) { this.logger.warn( @@ -95,6 +125,7 @@ export class UsageService { userName: clusterProperties.userName, protocol, origin, + accessThrough, }, }, }); diff --git a/web/packages/teleterm/src/ui/services/workspacesService/documentsService/connectToApp.ts b/web/packages/teleterm/src/ui/services/workspacesService/documentsService/connectToApp.ts index f16e5b5b9925f..e9bca0beea2a1 100644 --- a/web/packages/teleterm/src/ui/services/workspacesService/documentsService/connectToApp.ts +++ b/web/packages/teleterm/src/ui/services/workspacesService/documentsService/connectToApp.ts @@ -193,7 +193,12 @@ export function captureAppLaunchInBrowser( target: Pick, telemetry: { origin: DocumentOrigin } ) { - ctx.usageService.captureProtocolUse(target.uri, 'app', telemetry.origin); + ctx.usageService.captureProtocolUse({ + uri: target.uri, + protocol: 'app', + origin: telemetry.origin, + accessThrough: 'proxy_service', + }); } function launchAppInBrowser( diff --git a/web/packages/teleterm/src/ui/services/workspacesService/documentsService/types.ts b/web/packages/teleterm/src/ui/services/workspacesService/documentsService/types.ts index f9b5448adbcbb..fca5746185d41 100644 --- a/web/packages/teleterm/src/ui/services/workspacesService/documentsService/types.ts +++ b/web/packages/teleterm/src/ui/services/workspacesService/documentsService/types.ts @@ -24,6 +24,9 @@ import type * as tsh from 'teleterm/services/tshd/types'; export type Kind = Document['kind']; +/** + * DocumentOrigin denotes which part of Connect UI was used to create a document for the resource. + */ export type DocumentOrigin = | 'resource_table' | 'search_bar' From cfa364f28c832d3f04ed26dcc21865bfd534d219 Mon Sep 17 00:00:00 2001 From: Gavin Frazar Date: Mon, 29 Apr 2024 10:18:55 -0700 Subject: [PATCH 06/28] add Redshift Serverless e2e tests (#40237) * add Redshift Serverless e2e tests * update license year in new files * use a test cleanup func to close local proxy * adjust test timeouts * use a longer conn retry interval --- .github/workflows/aws-e2e-tests-non-root.yaml | 5 + e2e/aws/databases_test.go | 317 ++++++++++++++++++ e2e/aws/main_test.go | 21 ++ e2e/aws/rds_test.go | 259 -------------- e2e/aws/redshift_test.go | 57 ++++ 5 files changed, 400 insertions(+), 259 deletions(-) create mode 100644 e2e/aws/databases_test.go create mode 100644 e2e/aws/redshift_test.go diff --git a/.github/workflows/aws-e2e-tests-non-root.yaml b/.github/workflows/aws-e2e-tests-non-root.yaml index a2c2c89e271f7..818555ee758b9 100644 --- a/.github/workflows/aws-e2e-tests-non-root.yaml +++ b/.github/workflows/aws-e2e-tests-non-root.yaml @@ -19,6 +19,11 @@ env: RDS_POSTGRES_INSTANCE_NAME: ci-database-e2e-tests-rds-postgres-instance-us-west-2-307493967395 RDS_MYSQL_INSTANCE_NAME: ci-database-e2e-tests-rds-mysql-instance-us-west-2-307493967395 RDS_MARIADB_INSTANCE_NAME: ci-database-e2e-tests-rds-mariadb-instance-us-west-2-307493967395 + REDSHIFT_SERVERLESS_ACCESS_ROLE: arn:aws:iam::307493967395:role/ci-database-e2e-tests-redshift-serverless-access + REDSHIFT_SERVERLESS_DISCOVERY_ROLE: arn:aws:iam::307493967395:role/ci-database-e2e-tests-redshift-serverless-discovery + REDSHIFT_SERVERLESS_ENDPOINT_NAME: ci-database-e2e-tests-redshift-serverless-workgroup-rss-access-us-west-2-307493967395 + REDSHIFT_SERVERLESS_IAM_DB_USER: ci-database-e2e-tests-redshift-serverless-user + REDSHIFT_SERVERLESS_WORKGROUP_NAME: ci-database-e2e-tests-redshift-serverless-workgroup-us-west-2-307493967395 DISCOVERY_MATCHER_LABELS: "*=*" jobs: changes: diff --git a/e2e/aws/databases_test.go b/e2e/aws/databases_test.go new file mode 100644 index 0000000000000..a345ebe2a14d1 --- /dev/null +++ b/e2e/aws/databases_test.go @@ -0,0 +1,317 @@ +/* + * 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 e2e + +import ( + "context" + "crypto/tls" + "fmt" + "net" + "os" + "strconv" + "testing" + "time" + + mysqlclient "github.com/go-mysql-org/go-mysql/client" + "github.com/jackc/pgconn" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport" + apidefaults "github.com/gravitational/teleport/api/defaults" + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/integration/helpers" + "github.com/gravitational/teleport/lib/auth" + "github.com/gravitational/teleport/lib/client" + "github.com/gravitational/teleport/lib/service" + "github.com/gravitational/teleport/lib/srv/alpnproxy" + alpncommon "github.com/gravitational/teleport/lib/srv/alpnproxy/common" + "github.com/gravitational/teleport/lib/srv/db/common" + "github.com/gravitational/teleport/lib/srv/db/postgres" + "github.com/gravitational/teleport/lib/tlsca" +) + +func TestDatabases(t *testing.T) { + t.Parallel() + testEnabled := os.Getenv(teleport.AWSRunDBTests) + if ok, _ := strconv.ParseBool(testEnabled); !ok { + t.Skip("Skipping AWS Databases test suite.") + } + // when adding a new type of AWS db e2e test, you should add to this + // unmatched discovery test and add a test for matched discovery/connection + // as well below. + t.Run("unmatched discovery", awsDBDiscoveryUnmatched) + t.Run("rds", testRDS) + t.Run("redshift serverless", testRedshiftServerless) +} + +func awsDBDiscoveryUnmatched(t *testing.T) { + t.Parallel() + // get test settings + awsRegion := mustGetEnv(t, awsRegionEnv) + + // setup discovery matchers + var matchers []types.AWSMatcher + for matcherType, assumeRoleARN := range map[string]string{ + // add a new matcher/role here to test that discovery properly + // does *not* that kind of database for some unmatched tag. + types.AWSMatcherRDS: mustGetEnv(t, rdsDiscoveryRoleEnv), + types.AWSMatcherRedshiftServerless: mustGetEnv(t, rssDiscoveryRoleEnv), + } { + matchers = append(matchers, types.AWSMatcher{ + Types: []string{matcherType}, + Tags: types.Labels{ + // This label should not match. + "env": {"tag_not_found"}, + }, + Regions: []string{awsRegion}, + AssumeRole: &types.AssumeRole{ + RoleARN: assumeRoleARN, + }, + }) + } + + cluster := createTeleportCluster(t, + withSingleProxyPort(t), + withDiscoveryService(t, "db-e2e-test", matchers...), + ) + + // Get the auth server. + authC := cluster.Process.GetAuthServer() + // Wait for the discovery service to not create a database resource + // because the database does not match the selectors. + require.Never(t, func() bool { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + databases, err := authC.GetDatabases(ctx) + return err == nil && len(databases) != 0 + }, 2*time.Minute, 10*time.Second, "discovery service incorrectly created a database") +} + +const ( + waitForConnTimeout = 60 * time.Second + connRetryTick = 10 * time.Second +) + +// postgresConnTestFn tests connection to a postgres database via proxy web +// multiplexer. +func postgresConnTest(t *testing.T, cluster *helpers.TeleInstance, user string, route tlsca.RouteToDatabase, query string) { + t.Helper() + var pgConn *pgconn.PgConn + // retry for a while, the database service might need time to give + // itself IAM rds:connect permissions. + require.EventuallyWithT(t, func(t *assert.CollectT) { + var err error + ctx, cancel := context.WithTimeout(context.Background(), connRetryTick) + defer cancel() + pgConn, err = postgres.MakeTestClient(ctx, common.TestClientConfig{ + AuthClient: cluster.GetSiteAPI(cluster.Secrets.SiteName), + AuthServer: cluster.Process.GetAuthServer(), + Address: cluster.Web, + Cluster: cluster.Secrets.SiteName, + Username: user, + RouteToDatabase: route, + }) + assert.NoError(t, err) + assert.NotNil(t, pgConn) + }, waitForConnTimeout, connRetryTick, "connecting to postgres") + + // dont wait forever on the exec or close. + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Execute a query. + results, err := pgConn.Exec(ctx, query).ReadAll() + require.NoError(t, err) + for i, r := range results { + require.NoError(t, r.Err, "error in result %v", i) + } + + // Disconnect. + err = pgConn.Close(ctx) + require.NoError(t, err) +} + +// postgresLocalProxyConnTest tests connection to a postgres database via +// local proxy tunnel. +func postgresLocalProxyConnTest(t *testing.T, cluster *helpers.TeleInstance, user string, route tlsca.RouteToDatabase, query string) { + t.Helper() + ctx, cancel := context.WithTimeout(context.Background(), 2*waitForConnTimeout) + defer cancel() + lp := startLocalALPNProxy(t, ctx, user, cluster, route) + + connString := fmt.Sprintf("postgres://%s@%v/%s", + route.Username, lp.GetAddr(), route.Database) + var pgConn *pgconn.PgConn + // retry for a while, the database service might need time to give + // itself IAM rds:connect permissions. + require.EventuallyWithT(t, func(t *assert.CollectT) { + var err error + ctx, cancel := context.WithTimeout(context.Background(), connRetryTick) + defer cancel() + pgConn, err = pgconn.Connect(ctx, connString) + assert.NoError(t, err) + assert.NotNil(t, pgConn) + }, waitForConnTimeout, connRetryTick, "connecting to postgres") + + // dont wait forever on the exec or close. + ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Execute a query. + results, err := pgConn.Exec(ctx, query).ReadAll() + require.NoError(t, err) + for i, r := range results { + require.NoError(t, r.Err, "error in result %v", i) + } + + // Disconnect. + err = pgConn.Close(ctx) + require.NoError(t, err) +} + +// mysqlLocalProxyConnTest tests connection to a MySQL database via +// local proxy tunnel. +func mysqlLocalProxyConnTest(t *testing.T, cluster *helpers.TeleInstance, user string, route tlsca.RouteToDatabase, query string) { + t.Helper() + ctx, cancel := context.WithTimeout(context.Background(), 2*waitForConnTimeout) + defer cancel() + + lp := startLocalALPNProxy(t, ctx, user, cluster, route) + + var conn *mysqlclient.Conn + // retry for a while, the database service might need time to give + // itself IAM rds:connect permissions. + require.EventuallyWithT(t, func(t *assert.CollectT) { + var err error + var nd net.Dialer + ctx, cancel := context.WithTimeout(context.Background(), connRetryTick) + defer cancel() + conn, err = mysqlclient.ConnectWithDialer(ctx, "tcp", + lp.GetAddr(), + route.Username, + "", /*no password*/ + route.Database, + nd.DialContext, + ) + assert.NoError(t, err) + assert.NotNil(t, conn) + }, waitForConnTimeout, connRetryTick, "connecting to mysql") + + // Execute a query. + require.NoError(t, conn.SetDeadline(time.Now().Add(10*time.Second))) + _, err := conn.Execute(query) + require.NoError(t, err) + + // Disconnect. + require.NoError(t, conn.Close()) +} + +// startLocalALPNProxy starts local ALPN proxy for the specified database. +func startLocalALPNProxy(t *testing.T, ctx context.Context, user string, cluster *helpers.TeleInstance, route tlsca.RouteToDatabase) *alpnproxy.LocalProxy { + t.Helper() + proto, err := alpncommon.ToALPNProtocol(route.Protocol) + require.NoError(t, err) + + listener, err := net.Listen("tcp", "127.0.0.1:0") + require.NoError(t, err) + + proxyNetAddr, err := cluster.Process.ProxyWebAddr() + require.NoError(t, err) + + authSrv := cluster.Process.GetAuthServer() + tlsCert := generateClientDBCert(t, authSrv, user, route) + + proxy, err := alpnproxy.NewLocalProxy(alpnproxy.LocalProxyConfig{ + RemoteProxyAddr: proxyNetAddr.String(), + Protocols: []alpncommon.Protocol{proto}, + InsecureSkipVerify: true, + Listener: listener, + ParentContext: ctx, + Certs: []tls.Certificate{tlsCert}, + }) + require.NoError(t, err) + + go proxy.Start(ctx) + t.Cleanup(func() { + _ = proxy.Close() + }) + + return proxy +} + +// generateClientDBCert creates a test db cert for the given user and database. +func generateClientDBCert(t *testing.T, authSrv *auth.Server, user string, route tlsca.RouteToDatabase) tls.Certificate { + t.Helper() + key, err := client.GenerateRSAKey() + require.NoError(t, err) + + clusterName, err := authSrv.GetClusterName() + require.NoError(t, err) + + clientCert, err := authSrv.GenerateDatabaseTestCert( + auth.DatabaseTestCertRequest{ + PublicKey: key.MarshalSSHPublicKey(), + Cluster: clusterName.GetClusterName(), + Username: user, + RouteToDatabase: route, + }) + require.NoError(t, err) + + tlsCert, err := key.TLSCertificate(clientCert) + require.NoError(t, err) + return tlsCert +} + +func waitForDatabases(t *testing.T, auth *service.TeleportProcess, wantNames ...string) { + t.Helper() + require.EventuallyWithT(t, func(t *assert.CollectT) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + databases, err := auth.GetAuthServer().GetDatabases(ctx) + assert.NoError(t, err) + + // map the registered "db" resource names. + seen := map[string]struct{}{} + for _, db := range databases { + seen[db.GetName()] = struct{}{} + } + for _, name := range wantNames { + assert.Contains(t, seen, name) + } + }, 3*time.Minute, 3*time.Second, "waiting for the discovery service to create db resources") + require.EventuallyWithT(t, func(t *assert.CollectT) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + servers, err := auth.GetAuthServer().GetDatabaseServers(ctx, apidefaults.Namespace) + assert.NoError(t, err) + + // map the registered "db_server" resource names. + seen := map[string]struct{}{} + for _, s := range servers { + seen[s.GetName()] = struct{}{} + } + for _, name := range wantNames { + assert.Contains(t, seen, name) + } + }, 1*time.Minute, time.Second, "waiting for the database service to heartbeat the databases") +} diff --git a/e2e/aws/main_test.go b/e2e/aws/main_test.go index 9d25b19981225..2f2fd7df23e12 100644 --- a/e2e/aws/main_test.go +++ b/e2e/aws/main_test.go @@ -53,6 +53,27 @@ const ( // name of the RDS MariaDB instance that will be created by the Teleport // Discovery Service. rdsMariaDBInstanceNameEnv = "RDS_MARIADB_INSTANCE_NAME" + // rssAccessRoleEnv is the environment variable that specifies the IAM role + // that Teleport Database Service will assume to access Redshift Serverless + // databases. + // See modules/databases-ci/ from cloud-terraform repo for more details. + rssAccessRoleEnv = "REDSHIFT_SERVERLESS_ACCESS_ROLE" + // rssDiscoveryRoleEnv is the environment variable that specifies the + // IAM role that Teleport Discovery Service will assume to discover + // Redshift Serverless databases. + // See modules/databases-ci/ from cloud-terraform repo for more details. + rssDiscoveryRoleEnv = "REDSHIFT_SERVERLESS_DISCOVERY_ROLE" + // rssNameEnv is the environment variable that specifies the + // name of the Redshift Serverless workgroup that will be created by the + // Teleport Discovery Service. + rssNameEnv = "REDSHIFT_SERVERLESS_WORKGROUP_NAME" + // rssEndpointNameEnv is the environment variable that specifies the + // name of the Redshift Serverless workgroup's access endpoint that + // will be created by the Teleport Discovery Service. + rssEndpointNameEnv = "REDSHIFT_SERVERLESS_ENDPOINT_NAME" + // rssDBUserEnv is the name of the IAM role that tests will use as a + // database user to connect to Redshift Serverless. + rssDBUserEnv = "REDSHIFT_SERVERLESS_IAM_DB_USER" // kubeSvcRoleARNEnv is the environment variable that specifies // the IAM role that Teleport Kubernetes Service will assume to access the EKS cluster. // This role needs to have the following permissions: diff --git a/e2e/aws/rds_test.go b/e2e/aws/rds_test.go index d884236ffd7cc..fd8e2544429ec 100644 --- a/e2e/aws/rds_test.go +++ b/e2e/aws/rds_test.go @@ -23,9 +23,6 @@ import ( "crypto/tls" "encoding/json" "fmt" - "net" - "os" - "strconv" "sync" "testing" "time" @@ -35,84 +32,18 @@ import ( "github.com/aws/aws-sdk-go-v2/service/secretsmanager" mysqlclient "github.com/go-mysql-org/go-mysql/client" "github.com/go-mysql-org/go-mysql/mysql" - "github.com/jackc/pgconn" "github.com/jackc/pgx/v4" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gravitational/teleport" - apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/integration/helpers" - "github.com/gravitational/teleport/lib/auth" - "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/defaults" - "github.com/gravitational/teleport/lib/service" "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/srv/alpnproxy" - alpncommon "github.com/gravitational/teleport/lib/srv/alpnproxy/common" - "github.com/gravitational/teleport/lib/srv/db/common" - "github.com/gravitational/teleport/lib/srv/db/postgres" "github.com/gravitational/teleport/lib/tlsca" "github.com/gravitational/teleport/lib/utils" ) -func TestDatabases(t *testing.T) { - t.Parallel() - testEnabled := os.Getenv(teleport.AWSRunDBTests) - if ok, _ := strconv.ParseBool(testEnabled); !ok { - t.Skip("Skipping AWS Databases test suite.") - } - // when adding a new type of AWS db e2e test, you should add to this - // unmatched discovery test and add a test for matched discovery/connection - // as well below. - t.Run("unmatched discovery", awsDBDiscoveryUnmatched) - t.Run("rds", testRDS) -} - -func awsDBDiscoveryUnmatched(t *testing.T) { - t.Parallel() - // get test settings - awsRegion := mustGetEnv(t, awsRegionEnv) - - // setup discovery matchers - var matchers []types.AWSMatcher - for matcherType, assumeRoleARN := range map[string]string{ - // add a new matcher/role here to test that discovery properly - // does *not* that kind of database for some unmatched tag. - types.AWSMatcherRDS: mustGetEnv(t, rdsDiscoveryRoleEnv), - } { - matchers = append(matchers, types.AWSMatcher{ - Types: []string{matcherType}, - Tags: types.Labels{ - // This label should not match. - "env": {"tag_not_found"}, - }, - Regions: []string{awsRegion}, - AssumeRole: &types.AssumeRole{ - RoleARN: assumeRoleARN, - }, - }) - } - - cluster := createTeleportCluster(t, - withSingleProxyPort(t), - withDiscoveryService(t, "db-e2e-test", matchers...), - ) - - // Get the auth server. - authC := cluster.Process.GetAuthServer() - // Wait for the discovery service to not create a database resource - // because the database does not match the selectors. - require.Never(t, func() bool { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - databases, err := authC.GetDatabases(ctx) - return err == nil && len(databases) != 0 - }, 2*time.Minute, 10*time.Second, "discovery service incorrectly created a database") -} - // makeDBTestCluster is a test helper to set up a typical test cluster for // database e2e tests. func makeDBTestCluster(t *testing.T, accessRole, discoveryRole, discoveryMatcherType string, opts ...testOptionsFunc) *helpers.TeleInstance { @@ -495,196 +426,6 @@ func testRDS(t *testing.T) { }) } -const ( - connTestTimeout = 30 * time.Second - connTestRetryInterval = 3 * time.Second -) - -// postgresConnTestFn tests connection to a postgres database via proxy web -// multiplexer. -func postgresConnTest(t *testing.T, cluster *helpers.TeleInstance, user string, route tlsca.RouteToDatabase, query string) { - t.Helper() - ctx, cancel := context.WithTimeout(context.Background(), time.Minute) - t.Cleanup(cancel) - var pgConn *pgconn.PgConn - // retry for a while, the database service might need time to give - // itself IAM rds:connect permissions. - require.EventuallyWithT(t, func(t *assert.CollectT) { - var err error - pgConn, err = postgres.MakeTestClient(ctx, common.TestClientConfig{ - AuthClient: cluster.GetSiteAPI(cluster.Secrets.SiteName), - AuthServer: cluster.Process.GetAuthServer(), - Address: cluster.Web, - Cluster: cluster.Secrets.SiteName, - Username: user, - RouteToDatabase: route, - }) - assert.NoError(t, err) - assert.NotNil(t, pgConn) - }, connTestTimeout, connTestRetryInterval, "connecting to postgres") - - // Execute a query. - results, err := pgConn.Exec(ctx, query).ReadAll() - require.NoError(t, err) - for i, r := range results { - require.NoError(t, r.Err, "error in result %v", i) - } - - // Disconnect. - err = pgConn.Close(ctx) - require.NoError(t, err) -} - -// postgresLocalProxyConnTest tests connection to a postgres database via -// local proxy tunnel. -func postgresLocalProxyConnTest(t *testing.T, cluster *helpers.TeleInstance, user string, route tlsca.RouteToDatabase, query string) { - t.Helper() - ctx, cancel := context.WithTimeout(context.Background(), time.Minute) - t.Cleanup(cancel) - lp := startLocalALPNProxy(t, ctx, user, cluster, route) - defer lp.Close() - - connString := fmt.Sprintf("postgres://%s@%v/%s", - route.Username, lp.GetAddr(), route.Database) - var pgConn *pgconn.PgConn - // retry for a while, the database service might need time to give - // itself IAM rds:connect permissions. - require.EventuallyWithT(t, func(t *assert.CollectT) { - var err error - pgConn, err = pgconn.Connect(ctx, connString) - assert.NoError(t, err) - assert.NotNil(t, pgConn) - }, connTestTimeout, connTestRetryInterval, "connecting to postgres") - - // Execute a query. - results, err := pgConn.Exec(ctx, query).ReadAll() - require.NoError(t, err) - for i, r := range results { - require.NoError(t, r.Err, "error in result %v", i) - } - - // Disconnect. - err = pgConn.Close(ctx) - require.NoError(t, err) -} - -// mysqlLocalProxyConnTest tests connection to a MySQL database via -// local proxy tunnel. -func mysqlLocalProxyConnTest(t *testing.T, cluster *helpers.TeleInstance, user string, route tlsca.RouteToDatabase, query string) { - t.Helper() - ctx, cancel := context.WithTimeout(context.Background(), time.Minute) - t.Cleanup(cancel) - - lp := startLocalALPNProxy(t, ctx, user, cluster, route) - defer lp.Close() - - var conn *mysqlclient.Conn - // retry for a while, the database service might need time to give - // itself IAM rds:connect permissions. - require.EventuallyWithT(t, func(t *assert.CollectT) { - var err error - conn, err = mysqlclient.Connect(lp.GetAddr(), route.Username, "" /*no password*/, route.Database) - assert.NoError(t, err) - assert.NotNil(t, conn) - }, connTestTimeout, connTestRetryInterval, "connecting to mysql") - - // Execute a query. - _, err := conn.Execute(query) - require.NoError(t, err) - - // Disconnect. - require.NoError(t, conn.Close()) -} - -// startLocalALPNProxy starts local ALPN proxy for the specified database. -func startLocalALPNProxy(t *testing.T, ctx context.Context, user string, cluster *helpers.TeleInstance, route tlsca.RouteToDatabase) *alpnproxy.LocalProxy { - t.Helper() - proto, err := alpncommon.ToALPNProtocol(route.Protocol) - require.NoError(t, err) - - listener, err := net.Listen("tcp", "127.0.0.1:0") - require.NoError(t, err) - - proxyNetAddr, err := cluster.Process.ProxyWebAddr() - require.NoError(t, err) - - authSrv := cluster.Process.GetAuthServer() - tlsCert := generateClientDBCert(t, authSrv, user, route) - - proxy, err := alpnproxy.NewLocalProxy(alpnproxy.LocalProxyConfig{ - RemoteProxyAddr: proxyNetAddr.String(), - Protocols: []alpncommon.Protocol{proto}, - InsecureSkipVerify: true, - Listener: listener, - ParentContext: ctx, - Certs: []tls.Certificate{tlsCert}, - }) - require.NoError(t, err) - - go proxy.Start(ctx) - - return proxy -} - -// generateClientDBCert creates a test db cert for the given user and database. -func generateClientDBCert(t *testing.T, authSrv *auth.Server, user string, route tlsca.RouteToDatabase) tls.Certificate { - t.Helper() - key, err := client.GenerateRSAKey() - require.NoError(t, err) - - clusterName, err := authSrv.GetClusterName() - require.NoError(t, err) - - clientCert, err := authSrv.GenerateDatabaseTestCert( - auth.DatabaseTestCertRequest{ - PublicKey: key.MarshalSSHPublicKey(), - Cluster: clusterName.GetClusterName(), - Username: user, - RouteToDatabase: route, - }) - require.NoError(t, err) - - tlsCert, err := key.TLSCertificate(clientCert) - require.NoError(t, err) - return tlsCert -} - -func waitForDatabases(t *testing.T, auth *service.TeleportProcess, wantNames ...string) { - t.Helper() - require.EventuallyWithT(t, func(t *assert.CollectT) { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - databases, err := auth.GetAuthServer().GetDatabases(ctx) - assert.NoError(t, err) - - // map the registered "db" resource names. - seen := map[string]struct{}{} - for _, db := range databases { - seen[db.GetName()] = struct{}{} - } - for _, name := range wantNames { - assert.Contains(t, seen, name) - } - }, 3*time.Minute, 3*time.Second, "waiting for the discovery service to create db resources") - require.EventuallyWithT(t, func(t *assert.CollectT) { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - servers, err := auth.GetAuthServer().GetDatabaseServers(ctx, apidefaults.Namespace) - assert.NoError(t, err) - - // map the registered "db_server" resource names. - seen := map[string]struct{}{} - for _, s := range servers { - seen[s.GetName()] = struct{}{} - } - for _, name := range wantNames { - assert.Contains(t, seen, name) - } - }, 1*time.Minute, time.Second, "waiting for the database service to heartbeat the databases") -} - // rdsAdminInfo contains common info needed to connect as an RDS admin user via // password auth. type rdsAdminInfo struct { diff --git a/e2e/aws/redshift_test.go b/e2e/aws/redshift_test.go new file mode 100644 index 0000000000000..21a6ca4b3d4f4 --- /dev/null +++ b/e2e/aws/redshift_test.go @@ -0,0 +1,57 @@ +/* + * 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 e2e + +import ( + "testing" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/tlsca" +) + +func testRedshiftServerless(t *testing.T) { + t.Parallel() + accessRole := mustGetEnv(t, rssAccessRoleEnv) + discoveryRole := mustGetEnv(t, rssDiscoveryRoleEnv) + cluster := makeDBTestCluster(t, accessRole, discoveryRole, types.AWSMatcherRedshiftServerless) + + // wait for the database to be discovered + rssDBName := mustGetEnv(t, rssNameEnv) + rssEndpointName := mustGetEnv(t, rssEndpointNameEnv) + waitForDatabases(t, cluster.Process, rssDBName, rssEndpointName) + + t.Run("connect as iam role", func(t *testing.T) { + // test connections + rssRoute := tlsca.RouteToDatabase{ + ServiceName: rssDBName, + Protocol: defaults.ProtocolPostgres, + Username: mustGetEnv(t, rssDBUserEnv), + Database: "postgres", + } + t.Run("via proxy", func(t *testing.T) { + t.Parallel() + postgresConnTest(t, cluster, hostUser, rssRoute, "select 1") + }) + t.Run("via local proxy", func(t *testing.T) { + t.Parallel() + postgresLocalProxyConnTest(t, cluster, hostUser, rssRoute, "select 1") + }) + }) +} From d129b1d3c78d7fa3fb09de7690d131f9f3ea7167 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 29 Apr 2024 12:21:43 -0500 Subject: [PATCH 07/28] Include requiresRequest flag for searchAsRoles requests (#40328) --- api/client/client.go | 22 +- api/client/proto/authservice.pb.go | 1785 +++++++++-------- .../legacy/client/proto/authservice.proto | 5 + api/types/resource.go | 4 + lib/auth/assist/assistv1/service.go | 2 +- lib/auth/auth_with_roles.go | 106 +- lib/auth/auth_with_roles_test.go | 123 +- lib/auth/grpcserver.go | 2 +- lib/services/unified_resource.go | 210 +- lib/web/apiserver.go | 1 + 10 files changed, 1250 insertions(+), 1010 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index 6a0608bd0872d..8e692aee2f681 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -3805,27 +3805,27 @@ type ResourcePage[T types.ResourceWithLabels] struct { // PaginatedResource returned from the rpc ListUnifiedResources. func convertEnrichedResource(resource *proto.PaginatedResource) (*types.EnrichedResource, error) { if r := resource.GetNode(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r, Logins: resource.Logins}, nil + return &types.EnrichedResource{ResourceWithLabels: r, Logins: resource.Logins, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetDatabaseServer(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetDatabaseService(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetAppServerOrSAMLIdPServiceProvider(); r != nil { //nolint:staticcheck // SA1019. TODO(sshah) DELETE IN 17.0 - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetWindowsDesktop(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r, Logins: resource.Logins}, nil + return &types.EnrichedResource{ResourceWithLabels: r, Logins: resource.Logins, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetWindowsDesktopService(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetKubeCluster(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetKubernetesServer(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetUserGroup(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetAppServer(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else if r := resource.GetSAMLIdPServiceProvider(); r != nil { - return &types.EnrichedResource{ResourceWithLabels: r}, nil + return &types.EnrichedResource{ResourceWithLabels: r, RequiresRequest: resource.RequiresRequest}, nil } else { return nil, trace.BadParameter("received unsupported resource %T", resource.Resource) } diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index ced496b054a80..59a590d128a38 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -10226,7 +10226,10 @@ type PaginatedResource struct { // *PaginatedResource_SAMLIdPServiceProvider Resource isPaginatedResource_Resource `protobuf_oneof:"resource"` // Logins allowed for the included resource. Only to be populated for SSH and Desktops. - Logins []string `protobuf:"bytes,13,rep,name=Logins,proto3" json:"logins,omitempty"` + Logins []string `protobuf:"bytes,13,rep,name=Logins,proto3" json:"logins,omitempty"` + // RequiresRequest indicates if a resource requires an access request to access. Only populated with requests + // that IncludeRequestable. + RequiresRequest bool `protobuf:"varint,14,opt,name=RequiresRequest,proto3" json:"requires_request,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -10409,6 +10412,13 @@ func (m *PaginatedResource) GetLogins() []string { return nil } +func (m *PaginatedResource) GetRequiresRequest() bool { + if m != nil { + return m.RequiresRequest + } + return false +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*PaginatedResource) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -10458,7 +10468,9 @@ type ListUnifiedResourcesRequest struct { PinnedOnly bool `protobuf:"varint,11,opt,name=PinnedOnly,proto3" json:"pinned_only,omitempty"` // IncludeLogins indicates that the response should include a users allowed logins // for all returned resources. - IncludeLogins bool `protobuf:"varint,12,opt,name=IncludeLogins,proto3" json:"include_logins,omitempty"` + IncludeLogins bool `protobuf:"varint,12,opt,name=IncludeLogins,proto3" json:"include_logins,omitempty"` + // IncludeRequestable indicates that the response should include resources that the user must request access to. + IncludeRequestable bool `protobuf:"varint,14,opt,name=IncludeRequestable,proto3" json:"include_proto,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -10581,6 +10593,13 @@ func (m *ListUnifiedResourcesRequest) GetIncludeLogins() bool { return false } +func (m *ListUnifiedResourcesRequest) GetIncludeRequestable() bool { + if m != nil { + return m.IncludeRequestable + } + return false +} + // ListUnifiedResourceResponse response of ListUnifiedResources. type ListUnifiedResourcesResponse struct { // Resources is a list of resource. @@ -14918,55 +14937,55 @@ func init() { } var fileDescriptor_0ffcffcda38ae159 = []byte{ - // 14030 bytes of a gzipped FileDescriptorProto + // 14082 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x1c, 0x49, 0x92, 0x18, 0x9b, 0x6f, 0x06, 0x5f, 0xad, 0x24, 0x29, 0x52, 0x14, 0xa5, 0x96, 0x6a, 0x5e, 0x1a, - 0xed, 0xac, 0x1e, 0xd4, 0xcc, 0xec, 0x3c, 0x76, 0x67, 0xb6, 0xf9, 0x90, 0x48, 0x89, 0xaf, 0xa9, - 0x26, 0xa9, 0x99, 0xdd, 0xb9, 0xed, 0x2d, 0x76, 0xa7, 0xc8, 0x3a, 0x35, 0xab, 0x7a, 0xab, 0xaa, - 0xa5, 0xd1, 0x9e, 0xef, 0x8c, 0xdb, 0xb3, 0x61, 0xff, 0xd8, 0x3e, 0x03, 0x77, 0xc6, 0xf9, 0x01, - 0x18, 0x06, 0x6c, 0xc0, 0xf0, 0xd7, 0xfd, 0x18, 0xf7, 0xe1, 0x0f, 0xc3, 0x5f, 0x5e, 0x1b, 0x38, - 0xdb, 0xc0, 0xdd, 0xfd, 0xf8, 0x83, 0x67, 0x2f, 0xe0, 0x1f, 0xe2, 0xfc, 0x61, 0x1b, 0x36, 0xe0, - 0x05, 0x0c, 0x18, 0x19, 0xf9, 0xa8, 0xcc, 0x7a, 0x35, 0xa9, 0xd1, 0xac, 0xfd, 0x23, 0xb1, 0x33, - 0x23, 0x22, 0x33, 0x23, 0xb3, 0x22, 0x23, 0x22, 0x23, 0x33, 0xe0, 0x56, 0x44, 0x5b, 0xb4, 0xed, - 0x07, 0xd1, 0xed, 0x16, 0x3d, 0x74, 0x1a, 0x2f, 0x6e, 0x37, 0x5a, 0x2e, 0xf5, 0xa2, 0xdb, 0xed, - 0xc0, 0x8f, 0xfc, 0xdb, 0x4e, 0x27, 0x3a, 0x0a, 0x69, 0xf0, 0xcc, 0x6d, 0xd0, 0x5b, 0x58, 0x42, - 0x06, 0xf0, 0xbf, 0xf9, 0xe9, 0x43, 0xff, 0xd0, 0xe7, 0x30, 0xec, 0x2f, 0x5e, 0x39, 0x7f, 0xf9, - 0xd0, 0xf7, 0x0f, 0x5b, 0x94, 0x23, 0x1f, 0x74, 0x9e, 0xdc, 0xa6, 0xc7, 0xed, 0xe8, 0x85, 0xa8, - 0xac, 0x24, 0x2b, 0x23, 0xf7, 0x98, 0x86, 0x91, 0x73, 0xdc, 0x16, 0x00, 0x6f, 0xab, 0xae, 0x38, - 0x51, 0xc4, 0x6a, 0x22, 0xd7, 0xf7, 0x6e, 0x3f, 0xbb, 0xab, 0xff, 0x14, 0xa0, 0x37, 0x0a, 0x7b, - 0xdd, 0xa0, 0x41, 0x14, 0x9e, 0x09, 0x92, 0x3e, 0xa3, 0x5e, 0x94, 0x6a, 0x5e, 0x40, 0x46, 0x2f, - 0xda, 0x34, 0xe4, 0x20, 0xf2, 0x3f, 0x01, 0x7a, 0x3d, 0x1b, 0x14, 0xff, 0x15, 0x20, 0xdf, 0xce, - 0x06, 0x79, 0x4e, 0x0f, 0x18, 0x4f, 0x3d, 0xf5, 0x47, 0x17, 0xf0, 0xc0, 0x69, 0xb7, 0x69, 0x10, - 0xff, 0x21, 0xc0, 0x2f, 0x29, 0xf0, 0xe3, 0x27, 0x0e, 0x63, 0xd1, 0xf1, 0x13, 0x27, 0x35, 0x8c, - 0x4e, 0xe8, 0x1c, 0x52, 0xd1, 0xfd, 0x67, 0x77, 0xf5, 0x9f, 0x1c, 0xd4, 0xfa, 0x87, 0x25, 0x18, - 0x78, 0xec, 0x44, 0x8d, 0x23, 0xf2, 0x29, 0x0c, 0x3c, 0x72, 0xbd, 0x66, 0x38, 0x57, 0xba, 0xd6, - 0x77, 0x63, 0x74, 0xb1, 0x7c, 0x8b, 0x0f, 0x05, 0x2b, 0x59, 0xc5, 0xd2, 0xec, 0xcf, 0x4f, 0x2a, - 0x3d, 0xa7, 0x27, 0x95, 0xc9, 0xa7, 0x0c, 0xec, 0x1d, 0xff, 0xd8, 0x8d, 0x70, 0x6e, 0x6d, 0x8e, - 0x47, 0xf6, 0x60, 0xaa, 0xda, 0x6a, 0xf9, 0xcf, 0x77, 0x9c, 0x20, 0x72, 0x9d, 0x56, 0xad, 0xd3, - 0x68, 0xd0, 0x30, 0x9c, 0xeb, 0xbd, 0x56, 0xba, 0x31, 0xbc, 0xf4, 0xda, 0xe9, 0x49, 0xa5, 0xe2, - 0xb0, 0xea, 0x7a, 0x9b, 0xd7, 0xd7, 0x43, 0x0e, 0xa0, 0x11, 0xca, 0xc2, 0xb7, 0xfe, 0x62, 0x00, - 0xca, 0x6b, 0x7e, 0x18, 0x2d, 0xb3, 0x19, 0xb5, 0xe9, 0x4f, 0x3a, 0x34, 0x8c, 0xc8, 0x6b, 0x30, - 0xc8, 0xca, 0xd6, 0x57, 0xe6, 0x4a, 0xd7, 0x4a, 0x37, 0x46, 0x96, 0x46, 0x4f, 0x4f, 0x2a, 0x43, - 0x47, 0x7e, 0x18, 0xd5, 0xdd, 0xa6, 0x2d, 0xaa, 0xc8, 0xdb, 0x30, 0xbc, 0xe5, 0x37, 0xe9, 0x96, - 0x73, 0x4c, 0xb1, 0x17, 0x23, 0x4b, 0xe3, 0xa7, 0x27, 0x95, 0x11, 0xcf, 0x6f, 0xd2, 0xba, 0xe7, - 0x1c, 0x53, 0x5b, 0x55, 0x93, 0x7d, 0xe8, 0xb7, 0xfd, 0x16, 0x9d, 0xeb, 0x43, 0xb0, 0xa5, 0xd3, - 0x93, 0x4a, 0x7f, 0xe0, 0xb7, 0xe8, 0x2f, 0x4f, 0x2a, 0xef, 0x1f, 0xba, 0xd1, 0x51, 0xe7, 0xe0, - 0x56, 0xc3, 0x3f, 0xbe, 0x7d, 0x18, 0x38, 0xcf, 0x5c, 0xbe, 0x08, 0x9d, 0xd6, 0xed, 0x78, 0xa9, - 0xb6, 0x5d, 0x31, 0xef, 0xb5, 0x17, 0x61, 0x44, 0x8f, 0x19, 0x25, 0x1b, 0xe9, 0x91, 0xc7, 0x30, - 0x5d, 0x6d, 0x36, 0x5d, 0x8e, 0xb1, 0x13, 0xb8, 0x5e, 0xc3, 0x6d, 0x3b, 0xad, 0x70, 0xae, 0xff, - 0x5a, 0xdf, 0x8d, 0x11, 0xc1, 0x14, 0x55, 0x5f, 0x6f, 0x2b, 0x00, 0x8d, 0x29, 0x99, 0x04, 0xc8, - 0x3d, 0x18, 0x5e, 0xd9, 0xaa, 0xb1, 0xbe, 0x87, 0x73, 0x03, 0x48, 0x6c, 0xf6, 0xf4, 0xa4, 0x32, - 0xd5, 0xf4, 0x42, 0x1c, 0x9a, 0x4e, 0x40, 0x01, 0x92, 0xf7, 0x61, 0x6c, 0xa7, 0x73, 0xd0, 0x72, - 0x1b, 0xbb, 0x1b, 0xb5, 0x47, 0xf4, 0xc5, 0xdc, 0xe0, 0xb5, 0xd2, 0x8d, 0xb1, 0x25, 0x72, 0x7a, - 0x52, 0x99, 0x68, 0x63, 0x79, 0x3d, 0x6a, 0x85, 0xf5, 0xa7, 0xf4, 0x85, 0x6d, 0xc0, 0xc5, 0x78, - 0xb5, 0xda, 0x1a, 0xc3, 0x1b, 0x4a, 0xe1, 0x85, 0xe1, 0x91, 0x8e, 0xc7, 0xe1, 0xc8, 0x6d, 0x00, - 0x9b, 0x1e, 0xfb, 0x11, 0xad, 0x36, 0x9b, 0xc1, 0xdc, 0x30, 0xf2, 0x76, 0xf2, 0xf4, 0xa4, 0x32, - 0x1a, 0x60, 0x69, 0xdd, 0x69, 0x36, 0x03, 0x5b, 0x03, 0x21, 0xcb, 0x30, 0x6c, 0xfb, 0x9c, 0xc1, - 0x73, 0x23, 0xd7, 0x4a, 0x37, 0x46, 0x17, 0x27, 0xc5, 0x32, 0x94, 0xc5, 0x4b, 0x17, 0x4f, 0x4f, - 0x2a, 0x24, 0x10, 0xbf, 0xf4, 0x51, 0x4a, 0x08, 0x52, 0x81, 0xa1, 0x2d, 0x7f, 0xd9, 0x69, 0x1c, - 0xd1, 0x39, 0xc0, 0xb5, 0x37, 0x70, 0x7a, 0x52, 0x29, 0x7d, 0xdb, 0x96, 0xa5, 0xe4, 0x19, 0x8c, - 0xc6, 0x13, 0x15, 0xce, 0x8d, 0x22, 0xfb, 0x76, 0x4f, 0x4f, 0x2a, 0x17, 0x43, 0x2c, 0xae, 0xb3, - 0xa9, 0xd7, 0x38, 0xf8, 0x35, 0x56, 0x81, 0xde, 0xd0, 0xc3, 0xfe, 0xe1, 0xb1, 0xf2, 0xb8, 0x7d, + 0xed, 0xac, 0x34, 0xa2, 0x66, 0x66, 0xe7, 0xb1, 0x3b, 0xb3, 0xcd, 0x87, 0x44, 0x4a, 0x7c, 0x4d, + 0x35, 0x49, 0xcd, 0xec, 0xce, 0x6d, 0x6f, 0xb1, 0x3b, 0x45, 0xd6, 0xa9, 0x59, 0xd5, 0x5b, 0x55, + 0x2d, 0x8d, 0xf6, 0x7c, 0x67, 0xdc, 0x9e, 0x0d, 0xdf, 0x8f, 0xed, 0x33, 0x70, 0x67, 0x9c, 0x1f, + 0x80, 0x61, 0xc0, 0x06, 0x0c, 0x7f, 0xdd, 0x8f, 0x71, 0x3f, 0x06, 0x0c, 0x7f, 0x79, 0x6d, 0xe0, + 0x6c, 0x03, 0x77, 0xf7, 0xe3, 0x0f, 0x9e, 0xbd, 0x80, 0x7f, 0x88, 0xf3, 0x87, 0x61, 0xd8, 0x80, + 0x17, 0x30, 0x60, 0x64, 0xe4, 0xa3, 0x32, 0xeb, 0xd5, 0xa4, 0xa4, 0x59, 0xfb, 0x47, 0x62, 0x67, + 0x46, 0x44, 0x66, 0x46, 0x66, 0x45, 0x46, 0x46, 0x46, 0x46, 0xc0, 0xad, 0x88, 0xb6, 0x68, 0xdb, + 0x0f, 0xa2, 0xdb, 0x2d, 0x7a, 0xe8, 0x34, 0x9e, 0xdf, 0x6e, 0xb4, 0x5c, 0xea, 0x45, 0xb7, 0xdb, + 0x81, 0x1f, 0xf9, 0xb7, 0x9d, 0x4e, 0x74, 0x14, 0xd2, 0xe0, 0xa9, 0xdb, 0xa0, 0xb7, 0xb0, 0x84, + 0x0c, 0xe0, 0x7f, 0xf3, 0xd3, 0x87, 0xfe, 0xa1, 0xcf, 0x61, 0xd8, 0x5f, 0xbc, 0x72, 0xfe, 0xf2, + 0xa1, 0xef, 0x1f, 0xb6, 0x28, 0x47, 0x3e, 0xe8, 0x3c, 0xbe, 0x4d, 0x8f, 0xdb, 0xd1, 0x73, 0x51, + 0x59, 0x49, 0x56, 0x46, 0xee, 0x31, 0x0d, 0x23, 0xe7, 0xb8, 0x2d, 0x00, 0xde, 0x56, 0x5d, 0x71, + 0xa2, 0x88, 0xd5, 0x44, 0xae, 0xef, 0xdd, 0x7e, 0x7a, 0x47, 0xff, 0x29, 0x40, 0x6f, 0x14, 0xf6, + 0xba, 0x41, 0x83, 0x28, 0x3c, 0x13, 0x24, 0x7d, 0x4a, 0xbd, 0x28, 0xd5, 0xbc, 0x80, 0x8c, 0x9e, + 0xb7, 0x69, 0xc8, 0x41, 0xe4, 0x7f, 0x02, 0xf4, 0x7a, 0x36, 0x28, 0xfe, 0x2b, 0x40, 0xbe, 0x9d, + 0x0d, 0xf2, 0x8c, 0x1e, 0x30, 0x9e, 0x7a, 0xea, 0x8f, 0x2e, 0xe0, 0x81, 0xd3, 0x6e, 0xd3, 0x20, + 0xfe, 0x43, 0x80, 0x5f, 0x52, 0xe0, 0xc7, 0x8f, 0x1d, 0xc6, 0xa2, 0xe3, 0xc7, 0x4e, 0x6a, 0x18, + 0x9d, 0xd0, 0x39, 0xa4, 0xa2, 0xfb, 0x4f, 0xef, 0xe8, 0x3f, 0x39, 0xa8, 0xf5, 0x8f, 0x4a, 0x30, + 0xf0, 0xc8, 0x89, 0x1a, 0x47, 0xe4, 0x33, 0x18, 0x78, 0xe8, 0x7a, 0xcd, 0x70, 0xae, 0x74, 0xad, + 0xef, 0xc6, 0xe8, 0x62, 0xf9, 0x16, 0x1f, 0x0a, 0x56, 0xb2, 0x8a, 0xa5, 0xd9, 0x9f, 0x9f, 0x54, + 0x7a, 0x4e, 0x4f, 0x2a, 0x93, 0x4f, 0x18, 0xd8, 0x3b, 0xfe, 0xb1, 0x1b, 0xe1, 0xdc, 0xda, 0x1c, + 0x8f, 0xec, 0xc1, 0x54, 0xb5, 0xd5, 0xf2, 0x9f, 0xed, 0x38, 0x41, 0xe4, 0x3a, 0xad, 0x5a, 0xa7, + 0xd1, 0xa0, 0x61, 0x38, 0xd7, 0x7b, 0xad, 0x74, 0x63, 0x78, 0xe9, 0xb5, 0xd3, 0x93, 0x4a, 0xc5, + 0x61, 0xd5, 0xf5, 0x36, 0xaf, 0xaf, 0x87, 0x1c, 0x40, 0x23, 0x94, 0x85, 0x6f, 0xfd, 0xe5, 0x00, + 0x94, 0xd7, 0xfc, 0x30, 0x5a, 0x66, 0x33, 0x6a, 0xd3, 0x9f, 0x74, 0x68, 0x18, 0x91, 0xd7, 0x60, + 0x90, 0x95, 0xad, 0xaf, 0xcc, 0x95, 0xae, 0x95, 0x6e, 0x8c, 0x2c, 0x8d, 0x9e, 0x9e, 0x54, 0x86, + 0x8e, 0xfc, 0x30, 0xaa, 0xbb, 0x4d, 0x5b, 0x54, 0x91, 0xb7, 0x61, 0x78, 0xcb, 0x6f, 0xd2, 0x2d, + 0xe7, 0x98, 0x62, 0x2f, 0x46, 0x96, 0xc6, 0x4f, 0x4f, 0x2a, 0x23, 0x9e, 0xdf, 0xa4, 0x75, 0xcf, + 0x39, 0xa6, 0xb6, 0xaa, 0x26, 0xfb, 0xd0, 0x6f, 0xfb, 0x2d, 0x3a, 0xd7, 0x87, 0x60, 0x4b, 0xa7, + 0x27, 0x95, 0xfe, 0xc0, 0x6f, 0xd1, 0x5f, 0x9e, 0x54, 0x3e, 0x38, 0x74, 0xa3, 0xa3, 0xce, 0xc1, + 0xad, 0x86, 0x7f, 0x7c, 0xfb, 0x30, 0x70, 0x9e, 0xba, 0x7c, 0x11, 0x3a, 0xad, 0xdb, 0xf1, 0x52, + 0x6d, 0xbb, 0x62, 0xde, 0x6b, 0xcf, 0xc3, 0x88, 0x1e, 0x33, 0x4a, 0x36, 0xd2, 0x23, 0x8f, 0x60, + 0xba, 0xda, 0x6c, 0xba, 0x1c, 0x63, 0x27, 0x70, 0xbd, 0x86, 0xdb, 0x76, 0x5a, 0xe1, 0x5c, 0xff, + 0xb5, 0xbe, 0x1b, 0x23, 0x82, 0x29, 0xaa, 0xbe, 0xde, 0x56, 0x00, 0x1a, 0x53, 0x32, 0x09, 0x90, + 0xbb, 0x30, 0xbc, 0xb2, 0x55, 0x63, 0x7d, 0x0f, 0xe7, 0x06, 0x90, 0xd8, 0xec, 0xe9, 0x49, 0x65, + 0xaa, 0xe9, 0x85, 0x38, 0x34, 0x9d, 0x80, 0x02, 0x24, 0x1f, 0xc0, 0xd8, 0x4e, 0xe7, 0xa0, 0xe5, + 0x36, 0x76, 0x37, 0x6a, 0x0f, 0xe9, 0xf3, 0xb9, 0xc1, 0x6b, 0xa5, 0x1b, 0x63, 0x4b, 0xe4, 0xf4, + 0xa4, 0x32, 0xd1, 0xc6, 0xf2, 0x7a, 0xd4, 0x0a, 0xeb, 0x4f, 0xe8, 0x73, 0xdb, 0x80, 0x8b, 0xf1, + 0x6a, 0xb5, 0x35, 0x86, 0x37, 0x94, 0xc2, 0x0b, 0xc3, 0x23, 0x1d, 0x8f, 0xc3, 0x91, 0xdb, 0x00, + 0x36, 0x3d, 0xf6, 0x23, 0x5a, 0x6d, 0x36, 0x83, 0xb9, 0x61, 0xe4, 0xed, 0xe4, 0xe9, 0x49, 0x65, + 0x34, 0xc0, 0xd2, 0xba, 0xd3, 0x6c, 0x06, 0xb6, 0x06, 0x42, 0x96, 0x61, 0xd8, 0xf6, 0x39, 0x83, + 0xe7, 0x46, 0xae, 0x95, 0x6e, 0x8c, 0x2e, 0x4e, 0x8a, 0x65, 0x28, 0x8b, 0x97, 0x2e, 0x9e, 0x9e, + 0x54, 0x48, 0x20, 0x7e, 0xe9, 0xa3, 0x94, 0x10, 0xa4, 0x02, 0x43, 0x5b, 0xfe, 0xb2, 0xd3, 0x38, + 0xa2, 0x73, 0x80, 0x6b, 0x6f, 0xe0, 0xf4, 0xa4, 0x52, 0xfa, 0xb6, 0x2d, 0x4b, 0xc9, 0x53, 0x18, + 0x8d, 0x27, 0x2a, 0x9c, 0x1b, 0x45, 0xf6, 0xed, 0x9e, 0x9e, 0x54, 0x2e, 0x86, 0x58, 0x5c, 0x67, + 0x53, 0xaf, 0x71, 0xf0, 0x25, 0x56, 0x81, 0xde, 0xd0, 0x83, 0xfe, 0xe1, 0xb1, 0xf2, 0xb8, 0x7d, 0x65, 0xcf, 0x0b, 0x23, 0xe7, 0xa0, 0x45, 0xe3, 0xaa, 0x6a, 0x18, 0xd2, 0x80, 0xd1, 0x5b, 0x5f, 0xb1, 0xfe, 0x4f, 0x09, 0xc8, 0x76, 0x9b, 0x7a, 0xb5, 0xda, 0x1a, 0x5b, 0xf1, 0x72, 0xc1, 0xbf, 0x03, 0x23, 0x9c, 0xb5, 0x8c, 0xff, 0xbd, 0xc8, 0xff, 0x89, 0xd3, 0x93, 0x0a, 0x08, 0xfe, 0x33, @@ -14975,31 +14994,31 @@ var fileDescriptor_0ffcffcda38ae159 = []byte{ 0xf2, 0x06, 0x0c, 0x2d, 0xb7, 0x3a, 0x61, 0x44, 0x83, 0xb9, 0xfe, 0xf8, 0x33, 0x6a, 0xf0, 0x22, 0x5b, 0xd6, 0x91, 0x6f, 0x41, 0xff, 0x5e, 0x48, 0x83, 0xb9, 0x01, 0x9c, 0x91, 0x71, 0x31, 0x23, 0xac, 0x68, 0x7f, 0x71, 0x69, 0x98, 0x7d, 0x2b, 0x9d, 0x90, 0x06, 0x36, 0x02, 0x91, 0x5b, 0x30, - 0xc0, 0xd9, 0x3a, 0x88, 0x62, 0x64, 0x5c, 0xcd, 0x5f, 0x8b, 0xee, 0xbf, 0xbf, 0x34, 0x72, 0x7a, + 0xc0, 0xd9, 0x3a, 0x88, 0x62, 0x64, 0x5c, 0xcd, 0x5f, 0x8b, 0xee, 0x7f, 0xb0, 0x34, 0x72, 0x7a, 0x52, 0x19, 0x40, 0xf6, 0xda, 0x03, 0x92, 0x29, 0xa5, 0x72, 0xaf, 0x3d, 0xcc, 0x70, 0xd9, 0xc2, 0xb5, 0xbe, 0x05, 0xa3, 0xda, 0xf0, 0xc9, 0x02, 0xf4, 0xb3, 0xff, 0xf1, 0x33, 0x1f, 0xe3, 0x8d, - 0x31, 0xd1, 0x6e, 0x63, 0xa9, 0xf5, 0x0f, 0x26, 0xa1, 0xcc, 0x30, 0x0d, 0xd9, 0x60, 0xb0, 0xaa, + 0x31, 0xd1, 0x6e, 0x63, 0xa9, 0xf5, 0x0f, 0x27, 0xa1, 0xcc, 0x30, 0x0d, 0xd9, 0x60, 0xb0, 0xaa, 0xd4, 0x8d, 0x55, 0x37, 0x40, 0xb5, 0x2d, 0x84, 0xc4, 0xd8, 0xe9, 0x49, 0x65, 0xb8, 0x23, 0xca, - 0xe2, 0x9e, 0x91, 0x1a, 0x0c, 0xad, 0x7e, 0xd5, 0x76, 0x03, 0x1a, 0x22, 0x63, 0x47, 0x17, 0xe7, + 0xe2, 0x9e, 0x91, 0x1a, 0x0c, 0xad, 0x7e, 0xdd, 0x76, 0x03, 0x1a, 0x22, 0x63, 0x47, 0x17, 0xe7, 0x6f, 0xf1, 0xed, 0xec, 0x96, 0xdc, 0xce, 0x6e, 0xed, 0xca, 0xed, 0x6c, 0xe9, 0x8a, 0x10, 0x96, - 0x17, 0x28, 0x47, 0x89, 0x57, 0xd3, 0xef, 0xfe, 0x79, 0xa5, 0x64, 0x4b, 0x4a, 0xe4, 0x1d, 0x18, - 0xbc, 0xef, 0x07, 0xc7, 0x4e, 0x24, 0x66, 0x60, 0xfa, 0xf4, 0xa4, 0x52, 0x7e, 0x82, 0x25, 0xda, - 0xe2, 0x16, 0x30, 0xe4, 0x3e, 0x4c, 0xd8, 0x7e, 0x27, 0xa2, 0xbb, 0xbe, 0x9c, 0xb7, 0x01, 0xc4, + 0x17, 0x28, 0x47, 0x89, 0x57, 0xd3, 0xef, 0xfd, 0x45, 0xa5, 0x64, 0x4b, 0x4a, 0xe4, 0x1d, 0x18, + 0xbc, 0xe7, 0x07, 0xc7, 0x4e, 0x24, 0x66, 0x60, 0xfa, 0xf4, 0xa4, 0x52, 0x7e, 0x8c, 0x25, 0xda, + 0xe2, 0x16, 0x30, 0xe4, 0x1e, 0x4c, 0xd8, 0x7e, 0x27, 0xa2, 0xbb, 0xbe, 0x9c, 0xb7, 0x01, 0xc4, 0xba, 0x7a, 0x7a, 0x52, 0x99, 0x0f, 0x58, 0x4d, 0x3d, 0xf2, 0xeb, 0x62, 0x02, 0x35, 0xfc, 0x04, 0x16, 0x59, 0x85, 0x89, 0x2a, 0x4a, 0x57, 0xc1, 0x33, 0x3e, 0x5b, 0x23, 0x4b, 0x57, 0x4e, 0x4f, - 0x2a, 0x97, 0x1c, 0xac, 0xa9, 0x07, 0xa2, 0x4a, 0x27, 0x63, 0x22, 0x91, 0x2d, 0xb8, 0xf0, 0xa8, + 0x2a, 0x97, 0x1c, 0xac, 0xa9, 0x07, 0xa2, 0x4a, 0x27, 0x63, 0x22, 0x91, 0x2d, 0xb8, 0xf0, 0xb0, 0x73, 0x40, 0x03, 0x8f, 0x46, 0x34, 0x94, 0x3d, 0x1a, 0xc2, 0x1e, 0x5d, 0x3b, 0x3d, 0xa9, 0x2c, - 0x3c, 0x55, 0x95, 0x19, 0x7d, 0x4a, 0xa3, 0x12, 0x0a, 0x93, 0xa2, 0xa3, 0x2b, 0x4e, 0xe4, 0x1c, + 0x3c, 0x51, 0x95, 0x19, 0x7d, 0x4a, 0xa3, 0x12, 0x0a, 0x93, 0xa2, 0xa3, 0x2b, 0x4e, 0xe4, 0x1c, 0x38, 0x21, 0x45, 0xa1, 0x31, 0xba, 0x78, 0x91, 0xb3, 0xf8, 0x56, 0xa2, 0x76, 0xe9, 0x35, 0xc1, 0xe5, 0xcb, 0x6a, 0xec, 0x4d, 0x51, 0xa5, 0x35, 0x94, 0xa4, 0xc9, 0x64, 0xa7, 0xda, 0x17, 0x46, 0xb0, 0xb7, 0x28, 0x3b, 0xd5, 0xbe, 0xa0, 0x4b, 0x15, 0xb5, 0x43, 0x6c, 0xc0, 0xc0, 0x1e, 0xdb, 0x3d, 0x51, 0xa6, 0x4c, 0x2c, 0x5e, 0x17, 0x3d, 0x4a, 0xae, 0xbe, 0x5b, 0xec, 0x07, 0x02, 0xe2, - 0x77, 0x37, 0x89, 0x3b, 0xae, 0xbe, 0x57, 0x62, 0x1d, 0xf9, 0x0c, 0x40, 0xf4, 0xaa, 0xda, 0x6e, + 0x77, 0x37, 0x89, 0x3b, 0xae, 0xbe, 0x57, 0x62, 0x1d, 0xf9, 0x1c, 0x40, 0xf4, 0xaa, 0xda, 0x6e, 0xcf, 0x8d, 0xe2, 0x20, 0x2f, 0x98, 0x83, 0xac, 0xb6, 0xdb, 0x4b, 0x57, 0xc5, 0xf8, 0x2e, 0xaa, - 0xf1, 0x39, 0xed, 0xb6, 0x46, 0x4d, 0x23, 0x42, 0x3e, 0x85, 0x31, 0x14, 0x39, 0x72, 0x46, 0xc7, + 0xf1, 0x39, 0xed, 0xb6, 0x46, 0x4d, 0x23, 0x42, 0x3e, 0x83, 0x31, 0x14, 0x39, 0x72, 0x46, 0xc7, 0x70, 0x46, 0x2f, 0x9f, 0x9e, 0x54, 0x66, 0xd9, 0x07, 0x97, 0x35, 0x9f, 0x06, 0x02, 0xf9, 0x2d, - 0x98, 0x11, 0xe4, 0x1e, 0xbb, 0x5e, 0xd3, 0x7f, 0x1e, 0xae, 0xd0, 0xf0, 0x69, 0xe4, 0xb7, 0xe7, - 0xc6, 0xb1, 0x7b, 0x0b, 0x66, 0xf7, 0x4c, 0x98, 0xa5, 0x9b, 0xa2, 0xa7, 0x96, 0xea, 0xe9, 0x73, + 0x98, 0x11, 0xe4, 0x1e, 0xb9, 0x5e, 0xd3, 0x7f, 0x16, 0xae, 0xd0, 0xf0, 0x49, 0xe4, 0xb7, 0xe7, + 0xc6, 0xb1, 0x7b, 0x0b, 0x66, 0xf7, 0x4c, 0x98, 0xa5, 0x9b, 0xa2, 0xa7, 0x96, 0xea, 0xe9, 0x33, 0x0e, 0x50, 0x6f, 0x72, 0x08, 0xad, 0xd9, 0xec, 0x66, 0xc8, 0x3a, 0x4c, 0xee, 0x85, 0xd4, 0x18, 0xc3, 0x04, 0xca, 0xef, 0x0a, 0x9b, 0xe1, 0x4e, 0x48, 0xeb, 0x79, 0xe3, 0x48, 0xe2, 0x11, 0x1b, 0xc8, 0x4a, 0xe0, 0xb7, 0x13, 0x6b, 0x7c, 0x12, 0x39, 0x62, 0x9d, 0x9e, 0x54, 0xae, 0x36, 0x03, @@ -15007,795 +15026,799 @@ var fileDescriptor_0ffcffcda38ae159 = []byte{ 0xf2, 0x73, 0xc5, 0x75, 0x0e, 0x3d, 0x3f, 0x8c, 0xdc, 0xc6, 0xfa, 0xca, 0x5c, 0x19, 0xd7, 0xd0, 0x9b, 0x6c, 0xf4, 0x0d, 0x05, 0x51, 0x6f, 0x2a, 0x90, 0xba, 0xdb, 0xd4, 0x68, 0xe7, 0x50, 0x21, 0x3f, 0x84, 0x71, 0xd1, 0x16, 0x0d, 0x70, 0x69, 0x5e, 0x28, 0x5e, 0x68, 0x0a, 0x98, 0x6f, 0xc4, - 0x81, 0xfc, 0xc9, 0x55, 0x1b, 0x93, 0x16, 0xf9, 0x12, 0x46, 0x37, 0xef, 0x57, 0x6d, 0x1a, 0xb6, - 0x7d, 0x2f, 0xa4, 0x73, 0x04, 0x67, 0xf4, 0xaa, 0x20, 0xbd, 0x79, 0xbf, 0x5a, 0xed, 0x44, 0x47, - 0xd4, 0x8b, 0xdc, 0x86, 0x13, 0x51, 0x09, 0xb5, 0x34, 0xcf, 0x56, 0xde, 0xf1, 0x13, 0xa7, 0x1e, + 0x81, 0xfc, 0xc9, 0x55, 0x1b, 0x93, 0x16, 0xf9, 0x0a, 0x46, 0x37, 0xef, 0x55, 0x6d, 0x1a, 0xb6, + 0x7d, 0x2f, 0xa4, 0x73, 0x04, 0x67, 0xf4, 0xaa, 0x20, 0xbd, 0x79, 0xaf, 0x5a, 0xed, 0x44, 0x47, + 0xd4, 0x8b, 0xdc, 0x86, 0x13, 0x51, 0x09, 0xb5, 0x34, 0xcf, 0x56, 0xde, 0xf1, 0x63, 0xa7, 0x1e, 0x88, 0x12, 0x6d, 0x14, 0x3a, 0x39, 0x32, 0x0f, 0xc3, 0xb5, 0xda, 0xda, 0x86, 0x7f, 0xe8, 0x7a, 0x73, 0x53, 0x8c, 0x19, 0xb6, 0xfa, 0x4d, 0x0e, 0x60, 0x46, 0xd3, 0xdd, 0xeb, 0xec, 0x7f, 0x7a, - 0x4c, 0xbd, 0x68, 0x6e, 0x1a, 0xfb, 0xf0, 0x6d, 0x65, 0x7c, 0xdc, 0xd2, 0x55, 0xfc, 0x67, 0x77, - 0x6f, 0x55, 0xe3, 0x9f, 0x35, 0x89, 0x64, 0x4f, 0x3b, 0x19, 0xa5, 0x64, 0x17, 0x86, 0x76, 0x3a, - 0x41, 0xdb, 0x0f, 0xe9, 0xdc, 0x0c, 0x32, 0xed, 0xb5, 0xa2, 0xaf, 0x53, 0x80, 0x2e, 0xcd, 0x30, - 0xf1, 0xdc, 0xe6, 0x3f, 0xb4, 0x91, 0x49, 0x52, 0xd6, 0xe7, 0x30, 0xa2, 0x3e, 0x66, 0x32, 0x04, - 0x7d, 0xd5, 0x56, 0xab, 0xdc, 0xc3, 0xfe, 0xa8, 0xd5, 0xd6, 0xca, 0x25, 0x32, 0x01, 0x10, 0x4b, - 0xb0, 0x72, 0x2f, 0x19, 0x83, 0x61, 0x29, 0x61, 0xca, 0x7d, 0x08, 0xdf, 0x6e, 0x97, 0xfb, 0x09, - 0x81, 0x09, 0x73, 0x9d, 0x97, 0x07, 0xac, 0xaf, 0x60, 0x44, 0x4d, 0x0f, 0x99, 0x84, 0xd1, 0xbd, - 0xad, 0xda, 0xce, 0xea, 0xf2, 0xfa, 0xfd, 0xf5, 0xd5, 0x95, 0x72, 0x0f, 0xb9, 0x02, 0x97, 0x76, - 0x6b, 0x6b, 0xf5, 0x95, 0xa5, 0xfa, 0xc6, 0xf6, 0x72, 0x75, 0xa3, 0xbe, 0x63, 0x6f, 0x7f, 0xfe, - 0x45, 0x7d, 0x77, 0x6f, 0x6b, 0x6b, 0x75, 0xa3, 0x5c, 0x22, 0x73, 0x30, 0xcd, 0xaa, 0x1f, 0xed, - 0x2d, 0xad, 0xea, 0x00, 0xe5, 0x5e, 0x72, 0x1d, 0xae, 0x64, 0xd5, 0xd4, 0xd7, 0x56, 0xab, 0x2b, - 0x1b, 0xab, 0xb5, 0x5a, 0xb9, 0xcf, 0x6a, 0xc1, 0xa8, 0xc6, 0x02, 0xb2, 0x00, 0x73, 0xcb, 0xab, - 0xf6, 0x6e, 0x7d, 0x67, 0xcf, 0xde, 0xd9, 0xae, 0xad, 0xd6, 0xcd, 0x8e, 0x24, 0x6b, 0x37, 0xb6, - 0x1f, 0xac, 0x6f, 0xd5, 0x59, 0x51, 0xad, 0x5c, 0x62, 0xad, 0x19, 0xb5, 0xb5, 0xf5, 0xad, 0x07, - 0x1b, 0xab, 0xf5, 0xbd, 0xda, 0xaa, 0x00, 0xe9, 0xb5, 0x7e, 0xd6, 0x9b, 0x12, 0xe8, 0x64, 0x11, - 0x46, 0x6b, 0xdc, 0x9a, 0xc4, 0x45, 0xce, 0xd5, 0xf7, 0xf2, 0xe9, 0x49, 0x65, 0x4c, 0x18, 0x99, - 0x7c, 0xfd, 0xea, 0x40, 0x6c, 0x8f, 0xde, 0x61, 0xf3, 0xd9, 0xf0, 0x5b, 0xfa, 0x1e, 0xdd, 0x16, - 0x65, 0xb6, 0xaa, 0x25, 0x8b, 0xda, 0x6e, 0xce, 0x75, 0x79, 0xd4, 0x17, 0xe5, 0x6e, 0xae, 0x4b, - 0x76, 0xb5, 0xaf, 0x2f, 0xc6, 0x13, 0x27, 0x36, 0x61, 0xc4, 0xc9, 0xd8, 0x49, 0x14, 0x1c, 0x79, - 0x5b, 0x6a, 0x39, 0x5c, 0xf7, 0x46, 0x51, 0x9f, 0xd0, 0x1a, 0x85, 0x82, 0x63, 0x75, 0x72, 0xc4, - 0x2a, 0xf9, 0x38, 0xb9, 0x32, 0x04, 0x33, 0x90, 0x58, 0x42, 0x7a, 0xda, 0x09, 0x50, 0x52, 0x81, - 0x01, 0xfe, 0xbd, 0x71, 0x7e, 0xa0, 0x5e, 0xd5, 0x62, 0x05, 0x36, 0x2f, 0xb7, 0x7e, 0xb7, 0x4f, - 0xdf, 0x62, 0x98, 0x1e, 0xa5, 0xf1, 0x1b, 0xf5, 0x28, 0xe4, 0x33, 0x96, 0x92, 0x5b, 0x30, 0x52, - 0xa3, 0x61, 0x88, 0x1a, 0xa8, 0xa0, 0xc8, 0xa6, 0x04, 0x42, 0x5e, 0x58, 0x77, 0x9b, 0x73, 0x25, - 0x3b, 0x06, 0x61, 0x8a, 0x3d, 0xd7, 0xa0, 0x50, 0xb1, 0xef, 0x8b, 0x15, 0x7b, 0xa1, 0x63, 0x71, - 0xc5, 0x3e, 0x06, 0x61, 0xb3, 0x2e, 0x36, 0x79, 0xec, 0x45, 0x7f, 0x3c, 0xeb, 0x42, 0x31, 0x10, - 0xb3, 0xae, 0x01, 0x91, 0x8f, 0x00, 0xaa, 0x8f, 0x6b, 0xa8, 0x1f, 0xdb, 0x5b, 0x42, 0xd1, 0x41, - 0x91, 0xe4, 0x3c, 0x0f, 0xf9, 0x56, 0xe0, 0x04, 0xba, 0x05, 0xa0, 0x41, 0x93, 0x25, 0x18, 0xaf, - 0xfe, 0xb4, 0x13, 0xd0, 0xf5, 0x26, 0x93, 0x6a, 0x11, 0x37, 0x75, 0x46, 0x96, 0x16, 0x4e, 0x4f, - 0x2a, 0x73, 0x0e, 0xab, 0xa8, 0xbb, 0xa2, 0x46, 0x23, 0x60, 0xa2, 0x90, 0x6d, 0xb8, 0xf0, 0x60, - 0x79, 0x47, 0xac, 0xc3, 0x6a, 0xa3, 0xe1, 0x77, 0xbc, 0x48, 0x68, 0x37, 0xd7, 0x4f, 0x4f, 0x2a, - 0x57, 0x0e, 0x1b, 0xed, 0xba, 0x5c, 0xb3, 0x0e, 0xaf, 0xd6, 0xd5, 0x9b, 0x14, 0xae, 0xd5, 0x82, - 0x89, 0x07, 0x34, 0x62, 0xeb, 0x4e, 0xaa, 0xaa, 0xc5, 0xb3, 0xf2, 0x5d, 0x18, 0x7d, 0xec, 0x46, - 0x47, 0x35, 0xda, 0x08, 0x68, 0x24, 0x0d, 0x69, 0xe4, 0xc0, 0x73, 0x37, 0x3a, 0xaa, 0x87, 0xbc, - 0x5c, 0x17, 0xca, 0x1a, 0xb8, 0xb5, 0x0a, 0x93, 0xa2, 0x35, 0xa5, 0x19, 0x2f, 0x9a, 0x04, 0x4b, - 0x48, 0x10, 0x67, 0x41, 0x27, 0x68, 0x92, 0xf9, 0xe7, 0xbd, 0x30, 0xb3, 0x7c, 0xe4, 0x78, 0x87, - 0x74, 0xc7, 0x09, 0xc3, 0xe7, 0x7e, 0xd0, 0xd4, 0x3a, 0x8f, 0x66, 0x41, 0xaa, 0xf3, 0x68, 0x07, - 0x2c, 0xc2, 0xe8, 0x76, 0xab, 0x29, 0x71, 0x84, 0xc9, 0x82, 0x6d, 0xf9, 0xad, 0x66, 0xbd, 0x2d, - 0x69, 0xe9, 0x40, 0x0c, 0x67, 0x8b, 0x3e, 0x57, 0x38, 0x7d, 0x31, 0x8e, 0x47, 0x9f, 0x6b, 0x38, - 0x1a, 0x10, 0x59, 0x85, 0x0b, 0x35, 0xda, 0xf0, 0xbd, 0xe6, 0x7d, 0xa7, 0x11, 0xf9, 0xc1, 0xae, - 0xff, 0x94, 0x7a, 0x62, 0x7d, 0xa1, 0x56, 0x17, 0x62, 0x65, 0xfd, 0x09, 0xd6, 0xd6, 0x23, 0x56, - 0x6d, 0xa7, 0x31, 0xc8, 0x36, 0x0c, 0x3f, 0x16, 0xee, 0x18, 0x61, 0xe7, 0xbc, 0x71, 0x4b, 0xf9, - 0x67, 0x96, 0x03, 0x8a, 0x8b, 0xc2, 0x69, 0x29, 0x4b, 0x4d, 0x6d, 0x92, 0x28, 0x89, 0x24, 0xa4, - 0xad, 0x88, 0x58, 0x7b, 0x30, 0xbe, 0xd3, 0xea, 0x1c, 0xba, 0x1e, 0x93, 0x19, 0x35, 0xfa, 0x13, - 0xb2, 0x02, 0x10, 0x17, 0x08, 0x27, 0xcb, 0x94, 0xb0, 0x8e, 0xe2, 0x8a, 0xfd, 0x7b, 0xe2, 0x43, - 0xc2, 0x12, 0x54, 0x67, 0x6d, 0x0d, 0xcf, 0xfa, 0xdf, 0x7d, 0x40, 0xc4, 0x04, 0xe0, 0xfe, 0x57, - 0xa3, 0x11, 0xdb, 0x44, 0x2e, 0x42, 0xaf, 0xf2, 0x85, 0x0c, 0x9e, 0x9e, 0x54, 0x7a, 0xdd, 0xa6, - 0xdd, 0xbb, 0xbe, 0x42, 0xde, 0x85, 0x01, 0x04, 0x43, 0xfe, 0x4f, 0xa8, 0xf6, 0x74, 0x0a, 0x5c, - 0x76, 0xe0, 0xbe, 0x6c, 0x73, 0x60, 0xf2, 0x1e, 0x8c, 0xac, 0xd0, 0x16, 0x3d, 0x74, 0x22, 0x5f, - 0x7e, 0xdd, 0xdc, 0xbb, 0x20, 0x0b, 0xb5, 0x35, 0x17, 0x43, 0x32, 0x5b, 0xc6, 0xa6, 0x4e, 0xe8, - 0x7b, 0xba, 0x2d, 0x13, 0x60, 0x89, 0x6e, 0xcb, 0x70, 0x18, 0xf2, 0xfb, 0x25, 0x18, 0xad, 0x7a, - 0x9e, 0xb0, 0xda, 0x43, 0xc1, 0xf5, 0x99, 0x5b, 0xca, 0xcd, 0xb5, 0xe1, 0x1c, 0xd0, 0xd6, 0xbe, - 0xd3, 0xea, 0xd0, 0x70, 0xe9, 0x4b, 0xa6, 0x5e, 0xfe, 0xc7, 0x93, 0xca, 0xc7, 0xe7, 0xb0, 0xc3, - 0x63, 0x87, 0xd9, 0x6e, 0xe0, 0xb8, 0x51, 0x78, 0x7a, 0x52, 0x99, 0x71, 0xe2, 0x06, 0xf5, 0xef, - 0x46, 0xeb, 0x47, 0x2c, 0xda, 0x07, 0xbb, 0x89, 0x76, 0x72, 0x0c, 0x93, 0xd5, 0x30, 0xec, 0x1c, - 0xd3, 0x5a, 0xe4, 0x04, 0x11, 0x33, 0xfe, 0x50, 0x3e, 0x14, 0x5b, 0x86, 0x6f, 0xfd, 0xfc, 0xa4, - 0x52, 0x62, 0x1a, 0xad, 0x83, 0xa8, 0x4c, 0x23, 0x0a, 0xa2, 0x7a, 0xe4, 0xea, 0xbb, 0x13, 0xda, - 0x88, 0x49, 0xda, 0xd6, 0x6b, 0x4a, 0x6d, 0x58, 0x5f, 0xc9, 0x9b, 0x71, 0x6b, 0x19, 0x16, 0x1e, - 0xd0, 0xc8, 0xa6, 0x21, 0x8d, 0xe4, 0x37, 0x82, 0x2b, 0x3c, 0xf6, 0x9c, 0x0d, 0xe1, 0x6f, 0x85, - 0x8c, 0xd3, 0xcf, 0xbf, 0x0b, 0x59, 0x63, 0xfd, 0x95, 0x12, 0x54, 0x96, 0x03, 0xca, 0x95, 0xc1, - 0x1c, 0x42, 0xc5, 0xb2, 0x6b, 0x01, 0xfa, 0x77, 0x5f, 0xb4, 0xa5, 0x49, 0x8d, 0xb5, 0x6c, 0x52, - 0x6c, 0x2c, 0x3d, 0xa3, 0x7f, 0xc2, 0x7a, 0x02, 0x33, 0x36, 0xf5, 0xe8, 0x73, 0xe7, 0xa0, 0x45, - 0x0d, 0x13, 0xbf, 0x02, 0x03, 0xfc, 0x43, 0x4f, 0x0d, 0x81, 0x97, 0x9f, 0xcf, 0x5d, 0x62, 0x8d, - 0xc3, 0xe8, 0x8e, 0xeb, 0x1d, 0x0a, 0xea, 0xd6, 0x1f, 0xf6, 0xc1, 0x18, 0xff, 0x2d, 0xf4, 0xdb, - 0xc4, 0xee, 0x55, 0x3a, 0xcb, 0xee, 0xf5, 0x01, 0x8c, 0x33, 0xf1, 0x4f, 0x83, 0x7d, 0x1a, 0xb0, - 0x5d, 0x53, 0x70, 0x02, 0x75, 0xf5, 0x10, 0x2b, 0xea, 0xcf, 0x78, 0x8d, 0x6d, 0x02, 0x92, 0x0d, - 0x98, 0xe0, 0x05, 0xf7, 0xa9, 0x13, 0x75, 0x62, 0x77, 0xc3, 0xa4, 0x50, 0x6a, 0x65, 0x31, 0x5f, - 0x9a, 0x82, 0xd6, 0x13, 0x51, 0x68, 0x27, 0x70, 0xc9, 0xa7, 0x30, 0xb9, 0x13, 0xf8, 0x5f, 0xbd, - 0xd0, 0xf6, 0x6b, 0xfe, 0x75, 0x72, 0xf5, 0x97, 0x55, 0xd5, 0xf5, 0x5d, 0x3b, 0x09, 0x4d, 0xde, - 0x86, 0xe1, 0xf5, 0x70, 0xc9, 0x0f, 0x5c, 0xef, 0x10, 0xbf, 0xd1, 0x61, 0xee, 0x45, 0x75, 0xc3, - 0xfa, 0x01, 0x16, 0xda, 0xaa, 0x3a, 0xe1, 0xef, 0x1b, 0xea, 0xee, 0xef, 0xbb, 0x03, 0xb0, 0xe1, - 0x3b, 0xcd, 0x6a, 0xab, 0xb5, 0x5c, 0x0d, 0xd1, 0xd6, 0x17, 0xfb, 0x51, 0xcb, 0x77, 0x9a, 0x75, - 0xa7, 0xd5, 0xaa, 0x37, 0x9c, 0xd0, 0xd6, 0x60, 0x1e, 0xf6, 0x0f, 0x0f, 0x96, 0x87, 0xec, 0xc9, - 0x0d, 0xb7, 0x41, 0xbd, 0x90, 0x3e, 0x76, 0x02, 0xcf, 0xf5, 0x0e, 0x43, 0xeb, 0xdf, 0x4d, 0xc2, - 0xb0, 0x1a, 0xf2, 0x2d, 0x5d, 0x33, 0x17, 0xbb, 0x1c, 0xce, 0x7e, 0xec, 0x8f, 0xb0, 0x35, 0x08, - 0x72, 0x09, 0x75, 0x75, 0xb1, 0xbf, 0x0e, 0xb1, 0xd5, 0xe8, 0xb4, 0xdb, 0x36, 0x2b, 0x63, 0x5f, - 0xd9, 0xca, 0x12, 0xf2, 0x7f, 0x98, 0x7f, 0x65, 0xcd, 0x03, 0xbb, 0x77, 0x65, 0x89, 0x2d, 0xef, - 0xed, 0xf5, 0x95, 0x65, 0x64, 0xe5, 0x30, 0x5f, 0xde, 0xbe, 0xdb, 0x6c, 0xd8, 0x58, 0xca, 0x6a, - 0x6b, 0xd5, 0xcd, 0x0d, 0xc1, 0x2e, 0xac, 0x0d, 0x9d, 0xe3, 0x96, 0x8d, 0xa5, 0x4c, 0xef, 0xe3, - 0xa6, 0xe5, 0xb2, 0xef, 0x45, 0x81, 0xdf, 0x0a, 0x51, 0x39, 0x19, 0xe6, 0xd3, 0x29, 0x6c, 0xd2, - 0x86, 0xa8, 0xb2, 0x13, 0xa0, 0xe4, 0x31, 0xcc, 0x56, 0x9b, 0xcf, 0x1c, 0xaf, 0x41, 0x9b, 0xbc, - 0xe6, 0xb1, 0x1f, 0x3c, 0x7d, 0xd2, 0xf2, 0x9f, 0x87, 0xc8, 0xef, 0x61, 0xe1, 0xc2, 0x11, 0x20, - 0xd2, 0xc4, 0x7d, 0x2e, 0x81, 0xec, 0x3c, 0x6c, 0xf6, 0x49, 0x2d, 0xb7, 0xfc, 0x4e, 0x53, 0xcc, - 0x02, 0x7e, 0x52, 0x0d, 0x56, 0x60, 0xf3, 0x72, 0xc6, 0xa5, 0xb5, 0xda, 0x26, 0x3a, 0x4c, 0x04, - 0x97, 0x8e, 0xc2, 0x63, 0x9b, 0x95, 0x91, 0x37, 0x60, 0x48, 0xaa, 0xb0, 0xdc, 0xe3, 0x8a, 0x7e, - 0x44, 0xa9, 0xba, 0xca, 0x3a, 0xf6, 0x49, 0xd8, 0xb4, 0xe1, 0x3f, 0xa3, 0xc1, 0x8b, 0x65, 0xbf, - 0x49, 0xa5, 0x79, 0x2f, 0xcc, 0x57, 0x5e, 0x51, 0x6f, 0xb0, 0x1a, 0xdb, 0x04, 0x64, 0x0d, 0xf0, - 0x3d, 0x90, 0x19, 0xf1, 0xaa, 0x01, 0xbe, 0x47, 0x86, 0xb6, 0xac, 0x23, 0x2b, 0x70, 0xa1, 0xda, - 0x89, 0xfc, 0x63, 0x27, 0x72, 0x1b, 0x7b, 0xed, 0xc3, 0xc0, 0x61, 0x8d, 0x94, 0x11, 0x01, 0x55, - 0x7a, 0x47, 0x56, 0xd6, 0x3b, 0xa2, 0xd6, 0x4e, 0x23, 0x90, 0xf7, 0x61, 0x6c, 0x3d, 0xe4, 0x2e, - 0x1c, 0x27, 0xa4, 0x4d, 0xb4, 0xc3, 0x45, 0x2f, 0xdd, 0xb0, 0x8e, 0x0e, 0x9d, 0x3a, 0x33, 0x02, - 0x9a, 0xb6, 0x01, 0x47, 0x2c, 0x18, 0xac, 0x86, 0xa1, 0x1b, 0x46, 0x68, 0x5e, 0x0f, 0x2f, 0xc1, - 0xe9, 0x49, 0x65, 0xd0, 0xc1, 0x12, 0x5b, 0xd4, 0x90, 0xc7, 0x30, 0xba, 0x42, 0x99, 0x4e, 0xb8, - 0x1b, 0x74, 0xc2, 0x08, 0x8d, 0xe5, 0xd1, 0xc5, 0x4b, 0xe2, 0xc3, 0xd6, 0x6a, 0xc4, 0x5a, 0xe6, - 0xda, 0x5e, 0x13, 0xcb, 0xeb, 0x11, 0xab, 0xd0, 0x77, 0x2d, 0x0d, 0x9e, 0x29, 0xbc, 0x02, 0x67, - 0xcd, 0x6d, 0xb2, 0x4f, 0x75, 0x1a, 0xfb, 0x80, 0x0a, 0xaf, 0x90, 0x0d, 0xf5, 0x23, 0xac, 0xd1, - 0x15, 0x5e, 0x03, 0x85, 0x34, 0x52, 0x5e, 0xc1, 0x19, 0xc3, 0xf3, 0x63, 0x56, 0xca, 0x2e, 0x9e, - 0xd3, 0x67, 0xf8, 0x5d, 0x18, 0x5d, 0xee, 0x84, 0x91, 0x7f, 0xbc, 0x7b, 0x44, 0x8f, 0xe9, 0xdc, - 0xc5, 0x58, 0xad, 0x6f, 0x60, 0x71, 0x3d, 0x62, 0xe5, 0xfa, 0x30, 0x35, 0x70, 0xf2, 0x19, 0x10, - 0xa9, 0x9f, 0x3f, 0x60, 0xeb, 0xc3, 0x63, 0x6b, 0x79, 0x6e, 0x16, 0xc7, 0x8a, 0x4a, 0xb9, 0x54, - 0xeb, 0xeb, 0x87, 0xaa, 0x5a, 0xf7, 0xeb, 0xa4, 0x91, 0x59, 0x87, 0x78, 0x17, 0x1f, 0x04, 0x4e, - 0xfb, 0x68, 0x6e, 0x2e, 0xd6, 0xb2, 0xc5, 0xa0, 0x0e, 0x59, 0xb9, 0xa1, 0x2d, 0xc4, 0xe0, 0xa4, - 0x06, 0xc0, 0x7f, 0x6e, 0xb0, 0x89, 0xbf, 0x84, 0xfc, 0x9a, 0x33, 0xf8, 0xc5, 0x2a, 0x24, 0xaf, - 0x2e, 0xa1, 0x0e, 0xc2, 0xc9, 0xb6, 0x5c, 0x63, 0x36, 0x35, 0x32, 0xe4, 0x29, 0x94, 0xf9, 0xaf, - 0x4d, 0xdf, 0x73, 0x23, 0x2e, 0x7a, 0xe7, 0x0d, 0x97, 0x4d, 0xb2, 0x5a, 0x36, 0x80, 0xae, 0x32, - 0xd1, 0xc0, 0xb1, 0xaa, 0xd5, 0x9a, 0x49, 0x11, 0x26, 0x3b, 0x30, 0xba, 0x13, 0xf8, 0xcd, 0x4e, - 0x23, 0xc2, 0x0d, 0xfb, 0x32, 0x2a, 0x8a, 0x44, 0xb4, 0xa3, 0xd5, 0x70, 0x9e, 0xb4, 0x79, 0x41, - 0x9d, 0x6d, 0xe6, 0x3a, 0x4f, 0x34, 0x40, 0xb2, 0x04, 0x83, 0x3b, 0x7e, 0xcb, 0x6d, 0xbc, 0x98, - 0x5b, 0xc0, 0x4e, 0x4f, 0x4b, 0x62, 0x58, 0x28, 0xbb, 0x8a, 0xda, 0x61, 0x1b, 0x8b, 0x74, 0xed, - 0x90, 0x03, 0x91, 0x2a, 0x8c, 0x7f, 0xc6, 0x16, 0x8c, 0xeb, 0x7b, 0x9e, 0xe3, 0x06, 0x74, 0xee, - 0x0a, 0xce, 0x0b, 0xba, 0x33, 0x7f, 0xa2, 0x57, 0xe8, 0xcb, 0xd9, 0xc0, 0x20, 0xeb, 0x30, 0xb9, - 0x1e, 0xd6, 0xa2, 0xc0, 0x6d, 0xd3, 0x4d, 0xc7, 0x73, 0x0e, 0x69, 0x73, 0xee, 0x6a, 0xec, 0x4f, - 0x74, 0xc3, 0x7a, 0x88, 0x75, 0xf5, 0x63, 0x5e, 0xa9, 0xfb, 0x13, 0x13, 0x78, 0xe4, 0x73, 0x98, - 0x5e, 0xfd, 0x2a, 0x62, 0x2b, 0xa6, 0x55, 0xed, 0x34, 0xdd, 0xa8, 0x16, 0xf9, 0x81, 0x73, 0x48, - 0xe7, 0x2a, 0x48, 0xef, 0xf5, 0xd3, 0x93, 0xca, 0x35, 0x2a, 0xea, 0xeb, 0x0e, 0x03, 0xa8, 0x87, - 0x1c, 0x42, 0x3f, 0xc7, 0xcb, 0xa2, 0xc0, 0xb8, 0x5f, 0xeb, 0xb4, 0x99, 0xe2, 0x8a, 0xdc, 0xbf, - 0x66, 0x70, 0x5f, 0xab, 0xe1, 0xdc, 0x0f, 0x79, 0x41, 0x8a, 0xfb, 0x1a, 0x20, 0xb1, 0x81, 0x3c, - 0xf4, 0x5d, 0xaf, 0xda, 0x88, 0xdc, 0x67, 0x54, 0x98, 0xec, 0xe1, 0xdc, 0x75, 0xec, 0x29, 0xfa, - 0x3e, 0x7f, 0xdd, 0x77, 0xbd, 0xba, 0x83, 0xd5, 0x75, 0x61, 0xe0, 0x1b, 0xbe, 0xcf, 0x34, 0x36, - 0xf9, 0x11, 0x5c, 0xdc, 0xf4, 0x0f, 0xdc, 0x16, 0xe5, 0x22, 0x87, 0xb3, 0x05, 0xbd, 0x78, 0x16, - 0xd2, 0x45, 0xdf, 0xe7, 0x31, 0x42, 0xd4, 0x85, 0xb4, 0x3a, 0x56, 0x30, 0xba, 0xef, 0x33, 0x9b, - 0xca, 0xc3, 0xfe, 0xe1, 0xd1, 0xf2, 0x18, 0x3f, 0x1f, 0x7b, 0xd8, 0x3f, 0x3c, 0x5e, 0x9e, 0xb0, - 0xfe, 0xa0, 0x04, 0x24, 0x2d, 0x0f, 0xc9, 0x6d, 0x18, 0xa2, 0x1e, 0x53, 0x07, 0x9b, 0x62, 0x5f, - 0x47, 0x2d, 0x46, 0x14, 0xe9, 0x4e, 0x3c, 0x51, 0x44, 0x3e, 0x83, 0x29, 0xde, 0x21, 0x29, 0xb9, - 0x5b, 0xee, 0xb1, 0x1b, 0xe1, 0x5e, 0x3f, 0xc0, 0x25, 0x46, 0x46, 0xb5, 0x6e, 0xc6, 0x8b, 0x6a, - 0x94, 0xf3, 0x1b, 0xac, 0xd2, 0xea, 0xc0, 0x4c, 0xa6, 0x24, 0x24, 0x9b, 0x30, 0x73, 0xec, 0x7b, - 0xd1, 0x51, 0xeb, 0x85, 0x14, 0x84, 0xa2, 0xb5, 0x12, 0xb6, 0x86, 0x1f, 0x7f, 0x26, 0x80, 0x3d, - 0x25, 0x8a, 0x05, 0x45, 0x6c, 0xe7, 0x61, 0xff, 0x70, 0x6f, 0xb9, 0x4f, 0x8d, 0xc4, 0xb2, 0xe1, - 0x42, 0x4a, 0xa0, 0x90, 0xef, 0xc1, 0x58, 0x03, 0xf5, 0x74, 0xa3, 0x25, 0x2e, 0x4e, 0xb5, 0x72, - 0x7d, 0xad, 0xf0, 0x72, 0x3e, 0x94, 0x7f, 0x52, 0x82, 0xd9, 0x1c, 0x51, 0x72, 0x7e, 0x56, 0x7f, - 0x01, 0x17, 0x8f, 0x9d, 0xaf, 0xea, 0x01, 0x9a, 0x61, 0xf5, 0xc0, 0xf1, 0x12, 0xdc, 0xc6, 0xcf, - 0x24, 0x1b, 0x42, 0x8f, 0x01, 0x38, 0x76, 0xbe, 0xb2, 0x11, 0xc0, 0x66, 0xf5, 0xbc, 0x9f, 0xdf, - 0x87, 0x71, 0x43, 0x78, 0x9c, 0xbb, 0x73, 0xd6, 0x5d, 0xb8, 0xc0, 0x0c, 0xd5, 0x88, 0x9e, 0xd9, - 0xfd, 0x62, 0xed, 0x00, 0xd4, 0xe8, 0xb1, 0xd3, 0x3e, 0xf2, 0x99, 0x52, 0xb9, 0xa4, 0xff, 0x12, - 0xe6, 0x3b, 0x11, 0xe6, 0xb4, 0xaa, 0xd8, 0xbf, 0xc7, 0x15, 0xcd, 0x50, 0x41, 0xda, 0x1a, 0x96, - 0xf5, 0xc7, 0xbd, 0x40, 0xc4, 0xd7, 0x1f, 0x50, 0xe7, 0x58, 0x76, 0xe3, 0x43, 0x18, 0xe3, 0xc6, - 0x16, 0x2f, 0xc6, 0xee, 0x8c, 0x2e, 0x4e, 0x09, 0x21, 0xa0, 0x57, 0xad, 0xf5, 0xd8, 0x06, 0x28, - 0x43, 0xb5, 0x29, 0xb7, 0x12, 0x11, 0xb5, 0xd7, 0x40, 0xd5, 0xab, 0x18, 0xaa, 0xfe, 0x9b, 0x7c, - 0x0a, 0x13, 0xcb, 0xfe, 0x71, 0x9b, 0xf1, 0x44, 0x20, 0xf7, 0x09, 0x0b, 0x5c, 0xb4, 0x6b, 0x54, - 0xae, 0xf5, 0xd8, 0x09, 0x70, 0xb2, 0x05, 0x53, 0xf7, 0x5b, 0x9d, 0xf0, 0xa8, 0xea, 0x35, 0x97, - 0x5b, 0x7e, 0x28, 0xa9, 0xf4, 0x0b, 0x0b, 0x58, 0x18, 0x2b, 0x69, 0x88, 0xb5, 0x1e, 0x3b, 0x0b, - 0x91, 0xbc, 0x01, 0x03, 0xab, 0xcf, 0x98, 0x4c, 0x91, 0xe7, 0xcc, 0x22, 0x50, 0x65, 0xdb, 0xa3, - 0xdb, 0x4f, 0xd6, 0x7a, 0x6c, 0x5e, 0xbb, 0x34, 0x02, 0x43, 0xd2, 0x50, 0xbb, 0xcd, 0xf4, 0x3d, - 0xc5, 0xce, 0x5a, 0xe4, 0x44, 0x9d, 0x90, 0xcc, 0xc3, 0xf0, 0x5e, 0x9b, 0xd9, 0x0f, 0xd2, 0xc2, - 0xb5, 0xd5, 0x6f, 0xeb, 0x1d, 0x93, 0xd3, 0x64, 0x41, 0xf7, 0x7b, 0x72, 0xe0, 0xb8, 0xc0, 0x5a, - 0x33, 0x99, 0x5b, 0x0c, 0x6d, 0xb4, 0xdb, 0x9b, 0x68, 0xb7, 0x9c, 0xe4, 0xb5, 0x35, 0x93, 0xc9, - 0x3c, 0xeb, 0x73, 0xb8, 0xba, 0xd7, 0x0e, 0x69, 0x10, 0x55, 0xdb, 0xed, 0x96, 0xdb, 0xe0, 0xe7, - 0x1c, 0x68, 0xd0, 0xc9, 0xc5, 0xf2, 0x3e, 0x0c, 0xf2, 0x02, 0xb1, 0x4c, 0xe4, 0x1a, 0xac, 0xb6, - 0xdb, 0xc2, 0x8c, 0xbc, 0xc7, 0x35, 0x4f, 0x6e, 0x18, 0xda, 0x02, 0xda, 0xfa, 0xdd, 0x12, 0x5c, - 0xe5, 0x5f, 0x40, 0x2e, 0xe9, 0x6f, 0xc1, 0x08, 0xc6, 0x89, 0xb4, 0x9d, 0x86, 0xfc, 0x26, 0x78, - 0xc0, 0x8c, 0x2c, 0xb4, 0xe3, 0x7a, 0x2d, 0x02, 0xa7, 0x37, 0x3f, 0x02, 0x47, 0x7e, 0x60, 0x7d, - 0x99, 0x1f, 0xd8, 0x67, 0x60, 0x89, 0x1e, 0xb5, 0x5a, 0xa9, 0x4e, 0x85, 0x2f, 0xd3, 0x2b, 0xeb, - 0xbf, 0xf6, 0xc2, 0xec, 0x03, 0xea, 0xd1, 0xc0, 0xc1, 0x71, 0x1a, 0x0e, 0x0b, 0xfd, 0xa4, 0xbf, - 0x54, 0x78, 0xd2, 0x5f, 0x91, 0x2e, 0xa0, 0x5e, 0x74, 0x01, 0xa5, 0x82, 0x16, 0x98, 0x2d, 0xb4, - 0x67, 0xaf, 0x8b, 0x61, 0xa1, 0x2d, 0xd4, 0x09, 0x5c, 0x9b, 0x95, 0x91, 0xf5, 0x38, 0x4a, 0xa0, - 0xbf, 0xab, 0x2f, 0x68, 0x4a, 0x9c, 0x9a, 0x0e, 0x89, 0x28, 0x01, 0x33, 0x36, 0x60, 0x0b, 0x06, - 0xb9, 0xe7, 0x0a, 0x4f, 0x19, 0x46, 0x17, 0x6f, 0x8a, 0x6f, 0x2a, 0x67, 0x80, 0xc2, 0xcd, 0xb5, - 0xea, 0x45, 0xc1, 0x0b, 0xbe, 0x04, 0x22, 0x2c, 0xb0, 0x05, 0x95, 0xf9, 0xcf, 0x60, 0x54, 0x03, - 0x21, 0x65, 0xe8, 0x7b, 0x2a, 0x22, 0x24, 0x46, 0x6c, 0xf6, 0x27, 0x79, 0x07, 0x06, 0x9e, 0x39, - 0xad, 0x0e, 0x15, 0x62, 0xe4, 0x62, 0xec, 0x8b, 0x63, 0xea, 0x90, 0x77, 0xc8, 0x9d, 0x71, 0x36, - 0x07, 0xfa, 0xa8, 0xf7, 0x83, 0x92, 0xf5, 0x31, 0xcc, 0xa5, 0x7b, 0x23, 0xbc, 0x26, 0xdd, 0x9c, - 0x34, 0xd6, 0x0a, 0x4c, 0x3f, 0xa0, 0x11, 0x2e, 0x5c, 0xfc, 0x88, 0xb4, 0x00, 0x8e, 0xc4, 0x77, - 0x26, 0xa5, 0xaa, 0x3c, 0x8d, 0xd0, 0xbf, 0xd2, 0x1a, 0xcc, 0x24, 0xa8, 0x88, 0xf6, 0x3f, 0x82, - 0x21, 0x51, 0xa4, 0x24, 0xaa, 0x08, 0x69, 0xa3, 0x07, 0xa2, 0x62, 0x7f, 0x91, 0xaf, 0x5b, 0x41, - 0xd9, 0x96, 0x08, 0xd6, 0x11, 0x5c, 0x64, 0xdb, 0x6c, 0x4c, 0x55, 0x2d, 0xc7, 0xcb, 0x30, 0xd2, - 0x66, 0x8a, 0x42, 0xe8, 0xfe, 0x94, 0x2f, 0xa3, 0x01, 0x7b, 0x98, 0x15, 0xd4, 0xdc, 0x9f, 0x52, - 0x72, 0x05, 0x00, 0x2b, 0x71, 0x98, 0x42, 0x0a, 0x20, 0x38, 0xf7, 0x4a, 0x11, 0xc0, 0x48, 0x19, - 0xbe, 0x6e, 0x6c, 0xfc, 0xdb, 0x0a, 0x60, 0x36, 0xd5, 0x92, 0x18, 0xc0, 0x6d, 0x18, 0x96, 0xfa, - 0x59, 0xc2, 0x5f, 0xac, 0x8f, 0xc0, 0x56, 0x40, 0xe4, 0x4d, 0x98, 0xf4, 0xe8, 0x57, 0x51, 0x3d, - 0xd5, 0x87, 0x71, 0x56, 0xbc, 0x23, 0xfb, 0x61, 0xfd, 0x1a, 0xfa, 0x08, 0x6b, 0x9e, 0xff, 0xfc, - 0x49, 0xcb, 0x79, 0x4a, 0x53, 0x0d, 0x7f, 0x0f, 0x86, 0x6b, 0xdd, 0x1b, 0xe6, 0x9f, 0x8f, 0x6c, - 0xdc, 0x56, 0x28, 0x56, 0x0b, 0xe6, 0xd9, 0x90, 0x6a, 0xd5, 0xcd, 0x8d, 0xf5, 0xe6, 0xce, 0x37, - 0xcd, 0xc0, 0x67, 0x70, 0x39, 0xb3, 0xb5, 0x6f, 0x9a, 0x89, 0xff, 0xb2, 0x0f, 0x66, 0xf9, 0x66, - 0x92, 0x5e, 0xc1, 0x67, 0x17, 0x35, 0xbf, 0x92, 0x93, 0xb4, 0x3b, 0x19, 0x27, 0x69, 0x88, 0xa2, - 0x9f, 0xa4, 0x19, 0xe7, 0x67, 0x1f, 0x64, 0x9f, 0x9f, 0xa1, 0x13, 0xc4, 0x3c, 0x3f, 0x4b, 0x9e, - 0x9a, 0xad, 0xe6, 0x9f, 0x9a, 0xe1, 0x19, 0x42, 0xc6, 0xa9, 0x59, 0xc6, 0x59, 0x59, 0x32, 0x60, - 0x61, 0xf8, 0x95, 0x06, 0x2c, 0x70, 0xd5, 0xda, 0xda, 0x87, 0xb9, 0xf4, 0x04, 0xbe, 0x02, 0xe1, - 0xf1, 0x47, 0x25, 0xb8, 0x22, 0xd4, 0x8c, 0xc4, 0x27, 0x76, 0xfe, 0xf5, 0xf1, 0x1e, 0x8c, 0x09, - 0xdc, 0xdd, 0x78, 0x29, 0x2e, 0x5d, 0x38, 0x3d, 0xa9, 0x8c, 0x4b, 0x71, 0xc8, 0x65, 0xaa, 0x01, - 0x46, 0xde, 0x83, 0x61, 0xfc, 0x23, 0xf6, 0xb2, 0x33, 0xeb, 0x63, 0x04, 0x41, 0xeb, 0x49, 0x5f, - 0xbb, 0x02, 0xb5, 0xbe, 0x84, 0xab, 0x79, 0x1d, 0x7f, 0x05, 0x7c, 0xf9, 0x57, 0x25, 0xb8, 0x2c, - 0xc8, 0x1b, 0x1f, 0xeb, 0x4b, 0xc9, 0xfd, 0x73, 0x04, 0xee, 0x3d, 0x84, 0x51, 0xd6, 0xa0, 0xec, - 0x77, 0x9f, 0xd8, 0xdc, 0x84, 0xee, 0x1e, 0xd7, 0xac, 0x38, 0x91, 0x23, 0x42, 0x11, 0x9c, 0xe3, - 0x96, 0xb4, 0x8d, 0x6d, 0x1d, 0xd9, 0xfa, 0x01, 0x2c, 0x64, 0x0f, 0xe1, 0x15, 0xf0, 0xe7, 0x21, - 0xcc, 0x67, 0x88, 0xe5, 0x97, 0xdb, 0x15, 0xbf, 0x80, 0xcb, 0x99, 0xb4, 0x5e, 0x41, 0x37, 0xd7, - 0xd8, 0x9e, 0x1f, 0xbd, 0x82, 0x29, 0xb4, 0x1e, 0xc3, 0xa5, 0x0c, 0x4a, 0xaf, 0xa0, 0x8b, 0x0f, - 0x60, 0x56, 0xe9, 0xba, 0x5f, 0xab, 0x87, 0x9b, 0x70, 0x85, 0x13, 0x7a, 0x35, 0xb3, 0xf2, 0x08, - 0x2e, 0x0b, 0x72, 0xaf, 0x80, 0x7b, 0x6b, 0xb0, 0x10, 0x9b, 0xb4, 0x19, 0x9a, 0xca, 0x99, 0x85, - 0x8c, 0xb5, 0x01, 0xd7, 0x62, 0x4a, 0x39, 0xdb, 0xf6, 0xd9, 0xa9, 0x71, 0x85, 0x2c, 0x9e, 0xa5, - 0x57, 0x32, 0xa3, 0x8f, 0xe1, 0xa2, 0x41, 0xf4, 0x95, 0x29, 0x2b, 0xeb, 0x30, 0xc5, 0x09, 0x9b, - 0xca, 0xeb, 0xa2, 0xae, 0xbc, 0x8e, 0x2e, 0x5e, 0x88, 0x49, 0x62, 0xf1, 0xfe, 0xbd, 0x0c, 0x7d, - 0x76, 0x13, 0xf5, 0x59, 0x09, 0x12, 0xf7, 0xf0, 0x3d, 0x18, 0xe4, 0x25, 0xa2, 0x7f, 0x19, 0xc4, - 0xb8, 0xba, 0xce, 0xd1, 0x04, 0xb0, 0xf5, 0x23, 0xb8, 0xc2, 0x6d, 0xc1, 0xf8, 0xa8, 0xca, 0xb4, - 0xd7, 0xbe, 0x97, 0x30, 0x05, 0x2f, 0x09, 0xba, 0x49, 0xf8, 0x1c, 0x8b, 0xf0, 0x40, 0xae, 0xed, - 0x3c, 0xfa, 0x67, 0xba, 0x64, 0x21, 0x4d, 0xbc, 0xde, 0x4c, 0x13, 0xef, 0x35, 0xb8, 0xae, 0x4c, - 0xbc, 0x64, 0x33, 0x72, 0x69, 0x59, 0x3f, 0x80, 0xcb, 0x7c, 0xa0, 0x32, 0xbc, 0xca, 0xec, 0xc6, - 0xc7, 0x89, 0x61, 0xce, 0x8a, 0x61, 0x9a, 0xd0, 0x39, 0x83, 0xfc, 0x1b, 0x25, 0xf9, 0xc9, 0x65, - 0x13, 0xff, 0x55, 0xdb, 0xbc, 0x5b, 0x50, 0x51, 0x0c, 0x31, 0x7b, 0xf4, 0x72, 0x06, 0xef, 0x26, - 0xcc, 0xe8, 0x64, 0xdc, 0x06, 0xdd, 0xbf, 0x8b, 0x67, 0x08, 0xef, 0xb2, 0xcf, 0x02, 0x0b, 0xe4, - 0xb2, 0x9b, 0xcb, 0xe0, 0x1b, 0xc2, 0xdb, 0x0a, 0xd2, 0xaa, 0xc3, 0x42, 0x7a, 0x2a, 0xdc, 0x86, - 0x8c, 0xac, 0x25, 0x9f, 0xb2, 0x4f, 0x18, 0x4b, 0xc4, 0x64, 0xe4, 0x12, 0x95, 0xdf, 0x31, 0x47, - 0x97, 0x58, 0x96, 0x25, 0x45, 0x4d, 0x62, 0xfc, 0xac, 0x75, 0xb9, 0x1e, 0x7e, 0x13, 0x88, 0xac, - 0x5a, 0xae, 0xd9, 0xb2, 0xe9, 0x4b, 0xd0, 0xb7, 0x5c, 0xb3, 0x45, 0x40, 0x3f, 0xda, 0xdc, 0x8d, - 0x30, 0xb0, 0x59, 0x59, 0x52, 0x27, 0xee, 0x3d, 0x83, 0x4e, 0xfc, 0xb0, 0x7f, 0xb8, 0xaf, 0xdc, - 0x6f, 0x93, 0x9a, 0x7b, 0xe8, 0x3d, 0x76, 0xa3, 0x23, 0xd5, 0x60, 0xd5, 0xfa, 0x21, 0x4c, 0x19, - 0xcd, 0x8b, 0xaf, 0xb8, 0xf0, 0x26, 0x02, 0x79, 0x13, 0x86, 0x96, 0xab, 0x18, 0xa3, 0x80, 0x4e, - 0x83, 0x31, 0x2e, 0x6f, 0x1a, 0x4e, 0x1d, 0x2f, 0xa2, 0xd9, 0xb2, 0xd2, 0xfa, 0xc7, 0xfd, 0x1a, - 0x75, 0xed, 0x7e, 0x47, 0xc1, 0xe8, 0xee, 0x02, 0xf0, 0x15, 0xa2, 0x0d, 0x8e, 0x29, 0x80, 0xa3, - 0xe2, 0xe8, 0x9f, 0x8b, 0x64, 0x5b, 0x03, 0x3a, 0xeb, 0xfd, 0x0f, 0x11, 0x8b, 0xc9, 0x91, 0xe4, - 0xa5, 0x24, 0x15, 0x8b, 0x29, 0x48, 0x87, 0xb6, 0x0e, 0x44, 0x7e, 0x94, 0x0c, 0x53, 0x1e, 0xc0, - 0x23, 0x8b, 0xd7, 0xe5, 0x19, 0x66, 0x7a, 0x6c, 0xe7, 0x8b, 0x54, 0x7e, 0x0e, 0x33, 0x0c, 0xd7, - 0x7d, 0x82, 0xaa, 0xfd, 0xea, 0x57, 0x11, 0xf5, 0xb8, 0x6c, 0x1f, 0xc4, 0x76, 0xde, 0x28, 0x68, - 0x27, 0x06, 0x16, 0x1e, 0xf0, 0x98, 0x4e, 0x9d, 0xaa, 0x3a, 0x3b, 0x9b, 0x3e, 0x2e, 0x22, 0x7b, - 0x63, 0xd5, 0x6b, 0xb6, 0x7d, 0x57, 0x99, 0x2c, 0x7c, 0x11, 0x05, 0xad, 0x3a, 0x15, 0xe5, 0xb6, - 0x0e, 0x64, 0xbd, 0x59, 0x18, 0xc8, 0x3b, 0x0c, 0xfd, 0xbb, 0xcb, 0xbb, 0x1b, 0xe5, 0x92, 0x75, - 0x1b, 0x40, 0x6b, 0x09, 0x60, 0x70, 0x6b, 0xdb, 0xde, 0xac, 0x6e, 0x94, 0x7b, 0xc8, 0x0c, 0x5c, - 0x78, 0xbc, 0xbe, 0xb5, 0xb2, 0xfd, 0xb8, 0x56, 0xaf, 0x6d, 0x56, 0xed, 0xdd, 0xe5, 0xaa, 0xbd, - 0x52, 0x2e, 0x59, 0x5f, 0xc2, 0xb4, 0x39, 0xc2, 0x57, 0xba, 0x08, 0x23, 0x98, 0x52, 0xfa, 0xcc, - 0xc3, 0xc7, 0xbb, 0x5a, 0x78, 0xa0, 0x30, 0xbf, 0x92, 0x61, 0x2e, 0xc2, 0x50, 0x13, 0x9f, 0x91, - 0x06, 0x44, 0xde, 0xe6, 0x6a, 0x41, 0xf2, 0x8e, 0x1d, 0x53, 0x0b, 0xea, 0xb1, 0x5e, 0x80, 0xa2, - 0xef, 0x3b, 0x30, 0x6d, 0xb6, 0x7a, 0x56, 0x3f, 0xd1, 0xeb, 0x18, 0x37, 0xa9, 0x05, 0xf8, 0x13, - 0xa2, 0x3b, 0xee, 0x85, 0x64, 0xfd, 0x0e, 0x94, 0x05, 0x54, 0xbc, 0xf3, 0xbe, 0x26, 0x1d, 0x79, - 0xa5, 0x8c, 0xcb, 0x48, 0x32, 0x40, 0xd7, 0x87, 0x32, 0x93, 0x98, 0x02, 0x93, 0x37, 0x30, 0x0d, - 0x03, 0x1b, 0xf1, 0x81, 0x8a, 0xcd, 0x7f, 0x60, 0x9c, 0x7b, 0xe4, 0x04, 0x91, 0x0c, 0x2a, 0x1a, - 0xb1, 0xd5, 0x6f, 0xf2, 0x36, 0x0c, 0xde, 0x77, 0x5b, 0x91, 0x70, 0x4e, 0xc4, 0x9b, 0x3c, 0x23, - 0xcb, 0x2b, 0x6c, 0x01, 0x60, 0xd9, 0x70, 0x41, 0x6b, 0xf0, 0x1c, 0x5d, 0x25, 0x73, 0x30, 0xb4, - 0x45, 0xbf, 0xd2, 0xda, 0x97, 0x3f, 0xad, 0xf7, 0xe1, 0x82, 0x08, 0xd8, 0xd2, 0xd8, 0x74, 0x5d, - 0xdc, 0x6a, 0x2c, 0x19, 0x17, 0xb7, 0x04, 0x49, 0xac, 0x62, 0x78, 0x7b, 0xed, 0xe6, 0x4b, 0xe2, - 0xb1, 0x8d, 0xe2, 0x9c, 0x78, 0x6f, 0xc9, 0x73, 0x98, 0x6e, 0xd3, 0xf9, 0xc7, 0x25, 0x98, 0x4b, - 0xd8, 0xf9, 0xcb, 0x47, 0x4e, 0xab, 0x45, 0xbd, 0x43, 0x4a, 0x6e, 0x40, 0xff, 0xee, 0xf6, 0xee, - 0x8e, 0xf0, 0x53, 0xca, 0xf3, 0x65, 0x56, 0xa4, 0x60, 0x6c, 0x84, 0x20, 0x8f, 0xe0, 0x82, 0x0c, - 0xc9, 0x54, 0x55, 0x62, 0x86, 0xae, 0x14, 0x07, 0x78, 0xa6, 0xf1, 0xc8, 0xbb, 0xc2, 0x29, 0xf1, - 0x93, 0x8e, 0x1b, 0xd0, 0x26, 0xfa, 0x5e, 0xe2, 0xc3, 0x5a, 0xad, 0xc6, 0xd6, 0xc1, 0xf8, 0x0d, - 0x37, 0xeb, 0xf7, 0x4b, 0x30, 0x9b, 0xe3, 0xb7, 0x20, 0x6f, 0x1b, 0xc3, 0x99, 0xd2, 0x86, 0x23, - 0x41, 0xd6, 0x7a, 0xc4, 0x78, 0x96, 0xb5, 0x38, 0xd5, 0xbe, 0x73, 0xc4, 0xa9, 0xae, 0xf5, 0xc4, - 0xb1, 0xa9, 0x4b, 0x00, 0xc3, 0xb2, 0xdc, 0x9a, 0x84, 0x71, 0x83, 0x6f, 0x96, 0x05, 0x63, 0x7a, - 0xcb, 0x6c, 0x72, 0x96, 0xfd, 0xa6, 0x9a, 0x1c, 0xf6, 0xb7, 0xf5, 0xb7, 0x4b, 0x30, 0x8d, 0x43, - 0x3c, 0x74, 0x99, 0xe8, 0x8b, 0x39, 0xb4, 0x68, 0x8c, 0x64, 0xc1, 0x18, 0x49, 0x02, 0x56, 0x0d, - 0xe9, 0xa3, 0xd4, 0x90, 0x16, 0xb2, 0x86, 0x84, 0xcb, 0xdb, 0xf5, 0x3d, 0x63, 0x24, 0xda, 0x61, - 0xd0, 0x1f, 0x94, 0x60, 0x4a, 0xeb, 0x93, 0xea, 0xff, 0x5d, 0xa3, 0x4b, 0x97, 0x33, 0xba, 0x94, - 0x62, 0xf2, 0x52, 0xaa, 0x47, 0xaf, 0x17, 0xf5, 0xa8, 0x2b, 0x8f, 0xff, 0x4b, 0x09, 0x66, 0x32, - 0x79, 0x40, 0x2e, 0x32, 0xdd, 0xb6, 0x11, 0xd0, 0x48, 0xb0, 0x57, 0xfc, 0x62, 0xe5, 0xeb, 0x61, - 0xd8, 0xa1, 0x81, 0xf8, 0xce, 0xc5, 0x2f, 0xf2, 0x3a, 0x8c, 0xef, 0xd0, 0xc0, 0xf5, 0x9b, 0x3c, - 0x82, 0x99, 0x87, 0x06, 0x8e, 0xdb, 0x66, 0x21, 0x59, 0x80, 0x91, 0x6a, 0xeb, 0xd0, 0x0f, 0xdc, - 0xe8, 0x88, 0x9f, 0xc7, 0x8d, 0xd8, 0x71, 0x01, 0xa3, 0xbd, 0xe2, 0x1e, 0xf2, 0x63, 0x05, 0x86, - 0x2c, 0x7e, 0x31, 0xe1, 0x22, 0xfd, 0x75, 0x83, 0x5c, 0xb8, 0x48, 0x67, 0xdc, 0x45, 0x18, 0xfc, - 0xcc, 0xc6, 0x45, 0x80, 0x37, 0x7f, 0x6d, 0xf1, 0x8b, 0x4c, 0x60, 0x0c, 0x2a, 0xde, 0xeb, 0xc5, - 0xd8, 0xd3, 0x8f, 0x60, 0x3a, 0x8b, 0xaf, 0x59, 0x4b, 0x48, 0xe0, 0xf6, 0x2a, 0xdc, 0x1f, 0xc0, - 0x54, 0xb5, 0xd9, 0xdc, 0xbc, 0x5f, 0xe5, 0xa7, 0xfe, 0x62, 0x56, 0xf9, 0xc7, 0xc3, 0xfd, 0x75, - 0x42, 0x65, 0xeb, 0x5f, 0xf7, 0xdc, 0xc8, 0x9e, 0x5a, 0xfd, 0xca, 0x0d, 0x23, 0xd7, 0x3b, 0xd4, - 0xdc, 0x7a, 0xf6, 0xc5, 0x2d, 0xfa, 0x3c, 0x63, 0x09, 0xb0, 0xdd, 0xd4, 0xa4, 0xad, 0xdc, 0x80, - 0x49, 0xe2, 0xd3, 0x1a, 0xd9, 0x58, 0x94, 0xcc, 0x9a, 0x74, 0xe3, 0x8a, 0xbe, 0x6a, 0xe3, 0xa9, - 0xf5, 0x1d, 0xb8, 0xc8, 0x45, 0x5a, 0x51, 0xe7, 0x45, 0xb7, 0x75, 0x2f, 0xa4, 0xf5, 0x81, 0xf4, - 0x52, 0x14, 0xf6, 0xcc, 0x1e, 0x33, 0xfa, 0x82, 0x4d, 0xfe, 0x45, 0x09, 0xe6, 0x13, 0xa8, 0xb5, - 0x17, 0x5e, 0x43, 0xca, 0xd3, 0x37, 0x93, 0x31, 0xbe, 0xa8, 0x07, 0x70, 0xe7, 0x9f, 0xdb, 0x54, - 0x61, 0xbe, 0xe4, 0x36, 0x00, 0x47, 0xd6, 0xb6, 0x6f, 0x74, 0x3e, 0x8b, 0x18, 0x0e, 0xdc, 0xc0, - 0x35, 0x10, 0xd2, 0x81, 0x2c, 0xbe, 0x8b, 0x6f, 0xa4, 0x9b, 0x77, 0x16, 0x6f, 0xbb, 0x53, 0x81, - 0x5e, 0xcf, 0x71, 0xd3, 0x66, 0xd1, 0xb7, 0xfe, 0x66, 0x1f, 0xcc, 0xea, 0x13, 0xf8, 0x32, 0x63, - 0xdd, 0x81, 0xd1, 0x65, 0xdf, 0x8b, 0xe8, 0x57, 0x91, 0x76, 0x97, 0x99, 0xa8, 0xb3, 0x6e, 0x55, - 0x23, 0x54, 0x47, 0x5e, 0x50, 0x67, 0x7a, 0x8c, 0x11, 0x8b, 0x16, 0x03, 0x92, 0x65, 0x18, 0xdf, - 0xa2, 0xcf, 0x53, 0x0c, 0xc4, 0x78, 0x38, 0x8f, 0x3e, 0xaf, 0x6b, 0x4c, 0xd4, 0x83, 0x94, 0x0c, - 0x1c, 0x72, 0x00, 0x13, 0x72, 0x71, 0x19, 0xcc, 0x9c, 0xd7, 0x77, 0x15, 0x73, 0x39, 0xf3, 0xdb, - 0xbe, 0xac, 0x85, 0x1c, 0x1e, 0x26, 0x28, 0xb2, 0xa1, 0xf3, 0x16, 0xf9, 0x05, 0x56, 0x73, 0xdb, - 0xd2, 0x6a, 0x8c, 0x68, 0xc3, 0xe4, 0xc5, 0x55, 0x9d, 0x84, 0xb5, 0x03, 0x73, 0xe9, 0xf9, 0x10, - 0xad, 0xbd, 0x0b, 0x83, 0xbc, 0x54, 0xa8, 0x01, 0xf2, 0x21, 0x09, 0x05, 0xcd, 0xed, 0x74, 0xde, - 0x8c, 0x2d, 0x60, 0xad, 0x35, 0xf4, 0x9d, 0x28, 0x18, 0xa5, 0x88, 0xdd, 0x49, 0x4e, 0x2f, 0x06, - 0x72, 0xca, 0xe9, 0xd5, 0x23, 0x3d, 0x64, 0xec, 0xfa, 0x32, 0xba, 0x9f, 0x74, 0x4a, 0xa2, 0x63, - 0x37, 0x61, 0x48, 0x14, 0x25, 0x9e, 0xb8, 0x88, 0x3f, 0x3f, 0x09, 0x60, 0x7d, 0x04, 0x97, 0xd0, - 0x17, 0xe6, 0x7a, 0x87, 0x2d, 0xba, 0x17, 0x1a, 0xd1, 0xe7, 0xdd, 0x3e, 0xeb, 0xef, 0xc2, 0x7c, - 0x16, 0x6e, 0xd7, 0x2f, 0x9b, 0x5f, 0x69, 0xff, 0xb3, 0x5e, 0x98, 0x5e, 0x0f, 0x75, 0x65, 0x42, - 0x70, 0xe2, 0x56, 0xd6, 0x65, 0x6b, 0xe4, 0xc9, 0x5a, 0x4f, 0xd6, 0x65, 0xea, 0x77, 0xb5, 0x6b, - 0x6d, 0xbd, 0x45, 0xb7, 0xa8, 0xd9, 0xb6, 0xa5, 0x2e, 0xb6, 0xbd, 0x09, 0xfd, 0x5b, 0x4c, 0x54, - 0xf7, 0x89, 0xb9, 0xe3, 0x18, 0xac, 0x08, 0xaf, 0x95, 0xb1, 0x2d, 0x92, 0xfd, 0x20, 0xf7, 0x53, - 0x97, 0xd7, 0xfa, 0xbb, 0xdf, 0x12, 0x5e, 0xeb, 0x49, 0xdd, 0x63, 0x7b, 0x1f, 0x46, 0xab, 0xcd, - 0x63, 0x1e, 0x70, 0xe6, 0x7b, 0x89, 0xcf, 0x52, 0xab, 0x59, 0xeb, 0xb1, 0x75, 0x40, 0x66, 0xe1, - 0x56, 0xdb, 0x6d, 0xdc, 0xa8, 0xb2, 0x6e, 0x4e, 0xaf, 0xf5, 0x60, 0xfc, 0xf6, 0xd2, 0x30, 0x0c, - 0xee, 0x3a, 0xc1, 0x21, 0x8d, 0xac, 0x1f, 0xc0, 0xbc, 0x08, 0x13, 0xe1, 0x9e, 0x3f, 0x0c, 0x26, - 0x09, 0xe3, 0x48, 0xa0, 0xa2, 0xd0, 0x8e, 0xab, 0x00, 0xa8, 0xe7, 0xaf, 0x7b, 0x4d, 0xfa, 0x15, - 0x8f, 0x66, 0xb2, 0xb5, 0x12, 0xeb, 0x3d, 0x18, 0x51, 0x1c, 0x42, 0x65, 0x56, 0xdb, 0xec, 0x90, - 0x5b, 0xd3, 0xc6, 0x6d, 0x3d, 0x79, 0x45, 0xef, 0x92, 0x31, 0x76, 0xf1, 0x12, 0x02, 0xd7, 0x7e, - 0x5d, 0x98, 0x49, 0x2c, 0x82, 0xf8, 0xaa, 0xad, 0xd2, 0x3f, 0x31, 0xf2, 0xc9, 0x56, 0xbf, 0x93, - 0xea, 0x69, 0xef, 0x99, 0xd4, 0x53, 0xeb, 0x9f, 0xf5, 0xa2, 0xe1, 0x94, 0xe2, 0x47, 0xc2, 0x07, - 0xa5, 0xfb, 0xc1, 0x96, 0x60, 0x04, 0x47, 0xbf, 0x22, 0x6f, 0x16, 0x15, 0x47, 0x39, 0x0c, 0xff, - 0xfc, 0xa4, 0xd2, 0x83, 0xa1, 0x0d, 0x31, 0x1a, 0xf9, 0x04, 0x86, 0x56, 0xbd, 0x26, 0x52, 0xe8, - 0x3b, 0x07, 0x05, 0x89, 0xc4, 0xe6, 0x04, 0xbb, 0xbc, 0xcb, 0x3e, 0x61, 0xee, 0xba, 0xb0, 0xb5, - 0x92, 0xd8, 0x82, 0x1b, 0xc8, 0xb3, 0xe0, 0x06, 0x13, 0x16, 0x9c, 0x05, 0x03, 0xdb, 0x41, 0x53, - 0xbc, 0x60, 0x30, 0xb1, 0x38, 0x26, 0x18, 0x87, 0x65, 0x36, 0xaf, 0xb2, 0xfe, 0x47, 0x09, 0x66, - 0x1f, 0xd0, 0x28, 0x73, 0x0d, 0x19, 0x5c, 0x29, 0x7d, 0x6d, 0xae, 0xf4, 0xbe, 0x0c, 0x57, 0xd4, - 0xa8, 0xfb, 0xf2, 0x46, 0xdd, 0x9f, 0x37, 0xea, 0x81, 0xfc, 0x51, 0x3f, 0x80, 0x41, 0x3e, 0x54, - 0x66, 0xa5, 0xae, 0x47, 0xf4, 0x38, 0xb6, 0x52, 0xf5, 0x18, 0x2d, 0x9b, 0xd7, 0x31, 0x45, 0x72, - 0xc3, 0x09, 0x75, 0x2b, 0x55, 0xfc, 0xb4, 0x7e, 0x8c, 0x77, 0x12, 0x37, 0xfc, 0xc6, 0x53, 0xcd, - 0xdb, 0x39, 0xc4, 0xbf, 0xd0, 0xa4, 0x77, 0x9c, 0x41, 0xf1, 0x1a, 0x5b, 0x42, 0x90, 0x6b, 0x30, - 0xba, 0xee, 0xdd, 0xf7, 0x83, 0x06, 0xdd, 0xf6, 0x5a, 0x9c, 0xfa, 0xb0, 0xad, 0x17, 0x09, 0x2f, - 0x80, 0x68, 0x21, 0x36, 0xad, 0xb1, 0x20, 0x61, 0x5a, 0xb3, 0xb2, 0xfd, 0x45, 0x9b, 0xd7, 0x09, - 0x27, 0x03, 0xfb, 0xbb, 0xc8, 0x2a, 0x55, 0xe6, 0x6b, 0x37, 0xc0, 0x03, 0xb8, 0x64, 0xd3, 0x76, - 0xcb, 0x61, 0x3a, 0xdd, 0xb1, 0xcf, 0xe1, 0xd5, 0x98, 0xaf, 0x65, 0xdc, 0x27, 0x32, 0x4f, 0xec, - 0x55, 0x97, 0x7b, 0x0b, 0xba, 0x7c, 0x0c, 0xd7, 0x1f, 0xd0, 0xc8, 0x14, 0xa8, 0xb1, 0x2f, 0x55, - 0x0c, 0x7e, 0x0d, 0x86, 0x43, 0xd3, 0x0f, 0x7c, 0x55, 0x1e, 0x3f, 0x64, 0x21, 0xee, 0xdf, 0x93, - 0x27, 0x25, 0x82, 0x8e, 0xfa, 0xcb, 0xfa, 0x14, 0x2a, 0x79, 0xcd, 0x9d, 0x2d, 0xa0, 0xd2, 0x85, - 0x6b, 0xf9, 0x04, 0x44, 0x77, 0x57, 0x41, 0xfa, 0x8c, 0xc5, 0x27, 0xd4, 0xad, 0xb7, 0xa6, 0x9b, - 0x59, 0xfc, 0x61, 0x2d, 0xc9, 0xd0, 0xb2, 0xaf, 0xd1, 0xdd, 0x3a, 0x1e, 0xc7, 0x9a, 0x04, 0x62, - 0xbe, 0x56, 0x61, 0x58, 0x96, 0x09, 0xbe, 0xce, 0x66, 0xf6, 0x54, 0x32, 0xb4, 0x29, 0x09, 0x28, - 0x34, 0xeb, 0xc7, 0xf2, 0x68, 0xc2, 0xc4, 0x38, 0xdb, 0x05, 0xbb, 0xb3, 0x9c, 0x45, 0x58, 0x3e, - 0x5c, 0x32, 0x69, 0xeb, 0x2e, 0xe7, 0xb2, 0xe6, 0x72, 0xe6, 0x9e, 0xe6, 0x6b, 0xa6, 0x0b, 0xb4, - 0x57, 0xac, 0xcb, 0xb8, 0x88, 0x5c, 0xd5, 0x1d, 0xcb, 0x63, 0xe9, 0x1b, 0x7b, 0x77, 0x60, 0x3e, - 0xab, 0x41, 0xcd, 0x0e, 0x54, 0xde, 0x4b, 0xa1, 0xef, 0xfc, 0x76, 0x09, 0x2c, 0x23, 0x7e, 0x07, - 0x67, 0x68, 0x27, 0xf0, 0x9f, 0xb9, 0x4d, 0xed, 0x50, 0xe4, 0x6d, 0xc3, 0x21, 0xc7, 0xef, 0x4a, - 0x25, 0x43, 0x87, 0x85, 0xb4, 0xbb, 0x93, 0x70, 0x92, 0x71, 0x95, 0x11, 0x63, 0x7a, 0x9e, 0x52, - 0xfd, 0xae, 0x81, 0x72, 0x9e, 0xfd, 0xaf, 0x12, 0xbc, 0x56, 0xd8, 0x07, 0xd1, 0xff, 0x03, 0x28, - 0x27, 0xeb, 0xc4, 0xdc, 0x57, 0xb4, 0x68, 0x82, 0x34, 0x85, 0xfd, 0xbb, 0x3c, 0x3e, 0x59, 0xc6, - 0xbd, 0xb4, 0x15, 0xe5, 0x14, 0xbd, 0xf3, 0xf7, 0x9e, 0x7c, 0x08, 0xb0, 0xeb, 0x47, 0x4e, 0x6b, - 0x19, 0x4d, 0xf7, 0xbe, 0x38, 0xd6, 0x3c, 0x62, 0xa5, 0xf5, 0xe4, 0xc5, 0x74, 0x0d, 0xd8, 0xfa, - 0x3e, 0x7e, 0x91, 0xd9, 0x9d, 0x3e, 0xdb, 0x47, 0xb2, 0x0c, 0xaf, 0x25, 0x4e, 0xb4, 0x5f, 0x82, - 0x48, 0x04, 0x33, 0x8c, 0xfd, 0x4c, 0x6b, 0x7e, 0x10, 0xf8, 0x9d, 0xf6, 0xaf, 0x66, 0xd6, 0xff, - 0x6d, 0x89, 0x07, 0xf9, 0xe9, 0xcd, 0x8a, 0x89, 0x5e, 0x06, 0x88, 0x4b, 0x13, 0xc1, 0xde, 0xaa, - 0x62, 0xff, 0x2e, 0x37, 0x96, 0xd1, 0xd7, 0x7d, 0xc8, 0x09, 0x68, 0x68, 0xbf, 0xda, 0x99, 0xbc, - 0x87, 0xc7, 0xd8, 0xaa, 0xf5, 0xb3, 0xf1, 0xfd, 0x7d, 0xe9, 0xb9, 0x38, 0x27, 0xde, 0x11, 0x4c, - 0xb3, 0x6f, 0x97, 0x59, 0xf9, 0x7e, 0xe0, 0x46, 0xf2, 0xda, 0x02, 0xd9, 0x11, 0x97, 0x7e, 0x39, - 0xd6, 0x77, 0x7f, 0x79, 0x52, 0xf9, 0xe0, 0x3c, 0xef, 0xa6, 0x49, 0x9a, 0xbb, 0xea, 0xa2, 0xb0, - 0x35, 0x0b, 0x7d, 0xcb, 0xf6, 0x06, 0x8a, 0x2a, 0x7b, 0x43, 0x89, 0x2a, 0x7b, 0xc3, 0xfa, 0x6f, - 0xbd, 0x50, 0xe1, 0xcf, 0x12, 0x60, 0xf4, 0x43, 0xec, 0x6f, 0xd0, 0xc2, 0x29, 0xce, 0xea, 0x1a, - 0x48, 0x3c, 0x3b, 0xd0, 0x7b, 0x96, 0x67, 0x07, 0x7e, 0x03, 0x72, 0x9c, 0x4d, 0x67, 0xb0, 0xdf, - 0xdf, 0x3a, 0x3d, 0xa9, 0xbc, 0x16, 0xdb, 0xef, 0xbc, 0x36, 0xcb, 0x90, 0xcf, 0x69, 0x22, 0xed, - 0x79, 0xe8, 0x7f, 0x09, 0xcf, 0xc3, 0x1d, 0x18, 0x42, 0x33, 0x64, 0x7d, 0x47, 0x44, 0x04, 0xe2, - 0xf2, 0xc4, 0x37, 0x44, 0xea, 0xae, 0xfe, 0x5c, 0x93, 0x04, 0xb3, 0xfe, 0x4e, 0x2f, 0x5c, 0xcb, - 0xe7, 0xb9, 0xe8, 0xdb, 0x0a, 0x40, 0x1c, 0x77, 0x51, 0x14, 0xe7, 0x81, 0xdf, 0xce, 0x73, 0x7a, - 0xa0, 0xe2, 0xac, 0x34, 0x3c, 0xa6, 0xb5, 0xc8, 0x1b, 0xa0, 0x09, 0x27, 0xbf, 0x71, 0x31, 0x54, - 0xbc, 0x06, 0x28, 0x8a, 0x8c, 0xd7, 0x00, 0x45, 0x19, 0x39, 0x80, 0xd9, 0x9d, 0xc0, 0x7d, 0xe6, - 0x44, 0xf4, 0x11, 0x7d, 0xc1, 0x2f, 0x91, 0xac, 0x8a, 0x9b, 0x23, 0xfc, 0x5a, 0xef, 0x8d, 0xd3, - 0x93, 0xca, 0xeb, 0x6d, 0x0e, 0xc2, 0x3e, 0xcc, 0x3a, 0xbf, 0x93, 0x56, 0x4f, 0x5f, 0x26, 0xc9, - 0x23, 0x64, 0xfd, 0x9b, 0x12, 0x5c, 0x46, 0x85, 0x5a, 0x38, 0x4c, 0x65, 0xe3, 0x2f, 0x15, 0xee, - 0xa7, 0x0f, 0x50, 0xac, 0x45, 0x0c, 0xf7, 0x33, 0x6e, 0xc8, 0xda, 0x06, 0x18, 0x59, 0x87, 0x51, - 0xf1, 0x1b, 0xbf, 0xbf, 0x3e, 0x54, 0xe5, 0x67, 0x34, 0x81, 0x85, 0x4b, 0x9d, 0x3b, 0x79, 0x70, - 0x61, 0x0b, 0x62, 0x78, 0x91, 0xcc, 0xd6, 0x71, 0xad, 0x5f, 0xf4, 0xc2, 0xc2, 0x3e, 0x0d, 0xdc, - 0x27, 0x2f, 0x72, 0x06, 0xb3, 0x0d, 0xd3, 0xb2, 0x88, 0x3f, 0x4d, 0x60, 0x7c, 0x62, 0xfc, 0xbd, - 0x31, 0xd9, 0x55, 0xf1, 0xb6, 0x81, 0xfc, 0xe2, 0x32, 0x11, 0xcf, 0x11, 0xc8, 0xf7, 0x2e, 0x0c, - 0x27, 0x1e, 0x07, 0xc1, 0xf9, 0x97, 0x5f, 0x68, 0x3c, 0x55, 0x6b, 0x3d, 0xb6, 0x82, 0x24, 0xbf, - 0x93, 0x7f, 0xf2, 0x22, 0x9c, 0x16, 0xdd, 0x3c, 0x97, 0xf8, 0xc1, 0xb2, 0x8f, 0xd5, 0xd1, 0x6a, - 0x33, 0x3e, 0xd8, 0xb5, 0x1e, 0x3b, 0xaf, 0xa5, 0xa5, 0x51, 0x18, 0xa9, 0xe2, 0x69, 0x12, 0xb3, - 0xb9, 0xff, 0x67, 0x2f, 0x5c, 0x95, 0x17, 0x42, 0x72, 0xd8, 0xfc, 0x39, 0xcc, 0xca, 0xa2, 0x6a, - 0x9b, 0x29, 0x0c, 0xb4, 0x69, 0x72, 0x9a, 0xbf, 0xf9, 0x27, 0x39, 0xed, 0x08, 0x98, 0x98, 0xd9, - 0x79, 0xe8, 0xaf, 0xc6, 0x6f, 0xf9, 0x49, 0xd6, 0x53, 0x2d, 0xe8, 0x3f, 0xd4, 0x65, 0xa6, 0xc1, - 0x1a, 0x43, 0x7e, 0x36, 0x53, 0x7e, 0xcf, 0xfe, 0xaf, 0xeb, 0xf7, 0x5c, 0xeb, 0x49, 0x7a, 0x3e, - 0x97, 0x26, 0x60, 0x6c, 0x8b, 0x3e, 0x8f, 0xf9, 0xfe, 0x57, 0x4b, 0x89, 0x2b, 0xe8, 0x4c, 0xc3, - 0xe0, 0x77, 0xd1, 0x4b, 0xf1, 0x6b, 0x1f, 0x78, 0x05, 0x5d, 0xd7, 0x30, 0x38, 0xe8, 0x3a, 0x0c, - 0xf1, 0x23, 0xd6, 0xe6, 0x19, 0x6c, 0x73, 0x75, 0xb3, 0x83, 0x5f, 0xb7, 0x6b, 0x72, 0x33, 0x5d, - 0xe0, 0x5b, 0x8f, 0xe0, 0xba, 0x88, 0x3c, 0x36, 0x27, 0x1f, 0x1b, 0x3a, 0xe7, 0xf6, 0x65, 0x39, - 0x70, 0xf5, 0x01, 0x4d, 0x8a, 0x1e, 0xe3, 0xe6, 0xcb, 0xa7, 0x30, 0x69, 0x94, 0x2b, 0x8a, 0xa8, - 0x95, 0xaa, 0x35, 0xa4, 0x48, 0x27, 0xa1, 0xad, 0x6b, 0x59, 0x4d, 0xe8, 0x9d, 0xb5, 0x28, 0x3e, - 0xde, 0x17, 0xc4, 0x87, 0x63, 0xe1, 0x39, 0xa4, 0xde, 0x0d, 0xed, 0xbb, 0xe6, 0x12, 0x8f, 0xbf, - 0xef, 0x25, 0x77, 0x5e, 0x55, 0x6b, 0x8d, 0x1b, 0x5e, 0x7c, 0x6b, 0x02, 0xc6, 0x64, 0x55, 0x8b, - 0x86, 0xa1, 0xf5, 0xb3, 0x01, 0xb0, 0x04, 0x63, 0xb3, 0xce, 0x8d, 0x25, 0x3f, 0x0e, 0x52, 0x9d, - 0x15, 0x1b, 0xd5, 0x45, 0xfd, 0xdd, 0xb8, 0xb8, 0x96, 0xaf, 0x3c, 0xd4, 0xf3, 0x1a, 0x71, 0xa9, - 0xb1, 0xf2, 0x52, 0xa3, 0xff, 0x61, 0x8e, 0x98, 0xe4, 0x1f, 0xdb, 0x1b, 0xa7, 0x27, 0x95, 0xeb, - 0x39, 0x62, 0xd2, 0xa0, 0x9b, 0x2d, 0x32, 0x6d, 0xf3, 0x30, 0xa3, 0xef, 0x65, 0x0e, 0x33, 0xd8, - 0x17, 0xa9, 0x1f, 0x67, 0xec, 0x99, 0xbc, 0x14, 0xdf, 0xa3, 0x3c, 0x8c, 0xd6, 0xab, 0xc4, 0x4d, - 0x70, 0xad, 0xc4, 0xa0, 0x6a, 0x90, 0x21, 0x2e, 0x94, 0x35, 0x6f, 0xe3, 0xf2, 0x11, 0x6d, 0x3c, - 0x15, 0x5e, 0x5e, 0x79, 0x14, 0x9b, 0xe5, 0xed, 0xe6, 0xef, 0x87, 0xf2, 0xef, 0x9c, 0x57, 0xd4, - 0x1b, 0x0c, 0x55, 0xbf, 0xc9, 0x9e, 0x24, 0x4b, 0x7e, 0x0a, 0x53, 0x6a, 0xaa, 0x13, 0x81, 0x43, - 0xa3, 0x8b, 0xaf, 0xc7, 0x0f, 0x0d, 0x1e, 0x3f, 0x71, 0x6e, 0x3d, 0xbb, 0x7b, 0x2b, 0x03, 0x96, - 0x5f, 0x90, 0x6e, 0xc8, 0x0a, 0x2d, 0x6a, 0x48, 0x3f, 0xa2, 0xca, 0x42, 0xd4, 0x0e, 0xa2, 0x7f, - 0x4f, 0x85, 0xb9, 0x33, 0x7d, 0xc1, 0x6d, 0x51, 0x71, 0x63, 0x44, 0xae, 0xbe, 0x9c, 0x43, 0xb4, - 0xd2, 0x37, 0x7c, 0x88, 0xf6, 0x87, 0xbd, 0x32, 0xb8, 0x3f, 0x7d, 0x8e, 0x79, 0xee, 0xb3, 0xb4, - 0xcc, 0x11, 0x9c, 0x69, 0x33, 0xcd, 0xec, 0x1c, 0x59, 0x92, 0x27, 0x91, 0xea, 0xd1, 0xa0, 0x09, - 0xe5, 0xd5, 0x8f, 0x2b, 0x8c, 0xc3, 0x49, 0x54, 0x5d, 0x34, 0xac, 0xe4, 0x31, 0x57, 0xdf, 0xd7, - 0x3f, 0xe6, 0xfa, 0xef, 0xc3, 0x70, 0x61, 0xc7, 0x39, 0x74, 0x3d, 0x26, 0xb4, 0x6d, 0x1a, 0xfa, - 0x9d, 0xa0, 0x41, 0x49, 0x15, 0x26, 0xcc, 0xc8, 0xcd, 0x2e, 0x71, 0xa9, 0x6c, 0x5f, 0x32, 0xcb, - 0xc8, 0x22, 0x8c, 0xa8, 0xfb, 0x9a, 0x62, 0x33, 0xc9, 0xb8, 0xc7, 0xb9, 0xd6, 0x63, 0xc7, 0x60, - 0xe4, 0x43, 0xe3, 0x64, 0x66, 0x52, 0x5d, 0x3d, 0x46, 0xd8, 0x45, 0x1e, 0x5a, 0xe7, 0xf9, 0x4d, - 0x73, 0x43, 0xe4, 0xc7, 0x0f, 0x3f, 0x4e, 0x1d, 0xd6, 0x0c, 0x18, 0x3d, 0x4e, 0x79, 0xac, 0x50, - 0x17, 0xc8, 0x7d, 0xc0, 0x35, 0xe3, 0x18, 0xe7, 0x07, 0x30, 0xfa, 0xa8, 0x73, 0x40, 0xe5, 0xb1, - 0xd4, 0xa0, 0xd8, 0x1f, 0x93, 0xf1, 0xc8, 0xa2, 0x7e, 0xff, 0x1e, 0x9f, 0x83, 0xa7, 0x9d, 0x03, - 0x9a, 0x7e, 0x19, 0x98, 0x09, 0x26, 0x8d, 0x18, 0x39, 0x82, 0x72, 0x32, 0x74, 0x58, 0x3c, 0xb3, - 0x55, 0x10, 0xf0, 0x8c, 0x6f, 0x3c, 0x68, 0xef, 0x0f, 0xf3, 0x80, 0x46, 0xa3, 0x91, 0x14, 0x55, - 0xf2, 0x9b, 0x30, 0x93, 0xe9, 0x2f, 0x54, 0xd7, 0x8f, 0x8a, 0x5d, 0x91, 0x28, 0xd4, 0x13, 0x5c, - 0x93, 0x77, 0x9d, 0x8c, 0x96, 0xb3, 0x5b, 0x21, 0x4d, 0x98, 0x4c, 0x84, 0xc4, 0x8a, 0x47, 0xd0, - 0xf3, 0x83, 0x6c, 0x71, 0x63, 0x92, 0x2f, 0x55, 0x66, 0xb6, 0x95, 0x24, 0x49, 0x36, 0x60, 0x44, - 0x99, 0xfb, 0xf8, 0x5c, 0x4f, 0xb6, 0x6b, 0x63, 0xee, 0xf4, 0xa4, 0x32, 0x1d, 0xbb, 0x36, 0x0c, - 0x9a, 0x31, 0x01, 0xf2, 0x5b, 0x70, 0x5d, 0x2d, 0xd1, 0xed, 0x20, 0xdb, 0x09, 0x24, 0xde, 0x37, - 0xbe, 0x99, 0x5c, 0xe1, 0x79, 0xf0, 0xfb, 0x77, 0x97, 0x7a, 0xe7, 0x4a, 0x6b, 0x3d, 0x76, 0x77, - 0xd2, 0xe4, 0x67, 0x25, 0xb8, 0x98, 0xd3, 0xea, 0x18, 0xb6, 0xda, 0xd5, 0x33, 0x87, 0xca, 0x3d, - 0x5e, 0xf8, 0x71, 0x9b, 0xf1, 0xd5, 0x34, 0xe9, 0xa2, 0x33, 0xc6, 0x9d, 0xd3, 0x12, 0x79, 0x07, - 0x06, 0xd1, 0x46, 0x0e, 0xe7, 0xc6, 0x51, 0x8b, 0xc4, 0xa7, 0x4d, 0xd0, 0x92, 0xd6, 0xf7, 0x0d, - 0x01, 0xb3, 0x04, 0x30, 0x1c, 0x08, 0x59, 0xf2, 0xb0, 0x7f, 0xb8, 0xbf, 0x3c, 0xc0, 0x97, 0xbb, - 0x8c, 0x90, 0xfe, 0x17, 0x43, 0xfc, 0x42, 0xe3, 0x9e, 0xe7, 0x3e, 0x71, 0x63, 0xb1, 0xa3, 0xfb, - 0xc4, 0xe2, 0x3c, 0x0d, 0x42, 0x63, 0xcd, 0xc9, 0xc8, 0xa0, 0xdc, 0x67, 0xbd, 0x5d, 0xdd, 0x67, - 0xf7, 0xb4, 0x23, 0x22, 0xed, 0xc5, 0x3f, 0xae, 0x99, 0x98, 0xee, 0xaa, 0xf8, 0xec, 0xe8, 0x4b, - 0x18, 0xc4, 0x47, 0xfa, 0xf8, 0xf9, 0xdb, 0xe8, 0xe2, 0x2d, 0x21, 0x6c, 0x0b, 0xba, 0xcf, 0x5f, - 0xf5, 0x13, 0x97, 0x94, 0x39, 0x9f, 0xb0, 0xc0, 0xe0, 0x13, 0x96, 0x90, 0x5d, 0x98, 0xda, 0x09, - 0x68, 0x53, 0xc4, 0xe9, 0xb6, 0x03, 0xe1, 0x52, 0xe0, 0xce, 0x0a, 0xdc, 0xa8, 0xdb, 0xb2, 0xba, - 0x4e, 0x55, 0xbd, 0xbe, 0x0d, 0x66, 0xa0, 0x93, 0x55, 0x98, 0xa8, 0x51, 0x27, 0x68, 0x1c, 0x3d, - 0xa2, 0x2f, 0x98, 0x92, 0x62, 0x3c, 0x7d, 0x1e, 0x62, 0x0d, 0x1b, 0x2f, 0x56, 0xe9, 0x31, 0x15, - 0x26, 0x12, 0xf9, 0x3e, 0x0c, 0xd6, 0xfc, 0x20, 0x5a, 0x7a, 0x21, 0x44, 0x91, 0x3c, 0xa1, 0xe1, - 0x85, 0x4b, 0x97, 0xe4, 0xf3, 0xef, 0xa1, 0x1f, 0x44, 0xf5, 0x03, 0xe3, 0x85, 0x1b, 0x0e, 0x42, - 0x5e, 0xc0, 0xb4, 0x29, 0x06, 0x44, 0xf8, 0xe8, 0xb0, 0x50, 0x8e, 0xb2, 0x64, 0x0d, 0x07, 0x59, - 0xba, 0x21, 0xa8, 0x5f, 0x4b, 0x0a, 0x9b, 0x27, 0x58, 0xaf, 0x3f, 0x3a, 0x93, 0x85, 0x4f, 0x36, - 0xf1, 0xd5, 0x7c, 0x3e, 0xa2, 0x6a, 0xc8, 0xc3, 0x4e, 0x47, 0xe2, 0x37, 0x94, 0x3a, 0x28, 0x4a, - 0x90, 0x13, 0x4e, 0x98, 0x4c, 0x86, 0x60, 0xa7, 0x50, 0xc9, 0x0e, 0x5c, 0xd8, 0x0b, 0xe9, 0x4e, - 0x40, 0x9f, 0xb9, 0xf4, 0xb9, 0xa4, 0x07, 0xf1, 0x83, 0x33, 0x8c, 0x5e, 0x9b, 0xd7, 0x66, 0x11, - 0x4c, 0x23, 0x93, 0x0f, 0x01, 0x76, 0x5c, 0xcf, 0xa3, 0x4d, 0x3c, 0xe6, 0x1b, 0x45, 0x52, 0xe8, - 0x08, 0x6d, 0x63, 0x69, 0xdd, 0xf7, 0x5a, 0x3a, 0x4b, 0x35, 0x60, 0xb2, 0x04, 0xe3, 0xeb, 0x5e, - 0xa3, 0xd5, 0x11, 0xc7, 0xf1, 0x21, 0x8a, 0x01, 0xf1, 0x10, 0x96, 0xcb, 0x2b, 0xea, 0xa9, 0x4f, - 0xd3, 0x44, 0x99, 0xff, 0x10, 0x46, 0xb5, 0x65, 0x9a, 0x71, 0x51, 0x7e, 0x5a, 0xbf, 0x28, 0x3f, - 0xa2, 0x5f, 0x88, 0xff, 0x47, 0x25, 0x58, 0xc8, 0x5e, 0xfe, 0x42, 0xd3, 0xd9, 0x86, 0x11, 0x55, - 0xa8, 0x2e, 0x66, 0x48, 0x1d, 0x3b, 0xa1, 0x6a, 0xf0, 0x6f, 0x50, 0x0a, 0x0b, 0xbd, 0xc3, 0x31, - 0x8d, 0x97, 0x70, 0x7c, 0xff, 0xb5, 0x61, 0x98, 0xc6, 0x00, 0xe4, 0xa4, 0x68, 0xf9, 0x14, 0x1f, - 0xbc, 0xc0, 0x32, 0xcd, 0x8f, 0x2b, 0x5c, 0x3a, 0xbc, 0x3c, 0xf9, 0xf4, 0x90, 0x81, 0x40, 0xde, - 0xd3, 0xc3, 0x06, 0x7a, 0xb5, 0xa7, 0xf5, 0x65, 0xa1, 0x3e, 0x84, 0x38, 0x9e, 0xe0, 0x6d, 0xe3, - 0xd4, 0xfa, 0xcc, 0x72, 0xaa, 0xff, 0xac, 0x72, 0x6a, 0x4f, 0xc9, 0x29, 0xfe, 0x90, 0xc2, 0x5b, - 0x9a, 0x9c, 0x7a, 0xf5, 0x02, 0x6a, 0xf0, 0x55, 0x0b, 0xa8, 0xa1, 0xaf, 0x27, 0xa0, 0x86, 0x5f, - 0x52, 0x40, 0xdd, 0x87, 0x89, 0x2d, 0x4a, 0x9b, 0xda, 0x89, 0x04, 0x97, 0x11, 0xc2, 0x0d, 0x83, - 0xbe, 0xa6, 0xac, 0x63, 0x89, 0x04, 0x56, 0xae, 0xa0, 0x83, 0xff, 0x37, 0x82, 0x6e, 0xf4, 0x15, - 0x0b, 0xba, 0xb1, 0xaf, 0x23, 0xe8, 0x52, 0xd2, 0x6a, 0xfc, 0x57, 0x2a, 0xad, 0x3e, 0xc1, 0xa8, - 0xbb, 0x5a, 0x6d, 0x4d, 0x04, 0x58, 0x68, 0x11, 0x0d, 0x6b, 0x7e, 0x28, 0x83, 0x92, 0xf1, 0x6f, - 0x56, 0xb6, 0xe3, 0x07, 0xf2, 0x54, 0x18, 0xff, 0xb6, 0x96, 0x30, 0xd6, 0x4e, 0xc7, 0x57, 0x11, - 0xed, 0x43, 0xe2, 0x56, 0x9b, 0x90, 0x71, 0x49, 0x7b, 0xc5, 0x96, 0xf5, 0xd6, 0x9f, 0x95, 0xf8, - 0xe9, 0xdf, 0xff, 0x8f, 0xa2, 0xf2, 0xeb, 0x9c, 0xc8, 0xfd, 0x4e, 0x7c, 0xdb, 0x5d, 0xdc, 0xcc, - 0x0f, 0x9c, 0xc6, 0xd3, 0xf8, 0x48, 0xf4, 0x47, 0xec, 0x3b, 0xd7, 0x2b, 0xf0, 0x69, 0xcb, 0xd8, - 0x28, 0x33, 0x2b, 0xf7, 0xef, 0x4a, 0x01, 0x20, 0x2e, 0xfd, 0xf3, 0x62, 0x53, 0x00, 0xe8, 0x08, - 0x18, 0x4e, 0x36, 0x69, 0xd9, 0xfc, 0xb2, 0x76, 0x66, 0x0f, 0xde, 0x4f, 0x5f, 0x37, 0x46, 0xad, - 0x3f, 0xbe, 0x6e, 0xac, 0xb3, 0x31, 0xbe, 0x78, 0xbc, 0x07, 0x97, 0x6d, 0x7a, 0xec, 0x3f, 0xa3, - 0xaf, 0x96, 0xec, 0x0f, 0xe1, 0x92, 0x49, 0x90, 0x5f, 0x4c, 0xe1, 0x4f, 0x52, 0x7f, 0x92, 0xfd, - 0x90, 0xb5, 0x40, 0xe0, 0x0f, 0x59, 0xf3, 0xf7, 0x70, 0xd9, 0x9f, 0xfa, 0xbe, 0x81, 0x75, 0x96, - 0x0f, 0x0b, 0x26, 0xf1, 0x6a, 0xb3, 0x89, 0x89, 0xc6, 0x1a, 0x6e, 0xdb, 0xf1, 0x22, 0xb2, 0x0d, - 0xa3, 0xda, 0xcf, 0x84, 0x4d, 0xae, 0xd5, 0x08, 0x35, 0x24, 0x2e, 0x30, 0x1e, 0x41, 0x8c, 0x8b, - 0x2d, 0x0a, 0x95, 0x24, 0x7b, 0x18, 0xcb, 0xf4, 0x36, 0x97, 0x60, 0x5c, 0xfb, 0xa9, 0x7c, 0x83, - 0xf8, 0xf1, 0x6b, 0x2d, 0x98, 0x0c, 0x33, 0x51, 0xac, 0x06, 0xcc, 0x67, 0x31, 0x0d, 0x9f, 0x10, - 0x7a, 0x41, 0x56, 0xe3, 0xc7, 0x88, 0xba, 0x07, 0xa4, 0x4d, 0xe6, 0x3d, 0x44, 0x64, 0xfd, 0xad, - 0x7e, 0xb8, 0x2c, 0x26, 0xe3, 0x55, 0xce, 0x38, 0xf9, 0x31, 0x8c, 0x6a, 0x73, 0x2c, 0x98, 0x7e, - 0x4d, 0x3e, 0x7e, 0x98, 0xb7, 0x16, 0xb8, 0xef, 0xa0, 0x83, 0x05, 0xf5, 0xc4, 0x74, 0xaf, 0xf5, - 0xd8, 0x3a, 0x49, 0xd2, 0x82, 0x09, 0x73, 0xa2, 0x85, 0xfb, 0xe4, 0xb5, 0xcc, 0x46, 0x4c, 0x50, - 0xf9, 0x94, 0x6e, 0xb3, 0x9e, 0x39, 0xdd, 0x6b, 0x3d, 0x76, 0x82, 0x36, 0xf9, 0x0a, 0x2e, 0xa4, - 0x66, 0x59, 0x78, 0xc5, 0xde, 0xcc, 0x6c, 0x30, 0x05, 0xcd, 0xfd, 0x9e, 0x01, 0x16, 0xe7, 0x36, - 0x9b, 0x6e, 0x84, 0x34, 0x61, 0x4c, 0x9f, 0x78, 0xe1, 0xdf, 0xb9, 0x5e, 0xc0, 0x4a, 0x0e, 0xc8, - 0x95, 0x3b, 0xc1, 0x4b, 0x9c, 0xfb, 0x17, 0xa6, 0x2f, 0xd7, 0x00, 0x1e, 0x86, 0x41, 0xfe, 0x9b, - 0x89, 0x80, 0x9d, 0x80, 0x86, 0xd4, 0x6b, 0x50, 0x23, 0x86, 0xf9, 0x6b, 0x8a, 0x80, 0x7f, 0x5d, - 0x82, 0xb9, 0x2c, 0xba, 0x35, 0xea, 0x35, 0xc9, 0x0e, 0x94, 0x93, 0x0d, 0x89, 0x55, 0x6d, 0xa9, - 0xd7, 0x4a, 0x73, 0xbb, 0xb4, 0xd6, 0x63, 0xa7, 0xb0, 0xc9, 0x16, 0x5c, 0xd0, 0xca, 0x84, 0x17, - 0xb3, 0xf7, 0x2c, 0x5e, 0x4c, 0x36, 0x0b, 0x29, 0x54, 0xdd, 0x09, 0xbc, 0x86, 0x3b, 0xe3, 0x8a, - 0x7f, 0xec, 0xb8, 0x1e, 0x53, 0x74, 0xb5, 0xf7, 0x88, 0x20, 0x2e, 0x15, 0xbc, 0xe1, 0x6e, 0x4d, - 0x2c, 0x95, 0x77, 0x2e, 0x14, 0x88, 0xf5, 0x5d, 0x94, 0xe0, 0xc2, 0x19, 0xc6, 0x6f, 0x70, 0x2a, - 0x62, 0xd7, 0x60, 0x60, 0x77, 0xa3, 0xb6, 0x5c, 0x15, 0xf7, 0x41, 0xf9, 0x2b, 0x02, 0xad, 0xb0, - 0xde, 0x70, 0x6c, 0x5e, 0x61, 0x7d, 0x0c, 0xe4, 0x01, 0x8d, 0xc4, 0x73, 0xd9, 0x0a, 0xef, 0x0d, - 0x18, 0x12, 0x45, 0x02, 0x13, 0xa3, 0xc7, 0x5a, 0x02, 0x4a, 0xd6, 0x59, 0x3b, 0xd2, 0x4e, 0x68, - 0x51, 0x27, 0xd4, 0x36, 0xe6, 0x0f, 0x60, 0x38, 0x10, 0x65, 0x62, 0x5f, 0x9e, 0x50, 0x89, 0x05, - 0xb0, 0x98, 0x3b, 0x8e, 0x25, 0x8c, 0xad, 0xfe, 0xb2, 0x36, 0xf0, 0xc5, 0x8f, 0xed, 0xf5, 0x95, - 0x65, 0xc6, 0x55, 0xc1, 0x2c, 0x39, 0x1d, 0xb7, 0x31, 0xcc, 0x3a, 0xa2, 0xfa, 0x6d, 0x50, 0x64, - 0x0d, 0x7e, 0xe4, 0xe2, 0x9d, 0x1b, 0x0d, 0xc4, 0xba, 0xa7, 0xde, 0x0f, 0xc9, 0xa0, 0x96, 0xf7, - 0x40, 0xfe, 0x16, 0xbe, 0x8c, 0xf2, 0x00, 0xe3, 0x52, 0x5e, 0x45, 0x27, 0x1c, 0x98, 0xe7, 0xdb, - 0x3c, 0x1b, 0x95, 0xc8, 0xed, 0xe4, 0x2b, 0xd1, 0xb8, 0x0c, 0x23, 0xaa, 0x4c, 0x1d, 0x32, 0x71, - 0x5e, 0x19, 0xf0, 0xfb, 0xf7, 0xf8, 0xc5, 0xd9, 0x86, 0x22, 0x10, 0xe3, 0xb1, 0x26, 0xf8, 0x77, - 0xf7, 0x0d, 0x37, 0x11, 0xd2, 0x20, 0xfa, 0x46, 0x9b, 0x88, 0x9f, 0xce, 0x39, 0x4f, 0x13, 0x06, - 0xfc, 0xfe, 0xe2, 0x59, 0x18, 0xf5, 0x0d, 0x37, 0xc1, 0x18, 0xf5, 0xcd, 0x35, 0x41, 0xe5, 0x1b, - 0x43, 0x7c, 0x91, 0xa6, 0x1a, 0x59, 0x4d, 0x37, 0x22, 0x3d, 0xc4, 0x09, 0x8c, 0xc2, 0xf9, 0xa0, - 0xb0, 0xc0, 0x99, 0xf5, 0x2b, 0x68, 0x86, 0x31, 0xec, 0x9b, 0x6d, 0xe6, 0xef, 0x96, 0xf8, 0x8b, - 0x47, 0xb5, 0x6d, 0x2d, 0xab, 0x9a, 0xf7, 0xc4, 0xd7, 0xce, 0xc0, 0xb5, 0xaf, 0xfd, 0x91, 0xeb, - 0x35, 0xf5, 0x33, 0x70, 0xa7, 0x13, 0x1d, 0xa9, 0x37, 0x79, 0x9f, 0xba, 0x5e, 0xd3, 0x4e, 0x42, - 0x93, 0x0f, 0x61, 0x5c, 0x2b, 0x52, 0xda, 0x1a, 0x7f, 0xb5, 0x5f, 0x47, 0x77, 0x9b, 0xb6, 0x09, - 0x69, 0xfd, 0x5e, 0x2f, 0x5c, 0xdc, 0x6b, 0x87, 0x78, 0xfd, 0x64, 0xdd, 0x7b, 0x46, 0xbd, 0xc8, - 0x0f, 0x5e, 0x60, 0xc8, 0x3c, 0x79, 0x0f, 0x06, 0xd6, 0x68, 0xab, 0xe5, 0x8b, 0x91, 0x5f, 0x91, - 0x07, 0xd0, 0x49, 0x68, 0x04, 0x5a, 0xeb, 0xb1, 0x39, 0x34, 0xf9, 0x10, 0x46, 0xd6, 0xa8, 0x13, - 0x44, 0x07, 0xd4, 0x91, 0xca, 0xaa, 0x7c, 0x45, 0x5e, 0x43, 0x11, 0x00, 0x6b, 0x3d, 0x76, 0x0c, - 0x4d, 0x16, 0x99, 0x1d, 0xe7, 0x1d, 0xaa, 0xab, 0xb6, 0x39, 0x0d, 0x32, 0x98, 0xb5, 0x1e, 0x1b, - 0x61, 0xc9, 0x26, 0x8c, 0x57, 0x0f, 0xa9, 0x17, 0x6d, 0xd2, 0xc8, 0x69, 0x3a, 0x91, 0x23, 0x94, - 0x9a, 0x37, 0xf2, 0x90, 0x0d, 0xe0, 0xb5, 0x1e, 0xdb, 0xc4, 0x5e, 0x1a, 0x80, 0xbe, 0xcd, 0xf0, - 0xd0, 0x3a, 0x29, 0xc1, 0xdc, 0x8a, 0xff, 0xdc, 0xcb, 0x64, 0xcc, 0x77, 0x4c, 0xc6, 0x54, 0xe4, - 0x39, 0x5e, 0x1a, 0x3e, 0xc1, 0x9a, 0x77, 0xa1, 0x7f, 0xc7, 0xf5, 0x0e, 0x13, 0xfb, 0x78, 0x06, - 0x1e, 0x83, 0xc2, 0x11, 0xba, 0xde, 0x21, 0xd9, 0x90, 0x0a, 0x94, 0x70, 0x14, 0xf5, 0x19, 0x5a, - 0x5b, 0x06, 0xb6, 0x0e, 0x1d, 0x2b, 0x4a, 0xfc, 0xb7, 0x1c, 0xe0, 0xdb, 0x30, 0x9b, 0xd3, 0xae, - 0xb8, 0xfe, 0xca, 0xc6, 0xd6, 0x8f, 0xbb, 0xd2, 0x5b, 0x30, 0x93, 0x39, 0x05, 0x29, 0xc0, 0x7f, - 0x9a, 0xb5, 0x96, 0xf8, 0xc8, 0xe7, 0x60, 0x48, 0x26, 0x1b, 0xe1, 0x86, 0xbb, 0xfc, 0x89, 0x17, - 0x40, 0xd0, 0xdc, 0x8e, 0xdf, 0xa6, 0x95, 0xbf, 0xc9, 0xbe, 0xf6, 0x50, 0x4c, 0x1f, 0x7a, 0x9a, - 0x3e, 0xfa, 0x1a, 0x09, 0x6f, 0x15, 0x2d, 0xd6, 0xe6, 0x9a, 0x1f, 0x46, 0x9e, 0x8a, 0x4f, 0xb4, - 0xd5, 0x6f, 0x72, 0x13, 0xca, 0xf2, 0x35, 0x74, 0x91, 0x76, 0x41, 0x64, 0x32, 0xb5, 0x53, 0xe5, - 0xe4, 0x03, 0x98, 0x4d, 0x96, 0xc9, 0x51, 0xf2, 0x1b, 0x3c, 0x79, 0xd5, 0xd6, 0x9f, 0xf6, 0xe2, - 0x6b, 0xba, 0x05, 0x4b, 0x93, 0x71, 0x77, 0xbb, 0x26, 0xb8, 0xd5, 0xbb, 0x5d, 0x23, 0x0b, 0x30, - 0xb2, 0x5d, 0x33, 0x32, 0xb6, 0xd8, 0x71, 0x01, 0xeb, 0x36, 0x1b, 0x42, 0x35, 0x68, 0x1c, 0xb9, - 0x11, 0x6d, 0x44, 0x9d, 0x40, 0x3c, 0xf3, 0x63, 0xa7, 0xca, 0x89, 0x05, 0x63, 0x0f, 0x5a, 0xee, - 0x41, 0x43, 0x12, 0xe3, 0x2c, 0x30, 0xca, 0xc8, 0x9b, 0x30, 0xb1, 0xee, 0x85, 0x91, 0xd3, 0x6a, - 0x6d, 0xd2, 0xe8, 0xc8, 0x6f, 0x8a, 0x74, 0x72, 0x76, 0xa2, 0x94, 0xb5, 0xbb, 0xec, 0x7b, 0x91, - 0xe3, 0x7a, 0x34, 0xb0, 0x3b, 0x5e, 0xe4, 0x1e, 0x53, 0x31, 0xf6, 0x54, 0x39, 0x79, 0x17, 0x66, - 0x54, 0xd9, 0x76, 0xd0, 0x38, 0xa2, 0x61, 0x14, 0x60, 0x1e, 0x27, 0x7c, 0xd0, 0xc4, 0xce, 0xae, - 0xc4, 0x16, 0x5a, 0x7e, 0xa7, 0xb9, 0xea, 0x3d, 0x73, 0x03, 0xdf, 0xc3, 0xa7, 0xdd, 0x87, 0x45, - 0x0b, 0x89, 0x72, 0x6b, 0x27, 0xf3, 0xab, 0xfd, 0x1a, 0x4b, 0xd0, 0x3a, 0x2d, 0xc1, 0x42, 0xe6, - 0x87, 0x25, 0x85, 0xb7, 0x8e, 0x5c, 0x4a, 0xac, 0xdf, 0x9b, 0xd0, 0x8f, 0xd2, 0x9c, 0x3b, 0x06, - 0x64, 0x04, 0x0f, 0xe2, 0x73, 0x52, 0xac, 0xd6, 0x46, 0x18, 0xf2, 0x40, 0x39, 0x82, 0xfb, 0x50, - 0x6d, 0xbd, 0x9d, 0x94, 0x99, 0x19, 0x8d, 0xeb, 0x0e, 0x61, 0xe9, 0xfa, 0xfd, 0x3a, 0x3e, 0xb7, - 0x3f, 0x2d, 0x41, 0xa5, 0x8b, 0x3c, 0x51, 0x63, 0x2a, 0x9d, 0x61, 0x4c, 0x0f, 0xd5, 0x98, 0xf8, - 0x5d, 0xa1, 0xc5, 0xb3, 0xc9, 0xac, 0x57, 0x3d, 0xac, 0x65, 0x20, 0xe9, 0x9d, 0x87, 0x7c, 0x1b, - 0x46, 0x6a, 0xb5, 0x35, 0x23, 0x4c, 0x22, 0xe5, 0x09, 0x8c, 0x21, 0xac, 0xf7, 0xe1, 0xa2, 0x22, - 0xc2, 0x9f, 0xf3, 0xd6, 0x2e, 0x24, 0x8a, 0xbd, 0x5e, 0x5d, 0x7c, 0x8c, 0x0b, 0xac, 0x3f, 0xe9, - 0x4f, 0x21, 0xd6, 0x3a, 0xc7, 0xc7, 0x4e, 0xf0, 0x82, 0x54, 0x4d, 0xc4, 0xbe, 0xae, 0x9b, 0xec, - 0x52, 0xff, 0xcf, 0x4f, 0x2a, 0x3d, 0x1a, 0x75, 0xf2, 0x3a, 0x8c, 0xe3, 0x07, 0xe9, 0x35, 0x28, - 0xf7, 0x03, 0xf6, 0xf2, 0x47, 0x17, 0x8c, 0x42, 0xb2, 0x0f, 0xe3, 0x62, 0xad, 0xe3, 0x6f, 0xb9, - 0xc4, 0xee, 0x24, 0x97, 0x98, 0xd1, 0xbd, 0x5b, 0x06, 0x0a, 0x9f, 0x0c, 0x93, 0x0c, 0xf9, 0x02, - 0x26, 0xa4, 0x60, 0x13, 0x84, 0xf9, 0x61, 0xeb, 0xdd, 0x62, 0xc2, 0x26, 0x0e, 0xa7, 0x9c, 0x20, - 0xc4, 0xba, 0x2c, 0xc4, 0xb5, 0xa0, 0x3c, 0x70, 0x96, 0x2e, 0x1b, 0x28, 0xa2, 0xcb, 0x46, 0xd9, - 0xfc, 0xf7, 0x81, 0xa4, 0xc7, 0xd5, 0x6d, 0x35, 0x8d, 0x6b, 0xab, 0x69, 0xbe, 0x0a, 0x53, 0x19, - 0x03, 0x38, 0x17, 0x89, 0xef, 0x03, 0x49, 0xf7, 0xf4, 0x3c, 0x14, 0xac, 0x1b, 0xf0, 0xa6, 0x62, - 0x81, 0x5a, 0x0d, 0x06, 0x4d, 0x69, 0xed, 0xff, 0x76, 0x2f, 0x54, 0xba, 0x80, 0x92, 0xbf, 0x5f, - 0x4a, 0x72, 0x9b, 0xaf, 0xc6, 0x0f, 0x93, 0xdc, 0xce, 0xc6, 0xcf, 0x60, 0xfb, 0xd2, 0x47, 0x3f, - 0xfb, 0xf3, 0x97, 0xde, 0xa8, 0xd3, 0x53, 0x76, 0x7e, 0x6e, 0xf5, 0xeb, 0xdc, 0xb2, 0x61, 0xda, - 0x50, 0x71, 0xce, 0x22, 0xbb, 0xaf, 0x02, 0x88, 0xcc, 0x56, 0x1b, 0xfe, 0xa1, 0xb8, 0xce, 0xa9, - 0x95, 0x58, 0xf7, 0x61, 0x26, 0x41, 0x53, 0x78, 0x20, 0xbe, 0x0d, 0xea, 0xe2, 0x19, 0x12, 0xed, - 0x5b, 0xba, 0xf0, 0xcb, 0x93, 0xca, 0x38, 0xdb, 0x01, 0x6f, 0xc5, 0xef, 0xda, 0xca, 0xbf, 0xac, - 0x4d, 0xdd, 0x87, 0x52, 0x6d, 0xe9, 0x17, 0xf2, 0xc9, 0x5d, 0x18, 0xe4, 0x25, 0x89, 0xd7, 0x23, - 0x75, 0x68, 0x21, 0x13, 0x04, 0xa0, 0x35, 0x83, 0x97, 0x6d, 0xf0, 0x47, 0x35, 0xbe, 0xd6, 0x69, - 0xed, 0xf1, 0xf7, 0xcc, 0xe3, 0x62, 0xf5, 0x42, 0x65, 0x7f, 0x35, 0xbe, 0x7e, 0x2a, 0x0f, 0xbc, - 0x24, 0x9c, 0xe7, 0x3f, 0x6f, 0xd1, 0x26, 0x4f, 0x84, 0xb2, 0x34, 0x26, 0x0e, 0xbc, 0xfa, 0x1d, - 0x46, 0x00, 0xd1, 0xac, 0x4f, 0x61, 0x66, 0xb9, 0x45, 0x9d, 0x20, 0xd9, 0x1e, 0x79, 0x13, 0x86, - 0xb0, 0xcc, 0x0c, 0xd7, 0x73, 0x58, 0x11, 0x86, 0xeb, 0x89, 0x4a, 0x6b, 0x03, 0x2e, 0x71, 0x0b, - 0x4c, 0x1f, 0x52, 0xec, 0xef, 0x18, 0xc0, 0xdf, 0x89, 0xab, 0x1a, 0x19, 0xa3, 0xe7, 0x70, 0xd6, - 0x27, 0x18, 0x0b, 0x9c, 0x95, 0xc4, 0xfa, 0x6c, 0x97, 0x87, 0xfe, 0x32, 0x2c, 0x54, 0xdb, 0x6d, - 0xea, 0x35, 0x63, 0xc4, 0xdd, 0xc0, 0x39, 0xe3, 0xa5, 0x4c, 0x52, 0x85, 0x01, 0x84, 0x56, 0xce, - 0x62, 0xd1, 0xdd, 0x8c, 0xee, 0x20, 0x9c, 0x78, 0x4e, 0x0c, 0x1b, 0xe0, 0x98, 0x56, 0x13, 0x66, - 0x6b, 0x9d, 0x83, 0x63, 0x97, 0x67, 0x76, 0xc6, 0x8b, 0xcd, 0xb2, 0xed, 0x75, 0x99, 0x82, 0x82, - 0x33, 0xe3, 0x46, 0x1c, 0x33, 0x8a, 0x71, 0x82, 0xe2, 0xb2, 0xf3, 0xb3, 0xbb, 0xb7, 0x62, 0x54, - 0xb4, 0x56, 0x78, 0x2b, 0x58, 0x2d, 0xd2, 0x54, 0x58, 0x53, 0x70, 0x41, 0x77, 0xbc, 0xf1, 0x15, - 0x32, 0x03, 0x53, 0xa6, 0x43, 0x8d, 0x17, 0x7f, 0x09, 0xd3, 0xdc, 0xe0, 0xe7, 0xcf, 0x81, 0x2e, - 0xc6, 0x2f, 0x5f, 0xf6, 0xee, 0x2f, 0x26, 0xa2, 0x0b, 0x31, 0xe8, 0x48, 0x3d, 0xf4, 0xbc, 0xbf, - 0xc8, 0xef, 0x73, 0x3c, 0x5b, 0x34, 0xdc, 0xb6, 0xbd, 0xfb, 0x8b, 0x4b, 0x43, 0xe2, 0x59, 0x35, - 0x46, 0x9d, 0x4f, 0xff, 0x37, 0x42, 0x7d, 0x11, 0xaf, 0x10, 0xae, 0x51, 0x07, 0xc3, 0x7d, 0xb3, - 0x2f, 0x62, 0x4d, 0x40, 0xaf, 0xdb, 0x94, 0x5a, 0xb6, 0xdb, 0xb4, 0xfe, 0xa8, 0x04, 0x37, 0xb8, - 0x2e, 0x92, 0x8d, 0x87, 0xde, 0xb5, 0x1c, 0x64, 0xf2, 0x01, 0xf0, 0x64, 0xa5, 0x42, 0xe1, 0xb3, - 0x44, 0xcf, 0x8b, 0x28, 0x71, 0x04, 0x52, 0x85, 0x31, 0x3d, 0x60, 0xf6, 0x6c, 0xcf, 0xd6, 0xd8, - 0xa3, 0xc7, 0x4f, 0x1c, 0x15, 0x44, 0xfb, 0x14, 0x2e, 0xaf, 0x7e, 0xc5, 0x16, 0x84, 0xd8, 0x9d, - 0xc4, 0xa9, 0x73, 0x7c, 0xd1, 0x67, 0x72, 0x57, 0xac, 0x18, 0x53, 0x0d, 0x4e, 0x16, 0x33, 0xf3, - 0x40, 0x6e, 0x70, 0x4a, 0x7b, 0x1d, 0xb1, 0x8d, 0x32, 0xeb, 0x4f, 0x4a, 0xb0, 0x90, 0xdd, 0x9a, - 0x10, 0x2c, 0xeb, 0x70, 0x61, 0xd9, 0xf1, 0x7c, 0xcf, 0x6d, 0x38, 0xad, 0x5a, 0xe3, 0x88, 0x36, - 0x3b, 0xea, 0xf1, 0x35, 0x25, 0x65, 0x98, 0xb9, 0x23, 0xd0, 0x25, 0x88, 0x9d, 0xc6, 0x22, 0xef, - 0xc3, 0x45, 0x8c, 0xb9, 0xe4, 0xb2, 0xb7, 0x45, 0x03, 0x45, 0x8f, 0xf7, 0x2c, 0xa7, 0x96, 0xdc, - 0x81, 0x29, 0xbe, 0xa9, 0x34, 0xf7, 0x3c, 0x37, 0x52, 0x48, 0xdc, 0x2a, 0xca, 0xaa, 0xb2, 0xfe, - 0x7d, 0x09, 0x2e, 0x61, 0xc6, 0x03, 0x23, 0x87, 0x52, 0xfc, 0x06, 0xa1, 0x7c, 0x46, 0xaf, 0x64, - 0xc4, 0x90, 0x1a, 0xd0, 0xe6, 0x7b, 0x7a, 0xe4, 0x1d, 0xe8, 0xaf, 0xc9, 0x93, 0xe9, 0x89, 0x44, - 0xf6, 0x35, 0x99, 0xe9, 0xd6, 0x0f, 0x22, 0x1b, 0xa1, 0xd8, 0x9e, 0xb3, 0x42, 0xc3, 0x06, 0xf5, - 0x30, 0x4d, 0x5e, 0x1f, 0xdf, 0x73, 0xe2, 0x92, 0xf8, 0x09, 0x85, 0xfe, 0xbc, 0x27, 0x14, 0x06, - 0xcc, 0x27, 0x14, 0xac, 0x67, 0x3c, 0xdf, 0x41, 0x72, 0x40, 0x62, 0x92, 0x3e, 0x49, 0x65, 0xd5, - 0xe3, 0xfb, 0xc0, 0xc5, 0xac, 0x91, 0xed, 0xdf, 0x4b, 0x25, 0xcc, 0xcb, 0x7f, 0xf3, 0x6f, 0x07, - 0x5e, 0x37, 0x60, 0xab, 0xad, 0x96, 0xff, 0x9c, 0x36, 0x77, 0x02, 0xff, 0xd8, 0x8f, 0x8c, 0xd7, - 0xe6, 0x45, 0x5a, 0xc9, 0xd8, 0x77, 0x25, 0x56, 0x65, 0xa2, 0xd8, 0xfa, 0x4b, 0xf0, 0x46, 0x17, - 0x8a, 0x62, 0x50, 0x35, 0xb8, 0xe0, 0x24, 0xea, 0xe4, 0x11, 0xe3, 0x1b, 0x59, 0xe3, 0x4a, 0x12, - 0x0a, 0xed, 0x34, 0xfe, 0xcd, 0x5d, 0x23, 0x13, 0x1d, 0x99, 0x83, 0xe9, 0x1d, 0x7b, 0x7b, 0x65, - 0x6f, 0x79, 0xb7, 0xbe, 0xfb, 0xc5, 0xce, 0x6a, 0x7d, 0x6f, 0xeb, 0xd1, 0xd6, 0xf6, 0xe3, 0x2d, - 0xfe, 0x68, 0xa6, 0x51, 0xb3, 0xbb, 0x5a, 0xdd, 0x2c, 0x97, 0xc8, 0x34, 0x94, 0x8d, 0xe2, 0xd5, - 0xbd, 0xa5, 0x72, 0xef, 0xcd, 0x2f, 0x8d, 0x0c, 0x6b, 0x64, 0x01, 0xe6, 0x6a, 0x7b, 0x3b, 0x3b, - 0xdb, 0xb6, 0xa2, 0xaa, 0x3f, 0xd9, 0x39, 0x03, 0x17, 0x8c, 0xda, 0xfb, 0xf6, 0xea, 0x2a, 0xcf, - 0xb9, 0x6f, 0x14, 0xef, 0xd8, 0xab, 0x9b, 0xeb, 0x7b, 0x9b, 0xe5, 0xde, 0x9b, 0x75, 0x3d, 0x70, - 0x9d, 0x5c, 0x86, 0xd9, 0x95, 0xd5, 0xfd, 0xf5, 0xe5, 0xd5, 0x2c, 0xda, 0xd3, 0x50, 0xd6, 0x2b, - 0x77, 0xb7, 0x77, 0x77, 0x38, 0x69, 0xbd, 0xf4, 0xf1, 0xea, 0x52, 0x75, 0x6f, 0x77, 0x6d, 0xab, - 0xdc, 0x67, 0xf5, 0x0f, 0xf7, 0x96, 0x7b, 0x6f, 0xfe, 0xd8, 0x88, 0x6a, 0x67, 0xdd, 0x17, 0xe0, - 0x7b, 0xb5, 0xea, 0x83, 0xfc, 0x26, 0x78, 0xed, 0xe6, 0xfd, 0x6a, 0xb9, 0x44, 0xae, 0xc0, 0x25, - 0xa3, 0x74, 0xa7, 0x5a, 0xab, 0x3d, 0xde, 0xb6, 0x57, 0x36, 0x56, 0x6b, 0xb5, 0x72, 0xef, 0xcd, - 0x7d, 0xe3, 0xd9, 0x18, 0xd6, 0xc2, 0xe6, 0xfd, 0x6a, 0xdd, 0x5e, 0xfd, 0x6c, 0x6f, 0xdd, 0x5e, - 0x5d, 0x49, 0xb7, 0x60, 0xd4, 0x7e, 0xb1, 0x5a, 0x2b, 0x97, 0xc8, 0x14, 0x4c, 0x1a, 0xa5, 0x5b, - 0xdb, 0xe5, 0xde, 0x9b, 0x6f, 0x8a, 0x97, 0x45, 0xc8, 0x04, 0xc0, 0xca, 0x6a, 0x6d, 0x79, 0x75, - 0x6b, 0x65, 0x7d, 0xeb, 0x41, 0xb9, 0x87, 0x8c, 0xc3, 0x48, 0x55, 0xfd, 0x2c, 0xdd, 0xfc, 0x08, - 0x26, 0x13, 0x96, 0x2d, 0x83, 0x50, 0x46, 0x61, 0xb9, 0x07, 0xd9, 0x2f, 0x7f, 0xa2, 0x3b, 0x82, - 0x1b, 0xa9, 0xe5, 0xd2, 0xcd, 0x25, 0x99, 0x14, 0x4d, 0xfb, 0xce, 0xc9, 0x28, 0x0c, 0xad, 0xac, - 0xde, 0xaf, 0xee, 0x6d, 0xec, 0x96, 0x7b, 0xd8, 0x8f, 0x65, 0x7b, 0xb5, 0xba, 0xbb, 0xba, 0x52, - 0x2e, 0x91, 0x11, 0x18, 0xa8, 0xed, 0x56, 0x77, 0x57, 0xcb, 0xbd, 0x64, 0x18, 0xfa, 0xf7, 0x6a, - 0xab, 0x76, 0xb9, 0x6f, 0xf1, 0xb7, 0xff, 0x5e, 0x09, 0x46, 0x99, 0xe8, 0x97, 0x11, 0xd2, 0x5f, - 0x6a, 0xc6, 0xa4, 0x10, 0x79, 0x22, 0x03, 0x54, 0xae, 0xe5, 0x88, 0x5a, 0xc0, 0x7c, 0x81, 0x93, - 0x12, 0x01, 0x6e, 0x94, 0xee, 0x94, 0x88, 0x8d, 0x27, 0x72, 0x09, 0xdb, 0x4a, 0x51, 0xce, 0x36, - 0x7f, 0xe7, 0xaf, 0x14, 0x9a, 0x64, 0xe4, 0x37, 0xc0, 0xd2, 0x69, 0xe6, 0x58, 0x20, 0xdf, 0x3e, - 0x9b, 0xa5, 0x21, 0xdb, 0x7c, 0xf3, 0x6c, 0xe0, 0xe4, 0x21, 0x8c, 0x33, 0xdd, 0x5c, 0x81, 0x91, - 0xcb, 0x49, 0x44, 0xcd, 0x1c, 0x98, 0x5f, 0xc8, 0xae, 0x54, 0x4f, 0xc4, 0x8f, 0xe1, 0x40, 0xb8, - 0x61, 0x1d, 0x12, 0x79, 0x87, 0x55, 0x96, 0x70, 0x89, 0x3f, 0x7f, 0x21, 0x51, 0xbc, 0x7f, 0xf7, - 0x4e, 0x89, 0xd4, 0xf0, 0xe9, 0x17, 0x43, 0xc9, 0x27, 0x32, 0x64, 0x3f, 0xad, 0xfd, 0xf3, 0xde, - 0x54, 0x54, 0x4a, 0xa5, 0x1c, 0xeb, 0x60, 0x0b, 0x48, 0x5a, 0x77, 0x26, 0xd7, 0xe2, 0x75, 0x90, - 0xad, 0x56, 0xcf, 0x5f, 0x4c, 0x05, 0x5a, 0xac, 0x32, 0xed, 0x89, 0xac, 0xc2, 0x84, 0xb8, 0xa0, - 0x26, 0xb4, 0x79, 0x52, 0x64, 0x0f, 0xe4, 0x92, 0x79, 0x80, 0x7c, 0x52, 0x16, 0x01, 0x99, 0x8f, - 0xc7, 0x91, 0x34, 0x13, 0xe6, 0x2f, 0x67, 0xd6, 0x89, 0xf1, 0xdd, 0x87, 0x09, 0xd3, 0xb8, 0x20, - 0x72, 0x82, 0x32, 0x6d, 0x8e, 0xdc, 0x0e, 0xd5, 0x61, 0x76, 0xd3, 0x71, 0xd1, 0xb5, 0x28, 0x8e, - 0xf3, 0xe5, 0x61, 0x3c, 0xa9, 0x14, 0x9c, 0xce, 0xd7, 0xa8, 0xd7, 0x54, 0x93, 0x90, 0xf7, 0xdc, - 0x2b, 0x7e, 0x36, 0x35, 0xa9, 0x23, 0x9b, 0xc1, 0x0c, 0xc4, 0x32, 0xd3, 0xe4, 0x65, 0xc5, 0xa7, - 0xcc, 0xe7, 0x85, 0x54, 0x91, 0x4d, 0x54, 0xd2, 0x13, 0x14, 0xb5, 0x35, 0x71, 0x6e, 0x72, 0x73, - 0x78, 0x4d, 0x52, 0xcb, 0x9d, 0x29, 0x2a, 0x43, 0x92, 0xc3, 0xb8, 0x5c, 0x62, 0x77, 0x4a, 0xe4, - 0x4b, 0xfc, 0xaa, 0x33, 0xc9, 0x3d, 0x76, 0xa3, 0x23, 0xa1, 0xfd, 0x5c, 0xce, 0x24, 0x20, 0x3e, - 0x94, 0x02, 0xea, 0x36, 0x4c, 0x67, 0x45, 0x71, 0x29, 0x86, 0x16, 0x84, 0x78, 0xe5, 0xae, 0x02, - 0x9b, 0x99, 0x1a, 0xcd, 0xfc, 0x49, 0x2a, 0x08, 0x22, 0xca, 0xa5, 0xf9, 0x5d, 0x98, 0x60, 0xab, - 0xe4, 0x11, 0xa5, 0xed, 0x6a, 0xcb, 0x7d, 0x46, 0x43, 0x22, 0xdf, 0xed, 0x53, 0x45, 0x79, 0xb8, - 0x37, 0x4a, 0xe4, 0x5b, 0x30, 0xfa, 0xd8, 0x89, 0x1a, 0x47, 0xe2, 0xfd, 0x2a, 0xf9, 0xbc, 0x15, - 0x96, 0xcd, 0xcb, 0x5f, 0x58, 0x79, 0xa7, 0x44, 0xbe, 0x07, 0x43, 0x0f, 0x68, 0x84, 0x57, 0xa6, - 0xae, 0xab, 0x80, 0x06, 0x1e, 0x3c, 0xb8, 0xee, 0xa9, 0x70, 0x65, 0xd9, 0xe1, 0xa4, 0x23, 0x93, - 0xdc, 0x06, 0xe0, 0x02, 0x01, 0x29, 0x24, 0xab, 0xe7, 0x53, 0xdd, 0x26, 0x0f, 0x98, 0xf2, 0xd0, - 0xa2, 0x11, 0x3d, 0x6b, 0x93, 0x79, 0x3c, 0xda, 0x80, 0x09, 0xf5, 0xaa, 0xfe, 0x16, 0x5e, 0x56, - 0xb6, 0x12, 0xc4, 0xc2, 0x73, 0x50, 0xfb, 0x88, 0x7d, 0x15, 0x3c, 0xa9, 0x1b, 0xde, 0x6a, 0x45, - 0x49, 0x3a, 0xab, 0x5f, 0x8d, 0xd5, 0x45, 0xa8, 0x64, 0x22, 0x07, 0xd3, 0x70, 0xd7, 0xfc, 0x30, - 0x32, 0x71, 0x55, 0x49, 0x36, 0xee, 0xaf, 0xc3, 0xbc, 0xde, 0xae, 0xf9, 0x80, 0x62, 0x2c, 0x73, - 0xf3, 0xde, 0x65, 0x9c, 0xbf, 0x5e, 0x00, 0x21, 0xec, 0xb7, 0xbe, 0xbf, 0xde, 0x5b, 0x42, 0x71, - 0xb2, 0x02, 0x53, 0xb2, 0xad, 0xed, 0x36, 0xf5, 0x6a, 0xb5, 0x35, 0x7c, 0x41, 0x5d, 0x1e, 0xa2, - 0x6a, 0x65, 0x92, 0x3a, 0x49, 0x57, 0xb1, 0xad, 0xcf, 0xb8, 0xbd, 0x4a, 0x8a, 0xee, 0xb4, 0xc6, - 0x5b, 0x5f, 0xe6, 0xcb, 0x7e, 0x8f, 0xb8, 0x53, 0xc9, 0x50, 0xfe, 0xf7, 0x17, 0x49, 0x81, 0x01, - 0x34, 0x9f, 0x63, 0x42, 0xdc, 0x29, 0x91, 0x2f, 0x80, 0xa4, 0x4d, 0x12, 0xc5, 0xc2, 0x5c, 0xf3, - 0x4b, 0xb1, 0xb0, 0xc0, 0x9e, 0x59, 0x85, 0x29, 0x75, 0x77, 0x3d, 0xae, 0x27, 0x39, 0x7d, 0x29, - 0xd8, 0xc1, 0x66, 0x32, 0xc8, 0xec, 0x2f, 0x16, 0x10, 0xca, 0x2c, 0x27, 0x9f, 0xc2, 0x94, 0x58, - 0xfb, 0x46, 0x7f, 0xca, 0x4a, 0x8c, 0x09, 0xe3, 0x26, 0xb7, 0x27, 0x0f, 0x61, 0xa6, 0x96, 0x60, - 0x3c, 0x0f, 0x1e, 0xbc, 0x64, 0x92, 0xc0, 0xc2, 0x1a, 0x8d, 0x38, 0xe7, 0xb3, 0x69, 0x3d, 0x02, - 0xc2, 0x7d, 0x4b, 0x92, 0xdc, 0x33, 0x97, 0x3e, 0x27, 0x57, 0x12, 0x5d, 0x67, 0x85, 0x08, 0x86, - 0x72, 0x30, 0x77, 0x64, 0xbb, 0x3c, 0xb3, 0x21, 0x96, 0x2e, 0x3b, 0x6d, 0xe7, 0xc0, 0x6d, 0xb9, - 0x91, 0x4b, 0xd9, 0x3c, 0xea, 0x08, 0x7a, 0x95, 0x9c, 0xc7, 0x4b, 0xb9, 0x10, 0xe4, 0xb7, 0xf0, - 0xd5, 0xb8, 0x62, 0xeb, 0x8c, 0x7c, 0x2b, 0xcb, 0x88, 0xce, 0xb1, 0x2f, 0xe7, 0xdf, 0x39, 0x1b, - 0xb0, 0xb2, 0x87, 0xc7, 0x1f, 0xd0, 0x88, 0xa7, 0xec, 0x5f, 0x71, 0x22, 0x87, 0x28, 0xdf, 0x93, - 0x2a, 0x12, 0xcb, 0x5b, 0xe5, 0x0d, 0x57, 0x15, 0x35, 0xfa, 0x13, 0xb2, 0x0e, 0x65, 0xbe, 0x8d, - 0x68, 0x24, 0xae, 0xa4, 0x48, 0x08, 0x10, 0x27, 0x70, 0x8e, 0xc3, 0xdc, 0xd9, 0xba, 0xcd, 0x43, - 0x05, 0x88, 0xca, 0x76, 0xae, 0xe9, 0xa9, 0x53, 0x46, 0x99, 0x7a, 0x49, 0x97, 0xcd, 0x88, 0x4d, - 0x43, 0x1a, 0xc9, 0x4b, 0xee, 0x3c, 0xdf, 0xda, 0x6b, 0xb1, 0xce, 0x90, 0xae, 0x8d, 0x25, 0x48, - 0xe2, 0x41, 0x96, 0xfd, 0x7b, 0x44, 0xe5, 0xa0, 0xcb, 0x20, 0xfa, 0xa6, 0xa1, 0xda, 0x9c, 0x8f, - 0xee, 0xbb, 0xb8, 0x95, 0xe1, 0xc5, 0xfe, 0x99, 0xb8, 0x6f, 0x5a, 0xf2, 0xe3, 0xf9, 0x71, 0x0d, - 0x6b, 0x7f, 0x11, 0x25, 0x23, 0xdb, 0x6b, 0x99, 0x26, 0xdc, 0x09, 0x02, 0xea, 0x71, 0xe4, 0x3c, - 0xb5, 0x25, 0x0b, 0xfb, 0x13, 0x94, 0x60, 0x1a, 0x36, 0xbf, 0xe3, 0xd0, 0x8d, 0x04, 0xcf, 0x0f, - 0x70, 0xa7, 0x44, 0x3e, 0x80, 0x61, 0xd1, 0x47, 0x86, 0x64, 0x74, 0x3a, 0x2c, 0xe8, 0x35, 0x62, - 0x02, 0x67, 0x12, 0xf6, 0xd9, 0x84, 0xc9, 0x9b, 0x7d, 0xde, 0xe7, 0x0f, 0xd8, 0x9e, 0xdd, 0x7c, - 0x19, 0xcc, 0x65, 0xb9, 0x79, 0x23, 0xe6, 0x9c, 0xba, 0x67, 0x9e, 0x48, 0x32, 0x5d, 0x4c, 0x84, - 0xa9, 0xdf, 0xf8, 0xa2, 0x92, 0x7a, 0x18, 0x45, 0xa9, 0xdf, 0x46, 0x71, 0xb7, 0x2d, 0x7b, 0x1d, - 0xca, 0xd5, 0x06, 0x6e, 0x28, 0x2a, 0xdd, 0xb4, 0xb2, 0x7d, 0x92, 0x15, 0x92, 0xd6, 0x4c, 0x32, - 0x7b, 0xf5, 0x06, 0x75, 0xf0, 0xc1, 0xc8, 0x59, 0xa5, 0xa1, 0x24, 0xaa, 0xb2, 0x31, 0x0a, 0x6c, - 0x9d, 0xe9, 0x65, 0x66, 0x9d, 0xb5, 0xbe, 0x1e, 0x99, 0x8f, 0x50, 0x60, 0x68, 0xa9, 0xb8, 0x2f, - 0x26, 0xf1, 0x95, 0x55, 0x28, 0xc3, 0x9d, 0x15, 0x68, 0x15, 0x26, 0xc5, 0xf3, 0x74, 0x8a, 0x2d, - 0x79, 0xd8, 0x79, 0xcd, 0x7f, 0x07, 0x26, 0x56, 0x99, 0x40, 0xef, 0x34, 0x5d, 0xfe, 0x48, 0x2e, - 0x31, 0x5f, 0x3d, 0xcd, 0x45, 0x5c, 0x93, 0x29, 0x39, 0xb4, 0x1c, 0xd5, 0x6a, 0x4f, 0x49, 0xa7, - 0x01, 0x9f, 0x9f, 0x96, 0x64, 0xf5, 0x74, 0xd6, 0xc2, 0x65, 0x30, 0x9b, 0x93, 0x15, 0x9a, 0xbc, - 0x61, 0x58, 0xa2, 0x79, 0xa9, 0x9d, 0x33, 0x74, 0xcf, 0xcf, 0xb5, 0x14, 0x79, 0x39, 0x34, 0x8b, - 0xd3, 0x45, 0xe7, 0x8e, 0x5b, 0x3d, 0x6b, 0x99, 0x99, 0xd6, 0x99, 0xbc, 0x6d, 0x52, 0x2f, 0x48, - 0xfd, 0x9c, 0xdb, 0x02, 0x5a, 0xfa, 0x66, 0xd6, 0x61, 0x72, 0xb5, 0x38, 0x39, 0xb2, 0x66, 0xe9, - 0xe7, 0xa4, 0x2b, 0x7e, 0x88, 0xcb, 0x2c, 0xce, 0xa3, 0x47, 0x74, 0xbb, 0x39, 0x99, 0x46, 0x50, - 0xe9, 0x72, 0xd9, 0xa9, 0x87, 0x77, 0x60, 0x32, 0x91, 0xd4, 0x57, 0x39, 0x78, 0xb2, 0xd3, 0x0a, - 0xcf, 0x5f, 0xcd, 0xab, 0x56, 0x0e, 0xd7, 0x72, 0x32, 0x57, 0xa9, 0x1a, 0x72, 0x4e, 0x16, 0x5a, - 0x35, 0xe4, 0xdc, 0x24, 0xa7, 0x0f, 0xa1, 0x9c, 0x4c, 0x93, 0xa8, 0x88, 0xe6, 0xe4, 0x4f, 0xcc, - 0x9d, 0x93, 0xfb, 0x30, 0xad, 0xcf, 0xa8, 0x1a, 0x77, 0x9e, 0xf4, 0xcf, 0xa3, 0xb3, 0x0b, 0x33, - 0x99, 0x59, 0x0d, 0xd5, 0x16, 0x5b, 0x94, 0xf3, 0x30, 0x97, 0x2a, 0x85, 0x8b, 0xd9, 0x89, 0x4d, - 0xc9, 0xeb, 0xa6, 0xff, 0x20, 0x3b, 0xcd, 0xe3, 0xfc, 0x1b, 0x5d, 0xa0, 0x04, 0x43, 0xbf, 0xc4, - 0x1d, 0x30, 0xd5, 0xc6, 0x75, 0xcd, 0xa3, 0x90, 0xd3, 0x80, 0x55, 0x04, 0xa2, 0xd6, 0xc0, 0x74, - 0x56, 0xda, 0xe6, 0x5c, 0x16, 0xbf, 0x96, 0x4f, 0x33, 0x5e, 0x58, 0xfb, 0xf2, 0x0d, 0xc8, 0x5c, - 0xce, 0x14, 0x26, 0xc0, 0x2c, 0x30, 0x49, 0xe7, 0xd5, 0x7a, 0x38, 0x7b, 0x97, 0xf3, 0xdd, 0x4b, - 0xd3, 0x59, 0x69, 0x57, 0x93, 0xde, 0x9f, 0xac, 0xac, 0x9a, 0x8a, 0x0d, 0x85, 0x79, 0x5b, 0xf7, - 0xb9, 0x27, 0xc8, 0xa4, 0xae, 0x7b, 0x82, 0x32, 0x49, 0x5f, 0xcb, 0x07, 0x88, 0x57, 0x44, 0x46, - 0x76, 0x6a, 0xa2, 0xdb, 0x59, 0xd9, 0x09, 0x37, 0xd5, 0x8a, 0x28, 0x4a, 0x6e, 0x6d, 0xcb, 0x8f, - 0x2e, 0x87, 0x2d, 0x05, 0xc9, 0x46, 0x0b, 0xcc, 0xa1, 0xb9, 0x78, 0xe2, 0x12, 0xdd, 0x3e, 0xef, - 0xb4, 0x7d, 0x09, 0x97, 0x72, 0x13, 0x8b, 0x92, 0xb7, 0x52, 0x1f, 0x74, 0x0e, 0x27, 0xf2, 0x7b, - 0x3a, 0x6e, 0xe4, 0x04, 0x55, 0xae, 0xb0, 0x44, 0xfa, 0xd1, 0x94, 0xc4, 0xce, 0xc8, 0x4d, 0xfa, - 0x00, 0x35, 0x5f, 0x2d, 0xbf, 0x68, 0xee, 0x58, 0xaf, 0x64, 0xd1, 0x09, 0xd3, 0x32, 0x55, 0xeb, - 0x97, 0xd4, 0xc4, 0x92, 0x15, 0xe7, 0x91, 0xa9, 0x67, 0xe9, 0x5a, 0x1e, 0x9d, 0x15, 0x18, 0xd5, - 0x12, 0x93, 0x92, 0x4b, 0x06, 0x9b, 0x8c, 0x5d, 0x72, 0xde, 0x18, 0x9c, 0xb9, 0x41, 0x2e, 0xa3, - 0xcf, 0x59, 0xa5, 0x37, 0xcd, 0xed, 0xc5, 0xe5, 0x34, 0x0d, 0xc3, 0xdf, 0xac, 0xb8, 0xc0, 0x7b, - 0xb3, 0x90, 0x64, 0x8e, 0xd1, 0xa1, 0xfc, 0x21, 0x11, 0x9d, 0x35, 0x5d, 0xba, 0x94, 0xaf, 0xa1, - 0x4e, 0x89, 0xec, 0x67, 0xf8, 0x48, 0xbb, 0x7c, 0x71, 0xe8, 0xa2, 0x72, 0x9e, 0x69, 0xa5, 0x05, - 0xbe, 0x8c, 0x1d, 0x0c, 0xc9, 0xce, 0xc8, 0xd4, 0xaa, 0x64, 0x68, 0x61, 0x22, 0xd7, 0x0c, 0xed, - 0x4c, 0x49, 0xe5, 0x5c, 0x8a, 0x85, 0xa9, 0x5b, 0x73, 0x7b, 0xfa, 0x23, 0x4d, 0x2a, 0xa7, 0xf2, - 0xb1, 0x92, 0x1b, 0x49, 0xd5, 0x2c, 0x2f, 0x65, 0x6b, 0x81, 0xd4, 0x9f, 0xce, 0x4a, 0xe5, 0xaa, - 0x39, 0x80, 0x73, 0xf3, 0xbc, 0x66, 0x70, 0x41, 0x89, 0xb7, 0x1c, 0x6a, 0x05, 0x89, 0x5d, 0x73, - 0x7b, 0xf8, 0x03, 0x4d, 0xbc, 0x25, 0x12, 0xb0, 0x2a, 0x83, 0xbb, 0x4b, 0x86, 0xd6, 0x5c, 0xda, - 0x5b, 0x18, 0xc4, 0x9f, 0xce, 0x9e, 0xaa, 0x74, 0x97, 0xa2, 0xdc, 0xaa, 0x99, 0xfe, 0xe1, 0x99, - 0xf4, 0x10, 0x19, 0xbd, 0x8b, 0x09, 0xef, 0x6e, 0xb7, 0x8e, 0x29, 0x39, 0x9c, 0x91, 0x75, 0x35, - 0x21, 0x87, 0xf3, 0xf3, 0xb2, 0x16, 0x18, 0x3a, 0x93, 0x35, 0xf7, 0xd0, 0xd3, 0x92, 0xa6, 0x2a, - 0x33, 0x27, 0x9d, 0xc7, 0x55, 0x89, 0x98, 0xac, 0x1c, 0xab, 0xdb, 0x4c, 0xc3, 0xe1, 0xfa, 0xb9, - 0x9e, 0xfe, 0x92, 0xcc, 0xe7, 0x67, 0xfd, 0x54, 0xe2, 0x26, 0x33, 0x5f, 0xa6, 0x46, 0x50, 0xcf, - 0x3d, 0xa9, 0x08, 0x66, 0xa4, 0xc1, 0x54, 0x04, 0x33, 0x93, 0x55, 0xde, 0x46, 0xbf, 0x8a, 0xed, - 0xb7, 0xa8, 0xee, 0x57, 0xd1, 0x92, 0x19, 0x26, 0xdc, 0x1a, 0xe4, 0x63, 0x74, 0x6a, 0x14, 0x7b, - 0x42, 0x66, 0x4d, 0x4a, 0x7a, 0xec, 0xc8, 0x88, 0xca, 0x14, 0xa9, 0xbc, 0xe8, 0xc9, 0x64, 0x95, - 0xf3, 0x73, 0xe9, 0x0a, 0x95, 0x79, 0x1a, 0xe2, 0xac, 0x90, 0xca, 0x47, 0x91, 0x4a, 0x14, 0x99, - 0xec, 0xf3, 0x7b, 0xd2, 0x29, 0x62, 0xa0, 0xa5, 0xf2, 0x44, 0x26, 0xd1, 0xbe, 0x03, 0x63, 0x71, - 0x4e, 0xc8, 0xfd, 0x45, 0x0d, 0x31, 0x91, 0x28, 0x32, 0x89, 0xf8, 0x81, 0x3c, 0x38, 0xc1, 0xf6, - 0xcc, 0xca, 0x62, 0xff, 0xc9, 0x27, 0xd2, 0x09, 0x63, 0xf4, 0x34, 0x95, 0x61, 0xb2, 0x40, 0x72, - 0x8f, 0xe9, 0x89, 0xac, 0xd4, 0xba, 0xc8, 0x48, 0x45, 0xa7, 0xd6, 0x45, 0x56, 0x2a, 0xb9, 0xf8, - 0x60, 0xe1, 0x0b, 0xe9, 0x71, 0x88, 0x89, 0x5e, 0x31, 0xba, 0x95, 0xa2, 0x7b, 0x35, 0xaf, 0x3a, - 0x49, 0xba, 0x06, 0xe5, 0x64, 0xd6, 0x2d, 0x65, 0xae, 0xe5, 0xa4, 0x47, 0x53, 0x36, 0x60, 0x6e, - 0xba, 0xae, 0x1d, 0xe9, 0x3e, 0x37, 0xe9, 0x5e, 0xcf, 0xee, 0x94, 0x4e, 0xba, 0x58, 0x2d, 0x8b, - 0x13, 0x70, 0xe9, 0x86, 0x74, 0x2a, 0xc1, 0x97, 0xae, 0x96, 0x65, 0xe4, 0xec, 0x72, 0xe5, 0x1b, - 0x1a, 0xd9, 0x79, 0x40, 0xdf, 0x36, 0x2d, 0xdc, 0x82, 0x37, 0x5f, 0xbb, 0x1e, 0x32, 0x93, 0x5f, - 0x83, 0xd9, 0x9c, 0xe7, 0x31, 0xc9, 0x1b, 0x09, 0x47, 0x6c, 0xf6, 0xf3, 0x99, 0x6a, 0x81, 0x64, - 0x66, 0xc6, 0xdc, 0xc4, 0xe8, 0x04, 0xe3, 0xb6, 0x6c, 0xea, 0xc4, 0xef, 0xb1, 0x1b, 0x1d, 0xf1, - 0x04, 0x90, 0x9a, 0xcc, 0xcd, 0xbc, 0x66, 0x4b, 0x6a, 0x68, 0xaf, 0x18, 0xa5, 0x19, 0x87, 0x7e, - 0x19, 0x04, 0xe7, 0xb3, 0x09, 0x62, 0xce, 0xf0, 0x1d, 0x79, 0xb4, 0x93, 0xec, 0xa6, 0x3e, 0xfc, - 0xac, 0x0b, 0xc2, 0xb9, 0xdd, 0xdc, 0x91, 0x0a, 0x56, 0x36, 0xc5, 0xfc, 0x5b, 0xcd, 0xb9, 0x14, - 0x1f, 0x32, 0x8a, 0xa9, 0x8b, 0xca, 0x24, 0x07, 0xbc, 0x58, 0x7a, 0xd8, 0x72, 0xbf, 0x36, 0xb1, - 0x16, 0xb5, 0xfe, 0xe5, 0x5d, 0x89, 0xce, 0xed, 0xdf, 0xaa, 0xfc, 0x9e, 0xb2, 0xfb, 0x77, 0xd6, - 0x1d, 0x5b, 0x1d, 0x8f, 0x25, 0xee, 0xca, 0x1b, 0x03, 0xd5, 0xca, 0xe7, 0x73, 0xca, 0xc9, 0x16, - 0x86, 0x1b, 0x25, 0x4b, 0x35, 0xc3, 0x35, 0xfb, 0x32, 0x7e, 0x2e, 0x3d, 0xbe, 0x8e, 0x8d, 0xcb, - 0xcc, 0xe7, 0x59, 0xc7, 0x89, 0x5b, 0xd0, 0x62, 0x1d, 0x1b, 0xa5, 0xe7, 0x5b, 0xc7, 0x09, 0x82, - 0xe6, 0x3a, 0x4e, 0x76, 0x33, 0xe9, 0x08, 0xc8, 0x9d, 0xd5, 0x64, 0x37, 0xd5, 0x3a, 0xce, 0xa6, - 0x98, 0x7f, 0xe9, 0x3c, 0x97, 0xa2, 0x5a, 0xc7, 0x26, 0xc5, 0x1c, 0xf0, 0x33, 0xae, 0xe3, 0x64, - 0x23, 0xe6, 0x3a, 0x3e, 0x57, 0xff, 0xd4, 0x3a, 0xce, 0xee, 0xdf, 0xb9, 0xd7, 0x71, 0xe2, 0x95, - 0x06, 0x63, 0xa0, 0x59, 0xeb, 0x38, 0x09, 0xcf, 0xd7, 0x71, 0xb2, 0x34, 0xe1, 0x80, 0x29, 0x58, - 0xc7, 0x49, 0xcc, 0xcf, 0x90, 0x5e, 0xe2, 0x86, 0xf9, 0x59, 0x56, 0x72, 0xee, 0xe5, 0x74, 0xf2, - 0x18, 0xbd, 0x7f, 0x89, 0xf2, 0xb3, 0xad, 0xe6, 0x85, 0x3c, 0xa2, 0xb8, 0x9e, 0xf7, 0x25, 0x13, - 0x93, 0xdd, 0x35, 0x5d, 0x5b, 0xd9, 0x17, 0xec, 0x0b, 0x3a, 0xbc, 0xcf, 0xd6, 0x4d, 0xb3, 0x80, - 0x6e, 0xd1, 0xfb, 0x00, 0x05, 0x74, 0x95, 0x1d, 0x94, 0xa4, 0x9b, 0x8b, 0x52, 0xbc, 0xbe, 0x3f, - 0x97, 0xe7, 0x1f, 0x49, 0xbc, 0xc5, 0x84, 0x65, 0x75, 0xee, 0x9e, 0x2a, 0x0b, 0x2b, 0xd9, 0xd3, - 0xf3, 0xae, 0xf3, 0x4d, 0xa9, 0x3d, 0xa4, 0x1e, 0x16, 0x49, 0x0c, 0x5a, 0x5f, 0xeb, 0xb9, 0x35, - 0x64, 0x17, 0x5d, 0xbd, 0xe9, 0x72, 0xcd, 0x4d, 0x9c, 0xf7, 0x82, 0x49, 0x57, 0xaa, 0xa9, 0x27, - 0x12, 0x74, 0xaa, 0x79, 0xef, 0x27, 0x28, 0xaa, 0x69, 0xec, 0x4f, 0xd1, 0x75, 0x26, 0xee, 0x74, - 0x79, 0x4f, 0xfc, 0x7c, 0x3b, 0x67, 0xca, 0x08, 0x89, 0x62, 0xb0, 0x18, 0x89, 0xf6, 0x5d, 0x71, - 0xc0, 0x27, 0x0b, 0x73, 0x99, 0x9f, 0x85, 0x4f, 0x3e, 0x85, 0xb2, 0x10, 0x6f, 0x31, 0x81, 0x2c, - 0xc0, 0xdc, 0xa9, 0x5b, 0x92, 0x1e, 0xbb, 0x33, 0xf4, 0xe0, 0x2c, 0x9e, 0xba, 0xb3, 0x70, 0x22, - 0xdf, 0xad, 0xc5, 0xb6, 0xc3, 0xdd, 0xa0, 0x13, 0x46, 0xb4, 0x99, 0x76, 0x47, 0x99, 0x9d, 0x91, - 0x81, 0x13, 0x26, 0xf8, 0xfe, 0x22, 0x59, 0x47, 0xd9, 0x66, 0x16, 0x17, 0xf9, 0xeb, 0xb2, 0xc9, - 0xa0, 0xe8, 0x59, 0x53, 0x97, 0x87, 0xcc, 0x3e, 0xe5, 0xb5, 0x9d, 0xdf, 0x29, 0xc5, 0xa2, 0x33, - 0x8e, 0x2e, 0x8f, 0x45, 0xdc, 0xa0, 0xe6, 0xbe, 0xc3, 0x6e, 0x9c, 0x49, 0x5e, 0x67, 0x22, 0xdf, - 0x87, 0x11, 0x89, 0xdc, 0x9d, 0x21, 0x49, 0x6c, 0x64, 0xc8, 0x0a, 0x8c, 0x1b, 0x77, 0xb5, 0x94, - 0x75, 0x93, 0x75, 0x83, 0xab, 0x60, 0x9e, 0xc7, 0x8d, 0x3b, 0x59, 0x8a, 0x4a, 0xd6, 0x4d, 0xad, - 0x5c, 0x2a, 0xdf, 0x83, 0x51, 0xc1, 0xd2, 0x42, 0x6e, 0xe4, 0x3b, 0xeb, 0x66, 0xb4, 0xb8, 0xe7, - 0x4e, 0xd3, 0x8d, 0x96, 0x7d, 0xef, 0x89, 0x7b, 0xd8, 0x95, 0x31, 0x69, 0x94, 0xfd, 0x45, 0xf2, - 0x43, 0x4c, 0x97, 0x28, 0x93, 0x58, 0xd2, 0xe8, 0xb9, 0x1f, 0x3c, 0x75, 0xbd, 0xc3, 0x2e, 0x24, - 0xaf, 0x99, 0x24, 0x93, 0x78, 0x32, 0xb4, 0xe4, 0x87, 0x30, 0x5f, 0xcb, 0x27, 0xde, 0x95, 0x48, - 0xf1, 0xf6, 0x52, 0x83, 0x05, 0x0c, 0xae, 0x39, 0x6f, 0xdf, 0x0b, 0x89, 0x7e, 0xc1, 0xdf, 0xa6, - 0x92, 0x8e, 0xfe, 0x86, 0x1f, 0x34, 0xbb, 0x53, 0xac, 0x98, 0xe1, 0xba, 0x09, 0x34, 0xc9, 0x8c, - 0x2f, 0xe0, 0x52, 0x2d, 0x97, 0x74, 0x37, 0x12, 0xdd, 0x34, 0xc9, 0xcb, 0xc8, 0x8a, 0x73, 0xf6, - 0xbb, 0x90, 0xe6, 0x3a, 0xca, 0x34, 0xb6, 0x0f, 0xed, 0x04, 0xf4, 0x09, 0x0d, 0x30, 0x28, 0xbc, - 0x5b, 0x38, 0xb4, 0x09, 0x2e, 0x47, 0xbe, 0x0e, 0x17, 0x6a, 0x29, 0x52, 0x79, 0x28, 0xc5, 0xbd, - 0x7a, 0x08, 0x53, 0x38, 0xd2, 0x33, 0xf6, 0xab, 0x4b, 0x10, 0xd1, 0xe8, 0x03, 0x1a, 0xed, 0xad, - 0x77, 0xe1, 0x92, 0xbc, 0xb5, 0x20, 0x01, 0xf7, 0xef, 0x32, 0xcc, 0x9a, 0x86, 0x99, 0x86, 0xc8, - 0xfd, 0x78, 0xbf, 0x2f, 0x0f, 0x52, 0xba, 0x36, 0x9b, 0x47, 0xe1, 0x1e, 0xca, 0x42, 0x11, 0x18, - 0xad, 0xb9, 0x20, 0x8d, 0xac, 0xc6, 0xf3, 0xe3, 0x7a, 0x8c, 0x74, 0x48, 0xaa, 0xdc, 0xfc, 0xd3, - 0xf3, 0x1f, 0x6b, 0xa1, 0x17, 0x99, 0x89, 0x91, 0x93, 0x24, 0xb8, 0x0b, 0x75, 0xc3, 0x6f, 0x3c, - 0xd5, 0x5d, 0xa8, 0x5a, 0x42, 0xdd, 0x79, 0x33, 0xdd, 0xad, 0x90, 0xf8, 0x98, 0xf3, 0x56, 0x8f, - 0x0b, 0xd3, 0x53, 0xea, 0xea, 0x2e, 0x54, 0x33, 0xf9, 0xef, 0x3d, 0xe9, 0x5b, 0xc4, 0x06, 0x4d, - 0xca, 0xb9, 0xac, 0x51, 0x6e, 0x45, 0x44, 0x32, 0xdd, 0x8a, 0x7a, 0x47, 0xf3, 0x0f, 0x02, 0x48, - 0x3a, 0xfb, 0xaf, 0x32, 0x56, 0x72, 0x13, 0x03, 0x17, 0x84, 0x77, 0x4d, 0x65, 0x24, 0x2f, 0x57, - 0xe6, 0x5d, 0x7e, 0x62, 0xf3, 0x79, 0x33, 0x56, 0xe9, 0x4e, 0x89, 0x6c, 0xc1, 0xc5, 0x07, 0x34, - 0x12, 0x32, 0xce, 0xa6, 0x61, 0x14, 0xb8, 0x8d, 0xa8, 0xf0, 0x54, 0x51, 0xda, 0x26, 0x19, 0x38, - 0xfb, 0xef, 0x32, 0x7a, 0xb5, 0x6c, 0x7a, 0x85, 0x78, 0x05, 0x11, 0xb4, 0xe2, 0xa8, 0xe2, 0x3c, - 0x5d, 0xcc, 0x5f, 0xe2, 0x43, 0x3c, 0x40, 0x27, 0x1f, 0xb5, 0x1c, 0x67, 0xa5, 0x10, 0xd6, 0xd6, - 0x2d, 0x18, 0xe4, 0x48, 0xb9, 0x1b, 0xea, 0x98, 0x8e, 0x43, 0xee, 0xc2, 0x88, 0x8a, 0xb0, 0x21, - 0x46, 0x55, 0x6e, 0xbf, 0xee, 0xc2, 0x08, 0x37, 0xad, 0xce, 0x8e, 0xf2, 0x31, 0x8c, 0xa8, 0x90, - 0x9c, 0x73, 0xef, 0xf4, 0x9f, 0xc2, 0xb8, 0x1e, 0x9c, 0x73, 0x7e, 0x46, 0x7e, 0x0f, 0xcf, 0x7e, - 0xe5, 0x11, 0x4b, 0x3e, 0xfe, 0x4c, 0x22, 0x53, 0x89, 0x60, 0x29, 0x17, 0x90, 0xb2, 0x30, 0xb7, - 0xfb, 0x17, 0x52, 0xd8, 0xe4, 0x63, 0x79, 0x5f, 0x4a, 0x21, 0xa7, 0x81, 0x0a, 0x78, 0x36, 0xc1, - 0xd9, 0xfc, 0x32, 0xc8, 0x4a, 0xc0, 0x76, 0xed, 0xf6, 0x59, 0xce, 0xa8, 0xbb, 0xb3, 0x2e, 0x8f, - 0xca, 0x36, 0x6a, 0x69, 0xa9, 0x1c, 0x3a, 0xf9, 0x84, 0xae, 0xe6, 0xa7, 0xdd, 0xc1, 0xc9, 0x78, - 0x88, 0x56, 0x60, 0xaa, 0x36, 0x77, 0x78, 0x05, 0x69, 0x7c, 0x62, 0xb3, 0x37, 0x4d, 0xae, 0x00, - 0xad, 0xc8, 0x8a, 0x16, 0xb7, 0x40, 0x5f, 0x09, 0xb9, 0x75, 0x19, 0xe3, 0x78, 0xf6, 0xc1, 0xe6, - 0xf7, 0xec, 0x72, 0xc6, 0xa9, 0x78, 0xd7, 0xb9, 0xc8, 0x23, 0xf7, 0x6b, 0xa8, 0x1d, 0x66, 0xa7, - 0x6e, 0xcf, 0x25, 0x76, 0x43, 0x0b, 0xac, 0x28, 0x4e, 0xfa, 0xfe, 0x14, 0x2f, 0xa2, 0x65, 0x67, - 0x19, 0x7a, 0xb3, 0x0b, 0x15, 0xc9, 0x89, 0xb7, 0xba, 0xc2, 0xa9, 0x33, 0xd6, 0xcb, 0x7c, 0x87, - 0xcd, 0x6e, 0xaf, 0x4b, 0xd6, 0xa4, 0x8c, 0x63, 0xef, 0x9c, 0xbc, 0xe8, 0x92, 0xa0, 0x19, 0x40, - 0x5a, 0x38, 0x86, 0x3c, 0xf6, 0x7f, 0x06, 0x95, 0x38, 0x7a, 0xe4, 0x7c, 0x93, 0x90, 0x1f, 0xb7, - 0x48, 0xd2, 0xd9, 0xe2, 0x49, 0x51, 0x76, 0x83, 0xf9, 0xeb, 0x79, 0x1c, 0x0e, 0xb5, 0xb0, 0x24, - 0x11, 0xf7, 0x96, 0xc8, 0xb7, 0x95, 0x97, 0xb9, 0xab, 0xc0, 0x0f, 0x2b, 0x6e, 0xe6, 0xbd, 0x12, - 0x42, 0xe9, 0xd9, 0x3e, 0x3f, 0x21, 0x15, 0xdc, 0x91, 0x20, 0x64, 0x15, 0x4c, 0xef, 0x79, 0x62, - 0xd7, 0x92, 0x53, 0x71, 0xde, 0x09, 0x75, 0xe2, 0xdb, 0x68, 0xe9, 0x94, 0xf6, 0x4a, 0x97, 0xcb, - 0x4d, 0xaf, 0xaf, 0x66, 0xb7, 0x20, 0x1f, 0xfe, 0x32, 0xfb, 0x4c, 0x79, 0x13, 0x46, 0x3e, 0xed, - 0x65, 0x7b, 0x23, 0x76, 0x2b, 0x64, 0x24, 0xda, 0x9e, 0x07, 0x59, 0x69, 0x6f, 0x90, 0x9a, 0x7c, - 0x56, 0x37, 0xeb, 0x0d, 0x1c, 0x75, 0x33, 0x26, 0xab, 0xb2, 0xc0, 0xba, 0xa8, 0xc9, 0x87, 0x74, - 0x5f, 0x25, 0xd1, 0x3a, 0xcc, 0xe6, 0xbc, 0x1c, 0xa4, 0x4e, 0x58, 0x8b, 0x5f, 0x16, 0x9a, 0x2f, - 0x6e, 0x98, 0xfc, 0x10, 0x66, 0x32, 0x9f, 0x16, 0x52, 0x5e, 0xe2, 0xa2, 0x87, 0x87, 0xba, 0x11, - 0x7f, 0x0a, 0x73, 0x79, 0xc9, 0xaf, 0xe3, 0x9b, 0x3a, 0xc5, 0x19, 0xc9, 0x95, 0x4c, 0xed, 0x9a, - 0x45, 0x7b, 0x0b, 0xa6, 0xb3, 0x12, 0x4a, 0xab, 0x8f, 0xa3, 0x20, 0xdb, 0x74, 0xe6, 0x75, 0xa0, - 0x1d, 0x98, 0xc9, 0x4c, 0xea, 0xac, 0x38, 0x53, 0x94, 0xf2, 0x39, 0x93, 0xe2, 0xe7, 0x30, 0x9b, - 0x93, 0xc1, 0x38, 0x3e, 0x2e, 0x2f, 0xcc, 0x70, 0x5c, 0x10, 0xac, 0x34, 0x9f, 0x9f, 0x1c, 0x57, - 0xc5, 0xa8, 0x75, 0xcd, 0x9f, 0x3b, 0x9f, 0x99, 0x31, 0x9c, 0xec, 0xe2, 0x22, 0xcc, 0xca, 0x96, - 0xab, 0x2f, 0xc2, 0x82, 0x6c, 0xba, 0x39, 0xd7, 0xb8, 0x66, 0x73, 0x12, 0xe4, 0x16, 0x50, 0x3d, - 0x43, 0x6f, 0xb7, 0xa4, 0xfc, 0x37, 0x53, 0x89, 0x26, 0xe2, 0x9e, 0x33, 0xf3, 0x8c, 0x66, 0xf6, - 0x53, 0x7b, 0x5f, 0xa1, 0xd5, 0x2a, 0x50, 0x83, 0x88, 0xfe, 0xc0, 0x02, 0x83, 0x44, 0x47, 0xfb, - 0xb8, 0x8e, 0x5b, 0x24, 0x51, 0x53, 0xc8, 0xa8, 0x78, 0x7e, 0x04, 0x63, 0x35, 0xbd, 0xf1, 0x8c, - 0x46, 0x72, 0x17, 0x85, 0xba, 0xc8, 0xd3, 0xbd, 0xef, 0x05, 0xc1, 0x9e, 0x6a, 0x73, 0x38, 0xd3, - 0x28, 0x72, 0xc3, 0x5b, 0x8c, 0x74, 0x35, 0x4a, 0x52, 0x67, 0x65, 0x93, 0x52, 0xe1, 0x2d, 0xd9, - 0x19, 0x6e, 0xea, 0xfc, 0x81, 0xfd, 0x64, 0xb2, 0x30, 0x62, 0x75, 0x4f, 0xa4, 0xa7, 0xc2, 0xda, - 0x0b, 0xb3, 0x8d, 0xf1, 0x58, 0x9c, 0x38, 0x41, 0x8f, 0x1e, 0x8b, 0x93, 0x4a, 0xfb, 0xa3, 0xc7, - 0xe2, 0x64, 0xe4, 0xf4, 0x59, 0x45, 0x5a, 0x71, 0x66, 0x82, 0x02, 0x87, 0x81, 0x22, 0x93, 0x91, - 0x00, 0xe1, 0x91, 0xfe, 0x4c, 0x07, 0xcf, 0x67, 0x50, 0xe0, 0x0f, 0x4d, 0x3e, 0xcf, 0x91, 0x48, - 0x80, 0xf0, 0x10, 0xca, 0xc9, 0xb7, 0xdc, 0x94, 0x3b, 0x2a, 0xe7, 0x91, 0xb7, 0x82, 0x25, 0x06, - 0xf1, 0x8b, 0x6d, 0xca, 0xe9, 0x93, 0x7a, 0xc4, 0x6d, 0xfe, 0x52, 0x46, 0x8d, 0x52, 0xd7, 0xc6, - 0xf4, 0xf7, 0xdd, 0x54, 0x38, 0x59, 0xc6, 0xa3, 0x6f, 0xf3, 0x97, 0x33, 0xeb, 0x04, 0xa1, 0x88, - 0xe7, 0x80, 0xcc, 0xce, 0x37, 0x19, 0xdf, 0xa1, 0x2a, 0x80, 0x91, 0xcd, 0xdc, 0x3c, 0x0b, 0xa8, - 0x68, 0x95, 0xaa, 0x7c, 0x0a, 0x19, 0x49, 0x2e, 0xdf, 0xca, 0xb8, 0xeb, 0x60, 0x40, 0xc4, 0x91, - 0x56, 0xc5, 0x19, 0x37, 0xc9, 0x63, 0xf9, 0xbe, 0x7d, 0x4e, 0x4b, 0xdd, 0x08, 0xe4, 0xce, 0xe0, - 0x63, 0xf9, 0xa2, 0xfd, 0xab, 0x26, 0x7c, 0x00, 0x0b, 0x89, 0xab, 0x14, 0x26, 0xe1, 0x9b, 0xd9, - 0xf7, 0x2d, 0x32, 0xd9, 0x93, 0xaf, 0x0f, 0x5f, 0x4b, 0xdf, 0xbb, 0x48, 0xcc, 0xfb, 0x79, 0x65, - 0xd5, 0x26, 0x4c, 0xa0, 0x78, 0x90, 0xe9, 0x5a, 0xe3, 0xd7, 0x5d, 0xcc, 0xe2, 0xe4, 0x33, 0x43, - 0xc9, 0x5a, 0x15, 0x8e, 0x3a, 0x26, 0xee, 0xe3, 0xf2, 0xe4, 0xaf, 0xf3, 0xe6, 0x25, 0x5d, 0x2c, - 0xcc, 0xda, 0x7d, 0x44, 0x4e, 0x59, 0xf2, 0x3d, 0x98, 0x8c, 0xaf, 0xe9, 0x72, 0x12, 0x19, 0x60, - 0x05, 0x4e, 0xa8, 0xc9, 0xf8, 0xae, 0xee, 0xf9, 0xd1, 0xd7, 0xe4, 0x16, 0x12, 0xa3, 0x5f, 0x49, - 0x5d, 0x41, 0x31, 0xc6, 0x70, 0x96, 0x9d, 0x44, 0xe3, 0xed, 0x79, 0x67, 0xa7, 0x81, 0x9f, 0x5b, - 0xf6, 0xc3, 0x85, 0xfa, 0xe7, 0x56, 0xf8, 0xb8, 0xa2, 0x52, 0x5b, 0x73, 0xe8, 0x6c, 0xc2, 0x6b, - 0xf8, 0xd8, 0xc9, 0x0e, 0x7f, 0xde, 0x2e, 0x1b, 0x2a, 0xbf, 0xef, 0xc9, 0x27, 0x52, 0x5a, 0x70, - 0xbd, 0xeb, 0xcb, 0x8d, 0xe4, 0xb6, 0x11, 0x3e, 0xd2, 0xfd, 0x8d, 0xc7, 0xa2, 0x6b, 0x5f, 0x59, - 0x0f, 0x20, 0xaa, 0xfd, 0xb1, 0xe0, 0x2d, 0x46, 0xb5, 0x3f, 0x16, 0xbe, 0xa0, 0xf8, 0x39, 0x26, - 0x8d, 0x10, 0x7b, 0x0b, 0x3e, 0x60, 0x44, 0x3d, 0xfe, 0xa4, 0x73, 0xe1, 0x91, 0xca, 0x75, 0xf3, - 0xc0, 0x31, 0x85, 0x88, 0xb6, 0xc8, 0x55, 0x61, 0x41, 0xe5, 0x11, 0xef, 0x4e, 0xa4, 0x20, 0x6c, - 0xf9, 0x2a, 0x5f, 0x80, 0xe7, 0xee, 0x79, 0x4e, 0xf9, 0xd2, 0xca, 0xcf, 0xff, 0xf3, 0xd5, 0xd2, - 0xcf, 0x7f, 0x71, 0xb5, 0xf4, 0x1f, 0x7e, 0x71, 0xb5, 0xf4, 0x9f, 0x7e, 0x71, 0xb5, 0xf4, 0x83, - 0xc5, 0xb3, 0x3d, 0x2c, 0xdc, 0x68, 0xb9, 0xd4, 0x8b, 0x6e, 0x73, 0x72, 0x83, 0xf8, 0xdf, 0xbd, - 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x28, 0xf9, 0xbd, 0x44, 0x52, 0xdc, 0x00, 0x00, + 0x4c, 0xbd, 0x68, 0x6e, 0x1a, 0xfb, 0xf0, 0x6d, 0x75, 0xf8, 0xb8, 0xa5, 0xab, 0xf8, 0x4f, 0xef, + 0xdc, 0xaa, 0xc6, 0x3f, 0x6b, 0x12, 0xc9, 0x9e, 0x76, 0x32, 0x4a, 0xc9, 0x2e, 0x0c, 0xed, 0x74, + 0x82, 0xb6, 0x1f, 0xd2, 0xb9, 0x19, 0x64, 0xda, 0x6b, 0x45, 0x5f, 0xa7, 0x00, 0x5d, 0x9a, 0x61, + 0xe2, 0xb9, 0xcd, 0x7f, 0x68, 0x23, 0x93, 0xa4, 0xac, 0x2f, 0x60, 0x44, 0x7d, 0xcc, 0x64, 0x08, + 0xfa, 0xaa, 0xad, 0x56, 0xb9, 0x87, 0xfd, 0x51, 0xab, 0xad, 0x95, 0x4b, 0x64, 0x02, 0x20, 0x96, + 0x60, 0xe5, 0x5e, 0x32, 0x06, 0xc3, 0x52, 0xc2, 0x94, 0xfb, 0x10, 0xbe, 0xdd, 0x2e, 0xf7, 0x13, + 0x02, 0x13, 0xe6, 0x3a, 0x2f, 0x0f, 0x58, 0x5f, 0xc3, 0x88, 0x9a, 0x1e, 0x32, 0x09, 0xa3, 0x7b, + 0x5b, 0xb5, 0x9d, 0xd5, 0xe5, 0xf5, 0x7b, 0xeb, 0xab, 0x2b, 0xe5, 0x1e, 0x72, 0x05, 0x2e, 0xed, + 0xd6, 0xd6, 0xea, 0x2b, 0x4b, 0xf5, 0x8d, 0xed, 0xe5, 0xea, 0x46, 0x7d, 0xc7, 0xde, 0xfe, 0xe2, + 0xcb, 0xfa, 0xee, 0xde, 0xd6, 0xd6, 0xea, 0x46, 0xb9, 0x44, 0xe6, 0x60, 0x9a, 0x55, 0x3f, 0xdc, + 0x5b, 0x5a, 0xd5, 0x01, 0xca, 0xbd, 0xe4, 0x3a, 0x5c, 0xc9, 0xaa, 0xa9, 0xaf, 0xad, 0x56, 0x57, + 0x36, 0x56, 0x6b, 0xb5, 0x72, 0x9f, 0xd5, 0x82, 0x51, 0x8d, 0x05, 0x64, 0x01, 0xe6, 0x96, 0x57, + 0xed, 0xdd, 0xfa, 0xce, 0x9e, 0xbd, 0xb3, 0x5d, 0x5b, 0xad, 0x9b, 0x1d, 0x49, 0xd6, 0x6e, 0x6c, + 0xdf, 0x5f, 0xdf, 0xaa, 0xb3, 0xa2, 0x5a, 0xb9, 0xc4, 0x5a, 0x33, 0x6a, 0x6b, 0xeb, 0x5b, 0xf7, + 0x37, 0x56, 0xeb, 0x7b, 0xb5, 0x55, 0x01, 0xd2, 0x6b, 0xfd, 0xac, 0x37, 0x25, 0xd0, 0xc9, 0x22, + 0x8c, 0xd6, 0xf8, 0x69, 0x12, 0x17, 0x39, 0x57, 0xdf, 0xcb, 0xa7, 0x27, 0x95, 0x31, 0x71, 0xc8, + 0xe4, 0xeb, 0x57, 0x07, 0x62, 0x7b, 0xf4, 0x0e, 0x9b, 0xcf, 0x86, 0xdf, 0xd2, 0xf7, 0xe8, 0xb6, + 0x28, 0xb3, 0x55, 0x2d, 0x59, 0xd4, 0x76, 0x73, 0xae, 0xcb, 0xa3, 0xbe, 0x28, 0x77, 0x73, 0x5d, + 0xb2, 0xab, 0x7d, 0x7d, 0x31, 0x9e, 0x38, 0xb1, 0x09, 0x23, 0x4e, 0xc6, 0x4e, 0xa2, 0xe0, 0xc8, + 0xdb, 0x52, 0xcb, 0xe1, 0xba, 0x37, 0x8a, 0xfa, 0x84, 0xd6, 0x28, 0x14, 0x1c, 0xab, 0x93, 0x23, + 0x56, 0xc9, 0x27, 0xc9, 0x95, 0x21, 0x98, 0x81, 0xc4, 0x12, 0xd2, 0xd3, 0x4e, 0x80, 0x92, 0x0a, + 0x0c, 0xf0, 0xef, 0x8d, 0xf3, 0x03, 0xf5, 0xaa, 0x16, 0x2b, 0xb0, 0x79, 0xb9, 0xf5, 0x7b, 0x7d, + 0xfa, 0x16, 0xc3, 0xf4, 0x28, 0x8d, 0xdf, 0xa8, 0x47, 0x21, 0x9f, 0xb1, 0x94, 0xdc, 0x82, 0x91, + 0x1a, 0x0d, 0x43, 0xd4, 0x40, 0x05, 0x45, 0x36, 0x25, 0x10, 0xf2, 0xc2, 0xba, 0xdb, 0x9c, 0x2b, + 0xd9, 0x31, 0x08, 0x53, 0xec, 0xb9, 0x06, 0x85, 0x8a, 0x7d, 0x5f, 0xac, 0xd8, 0x0b, 0x1d, 0x8b, + 0x2b, 0xf6, 0x31, 0x08, 0x9b, 0x75, 0xb1, 0xc9, 0x63, 0x2f, 0xfa, 0xe3, 0x59, 0x17, 0x8a, 0x81, + 0x98, 0x75, 0x0d, 0x88, 0x7c, 0x0c, 0x50, 0x7d, 0x54, 0x43, 0xfd, 0xd8, 0xde, 0x12, 0x8a, 0x0e, + 0x8a, 0x24, 0xe7, 0x59, 0xc8, 0xb7, 0x02, 0x27, 0xd0, 0x4f, 0x00, 0x1a, 0x34, 0x59, 0x82, 0xf1, + 0xea, 0x4f, 0x3b, 0x01, 0x5d, 0x6f, 0x32, 0xa9, 0x16, 0xf1, 0xa3, 0xce, 0xc8, 0xd2, 0xc2, 0xe9, + 0x49, 0x65, 0xce, 0x61, 0x15, 0x75, 0x57, 0xd4, 0x68, 0x04, 0x4c, 0x14, 0xb2, 0x0d, 0x17, 0xee, + 0x2f, 0xef, 0x88, 0x75, 0x58, 0x6d, 0x34, 0xfc, 0x8e, 0x17, 0x09, 0xed, 0xe6, 0xfa, 0xe9, 0x49, + 0xe5, 0xca, 0x61, 0xa3, 0x5d, 0x97, 0x6b, 0xd6, 0xe1, 0xd5, 0xba, 0x7a, 0x93, 0xc2, 0xb5, 0x5a, + 0x30, 0x71, 0x9f, 0x46, 0x6c, 0xdd, 0x49, 0x55, 0xb5, 0x78, 0x56, 0xbe, 0x0b, 0xa3, 0x8f, 0xdc, + 0xe8, 0xa8, 0x46, 0x1b, 0x01, 0x8d, 0xe4, 0x41, 0x1a, 0x39, 0xf0, 0xcc, 0x8d, 0x8e, 0xea, 0x21, + 0x2f, 0xd7, 0x85, 0xb2, 0x06, 0x6e, 0xad, 0xc2, 0xa4, 0x68, 0x4d, 0x69, 0xc6, 0x8b, 0x26, 0xc1, + 0x12, 0x12, 0xc4, 0x59, 0xd0, 0x09, 0x9a, 0x64, 0xfe, 0x45, 0x2f, 0xcc, 0x2c, 0x1f, 0x39, 0xde, + 0x21, 0xdd, 0x71, 0xc2, 0xf0, 0x99, 0x1f, 0x34, 0xb5, 0xce, 0xe3, 0xb1, 0x20, 0xd5, 0x79, 0x3c, + 0x07, 0x2c, 0xc2, 0xe8, 0x76, 0xab, 0x29, 0x71, 0xc4, 0x91, 0x05, 0xdb, 0xf2, 0x5b, 0xcd, 0x7a, + 0x5b, 0xd2, 0xd2, 0x81, 0x18, 0xce, 0x16, 0x7d, 0xa6, 0x70, 0xfa, 0x62, 0x1c, 0x8f, 0x3e, 0xd3, + 0x70, 0x34, 0x20, 0xb2, 0x0a, 0x17, 0x6a, 0xb4, 0xe1, 0x7b, 0xcd, 0x7b, 0x4e, 0x23, 0xf2, 0x83, + 0x5d, 0xff, 0x09, 0xf5, 0xc4, 0xfa, 0x42, 0xad, 0x2e, 0xc4, 0xca, 0xfa, 0x63, 0xac, 0xad, 0x47, + 0xac, 0xda, 0x4e, 0x63, 0x90, 0x6d, 0x18, 0x7e, 0x24, 0xcc, 0x31, 0xe2, 0x9c, 0xf3, 0xc6, 0x2d, + 0x65, 0x9f, 0x59, 0x0e, 0x28, 0x2e, 0x0a, 0xa7, 0xa5, 0x4e, 0x6a, 0x6a, 0x93, 0x44, 0x49, 0x24, + 0x21, 0x6d, 0x45, 0xc4, 0xda, 0x83, 0xf1, 0x9d, 0x56, 0xe7, 0xd0, 0xf5, 0x98, 0xcc, 0xa8, 0xd1, + 0x9f, 0x90, 0x15, 0x80, 0xb8, 0x40, 0x18, 0x59, 0xa6, 0xc4, 0xe9, 0x28, 0xae, 0xd8, 0xbf, 0x2b, + 0x3e, 0x24, 0x2c, 0x41, 0x75, 0xd6, 0xd6, 0xf0, 0xac, 0xff, 0xdd, 0x07, 0x44, 0x4c, 0x00, 0xee, + 0x7f, 0x35, 0x1a, 0xb1, 0x4d, 0xe4, 0x22, 0xf4, 0x2a, 0x5b, 0xc8, 0xe0, 0xe9, 0x49, 0xa5, 0xd7, + 0x6d, 0xda, 0xbd, 0xeb, 0x2b, 0xe4, 0x3d, 0x18, 0x40, 0x30, 0xe4, 0xff, 0x84, 0x6a, 0x4f, 0xa7, + 0xc0, 0x65, 0x07, 0xee, 0xcb, 0x36, 0x07, 0x26, 0xef, 0xc3, 0xc8, 0x0a, 0x6d, 0xd1, 0x43, 0x27, + 0xf2, 0xe5, 0xd7, 0xcd, 0xad, 0x0b, 0xb2, 0x50, 0x5b, 0x73, 0x31, 0x24, 0x3b, 0xcb, 0xd8, 0xd4, + 0x09, 0x7d, 0x4f, 0x3f, 0xcb, 0x04, 0x58, 0xa2, 0x9f, 0x65, 0x38, 0x0c, 0xf9, 0x83, 0x12, 0x8c, + 0x56, 0x3d, 0x4f, 0x9c, 0xda, 0x43, 0xc1, 0xf5, 0x99, 0x5b, 0xca, 0xcc, 0xb5, 0xe1, 0x1c, 0xd0, + 0xd6, 0xbe, 0xd3, 0xea, 0xd0, 0x70, 0xe9, 0x2b, 0xa6, 0x5e, 0xfe, 0xa7, 0x93, 0xca, 0x27, 0xe7, + 0x38, 0x87, 0xc7, 0x06, 0xb3, 0xdd, 0xc0, 0x71, 0xa3, 0xf0, 0xf4, 0xa4, 0x32, 0xe3, 0xc4, 0x0d, + 0xea, 0xdf, 0x8d, 0xd6, 0x8f, 0x58, 0xb4, 0x0f, 0x76, 0x13, 0xed, 0xe4, 0x18, 0x26, 0xab, 0x61, + 0xd8, 0x39, 0xa6, 0xb5, 0xc8, 0x09, 0x22, 0x76, 0xf8, 0x43, 0xf9, 0x50, 0x7c, 0x32, 0x7c, 0xeb, + 0xe7, 0x27, 0x95, 0x12, 0xd3, 0x68, 0x1d, 0x44, 0x65, 0x1a, 0x51, 0x10, 0xd5, 0x23, 0x57, 0xdf, + 0x9d, 0xf0, 0x8c, 0x98, 0xa4, 0x6d, 0xbd, 0xa6, 0xd4, 0x86, 0xf5, 0x95, 0xbc, 0x19, 0xb7, 0x96, + 0x61, 0xe1, 0x3e, 0x8d, 0x6c, 0x1a, 0xd2, 0x48, 0x7e, 0x23, 0xb8, 0xc2, 0x63, 0xcb, 0xd9, 0x10, + 0xfe, 0x56, 0xc8, 0x38, 0xfd, 0xfc, 0xbb, 0x90, 0x35, 0xd6, 0x5f, 0x2b, 0x41, 0x65, 0x39, 0xa0, + 0x5c, 0x19, 0xcc, 0x21, 0x54, 0x2c, 0xbb, 0x16, 0xa0, 0x7f, 0xf7, 0x79, 0x5b, 0x1e, 0xa9, 0xb1, + 0x96, 0x4d, 0x8a, 0x8d, 0xa5, 0x67, 0xb4, 0x4f, 0x58, 0x8f, 0x61, 0xc6, 0xa6, 0x1e, 0x7d, 0xe6, + 0x1c, 0xb4, 0xa8, 0x71, 0xc4, 0xaf, 0xc0, 0x00, 0xff, 0xd0, 0x53, 0x43, 0xe0, 0xe5, 0xe7, 0x33, + 0x97, 0x58, 0xe3, 0x30, 0xba, 0xe3, 0x7a, 0x87, 0x82, 0xba, 0xf5, 0x47, 0x7d, 0x30, 0xc6, 0x7f, + 0x0b, 0xfd, 0x36, 0xb1, 0x7b, 0x95, 0xce, 0xb2, 0x7b, 0x7d, 0x08, 0xe3, 0x4c, 0xfc, 0xd3, 0x60, + 0x9f, 0x06, 0x6c, 0xd7, 0x14, 0x9c, 0x40, 0x5d, 0x3d, 0xc4, 0x8a, 0xfa, 0x53, 0x5e, 0x63, 0x9b, + 0x80, 0x64, 0x03, 0x26, 0x78, 0xc1, 0x3d, 0xea, 0x44, 0x9d, 0xd8, 0xdc, 0x30, 0x29, 0x94, 0x5a, + 0x59, 0xcc, 0x97, 0xa6, 0xa0, 0xf5, 0x58, 0x14, 0xda, 0x09, 0x5c, 0xf2, 0x19, 0x4c, 0xee, 0x04, + 0xfe, 0xd7, 0xcf, 0xb5, 0xfd, 0x9a, 0x7f, 0x9d, 0x5c, 0xfd, 0x65, 0x55, 0x75, 0x7d, 0xd7, 0x4e, + 0x42, 0x93, 0xb7, 0x61, 0x78, 0x3d, 0x5c, 0xf2, 0x03, 0xd7, 0x3b, 0xc4, 0x6f, 0x74, 0x98, 0x5b, + 0x51, 0xdd, 0xb0, 0x7e, 0x80, 0x85, 0xb6, 0xaa, 0x4e, 0xd8, 0xfb, 0x86, 0xba, 0xdb, 0xfb, 0xde, + 0x05, 0xd8, 0xf0, 0x9d, 0x66, 0xb5, 0xd5, 0x5a, 0xae, 0x86, 0x78, 0xd6, 0x17, 0xfb, 0x51, 0xcb, + 0x77, 0x9a, 0x75, 0xa7, 0xd5, 0xaa, 0x37, 0x9c, 0xd0, 0xd6, 0x60, 0x1e, 0xf4, 0x0f, 0x0f, 0x96, + 0x87, 0xec, 0xc9, 0x0d, 0xb7, 0x41, 0xbd, 0x90, 0x3e, 0x72, 0x02, 0xcf, 0xf5, 0x0e, 0x43, 0xeb, + 0xdf, 0x4f, 0xc2, 0xb0, 0x1a, 0xf2, 0x2d, 0x5d, 0x33, 0x17, 0xbb, 0x1c, 0xce, 0x7e, 0x6c, 0x8f, + 0xb0, 0x35, 0x08, 0x72, 0x09, 0x75, 0x75, 0xb1, 0xbf, 0x0e, 0xb1, 0xd5, 0xe8, 0xb4, 0xdb, 0x36, + 0x2b, 0x63, 0x5f, 0xd9, 0xca, 0x12, 0xf2, 0x7f, 0x98, 0x7f, 0x65, 0xcd, 0x03, 0xbb, 0x77, 0x65, + 0x89, 0x2d, 0xef, 0xed, 0xf5, 0x95, 0x65, 0x64, 0xe5, 0x30, 0x5f, 0xde, 0xbe, 0xdb, 0x6c, 0xd8, + 0x58, 0xca, 0x6a, 0x6b, 0xd5, 0xcd, 0x0d, 0xc1, 0x2e, 0xac, 0x0d, 0x9d, 0xe3, 0x96, 0x8d, 0xa5, + 0x4c, 0xef, 0xe3, 0x47, 0xcb, 0x65, 0xdf, 0x8b, 0x02, 0xbf, 0x15, 0xa2, 0x72, 0x32, 0xcc, 0xa7, + 0x53, 0x9c, 0x49, 0x1b, 0xa2, 0xca, 0x4e, 0x80, 0x92, 0x47, 0x30, 0x5b, 0x6d, 0x3e, 0x75, 0xbc, + 0x06, 0x6d, 0xf2, 0x9a, 0x47, 0x7e, 0xf0, 0xe4, 0x71, 0xcb, 0x7f, 0x16, 0x22, 0xbf, 0x87, 0x85, + 0x09, 0x47, 0x80, 0xc8, 0x23, 0xee, 0x33, 0x09, 0x64, 0xe7, 0x61, 0xb3, 0x4f, 0x6a, 0xb9, 0xe5, + 0x77, 0x9a, 0x62, 0x16, 0xf0, 0x93, 0x6a, 0xb0, 0x02, 0x9b, 0x97, 0x33, 0x2e, 0xad, 0xd5, 0x36, + 0xd1, 0x60, 0x22, 0xb8, 0x74, 0x14, 0x1e, 0xdb, 0xac, 0x8c, 0xbc, 0x01, 0x43, 0x52, 0x85, 0xe5, + 0x16, 0x57, 0xb4, 0x23, 0x4a, 0xd5, 0x55, 0xd6, 0xb1, 0x4f, 0xc2, 0xa6, 0x0d, 0xff, 0x29, 0x0d, + 0x9e, 0x2f, 0xfb, 0x4d, 0x2a, 0x8f, 0xf7, 0xe2, 0xf8, 0xca, 0x2b, 0xea, 0x0d, 0x56, 0x63, 0x9b, + 0x80, 0xac, 0x01, 0xbe, 0x07, 0xb2, 0x43, 0xbc, 0x6a, 0x80, 0xef, 0x91, 0xa1, 0x2d, 0xeb, 0xc8, + 0x0a, 0x5c, 0xa8, 0x76, 0x22, 0xff, 0xd8, 0x89, 0xdc, 0xc6, 0x5e, 0xfb, 0x30, 0x70, 0x58, 0x23, + 0x65, 0x44, 0x40, 0x95, 0xde, 0x91, 0x95, 0xf5, 0x8e, 0xa8, 0xb5, 0xd3, 0x08, 0xe4, 0x03, 0x18, + 0x5b, 0x0f, 0xb9, 0x09, 0xc7, 0x09, 0x69, 0x13, 0xcf, 0xe1, 0xa2, 0x97, 0x6e, 0x58, 0x47, 0x83, + 0x4e, 0x9d, 0x1d, 0x02, 0x9a, 0xb6, 0x01, 0x47, 0x2c, 0x18, 0xac, 0x86, 0xa1, 0x1b, 0x46, 0x78, + 0xbc, 0x1e, 0x5e, 0x82, 0xd3, 0x93, 0xca, 0xa0, 0x83, 0x25, 0xb6, 0xa8, 0x21, 0x8f, 0x60, 0x74, + 0x85, 0x32, 0x9d, 0x70, 0x37, 0xe8, 0x84, 0x11, 0x1e, 0x96, 0x47, 0x17, 0x2f, 0x89, 0x0f, 0x5b, + 0xab, 0x11, 0x6b, 0x99, 0x6b, 0x7b, 0x4d, 0x2c, 0xaf, 0x47, 0xac, 0x42, 0xdf, 0xb5, 0x34, 0x78, + 0xa6, 0xf0, 0x0a, 0x9c, 0x35, 0xb7, 0xc9, 0x3e, 0xd5, 0x69, 0xec, 0x03, 0x2a, 0xbc, 0x42, 0x36, + 0xd4, 0x8f, 0xb0, 0x46, 0x57, 0x78, 0x0d, 0x14, 0xd2, 0x48, 0x59, 0x05, 0x67, 0x0c, 0xcb, 0x8f, + 0x59, 0x29, 0xbb, 0x78, 0x4e, 0x9b, 0xe1, 0x77, 0x61, 0x74, 0xb9, 0x13, 0x46, 0xfe, 0xf1, 0xee, + 0x11, 0x3d, 0xa6, 0x73, 0x17, 0x63, 0xb5, 0xbe, 0x81, 0xc5, 0xf5, 0x88, 0x95, 0xeb, 0xc3, 0xd4, + 0xc0, 0xc9, 0xe7, 0x40, 0xa4, 0x7e, 0x7e, 0x9f, 0xad, 0x0f, 0x8f, 0xad, 0xe5, 0xb9, 0x59, 0x1c, + 0x2b, 0x2a, 0xe5, 0x52, 0xad, 0xaf, 0x1f, 0xaa, 0x6a, 0xdd, 0xae, 0x93, 0x46, 0x66, 0x1d, 0xe2, + 0x5d, 0xbc, 0x1f, 0x38, 0xed, 0xa3, 0xb9, 0xb9, 0x58, 0xcb, 0x16, 0x83, 0x3a, 0x64, 0xe5, 0x86, + 0xb6, 0x10, 0x83, 0x93, 0x1a, 0x00, 0xff, 0xb9, 0xc1, 0x26, 0xfe, 0x12, 0xf2, 0x6b, 0xce, 0xe0, + 0x17, 0xab, 0x90, 0xbc, 0xba, 0x84, 0x3a, 0x08, 0x27, 0xdb, 0x72, 0x8d, 0xd9, 0xd4, 0xc8, 0x90, + 0x27, 0x50, 0xe6, 0xbf, 0x36, 0x7d, 0xcf, 0x8d, 0xb8, 0xe8, 0x9d, 0x37, 0x4c, 0x36, 0xc9, 0x6a, + 0xd9, 0x00, 0x9a, 0xca, 0x44, 0x03, 0xc7, 0xaa, 0x56, 0x6b, 0x26, 0x45, 0x98, 0xec, 0xc0, 0xe8, + 0x4e, 0xe0, 0x37, 0x3b, 0x8d, 0x08, 0x37, 0xec, 0xcb, 0xa8, 0x28, 0x12, 0xd1, 0x8e, 0x56, 0xc3, + 0x79, 0xd2, 0xe6, 0x05, 0x75, 0xb6, 0x99, 0xeb, 0x3c, 0xd1, 0x00, 0xc9, 0x12, 0x0c, 0xee, 0xf8, + 0x2d, 0xb7, 0xf1, 0x7c, 0x6e, 0x01, 0x3b, 0x3d, 0x2d, 0x89, 0x61, 0xa1, 0xec, 0x2a, 0x6a, 0x87, + 0x6d, 0x2c, 0xd2, 0xb5, 0x43, 0x0e, 0x44, 0xaa, 0x30, 0xfe, 0x39, 0x5b, 0x30, 0xae, 0xef, 0x79, + 0x8e, 0x1b, 0xd0, 0xb9, 0x2b, 0x38, 0x2f, 0x68, 0xce, 0xfc, 0x89, 0x5e, 0xa1, 0x2f, 0x67, 0x03, + 0x83, 0xac, 0xc3, 0xe4, 0x7a, 0x58, 0x8b, 0x02, 0xb7, 0x4d, 0x37, 0x1d, 0xcf, 0x39, 0xa4, 0xcd, + 0xb9, 0xab, 0xb1, 0x3d, 0xd1, 0x0d, 0xeb, 0x21, 0xd6, 0xd5, 0x8f, 0x79, 0xa5, 0x6e, 0x4f, 0x4c, + 0xe0, 0x91, 0x2f, 0x60, 0x7a, 0xf5, 0xeb, 0x88, 0xad, 0x98, 0x56, 0xb5, 0xd3, 0x74, 0xa3, 0x5a, + 0xe4, 0x07, 0xce, 0x21, 0x9d, 0xab, 0x20, 0xbd, 0xd7, 0x4f, 0x4f, 0x2a, 0xd7, 0xa8, 0xa8, 0xaf, + 0x3b, 0x0c, 0xa0, 0x1e, 0x72, 0x08, 0xfd, 0x1e, 0x2f, 0x8b, 0x02, 0xe3, 0x7e, 0xad, 0xd3, 0x66, + 0x8a, 0x2b, 0x72, 0xff, 0x9a, 0xc1, 0x7d, 0xad, 0x86, 0x73, 0x3f, 0xe4, 0x05, 0x29, 0xee, 0x6b, + 0x80, 0xc4, 0x06, 0xf2, 0xc0, 0x77, 0xbd, 0x6a, 0x23, 0x72, 0x9f, 0x52, 0x71, 0x64, 0x0f, 0xe7, + 0xae, 0x63, 0x4f, 0xd1, 0xf6, 0xf9, 0xeb, 0xbe, 0xeb, 0xd5, 0x1d, 0xac, 0xae, 0x8b, 0x03, 0xbe, + 0x61, 0xfb, 0x4c, 0x63, 0x93, 0x1f, 0xc1, 0xc5, 0x4d, 0xff, 0xc0, 0x6d, 0x51, 0x2e, 0x72, 0x38, + 0x5b, 0xd0, 0x8a, 0x67, 0x21, 0x5d, 0xb4, 0x7d, 0x1e, 0x23, 0x44, 0x5d, 0x48, 0xab, 0x63, 0x05, + 0xa3, 0xdb, 0x3e, 0xb3, 0xa9, 0x3c, 0xe8, 0x1f, 0x1e, 0x2d, 0x8f, 0xf1, 0xfb, 0xb1, 0x07, 0xfd, + 0xc3, 0xe3, 0xe5, 0x09, 0xeb, 0x0f, 0x4b, 0x40, 0xd2, 0xf2, 0x90, 0xdc, 0x86, 0x21, 0xea, 0x31, + 0x75, 0xb0, 0x29, 0xf6, 0x75, 0xd4, 0x62, 0x44, 0x91, 0x6e, 0xc4, 0x13, 0x45, 0xe4, 0x73, 0x98, + 0xe2, 0x1d, 0x92, 0x92, 0xbb, 0xe5, 0x1e, 0xbb, 0x11, 0xee, 0xf5, 0x03, 0x5c, 0x62, 0x64, 0x54, + 0xeb, 0xc7, 0x78, 0x51, 0x8d, 0x72, 0x7e, 0x83, 0x55, 0x5a, 0x1d, 0x98, 0xc9, 0x94, 0x84, 0x64, + 0x13, 0x66, 0x8e, 0x7d, 0x2f, 0x3a, 0x6a, 0x3d, 0x97, 0x82, 0x50, 0xb4, 0x56, 0xc2, 0xd6, 0xf0, + 0xe3, 0xcf, 0x04, 0xb0, 0xa7, 0x44, 0xb1, 0xa0, 0x88, 0xed, 0x3c, 0xe8, 0x1f, 0xee, 0x2d, 0xf7, + 0xa9, 0x91, 0x58, 0x36, 0x5c, 0x48, 0x09, 0x14, 0xf2, 0x3d, 0x18, 0x6b, 0xa0, 0x9e, 0x6e, 0xb4, + 0xc4, 0xc5, 0xa9, 0x56, 0xae, 0xaf, 0x15, 0x5e, 0xce, 0x87, 0xf2, 0x4f, 0x4b, 0x30, 0x9b, 0x23, + 0x4a, 0xce, 0xcf, 0xea, 0x2f, 0xe1, 0xe2, 0xb1, 0xf3, 0x75, 0x3d, 0xc0, 0x63, 0x58, 0x3d, 0x70, + 0xbc, 0x04, 0xb7, 0xf1, 0x33, 0xc9, 0x86, 0xd0, 0x7d, 0x00, 0x8e, 0x9d, 0xaf, 0x6d, 0x04, 0xb0, + 0x59, 0x3d, 0xef, 0xe7, 0xf7, 0x61, 0xdc, 0x10, 0x1e, 0xe7, 0xee, 0x9c, 0x75, 0x07, 0x2e, 0xb0, + 0x83, 0x6a, 0x44, 0xcf, 0x6c, 0x7e, 0xb1, 0x76, 0x00, 0x6a, 0xf4, 0xd8, 0x69, 0x1f, 0xf9, 0x4c, + 0xa9, 0x5c, 0xd2, 0x7f, 0x89, 0xe3, 0x3b, 0x11, 0xc7, 0x69, 0x55, 0xb1, 0x7f, 0x97, 0x2b, 0x9a, + 0xa1, 0x82, 0xb4, 0x35, 0x2c, 0xeb, 0x4f, 0x7a, 0x81, 0x88, 0xaf, 0x3f, 0xa0, 0xce, 0xb1, 0xec, + 0xc6, 0x47, 0x30, 0xc6, 0x0f, 0x5b, 0xbc, 0x18, 0xbb, 0x33, 0xba, 0x38, 0x25, 0x84, 0x80, 0x5e, + 0xb5, 0xd6, 0x63, 0x1b, 0xa0, 0x0c, 0xd5, 0xa6, 0xfc, 0x94, 0x88, 0xa8, 0xbd, 0x06, 0xaa, 0x5e, + 0xc5, 0x50, 0xf5, 0xdf, 0xe4, 0x33, 0x98, 0x58, 0xf6, 0x8f, 0xdb, 0x8c, 0x27, 0x02, 0xb9, 0x4f, + 0x9c, 0xc0, 0x45, 0xbb, 0x46, 0xe5, 0x5a, 0x8f, 0x9d, 0x00, 0x27, 0x5b, 0x30, 0x75, 0xaf, 0xd5, + 0x09, 0x8f, 0xaa, 0x5e, 0x73, 0xb9, 0xe5, 0x87, 0x92, 0x4a, 0xbf, 0x38, 0x01, 0x8b, 0xc3, 0x4a, + 0x1a, 0x62, 0xad, 0xc7, 0xce, 0x42, 0x24, 0x6f, 0xc0, 0xc0, 0xea, 0x53, 0x26, 0x53, 0xe4, 0x3d, + 0xb3, 0x70, 0x54, 0xd9, 0xf6, 0xe8, 0xf6, 0xe3, 0xb5, 0x1e, 0x9b, 0xd7, 0x2e, 0x8d, 0xc0, 0x90, + 0x3c, 0xa8, 0xdd, 0x66, 0xfa, 0x9e, 0x62, 0x67, 0x2d, 0x72, 0xa2, 0x4e, 0x48, 0xe6, 0x61, 0x78, + 0xaf, 0xcd, 0xce, 0x0f, 0xf2, 0x84, 0x6b, 0xab, 0xdf, 0xd6, 0x3b, 0x26, 0xa7, 0xc9, 0x82, 0x6e, + 0xf7, 0xe4, 0xc0, 0x71, 0x81, 0xb5, 0x66, 0x32, 0xb7, 0x18, 0xda, 0x68, 0xb7, 0x37, 0xd1, 0x6e, + 0x39, 0xc9, 0x6b, 0x6b, 0x26, 0x93, 0x79, 0xd6, 0x17, 0x70, 0x75, 0xaf, 0x1d, 0xd2, 0x20, 0xaa, + 0xb6, 0xdb, 0x2d, 0xb7, 0xc1, 0xef, 0x39, 0xf0, 0x40, 0x27, 0x17, 0xcb, 0x07, 0x30, 0xc8, 0x0b, + 0xc4, 0x32, 0x91, 0x6b, 0xb0, 0xda, 0x6e, 0x8b, 0x63, 0xe4, 0x5d, 0xae, 0x79, 0xf2, 0x83, 0xa1, + 0x2d, 0xa0, 0xad, 0xdf, 0x2b, 0xc1, 0x55, 0xfe, 0x05, 0xe4, 0x92, 0xfe, 0x16, 0x8c, 0xa0, 0x9f, + 0x48, 0xdb, 0x69, 0xc8, 0x6f, 0x82, 0x3b, 0xcc, 0xc8, 0x42, 0x3b, 0xae, 0xd7, 0x3c, 0x70, 0x7a, + 0xf3, 0x3d, 0x70, 0xe4, 0x07, 0xd6, 0x97, 0xf9, 0x81, 0x7d, 0x0e, 0x96, 0xe8, 0x51, 0xab, 0x95, + 0xea, 0x54, 0xf8, 0x22, 0xbd, 0xb2, 0xfe, 0x5b, 0x2f, 0xcc, 0xde, 0xa7, 0x1e, 0x0d, 0x1c, 0x1c, + 0xa7, 0x61, 0xb0, 0xd0, 0x6f, 0xfa, 0x4b, 0x85, 0x37, 0xfd, 0x15, 0x69, 0x02, 0xea, 0x45, 0x13, + 0x50, 0xca, 0x69, 0x81, 0x9d, 0x85, 0xf6, 0xec, 0x75, 0x31, 0x2c, 0x3c, 0x0b, 0x75, 0x02, 0xd7, + 0x66, 0x65, 0x64, 0x3d, 0xf6, 0x12, 0xe8, 0xef, 0x6a, 0x0b, 0x9a, 0x12, 0xb7, 0xa6, 0x43, 0xc2, + 0x4b, 0xc0, 0xf4, 0x0d, 0xd8, 0x82, 0x41, 0x6e, 0xb9, 0xc2, 0x5b, 0x86, 0xd1, 0xc5, 0x9b, 0xe2, + 0x9b, 0xca, 0x19, 0xa0, 0x30, 0x73, 0xad, 0x7a, 0x51, 0xf0, 0x9c, 0x2f, 0x81, 0x08, 0x0b, 0x6c, + 0x41, 0x65, 0xfe, 0x73, 0x18, 0xd5, 0x40, 0x48, 0x19, 0xfa, 0x9e, 0x08, 0x0f, 0x89, 0x11, 0x9b, + 0xfd, 0x49, 0xde, 0x81, 0x81, 0xa7, 0x4e, 0xab, 0x43, 0x85, 0x18, 0xb9, 0x18, 0xdb, 0xe2, 0x98, + 0x3a, 0xe4, 0x1d, 0x72, 0x63, 0x9c, 0xcd, 0x81, 0x3e, 0xee, 0xfd, 0xb0, 0x64, 0x7d, 0x02, 0x73, + 0xe9, 0xde, 0x08, 0xab, 0x49, 0x37, 0x23, 0x8d, 0xb5, 0x02, 0xd3, 0xf7, 0x69, 0x84, 0x0b, 0x17, + 0x3f, 0x22, 0xcd, 0x81, 0x23, 0xf1, 0x9d, 0x49, 0xa9, 0x2a, 0x6f, 0x23, 0xf4, 0xaf, 0xb4, 0x06, + 0x33, 0x09, 0x2a, 0xa2, 0xfd, 0x8f, 0x61, 0x48, 0x14, 0x29, 0x89, 0x2a, 0x5c, 0xda, 0xe8, 0x81, + 0xa8, 0xd8, 0x5f, 0xe4, 0xeb, 0x56, 0x50, 0xb6, 0x25, 0x82, 0x75, 0x04, 0x17, 0xd9, 0x36, 0x1b, + 0x53, 0x55, 0xcb, 0xf1, 0x32, 0x8c, 0xb4, 0x99, 0xa2, 0x10, 0xba, 0x3f, 0xe5, 0xcb, 0x68, 0xc0, + 0x1e, 0x66, 0x05, 0x35, 0xf7, 0xa7, 0x94, 0x5c, 0x01, 0xc0, 0x4a, 0x1c, 0xa6, 0x90, 0x02, 0x08, + 0xce, 0xad, 0x52, 0x04, 0xd0, 0x53, 0x86, 0xaf, 0x1b, 0x1b, 0xff, 0xb6, 0x02, 0x98, 0x4d, 0xb5, + 0x24, 0x06, 0x70, 0x1b, 0x86, 0xa5, 0x7e, 0x96, 0xb0, 0x17, 0xeb, 0x23, 0xb0, 0x15, 0x10, 0x79, + 0x13, 0x26, 0x3d, 0xfa, 0x75, 0x54, 0x4f, 0xf5, 0x61, 0x9c, 0x15, 0xef, 0xc8, 0x7e, 0x58, 0xbf, + 0x86, 0x36, 0xc2, 0x9a, 0xe7, 0x3f, 0x7b, 0xdc, 0x72, 0x9e, 0xd0, 0x54, 0xc3, 0xdf, 0x83, 0xe1, + 0x5a, 0xf7, 0x86, 0xf9, 0xe7, 0x23, 0x1b, 0xb7, 0x15, 0x8a, 0xd5, 0x82, 0x79, 0x36, 0xa4, 0x5a, + 0x75, 0x73, 0x63, 0xbd, 0xb9, 0xf3, 0x4d, 0x33, 0xf0, 0x29, 0x5c, 0xce, 0x6c, 0xed, 0x9b, 0x66, + 0xe2, 0xbf, 0xea, 0x83, 0x59, 0xbe, 0x99, 0xa4, 0x57, 0xf0, 0xd9, 0x45, 0xcd, 0xaf, 0xe4, 0x26, + 0xed, 0xdd, 0x8c, 0x9b, 0x34, 0x44, 0xd1, 0x6f, 0xd2, 0x8c, 0xfb, 0xb3, 0x0f, 0xb3, 0xef, 0xcf, + 0xd0, 0x08, 0x62, 0xde, 0x9f, 0x25, 0x6f, 0xcd, 0x56, 0xf3, 0x6f, 0xcd, 0xf0, 0x0e, 0x21, 0xe3, + 0xd6, 0x2c, 0xe3, 0xae, 0x2c, 0xe9, 0xb0, 0x30, 0xfc, 0x4a, 0x1d, 0x16, 0xb8, 0x6a, 0x6d, 0xed, + 0xc3, 0x5c, 0x7a, 0x02, 0x5f, 0x81, 0xf0, 0xf8, 0xe3, 0x12, 0x5c, 0x11, 0x6a, 0x46, 0xe2, 0x13, + 0x3b, 0xff, 0xfa, 0x78, 0x1f, 0xc6, 0x04, 0xee, 0x6e, 0xbc, 0x14, 0x97, 0x2e, 0x9c, 0x9e, 0x54, + 0xc6, 0xa5, 0x38, 0xe4, 0x32, 0xd5, 0x00, 0x23, 0xef, 0xc3, 0x30, 0xfe, 0x11, 0x5b, 0xd9, 0xd9, + 0xe9, 0x63, 0x04, 0x41, 0xeb, 0x49, 0x5b, 0xbb, 0x02, 0xb5, 0xbe, 0x82, 0xab, 0x79, 0x1d, 0x7f, + 0x05, 0x7c, 0xf9, 0xd7, 0x25, 0xb8, 0x2c, 0xc8, 0x1b, 0x1f, 0xeb, 0x0b, 0xc9, 0xfd, 0x73, 0x38, + 0xee, 0x3d, 0x80, 0x51, 0xd6, 0xa0, 0xec, 0x77, 0x9f, 0xd8, 0xdc, 0x84, 0xee, 0x1e, 0xd7, 0xac, + 0x38, 0x91, 0x23, 0x5c, 0x11, 0x9c, 0xe3, 0x96, 0x3c, 0x1b, 0xdb, 0x3a, 0xb2, 0xf5, 0x03, 0x58, + 0xc8, 0x1e, 0xc2, 0x2b, 0xe0, 0xcf, 0x03, 0x98, 0xcf, 0x10, 0xcb, 0x2f, 0xb6, 0x2b, 0x7e, 0x09, + 0x97, 0x33, 0x69, 0xbd, 0x82, 0x6e, 0xae, 0xb1, 0x3d, 0x3f, 0x7a, 0x05, 0x53, 0x68, 0x3d, 0x82, + 0x4b, 0x19, 0x94, 0x5e, 0x41, 0x17, 0xef, 0xc3, 0xac, 0xd2, 0x75, 0x5f, 0xaa, 0x87, 0x9b, 0x70, + 0x85, 0x13, 0x7a, 0x35, 0xb3, 0xf2, 0x10, 0x2e, 0x0b, 0x72, 0xaf, 0x80, 0x7b, 0x6b, 0xb0, 0x10, + 0x1f, 0x69, 0x33, 0x34, 0x95, 0x33, 0x0b, 0x19, 0x6b, 0x03, 0xae, 0xc5, 0x94, 0x72, 0xb6, 0xed, + 0xb3, 0x53, 0xe3, 0x0a, 0x59, 0x3c, 0x4b, 0xaf, 0x64, 0x46, 0x1f, 0xc1, 0x45, 0x83, 0xe8, 0x2b, + 0x53, 0x56, 0xd6, 0x61, 0x8a, 0x13, 0x36, 0x95, 0xd7, 0x45, 0x5d, 0x79, 0x1d, 0x5d, 0xbc, 0x10, + 0x93, 0xc4, 0xe2, 0xfd, 0xbb, 0x19, 0xfa, 0xec, 0x26, 0xea, 0xb3, 0x12, 0x24, 0xee, 0xe1, 0xfb, + 0x30, 0xc8, 0x4b, 0x44, 0xff, 0x32, 0x88, 0x71, 0x75, 0x9d, 0xa3, 0x09, 0x60, 0xeb, 0x47, 0x70, + 0x85, 0x9f, 0x05, 0xe3, 0xab, 0x2a, 0xf3, 0xbc, 0xf6, 0xbd, 0xc4, 0x51, 0xf0, 0x92, 0xa0, 0x9b, + 0x84, 0xcf, 0x39, 0x11, 0x1e, 0xc8, 0xb5, 0x9d, 0x47, 0xff, 0x4c, 0x8f, 0x2c, 0xe4, 0x11, 0xaf, + 0x37, 0xf3, 0x88, 0xf7, 0x1a, 0x5c, 0x57, 0x47, 0xbc, 0x64, 0x33, 0x72, 0x69, 0x59, 0x3f, 0x80, + 0xcb, 0x7c, 0xa0, 0xd2, 0xbd, 0xca, 0xec, 0xc6, 0x27, 0x89, 0x61, 0xce, 0x8a, 0x61, 0x9a, 0xd0, + 0x39, 0x83, 0xfc, 0x9b, 0x25, 0xf9, 0xc9, 0x65, 0x13, 0xff, 0x55, 0x9f, 0x79, 0xb7, 0xa0, 0xa2, + 0x18, 0x62, 0xf6, 0xe8, 0xc5, 0x0e, 0xbc, 0x9b, 0x30, 0xa3, 0x93, 0x71, 0x1b, 0x74, 0xff, 0x0e, + 0xde, 0x21, 0xbc, 0xc7, 0x3e, 0x0b, 0x2c, 0x90, 0xcb, 0x6e, 0x2e, 0x83, 0x6f, 0x08, 0x6f, 0x2b, + 0x48, 0xab, 0x0e, 0x0b, 0xe9, 0xa9, 0x70, 0x1b, 0xd2, 0xb3, 0x96, 0x7c, 0xc6, 0x3e, 0x61, 0x2c, + 0x11, 0x93, 0x91, 0x4b, 0x54, 0x7e, 0xc7, 0x1c, 0x5d, 0x62, 0x59, 0x96, 0x14, 0x35, 0x89, 0xf1, + 0xb3, 0xd6, 0xe5, 0x7a, 0xf8, 0x4d, 0x20, 0xb2, 0x6a, 0xb9, 0x66, 0xcb, 0xa6, 0x2f, 0x41, 0xdf, + 0x72, 0xcd, 0x16, 0x0e, 0xfd, 0x78, 0xe6, 0x6e, 0x84, 0x81, 0xcd, 0xca, 0x92, 0x3a, 0x71, 0xef, + 0x19, 0x74, 0xe2, 0x07, 0xfd, 0xc3, 0x7d, 0xe5, 0x7e, 0x9b, 0xd4, 0xdc, 0x43, 0xef, 0x91, 0x1b, + 0x1d, 0xa9, 0x06, 0xab, 0xd6, 0x0f, 0x61, 0xca, 0x68, 0x5e, 0x7c, 0xc5, 0x85, 0x2f, 0x11, 0xc8, + 0x9b, 0x30, 0xb4, 0x5c, 0x45, 0x1f, 0x05, 0x34, 0x1a, 0x8c, 0x71, 0x79, 0xd3, 0x70, 0xea, 0xf8, + 0x10, 0xcd, 0x96, 0x95, 0xd6, 0x3f, 0xe9, 0xd7, 0xa8, 0x6b, 0xef, 0x3b, 0x0a, 0x46, 0x77, 0x07, + 0x80, 0xaf, 0x10, 0x6d, 0x70, 0x4c, 0x01, 0x1c, 0x15, 0x57, 0xff, 0x5c, 0x24, 0xdb, 0x1a, 0xd0, + 0x59, 0xdf, 0x7f, 0x08, 0x5f, 0x4c, 0x8e, 0x24, 0x1f, 0x25, 0x29, 0x5f, 0x4c, 0x41, 0x3a, 0xb4, + 0x75, 0x20, 0xf2, 0xa3, 0xa4, 0x9b, 0xf2, 0x00, 0x5e, 0x59, 0xbc, 0x2e, 0xef, 0x30, 0xd3, 0x63, + 0x3b, 0x9f, 0xa7, 0xf2, 0x33, 0x98, 0x61, 0xb8, 0xee, 0x63, 0x54, 0xed, 0x57, 0xbf, 0x8e, 0xa8, + 0xc7, 0x65, 0xfb, 0x20, 0xb6, 0xf3, 0x46, 0x41, 0x3b, 0x31, 0xb0, 0xb0, 0x80, 0xc7, 0x74, 0xea, + 0x54, 0xd5, 0xd9, 0xd9, 0xf4, 0x71, 0x11, 0xd9, 0x1b, 0xab, 0x5e, 0xb3, 0xed, 0xbb, 0xea, 0xc8, + 0xc2, 0x17, 0x51, 0xd0, 0xaa, 0x53, 0x51, 0x6e, 0xeb, 0x40, 0xd6, 0x9b, 0x85, 0x8e, 0xbc, 0xc3, + 0xd0, 0xbf, 0xbb, 0xbc, 0xbb, 0x51, 0x2e, 0x59, 0xb7, 0x01, 0xb4, 0x96, 0x00, 0x06, 0xb7, 0xb6, + 0xed, 0xcd, 0xea, 0x46, 0xb9, 0x87, 0xcc, 0xc0, 0x85, 0x47, 0xeb, 0x5b, 0x2b, 0xdb, 0x8f, 0x6a, + 0xf5, 0xda, 0x66, 0xd5, 0xde, 0x5d, 0xae, 0xda, 0x2b, 0xe5, 0x92, 0xf5, 0x15, 0x4c, 0x9b, 0x23, + 0x7c, 0xa5, 0x8b, 0x30, 0x82, 0x29, 0xa5, 0xcf, 0x3c, 0x78, 0xb4, 0xab, 0xb9, 0x07, 0x8a, 0xe3, + 0x57, 0xd2, 0xcd, 0x45, 0x1c, 0xd4, 0xc4, 0x67, 0xa4, 0x01, 0x91, 0xb7, 0xb9, 0x5a, 0x90, 0x7c, + 0x63, 0xc7, 0xd4, 0x82, 0x7a, 0xac, 0x17, 0xa0, 0xe8, 0xfb, 0x0e, 0x4c, 0x9b, 0xad, 0x9e, 0xd5, + 0x4e, 0xf4, 0x3a, 0xfa, 0x4d, 0x6a, 0x0e, 0xfe, 0x84, 0xe8, 0x86, 0x7b, 0x21, 0x59, 0xbf, 0x03, + 0x65, 0x01, 0x15, 0xef, 0xbc, 0xaf, 0x49, 0x43, 0x5e, 0x29, 0xe3, 0x31, 0x92, 0x74, 0xd0, 0xf5, + 0xa1, 0xcc, 0x24, 0xa6, 0xc0, 0xe4, 0x0d, 0x4c, 0xc3, 0xc0, 0x46, 0x7c, 0xa1, 0x62, 0xf3, 0x1f, + 0xe8, 0xe7, 0x1e, 0x39, 0x41, 0x24, 0x9d, 0x8a, 0x46, 0x6c, 0xf5, 0x9b, 0xbc, 0x0d, 0x83, 0xf7, + 0xdc, 0x56, 0x24, 0x8c, 0x13, 0xf1, 0x26, 0xcf, 0xc8, 0xf2, 0x0a, 0x5b, 0x00, 0x58, 0x36, 0x5c, + 0xd0, 0x1a, 0x3c, 0x47, 0x57, 0xc9, 0x1c, 0x0c, 0x6d, 0xd1, 0xaf, 0xb5, 0xf6, 0xe5, 0x4f, 0xeb, + 0x03, 0xb8, 0x20, 0x1c, 0xb6, 0x34, 0x36, 0x5d, 0x17, 0xaf, 0x1a, 0x4b, 0xc6, 0xc3, 0x2d, 0x41, + 0x12, 0xab, 0x18, 0xde, 0x5e, 0xbb, 0xf9, 0x82, 0x78, 0x6c, 0xa3, 0x38, 0x27, 0xde, 0x5b, 0xf2, + 0x1e, 0xa6, 0xdb, 0x74, 0xfe, 0x49, 0x09, 0xe6, 0x12, 0xe7, 0xfc, 0xe5, 0x23, 0xa7, 0xd5, 0xa2, + 0xde, 0x21, 0x25, 0x37, 0xa0, 0x7f, 0x77, 0x7b, 0x77, 0x47, 0xd8, 0x29, 0xe5, 0xfd, 0x32, 0x2b, + 0x52, 0x30, 0x36, 0x42, 0x90, 0x87, 0x70, 0x41, 0xba, 0x64, 0xaa, 0x2a, 0x31, 0x43, 0x57, 0x8a, + 0x1d, 0x3c, 0xd3, 0x78, 0xe4, 0x3d, 0x61, 0x94, 0xf8, 0x49, 0xc7, 0x0d, 0x68, 0x13, 0x6d, 0x2f, + 0xf1, 0x65, 0xad, 0x56, 0x63, 0xeb, 0x60, 0xfc, 0x85, 0x9b, 0xf5, 0x07, 0x25, 0x98, 0xcd, 0xb1, + 0x5b, 0x90, 0xb7, 0x8d, 0xe1, 0x4c, 0x69, 0xc3, 0x91, 0x20, 0x6b, 0x3d, 0x62, 0x3c, 0xcb, 0x9a, + 0x9f, 0x6a, 0xdf, 0x39, 0xfc, 0x54, 0xd7, 0x7a, 0x62, 0xdf, 0xd4, 0x25, 0x80, 0x61, 0x59, 0x6e, + 0x4d, 0xc2, 0xb8, 0xc1, 0x37, 0xcb, 0x82, 0x31, 0xbd, 0x65, 0x36, 0x39, 0xcb, 0x7e, 0x53, 0x4d, + 0x0e, 0xfb, 0xdb, 0xfa, 0x3b, 0x25, 0x98, 0xc6, 0x21, 0x1e, 0xba, 0x4c, 0xf4, 0xc5, 0x1c, 0x5a, + 0x34, 0x46, 0xb2, 0x60, 0x8c, 0x24, 0x01, 0xab, 0x86, 0xf4, 0x71, 0x6a, 0x48, 0x0b, 0x59, 0x43, + 0xc2, 0xe5, 0xed, 0xfa, 0x9e, 0x31, 0x12, 0xed, 0x32, 0xe8, 0x0f, 0x4b, 0x30, 0xa5, 0xf5, 0x49, + 0xf5, 0xff, 0x8e, 0xd1, 0xa5, 0xcb, 0x19, 0x5d, 0x4a, 0x31, 0x79, 0x29, 0xd5, 0xa3, 0xd7, 0x8b, + 0x7a, 0xd4, 0x95, 0xc7, 0xff, 0xb5, 0x04, 0x33, 0x99, 0x3c, 0x20, 0x17, 0x99, 0x6e, 0xdb, 0x08, + 0x68, 0x24, 0xd8, 0x2b, 0x7e, 0xb1, 0xf2, 0xf5, 0x30, 0xec, 0xd0, 0x40, 0x7c, 0xe7, 0xe2, 0x17, + 0x79, 0x1d, 0xc6, 0x77, 0x68, 0xe0, 0xfa, 0x4d, 0xee, 0xc1, 0xcc, 0x5d, 0x03, 0xc7, 0x6d, 0xb3, + 0x90, 0x2c, 0xc0, 0x48, 0xb5, 0x75, 0xe8, 0x07, 0x6e, 0x74, 0xc4, 0xef, 0xe3, 0x46, 0xec, 0xb8, + 0x80, 0xd1, 0x5e, 0x71, 0x0f, 0xf9, 0xb5, 0x02, 0x43, 0x16, 0xbf, 0x98, 0x70, 0x91, 0xf6, 0xba, + 0x41, 0x2e, 0x5c, 0xa4, 0x31, 0xee, 0x22, 0x0c, 0x7e, 0x6e, 0xe3, 0x22, 0xc0, 0x97, 0xbf, 0xb6, + 0xf8, 0x45, 0x26, 0xd0, 0x07, 0x15, 0xdf, 0xf5, 0xa2, 0xef, 0xe9, 0xc7, 0x30, 0x9d, 0xc5, 0xd7, + 0xac, 0x25, 0x24, 0x70, 0x7b, 0x15, 0xee, 0x0f, 0x60, 0xaa, 0xda, 0x6c, 0x6e, 0xde, 0xab, 0xf2, + 0x5b, 0x7f, 0x31, 0xab, 0xfc, 0xe3, 0xe1, 0xf6, 0x3a, 0xa1, 0xb2, 0xf5, 0xaf, 0x7b, 0x6e, 0x64, + 0x4f, 0xad, 0x7e, 0xed, 0x86, 0x91, 0xeb, 0x1d, 0x6a, 0x66, 0x3d, 0xfb, 0xe2, 0x16, 0x7d, 0x96, + 0xb1, 0x04, 0xd8, 0x6e, 0x6a, 0xd2, 0x56, 0x66, 0xc0, 0x24, 0xf1, 0x69, 0x8d, 0x6c, 0x2c, 0x4a, + 0x66, 0x4d, 0xba, 0x71, 0x45, 0x5f, 0xb5, 0xf1, 0xc4, 0xfa, 0x0e, 0x5c, 0xe4, 0x22, 0xad, 0xa8, + 0xf3, 0xa2, 0xdb, 0xba, 0x15, 0xd2, 0xfa, 0x50, 0x5a, 0x29, 0x0a, 0x7b, 0x66, 0x8f, 0x19, 0x7d, + 0xc1, 0x26, 0xff, 0xb2, 0x04, 0xf3, 0x09, 0xd4, 0xda, 0x73, 0xaf, 0x21, 0xe5, 0xe9, 0x9b, 0x49, + 0x1f, 0x5f, 0xd4, 0x03, 0xb8, 0xf1, 0xcf, 0x6d, 0x2a, 0x37, 0x5f, 0x72, 0x1b, 0x80, 0x23, 0x6b, + 0xdb, 0x37, 0x1a, 0x9f, 0x85, 0x0f, 0x07, 0x6e, 0xe0, 0x1a, 0x08, 0xe9, 0x40, 0x16, 0xdf, 0xc5, + 0x37, 0xd2, 0xcd, 0x3a, 0x8b, 0xaf, 0xdd, 0xa9, 0x40, 0xaf, 0xe7, 0x98, 0x69, 0xb3, 0xe8, 0x5b, + 0x7f, 0xab, 0x0f, 0x66, 0xf5, 0x09, 0x7c, 0x91, 0xb1, 0xee, 0xc0, 0xe8, 0xb2, 0xef, 0x45, 0xf4, + 0xeb, 0x48, 0x7b, 0xcb, 0x4c, 0xd4, 0x5d, 0xb7, 0xaa, 0x11, 0xaa, 0x23, 0x2f, 0xa8, 0x33, 0x3d, + 0xc6, 0xf0, 0x45, 0x8b, 0x01, 0xc9, 0x32, 0x8c, 0x6f, 0xd1, 0x67, 0x29, 0x06, 0xa2, 0x3f, 0x9c, + 0x47, 0x9f, 0xd5, 0x35, 0x26, 0xea, 0x4e, 0x4a, 0x06, 0x0e, 0x39, 0x80, 0x09, 0xb9, 0xb8, 0x0c, + 0x66, 0xce, 0xeb, 0xbb, 0x8a, 0xb9, 0x9c, 0xf9, 0x6b, 0x5f, 0xd6, 0x42, 0x0e, 0x0f, 0x13, 0x14, + 0xd9, 0xd0, 0x79, 0x8b, 0xfc, 0x01, 0xab, 0xb9, 0x6d, 0x69, 0x35, 0x86, 0xb7, 0x61, 0xf2, 0xe1, + 0xaa, 0x4e, 0xc2, 0xda, 0x81, 0xb9, 0xf4, 0x7c, 0x88, 0xd6, 0xde, 0x83, 0x41, 0x5e, 0x2a, 0xd4, + 0x00, 0x19, 0x48, 0x42, 0x41, 0xf3, 0x73, 0x3a, 0x6f, 0xc6, 0x16, 0xb0, 0xd6, 0x1a, 0xda, 0x4e, + 0x14, 0x8c, 0x52, 0xc4, 0xde, 0x4d, 0x4e, 0x2f, 0x3a, 0x72, 0xca, 0xe9, 0xd5, 0x3d, 0x3d, 0xa4, + 0xef, 0xfa, 0x32, 0x9a, 0x9f, 0x74, 0x4a, 0xa2, 0x63, 0x37, 0x61, 0x48, 0x14, 0x25, 0x42, 0x5c, + 0xc4, 0x9f, 0x9f, 0x04, 0xb0, 0x3e, 0x86, 0x4b, 0x68, 0x0b, 0x73, 0xbd, 0xc3, 0x16, 0xdd, 0x0b, + 0x0d, 0xef, 0xf3, 0x6e, 0x9f, 0xf5, 0x77, 0x61, 0x3e, 0x0b, 0xb7, 0xeb, 0x97, 0xcd, 0x9f, 0xb4, + 0xff, 0x79, 0x2f, 0x4c, 0xaf, 0x87, 0xba, 0x32, 0x21, 0x38, 0x71, 0x2b, 0xeb, 0xb1, 0x35, 0xf2, + 0x64, 0xad, 0x27, 0xeb, 0x31, 0xf5, 0x7b, 0xda, 0xb3, 0xb6, 0xde, 0xa2, 0x57, 0xd4, 0x6c, 0xdb, + 0x52, 0x0f, 0xdb, 0xde, 0x84, 0xfe, 0x2d, 0x26, 0xaa, 0xfb, 0xc4, 0xdc, 0x71, 0x0c, 0x56, 0x84, + 0xcf, 0xca, 0xd8, 0x16, 0xc9, 0x7e, 0x90, 0x7b, 0xa9, 0xc7, 0x6b, 0xfd, 0xdd, 0x5f, 0x09, 0xaf, + 0xf5, 0xa4, 0xde, 0xb1, 0x7d, 0x00, 0xa3, 0xd5, 0xe6, 0x31, 0x77, 0x38, 0xf3, 0xbd, 0xc4, 0x67, + 0xa9, 0xd5, 0xac, 0xf5, 0xd8, 0x3a, 0x20, 0x3b, 0xe1, 0x56, 0xdb, 0x6d, 0xdc, 0xa8, 0xb2, 0x5e, + 0x4e, 0xaf, 0xf5, 0xa0, 0xff, 0xf6, 0xd2, 0x30, 0x0c, 0xee, 0x3a, 0xc1, 0x21, 0x8d, 0xac, 0x1f, + 0xc0, 0xbc, 0x70, 0x13, 0xe1, 0x96, 0x3f, 0x74, 0x26, 0x09, 0x63, 0x4f, 0xa0, 0x22, 0xd7, 0x8e, + 0xab, 0x00, 0xa8, 0xe7, 0xaf, 0x7b, 0x4d, 0xfa, 0x35, 0xf7, 0x66, 0xb2, 0xb5, 0x12, 0xeb, 0x7d, + 0x18, 0x51, 0x1c, 0x42, 0x65, 0x56, 0xdb, 0xec, 0x90, 0x5b, 0xd3, 0xc6, 0x6b, 0x3d, 0xf9, 0x44, + 0xef, 0x92, 0x31, 0x76, 0x11, 0x09, 0x81, 0x6b, 0xbf, 0x2e, 0xcc, 0x24, 0x16, 0x41, 0xfc, 0xd4, + 0x56, 0xe9, 0x9f, 0xe8, 0xf9, 0x64, 0xab, 0xdf, 0x49, 0xf5, 0xb4, 0xf7, 0x4c, 0xea, 0xa9, 0xf5, + 0xcf, 0x7b, 0xf1, 0xe0, 0x94, 0xe2, 0x47, 0xc2, 0x06, 0xa5, 0xdb, 0xc1, 0x96, 0x60, 0x04, 0x47, + 0xbf, 0x22, 0x5f, 0x16, 0x15, 0x7b, 0x39, 0x0c, 0xff, 0xfc, 0xa4, 0xd2, 0x83, 0xae, 0x0d, 0x31, + 0x1a, 0xf9, 0x14, 0x86, 0x56, 0xbd, 0x26, 0x52, 0xe8, 0x3b, 0x07, 0x05, 0x89, 0xc4, 0xe6, 0x04, + 0xbb, 0xbc, 0xcb, 0x3e, 0x61, 0x6e, 0xba, 0xb0, 0xb5, 0x92, 0xf8, 0x04, 0x37, 0x90, 0x77, 0x82, + 0x1b, 0x4c, 0x9c, 0xe0, 0x2c, 0x18, 0xd8, 0x0e, 0x9a, 0x22, 0x82, 0xc1, 0xc4, 0xe2, 0x98, 0x60, + 0x1c, 0x96, 0xd9, 0xbc, 0xca, 0xfa, 0x1f, 0x25, 0x98, 0xbd, 0x4f, 0xa3, 0xcc, 0x35, 0x64, 0x70, + 0xa5, 0xf4, 0xd2, 0x5c, 0xe9, 0x7d, 0x11, 0xae, 0xa8, 0x51, 0xf7, 0xe5, 0x8d, 0xba, 0x3f, 0x6f, + 0xd4, 0x03, 0xf9, 0xa3, 0xbe, 0x0f, 0x83, 0x7c, 0xa8, 0xec, 0x94, 0xba, 0x1e, 0xd1, 0xe3, 0xf8, + 0x94, 0xaa, 0xfb, 0x68, 0xd9, 0xbc, 0x8e, 0x29, 0x92, 0x1b, 0x4e, 0xa8, 0x9f, 0x52, 0xc5, 0x4f, + 0xeb, 0xc7, 0xf8, 0x26, 0x71, 0xc3, 0x6f, 0x3c, 0xd1, 0xac, 0x9d, 0x43, 0xfc, 0x0b, 0x4d, 0x5a, + 0xc7, 0x19, 0x14, 0xaf, 0xb1, 0x25, 0x04, 0xb9, 0x06, 0xa3, 0xeb, 0xde, 0x3d, 0x3f, 0x68, 0xd0, + 0x6d, 0xaf, 0xc5, 0xa9, 0x0f, 0xdb, 0x7a, 0x91, 0xb0, 0x02, 0x88, 0x16, 0xe2, 0xa3, 0x35, 0x16, + 0x24, 0x8e, 0xd6, 0xac, 0x6c, 0x7f, 0xd1, 0xe6, 0x75, 0xc2, 0xc8, 0xc0, 0xfe, 0x2e, 0x3a, 0x95, + 0xaa, 0xe3, 0x6b, 0x37, 0xc0, 0x03, 0xb8, 0x64, 0xd3, 0x76, 0xcb, 0x61, 0x3a, 0xdd, 0xb1, 0xcf, + 0xe1, 0xd5, 0x98, 0xaf, 0x65, 0xbc, 0x27, 0x32, 0x6f, 0xec, 0x55, 0x97, 0x7b, 0x0b, 0xba, 0x7c, + 0x0c, 0xd7, 0xef, 0xd3, 0xc8, 0x14, 0xa8, 0xb1, 0x2d, 0x55, 0x0c, 0x7e, 0x0d, 0x86, 0x43, 0xd3, + 0x0e, 0x7c, 0x55, 0x5e, 0x3f, 0x64, 0x21, 0xee, 0xdf, 0x95, 0x37, 0x25, 0x82, 0x8e, 0xfa, 0xcb, + 0xfa, 0x0c, 0x2a, 0x79, 0xcd, 0x9d, 0xcd, 0xa1, 0xd2, 0x85, 0x6b, 0xf9, 0x04, 0x44, 0x77, 0x57, + 0x41, 0xda, 0x8c, 0xc5, 0x27, 0xd4, 0xad, 0xb7, 0xa6, 0x99, 0x59, 0xfc, 0x61, 0x2d, 0x49, 0xd7, + 0xb2, 0x97, 0xe8, 0x6e, 0x1d, 0xaf, 0x63, 0x4d, 0x02, 0x31, 0x5f, 0xab, 0x30, 0x2c, 0xcb, 0x04, + 0x5f, 0x67, 0x33, 0x7b, 0x2a, 0x19, 0xda, 0x94, 0x04, 0x14, 0x9a, 0xf5, 0x63, 0x79, 0x35, 0x61, + 0x62, 0x9c, 0xed, 0x81, 0xdd, 0x59, 0xee, 0x22, 0x2c, 0x1f, 0x2e, 0x99, 0xb4, 0x75, 0x93, 0x73, + 0x59, 0x33, 0x39, 0x73, 0x4b, 0xf3, 0x35, 0xd3, 0x04, 0xda, 0x2b, 0xd6, 0x65, 0x5c, 0x44, 0xae, + 0xea, 0x86, 0xe5, 0xb1, 0xf4, 0x8b, 0xbd, 0x77, 0x61, 0x3e, 0xab, 0x41, 0xed, 0x1c, 0xa8, 0xac, + 0x97, 0x42, 0xdf, 0xf9, 0xed, 0x12, 0x58, 0x86, 0xff, 0x0e, 0xce, 0xd0, 0x4e, 0xe0, 0x3f, 0x75, + 0x9b, 0xda, 0xa5, 0xc8, 0xdb, 0x86, 0x41, 0x8e, 0xbf, 0x95, 0x4a, 0xba, 0x0e, 0x0b, 0x69, 0xf7, + 0x6e, 0xc2, 0x48, 0xc6, 0x55, 0x46, 0xf4, 0xe9, 0x79, 0x42, 0xf5, 0xb7, 0x06, 0xca, 0x78, 0xf6, + 0xbf, 0x4a, 0xf0, 0x5a, 0x61, 0x1f, 0x44, 0xff, 0x0f, 0xa0, 0x9c, 0xac, 0x13, 0x73, 0x5f, 0xd1, + 0xbc, 0x09, 0xd2, 0x14, 0xf6, 0xef, 0x70, 0xff, 0x64, 0xe9, 0xf7, 0xd2, 0x56, 0x94, 0x53, 0xf4, + 0xce, 0xdf, 0x7b, 0xf2, 0x11, 0xc0, 0xae, 0x1f, 0x39, 0xad, 0x65, 0x3c, 0xba, 0xf7, 0xc5, 0xbe, + 0xe6, 0x11, 0x2b, 0xad, 0x27, 0x1f, 0xa6, 0x6b, 0xc0, 0xd6, 0xf7, 0xf1, 0x8b, 0xcc, 0xee, 0xf4, + 0xd9, 0x3e, 0x92, 0x65, 0x78, 0x2d, 0x71, 0xa3, 0xfd, 0x02, 0x44, 0x22, 0x98, 0x61, 0xec, 0x67, + 0x5a, 0xf3, 0xfd, 0xc0, 0xef, 0xb4, 0x7f, 0x35, 0xb3, 0xfe, 0xef, 0x4a, 0xdc, 0xc9, 0x4f, 0x6f, + 0x56, 0x4c, 0xf4, 0x32, 0x40, 0x5c, 0x9a, 0x70, 0xf6, 0x56, 0x15, 0xfb, 0x77, 0xf8, 0x61, 0x19, + 0x6d, 0xdd, 0x87, 0x9c, 0x80, 0x86, 0xf6, 0xab, 0x9d, 0xc9, 0xbb, 0x78, 0x8d, 0xad, 0x5a, 0x3f, + 0x1b, 0xdf, 0x3f, 0x90, 0x96, 0x8b, 0x73, 0xe2, 0x1d, 0xc1, 0x34, 0xfb, 0x76, 0xd9, 0x29, 0xdf, + 0x0f, 0xdc, 0x48, 0x3e, 0x5b, 0x20, 0x3b, 0xe2, 0xd1, 0x2f, 0xc7, 0xfa, 0xee, 0x2f, 0x4f, 0x2a, + 0x1f, 0x9e, 0x27, 0x6e, 0x9a, 0xa4, 0xb9, 0xab, 0x1e, 0x0a, 0x5b, 0xb3, 0xd0, 0xb7, 0x6c, 0x6f, + 0xa0, 0xa8, 0xb2, 0x37, 0x94, 0xa8, 0xb2, 0x37, 0xac, 0xff, 0xde, 0x0b, 0x15, 0x1e, 0x96, 0x00, + 0xbd, 0x1f, 0x62, 0x7b, 0x83, 0xe6, 0x4e, 0x71, 0x56, 0xd3, 0x40, 0x22, 0xec, 0x40, 0xef, 0x59, + 0xc2, 0x0e, 0xfc, 0x06, 0xe4, 0x18, 0x9b, 0xce, 0x70, 0x7e, 0x7f, 0xeb, 0xf4, 0xa4, 0xf2, 0x5a, + 0x7c, 0x7e, 0xe7, 0xb5, 0x59, 0x07, 0xf9, 0x9c, 0x26, 0xd2, 0x96, 0x87, 0xfe, 0x17, 0xb0, 0x3c, + 0xbc, 0x0b, 0x43, 0x78, 0x0c, 0x59, 0xdf, 0x11, 0x1e, 0x81, 0xb8, 0x3c, 0x31, 0x86, 0x48, 0xdd, + 0xd5, 0xc3, 0x35, 0x49, 0x30, 0xeb, 0xef, 0xf6, 0xc2, 0xb5, 0x7c, 0x9e, 0x8b, 0xbe, 0xad, 0x00, + 0xc4, 0x7e, 0x17, 0x45, 0x7e, 0x1e, 0xf8, 0xed, 0x3c, 0xa3, 0x07, 0xca, 0xcf, 0x4a, 0xc3, 0x63, + 0x5a, 0x8b, 0x7c, 0x01, 0x9a, 0x30, 0xf2, 0x1b, 0x0f, 0x43, 0x45, 0x34, 0x40, 0x51, 0x64, 0x44, + 0x03, 0x14, 0x65, 0xe4, 0x00, 0x66, 0x77, 0x02, 0xf7, 0xa9, 0x13, 0xd1, 0x87, 0xf4, 0x39, 0x7f, + 0x44, 0xb2, 0x2a, 0x5e, 0x8e, 0xf0, 0x67, 0xbd, 0x37, 0x4e, 0x4f, 0x2a, 0xaf, 0xb7, 0x39, 0x08, + 0xfb, 0x30, 0xeb, 0xfc, 0x4d, 0x5a, 0x3d, 0xfd, 0x98, 0x24, 0x8f, 0x90, 0xf5, 0x6f, 0x4b, 0x70, + 0x19, 0x15, 0x6a, 0x61, 0x30, 0x95, 0x8d, 0xbf, 0x90, 0xbb, 0x9f, 0x3e, 0x40, 0xb1, 0x16, 0xd1, + 0xdd, 0xcf, 0x78, 0x21, 0x6b, 0x1b, 0x60, 0x64, 0x1d, 0x46, 0xc5, 0x6f, 0xfc, 0xfe, 0xfa, 0x50, + 0x95, 0x9f, 0xd1, 0x04, 0x16, 0x2e, 0x75, 0x6e, 0xe4, 0xc1, 0x85, 0x2d, 0x88, 0xe1, 0x43, 0x32, + 0x5b, 0xc7, 0xb5, 0x7e, 0xd1, 0x0b, 0x0b, 0xfb, 0x34, 0x70, 0x1f, 0x3f, 0xcf, 0x19, 0xcc, 0x36, + 0x4c, 0xcb, 0x22, 0x1e, 0x9a, 0xc0, 0xf8, 0xc4, 0x78, 0xbc, 0x31, 0xd9, 0x55, 0x11, 0xdb, 0x40, + 0x7e, 0x71, 0x99, 0x88, 0xe7, 0x70, 0xe4, 0x7b, 0x0f, 0x86, 0x13, 0xc1, 0x41, 0x70, 0xfe, 0xe5, + 0x17, 0x1a, 0x4f, 0xd5, 0x5a, 0x8f, 0xad, 0x20, 0xc9, 0xef, 0xe4, 0xdf, 0xbc, 0x08, 0xa3, 0x45, + 0x37, 0xcb, 0x25, 0x7e, 0xb0, 0xec, 0x63, 0x75, 0xb4, 0xda, 0x8c, 0x0f, 0x76, 0xad, 0xc7, 0xce, + 0x6b, 0x69, 0x69, 0x14, 0x46, 0xaa, 0x78, 0x9b, 0xc4, 0xce, 0xdc, 0xff, 0xb3, 0x17, 0xae, 0xca, + 0x07, 0x21, 0x39, 0x6c, 0xfe, 0x02, 0x66, 0x65, 0x51, 0xb5, 0xcd, 0x14, 0x06, 0xda, 0x34, 0x39, + 0xcd, 0x63, 0xfe, 0x49, 0x4e, 0x3b, 0x02, 0x26, 0x66, 0x76, 0x1e, 0xfa, 0xab, 0xb1, 0x5b, 0x7e, + 0x9a, 0x15, 0xaa, 0x05, 0xed, 0x87, 0xba, 0xcc, 0x34, 0x58, 0x63, 0xc8, 0xcf, 0x66, 0xca, 0xee, + 0xd9, 0xff, 0xb2, 0x76, 0xcf, 0xb5, 0x9e, 0xa4, 0xe5, 0x73, 0x69, 0x02, 0xc6, 0xb6, 0xe8, 0xb3, + 0x98, 0xef, 0x7f, 0xbd, 0x94, 0x78, 0x82, 0xce, 0x34, 0x0c, 0xfe, 0x16, 0xbd, 0x14, 0x47, 0xfb, + 0xc0, 0x27, 0xe8, 0xba, 0x86, 0xc1, 0x41, 0xd7, 0x61, 0x88, 0x5f, 0xb1, 0x36, 0xcf, 0x70, 0x36, + 0x57, 0x2f, 0x3b, 0xf8, 0x73, 0xbb, 0x26, 0x3f, 0xa6, 0x0b, 0x7c, 0xeb, 0x21, 0x5c, 0x17, 0x9e, + 0xc7, 0xe6, 0xe4, 0x63, 0x43, 0xe7, 0xdc, 0xbe, 0x2c, 0x07, 0xae, 0xde, 0xa7, 0x49, 0xd1, 0x63, + 0xbc, 0x7c, 0xf9, 0x0c, 0x26, 0x8d, 0x72, 0x45, 0x11, 0xb5, 0x52, 0xb5, 0x86, 0x14, 0xe9, 0x24, + 0xb4, 0x75, 0x2d, 0xab, 0x09, 0xbd, 0xb3, 0x16, 0xc5, 0xe0, 0x7d, 0x41, 0x7c, 0x39, 0x16, 0x9e, + 0x43, 0xea, 0xdd, 0xd0, 0xbe, 0x6b, 0x2e, 0xf1, 0x78, 0x7c, 0x2f, 0xb9, 0xf3, 0xaa, 0x5a, 0x6b, + 0xdc, 0xb0, 0xe2, 0x5b, 0x13, 0x30, 0x26, 0xab, 0x5a, 0x34, 0x0c, 0xad, 0x9f, 0x0d, 0x80, 0x25, + 0x18, 0x9b, 0x75, 0x6f, 0x2c, 0xf9, 0x71, 0x90, 0xea, 0xac, 0xd8, 0xa8, 0x2e, 0xea, 0x71, 0xe3, + 0xe2, 0x5a, 0xbe, 0xf2, 0x50, 0xcf, 0x6b, 0xc4, 0xa5, 0xc6, 0xca, 0x4b, 0x8d, 0xfe, 0x87, 0x39, + 0x62, 0x92, 0x7f, 0x6c, 0x6f, 0x9c, 0x9e, 0x54, 0xae, 0xe7, 0x88, 0x49, 0x83, 0x6e, 0xb6, 0xc8, + 0xb4, 0xcd, 0xcb, 0x8c, 0xbe, 0x17, 0xb9, 0xcc, 0x60, 0x5f, 0xa4, 0x7e, 0x9d, 0xb1, 0x67, 0xf2, + 0x52, 0x7c, 0x8f, 0xf2, 0x32, 0x5a, 0xaf, 0x12, 0x2f, 0xc1, 0xb5, 0x12, 0x83, 0xaa, 0x41, 0x86, + 0xb8, 0x50, 0xd6, 0xac, 0x8d, 0xcb, 0x47, 0xb4, 0xf1, 0x44, 0x58, 0x79, 0xe5, 0x55, 0x6c, 0x96, + 0xb5, 0x9b, 0xc7, 0x0f, 0xe5, 0xdf, 0x39, 0xaf, 0xa8, 0x37, 0x18, 0xaa, 0xfe, 0x92, 0x3d, 0x49, + 0x96, 0xfc, 0x14, 0xa6, 0xd4, 0x54, 0x27, 0x1c, 0x87, 0x46, 0x17, 0x5f, 0x8f, 0x03, 0x0d, 0x1e, + 0x3f, 0x76, 0x6e, 0x3d, 0xbd, 0x73, 0x2b, 0x03, 0x96, 0x3f, 0x90, 0x6e, 0xc8, 0x0a, 0xcd, 0x6b, + 0x48, 0xbf, 0xa2, 0xca, 0x42, 0xd4, 0x2e, 0xa2, 0x7f, 0x5f, 0xb9, 0xb9, 0x33, 0x7d, 0xc1, 0x6d, + 0x51, 0xf1, 0x62, 0x44, 0xae, 0xbe, 0x9c, 0x4b, 0xb4, 0xd2, 0x37, 0x7c, 0x89, 0xf6, 0x47, 0xbd, + 0xd2, 0xb9, 0x3f, 0x7d, 0x8f, 0x79, 0xee, 0xbb, 0xb4, 0xcc, 0x11, 0x9c, 0x69, 0x33, 0xcd, 0xec, + 0x1c, 0x59, 0x92, 0x37, 0x91, 0x2a, 0x68, 0xd0, 0x84, 0xb2, 0xea, 0xc7, 0x15, 0xc6, 0xe5, 0x24, + 0xaa, 0x2e, 0x1a, 0x56, 0xf2, 0x9a, 0xab, 0xef, 0xe5, 0xaf, 0xb9, 0xfe, 0xe5, 0x08, 0x5c, 0xd8, + 0x71, 0x0e, 0x5d, 0x8f, 0x09, 0x6d, 0x9b, 0x86, 0x7e, 0x27, 0x68, 0x50, 0x52, 0x85, 0x09, 0xd3, + 0x73, 0xb3, 0x8b, 0x5f, 0x2a, 0xdb, 0x97, 0xcc, 0x32, 0xb2, 0x08, 0x23, 0xea, 0xbd, 0xa6, 0xd8, + 0x4c, 0x32, 0xde, 0x71, 0xae, 0xf5, 0xd8, 0x31, 0x18, 0xf9, 0xc8, 0xb8, 0x99, 0x99, 0x54, 0x4f, + 0x8f, 0x11, 0x76, 0x91, 0xbb, 0xd6, 0x79, 0x7e, 0xd3, 0xdc, 0x10, 0xf9, 0xf5, 0xc3, 0x8f, 0x53, + 0x97, 0x35, 0x03, 0x46, 0x8f, 0x53, 0x16, 0x2b, 0xd4, 0x05, 0x72, 0x03, 0xb8, 0x66, 0x5c, 0xe3, + 0xfc, 0x00, 0x46, 0x1f, 0x76, 0x0e, 0xa8, 0xbc, 0x96, 0x1a, 0x14, 0xfb, 0x63, 0xd2, 0x1f, 0x59, + 0xd4, 0xef, 0xdf, 0xe5, 0x73, 0xf0, 0xa4, 0x73, 0x40, 0xd3, 0x91, 0x81, 0x99, 0x60, 0xd2, 0x88, + 0x91, 0x23, 0x28, 0x27, 0x5d, 0x87, 0x45, 0x98, 0xad, 0x02, 0x87, 0x67, 0x8c, 0xf1, 0xa0, 0xc5, + 0x1f, 0xe6, 0x0e, 0x8d, 0x46, 0x23, 0x29, 0xaa, 0xe4, 0x37, 0x61, 0x26, 0xd3, 0x5e, 0xa8, 0x9e, + 0x1f, 0x15, 0x9b, 0x22, 0x51, 0xa8, 0x27, 0xb8, 0x26, 0xdf, 0x3a, 0x19, 0x2d, 0x67, 0xb7, 0x42, + 0x9a, 0x30, 0x99, 0x70, 0x89, 0x15, 0x41, 0xd0, 0xf3, 0x9d, 0x6c, 0x71, 0x63, 0x92, 0x91, 0x2a, + 0x33, 0xdb, 0x4a, 0x92, 0x24, 0x1b, 0x30, 0xa2, 0x8e, 0xfb, 0x18, 0xae, 0x27, 0xdb, 0xb4, 0x31, + 0x77, 0x7a, 0x52, 0x99, 0x8e, 0x4d, 0x1b, 0x06, 0xcd, 0x98, 0x00, 0xf9, 0x2d, 0xb8, 0xae, 0x96, + 0xe8, 0x76, 0x90, 0x6d, 0x04, 0x12, 0xf1, 0x8d, 0x6f, 0x26, 0x57, 0x78, 0x1e, 0xfc, 0xfe, 0x9d, + 0xa5, 0xde, 0xb9, 0xd2, 0x5a, 0x8f, 0xdd, 0x9d, 0x34, 0xf9, 0x59, 0x09, 0x2e, 0xe6, 0xb4, 0x3a, + 0x86, 0xad, 0x76, 0xb5, 0xcc, 0xa1, 0x72, 0x8f, 0x0f, 0x7e, 0xdc, 0x66, 0xfc, 0x34, 0x4d, 0x9a, + 0xe8, 0x8c, 0x71, 0xe7, 0xb4, 0x44, 0xde, 0x81, 0x41, 0x3c, 0x23, 0x87, 0x73, 0xe3, 0xa8, 0x45, + 0x62, 0x68, 0x13, 0x3c, 0x49, 0xeb, 0xfb, 0x86, 0x80, 0x21, 0x6b, 0x4c, 0x1b, 0xc3, 0x7d, 0x4b, + 0x6a, 0x4f, 0x22, 0x10, 0x92, 0xd0, 0xe8, 0x79, 0x95, 0x8c, 0x10, 0x61, 0x04, 0xb2, 0x36, 0xd1, + 0x96, 0x00, 0x86, 0x03, 0x21, 0x95, 0x1e, 0xf4, 0x0f, 0xf7, 0x97, 0x07, 0xf8, 0x87, 0x23, 0x7d, + 0xad, 0x7f, 0x77, 0x98, 0x3f, 0x8d, 0xdc, 0xf3, 0xdc, 0xc7, 0x6e, 0x2c, 0xc0, 0x74, 0xeb, 0x5a, + 0x9c, 0xf1, 0x41, 0xe8, 0xbe, 0x39, 0xb9, 0x1d, 0x94, 0x21, 0xae, 0xb7, 0xab, 0x21, 0xee, 0xae, + 0x76, 0xd9, 0xa4, 0xc5, 0x0e, 0xe4, 0x3a, 0x8e, 0x69, 0xf8, 0x8a, 0x6f, 0xa1, 0xbe, 0x82, 0x41, + 0x0c, 0xf7, 0xc7, 0x6f, 0xf2, 0x46, 0x17, 0x6f, 0x09, 0xb1, 0x5d, 0xd0, 0x7d, 0x1e, 0x1f, 0x50, + 0x3c, 0x77, 0xe6, 0x1c, 0xc7, 0x02, 0x83, 0xe3, 0x58, 0x42, 0x76, 0x61, 0x6a, 0x27, 0xa0, 0x4d, + 0xe1, 0xf1, 0xdb, 0x0e, 0x84, 0x71, 0x82, 0x9b, 0x3d, 0x70, 0xcb, 0x6f, 0xcb, 0xea, 0x3a, 0x55, + 0xf5, 0xfa, 0x86, 0x9a, 0x81, 0x4e, 0x56, 0x61, 0xa2, 0x46, 0x9d, 0xa0, 0x71, 0xf4, 0x90, 0x3e, + 0x67, 0xea, 0x8e, 0x11, 0x44, 0x3d, 0xc4, 0x1a, 0x36, 0x5e, 0xac, 0xd2, 0xbd, 0x33, 0x4c, 0x24, + 0xf2, 0x7d, 0x18, 0xac, 0xf9, 0x41, 0xb4, 0xf4, 0x5c, 0x08, 0x35, 0x79, 0xd7, 0xc3, 0x0b, 0x97, + 0x2e, 0xc9, 0x40, 0xf2, 0xa1, 0x1f, 0x44, 0xf5, 0x03, 0x23, 0x56, 0x0e, 0x07, 0x21, 0xcf, 0x61, + 0xda, 0x14, 0x28, 0xc2, 0x11, 0x75, 0x58, 0xa8, 0x59, 0x59, 0x52, 0x8b, 0x83, 0x2c, 0xdd, 0x10, + 0xd4, 0xaf, 0x25, 0xc5, 0xd6, 0x63, 0xac, 0xd7, 0xc3, 0xd7, 0x64, 0xe1, 0x93, 0x4d, 0x8c, 0xbf, + 0xcf, 0x47, 0x54, 0x0d, 0xb9, 0x03, 0xeb, 0x48, 0x1c, 0x8d, 0xa9, 0x83, 0x42, 0x09, 0x39, 0xe1, + 0x84, 0xc9, 0xb4, 0x0a, 0x76, 0x0a, 0x95, 0xec, 0xc0, 0x85, 0xbd, 0x90, 0xee, 0x04, 0xf4, 0xa9, + 0x4b, 0x9f, 0x49, 0x7a, 0x10, 0x87, 0xae, 0x61, 0xf4, 0xda, 0xbc, 0x36, 0x8b, 0x60, 0x1a, 0x99, + 0x7c, 0x04, 0xb0, 0xe3, 0x7a, 0x1e, 0x6d, 0xe2, 0x85, 0xe1, 0x28, 0x92, 0x42, 0x93, 0x6a, 0x1b, + 0x4b, 0xeb, 0xbe, 0xd7, 0xd2, 0x59, 0xaa, 0x01, 0x93, 0x25, 0x18, 0x5f, 0xf7, 0x1a, 0xad, 0x8e, + 0xb8, 0xd8, 0x0f, 0x51, 0xa0, 0x88, 0x90, 0x5a, 0x2e, 0xaf, 0xa8, 0xa7, 0x3e, 0x72, 0x13, 0x85, + 0x3c, 0x04, 0x22, 0x0a, 0xc4, 0xaa, 0x75, 0x0e, 0x5a, 0x54, 0x7c, 0xee, 0x68, 0x2a, 0x91, 0x84, + 0x70, 0xb9, 0x1b, 0x91, 0xaa, 0x52, 0x68, 0xf3, 0x1f, 0xc1, 0xa8, 0xb6, 0xe6, 0x33, 0xde, 0xef, + 0x4f, 0xeb, 0xef, 0xf7, 0x47, 0xf4, 0x77, 0xfa, 0xff, 0xb8, 0x04, 0x0b, 0xd9, 0xdf, 0x92, 0x50, + 0xc0, 0xb6, 0x61, 0x44, 0x15, 0xaa, 0xf7, 0x22, 0x52, 0xf5, 0x4f, 0x68, 0x40, 0xfc, 0x83, 0x96, + 0x92, 0x47, 0x1f, 0x7d, 0x4c, 0xe3, 0x05, 0xec, 0xf1, 0x7f, 0x63, 0x18, 0xa6, 0xd1, 0x2f, 0x3a, + 0x29, 0xa7, 0x3e, 0xc3, 0x38, 0x1c, 0x58, 0xa6, 0x99, 0x97, 0x85, 0xa5, 0x89, 0x97, 0x27, 0x23, + 0x22, 0x19, 0x08, 0xe4, 0x7d, 0xdd, 0x9b, 0xa1, 0x57, 0x8b, 0xf8, 0x2f, 0x0b, 0xf5, 0x21, 0xc4, + 0x6e, 0x0e, 0x6f, 0x1b, 0x97, 0xe9, 0x67, 0x16, 0x7a, 0xfd, 0x67, 0x15, 0x7a, 0x7b, 0x4a, 0xe8, + 0xf1, 0xf8, 0x0e, 0x6f, 0x69, 0x42, 0xef, 0xd5, 0x4b, 0xbb, 0xc1, 0x57, 0x2d, 0xed, 0x86, 0x5e, + 0x4e, 0xda, 0x0d, 0xbf, 0xa0, 0xb4, 0xbb, 0x07, 0x13, 0x5b, 0x94, 0x36, 0xb5, 0x8b, 0x92, 0x91, + 0x78, 0xf7, 0xf4, 0x28, 0x9a, 0xc0, 0xb2, 0x6e, 0x4b, 0x12, 0x58, 0xb9, 0x52, 0x13, 0xfe, 0xdf, + 0x48, 0xcd, 0xd1, 0x57, 0x2c, 0x35, 0xc7, 0x5e, 0x46, 0x6a, 0xa6, 0x44, 0xdf, 0xf8, 0xb9, 0x45, + 0xdf, 0xcb, 0x48, 0xab, 0x4f, 0xd1, 0x19, 0xb0, 0x56, 0x5b, 0x13, 0x7e, 0x1f, 0x9a, 0xa3, 0xc5, + 0x9a, 0x1f, 0x4a, 0x5f, 0x69, 0xfc, 0x9b, 0x95, 0xed, 0xf8, 0x81, 0xbc, 0xac, 0xc6, 0xbf, 0xad, + 0x25, 0x74, 0x01, 0xd4, 0xf1, 0x95, 0xa3, 0xfd, 0x90, 0x78, 0x6c, 0x27, 0x64, 0x5c, 0xf2, 0x18, + 0x65, 0xcb, 0x7a, 0xeb, 0xcf, 0x4b, 0xfc, 0x52, 0xf2, 0xff, 0x47, 0x51, 0xf9, 0x32, 0x17, 0x85, + 0xbf, 0x13, 0x3f, 0xc2, 0x17, 0x01, 0x03, 0x02, 0xa7, 0xf1, 0x24, 0xbe, 0xa9, 0xfd, 0x11, 0xfb, + 0xce, 0xf5, 0x0a, 0x8c, 0xb8, 0x19, 0x9f, 0x15, 0xcd, 0xca, 0xfd, 0x3b, 0x52, 0x00, 0x88, 0x58, + 0x04, 0xbc, 0xd8, 0x14, 0x00, 0x3a, 0x02, 0x7a, 0xb9, 0x4d, 0x5a, 0x36, 0x7f, 0x43, 0x9e, 0xd9, + 0x83, 0x0f, 0xd2, 0xaf, 0xa0, 0xf1, 0x30, 0x12, 0xbf, 0x82, 0xd6, 0xd9, 0x18, 0xbf, 0x87, 0xde, + 0x83, 0xcb, 0x36, 0x3d, 0xf6, 0x9f, 0xd2, 0x57, 0x4b, 0xf6, 0x87, 0x70, 0xc9, 0x24, 0xc8, 0xdf, + 0xcb, 0xf0, 0x48, 0xd9, 0x9f, 0x66, 0xc7, 0xd7, 0x16, 0x08, 0x3c, 0xbe, 0x36, 0x0f, 0xd3, 0xcb, + 0xfe, 0xd4, 0xf7, 0x0d, 0xac, 0xb3, 0x7c, 0x58, 0x30, 0x89, 0x57, 0x9b, 0x4d, 0xcc, 0x7f, 0xd6, + 0x70, 0xdb, 0x8e, 0x17, 0x91, 0x6d, 0x18, 0xd5, 0x7e, 0x26, 0x4c, 0x05, 0x5a, 0x8d, 0xd0, 0x69, + 0xe2, 0x02, 0x23, 0x36, 0x63, 0x5c, 0x6c, 0x51, 0xa8, 0x24, 0xd9, 0xc3, 0x58, 0xa6, 0xb7, 0xb9, + 0x04, 0xe3, 0xda, 0x4f, 0x65, 0xb2, 0xc4, 0x8f, 0x5f, 0x6b, 0xc1, 0x64, 0x98, 0x89, 0x62, 0x35, + 0x60, 0x3e, 0x8b, 0x69, 0x18, 0xd9, 0xe8, 0x39, 0x59, 0x8d, 0x63, 0x24, 0x75, 0xf7, 0x93, 0x9b, + 0xcc, 0x8b, 0x8f, 0x64, 0xfd, 0xed, 0x7e, 0xb8, 0x2c, 0x26, 0xe3, 0x55, 0xce, 0x38, 0xf9, 0x31, + 0x8c, 0x6a, 0x73, 0x2c, 0x98, 0x7e, 0x4d, 0xc6, 0x64, 0xcc, 0x5b, 0x0b, 0xdc, 0xa4, 0xd1, 0xc1, + 0x82, 0x7a, 0x62, 0xba, 0xd7, 0x7a, 0x6c, 0x9d, 0x24, 0x69, 0xc1, 0x84, 0x39, 0xd1, 0xc2, 0xaa, + 0xf3, 0x5a, 0x66, 0x23, 0x26, 0xa8, 0x8c, 0xf0, 0xdb, 0xac, 0x67, 0x4e, 0xf7, 0x5a, 0x8f, 0x9d, + 0xa0, 0x4d, 0xbe, 0x86, 0x0b, 0xa9, 0x59, 0x16, 0xc6, 0xba, 0x37, 0x33, 0x1b, 0x4c, 0x41, 0x73, + 0x73, 0x6c, 0x80, 0xc5, 0xb9, 0xcd, 0xa6, 0x1b, 0x21, 0x4d, 0x18, 0xd3, 0x27, 0x5e, 0x98, 0x9d, + 0xae, 0x17, 0xb0, 0x92, 0x03, 0x72, 0xe5, 0x4e, 0xf0, 0x12, 0xe7, 0xfe, 0xb9, 0x69, 0x62, 0x36, + 0x80, 0x87, 0x61, 0x90, 0xff, 0x66, 0x22, 0x60, 0x27, 0xa0, 0x21, 0xf5, 0x1a, 0xd4, 0x70, 0xad, + 0x7e, 0x49, 0x11, 0xf0, 0x6f, 0x4a, 0x30, 0x97, 0x45, 0xb7, 0x46, 0xbd, 0x26, 0xd9, 0x81, 0x72, + 0xb2, 0x21, 0xb1, 0xaa, 0x2d, 0x15, 0x44, 0x35, 0xb7, 0x4b, 0x6b, 0x3d, 0x76, 0x0a, 0x9b, 0x6c, + 0xc1, 0x05, 0xad, 0x4c, 0x18, 0x57, 0x7b, 0xcf, 0x62, 0x5c, 0x65, 0xb3, 0x90, 0x42, 0xd5, 0x6d, + 0xd3, 0x6b, 0xb8, 0x33, 0xae, 0xf8, 0xc7, 0x8e, 0xeb, 0x31, 0x45, 0x57, 0x0b, 0x93, 0x04, 0x71, + 0xa9, 0xe0, 0x0d, 0xb7, 0xb6, 0x62, 0xa9, 0x7c, 0x0a, 0xa2, 0x40, 0xac, 0xef, 0xa2, 0x04, 0x17, + 0x36, 0x3a, 0xfe, 0xb0, 0x54, 0x11, 0xbb, 0x06, 0x03, 0xbb, 0x1b, 0xb5, 0xe5, 0xaa, 0x78, 0xa6, + 0xca, 0x83, 0x1b, 0xb4, 0xc2, 0x7a, 0xc3, 0xb1, 0x79, 0x85, 0xf5, 0x09, 0x90, 0xfb, 0x34, 0x12, + 0x51, 0xbc, 0x15, 0xde, 0x1b, 0x30, 0x24, 0x8a, 0x04, 0x26, 0x3a, 0xb5, 0xb5, 0x04, 0x94, 0xac, + 0xb3, 0x76, 0xe4, 0x39, 0xa1, 0x45, 0x9d, 0x50, 0xdb, 0x98, 0x3f, 0x84, 0xe1, 0x40, 0x94, 0x89, + 0x7d, 0x79, 0x42, 0xe5, 0x3b, 0xc0, 0x62, 0x6e, 0xcf, 0x96, 0x30, 0xb6, 0xfa, 0xcb, 0xda, 0xc0, + 0x40, 0x24, 0xdb, 0xeb, 0x2b, 0xcb, 0x8c, 0xab, 0x82, 0x59, 0x72, 0x3a, 0x6e, 0xa3, 0xf7, 0x77, + 0x44, 0xf5, 0x47, 0xaa, 0xc8, 0x1a, 0xfc, 0xc8, 0x45, 0xf8, 0x1d, 0x0d, 0xc4, 0xba, 0xab, 0xc2, + 0x9a, 0x64, 0x50, 0xcb, 0x8b, 0xdb, 0xbf, 0x85, 0x01, 0x5b, 0xee, 0xa3, 0xbb, 0xcc, 0xab, 0xe8, + 0x84, 0x03, 0xf3, 0x7c, 0x9b, 0x67, 0xa3, 0x12, 0x29, 0xa7, 0x7c, 0x25, 0x1a, 0x97, 0x61, 0x44, + 0x95, 0xa9, 0xbb, 0x2f, 0xce, 0x2b, 0x03, 0x7e, 0xff, 0x2e, 0x7f, 0xcf, 0xdb, 0x50, 0x04, 0x62, + 0x3c, 0xd6, 0x04, 0xff, 0xee, 0xbe, 0xe1, 0x26, 0x42, 0x1a, 0x44, 0xdf, 0x68, 0x13, 0x71, 0x44, + 0x9f, 0xf3, 0x34, 0x61, 0xc0, 0xef, 0x2f, 0x9e, 0x85, 0x51, 0xdf, 0x70, 0x13, 0x8c, 0x51, 0xdf, + 0x5c, 0x13, 0x54, 0x86, 0x3e, 0xe2, 0x8b, 0x34, 0xd5, 0xc8, 0x6a, 0xba, 0x11, 0x69, 0xb8, 0x4e, + 0x60, 0x14, 0xce, 0x07, 0x85, 0x05, 0xce, 0xac, 0x5f, 0x41, 0x33, 0x8c, 0x61, 0xdf, 0x6c, 0x33, + 0x7f, 0xaf, 0xc4, 0x03, 0x31, 0xd5, 0xb6, 0xb5, 0x64, 0x6f, 0xde, 0x63, 0x5f, 0xbb, 0x9a, 0xd7, + 0xbe, 0xf6, 0x87, 0xae, 0xd7, 0xd4, 0xaf, 0xe6, 0x9d, 0x4e, 0x74, 0xa4, 0x42, 0x05, 0x3f, 0x71, + 0xbd, 0xa6, 0x9d, 0x84, 0x26, 0x1f, 0xc1, 0xb8, 0x56, 0xa4, 0xb4, 0x35, 0x9e, 0x4c, 0x40, 0x47, + 0x77, 0x9b, 0xb6, 0x09, 0x69, 0xfd, 0x7e, 0x2f, 0x5c, 0xdc, 0x6b, 0x87, 0xf8, 0x2a, 0x66, 0xdd, + 0x7b, 0x4a, 0xbd, 0xc8, 0x0f, 0x9e, 0xa3, 0x27, 0x3f, 0x79, 0x1f, 0x06, 0xd6, 0x68, 0xab, 0xe5, + 0x8b, 0x91, 0x5f, 0x91, 0xf7, 0xe2, 0x49, 0x68, 0x04, 0x5a, 0xeb, 0xb1, 0x39, 0x34, 0xf9, 0x08, + 0x46, 0xd6, 0xa8, 0x13, 0x44, 0x07, 0xd4, 0x91, 0xca, 0xaa, 0x0c, 0x6e, 0xaf, 0xa1, 0x08, 0x80, + 0xb5, 0x1e, 0x3b, 0x86, 0x26, 0x8b, 0xec, 0x1c, 0xe7, 0x1d, 0xaa, 0x17, 0xc0, 0x39, 0x0d, 0x32, + 0x98, 0xb5, 0x1e, 0x1b, 0x61, 0xc9, 0x26, 0x8c, 0x57, 0x0f, 0xa9, 0x17, 0x6d, 0xd2, 0xc8, 0x69, + 0x3a, 0x91, 0x23, 0x94, 0x9a, 0x37, 0xf2, 0x90, 0x0d, 0xe0, 0xb5, 0x1e, 0xdb, 0xc4, 0x5e, 0x1a, + 0x80, 0xbe, 0xcd, 0xf0, 0xd0, 0x3a, 0x29, 0xc1, 0xdc, 0x8a, 0xff, 0xcc, 0xcb, 0x64, 0xcc, 0x77, + 0x4c, 0xc6, 0x54, 0xe4, 0xf5, 0x62, 0x1a, 0x3e, 0xc1, 0x9a, 0xf7, 0xa0, 0x7f, 0xc7, 0xf5, 0x0e, + 0x13, 0xfb, 0x78, 0x06, 0x1e, 0x83, 0xc2, 0x11, 0xba, 0xde, 0x21, 0xd9, 0x90, 0x0a, 0x94, 0x30, + 0x14, 0xf5, 0x19, 0x5a, 0x5b, 0x06, 0xb6, 0x0e, 0x1d, 0x2b, 0x4a, 0xfc, 0xb7, 0x1c, 0xe0, 0xdb, + 0x30, 0x9b, 0xd3, 0xae, 0x78, 0x95, 0xcb, 0xc6, 0xd6, 0x8f, 0xbb, 0xd2, 0x5b, 0x30, 0x93, 0x39, + 0x05, 0x29, 0xc0, 0x7f, 0x96, 0xb5, 0x96, 0xf8, 0xc8, 0xe7, 0x60, 0x48, 0xe6, 0x40, 0xe1, 0x07, + 0x77, 0xf9, 0x13, 0xdf, 0xa5, 0xe0, 0x71, 0x3b, 0x0e, 0x99, 0x2b, 0x7f, 0x93, 0x7d, 0x2d, 0x7e, + 0x4d, 0x1f, 0x5a, 0x9a, 0x3e, 0x7e, 0x89, 0x3c, 0xbc, 0x8a, 0x16, 0x6b, 0x73, 0xcd, 0x0f, 0x23, + 0x4f, 0xb9, 0x4d, 0xda, 0xea, 0x37, 0xb9, 0x09, 0x65, 0x19, 0xa4, 0x5d, 0x64, 0x83, 0x10, 0x09, + 0x56, 0xed, 0x54, 0x39, 0xf9, 0x10, 0x66, 0x93, 0x65, 0x72, 0x94, 0xfc, 0x61, 0x51, 0x5e, 0xb5, + 0xf5, 0x67, 0xbd, 0x18, 0xe4, 0xb7, 0x60, 0x69, 0x32, 0xee, 0x6e, 0xd7, 0x04, 0xb7, 0x7a, 0xb7, + 0x6b, 0x64, 0x01, 0x46, 0xb6, 0x6b, 0x46, 0x22, 0x19, 0x3b, 0x2e, 0x60, 0xdd, 0x66, 0x43, 0xa8, + 0x06, 0x8d, 0x23, 0x37, 0xa2, 0x8d, 0xa8, 0x13, 0x88, 0xe8, 0x43, 0x76, 0xaa, 0x9c, 0x58, 0x30, + 0x76, 0xbf, 0xe5, 0x1e, 0x34, 0x24, 0x31, 0xce, 0x02, 0xa3, 0x8c, 0xbc, 0x09, 0x13, 0xeb, 0x5e, + 0x18, 0x39, 0xad, 0xd6, 0x26, 0x8d, 0x8e, 0xfc, 0xa6, 0xc8, 0x72, 0x67, 0x27, 0x4a, 0x59, 0xbb, + 0xcb, 0xbe, 0x17, 0x39, 0xae, 0x47, 0x03, 0xbb, 0xe3, 0x45, 0xee, 0x31, 0x15, 0x63, 0x4f, 0x95, + 0x93, 0xf7, 0x60, 0x46, 0x95, 0x6d, 0x07, 0x8d, 0x23, 0x1a, 0x46, 0x01, 0xa6, 0x97, 0xc2, 0x38, + 0x2b, 0x76, 0x76, 0x25, 0xb6, 0xd0, 0xf2, 0x3b, 0xcd, 0x55, 0xef, 0xa9, 0x1b, 0xf8, 0x1e, 0x46, + 0x9c, 0x1f, 0x16, 0x2d, 0x24, 0xca, 0xad, 0x9d, 0xcc, 0xaf, 0xf6, 0x25, 0x96, 0xa0, 0x75, 0x5a, + 0x82, 0x85, 0xcc, 0x0f, 0x4b, 0x0a, 0x6f, 0x1d, 0xb9, 0x94, 0x58, 0xbf, 0x37, 0xa1, 0x1f, 0xa5, + 0x39, 0x37, 0x0c, 0x48, 0xc7, 0x22, 0xc4, 0xe7, 0xa4, 0x58, 0xad, 0x8d, 0x30, 0xe4, 0xbe, 0x32, + 0x04, 0xf7, 0xa1, 0xda, 0x7a, 0x3b, 0x29, 0x33, 0x33, 0x1a, 0xd7, 0x0d, 0xc2, 0xd2, 0xf4, 0xfb, + 0x32, 0x36, 0xb7, 0x3f, 0x2b, 0x41, 0xa5, 0x8b, 0x3c, 0x51, 0x63, 0x2a, 0x9d, 0x61, 0x4c, 0x0f, + 0xd4, 0x98, 0xf8, 0x13, 0xa6, 0xc5, 0xb3, 0xc9, 0xac, 0x57, 0x3d, 0xac, 0x65, 0x20, 0xe9, 0x9d, + 0x87, 0x7c, 0x1b, 0x46, 0x6a, 0xb5, 0x35, 0xc3, 0x7b, 0x23, 0x65, 0x09, 0x8c, 0x21, 0xac, 0x0f, + 0xe0, 0xa2, 0x22, 0xc2, 0xa3, 0x8c, 0x6b, 0xef, 0x24, 0xc5, 0x5e, 0xaf, 0xde, 0x63, 0xc6, 0x05, + 0xd6, 0x9f, 0xf6, 0xa7, 0x10, 0x6b, 0x9d, 0xe3, 0x63, 0x27, 0x78, 0x4e, 0xaa, 0x26, 0x62, 0x5f, + 0xd7, 0x4d, 0x76, 0xa9, 0xff, 0xe7, 0x27, 0x95, 0x1e, 0x8d, 0x3a, 0x79, 0x1d, 0xc6, 0xf1, 0x83, + 0xf4, 0x1a, 0x94, 0xdb, 0x01, 0x7b, 0x79, 0x2c, 0x08, 0xa3, 0x90, 0xec, 0xc3, 0xb8, 0x58, 0xeb, + 0xf8, 0x5b, 0x2e, 0xb1, 0x77, 0x93, 0x4b, 0xcc, 0xe8, 0xde, 0x2d, 0x03, 0x85, 0x4f, 0x86, 0x49, + 0x86, 0x7c, 0x09, 0x13, 0x52, 0xb0, 0x09, 0xc2, 0xfc, 0xe6, 0xf6, 0x4e, 0x31, 0x61, 0x13, 0x87, + 0x53, 0x4e, 0x10, 0x62, 0x5d, 0x16, 0xe2, 0x5a, 0x50, 0x1e, 0x38, 0x4b, 0x97, 0x0d, 0x14, 0xd1, + 0x65, 0xa3, 0x6c, 0xfe, 0xfb, 0x40, 0xd2, 0xe3, 0xea, 0xb6, 0x9a, 0xc6, 0xb5, 0xd5, 0x34, 0x5f, + 0x85, 0xa9, 0x8c, 0x01, 0x9c, 0x8b, 0xc4, 0xf7, 0x81, 0xa4, 0x7b, 0x7a, 0x1e, 0x0a, 0xd6, 0x0d, + 0x78, 0x53, 0xb1, 0x40, 0xad, 0x06, 0x83, 0xa6, 0x3c, 0xed, 0xff, 0x76, 0x2f, 0x54, 0xba, 0x80, + 0x92, 0x7f, 0x50, 0x4a, 0x72, 0x9b, 0xaf, 0xc6, 0x8f, 0x92, 0xdc, 0xce, 0xc6, 0xcf, 0x60, 0xfb, + 0xd2, 0xc7, 0x3f, 0xfb, 0x8b, 0x17, 0xde, 0xa8, 0xd3, 0x53, 0x76, 0x7e, 0x6e, 0xf5, 0xeb, 0xdc, + 0xb2, 0x61, 0xda, 0x50, 0x71, 0xce, 0x22, 0xbb, 0xaf, 0x02, 0x88, 0x84, 0x5b, 0x1b, 0xfe, 0xa1, + 0x78, 0x65, 0xaa, 0x95, 0x58, 0xf7, 0x60, 0x26, 0x41, 0x53, 0x58, 0x20, 0xbe, 0x0d, 0xea, 0x3d, + 0x1c, 0x12, 0xed, 0x5b, 0xba, 0xf0, 0xcb, 0x93, 0xca, 0x38, 0xdb, 0x01, 0x6f, 0xc5, 0xe1, 0x76, + 0xe5, 0x5f, 0xd6, 0xa6, 0x6e, 0x43, 0xa9, 0xb6, 0xf4, 0x38, 0x01, 0xe4, 0x0e, 0x0c, 0xf2, 0x92, + 0x44, 0x50, 0x4b, 0x1d, 0x5a, 0xc8, 0x04, 0x01, 0x68, 0xcd, 0xe0, 0x1b, 0x20, 0xfc, 0x51, 0x8d, + 0x5f, 0x9b, 0x5a, 0x7b, 0x3c, 0xcc, 0x7a, 0x5c, 0xac, 0x02, 0x67, 0xf6, 0x57, 0xe3, 0x57, 0xb1, + 0xf2, 0xc2, 0x4b, 0xc2, 0x79, 0xfe, 0xb3, 0x16, 0x6d, 0xf2, 0xfc, 0x2c, 0x4b, 0x63, 0xe2, 0xc2, + 0xab, 0xdf, 0x61, 0x04, 0x10, 0xcd, 0xfa, 0x0c, 0x66, 0x96, 0x5b, 0xd4, 0x09, 0x92, 0xed, 0x91, + 0x37, 0x61, 0x08, 0xcb, 0x4c, 0x2f, 0x42, 0x87, 0x15, 0xa1, 0x17, 0xa1, 0xa8, 0xb4, 0x36, 0xe0, + 0x12, 0x3f, 0x81, 0xe9, 0x43, 0x8a, 0xed, 0x1d, 0x03, 0xf8, 0x3b, 0xf1, 0x82, 0x24, 0x63, 0xf4, + 0x1c, 0xce, 0xfa, 0x14, 0x5d, 0x94, 0xb3, 0x72, 0x6b, 0x9f, 0xed, 0x4d, 0xd3, 0x5f, 0x85, 0x85, + 0x6a, 0xbb, 0x4d, 0xbd, 0x66, 0x8c, 0xb8, 0x1b, 0x38, 0x67, 0x7c, 0x2b, 0x4a, 0xaa, 0x30, 0x80, + 0xd0, 0xca, 0x58, 0x2c, 0xba, 0x9b, 0xd1, 0x1d, 0x84, 0x13, 0x51, 0xce, 0xb0, 0x01, 0x8e, 0x69, + 0x35, 0x61, 0xb6, 0xd6, 0x39, 0x38, 0x76, 0x79, 0xc2, 0x69, 0x7c, 0x6f, 0x2d, 0xdb, 0x5e, 0x97, + 0x99, 0x31, 0x38, 0x33, 0x6e, 0xc4, 0xae, 0xac, 0xe8, 0xbe, 0x28, 0xde, 0x60, 0x3f, 0xbd, 0x73, + 0x2b, 0x46, 0xc5, 0xd3, 0x0a, 0x6f, 0x05, 0xab, 0x45, 0xf6, 0x0c, 0x6b, 0x0a, 0x2e, 0xe8, 0x86, + 0x37, 0xbe, 0x42, 0x66, 0x60, 0xca, 0x34, 0xa8, 0xf1, 0xe2, 0xaf, 0x60, 0x9a, 0x1f, 0xf8, 0x79, + 0x94, 0xd2, 0xc5, 0x38, 0x20, 0x67, 0xef, 0xfe, 0x62, 0xc2, 0xe9, 0x11, 0x7d, 0xa1, 0x54, 0xfc, + 0xe9, 0xfd, 0x45, 0xfe, 0xcc, 0xe4, 0xe9, 0xa2, 0x61, 0xb6, 0xed, 0xdd, 0x5f, 0x5c, 0x1a, 0x12, + 0xd1, 0xde, 0x18, 0x75, 0x3e, 0xfd, 0xdf, 0x08, 0xf5, 0x45, 0x7c, 0xd9, 0xb8, 0x46, 0x1d, 0xf4, + 0x42, 0xce, 0x7e, 0x1f, 0x36, 0x01, 0xbd, 0x6e, 0x53, 0x6a, 0xd9, 0x6e, 0xd3, 0xfa, 0xe3, 0x12, + 0xdc, 0xe0, 0xba, 0x48, 0x36, 0x1e, 0x5a, 0xd7, 0x72, 0x90, 0xc9, 0x87, 0xc0, 0x73, 0xa8, 0x0a, + 0x85, 0xcf, 0x12, 0x3d, 0x2f, 0xa2, 0xc4, 0x11, 0x48, 0x15, 0xc6, 0x74, 0x3f, 0xde, 0xb3, 0x45, + 0xd3, 0xb1, 0x47, 0x8f, 0x1f, 0x3b, 0xca, 0xb7, 0xf7, 0x09, 0x5c, 0x5e, 0xfd, 0x9a, 0x2d, 0x08, + 0xb1, 0x3b, 0x89, 0x5b, 0xe7, 0xf8, 0xfd, 0xd1, 0xe4, 0xae, 0x58, 0x31, 0xa6, 0x1a, 0x9c, 0x2c, + 0x66, 0xc7, 0x03, 0xb9, 0xc1, 0x29, 0xed, 0x75, 0xc4, 0x36, 0xca, 0xac, 0x3f, 0x2d, 0xc1, 0x42, + 0x76, 0x6b, 0x42, 0xb0, 0xac, 0xc3, 0x85, 0x65, 0xc7, 0xf3, 0x3d, 0xb7, 0xe1, 0xb4, 0x6a, 0x8d, + 0x23, 0xda, 0xec, 0xa8, 0x98, 0x70, 0x4a, 0xca, 0xb0, 0xe3, 0x8e, 0x40, 0x97, 0x20, 0x76, 0x1a, + 0x8b, 0x7c, 0x00, 0x17, 0xd1, 0x15, 0x94, 0xcb, 0xde, 0x16, 0x0d, 0x14, 0x3d, 0xde, 0xb3, 0x9c, + 0x5a, 0xf2, 0x2e, 0x4c, 0xf1, 0x4d, 0xa5, 0xb9, 0xe7, 0xb9, 0x91, 0x42, 0xe2, 0xa7, 0xa2, 0xac, + 0x2a, 0xeb, 0x3f, 0x94, 0xe0, 0x12, 0x26, 0x62, 0x30, 0x52, 0x3b, 0xc5, 0xa1, 0x11, 0x65, 0x74, + 0xbf, 0x92, 0xe1, 0xda, 0x6a, 0x40, 0x9b, 0x61, 0xfe, 0xc8, 0x3b, 0xd0, 0x5f, 0x93, 0x37, 0xd3, + 0x13, 0x89, 0xa4, 0x70, 0x32, 0x01, 0xaf, 0x1f, 0x44, 0x36, 0x42, 0xb1, 0x3d, 0x67, 0x85, 0x86, + 0x0d, 0xea, 0x61, 0xf6, 0xbe, 0x3e, 0xbe, 0xe7, 0xc4, 0x25, 0x71, 0x64, 0x87, 0xfe, 0xbc, 0xc8, + 0x0e, 0x03, 0x66, 0x64, 0x07, 0xeb, 0x29, 0x4f, 0xc3, 0x90, 0x1c, 0x90, 0x98, 0xa4, 0x4f, 0x53, + 0xc9, 0xfe, 0xf8, 0x3e, 0x70, 0x31, 0x6b, 0x64, 0xfb, 0x77, 0x53, 0x79, 0xfc, 0xf2, 0x43, 0x11, + 0xee, 0xc0, 0xeb, 0x06, 0x6c, 0xb5, 0xd5, 0xf2, 0x9f, 0xd1, 0xe6, 0x4e, 0xe0, 0x1f, 0xfb, 0x91, + 0x11, 0x04, 0x5f, 0x64, 0xbb, 0x8c, 0x6d, 0x57, 0x62, 0x55, 0x26, 0x8a, 0xad, 0xbf, 0x02, 0x6f, + 0x74, 0xa1, 0x28, 0x06, 0x55, 0x83, 0x0b, 0x4e, 0xa2, 0x4e, 0x5e, 0x31, 0xbe, 0x91, 0x35, 0xae, + 0x24, 0xa1, 0xd0, 0x4e, 0xe3, 0xdf, 0xdc, 0x35, 0x12, 0xe4, 0x91, 0x39, 0x98, 0xde, 0xb1, 0xb7, + 0x57, 0xf6, 0x96, 0x77, 0xeb, 0xbb, 0x5f, 0xee, 0xac, 0xd6, 0xf7, 0xb6, 0x1e, 0x6e, 0x6d, 0x3f, + 0xda, 0xe2, 0xb1, 0x3c, 0x8d, 0x9a, 0xdd, 0xd5, 0xea, 0x66, 0xb9, 0x44, 0xa6, 0xa1, 0x6c, 0x14, + 0xaf, 0xee, 0x2d, 0x95, 0x7b, 0x6f, 0x7e, 0x65, 0x24, 0x7e, 0x23, 0x0b, 0x30, 0x57, 0xdb, 0xdb, + 0xd9, 0xd9, 0xb6, 0x15, 0x55, 0x3d, 0x92, 0xe8, 0x0c, 0x5c, 0x30, 0x6a, 0xef, 0xd9, 0xab, 0xab, + 0xe5, 0x12, 0xeb, 0x8a, 0x51, 0xbc, 0x63, 0xaf, 0x6e, 0xae, 0xef, 0x6d, 0x96, 0x7b, 0x6f, 0xd6, + 0x75, 0x7f, 0x7a, 0x72, 0x19, 0x66, 0x57, 0x56, 0xf7, 0xd7, 0x97, 0x57, 0xb3, 0x68, 0x4f, 0x43, + 0x59, 0xaf, 0xdc, 0xdd, 0xde, 0xdd, 0xe1, 0xa4, 0xf5, 0xd2, 0x47, 0xab, 0x4b, 0xd5, 0xbd, 0xdd, + 0xb5, 0xad, 0x72, 0x9f, 0xd5, 0x3f, 0xdc, 0x5b, 0xee, 0xbd, 0xf9, 0x63, 0xc3, 0xd9, 0x9e, 0x75, + 0x5f, 0x80, 0xef, 0xd5, 0xaa, 0xf7, 0xf3, 0x9b, 0xe0, 0xb5, 0x9b, 0xf7, 0xaa, 0xe5, 0x12, 0xb9, + 0x02, 0x97, 0x8c, 0xd2, 0x9d, 0x6a, 0xad, 0xf6, 0x68, 0xdb, 0x5e, 0xd9, 0x58, 0xad, 0xd5, 0xca, + 0xbd, 0x37, 0xf7, 0x8d, 0x68, 0x36, 0xac, 0x85, 0xcd, 0x7b, 0xd5, 0xba, 0xbd, 0xfa, 0xf9, 0xde, + 0xba, 0xbd, 0xba, 0x92, 0x6e, 0xc1, 0xa8, 0xfd, 0x72, 0xb5, 0x56, 0x2e, 0x91, 0x29, 0x98, 0x34, + 0x4a, 0xb7, 0xb6, 0xcb, 0xbd, 0x37, 0xdf, 0x14, 0x01, 0x4f, 0xc8, 0x04, 0xc0, 0xca, 0x6a, 0x6d, + 0x79, 0x75, 0x6b, 0x65, 0x7d, 0xeb, 0x7e, 0xb9, 0x87, 0x8c, 0xc3, 0x48, 0x55, 0xfd, 0x2c, 0xdd, + 0xfc, 0x18, 0x26, 0x13, 0x27, 0x5b, 0x06, 0xa1, 0x0e, 0x85, 0xe5, 0x1e, 0x64, 0xbf, 0xfc, 0x89, + 0xe6, 0x08, 0x7e, 0x48, 0x2d, 0x97, 0x6e, 0x2e, 0xc9, 0x5c, 0x6d, 0xda, 0x77, 0x4e, 0x46, 0x61, + 0x68, 0x65, 0xf5, 0x5e, 0x75, 0x6f, 0x63, 0xb7, 0xdc, 0xc3, 0x7e, 0x2c, 0xdb, 0xab, 0xd5, 0xdd, + 0xd5, 0x95, 0x72, 0x89, 0x8c, 0xc0, 0x40, 0x6d, 0xb7, 0xba, 0xbb, 0x5a, 0xee, 0x25, 0xc3, 0xd0, + 0xbf, 0x57, 0x5b, 0xb5, 0xcb, 0x7d, 0x8b, 0xbf, 0xfd, 0xf7, 0x4b, 0x30, 0xca, 0x44, 0xbf, 0x74, + 0xdc, 0xfe, 0x4a, 0x3b, 0x4c, 0x0a, 0x91, 0x27, 0x12, 0x53, 0xe5, 0x9e, 0x1c, 0x51, 0x0b, 0x98, + 0x2f, 0x30, 0x52, 0x22, 0xc0, 0x8d, 0xd2, 0xbb, 0x25, 0x62, 0xe3, 0x8d, 0x5c, 0xe2, 0x6c, 0xa5, + 0x28, 0x67, 0x1f, 0x7f, 0xe7, 0xaf, 0x14, 0x1e, 0xc9, 0xc8, 0x6f, 0x80, 0xa5, 0xd3, 0xcc, 0x39, + 0x81, 0x7c, 0xfb, 0x6c, 0x27, 0x0d, 0xd9, 0xe6, 0x9b, 0x67, 0x03, 0x27, 0x0f, 0x60, 0x9c, 0xe9, + 0xe6, 0x0a, 0x8c, 0x5c, 0x4e, 0x22, 0x6a, 0xc7, 0x81, 0xf9, 0x85, 0xec, 0x4a, 0x15, 0xb9, 0x7e, + 0x0c, 0x07, 0xc2, 0x0f, 0xd6, 0x21, 0x91, 0x4f, 0x6b, 0x65, 0x09, 0x97, 0xf8, 0xf3, 0x17, 0x12, + 0xc5, 0xfb, 0x77, 0xde, 0x2d, 0x91, 0x1a, 0x46, 0xa4, 0x31, 0x94, 0x7c, 0x22, 0x5f, 0x12, 0xa4, + 0xb5, 0x7f, 0xde, 0x9b, 0x8a, 0xca, 0xf4, 0x94, 0x73, 0x3a, 0xd8, 0x02, 0x92, 0xd6, 0x9d, 0xc9, + 0xb5, 0x78, 0x1d, 0x64, 0xab, 0xd5, 0xf3, 0x17, 0x53, 0x8e, 0x16, 0xab, 0x4c, 0x7b, 0x22, 0xab, + 0x30, 0x21, 0xde, 0xcd, 0x09, 0x6d, 0x9e, 0x14, 0x9d, 0x07, 0x72, 0xc9, 0xdc, 0x47, 0x3e, 0xa9, + 0x13, 0x01, 0x99, 0x8f, 0xc7, 0x91, 0x3c, 0x26, 0xcc, 0x5f, 0xce, 0xac, 0x13, 0xe3, 0xbb, 0x07, + 0x13, 0xe6, 0xe1, 0x82, 0xc8, 0x09, 0xca, 0x3c, 0x73, 0xe4, 0x76, 0xa8, 0x0e, 0xb3, 0x9b, 0x8e, + 0x8b, 0xa6, 0x45, 0x71, 0x9d, 0x2f, 0x2f, 0xe3, 0x49, 0xa5, 0xe0, 0x76, 0xbe, 0x46, 0xbd, 0xa6, + 0x9a, 0x84, 0xbc, 0x28, 0xb4, 0xf8, 0xd9, 0xd4, 0xa4, 0x8e, 0x6c, 0x3a, 0x33, 0x10, 0xcb, 0xcc, + 0xde, 0x97, 0xe5, 0x9f, 0x32, 0x9f, 0xe7, 0x52, 0x45, 0x36, 0x51, 0x49, 0x4f, 0x50, 0xd4, 0xd6, + 0xc4, 0xb9, 0xc9, 0xcd, 0xe1, 0xeb, 0x4d, 0x2d, 0xa5, 0xa7, 0xa8, 0x0c, 0x49, 0x0e, 0xe3, 0x72, + 0x89, 0xbd, 0x5b, 0x22, 0x5f, 0xe1, 0x57, 0x9d, 0x49, 0xee, 0x91, 0x1b, 0x1d, 0x09, 0xed, 0xe7, + 0x72, 0x26, 0x01, 0xf1, 0xa1, 0x14, 0x50, 0xb7, 0x61, 0x3a, 0xcb, 0x8b, 0x4b, 0x31, 0xb4, 0xc0, + 0xc5, 0x2b, 0x77, 0x15, 0xd8, 0xec, 0xa8, 0xd1, 0xcc, 0x9f, 0xa4, 0x02, 0x27, 0xa2, 0x5c, 0x9a, + 0xdf, 0x85, 0x09, 0xb6, 0x4a, 0x1e, 0x52, 0xda, 0xae, 0xb6, 0xdc, 0xa7, 0x34, 0x24, 0x32, 0x9c, + 0xa0, 0x2a, 0xca, 0xc3, 0xbd, 0x51, 0x22, 0xdf, 0x82, 0xd1, 0x47, 0x4e, 0xd4, 0x38, 0x12, 0x61, + 0xb5, 0x64, 0xd4, 0x2d, 0x2c, 0x9b, 0x97, 0xbf, 0xb0, 0xf2, 0xdd, 0x12, 0xf9, 0x1e, 0x0c, 0xdd, + 0xa7, 0x11, 0xbe, 0xe4, 0xba, 0xae, 0x1c, 0x1a, 0xb8, 0xf3, 0xe0, 0xba, 0xa7, 0xdc, 0x95, 0x65, + 0x87, 0x93, 0x86, 0x4c, 0x72, 0x1b, 0x80, 0x0b, 0x04, 0xa4, 0x90, 0xac, 0x9e, 0x4f, 0x75, 0x9b, + 0xdc, 0x67, 0xca, 0x43, 0x8b, 0x46, 0xf4, 0xac, 0x4d, 0xe6, 0xf1, 0x68, 0x03, 0x26, 0x54, 0xb0, + 0xff, 0x2d, 0x7c, 0x43, 0x6d, 0x25, 0x88, 0x85, 0xe7, 0xa0, 0xf6, 0x31, 0xfb, 0x2a, 0x78, 0xae, + 0x39, 0x7c, 0x6c, 0x8b, 0x92, 0x74, 0x56, 0x7f, 0xb1, 0xab, 0x8b, 0x50, 0xc9, 0x44, 0x0e, 0xa6, + 0xe1, 0xae, 0xf9, 0x61, 0x64, 0xe2, 0xaa, 0x92, 0x6c, 0xdc, 0x5f, 0x87, 0x79, 0xbd, 0x5d, 0x33, + 0xae, 0x63, 0x2c, 0x73, 0xf3, 0xc2, 0x45, 0xce, 0x5f, 0x2f, 0x80, 0x10, 0xe7, 0xb7, 0xbe, 0xdf, + 0xed, 0x2d, 0xa1, 0x38, 0x59, 0x81, 0x29, 0xd9, 0xd6, 0x76, 0x9b, 0x7a, 0xb5, 0xda, 0x1a, 0x06, + 0x76, 0x97, 0x97, 0xa8, 0x5a, 0x99, 0xa4, 0x4e, 0xd2, 0x55, 0x6c, 0xeb, 0x33, 0x1e, 0xd5, 0x92, + 0xa2, 0xa7, 0xb6, 0xf1, 0xd6, 0x97, 0x19, 0x70, 0xf0, 0x21, 0x37, 0x2a, 0x19, 0xca, 0xff, 0xfe, + 0x22, 0x29, 0x38, 0x00, 0xcd, 0xe7, 0x1c, 0x21, 0xde, 0x2d, 0x91, 0x2f, 0x81, 0xa4, 0x8f, 0x24, + 0x8a, 0x85, 0xb9, 0xc7, 0x2f, 0xc5, 0xc2, 0x82, 0xf3, 0xcc, 0x2a, 0x4c, 0xa9, 0x27, 0xf5, 0x71, + 0x3d, 0xc9, 0xe9, 0x4b, 0xc1, 0x0e, 0x36, 0x93, 0x41, 0x66, 0x7f, 0xb1, 0x80, 0x50, 0x66, 0x39, + 0xf9, 0x0c, 0xa6, 0xc4, 0xda, 0x37, 0xfa, 0x53, 0x56, 0x62, 0x4c, 0x1c, 0x6e, 0x72, 0x7b, 0xf2, + 0x00, 0x66, 0x6a, 0x09, 0xc6, 0x73, 0xe7, 0xc1, 0x4b, 0x26, 0x09, 0x2c, 0xac, 0xd1, 0x88, 0x73, + 0x3e, 0x9b, 0xd6, 0x43, 0x20, 0xdc, 0xb6, 0x24, 0xc9, 0x3d, 0x75, 0xe9, 0x33, 0x72, 0x25, 0xd1, + 0x75, 0x56, 0x88, 0x60, 0x28, 0x07, 0x73, 0x47, 0xb6, 0xcb, 0x13, 0x2e, 0x62, 0xe9, 0xb2, 0xd3, + 0x76, 0x0e, 0xdc, 0x96, 0x1b, 0xb9, 0x94, 0xcd, 0xa3, 0x8e, 0xa0, 0x57, 0xc9, 0x79, 0xbc, 0x94, + 0x0b, 0x41, 0x7e, 0x0b, 0x83, 0xd9, 0x15, 0x9f, 0xce, 0xc8, 0xb7, 0xb2, 0x0e, 0xd1, 0x39, 0xe7, + 0xcb, 0xf9, 0x77, 0xce, 0x06, 0xac, 0xce, 0xc3, 0xe3, 0xf7, 0x69, 0xb4, 0xd3, 0xea, 0x1c, 0xba, + 0x98, 0x08, 0x8c, 0x28, 0xdb, 0x93, 0x2a, 0x12, 0xcb, 0x5b, 0xa5, 0x33, 0x57, 0x15, 0x35, 0xfa, + 0x13, 0xb2, 0x0e, 0x65, 0xbe, 0x8d, 0x68, 0x24, 0xae, 0xa4, 0x48, 0x08, 0x10, 0x27, 0x70, 0x8e, + 0xc3, 0xdc, 0xd9, 0xba, 0xcd, 0x5d, 0x05, 0x88, 0x4a, 0xc2, 0xae, 0xe9, 0xa9, 0x53, 0x46, 0x99, + 0x0a, 0xf0, 0xcb, 0x66, 0xc4, 0xa6, 0x21, 0x8d, 0xe4, 0xdb, 0x7b, 0x9e, 0x06, 0xee, 0xb5, 0x58, + 0x67, 0x48, 0xd7, 0xc6, 0x12, 0x24, 0x11, 0x27, 0x66, 0xff, 0x2e, 0x51, 0xa9, 0xf1, 0x32, 0x88, + 0xbe, 0x69, 0xa8, 0x36, 0xe7, 0xa3, 0xfb, 0x1e, 0x6e, 0x65, 0x18, 0x6f, 0x60, 0x26, 0xee, 0x9b, + 0x96, 0x93, 0x79, 0x7e, 0x5c, 0xc3, 0xda, 0x5f, 0x44, 0xc9, 0xc8, 0xf6, 0x5a, 0xa6, 0x09, 0x77, + 0x82, 0x80, 0x7a, 0x1c, 0x39, 0x4f, 0x6d, 0xc9, 0xc2, 0xfe, 0x14, 0x25, 0x98, 0x86, 0xcd, 0xdf, + 0x38, 0x74, 0x23, 0xc1, 0xd3, 0x16, 0xbc, 0x5b, 0x22, 0x1f, 0xc2, 0xb0, 0xe8, 0x23, 0x43, 0x32, + 0x3a, 0x1d, 0x16, 0xf4, 0x1a, 0x31, 0x81, 0x33, 0x09, 0xfb, 0x6c, 0xc2, 0xe4, 0xcd, 0x3e, 0xef, + 0xf3, 0x87, 0x6c, 0xcf, 0x6e, 0xbe, 0x08, 0xe6, 0xb2, 0xdc, 0xbc, 0x11, 0x73, 0x4e, 0x3d, 0x7f, + 0x4f, 0xe4, 0xbe, 0x2e, 0x26, 0xc2, 0xd4, 0x6f, 0x0c, 0xf4, 0xa4, 0xe2, 0xb5, 0x28, 0xf5, 0xdb, + 0x28, 0xee, 0xb6, 0x65, 0xaf, 0x43, 0xb9, 0xda, 0xc0, 0x0d, 0x45, 0x65, 0xc1, 0x56, 0x67, 0x9f, + 0x64, 0x85, 0xa4, 0x35, 0x93, 0x4c, 0xaa, 0xbd, 0x41, 0x1d, 0x8c, 0x63, 0x39, 0xab, 0x34, 0x94, + 0x44, 0x55, 0x36, 0x46, 0xc1, 0x59, 0x67, 0x7a, 0x99, 0x9d, 0xce, 0x5a, 0x2f, 0x47, 0xe6, 0x63, + 0x14, 0x18, 0x5a, 0x86, 0xf0, 0x8b, 0x49, 0x7c, 0x75, 0x2a, 0x94, 0xee, 0xce, 0x0a, 0xb4, 0x0a, + 0x93, 0x22, 0x6a, 0x9e, 0x62, 0x4b, 0x1e, 0x76, 0x5e, 0xf3, 0xdf, 0x81, 0x89, 0x55, 0x26, 0xd0, + 0x3b, 0x4d, 0x97, 0xc7, 0xee, 0x25, 0x66, 0x30, 0xd6, 0x5c, 0xc4, 0x35, 0x99, 0x29, 0x44, 0x4b, + 0x9d, 0xad, 0xf6, 0x94, 0x74, 0x76, 0xf2, 0xf9, 0x69, 0x49, 0x56, 0xcf, 0xb2, 0x2d, 0x4c, 0x06, + 0xb3, 0x39, 0xc9, 0xaa, 0xc9, 0x1b, 0xc6, 0x49, 0x34, 0x2f, 0xe3, 0x74, 0x86, 0xee, 0xf9, 0x85, + 0x96, 0xb9, 0x2f, 0x87, 0x66, 0x71, 0x16, 0xeb, 0xdc, 0x71, 0xab, 0x68, 0x9b, 0x99, 0xd9, 0xa6, + 0xc9, 0xdb, 0x26, 0xf5, 0x82, 0x8c, 0xd4, 0xb9, 0x2d, 0xe0, 0x49, 0xdf, 0x4c, 0x86, 0x4c, 0xae, + 0x16, 0xe7, 0x6c, 0xd6, 0x4e, 0xfa, 0x39, 0x59, 0x94, 0x1f, 0xe0, 0x32, 0x8b, 0xd3, 0xfb, 0x11, + 0xfd, 0xdc, 0x9c, 0xcc, 0x6e, 0xa8, 0x74, 0xb9, 0xec, 0x8c, 0xc8, 0x3b, 0x30, 0x99, 0xc8, 0x35, + 0xac, 0x0c, 0x3c, 0xd9, 0xd9, 0x8e, 0xe7, 0xaf, 0xe6, 0x55, 0x2b, 0x83, 0x6b, 0x39, 0x99, 0x42, + 0x55, 0x0d, 0x39, 0x27, 0x39, 0xae, 0x1a, 0x72, 0x6e, 0xee, 0xd5, 0x07, 0x50, 0x4e, 0x66, 0x6f, + 0x54, 0x44, 0x73, 0xd2, 0x3a, 0xe6, 0xce, 0xc9, 0x3d, 0x98, 0xd6, 0x67, 0x54, 0x8d, 0x3b, 0x4f, + 0xfa, 0xe7, 0xd1, 0xd9, 0x85, 0x99, 0xcc, 0x64, 0x8b, 0x6a, 0x8b, 0x2d, 0x4a, 0xc5, 0x98, 0x4b, + 0x95, 0xc2, 0xc5, 0xec, 0x7c, 0xab, 0xe4, 0x75, 0xd3, 0x7e, 0x90, 0x9d, 0x7d, 0x72, 0xfe, 0x8d, + 0x2e, 0x50, 0x82, 0xa1, 0x5f, 0xe1, 0x0e, 0x98, 0x6a, 0xe3, 0xba, 0x66, 0x51, 0xc8, 0x69, 0xc0, + 0x2a, 0x02, 0x51, 0x6b, 0x60, 0x3a, 0x2b, 0x9b, 0x74, 0x2e, 0x8b, 0x5f, 0xcb, 0xa7, 0x19, 0x2f, + 0xac, 0x7d, 0x19, 0x9a, 0x32, 0x97, 0x33, 0x85, 0x79, 0x39, 0x0b, 0x8e, 0xa4, 0xf3, 0x6a, 0x3d, + 0x9c, 0xbd, 0xcb, 0xf9, 0xe6, 0xa5, 0xe9, 0xac, 0x6c, 0xb0, 0x49, 0xeb, 0x4f, 0x56, 0xb2, 0x4f, + 0xc5, 0x86, 0xc2, 0x74, 0xb2, 0xfb, 0xdc, 0x12, 0x64, 0x52, 0xd7, 0x2d, 0x41, 0x99, 0xa4, 0xaf, + 0xe5, 0x03, 0xc4, 0x2b, 0x22, 0x23, 0x69, 0x36, 0xd1, 0xcf, 0x59, 0xd9, 0x79, 0x40, 0xd5, 0x8a, + 0x28, 0xca, 0xb9, 0x6d, 0xcb, 0x8f, 0x2e, 0x87, 0x2d, 0x05, 0x39, 0x50, 0x0b, 0x8e, 0x43, 0x73, + 0xf1, 0xc4, 0x25, 0xba, 0x7d, 0xde, 0x69, 0xfb, 0x0a, 0x2e, 0xe5, 0xe6, 0x3b, 0x25, 0x6f, 0xa5, + 0x3e, 0xe8, 0x1c, 0x4e, 0xe4, 0xf7, 0x74, 0xdc, 0x48, 0x55, 0xaa, 0x4c, 0x61, 0x89, 0xac, 0xa8, + 0x29, 0x89, 0x9d, 0x91, 0x32, 0xf5, 0x3e, 0x6a, 0xbe, 0x5a, 0xda, 0xd3, 0xdc, 0xb1, 0x5e, 0xc9, + 0xa2, 0x13, 0xa6, 0x65, 0xaa, 0xd6, 0x2f, 0xa9, 0x89, 0x25, 0x2b, 0xce, 0x23, 0x53, 0xcf, 0xd2, + 0xb5, 0x3c, 0x3a, 0x2b, 0x30, 0xaa, 0xe5, 0x4b, 0x25, 0x97, 0x0c, 0x36, 0x19, 0xbb, 0xe4, 0xbc, + 0x31, 0x38, 0x73, 0x83, 0x5c, 0x46, 0x9b, 0xb3, 0xca, 0xba, 0x9a, 0xdb, 0x8b, 0xcb, 0x69, 0x1a, + 0x86, 0xbd, 0x59, 0x71, 0x81, 0xf7, 0x66, 0x21, 0xc9, 0x1c, 0xa3, 0x43, 0xf9, 0x43, 0x22, 0x3a, + 0x6b, 0xba, 0x74, 0x29, 0x5f, 0x43, 0x9d, 0x12, 0x49, 0xd9, 0x30, 0x76, 0xbc, 0x0c, 0x84, 0x74, + 0x51, 0x19, 0xcf, 0xb4, 0xd2, 0x02, 0x5b, 0xc6, 0x0e, 0xba, 0x64, 0x67, 0x24, 0x90, 0x55, 0x32, + 0xb4, 0x30, 0xbf, 0x6c, 0x86, 0x76, 0xa6, 0xa4, 0x72, 0x2e, 0xc5, 0xc2, 0x8c, 0xb2, 0xb9, 0x3d, + 0xfd, 0x91, 0x26, 0x95, 0x53, 0x69, 0x62, 0xc9, 0x8d, 0xa4, 0x6a, 0x96, 0x97, 0x49, 0xb6, 0x40, + 0xea, 0x4f, 0x67, 0x65, 0x98, 0xd5, 0x0c, 0xc0, 0xb9, 0xe9, 0x67, 0x33, 0xb8, 0xa0, 0xc4, 0x5b, + 0x0e, 0xb5, 0x82, 0x7c, 0xb3, 0xb9, 0x3d, 0xfc, 0x81, 0x26, 0xde, 0x12, 0x79, 0x61, 0xd5, 0x81, + 0xbb, 0x4b, 0xe2, 0xd8, 0x5c, 0xda, 0x5b, 0xe8, 0xc4, 0x9f, 0x4e, 0xea, 0xaa, 0x74, 0x97, 0xa2, + 0x94, 0xaf, 0x99, 0xf6, 0xe1, 0x99, 0xf4, 0x10, 0x19, 0xbd, 0x8b, 0x09, 0xeb, 0x6e, 0xb7, 0x8e, + 0x29, 0x39, 0x9c, 0x91, 0x0c, 0x36, 0x21, 0x87, 0xf3, 0xd3, 0xc5, 0x16, 0x1c, 0x74, 0x26, 0x6b, + 0xee, 0xa1, 0xa7, 0xe5, 0x72, 0x55, 0xc7, 0x9c, 0x74, 0x7a, 0x59, 0x25, 0x62, 0xb2, 0x52, 0xbf, + 0x6e, 0x33, 0x0d, 0x87, 0xeb, 0xe7, 0x7a, 0x56, 0x4e, 0x32, 0x9f, 0x9f, 0x8c, 0x54, 0x89, 0x9b, + 0xcc, 0x34, 0x9e, 0x1a, 0x41, 0x3d, 0x25, 0xa6, 0x22, 0x98, 0x91, 0x9d, 0x53, 0x11, 0xcc, 0xcc, + 0xa1, 0x79, 0x1b, 0xed, 0x2a, 0xb6, 0xdf, 0xa2, 0xba, 0x5d, 0x45, 0xcb, 0xb1, 0x98, 0x30, 0x6b, + 0x90, 0x4f, 0xd0, 0xa8, 0x51, 0x6c, 0x09, 0x99, 0x35, 0x29, 0xe9, 0xbe, 0x23, 0x23, 0x2a, 0x81, + 0xa5, 0xb2, 0xa2, 0x27, 0x73, 0x68, 0xce, 0xcf, 0xa5, 0x2b, 0x54, 0x42, 0x6c, 0x88, 0x93, 0x55, + 0x2a, 0x1b, 0x45, 0x2a, 0x7f, 0x65, 0xb2, 0xcf, 0xef, 0x4b, 0xa3, 0x88, 0x81, 0x96, 0x4a, 0x5f, + 0x99, 0x44, 0xfb, 0x0e, 0x8c, 0xc5, 0xa9, 0x2a, 0xf7, 0x17, 0x35, 0xc4, 0x44, 0xfe, 0xca, 0x24, + 0xe2, 0x87, 0xf2, 0xe2, 0x04, 0xdb, 0x33, 0x2b, 0x8b, 0xed, 0x27, 0x9f, 0x4a, 0x23, 0x8c, 0xd1, + 0xd3, 0x54, 0xe2, 0xcb, 0x02, 0xc9, 0x3d, 0xa6, 0xe7, 0xd7, 0x52, 0xeb, 0x22, 0x23, 0x43, 0x9e, + 0x5a, 0x17, 0x59, 0x19, 0xee, 0xe2, 0x8b, 0x85, 0x2f, 0xa5, 0xc5, 0x21, 0x26, 0x7a, 0xc5, 0xe8, + 0x56, 0x8a, 0xee, 0xd5, 0xbc, 0xea, 0x24, 0xe9, 0x1a, 0x94, 0x93, 0xc9, 0xc0, 0xd4, 0x71, 0x2d, + 0x27, 0x6b, 0x9b, 0x3a, 0x03, 0xe6, 0x66, 0x11, 0xdb, 0x91, 0xe6, 0x73, 0x93, 0xee, 0xf5, 0xec, + 0x4e, 0xe9, 0xa4, 0x8b, 0xd5, 0xb2, 0x38, 0x2f, 0x98, 0x7e, 0x90, 0x4e, 0xe5, 0x1d, 0xd3, 0xd5, + 0xb2, 0x8c, 0x54, 0x62, 0xae, 0x8c, 0xa1, 0x91, 0x9d, 0x9e, 0xf4, 0x6d, 0xf3, 0x84, 0x5b, 0x10, + 0x8a, 0xb6, 0xeb, 0x25, 0x33, 0xf9, 0x35, 0x98, 0xcd, 0x89, 0xda, 0x49, 0xde, 0x48, 0x18, 0x62, + 0xb3, 0xa3, 0x7a, 0xaa, 0x05, 0x92, 0x99, 0xb0, 0x73, 0x13, 0xbd, 0x13, 0x8c, 0xd7, 0xb2, 0xa9, + 0x1b, 0xbf, 0x47, 0x6e, 0x74, 0xc4, 0xf3, 0x52, 0x6a, 0x32, 0x37, 0xf3, 0x99, 0x2d, 0xa9, 0xe1, + 0x79, 0xc5, 0x28, 0xcd, 0xb8, 0xf4, 0xcb, 0x20, 0x38, 0x9f, 0x4d, 0x10, 0x53, 0x99, 0xef, 0xc8, + 0xab, 0x9d, 0x64, 0x37, 0xf5, 0xe1, 0x67, 0x3d, 0x10, 0xce, 0xed, 0xe6, 0x8e, 0x54, 0xb0, 0xb2, + 0x29, 0xe6, 0xbf, 0x6a, 0xce, 0xa5, 0xf8, 0x80, 0x51, 0x4c, 0x3d, 0x54, 0x26, 0x39, 0xe0, 0xc5, + 0xd2, 0xc3, 0x96, 0xfb, 0xb5, 0x89, 0xb5, 0xa8, 0xf5, 0x2f, 0xef, 0x49, 0x74, 0x6e, 0xff, 0x56, + 0xe5, 0xf7, 0x94, 0xdd, 0xbf, 0xb3, 0xee, 0xd8, 0xea, 0x7a, 0x2c, 0xf1, 0x56, 0xde, 0x18, 0xa8, + 0x56, 0x3e, 0x9f, 0x53, 0x4e, 0xb6, 0xd0, 0xdd, 0x28, 0x59, 0xaa, 0x1d, 0x5c, 0xb3, 0x1f, 0xe3, + 0xe7, 0xd2, 0xe3, 0xeb, 0xd8, 0x78, 0xcc, 0x7c, 0x9e, 0x75, 0x9c, 0x78, 0x05, 0x2d, 0xd6, 0xb1, + 0x51, 0x7a, 0xbe, 0x75, 0x9c, 0x20, 0x68, 0xae, 0xe3, 0x64, 0x37, 0x93, 0x86, 0x80, 0xdc, 0x59, + 0x4d, 0x76, 0x53, 0xad, 0xe3, 0x6c, 0x8a, 0xf9, 0x8f, 0xce, 0x73, 0x29, 0xaa, 0x75, 0x6c, 0x52, + 0xcc, 0x01, 0x3f, 0xe3, 0x3a, 0x4e, 0x36, 0x62, 0xae, 0xe3, 0x73, 0xf5, 0x4f, 0xad, 0xe3, 0xec, + 0xfe, 0x9d, 0x7b, 0x1d, 0x27, 0xa2, 0x34, 0x18, 0x03, 0xcd, 0x5a, 0xc7, 0x49, 0x78, 0xbe, 0x8e, + 0x93, 0xa5, 0x09, 0x03, 0x4c, 0xc1, 0x3a, 0x4e, 0x62, 0x7e, 0x8e, 0xf4, 0x12, 0x2f, 0xcc, 0xcf, + 0xb2, 0x92, 0x73, 0x1f, 0xa7, 0x93, 0x47, 0x68, 0xfd, 0x4b, 0x94, 0x9f, 0x6d, 0x35, 0x2f, 0xe4, + 0x11, 0xc5, 0xf5, 0xbc, 0x2f, 0x99, 0x98, 0xec, 0xae, 0x69, 0xda, 0xca, 0x7e, 0x60, 0x5f, 0xd0, + 0xe1, 0x7d, 0xb6, 0x6e, 0x9a, 0x05, 0x74, 0x8b, 0xe2, 0x03, 0x14, 0xd0, 0x55, 0xe7, 0xa0, 0x24, + 0xdd, 0x5c, 0x94, 0xe2, 0xf5, 0xfd, 0x85, 0xbc, 0xff, 0x48, 0xe2, 0x2d, 0x26, 0x4e, 0x56, 0xe7, + 0xee, 0xa9, 0x3a, 0x61, 0x25, 0x7b, 0x7a, 0xde, 0x75, 0xbe, 0x29, 0xb5, 0x87, 0x54, 0x60, 0x91, + 0xc4, 0xa0, 0xf5, 0xb5, 0x9e, 0x5b, 0x43, 0x76, 0xd1, 0xd4, 0x9b, 0x2e, 0xd7, 0xcc, 0xc4, 0x79, + 0x11, 0x4c, 0xba, 0x52, 0x4d, 0x85, 0x48, 0xd0, 0xa9, 0xe6, 0xc5, 0x4f, 0x50, 0x54, 0xd3, 0xd8, + 0x9f, 0xa1, 0xe9, 0x4c, 0xbc, 0xe9, 0xf2, 0x1e, 0xfb, 0xf9, 0xe7, 0x9c, 0x29, 0xc3, 0x25, 0x8a, + 0xc1, 0xa2, 0x27, 0xda, 0x77, 0xc5, 0x05, 0x9f, 0x2c, 0xcc, 0x65, 0x7e, 0x16, 0x3e, 0xf9, 0x0c, + 0xca, 0x42, 0xbc, 0xc5, 0x04, 0xb2, 0x00, 0x73, 0xa7, 0x6e, 0x49, 0x5a, 0xec, 0xce, 0xd0, 0x83, + 0xb3, 0x58, 0xea, 0xce, 0xc2, 0x89, 0x7c, 0xb3, 0x16, 0xdb, 0x0e, 0x77, 0x83, 0x4e, 0x18, 0xd1, + 0x66, 0xda, 0x1c, 0x65, 0x76, 0x46, 0x3a, 0x4e, 0x98, 0xe0, 0xfb, 0x8b, 0x64, 0x1d, 0x65, 0x9b, + 0x59, 0x5c, 0x64, 0xaf, 0xcb, 0x26, 0x83, 0xa2, 0x67, 0x4d, 0x3d, 0x1e, 0x32, 0xfb, 0x94, 0xd7, + 0x76, 0x7e, 0xa7, 0x14, 0x8b, 0xce, 0x38, 0xba, 0x3c, 0x16, 0xf1, 0x03, 0x35, 0xb7, 0x1d, 0x76, + 0xe3, 0x4c, 0xf2, 0x39, 0x13, 0xf9, 0x3e, 0x8c, 0x48, 0xe4, 0xee, 0x0c, 0x49, 0x62, 0x23, 0x43, + 0x56, 0x60, 0xdc, 0x78, 0xab, 0xa5, 0x4e, 0x37, 0x59, 0x2f, 0xb8, 0x0a, 0xe6, 0x79, 0xdc, 0x78, + 0x93, 0xa5, 0xa8, 0x64, 0xbd, 0xd4, 0xca, 0xa5, 0xf2, 0x3d, 0x18, 0x15, 0x2c, 0x2d, 0xe4, 0x46, + 0xbe, 0xb1, 0x6e, 0x46, 0xf3, 0x7b, 0xee, 0x34, 0xdd, 0x68, 0xd9, 0xf7, 0x1e, 0xbb, 0x87, 0x5d, + 0x19, 0x93, 0x46, 0xd9, 0x5f, 0x24, 0x3f, 0xc4, 0x2c, 0x8e, 0x32, 0xb7, 0x26, 0x8d, 0x9e, 0xf9, + 0xc1, 0x13, 0xd7, 0x3b, 0xec, 0x42, 0xf2, 0x9a, 0x49, 0x32, 0x89, 0x27, 0x5d, 0x4b, 0x7e, 0x08, + 0xf3, 0xb5, 0x7c, 0xe2, 0x5d, 0x89, 0x14, 0x6f, 0x2f, 0x35, 0x58, 0x40, 0xe7, 0x9a, 0xf3, 0xf6, + 0xbd, 0x90, 0xe8, 0x97, 0x3c, 0x36, 0x95, 0x34, 0xf4, 0x37, 0xfc, 0xa0, 0xd9, 0x9d, 0x62, 0xc5, + 0x74, 0xd7, 0x4d, 0xa0, 0x49, 0x66, 0x7c, 0x09, 0x97, 0x6a, 0xb9, 0xa4, 0xbb, 0x91, 0xe8, 0xa6, + 0x49, 0x5e, 0x46, 0x56, 0x9c, 0xb3, 0xdf, 0x85, 0x34, 0xd7, 0x51, 0xa6, 0xb1, 0x7d, 0x68, 0x27, + 0xa0, 0x8f, 0x69, 0x80, 0x4e, 0xe1, 0xdd, 0xdc, 0xa1, 0x4d, 0x70, 0x39, 0xf2, 0x75, 0xb8, 0x50, + 0x4b, 0x91, 0xca, 0x43, 0x29, 0xee, 0xd5, 0x03, 0x98, 0xc2, 0x91, 0x9e, 0xb1, 0x5f, 0x5d, 0x9c, + 0x88, 0x46, 0xef, 0xd3, 0x68, 0x6f, 0xbd, 0x0b, 0x97, 0xe4, 0xab, 0x05, 0x09, 0xb8, 0x7f, 0x87, + 0x61, 0xd6, 0x34, 0xcc, 0x34, 0x44, 0xee, 0xc7, 0xfb, 0x7d, 0x79, 0x91, 0xd2, 0xb5, 0xd9, 0x3c, + 0x0a, 0x77, 0x51, 0x16, 0x0a, 0xc7, 0x68, 0xcd, 0x04, 0x69, 0x24, 0x5b, 0x9e, 0x1f, 0xd7, 0x7d, + 0xa4, 0x43, 0x52, 0xe5, 0xc7, 0x3f, 0x3d, 0x2d, 0xb3, 0xe6, 0x7a, 0x91, 0x99, 0xaf, 0x39, 0x49, + 0x82, 0x9b, 0x50, 0x37, 0xfc, 0xc6, 0x13, 0xdd, 0x84, 0xaa, 0xe5, 0xf9, 0x9d, 0x37, 0xb3, 0xf0, + 0x0a, 0x89, 0x8f, 0xa9, 0x78, 0x75, 0xbf, 0x30, 0x3d, 0xd3, 0xaf, 0x6e, 0x42, 0x35, 0x73, 0x12, + 0xdf, 0x95, 0xb6, 0x45, 0x6c, 0xd0, 0xa4, 0x9c, 0xcb, 0x1a, 0x65, 0x56, 0x44, 0x24, 0xd3, 0xac, + 0xa8, 0x77, 0x34, 0xff, 0x22, 0x80, 0xa4, 0x93, 0x12, 0xab, 0xc3, 0x4a, 0x6e, 0xbe, 0xe2, 0x02, + 0xf7, 0xae, 0xa9, 0x8c, 0x9c, 0xea, 0xea, 0x78, 0x97, 0x9f, 0x6f, 0x7d, 0xde, 0xf4, 0x55, 0x7a, + 0xb7, 0x44, 0xb6, 0xe0, 0xe2, 0x7d, 0x1a, 0x09, 0x19, 0x67, 0xd3, 0x30, 0x0a, 0xdc, 0x46, 0x54, + 0x78, 0xab, 0x28, 0xcf, 0x26, 0x19, 0x38, 0xfb, 0xef, 0x31, 0x7a, 0xb5, 0x6c, 0x7a, 0x85, 0x78, + 0x05, 0x1e, 0xb4, 0xe2, 0xaa, 0xe2, 0x3c, 0x5d, 0xcc, 0x5f, 0xe2, 0x43, 0xdc, 0x41, 0x27, 0x1f, + 0xb5, 0x1c, 0x27, 0xcb, 0x10, 0xa7, 0xad, 0x5b, 0x30, 0xc8, 0x91, 0x72, 0x37, 0xd4, 0x31, 0x1d, + 0x87, 0xdc, 0x81, 0x11, 0xe5, 0x61, 0x43, 0x8c, 0xaa, 0xdc, 0x7e, 0xdd, 0x81, 0x11, 0x7e, 0xb4, + 0x3a, 0x3b, 0xca, 0x27, 0x30, 0xa2, 0x5c, 0x72, 0xce, 0xbd, 0xd3, 0x7f, 0x06, 0xe3, 0xba, 0x73, + 0xce, 0xf9, 0x19, 0xf9, 0x3d, 0xbc, 0xfb, 0x95, 0x57, 0x2c, 0xf9, 0xf8, 0x33, 0x89, 0x04, 0x2a, + 0x82, 0xa5, 0x5c, 0x40, 0xca, 0xc2, 0xdc, 0xee, 0x5f, 0x48, 0x61, 0x93, 0x4f, 0xe4, 0x7b, 0x29, + 0x85, 0x9c, 0x06, 0x2a, 0xe0, 0xd9, 0x04, 0x67, 0xf3, 0x8b, 0x20, 0x2b, 0x01, 0xdb, 0xb5, 0xdb, + 0x67, 0xb9, 0xa3, 0xee, 0xce, 0xba, 0x3c, 0x2a, 0xdb, 0xa8, 0xa5, 0xa5, 0x52, 0xfb, 0xe4, 0x13, + 0xba, 0x9a, 0x9f, 0x0d, 0x08, 0x27, 0xe3, 0x01, 0x9e, 0x02, 0x53, 0xb5, 0xb9, 0xc3, 0x2b, 0xc8, + 0x2e, 0x14, 0x1f, 0x7b, 0xd3, 0xe4, 0x0a, 0xd0, 0x8a, 0x4e, 0xd1, 0xe2, 0x15, 0xe8, 0x2b, 0x21, + 0xb7, 0x2e, 0x7d, 0x1c, 0xcf, 0x3e, 0xd8, 0xfc, 0x9e, 0x5d, 0xce, 0xb8, 0x15, 0xef, 0x3a, 0x17, + 0x79, 0xe4, 0x7e, 0x0d, 0xb5, 0xc3, 0xec, 0x8c, 0xf2, 0xb9, 0xc4, 0x6e, 0x68, 0x8e, 0x15, 0xc5, + 0xb9, 0xe8, 0x9f, 0xe0, 0x43, 0xb4, 0xec, 0xe4, 0x47, 0x6f, 0x76, 0xa1, 0x22, 0x39, 0xf1, 0x56, + 0x57, 0x38, 0x75, 0xc7, 0x7a, 0x99, 0xef, 0xb0, 0xd9, 0xed, 0x75, 0x49, 0xe6, 0x94, 0x71, 0xed, + 0x9d, 0x93, 0xae, 0x5d, 0x12, 0x34, 0x1d, 0x48, 0x0b, 0xc7, 0x90, 0xc7, 0xfe, 0xcf, 0xa1, 0x12, + 0x7b, 0x8f, 0x9c, 0x6f, 0x12, 0xf2, 0xfd, 0x16, 0x49, 0x3a, 0x89, 0x3d, 0x29, 0xca, 0x6e, 0x30, + 0x7f, 0x3d, 0x8f, 0xc3, 0xa1, 0xe6, 0x96, 0x24, 0xfc, 0xde, 0x12, 0x69, 0xc0, 0xf2, 0x12, 0x8a, + 0x15, 0xd8, 0x61, 0xc5, 0xcb, 0xbc, 0x57, 0x42, 0x28, 0x3d, 0xdb, 0xe7, 0x27, 0xa4, 0x9c, 0x3b, + 0x12, 0x84, 0xac, 0x82, 0xe9, 0x3d, 0x8f, 0xef, 0x5a, 0x72, 0x2a, 0xce, 0x3b, 0xa1, 0x4e, 0xfc, + 0x1a, 0x2d, 0x9d, 0x69, 0x5f, 0xe9, 0x72, 0xb9, 0x59, 0xff, 0xd5, 0xec, 0x16, 0xa4, 0xe9, 0x5f, + 0x66, 0x9f, 0x29, 0x6f, 0xc2, 0x48, 0xf3, 0xbd, 0x6c, 0x6f, 0xc4, 0x66, 0x85, 0x8c, 0xfc, 0xdf, + 0xf3, 0x20, 0x2b, 0xed, 0x0d, 0x52, 0x93, 0x61, 0x75, 0xb3, 0x62, 0xe0, 0xa8, 0x97, 0x31, 0x59, + 0x95, 0x05, 0xa7, 0x8b, 0x9a, 0x0c, 0xa4, 0xfb, 0x2a, 0x89, 0xd6, 0x61, 0x36, 0x27, 0x72, 0x90, + 0xba, 0x61, 0x2d, 0x8e, 0x2c, 0x34, 0x5f, 0xdc, 0x30, 0xf9, 0x21, 0xcc, 0x64, 0x86, 0x16, 0x52, + 0x56, 0xe2, 0xa2, 0xc0, 0x43, 0xdd, 0x88, 0x3f, 0x81, 0xb9, 0xbc, 0x9c, 0xdc, 0xf1, 0x4b, 0x9d, + 0xe2, 0x44, 0xe9, 0x4a, 0xa6, 0x76, 0x4d, 0xee, 0xbd, 0x05, 0xd3, 0x59, 0x79, 0xae, 0xd5, 0xc7, + 0x51, 0x90, 0x04, 0x3b, 0xf3, 0x39, 0xd0, 0x0e, 0xcc, 0x64, 0xe6, 0x9a, 0x56, 0x9c, 0x29, 0xca, + 0x44, 0x9d, 0x49, 0xf1, 0x0b, 0x98, 0xcd, 0x49, 0xac, 0x1c, 0x5f, 0x97, 0x17, 0x26, 0x5e, 0x2e, + 0x70, 0x56, 0x9a, 0xcf, 0xcf, 0xd9, 0xab, 0x7c, 0xd4, 0xba, 0xa6, 0xf5, 0x9d, 0xcf, 0x4c, 0x64, + 0x4e, 0x76, 0x71, 0x11, 0x66, 0x25, 0xf1, 0xd5, 0x17, 0x61, 0x41, 0x92, 0xdf, 0x9c, 0x67, 0x5c, + 0xb3, 0x39, 0x79, 0x7b, 0x0b, 0xa8, 0x9e, 0xa1, 0xb7, 0x5b, 0x52, 0xfe, 0x9b, 0x19, 0x4e, 0x13, + 0x7e, 0xcf, 0x99, 0xe9, 0x4f, 0x33, 0xfb, 0xa9, 0xc5, 0x57, 0x68, 0xb5, 0x0a, 0xd4, 0x20, 0xa2, + 0x07, 0x58, 0x60, 0x90, 0x68, 0x68, 0x1f, 0xd7, 0x71, 0x8b, 0x24, 0x6a, 0x0a, 0x19, 0x15, 0xcf, + 0x8f, 0x61, 0xac, 0xa6, 0x37, 0x9e, 0xd1, 0x48, 0xee, 0xa2, 0x50, 0x0f, 0x79, 0xba, 0xf7, 0xbd, + 0xc0, 0xd9, 0x53, 0x6d, 0x0e, 0x67, 0x1a, 0x45, 0xae, 0x7b, 0x8b, 0x91, 0xae, 0x46, 0x49, 0xea, + 0xac, 0x6c, 0x52, 0xca, 0xbd, 0x25, 0x3b, 0xc3, 0x4d, 0x9d, 0x07, 0xd8, 0x4f, 0x26, 0x0b, 0x23, + 0x56, 0xf7, 0xac, 0x7c, 0xca, 0xad, 0xbd, 0x30, 0xdb, 0x18, 0xf7, 0xc5, 0x89, 0x13, 0xf4, 0xe8, + 0xbe, 0x38, 0xa9, 0xb4, 0x3f, 0xba, 0x2f, 0x4e, 0x46, 0x4e, 0x9f, 0x55, 0xa4, 0x15, 0x67, 0x26, + 0x28, 0x30, 0x18, 0x28, 0x32, 0x19, 0x09, 0x10, 0x1e, 0xea, 0x61, 0x3a, 0x78, 0x3e, 0x83, 0x02, + 0x7b, 0x68, 0x32, 0x3c, 0x47, 0x22, 0x01, 0xc2, 0x03, 0x28, 0x27, 0x63, 0xb9, 0x29, 0x73, 0x54, + 0x4e, 0x90, 0xb7, 0x82, 0x25, 0x06, 0x71, 0xc4, 0x36, 0x65, 0xf4, 0x49, 0x05, 0x71, 0x9b, 0xbf, + 0x94, 0x51, 0xa3, 0xd4, 0xb5, 0x31, 0x3d, 0xbe, 0x9b, 0x72, 0x27, 0xcb, 0x08, 0xfa, 0x36, 0x7f, + 0x39, 0xb3, 0x4e, 0x10, 0x8a, 0x78, 0x42, 0xc9, 0xec, 0x34, 0x98, 0xf1, 0x1b, 0xaa, 0x02, 0x18, + 0xd9, 0xcc, 0xcd, 0xb3, 0x80, 0x8a, 0x56, 0xa9, 0xca, 0xa7, 0x90, 0x91, 0x7b, 0xf3, 0xad, 0x8c, + 0xb7, 0x0e, 0x06, 0x44, 0xec, 0x69, 0x55, 0x9c, 0x08, 0x94, 0x3c, 0x92, 0xf1, 0xed, 0x73, 0x5a, + 0xea, 0x46, 0x20, 0x77, 0x06, 0x1f, 0xc9, 0x88, 0xf6, 0xaf, 0x9a, 0xf0, 0x01, 0x2c, 0x24, 0x9e, + 0x52, 0x98, 0x84, 0x6f, 0x66, 0xbf, 0xb7, 0xc8, 0x64, 0x4f, 0xbe, 0x3e, 0x7c, 0x2d, 0xfd, 0xee, + 0x22, 0x31, 0xef, 0xe7, 0x95, 0x55, 0x9b, 0x30, 0x81, 0xe2, 0x41, 0x66, 0x91, 0x8d, 0xa3, 0xbb, + 0x98, 0xc5, 0xc9, 0x30, 0x43, 0xc9, 0x5a, 0xe5, 0x8e, 0x3a, 0x26, 0xde, 0xe3, 0xf2, 0x9c, 0xb4, + 0xf3, 0xe6, 0x23, 0x5d, 0x2c, 0xcc, 0xda, 0x7d, 0x44, 0xaa, 0x5b, 0xf2, 0x3d, 0x98, 0x8c, 0x9f, + 0xe9, 0x72, 0x12, 0x19, 0x60, 0x05, 0x46, 0xa8, 0xc9, 0xf8, 0xad, 0xee, 0xf9, 0xd1, 0xd7, 0xe4, + 0x16, 0x12, 0xa3, 0x5f, 0x49, 0x3d, 0x41, 0x31, 0xc6, 0x70, 0x96, 0x9d, 0x44, 0xe3, 0xed, 0x79, + 0x67, 0xa7, 0x81, 0x9f, 0x5b, 0x76, 0xe0, 0x42, 0xfd, 0x73, 0x2b, 0x0c, 0xae, 0xa8, 0xd4, 0xd6, + 0x1c, 0x3a, 0x9b, 0xf0, 0x1a, 0x06, 0x3b, 0xd9, 0xe1, 0xe1, 0xed, 0xb2, 0xa1, 0xf2, 0xfb, 0x9e, + 0x0c, 0x91, 0xd2, 0x82, 0xeb, 0x5d, 0x23, 0x37, 0x92, 0xdb, 0x86, 0xfb, 0x48, 0xf7, 0x18, 0x8f, + 0x45, 0xcf, 0xbe, 0xb2, 0x02, 0x20, 0xaa, 0xfd, 0xb1, 0x20, 0x16, 0xa3, 0xda, 0x1f, 0x0b, 0x23, + 0x28, 0x7e, 0x81, 0x49, 0x23, 0xc4, 0xde, 0x82, 0x01, 0x8c, 0xa8, 0xc7, 0x43, 0x3a, 0x17, 0x5e, + 0xa9, 0x5c, 0x37, 0x2f, 0x1c, 0x53, 0x88, 0x78, 0x16, 0xb9, 0x2a, 0x4e, 0x50, 0x79, 0xc4, 0xbb, + 0x13, 0x29, 0x70, 0x5b, 0xbe, 0xca, 0x17, 0xe0, 0xb9, 0x7b, 0x9e, 0x53, 0xbe, 0xb4, 0xf2, 0xf3, + 0xff, 0x72, 0xb5, 0xf4, 0xf3, 0x5f, 0x5c, 0x2d, 0xfd, 0xc7, 0x5f, 0x5c, 0x2d, 0xfd, 0xe7, 0x5f, + 0x5c, 0x2d, 0xfd, 0x60, 0xf1, 0x6c, 0x81, 0x85, 0x1b, 0x2d, 0x97, 0x7a, 0xd1, 0x6d, 0x4e, 0x6e, + 0x10, 0xff, 0xbb, 0xfb, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x11, 0x4e, 0xc4, 0x9c, 0xe9, 0xdc, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -33820,6 +33843,16 @@ func (m *PaginatedResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.RequiresRequest { + i-- + if m.RequiresRequest { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x70 + } if len(m.Logins) > 0 { for iNdEx := len(m.Logins) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.Logins[iNdEx]) @@ -34096,6 +34129,16 @@ func (m *ListUnifiedResourcesRequest) MarshalToSizedBuffer(dAtA []byte) (int, er i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.IncludeRequestable { + i-- + if m.IncludeRequestable { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x70 + } if m.IncludeLogins { i-- if m.IncludeLogins { @@ -40867,6 +40910,9 @@ func (m *PaginatedResource) Size() (n int) { n += 1 + l + sovAuthservice(uint64(l)) } } + if m.RequiresRequest { + n += 2 + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -41058,6 +41104,9 @@ func (m *ListUnifiedResourcesRequest) Size() (n int) { if m.IncludeLogins { n += 2 } + if m.IncludeRequestable { + n += 2 + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -61455,6 +61504,26 @@ func (m *PaginatedResource) Unmarshal(dAtA []byte) error { } m.Logins = append(m.Logins, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RequiresRequest", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequiresRequest = bool(v != 0) default: iNdEx = preIndex skippy, err := skipAuthservice(dAtA[iNdEx:]) @@ -61926,6 +61995,26 @@ func (m *ListUnifiedResourcesRequest) Unmarshal(dAtA []byte) error { } } m.IncludeLogins = bool(v != 0) + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeRequestable", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeRequestable = bool(v != 0) default: iNdEx = preIndex skippy, err := skipAuthservice(dAtA[iNdEx:]) diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index eeed70257f27f..0052db5b8951b 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -1871,6 +1871,9 @@ message PaginatedResource { // Logins allowed for the included resource. Only to be populated for SSH and Desktops. repeated string Logins = 13 [(gogoproto.jsontag) = "logins,omitempty"]; + // RequiresRequest indicates if a resource requires an access request to access. Only populated with requests + // that IncludeRequestable. + bool RequiresRequest = 14 [(gogoproto.jsontag) = "requires_request,omitempty"]; reserved 4; reserved "KubeService"; @@ -1915,6 +1918,8 @@ message ListUnifiedResourcesRequest { // IncludeLogins indicates that the response should include a users allowed logins // for all returned resources. bool IncludeLogins = 12 [(gogoproto.jsontag) = "include_logins,omitempty"]; + // IncludeRequestable indicates that the response should include resources that the user must request access to. + bool IncludeRequestable = 14 [(gogoproto.jsontag) = "include_proto,omitempty"]; } // ListUnifiedResourceResponse response of ListUnifiedResources. diff --git a/api/types/resource.go b/api/types/resource.go index 141e427c780ff..d1ac3f61deac8 100644 --- a/api/types/resource.go +++ b/api/types/resource.go @@ -139,6 +139,10 @@ type EnrichedResource struct { ResourceWithLabels // Logins that the user is allowed to access the above resource with. Logins []string + // RequiresRequest is true if a resource is being returned to the user but requires + // an access request to access. This is done during `ListUnifiedResources` when + // searchAsRoles is true + RequiresRequest bool } // ResourcesWithLabels is a list of labeled resources. diff --git a/lib/auth/assist/assistv1/service.go b/lib/auth/assist/assistv1/service.go index 77f8e0a5b4a66..cd680dc9e4ccb 100644 --- a/lib/auth/assist/assistv1/service.go +++ b/lib/auth/assist/assistv1/service.go @@ -374,7 +374,7 @@ func assembleSearchResponse(ctx context.Context, a *Service, documents []*ai.Doc resources = append(resources, resource) } - paginated, err := services.MakePaginatedResources(types.KindUnifiedResource, resources) + paginated, err := services.MakePaginatedResources(types.KindUnifiedResource, resources, nil /* requestable map */) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index ff45bdd658aa7..0083bbe051de1 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -1208,10 +1208,25 @@ func (a *ServerWithRoles) GetNode(ctx context.Context, namespace, name string) ( return node, nil } -func (a *ServerWithRoles) checkUnifiedAccess(resource types.ResourceWithLabels, checker resourceAccessChecker, filter services.MatchResourceFilter, resourceAccessMap map[string]error) (bool, error) { +// resourceAccess is used for different rbac results when filtering items +type resourceAccess struct { + // accessChecker is used to check a user's access to resources. This can + // be extended to include SearchAsRoles + accessChecker resourceAccessChecker + // baseAuthChecker is set when a user's auth context is extended during a + // searchAsRoles request + baseAuthChecker resourceAccessChecker + // kindAccessMap is used to check errors for list/read verbs per kind + kindAccessMap map[string]error + // requestableMap is used to track if a resource matches a filter but is only + // available after an access request. This map is of Resource.GetName() + requestableMap map[string]struct{} +} + +func (c *resourceAccess) checkAccess(resource types.ResourceWithLabels, filter services.MatchResourceFilter) (bool, error) { resourceKind := resource.GetKind() - if canAccessErr := resourceAccessMap[resourceKind]; canAccessErr != nil { + if canAccessErr := c.kindAccessMap[resourceKind]; canAccessErr != nil { // skip access denied error. It is expected that resources won't be available // to some users and we want to keep iterating until we've reached the request limit // of resources they have access to @@ -1241,11 +1256,35 @@ func (a *ServerWithRoles) checkUnifiedAccess(resource types.ResourceWithLabels, return true, nil } - if err := checker.CanAccess(resource); err != nil { - if trace.IsAccessDenied(err) { - return false, nil + // check access normally if base checker doesnt exist + if c.baseAuthChecker == nil { + if err := c.accessChecker.CanAccess(resource); err != nil { + if trace.IsAccessDenied(err) { + return false, nil + } + return false, trace.Wrap(err) } - return false, trace.Wrap(err) + return true, nil + } + + // baseAuthChecker exists if the current auth context has been extended for a includeRequestable request. + // if true, we should check with the base auth checker first and if that returns false, check the extended context + // so we know if a resource is being matched because they have access to it currently, or only to be added + // to an access request + if err := c.baseAuthChecker.CanAccess(resource); err != nil { + if !trace.IsAccessDenied(err) { + return false, trace.Wrap(err) + } + + // user does not have access with their base context + // check if they would have access with the extended context + if err := c.accessChecker.CanAccess(resource); err != nil { + if trace.IsAccessDenied(err) { + return false, nil + } + return false, trace.Wrap(err) + } + c.requestableMap[resource.GetName()] = struct{}{} } return true, nil @@ -1267,10 +1306,16 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L filter.PredicateExpression = expression } - // Populate resourceAccessMap with any access errors the user has for each possible - // resource kind. This allows the access check to occur a single time per resource - // kind instead of once per matching resource. - resourceAccessMap := make(map[string]error, len(services.UnifiedResourceKinds)) + resourceAccess := &resourceAccess{ + // Populate kindAccessMap with any access errors the user has for each possible + // resource kind. This allows the access check to occur a single time per resource + // kind instead of once per matching resource. + kindAccessMap: make(map[string]error, len(services.UnifiedResourceKinds)), + // requestableMap is populated with resources that are being returned but can only + // be accessed to the user via an access request + requestableMap: make(map[string]struct{}), + } + for _, kind := range services.UnifiedResourceKinds { actionVerbs := []string{types.VerbList, types.VerbRead} if kind == types.KindNode { @@ -1282,7 +1327,7 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L actionVerbs = []string{types.VerbList} } - resourceAccessMap[kind] = a.action(apidefaults.Namespace, kind, actionVerbs...) + resourceAccess.kindAccessMap[kind] = a.action(apidefaults.Namespace, kind, actionVerbs...) } // Before doing any listing, verify that the user is allowed to list @@ -1294,7 +1339,7 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L } var rbacErrors int for _, kind := range requested { - if err, ok := resourceAccessMap[kind]; ok && err != nil { + if err, ok := resourceAccess.kindAccessMap[kind]; ok && err != nil { rbacErrors++ } } @@ -1319,6 +1364,16 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L return nil, trace.Wrap(err) } baseContext := a.context + // If IncludeRequestable is true, we will create a baseChecker to + // use during RBAC to determine if a resource would be available only after extending + if req.IncludeRequestable { + baseChecker, err := a.newResourceAccessChecker(types.KindUnifiedResource) + if err != nil { + return nil, trace.Wrap(err) + } + resourceAccess.baseAuthChecker = baseChecker + } + a.context = *extendedContext defer func() { a.context = baseContext @@ -1330,7 +1385,8 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L return nil, trace.Wrap(err) } - // Fetch full list of resources in the backend. + resourceAccess.accessChecker = checker + var ( unifiedResources types.ResourcesWithLabels nextKey string @@ -1344,7 +1400,7 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L return &proto.ListUnifiedResourcesResponse{}, nil } unifiedResources, err = a.authServer.UnifiedResourceCache.GetUnifiedResourcesByIDs(ctx, prefs.ClusterPreferences.PinnedResources.GetResourceIds(), func(resource types.ResourceWithLabels) (bool, error) { - match, err := a.checkUnifiedAccess(resource, checker, filter, resourceAccessMap) + match, err := resourceAccess.checkAccess(resource, filter) return match, trace.Wrap(err) }) if err != nil { @@ -1359,7 +1415,7 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L } } else { unifiedResources, nextKey, err = a.authServer.UnifiedResourceCache.IterateUnifiedResources(ctx, func(resource types.ResourceWithLabels) (bool, error) { - match, err := a.checkUnifiedAccess(resource, checker, filter, resourceAccessMap) + match, err := resourceAccess.checkAccess(resource, filter) return match, trace.Wrap(err) }, req) if err != nil { @@ -1367,7 +1423,7 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L } } - paginatedResources, err := services.MakePaginatedResources(types.KindUnifiedResource, unifiedResources) + paginatedResources, err := services.MakePaginatedResources(types.KindUnifiedResource, unifiedResources, resourceAccess.requestableMap) if err != nil { return nil, trace.Wrap(err, "making paginated unified resources") } @@ -1467,24 +1523,6 @@ func (a *ServerWithRoles) authContextForSearch(ctx context.Context, req *proto.L return nil, trace.Wrap(err) } - // Only emit the event if the role list actually changed - if len(extendedContext.Checker.RoleNames()) != len(a.context.Checker.RoleNames()) { - if err := a.authServer.emitter.EmitAuditEvent(a.authServer.closeCtx, &apievents.AccessRequestResourceSearch{ - Metadata: apievents.Metadata{ - Type: events.AccessRequestResourceSearch, - Code: events.AccessRequestResourceSearchCode, - }, - UserMetadata: authz.ClientUserMetadata(ctx), - SearchAsRoles: extendedContext.Checker.RoleNames(), - ResourceType: req.ResourceType, - Namespace: req.Namespace, - Labels: req.Labels, - PredicateExpression: req.PredicateExpression, - SearchKeywords: req.SearchKeywords, - }); err != nil { - return nil, trace.Wrap(err) - } - } return extendedContext, nil } diff --git a/lib/auth/auth_with_roles_test.go b/lib/auth/auth_with_roles_test.go index a3dea600f7155..08273be6c2997 100644 --- a/lib/auth/auth_with_roles_test.go +++ b/lib/auth/auth_with_roles_test.go @@ -3490,8 +3490,7 @@ func TestListResources_SearchAsRoles(t *testing.T) { }, { // this tests the case where the request includes UseSearchAsRoles - // and UsePreviewAsRoles, but the user has none, so there should be - // no audit event. + // and UsePreviewAsRoles, but the user has none desc: "no extra roles", clt: adminClt, requestOpt: func(req *proto.ListResourcesRequest) { @@ -3502,11 +3501,6 @@ func TestListResources_SearchAsRoles(t *testing.T) { }, } { t.Run(tc.desc, func(t *testing.T) { - // Overwrite the auth server emitter to capture all events emitted - // during this test case. - emitter := eventstest.NewChannelEmitter(1) - srv.AuthServer.AuthServer.emitter = emitter - req := proto.ListResourcesRequest{ ResourceType: types.KindNode, Limit: int32(len(testNodes)), @@ -3522,14 +3516,6 @@ func TestListResources_SearchAsRoles(t *testing.T) { gotNodes = append(gotNodes, node.GetName()) } require.ElementsMatch(t, tc.expectNodes, gotNodes) - - if len(tc.expectSearchEventRoles) > 0 { - searchEvent := <-emitter.C() - require.ElementsMatch(t, tc.expectSearchEventRoles, searchEvent.(*apievents.AccessRequestResourceSearch).SearchAsRoles) - } else { - // expect no event to have been emitted - require.Empty(t, emitter.C()) - } }) } } @@ -4616,6 +4602,113 @@ func TestListUnifiedResources_WithLogins(t *testing.T) { } } +func TestListUnifiedResources_IncludeRequestable(t *testing.T) { + t.Parallel() + ctx := context.Background() + srv := newTestTLSServer(t) + + // Create test nodes. + const numTestNodes = 3 + for i := 0; i < numTestNodes; i++ { + name := fmt.Sprintf("node%d", i) + node, err := types.NewServerWithLabels( + name, + types.KindNode, + types.ServerSpecV2{}, + map[string]string{"name": name}, + ) + require.NoError(t, err) + + _, err = srv.Auth().UpsertNode(ctx, node) + require.NoError(t, err) + } + + testNodes, err := srv.Auth().GetNodes(ctx, apidefaults.Namespace) + require.NoError(t, err) + require.Len(t, testNodes, numTestNodes) + + // create user and client + requester, role, err := CreateUserAndRole(srv.Auth(), "requester", []string{"requester"}, nil) + require.NoError(t, err) + + // only allow user to see first node + role.SetNodeLabels(types.Allow, types.Labels{"name": {testNodes[0].GetName()}}) + + // create a new role which can see second node + searchAsRole := services.RoleForUser(requester) + searchAsRole.SetName("test_search_role") + searchAsRole.SetNodeLabels(types.Allow, types.Labels{"name": {testNodes[1].GetName()}}) + searchAsRole.SetLogins(types.Allow, []string{"requester"}) + _, err = srv.Auth().UpsertRole(ctx, searchAsRole) + require.NoError(t, err) + + role.SetSearchAsRoles(types.Allow, []string{searchAsRole.GetName()}) + _, err = srv.Auth().UpsertRole(ctx, role) + require.NoError(t, err) + + requesterClt, err := srv.NewClient(TestUser(requester.GetName())) + require.NoError(t, err) + + type expected struct { + name string + requestable bool + } + + for _, tc := range []struct { + desc string + clt *Client + requestOpt func(*proto.ListUnifiedResourcesRequest) + expectedResources []expected + }{ + { + desc: "no search", + clt: requesterClt, + expectedResources: []expected{{name: testNodes[0].GetName(), requestable: false}}, + }, + { + desc: "search as roles without requestable", + clt: requesterClt, + requestOpt: func(req *proto.ListUnifiedResourcesRequest) { + req.UseSearchAsRoles = true + }, + expectedResources: []expected{ + {name: testNodes[0].GetName(), requestable: false}, + {name: testNodes[1].GetName(), requestable: false}, + }, + }, + { + desc: "search as roles with requestable", + clt: requesterClt, + requestOpt: func(req *proto.ListUnifiedResourcesRequest) { + req.IncludeRequestable = true + req.UseSearchAsRoles = true + }, + expectedResources: []expected{ + {name: testNodes[0].GetName(), requestable: false}, + {name: testNodes[1].GetName(), requestable: true}, + }, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + req := proto.ListUnifiedResourcesRequest{ + SortBy: types.SortBy{Field: "name", IsDesc: false}, + Limit: int32(len(testNodes)), + } + if tc.requestOpt != nil { + tc.requestOpt(&req) + } + resp, err := tc.clt.ListUnifiedResources(ctx, &req) + require.NoError(t, err) + require.Len(t, resp.Resources, len(tc.expectedResources)) + var resources []expected + for _, resource := range resp.Resources { + resources = append(resources, expected{name: resource.GetNode().GetName(), requestable: resource.RequiresRequest}) + } + require.ElementsMatch(t, tc.expectedResources, resources) + }) + } +} + // TestListUnifiedResources_KindsFilter will generate multiple resources // and filter for only one kind. func TestListUnifiedResources_KindsFilter(t *testing.T) { diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index f5092cba13ad0..9bfc312bc7daa 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -4310,7 +4310,7 @@ func (g *GRPCServer) ListResources(ctx context.Context, req *authpb.ListResource return nil, trace.Wrap(err) } - paginatedResources, err := services.MakePaginatedResources(req.ResourceType, resp.Resources) + paginatedResources, err := services.MakePaginatedResources(req.ResourceType, resp.Resources, nil /* requestable map */) if err != nil { return nil, trace.Wrap(err, "making paginated resources") } diff --git a/lib/services/unified_resource.go b/lib/services/unified_resource.go index 137aab8cca061..7346d65303a11 100644 --- a/lib/services/unified_resource.go +++ b/lib/services/unified_resource.go @@ -741,122 +741,132 @@ const ( sortByKind string = "kind" ) -// MakePaginatedResources converts a list of resources into a list of paginated proto representations. -func MakePaginatedResources(requestType string, resources []types.ResourceWithLabels) ([]*proto.PaginatedResource, error) { - paginatedResources := make([]*proto.PaginatedResource, 0, len(resources)) - for _, r := range resources { - var protoResource *proto.PaginatedResource - resourceKind := requestType - if requestType == types.KindUnifiedResource { - resourceKind = r.GetKind() +// MakePaginatedResource converts a resource into a paginated proto representation. +func MakePaginatedResource(requestType string, r types.ResourceWithLabels, requiresRequest bool) (*proto.PaginatedResource, error) { + var protoResource *proto.PaginatedResource + resourceKind := requestType + if requestType == types.KindUnifiedResource { + resourceKind = r.GetKind() + } + + var logins []string + resource := r + if enriched, ok := r.(*types.EnrichedResource); ok { + resource = enriched.ResourceWithLabels + logins = enriched.Logins + } + + switch resourceKind { + case types.KindDatabaseServer: + database, ok := resource.(*types.DatabaseServerV3) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) } - var logins []string - resource := r - if enriched, ok := r.(*types.EnrichedResource); ok { - resource = enriched.ResourceWithLabels - logins = enriched.Logins + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_DatabaseServer{DatabaseServer: database}, RequiresRequest: requiresRequest} + case types.KindDatabaseService: + databaseService, ok := resource.(*types.DatabaseServiceV1) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) } - switch resourceKind { - case types.KindDatabaseServer: - database, ok := resource.(*types.DatabaseServerV3) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } - - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_DatabaseServer{DatabaseServer: database}} - case types.KindDatabaseService: - databaseService, ok := resource.(*types.DatabaseServiceV1) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } - - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_DatabaseService{DatabaseService: databaseService}} - case types.KindAppServer: - app, ok := resource.(*types.AppServerV3) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_DatabaseService{DatabaseService: databaseService}, RequiresRequest: requiresRequest} + case types.KindAppServer: + app, ok := resource.(*types.AppServerV3) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_AppServer{AppServer: app}} - case types.KindNode: - srv, ok := resource.(*types.ServerV2) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_AppServer{AppServer: app}, RequiresRequest: requiresRequest} + case types.KindNode: + srv, ok := resource.(*types.ServerV2) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_Node{Node: srv}, Logins: logins} - case types.KindKubeServer: - srv, ok := resource.(*types.KubernetesServerV3) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_Node{Node: srv}, Logins: logins, RequiresRequest: requiresRequest} + case types.KindKubeServer: + srv, ok := resource.(*types.KubernetesServerV3) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_KubernetesServer{KubernetesServer: srv}} - case types.KindWindowsDesktop: - desktop, ok := resource.(*types.WindowsDesktopV3) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_KubernetesServer{KubernetesServer: srv}, RequiresRequest: requiresRequest} + case types.KindWindowsDesktop: + desktop, ok := resource.(*types.WindowsDesktopV3) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_WindowsDesktop{WindowsDesktop: desktop}, Logins: logins} - case types.KindWindowsDesktopService: - desktopService, ok := resource.(*types.WindowsDesktopServiceV3) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_WindowsDesktop{WindowsDesktop: desktop}, Logins: logins, RequiresRequest: requiresRequest} + case types.KindWindowsDesktopService: + desktopService, ok := resource.(*types.WindowsDesktopServiceV3) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_WindowsDesktopService{WindowsDesktopService: desktopService}} - case types.KindKubernetesCluster: - cluster, ok := resource.(*types.KubernetesClusterV3) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_WindowsDesktopService{WindowsDesktopService: desktopService}, RequiresRequest: requiresRequest} + case types.KindKubernetesCluster: + cluster, ok := resource.(*types.KubernetesClusterV3) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_KubeCluster{KubeCluster: cluster}} - case types.KindUserGroup: - userGroup, ok := resource.(*types.UserGroupV1) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_KubeCluster{KubeCluster: cluster}, RequiresRequest: requiresRequest} + case types.KindUserGroup: + userGroup, ok := resource.(*types.UserGroupV1) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_UserGroup{UserGroup: userGroup}} - case types.KindAppOrSAMLIdPServiceProvider: - //nolint:staticcheck // SA1019. TODO(sshah) DELETE IN 17.0 - switch appOrSP := resource.(type) { - case *types.AppServerV3: - protoResource = &proto.PaginatedResource{ - Resource: &proto.PaginatedResource_AppServerOrSAMLIdPServiceProvider{ - AppServerOrSAMLIdPServiceProvider: &types.AppServerOrSAMLIdPServiceProviderV1{ - Resource: &types.AppServerOrSAMLIdPServiceProviderV1_AppServer{ - AppServer: appOrSP, - }, + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_UserGroup{UserGroup: userGroup}, RequiresRequest: requiresRequest} + case types.KindAppOrSAMLIdPServiceProvider: + //nolint:staticcheck // SA1019. TODO(sshah) DELETE IN 17.0 + switch appOrSP := resource.(type) { + case *types.AppServerV3: + protoResource = &proto.PaginatedResource{ + Resource: &proto.PaginatedResource_AppServerOrSAMLIdPServiceProvider{ + AppServerOrSAMLIdPServiceProvider: &types.AppServerOrSAMLIdPServiceProviderV1{ + Resource: &types.AppServerOrSAMLIdPServiceProviderV1_AppServer{ + AppServer: appOrSP, }, - }} - case *types.SAMLIdPServiceProviderV1: - protoResource = &proto.PaginatedResource{ - Resource: &proto.PaginatedResource_AppServerOrSAMLIdPServiceProvider{ - AppServerOrSAMLIdPServiceProvider: &types.AppServerOrSAMLIdPServiceProviderV1{ - Resource: &types.AppServerOrSAMLIdPServiceProviderV1_SAMLIdPServiceProvider{ - SAMLIdPServiceProvider: appOrSP, - }, + }, + }, RequiresRequest: requiresRequest} + case *types.SAMLIdPServiceProviderV1: + protoResource = &proto.PaginatedResource{ + Resource: &proto.PaginatedResource_AppServerOrSAMLIdPServiceProvider{ + AppServerOrSAMLIdPServiceProvider: &types.AppServerOrSAMLIdPServiceProviderV1{ + Resource: &types.AppServerOrSAMLIdPServiceProviderV1_SAMLIdPServiceProvider{ + SAMLIdPServiceProvider: appOrSP, }, - }} - default: - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } - case types.KindSAMLIdPServiceProvider: - serviceProvider, ok := resource.(*types.SAMLIdPServiceProviderV1) - if !ok { - return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) - } - - protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_SAMLIdPServiceProvider{SAMLIdPServiceProvider: serviceProvider}} + }, + }, RequiresRequest: requiresRequest} default: - return nil, trace.NotImplemented("resource type %s doesn't support pagination", resource.GetKind()) + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) + } + case types.KindSAMLIdPServiceProvider: + serviceProvider, ok := resource.(*types.SAMLIdPServiceProviderV1) + if !ok { + return nil, trace.BadParameter("%s has invalid type %T", resourceKind, resource) } + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_SAMLIdPServiceProvider{SAMLIdPServiceProvider: serviceProvider}, RequiresRequest: requiresRequest} + default: + return nil, trace.NotImplemented("resource type %s doesn't support pagination", resource.GetKind()) + } + + return protoResource, nil +} + +// MakePaginatedResources converts a list of resources into a list of paginated proto representations. +func MakePaginatedResources(requestType string, resources []types.ResourceWithLabels, requestableMap map[string]struct{}) ([]*proto.PaginatedResource, error) { + paginatedResources := make([]*proto.PaginatedResource, 0, len(resources)) + for _, r := range resources { + _, requiresRequest := requestableMap[r.GetName()] + protoResource, err := MakePaginatedResource(requestType, r, requiresRequest) + if err != nil { + return nil, trace.Wrap(err) + } paginatedResources = append(paginatedResources, protoResource) } return paginatedResources, nil diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 943164e9c16df..4a89cd3953585 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -2644,6 +2644,7 @@ func makeUnifiedResourceRequest(r *http.Request) (*proto.ListUnifiedResourcesReq SearchKeywords: client.ParseSearchKeywords(values.Get("search"), ' '), UseSearchAsRoles: values.Get("searchAsRoles") == "yes", IncludeLogins: true, + IncludeRequestable: values.Get("includeRequestable") == "true", }, nil } From c106c41a72aa9464048563ae93be1f314ec26b2e Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Mon, 29 Apr 2024 15:53:23 -0300 Subject: [PATCH 08/28] chore: Bump opentelemetry modules (#41017) --- api/go.mod | 16 +++++------ api/go.sum | 32 +++++++++++----------- go.mod | 20 +++++++------- go.sum | 40 +++++++++++++-------------- integrations/event-handler/go.mod | 22 ++++++++------- integrations/event-handler/go.sum | 45 ++++++++++++++++++------------- integrations/terraform/go.mod | 22 ++++++++------- integrations/terraform/go.sum | 45 +++++++++++++++++-------------- 8 files changed, 131 insertions(+), 111 deletions(-) diff --git a/api/go.mod b/api/go.mod index e15e46b45651c..b0e22e46886ee 100644 --- a/api/go.mod +++ b/api/go.mod @@ -13,14 +13,14 @@ require ( github.com/jonboulle/clockwork v0.4.0 github.com/russellhaering/gosaml2 v0.9.1 github.com/stretchr/testify v1.9.0 - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 - go.opentelemetry.io/otel v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 - go.opentelemetry.io/otel/metric v1.25.0 - go.opentelemetry.io/otel/sdk v1.25.0 - go.opentelemetry.io/otel/trace v1.25.0 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 + go.opentelemetry.io/otel v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 + go.opentelemetry.io/otel/metric v1.26.0 + go.opentelemetry.io/otel/sdk v1.26.0 + go.opentelemetry.io/otel/trace v1.26.0 go.opentelemetry.io/proto/otlp v1.2.0 golang.org/x/crypto v0.22.0 golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 diff --git a/api/go.sum b/api/go.sum index 634dc74fddb5d..405b5acff1fc1 100644 --- a/api/go.sum +++ b/api/go.sum @@ -903,22 +903,22 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 h1:zvpPXY7RfYAGSdYQLjp6zxdJNSYD/+FFoCTQN9IPxBs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0/go.mod h1:BMn8NB1vsxTljvuorms2hyOs8IBuuBEq0pl7ltOfy30= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8= -go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= -go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo= -go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= -go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= -go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo= -go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw= -go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= -go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 h1:A3SayB3rNyt+1S6qpI9mHPkeHTZbD7XILEqWnYZb2l0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0/go.mod h1:27iA5uvhuRNmalO+iEUdVn5ZMj2qy10Mm+XRIpRmyuU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= diff --git a/go.mod b/go.mod index 0a75967d72651..ad04668031d11 100644 --- a/go.mod +++ b/go.mod @@ -181,16 +181,16 @@ require ( go.etcd.io/etcd/api/v3 v3.5.13 go.etcd.io/etcd/client/v3 v3.5.13 go.mongodb.org/mongo-driver v1.14.0 - go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.50.0 - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 - go.opentelemetry.io/otel v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 - go.opentelemetry.io/otel/metric v1.25.0 // indirect - go.opentelemetry.io/otel/sdk v1.25.0 - go.opentelemetry.io/otel/trace v1.25.0 + go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.51.0 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 + go.opentelemetry.io/otel v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/otel/sdk v1.26.0 + go.opentelemetry.io/otel/trace v1.26.0 go.opentelemetry.io/proto/otlp v1.2.0 go.uber.org/zap v1.27.0 golang.org/x/crypto v0.22.0 diff --git a/go.sum b/go.sum index 87c7db6f4e2ed..615f81f6121c7 100644 --- a/go.sum +++ b/go.sum @@ -2326,26 +2326,26 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.50.0 h1:0zXBsTKPsly2MlyLYyra1GuL23fsY5RMsi6E2ZOe988= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.50.0/go.mod h1:Tztzncf+ezyOCjXz8zRjVL2agqyBxhymGnK6rqgoY5c= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 h1:zvpPXY7RfYAGSdYQLjp6zxdJNSYD/+FFoCTQN9IPxBs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0/go.mod h1:BMn8NB1vsxTljvuorms2hyOs8IBuuBEq0pl7ltOfy30= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8= -go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= -go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8= -go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= -go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= -go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo= -go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw= -go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= -go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= +go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.51.0 h1:FGMfzzxfkNkw+gvKJOeT8dSmBjgrSFh+ClLl+OMKPno= +go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.51.0/go.mod h1:hmHUXiKhyxbIhuNfG5ZTySq9HqqxJFNxaFOfXXvoMmQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 h1:A3SayB3rNyt+1S6qpI9mHPkeHTZbD7XILEqWnYZb2l0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0/go.mod h1:27iA5uvhuRNmalO+iEUdVn5ZMj2qy10Mm+XRIpRmyuU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index 01b6e7b7fc04f..90b99add7c6d0 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -155,6 +155,7 @@ require ( github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect github.com/google/go-attestation v0.5.1 // indirect github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/google/go-tpm v0.9.0 // indirect github.com/google/go-tpm-tools v0.4.4 // indirect github.com/google/go-tspi v0.3.0 // indirect @@ -174,7 +175,9 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.5 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/huandu/xstrings v1.4.0 // indirect @@ -251,6 +254,7 @@ require ( github.com/vulcand/predicate v1.2.0 // indirect github.com/weppos/publicsuffix-go v0.30.1-0.20230620154423-38c92ad2d5c6 // indirect github.com/x448/float16 v0.8.4 // indirect + github.com/xanzy/go-gitlab v0.103.0 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect @@ -260,15 +264,15 @@ require ( github.com/zmap/zlint/v3 v3.5.0 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 // indirect - go.opentelemetry.io/otel v1.25.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect - go.opentelemetry.io/otel/metric v1.25.0 // indirect - go.opentelemetry.io/otel/sdk v1.25.0 // indirect - go.opentelemetry.io/otel/trace v1.25.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 // indirect + go.opentelemetry.io/otel v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 // indirect + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/otel/sdk v1.26.0 // indirect + go.opentelemetry.io/otel/trace v1.26.0 // indirect go.opentelemetry.io/proto/otlp v1.2.0 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect golang.org/x/crypto v0.22.0 // indirect diff --git a/integrations/event-handler/go.sum b/integrations/event-handler/go.sum index 99569aa3ae4d2..4037bd34f6223 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -1084,6 +1084,7 @@ github.com/google/go-configfs-tsm v0.2.2/go.mod h1:EL1GTDFMb5PZQWDviGfZV9n87WeGT github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-github/v50 v50.2.0/go.mod h1:VBY8FB6yPIjrtKhozXv4FQupxKLS6H4m6xFZlT43q8Q= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-sev-guest v0.9.3 h1:GOJ+EipURdeWFl/YYdgcCxyPeMgQUWlI056iFkBD8UU= github.com/google/go-sev-guest v0.9.3/go.mod h1:hc1R4R6f8+NcJwITs0L90fYWTsBpd1Ix+Gur15sqHDs= @@ -1209,6 +1210,10 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= @@ -1216,6 +1221,8 @@ github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHh github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= +github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -1557,6 +1564,8 @@ github.com/weppos/publicsuffix-go v0.30.1-0.20230620154423-38c92ad2d5c6/go.mod h github.com/weppos/publicsuffix-go/publicsuffix/generator v0.0.0-20220927085643-dc0d00c92642/go.mod h1:GHfoeIdZLdZmLjMlzBftbTDntahTttUMWjxZwQJhULE= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xanzy/go-gitlab v0.103.0 h1:J9pTQoq0GsEFqzd6srCM1QfdfKAxSNz6mT6ntrpNF2w= +github.com/xanzy/go-gitlab v0.103.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= @@ -1615,24 +1624,24 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 h1:zvpPXY7RfYAGSdYQLjp6zxdJNSYD/+FFoCTQN9IPxBs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0/go.mod h1:BMn8NB1vsxTljvuorms2hyOs8IBuuBEq0pl7ltOfy30= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8= -go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= -go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8= -go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= -go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= -go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo= -go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw= -go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= -go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 h1:A3SayB3rNyt+1S6qpI9mHPkeHTZbD7XILEqWnYZb2l0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0/go.mod h1:27iA5uvhuRNmalO+iEUdVn5ZMj2qy10Mm+XRIpRmyuU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= diff --git a/integrations/terraform/go.mod b/integrations/terraform/go.mod index 5e248f03a6ac4..04bdf34156f00 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -220,6 +220,7 @@ require ( github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.4.10 // indirect + github.com/hashicorp/go-retryablehttp v0.7.5 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -354,6 +355,7 @@ require ( github.com/vulcand/predicate v1.2.0 // indirect github.com/weppos/publicsuffix-go v0.30.1-0.20230620154423-38c92ad2d5c6 // indirect github.com/x448/float16 v0.8.4 // indirect + github.com/xanzy/go-gitlab v0.103.0 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect @@ -372,16 +374,16 @@ require ( go.etcd.io/etcd/client/v3 v3.5.13 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.50.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 // indirect - go.opentelemetry.io/otel v1.25.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect - go.opentelemetry.io/otel/metric v1.25.0 // indirect - go.opentelemetry.io/otel/sdk v1.25.0 // indirect - go.opentelemetry.io/otel/trace v1.25.0 // indirect + go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.51.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 // indirect + go.opentelemetry.io/otel v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 // indirect + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/otel/sdk v1.26.0 // indirect + go.opentelemetry.io/otel/trace v1.26.0 // indirect go.opentelemetry.io/proto/otlp v1.2.0 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/atomic v1.11.0 // indirect diff --git a/integrations/terraform/go.sum b/integrations/terraform/go.sum index b3369d5c71afe..e3b11b53e666b 100644 --- a/integrations/terraform/go.sum +++ b/integrations/terraform/go.sum @@ -1425,6 +1425,7 @@ github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBM github.com/hashicorp/go-getter v1.5.3 h1:NF5+zOlQegim+w/EUhSLh6QhXHmZMEeHLQzllkQ3ROU= github.com/hashicorp/go-getter v1.5.3/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= @@ -1440,6 +1441,8 @@ github.com/hashicorp/go-plugin v1.3.0/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYt github.com/hashicorp/go-plugin v1.4.1/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= github.com/hashicorp/go-plugin v1.4.10 h1:xUbmA4jC6Dq163/fWcp8P3JuHilrHHMLNRxzGQJ9hNk= github.com/hashicorp/go-plugin v1.4.10/go.mod h1:6/1TEzT0eQznvI/gV2CM29DLSkAK/e58mUWKVsPaph0= +github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= +github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= @@ -2022,6 +2025,8 @@ github.com/weppos/publicsuffix-go v0.30.1-0.20230620154423-38c92ad2d5c6/go.mod h github.com/weppos/publicsuffix-go/publicsuffix/generator v0.0.0-20220927085643-dc0d00c92642/go.mod h1:GHfoeIdZLdZmLjMlzBftbTDntahTttUMWjxZwQJhULE= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xanzy/go-gitlab v0.103.0 h1:J9pTQoq0GsEFqzd6srCM1QfdfKAxSNz6mT6ntrpNF2w= +github.com/xanzy/go-gitlab v0.103.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -2101,26 +2106,26 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.50.0 h1:0zXBsTKPsly2MlyLYyra1GuL23fsY5RMsi6E2ZOe988= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.50.0/go.mod h1:Tztzncf+ezyOCjXz8zRjVL2agqyBxhymGnK6rqgoY5c= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0 h1:zvpPXY7RfYAGSdYQLjp6zxdJNSYD/+FFoCTQN9IPxBs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.50.0/go.mod h1:BMn8NB1vsxTljvuorms2hyOs8IBuuBEq0pl7ltOfy30= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8= -go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= -go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8= -go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= -go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= -go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo= -go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw= -go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= -go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= +go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.51.0 h1:FGMfzzxfkNkw+gvKJOeT8dSmBjgrSFh+ClLl+OMKPno= +go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.51.0/go.mod h1:hmHUXiKhyxbIhuNfG5ZTySq9HqqxJFNxaFOfXXvoMmQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 h1:A3SayB3rNyt+1S6qpI9mHPkeHTZbD7XILEqWnYZb2l0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0/go.mod h1:27iA5uvhuRNmalO+iEUdVn5ZMj2qy10Mm+XRIpRmyuU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= From ef3ee8ea4da59f97cfaa123fa0f62b751cd178e7 Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Mon, 29 Apr 2024 20:05:00 +0100 Subject: [PATCH 09/28] Add `database-tunnel` service to Machine ID reference (#40993) * Add `database-tunnel` service to Machine ID reference * Update docs/pages/machine-id/reference/configuration.mdx Co-authored-by: Paul Gottschling --------- Co-authored-by: Paul Gottschling --- .../machine-id/reference/configuration.mdx | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/pages/machine-id/reference/configuration.mdx b/docs/pages/machine-id/reference/configuration.mdx index b7fbe5004fca3..e292d0ab59559 100644 --- a/docs/pages/machine-id/reference/configuration.mdx +++ b/docs/pages/machine-id/reference/configuration.mdx @@ -389,6 +389,38 @@ svids: - 10.0.0.1 ``` +#### `database-tunnel` + +The `database-tunnel` service opens a listener for a service that tunnels +connections to a database server. + +The tunnel authenticates connections for the client, meaning that any +application which can connect to the listener will be able to connect to the +database as the specified user. For this reason, we heavily recommend using the +Unix socket listener type and configuring the permissions of the socket to +ensure that only the intended applications can connect. + +```yaml +# type specifies the type of the service. For the database tunnel service, this +# will always be `database-tunnel`. +type: database-tunnel +# listen specifies the address that the service should listen on. +# +# Two types of listener are supported: +# - TCP: `tcp://
:` +# - Unix socket: `unix:///` +listen: tcp://127.0.0.1:25432 +# service is the name of the database server, as configured in Teleport, that +# the service should open a tunnel to. +service: postgres-docker +# database is the name of the specific database on the specified database +# service. +database: postgres +# username is the name of the user on the specified database server to open a +# tunnel for. +username: postgres +``` + ### Destinations A destination is somewhere that `tbot` can read and write artifacts. From f584c753a12bfbeb63170bd95031cf45035c8f75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:14:54 +0000 Subject: [PATCH 10/28] Bump the go group with 17 updates (#40979) * Bump the go group with 17 updates Bumps the go group with 17 updates: | Package | From | To | | --- | --- | --- | | [github.com/ClickHouse/clickhouse-go/v2](https://github.com/ClickHouse/clickhouse-go) | `2.23.1` | `2.23.2` | | [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) | `1.51.26` | `1.51.30` | | [github.com/aws/aws-sdk-go-v2/service/ec2](https://github.com/aws/aws-sdk-go-v2) | `1.157.0` | `1.159.0` | | [github.com/aws/aws-sdk-go-v2/service/rds](https://github.com/aws/aws-sdk-go-v2) | `1.77.1` | `1.78.0` | | [github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus](https://github.com/grpc-ecosystem/go-grpc-middleware) | `1.0.0` | `1.0.1` | | [github.com/sashabaranov/go-openai](https://github.com/sashabaranov/go-openai) | `1.22.0` | `1.23.0` | | [go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws](https://github.com/open-telemetry/opentelemetry-go-contrib) | `0.50.0` | `0.51.0` | | [go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc](https://github.com/open-telemetry/opentelemetry-go-contrib) | `0.50.0` | `0.51.0` | | [go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp](https://github.com/open-telemetry/opentelemetry-go-contrib) | `0.50.0` | `0.51.0` | | [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go) | `1.25.0` | `1.26.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace](https://github.com/open-telemetry/opentelemetry-go) | `1.25.0` | `1.26.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go) | `1.25.0` | `1.26.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp](https://github.com/open-telemetry/opentelemetry-go) | `1.25.0` | `1.26.0` | | [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) | `1.25.0` | `1.26.0` | | [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go) | `1.25.0` | `1.26.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.176.0` | `0.176.1` | | [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) | `0.17.3` | `0.18.0` | Updates `github.com/ClickHouse/clickhouse-go/v2` from 2.23.1 to 2.23.2 - [Release notes](https://github.com/ClickHouse/clickhouse-go/releases) - [Changelog](https://github.com/ClickHouse/clickhouse-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/ClickHouse/clickhouse-go/compare/v2.23.1...v2.23.2) Updates `github.com/aws/aws-sdk-go` from 1.51.26 to 1.51.30 - [Release notes](https://github.com/aws/aws-sdk-go/releases) - [Commits](https://github.com/aws/aws-sdk-go/compare/v1.51.26...v1.51.30) Updates `github.com/aws/aws-sdk-go-v2/service/ec2` from 1.157.0 to 1.159.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ec2/v1.157.0...service/ec2/v1.159.0) Updates `github.com/aws/aws-sdk-go-v2/service/rds` from 1.77.1 to 1.78.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/service/ec2/v1.78.0/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/rds/v1.77.1...service/ec2/v1.78.0) Updates `github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus` from 1.0.0 to 1.0.1 - [Release notes](https://github.com/grpc-ecosystem/go-grpc-middleware/releases) - [Commits](https://github.com/grpc-ecosystem/go-grpc-middleware/compare/v1.0.0...providers/prometheus/v1.0.1) Updates `github.com/sashabaranov/go-openai` from 1.22.0 to 1.23.0 - [Release notes](https://github.com/sashabaranov/go-openai/releases) - [Commits](https://github.com/sashabaranov/go-openai/compare/v1.22.0...v1.23.0) Updates `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws` from 0.50.0 to 0.51.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.50.0...zpages/v0.51.0) Updates `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc` from 0.50.0 to 0.51.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.50.0...zpages/v0.51.0) Updates `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp` from 0.50.0 to 0.51.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.50.0...zpages/v0.51.0) Updates `go.opentelemetry.io/otel` from 1.25.0 to 1.26.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.25.0...v1.26.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace` from 1.25.0 to 1.26.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.25.0...v1.26.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.25.0 to 1.26.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.25.0...v1.26.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` from 1.25.0 to 1.26.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.25.0...v1.26.0) Updates `go.opentelemetry.io/otel/sdk` from 1.25.0 to 1.26.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.25.0...v1.26.0) Updates `go.opentelemetry.io/otel/trace` from 1.25.0 to 1.26.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.25.0...v1.26.0) Updates `google.golang.org/api` from 0.176.0 to 0.176.1 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.176.0...v0.176.1) Updates `sigs.k8s.io/controller-runtime` from 0.17.3 to 0.18.0 - [Release notes](https://github.com/kubernetes-sigs/controller-runtime/releases) - [Changelog](https://github.com/kubernetes-sigs/controller-runtime/blob/main/RELEASE.md) - [Commits](https://github.com/kubernetes-sigs/controller-runtime/compare/v0.17.3...v0.18.0) --- updated-dependencies: - dependency-name: github.com/ClickHouse/clickhouse-go/v2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/aws/aws-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/ec2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/rds dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/sashabaranov/go-openai dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/trace dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: sigs.k8s.io/controller-runtime dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go ... Signed-off-by: dependabot[bot] * Tidy all modules --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alan Parra --- go.mod | 32 +++++++------- go.sum | 72 +++++++++++++++---------------- integrations/event-handler/go.mod | 18 ++++---- integrations/event-handler/go.sum | 44 +++++++++---------- integrations/terraform/go.mod | 20 ++++----- integrations/terraform/go.sum | 48 ++++++++++----------- 6 files changed, 117 insertions(+), 117 deletions(-) diff --git a/go.mod b/go.mod index ad04668031d11..a3b36a635b0ed 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 github.com/ClickHouse/ch-go v0.61.5 - github.com/ClickHouse/clickhouse-go/v2 v2.23.1 + github.com/ClickHouse/clickhouse-go/v2 v2.23.2 github.com/DanielTitkov/go-adaptive-cards v0.2.2 github.com/HdrHistogram/hdrhistogram-go v1.1.2 github.com/Masterminds/sprig/v3 v3.2.3 @@ -40,7 +40,7 @@ require ( github.com/andybalholm/brotli v1.1.0 github.com/aquasecurity/libbpfgo v0.5.1-libbpf-1.2 github.com/armon/go-radix v1.0.0 - github.com/aws/aws-sdk-go v1.51.26 + github.com/aws/aws-sdk-go v1.51.30 github.com/aws/aws-sdk-go-v2 v1.26.1 github.com/aws/aws-sdk-go-v2/config v1.27.11 github.com/aws/aws-sdk-go-v2/credentials v1.17.11 @@ -49,13 +49,13 @@ require ( github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.15 github.com/aws/aws-sdk-go-v2/service/athena v1.40.4 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2 github.com/aws/aws-sdk-go-v2/service/ecs v1.41.7 github.com/aws/aws-sdk-go-v2/service/eks v1.42.1 github.com/aws/aws-sdk-go-v2/service/glue v1.80.0 github.com/aws/aws-sdk-go-v2/service/iam v1.32.0 - github.com/aws/aws-sdk-go-v2/service/rds v1.77.1 + github.com/aws/aws-sdk-go-v2/service/rds v1.78.0 github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6 github.com/aws/aws-sdk-go-v2/service/sns v1.29.4 @@ -117,7 +117,7 @@ require ( github.com/gravitational/teleport/api v0.0.0 github.com/gravitational/trace v1.4.0 github.com/gravitational/ttlmap v0.0.0-20171116003245-91fd36b9004c - github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 + github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 github.com/guptarohit/asciigraph v0.7.1 github.com/hashicorp/go-version v1.6.0 @@ -161,7 +161,7 @@ require ( github.com/redis/go-redis/v9 v9.5.1 // replaced github.com/russellhaering/gosaml2 v0.9.1 github.com/russellhaering/goxmldsig v1.4.0 - github.com/sashabaranov/go-openai v1.22.0 + github.com/sashabaranov/go-openai v1.23.0 github.com/schollz/progressbar/v3 v3.14.2 github.com/scim2/filter-parser/v2 v2.2.0 github.com/segmentio/parquet-go v0.0.0-20230712180008-5d42db8f0d47 @@ -203,7 +203,7 @@ require ( golang.org/x/term v0.19.0 golang.org/x/text v0.14.0 golang.org/x/time v0.5.0 - google.golang.org/api v0.176.0 + google.golang.org/api v0.176.1 google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 @@ -215,16 +215,16 @@ require ( gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 helm.sh/helm/v3 v3.14.4 - k8s.io/api v0.29.3 - k8s.io/apiextensions-apiserver v0.29.3 - k8s.io/apimachinery v0.29.3 - k8s.io/apiserver v0.29.3 + k8s.io/api v0.30.0 + k8s.io/apiextensions-apiserver v0.30.0 + k8s.io/apimachinery v0.30.0 + k8s.io/apiserver v0.30.0 k8s.io/cli-runtime v0.29.3 - k8s.io/client-go v0.29.3 - k8s.io/component-base v0.29.3 + k8s.io/client-go v0.30.0 + k8s.io/component-base v0.30.0 k8s.io/klog/v2 v2.120.1 k8s.io/kubectl v0.29.3 - sigs.k8s.io/controller-runtime v0.17.3 + sigs.k8s.io/controller-runtime v0.18.0 sigs.k8s.io/controller-tools v0.14.0 sigs.k8s.io/yaml v1.4.0 software.sslmate.com/src/go-pkcs12 v0.4.0 @@ -239,8 +239,8 @@ require ( require ( cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/auth v0.2.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.1 // indirect + cloud.google.com/go/auth v0.3.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/longrunning v0.5.6 // indirect cloud.google.com/go/pubsub v1.37.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect diff --git a/go.sum b/go.sum index 615f81f6121c7..7bd2e7b1d8c6d 100644 --- a/go.sum +++ b/go.sum @@ -99,10 +99,10 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI= -cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo= -cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag= -cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g= +cloud.google.com/go/auth v0.3.0 h1:PRyzEpGfx/Z9e8+lHsbkoUVXD0gnu4MNmm7Gp8TQNIs= +cloud.google.com/go/auth v0.3.0/go.mod h1:lBv6NKTWp8E3LPzmO1TbiiRKc4drLOfHsgmlH9ogv5w= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= @@ -717,8 +717,8 @@ github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/ch-go v0.61.5 h1:zwR8QbYI0tsMiEcze/uIMK+Tz1D3XZXLdNrlaOpeEI4= github.com/ClickHouse/ch-go v0.61.5/go.mod h1:s1LJW/F/LcFs5HJnuogFMta50kKDO0lf9zzfrbl0RQg= -github.com/ClickHouse/clickhouse-go/v2 v2.23.1 h1:h+wOAjtycWeR8gNh0pKip+P4/Lyp9x9Ol5KyqaIJDeM= -github.com/ClickHouse/clickhouse-go/v2 v2.23.1/go.mod h1:aNap51J1OM3yxQJRgM+AlP/MPkGBCL8A74uQThoQhR0= +github.com/ClickHouse/clickhouse-go/v2 v2.23.2 h1:+DAKPMnxLS7pduQZsrJc8OhdLS2L9MfDEJ2TS+hpYDM= +github.com/ClickHouse/clickhouse-go/v2 v2.23.2/go.mod h1:aNap51J1OM3yxQJRgM+AlP/MPkGBCL8A74uQThoQhR0= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/DanielTitkov/go-adaptive-cards v0.2.2 h1:tBFExyvsbCcrBJEvPaV3FW4gcAkwQjXFKiKEBrE7Yuw= @@ -820,8 +820,8 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:W github.com/aws/aws-sdk-go v1.44.256/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.49.12/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.26 h1:fYud+95lh9B89fAlRtgYpY8CcJF4T7JrWkLMq4GGCOo= -github.com/aws/aws-sdk-go v1.51.26/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.51.30 h1:RVFkjn9P0JMwnuZCVH0TlV5k9zepHzlbc4943eZMhGw= +github.com/aws/aws-sdk-go v1.51.30/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= @@ -857,8 +857,8 @@ github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHL github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.4 h1:hSwDD19/e01z3pfyx+hDeX5T/0Sn+ZEnnTO5pVWKWx8= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.4/go.mod h1:61CuGwE7jYn0g2gl7K3qoT4vCY59ZQEixkPu8PN5IrE= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 h1:BCNvChkZM4xqssztw+rFllaDnoS4Hm6bZ20XBj8RsI0= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 h1:DmmVmiLPlcntOcjWMRwDPMNx/wi2kAVrf2ZmSN5gkAg= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2 h1:TX5ZoNUPAV7lt6+K9E3av+8lLh3yQfiFY78I0NDBMrQ= github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2/go.mod h1:d6tV12vujPlm/akeG0CTwZtCeTWSBWNobw0uZ9m/Rys= github.com/aws/aws-sdk-go-v2/service/ecr v1.27.3 h1:gfgt0D8MGL3gHrJPEv4rcWptA4Nz7uYn25ls8lLiANw= @@ -886,8 +886,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ= github.com/aws/aws-sdk-go-v2/service/kms v1.30.0 h1:yS0JkEdV6h9JOo8sy2JSpjX+i7vsKifU8SIeHrqiDhU= github.com/aws/aws-sdk-go-v2/service/kms v1.30.0/go.mod h1:+I8VUUSVD4p5ISQtzpgSva4I8cJ4SQ4b1dcBcof7O+g= -github.com/aws/aws-sdk-go-v2/service/rds v1.77.1 h1:RatrfyDgfeXDmYw1gq5IR5tXXf1C9/enPtXWXn5kufE= -github.com/aws/aws-sdk-go-v2/service/rds v1.77.1/go.mod h1:Rw15qGaGWu3jO0dOz7JyvdOEjgae//YrJxVWLYGynvg= +github.com/aws/aws-sdk-go-v2/service/rds v1.78.0 h1:EfurrcA19HaB9gZYd157DiozoPfkX2CH5/QnDZqNFrY= +github.com/aws/aws-sdk-go-v2/service/rds v1.78.0/go.mod h1:Rw15qGaGWu3jO0dOz7JyvdOEjgae//YrJxVWLYGynvg= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6 h1:TIOEjw0i2yyhmhRry3Oeu9YtiiHWISZ6j/irS1W3gX4= @@ -1539,8 +1539,8 @@ github.com/gravitational/ttlmap v0.0.0-20171116003245-91fd36b9004c/go.mod h1:erK github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 h1:f4tggROQKKcnh4eItay6z/HbHLqghBxS8g7pyMhmDio= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0/go.mod h1:hKAkSgNkL0FII46ZkJcpVEAai4KV+swlIWCKfekd1pA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= @@ -1947,14 +1947,14 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.14.0 h1:vSmGj2Z5YPb9JwCWT6z6ihcUvDhuXLc3sJiqd3jMKAY= -github.com/onsi/ginkgo/v2 v2.14.0/go.mod h1:JkUdW7JkN0V6rFvsHcJ478egV3XH9NxpD27Hal/PhZw= +github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8= +github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= -github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk= +github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/open-policy-agent/opa v0.63.0 h1:ztNNste1v8kH0/vJMJNquE45lRvqwrM5mY9Ctr9xIXw= github.com/open-policy-agent/opa v0.63.0/go.mod h1:9VQPqEfoB2N//AToTxzZ1pVTVPUoF2Mhd64szzjWPpU= @@ -2099,8 +2099,8 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sashabaranov/go-openai v1.22.0 h1:bjYkELQCbOBMW9B7zi/KA5L4syPfn/3qRvUoyV49Fvs= -github.com/sashabaranov/go-openai v1.22.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= +github.com/sashabaranov/go-openai v1.23.0 h1:KYW97r5yc35PI2MxeLZ3OofecB/6H+yxvSNqiT9u8is= +github.com/sashabaranov/go-openai v1.23.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= github.com/sassoftware/relic v7.2.1+incompatible h1:Pwyh1F3I0r4clFJXkSI8bOyJINGqpgjJU3DYAZeI05A= github.com/sassoftware/relic v7.2.1+incompatible/go.mod h1:CWfAxv73/iLZ17rbyhIEq3K9hs5w6FpNMdUT//qR+zk= github.com/sassoftware/relic/v7 v7.6.2 h1:rS44Lbv9G9eXsukknS4mSjIAuuX+lMq/FnStgmZlUv4= @@ -2912,8 +2912,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.176.0 h1:dHj1/yv5Dm/eQTXiP9hNCRT3xzJHWXeNdRq29XbMxoE= -google.golang.org/api v0.176.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= +google.golang.org/api v0.176.1 h1:DJSXnV6An+NhJ1J+GWtoF2nHEuqB1VNoTfnIbjNvwD4= +google.golang.org/api v0.176.1/go.mod h1:j2MaSDYcvYV1lkZ1+SMW4IeF90SrEyFA+tluDYWRrFg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -3183,20 +3183,20 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw= -k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80= -k8s.io/apiextensions-apiserver v0.29.3 h1:9HF+EtZaVpFjStakF4yVufnXGPRppWFEQ87qnO91YeI= -k8s.io/apiextensions-apiserver v0.29.3/go.mod h1:po0XiY5scnpJfFizNGo6puNU6Fq6D70UJY2Cb2KwAVc= -k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU= -k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU= -k8s.io/apiserver v0.29.3 h1:xR7ELlJ/BZSr2n4CnD3lfA4gzFivh0wwfNfz9L0WZcE= -k8s.io/apiserver v0.29.3/go.mod h1:hrvXlwfRulbMbBgmWRQlFru2b/JySDpmzvQwwk4GUOs= +k8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA= +k8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE= +k8s.io/apiextensions-apiserver v0.30.0 h1:jcZFKMqnICJfRxTgnC4E+Hpcq8UEhT8B2lhBcQ+6uAs= +k8s.io/apiextensions-apiserver v0.30.0/go.mod h1:N9ogQFGcrbWqAY9p2mUAL5mGxsLqwgtUce127VtRX5Y= +k8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA= +k8s.io/apimachinery v0.30.0/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apiserver v0.30.0 h1:QCec+U72tMQ+9tR6A0sMBB5Vh6ImCEkoKkTDRABWq6M= +k8s.io/apiserver v0.30.0/go.mod h1:smOIBq8t0MbKZi7O7SyIpjPsiKJ8qa+llcFCluKyqiY= k8s.io/cli-runtime v0.29.3 h1:r68rephmmytoywkw2MyJ+CxjpasJDQY7AGc3XY2iv1k= k8s.io/cli-runtime v0.29.3/go.mod h1:aqVUsk86/RhaGJwDhHXH0jcdqBrgdF3bZWk4Z9D4mkM= -k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= -k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= -k8s.io/component-base v0.29.3 h1:Oq9/nddUxlnrCuuR2K/jp6aflVvc0uDvxMzAWxnGzAo= -k8s.io/component-base v0.29.3/go.mod h1:Yuj33XXjuOk2BAaHsIGHhCKZQAgYKhqIxIjIr2UXYio= +k8s.io/client-go v0.30.0 h1:sB1AGGlhY/o7KCyCEQ0bPWzYDL0pwOZO4vAtTSh/gJQ= +k8s.io/client-go v0.30.0/go.mod h1:g7li5O5256qe6TYdAMyX/otJqMhIiGgTapdLchhmOaY= +k8s.io/component-base v0.30.0 h1:cj6bp38g0ainlfYtaOQuRELh5KSYjhKxM+io7AUIk4o= +k8s.io/component-base v0.30.0/go.mod h1:V9x/0ePFNaKeKYA3bOvIbrNoluTSG+fSJKjLdjOoeXQ= k8s.io/component-helpers v0.29.3 h1:1dqZswuZgT2ZMixYeORyCUOAApXxgsvjVSgfoUT+P4o= k8s.io/component-helpers v0.29.3/go.mod h1:yiDqbRQrnQY+sPju/bL7EkwDJb6LVOots53uZNMZBos= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= @@ -3253,8 +3253,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk= -sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY= +sigs.k8s.io/controller-runtime v0.18.0 h1:Z7jKuX784TQSUL1TIyeuF7j8KXZ4RtSX0YgtjKcSTME= +sigs.k8s.io/controller-runtime v0.18.0/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw= sigs.k8s.io/controller-tools v0.14.0 h1:rnNoCC5wSXlrNoBKKzL70LNJKIQKEzT6lloG6/LF73A= sigs.k8s.io/controller-tools v0.14.0/go.mod h1:TV7uOtNNnnR72SpzhStvPkoS/U5ir0nMudrkrC4M9Sc= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index 90b99add7c6d0..d11685c448985 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -24,8 +24,8 @@ require ( ) require ( - cloud.google.com/go/auth v0.2.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.1 // indirect + cloud.google.com/go/auth v0.3.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute v1.25.1 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/container v1.35.0 // indirect @@ -61,7 +61,7 @@ require ( github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go v1.51.26 // indirect + github.com/aws/aws-sdk-go v1.51.30 // indirect github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect github.com/aws/aws-sdk-go-v2/config v1.27.11 // indirect @@ -73,7 +73,7 @@ require ( github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/service/athena v1.40.4 // indirect - github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 // indirect + github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 // indirect github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2 // indirect github.com/aws/aws-sdk-go-v2/service/ecs v1.41.7 // indirect github.com/aws/aws-sdk-go-v2/service/eks v1.42.1 // indirect @@ -83,7 +83,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect - github.com/aws/aws-sdk-go-v2/service/rds v1.77.1 // indirect + github.com/aws/aws-sdk-go-v2/service/rds v1.78.0 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect @@ -171,7 +171,7 @@ require ( github.com/gravitational/oxy v0.0.0-20231219172753-f855322f2a6c // indirect github.com/gravitational/roundtrip v1.0.2 // indirect github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -240,7 +240,7 @@ require ( github.com/russellhaering/gosaml2 v0.9.1 // indirect github.com/russellhaering/goxmldsig v1.4.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sashabaranov/go-openai v1.22.0 // indirect + github.com/sashabaranov/go-openai v1.23.0 // indirect github.com/scim2/filter-parser/v2 v2.2.0 // indirect github.com/sethvargo/go-diceware v0.3.0 // indirect github.com/shopspring/decimal v1.4.0 // indirect @@ -283,7 +283,7 @@ require ( golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/api v0.176.0 // indirect + google.golang.org/api v0.176.1 // indirect google.golang.org/genproto v0.0.0-20240325164216-beb30f47624b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240325164216-beb30f47624b // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect @@ -307,7 +307,7 @@ require ( k8s.io/kubectl v0.30.0 // indirect k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect oras.land/oras-go v1.2.5 // indirect - sigs.k8s.io/controller-runtime v0.17.3 // indirect + sigs.k8s.io/controller-runtime v0.18.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect sigs.k8s.io/kustomize/kyaml v0.16.0 // indirect diff --git a/integrations/event-handler/go.sum b/integrations/event-handler/go.sum index 4037bd34f6223..dd9efa4b92339 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -99,10 +99,10 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI= -cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo= -cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag= -cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g= +cloud.google.com/go/auth v0.3.0 h1:PRyzEpGfx/Z9e8+lHsbkoUVXD0gnu4MNmm7Gp8TQNIs= +cloud.google.com/go/auth v0.3.0/go.mod h1:lBv6NKTWp8E3LPzmO1TbiiRKc4drLOfHsgmlH9ogv5w= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= @@ -713,8 +713,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-sdk-go v1.51.26 h1:fYud+95lh9B89fAlRtgYpY8CcJF4T7JrWkLMq4GGCOo= -github.com/aws/aws-sdk-go v1.51.26/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.51.30 h1:RVFkjn9P0JMwnuZCVH0TlV5k9zepHzlbc4943eZMhGw= +github.com/aws/aws-sdk-go v1.51.30/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to= @@ -737,8 +737,8 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz1 github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0= github.com/aws/aws-sdk-go-v2/service/athena v1.40.4 h1:tiHIjFXSyb5DbNfnu3ql2r86s6llLdzwWAVJkPgw/I0= github.com/aws/aws-sdk-go-v2/service/athena v1.40.4/go.mod h1:6OHesqDfYPNzYI+VaXtmylYLyppuUy9SwRk4CH/pQA4= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 h1:BCNvChkZM4xqssztw+rFllaDnoS4Hm6bZ20XBj8RsI0= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 h1:DmmVmiLPlcntOcjWMRwDPMNx/wi2kAVrf2ZmSN5gkAg= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2 h1:TX5ZoNUPAV7lt6+K9E3av+8lLh3yQfiFY78I0NDBMrQ= github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2/go.mod h1:d6tV12vujPlm/akeG0CTwZtCeTWSBWNobw0uZ9m/Rys= github.com/aws/aws-sdk-go-v2/service/ecs v1.41.7 h1:aFdgmJ8G385PVC9mp8b9roGGHU/XbrKEQTbzl6V0GbE= @@ -757,8 +757,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/g github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ= -github.com/aws/aws-sdk-go-v2/service/rds v1.77.1 h1:RatrfyDgfeXDmYw1gq5IR5tXXf1C9/enPtXWXn5kufE= -github.com/aws/aws-sdk-go-v2/service/rds v1.77.1/go.mod h1:Rw15qGaGWu3jO0dOz7JyvdOEjgae//YrJxVWLYGynvg= +github.com/aws/aws-sdk-go-v2/service/rds v1.78.0 h1:EfurrcA19HaB9gZYd157DiozoPfkX2CH5/QnDZqNFrY= +github.com/aws/aws-sdk-go-v2/service/rds v1.78.0/go.mod h1:Rw15qGaGWu3jO0dOz7JyvdOEjgae//YrJxVWLYGynvg= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o= github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= @@ -1193,8 +1193,8 @@ github.com/gravitational/trace v1.4.0/go.mod h1:g79NZzwCjWS/VVubYowaFAQsTjVTohGi github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 h1:f4tggROQKKcnh4eItay6z/HbHLqghBxS8g7pyMhmDio= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0/go.mod h1:hKAkSgNkL0FII46ZkJcpVEAai4KV+swlIWCKfekd1pA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= @@ -1409,10 +1409,10 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/okta/okta-sdk-golang/v2 v2.20.0 h1:EDKM+uOPfihOMNwgHMdno+NAsIfyXkVnoFAYVPay0YU= github.com/okta/okta-sdk-golang/v2 v2.20.0/go.mod h1:FMy5hN5G8Rd/VoS0XrfyPPhIfOVo78ZK7lvwiQRS2+U= -github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= -github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= -github.com/onsi/gomega v1.31.0 h1:54UJxxj6cPInHS3a35wm6BK/F9nHYueZ1NVujHDrnXE= -github.com/onsi/gomega v1.31.0/go.mod h1:DW9aCi7U6Yi40wNVAvT6kzFnEVEI5n3DloYBiKiT6zk= +github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8= +github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= +github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk= +github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -1500,8 +1500,8 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sashabaranov/go-openai v1.22.0 h1:bjYkELQCbOBMW9B7zi/KA5L4syPfn/3qRvUoyV49Fvs= -github.com/sashabaranov/go-openai v1.22.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= +github.com/sashabaranov/go-openai v1.23.0 h1:KYW97r5yc35PI2MxeLZ3OofecB/6H+yxvSNqiT9u8is= +github.com/sashabaranov/go-openai v1.23.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= github.com/scim2/filter-parser/v2 v2.2.0 h1:QGadEcsmypxg8gYChRSM2j1edLyE/2j72j+hdmI4BJM= github.com/scim2/filter-parser/v2 v2.2.0/go.mod h1:jWnkDToqX/Y0ugz0P5VvpVEUKcWcyHHj+X+je9ce5JA= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -2141,8 +2141,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.176.0 h1:dHj1/yv5Dm/eQTXiP9hNCRT3xzJHWXeNdRq29XbMxoE= -google.golang.org/api v0.176.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= +google.golang.org/api v0.176.1 h1:DJSXnV6An+NhJ1J+GWtoF2nHEuqB1VNoTfnIbjNvwD4= +google.golang.org/api v0.176.1/go.mod h1:j2MaSDYcvYV1lkZ1+SMW4IeF90SrEyFA+tluDYWRrFg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -2458,8 +2458,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk= -sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY= +sigs.k8s.io/controller-runtime v0.18.0 h1:Z7jKuX784TQSUL1TIyeuF7j8KXZ4RtSX0YgtjKcSTME= +sigs.k8s.io/controller-runtime v0.18.0/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/kyaml v0.16.0 h1:6J33uKSoATlKZH16unr2XOhDI+otoe2sR3M8PDzW3K0= diff --git a/integrations/terraform/go.mod b/integrations/terraform/go.mod index 04bdf34156f00..d9eccd0d41425 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -24,8 +24,8 @@ require ( require ( cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/auth v0.2.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.1 // indirect + cloud.google.com/go/auth v0.3.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute v1.25.1 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/container v1.35.0 // indirect @@ -56,7 +56,7 @@ require ( github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/ClickHouse/ch-go v0.61.5 // indirect - github.com/ClickHouse/clickhouse-go/v2 v2.23.1 // indirect + github.com/ClickHouse/clickhouse-go/v2 v2.23.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect @@ -76,7 +76,7 @@ require ( github.com/aquasecurity/libbpfgo v0.5.1-libbpf-1.2 // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go v1.51.26 // indirect + github.com/aws/aws-sdk-go v1.51.30 // indirect github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect github.com/aws/aws-sdk-go-v2/config v1.27.11 // indirect @@ -89,7 +89,7 @@ require ( github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/service/athena v1.40.4 // indirect github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 // indirect - github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 // indirect + github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 // indirect github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2 // indirect github.com/aws/aws-sdk-go-v2/service/ecs v1.41.7 // indirect github.com/aws/aws-sdk-go-v2/service/eks v1.42.1 // indirect @@ -100,7 +100,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect - github.com/aws/aws-sdk-go-v2/service/rds v1.77.1 // indirect + github.com/aws/aws-sdk-go-v2/service/rds v1.78.0 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 // indirect github.com/aws/aws-sdk-go-v2/service/sns v1.29.4 // indirect github.com/aws/aws-sdk-go-v2/service/sqs v1.31.4 // indirect @@ -209,7 +209,7 @@ require ( github.com/gravitational/roundtrip v1.0.2 // indirect github.com/gravitational/ttlmap v0.0.0-20171116003245-91fd36b9004c // indirect github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect @@ -332,7 +332,7 @@ require ( github.com/russellhaering/gosaml2 v0.9.1 // indirect github.com/russellhaering/goxmldsig v1.4.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sashabaranov/go-openai v1.22.0 // indirect + github.com/sashabaranov/go-openai v1.23.0 // indirect github.com/schollz/progressbar/v3 v3.14.2 // indirect github.com/scim2/filter-parser/v2 v2.2.0 // indirect github.com/segmentio/asm v1.2.0 // indirect @@ -400,7 +400,7 @@ require ( golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.19.0 // indirect - google.golang.org/api v0.176.0 // indirect + google.golang.org/api v0.176.1 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240325164216-beb30f47624b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240325164216-beb30f47624b // indirect @@ -426,7 +426,7 @@ require ( k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect mvdan.cc/sh/v3 v3.7.0 // indirect oras.land/oras-go v1.2.5 // indirect - sigs.k8s.io/controller-runtime v0.17.3 // indirect + sigs.k8s.io/controller-runtime v0.18.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect sigs.k8s.io/kustomize/kyaml v0.16.0 // indirect diff --git a/integrations/terraform/go.sum b/integrations/terraform/go.sum index e3b11b53e666b..48881fece16e2 100644 --- a/integrations/terraform/go.sum +++ b/integrations/terraform/go.sum @@ -100,10 +100,10 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI= -cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo= -cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag= -cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g= +cloud.google.com/go/auth v0.3.0 h1:PRyzEpGfx/Z9e8+lHsbkoUVXD0gnu4MNmm7Gp8TQNIs= +cloud.google.com/go/auth v0.3.0/go.mod h1:lBv6NKTWp8E3LPzmO1TbiiRKc4drLOfHsgmlH9ogv5w= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= @@ -686,8 +686,8 @@ github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/ch-go v0.61.5 h1:zwR8QbYI0tsMiEcze/uIMK+Tz1D3XZXLdNrlaOpeEI4= github.com/ClickHouse/ch-go v0.61.5/go.mod h1:s1LJW/F/LcFs5HJnuogFMta50kKDO0lf9zzfrbl0RQg= -github.com/ClickHouse/clickhouse-go/v2 v2.23.1 h1:h+wOAjtycWeR8gNh0pKip+P4/Lyp9x9Ol5KyqaIJDeM= -github.com/ClickHouse/clickhouse-go/v2 v2.23.1/go.mod h1:aNap51J1OM3yxQJRgM+AlP/MPkGBCL8A74uQThoQhR0= +github.com/ClickHouse/clickhouse-go/v2 v2.23.2 h1:+DAKPMnxLS7pduQZsrJc8OhdLS2L9MfDEJ2TS+hpYDM= +github.com/ClickHouse/clickhouse-go/v2 v2.23.2/go.mod h1:aNap51J1OM3yxQJRgM+AlP/MPkGBCL8A74uQThoQhR0= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU= @@ -779,8 +779,8 @@ github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3A github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.49.12/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.26 h1:fYud+95lh9B89fAlRtgYpY8CcJF4T7JrWkLMq4GGCOo= -github.com/aws/aws-sdk-go v1.51.26/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.51.30 h1:RVFkjn9P0JMwnuZCVH0TlV5k9zepHzlbc4943eZMhGw= +github.com/aws/aws-sdk-go v1.51.30/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= @@ -812,8 +812,8 @@ github.com/aws/aws-sdk-go-v2/service/athena v1.40.4 h1:tiHIjFXSyb5DbNfnu3ql2r86s github.com/aws/aws-sdk-go-v2/service/athena v1.40.4/go.mod h1:6OHesqDfYPNzYI+VaXtmylYLyppuUy9SwRk4CH/pQA4= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0 h1:BCNvChkZM4xqssztw+rFllaDnoS4Hm6bZ20XBj8RsI0= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.157.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0 h1:DmmVmiLPlcntOcjWMRwDPMNx/wi2kAVrf2ZmSN5gkAg= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.159.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2 h1:TX5ZoNUPAV7lt6+K9E3av+8lLh3yQfiFY78I0NDBMrQ= github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.23.2/go.mod h1:d6tV12vujPlm/akeG0CTwZtCeTWSBWNobw0uZ9m/Rys= github.com/aws/aws-sdk-go-v2/service/ecs v1.41.7 h1:aFdgmJ8G385PVC9mp8b9roGGHU/XbrKEQTbzl6V0GbE= @@ -835,8 +835,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/g github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ= -github.com/aws/aws-sdk-go-v2/service/rds v1.77.1 h1:RatrfyDgfeXDmYw1gq5IR5tXXf1C9/enPtXWXn5kufE= -github.com/aws/aws-sdk-go-v2/service/rds v1.77.1/go.mod h1:Rw15qGaGWu3jO0dOz7JyvdOEjgae//YrJxVWLYGynvg= +github.com/aws/aws-sdk-go-v2/service/rds v1.78.0 h1:EfurrcA19HaB9gZYd157DiozoPfkX2CH5/QnDZqNFrY= +github.com/aws/aws-sdk-go-v2/service/rds v1.78.0/go.mod h1:Rw15qGaGWu3jO0dOz7JyvdOEjgae//YrJxVWLYGynvg= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o= github.com/aws/aws-sdk-go-v2/service/sns v1.29.4 h1:VhW/J21SPH9bNmk1IYdZtzqA6//N2PB5Py5RexNmLVg= @@ -1394,8 +1394,8 @@ github.com/gravitational/ttlmap v0.0.0-20171116003245-91fd36b9004c/go.mod h1:erK github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 h1:f4tggROQKKcnh4eItay6z/HbHLqghBxS8g7pyMhmDio= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0/go.mod h1:hKAkSgNkL0FII46ZkJcpVEAai4KV+swlIWCKfekd1pA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= @@ -1796,10 +1796,10 @@ github.com/okta/okta-sdk-golang/v2 v2.20.0 h1:EDKM+uOPfihOMNwgHMdno+NAsIfyXkVnoF github.com/okta/okta-sdk-golang/v2 v2.20.0/go.mod h1:FMy5hN5G8Rd/VoS0XrfyPPhIfOVo78ZK7lvwiQRS2+U= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= -github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= -github.com/onsi/gomega v1.31.0 h1:54UJxxj6cPInHS3a35wm6BK/F9nHYueZ1NVujHDrnXE= -github.com/onsi/gomega v1.31.0/go.mod h1:DW9aCi7U6Yi40wNVAvT6kzFnEVEI5n3DloYBiKiT6zk= +github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8= +github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= +github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk= +github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -1924,8 +1924,8 @@ github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sashabaranov/go-openai v1.22.0 h1:bjYkELQCbOBMW9B7zi/KA5L4syPfn/3qRvUoyV49Fvs= -github.com/sashabaranov/go-openai v1.22.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= +github.com/sashabaranov/go-openai v1.23.0 h1:KYW97r5yc35PI2MxeLZ3OofecB/6H+yxvSNqiT9u8is= +github.com/sashabaranov/go-openai v1.23.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/schollz/progressbar/v3 v3.14.2 h1:EducH6uNLIWsr560zSV1KrTeUb/wZGAHqyMFIEa99ks= github.com/schollz/progressbar/v3 v3.14.2/go.mod h1:aQAZQnhF4JGFtRJiw/eobaXpsqpVQAftEQ+hLGXaRc4= @@ -2686,8 +2686,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.176.0 h1:dHj1/yv5Dm/eQTXiP9hNCRT3xzJHWXeNdRq29XbMxoE= -google.golang.org/api v0.176.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= +google.golang.org/api v0.176.1 h1:DJSXnV6An+NhJ1J+GWtoF2nHEuqB1VNoTfnIbjNvwD4= +google.golang.org/api v0.176.1/go.mod h1:j2MaSDYcvYV1lkZ1+SMW4IeF90SrEyFA+tluDYWRrFg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -3022,8 +3022,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk= -sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY= +sigs.k8s.io/controller-runtime v0.18.0 h1:Z7jKuX784TQSUL1TIyeuF7j8KXZ4RtSX0YgtjKcSTME= +sigs.k8s.io/controller-runtime v0.18.0/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/kyaml v0.16.0 h1:6J33uKSoATlKZH16unr2XOhDI+otoe2sR3M8PDzW3K0= From f2a51ed92950ab956efc08bc500e846608e05db4 Mon Sep 17 00:00:00 2001 From: Isaiah Becker-Mayer Date: Mon, 29 Apr 2024 15:14:03 -0500 Subject: [PATCH 11/28] Resize (#39819) * Resize * ??? * ??? * Fixes to compile * Updates to latest IronRDP with dvc fix, cleans up some of the debug code * Hooks up resize listener on the client and sends changes as ClientScreenSpecs to the backend. Currently just gets logged in the WDS * Handles the new DeactivateAll ProcessorOutput * hooks up client_write_screen_resize * Renames tdp Connection Initialized to Connection Activated This message is now used both after the connection is first established and after the connection executes a Deactivation-Reactivation Sequence. This fits snugly in to our existing message flow and ensures that the fast path processor is updated appropriately whenever a Deactivation-Reactivation Sequence is executed due to a resize event. * Switch monitor orientation based on width/height * remove superfluous canvas size sync * Updates to the most up-to-date hash for IronRDP (not merged to master). Screen resize works in this commit, though its still the case that if you do so before the channel is announced by the rdp server, it will end the session * Updates to the most recent hash for IronRDP feat/dynamic-resize * Adds a mechanism to withhold sending resize requests to the RDP server until we're alerted by a new callback mechanism of the DisplayControlClient that the server has sent us its capabilities. This prevents an error where we send a resize before this event, which results either in an RDP error (if the channel is not opened) or a dropped event (if the server has not sent its capabilities yet). * Refactoring after update to the tip of https://github.com/Devolutions/IronRDP/pull/424 * Adds windowOnResize to story * adds Determine Toolchain Versions and cache paths and Print versions steps to os-compatibility-test.yaml * fixes debug log formatting * Updates to local IronRDP and later IronRDP api * updates to IronRDP latest rev on https://github.com/Devolutions/IronRDP/pull/430 * reverting mistaken changes * throttle -> debounce and naming changes * js renamings * updates to IronRDP master --------- Co-authored-by: Przemko Robakowski --- Cargo.lock | 42 ++- Cargo.toml | 25 +- lib/srv/desktop/rdp/rdpclient/Cargo.toml | 4 + lib/srv/desktop/rdp/rdpclient/client.go | 21 +- lib/srv/desktop/rdp/rdpclient/src/client.rs | 322 +++++++++++++++--- lib/srv/desktop/rdp/rdpclient/src/cliprdr.rs | 23 +- lib/srv/desktop/rdp/rdpclient/src/lib.rs | 18 +- lib/srv/desktop/tdp/proto.go | 18 +- rfd/0037-desktop-access-protocol.md | 7 +- .../DesktopSession/DesktopSession.story.tsx | 2 + .../src/DesktopSession/DesktopSession.tsx | 2 + .../src/DesktopSession/useTdpClientCanvas.tsx | 40 +-- .../TdpClientCanvas/TdpClientCanvas.tsx | 14 + web/packages/teleport/src/ironrdp/src/lib.rs | 9 +- web/packages/teleport/src/lib/tdp/client.ts | 26 +- web/packages/teleport/src/lib/tdp/codec.ts | 10 +- .../teleport/src/lib/tdp/playerClient.ts | 2 +- 17 files changed, 450 insertions(+), 135 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85c8fd07a4260..993fcebe49e9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1225,7 +1225,7 @@ dependencies = [ [[package]] name = "ironrdp-async" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "bytes", "ironrdp-connector", @@ -1236,7 +1236,7 @@ dependencies = [ [[package]] name = "ironrdp-cliprdr" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "bitflags 2.5.0", "ironrdp-pdu", @@ -1248,7 +1248,7 @@ dependencies = [ [[package]] name = "ironrdp-connector" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "ironrdp-error", "ironrdp-pdu", @@ -1260,10 +1260,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "ironrdp-displaycontrol" +version = "0.1.0" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" +dependencies = [ + "ironrdp-dvc", + "ironrdp-pdu", + "ironrdp-svc", + "tracing", +] + [[package]] name = "ironrdp-dvc" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "ironrdp-pdu", "ironrdp-svc", @@ -1274,12 +1285,12 @@ dependencies = [ [[package]] name = "ironrdp-error" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" [[package]] name = "ironrdp-graphics" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "bit_field", "bitflags 2.5.0", @@ -1296,7 +1307,7 @@ dependencies = [ [[package]] name = "ironrdp-pdu" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "bit_field", "bitflags 2.5.0", @@ -1318,7 +1329,7 @@ dependencies = [ [[package]] name = "ironrdp-rdpdr" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "bitflags 2.5.0", "ironrdp-error", @@ -1330,7 +1341,7 @@ dependencies = [ [[package]] name = "ironrdp-rdpsnd" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "ironrdp-pdu", "ironrdp-svc", @@ -1339,9 +1350,10 @@ dependencies = [ [[package]] name = "ironrdp-session" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "ironrdp-connector", + "ironrdp-displaycontrol", "ironrdp-dvc", "ironrdp-error", "ironrdp-graphics", @@ -1353,7 +1365,7 @@ dependencies = [ [[package]] name = "ironrdp-svc" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "bitflags 2.5.0", "ironrdp-pdu", @@ -1362,7 +1374,7 @@ dependencies = [ [[package]] name = "ironrdp-tls" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "tokio", "tokio-rustls", @@ -1372,7 +1384,7 @@ dependencies = [ [[package]] name = "ironrdp-tokio" version = "0.1.0" -source = "git+https://github.com/Devolutions/IronRDP?rev=49dab7d8df4bd785bf17fce97ac02beaba0b0275#49dab7d8df4bd785bf17fce97ac02beaba0b0275" +source = "git+https://github.com/Devolutions/IronRDP?rev=fd105e4b56647ab2f54aa23954aec4aaeef118e2#fd105e4b56647ab2f54aa23954aec4aaeef118e2" dependencies = [ "bytes", "ironrdp-async", @@ -2025,6 +2037,8 @@ dependencies = [ "env_logger", "ironrdp-cliprdr", "ironrdp-connector", + "ironrdp-displaycontrol", + "ironrdp-dvc", "ironrdp-pdu", "ironrdp-rdpdr", "ironrdp-rdpsnd", @@ -2044,6 +2058,8 @@ dependencies = [ "tempfile", "tokio", "tokio-boring", + "tracing", + "tracing-subscriber", "utf16string", "uuid", ] diff --git a/Cargo.toml b/Cargo.toml index b35823cfae04d..9577b8bfd8728 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,16 +23,15 @@ codegen-units = 1 [workspace.dependencies] # Note: To use a local IronRDP repository as a crate (for example, ironrdp-cliprdr), define the dependency as follows: # ironrdp-cliprdr = { path = "/path/to/local/IronRDP/crates/ironrdp-cliprdr" } -# This rev hash corresponds to https://github.com/Devolutions/IronRDP/pull/436. It is being merged while that PR is -# still open in IronRDP in order to get these changes into a release, however it should be updated once that PR is -# merged. In the meantime, no other IronRDP hash's (without these changes) should be used. -ironrdp-cliprdr = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-connector = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-graphics = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-pdu = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-rdpdr = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-rdpsnd = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-session = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-svc = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } -ironrdp-tls = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275", features = ["rustls"]} -ironrdp-tokio = { git = "https://github.com/Devolutions/IronRDP", rev = "49dab7d8df4bd785bf17fce97ac02beaba0b0275" } +ironrdp-cliprdr = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-connector = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-displaycontrol = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-dvc = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-graphics = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-pdu = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-rdpdr = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-rdpsnd = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-session = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-svc = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } +ironrdp-tls = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2", features = ["rustls"]} +ironrdp-tokio = { git = "https://github.com/Devolutions/IronRDP", rev = "fd105e4b56647ab2f54aa23954aec4aaeef118e2" } diff --git a/lib/srv/desktop/rdp/rdpclient/Cargo.toml b/lib/srv/desktop/rdp/rdpclient/Cargo.toml index 1a8e54c5414ff..4b0b1222d8c77 100644 --- a/lib/srv/desktop/rdp/rdpclient/Cargo.toml +++ b/lib/srv/desktop/rdp/rdpclient/Cargo.toml @@ -21,6 +21,8 @@ ironrdp-rdpdr.workspace = true ironrdp-rdpsnd.workspace = true ironrdp-session.workspace = true ironrdp-svc.workspace = true +ironrdp-dvc.workspace = true +ironrdp-displaycontrol.workspace = true ironrdp-tls.workspace = true ironrdp-tokio.workspace = true iso7816 = "0.1.2" @@ -36,6 +38,8 @@ tokio = { version = "1.37", features = ["full"] } tokio-boring = { git = "https://github.com/gravitational/boring", rev="605253d99d5e363e178bcf97e1d4622e33844cd5", optional = true } utf16string = "0.2.0" uuid = { version = "1.8.0", features = ["v4"] } +tracing-subscriber = "0.3.17" +tracing = { version = "0.1", features = ["log-always" ] } [build-dependencies] cbindgen = "0.26.0" diff --git a/lib/srv/desktop/rdp/rdpclient/client.go b/lib/srv/desktop/rdp/rdpclient/client.go index 865a58bf690d8..9a9b18ebff4b1 100644 --- a/lib/srv/desktop/rdp/rdpclient/client.go +++ b/lib/srv/desktop/rdp/rdpclient/client.go @@ -393,6 +393,15 @@ func (c *Client) startInputStreaming(stopCh chan struct{}) error { c.UpdateClientActivity() switch m := msg.(type) { + case tdp.ClientScreenSpec: + c.cfg.Logger.DebugContext(context.Background(), "Client changed screen size", "width", m.Width, "height", m.Height) + if errCode := C.client_write_screen_resize( + C.ulong(c.handle), + C.uint32_t(m.Width), + C.uint32_t(m.Height), + ); errCode != C.ErrCodeSuccess { + return trace.Errorf("ClientScreenSpec: client_write_screen_resize: %v", errCode) + } case tdp.MouseMove: mouseX, mouseY = m.X, m.Y if errCode := C.client_write_rdp_pointer( @@ -694,8 +703,8 @@ func (c *Client) handleRDPFastPathPDU(data []byte) C.CGOErrCode { return C.ErrCodeSuccess } -//export cgo_handle_rdp_connection_initialized -func cgo_handle_rdp_connection_initialized( +//export cgo_handle_rdp_connection_activated +func cgo_handle_rdp_connection_activated( handle C.uintptr_t, io_channel_id C.uint16_t, user_channel_id C.uint16_t, @@ -706,17 +715,17 @@ func cgo_handle_rdp_connection_initialized( if err != nil { return C.ErrCodeFailure } - return client.handleRDPConnectionInitialized(io_channel_id, user_channel_id, screen_width, screen_height) + return client.handleRDPConnectionActivated(io_channel_id, user_channel_id, screen_width, screen_height) } -func (c *Client) handleRDPConnectionInitialized(ioChannelID, userChannelID, screenWidth, screenHeight C.uint16_t) C.CGOErrCode { - c.cfg.Logger.DebugContext(context.Background(), "Received RDP channel IDs", "io_channel", ioChannelID, "user_channel", userChannelID) +func (c *Client) handleRDPConnectionActivated(ioChannelID, userChannelID, screenWidth, screenHeight C.uint16_t) C.CGOErrCode { + c.cfg.Logger.DebugContext(context.Background(), "Received RDP channel IDs", "io_channel_id", ioChannelID, "user_channel_id", userChannelID) // Note: RDP doesn't always use the resolution we asked for. // This is especially true when we request dimensions that are not a multiple of 4. c.cfg.Logger.DebugContext(context.Background(), "RDP server provided resolution", "width", screenWidth, "height", screenHeight) - if err := c.cfg.Conn.WriteMessage(tdp.ConnectionInitialized{ + if err := c.cfg.Conn.WriteMessage(tdp.ConnectionActivated{ IOChannelID: uint16(ioChannelID), UserChannelID: uint16(userChannelID), ScreenWidth: uint16(screenWidth), diff --git a/lib/srv/desktop/rdp/rdpclient/src/client.rs b/lib/srv/desktop/rdp/rdpclient/src/client.rs index a423222daa591..611deca70a474 100644 --- a/lib/srv/desktop/rdp/rdpclient/src/client.rs +++ b/lib/srv/desktop/rdp/rdpclient/src/client.rs @@ -16,15 +16,22 @@ pub mod global; use crate::rdpdr::tdp; use crate::{ - cgo_handle_fastpath_pdu, cgo_handle_rdp_connection_initialized, cgo_handle_remote_copy, ssl, + cgo_handle_fastpath_pdu, cgo_handle_rdp_connection_activated, cgo_handle_remote_copy, ssl, CGOErrCode, CGOKeyboardEvent, CGOMousePointerEvent, CGOPointerButton, CGOPointerWheel, CGOSyncKeys, CgoHandle, }; #[cfg(feature = "fips")] use boring::error::ErrorStack; use bytes::BytesMut; -use ironrdp_cliprdr::{Client as ClientRole, Cliprdr, CliprdrSvcMessages}; -use ironrdp_connector::{Config, ConnectorError, Credentials}; +use ironrdp_cliprdr::{Cliprdr, CliprdrClient, CliprdrSvcMessages}; +use ironrdp_connector::connection_activation::ConnectionActivationState; +use ironrdp_connector::{Config, ConnectorError, Credentials, DesktopSize}; +use ironrdp_displaycontrol::client::DisplayControlClient; +use ironrdp_displaycontrol::pdu::{ + DisplayControlMonitorLayout, DisplayControlPdu, MonitorLayoutEntry, +}; +use ironrdp_dvc::{DrdynvcClient, DvcMessage}; +use ironrdp_dvc::{DvcProcessor, DynamicVirtualChannel}; use ironrdp_pdu::input::fast_path::{ FastPathInput, FastPathInputEvent, KeyboardFlags, SynchronizeFlags, }; @@ -34,6 +41,8 @@ use ironrdp_pdu::mcs::DisconnectReason; use ironrdp_pdu::rdp::capability_sets::MajorPlatformType; use ironrdp_pdu::rdp::client_info::PerformanceFlags; use ironrdp_pdu::rdp::RdpError; +use ironrdp_pdu::write_buf::WriteBuf; +use ironrdp_pdu::PduResult; use ironrdp_pdu::{custom_err, function, PduError}; use ironrdp_rdpdr::pdu::efs::ClientDeviceListAnnounce; use ironrdp_rdpdr::pdu::RdpdrPdu; @@ -43,7 +52,7 @@ use ironrdp_session::x224::{self, ProcessorOutput}; use ironrdp_session::SessionErrorKind::Reason; use ironrdp_session::{reason_err, SessionError, SessionResult}; use ironrdp_svc::{SvcMessage, SvcProcessor, SvcProcessorMessages}; -use ironrdp_tokio::{Framed, TokioStream}; +use ironrdp_tokio::{single_sequence_step_read, Framed, TokioStream}; use log::debug; use rand::{Rng, SeedableRng}; use std::fmt::{Debug, Display, Formatter}; @@ -65,6 +74,13 @@ use tokio_boring::{HandshakeError, SslStream}; const RDP_CONNECT_TIMEOUT: Duration = Duration::from_secs(5); +/// The "Microsoft::Windows::RDS::DisplayControl" DVC is opened +/// by the server. Until it does so, we withhold the latest screen +/// resize, and only send it once we're notified that the DVC is open. +struct PendingResize { + pending_resize: Option<(u32, u32)>, +} + /// The RDP client on the Rust side of things. Each `Client` /// corresponds with a Go `Client` specified by `cgo_handle`. pub struct Client { @@ -74,6 +90,7 @@ pub struct Client { write_stream: Option, function_receiver: Option, x224_processor: Arc>, + pending_resize: Arc>, } impl Client { @@ -128,6 +145,7 @@ impl Client { // Create a channel for sending/receiving function calls to/from the Client. let (client_handle, function_receiver) = ClientHandle::new(100); + let function_receiver = Some(function_receiver); let mut rdpdr = Rdpdr::new( Box::new(TeleportRdpdrBackend::new( @@ -149,10 +167,21 @@ impl Client { debug!("creating rdpdr client with directory sharing disabled") } - let mut connector = ironrdp_connector::ClientConnector::new(connector_config) + let pending_resize = Arc::new(Mutex::new(PendingResize { + pending_resize: None, + })); + + let pending_resize_clone = pending_resize.clone(); + let display_control = DisplayControlClient::new(move |_| { + Self::on_display_ctl_capabilities_received(&pending_resize_clone) + }); + let drdynvc_client = DrdynvcClient::new().with_dynamic_channel(display_control); + + let mut connector = ironrdp_connector::ClientConnector::new(connector_config.clone()) .with_server_addr(server_socket_addr) + .with_static_channel(drdynvc_client) // require for resizing .with_static_channel(Rdpsnd::new()) // required for rdpdr to work - .with_static_channel(rdpdr); + .with_static_channel(rdpdr); // required for smart card + directory sharing if params.allow_clipboard { connector = connector.with_static_channel(Cliprdr::new(Box::new( @@ -187,36 +216,34 @@ impl Client { debug!("connection_result: {:?}", connection_result); // Register the RDP channels with the browser client. - unsafe { - ClientResult::from(cgo_handle_rdp_connection_initialized( - cgo_handle, - connection_result.io_channel_id, - connection_result.user_channel_id, - connection_result.desktop_size.width, - connection_result.desktop_size.height, - )) - }?; + Self::send_connection_activated( + cgo_handle, + connection_result.io_channel_id, + connection_result.user_channel_id, + connection_result.desktop_size, + )?; // Take the stream back out of the framed object for splitting. let rdp_stream = rdp_stream.into_inner_no_leftover(); let (read_stream, write_stream) = split(rdp_stream); - let read_stream = ironrdp_tokio::TokioFramed::new(read_stream); - let write_stream = ironrdp_tokio::TokioFramed::new(write_stream); + let read_stream = Some(ironrdp_tokio::TokioFramed::new(read_stream)); + let write_stream = Some(ironrdp_tokio::TokioFramed::new(write_stream)); - let x224_processor = x224::Processor::new( + let x224_processor = Arc::new(Mutex::new(x224::Processor::new( connection_result.static_channels, connection_result.user_channel_id, connection_result.io_channel_id, connection_result.connection_activation, - ); + ))); Ok(Self { cgo_handle, client_handle, - read_stream: Some(read_stream), - write_stream: Some(write_stream), - function_receiver: Some(function_receiver), - x224_processor: Arc::new(Mutex::new(x224_processor)), + read_stream, + write_stream, + function_receiver, + x224_processor, + pending_resize, }) } @@ -266,15 +293,18 @@ impl Client { write_stream, function_receiver, self.x224_processor.clone(), + self.pending_resize.clone(), ); // Wait for either loop to finish. When one does, abort the other and return the result. tokio::select! { res = &mut read_loop_handle => { + // Read loop finished, abort the other tasks and return the result. write_loop_handle.abort(); res? }, res = &mut write_loop_handle => { + // Write loop finished, abort the other tasks and return the result. read_loop_handle.abort(); match res { Ok(Ok(())) => Ok(None), @@ -311,8 +341,7 @@ impl Client { ironrdp_pdu::Action::X224 => { // X224 PDU, process it and send any immediate response frames to the write loop // for writing to the RDP server. - let res = Client::x224_process(x224_processor.clone(), frame).await?; - for output in res { + for output in Client::x224_process(x224_processor.clone(), frame).await? { match output { ProcessorOutput::ResponseFrame(frame) => { // Send response frames to write loop for writing to RDP server. @@ -321,12 +350,44 @@ impl Client { ProcessorOutput::Disconnect(reason) => { return Ok(Some(reason)); } - ProcessorOutput::DeactivateAll(_) => { - // DeactivateAll is not implemented yet, but will - // be in the near future when resize support lands. - return Err(ClientError::InternalError( - "DeactivateAll not implemented".to_string(), - )); + ProcessorOutput::DeactivateAll(mut sequence) => { + // Execute the Deactivation-Reactivation Sequence: + // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/dfc234ce-481a-4674-9a5d-2a7bafb14432 + debug!("Received Server Deactivate All PDU, executing Deactivation-Reactivation Sequence"); + let mut buf = WriteBuf::new(); + loop { + let written = single_sequence_step_read( + &mut read_stream, + sequence.as_mut(), + &mut buf, + ) + .await?; + + if written.size().is_some() { + write_requester + .write_raw_pdu_async(buf.filled().to_vec()) + .await?; + } + + if let ConnectionActivationState::Finalized { + io_channel_id, + user_channel_id, + desktop_size, + .. + } = sequence.state + { + // Upon completing the activation sequence, register the io/user channels + // and desktop size with the client, just like we do upon receiving the + // connection result in [`Self::connect`]. + Self::send_connection_activated( + cgo_handle, + io_channel_id, + user_channel_id, + desktop_size, + )?; + break; + } + } } } } @@ -341,6 +402,7 @@ impl Client { mut write_stream: RdpWriteStream, mut write_receiver: FunctionReceiver, x224_processor: Arc>, + pending_resize: Arc>, ) -> tokio::task::JoinHandle> { global::TOKIO_RT.spawn(async move { loop { @@ -362,6 +424,16 @@ impl Client { Client::write_rdpdr(&mut write_stream, x224_processor.clone(), args) .await?; } + ClientFunction::WriteScreenResize(width, height) => { + Client::handle_screen_resize( + width, + height, + x224_processor.clone(), + &mut write_stream, + pending_resize.clone(), + ) + .await?; + } ClientFunction::HandleTdpSdAnnounce(sda) => { Client::handle_tdp_sd_announce( &mut write_stream, @@ -425,6 +497,51 @@ impl Client { }) } + fn on_display_ctl_capabilities_received( + pending_resize: &Arc>, + ) -> PduResult> { + debug!("DisplayControlClient channel opened"); + // We've been notified that the DisplayControl dvc channel has been opened: + let mut pending_resize = + Self::resize_manager_lock(pending_resize).map_err(|err| custom_err!(err))?; + let pending_resize = pending_resize.pending_resize.take(); + if let Some((width, height)) = pending_resize { + // If there was a resize pending, perform it now. + debug!( + "Pending resize for size [{:?}x{:?}] found, sending now", + width, height + ); + let pdu: DisplayControlPdu = DisplayControlMonitorLayout::new_single_primary_monitor( + width, + height, + None, + Some((width, height)), + )? + .into(); + return Ok(vec![Box::new(pdu)]); + } + + // No resize was pending, nothing to do. + Ok(vec![]) + } + + fn send_connection_activated( + cgo_handle: CgoHandle, + io_channel_id: u16, + user_channel_id: u16, + desktop_size: DesktopSize, + ) -> ClientResult<()> { + unsafe { + ClientResult::from(cgo_handle_rdp_connection_activated( + cgo_handle, + io_channel_id, + user_channel_id, + desktop_size.width, + desktop_size.height, + )) + } + } + async fn update_clipboard( x224_processor: Arc>, data: String, @@ -454,10 +571,10 @@ impl Client { fun: Box, ) -> ClientResult<()> { let processor = x224_processor.clone(); - let messages: ClientResult> = global::TOKIO_RT + let messages: ClientResult> = global::TOKIO_RT .spawn_blocking(move || { let mut x224_processor = Self::x224_lock(&processor)?; - let cliprdr = Self::get_svc_processor::>(&mut x224_processor)?; + let cliprdr = Self::get_svc_processor::(&mut x224_processor)?; Ok(fun.call(cliprdr)?) }) .await?; @@ -580,6 +697,101 @@ impl Client { Ok(()) } + async fn handle_screen_resize( + width: u32, + height: u32, + x224_processor: Arc>, + write_stream: &mut RdpWriteStream, + pending_resize: Arc>, + ) -> ClientResult<()> { + // Adjust the screen size to the nearest supported resolution (per the RDP spec). + let init_width = width; + let init_height = height; + debug!( + "Received screen resize [{:?}x{:?}]", + init_width, init_height + ); + let (width, height) = MonitorLayoutEntry::adjust_display_size(init_width, init_height); + if width != init_width || height != init_height { + debug!("Adjusted screen resize to [{:?}x{:?}]", width, height); + } + + // Determine whether to withhold the resize or perform it immediately. + let action = { + let x224_processor = Self::x224_lock(&x224_processor)?; + let dvc = x224_processor.get_dvc::().ok_or( + ClientError::InternalError("DisplayControlClient not found".to_string()), + )?; + + if dvc.is_open() { + // Resize channel is open, perform the resize immediately. + Some((width, height)) + } else { + // The client requested a resize but the DisplayControl channel has not been opened yet. + // Sending the resize now would cause an RDP error and end the session; instead we withhold + // it until the DisplayControl channel is ready. + debug!("DisplayControl channel not ready, withholding resize"); + let mut pending_resize = Self::resize_manager_lock(&pending_resize)?; + pending_resize.pending_resize = Some((width, height)); + None // No immediate action required. + } + }; // Drop the x224 lock here to avoid holding it over the await below. + + if let Some((width, height)) = action { + return Client::write_screen_resize( + write_stream, + x224_processor.clone(), + width, + height, + ) + .await; + } + + Ok(()) + } + + /// Sends a screen resize to the RDP server. + async fn write_screen_resize( + write_stream: &mut RdpWriteStream, + x224_processor: Arc>, + width: u32, + height: u32, + ) -> ClientResult<()> { + let cloned = x224_processor.clone(); + let messages = global::TOKIO_RT + .spawn_blocking(move || { + let x224_processor = Self::x224_lock(&cloned)?; + let dvc = Self::get_dvc::(&x224_processor)?; + let channel_id = dvc.channel_id().ok_or(ClientError::InternalError( + "DisplayControlClient channel_id not found".to_string(), + ))?; + let disp_ctl_cli = dvc + .channel_processor_downcast_ref::() + .ok_or(ClientError::InternalError( + "DisplayControlClient not found".to_string(), + ))?; + + Ok::<_, ClientError>(disp_ctl_cli.encode_single_primary_monitor( + channel_id, + width, + height, + None, + Some((width, height)), + )) + }) + .await???; + + let encoded = Client::x224_process_svc_messages( + x224_processor, + SvcProcessorMessages::::new(messages), + ) + .await?; + debug!("Writing resize to [{:?}x{:?}]", width, height); + write_stream.write_all(&encoded).await?; + + Ok(()) + } + async fn handle_tdp_sd_announce( write_stream: &mut RdpWriteStream, x224_processor: Arc>, @@ -604,7 +816,7 @@ impl Client { .spawn_blocking(move || { debug!("received tdp: {:?}", res); let mut x224_processor = Self::x224_lock(&x224_processor)?; - let rdpdr = Self::rdpdr_backend(&mut x224_processor)?; + let rdpdr: &mut TeleportRdpdrBackend = Self::rdpdr_backend(&mut x224_processor)?; rdpdr.handle_tdp_sd_info_response(res)?; Ok(()) }) @@ -649,7 +861,7 @@ impl Client { .spawn_blocking(move || { debug!("received tdp: {:?}", res); let mut x224_processor = Self::x224_lock(&x224_processor)?; - let rdpdr = Self::rdpdr_backend(&mut x224_processor)?; + let rdpdr: &mut TeleportRdpdrBackend = Self::rdpdr_backend(&mut x224_processor)?; rdpdr.handle_tdp_sd_list_response(res)?; Ok(()) }) @@ -694,7 +906,7 @@ impl Client { .spawn_blocking(move || { debug!("received tdp: {:?}", res); let mut x224_processor = Self::x224_lock(&x224_processor)?; - let rdpdr = Self::rdpdr_backend(&mut x224_processor)?; + let rdpdr: &mut TeleportRdpdrBackend = Self::rdpdr_backend(&mut x224_processor)?; rdpdr.handle_tdp_sd_move_response(res)?; Ok(()) }) @@ -772,6 +984,14 @@ impl Client { .map_err(|err| reason_err!(function!(), "PoisonError: {:?}", err)) } + fn resize_manager_lock( + pending_resize: &Arc>, + ) -> Result, SessionError> { + pending_resize + .lock() + .map_err(|err| reason_err!(function!(), "PoisonError: {:?}", err)) + } + /// Returns an immutable reference to the [`SvcProcessor`] of type `S`. /// /// # Example @@ -818,12 +1038,26 @@ impl Client { ))) } + fn get_dvc<'a, S>( + x224_processor: &'a MutexGuard<'_, x224::Processor>, + ) -> Result<&'a DynamicVirtualChannel, ClientError> + where + S: DvcProcessor + 'static, + { + x224_processor + .get_dvc::() + .ok_or(ClientError::InternalError(format!( + "get_dvc::<{}>() returned None", + std::any::type_name::(), + ))) + } + /// Returns a mutable reference to the [`TeleportCliprdrBackend`] of the [`Cliprdr`] processor. fn cliprdr_backend( x224_processor: &mut x224::Processor, ) -> ClientResult<&mut TeleportCliprdrBackend> { x224_processor - .get_svc_processor_mut::>() + .get_svc_processor_mut::() .and_then(|c| c.downcast_backend_mut::()) .ok_or(ClientError::InternalError( "cliprdr_backend returned None".to_string(), @@ -865,6 +1099,8 @@ enum ClientFunction { WriteRawPdu(Vec), /// Corresponds to [`Client::write_rdpdr`] WriteRdpdr(RdpdrPdu), + /// Corresponds to [`Client::write_screen_resize`] + WriteScreenResize(u32, u32), /// Corresponds to [`Client::handle_tdp_sd_announce`] HandleTdpSdAnnounce(tdp::SharedDirectoryAnnounce), /// Corresponds to [`Client::handle_tdp_sd_info_response`] @@ -945,6 +1181,15 @@ impl ClientHandle { self.send(ClientFunction::WriteRdpdr(pdu)).await } + pub fn write_screen_resize(&self, width: u32, height: u32) -> ClientResult<()> { + self.blocking_send(ClientFunction::WriteScreenResize(width, height)) + } + + pub async fn write_screen_resize_async(&self, width: u32, height: u32) -> ClientResult<()> { + self.send(ClientFunction::WriteScreenResize(width, height)) + .await + } + pub fn handle_tdp_sd_announce(&self, sda: tdp::SharedDirectoryAnnounce) -> ClientResult<()> { self.blocking_send(ClientFunction::HandleTdpSdAnnounce(sda)) } @@ -1169,12 +1414,13 @@ fn create_config(params: &ConnectParams, pin: String) -> Config { autologon: true, pointer_software_rendering: false, performance_flags: PerformanceFlags::default() - | PerformanceFlags::DISABLE_CURSOR_SHADOW // this is required for pointer to work correctly in Windows 2019 + | PerformanceFlags::DISABLE_CURSOR_SHADOW // this is required for pointer to work correctly in Windows 2019 | if !params.show_desktop_wallpaper { PerformanceFlags::DISABLE_WALLPAPER } else { PerformanceFlags::empty() }, + desktop_scale_factor: 0, } } diff --git a/lib/srv/desktop/rdp/rdpclient/src/cliprdr.rs b/lib/srv/desktop/rdp/rdpclient/src/cliprdr.rs index 62912d8d9b714..26d750d00f81e 100644 --- a/lib/srv/desktop/rdp/rdpclient/src/cliprdr.rs +++ b/lib/srv/desktop/rdp/rdpclient/src/cliprdr.rs @@ -21,7 +21,7 @@ use ironrdp_cliprdr::pdu::{ ClipboardFormat, ClipboardFormatId, ClipboardGeneralCapabilityFlags, FileContentsRequest, FileContentsResponse, FormatDataRequest, FormatDataResponse, LockDataId, }; -use ironrdp_cliprdr::{Client as ClientRole, Cliprdr, CliprdrSvcMessages}; +use ironrdp_cliprdr::{Client, CliprdrClient as Cliprdr, CliprdrSvcMessages}; use ironrdp_pdu::PduResult; use ironrdp_svc::impl_as_any; use log::{debug, error, info, trace, warn}; @@ -57,7 +57,7 @@ impl TeleportCliprdrBackend { fn send(&self, name: &'static str, f: F) where - F: Fn(&Cliprdr) -> PduResult> + Send + 'static, + F: Fn(&Cliprdr) -> PduResult> + Send + 'static, { let res = self .client_handle @@ -189,24 +189,21 @@ impl CliprdrBackend for TeleportCliprdrBackend { impl_as_any!(TeleportCliprdrBackend); pub trait ClipboardFn: Send + Debug + 'static { - fn call(&self, cliprdr: &Cliprdr) -> PduResult>; + fn call(&self, cliprdr: &Cliprdr) -> PduResult>; } impl ClipboardFn for F where - F: Fn(&Cliprdr) -> PduResult> - + Send - + Debug - + 'static, + F: Fn(&Cliprdr) -> PduResult> + Send + Debug + 'static, { - fn call(&self, cliprdr: &Cliprdr) -> PduResult> { + fn call(&self, cliprdr: &Cliprdr) -> PduResult> { (self)(cliprdr) } } struct ClipboardFnInternal where - F: Fn(&Cliprdr) -> PduResult> + Send + 'static, + F: Fn(&Cliprdr) -> PduResult> + Send + 'static, { name: &'static str, closure: F, @@ -214,7 +211,7 @@ where impl ClipboardFnInternal where - F: Fn(&Cliprdr) -> PduResult> + Send + 'static, + F: Fn(&Cliprdr) -> PduResult> + Send + 'static, { fn new(name: &'static str, closure: F) -> Self { Self { name, closure } @@ -223,7 +220,7 @@ where impl Debug for ClipboardFnInternal where - F: Fn(&Cliprdr) -> PduResult> + Send + 'static, + F: Fn(&Cliprdr) -> PduResult> + Send + 'static, { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!(f, "{}", &self.name) @@ -232,9 +229,9 @@ where impl ClipboardFn for ClipboardFnInternal where - F: Fn(&Cliprdr) -> PduResult> + Send + 'static, + F: Fn(&Cliprdr) -> PduResult> + Send + 'static, { - fn call(&self, cliprdr: &Cliprdr) -> PduResult> { + fn call(&self, cliprdr: &Cliprdr) -> PduResult> { (self.closure)(cliprdr) } } diff --git a/lib/srv/desktop/rdp/rdpclient/src/lib.rs b/lib/srv/desktop/rdp/rdpclient/src/lib.rs index 54b4ad31e5c37..845e3355813e4 100644 --- a/lib/srv/desktop/rdp/rdpclient/src/lib.rs +++ b/lib/srv/desktop/rdp/rdpclient/src/lib.rs @@ -433,6 +433,22 @@ pub unsafe extern "C" fn client_write_rdp_sync_keys( ) } +/// # Safety +/// +/// `cgo_handle` must be a valid handle. +#[no_mangle] +pub unsafe extern "C" fn client_write_screen_resize( + cgo_handle: CgoHandle, + width: u32, + height: u32, +) -> CGOErrCode { + handle_operation( + cgo_handle, + "client_write_screen_resize", + move |client_handle| client_handle.write_screen_resize(width, height), + ) +} + #[repr(C)] pub struct CGOConnectParams { go_addr: *const c_char, @@ -684,7 +700,7 @@ pub type CGOSharedDirectoryTruncateResponse = SharedDirectoryTruncateResponse; extern "C" { fn cgo_handle_remote_copy(cgo_handle: CgoHandle, data: *mut u8, len: u32) -> CGOErrCode; fn cgo_handle_fastpath_pdu(cgo_handle: CgoHandle, data: *mut u8, len: u32) -> CGOErrCode; - fn cgo_handle_rdp_connection_initialized( + fn cgo_handle_rdp_connection_activated( cgo_handle: CgoHandle, io_channel_id: u16, user_channel_id: u16, diff --git a/lib/srv/desktop/tdp/proto.go b/lib/srv/desktop/tdp/proto.go index e9258174071f2..57d4e77b4fed9 100644 --- a/lib/srv/desktop/tdp/proto.go +++ b/lib/srv/desktop/tdp/proto.go @@ -125,7 +125,7 @@ func decodeMessage(firstByte byte, in byteReader) (Message, error) { case TypeRDPResponsePDU: return decodeRDPResponsePDU(in) case TypeRDPConnectionInitialized: - return decodeConnectionInitialized(in) + return decodeConnectionActivated(in) case TypeMouseMove: return decodeMouseMove(in) case TypeMouseButton: @@ -366,20 +366,24 @@ func (r RDPResponsePDU) Encode() ([]byte, error) { return buf.Bytes(), nil } -// ConnectionInitialized is sent to the browser when an RDP session is fully initialized. +// ConnectionActivated is sent to the browser when an RDP session is fully activated. +// This includes after the RDP connection is first initialized, or after executing a +// Deactivation-Reactivation Sequence. +// // It contains data that the browser needs in order to correctly handle the session. // // See "3. Channel Connection" at https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/023f1e69-cfe8-4ee6-9ee0-7e759fb4e4ee +// Also see 1.3.1.3 Deactivation-Reactivation Sequence: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/dfc234ce-481a-4674-9a5d-2a7bafb14432 // -// | message type (31) | io_channel_id uint16 | user_channel_id uint16 | -type ConnectionInitialized struct { +// | message type (31) | io_channel_id uint16 | user_channel_id uint16 | screen_width uint16 | screen_height uint16 | +type ConnectionActivated struct { IOChannelID uint16 UserChannelID uint16 ScreenWidth uint16 ScreenHeight uint16 } -func (c ConnectionInitialized) Encode() ([]byte, error) { +func (c ConnectionActivated) Encode() ([]byte, error) { buf := new(bytes.Buffer) buf.WriteByte(byte(TypeRDPConnectionInitialized)) writeUint16(buf, c.IOChannelID) @@ -389,8 +393,8 @@ func (c ConnectionInitialized) Encode() ([]byte, error) { return buf.Bytes(), nil } -func decodeConnectionInitialized(in byteReader) (ConnectionInitialized, error) { - var ids ConnectionInitialized +func decodeConnectionActivated(in byteReader) (ConnectionActivated, error) { + var ids ConnectionActivated err := binary.Read(in, binary.BigEndian, &ids) return ids, trace.Wrap(err) } diff --git a/rfd/0037-desktop-access-protocol.md b/rfd/0037-desktop-access-protocol.md index 215cd835a8b5f..0c844a8cb7e61 100644 --- a/rfd/0037-desktop-access-protocol.md +++ b/rfd/0037-desktop-access-protocol.md @@ -283,11 +283,12 @@ Some messages passed to the TDP client via a FastPath Frame warrant a response, At the time of writing this message is used to send responses to RemoteFX frames, which occasionally demand such, but in theory it can be used to carry any raw RDP response message intended to be written directly into the TDP server-side's RDP connection. -#### 31 - RDP Connection Initialized +#### 31 - RDP Connection Activated This message is sent from the server to the browser when a connection -is initialized. It contains data that the browser needs in order to -correctly handle the session. +is initialized, or after executing a [Deactivation-Reactivation Sequence](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/dfc234ce-481a-4674-9a5d-2a7bafb14432). +It contains data that the browser needs in order to correctly handle the +session. ``` | message type (31) | io_channel_id uint16 | user_channel_id uint16 | screen_width uint16 | screen_height uint16 | diff --git a/web/packages/teleport/src/DesktopSession/DesktopSession.story.tsx b/web/packages/teleport/src/DesktopSession/DesktopSession.story.tsx index f3980b70ce034..7be8f174c74a1 100644 --- a/web/packages/teleport/src/DesktopSession/DesktopSession.story.tsx +++ b/web/packages/teleport/src/DesktopSession/DesktopSession.story.tsx @@ -19,6 +19,7 @@ import React, { useState } from 'react'; import { ButtonPrimary } from 'design/Button'; import { NotificationItem } from 'shared/components/Notification'; +import { throttle } from 'shared/utils/highbar'; import { TdpClient, TdpClientEvent } from 'teleport/lib/tdp'; @@ -90,6 +91,7 @@ const props: State = { setShowAnotherSessionActiveDialog: () => {}, warnings: [], onRemoveWarning: () => {}, + windowOnResize: throttle(() => {}, 1000), }; export const BothProcessing = () => ( diff --git a/web/packages/teleport/src/DesktopSession/DesktopSession.tsx b/web/packages/teleport/src/DesktopSession/DesktopSession.tsx index a67cb1dfcddc2..1c7054a2ff01a 100644 --- a/web/packages/teleport/src/DesktopSession/DesktopSession.tsx +++ b/web/packages/teleport/src/DesktopSession/DesktopSession.tsx @@ -77,6 +77,7 @@ export function DesktopSession(props: State) { canvasOnMouseUp, canvasOnMouseWheelScroll, canvasOnContextMenu, + windowOnResize, clientScreenSpecToRequest, clipboardSharingState, onShareDirectory, @@ -169,6 +170,7 @@ export function DesktopSession(props: State) { canvasOnMouseUp={canvasOnMouseUp} canvasOnMouseWheelScroll={canvasOnMouseWheelScroll} canvasOnContextMenu={canvasOnContextMenu} + windowOnResize={windowOnResize} updatePointer={true} /> diff --git a/web/packages/teleport/src/DesktopSession/useTdpClientCanvas.tsx b/web/packages/teleport/src/DesktopSession/useTdpClientCanvas.tsx index 22bfae686050b..3373c2f420b4d 100644 --- a/web/packages/teleport/src/DesktopSession/useTdpClientCanvas.tsx +++ b/web/packages/teleport/src/DesktopSession/useTdpClientCanvas.tsx @@ -20,6 +20,7 @@ import { useState, useEffect, useRef } from 'react'; import { Attempt } from 'shared/hooks/useAttemptNext'; import { NotificationItem } from 'shared/components/Notification'; +import { debounce } from 'shared/utils/highbar'; import { TdpClient, ButtonState, ScrollAxis } from 'teleport/lib/tdp'; import { @@ -88,15 +89,12 @@ export default function useTdpClientCanvas(props: Props) { setTdpClient(new TdpClient(addr)); }, [clusterId, username, desktopName]); - const syncCanvasResolutionAndSize = (canvas: HTMLCanvasElement) => { - const { width, height } = getDisplaySize(); - - // Set a fixed canvas resolution and display size. This ensures - // that neither of these change when the user resizes the browser - // window. Instead, the canvas will remain the same size and the - // browser will add scrollbars if necessary. This is the behavior - // we want until https://github.com/gravitational/teleport/issues/9702 - // is resolved. + /** + * Synchronize the canvas resolution and display size with the + * given ClientScreenSpec. + */ + const syncCanvas = (canvas: HTMLCanvasElement, spec: ClientScreenSpec) => { + const { width, height } = spec; canvas.width = width; canvas.height = height; console.debug(`set canvas.width x canvas.height to ${width} x ${height}`); @@ -114,7 +112,7 @@ export default function useTdpClientCanvas(props: Props) { ) => { // The first image fragment we see signals a successful TDP connection. if (!initialTdpConnectionSucceeded.current) { - syncCanvasResolutionAndSize(ctx.canvas); + syncCanvas(ctx.canvas, getDisplaySize()); setTdpConnection({ status: 'success' }); initialTdpConnectionSucceeded.current = true; } @@ -128,7 +126,7 @@ export default function useTdpClientCanvas(props: Props) { ) => { // The first image fragment we see signals a successful TDP connection. if (!initialTdpConnectionSucceeded.current) { - syncCanvasResolutionAndSize(ctx.canvas); + syncCanvas(ctx.canvas, getDisplaySize()); setTdpConnection({ status: 'success' }); initialTdpConnectionSucceeded.current = true; } @@ -141,15 +139,7 @@ export default function useTdpClientCanvas(props: Props) { canvas: HTMLCanvasElement, spec: ClientScreenSpec ) => { - const { width, height } = spec; - canvas.width = width; - canvas.height = height; - console.debug(`set canvas.width x canvas.height to ${width} x ${height}`); - canvas.style.width = `${width}px`; - canvas.style.height = `${height}px`; - console.debug( - `set canvas.style.width x canvas.style.height to ${width} x ${height}` - ); + syncCanvas(canvas, spec); }; // Default TdpClientEvent.TDP_CLIPBOARD_DATA handler. @@ -282,6 +272,15 @@ export default function useTdpClientCanvas(props: Props) { // on the remote machine. const canvasOnContextMenu = () => false; + const windowOnResize = debounce( + (cli: TdpClient) => { + const spec = getDisplaySize(); + cli.resize(spec); + }, + 250, + { trailing: true } + ); + const sendLocalClipboardToRemote = async (cli: TdpClient) => { if (await sysClipboardGuard(clipboardSharingState, 'read')) { navigator.clipboard.readText().then(text => { @@ -317,6 +316,7 @@ export default function useTdpClientCanvas(props: Props) { canvasOnMouseUp, canvasOnMouseWheelScroll, canvasOnContextMenu, + windowOnResize, }; } diff --git a/web/packages/teleport/src/components/TdpClientCanvas/TdpClientCanvas.tsx b/web/packages/teleport/src/components/TdpClientCanvas/TdpClientCanvas.tsx index 7834f0e232f32..a01dc6d7d191d 100644 --- a/web/packages/teleport/src/components/TdpClientCanvas/TdpClientCanvas.tsx +++ b/web/packages/teleport/src/components/TdpClientCanvas/TdpClientCanvas.tsx @@ -17,6 +17,7 @@ */ import React, { memo, useEffect, useRef } from 'react'; +import { DebouncedFunc } from 'shared/utils/highbar'; import { TdpClientEvent, TdpClient } from 'teleport/lib/tdp'; import { BitmapFrame } from 'teleport/lib/tdp/client'; @@ -50,6 +51,7 @@ function TdpClientCanvas(props: Props) { canvasOnMouseUp, canvasOnMouseWheelScroll, canvasOnContextMenu, + windowOnResize, style, updatePointer, } = props; @@ -379,6 +381,17 @@ function TdpClientCanvas(props: Props) { }; }, [client, canvasOnFocusOut]); + useEffect(() => { + if (client && windowOnResize) { + const _onresize = () => windowOnResize(client); + window.addEventListener('resize', _onresize); + return () => { + windowOnResize.cancel(); + window.removeEventListener('resize', _onresize); + }; + } + }, [client, windowOnResize]); + useEffect(() => { if (client) { const canvas = canvasRef.current; @@ -446,6 +459,7 @@ export type Props = { canvasOnMouseUp?: (cli: TdpClient, e: MouseEvent) => void; canvasOnMouseWheelScroll?: (cli: TdpClient, e: WheelEvent) => void; canvasOnContextMenu?: () => boolean; + windowOnResize?: DebouncedFunc<(cli: TdpClient) => void>; style?: CSSProperties; updatePointer?: boolean; }; diff --git a/web/packages/teleport/src/ironrdp/src/lib.rs b/web/packages/teleport/src/ironrdp/src/lib.rs index bb4c8a517d1f6..233732d7ccb56 100644 --- a/web/packages/teleport/src/ironrdp/src/lib.rs +++ b/web/packages/teleport/src/ironrdp/src/lib.rs @@ -171,6 +171,11 @@ impl FastPathProcessor { } } + pub fn resize(&mut self, width: u16, height: u16) -> Result<(), JsValue> { + self.image = DecodedImage::new(PixelFormat::RgbA32, width, height); + Ok(()) + } + /// `tdp_fast_path_frame: Uint8Array` /// /// `cb_context: tdp.Client` @@ -179,9 +184,9 @@ impl FastPathProcessor { /// /// `respond_cb: (responseFrame: ArrayBuffer) => void` /// + /// If `data` is `false` we hide the cursor (but remember its value), if `data` is `true` we restore + /// the last cursor value; otherwise we set the cursor to a bitmap from `ImageData`. /// `update_pointer_cb: (data: ImageData | boolean, hotspot_x: number, hotspot_y: number) => void` - /// if data is `false` we hide cursor but remember its value, if data is `true` we restore last - /// cursor value, otherwise we set cursor to bitmapt from `ImageData` pub fn process( &mut self, tdp_fast_path_frame: &[u8], diff --git a/web/packages/teleport/src/lib/tdp/client.ts b/web/packages/teleport/src/lib/tdp/client.ts index ddd89262bf09b..da2c9a16e7e32 100644 --- a/web/packages/teleport/src/lib/tdp/client.ts +++ b/web/packages/teleport/src/lib/tdp/client.ts @@ -173,7 +173,7 @@ export default class Client extends EventEmitterWebAuthnSender { spec: ClientScreenSpec ) { this.logger.debug( - `initializing fast path processor with screen spec ${spec.width} x ${spec.height}` + `setting up fast path processor with screen spec ${spec.width} x ${spec.height}` ); this.fastPathProcessor = new FastPathProcessor( @@ -196,11 +196,11 @@ export default class Client extends EventEmitterWebAuthnSender { case MessageType.PNG2_FRAME: this.handlePng2Frame(buffer); break; - case MessageType.RDP_CONNECTION_INITIALIZED: - this.handleRDPConnectionInitialized(buffer); + case MessageType.RDP_CONNECTION_ACTIVATED: + this.handleRdpConnectionActivated(buffer); break; case MessageType.RDP_FASTPATH_PDU: - this.handleRDPFastPathPDU(buffer); + this.handleRdpFastPathPDU(buffer); break; case MessageType.CLIENT_SCREEN_SPEC: this.handleClientScreenSpec(buffer); @@ -325,12 +325,12 @@ export default class Client extends EventEmitterWebAuthnSender { ); } - handleRDPConnectionInitialized(buffer: ArrayBuffer) { + handleRdpConnectionActivated(buffer: ArrayBuffer) { const { ioChannelId, userChannelId, screenWidth, screenHeight } = - this.codec.decodeRDPConnectionInitialied(buffer); + this.codec.decodeRdpConnectionActivated(buffer); const spec = { width: screenWidth, height: screenHeight }; this.logger.info( - `setting screen spec received from server ${spec.width} x ${spec.height}` + `screen spec received from server ${spec.width} x ${spec.height}` ); this.initFastPathProcessor(ioChannelId, userChannelId, { @@ -343,8 +343,8 @@ export default class Client extends EventEmitterWebAuthnSender { this.emit(TdpClientEvent.TDP_CLIENT_SCREEN_SPEC, spec); } - handleRDPFastPathPDU(buffer: ArrayBuffer) { - let rdpFastPathPDU = this.codec.decodeRDPFastPathPDU(buffer); + handleRdpFastPathPDU(buffer: ArrayBuffer) { + let rdpFastPathPDU = this.codec.decodeRdpFastPathPDU(buffer); // This should never happen but let's catch it with an error in case it does. if (!this.fastPathProcessor) @@ -361,7 +361,7 @@ export default class Client extends EventEmitterWebAuthnSender { this.emit(TdpClientEvent.TDP_BMP_FRAME, bmpFrame); }, (responseFrame: ArrayBuffer) => { - this.sendRDPResponsePDU(responseFrame); + this.sendRdpResponsePDU(responseFrame); }, (data: ImageData | boolean, hotspot_x?: number, hotspot_y?: number) => { this.emit(TdpClientEvent.POINTER, { data, hotspot_x, hotspot_y }); @@ -708,11 +708,11 @@ export default class Client extends EventEmitterWebAuthnSender { } resize(spec: ClientScreenSpec) { - this.send(this.codec.encodeClientScreenSpec(spec)); + this.sendClientScreenSpec(spec); } - sendRDPResponsePDU(responseFrame: ArrayBuffer) { - this.send(this.codec.encodeRDPResponsePDU(responseFrame)); + sendRdpResponsePDU(responseFrame: ArrayBuffer) { + this.send(this.codec.encodeRdpResponsePDU(responseFrame)); } // Emits an errType event, closing the socket if the error was fatal. diff --git a/web/packages/teleport/src/lib/tdp/codec.ts b/web/packages/teleport/src/lib/tdp/codec.ts index ff32bc83eb6c9..b670e8d03dd65 100644 --- a/web/packages/teleport/src/lib/tdp/codec.ts +++ b/web/packages/teleport/src/lib/tdp/codec.ts @@ -51,7 +51,7 @@ export enum MessageType { NOTIFICATION = 28, RDP_FASTPATH_PDU = 29, RDP_RESPONSE_PDU = 30, - RDP_CONNECTION_INITIALIZED = 31, + RDP_CONNECTION_ACTIVATED = 31, SYNC_KEYS = 32, SHARED_DIRECTORY_TRUNCATE_REQUEST = 33, SHARED_DIRECTORY_TRUNCATE_RESPONSE = 34, @@ -108,7 +108,7 @@ export type ClipboardData = { }; // | message type (31) | io_channel_id uint16 | user_channel_id uint16 | screen_width uint16 | screen_height uint16 | -export type RDPConnectionInitialized = { +export type RdpConnectionActivated = { ioChannelId: number; userChannelId: number; screenWidth: number; @@ -716,7 +716,7 @@ export default class Codec { } // | message type (30) | data_length uint32 | data []byte | - encodeRDPResponsePDU(responseFrame: ArrayBuffer): Message { + encodeRdpResponsePDU(responseFrame: ArrayBuffer): Message { const bufLen = BYTE_LEN + UINT_32_LEN + responseFrame.byteLength; const buffer = new ArrayBuffer(bufLen); const view = new DataView(buffer); @@ -865,7 +865,7 @@ export default class Codec { } // | message type (29) | data_length uint32 | data []byte | - decodeRDPFastPathPDU(buffer: ArrayBuffer): RdpFastPathPdu { + decodeRdpFastPathPDU(buffer: ArrayBuffer): RdpFastPathPdu { const dv = new DataView(buffer); let offset = 0; offset += BYTE_LEN; // eat message type @@ -875,7 +875,7 @@ export default class Codec { } // | message type (31) | io_channel_id uint16 | user_channel_id uint16 | screen_width uint16 | screen_height uint16 | - decodeRDPConnectionInitialied(buffer: ArrayBuffer): RDPConnectionInitialized { + decodeRdpConnectionActivated(buffer: ArrayBuffer): RdpConnectionActivated { const dv = new DataView(buffer); let offset = 0; offset += BYTE_LEN; // eat message type diff --git a/web/packages/teleport/src/lib/tdp/playerClient.ts b/web/packages/teleport/src/lib/tdp/playerClient.ts index 1b8473d03b0c3..dd32996b5bd79 100644 --- a/web/packages/teleport/src/lib/tdp/playerClient.ts +++ b/web/packages/teleport/src/lib/tdp/playerClient.ts @@ -206,7 +206,7 @@ export class PlayerClient extends Client { // RDP response PDUs to the server during playback, which is unnecessary // and breaks the playback system. // eslint-disable-next-line @typescript-eslint/no-unused-vars - sendRDPResponsePDU(responseFrame: ArrayBuffer) { + sendRdpResponsePDU(responseFrame: ArrayBuffer) { return; } From 1464e753b8875128f13c0572c78e87918dd6d435 Mon Sep 17 00:00:00 2001 From: Nic Klaassen Date: Mon, 29 Apr 2024 18:09:09 -0700 Subject: [PATCH 12/28] [vnet][0] setup virtual netstack (#40889) * [vnet] setup virtual netstack * remove unused context * better goroutine and error handling * remove CGNAT constant * remove promiscuous mode and unused param * make sure to complete TCP request * don't stash context * fix err handling in test * rename error * expand comment on test network stack --- go.mod | 3 + go.sum | 7 + lib/utils/testhelpers.go | 89 ++++++++ lib/vnet/vnet.go | 451 +++++++++++++++++++++++++++++++++++++++ lib/vnet/vnet_test.go | 285 +++++++++++++++++++++++++ 5 files changed, 835 insertions(+) create mode 100644 lib/utils/testhelpers.go create mode 100644 lib/vnet/vnet.go create mode 100644 lib/vnet/vnet_test.go diff --git a/go.mod b/go.mod index a3b36a635b0ed..e2f63e67a9f0e 100644 --- a/go.mod +++ b/go.mod @@ -203,6 +203,7 @@ require ( golang.org/x/term v0.19.0 golang.org/x/text v0.14.0 golang.org/x/time v0.5.0 + golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 google.golang.org/api v0.176.1 google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be google.golang.org/grpc v1.63.2 @@ -214,6 +215,7 @@ require ( gopkg.in/mail.v2 v2.3.1 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 + gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259 helm.sh/helm/v3 v3.14.4 k8s.io/api v0.30.0 k8s.io/apiextensions-apiserver v0.30.0 @@ -509,6 +511,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/tools v0.19.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/genproto v0.0.0-20240325164216-beb30f47624b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240325164216-beb30f47624b // indirect diff --git a/go.sum b/go.sum index 7bd2e7b1d8c6d..f96ae2a9ff3e7 100644 --- a/go.sum +++ b/go.sum @@ -955,6 +955,7 @@ github.com/buildkite/go-pipeline v0.3.2/go.mod h1:iY5jzs3Afc8yHg6KDUcu3EJVkfaUkd github.com/buildkite/interpolate v0.0.0-20200526001904-07f35b4ae251 h1:k6UDF1uPYOs0iy1HPeotNa155qXRWrzKnqAaGXHLZCE= github.com/buildkite/interpolate v0.0.0-20200526001904-07f35b4ae251/go.mod h1:gbPR1gPu9dB96mucYIR7T3B7p/78hRVSOuzIWLHK2Y4= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -2843,6 +2844,10 @@ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= +golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= +golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 h1:/jFs0duh4rdb8uIfPMv78iAJGcPKDeqAFnaLBropIC4= +golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173/go.mod h1:tkCQ4FQXmpAgYVh++1cq16/dH4QJtmvpRv19DWGAHSA= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= @@ -3173,6 +3178,8 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259 h1:TbRPT0HtzFP3Cno1zZo7yPzEEnfu8EjLfl6IU9VfqkQ= +gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259/go.mod h1:AVgIgHMwK63XvmAzWG9vLQ41YnVHN0du0tEC46fI7yY= helm.sh/helm/v3 v3.14.4 h1:6FSpEfqyDalHq3kUr4gOMThhgY55kXUEjdQoyODYnrM= helm.sh/helm/v3 v3.14.4/go.mod h1:Tje7LL4gprZpuBNTbG34d1Xn5NmRT3OWfBRwpOSer9I= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/lib/utils/testhelpers.go b/lib/utils/testhelpers.go new file mode 100644 index 0000000000000..12bffc4da72e9 --- /dev/null +++ b/lib/utils/testhelpers.go @@ -0,0 +1,89 @@ +// 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 utils + +import ( + "context" + "errors" + "testing" + "time" + + "github.com/gravitational/trace" +) + +// TestBackgroundTask is a task that should be run in the background for the remaining duration of a test and +// reliably exit before the test completes. +type TestBackgroundTask struct { + // Name is an identifier for the task that will be included in logs and error messages. + Name string + + // Task is the function that will be called in a background goroutine to run the task. + // + // It must not terminate before the context is canceled, and it must reliably terminate after the context + // is canceled and Terminate is called. + // + // Any error other than [context.Canceled] will fail the test. + Task func(ctx context.Context) error + + // Terminate is an optional function that will be called to terminate the task during test cleanup. + // It does not need to be set if the task will reliably terminate after context cancellation. + Terminate func() error +} + +// RunTestBackgroundTask runs task.Task in the background for the remaining duration of the test. +// During test cleanup it will cancel the context passed to the task, call task.Terminate if set, and wait for +// the task to terminate before allowing the test to complete. +func RunTestBackgroundTask(ctx context.Context, t *testing.T, task *TestBackgroundTask) { + ctx, cancel := context.WithCancel(ctx) + done := make(chan struct{}) + + go func() { + defer close(done) + err := task.Task(ctx) + if ctx.Err() == nil { + // The context hasn't been canceled yet, meaning the task has exited prematurely. This should + // fail the test even if the error is nil. + t.Errorf("Test background task %q exited prematurely with error: %s", task.Name, trace.DebugReport(err)) + return + } + // The context has been canceled and the task has successfully exited, but any error other than + // context.Canceled should still fail the test. + if err != nil && !errors.Is(err, context.Canceled) { + t.Errorf("Test background task %q exited with error: %+v", task.Name, trace.DebugReport(err)) + } + }() + + t.Cleanup(func() { + t.Logf("Cleanup: terminating test background task %q.", task.Name) + cancel() + if task.Terminate != nil { + if err := task.Terminate(); err != nil { + t.Errorf("Terminating test background task %q failed with error: %s", task.Name, trace.DebugReport(err)) + } + } + ticker := time.NewTicker(2 * time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + t.Logf("Waiting for test background task %q to terminate.", task.Name) + case <-done: + return + } + } + }) +} diff --git a/lib/vnet/vnet.go b/lib/vnet/vnet.go new file mode 100644 index 0000000000000..498b3adfae578 --- /dev/null +++ b/lib/vnet/vnet.go @@ -0,0 +1,451 @@ +// 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 vnet + +import ( + "context" + "crypto/rand" + "errors" + "fmt" + "io" + "log/slog" + "os" + "os/signal" + "sync" + "syscall" + + "github.com/gravitational/trace" + "golang.org/x/sync/errgroup" + "golang.zx2c4.com/wireguard/device" + "gvisor.dev/gvisor/pkg/buffer" + "gvisor.dev/gvisor/pkg/tcpip" + "gvisor.dev/gvisor/pkg/tcpip/adapters/gonet" + "gvisor.dev/gvisor/pkg/tcpip/header" + "gvisor.dev/gvisor/pkg/tcpip/link/channel" + "gvisor.dev/gvisor/pkg/tcpip/network/ipv4" + "gvisor.dev/gvisor/pkg/tcpip/network/ipv6" + "gvisor.dev/gvisor/pkg/tcpip/stack" + "gvisor.dev/gvisor/pkg/tcpip/transport/tcp" + "gvisor.dev/gvisor/pkg/waiter" + + "github.com/gravitational/teleport" +) + +const ( + nicID = 1 + mtu = 1500 +) + +// Config holds configuration parameters for the VNet. +type Config struct { + // TUNDevice is the OS TUN virtual network interface. + TUNDevice TUNDevice + // IPv6Prefix is the IPv6 ULA prefix to use for all assigned VNet IP addresses. + IPv6Prefix tcpip.Address +} + +// CheckAndSetDefaults checks the config and sets defaults. +func (c *Config) CheckAndSetDefaults() error { + if c.TUNDevice == nil { + return trace.BadParameter("TUNdevice is required") + } + if c.IPv6Prefix.Len() != 16 || c.IPv6Prefix.AsSlice()[0] != 0xfd { + return trace.BadParameter("IPv6Prefix must be an IPv6 ULA address") + } + return nil +} + +// IPv6Prefix returns a Unique Local IPv6 Unicast Address which will be used as a 64-bit prefix for all v6 IP +// addresses in the VNet. +func IPv6Prefix() (tcpip.Address, error) { + // | 8 bits | 40 bits | 16 bits | 64 bits | + // +------------+------------+-----------+----------------------------+ + // | ULA Prefix | Global ID | Subnet ID | Interface ID | + // +------------+------------+-----------+----------------------------+ + // ULA Prefix is always 0xfd + // Global ID is random bytes for the specific VNet instance + // Subnet ID is always 0 + // Interface ID will be the IPv4 address prefixed with zeros. + var bytes [16]byte + bytes[0] = 0xfd + if _, err := rand.Read(bytes[1:6]); err != nil { + return tcpip.Address{}, trace.Wrap(err) + } + return tcpip.AddrFrom16(bytes), nil +} + +// TUNDevice abstracts a virtual network TUN device. +type TUNDevice interface { + // Write one or more packets to the device (without any additional headers). + // On a successful write it returns the number of packets written. A nonzero + // offset can be used to instruct the Device on where to begin writing from + // each packet contained within the bufs slice. + Write(bufs [][]byte, offset int) (int, error) + + // Read one or more packets from the Device (without any additional headers). + // On a successful read it returns the number of packets read, and sets + // packet lengths within the sizes slice. len(sizes) must be >= len(bufs). + // A nonzero offset can be used to instruct the Device on where to begin + // reading into each element of the bufs slice. + Read(bufs [][]byte, sizes []int, offset int) (n int, err error) + + // BatchSize returns the preferred/max number of packets that can be read or + // written in a single read/write call. BatchSize must not change over the + // lifetime of a Device. + BatchSize() int + + // Close stops the Device and closes the Event channel. + Close() error +} + +// Manager holds configuration and state for the VNet. +type Manager struct { + tun TUNDevice + stack *stack.Stack + linkEndpoint *channel.Endpoint + ipv6Prefix tcpip.Address + destroyed chan struct{} + wg sync.WaitGroup + state state + slog *slog.Logger +} + +type state struct { + mu sync.RWMutex + tcpHandlers map[tcpip.Address]tcpHandler + lastAssignedIPSuffix uint32 +} + +func newState() state { + return state{ + tcpHandlers: make(map[tcpip.Address]tcpHandler), + // Suffix 0 is reserved, suffix 1 is assigned to the NIC. + lastAssignedIPSuffix: 1, + } +} + +// tcpConnector is a type of function that can be called to consume a TCP connection. +type tcpConnector func() (io.ReadWriteCloser, error) +type tcpHandler interface { + handleTCP(context.Context, tcpConnector) error +} + +// NewManager creates a new VNet manager with the given configuration and root +// context. Call Run() on the returned manager to start the VNet. +func NewManager(cfg *Config) (*Manager, error) { + if err := cfg.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + slog := slog.With(teleport.ComponentKey, "VNet") + + stack, linkEndpoint, err := createStack() + if err != nil { + return nil, trace.Wrap(err) + } + + if err := installVnetRoutes(stack); err != nil { + return nil, trace.Wrap(err) + } + + m := &Manager{ + tun: cfg.TUNDevice, + stack: stack, + linkEndpoint: linkEndpoint, + ipv6Prefix: cfg.IPv6Prefix, + destroyed: make(chan struct{}), + state: newState(), + slog: slog, + } + + const ( + tcpReceiveBufferSize = 0 // 0 means a default will be used. + maxInFlightConnectionAttempts = 1024 + ) + tcpForwarder := tcp.NewForwarder(m.stack, tcpReceiveBufferSize, maxInFlightConnectionAttempts, m.handleTCP) + m.stack.SetTransportProtocolHandler(tcp.ProtocolNumber, tcpForwarder.HandlePacket) + + return m, nil +} + +func createStack() (*stack.Stack, *channel.Endpoint, error) { + netStack := stack.New(stack.Options{ + NetworkProtocols: []stack.NetworkProtocolFactory{ipv6.NewProtocol}, + TransportProtocols: []stack.TransportProtocolFactory{tcp.NewProtocol}, + }) + + const ( + size = 512 + linkAddr = "" + ) + linkEndpoint := channel.New(size, mtu, linkAddr) + if err := netStack.CreateNIC(nicID, linkEndpoint); err != nil { + return nil, nil, trace.Errorf("creating VNet NIC: %s", err) + } + + return netStack, linkEndpoint, nil +} + +func installVnetRoutes(stack *stack.Stack) error { + // Make the network stack pass all outbound IP packets to the NIC, regardless of destination IP address. + ipv6Subnet, err := tcpip.NewSubnet(tcpip.AddrFrom16([16]byte{}), tcpip.MaskFromBytes(make([]byte, 16))) + if err != nil { + return trace.Wrap(err, "creating VNet IPv6 subnet") + } + stack.SetRouteTable([]tcpip.Route{{ + Destination: ipv6Subnet, + NIC: nicID, + }}) + return nil +} + +// Run starts the VNet. +func (m *Manager) Run(ctx context.Context) error { + m.slog.With("ipv6_prefix", m.ipv6Prefix).InfoContext(ctx, "Running Teleport VNet.") + g, ctx := errgroup.WithContext(ctx) + g.Go(func() error { return m.statsHandler(ctx) }) + g.Go(func() error { + return forwardBetweenTunAndNetstack(ctx, m.tun, m.linkEndpoint) + }) + return trace.Wrap(g.Wait()) +} + +// Destroy closes the link endpoint, waits for all goroutines to terminate, and destroys the networking stack. +func (m *Manager) Destroy() error { + close(m.destroyed) + m.linkEndpoint.Close() + m.wg.Wait() + m.stack.Destroy() + return nil +} + +func (m *Manager) handleTCP(req *tcp.ForwarderRequest) { + m.wg.Add(1) + defer m.wg.Done() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // Clients of *tcp.ForwarderRequest must eventually call Complete on it exactly once. + var completed bool + defer func() { + if !completed { + req.Complete(true /*send TCP reset*/) + } + }() + + id := req.ID() + slog := m.slog.With("request", id) + slog.DebugContext(ctx, "Handling TCP connection.") + defer slog.DebugContext(ctx, "Finished handling TCP connection.") + + handler, ok := m.getTCPHandler(id.LocalAddress) + if !ok { + slog.With("addr", id.LocalAddress).DebugContext(ctx, "No handler for address.") + return + } + + connector := func() (io.ReadWriteCloser, error) { + var wq waiter.Queue + waitEntry, notifyCh := waiter.NewChannelEntry(waiter.EventErr | waiter.EventHUp) + wq.EventRegister(&waitEntry) + defer wq.EventUnregister(&waitEntry) + + endpoint, err := req.CreateEndpoint(&wq) + if err != nil { + // This err doesn't actually implement [error] + return nil, trace.Errorf("creating TCP endpoint: %s", err) + } + + completed = true + req.Complete(false /*don't send TCP reset*/) + + endpoint.SocketOptions().SetKeepAlive(true) + + conn := gonet.NewTCPConn(&wq, endpoint) + m.wg.Add(1) + go func() { + defer m.wg.Done() + select { + case <-notifyCh: + slog.DebugContext(ctx, "Got HUP or ERR, closing TCP conn.") + case <-m.destroyed: + slog.DebugContext(ctx, "VNet is being destroyed, closing TCP conn.") + } + cancel() + conn.Close() + }() + + return conn, nil + } + + if err := handler.handleTCP(ctx, connector); err != nil { + if errors.Is(err, context.Canceled) { + slog.DebugContext(ctx, "TCP connection handler returned early due to canceled context.") + } else { + slog.DebugContext(ctx, "Error handling TCP connection.", "err", err) + } + } +} + +func (m *Manager) getTCPHandler(addr tcpip.Address) (tcpHandler, bool) { + m.state.mu.RLock() + defer m.state.mu.RUnlock() + handler, ok := m.state.tcpHandlers[addr] + return handler, ok +} + +func (m *Manager) assignTCPHandler(handler tcpHandler) (tcpip.Address, error) { + m.state.mu.Lock() + defer m.state.mu.Unlock() + + m.state.lastAssignedIPSuffix++ + ipSuffix := m.state.lastAssignedIPSuffix + + addr := ipv6WithSuffix(m.ipv6Prefix, u32ToBytes(ipSuffix)) + + m.state.tcpHandlers[addr] = handler + if err := m.addProtocolAddress(addr); err != nil { + return addr, trace.Wrap(err) + } + + return addr, nil +} + +func (m *Manager) statsHandler(ctx context.Context) error { + ch := make(chan os.Signal, 1) + signal.Notify(ch, syscall.SIGUSR1) + for { + select { + case <-ctx.Done(): + return ctx.Err() + case <-ch: + } + stats := m.stack.Stats() + fmt.Printf("%+v\n", stats) + } +} + +func forwardBetweenTunAndNetstack(ctx context.Context, tun TUNDevice, linkEndpoint *channel.Endpoint) error { + slog.DebugContext(ctx, "Forwarding IP packets between OS and VNet.") + g, ctx := errgroup.WithContext(ctx) + g.Go(func() error { return forwardNetstackToTUN(ctx, linkEndpoint, tun) }) + g.Go(func() error { return forwardTUNtoNetstack(tun, linkEndpoint) }) + return trace.Wrap(g.Wait()) +} + +func forwardNetstackToTUN(ctx context.Context, linkEndpoint *channel.Endpoint, tun TUNDevice) error { + bufs := [][]byte{make([]byte, device.MessageTransportHeaderSize+mtu)} + for { + packet := linkEndpoint.ReadContext(ctx) + if packet.IsNil() { + // Nil packet is returned when context is canceled. + return trace.Wrap(ctx.Err()) + } + offset := device.MessageTransportHeaderSize + for _, s := range packet.AsSlices() { + offset += copy(bufs[0][offset:], s) + } + packet.DecRef() + bufs[0] = bufs[0][:offset] + if _, err := tun.Write(bufs, device.MessageTransportHeaderSize); err != nil { + return trace.Wrap(err, "writing packets to TUN") + } + bufs[0] = bufs[0][:cap(bufs[0])] + } +} + +func forwardTUNtoNetstack(tun TUNDevice, linkEndpoint *channel.Endpoint) error { + const readOffset = device.MessageTransportHeaderSize + bufs := make([][]byte, tun.BatchSize()) + for i := range bufs { + bufs[i] = make([]byte, device.MessageTransportHeaderSize+mtu) + } + sizes := make([]int, len(bufs)) + for { + n, err := tun.Read(bufs, sizes, readOffset) + if err != nil { + return trace.Wrap(err, "reading packets from TUN") + } + for i := range sizes[:n] { + protocol, ok := protocolVersion(bufs[i][readOffset]) + if !ok { + continue + } + packet := stack.NewPacketBuffer(stack.PacketBufferOptions{ + Payload: buffer.MakeWithData(bufs[i][readOffset : readOffset+sizes[i]]), + }) + linkEndpoint.InjectInbound(protocol, packet) + packet.DecRef() + } + } +} + +func (m *Manager) addProtocolAddress(localAddress tcpip.Address) error { + protocolAddress, err := protocolAddress(localAddress) + if err != nil { + return trace.Wrap(err) + } + if err := m.stack.AddProtocolAddress(nicID, protocolAddress, stack.AddressProperties{}); err != nil { + return trace.Errorf("%s", err) + } + return nil +} + +func protocolAddress(addr tcpip.Address) (tcpip.ProtocolAddress, error) { + addrWithPrefix := addr.WithPrefix() + var protocol tcpip.NetworkProtocolNumber + switch addrWithPrefix.PrefixLen { + case 32: + protocol = ipv4.ProtocolNumber + case 128: + protocol = ipv6.ProtocolNumber + default: + return tcpip.ProtocolAddress{}, trace.BadParameter("unhandled prefix len %d", addrWithPrefix.PrefixLen) + } + return tcpip.ProtocolAddress{ + AddressWithPrefix: addrWithPrefix, + Protocol: protocol, + }, nil +} + +func protocolVersion(b byte) (tcpip.NetworkProtocolNumber, bool) { + switch b >> 4 { + case 4: + return header.IPv4ProtocolNumber, true + case 6: + return header.IPv6ProtocolNumber, true + } + return 0, false +} + +func ipv6WithSuffix(prefix tcpip.Address, suffix []byte) tcpip.Address { + addrBytes := prefix.As16() + offset := len(addrBytes) - len(suffix) + for i, b := range suffix { + addrBytes[offset+i] = b + } + return tcpip.AddrFrom16(addrBytes) +} + +func u32ToBytes(i uint32) []byte { + bytes := make([]byte, 4) + bytes[0] = byte(i >> 24) + bytes[1] = byte(i >> 16) + bytes[2] = byte(i >> 8) + bytes[3] = byte(i >> 0) + return bytes +} diff --git a/lib/vnet/vnet_test.go b/lib/vnet/vnet_test.go new file mode 100644 index 0000000000000..601b003ea89a1 --- /dev/null +++ b/lib/vnet/vnet_test.go @@ -0,0 +1,285 @@ +// 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 vnet + +import ( + "bufio" + "context" + "errors" + "io" + "log/slog" + "net" + "os" + "strconv" + "strings" + "sync" + "testing" + + "github.com/gravitational/trace" + "github.com/stretchr/testify/require" + "gvisor.dev/gvisor/pkg/tcpip" + "gvisor.dev/gvisor/pkg/tcpip/adapters/gonet" + "gvisor.dev/gvisor/pkg/tcpip/link/channel" + "gvisor.dev/gvisor/pkg/tcpip/network/ipv6" + "gvisor.dev/gvisor/pkg/tcpip/stack" + + "github.com/gravitational/teleport/lib/utils" +) + +func TestMain(m *testing.M) { + utils.InitLogger(utils.LoggingForCLI, slog.LevelDebug) + os.Exit(m.Run()) +} + +type testPack struct { + vnetIPv6Prefix tcpip.Address + manager *Manager + + testStack *stack.Stack + testLinkEndpoint *channel.Endpoint + localAddress tcpip.Address +} + +func newTestPack(t *testing.T, ctx context.Context) *testPack { + // Create two sides of an emulated TUN interface: writes to one can be read on the other, and vice versa. + tun1, tun2 := newSplitTUN() + + // Create an isolated userspace networking stack that can be manipulated from test code. It will be + // connected to the VNet over the TUN interface. This emulates the host networking stack. + // This is a completely separate gvisor network stack than the one that will be created in NewManager - + // the two will be connected over a fake TUN interface. This exists so that the test can setup IP routes + // without affecting the host running the Test. + testStack, linkEndpoint, err := createStack() + require.NoError(t, err) + + errIsOK := func(err error) bool { + return err == nil || errors.Is(err, context.Canceled) || utils.IsOKNetworkError(err) || errors.Is(err, errFakeTUNClosed) + } + + utils.RunTestBackgroundTask(ctx, t, &utils.TestBackgroundTask{ + Name: "test network stack", + Task: func(ctx context.Context) error { + if err := forwardBetweenTunAndNetstack(ctx, tun1, linkEndpoint); !errIsOK(err) { + return trace.Wrap(err) + } + return nil + }, + Terminate: func() error { + linkEndpoint.Close() + return trace.Wrap(tun1.Close()) + }, + }) + + // Assign a local IP address to the test stack. + localAddress, err := randomULAAddress() + require.NoError(t, err) + protocolAddr, err := protocolAddress(localAddress) + require.NoError(t, err) + tcpErr := testStack.AddProtocolAddress(nicID, protocolAddr, stack.AddressProperties{}) + require.Nil(t, tcpErr) + + // Route the VNet range to the TUN interface - this emulates the route that will be installed on the host. + vnetIPv6Prefix, err := IPv6Prefix() + require.NoError(t, err) + subnet, err := tcpip.NewSubnet(vnetIPv6Prefix, tcpip.MaskFromBytes(net.CIDRMask(64, 128))) + require.NoError(t, err) + testStack.SetRouteTable([]tcpip.Route{{ + Destination: subnet, + NIC: nicID, + }}) + + // Create the VNet and connect it to the other side of the TUN. + manager, err := NewManager(&Config{ + TUNDevice: tun2, + IPv6Prefix: vnetIPv6Prefix, + }) + require.NoError(t, err) + + utils.RunTestBackgroundTask(ctx, t, &utils.TestBackgroundTask{ + Name: "VNet", + Task: func(ctx context.Context) error { + if err := manager.Run(ctx); !errIsOK(err) { + return trace.Wrap(err) + } + return nil + }, + Terminate: func() error { + tunErr := tun2.Close() + destroyErr := manager.Destroy() + return trace.NewAggregate(tunErr, destroyErr) + }, + }) + + return &testPack{ + vnetIPv6Prefix: vnetIPv6Prefix, + manager: manager, + testStack: testStack, + testLinkEndpoint: linkEndpoint, + localAddress: localAddress, + } +} + +// dial dials the VNet address [addr] from the test virtual netstack. +func (p *testPack) dial(ctx context.Context, addr tcpip.Address) (*gonet.TCPConn, error) { + conn, err := gonet.DialTCPWithBind( + ctx, + p.testStack, + tcpip.FullAddress{ + NIC: nicID, + Addr: p.localAddress, + LinkAddr: p.testLinkEndpoint.LinkAddress(), + }, + tcpip.FullAddress{ + NIC: nicID, + Addr: addr, + Port: 456, + LinkAddr: p.manager.linkEndpoint.LinkAddress(), + }, + ipv6.ProtocolNumber, + ) + return conn, trace.Wrap(err) +} + +// TestVnetEcho is a preliminary VNet test that manually installs an echo handler on a specific IP, TCP dials +// it, and makes sure writes are echoed back to the TCP conn. +func TestVnetEcho(t *testing.T) { + ctx := context.Background() + p := newTestPack(t, ctx) + + dialAddress, err := p.manager.assignTCPHandler(echoHandler{}) + require.NoError(t, err) + + for i := 0; i < 10; i++ { + t.Run(strconv.Itoa(i), func(t *testing.T) { + t.Parallel() + + conn, err := p.dial(ctx, dialAddress) + require.NoError(t, err) + defer conn.Close() + + // The newline is necessary so that the bufio.Scanner can read a line. + testString := "Hello, World!\n" + _, err = conn.Write([]byte(testString)) + require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, conn.Close()) }) + + scanner := bufio.NewScanner(conn) + require.True(t, scanner.Scan(), "scan failed: %v", scanner.Err()) + line := scanner.Text() + require.Equal(t, strings.TrimSuffix(testString, "\n"), line) + }) + } +} + +type echoHandler struct{} + +func (echoHandler) handleTCP(ctx context.Context, connector tcpConnector) error { + conn, err := connector() + if err != nil { + return trace.Wrap(err) + } + defer conn.Close() + _, err = io.Copy(conn, conn) + return trace.Wrap(err) +} + +func randomULAAddress() (tcpip.Address, error) { + prefix, err := IPv6Prefix() + if err != nil { + return tcpip.Address{}, trace.Wrap(err) + } + bytes := prefix.As16() + bytes[15] = 2 + return tcpip.AddrFrom16(bytes), nil +} + +var errFakeTUNClosed = errors.New("TUN closed") + +type fakeTUN struct { + name string + writePacketsTo, readPacketsFrom chan []byte + closed chan struct{} + closeOnce func() +} + +// newSplitTUN returns two fake TUN devices that are tied together: writes to one can be read on the other, +// and vice versa. +func newSplitTUN() (*fakeTUN, *fakeTUN) { + aClosed := make(chan struct{}) + bClosed := make(chan struct{}) + ab := make(chan []byte) + ba := make(chan []byte) + return &fakeTUN{ + name: "tun1", + writePacketsTo: ab, + readPacketsFrom: ba, + closed: aClosed, + closeOnce: sync.OnceFunc(func() { close(aClosed) }), + }, &fakeTUN{ + name: "tun2", + writePacketsTo: ba, + readPacketsFrom: ab, + closed: bClosed, + closeOnce: sync.OnceFunc(func() { close(bClosed) }), + } +} + +func (f *fakeTUN) BatchSize() int { + return 1 +} + +// Write one or more packets to the device (without any additional headers). +// On a successful write it returns the number of packets written. A nonzero +// offset can be used to instruct the Device on where to begin writing from +// each packet contained within the bufs slice. +func (f *fakeTUN) Write(bufs [][]byte, offset int) (int, error) { + if len(bufs) != 1 { + return 0, trace.BadParameter("batchsize is 1") + } + packet := make([]byte, len(bufs[0][offset:])) + copy(packet, bufs[0][offset:]) + select { + case <-f.closed: + return 0, errFakeTUNClosed + case f.writePacketsTo <- packet: + } + return 1, nil +} + +// Read one or more packets from the Device (without any additional headers). +// On a successful read it returns the number of packets read, and sets +// packet lengths within the sizes slice. len(sizes) must be >= len(bufs). +// A nonzero offset can be used to instruct the Device on where to begin +// reading into each element of the bufs slice. +func (f *fakeTUN) Read(bufs [][]byte, sizes []int, offset int) (n int, err error) { + if len(bufs) != 1 { + return 0, trace.BadParameter("batchsize is 1") + } + var packet []byte + select { + case <-f.closed: + return 0, errFakeTUNClosed + case packet = <-f.readPacketsFrom: + } + sizes[0] = copy(bufs[0][offset:], packet) + return 1, nil +} + +func (f *fakeTUN) Close() error { + f.closeOnce() + return nil +} From c6408c8ea3df442a27557344d8dd144b6f32d3c0 Mon Sep 17 00:00:00 2001 From: Forrest <30576607+fspmarshall@users.noreply.github.com> Date: Mon, 29 Apr 2024 22:37:11 -0700 Subject: [PATCH 13/28] tls handshake perf improvements (#40626) * improve tls handshakes * Update client_tls_config_generator.go Co-authored-by: Trent Clarke --------- Co-authored-by: Trent Clarke --- lib/auth/api.go | 7 + lib/auth/client_tls_config_generator.go | 263 ++++++++++++++++++++++++ lib/auth/middleware.go | 77 ++----- lib/auth/tls_test.go | 38 ++-- lib/service/service.go | 99 ++++++--- lib/service/service_test.go | 5 + 6 files changed, 382 insertions(+), 107 deletions(-) create mode 100644 lib/auth/client_tls_config_generator.go diff --git a/lib/auth/api.go b/lib/auth/api.go index 7a105b3f462a7..b83b2ae934ae0 100644 --- a/lib/auth/api.go +++ b/lib/auth/api.go @@ -928,6 +928,13 @@ type AccessCache interface { GetClusterName(opts ...services.MarshalOption) (types.ClusterName, error) } +// AccessCacheWithEvents extends the AccessCache interface with events. Useful for trust-related components +// that need to watch for changes. +type AccessCacheWithEvents interface { + AccessCache + types.Events +} + // Cache is a subset of the auth interface handling // access to the discovery API and static tokens type Cache interface { diff --git a/lib/auth/client_tls_config_generator.go b/lib/auth/client_tls_config_generator.go new file mode 100644 index 0000000000000..ee79799e5e968 --- /dev/null +++ b/lib/auth/client_tls_config_generator.go @@ -0,0 +1,263 @@ +/* + * 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 auth + +import ( + "context" + "crypto/tls" + "errors" + "log/slog" + "math" + "time" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/api/types" + apiutils "github.com/gravitational/teleport/api/utils" + "github.com/gravitational/teleport/lib/utils" + "github.com/gravitational/teleport/lib/utils/genmap" +) + +// ClientTLSConfigGeneratorConfig holds parameters for ClientTLSConfigGenerator setup. +type ClientTLSConfigGeneratorConfig struct { + // TLS is the upstream TLS config that per-cluster configs are generated from. + TLS *tls.Config + // ClusterName is the name of the current cluster. + ClusterName string + // PermiteRemoteClusters must be true for non-local cluster CAs to be used. Most usecases + // want this to be true, but it defaults to false to help avoid accidentally expanding the + // CA pool in cases where remote cluster CA usage is inappropriate. + PermitRemoteClusters bool + // AccessPoint is the upstream data source used to lookup cert authorities + // and watch for changes. + AccessPoint AccessCacheWithEvents +} + +// CheckAndSetDefaults checks that required parameters were supplied and +// sets default values as needed. +func (cfg *ClientTLSConfigGeneratorConfig) CheckAndSetDefaults() error { + if cfg.TLS == nil { + return trace.BadParameter("missing required parameter 'TLS' for client tls config generator") + } + + if cfg.ClusterName == "" { + return trace.BadParameter("missing required parameter 'ClusterName' for client tls config generator") + } + + if cfg.AccessPoint == nil { + return trace.BadParameter("missing required parameter 'AccessPoint' for client tls config generator") + } + + return nil +} + +// ClientTLSConfigGenerator is a helper type used to implement fast & efficient client tls config specialization based upon +// the target cluster specified in the client TLS hello. This type keeps per-cluster client TLS configs pre-generated and +// refreshes them periodically and/or when ca modification events are observed. The GetConfigForClient method of this type +// is intended to be slotted into the GetConfigForClient field of tls.Config. +type ClientTLSConfigGenerator struct { + // cfg holds the config parameters for this generator. + cfg ClientTLSConfigGeneratorConfig + // clientTLSConfigs is a specialized cache that stores tls configs + // by cluster name. + clientTLSConfigs *genmap.GenMap[string, *tls.Config] + // cancel terminates the above close context. + cancel context.CancelFunc +} + +// NewClientTLSConfigGenerator sets up a new generator based on the supplied parameters. +func NewClientTLSConfigGenerator(cfg ClientTLSConfigGeneratorConfig) (*ClientTLSConfigGenerator, error) { + if err := cfg.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + + ctx, cancel := context.WithCancel(context.Background()) + + c := &ClientTLSConfigGenerator{ + cfg: cfg, + cancel: cancel, + } + + var err error + c.clientTLSConfigs, err = genmap.New(genmap.Config[string, *tls.Config]{ + Generator: c.generator, + }) + + if err != nil { + cancel() + return nil, trace.Wrap(err) + } + + go c.refreshClientTLSConfigs(ctx) + + return c, nil +} + +// GetConfigForClient is intended to be slotted into the GetConfigForClient field of tls.Config. +func (c *ClientTLSConfigGenerator) GetConfigForClient(info *tls.ClientHelloInfo) (*tls.Config, error) { + var clusterName string + var err error + switch info.ServerName { + case "": + // Client does not use SNI, will validate against all known CAs. + default: + clusterName, err = apiutils.DecodeClusterName(info.ServerName) + if err != nil { + if !trace.IsNotFound(err) { + slog.WarnContext(context.Background(), "ignoring unsupported cluster name in client hello", "cluster_name", info.ServerName) + clusterName = "" + } + } + } + + cfg, err := c.clientTLSConfigs.Get(context.Background(), clusterName) + return cfg, trace.Wrap(err) +} + +var errNonLocalCluster = errors.New("non-local cluster specified in client hello") + +// generator is the underlying lookup function used to resolve the tls config that should be used for a +// given cluster. this method is used by the underlying genmap to load/refresh values as-needed. +func (c *ClientTLSConfigGenerator) generator(ctx context.Context, clusterName string) (*tls.Config, error) { + if !c.cfg.PermitRemoteClusters && clusterName != c.cfg.ClusterName { + if clusterName != "" { + slog.WarnContext(ctx, "refusing to set up client cert pool for non-local cluster", "cluster_name", clusterName) + return nil, trace.Wrap(errNonLocalCluster) + } + // unsepcified cluster name should be treated as a request for local cluster CAs + clusterName = c.cfg.ClusterName + } + + // update client certificate pool based on currently trusted TLS + // certificate authorities. + pool, totalSubjectsLen, err := DefaultClientCertPool(c.cfg.AccessPoint, clusterName) + if err != nil { + slog.ErrorContext(ctx, "failed to retrieve client cert pool for target cluster", "cluster_name", clusterName, "error", err) + // this falls back to the default config + return nil, nil + } + + // Per https://tools.ietf.org/html/rfc5246#section-7.4.4 the total size of + // the known CA subjects sent to the client can't exceed 2^16-1 (due to + // 2-byte length encoding). The crypto/tls stack will panic if this + // happens. + // + // This usually happens on the root cluster with a very large (>500) number + // of leaf clusters. In these cases, the client cert will be signed by the + // current (root) cluster. + // + // If the number of CAs turns out too large for the handshake, drop all but + // the current cluster CA. In the unlikely case where it's wrong, the + // client will be rejected. + if totalSubjectsLen >= int64(math.MaxUint16) { + slog.WarnContext(ctx, "cluster subject name set too large for TLS handshake, falling back to using local cluster CAs only") + pool, _, err = DefaultClientCertPool(c.cfg.AccessPoint, c.cfg.ClusterName) + if err != nil { + slog.ErrorContext(ctx, "failed to retrieve client cert pool for current cluster", "cluster_name", c.cfg.ClusterName, "error", err) + // this falls back to the default config + return nil, nil + } + } + + tlsCopy := c.cfg.TLS.Clone() + tlsCopy.ClientCAs = pool + return tlsCopy, nil +} + +// refreshClientTLSConfigs is the top-level loop for client TLS config regen. note that it +// has a fairly aggressive retry since this is a server-side singleton. +func (c *ClientTLSConfigGenerator) refreshClientTLSConfigs(ctx context.Context) { + var lastWarning time.Time + for { + err := c.watchForCAChanges(ctx) + if ctx.Err() != nil { + return + } + + if lastWarning.IsZero() || time.Since(lastWarning) > time.Second*30 { + slog.WarnContext(ctx, "cert authority watch loop for client TLS config generator failed", "error", err) + lastWarning = time.Now() + } + + select { + case <-time.After(utils.FullJitter(time.Second * 3)): + case <-ctx.Done(): + return + } + } +} + +// watchForCAChanges sets up a cert authority watcher and triggers regeneration of client +// tls configs for a given cluster whenever a CA associated with that cluster is modified. +// note that this function errs on the side of regenerating more often than might be +// strictly necessary. +func (c *ClientTLSConfigGenerator) watchForCAChanges(ctx context.Context) error { + watcher, err := c.cfg.AccessPoint.NewWatcher(ctx, types.Watch{ + Name: "client-tls-config-generator", + Kinds: []types.WatchKind{ + {Kind: types.KindCertAuthority, LoadSecrets: false}, + }, + }) + if err != nil { + return trace.Wrap(err) + } + defer watcher.Close() + + select { + case <-watcher.Done(): + return trace.Errorf("ca watcher exited while waiting for init: %v", watcher.Error()) + case event := <-watcher.Events(): + if event.Type != types.OpInit { + return trace.BadParameter("expected init event from ca watcher, got %v instead", event.Type) + } + case <-time.After(time.Second * 30): + return trace.Errorf("timeout waiting for ca watcher init") + case <-ctx.Done(): + return nil + } + + c.clientTLSConfigs.RegenAll() + + for { + select { + case <-watcher.Done(): + return trace.Errorf("ca watcher exited with: %v", watcher.Error()) + case event := <-watcher.Events(): + if event.Type == types.OpDelete { + c.clientTLSConfigs.Terminate(event.Resource.GetName()) + } else { + if !c.cfg.PermitRemoteClusters && event.Resource.GetName() != c.cfg.ClusterName { + // ignore non-local cluster CA events when we aren't configured to support them + continue + } + // trigger regen of client tls configs for the associated cluster. + c.clientTLSConfigs.Generate(event.Resource.GetName()) + } + case <-ctx.Done(): + return nil + } + } +} + +// Close terminates background ca load/refresh operations. +func (c *ClientTLSConfigGenerator) Close() error { + c.clientTLSConfigs.Close() + c.cancel() + return nil +} diff --git a/lib/auth/middleware.go b/lib/auth/middleware.go index 0300660a5db51..aac56e78c3f4e 100644 --- a/lib/auth/middleware.go +++ b/lib/auth/middleware.go @@ -23,7 +23,6 @@ import ( "crypto/tls" "crypto/x509" "encoding/json" - "math" "net" "net/http" "os" @@ -46,7 +45,6 @@ import ( apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/metadata" "github.com/gravitational/teleport/api/types" - apiutils "github.com/gravitational/teleport/api/utils" "github.com/gravitational/teleport/api/utils/grpc/interceptors" "github.com/gravitational/teleport/lib/authz" "github.com/gravitational/teleport/lib/defaults" @@ -77,7 +75,7 @@ type TLSServerConfig struct { // LimiterConfig is limiter config LimiterConfig limiter.Config // AccessPoint is a caching access point - AccessPoint AccessCache + AccessPoint AccessCacheWithEvents // Component is used for debugging purposes Component string // AcceptedUsage restricts authentication @@ -140,6 +138,9 @@ type TLSServer struct { // mux is a listener that multiplexes HTTP/2 and HTTP/1.1 // on different listeners mux *multiplexer.TLSListener + // clientTLSConfigGenerator pre-generates and caches specialized per-cluster + // client TLS configs. + clientTLSConfigGenerator *ClientTLSConfigGenerator } // NewTLSServer returns new unstarted TLS server @@ -213,7 +214,18 @@ func NewTLSServer(ctx context.Context, cfg TLSServerConfig) (*TLSServer, error) teleport.ComponentKey: cfg.Component, }), } - server.cfg.TLS.GetConfigForClient = server.GetConfigForClient + + server.clientTLSConfigGenerator, err = NewClientTLSConfigGenerator(ClientTLSConfigGeneratorConfig{ + TLS: server.cfg.TLS, + ClusterName: localClusterName.GetClusterName(), + PermitRemoteClusters: true, + AccessPoint: server.cfg.AccessPoint, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + server.cfg.TLS.GetConfigForClient = server.clientTLSConfigGenerator.GetConfigForClient server.grpcServer, err = NewGRPCServer(GRPCServerConfig{ TLS: server.cfg.TLS, @@ -258,6 +270,7 @@ func (t *TLSServer) Close() error { errors = append(errors, <-errC) } errors = append(errors, t.mux.Close()) + errors = append(errors, t.clientTLSConfigGenerator.Close()) return trace.NewAggregate(errors...) } @@ -298,62 +311,6 @@ func (t *TLSServer) Serve() error { return trace.NewAggregate(errors...) } -// GetConfigForClient is getting called on every connection -// and server's GetConfigForClient reloads the list of trusted -// local and remote certificate authorities -func (t *TLSServer) GetConfigForClient(info *tls.ClientHelloInfo) (*tls.Config, error) { - var clusterName string - var err error - switch info.ServerName { - case "": - // Client does not use SNI, will validate against all known CAs. - default: - clusterName, err = apiutils.DecodeClusterName(info.ServerName) - if err != nil { - if !trace.IsNotFound(err) { - t.log.Warningf("Client sent unsupported cluster name %q, what resulted in error %v.", info.ServerName, err) - return nil, trace.AccessDenied("access is denied") - } - } - } - - // update client certificate pool based on currently trusted TLS - // certificate authorities. - // TODO(klizhentas) drop connections of the TLS cert authorities - // that are not trusted - pool, totalSubjectsLen, err := DefaultClientCertPool(t.cfg.AccessPoint, clusterName) - if err != nil { - var ourClusterName string - if clusterName, err := t.cfg.AccessPoint.GetClusterName(); err == nil { - ourClusterName = clusterName.GetClusterName() - } - t.log.Errorf("Failed to retrieve client pool for client %v, client cluster %v, target cluster %v, error: %v.", - info.Conn.RemoteAddr().String(), clusterName, ourClusterName, trace.DebugReport(err)) - // this falls back to the default config - return nil, nil - } - - // Per https://tools.ietf.org/html/rfc5246#section-7.4.4 the total size of - // the known CA subjects sent to the client can't exceed 2^16-1 (due to - // 2-byte length encoding). The crypto/tls stack will panic if this - // happens. To make the error less cryptic, catch this condition and return - // a better error. - // - // This may happen with a very large (>500) number of trusted clusters, if - // the client doesn't send the correct ServerName in its ClientHelloInfo - // (see the switch at the top of this func). - if totalSubjectsLen >= int64(math.MaxUint16) { - return nil, trace.BadParameter("number of CAs in client cert pool is too large and cannot be encoded in a TLS handshake; this is due to a large number of trusted clusters; try updating tsh to the latest version; if that doesn't help, remove some trusted clusters") - } - - tlsCopy := t.cfg.TLS.Clone() - tlsCopy.ClientCAs = pool - for _, cert := range tlsCopy.Certificates { - t.log.Debugf("Server certificate %v.", TLSCertInfo(&cert)) - } - return tlsCopy, nil -} - // Middleware is authentication middleware checking every request type Middleware struct { ClusterName string diff --git a/lib/auth/tls_test.go b/lib/auth/tls_test.go index bdc08cee5b717..c2c9cdaa11890 100644 --- a/lib/auth/tls_test.go +++ b/lib/auth/tls_test.go @@ -475,15 +475,16 @@ func TestAutoRotation(t *testing.T) { require.Equal(t, types.RotationPhaseStandby, ca.GetRotation().Phase) require.NoError(t, err) - // old clients should no longer work - // new client has to be created here to force re-create the new - // connection instead of re-using the one from pool - // this is not going to be a problem in real teleport + // old clients should no longer work as soon as backend modification event propagates. + // new client has to be created here to force re-create the new connection instead of + // re-using the one from pool this is not going to be a problem in real teleport // as it reloads the full server after reload - _, err = testSrv.CloneClient(t, proxy).GetNodes(ctx, apidefaults.Namespace) - // TODO(rosstimothy, espadolini, jakule): figure out how to consistently - // match a certificate error and not other errors - require.Error(t, err) + require.Eventually(t, func() bool { + _, err = testSrv.CloneClient(t, proxy).GetNodes(ctx, apidefaults.Namespace) + // TODO(rosstimothy, espadolini, jakule): figure out how to consistently + // match a certificate error and not other errors + return err != nil + }, time.Second*15, time.Millisecond*200) // new clients work _, err = testSrv.CloneClient(t, newProxy).GetNodes(ctx, apidefaults.Namespace) @@ -650,13 +651,14 @@ func TestManualRotation(t *testing.T) { }) require.NoError(t, err) - // old clients should no longer work - // new client has to be created here to force re-create the new - // connection instead of re-using the one from pool - // this is not going to be a problem in real teleport + // old clients should no longer work as soon as backend modification event propagates. + // new client has to be created here to force re-create the new connection instead of + // re-using the one from pool this is not going to be a problem in real teleport // as it reloads the full server after reload - _, err = testSrv.CloneClient(t, proxy).GetNodes(ctx, apidefaults.Namespace) - require.Error(t, err) + require.Eventually(t, func() bool { + _, err = testSrv.CloneClient(t, proxy).GetNodes(ctx, apidefaults.Namespace) + return err != nil + }, time.Second*15, time.Millisecond*200) // new clients work _, err = testSrv.CloneClient(t, newProxy).GetNodes(ctx, apidefaults.Namespace) @@ -749,9 +751,11 @@ func TestRollback(t *testing.T) { }) require.NoError(t, err) - // clients with new creds will no longer work - _, err = testSrv.CloneClient(t, newProxy).GetNodes(ctx, apidefaults.Namespace) - require.Error(t, err) + // clients with new creds will no longer work as soon as backend modification event propagates. + require.Eventually(t, func() bool { + _, err := testSrv.CloneClient(t, newProxy).GetNodes(ctx, apidefaults.Namespace) + return err != nil + }, time.Second*15, time.Millisecond*200) grpcClientOld := testSrv.CloneClient(t, proxy) t.Cleanup(func() { diff --git a/lib/service/service.go b/lib/service/service.go index c44822652d29f..1f90e41ed4674 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -4378,7 +4378,19 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { tlscfg.InsecureSkipVerify = true tlscfg.ClientAuth = tls.RequireAnyClientCert } - tlscfg.GetConfigForClient = auth.WithClusterCAs(tlscfg, accessPoint, clusterName, process.log.WithField(teleport.ComponentKey, teleport.Component(teleport.ComponentReverseTunnelServer, process.id))) + + // clientTLSConfigGenerator pre-generates specialized per-cluster client TLS config values + clientTLSConfigGenerator, err := auth.NewClientTLSConfigGenerator(auth.ClientTLSConfigGeneratorConfig{ + TLS: tlscfg, + ClusterName: clusterName, + PermitRemoteClusters: true, + AccessPoint: accessPoint, + }) + if err != nil { + return trace.Wrap(err) + } + + tlscfg.GetConfigForClient = clientTLSConfigGenerator.GetConfigForClient creds, err := auth.NewTransportCredentials(auth.TransportCredentialsConfig{ TransportCredentials: credentials.NewTLS(tlscfg), @@ -4765,7 +4777,10 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { return trace.Wrap(err) } - alpnTLSConfigForWeb := process.setupALPNTLSConfigForWeb(serverTLSConfig, accessPoint, clusterName) + alpnTLSConfigForWeb, err := process.setupALPNTLSConfigForWeb(serverTLSConfig, accessPoint, clusterName) + if err != nil { + return trace.Wrap(err) + } alpnHandlerForWeb.Set(alpnServer.MakeConnectionHandler(alpnTLSConfigForWeb)) process.RegisterCriticalFunc("proxy.tls.alpn.sni.proxy", func() error { @@ -4840,6 +4855,10 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { if reverseTunnelALPNServer != nil { warnOnErr(process.ExitContext(), reverseTunnelALPNServer.Close(), logger) } + + if clientTLSConfigGenerator != nil { + clientTLSConfigGenerator.Close() + } } else { logger.InfoContext(process.ExitContext(), "Shutting down gracefully.") ctx := payloadContext(payload) @@ -4892,6 +4911,10 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { } } } + + if clientTLSConfigGenerator != nil { + clientTLSConfigGenerator.Close() + } } warnOnErr(process.ExitContext(), asyncEmitter.Close(), logger) warnOnErr(process.ExitContext(), conn.Close(), logger) @@ -5050,7 +5073,9 @@ func (process *TeleportProcess) setupProxyTLSConfig(conn *Connector, tsrv revers } setupTLSConfigALPNProtocols(tlsConfig) - setupTLSConfigClientCAsForCluster(tlsConfig, accessPoint, clusterName) + if err := process.setupTLSConfigClientCAGeneratorForCluster(tlsConfig, accessPoint, clusterName); err != nil { + return nil, trace.Wrap(err) + } return tlsConfig, nil } @@ -5060,41 +5085,55 @@ func setupTLSConfigALPNProtocols(tlsConfig *tls.Config) { tlsConfig.NextProtos = apiutils.Deduplicate(append(tlsConfig.NextProtos, alpncommon.ProtocolsToString(alpncommon.SupportedProtocols)...)) } -func setupTLSConfigClientCAsForCluster(tlsConfig *tls.Config, accessPoint auth.ReadProxyAccessPoint, clusterName string) { - tlsConfig.GetConfigForClient = func(*tls.ClientHelloInfo) (*tls.Config, error) { - tlsClone := tlsConfig.Clone() +func (process *TeleportProcess) setupTLSConfigClientCAGeneratorForCluster(tlsConfig *tls.Config, accessPoint auth.ReadProxyAccessPoint, clusterName string) error { + // create a local copy of the TLS config so we can change some settings that are only + // relevant to the config returned by GetConfigForClient. + tlsClone := tlsConfig.Clone() + + // Set client auth to "verify client cert if given" to support + // app access CLI flow. + // + // Clients (like curl) connecting to the web proxy endpoint will + // present a client certificate signed by the cluster's user CA. + // + // Browser connections to web UI and other clients (like database + // access) connecting to web proxy won't be affected since they + // don't present a certificate. + tlsClone.ClientAuth = tls.VerifyClientCertIfGiven + + // Set up the client CA generator containing for the local cluster's CAs in + // order to be able to validate certificates provided by app access CLI clients. + generator, err := auth.NewClientTLSConfigGenerator(auth.ClientTLSConfigGeneratorConfig{ + TLS: tlsClone, + ClusterName: clusterName, + PermitRemoteClusters: false, + AccessPoint: accessPoint, + }) + if err != nil { + return trace.Wrap(err) + } - // Set client auth to "verify client cert if given" to support - // app access CLI flow. - // - // Clients (like curl) connecting to the web proxy endpoint will - // present a client certificate signed by the cluster's user CA. - // - // Browser connections to web UI and other clients (like database - // access) connecting to web proxy won't be affected since they - // don't present a certificate. - tlsClone.ClientAuth = tls.VerifyClientCertIfGiven - - // Build the client CA pool containing the cluster's user CA in - // order to be able to validate certificates provided by app - // access CLI clients. - var err error - tlsClone.ClientCAs, _, err = auth.DefaultClientCertPool(accessPoint, clusterName) - if err != nil { - return nil, trace.Wrap(err) - } + process.OnExit("closer", func(payload interface{}) { + generator.Close() + }) - return tlsClone, nil - } + // set getter on the original TLS config. + tlsConfig.GetConfigForClient = generator.GetConfigForClient + + // note: generator will be closed via the passed in context, rather than an explicit call to Close. + return nil } -func (process *TeleportProcess) setupALPNTLSConfigForWeb(serverTLSConfig *tls.Config, accessPoint auth.ReadProxyAccessPoint, clusterName string) *tls.Config { +func (process *TeleportProcess) setupALPNTLSConfigForWeb(serverTLSConfig *tls.Config, accessPoint auth.ReadProxyAccessPoint, clusterName string) (*tls.Config, error) { tlsConfig := utils.TLSConfig(process.Config.CipherSuites) tlsConfig.Certificates = serverTLSConfig.Certificates setupTLSConfigALPNProtocols(tlsConfig) - setupTLSConfigClientCAsForCluster(tlsConfig, accessPoint, clusterName) - return tlsConfig + if err := process.setupTLSConfigClientCAGeneratorForCluster(tlsConfig, accessPoint, clusterName); err != nil { + return nil, trace.Wrap(err) + } + + return tlsConfig, nil } func setupALPNRouter(listeners *proxyListeners, serverTLSConfig *tls.Config, cfg *servicecfg.Config) (router, rtRouter *alpnproxy.Router) { diff --git a/lib/service/service_test.go b/lib/service/service_test.go index 7e33e3ca89c74..bc07c3f6e5a01 100644 --- a/lib/service/service_test.go +++ b/lib/service/service_test.go @@ -766,6 +766,11 @@ type mockAccessPoint struct { auth.ProxyAccessPoint } +// NewWatcher needs to be defined so that we can test proxy TLS config setup without panicing. +func (m *mockAccessPoint) NewWatcher(_ context.Context, _ types.Watch) (types.Watcher, error) { + return nil, trace.NotImplemented("mock access point does not produce events") +} + type mockReverseTunnelServer struct { reversetunnelclient.Server } From 590407de51910275c288365398610a6d2d5a9a96 Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Tue, 30 Apr 2024 10:21:17 +0100 Subject: [PATCH 14/28] Use Bot resource in Machine ID deployment guides (#40944) * Use bot yaml resource in machine id deployment guides * Update the number for the k8s guide steps * Update docs/pages/includes/machine-id/create-a-bot.mdx Co-authored-by: Gavin Frazar * Update docs/pages/includes/machine-id/create-a-bot.mdx Co-authored-by: Gavin Frazar * Update docs/pages/machine-id/deployment/spacelift.mdx Co-authored-by: Gavin Frazar * Update docs/pages/machine-id/deployment/spacelift.mdx Co-authored-by: Gavin Frazar * Fix heading level --------- Co-authored-by: Gavin Frazar --- .../includes/machine-id/create-a-bot.mdx | 26 ++++ docs/pages/machine-id/deployment/aws.mdx | 23 +-- docs/pages/machine-id/deployment/azure.mdx | 23 +-- docs/pages/machine-id/deployment/circleci.mdx | 16 +- docs/pages/machine-id/deployment/gcp.mdx | 23 +-- .../machine-id/deployment/github-actions.mdx | 16 +- docs/pages/machine-id/deployment/gitlab.mdx | 18 +-- .../machine-id/deployment/kubernetes.mdx | 20 ++- .../pages/machine-id/deployment/spacelift.mdx | 138 ++++++++++-------- 9 files changed, 167 insertions(+), 136 deletions(-) create mode 100644 docs/pages/includes/machine-id/create-a-bot.mdx diff --git a/docs/pages/includes/machine-id/create-a-bot.mdx b/docs/pages/includes/machine-id/create-a-bot.mdx new file mode 100644 index 0000000000000..46541ba93a4dc --- /dev/null +++ b/docs/pages/includes/machine-id/create-a-bot.mdx @@ -0,0 +1,26 @@ +Next, you need to create a Bot. A Bot is a Teleport identity for a machine or +group of machines. Like users, bots have a set of roles and traits which define +what they can access. + +Create `bot.yaml`: + +```yaml +kind: bot +version: v1 +metadata: + # name is a unique identifier for the Bot in the cluster. + name: example +spec: + # roles is a list of roles to grant to the Bot. Don't worry if you don't know + # what roles you need to specify here, the Access Guides will walk you through + # creating and assigning roles to the already created Bot. + roles: [] +``` + +Make sure you replace `example` with a unique, descriptive name for your Bot. + +Use `tctl` to apply this file: + +```code +$ tctl create bot.yaml +``` \ No newline at end of file diff --git a/docs/pages/machine-id/deployment/aws.mdx b/docs/pages/machine-id/deployment/aws.mdx index 273c914b06190..90b3240e2e053 100644 --- a/docs/pages/machine-id/deployment/aws.mdx +++ b/docs/pages/machine-id/deployment/aws.mdx @@ -32,7 +32,7 @@ guidance on deploying Machine ID as a workload on Kubernetes. - An AWS EC2 virtual machine that you wish to install Machine ID onto configured with the IAM role attached. -## Step 1/4. Install `tbot` +## Step 1/5. Install `tbot` **This step is completed on the AWS EC2 instance.** @@ -43,7 +43,13 @@ Download and install the appropriate Teleport package for your platform: (!docs/pages/includes/install-linux.mdx!) -## Step 2/4. Create the bot +## Step 2/5. Create a Bot + +**This step is completed on your local machine.** + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 3/5. Create a join token **This step is completed on your local machine.** @@ -57,7 +63,7 @@ metadata: name: example-bot spec: roles: [Bot] - # bot_name will match the name of the bot created later in this guide. + # bot_name should match the name of the bot created earlier in this guide. bot_name: example join_method: iam # Restrict the AWS account and (optionally) ARN that can use this token. @@ -73,6 +79,7 @@ Replace: - `111111111111` with the ID of your AWS account. - `teleport-bot-role` with the name of the AWS IAM role you created and assigned to the EC2 instance. +- `example` with the name of the bot you created in the second step. - `i-*` indicates that any instance with the specified role can use the join method. If you wish to restrict this to an individual instance, replace `i-*` with the full instance ID. @@ -83,13 +90,7 @@ Use `tctl` to apply this file: $ tctl create -f bot-token.yaml ``` -Create the bot, specifying the token that you have created: - -```code -$ tctl bots add example --token example-bot -``` - -## Step 3/4. Configure `tbot` +## Step 4/5. Configure `tbot` **This step is completed on the AWS EC2 instance.** @@ -115,7 +116,7 @@ Replace: (!docs/pages/includes/machine-id/daemon-or-oneshot.mdx!) -## Step 4/4. Configure outputs +## Step 5/5. Configure outputs (!docs/pages/includes/machine-id/configure-outputs.mdx!) diff --git a/docs/pages/machine-id/deployment/azure.mdx b/docs/pages/machine-id/deployment/azure.mdx index 8addc69183d3e..4c6f688b7534b 100644 --- a/docs/pages/machine-id/deployment/azure.mdx +++ b/docs/pages/machine-id/deployment/azure.mdx @@ -29,7 +29,7 @@ occur without the use of a long-lived secret. - An Azure VM you wish to install Machine ID onto with the managed identity configured as a user-assigned managed identity. -## Step 1/4. Install `tbot` +## Step 1/5. Install `tbot` **This step is completed on the Azure VM.** @@ -40,7 +40,13 @@ Download and install the appropriate Teleport package for your platform: (!docs/pages/includes/install-linux.mdx!) -## Step 2/4. Create a join token and bot user +## Step 2/5. Create a Bot + +**This step is completed on your local machine.** + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 3/5. Create a join token **This step is completed on your local machine.** @@ -54,7 +60,7 @@ metadata: name: example-bot spec: roles: [Bot] - # bot_name will match the name of the bot created later in this guide. + # bot_name should match the name of the bot created earlier in this guide. bot_name: example join_method: azure azure: @@ -71,6 +77,7 @@ spec: Replace: - `11111111-1111-1111-1111-111111111111` with the UID of your Azure subscription +- `example` with the name of the bot you created in the second step - `group1` with the name of the resource group that the VM resides within or omit this entirely to allow joining from any VM within the subscription @@ -80,13 +87,7 @@ Use `tctl` to apply this file: $ tctl create -f bot-token.yaml ``` -Create the bot, specifying the token that you have created: - -```code -$ tctl bots add example --token example-bot -``` - -## Step 3/4. Configure `tbot` +## Step 4/5. Configure `tbot` **This step is completed on the Azure VM.** @@ -116,7 +117,7 @@ Replace: (!docs/pages/includes/machine-id/daemon-or-oneshot.mdx!) -## Step 4/4. Configure outputs +## Step 5/5. Configure outputs (!docs/pages/includes/machine-id/configure-outputs.mdx!) diff --git a/docs/pages/machine-id/deployment/circleci.mdx b/docs/pages/machine-id/deployment/circleci.mdx index 3babbdf2fcef8..83936526de514 100644 --- a/docs/pages/machine-id/deployment/circleci.mdx +++ b/docs/pages/machine-id/deployment/circleci.mdx @@ -60,9 +60,13 @@ https://app.circleci.com/settings/organization/github/gravitational/contexts/000 In this case, the context ID is: `00000000-0000-0000-0000-000000000000`. Note this value down and substitute `$CONTEXT_ID` in configuration examples -with this. +with this -## Step 2/5. Create the join token for CircleCI +## Step 2/5. Create the Machine ID bot + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 3/5. Create the join token for CircleCI In order to allow your CircleCI workflow to authenticate with your Teleport cluster, you'll first need to create a join token. These tokens set out criteria @@ -110,14 +114,6 @@ Apply this to your Teleport cluster using `tctl`: $ tctl create -f bot-token.yaml ``` -## Step 3/5. Create the Machine ID bot - -Create the bot, specifying the token that you have created: - -```code -$ tctl bots add example --token=example-bot -``` - ## Step 4/5. Configure a CircleCI workflow With the bot and join token created, you can now configure a CircleCI diff --git a/docs/pages/machine-id/deployment/gcp.mdx b/docs/pages/machine-id/deployment/gcp.mdx index f329255bdac59..ccb5ef47574b7 100644 --- a/docs/pages/machine-id/deployment/gcp.mdx +++ b/docs/pages/machine-id/deployment/gcp.mdx @@ -32,7 +32,7 @@ guidance on deploying Machine ID as a workload on Kubernetes. - A GCP Compute Engine VM that you wish to install Machine ID onto that has been configured with the GCP service account. -## Step 1/4. Install `tbot` +## Step 1/5. Install `tbot` **This step is completed on the GCP VM.** @@ -43,7 +43,13 @@ Download and install the appropriate Teleport package for your platform: (!docs/pages/includes/install-linux.mdx!) -## Step 2/4. Create a join token and bot user +## Step 2/5. Create a Bot + +**This step is completed on your local machine.** + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 3/5. Create a join token **This step is completed on your local machine.** @@ -57,7 +63,7 @@ metadata: name: example-bot spec: roles: [Bot] - # bot_name will match the name of the bot created later in this guide. + # bot_name should match the name of the bot created earlier in this guide. bot_name: example join_method: gcp gcp: @@ -75,6 +81,7 @@ spec: Replace: - `my-project-123456` with the ID of your GCP project +- `example` with the name of the bot you created in the second step. - `my-service-account@my-project-123456.iam.gserviceaccount.com` with the email of the service account configured in the previous step. The default compute service account is not supported. @@ -85,13 +92,7 @@ Use `tctl` to apply this file: $ tctl create -f bot-token.yaml ``` -Create the bot, specifying the token that you have created: - -```code -$ tctl bots add example --token example-bot -``` - -## Step 3/4. Configure `tbot` +## Step 4/5. Configure `tbot` **This step is completed on the GCP VM.** @@ -117,7 +118,7 @@ Replace: (!docs/pages/includes/machine-id/daemon-or-oneshot.mdx!) -## Step 4/4. Configure outputs +## Step 5/5. Configure outputs (!docs/pages/includes/machine-id/configure-outputs.mdx!) diff --git a/docs/pages/machine-id/deployment/github-actions.mdx b/docs/pages/machine-id/deployment/github-actions.mdx index a46c4910eab34..7dffc8b51252d 100644 --- a/docs/pages/machine-id/deployment/github-actions.mdx +++ b/docs/pages/machine-id/deployment/github-actions.mdx @@ -20,7 +20,11 @@ Actions runners as well as GitHub Enterprise Server. `gravitational/example` repo, however this value should be replaced with your own unique repo. -## Step 1/3. Create a join token for GitHub Actions +## Step 1/3. Create a Bot + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 2/3. Create a join token for GitHub Actions In order to allow your GitHub Actions workflow to authenticate with your Teleport cluster, you'll first need to create a join token. These tokens set out @@ -47,7 +51,7 @@ spec: roles: [Bot] join_method: github # The bot_name indicates which bot user this token grants access to. This - # should match the name of the bot that you will create in the next step. + # should match the name of the bot that you created in the previous step. bot_name: example github: # allow specifies rules that control which GitHub Actions runs will be @@ -114,14 +118,6 @@ Token Type Labels Expiry Time (UTC) example-bot Bot 01 Jan 00 00:00 UTC (2562047h47m16.854775807s) ``` -## Step 2/3. Create a Machine ID bot - -Create the bot, specifying the token that you have created: - -```code -$ tctl bots add example --roles=example-bot --token=example-bot -``` - ## Step 3/3. Configure a GitHub Actions Workflow Now that the bot has been successfully created, you now need to configure your diff --git a/docs/pages/machine-id/deployment/gitlab.mdx b/docs/pages/machine-id/deployment/gitlab.mdx index 96d66a514d3e4..ed5d608d4bc4e 100644 --- a/docs/pages/machine-id/deployment/gitlab.mdx +++ b/docs/pages/machine-id/deployment/gitlab.mdx @@ -28,7 +28,11 @@ using a self-hosted GitLab instance, your Teleport Auth Server must be able to connect to your GitLab instance and your GitLab instance must be configured with a valid TLS certificate.** -## Step 1/4. Create a join token +## Step 1/4. Create a Bot + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 2/4. Create a join token To allow GitLab CI to authenticate to your Teleport cluster, you'll first need to create a join token. A GitLab join token contains allow rules that describe @@ -55,7 +59,7 @@ spec: roles: [Bot] join_method: gitlab # The bot_name indicates which bot user this token grants access to. This - # should match the name of the bot that you create in step 2. + # should match the name of the bot that you created in step 1. bot_name: example gitlab: # domain should be the domain of your GitLab instance. If you are using @@ -80,14 +84,6 @@ Apply this to your Teleport cluster using `tctl`: $ tctl create -f bot-token.yaml ``` -## Step 2/4. Create a Machine ID bot - -Create the bot, specifying the token that you have created: - -```code -$ tctl bots add example --token=example-bot -``` - ## Step 3/4. Configure a GitLab Pipeline With the bot and join token created, you can now configure a GitLab pipeline @@ -167,7 +163,7 @@ Commit and push these two files to the repository. Check your GitLab CI status, and examine the log results from the commit for failure. -### Step 4/4. Configure outputs +## Step 4/4. Configure outputs (!docs/pages/includes/machine-id/configure-outputs.mdx!) diff --git a/docs/pages/machine-id/deployment/kubernetes.mdx b/docs/pages/machine-id/deployment/kubernetes.mdx index 99b64c4ce6a7d..051c1505d1467 100644 --- a/docs/pages/machine-id/deployment/kubernetes.mdx +++ b/docs/pages/machine-id/deployment/kubernetes.mdx @@ -57,7 +57,7 @@ The examples in this guide will install a `tbot` deployment in the `default` Namespace of the Kubernetes cluster. Adjust references to `default` to the Namespace you wish to use. -## Step 1/4. Prepare Kubernetes RBAC +## Step 1/5. Prepare Kubernetes RBAC In order to prepare the Kubernetes cluster for Machine ID, several Kubernetes RBAC resources must be created. @@ -118,7 +118,11 @@ Apply this file to your Kubernetes cluster: $ kubectl apply -f ./k8s-rbac.yaml ``` -## Step 2/4. Create a join token and bot user +## Step 2/5. Create a Bot + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 3/5. Create a join token Next, a join token needs to be configured. This will be used by `tbot` to join the cluster. As the `kubernetes` join method will be used, the public key of the @@ -146,7 +150,7 @@ metadata: name: example-bot spec: roles: [Bot] - # bot_name will match the name of the bot created later in this guide. + # bot_name should match the name of the bot created earlier in this guide. bot_name: example join_method: kubernetes kubernetes: @@ -169,13 +173,7 @@ Use `tctl` to apply this file: $ tctl create -f bot-token.yaml ``` -Create the bot, specifying the token that you have created: - -```code -$ tctl bots add example --token example-bot -``` - -## Step 3/4. Create a `tbot` deployment +## Step 4/5. Create a `tbot` deployment First, a ConfigMap will be created to contain the configuration file for `tbot`. This will then be mounted into the Pod. @@ -311,7 +309,7 @@ $ kubectl logs deployment/tbot With this complete, `tbot` is now successfully deployed to your cluster. However, it is not yet producing any useful output. -## Step 4/4. Configure outputs +## Step 5/5. Configure outputs Follow one of the [access guides](../access-guides.mdx) to configure an output that meets your access needs. diff --git a/docs/pages/machine-id/deployment/spacelift.mdx b/docs/pages/machine-id/deployment/spacelift.mdx index 178b37181ea49..1aea4978f3872 100644 --- a/docs/pages/machine-id/deployment/spacelift.mdx +++ b/docs/pages/machine-id/deployment/spacelift.mdx @@ -30,7 +30,82 @@ resources. - A paid Spacelift account. This is required to use the `spacelift` join method. - Your Teleport user should have the privileges to create token resources. -## Step 1/3. Create a join token for Spacelift +## Step 1/3. Create a role and Machine ID bot + +Create `example-bot-role.yaml`, which declares a Teleport role that we will +assign to the bot user for Spacelift. `tbot` generates short-lived credentials +that grant the user access to this role, allowing Spacelift to manage dynamic +Teleport resources using Terraform: + +```yaml +kind: role +version: v5 +metadata: + name: example-bot +spec: + allow: + rules: + - resources: + - app + - cluster_auth_preference + - cluster_networking_config + - db + - device + - github + - login_rule + - oidc + - okta_import_rule + - role + - saml + - session_recording_config + - token + - trusted_cluster + - user + verbs: + - create + - read + - update + - delete + - list + deny: {} + options: {} +``` + +This role grants access to create, update, delete, and list a number of Teleport +resources. You may wish to remove resources that you do not intend to configure +with Terraform from this list to reduce blast radius. See the [Teleport Role +Reference](../../access-controls/reference.mdx#rbac-for-dynamic-teleport-resources) +for the dynamic resources you can grant access to in a Teleport role. + +Create this role by applying the manifest: + +``` +$ tctl create example-bot-role.yaml +``` + +Create `bot.yaml`: + +```yaml +kind: bot +version: v1 +metadata: + # name is a unique identifier for the Bot in the cluster. + name: example +spec: + # we specify the role that we just created to grant it to the Bot + roles: + - example-bot +``` + +Make sure you replace `example` with a unique, descriptive, name for your Bot. + +Use `tctl` to apply this file: + +```code +$ tctl create bot.yaml +``` + +## Step 2/3. Create a join token for Spacelift In order to allow your Spacelift stack to authenticate with your Teleport cluster, you'll first need to create a join token. A join token sets out @@ -53,7 +128,7 @@ spec: roles: [Bot] join_method: spacelift # The bot_name indicates which bot user this token grants access to. This - # should match the name of the bot that you will create in the next step. + # should match the name of the bot that you created in the previous step. bot_name: example spacelift: # hostname should be the hostname of your Spacelift tenant. @@ -91,65 +166,6 @@ Token Type Labels Expiry Time (UTC) example-bot Bot ``` -## Step 2/3. Create a role and Machine ID bot - -Create `example-bot-role.yaml`, which declares a Teleport role that we will -assign to the bot user for Spacelift. `tbot` generates short-lived credentials -that grant the user access to this role, allowing Spacelift to manage dynamic -Teleport resources using Terraform: - -```yaml -kind: role -version: v5 -metadata: - name: example-bot -spec: - allow: - rules: - - resources: - - app - - cluster_auth_preference - - cluster_networking_config - - db - - device - - github - - login_rule - - oidc - - okta_import_rule - - role - - saml - - session_recording_config - - token - - trusted_cluster - - user - verbs: - - create - - read - - update - - delete - - list - deny: {} - options: {} -``` - -This role grants access to create, update, delete, and list a number of Teleport -resources. You may wish to remove resources that you do not intend to configure -with Terraform from this list to reduce blast radius. See the [Teleport Role -Reference](../../access-controls/reference.mdx#rbac-for-dynamic-teleport-resources) -for the dynamic resources you can grant access to in a Teleport role. - -Create this role by applying the manifest: - -``` -$ tctl create -f example-bot-role.yaml -``` - -Create the bot, specifying the role and token that you have created: - -```code -$ tctl bots add example --roles=example-bot --token=example-bot -``` - ## Step 3/3. Configure your Spacelift stack While following this step, you will modify your git repo to: From 472ff77adc82b6536483088c8a435846f35f3365 Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Tue, 30 Apr 2024 11:36:22 +0100 Subject: [PATCH 15/28] Document TPM join method (#40864) * Add TPM to join method reference page * Skeleton out the Linux/TPM guide * Add yaml for join token * Flesh out TPM joining guide * Try var * Add note on FIPS 140-2 compliance * Add more vars * ADd more background to how TPM joining works * Clarify statement on most secure * Add `tbot tpm identify` to cli reference * Rename background to `how it works` * Update docs/config.json Co-authored-by: Paul Gottschling * Update docs/pages/includes/tpm-joining-background.mdx Co-authored-by: Paul Gottschling * Update docs/pages/includes/tpm-joining-background.mdx Co-authored-by: Paul Gottschling * Update docs/pages/includes/tpm-joining-background.mdx Co-authored-by: Paul Gottschling * Update docs/pages/machine-id/deployment/linux-tpm.mdx Co-authored-by: Paul Gottschling * Use Create A Bot template * Expand TPM * Reword tpm joining background * Fix trailing , * Mention enterprise licensing * cspell --------- Co-authored-by: Paul Gottschling --- docs/config.json | 4 + docs/cspell.json | 2 + .../includes/provision-token/tpm-spec.mdx | 51 +++++ .../pages/includes/tpm-joining-background.mdx | 30 +++ docs/pages/machine-id/deployment.mdx | 29 +-- .../pages/machine-id/deployment/linux-tpm.mdx | 208 ++++++++++++++++++ docs/pages/reference/cli/tbot.mdx | 12 + docs/pages/reference/join-methods.mdx | 12 + 8 files changed, 334 insertions(+), 14 deletions(-) create mode 100644 docs/pages/includes/provision-token/tpm-spec.mdx create mode 100644 docs/pages/includes/tpm-joining-background.mdx create mode 100644 docs/pages/machine-id/deployment/linux-tpm.mdx diff --git a/docs/config.json b/docs/config.json index cc9f0c9a03b83..7aff183fc0dcf 100644 --- a/docs/config.json +++ b/docs/config.json @@ -1550,6 +1550,10 @@ "title": "Linux Server", "slug": "/machine-id/deployment/linux/" }, + { + "title": "Linux Server (TPM)", + "slug": "/machine-id/deployment/linux-tpm/" + }, { "title": "Kubernetes", "slug": "/machine-id/deployment/kubernetes/" diff --git a/docs/cspell.json b/docs/cspell.json index 5d40a1c279a33..ebafcffeef288 100644 --- a/docs/cspell.json +++ b/docs/cspell.json @@ -37,6 +37,7 @@ "CTAP", "CXXXXXXXXX", "Callouts", + "cryptoprocessor", "Cgajq", "DBSIZE", "DEBU", @@ -682,6 +683,7 @@ "pidof", "pkill", "pkinit", + "PKIX", "plugindata", "portforward", "postgresqlselfhosted", diff --git a/docs/pages/includes/provision-token/tpm-spec.mdx b/docs/pages/includes/provision-token/tpm-spec.mdx new file mode 100644 index 0000000000000..5ba8a6b021061 --- /dev/null +++ b/docs/pages/includes/provision-token/tpm-spec.mdx @@ -0,0 +1,51 @@ +```yaml +kind: token +version: v2 +metadata: + # name identifies the token. When configuring a bot or node to join using this + # token, this name should be specified. + name: tpm-token +spec: + # For Machine ID and TPM joining, roles will always be "Bot" and + # join_method will always be "tpm". + roles: [Bot] + join_method: tpm + + # bot_name specifies the name of the bot that this token will grant access to + # when it is used. + bot_name: tpm-demo + + # tpm specifies the TPM join method specific configuration for this token. + tpm: + # ekcert_allowed_cas is a list of CA certificates that will be used to + # validate TPM EKCerts. These should be PEM wrapped. + # + # When specified, joining TPMs must present an EKCert signed by one of the + # specified CAs. TPMs that do not present an EKCert will be not permitted to + # join. + # + # When unspecified, TPMs will be allowed to join with either an EKCert or an + # EKPubHash. + ekcert_allowed_cas: + - | + -----BEGIN CERTIFICATE----- + ... CA Certificate Data ... + -----END CERTIFICATE----- + # allow is a list of Rules, the presented TPM must match one allow rule to + # be permitted to join using this token. + allow: + # description is a human-readable description of the rule. It has no + # bearing on whether a TPM is allowed to join, but can be used to + # associate a rule with a specific host (e.g the asset tag of the server + # in which the TPM resides). + - description: "example-build-server-100" + # ek_public_hash is the SHA256 hash of the EKPub marshaled in PKIX format + # and encoded in hexadecimal. This value will also be checked when a TPM + # has submitted an EKCert, and the public key in the EKCert will be used + # for this check. + ek_public_hash: "d4b4example6fabfc568d74f2example6c35a05337d7af9a6example6c891aa6" + # ek_certificate_serial is the serial number of the EKCert in hexadecimal + # with colon separated nibbles. This value will not be checked when a TPM + # does not have an EKCert configured. + ek_certificate_serial: "01:23:45:67:89:ex:am:pl:e0:23:45:67:89:ab:cd:ef" +``` \ No newline at end of file diff --git a/docs/pages/includes/tpm-joining-background.mdx b/docs/pages/includes/tpm-joining-background.mdx new file mode 100644 index 0000000000000..1291a403b3b94 --- /dev/null +++ b/docs/pages/includes/tpm-joining-background.mdx @@ -0,0 +1,30 @@ +The `tpm` join method is a secure way for Bots and Agents to authenticate with +the Teleport Auth Service without using any shared secrets. Instead of using a +hared secret, the unique identity of the host's Trusted Platform Module (TPM) +and public key cryptography is used to authenticate the host. + +In environments where there is no other form of identity available to machines, +e.g on-prem, this is the most secure method for joining. It avoids the need to +distribute a shared secret as is needed for the `token` join method. + +A Trusted Platform Module (TPM) is a secure, physical cryptoprocessor that is +installed on a host. TPMs can store cryptographic material and perform a number +of cryptographic operations, without exposing the cryptographic material to the +operating system. Each TPM has a unique key pair burned-in known as the +Endorsement Key (EK). + +Some TPMs also contain an X.509 certificate for this key pair that is signed by +the manufacturer's CA. This is known as the EK Certificate (EKCert). This +certificate can be used by the TPM to prove to a third-party (who trusts the +manufacturer's CA) that the TPM is genuine and abides by the TPM specification. + +When using the `tpm` join method, you must first query the TPM's public key and +then create a join token that explicitly allows this public key. Even if the +host operating system is reinstalled, the EK public key will not change, meaning +that the TPM will still be usable to join your Teleport cluster. If you have a +large number of hosts, it may make sense to use automation tooling such as +ansible to query the TPMs across your fleet and then generate join tokens. + + +The `tpm` join method is currently not compatible with FIPS 140-2. + \ No newline at end of file diff --git a/docs/pages/machine-id/deployment.mdx b/docs/pages/machine-id/deployment.mdx index a9acf98671cf2..f1724bd92970e 100644 --- a/docs/pages/machine-id/deployment.mdx +++ b/docs/pages/machine-id/deployment.mdx @@ -52,23 +52,24 @@ and [Architecture](./architecture.mdx) to plan your deployment. Read the following guides for how to deploy Machine ID on your cloud platform or on-prem infrastructure. -|Platform|Installation method|Join method| -|---|---|---| -|[Linux](./deployment/linux.mdx)|Package manager or TAR archive|Static join token| -|[GCP](./deployment/gcp.mdx)|Package manager, TAR archive, or Kubernetes pod|Identity document signed by GCP| -|[AWS](./deployment/aws.mdx)|Package manager, TAR archive, or Kubernetes pod|Identity document signed by AWS| -|[Azure](./deployment/azure.mdx)|Package manager or TAR archive|Identity document signed by Azure| -|[Kubernetes](./deployment/kubernetes.mdx)|Kubernetes pod|Identity document signed by your Kubernetes cluster| +| Platform | Installation method | Join method | +|-------------------------------------------|-------------------------------------------------|-----------------------------------------------------| +| [Linux](./deployment/linux.mdx) | Package manager or TAR archive | Static join token | +| [Linux (TPM)](./deployment/linux-tpm.mdx) | Package manager or TAR archive | Attestation from TPM 2.0 | +| [GCP](./deployment/gcp.mdx) | Package manager, TAR archive, or Kubernetes pod | Identity document signed by GCP | +| [AWS](./deployment/aws.mdx) | Package manager, TAR archive, or Kubernetes pod | Identity document signed by AWS | +| [Azure](./deployment/azure.mdx) | Package manager or TAR archive | Identity document signed by Azure | +| [Kubernetes](./deployment/kubernetes.mdx) | Kubernetes pod | Identity document signed by your Kubernetes cluster | ### CI/CD Read the following guides for how to deploy Machine ID on a continuous integration and continuous deployment platform -|Platform|Installation method|Join method| -|---|---|---| -|[CircleCI](./deployment/circleci.mdx)|TAR archive|CircleCI-signed identity document| -|[GitLab](./deployment/gitlab.mdx)|TAR archive|GitLab-signed identity document| -|[GitHub Actions](./deployment/github-actions.mdx)|Teleport job available through the GitHub Actions marketplace|GitHub-signed identity document.| -|[Jenkins](./deployment/jenkins.mdx)|Package manager or TAR archive|Static join token| -|[Spacelift](./deployment/spacelift.mdx)|Docker Image|Spacelift-signed identity document| +| Platform | Installation method | Join method | +|---------------------------------------------------|---------------------------------------------------------------|------------------------------------| +| [CircleCI](./deployment/circleci.mdx) | TAR archive | CircleCI-signed identity document | +| [GitLab](./deployment/gitlab.mdx) | TAR archive | GitLab-signed identity document | +| [GitHub Actions](./deployment/github-actions.mdx) | Teleport job available through the GitHub Actions marketplace | GitHub-signed identity document. | +| [Jenkins](./deployment/jenkins.mdx) | Package manager or TAR archive | Static join token | +| [Spacelift](./deployment/spacelift.mdx) | Docker Image | Spacelift-signed identity document | diff --git a/docs/pages/machine-id/deployment/linux-tpm.mdx b/docs/pages/machine-id/deployment/linux-tpm.mdx new file mode 100644 index 0000000000000..82db23016d99b --- /dev/null +++ b/docs/pages/machine-id/deployment/linux-tpm.mdx @@ -0,0 +1,208 @@ +--- +title: Deploying Machine ID on Linux (TPM) +description: How to install and configure Machine ID on a Linux host and use a TPM 2.0 for authentication +--- + +This page explains how to deploy Machine ID on a Linux host, and use the +secure identify of the onboard TPM 2.0 chip for authenticating with the +Teleport cluster. + +The `tpm` join method requires a valid Teleport Enterprise license to be +installed on the cluster's Auth Service. + +## How it works + +(!docs/pages/includes/tpm-joining-background.mdx!) + +## Prerequisites + +(!docs/pages/includes/edition-prereqs-tabs.mdx!) + +- (!docs/pages/includes/tctl.mdx!) +- A Linux host that you wish to install Machine ID onto, with a TPM2.0 + installed. +- A Linux user on that host that you wish Machine ID to run as. In the guide, +we will use `teleport` for this. + +## Step 1/5. Install `tbot` + +**This step is completed on the Linux host.** + +First, `tbot` needs to be installed on the VM that you wish to use Machine ID +on. + +Download the appropriate Teleport package for your platform: + +(!docs/pages/includes/install-linux.mdx!) + +### Granting `tbot` access to the TPM device + +If the user that will run `tbot` is not `root`, you will also need to configure +Linux to allow the user to access the TPM device. + +The simplest way to solve this is to check if your distro ships with the `tss` +group and assign it the user. If that is not possible, or you are looking +for a different solution, we recommend creating udev rules similar to the ones +shipped by the [TPM2 Software Stack]( +https://github.com/tpm2-software/tpm2-tss/blob/ede63dd1ac1f0a46029d457304edcac2162bfab8/dist/tpm-udev.rules#L4). + +## Step 2/5. Create a Bot + +(!docs/pages/includes/machine-id/create-a-bot.mdx!) + +## Step 3/5. Create a `tpm` join token + +With the Bot created, we now need to create a token. The token will be used by +`tbot` to authenticate as the Bot to the Teleport cluster. + +### Determining the EKPub Hash or EKCert Serial for your TPM + +First, you need to determine the characteristics of the TPM on the host that +you wish to use Machine ID on. These characteristics will then be used within +the allow rules of the join token to grant access to this specific host. + +On the machine, run `tbot tpm identify`: + +```code +$ tbot tpm identify +TPM Information +EKPub Hash: 6c5aada1c5abee6d869369a0example2fd2beb41c850d3f0227f029c4fffc4ba +EKCert Detected: true +EKCert Serial: 5e:cd:5f:8e +``` + +Take the long hexadecimal string after `EKPub Hash` and assign it to +. This uniquely identifies this TPM and will be +used in the join token. + +### Obtaining the manufacturer CA + +If in the previous step, `EKCert Detected` was `false`, then you can disregard +this section. + +If in the previous step, `EKCert Detected` was `true`, then it is recommended +to obtain the manufacturer's CA certificate. This will allow the TPM to be +validated as legitimately manufactured as part of the join process. + +Instructions for obtaining the EKCert CA will vary from TPM to TPM. Consult +your TPM's documentation for more information or contact your supplier. + +### Creating the join token + +Create a file named `bot-token.yaml`: + +```yaml +kind: token +version: v2 +metadata: + # name identifies the token. Try to ensure that this is descriptive. + name: +spec: + # For Machine ID and TPM joining, roles will always be "Bot" and + # join_method will always be "tpm". + roles: [Bot] + join_method: tpm + + # bot_name specifies the name of the bot that this token will grant access to + # when it is used. + bot_name: + + # tpm specifies the TPM join method specific configuration for this token. + tpm: + # ekcert_allowed_cas is a list of CA certificates that will be used to + # validate TPM EKCerts. These should be PEM wrapped. + # + # When specified, joining TPMs must present an EKCert signed by one of the + # specified CAs. TPMs that do not present an EKCert will be not permitted to + # join. + ekcert_allowed_cas: + - | + -----BEGIN CERTIFICATE----- + ... CA Certificate Data ... + -----END CERTIFICATE----- + # allow is a list of Rules, the presented TPM must match one allow rule to + # be permitted to join using this token. + allow: + # description is a human-readable description of the rule. It has no + # bearing on whether a TPM is allowed to join, but can be used to + # associate a rule with a specific host (e.g the asset tag of the server + # in which the TPM resides). + - description: "example-server-100" + # ek_public_hash is the SHA256 hash of the EKPub marshaled in PKIX format + # and encoded in hexadecimal. This value will also be checked when a TPM + # has submitted an EKCert, and the public key in the EKCert will be used + # for this check. + ek_public_hash: "" +``` + +If your TPM includes an EKCert and you have obtained the manufacturer's CA, +replace the `ekcert_allowed_cas` section with the PEM wrapped CA certificate. +Otherwise, remove this section. + +If you have multiple hosts that you wish to authenticate as the same Bot, you +can add additional rules the `allow` list, one for each host. + +Apply this to your Teleport cluster using `tctl`: + +```code +$ tctl create -f bot-token.yaml +``` + +## Step 4/5. Configure `tbot` + +Create `/etc/tbot.yaml`: + +```yaml +version: v2 +proxy_server: example.teleport.sh:443 +onboarding: + join_method: tpm + token: +storage: + type: directory + path: /var/lib/teleport/bot +# outputs will be filled in during the completion of an access guide. +outputs: [] +``` + +Replace: + +- `example.teleport.sh:443` with the address of your Teleport Proxy. + +### Prepare the storage directory + +The `tbot` service requires a way to store its state, such as internal +credentials, across restarts. This is known as the storage destination. + +For this example, we will use the directory `/var/lib/teleport/bot`. + +As this directory will store the bots sensitive credentials, it is important +to protect it. To do this, you will configure the directory to only be +accessible to the Linux user which `tbot` will run as. + +Execute the following, replacing `teleport` with the Linux user that you will +run `tbot` as: + +```code +# Make the bot directory and assign ownership to teleport user +$ sudo mkdir -p /var/lib/teleport/bot +$ sudo chown teleport:teleport /var/lib/teleport/bot +``` + +### Create a systemd service + +(!docs/pages/includes/machine-id/daemon.mdx!) + +## Step 5/5. Configure outputs + +(!docs/pages/includes/machine-id/configure-outputs.mdx!) + +## Next steps + +- Follow the [access guides](../access-guides.mdx) to finish configuring `tbot` for +your environment. +- Read the [TPM joining reference](../../reference/join-methods.mdx#trusted-platform-module-tpm) +to learn more about `tpm`joining. +- Read the [configuration reference](../reference/configuration.mdx) to explore +all the available configuration options. +- [More information about `TELEPORT_ANONYMOUS_TELEMETRY`.](../reference/telemetry.mdx) \ No newline at end of file diff --git a/docs/pages/reference/cli/tbot.mdx b/docs/pages/reference/cli/tbot.mdx index 3c0314a32fc8b..104b60e460b2e 100644 --- a/docs/pages/reference/cli/tbot.mdx +++ b/docs/pages/reference/cli/tbot.mdx @@ -17,6 +17,7 @@ The primary commands for `tbot` are as follows: | `tbot init` | Initialize a certificate destination directory for writes from a separate bot user, configuring either file or POSIX ACL permissions. | | `tbot db` | Connects to databases using native clients and queries database information. Functions as a wrapper for `tsh`, and requires `tsh` installation. | | `tbot proxy` | Allows for access to Teleport resources on a cluster using TLS Routing. Functions as a wrapper for `tsh`, and requires `tsh` installation. | +| `tbot tpm identify` | Output identifying information related to the TPM (Trusted Platform Module) detected on the system. | ## tbot db @@ -189,6 +190,7 @@ using database proxies. | `--renewal-interval` | Interval at which short-lived certificates are renewed; must be less than the certificate TTL. | | `--join-method` | Method to use to join the cluster. Can be `token` or `iam`. | | `--oneshot` | If set, quit after the first renewal. | + ## tbot start Starts the Machine ID client `tbot`, fetching and writing certificates to disk at a set interval. @@ -241,3 +243,13 @@ $ tbot start \ +## tbot tpm identify + +Output identifying information related to the TPM (Trusted Platform Module) +detected on the system. + +### Flags + +| Flag | Description | +|----------------------|------------------------------------| +| `-d/--debug` | Enable verbose logging to stderr. | \ No newline at end of file diff --git a/docs/pages/reference/join-methods.mdx b/docs/pages/reference/join-methods.mdx index 5399b05d814a7..003c5ca065d28 100644 --- a/docs/pages/reference/join-methods.mdx +++ b/docs/pages/reference/join-methods.mdx @@ -121,6 +121,7 @@ Delegated join methods are: - [`circleci`](#circleci-circleci) - [`gitlab`](#gitlab-gitlab) - [`kubernetes`](#kubernetes-kubernetes) +- [`tpm`](#trusted-platform-module-tpm) ### Renewable vs non-renewable @@ -152,6 +153,7 @@ Non-renewable join methods are: - [`circleci`](#circleci-circleci) - [`gitlab`](#gitlab-gitlab) - [`kubernetes`](#kubernetes-kubernetes) +- [`tpm`](#trusted-platform-module-tpm) ## Token resource reference @@ -413,3 +415,13 @@ to contain the new Kubernetes singing keys (update the - [Deploying Machine ID on Kubernetes](../machine-id/deployment/kubernetes.mdx) + +### Trusted Platform Module: `tpm` + +(!docs/pages/includes/tpm-joining-background.mdx!) + +(!docs/pages/includes/provision-token/tpm-spec.mdx!) + + +- [Deploying Machine ID on Linux: TPM](../machine-id/deployment/linux-tpm.mdx) + \ No newline at end of file From a9ebad1427f6343c760c61b8d3d77d8da7e2944f Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Tue, 30 Apr 2024 12:48:45 +0100 Subject: [PATCH 16/28] Feed the correct next page token to `ListAllAccessListsMembers` (#41043) This PR fixes a typo when listing all members across all Access Lists because when the number of members is bigger than the default page size (1000), `nextToken` is not empty but we always pass the an empty value to the `ListResources` call. This results in the callers to constantly call `ListAllAccessListMembers` until they run out of memory. Signed-off-by: Tiago Silva --- lib/services/simple/access_list.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/services/simple/access_list.go b/lib/services/simple/access_list.go index 4c89fc8c14d4e..c822459fcb024 100644 --- a/lib/services/simple/access_list.go +++ b/lib/services/simple/access_list.go @@ -185,7 +185,7 @@ func (a *AccessListService) DeleteAllAccessListReviews(ctx context.Context) erro } // ListAllAccessListMembers returns a paginated list of all access list members for all access lists. -func (a *AccessListService) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) { - members, nextToken, err = a.memberService.ListResources(ctx, pageSize, nextToken) +func (a *AccessListService) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) ([]*accesslist.AccessListMember, string, error) { + members, nextToken, err := a.memberService.ListResources(ctx, pageSize, pageToken) return members, nextToken, trace.Wrap(err) } From ddbd9eefedca6e897f71479c308428358f52d24e Mon Sep 17 00:00:00 2001 From: matheus Date: Tue, 30 Apr 2024 08:54:17 -0300 Subject: [PATCH 17/28] Replace `isTeam` with new flags (#39794) * Add new flags to modules * Add deprecated comments to isTeam * Make support flag an enum * Add a TODO instead of deprecating flag right away Co-authored-by: Alan Parra * Add gogoproto.jsontag to new fields * remove meaning from enum zero value * Reuse proto.SupportType instead of suping * Replace isTeam for new flags in web app * Update proto file: rename enum 0 value to unspecified;fix json tag casing * Reuse proto file instead of aliasing it * undo removing method by accident * Add MobileDeviceManagement field to web config struct * Improve comments * Fix tests * Simplify lockedFeatures object * Include JoinActiveSessions in the web config object * Remove more instances of isTeam * Apply suggestions from code review - improve comments Co-authored-by: Michelle Bergquist <11967646+michellescripts@users.noreply.github.com> * Use consistent comments to remove isTeam * Update godocs comments * Revert removign `isTeam` from stories it still should * Fix godoc typo Co-authored-by: Michelle Bergquist <11967646+michellescripts@users.noreply.github.com> --------- Co-authored-by: Alan Parra Co-authored-by: Michelle Bergquist <11967646+michellescripts@users.noreply.github.com> --- api/client/webclient/webconfig.go | 23 +++++++++++++- lib/httplib/httpheaders.go | 2 +- lib/httplib/httplib_test.go | 8 ++--- .../externalauditstorage/configurator.go | 2 +- .../externalauditstorage/configurator_test.go | 20 ++++++------- lib/modules/modules.go | 2 +- lib/service/service_test.go | 3 +- lib/web/apiserver.go | 16 +++++++++- lib/web/apiserver_test.go | 22 +++++++++----- .../Integrations/Enroll/IntegrationTiles.tsx | 6 ++-- .../teleport/src/Sessions/useSessions.ts | 3 +- web/packages/teleport/src/Support/Support.tsx | 2 +- .../ButtonLockedFeature.test.tsx | 30 ------------------- .../ExternalAuditStorageCta.test.tsx | 2 +- .../ExternalAuditStorageCta.tsx | 2 +- web/packages/teleport/src/config.ts | 17 +++++++++-- .../teleport/src/services/sales/index.ts | 1 + web/packages/teleport/src/teleportContext.tsx | 13 +++----- web/packages/teleport/src/types.ts | 3 -- 19 files changed, 99 insertions(+), 78 deletions(-) diff --git a/api/client/webclient/webconfig.go b/api/client/webclient/webconfig.go index e86afb6383082..694f126954808 100644 --- a/api/client/webclient/webconfig.go +++ b/api/client/webclient/webconfig.go @@ -77,7 +77,8 @@ type WebConfig struct { HideInaccessibleFeatures bool `json:"hideInaccessibleFeatures"` // CustomTheme is a string that represents the name of the custom theme that the WebUI should use. CustomTheme string `json:"customTheme"` - // IsTeam is true if [Features.ProductType] = Team + // Deprecated: IsTeam is true if [Features.ProductType] = Team + // Prefer checking the cluster features over this flag, as this will be removed. IsTeam bool `json:"isTeam"` // IsIGSEnabled is true if [Features.IdentityGovernance] = true IsIGSEnabled bool `json:"isIgsEnabled"` @@ -85,6 +86,26 @@ type WebConfig struct { // Typically used with feature teasers if feature is not enabled for the // product type eg: Team product contains teasers to upgrade to Enterprise. FeatureLimits FeatureLimits `json:"featureLimits"` + // Questionnaire indicates whether cluster users should get an onboarding questionnaire + Questionnaire bool `json:"questionnaire"` + // IsStripeManaged indicates if the cluster billing & lifecycle is managed via Stripe + IsStripeManaged bool `json:"isStripeManaged"` + // ExternalAuditStorage indicates whether the EAS feature is enabled in the cluster. + ExternalAuditStorage bool `json:"externalAuditStorage"` + // PremiumSupport indicates whether the customer has premium support + PremiumSupport bool `json:"premiumSupport"` + // JoinActiveSessions indicates whether joining active sessions via web UI is enabled + JoinActiveSessions bool `json:"joinActiveSessions"` + // AccessRequests indicates whether access requests are enabled + AccessRequests bool `json:"accessRequests"` + // TrustedDevices indicates whether trusted devices page is enabled + TrustedDevices bool `json:"trustedDevices"` + // OIDC indicates whether the OIDC integration flow is enabled + OIDC bool `json:"oidc"` + // SAML indicates whether the SAML integration flow is enabled + SAML bool `json:"saml"` + // MobileDeviceManagement indicates whether adding Jamf plugin is enabled + MobileDeviceManagement bool `json:"mobileDeviceManagement"` } // featureLimits define limits for features. diff --git a/lib/httplib/httpheaders.go b/lib/httplib/httpheaders.go index 401922e35fff3..1fae246120433 100644 --- a/lib/httplib/httpheaders.go +++ b/lib/httplib/httpheaders.go @@ -201,7 +201,7 @@ var indexCSPStringCache *cspCache = newCSPCache() func getIndexContentSecurityPolicyString(cfg proto.Features, urlPath string) string { // Check for result with this cfg and urlPath in cache - withStripe := cfg.GetProductType() == proto.ProductType_PRODUCT_TYPE_TEAM + withStripe := cfg.GetIsStripeManaged() key := fmt.Sprintf("%v-%v", withStripe, urlPath) if cspString, ok := indexCSPStringCache.get(key); ok { return cspString diff --git a/lib/httplib/httplib_test.go b/lib/httplib/httplib_test.go index 8a4e39a2e50ba..7511fd652cd55 100644 --- a/lib/httplib/httplib_test.go +++ b/lib/httplib/httplib_test.go @@ -295,8 +295,8 @@ func TestSetIndexContentSecurityPolicy(t *testing.T) { }, }, { - name: "for cloud based usage, Team product (with stripe, no wasm)", - features: proto.Features{Cloud: true, IsUsageBased: true, ProductType: proto.ProductType_PRODUCT_TYPE_TEAM}, + name: "for cloud based usage, Stripe managed product (with stripe, no wasm)", + features: proto.Features{Cloud: true, IsUsageBased: true, IsStripeManaged: true}, urlPath: "/web/index.js", expectedCspVals: map[string]string{ "default-src": "'self'", @@ -346,8 +346,8 @@ func TestSetIndexContentSecurityPolicy(t *testing.T) { }, }, { - name: "for cloud based usage & desktop session, Team product (with stripe, with wasm)", - features: proto.Features{Cloud: true, IsUsageBased: true, ProductType: proto.ProductType_PRODUCT_TYPE_TEAM}, + name: "for cloud based usage & desktop session, Stripe managed product (with stripe, with wasm)", + features: proto.Features{Cloud: true, IsUsageBased: true, IsStripeManaged: true}, urlPath: "/web/cluster/:clusterId/desktops/:desktopName/:username", expectedCspVals: map[string]string{ "default-src": "'self'", diff --git a/lib/integrations/externalauditstorage/configurator.go b/lib/integrations/externalauditstorage/configurator.go index c109f76d4cc27..15b388a8659c4 100644 --- a/lib/integrations/externalauditstorage/configurator.go +++ b/lib/integrations/externalauditstorage/configurator.go @@ -182,7 +182,7 @@ func NewDraftConfigurator(ctx context.Context, ecaSvc ExternalAuditStorageGetter func newConfigurator(ctx context.Context, spec *externalauditstorage.ExternalAuditStorageSpec, integrationSvc services.IntegrationsGetter, alertService ClusterAlertService, optFns ...func(*Options)) (*Configurator, error) { // ExternalAuditStorage is only available in Cloud Enterprise - if !modules.GetModules().Features().Cloud || modules.GetModules().Features().IsTeam() { + if !modules.GetModules().Features().Cloud || !modules.GetModules().Features().ExternalAuditStorage { return &Configurator{isUsed: false}, nil } diff --git a/lib/integrations/externalauditstorage/configurator_test.go b/lib/integrations/externalauditstorage/configurator_test.go index 9c306d1a0c3d8..a99cba45e67ea 100644 --- a/lib/integrations/externalauditstorage/configurator_test.go +++ b/lib/integrations/externalauditstorage/configurator_test.go @@ -102,8 +102,8 @@ func TestConfiguratorIsUsed(t *testing.T) { name: "cloud enterprise without config", modules: &modules.TestModules{ TestFeatures: modules.Features{ - Cloud: true, - IsUsageBasedBilling: false, + Cloud: true, + ExternalAuditStorage: true, }, }, wantIsUsed: false, @@ -112,8 +112,8 @@ func TestConfiguratorIsUsed(t *testing.T) { name: "cloud enterprise with only draft", modules: &modules.TestModules{ TestFeatures: modules.Features{ - Cloud: true, - IsUsageBasedBilling: false, + Cloud: true, + ExternalAuditStorage: true, }, }, // Just create draft, External Audit Storage should be disabled, it's @@ -129,8 +129,8 @@ func TestConfiguratorIsUsed(t *testing.T) { name: "cloud enterprise with cluster config", modules: &modules.TestModules{ TestFeatures: modules.Features{ - Cloud: true, - IsUsageBasedBilling: false, + Cloud: true, + ExternalAuditStorage: true, }, }, // Create draft and promote it to cluster. @@ -178,8 +178,8 @@ func TestCredentialsCache(t *testing.T) { modules.SetTestModules(t, &modules.TestModules{ TestFeatures: modules.Features{ - Cloud: true, - IsUsageBasedBilling: false, + Cloud: true, + ExternalAuditStorage: true, }, }) @@ -316,8 +316,8 @@ func TestDraftConfigurator(t *testing.T) { modules.SetTestModules(t, &modules.TestModules{ TestFeatures: modules.Features{ - Cloud: true, - IsUsageBasedBilling: false, + Cloud: true, + ExternalAuditStorage: true, }, }) diff --git a/lib/modules/modules.go b/lib/modules/modules.go index d2d7fd3438893..e599a907fc46a 100644 --- a/lib/modules/modules.go +++ b/lib/modules/modules.go @@ -243,7 +243,7 @@ func (f Features) IGSEnabled() bool { return f.IdentityGovernanceSecurity } -// TODO(mcbattirola): Deprecate IsTeam once it's unused. +// TODO(mcbattirola): remove isTeam when it is no longer used func (f Features) IsTeam() bool { return f.ProductType == ProductTypeTeam } diff --git a/lib/service/service_test.go b/lib/service/service_test.go index bc07c3f6e5a01..6a29d0fee53b7 100644 --- a/lib/service/service_test.go +++ b/lib/service/service_test.go @@ -474,7 +474,8 @@ func TestAthenaAuditLogSetup(t *testing.T) { ctx := context.Background() modules.SetTestModules(t, &modules.TestModules{ TestFeatures: modules.Features{ - Cloud: true, + Cloud: true, + ExternalAuditStorage: true, }, }) diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 4a89cd3953585..e6d5af425f146 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -1667,6 +1667,9 @@ func (h *Handler) getWebConfig(w http.ResponseWriter, r *http.Request, p httprou h.log.WithError(err).Error("Cannot read target version") } + // TODO(mcbattirola): remove isTeam when it is no longer used + isTeam := clusterFeatures.GetProductType() == proto.ProductType_PRODUCT_TYPE_TEAM + webCfg := webclient.WebConfig{ Auth: authSettings, CanJoinSessions: canJoinSessions, @@ -1681,13 +1684,24 @@ func (h *Handler) getWebConfig(w http.ResponseWriter, r *http.Request, p httprou AssistEnabled: assistEnabled, HideInaccessibleFeatures: clusterFeatures.GetFeatureHiding(), CustomTheme: clusterFeatures.GetCustomTheme(), - IsTeam: clusterFeatures.GetProductType() == proto.ProductType_PRODUCT_TYPE_TEAM, IsIGSEnabled: clusterFeatures.GetIdentityGovernance(), FeatureLimits: webclient.FeatureLimits{ AccessListCreateLimit: int(clusterFeatures.GetAccessList().GetCreateLimit()), AccessMonitoringMaxReportRangeLimit: int(clusterFeatures.GetAccessMonitoring().GetMaxReportRangeLimit()), AccessRequestMonthlyRequestLimit: int(clusterFeatures.GetAccessRequests().GetMonthlyRequestLimit()), }, + Questionnaire: clusterFeatures.GetQuestionnaire(), + IsStripeManaged: clusterFeatures.GetIsStripeManaged(), + ExternalAuditStorage: clusterFeatures.GetExternalAuditStorage(), + PremiumSupport: clusterFeatures.GetSupportType() == proto.SupportType_SUPPORT_TYPE_PREMIUM, + AccessRequests: clusterFeatures.GetAccessRequests().MonthlyRequestLimit > 0, + TrustedDevices: clusterFeatures.GetDeviceTrust().GetEnabled(), + OIDC: clusterFeatures.GetOIDC(), + SAML: clusterFeatures.GetSAML(), + MobileDeviceManagement: clusterFeatures.GetMobileDeviceManagement(), + JoinActiveSessions: clusterFeatures.GetJoinActiveSessions(), + // TODO(mcbattirola): remove isTeam when it is no longer used + IsTeam: isTeam, } resource, err := h.cfg.ProxyClient.GetClusterName() diff --git a/lib/web/apiserver_test.go b/lib/web/apiserver_test.go index 51b5665c53557..db8e80712206e 100644 --- a/lib/web/apiserver_test.go +++ b/lib/web/apiserver_test.go @@ -4497,11 +4497,12 @@ func TestGetWebConfig(t *testing.T) { PrivateKeyPolicy: keys.PrivateKeyPolicyNone, MOTD: MOTD, }, - CanJoinSessions: true, - ProxyClusterName: env.server.ClusterName(), - IsCloud: false, - AssistEnabled: false, - AutomaticUpgrades: false, + CanJoinSessions: true, + ProxyClusterName: env.server.ClusterName(), + IsCloud: false, + AssistEnabled: false, + AutomaticUpgrades: false, + JoinActiveSessions: true, } // Make a request. @@ -4551,6 +4552,7 @@ func TestGetWebConfig(t *testing.T) { expectedCfg.AutomaticUpgrades = true expectedCfg.AutomaticUpgradesTargetVersion = "v" + teleport.Version expectedCfg.AssistEnabled = false + expectedCfg.JoinActiveSessions = false // request and verify enabled features are enabled. re, err = clt.Get(ctx, endpoint, nil) @@ -4603,6 +4605,9 @@ func TestGetWebConfig_IGSFeatureLimits(t *testing.T) { AccessMonitoring: modules.AccessMonitoringFeature{ MaxReportRangeLimit: 10, }, + IsUsageBasedBilling: true, + IsStripeManaged: true, + Questionnaire: true, }, }) @@ -4619,8 +4624,11 @@ func TestGetWebConfig_IGSFeatureLimits(t *testing.T) { AccessListCreateLimit: 5, AccessMonitoringMaxReportRangeLimit: 10, }, - IsTeam: true, - IsIGSEnabled: true, + IsTeam: true, + IsIGSEnabled: true, + IsStripeManaged: true, + Questionnaire: true, + IsUsageBasedBilling: true, } // Make a request. diff --git a/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.tsx b/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.tsx index 5a6bfafda904c..1cb76ff971749 100644 --- a/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.tsx +++ b/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.tsx @@ -39,7 +39,7 @@ export function IntegrationTiles({ hasIntegrationAccess?: boolean; hasExternalAuditStorage?: boolean; }) { - const isCloudEnterprise = cfg.isCloud && !cfg.isTeam; + const externalAuditStorageEnabled = cfg.externalAuditStorage; const isOnpremEnterprise = cfg.isEnterprise && !cfg.isCloud; return ( @@ -76,7 +76,7 @@ export function IntegrationTiles({ {!isOnpremEnterprise && ( AWS External Audit Storage {renderExternalAuditStorageBadge( hasExternalAuditStorage, - isCloudEnterprise + externalAuditStorageEnabled )} )} diff --git a/web/packages/teleport/src/Sessions/useSessions.ts b/web/packages/teleport/src/Sessions/useSessions.ts index 3b8e1d3d095d7..e3cb8e148fa27 100644 --- a/web/packages/teleport/src/Sessions/useSessions.ts +++ b/web/packages/teleport/src/Sessions/useSessions.ts @@ -24,6 +24,7 @@ import { context, trace } from '@opentelemetry/api'; import { Session } from 'teleport/services/session'; import Ctx from 'teleport/teleportContext'; +import cfg from 'teleport/config'; const tracer = trace.getTracer('userSessions'); @@ -57,6 +58,6 @@ export default function useSessions(ctx: Ctx, clusterId: string) { sessions, // moderated is available with any enterprise editions showModeratedSessionsCTA: !ctx.isEnterprise, - showActiveSessionsCTA: ctx.lockedFeatures.activeSessions, + showActiveSessionsCTA: !cfg.joinActiveSessions, }; } diff --git a/web/packages/teleport/src/Support/Support.tsx b/web/packages/teleport/src/Support/Support.tsx index 885cf6db0cd1c..fe40920857a96 100644 --- a/web/packages/teleport/src/Support/Support.tsx +++ b/web/packages/teleport/src/Support/Support.tsx @@ -34,7 +34,7 @@ export function SupportContainer({ children }: { children?: React.ReactNode }) { const cluster = ctx.storeUser.state.cluster; // showCTA returns the premium support value for enterprise customers and true for OSS users - const showCTA = cfg.isEnterprise ? ctx.lockedFeatures.premiumSupport : true; + const showCTA = cfg.isEnterprise ? !cfg.premiumSupport : true; return ( { afterEach(() => { jest.resetAllMocks(); - cfg.isTeam = defaultIsTeamFlag; cfg.isEnterprise = defaultIsEnterpriseFlag; }); @@ -59,35 +57,8 @@ describe('buttonLockedFeature', () => { expect(screen.queryByTestId('locked-icon')).not.toBeInTheDocument(); }); - test('it has upgrade-team href for Team Plan', () => { - const version = ctx.storeUser.state.cluster.authVersion; - cfg.isTeam = true; - cfg.isEnterprise = true; - - renderWithContext( - text - ); - expect(screen.getByText('text').closest('a')).toHaveAttribute( - 'href', - `https://goteleport.com/r/upgrade-team?e_${version}&utm_campaign=CTA_UNSPECIFIED` - ); - - renderWithContext( - - othertext - - ); - expect(screen.getByText('othertext').closest('a')).toHaveAttribute( - 'href', - `https://goteleport.com/r/upgrade-team?e_${version}&utm_campaign=${ - CtaEvent[CtaEvent.CTA_ACCESS_REQUESTS] - }` - ); - }); - test('it has upgrade-community href for community edition', () => { const version = ctx.storeUser.state.cluster.authVersion; - cfg.isTeam = false; cfg.isEnterprise = false; renderWithContext( text, @@ -118,7 +89,6 @@ describe('buttonLockedFeature', () => { test('it has upgrade-igs href for Enterprise + IGS Plan', () => { const version = ctx.storeUser.state.cluster.authVersion; - cfg.isTeam = false; cfg.isEnterprise = true; renderWithContext( diff --git a/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.test.tsx b/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.test.tsx index 0f568da2ecdd5..2fbe0a0be1703 100644 --- a/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.test.tsx +++ b/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.test.tsx @@ -51,7 +51,7 @@ describe('externalAuditStorageCta', () => { }); cfg.isCloud = isCloud; - ctx.lockedFeatures.externalCloudAudit = lockedFeature; + cfg.externalAuditStorage = lockedFeature; jest .spyOn(storageService, 'getExternalAuditStorageCtaDisabled') diff --git a/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.tsx b/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.tsx index a44e1b48cd815..d5ce99e151135 100644 --- a/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.tsx +++ b/web/packages/teleport/src/components/ExternalAuditStorageCta/ExternalAuditStorageCta.tsx @@ -40,7 +40,7 @@ import { ButtonLockedFeature } from '../ButtonLockedFeature'; export const ExternalAuditStorageCta = () => { const [showCta, setShowCta] = useState(false); const ctx = useTeleport(); - const featureEnabled = !ctx.lockedFeatures.externalCloudAudit; + const featureEnabled = !cfg.externalAuditStorage; const userHasAccess = ctx.getFeatureFlags().enrollIntegrationsOrPlugins; useEffect(() => { diff --git a/web/packages/teleport/src/config.ts b/web/packages/teleport/src/config.ts index 7a64fb11fdd3e..60dae7397259d 100644 --- a/web/packages/teleport/src/config.ts +++ b/web/packages/teleport/src/config.ts @@ -49,16 +49,29 @@ const cfg = { // IsUsageBasedBilling determines if the user subscription is usage-based (pay-as-you-go). // Historically, this flag used to refer to "Cloud Team" product, // but with the new EUB (Enterprise Usage Based) product, it can mean either EUB or Team. - // Use the `isTeam` config flag to determine if product used is Team. - // EUB can be determined from a combination of existing config flags eg: `isCloud && !isTeam`. + // Prefer using feature flags to determine if something should be enabled or not. + // If you have no other options, use the `isStripeManaged` config flag to determine if product used is Team. + // EUB can be determined from a combination of existing config flags eg: `isUsageBasedBilling && !isStripeManaged`. isUsageBasedBilling: false, hideInaccessibleFeatures: false, customTheme: '', /** * isTeam is true if [Features.ProductType] == Team * @deprecated use other flags do determine cluster features istead of relying on isTeam + * TODO(mcbattirola): remove isTeam when it is no longer used */ isTeam: false, + isStripeManaged: false, + hasQuestionnaire: false, + externalAuditStorage: false, + premiumSupport: false, + accessRequests: false, + trustedDevices: false, + oidc: false, + saml: false, + joinActiveSessions: false, + mobileDeviceManagement: false, + // isIgsEnabled refers to Identity Governance & Security product. // It refers to a group of features: access request, device trust, // access list, and access monitoring. diff --git a/web/packages/teleport/src/services/sales/index.ts b/web/packages/teleport/src/services/sales/index.ts index 42709b19a01a4..8cb3ba32a8f64 100644 --- a/web/packages/teleport/src/services/sales/index.ts +++ b/web/packages/teleport/src/services/sales/index.ts @@ -44,6 +44,7 @@ export function getSalesURL( ) { let url = UPGRADE_COMMUNITY_URL; if (isEnterprise) { + // TODO(mcbattirola): remove isTeam when it is no longer used url = cfg.isTeam ? UPGRADE_TEAM_URL : UPGRADE_IGS_URL; } const params = getParams(version, isEnterprise, event); diff --git a/web/packages/teleport/src/teleportContext.tsx b/web/packages/teleport/src/teleportContext.tsx index b42a54576d78a..400f84ace6bc9 100644 --- a/web/packages/teleport/src/teleportContext.tsx +++ b/web/packages/teleport/src/teleportContext.tsx @@ -72,20 +72,15 @@ class TeleportContext implements types.Context { // lockedFeatures are the features disabled in the user's cluster. // Mainly used to hide features and/or show CTAs when the user cluster doesn't support it. - // TODO(mcbattirola): use cluster features instead of only using `isTeam` - // to determine which feature is locked lockedFeatures: types.LockedFeatures = { - authConnectors: cfg.isTeam, - activeSessions: cfg.isTeam, - premiumSupport: cfg.isTeam, - externalCloudAudit: cfg.isTeam, + authConnectors: !(cfg.oidc && cfg.saml), // Below should be locked for the following cases: - // 1) is team + // 1) feature disabled in the cluster features // 2) is not a legacy and igs is not enabled. legacies should have unlimited access. accessRequests: - cfg.isTeam || (!cfg.isLegacyEnterprise() && !cfg.isIgsEnabled), + !cfg.accessRequests || (!cfg.isLegacyEnterprise() && !cfg.isIgsEnabled), trustedDevices: - cfg.isTeam || (!cfg.isLegacyEnterprise() && !cfg.isIgsEnabled), + !cfg.trustedDevices || (!cfg.isLegacyEnterprise() && !cfg.isIgsEnabled), }; // hasExternalAuditStorage indicates if an account has set up external audit storage. It is used to show or hide the External Audit Storage CTAs. diff --git a/web/packages/teleport/src/types.ts b/web/packages/teleport/src/types.ts index 0c501a44cbfad..40a6419d57e9c 100644 --- a/web/packages/teleport/src/types.ts +++ b/web/packages/teleport/src/types.ts @@ -195,11 +195,8 @@ export interface FeatureFlags { // LockedFeatures are used for determining which features are disabled in the user's cluster. export type LockedFeatures = { authConnectors: boolean; - activeSessions: boolean; accessRequests: boolean; - premiumSupport: boolean; trustedDevices: boolean; - externalCloudAudit: boolean; }; // RecommendFeature is used for recommending features if its usage status is zero. From d59a843d9852007d414217a8ad73fb7f291f00e7 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Tue, 30 Apr 2024 14:58:10 +0100 Subject: [PATCH 18/28] Ignore `AccessListsMember`'s `IneligibleStatus` field (#41039) * Ignore `AccessListsMember`'s `IneligibleStatus` field This PR discards the `IneligibleStatus` field when comparing `AccessListMember`. This field is managed by `IneligibleStatusReconciler` and should be ignored when using other reconcilers. Signed-off-by: Tiago Silva * handle review comments --------- Signed-off-by: Tiago Silva --- lib/services/compare.go | 2 ++ lib/services/compare_test.go | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/lib/services/compare.go b/lib/services/compare.go index ce7f8e31ea289..69d7e1180ea71 100644 --- a/lib/services/compare.go +++ b/lib/services/compare.go @@ -43,6 +43,8 @@ func CompareResources[T any](resA, resB T) int { cmpopts.IgnoreFields(types.UserSpecV2{}, "Status"), cmpopts.IgnoreFields(accesslist.AccessList{}, "Status"), cmpopts.IgnoreUnexported(headerv1.Metadata{}), + // Managed by IneligibleStatusReconciler, ignored by all others. + cmpopts.IgnoreFields(accesslist.AccessListMemberSpec{}, "IneligibleStatus"), cmpopts.EquateEmpty(), ) } diff --git a/lib/services/compare_test.go b/lib/services/compare_test.go index 392b808df8433..a716377738914 100644 --- a/lib/services/compare_test.go +++ b/lib/services/compare_test.go @@ -22,6 +22,8 @@ import ( "testing" "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types/accesslist" ) func TestCompareResources(t *testing.T) { @@ -31,6 +33,17 @@ func TestCompareResources(t *testing.T) { // These results should be forced since we're going through a custom compare function. compareTestCase(t, "IsEqual equal", &compareResourceWithEqual{true}, &compareResourceWithEqual{false}, Equal) compareTestCase(t, "IsEqual not equal", &compareResourceWithEqual{false}, &compareResourceWithEqual{false}, Different) + + // These results compare AccessListMemberSpec, which should ignore the IneligibleStatus field. + newAccessListMemberSpec := func(ineligibleStatus, accessList string) accesslist.AccessListMemberSpec { + return accesslist.AccessListMemberSpec{ + AccessList: accessList, + IneligibleStatus: ineligibleStatus, + } + } + compareTestCase(t, "cmp equal with equal IneligibleStatus", newAccessListMemberSpec("status1", "accessList1"), newAccessListMemberSpec("status1", "accessList1"), Equal) + compareTestCase(t, "cmp equal with different IneligibleStatus", newAccessListMemberSpec("status1", "accessList1"), newAccessListMemberSpec("status2", "accessList1"), Equal) + compareTestCase(t, "cmp not equal", newAccessListMemberSpec("status1", "accessList1"), newAccessListMemberSpec("status1", "accessList2"), Different) } func compareTestCase[T any](t *testing.T, name string, resA, resB T, expected int) { From f11b8a7331722871be4a19b61373ab21e4bf10c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Skrz=C4=99tnicki?= Date: Tue, 30 Apr 2024 16:30:04 +0200 Subject: [PATCH 19/28] Add usage events for database autoprovisioning (#39841) --- .../teleport/legacy/types/events/events.proto | 5 + api/types/events/events.pb.go | 1968 +++++++++------- gen/proto/go/prehog/v1alpha/teleport.pb.go | 2094 +++++++++-------- gen/proto/ts/prehog/v1alpha/teleport_pb.ts | 223 +- lib/usagereporter/teleport/audit.go | 25 + lib/usagereporter/teleport/audit_test.go | 126 +- lib/usagereporter/teleport/types.go | 42 + proto/prehog/v1alpha/teleport.proto | 32 + 8 files changed, 2673 insertions(+), 1842 deletions(-) diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index e2b8c21f6660c..f7bb5f66eda4e 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -3087,6 +3087,11 @@ message DatabasePermissionUpdate { (gogoproto.nullable) = false, (gogoproto.jsontag) = "permission_summary" ]; + // AffectedObjectCounts counts how many distinct objects of each kind were affected. + map AffectedObjectCounts = 6 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "affected_object_counts" + ]; } // DatabasePermissionEntry is a summary of permissions, scoped to a particular permission. diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index e477af1492e6c..24b45c5f0b74d 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -5197,10 +5197,12 @@ type DatabasePermissionUpdate struct { // Database contains database related metadata. DatabaseMetadata `protobuf:"bytes,4,opt,name=Database,proto3,embedded=Database" json:""` // PermissionSummary is a summary of applied permissions. - PermissionSummary []DatabasePermissionEntry `protobuf:"bytes,5,rep,name=PermissionSummary,proto3" json:"permission_summary"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + PermissionSummary []DatabasePermissionEntry `protobuf:"bytes,5,rep,name=PermissionSummary,proto3" json:"permission_summary"` + // AffectedObjectCounts counts how many distinct objects of each kind were affected. + AffectedObjectCounts map[string]int32 `protobuf:"bytes,6,rep,name=AffectedObjectCounts,proto3" json:"affected_object_counts" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DatabasePermissionUpdate) Reset() { *m = DatabasePermissionUpdate{} } @@ -12617,6 +12619,7 @@ func init() { proto.RegisterType((*DatabaseSessionStart)(nil), "events.DatabaseSessionStart") proto.RegisterType((*DatabaseSessionQuery)(nil), "events.DatabaseSessionQuery") proto.RegisterType((*DatabasePermissionUpdate)(nil), "events.DatabasePermissionUpdate") + proto.RegisterMapType((map[string]int32)(nil), "events.DatabasePermissionUpdate.AffectedObjectCountsEntry") proto.RegisterType((*DatabasePermissionEntry)(nil), "events.DatabasePermissionEntry") proto.RegisterMapType((map[string]int32)(nil), "events.DatabasePermissionEntry.CountsEntry") proto.RegisterType((*DatabaseUserCreate)(nil), "events.DatabaseUserCreate") @@ -12731,920 +12734,923 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 14604 bytes of a gzipped FileDescriptorProto + // 14654 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x24, 0xc7, 0x75, 0x18, 0x8e, 0xfd, 0xc0, 0x62, 0xd1, 0xf8, 0x5a, 0xf4, 0x7d, 0x0d, 0xc1, 0xbb, 0x5b, 0x72, 0x28, 0x9d, 0xee, 0x28, 0x12, 0x27, 0x1e, 0x8f, 0xa4, 0xf8, 0x25, 0x72, 0x81, 0x05, 0x0e, 0xcb, 0xc3, 0xc7, 0x72, 0x16, 0x77, 0x27, 0x4a, 0x16, 0xd7, 0x83, 0x9d, 0xc6, 0x62, 0x78, 0xbb, 0x33, 0xab, 0x99, 0xd9, 0xc3, 0x81, 0xbf, 0x8f, 0x58, 0x8e, 0xbf, 0xe4, 0xc8, 0x8a, 0x22, 0xc7, 0x5f, 0xb1, 0x53, 0x91, 0x93, 0x72, 0x95, 0xe3, 0x72, 0xec, 0x38, 0x4e, 0xd9, 0x56, 0x1c, 0x57, 0xec, - 0xc8, 0xa9, 0xd0, 0x51, 0x39, 0xb1, 0x9d, 0xc4, 0x7f, 0x24, 0x0e, 0x64, 0x3b, 0xe5, 0xfc, 0x81, - 0x4a, 0xaa, 0x5c, 0x15, 0x57, 0xe2, 0x38, 0x89, 0x93, 0xea, 0xd7, 0x3d, 0x33, 0xdd, 0x33, 0xb3, - 0x8b, 0xaf, 0x93, 0x41, 0xf0, 0xf0, 0xcf, 0x1d, 0xf6, 0xbd, 0xd7, 0xaf, 0x7b, 0x5e, 0xbf, 0xee, - 0x7e, 0xdd, 0xfd, 0xfa, 0x3d, 0x74, 0xc5, 0x23, 0x2d, 0xd2, 0xb1, 0x1d, 0xef, 0x6a, 0x8b, 0x34, - 0xf5, 0xc6, 0xd6, 0x55, 0x6f, 0xab, 0x43, 0xdc, 0xab, 0xe4, 0x1e, 0xb1, 0x3c, 0xff, 0xbf, 0xe9, - 0x8e, 0x63, 0x7b, 0x36, 0xce, 0xb1, 0x5f, 0x53, 0xa7, 0x9b, 0x76, 0xd3, 0x06, 0xd0, 0x55, 0xfa, - 0x17, 0xc3, 0x4e, 0x9d, 0x6f, 0xda, 0x76, 0xb3, 0x45, 0xae, 0xc2, 0xaf, 0xb5, 0xee, 0xfa, 0x55, - 0xd7, 0x73, 0xba, 0x0d, 0x8f, 0x63, 0x8b, 0x51, 0xac, 0x67, 0xb6, 0x89, 0xeb, 0xe9, 0xed, 0x0e, - 0x27, 0xb8, 0x18, 0x25, 0xd8, 0x74, 0xf4, 0x4e, 0x87, 0x38, 0xbc, 0xf2, 0xa9, 0xc7, 0x93, 0xdb, - 0x09, 0xff, 0x72, 0x92, 0xa7, 0x93, 0x49, 0x7c, 0x46, 0x11, 0x8e, 0xea, 0x97, 0xd3, 0x28, 0xbf, - 0x44, 0x3c, 0xdd, 0xd0, 0x3d, 0x1d, 0x9f, 0x47, 0x83, 0x15, 0xcb, 0x20, 0xf7, 0x95, 0xd4, 0x63, - 0xa9, 0xcb, 0x99, 0x99, 0xdc, 0xce, 0x76, 0x31, 0x4d, 0x4c, 0x8d, 0x01, 0xf1, 0x05, 0x94, 0x5d, - 0xdd, 0xea, 0x10, 0x25, 0xfd, 0x58, 0xea, 0xf2, 0xf0, 0xcc, 0xf0, 0xce, 0x76, 0x71, 0x10, 0x64, - 0xa1, 0x01, 0x18, 0x3f, 0x8e, 0xd2, 0x95, 0xb2, 0x92, 0x01, 0xe4, 0xe4, 0xce, 0x76, 0x71, 0xac, - 0x6b, 0x1a, 0x4f, 0xd9, 0x6d, 0xd3, 0x23, 0xed, 0x8e, 0xb7, 0xa5, 0xa5, 0x2b, 0x65, 0x7c, 0x09, - 0x65, 0x67, 0x6d, 0x83, 0x28, 0x59, 0x20, 0xc2, 0x3b, 0xdb, 0xc5, 0xf1, 0x86, 0x6d, 0x10, 0x81, - 0x0a, 0xf0, 0xf8, 0x75, 0x94, 0x5d, 0x35, 0xdb, 0x44, 0x19, 0x7c, 0x2c, 0x75, 0x79, 0xe4, 0xda, - 0xd4, 0x34, 0x93, 0xca, 0xb4, 0x2f, 0x95, 0xe9, 0x55, 0x5f, 0x6c, 0x33, 0x85, 0xf7, 0xb6, 0x8b, - 0x03, 0x3b, 0xdb, 0xc5, 0x2c, 0x95, 0xe4, 0x97, 0xbe, 0x51, 0x4c, 0x69, 0x50, 0x12, 0xbf, 0x82, - 0x46, 0x66, 0x5b, 0x5d, 0xd7, 0x23, 0xce, 0xb2, 0xde, 0x26, 0x4a, 0x0e, 0x2a, 0x9c, 0xda, 0xd9, - 0x2e, 0x9e, 0x6d, 0x30, 0x70, 0xdd, 0xd2, 0xdb, 0x62, 0xc5, 0x22, 0xb9, 0xfa, 0x4b, 0x29, 0x34, - 0x51, 0x23, 0xae, 0x6b, 0xda, 0x56, 0x20, 0x9b, 0x0f, 0xa3, 0x61, 0x0e, 0xaa, 0x94, 0x41, 0x3e, - 0xc3, 0x33, 0x43, 0x3b, 0xdb, 0xc5, 0x8c, 0x6b, 0x1a, 0x5a, 0x88, 0xc1, 0x1f, 0x43, 0x43, 0x77, - 0x4c, 0x6f, 0x63, 0x69, 0xbe, 0xc4, 0xe5, 0x74, 0x76, 0x67, 0xbb, 0x88, 0x37, 0x4d, 0x6f, 0xa3, - 0xde, 0x5e, 0xd7, 0x85, 0x0a, 0x7d, 0x32, 0xbc, 0x88, 0x0a, 0x55, 0xc7, 0xbc, 0xa7, 0x7b, 0xe4, - 0x26, 0xd9, 0xaa, 0xda, 0x2d, 0xb3, 0xb1, 0xc5, 0xa5, 0xf8, 0xd8, 0xce, 0x76, 0xf1, 0x7c, 0x87, - 0xe1, 0xea, 0x77, 0xc9, 0x56, 0xbd, 0x03, 0x58, 0x81, 0x49, 0xac, 0xa4, 0xfa, 0xb5, 0x41, 0x34, - 0x7a, 0xcb, 0x25, 0x4e, 0xd0, 0xee, 0x4b, 0x28, 0x4b, 0x7f, 0xf3, 0x26, 0x83, 0xcc, 0xbb, 0x2e, - 0x71, 0x44, 0x99, 0x53, 0x3c, 0xbe, 0x82, 0x06, 0x17, 0xed, 0xa6, 0x69, 0xf1, 0x66, 0x9f, 0xda, - 0xd9, 0x2e, 0x4e, 0xb4, 0x28, 0x40, 0xa0, 0x64, 0x14, 0xf8, 0x13, 0x68, 0xb4, 0xd2, 0xa6, 0x3a, - 0x64, 0x5b, 0xba, 0x67, 0x3b, 0xbc, 0xb5, 0x20, 0x5d, 0x53, 0x80, 0x0b, 0x05, 0x25, 0x7a, 0xfc, - 0x12, 0x42, 0xa5, 0x3b, 0x35, 0xcd, 0x6e, 0x91, 0x92, 0xb6, 0xcc, 0x95, 0x01, 0x4a, 0xeb, 0x9b, - 0x6e, 0xdd, 0xb1, 0x5b, 0xa4, 0xae, 0x3b, 0x62, 0xb5, 0x02, 0x35, 0x9e, 0x43, 0xe3, 0xa5, 0x46, - 0x83, 0xb8, 0xae, 0x46, 0x3e, 0xdb, 0x25, 0xae, 0xe7, 0x2a, 0x83, 0x8f, 0x65, 0x2e, 0x0f, 0xcf, - 0x5c, 0xd8, 0xd9, 0x2e, 0x3e, 0xa2, 0x03, 0xa6, 0xee, 0x70, 0x94, 0xc0, 0x22, 0x52, 0x08, 0xcf, - 0xa0, 0xb1, 0xd2, 0xbb, 0x5d, 0x87, 0x54, 0x0c, 0x62, 0x79, 0xa6, 0xb7, 0xc5, 0x35, 0xe4, 0xfc, - 0xce, 0x76, 0x51, 0xd1, 0x29, 0xa2, 0x6e, 0x72, 0x8c, 0xc0, 0x44, 0x2e, 0x82, 0x57, 0xd0, 0xe4, - 0x8d, 0xd9, 0x6a, 0x8d, 0x38, 0xf7, 0xcc, 0x06, 0x29, 0x35, 0x1a, 0x76, 0xd7, 0xf2, 0x94, 0x21, - 0xe0, 0xf3, 0xf8, 0xce, 0x76, 0xf1, 0x42, 0xb3, 0xd1, 0xa9, 0xbb, 0x0c, 0x5b, 0xd7, 0x19, 0x5a, - 0x60, 0x16, 0x2f, 0x8b, 0x3f, 0x85, 0xc6, 0x56, 0x1d, 0xaa, 0x85, 0x46, 0x99, 0x50, 0xb8, 0x92, - 0x07, 0xfd, 0x3f, 0x3b, 0xcd, 0x27, 0x20, 0x06, 0xf5, 0x7b, 0x96, 0x35, 0xd6, 0x63, 0x05, 0xea, - 0x06, 0xe0, 0xc4, 0xc6, 0x4a, 0xac, 0x30, 0x41, 0x0a, 0xfd, 0x78, 0xd3, 0x21, 0x46, 0x4c, 0xdb, - 0x86, 0xa1, 0xcd, 0x57, 0x76, 0xb6, 0x8b, 0x1f, 0x76, 0x38, 0x4d, 0xbd, 0xaf, 0xda, 0xf5, 0x64, - 0x85, 0xe7, 0x50, 0x9e, 0x6a, 0xd3, 0x4d, 0xd3, 0x32, 0x14, 0xf4, 0x58, 0xea, 0xf2, 0xf8, 0xb5, - 0x82, 0xdf, 0x7a, 0x1f, 0x3e, 0x73, 0x6e, 0x67, 0xbb, 0x78, 0x8a, 0xea, 0x60, 0xfd, 0xae, 0x69, - 0x89, 0x53, 0x44, 0x50, 0x54, 0xfd, 0xf9, 0x2c, 0x1a, 0xa7, 0xc2, 0x11, 0xf4, 0xb8, 0x44, 0x87, - 0x24, 0x85, 0xd0, 0x11, 0xea, 0x76, 0xf4, 0x06, 0xe1, 0x2a, 0x0d, 0xec, 0x2c, 0x1f, 0x28, 0xb0, - 0x8b, 0xd2, 0xe3, 0x2b, 0x28, 0xcf, 0x40, 0x95, 0x32, 0xd7, 0xf2, 0xb1, 0x9d, 0xed, 0xe2, 0xb0, - 0x0b, 0xb0, 0xba, 0x69, 0x68, 0x01, 0x9a, 0xaa, 0x19, 0xfb, 0x7b, 0xc1, 0x76, 0x3d, 0xca, 0x9c, - 0x2b, 0x39, 0xa8, 0x19, 0x2f, 0xb0, 0xc1, 0x51, 0xa2, 0x9a, 0xc9, 0x85, 0xf0, 0x8b, 0x08, 0x31, - 0x48, 0xc9, 0x30, 0x1c, 0xae, 0xe9, 0x8f, 0xec, 0x6c, 0x17, 0xcf, 0x70, 0x16, 0xba, 0x61, 0x88, - 0xc3, 0x44, 0x20, 0xc6, 0x6d, 0x34, 0xca, 0x7e, 0x2d, 0xea, 0x6b, 0xa4, 0xc5, 0xd4, 0x7c, 0xe4, - 0xda, 0x65, 0x5f, 0x9a, 0xb2, 0x74, 0xa6, 0x45, 0xd2, 0x39, 0xcb, 0x73, 0xb6, 0x66, 0x8a, 0x7c, - 0x66, 0x3c, 0xc7, 0xab, 0x6a, 0x01, 0x4e, 0x1c, 0x93, 0x62, 0x19, 0x3a, 0x61, 0xce, 0xdb, 0xce, - 0xa6, 0xee, 0x18, 0xc4, 0x98, 0xd9, 0x12, 0x27, 0xcc, 0x75, 0x1f, 0x5c, 0x5f, 0x13, 0x75, 0x40, - 0x24, 0xc7, 0xb3, 0x68, 0x8c, 0x71, 0xab, 0x75, 0xd7, 0xa0, 0xef, 0x87, 0x62, 0xd2, 0x72, 0xbb, - 0x6b, 0xd1, 0xfe, 0x96, 0xcb, 0x4c, 0xbd, 0x86, 0x26, 0x63, 0x9f, 0x81, 0x0b, 0x28, 0x73, 0x97, - 0x6c, 0xb1, 0xae, 0xd6, 0xe8, 0x9f, 0xf8, 0x34, 0x1a, 0xbc, 0xa7, 0xb7, 0xba, 0x7c, 0x1d, 0xd2, - 0xd8, 0x8f, 0x97, 0xd2, 0x1f, 0x4f, 0xd1, 0x69, 0x1b, 0xcf, 0xda, 0x96, 0x45, 0x1a, 0x9e, 0x38, - 0x73, 0x3f, 0x8f, 0x86, 0x17, 0xed, 0x86, 0xde, 0x82, 0x3e, 0x60, 0x3a, 0xa3, 0xec, 0x6c, 0x17, - 0x4f, 0x53, 0xe1, 0x4f, 0xb7, 0x28, 0x46, 0x68, 0x53, 0x48, 0x4a, 0x3b, 0x4f, 0x23, 0x6d, 0xdb, - 0x23, 0x50, 0x30, 0x1d, 0x76, 0x1e, 0x14, 0x74, 0x00, 0x25, 0x76, 0x5e, 0x48, 0x8c, 0xaf, 0xa2, - 0x7c, 0x95, 0x2e, 0x56, 0x0d, 0xbb, 0xc5, 0x15, 0x07, 0xe6, 0x53, 0x58, 0xc0, 0x44, 0x85, 0xf7, - 0x89, 0xd4, 0x05, 0x34, 0x3e, 0xdb, 0x32, 0x89, 0xe5, 0x89, 0xad, 0xa6, 0xc3, 0xa1, 0xd4, 0x24, - 0x96, 0x27, 0xb6, 0x1a, 0x06, 0x8e, 0x4e, 0xa1, 0x62, 0xab, 0x03, 0x52, 0xf5, 0x5f, 0x66, 0xd0, - 0x23, 0x37, 0xbb, 0x6b, 0xc4, 0xb1, 0x88, 0x47, 0x5c, 0xbe, 0xaa, 0x05, 0x5c, 0x97, 0xd1, 0x64, - 0x0c, 0xc9, 0xb9, 0xc3, 0x6a, 0x73, 0x37, 0x40, 0xd6, 0xf9, 0x42, 0x29, 0x4e, 0x59, 0xb1, 0xa2, - 0x78, 0x01, 0x4d, 0x84, 0x40, 0xda, 0x08, 0x57, 0x49, 0xc3, 0x7c, 0x7c, 0x71, 0x67, 0xbb, 0x38, - 0x25, 0x70, 0xa3, 0xcd, 0x16, 0xb5, 0x2f, 0x5a, 0x0c, 0xdf, 0x44, 0x85, 0x10, 0x74, 0xc3, 0xb1, - 0xbb, 0x1d, 0x57, 0xc9, 0x00, 0xab, 0xe2, 0xce, 0x76, 0xf1, 0x51, 0x81, 0x55, 0x13, 0x90, 0xe2, - 0x2a, 0x18, 0x2d, 0x88, 0xbf, 0x23, 0x25, 0x72, 0xe3, 0x23, 0x28, 0x0b, 0x23, 0xe8, 0x05, 0x7f, - 0x04, 0xf5, 0x14, 0xd2, 0x74, 0xb4, 0x24, 0x1f, 0x50, 0x91, 0x66, 0xc4, 0x06, 0x54, 0xac, 0xc6, - 0xa9, 0x59, 0x74, 0x26, 0x91, 0xd7, 0xbe, 0xb4, 0xfa, 0x8f, 0x32, 0x22, 0x97, 0xaa, 0x6d, 0x04, - 0x9d, 0xb9, 0x22, 0x76, 0x66, 0xd5, 0x36, 0xc0, 0xd4, 0x49, 0x85, 0x0b, 0x90, 0xd0, 0xd8, 0x8e, - 0x6d, 0x44, 0x2d, 0x9e, 0x78, 0x59, 0xfc, 0x36, 0x3a, 0x1b, 0x03, 0xb2, 0xa9, 0x96, 0x69, 0xff, - 0xa5, 0x9d, 0xed, 0xa2, 0x9a, 0xc0, 0x35, 0x3a, 0xf3, 0xf6, 0xe0, 0x82, 0x75, 0x74, 0x4e, 0x90, - 0xba, 0x6d, 0x79, 0xba, 0x69, 0x71, 0x0b, 0x8d, 0x8d, 0x92, 0x8f, 0xec, 0x6c, 0x17, 0x9f, 0x10, - 0x75, 0xd0, 0xa7, 0x89, 0x36, 0xbe, 0x17, 0x1f, 0x6c, 0x20, 0x25, 0x01, 0x55, 0x69, 0xeb, 0x4d, - 0xdf, 0xec, 0xbc, 0xbc, 0xb3, 0x5d, 0xfc, 0x50, 0x62, 0x1d, 0x26, 0xa5, 0x12, 0x97, 0xb9, 0x5e, - 0x9c, 0xb0, 0x86, 0x70, 0x88, 0x5b, 0xb6, 0x0d, 0x02, 0xdf, 0x30, 0x08, 0xfc, 0xd5, 0x9d, 0xed, - 0xe2, 0x45, 0x81, 0xbf, 0x65, 0x1b, 0x24, 0xda, 0xfc, 0x84, 0xd2, 0xea, 0x2f, 0x65, 0xd0, 0xc5, - 0x5a, 0x69, 0x69, 0xb1, 0x62, 0xf8, 0x76, 0x41, 0xd5, 0xb1, 0xef, 0x99, 0x86, 0x30, 0x7a, 0xd7, - 0xd0, 0xb9, 0x08, 0x6a, 0x0e, 0x4c, 0x91, 0xc0, 0x22, 0x85, 0x6f, 0xf3, 0x6d, 0x8e, 0x0e, 0xa7, - 0xa9, 0x33, 0x7b, 0xa5, 0x2e, 0x99, 0xe3, 0xbd, 0x18, 0xd1, 0x3e, 0x8a, 0xa0, 0x6a, 0x1b, 0xb6, - 0xe3, 0x35, 0xba, 0x1e, 0x57, 0x02, 0xe8, 0xa3, 0x58, 0x1d, 0x2e, 0x27, 0xea, 0x53, 0x85, 0xcf, - 0x07, 0x7f, 0x3e, 0x85, 0x0a, 0x25, 0xcf, 0x73, 0xcc, 0xb5, 0xae, 0x47, 0x96, 0xf4, 0x4e, 0xc7, - 0xb4, 0x9a, 0x30, 0xd6, 0x47, 0xae, 0xbd, 0x12, 0xac, 0x6f, 0x7d, 0x25, 0x31, 0x1d, 0x2d, 0x2e, - 0x0c, 0x51, 0xdd, 0x47, 0xd5, 0xdb, 0x0c, 0x27, 0x0e, 0xd1, 0x68, 0x39, 0x3a, 0x44, 0x13, 0x79, - 0xed, 0x6b, 0x88, 0x7e, 0x39, 0x83, 0xce, 0xaf, 0xdc, 0xf5, 0x74, 0x8d, 0xb8, 0x76, 0xd7, 0x69, - 0x10, 0xf7, 0x56, 0xc7, 0xd0, 0x3d, 0x12, 0x8e, 0xd4, 0x22, 0x1a, 0x2c, 0x19, 0x06, 0x31, 0x80, - 0xdd, 0x20, 0xdb, 0x3b, 0xe9, 0x14, 0xa0, 0x31, 0x38, 0xfe, 0x30, 0x1a, 0xe2, 0x65, 0x80, 0xfb, - 0xe0, 0xcc, 0xc8, 0xce, 0x76, 0x71, 0xa8, 0xcb, 0x40, 0x9a, 0x8f, 0xa3, 0x64, 0x65, 0xd2, 0x22, - 0x94, 0x2c, 0x13, 0x92, 0x19, 0x0c, 0xa4, 0xf9, 0x38, 0xfc, 0x26, 0x1a, 0x07, 0xb6, 0x41, 0x7b, - 0xf8, 0xdc, 0x77, 0xda, 0x97, 0xae, 0xd8, 0x58, 0xb6, 0x34, 0x41, 0x6b, 0xea, 0x8e, 0x5f, 0x40, - 0x8b, 0x30, 0xc0, 0x77, 0x50, 0x81, 0x37, 0x22, 0x64, 0x3a, 0xd8, 0x87, 0xe9, 0x99, 0x9d, 0xed, - 0xe2, 0x24, 0x6f, 0xbf, 0xc0, 0x36, 0xc6, 0x84, 0x32, 0xe6, 0xcd, 0x0e, 0x19, 0xe7, 0x76, 0x63, - 0xcc, 0xbf, 0x58, 0x64, 0x1c, 0x65, 0xa2, 0xbe, 0x85, 0x46, 0xc5, 0x82, 0xf8, 0x2c, 0xec, 0x4f, - 0xd9, 0x38, 0x81, 0x9d, 0xad, 0x69, 0xc0, 0xa6, 0xf4, 0x19, 0x34, 0x52, 0x26, 0x6e, 0xc3, 0x31, - 0x3b, 0xd4, 0x6a, 0xe0, 0x4a, 0x3e, 0xb1, 0xb3, 0x5d, 0x1c, 0x31, 0x42, 0xb0, 0x26, 0xd2, 0xa8, - 0xff, 0x2d, 0x85, 0xce, 0x52, 0xde, 0x25, 0xd7, 0x35, 0x9b, 0x56, 0x5b, 0x5c, 0xb6, 0x9f, 0x42, - 0xb9, 0x1a, 0xd4, 0xc7, 0x6b, 0x3a, 0xbd, 0xb3, 0x5d, 0x2c, 0xb0, 0x16, 0x08, 0x7a, 0xc8, 0x69, - 0x82, 0xcd, 0x59, 0x7a, 0x97, 0xcd, 0x19, 0x35, 0x47, 0x3d, 0xdd, 0xf1, 0x4c, 0xab, 0x59, 0xf3, - 0x74, 0xaf, 0xeb, 0x4a, 0xe6, 0x28, 0xc7, 0xd4, 0x5d, 0x40, 0x49, 0xe6, 0xa8, 0x54, 0x08, 0xbf, - 0x86, 0x46, 0xe7, 0x2c, 0x23, 0x64, 0xc2, 0x26, 0xc4, 0x47, 0xa9, 0x95, 0x48, 0x00, 0x1e, 0x67, - 0x21, 0x15, 0x50, 0xff, 0x5e, 0x0a, 0x29, 0x6c, 0x27, 0xb5, 0x68, 0xba, 0xde, 0x12, 0x69, 0xaf, - 0x09, 0xb3, 0xd3, 0xbc, 0xbf, 0x35, 0xa3, 0x38, 0x61, 0x2d, 0x02, 0x53, 0x80, 0x6f, 0xcd, 0x5a, - 0xa6, 0xeb, 0x45, 0x27, 0xc3, 0x48, 0x29, 0x5c, 0x41, 0x43, 0x8c, 0x33, 0xb3, 0x25, 0x46, 0xae, - 0x29, 0xbe, 0x22, 0x44, 0xab, 0x66, 0xca, 0xd0, 0x66, 0xc4, 0xe2, 0xde, 0x9a, 0x97, 0x57, 0xff, - 0x7e, 0x1a, 0x15, 0xa2, 0x85, 0xf0, 0x1d, 0x94, 0x7f, 0xc3, 0x36, 0x2d, 0x62, 0xac, 0x58, 0xd0, - 0xc2, 0xfe, 0x27, 0x0c, 0xbe, 0x1d, 0x7d, 0xea, 0x1d, 0x28, 0x53, 0xb7, 0x85, 0x9d, 0x29, 0x1c, - 0x38, 0x04, 0xcc, 0xf0, 0xa7, 0xd0, 0x30, 0xb5, 0x01, 0xef, 0x01, 0xe7, 0xf4, 0xae, 0x9c, 0x1f, - 0xe3, 0x9c, 0x4f, 0x3b, 0xac, 0x50, 0x9c, 0x75, 0xc8, 0x8e, 0xea, 0x95, 0x46, 0x74, 0xd7, 0xb6, - 0x78, 0xcf, 0x83, 0x5e, 0x39, 0x00, 0x11, 0xf5, 0x8a, 0xd1, 0x50, 0xd3, 0x95, 0x7d, 0x2c, 0x74, - 0x83, 0xb0, 0xef, 0x60, 0xb2, 0x8a, 0xf6, 0x80, 0x40, 0xac, 0x7e, 0x57, 0x1a, 0x3d, 0x1d, 0x8a, - 0x4c, 0x23, 0xf7, 0x4c, 0xb2, 0xc9, 0xc5, 0xb9, 0x61, 0x76, 0xf8, 0xc6, 0x8f, 0xaa, 0xbc, 0x3b, - 0xbb, 0xa1, 0x5b, 0x4d, 0x62, 0xe0, 0x2b, 0x68, 0x90, 0xee, 0xce, 0x5d, 0x25, 0x05, 0xe6, 0x1a, - 0x4c, 0x27, 0x74, 0x17, 0x2f, 0xf6, 0x08, 0xa3, 0xc0, 0x36, 0xca, 0xad, 0x3a, 0xba, 0xe9, 0xf9, - 0x3d, 0x5b, 0x8a, 0xf7, 0xec, 0x1e, 0x6a, 0x9c, 0x66, 0x3c, 0xd8, 0x9c, 0x0f, 0x82, 0xf0, 0x00, - 0x20, 0x0a, 0x82, 0x91, 0x4c, 0xbd, 0x88, 0x46, 0x04, 0xe2, 0x7d, 0x4d, 0xea, 0x5f, 0xcd, 0x8a, - 0xba, 0xee, 0x37, 0x8b, 0xeb, 0xfa, 0x55, 0xaa, 0xa3, 0xae, 0x4b, 0xad, 0x0a, 0xa6, 0xe4, 0x5c, - 0x13, 0x01, 0x24, 0x6b, 0x22, 0x80, 0xf0, 0xb3, 0x28, 0xcf, 0x58, 0x04, 0x7b, 0x4f, 0xd8, 0xb7, - 0x3a, 0x00, 0x93, 0x97, 0xe6, 0x80, 0x10, 0xff, 0x54, 0x0a, 0x5d, 0xe8, 0x2b, 0x09, 0x50, 0x86, - 0x91, 0x6b, 0xcf, 0x1d, 0x48, 0x8c, 0x33, 0x4f, 0xef, 0x6c, 0x17, 0xaf, 0xb4, 0x03, 0x92, 0xba, - 0x23, 0xd0, 0xd4, 0x1b, 0x8c, 0x48, 0x68, 0x57, 0xff, 0xa6, 0x50, 0xe3, 0x91, 0x55, 0x3a, 0x0f, - 0xe7, 0x2f, 0x56, 0x63, 0xcb, 0x6f, 0x64, 0x36, 0x34, 0x1e, 0xf9, 0xf7, 0xae, 0xfb, 0x24, 0x09, - 0xd5, 0xf4, 0xe0, 0x82, 0x1b, 0xe8, 0x1c, 0xc3, 0x94, 0xf5, 0xad, 0x95, 0xf5, 0x25, 0xdb, 0xf2, - 0x36, 0xfc, 0x0a, 0x06, 0xc5, 0x03, 0x0c, 0xa8, 0xc0, 0xd0, 0xb7, 0xea, 0xf6, 0x7a, 0xbd, 0x4d, - 0xa9, 0x12, 0xea, 0xe8, 0xc5, 0x89, 0x4e, 0xb4, 0x7c, 0xcc, 0xf9, 0x53, 0x50, 0x2e, 0x3c, 0x5e, - 0xf2, 0xc7, 0x69, 0x7c, 0xc2, 0x89, 0x14, 0x52, 0xbf, 0x31, 0x48, 0x77, 0xef, 0x70, 0x26, 0x08, - 0x53, 0x30, 0x7e, 0x29, 0x3c, 0x65, 0xe5, 0x73, 0x4e, 0x70, 0x2e, 0x12, 0x9c, 0xe7, 0x8c, 0xd2, - 0xf9, 0xe0, 0xb7, 0xb6, 0x8b, 0xa9, 0x9d, 0xed, 0xe2, 0x80, 0x96, 0x17, 0x76, 0x82, 0xe1, 0x22, - 0x21, 0xac, 0x8a, 0xe2, 0x29, 0x5f, 0xa4, 0x2c, 0x5b, 0x34, 0x5e, 0x43, 0x43, 0xbc, 0x0d, 0x5c, - 0x4d, 0xce, 0x85, 0x87, 0x07, 0xd2, 0xd9, 0x66, 0xa4, 0xb4, 0x5f, 0x0a, 0xbf, 0x82, 0x72, 0x6c, - 0x43, 0x0e, 0x3d, 0x28, 0x1c, 0x44, 0xc9, 0x87, 0x0f, 0x91, 0xe2, 0xbc, 0x0c, 0x5e, 0x40, 0x28, - 0xdc, 0x8c, 0x07, 0x47, 0xb9, 0x9c, 0x43, 0x7c, 0x9b, 0x1e, 0xe1, 0x22, 0x94, 0xc5, 0xcf, 0xa3, - 0xd1, 0x55, 0xe2, 0xb4, 0x4d, 0x4b, 0x6f, 0xd5, 0xcc, 0x77, 0xfd, 0xd3, 0x5c, 0x58, 0x2d, 0x5d, - 0xf3, 0x5d, 0x71, 0xb8, 0x49, 0x74, 0xf8, 0x33, 0x49, 0x9b, 0xdd, 0x21, 0x68, 0xc8, 0xe3, 0xbb, - 0xee, 0x02, 0x23, 0xed, 0x49, 0xd8, 0xfb, 0xbe, 0x89, 0xc6, 0xa4, 0x7d, 0x0e, 0x3f, 0xae, 0xbb, - 0x10, 0x67, 0x2d, 0x6c, 0xda, 0x22, 0x6c, 0x65, 0x0e, 0x54, 0xfd, 0x2a, 0x96, 0xe9, 0x99, 0x7a, - 0x6b, 0xd6, 0x6e, 0xb7, 0x75, 0xcb, 0x50, 0x86, 0x43, 0xf5, 0x33, 0x19, 0xa6, 0xde, 0x60, 0x28, - 0x51, 0xfd, 0xe4, 0x42, 0x74, 0x2f, 0xcd, 0xfb, 0x50, 0x23, 0x0d, 0xdb, 0xa1, 0x0b, 0x38, 0x9c, - 0xc6, 0xf1, 0xbd, 0xb4, 0xcb, 0x70, 0x75, 0xc7, 0x47, 0x8a, 0x16, 0x72, 0xb4, 0xe0, 0x1b, 0xd9, - 0xfc, 0x48, 0x61, 0x34, 0x7a, 0x80, 0xaa, 0xfe, 0xdd, 0x0c, 0x1a, 0xe1, 0xa4, 0x74, 0xfd, 0x3b, - 0x51, 0xf0, 0xc3, 0x28, 0x78, 0xa2, 0xa2, 0xe6, 0x1e, 0x94, 0xa2, 0xaa, 0x5f, 0x48, 0x07, 0xb3, - 0x51, 0xd5, 0x31, 0xad, 0xc3, 0xcd, 0x46, 0x97, 0x10, 0x9a, 0xdd, 0xe8, 0x5a, 0x77, 0xd9, 0x45, - 0x51, 0x3a, 0xbc, 0x28, 0x6a, 0x98, 0x9a, 0x80, 0xc1, 0x17, 0x50, 0xb6, 0x4c, 0xf9, 0xd3, 0x9e, - 0x19, 0x9d, 0x19, 0x7e, 0x8f, 0x71, 0x4a, 0x3d, 0xad, 0x01, 0x98, 0xee, 0x88, 0x66, 0xb6, 0x3c, - 0xc2, 0x6c, 0xd0, 0x0c, 0xdb, 0x11, 0xad, 0x51, 0x80, 0xc6, 0xe0, 0xf8, 0x3a, 0x9a, 0x2c, 0x93, - 0x96, 0xbe, 0xb5, 0x64, 0xb6, 0x5a, 0xa6, 0x4b, 0x1a, 0xb6, 0x65, 0xb8, 0x20, 0x64, 0x5e, 0x5d, - 0xdb, 0xd5, 0xe2, 0x04, 0x58, 0x45, 0xb9, 0x95, 0xf5, 0x75, 0x97, 0x78, 0x20, 0xbe, 0xcc, 0x0c, - 0xda, 0xd9, 0x2e, 0xe6, 0x6c, 0x80, 0x68, 0x1c, 0xa3, 0xfe, 0x6c, 0x8a, 0x6e, 0x39, 0xdc, 0xbb, - 0x9e, 0xdd, 0x09, 0xb4, 0xfc, 0x50, 0x22, 0xb9, 0x12, 0x1a, 0x03, 0x69, 0xf8, 0xda, 0x09, 0xfe, - 0xb5, 0x43, 0xdc, 0x20, 0x08, 0xcd, 0x80, 0xc4, 0xaf, 0xca, 0xec, 0xf2, 0x55, 0xea, 0x1f, 0xa7, - 0xd1, 0x39, 0xde, 0xe2, 0xd9, 0x96, 0xd9, 0x59, 0xb3, 0x75, 0xc7, 0xd0, 0x48, 0x83, 0x98, 0xf7, - 0xc8, 0xf1, 0x1c, 0x78, 0xf2, 0xd0, 0xc9, 0x1e, 0x62, 0xe8, 0x5c, 0x83, 0xdd, 0x1b, 0x95, 0x0c, - 0x9c, 0xd2, 0x32, 0x4b, 0xa0, 0xb0, 0xb3, 0x5d, 0x1c, 0x35, 0x18, 0x18, 0xce, 0xd8, 0x35, 0x91, - 0x88, 0x2a, 0xc9, 0x22, 0xb1, 0x9a, 0xde, 0x06, 0x28, 0xc9, 0x20, 0x53, 0x92, 0x16, 0x40, 0x34, - 0x8e, 0x51, 0xff, 0x4b, 0x1a, 0x9d, 0x8e, 0x8a, 0xbc, 0x46, 0x2c, 0xe3, 0x44, 0xde, 0xdf, 0x1c, - 0x79, 0xff, 0x49, 0x06, 0x3d, 0xca, 0xcb, 0xd4, 0x36, 0x74, 0x87, 0x18, 0x65, 0xd3, 0x21, 0x0d, - 0xcf, 0x76, 0xb6, 0x8e, 0xb1, 0x01, 0xf5, 0xe0, 0xc4, 0x7e, 0x1d, 0xe5, 0xf8, 0x9e, 0x9d, 0xad, - 0x33, 0xe3, 0x41, 0x4b, 0x00, 0x1a, 0x5b, 0xa1, 0xd8, 0x7e, 0x3f, 0xd2, 0x59, 0xb9, 0xbd, 0x74, - 0xd6, 0xc7, 0xd1, 0x58, 0x20, 0x7a, 0xd8, 0x3d, 0x0e, 0x85, 0xd6, 0x96, 0xe1, 0x23, 0x60, 0x03, - 0xa9, 0xc9, 0x84, 0x50, 0x9b, 0x0f, 0xa8, 0x94, 0xc1, 0x1a, 0x1a, 0xe3, 0xb5, 0x05, 0xe5, 0x4c, - 0x43, 0x13, 0x89, 0xd4, 0xed, 0x2c, 0x9a, 0x4a, 0xee, 0x76, 0x8d, 0xe8, 0xc6, 0x49, 0xaf, 0x7f, - 0x20, 0x7b, 0x1d, 0x3f, 0x8e, 0xb2, 0x55, 0xdd, 0xdb, 0xe0, 0x17, 0xcf, 0x70, 0x09, 0xbb, 0x6e, - 0xb6, 0x48, 0xbd, 0xa3, 0x7b, 0x1b, 0x1a, 0xa0, 0x84, 0x39, 0x03, 0x01, 0xc7, 0x84, 0x39, 0x43, - 0x58, 0xec, 0x47, 0x1e, 0x4b, 0x5d, 0xce, 0x26, 0x2e, 0xf6, 0xdf, 0xc8, 0xf6, 0x9a, 0x57, 0xee, - 0x38, 0xa6, 0x47, 0x4e, 0x34, 0xec, 0x44, 0xc3, 0x0e, 0xa9, 0x61, 0xbf, 0x93, 0x46, 0x63, 0xc1, - 0xa6, 0xe9, 0x1d, 0xd2, 0x38, 0x9a, 0xb5, 0x2a, 0xdc, 0xca, 0x64, 0x0e, 0xbd, 0x95, 0x39, 0x8c, - 0x42, 0xa9, 0xc1, 0x39, 0x25, 0x33, 0x0d, 0x40, 0x62, 0xec, 0x9c, 0x32, 0x38, 0x9d, 0x7c, 0x1c, - 0x0d, 0x2d, 0xe9, 0xf7, 0xcd, 0x76, 0xb7, 0xcd, 0xad, 0x74, 0x70, 0xa4, 0x6a, 0xeb, 0xf7, 0x35, - 0x1f, 0xae, 0xfe, 0x9b, 0x14, 0x1a, 0xe7, 0x42, 0xe5, 0xcc, 0x0f, 0x25, 0xd5, 0x50, 0x3a, 0xe9, - 0x43, 0x4b, 0x27, 0x73, 0x70, 0xe9, 0xa8, 0x3f, 0x96, 0x41, 0xca, 0xbc, 0xd9, 0x22, 0xab, 0x8e, - 0x6e, 0xb9, 0xeb, 0xc4, 0xe1, 0xdb, 0xe9, 0x39, 0xca, 0xea, 0x50, 0x1f, 0x28, 0x4c, 0x29, 0xe9, - 0x03, 0x4d, 0x29, 0x1f, 0x45, 0xc3, 0xbc, 0x31, 0x81, 0x13, 0x1f, 0x8c, 0x1a, 0xc7, 0x07, 0x6a, - 0x21, 0x9e, 0x12, 0x97, 0x3a, 0x1d, 0xc7, 0xbe, 0x47, 0x1c, 0x76, 0xb5, 0xc4, 0x89, 0x75, 0x1f, - 0xa8, 0x85, 0x78, 0x81, 0x33, 0xf1, 0xed, 0x45, 0x91, 0x33, 0x71, 0xb4, 0x10, 0x8f, 0x2f, 0xa3, - 0xfc, 0xa2, 0xdd, 0xd0, 0x41, 0xd0, 0x6c, 0x5a, 0x19, 0xdd, 0xd9, 0x2e, 0xe6, 0x5b, 0x1c, 0xa6, - 0x05, 0x58, 0x4a, 0x59, 0xb6, 0x37, 0xad, 0x96, 0xad, 0x33, 0x6f, 0x93, 0x3c, 0xa3, 0x34, 0x38, - 0x4c, 0x0b, 0xb0, 0x94, 0x92, 0xca, 0x1c, 0xbc, 0x78, 0xf2, 0x21, 0xcf, 0x75, 0x0e, 0xd3, 0x02, - 0xac, 0xfa, 0xb3, 0x59, 0xaa, 0xbd, 0xae, 0xf9, 0xee, 0x43, 0xbf, 0x2e, 0x84, 0x03, 0x66, 0xf0, - 0x00, 0x03, 0xe6, 0xa1, 0x39, 0xb0, 0x53, 0xff, 0xfb, 0x10, 0x42, 0x5c, 0xfa, 0x73, 0x27, 0x9b, - 0xc3, 0xc3, 0x69, 0x4d, 0x19, 0x4d, 0xce, 0x59, 0x1b, 0xba, 0xd5, 0x20, 0x46, 0x78, 0x6c, 0x99, - 0x83, 0xa1, 0x0d, 0x4e, 0xb4, 0x84, 0x23, 0xc3, 0x73, 0x4b, 0x2d, 0x5e, 0x00, 0x3f, 0x83, 0x46, - 0x2a, 0x96, 0x47, 0x1c, 0xbd, 0xe1, 0x99, 0xf7, 0x08, 0x9f, 0x1a, 0xe0, 0x3a, 0xd7, 0x0c, 0xc1, - 0x9a, 0x48, 0x83, 0xaf, 0xa3, 0xd1, 0xaa, 0xee, 0x78, 0x66, 0xc3, 0xec, 0xe8, 0x96, 0xe7, 0x2a, - 0x79, 0x98, 0xd1, 0xc0, 0xc2, 0xe8, 0x08, 0x70, 0x4d, 0xa2, 0xc2, 0x9f, 0x41, 0xc3, 0xb0, 0x35, - 0x05, 0x4f, 0xe5, 0xe1, 0x5d, 0x6f, 0xfb, 0x9e, 0x08, 0xfd, 0xf1, 0xd8, 0xe9, 0x2b, 0x5c, 0xdb, - 0x46, 0x2f, 0xfc, 0x02, 0x8e, 0xf8, 0x93, 0x68, 0x68, 0xce, 0x32, 0x80, 0x39, 0xda, 0x95, 0xb9, - 0xca, 0x99, 0x9f, 0x0d, 0x99, 0xdb, 0x9d, 0x08, 0x6f, 0x9f, 0x5d, 0xf2, 0x28, 0x1b, 0xf9, 0xe6, - 0x8d, 0xb2, 0xd1, 0x6f, 0xc2, 0xb1, 0xf8, 0xd8, 0x83, 0x3a, 0x16, 0x1f, 0x3f, 0xe0, 0xb1, 0xb8, - 0xfa, 0x2e, 0x1a, 0x99, 0xa9, 0xce, 0x07, 0xa3, 0xf7, 0x11, 0x94, 0xa9, 0x72, 0xf7, 0x82, 0x2c, - 0xb3, 0x67, 0x3a, 0xa6, 0xa1, 0x51, 0x18, 0xbe, 0x82, 0xf2, 0xb3, 0xe0, 0xb3, 0xc6, 0xaf, 0xfe, - 0xb2, 0x6c, 0xfd, 0x6b, 0x00, 0x0c, 0xdc, 0x4e, 0x7d, 0x34, 0xfe, 0x30, 0x1a, 0xaa, 0x3a, 0x76, - 0xd3, 0xd1, 0xdb, 0x7c, 0x0d, 0x06, 0xff, 0x8e, 0x0e, 0x03, 0x69, 0x3e, 0x4e, 0xfd, 0xfe, 0x94, - 0x6f, 0xb6, 0xd3, 0x12, 0xb5, 0x2e, 0x1c, 0xcd, 0x43, 0xdd, 0x79, 0x56, 0xc2, 0x65, 0x20, 0xcd, - 0xc7, 0xe1, 0x2b, 0x68, 0x70, 0xce, 0x71, 0x6c, 0x47, 0xf4, 0xee, 0x26, 0x14, 0x20, 0xde, 0xd1, - 0x02, 0x05, 0x7e, 0x01, 0x8d, 0xb0, 0x39, 0x87, 0x9d, 0x68, 0x66, 0xfa, 0x5d, 0x6f, 0x8a, 0x94, - 0xea, 0xd7, 0x32, 0x82, 0xcd, 0xc6, 0x24, 0xfe, 0x10, 0xde, 0x0a, 0x3c, 0x8b, 0x32, 0x33, 0xd5, - 0x79, 0x3e, 0x01, 0x9e, 0xf2, 0x8b, 0x0a, 0xaa, 0x12, 0x29, 0x47, 0xa9, 0xf1, 0x79, 0x94, 0xad, - 0x52, 0xf5, 0xc9, 0x81, 0x7a, 0xe4, 0x77, 0xb6, 0x8b, 0xd9, 0x0e, 0xd5, 0x1f, 0x80, 0x02, 0x96, - 0x6e, 0x66, 0xd8, 0x8e, 0x89, 0x61, 0xc3, 0x7d, 0xcc, 0x79, 0x94, 0x2d, 0x39, 0xcd, 0x7b, 0x7c, - 0xd6, 0x02, 0xac, 0xee, 0x34, 0xef, 0x69, 0x00, 0xc5, 0x57, 0x11, 0xd2, 0x88, 0xd7, 0x75, 0x2c, - 0x78, 0x78, 0x31, 0x0c, 0xe7, 0x6f, 0x30, 0x1b, 0x3a, 0x00, 0xad, 0x37, 0x6c, 0x83, 0x68, 0x02, - 0x89, 0xfa, 0x13, 0xe1, 0xc5, 0x4e, 0xd9, 0x74, 0xef, 0x9e, 0x74, 0xe1, 0x3e, 0xba, 0x50, 0xe7, - 0x47, 0x9c, 0xf1, 0x4e, 0x2a, 0xa2, 0xc1, 0xf9, 0x96, 0xde, 0x74, 0xa1, 0x0f, 0xb9, 0x03, 0xd8, - 0x3a, 0x05, 0x68, 0x0c, 0x1e, 0xe9, 0xa7, 0xfc, 0xee, 0xfd, 0xf4, 0x43, 0x83, 0xc1, 0x68, 0x5b, - 0x26, 0xde, 0xa6, 0xed, 0x9c, 0x74, 0xd5, 0x5e, 0xbb, 0xea, 0x12, 0x1a, 0xaa, 0x39, 0x0d, 0xe1, - 0xe8, 0x02, 0xf6, 0x03, 0xae, 0xd3, 0x60, 0xc7, 0x16, 0x3e, 0x92, 0xd2, 0x95, 0x5d, 0x0f, 0xe8, - 0x86, 0x42, 0x3a, 0xc3, 0xf5, 0x38, 0x1d, 0x47, 0x72, 0xba, 0xaa, 0xed, 0x78, 0xbc, 0xe3, 0x02, - 0xba, 0x8e, 0xed, 0x78, 0x9a, 0x8f, 0xc4, 0x1f, 0x45, 0x68, 0x75, 0xb6, 0x7a, 0x9b, 0x38, 0x20, - 0xae, 0xe1, 0xd0, 0x81, 0xef, 0x1e, 0x03, 0x69, 0x02, 0x1a, 0xaf, 0xa2, 0xe1, 0x95, 0x0e, 0x71, - 0xd8, 0x56, 0x88, 0x3d, 0xa5, 0xf8, 0x48, 0x44, 0xb4, 0xbc, 0xdf, 0xa7, 0xf9, 0xff, 0x01, 0x39, - 0x5b, 0x5f, 0x6c, 0xff, 0xa7, 0x16, 0x32, 0xc2, 0x2f, 0xa0, 0x5c, 0x89, 0xd9, 0x79, 0x23, 0xc0, - 0x32, 0x10, 0x19, 0x6c, 0x41, 0x19, 0x8a, 0xed, 0xd9, 0x75, 0xf8, 0x5b, 0xe3, 0xe4, 0xea, 0x15, - 0x54, 0x88, 0x56, 0x83, 0x47, 0xd0, 0xd0, 0xec, 0xca, 0xf2, 0xf2, 0xdc, 0xec, 0x6a, 0x61, 0x00, - 0xe7, 0x51, 0xb6, 0x36, 0xb7, 0x5c, 0x2e, 0xa4, 0xd4, 0x9f, 0x16, 0x66, 0x10, 0xaa, 0x5a, 0x27, - 0x57, 0xc3, 0x87, 0xba, 0x6f, 0x29, 0xc0, 0x7d, 0x28, 0x9c, 0x18, 0xb4, 0x4d, 0xcf, 0x23, 0x06, - 0x5f, 0x25, 0xe0, 0xbe, 0xd0, 0xbb, 0xaf, 0xc5, 0xf0, 0xf8, 0x29, 0x34, 0x06, 0x30, 0x7e, 0x45, - 0xc8, 0xf6, 0xc7, 0xbc, 0x80, 0x73, 0x5f, 0x93, 0x91, 0xea, 0xd7, 0xc3, 0xdb, 0xe1, 0x45, 0xa2, - 0x1f, 0xd7, 0x1b, 0xc5, 0xf7, 0x49, 0x7f, 0xa9, 0xff, 0x2b, 0xcb, 0xde, 0x6d, 0xb0, 0x97, 0x72, - 0x47, 0x21, 0xca, 0xf0, 0x48, 0x37, 0xb3, 0x8f, 0x23, 0xdd, 0xa7, 0x50, 0x6e, 0x89, 0x78, 0x1b, - 0xb6, 0xef, 0xad, 0x05, 0x6e, 0x75, 0x6d, 0x80, 0x88, 0x6e, 0x75, 0x8c, 0x06, 0xdf, 0x45, 0xd8, - 0x7f, 0x06, 0x17, 0x78, 0x4f, 0xfb, 0x47, 0xc8, 0xe7, 0x62, 0xfb, 0x94, 0x1a, 0xbc, 0x81, 0x05, - 0xc7, 0xf8, 0xd3, 0x81, 0x77, 0xb6, 0xe0, 0x3e, 0xf5, 0x67, 0xdb, 0xc5, 0x1c, 0xa3, 0xd1, 0x12, - 0xd8, 0xe2, 0x37, 0xd1, 0xf0, 0xd2, 0x7c, 0x89, 0x3f, 0x89, 0x63, 0x5e, 0x11, 0x8f, 0x04, 0x52, - 0xf4, 0x11, 0x81, 0x48, 0xe0, 0x91, 0x4c, 0x7b, 0x5d, 0x8f, 0xbf, 0x88, 0x0b, 0xb9, 0x50, 0x6d, - 0x61, 0xcf, 0x6d, 0xf8, 0xe9, 0x42, 0xa0, 0x2d, 0xf2, 0x23, 0x9c, 0xa8, 0xac, 0x18, 0x36, 0xa2, - 0x2d, 0xf9, 0x43, 0x8c, 0xee, 0x15, 0x34, 0x59, 0xea, 0x74, 0x5a, 0x26, 0x31, 0x40, 0x5f, 0xb4, - 0x6e, 0x8b, 0xb8, 0xdc, 0xe5, 0x07, 0x5e, 0x70, 0xe8, 0x0c, 0x59, 0x87, 0x87, 0x98, 0x75, 0xa7, - 0x2b, 0x3b, 0x55, 0xc6, 0xcb, 0xaa, 0x3f, 0x98, 0x46, 0x67, 0x67, 0x1d, 0xa2, 0x7b, 0x64, 0x69, - 0xbe, 0x54, 0xea, 0x82, 0x63, 0x5b, 0xab, 0x45, 0xac, 0xe6, 0xd1, 0x0c, 0xeb, 0x97, 0xd1, 0x78, - 0xd0, 0x80, 0x5a, 0xc3, 0xee, 0x10, 0xf1, 0x35, 0x54, 0xc3, 0xc7, 0xd4, 0x5d, 0x8a, 0xd2, 0x22, - 0xa4, 0xf8, 0x26, 0x3a, 0x15, 0x40, 0x4a, 0xad, 0x96, 0xbd, 0xa9, 0x91, 0xae, 0xcb, 0xbc, 0x59, - 0xf3, 0xcc, 0x9b, 0x35, 0xe4, 0xa0, 0x53, 0x7c, 0xdd, 0xa1, 0x04, 0x5a, 0x52, 0x29, 0xf5, 0x2b, - 0x19, 0x74, 0xee, 0xb6, 0xde, 0x32, 0x8d, 0x50, 0x34, 0x1a, 0x71, 0x3b, 0xb6, 0xe5, 0x92, 0x63, - 0x34, 0x4a, 0xa5, 0xa1, 0x90, 0x7d, 0x20, 0x43, 0x21, 0xde, 0x45, 0x83, 0x87, 0xee, 0xa2, 0xdc, - 0x81, 0xba, 0xe8, 0x3f, 0xa7, 0x50, 0xc1, 0xf7, 0xd6, 0x17, 0x9f, 0x2f, 0x0b, 0xae, 0xe4, 0x70, - 0x84, 0x18, 0x71, 0x5e, 0x06, 0x3c, 0xae, 0xa1, 0xa1, 0xb9, 0xfb, 0x1d, 0xd3, 0x21, 0xee, 0x1e, - 0x3c, 0xaf, 0x2f, 0xf0, 0xe3, 0x92, 0x49, 0xc2, 0x8a, 0xc4, 0x4e, 0x4a, 0x18, 0x18, 0xde, 0xe0, - 0xb1, 0xf7, 0x0a, 0x33, 0xfe, 0x9b, 0x6c, 0xf6, 0x06, 0x8f, 0xbf, 0x6b, 0x90, 0x1e, 0x44, 0x86, - 0xa4, 0xf8, 0x09, 0x94, 0x59, 0x5d, 0x5d, 0xe4, 0x33, 0x29, 0xbc, 0x85, 0xf7, 0x3c, 0xf1, 0x91, - 0x21, 0xc5, 0xaa, 0xbf, 0x97, 0x46, 0x88, 0xaa, 0x02, 0x1b, 0xae, 0x47, 0xa2, 0x84, 0x33, 0x28, - 0xef, 0x0b, 0x9c, 0xab, 0x61, 0xe0, 0x6a, 0x1f, 0xed, 0x88, 0x68, 0xdd, 0xc1, 0xb3, 0x8a, 0xa2, - 0xef, 0xfd, 0xcd, 0xee, 0x01, 0x60, 0x67, 0x03, 0xde, 0xdf, 0xbe, 0xcf, 0xf7, 0x47, 0xd1, 0x30, - 0x9f, 0xf1, 0x6c, 0xe9, 0xfc, 0xbf, 0xe1, 0x03, 0xb5, 0x10, 0x1f, 0x99, 0x5a, 0x73, 0x87, 0x58, - 0x88, 0x7d, 0xf1, 0xb2, 0x5e, 0x39, 0x11, 0xef, 0x03, 0x16, 0xef, 0x17, 0xb9, 0x78, 0xd9, 0xb3, - 0x9b, 0x63, 0x2b, 0xde, 0x07, 0x76, 0xf6, 0xad, 0xfe, 0x4e, 0x0a, 0x61, 0xda, 0xac, 0xaa, 0xee, - 0xba, 0x9b, 0xb6, 0x63, 0x30, 0x8f, 0xf2, 0x23, 0x11, 0xcc, 0x83, 0xbb, 0xaf, 0xfc, 0x5a, 0x1e, - 0x9d, 0x92, 0x1c, 0x7f, 0x8f, 0xf9, 0x64, 0x75, 0x45, 0x1e, 0x4d, 0xfd, 0x9e, 0xaa, 0x7c, 0x48, - 0xbc, 0x10, 0x1d, 0x94, 0x5e, 0x8d, 0x09, 0x37, 0xa1, 0x4f, 0xa3, 0x51, 0xfe, 0x83, 0xae, 0xd0, - 0xfe, 0x4d, 0x17, 0x8c, 0x52, 0x97, 0x02, 0x34, 0x09, 0x8d, 0x9f, 0x43, 0xc3, 0x74, 0xc0, 0x34, - 0x21, 0x6c, 0xc6, 0x50, 0xf8, 0x0c, 0xc4, 0xf0, 0x81, 0xe2, 0x7a, 0x12, 0x50, 0x0a, 0x8f, 0x7f, - 0xf2, 0x7b, 0x78, 0xfc, 0xf3, 0x36, 0x1a, 0x29, 0x59, 0x96, 0xed, 0xc1, 0x26, 0xdd, 0xe5, 0x57, - 0x13, 0x3d, 0xad, 0xf2, 0x27, 0xe0, 0x45, 0x7b, 0x48, 0x9f, 0x68, 0x96, 0x8b, 0x0c, 0xf1, 0x35, - 0xff, 0x29, 0x0b, 0x71, 0xb8, 0x57, 0x39, 0x5c, 0xcf, 0x38, 0x1c, 0x16, 0x7f, 0xc9, 0x02, 0x9d, - 0x37, 0x56, 0x75, 0xec, 0x8e, 0xed, 0x12, 0x83, 0x09, 0x6a, 0x24, 0x8c, 0xb7, 0xd1, 0xe1, 0x08, - 0x78, 0x7c, 0x26, 0x85, 0xb0, 0x90, 0x8a, 0xe0, 0x75, 0x74, 0xda, 0xbf, 0x28, 0x0e, 0x9e, 0xf9, - 0x55, 0xca, 0xae, 0x32, 0x0a, 0x4f, 0x89, 0x70, 0x54, 0x19, 0x2a, 0xe5, 0x99, 0x8b, 0xfe, 0xb5, - 0x88, 0xff, 0x4e, 0xb0, 0x6e, 0x1a, 0x62, 0x57, 0x27, 0xf2, 0xc3, 0xdf, 0x8a, 0x46, 0x96, 0xf4, - 0xfb, 0xe5, 0x2e, 0x3f, 0x7b, 0x19, 0xdb, 0xfb, 0xed, 0x4b, 0x5b, 0xbf, 0x5f, 0x37, 0x78, 0xb9, - 0x88, 0x4d, 0x21, 0xb2, 0xc4, 0x75, 0x74, 0xb6, 0xea, 0xd8, 0x6d, 0xdb, 0x23, 0x46, 0xe4, 0xc5, - 0xdc, 0x44, 0xf8, 0xc4, 0xb6, 0xc3, 0x29, 0xea, 0x7d, 0x9e, 0xce, 0xf5, 0x60, 0x83, 0xdb, 0x68, - 0xa2, 0xe4, 0xba, 0xdd, 0x36, 0x09, 0x6f, 0xa8, 0x0a, 0xbb, 0x7e, 0xc6, 0x47, 0xb8, 0xd7, 0xf2, - 0xa3, 0x3a, 0x14, 0x65, 0x17, 0x54, 0x75, 0xcf, 0x14, 0x6b, 0x84, 0x6f, 0x89, 0xf2, 0x7e, 0x23, - 0x9b, 0x1f, 0x2f, 0x4c, 0x68, 0xe7, 0xe2, 0x8d, 0x59, 0x35, 0xbd, 0x16, 0x51, 0x7f, 0x25, 0x85, - 0x50, 0x28, 0x60, 0xfc, 0xb4, 0x1c, 0x9b, 0x27, 0x15, 0x5e, 0x74, 0xf0, 0x90, 0x03, 0x52, 0x30, - 0x1e, 0x7c, 0x1e, 0x65, 0x21, 0xa4, 0x44, 0x3a, 0x3c, 0x58, 0xbd, 0x6b, 0x5a, 0x86, 0x06, 0x50, - 0x8a, 0x15, 0xde, 0x8f, 0x03, 0x16, 0x2e, 0xf5, 0x99, 0x55, 0x58, 0x46, 0x13, 0xb5, 0xee, 0x9a, - 0x5f, 0xb7, 0xf0, 0x18, 0x0e, 0x22, 0x5b, 0xb8, 0xdd, 0xb5, 0xe0, 0x05, 0xa9, 0x14, 0x37, 0x44, - 0x2e, 0xa2, 0xfe, 0x6c, 0x2a, 0x32, 0x0b, 0x1e, 0xe1, 0xa2, 0xf7, 0xa1, 0xb8, 0x9f, 0x46, 0x7c, - 0x5a, 0x52, 0xff, 0x56, 0x1a, 0x8d, 0x54, 0x6d, 0xc7, 0xe3, 0x31, 0x3a, 0x8e, 0xf7, 0x2a, 0x24, - 0xec, 0x95, 0xb2, 0xfb, 0xd8, 0x2b, 0x9d, 0x47, 0x59, 0xc1, 0x45, 0x99, 0xdd, 0x8b, 0x18, 0x86, - 0xa3, 0x01, 0x54, 0xfd, 0xb6, 0x34, 0x42, 0x9f, 0x7c, 0xe6, 0x99, 0x87, 0x58, 0x40, 0xea, 0x8f, - 0xa6, 0xd0, 0x04, 0xbf, 0xa8, 0x13, 0xa2, 0x5c, 0x0d, 0xf9, 0x57, 0xac, 0xe2, 0xb8, 0x64, 0x20, - 0xcd, 0xc7, 0xd1, 0x25, 0x60, 0xee, 0xbe, 0xe9, 0xc1, 0x5d, 0x85, 0x10, 0xe6, 0x8a, 0x70, 0x98, - 0xb8, 0x04, 0xf8, 0x74, 0xf8, 0x69, 0xff, 0x0a, 0x32, 0x13, 0xae, 0x7b, 0xb4, 0xc0, 0x5c, 0xe2, - 0x35, 0xa4, 0xfa, 0x0b, 0x59, 0x94, 0x9d, 0xbb, 0x4f, 0x1a, 0xc7, 0xbc, 0x6b, 0x84, 0x83, 0xcd, - 0xec, 0x21, 0x0f, 0x36, 0x0f, 0xe2, 0x53, 0xf1, 0x5a, 0xd8, 0x9f, 0x39, 0xb9, 0xfa, 0x48, 0xcf, - 0x47, 0xab, 0xf7, 0x7b, 0xfa, 0xf8, 0xb9, 0xe4, 0xfc, 0xb3, 0x0c, 0xca, 0xd4, 0x66, 0xab, 0x27, - 0x7a, 0x73, 0xa4, 0x7a, 0xd3, 0xff, 0xce, 0x5a, 0x0d, 0xae, 0xa1, 0xf2, 0xa1, 0x97, 0x68, 0xe4, - 0xc6, 0xe9, 0x4f, 0x32, 0x68, 0xbc, 0x36, 0xbf, 0x5a, 0x15, 0x4e, 0x82, 0x6f, 0x32, 0x4f, 0x3e, - 0xf0, 0x29, 0x63, 0x5d, 0x7a, 0x3e, 0x66, 0xcf, 0xdc, 0xaa, 0x58, 0xde, 0xf3, 0xd7, 0x6f, 0xeb, - 0xad, 0x2e, 0x81, 0xa3, 0x17, 0xe6, 0xf7, 0xeb, 0x9a, 0xef, 0x92, 0xaf, 0xc0, 0x6b, 0x7d, 0x9f, - 0x01, 0x7e, 0x19, 0x65, 0x6e, 0x71, 0x8f, 0x8c, 0x5e, 0x7c, 0x9e, 0xbd, 0xc6, 0xf8, 0xd0, 0x49, - 0x30, 0xd3, 0x35, 0x0d, 0xe0, 0x40, 0x4b, 0xd1, 0xc2, 0x37, 0xf8, 0x02, 0xbc, 0xa7, 0xc2, 0x4d, - 0xbf, 0xf0, 0x8d, 0x4a, 0x19, 0xd7, 0xd0, 0x48, 0x95, 0x38, 0x6d, 0x13, 0x3a, 0xca, 0x9f, 0xb3, - 0xfb, 0x33, 0xa1, 0x3b, 0x95, 0x91, 0x4e, 0x58, 0x08, 0x98, 0x89, 0x5c, 0xf0, 0x5b, 0x08, 0x31, - 0x1b, 0x65, 0x8f, 0x91, 0x13, 0x2f, 0x80, 0xdd, 0xcf, 0x4c, 0xcb, 0x04, 0x1b, 0x4f, 0x60, 0x86, - 0xef, 0xa2, 0xc2, 0x92, 0x6d, 0x98, 0xeb, 0x26, 0x73, 0xbd, 0x84, 0x0a, 0x72, 0xbb, 0x3b, 0x3c, - 0x51, 0x53, 0xb2, 0x2d, 0x94, 0x4b, 0xaa, 0x26, 0xc6, 0x58, 0xfd, 0x27, 0x83, 0x28, 0x4b, 0xbb, - 0xfd, 0x64, 0xfc, 0x1e, 0x66, 0xfc, 0x96, 0x50, 0xe1, 0x8e, 0xed, 0xdc, 0x35, 0xad, 0x66, 0xe0, - 0x15, 0xcf, 0xf7, 0xa6, 0xe0, 0xc9, 0xb3, 0xc9, 0x70, 0xf5, 0xc0, 0x81, 0x5e, 0x8b, 0x91, 0xef, - 0x32, 0x82, 0x5f, 0x44, 0x68, 0x55, 0x77, 0x9a, 0xc4, 0x03, 0x9a, 0x7c, 0x18, 0x61, 0xc2, 0x03, - 0x28, 0x38, 0xda, 0x8b, 0x11, 0x26, 0x42, 0x62, 0xba, 0x09, 0x67, 0xbe, 0x10, 0xc3, 0xe0, 0x77, - 0x0f, 0x9b, 0x70, 0xf0, 0x85, 0x10, 0x8d, 0x00, 0xe6, 0x15, 0x51, 0x45, 0x48, 0xb8, 0x5f, 0x42, - 0x11, 0x41, 0x48, 0x93, 0x03, 0x8f, 0xe9, 0x96, 0x70, 0xbd, 0xa4, 0x09, 0x3c, 0xf0, 0xf3, 0x91, - 0x0b, 0x70, 0x2c, 0x71, 0xeb, 0x79, 0xff, 0x1d, 0x3a, 0x50, 0x8d, 0xee, 0xe6, 0x40, 0xa5, 0x7e, - 0x21, 0x8d, 0x86, 0x6b, 0xdd, 0x35, 0x77, 0xcb, 0xf5, 0x48, 0xfb, 0x98, 0xab, 0xb1, 0xbf, 0xbd, - 0xca, 0x26, 0x6e, 0xaf, 0x9e, 0xf0, 0x85, 0x22, 0x9c, 0x3b, 0x06, 0x26, 0x9d, 0x2f, 0x8e, 0x7f, - 0x90, 0x46, 0x05, 0x76, 0x71, 0x56, 0x36, 0xdd, 0xc6, 0x03, 0x70, 0xe6, 0x3f, 0x7a, 0xa9, 0x1c, - 0xee, 0xb2, 0x79, 0x0f, 0x4f, 0x24, 0xd4, 0xcf, 0xa5, 0xd1, 0x48, 0xa9, 0xeb, 0x6d, 0x94, 0x3c, - 0xd0, 0xad, 0x87, 0x72, 0x7f, 0xf2, 0x1b, 0x29, 0x34, 0x41, 0x1b, 0xb2, 0x6a, 0xdf, 0x25, 0xd6, - 0x03, 0x38, 0x78, 0x14, 0x0f, 0x10, 0xd3, 0x07, 0x3c, 0x40, 0xf4, 0x65, 0x99, 0xd9, 0x9f, 0x2c, - 0xe1, 0xb8, 0x5c, 0xb3, 0x5b, 0xe4, 0x78, 0x7f, 0xc6, 0x03, 0x3c, 0x2e, 0xf7, 0x05, 0xf2, 0x00, - 0xae, 0x67, 0x3e, 0x58, 0x02, 0x79, 0x00, 0x67, 0x4b, 0x1f, 0x0c, 0x81, 0x7c, 0x2d, 0x85, 0x86, - 0x67, 0x6c, 0xef, 0x98, 0x0f, 0x7c, 0xfe, 0x15, 0xc7, 0x5b, 0xcd, 0xfd, 0xaf, 0x38, 0xde, 0xba, - 0xa9, 0xfe, 0x70, 0x1a, 0x9d, 0xe6, 0x51, 0xb1, 0xf9, 0xf9, 0xc3, 0xc9, 0x74, 0xcc, 0x07, 0x5b, - 0x5c, 0x34, 0x27, 0xf3, 0x10, 0x17, 0xcd, 0x4f, 0x66, 0xd0, 0x69, 0x88, 0x3f, 0x4a, 0xb7, 0x65, - 0x1f, 0x00, 0x5b, 0x04, 0x37, 0xe4, 0x4b, 0xd0, 0xa5, 0x84, 0x4b, 0xd0, 0x3f, 0xdb, 0x2e, 0x3e, - 0xdf, 0x34, 0xbd, 0x8d, 0xee, 0xda, 0x74, 0xc3, 0x6e, 0x5f, 0x6d, 0x3a, 0xfa, 0x3d, 0x93, 0x5d, - 0xff, 0xe9, 0xad, 0xab, 0x41, 0x82, 0x09, 0xbd, 0x63, 0xf2, 0xd4, 0x13, 0x35, 0xd8, 0xeb, 0x50, - 0xae, 0xfe, 0xf5, 0xa9, 0x8b, 0xd0, 0x1b, 0xb6, 0x69, 0x71, 0x9f, 0x42, 0x66, 0xe8, 0xd6, 0xe8, - 0xfe, 0xf0, 0x1d, 0xdb, 0xb4, 0xea, 0x51, 0xc7, 0xc2, 0xfd, 0xd6, 0x17, 0xb2, 0xd6, 0x84, 0x6a, - 0xd4, 0x7f, 0x9d, 0x42, 0x8f, 0xc8, 0x5a, 0xfc, 0x41, 0xb0, 0x1d, 0x7f, 0x24, 0x8d, 0xce, 0xdc, - 0x00, 0xe1, 0x04, 0x8e, 0x1c, 0x27, 0xf3, 0x16, 0x1f, 0x9c, 0x09, 0xb2, 0x39, 0xb1, 0x28, 0x7b, - 0xcb, 0xe6, 0x64, 0x52, 0xe7, 0xb2, 0xf9, 0xcd, 0x14, 0x3a, 0xb5, 0x52, 0x29, 0xcf, 0x7e, 0x40, - 0x46, 0x54, 0xfc, 0x7b, 0x8e, 0xb9, 0xc1, 0x19, 0xfb, 0x9e, 0x63, 0x6e, 0x7a, 0xd2, 0xef, 0xa9, - 0x95, 0x96, 0x16, 0x3f, 0x48, 0xfa, 0x26, 0x7d, 0xcf, 0x07, 0x40, 0xdf, 0xa4, 0xef, 0x39, 0xe6, - 0xfa, 0xf6, 0xeb, 0x39, 0x34, 0x72, 0xb3, 0xbb, 0x46, 0xb8, 0x4b, 0xc8, 0x43, 0x7d, 0xde, 0x7a, - 0x0d, 0x8d, 0x70, 0x31, 0xc0, 0x5d, 0x85, 0x10, 0xb2, 0x8e, 0x87, 0x20, 0x61, 0x51, 0x81, 0x44, - 0x22, 0x7c, 0x1e, 0x65, 0x6f, 0x13, 0x67, 0x4d, 0x7c, 0xcd, 0x79, 0x8f, 0x38, 0x6b, 0x1a, 0x40, - 0xf1, 0x62, 0xe8, 0xa8, 0x5e, 0xaa, 0x56, 0x20, 0xe7, 0x08, 0xbf, 0x26, 0x81, 0x24, 0x2a, 0x81, - 0xb7, 0x99, 0xde, 0x31, 0x59, 0xb6, 0x12, 0xf1, 0x25, 0x79, 0xb4, 0x24, 0x5e, 0x46, 0x93, 0xa2, - 0xbb, 0x11, 0x4b, 0xb8, 0x91, 0x4f, 0x60, 0x97, 0x94, 0x6a, 0x23, 0x5e, 0x14, 0xbf, 0x86, 0x46, - 0x7d, 0x20, 0x38, 0x4e, 0x0d, 0x87, 0x51, 0xde, 0x03, 0x56, 0x91, 0x4c, 0x3c, 0x52, 0x01, 0x91, - 0x01, 0x1c, 0xfe, 0xa3, 0x04, 0x06, 0x11, 0x47, 0x34, 0xa9, 0x00, 0x7e, 0x0e, 0x18, 0xc0, 0xe3, - 0x0a, 0x70, 0x11, 0x19, 0x81, 0xa7, 0x8e, 0xe0, 0x08, 0xef, 0x70, 0x38, 0x7b, 0xd0, 0x2a, 0x91, - 0xe1, 0x15, 0x84, 0xc2, 0xab, 0x7c, 0x1e, 0x36, 0x60, 0xdf, 0x4e, 0x06, 0x02, 0x0b, 0xf1, 0x12, - 0x6e, 0xec, 0x20, 0x97, 0x70, 0xea, 0x6f, 0xa7, 0xd1, 0x48, 0xa9, 0xd3, 0x09, 0x86, 0xc2, 0xd3, - 0x28, 0x57, 0xea, 0x74, 0x6e, 0x69, 0x15, 0x31, 0xea, 0xb7, 0xde, 0xe9, 0xd4, 0xbb, 0x8e, 0x29, - 0x7a, 0x62, 0x32, 0x22, 0x3c, 0x8b, 0xc6, 0x4a, 0x9d, 0x4e, 0xb5, 0xbb, 0xd6, 0x32, 0x1b, 0x42, - 0x12, 0x21, 0x96, 0xab, 0xac, 0xd3, 0xa9, 0x77, 0x00, 0x13, 0xcd, 0x02, 0x25, 0x97, 0xc1, 0x6f, - 0x43, 0xb0, 0x1d, 0x9e, 0xc3, 0x86, 0x65, 0xc9, 0x50, 0x83, 0x78, 0xdf, 0x61, 0xdb, 0xa6, 0x03, - 0x22, 0x16, 0x17, 0xfd, 0xbc, 0x1f, 0x5d, 0x9e, 0x56, 0x14, 0xcb, 0x55, 0x13, 0xb2, 0xc4, 0x1f, - 0x43, 0x43, 0xa5, 0x4e, 0x47, 0xb8, 0xe5, 0x01, 0x57, 0x1e, 0x5a, 0x2a, 0xd2, 0xc7, 0x3e, 0xd9, - 0xd4, 0x2b, 0x68, 0x5c, 0xae, 0x6c, 0x5f, 0x71, 0xd5, 0xff, 0x34, 0x05, 0x1f, 0x74, 0xcc, 0x3d, - 0x89, 0x9f, 0x45, 0x99, 0x52, 0xa7, 0xc3, 0xe7, 0xa3, 0x53, 0x09, 0xfd, 0x11, 0x7d, 0x78, 0x5c, - 0xea, 0x74, 0xfc, 0x4f, 0x3f, 0xe6, 0x4f, 0x12, 0x0e, 0xf4, 0xe9, 0x5f, 0x63, 0x9f, 0x7e, 0xbc, - 0x9f, 0x0b, 0xa8, 0xbf, 0x90, 0x41, 0x13, 0xa5, 0x4e, 0xe7, 0x24, 0xb4, 0xfb, 0x83, 0x7a, 0xde, - 0xfc, 0x0c, 0x42, 0xc2, 0xf4, 0x38, 0x14, 0x3c, 0x98, 0x1a, 0x11, 0xa6, 0x46, 0x25, 0xa5, 0x09, - 0x44, 0xbe, 0xfa, 0xe5, 0xf7, 0xa5, 0x7e, 0x9f, 0xcb, 0xc0, 0x54, 0x7c, 0xdc, 0x43, 0x35, 0xbd, - 0x5f, 0xba, 0x8d, 0xf7, 0x41, 0x6e, 0x5f, 0x7d, 0xf0, 0x6b, 0xd2, 0xe0, 0x81, 0x50, 0xe1, 0x27, - 0xbd, 0x30, 0x78, 0x28, 0xb3, 0x78, 0x5c, 0x14, 0x26, 0x8f, 0x1f, 0xe3, 0xe7, 0x1c, 0xe2, 0xd1, - 0x8c, 0x1a, 0x14, 0x55, 0x37, 0x0d, 0x2d, 0x42, 0xeb, 0xf7, 0xe1, 0xd0, 0xbe, 0xfa, 0x70, 0x3b, - 0x0d, 0x2f, 0x96, 0x83, 0x68, 0x48, 0x87, 0xdf, 0x5d, 0x5c, 0x45, 0x88, 0xdd, 0xf7, 0x07, 0xce, - 0xc4, 0x63, 0x2c, 0xf0, 0x09, 0x4b, 0x45, 0xc4, 0x03, 0x9f, 0x84, 0x24, 0x81, 0x5f, 0x52, 0x26, - 0xd1, 0x2f, 0xe9, 0x0a, 0xca, 0x6b, 0xfa, 0xe6, 0x9b, 0x5d, 0xe2, 0x6c, 0x71, 0x73, 0x86, 0x05, - 0x1b, 0xd4, 0x37, 0xeb, 0x9f, 0xa5, 0x40, 0x2d, 0x40, 0x63, 0x35, 0x78, 0xf2, 0x2e, 0xf8, 0x61, - 0xb0, 0x93, 0xe9, 0xe0, 0xa1, 0xfb, 0x41, 0x14, 0x1d, 0xbf, 0x84, 0x32, 0xa5, 0x3b, 0x35, 0x2e, - 0xd9, 0xa0, 0x6b, 0x4b, 0x77, 0x6a, 0x5c, 0x5e, 0x3d, 0xcb, 0xde, 0xa9, 0xa9, 0x9f, 0x4b, 0x23, - 0x1c, 0xa7, 0xc4, 0xcf, 0xa3, 0x61, 0x80, 0x36, 0xa9, 0xce, 0x88, 0x39, 0x2c, 0x37, 0xdd, 0xba, - 0x03, 0x50, 0xc9, 0xb8, 0xf3, 0x49, 0xf1, 0x8b, 0x90, 0x6a, 0x97, 0x67, 0x51, 0x93, 0x72, 0x58, - 0x6e, 0xba, 0x7e, 0x72, 0xda, 0x48, 0xa6, 0x5d, 0x4e, 0x0c, 0x76, 0xe1, 0x9d, 0xda, 0x82, 0xed, - 0x7a, 0x5c, 0xd4, 0xcc, 0x2e, 0xdc, 0x74, 0x21, 0xf1, 0xa9, 0x64, 0x17, 0x32, 0x32, 0x48, 0x00, - 0x75, 0xa7, 0xc6, 0x1e, 0x87, 0x18, 0x9a, 0xdd, 0xf2, 0x0d, 0x4a, 0x96, 0x00, 0x6a, 0xd3, 0xad, - 0xb3, 0x87, 0x25, 0x06, 0xe4, 0xf8, 0x95, 0x12, 0x40, 0x49, 0xa5, 0xd4, 0xef, 0xcb, 0xa3, 0x42, - 0x59, 0xf7, 0xf4, 0x35, 0xdd, 0x25, 0xc2, 0x6e, 0x7a, 0xc2, 0x87, 0xf9, 0x9f, 0x23, 0xc8, 0xc1, - 0x58, 0x4b, 0xf8, 0x9a, 0x68, 0x01, 0xfc, 0x72, 0xc8, 0x37, 0x48, 0xcf, 0x29, 0xe6, 0xfb, 0x5a, - 0xab, 0x77, 0x38, 0x58, 0x8b, 0x11, 0xe2, 0xa7, 0xd0, 0x88, 0x0f, 0xa3, 0x1b, 0x80, 0x4c, 0xa8, - 0x33, 0xc6, 0x1a, 0xb5, 0xff, 0x35, 0x11, 0x8d, 0x5f, 0x44, 0xa3, 0xfe, 0x4f, 0xc1, 0xb4, 0x66, - 0xc9, 0xcb, 0xd6, 0x62, 0xbb, 0x27, 0x91, 0x54, 0x2c, 0x0a, 0xf3, 0xdb, 0xa0, 0x54, 0x34, 0x92, - 0x1f, 0x4c, 0x22, 0xc5, 0x9f, 0x45, 0xe3, 0xfe, 0x6f, 0xbe, 0x61, 0x60, 0xa9, 0xd4, 0x9e, 0x0a, - 0x52, 0x08, 0x47, 0xc4, 0x3a, 0x2d, 0x93, 0xb3, 0xad, 0xc3, 0xa3, 0x7e, 0xca, 0x2b, 0x63, 0x2d, - 0xbe, 0x73, 0x88, 0x54, 0x80, 0x2b, 0x68, 0xd2, 0x87, 0x84, 0x1a, 0x3a, 0x14, 0xee, 0x18, 0x8d, - 0xb5, 0x7a, 0xa2, 0x92, 0xc6, 0x4b, 0xe1, 0x16, 0x3a, 0x2f, 0x01, 0x0d, 0x77, 0xc3, 0x5c, 0xf7, - 0xf8, 0x76, 0x8f, 0x47, 0xfe, 0xe5, 0x39, 0x0e, 0x03, 0xae, 0x8c, 0xc6, 0x4f, 0x56, 0x2a, 0x27, - 0x52, 0xea, 0xcb, 0x0d, 0xd7, 0xd0, 0x69, 0x1f, 0x7f, 0x63, 0xb6, 0x5a, 0x75, 0xec, 0x77, 0x48, - 0xc3, 0xab, 0x94, 0xf9, 0x76, 0x19, 0x22, 0xc2, 0x19, 0x6b, 0xf5, 0x66, 0xa3, 0x43, 0x95, 0x82, - 0xe2, 0x64, 0xe6, 0x89, 0x85, 0xf1, 0x6d, 0x74, 0x46, 0x80, 0x57, 0x2c, 0xd7, 0xd3, 0xad, 0x06, - 0xa9, 0x94, 0xf9, 0x1e, 0x1a, 0xf6, 0xf3, 0x9c, 0xab, 0xc9, 0x91, 0x32, 0xdb, 0xe4, 0xe2, 0xf8, - 0x15, 0x34, 0xe6, 0x23, 0xd8, 0xdd, 0xdd, 0x08, 0xdc, 0xdd, 0xc1, 0x90, 0x34, 0xd6, 0xea, 0xd1, - 0x37, 0x8c, 0x32, 0xb1, 0xa8, 0x51, 0x90, 0xc1, 0x7d, 0x54, 0xd2, 0x28, 0x6f, 0xab, 0x93, 0xa8, - 0x8c, 0x90, 0xd5, 0xfd, 0xb5, 0x50, 0xa3, 0x56, 0x1c, 0xb3, 0x69, 0xb2, 0x9d, 0xb4, 0xff, 0x6c, - 0x71, 0xad, 0x6e, 0x03, 0x30, 0x49, 0x3f, 0x18, 0xf9, 0x54, 0x09, 0x9d, 0x4a, 0xd0, 0xb1, 0x7d, - 0xed, 0x18, 0xbf, 0x90, 0x0e, 0x1b, 0x71, 0xcc, 0xb7, 0x8d, 0x33, 0x28, 0xef, 0x7f, 0x09, 0x37, - 0x1e, 0x94, 0x5e, 0x43, 0x33, 0xca, 0xc3, 0xc7, 0x4b, 0xe2, 0x38, 0xe6, 0x5b, 0xc9, 0x07, 0x21, - 0x8e, 0xf7, 0x52, 0xa1, 0x38, 0x8e, 0xf9, 0xf6, 0xf2, 0x37, 0x33, 0xe1, 0x9c, 0x74, 0xb2, 0xc7, - 0x7c, 0x50, 0x66, 0x72, 0xe8, 0x7d, 0x9a, 0xdb, 0xc7, 0xf3, 0x41, 0x51, 0x35, 0x87, 0x0e, 0xa8, - 0x9a, 0xbf, 0x1b, 0xef, 0x4f, 0x66, 0x7a, 0x1e, 0xcb, 0xfe, 0x7c, 0x00, 0x83, 0x15, 0x5f, 0x0b, - 0xd7, 0x31, 0x66, 0xa3, 0x0f, 0x0a, 0x81, 0xf5, 0xd6, 0xb8, 0x89, 0x2e, 0x93, 0xe0, 0x4f, 0xa3, - 0x73, 0x12, 0xa0, 0xaa, 0x3b, 0x7a, 0x9b, 0x78, 0x61, 0x72, 0x3e, 0x08, 0x95, 0xe4, 0x97, 0xae, - 0x77, 0x02, 0xb4, 0x98, 0xf0, 0xaf, 0x07, 0x07, 0x41, 0x39, 0x86, 0xf6, 0xe1, 0x9a, 0xfc, 0xe7, - 0x69, 0xa4, 0x04, 0x06, 0x62, 0xf0, 0x08, 0xe7, 0x08, 0x27, 0xe3, 0xf7, 0x45, 0xe7, 0x9a, 0x68, - 0x32, 0x14, 0x46, 0xad, 0xdb, 0x6e, 0xeb, 0xd0, 0xc1, 0xd4, 0x00, 0x2d, 0x46, 0x99, 0x85, 0x84, - 0xcc, 0xe6, 0x9c, 0xe2, 0x36, 0x27, 0x0e, 0x1f, 0x39, 0xd5, 0x5d, 0xc6, 0x42, 0x8b, 0x73, 0x55, - 0xff, 0x6d, 0x2a, 0x54, 0x8a, 0x08, 0x2b, 0x3c, 0x8d, 0x50, 0x08, 0xe2, 0x9b, 0x84, 0xf1, 0x9d, - 0xed, 0x22, 0x0a, 0x59, 0x6b, 0x02, 0x05, 0x5e, 0x41, 0xb9, 0x59, 0xbb, 0x6b, 0x05, 0x49, 0x49, - 0x3f, 0xba, 0x4b, 0x5b, 0xa7, 0x19, 0x35, 0x6b, 0x37, 0x6c, 0x00, 0x1a, 0x00, 0xd0, 0x38, 0x9b, - 0xa9, 0x17, 0xd1, 0x88, 0x40, 0xb2, 0x9b, 0xa9, 0x33, 0x28, 0x9a, 0x3a, 0x5f, 0xcc, 0x20, 0x2c, - 0x5a, 0xf4, 0x47, 0x68, 0xee, 0xbc, 0x2f, 0x54, 0xea, 0x60, 0xf9, 0x49, 0x2e, 0xa3, 0x3c, 0xfd, - 0x04, 0x88, 0xf8, 0x2f, 0x44, 0xf8, 0xec, 0x72, 0x98, 0x16, 0x60, 0xc3, 0xf0, 0x3a, 0x43, 0xc9, - 0xe1, 0x75, 0xd4, 0x1f, 0xc8, 0xa0, 0xb3, 0x62, 0x87, 0x94, 0x09, 0x04, 0x0d, 0x3f, 0xe9, 0x94, - 0x6f, 0x62, 0xa7, 0xa8, 0x28, 0xc7, 0x0c, 0x39, 0x1e, 0xbd, 0x9d, 0x6d, 0xb2, 0x01, 0xa2, 0x71, - 0x8c, 0xfa, 0x1f, 0xd3, 0x68, 0xac, 0x6a, 0xbb, 0x5e, 0xd3, 0x21, 0x6e, 0x55, 0x77, 0xdc, 0x87, - 0xb8, 0x3b, 0x3e, 0x8e, 0xc6, 0x20, 0x40, 0x4a, 0x9b, 0x58, 0x2c, 0x88, 0xc8, 0xa0, 0x90, 0x6e, - 0xc1, 0x47, 0xf0, 0xcc, 0x3a, 0x12, 0x21, 0xd5, 0x7e, 0xb6, 0x0a, 0x0b, 0x61, 0x6b, 0xd8, 0x12, - 0xcc, 0xe0, 0xea, 0xdf, 0xce, 0xa0, 0x51, 0x5f, 0xca, 0x33, 0xe6, 0x71, 0x3d, 0x35, 0x3f, 0x5a, - 0x21, 0x5f, 0x45, 0xa8, 0x6a, 0x3b, 0x9e, 0xde, 0x5a, 0x0e, 0x35, 0x1f, 0x8e, 0x9b, 0x3a, 0x00, - 0x65, 0x65, 0x04, 0x12, 0x58, 0xbf, 0x42, 0x13, 0x87, 0x4d, 0x4c, 0x6c, 0xfd, 0x0a, 0xa0, 0x9a, - 0x40, 0xa1, 0xfe, 0x72, 0x1a, 0x4d, 0xf8, 0x9d, 0x34, 0x77, 0x9f, 0x34, 0xba, 0x0f, 0xf3, 0xdc, - 0x24, 0x4b, 0x7b, 0x70, 0x57, 0x69, 0xab, 0xff, 0x55, 0x98, 0x48, 0x66, 0x5b, 0xf6, 0xc9, 0x44, - 0xf2, 0x17, 0xa1, 0xe3, 0xea, 0x77, 0x64, 0xd0, 0x69, 0x5f, 0xea, 0xf3, 0x5d, 0x0b, 0x36, 0x6a, - 0xb3, 0x7a, 0xab, 0xf5, 0x30, 0xef, 0x8c, 0x46, 0x7c, 0x41, 0xac, 0xf0, 0x88, 0x63, 0x3c, 0xcb, - 0xd9, 0x3a, 0x07, 0xd7, 0x6d, 0xd3, 0xd0, 0x44, 0x22, 0xfc, 0x1a, 0x1a, 0xf5, 0x7f, 0x96, 0x9c, - 0xa6, 0xbf, 0x1d, 0x82, 0x63, 0xd7, 0xa0, 0x90, 0xee, 0x48, 0x0f, 0xab, 0xa5, 0x02, 0xea, 0x7f, - 0xca, 0xa1, 0xa9, 0x3b, 0xa6, 0x65, 0xd8, 0x9b, 0xae, 0x9f, 0x24, 0xef, 0xd8, 0x1f, 0x3b, 0x1c, - 0x75, 0x72, 0xbc, 0x37, 0xd1, 0x99, 0xa8, 0x48, 0x9d, 0x20, 0x74, 0x31, 0xef, 0x9d, 0x4d, 0x46, - 0x50, 0xf7, 0xd3, 0xe5, 0xf1, 0xbb, 0x0b, 0x2d, 0xb9, 0x64, 0x34, 0xdf, 0xde, 0xd0, 0x5e, 0xf2, - 0xed, 0x3d, 0x89, 0x72, 0x65, 0xbb, 0xad, 0x9b, 0x7e, 0x88, 0x0d, 0x18, 0xc5, 0x41, 0xbd, 0x80, - 0xd1, 0x38, 0x05, 0xe5, 0xcf, 0x2b, 0x86, 0x2e, 0x1b, 0x0e, 0xf9, 0xfb, 0x05, 0xa8, 0x95, 0xa6, - 0x89, 0x44, 0xd8, 0x46, 0x63, 0xbc, 0x3a, 0x7e, 0xd3, 0x80, 0x60, 0xf3, 0xf4, 0x9c, 0x2f, 0xa3, - 0xde, 0x6a, 0x35, 0x2d, 0x95, 0x63, 0xdb, 0x28, 0x96, 0x06, 0x90, 0x7f, 0x0c, 0xbb, 0x73, 0xd0, - 0x64, 0xfe, 0x82, 0x10, 0x60, 0x92, 0x19, 0x89, 0x0b, 0x01, 0x66, 0x19, 0x91, 0x08, 0xcf, 0xa1, - 0x49, 0x08, 0x30, 0x1b, 0x6c, 0xa5, 0xa8, 0x4a, 0x8c, 0x82, 0x51, 0x09, 0x07, 0xd8, 0x2c, 0x26, - 0x2d, 0xfd, 0xb8, 0x7a, 0x83, 0xa3, 0xb5, 0x78, 0x89, 0xa9, 0xd7, 0x11, 0x8e, 0xb7, 0x79, 0x5f, - 0x47, 0xd8, 0xdf, 0x97, 0x0e, 0xf7, 0x75, 0xc7, 0xdd, 0x09, 0xe1, 0x41, 0x1c, 0xda, 0xfe, 0x4c, - 0x0a, 0x4d, 0xc6, 0x02, 0x16, 0xe3, 0x67, 0x11, 0x62, 0x10, 0x21, 0x30, 0x1c, 0x44, 0x5a, 0x08, - 0x83, 0x18, 0xf3, 0xa5, 0x24, 0x24, 0xc3, 0x57, 0x51, 0x9e, 0xfd, 0xe2, 0xc1, 0x5c, 0xe2, 0x45, - 0xba, 0x5d, 0xd3, 0xd0, 0x02, 0xa2, 0xb0, 0x16, 0xb8, 0x0b, 0xc9, 0x24, 0x16, 0xf1, 0xb6, 0x3a, - 0x41, 0x2d, 0x94, 0x8c, 0x76, 0xe0, 0x68, 0xd0, 0xe0, 0x92, 0x71, 0x54, 0x5d, 0x97, 0xe3, 0xb1, - 0x9f, 0x33, 0xbb, 0xc5, 0x7e, 0x8e, 0xcc, 0x4d, 0x3c, 0xd8, 0xf3, 0x83, 0x7b, 0x40, 0xf1, 0xa5, - 0x34, 0x9a, 0x08, 0x6a, 0x3d, 0xc2, 0x63, 0xf7, 0xf7, 0x91, 0x48, 0xbe, 0x98, 0x42, 0xca, 0x8c, - 0xd9, 0x6a, 0x99, 0x56, 0xb3, 0x62, 0xad, 0xdb, 0x4e, 0x1b, 0x26, 0x8f, 0xa3, 0x3b, 0x14, 0x54, - 0xbf, 0x3b, 0x85, 0x26, 0x79, 0x83, 0x66, 0x75, 0xc7, 0x38, 0xba, 0xb3, 0xa4, 0x68, 0x4b, 0x8e, - 0x4e, 0x5f, 0xd4, 0xff, 0x93, 0x42, 0x68, 0xd1, 0x6e, 0xdc, 0x3d, 0xe6, 0x2f, 0xe8, 0x5e, 0x44, - 0x39, 0x16, 0x51, 0x87, 0x6b, 0xec, 0xe4, 0x34, 0x7b, 0x18, 0x49, 0x3f, 0x8d, 0x21, 0x66, 0xc6, - 0xf9, 0x89, 0x6a, 0x8e, 0x45, 0xe4, 0xd1, 0x78, 0x01, 0xf5, 0xd7, 0xb9, 0x04, 0x8e, 0xf9, 0x0b, - 0x87, 0xef, 0x4d, 0xa1, 0xd3, 0x1a, 0x69, 0xd8, 0xf7, 0x88, 0xb3, 0x35, 0x6b, 0x1b, 0xe4, 0x06, - 0xb1, 0x88, 0x73, 0x54, 0xfa, 0xfd, 0x8f, 0x21, 0x74, 0x7d, 0xd8, 0x98, 0x5b, 0x2e, 0x31, 0x8e, - 0x4f, 0x5a, 0x01, 0xf5, 0x1f, 0x0e, 0x21, 0x25, 0xd1, 0x5e, 0x3b, 0xb6, 0x36, 0x4a, 0x4f, 0x23, - 0x3c, 0xfb, 0xa0, 0x8c, 0xf0, 0xc1, 0xfd, 0x19, 0xe1, 0xb9, 0xfd, 0x1a, 0xe1, 0x43, 0x7b, 0x31, - 0xc2, 0xdb, 0x51, 0x23, 0x3c, 0x0f, 0x46, 0xf8, 0xb3, 0x7d, 0x8d, 0xf0, 0x39, 0xcb, 0x38, 0xa0, - 0x09, 0x7e, 0x6c, 0x53, 0x5e, 0x1e, 0x64, 0xef, 0x70, 0x99, 0x4e, 0x6e, 0x0d, 0xdb, 0x31, 0x88, - 0xc1, 0xb7, 0x0c, 0x70, 0x5e, 0xed, 0x70, 0x98, 0x16, 0x60, 0x63, 0xf9, 0x43, 0xc7, 0xf6, 0x92, - 0x3f, 0xf4, 0x01, 0x6c, 0x2a, 0xbe, 0x90, 0x46, 0x93, 0xb3, 0xc4, 0xf1, 0x58, 0x00, 0xbd, 0x07, - 0xe1, 0x1a, 0x53, 0x42, 0x13, 0x02, 0x43, 0xb0, 0x8f, 0xd3, 0xa1, 0xbb, 0x4f, 0x83, 0x38, 0x5e, - 0xd4, 0x5b, 0x28, 0x4a, 0x4f, 0xab, 0xf7, 0x73, 0xf8, 0xf0, 0xb1, 0x1b, 0x54, 0xef, 0xc3, 0x99, - 0x20, 0x4d, 0xfe, 0x4b, 0x0b, 0xe8, 0x85, 0xb4, 0x3c, 0xd9, 0xfd, 0xa7, 0xe5, 0x51, 0x7f, 0x3a, - 0x85, 0x2e, 0x69, 0xc4, 0x22, 0x9b, 0xfa, 0x5a, 0x8b, 0x08, 0xcd, 0xe2, 0x2b, 0x03, 0x9d, 0x35, - 0x4c, 0xb7, 0xad, 0x7b, 0x8d, 0x8d, 0x43, 0xc9, 0x68, 0x1e, 0x8d, 0x8a, 0xf3, 0xd7, 0x3e, 0xe6, - 0x36, 0xa9, 0x9c, 0xfa, 0x13, 0x19, 0x34, 0x34, 0x63, 0x7b, 0x6f, 0xd8, 0x87, 0xcc, 0x13, 0x15, - 0x4e, 0xf9, 0xe9, 0x7d, 0x9c, 0x52, 0x7c, 0x0c, 0x2a, 0x17, 0x42, 0x67, 0x83, 0x2b, 0xd9, 0x9a, - 0x1d, 0x0b, 0x31, 0xee, 0x93, 0xed, 0x33, 0x43, 0xd4, 0xf3, 0x68, 0x18, 0x62, 0x2f, 0x08, 0xe7, - 0x88, 0xe0, 0xa8, 0xe9, 0x51, 0x60, 0xb4, 0x8e, 0x90, 0x14, 0x7f, 0x5a, 0x8a, 0xf8, 0x97, 0x3b, - 0x7c, 0x46, 0x29, 0x31, 0xf8, 0xdf, 0xb3, 0xec, 0x0a, 0x0a, 0xda, 0x24, 0x44, 0xdf, 0x87, 0xfd, - 0x7f, 0xa4, 0x49, 0x01, 0xa1, 0xfa, 0x53, 0x59, 0x34, 0xea, 0x7b, 0xe2, 0x1d, 0x51, 0x67, 0x3d, - 0x8d, 0x72, 0x0b, 0xb6, 0x10, 0xf1, 0x1b, 0x3c, 0xf7, 0x36, 0x6c, 0x37, 0xe2, 0x92, 0xc8, 0x89, - 0xe8, 0x67, 0x2e, 0xdb, 0x86, 0xe8, 0x77, 0x0a, 0x9f, 0x69, 0xd9, 0x46, 0xec, 0xdd, 0x5e, 0x40, - 0x88, 0x2f, 0xa1, 0x2c, 0xb8, 0xec, 0x0a, 0x67, 0xbe, 0x11, 0x37, 0x5d, 0xc0, 0x0b, 0x6a, 0x90, - 0xdb, 0xaf, 0x1a, 0x0c, 0x1d, 0x54, 0x0d, 0xf2, 0x0f, 0x56, 0x0d, 0xde, 0x42, 0xa3, 0x50, 0x93, - 0x9f, 0x30, 0x68, 0xf7, 0x95, 0xec, 0x11, 0xbe, 0xd8, 0x8c, 0xb1, 0x76, 0xf3, 0xb4, 0x41, 0xb0, - 0xc6, 0x48, 0xac, 0xd4, 0xdf, 0x4d, 0xa1, 0xa1, 0x5b, 0xd6, 0x5d, 0xcb, 0xde, 0x3c, 0x9c, 0x9e, - 0x3c, 0x8b, 0x46, 0x38, 0x1b, 0x61, 0x12, 0x86, 0x07, 0x94, 0x5d, 0x06, 0xae, 0x03, 0x27, 0x4d, - 0xa4, 0xc2, 0xaf, 0x04, 0x85, 0xc0, 0x97, 0x3e, 0x13, 0x46, 0xba, 0xf7, 0x0b, 0x35, 0xe4, 0xe0, - 0xdc, 0x22, 0x39, 0x3e, 0x8f, 0xb2, 0x65, 0xda, 0x54, 0x21, 0xd4, 0x23, 0x6d, 0x8a, 0x06, 0x50, - 0xf5, 0x0f, 0x32, 0x68, 0x3c, 0x72, 0x5a, 0xf3, 0x24, 0x1a, 0xe6, 0xa7, 0x25, 0xa6, 0x1f, 0x2d, - 0x1c, 0x7c, 0xed, 0x03, 0xa0, 0x96, 0x67, 0x7f, 0x56, 0x0c, 0xfc, 0x09, 0x34, 0x64, 0xbb, 0xb0, - 0x76, 0xc0, 0xb7, 0x8c, 0x87, 0x8a, 0xbf, 0x52, 0xa3, 0x6d, 0x67, 0x2a, 0xcd, 0x49, 0x44, 0x3d, - 0xb2, 0x5d, 0xf8, 0xb4, 0xeb, 0x68, 0x58, 0x77, 0x5d, 0xe2, 0xd5, 0x3d, 0xbd, 0x29, 0x06, 0x10, - 0x0f, 0x80, 0xa2, 0x4e, 0x03, 0x70, 0x55, 0x6f, 0xe2, 0xd7, 0xd1, 0x58, 0xc3, 0x21, 0xb0, 0xba, - 0xe8, 0x2d, 0xda, 0x4a, 0xc1, 0xfa, 0x93, 0x10, 0xe2, 0x01, 0x79, 0x88, 0xa8, 0x18, 0xf8, 0x36, - 0x1a, 0xe3, 0x9f, 0xc3, 0x1c, 0x5d, 0x61, 0x78, 0x8c, 0x87, 0xb3, 0x3d, 0x13, 0x09, 0x73, 0x75, - 0xe5, 0xfe, 0xce, 0x22, 0xb9, 0xc8, 0xd7, 0x10, 0x48, 0xf1, 0x0a, 0xc2, 0x9b, 0x64, 0xad, 0xae, - 0x77, 0xbd, 0x0d, 0x5a, 0x17, 0x8b, 0x7f, 0xcb, 0xf3, 0x66, 0x81, 0x93, 0x70, 0x1c, 0x2b, 0xfa, - 0x4e, 0x6f, 0x92, 0xb5, 0x92, 0x84, 0xc4, 0x33, 0x68, 0x9c, 0x16, 0xf1, 0x8d, 0x21, 0xd3, 0xe0, - 0xa3, 0x0d, 0x32, 0x6c, 0xc8, 0x18, 0xb1, 0x51, 0x9b, 0x64, 0x8d, 0x5b, 0x85, 0x15, 0x43, 0xfd, - 0x7a, 0x8a, 0x9a, 0x49, 0xb4, 0x95, 0x90, 0x0d, 0x94, 0x2a, 0x70, 0x7b, 0x9f, 0x0a, 0xdc, 0x0e, - 0xf3, 0x76, 0xe5, 0xdc, 0x3e, 0x13, 0x9d, 0xc6, 0xb1, 0x78, 0x1a, 0xe5, 0x0c, 0xf1, 0xfc, 0xe6, - 0xac, 0x2c, 0x59, 0xbf, 0x1e, 0x8d, 0x53, 0xe1, 0xcb, 0x28, 0x4b, 0xa7, 0x6b, 0x6e, 0x20, 0x24, - 0xae, 0xba, 0x1a, 0x50, 0xa8, 0xdf, 0x96, 0x46, 0xa3, 0xc2, 0xd7, 0x5c, 0x3b, 0xd4, 0xe7, 0xbc, - 0xb4, 0xb7, 0x66, 0xfa, 0xae, 0x0a, 0xb0, 0x8f, 0xf0, 0x9b, 0x7c, 0x3d, 0x10, 0xc5, 0x9e, 0xae, - 0x11, 0xb8, 0x60, 0x9e, 0xe7, 0x1f, 0x9a, 0xdb, 0xfb, 0xd6, 0x89, 0xd2, 0xbf, 0x91, 0xcd, 0xa7, - 0x0b, 0x99, 0x37, 0xb2, 0xf9, 0x6c, 0x61, 0x50, 0xfd, 0x57, 0x9f, 0x46, 0x83, 0x2b, 0x16, 0x59, - 0x59, 0xc7, 0xcf, 0x08, 0x59, 0x29, 0xf9, 0xc7, 0x4f, 0x8a, 0x2c, 0x01, 0xb1, 0x30, 0xa0, 0x09, - 0xb9, 0x2b, 0xaf, 0x8b, 0xe9, 0xc9, 0x78, 0x2f, 0x62, 0xb1, 0x0c, 0xc3, 0x2c, 0x0c, 0x68, 0x62, - 0x1a, 0xb3, 0xeb, 0x62, 0x5a, 0x28, 0x2e, 0x2c, 0xa9, 0x14, 0xc3, 0xf8, 0xa5, 0xf8, 0x21, 0xc4, - 0x62, 0x52, 0xee, 0xa4, 0xe8, 0x61, 0x5c, 0x9c, 0x62, 0x61, 0x40, 0x4b, 0xce, 0xb9, 0x34, 0x2a, - 0xde, 0x37, 0x70, 0xb1, 0x9f, 0x8e, 0x6c, 0x21, 0x01, 0xb7, 0x30, 0xa0, 0x49, 0xb4, 0xf8, 0x85, - 0x20, 0x77, 0x2d, 0x5d, 0xeb, 0xa3, 0x0f, 0x7f, 0x04, 0xd4, 0xc2, 0x80, 0x26, 0x52, 0x0a, 0x95, - 0x56, 0x1d, 0x33, 0x48, 0x2c, 0x19, 0xad, 0x14, 0x70, 0x42, 0xa5, 0xf0, 0x1b, 0xbf, 0x8a, 0xc6, - 0x82, 0x17, 0x55, 0xef, 0x90, 0x86, 0xc7, 0x17, 0xbc, 0x33, 0x91, 0xc2, 0x0c, 0xb9, 0x30, 0xa0, - 0xc9, 0xd4, 0xf8, 0x32, 0xca, 0x69, 0xc4, 0x35, 0xdf, 0xf5, 0xf7, 0x64, 0xe3, 0xc2, 0x21, 0x8c, - 0xf9, 0x2e, 0x95, 0x12, 0xc7, 0xd3, 0xde, 0x09, 0x37, 0x81, 0x7c, 0x93, 0x85, 0x23, 0xb5, 0xcc, - 0x59, 0x06, 0xed, 0x1d, 0xe1, 0x04, 0xe0, 0xf5, 0x68, 0x5e, 0x77, 0xd8, 0x40, 0x49, 0x0e, 0xbd, - 0x22, 0x76, 0x61, 0x40, 0x8b, 0xe6, 0x81, 0x7f, 0x41, 0xca, 0x29, 0xce, 0x9f, 0xf6, 0x47, 0xa5, - 0x4a, 0x51, 0x82, 0x54, 0x21, 0xfb, 0xf8, 0xeb, 0xd1, 0x24, 0xd7, 0xfc, 0x21, 0xff, 0xd9, 0xe4, - 0x54, 0xc8, 0x42, 0xd5, 0x7e, 0x52, 0xec, 0x17, 0xa4, 0x64, 0xc4, 0x90, 0xef, 0x3f, 0xa1, 0x6a, - 0xdd, 0xd3, 0xc5, 0xaa, 0xd9, 0x90, 0x97, 0xd2, 0xe2, 0x42, 0x6a, 0x9e, 0x78, 0x87, 0x02, 0x4e, - 0xe8, 0x50, 0x96, 0x42, 0xf7, 0x05, 0x29, 0xfd, 0x0a, 0xcf, 0xbd, 0x13, 0x54, 0x2a, 0xa0, 0x68, - 0xa5, 0x62, 0xa2, 0x96, 0xeb, 0x62, 0x56, 0x12, 0x65, 0x52, 0xee, 0xa0, 0x10, 0x43, 0x3b, 0x48, - 0xc8, 0x5e, 0x52, 0x84, 0x8c, 0x07, 0x0a, 0x06, 0xf2, 0x91, 0xa0, 0x85, 0xb3, 0xd5, 0x85, 0x01, - 0x0d, 0x72, 0x21, 0xa8, 0x2c, 0x97, 0x86, 0x72, 0x0a, 0x28, 0x46, 0x83, 0xa4, 0xcf, 0xf7, 0x49, - 0x63, 0x61, 0x40, 0x63, 0x79, 0x36, 0x9e, 0x11, 0xa2, 0x56, 0x2b, 0xa7, 0xe5, 0x29, 0x22, 0x40, - 0xd0, 0x29, 0x22, 0x8c, 0x6d, 0x3d, 0x1f, 0x8f, 0xec, 0xac, 0x9c, 0x91, 0xcf, 0x01, 0xa3, 0xf8, - 0x85, 0x01, 0x2d, 0x1e, 0x0d, 0xfa, 0x05, 0x29, 0xd8, 0xb1, 0x72, 0x36, 0xf2, 0xda, 0x2e, 0x44, - 0x51, 0x71, 0x89, 0x61, 0x91, 0x57, 0x12, 0xd3, 0x93, 0x29, 0xe7, 0x80, 0xc1, 0xa3, 0x01, 0x83, - 0x38, 0xc9, 0xc2, 0x80, 0x96, 0x98, 0xd8, 0x6c, 0x36, 0x16, 0x72, 0x58, 0x51, 0xe4, 0x03, 0xa8, - 0x08, 0x7a, 0x61, 0x40, 0x8b, 0x05, 0x29, 0xbe, 0x2e, 0xc6, 0xfa, 0x55, 0x1e, 0x91, 0x3b, 0x31, - 0xc4, 0xd0, 0x4e, 0x14, 0x62, 0x02, 0x5f, 0x17, 0xe3, 0xbf, 0x2a, 0x53, 0xf1, 0x52, 0xe1, 0xcc, - 0x29, 0xc4, 0x89, 0xd5, 0x92, 0x43, 0x5a, 0x2a, 0x8f, 0xf2, 0xa4, 0x02, 0xbc, 0x7c, 0x12, 0xcd, - 0xc2, 0x80, 0x96, 0x1c, 0x0e, 0x53, 0x4b, 0x8e, 0x05, 0xa9, 0x9c, 0xef, 0xc7, 0x33, 0x68, 0x5d, - 0x72, 0x1c, 0x49, 0xbd, 0x4f, 0x64, 0x3e, 0xe5, 0x82, 0x1c, 0xea, 0xa3, 0x27, 0xe1, 0xc2, 0x80, - 0xd6, 0x27, 0xbe, 0xdf, 0xad, 0x1e, 0x61, 0xf2, 0x94, 0x8b, 0x72, 0x4e, 0x91, 0x44, 0xa2, 0x85, - 0x01, 0xad, 0x47, 0x90, 0xbd, 0x5b, 0x3d, 0xa2, 0xa8, 0x29, 0xc5, 0xbe, 0x6c, 0x03, 0x79, 0xf4, - 0x88, 0xc1, 0xb6, 0x92, 0x18, 0x80, 0x4c, 0x79, 0x4c, 0x56, 0xdd, 0x04, 0x12, 0xaa, 0xba, 0x49, - 0xa1, 0xcb, 0x56, 0x12, 0x23, 0x66, 0x29, 0x8f, 0xf7, 0x61, 0x18, 0xb4, 0x31, 0x31, 0xd6, 0xd6, - 0x4a, 0x62, 0xc8, 0x2a, 0x45, 0x95, 0x19, 0x26, 0x90, 0x50, 0x86, 0x49, 0xc1, 0xae, 0x56, 0x12, - 0x63, 0x2c, 0x29, 0x4f, 0xf4, 0x61, 0x18, 0xb6, 0x30, 0x29, 0x3a, 0xd3, 0x0b, 0x52, 0x90, 0x23, - 0xe5, 0x43, 0xf2, 0xbc, 0x21, 0xa0, 0xe8, 0xbc, 0x21, 0x86, 0x43, 0x9a, 0x8d, 0x85, 0x71, 0x50, - 0x3e, 0x2c, 0x0f, 0xf3, 0x08, 0x9a, 0x0e, 0xf3, 0x68, 0xe0, 0x87, 0xd9, 0xd8, 0x73, 0x76, 0xe5, - 0x52, 0x2f, 0x26, 0x80, 0x96, 0x99, 0xb0, 0x07, 0xf0, 0x95, 0x84, 0xf7, 0xd4, 0xca, 0x47, 0xe4, - 0xab, 0xcc, 0x18, 0xc1, 0xc2, 0x80, 0x96, 0xf0, 0x0a, 0x5b, 0x4b, 0x7e, 0x3c, 0xa4, 0x5c, 0x96, - 0x87, 0x6d, 0x12, 0x0d, 0x1d, 0xb6, 0x89, 0x0f, 0x8f, 0x16, 0x93, 0xdc, 0x16, 0x94, 0x2b, 0xb2, - 0x61, 0x16, 0xa7, 0xa0, 0x86, 0x59, 0x82, 0xbb, 0x83, 0x96, 0xfc, 0x1c, 0x46, 0x79, 0xb2, 0x6f, - 0x0b, 0x81, 0x26, 0xa1, 0x85, 0xec, 0x75, 0x48, 0x68, 0x3b, 0xdd, 0xea, 0xb4, 0x6c, 0xdd, 0x50, - 0x3e, 0x9a, 0x68, 0x3b, 0x31, 0xa4, 0x60, 0x3b, 0x31, 0x00, 0x5d, 0xe5, 0xc5, 0x6b, 0x7d, 0xe5, - 0x29, 0x79, 0x95, 0x17, 0x71, 0x74, 0x95, 0x97, 0x5c, 0x00, 0x66, 0x63, 0x57, 0xe0, 0xca, 0xd3, - 0xb2, 0x02, 0x44, 0xd0, 0x54, 0x01, 0xa2, 0x97, 0xe6, 0x6f, 0xf7, 0xbe, 0x34, 0x56, 0xa6, 0x81, - 0xdb, 0x63, 0x3e, 0xb7, 0x5e, 0x74, 0x0b, 0x03, 0x5a, 0xef, 0x8b, 0xe7, 0x4a, 0xc2, 0x1d, 0xb0, - 0x72, 0x55, 0x56, 0xb0, 0x18, 0x01, 0x55, 0xb0, 0xf8, 0xcd, 0x71, 0x25, 0xe1, 0x12, 0x57, 0xf9, - 0x58, 0x4f, 0x56, 0xc1, 0x37, 0x27, 0x5c, 0xfd, 0x5e, 0x17, 0x6f, 0x61, 0x95, 0x67, 0xe4, 0xc5, - 0x2e, 0xc4, 0xd0, 0xc5, 0x4e, 0xb8, 0xad, 0xbd, 0x2e, 0xde, 0x5c, 0x2a, 0xd7, 0xe2, 0xa5, 0xc2, - 0x25, 0x52, 0xb8, 0xe1, 0xd4, 0x92, 0x2f, 0x0a, 0x95, 0x67, 0x65, 0xad, 0x4b, 0xa2, 0xa1, 0x5a, - 0x97, 0x78, 0xc9, 0x38, 0x1f, 0xbf, 0xef, 0x53, 0xae, 0x47, 0x6f, 0x40, 0x65, 0x3c, 0xb5, 0x7c, - 0x62, 0x77, 0x84, 0xaf, 0x47, 0x5f, 0xb6, 0x2a, 0xcf, 0x45, 0xf6, 0x97, 0x12, 0x96, 0xda, 0xb7, - 0x91, 0x97, 0xb0, 0xaf, 0x47, 0x1f, 0x83, 0x2a, 0xcf, 0x27, 0x73, 0x08, 0x74, 0x25, 0xfa, 0x78, - 0xf4, 0xf5, 0xe8, 0xfb, 0x49, 0xe5, 0x85, 0x64, 0x0e, 0x81, 0x74, 0xa3, 0xef, 0x2d, 0x9f, 0x11, - 0x22, 0x3a, 0x29, 0x1f, 0x97, 0x4d, 0xc7, 0x00, 0x41, 0x4d, 0xc7, 0x30, 0xee, 0xd3, 0x33, 0x42, - 0x24, 0x24, 0xe5, 0xc5, 0x58, 0x91, 0xa0, 0xb1, 0x42, 0xbc, 0xa4, 0x67, 0x84, 0x08, 0x42, 0xca, - 0x4b, 0xb1, 0x22, 0x41, 0xeb, 0x84, 0x38, 0x43, 0x46, 0x3f, 0xf7, 0x46, 0xe5, 0x65, 0xe0, 0xa1, - 0xee, 0xee, 0xb1, 0xb6, 0x30, 0xa0, 0xf5, 0x73, 0x93, 0x7c, 0xbb, 0xf7, 0xed, 0xa9, 0xf2, 0x8a, - 0x3c, 0x84, 0x7b, 0xd1, 0xd1, 0x21, 0xdc, 0xf3, 0x06, 0xf6, 0xd5, 0xc8, 0x53, 0x07, 0xe5, 0x55, - 0x79, 0x8a, 0x93, 0x90, 0x74, 0x8a, 0x8b, 0x3e, 0x8c, 0x90, 0x7c, 0xf8, 0x95, 0x4f, 0xc8, 0x53, - 0x9c, 0x88, 0xa3, 0x53, 0x9c, 0xe4, 0xef, 0x3f, 0x1b, 0x73, 0x2d, 0x57, 0x5e, 0x93, 0xa7, 0xb8, - 0x08, 0x9a, 0x4e, 0x71, 0x51, 0x67, 0xf4, 0x57, 0x23, 0x1e, 0xd6, 0xca, 0xeb, 0xc9, 0xed, 0x07, - 0xa4, 0xd8, 0x7e, 0xe6, 0x8f, 0xad, 0x25, 0xbb, 0x0a, 0x2b, 0x25, 0x79, 0xfc, 0x26, 0xd1, 0xd0, - 0xf1, 0x9b, 0xe8, 0x66, 0xbc, 0x92, 0x98, 0xd1, 0x53, 0x99, 0xe9, 0xb3, 0x71, 0x08, 0x4d, 0x91, - 0xa4, 0x5c, 0xa0, 0xe2, 0x1e, 0x99, 0x6d, 0x84, 0x66, 0x7b, 0xec, 0x91, 0xfd, 0x6d, 0x50, 0x84, - 0x9e, 0xce, 0xae, 0xb1, 0xcb, 0x3c, 0xa5, 0x2c, 0xcf, 0xae, 0x31, 0x02, 0x3a, 0xbb, 0xc6, 0xaf, - 0x00, 0xe7, 0x51, 0x81, 0x6b, 0x11, 0xbb, 0xa3, 0x34, 0xad, 0xa6, 0x32, 0x17, 0xf1, 0xd4, 0x8b, - 0xe0, 0xe9, 0xec, 0x14, 0x85, 0xc1, 0x7a, 0xcd, 0x60, 0xb3, 0x2d, 0xb3, 0xb3, 0x66, 0xeb, 0x8e, - 0x51, 0x23, 0x96, 0xa1, 0xcc, 0x47, 0xd6, 0xeb, 0x04, 0x1a, 0x58, 0xaf, 0x13, 0xe0, 0xf0, 0x9a, - 0x33, 0x02, 0xd7, 0x48, 0x83, 0x98, 0xf7, 0x88, 0x72, 0x03, 0xd8, 0x16, 0x7b, 0xb1, 0xe5, 0x64, - 0x0b, 0x03, 0x5a, 0x2f, 0x0e, 0xd4, 0x56, 0x5f, 0xda, 0xaa, 0xbd, 0xb9, 0x18, 0x78, 0xa7, 0x57, - 0x1d, 0xd2, 0xd1, 0x1d, 0xa2, 0x2c, 0xc8, 0xb6, 0x7a, 0x22, 0x11, 0xb5, 0xd5, 0x13, 0x11, 0x71, - 0xb6, 0xfe, 0x58, 0xa8, 0xf4, 0x63, 0x1b, 0x8e, 0x88, 0xe4, 0xd2, 0x74, 0x76, 0x92, 0x11, 0x54, - 0x40, 0x8b, 0xb6, 0xd5, 0x84, 0x93, 0x8a, 0x37, 0xe4, 0xd9, 0xa9, 0x37, 0x25, 0x9d, 0x9d, 0x7a, - 0x63, 0xa9, 0xaa, 0xcb, 0x58, 0x36, 0x06, 0x6f, 0xca, 0xaa, 0x9e, 0x40, 0x42, 0x55, 0x3d, 0x01, - 0x1c, 0x67, 0xa8, 0x11, 0x97, 0x78, 0xca, 0x62, 0x3f, 0x86, 0x40, 0x12, 0x67, 0x08, 0xe0, 0x38, - 0xc3, 0x79, 0xe2, 0x35, 0x36, 0x94, 0xa5, 0x7e, 0x0c, 0x81, 0x24, 0xce, 0x10, 0xc0, 0x74, 0xb3, - 0x29, 0x83, 0x67, 0xba, 0xad, 0xbb, 0x7e, 0x9f, 0x2d, 0xcb, 0x9b, 0xcd, 0x9e, 0x84, 0x74, 0xb3, - 0xd9, 0x13, 0x89, 0xbf, 0x67, 0xcf, 0x97, 0xcd, 0xca, 0x0a, 0x54, 0x38, 0x1d, 0xda, 0x05, 0x7b, - 0x29, 0xb5, 0x30, 0xa0, 0xed, 0xf5, 0x32, 0xfb, 0xa3, 0xc1, 0x95, 0x93, 0x52, 0x85, 0xaa, 0x26, - 0x82, 0xb3, 0x0a, 0x06, 0x5e, 0x18, 0xd0, 0x82, 0x4b, 0xa9, 0x17, 0xd0, 0x08, 0x7c, 0x54, 0xc5, - 0x32, 0xbd, 0xf2, 0x8c, 0xf2, 0xa6, 0xbc, 0x65, 0x12, 0x50, 0x74, 0xcb, 0x24, 0xfc, 0xa4, 0x93, - 0x38, 0xfc, 0x64, 0x53, 0x4c, 0x79, 0x46, 0xd1, 0xe4, 0x49, 0x5c, 0x42, 0xd2, 0x49, 0x5c, 0x02, - 0x04, 0xf5, 0x96, 0x1d, 0xbb, 0x53, 0x9e, 0x51, 0x6a, 0x09, 0xf5, 0x32, 0x54, 0x50, 0x2f, 0xfb, - 0x19, 0xd4, 0x5b, 0xdb, 0xe8, 0x7a, 0x65, 0xfa, 0x8d, 0xab, 0x09, 0xf5, 0xfa, 0xc8, 0xa0, 0x5e, - 0x1f, 0x40, 0xa7, 0x42, 0x00, 0x54, 0x1d, 0x9b, 0x4e, 0xda, 0x37, 0xcd, 0x56, 0x4b, 0xb9, 0x25, - 0x4f, 0x85, 0x51, 0x3c, 0x9d, 0x0a, 0xa3, 0x30, 0x6a, 0x7a, 0xb2, 0x56, 0x91, 0xb5, 0x6e, 0x53, - 0xb9, 0x2d, 0x9b, 0x9e, 0x21, 0x86, 0x9a, 0x9e, 0xe1, 0x2f, 0xd8, 0x5d, 0xd0, 0x5f, 0x1a, 0x59, - 0x77, 0x88, 0xbb, 0xa1, 0xdc, 0x89, 0xec, 0x2e, 0x04, 0x1c, 0xec, 0x2e, 0x84, 0xdf, 0xb8, 0x89, - 0x1e, 0x95, 0x16, 0x1a, 0xdf, 0x63, 0xae, 0x46, 0x74, 0xa7, 0xb1, 0xa1, 0x7c, 0x12, 0x58, 0x3d, - 0x91, 0xb8, 0x54, 0xc9, 0xa4, 0x0b, 0x03, 0x5a, 0x3f, 0x4e, 0xb0, 0x2d, 0x7f, 0x73, 0x91, 0x85, - 0x5d, 0xd0, 0xaa, 0xb3, 0xfe, 0x26, 0xf4, 0xad, 0xc8, 0xb6, 0x3c, 0x4e, 0x02, 0xdb, 0xf2, 0x38, - 0x18, 0x77, 0xd0, 0xc5, 0xc8, 0x56, 0x6d, 0x49, 0x6f, 0xd1, 0x7d, 0x09, 0x31, 0xaa, 0x7a, 0xe3, - 0x2e, 0xf1, 0x94, 0x4f, 0x01, 0xef, 0x4b, 0x3d, 0x36, 0x7c, 0x11, 0xea, 0x85, 0x01, 0x6d, 0x17, - 0x7e, 0x58, 0x65, 0x39, 0x23, 0x95, 0x4f, 0xcb, 0xe7, 0x9b, 0x14, 0xb6, 0x30, 0xa0, 0xb1, 0x7c, - 0x92, 0x6f, 0x23, 0xe5, 0x56, 0xa7, 0xe9, 0xe8, 0x06, 0x61, 0x86, 0x16, 0xd8, 0x6e, 0xdc, 0x00, - 0xfd, 0x16, 0xd9, 0x4a, 0xeb, 0x45, 0x47, 0xad, 0xb4, 0x5e, 0x38, 0xaa, 0xa8, 0x52, 0x84, 0x41, - 0xe5, 0x33, 0xb2, 0xa2, 0x4a, 0x48, 0xaa, 0xa8, 0x72, 0x3c, 0xc2, 0x4f, 0xa2, 0xb3, 0xc1, 0x7e, - 0x9e, 0xaf, 0xbf, 0xac, 0xd3, 0x94, 0xb7, 0x81, 0xcf, 0xc5, 0xd8, 0x65, 0x80, 0x44, 0xb5, 0x30, - 0xa0, 0xf5, 0x28, 0x4f, 0x57, 0xdc, 0x58, 0xf0, 0x5c, 0x6e, 0x5e, 0x7c, 0xab, 0xbc, 0xe2, 0xf6, - 0x20, 0xa3, 0x2b, 0x6e, 0x0f, 0x54, 0x22, 0x73, 0x2e, 0x54, 0x7d, 0x17, 0xe6, 0x81, 0x4c, 0x7b, - 0x71, 0x48, 0x64, 0xce, 0x2d, 0xb5, 0xb5, 0x5d, 0x98, 0x07, 0xd6, 0x5a, 0x2f, 0x0e, 0xf8, 0x32, - 0xca, 0xd5, 0x6a, 0x4b, 0x5a, 0xd7, 0x52, 0x1a, 0x91, 0x6b, 0x39, 0x80, 0x2e, 0x0c, 0x68, 0x1c, - 0x4f, 0xcd, 0xa0, 0xb9, 0x96, 0xee, 0x7a, 0x66, 0xc3, 0x85, 0x11, 0xe3, 0x8f, 0x10, 0x43, 0x36, - 0x83, 0x92, 0x68, 0xa8, 0x19, 0x94, 0x04, 0xa7, 0xf6, 0xe2, 0xac, 0xee, 0xba, 0xba, 0x65, 0x38, - 0xfa, 0x0c, 0x2c, 0x13, 0x24, 0xe2, 0xf2, 0x24, 0x61, 0xa9, 0xbd, 0x28, 0x43, 0xe0, 0xf0, 0xdd, - 0x87, 0xf8, 0x66, 0xce, 0x7a, 0xe4, 0xf0, 0x3d, 0x82, 0x87, 0xc3, 0xf7, 0x08, 0x0c, 0xec, 0x4e, - 0x1f, 0xa6, 0x91, 0xa6, 0x09, 0x19, 0x9e, 0x9b, 0x11, 0xbb, 0x33, 0x4a, 0x00, 0x76, 0x67, 0x14, - 0x28, 0x35, 0xc9, 0x5f, 0x6e, 0x37, 0x7a, 0x34, 0x29, 0x5c, 0x65, 0x63, 0x65, 0xe8, 0xfa, 0x1d, - 0x0e, 0x8e, 0xf2, 0x96, 0xa5, 0xb7, 0xed, 0xf2, 0x8c, 0x2f, 0x75, 0x53, 0x5e, 0xbf, 0x7b, 0x12, - 0xd2, 0xf5, 0xbb, 0x27, 0x92, 0xce, 0xae, 0xfe, 0x46, 0x6b, 0x43, 0x77, 0x88, 0x11, 0xe4, 0x3d, - 0x65, 0x5b, 0xc3, 0x77, 0xe4, 0xd9, 0xb5, 0x0f, 0x29, 0x9d, 0x5d, 0xfb, 0xa0, 0xa9, 0x91, 0x97, - 0x8c, 0xd6, 0x88, 0x6e, 0x28, 0x77, 0x65, 0x23, 0xaf, 0x37, 0x25, 0x35, 0xf2, 0x7a, 0x63, 0x7b, - 0x7f, 0xce, 0x1d, 0xc7, 0xf4, 0x88, 0xd2, 0xda, 0xcb, 0xe7, 0x00, 0x69, 0xef, 0xcf, 0x01, 0x34, - 0xdd, 0x10, 0x46, 0x3b, 0xa4, 0x2d, 0x6f, 0x08, 0xe3, 0xdd, 0x10, 0x2d, 0x41, 0x2d, 0x16, 0xee, - 0xf9, 0xa6, 0x58, 0xb2, 0xc5, 0xc2, 0xc1, 0xd4, 0x62, 0x09, 0x7d, 0xe3, 0x24, 0xf7, 0x2b, 0xc5, - 0x96, 0xd7, 0x50, 0x11, 0x47, 0xd7, 0x50, 0xc9, 0x55, 0xeb, 0x05, 0xc9, 0xa1, 0x41, 0xe9, 0xc8, - 0x56, 0x87, 0x80, 0xa2, 0x56, 0x87, 0xe8, 0xfa, 0x30, 0x8b, 0x26, 0xe0, 0x16, 0x5c, 0xeb, 0x06, - 0xf7, 0x38, 0x9f, 0x95, 0x3f, 0x33, 0x82, 0xa6, 0x9f, 0x19, 0x01, 0x49, 0x4c, 0xf8, 0xb4, 0xe5, - 0xf4, 0x60, 0x12, 0x9e, 0x0f, 0x46, 0x40, 0x78, 0x11, 0xe1, 0x5a, 0x69, 0x69, 0xb1, 0x62, 0x54, - 0xc5, 0x2b, 0x32, 0x57, 0x3e, 0x81, 0x8d, 0x53, 0x2c, 0x0c, 0x68, 0x09, 0xe5, 0xf0, 0x3b, 0xe8, - 0x3c, 0x87, 0x72, 0xb7, 0x66, 0xc8, 0x6c, 0x65, 0x04, 0x0b, 0x82, 0x07, 0x7c, 0x3f, 0x14, 0xe1, - 0x9b, 0x48, 0xbb, 0x30, 0xa0, 0xf5, 0xe5, 0xd5, 0xbb, 0x2e, 0xbe, 0x3e, 0x74, 0xf7, 0x52, 0x57, - 0xb0, 0x48, 0xf4, 0xe5, 0xd5, 0xbb, 0x2e, 0x2e, 0xf7, 0x7b, 0x7b, 0xa9, 0x2b, 0xe8, 0x84, 0xbe, - 0xbc, 0xb0, 0x8b, 0x8a, 0xfd, 0xf0, 0xa5, 0x56, 0x4b, 0xd9, 0x84, 0xea, 0x3e, 0xb2, 0x97, 0xea, - 0x4a, 0x60, 0x70, 0xee, 0xc6, 0x91, 0xce, 0xd2, 0x2b, 0x1d, 0x62, 0xd5, 0xa4, 0x05, 0xe8, 0xbe, - 0x3c, 0x4b, 0xc7, 0x08, 0xe8, 0x2c, 0x1d, 0x03, 0xd2, 0x01, 0x25, 0xfa, 0xc5, 0x28, 0x5b, 0xf2, - 0x80, 0x12, 0x71, 0x74, 0x40, 0x49, 0x3e, 0x34, 0x2b, 0xe8, 0xd4, 0xca, 0x5d, 0x4f, 0xf7, 0x2d, - 0x48, 0x97, 0x77, 0xe5, 0xbb, 0x91, 0x4b, 0xa6, 0x38, 0x09, 0x5c, 0x32, 0xc5, 0xc1, 0x74, 0x8c, - 0x50, 0x70, 0x6d, 0xcb, 0x6a, 0xcc, 0xeb, 0x66, 0xab, 0xeb, 0x10, 0xe5, 0xff, 0x91, 0xc7, 0x48, - 0x04, 0x4d, 0xc7, 0x48, 0x04, 0x44, 0x17, 0x68, 0x0a, 0x2a, 0xb9, 0xae, 0xd9, 0xb4, 0xf8, 0xbe, - 0xb2, 0xdb, 0xf2, 0x94, 0xff, 0x57, 0x5e, 0xa0, 0x93, 0x68, 0xe8, 0x02, 0x9d, 0x04, 0x87, 0x53, - 0xa7, 0x84, 0xac, 0x6f, 0xca, 0xff, 0x17, 0x39, 0x75, 0x4a, 0xa0, 0x81, 0x53, 0xa7, 0xa4, 0x8c, - 0x71, 0xf3, 0xa8, 0xc0, 0x6c, 0xb2, 0x45, 0x33, 0xb8, 0xab, 0xfe, 0xff, 0xe5, 0xf5, 0x31, 0x8a, - 0xa7, 0xeb, 0x63, 0x14, 0x26, 0xf3, 0xe1, 0x5d, 0xf0, 0x97, 0x7a, 0xf1, 0x09, 0xe4, 0x1f, 0x2b, - 0x83, 0x6f, 0x88, 0x7c, 0xf8, 0x48, 0xf9, 0xb6, 0x54, 0x2f, 0x46, 0xc1, 0xf0, 0x88, 0x15, 0x92, - 0x19, 0x69, 0xe4, 0x9e, 0x49, 0x36, 0x95, 0xcf, 0xf5, 0x64, 0xc4, 0x08, 0x64, 0x46, 0x0c, 0x86, - 0xdf, 0x42, 0x67, 0x43, 0xd8, 0x12, 0x69, 0xaf, 0x05, 0x33, 0xd3, 0xb7, 0xa7, 0x64, 0x33, 0x38, - 0x99, 0x8c, 0x9a, 0xc1, 0xc9, 0x98, 0x24, 0xd6, 0x5c, 0x74, 0x7f, 0x79, 0x17, 0xd6, 0x81, 0x04, - 0x7b, 0x30, 0x48, 0x62, 0xcd, 0xa5, 0xf9, 0x1d, 0xbb, 0xb0, 0x0e, 0x64, 0xda, 0x83, 0x01, 0xfe, - 0x7c, 0x0a, 0x5d, 0x4a, 0x46, 0x95, 0x5a, 0xad, 0x79, 0xdb, 0x09, 0x71, 0xca, 0x77, 0xa6, 0xe4, - 0x83, 0x86, 0xbd, 0x15, 0x5b, 0x18, 0xd0, 0xf6, 0x58, 0x01, 0xfe, 0x04, 0x1a, 0x2b, 0x75, 0x0d, - 0xd3, 0x83, 0x8b, 0x37, 0x6a, 0x38, 0x7f, 0x57, 0x2a, 0xb2, 0xc5, 0x11, 0xb1, 0xb0, 0xc5, 0x11, - 0x01, 0xf8, 0x0d, 0x34, 0x59, 0x23, 0x8d, 0xae, 0x63, 0x7a, 0x5b, 0x1a, 0x64, 0xf4, 0xa3, 0x3c, - 0xbe, 0x3b, 0x25, 0x4f, 0x62, 0x31, 0x0a, 0x3a, 0x89, 0xc5, 0x80, 0xf8, 0x76, 0x8f, 0xbc, 0x6f, - 0xca, 0xf7, 0xa4, 0xfa, 0x5e, 0xcb, 0x07, 0x7d, 0xd9, 0x23, 0x6d, 0x5c, 0x35, 0x31, 0x8f, 0x96, - 0xf2, 0xf9, 0x54, 0x9f, 0x6b, 0x74, 0x61, 0x86, 0x4b, 0x48, 0xc1, 0x55, 0x4d, 0xcc, 0x94, 0xa4, - 0x7c, 0x6f, 0xaa, 0xcf, 0xb5, 0x77, 0xc8, 0x31, 0x29, 0xc9, 0xd2, 0x73, 0x62, 0xea, 0x64, 0xe5, - 0xaf, 0xa4, 0xe2, 0xae, 0x22, 0x41, 0x79, 0x31, 0xc7, 0xf2, 0x73, 0xcc, 0x35, 0x8f, 0x17, 0xfb, - 0x42, 0x2a, 0xee, 0x9b, 0x17, 0x16, 0x0b, 0x7f, 0x61, 0x82, 0xa6, 0xe6, 0xee, 0x7b, 0xc4, 0xb1, - 0xf4, 0x16, 0x74, 0x67, 0xcd, 0xb3, 0x1d, 0xbd, 0x49, 0xe6, 0x2c, 0x7d, 0xad, 0x45, 0x94, 0xef, - 0x4b, 0xc9, 0x16, 0x6c, 0x6f, 0x52, 0x6a, 0xc1, 0xf6, 0xc6, 0xe2, 0x0d, 0xf4, 0x68, 0x12, 0xb6, - 0x6c, 0xba, 0x50, 0xcf, 0x17, 0x53, 0xb2, 0x09, 0xdb, 0x87, 0x96, 0x9a, 0xb0, 0x7d, 0xd0, 0xf8, - 0x9a, 0x90, 0x57, 0x58, 0xf9, 0xab, 0x11, 0x67, 0xc8, 0x00, 0xb3, 0x30, 0xa0, 0x09, 0xe9, 0x87, - 0xaf, 0x09, 0xf9, 0x6f, 0x95, 0x2f, 0xc5, 0xcb, 0x84, 0x97, 0x4f, 0x61, 0x9a, 0xdc, 0x6b, 0x42, - 0xe6, 0x5f, 0xe5, 0xaf, 0xc5, 0xcb, 0x84, 0x77, 0x5c, 0x61, 0x82, 0xe0, 0xb7, 0xd0, 0x59, 0x56, - 0xe3, 0xd2, 0x7c, 0x89, 0xda, 0x6d, 0xb3, 0x1b, 0x7a, 0xab, 0x45, 0xac, 0x26, 0x51, 0xbe, 0x1c, - 0x99, 0x49, 0x92, 0xc9, 0xe8, 0x4c, 0x92, 0x8c, 0xc1, 0xdf, 0x82, 0xce, 0xdd, 0xd6, 0x5b, 0xa6, - 0x11, 0xe2, 0xfc, 0xe4, 0x3b, 0xca, 0xf7, 0xa7, 0xe4, 0xdd, 0x74, 0x0f, 0x3a, 0xba, 0x9b, 0xee, - 0x81, 0xc2, 0x4b, 0x08, 0xc3, 0x32, 0x1a, 0xcc, 0x16, 0x74, 0x7d, 0x56, 0xfe, 0x7a, 0x4a, 0xb6, - 0x53, 0xe3, 0x24, 0xd4, 0x4e, 0x8d, 0x43, 0x71, 0xbd, 0x77, 0x7c, 0x45, 0xe5, 0x07, 0x52, 0xf2, - 0x69, 0x4d, 0x2f, 0xc2, 0x85, 0x01, 0xad, 0x77, 0x90, 0xc6, 0x1b, 0xa8, 0x50, 0xab, 0x56, 0xe6, - 0xe7, 0xe7, 0x6a, 0xb7, 0x2b, 0xe5, 0x8a, 0xeb, 0x76, 0x89, 0xa1, 0xfc, 0x60, 0x64, 0xc5, 0x8a, - 0x12, 0xd0, 0x15, 0x2b, 0x0a, 0xc3, 0x2f, 0xa3, 0x51, 0xda, 0x7e, 0x3a, 0x60, 0xe0, 0x93, 0x7f, - 0x28, 0x25, 0x9b, 0x53, 0x22, 0x92, 0x9a, 0x53, 0xe2, 0x6f, 0x5c, 0x43, 0xa7, 0xa9, 0x14, 0xab, - 0x0e, 0x59, 0x27, 0x0e, 0xb1, 0x1a, 0xfe, 0x98, 0xfe, 0xe1, 0x94, 0x6c, 0x65, 0x24, 0x11, 0x51, - 0x2b, 0x23, 0x09, 0x8e, 0xef, 0xa2, 0xf3, 0xd1, 0x93, 0xa0, 0x59, 0xdb, 0x5a, 0x37, 0x9b, 0x9c, - 0xf9, 0x8f, 0xa4, 0x22, 0xc6, 0x70, 0x1f, 0x62, 0x30, 0x86, 0xfb, 0xe0, 0xb1, 0x85, 0x2e, 0xf0, - 0x63, 0x15, 0xee, 0x70, 0x19, 0xad, 0xed, 0x6f, 0xb0, 0xda, 0x3e, 0x1c, 0x3a, 0x04, 0xf6, 0xa1, - 0x5e, 0x18, 0xd0, 0xfa, 0xb3, 0xa3, 0x7a, 0x16, 0x8f, 0x8f, 0xa8, 0xfc, 0x68, 0x2a, 0xd9, 0x23, - 0x45, 0x72, 0x53, 0x4e, 0x0a, 0xac, 0xf8, 0x56, 0xaf, 0xe8, 0x7e, 0xca, 0x8f, 0x45, 0xc6, 0x5b, - 0x32, 0x19, 0x1d, 0x6f, 0x3d, 0xc2, 0x03, 0xbe, 0x81, 0x26, 0x99, 0x52, 0x57, 0x75, 0x18, 0x86, - 0x56, 0x93, 0x18, 0xca, 0xdf, 0x8c, 0xac, 0x76, 0x31, 0x0a, 0x70, 0xed, 0x89, 0x02, 0x67, 0x86, - 0xd0, 0x20, 0x18, 0xe0, 0xea, 0x57, 0x52, 0x68, 0xb4, 0xe6, 0x39, 0x44, 0x6f, 0xf3, 0xa7, 0x41, - 0x53, 0x28, 0xcf, 0x3c, 0x59, 0x2a, 0x65, 0xfe, 0x68, 0x30, 0xf8, 0x8d, 0x2f, 0xa1, 0xf1, 0x45, - 0xdd, 0xf5, 0xa0, 0x64, 0xc5, 0x32, 0xc8, 0x7d, 0xf0, 0xe2, 0xce, 0x68, 0x11, 0x28, 0x5e, 0x64, - 0x74, 0xac, 0x1c, 0x3c, 0xbf, 0xcc, 0xec, 0xfa, 0x22, 0x26, 0xff, 0xde, 0x76, 0x71, 0x00, 0x1e, - 0xc0, 0x44, 0xca, 0xaa, 0x5f, 0x4f, 0xa1, 0x98, 0x8f, 0xcd, 0xc1, 0x1f, 0xc2, 0xac, 0xa0, 0x89, - 0xc8, 0x93, 0x5f, 0xee, 0x8a, 0xbe, 0xc7, 0x17, 0xc1, 0xd1, 0xd2, 0xf8, 0x23, 0x81, 0x0b, 0xf4, - 0x2d, 0x6d, 0x91, 0xbf, 0x76, 0x1a, 0xda, 0xd9, 0x2e, 0x66, 0xba, 0x4e, 0x4b, 0x13, 0x50, 0xdc, - 0x85, 0xfe, 0xe7, 0x0b, 0xe1, 0x7b, 0x46, 0x7c, 0x89, 0x3f, 0x67, 0x4e, 0x85, 0x6f, 0xa4, 0x22, - 0xe1, 0xf8, 0xd9, 0xf3, 0xe5, 0x4f, 0xa0, 0xd1, 0x4a, 0xbb, 0x43, 0x1c, 0xd7, 0xb6, 0x74, 0xcf, - 0xf6, 0xd3, 0x7e, 0xc1, 0x4b, 0x1c, 0x53, 0x80, 0x8b, 0x0f, 0x31, 0x44, 0x7a, 0x7c, 0xc5, 0x8f, - 0x4a, 0x99, 0x81, 0x97, 0xa4, 0xa7, 0x12, 0x32, 0x34, 0xfb, 0x79, 0x96, 0xaf, 0xa0, 0xc1, 0x5b, - 0xae, 0x0e, 0xce, 0xf2, 0x01, 0x69, 0x97, 0x02, 0x44, 0x52, 0xa0, 0xc0, 0x4f, 0xa1, 0x1c, 0x1c, - 0x2e, 0xb8, 0x10, 0x93, 0x95, 0xbf, 0xdc, 0x6a, 0x01, 0x44, 0x7c, 0x71, 0xc3, 0x68, 0xf0, 0x4d, - 0x54, 0x08, 0x4f, 0x4e, 0x21, 0x51, 0x9d, 0x1f, 0x5f, 0x0a, 0x42, 0xe3, 0xdf, 0x0d, 0x70, 0x2c, - 0xc3, 0x9d, 0xc8, 0x22, 0x56, 0x10, 0x2f, 0xa0, 0x89, 0x10, 0x46, 0x45, 0xe4, 0xc7, 0xb5, 0x83, - 0xd4, 0x10, 0x02, 0x2f, 0x2a, 0x4e, 0x91, 0x55, 0xb4, 0x18, 0xae, 0xa0, 0x21, 0xff, 0xd9, 0x56, - 0x7e, 0x57, 0x25, 0x3d, 0xc5, 0x9f, 0x6d, 0x0d, 0x89, 0x0f, 0xb6, 0xfc, 0xf2, 0x78, 0x1e, 0x8d, - 0x6b, 0x76, 0xd7, 0x23, 0xab, 0x36, 0x9f, 0x72, 0x78, 0xe0, 0x23, 0x68, 0x93, 0x43, 0x31, 0x75, - 0xcf, 0xf6, 0x33, 0x0b, 0x88, 0x11, 0xee, 0xe5, 0x52, 0x78, 0x19, 0x4d, 0xc6, 0xce, 0x98, 0xc5, - 0x78, 0xff, 0xc2, 0xe7, 0xc5, 0x99, 0xc5, 0x8b, 0xe2, 0xef, 0x4a, 0xa1, 0xdc, 0xaa, 0xa3, 0x9b, - 0x9e, 0xcb, 0xfd, 0xec, 0xcf, 0x4c, 0x6f, 0x3a, 0x7a, 0x87, 0xea, 0xc7, 0x34, 0x3c, 0x15, 0xbe, - 0xad, 0xb7, 0xba, 0xc4, 0x9d, 0xb9, 0x43, 0xbf, 0xee, 0xdf, 0x6d, 0x17, 0x5f, 0xde, 0x47, 0xe6, - 0xec, 0xab, 0x01, 0x27, 0x56, 0x03, 0x55, 0x01, 0x0f, 0xfe, 0x12, 0x55, 0x80, 0xe1, 0xf0, 0x32, - 0xb5, 0x33, 0xe1, 0x53, 0x4b, 0x9d, 0x0e, 0x77, 0xda, 0x17, 0xcc, 0x4c, 0x1f, 0xc3, 0x14, 0x3b, - 0x10, 0x98, 0xde, 0x11, 0xd3, 0x1d, 0x0a, 0x1c, 0xa8, 0x16, 0xac, 0xf2, 0x16, 0xf9, 0x62, 0x1a, - 0x0b, 0x25, 0xee, 0x37, 0x36, 0x41, 0x48, 0xd1, 0x62, 0x78, 0x0d, 0x4d, 0x70, 0xbe, 0x41, 0x24, - 0xa2, 0x71, 0x79, 0x56, 0x88, 0xa0, 0x99, 0xd2, 0x06, 0x6d, 0x34, 0x38, 0x58, 0xac, 0x23, 0x52, - 0x02, 0xcf, 0x84, 0xa1, 0xaa, 0x21, 0xb7, 0xa2, 0x32, 0x01, 0x1a, 0x0b, 0x0f, 0xaa, 0xfc, 0xf2, - 0x2c, 0x25, 0x63, 0x52, 0xe2, 0x05, 0x28, 0x22, 0xf2, 0x60, 0x5a, 0x5f, 0x48, 0xe0, 0x11, 0xd5, - 0x79, 0xb9, 0x08, 0x9e, 0x45, 0x63, 0x81, 0xcf, 0xe0, 0xad, 0x5b, 0x95, 0x32, 0xbc, 0x0a, 0xe0, - 0x49, 0x04, 0x23, 0x41, 0x8e, 0x44, 0x26, 0x52, 0x19, 0xfc, 0x2c, 0xca, 0x33, 0xaf, 0xfb, 0x0a, - 0x7b, 0x26, 0xe0, 0xbf, 0xe8, 0x06, 0x58, 0xdd, 0x14, 0x7b, 0x2c, 0x20, 0xc4, 0xaf, 0xa2, 0x91, - 0xd2, 0x9d, 0x1a, 0x9d, 0x67, 0x4a, 0xda, 0xb2, 0xab, 0x9c, 0x0a, 0xa3, 0xcb, 0x41, 0xee, 0x0d, - 0xbb, 0x45, 0xea, 0xba, 0x23, 0x4d, 0x1e, 0x22, 0x3d, 0x9e, 0x43, 0xe3, 0xd2, 0xb5, 0xa3, 0xab, - 0x9c, 0x06, 0x0e, 0x2c, 0xfd, 0x21, 0x60, 0xea, 0x3c, 0x03, 0xa7, 0x94, 0x60, 0x44, 0x2e, 0x44, - 0xb5, 0x86, 0x5a, 0xee, 0xad, 0x96, 0xbd, 0xa9, 0x11, 0x93, 0x1a, 0x5d, 0xf0, 0xc6, 0x20, 0xcf, - 0xb4, 0xc6, 0xe0, 0xa8, 0xba, 0xc3, 0x70, 0x52, 0xfa, 0x17, 0xb9, 0x18, 0x7e, 0x07, 0x61, 0x88, - 0xed, 0x45, 0x0c, 0xff, 0x14, 0xaa, 0x52, 0x76, 0x95, 0xb3, 0x10, 0x32, 0x01, 0x47, 0x03, 0x97, - 0x54, 0xca, 0x33, 0x97, 0xf8, 0xf4, 0x71, 0x51, 0x67, 0xa5, 0xea, 0x41, 0xf6, 0x4b, 0xd3, 0x10, - 0x5b, 0x9c, 0xc0, 0x15, 0x6f, 0xa2, 0x73, 0x55, 0x87, 0xdc, 0x33, 0xed, 0xae, 0xeb, 0x2f, 0x1f, - 0xfe, 0xbc, 0x75, 0x6e, 0xd7, 0x79, 0xeb, 0x71, 0x5e, 0xf1, 0x99, 0x8e, 0x43, 0xee, 0xd5, 0xfd, - 0x87, 0xf2, 0xd2, 0xb3, 0xd3, 0x5e, 0xdc, 0xa9, 0xb8, 0x4a, 0xef, 0x76, 0x1d, 0xc2, 0xe1, 0x26, - 0x71, 0x15, 0x25, 0x9c, 0x6a, 0x75, 0x8a, 0xf2, 0x39, 0x9a, 0x92, 0xea, 0x46, 0x8b, 0x61, 0x0d, - 0xe1, 0x1b, 0xb3, 0xfe, 0x89, 0x64, 0xa9, 0xc1, 0x82, 0x5c, 0x2b, 0x8f, 0x00, 0x33, 0x95, 0x8a, - 0xa5, 0xd9, 0x08, 0x82, 0x66, 0xd4, 0x75, 0x8e, 0x17, 0xc5, 0x12, 0x2f, 0x8d, 0x17, 0x51, 0xa1, - 0xea, 0x80, 0x7d, 0x74, 0x93, 0x6c, 0x55, 0xed, 0x96, 0xd9, 0xd8, 0x82, 0xa7, 0x0e, 0x7c, 0xaa, - 0xec, 0x30, 0x5c, 0xfd, 0x2e, 0xd9, 0xaa, 0x77, 0x00, 0x2b, 0x2e, 0x2b, 0xd1, 0x92, 0xe2, 0x23, - 0xf6, 0x47, 0xf7, 0xf6, 0x88, 0x9d, 0xa0, 0x02, 0x3f, 0xcf, 0xbc, 0xef, 0x11, 0x8b, 0x2e, 0xf5, - 0x2e, 0x7f, 0xd6, 0xa0, 0x44, 0xce, 0x3f, 0x03, 0x3c, 0x4f, 0x05, 0xc3, 0x46, 0x19, 0x09, 0xc0, - 0x62, 0xc3, 0xa2, 0x45, 0xd4, 0x2f, 0x66, 0xc4, 0xa9, 0x13, 0x9f, 0x47, 0x59, 0x21, 0xa2, 0x19, - 0x3c, 0xad, 0x85, 0x78, 0x13, 0x59, 0xfe, 0xb0, 0x7e, 0xd8, 0x7f, 0x83, 0xe9, 0x47, 0x30, 0x83, - 0x70, 0xaf, 0xe1, 0x8b, 0x4d, 0x2d, 0x24, 0x80, 0x50, 0x9b, 0x61, 0xc6, 0xbc, 0x8c, 0x10, 0x6a, - 0x33, 0xcc, 0x98, 0x27, 0xe5, 0xcb, 0xbb, 0x86, 0x46, 0x7c, 0x93, 0x3a, 0x7c, 0x10, 0x0e, 0xc1, - 0x29, 0xfc, 0xa4, 0x39, 0x2c, 0xf6, 0x85, 0x40, 0x84, 0x5f, 0x82, 0xb4, 0x51, 0x7c, 0x24, 0x73, - 0x23, 0x09, 0x66, 0x79, 0x71, 0xe0, 0x47, 0xf2, 0x46, 0x71, 0x6a, 0x3a, 0xe7, 0x89, 0x9a, 0xe4, - 0x07, 0x17, 0x86, 0x39, 0x4f, 0x52, 0xbf, 0x2d, 0x29, 0xe7, 0xa9, 0x58, 0x04, 0xaf, 0xa0, 0xc9, - 0x98, 0xf2, 0xf0, 0x07, 0xad, 0x10, 0xec, 0x3f, 0x41, 0xf3, 0xc4, 0x35, 0x35, 0x56, 0x56, 0xfd, - 0xf6, 0x74, 0x6c, 0xc5, 0xa0, 0x82, 0xe1, 0x54, 0x42, 0xe7, 0x80, 0x60, 0x7c, 0xd6, 0x4c, 0x30, - 0x02, 0x11, 0xbe, 0x8c, 0xf2, 0x91, 0xcc, 0x51, 0x10, 0xcb, 0x22, 0x48, 0x1b, 0x15, 0x60, 0xf1, - 0x35, 0x21, 0xdc, 0xb5, 0x10, 0x61, 0xc1, 0x0f, 0x77, 0x1d, 0x0d, 0x35, 0x00, 0x81, 0xaf, 0xaf, - 0x45, 0x22, 0xeb, 0xf9, 0x09, 0x7e, 0xe2, 0xab, 0x55, 0x18, 0x37, 0x34, 0xb0, 0x15, 0x07, 0x77, - 0xb3, 0x15, 0xd5, 0x5f, 0x4d, 0xc5, 0xb5, 0x1f, 0x5f, 0x8f, 0xbf, 0xe2, 0x66, 0xb9, 0x7d, 0x7c, - 0xa0, 0x58, 0x6b, 0xf0, 0x9e, 0x5b, 0x7a, 0x8f, 0x9d, 0x3e, 0xf0, 0x7b, 0xec, 0xcc, 0x3e, 0xdf, - 0x63, 0xab, 0xff, 0x33, 0xdb, 0xd7, 0x2b, 0xe6, 0x48, 0x82, 0x15, 0xbd, 0x48, 0xf7, 0x3b, 0xb4, - 0xf6, 0x92, 0x1b, 0xb3, 0xda, 0xd9, 0xa5, 0x7f, 0x5d, 0x67, 0xa3, 0xc6, 0xd5, 0x64, 0x4a, 0x31, - 0xd3, 0x32, 0xbc, 0xf3, 0xcf, 0x26, 0x64, 0x5a, 0x8e, 0xa6, 0x67, 0x12, 0x0b, 0xe0, 0xe7, 0xd0, - 0x70, 0x98, 0x33, 0x7a, 0x50, 0x88, 0xf5, 0x90, 0x90, 0x2a, 0x3a, 0xa4, 0xc4, 0x9f, 0x41, 0x39, - 0x29, 0x3f, 0xd8, 0xd5, 0x3d, 0xb8, 0x11, 0x4d, 0x8b, 0xc1, 0x82, 0xd8, 0xde, 0x21, 0x9a, 0x1b, - 0x8c, 0x33, 0xc5, 0xab, 0xe8, 0x54, 0xd5, 0x21, 0x06, 0x38, 0xac, 0xcd, 0xdd, 0xef, 0x38, 0x3c, - 0x94, 0x13, 0x1b, 0xc0, 0xb0, 0x74, 0x74, 0x7c, 0x34, 0x5d, 0xd4, 0x38, 0x5e, 0x60, 0x94, 0x54, - 0x9c, 0xda, 0x13, 0xac, 0x25, 0x37, 0xc9, 0xd6, 0xa6, 0xed, 0x18, 0x2c, 0xda, 0x11, 0xb7, 0x27, - 0xb8, 0xa0, 0xef, 0x72, 0x94, 0x68, 0x4f, 0xc8, 0x85, 0xa6, 0x5e, 0x44, 0x23, 0x07, 0x0d, 0xb8, - 0xf3, 0x73, 0xe9, 0x1e, 0xfe, 0xa5, 0x0f, 0x6f, 0xd8, 0xe2, 0x20, 0x84, 0xfc, 0x60, 0x8f, 0x10, - 0xf2, 0x7f, 0x92, 0xee, 0xe1, 0x3c, 0xfb, 0x50, 0x87, 0x7a, 0x0e, 0x84, 0x21, 0x87, 0x7a, 0x0e, - 0xa3, 0x6c, 0x9b, 0x86, 0x26, 0x12, 0x45, 0x82, 0xc2, 0xe7, 0x76, 0x0d, 0x0a, 0xff, 0x93, 0x99, - 0x7e, 0xce, 0xc5, 0x27, 0xb2, 0xdf, 0x8f, 0xec, 0xaf, 0xa1, 0x91, 0x40, 0xb2, 0x3c, 0xc9, 0xea, - 0x58, 0x10, 0xde, 0x8b, 0x81, 0xa1, 0x8c, 0x40, 0x84, 0xaf, 0xb0, 0xb6, 0xd6, 0xcc, 0x77, 0x59, - 0xdc, 0x9b, 0x31, 0x1e, 0x1b, 0x45, 0xf7, 0xf4, 0xba, 0x6b, 0xbe, 0x4b, 0xb4, 0x00, 0xad, 0xfe, - 0xd3, 0x74, 0xa2, 0x87, 0xf6, 0x49, 0x1f, 0xed, 0xa3, 0x8f, 0x12, 0x84, 0xc8, 0x7c, 0xcb, 0x4f, - 0x84, 0xb8, 0x0f, 0x21, 0xfe, 0x71, 0x3a, 0xd1, 0x13, 0xff, 0x44, 0x88, 0xfb, 0x99, 0x2d, 0x9e, - 0x42, 0xc3, 0x9a, 0xbd, 0xe9, 0x42, 0x06, 0x28, 0x3e, 0x57, 0xc0, 0x44, 0xed, 0xd8, 0x9b, 0x6e, - 0x1d, 0x76, 0x23, 0x5a, 0x48, 0xa0, 0xfe, 0x69, 0xba, 0xcf, 0x5b, 0x85, 0x13, 0xc1, 0x7f, 0x33, - 0x97, 0xc8, 0x5f, 0x4c, 0x4b, 0x6f, 0x21, 0x1e, 0xea, 0x9c, 0x29, 0xb5, 0xc6, 0x06, 0x69, 0xeb, - 0xd1, 0x9c, 0x29, 0x2e, 0x40, 0x79, 0xc8, 0xf5, 0x90, 0x44, 0xfd, 0x6a, 0x3a, 0xf2, 0x18, 0xe4, - 0x44, 0x76, 0x7b, 0x96, 0x5d, 0xa0, 0x75, 0xfc, 0x7d, 0xcb, 0x89, 0xe4, 0xf6, 0x2a, 0xb9, 0xef, - 0x49, 0x47, 0x9e, 0x02, 0x3d, 0xbc, 0xe9, 0x13, 0xbe, 0x9a, 0x8e, 0x3f, 0x6b, 0x7a, 0x78, 0x35, - 0xe9, 0x29, 0x34, 0xcc, 0xe5, 0x10, 0x2c, 0x15, 0x6c, 0xde, 0x67, 0x40, 0x38, 0x40, 0x0d, 0x08, - 0xd4, 0xef, 0x4c, 0x23, 0xf9, 0x89, 0xd6, 0x43, 0xaa, 0x43, 0xbf, 0x98, 0x96, 0x1f, 0xa7, 0x3d, - 0xbc, 0xfa, 0x33, 0x8d, 0x50, 0xad, 0xbb, 0xd6, 0xe0, 0xb1, 0xcd, 0x06, 0x85, 0x13, 0xf8, 0x00, - 0xaa, 0x09, 0x14, 0xea, 0xff, 0x4e, 0x27, 0xbe, 0x98, 0x7b, 0x78, 0x05, 0xf8, 0x2c, 0x9c, 0x8a, - 0x37, 0xac, 0x70, 0x22, 0x87, 0x43, 0x48, 0x3a, 0xfe, 0x62, 0x01, 0x67, 0x7d, 0x42, 0xfc, 0xf1, - 0x04, 0x73, 0x0d, 0x62, 0xc3, 0x26, 0x26, 0xf0, 0x15, 0x0d, 0xb7, 0x7f, 0x91, 0xde, 0xed, 0x81, - 0xe1, 0xc3, 0xbc, 0xaa, 0x0e, 0x55, 0xf5, 0x2d, 0x08, 0x84, 0x43, 0x7b, 0x62, 0x94, 0x05, 0x56, - 0xed, 0x30, 0x90, 0x78, 0x23, 0xc6, 0xa9, 0xd4, 0x3f, 0x1a, 0x4c, 0x7e, 0xdd, 0xf6, 0xf0, 0x8a, - 0xf0, 0x3c, 0xca, 0x56, 0x75, 0x6f, 0x83, 0x6b, 0x32, 0xdc, 0xd6, 0x75, 0x74, 0x6f, 0x43, 0x03, - 0x28, 0xbe, 0x82, 0xf2, 0x9a, 0xbe, 0x29, 0xa6, 0xcd, 0x84, 0x83, 0x1d, 0x47, 0xdf, 0xe4, 0xd9, - 0xab, 0x03, 0x34, 0x56, 0x83, 0x50, 0xc9, 0xec, 0xe4, 0x1b, 0x82, 0x83, 0xb2, 0x50, 0xc9, 0x41, - 0x80, 0xe4, 0xf3, 0x28, 0x3b, 0x63, 0x1b, 0x5b, 0xe0, 0xcc, 0x32, 0xca, 0x2a, 0x5b, 0xb3, 0x8d, - 0x2d, 0x0d, 0xa0, 0xf8, 0xf3, 0x29, 0x34, 0xb4, 0x40, 0x74, 0x83, 0x8e, 0x90, 0xe1, 0x7e, 0xbe, - 0x20, 0x9f, 0x7c, 0x30, 0xbe, 0x20, 0x93, 0x1b, 0xac, 0x32, 0x51, 0x51, 0x78, 0xfd, 0xf8, 0x06, - 0xca, 0xcf, 0xea, 0x1e, 0x69, 0xda, 0xce, 0x16, 0x78, 0xb7, 0x8c, 0x87, 0x3e, 0xd6, 0x92, 0xfe, - 0xf8, 0x44, 0xec, 0x66, 0xac, 0xc1, 0x7f, 0x69, 0x41, 0x61, 0x2a, 0x16, 0x9e, 0xbb, 0x64, 0x24, - 0x14, 0x8b, 0x9c, 0xa4, 0x24, 0x3c, 0x56, 0x1e, 0x4d, 0x3e, 0x56, 0x06, 0xeb, 0x11, 0x3c, 0xe0, - 0x20, 0xd4, 0xf1, 0x18, 0x2c, 0xfa, 0xcc, 0x7a, 0x04, 0x28, 0x44, 0x3a, 0xd6, 0x04, 0x12, 0xf5, - 0x1b, 0x83, 0x28, 0xf1, 0x2d, 0xcc, 0x89, 0x92, 0x9f, 0x28, 0x79, 0xa8, 0xe4, 0xe5, 0x98, 0x92, - 0x4f, 0xc5, 0x5f, 0x57, 0xbd, 0x4f, 0x35, 0xfc, 0x87, 0xb2, 0xb1, 0xb7, 0x99, 0x0f, 0xf7, 0xee, - 0x32, 0x94, 0xde, 0xe0, 0xae, 0xd2, 0x0b, 0x06, 0x44, 0x6e, 0xd7, 0x01, 0x31, 0xb4, 0xd7, 0x01, - 0x91, 0xef, 0x39, 0x20, 0x42, 0x05, 0x19, 0xee, 0xa9, 0x20, 0x15, 0x3e, 0x68, 0x50, 0xff, 0xe0, - 0xf7, 0xe7, 0x77, 0xb6, 0x8b, 0xe3, 0x74, 0x34, 0x25, 0x86, 0xbd, 0x07, 0x16, 0xea, 0xd7, 0xb3, - 0x7d, 0x1e, 0x54, 0x1f, 0x89, 0x8e, 0x3c, 0x8b, 0x32, 0xa5, 0x4e, 0x87, 0xeb, 0xc7, 0x29, 0xe1, - 0x2d, 0x77, 0x8f, 0x52, 0x94, 0x1a, 0xbf, 0x84, 0x32, 0xa5, 0x3b, 0xb5, 0x68, 0x58, 0xe8, 0xd2, - 0x9d, 0x1a, 0xff, 0x92, 0x9e, 0x65, 0xef, 0xd4, 0xf0, 0x2b, 0x61, 0x7c, 0xa6, 0x8d, 0xae, 0x75, - 0x97, 0x6f, 0x14, 0xb9, 0x13, 0xac, 0xef, 0x69, 0xd3, 0xa0, 0x28, 0xba, 0x5d, 0x8c, 0xd0, 0x46, - 0xb4, 0x29, 0xb7, 0x77, 0x6d, 0x1a, 0xda, 0x55, 0x9b, 0xf2, 0x7b, 0xd5, 0xa6, 0xe1, 0x3d, 0x68, - 0x13, 0xda, 0x55, 0x9b, 0x46, 0x0e, 0xaf, 0x4d, 0x1d, 0x34, 0x15, 0x0f, 0x82, 0x11, 0x68, 0x84, - 0x86, 0x70, 0x1c, 0xcb, 0x1d, 0x4b, 0xe0, 0xea, 0xbf, 0xcb, 0xb0, 0x75, 0x96, 0xd5, 0x28, 0x9a, - 0x13, 0x48, 0x4b, 0x28, 0xad, 0xfe, 0x5c, 0xba, 0x77, 0xec, 0x8e, 0xe3, 0x39, 0xc5, 0x7d, 0x6b, - 0xa2, 0x94, 0xb2, 0xf2, 0x5b, 0xaa, 0xde, 0x52, 0x8e, 0xb0, 0x4d, 0x92, 0xd9, 0xd7, 0x52, 0xbd, - 0x02, 0x8a, 0x1c, 0x4a, 0x62, 0x1f, 0x8e, 0x3b, 0xab, 0x81, 0xf7, 0xbc, 0x2b, 0x7b, 0xa9, 0x45, - 0x93, 0xe4, 0x64, 0x0e, 0x98, 0x24, 0xe7, 0x57, 0x53, 0xe8, 0xd4, 0xcd, 0xee, 0x1a, 0xe1, 0xce, - 0x69, 0x41, 0x33, 0xde, 0x41, 0x88, 0x82, 0xb9, 0x13, 0x4b, 0x0a, 0x9c, 0x58, 0x3e, 0x2a, 0x06, - 0x03, 0x89, 0x14, 0x98, 0x0e, 0xa9, 0x99, 0x03, 0xcb, 0x05, 0xdf, 0xc5, 0xf2, 0x6e, 0x77, 0x8d, - 0xd4, 0x63, 0x9e, 0x2c, 0x02, 0xf7, 0xa9, 0x57, 0x99, 0xf3, 0xfa, 0x41, 0x9d, 0x46, 0x7e, 0x26, - 0xdd, 0x33, 0xfe, 0xca, 0x91, 0xe8, 0xae, 0x98, 0xb4, 0x2f, 0x73, 0xc0, 0xa4, 0x7d, 0x9f, 0x4e, - 0xec, 0x15, 0xae, 0xbf, 0x8f, 0xf6, 0xe9, 0x87, 0x08, 0xc7, 0x24, 0x2e, 0xc9, 0x02, 0x3b, 0xc2, - 0xc1, 0xfe, 0xbe, 0x17, 0xd8, 0x6f, 0xa7, 0x7a, 0xc6, 0xc9, 0x39, 0xae, 0x02, 0x53, 0x7f, 0x3d, - 0xed, 0x87, 0xe7, 0x39, 0xd4, 0x27, 0x3c, 0x85, 0x86, 0x79, 0x0e, 0x02, 0xd9, 0xb7, 0x96, 0x1f, - 0xe5, 0xc1, 0xd1, 0x70, 0x40, 0x40, 0x97, 0x79, 0x3f, 0x7c, 0x48, 0x90, 0x6b, 0x09, 0x96, 0x79, - 0x93, 0x43, 0x29, 0xbd, 0x40, 0x42, 0x17, 0xf2, 0xb9, 0xfb, 0xa6, 0x07, 0x56, 0x01, 0xed, 0xcb, - 0x0c, 0x5b, 0xc8, 0xc9, 0x7d, 0xd3, 0x63, 0x36, 0x41, 0x80, 0xa6, 0x8b, 0xb4, 0x90, 0x4c, 0x9c, - 0x2f, 0xd2, 0x2e, 0x4f, 0x86, 0xc2, 0x1f, 0x73, 0x3d, 0x85, 0x86, 0xb9, 0xc3, 0x2a, 0x77, 0x33, - 0xe1, 0xad, 0xe5, 0x2e, 0xae, 0xd0, 0xda, 0x80, 0x80, 0x72, 0xd4, 0x48, 0x33, 0x74, 0xac, 0x03, - 0x8e, 0x0e, 0x40, 0x34, 0x8e, 0x51, 0x77, 0xd2, 0xf1, 0x28, 0x41, 0x0f, 0xef, 0xa6, 0xe0, 0x8a, - 0xec, 0xac, 0x06, 0x1e, 0x9a, 0x60, 0x70, 0x89, 0xbe, 0xb2, 0xcc, 0xee, 0xba, 0x86, 0xf2, 0x37, - 0xc9, 0x16, 0xf3, 0xab, 0xcc, 0x85, 0xae, 0xb8, 0x77, 0x39, 0x4c, 0x3c, 0xd1, 0xf4, 0xe9, 0xd4, - 0x5f, 0x49, 0xc7, 0xe3, 0x1f, 0x3d, 0xbc, 0xc2, 0xfe, 0x18, 0x1a, 0x02, 0x51, 0x56, 0xfc, 0x23, - 0x75, 0x10, 0x20, 0x88, 0x5b, 0xf6, 0xf0, 0xf5, 0xc9, 0xd4, 0x1f, 0xcf, 0x45, 0x83, 0x62, 0x3d, - 0xbc, 0xd2, 0x7b, 0x19, 0x8d, 0xcc, 0xda, 0x96, 0x6b, 0xba, 0x1e, 0xb1, 0x1a, 0xbe, 0xc2, 0x3e, - 0x42, 0x0d, 0x96, 0x46, 0x08, 0x16, 0x5f, 0xde, 0x08, 0xd4, 0x07, 0x51, 0x5e, 0xfc, 0x3c, 0x1a, - 0x06, 0x91, 0x83, 0x1f, 0xb2, 0x90, 0xa9, 0x6d, 0x8d, 0x02, 0xa3, 0x4e, 0xc8, 0x21, 0x29, 0xbe, - 0x85, 0xf2, 0xb3, 0x1b, 0x66, 0xcb, 0x70, 0x88, 0xc5, 0xb3, 0x8f, 0x3e, 0x9e, 0x1c, 0xc2, 0x6c, - 0x1a, 0xfe, 0x05, 0x5a, 0xd6, 0x9c, 0x06, 0x2f, 0x26, 0xbd, 0x3d, 0xe2, 0xb0, 0xa9, 0x1f, 0x48, - 0x23, 0x14, 0x16, 0xc0, 0x8f, 0xa1, 0xb4, 0xff, 0xc0, 0x95, 0xb9, 0x81, 0x48, 0x1a, 0x94, 0x86, - 0xa9, 0x98, 0x8f, 0xed, 0xf4, 0xae, 0x63, 0xfb, 0x16, 0xca, 0xb1, 0x13, 0x25, 0xf0, 0xd4, 0x16, - 0xe2, 0xf4, 0xf4, 0x6c, 0xf0, 0x34, 0xd0, 0xb3, 0xcd, 0x22, 0x58, 0x76, 0x92, 0xd7, 0x33, 0x63, - 0x36, 0xd5, 0x40, 0x83, 0xf0, 0x17, 0xbe, 0x84, 0xb2, 0x20, 0xc5, 0x14, 0xec, 0x13, 0xe1, 0x99, - 0x68, 0x44, 0x7e, 0x80, 0xa7, 0xdd, 0x34, 0x6b, 0x5b, 0x1e, 0xad, 0x1a, 0x5a, 0x3d, 0xca, 0xe5, - 0xc2, 0x61, 0x92, 0x5c, 0x38, 0x4c, 0xfd, 0xe7, 0xe9, 0x84, 0x70, 0x6d, 0x0f, 0xef, 0x30, 0x79, - 0x11, 0x21, 0x78, 0xc8, 0x4c, 0xe5, 0xe9, 0x3f, 0x81, 0x80, 0x51, 0x02, 0x8c, 0x40, 0x6d, 0x25, - 0xb3, 0x3e, 0x24, 0x56, 0x7f, 0x23, 0x15, 0x8b, 0xf1, 0x75, 0x6c, 0x93, 0x61, 0x4b, 0xdf, 0x72, - 0xcc, 0x13, 0x7b, 0x7f, 0x23, 0x9d, 0x14, 0xf1, 0xec, 0x78, 0xaa, 0x78, 0x98, 0xee, 0x33, 0xbb, - 0x8f, 0x74, 0x9f, 0x6f, 0xa3, 0x89, 0x48, 0x1c, 0x30, 0x9e, 0xc2, 0xec, 0x52, 0xff, 0x80, 0x62, - 0xbd, 0x9f, 0xc0, 0x4b, 0x64, 0xea, 0x9f, 0xa7, 0xfa, 0x47, 0x81, 0x3b, 0x72, 0xd5, 0x49, 0x10, - 0x40, 0xe6, 0x2f, 0x46, 0x00, 0x0f, 0x60, 0x9b, 0x79, 0xbc, 0x05, 0xf0, 0x3e, 0x99, 0x3c, 0xbe, - 0xd9, 0x02, 0xf8, 0xf1, 0xd4, 0xae, 0x41, 0xfc, 0x8e, 0x5a, 0x06, 0xea, 0x7f, 0x48, 0x25, 0x06, - 0xdb, 0x3b, 0x54, 0xbb, 0x5e, 0x41, 0x39, 0xe6, 0xb6, 0xc2, 0x5b, 0x25, 0xa4, 0x27, 0xa0, 0xd0, - 0x5e, 0x19, 0xb6, 0x19, 0x16, 0x2f, 0xa2, 0x21, 0xd6, 0x06, 0x83, 0xf7, 0xc6, 0x87, 0xfa, 0x44, - 0xfc, 0x33, 0x7a, 0x4d, 0x8e, 0x1c, 0xad, 0xfe, 0x5a, 0x2a, 0x16, 0xfb, 0xef, 0x08, 0xbf, 0x2d, - 0x9c, 0xaa, 0x33, 0x7b, 0x9f, 0xaa, 0xd5, 0xdf, 0x4f, 0x27, 0x87, 0x1e, 0x3c, 0xc2, 0x0f, 0x79, - 0x10, 0xc7, 0x55, 0x07, 0x5b, 0xb7, 0x56, 0xd1, 0xb8, 0x2c, 0x0b, 0xbe, 0x6c, 0x5d, 0x4c, 0x0e, - 0xc0, 0xd8, 0xa3, 0x15, 0x11, 0x1e, 0xea, 0x7b, 0xa9, 0x78, 0xd4, 0xc4, 0x23, 0x9f, 0x9f, 0x0e, - 0xa6, 0x2d, 0xf2, 0xa7, 0xbc, 0x4f, 0xd6, 0x9a, 0x07, 0xf1, 0x29, 0xef, 0x93, 0x55, 0xe3, 0x60, - 0x9f, 0xf2, 0x53, 0xe9, 0x5e, 0x41, 0x27, 0x8f, 0xfc, 0x83, 0x3e, 0x25, 0x0a, 0x99, 0xb5, 0x8c, - 0x7f, 0xda, 0x63, 0xbd, 0xa2, 0x3c, 0xf6, 0xe0, 0x19, 0xe3, 0x73, 0xb0, 0x31, 0x9e, 0x28, 0xac, - 0xf7, 0x89, 0x22, 0x1f, 0x0f, 0x61, 0xbd, 0x4f, 0x86, 0xca, 0xfb, 0x4f, 0x58, 0xff, 0x28, 0xbd, - 0xd7, 0x48, 0xa7, 0x27, 0xc2, 0x8b, 0x09, 0xef, 0x4b, 0xe9, 0x78, 0x04, 0xde, 0x23, 0x17, 0xd3, - 0x3c, 0xca, 0xf1, 0x58, 0xc0, 0x3d, 0x85, 0xc3, 0xf0, 0xbd, 0x2c, 0x1a, 0xfe, 0x1d, 0x61, 0x02, - 0xf5, 0xec, 0xde, 0x13, 0xa8, 0xab, 0x7f, 0x9a, 0x8a, 0x84, 0xab, 0x3d, 0x92, 0x23, 0x84, 0x03, - 0x2d, 0x49, 0xf8, 0x55, 0xff, 0x30, 0x33, 0x1b, 0x09, 0x17, 0x18, 0x7c, 0x4f, 0x99, 0x78, 0xba, - 0xd9, 0x8a, 0x96, 0xe7, 0x6f, 0xee, 0x7f, 0x25, 0x8d, 0x26, 0x63, 0xa4, 0xf8, 0x92, 0x14, 0x85, - 0x06, 0x8e, 0x25, 0x23, 0xce, 0xd9, 0x2c, 0x1e, 0xcd, 0x3e, 0x4e, 0x52, 0x2f, 0xa1, 0x6c, 0x59, - 0xdf, 0x62, 0xdf, 0x36, 0xc8, 0x58, 0x1a, 0xfa, 0x96, 0x78, 0xe2, 0x06, 0x78, 0xbc, 0x86, 0xce, - 0xb0, 0xfb, 0x10, 0xd3, 0xb6, 0x56, 0xcd, 0x36, 0xa9, 0x58, 0x4b, 0x66, 0xab, 0x65, 0xba, 0xfc, - 0xd2, 0xec, 0xa9, 0x9d, 0xed, 0xe2, 0x65, 0xcf, 0xf6, 0xf4, 0x56, 0x9d, 0xf8, 0x64, 0x75, 0xcf, - 0x6c, 0x93, 0xba, 0x69, 0xd5, 0xdb, 0x40, 0x29, 0xb0, 0x4c, 0x66, 0x85, 0x2b, 0x2c, 0x32, 0x64, - 0xad, 0xa1, 0x5b, 0x16, 0x31, 0x2a, 0xd6, 0xcc, 0x96, 0x47, 0xd8, 0x65, 0x5b, 0x86, 0x1d, 0x09, - 0xb2, 0xb7, 0xd7, 0x0c, 0x4d, 0x19, 0xaf, 0x51, 0x02, 0x2d, 0xa1, 0x90, 0xfa, 0xcb, 0xd9, 0x84, - 0x48, 0xc5, 0xc7, 0x48, 0x7d, 0xfc, 0x9e, 0xce, 0xee, 0xd2, 0xd3, 0x57, 0xd1, 0xd0, 0x6d, 0xe2, - 0xc0, 0xf9, 0x16, 0xbb, 0x60, 0x00, 0x67, 0xf1, 0x7b, 0x0c, 0x24, 0xde, 0xd0, 0x70, 0x2a, 0xdc, - 0x42, 0x53, 0xab, 0xb4, 0x9b, 0x92, 0x3b, 0x33, 0x77, 0x80, 0xce, 0xec, 0xc3, 0x0f, 0xbf, 0x85, - 0xce, 0x01, 0x36, 0xa1, 0x5b, 0x87, 0xa0, 0x2a, 0x88, 0xcc, 0xc4, 0xaa, 0x4a, 0xee, 0xdc, 0x5e, - 0xe5, 0xf1, 0xa7, 0xd0, 0x68, 0x30, 0x40, 0x4c, 0xe2, 0xf2, 0x9b, 0x8b, 0x3e, 0xe3, 0x8c, 0x85, - 0x3d, 0xa3, 0x60, 0x70, 0xd1, 0x92, 0x43, 0x67, 0x49, 0xbc, 0xd4, 0x7f, 0x9f, 0xea, 0x17, 0x31, - 0xf9, 0xc8, 0x67, 0xe5, 0x57, 0xd1, 0x90, 0xc1, 0x3e, 0x8a, 0xeb, 0x54, 0xff, 0x98, 0xca, 0x8c, - 0x54, 0xf3, 0xcb, 0xa8, 0xbf, 0x97, 0xea, 0x1b, 0xa8, 0xf9, 0xb8, 0x7f, 0xde, 0x97, 0x32, 0x3d, - 0x3e, 0x8f, 0x4f, 0xa2, 0x57, 0x50, 0xc1, 0xb4, 0x3c, 0xd2, 0x64, 0x39, 0xd8, 0xea, 0x61, 0x78, - 0x27, 0x6d, 0x42, 0x80, 0xc3, 0xe8, 0xba, 0x8e, 0xce, 0xfa, 0x8e, 0x85, 0x8e, 0xef, 0x81, 0xe5, - 0xd6, 0xbb, 0x8e, 0xc9, 0xc6, 0xa5, 0x76, 0xda, 0x8d, 0xb8, 0x67, 0xb9, 0xb7, 0x1c, 0x93, 0x56, - 0xa0, 0x7b, 0x1b, 0xc4, 0xd2, 0xeb, 0x9b, 0xb6, 0x73, 0x17, 0x62, 0x6b, 0xb2, 0xc1, 0xa9, 0x4d, - 0x30, 0xf8, 0x1d, 0x1f, 0x8c, 0x9f, 0x40, 0x63, 0xcd, 0x56, 0x97, 0x04, 0xd1, 0x0c, 0xd9, 0x5d, - 0x9f, 0x36, 0x4a, 0x81, 0xc1, 0x0d, 0xc9, 0x05, 0x84, 0x80, 0xc8, 0x83, 0x30, 0xda, 0x70, 0xb1, - 0xa7, 0x0d, 0x53, 0xc8, 0x2a, 0xef, 0xae, 0x29, 0xa6, 0xd5, 0x4c, 0x48, 0xf5, 0x96, 0x6d, 0x35, - 0xeb, 0x1e, 0x71, 0xda, 0xd0, 0x50, 0x70, 0x4e, 0xd4, 0xce, 0x02, 0x05, 0x5c, 0x9d, 0xb8, 0x8b, - 0xb6, 0xd5, 0x5c, 0x25, 0x4e, 0x9b, 0x36, 0xf5, 0x29, 0x84, 0x79, 0x53, 0x1d, 0x38, 0xf4, 0x60, - 0x1f, 0x07, 0x7e, 0x8a, 0x1a, 0xff, 0x08, 0x76, 0x1a, 0x02, 0x1f, 0x56, 0x44, 0x23, 0x2c, 0xa4, - 0x1b, 0x13, 0x1a, 0xb8, 0x2a, 0x6a, 0x88, 0x81, 0x40, 0x5e, 0x67, 0x11, 0xf7, 0x5e, 0x60, 0x5e, - 0xd3, 0x1a, 0xff, 0xa5, 0x7e, 0x21, 0x93, 0x14, 0x5b, 0xfa, 0x50, 0x8a, 0x16, 0x4e, 0xab, 0xe9, - 0x7d, 0x4d, 0xab, 0x13, 0x56, 0xb7, 0x5d, 0xd7, 0x3b, 0x9d, 0xfa, 0xba, 0xd9, 0x82, 0x67, 0x4b, - 0xb0, 0xf0, 0x69, 0x63, 0x56, 0xb7, 0x5d, 0xea, 0x74, 0xe6, 0x19, 0x10, 0x3f, 0x89, 0x26, 0x29, - 0x1d, 0x74, 0x52, 0x40, 0x99, 0x05, 0x4a, 0xca, 0x00, 0x62, 0xa2, 0xfa, 0xb4, 0x8f, 0xa0, 0x3c, - 0xe7, 0xc9, 0xd6, 0xaa, 0x41, 0x6d, 0x88, 0x31, 0x73, 0x69, 0xcf, 0x05, 0x6c, 0xd8, 0xe4, 0x3a, - 0xa8, 0x0d, 0xfb, 0xe5, 0x21, 0xf2, 0xaf, 0xd5, 0x6d, 0xb3, 0x88, 0x53, 0x43, 0x80, 0x0c, 0x7e, - 0xe3, 0x4b, 0x68, 0x9c, 0x72, 0x09, 0x04, 0xc6, 0x82, 0xa5, 0x0e, 0x6a, 0x11, 0x28, 0xbe, 0x86, - 0x4e, 0x4b, 0x10, 0x66, 0x83, 0x32, 0x37, 0xfc, 0x41, 0x2d, 0x11, 0xa7, 0x7e, 0x35, 0x23, 0x47, - 0xbc, 0x3e, 0x82, 0x8e, 0x38, 0x87, 0x86, 0x6c, 0xa7, 0x59, 0xef, 0x3a, 0x2d, 0x3e, 0xf6, 0x72, - 0xb6, 0xd3, 0xbc, 0xe5, 0xb4, 0xf0, 0x19, 0x94, 0xa3, 0xbd, 0x63, 0x1a, 0x7c, 0x88, 0x0d, 0xea, - 0x9d, 0x4e, 0xc5, 0xc0, 0x25, 0xd6, 0x21, 0x10, 0x68, 0xb3, 0xde, 0x80, 0xad, 0x3d, 0x73, 0x4a, - 0x18, 0x64, 0x2b, 0x5e, 0x0c, 0x09, 0xfd, 0x04, 0xe1, 0x37, 0xd9, 0x41, 0x40, 0x84, 0x85, 0x01, - 0xdb, 0x12, 0x83, 0xf5, 0x49, 0x94, 0x05, 0x47, 0x86, 0x2c, 0xd8, 0x26, 0xc6, 0xc0, 0x65, 0x84, - 0x43, 0xaa, 0xb6, 0x6d, 0x98, 0xeb, 0x26, 0x61, 0xaf, 0x26, 0x06, 0xd9, 0xc5, 0x6f, 0x1c, 0xab, - 0x15, 0x7c, 0x26, 0x4b, 0x1c, 0x82, 0x5f, 0x66, 0x4a, 0xc8, 0xe8, 0x60, 0xed, 0x63, 0x7d, 0xcb, - 0xec, 0xb4, 0x08, 0x0a, 0x34, 0x13, 0xca, 0xc3, 0x42, 0xa8, 0xbe, 0x97, 0x89, 0x87, 0x3d, 0x3f, - 0x12, 0xbb, 0x66, 0x01, 0x21, 0x9e, 0xd5, 0x20, 0xbc, 0x5c, 0x0b, 0x3c, 0xba, 0x43, 0x4c, 0x0f, - 0x1e, 0x42, 0x59, 0x7c, 0x05, 0xe5, 0xd9, 0x17, 0x55, 0xca, 0xdc, 0xde, 0x01, 0x17, 0x2c, 0xb7, - 0x63, 0xae, 0xaf, 0x83, 0xbf, 0x56, 0x80, 0xc6, 0x97, 0xd0, 0x50, 0x79, 0xb9, 0x56, 0x2b, 0x2d, - 0xfb, 0x37, 0xc5, 0xf0, 0x7e, 0xc3, 0xb0, 0xdc, 0xba, 0xab, 0x5b, 0xae, 0xe6, 0x23, 0xf1, 0x13, - 0x28, 0x57, 0xa9, 0x02, 0x19, 0x7b, 0x95, 0x38, 0xb2, 0xb3, 0x5d, 0x1c, 0x32, 0x3b, 0x8c, 0x8a, - 0xa3, 0xa0, 0xde, 0xdb, 0x95, 0xb2, 0xe0, 0x2e, 0xc1, 0xea, 0xbd, 0x67, 0x1a, 0x70, 0xed, 0xac, - 0x05, 0x68, 0xfc, 0x1c, 0x1a, 0xad, 0x11, 0xc7, 0xd4, 0x5b, 0xcb, 0x5d, 0xd8, 0x2a, 0x32, 0x97, - 0xef, 0xc9, 0x9d, 0xed, 0xe2, 0x98, 0x0b, 0xf0, 0xba, 0x05, 0x08, 0x4d, 0x22, 0xc3, 0xe7, 0x51, - 0x76, 0xc1, 0xb4, 0xfc, 0x27, 0x02, 0xe0, 0x43, 0xbe, 0x61, 0x5a, 0x9e, 0x06, 0x50, 0xf5, 0x7b, - 0xd3, 0xc9, 0xb1, 0xe3, 0x8f, 0x60, 0x38, 0x1e, 0xf0, 0xa6, 0x37, 0xa2, 0x04, 0xd9, 0x83, 0x2b, - 0x81, 0xfa, 0xfd, 0xe9, 0x5d, 0xc2, 0xd0, 0x3f, 0x94, 0x52, 0xf9, 0x72, 0xba, 0x7f, 0x26, 0x80, - 0x87, 0x52, 0x28, 0x5f, 0x49, 0x27, 0xc4, 0xe5, 0x3f, 0x94, 0x24, 0xae, 0xa0, 0x3c, 0x63, 0x13, - 0xb8, 0x98, 0xc2, 0x4c, 0xd0, 0x00, 0x18, 0xcc, 0x40, 0x3e, 0x1a, 0x2f, 0xa3, 0xd3, 0xa5, 0xf5, - 0x75, 0xd2, 0xf0, 0xc2, 0x60, 0xc1, 0xcb, 0x61, 0x80, 0x50, 0x16, 0x61, 0x95, 0xe3, 0xc3, 0x60, - 0xc3, 0x10, 0x08, 0x23, 0xb1, 0x1c, 0x5e, 0x45, 0x67, 0xa3, 0xf0, 0x1a, 0x33, 0x9f, 0xb3, 0x42, - 0xd0, 0xd5, 0x18, 0x47, 0xf6, 0x9f, 0xd6, 0xa3, 0xec, 0x93, 0x4b, 0x2c, 0x74, 0xe9, 0x4d, 0xd3, - 0x32, 0xf0, 0x23, 0xe8, 0xcc, 0xad, 0xda, 0x9c, 0x56, 0xbf, 0x59, 0x59, 0x2e, 0xd7, 0x6f, 0x2d, - 0xd7, 0xaa, 0x73, 0xb3, 0x95, 0xf9, 0xca, 0x5c, 0xb9, 0x30, 0x80, 0x4f, 0xa1, 0x89, 0x10, 0xb5, - 0x70, 0x6b, 0xa9, 0xb4, 0x5c, 0x48, 0xe1, 0x49, 0x34, 0x16, 0x02, 0x67, 0x56, 0x56, 0x0b, 0xe9, - 0x27, 0x3f, 0x82, 0x46, 0xc0, 0x76, 0x2c, 0xb1, 0x09, 0x7b, 0x14, 0xe5, 0x57, 0x66, 0x6a, 0x73, - 0xda, 0x6d, 0x60, 0x82, 0x50, 0xae, 0x3c, 0xb7, 0x4c, 0x19, 0xa6, 0x9e, 0xfc, 0x1f, 0x29, 0x84, - 0x6a, 0xf3, 0xab, 0x55, 0x4e, 0x38, 0x82, 0x86, 0x2a, 0xcb, 0xb7, 0x4b, 0x8b, 0x15, 0x4a, 0x97, - 0x47, 0xd9, 0x95, 0xea, 0x1c, 0xad, 0x61, 0x18, 0x0d, 0xce, 0x2e, 0xae, 0xd4, 0xe6, 0x0a, 0x69, - 0x0a, 0xd4, 0xe6, 0x4a, 0xe5, 0x42, 0x86, 0x02, 0xef, 0x68, 0x95, 0xd5, 0xb9, 0x42, 0x96, 0xfe, - 0xb9, 0x58, 0x5b, 0x2d, 0xad, 0x16, 0x06, 0xe9, 0x9f, 0xf3, 0xf0, 0x67, 0x8e, 0x32, 0xab, 0xcd, - 0xad, 0xc2, 0x8f, 0x21, 0xda, 0x84, 0x79, 0xff, 0x57, 0x9e, 0xa2, 0x28, 0xeb, 0x72, 0x45, 0x2b, - 0x0c, 0xd3, 0x1f, 0x94, 0x25, 0xfd, 0x81, 0x68, 0xe3, 0xb4, 0xb9, 0xa5, 0x95, 0xdb, 0x73, 0x85, - 0x11, 0xca, 0x6b, 0xe9, 0x26, 0x05, 0x8f, 0xd2, 0x3f, 0xb5, 0x25, 0xfa, 0xe7, 0x18, 0xe5, 0xa4, - 0xcd, 0x95, 0x16, 0xab, 0xa5, 0xd5, 0x85, 0xc2, 0x38, 0x6d, 0x0f, 0xf0, 0x9c, 0x60, 0x25, 0x97, - 0x4b, 0x4b, 0x73, 0x85, 0x02, 0xa7, 0x29, 0x2f, 0x56, 0x96, 0x6f, 0x16, 0x26, 0xa1, 0x21, 0x6f, - 0x2d, 0xc1, 0x0f, 0x4c, 0x0b, 0xc0, 0x5f, 0xa7, 0x9e, 0xfc, 0x16, 0x94, 0x5b, 0xa9, 0xc1, 0x6a, - 0x71, 0x0e, 0x9d, 0x5a, 0xa9, 0xd5, 0x57, 0xdf, 0xaa, 0xce, 0x45, 0xe4, 0x3d, 0x89, 0xc6, 0x7c, - 0xc4, 0x62, 0x65, 0xf9, 0xd6, 0x27, 0x99, 0xb4, 0x7d, 0xd0, 0x52, 0x69, 0x76, 0xa5, 0x56, 0x48, - 0xd3, 0x5e, 0xf1, 0x41, 0x77, 0x2a, 0xcb, 0xe5, 0x95, 0x3b, 0xb5, 0x42, 0xe6, 0xc9, 0x7b, 0x7e, - 0xca, 0xb7, 0x15, 0xc7, 0x6c, 0x9a, 0x16, 0xbe, 0x80, 0x1e, 0x29, 0xcf, 0xdd, 0xae, 0xcc, 0xce, - 0xd5, 0x57, 0xb4, 0xca, 0x8d, 0xca, 0x72, 0xa4, 0xa6, 0x33, 0x68, 0x52, 0x46, 0x97, 0xaa, 0x95, - 0x42, 0x0a, 0x9f, 0x45, 0x58, 0x06, 0xbf, 0x51, 0x5a, 0x9a, 0x2f, 0xa4, 0xb1, 0x82, 0x4e, 0xcb, - 0xf0, 0xca, 0xf2, 0xea, 0xad, 0xe5, 0xb9, 0x42, 0xe6, 0xc9, 0xbf, 0x93, 0x42, 0x67, 0x12, 0x1f, - 0x07, 0x63, 0x15, 0x5d, 0x9c, 0x5b, 0x2c, 0xd5, 0x56, 0x2b, 0xb3, 0xb5, 0xb9, 0x92, 0x36, 0xbb, - 0x50, 0x9f, 0x2d, 0xad, 0xce, 0xdd, 0x58, 0xd1, 0xde, 0xaa, 0xdf, 0x98, 0x5b, 0x9e, 0xd3, 0x4a, - 0x8b, 0x85, 0x01, 0xfc, 0x04, 0x2a, 0xf6, 0xa0, 0xa9, 0xcd, 0xcd, 0xde, 0xd2, 0x2a, 0xab, 0x6f, - 0x15, 0x52, 0xf8, 0x71, 0x74, 0xa1, 0x27, 0x11, 0xfd, 0x5d, 0x48, 0xe3, 0x8b, 0x68, 0xaa, 0x17, - 0xc9, 0x9b, 0x8b, 0x85, 0xcc, 0x93, 0x3f, 0x9c, 0x42, 0x38, 0xfe, 0xba, 0x13, 0x3f, 0x86, 0xce, - 0x53, 0xbd, 0xa8, 0xf7, 0x6e, 0xe0, 0xe3, 0xe8, 0x42, 0x22, 0x85, 0xd0, 0xbc, 0x22, 0x7a, 0xb4, - 0x07, 0x09, 0x6f, 0xdc, 0x79, 0xa4, 0x24, 0x13, 0xd0, 0xa6, 0xcd, 0x94, 0xdf, 0xfb, 0x83, 0x8b, - 0x03, 0xef, 0xfd, 0xe1, 0xc5, 0xd4, 0x6f, 0xfd, 0xe1, 0xc5, 0xd4, 0xef, 0xff, 0xe1, 0xc5, 0xd4, - 0xa7, 0xae, 0xed, 0xe7, 0xf1, 0x2b, 0x9b, 0xc2, 0xd6, 0x72, 0xf0, 0xcc, 0xeb, 0xd9, 0xff, 0x1b, - 0x00, 0x00, 0xff, 0xff, 0x1c, 0x55, 0x23, 0xea, 0xe7, 0x3e, 0x01, 0x00, + 0xc8, 0xa9, 0xd0, 0x51, 0x39, 0xb1, 0x9d, 0xc4, 0x95, 0x4a, 0x1c, 0xc8, 0x76, 0xca, 0xf9, 0x03, + 0x95, 0x54, 0xb9, 0x2a, 0xae, 0xc4, 0x71, 0x3e, 0xab, 0x5f, 0xf7, 0xcc, 0x74, 0xcf, 0xcc, 0x2e, + 0xbe, 0x4e, 0x06, 0xc1, 0xc3, 0x3f, 0x77, 0xd8, 0xf7, 0x5e, 0xbf, 0xee, 0x79, 0xfd, 0xba, 0xfb, + 0x75, 0xf7, 0xeb, 0xf7, 0xd0, 0x15, 0x8f, 0xb4, 0x48, 0xc7, 0x76, 0xbc, 0xab, 0x2d, 0xd2, 0xd4, + 0x1b, 0x5b, 0x57, 0xbd, 0xad, 0x0e, 0x71, 0xaf, 0x92, 0x7b, 0xc4, 0xf2, 0xfc, 0xff, 0xa6, 0x3b, + 0x8e, 0xed, 0xd9, 0x38, 0xc7, 0x7e, 0x4d, 0x9d, 0x6e, 0xda, 0x4d, 0x1b, 0x40, 0x57, 0xe9, 0x5f, + 0x0c, 0x3b, 0x75, 0xbe, 0x69, 0xdb, 0xcd, 0x16, 0xb9, 0x0a, 0xbf, 0xd6, 0xba, 0xeb, 0x57, 0x5d, + 0xcf, 0xe9, 0x36, 0x3c, 0x8e, 0x2d, 0x46, 0xb1, 0x9e, 0xd9, 0x26, 0xae, 0xa7, 0xb7, 0x3b, 0x9c, + 0xe0, 0x62, 0x94, 0x60, 0xd3, 0xd1, 0x3b, 0x1d, 0xe2, 0xf0, 0xca, 0xa7, 0x1e, 0x4f, 0x6e, 0x27, + 0xfc, 0xcb, 0x49, 0x9e, 0x4e, 0x26, 0xf1, 0x19, 0x45, 0x38, 0xaa, 0x5f, 0x4e, 0xa3, 0xfc, 0x12, + 0xf1, 0x74, 0x43, 0xf7, 0x74, 0x7c, 0x1e, 0x0d, 0x56, 0x2c, 0x83, 0xdc, 0x57, 0x52, 0x8f, 0xa5, + 0x2e, 0x67, 0x66, 0x72, 0x3b, 0xdb, 0xc5, 0x34, 0x31, 0x35, 0x06, 0xc4, 0x17, 0x50, 0x76, 0x75, + 0xab, 0x43, 0x94, 0xf4, 0x63, 0xa9, 0xcb, 0xc3, 0x33, 0xc3, 0x3b, 0xdb, 0xc5, 0x41, 0x90, 0x85, + 0x06, 0x60, 0xfc, 0x38, 0x4a, 0x57, 0xca, 0x4a, 0x06, 0x90, 0x93, 0x3b, 0xdb, 0xc5, 0xb1, 0xae, + 0x69, 0x3c, 0x65, 0xb7, 0x4d, 0x8f, 0xb4, 0x3b, 0xde, 0x96, 0x96, 0xae, 0x94, 0xf1, 0x25, 0x94, + 0x9d, 0xb5, 0x0d, 0xa2, 0x64, 0x81, 0x08, 0xef, 0x6c, 0x17, 0xc7, 0x1b, 0xb6, 0x41, 0x04, 0x2a, + 0xc0, 0xe3, 0xd7, 0x51, 0x76, 0xd5, 0x6c, 0x13, 0x65, 0xf0, 0xb1, 0xd4, 0xe5, 0x91, 0x6b, 0x53, + 0xd3, 0x4c, 0x2a, 0xd3, 0xbe, 0x54, 0xa6, 0x57, 0x7d, 0xb1, 0xcd, 0x14, 0xde, 0xdb, 0x2e, 0x0e, + 0xec, 0x6c, 0x17, 0xb3, 0x54, 0x92, 0x5f, 0xfa, 0x46, 0x31, 0xa5, 0x41, 0x49, 0xfc, 0x0a, 0x1a, + 0x99, 0x6d, 0x75, 0x5d, 0x8f, 0x38, 0xcb, 0x7a, 0x9b, 0x28, 0x39, 0xa8, 0x70, 0x6a, 0x67, 0xbb, + 0x78, 0xb6, 0xc1, 0xc0, 0x75, 0x4b, 0x6f, 0x8b, 0x15, 0x8b, 0xe4, 0xea, 0x2f, 0xa5, 0xd0, 0x44, + 0x8d, 0xb8, 0xae, 0x69, 0x5b, 0x81, 0x6c, 0x3e, 0x8c, 0x86, 0x39, 0xa8, 0x52, 0x06, 0xf9, 0x0c, + 0xcf, 0x0c, 0xed, 0x6c, 0x17, 0x33, 0xae, 0x69, 0x68, 0x21, 0x06, 0x7f, 0x0c, 0x0d, 0xdd, 0x31, + 0xbd, 0x8d, 0xa5, 0xf9, 0x12, 0x97, 0xd3, 0xd9, 0x9d, 0xed, 0x22, 0xde, 0x34, 0xbd, 0x8d, 0x7a, + 0x7b, 0x5d, 0x17, 0x2a, 0xf4, 0xc9, 0xf0, 0x22, 0x2a, 0x54, 0x1d, 0xf3, 0x9e, 0xee, 0x91, 0x9b, + 0x64, 0xab, 0x6a, 0xb7, 0xcc, 0xc6, 0x16, 0x97, 0xe2, 0x63, 0x3b, 0xdb, 0xc5, 0xf3, 0x1d, 0x86, + 0xab, 0xdf, 0x25, 0x5b, 0xf5, 0x0e, 0x60, 0x05, 0x26, 0xb1, 0x92, 0xea, 0xd7, 0x06, 0xd1, 0xe8, + 0x2d, 0x97, 0x38, 0x41, 0xbb, 0x2f, 0xa1, 0x2c, 0xfd, 0xcd, 0x9b, 0x0c, 0x32, 0xef, 0xba, 0xc4, + 0x11, 0x65, 0x4e, 0xf1, 0xf8, 0x0a, 0x1a, 0x5c, 0xb4, 0x9b, 0xa6, 0xc5, 0x9b, 0x7d, 0x6a, 0x67, + 0xbb, 0x38, 0xd1, 0xa2, 0x00, 0x81, 0x92, 0x51, 0xe0, 0x4f, 0xa0, 0xd1, 0x4a, 0x9b, 0xea, 0x90, + 0x6d, 0xe9, 0x9e, 0xed, 0xf0, 0xd6, 0x82, 0x74, 0x4d, 0x01, 0x2e, 0x14, 0x94, 0xe8, 0xf1, 0x4b, + 0x08, 0x95, 0xee, 0xd4, 0x34, 0xbb, 0x45, 0x4a, 0xda, 0x32, 0x57, 0x06, 0x28, 0xad, 0x6f, 0xba, + 0x75, 0xc7, 0x6e, 0x91, 0xba, 0xee, 0x88, 0xd5, 0x0a, 0xd4, 0x78, 0x0e, 0x8d, 0x97, 0x1a, 0x0d, + 0xe2, 0xba, 0x1a, 0xf9, 0x6c, 0x97, 0xb8, 0x9e, 0xab, 0x0c, 0x3e, 0x96, 0xb9, 0x3c, 0x3c, 0x73, + 0x61, 0x67, 0xbb, 0xf8, 0x88, 0x0e, 0x98, 0xba, 0xc3, 0x51, 0x02, 0x8b, 0x48, 0x21, 0x3c, 0x83, + 0xc6, 0x4a, 0xef, 0x76, 0x1d, 0x52, 0x31, 0x88, 0xe5, 0x99, 0xde, 0x16, 0xd7, 0x90, 0xf3, 0x3b, + 0xdb, 0x45, 0x45, 0xa7, 0x88, 0xba, 0xc9, 0x31, 0x02, 0x13, 0xb9, 0x08, 0x5e, 0x41, 0x93, 0x37, + 0x66, 0xab, 0x35, 0xe2, 0xdc, 0x33, 0x1b, 0xa4, 0xd4, 0x68, 0xd8, 0x5d, 0xcb, 0x53, 0x86, 0x80, + 0xcf, 0xe3, 0x3b, 0xdb, 0xc5, 0x0b, 0xcd, 0x46, 0xa7, 0xee, 0x32, 0x6c, 0x5d, 0x67, 0x68, 0x81, + 0x59, 0xbc, 0x2c, 0xfe, 0x14, 0x1a, 0x5b, 0x75, 0xa8, 0x16, 0x1a, 0x65, 0x42, 0xe1, 0x4a, 0x1e, + 0xf4, 0xff, 0xec, 0x34, 0x9f, 0x80, 0x18, 0xd4, 0xef, 0x59, 0xd6, 0x58, 0x8f, 0x15, 0xa8, 0x1b, + 0x80, 0x13, 0x1b, 0x2b, 0xb1, 0xc2, 0x04, 0x29, 0xf4, 0xe3, 0x4d, 0x87, 0x18, 0x31, 0x6d, 0x1b, + 0x86, 0x36, 0x5f, 0xd9, 0xd9, 0x2e, 0x7e, 0xd8, 0xe1, 0x34, 0xf5, 0xbe, 0x6a, 0xd7, 0x93, 0x15, + 0x9e, 0x43, 0x79, 0xaa, 0x4d, 0x37, 0x4d, 0xcb, 0x50, 0xd0, 0x63, 0xa9, 0xcb, 0xe3, 0xd7, 0x0a, + 0x7e, 0xeb, 0x7d, 0xf8, 0xcc, 0xb9, 0x9d, 0xed, 0xe2, 0x29, 0xaa, 0x83, 0xf5, 0xbb, 0xa6, 0x25, + 0x4e, 0x11, 0x41, 0x51, 0xf5, 0xe7, 0xb3, 0x68, 0x9c, 0x0a, 0x47, 0xd0, 0xe3, 0x12, 0x1d, 0x92, + 0x14, 0x42, 0x47, 0xa8, 0xdb, 0xd1, 0x1b, 0x84, 0xab, 0x34, 0xb0, 0xb3, 0x7c, 0xa0, 0xc0, 0x2e, + 0x4a, 0x8f, 0xaf, 0xa0, 0x3c, 0x03, 0x55, 0xca, 0x5c, 0xcb, 0xc7, 0x76, 0xb6, 0x8b, 0xc3, 0x2e, + 0xc0, 0xea, 0xa6, 0xa1, 0x05, 0x68, 0xaa, 0x66, 0xec, 0xef, 0x05, 0xdb, 0xf5, 0x28, 0x73, 0xae, + 0xe4, 0xa0, 0x66, 0xbc, 0xc0, 0x06, 0x47, 0x89, 0x6a, 0x26, 0x17, 0xc2, 0x2f, 0x22, 0xc4, 0x20, + 0x25, 0xc3, 0x70, 0xb8, 0xa6, 0x3f, 0xb2, 0xb3, 0x5d, 0x3c, 0xc3, 0x59, 0xe8, 0x86, 0x21, 0x0e, + 0x13, 0x81, 0x18, 0xb7, 0xd1, 0x28, 0xfb, 0xb5, 0xa8, 0xaf, 0x91, 0x16, 0x53, 0xf3, 0x91, 0x6b, + 0x97, 0x7d, 0x69, 0xca, 0xd2, 0x99, 0x16, 0x49, 0xe7, 0x2c, 0xcf, 0xd9, 0x9a, 0x29, 0xf2, 0x99, + 0xf1, 0x1c, 0xaf, 0xaa, 0x05, 0x38, 0x71, 0x4c, 0x8a, 0x65, 0xe8, 0x84, 0x39, 0x6f, 0x3b, 0x9b, + 0xba, 0x63, 0x10, 0x63, 0x66, 0x4b, 0x9c, 0x30, 0xd7, 0x7d, 0x70, 0x7d, 0x4d, 0xd4, 0x01, 0x91, + 0x1c, 0xcf, 0xa2, 0x31, 0xc6, 0xad, 0xd6, 0x5d, 0x83, 0xbe, 0x1f, 0x8a, 0x49, 0xcb, 0xed, 0xae, + 0x45, 0xfb, 0x5b, 0x2e, 0x33, 0xf5, 0x1a, 0x9a, 0x8c, 0x7d, 0x06, 0x2e, 0xa0, 0xcc, 0x5d, 0xb2, + 0xc5, 0xba, 0x5a, 0xa3, 0x7f, 0xe2, 0xd3, 0x68, 0xf0, 0x9e, 0xde, 0xea, 0xf2, 0x75, 0x48, 0x63, + 0x3f, 0x5e, 0x4a, 0x7f, 0x3c, 0x45, 0xa7, 0x6d, 0x3c, 0x6b, 0x5b, 0x16, 0x69, 0x78, 0xe2, 0xcc, + 0xfd, 0x3c, 0x1a, 0x5e, 0xb4, 0x1b, 0x7a, 0x0b, 0xfa, 0x80, 0xe9, 0x8c, 0xb2, 0xb3, 0x5d, 0x3c, + 0x4d, 0x85, 0x3f, 0xdd, 0xa2, 0x18, 0xa1, 0x4d, 0x21, 0x29, 0xed, 0x3c, 0x8d, 0xb4, 0x6d, 0x8f, + 0x40, 0xc1, 0x74, 0xd8, 0x79, 0x50, 0xd0, 0x01, 0x94, 0xd8, 0x79, 0x21, 0x31, 0xbe, 0x8a, 0xf2, + 0x55, 0xba, 0x58, 0x35, 0xec, 0x16, 0x57, 0x1c, 0x98, 0x4f, 0x61, 0x01, 0x13, 0x15, 0xde, 0x27, + 0x52, 0x17, 0xd0, 0xf8, 0x6c, 0xcb, 0x24, 0x96, 0x27, 0xb6, 0x9a, 0x0e, 0x87, 0x52, 0x93, 0x58, + 0x9e, 0xd8, 0x6a, 0x18, 0x38, 0x3a, 0x85, 0x8a, 0xad, 0x0e, 0x48, 0xd5, 0x7f, 0x9e, 0x41, 0x8f, + 0xdc, 0xec, 0xae, 0x11, 0xc7, 0x22, 0x1e, 0x71, 0xf9, 0xaa, 0x16, 0x70, 0x5d, 0x46, 0x93, 0x31, + 0x24, 0xe7, 0x0e, 0xab, 0xcd, 0xdd, 0x00, 0x59, 0xe7, 0x0b, 0xa5, 0x38, 0x65, 0xc5, 0x8a, 0xe2, + 0x05, 0x34, 0x11, 0x02, 0x69, 0x23, 0x5c, 0x25, 0x0d, 0xf3, 0xf1, 0xc5, 0x9d, 0xed, 0xe2, 0x94, + 0xc0, 0x8d, 0x36, 0x5b, 0xd4, 0xbe, 0x68, 0x31, 0x7c, 0x13, 0x15, 0x42, 0xd0, 0x0d, 0xc7, 0xee, + 0x76, 0x5c, 0x25, 0x03, 0xac, 0x8a, 0x3b, 0xdb, 0xc5, 0x47, 0x05, 0x56, 0x4d, 0x40, 0x8a, 0xab, + 0x60, 0xb4, 0x20, 0xfe, 0x8e, 0x94, 0xc8, 0x8d, 0x8f, 0xa0, 0x2c, 0x8c, 0xa0, 0x17, 0xfc, 0x11, + 0xd4, 0x53, 0x48, 0xd3, 0xd1, 0x92, 0x7c, 0x40, 0x45, 0x9a, 0x11, 0x1b, 0x50, 0xb1, 0x1a, 0xa7, + 0x66, 0xd1, 0x99, 0x44, 0x5e, 0xfb, 0xd2, 0xea, 0x3f, 0xca, 0x88, 0x5c, 0xaa, 0xb6, 0x11, 0x74, + 0xe6, 0x8a, 0xd8, 0x99, 0x55, 0xdb, 0x00, 0x53, 0x27, 0x15, 0x2e, 0x40, 0x42, 0x63, 0x3b, 0xb6, + 0x11, 0xb5, 0x78, 0xe2, 0x65, 0xf1, 0xdb, 0xe8, 0x6c, 0x0c, 0xc8, 0xa6, 0x5a, 0xa6, 0xfd, 0x97, + 0x76, 0xb6, 0x8b, 0x6a, 0x02, 0xd7, 0xe8, 0xcc, 0xdb, 0x83, 0x0b, 0xd6, 0xd1, 0x39, 0x41, 0xea, + 0xb6, 0xe5, 0xe9, 0xa6, 0xc5, 0x2d, 0x34, 0x36, 0x4a, 0x3e, 0xb2, 0xb3, 0x5d, 0x7c, 0x42, 0xd4, + 0x41, 0x9f, 0x26, 0xda, 0xf8, 0x5e, 0x7c, 0xb0, 0x81, 0x94, 0x04, 0x54, 0xa5, 0xad, 0x37, 0x7d, + 0xb3, 0xf3, 0xf2, 0xce, 0x76, 0xf1, 0x43, 0x89, 0x75, 0x98, 0x94, 0x4a, 0x5c, 0xe6, 0x7a, 0x71, + 0xc2, 0x1a, 0xc2, 0x21, 0x6e, 0xd9, 0x36, 0x08, 0x7c, 0xc3, 0x20, 0xf0, 0x57, 0x77, 0xb6, 0x8b, + 0x17, 0x05, 0xfe, 0x96, 0x6d, 0x90, 0x68, 0xf3, 0x13, 0x4a, 0xab, 0xbf, 0x94, 0x41, 0x17, 0x6b, + 0xa5, 0xa5, 0xc5, 0x8a, 0xe1, 0xdb, 0x05, 0x55, 0xc7, 0xbe, 0x67, 0x1a, 0xc2, 0xe8, 0x5d, 0x43, + 0xe7, 0x22, 0xa8, 0x39, 0x30, 0x45, 0x02, 0x8b, 0x14, 0xbe, 0xcd, 0xb7, 0x39, 0x3a, 0x9c, 0xa6, + 0xce, 0xec, 0x95, 0xba, 0x64, 0x8e, 0xf7, 0x62, 0x44, 0xfb, 0x28, 0x82, 0xaa, 0x6d, 0xd8, 0x8e, + 0xd7, 0xe8, 0x7a, 0x5c, 0x09, 0xa0, 0x8f, 0x62, 0x75, 0xb8, 0x9c, 0xa8, 0x4f, 0x15, 0x3e, 0x1f, + 0xfc, 0xf9, 0x14, 0x2a, 0x94, 0x3c, 0xcf, 0x31, 0xd7, 0xba, 0x1e, 0x59, 0xd2, 0x3b, 0x1d, 0xd3, + 0x6a, 0xc2, 0x58, 0x1f, 0xb9, 0xf6, 0x4a, 0xb0, 0xbe, 0xf5, 0x95, 0xc4, 0x74, 0xb4, 0xb8, 0x30, + 0x44, 0x75, 0x1f, 0x55, 0x6f, 0x33, 0x9c, 0x38, 0x44, 0xa3, 0xe5, 0xe8, 0x10, 0x4d, 0xe4, 0xb5, + 0xaf, 0x21, 0xfa, 0xe5, 0x0c, 0x3a, 0xbf, 0x72, 0xd7, 0xd3, 0x35, 0xe2, 0xda, 0x5d, 0xa7, 0x41, + 0xdc, 0x5b, 0x1d, 0x43, 0xf7, 0x48, 0x38, 0x52, 0x8b, 0x68, 0xb0, 0x64, 0x18, 0xc4, 0x00, 0x76, + 0x83, 0x6c, 0xef, 0xa4, 0x53, 0x80, 0xc6, 0xe0, 0xf8, 0xc3, 0x68, 0x88, 0x97, 0x01, 0xee, 0x83, + 0x33, 0x23, 0x3b, 0xdb, 0xc5, 0xa1, 0x2e, 0x03, 0x69, 0x3e, 0x8e, 0x92, 0x95, 0x49, 0x8b, 0x50, + 0xb2, 0x4c, 0x48, 0x66, 0x30, 0x90, 0xe6, 0xe3, 0xf0, 0x9b, 0x68, 0x1c, 0xd8, 0x06, 0xed, 0xe1, + 0x73, 0xdf, 0x69, 0x5f, 0xba, 0x62, 0x63, 0xd9, 0xd2, 0x04, 0xad, 0xa9, 0x3b, 0x7e, 0x01, 0x2d, + 0xc2, 0x00, 0xdf, 0x41, 0x05, 0xde, 0x88, 0x90, 0xe9, 0x60, 0x1f, 0xa6, 0x67, 0x76, 0xb6, 0x8b, + 0x93, 0xbc, 0xfd, 0x02, 0xdb, 0x18, 0x13, 0xca, 0x98, 0x37, 0x3b, 0x64, 0x9c, 0xdb, 0x8d, 0x31, + 0xff, 0x62, 0x91, 0x71, 0x94, 0x89, 0xfa, 0x16, 0x1a, 0x15, 0x0b, 0xe2, 0xb3, 0xb0, 0x3f, 0x65, + 0xe3, 0x04, 0x76, 0xb6, 0xa6, 0x01, 0x9b, 0xd2, 0x67, 0xd0, 0x48, 0x99, 0xb8, 0x0d, 0xc7, 0xec, + 0x50, 0xab, 0x81, 0x2b, 0xf9, 0xc4, 0xce, 0x76, 0x71, 0xc4, 0x08, 0xc1, 0x9a, 0x48, 0xa3, 0xfe, + 0xd7, 0x14, 0x3a, 0x4b, 0x79, 0x97, 0x5c, 0xd7, 0x6c, 0x5a, 0x6d, 0x71, 0xd9, 0x7e, 0x0a, 0xe5, + 0x6a, 0x50, 0x1f, 0xaf, 0xe9, 0xf4, 0xce, 0x76, 0xb1, 0xc0, 0x5a, 0x20, 0xe8, 0x21, 0xa7, 0x09, + 0x36, 0x67, 0xe9, 0x5d, 0x36, 0x67, 0xd4, 0x1c, 0xf5, 0x74, 0xc7, 0x33, 0xad, 0x66, 0xcd, 0xd3, + 0xbd, 0xae, 0x2b, 0x99, 0xa3, 0x1c, 0x53, 0x77, 0x01, 0x25, 0x99, 0xa3, 0x52, 0x21, 0xfc, 0x1a, + 0x1a, 0x9d, 0xb3, 0x8c, 0x90, 0x09, 0x9b, 0x10, 0x1f, 0xa5, 0x56, 0x22, 0x01, 0x78, 0x9c, 0x85, + 0x54, 0x40, 0xfd, 0x3b, 0x29, 0xa4, 0xb0, 0x9d, 0xd4, 0xa2, 0xe9, 0x7a, 0x4b, 0xa4, 0xbd, 0x26, + 0xcc, 0x4e, 0xf3, 0xfe, 0xd6, 0x8c, 0xe2, 0x84, 0xb5, 0x08, 0x4c, 0x01, 0xbe, 0x35, 0x6b, 0x99, + 0xae, 0x17, 0x9d, 0x0c, 0x23, 0xa5, 0x70, 0x05, 0x0d, 0x31, 0xce, 0xcc, 0x96, 0x18, 0xb9, 0xa6, + 0xf8, 0x8a, 0x10, 0xad, 0x9a, 0x29, 0x43, 0x9b, 0x11, 0x8b, 0x7b, 0x6b, 0x5e, 0x5e, 0xfd, 0xbb, + 0x69, 0x54, 0x88, 0x16, 0xc2, 0x77, 0x50, 0xfe, 0x0d, 0xdb, 0xb4, 0x88, 0xb1, 0x62, 0x41, 0x0b, + 0xfb, 0x9f, 0x30, 0xf8, 0x76, 0xf4, 0xa9, 0x77, 0xa0, 0x4c, 0xdd, 0x16, 0x76, 0xa6, 0x70, 0xe0, + 0x10, 0x30, 0xc3, 0x9f, 0x42, 0xc3, 0xd4, 0x06, 0xbc, 0x07, 0x9c, 0xd3, 0xbb, 0x72, 0x7e, 0x8c, + 0x73, 0x3e, 0xed, 0xb0, 0x42, 0x71, 0xd6, 0x21, 0x3b, 0xaa, 0x57, 0x1a, 0xd1, 0x5d, 0xdb, 0xe2, + 0x3d, 0x0f, 0x7a, 0xe5, 0x00, 0x44, 0xd4, 0x2b, 0x46, 0x43, 0x4d, 0x57, 0xf6, 0xb1, 0xd0, 0x0d, + 0xc2, 0xbe, 0x83, 0xc9, 0x2a, 0xda, 0x03, 0x02, 0xb1, 0xfa, 0x5d, 0x69, 0xf4, 0x74, 0x28, 0x32, + 0x8d, 0xdc, 0x33, 0xc9, 0x26, 0x17, 0xe7, 0x86, 0xd9, 0xe1, 0x1b, 0x3f, 0xaa, 0xf2, 0xee, 0xec, + 0x86, 0x6e, 0x35, 0x89, 0x81, 0xaf, 0xa0, 0x41, 0xba, 0x3b, 0x77, 0x95, 0x14, 0x98, 0x6b, 0x30, + 0x9d, 0xd0, 0x5d, 0xbc, 0xd8, 0x23, 0x8c, 0x02, 0xdb, 0x28, 0xb7, 0xea, 0xe8, 0xa6, 0xe7, 0xf7, + 0x6c, 0x29, 0xde, 0xb3, 0x7b, 0xa8, 0x71, 0x9a, 0xf1, 0x60, 0x73, 0x3e, 0x08, 0xc2, 0x03, 0x80, + 0x28, 0x08, 0x46, 0x32, 0xf5, 0x22, 0x1a, 0x11, 0x88, 0xf7, 0x35, 0xa9, 0x7f, 0x35, 0x2b, 0xea, + 0xba, 0xdf, 0x2c, 0xae, 0xeb, 0x57, 0xa9, 0x8e, 0xba, 0x2e, 0xb5, 0x2a, 0x98, 0x92, 0x73, 0x4d, + 0x04, 0x90, 0xac, 0x89, 0x00, 0xc2, 0xcf, 0xa2, 0x3c, 0x63, 0x11, 0xec, 0x3d, 0x61, 0xdf, 0xea, + 0x00, 0x4c, 0x5e, 0x9a, 0x03, 0x42, 0xfc, 0x53, 0x29, 0x74, 0xa1, 0xaf, 0x24, 0x40, 0x19, 0x46, + 0xae, 0x3d, 0x77, 0x20, 0x31, 0xce, 0x3c, 0xbd, 0xb3, 0x5d, 0xbc, 0xd2, 0x0e, 0x48, 0xea, 0x8e, + 0x40, 0x53, 0x6f, 0x30, 0x22, 0xa1, 0x5d, 0xfd, 0x9b, 0x42, 0x8d, 0x47, 0x56, 0xe9, 0x3c, 0x9c, + 0xbf, 0x58, 0x8d, 0x2d, 0xbf, 0x91, 0xd9, 0xd0, 0x78, 0xe4, 0xdf, 0xbb, 0xee, 0x93, 0x24, 0x54, + 0xd3, 0x83, 0x0b, 0x6e, 0xa0, 0x73, 0x0c, 0x53, 0xd6, 0xb7, 0x56, 0xd6, 0x97, 0x6c, 0xcb, 0xdb, + 0xf0, 0x2b, 0x18, 0x14, 0x0f, 0x30, 0xa0, 0x02, 0x43, 0xdf, 0xaa, 0xdb, 0xeb, 0xf5, 0x36, 0xa5, + 0x4a, 0xa8, 0xa3, 0x17, 0x27, 0x3a, 0xd1, 0xf2, 0x31, 0xe7, 0x4f, 0x41, 0xb9, 0xf0, 0x78, 0xc9, + 0x1f, 0xa7, 0xf1, 0x09, 0x27, 0x52, 0x48, 0xfd, 0xc6, 0x20, 0xdd, 0xbd, 0xc3, 0x99, 0x20, 0x4c, + 0xc1, 0xf8, 0xa5, 0xf0, 0x94, 0x95, 0xcf, 0x39, 0xc1, 0xb9, 0x48, 0x70, 0x9e, 0x33, 0x4a, 0xe7, + 0x83, 0xdf, 0xda, 0x2e, 0xa6, 0x76, 0xb6, 0x8b, 0x03, 0x5a, 0x5e, 0xd8, 0x09, 0x86, 0x8b, 0x84, + 0xb0, 0x2a, 0x8a, 0xa7, 0x7c, 0x91, 0xb2, 0x6c, 0xd1, 0x78, 0x0d, 0x0d, 0xf1, 0x36, 0x70, 0x35, + 0x39, 0x17, 0x1e, 0x1e, 0x48, 0x67, 0x9b, 0x91, 0xd2, 0x7e, 0x29, 0xfc, 0x0a, 0xca, 0xb1, 0x0d, + 0x39, 0xf4, 0xa0, 0x70, 0x10, 0x25, 0x1f, 0x3e, 0x44, 0x8a, 0xf3, 0x32, 0x78, 0x01, 0xa1, 0x70, + 0x33, 0x1e, 0x1c, 0xe5, 0x72, 0x0e, 0xf1, 0x6d, 0x7a, 0x84, 0x8b, 0x50, 0x16, 0x3f, 0x8f, 0x46, + 0x57, 0x89, 0xd3, 0x36, 0x2d, 0xbd, 0x55, 0x33, 0xdf, 0xf5, 0x4f, 0x73, 0x61, 0xb5, 0x74, 0xcd, + 0x77, 0xc5, 0xe1, 0x26, 0xd1, 0xe1, 0xcf, 0x24, 0x6d, 0x76, 0x87, 0xa0, 0x21, 0x8f, 0xef, 0xba, + 0x0b, 0x8c, 0xb4, 0x27, 0x61, 0xef, 0xfb, 0x26, 0x1a, 0x93, 0xf6, 0x39, 0xfc, 0xb8, 0xee, 0x42, + 0x9c, 0xb5, 0xb0, 0x69, 0x8b, 0xb0, 0x95, 0x39, 0x50, 0xf5, 0xab, 0x58, 0xa6, 0x67, 0xea, 0xad, + 0x59, 0xbb, 0xdd, 0xd6, 0x2d, 0x43, 0x19, 0x0e, 0xd5, 0xcf, 0x64, 0x98, 0x7a, 0x83, 0xa1, 0x44, + 0xf5, 0x93, 0x0b, 0xd1, 0xbd, 0x34, 0xef, 0x43, 0x8d, 0x34, 0x6c, 0x87, 0x2e, 0xe0, 0x70, 0x1a, + 0xc7, 0xf7, 0xd2, 0x2e, 0xc3, 0xd5, 0x1d, 0x1f, 0x29, 0x5a, 0xc8, 0xd1, 0x82, 0x6f, 0x64, 0xf3, + 0x23, 0x85, 0xd1, 0xe8, 0x01, 0xaa, 0xfa, 0xb7, 0x33, 0x68, 0x84, 0x93, 0xd2, 0xf5, 0xef, 0x44, + 0xc1, 0x0f, 0xa3, 0xe0, 0x89, 0x8a, 0x9a, 0x7b, 0x50, 0x8a, 0xaa, 0x7e, 0x21, 0x1d, 0xcc, 0x46, + 0x55, 0xc7, 0xb4, 0x0e, 0x37, 0x1b, 0x5d, 0x42, 0x68, 0x76, 0xa3, 0x6b, 0xdd, 0x65, 0x17, 0x45, + 0xe9, 0xf0, 0xa2, 0xa8, 0x61, 0x6a, 0x02, 0x06, 0x5f, 0x40, 0xd9, 0x32, 0xe5, 0x4f, 0x7b, 0x66, + 0x74, 0x66, 0xf8, 0x3d, 0xc6, 0x29, 0xf5, 0xb4, 0x06, 0x60, 0xba, 0x23, 0x9a, 0xd9, 0xf2, 0x08, + 0xb3, 0x41, 0x33, 0x6c, 0x47, 0xb4, 0x46, 0x01, 0x1a, 0x83, 0xe3, 0xeb, 0x68, 0xb2, 0x4c, 0x5a, + 0xfa, 0xd6, 0x92, 0xd9, 0x6a, 0x99, 0x2e, 0x69, 0xd8, 0x96, 0xe1, 0x82, 0x90, 0x79, 0x75, 0x6d, + 0x57, 0x8b, 0x13, 0x60, 0x15, 0xe5, 0x56, 0xd6, 0xd7, 0x5d, 0xe2, 0x81, 0xf8, 0x32, 0x33, 0x68, + 0x67, 0xbb, 0x98, 0xb3, 0x01, 0xa2, 0x71, 0x8c, 0xfa, 0xb3, 0x29, 0xba, 0xe5, 0x70, 0xef, 0x7a, + 0x76, 0x27, 0xd0, 0xf2, 0x43, 0x89, 0xe4, 0x4a, 0x68, 0x0c, 0xa4, 0xe1, 0x6b, 0x27, 0xf8, 0xd7, + 0x0e, 0x71, 0x83, 0x20, 0x34, 0x03, 0x12, 0xbf, 0x2a, 0xb3, 0xcb, 0x57, 0xa9, 0x7f, 0x9c, 0x46, + 0xe7, 0x78, 0x8b, 0x67, 0x5b, 0x66, 0x67, 0xcd, 0xd6, 0x1d, 0x43, 0x23, 0x0d, 0x62, 0xde, 0x23, + 0xc7, 0x73, 0xe0, 0xc9, 0x43, 0x27, 0x7b, 0x88, 0xa1, 0x73, 0x0d, 0x76, 0x6f, 0x54, 0x32, 0x70, + 0x4a, 0xcb, 0x2c, 0x81, 0xc2, 0xce, 0x76, 0x71, 0xd4, 0x60, 0x60, 0x38, 0x63, 0xd7, 0x44, 0x22, + 0xaa, 0x24, 0x8b, 0xc4, 0x6a, 0x7a, 0x1b, 0xa0, 0x24, 0x83, 0x4c, 0x49, 0x5a, 0x00, 0xd1, 0x38, + 0x46, 0xfd, 0xcf, 0x69, 0x74, 0x3a, 0x2a, 0xf2, 0x1a, 0xb1, 0x8c, 0x13, 0x79, 0x7f, 0x73, 0xe4, + 0xfd, 0x27, 0x19, 0xf4, 0x28, 0x2f, 0x53, 0xdb, 0xd0, 0x1d, 0x62, 0x94, 0x4d, 0x87, 0x34, 0x3c, + 0xdb, 0xd9, 0x3a, 0xc6, 0x06, 0xd4, 0x83, 0x13, 0xfb, 0x75, 0x94, 0xe3, 0x7b, 0x76, 0xb6, 0xce, + 0x8c, 0x07, 0x2d, 0x01, 0x68, 0x6c, 0x85, 0x62, 0xfb, 0xfd, 0x48, 0x67, 0xe5, 0xf6, 0xd2, 0x59, + 0x1f, 0x47, 0x63, 0x81, 0xe8, 0x61, 0xf7, 0x38, 0x14, 0x5a, 0x5b, 0x86, 0x8f, 0x80, 0x0d, 0xa4, + 0x26, 0x13, 0x42, 0x6d, 0x3e, 0xa0, 0x52, 0x06, 0x6b, 0x68, 0x8c, 0xd7, 0x16, 0x94, 0x33, 0x0d, + 0x4d, 0x24, 0x52, 0xb7, 0xb3, 0x68, 0x2a, 0xb9, 0xdb, 0x35, 0xa2, 0x1b, 0x27, 0xbd, 0xfe, 0x81, + 0xec, 0x75, 0xfc, 0x38, 0xca, 0x56, 0x75, 0x6f, 0x83, 0x5f, 0x3c, 0xc3, 0x25, 0xec, 0xba, 0xd9, + 0x22, 0xf5, 0x8e, 0xee, 0x6d, 0x68, 0x80, 0x12, 0xe6, 0x0c, 0x04, 0x1c, 0x13, 0xe6, 0x0c, 0x61, + 0xb1, 0x1f, 0x79, 0x2c, 0x75, 0x39, 0x9b, 0xb8, 0xd8, 0x7f, 0x23, 0xdb, 0x6b, 0x5e, 0xb9, 0xe3, + 0x98, 0x1e, 0x39, 0xd1, 0xb0, 0x13, 0x0d, 0x3b, 0xa4, 0x86, 0xfd, 0x4e, 0x1a, 0x8d, 0x05, 0x9b, + 0xa6, 0x77, 0x48, 0xe3, 0x68, 0xd6, 0xaa, 0x70, 0x2b, 0x93, 0x39, 0xf4, 0x56, 0xe6, 0x30, 0x0a, + 0xa5, 0x06, 0xe7, 0x94, 0xcc, 0x34, 0x00, 0x89, 0xb1, 0x73, 0xca, 0xe0, 0x74, 0xf2, 0x71, 0x34, + 0xb4, 0xa4, 0xdf, 0x37, 0xdb, 0xdd, 0x36, 0xb7, 0xd2, 0xc1, 0x91, 0xaa, 0xad, 0xdf, 0xd7, 0x7c, + 0xb8, 0xfa, 0xaf, 0x52, 0x68, 0x9c, 0x0b, 0x95, 0x33, 0x3f, 0x94, 0x54, 0x43, 0xe9, 0xa4, 0x0f, + 0x2d, 0x9d, 0xcc, 0xc1, 0xa5, 0xa3, 0xfe, 0x58, 0x06, 0x29, 0xf3, 0x66, 0x8b, 0xac, 0x3a, 0xba, + 0xe5, 0xae, 0x13, 0x87, 0x6f, 0xa7, 0xe7, 0x28, 0xab, 0x43, 0x7d, 0xa0, 0x30, 0xa5, 0xa4, 0x0f, + 0x34, 0xa5, 0x7c, 0x14, 0x0d, 0xf3, 0xc6, 0x04, 0x4e, 0x7c, 0x30, 0x6a, 0x1c, 0x1f, 0xa8, 0x85, + 0x78, 0x4a, 0x5c, 0xea, 0x74, 0x1c, 0xfb, 0x1e, 0x71, 0xd8, 0xd5, 0x12, 0x27, 0xd6, 0x7d, 0xa0, + 0x16, 0xe2, 0x05, 0xce, 0xc4, 0xb7, 0x17, 0x45, 0xce, 0xc4, 0xd1, 0x42, 0x3c, 0xbe, 0x8c, 0xf2, + 0x8b, 0x76, 0x43, 0x07, 0x41, 0xb3, 0x69, 0x65, 0x74, 0x67, 0xbb, 0x98, 0x6f, 0x71, 0x98, 0x16, + 0x60, 0x29, 0x65, 0xd9, 0xde, 0xb4, 0x5a, 0xb6, 0xce, 0xbc, 0x4d, 0xf2, 0x8c, 0xd2, 0xe0, 0x30, + 0x2d, 0xc0, 0x52, 0x4a, 0x2a, 0x73, 0xf0, 0xe2, 0xc9, 0x87, 0x3c, 0xd7, 0x39, 0x4c, 0x0b, 0xb0, + 0xea, 0xcf, 0x66, 0xa9, 0xf6, 0xba, 0xe6, 0xbb, 0x0f, 0xfd, 0xba, 0x10, 0x0e, 0x98, 0xc1, 0x03, + 0x0c, 0x98, 0x87, 0xe6, 0xc0, 0x4e, 0xfd, 0x6f, 0x43, 0x08, 0x71, 0xe9, 0xcf, 0x9d, 0x6c, 0x0e, + 0x0f, 0xa7, 0x35, 0x65, 0x34, 0x39, 0x67, 0x6d, 0xe8, 0x56, 0x83, 0x18, 0xe1, 0xb1, 0x65, 0x0e, + 0x86, 0x36, 0x38, 0xd1, 0x12, 0x8e, 0x0c, 0xcf, 0x2d, 0xb5, 0x78, 0x01, 0xfc, 0x0c, 0x1a, 0xa9, + 0x58, 0x1e, 0x71, 0xf4, 0x86, 0x67, 0xde, 0x23, 0x7c, 0x6a, 0x80, 0xeb, 0x5c, 0x33, 0x04, 0x6b, + 0x22, 0x0d, 0xbe, 0x8e, 0x46, 0xab, 0xba, 0xe3, 0x99, 0x0d, 0xb3, 0xa3, 0x5b, 0x9e, 0xab, 0xe4, + 0x61, 0x46, 0x03, 0x0b, 0xa3, 0x23, 0xc0, 0x35, 0x89, 0x0a, 0x7f, 0x06, 0x0d, 0xc3, 0xd6, 0x14, + 0x3c, 0x95, 0x87, 0x77, 0xbd, 0xed, 0x7b, 0x22, 0xf4, 0xc7, 0x63, 0xa7, 0xaf, 0x70, 0x6d, 0x1b, + 0xbd, 0xf0, 0x0b, 0x38, 0xe2, 0x4f, 0xa2, 0xa1, 0x39, 0xcb, 0x00, 0xe6, 0x68, 0x57, 0xe6, 0x2a, + 0x67, 0x7e, 0x36, 0x64, 0x6e, 0x77, 0x22, 0xbc, 0x7d, 0x76, 0xc9, 0xa3, 0x6c, 0xe4, 0x9b, 0x37, + 0xca, 0x46, 0xbf, 0x09, 0xc7, 0xe2, 0x63, 0x0f, 0xea, 0x58, 0x7c, 0xfc, 0x80, 0xc7, 0xe2, 0xea, + 0xbb, 0x68, 0x64, 0xa6, 0x3a, 0x1f, 0x8c, 0xde, 0x47, 0x50, 0xa6, 0xca, 0xdd, 0x0b, 0xb2, 0xcc, + 0x9e, 0xe9, 0x98, 0x86, 0x46, 0x61, 0xf8, 0x0a, 0xca, 0xcf, 0x82, 0xcf, 0x1a, 0xbf, 0xfa, 0xcb, + 0xb2, 0xf5, 0xaf, 0x01, 0x30, 0x70, 0x3b, 0xf5, 0xd1, 0xf8, 0xc3, 0x68, 0xa8, 0xea, 0xd8, 0x4d, + 0x47, 0x6f, 0xf3, 0x35, 0x18, 0xfc, 0x3b, 0x3a, 0x0c, 0xa4, 0xf9, 0x38, 0xf5, 0xfb, 0x53, 0xbe, + 0xd9, 0x4e, 0x4b, 0xd4, 0xba, 0x70, 0x34, 0x0f, 0x75, 0xe7, 0x59, 0x09, 0x97, 0x81, 0x34, 0x1f, + 0x87, 0xaf, 0xa0, 0xc1, 0x39, 0xc7, 0xb1, 0x1d, 0xd1, 0xbb, 0x9b, 0x50, 0x80, 0x78, 0x47, 0x0b, + 0x14, 0xf8, 0x05, 0x34, 0xc2, 0xe6, 0x1c, 0x76, 0xa2, 0x99, 0xe9, 0x77, 0xbd, 0x29, 0x52, 0xaa, + 0x5f, 0xcb, 0x08, 0x36, 0x1b, 0x93, 0xf8, 0x43, 0x78, 0x2b, 0xf0, 0x2c, 0xca, 0xcc, 0x54, 0xe7, + 0xf9, 0x04, 0x78, 0xca, 0x2f, 0x2a, 0xa8, 0x4a, 0xa4, 0x1c, 0xa5, 0xc6, 0xe7, 0x51, 0xb6, 0x4a, + 0xd5, 0x27, 0x07, 0xea, 0x91, 0xdf, 0xd9, 0x2e, 0x66, 0x3b, 0x54, 0x7f, 0x00, 0x0a, 0x58, 0xba, + 0x99, 0x61, 0x3b, 0x26, 0x86, 0x0d, 0xf7, 0x31, 0xe7, 0x51, 0xb6, 0xe4, 0x34, 0xef, 0xf1, 0x59, + 0x0b, 0xb0, 0xba, 0xd3, 0xbc, 0xa7, 0x01, 0x14, 0x5f, 0x45, 0x48, 0x23, 0x5e, 0xd7, 0xb1, 0xe0, + 0xe1, 0xc5, 0x30, 0x9c, 0xbf, 0xc1, 0x6c, 0xe8, 0x00, 0xb4, 0xde, 0xb0, 0x0d, 0xa2, 0x09, 0x24, + 0xea, 0x4f, 0x84, 0x17, 0x3b, 0x65, 0xd3, 0xbd, 0x7b, 0xd2, 0x85, 0xfb, 0xe8, 0x42, 0x9d, 0x1f, + 0x71, 0xc6, 0x3b, 0xa9, 0x88, 0x06, 0xe7, 0x5b, 0x7a, 0xd3, 0x85, 0x3e, 0xe4, 0x0e, 0x60, 0xeb, + 0x14, 0xa0, 0x31, 0x78, 0xa4, 0x9f, 0xf2, 0xbb, 0xf7, 0xd3, 0x0f, 0x0d, 0x06, 0xa3, 0x6d, 0x99, + 0x78, 0x9b, 0xb6, 0x73, 0xd2, 0x55, 0x7b, 0xed, 0xaa, 0x4b, 0x68, 0xa8, 0xe6, 0x34, 0x84, 0xa3, + 0x0b, 0xd8, 0x0f, 0xb8, 0x4e, 0x83, 0x1d, 0x5b, 0xf8, 0x48, 0x4a, 0x57, 0x76, 0x3d, 0xa0, 0x1b, + 0x0a, 0xe9, 0x0c, 0xd7, 0xe3, 0x74, 0x1c, 0xc9, 0xe9, 0xaa, 0xb6, 0xe3, 0xf1, 0x8e, 0x0b, 0xe8, + 0x3a, 0xb6, 0xe3, 0x69, 0x3e, 0x12, 0x7f, 0x14, 0xa1, 0xd5, 0xd9, 0xea, 0x6d, 0xe2, 0x80, 0xb8, + 0x86, 0x43, 0x07, 0xbe, 0x7b, 0x0c, 0xa4, 0x09, 0x68, 0xbc, 0x8a, 0x86, 0x57, 0x3a, 0xc4, 0x61, + 0x5b, 0x21, 0xf6, 0x94, 0xe2, 0x23, 0x11, 0xd1, 0xf2, 0x7e, 0x9f, 0xe6, 0xff, 0x07, 0xe4, 0x6c, + 0x7d, 0xb1, 0xfd, 0x9f, 0x5a, 0xc8, 0x08, 0xbf, 0x80, 0x72, 0x25, 0x66, 0xe7, 0x8d, 0x00, 0xcb, + 0x40, 0x64, 0xb0, 0x05, 0x65, 0x28, 0xb6, 0x67, 0xd7, 0xe1, 0x6f, 0x8d, 0x93, 0xab, 0x57, 0x50, + 0x21, 0x5a, 0x0d, 0x1e, 0x41, 0x43, 0xb3, 0x2b, 0xcb, 0xcb, 0x73, 0xb3, 0xab, 0x85, 0x01, 0x9c, + 0x47, 0xd9, 0xda, 0xdc, 0x72, 0xb9, 0x90, 0x52, 0x7f, 0x5a, 0x98, 0x41, 0xa8, 0x6a, 0x9d, 0x5c, + 0x0d, 0x1f, 0xea, 0xbe, 0xa5, 0x00, 0xf7, 0xa1, 0x70, 0x62, 0xd0, 0x36, 0x3d, 0x8f, 0x18, 0x7c, + 0x95, 0x80, 0xfb, 0x42, 0xef, 0xbe, 0x16, 0xc3, 0xe3, 0xa7, 0xd0, 0x18, 0xc0, 0xf8, 0x15, 0x21, + 0xdb, 0x1f, 0xf3, 0x02, 0xce, 0x7d, 0x4d, 0x46, 0xaa, 0x5f, 0x0f, 0x6f, 0x87, 0x17, 0x89, 0x7e, + 0x5c, 0x6f, 0x14, 0xdf, 0x27, 0xfd, 0xa5, 0xfe, 0xcf, 0x2c, 0x7b, 0xb7, 0xc1, 0x5e, 0xca, 0x1d, + 0x85, 0x28, 0xc3, 0x23, 0xdd, 0xcc, 0x3e, 0x8e, 0x74, 0x9f, 0x42, 0xb9, 0x25, 0xe2, 0x6d, 0xd8, + 0xbe, 0xb7, 0x16, 0xb8, 0xd5, 0xb5, 0x01, 0x22, 0xba, 0xd5, 0x31, 0x1a, 0x7c, 0x17, 0x61, 0xff, + 0x19, 0x5c, 0xe0, 0x3d, 0xed, 0x1f, 0x21, 0x9f, 0x8b, 0xed, 0x53, 0x6a, 0xf0, 0x06, 0x16, 0x1c, + 0xe3, 0x4f, 0x07, 0xde, 0xd9, 0x82, 0xfb, 0xd4, 0x9f, 0x6d, 0x17, 0x73, 0x8c, 0x46, 0x4b, 0x60, + 0x8b, 0xdf, 0x44, 0xc3, 0x4b, 0xf3, 0x25, 0xfe, 0x24, 0x8e, 0x79, 0x45, 0x3c, 0x12, 0x48, 0xd1, + 0x47, 0x04, 0x22, 0x81, 0x47, 0x32, 0xed, 0x75, 0x3d, 0xfe, 0x22, 0x2e, 0xe4, 0x42, 0xb5, 0x85, + 0x3d, 0xb7, 0xe1, 0xa7, 0x0b, 0x81, 0xb6, 0xc8, 0x8f, 0x70, 0xa2, 0xb2, 0x62, 0xd8, 0x88, 0xb6, + 0xe4, 0x0f, 0x31, 0xba, 0x57, 0xd0, 0x64, 0xa9, 0xd3, 0x69, 0x99, 0xc4, 0x00, 0x7d, 0xd1, 0xba, + 0x2d, 0xe2, 0x72, 0x97, 0x1f, 0x78, 0xc1, 0xa1, 0x33, 0x64, 0x1d, 0x1e, 0x62, 0xd6, 0x9d, 0xae, + 0xec, 0x54, 0x19, 0x2f, 0xab, 0xfe, 0x60, 0x1a, 0x9d, 0x9d, 0x75, 0x88, 0xee, 0x91, 0xa5, 0xf9, + 0x52, 0xa9, 0x0b, 0x8e, 0x6d, 0xad, 0x16, 0xb1, 0x9a, 0x47, 0x33, 0xac, 0x5f, 0x46, 0xe3, 0x41, + 0x03, 0x6a, 0x0d, 0xbb, 0x43, 0xc4, 0xd7, 0x50, 0x0d, 0x1f, 0x53, 0x77, 0x29, 0x4a, 0x8b, 0x90, + 0xe2, 0x9b, 0xe8, 0x54, 0x00, 0x29, 0xb5, 0x5a, 0xf6, 0xa6, 0x46, 0xba, 0x2e, 0xf3, 0x66, 0xcd, + 0x33, 0x6f, 0xd6, 0x90, 0x83, 0x4e, 0xf1, 0x75, 0x87, 0x12, 0x68, 0x49, 0xa5, 0xd4, 0xaf, 0x64, + 0xd0, 0xb9, 0xdb, 0x7a, 0xcb, 0x34, 0x42, 0xd1, 0x68, 0xc4, 0xed, 0xd8, 0x96, 0x4b, 0x8e, 0xd1, + 0x28, 0x95, 0x86, 0x42, 0xf6, 0x81, 0x0c, 0x85, 0x78, 0x17, 0x0d, 0x1e, 0xba, 0x8b, 0x72, 0x07, + 0xea, 0xa2, 0xff, 0x94, 0x42, 0x05, 0xdf, 0x5b, 0x5f, 0x7c, 0xbe, 0x2c, 0xb8, 0x92, 0xc3, 0x11, + 0x62, 0xc4, 0x79, 0x19, 0xf0, 0xb8, 0x86, 0x86, 0xe6, 0xee, 0x77, 0x4c, 0x87, 0xb8, 0x7b, 0xf0, + 0xbc, 0xbe, 0xc0, 0x8f, 0x4b, 0x26, 0x09, 0x2b, 0x12, 0x3b, 0x29, 0x61, 0x60, 0x78, 0x83, 0xc7, + 0xde, 0x2b, 0xcc, 0xf8, 0x6f, 0xb2, 0xd9, 0x1b, 0x3c, 0xfe, 0xae, 0x41, 0x7a, 0x10, 0x19, 0x92, + 0xe2, 0x27, 0x50, 0x66, 0x75, 0x75, 0x91, 0xcf, 0xa4, 0xf0, 0x16, 0xde, 0xf3, 0xc4, 0x47, 0x86, + 0x14, 0xab, 0xfe, 0x5e, 0x1a, 0x21, 0xaa, 0x0a, 0x6c, 0xb8, 0x1e, 0x89, 0x12, 0xce, 0xa0, 0xbc, + 0x2f, 0x70, 0xae, 0x86, 0x81, 0xab, 0x7d, 0xb4, 0x23, 0xa2, 0x75, 0x07, 0xcf, 0x2a, 0x8a, 0xbe, + 0xf7, 0x37, 0xbb, 0x07, 0x80, 0x9d, 0x0d, 0x78, 0x7f, 0xfb, 0x3e, 0xdf, 0x1f, 0x45, 0xc3, 0x7c, + 0xc6, 0xb3, 0xa5, 0xf3, 0xff, 0x86, 0x0f, 0xd4, 0x42, 0x7c, 0x64, 0x6a, 0xcd, 0x1d, 0x62, 0x21, + 0xf6, 0xc5, 0xcb, 0x7a, 0xe5, 0x44, 0xbc, 0x0f, 0x58, 0xbc, 0x5f, 0xe4, 0xe2, 0x65, 0xcf, 0x6e, + 0x8e, 0xad, 0x78, 0x1f, 0xd8, 0xd9, 0xb7, 0xfa, 0x3b, 0x29, 0x84, 0x69, 0xb3, 0xaa, 0xba, 0xeb, + 0x6e, 0xda, 0x8e, 0xc1, 0x3c, 0xca, 0x8f, 0x44, 0x30, 0x0f, 0xee, 0xbe, 0xf2, 0x6b, 0x79, 0x74, + 0x4a, 0x72, 0xfc, 0x3d, 0xe6, 0x93, 0xd5, 0x15, 0x79, 0x34, 0xf5, 0x7b, 0xaa, 0xf2, 0x21, 0xf1, + 0x42, 0x74, 0x50, 0x7a, 0x35, 0x26, 0xdc, 0x84, 0x3e, 0x8d, 0x46, 0xf9, 0x0f, 0xba, 0x42, 0xfb, + 0x37, 0x5d, 0x30, 0x4a, 0x5d, 0x0a, 0xd0, 0x24, 0x34, 0x7e, 0x0e, 0x0d, 0xd3, 0x01, 0xd3, 0x84, + 0xb0, 0x19, 0x43, 0xe1, 0x33, 0x10, 0xc3, 0x07, 0x8a, 0xeb, 0x49, 0x40, 0x29, 0x3c, 0xfe, 0xc9, + 0xef, 0xe1, 0xf1, 0xcf, 0xdb, 0x68, 0xa4, 0x64, 0x59, 0xb6, 0x07, 0x9b, 0x74, 0x97, 0x5f, 0x4d, + 0xf4, 0xb4, 0xca, 0x9f, 0x80, 0x17, 0xed, 0x21, 0x7d, 0xa2, 0x59, 0x2e, 0x32, 0xc4, 0xd7, 0xfc, + 0xa7, 0x2c, 0xc4, 0xe1, 0x5e, 0xe5, 0x70, 0x3d, 0xe3, 0x70, 0x58, 0xfc, 0x25, 0x0b, 0x74, 0xde, + 0x58, 0xd5, 0xb1, 0x3b, 0xb6, 0x4b, 0x0c, 0x26, 0xa8, 0x91, 0x30, 0xde, 0x46, 0x87, 0x23, 0xe0, + 0xf1, 0x99, 0x14, 0xc2, 0x42, 0x2a, 0x82, 0xd7, 0xd1, 0x69, 0xff, 0xa2, 0x38, 0x78, 0xe6, 0x57, + 0x29, 0xbb, 0xca, 0x28, 0x3c, 0x25, 0xc2, 0x51, 0x65, 0xa8, 0x94, 0x67, 0x2e, 0xfa, 0xd7, 0x22, + 0xfe, 0x3b, 0xc1, 0xba, 0x69, 0x88, 0x5d, 0x9d, 0xc8, 0x0f, 0x7f, 0x2b, 0x1a, 0x59, 0xd2, 0xef, + 0x97, 0xbb, 0xfc, 0xec, 0x65, 0x6c, 0xef, 0xb7, 0x2f, 0x6d, 0xfd, 0x7e, 0xdd, 0xe0, 0xe5, 0x22, + 0x36, 0x85, 0xc8, 0x12, 0xd7, 0xd1, 0xd9, 0xaa, 0x63, 0xb7, 0x6d, 0x8f, 0x18, 0x91, 0x17, 0x73, + 0x13, 0xe1, 0x13, 0xdb, 0x0e, 0xa7, 0xa8, 0xf7, 0x79, 0x3a, 0xd7, 0x83, 0x0d, 0x6e, 0xa3, 0x89, + 0x92, 0xeb, 0x76, 0xdb, 0x24, 0xbc, 0xa1, 0x2a, 0xec, 0xfa, 0x19, 0x1f, 0xe1, 0x5e, 0xcb, 0x8f, + 0xea, 0x50, 0x94, 0x5d, 0x50, 0xd5, 0x3d, 0x53, 0xac, 0x11, 0xbe, 0x25, 0xca, 0xfb, 0x8d, 0x6c, + 0x7e, 0xbc, 0x30, 0xa1, 0x9d, 0x8b, 0x37, 0x66, 0xd5, 0xf4, 0x5a, 0x44, 0xfd, 0x95, 0x14, 0x42, + 0xa1, 0x80, 0xf1, 0xd3, 0x72, 0x6c, 0x9e, 0x54, 0x78, 0xd1, 0xc1, 0x43, 0x0e, 0x48, 0xc1, 0x78, + 0xf0, 0x79, 0x94, 0x85, 0x90, 0x12, 0xe9, 0xf0, 0x60, 0xf5, 0xae, 0x69, 0x19, 0x1a, 0x40, 0x29, + 0x56, 0x78, 0x3f, 0x0e, 0x58, 0xb8, 0xd4, 0x67, 0x56, 0x61, 0x19, 0x4d, 0xd4, 0xba, 0x6b, 0x7e, + 0xdd, 0xc2, 0x63, 0x38, 0x88, 0x6c, 0xe1, 0x76, 0xd7, 0x82, 0x17, 0xa4, 0x52, 0xdc, 0x10, 0xb9, + 0x88, 0xfa, 0xb3, 0xa9, 0xc8, 0x2c, 0x78, 0x84, 0x8b, 0xde, 0x87, 0xe2, 0x7e, 0x1a, 0xf1, 0x69, + 0x49, 0xfd, 0x1b, 0x69, 0x34, 0x52, 0xb5, 0x1d, 0x8f, 0xc7, 0xe8, 0x38, 0xde, 0xab, 0x90, 0xb0, + 0x57, 0xca, 0xee, 0x63, 0xaf, 0x74, 0x1e, 0x65, 0x05, 0x17, 0x65, 0x76, 0x2f, 0x62, 0x18, 0x8e, + 0x06, 0x50, 0xf5, 0xdb, 0xd2, 0x08, 0x7d, 0xf2, 0x99, 0x67, 0x1e, 0x62, 0x01, 0xa9, 0x3f, 0x9a, + 0x42, 0x13, 0xfc, 0xa2, 0x4e, 0x88, 0x72, 0x35, 0xe4, 0x5f, 0xb1, 0x8a, 0xe3, 0x92, 0x81, 0x34, + 0x1f, 0x47, 0x97, 0x80, 0xb9, 0xfb, 0xa6, 0x07, 0x77, 0x15, 0x42, 0x98, 0x2b, 0xc2, 0x61, 0xe2, + 0x12, 0xe0, 0xd3, 0xe1, 0xa7, 0xfd, 0x2b, 0xc8, 0x4c, 0xb8, 0xee, 0xd1, 0x02, 0x73, 0x89, 0xd7, + 0x90, 0xea, 0x2f, 0x64, 0x51, 0x76, 0xee, 0x3e, 0x69, 0x1c, 0xf3, 0xae, 0x11, 0x0e, 0x36, 0xb3, + 0x87, 0x3c, 0xd8, 0x3c, 0x88, 0x4f, 0xc5, 0x6b, 0x61, 0x7f, 0xe6, 0xe4, 0xea, 0x23, 0x3d, 0x1f, + 0xad, 0xde, 0xef, 0xe9, 0xe3, 0xe7, 0x92, 0xf3, 0x4f, 0x32, 0x28, 0x53, 0x9b, 0xad, 0x9e, 0xe8, + 0xcd, 0x91, 0xea, 0x4d, 0xff, 0x3b, 0x6b, 0x35, 0xb8, 0x86, 0xca, 0x87, 0x5e, 0xa2, 0x91, 0x1b, + 0xa7, 0x3f, 0xc9, 0xa0, 0xf1, 0xda, 0xfc, 0x6a, 0x55, 0x38, 0x09, 0xbe, 0xc9, 0x3c, 0xf9, 0xc0, + 0xa7, 0x8c, 0x75, 0xe9, 0xf9, 0x98, 0x3d, 0x73, 0xab, 0x62, 0x79, 0xcf, 0x5f, 0xbf, 0xad, 0xb7, + 0xba, 0x04, 0x8e, 0x5e, 0x98, 0xdf, 0xaf, 0x6b, 0xbe, 0x4b, 0xbe, 0x02, 0xaf, 0xf5, 0x7d, 0x06, + 0xf8, 0x65, 0x94, 0xb9, 0xc5, 0x3d, 0x32, 0x7a, 0xf1, 0x79, 0xf6, 0x1a, 0xe3, 0x43, 0x27, 0xc1, + 0x4c, 0xd7, 0x34, 0x80, 0x03, 0x2d, 0x45, 0x0b, 0xdf, 0xe0, 0x0b, 0xf0, 0x9e, 0x0a, 0x37, 0xfd, + 0xc2, 0x37, 0x2a, 0x65, 0x5c, 0x43, 0x23, 0x55, 0xe2, 0xb4, 0x4d, 0xe8, 0x28, 0x7f, 0xce, 0xee, + 0xcf, 0x84, 0xee, 0x54, 0x46, 0x3a, 0x61, 0x21, 0x60, 0x26, 0x72, 0xc1, 0x6f, 0x21, 0xc4, 0x6c, + 0x94, 0x3d, 0x46, 0x4e, 0xbc, 0x00, 0x76, 0x3f, 0x33, 0x2d, 0x13, 0x6c, 0x3c, 0x81, 0x19, 0xbe, + 0x8b, 0x0a, 0x4b, 0xb6, 0x61, 0xae, 0x9b, 0xcc, 0xf5, 0x12, 0x2a, 0xc8, 0xed, 0xee, 0xf0, 0x44, + 0x4d, 0xc9, 0xb6, 0x50, 0x2e, 0xa9, 0x9a, 0x18, 0x63, 0xf5, 0x1f, 0x0d, 0xa2, 0x2c, 0xed, 0xf6, + 0x93, 0xf1, 0x7b, 0x98, 0xf1, 0x5b, 0x42, 0x85, 0x3b, 0xb6, 0x73, 0xd7, 0xb4, 0x9a, 0x81, 0x57, + 0x3c, 0xdf, 0x9b, 0x82, 0x27, 0xcf, 0x26, 0xc3, 0xd5, 0x03, 0x07, 0x7a, 0x2d, 0x46, 0xbe, 0xcb, + 0x08, 0x7e, 0x11, 0xa1, 0x55, 0xdd, 0x69, 0x12, 0x0f, 0x68, 0xf2, 0x61, 0x84, 0x09, 0x0f, 0xa0, + 0xe0, 0x68, 0x2f, 0x46, 0x98, 0x08, 0x89, 0xe9, 0x26, 0x9c, 0xf9, 0x42, 0x0c, 0x83, 0xdf, 0x3d, + 0x6c, 0xc2, 0xc1, 0x17, 0x42, 0x34, 0x02, 0x98, 0x57, 0x44, 0x15, 0x21, 0xe1, 0x7e, 0x09, 0x45, + 0x04, 0x21, 0x4d, 0x0e, 0x3c, 0xa6, 0x5b, 0xc2, 0xf5, 0x92, 0x26, 0xf0, 0xc0, 0xcf, 0x47, 0x2e, + 0xc0, 0xb1, 0xc4, 0xad, 0xe7, 0xfd, 0x77, 0xe8, 0x40, 0x35, 0xba, 0x9b, 0x03, 0x95, 0xfa, 0x85, + 0x34, 0x1a, 0xae, 0x75, 0xd7, 0xdc, 0x2d, 0xd7, 0x23, 0xed, 0x63, 0xae, 0xc6, 0xfe, 0xf6, 0x2a, + 0x9b, 0xb8, 0xbd, 0x7a, 0xc2, 0x17, 0x8a, 0x70, 0xee, 0x18, 0x98, 0x74, 0xbe, 0x38, 0xfe, 0x5e, + 0x1a, 0x15, 0xd8, 0xc5, 0x59, 0xd9, 0x74, 0x1b, 0x0f, 0xc0, 0x99, 0xff, 0xe8, 0xa5, 0x72, 0xb8, + 0xcb, 0xe6, 0x3d, 0x3c, 0x91, 0x50, 0x3f, 0x97, 0x46, 0x23, 0xa5, 0xae, 0xb7, 0x51, 0xf2, 0x40, + 0xb7, 0x1e, 0xca, 0xfd, 0xc9, 0x6f, 0xa4, 0xd0, 0x04, 0x6d, 0xc8, 0xaa, 0x7d, 0x97, 0x58, 0x0f, + 0xe0, 0xe0, 0x51, 0x3c, 0x40, 0x4c, 0x1f, 0xf0, 0x00, 0xd1, 0x97, 0x65, 0x66, 0x7f, 0xb2, 0x84, + 0xe3, 0x72, 0xcd, 0x6e, 0x91, 0xe3, 0xfd, 0x19, 0x0f, 0xf0, 0xb8, 0xdc, 0x17, 0xc8, 0x03, 0xb8, + 0x9e, 0xf9, 0x60, 0x09, 0xe4, 0x01, 0x9c, 0x2d, 0x7d, 0x30, 0x04, 0xf2, 0xb5, 0x14, 0x1a, 0x9e, + 0xb1, 0xbd, 0x63, 0x3e, 0xf0, 0xf9, 0x57, 0x1c, 0x6f, 0x35, 0xf7, 0xbf, 0xe2, 0x78, 0xeb, 0xa6, + 0xfa, 0xc3, 0x69, 0x74, 0x9a, 0x47, 0xc5, 0xe6, 0xe7, 0x0f, 0x27, 0xd3, 0x31, 0x1f, 0x6c, 0x71, + 0xd1, 0x9c, 0xcc, 0x43, 0x5c, 0x34, 0x3f, 0x99, 0x41, 0xa7, 0x21, 0xfe, 0x28, 0xdd, 0x96, 0x7d, + 0x00, 0x6c, 0x11, 0xdc, 0x90, 0x2f, 0x41, 0x97, 0x12, 0x2e, 0x41, 0xff, 0x6c, 0xbb, 0xf8, 0x7c, + 0xd3, 0xf4, 0x36, 0xba, 0x6b, 0xd3, 0x0d, 0xbb, 0x7d, 0xb5, 0xe9, 0xe8, 0xf7, 0x4c, 0x76, 0xfd, + 0xa7, 0xb7, 0xae, 0x06, 0x09, 0x26, 0xf4, 0x8e, 0xc9, 0x53, 0x4f, 0xd4, 0x60, 0xaf, 0x43, 0xb9, + 0xfa, 0xd7, 0xa7, 0x2e, 0x42, 0x6f, 0xd8, 0xa6, 0xc5, 0x7d, 0x0a, 0x99, 0xa1, 0x5b, 0xa3, 0xfb, + 0xc3, 0x77, 0x6c, 0xd3, 0xaa, 0x47, 0x1d, 0x0b, 0xf7, 0x5b, 0x5f, 0xc8, 0x5a, 0x13, 0xaa, 0x51, + 0xff, 0x65, 0x0a, 0x3d, 0x22, 0x6b, 0xf1, 0x07, 0xc1, 0x76, 0xfc, 0x91, 0x34, 0x3a, 0x73, 0x03, + 0x84, 0x13, 0x38, 0x72, 0x9c, 0xcc, 0x5b, 0x7c, 0x70, 0x26, 0xc8, 0xe6, 0xc4, 0xa2, 0xec, 0x2d, + 0x9b, 0x93, 0x49, 0x9d, 0xcb, 0xe6, 0x37, 0x53, 0xe8, 0xd4, 0x4a, 0xa5, 0x3c, 0xfb, 0x01, 0x19, + 0x51, 0xf1, 0xef, 0x39, 0xe6, 0x06, 0x67, 0xec, 0x7b, 0x8e, 0xb9, 0xe9, 0x49, 0xbf, 0xa7, 0x56, + 0x5a, 0x5a, 0xfc, 0x20, 0xe9, 0x9b, 0xf4, 0x3d, 0x1f, 0x00, 0x7d, 0x93, 0xbe, 0xe7, 0x98, 0xeb, + 0xdb, 0xaf, 0xe7, 0xd0, 0xc8, 0xcd, 0xee, 0x1a, 0xe1, 0x2e, 0x21, 0x0f, 0xf5, 0x79, 0xeb, 0x35, + 0x34, 0xc2, 0xc5, 0x00, 0x77, 0x15, 0x42, 0xc8, 0x3a, 0x1e, 0x82, 0x84, 0x45, 0x05, 0x12, 0x89, + 0xf0, 0x79, 0x94, 0xbd, 0x4d, 0x9c, 0x35, 0xf1, 0x35, 0xe7, 0x3d, 0xe2, 0xac, 0x69, 0x00, 0xc5, + 0x8b, 0xa1, 0xa3, 0x7a, 0xa9, 0x5a, 0x81, 0x9c, 0x23, 0xfc, 0x9a, 0x04, 0x92, 0xa8, 0x04, 0xde, + 0x66, 0x7a, 0xc7, 0x64, 0xd9, 0x4a, 0xc4, 0x97, 0xe4, 0xd1, 0x92, 0x78, 0x19, 0x4d, 0x8a, 0xee, + 0x46, 0x2c, 0xe1, 0x46, 0x3e, 0x81, 0x5d, 0x52, 0xaa, 0x8d, 0x78, 0x51, 0xfc, 0x1a, 0x1a, 0xf5, + 0x81, 0xe0, 0x38, 0x35, 0x1c, 0x46, 0x79, 0x0f, 0x58, 0x45, 0x32, 0xf1, 0x48, 0x05, 0x44, 0x06, + 0x70, 0xf8, 0x8f, 0x12, 0x18, 0x44, 0x1c, 0xd1, 0xa4, 0x02, 0xf8, 0x39, 0x60, 0x00, 0x8f, 0x2b, + 0xc0, 0x45, 0x64, 0x04, 0x9e, 0x3a, 0x82, 0x23, 0xbc, 0xc3, 0xe1, 0xec, 0x41, 0xab, 0x44, 0x86, + 0x57, 0x10, 0x0a, 0xaf, 0xf2, 0x79, 0xd8, 0x80, 0x7d, 0x3b, 0x19, 0x08, 0x2c, 0xc4, 0x4b, 0xb8, + 0xb1, 0x83, 0x5c, 0xc2, 0xa9, 0xbf, 0x9d, 0x46, 0x23, 0xa5, 0x4e, 0x27, 0x18, 0x0a, 0x4f, 0xa3, + 0x5c, 0xa9, 0xd3, 0xb9, 0xa5, 0x55, 0xc4, 0xa8, 0xdf, 0x7a, 0xa7, 0x53, 0xef, 0x3a, 0xa6, 0xe8, + 0x89, 0xc9, 0x88, 0xf0, 0x2c, 0x1a, 0x2b, 0x75, 0x3a, 0xd5, 0xee, 0x5a, 0xcb, 0x6c, 0x08, 0x49, + 0x84, 0x58, 0xae, 0xb2, 0x4e, 0xa7, 0xde, 0x01, 0x4c, 0x34, 0x0b, 0x94, 0x5c, 0x06, 0xbf, 0x0d, + 0xc1, 0x76, 0x78, 0x0e, 0x1b, 0x96, 0x25, 0x43, 0x0d, 0xe2, 0x7d, 0x87, 0x6d, 0x9b, 0x0e, 0x88, + 0x58, 0x5c, 0xf4, 0xf3, 0x7e, 0x74, 0x79, 0x5a, 0x51, 0x2c, 0x57, 0x4d, 0xc8, 0x12, 0x7f, 0x0c, + 0x0d, 0x95, 0x3a, 0x1d, 0xe1, 0x96, 0x07, 0x5c, 0x79, 0x68, 0xa9, 0x48, 0x1f, 0xfb, 0x64, 0x53, + 0xaf, 0xa0, 0x71, 0xb9, 0xb2, 0x7d, 0xc5, 0x55, 0xff, 0xd3, 0x14, 0x7c, 0xd0, 0x31, 0xf7, 0x24, + 0x7e, 0x16, 0x65, 0x4a, 0x9d, 0x0e, 0x9f, 0x8f, 0x4e, 0x25, 0xf4, 0x47, 0xf4, 0xe1, 0x71, 0xa9, + 0xd3, 0xf1, 0x3f, 0xfd, 0x98, 0x3f, 0x49, 0x38, 0xd0, 0xa7, 0x7f, 0x8d, 0x7d, 0xfa, 0xf1, 0x7e, + 0x2e, 0xa0, 0xfe, 0x42, 0x06, 0x4d, 0x94, 0x3a, 0x9d, 0x93, 0xd0, 0xee, 0x0f, 0xea, 0x79, 0xf3, + 0x33, 0x08, 0x09, 0xd3, 0xe3, 0x50, 0xf0, 0x60, 0x6a, 0x44, 0x98, 0x1a, 0x95, 0x94, 0x26, 0x10, + 0xf9, 0xea, 0x97, 0xdf, 0x97, 0xfa, 0x7d, 0x2e, 0x03, 0x53, 0xf1, 0x71, 0x0f, 0xd5, 0xf4, 0x7e, + 0xe9, 0x36, 0xde, 0x07, 0xb9, 0x7d, 0xf5, 0xc1, 0xaf, 0x49, 0x83, 0x07, 0x42, 0x85, 0x9f, 0xf4, + 0xc2, 0xe0, 0xa1, 0xcc, 0xe2, 0x71, 0x51, 0x98, 0x3c, 0x7e, 0x8c, 0x9f, 0x73, 0x88, 0x47, 0x33, + 0x6a, 0x50, 0x54, 0xdd, 0x34, 0xb4, 0x08, 0xad, 0xdf, 0x87, 0x43, 0xfb, 0xea, 0xc3, 0xed, 0x34, + 0xbc, 0x58, 0x0e, 0xa2, 0x21, 0x1d, 0x7e, 0x77, 0x71, 0x15, 0x21, 0x76, 0xdf, 0x1f, 0x38, 0x13, + 0x8f, 0xb1, 0xc0, 0x27, 0x2c, 0x15, 0x11, 0x0f, 0x7c, 0x12, 0x92, 0x04, 0x7e, 0x49, 0x99, 0x44, + 0xbf, 0xa4, 0x2b, 0x28, 0xaf, 0xe9, 0x9b, 0x6f, 0x76, 0x89, 0xb3, 0xc5, 0xcd, 0x19, 0x16, 0x6c, + 0x50, 0xdf, 0xac, 0x7f, 0x96, 0x02, 0xb5, 0x00, 0x8d, 0xd5, 0xe0, 0xc9, 0xbb, 0xe0, 0x87, 0xc1, + 0x4e, 0xa6, 0x83, 0x87, 0xee, 0x07, 0x51, 0x74, 0xfc, 0x12, 0xca, 0x94, 0xee, 0xd4, 0xb8, 0x64, + 0x83, 0xae, 0x2d, 0xdd, 0xa9, 0x71, 0x79, 0xf5, 0x2c, 0x7b, 0xa7, 0xa6, 0x7e, 0x2e, 0x8d, 0x70, + 0x9c, 0x12, 0x3f, 0x8f, 0x86, 0x01, 0xda, 0xa4, 0x3a, 0x23, 0xe6, 0xb0, 0xdc, 0x74, 0xeb, 0x0e, + 0x40, 0x25, 0xe3, 0xce, 0x27, 0xc5, 0x2f, 0x42, 0xaa, 0x5d, 0x9e, 0x45, 0x4d, 0xca, 0x61, 0xb9, + 0xe9, 0xfa, 0xc9, 0x69, 0x23, 0x99, 0x76, 0x39, 0x31, 0xd8, 0x85, 0x77, 0x6a, 0x0b, 0xb6, 0xeb, + 0x71, 0x51, 0x33, 0xbb, 0x70, 0xd3, 0x85, 0xc4, 0xa7, 0x92, 0x5d, 0xc8, 0xc8, 0x20, 0x01, 0xd4, + 0x9d, 0x1a, 0x7b, 0x1c, 0x62, 0x68, 0x76, 0xcb, 0x37, 0x28, 0x59, 0x02, 0xa8, 0x4d, 0xb7, 0xce, + 0x1e, 0x96, 0x18, 0x90, 0xe3, 0x57, 0x4a, 0x00, 0x25, 0x95, 0x52, 0xbf, 0x2f, 0x8f, 0x0a, 0x65, + 0xdd, 0xd3, 0xd7, 0x74, 0x97, 0x08, 0xbb, 0xe9, 0x09, 0x1f, 0xe6, 0x7f, 0x8e, 0x20, 0x07, 0x63, + 0x2d, 0xe1, 0x6b, 0xa2, 0x05, 0xf0, 0xcb, 0x21, 0xdf, 0x20, 0x3d, 0xa7, 0x98, 0xef, 0x6b, 0xad, + 0xde, 0xe1, 0x60, 0x2d, 0x46, 0x88, 0x9f, 0x42, 0x23, 0x3e, 0x8c, 0x6e, 0x00, 0x32, 0xa1, 0xce, + 0x18, 0x6b, 0xd4, 0xfe, 0xd7, 0x44, 0x34, 0x7e, 0x11, 0x8d, 0xfa, 0x3f, 0x05, 0xd3, 0x9a, 0x25, + 0x2f, 0x5b, 0x8b, 0xed, 0x9e, 0x44, 0x52, 0xb1, 0x28, 0xcc, 0x6f, 0x83, 0x52, 0xd1, 0x48, 0x7e, + 0x30, 0x89, 0x14, 0x7f, 0x16, 0x8d, 0xfb, 0xbf, 0xf9, 0x86, 0x81, 0xa5, 0x52, 0x7b, 0x2a, 0x48, + 0x21, 0x1c, 0x11, 0xeb, 0xb4, 0x4c, 0xce, 0xb6, 0x0e, 0x8f, 0xfa, 0x29, 0xaf, 0x8c, 0xb5, 0xf8, + 0xce, 0x21, 0x52, 0x01, 0xae, 0xa0, 0x49, 0x1f, 0x12, 0x6a, 0xe8, 0x50, 0xb8, 0x63, 0x34, 0xd6, + 0xea, 0x89, 0x4a, 0x1a, 0x2f, 0x85, 0x5b, 0xe8, 0xbc, 0x04, 0x34, 0xdc, 0x0d, 0x73, 0xdd, 0xe3, + 0xdb, 0x3d, 0x1e, 0xf9, 0x97, 0xe7, 0x38, 0x0c, 0xb8, 0x32, 0x1a, 0x3f, 0x59, 0xa9, 0x9c, 0x48, + 0xa9, 0x2f, 0x37, 0x5c, 0x43, 0xa7, 0x7d, 0xfc, 0x8d, 0xd9, 0x6a, 0xd5, 0xb1, 0xdf, 0x21, 0x0d, + 0xaf, 0x52, 0xe6, 0xdb, 0x65, 0x88, 0x08, 0x67, 0xac, 0xd5, 0x9b, 0x8d, 0x0e, 0x55, 0x0a, 0x8a, + 0x93, 0x99, 0x27, 0x16, 0xc6, 0xb7, 0xd1, 0x19, 0x01, 0x5e, 0xb1, 0x5c, 0x4f, 0xb7, 0x1a, 0xa4, + 0x52, 0xe6, 0x7b, 0x68, 0xd8, 0xcf, 0x73, 0xae, 0x26, 0x47, 0xca, 0x6c, 0x93, 0x8b, 0xe3, 0x57, + 0xd0, 0x98, 0x8f, 0x60, 0x77, 0x77, 0x23, 0x70, 0x77, 0x07, 0x43, 0xd2, 0x58, 0xab, 0x47, 0xdf, + 0x30, 0xca, 0xc4, 0xa2, 0x46, 0x41, 0x06, 0xf7, 0x51, 0x49, 0xa3, 0xbc, 0xad, 0x4e, 0xa2, 0x32, + 0x42, 0x56, 0xf7, 0xd7, 0x42, 0x8d, 0x5a, 0x71, 0xcc, 0xa6, 0xc9, 0x76, 0xd2, 0xfe, 0xb3, 0xc5, + 0xb5, 0xba, 0x0d, 0xc0, 0x24, 0xfd, 0x60, 0xe4, 0x53, 0x25, 0x74, 0x2a, 0x41, 0xc7, 0xf6, 0xb5, + 0x63, 0xfc, 0x42, 0x3a, 0x6c, 0xc4, 0x31, 0xdf, 0x36, 0xce, 0xa0, 0xbc, 0xff, 0x25, 0xdc, 0x78, + 0x50, 0x7a, 0x0d, 0xcd, 0x28, 0x0f, 0x1f, 0x2f, 0x89, 0xe3, 0x98, 0x6f, 0x25, 0x1f, 0x84, 0x38, + 0xde, 0x4b, 0x85, 0xe2, 0x38, 0xe6, 0xdb, 0xcb, 0xdf, 0xcc, 0x84, 0x73, 0xd2, 0xc9, 0x1e, 0xf3, + 0x41, 0x99, 0xc9, 0xa1, 0xf7, 0x69, 0x6e, 0x1f, 0xcf, 0x07, 0x45, 0xd5, 0x1c, 0x3a, 0xa0, 0x6a, + 0xfe, 0x6e, 0xbc, 0x3f, 0x99, 0xe9, 0x79, 0x2c, 0xfb, 0xf3, 0x01, 0x0c, 0x56, 0x7c, 0x2d, 0x5c, + 0xc7, 0x98, 0x8d, 0x3e, 0x28, 0x04, 0xd6, 0x5b, 0xe3, 0x26, 0xba, 0x4c, 0x82, 0x3f, 0x8d, 0xce, + 0x49, 0x80, 0xaa, 0xee, 0xe8, 0x6d, 0xe2, 0x85, 0xc9, 0xf9, 0x20, 0x54, 0x92, 0x5f, 0xba, 0xde, + 0x09, 0xd0, 0x62, 0xc2, 0xbf, 0x1e, 0x1c, 0x04, 0xe5, 0x18, 0xda, 0x87, 0x6b, 0xf2, 0xbf, 0xc9, + 0x22, 0x25, 0x30, 0x10, 0x83, 0x47, 0x38, 0x47, 0x38, 0x19, 0xbf, 0x2f, 0x3a, 0xd7, 0x44, 0x93, + 0xa1, 0x30, 0x6a, 0xdd, 0x76, 0x5b, 0x87, 0x0e, 0xa6, 0x06, 0x68, 0x31, 0xca, 0x2c, 0x24, 0x64, + 0x36, 0xe7, 0x14, 0xb7, 0x39, 0x71, 0xf8, 0xc8, 0xa9, 0xee, 0x32, 0x16, 0x5a, 0x9c, 0x2b, 0xfe, + 0x62, 0x0a, 0x9d, 0x2e, 0xad, 0xaf, 0x93, 0x86, 0x47, 0x8c, 0x95, 0x35, 0x6a, 0x7c, 0xcd, 0xda, + 0x5d, 0xcb, 0xf3, 0xed, 0xdd, 0x97, 0x7a, 0x57, 0xc7, 0x3a, 0x69, 0x3a, 0xa9, 0x30, 0x6b, 0x49, + 0x10, 0x34, 0x40, 0xe7, 0x24, 0x75, 0x1b, 0x68, 0xea, 0x0d, 0x20, 0xd2, 0x12, 0xeb, 0x9d, 0xba, + 0x81, 0x1e, 0xe9, 0xc9, 0x72, 0x37, 0x63, 0x67, 0x50, 0x34, 0x76, 0xfe, 0x75, 0x2a, 0x54, 0xf7, + 0x88, 0x90, 0xf0, 0x34, 0x42, 0x21, 0x88, 0x6f, 0x7f, 0xc6, 0x77, 0xb6, 0x8b, 0x28, 0x14, 0x9a, + 0x26, 0x50, 0xe0, 0x15, 0x94, 0xe3, 0x62, 0x61, 0xe9, 0x56, 0x3f, 0xba, 0x4b, 0x2f, 0x4c, 0x8b, + 0x72, 0x80, 0xad, 0x0d, 0xff, 0x66, 0xce, 0x66, 0xea, 0x45, 0x34, 0x72, 0xd0, 0xef, 0xfa, 0x62, + 0x06, 0x61, 0x71, 0xaf, 0x72, 0x84, 0x86, 0xdc, 0xfb, 0x62, 0xb0, 0x1c, 0x2c, 0xf3, 0xca, 0x65, + 0x94, 0xa7, 0x9f, 0x00, 0xb9, 0x0c, 0x84, 0xd8, 0xa5, 0x5d, 0x0e, 0xd3, 0x02, 0x6c, 0x18, 0x38, + 0x68, 0x28, 0x39, 0x70, 0x90, 0xfa, 0x03, 0x19, 0x74, 0x56, 0xec, 0x90, 0x32, 0x81, 0x70, 0xe8, + 0x27, 0x9d, 0xf2, 0x4d, 0xec, 0x14, 0x15, 0xe5, 0x98, 0x89, 0xca, 0xe3, 0xd2, 0xb3, 0xe3, 0x03, + 0x80, 0x68, 0x1c, 0xa3, 0xfe, 0x87, 0x34, 0x1a, 0xab, 0xda, 0xae, 0xd7, 0x74, 0x88, 0x5b, 0xd5, + 0x1d, 0xf7, 0x21, 0xee, 0x8e, 0x8f, 0xa3, 0x31, 0x08, 0xfd, 0xd2, 0x26, 0x16, 0x0b, 0x8f, 0x32, + 0x28, 0x24, 0x92, 0xf0, 0x11, 0x3c, 0x67, 0x90, 0x44, 0x48, 0xb5, 0x9f, 0xd9, 0x17, 0x42, 0x40, + 0x1e, 0x66, 0x5c, 0x30, 0xb8, 0xfa, 0x37, 0x33, 0x68, 0xd4, 0x97, 0xf2, 0x8c, 0x79, 0x5c, 0xef, + 0x03, 0x8e, 0x56, 0xc8, 0x57, 0x11, 0xaa, 0xda, 0x8e, 0xa7, 0xb7, 0x96, 0x43, 0xcd, 0x87, 0x83, + 0xb4, 0x0e, 0x40, 0x59, 0x19, 0x81, 0x04, 0xd6, 0xaf, 0xd0, 0x78, 0x63, 0x13, 0x13, 0x5b, 0xbf, + 0x02, 0xa8, 0x26, 0x50, 0xa8, 0xbf, 0x9c, 0x46, 0x13, 0x7e, 0x27, 0xcd, 0xdd, 0x27, 0x8d, 0xee, + 0xc3, 0x3c, 0x37, 0xc9, 0xd2, 0x1e, 0xdc, 0x55, 0xda, 0xea, 0x7f, 0x11, 0x26, 0x92, 0xd9, 0x96, + 0x7d, 0x32, 0x91, 0xfc, 0x79, 0xe8, 0xb8, 0xfa, 0x1d, 0x19, 0x74, 0xda, 0x97, 0xfa, 0x7c, 0xd7, + 0x82, 0x2d, 0xe8, 0xac, 0xde, 0x6a, 0x3d, 0xcc, 0x7b, 0xbe, 0x11, 0x5f, 0x10, 0x2b, 0x3c, 0x96, + 0x1a, 0xcf, 0xdf, 0xb6, 0xce, 0xc1, 0x75, 0xdb, 0x34, 0x34, 0x91, 0x08, 0xbf, 0x86, 0x46, 0xfd, + 0x9f, 0x25, 0xa7, 0xe9, 0x6f, 0xf4, 0xe0, 0x40, 0x39, 0x28, 0xa4, 0x3b, 0xd2, 0x93, 0x71, 0xa9, + 0x80, 0xfa, 0x1f, 0x73, 0x68, 0xea, 0x8e, 0x69, 0x19, 0xf6, 0xa6, 0xeb, 0xa7, 0xff, 0x3b, 0xf6, + 0x07, 0x2a, 0x47, 0x9d, 0xf6, 0xef, 0x4d, 0x74, 0x26, 0x2a, 0x52, 0x27, 0x08, 0xca, 0xcc, 0x7b, + 0x67, 0x93, 0x11, 0xd4, 0xfd, 0x44, 0x80, 0xfc, 0x56, 0x46, 0x4b, 0x2e, 0x19, 0xcd, 0x24, 0x38, + 0xb4, 0x97, 0x4c, 0x82, 0x4f, 0xa2, 0x5c, 0xd9, 0x6e, 0xeb, 0xa6, 0x1f, 0x3c, 0x04, 0x46, 0x71, + 0x50, 0x2f, 0x60, 0x34, 0x4e, 0x41, 0xf9, 0xf3, 0x8a, 0xa1, 0xcb, 0x86, 0x43, 0xfe, 0x7e, 0x01, + 0x6a, 0xa5, 0x69, 0x22, 0x11, 0xb6, 0xd1, 0x18, 0xaf, 0x8e, 0xdf, 0xa1, 0x20, 0xd8, 0x3c, 0x3d, + 0xe7, 0xcb, 0xa8, 0xb7, 0x5a, 0x4d, 0x4b, 0xe5, 0xd8, 0x36, 0x8a, 0x25, 0x38, 0xe4, 0x1f, 0xc3, + 0x6e, 0x53, 0x34, 0x99, 0xbf, 0x20, 0x04, 0x98, 0x64, 0x46, 0xe2, 0x42, 0x80, 0x59, 0x46, 0x24, + 0xc2, 0x73, 0x68, 0x12, 0x42, 0xe7, 0x06, 0x5b, 0x29, 0xaa, 0x12, 0xa3, 0x60, 0x54, 0xc2, 0xd1, + 0x3c, 0x8b, 0xb6, 0x4b, 0x3f, 0xae, 0xde, 0xe0, 0x68, 0x2d, 0x5e, 0x62, 0xea, 0x75, 0x84, 0xe3, + 0x6d, 0xde, 0xd7, 0xe1, 0xfc, 0xf7, 0xa5, 0xc3, 0x7d, 0xdd, 0x71, 0x77, 0xaf, 0x78, 0x10, 0xc7, + 0xd1, 0x3f, 0x93, 0x42, 0x93, 0xb1, 0x50, 0xcc, 0xf8, 0x59, 0x84, 0x18, 0x44, 0x08, 0x79, 0x07, + 0x31, 0x24, 0xc2, 0xf0, 0xcc, 0x7c, 0x29, 0x09, 0xc9, 0xf0, 0x55, 0x94, 0x67, 0xbf, 0x78, 0x98, + 0x9a, 0x78, 0x91, 0x6e, 0xd7, 0x34, 0xb4, 0x80, 0x28, 0xac, 0x05, 0x6e, 0x79, 0x32, 0x89, 0x45, + 0xbc, 0xad, 0x4e, 0x50, 0x0b, 0x25, 0xa3, 0x1d, 0x38, 0x1a, 0x34, 0xb8, 0x64, 0x1c, 0x55, 0xd7, + 0xe5, 0x78, 0x54, 0xeb, 0xcc, 0x6e, 0x51, 0xad, 0x23, 0x73, 0x13, 0x0f, 0x63, 0xfd, 0xe0, 0x9e, + 0x86, 0x7c, 0x29, 0x8d, 0x26, 0x82, 0x5a, 0x8f, 0xf0, 0x42, 0xe1, 0x7d, 0x24, 0x92, 0x2f, 0xa6, + 0x90, 0x32, 0x63, 0xb6, 0x5a, 0xa6, 0xd5, 0xac, 0x58, 0xeb, 0xb6, 0xd3, 0x86, 0xc9, 0xe3, 0xe8, + 0x8e, 0x3b, 0xd5, 0xef, 0x4e, 0xa1, 0x49, 0xde, 0xa0, 0x59, 0xdd, 0x31, 0x8e, 0xee, 0x2c, 0x29, + 0xda, 0x92, 0xa3, 0xd3, 0x17, 0xf5, 0xff, 0xa4, 0x10, 0x5a, 0xb4, 0x1b, 0x77, 0x8f, 0xf9, 0xdb, + 0xc0, 0x17, 0x51, 0x8e, 0xc5, 0x0a, 0xe2, 0x1a, 0x3b, 0x39, 0xcd, 0x9e, 0x7c, 0xd2, 0x4f, 0x63, + 0x88, 0x99, 0x71, 0x7e, 0x42, 0x9b, 0x63, 0xb1, 0x86, 0x34, 0x5e, 0x40, 0xfd, 0x75, 0x2e, 0x81, + 0x63, 0xfe, 0x76, 0xe3, 0x7b, 0x53, 0xe8, 0xb4, 0x46, 0x1a, 0xf6, 0x3d, 0xe2, 0x6c, 0xcd, 0xda, + 0x06, 0xb9, 0x41, 0x2c, 0xe2, 0x1c, 0x95, 0x7e, 0xff, 0x43, 0x08, 0xca, 0x1f, 0x36, 0xe6, 0x96, + 0x4b, 0x8c, 0xe3, 0x93, 0x30, 0x41, 0xfd, 0xfb, 0x43, 0x48, 0x49, 0xb4, 0xd7, 0x8e, 0xad, 0x8d, + 0xd2, 0xd3, 0x08, 0xcf, 0x3e, 0x28, 0x23, 0x7c, 0x70, 0x7f, 0x46, 0x78, 0x6e, 0xbf, 0x46, 0xf8, + 0xd0, 0x5e, 0x8c, 0xf0, 0x76, 0xd4, 0x08, 0xcf, 0x83, 0x11, 0xfe, 0x6c, 0x5f, 0x23, 0x7c, 0xce, + 0x32, 0x0e, 0x68, 0x82, 0x1f, 0xdb, 0x64, 0x9e, 0x07, 0xd9, 0x3b, 0x5c, 0xa6, 0x93, 0x5b, 0xc3, + 0x76, 0x0c, 0x62, 0xf0, 0x2d, 0x03, 0x9c, 0x57, 0x3b, 0x1c, 0xa6, 0x05, 0xd8, 0x58, 0x66, 0xd4, + 0xb1, 0xbd, 0x64, 0x46, 0x7d, 0x00, 0x9b, 0x8a, 0x2f, 0xa4, 0xd1, 0xe4, 0x2c, 0x71, 0x3c, 0x16, + 0x1a, 0xf0, 0x41, 0x38, 0xfd, 0x94, 0xd0, 0x84, 0xc0, 0x10, 0xec, 0xe3, 0x74, 0xe8, 0xc8, 0xd4, + 0x20, 0x8e, 0x17, 0xf5, 0x83, 0x8a, 0xd2, 0xd3, 0xea, 0xfd, 0xec, 0x44, 0x7c, 0xec, 0x06, 0xd5, + 0xfb, 0x70, 0x26, 0x48, 0x93, 0xff, 0xd2, 0x02, 0x7a, 0x21, 0xe1, 0x50, 0x76, 0xff, 0x09, 0x87, + 0xd4, 0x9f, 0x4e, 0xa1, 0x4b, 0x1a, 0xb1, 0xc8, 0xa6, 0xbe, 0xd6, 0x22, 0x42, 0xb3, 0xf8, 0xca, + 0x40, 0x67, 0x0d, 0xd3, 0x6d, 0xeb, 0x5e, 0x63, 0xe3, 0x50, 0x32, 0x9a, 0x47, 0xa3, 0xe2, 0xfc, + 0xb5, 0x8f, 0xb9, 0x4d, 0x2a, 0xa7, 0xfe, 0x44, 0x06, 0x0d, 0xcd, 0xd8, 0xde, 0x1b, 0xf6, 0x21, + 0x33, 0x60, 0x85, 0x53, 0x7e, 0x7a, 0x1f, 0xa7, 0x14, 0x1f, 0x83, 0xca, 0x85, 0xa0, 0xe0, 0xe0, + 0x24, 0xb7, 0x66, 0xc7, 0x82, 0xa7, 0xfb, 0x64, 0xfb, 0xcc, 0x7d, 0xf5, 0x3c, 0x1a, 0x86, 0xa8, + 0x12, 0xc2, 0x39, 0x22, 0xb8, 0xa0, 0x7a, 0x14, 0x18, 0xad, 0x23, 0x24, 0xc5, 0x9f, 0x96, 0x62, + 0x19, 0xe6, 0x0e, 0x9f, 0x2b, 0x4b, 0x0c, 0x6b, 0xf8, 0x2c, 0xbb, 0x82, 0x82, 0x36, 0x09, 0x79, + 0x05, 0x60, 0xff, 0x1f, 0x69, 0x52, 0x40, 0xa8, 0xfe, 0x54, 0x16, 0x8d, 0xfa, 0x3e, 0x86, 0x47, + 0xd4, 0x59, 0x4f, 0xa3, 0xdc, 0x82, 0x2d, 0xc4, 0x32, 0x07, 0x9f, 0xc4, 0x0d, 0xdb, 0x8d, 0x38, + 0x5b, 0x72, 0x22, 0xfa, 0x99, 0xcb, 0xb6, 0x21, 0x7a, 0xd4, 0xc2, 0x67, 0x5a, 0xb6, 0x11, 0x7b, + 0x91, 0x18, 0x10, 0xe2, 0x4b, 0x28, 0x0b, 0xce, 0xc8, 0xc2, 0x99, 0x6f, 0xc4, 0x01, 0x19, 0xf0, + 0x82, 0x1a, 0xe4, 0xf6, 0xab, 0x06, 0x43, 0x07, 0x55, 0x83, 0xfc, 0x83, 0x55, 0x83, 0xb7, 0xd0, + 0x28, 0xd4, 0xe4, 0xa7, 0x42, 0xda, 0x7d, 0x25, 0x7b, 0x84, 0x2f, 0x36, 0x63, 0xac, 0xdd, 0x3c, + 0x21, 0x12, 0xac, 0x31, 0x12, 0x2b, 0xf5, 0x77, 0x53, 0x68, 0xe8, 0x96, 0x75, 0xd7, 0xb2, 0x37, + 0x0f, 0xa7, 0x27, 0xcf, 0xa2, 0x11, 0xce, 0x46, 0x98, 0x84, 0xe1, 0x69, 0x68, 0x97, 0x81, 0xeb, + 0xc0, 0x49, 0x13, 0xa9, 0xf0, 0x2b, 0x41, 0x21, 0x78, 0x25, 0x90, 0x09, 0x63, 0xf8, 0xfb, 0x85, + 0x1a, 0x72, 0xd8, 0x71, 0x91, 0x1c, 0x9f, 0x47, 0xd9, 0x32, 0x6d, 0xaa, 0x10, 0xc4, 0x92, 0x36, + 0x45, 0x03, 0xa8, 0xfa, 0x07, 0x19, 0x34, 0x1e, 0x39, 0xad, 0x79, 0x12, 0x0d, 0xf3, 0xd3, 0x12, + 0xd3, 0x8f, 0x83, 0x0e, 0xaf, 0x08, 0x02, 0xa0, 0x96, 0x67, 0x7f, 0x56, 0x0c, 0xfc, 0x09, 0x34, + 0x64, 0xbb, 0xb0, 0x76, 0xc0, 0xb7, 0x8c, 0x87, 0x8a, 0xbf, 0x52, 0xa3, 0x6d, 0x67, 0x2a, 0xcd, + 0x49, 0x44, 0x3d, 0xb2, 0x5d, 0xf8, 0xb4, 0xeb, 0x68, 0x58, 0x77, 0x5d, 0xe2, 0xd5, 0x3d, 0xbd, + 0x29, 0x86, 0x46, 0x0f, 0x80, 0xa2, 0x4e, 0x03, 0x70, 0x55, 0x6f, 0xe2, 0xd7, 0xd1, 0x58, 0xc3, + 0x21, 0xb0, 0xba, 0xe8, 0x2d, 0xda, 0x4a, 0xc1, 0xfa, 0x93, 0x10, 0xe2, 0x01, 0x79, 0x88, 0xa8, + 0x18, 0xf8, 0x36, 0x1a, 0xe3, 0x9f, 0xc3, 0x5c, 0x78, 0x61, 0x78, 0x8c, 0x87, 0xb3, 0x3d, 0x13, + 0x09, 0x73, 0xe2, 0xe5, 0x9e, 0xdc, 0x22, 0xb9, 0xc8, 0xd7, 0x10, 0x48, 0xf1, 0x0a, 0xc2, 0x9b, + 0x64, 0xad, 0xae, 0x77, 0xbd, 0x0d, 0x5a, 0x17, 0x8b, 0xec, 0xcb, 0x33, 0x82, 0x81, 0xfb, 0x73, + 0x1c, 0x2b, 0x7a, 0x85, 0x6f, 0x92, 0xb5, 0x92, 0x84, 0xc4, 0x33, 0x68, 0x9c, 0x16, 0xf1, 0x8d, + 0x21, 0xd3, 0xe0, 0xa3, 0x0d, 0x72, 0x87, 0xc8, 0x18, 0xb1, 0x51, 0x9b, 0x64, 0x8d, 0x5b, 0x85, + 0x15, 0x43, 0xfd, 0x7a, 0x8a, 0x9a, 0x49, 0xb4, 0x95, 0x90, 0xe7, 0x94, 0x2a, 0x70, 0x7b, 0x9f, + 0x0a, 0xdc, 0x0e, 0x33, 0x92, 0xe5, 0xdc, 0x3e, 0x13, 0x9d, 0xc6, 0xb1, 0x78, 0x1a, 0xe5, 0x0c, + 0xf1, 0xfc, 0xe6, 0xac, 0x2c, 0x59, 0xbf, 0x1e, 0x8d, 0x53, 0xe1, 0xcb, 0x28, 0x4b, 0xa7, 0x6b, + 0x6e, 0x20, 0x24, 0xae, 0xba, 0x1a, 0x50, 0xa8, 0xdf, 0x96, 0x46, 0xa3, 0xc2, 0xd7, 0x5c, 0x3b, + 0xd4, 0xe7, 0xbc, 0xb4, 0xb7, 0x66, 0xfa, 0xae, 0x0a, 0xb0, 0x8f, 0xf0, 0x9b, 0x7c, 0x3d, 0x10, + 0xc5, 0x9e, 0xae, 0x11, 0xb8, 0x60, 0x9e, 0xe7, 0x1f, 0x9a, 0xdb, 0xfb, 0xd6, 0x89, 0xd2, 0xbf, + 0x91, 0xcd, 0xa7, 0x0b, 0x99, 0x37, 0xb2, 0xf9, 0x6c, 0x61, 0x50, 0xfd, 0x17, 0x9f, 0x46, 0x83, + 0x2b, 0x16, 0x59, 0x59, 0xc7, 0xcf, 0x08, 0xf9, 0x36, 0xf9, 0xc7, 0x4f, 0x8a, 0x2c, 0x01, 0xb1, + 0x30, 0xa0, 0x09, 0x59, 0x39, 0xaf, 0x8b, 0x89, 0xd7, 0x78, 0x2f, 0x62, 0xb1, 0x0c, 0xc3, 0x2c, + 0x0c, 0x68, 0x62, 0x82, 0xb6, 0xeb, 0x62, 0xc2, 0x2b, 0x2e, 0x2c, 0xa9, 0x14, 0xc3, 0xf8, 0xa5, + 0xf8, 0x21, 0xc4, 0x62, 0x52, 0x56, 0xa8, 0xe8, 0x61, 0x5c, 0x9c, 0x62, 0x61, 0x40, 0x4b, 0xce, + 0x26, 0x35, 0x2a, 0xde, 0x37, 0x70, 0xb1, 0x9f, 0x8e, 0x6c, 0x21, 0x01, 0xb7, 0x30, 0xa0, 0x49, + 0xb4, 0xf8, 0x85, 0x20, 0x2b, 0x2f, 0x5d, 0xeb, 0xa3, 0x4f, 0x9a, 0x04, 0xd4, 0xc2, 0x80, 0x26, + 0x52, 0x0a, 0x95, 0x56, 0x1d, 0x33, 0x48, 0x99, 0x19, 0xad, 0x14, 0x70, 0x42, 0xa5, 0xf0, 0x1b, + 0xbf, 0x8a, 0xc6, 0x82, 0xb7, 0x62, 0xef, 0x90, 0x86, 0xc7, 0x17, 0xbc, 0x33, 0x91, 0xc2, 0x0c, + 0xb9, 0x30, 0xa0, 0xc9, 0xd4, 0xf8, 0x32, 0xca, 0x69, 0xc4, 0x35, 0xdf, 0xf5, 0xf7, 0x64, 0xe3, + 0xc2, 0x21, 0x8c, 0xf9, 0x2e, 0x95, 0x12, 0xc7, 0xd3, 0xde, 0x09, 0x37, 0x81, 0x7c, 0x93, 0x85, + 0x23, 0xb5, 0xcc, 0x59, 0x06, 0xed, 0x1d, 0xe1, 0x04, 0xe0, 0xf5, 0x68, 0xc6, 0x7a, 0xd8, 0x40, + 0x49, 0xae, 0xca, 0x22, 0x76, 0x61, 0x40, 0x8b, 0x66, 0xb8, 0x7f, 0x41, 0xca, 0x96, 0xce, 0x83, + 0x16, 0x44, 0xa5, 0x4a, 0x51, 0x82, 0x54, 0x21, 0xaf, 0xfa, 0xeb, 0xd1, 0xf4, 0xdd, 0x3c, 0x44, + 0xc1, 0xd9, 0xe4, 0x24, 0xcf, 0x42, 0xd5, 0x7e, 0xba, 0xef, 0x17, 0xa4, 0x34, 0xcb, 0xca, 0x78, + 0x72, 0xd5, 0xba, 0xa7, 0x8b, 0x55, 0xb3, 0x21, 0x2f, 0x25, 0xfc, 0x85, 0xa4, 0x43, 0xf1, 0x0e, + 0x05, 0x9c, 0xd0, 0xa1, 0x2c, 0x39, 0xf0, 0x0b, 0x52, 0x62, 0x19, 0x9e, 0x55, 0x28, 0xa8, 0x54, + 0x40, 0xd1, 0x4a, 0xc5, 0x14, 0x34, 0xd7, 0xc5, 0x7c, 0x2b, 0xca, 0xa4, 0xdc, 0x41, 0x21, 0x86, + 0x76, 0x90, 0x90, 0x97, 0xa5, 0x08, 0xb9, 0x1c, 0x14, 0x0c, 0xe4, 0x23, 0x41, 0x0b, 0x67, 0xab, + 0x0b, 0x03, 0x1a, 0x64, 0x79, 0x50, 0x59, 0x96, 0x10, 0xe5, 0x14, 0x50, 0x8c, 0x06, 0xe9, 0xac, + 0xef, 0x93, 0xc6, 0xc2, 0x80, 0xc6, 0x32, 0x88, 0x3c, 0x23, 0xc4, 0xe3, 0x56, 0x4e, 0xcb, 0x53, + 0x44, 0x80, 0xa0, 0x53, 0x44, 0x18, 0xb5, 0x7b, 0x3e, 0x1e, 0xb3, 0x5a, 0x39, 0x23, 0x9f, 0x03, + 0x46, 0xf1, 0x0b, 0x03, 0x5a, 0x3c, 0xce, 0xf5, 0x0b, 0x52, 0x18, 0x67, 0xe5, 0x6c, 0xe4, 0x1d, + 0x61, 0x88, 0xa2, 0xe2, 0x12, 0x03, 0x3e, 0xaf, 0x24, 0x26, 0x5e, 0x53, 0xce, 0x01, 0x83, 0x47, + 0x03, 0x06, 0x71, 0x92, 0x85, 0x01, 0x2d, 0x31, 0x65, 0xdb, 0x6c, 0x2c, 0x98, 0xb2, 0xa2, 0xc8, + 0x07, 0x50, 0x11, 0xf4, 0xc2, 0x80, 0x16, 0x0b, 0xbf, 0x7c, 0x5d, 0x8c, 0x62, 0xac, 0x3c, 0x22, + 0x77, 0x62, 0x88, 0xa1, 0x9d, 0x28, 0x44, 0x3b, 0xbe, 0x2e, 0x46, 0xb6, 0x55, 0xa6, 0xe2, 0xa5, + 0xc2, 0x99, 0x53, 0x88, 0x80, 0xab, 0x25, 0x07, 0xeb, 0x54, 0x1e, 0xe5, 0xe9, 0x12, 0x78, 0xf9, + 0x24, 0x9a, 0x85, 0x01, 0x2d, 0x39, 0xd0, 0xa7, 0x96, 0x1c, 0xe5, 0x52, 0x39, 0xdf, 0x8f, 0x67, + 0xd0, 0xba, 0xe4, 0x08, 0x99, 0x7a, 0x9f, 0x98, 0x83, 0xca, 0x05, 0x39, 0x88, 0x49, 0x4f, 0xc2, + 0x85, 0x01, 0xad, 0x4f, 0xe4, 0xc2, 0x5b, 0x3d, 0x02, 0x00, 0x2a, 0x17, 0xe5, 0x6c, 0x29, 0x89, + 0x44, 0x0b, 0x03, 0x5a, 0x8f, 0xf0, 0x81, 0xb7, 0x7a, 0xc4, 0x87, 0x53, 0x8a, 0x7d, 0xd9, 0x06, + 0xf2, 0xe8, 0x11, 0x5d, 0x6e, 0x25, 0x31, 0xb4, 0x9a, 0xf2, 0x98, 0xac, 0xba, 0x09, 0x24, 0x54, + 0x75, 0x93, 0x82, 0xb2, 0xad, 0x24, 0xc6, 0x02, 0x53, 0x1e, 0xef, 0xc3, 0x30, 0x68, 0x63, 0x62, + 0x14, 0xb1, 0x95, 0xc4, 0x60, 0x5c, 0x8a, 0x2a, 0x33, 0x4c, 0x20, 0xa1, 0x0c, 0x93, 0xc2, 0x78, + 0xad, 0x24, 0x46, 0x8f, 0x52, 0x9e, 0xe8, 0xc3, 0x30, 0x6c, 0x61, 0x52, 0xdc, 0xa9, 0x17, 0xa4, + 0xf0, 0x4d, 0xca, 0x87, 0xe4, 0x79, 0x43, 0x40, 0xd1, 0x79, 0x43, 0x0c, 0xf4, 0x34, 0x1b, 0x0b, + 0x50, 0xa1, 0x7c, 0x58, 0x1e, 0xe6, 0x11, 0x34, 0x1d, 0xe6, 0xd1, 0x90, 0x16, 0xb3, 0xb1, 0x87, + 0xfa, 0xca, 0xa5, 0x5e, 0x4c, 0x00, 0x2d, 0x33, 0x61, 0x4f, 0xfb, 0x2b, 0x09, 0x2f, 0xc5, 0x95, + 0x8f, 0xc8, 0x57, 0x99, 0x31, 0x82, 0x85, 0x01, 0x2d, 0xe1, 0x7d, 0xb9, 0x96, 0xfc, 0x2c, 0x4a, + 0xb9, 0x2c, 0x0f, 0xdb, 0x24, 0x1a, 0x3a, 0x6c, 0x13, 0x9f, 0x54, 0x2d, 0x26, 0xb9, 0x2d, 0x28, + 0x57, 0x64, 0xc3, 0x2c, 0x4e, 0x41, 0x0d, 0xb3, 0x04, 0x77, 0x07, 0x2d, 0xf9, 0xa1, 0x8f, 0xf2, + 0x64, 0xdf, 0x16, 0x02, 0x4d, 0x42, 0x0b, 0xd9, 0xbb, 0x97, 0xd0, 0x76, 0xba, 0xd5, 0x69, 0xd9, + 0xba, 0xa1, 0x7c, 0x34, 0xd1, 0x76, 0x62, 0x48, 0xc1, 0x76, 0x62, 0x00, 0xba, 0xca, 0x8b, 0xd7, + 0xfa, 0xca, 0x53, 0xf2, 0x2a, 0x2f, 0xe2, 0xe8, 0x2a, 0x2f, 0xb9, 0x00, 0xcc, 0xc6, 0xae, 0xc0, + 0x95, 0xa7, 0x65, 0x05, 0x88, 0xa0, 0xa9, 0x02, 0x44, 0x2f, 0xcd, 0xdf, 0xee, 0x7d, 0x69, 0xac, + 0x4c, 0x03, 0xb7, 0xc7, 0x7c, 0x6e, 0xbd, 0xe8, 0x16, 0x06, 0xb4, 0xde, 0x17, 0xcf, 0x95, 0x84, + 0x3b, 0x60, 0xe5, 0xaa, 0xac, 0x60, 0x31, 0x02, 0xaa, 0x60, 0xf1, 0x9b, 0xe3, 0x4a, 0xc2, 0x25, + 0xae, 0xf2, 0xb1, 0x9e, 0xac, 0x82, 0x6f, 0x4e, 0xb8, 0xfa, 0xbd, 0x2e, 0xde, 0xc2, 0x2a, 0xcf, + 0xc8, 0x8b, 0x5d, 0x88, 0xa1, 0x8b, 0x9d, 0x70, 0x5b, 0x7b, 0x5d, 0xbc, 0xb9, 0x54, 0xae, 0xc5, + 0x4b, 0x85, 0x4b, 0xa4, 0x70, 0xc3, 0xa9, 0x25, 0x5f, 0x14, 0x2a, 0xcf, 0xca, 0x5a, 0x97, 0x44, + 0x43, 0xb5, 0x2e, 0xf1, 0x92, 0x71, 0x3e, 0x7e, 0xdf, 0xa7, 0x5c, 0x8f, 0xde, 0x80, 0xca, 0x78, + 0x6a, 0xf9, 0xc4, 0xee, 0x08, 0x5f, 0x8f, 0xbe, 0xd9, 0x55, 0x9e, 0x8b, 0xec, 0x2f, 0x25, 0x2c, + 0xb5, 0x6f, 0x23, 0x6f, 0x7c, 0x5f, 0x8f, 0x3e, 0x73, 0x55, 0x9e, 0x4f, 0xe6, 0x10, 0xe8, 0x4a, + 0xf4, 0x59, 0xec, 0xeb, 0xd1, 0x97, 0xa1, 0xca, 0x0b, 0xc9, 0x1c, 0x02, 0xe9, 0x46, 0x5f, 0x92, + 0x3e, 0x23, 0xc4, 0xaa, 0x52, 0x3e, 0x2e, 0x9b, 0x8e, 0x01, 0x82, 0x9a, 0x8e, 0x61, 0x44, 0xab, + 0x67, 0x84, 0x18, 0x4f, 0xca, 0x8b, 0xb1, 0x22, 0x41, 0x63, 0x85, 0x48, 0x50, 0xcf, 0x08, 0xb1, + 0x91, 0x94, 0x97, 0x62, 0x45, 0x82, 0xd6, 0x09, 0x11, 0x94, 0x8c, 0x7e, 0xee, 0x8d, 0xca, 0xcb, + 0xc0, 0x43, 0xdd, 0xdd, 0x63, 0x6d, 0x61, 0x40, 0xeb, 0xe7, 0x26, 0xf9, 0x76, 0xef, 0xdb, 0x53, + 0xe5, 0x15, 0x79, 0x08, 0xf7, 0xa2, 0xa3, 0x43, 0xb8, 0xe7, 0x0d, 0xec, 0xab, 0x91, 0xa7, 0x0e, + 0xca, 0xab, 0xf2, 0x14, 0x27, 0x21, 0xe9, 0x14, 0x17, 0x7d, 0x18, 0x21, 0xf9, 0xf0, 0x2b, 0x9f, + 0x90, 0xa7, 0x38, 0x11, 0x47, 0xa7, 0x38, 0xc9, 0xdf, 0x7f, 0x36, 0xe6, 0x5a, 0xae, 0xbc, 0x26, + 0x4f, 0x71, 0x11, 0x34, 0x9d, 0xe2, 0xa2, 0xce, 0xe8, 0xaf, 0x46, 0x3c, 0xac, 0x95, 0xd7, 0x93, + 0xdb, 0x0f, 0x48, 0xb1, 0xfd, 0xcc, 0x1f, 0x5b, 0x4b, 0x76, 0x15, 0x56, 0x4a, 0xf2, 0xf8, 0x4d, + 0xa2, 0xa1, 0xe3, 0x37, 0xd1, 0xcd, 0x78, 0x25, 0x31, 0x57, 0xa9, 0x32, 0xd3, 0x67, 0xe3, 0x10, + 0x9a, 0x22, 0x49, 0x59, 0x4e, 0xc5, 0x3d, 0x32, 0xdb, 0x08, 0xcd, 0xf6, 0xd8, 0x23, 0xfb, 0xdb, + 0xa0, 0x08, 0x3d, 0x9d, 0x5d, 0x63, 0x97, 0x79, 0x4a, 0x59, 0x9e, 0x5d, 0x63, 0x04, 0x74, 0x76, + 0x8d, 0x5f, 0x01, 0xce, 0xa3, 0x02, 0xd7, 0x22, 0x76, 0x47, 0x69, 0x5a, 0x4d, 0x65, 0x2e, 0xe2, + 0xa9, 0x17, 0xc1, 0xd3, 0xd9, 0x29, 0x0a, 0x83, 0xf5, 0x9a, 0xc1, 0x66, 0x5b, 0x66, 0x67, 0xcd, + 0xd6, 0x1d, 0xa3, 0x46, 0x2c, 0x43, 0x99, 0x8f, 0xac, 0xd7, 0x09, 0x34, 0xb0, 0x5e, 0x27, 0xc0, + 0xe1, 0x9d, 0x6a, 0x04, 0xae, 0x91, 0x06, 0x31, 0xef, 0x11, 0xe5, 0x06, 0xb0, 0x2d, 0xf6, 0x62, + 0xcb, 0xc9, 0x16, 0x06, 0xb4, 0x5e, 0x1c, 0xa8, 0xad, 0xbe, 0xb4, 0x55, 0x7b, 0x73, 0x31, 0xf0, + 0x4e, 0xaf, 0x3a, 0xa4, 0xa3, 0x3b, 0x44, 0x59, 0x90, 0x6d, 0xf5, 0x44, 0x22, 0x6a, 0xab, 0x27, + 0x22, 0xe2, 0x6c, 0xfd, 0xb1, 0x50, 0xe9, 0xc7, 0x36, 0x1c, 0x11, 0xc9, 0xa5, 0xe9, 0xec, 0x24, + 0x23, 0xa8, 0x80, 0x16, 0x6d, 0xab, 0x09, 0x27, 0x15, 0x6f, 0xc8, 0xb3, 0x53, 0x6f, 0x4a, 0x3a, + 0x3b, 0xf5, 0xc6, 0x52, 0x55, 0x97, 0xb1, 0x6c, 0x0c, 0xde, 0x94, 0x55, 0x3d, 0x81, 0x84, 0xaa, + 0x7a, 0x02, 0x38, 0xce, 0x50, 0x23, 0x2e, 0xf1, 0x94, 0xc5, 0x7e, 0x0c, 0x81, 0x24, 0xce, 0x10, + 0xc0, 0x71, 0x86, 0xf3, 0xc4, 0x6b, 0x6c, 0x28, 0x4b, 0xfd, 0x18, 0x02, 0x49, 0x9c, 0x21, 0x80, + 0xe9, 0x66, 0x53, 0x06, 0xcf, 0x74, 0x5b, 0x77, 0xfd, 0x3e, 0x5b, 0x96, 0x37, 0x9b, 0x3d, 0x09, + 0xe9, 0x66, 0xb3, 0x27, 0x12, 0x7f, 0xcf, 0x9e, 0x2f, 0x9b, 0x95, 0x15, 0xa8, 0x70, 0x3a, 0xb4, + 0x0b, 0xf6, 0x52, 0x6a, 0x61, 0x40, 0xdb, 0xeb, 0x65, 0xf6, 0x47, 0x83, 0x2b, 0x27, 0xa5, 0x0a, + 0x55, 0x4d, 0x04, 0x67, 0x15, 0x0c, 0xbc, 0x30, 0xa0, 0x05, 0x97, 0x52, 0x2f, 0xa0, 0x11, 0xf8, + 0xa8, 0x8a, 0x65, 0x7a, 0xe5, 0x19, 0xe5, 0x4d, 0x79, 0xcb, 0x24, 0xa0, 0xe8, 0x96, 0x49, 0xf8, + 0x49, 0x27, 0x71, 0xf8, 0xc9, 0xa6, 0x98, 0xf2, 0x8c, 0xa2, 0xc9, 0x93, 0xb8, 0x84, 0xa4, 0x93, + 0xb8, 0x04, 0x08, 0xea, 0x2d, 0x3b, 0x76, 0xa7, 0x3c, 0xa3, 0xd4, 0x12, 0xea, 0x65, 0xa8, 0xa0, + 0x5e, 0xf6, 0x33, 0xa8, 0xb7, 0xb6, 0xd1, 0xf5, 0xca, 0xf4, 0x1b, 0x57, 0x13, 0xea, 0xf5, 0x91, + 0x41, 0xbd, 0x3e, 0x80, 0x4e, 0x85, 0x00, 0xa8, 0x3a, 0x36, 0x9d, 0xb4, 0x6f, 0x9a, 0xad, 0x96, + 0x72, 0x4b, 0x9e, 0x0a, 0xa3, 0x78, 0x3a, 0x15, 0x46, 0x61, 0xd4, 0xf4, 0x64, 0xad, 0x22, 0x6b, + 0xdd, 0xa6, 0x72, 0x5b, 0x36, 0x3d, 0x43, 0x0c, 0x35, 0x3d, 0xc3, 0x5f, 0xb0, 0xbb, 0xa0, 0xbf, + 0x34, 0xb2, 0xee, 0x10, 0x77, 0x43, 0xb9, 0x13, 0xd9, 0x5d, 0x08, 0x38, 0xd8, 0x5d, 0x08, 0xbf, + 0x71, 0x13, 0x3d, 0x2a, 0x2d, 0x34, 0xbe, 0xc7, 0x5c, 0x8d, 0xe8, 0x4e, 0x63, 0x43, 0xf9, 0x24, + 0xb0, 0x7a, 0x22, 0x71, 0xa9, 0x92, 0x49, 0x17, 0x06, 0xb4, 0x7e, 0x9c, 0x60, 0x5b, 0xfe, 0xe6, + 0x22, 0x0b, 0x28, 0xa1, 0x55, 0x67, 0xfd, 0x4d, 0xe8, 0x5b, 0x91, 0x6d, 0x79, 0x9c, 0x04, 0xb6, + 0xe5, 0x71, 0x30, 0xee, 0xa0, 0x8b, 0x91, 0xad, 0xda, 0x92, 0xde, 0xa2, 0xfb, 0x12, 0x62, 0x54, + 0xf5, 0xc6, 0x5d, 0xe2, 0x29, 0x9f, 0x02, 0xde, 0x97, 0x7a, 0x6c, 0xf8, 0x22, 0xd4, 0x0b, 0x03, + 0xda, 0x2e, 0xfc, 0xb0, 0xca, 0xb2, 0x61, 0x2a, 0x9f, 0x96, 0xcf, 0x37, 0x29, 0x6c, 0x61, 0x40, + 0x63, 0x99, 0x32, 0xdf, 0x46, 0xca, 0xad, 0x4e, 0xd3, 0xd1, 0x0d, 0xc2, 0x0c, 0x2d, 0xb0, 0xdd, + 0xb8, 0x01, 0xfa, 0x2d, 0xb2, 0x95, 0xd6, 0x8b, 0x8e, 0x5a, 0x69, 0xbd, 0x70, 0x54, 0x51, 0xa5, + 0xd8, 0x89, 0xca, 0x67, 0x64, 0x45, 0x95, 0x90, 0x54, 0x51, 0xe5, 0x48, 0x8b, 0x9f, 0x44, 0x67, + 0x83, 0xfd, 0x3c, 0x5f, 0x7f, 0x59, 0xa7, 0x29, 0x6f, 0x03, 0x9f, 0x8b, 0xb1, 0xcb, 0x00, 0x89, + 0x6a, 0x61, 0x40, 0xeb, 0x51, 0x9e, 0xae, 0xb8, 0xb1, 0xb0, 0xc0, 0xdc, 0xbc, 0xf8, 0x56, 0x79, + 0xc5, 0xed, 0x41, 0x46, 0x57, 0xdc, 0x1e, 0xa8, 0x44, 0xe6, 0x5c, 0xa8, 0xfa, 0x2e, 0xcc, 0x03, + 0x99, 0xf6, 0xe2, 0x90, 0xc8, 0x9c, 0x5b, 0x6a, 0x6b, 0xbb, 0x30, 0x0f, 0xac, 0xb5, 0x5e, 0x1c, + 0xf0, 0x65, 0x94, 0xab, 0xd5, 0x96, 0xb4, 0xae, 0xa5, 0x34, 0x22, 0xd7, 0x72, 0x00, 0x5d, 0x18, + 0xd0, 0x38, 0x9e, 0x9a, 0x41, 0x73, 0x2d, 0xdd, 0xf5, 0xcc, 0x86, 0x0b, 0x23, 0xc6, 0x1f, 0x21, + 0x86, 0x6c, 0x06, 0x25, 0xd1, 0x50, 0x33, 0x28, 0x09, 0x4e, 0xed, 0xc5, 0x59, 0xdd, 0x75, 0x75, + 0xcb, 0x70, 0xf4, 0x19, 0x58, 0x26, 0x48, 0xc4, 0xe5, 0x49, 0xc2, 0x52, 0x7b, 0x51, 0x86, 0xc0, + 0xe1, 0xbb, 0x0f, 0xf1, 0xcd, 0x9c, 0xf5, 0xc8, 0xe1, 0x7b, 0x04, 0x0f, 0x87, 0xef, 0x11, 0x18, + 0xd8, 0x9d, 0x3e, 0x4c, 0x23, 0x4d, 0x13, 0x72, 0x57, 0x37, 0x23, 0x76, 0x67, 0x94, 0x00, 0xec, + 0xce, 0x28, 0x50, 0x6a, 0x92, 0xbf, 0xdc, 0x6e, 0xf4, 0x68, 0x52, 0xb8, 0xca, 0xc6, 0xca, 0xd0, + 0xf5, 0x3b, 0x1c, 0x1c, 0xe5, 0x2d, 0x4b, 0x6f, 0xdb, 0xe5, 0x19, 0x5f, 0xea, 0xa6, 0xbc, 0x7e, + 0xf7, 0x24, 0xa4, 0xeb, 0x77, 0x4f, 0x24, 0x9d, 0x5d, 0xfd, 0x8d, 0xd6, 0x86, 0xee, 0x10, 0x23, + 0xc8, 0xe8, 0xca, 0xb6, 0x86, 0xef, 0xc8, 0xb3, 0x6b, 0x1f, 0x52, 0x3a, 0xbb, 0xf6, 0x41, 0x53, + 0x23, 0x2f, 0x19, 0xad, 0x11, 0xdd, 0x50, 0xee, 0xca, 0x46, 0x5e, 0x6f, 0x4a, 0x6a, 0xe4, 0xf5, + 0xc6, 0xf6, 0xfe, 0x9c, 0x3b, 0x8e, 0xe9, 0x11, 0xa5, 0xb5, 0x97, 0xcf, 0x01, 0xd2, 0xde, 0x9f, + 0x03, 0x68, 0xba, 0x21, 0x8c, 0x76, 0x48, 0x5b, 0xde, 0x10, 0xc6, 0xbb, 0x21, 0x5a, 0x82, 0x5a, + 0x2c, 0xdc, 0xf3, 0x4d, 0xb1, 0x64, 0x8b, 0x85, 0x83, 0xa9, 0xc5, 0x12, 0xfa, 0xc6, 0x49, 0xee, + 0x57, 0x8a, 0x2d, 0xaf, 0xa1, 0x22, 0x8e, 0xae, 0xa1, 0x92, 0xab, 0xd6, 0x0b, 0x92, 0x43, 0x83, + 0xd2, 0x91, 0xad, 0x0e, 0x01, 0x45, 0xad, 0x0e, 0xd1, 0xf5, 0x61, 0x16, 0x4d, 0xc0, 0x2d, 0xb8, + 0xd6, 0x0d, 0xee, 0x71, 0x3e, 0x2b, 0x7f, 0x66, 0x04, 0x4d, 0x3f, 0x33, 0x02, 0x92, 0x98, 0xf0, + 0x69, 0xcb, 0xe9, 0xc1, 0x24, 0x3c, 0x1f, 0x8c, 0x80, 0xf0, 0x22, 0xc2, 0xb5, 0xd2, 0xd2, 0x62, + 0xc5, 0xa8, 0x8a, 0x57, 0x64, 0xae, 0x7c, 0x02, 0x1b, 0xa7, 0x58, 0x18, 0xd0, 0x12, 0xca, 0xe1, + 0x77, 0xd0, 0x79, 0x0e, 0xe5, 0x6e, 0xcd, 0x90, 0xb3, 0xcb, 0x08, 0x16, 0x04, 0x0f, 0xf8, 0x7e, + 0x28, 0xc2, 0x37, 0x91, 0x76, 0x61, 0x40, 0xeb, 0xcb, 0xab, 0x77, 0x5d, 0x7c, 0x7d, 0xe8, 0xee, + 0xa5, 0xae, 0x60, 0x91, 0xe8, 0xcb, 0xab, 0x77, 0x5d, 0x5c, 0xee, 0xf7, 0xf6, 0x52, 0x57, 0xd0, + 0x09, 0x7d, 0x79, 0x61, 0x17, 0x15, 0xfb, 0xe1, 0x4b, 0xad, 0x96, 0xb2, 0x09, 0xd5, 0x7d, 0x64, + 0x2f, 0xd5, 0x95, 0xc0, 0xe0, 0xdc, 0x8d, 0x23, 0x9d, 0xa5, 0x57, 0x3a, 0xc4, 0xaa, 0x49, 0x0b, + 0xd0, 0x7d, 0x79, 0x96, 0x8e, 0x11, 0xd0, 0x59, 0x3a, 0x06, 0xa4, 0x03, 0x4a, 0xf4, 0x8b, 0x51, + 0xb6, 0xe4, 0x01, 0x25, 0xe2, 0xe8, 0x80, 0x92, 0x7c, 0x68, 0x56, 0xd0, 0xa9, 0x95, 0xbb, 0x9e, + 0xee, 0x5b, 0x90, 0x2e, 0xef, 0xca, 0x77, 0x23, 0x97, 0x4c, 0x71, 0x12, 0xb8, 0x64, 0x8a, 0x83, + 0xe9, 0x18, 0xa1, 0xe0, 0xda, 0x96, 0xd5, 0x98, 0xd7, 0xcd, 0x56, 0xd7, 0x21, 0xca, 0xff, 0x23, + 0x8f, 0x91, 0x08, 0x9a, 0x8e, 0x91, 0x08, 0x88, 0x2e, 0xd0, 0x14, 0x54, 0x72, 0x5d, 0xb3, 0x69, + 0xf1, 0x7d, 0x65, 0xb7, 0xe5, 0x29, 0xff, 0xaf, 0xbc, 0x40, 0x27, 0xd1, 0xd0, 0x05, 0x3a, 0x09, + 0x0e, 0xa7, 0x4e, 0x09, 0xf9, 0xec, 0x94, 0xff, 0x2f, 0x72, 0xea, 0x94, 0x40, 0x03, 0xa7, 0x4e, + 0x49, 0xb9, 0xf0, 0xe6, 0x51, 0x81, 0xd9, 0x64, 0x8b, 0x66, 0x70, 0x57, 0xfd, 0xff, 0xcb, 0xeb, + 0x63, 0x14, 0x4f, 0xd7, 0xc7, 0x28, 0x4c, 0xe6, 0xc3, 0xbb, 0xe0, 0x2f, 0xf4, 0xe2, 0x13, 0xc8, + 0x3f, 0x56, 0x06, 0xdf, 0x10, 0xf9, 0xf0, 0x91, 0xf2, 0x6d, 0xa9, 0x5e, 0x8c, 0x82, 0xe1, 0x11, + 0x2b, 0x24, 0x33, 0xd2, 0xc8, 0x3d, 0x93, 0x6c, 0x2a, 0x9f, 0xeb, 0xc9, 0x88, 0x11, 0xc8, 0x8c, + 0x18, 0x0c, 0xbf, 0x85, 0xce, 0x86, 0xb0, 0x25, 0xd2, 0x5e, 0x0b, 0x66, 0xa6, 0x6f, 0x4f, 0xc9, + 0x66, 0x70, 0x32, 0x19, 0x35, 0x83, 0x93, 0x31, 0x49, 0xac, 0xb9, 0xe8, 0xfe, 0xe2, 0x2e, 0xac, + 0x03, 0x09, 0xf6, 0x60, 0x90, 0xc4, 0x9a, 0x4b, 0xf3, 0x3b, 0x76, 0x61, 0x1d, 0xc8, 0xb4, 0x07, + 0x03, 0xfc, 0xf9, 0x14, 0xba, 0x94, 0x8c, 0x2a, 0xb5, 0x5a, 0xf3, 0xb6, 0x13, 0xe2, 0x94, 0xef, + 0x4c, 0xc9, 0x07, 0x0d, 0x7b, 0x2b, 0xb6, 0x30, 0xa0, 0xed, 0xb1, 0x02, 0xfc, 0x09, 0x34, 0x56, + 0xea, 0x1a, 0xa6, 0x07, 0x17, 0x6f, 0xd4, 0x70, 0xfe, 0xae, 0x54, 0x64, 0x8b, 0x23, 0x62, 0x61, + 0x8b, 0x23, 0x02, 0xf0, 0x1b, 0x68, 0xb2, 0x46, 0x1a, 0x5d, 0xc7, 0xf4, 0xb6, 0x34, 0xc8, 0x55, + 0x48, 0x79, 0x7c, 0x77, 0x4a, 0x9e, 0xc4, 0x62, 0x14, 0x74, 0x12, 0x8b, 0x01, 0xf1, 0xed, 0x1e, + 0x19, 0xed, 0x94, 0xef, 0x49, 0xf5, 0xbd, 0x96, 0x0f, 0xfa, 0xb2, 0x47, 0x42, 0xbc, 0x6a, 0x62, + 0x86, 0x30, 0xe5, 0xf3, 0xa9, 0x3e, 0xd7, 0xe8, 0xc2, 0x0c, 0x97, 0x90, 0x5c, 0xac, 0x9a, 0x98, + 0x03, 0x4a, 0xf9, 0xde, 0x54, 0x9f, 0x6b, 0xef, 0x90, 0x63, 0x52, 0xfa, 0xa8, 0xe7, 0xc4, 0xa4, + 0xd0, 0xca, 0x5f, 0x4a, 0xc5, 0x5d, 0x45, 0x82, 0xf2, 0x62, 0xf6, 0xe8, 0xe7, 0x98, 0x6b, 0x1e, + 0x2f, 0xf6, 0x85, 0x54, 0xdc, 0x37, 0x2f, 0x2c, 0x16, 0xfe, 0xc2, 0x04, 0x4d, 0xcd, 0xdd, 0xf7, + 0x88, 0x63, 0xe9, 0x2d, 0xe8, 0xce, 0x9a, 0x67, 0x3b, 0x7a, 0x93, 0xcc, 0x59, 0xfa, 0x5a, 0x8b, + 0x28, 0xdf, 0x97, 0x92, 0x2d, 0xd8, 0xde, 0xa4, 0xd4, 0x82, 0xed, 0x8d, 0xc5, 0x1b, 0xe8, 0xd1, + 0x24, 0x6c, 0xd9, 0x74, 0xa1, 0x9e, 0x2f, 0xa6, 0x64, 0x13, 0xb6, 0x0f, 0x2d, 0x35, 0x61, 0xfb, + 0xa0, 0xf1, 0x35, 0x21, 0x63, 0xb2, 0xf2, 0x97, 0x23, 0xce, 0x90, 0x01, 0x66, 0x61, 0x40, 0x13, + 0x12, 0x2b, 0x5f, 0x13, 0x32, 0xfb, 0x2a, 0x5f, 0x8a, 0x97, 0x09, 0x2f, 0x9f, 0xc2, 0x04, 0xc0, + 0xd7, 0x84, 0x9c, 0xc6, 0xca, 0x5f, 0x89, 0x97, 0x09, 0xef, 0xb8, 0xc2, 0xd4, 0xc7, 0x6f, 0xa1, + 0xb3, 0xac, 0xc6, 0xa5, 0xf9, 0x12, 0xb5, 0xdb, 0x66, 0x37, 0xf4, 0x56, 0x8b, 0x58, 0x4d, 0xa2, + 0x7c, 0x39, 0x32, 0x93, 0x24, 0x93, 0xd1, 0x99, 0x24, 0x19, 0x83, 0xbf, 0x05, 0x9d, 0xbb, 0xad, + 0xb7, 0x4c, 0x23, 0xc4, 0xf9, 0x69, 0x85, 0x94, 0xef, 0x4f, 0xc9, 0xbb, 0xe9, 0x1e, 0x74, 0x74, + 0x37, 0xdd, 0x03, 0x85, 0x97, 0x10, 0x86, 0x65, 0x34, 0x98, 0x2d, 0xe8, 0xfa, 0xac, 0xfc, 0xd5, + 0x94, 0x6c, 0xa7, 0xc6, 0x49, 0xa8, 0x9d, 0x1a, 0x87, 0xe2, 0x7a, 0xef, 0xc8, 0x91, 0xca, 0x0f, + 0xa4, 0xe4, 0xd3, 0x9a, 0x5e, 0x84, 0x0b, 0x03, 0x5a, 0xef, 0xf0, 0x93, 0x37, 0x50, 0xa1, 0x56, + 0xad, 0xcc, 0xcf, 0xcf, 0xd5, 0x6e, 0x57, 0xca, 0x15, 0xd7, 0xed, 0x12, 0x43, 0xf9, 0xc1, 0xc8, + 0x8a, 0x15, 0x25, 0xa0, 0x2b, 0x56, 0x14, 0x86, 0x5f, 0x46, 0xa3, 0xb4, 0xfd, 0x74, 0xc0, 0xc0, + 0x27, 0xff, 0x50, 0x4a, 0x36, 0xa7, 0x44, 0x24, 0x35, 0xa7, 0xc4, 0xdf, 0xb8, 0x86, 0x4e, 0x53, + 0x29, 0x56, 0x1d, 0xb2, 0x4e, 0x1c, 0x62, 0x35, 0xfc, 0x31, 0xfd, 0xc3, 0x29, 0xd9, 0xca, 0x48, + 0x22, 0xa2, 0x56, 0x46, 0x12, 0x1c, 0xdf, 0x45, 0xe7, 0xa3, 0x27, 0x41, 0xb3, 0xb6, 0xb5, 0x6e, + 0x36, 0x39, 0xf3, 0x1f, 0x49, 0x45, 0x8c, 0xe1, 0x3e, 0xc4, 0x60, 0x0c, 0xf7, 0xc1, 0x63, 0x0b, + 0x5d, 0xe0, 0xc7, 0x2a, 0xdc, 0xe1, 0x32, 0x5a, 0xdb, 0x5f, 0x63, 0xb5, 0x7d, 0x38, 0x74, 0x08, + 0xec, 0x43, 0xbd, 0x30, 0xa0, 0xf5, 0x67, 0x47, 0xf5, 0x2c, 0x1e, 0x1f, 0x51, 0xf9, 0xd1, 0x54, + 0xb2, 0x47, 0x8a, 0xe4, 0xa6, 0x9c, 0x14, 0x58, 0xf1, 0xad, 0x5e, 0xd1, 0xfd, 0x94, 0x1f, 0x8b, + 0x8c, 0xb7, 0x64, 0x32, 0x3a, 0xde, 0x7a, 0x84, 0x07, 0x7c, 0x03, 0x4d, 0x32, 0xa5, 0xae, 0xea, + 0x30, 0x0c, 0xad, 0x26, 0x31, 0x94, 0xbf, 0x1e, 0x59, 0xed, 0x62, 0x14, 0xe0, 0xda, 0x13, 0x05, + 0xce, 0x0c, 0xa1, 0x41, 0x30, 0xc0, 0xd5, 0xaf, 0xa4, 0xd0, 0x68, 0xcd, 0x73, 0x88, 0xde, 0xe6, + 0x4f, 0x83, 0xa6, 0x50, 0x9e, 0x79, 0xb2, 0x54, 0xca, 0xfc, 0xd1, 0x60, 0xf0, 0x1b, 0x5f, 0x42, + 0xe3, 0x8b, 0xba, 0xeb, 0x41, 0xc9, 0x8a, 0x65, 0x90, 0xfb, 0xe0, 0xc5, 0x9d, 0xd1, 0x22, 0x50, + 0xbc, 0xc8, 0xe8, 0x58, 0x39, 0x78, 0x7e, 0x99, 0xd9, 0xf5, 0x45, 0x4c, 0xfe, 0xbd, 0xed, 0xe2, + 0x00, 0x3c, 0x80, 0x89, 0x94, 0x55, 0xbf, 0x9e, 0x42, 0x31, 0x1f, 0x9b, 0x83, 0x3f, 0x84, 0x59, + 0x41, 0x13, 0x91, 0x27, 0xbf, 0xdc, 0x15, 0x7d, 0x8f, 0x2f, 0x82, 0xa3, 0xa5, 0xf1, 0x47, 0x02, + 0x17, 0xe8, 0x5b, 0xda, 0x22, 0x7f, 0xed, 0x34, 0xb4, 0xb3, 0x5d, 0xcc, 0x74, 0x9d, 0x96, 0x26, + 0xa0, 0xb8, 0x0b, 0xfd, 0xcf, 0x17, 0xc2, 0xf7, 0x8c, 0xf8, 0x12, 0x7f, 0xce, 0x9c, 0x0a, 0xdf, + 0x48, 0x45, 0x12, 0x0d, 0xb0, 0xe7, 0xcb, 0x9f, 0x40, 0xa3, 0x95, 0x76, 0x87, 0x38, 0xae, 0x6d, + 0xe9, 0x9e, 0xed, 0x27, 0x34, 0x83, 0x97, 0x38, 0xa6, 0x00, 0x17, 0x1f, 0x62, 0x88, 0xf4, 0xf8, + 0x8a, 0x1f, 0x95, 0x32, 0x03, 0x2f, 0x49, 0x4f, 0x25, 0xe4, 0x9e, 0xf6, 0x33, 0x48, 0x5f, 0x41, + 0x83, 0xb7, 0x5c, 0x1d, 0x9c, 0xe5, 0x03, 0xd2, 0x2e, 0x05, 0x88, 0xa4, 0x40, 0x81, 0x9f, 0x42, + 0x39, 0x38, 0x5c, 0x70, 0x21, 0xda, 0x2c, 0x7f, 0xb9, 0xd5, 0x02, 0x88, 0xf8, 0xe2, 0x86, 0xd1, + 0xe0, 0x9b, 0xa8, 0x10, 0x9e, 0x9c, 0x42, 0x0a, 0x3e, 0x3f, 0xbe, 0x14, 0x04, 0xfd, 0xbf, 0x1b, + 0xe0, 0x58, 0xee, 0x3e, 0x91, 0x45, 0xac, 0x20, 0x5e, 0x40, 0x13, 0x21, 0x8c, 0x8a, 0xc8, 0x8f, + 0x6b, 0x07, 0x49, 0x2f, 0x04, 0x5e, 0x54, 0x9c, 0x22, 0xab, 0x68, 0x31, 0x5c, 0x41, 0x43, 0xfe, + 0xb3, 0xad, 0xfc, 0xae, 0x4a, 0x7a, 0x8a, 0x3f, 0xdb, 0x1a, 0x12, 0x1f, 0x6c, 0xf9, 0xe5, 0xf1, + 0x3c, 0x1a, 0xd7, 0xec, 0xae, 0x47, 0x56, 0x6d, 0x3e, 0xe5, 0xf0, 0xc0, 0x47, 0xd0, 0x26, 0x87, + 0x62, 0xea, 0x9e, 0xed, 0xe7, 0x4c, 0x10, 0x63, 0xf7, 0xcb, 0xa5, 0xf0, 0x32, 0x9a, 0x8c, 0x9d, + 0x31, 0x8b, 0x99, 0x0c, 0x84, 0xcf, 0x8b, 0x33, 0x8b, 0x17, 0xc5, 0xdf, 0x95, 0x42, 0xb9, 0x55, + 0x47, 0x37, 0x3d, 0x97, 0xfb, 0xd9, 0x9f, 0x99, 0xde, 0x74, 0xf4, 0x0e, 0xd5, 0x8f, 0x69, 0x78, + 0x2a, 0x7c, 0x5b, 0x6f, 0x75, 0x89, 0x3b, 0x73, 0x87, 0x7e, 0xdd, 0xbf, 0xdd, 0x2e, 0xbe, 0xbc, + 0x8f, 0x9c, 0xe0, 0x57, 0x03, 0x4e, 0xac, 0x06, 0xaa, 0x02, 0x1e, 0xfc, 0x25, 0xaa, 0x00, 0xc3, + 0xe1, 0x65, 0x6a, 0x67, 0xc2, 0xa7, 0x96, 0x3a, 0x1d, 0xee, 0xb4, 0x2f, 0x98, 0x99, 0x3e, 0x86, + 0x29, 0x76, 0x20, 0x30, 0xbd, 0x23, 0x26, 0x72, 0x14, 0x38, 0x50, 0x2d, 0x58, 0xe5, 0x2d, 0xf2, + 0xc5, 0x34, 0x16, 0x4a, 0xdc, 0x6f, 0x6c, 0x82, 0x90, 0xa2, 0xc5, 0xf0, 0x1a, 0x9a, 0xe0, 0x7c, + 0x83, 0x48, 0x44, 0xe3, 0xf2, 0xac, 0x10, 0x41, 0x33, 0xa5, 0x0d, 0xda, 0x68, 0x70, 0xb0, 0x58, + 0x47, 0xa4, 0x04, 0x9e, 0x09, 0x83, 0x70, 0x43, 0xd6, 0x48, 0x65, 0x02, 0x34, 0x16, 0x1e, 0x54, + 0xf9, 0xe5, 0x59, 0xb2, 0xc9, 0xa4, 0x94, 0x12, 0x50, 0x44, 0xe4, 0xc1, 0xb4, 0xbe, 0x90, 0xc0, + 0x23, 0xaa, 0xf3, 0x72, 0x11, 0x3c, 0x8b, 0xc6, 0x02, 0x9f, 0xc1, 0x5b, 0xb7, 0x2a, 0x65, 0x78, + 0x15, 0xc0, 0xd3, 0x23, 0x46, 0x82, 0x1c, 0x89, 0x4c, 0xa4, 0x32, 0xf8, 0x59, 0x94, 0x67, 0x5e, + 0xf7, 0x15, 0xf6, 0x4c, 0xc0, 0x7f, 0xd1, 0x0d, 0xb0, 0xba, 0x29, 0xf6, 0x58, 0x40, 0x88, 0x5f, + 0x45, 0x23, 0xa5, 0x3b, 0x35, 0x3a, 0xcf, 0x94, 0xb4, 0x65, 0x57, 0x39, 0x15, 0x46, 0x97, 0x83, + 0xac, 0x22, 0x76, 0x8b, 0xd4, 0x75, 0x47, 0x9a, 0x3c, 0x44, 0x7a, 0x3c, 0x87, 0xc6, 0xa5, 0x6b, + 0x47, 0x57, 0x39, 0x0d, 0x1c, 0x58, 0x62, 0x47, 0xc0, 0xd4, 0x79, 0x6e, 0x51, 0x29, 0x75, 0x8a, + 0x5c, 0x88, 0x6a, 0x0d, 0xb5, 0xdc, 0x5b, 0x2d, 0x7b, 0x53, 0x23, 0x26, 0x35, 0xba, 0xe0, 0x8d, + 0x41, 0x9e, 0x69, 0x8d, 0xc1, 0x51, 0x75, 0x87, 0xe1, 0xa4, 0xc4, 0x36, 0x72, 0x31, 0xfc, 0x0e, + 0xc2, 0x10, 0xdb, 0x8b, 0x18, 0xfe, 0x29, 0x54, 0xa5, 0xec, 0x2a, 0x67, 0x21, 0x64, 0x02, 0x8e, + 0x06, 0x2e, 0xa9, 0x94, 0x67, 0x2e, 0xf1, 0xe9, 0xe3, 0xa2, 0xce, 0x4a, 0xd5, 0x83, 0xbc, 0x9e, + 0xa6, 0x21, 0xb6, 0x38, 0x81, 0x2b, 0xde, 0x44, 0xe7, 0xaa, 0x0e, 0xb9, 0x67, 0xda, 0x5d, 0xd7, + 0x5f, 0x3e, 0xfc, 0x79, 0xeb, 0xdc, 0xae, 0xf3, 0xd6, 0xe3, 0xbc, 0xe2, 0x33, 0x1d, 0x87, 0xdc, + 0xab, 0xfb, 0x0f, 0xe5, 0xa5, 0x67, 0xa7, 0xbd, 0xb8, 0x53, 0x71, 0x95, 0xde, 0xed, 0x3a, 0x84, + 0xc3, 0x4d, 0xe2, 0x2a, 0x4a, 0x38, 0xd5, 0xea, 0x14, 0xe5, 0x73, 0x34, 0x25, 0xd5, 0x8d, 0x16, + 0xc3, 0x1a, 0xc2, 0x37, 0x66, 0xfd, 0x13, 0xc9, 0x52, 0x83, 0x05, 0xb9, 0x56, 0x1e, 0x01, 0x66, + 0x2a, 0x15, 0x4b, 0xb3, 0x11, 0x04, 0xcd, 0xa8, 0xeb, 0x1c, 0x2f, 0x8a, 0x25, 0x5e, 0x1a, 0x2f, + 0xa2, 0x42, 0xd5, 0x01, 0xfb, 0xe8, 0x26, 0xd9, 0xaa, 0xda, 0x2d, 0xb3, 0xb1, 0x05, 0x4f, 0x1d, + 0xf8, 0x54, 0xd9, 0x61, 0xb8, 0xfa, 0x5d, 0xb2, 0x55, 0xef, 0x00, 0x56, 0x5c, 0x56, 0xa2, 0x25, + 0xc5, 0x47, 0xec, 0x8f, 0xee, 0xed, 0x11, 0x3b, 0x41, 0x05, 0x7e, 0x9e, 0x79, 0xdf, 0x23, 0x16, + 0x5d, 0xea, 0x5d, 0xfe, 0xac, 0x41, 0x89, 0x9c, 0x7f, 0x06, 0x78, 0x9e, 0xe4, 0x86, 0x8d, 0x32, + 0x12, 0x80, 0xc5, 0x86, 0x45, 0x8b, 0xa8, 0x5f, 0xcc, 0x88, 0x53, 0x27, 0x3e, 0x8f, 0xb2, 0x42, + 0x44, 0x33, 0x78, 0x5a, 0x0b, 0xf1, 0x26, 0xb2, 0xfc, 0x61, 0xfd, 0xb0, 0xff, 0x06, 0xd3, 0x8f, + 0x60, 0x06, 0xe1, 0x5e, 0xc3, 0x17, 0x9b, 0x5a, 0x48, 0x00, 0xa1, 0x36, 0xc3, 0x5c, 0x80, 0x19, + 0x21, 0xd4, 0x66, 0x98, 0x0b, 0x50, 0xca, 0x04, 0x78, 0x0d, 0x8d, 0xf8, 0x26, 0x75, 0xf8, 0x20, + 0x1c, 0x82, 0x53, 0xf8, 0xe9, 0x80, 0x58, 0xec, 0x0b, 0x81, 0x08, 0xbf, 0x04, 0x09, 0xb1, 0xf8, + 0x48, 0xe6, 0x46, 0x12, 0xcc, 0xf2, 0xe2, 0xc0, 0x8f, 0x64, 0xc4, 0xe2, 0xd4, 0x74, 0xce, 0x13, + 0x35, 0xc9, 0x0f, 0x2e, 0x0c, 0x73, 0x9e, 0xa4, 0x7e, 0x5b, 0x52, 0x36, 0x57, 0xb1, 0x08, 0x5e, + 0x41, 0x93, 0x31, 0xe5, 0xe1, 0x0f, 0x5a, 0x21, 0x8d, 0x41, 0x82, 0xe6, 0x89, 0x6b, 0x6a, 0xac, + 0xac, 0xfa, 0xed, 0xe9, 0xd8, 0x8a, 0x41, 0x05, 0xc3, 0xa9, 0x84, 0xce, 0x01, 0xc1, 0xf8, 0xac, + 0x99, 0x60, 0x04, 0x22, 0x7c, 0x19, 0xe5, 0x23, 0x39, 0xb1, 0x20, 0x96, 0x45, 0x90, 0x10, 0x2b, + 0xc0, 0xe2, 0x6b, 0x42, 0xb8, 0x6b, 0x21, 0xc2, 0x82, 0x1f, 0xee, 0x3a, 0x1a, 0x6a, 0x00, 0x02, + 0x5f, 0x5f, 0x8b, 0x44, 0xd6, 0xf3, 0x53, 0x17, 0xc5, 0x57, 0xab, 0x30, 0x6e, 0x68, 0x60, 0x2b, + 0x0e, 0xee, 0x66, 0x2b, 0xaa, 0xbf, 0x9a, 0x8a, 0x6b, 0x3f, 0xbe, 0x1e, 0x7f, 0xc5, 0xcd, 0xb2, + 0x16, 0xf9, 0x40, 0xb1, 0xd6, 0xe0, 0x3d, 0xb7, 0xf4, 0x1e, 0x3b, 0x7d, 0xe0, 0xf7, 0xd8, 0x99, + 0x7d, 0xbe, 0xc7, 0x56, 0xff, 0x47, 0xb6, 0xaf, 0x57, 0xcc, 0x91, 0x04, 0x2b, 0x7a, 0x91, 0xee, + 0x77, 0x68, 0xed, 0x25, 0x37, 0x66, 0xb5, 0xb3, 0x4b, 0xff, 0xba, 0xce, 0x46, 0x8d, 0xab, 0xc9, + 0x94, 0x62, 0x0e, 0x69, 0x78, 0xe7, 0x9f, 0x4d, 0xc8, 0x21, 0x1d, 0x4d, 0x3c, 0x25, 0x16, 0xc0, + 0xcf, 0xa1, 0xe1, 0x30, 0x1b, 0xf6, 0xa0, 0x10, 0xeb, 0x21, 0x21, 0x09, 0x76, 0x48, 0x89, 0x3f, + 0x83, 0x72, 0x52, 0xe6, 0xb3, 0xab, 0x7b, 0x70, 0x23, 0x9a, 0x16, 0x83, 0x05, 0xb1, 0xbd, 0x43, + 0x34, 0xeb, 0x19, 0x67, 0x8a, 0x57, 0xd1, 0xa9, 0xaa, 0x43, 0x0c, 0x70, 0x58, 0x9b, 0xbb, 0xdf, + 0x71, 0x78, 0x28, 0x27, 0x36, 0x80, 0x61, 0xe9, 0xe8, 0xf8, 0x68, 0xba, 0xa8, 0x71, 0xbc, 0xc0, + 0x28, 0xa9, 0x38, 0xb5, 0x27, 0x58, 0x4b, 0x6e, 0x92, 0xad, 0x4d, 0xdb, 0x31, 0x58, 0xb4, 0x23, + 0x6e, 0x4f, 0x70, 0x41, 0xdf, 0xe5, 0x28, 0xd1, 0x9e, 0x90, 0x0b, 0x4d, 0xbd, 0x88, 0x46, 0x0e, + 0x1a, 0x70, 0xe7, 0xe7, 0xd2, 0x3d, 0xfc, 0x4b, 0x1f, 0xde, 0xb0, 0xc5, 0x41, 0x08, 0xf9, 0xc1, + 0x1e, 0x21, 0xe4, 0xff, 0x24, 0xdd, 0xc3, 0x79, 0xf6, 0xa1, 0x0e, 0xf5, 0x1c, 0x08, 0x43, 0x0e, + 0xf5, 0x1c, 0x46, 0xd9, 0x36, 0x0d, 0x4d, 0x24, 0x8a, 0x04, 0x85, 0xcf, 0xed, 0x1a, 0x14, 0xfe, + 0x27, 0x33, 0xfd, 0x9c, 0x8b, 0x4f, 0x64, 0xbf, 0x1f, 0xd9, 0x5f, 0x43, 0x23, 0x81, 0x64, 0x79, + 0xfa, 0xd8, 0xb1, 0x20, 0xbc, 0x17, 0x03, 0x43, 0x19, 0x81, 0x08, 0x5f, 0x61, 0x6d, 0xad, 0x99, + 0xef, 0xb2, 0xb8, 0x37, 0x63, 0x3c, 0x36, 0x8a, 0xee, 0xe9, 0x75, 0xd7, 0x7c, 0x97, 0x68, 0x01, + 0x5a, 0xfd, 0xc7, 0xe9, 0x44, 0x0f, 0xed, 0x93, 0x3e, 0xda, 0x47, 0x1f, 0x25, 0x08, 0x91, 0xf9, + 0x96, 0x9f, 0x08, 0x71, 0x1f, 0x42, 0xfc, 0xe3, 0x74, 0xa2, 0x27, 0xfe, 0x89, 0x10, 0xf7, 0x33, + 0x5b, 0x3c, 0x85, 0x86, 0x35, 0x7b, 0xd3, 0x85, 0x0c, 0x50, 0x7c, 0xae, 0x80, 0x89, 0xda, 0xb1, + 0x37, 0x5d, 0x96, 0x1d, 0x4b, 0x0b, 0x09, 0xd4, 0x3f, 0x4d, 0xf7, 0x79, 0xab, 0x70, 0x22, 0xf8, + 0x6f, 0xe6, 0x12, 0xf9, 0x8b, 0x69, 0xe9, 0x2d, 0xc4, 0x43, 0x9d, 0x33, 0xa5, 0xd6, 0xd8, 0x20, + 0x6d, 0x3d, 0x9a, 0x33, 0xc5, 0x05, 0x28, 0x0f, 0xb9, 0x1e, 0x92, 0xa8, 0x5f, 0x4d, 0x47, 0x1e, + 0x83, 0x9c, 0xc8, 0x6e, 0xcf, 0xb2, 0x0b, 0xb4, 0x8e, 0xbf, 0x6f, 0x39, 0x91, 0xdc, 0x5e, 0x25, + 0xf7, 0x3d, 0xe9, 0xc8, 0x53, 0xa0, 0x87, 0x37, 0x7d, 0xc2, 0x57, 0xd3, 0xf1, 0x67, 0x4d, 0x0f, + 0xaf, 0x26, 0x3d, 0x85, 0x86, 0xb9, 0x1c, 0x82, 0xa5, 0x82, 0xcd, 0xfb, 0x0c, 0x08, 0x07, 0xa8, + 0x01, 0x81, 0xfa, 0x9d, 0x69, 0x24, 0x3f, 0xd1, 0x7a, 0x48, 0x75, 0xe8, 0x17, 0xd3, 0xf2, 0xe3, + 0xb4, 0x87, 0x57, 0x7f, 0xa6, 0x11, 0xaa, 0x75, 0xd7, 0x1a, 0x3c, 0xb6, 0xd9, 0xa0, 0x70, 0x02, + 0x1f, 0x40, 0x35, 0x81, 0x42, 0xfd, 0x5f, 0xe9, 0xc4, 0x17, 0x73, 0x0f, 0xaf, 0x00, 0x9f, 0x85, + 0x53, 0xf1, 0x86, 0x15, 0x4e, 0xe4, 0x70, 0x08, 0x49, 0xc7, 0x5f, 0x2c, 0xe0, 0xac, 0x4f, 0x88, + 0x3f, 0x9e, 0x60, 0xae, 0x41, 0x6c, 0xd8, 0xc4, 0xd4, 0xc4, 0xa2, 0xe1, 0xf6, 0xcf, 0xd2, 0xbb, + 0x3d, 0x30, 0x7c, 0x98, 0x57, 0xd5, 0xa1, 0xaa, 0xbe, 0x05, 0x81, 0x70, 0x68, 0x4f, 0x8c, 0xb2, + 0xc0, 0xaa, 0x1d, 0x06, 0x12, 0x6f, 0xc4, 0x38, 0x95, 0xfa, 0x47, 0x83, 0xc9, 0xaf, 0xdb, 0x1e, + 0x5e, 0x11, 0x9e, 0x47, 0xd9, 0xaa, 0xee, 0x6d, 0x70, 0x4d, 0x86, 0xdb, 0xba, 0x8e, 0xee, 0x6d, + 0x68, 0x00, 0xc5, 0x57, 0x50, 0x5e, 0xd3, 0x37, 0xc5, 0xb4, 0x99, 0x70, 0xb0, 0xe3, 0xe8, 0x9b, + 0x3c, 0x2f, 0x77, 0x80, 0xc6, 0x6a, 0x10, 0x2a, 0x99, 0x9d, 0x7c, 0x43, 0x70, 0x50, 0x16, 0x2a, + 0x39, 0x08, 0x90, 0x7c, 0x1e, 0x65, 0x67, 0x6c, 0x63, 0x0b, 0x9c, 0x59, 0x46, 0x59, 0x65, 0x6b, + 0xb6, 0xb1, 0xa5, 0x01, 0x14, 0x7f, 0x3e, 0x85, 0x86, 0x16, 0x88, 0x6e, 0xd0, 0x11, 0x32, 0xdc, + 0xcf, 0x17, 0xe4, 0x93, 0x0f, 0xc6, 0x17, 0x64, 0x72, 0x83, 0x55, 0x26, 0x2a, 0x0a, 0xaf, 0x1f, + 0xdf, 0x40, 0xf9, 0x59, 0xdd, 0x23, 0x4d, 0xdb, 0xd9, 0x02, 0xef, 0x96, 0xf1, 0xd0, 0xc7, 0x5a, + 0xd2, 0x1f, 0x9f, 0x88, 0xdd, 0x8c, 0x35, 0xf8, 0x2f, 0x2d, 0x28, 0x4c, 0xc5, 0xc2, 0x73, 0x97, + 0x8c, 0x84, 0x62, 0x91, 0x93, 0x94, 0x84, 0xc7, 0xca, 0xa3, 0xc9, 0xc7, 0xca, 0x60, 0x3d, 0x82, + 0x07, 0x1c, 0x84, 0x3a, 0x1e, 0x83, 0x45, 0x9f, 0x59, 0x8f, 0x00, 0x85, 0x48, 0xc7, 0x9a, 0x40, + 0xa2, 0x7e, 0x63, 0x10, 0x25, 0xbe, 0x85, 0x39, 0x51, 0xf2, 0x13, 0x25, 0x0f, 0x95, 0xbc, 0x1c, + 0x53, 0xf2, 0xa9, 0xf8, 0xeb, 0xaa, 0xf7, 0xa9, 0x86, 0xff, 0x50, 0x36, 0xf6, 0x36, 0xf3, 0xe1, + 0xde, 0x5d, 0x86, 0xd2, 0x1b, 0xdc, 0x55, 0x7a, 0xc1, 0x80, 0xc8, 0xed, 0x3a, 0x20, 0x86, 0xf6, + 0x3a, 0x20, 0xf2, 0x3d, 0x07, 0x44, 0xa8, 0x20, 0xc3, 0x3d, 0x15, 0xa4, 0xc2, 0x07, 0x0d, 0xea, + 0x1f, 0xfc, 0xfe, 0xfc, 0xce, 0x76, 0x71, 0x9c, 0x8e, 0xa6, 0xc4, 0xb0, 0xf7, 0xc0, 0x42, 0xfd, + 0x7a, 0xb6, 0xcf, 0x83, 0xea, 0x23, 0xd1, 0x91, 0x67, 0x51, 0xa6, 0xd4, 0xe9, 0x70, 0xfd, 0x38, + 0x25, 0xbc, 0xe5, 0xee, 0x51, 0x8a, 0x52, 0xe3, 0x97, 0x50, 0xa6, 0x74, 0xa7, 0x16, 0x0d, 0x0b, + 0x5d, 0xba, 0x53, 0xe3, 0x5f, 0xd2, 0xb3, 0xec, 0x9d, 0x1a, 0x7e, 0x25, 0x8c, 0xcf, 0xb4, 0xd1, + 0xb5, 0xee, 0xf2, 0x8d, 0x22, 0x77, 0x82, 0xf5, 0x3d, 0x6d, 0x1a, 0x14, 0x45, 0xb7, 0x8b, 0x11, + 0xda, 0x88, 0x36, 0xe5, 0xf6, 0xae, 0x4d, 0x43, 0xbb, 0x6a, 0x53, 0x7e, 0xaf, 0xda, 0x34, 0xbc, + 0x07, 0x6d, 0x42, 0xbb, 0x6a, 0xd3, 0xc8, 0xe1, 0xb5, 0xa9, 0x83, 0xa6, 0xe2, 0x41, 0x30, 0x02, + 0x8d, 0xd0, 0x10, 0x8e, 0x63, 0xb9, 0x63, 0x09, 0x5c, 0xfd, 0x77, 0x19, 0xb6, 0xce, 0xb2, 0x1a, + 0x45, 0x73, 0x02, 0x69, 0x09, 0xa5, 0xd5, 0x9f, 0x4b, 0xf7, 0x8e, 0xdd, 0x71, 0x3c, 0xa7, 0xb8, + 0x6f, 0x4d, 0x94, 0x52, 0x56, 0x7e, 0x4b, 0xd5, 0x5b, 0xca, 0x11, 0xb6, 0x49, 0x32, 0xfb, 0x5a, + 0xaa, 0x57, 0x40, 0x91, 0x43, 0x49, 0xec, 0xc3, 0x71, 0x67, 0x35, 0xf0, 0x9e, 0x77, 0x65, 0x2f, + 0xb5, 0x68, 0x92, 0x9c, 0xcc, 0x01, 0x93, 0xe4, 0xfc, 0x6a, 0x0a, 0x9d, 0xba, 0xd9, 0x5d, 0x23, + 0xdc, 0x39, 0x2d, 0x68, 0xc6, 0x3b, 0x08, 0x51, 0x30, 0x77, 0x62, 0x49, 0x81, 0x13, 0xcb, 0x47, + 0xc5, 0x60, 0x20, 0x91, 0x02, 0xd3, 0x21, 0x35, 0x73, 0x60, 0xb9, 0xe0, 0xbb, 0x58, 0xde, 0xed, + 0xae, 0x91, 0x7a, 0xcc, 0x93, 0x45, 0xe0, 0x3e, 0xf5, 0x2a, 0x73, 0x5e, 0x3f, 0xa8, 0xd3, 0xc8, + 0xcf, 0xa4, 0x7b, 0xc6, 0x5f, 0x39, 0x12, 0xdd, 0x15, 0x93, 0xf6, 0x65, 0x0e, 0x98, 0xb4, 0xef, + 0xd3, 0x89, 0xbd, 0xc2, 0xf5, 0xf7, 0xd1, 0x3e, 0xfd, 0x10, 0xe1, 0x98, 0xc4, 0x25, 0x59, 0x60, + 0x47, 0x38, 0xd8, 0xdf, 0xf7, 0x02, 0xfb, 0xed, 0x54, 0xcf, 0x38, 0x39, 0xc7, 0x55, 0x60, 0xea, + 0xaf, 0xa7, 0xfd, 0xf0, 0x3c, 0x87, 0xfa, 0x84, 0xa7, 0xd0, 0x30, 0xcf, 0x41, 0x20, 0xfb, 0xd6, + 0xf2, 0xa3, 0x3c, 0x38, 0x1a, 0x0e, 0x08, 0xe8, 0x32, 0xef, 0x87, 0x0f, 0x09, 0x72, 0x2d, 0xc1, + 0x32, 0x6f, 0x72, 0x28, 0xa5, 0x17, 0x48, 0xe8, 0x42, 0x3e, 0x77, 0xdf, 0xf4, 0xc0, 0x2a, 0xa0, + 0x7d, 0x99, 0x61, 0x0b, 0x39, 0xb9, 0x6f, 0x7a, 0xcc, 0x26, 0x08, 0xd0, 0x74, 0x91, 0x16, 0x92, + 0x89, 0xf3, 0x45, 0xda, 0xe5, 0xc9, 0x50, 0xf8, 0x63, 0xae, 0xa7, 0xd0, 0x30, 0x77, 0x58, 0xe5, + 0x6e, 0x26, 0xbc, 0xb5, 0xdc, 0xc5, 0x15, 0x5a, 0x1b, 0x10, 0x50, 0x8e, 0x1a, 0x69, 0x86, 0x8e, + 0x75, 0xc0, 0xd1, 0x01, 0x88, 0xc6, 0x31, 0xea, 0x4e, 0x3a, 0x1e, 0x25, 0xe8, 0xe1, 0xdd, 0x14, + 0x5c, 0x91, 0x9d, 0xd5, 0xc0, 0x43, 0x13, 0x0c, 0x2e, 0xd1, 0x57, 0x96, 0xd9, 0x5d, 0xd7, 0x50, + 0xfe, 0x26, 0xd9, 0x62, 0x7e, 0x95, 0xb9, 0xd0, 0x15, 0xf7, 0x2e, 0x87, 0x89, 0x27, 0x9a, 0x3e, + 0x9d, 0xfa, 0x2b, 0xe9, 0x78, 0xfc, 0xa3, 0x87, 0x57, 0xd8, 0x1f, 0x43, 0x43, 0x20, 0xca, 0x8a, + 0x7f, 0xa4, 0x0e, 0x02, 0x04, 0x71, 0xcb, 0x1e, 0xbe, 0x3e, 0x99, 0xfa, 0xe3, 0xb9, 0x68, 0x50, + 0xac, 0x87, 0x57, 0x7a, 0x2f, 0xa3, 0x91, 0x59, 0xdb, 0x72, 0x4d, 0xd7, 0x23, 0x56, 0xc3, 0x57, + 0xd8, 0x47, 0xa8, 0xc1, 0xd2, 0x08, 0xc1, 0xe2, 0xcb, 0x1b, 0x81, 0xfa, 0x20, 0xca, 0x8b, 0x9f, + 0x47, 0xc3, 0x20, 0x72, 0xf0, 0x43, 0x16, 0x32, 0xb5, 0xad, 0x51, 0x60, 0xd4, 0x09, 0x39, 0x24, + 0xc5, 0xb7, 0x50, 0x7e, 0x76, 0xc3, 0x6c, 0x19, 0x0e, 0xb1, 0x78, 0xf6, 0xd1, 0xc7, 0x93, 0x43, + 0x98, 0x4d, 0xc3, 0xbf, 0x40, 0xcb, 0x9a, 0xd3, 0xe0, 0xc5, 0xa4, 0xb7, 0x47, 0x1c, 0x36, 0xf5, + 0x03, 0x69, 0x84, 0xc2, 0x02, 0xf8, 0x31, 0x94, 0xf6, 0x1f, 0xb8, 0x32, 0x37, 0x10, 0x49, 0x83, + 0xd2, 0x30, 0x15, 0xf3, 0xb1, 0x9d, 0xde, 0x75, 0x6c, 0xdf, 0x42, 0x39, 0x76, 0xa2, 0x04, 0x9e, + 0xda, 0x42, 0x9c, 0x9e, 0x9e, 0x0d, 0x9e, 0x06, 0x7a, 0xb6, 0x59, 0x04, 0xcb, 0x4e, 0xf2, 0x7a, + 0x66, 0xcc, 0xa6, 0x1a, 0x68, 0x10, 0xfe, 0xc2, 0x97, 0x50, 0x16, 0xa4, 0x98, 0x82, 0x7d, 0x22, + 0x3c, 0x13, 0x8d, 0xc8, 0x0f, 0xf0, 0xb4, 0x9b, 0x66, 0x6d, 0xcb, 0xa3, 0x55, 0x43, 0xab, 0x47, + 0xb9, 0x5c, 0x38, 0x4c, 0x92, 0x0b, 0x87, 0xa9, 0xff, 0x34, 0x9d, 0x10, 0xae, 0xed, 0xe1, 0x1d, + 0x26, 0x2f, 0x22, 0x04, 0x0f, 0x99, 0xa9, 0x3c, 0xfd, 0x27, 0x10, 0x30, 0x4a, 0x80, 0x11, 0xa8, + 0xad, 0x64, 0xd6, 0x87, 0xc4, 0xea, 0x6f, 0xa4, 0x62, 0x31, 0xbe, 0x8e, 0x6d, 0x32, 0x6c, 0xe9, + 0x5b, 0x8e, 0x79, 0x62, 0xef, 0x6f, 0xa4, 0x93, 0x22, 0x9e, 0x1d, 0x4f, 0x15, 0x0f, 0xd3, 0x7d, + 0x66, 0xf7, 0x91, 0xee, 0xf3, 0x6d, 0x34, 0x11, 0x89, 0x03, 0xc6, 0x53, 0x98, 0x5d, 0xea, 0x1f, + 0x50, 0xac, 0xf7, 0x13, 0x78, 0x89, 0x4c, 0xfd, 0xdf, 0xa9, 0xfe, 0x51, 0xe0, 0x8e, 0x5c, 0x75, + 0x12, 0x04, 0x90, 0xf9, 0xf3, 0x11, 0xc0, 0x03, 0xd8, 0x66, 0x1e, 0x6f, 0x01, 0xbc, 0x4f, 0x26, + 0x8f, 0x6f, 0xb6, 0x00, 0x7e, 0x3c, 0xb5, 0x6b, 0x10, 0xbf, 0xa3, 0x96, 0x81, 0xfa, 0xef, 0x53, + 0x89, 0xc1, 0xf6, 0x0e, 0xd5, 0xae, 0x57, 0x50, 0x8e, 0xb9, 0xad, 0xf0, 0x56, 0x09, 0xe9, 0x09, + 0x28, 0xb4, 0x57, 0x86, 0x6d, 0x86, 0xc5, 0x8b, 0x68, 0x88, 0xb5, 0xc1, 0xe0, 0xbd, 0xf1, 0xa1, + 0x3e, 0x11, 0xff, 0x8c, 0x5e, 0x93, 0x23, 0x47, 0xab, 0xbf, 0x96, 0x8a, 0xc5, 0xfe, 0x3b, 0xc2, + 0x6f, 0x0b, 0xa7, 0xea, 0xcc, 0xde, 0xa7, 0x6a, 0xf5, 0xf7, 0xd3, 0xc9, 0xa1, 0x07, 0x8f, 0xf0, + 0x43, 0x1e, 0xc4, 0x71, 0xd5, 0xc1, 0xd6, 0xad, 0x55, 0x34, 0x2e, 0xcb, 0x82, 0x2f, 0x5b, 0x17, + 0x93, 0x03, 0x30, 0xf6, 0x68, 0x45, 0x84, 0x87, 0xfa, 0x5e, 0x2a, 0x1e, 0x35, 0xf1, 0xc8, 0xe7, + 0xa7, 0x83, 0x69, 0x8b, 0xfc, 0x29, 0xef, 0x93, 0xb5, 0xe6, 0x41, 0x7c, 0xca, 0xfb, 0x64, 0xd5, + 0x38, 0xd8, 0xa7, 0xfc, 0x54, 0xba, 0x57, 0xd0, 0xc9, 0x23, 0xff, 0xa0, 0x4f, 0x89, 0x42, 0x66, + 0x2d, 0xe3, 0x9f, 0xf6, 0x58, 0xaf, 0x28, 0x8f, 0x3d, 0x78, 0xc6, 0xf8, 0x1c, 0x6c, 0x8c, 0x27, + 0x0a, 0xeb, 0x7d, 0xa2, 0xc8, 0xc7, 0x43, 0x58, 0xef, 0x93, 0xa1, 0xf2, 0xfe, 0x13, 0xd6, 0x3f, + 0x48, 0xef, 0x35, 0xd2, 0xe9, 0x89, 0xf0, 0x62, 0xc2, 0xfb, 0x52, 0x3a, 0x1e, 0x81, 0xf7, 0xc8, + 0xc5, 0x34, 0x8f, 0x72, 0x3c, 0x16, 0x70, 0x4f, 0xe1, 0x30, 0x7c, 0x2f, 0x8b, 0x86, 0x7f, 0x47, + 0x98, 0x40, 0x3d, 0xbb, 0xf7, 0x04, 0xea, 0xea, 0x9f, 0xa6, 0x22, 0xe1, 0x6a, 0x8f, 0xe4, 0x08, + 0xe1, 0x40, 0x4b, 0x12, 0x7e, 0xd5, 0x3f, 0xcc, 0xcc, 0x46, 0xc2, 0x05, 0x06, 0xdf, 0x53, 0x26, + 0x9e, 0x6e, 0xb6, 0xa2, 0xe5, 0xf9, 0x9b, 0xfb, 0x5f, 0x49, 0xa3, 0xc9, 0x18, 0x29, 0xbe, 0x24, + 0x45, 0xa1, 0x81, 0x63, 0xc9, 0x88, 0x73, 0x36, 0x8b, 0x47, 0xb3, 0x8f, 0x93, 0xd4, 0x4b, 0x28, + 0x5b, 0xd6, 0xb7, 0xd8, 0xb7, 0x0d, 0x32, 0x96, 0x86, 0xbe, 0x25, 0x9e, 0xb8, 0x01, 0x1e, 0xaf, + 0xa1, 0x33, 0xec, 0x3e, 0xc4, 0xb4, 0xad, 0x55, 0xb3, 0x4d, 0x2a, 0xd6, 0x92, 0xd9, 0x6a, 0x99, + 0x2e, 0xbf, 0x34, 0x7b, 0x6a, 0x67, 0xbb, 0x78, 0xd9, 0xb3, 0x3d, 0xbd, 0x55, 0x27, 0x3e, 0x59, + 0xdd, 0x33, 0xdb, 0xa4, 0x6e, 0x5a, 0xf5, 0x36, 0x50, 0x0a, 0x2c, 0x93, 0x59, 0xe1, 0x0a, 0x8b, + 0x0c, 0x59, 0x6b, 0xe8, 0x96, 0x45, 0x8c, 0x8a, 0x35, 0xb3, 0xe5, 0x11, 0x76, 0xd9, 0x96, 0x61, + 0x47, 0x82, 0xec, 0xed, 0x35, 0x43, 0x53, 0xc6, 0x6b, 0x94, 0x40, 0x4b, 0x28, 0xa4, 0xfe, 0x72, + 0x36, 0x21, 0x52, 0xf1, 0x31, 0x52, 0x1f, 0xbf, 0xa7, 0xb3, 0xbb, 0xf4, 0xf4, 0x55, 0x34, 0x74, + 0x9b, 0x38, 0x70, 0xbe, 0xc5, 0x2e, 0x18, 0xc0, 0x59, 0xfc, 0x1e, 0x03, 0x89, 0x37, 0x34, 0x9c, + 0x0a, 0xb7, 0xd0, 0xd4, 0x2a, 0xed, 0xa6, 0xe4, 0xce, 0xcc, 0x1d, 0xa0, 0x33, 0xfb, 0xf0, 0xc3, + 0x6f, 0xa1, 0x73, 0x80, 0x4d, 0xe8, 0xd6, 0x21, 0xa8, 0x0a, 0x22, 0x33, 0xb1, 0xaa, 0x92, 0x3b, + 0xb7, 0x57, 0x79, 0xfc, 0x29, 0x34, 0x1a, 0x0c, 0x10, 0x93, 0xb8, 0xfc, 0xe6, 0xa2, 0xcf, 0x38, + 0x63, 0x61, 0xcf, 0x28, 0x18, 0x5c, 0xb4, 0xe4, 0xd0, 0x59, 0x12, 0x2f, 0xf5, 0xdf, 0xa5, 0xfa, + 0x45, 0x4c, 0x3e, 0xf2, 0x59, 0xf9, 0x55, 0x34, 0x64, 0xb0, 0x8f, 0xe2, 0x3a, 0xd5, 0x3f, 0xa6, + 0x32, 0x23, 0xd5, 0xfc, 0x32, 0xea, 0xef, 0xa5, 0xfa, 0x06, 0x6a, 0x3e, 0xee, 0x9f, 0xf7, 0xa5, + 0x4c, 0x8f, 0xcf, 0xe3, 0x93, 0xe8, 0x15, 0x54, 0x30, 0x2d, 0x8f, 0x34, 0x59, 0x0e, 0xb6, 0x7a, + 0x18, 0xde, 0x49, 0x9b, 0x10, 0xe0, 0x30, 0xba, 0xae, 0xa3, 0xb3, 0xbe, 0x63, 0xa1, 0xe3, 0x7b, + 0x60, 0xb9, 0xf5, 0xae, 0x63, 0xb2, 0x71, 0xa9, 0x9d, 0x76, 0x23, 0xee, 0x59, 0xee, 0x2d, 0xc7, + 0xa4, 0x15, 0xe8, 0xde, 0x06, 0xb1, 0xf4, 0xfa, 0xa6, 0xed, 0xdc, 0x85, 0xd8, 0x9a, 0x6c, 0x70, + 0x6a, 0x13, 0x0c, 0x7e, 0xc7, 0x07, 0xe3, 0x27, 0xd0, 0x58, 0xb3, 0xd5, 0x25, 0x41, 0x34, 0x43, + 0x76, 0xd7, 0xa7, 0x8d, 0x52, 0x60, 0x70, 0x43, 0x72, 0x01, 0x21, 0x20, 0xf2, 0x20, 0x8c, 0x36, + 0x5c, 0xec, 0x69, 0xc3, 0x14, 0xb2, 0xca, 0xbb, 0x6b, 0x8a, 0x69, 0x35, 0x13, 0x52, 0xbd, 0x65, + 0x5b, 0xcd, 0xba, 0x47, 0x9c, 0x36, 0x34, 0x14, 0x9c, 0x13, 0xb5, 0xb3, 0x40, 0x01, 0x57, 0x27, + 0xee, 0xa2, 0x6d, 0x35, 0x57, 0x89, 0xd3, 0xa6, 0x4d, 0x7d, 0x0a, 0x61, 0xde, 0x54, 0x07, 0x0e, + 0x3d, 0xd8, 0xc7, 0x81, 0x9f, 0xa2, 0xc6, 0x3f, 0x82, 0x9d, 0x86, 0xc0, 0x87, 0x15, 0xd1, 0x08, + 0x0b, 0xe9, 0xc6, 0x84, 0x06, 0xae, 0x8a, 0x1a, 0x62, 0x20, 0x90, 0xd7, 0x59, 0xc4, 0xbd, 0x17, + 0x98, 0xd7, 0xb4, 0xc6, 0x7f, 0xa9, 0x5f, 0xc8, 0x24, 0xc5, 0x96, 0x3e, 0x94, 0xa2, 0x85, 0xd3, + 0x6a, 0x7a, 0x5f, 0xd3, 0xea, 0x84, 0xd5, 0x6d, 0xd7, 0xf5, 0x4e, 0xa7, 0xbe, 0x6e, 0xb6, 0xe0, + 0xd9, 0x12, 0x2c, 0x7c, 0xda, 0x98, 0xd5, 0x6d, 0x97, 0x3a, 0x9d, 0x79, 0x06, 0xc4, 0x4f, 0xa2, + 0x49, 0x4a, 0x07, 0x9d, 0x14, 0x50, 0x66, 0x81, 0x92, 0x32, 0x80, 0x98, 0xa8, 0x3e, 0xed, 0x23, + 0x28, 0xcf, 0x79, 0xb2, 0xb5, 0x6a, 0x50, 0x1b, 0x62, 0xcc, 0x5c, 0xda, 0x73, 0x01, 0x1b, 0x36, + 0xb9, 0x0e, 0x6a, 0xc3, 0x7e, 0x79, 0x88, 0xfc, 0x6b, 0x75, 0xdb, 0x2c, 0xe2, 0xd4, 0x10, 0x20, + 0x83, 0xdf, 0xf8, 0x12, 0x1a, 0xa7, 0x5c, 0x02, 0x81, 0xb1, 0x60, 0xa9, 0x83, 0x5a, 0x04, 0x8a, + 0xaf, 0xa1, 0xd3, 0x12, 0x84, 0xd9, 0xa0, 0xcc, 0x0d, 0x7f, 0x50, 0x4b, 0xc4, 0xa9, 0x5f, 0xcd, + 0xc8, 0x11, 0xaf, 0x8f, 0xa0, 0x23, 0xce, 0xa1, 0x21, 0xdb, 0x69, 0xd6, 0xbb, 0x4e, 0x8b, 0x8f, + 0xbd, 0x9c, 0xed, 0x34, 0x6f, 0x39, 0x2d, 0x7c, 0x06, 0xe5, 0x68, 0xef, 0x98, 0x06, 0x1f, 0x62, + 0x83, 0x7a, 0xa7, 0x53, 0x31, 0x70, 0x89, 0x75, 0x08, 0x04, 0xda, 0xac, 0x37, 0x60, 0x6b, 0xcf, + 0x9c, 0x12, 0x06, 0xd9, 0x8a, 0x17, 0x43, 0x42, 0x3f, 0x41, 0xf8, 0x4d, 0x76, 0x10, 0x10, 0x61, + 0x61, 0xc0, 0xb6, 0xc4, 0x60, 0x7d, 0x12, 0x65, 0xc1, 0x91, 0x21, 0x0b, 0xb6, 0x89, 0x31, 0x70, + 0x19, 0xe1, 0x90, 0xaa, 0x6d, 0x1b, 0xe6, 0xba, 0x49, 0xd8, 0xab, 0x89, 0x41, 0x76, 0xf1, 0x1b, + 0xc7, 0x6a, 0x05, 0x9f, 0xc9, 0x12, 0x87, 0xe0, 0x97, 0x99, 0x12, 0x32, 0x3a, 0x58, 0xfb, 0x58, + 0xdf, 0x32, 0x3b, 0x2d, 0x82, 0x02, 0xcd, 0x84, 0xf2, 0xb0, 0x10, 0xaa, 0xef, 0x65, 0xe2, 0x61, + 0xcf, 0x8f, 0xc4, 0xae, 0x59, 0x40, 0x88, 0x67, 0x35, 0x08, 0x2f, 0xd7, 0x02, 0x8f, 0xee, 0x10, + 0xd3, 0x83, 0x87, 0x50, 0x16, 0x5f, 0x41, 0x79, 0xf6, 0x45, 0x95, 0x32, 0xb7, 0x77, 0xc0, 0x05, + 0xcb, 0xed, 0x98, 0xeb, 0xeb, 0xe0, 0xaf, 0x15, 0xa0, 0xf1, 0x25, 0x34, 0x54, 0x5e, 0xae, 0xd5, + 0x4a, 0xcb, 0xfe, 0x4d, 0x31, 0xbc, 0xdf, 0x30, 0x2c, 0xb7, 0xee, 0xea, 0x96, 0xab, 0xf9, 0x48, + 0xfc, 0x04, 0xca, 0x55, 0xaa, 0x40, 0xc6, 0x5e, 0x25, 0x8e, 0xec, 0x6c, 0x17, 0x87, 0xcc, 0x0e, + 0xa3, 0xe2, 0x28, 0xa8, 0xf7, 0x76, 0xa5, 0x2c, 0xb8, 0x4b, 0xb0, 0x7a, 0xef, 0x99, 0x06, 0x5c, + 0x3b, 0x6b, 0x01, 0x1a, 0x3f, 0x87, 0x46, 0x6b, 0xc4, 0x31, 0xf5, 0xd6, 0x72, 0x17, 0xb6, 0x8a, + 0xcc, 0xe5, 0x7b, 0x72, 0x67, 0xbb, 0x38, 0xe6, 0x02, 0xbc, 0x6e, 0x01, 0x42, 0x93, 0xc8, 0xf0, + 0x79, 0x94, 0x5d, 0x30, 0x2d, 0xff, 0x89, 0x00, 0xf8, 0x90, 0x6f, 0x98, 0x96, 0xa7, 0x01, 0x54, + 0xfd, 0xde, 0x74, 0x72, 0xec, 0xf8, 0x23, 0x18, 0x8e, 0x07, 0xbc, 0xe9, 0x8d, 0x28, 0x41, 0xf6, + 0xe0, 0x4a, 0xa0, 0x7e, 0x7f, 0x7a, 0x97, 0x30, 0xf4, 0x0f, 0xa5, 0x54, 0xbe, 0x9c, 0xee, 0x9f, + 0x09, 0xe0, 0xa1, 0x14, 0xca, 0x57, 0xd2, 0x09, 0x71, 0xf9, 0x0f, 0x25, 0x89, 0x2b, 0x28, 0xcf, + 0xd8, 0x04, 0x2e, 0xa6, 0x30, 0x13, 0x34, 0x00, 0x06, 0x33, 0x90, 0x8f, 0xc6, 0xcb, 0xe8, 0x74, + 0x69, 0x7d, 0x9d, 0x34, 0xbc, 0x30, 0x58, 0xf0, 0x72, 0x18, 0x20, 0x94, 0x45, 0x58, 0xe5, 0xf8, + 0x30, 0xd8, 0x30, 0x04, 0xc2, 0x48, 0x2c, 0x87, 0x57, 0xd1, 0xd9, 0x28, 0xbc, 0xc6, 0xcc, 0xe7, + 0xac, 0x10, 0x74, 0x35, 0xc6, 0x91, 0xfd, 0xa7, 0xf5, 0x28, 0xfb, 0xe4, 0x12, 0x0b, 0x5d, 0x7a, + 0xd3, 0xb4, 0x0c, 0xfc, 0x08, 0x3a, 0x73, 0xab, 0x36, 0xa7, 0xd5, 0x6f, 0x56, 0x96, 0xcb, 0xf5, + 0x5b, 0xcb, 0xb5, 0xea, 0xdc, 0x6c, 0x65, 0xbe, 0x32, 0x57, 0x2e, 0x0c, 0xe0, 0x53, 0x68, 0x22, + 0x44, 0x2d, 0xdc, 0x5a, 0x2a, 0x2d, 0x17, 0x52, 0x78, 0x12, 0x8d, 0x85, 0xc0, 0x99, 0x95, 0xd5, + 0x42, 0xfa, 0xc9, 0x8f, 0xa0, 0x11, 0xb0, 0x1d, 0x4b, 0x6c, 0xc2, 0x1e, 0x45, 0xf9, 0x95, 0x99, + 0xda, 0x9c, 0x76, 0x1b, 0x98, 0x20, 0x94, 0x2b, 0xcf, 0x2d, 0x53, 0x86, 0xa9, 0x27, 0xff, 0x7b, + 0x0a, 0xa1, 0xda, 0xfc, 0x6a, 0x95, 0x13, 0x8e, 0xa0, 0xa1, 0xca, 0xf2, 0xed, 0xd2, 0x62, 0x85, + 0xd2, 0xe5, 0x51, 0x76, 0xa5, 0x3a, 0x47, 0x6b, 0x18, 0x46, 0x83, 0xb3, 0x8b, 0x2b, 0xb5, 0xb9, + 0x42, 0x9a, 0x02, 0xb5, 0xb9, 0x52, 0xb9, 0x90, 0xa1, 0xc0, 0x3b, 0x5a, 0x65, 0x75, 0xae, 0x90, + 0xa5, 0x7f, 0x2e, 0xd6, 0x56, 0x4b, 0xab, 0x85, 0x41, 0xfa, 0xe7, 0x3c, 0xfc, 0x99, 0xa3, 0xcc, + 0x6a, 0x73, 0xab, 0xf0, 0x63, 0x88, 0x36, 0x61, 0xde, 0xff, 0x95, 0xa7, 0x28, 0xca, 0xba, 0x5c, + 0xd1, 0x0a, 0xc3, 0xf4, 0x07, 0x65, 0x49, 0x7f, 0x20, 0xda, 0x38, 0x6d, 0x6e, 0x69, 0xe5, 0xf6, + 0x5c, 0x61, 0x84, 0xf2, 0x5a, 0xba, 0x49, 0xc1, 0xa3, 0xf4, 0x4f, 0x6d, 0x89, 0xfe, 0x39, 0x46, + 0x39, 0x69, 0x73, 0xa5, 0xc5, 0x6a, 0x69, 0x75, 0xa1, 0x30, 0x4e, 0xdb, 0x03, 0x3c, 0x27, 0x58, + 0xc9, 0xe5, 0xd2, 0xd2, 0x5c, 0xa1, 0xc0, 0x69, 0xca, 0x8b, 0x95, 0xe5, 0x9b, 0x85, 0x49, 0x68, + 0xc8, 0x5b, 0x4b, 0xf0, 0x03, 0xd3, 0x02, 0xf0, 0xd7, 0xa9, 0x27, 0xbf, 0x05, 0xe5, 0x56, 0x6a, + 0xb0, 0x5a, 0x9c, 0x43, 0xa7, 0x56, 0x6a, 0xf5, 0xd5, 0xb7, 0xaa, 0x73, 0x11, 0x79, 0x4f, 0xa2, + 0x31, 0x1f, 0xb1, 0x58, 0x59, 0xbe, 0xf5, 0x49, 0x26, 0x6d, 0x1f, 0xb4, 0x54, 0x9a, 0x5d, 0xa9, + 0x15, 0xd2, 0xb4, 0x57, 0x7c, 0xd0, 0x9d, 0xca, 0x72, 0x79, 0xe5, 0x4e, 0xad, 0x90, 0x79, 0xf2, + 0x9e, 0x9f, 0xf2, 0x6d, 0xc5, 0x31, 0x9b, 0xa6, 0x85, 0x2f, 0xa0, 0x47, 0xca, 0x73, 0xb7, 0x2b, + 0xb3, 0x73, 0xf5, 0x15, 0xad, 0x72, 0xa3, 0xb2, 0x1c, 0xa9, 0xe9, 0x0c, 0x9a, 0x94, 0xd1, 0xa5, + 0x6a, 0xa5, 0x90, 0xc2, 0x67, 0x11, 0x96, 0xc1, 0x6f, 0x94, 0x96, 0xe6, 0x0b, 0x69, 0xac, 0xa0, + 0xd3, 0x32, 0xbc, 0xb2, 0xbc, 0x7a, 0x6b, 0x79, 0xae, 0x90, 0x79, 0xf2, 0x6f, 0xa5, 0xd0, 0x99, + 0xc4, 0xc7, 0xc1, 0x58, 0x45, 0x17, 0xe7, 0x16, 0x4b, 0xb5, 0xd5, 0xca, 0x6c, 0x6d, 0xae, 0xa4, + 0xcd, 0x2e, 0xd4, 0x67, 0x4b, 0xab, 0x73, 0x37, 0x56, 0xb4, 0xb7, 0xea, 0x37, 0xe6, 0x96, 0xe7, + 0xb4, 0xd2, 0x62, 0x61, 0x00, 0x3f, 0x81, 0x8a, 0x3d, 0x68, 0x6a, 0x73, 0xb3, 0xb7, 0xb4, 0xca, + 0xea, 0x5b, 0x85, 0x14, 0x7e, 0x1c, 0x5d, 0xe8, 0x49, 0x44, 0x7f, 0x17, 0xd2, 0xf8, 0x22, 0x9a, + 0xea, 0x45, 0xf2, 0xe6, 0x62, 0x21, 0xf3, 0xe4, 0x0f, 0xa7, 0x10, 0x8e, 0xbf, 0xee, 0xc4, 0x8f, + 0xa1, 0xf3, 0x54, 0x2f, 0xea, 0xbd, 0x1b, 0xf8, 0x38, 0xba, 0x90, 0x48, 0x21, 0x34, 0xaf, 0x88, + 0x1e, 0xed, 0x41, 0xc2, 0x1b, 0x77, 0x1e, 0x29, 0xc9, 0x04, 0xb4, 0x69, 0x33, 0xe5, 0xf7, 0xfe, + 0xe0, 0xe2, 0xc0, 0x7b, 0x7f, 0x78, 0x31, 0xf5, 0x5b, 0x7f, 0x78, 0x31, 0xf5, 0xfb, 0x7f, 0x78, + 0x31, 0xf5, 0xa9, 0x6b, 0xfb, 0x79, 0xfc, 0xca, 0xa6, 0xb0, 0xb5, 0x1c, 0x3c, 0xf3, 0x7a, 0xf6, + 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x2c, 0xf1, 0x8b, 0xc1, 0x3f, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -20787,6 +20793,23 @@ func (m *DatabasePermissionUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.AffectedObjectCounts) > 0 { + for k := range m.AffectedObjectCounts { + v := m.AffectedObjectCounts[k] + baseI := i + i = encodeVarintEvents(dAtA, i, uint64(v)) + i-- + dAtA[i] = 0x10 + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintEvents(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintEvents(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x32 + } + } if len(m.PermissionSummary) > 0 { for iNdEx := len(m.PermissionSummary) - 1; iNdEx >= 0; iNdEx-- { { @@ -34549,6 +34572,14 @@ func (m *DatabasePermissionUpdate) Size() (n int) { n += 1 + l + sovEvents(uint64(l)) } } + if len(m.AffectedObjectCounts) > 0 { + for k, v := range m.AffectedObjectCounts { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovEvents(uint64(len(k))) + 1 + sovEvents(uint64(v)) + n += mapEntrySize + 1 + sovEvents(uint64(mapEntrySize)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -60922,6 +60953,119 @@ func (m *DatabasePermissionUpdate) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AffectedObjectCounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AffectedObjectCounts == nil { + m.AffectedObjectCounts = make(map[string]int32) + } + var mapkey string + var mapvalue int32 + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthEvents + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthEvents + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvalue |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + } else { + iNdEx = entryPreIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.AffectedObjectCounts[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/gen/proto/go/prehog/v1alpha/teleport.pb.go b/gen/proto/go/prehog/v1alpha/teleport.pb.go index 877fac72ebefc..60077926246af 100644 --- a/gen/proto/go/prehog/v1alpha/teleport.pb.go +++ b/gen/proto/go/prehog/v1alpha/teleport.pb.go @@ -6587,6 +6587,150 @@ func (x *OktaAccessListSyncEvent) GetNumAccessListMembers() int32 { return 0 } +// DatabaseUserCreatedEvent is an event that is emitted after database service performs automatic user provisioning. +type DatabaseUserCreatedEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Database metadata. + Database *SessionStartDatabaseMetadata `protobuf:"bytes,1,opt,name=database,proto3" json:"database,omitempty"` + // Teleport user name. Anonymized. + UserName string `protobuf:"bytes,2,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` + // Number of database roles. + NumRoles int32 `protobuf:"varint,3,opt,name=num_roles,json=numRoles,proto3" json:"num_roles,omitempty"` +} + +func (x *DatabaseUserCreatedEvent) Reset() { + *x = DatabaseUserCreatedEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DatabaseUserCreatedEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatabaseUserCreatedEvent) ProtoMessage() {} + +func (x *DatabaseUserCreatedEvent) ProtoReflect() protoreflect.Message { + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatabaseUserCreatedEvent.ProtoReflect.Descriptor instead. +func (*DatabaseUserCreatedEvent) Descriptor() ([]byte, []int) { + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{84} +} + +func (x *DatabaseUserCreatedEvent) GetDatabase() *SessionStartDatabaseMetadata { + if x != nil { + return x.Database + } + return nil +} + +func (x *DatabaseUserCreatedEvent) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +func (x *DatabaseUserCreatedEvent) GetNumRoles() int32 { + if x != nil { + return x.NumRoles + } + return 0 +} + +// DatabaseUserPermissionsUpdateEvent is an event that is emitted after database service updates the permissions for the database user. +type DatabaseUserPermissionsUpdateEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Database metadata. + Database *SessionStartDatabaseMetadata `protobuf:"bytes,1,opt,name=database,proto3" json:"database,omitempty"` + // Teleport user name. Anonymized. + UserName string `protobuf:"bytes,2,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` + // How many tables were affected. + NumTables int32 `protobuf:"varint,3,opt,name=num_tables,json=numTables,proto3" json:"num_tables,omitempty"` + // How many total table permissions were given to the user. + // For example {SELECT,UPDATE} on ten tables gives a total of twenty. + NumTablesPermissions int32 `protobuf:"varint,4,opt,name=num_tables_permissions,json=numTablesPermissions,proto3" json:"num_tables_permissions,omitempty"` +} + +func (x *DatabaseUserPermissionsUpdateEvent) Reset() { + *x = DatabaseUserPermissionsUpdateEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DatabaseUserPermissionsUpdateEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatabaseUserPermissionsUpdateEvent) ProtoMessage() {} + +func (x *DatabaseUserPermissionsUpdateEvent) ProtoReflect() protoreflect.Message { + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatabaseUserPermissionsUpdateEvent.ProtoReflect.Descriptor instead. +func (*DatabaseUserPermissionsUpdateEvent) Descriptor() ([]byte, []int) { + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{85} +} + +func (x *DatabaseUserPermissionsUpdateEvent) GetDatabase() *SessionStartDatabaseMetadata { + if x != nil { + return x.Database + } + return nil +} + +func (x *DatabaseUserPermissionsUpdateEvent) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +func (x *DatabaseUserPermissionsUpdateEvent) GetNumTables() int32 { + if x != nil { + return x.NumTables + } + return 0 +} + +func (x *DatabaseUserPermissionsUpdateEvent) GetNumTablesPermissions() int32 { + if x != nil { + return x.NumTablesPermissions + } + return 0 +} + type SubmitEventRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6681,13 +6825,15 @@ type SubmitEventRequest struct { // *SubmitEventRequest_MfaAuthenticationEvent // *SubmitEventRequest_SpiffeSvidIssued // *SubmitEventRequest_OktaAccessListSync + // *SubmitEventRequest_DatabaseUserCreated + // *SubmitEventRequest_DatabaseUserPermissionsUpdated Event isSubmitEventRequest_Event `protobuf_oneof:"event"` } func (x *SubmitEventRequest) Reset() { *x = SubmitEventRequest{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6700,7 +6846,7 @@ func (x *SubmitEventRequest) String() string { func (*SubmitEventRequest) ProtoMessage() {} func (x *SubmitEventRequest) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6713,7 +6859,7 @@ func (x *SubmitEventRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventRequest.ProtoReflect.Descriptor instead. func (*SubmitEventRequest) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{84} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{86} } func (x *SubmitEventRequest) GetClusterName() string { @@ -7276,6 +7422,20 @@ func (x *SubmitEventRequest) GetOktaAccessListSync() *OktaAccessListSyncEvent { return nil } +func (x *SubmitEventRequest) GetDatabaseUserCreated() *DatabaseUserCreatedEvent { + if x, ok := x.GetEvent().(*SubmitEventRequest_DatabaseUserCreated); ok { + return x.DatabaseUserCreated + } + return nil +} + +func (x *SubmitEventRequest) GetDatabaseUserPermissionsUpdated() *DatabaseUserPermissionsUpdateEvent { + if x, ok := x.GetEvent().(*SubmitEventRequest_DatabaseUserPermissionsUpdated); ok { + return x.DatabaseUserPermissionsUpdated + } + return nil +} + type isSubmitEventRequest_Event interface { isSubmitEventRequest_Event() } @@ -7593,6 +7753,14 @@ type SubmitEventRequest_OktaAccessListSync struct { OktaAccessListSync *OktaAccessListSyncEvent `protobuf:"bytes,80,opt,name=okta_access_list_sync,json=oktaAccessListSync,proto3,oneof"` } +type SubmitEventRequest_DatabaseUserCreated struct { + DatabaseUserCreated *DatabaseUserCreatedEvent `protobuf:"bytes,81,opt,name=database_user_created,json=databaseUserCreated,proto3,oneof"` +} + +type SubmitEventRequest_DatabaseUserPermissionsUpdated struct { + DatabaseUserPermissionsUpdated *DatabaseUserPermissionsUpdateEvent `protobuf:"bytes,82,opt,name=database_user_permissions_updated,json=databaseUserPermissionsUpdated,proto3,oneof"` +} + func (*SubmitEventRequest_UserLogin) isSubmitEventRequest_Event() {} func (*SubmitEventRequest_SsoCreate) isSubmitEventRequest_Event() {} @@ -7749,6 +7917,10 @@ func (*SubmitEventRequest_SpiffeSvidIssued) isSubmitEventRequest_Event() {} func (*SubmitEventRequest_OktaAccessListSync) isSubmitEventRequest_Event() {} +func (*SubmitEventRequest_DatabaseUserCreated) isSubmitEventRequest_Event() {} + +func (*SubmitEventRequest_DatabaseUserPermissionsUpdated) isSubmitEventRequest_Event() {} + type SubmitEventResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7758,7 +7930,7 @@ type SubmitEventResponse struct { func (x *SubmitEventResponse) Reset() { *x = SubmitEventResponse{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7771,7 +7943,7 @@ func (x *SubmitEventResponse) String() string { func (*SubmitEventResponse) ProtoMessage() {} func (x *SubmitEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7784,7 +7956,7 @@ func (x *SubmitEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventResponse.ProtoReflect.Descriptor instead. func (*SubmitEventResponse) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{85} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{87} } type SubmitEventsRequest struct { @@ -7799,7 +7971,7 @@ type SubmitEventsRequest struct { func (x *SubmitEventsRequest) Reset() { *x = SubmitEventsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[86] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7812,7 +7984,7 @@ func (x *SubmitEventsRequest) String() string { func (*SubmitEventsRequest) ProtoMessage() {} func (x *SubmitEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[86] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7825,7 +7997,7 @@ func (x *SubmitEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventsRequest.ProtoReflect.Descriptor instead. func (*SubmitEventsRequest) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{86} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{88} } func (x *SubmitEventsRequest) GetEvents() []*SubmitEventRequest { @@ -7844,7 +8016,7 @@ type SubmitEventsResponse struct { func (x *SubmitEventsResponse) Reset() { *x = SubmitEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[87] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7857,7 +8029,7 @@ func (x *SubmitEventsResponse) String() string { func (*SubmitEventsResponse) ProtoMessage() {} func (x *SubmitEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[87] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7870,7 +8042,7 @@ func (x *SubmitEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventsResponse.ProtoReflect.Descriptor instead. func (*SubmitEventsResponse) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{87} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{89} } type HelloTeleportRequest struct { @@ -7882,7 +8054,7 @@ type HelloTeleportRequest struct { func (x *HelloTeleportRequest) Reset() { *x = HelloTeleportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[88] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7895,7 +8067,7 @@ func (x *HelloTeleportRequest) String() string { func (*HelloTeleportRequest) ProtoMessage() {} func (x *HelloTeleportRequest) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[88] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7908,7 +8080,7 @@ func (x *HelloTeleportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HelloTeleportRequest.ProtoReflect.Descriptor instead. func (*HelloTeleportRequest) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{88} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{90} } type HelloTeleportResponse struct { @@ -7920,7 +8092,7 @@ type HelloTeleportResponse struct { func (x *HelloTeleportResponse) Reset() { *x = HelloTeleportResponse{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[89] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7933,7 +8105,7 @@ func (x *HelloTeleportResponse) String() string { func (*HelloTeleportResponse) ProtoMessage() {} func (x *HelloTeleportResponse) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[89] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7946,7 +8118,7 @@ func (x *HelloTeleportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HelloTeleportResponse.ProtoReflect.Descriptor instead. func (*HelloTeleportResponse) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{89} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{91} } var File_prehog_v1alpha_teleport_proto protoreflect.FileDescriptor @@ -8801,844 +8973,882 @@ var file_prehog_v1alpha_teleport_proto_rawDesc = []byte{ 0x75, 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x22, 0xf9, 0x41, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, - 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x73, 0x6f, 0x5f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x53, 0x4f, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x73, - 0x73, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, - 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x42, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x0d, 0x75, 0x69, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, - 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x6f, 0x5f, 0x64, - 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, - 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x4f, 0x6e, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, - 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x74, - 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x72, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x48, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x22, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x12, 0x34, 0x0a, 0x16, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xda, 0x43, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, + 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, + 0x73, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x53, 0x53, 0x4f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x09, 0x73, 0x73, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, + 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x69, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, + 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, + 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, + 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, + 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, + 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, + 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, + 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, + 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, + 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, + 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, - 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, - 0x74, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, - 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x87, 0x01, 0x0a, - 0x24, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, - 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, - 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x12, 0x6f, 0x0a, 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x52, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x72, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, - 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, - 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, - 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19, 0x75, - 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, - 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, 0x75, 0x69, 0x5f, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, 0x01, - 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, + 0x69, 0x63, 0x6b, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x12, 0x87, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, + 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, + 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, + 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, + 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x6f, 0x0a, 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, + 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, + 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, + 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, + 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x72, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, + 0x69, 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, + 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x19, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, + 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, + 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x1d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x56, 0x32, 0x12, 0x76, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, 0x0a, 0x23, 0x75, 0x69, - 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x8f, 0x01, 0x0a, 0x29, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x6d, - 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x54, 0x4c, 0x53, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x4d, 0x74, 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xb8, 0x01, - 0x0a, 0x38, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, - 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x5f, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, - 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x34, 0x75, 0x69, 0x5f, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, - 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, 0x69, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x2b, 0x75, 0x69, - 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, 0x69, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x9f, 0x01, 0x0a, 0x2f, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x1d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, + 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, + 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x56, 0x32, 0x12, 0x76, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, + 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, + 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x8f, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x65, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, + 0x4d, 0x54, 0x4c, 0x53, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x74, 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0xb8, 0x01, 0x0a, 0x38, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, + 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x79, - 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x65, - 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1b, 0x75, 0x69, 0x5f, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, + 0x34, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, + 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, + 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, + 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, + 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, + 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, + 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x9f, 0x01, 0x0a, 0x2f, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, + 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, + 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, + 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, + 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, + 0x1b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, + 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, + 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, + 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x6f, - 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x75, 0x69, 0x5f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x70, 0x0a, - 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, - 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, - 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, - 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, - 0x76, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, - 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, + 0x6b, 0x12, 0x70, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, + 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, + 0x63, 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x69, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, - 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x25, 0x75, 0x69, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, - 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, - 0x63, 0x6b, 0x12, 0x45, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6b, 0x75, - 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x66, 0x74, - 0x70, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, 0x50, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, 0x0a, 0x14, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x68, - 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, + 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x12, 0x76, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x1a, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, + 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, + 0x6c, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, + 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x25, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, + 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x45, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, + 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, + 0x04, 0x73, 0x66, 0x74, 0x70, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, + 0x50, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, + 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x12, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, + 0x9c, 0x01, 0x0a, 0x2e, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, + 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x28, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, + 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, + 0x01, 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, + 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x2e, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x6f, 0x69, 0x64, 0x63, - 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x28, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x57, 0x53, 0x4f, 0x49, - 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x28, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, 0x64, 0x63, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x25, 0x75, - 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x44, - 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, - 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x52, 0x64, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x6b, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x61, 0x6c, 0x6c, 0x54, + 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x52, 0x44, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x64, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, + 0x74, 0x6f, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, + 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x54, 0x0a, - 0x11, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, - 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x1d, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, - 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, - 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x20, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x74, 0x12, 0x54, 0x0a, 0x11, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, + 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x6f, 0x74, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, - 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, - 0x62, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, 0x1f, 0x75, 0x69, 0x5f, - 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x6e, 0x61, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x30, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, - 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x6a, 0x6f, 0x69, - 0x6e, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, - 0x12, 0x51, 0x0a, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, - 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x65, - 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x33, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x19, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x6e, 0x0a, 0x1c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x5e, 0x0a, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x73, 0x73, - 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x48, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x13, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, - 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x53, 0x0a, 0x13, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x11, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, - 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, + 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, + 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, + 0x62, 0x6f, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, + 0x1f, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, + 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, + 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, + 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, + 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, + 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x51, 0x0a, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, + 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, + 0x74, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, + 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, + 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, + 0x19, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x1c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5e, 0x0a, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x13, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, + 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0c, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, + 0x0a, 0x13, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, + 0x62, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x74, 0x6f, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, - 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, - 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x43, 0x32, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x45, 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x65, 0x69, 0x63, - 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, 0x45, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, - 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, + 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, + 0x43, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, + 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x5f, 0x65, 0x69, 0x63, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x64, - 0x0a, 0x17, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x64, - 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x12, 0x65, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, - 0x63, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, - 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x11, 0x74, - 0x61, 0x67, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, - 0x74, 0x61, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x86, 0x01, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x64, - 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, - 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x74, 0x5f, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, + 0x45, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, + 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x64, 0x0a, 0x17, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x15, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x65, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, + 0x74, 0x6f, 0x70, 0x5f, 0x63, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, + 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, + 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, + 0x52, 0x0a, 0x11, 0x74, 0x61, 0x67, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x0f, 0x74, 0x61, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x86, 0x01, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, + 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, + 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x17, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, + 0x69, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x59, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x4a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, + 0x4b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x18, + 0x6d, 0x66, 0x61, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x75, 0x6e, 0x12, 0x59, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x68, - 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x4b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x74, 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, - 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x69, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x18, 0x6d, 0x66, 0x61, 0x5f, - 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x46, 0x41, 0x41, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, - 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, - 0x53, 0x56, 0x49, 0x44, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x10, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, 0x64, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x50, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x6f, - 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, - 0x63, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, - 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x65, 0x74, - 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x22, 0x15, - 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x48, 0x65, 0x6c, 0x6c, - 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, - 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x53, - 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, - 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, - 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x50, 0x45, - 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x50, 0x45, - 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, 0x07, 0x2a, 0x4d, 0x0a, 0x08, 0x55, - 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, - 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, 0x91, 0x0f, 0x0a, 0x10, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x01, - 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, - 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, - 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x4d, 0x46, 0x41, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, + 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x55, 0x0a, 0x12, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, + 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, + 0x49, 0x46, 0x46, 0x45, 0x53, 0x56, 0x49, 0x44, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, + 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, + 0x18, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x12, 0x6f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x5e, 0x0a, 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x51, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x13, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x7f, 0x0a, 0x21, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4a, + 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, + 0x69, 0x63, 0x6b, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, + 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, + 0x15, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x1c, + 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, + 0x41, 0x50, 0x50, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, + 0x42, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, 0x5f, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, + 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, + 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, + 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, 0x07, + 0x2a, 0x4d, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, + 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, + 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, + 0x91, 0x0f, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, + 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x46, - 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, - 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x2b, 0x0a, - 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, - 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, - 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x52, - 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, 0x08, 0x12, 0x25, 0x0a, 0x21, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x53, + 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x43, - 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, - 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x0a, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, - 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, - 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, 0x0c, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, - 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0d, - 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, - 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, - 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, + 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x32, + 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, + 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, + 0x10, 0x05, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x0f, 0x12, + 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, - 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, - 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, 0x0a, 0x37, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x53, 0x51, 0x4c, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, + 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, + 0x08, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x57, 0x49, + 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x0a, 0x12, + 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, + 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, 0x30, 0x0a, + 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, + 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, 0x0c, 0x12, + 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, + 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, + 0x54, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, + 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, + 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, - 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x4c, 0x45, - 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x47, + 0x43, 0x50, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, - 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, - 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, 0x42, 0x10, 0x14, 0x12, 0x32, 0x0a, 0x2e, + 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, 0x12, 0x2c, + 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, 0x0a, 0x37, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, - 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x10, 0x15, - 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, - 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, - 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, 0x43, 0x53, 0x45, 0x41, 0x52, - 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x17, - 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, - 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, 0x43, 0x41, 0x43, 0x48, 0x45, - 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, 0x52, 0x59, 0x44, 0x42, 0x10, - 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, - 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, - 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, - 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, - 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1b, 0x12, 0x2a, 0x0a, - 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, - 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, 0x12, 0x2e, 0x0a, 0x2a, 0x44, 0x49, 0x53, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, + 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, - 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, - 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, 0x10, 0x1e, 0x12, 0x36, 0x0a, - 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x43, 0x4b, - 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, - 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, + 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, 0x42, 0x10, + 0x14, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, + 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x50, 0x41, + 0x43, 0x45, 0x53, 0x10, 0x15, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x41, 0x54, 0x4c, 0x41, - 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, - 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, 0x4b, 0x45, 0x10, 0x21, 0x12, 0x2c, 0x0a, - 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, - 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x22, 0x12, 0x34, 0x0a, 0x30, 0x44, + 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x53, 0x45, + 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x48, 0x49, - 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x10, - 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x52, 0x45, 0x47, 0x49, - 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, + 0x43, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, + 0x54, 0x45, 0x44, 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, + 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, + 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, + 0x52, 0x59, 0x44, 0x42, 0x10, 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, + 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x55, + 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, + 0x10, 0x1b, 0x12, 0x2a, 0x0a, 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, 0x12, 0x2e, + 0x0a, 0x2a, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, 0x12, 0x32, + 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, + 0x10, 0x1e, 0x12, 0x36, 0x0a, 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x43, 0x4f, 0x43, 0x4b, 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, + 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x43, 0x32, 0x5f, 0x49, 0x4e, 0x53, 0x54, - 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, + 0x5f, 0x41, 0x54, 0x4c, 0x41, 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, 0x4b, 0x45, + 0x10, 0x21, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x22, + 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, + 0x53, 0x45, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x49, + 0x4c, 0x49, 0x54, 0x59, 0x10, 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, - 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x5f, - 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, - 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x45, 0x4b, 0x53, 0x10, 0x28, 0x2a, 0xa3, - 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, - 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, + 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, + 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x43, 0x32, + 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x12, 0x30, 0x0a, 0x2c, 0x44, + 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, + 0x4b, 0x54, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, + 0x20, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x45, 0x4b, + 0x53, 0x10, 0x28, 0x2a, 0xa3, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, + 0x53, 0x53, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, - 0x45, 0x44, 0x10, 0x04, 0x2a, 0xaf, 0x02, 0x0a, 0x03, 0x43, 0x54, 0x41, 0x12, 0x13, 0x0a, 0x0f, - 0x43, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f, - 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, - 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x43, - 0x54, 0x41, 0x5f, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, - 0x52, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x54, 0x52, 0x55, 0x53, - 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x05, 0x12, 0x16, 0x0a, - 0x12, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f, 0x42, 0x41, 0x4e, - 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x42, 0x49, 0x4c, - 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x07, 0x12, 0x13, - 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, - 0x53, 0x5f, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x1e, - 0x0a, 0x1a, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x41, - 0x55, 0x44, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x0a, 0x12, 0x16, - 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x53, 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x2a, 0xdc, 0x07, 0x0a, 0x15, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x4b, 0x69, 0x6e, 0x64, - 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, 0x4b, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, - 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, - 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x5f, 0x4f, 0x49, 0x44, 0x43, - 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x41, - 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, - 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, - 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x49, 0x52, 0x41, 0x10, 0x05, 0x12, 0x23, - 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, - 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x52, - 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, - 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, 0x10, 0x07, 0x12, 0x24, 0x0a, 0x20, 0x49, - 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, - 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x10, - 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x50, 0x53, - 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x04, 0x2a, 0xaf, 0x02, 0x0a, 0x03, 0x43, 0x54, + 0x41, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, + 0x54, 0x48, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, + 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, + 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, + 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, + 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, + 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, + 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, + 0x45, 0x5f, 0x42, 0x41, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, + 0x41, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, + 0x59, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, + 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, + 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, + 0x4e, 0x41, 0x4c, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, + 0x45, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, + 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x2a, 0xdc, 0x07, 0x0a, 0x15, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, + 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, + 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, 0x4b, 0x10, + 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x57, 0x53, + 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x0b, 0x12, 0x26, 0x0a, 0x22, 0x49, - 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, - 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, - 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, - 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0d, 0x12, 0x2f, 0x0a, 0x2b, 0x49, 0x4e, - 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, - 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, - 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, 0x10, 0x0e, 0x12, 0x2d, 0x0a, 0x29, 0x49, - 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, - 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, - 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x0f, 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, - 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, - 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, - 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, 0x10, 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, - 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, - 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, - 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x11, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, - 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, - 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, - 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, + 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, 0x12, 0x21, + 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, + 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x49, 0x52, + 0x41, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, + 0x49, 0x53, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, + 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, 0x10, 0x07, + 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, 0x5f, 0x54, + 0x45, 0x41, 0x4d, 0x53, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, - 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x43, 0x50, - 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, - 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x14, - 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x44, 0x5f, 0x4f, 0x50, 0x53, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, 0x1c, + 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, + 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, 0x12, 0x20, + 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x0b, + 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x4c, 0x49, 0x46, 0x54, - 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, - 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, - 0x54, 0x45, 0x53, 0x10, 0x16, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x20, - 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, - 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, - 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x02, - 0x2a, 0x3f, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x46, - 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, - 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, - 0x01, 0x2a, 0xa0, 0x01, 0x0a, 0x1b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, + 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, 0x54, 0x45, + 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, + 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0d, 0x12, + 0x2f, 0x0a, 0x2b, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, 0x10, 0x0e, + 0x12, 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, + 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x0f, 0x12, + 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, 0x10, 0x12, + 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x11, 0x12, + 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x49, + 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, + 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, + 0x44, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x5a, + 0x55, 0x52, 0x45, 0x10, 0x14, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, 0x41, 0x43, + 0x45, 0x4c, 0x49, 0x46, 0x54, 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x55, + 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x45, + 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, + 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x25, + 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, + 0x56, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x12, 0x17, 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, + 0x49, 0x43, 0x45, 0x53, 0x10, 0x01, 0x2a, 0xa0, 0x01, 0x0a, 0x1b, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, + 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, + 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x26, 0x0a, 0x22, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x2a, 0x0a, 0x26, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, - 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, - 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, - 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, - 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, - 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, - 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, - 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x01, 0x12, 0x29, - 0x0a, 0x25, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, - 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, - 0x4d, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x32, 0xb4, 0x02, 0x0a, 0x18, 0x54, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, - 0x88, 0x02, 0x01, 0x12, 0x5b, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0c, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x49, + 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, 0x4c, 0x49, 0x43, + 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, + 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x4a, 0x41, 0x4d, + 0x46, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, + 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, + 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x32, 0xb4, + 0x02, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5b, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x5e, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0xc9, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0d, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 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, 0x67, 0x65, 0x6e, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x0e, 0x50, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xca, 0x02, 0x0e, 0x50, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xe2, 0x02, 0x1a, - 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x50, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, + 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc9, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0d, 0x54, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 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, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, + 0xaa, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0xca, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x0f, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9654,7 +9864,7 @@ func file_prehog_v1alpha_teleport_proto_rawDescGZIP() []byte { } var file_prehog_v1alpha_teleport_proto_enumTypes = make([]protoimpl.EnumInfo, 12) -var file_prehog_v1alpha_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 90) +var file_prehog_v1alpha_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 92) var file_prehog_v1alpha_teleport_proto_goTypes = []interface{}{ (ResourceKind)(0), // 0: prehog.v1alpha.ResourceKind (UserKind)(0), // 1: prehog.v1alpha.UserKind @@ -9752,14 +9962,16 @@ var file_prehog_v1alpha_teleport_proto_goTypes = []interface{}{ (*AuditQueryRunEvent)(nil), // 93: prehog.v1alpha.AuditQueryRunEvent (*DiscoveryFetchEvent)(nil), // 94: prehog.v1alpha.DiscoveryFetchEvent (*OktaAccessListSyncEvent)(nil), // 95: prehog.v1alpha.OktaAccessListSyncEvent - (*SubmitEventRequest)(nil), // 96: prehog.v1alpha.SubmitEventRequest - (*SubmitEventResponse)(nil), // 97: prehog.v1alpha.SubmitEventResponse - (*SubmitEventsRequest)(nil), // 98: prehog.v1alpha.SubmitEventsRequest - (*SubmitEventsResponse)(nil), // 99: prehog.v1alpha.SubmitEventsResponse - (*HelloTeleportRequest)(nil), // 100: prehog.v1alpha.HelloTeleportRequest - (*HelloTeleportResponse)(nil), // 101: prehog.v1alpha.HelloTeleportResponse - (*durationpb.Duration)(nil), // 102: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 103: google.protobuf.Timestamp + (*DatabaseUserCreatedEvent)(nil), // 96: prehog.v1alpha.DatabaseUserCreatedEvent + (*DatabaseUserPermissionsUpdateEvent)(nil), // 97: prehog.v1alpha.DatabaseUserPermissionsUpdateEvent + (*SubmitEventRequest)(nil), // 98: prehog.v1alpha.SubmitEventRequest + (*SubmitEventResponse)(nil), // 99: prehog.v1alpha.SubmitEventResponse + (*SubmitEventsRequest)(nil), // 100: prehog.v1alpha.SubmitEventsRequest + (*SubmitEventsResponse)(nil), // 101: prehog.v1alpha.SubmitEventsResponse + (*HelloTeleportRequest)(nil), // 102: prehog.v1alpha.HelloTeleportRequest + (*HelloTeleportResponse)(nil), // 103: prehog.v1alpha.HelloTeleportResponse + (*durationpb.Duration)(nil), // 104: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 105: google.protobuf.Timestamp } var file_prehog_v1alpha_teleport_proto_depIdxs = []int32{ 16, // 0: prehog.v1alpha.ResourceCreateEvent.database:type_name -> prehog.v1alpha.DiscoveredDatabaseMetadata @@ -9767,7 +9979,7 @@ var file_prehog_v1alpha_teleport_proto_depIdxs = []int32{ 19, // 2: prehog.v1alpha.SessionStartEvent.database:type_name -> prehog.v1alpha.SessionStartDatabaseMetadata 20, // 3: prehog.v1alpha.SessionStartEvent.desktop:type_name -> prehog.v1alpha.SessionStartDesktopMetadata 1, // 4: prehog.v1alpha.SessionStartEvent.user_kind:type_name -> prehog.v1alpha.UserKind - 102, // 5: prehog.v1alpha.UserCertificateIssuedEvent.ttl:type_name -> google.protobuf.Duration + 104, // 5: prehog.v1alpha.UserCertificateIssuedEvent.ttl:type_name -> google.protobuf.Duration 1, // 6: prehog.v1alpha.SPIFFESVIDIssuedEvent.user_kind:type_name -> prehog.v1alpha.UserKind 2, // 7: prehog.v1alpha.DiscoverResourceMetadata.resource:type_name -> prehog.v1alpha.DiscoverResource 3, // 8: prehog.v1alpha.DiscoverStepStatus.status:type_name -> prehog.v1alpha.DiscoverStatus @@ -9841,96 +10053,100 @@ var file_prehog_v1alpha_teleport_proto_depIdxs = []int32{ 7, // 76: prehog.v1alpha.FeatureRecommendationEvent.feature:type_name -> prehog.v1alpha.Feature 8, // 77: prehog.v1alpha.FeatureRecommendationEvent.feature_recommendation_status:type_name -> prehog.v1alpha.FeatureRecommendationStatus 9, // 78: prehog.v1alpha.LicenseLimitEvent.license_limit:type_name -> prehog.v1alpha.LicenseLimit - 103, // 79: prehog.v1alpha.SubmitEventRequest.timestamp:type_name -> google.protobuf.Timestamp - 12, // 80: prehog.v1alpha.SubmitEventRequest.user_login:type_name -> prehog.v1alpha.UserLoginEvent - 14, // 81: prehog.v1alpha.SubmitEventRequest.sso_create:type_name -> prehog.v1alpha.SSOCreateEvent - 15, // 82: prehog.v1alpha.SubmitEventRequest.resource_create:type_name -> prehog.v1alpha.ResourceCreateEvent - 18, // 83: prehog.v1alpha.SubmitEventRequest.session_start:type_name -> prehog.v1alpha.SessionStartEvent - 23, // 84: prehog.v1alpha.SubmitEventRequest.ui_banner_click:type_name -> prehog.v1alpha.UIBannerClickEvent - 24, // 85: prehog.v1alpha.SubmitEventRequest.ui_onboard_complete_go_to_dashboard_click:type_name -> prehog.v1alpha.UIOnboardCompleteGoToDashboardClickEvent - 25, // 86: prehog.v1alpha.SubmitEventRequest.ui_onboard_add_first_resource_click:type_name -> prehog.v1alpha.UIOnboardAddFirstResourceClickEvent - 26, // 87: prehog.v1alpha.SubmitEventRequest.ui_onboard_add_first_resource_later_click:type_name -> prehog.v1alpha.UIOnboardAddFirstResourceLaterClickEvent - 27, // 88: prehog.v1alpha.SubmitEventRequest.ui_onboard_set_credential_submit:type_name -> prehog.v1alpha.UIOnboardSetCredentialSubmitEvent - 28, // 89: prehog.v1alpha.SubmitEventRequest.ui_onboard_register_challenge_submit:type_name -> prehog.v1alpha.UIOnboardRegisterChallengeSubmitEvent - 30, // 90: prehog.v1alpha.SubmitEventRequest.ui_recovery_codes_continue_click:type_name -> prehog.v1alpha.UIRecoveryCodesContinueClickEvent - 31, // 91: prehog.v1alpha.SubmitEventRequest.ui_recovery_codes_copy_click:type_name -> prehog.v1alpha.UIRecoveryCodesCopyClickEvent - 32, // 92: prehog.v1alpha.SubmitEventRequest.ui_recovery_codes_print_click:type_name -> prehog.v1alpha.UIRecoveryCodesPrintClickEvent - 36, // 93: prehog.v1alpha.SubmitEventRequest.ui_discover_started_event:type_name -> prehog.v1alpha.UIDiscoverStartedEvent - 37, // 94: prehog.v1alpha.SubmitEventRequest.ui_discover_resource_selection_event:type_name -> prehog.v1alpha.UIDiscoverResourceSelectionEvent - 21, // 95: prehog.v1alpha.SubmitEventRequest.user_certificate_issued_event:type_name -> prehog.v1alpha.UserCertificateIssuedEvent - 18, // 96: prehog.v1alpha.SubmitEventRequest.session_start_v2:type_name -> prehog.v1alpha.SessionStartEvent - 40, // 97: prehog.v1alpha.SubmitEventRequest.ui_discover_deploy_service_event:type_name -> prehog.v1alpha.UIDiscoverDeployServiceEvent - 41, // 98: prehog.v1alpha.SubmitEventRequest.ui_discover_database_register_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseRegisterEvent - 42, // 99: prehog.v1alpha.SubmitEventRequest.ui_discover_database_configure_mtls_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseConfigureMTLSEvent - 43, // 100: prehog.v1alpha.SubmitEventRequest.ui_discover_desktop_active_directory_tools_install_event:type_name -> prehog.v1alpha.UIDiscoverDesktopActiveDirectoryToolsInstallEvent - 44, // 101: prehog.v1alpha.SubmitEventRequest.ui_discover_desktop_active_directory_configure_event:type_name -> prehog.v1alpha.UIDiscoverDesktopActiveDirectoryConfigureEvent - 45, // 102: prehog.v1alpha.SubmitEventRequest.ui_discover_auto_discovered_resources_event:type_name -> prehog.v1alpha.UIDiscoverAutoDiscoveredResourcesEvent - 49, // 103: prehog.v1alpha.SubmitEventRequest.ui_discover_database_configure_iam_policy_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseConfigureIAMPolicyEvent - 50, // 104: prehog.v1alpha.SubmitEventRequest.ui_discover_principals_configure_event:type_name -> prehog.v1alpha.UIDiscoverPrincipalsConfigureEvent - 51, // 105: prehog.v1alpha.SubmitEventRequest.ui_discover_test_connection_event:type_name -> prehog.v1alpha.UIDiscoverTestConnectionEvent - 52, // 106: prehog.v1alpha.SubmitEventRequest.ui_discover_completed_event:type_name -> prehog.v1alpha.UIDiscoverCompletedEvent - 53, // 107: prehog.v1alpha.SubmitEventRequest.role_create:type_name -> prehog.v1alpha.RoleCreateEvent - 56, // 108: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_click:type_name -> prehog.v1alpha.UICreateNewRoleClickEvent - 57, // 109: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_save_click:type_name -> prehog.v1alpha.UICreateNewRoleSaveClickEvent - 58, // 110: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_cancel_click:type_name -> prehog.v1alpha.UICreateNewRoleCancelClickEvent - 59, // 111: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_view_documentation_click:type_name -> prehog.v1alpha.UICreateNewRoleViewDocumentationClickEvent - 61, // 112: prehog.v1alpha.SubmitEventRequest.kube_request:type_name -> prehog.v1alpha.KubeRequestEvent - 62, // 113: prehog.v1alpha.SubmitEventRequest.sftp:type_name -> prehog.v1alpha.SFTPEvent - 63, // 114: prehog.v1alpha.SubmitEventRequest.agent_metadata_event:type_name -> prehog.v1alpha.AgentMetadataEvent - 17, // 115: prehog.v1alpha.SubmitEventRequest.resource_heartbeat:type_name -> prehog.v1alpha.ResourceHeartbeatEvent - 38, // 116: prehog.v1alpha.SubmitEventRequest.ui_discover_integration_aws_oidc_connect_event:type_name -> prehog.v1alpha.UIDiscoverIntegrationAWSOIDCConnectEvent - 39, // 117: prehog.v1alpha.SubmitEventRequest.ui_discover_database_rds_enroll_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseRDSEnrollEvent - 60, // 118: prehog.v1alpha.SubmitEventRequest.ui_call_to_action_click_event:type_name -> prehog.v1alpha.UICallToActionClickEvent - 64, // 119: prehog.v1alpha.SubmitEventRequest.assist_completion:type_name -> prehog.v1alpha.AssistCompletionEvent - 81, // 120: prehog.v1alpha.SubmitEventRequest.ui_integration_enroll_start_event:type_name -> prehog.v1alpha.UIIntegrationEnrollStartEvent - 82, // 121: prehog.v1alpha.SubmitEventRequest.ui_integration_enroll_complete_event:type_name -> prehog.v1alpha.UIIntegrationEnrollCompleteEvent - 83, // 122: prehog.v1alpha.SubmitEventRequest.editor_change_event:type_name -> prehog.v1alpha.EditorChangeEvent - 54, // 123: prehog.v1alpha.SubmitEventRequest.bot_create:type_name -> prehog.v1alpha.BotCreateEvent - 29, // 124: prehog.v1alpha.SubmitEventRequest.ui_onboard_questionnaire_submit:type_name -> prehog.v1alpha.UIOnboardQuestionnaireSubmitEvent - 55, // 125: prehog.v1alpha.SubmitEventRequest.bot_join:type_name -> prehog.v1alpha.BotJoinEvent - 65, // 126: prehog.v1alpha.SubmitEventRequest.assist_execution:type_name -> prehog.v1alpha.AssistExecutionEvent - 66, // 127: prehog.v1alpha.SubmitEventRequest.assist_new_conversation:type_name -> prehog.v1alpha.AssistNewConversationEvent - 84, // 128: prehog.v1alpha.SubmitEventRequest.device_authenticate_event:type_name -> prehog.v1alpha.DeviceAuthenticateEvent - 86, // 129: prehog.v1alpha.SubmitEventRequest.feature_recommendation_event:type_name -> prehog.v1alpha.FeatureRecommendationEvent - 67, // 130: prehog.v1alpha.SubmitEventRequest.assist_access_request:type_name -> prehog.v1alpha.AssistAccessRequestEvent - 68, // 131: prehog.v1alpha.SubmitEventRequest.assist_action:type_name -> prehog.v1alpha.AssistActionEvent - 85, // 132: prehog.v1alpha.SubmitEventRequest.device_enroll_event:type_name -> prehog.v1alpha.DeviceEnrollEvent - 87, // 133: prehog.v1alpha.SubmitEventRequest.license_limit_event:type_name -> prehog.v1alpha.LicenseLimitEvent - 70, // 134: prehog.v1alpha.SubmitEventRequest.access_list_create:type_name -> prehog.v1alpha.AccessListCreateEvent - 71, // 135: prehog.v1alpha.SubmitEventRequest.access_list_update:type_name -> prehog.v1alpha.AccessListUpdateEvent - 72, // 136: prehog.v1alpha.SubmitEventRequest.access_list_delete:type_name -> prehog.v1alpha.AccessListDeleteEvent - 73, // 137: prehog.v1alpha.SubmitEventRequest.access_list_member_create:type_name -> prehog.v1alpha.AccessListMemberCreateEvent - 74, // 138: prehog.v1alpha.SubmitEventRequest.access_list_member_update:type_name -> prehog.v1alpha.AccessListMemberUpdateEvent - 75, // 139: prehog.v1alpha.SubmitEventRequest.access_list_member_delete:type_name -> prehog.v1alpha.AccessListMemberDeleteEvent - 76, // 140: prehog.v1alpha.SubmitEventRequest.access_list_grants_to_user:type_name -> prehog.v1alpha.AccessListGrantsToUserEvent - 46, // 141: prehog.v1alpha.SubmitEventRequest.ui_discover_ec2_instance_selection:type_name -> prehog.v1alpha.UIDiscoverEC2InstanceSelectionEvent - 47, // 142: prehog.v1alpha.SubmitEventRequest.ui_discover_deploy_eice:type_name -> prehog.v1alpha.UIDiscoverDeployEICEEvent - 48, // 143: prehog.v1alpha.SubmitEventRequest.ui_discover_create_node:type_name -> prehog.v1alpha.UIDiscoverCreateNodeEvent - 88, // 144: prehog.v1alpha.SubmitEventRequest.desktop_directory_share:type_name -> prehog.v1alpha.DesktopDirectoryShareEvent - 89, // 145: prehog.v1alpha.SubmitEventRequest.desktop_clipboard_transfer:type_name -> prehog.v1alpha.DesktopClipboardEvent - 90, // 146: prehog.v1alpha.SubmitEventRequest.tag_execute_query:type_name -> prehog.v1alpha.TAGExecuteQueryEvent - 91, // 147: prehog.v1alpha.SubmitEventRequest.external_audit_storage_authenticate:type_name -> prehog.v1alpha.ExternalAuditStorageAuthenticateEvent - 92, // 148: prehog.v1alpha.SubmitEventRequest.security_report_get_result:type_name -> prehog.v1alpha.SecurityReportGetResultEvent - 93, // 149: prehog.v1alpha.SubmitEventRequest.audit_query_run:type_name -> prehog.v1alpha.AuditQueryRunEvent - 94, // 150: prehog.v1alpha.SubmitEventRequest.discovery_fetch_event:type_name -> prehog.v1alpha.DiscoveryFetchEvent - 77, // 151: prehog.v1alpha.SubmitEventRequest.access_list_review_create:type_name -> prehog.v1alpha.AccessListReviewCreateEvent - 78, // 152: prehog.v1alpha.SubmitEventRequest.access_list_review_delete:type_name -> prehog.v1alpha.AccessListReviewDeleteEvent - 79, // 153: prehog.v1alpha.SubmitEventRequest.access_list_review_compliance:type_name -> prehog.v1alpha.AccessListReviewComplianceEvent - 13, // 154: prehog.v1alpha.SubmitEventRequest.mfa_authentication_event:type_name -> prehog.v1alpha.MFAAuthenticationEvent - 22, // 155: prehog.v1alpha.SubmitEventRequest.spiffe_svid_issued:type_name -> prehog.v1alpha.SPIFFESVIDIssuedEvent - 95, // 156: prehog.v1alpha.SubmitEventRequest.okta_access_list_sync:type_name -> prehog.v1alpha.OktaAccessListSyncEvent - 96, // 157: prehog.v1alpha.SubmitEventsRequest.events:type_name -> prehog.v1alpha.SubmitEventRequest - 96, // 158: prehog.v1alpha.TeleportReportingService.SubmitEvent:input_type -> prehog.v1alpha.SubmitEventRequest - 98, // 159: prehog.v1alpha.TeleportReportingService.SubmitEvents:input_type -> prehog.v1alpha.SubmitEventsRequest - 100, // 160: prehog.v1alpha.TeleportReportingService.HelloTeleport:input_type -> prehog.v1alpha.HelloTeleportRequest - 97, // 161: prehog.v1alpha.TeleportReportingService.SubmitEvent:output_type -> prehog.v1alpha.SubmitEventResponse - 99, // 162: prehog.v1alpha.TeleportReportingService.SubmitEvents:output_type -> prehog.v1alpha.SubmitEventsResponse - 101, // 163: prehog.v1alpha.TeleportReportingService.HelloTeleport:output_type -> prehog.v1alpha.HelloTeleportResponse - 161, // [161:164] is the sub-list for method output_type - 158, // [158:161] is the sub-list for method input_type - 158, // [158:158] is the sub-list for extension type_name - 158, // [158:158] is the sub-list for extension extendee - 0, // [0:158] is the sub-list for field type_name + 19, // 79: prehog.v1alpha.DatabaseUserCreatedEvent.database:type_name -> prehog.v1alpha.SessionStartDatabaseMetadata + 19, // 80: prehog.v1alpha.DatabaseUserPermissionsUpdateEvent.database:type_name -> prehog.v1alpha.SessionStartDatabaseMetadata + 105, // 81: prehog.v1alpha.SubmitEventRequest.timestamp:type_name -> google.protobuf.Timestamp + 12, // 82: prehog.v1alpha.SubmitEventRequest.user_login:type_name -> prehog.v1alpha.UserLoginEvent + 14, // 83: prehog.v1alpha.SubmitEventRequest.sso_create:type_name -> prehog.v1alpha.SSOCreateEvent + 15, // 84: prehog.v1alpha.SubmitEventRequest.resource_create:type_name -> prehog.v1alpha.ResourceCreateEvent + 18, // 85: prehog.v1alpha.SubmitEventRequest.session_start:type_name -> prehog.v1alpha.SessionStartEvent + 23, // 86: prehog.v1alpha.SubmitEventRequest.ui_banner_click:type_name -> prehog.v1alpha.UIBannerClickEvent + 24, // 87: prehog.v1alpha.SubmitEventRequest.ui_onboard_complete_go_to_dashboard_click:type_name -> prehog.v1alpha.UIOnboardCompleteGoToDashboardClickEvent + 25, // 88: prehog.v1alpha.SubmitEventRequest.ui_onboard_add_first_resource_click:type_name -> prehog.v1alpha.UIOnboardAddFirstResourceClickEvent + 26, // 89: prehog.v1alpha.SubmitEventRequest.ui_onboard_add_first_resource_later_click:type_name -> prehog.v1alpha.UIOnboardAddFirstResourceLaterClickEvent + 27, // 90: prehog.v1alpha.SubmitEventRequest.ui_onboard_set_credential_submit:type_name -> prehog.v1alpha.UIOnboardSetCredentialSubmitEvent + 28, // 91: prehog.v1alpha.SubmitEventRequest.ui_onboard_register_challenge_submit:type_name -> prehog.v1alpha.UIOnboardRegisterChallengeSubmitEvent + 30, // 92: prehog.v1alpha.SubmitEventRequest.ui_recovery_codes_continue_click:type_name -> prehog.v1alpha.UIRecoveryCodesContinueClickEvent + 31, // 93: prehog.v1alpha.SubmitEventRequest.ui_recovery_codes_copy_click:type_name -> prehog.v1alpha.UIRecoveryCodesCopyClickEvent + 32, // 94: prehog.v1alpha.SubmitEventRequest.ui_recovery_codes_print_click:type_name -> prehog.v1alpha.UIRecoveryCodesPrintClickEvent + 36, // 95: prehog.v1alpha.SubmitEventRequest.ui_discover_started_event:type_name -> prehog.v1alpha.UIDiscoverStartedEvent + 37, // 96: prehog.v1alpha.SubmitEventRequest.ui_discover_resource_selection_event:type_name -> prehog.v1alpha.UIDiscoverResourceSelectionEvent + 21, // 97: prehog.v1alpha.SubmitEventRequest.user_certificate_issued_event:type_name -> prehog.v1alpha.UserCertificateIssuedEvent + 18, // 98: prehog.v1alpha.SubmitEventRequest.session_start_v2:type_name -> prehog.v1alpha.SessionStartEvent + 40, // 99: prehog.v1alpha.SubmitEventRequest.ui_discover_deploy_service_event:type_name -> prehog.v1alpha.UIDiscoverDeployServiceEvent + 41, // 100: prehog.v1alpha.SubmitEventRequest.ui_discover_database_register_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseRegisterEvent + 42, // 101: prehog.v1alpha.SubmitEventRequest.ui_discover_database_configure_mtls_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseConfigureMTLSEvent + 43, // 102: prehog.v1alpha.SubmitEventRequest.ui_discover_desktop_active_directory_tools_install_event:type_name -> prehog.v1alpha.UIDiscoverDesktopActiveDirectoryToolsInstallEvent + 44, // 103: prehog.v1alpha.SubmitEventRequest.ui_discover_desktop_active_directory_configure_event:type_name -> prehog.v1alpha.UIDiscoverDesktopActiveDirectoryConfigureEvent + 45, // 104: prehog.v1alpha.SubmitEventRequest.ui_discover_auto_discovered_resources_event:type_name -> prehog.v1alpha.UIDiscoverAutoDiscoveredResourcesEvent + 49, // 105: prehog.v1alpha.SubmitEventRequest.ui_discover_database_configure_iam_policy_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseConfigureIAMPolicyEvent + 50, // 106: prehog.v1alpha.SubmitEventRequest.ui_discover_principals_configure_event:type_name -> prehog.v1alpha.UIDiscoverPrincipalsConfigureEvent + 51, // 107: prehog.v1alpha.SubmitEventRequest.ui_discover_test_connection_event:type_name -> prehog.v1alpha.UIDiscoverTestConnectionEvent + 52, // 108: prehog.v1alpha.SubmitEventRequest.ui_discover_completed_event:type_name -> prehog.v1alpha.UIDiscoverCompletedEvent + 53, // 109: prehog.v1alpha.SubmitEventRequest.role_create:type_name -> prehog.v1alpha.RoleCreateEvent + 56, // 110: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_click:type_name -> prehog.v1alpha.UICreateNewRoleClickEvent + 57, // 111: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_save_click:type_name -> prehog.v1alpha.UICreateNewRoleSaveClickEvent + 58, // 112: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_cancel_click:type_name -> prehog.v1alpha.UICreateNewRoleCancelClickEvent + 59, // 113: prehog.v1alpha.SubmitEventRequest.ui_create_new_role_view_documentation_click:type_name -> prehog.v1alpha.UICreateNewRoleViewDocumentationClickEvent + 61, // 114: prehog.v1alpha.SubmitEventRequest.kube_request:type_name -> prehog.v1alpha.KubeRequestEvent + 62, // 115: prehog.v1alpha.SubmitEventRequest.sftp:type_name -> prehog.v1alpha.SFTPEvent + 63, // 116: prehog.v1alpha.SubmitEventRequest.agent_metadata_event:type_name -> prehog.v1alpha.AgentMetadataEvent + 17, // 117: prehog.v1alpha.SubmitEventRequest.resource_heartbeat:type_name -> prehog.v1alpha.ResourceHeartbeatEvent + 38, // 118: prehog.v1alpha.SubmitEventRequest.ui_discover_integration_aws_oidc_connect_event:type_name -> prehog.v1alpha.UIDiscoverIntegrationAWSOIDCConnectEvent + 39, // 119: prehog.v1alpha.SubmitEventRequest.ui_discover_database_rds_enroll_event:type_name -> prehog.v1alpha.UIDiscoverDatabaseRDSEnrollEvent + 60, // 120: prehog.v1alpha.SubmitEventRequest.ui_call_to_action_click_event:type_name -> prehog.v1alpha.UICallToActionClickEvent + 64, // 121: prehog.v1alpha.SubmitEventRequest.assist_completion:type_name -> prehog.v1alpha.AssistCompletionEvent + 81, // 122: prehog.v1alpha.SubmitEventRequest.ui_integration_enroll_start_event:type_name -> prehog.v1alpha.UIIntegrationEnrollStartEvent + 82, // 123: prehog.v1alpha.SubmitEventRequest.ui_integration_enroll_complete_event:type_name -> prehog.v1alpha.UIIntegrationEnrollCompleteEvent + 83, // 124: prehog.v1alpha.SubmitEventRequest.editor_change_event:type_name -> prehog.v1alpha.EditorChangeEvent + 54, // 125: prehog.v1alpha.SubmitEventRequest.bot_create:type_name -> prehog.v1alpha.BotCreateEvent + 29, // 126: prehog.v1alpha.SubmitEventRequest.ui_onboard_questionnaire_submit:type_name -> prehog.v1alpha.UIOnboardQuestionnaireSubmitEvent + 55, // 127: prehog.v1alpha.SubmitEventRequest.bot_join:type_name -> prehog.v1alpha.BotJoinEvent + 65, // 128: prehog.v1alpha.SubmitEventRequest.assist_execution:type_name -> prehog.v1alpha.AssistExecutionEvent + 66, // 129: prehog.v1alpha.SubmitEventRequest.assist_new_conversation:type_name -> prehog.v1alpha.AssistNewConversationEvent + 84, // 130: prehog.v1alpha.SubmitEventRequest.device_authenticate_event:type_name -> prehog.v1alpha.DeviceAuthenticateEvent + 86, // 131: prehog.v1alpha.SubmitEventRequest.feature_recommendation_event:type_name -> prehog.v1alpha.FeatureRecommendationEvent + 67, // 132: prehog.v1alpha.SubmitEventRequest.assist_access_request:type_name -> prehog.v1alpha.AssistAccessRequestEvent + 68, // 133: prehog.v1alpha.SubmitEventRequest.assist_action:type_name -> prehog.v1alpha.AssistActionEvent + 85, // 134: prehog.v1alpha.SubmitEventRequest.device_enroll_event:type_name -> prehog.v1alpha.DeviceEnrollEvent + 87, // 135: prehog.v1alpha.SubmitEventRequest.license_limit_event:type_name -> prehog.v1alpha.LicenseLimitEvent + 70, // 136: prehog.v1alpha.SubmitEventRequest.access_list_create:type_name -> prehog.v1alpha.AccessListCreateEvent + 71, // 137: prehog.v1alpha.SubmitEventRequest.access_list_update:type_name -> prehog.v1alpha.AccessListUpdateEvent + 72, // 138: prehog.v1alpha.SubmitEventRequest.access_list_delete:type_name -> prehog.v1alpha.AccessListDeleteEvent + 73, // 139: prehog.v1alpha.SubmitEventRequest.access_list_member_create:type_name -> prehog.v1alpha.AccessListMemberCreateEvent + 74, // 140: prehog.v1alpha.SubmitEventRequest.access_list_member_update:type_name -> prehog.v1alpha.AccessListMemberUpdateEvent + 75, // 141: prehog.v1alpha.SubmitEventRequest.access_list_member_delete:type_name -> prehog.v1alpha.AccessListMemberDeleteEvent + 76, // 142: prehog.v1alpha.SubmitEventRequest.access_list_grants_to_user:type_name -> prehog.v1alpha.AccessListGrantsToUserEvent + 46, // 143: prehog.v1alpha.SubmitEventRequest.ui_discover_ec2_instance_selection:type_name -> prehog.v1alpha.UIDiscoverEC2InstanceSelectionEvent + 47, // 144: prehog.v1alpha.SubmitEventRequest.ui_discover_deploy_eice:type_name -> prehog.v1alpha.UIDiscoverDeployEICEEvent + 48, // 145: prehog.v1alpha.SubmitEventRequest.ui_discover_create_node:type_name -> prehog.v1alpha.UIDiscoverCreateNodeEvent + 88, // 146: prehog.v1alpha.SubmitEventRequest.desktop_directory_share:type_name -> prehog.v1alpha.DesktopDirectoryShareEvent + 89, // 147: prehog.v1alpha.SubmitEventRequest.desktop_clipboard_transfer:type_name -> prehog.v1alpha.DesktopClipboardEvent + 90, // 148: prehog.v1alpha.SubmitEventRequest.tag_execute_query:type_name -> prehog.v1alpha.TAGExecuteQueryEvent + 91, // 149: prehog.v1alpha.SubmitEventRequest.external_audit_storage_authenticate:type_name -> prehog.v1alpha.ExternalAuditStorageAuthenticateEvent + 92, // 150: prehog.v1alpha.SubmitEventRequest.security_report_get_result:type_name -> prehog.v1alpha.SecurityReportGetResultEvent + 93, // 151: prehog.v1alpha.SubmitEventRequest.audit_query_run:type_name -> prehog.v1alpha.AuditQueryRunEvent + 94, // 152: prehog.v1alpha.SubmitEventRequest.discovery_fetch_event:type_name -> prehog.v1alpha.DiscoveryFetchEvent + 77, // 153: prehog.v1alpha.SubmitEventRequest.access_list_review_create:type_name -> prehog.v1alpha.AccessListReviewCreateEvent + 78, // 154: prehog.v1alpha.SubmitEventRequest.access_list_review_delete:type_name -> prehog.v1alpha.AccessListReviewDeleteEvent + 79, // 155: prehog.v1alpha.SubmitEventRequest.access_list_review_compliance:type_name -> prehog.v1alpha.AccessListReviewComplianceEvent + 13, // 156: prehog.v1alpha.SubmitEventRequest.mfa_authentication_event:type_name -> prehog.v1alpha.MFAAuthenticationEvent + 22, // 157: prehog.v1alpha.SubmitEventRequest.spiffe_svid_issued:type_name -> prehog.v1alpha.SPIFFESVIDIssuedEvent + 95, // 158: prehog.v1alpha.SubmitEventRequest.okta_access_list_sync:type_name -> prehog.v1alpha.OktaAccessListSyncEvent + 96, // 159: prehog.v1alpha.SubmitEventRequest.database_user_created:type_name -> prehog.v1alpha.DatabaseUserCreatedEvent + 97, // 160: prehog.v1alpha.SubmitEventRequest.database_user_permissions_updated:type_name -> prehog.v1alpha.DatabaseUserPermissionsUpdateEvent + 98, // 161: prehog.v1alpha.SubmitEventsRequest.events:type_name -> prehog.v1alpha.SubmitEventRequest + 98, // 162: prehog.v1alpha.TeleportReportingService.SubmitEvent:input_type -> prehog.v1alpha.SubmitEventRequest + 100, // 163: prehog.v1alpha.TeleportReportingService.SubmitEvents:input_type -> prehog.v1alpha.SubmitEventsRequest + 102, // 164: prehog.v1alpha.TeleportReportingService.HelloTeleport:input_type -> prehog.v1alpha.HelloTeleportRequest + 99, // 165: prehog.v1alpha.TeleportReportingService.SubmitEvent:output_type -> prehog.v1alpha.SubmitEventResponse + 101, // 166: prehog.v1alpha.TeleportReportingService.SubmitEvents:output_type -> prehog.v1alpha.SubmitEventsResponse + 103, // 167: prehog.v1alpha.TeleportReportingService.HelloTeleport:output_type -> prehog.v1alpha.HelloTeleportResponse + 165, // [165:168] is the sub-list for method output_type + 162, // [162:165] is the sub-list for method input_type + 162, // [162:162] is the sub-list for extension type_name + 162, // [162:162] is the sub-list for extension extendee + 0, // [0:162] is the sub-list for field type_name } func init() { file_prehog_v1alpha_teleport_proto_init() } @@ -10948,7 +11164,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventRequest); i { + switch v := v.(*DatabaseUserCreatedEvent); i { case 0: return &v.state case 1: @@ -10960,7 +11176,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventResponse); i { + switch v := v.(*DatabaseUserPermissionsUpdateEvent); i { case 0: return &v.state case 1: @@ -10972,7 +11188,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventsRequest); i { + switch v := v.(*SubmitEventRequest); i { case 0: return &v.state case 1: @@ -10984,7 +11200,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventsResponse); i { + switch v := v.(*SubmitEventResponse); i { case 0: return &v.state case 1: @@ -10996,7 +11212,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HelloTeleportRequest); i { + switch v := v.(*SubmitEventsRequest); i { case 0: return &v.state case 1: @@ -11008,6 +11224,30 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubmitEventsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_prehog_v1alpha_teleport_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HelloTeleportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_prehog_v1alpha_teleport_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HelloTeleportResponse); i { case 0: return &v.state @@ -11020,7 +11260,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } } - file_prehog_v1alpha_teleport_proto_msgTypes[84].OneofWrappers = []interface{}{ + file_prehog_v1alpha_teleport_proto_msgTypes[86].OneofWrappers = []interface{}{ (*SubmitEventRequest_UserLogin)(nil), (*SubmitEventRequest_SsoCreate)(nil), (*SubmitEventRequest_ResourceCreate)(nil), @@ -11098,6 +11338,8 @@ func file_prehog_v1alpha_teleport_proto_init() { (*SubmitEventRequest_MfaAuthenticationEvent)(nil), (*SubmitEventRequest_SpiffeSvidIssued)(nil), (*SubmitEventRequest_OktaAccessListSync)(nil), + (*SubmitEventRequest_DatabaseUserCreated)(nil), + (*SubmitEventRequest_DatabaseUserPermissionsUpdated)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -11105,7 +11347,7 @@ func file_prehog_v1alpha_teleport_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_prehog_v1alpha_teleport_proto_rawDesc, NumEnums: 12, - NumMessages: 90, + NumMessages: 92, NumExtensions: 0, NumServices: 1, }, diff --git a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts index e167b6e80b344..16399375c2863 100644 --- a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts +++ b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts @@ -2173,6 +2173,63 @@ export interface OktaAccessListSyncEvent { */ numAccessListMembers: number; } +/** + * DatabaseUserCreatedEvent is an event that is emitted after database service performs automatic user provisioning. + * + * @generated from protobuf message prehog.v1alpha.DatabaseUserCreatedEvent + */ +export interface DatabaseUserCreatedEvent { + /** + * Database metadata. + * + * @generated from protobuf field: prehog.v1alpha.SessionStartDatabaseMetadata database = 1; + */ + database?: SessionStartDatabaseMetadata; + /** + * Teleport user name. Anonymized. + * + * @generated from protobuf field: string user_name = 2; + */ + userName: string; + /** + * Number of database roles. + * + * @generated from protobuf field: int32 num_roles = 3; + */ + numRoles: number; +} +/** + * DatabaseUserPermissionsUpdateEvent is an event that is emitted after database service updates the permissions for the database user. + * + * @generated from protobuf message prehog.v1alpha.DatabaseUserPermissionsUpdateEvent + */ +export interface DatabaseUserPermissionsUpdateEvent { + /** + * Database metadata. + * + * @generated from protobuf field: prehog.v1alpha.SessionStartDatabaseMetadata database = 1; + */ + database?: SessionStartDatabaseMetadata; + /** + * Teleport user name. Anonymized. + * + * @generated from protobuf field: string user_name = 2; + */ + userName: string; + /** + * How many tables were affected. + * + * @generated from protobuf field: int32 num_tables = 3; + */ + numTables: number; + /** + * How many total table permissions were given to the user. + * For example {SELECT,UPDATE} on ten tables gives a total of twenty. + * + * @generated from protobuf field: int32 num_tables_permissions = 4; + */ + numTablesPermissions: number; +} /** * @generated from protobuf message prehog.v1alpha.SubmitEventRequest */ @@ -2665,6 +2722,18 @@ export interface SubmitEventRequest { * @generated from protobuf field: prehog.v1alpha.OktaAccessListSyncEvent okta_access_list_sync = 80; */ oktaAccessListSync: OktaAccessListSyncEvent; + } | { + oneofKind: "databaseUserCreated"; + /** + * @generated from protobuf field: prehog.v1alpha.DatabaseUserCreatedEvent database_user_created = 81; + */ + databaseUserCreated: DatabaseUserCreatedEvent; + } | { + oneofKind: "databaseUserPermissionsUpdated"; + /** + * @generated from protobuf field: prehog.v1alpha.DatabaseUserPermissionsUpdateEvent database_user_permissions_updated = 82; + */ + databaseUserPermissionsUpdated: DatabaseUserPermissionsUpdateEvent; } | { oneofKind: undefined; }; @@ -8411,6 +8480,138 @@ class OktaAccessListSyncEvent$Type extends MessageType */ export const OktaAccessListSyncEvent = new OktaAccessListSyncEvent$Type(); // @generated message type with reflection information, may provide speed optimized methods +class DatabaseUserCreatedEvent$Type extends MessageType { + constructor() { + super("prehog.v1alpha.DatabaseUserCreatedEvent", [ + { no: 1, name: "database", kind: "message", T: () => SessionStartDatabaseMetadata }, + { no: 2, name: "user_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "num_roles", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): DatabaseUserCreatedEvent { + const message = globalThis.Object.create((this.messagePrototype!)); + message.userName = ""; + message.numRoles = 0; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DatabaseUserCreatedEvent): DatabaseUserCreatedEvent { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* prehog.v1alpha.SessionStartDatabaseMetadata database */ 1: + message.database = SessionStartDatabaseMetadata.internalBinaryRead(reader, reader.uint32(), options, message.database); + break; + case /* string user_name */ 2: + message.userName = reader.string(); + break; + case /* int32 num_roles */ 3: + message.numRoles = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DatabaseUserCreatedEvent, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* prehog.v1alpha.SessionStartDatabaseMetadata database = 1; */ + if (message.database) + SessionStartDatabaseMetadata.internalBinaryWrite(message.database, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string user_name = 2; */ + if (message.userName !== "") + writer.tag(2, WireType.LengthDelimited).string(message.userName); + /* int32 num_roles = 3; */ + if (message.numRoles !== 0) + writer.tag(3, WireType.Varint).int32(message.numRoles); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message prehog.v1alpha.DatabaseUserCreatedEvent + */ +export const DatabaseUserCreatedEvent = new DatabaseUserCreatedEvent$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DatabaseUserPermissionsUpdateEvent$Type extends MessageType { + constructor() { + super("prehog.v1alpha.DatabaseUserPermissionsUpdateEvent", [ + { no: 1, name: "database", kind: "message", T: () => SessionStartDatabaseMetadata }, + { no: 2, name: "user_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "num_tables", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 4, name: "num_tables_permissions", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): DatabaseUserPermissionsUpdateEvent { + const message = globalThis.Object.create((this.messagePrototype!)); + message.userName = ""; + message.numTables = 0; + message.numTablesPermissions = 0; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DatabaseUserPermissionsUpdateEvent): DatabaseUserPermissionsUpdateEvent { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* prehog.v1alpha.SessionStartDatabaseMetadata database */ 1: + message.database = SessionStartDatabaseMetadata.internalBinaryRead(reader, reader.uint32(), options, message.database); + break; + case /* string user_name */ 2: + message.userName = reader.string(); + break; + case /* int32 num_tables */ 3: + message.numTables = reader.int32(); + break; + case /* int32 num_tables_permissions */ 4: + message.numTablesPermissions = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DatabaseUserPermissionsUpdateEvent, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* prehog.v1alpha.SessionStartDatabaseMetadata database = 1; */ + if (message.database) + SessionStartDatabaseMetadata.internalBinaryWrite(message.database, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string user_name = 2; */ + if (message.userName !== "") + writer.tag(2, WireType.LengthDelimited).string(message.userName); + /* int32 num_tables = 3; */ + if (message.numTables !== 0) + writer.tag(3, WireType.Varint).int32(message.numTables); + /* int32 num_tables_permissions = 4; */ + if (message.numTablesPermissions !== 0) + writer.tag(4, WireType.Varint).int32(message.numTablesPermissions); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message prehog.v1alpha.DatabaseUserPermissionsUpdateEvent + */ +export const DatabaseUserPermissionsUpdateEvent = new DatabaseUserPermissionsUpdateEvent$Type(); +// @generated message type with reflection information, may provide speed optimized methods class SubmitEventRequest$Type extends MessageType { constructor() { super("prehog.v1alpha.SubmitEventRequest", [ @@ -8492,7 +8693,9 @@ class SubmitEventRequest$Type extends MessageType { { no: 77, name: "access_list_review_compliance", kind: "message", oneof: "event", T: () => AccessListReviewComplianceEvent }, { no: 78, name: "mfa_authentication_event", kind: "message", oneof: "event", T: () => MFAAuthenticationEvent }, { no: 79, name: "spiffe_svid_issued", kind: "message", oneof: "event", T: () => SPIFFESVIDIssuedEvent }, - { no: 80, name: "okta_access_list_sync", kind: "message", oneof: "event", T: () => OktaAccessListSyncEvent } + { no: 80, name: "okta_access_list_sync", kind: "message", oneof: "event", T: () => OktaAccessListSyncEvent }, + { no: 81, name: "database_user_created", kind: "message", oneof: "event", T: () => DatabaseUserCreatedEvent }, + { no: 82, name: "database_user_permissions_updated", kind: "message", oneof: "event", T: () => DatabaseUserPermissionsUpdateEvent } ]); } create(value?: PartialMessage): SubmitEventRequest { @@ -8976,6 +9179,18 @@ class SubmitEventRequest$Type extends MessageType { oktaAccessListSync: OktaAccessListSyncEvent.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).oktaAccessListSync) }; break; + case /* prehog.v1alpha.DatabaseUserCreatedEvent database_user_created */ 81: + message.event = { + oneofKind: "databaseUserCreated", + databaseUserCreated: DatabaseUserCreatedEvent.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).databaseUserCreated) + }; + break; + case /* prehog.v1alpha.DatabaseUserPermissionsUpdateEvent database_user_permissions_updated */ 82: + message.event = { + oneofKind: "databaseUserPermissionsUpdated", + databaseUserPermissionsUpdated: DatabaseUserPermissionsUpdateEvent.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).databaseUserPermissionsUpdated) + }; + break; default: let u = options.readUnknownField; if (u === "throw") @@ -9225,6 +9440,12 @@ class SubmitEventRequest$Type extends MessageType { /* prehog.v1alpha.OktaAccessListSyncEvent okta_access_list_sync = 80; */ if (message.event.oneofKind === "oktaAccessListSync") OktaAccessListSyncEvent.internalBinaryWrite(message.event.oktaAccessListSync, writer.tag(80, WireType.LengthDelimited).fork(), options).join(); + /* prehog.v1alpha.DatabaseUserCreatedEvent database_user_created = 81; */ + if (message.event.oneofKind === "databaseUserCreated") + DatabaseUserCreatedEvent.internalBinaryWrite(message.event.databaseUserCreated, writer.tag(81, WireType.LengthDelimited).fork(), options).join(); + /* prehog.v1alpha.DatabaseUserPermissionsUpdateEvent database_user_permissions_updated = 82; */ + if (message.event.oneofKind === "databaseUserPermissionsUpdated") + DatabaseUserPermissionsUpdateEvent.internalBinaryWrite(message.event.databaseUserPermissionsUpdated, writer.tag(82, WireType.LengthDelimited).fork(), options).join(); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); diff --git a/lib/usagereporter/teleport/audit.go b/lib/usagereporter/teleport/audit.go index cc29c23cf0056..0c1367aff36cf 100644 --- a/lib/usagereporter/teleport/audit.go +++ b/lib/usagereporter/teleport/audit.go @@ -23,6 +23,7 @@ import ( apievents "github.com/gravitational/teleport/api/types/events" prehogv1a "github.com/gravitational/teleport/gen/proto/go/prehog/v1alpha" "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/srv/db/common/databaseobjectimportrule" ) const ( @@ -266,6 +267,30 @@ func ConvertAuditEvent(event apievents.AuditEvent) Anonymizable { DnsSansCount: int32(len(e.DNSSANs)), SvidType: e.SVIDType, } + case *apievents.DatabaseUserCreate: + return &DatabaseUserCreatedEvent{ + Database: &prehogv1a.SessionStartDatabaseMetadata{ + DbType: e.DatabaseType, + DbProtocol: e.DatabaseProtocol, + DbOrigin: e.DatabaseOrigin, + }, + UserName: e.User, + NumRoles: int32(len(e.DatabaseRoles)), + } + case *apievents.DatabasePermissionUpdate: + out := &DatabaseUserPermissionsUpdateEvent{ + Database: &prehogv1a.SessionStartDatabaseMetadata{ + DbType: e.DatabaseType, + DbProtocol: e.DatabaseProtocol, + DbOrigin: e.DatabaseOrigin, + }, + UserName: e.User, + NumTables: e.AffectedObjectCounts[databaseobjectimportrule.ObjectKindTable], + } + for _, entry := range e.PermissionSummary { + out.NumTablesPermissions += entry.Counts[databaseobjectimportrule.ObjectKindTable] + } + return out } return nil diff --git a/lib/usagereporter/teleport/audit_test.go b/lib/usagereporter/teleport/audit_test.go index b53e13192c1d9..0f2a1c0038b63 100644 --- a/lib/usagereporter/teleport/audit_test.go +++ b/lib/usagereporter/teleport/audit_test.go @@ -20,15 +20,22 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" apievents "github.com/gravitational/teleport/api/types/events" + prehogv1a "github.com/gravitational/teleport/gen/proto/go/prehog/v1alpha" + "github.com/gravitational/teleport/lib/utils" ) func TestConvertAuditEvent(t *testing.T) { + anonymizer, err := utils.NewHMACAnonymizer("anon-key-or-cluster-id") + require.NoError(t, err) + cases := []struct { - desc string - event apievents.AuditEvent - expected Anonymizable + desc string + event apievents.AuditEvent + expected Anonymizable + expectedAnonymized *prehogv1a.SubmitEventRequest }{ { desc: "ValidateMFAAuthResponse", @@ -48,6 +55,16 @@ func TestConvertAuditEvent(t *testing.T) { DeviceType: "TOTP", MfaChallengeScope: "CHALLENGE_SCOPE_LOGIN", }, + expectedAnonymized: &prehogv1a.SubmitEventRequest{ + Event: &prehogv1a.SubmitEventRequest_MfaAuthenticationEvent{ + MfaAuthenticationEvent: &prehogv1a.MFAAuthenticationEvent{ + UserName: anonymizer.AnonymizeString("some-user"), + DeviceId: anonymizer.AnonymizeString("dev-id"), + DeviceType: "TOTP", + MfaChallengeScope: "CHALLENGE_SCOPE_LOGIN", + }, + }, + }, }, { desc: "ValidateMFAAuthResponse without MFADevice", @@ -63,6 +80,107 @@ func TestConvertAuditEvent(t *testing.T) { DeviceType: "", MfaChallengeScope: "CHALLENGE_SCOPE_LOGIN", }, + expectedAnonymized: &prehogv1a.SubmitEventRequest{ + Event: &prehogv1a.SubmitEventRequest_MfaAuthenticationEvent{ + MfaAuthenticationEvent: &prehogv1a.MFAAuthenticationEvent{ + UserName: anonymizer.AnonymizeString("some-user"), + DeviceId: anonymizer.AnonymizeString(""), + DeviceType: "", + MfaChallengeScope: "CHALLENGE_SCOPE_LOGIN", + }, + }, + }, + }, + { + desc: "DatabaseUserCreate", + event: &apievents.DatabaseUserCreate{ + UserMetadata: apievents.UserMetadata{ + User: "alice", + }, + DatabaseMetadata: apievents.DatabaseMetadata{ + DatabaseService: "postgres-local", + DatabaseProtocol: "postgres", + DatabaseName: "postgres", + DatabaseUser: "alice", + DatabaseType: "self-hosted", + DatabaseOrigin: "config-file", + DatabaseRoles: []string{"reader", "writer", "admin"}, + }, + }, + expected: &DatabaseUserCreatedEvent{ + Database: &prehogv1a.SessionStartDatabaseMetadata{ + DbType: "self-hosted", + DbProtocol: "postgres", + DbOrigin: "config-file", + }, + UserName: "alice", + NumRoles: 3, + }, + expectedAnonymized: &prehogv1a.SubmitEventRequest{ + Event: &prehogv1a.SubmitEventRequest_DatabaseUserCreated{ + DatabaseUserCreated: &prehogv1a.DatabaseUserCreatedEvent{ + Database: &prehogv1a.SessionStartDatabaseMetadata{ + DbType: "self-hosted", + DbProtocol: "postgres", + DbOrigin: "config-file", + }, + UserName: anonymizer.AnonymizeString("alice"), + NumRoles: 3, + }, + }, + }, + }, + { + desc: "DatabasePermissionUpdate", + event: &apievents.DatabasePermissionUpdate{ + UserMetadata: apievents.UserMetadata{ + User: "alice", + }, + DatabaseMetadata: apievents.DatabaseMetadata{ + DatabaseService: "postgres-local", + DatabaseProtocol: "postgres", + DatabaseName: "postgres", + DatabaseUser: "alice", + DatabaseType: "self-hosted", + DatabaseOrigin: "config-file", + DatabaseRoles: []string{"reader", "writer", "admin"}, + }, + PermissionSummary: []apievents.DatabasePermissionEntry{ + { + Permission: "SELECT", + Counts: map[string]int32{"table": 3}, + }, + { + Permission: "UPDATE", + Counts: map[string]int32{"table": 6}, + }, + }, + AffectedObjectCounts: map[string]int32{"table": 7}, + }, + expected: &DatabaseUserPermissionsUpdateEvent{ + Database: &prehogv1a.SessionStartDatabaseMetadata{ + DbType: "self-hosted", + DbProtocol: "postgres", + DbOrigin: "config-file", + }, + UserName: "alice", + NumTables: 7, + NumTablesPermissions: 9, + }, + expectedAnonymized: &prehogv1a.SubmitEventRequest{ + Event: &prehogv1a.SubmitEventRequest_DatabaseUserPermissionsUpdated{ + DatabaseUserPermissionsUpdated: &prehogv1a.DatabaseUserPermissionsUpdateEvent{ + Database: &prehogv1a.SessionStartDatabaseMetadata{ + DbType: "self-hosted", + DbProtocol: "postgres", + DbOrigin: "config-file", + }, + UserName: anonymizer.AnonymizeString("alice"), + NumTables: 7, + NumTablesPermissions: 9, + }, + }, + }, }, } @@ -70,6 +188,8 @@ func TestConvertAuditEvent(t *testing.T) { t.Run(tt.desc, func(t *testing.T) { actual := ConvertAuditEvent(tt.event) assert.Equal(t, tt.expected, actual) + actualAnonymized := actual.Anonymize(anonymizer) + assert.Equal(t, tt.expectedAnonymized, &actualAnonymized) }) } } diff --git a/lib/usagereporter/teleport/types.go b/lib/usagereporter/teleport/types.go index 1fc7fd28523ab..7a37ab8d94687 100644 --- a/lib/usagereporter/teleport/types.go +++ b/lib/usagereporter/teleport/types.go @@ -1051,6 +1051,48 @@ func (u *OktaAccessListSyncEvent) Anonymize(a utils.Anonymizer) prehogv1a.Submit } } +// DatabaseUserCreatedEvent is an event that is emitted after database service performs automatic user provisioning. +type DatabaseUserCreatedEvent prehogv1a.DatabaseUserCreatedEvent + +// Anonymize anonymizes the event. +func (u *DatabaseUserCreatedEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest { + event := &prehogv1a.DatabaseUserCreatedEvent{ + UserName: a.AnonymizeString(u.UserName), + NumRoles: u.NumRoles, + } + + if u.Database != nil { + event.Database = &prehogv1a.SessionStartDatabaseMetadata{ + DbType: u.Database.DbType, + DbProtocol: u.Database.DbProtocol, + DbOrigin: u.Database.DbOrigin, + } + } + + return prehogv1a.SubmitEventRequest{ + Event: &prehogv1a.SubmitEventRequest_DatabaseUserCreated{ + DatabaseUserCreated: event, + }, + } +} + +// DatabaseUserPermissionsUpdateEvent is an event that is emitted after database service updates the permissions for the database user. +type DatabaseUserPermissionsUpdateEvent prehogv1a.DatabaseUserPermissionsUpdateEvent + +// Anonymize anonymizes the event. +func (u *DatabaseUserPermissionsUpdateEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest { + return prehogv1a.SubmitEventRequest{ + Event: &prehogv1a.SubmitEventRequest_DatabaseUserPermissionsUpdated{ + DatabaseUserPermissionsUpdated: &prehogv1a.DatabaseUserPermissionsUpdateEvent{ + UserName: a.AnonymizeString(u.UserName), + NumTables: u.NumTables, + NumTablesPermissions: u.NumTablesPermissions, + Database: u.Database, + }, + }, + } +} + // SPIFFESVIDIssuedEvent is an event emitted when a SPIFFE SVID has been // issued. type SPIFFESVIDIssuedEvent prehogv1a.SPIFFESVIDIssuedEvent diff --git a/proto/prehog/v1alpha/teleport.proto b/proto/prehog/v1alpha/teleport.proto index 67217d3885f86..dee6eabccd7ee 100644 --- a/proto/prehog/v1alpha/teleport.proto +++ b/proto/prehog/v1alpha/teleport.proto @@ -1244,6 +1244,34 @@ message OktaAccessListSyncEvent { int32 num_access_list_members = 7; } +// DatabaseUserCreatedEvent is an event that is emitted after database service performs automatic user provisioning. +message DatabaseUserCreatedEvent { + // Database metadata. + SessionStartDatabaseMetadata database = 1; + + // Teleport user name. Anonymized. + string user_name = 2; + + // Number of database roles. + int32 num_roles = 3; +} + +// DatabaseUserPermissionsUpdateEvent is an event that is emitted after database service updates the permissions for the database user. +message DatabaseUserPermissionsUpdateEvent { + // Database metadata. + SessionStartDatabaseMetadata database = 1; + + // Teleport user name. Anonymized. + string user_name = 2; + + // How many tables were affected. + int32 num_tables = 3; + + // How many total table permissions were given to the user. + // For example {SELECT,UPDATE} on ten tables gives a total of twenty. + int32 num_tables_permissions = 4; +} + message SubmitEventRequest { // anonymized, 32 bytes (HMAC-SHA-256) encoded in base64 // @@ -1372,6 +1400,10 @@ message SubmitEventRequest { SPIFFESVIDIssuedEvent spiffe_svid_issued = 79; OktaAccessListSyncEvent okta_access_list_sync = 80; + + DatabaseUserCreatedEvent database_user_created = 81; + + DatabaseUserPermissionsUpdateEvent database_user_permissions_updated = 82; } reserved 8; // UIOnboardGetStartedClickEvent From 15354e196e487517fc3109f139280a1eebf1dfde Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Tue, 30 Apr 2024 11:39:19 -0300 Subject: [PATCH 20/28] fix: Enforce allow_passwordless server-side (#41023) --- api/types/authentication.go | 15 +++++++ lib/auth/auth.go | 12 ++++- lib/auth/auth_login_test.go | 80 +++++++++++++++++++++++++-------- lib/web/apiserver.go | 4 ++ lib/web/apiserver_login_test.go | 36 +++++++++++++++ 5 files changed, 127 insertions(+), 20 deletions(-) diff --git a/api/types/authentication.go b/api/types/authentication.go index 6085a56bdfa1a..61ea3e1cb20fe 100644 --- a/api/types/authentication.go +++ b/api/types/authentication.go @@ -35,6 +35,21 @@ import ( "github.com/gravitational/teleport/api/utils/tlsutils" ) +var ( + // ErrPasswordlessRequiresWebauthn is issued if a passwordless challenge is + // requested but WebAuthn isn't enabled. + ErrPasswordlessRequiresWebauthn = &trace.BadParameterError{ + Message: "passwordless requires WebAuthn", + } + + // ErrPasswordlessDisabledBySettings is issued if a passwordless challenge is + // requested but passwordless is disabled by cluster settings. + // See AuthPreferenceV2.AuthPreferenceV2. + ErrPasswordlessDisabledBySettings = &trace.BadParameterError{ + Message: "passwordless disabled by cluster settings", + } +) + // AuthPreference defines the authentication preferences for a specific // cluster. It defines the type (local, oidc) and second factor (off, otp, oidc). // AuthPreference is a configuration resource, never create more than one instance diff --git a/lib/auth/auth.go b/lib/auth/auth.go index af371a3948552..e880a3a1ca402 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -3304,9 +3304,15 @@ func (a *Server) CreateAuthenticateChallenge(ctx context.Context, req *proto.Cre challenges, err := a.mfaAuthChallenge(ctx, username, challengeExtensions) if err != nil { + // Do not obfuscate config-related errors. + if errors.Is(err, types.ErrPasswordlessRequiresWebauthn) || errors.Is(err, types.ErrPasswordlessDisabledBySettings) { + return nil, trace.Wrap(err) + } + log.Error(trace.DebugReport(err)) return nil, trace.AccessDenied("unable to create MFA challenges") } + return challenges, nil } @@ -6146,8 +6152,12 @@ func (a *Server) mfaAuthChallenge(ctx context.Context, user string, challengeExt // Handle passwordless separately, it works differently from MFA. if isPasswordless { if !enableWebauthn { - return nil, trace.BadParameter("passwordless requires WebAuthn") + return nil, trace.Wrap(types.ErrPasswordlessRequiresWebauthn) + } + if !apref.GetAllowPasswordless() { + return nil, trace.Wrap(types.ErrPasswordlessDisabledBySettings) } + webLogin := &wanlib.PasswordlessFlow{ Webauthn: webConfig, Identity: a.Services, diff --git a/lib/auth/auth_login_test.go b/lib/auth/auth_login_test.go index a9f10ef583ad1..59ccca14fc5cf 100644 --- a/lib/auth/auth_login_test.go +++ b/lib/auth/auth_login_test.go @@ -45,9 +45,43 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { t.Parallel() ctx := context.Background() + reqUserPassword := func(user, pass string) *proto.CreateAuthenticateChallengeRequest { + return &proto.CreateAuthenticateChallengeRequest{ + Request: &proto.CreateAuthenticateChallengeRequest_UserCredentials{ + UserCredentials: &proto.UserCredentials{ + Username: user, + Password: []byte(pass), + }, + }, + } + } + + reqPasswordless := func(_, _ string) *proto.CreateAuthenticateChallengeRequest { + return &proto.CreateAuthenticateChallengeRequest{ + Request: &proto.CreateAuthenticateChallengeRequest_Passwordless{ + Passwordless: &proto.Passwordless{}, + }, + ChallengeExtensions: &mfav1.ChallengeExtensions{ + Scope: mfav1.ChallengeScope_CHALLENGE_SCOPE_PASSWORDLESS_LOGIN, + }, + } + } + + makeWebauthnSpec := func() *types.AuthPreferenceSpecV2 { + return &types.AuthPreferenceSpecV2{ + Type: constants.Local, + SecondFactor: constants.SecondFactorWebauthn, + Webauthn: &types.Webauthn{ + RPID: "localhost", + }, + } + } + tests := []struct { name string spec *types.AuthPreferenceSpecV2 + createReq func(user, pass string) *proto.CreateAuthenticateChallengeRequest + wantErr error assertChallenge func(*proto.MFAAuthenticateChallenge) }{ { @@ -56,6 +90,7 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { Type: constants.Local, SecondFactor: constants.SecondFactorOff, }, + createReq: reqUserPassword, assertChallenge: func(challenge *proto.MFAAuthenticateChallenge) { require.Empty(t, challenge.GetTOTP()) require.Empty(t, challenge.GetWebauthnChallenge()) @@ -67,6 +102,7 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { Type: constants.Local, SecondFactor: constants.SecondFactorOTP, }, + createReq: reqUserPassword, assertChallenge: func(challenge *proto.MFAAuthenticateChallenge) { require.NotNil(t, challenge.GetTOTP()) require.Empty(t, challenge.GetWebauthnChallenge()) @@ -81,20 +117,16 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { AppID: "https://localhost", }, }, + createReq: reqUserPassword, assertChallenge: func(challenge *proto.MFAAuthenticateChallenge) { require.Empty(t, challenge.GetTOTP()) require.NotEmpty(t, challenge.GetWebauthnChallenge()) }, }, { - name: "OK second_factor:webauthn (standalone)", - spec: &types.AuthPreferenceSpecV2{ - Type: constants.Local, - SecondFactor: constants.SecondFactorWebauthn, - Webauthn: &types.Webauthn{ - RPID: "localhost", - }, - }, + name: "OK second_factor:webauthn (standalone)", + spec: makeWebauthnSpec(), + createReq: reqUserPassword, assertChallenge: func(challenge *proto.MFAAuthenticateChallenge) { require.Empty(t, challenge.GetTOTP()) require.NotEmpty(t, challenge.GetWebauthnChallenge()) @@ -112,6 +144,7 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { RPID: "localhost", }, }, + createReq: reqUserPassword, assertChallenge: func(challenge *proto.MFAAuthenticateChallenge) { require.Empty(t, challenge.GetTOTP()) require.NotEmpty(t, challenge.GetWebauthnChallenge()) @@ -127,6 +160,7 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { RPID: "localhost", }, }, + createReq: reqUserPassword, assertChallenge: func(challenge *proto.MFAAuthenticateChallenge) { require.NotNil(t, challenge.GetTOTP()) require.NotEmpty(t, challenge.GetWebauthnChallenge()) @@ -141,11 +175,22 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { RPID: "localhost", }, }, + createReq: reqUserPassword, assertChallenge: func(challenge *proto.MFAAuthenticateChallenge) { require.NotNil(t, challenge.GetTOTP()) require.NotEmpty(t, challenge.GetWebauthnChallenge()) }, }, + { + name: "allow_passwordless=false and passwordless challenge", + spec: func() *types.AuthPreferenceSpecV2 { + spec := makeWebauthnSpec() + spec.AllowPasswordless = &types.BoolOption{Value: false} + return spec + }(), + createReq: reqPasswordless, + wantErr: types.ErrPasswordlessDisabledBySettings, + }, } for _, test := range tests { test := test @@ -155,23 +200,20 @@ func TestServer_CreateAuthenticateChallenge_authPreference(t *testing.T) { svr := newTestTLSServer(t) authServer := svr.Auth() mfa := configureForMFA(t, svr) - username := mfa.User - password := mfa.Password + user := mfa.User + pass := mfa.Password authPreference, err := types.NewAuthPreference(*test.spec) require.NoError(t, err) _, err = authServer.UpsertAuthPreference(ctx, authPreference) require.NoError(t, err) - challenge, err := authServer.CreateAuthenticateChallenge(ctx, &proto.CreateAuthenticateChallengeRequest{ - Request: &proto.CreateAuthenticateChallengeRequest_UserCredentials{ - UserCredentials: &proto.UserCredentials{ - Username: username, - Password: []byte(password), - }, - }, - }) - require.NoError(t, err) + challenge, err := authServer.CreateAuthenticateChallenge(ctx, test.createReq(user, pass)) + if test.wantErr != nil { + assert.ErrorIs(t, err, test.wantErr, "CreateAuthenticateChallenge error mismatch") + return + } + require.NoError(t, err, "CreateAuthenticateChallenge errored unexpectedly") test.assertChallenge(challenge) }) } diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index e6d5af425f146..e377353b7a3ae 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -2483,6 +2483,10 @@ func (h *Handler) mfaLoginBegin(w http.ResponseWriter, r *http.Request, p httpro mfaChallenge, err := h.auth.proxyClient.CreateAuthenticateChallenge(r.Context(), mfaReq) if err != nil { + // Do not obfuscate config-related errors. + if errors.Is(err, types.ErrPasswordlessRequiresWebauthn) || errors.Is(err, types.ErrPasswordlessDisabledBySettings) { + return nil, trace.Wrap(err) + } return nil, trace.AccessDenied("invalid credentials") } diff --git a/lib/web/apiserver_login_test.go b/lib/web/apiserver_login_test.go index b591d804af573..f7355388665e8 100644 --- a/lib/web/apiserver_login_test.go +++ b/lib/web/apiserver_login_test.go @@ -276,6 +276,42 @@ func TestAuthenticate_passwordless(t *testing.T) { test.login(t, assertionResp) }) } + + // Test a couple of config-mismatch scenarios. + // They progressively alter the cluster's auth preference. + + t.Run("allow_passwordless=false", func(t *testing.T) { + // Set allow_passwordless=false + authPref, err := authServer.GetAuthPreference(ctx) + require.NoError(t, err, "GetAuthPreference failed") + authPref.SetAllowPasswordless(false) + _, err = authServer.UpsertAuthPreference(ctx, authPref) + require.NoError(t, err, "UpsertAuthPreference failed") + + // GET /webapi/mfa/login/begin. + ep := clt.Endpoint("webapi", "mfa", "login", "begin") + _, err = clt.PostJSON(ctx, ep, &client.MFAChallengeRequest{ + Passwordless: true, // no username and password + }) + assert.ErrorIs(t, err, types.ErrPasswordlessDisabledBySettings, "/webapi/mfa/login/begin error mismatch") + }) + + t.Run("webauthn disabled", func(t *testing.T) { + authPref, err := types.NewAuthPreference(types.AuthPreferenceSpecV2{ + Type: constants.Local, + SecondFactor: constants.SecondFactorOTP, // disable webauthn + }) + require.NoError(t, err, "NewAuthPreference failed") + _, err = authServer.UpsertAuthPreference(ctx, authPref) + require.NoError(t, err, "UpsertAuthPreference failed") + + // GET /webapi/mfa/login/begin. + ep := clt.Endpoint("webapi", "mfa", "login", "begin") + _, err = clt.PostJSON(ctx, ep, &client.MFAChallengeRequest{ + Passwordless: true, // no username and password + }) + assert.ErrorIs(t, err, types.ErrPasswordlessRequiresWebauthn, "/webapi/mfa/login/begin error mismatch") + }) } func TestAuthenticate_rateLimiting(t *testing.T) { From 08fd33e0b857edf34328476a1cc8671488614257 Mon Sep 17 00:00:00 2001 From: Bartosz Leper Date: Tue, 30 Apr 2024 16:55:24 +0200 Subject: [PATCH 21/28] Make the hot reload output prettier (#41035) --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 9d3e89b4004f7..7add29308ac90 100644 --- a/Makefile +++ b/Makefile @@ -319,6 +319,8 @@ teleport-hot-reload: --exclude-dir="node_modules" \ --exclude-dir="target" \ --exclude-dir="web/packages/*/node_modules" \ + --color \ + --log-prefix=false \ --build="make $(BUILDDIR)/teleport" \ --command="$(BUILDDIR)/teleport $(TELEPORT_ARGS)" From 2acf477119552fd36138ac068d66a30d43b14ead Mon Sep 17 00:00:00 2001 From: Andrew Burke <31974658+atburke@users.noreply.github.com> Date: Tue, 30 Apr 2024 09:02:51 -0700 Subject: [PATCH 22/28] Add auto role request docs (#41030) --- .../access-requests/role-requests.mdx | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/pages/access-controls/access-requests/role-requests.mdx b/docs/pages/access-controls/access-requests/role-requests.mdx index 507d602487002..47906d8db261e 100644 --- a/docs/pages/access-controls/access-requests/role-requests.mdx +++ b/docs/pages/access-controls/access-requests/role-requests.mdx @@ -153,6 +153,53 @@ to the original set of roles. ## Next Steps +### Automatically request access for SSH + +Once you have configured Role Access Requests, +`tsh ssh` is able to automatically create a Role Access Request for you when access is denied, +allowing you to skip the `tsh request search` and `tsh request create` steps. +If more than one role would grant access to the target node, you will be prompted +to select a role to request. + +```code +$ tsh ssh --request-mode role alice@iot +ERROR: access denied to alice connecting to iot on cluster teleport.example.com + +You do not currently have access to alice@iot, attempting to request access. + +Choose role to request [node-access, node-access-alt]: node-access +Enter request reason: please +Creating request... + +Waiting for request approval... + +Approval received, reason="okay" +Getting updated certificates... + +iot:~ alice$ +``` + +Note that in order to make a Role Access Request this way, the role you request +access with must have `search_as_role` set so you can read the node you want to +ssh into. + +```yaml +# requester.yaml +kind: role +version: v5 +metadata: + name: requester +spec: + allow: + request: + roles: + - node-access + search_as_roles: + # does not need to match roles, just needs to be able to access nodes + # that you want to ssh into + - access +``` + ### Integrate with an external tool With Teleport's Access Request plugins, users can manage Access Requests from From 31fdd59c3cc9cf30b9ff647e984abaaa3c4ad3ac Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 30 Apr 2024 12:14:53 -0400 Subject: [PATCH 23/28] docs: update rds db proxy access instructions (#41052) * docs: update rds db access instructions * docs: fix command for configure --- docs/pages/includes/database-access/rds-proxy.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/includes/database-access/rds-proxy.mdx b/docs/pages/includes/database-access/rds-proxy.mdx index 0d72694e5a6d1..1eef241f09cbb 100644 --- a/docs/pages/includes/database-access/rds-proxy.mdx +++ b/docs/pages/includes/database-access/rds-proxy.mdx @@ -56,7 +56,7 @@ proxy: $ sudo teleport db configure create \ -o file \ --proxy=:443 \ - --uri= | + --uri= \ --protocol={{ protocol }} \ --token=/tmp/token ``` From 07254a5def190a196631cce4ce13ec4e5e105fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justinas=20Stankevi=C4=8Dius?= Date: Tue, 30 Apr 2024 19:42:51 +0300 Subject: [PATCH 24/28] Entra ID integration: add proto definitions (#40997) --- api/proto/teleport/legacy/types/types.proto | 33 +- api/types/types.pb.go | 4412 +++++++++++-------- 2 files changed, 2658 insertions(+), 1787 deletions(-) diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index d2db3510a512a..09235fc65f7ab 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -5781,10 +5781,12 @@ message PluginSpecV1 { PluginServiceNowSettings serviceNow = 10; // Settings for the Gitlab plugin. PluginGitlabSettings gitlab = 12; + // Settings for the Entra ID plugin + PluginEntraIDSettings entra_id = 13; } // generation contains a unique ID that should: - // - Be created by the backed on plugin creation. + // - Be created by the backend on plugin creation. // - Be updated by the backend if the plugin is updated in any way. // // For older plugins, it's possible for this to be empty. @@ -5966,6 +5968,22 @@ message PluginDiscordSettings { map role_to_recipients = 1; } +// PluginEntraIDSettings defines settings for the Entra ID sync plugin +message PluginEntraIDSettings { + option (gogoproto.equal) = true; + + // SyncSettings controls the user and access list sync settings for EntraID. + PluginEntraIDSyncSettings sync_settings = 1; +} + +// Defines settings for syncing users and access lists from Entra ID. +message PluginEntraIDSyncSettings { + option (gogoproto.equal) = true; + + // DefaultOwners are the default owners for all imported access lists. + repeated string default_owners = 1; +} + message PluginBootstrapCredentialsV1 { oneof credentials { PluginOAuth2AuthorizationCodeCredentials oauth2_authorization_code = 1; @@ -6422,6 +6440,8 @@ message IntegrationSpecV1 { oneof SubKindSpec { // AWSOIDC contains the specific fields to handle the AWS OIDC Integration subkind AWSOIDCIntegrationSpecV1 AWSOIDC = 1 [(gogoproto.jsontag) = "aws_oidc,omitempty"]; + // AzureOIDC contains the specific fields to handle the Azure OIDC Integration subkind + AzureOIDCIntegrationSpecV1 AzureOIDC = 2 [(gogoproto.jsontag) = "azure_oidc,omitempty"]; } } @@ -6440,6 +6460,17 @@ message AWSOIDCIntegrationSpecV1 { string IssuerS3URI = 2 [(gogoproto.jsontag) = "issuer_s3_uri,omitempty"]; } +// AzureOIDCIntegrationSpecV1 contains the spec properties for the Azure OIDC SubKind Integration. +message AzureOIDCIntegrationSpecV1 { + // TenantID specifies the ID of Entra Tenant (Directory) + // that this plugin integrates with. + string TenantID = 1 [(gogoproto.jsontag) = "tenant_id,omitempty"]; + + // ClientID specifies the ID of Azure enterprise application (client) + // that corresponds to this plugin. + string ClientID = 2 [(gogoproto.jsontag) = "client_id,omitempty"]; +} + // HeadlessAuthentication holds data for an ongoing headless authentication attempt. message HeadlessAuthentication { // Header is the resource header. diff --git a/api/types/types.pb.go b/api/types/types.pb.go index cd094dc1a9fe4..26c4d6a1cea77 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -935,7 +935,7 @@ func (x OktaAssignmentSpecV1_OktaAssignmentStatus) String() string { } func (OktaAssignmentSpecV1_OktaAssignmentStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{299, 0} + return fileDescriptor_9198ee693835762e, []int{301, 0} } // OktaAssignmentTargetType is the type of Okta object that an assignment is targeting. @@ -967,7 +967,7 @@ func (x OktaAssignmentTargetV1_OktaAssignmentTargetType) String() string { } func (OktaAssignmentTargetV1_OktaAssignmentTargetType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{300, 0} + return fileDescriptor_9198ee693835762e, []int{302, 0} } type KeepAlive struct { @@ -14558,9 +14558,10 @@ type PluginSpecV1 struct { // *PluginSpecV1_Discord // *PluginSpecV1_ServiceNow // *PluginSpecV1_Gitlab + // *PluginSpecV1_EntraId Settings isPluginSpecV1_Settings `protobuf_oneof:"settings"` // generation contains a unique ID that should: - // - Be created by the backed on plugin creation. + // - Be created by the backend on plugin creation. // - Be updated by the backend if the plugin is updated in any way. // // For older plugins, it's possible for this to be empty. @@ -14643,6 +14644,9 @@ type PluginSpecV1_ServiceNow struct { type PluginSpecV1_Gitlab struct { Gitlab *PluginGitlabSettings `protobuf:"bytes,12,opt,name=gitlab,proto3,oneof" json:"gitlab,omitempty"` } +type PluginSpecV1_EntraId struct { + EntraId *PluginEntraIDSettings `protobuf:"bytes,13,opt,name=entra_id,json=entraId,proto3,oneof" json:"entra_id,omitempty"` +} func (*PluginSpecV1_SlackAccessPlugin) isPluginSpecV1_Settings() {} func (*PluginSpecV1_Opsgenie) isPluginSpecV1_Settings() {} @@ -14655,6 +14659,7 @@ func (*PluginSpecV1_Jira) isPluginSpecV1_Settings() {} func (*PluginSpecV1_Discord) isPluginSpecV1_Settings() {} func (*PluginSpecV1_ServiceNow) isPluginSpecV1_Settings() {} func (*PluginSpecV1_Gitlab) isPluginSpecV1_Settings() {} +func (*PluginSpecV1_EntraId) isPluginSpecV1_Settings() {} func (m *PluginSpecV1) GetSettings() isPluginSpecV1_Settings { if m != nil { @@ -14740,6 +14745,13 @@ func (m *PluginSpecV1) GetGitlab() *PluginGitlabSettings { return nil } +func (m *PluginSpecV1) GetEntraId() *PluginEntraIDSettings { + if x, ok := m.GetSettings().(*PluginSpecV1_EntraId); ok { + return x.EntraId + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*PluginSpecV1) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -14754,6 +14766,7 @@ func (*PluginSpecV1) XXX_OneofWrappers() []interface{} { (*PluginSpecV1_Discord)(nil), (*PluginSpecV1_ServiceNow)(nil), (*PluginSpecV1_Gitlab)(nil), + (*PluginSpecV1_EntraId)(nil), } } @@ -15369,6 +15382,90 @@ func (m *PluginDiscordSettings) XXX_DiscardUnknown() { var xxx_messageInfo_PluginDiscordSettings proto.InternalMessageInfo +// PluginEntraIDSettings defines settings for the Entra ID sync plugin +type PluginEntraIDSettings struct { + // SyncSettings controls the user and access list sync settings for EntraID. + SyncSettings *PluginEntraIDSyncSettings `protobuf:"bytes,1,opt,name=sync_settings,json=syncSettings,proto3" json:"sync_settings,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginEntraIDSettings) Reset() { *m = PluginEntraIDSettings{} } +func (m *PluginEntraIDSettings) String() string { return proto.CompactTextString(m) } +func (*PluginEntraIDSettings) ProtoMessage() {} +func (*PluginEntraIDSettings) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{267} +} +func (m *PluginEntraIDSettings) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PluginEntraIDSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PluginEntraIDSettings.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PluginEntraIDSettings) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginEntraIDSettings.Merge(m, src) +} +func (m *PluginEntraIDSettings) XXX_Size() int { + return m.Size() +} +func (m *PluginEntraIDSettings) XXX_DiscardUnknown() { + xxx_messageInfo_PluginEntraIDSettings.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginEntraIDSettings proto.InternalMessageInfo + +// Defines settings for syncing users and access lists from Entra ID. +type PluginEntraIDSyncSettings struct { + // DefaultOwners are the default owners for all imported access lists. + DefaultOwners []string `protobuf:"bytes,1,rep,name=default_owners,json=defaultOwners,proto3" json:"default_owners,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginEntraIDSyncSettings) Reset() { *m = PluginEntraIDSyncSettings{} } +func (m *PluginEntraIDSyncSettings) String() string { return proto.CompactTextString(m) } +func (*PluginEntraIDSyncSettings) ProtoMessage() {} +func (*PluginEntraIDSyncSettings) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{268} +} +func (m *PluginEntraIDSyncSettings) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PluginEntraIDSyncSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PluginEntraIDSyncSettings.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PluginEntraIDSyncSettings) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginEntraIDSyncSettings.Merge(m, src) +} +func (m *PluginEntraIDSyncSettings) XXX_Size() int { + return m.Size() +} +func (m *PluginEntraIDSyncSettings) XXX_DiscardUnknown() { + xxx_messageInfo_PluginEntraIDSyncSettings.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginEntraIDSyncSettings proto.InternalMessageInfo + type PluginBootstrapCredentialsV1 struct { // Types that are valid to be assigned to Credentials: // @@ -15385,7 +15482,7 @@ func (m *PluginBootstrapCredentialsV1) Reset() { *m = PluginBootstrapCre func (m *PluginBootstrapCredentialsV1) String() string { return proto.CompactTextString(m) } func (*PluginBootstrapCredentialsV1) ProtoMessage() {} func (*PluginBootstrapCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{267} + return fileDescriptor_9198ee693835762e, []int{269} } func (m *PluginBootstrapCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15485,7 +15582,7 @@ func (m *PluginIdSecretCredential) Reset() { *m = PluginIdSecretCredenti func (m *PluginIdSecretCredential) String() string { return proto.CompactTextString(m) } func (*PluginIdSecretCredential) ProtoMessage() {} func (*PluginIdSecretCredential) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{268} + return fileDescriptor_9198ee693835762e, []int{270} } func (m *PluginIdSecretCredential) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15528,7 +15625,7 @@ func (m *PluginOAuth2AuthorizationCodeCredentials) Reset() { func (m *PluginOAuth2AuthorizationCodeCredentials) String() string { return proto.CompactTextString(m) } func (*PluginOAuth2AuthorizationCodeCredentials) ProtoMessage() {} func (*PluginOAuth2AuthorizationCodeCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{269} + return fileDescriptor_9198ee693835762e, []int{271} } func (m *PluginOAuth2AuthorizationCodeCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15569,7 +15666,7 @@ func (m *PluginStatusV1) Reset() { *m = PluginStatusV1{} } func (m *PluginStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginStatusV1) ProtoMessage() {} func (*PluginStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{270} + return fileDescriptor_9198ee693835762e, []int{272} } func (m *PluginStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15617,7 +15714,7 @@ func (m *PluginCredentialsV1) Reset() { *m = PluginCredentialsV1{} } func (m *PluginCredentialsV1) String() string { return proto.CompactTextString(m) } func (*PluginCredentialsV1) ProtoMessage() {} func (*PluginCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{271} + return fileDescriptor_9198ee693835762e, []int{273} } func (m *PluginCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15728,7 +15825,7 @@ func (m *PluginOAuth2AccessTokenCredentials) Reset() { *m = PluginOAuth2 func (m *PluginOAuth2AccessTokenCredentials) String() string { return proto.CompactTextString(m) } func (*PluginOAuth2AccessTokenCredentials) ProtoMessage() {} func (*PluginOAuth2AccessTokenCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{272} + return fileDescriptor_9198ee693835762e, []int{274} } func (m *PluginOAuth2AccessTokenCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15769,7 +15866,7 @@ func (m *PluginBearerTokenCredentials) Reset() { *m = PluginBearerTokenC func (m *PluginBearerTokenCredentials) String() string { return proto.CompactTextString(m) } func (*PluginBearerTokenCredentials) ProtoMessage() {} func (*PluginBearerTokenCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{273} + return fileDescriptor_9198ee693835762e, []int{275} } func (m *PluginBearerTokenCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15811,7 +15908,7 @@ func (m *PluginStaticCredentialsRef) Reset() { *m = PluginStaticCredenti func (m *PluginStaticCredentialsRef) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsRef) ProtoMessage() {} func (*PluginStaticCredentialsRef) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{274} + return fileDescriptor_9198ee693835762e, []int{276} } func (m *PluginStaticCredentialsRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15853,7 +15950,7 @@ func (m *PluginListV1) Reset() { *m = PluginListV1{} } func (m *PluginListV1) String() string { return proto.CompactTextString(m) } func (*PluginListV1) ProtoMessage() {} func (*PluginListV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{275} + return fileDescriptor_9198ee693835762e, []int{277} } func (m *PluginListV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15896,7 +15993,7 @@ type PluginStaticCredentialsV1 struct { func (m *PluginStaticCredentialsV1) Reset() { *m = PluginStaticCredentialsV1{} } func (*PluginStaticCredentialsV1) ProtoMessage() {} func (*PluginStaticCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{276} + return fileDescriptor_9198ee693835762e, []int{278} } func (m *PluginStaticCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15942,7 +16039,7 @@ func (m *PluginStaticCredentialsSpecV1) Reset() { *m = PluginStaticCrede func (m *PluginStaticCredentialsSpecV1) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsSpecV1) ProtoMessage() {} func (*PluginStaticCredentialsSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{277} + return fileDescriptor_9198ee693835762e, []int{279} } func (m *PluginStaticCredentialsSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16044,7 +16141,7 @@ func (m *PluginStaticCredentialsBasicAuth) Reset() { *m = PluginStaticCr func (m *PluginStaticCredentialsBasicAuth) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsBasicAuth) ProtoMessage() {} func (*PluginStaticCredentialsBasicAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{278} + return fileDescriptor_9198ee693835762e, []int{280} } func (m *PluginStaticCredentialsBasicAuth) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16090,7 +16187,7 @@ func (m *PluginStaticCredentialsOAuthClientSecret) Reset() { func (m *PluginStaticCredentialsOAuthClientSecret) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsOAuthClientSecret) ProtoMessage() {} func (*PluginStaticCredentialsOAuthClientSecret) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{279} + return fileDescriptor_9198ee693835762e, []int{281} } func (m *PluginStaticCredentialsOAuthClientSecret) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16133,7 +16230,7 @@ type SAMLIdPServiceProviderV1 struct { func (m *SAMLIdPServiceProviderV1) Reset() { *m = SAMLIdPServiceProviderV1{} } func (*SAMLIdPServiceProviderV1) ProtoMessage() {} func (*SAMLIdPServiceProviderV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{280} + return fileDescriptor_9198ee693835762e, []int{282} } func (m *SAMLIdPServiceProviderV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16192,7 +16289,7 @@ func (m *SAMLIdPServiceProviderSpecV1) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderSpecV1) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderSpecV1) ProtoMessage() {} func (*SAMLIdPServiceProviderSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{281} + return fileDescriptor_9198ee693835762e, []int{283} } func (m *SAMLIdPServiceProviderSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16239,7 +16336,7 @@ func (m *SAMLAttributeMapping) Reset() { *m = SAMLAttributeMapping{} } func (m *SAMLAttributeMapping) String() string { return proto.CompactTextString(m) } func (*SAMLAttributeMapping) ProtoMessage() {} func (*SAMLAttributeMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{282} + return fileDescriptor_9198ee693835762e, []int{284} } func (m *SAMLAttributeMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16281,7 +16378,7 @@ func (m *IdPOptions) Reset() { *m = IdPOptions{} } func (m *IdPOptions) String() string { return proto.CompactTextString(m) } func (*IdPOptions) ProtoMessage() {} func (*IdPOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{283} + return fileDescriptor_9198ee693835762e, []int{285} } func (m *IdPOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16323,7 +16420,7 @@ func (m *IdPSAMLOptions) Reset() { *m = IdPSAMLOptions{} } func (m *IdPSAMLOptions) String() string { return proto.CompactTextString(m) } func (*IdPSAMLOptions) ProtoMessage() {} func (*IdPSAMLOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{284} + return fileDescriptor_9198ee693835762e, []int{286} } func (m *IdPSAMLOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16373,7 +16470,7 @@ func (m *KubernetesResourceV1) Reset() { *m = KubernetesResourceV1{} } func (m *KubernetesResourceV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceV1) ProtoMessage() {} func (*KubernetesResourceV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{285} + return fileDescriptor_9198ee693835762e, []int{287} } func (m *KubernetesResourceV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16415,7 +16512,7 @@ func (m *KubernetesResourceSpecV1) Reset() { *m = KubernetesResourceSpec func (m *KubernetesResourceSpecV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceSpecV1) ProtoMessage() {} func (*KubernetesResourceSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{286} + return fileDescriptor_9198ee693835762e, []int{288} } func (m *KubernetesResourceSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16461,7 +16558,7 @@ func (m *ClusterMaintenanceConfigV1) Reset() { *m = ClusterMaintenanceCo func (m *ClusterMaintenanceConfigV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigV1) ProtoMessage() {} func (*ClusterMaintenanceConfigV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{287} + return fileDescriptor_9198ee693835762e, []int{289} } func (m *ClusterMaintenanceConfigV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16503,7 +16600,7 @@ func (m *ClusterMaintenanceConfigSpecV1) Reset() { *m = ClusterMaintenan func (m *ClusterMaintenanceConfigSpecV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigSpecV1) ProtoMessage() {} func (*ClusterMaintenanceConfigSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{288} + return fileDescriptor_9198ee693835762e, []int{290} } func (m *ClusterMaintenanceConfigSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16549,7 +16646,7 @@ func (m *AgentUpgradeWindow) Reset() { *m = AgentUpgradeWindow{} } func (m *AgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeWindow) ProtoMessage() {} func (*AgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{289} + return fileDescriptor_9198ee693835762e, []int{291} } func (m *AgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16596,7 +16693,7 @@ func (m *ScheduledAgentUpgradeWindow) Reset() { *m = ScheduledAgentUpgra func (m *ScheduledAgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*ScheduledAgentUpgradeWindow) ProtoMessage() {} func (*ScheduledAgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{290} + return fileDescriptor_9198ee693835762e, []int{292} } func (m *ScheduledAgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16639,7 +16736,7 @@ func (m *AgentUpgradeSchedule) Reset() { *m = AgentUpgradeSchedule{} } func (m *AgentUpgradeSchedule) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeSchedule) ProtoMessage() {} func (*AgentUpgradeSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{291} + return fileDescriptor_9198ee693835762e, []int{293} } func (m *AgentUpgradeSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16682,7 +16779,7 @@ type UserGroupV1 struct { func (m *UserGroupV1) Reset() { *m = UserGroupV1{} } func (*UserGroupV1) ProtoMessage() {} func (*UserGroupV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{292} + return fileDescriptor_9198ee693835762e, []int{294} } func (m *UserGroupV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16724,7 +16821,7 @@ func (m *UserGroupSpecV1) Reset() { *m = UserGroupSpecV1{} } func (m *UserGroupSpecV1) String() string { return proto.CompactTextString(m) } func (*UserGroupSpecV1) ProtoMessage() {} func (*UserGroupSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{293} + return fileDescriptor_9198ee693835762e, []int{295} } func (m *UserGroupSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16768,7 +16865,7 @@ func (m *OktaImportRuleSpecV1) Reset() { *m = OktaImportRuleSpecV1{} } func (m *OktaImportRuleSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleSpecV1) ProtoMessage() {} func (*OktaImportRuleSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{294} + return fileDescriptor_9198ee693835762e, []int{296} } func (m *OktaImportRuleSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16812,7 +16909,7 @@ func (m *OktaImportRuleMappingV1) Reset() { *m = OktaImportRuleMappingV1 func (m *OktaImportRuleMappingV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMappingV1) ProtoMessage() {} func (*OktaImportRuleMappingV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{295} + return fileDescriptor_9198ee693835762e, []int{297} } func (m *OktaImportRuleMappingV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16855,7 +16952,7 @@ type OktaImportRuleV1 struct { func (m *OktaImportRuleV1) Reset() { *m = OktaImportRuleV1{} } func (*OktaImportRuleV1) ProtoMessage() {} func (*OktaImportRuleV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{296} + return fileDescriptor_9198ee693835762e, []int{298} } func (m *OktaImportRuleV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16903,7 +17000,7 @@ func (m *OktaImportRuleMatchV1) Reset() { *m = OktaImportRuleMatchV1{} } func (m *OktaImportRuleMatchV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMatchV1) ProtoMessage() {} func (*OktaImportRuleMatchV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{297} + return fileDescriptor_9198ee693835762e, []int{299} } func (m *OktaImportRuleMatchV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16946,7 +17043,7 @@ type OktaAssignmentV1 struct { func (m *OktaAssignmentV1) Reset() { *m = OktaAssignmentV1{} } func (*OktaAssignmentV1) ProtoMessage() {} func (*OktaAssignmentV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{298} + return fileDescriptor_9198ee693835762e, []int{300} } func (m *OktaAssignmentV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17000,7 +17097,7 @@ func (m *OktaAssignmentSpecV1) Reset() { *m = OktaAssignmentSpecV1{} } func (m *OktaAssignmentSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentSpecV1) ProtoMessage() {} func (*OktaAssignmentSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{299} + return fileDescriptor_9198ee693835762e, []int{301} } func (m *OktaAssignmentSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17044,7 +17141,7 @@ func (m *OktaAssignmentTargetV1) Reset() { *m = OktaAssignmentTargetV1{} func (m *OktaAssignmentTargetV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentTargetV1) ProtoMessage() {} func (*OktaAssignmentTargetV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{300} + return fileDescriptor_9198ee693835762e, []int{302} } func (m *OktaAssignmentTargetV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17089,7 +17186,7 @@ type IntegrationV1 struct { func (m *IntegrationV1) Reset() { *m = IntegrationV1{} } func (*IntegrationV1) ProtoMessage() {} func (*IntegrationV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{301} + return fileDescriptor_9198ee693835762e, []int{303} } func (m *IntegrationV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17123,6 +17220,7 @@ type IntegrationSpecV1 struct { // Types that are valid to be assigned to SubKindSpec: // // *IntegrationSpecV1_AWSOIDC + // *IntegrationSpecV1_AzureOIDC SubKindSpec isIntegrationSpecV1_SubKindSpec `protobuf_oneof:"SubKindSpec"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -17133,7 +17231,7 @@ func (m *IntegrationSpecV1) Reset() { *m = IntegrationSpecV1{} } func (m *IntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*IntegrationSpecV1) ProtoMessage() {} func (*IntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{302} + return fileDescriptor_9198ee693835762e, []int{304} } func (m *IntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17171,8 +17269,12 @@ type isIntegrationSpecV1_SubKindSpec interface { type IntegrationSpecV1_AWSOIDC struct { AWSOIDC *AWSOIDCIntegrationSpecV1 `protobuf:"bytes,1,opt,name=AWSOIDC,proto3,oneof" json:"aws_oidc,omitempty"` } +type IntegrationSpecV1_AzureOIDC struct { + AzureOIDC *AzureOIDCIntegrationSpecV1 `protobuf:"bytes,2,opt,name=AzureOIDC,proto3,oneof" json:"azure_oidc,omitempty"` +} -func (*IntegrationSpecV1_AWSOIDC) isIntegrationSpecV1_SubKindSpec() {} +func (*IntegrationSpecV1_AWSOIDC) isIntegrationSpecV1_SubKindSpec() {} +func (*IntegrationSpecV1_AzureOIDC) isIntegrationSpecV1_SubKindSpec() {} func (m *IntegrationSpecV1) GetSubKindSpec() isIntegrationSpecV1_SubKindSpec { if m != nil { @@ -17188,10 +17290,18 @@ func (m *IntegrationSpecV1) GetAWSOIDC() *AWSOIDCIntegrationSpecV1 { return nil } +func (m *IntegrationSpecV1) GetAzureOIDC() *AzureOIDCIntegrationSpecV1 { + if x, ok := m.GetSubKindSpec().(*IntegrationSpecV1_AzureOIDC); ok { + return x.AzureOIDC + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*IntegrationSpecV1) XXX_OneofWrappers() []interface{} { return []interface{}{ (*IntegrationSpecV1_AWSOIDC)(nil), + (*IntegrationSpecV1_AzureOIDC)(nil), } } @@ -17216,7 +17326,7 @@ func (m *AWSOIDCIntegrationSpecV1) Reset() { *m = AWSOIDCIntegrationSpec func (m *AWSOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*AWSOIDCIntegrationSpecV1) ProtoMessage() {} func (*AWSOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{303} + return fileDescriptor_9198ee693835762e, []int{305} } func (m *AWSOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17245,6 +17355,52 @@ func (m *AWSOIDCIntegrationSpecV1) XXX_DiscardUnknown() { var xxx_messageInfo_AWSOIDCIntegrationSpecV1 proto.InternalMessageInfo +// AzureOIDCIntegrationSpecV1 contains the spec properties for the Azure OIDC SubKind Integration. +type AzureOIDCIntegrationSpecV1 struct { + // TenantID specifies the ID of Entra Tenant (Directory) + // that this plugin integrates with. + TenantID string `protobuf:"bytes,1,opt,name=TenantID,proto3" json:"tenant_id,omitempty"` + // ClientID specifies the ID of Azure enterprise application (client) + // that corresponds to this plugin. + ClientID string `protobuf:"bytes,2,opt,name=ClientID,proto3" json:"client_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AzureOIDCIntegrationSpecV1) Reset() { *m = AzureOIDCIntegrationSpecV1{} } +func (m *AzureOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } +func (*AzureOIDCIntegrationSpecV1) ProtoMessage() {} +func (*AzureOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{306} +} +func (m *AzureOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AzureOIDCIntegrationSpecV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AzureOIDCIntegrationSpecV1.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AzureOIDCIntegrationSpecV1) XXX_Merge(src proto.Message) { + xxx_messageInfo_AzureOIDCIntegrationSpecV1.Merge(m, src) +} +func (m *AzureOIDCIntegrationSpecV1) XXX_Size() int { + return m.Size() +} +func (m *AzureOIDCIntegrationSpecV1) XXX_DiscardUnknown() { + xxx_messageInfo_AzureOIDCIntegrationSpecV1.DiscardUnknown(m) +} + +var xxx_messageInfo_AzureOIDCIntegrationSpecV1 proto.InternalMessageInfo + // HeadlessAuthentication holds data for an ongoing headless authentication attempt. type HeadlessAuthentication struct { // Header is the resource header. @@ -17268,7 +17424,7 @@ func (m *HeadlessAuthentication) Reset() { *m = HeadlessAuthentication{} func (m *HeadlessAuthentication) String() string { return proto.CompactTextString(m) } func (*HeadlessAuthentication) ProtoMessage() {} func (*HeadlessAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{304} + return fileDescriptor_9198ee693835762e, []int{307} } func (m *HeadlessAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17325,7 +17481,7 @@ func (m *WatchKind) Reset() { *m = WatchKind{} } func (m *WatchKind) String() string { return proto.CompactTextString(m) } func (*WatchKind) ProtoMessage() {} func (*WatchKind) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{305} + return fileDescriptor_9198ee693835762e, []int{308} } func (m *WatchKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17375,7 +17531,7 @@ func (m *WatchStatusV1) Reset() { *m = WatchStatusV1{} } func (m *WatchStatusV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusV1) ProtoMessage() {} func (*WatchStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{306} + return fileDescriptor_9198ee693835762e, []int{309} } func (m *WatchStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17416,7 +17572,7 @@ func (m *WatchStatusSpecV1) Reset() { *m = WatchStatusSpecV1{} } func (m *WatchStatusSpecV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusSpecV1) ProtoMessage() {} func (*WatchStatusSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{307} + return fileDescriptor_9198ee693835762e, []int{310} } func (m *WatchStatusSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17466,7 +17622,7 @@ func (m *ServerInfoV1) Reset() { *m = ServerInfoV1{} } func (m *ServerInfoV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoV1) ProtoMessage() {} func (*ServerInfoV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{308} + return fileDescriptor_9198ee693835762e, []int{311} } func (m *ServerInfoV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17508,7 +17664,7 @@ func (m *ServerInfoSpecV1) Reset() { *m = ServerInfoSpecV1{} } func (m *ServerInfoSpecV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoSpecV1) ProtoMessage() {} func (*ServerInfoSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{309} + return fileDescriptor_9198ee693835762e, []int{312} } func (m *ServerInfoSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17575,7 +17731,7 @@ func (m *JamfSpecV1) Reset() { *m = JamfSpecV1{} } func (m *JamfSpecV1) String() string { return proto.CompactTextString(m) } func (*JamfSpecV1) ProtoMessage() {} func (*JamfSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{310} + return fileDescriptor_9198ee693835762e, []int{313} } func (m *JamfSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17640,7 +17796,7 @@ func (m *JamfInventoryEntry) Reset() { *m = JamfInventoryEntry{} } func (m *JamfInventoryEntry) String() string { return proto.CompactTextString(m) } func (*JamfInventoryEntry) ProtoMessage() {} func (*JamfInventoryEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{311} + return fileDescriptor_9198ee693835762e, []int{314} } func (m *JamfInventoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17697,7 +17853,7 @@ type MessageWithHeader struct { func (m *MessageWithHeader) Reset() { *m = MessageWithHeader{} } func (*MessageWithHeader) ProtoMessage() {} func (*MessageWithHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{312} + return fileDescriptor_9198ee693835762e, []int{315} } func (m *MessageWithHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17757,7 +17913,7 @@ func (m *AWSMatcher) Reset() { *m = AWSMatcher{} } func (m *AWSMatcher) String() string { return proto.CompactTextString(m) } func (*AWSMatcher) ProtoMessage() {} func (*AWSMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{313} + return fileDescriptor_9198ee693835762e, []int{316} } func (m *AWSMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17802,7 +17958,7 @@ func (m *AssumeRole) Reset() { *m = AssumeRole{} } func (m *AssumeRole) String() string { return proto.CompactTextString(m) } func (*AssumeRole) ProtoMessage() {} func (*AssumeRole) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{314} + return fileDescriptor_9198ee693835762e, []int{317} } func (m *AssumeRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17858,7 +18014,7 @@ func (m *InstallerParams) Reset() { *m = InstallerParams{} } func (m *InstallerParams) String() string { return proto.CompactTextString(m) } func (*InstallerParams) ProtoMessage() {} func (*InstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{315} + return fileDescriptor_9198ee693835762e, []int{318} } func (m *InstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17901,7 +18057,7 @@ func (m *AWSSSM) Reset() { *m = AWSSSM{} } func (m *AWSSSM) String() string { return proto.CompactTextString(m) } func (*AWSSSM) ProtoMessage() {} func (*AWSSSM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{316} + return fileDescriptor_9198ee693835762e, []int{319} } func (m *AWSSSM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17944,7 +18100,7 @@ func (m *AzureInstallerParams) Reset() { *m = AzureInstallerParams{} } func (m *AzureInstallerParams) String() string { return proto.CompactTextString(m) } func (*AzureInstallerParams) ProtoMessage() {} func (*AzureInstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{317} + return fileDescriptor_9198ee693835762e, []int{320} } func (m *AzureInstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17998,7 +18154,7 @@ func (m *AzureMatcher) Reset() { *m = AzureMatcher{} } func (m *AzureMatcher) String() string { return proto.CompactTextString(m) } func (*AzureMatcher) ProtoMessage() {} func (*AzureMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{318} + return fileDescriptor_9198ee693835762e, []int{321} } func (m *AzureMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18053,7 +18209,7 @@ func (m *GCPMatcher) Reset() { *m = GCPMatcher{} } func (m *GCPMatcher) String() string { return proto.CompactTextString(m) } func (*GCPMatcher) ProtoMessage() {} func (*GCPMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{319} + return fileDescriptor_9198ee693835762e, []int{322} } func (m *GCPMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18099,7 +18255,7 @@ func (m *KubernetesMatcher) Reset() { *m = KubernetesMatcher{} } func (m *KubernetesMatcher) String() string { return proto.CompactTextString(m) } func (*KubernetesMatcher) ProtoMessage() {} func (*KubernetesMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{320} + return fileDescriptor_9198ee693835762e, []int{323} } func (m *KubernetesMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18141,7 +18297,7 @@ func (m *OktaOptions) Reset() { *m = OktaOptions{} } func (m *OktaOptions) String() string { return proto.CompactTextString(m) } func (*OktaOptions) ProtoMessage() {} func (*OktaOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{321} + return fileDescriptor_9198ee693835762e, []int{324} } func (m *OktaOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18183,7 +18339,7 @@ func (m *AccessGraphSync) Reset() { *m = AccessGraphSync{} } func (m *AccessGraphSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphSync) ProtoMessage() {} func (*AccessGraphSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{322} + return fileDescriptor_9198ee693835762e, []int{325} } func (m *AccessGraphSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18229,7 +18385,7 @@ func (m *AccessGraphAWSSync) Reset() { *m = AccessGraphAWSSync{} } func (m *AccessGraphAWSSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphAWSSync) ProtoMessage() {} func (*AccessGraphAWSSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{323} + return fileDescriptor_9198ee693835762e, []int{326} } func (m *AccessGraphAWSSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18576,6 +18732,8 @@ func init() { proto.RegisterType((*DiscordChannels)(nil), "types.DiscordChannels") proto.RegisterType((*PluginDiscordSettings)(nil), "types.PluginDiscordSettings") proto.RegisterMapType((map[string]*DiscordChannels)(nil), "types.PluginDiscordSettings.RoleToRecipientsEntry") + proto.RegisterType((*PluginEntraIDSettings)(nil), "types.PluginEntraIDSettings") + proto.RegisterType((*PluginEntraIDSyncSettings)(nil), "types.PluginEntraIDSyncSettings") proto.RegisterType((*PluginBootstrapCredentialsV1)(nil), "types.PluginBootstrapCredentialsV1") proto.RegisterType((*PluginIdSecretCredential)(nil), "types.PluginIdSecretCredential") proto.RegisterType((*PluginOAuth2AuthorizationCodeCredentials)(nil), "types.PluginOAuth2AuthorizationCodeCredentials") @@ -18615,6 +18773,7 @@ func init() { proto.RegisterType((*IntegrationV1)(nil), "types.IntegrationV1") proto.RegisterType((*IntegrationSpecV1)(nil), "types.IntegrationSpecV1") proto.RegisterType((*AWSOIDCIntegrationSpecV1)(nil), "types.AWSOIDCIntegrationSpecV1") + proto.RegisterType((*AzureOIDCIntegrationSpecV1)(nil), "types.AzureOIDCIntegrationSpecV1") proto.RegisterType((*HeadlessAuthentication)(nil), "types.HeadlessAuthentication") proto.RegisterType((*WatchKind)(nil), "types.WatchKind") proto.RegisterMapType((map[string]string)(nil), "types.WatchKind.FilterEntry") @@ -18642,1600 +18801,1607 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 25484 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xfd, 0x7d, 0x70, 0x1c, 0x49, - 0x76, 0x20, 0x86, 0x4f, 0x7f, 0x00, 0x68, 0x3c, 0x7c, 0x35, 0x12, 0x20, 0x09, 0x62, 0xc8, 0x01, - 0xa7, 0x38, 0xc3, 0x21, 0xe7, 0x83, 0x5c, 0x82, 0x3b, 0xdc, 0x9d, 0xef, 0x69, 0x74, 0x83, 0x44, - 0x93, 0x20, 0xd0, 0x53, 0x0d, 0x10, 0x3b, 0x9a, 0xdd, 0xed, 0x2d, 0x74, 0x27, 0x80, 0x1a, 0x74, - 0x77, 0xf5, 0x56, 0x55, 0x13, 0xc4, 0xea, 0xee, 0xa7, 0x8f, 0x3b, 0xdd, 0xfe, 0x64, 0x9d, 0xbe, - 0xce, 0xab, 0xd3, 0x9e, 0x7d, 0xa7, 0x50, 0x28, 0xee, 0xce, 0x3a, 0xfb, 0xa4, 0x70, 0x48, 0xba, - 0xb8, 0x73, 0xc8, 0x27, 0x9f, 0x1c, 0x0a, 0x85, 0xac, 0x8b, 0xb3, 0x15, 0x61, 0x3b, 0xec, 0x5b, - 0x2b, 0x20, 0xcb, 0xb2, 0x2f, 0x1c, 0x0c, 0xfb, 0x42, 0xb6, 0xec, 0x0b, 0x7b, 0x1c, 0xb2, 0x1d, - 0xf9, 0x32, 0xb3, 0x2a, 0xb3, 0xaa, 0xba, 0xd1, 0x18, 0x72, 0x2c, 0x71, 0xec, 0x7f, 0x48, 0xf4, - 0xcb, 0xf7, 0x5e, 0x7e, 0xd6, 0xcb, 0x97, 0x2f, 0xdf, 0x7b, 0x09, 0xcf, 0xfb, 0xb4, 0x49, 0x3b, - 0x8e, 0xeb, 0x5f, 0x6b, 0xd2, 0x5d, 0xab, 0x7e, 0x78, 0xcd, 0x3f, 0xec, 0x50, 0x8f, 0xff, 0x7b, - 0xb5, 0xe3, 0x3a, 0xbe, 0x43, 0x86, 0xf0, 0xc7, 0xfc, 0xec, 0xae, 0xb3, 0xeb, 0x20, 0xe4, 0x1a, - 0xfb, 0x8b, 0x17, 0xce, 0x2f, 0xec, 0x3a, 0xce, 0x6e, 0x93, 0x5e, 0xc3, 0x5f, 0xdb, 0xdd, 0x9d, - 0x6b, 0xbe, 0xdd, 0xa2, 0x9e, 0x6f, 0xb5, 0x3a, 0x02, 0xe1, 0x4a, 0x50, 0x81, 0xe5, 0xfb, 0xac, - 0xc4, 0xb7, 0x9d, 0xf6, 0xb5, 0x07, 0xd7, 0xd5, 0x9f, 0x02, 0xf5, 0xb5, 0xe4, 0xb6, 0x1c, 0xb8, - 0x56, 0xa7, 0x43, 0xdd, 0xf0, 0x0f, 0x8e, 0x6e, 0xfc, 0xc3, 0x0c, 0x8c, 0xde, 0xa5, 0xb4, 0x53, - 0x68, 0xda, 0x0f, 0x28, 0xb9, 0x08, 0xd9, 0x35, 0xab, 0x45, 0xe7, 0x52, 0x17, 0x52, 0x97, 0x47, - 0x97, 0xa6, 0x1e, 0x1d, 0x2d, 0x8c, 0x79, 0xd4, 0x7d, 0x40, 0xdd, 0x5a, 0xdb, 0x6a, 0x51, 0x13, - 0x0b, 0xc9, 0x2b, 0x30, 0xca, 0xfe, 0xf7, 0x3a, 0x56, 0x9d, 0xce, 0xa5, 0x11, 0x73, 0xe2, 0xd1, - 0xd1, 0xc2, 0x68, 0x5b, 0x02, 0xcd, 0xb0, 0x9c, 0x5c, 0x82, 0x91, 0x55, 0x6a, 0x79, 0xb4, 0x5c, - 0x9a, 0xcb, 0x5c, 0x48, 0x5d, 0xce, 0x2c, 0x8d, 0x3f, 0x3a, 0x5a, 0xc8, 0x35, 0x19, 0xa8, 0x66, - 0x37, 0x4c, 0x59, 0x48, 0xca, 0x30, 0xb2, 0xfc, 0xb0, 0x63, 0xbb, 0xd4, 0x9b, 0xcb, 0x5e, 0x48, - 0x5d, 0x1e, 0x5b, 0x9c, 0xbf, 0xca, 0x07, 0xe5, 0xaa, 0x1c, 0x94, 0xab, 0x1b, 0x72, 0x50, 0x96, - 0x66, 0x7e, 0xe7, 0x68, 0xe1, 0x99, 0x47, 0x47, 0x0b, 0x23, 0x94, 0x93, 0xfc, 0xd4, 0x1f, 0x2c, - 0xa4, 0x4c, 0x49, 0x4f, 0xde, 0x86, 0xec, 0xc6, 0x61, 0x87, 0xce, 0x8d, 0x5e, 0x48, 0x5d, 0x9e, - 0x5c, 0x7c, 0xee, 0x2a, 0x9f, 0x86, 0xa0, 0x93, 0xe1, 0x5f, 0x0c, 0x6b, 0x29, 0xf7, 0xe8, 0x68, - 0x21, 0xcb, 0x50, 0x4c, 0xa4, 0x22, 0xaf, 0xc1, 0xf0, 0x8a, 0xe3, 0xf9, 0xe5, 0xd2, 0x1c, 0x60, - 0xd7, 0x4e, 0x3d, 0x3a, 0x5a, 0x98, 0xde, 0x73, 0x3c, 0xbf, 0x66, 0x37, 0x5e, 0x75, 0x5a, 0xb6, - 0x4f, 0x5b, 0x1d, 0xff, 0xd0, 0x14, 0x48, 0xc6, 0x43, 0x98, 0xd0, 0xf8, 0x91, 0x31, 0x18, 0xd9, - 0x5c, 0xbb, 0xbb, 0xb6, 0xbe, 0xb5, 0x96, 0x7f, 0x86, 0xe4, 0x20, 0xbb, 0xb6, 0x5e, 0x5a, 0xce, - 0xa7, 0xc8, 0x08, 0x64, 0x0a, 0x95, 0x4a, 0x3e, 0x4d, 0xc6, 0x21, 0x57, 0x2a, 0x6c, 0x14, 0x96, - 0x0a, 0xd5, 0xe5, 0x7c, 0x86, 0xcc, 0xc0, 0xd4, 0x56, 0x79, 0xad, 0xb4, 0xbe, 0x55, 0xad, 0x95, - 0x96, 0xab, 0x77, 0x37, 0xd6, 0x2b, 0xf9, 0x2c, 0x99, 0x04, 0xb8, 0xbb, 0xb9, 0xb4, 0x6c, 0xae, - 0x2d, 0x6f, 0x2c, 0x57, 0xf3, 0x43, 0x64, 0x16, 0xf2, 0x92, 0xa4, 0x56, 0x5d, 0x36, 0xef, 0x97, - 0x8b, 0xcb, 0xf9, 0x61, 0xe3, 0x1f, 0x67, 0x20, 0x77, 0x8f, 0xfa, 0x56, 0xc3, 0xf2, 0x2d, 0x72, - 0x4e, 0x9b, 0x38, 0xec, 0x93, 0x32, 0x63, 0x17, 0xe3, 0x33, 0x36, 0xf4, 0xe8, 0x68, 0x21, 0xf5, - 0x9a, 0x3a, 0x53, 0x6f, 0xc1, 0x58, 0x89, 0x7a, 0x75, 0xd7, 0xee, 0xb0, 0xd5, 0x84, 0xb3, 0x35, - 0xba, 0x74, 0xf6, 0xd1, 0xd1, 0xc2, 0xa9, 0x46, 0x08, 0x56, 0x46, 0x40, 0xc5, 0x26, 0x65, 0x18, - 0x5e, 0xb5, 0xb6, 0x69, 0xd3, 0x9b, 0x1b, 0xba, 0x90, 0xb9, 0x3c, 0xb6, 0xf8, 0xac, 0x18, 0x75, - 0xd9, 0xc0, 0xab, 0xbc, 0x74, 0xb9, 0xed, 0xbb, 0x87, 0x4b, 0xb3, 0x8f, 0x8e, 0x16, 0xf2, 0x4d, - 0x04, 0xa8, 0x23, 0xca, 0x51, 0x48, 0x35, 0x5c, 0x09, 0xc3, 0xc7, 0xae, 0x84, 0xf3, 0xbf, 0x73, - 0xb4, 0x90, 0x62, 0x33, 0x24, 0x56, 0x42, 0xc8, 0x4f, 0x5f, 0x13, 0x06, 0xa4, 0xcb, 0xa5, 0xb9, - 0x11, 0x5c, 0x81, 0xe4, 0xd1, 0xd1, 0xc2, 0xb8, 0x3a, 0x99, 0x73, 0x29, 0x33, 0x5d, 0x2e, 0x91, - 0x45, 0xc8, 0x99, 0xf4, 0x81, 0xed, 0xb1, 0xde, 0xe7, 0xb0, 0xf7, 0xa7, 0x1f, 0x1d, 0x2d, 0x10, - 0x57, 0xc0, 0x94, 0xa6, 0x06, 0x78, 0xf3, 0x6f, 0xc0, 0x98, 0xd2, 0x33, 0x92, 0x87, 0xcc, 0x3e, - 0x3d, 0xe4, 0xb3, 0x60, 0xb2, 0x3f, 0xc9, 0x2c, 0x0c, 0x3d, 0xb0, 0x9a, 0x5d, 0x31, 0xec, 0x26, - 0xff, 0xf1, 0x66, 0xfa, 0xcb, 0x29, 0xe3, 0xaf, 0x65, 0x21, 0x67, 0x3a, 0xfc, 0xdb, 0x25, 0x57, - 0x60, 0xa8, 0xea, 0x5b, 0xbe, 0x9c, 0xc0, 0x99, 0x47, 0x47, 0x0b, 0x53, 0xec, 0xbb, 0xa6, 0x4a, - 0xad, 0x1c, 0x83, 0xa1, 0x56, 0xf6, 0x2c, 0x4f, 0x4e, 0x24, 0xa2, 0x76, 0x18, 0x40, 0x45, 0x45, - 0x0c, 0x72, 0x09, 0xb2, 0xf7, 0x9c, 0x06, 0x15, 0x73, 0xc9, 0xfa, 0x3d, 0xd9, 0x72, 0x1a, 0x2a, - 0x22, 0x96, 0x93, 0x57, 0x61, 0xb4, 0xd8, 0x75, 0x5d, 0xda, 0x66, 0xcb, 0x3e, 0x8b, 0xc8, 0x93, - 0x8f, 0x8e, 0x16, 0xa0, 0xce, 0x81, 0xec, 0x43, 0x0d, 0x11, 0xd8, 0x04, 0x55, 0x7d, 0xcb, 0xf5, - 0x69, 0x63, 0x6e, 0x68, 0xa0, 0x09, 0x62, 0x9f, 0xea, 0xb4, 0xc7, 0x49, 0xa2, 0x13, 0x24, 0x38, - 0x91, 0x15, 0x18, 0xbb, 0xed, 0x5a, 0x75, 0x5a, 0xa1, 0xae, 0xed, 0x34, 0x70, 0xe6, 0x33, 0x4b, - 0x97, 0x1e, 0x1d, 0x2d, 0x9c, 0xde, 0x65, 0xe0, 0x5a, 0x07, 0xe1, 0x21, 0xf5, 0x27, 0x47, 0x0b, - 0xb9, 0x52, 0xd7, 0xc5, 0xd1, 0x33, 0x55, 0x52, 0xf2, 0x0d, 0x36, 0x25, 0x9e, 0x8f, 0x43, 0x4b, - 0x1b, 0x38, 0xe7, 0xfd, 0x9b, 0x68, 0x88, 0x26, 0x9e, 0x6e, 0x5a, 0x9e, 0x5f, 0x73, 0x39, 0x5d, - 0xa4, 0x9d, 0x2a, 0x4b, 0xb2, 0x0e, 0xb9, 0x6a, 0x7d, 0x8f, 0x36, 0xba, 0x4d, 0x8a, 0x0b, 0x65, - 0x6c, 0xf1, 0x8c, 0x58, 0xee, 0x72, 0x3e, 0x65, 0xf1, 0xd2, 0xbc, 0xe0, 0x4d, 0x3c, 0x01, 0x51, - 0x57, 0x91, 0xc4, 0x7a, 0x33, 0xf7, 0xdd, 0x9f, 0x5f, 0x78, 0xe6, 0x07, 0x7f, 0xff, 0xc2, 0x33, - 0xc6, 0x3f, 0x4c, 0x43, 0x3e, 0xca, 0x84, 0xec, 0xc0, 0xc4, 0x66, 0xa7, 0x61, 0xf9, 0xb4, 0xd8, - 0xb4, 0x69, 0xdb, 0xf7, 0x70, 0x91, 0xf4, 0xef, 0xd3, 0x0b, 0xa2, 0xde, 0xb9, 0x2e, 0x12, 0xd6, - 0xea, 0x9c, 0x32, 0xd2, 0x2b, 0x9d, 0x6d, 0x58, 0x4f, 0x15, 0x65, 0xbe, 0x87, 0x2b, 0xec, 0x64, - 0xf5, 0xf0, 0xdd, 0xa2, 0x47, 0x3d, 0x82, 0xad, 0x58, 0x40, 0xed, 0xc6, 0xf6, 0x21, 0xae, 0xcc, - 0xc1, 0x17, 0x10, 0x23, 0x49, 0x58, 0x40, 0x0c, 0x6c, 0xfc, 0xb7, 0x29, 0x98, 0x34, 0xa9, 0xe7, - 0x74, 0xdd, 0x3a, 0x5d, 0xa1, 0x56, 0x83, 0xba, 0x6c, 0xf9, 0xdf, 0xb5, 0xdb, 0x0d, 0xf1, 0x4d, - 0xe1, 0xf2, 0xdf, 0xb7, 0xdb, 0xaa, 0x14, 0xc7, 0x72, 0xf2, 0x05, 0x18, 0xa9, 0x76, 0xb7, 0x11, - 0x35, 0x1d, 0x7e, 0xf7, 0x5e, 0x77, 0xbb, 0x16, 0x41, 0x97, 0x68, 0xe4, 0x1a, 0x8c, 0xdc, 0xa7, - 0xae, 0x17, 0xca, 0x49, 0xdc, 0x25, 0x1e, 0x70, 0x90, 0x4a, 0x20, 0xb0, 0xc8, 0xed, 0x50, 0x56, - 0x8b, 0xfd, 0x6d, 0x2a, 0x22, 0x21, 0xc3, 0xa5, 0xd2, 0x12, 0x10, 0x75, 0xa9, 0x48, 0x2c, 0xe3, - 0xa7, 0xd3, 0x90, 0x2f, 0x59, 0xbe, 0xb5, 0x6d, 0x79, 0x62, 0x3c, 0xef, 0xdf, 0x60, 0xd2, 0x5f, - 0xe9, 0x28, 0x4a, 0x7f, 0xd6, 0xf2, 0x4f, 0xdd, 0xbd, 0x17, 0xa3, 0xdd, 0x1b, 0x63, 0x9b, 0xad, - 0xe8, 0x5e, 0xd8, 0xa9, 0x77, 0x8e, 0xef, 0x54, 0x5e, 0x74, 0x2a, 0x27, 0x3b, 0x15, 0x76, 0x85, - 0xbc, 0x03, 0xd9, 0x6a, 0x87, 0xd6, 0x85, 0x10, 0x91, 0x3b, 0x86, 0xde, 0x39, 0x86, 0x70, 0xff, - 0xc6, 0xd2, 0xb8, 0x60, 0x93, 0xf5, 0x3a, 0xb4, 0x6e, 0x22, 0x99, 0xf2, 0xd1, 0xfc, 0xa3, 0x0c, - 0xcc, 0x26, 0x91, 0xa9, 0xfd, 0x18, 0xee, 0xd3, 0x8f, 0xcb, 0x90, 0x63, 0xbb, 0x39, 0xdb, 0x30, - 0x51, 0x5c, 0x8c, 0x72, 0x25, 0x65, 0x4f, 0xc0, 0xcc, 0xa0, 0x94, 0x5c, 0x0c, 0x94, 0x83, 0x5c, - 0xc8, 0x4f, 0x28, 0x07, 0x52, 0x25, 0x60, 0x73, 0x2d, 0x3f, 0x61, 0xd4, 0x21, 0xc2, 0x61, 0x91, - 0xe0, 0x70, 0xae, 0x5d, 0x01, 0xd1, 0x36, 0x17, 0xb9, 0x29, 0x2c, 0x43, 0x4e, 0x76, 0x6b, 0x6e, - 0x1c, 0x19, 0x4d, 0x47, 0x06, 0xe9, 0xfe, 0x0d, 0x3e, 0x99, 0x0d, 0xf1, 0x5b, 0x65, 0x23, 0x71, - 0xc8, 0x0d, 0xc8, 0x55, 0x5c, 0xe7, 0xe1, 0x61, 0xb9, 0xe4, 0xcd, 0x4d, 0x5c, 0xc8, 0x5c, 0x1e, - 0x5d, 0x3a, 0xf3, 0xe8, 0x68, 0x61, 0xa6, 0xc3, 0x60, 0x35, 0xbb, 0xa1, 0xee, 0xc1, 0x01, 0xe2, - 0x9d, 0x6c, 0x2e, 0x95, 0x4f, 0xdf, 0xc9, 0xe6, 0xd2, 0xf9, 0xcc, 0x9d, 0x6c, 0x2e, 0x93, 0xcf, - 0xde, 0xc9, 0xe6, 0xb2, 0xf9, 0xa1, 0x3b, 0xd9, 0xdc, 0x50, 0x7e, 0xf8, 0x4e, 0x36, 0x37, 0x9a, - 0x87, 0x3b, 0xd9, 0xdc, 0x58, 0x7e, 0x5c, 0xd3, 0x03, 0x90, 0x81, 0xef, 0xd4, 0x9d, 0xa6, 0x99, - 0xd9, 0x34, 0xcb, 0xe6, 0x70, 0xb1, 0x50, 0xa4, 0xae, 0x6f, 0x66, 0x0a, 0x5b, 0x55, 0x73, 0xa2, - 0x74, 0xd8, 0xb6, 0x5a, 0x76, 0x9d, 0x6f, 0x98, 0x66, 0xe6, 0x76, 0xb1, 0x62, 0x14, 0x60, 0x32, - 0xec, 0xcb, 0xaa, 0xed, 0xf9, 0xe4, 0x1a, 0x8c, 0x4a, 0x08, 0x13, 0x74, 0x99, 0xc4, 0x5e, 0x9b, - 0x21, 0x8e, 0xf1, 0xdb, 0x69, 0x80, 0xb0, 0xe4, 0x29, 0xfd, 0x16, 0xbe, 0xa4, 0x7d, 0x0b, 0xa7, - 0xa2, 0xdf, 0x42, 0xcf, 0xaf, 0x80, 0xbc, 0x07, 0xc3, 0x4c, 0x2d, 0xe8, 0x4a, 0x65, 0xe9, 0x4c, - 0x94, 0x14, 0x0b, 0xef, 0xdf, 0x58, 0x9a, 0x14, 0xc4, 0xc3, 0x1e, 0x42, 0x4c, 0x41, 0xa6, 0x7c, - 0x46, 0x3f, 0x37, 0x12, 0x4e, 0x86, 0xf8, 0x80, 0x2e, 0x43, 0x30, 0xa1, 0x62, 0x40, 0xf1, 0xcb, - 0xe8, 0xc8, 0x49, 0x0e, 0x4a, 0xc9, 0x59, 0x60, 0x13, 0x2e, 0x06, 0x75, 0xe4, 0xd1, 0xd1, 0x42, - 0xa6, 0xeb, 0xda, 0xb8, 0x08, 0xc8, 0x35, 0x10, 0xcb, 0x40, 0x0c, 0x20, 0x5b, 0x7d, 0xd3, 0x75, - 0xab, 0x56, 0xa7, 0xae, 0xaf, 0x29, 0x61, 0x02, 0x8d, 0x74, 0x40, 0x5f, 0x2a, 0x73, 0x59, 0x5c, - 0x06, 0x97, 0x13, 0x47, 0xe5, 0xaa, 0x86, 0xca, 0x15, 0xcc, 0x0b, 0x72, 0x57, 0x6a, 0xf0, 0xb2, - 0x5a, 0x4c, 0xd9, 0xd4, 0x2b, 0x20, 0x37, 0x80, 0xad, 0x50, 0x31, 0xfa, 0x20, 0xea, 0x29, 0x6c, - 0x55, 0x97, 0x4e, 0x09, 0x4e, 0x13, 0xd6, 0x81, 0x4a, 0xce, 0xb0, 0xc9, 0x5b, 0xc0, 0x96, 0xb0, - 0x18, 0x77, 0x22, 0x88, 0x6e, 0x17, 0x2b, 0xc5, 0xa6, 0xd3, 0x6d, 0x54, 0x3f, 0x58, 0x0d, 0x89, - 0x77, 0xeb, 0x1d, 0x95, 0xf8, 0x76, 0xb1, 0x42, 0xde, 0x82, 0xa1, 0xc2, 0xb7, 0xba, 0x2e, 0x15, - 0xfa, 0xc9, 0xb8, 0xac, 0x93, 0xc1, 0x96, 0xce, 0x08, 0xc2, 0x29, 0x8b, 0xfd, 0x54, 0xf5, 0x3a, - 0x2c, 0x67, 0x35, 0x6f, 0xac, 0x56, 0x85, 0xee, 0x41, 0x22, 0xc3, 0xb2, 0xb1, 0xaa, 0x34, 0xdb, - 0xd7, 0x7a, 0xcd, 0xa8, 0xc8, 0x35, 0x48, 0x17, 0x4a, 0x78, 0x38, 0x1a, 0x5b, 0x1c, 0x95, 0xd5, - 0x96, 0x96, 0x66, 0x05, 0xc9, 0xb8, 0xa5, 0x7e, 0x06, 0xe9, 0x42, 0x89, 0x2c, 0xc1, 0xd0, 0xbd, - 0xc3, 0xea, 0x07, 0xab, 0x42, 0x98, 0xcd, 0xc8, 0x75, 0xcd, 0x60, 0xeb, 0xf8, 0xd9, 0x7b, 0x61, - 0x8b, 0x5b, 0x87, 0xde, 0x37, 0x9b, 0x6a, 0x8b, 0x11, 0x8d, 0x54, 0x60, 0xb4, 0xd0, 0x68, 0xd9, - 0xed, 0x4d, 0x8f, 0xba, 0x73, 0x63, 0xc8, 0x67, 0x2e, 0xd2, 0xee, 0xa0, 0x7c, 0x69, 0xee, 0xd1, - 0xd1, 0xc2, 0xac, 0xc5, 0x7e, 0xd6, 0xba, 0x1e, 0x75, 0x15, 0x6e, 0x21, 0x13, 0x52, 0x01, 0xb8, - 0xe7, 0xb4, 0x77, 0x9d, 0x82, 0xdf, 0xb4, 0xbc, 0x88, 0x78, 0x0c, 0x0b, 0x02, 0xf5, 0xe1, 0x54, - 0x8b, 0xc1, 0x6a, 0x16, 0x03, 0x2a, 0x0c, 0x15, 0x1e, 0xe4, 0x16, 0x0c, 0xaf, 0xbb, 0x56, 0xbd, - 0x49, 0xe7, 0x26, 0x90, 0xdb, 0xac, 0xe0, 0xc6, 0x81, 0xb2, 0xa7, 0x73, 0x82, 0x61, 0xde, 0x41, - 0xb0, 0x7a, 0x80, 0xe1, 0x88, 0xf3, 0x5b, 0x40, 0xe2, 0x6b, 0x32, 0xe1, 0x68, 0xf0, 0x8a, 0x7a, - 0x34, 0x08, 0x3f, 0xfa, 0xa2, 0xd3, 0x6a, 0x59, 0xed, 0x06, 0xd2, 0xde, 0x5f, 0x54, 0x4f, 0x0c, - 0xdf, 0x84, 0xe9, 0xd8, 0x60, 0x1d, 0x73, 0xf2, 0x7b, 0x17, 0xa6, 0x4a, 0x74, 0xc7, 0xea, 0x36, - 0xfd, 0x60, 0x27, 0xe1, 0x9f, 0x28, 0x9e, 0xc1, 0x1a, 0xbc, 0xa8, 0x26, 0xb7, 0x0f, 0x33, 0x8a, - 0x6c, 0xbc, 0x03, 0x13, 0x5a, 0xf7, 0xd9, 0x51, 0xa1, 0xd0, 0x6d, 0xd8, 0x3e, 0x4e, 0x64, 0x2a, - 0x3c, 0x2a, 0x58, 0x0c, 0x88, 0xd3, 0x65, 0x86, 0x08, 0xc6, 0xdf, 0x56, 0xb5, 0x15, 0x21, 0x89, - 0xd8, 0x09, 0x5b, 0xc8, 0x83, 0x54, 0xa8, 0x3b, 0xc5, 0xe4, 0x41, 0x20, 0x0d, 0xae, 0xf0, 0x6f, - 0x33, 0x1d, 0xfb, 0x36, 0xc7, 0xc4, 0x4c, 0x64, 0xac, 0x03, 0x8f, 0x7f, 0x91, 0xc1, 0x4a, 0xcd, - 0x7c, 0xfa, 0x95, 0xfa, 0x1e, 0x8c, 0xdf, 0xb3, 0xda, 0xd6, 0x2e, 0x6d, 0xb0, 0x1e, 0x70, 0xd9, - 0x33, 0xba, 0xf4, 0xec, 0xa3, 0xa3, 0x85, 0x33, 0x2d, 0x0e, 0xc7, 0x5e, 0xaa, 0x8b, 0x48, 0x23, - 0x20, 0xd7, 0xe5, 0x97, 0x3d, 0x94, 0xf0, 0x65, 0x4f, 0x88, 0xda, 0x87, 0xf0, 0xcb, 0x16, 0xdf, - 0xb3, 0xf1, 0xbf, 0xe4, 0xb0, 0x8f, 0xe4, 0x55, 0x18, 0x36, 0xe9, 0x2e, 0xdb, 0x6a, 0x52, 0xe1, - 0x24, 0xb9, 0x08, 0x51, 0x07, 0x86, 0xe3, 0xa0, 0x9e, 0x41, 0x1b, 0xde, 0x9e, 0xbd, 0xe3, 0x8b, - 0xd1, 0x09, 0xf4, 0x0c, 0x01, 0x56, 0xf4, 0x0c, 0x01, 0xd1, 0x0f, 0xb1, 0x1c, 0xc6, 0xa4, 0x9f, - 0x59, 0xaa, 0x8a, 0x41, 0x93, 0x23, 0x6c, 0x96, 0x14, 0x31, 0xe2, 0x6a, 0x5a, 0x02, 0xc3, 0x26, - 0x37, 0x61, 0xb4, 0x50, 0xaf, 0x3b, 0x5d, 0xe5, 0xcc, 0xc8, 0xbf, 0x5b, 0x0e, 0xd4, 0xad, 0x25, - 0x21, 0x2a, 0xa9, 0xc2, 0xd8, 0x32, 0x3b, 0x68, 0xd9, 0x45, 0xab, 0xbe, 0x27, 0x07, 0x49, 0xca, - 0x30, 0xa5, 0x24, 0xfc, 0x72, 0x29, 0x02, 0xeb, 0x0c, 0xa8, 0x9a, 0x1f, 0x14, 0x5c, 0xb2, 0x01, - 0x63, 0x55, 0x5a, 0x77, 0xa9, 0x5f, 0xf5, 0x1d, 0x97, 0x46, 0x44, 0xb2, 0x52, 0xb2, 0xf4, 0x9c, - 0x3c, 0xeb, 0x79, 0x08, 0xac, 0x79, 0x0c, 0xaa, 0x72, 0x55, 0x90, 0xb9, 0xd2, 0xde, 0x72, 0xdc, - 0xc3, 0xd2, 0x92, 0x10, 0xd3, 0xe1, 0x9e, 0xce, 0xc1, 0xaa, 0xd2, 0xce, 0x20, 0x8d, 0x6d, 0x5d, - 0x69, 0xe7, 0x58, 0x38, 0x53, 0xa5, 0x2a, 0xea, 0x56, 0x42, 0x68, 0x4f, 0x85, 0xa3, 0x8c, 0x60, - 0x65, 0xa6, 0x1a, 0x1e, 0x6a, 0x66, 0xda, 0x4c, 0x09, 0x2c, 0xd2, 0x01, 0x22, 0x67, 0x8d, 0x2b, - 0xba, 0x4d, 0xea, 0x79, 0x42, 0x96, 0x9f, 0x8d, 0x4c, 0x7e, 0x88, 0xb0, 0xf4, 0xa2, 0x60, 0x7e, - 0x5e, 0x2e, 0x03, 0x71, 0x4e, 0x63, 0x85, 0x4a, 0x3d, 0x09, 0xbc, 0xc9, 0x1b, 0x00, 0xcb, 0x0f, - 0x7d, 0xea, 0xb6, 0xad, 0x66, 0x60, 0x12, 0x43, 0xa3, 0x10, 0x15, 0x50, 0x7d, 0xa2, 0x15, 0x64, - 0x52, 0x84, 0x89, 0x82, 0xe7, 0x75, 0x5b, 0xd4, 0x74, 0x9a, 0xb4, 0x60, 0xae, 0xa1, 0xdc, 0x1f, - 0x5d, 0x3a, 0xff, 0xe8, 0x68, 0xe1, 0xac, 0x85, 0x05, 0x35, 0xd7, 0x69, 0xd2, 0x9a, 0xe5, 0xaa, - 0xab, 0x5b, 0xa7, 0x21, 0xeb, 0x00, 0xeb, 0x1d, 0xda, 0xae, 0x52, 0xcb, 0xad, 0xef, 0x45, 0xc4, - 0x7c, 0x58, 0xb0, 0x74, 0x4e, 0xf4, 0x70, 0xd6, 0xe9, 0xd0, 0xb6, 0x87, 0x30, 0xb5, 0x55, 0x21, - 0x26, 0xd9, 0x82, 0xa9, 0x72, 0xe1, 0x5e, 0xc5, 0x69, 0xda, 0xf5, 0x43, 0xa1, 0x39, 0x4d, 0xa2, - 0xa1, 0xf0, 0xb4, 0xe0, 0x1a, 0x29, 0xe5, 0xe2, 0xc9, 0xb6, 0x5a, 0xb5, 0x0e, 0x42, 0x6b, 0x42, - 0x7f, 0x8a, 0x72, 0x21, 0x1f, 0xb2, 0x35, 0xe8, 0x31, 0x65, 0x70, 0xc3, 0xda, 0xf5, 0xe6, 0xa6, - 0x34, 0x3b, 0x58, 0x61, 0xab, 0x7a, 0x55, 0x29, 0xe5, 0x6a, 0xca, 0x3c, 0x5f, 0x88, 0x08, 0xad, - 0xf9, 0xd6, 0xae, 0xa7, 0x2f, 0xc4, 0x00, 0x7b, 0xfe, 0x5d, 0xc8, 0x47, 0x89, 0x4f, 0x62, 0x6a, - 0xba, 0x93, 0xcd, 0x4d, 0xe4, 0x27, 0x95, 0x16, 0x2f, 0x3f, 0xb4, 0x3d, 0xdf, 0x33, 0xbe, 0x5f, - 0xfb, 0x6a, 0xd8, 0x17, 0x7d, 0x97, 0x1e, 0x56, 0x5c, 0xba, 0x63, 0x3f, 0x14, 0x02, 0x08, 0xbf, - 0xe8, 0x7d, 0x7a, 0x58, 0xeb, 0x20, 0x54, 0xfd, 0xa2, 0x03, 0x54, 0xf2, 0x45, 0xc8, 0xdd, 0xbd, - 0x57, 0xbd, 0x4b, 0x0f, 0xcb, 0x25, 0xb1, 0xb9, 0x70, 0xb2, 0x96, 0x57, 0x63, 0xa4, 0xda, 0xfa, - 0x08, 0x30, 0x8d, 0xa5, 0x50, 0x7a, 0xb1, 0x9a, 0x8b, 0xcd, 0xae, 0xe7, 0x53, 0xb7, 0x5c, 0x52, - 0x6b, 0xae, 0x73, 0x60, 0x44, 0x96, 0x04, 0xa8, 0xc6, 0x3f, 0x4a, 0xa3, 0xe4, 0x62, 0x8b, 0xb4, - 0xdc, 0xf6, 0x7c, 0xab, 0x5d, 0xa7, 0x01, 0x03, 0x5c, 0xa4, 0xb6, 0x80, 0x46, 0x16, 0x69, 0x88, - 0xac, 0x57, 0x9d, 0x1e, 0xb8, 0x6a, 0x56, 0xa5, 0xb4, 0x36, 0x08, 0xd3, 0xb6, 0xa8, 0xd2, 0x15, - 0xd0, 0x48, 0x95, 0x21, 0x32, 0xb9, 0x04, 0x23, 0xe5, 0xc2, 0xbd, 0x42, 0xd7, 0xdf, 0x43, 0xb9, - 0x99, 0xe3, 0x3a, 0x35, 0x5b, 0x61, 0x56, 0xd7, 0xdf, 0x33, 0x65, 0x21, 0xb9, 0x86, 0x67, 0x95, - 0x36, 0xf5, 0xb9, 0x51, 0x55, 0x6c, 0x94, 0x1e, 0x07, 0x45, 0x8e, 0x2a, 0x0c, 0x44, 0x5e, 0x86, - 0xa1, 0xfb, 0x95, 0x62, 0xb9, 0x24, 0x0e, 0xbb, 0xb8, 0x7b, 0x3c, 0xe8, 0xd4, 0xf5, 0x96, 0x70, - 0x14, 0xe3, 0x37, 0x53, 0xa1, 0x4c, 0x22, 0x97, 0x34, 0x1d, 0x02, 0x0d, 0x25, 0x4c, 0x87, 0x50, - 0x0d, 0x25, 0xa8, 0x4d, 0x98, 0x40, 0x8a, 0x5d, 0xcf, 0x77, 0x5a, 0xcb, 0xed, 0x46, 0xc7, 0xb1, - 0xdb, 0x3e, 0x52, 0xf1, 0x51, 0x33, 0x1e, 0x1d, 0x2d, 0x3c, 0x57, 0xc7, 0xd2, 0x1a, 0x15, 0xc5, - 0xb5, 0x08, 0x97, 0x04, 0xea, 0xc7, 0x18, 0x48, 0xe3, 0x77, 0xd3, 0xda, 0x5e, 0xc2, 0x9a, 0x67, - 0xd2, 0x4e, 0xd3, 0xae, 0xe3, 0xf1, 0xf9, 0xb6, 0xeb, 0x74, 0x3b, 0xc1, 0x72, 0xc0, 0xe6, 0xb9, - 0x61, 0x69, 0x6d, 0x97, 0x15, 0xeb, 0xbc, 0x13, 0xa8, 0xc9, 0xfb, 0x30, 0xce, 0xb6, 0x75, 0xf1, - 0xd3, 0x9b, 0x4b, 0xe3, 0x4c, 0x9c, 0x43, 0x93, 0x97, 0x47, 0xdd, 0x80, 0x8d, 0xa6, 0x0f, 0xa8, - 0x14, 0xa4, 0x01, 0x73, 0x1b, 0xae, 0xd5, 0xf6, 0x6c, 0x7f, 0xb9, 0x5d, 0x77, 0x0f, 0x51, 0x0d, - 0x59, 0x6e, 0x5b, 0xdb, 0x4d, 0xda, 0xc0, 0xee, 0xe6, 0x96, 0x2e, 0x3f, 0x3a, 0x5a, 0x78, 0xc1, - 0xe7, 0x38, 0x35, 0x1a, 0x20, 0xd5, 0x28, 0xc7, 0x52, 0x38, 0xf7, 0xe4, 0xc4, 0xd4, 0x16, 0x39, - 0xac, 0x78, 0xf9, 0xc1, 0x77, 0x64, 0x54, 0x5b, 0x82, 0xd9, 0x60, 0xa2, 0x48, 0x6d, 0xa6, 0x4a, - 0x60, 0xfc, 0xab, 0x54, 0xb8, 0xdb, 0x91, 0xb7, 0x61, 0x4c, 0x2c, 0x75, 0x65, 0x5d, 0xa0, 0xb8, - 0x92, 0xdf, 0x45, 0x64, 0x66, 0x55, 0x74, 0x76, 0xc8, 0x2e, 0x14, 0x57, 0x95, 0xb5, 0x81, 0x87, - 0x6c, 0xab, 0xde, 0x8c, 0x52, 0x49, 0x34, 0xb6, 0x08, 0x36, 0x56, 0xab, 0xfa, 0xa8, 0xe0, 0x22, - 0xf0, 0x9b, 0x5e, 0xc2, 0x30, 0x28, 0xc8, 0x8f, 0xdf, 0xf1, 0xff, 0x22, 0x95, 0xb4, 0xa9, 0x92, - 0x25, 0x98, 0xd8, 0x72, 0xdc, 0x7d, 0x9c, 0x5f, 0x65, 0x10, 0x70, 0xe6, 0x0f, 0x64, 0x41, 0xb4, - 0x43, 0x3a, 0x89, 0xda, 0x36, 0x65, 0x34, 0xf4, 0xb6, 0x45, 0x38, 0x68, 0x04, 0x6c, 0x1e, 0x02, - 0x8e, 0xc1, 0xd7, 0x81, 0xf3, 0x10, 0x36, 0x41, 0x5b, 0xc2, 0x2a, 0xba, 0xf1, 0x8f, 0x53, 0xea, - 0xe6, 0xc9, 0x06, 0xb9, 0xe4, 0xb4, 0x2c, 0xbb, 0xad, 0x74, 0x87, 0xdf, 0xef, 0x20, 0x34, 0xda, - 0x12, 0x05, 0x99, 0xdc, 0x80, 0x1c, 0xff, 0x15, 0x08, 0x49, 0x34, 0x21, 0x09, 0x42, 0x5d, 0xc2, - 0x4b, 0xc4, 0xd8, 0xcc, 0x64, 0x4e, 0x3a, 0x33, 0x3f, 0x98, 0x82, 0x31, 0xe5, 0x3c, 0xcd, 0x64, - 0x75, 0xc5, 0x75, 0x3e, 0xa6, 0x75, 0x5f, 0xdf, 0x26, 0x3a, 0x1c, 0x18, 0x91, 0xd5, 0x01, 0x6a, - 0x64, 0x7b, 0x48, 0x9f, 0x60, 0x7b, 0x30, 0xfe, 0xa7, 0x94, 0xd0, 0xe6, 0x07, 0x96, 0x91, 0xba, - 0x3c, 0x4b, 0x9f, 0x64, 0x63, 0x78, 0x1f, 0x86, 0x4c, 0xda, 0xb0, 0x3d, 0xa1, 0x89, 0x4f, 0xab, - 0x27, 0x07, 0x2c, 0x08, 0x0f, 0x2f, 0x2e, 0xfb, 0xa9, 0x4a, 0x75, 0x2c, 0x67, 0x2a, 0x57, 0xd9, - 0xbb, 0xd5, 0xa4, 0x0f, 0x6d, 0xbe, 0x92, 0xc5, 0x06, 0x83, 0x2a, 0x97, 0xed, 0xd5, 0x76, 0x58, - 0x89, 0xd0, 0xfd, 0xd4, 0x55, 0xab, 0xd1, 0x18, 0x1f, 0x02, 0x84, 0x55, 0x92, 0xbb, 0x90, 0x17, - 0xdf, 0xb6, 0xdd, 0xde, 0xe5, 0xea, 0x83, 0x18, 0x83, 0x85, 0x47, 0x47, 0x0b, 0xcf, 0xd6, 0x83, - 0x32, 0xa1, 0x1f, 0x29, 0x7c, 0x63, 0x84, 0xc6, 0xbf, 0x95, 0x86, 0x74, 0x01, 0x27, 0xe4, 0x2e, - 0x3d, 0xf4, 0xad, 0xed, 0x5b, 0x76, 0x53, 0x5b, 0x89, 0xfb, 0x08, 0xad, 0xed, 0xd8, 0xda, 0xc1, - 0x5a, 0x41, 0x66, 0x2b, 0xf1, 0xae, 0xbb, 0xfd, 0x3a, 0x12, 0x2a, 0x2b, 0x71, 0xdf, 0xdd, 0x7e, - 0x3d, 0x4a, 0x16, 0x20, 0x12, 0x03, 0x86, 0xf9, 0xaa, 0x14, 0x6b, 0x10, 0x1e, 0x1d, 0x2d, 0x0c, - 0xf3, 0xc5, 0x6b, 0x8a, 0x12, 0x72, 0x16, 0x32, 0xd5, 0xca, 0x9a, 0x10, 0x1f, 0x68, 0xc0, 0xf2, - 0x3a, 0x6d, 0x93, 0xc1, 0x58, 0x9d, 0xab, 0xa5, 0x42, 0x05, 0x8f, 0xac, 0x43, 0x61, 0x9d, 0xcd, - 0x86, 0xd5, 0x89, 0x1e, 0x5a, 0x03, 0x44, 0xf2, 0x0e, 0x8c, 0xdd, 0x2d, 0x15, 0x57, 0x1c, 0x8f, - 0x7f, 0xfa, 0xc3, 0xe1, 0xe2, 0xdf, 0x6f, 0xd4, 0x6b, 0x68, 0x33, 0x8e, 0xca, 0x50, 0x05, 0xdf, - 0xf8, 0xa5, 0x14, 0x8c, 0x29, 0x16, 0x1d, 0xf2, 0x45, 0x71, 0x95, 0x97, 0xd2, 0x74, 0x55, 0x05, - 0x83, 0x95, 0xf2, 0xe3, 0x7f, 0xcb, 0x69, 0x50, 0x71, 0xb1, 0x17, 0x1e, 0xb5, 0xd3, 0x83, 0x1c, - 0xb5, 0xdf, 0x00, 0xe0, 0x6b, 0x00, 0x9b, 0xac, 0xec, 0xc5, 0x8a, 0x13, 0x80, 0x3a, 0x2f, 0x21, - 0xb2, 0x61, 0xc2, 0xb8, 0x7a, 0xcc, 0x66, 0xe2, 0x53, 0x5c, 0x4f, 0x08, 0xe3, 0xa9, 0x22, 0x3e, - 0x05, 0xb7, 0xf8, 0x75, 0x89, 0x4e, 0x62, 0x7c, 0x51, 0x35, 0xf1, 0x0c, 0xfa, 0x01, 0x1a, 0x3f, - 0x9c, 0x0a, 0x3f, 0xf7, 0xfb, 0xd7, 0xc9, 0x5b, 0x30, 0xcc, 0xaf, 0x83, 0xc4, 0xad, 0xd9, 0xa9, - 0xe0, 0x98, 0xa4, 0xde, 0x15, 0x71, 0xdb, 0xea, 0xef, 0xf1, 0xcb, 0xe4, 0x67, 0x4c, 0x41, 0x12, - 0x98, 0x65, 0x75, 0x0b, 0x8d, 0xe4, 0x8e, 0x06, 0xc8, 0xeb, 0x49, 0x66, 0x59, 0xe3, 0xb7, 0xb2, - 0x30, 0xa9, 0xa3, 0xa9, 0x77, 0x46, 0xa9, 0x81, 0xee, 0x8c, 0xde, 0x87, 0x1c, 0x1b, 0x0f, 0xbb, - 0x4e, 0xa5, 0xda, 0xf1, 0x02, 0x1a, 0xab, 0x05, 0x4c, 0xbb, 0x0b, 0x85, 0xea, 0xa1, 0xe7, 0xd3, - 0x16, 0x3b, 0x35, 0x99, 0x01, 0x15, 0x59, 0x54, 0x2e, 0x36, 0x32, 0xe1, 0x4e, 0x2c, 0x2f, 0x36, - 0xd4, 0x75, 0x1b, 0x5c, 0x71, 0xbc, 0x06, 0xc3, 0x4c, 0xfb, 0x0c, 0x0e, 0xf5, 0xd8, 0x4a, 0xa6, - 0x98, 0x46, 0xfc, 0x1f, 0x38, 0x12, 0xd9, 0x82, 0xdc, 0xaa, 0xe5, 0xf9, 0x55, 0x4a, 0xdb, 0x03, - 0xdc, 0x06, 0x2f, 0x88, 0xa1, 0x9a, 0xc1, 0xab, 0x56, 0x8f, 0xd2, 0x76, 0xe4, 0x3a, 0x2f, 0x60, - 0x46, 0xbe, 0x06, 0x50, 0x74, 0xda, 0xbe, 0xeb, 0x34, 0x57, 0x9d, 0xdd, 0xb9, 0x61, 0x3c, 0x4d, - 0x3d, 0x17, 0x99, 0x80, 0x10, 0x81, 0x1f, 0xa8, 0x02, 0x93, 0x41, 0x9d, 0x17, 0xd4, 0x9a, 0xce, - 0xae, 0xba, 0x5e, 0x43, 0x7c, 0x72, 0x0b, 0xf2, 0xf2, 0xa8, 0xba, 0xd9, 0xd9, 0x75, 0x71, 0x81, - 0x8c, 0x84, 0xdb, 0x2b, 0x7d, 0xe8, 0xd7, 0xba, 0x02, 0xae, 0x4a, 0xb4, 0x28, 0x0d, 0xf9, 0x2a, - 0x9c, 0x89, 0xc2, 0xe4, 0x2c, 0xe7, 0x42, 0xc5, 0x53, 0x65, 0x97, 0xb0, 0xee, 0x7b, 0xb1, 0x30, - 0x3e, 0x49, 0xc3, 0x99, 0x1e, 0x9d, 0x65, 0xdf, 0x03, 0x6e, 0xab, 0xca, 0xf7, 0x10, 0xd9, 0x4d, - 0xb9, 0x43, 0xcb, 0x05, 0x74, 0x7d, 0x60, 0x2b, 0x38, 0xbb, 0x94, 0x8f, 0xba, 0x3e, 0xa0, 0xe3, - 0xc3, 0x1d, 0xc8, 0xb2, 0x29, 0x1a, 0xe0, 0x32, 0x56, 0x5a, 0x29, 0x26, 0x7d, 0x5b, 0x5d, 0x3e, - 0x38, 0x75, 0xc8, 0x83, 0x7c, 0x11, 0x32, 0x1b, 0x1b, 0xab, 0xb8, 0x76, 0x32, 0xd8, 0xf7, 0x09, - 0xdf, 0x6f, 0x6a, 0x4b, 0x75, 0x82, 0xd1, 0x5e, 0x0d, 0xee, 0xee, 0x19, 0x3a, 0xf9, 0x4a, 0xc4, - 0x7d, 0xe4, 0xe5, 0xfe, 0x13, 0x3d, 0xb8, 0x37, 0xc9, 0xe3, 0x38, 0x68, 0xfc, 0xcd, 0x74, 0xf8, - 0x0d, 0xdf, 0xb2, 0x9b, 0x3e, 0x75, 0xc9, 0x3c, 0xff, 0x24, 0xc3, 0x73, 0xaa, 0x19, 0xfc, 0x26, - 0x73, 0xe1, 0xf7, 0xcd, 0x59, 0x05, 0x1f, 0xf2, 0xcb, 0xca, 0x87, 0x9c, 0xc1, 0x0f, 0x79, 0xb2, - 0xe7, 0x27, 0xfb, 0x72, 0xc2, 0xba, 0xc4, 0x0f, 0x31, 0x61, 0xed, 0xbd, 0x00, 0x13, 0x6b, 0xce, - 0xf2, 0x43, 0x3f, 0x40, 0x64, 0x1f, 0x60, 0xce, 0xd4, 0x81, 0x8c, 0xe3, 0x7a, 0xb3, 0x41, 0xdd, - 0x8d, 0x3d, 0xab, 0xad, 0xdd, 0x86, 0x9a, 0x31, 0x38, 0xc3, 0x5d, 0xa3, 0x07, 0x3a, 0xee, 0x08, - 0xc7, 0x8d, 0xc2, 0x8d, 0x1f, 0x4a, 0xcb, 0xc1, 0xb8, 0xbf, 0xf8, 0x94, 0xde, 0xba, 0xbd, 0xae, - 0xdd, 0xba, 0xcd, 0x04, 0xf6, 0xc2, 0xe0, 0x0a, 0x79, 0xf1, 0x98, 0x9b, 0xe7, 0xff, 0x72, 0x08, - 0xc6, 0x55, 0x74, 0x36, 0x0e, 0x85, 0x46, 0xc3, 0x55, 0xc7, 0xc1, 0x6a, 0x34, 0x5c, 0x13, 0xa1, - 0xda, 0x45, 0x73, 0xa6, 0xef, 0x45, 0xf3, 0xd7, 0x61, 0xb4, 0xd8, 0x6a, 0x68, 0xd7, 0x5f, 0x46, - 0x42, 0xf3, 0xae, 0x06, 0x48, 0xfc, 0x5b, 0x08, 0xcc, 0x60, 0xf5, 0x56, 0x23, 0x7e, 0xe9, 0x15, - 0xb2, 0xd4, 0xee, 0xa8, 0x87, 0x1e, 0xe7, 0x8e, 0xfa, 0x26, 0x8c, 0x6e, 0x7a, 0x74, 0xa3, 0xdb, - 0x6e, 0xd3, 0x26, 0x2e, 0xab, 0x1c, 0xd7, 0xc9, 0xbb, 0x1e, 0xad, 0xf9, 0x08, 0x55, 0x1b, 0x10, - 0xa0, 0xaa, 0x13, 0x3c, 0xd2, 0x67, 0x82, 0x6f, 0x40, 0xae, 0x42, 0xa9, 0x8b, 0x63, 0x3a, 0x16, - 0xaa, 0x5e, 0x1d, 0x4a, 0xdd, 0x1a, 0x1b, 0x58, 0xed, 0xee, 0x5a, 0x20, 0x6a, 0x17, 0xde, 0xe3, - 0x03, 0x5e, 0x78, 0x93, 0xe7, 0x61, 0xbc, 0xd3, 0xdd, 0x6e, 0xda, 0x75, 0xe4, 0x2b, 0x6e, 0xca, - 0xcd, 0x31, 0x0e, 0x63, 0x6c, 0x3d, 0xf2, 0x15, 0x98, 0xc0, 0xb3, 0x48, 0xb0, 0xe4, 0x26, 0xb5, - 0x7b, 0x22, 0xad, 0x8c, 0x6b, 0x3a, 0x75, 0x06, 0xaa, 0x25, 0x38, 0x74, 0xe8, 0x8c, 0xe6, 0xab, - 0x30, 0xa9, 0xcf, 0xe4, 0x13, 0xb8, 0x2e, 0x0a, 0x2e, 0xef, 0x73, 0xf9, 0xd1, 0x3b, 0xd9, 0x1c, - 0xe4, 0xc7, 0xf8, 0xb5, 0xbd, 0x09, 0x95, 0xa0, 0x4f, 0x26, 0xb9, 0xdb, 0xdd, 0xa6, 0x6e, 0x9b, - 0xfa, 0xd4, 0x13, 0xca, 0xba, 0x67, 0x66, 0x0b, 0x9d, 0x8e, 0x67, 0xfc, 0x5a, 0x1a, 0x46, 0x0a, - 0x5b, 0xd5, 0x72, 0x7b, 0xc7, 0xc1, 0x4b, 0x9f, 0xc0, 0xd6, 0xaf, 0x5e, 0xfa, 0x04, 0xb6, 0x7e, - 0xd5, 0xc2, 0x7f, 0x2d, 0xe1, 0xb8, 0x85, 0xae, 0xa4, 0xca, 0x71, 0x4b, 0xb3, 0xc1, 0x85, 0xd7, - 0x1e, 0x99, 0x01, 0xae, 0x3d, 0x02, 0x2b, 0x57, 0xf6, 0x58, 0x2b, 0x17, 0x79, 0x0b, 0xc6, 0xca, - 0x6d, 0x9f, 0xee, 0xba, 0xe1, 0x4a, 0x0f, 0x8e, 0x7e, 0x01, 0x58, 0x55, 0xc1, 0x15, 0x6c, 0xb6, - 0x8c, 0xb8, 0x65, 0x2d, 0xb0, 0xa8, 0xe1, 0x32, 0xe2, 0x06, 0xb8, 0xc8, 0xa1, 0x57, 0x22, 0x1a, - 0xa5, 0xc8, 0x1a, 0x91, 0x57, 0xcb, 0x5c, 0xf9, 0x9c, 0x0c, 0xcd, 0xc1, 0x6c, 0x60, 0x97, 0xa6, - 0x93, 0xaf, 0x96, 0x8d, 0x6f, 0xa7, 0x61, 0xac, 0xd0, 0xe9, 0x3c, 0xe5, 0x0e, 0x3e, 0x5f, 0xd6, - 0xc4, 0xab, 0x3c, 0xb3, 0x04, 0xfd, 0x1a, 0xc8, 0xb7, 0xe7, 0x97, 0xd3, 0x30, 0x15, 0xa1, 0x50, - 0x5b, 0x9f, 0x1a, 0xd0, 0xad, 0x27, 0x3d, 0xa0, 0x5b, 0x4f, 0x66, 0x30, 0xb7, 0x9e, 0xec, 0xe3, - 0x88, 0xcc, 0x97, 0x20, 0x53, 0xe8, 0x74, 0xa2, 0xd7, 0x83, 0x9d, 0xce, 0xfd, 0x1b, 0xfc, 0xdc, - 0x69, 0x75, 0x3a, 0x26, 0xc3, 0xd0, 0xe4, 0xd8, 0xf0, 0x80, 0x72, 0xcc, 0x78, 0x0d, 0x46, 0x91, - 0x17, 0x3a, 0xd3, 0x5c, 0x00, 0xfc, 0x98, 0x85, 0x1f, 0x8d, 0x56, 0x97, 0xf8, 0xcc, 0xff, 0x8f, - 0x14, 0x0c, 0xe1, 0xef, 0xa7, 0x74, 0x8d, 0x2d, 0x6a, 0x6b, 0x2c, 0xaf, 0xac, 0xb1, 0x41, 0x56, - 0xd7, 0xbf, 0xcc, 0xe2, 0x68, 0x89, 0x75, 0x25, 0x7c, 0x58, 0x52, 0x09, 0x3e, 0x2c, 0x6f, 0x80, - 0x22, 0x35, 0x55, 0xab, 0x8e, 0xb2, 0x67, 0xa8, 0x27, 0x8d, 0x10, 0x99, 0xec, 0x47, 0xbd, 0x59, - 0x32, 0x38, 0x19, 0x17, 0xa3, 0x4d, 0x7d, 0x22, 0x8e, 0x2c, 0x2b, 0x40, 0xca, 0x6d, 0x8f, 0xd6, - 0xbb, 0x2e, 0xad, 0xee, 0xdb, 0x9d, 0xfb, 0xd4, 0xb5, 0x77, 0x0e, 0x85, 0x15, 0x08, 0xf7, 0x65, - 0x5b, 0x94, 0xd6, 0xbc, 0x7d, 0xbb, 0xc3, 0x8e, 0x22, 0xf6, 0xce, 0xa1, 0x99, 0x40, 0x43, 0xde, - 0x83, 0x11, 0x93, 0x1e, 0xb8, 0xb6, 0x2f, 0xef, 0x68, 0x27, 0x83, 0x83, 0x33, 0x42, 0xf9, 0xc1, - 0xd0, 0xe5, 0x3f, 0xd4, 0xf9, 0x17, 0xe5, 0x64, 0x91, 0x0b, 0x3e, 0x7e, 0x17, 0x3b, 0x11, 0xf6, - 0xb6, 0xb0, 0x55, 0xed, 0x25, 0xf7, 0xc8, 0x15, 0x18, 0x42, 0xe9, 0x29, 0x74, 0x02, 0xf4, 0x6d, - 0xc6, 0x3d, 0x54, 0x15, 0xed, 0x88, 0x41, 0x9e, 0x03, 0x08, 0xcc, 0xec, 0xde, 0x5c, 0x0e, 0x77, - 0x6b, 0x05, 0x12, 0x15, 0xfd, 0xa3, 0x27, 0x11, 0xfd, 0x9f, 0x9d, 0x0b, 0xc7, 0x2f, 0xa7, 0xe1, - 0x62, 0x20, 0xce, 0xd6, 0xdd, 0x6a, 0xe1, 0xde, 0x6a, 0xb9, 0x51, 0x11, 0xda, 0x7f, 0xc5, 0x75, - 0x1e, 0xd8, 0xec, 0xf4, 0x77, 0xfd, 0x98, 0x8f, 0x71, 0x95, 0xaf, 0x5a, 0x6e, 0xe2, 0x4b, 0x6b, - 0x97, 0xdd, 0xca, 0xae, 0x21, 0xee, 0xe3, 0x3b, 0x9d, 0x98, 0xc5, 0x6f, 0xe5, 0x19, 0x33, 0x64, - 0x40, 0x7e, 0x38, 0x05, 0xa7, 0x93, 0x1b, 0x22, 0x4e, 0x84, 0x0b, 0x52, 0xf3, 0xec, 0xd1, 0xda, - 0xa5, 0x97, 0x1e, 0x1d, 0x2d, 0x5c, 0xf4, 0xac, 0x56, 0xb3, 0x66, 0x37, 0x78, 0x6d, 0x76, 0x9d, - 0xd6, 0x3a, 0x02, 0x41, 0xab, 0xb7, 0x47, 0x4d, 0x6f, 0x82, 0xfc, 0x26, 0xe7, 0x52, 0x4b, 0x00, - 0x39, 0x69, 0x9d, 0x31, 0xfe, 0x41, 0x0a, 0x94, 0x15, 0x95, 0x33, 0x69, 0xc3, 0x76, 0x69, 0xdd, - 0x47, 0x89, 0x16, 0x38, 0xe8, 0x73, 0x58, 0xc4, 0xb7, 0x01, 0x61, 0xe4, 0x5d, 0x18, 0xe1, 0xb6, - 0x1c, 0x6e, 0x43, 0x09, 0x57, 0xa2, 0xb0, 0xfb, 0xf0, 0xf0, 0x0e, 0x8e, 0xa1, 0xae, 0x62, 0x41, - 0xc4, 0xf4, 0xdb, 0x3b, 0x5b, 0x1b, 0xc5, 0xa6, 0x65, 0xb7, 0x3c, 0x21, 0xc7, 0x70, 0x58, 0x3f, - 0x3e, 0xf0, 0x6b, 0x75, 0x84, 0xaa, 0xfa, 0x6d, 0x80, 0x6a, 0xdc, 0x96, 0x66, 0xa7, 0x63, 0x1c, - 0x74, 0x16, 0x60, 0xe8, 0x7e, 0x78, 0xfc, 0x5c, 0x1a, 0x7d, 0x74, 0xb4, 0xc0, 0x97, 0x8b, 0xc9, - 0xe1, 0xc6, 0x8f, 0xa5, 0x60, 0x52, 0x5f, 0x4f, 0xe4, 0x2a, 0x0c, 0x0b, 0x37, 0xf9, 0x14, 0x1e, - 0xb3, 0xd9, 0x28, 0x0c, 0x73, 0x07, 0x79, 0xcd, 0x2d, 0x5e, 0x60, 0x31, 0x49, 0x2c, 0x38, 0x08, - 0x3b, 0x12, 0x4a, 0xe2, 0x3a, 0x07, 0x99, 0xb2, 0x8c, 0x18, 0x4c, 0x0d, 0xf3, 0xba, 0x4d, 0x5f, - 0xb5, 0x92, 0xba, 0x08, 0x31, 0x45, 0x89, 0x51, 0x84, 0x61, 0xfe, 0x09, 0x47, 0x1c, 0x03, 0x52, - 0x27, 0x70, 0x0c, 0x30, 0x8e, 0x52, 0x00, 0xd5, 0xea, 0xca, 0x5d, 0x7a, 0x58, 0xb1, 0x6c, 0x17, - 0xcd, 0xfa, 0x28, 0x2e, 0xef, 0x8a, 0x8f, 0x6b, 0x5c, 0x98, 0xf5, 0xb9, 0x68, 0xdd, 0xa7, 0x87, - 0x9a, 0x59, 0x5f, 0xa2, 0xa2, 0x4c, 0x76, 0xed, 0x07, 0x96, 0x4f, 0x19, 0x61, 0x1a, 0x09, 0xb9, - 0x4c, 0xe6, 0xd0, 0x08, 0xa5, 0x82, 0x4c, 0xbe, 0x06, 0x93, 0xe1, 0xaf, 0xe0, 0x72, 0x62, 0x32, - 0xf8, 0x80, 0xf5, 0xc2, 0xa5, 0xe7, 0x1e, 0x1d, 0x2d, 0xcc, 0x2b, 0x5c, 0xa3, 0xd7, 0x16, 0x11, - 0x66, 0xc6, 0x2f, 0xa4, 0xf0, 0x3e, 0x4b, 0x76, 0xf0, 0x12, 0x64, 0x03, 0x77, 0xa7, 0x71, 0x6e, - 0xa9, 0x89, 0x18, 0x60, 0xb1, 0x9c, 0x5c, 0x84, 0x4c, 0xd8, 0x13, 0x14, 0x91, 0x7a, 0x0f, 0x58, - 0x29, 0xb9, 0x0d, 0x23, 0x03, 0xb5, 0x19, 0x3f, 0x8d, 0x84, 0xb6, 0x4a, 0x6a, 0x9c, 0x85, 0x3b, - 0x5b, 0x1b, 0x9f, 0xdf, 0x59, 0xf8, 0xc9, 0x34, 0x4c, 0xb1, 0x71, 0x2d, 0x74, 0xfd, 0x3d, 0xc7, - 0xb5, 0xfd, 0xc3, 0xa7, 0xd6, 0x4e, 0xf1, 0xb6, 0xa6, 0xe4, 0xcc, 0xcb, 0x5d, 0x46, 0xed, 0xdb, - 0x40, 0xe6, 0x8a, 0xdf, 0x1e, 0x82, 0x99, 0x04, 0x2a, 0xf2, 0xaa, 0x66, 0x4a, 0x9c, 0x93, 0x11, - 0x71, 0x9f, 0x1c, 0x2d, 0x8c, 0x4b, 0xf4, 0x8d, 0x30, 0x42, 0x6e, 0x51, 0xbf, 0x1c, 0xe6, 0x23, - 0x85, 0x96, 0x45, 0xf5, 0x72, 0x58, 0xbf, 0x12, 0xbe, 0x02, 0x43, 0xa6, 0xd3, 0xa4, 0xd2, 0x93, - 0x01, 0x37, 0x76, 0x97, 0x01, 0xb4, 0x3b, 0x2c, 0x06, 0x20, 0x2b, 0x30, 0xc2, 0xfe, 0xb8, 0x67, - 0x75, 0x84, 0xd5, 0x97, 0x04, 0x6a, 0x36, 0x42, 0x3b, 0x76, 0x7b, 0x57, 0xd5, 0xb4, 0x9b, 0xb4, - 0xd6, 0xb2, 0x3a, 0x9a, 0x06, 0xc2, 0x11, 0x35, 0x8d, 0x3d, 0xd7, 0x5b, 0x63, 0x4f, 0x1d, 0xab, - 0xb1, 0x37, 0x00, 0xaa, 0xf6, 0x6e, 0xdb, 0x6e, 0xef, 0x16, 0x9a, 0xbb, 0x22, 0xae, 0xf0, 0x4a, - 0xef, 0x59, 0xb8, 0x1a, 0x22, 0xe3, 0xc2, 0xe5, 0x57, 0x28, 0x1c, 0x56, 0xb3, 0x9a, 0x9a, 0x49, - 0x3a, 0x44, 0x25, 0x6b, 0x00, 0x85, 0xba, 0x6f, 0x3f, 0x60, 0x0b, 0xd8, 0x13, 0x4e, 0xb2, 0xb2, - 0xc1, 0xc5, 0xc2, 0x5d, 0x7a, 0x58, 0xa5, 0x7e, 0x68, 0xe2, 0xb6, 0x10, 0x95, 0x7d, 0x07, 0x9a, - 0x3f, 0x6b, 0xc8, 0x81, 0x74, 0xe0, 0x54, 0xa1, 0xd1, 0xb0, 0x59, 0x0f, 0xac, 0xe6, 0x86, 0xcb, - 0x26, 0xa3, 0x81, 0xac, 0xc7, 0x93, 0x59, 0x5f, 0x11, 0xac, 0x9f, 0xb7, 0x02, 0xaa, 0x9a, 0xcf, - 0xc9, 0xa2, 0xd5, 0x24, 0x33, 0x36, 0xd6, 0x61, 0x52, 0xef, 0xba, 0x1e, 0x0d, 0x39, 0x0e, 0x39, - 0xb3, 0x5a, 0xa8, 0x55, 0x57, 0x0a, 0xd7, 0xf3, 0x29, 0x92, 0x87, 0x71, 0xf1, 0x6b, 0xb1, 0xb6, - 0xf8, 0xfa, 0xcd, 0x7c, 0x5a, 0x83, 0xbc, 0x7e, 0x7d, 0x31, 0x16, 0x79, 0x30, 0x92, 0xcf, 0x71, - 0x43, 0x86, 0xf1, 0x2b, 0x29, 0xc8, 0xc9, 0x76, 0x93, 0x9b, 0x90, 0xa9, 0x56, 0x57, 0x22, 0xb1, - 0x02, 0xe1, 0xfe, 0xc2, 0x25, 0xa9, 0xe7, 0xa9, 0x0e, 0x61, 0x8c, 0x80, 0xd1, 0x6d, 0xac, 0x56, - 0x85, 0x5a, 0x20, 0xe9, 0x42, 0xb1, 0xcd, 0xe9, 0x12, 0x1c, 0xa8, 0x6f, 0x42, 0xe6, 0xce, 0xd6, - 0x86, 0x50, 0xe3, 0x25, 0x5d, 0x28, 0x49, 0x39, 0xdd, 0xc7, 0x07, 0xaa, 0x7c, 0x67, 0x04, 0x86, - 0x09, 0x63, 0xca, 0x12, 0xe6, 0xdb, 0x6d, 0xcb, 0x09, 0x62, 0xfe, 0xc4, 0x76, 0xcb, 0x20, 0xa6, - 0x28, 0x61, 0xda, 0xc1, 0xaa, 0x53, 0xb7, 0x9a, 0x62, 0xdf, 0x46, 0xed, 0xa0, 0xc9, 0x00, 0x26, - 0x87, 0x1b, 0xbf, 0x99, 0x82, 0x3c, 0xea, 0x50, 0xe8, 0x1c, 0xe6, 0xec, 0xd3, 0xf6, 0xfd, 0xeb, - 0xe4, 0x35, 0xf9, 0xb1, 0xa5, 0x82, 0x43, 0xe3, 0x10, 0x7e, 0x6c, 0x11, 0xab, 0xb3, 0xf8, 0xe0, - 0x94, 0x80, 0xcb, 0xf4, 0xe0, 0xe1, 0x58, 0xc7, 0x04, 0x5c, 0x2e, 0xc0, 0x10, 0x36, 0x47, 0x88, - 0x45, 0x6c, 0xb9, 0xcf, 0x00, 0x26, 0x87, 0x2b, 0x52, 0xe9, 0xa7, 0xd3, 0xb1, 0x3e, 0x2c, 0x7e, - 0xae, 0x42, 0x9a, 0xf4, 0xce, 0x0d, 0x24, 0xa9, 0x3f, 0x84, 0xd9, 0xe8, 0x90, 0xe0, 0x81, 0xbe, - 0x00, 0x53, 0x3a, 0x5c, 0x9e, 0xed, 0xcf, 0x24, 0xd6, 0x75, 0x7f, 0xd1, 0x8c, 0xe2, 0x1b, 0xff, - 0x4d, 0x0a, 0x46, 0xf1, 0x4f, 0xb3, 0xdb, 0x44, 0x77, 0x85, 0xc2, 0x56, 0x55, 0x18, 0xef, 0x54, - 0x35, 0xce, 0x3a, 0xf0, 0x6a, 0xc2, 0xbe, 0xa7, 0xc9, 0x97, 0x00, 0x59, 0x90, 0x72, 0xab, 0x9c, - 0xbc, 0xa1, 0x0c, 0x48, 0xb9, 0xf9, 0xce, 0x8b, 0x90, 0x0a, 0x64, 0xf4, 0x10, 0xda, 0xaa, 0xb2, - 0xe5, 0xa7, 0xde, 0x4b, 0x22, 0x9d, 0xd3, 0xd4, 0x3d, 0x84, 0x38, 0x1a, 0x5e, 0x4b, 0x6e, 0x55, - 0x0b, 0xe6, 0x9a, 0x76, 0x2d, 0xc9, 0xda, 0xa8, 0x79, 0x8f, 0x0a, 0x24, 0xe3, 0x9f, 0x8d, 0x46, - 0x07, 0x50, 0x6c, 0x75, 0x27, 0xfc, 0x36, 0xde, 0x82, 0xa1, 0x42, 0xb3, 0xe9, 0x1c, 0x08, 0x29, - 0x21, 0xed, 0x0b, 0xc1, 0xf8, 0xf1, 0x9d, 0xcc, 0x62, 0x28, 0x5a, 0x98, 0x06, 0x03, 0x90, 0x22, - 0x8c, 0x16, 0xb6, 0xaa, 0xe5, 0x72, 0x69, 0x63, 0x63, 0x55, 0x44, 0xbf, 0xbf, 0x28, 0xc7, 0xc7, - 0xb6, 0x1b, 0xb5, 0xe8, 0xcd, 0x58, 0xa8, 0xb9, 0x87, 0x74, 0xe4, 0x1d, 0x80, 0x3b, 0x8e, 0xdd, - 0xbe, 0x47, 0xfd, 0x3d, 0xa7, 0x21, 0x3a, 0x7f, 0xfe, 0xd1, 0xd1, 0xc2, 0xd8, 0xc7, 0x8e, 0xdd, - 0xae, 0xb5, 0x10, 0xcc, 0xda, 0x1e, 0x22, 0x99, 0xca, 0xdf, 0x6c, 0xa4, 0x97, 0x1c, 0xee, 0x82, - 0x30, 0x14, 0x8e, 0xf4, 0xb6, 0x13, 0xf3, 0x3e, 0x90, 0x68, 0xa4, 0x05, 0x53, 0xd5, 0xee, 0xee, - 0x2e, 0x65, 0x52, 0x5d, 0x58, 0x2c, 0x86, 0xc5, 0xe9, 0x36, 0xc8, 0x1d, 0xc0, 0x4f, 0x22, 0xec, - 0x7c, 0xe2, 0x2d, 0xbd, 0xca, 0x16, 0xf2, 0xf7, 0x8e, 0x16, 0xc4, 0x8d, 0x1b, 0x53, 0xd2, 0x3c, - 0x49, 0x1f, 0xb7, 0x57, 0x44, 0x79, 0x93, 0x75, 0x18, 0xbe, 0x6d, 0xfb, 0x2b, 0xdd, 0x6d, 0xe1, - 0x62, 0xfd, 0x7c, 0x9f, 0x8f, 0x86, 0x23, 0x72, 0x93, 0xef, 0xae, 0xed, 0xef, 0x75, 0x55, 0x77, - 0x6b, 0xc1, 0x86, 0x6c, 0x41, 0xae, 0x68, 0xbb, 0xf5, 0x26, 0x2d, 0x96, 0xc5, 0xae, 0x7f, 0xb1, - 0x0f, 0x4b, 0x89, 0xca, 0xc7, 0xa5, 0x8e, 0xbf, 0xea, 0xb6, 0xaa, 0x05, 0x48, 0x0c, 0xf2, 0xaf, - 0xa7, 0xe0, 0xd9, 0xa0, 0xf5, 0x85, 0x5d, 0xda, 0xf6, 0xef, 0x59, 0x7e, 0x7d, 0x8f, 0xba, 0x62, - 0x94, 0x46, 0xfb, 0x8d, 0xd2, 0x9b, 0xb1, 0x51, 0xba, 0x1c, 0x8e, 0x92, 0xc5, 0x98, 0xd5, 0x5a, - 0x9c, 0x5b, 0x7c, 0xcc, 0xfa, 0xd5, 0x4a, 0x6a, 0x00, 0xa1, 0x0d, 0x5f, 0x84, 0xe8, 0xbc, 0xd8, - 0xa7, 0xc3, 0x21, 0xb2, 0x70, 0xd3, 0x0d, 0x7e, 0x6b, 0x1e, 0x37, 0x01, 0x94, 0xdc, 0x95, 0xf1, - 0x0c, 0x5c, 0x23, 0xb9, 0xd0, 0x87, 0x37, 0x8f, 0x71, 0x98, 0xe9, 0x13, 0xb9, 0xc4, 0x67, 0x7b, - 0xd5, 0xda, 0x16, 0x4a, 0xc8, 0x31, 0xb3, 0xbd, 0x6a, 0x85, 0xb3, 0xdd, 0xb4, 0xa2, 0xb3, 0xbd, - 0x6a, 0x6d, 0x93, 0x22, 0x0f, 0xc2, 0xe2, 0x11, 0x3b, 0xcf, 0xf5, 0xe3, 0x56, 0xac, 0xf0, 0x9d, - 0x39, 0x21, 0x18, 0xeb, 0x23, 0x18, 0xad, 0x76, 0xac, 0x3a, 0x6d, 0xda, 0x3b, 0xbe, 0xb8, 0xd4, - 0x79, 0xa1, 0x0f, 0xab, 0x00, 0x57, 0x5c, 0x08, 0xc8, 0x9f, 0xea, 0x01, 0x29, 0xc0, 0x61, 0x2d, - 0xdc, 0xa8, 0xdc, 0x9b, 0x9b, 0x3a, 0xb6, 0x85, 0x1b, 0x95, 0x7b, 0x42, 0xe7, 0xe8, 0xb4, 0x34, - 0x9d, 0xa3, 0x72, 0xcf, 0xf8, 0xf5, 0x0c, 0x9c, 0xe9, 0x41, 0x43, 0xd6, 0xa4, 0x8c, 0x4a, 0x69, - 0x86, 0xc5, 0x1e, 0xe8, 0x57, 0x8f, 0x15, 0x5b, 0xab, 0x90, 0x5f, 0xbe, 0x8b, 0x6a, 0x2d, 0xfb, - 0x49, 0x1b, 0xc5, 0x82, 0x94, 0xee, 0x17, 0x1e, 0x1d, 0x2d, 0x9c, 0xa3, 0xfb, 0xec, 0xf0, 0x5a, - 0xb3, 0x78, 0x61, 0xad, 0xae, 0xc5, 0x53, 0xc5, 0x28, 0xe7, 0x7f, 0x28, 0x0d, 0x59, 0xdc, 0x69, - 0x22, 0xf9, 0x25, 0x52, 0x27, 0xca, 0x2f, 0xf1, 0x3e, 0x8c, 0x2f, 0xdf, 0xe5, 0x87, 0xce, 0x15, - 0xcb, 0xdb, 0x13, 0x72, 0x10, 0xef, 0xd8, 0xe8, 0x7e, 0x4d, 0x9c, 0x51, 0xf7, 0x2c, 0x4d, 0xc9, - 0xd3, 0x28, 0xc8, 0x26, 0xcc, 0xf0, 0xb6, 0xd9, 0x3b, 0x76, 0x9d, 0x07, 0xa3, 0xdb, 0x56, 0x53, - 0x08, 0xc5, 0x8b, 0x8f, 0x8e, 0x16, 0x16, 0xe8, 0x3e, 0xfa, 0x45, 0x89, 0xf2, 0x9a, 0x87, 0x08, - 0x0a, 0xbf, 0x24, 0x7a, 0x35, 0x42, 0xd6, 0x1c, 0xc5, 0x0a, 0x59, 0x6d, 0xac, 0x6e, 0x86, 0xcb, - 0x91, 0x8c, 0x7f, 0x30, 0x04, 0xf3, 0xbd, 0xe5, 0x19, 0xf9, 0x40, 0x9f, 0xc0, 0x4b, 0xc7, 0x4a, - 0xc0, 0xe3, 0xe7, 0xf0, 0x2b, 0x30, 0xbb, 0xdc, 0xf6, 0xa9, 0xdb, 0x71, 0x6d, 0x19, 0x13, 0xbd, - 0xe2, 0x78, 0xd2, 0x0d, 0xec, 0x85, 0x47, 0x47, 0x0b, 0x17, 0x68, 0x50, 0x2e, 0xec, 0x83, 0xe8, - 0x94, 0xa6, 0xb0, 0x4a, 0xe4, 0x40, 0x96, 0x61, 0x52, 0x81, 0x37, 0xbb, 0xbb, 0x62, 0x07, 0x47, - 0x1f, 0x43, 0x95, 0x67, 0xb3, 0xab, 0x1e, 0x74, 0x22, 0x44, 0xf3, 0xbf, 0x90, 0x11, 0xcb, 0xe2, - 0x22, 0x64, 0xaa, 0xdd, 0x6d, 0xb1, 0x1c, 0xb8, 0xaa, 0xae, 0x89, 0x75, 0x56, 0x4a, 0xbe, 0x0c, - 0x60, 0xd2, 0x8e, 0xe3, 0xd9, 0xbe, 0xe3, 0x1e, 0xaa, 0x6e, 0xfa, 0x6e, 0x00, 0xd5, 0x7d, 0x2a, - 0x25, 0x94, 0xac, 0xc0, 0x54, 0xf8, 0x6b, 0xfd, 0xa0, 0x2d, 0x8c, 0x9a, 0xa3, 0xdc, 0x9a, 0x10, - 0x92, 0xd7, 0x1c, 0x56, 0xa6, 0x6e, 0x54, 0x11, 0x32, 0xb2, 0x08, 0xb9, 0x2d, 0xc7, 0xdd, 0xdf, - 0x61, 0x13, 0x95, 0x0d, 0xb7, 0xd2, 0x03, 0x01, 0x53, 0xb7, 0x0c, 0x89, 0xc7, 0xd6, 0xfc, 0x72, - 0xfb, 0x81, 0xed, 0x3a, 0xed, 0x16, 0x6d, 0xfb, 0xea, 0xfd, 0x23, 0x0d, 0xc1, 0x5a, 0x50, 0x53, - 0x08, 0x66, 0x67, 0xe6, 0x42, 0xdd, 0x77, 0x5c, 0x71, 0xf9, 0xc8, 0xa7, 0x9b, 0x01, 0xb4, 0xe9, - 0x66, 0x00, 0x36, 0x88, 0x26, 0xdd, 0x11, 0x56, 0x73, 0x1c, 0x44, 0x97, 0xee, 0x68, 0x11, 0x5b, - 0x74, 0x87, 0xa9, 0x02, 0x26, 0xdd, 0xc1, 0x83, 0xbe, 0x96, 0xde, 0x64, 0x27, 0x66, 0x22, 0x12, - 0x68, 0xc6, 0xef, 0x8c, 0xf6, 0x5c, 0xb7, 0x4c, 0xf6, 0x9e, 0x6c, 0xdd, 0xae, 0x5a, 0x03, 0xac, - 0xdb, 0x57, 0x03, 0x4f, 0x4d, 0x35, 0x4c, 0x11, 0x21, 0xaa, 0xf0, 0xe7, 0x38, 0xf3, 0xbf, 0x98, - 0x3b, 0xc9, 0x22, 0x12, 0x83, 0x94, 0x1e, 0x74, 0x90, 0x32, 0x03, 0x0d, 0x12, 0x59, 0x82, 0x89, - 0x20, 0x89, 0x4e, 0xc5, 0xf2, 0x35, 0xd9, 0x14, 0xa4, 0x44, 0xaa, 0x75, 0x2c, 0x5f, 0x95, 0x4d, - 0x3a, 0x09, 0x79, 0x1b, 0xc6, 0x84, 0xbb, 0x32, 0x72, 0x18, 0x0a, 0x1d, 0xd1, 0xa4, 0x6f, 0x73, - 0x84, 0x5e, 0x45, 0x67, 0x9f, 0x64, 0xc5, 0xee, 0xd0, 0xa6, 0xdd, 0xa6, 0x55, 0xb4, 0x9a, 0x8b, - 0x15, 0x83, 0x9f, 0x64, 0x47, 0x94, 0xd4, 0xb8, 0x41, 0x5d, 0xb3, 0x97, 0x69, 0x44, 0xd1, 0xc5, - 0x3a, 0x72, 0xa2, 0xc5, 0xca, 0xfd, 0x40, 0xdc, 0x55, 0x67, 0xd7, 0x96, 0x9e, 0x6f, 0xd2, 0x0f, - 0xc4, 0xad, 0x35, 0x19, 0x34, 0xe2, 0x07, 0xc2, 0x51, 0x99, 0x5e, 0xcf, 0x7e, 0x94, 0x4b, 0xe2, - 0x86, 0x06, 0xf5, 0x7a, 0x24, 0xd2, 0xdd, 0x0d, 0x39, 0x92, 0xac, 0x66, 0xb9, 0x65, 0xd9, 0x4d, - 0x11, 0x8d, 0x16, 0x56, 0x43, 0x19, 0x34, 0x5a, 0x0d, 0xa2, 0x92, 0x3a, 0x8c, 0x9b, 0x74, 0xa7, - 0xe2, 0x3a, 0x3e, 0xad, 0xfb, 0xb4, 0x21, 0x74, 0x19, 0xa9, 0xce, 0x2f, 0x39, 0x0e, 0xd7, 0xd3, - 0x96, 0x5e, 0xfb, 0x9d, 0xa3, 0x85, 0xd4, 0xf7, 0x8e, 0x16, 0x80, 0x81, 0xb8, 0x2f, 0xeb, 0xa3, - 0xa3, 0x85, 0x33, 0x6c, 0xfe, 0x3b, 0x92, 0x58, 0xdd, 0x62, 0x54, 0xa6, 0xe4, 0xfb, 0x99, 0xd0, - 0x0d, 0x86, 0x24, 0xac, 0x6c, 0xbc, 0x47, 0x65, 0xaf, 0x27, 0x56, 0xb6, 0xa0, 0x8c, 0x76, 0x62, - 0xa5, 0x89, 0x95, 0x90, 0x77, 0x60, 0xac, 0x58, 0x2e, 0x3a, 0xed, 0x1d, 0x7b, 0xb7, 0xba, 0x52, - 0x40, 0x85, 0x48, 0xf8, 0x1b, 0xd7, 0xed, 0x5a, 0x1d, 0xe1, 0x35, 0x6f, 0xcf, 0xd2, 0x62, 0x36, - 0x42, 0x7c, 0x72, 0x1b, 0x26, 0xe5, 0x4f, 0x93, 0xee, 0x6c, 0x9a, 0x65, 0xd4, 0x83, 0xa4, 0x93, - 0x77, 0xc0, 0x81, 0x0d, 0x44, 0xd7, 0x55, 0xf5, 0xe3, 0x08, 0x19, 0x5b, 0x8c, 0x25, 0xda, 0x69, - 0x3a, 0x87, 0xac, 0x79, 0x1b, 0x36, 0x75, 0x51, 0xf3, 0x11, 0x8b, 0xb1, 0x11, 0x94, 0xd4, 0x7c, - 0x5b, 0x13, 0xb7, 0x11, 0x22, 0xb2, 0x06, 0xd3, 0x62, 0x89, 0xdf, 0xb7, 0x3d, 0x7b, 0xdb, 0x6e, - 0xda, 0xfe, 0xe1, 0x5c, 0x1e, 0x39, 0xa1, 0x16, 0x22, 0xbf, 0x8b, 0x07, 0x41, 0xa9, 0xc2, 0x2c, - 0x4e, 0x6a, 0xfc, 0x4a, 0x1a, 0xce, 0xf5, 0xd3, 0xff, 0x49, 0x55, 0x17, 0x66, 0x97, 0x07, 0x38, - 0x33, 0x1c, 0x2f, 0xce, 0x96, 0x61, 0x72, 0xdd, 0xdd, 0xb5, 0xda, 0xf6, 0xb7, 0xf0, 0x5c, 0x17, - 0xb8, 0xc3, 0xe0, 0x60, 0x38, 0x4a, 0x89, 0xbe, 0xda, 0x23, 0x44, 0xf3, 0x0f, 0x84, 0x98, 0xfb, - 0xb4, 0x01, 0x10, 0x37, 0x61, 0xb4, 0xe8, 0xb4, 0x7d, 0xfa, 0xd0, 0x8f, 0x04, 0xb9, 0x71, 0x60, - 0x34, 0xc8, 0x4d, 0xa2, 0x1a, 0xff, 0x57, 0x1a, 0xce, 0xf7, 0x55, 0x80, 0xc9, 0x86, 0x3e, 0x6a, - 0x57, 0x06, 0xd1, 0x9a, 0x8f, 0x1f, 0xb6, 0xc5, 0x98, 0xe7, 0xc6, 0xb1, 0x7e, 0xcb, 0xf3, 0xff, - 0x69, 0x4a, 0x0c, 0xd2, 0x17, 0x60, 0x04, 0xab, 0x0a, 0x86, 0x88, 0xdb, 0x86, 0x50, 0x0a, 0xdb, - 0xba, 0x6d, 0x88, 0xa3, 0x91, 0x1b, 0x90, 0x2b, 0x5a, 0xcd, 0xa6, 0x12, 0x02, 0x88, 0x7a, 0x7d, - 0x1d, 0x61, 0x11, 0x47, 0x1f, 0x89, 0x48, 0xde, 0x00, 0xe0, 0x7f, 0x2b, 0x7b, 0x05, 0x0a, 0x4b, - 0x41, 0x16, 0xd9, 0x2e, 0x14, 0x64, 0x4c, 0xf6, 0x55, 0x77, 0x82, 0x58, 0x25, 0x9e, 0xec, 0x8b, - 0x01, 0xb4, 0x64, 0x5f, 0x0c, 0x60, 0xfc, 0x6a, 0x06, 0x9e, 0xeb, 0x7f, 0x8a, 0x23, 0x9b, 0xfa, - 0x14, 0xbc, 0x3c, 0xd0, 0xd9, 0xef, 0xf8, 0x39, 0x90, 0x59, 0xf4, 0xf8, 0x80, 0x5c, 0x8e, 0xbb, - 0x17, 0x7f, 0x72, 0xb4, 0xa0, 0x78, 0x8f, 0xdd, 0x71, 0xec, 0xb6, 0x72, 0x47, 0xf0, 0x4d, 0x80, - 0xaa, 0x6f, 0xf9, 0x76, 0xfd, 0xce, 0xd6, 0x5d, 0x19, 0x59, 0x7e, 0x73, 0xb0, 0x96, 0x85, 0x74, - 0x5c, 0xae, 0x08, 0xf3, 0x39, 0x42, 0x6b, 0x1f, 0x1f, 0xec, 0x6b, 0xe7, 0xd4, 0x10, 0x79, 0xfe, - 0x4d, 0xc8, 0x47, 0x49, 0xc9, 0x25, 0xc8, 0x62, 0x03, 0x14, 0x1f, 0xe9, 0x08, 0x07, 0x2c, 0x9f, - 0xbf, 0x27, 0xd6, 0xce, 0x32, 0x4c, 0x8a, 0x8b, 0x69, 0xdd, 0x22, 0x86, 0xdf, 0xab, 0xbc, 0xd7, - 0x8e, 0x5b, 0xc5, 0x22, 0x44, 0xc6, 0x9f, 0xa6, 0xe0, 0x6c, 0xcf, 0xf3, 0x31, 0xa9, 0xe8, 0x13, - 0xf6, 0xe2, 0x71, 0x07, 0xea, 0x63, 0xe7, 0x6a, 0xfe, 0xc7, 0xe5, 0xda, 0x7f, 0x17, 0xc6, 0xab, - 0xdd, 0xed, 0xe8, 0x21, 0x8b, 0xc7, 0x19, 0x2b, 0x70, 0x75, 0x07, 0x53, 0xf1, 0x59, 0xff, 0xe5, - 0xcd, 0xbb, 0x70, 0xac, 0xe0, 0x07, 0x3f, 0xec, 0x7f, 0x10, 0xc0, 0x84, 0xf1, 0x65, 0xea, 0x20, - 0x46, 0x88, 0x8c, 0x5f, 0x4e, 0x27, 0x9f, 0x56, 0xd9, 0x59, 0xfb, 0x04, 0xa7, 0xd5, 0xdb, 0xc5, - 0xca, 0xf1, 0x7d, 0xff, 0x0f, 0x65, 0xdf, 0xf1, 0x22, 0x52, 0x48, 0x3c, 0x69, 0xde, 0x13, 0x17, - 0x91, 0x52, 0x3a, 0x7a, 0xfa, 0x45, 0xa4, 0x44, 0x26, 0xaf, 0xc3, 0xe8, 0xaa, 0xc3, 0xe3, 0x3e, - 0x65, 0x8f, 0x79, 0x84, 0x8f, 0x04, 0xaa, 0xe2, 0x31, 0xc0, 0x64, 0x67, 0x0b, 0x7d, 0xe2, 0xa5, - 0x7b, 0x37, 0x9e, 0x2d, 0x22, 0xcb, 0x45, 0x37, 0x82, 0xe9, 0x64, 0xc6, 0x8f, 0xa7, 0x61, 0x92, - 0x2f, 0x5e, 0x6e, 0xa4, 0x7d, 0x6a, 0x0d, 0xe0, 0x6f, 0x69, 0x06, 0x70, 0x99, 0x92, 0x40, 0xed, - 0xda, 0x40, 0xe6, 0xef, 0x3d, 0x20, 0x71, 0x1a, 0x62, 0xc2, 0xb8, 0x0a, 0xed, 0x6f, 0xf9, 0xbe, - 0x1e, 0x66, 0xaf, 0x10, 0xb2, 0x03, 0xaf, 0x1f, 0x3c, 0x53, 0xe3, 0x61, 0xfc, 0x58, 0x1a, 0x26, - 0x94, 0x8b, 0xca, 0xa7, 0x76, 0xe0, 0xdf, 0xd4, 0x06, 0x7e, 0x2e, 0x70, 0x49, 0x0e, 0x7a, 0x36, - 0xd0, 0xb8, 0x77, 0x61, 0x3a, 0x46, 0x12, 0xbd, 0xef, 0x4d, 0x0d, 0x72, 0xdf, 0xfb, 0x6a, 0x3c, - 0xac, 0x9e, 0x67, 0x94, 0x0c, 0xc2, 0xea, 0xd5, 0x38, 0xfe, 0x9f, 0x4c, 0xc3, 0xac, 0xf8, 0x85, - 0xb9, 0x63, 0xb8, 0xf4, 0x7e, 0x6a, 0xe7, 0xa2, 0xa0, 0xcd, 0xc5, 0x82, 0x3e, 0x17, 0x4a, 0x07, - 0x7b, 0x4f, 0x89, 0xf1, 0x97, 0x01, 0xe6, 0x7a, 0x11, 0x0c, 0x1c, 0xf9, 0x13, 0xfa, 0x55, 0xa7, - 0x07, 0xf0, 0xab, 0x5e, 0x85, 0x3c, 0x56, 0x25, 0x32, 0x4d, 0x78, 0xec, 0x0c, 0x90, 0x09, 0x15, - 0x6e, 0x9e, 0xe0, 0x47, 0x64, 0xab, 0xf0, 0x22, 0x87, 0x80, 0x18, 0x25, 0xf9, 0x85, 0x14, 0x4c, - 0x22, 0x70, 0xf9, 0x01, 0x6d, 0xfb, 0xc8, 0x2c, 0x2b, 0xdc, 0x80, 0x03, 0xfb, 0x78, 0xd5, 0x77, - 0xed, 0xf6, 0xae, 0x30, 0x90, 0x6f, 0x0b, 0x03, 0xf9, 0xdb, 0xdc, 0xb0, 0x7f, 0xb5, 0xee, 0xb4, - 0xae, 0xed, 0xba, 0xd6, 0x03, 0x9b, 0xdf, 0xc1, 0x5b, 0xcd, 0x6b, 0x61, 0x0e, 0xe4, 0x8e, 0x1d, - 0xc9, 0x6a, 0x2c, 0x58, 0xe1, 0xe5, 0x03, 0x6f, 0x28, 0xc5, 0x6a, 0xa3, 0x67, 0x15, 0xbd, 0x45, - 0xe4, 0xfb, 0xe0, 0x0c, 0x0f, 0x23, 0x67, 0x2a, 0xaf, 0xdd, 0xee, 0x3a, 0x5d, 0x6f, 0xc9, 0xaa, - 0xef, 0xb3, 0x7d, 0x8f, 0x87, 0x32, 0x60, 0xcf, 0xeb, 0x41, 0x61, 0x6d, 0x9b, 0x97, 0x6a, 0xa1, - 0x5b, 0xc9, 0x0c, 0xc8, 0x0a, 0x4c, 0xf3, 0xa2, 0x42, 0xd7, 0x77, 0xaa, 0x75, 0xab, 0x69, 0xb7, - 0x77, 0xf1, 0x4c, 0x9d, 0xe3, 0xfb, 0xb1, 0xd5, 0xf5, 0x9d, 0x9a, 0xc7, 0xe1, 0xea, 0xd1, 0x25, - 0x46, 0x44, 0xca, 0x30, 0x65, 0x52, 0xab, 0x71, 0xcf, 0x7a, 0x58, 0xb4, 0x3a, 0x56, 0x9d, 0x1d, - 0x84, 0x72, 0x78, 0x99, 0x84, 0x67, 0x33, 0x97, 0x5a, 0x8d, 0x5a, 0xcb, 0x7a, 0x58, 0xab, 0x8b, - 0x42, 0xdd, 0x86, 0xa5, 0xd1, 0x05, 0xac, 0xec, 0x76, 0xc0, 0x6a, 0x34, 0xca, 0xca, 0x6e, 0xf7, - 0x66, 0x15, 0xd2, 0x49, 0x56, 0x1b, 0x96, 0xbb, 0x4b, 0x7d, 0xee, 0xc2, 0xc6, 0xce, 0xe3, 0x29, - 0x85, 0x95, 0x8f, 0x65, 0x35, 0x74, 0x67, 0x8b, 0xb2, 0x52, 0xe8, 0xd8, 0xca, 0xdb, 0x72, 0x6d, - 0x9f, 0xaa, 0x3d, 0x1c, 0xc3, 0x66, 0xe1, 0xf8, 0xa3, 0xf3, 0x5f, 0xaf, 0x2e, 0xc6, 0x28, 0x43, - 0x6e, 0x4a, 0x27, 0xc7, 0x63, 0xdc, 0x92, 0x7b, 0x19, 0xa3, 0x0c, 0xb8, 0xa9, 0xfd, 0x9c, 0xc0, - 0x7e, 0x2a, 0xdc, 0x7a, 0x74, 0x34, 0x46, 0x49, 0xd6, 0xd8, 0xa0, 0xf9, 0xb4, 0xcd, 0x56, 0xb4, - 0x70, 0xe1, 0x9b, 0xc4, 0xa6, 0xbd, 0x20, 0xfc, 0x50, 0xf2, 0xae, 0x2c, 0xae, 0x25, 0x38, 0xf4, - 0x45, 0x89, 0xc9, 0x5f, 0x80, 0xa9, 0x4d, 0x8f, 0xde, 0x2a, 0x57, 0xaa, 0x32, 0x70, 0x1e, 0x4f, - 0xdb, 0x93, 0x8b, 0xd7, 0x8f, 0x11, 0x3a, 0x57, 0x55, 0x1a, 0xcc, 0x2b, 0xcc, 0xe7, 0xad, 0xeb, - 0xd1, 0xda, 0x8e, 0xdd, 0xf1, 0x82, 0x14, 0x1e, 0xea, 0xbc, 0x45, 0xaa, 0x32, 0x56, 0x60, 0x3a, - 0xc6, 0x86, 0x4c, 0x02, 0x30, 0x60, 0x6d, 0x73, 0xad, 0xba, 0xbc, 0x91, 0x7f, 0x86, 0xe4, 0x61, - 0x1c, 0x7f, 0x2f, 0xaf, 0x15, 0x96, 0x56, 0x97, 0x4b, 0xf9, 0x14, 0x99, 0x86, 0x09, 0x84, 0x94, - 0xca, 0x55, 0x0e, 0x4a, 0xf3, 0xac, 0x92, 0x66, 0x9e, 0x7f, 0xba, 0x3e, 0xfb, 0x00, 0x70, 0x4f, - 0x31, 0xfe, 0x46, 0x1a, 0xce, 0xca, 0x6d, 0x85, 0xfa, 0x07, 0x8e, 0xbb, 0x6f, 0xb7, 0x77, 0x9f, - 0xf2, 0xdd, 0xe1, 0x96, 0xb6, 0x3b, 0xbc, 0x10, 0xd9, 0xa9, 0x23, 0xbd, 0xec, 0xb3, 0x45, 0xfc, - 0x0f, 0x39, 0x38, 0xdf, 0x97, 0x8a, 0x7c, 0xc0, 0x76, 0x73, 0x9b, 0xb6, 0xfd, 0x72, 0xa3, 0x49, - 0x37, 0xec, 0x16, 0x75, 0xba, 0xbe, 0x70, 0x19, 0xbd, 0x88, 0x07, 0x5c, 0x2c, 0xac, 0xd9, 0x8d, - 0x26, 0xad, 0xf9, 0xbc, 0x58, 0x5b, 0x6e, 0x71, 0x6a, 0xc6, 0x32, 0x48, 0x77, 0x5e, 0x6e, 0xfb, - 0xd4, 0x7d, 0x80, 0xce, 0x29, 0x01, 0xcb, 0x7d, 0x4a, 0x3b, 0x35, 0x8b, 0x95, 0xd6, 0x6c, 0x51, - 0xac, 0xb3, 0x8c, 0x51, 0x93, 0x5b, 0x0a, 0xcb, 0x22, 0x53, 0x87, 0xef, 0x59, 0x0f, 0xc5, 0x6d, - 0xb9, 0x48, 0x3f, 0x14, 0xb0, 0xe4, 0xd1, 0x46, 0x2d, 0xeb, 0xa1, 0x19, 0x27, 0x21, 0x5f, 0x83, - 0x53, 0x62, 0x03, 0x12, 0xd1, 0xa2, 0xb2, 0xc7, 0x3c, 0x16, 0xf5, 0xa5, 0x47, 0x47, 0x0b, 0x67, - 0x64, 0xb2, 0x25, 0x19, 0x1f, 0x9c, 0xd4, 0xeb, 0x64, 0x2e, 0x64, 0x83, 0x6d, 0xc8, 0x91, 0xe1, - 0xb8, 0x47, 0x3d, 0xcf, 0xda, 0x95, 0x37, 0xeb, 0xdc, 0xbf, 0x5e, 0x19, 0xcc, 0x5a, 0x8b, 0x97, - 0x9b, 0x3d, 0x29, 0xc9, 0x0a, 0x4c, 0x6e, 0xd1, 0x6d, 0x75, 0x7e, 0x86, 0x03, 0x51, 0x95, 0x3f, - 0xa0, 0xdb, 0xbd, 0x27, 0x27, 0x42, 0x47, 0x6c, 0x34, 0x98, 0x3d, 0x3c, 0x5c, 0xb5, 0x3d, 0x9f, - 0xb6, 0xa9, 0x8b, 0xd9, 0x02, 0x46, 0x50, 0x18, 0xcc, 0x85, 0x1a, 0xb2, 0x5e, 0xbe, 0xf4, 0xfc, - 0xa3, 0xa3, 0x85, 0xf3, 0x3c, 0x9e, 0xa4, 0x29, 0xe0, 0xb5, 0x48, 0x86, 0xf0, 0x38, 0x57, 0xf2, - 0x0d, 0x98, 0x32, 0x9d, 0xae, 0x6f, 0xb7, 0x77, 0xab, 0xbe, 0x6b, 0xf9, 0x74, 0x97, 0x6f, 0x48, - 0x61, 0x5a, 0x82, 0x48, 0xa9, 0xb8, 0x6b, 0xe1, 0xc0, 0x9a, 0x27, 0xa0, 0xda, 0x8e, 0xa0, 0x13, - 0x90, 0xaf, 0xc3, 0x24, 0x8f, 0x13, 0x0c, 0x2a, 0x18, 0xd5, 0xb2, 0x9b, 0xea, 0x85, 0xf7, 0xaf, - 0xf3, 0x03, 0x2a, 0x8f, 0x37, 0x4c, 0xaa, 0x20, 0xc2, 0x8d, 0x7c, 0x24, 0x06, 0xab, 0x62, 0xb7, - 0x77, 0x83, 0x65, 0x0c, 0x38, 0xf2, 0xaf, 0x85, 0x43, 0xd2, 0x61, 0xcd, 0x95, 0xcb, 0xb8, 0x87, - 0xa7, 0x46, 0x9c, 0x0f, 0xf1, 0xe1, 0x7c, 0xc1, 0xf3, 0x6c, 0xcf, 0x17, 0x8e, 0xd5, 0xcb, 0x0f, - 0x69, 0xbd, 0xcb, 0x90, 0xb7, 0x1c, 0x77, 0x9f, 0xba, 0xdc, 0xb5, 0x6f, 0x68, 0xe9, 0xea, 0xa3, - 0xa3, 0x85, 0x97, 0x2d, 0x44, 0xac, 0x09, 0x5f, 0xec, 0x1a, 0x95, 0xa8, 0xb5, 0x03, 0x8e, 0xab, - 0xf4, 0xa1, 0x3f, 0x53, 0xf2, 0x75, 0x38, 0x5d, 0xb4, 0x3c, 0x5a, 0x6e, 0x7b, 0xb4, 0xed, 0xd9, - 0xbe, 0xfd, 0x80, 0x8a, 0x41, 0xc5, 0xcd, 0x2f, 0x87, 0xb9, 0xd4, 0x8d, 0x3a, 0x3e, 0xbb, 0x10, - 0xa2, 0xd4, 0xc4, 0xa4, 0x28, 0xd5, 0xf4, 0xe0, 0x62, 0x1c, 0xa5, 0x20, 0x1f, 0x1d, 0x76, 0xf2, - 0x15, 0x18, 0xe5, 0x2e, 0x09, 0xd4, 0xdb, 0x13, 0x21, 0x6e, 0xf2, 0x86, 0x3b, 0x80, 0xeb, 0x44, - 0x22, 0x28, 0x81, 0x3b, 0x3c, 0x50, 0xf5, 0xbe, 0x16, 0x83, 0x12, 0x24, 0x11, 0x69, 0xc0, 0x38, - 0x1f, 0x59, 0x8a, 0xf9, 0x43, 0x84, 0x67, 0xda, 0xf3, 0xea, 0x4a, 0x16, 0x45, 0x11, 0xfe, 0x68, - 0xf2, 0x16, 0xf3, 0xc7, 0x11, 0xb4, 0x2a, 0x34, 0xae, 0x4b, 0x00, 0x39, 0x49, 0x68, 0x9c, 0x85, - 0x33, 0x3d, 0xda, 0x6c, 0x3c, 0xc0, 0x6b, 0xb0, 0x1e, 0x35, 0x92, 0xaf, 0xc0, 0x2c, 0x12, 0x16, - 0x9d, 0x76, 0x9b, 0xd6, 0x7d, 0x14, 0x1d, 0xd2, 0x74, 0x94, 0xe1, 0x77, 0xad, 0xbc, 0xbf, 0xf5, - 0x00, 0xa1, 0x16, 0xb5, 0x20, 0x25, 0x72, 0x30, 0x7e, 0x36, 0x0d, 0x73, 0x42, 0x1a, 0x99, 0xb4, - 0xee, 0xb8, 0x8d, 0xa7, 0x7f, 0xf7, 0x5b, 0xd6, 0x76, 0xbf, 0x8b, 0x41, 0x4c, 0x73, 0x52, 0x27, - 0xfb, 0x6c, 0x7e, 0xbf, 0x9c, 0x82, 0x73, 0xfd, 0x88, 0xd8, 0xe8, 0x04, 0xf9, 0x52, 0x46, 0x63, - 0x79, 0x51, 0x3a, 0x30, 0x83, 0x13, 0x5a, 0xdc, 0xa3, 0xf5, 0x7d, 0x6f, 0xc5, 0xf1, 0x7c, 0x74, - 0x8c, 0x4d, 0xf7, 0xb8, 0xa8, 0x79, 0x35, 0xf1, 0xa2, 0xe6, 0x34, 0x5f, 0x65, 0x75, 0xe4, 0xc1, - 0x33, 0xba, 0xec, 0xd3, 0x43, 0xcf, 0x4c, 0x62, 0x8d, 0x4e, 0x8e, 0x85, 0xae, 0xbf, 0x57, 0x71, - 0xe9, 0x0e, 0x75, 0x69, 0xbb, 0x4e, 0x3f, 0x67, 0x4e, 0x8e, 0x7a, 0xe7, 0x06, 0xb2, 0x36, 0xfc, - 0xf2, 0x38, 0xcc, 0x26, 0x91, 0xb1, 0x71, 0x51, 0x0e, 0xb8, 0xd1, 0x17, 0x5a, 0xfe, 0x52, 0x0a, - 0xc6, 0xab, 0xb4, 0xee, 0xb4, 0x1b, 0xb7, 0xf0, 0x3a, 0x5c, 0x8c, 0x4e, 0x8d, 0x6f, 0xf0, 0x0c, - 0x5e, 0xdb, 0x89, 0xdc, 0x93, 0x7f, 0x72, 0xb4, 0xf0, 0xfe, 0x60, 0xe7, 0xca, 0xba, 0x83, 0x71, - 0xc9, 0x3e, 0xa6, 0x0d, 0x0d, 0xaa, 0x40, 0xcb, 0xb6, 0x56, 0x29, 0x59, 0x82, 0x09, 0xf1, 0xb9, - 0x3a, 0x6a, 0xba, 0x1c, 0x1e, 0xf6, 0x2d, 0x0b, 0x62, 0xf9, 0xc1, 0x34, 0x12, 0x72, 0x03, 0x32, - 0x9b, 0x8b, 0xb7, 0xc4, 0x1c, 0xc8, 0xc4, 0xab, 0x9b, 0x8b, 0xb7, 0xd0, 0x74, 0xc5, 0x8e, 0x03, - 0x13, 0xdd, 0x45, 0xed, 0x86, 0x7a, 0x73, 0xf1, 0x16, 0xf9, 0x01, 0x38, 0x55, 0xb2, 0x3d, 0x51, - 0x05, 0x77, 0xb7, 0x6d, 0x60, 0x78, 0xc9, 0x70, 0x8f, 0xd5, 0xfb, 0xa5, 0xc4, 0xd5, 0xfb, 0x7c, - 0x23, 0x60, 0x52, 0xe3, 0xbe, 0xbc, 0x8d, 0x68, 0x5a, 0xa0, 0xe4, 0x7a, 0xc8, 0xc7, 0x30, 0x89, - 0xa6, 0x57, 0xf4, 0x40, 0xc6, 0x34, 0x86, 0x23, 0x3d, 0x6a, 0xfe, 0x42, 0x62, 0xcd, 0xf3, 0x68, - 0xc9, 0xad, 0xa1, 0x1f, 0x33, 0xa6, 0x3c, 0xd4, 0x4e, 0xe8, 0x1a, 0x67, 0x72, 0x07, 0xa6, 0x84, - 0xaa, 0xb4, 0xbe, 0xb3, 0xb1, 0x47, 0x4b, 0xd6, 0xa1, 0xb8, 0x5c, 0xc6, 0xd3, 0x97, 0xd0, 0xaf, - 0x6a, 0xce, 0x4e, 0xcd, 0xdf, 0xa3, 0xb5, 0x86, 0xa5, 0x29, 0x15, 0x11, 0x42, 0xf2, 0xfd, 0x30, - 0xb6, 0xea, 0xd4, 0x99, 0x96, 0x8c, 0x92, 0x81, 0xdf, 0x37, 0x7f, 0x88, 0x0f, 0x7f, 0x70, 0x70, - 0x44, 0xf5, 0xf9, 0xe4, 0x68, 0xe1, 0xad, 0x93, 0x2e, 0x1a, 0xa5, 0x02, 0x53, 0xad, 0x8d, 0x14, - 0x21, 0xb7, 0x45, 0xb7, 0x59, 0x6f, 0xa3, 0x8f, 0x02, 0x48, 0xb0, 0x70, 0x27, 0x11, 0xbf, 0x34, - 0x77, 0x12, 0x01, 0x23, 0x2e, 0x4c, 0xe3, 0xf8, 0x54, 0x2c, 0xcf, 0x3b, 0x70, 0xdc, 0x06, 0x66, - 0x7f, 0xed, 0x75, 0x95, 0xbd, 0x98, 0x38, 0xf8, 0xe7, 0xf8, 0xe0, 0x77, 0x14, 0x0e, 0xaa, 0xb2, - 0x17, 0x63, 0x4f, 0xbe, 0x01, 0x93, 0x26, 0xfd, 0x66, 0xd7, 0x76, 0xe9, 0xbd, 0x5b, 0x05, 0xfc, - 0x2a, 0xc7, 0xb5, 0x20, 0x1d, 0xbd, 0x90, 0x6b, 0x94, 0x2e, 0x87, 0x49, 0x6b, 0x51, 0xad, 0xb5, - 0x63, 0xe9, 0xb7, 0x05, 0x2a, 0x09, 0xa9, 0xc0, 0x58, 0x89, 0x3e, 0xb0, 0xeb, 0x14, 0x43, 0x09, - 0x84, 0x2b, 0x5f, 0x90, 0xd5, 0x3c, 0x2c, 0xe1, 0x76, 0x93, 0x06, 0x02, 0x78, 0x60, 0x82, 0xee, - 0x2d, 0x16, 0x20, 0x92, 0x9b, 0x90, 0x29, 0x97, 0x2a, 0xc2, 0x93, 0x4f, 0x7a, 0xe8, 0x97, 0x1b, - 0x15, 0x99, 0x03, 0x1a, 0x9d, 0x3f, 0xec, 0x86, 0xe6, 0x07, 0x58, 0x2e, 0x55, 0xc8, 0x0e, 0x4c, - 0xe0, 0x00, 0xac, 0x50, 0x8b, 0x8f, 0xed, 0x54, 0x8f, 0xb1, 0xbd, 0x9a, 0x38, 0xb6, 0x73, 0x7c, - 0x6c, 0xf7, 0x04, 0xb5, 0x96, 0xd4, 0x56, 0x65, 0xcb, 0xd4, 0x4f, 0x91, 0x68, 0x5b, 0xa6, 0x75, - 0xdd, 0x58, 0xc5, 0xcb, 0x6d, 0xa1, 0x7e, 0xca, 0xbc, 0xdc, 0x41, 0x6e, 0xd8, 0x9e, 0x8e, 0xc2, - 0x71, 0x3e, 0xe4, 0x4d, 0xc8, 0xae, 0xef, 0xfb, 0xd6, 0xdc, 0xb4, 0x36, 0x8e, 0x0c, 0x24, 0xbb, - 0x8f, 0x16, 0x43, 0x67, 0x5f, 0x4b, 0x48, 0x81, 0x34, 0x64, 0x11, 0x46, 0x2a, 0xe5, 0xfb, 0xd5, - 0xa6, 0xe3, 0xcf, 0x91, 0xe0, 0x4c, 0x43, 0x3a, 0xf6, 0x83, 0x9a, 0xd7, 0x74, 0xf4, 0x64, 0xfd, - 0x12, 0x91, 0x4d, 0xdf, 0x8a, 0xe5, 0x36, 0x0e, 0x2c, 0x17, 0x23, 0xc0, 0x66, 0xb4, 0x6a, 0x95, - 0x12, 0x3e, 0x7d, 0x7b, 0x02, 0x10, 0x09, 0x0b, 0x53, 0x59, 0x08, 0x6b, 0xc0, 0xb4, 0x58, 0x26, - 0xa2, 0x6b, 0xf7, 0x6e, 0x15, 0x8c, 0x7f, 0x2f, 0x85, 0x02, 0x93, 0xbc, 0x8c, 0x31, 0xeb, 0xc1, - 0x05, 0x2f, 0xda, 0x35, 0xad, 0x4e, 0x24, 0x15, 0x22, 0x47, 0x21, 0xaf, 0xc2, 0xf0, 0x2d, 0xab, - 0x4e, 0x7d, 0x79, 0xb1, 0x83, 0xc8, 0x3b, 0x08, 0x51, 0x8d, 0xa0, 0x1c, 0x87, 0xe9, 0x72, 0x7c, - 0x21, 0x15, 0xc2, 0x87, 0xd5, 0x8a, 0x05, 0x79, 0xaf, 0x83, 0xba, 0x9c, 0x58, 0x80, 0xca, 0xcb, - 0x6b, 0x11, 0x1f, 0xc8, 0x44, 0x0e, 0xc6, 0x1f, 0xa7, 0x42, 0x09, 0x40, 0x5e, 0x82, 0xac, 0x59, - 0x09, 0xda, 0xcf, 0xa3, 0xa1, 0x22, 0xcd, 0x47, 0x04, 0xf2, 0x11, 0x9c, 0x52, 0xf8, 0xc4, 0x1c, - 0x32, 0x5f, 0xc4, 0x70, 0x1d, 0xa5, 0x25, 0xc9, 0x5e, 0x99, 0xc9, 0x3c, 0x50, 0x71, 0x0d, 0x0b, - 0x4a, 0xb4, 0x6d, 0x73, 0xde, 0x4a, 0x67, 0x55, 0xde, 0x0d, 0x44, 0x88, 0x76, 0x36, 0x89, 0x03, - 0x8f, 0xd8, 0x31, 0x7e, 0x23, 0xa5, 0x7d, 0xd9, 0xc1, 0x73, 0x54, 0xa9, 0x63, 0x9e, 0xa3, 0x7a, - 0x03, 0xa0, 0xd0, 0xf5, 0x9d, 0xe5, 0xb6, 0xeb, 0x34, 0xb9, 0x75, 0x41, 0x64, 0x03, 0x45, 0x9b, - 0x29, 0x45, 0xb0, 0x16, 0x58, 0x10, 0x20, 0x27, 0xfa, 0xae, 0x66, 0x3e, 0xad, 0xef, 0xaa, 0xf1, - 0xbb, 0x29, 0x6d, 0x6d, 0x33, 0x8d, 0x4c, 0x7e, 0x1e, 0x8a, 0x6b, 0x41, 0xfc, 0xf3, 0x08, 0x3f, - 0x8e, 0xff, 0x7f, 0x0a, 0x4e, 0x73, 0x27, 0xd0, 0xb5, 0x6e, 0x6b, 0x9b, 0xba, 0xf7, 0xad, 0xa6, - 0xdd, 0xe0, 0x11, 0x69, 0x5c, 0xd9, 0xbc, 0x1c, 0xff, 0x50, 0x92, 0xf1, 0xf9, 0x01, 0x8e, 0x3b, - 0xa5, 0xd6, 0xda, 0x58, 0x58, 0x7b, 0x10, 0x94, 0xaa, 0x07, 0xb8, 0x64, 0x7a, 0xe3, 0x57, 0x52, - 0xf0, 0xfc, 0xb1, 0xb5, 0x90, 0x6b, 0x30, 0x22, 0xd3, 0xb0, 0xa6, 0x70, 0xe0, 0xd1, 0x21, 0x2b, - 0x9e, 0x82, 0x55, 0x62, 0x91, 0xaf, 0xc2, 0x29, 0x95, 0xd5, 0x86, 0x6b, 0xd9, 0x6a, 0xb2, 0xd3, - 0x84, 0x56, 0xfb, 0x0c, 0x25, 0xaa, 0x19, 0x25, 0x33, 0x31, 0xfe, 0xf7, 0x94, 0xf2, 0x74, 0xdd, - 0x53, 0xaa, 0x2f, 0xdf, 0xd4, 0xf4, 0x65, 0x99, 0x2d, 0x28, 0xe8, 0x15, 0x2b, 0x4b, 0x3c, 0xe3, - 0x4c, 0x29, 0x8e, 0x85, 0x08, 0xf8, 0x76, 0x1a, 0xc6, 0x36, 0x3d, 0xea, 0xf2, 0x0b, 0xce, 0xcf, - 0x57, 0x56, 0x98, 0xa0, 0x5f, 0x03, 0xe5, 0xed, 0xf8, 0xc3, 0x14, 0x1a, 0xbe, 0x55, 0x0a, 0x36, - 0x1a, 0xca, 0xa3, 0x14, 0x38, 0x1a, 0xf8, 0x1c, 0x05, 0x42, 0x79, 0x6e, 0x8f, 0x55, 0xfd, 0x7d, - 0x1a, 0x7c, 0xa4, 0x68, 0x95, 0xbc, 0x0f, 0x43, 0x9b, 0x68, 0xc6, 0xd3, 0xa3, 0x8f, 0x03, 0xfe, - 0x58, 0xc8, 0x85, 0x74, 0x97, 0xfd, 0xa9, 0xee, 0x31, 0x58, 0x46, 0xaa, 0x30, 0x52, 0x74, 0x29, - 0x3e, 0x37, 0x97, 0x1d, 0x3c, 0x82, 0xae, 0xce, 0x49, 0xa2, 0x11, 0x74, 0x82, 0x93, 0xf1, 0x33, - 0x69, 0x20, 0x61, 0x1f, 0x31, 0x4f, 0xbb, 0xf7, 0xd4, 0x4e, 0xfa, 0x7b, 0xda, 0xa4, 0x9f, 0x8f, - 0x4d, 0x3a, 0xef, 0xde, 0x40, 0x73, 0xff, 0x9b, 0x29, 0x38, 0x9d, 0x4c, 0x48, 0x2e, 0xc2, 0xf0, - 0xfa, 0x46, 0x45, 0x06, 0xb0, 0x8b, 0xae, 0x38, 0x1d, 0x3c, 0x97, 0x9b, 0xa2, 0x88, 0xbc, 0x06, - 0xc3, 0x1f, 0x98, 0x45, 0xb6, 0x0f, 0x29, 0x39, 0x51, 0xbf, 0xe9, 0xd6, 0xea, 0xfa, 0x56, 0x24, - 0x90, 0xd4, 0xb9, 0xcd, 0x3c, 0xb1, 0xb9, 0xfd, 0xc9, 0x34, 0x4c, 0x15, 0xea, 0x75, 0xea, 0x79, - 0x4c, 0xc9, 0xa1, 0x9e, 0xff, 0xd4, 0x4e, 0x6c, 0x72, 0x68, 0xba, 0xd6, 0xb7, 0x81, 0x66, 0xf5, - 0xb7, 0x53, 0x70, 0x4a, 0x52, 0x3d, 0xb0, 0xe9, 0xc1, 0xc6, 0x9e, 0x4b, 0xbd, 0x3d, 0xa7, 0xd9, - 0x18, 0x38, 0xf1, 0x32, 0x53, 0xf4, 0x30, 0x4b, 0xa3, 0x7a, 0xdb, 0xbd, 0x83, 0x10, 0x4d, 0xd1, - 0xe3, 0x99, 0x1c, 0xaf, 0xc1, 0x48, 0xa1, 0xd3, 0x71, 0x9d, 0x07, 0xfc, 0xb3, 0x9f, 0x10, 0x01, - 0x85, 0x1c, 0xa4, 0x05, 0x20, 0x72, 0x10, 0x6b, 0x46, 0x89, 0xb6, 0x79, 0x2e, 0x9d, 0x09, 0xde, - 0x8c, 0x06, 0x6d, 0xab, 0x3a, 0x2c, 0x96, 0x1b, 0x55, 0x20, 0x15, 0xd7, 0x69, 0x39, 0x3e, 0x6d, - 0xf0, 0xfe, 0x60, 0xdc, 0xe6, 0xb1, 0x49, 0x40, 0x36, 0x6c, 0xbf, 0xa9, 0x25, 0x01, 0xf1, 0x19, - 0xc0, 0xe4, 0x70, 0xe3, 0x7f, 0x1e, 0x82, 0x71, 0x75, 0x74, 0x88, 0xc1, 0xb3, 0xb4, 0x3a, 0xae, - 0x1a, 0x3c, 0x6c, 0x21, 0xc4, 0x14, 0x25, 0x61, 0xcc, 0x7d, 0xfa, 0xd8, 0x98, 0xfb, 0x2d, 0x98, - 0xa8, 0xb8, 0x4e, 0xc7, 0xf1, 0x68, 0x83, 0x3f, 0x43, 0xca, 0x45, 0xe1, 0x8c, 0x72, 0xc6, 0x63, - 0x13, 0x89, 0xf7, 0x84, 0x68, 0xe1, 0xe8, 0x08, 0xec, 0x5a, 0xf4, 0x91, 0x52, 0x9d, 0x0f, 0x77, - 0x41, 0xb0, 0x3c, 0x91, 0x32, 0x2b, 0x70, 0x41, 0x60, 0x10, 0xdd, 0x05, 0x81, 0x41, 0xd4, 0x6f, - 0x6d, 0xe8, 0x49, 0x7d, 0x6b, 0xe4, 0x67, 0x52, 0x30, 0x56, 0x68, 0xb7, 0x45, 0x2c, 0xff, 0x31, - 0xc1, 0x8c, 0x5f, 0x15, 0x5e, 0x08, 0x6f, 0x7d, 0x2a, 0x2f, 0x04, 0xd4, 0x5b, 0x3c, 0xd4, 0x54, - 0xc3, 0x0a, 0xd5, 0x53, 0x8e, 0xd2, 0x0e, 0xf2, 0x16, 0xe4, 0x83, 0x45, 0x5e, 0x6e, 0x37, 0xe8, - 0x43, 0xea, 0xcd, 0x8d, 0x5c, 0xc8, 0x5c, 0x9e, 0x10, 0xc9, 0xf2, 0x54, 0xcd, 0x34, 0x8a, 0x48, - 0x36, 0x00, 0xac, 0x60, 0x75, 0x45, 0x1e, 0x80, 0x89, 0x2f, 0x3f, 0xa1, 0x3d, 0xe3, 0x6f, 0xbc, - 0xe8, 0x51, 0xb5, 0xe7, 0x90, 0x0f, 0x69, 0xc1, 0x14, 0x7f, 0x7d, 0x05, 0x5f, 0x65, 0xc5, 0x9c, - 0xb0, 0x70, 0xec, 0x3c, 0xbc, 0x24, 0x6c, 0x55, 0xcf, 0x8a, 0x37, 0x5d, 0xf0, 0xa1, 0xd7, 0x5a, - 0x42, 0x82, 0xd8, 0x28, 0x6f, 0x9e, 0x9a, 0xd0, 0x3c, 0x13, 0x6f, 0x2f, 0x5f, 0xf4, 0x3f, 0x99, - 0x82, 0xd3, 0xea, 0xa2, 0xaf, 0x76, 0xb7, 0x5b, 0x36, 0x9e, 0x05, 0xc9, 0x55, 0x18, 0x15, 0x6b, - 0x32, 0x38, 0x44, 0xc5, 0x53, 0xdb, 0x86, 0x28, 0x64, 0x99, 0x2d, 0x43, 0xc6, 0x43, 0x68, 0xdd, - 0x33, 0x11, 0x39, 0xc5, 0x8a, 0xc2, 0x97, 0xbd, 0x5c, 0xfc, 0xad, 0xaf, 0x4f, 0x06, 0x31, 0xde, - 0x85, 0x69, 0x7d, 0x26, 0xaa, 0xd4, 0x27, 0x57, 0x60, 0x44, 0x4e, 0x5f, 0x2a, 0x79, 0xfa, 0x64, - 0xb9, 0xb1, 0x05, 0x24, 0x46, 0xef, 0xa1, 0xbb, 0x10, 0xf5, 0xa5, 0x3b, 0x9b, 0xbc, 0xac, 0x8b, - 0x21, 0x06, 0xaf, 0x5e, 0x8f, 0x69, 0xfe, 0xab, 0x8c, 0xd4, 0xf8, 0xe3, 0x49, 0x98, 0x49, 0x90, - 0xb9, 0xc7, 0xe8, 0x44, 0x0b, 0xba, 0x80, 0x18, 0x0d, 0x62, 0xa1, 0xa5, 0x58, 0x78, 0x57, 0xbe, - 0x4a, 0xdc, 0x47, 0x1c, 0xf4, 0x7b, 0xaa, 0xf8, 0xb3, 0xd0, 0x8b, 0xd4, 0x74, 0x05, 0x43, 0x4f, - 0x2c, 0x5d, 0xc1, 0x12, 0x4c, 0x88, 0x5e, 0x09, 0x71, 0x35, 0x1c, 0x5a, 0x73, 0x5d, 0x5e, 0x50, - 0x8b, 0x89, 0x2d, 0x9d, 0x84, 0xf3, 0xf0, 0x9c, 0xe6, 0x03, 0x2a, 0x78, 0x8c, 0xa8, 0x3c, 0xb0, - 0x20, 0x91, 0x87, 0x42, 0x42, 0xfe, 0x1d, 0x7c, 0x8c, 0x02, 0x21, 0xaa, 0xcc, 0xca, 0xf5, 0x93, - 0x59, 0x8d, 0x27, 0x23, 0xb3, 0xce, 0xcb, 0x36, 0x26, 0xcb, 0xae, 0x84, 0x66, 0x91, 0x5f, 0x4c, - 0xc1, 0x34, 0x8f, 0x99, 0x57, 0x1b, 0xdb, 0x37, 0x0e, 0xba, 0xfe, 0x64, 0x1a, 0x7b, 0xce, 0xc3, - 0x6a, 0x7b, 0xb4, 0x35, 0xde, 0x28, 0xf2, 0x7d, 0x00, 0xc1, 0x17, 0xe5, 0xcd, 0x01, 0x7e, 0x6a, - 0xe7, 0x12, 0xa4, 0x40, 0x80, 0x14, 0xe6, 0xd2, 0xf5, 0x03, 0x3a, 0xed, 0x09, 0x92, 0x00, 0x4a, - 0x7e, 0x00, 0x66, 0xd9, 0xf7, 0x12, 0x40, 0x44, 0x86, 0x8f, 0xb9, 0x31, 0xac, 0xe5, 0x8b, 0xbd, - 0x75, 0xa2, 0xab, 0x49, 0x64, 0x3c, 0xf3, 0x5f, 0xf8, 0xf4, 0x9a, 0xaf, 0x06, 0x03, 0x27, 0x56, - 0x84, 0x29, 0x73, 0xb0, 0xf5, 0x3c, 0xdf, 0x6d, 0x0f, 0xf9, 0x76, 0x56, 0x7e, 0x0b, 0x5c, 0xbe, - 0x79, 0x7a, 0x30, 0x1b, 0x82, 0xc8, 0x07, 0x40, 0x82, 0x60, 0x73, 0x0e, 0xa3, 0x32, 0x17, 0x2e, - 0x37, 0xed, 0x86, 0x41, 0xeb, 0xae, 0x2c, 0x56, 0x17, 0x49, 0x9c, 0x98, 0x50, 0x98, 0x15, 0x9d, - 0x66, 0x50, 0xf9, 0xd8, 0x85, 0x37, 0x37, 0xa9, 0xe5, 0x4f, 0x09, 0x4b, 0xc2, 0x37, 0xda, 0x94, - 0x17, 0x33, 0x34, 0x93, 0x53, 0x12, 0x3b, 0x72, 0x13, 0x46, 0x31, 0xa2, 0x6c, 0x45, 0x3a, 0x41, - 0x09, 0x87, 0x0c, 0x8c, 0x3d, 0xab, 0xed, 0xe9, 0xae, 0x4c, 0x21, 0x2a, 0x3b, 0x0e, 0x94, 0xdc, - 0x43, 0xb3, 0xdb, 0x46, 0x03, 0xac, 0xb0, 0x77, 0x34, 0xdc, 0xc3, 0x9a, 0xdb, 0xd5, 0x43, 0x0e, - 0x11, 0x89, 0x7c, 0x03, 0xc6, 0xee, 0x59, 0x0f, 0xa5, 0xfd, 0x55, 0x18, 0x59, 0x07, 0x7a, 0x5d, - 0xbc, 0x65, 0x3d, 0xac, 0x35, 0xba, 0xd1, 0xbc, 0x83, 0xfc, 0x75, 0x71, 0x85, 0x25, 0xf9, 0x1a, - 0x80, 0x62, 0x15, 0x26, 0xc7, 0x56, 0xf0, 0xbc, 0xcc, 0x08, 0x94, 0x68, 0x2d, 0x46, 0xfe, 0x0a, - 0xc3, 0x88, 0xe6, 0x30, 0xfb, 0xd9, 0x69, 0x0e, 0xa7, 0x3e, 0x3b, 0xcd, 0x61, 0x7e, 0x1b, 0xce, - 0xf6, 0xfc, 0x74, 0x12, 0xd2, 0x34, 0x5e, 0xd3, 0xd3, 0x34, 0x9e, 0xed, 0xb5, 0xc5, 0x7a, 0x7a, - 0xfa, 0xe4, 0x99, 0xfc, 0x6c, 0x6f, 0xed, 0xe4, 0x7b, 0xe9, 0xc8, 0x96, 0x2b, 0x0e, 0x16, 0x3c, - 0xdd, 0x7e, 0x2f, 0x9d, 0x24, 0x8d, 0xef, 0x7f, 0xf1, 0x4d, 0x39, 0x1d, 0x1e, 0x68, 0x22, 0xcf, - 0x9c, 0xf2, 0xed, 0xf9, 0x71, 0x77, 0xdf, 0xb7, 0x61, 0x92, 0xbf, 0xfc, 0x73, 0x97, 0x1e, 0x1e, - 0x38, 0x6e, 0x43, 0xbe, 0x65, 0x89, 0x3a, 0x78, 0xec, 0x8d, 0xbc, 0x08, 0x2e, 0x29, 0xc9, 0x20, - 0xa5, 0x21, 0xac, 0xfd, 0x6c, 0xa2, 0x14, 0x63, 0x08, 0xfd, 0xe2, 0x97, 0xc8, 0xeb, 0x81, 0xa2, - 0x46, 0x5d, 0x35, 0x89, 0xb2, 0x2b, 0x81, 0x09, 0xfa, 0x1a, 0x75, 0x8d, 0xdf, 0xcf, 0x00, 0xe1, - 0x35, 0x15, 0xad, 0x8e, 0x85, 0x21, 0x7c, 0x36, 0xa6, 0xa2, 0xc8, 0x0b, 0x1c, 0x6b, 0xbb, 0x49, - 0xd5, 0x3c, 0x2e, 0xc2, 0xe9, 0x34, 0x28, 0xab, 0x45, 0x0f, 0x3a, 0x31, 0xc2, 0x1e, 0xa2, 0x2e, - 0xfd, 0x38, 0xa2, 0xee, 0x1b, 0xf0, 0x6c, 0xa1, 0x83, 0x4f, 0x88, 0xc9, 0x5a, 0x6e, 0x39, 0xae, - 0x14, 0x52, 0x5a, 0x70, 0x88, 0x15, 0xa0, 0xc5, 0x5a, 0xda, 0x8f, 0x85, 0xa2, 0xa7, 0xb0, 0x75, - 0xd9, 0xf1, 0xd5, 0x60, 0x63, 0xa9, 0xa7, 0x74, 0xb0, 0x24, 0x41, 0x4f, 0xe1, 0x24, 0x92, 0x87, - 0xed, 0x4a, 0x3d, 0x05, 0x9f, 0x0d, 0x08, 0x79, 0xd8, 0x2e, 0xed, 0xa1, 0xeb, 0x04, 0x24, 0xe4, - 0x6d, 0x18, 0x2b, 0x74, 0x7d, 0x47, 0x30, 0x16, 0xde, 0xd2, 0xa1, 0x5f, 0xb3, 0x68, 0x8a, 0x76, - 0xf4, 0x09, 0xd1, 0x8d, 0x3f, 0xca, 0xc0, 0xd9, 0xf8, 0xf4, 0x8a, 0xd2, 0xe0, 0xfb, 0x48, 0x1d, - 0xf3, 0x7d, 0x24, 0xad, 0x06, 0x7e, 0x59, 0xf0, 0xc4, 0x56, 0x03, 0x7f, 0x89, 0xec, 0x53, 0xae, - 0x86, 0x2a, 0x8c, 0xa9, 0xfb, 0x5d, 0xf6, 0xd3, 0xee, 0x77, 0x2a, 0x17, 0x76, 0xa8, 0xe7, 0x31, - 0xd6, 0x43, 0xe1, 0xd5, 0x51, 0x34, 0xbc, 0x9a, 0x63, 0x90, 0xff, 0x1f, 0x5c, 0xe0, 0x32, 0x29, - 0xda, 0xd9, 0xa5, 0x43, 0xc9, 0x51, 0x4c, 0xdc, 0xe2, 0xa3, 0xa3, 0x85, 0xab, 0xdc, 0x54, 0x52, - 0x8b, 0x0d, 0x5b, 0x6d, 0xfb, 0xb0, 0x26, 0x5b, 0xa6, 0x54, 0x72, 0x2c, 0x6f, 0x7c, 0x7e, 0x4c, - 0x79, 0xdd, 0xea, 0xb5, 0xa4, 0x30, 0x12, 0x9e, 0x89, 0x94, 0x83, 0xf5, 0x08, 0x12, 0x69, 0x0e, - 0x4b, 0x27, 0x9a, 0xc3, 0xa4, 0x3d, 0x25, 0x93, 0x68, 0x4f, 0x29, 0xc1, 0x54, 0xb5, 0xbb, 0x2d, - 0xeb, 0x46, 0xc4, 0xac, 0x16, 0x09, 0x97, 0xd4, 0xa1, 0x28, 0x89, 0xf1, 0xa3, 0x69, 0x18, 0xaf, - 0x34, 0xbb, 0xbb, 0x76, 0xbb, 0x64, 0xf9, 0xd6, 0x53, 0x6b, 0xa1, 0x7b, 0x43, 0xb3, 0xd0, 0x05, - 0xd1, 0x52, 0x41, 0xc7, 0x06, 0x32, 0xcf, 0x7d, 0x27, 0x05, 0x53, 0x21, 0x09, 0xdf, 0x67, 0x57, - 0x20, 0xcb, 0x7e, 0x88, 0x73, 0xeb, 0x85, 0x18, 0x63, 0xfe, 0x54, 0x4b, 0xf0, 0x97, 0xb0, 0x99, - 0xe9, 0xef, 0x20, 0x20, 0x87, 0xf9, 0x2f, 0xf1, 0x37, 0xff, 0x4f, 0xfe, 0x44, 0xcb, 0xaf, 0xa6, - 0x20, 0x1f, 0xed, 0x09, 0xb9, 0x0b, 0x23, 0x8c, 0x93, 0x4d, 0xe5, 0x91, 0xfa, 0x85, 0x1e, 0x7d, - 0xbe, 0x2a, 0xd0, 0x78, 0xf3, 0x70, 0xf0, 0x29, 0x87, 0x98, 0x92, 0xc3, 0xbc, 0x09, 0xe3, 0x2a, - 0x56, 0x42, 0xeb, 0x5e, 0xd5, 0x95, 0x8b, 0xd3, 0xc9, 0xe3, 0xa0, 0x3d, 0x2c, 0xa3, 0xb5, 0x5a, - 0xe8, 0x0d, 0x97, 0xb4, 0xc5, 0x85, 0x63, 0x15, 0x59, 0x37, 0x7c, 0x99, 0x2d, 0x86, 0xc9, 0x91, - 0xd5, 0x75, 0x96, 0xb0, 0xa0, 0x03, 0x3c, 0xf2, 0x2a, 0x0c, 0xf3, 0xfa, 0xd4, 0x07, 0x16, 0x3a, - 0x08, 0x51, 0x55, 0x5c, 0x8e, 0x63, 0xfc, 0xad, 0x0c, 0x9c, 0x0e, 0x9b, 0xb7, 0xd9, 0x69, 0x58, - 0x3e, 0xad, 0x58, 0xae, 0xd5, 0xf2, 0x8e, 0xf9, 0x02, 0x2e, 0xc7, 0x9a, 0x86, 0x09, 0xf7, 0x65, - 0xd3, 0x94, 0x06, 0x19, 0x91, 0x06, 0xa1, 0xf9, 0x92, 0x37, 0x48, 0x36, 0x83, 0xdc, 0x85, 0x4c, - 0x95, 0xfa, 0x42, 0x6c, 0x5e, 0x8a, 0x8d, 0xaa, 0xda, 0xae, 0xab, 0x55, 0xea, 0xf3, 0x49, 0xe4, - 0xb9, 0x3f, 0xa8, 0x96, 0x7b, 0xb1, 0x4a, 0x7d, 0xb2, 0x05, 0xc3, 0xcb, 0x0f, 0x3b, 0xb4, 0xee, - 0x8b, 0x07, 0x86, 0xae, 0xf4, 0xe7, 0xc7, 0x71, 0x95, 0xf7, 0x85, 0x28, 0x02, 0xd4, 0xc1, 0xe2, - 0x28, 0xf3, 0x37, 0x21, 0x27, 0x2b, 0x3f, 0xc9, 0xca, 0x9d, 0x7f, 0x03, 0xc6, 0x94, 0x4a, 0x4e, - 0xb4, 0xe8, 0x7f, 0x8e, 0xc9, 0x55, 0xa7, 0x29, 0xdf, 0x24, 0x5a, 0x8e, 0xa9, 0x79, 0xa9, 0x30, - 0x66, 0x97, 0xab, 0x79, 0xb5, 0x7d, 0x51, 0xd4, 0x47, 0xdf, 0x2b, 0xc3, 0x54, 0x75, 0xdf, 0xee, - 0x84, 0x29, 0xf0, 0xb4, 0xcd, 0x14, 0xb3, 0xc5, 0x8b, 0x33, 0x77, 0x74, 0x33, 0x8d, 0xd2, 0x19, - 0x7f, 0x9a, 0x82, 0x61, 0xf6, 0xd7, 0xfd, 0x9b, 0x4f, 0xa9, 0xc8, 0xbc, 0xa1, 0x89, 0xcc, 0x69, - 0x25, 0xff, 0x2c, 0x0a, 0x8e, 0x9b, 0xc7, 0x08, 0xcb, 0x23, 0x31, 0x41, 0x1c, 0x99, 0xdc, 0x86, - 0x11, 0xe1, 0x79, 0x23, 0x5c, 0xa4, 0xd5, 0x84, 0xb6, 0xd2, 0x27, 0x27, 0x38, 0x9c, 0x3b, 0x9d, - 0xa8, 0x35, 0x43, 0x52, 0x33, 0x95, 0x5c, 0x26, 0x23, 0xd4, 0x5e, 0xb2, 0x73, 0x30, 0xfe, 0x8c, - 0x27, 0x64, 0x55, 0xde, 0x88, 0xec, 0x11, 0xd8, 0x5f, 0x10, 0x17, 0x19, 0x99, 0x7e, 0x4c, 0x4e, - 0xcb, 0x87, 0xbe, 0x12, 0xef, 0x38, 0xfe, 0x60, 0x86, 0xa7, 0x32, 0x95, 0x0d, 0x7b, 0x07, 0xc6, - 0x6f, 0x39, 0xee, 0x81, 0xe5, 0xf2, 0x04, 0x75, 0xc2, 0x73, 0x80, 0x1d, 0x1d, 0x27, 0x76, 0x38, - 0x9c, 0xa7, 0xb8, 0xfb, 0xe4, 0x68, 0x21, 0xbb, 0xe4, 0x38, 0x4d, 0x53, 0x43, 0x27, 0xeb, 0x30, - 0x71, 0xcf, 0x7a, 0xa8, 0x1c, 0x7a, 0x79, 0x40, 0xc9, 0x15, 0xb6, 0x80, 0xd9, 0xa9, 0xf9, 0x78, - 0x37, 0x28, 0x9d, 0x9e, 0xd8, 0x30, 0x59, 0x71, 0x5c, 0x5f, 0x54, 0x62, 0xb7, 0x77, 0x45, 0x67, - 0xe3, 0x8e, 0x5c, 0xd7, 0x12, 0x1d, 0xb9, 0xce, 0x76, 0x1c, 0xd7, 0xaf, 0xed, 0x04, 0xe4, 0x5a, - 0xd2, 0x1c, 0x8d, 0x31, 0x79, 0x07, 0xa6, 0x95, 0xa4, 0x60, 0xb7, 0x1c, 0xb7, 0x65, 0x49, 0xa5, - 0x1c, 0xed, 0xc0, 0xe8, 0x6f, 0xb2, 0x83, 0x60, 0x33, 0x8e, 0x49, 0x3e, 0x4a, 0x0a, 0xd1, 0x19, - 0x0a, 0x3d, 0xc1, 0x12, 0x42, 0x74, 0x7a, 0x79, 0x82, 0xc5, 0x83, 0x75, 0x76, 0xfb, 0x79, 0x8a, - 0xe6, 0x96, 0xae, 0x8b, 0xe3, 0xf7, 0xf1, 0x9e, 0xa0, 0xc1, 0xbc, 0xf5, 0xf0, 0x08, 0x5d, 0x84, - 0xcc, 0x52, 0xe5, 0x16, 0xde, 0x5e, 0x48, 0x47, 0x9b, 0xf6, 0x9e, 0xd5, 0xae, 0xa3, 0xb2, 0x2c, - 0xbc, 0xb3, 0x55, 0x89, 0xbc, 0x54, 0xb9, 0x45, 0x2c, 0x98, 0xa9, 0x50, 0xb7, 0x65, 0xfb, 0x5f, - 0xb9, 0x7e, 0x5d, 0x99, 0xa8, 0x1c, 0x36, 0xed, 0x9a, 0x68, 0xda, 0x42, 0x07, 0x51, 0x6a, 0x0f, - 0xaf, 0x5f, 0x4f, 0x9c, 0x8e, 0xa0, 0x61, 0x49, 0xbc, 0x98, 0x64, 0xbc, 0x67, 0x3d, 0x0c, 0x9d, - 0xea, 0x3d, 0x11, 0xec, 0x78, 0x5e, 0x2e, 0xac, 0xd0, 0x21, 0x5f, 0x93, 0x8c, 0x3a, 0x11, 0x3b, - 0xeb, 0x84, 0xcb, 0xcb, 0x13, 0x61, 0x22, 0xf3, 0xd2, 0xa4, 0x23, 0x23, 0x62, 0x55, 0x85, 0x5d, - 0x41, 0x27, 0x9b, 0xc1, 0x89, 0x8d, 0x9f, 0x78, 0xc4, 0x33, 0x56, 0xd7, 0xd4, 0x13, 0x1b, 0x37, - 0xa4, 0x68, 0xdd, 0x9a, 0x0a, 0x8e, 0xf9, 0x3c, 0xca, 0xc0, 0xd4, 0xb9, 0xc4, 0x0f, 0x82, 0xe3, - 0x27, 0x3f, 0x08, 0x52, 0xc8, 0xae, 0x3a, 0xf5, 0x7d, 0x91, 0xe9, 0xe7, 0x03, 0xf6, 0xb9, 0x37, - 0x9d, 0xfa, 0xfe, 0x93, 0xf3, 0x80, 0x45, 0xf6, 0x64, 0x8d, 0x35, 0x95, 0xad, 0x02, 0x31, 0x26, - 0xc2, 0xab, 0x72, 0x36, 0x38, 0x09, 0x29, 0x65, 0x5c, 0xf1, 0xe1, 0x8b, 0x46, 0x0e, 0xad, 0xa9, - 0x93, 0x13, 0x0a, 0xf9, 0x12, 0xf5, 0xf6, 0x7d, 0xa7, 0x53, 0x6c, 0xda, 0x9d, 0x6d, 0xc7, 0x72, - 0x1b, 0x68, 0xbb, 0x4b, 0xfa, 0xbe, 0x5f, 0x4a, 0xfc, 0xbe, 0xa7, 0x1b, 0x9c, 0xbe, 0x56, 0x97, - 0x0c, 0xcc, 0x18, 0x4b, 0xf2, 0x11, 0x4c, 0xb2, 0xc5, 0xbd, 0xfc, 0xd0, 0xa7, 0x6d, 0x3e, 0xf3, - 0xd3, 0xa8, 0x3a, 0xcc, 0x2a, 0x89, 0xbf, 0x83, 0x42, 0xbe, 0xa6, 0xf0, 0x63, 0xa7, 0x01, 0x81, - 0x96, 0x25, 0x49, 0x63, 0x45, 0x1a, 0x30, 0x77, 0xcf, 0x7a, 0xa8, 0x3c, 0xbe, 0xa5, 0x2c, 0x52, - 0x82, 0x0b, 0x0c, 0x1f, 0x05, 0x67, 0x0b, 0x2c, 0x4c, 0xd0, 0xd9, 0x63, 0xbd, 0xf6, 0xe4, 0x44, - 0xbe, 0x1f, 0xce, 0x88, 0x6e, 0x95, 0xf0, 0x35, 0x0c, 0xc7, 0x3d, 0xac, 0xee, 0x59, 0x18, 0x4f, - 0x33, 0x73, 0x32, 0x81, 0x28, 0x07, 0xac, 0x21, 0xf9, 0xd4, 0x3c, 0xce, 0xc8, 0xec, 0x55, 0x03, - 0xf9, 0x18, 0x26, 0xf9, 0x95, 0xcd, 0x8a, 0xe3, 0xf9, 0x78, 0xa0, 0x9f, 0x3d, 0x99, 0x9b, 0x38, - 0xbf, 0x07, 0xe2, 0x81, 0x15, 0x11, 0x03, 0x40, 0x84, 0x33, 0x79, 0x0b, 0xc6, 0x2a, 0x76, 0x9b, - 0xe7, 0x31, 0x2b, 0x57, 0xd0, 0xf4, 0x28, 0xf6, 0x9f, 0x8e, 0xdd, 0xae, 0xc9, 0x53, 0x75, 0x27, - 0x10, 0x17, 0x2a, 0x36, 0xd9, 0x82, 0xb1, 0x6a, 0x75, 0xe5, 0x96, 0xcd, 0x36, 0xc0, 0xce, 0xe1, - 0xdc, 0xe9, 0x1e, 0xad, 0xbc, 0x98, 0xd8, 0xca, 0x09, 0xcf, 0xdb, 0xc3, 0x87, 0x87, 0x6b, 0x75, - 0xa7, 0x73, 0x68, 0xaa, 0x9c, 0x12, 0x5c, 0xa7, 0xcf, 0x3c, 0x61, 0xd7, 0xe9, 0x32, 0x4c, 0x29, - 0x0e, 0x96, 0xe8, 0x5c, 0x39, 0x17, 0xa6, 0xed, 0x52, 0x5d, 0xa5, 0xa3, 0x61, 0x7d, 0x51, 0x3a, - 0xe9, 0x33, 0x7d, 0xf6, 0xa4, 0x3e, 0xd3, 0x36, 0x4c, 0xf3, 0xc9, 0x10, 0xeb, 0x00, 0x67, 0x7a, - 0xbe, 0xc7, 0x18, 0x5e, 0x49, 0x1c, 0xc3, 0x19, 0x31, 0xd3, 0x72, 0x91, 0xe1, 0x15, 0x65, 0x9c, - 0x2b, 0xd9, 0x01, 0x22, 0x80, 0xe2, 0xd9, 0x63, 0xac, 0xeb, 0xd9, 0x1e, 0x75, 0xbd, 0x90, 0x58, - 0xd7, 0xa4, 0xac, 0x6b, 0x9b, 0x57, 0x93, 0xc0, 0x91, 0xb4, 0x65, 0x3d, 0x72, 0x7d, 0xe1, 0xc0, - 0x9e, 0xd3, 0xec, 0xa0, 0x71, 0x04, 0x9e, 0x44, 0x34, 0xba, 0x68, 0xa3, 0xe3, 0x9e, 0xc0, 0x99, - 0x3c, 0x84, 0xd3, 0xf1, 0x56, 0x60, 0x9d, 0xe7, 0xb1, 0xce, 0xf3, 0x5a, 0x9d, 0x51, 0x24, 0xbe, - 0x6e, 0xf4, 0x6e, 0x45, 0x6b, 0xed, 0xc1, 0xff, 0x4e, 0x36, 0x37, 0x91, 0x9f, 0x4c, 0xf2, 0xb4, - 0xfe, 0x27, 0xe9, 0x88, 0xd0, 0x26, 0x65, 0x18, 0x11, 0x73, 0x21, 0xb4, 0xd8, 0xf8, 0x88, 0x9f, - 0x4f, 0x1c, 0xf1, 0x11, 0x31, 0xad, 0xa6, 0xa4, 0x27, 0x07, 0x8c, 0x15, 0xba, 0xad, 0x0b, 0xb5, - 0xff, 0x6b, 0x5c, 0x26, 0x23, 0x48, 0xdb, 0x7d, 0x4a, 0x27, 0x0f, 0xda, 0xd1, 0x63, 0xc2, 0x70, - 0x1b, 0x92, 0xb5, 0x91, 0x7d, 0xfe, 0x52, 0x40, 0x26, 0x88, 0xfc, 0xd0, 0x9f, 0x05, 0x78, 0x62, - 0x15, 0xb2, 0x5a, 0x8c, 0xdf, 0x48, 0xc1, 0x84, 0x26, 0xf5, 0xc9, 0x4d, 0x25, 0xac, 0x29, 0x8c, - 0xca, 0xd5, 0x70, 0x50, 0x10, 0x44, 0x03, 0x9e, 0x6e, 0x0a, 0xbf, 0xe9, 0x74, 0x6f, 0xba, 0xc4, - 0xd7, 0xbf, 0xfb, 0x1b, 0xc9, 0x82, 0x97, 0x87, 0xb2, 0x3d, 0x5e, 0x1e, 0xfa, 0xb5, 0x67, 0x61, - 0x52, 0x3f, 0x16, 0x90, 0x57, 0x61, 0x18, 0x6d, 0x8b, 0xf2, 0x8c, 0xc9, 0xdf, 0xde, 0x45, 0x88, - 0xf6, 0xf6, 0x2e, 0x42, 0xc8, 0x8b, 0x00, 0x81, 0x03, 0xab, 0xb4, 0xac, 0x0f, 0x3d, 0x3a, 0x5a, - 0x48, 0xbd, 0x66, 0x2a, 0x05, 0xe4, 0xeb, 0x00, 0x6b, 0x4e, 0x83, 0x06, 0xaf, 0xa3, 0xf5, 0xb9, - 0x3d, 0x7e, 0x29, 0x96, 0x45, 0xfb, 0x54, 0xdb, 0x69, 0xd0, 0x78, 0xca, 0x6c, 0x85, 0x23, 0x79, - 0x13, 0x86, 0xcc, 0x2e, 0x3b, 0xcf, 0x72, 0x53, 0xc2, 0x98, 0x94, 0xbe, 0xdd, 0x26, 0x55, 0x1e, - 0xd4, 0xef, 0x46, 0x1d, 0xa3, 0x18, 0x80, 0xbc, 0xc7, 0xb3, 0x6b, 0x8b, 0x64, 0x58, 0x43, 0xe1, - 0x5d, 0x83, 0xb2, 0x2b, 0xc7, 0xd2, 0x61, 0x29, 0x24, 0x64, 0x1d, 0x46, 0x54, 0x23, 0xb9, 0x12, - 0x1f, 0xab, 0x5e, 0xa4, 0x28, 0x27, 0x2f, 0xf1, 0xac, 0x5a, 0xd4, 0x7e, 0x2e, 0xb9, 0x90, 0xb7, - 0x61, 0x94, 0xb1, 0x67, 0x9f, 0xb0, 0x27, 0x34, 0x6e, 0xbc, 0x51, 0x50, 0x1a, 0xc4, 0x24, 0x80, - 0x96, 0xb2, 0x2a, 0x20, 0x20, 0x1f, 0xe1, 0xcb, 0x61, 0x62, 0xa8, 0xfb, 0x7a, 0x15, 0x5c, 0x8a, - 0x0d, 0x35, 0x3e, 0x25, 0x16, 0x7f, 0x54, 0x36, 0xe0, 0x47, 0x76, 0x83, 0x54, 0x4a, 0x83, 0x64, - 0x44, 0x7f, 0x39, 0x56, 0xc1, 0x9c, 0xcc, 0x0e, 0x14, 0x7f, 0xe5, 0x4e, 0xe3, 0x4b, 0x3a, 0x90, - 0x0f, 0x15, 0x1e, 0x51, 0x17, 0xf4, 0xab, 0xeb, 0xb5, 0x58, 0x5d, 0xea, 0x04, 0xc6, 0xaa, 0x8b, - 0x71, 0x27, 0x0d, 0x98, 0x94, 0xc2, 0x53, 0xd4, 0x37, 0xd6, 0xaf, 0xbe, 0x17, 0x63, 0xf5, 0xcd, - 0x34, 0xb6, 0xe3, 0xf5, 0x44, 0x78, 0x92, 0xb7, 0x61, 0x42, 0x42, 0xf0, 0xfb, 0x10, 0xaf, 0xd7, - 0xa2, 0x55, 0xa4, 0xb1, 0x8d, 0x2e, 0xf3, 0xfa, 0xdb, 0x7f, 0x2a, 0xb2, 0x4a, 0xcd, 0x57, 0xc7, - 0x84, 0x46, 0x1d, 0x5d, 0x15, 0x3a, 0x32, 0xf9, 0x10, 0xc6, 0xca, 0x2d, 0xd6, 0x11, 0xa7, 0x6d, - 0xf9, 0x54, 0xc4, 0x4e, 0x49, 0x0f, 0x09, 0xa5, 0x44, 0x59, 0xaa, 0xfc, 0x35, 0xbd, 0xb0, 0x48, - 0x7b, 0x4d, 0x2f, 0x04, 0xb3, 0xc1, 0xe3, 0xb7, 0x22, 0x62, 0x0d, 0xcb, 0xb8, 0xaa, 0xf3, 0x09, - 0x5e, 0x0a, 0x0a, 0x7b, 0x91, 0x74, 0x8e, 0x41, 0xe5, 0xad, 0x44, 0x24, 0xe9, 0x9c, 0xca, 0x93, - 0xbc, 0x03, 0x63, 0xe2, 0xb1, 0x88, 0x82, 0xb9, 0xe6, 0xcd, 0xe5, 0xb1, 0xf3, 0x18, 0x0d, 0x2e, - 0xdf, 0x95, 0xa8, 0x59, 0x6e, 0xc4, 0x1d, 0x2f, 0xc4, 0x27, 0x5f, 0x81, 0xd9, 0x2d, 0xbb, 0xdd, - 0x70, 0x0e, 0x3c, 0xb1, 0x4d, 0x09, 0x41, 0x37, 0x1d, 0x06, 0xc3, 0x1c, 0xf0, 0xf2, 0x40, 0x4f, - 0x89, 0x09, 0xbe, 0x44, 0x0e, 0xe4, 0x2f, 0xc6, 0x38, 0xf3, 0x15, 0x44, 0xfa, 0xad, 0xa0, 0xc5, - 0xd8, 0x0a, 0x8a, 0x57, 0x1f, 0x5d, 0x4e, 0x89, 0xd5, 0x10, 0x07, 0x88, 0xbe, 0xbf, 0xdf, 0x71, - 0xec, 0xf6, 0xdc, 0x0c, 0xca, 0xc2, 0x67, 0xa3, 0xf1, 0xd7, 0x88, 0x57, 0x71, 0x9a, 0x76, 0xfd, - 0x90, 0xbf, 0x5c, 0x1f, 0xd5, 0x47, 0x3f, 0x76, 0x34, 0x9b, 0x71, 0x02, 0x6b, 0xf2, 0x21, 0x8c, - 0xb3, 0xff, 0x83, 0x03, 0xf3, 0xac, 0xe6, 0xd7, 0xa6, 0x60, 0x8a, 0x7a, 0x70, 0x8e, 0xf0, 0x35, - 0x8b, 0x84, 0xb3, 0xb4, 0xc6, 0x8a, 0xbc, 0x01, 0xc0, 0x34, 0x27, 0x21, 0x8e, 0x4f, 0x85, 0x39, - 0xfe, 0x50, 0xdf, 0x8a, 0x0b, 0xe2, 0x10, 0x99, 0x9d, 0xe2, 0xd9, 0xaf, 0x6a, 0xb7, 0xe1, 0xb0, - 0x6f, 0xe3, 0x34, 0xd2, 0xf2, 0x90, 0x34, 0x46, 0xeb, 0x71, 0xb8, 0x16, 0x92, 0x16, 0xa2, 0x93, - 0x15, 0x98, 0xc2, 0x5c, 0x8c, 0xe5, 0x06, 0x6d, 0xfb, 0x78, 0x5b, 0x39, 0x77, 0x46, 0xb9, 0xcd, - 0x65, 0x45, 0x35, 0x3b, 0x28, 0x53, 0xf5, 0xec, 0x08, 0x19, 0xf1, 0x60, 0x26, 0x94, 0x2e, 0xe1, - 0xdd, 0xf0, 0x1c, 0x0e, 0x92, 0xd4, 0x2e, 0xe3, 0x18, 0x5c, 0x1e, 0xb3, 0x19, 0x51, 0x04, 0x97, - 0xb4, 0xac, 0xab, 0x15, 0x26, 0x71, 0x27, 0x26, 0x90, 0xdb, 0xc5, 0x4a, 0x34, 0x59, 0xe1, 0x59, - 0xec, 0x01, 0x4e, 0xf3, 0x6e, 0x3d, 0x7c, 0xb7, 0x31, 0x21, 0x61, 0x61, 0x02, 0x35, 0xf9, 0x16, - 0x9c, 0x92, 0x12, 0x44, 0x14, 0x89, 0x75, 0x3d, 0x7f, 0x42, 0x49, 0xdc, 0xd8, 0x0e, 0xaa, 0x8e, - 0x2d, 0xe9, 0xe4, 0x2a, 0x88, 0x05, 0x63, 0x38, 0xad, 0xa2, 0xc6, 0x67, 0xfb, 0xd5, 0x78, 0x39, - 0x56, 0xe3, 0x69, 0x5c, 0x28, 0xf1, 0xca, 0x54, 0x9e, 0x64, 0x09, 0x26, 0xc4, 0x77, 0x24, 0x56, - 0xdb, 0x39, 0x1c, 0x2d, 0x34, 0xb0, 0xc8, 0x2f, 0x30, 0xb6, 0xe0, 0x74, 0x12, 0x55, 0x22, 0x73, - 0x8b, 0xfa, 0x79, 0x4d, 0x22, 0x47, 0x0d, 0xe9, 0x3a, 0x32, 0x93, 0x48, 0xa1, 0x16, 0xb3, 0xfc, - 0xb0, 0xe3, 0x0a, 0xf3, 0xc9, 0x73, 0x61, 0x0e, 0x7f, 0x45, 0xf9, 0xa9, 0xd1, 0x00, 0x43, 0x15, - 0x09, 0x49, 0x1c, 0xc8, 0x26, 0xcc, 0x04, 0xbb, 0xb6, 0xc2, 0x78, 0x21, 0x7c, 0x0b, 0x21, 0xdc, - 0xea, 0x93, 0xf9, 0x26, 0xd1, 0x13, 0x0b, 0xce, 0x68, 0xfb, 0xb4, 0xc2, 0xfa, 0x02, 0xb2, 0xc6, - 0x77, 0x42, 0xf5, 0x4d, 0x3e, 0x99, 0x7d, 0x2f, 0x3e, 0xe4, 0x63, 0x98, 0x8f, 0xee, 0xcd, 0x4a, - 0x2d, 0xcf, 0x63, 0x2d, 0x2f, 0x3f, 0x3a, 0x5a, 0xb8, 0x14, 0xdb, 0xde, 0x93, 0x2b, 0xea, 0xc3, - 0x8d, 0x7c, 0x1d, 0xe6, 0xf4, 0xfd, 0x59, 0xa9, 0xc9, 0xc0, 0x9a, 0xf0, 0xd3, 0x09, 0x36, 0xf6, - 0xe4, 0x1a, 0x7a, 0xf2, 0x20, 0x3e, 0x2c, 0x24, 0xae, 0x6e, 0xa5, 0x9a, 0x8b, 0x61, 0x87, 0x62, - 0x5f, 0x49, 0x72, 0x75, 0xc7, 0xb1, 0x24, 0x07, 0xf0, 0x5c, 0xd2, 0x36, 0xa1, 0x54, 0xfa, 0x42, - 0x60, 0xa0, 0x7c, 0x25, 0x79, 0xcb, 0x49, 0xae, 0xf9, 0x18, 0xb6, 0xe4, 0x23, 0x38, 0xa5, 0x7c, - 0x5f, 0x4a, 0x7d, 0x2f, 0x62, 0x7d, 0x18, 0xca, 0xaa, 0x7e, 0x98, 0xc9, 0xb5, 0x24, 0xf3, 0x20, - 0x2d, 0x98, 0x91, 0x1d, 0x47, 0x4b, 0xb0, 0xd8, 0x7a, 0x2e, 0x69, 0x52, 0x35, 0x8e, 0xa1, 0x3c, - 0xb0, 0xbc, 0x5d, 0xeb, 0x84, 0x84, 0xea, 0x4a, 0x4f, 0xe0, 0x4b, 0x56, 0x60, 0xb8, 0x5a, 0x29, - 0xdf, 0xba, 0xb5, 0x3c, 0xf7, 0x12, 0xd6, 0x20, 0xe3, 0x5e, 0x38, 0x50, 0x3b, 0x34, 0x09, 0x77, - 0xab, 0x8e, 0xbd, 0xb3, 0xa3, 0x85, 0x17, 0x71, 0xd4, 0x3b, 0xd9, 0xdc, 0xe5, 0xfc, 0x95, 0x3b, - 0xd9, 0xdc, 0x95, 0xfc, 0xcb, 0xe6, 0xb9, 0xe4, 0xb7, 0x71, 0x79, 0x67, 0xcd, 0x4b, 0xfd, 0x4a, - 0xc3, 0xa1, 0x30, 0x7e, 0x2e, 0x05, 0x33, 0x09, 0xed, 0x20, 0x97, 0x20, 0x8b, 0x8f, 0x0b, 0x28, - 0x17, 0xcc, 0x91, 0x47, 0x05, 0xb0, 0x9c, 0x7c, 0x01, 0x46, 0x4a, 0x6b, 0xd5, 0x6a, 0x61, 0x4d, - 0x1e, 0xd9, 0xb8, 0xb8, 0x6a, 0x7b, 0x35, 0xcf, 0xd2, 0xef, 0xa5, 0x04, 0x1a, 0x79, 0x0d, 0x86, - 0xcb, 0x15, 0x24, 0xe0, 0x1e, 0x4e, 0x78, 0x84, 0xb1, 0x3b, 0x51, 0x7c, 0x81, 0x64, 0xfc, 0x78, - 0x0a, 0x48, 0x7c, 0x50, 0xc9, 0x75, 0x18, 0x53, 0xa7, 0x8e, 0x1f, 0x30, 0xf1, 0x0e, 0x45, 0x99, - 0x18, 0x53, 0xc5, 0x21, 0x25, 0x18, 0xc2, 0xc7, 0x90, 0x82, 0x0b, 0xb1, 0xc4, 0x0d, 0xe0, 0x4c, - 0x6c, 0x03, 0x18, 0xc2, 0xa7, 0x96, 0x4c, 0x4e, 0x6c, 0xfc, 0x76, 0x0a, 0x48, 0x7c, 0xd3, 0x1c, - 0xf8, 0x42, 0xfe, 0x75, 0x25, 0x42, 0x55, 0x4d, 0x1f, 0x1e, 0xbc, 0xfd, 0xa0, 0x1e, 0x96, 0xc2, - 0x58, 0xd6, 0x4b, 0xda, 0xe1, 0xbc, 0x77, 0x58, 0xd3, 0x15, 0x18, 0xba, 0x4f, 0xdd, 0x6d, 0xe9, - 0xbc, 0x87, 0x0e, 0x3f, 0x0f, 0x18, 0x40, 0x3d, 0xac, 0x22, 0x86, 0xf1, 0x47, 0x29, 0x98, 0x4d, - 0xd2, 0xe4, 0x8e, 0x89, 0x3e, 0x32, 0x22, 0x81, 0x53, 0x78, 0x19, 0xcf, 0xbd, 0x81, 0x82, 0x70, - 0xa9, 0x05, 0x18, 0x62, 0x9d, 0x95, 0x33, 0x8c, 0xc6, 0x02, 0x36, 0x1a, 0x9e, 0xc9, 0xe1, 0x0c, - 0x81, 0x67, 0x3d, 0xca, 0x62, 0x72, 0x2b, 0x44, 0x40, 0x45, 0xc1, 0xe4, 0x70, 0x86, 0x70, 0xcf, - 0x69, 0x04, 0x2f, 0x80, 0x22, 0x42, 0x8b, 0x01, 0x4c, 0x0e, 0x27, 0x97, 0x60, 0x64, 0xbd, 0xbd, - 0x4a, 0xad, 0x07, 0xf2, 0xf9, 0x0a, 0x74, 0x1e, 0x70, 0xda, 0xb5, 0x26, 0x83, 0x99, 0xb2, 0xd0, - 0xf8, 0x4e, 0x0a, 0xa6, 0x63, 0x4a, 0xe4, 0xf1, 0x01, 0x56, 0xfd, 0x23, 0x1d, 0x06, 0xe9, 0x1f, - 0x6f, 0x7e, 0x36, 0xb9, 0xf9, 0xc6, 0xff, 0x96, 0x85, 0x33, 0x3d, 0xce, 0xf4, 0x61, 0x24, 0x56, - 0xea, 0xd8, 0x48, 0xac, 0xaf, 0xb2, 0x33, 0xb4, 0x65, 0xb7, 0xbc, 0x0d, 0x27, 0x6c, 0x71, 0xe8, - 0xd0, 0x8d, 0x65, 0xf2, 0x11, 0x54, 0xe9, 0xf9, 0x7b, 0x96, 0x3f, 0x44, 0x5d, 0xf3, 0x9d, 0xb8, - 0x4a, 0xa1, 0x31, 0x8b, 0xc5, 0x42, 0x65, 0xfe, 0x9c, 0xc4, 0x42, 0xe9, 0xde, 0xf9, 0xd9, 0x27, - 0xea, 0x9d, 0x9f, 0xec, 0xd9, 0x37, 0xf4, 0x38, 0x7e, 0x9e, 0x45, 0x98, 0xe0, 0xde, 0x13, 0x05, - 0x8f, 0x4f, 0xd2, 0x70, 0xcc, 0xe3, 0xc2, 0xf2, 0xe2, 0x73, 0xa1, 0xd1, 0x90, 0x15, 0xdd, 0x93, - 0x7c, 0x04, 0x6f, 0x7d, 0x2e, 0xf5, 0xf6, 0x14, 0xd7, 0x6e, 0x7b, 0x55, 0x52, 0xe3, 0x3b, 0x69, - 0x3d, 0x50, 0xea, 0xcf, 0xe3, 0xca, 0xbb, 0x02, 0x43, 0x5b, 0x7b, 0xd4, 0x95, 0xf2, 0x0e, 0x1b, - 0x72, 0xc0, 0x00, 0x6a, 0x43, 0x10, 0x83, 0xdc, 0x82, 0xc9, 0x0a, 0x9f, 0x09, 0x39, 0xbc, 0xd9, - 0xf0, 0xa8, 0xd5, 0x11, 0x06, 0x81, 0x84, 0xf1, 0x8d, 0x50, 0x19, 0xb7, 0xe1, 0xbc, 0xf6, 0x41, - 0x8a, 0xc4, 0x0e, 0xdc, 0xa1, 0x9b, 0xef, 0x88, 0x93, 0xa1, 0x0b, 0x7b, 0x28, 0x3d, 0xcc, 0x08, - 0xd4, 0xd8, 0x81, 0xe7, 0xfa, 0x32, 0x62, 0x1b, 0x11, 0x74, 0x82, 0x5f, 0x11, 0xaf, 0xb3, 0xbe, - 0xa4, 0xa6, 0x42, 0x67, 0x7c, 0x3f, 0x8c, 0xab, 0xa3, 0x8c, 0x32, 0x95, 0xfd, 0x16, 0x42, 0x8d, - 0xcb, 0x54, 0x06, 0x30, 0x39, 0xfc, 0xd8, 0xc7, 0xe3, 0xc3, 0xe9, 0xcf, 0x1c, 0x37, 0xfd, 0xac, - 0x72, 0xfc, 0x64, 0x95, 0xca, 0xf1, 0xb7, 0x5a, 0x39, 0x66, 0x6e, 0x30, 0x39, 0xfc, 0x89, 0x56, - 0xfe, 0x5b, 0x32, 0x89, 0x3f, 0xfa, 0x8b, 0xcb, 0x33, 0x71, 0xf8, 0x44, 0xe7, 0x4c, 0xd2, 0x49, - 0x37, 0xc4, 0x0c, 0x37, 0xc9, 0xf4, 0x71, 0x9b, 0xe4, 0x49, 0x16, 0xe2, 0x35, 0x18, 0x29, 0x88, - 0x3b, 0xd9, 0x6c, 0xa8, 0xd8, 0x58, 0xb1, 0x0b, 0x58, 0x89, 0x65, 0x7c, 0x37, 0x05, 0xa7, 0x12, - 0x4d, 0x65, 0xac, 0x56, 0x6e, 0x93, 0x53, 0xbe, 0xc3, 0xa8, 0x41, 0x8e, 0x63, 0x9c, 0x24, 0x6c, - 0x77, 0xf0, 0xbe, 0x18, 0xcf, 0xc3, 0x68, 0x70, 0x51, 0x43, 0x66, 0xe5, 0xd4, 0xa1, 0xa3, 0x8e, - 0xb4, 0xf7, 0x57, 0x01, 0x58, 0x0b, 0x9e, 0xa8, 0x5b, 0x99, 0xf1, 0x5b, 0x69, 0xfe, 0xc0, 0xd3, - 0x53, 0x9b, 0xed, 0x2e, 0xd9, 0x17, 0x8c, 0x75, 0xa9, 0x77, 0x8e, 0x3b, 0xb2, 0x0c, 0xc3, 0x55, - 0xdf, 0xf2, 0xbb, 0x32, 0xda, 0x78, 0x46, 0x25, 0xc3, 0x82, 0xfb, 0x8b, 0x61, 0xbc, 0xa9, 0x87, - 0x10, 0xed, 0x70, 0x80, 0x10, 0xc5, 0xa5, 0xcc, 0x86, 0x71, 0x95, 0x96, 0x7c, 0x08, 0x93, 0x32, - 0x85, 0x17, 0x0f, 0xc1, 0x16, 0x97, 0x4a, 0xd2, 0x39, 0x41, 0xa6, 0xf0, 0x52, 0x43, 0xb6, 0x35, - 0x7c, 0x55, 0x52, 0x77, 0x54, 0x64, 0xe3, 0x8f, 0x87, 0xf9, 0x3a, 0x10, 0xb9, 0xf8, 0xb6, 0x61, - 0x72, 0xbd, 0x5c, 0x2a, 0x2a, 0x86, 0x2f, 0xfd, 0xd9, 0x85, 0xe5, 0x87, 0x3e, 0x75, 0xdb, 0x56, - 0x53, 0x20, 0x1c, 0x86, 0x7b, 0x83, 0x63, 0x37, 0xea, 0xc9, 0x46, 0xb1, 0x08, 0x47, 0x56, 0x07, - 0x3f, 0xdc, 0x04, 0x75, 0xa4, 0x07, 0xac, 0xc3, 0xb3, 0x5a, 0xcd, 0x1e, 0x75, 0xe8, 0x1c, 0xc9, - 0x1e, 0xe4, 0x6f, 0xa3, 0x1e, 0xa3, 0xd4, 0x92, 0xe9, 0x5f, 0xcb, 0x45, 0x51, 0xcb, 0xb3, 0x5c, - 0x01, 0x4a, 0xae, 0x27, 0xc6, 0x35, 0xfc, 0x80, 0xb3, 0xc7, 0x7e, 0xc0, 0x7f, 0x25, 0x05, 0xc3, - 0x5c, 0x51, 0x12, 0xeb, 0xab, 0x87, 0x2a, 0xb6, 0xf5, 0x64, 0x54, 0xb1, 0x3c, 0x0a, 0x70, 0x6d, - 0xa5, 0xf1, 0x32, 0x52, 0x8a, 0x2c, 0x58, 0xe9, 0xa2, 0x88, 0x26, 0x6c, 0x5e, 0x72, 0xfc, 0x7a, - 0x25, 0xe5, 0x30, 0x34, 0x77, 0xe4, 0xd8, 0xe8, 0x2f, 0x19, 0xce, 0x3c, 0x22, 0x42, 0x73, 0xf5, - 0x80, 0xdc, 0x55, 0x18, 0x15, 0x01, 0xbf, 0x4b, 0x87, 0xe2, 0xa2, 0x2a, 0xaf, 0x5d, 0x83, 0x37, - 0x96, 0x0e, 0x43, 0x25, 0x50, 0x84, 0x0c, 0xd7, 0xb6, 0x0f, 0xb5, 0x87, 0xac, 0x24, 0x22, 0x59, - 0xe7, 0x0f, 0xbc, 0xf0, 0x6c, 0x85, 0x7a, 0x2a, 0xe1, 0x00, 0x2e, 0x52, 0x89, 0xc8, 0xa8, 0xc1, - 0x84, 0xe4, 0x84, 0x21, 0x0f, 0xb2, 0x0a, 0x79, 0xf1, 0xf0, 0x3d, 0xf7, 0xa3, 0x28, 0x97, 0x78, - 0x50, 0xa9, 0x70, 0x7f, 0x93, 0xcf, 0xe6, 0x0b, 0x0f, 0x0c, 0x3d, 0x9e, 0x23, 0x46, 0x69, 0xfc, - 0x44, 0x0a, 0xf2, 0xd1, 0xd5, 0x47, 0xde, 0x86, 0xb1, 0x20, 0x5b, 0x64, 0x10, 0x51, 0x86, 0x06, - 0xeb, 0x30, 0xbd, 0xa4, 0x16, 0x5b, 0xa6, 0xa2, 0x93, 0x45, 0xc8, 0xb1, 0x8f, 0x38, 0xfa, 0x84, - 0x56, 0x57, 0xc0, 0x54, 0x37, 0x71, 0x89, 0xa7, 0x88, 0x9b, 0x3f, 0x48, 0xc3, 0x98, 0x32, 0xf5, - 0xe4, 0x0a, 0xe4, 0xca, 0xde, 0xaa, 0x53, 0xdf, 0x0f, 0xd2, 0x42, 0x4d, 0x3c, 0x3a, 0x5a, 0x18, - 0xb5, 0xbd, 0x5a, 0x13, 0x81, 0x66, 0x50, 0x4c, 0x96, 0x60, 0x82, 0xff, 0x25, 0x93, 0x63, 0xa7, - 0x43, 0xc7, 0x34, 0x8e, 0x2c, 0xd3, 0x62, 0xab, 0x22, 0x48, 0x23, 0x21, 0x5f, 0x03, 0xe0, 0x00, - 0x0c, 0x24, 0xcc, 0x0c, 0x1e, 0x02, 0x29, 0x2a, 0x48, 0x08, 0x21, 0x54, 0x18, 0x92, 0x6f, 0xf0, - 0x44, 0x90, 0x72, 0xa9, 0x66, 0x07, 0x8f, 0xe1, 0x64, 0xfc, 0x6b, 0xc9, 0xa1, 0xe4, 0x2a, 0x4b, - 0x91, 0xc1, 0x6e, 0xde, 0xa4, 0x75, 0xe7, 0x01, 0x75, 0x0f, 0x0b, 0x3e, 0x22, 0x2a, 0x18, 0xc6, - 0x3f, 0x4f, 0x29, 0x0b, 0x9c, 0xac, 0xe1, 0x03, 0x6d, 0x7c, 0xf2, 0x84, 0x7b, 0x45, 0xa0, 0x77, - 0x4b, 0xb8, 0x49, 0x77, 0x96, 0x9e, 0x15, 0x7e, 0x91, 0x33, 0xc1, 0x12, 0x88, 0x3c, 0xdc, 0xc6, - 0x81, 0xe4, 0x7d, 0xc8, 0xe2, 0xd0, 0x1d, 0xff, 0x9e, 0xbf, 0xdc, 0xfa, 0xb2, 0x6c, 0xcc, 0xb0, - 0x23, 0x48, 0x49, 0xbe, 0x20, 0x82, 0xb0, 0xf8, 0xe0, 0x4f, 0x2a, 0xfb, 0x17, 0x6b, 0x47, 0xb0, - 0xe7, 0x85, 0xd9, 0x04, 0x94, 0xd5, 0xf3, 0xd7, 0xd3, 0x90, 0x8f, 0x7e, 0x56, 0xe4, 0x3d, 0x18, - 0x97, 0x9b, 0x12, 0xbe, 0xe0, 0xcb, 0x7a, 0x39, 0x2e, 0xb2, 0x35, 0xcb, 0x9d, 0x29, 0xfa, 0x80, - 0xaf, 0x4a, 0xc0, 0x14, 0x84, 0x0d, 0x91, 0xdd, 0x47, 0x59, 0xd0, 0xbe, 0xe3, 0x77, 0x22, 0xb9, - 0x04, 0x25, 0x1a, 0x79, 0x1d, 0x32, 0xf7, 0x6e, 0x15, 0x84, 0xc7, 0xbf, 0x94, 0x1e, 0xf7, 0x6e, - 0x15, 0xf8, 0x87, 0xc7, 0x3d, 0x9a, 0x74, 0xff, 0x2a, 0x86, 0x4f, 0x56, 0x95, 0x54, 0x9d, 0xc3, - 0xda, 0x73, 0x3a, 0x12, 0x1c, 0x74, 0xee, 0xf8, 0x9c, 0x9d, 0xfc, 0x69, 0x60, 0x91, 0x10, 0xef, - 0xef, 0x65, 0x60, 0x34, 0xa8, 0x9f, 0x10, 0x40, 0xfd, 0x47, 0x1c, 0x3a, 0xf0, 0x6f, 0x72, 0x16, - 0x72, 0x52, 0xe5, 0x11, 0x8e, 0xff, 0x23, 0x9e, 0x50, 0x77, 0xe6, 0x40, 0xea, 0x36, 0x5c, 0xdd, - 0x31, 0xe5, 0x4f, 0x72, 0x1d, 0x02, 0xc5, 0xa5, 0x97, 0x86, 0x93, 0x65, 0x13, 0x66, 0x06, 0x68, - 0x64, 0x12, 0xd2, 0x36, 0x4f, 0xb2, 0x32, 0x6a, 0xa6, 0xed, 0x06, 0x79, 0x0f, 0x72, 0x56, 0xa3, - 0x41, 0x1b, 0x35, 0x4b, 0xfa, 0x29, 0xf4, 0x5b, 0x34, 0x39, 0xc6, 0x8d, 0xcb, 0x6b, 0xa4, 0x2a, - 0xf8, 0xa4, 0x00, 0xa3, 0x4d, 0x8b, 0xfb, 0x3c, 0x35, 0x06, 0x10, 0xfe, 0x21, 0x87, 0x1c, 0x23, - 0xdb, 0xf4, 0x68, 0x83, 0xbc, 0x04, 0x59, 0x36, 0x9b, 0x42, 0xda, 0x4b, 0x4d, 0x8b, 0x4d, 0x26, - 0x1f, 0xb0, 0x95, 0x67, 0x4c, 0x44, 0x20, 0x2f, 0x40, 0xa6, 0xbb, 0xb8, 0x23, 0xe4, 0x78, 0x3e, - 0x4c, 0x9b, 0x1b, 0xa0, 0xb1, 0x62, 0x72, 0x03, 0x72, 0x07, 0x7a, 0xc6, 0xd5, 0x53, 0x91, 0x69, - 0x0c, 0xf0, 0x03, 0xc4, 0xa5, 0x1c, 0x0c, 0x73, 0x99, 0x6d, 0x3c, 0x07, 0x10, 0x56, 0x1d, 0x8f, - 0xcf, 0x30, 0xbe, 0x06, 0xa3, 0x41, 0x95, 0xe4, 0x3c, 0xc0, 0x3e, 0x3d, 0xac, 0xed, 0x59, 0xed, - 0x46, 0x93, 0xab, 0x62, 0xe3, 0xe6, 0xe8, 0x3e, 0x3d, 0x5c, 0x41, 0x00, 0x39, 0x03, 0x23, 0x1d, - 0x36, 0xab, 0x62, 0xe9, 0x8e, 0x9b, 0xc3, 0x9d, 0xee, 0x36, 0x5b, 0xa1, 0x73, 0x30, 0x82, 0x46, - 0x32, 0xf1, 0xa1, 0x4d, 0x98, 0xf2, 0xa7, 0xf1, 0x1f, 0xa5, 0xf1, 0x65, 0x00, 0xa5, 0x9d, 0xe4, - 0x22, 0x4c, 0xd4, 0x5d, 0x8a, 0xdb, 0x83, 0xc5, 0x94, 0x1e, 0x51, 0xcf, 0x78, 0x08, 0x2c, 0x37, - 0xc8, 0x25, 0x98, 0x12, 0xaf, 0x61, 0xb3, 0x06, 0xd5, 0xb7, 0x45, 0x7a, 0xe4, 0x71, 0x73, 0x82, - 0x83, 0xef, 0xd2, 0xc3, 0xe2, 0x36, 0x26, 0x07, 0xca, 0xab, 0xb9, 0x1d, 0xfd, 0xe0, 0x11, 0x43, - 0x73, 0x4a, 0x81, 0xa3, 0xfb, 0xd1, 0x69, 0x18, 0xb6, 0xac, 0xdd, 0xae, 0xcd, 0x93, 0x78, 0x8c, - 0x9b, 0xe2, 0x17, 0x79, 0x05, 0xa6, 0x3d, 0x7b, 0xb7, 0x6d, 0xf9, 0x5d, 0x57, 0x3c, 0xcd, 0x40, - 0x5d, 0x5c, 0x52, 0x13, 0x66, 0x3e, 0x28, 0x28, 0x72, 0x38, 0x79, 0x0d, 0x88, 0x5a, 0x9f, 0xb3, - 0xfd, 0x31, 0xad, 0xf3, 0xa5, 0x36, 0x6e, 0x4e, 0x2b, 0x25, 0xeb, 0x58, 0x40, 0x9e, 0x87, 0x71, - 0x97, 0x7a, 0xa8, 0x70, 0xe1, 0xb0, 0xe1, 0xc3, 0x39, 0xe6, 0x98, 0x84, 0xb1, 0xb1, 0xbb, 0x0c, - 0x79, 0x65, 0x38, 0x30, 0x7d, 0x26, 0xcf, 0x0d, 0x6c, 0x4e, 0x86, 0x70, 0xb3, 0x53, 0x6e, 0x18, - 0x4b, 0x30, 0x1d, 0xfb, 0x72, 0x95, 0x87, 0x67, 0xb9, 0x24, 0xea, 0xff, 0xf0, 0xac, 0xd1, 0x86, - 0x71, 0x55, 0x12, 0x1f, 0x93, 0xa2, 0xfa, 0x34, 0x06, 0x81, 0x73, 0x31, 0x35, 0xfc, 0xe8, 0x68, - 0x21, 0x6d, 0x37, 0x30, 0xf4, 0xfb, 0x32, 0xe4, 0xe4, 0xfe, 0x2e, 0xce, 0x2c, 0x68, 0xe4, 0x14, - 0x8a, 0xe5, 0xa1, 0x19, 0x94, 0x1a, 0x2f, 0xc1, 0x88, 0x10, 0xb6, 0xfd, 0x4d, 0x9b, 0xc6, 0x8f, - 0xa4, 0x61, 0xca, 0xa4, 0x4c, 0x14, 0x50, 0x9e, 0x97, 0xfe, 0xa9, 0x3d, 0x69, 0x25, 0xa7, 0x12, - 0xd3, 0xfa, 0xd6, 0x27, 0x23, 0xfc, 0x2f, 0xa5, 0x60, 0x26, 0x01, 0xf7, 0x53, 0xbd, 0x5e, 0x76, - 0x13, 0x46, 0x4b, 0xb6, 0xd5, 0x2c, 0x34, 0x1a, 0x41, 0x44, 0x38, 0x6a, 0x85, 0x0d, 0xb6, 0xd2, - 0x2c, 0x06, 0x55, 0xb7, 0xdd, 0x00, 0x95, 0xbc, 0x2c, 0x16, 0x45, 0xf8, 0x72, 0x34, 0x2e, 0x8a, - 0x4f, 0x8e, 0x16, 0x80, 0xb7, 0x29, 0x7c, 0x21, 0x13, 0xd3, 0xfb, 0x71, 0x60, 0xe8, 0xb1, 0xfd, - 0xd4, 0x4e, 0x5d, 0x72, 0x7a, 0xbf, 0x68, 0xf7, 0x06, 0x4a, 0x0a, 0xff, 0x13, 0x69, 0x38, 0x9d, - 0x4c, 0xf8, 0x69, 0x1f, 0xa2, 0xc3, 0x74, 0xfc, 0x4a, 0x4a, 0x52, 0x7c, 0x88, 0x8e, 0xe7, 0xee, - 0x47, 0xfc, 0x10, 0x81, 0xec, 0xc0, 0xc4, 0xaa, 0xe5, 0xf9, 0x2b, 0xd4, 0x72, 0xfd, 0x6d, 0x6a, - 0xf9, 0x03, 0xe8, 0x9e, 0x2f, 0xc8, 0x1b, 0x44, 0xdc, 0xfe, 0xf6, 0x24, 0x65, 0x44, 0x3b, 0xd4, - 0xd9, 0x06, 0x0b, 0x25, 0x3b, 0xc0, 0x42, 0xf9, 0x26, 0x4c, 0x55, 0x69, 0xcb, 0xea, 0xec, 0x39, - 0xae, 0x0c, 0xf9, 0xbb, 0x0a, 0x13, 0x01, 0x28, 0x71, 0xb5, 0xe8, 0xc5, 0x1a, 0xbe, 0x32, 0x10, - 0xa1, 0x28, 0xd1, 0x8b, 0x8d, 0xbf, 0x91, 0x86, 0x33, 0x85, 0xba, 0x70, 0xec, 0x11, 0x05, 0xd2, - 0xff, 0xf0, 0x33, 0xae, 0x9b, 0x5c, 0x83, 0xd1, 0x7b, 0xd6, 0xc3, 0x55, 0x6a, 0x79, 0xd4, 0x13, - 0xcf, 0x00, 0x71, 0x45, 0xcd, 0x7a, 0x18, 0xfa, 0xbb, 0x98, 0x21, 0x8e, 0x7a, 0xe8, 0xcc, 0x3e, - 0xe6, 0xa1, 0xd3, 0x80, 0xe1, 0x15, 0xa7, 0xd9, 0x10, 0xdb, 0x98, 0xb8, 0x09, 0xdb, 0x43, 0x88, - 0x29, 0x4a, 0x8c, 0x3f, 0x4a, 0xc1, 0x64, 0xd0, 0x62, 0x6c, 0xc2, 0x67, 0x3e, 0x24, 0x97, 0x60, - 0x04, 0x2b, 0x2a, 0x97, 0xd4, 0x4d, 0xa3, 0x49, 0xf1, 0x31, 0x97, 0x86, 0x29, 0x0b, 0xd5, 0x91, - 0x18, 0x7a, 0xbc, 0x91, 0x30, 0xfe, 0x6d, 0xbc, 0x64, 0x53, 0x7b, 0xc9, 0x76, 0x22, 0xa5, 0x21, - 0xa9, 0x01, 0x1b, 0x92, 0x7e, 0x62, 0x53, 0x92, 0xe9, 0x39, 0x25, 0xdf, 0x4e, 0xc3, 0x58, 0xd0, - 0xd8, 0xcf, 0x59, 0x5e, 0xdc, 0xa0, 0x5f, 0x03, 0x85, 0xe9, 0x57, 0x15, 0x59, 0x21, 0xa2, 0xe1, - 0xdf, 0x87, 0x61, 0xf1, 0x31, 0xa5, 0x22, 0x7e, 0x78, 0x91, 0xd9, 0x5d, 0x9a, 0x14, 0xac, 0x87, - 0x71, 0x42, 0x3d, 0x53, 0xd0, 0x61, 0x1e, 0x84, 0x2d, 0xba, 0x2d, 0xee, 0x5c, 0x9f, 0xda, 0x3d, - 0x2a, 0x39, 0x0f, 0x42, 0xd8, 0xb1, 0x81, 0x76, 0xa7, 0xef, 0x8c, 0x40, 0x3e, 0x4a, 0x72, 0x7c, - 0xe6, 0xe1, 0x4a, 0x77, 0x9b, 0x6b, 0xe1, 0x3c, 0xf3, 0x70, 0xa7, 0xbb, 0x6d, 0x32, 0x18, 0xba, - 0x64, 0xb8, 0xf6, 0x03, 0xec, 0xf5, 0xb8, 0x70, 0xc9, 0x70, 0xed, 0x07, 0x9a, 0x4b, 0x86, 0x6b, - 0x3f, 0xc0, 0xa3, 0xef, 0x6a, 0x15, 0x43, 0x37, 0x51, 0x05, 0x17, 0x47, 0xdf, 0xa6, 0x17, 0x7d, - 0xb1, 0x43, 0xa2, 0xb1, 0xad, 0x72, 0x89, 0x5a, 0xae, 0xc8, 0x92, 0x2b, 0xc4, 0x19, 0x6e, 0x95, - 0xdb, 0x08, 0xe6, 0x8f, 0xe1, 0x9a, 0x2a, 0x12, 0x69, 0x02, 0x51, 0x7e, 0xca, 0x0f, 0xf8, 0xf8, - 0xd3, 0xa0, 0xf4, 0xa1, 0x99, 0x55, 0x59, 0xd7, 0xd4, 0xaf, 0x39, 0x81, 0xef, 0x93, 0xb4, 0x15, - 0x56, 0x44, 0xea, 0x2f, 0x34, 0x79, 0xe4, 0x8e, 0x65, 0x26, 0x63, 0x9b, 0x81, 0xa7, 0x06, 0x0b, - 0x0c, 0x1f, 0x21, 0x13, 0xf2, 0x2e, 0x8c, 0xa9, 0x01, 0xb9, 0x3c, 0x6c, 0xf4, 0x1c, 0xcf, 0xe6, - 0xd4, 0xe3, 0x3d, 0x36, 0x95, 0x80, 0x6c, 0xc3, 0x99, 0xa2, 0xd3, 0xf6, 0xba, 0x2d, 0x99, 0x37, - 0x2a, 0xcc, 0x56, 0x09, 0xc1, 0x7b, 0xea, 0x2f, 0xd4, 0x05, 0x8a, 0x88, 0xff, 0x94, 0x4e, 0xce, - 0xfa, 0x01, 0xa4, 0x17, 0x23, 0xb2, 0x01, 0x63, 0xd5, 0xc2, 0xbd, 0x55, 0x19, 0x54, 0x39, 0xa6, - 0x8b, 0x8d, 0xb0, 0xa4, 0xc4, 0x3e, 0x0c, 0x9e, 0xf8, 0xc4, 0x6a, 0x35, 0xa5, 0x8f, 0xad, 0x6a, - 0x37, 0x54, 0x90, 0xc9, 0xd7, 0x60, 0x92, 0x1f, 0x37, 0xb7, 0xe8, 0x36, 0x5f, 0x3b, 0xe3, 0xda, - 0xd9, 0x59, 0x2f, 0xe4, 0x77, 0xb2, 0xc2, 0xca, 0x79, 0x40, 0xb7, 0xf9, 0xdc, 0x6b, 0x1e, 0xee, - 0x1a, 0x3e, 0xd9, 0x84, 0x99, 0x15, 0xcb, 0xe3, 0x40, 0x25, 0xb2, 0x72, 0x02, 0x6d, 0x8a, 0xe8, - 0x79, 0xb8, 0x67, 0x79, 0xd2, 0x6c, 0x9a, 0x18, 0x49, 0x99, 0x44, 0x6f, 0xdc, 0x8c, 0xb6, 0x5a, - 0x18, 0x38, 0x52, 0x81, 0x81, 0x63, 0x16, 0x86, 0xb0, 0x6d, 0x32, 0x9d, 0x02, 0xfe, 0x30, 0xbe, - 0xa0, 0x7e, 0xcd, 0x42, 0xb9, 0xea, 0xfb, 0x35, 0x1b, 0xff, 0xf9, 0x30, 0x4c, 0x45, 0x06, 0x57, - 0x9c, 0xf6, 0x52, 0xb1, 0xd3, 0x5e, 0x15, 0x80, 0x9b, 0xf8, 0x06, 0xb4, 0xc5, 0xc9, 0x60, 0x94, - 0x31, 0x11, 0xcc, 0x15, 0xac, 0x4c, 0x85, 0x0d, 0x63, 0xca, 0xd7, 0xfd, 0x80, 0xb6, 0xd1, 0x80, - 0x29, 0xff, 0x74, 0x14, 0xa6, 0x21, 0x1b, 0xb2, 0x00, 0x43, 0x98, 0x03, 0x4d, 0x8d, 0x05, 0xb2, - 0x19, 0xc0, 0xe4, 0x70, 0x72, 0x11, 0x86, 0x99, 0x2a, 0x52, 0x2e, 0x09, 0x51, 0x82, 0x12, 0x9a, - 0xe9, 0x2a, 0x6c, 0xdf, 0x17, 0x45, 0xe4, 0x26, 0x8c, 0xf3, 0xbf, 0x44, 0x18, 0xfc, 0xb0, 0xee, - 0xda, 0x54, 0xb3, 0x1b, 0x32, 0x12, 0x5e, 0xc3, 0x63, 0x3a, 0x7a, 0xb5, 0xbb, 0xcd, 0x1f, 0x63, - 0x17, 0x49, 0x33, 0x51, 0x47, 0xf7, 0x38, 0x10, 0x1f, 0x8b, 0x0e, 0x10, 0x98, 0x46, 0x20, 0x3c, - 0x72, 0x73, 0x78, 0x32, 0x43, 0x8d, 0x80, 0x7b, 0xe2, 0x9a, 0xa2, 0x84, 0x5c, 0xe1, 0xd6, 0x6f, - 0x54, 0xae, 0xf8, 0x3b, 0x3f, 0x68, 0xaf, 0xc6, 0xe3, 0x3d, 0x6a, 0x58, 0x41, 0x31, 0xab, 0x9c, - 0xfd, 0xbd, 0xdc, 0xb2, 0xec, 0xa6, 0xf8, 0x38, 0xb1, 0x72, 0xc4, 0xa5, 0x0c, 0x6a, 0x86, 0x08, - 0xe4, 0x6d, 0x98, 0x64, 0x3f, 0x8a, 0x4e, 0xab, 0xe5, 0xb4, 0x91, 0xfd, 0x58, 0x98, 0x51, 0x05, - 0x49, 0xea, 0x58, 0xc4, 0x6b, 0x89, 0xe0, 0x32, 0xa9, 0x8c, 0x37, 0x6b, 0x5d, 0x6e, 0x97, 0x1f, - 0x0f, 0xa5, 0x32, 0x92, 0x7a, 0x1c, 0x6e, 0xaa, 0x48, 0xe4, 0x0d, 0x98, 0x60, 0x3f, 0x6f, 0xdb, - 0x0f, 0x28, 0xaf, 0x70, 0x22, 0xbc, 0xeb, 0x45, 0xaa, 0x5d, 0x56, 0xc2, 0xeb, 0xd3, 0x31, 0xc9, - 0x07, 0x70, 0x0a, 0x39, 0xd5, 0x9d, 0x0e, 0x6d, 0x14, 0x76, 0x76, 0xec, 0xa6, 0xcd, 0x7d, 0x4d, - 0x78, 0xc0, 0x37, 0xda, 0x5e, 0x79, 0xc5, 0x88, 0x51, 0xb3, 0x42, 0x14, 0x33, 0x99, 0x92, 0x6c, - 0x41, 0xbe, 0xd8, 0xf5, 0x7c, 0xa7, 0x55, 0xf0, 0x7d, 0xd7, 0xde, 0xee, 0xfa, 0xd4, 0x9b, 0x9b, - 0xd2, 0xc2, 0xa2, 0xd9, 0xc7, 0x11, 0x14, 0x72, 0xab, 0x4a, 0x1d, 0x29, 0x6a, 0x56, 0x40, 0x62, - 0xc6, 0x98, 0x18, 0xff, 0x59, 0x0a, 0x26, 0x34, 0x52, 0xf2, 0x3a, 0x8c, 0xdf, 0x72, 0x6d, 0xda, - 0x6e, 0x34, 0x0f, 0x95, 0xe3, 0x1e, 0x9e, 0x05, 0x76, 0x04, 0x9c, 0xf7, 0x5a, 0x43, 0x0b, 0xac, - 0x25, 0xe9, 0x44, 0x47, 0xb0, 0x6b, 0x3c, 0x24, 0x4d, 0x2c, 0xd0, 0x4c, 0x98, 0xa7, 0x01, 0x17, - 0xa8, 0x58, 0x9d, 0x0a, 0x0a, 0x79, 0x07, 0x86, 0xf9, 0x1d, 0x9c, 0xf0, 0x4a, 0x3a, 0x9b, 0xd4, - 0x4d, 0x1e, 0xfe, 0x88, 0x0b, 0x11, 0x3d, 0x20, 0x3c, 0x53, 0x10, 0x19, 0x3f, 0x93, 0x02, 0x12, - 0x47, 0x3d, 0xc6, 0x7a, 0x74, 0xac, 0x67, 0xc5, 0xfb, 0xc1, 0xd7, 0x98, 0xd1, 0x6c, 0xa5, 0xac, - 0x26, 0x5e, 0xc0, 0x07, 0x5e, 0x7c, 0x75, 0xaa, 0x39, 0x8b, 0x17, 0x1b, 0x7f, 0x39, 0x0d, 0x10, - 0x62, 0x93, 0x2f, 0xf3, 0xa7, 0x26, 0x3e, 0xe8, 0x5a, 0x4d, 0x7b, 0xc7, 0xd6, 0x73, 0xaf, 0x21, - 0x93, 0x6f, 0xca, 0x12, 0x53, 0x47, 0x24, 0xef, 0xc1, 0x54, 0xb5, 0xa2, 0xd3, 0x2a, 0x69, 0xf5, - 0xbd, 0x4e, 0x2d, 0x42, 0x1e, 0xc5, 0x46, 0xef, 0x43, 0x75, 0x36, 0xb8, 0xf7, 0x21, 0x9f, 0x08, - 0x51, 0xc2, 0x04, 0x4b, 0xb5, 0x22, 0x1c, 0x5e, 0x1b, 0xe5, 0x92, 0x90, 0x52, 0xd8, 0x3a, 0xaf, - 0x53, 0xeb, 0x08, 0x4f, 0x58, 0x26, 0x27, 0x34, 0xbc, 0x70, 0x20, 0x87, 0x7a, 0x84, 0x38, 0xfe, - 0x2c, 0x1a, 0xcf, 0x5a, 0x8e, 0x4f, 0x85, 0xcd, 0xe0, 0xa9, 0x3d, 0x3d, 0x84, 0x17, 0xb8, 0x43, - 0x5a, 0xe4, 0x96, 0xd6, 0x3b, 0xe1, 0x3e, 0x70, 0x23, 0x54, 0xf5, 0xf9, 0x55, 0x6e, 0x82, 0xc3, - 0xc1, 0xdf, 0x49, 0xc1, 0xa9, 0x44, 0x5a, 0x72, 0x15, 0x20, 0xb4, 0xcc, 0x88, 0x51, 0xe2, 0x6f, - 0xfb, 0x07, 0x50, 0x53, 0xc1, 0x20, 0x5f, 0x8d, 0xda, 0x54, 0x8e, 0xdf, 0x08, 0xe7, 0x65, 0xf6, - 0x19, 0xdd, 0xa6, 0x92, 0x60, 0x49, 0x31, 0x7e, 0x29, 0x03, 0xd3, 0x4a, 0xf2, 0x03, 0xde, 0xd6, - 0x63, 0xbc, 0x41, 0xf7, 0x61, 0x9c, 0xf5, 0xc6, 0xae, 0x8b, 0xf0, 0x11, 0xee, 0x6c, 0xf0, 0x72, - 0x2c, 0xf6, 0x46, 0x70, 0xbb, 0xaa, 0x22, 0xf3, 0x9c, 0x50, 0x28, 0x3a, 0xd1, 0x62, 0x5d, 0x8f, - 0x87, 0x91, 0x68, 0xcc, 0x89, 0x07, 0x13, 0xa5, 0xc3, 0xb6, 0xd5, 0x0a, 0x6a, 0xe3, 0x4e, 0x07, - 0xaf, 0xf4, 0xac, 0x4d, 0xc3, 0xe6, 0xd5, 0x85, 0x5e, 0xea, 0xbc, 0x2c, 0x21, 0x40, 0x52, 0xa3, - 0x9a, 0x7f, 0x0f, 0xa6, 0x63, 0x8d, 0x3e, 0x51, 0x7a, 0xaa, 0x2d, 0x20, 0xf1, 0x76, 0x24, 0x70, - 0x78, 0x45, 0x4f, 0x7e, 0x76, 0x2a, 0xb8, 0xb4, 0xc4, 0x47, 0x6a, 0xb9, 0x0b, 0xc3, 0xa2, 0x9a, - 0xbc, 0xea, 0x67, 0xd3, 0x6a, 0xfc, 0xd3, 0xd3, 0xfe, 0xd5, 0xbd, 0xaf, 0x9d, 0x29, 0x9f, 0xeb, - 0x35, 0xa7, 0x03, 0x9d, 0xdd, 0xbf, 0x97, 0x81, 0x33, 0x3d, 0x28, 0xc9, 0x61, 0x74, 0x11, 0xf1, - 0xb3, 0xfc, 0xf5, 0xfe, 0x15, 0x3e, 0x89, 0xa5, 0x44, 0xbe, 0xcc, 0x23, 0xa0, 0xeb, 0xf8, 0xb8, - 0xaa, 0x38, 0xc5, 0xf2, 0x77, 0xb9, 0x03, 0x68, 0x34, 0xf4, 0x99, 0x43, 0xc9, 0x7b, 0x30, 0x84, - 0xc1, 0x6f, 0x91, 0xe4, 0x4b, 0x0c, 0x03, 0xe1, 0x4a, 0xa6, 0x2a, 0xf6, 0x53, 0xcb, 0x54, 0xc5, - 0x00, 0xe4, 0x4b, 0x90, 0x29, 0x6c, 0x55, 0xc5, 0xbc, 0x4c, 0xaa, 0xe4, 0x5b, 0xd5, 0x30, 0x41, - 0xb6, 0xa5, 0x65, 0xb2, 0x66, 0x14, 0x8c, 0xf0, 0x76, 0xb1, 0x22, 0x66, 0x45, 0x25, 0xbc, 0x5d, - 0xac, 0x84, 0x84, 0xbb, 0x75, 0x2d, 0x99, 0xc5, 0xed, 0x62, 0xe5, 0xb3, 0x5b, 0xf6, 0x7f, 0x35, - 0xcd, 0xc3, 0xb6, 0x79, 0xc7, 0xde, 0x83, 0x71, 0x2d, 0x39, 0x65, 0x2a, 0xd4, 0xc7, 0x82, 0x1c, - 0xa0, 0x11, 0x2f, 0x0d, 0x8d, 0x40, 0xa6, 0x9a, 0x67, 0xbf, 0x51, 0xe3, 0x55, 0x9d, 0x2c, 0x02, - 0x0e, 0xa8, 0x13, 0x47, 0x53, 0xcd, 0x07, 0x24, 0xe4, 0x06, 0xe4, 0x36, 0x68, 0xdb, 0x6a, 0xfb, - 0x81, 0x59, 0x11, 0x3d, 0x2d, 0x7d, 0x84, 0xe9, 0x5a, 0x43, 0x80, 0x88, 0x5e, 0x81, 0xdd, 0x6d, - 0xaf, 0xee, 0xda, 0x98, 0xde, 0x21, 0xd8, 0x8b, 0xb9, 0x57, 0xa0, 0x52, 0xa2, 0x33, 0x88, 0x10, - 0x19, 0x3f, 0x9b, 0x82, 0x11, 0x31, 0x91, 0xfc, 0x89, 0x90, 0xdd, 0x70, 0x2f, 0x11, 0x4f, 0x84, - 0xec, 0xda, 0xd1, 0x27, 0x42, 0x76, 0x79, 0x0e, 0x85, 0x51, 0x11, 0x81, 0x18, 0x5c, 0xb0, 0xf1, - 0x17, 0xa5, 0x39, 0x50, 0xaf, 0x36, 0x44, 0x1d, 0x34, 0xdc, 0xc2, 0xf8, 0x5b, 0xa2, 0x65, 0xb7, - 0x8b, 0x15, 0xb2, 0x08, 0xb9, 0x55, 0xa7, 0x6e, 0x29, 0xfb, 0x1c, 0x8a, 0x9d, 0xa6, 0x80, 0xa9, - 0x03, 0x24, 0xf1, 0x58, 0xfb, 0x2a, 0xae, 0x23, 0xce, 0x32, 0x4a, 0xfb, 0x3a, 0x1c, 0x18, 0x69, - 0x5f, 0x80, 0x3a, 0x70, 0xfb, 0x68, 0x82, 0x90, 0xb8, 0x7f, 0x03, 0x73, 0x70, 0xdf, 0x51, 0xc3, - 0x58, 0x44, 0x91, 0x94, 0x14, 0xf3, 0xbd, 0x24, 0xc5, 0xfd, 0x1b, 0x66, 0x02, 0x15, 0xde, 0x4e, - 0x85, 0xe0, 0x2a, 0x75, 0x1f, 0x3c, 0xc5, 0x52, 0x3a, 0xf9, 0x76, 0x2a, 0xda, 0xbd, 0x81, 0x84, - 0xf4, 0x7f, 0x92, 0x86, 0xd3, 0xc9, 0x84, 0x6a, 0x5f, 0x52, 0x7d, 0xfa, 0x72, 0x19, 0x72, 0x2b, - 0x8e, 0xe7, 0x2b, 0x8e, 0x59, 0x68, 0x44, 0xdf, 0x13, 0x30, 0x33, 0x28, 0x65, 0x67, 0x6e, 0xf6, - 0x77, 0xf0, 0x79, 0x22, 0x3f, 0x0c, 0x56, 0x66, 0x67, 0x6e, 0x5e, 0x44, 0x6e, 0x43, 0xce, 0x14, - 0x61, 0x14, 0x91, 0xa1, 0x91, 0xe0, 0x40, 0x9b, 0x22, 0xae, 0x80, 0x68, 0x39, 0x42, 0x05, 0x8c, - 0x14, 0x60, 0x44, 0xcc, 0x7e, 0xe4, 0x02, 0x36, 0x61, 0xc9, 0xe8, 0x69, 0x7b, 0x25, 0x1d, 0x93, - 0x28, 0x78, 0x95, 0x56, 0x2e, 0xc9, 0x88, 0x08, 0x94, 0x28, 0xfc, 0xaa, 0x4d, 0xf7, 0x81, 0x0b, - 0x10, 0x8d, 0x1f, 0x49, 0x03, 0x48, 0xab, 0xcd, 0x53, 0xbb, 0xc2, 0xbe, 0xa4, 0xad, 0x30, 0xc5, - 0xcf, 0x64, 0xf0, 0x27, 0xed, 0xd6, 0xd1, 0xdf, 0x63, 0xf0, 0x07, 0xed, 0x16, 0x60, 0x68, 0x23, - 0x34, 0x68, 0x09, 0xff, 0x7c, 0x34, 0xea, 0x72, 0xb8, 0xb1, 0x0d, 0xb3, 0xb7, 0xa9, 0x1f, 0x9a, - 0xb7, 0xe4, 0x05, 0x5e, 0x7f, 0xb6, 0xaf, 0xc2, 0xa8, 0xc0, 0x0f, 0xe4, 0x17, 0xb7, 0xc5, 0x88, - 0xf8, 0x7f, 0xb4, 0xc5, 0x48, 0x04, 0x26, 0x8d, 0x4a, 0xb4, 0x49, 0x7d, 0xfa, 0xd9, 0x56, 0x53, - 0x05, 0xc2, 0xbb, 0x82, 0x3d, 0x1b, 0xac, 0x86, 0x63, 0xc7, 0xe7, 0x3e, 0x9c, 0x0a, 0xda, 0xfe, - 0x24, 0xf9, 0x5e, 0x63, 0x47, 0x4a, 0x91, 0xf1, 0x36, 0xe4, 0xd8, 0xc7, 0x83, 0xe3, 0x21, 0xcc, - 0x4b, 0x82, 0x2d, 0x3b, 0x70, 0x98, 0x1b, 0x88, 0x96, 0xbc, 0x0d, 0x63, 0x0a, 0x8d, 0xc8, 0xd8, - 0x8a, 0xc6, 0xde, 0x03, 0xdb, 0xdf, 0xab, 0x79, 0x1c, 0xae, 0x1a, 0x7b, 0x15, 0x74, 0xe3, 0x23, - 0x78, 0x36, 0x88, 0xa1, 0x48, 0xa8, 0x3a, 0xc2, 0x3c, 0x75, 0x32, 0xe6, 0x6b, 0x61, 0xb7, 0xca, - 0xed, 0x20, 0xee, 0x51, 0xf2, 0x26, 0x6a, 0xb7, 0x44, 0x67, 0xce, 0xc5, 0x22, 0x29, 0x95, 0x80, - 0x49, 0xe3, 0x2d, 0xa5, 0xb1, 0x09, 0x0c, 0x35, 0xe2, 0x54, 0x94, 0xf8, 0x47, 0xd2, 0x30, 0xb5, - 0x5e, 0x2e, 0x15, 0x03, 0x1f, 0x9e, 0xcf, 0xd9, 0x83, 0x7b, 0x5a, 0xdf, 0x7a, 0xcb, 0x1b, 0x63, - 0x13, 0x66, 0x22, 0xc3, 0x80, 0xaa, 0xc3, 0xbb, 0xdc, 0xc9, 0x3f, 0x00, 0x4b, 0xb5, 0xe1, 0x74, - 0x12, 0xfb, 0xfb, 0x37, 0xcc, 0x08, 0xb6, 0xf1, 0x87, 0xb9, 0x08, 0x5f, 0x21, 0xc2, 0x5e, 0x85, - 0xd1, 0xb2, 0xe7, 0x75, 0xa9, 0xbb, 0x69, 0xae, 0xaa, 0xa6, 0x02, 0x1b, 0x81, 0xb5, 0xae, 0xdb, - 0x34, 0x43, 0x04, 0x72, 0x05, 0x72, 0x22, 0x89, 0xa9, 0x94, 0x09, 0x68, 0xb5, 0x0d, 0x72, 0xa0, - 0x9a, 0x41, 0x31, 0x79, 0x1d, 0xc6, 0xf9, 0xdf, 0x7c, 0xb5, 0x89, 0x01, 0x47, 0xe3, 0xa0, 0x40, - 0xe7, 0xab, 0xd3, 0xd4, 0xd0, 0xc8, 0xcb, 0x90, 0x29, 0x14, 0x4d, 0x61, 0x0e, 0x12, 0x7a, 0x23, - 0x3e, 0xa3, 0xdb, 0xa5, 0xfa, 0x21, 0xa2, 0x68, 0x32, 0xed, 0x4f, 0xc6, 0x58, 0x0b, 0x4b, 0x36, - 0x7f, 0xed, 0x57, 0xc0, 0x22, 0x9b, 0x19, 0xc2, 0xc8, 0x35, 0x18, 0x29, 0xd9, 0x5e, 0xa7, 0x69, - 0x1d, 0x0a, 0x3b, 0x36, 0x7f, 0x4d, 0x86, 0x83, 0xb4, 0xd0, 0x69, 0x0e, 0x22, 0x57, 0xe4, 0x2b, - 0x1b, 0xb9, 0x30, 0x56, 0xa0, 0xc7, 0x53, 0x1a, 0xaf, 0xc2, 0xb0, 0x48, 0xf5, 0x39, 0xaa, 0x24, - 0xf1, 0x8e, 0xa6, 0xf8, 0x14, 0x38, 0xf1, 0x68, 0x3e, 0x78, 0x92, 0xd1, 0x7c, 0xdb, 0x70, 0xe6, - 0x36, 0x5a, 0x6f, 0xf4, 0xa4, 0x20, 0x9b, 0x66, 0x59, 0xd8, 0xc3, 0xf1, 0x7e, 0x8b, 0x1b, 0x78, - 0xa2, 0x79, 0x45, 0x6a, 0x5d, 0x57, 0x7d, 0x1c, 0xad, 0x17, 0x23, 0xf2, 0x15, 0x98, 0x4d, 0x2a, - 0x12, 0x56, 0x73, 0x4c, 0x7f, 0x91, 0x5c, 0x81, 0x9a, 0xfe, 0x22, 0x89, 0x03, 0x59, 0x85, 0x3c, - 0x87, 0x17, 0x1a, 0x2d, 0xbb, 0xcd, 0x2d, 0xff, 0xdc, 0xaa, 0x8e, 0xce, 0xfb, 0x82, 0xab, 0xc5, - 0x0a, 0xf9, 0x0d, 0x80, 0x16, 0xee, 0x11, 0xa1, 0x24, 0x3f, 0x95, 0x62, 0xa7, 0x39, 0x9e, 0x18, - 0x73, 0xd3, 0x5c, 0xf5, 0x44, 0xea, 0xa4, 0xd3, 0x61, 0x24, 0x47, 0xd5, 0x77, 0xed, 0xf6, 0xae, - 0x08, 0xe5, 0xd8, 0x10, 0xa1, 0x1c, 0x6f, 0x7f, 0xaa, 0x50, 0x0e, 0xce, 0xca, 0x7b, 0x74, 0xb4, - 0x30, 0xee, 0x8a, 0x3a, 0xf1, 0x2b, 0xd2, 0x5a, 0x80, 0x0f, 0x7b, 0x37, 0x9b, 0xce, 0xc1, 0x66, - 0xfb, 0x01, 0x75, 0xed, 0x1d, 0x9b, 0x36, 0x78, 0x27, 0xa7, 0x50, 0x82, 0xf3, 0x87, 0xbd, 0xf1, - 0xa9, 0xfa, 0x6e, 0x80, 0x10, 0xeb, 0x68, 0x22, 0x07, 0x76, 0xf0, 0x94, 0xe1, 0x02, 0x3c, 0x34, - 0x31, 0x1f, 0x1e, 0x3c, 0x65, 0x6c, 0x41, 0x0d, 0x97, 0x91, 0xba, 0x78, 0x34, 0x12, 0x72, 0x0d, - 0x86, 0xef, 0x59, 0x0f, 0x0b, 0xbb, 0x54, 0xbc, 0x9e, 0x34, 0x21, 0xc5, 0x1f, 0x02, 0x97, 0x72, - 0xbf, 0xc7, 0x7d, 0xdc, 0x9f, 0x31, 0x05, 0x9a, 0x70, 0x9e, 0xfe, 0x92, 0x24, 0x23, 0xaf, 0xa9, - 0xe1, 0x6b, 0x19, 0x54, 0x32, 0x47, 0x5a, 0xd6, 0xc3, 0x9a, 0xb5, 0x4b, 0xb5, 0x2b, 0x59, 0x61, - 0xe4, 0xfd, 0xeb, 0xa3, 0x5c, 0xf6, 0x17, 0xba, 0xfe, 0x9e, 0xdc, 0x2d, 0x16, 0x93, 0x82, 0x2b, - 0xb8, 0x2b, 0x99, 0x12, 0x5c, 0xa1, 0x87, 0x54, 0x48, 0xa3, 0x7d, 0x3a, 0xd1, 0x68, 0xff, 0x2a, - 0x8c, 0x16, 0xf7, 0x68, 0x7d, 0x3f, 0xf0, 0x9a, 0xcf, 0x09, 0xab, 0x28, 0x03, 0xf2, 0x5c, 0x93, - 0x21, 0x02, 0xb9, 0x06, 0x80, 0xd1, 0x56, 0x5c, 0x95, 0x50, 0xf2, 0x45, 0x63, 0x70, 0x96, 0xb8, - 0x9d, 0x57, 0x50, 0x90, 0x7d, 0xd5, 0xbc, 0xa5, 0x5e, 0xe7, 0x73, 0xf6, 0x9e, 0xbb, 0x23, 0xd0, - 0x43, 0x04, 0xd6, 0x3d, 0x65, 0x41, 0x08, 0xf1, 0x95, 0x8f, 0xad, 0x1a, 0x15, 0x09, 0x3d, 0xe5, - 0xa4, 0x8b, 0x30, 0x4a, 0xaf, 0x71, 0xe1, 0x29, 0x17, 0xb8, 0x13, 0x9b, 0x21, 0x02, 0xf9, 0x12, - 0x8c, 0x14, 0xa9, 0xeb, 0x6f, 0x6c, 0xac, 0xe2, 0x8d, 0x3b, 0x4f, 0xaa, 0x9c, 0xc3, 0x04, 0xb8, - 0xbe, 0xdf, 0xfc, 0xe4, 0x68, 0x61, 0xc2, 0xb7, 0x5b, 0xf4, 0x6a, 0x30, 0x17, 0x12, 0x9b, 0x2c, - 0x41, 0x9e, 0xdf, 0x66, 0x86, 0x2a, 0x23, 0x0a, 0xb4, 0x1c, 0x17, 0xaf, 0xe2, 0xea, 0xf3, 0x80, - 0x6e, 0x07, 0xe9, 0x7f, 0x63, 0xf8, 0x64, 0x59, 0x66, 0xcd, 0x56, 0x3b, 0x09, 0xa1, 0x0d, 0x43, - 0x6c, 0x01, 0x5a, 0x5f, 0xe3, 0x14, 0xa4, 0x00, 0x13, 0x45, 0xa7, 0xd5, 0xb1, 0x7c, 0x1b, 0x9f, - 0xa0, 0x39, 0x14, 0xb2, 0x0b, 0xed, 0x30, 0x75, 0xb5, 0x40, 0x13, 0x84, 0x6a, 0x01, 0xb9, 0x05, - 0x93, 0xa6, 0xd3, 0x65, 0x93, 0x24, 0x0f, 0x4f, 0x5c, 0x3c, 0xe1, 0xbd, 0xb8, 0xcb, 0x4a, 0x98, - 0x34, 0x15, 0x27, 0x25, 0x2d, 0x79, 0x99, 0x46, 0x45, 0xd6, 0x12, 0xac, 0xd8, 0xaa, 0x4c, 0x52, - 0x93, 0x00, 0xc7, 0x98, 0x25, 0x18, 0xc0, 0x6f, 0xc0, 0x58, 0xb5, 0xba, 0xbe, 0x41, 0x3d, 0xff, - 0x56, 0xd3, 0x39, 0x40, 0x91, 0x94, 0x13, 0x8f, 0x23, 0x78, 0x4e, 0xcd, 0xa7, 0x9e, 0x5f, 0xdb, - 0x69, 0x3a, 0x07, 0xa6, 0x8a, 0x45, 0xbe, 0xce, 0xc6, 0x43, 0xd9, 0xc0, 0x45, 0x9a, 0xb6, 0x7e, - 0x3a, 0x06, 0x7e, 0xf8, 0xe1, 0x27, 0xc3, 0x34, 0x0d, 0x7d, 0xb0, 0x14, 0x74, 0x0c, 0x01, 0x61, - 0xc7, 0xbe, 0x42, 0xa3, 0xe1, 0x52, 0xcf, 0x13, 0xb2, 0x83, 0x87, 0x80, 0xe0, 0x19, 0xd1, 0xe2, - 0x05, 0x5a, 0x08, 0x88, 0x42, 0x40, 0xbe, 0x9d, 0x82, 0x53, 0xaa, 0x17, 0x39, 0x7e, 0x2c, 0x2d, - 0xda, 0xf6, 0x85, 0x24, 0x79, 0xed, 0xaa, 0x94, 0x9d, 0x57, 0x15, 0xb4, 0xab, 0x0f, 0xae, 0x5f, - 0x2d, 0x84, 0x3f, 0xab, 0x92, 0x48, 0x64, 0x3a, 0x4a, 0xe2, 0xa7, 0xca, 0x41, 0x2b, 0x81, 0x94, - 0x14, 0xd9, 0xf6, 0xca, 0xd6, 0x13, 0xfa, 0x8c, 0x94, 0x2b, 0x98, 0xcc, 0x4d, 0x98, 0xc1, 0xc4, - 0xea, 0xe3, 0xde, 0x25, 0x76, 0x47, 0xdf, 0x45, 0x15, 0x1a, 0x54, 0x4a, 0xab, 0x85, 0x7b, 0xab, - 0xa1, 0x66, 0xf5, 0xf9, 0x72, 0xdd, 0xd6, 0xfa, 0xd6, 0xc7, 0x75, 0x7b, 0x13, 0x66, 0x22, 0xc3, - 0x20, 0x95, 0x52, 0x0d, 0x1c, 0x55, 0x4a, 0x23, 0x34, 0x66, 0x04, 0xdb, 0xf8, 0xfb, 0x23, 0x11, - 0xbe, 0xc2, 0x5d, 0xcb, 0x80, 0x61, 0xae, 0x73, 0xaa, 0x6f, 0x27, 0x73, 0x8d, 0xd4, 0x14, 0x25, - 0xe4, 0x2c, 0x64, 0xaa, 0xd5, 0x75, 0xf5, 0xb9, 0x78, 0xcf, 0x73, 0x4c, 0x06, 0x63, 0x33, 0x84, - 0x9e, 0x58, 0x4a, 0x56, 0x55, 0x26, 0xf6, 0x4c, 0x84, 0xb2, 0xf1, 0x96, 0x1a, 0x60, 0x36, 0x1c, - 0x6f, 0xa1, 0x01, 0x86, 0x7a, 0x5f, 0x11, 0xe6, 0x0a, 0x9e, 0x47, 0x5d, 0xb6, 0xaa, 0x84, 0x83, - 0x8f, 0x2b, 0xb4, 0x14, 0x21, 0xdd, 0xb1, 0x52, 0xab, 0xee, 0x99, 0x3d, 0x11, 0xc9, 0x65, 0xc8, - 0x15, 0xba, 0x0d, 0x9b, 0xb6, 0xeb, 0x5a, 0xca, 0x14, 0x4b, 0xc0, 0xcc, 0xa0, 0x94, 0x7c, 0x00, - 0xa7, 0x22, 0x69, 0x83, 0xc4, 0x08, 0x8c, 0x84, 0x9f, 0xa0, 0xd4, 0xa2, 0xc2, 0xeb, 0x54, 0x3e, - 0x24, 0xc9, 0x94, 0xa4, 0x00, 0xf9, 0x65, 0x0c, 0x55, 0x28, 0x51, 0x6e, 0xd9, 0x75, 0x5c, 0x1e, - 0x7e, 0xc1, 0x75, 0x5e, 0x1e, 0xc6, 0x50, 0x6b, 0x04, 0x85, 0x66, 0x0c, 0x9d, 0xdc, 0x85, 0x99, - 0x28, 0x8c, 0x09, 0x72, 0xae, 0xde, 0x62, 0x5a, 0xbf, 0x18, 0x17, 0x14, 0xe5, 0x49, 0x54, 0x64, - 0x1b, 0xa6, 0x43, 0x77, 0x02, 0x5d, 0xe9, 0x95, 0xbe, 0x7e, 0x41, 0xb9, 0x54, 0x7c, 0x9f, 0x15, - 0x8b, 0x71, 0x26, 0x74, 0x4d, 0x08, 0x94, 0x5f, 0x33, 0xce, 0x8e, 0x34, 0x60, 0xb2, 0x6a, 0xef, - 0xb6, 0xed, 0xf6, 0xee, 0x5d, 0x7a, 0x58, 0xb1, 0x6c, 0x57, 0x78, 0x5d, 0x49, 0x9f, 0xca, 0x82, - 0x77, 0xd8, 0x6a, 0x51, 0xdf, 0xc5, 0x2d, 0x92, 0x95, 0x63, 0xe4, 0x20, 0x53, 0x66, 0xe6, 0x3d, - 0x4e, 0x87, 0x51, 0x39, 0x1d, 0xcb, 0xd6, 0xf6, 0x02, 0x9d, 0xa7, 0x76, 0xf0, 0x18, 0x1f, 0xf0, - 0xe0, 0xd1, 0x84, 0xe9, 0xe5, 0x76, 0xdd, 0x3d, 0x44, 0x03, 0xbb, 0x6c, 0xdc, 0xc4, 0x31, 0x8d, - 0x7b, 0x41, 0x34, 0xee, 0x9c, 0x25, 0x57, 0x58, 0x52, 0xf3, 0xe2, 0x8c, 0x49, 0x15, 0xa6, 0x51, - 0x3b, 0x2c, 0x97, 0x2a, 0xe5, 0xb6, 0xed, 0xdb, 0xf8, 0xc2, 0x2f, 0xdf, 0x63, 0x5e, 0x14, 0x3c, - 0xcf, 0x73, 0x05, 0xd3, 0x6e, 0x74, 0x6a, 0xb6, 0x44, 0x51, 0x99, 0xc6, 0xe8, 0x8d, 0x7f, 0x3f, - 0xc7, 0xa5, 0xa1, 0xaa, 0xa6, 0xf5, 0xf2, 0xac, 0x8a, 0xa8, 0x6f, 0xe9, 0x93, 0xa8, 0x6f, 0x99, - 0xe3, 0xd5, 0xb7, 0xec, 0x71, 0xea, 0x5b, 0x44, 0xbf, 0x1a, 0x3a, 0xb1, 0x7e, 0x35, 0x7c, 0x02, - 0xfd, 0x6a, 0xe4, 0x44, 0xfa, 0x95, 0xa6, 0x28, 0xe6, 0x8e, 0x53, 0x14, 0xff, 0x3f, 0x6d, 0xec, - 0x69, 0xd5, 0xc6, 0x92, 0x36, 0xd7, 0x13, 0x69, 0x63, 0xbd, 0x95, 0xa9, 0xfc, 0x9f, 0xb5, 0x32, - 0x35, 0xfd, 0x29, 0x94, 0xa9, 0xbf, 0x00, 0xf9, 0xa8, 0x7c, 0x3f, 0x3e, 0x29, 0xd8, 0x13, 0x4b, - 0x60, 0xc3, 0x76, 0x9f, 0xa8, 0x7c, 0x65, 0x87, 0xbc, 0x8a, 0x6b, 0x3f, 0xb0, 0x7c, 0x7a, 0x57, - 0x5e, 0x1f, 0x8b, 0x84, 0x76, 0x1c, 0x8a, 0xdf, 0xbc, 0x82, 0x12, 0xa8, 0x16, 0xe9, 0x24, 0xd5, - 0xc2, 0xf8, 0xd1, 0x34, 0x4c, 0xf3, 0x64, 0x13, 0x4f, 0xbf, 0x15, 0xf3, 0x5d, 0x4d, 0x61, 0x94, - 0xce, 0x4a, 0x91, 0xde, 0xf5, 0xb1, 0x63, 0x7e, 0x0d, 0x4e, 0xc5, 0x86, 0x02, 0x95, 0xc6, 0x92, - 0x4c, 0xf3, 0x11, 0x53, 0x1b, 0xe7, 0x92, 0x2b, 0xb9, 0x7f, 0xc3, 0x8c, 0x51, 0x18, 0xff, 0x32, - 0x13, 0xe3, 0x2f, 0x2c, 0x9a, 0xaa, 0x8d, 0x32, 0x75, 0x32, 0x1b, 0x65, 0x7a, 0x30, 0x1b, 0x65, - 0x64, 0x6f, 0xc9, 0x0c, 0xb2, 0xb7, 0x7c, 0x00, 0x13, 0x1b, 0xd4, 0x6a, 0x79, 0x1b, 0x8e, 0xc8, - 0x5a, 0xcd, 0x9d, 0x15, 0x65, 0x16, 0x0f, 0x56, 0x26, 0x75, 0x9e, 0xc0, 0xe9, 0xc2, 0x67, 0x04, - 0x4c, 0x1e, 0xf2, 0x34, 0xd6, 0xa6, 0xce, 0x41, 0x55, 0x64, 0x87, 0xfa, 0x28, 0xb2, 0x55, 0x18, - 0x17, 0x74, 0x61, 0x26, 0xb4, 0x50, 0xe3, 0x62, 0x45, 0x08, 0x97, 0xb5, 0x07, 0xef, 0x8a, 0x05, - 0xb5, 0x73, 0x65, 0x4b, 0x63, 0xc2, 0x86, 0x60, 0xb9, 0xdd, 0xe8, 0x38, 0x76, 0x1b, 0x87, 0x60, - 0x24, 0x1c, 0x02, 0x2a, 0xc0, 0x7c, 0x08, 0x14, 0x24, 0xf2, 0x36, 0x4c, 0x16, 0x2a, 0x65, 0x95, - 0x2c, 0x17, 0x9a, 0x49, 0xad, 0x8e, 0x5d, 0xd3, 0x48, 0x23, 0xb8, 0xc6, 0x0f, 0x8e, 0xca, 0x6f, - 0xeb, 0xb3, 0xb5, 0x12, 0xe9, 0x76, 0x9f, 0xcc, 0x09, 0xed, 0x3e, 0xd9, 0xe3, 0xb6, 0x73, 0x4d, - 0xc7, 0x18, 0x3a, 0x81, 0x8e, 0x31, 0xfc, 0xd8, 0x36, 0x9c, 0x91, 0x13, 0x6a, 0x0d, 0x91, 0x65, - 0x9e, 0x1b, 0x64, 0x99, 0x27, 0x6a, 0x1a, 0xa3, 0x8f, 0xaf, 0x69, 0xc0, 0x89, 0x35, 0x8d, 0x6a, - 0x18, 0xbd, 0x32, 0x76, 0xac, 0x3b, 0xe3, 0x79, 0xa1, 0x13, 0x4f, 0x27, 0x67, 0x0e, 0x09, 0xe2, - 0x58, 0x3e, 0x57, 0xea, 0xcb, 0x37, 0x92, 0xd5, 0x97, 0xfe, 0xa2, 0xfe, 0xff, 0xcd, 0x0a, 0x8c, - 0x8b, 0xa3, 0xbc, 0x65, 0xb9, 0xec, 0x2c, 0xe8, 0x91, 0x6b, 0x30, 0x22, 0x33, 0xe8, 0xa4, 0xc2, - 0x63, 0x75, 0x3c, 0x75, 0x8e, 0xc4, 0x62, 0xc7, 0x46, 0x49, 0xac, 0x26, 0xee, 0x3d, 0x10, 0x30, - 0x2d, 0x39, 0x89, 0x80, 0x19, 0x7f, 0x37, 0x2b, 0xbf, 0x64, 0x76, 0xac, 0x11, 0x8f, 0xbc, 0x2e, - 0x29, 0x33, 0xa7, 0xa8, 0x4f, 0x91, 0xb9, 0x89, 0x78, 0x27, 0xe9, 0x24, 0x9f, 0x26, 0xfd, 0x90, - 0xf2, 0xb8, 0x4c, 0x66, 0x80, 0xc7, 0x65, 0xde, 0xd0, 0x5e, 0x66, 0xc9, 0x86, 0x4f, 0x01, 0xb0, - 0xd5, 0xdd, 0xff, 0x4d, 0x96, 0x9b, 0xea, 0x13, 0x2a, 0x43, 0x61, 0x78, 0x3f, 0x52, 0xf6, 0x79, - 0x3c, 0x25, 0xd0, 0x07, 0x87, 0x4f, 0x92, 0xd8, 0x6b, 0xe4, 0xcf, 0x34, 0xb1, 0xd7, 0x32, 0x80, - 0xf2, 0xb0, 0x26, 0x37, 0xd5, 0xbf, 0xc8, 0x86, 0xe9, 0xf8, 0x47, 0x35, 0x15, 0x42, 0xe3, 0x77, - 0x09, 0x4c, 0x57, 0xab, 0xeb, 0x25, 0xdb, 0xda, 0x6d, 0x3b, 0x9e, 0x6f, 0xd7, 0xcb, 0xed, 0x1d, - 0x87, 0x29, 0x43, 0x81, 0x54, 0x50, 0xd2, 0x42, 0x85, 0x12, 0x21, 0x28, 0x66, 0xca, 0xf6, 0xb2, - 0xeb, 0x3a, 0xae, 0xaa, 0x6c, 0x53, 0x06, 0x30, 0x39, 0x9c, 0xe9, 0x1b, 0xd5, 0x2e, 0x7f, 0x21, - 0x91, 0xdf, 0x9e, 0xa0, 0xbe, 0xe1, 0x71, 0x90, 0x29, 0xcb, 0x08, 0x8d, 0x2f, 0x58, 0xa1, 0x7f, - 0x9e, 0xd1, 0xd2, 0x83, 0x85, 0xc5, 0x5c, 0xe6, 0x89, 0x3d, 0x09, 0xc3, 0x5d, 0x3a, 0x08, 0x57, - 0x2f, 0xf5, 0x62, 0xdf, 0xc0, 0x21, 0x9c, 0xd2, 0xc2, 0x36, 0x06, 0xb5, 0x28, 0xbd, 0x2c, 0xf4, - 0x1b, 0x03, 0x63, 0xed, 0x12, 0xcc, 0x4a, 0x6a, 0x2a, 0xf3, 0xc4, 0x1a, 0xc8, 0x8f, 0xa6, 0xe0, - 0x7c, 0x62, 0x49, 0xf0, 0x75, 0x8f, 0x69, 0x29, 0xda, 0x14, 0xa1, 0xc1, 0x93, 0xb6, 0xf7, 0xaa, - 0xba, 0x96, 0x20, 0x0a, 0xfa, 0xd7, 0x44, 0x7e, 0x3d, 0x05, 0x67, 0x34, 0x8c, 0x40, 0xe6, 0x79, - 0x41, 0x5c, 0x60, 0xe2, 0xba, 0xfe, 0xf8, 0xc9, 0xac, 0xeb, 0x8b, 0x7a, 0x5f, 0x42, 0x91, 0xac, - 0xf6, 0xa1, 0x57, 0x0b, 0xc9, 0x03, 0x98, 0xc6, 0x22, 0x69, 0xdd, 0x62, 0x6b, 0x56, 0x18, 0xc5, - 0x66, 0xc3, 0x66, 0xf3, 0x50, 0x24, 0x7c, 0x78, 0x6b, 0xf1, 0x7b, 0x47, 0x0b, 0x13, 0x1a, 0x3a, - 0xe6, 0x07, 0xc6, 0x36, 0x04, 0x26, 0x32, 0xbb, 0xbd, 0xe3, 0xa8, 0xfb, 0x65, 0xac, 0x0a, 0xf2, - 0x1f, 0xa4, 0x60, 0x8e, 0x41, 0x79, 0x37, 0x6e, 0xb9, 0x4e, 0x2b, 0x28, 0x97, 0xb7, 0xc3, 0x3d, - 0x86, 0xad, 0xf9, 0x64, 0x86, 0xed, 0x45, 0x6c, 0x32, 0x97, 0x09, 0xb5, 0x1d, 0xd7, 0x69, 0x85, - 0xcd, 0xd7, 0x1e, 0x8e, 0xec, 0xd5, 0x48, 0xf2, 0x43, 0x29, 0x38, 0xab, 0x19, 0x18, 0xd4, 0xd4, - 0xb0, 0x22, 0xe0, 0x4b, 0xba, 0x12, 0xa8, 0x45, 0x4b, 0x57, 0xc5, 0xfa, 0xbf, 0x84, 0x2d, 0x08, - 0x77, 0x0b, 0x6c, 0x4b, 0xad, 0xc5, 0xb1, 0x94, 0x26, 0xf4, 0xae, 0x85, 0xd8, 0x30, 0x8d, 0x37, - 0x4e, 0x9a, 0x17, 0xc3, 0x6c, 0x6f, 0x2f, 0x86, 0xe0, 0x81, 0x14, 0xcc, 0x3b, 0xd9, 0xdb, 0x95, - 0x21, 0xce, 0x95, 0xfc, 0x45, 0x38, 0x1b, 0x03, 0x06, 0x5f, 0xdb, 0xa9, 0x9e, 0x5f, 0xdb, 0x2b, - 0x8f, 0x8e, 0x16, 0x5e, 0x4a, 0xaa, 0x2d, 0xe9, 0x4b, 0xeb, 0x5d, 0x03, 0xb1, 0x00, 0xc2, 0x42, - 0xf1, 0xfe, 0x64, 0xf2, 0x02, 0x7d, 0x45, 0xac, 0x0f, 0x05, 0x9f, 0xc9, 0x72, 0xa5, 0x0d, 0xea, - 0x96, 0x17, 0x22, 0x11, 0x0a, 0xe3, 0x4a, 0xce, 0xcd, 0x43, 0x7c, 0x88, 0xb2, 0x67, 0x25, 0xdf, - 0x3b, 0x5a, 0xd0, 0xb0, 0x99, 0x5e, 0xac, 0x26, 0xf3, 0x54, 0xf5, 0x62, 0x0d, 0x91, 0xfc, 0x6a, - 0x0a, 0x66, 0x19, 0x20, 0x5c, 0x54, 0xa2, 0x53, 0x73, 0xfd, 0x56, 0xfd, 0xde, 0x93, 0x59, 0xf5, - 0xcf, 0x63, 0x1b, 0xd5, 0x55, 0x1f, 0x1b, 0x92, 0xc4, 0xc6, 0xe1, 0x6a, 0xd7, 0x2e, 0x37, 0xb5, - 0xd5, 0x7e, 0x76, 0x80, 0xd5, 0xce, 0x27, 0xe0, 0xf8, 0xd5, 0xde, 0xb3, 0x16, 0xb2, 0x01, 0xe3, - 0x42, 0x25, 0xe6, 0x03, 0xf6, 0x9c, 0x96, 0x04, 0x50, 0x2d, 0xe2, 0xe7, 0x14, 0x91, 0x92, 0x34, - 0xd6, 0x43, 0x8d, 0x0b, 0x69, 0xc3, 0x0c, 0xff, 0xad, 0x5b, 0x07, 0x16, 0x7a, 0x5a, 0x07, 0x2e, - 0x8b, 0x1e, 0x5d, 0x10, 0xfc, 0x23, 0x46, 0x02, 0x35, 0x0e, 0x3b, 0x81, 0x31, 0xe9, 0x00, 0xd1, - 0xc0, 0xfc, 0xa3, 0xbd, 0xd0, 0xdf, 0x26, 0xf0, 0x92, 0xa8, 0x73, 0x21, 0x5a, 0x67, 0xf4, 0xcb, - 0x4d, 0xe0, 0x4d, 0x2c, 0x98, 0x12, 0x50, 0x76, 0x00, 0x46, 0x09, 0xff, 0xbc, 0x16, 0x09, 0x1f, - 0x29, 0xe5, 0xaf, 0xf7, 0xc9, 0x9a, 0x30, 0x53, 0x41, 0x44, 0xa0, 0x47, 0xf9, 0x91, 0x75, 0x98, - 0x2e, 0x74, 0x3a, 0x4d, 0x9b, 0x36, 0xb0, 0x97, 0xfc, 0x2d, 0x41, 0x23, 0xcc, 0x1f, 0x6f, 0xf1, - 0x42, 0xa1, 0xe2, 0x47, 0x1f, 0x12, 0x8c, 0xd3, 0x1a, 0xdf, 0x4e, 0xc5, 0x1a, 0xcd, 0x4e, 0xee, - 0xf8, 0x43, 0x09, 0x0b, 0xc5, 0x93, 0x3b, 0x6f, 0x22, 0x5a, 0x10, 0x42, 0x04, 0xa6, 0x2c, 0xa9, - 0x09, 0x56, 0x32, 0x5c, 0x59, 0x12, 0xc7, 0xcb, 0xf0, 0x40, 0xb9, 0x20, 0xbd, 0xcb, 0x32, 0xa1, - 0xd2, 0x85, 0xde, 0x65, 0xc2, 0xa7, 0xcc, 0xf8, 0xa1, 0xb4, 0xbe, 0xec, 0xc8, 0x65, 0x45, 0x6f, - 0x57, 0x52, 0xbc, 0x48, 0xbd, 0x5d, 0xd1, 0xd6, 0xff, 0x4e, 0x0a, 0x66, 0xd6, 0xdd, 0x5d, 0xab, - 0x6d, 0x7f, 0x8b, 0xa7, 0x8a, 0x73, 0x70, 0x5e, 0xfa, 0x3f, 0xc5, 0xf1, 0xa4, 0x9e, 0x14, 0x70, - 0x94, 0x8a, 0xd9, 0x4a, 0xc1, 0x25, 0x63, 0x26, 0xb5, 0x07, 0xfd, 0x75, 0xb1, 0x61, 0xca, 0xcb, - 0x0e, 0x1c, 0x9d, 0xc3, 0x8d, 0x9f, 0x48, 0xc3, 0x98, 0xf2, 0x09, 0x90, 0x2f, 0xc2, 0xb8, 0xca, - 0x47, 0xb5, 0xfa, 0xa8, 0xd5, 0x9a, 0x1a, 0x16, 0x9a, 0x7d, 0xa8, 0xd5, 0xd2, 0xcc, 0x3e, 0x6c, - 0xa1, 0x23, 0xf4, 0x84, 0x47, 0x9b, 0xf7, 0x12, 0x8e, 0x36, 0x27, 0x7a, 0x74, 0xf2, 0xed, 0xf8, - 0x01, 0x67, 0xf0, 0x37, 0x22, 0x8d, 0x9f, 0x4e, 0x41, 0x3e, 0xfa, 0x91, 0x7e, 0x26, 0xa3, 0x72, - 0x02, 0xfb, 0xfa, 0x8f, 0xa7, 0x83, 0x84, 0xbb, 0x32, 0x0a, 0xe1, 0x69, 0xf5, 0x95, 0x78, 0x47, - 0x33, 0x7d, 0x3f, 0x1b, 0xec, 0x2b, 0x6a, 0xe7, 0xfa, 0xe4, 0xa2, 0xc9, 0x7e, 0xf7, 0xe7, 0x17, - 0x9e, 0x31, 0x3e, 0x84, 0xd9, 0xe8, 0x70, 0xa0, 0xf9, 0xbb, 0x00, 0x53, 0x3a, 0x3c, 0x9a, 0xae, - 0x3b, 0x4a, 0x65, 0x46, 0xf1, 0x8d, 0xdf, 0x4b, 0x47, 0x79, 0x0b, 0xbf, 0x09, 0x26, 0x74, 0xda, - 0xd6, 0x76, 0x33, 0xc8, 0x01, 0xcc, 0x85, 0x0e, 0x07, 0x99, 0xb2, 0xec, 0x24, 0xf9, 0xeb, 0x03, - 0x5f, 0xfa, 0x4c, 0xb2, 0x2f, 0x3d, 0xb9, 0x19, 0xf1, 0x18, 0x52, 0x02, 0xbf, 0x0f, 0xe8, 0x76, - 0x2d, 0xf4, 0x1a, 0x8a, 0x38, 0x0a, 0x15, 0x61, 0x56, 0xcb, 0x05, 0x28, 0xe9, 0x87, 0x42, 0x83, - 0xab, 0x8f, 0x05, 0x9c, 0x38, 0x11, 0x99, 0xac, 0xc0, 0x08, 0x6b, 0xe6, 0x3d, 0xab, 0x23, 0xac, - 0xda, 0x24, 0x88, 0xac, 0x69, 0x06, 0x07, 0x3e, 0x25, 0xb8, 0xa6, 0x49, 0xd9, 0x96, 0xaf, 0xbd, - 0xd9, 0xca, 0x11, 0x8d, 0x3f, 0x49, 0xb1, 0xef, 0xbf, 0xbe, 0xff, 0x39, 0x4b, 0x82, 0xcf, 0xba, - 0xd4, 0xc7, 0xad, 0xe7, 0x0f, 0xd3, 0x3c, 0x8d, 0xb3, 0x58, 0x3e, 0x6f, 0xc0, 0xf0, 0x86, 0xe5, - 0xee, 0x52, 0x5f, 0x24, 0x38, 0x56, 0xb9, 0xf0, 0x82, 0x30, 0x2c, 0xdd, 0xc7, 0xdf, 0xa6, 0x20, - 0x50, 0x6d, 0x61, 0xe9, 0x81, 0x6c, 0x61, 0x8a, 0x79, 0x36, 0xf3, 0xc4, 0xcc, 0xb3, 0xdf, 0x17, - 0x64, 0x6c, 0x2e, 0xf8, 0x03, 0xa4, 0x9a, 0xbb, 0x10, 0x4d, 0x4e, 0x1e, 0x4b, 0x0a, 0x18, 0xb2, - 0x23, 0x37, 0xd5, 0x74, 0xe7, 0x8a, 0x7b, 0xfa, 0x31, 0x89, 0xcd, 0x8d, 0x3f, 0xcc, 0xf0, 0x31, - 0x16, 0x03, 0x75, 0x49, 0x0b, 0x5d, 0xc1, 0xef, 0x24, 0xf2, 0x72, 0x3e, 0x0f, 0x62, 0xb9, 0x04, - 0x59, 0xb6, 0x36, 0xc5, 0x68, 0x22, 0x1e, 0x5b, 0xbf, 0x2a, 0x1e, 0x2b, 0x67, 0xdf, 0x32, 0xee, - 0x49, 0xea, 0x03, 0x13, 0xb8, 0x6d, 0xa9, 0xdf, 0x32, 0x62, 0x90, 0xcb, 0x90, 0x5d, 0x73, 0x1a, - 0x32, 0xa5, 0xe1, 0x2c, 0x06, 0x30, 0x6a, 0x8f, 0x90, 0xcf, 0xa5, 0x4c, 0xc4, 0x60, 0x7d, 0x0d, - 0x92, 0x20, 0xab, 0x7d, 0x6d, 0xed, 0x58, 0x22, 0xf3, 0x8f, 0xda, 0xd7, 0x30, 0x5f, 0xf2, 0x32, - 0x4c, 0xea, 0x4f, 0xcc, 0x09, 0xa7, 0x27, 0x34, 0xb3, 0x46, 0x5e, 0xaa, 0x53, 0xad, 0xe3, 0x3a, - 0x11, 0x59, 0x82, 0x09, 0x2d, 0x95, 0x92, 0xb8, 0x5e, 0x42, 0xf3, 0xa6, 0x9e, 0x88, 0x49, 0x35, - 0x6f, 0x6a, 0x24, 0x6c, 0x3f, 0x17, 0xed, 0x57, 0x2e, 0x99, 0x62, 0x6d, 0x17, 0x38, 0xe4, 0x06, - 0xe4, 0x78, 0xa4, 0x60, 0xb9, 0xa4, 0xde, 0x56, 0x78, 0x08, 0x8b, 0x44, 0xda, 0x4a, 0x44, 0x25, - 0x32, 0xec, 0x0b, 0x90, 0x17, 0x22, 0x29, 0x7c, 0xcc, 0xed, 0x1c, 0x64, 0x8b, 0xe5, 0x92, 0xa9, - 0x8a, 0x91, 0xba, 0xdd, 0x70, 0x4d, 0x84, 0x1a, 0xdf, 0x49, 0xc1, 0xd9, 0x35, 0xea, 0x1f, 0x38, - 0xee, 0xbe, 0x49, 0x3d, 0xdf, 0xb5, 0xf9, 0xfb, 0x24, 0xf8, 0x21, 0x7e, 0x91, 0xbc, 0x0d, 0x43, - 0xe8, 0x7d, 0x13, 0xd9, 0x19, 0xa2, 0x75, 0x2c, 0x4d, 0x88, 0x05, 0x3c, 0x84, 0xae, 0x3c, 0x26, - 0x27, 0x22, 0x6f, 0x40, 0xb6, 0x44, 0xdb, 0x87, 0x91, 0x17, 0x1a, 0x62, 0xc4, 0x81, 0x40, 0x68, - 0xd0, 0xf6, 0xa1, 0x89, 0x24, 0xc6, 0x4f, 0xa7, 0xe1, 0x54, 0x42, 0xb3, 0xee, 0x7f, 0xf1, 0x29, - 0x95, 0x8a, 0x4b, 0x9a, 0x54, 0xbc, 0x20, 0x48, 0x7b, 0x0e, 0x7c, 0xa2, 0x90, 0xfc, 0x9b, 0x29, - 0x38, 0xa3, 0x2f, 0x50, 0xe1, 0x6e, 0x77, 0xff, 0x06, 0x79, 0x0b, 0x86, 0x57, 0xa8, 0xd5, 0xa0, - 0x32, 0x25, 0xfc, 0xa9, 0x20, 0xa7, 0x07, 0x0f, 0x83, 0xe2, 0x85, 0x9c, 0x6d, 0xe8, 0x34, 0xcf, - 0xa1, 0xa4, 0x24, 0x1a, 0xc7, 0xf5, 0x71, 0x43, 0x86, 0x24, 0x26, 0x55, 0xd5, 0xe7, 0x9e, 0xfd, - 0x7b, 0x29, 0x78, 0xb6, 0x0f, 0x0d, 0x9b, 0x38, 0x36, 0xf5, 0xea, 0xc4, 0xe1, 0x8e, 0x8a, 0x50, - 0xf2, 0x2e, 0x4c, 0x6d, 0x08, 0x7d, 0x5e, 0x4e, 0x47, 0x3a, 0xfc, 0x5e, 0xa4, 0xaa, 0x5f, 0x93, - 0xf3, 0x12, 0x45, 0xd6, 0x62, 0x65, 0x33, 0x7d, 0x63, 0x65, 0xd5, 0xd0, 0xd3, 0xec, 0xa0, 0xa1, - 0xa7, 0x1f, 0x46, 0x1f, 0x66, 0x16, 0x19, 0xc0, 0xc2, 0xc0, 0xdb, 0x54, 0xef, 0xc0, 0xdb, 0xbe, - 0x79, 0x86, 0xf0, 0x45, 0x07, 0x9d, 0xf7, 0xe3, 0xce, 0xe7, 0x3b, 0xda, 0x7c, 0x3e, 0x9b, 0x3c, - 0x9f, 0xbd, 0x27, 0xf2, 0x7f, 0x4c, 0x45, 0x3b, 0x3b, 0xd0, 0x0c, 0x1a, 0x30, 0x5c, 0x72, 0x5a, - 0x96, 0xdd, 0x56, 0xdf, 0x06, 0x6c, 0x20, 0xc4, 0x14, 0x25, 0x83, 0xc5, 0x29, 0x5f, 0x80, 0xa1, - 0x35, 0xa7, 0x5d, 0x28, 0x09, 0xdf, 0x3a, 0xe4, 0xd3, 0x76, 0xda, 0x35, 0xab, 0x61, 0xf2, 0x02, - 0xb2, 0x0a, 0x50, 0xad, 0xbb, 0x94, 0xb6, 0xab, 0xf6, 0xb7, 0x68, 0x44, 0xd3, 0x60, 0x23, 0xd4, - 0xec, 0xa2, 0x60, 0xc1, 0x3b, 0x1e, 0x0f, 0x11, 0x6b, 0x9e, 0xfd, 0x2d, 0x55, 0xde, 0x2a, 0xf4, - 0x06, 0x05, 0x08, 0x89, 0xf0, 0xa1, 0x24, 0xbb, 0x21, 0x1e, 0xbf, 0x9c, 0x10, 0x0f, 0x25, 0x31, - 0x80, 0xf6, 0x50, 0x12, 0x03, 0x30, 0xd1, 0xbe, 0x42, 0xed, 0xdd, 0x3d, 0xee, 0xaf, 0x31, 0xc1, - 0x97, 0xea, 0x1e, 0x42, 0x54, 0xd1, 0xce, 0x71, 0x8c, 0x1f, 0x1d, 0x82, 0xb3, 0x26, 0xdd, 0xb5, - 0x99, 0x9a, 0xbc, 0xe9, 0xd9, 0xed, 0x5d, 0x2d, 0x92, 0xd4, 0x88, 0x2c, 0x24, 0x91, 0xbc, 0x94, - 0x41, 0x82, 0x81, 0xb9, 0x02, 0x39, 0xb6, 0x2b, 0x2a, 0x6b, 0x09, 0xef, 0x50, 0xf0, 0x65, 0x5f, - 0xbe, 0xc8, 0x65, 0x31, 0x79, 0x59, 0xec, 0xda, 0x4a, 0x7a, 0x69, 0xb6, 0x6b, 0x7f, 0x72, 0xb4, - 0x00, 0xd5, 0x43, 0xcf, 0xa7, 0x78, 0x62, 0x13, 0x3b, 0x77, 0xa0, 0x5a, 0x67, 0x7b, 0xa8, 0xd6, - 0xf7, 0x60, 0xb6, 0xd0, 0xe0, 0xc2, 0xda, 0x6a, 0x56, 0x5c, 0xbb, 0x5d, 0xb7, 0x3b, 0x56, 0x53, - 0x1e, 0x17, 0x71, 0x94, 0xad, 0xa0, 0xbc, 0xd6, 0x09, 0x10, 0xcc, 0x44, 0x32, 0xd6, 0x8d, 0xd2, - 0x5a, 0x95, 0xbf, 0x5a, 0xcf, 0xaf, 0xc7, 0xb0, 0x1b, 0x8d, 0xb6, 0xc7, 0x9f, 0xad, 0x37, 0x83, - 0x62, 0x54, 0xea, 0xd1, 0x07, 0x61, 0x63, 0xb5, 0x1a, 0xc6, 0x9a, 0xf0, 0xec, 0x97, 0xdc, 0x4f, - 0xc1, 0x6f, 0x7a, 0xe8, 0xab, 0xa0, 0xe1, 0x85, 0x74, 0xd5, 0xea, 0x0a, 0xa3, 0xcb, 0xc5, 0xe8, - 0x3c, 0x6f, 0x4f, 0xa5, 0xe3, 0x78, 0xe4, 0x1a, 0x5b, 0x0a, 0x2d, 0xc7, 0xa7, 0xb8, 0xce, 0x47, - 0xc3, 0x23, 0x80, 0x8b, 0x50, 0x7e, 0x04, 0x50, 0x50, 0xc8, 0xdb, 0x30, 0xb3, 0x5c, 0x5c, 0x94, - 0x46, 0xcd, 0x92, 0x53, 0xef, 0xe2, 0xad, 0x32, 0x60, 0x7d, 0x38, 0x87, 0xb4, 0xbe, 0xc8, 0x16, - 0x77, 0x12, 0x1a, 0xb9, 0x04, 0x23, 0xe5, 0x12, 0x1f, 0xfb, 0x31, 0x35, 0xc5, 0xbb, 0xf0, 0xd6, - 0x90, 0x85, 0x64, 0x3d, 0xd4, 0x51, 0xc7, 0x8f, 0x55, 0x26, 0xcf, 0x1e, 0xaf, 0x9f, 0x8a, 0x4c, - 0xf0, 0xfc, 0xc5, 0x91, 0xa2, 0xd3, 0xa0, 0xde, 0xfd, 0xeb, 0x9f, 0xb3, 0x4c, 0xf0, 0x4a, 0xdf, - 0x50, 0x7a, 0x5d, 0x4f, 0x14, 0x75, 0xff, 0x06, 0x66, 0x82, 0x8f, 0xe1, 0x92, 0x2f, 0xc3, 0x10, - 0xfe, 0x14, 0x7a, 0xcf, 0x4c, 0x02, 0xdb, 0x50, 0xe7, 0xa9, 0xf3, 0xb7, 0x3d, 0x91, 0x80, 0x94, - 0x61, 0x44, 0xa8, 0xdc, 0x27, 0xc9, 0x67, 0x2c, 0x74, 0x77, 0x3e, 0x49, 0x82, 0xde, 0x68, 0xc0, - 0xb8, 0x5a, 0x21, 0x5b, 0x9c, 0x2b, 0x96, 0xb7, 0x47, 0x1b, 0xec, 0x97, 0x78, 0x8a, 0x00, 0x17, - 0xe7, 0x1e, 0x42, 0x6b, 0xac, 0x1d, 0xa6, 0x82, 0xc2, 0xa4, 0x6d, 0xd9, 0xdb, 0xf4, 0x44, 0x53, - 0xc4, 0x21, 0xdc, 0x46, 0x83, 0x4e, 0xc3, 0x14, 0x45, 0xc6, 0xf7, 0xc1, 0xec, 0x5a, 0xb7, 0xd9, - 0x64, 0x07, 0x72, 0x99, 0xaa, 0xd6, 0xb7, 0x7c, 0x4a, 0x96, 0x60, 0xa8, 0xaa, 0xbc, 0x16, 0x36, - 0xa3, 0xbf, 0xc9, 0xcf, 0x1f, 0x0b, 0x3b, 0x23, 0x8e, 0x43, 0x53, 0xd1, 0x77, 0xc2, 0x38, 0xa9, - 0xf1, 0x3b, 0xe1, 0x2b, 0xb3, 0x1b, 0xae, 0x55, 0xdf, 0x0f, 0x5e, 0x8c, 0x1b, 0xf4, 0xc1, 0xdc, - 0x3b, 0xb2, 0x11, 0xfa, 0x56, 0x96, 0xd4, 0xe0, 0xe3, 0x1a, 0x43, 0xde, 0x86, 0x31, 0xb1, 0x9d, - 0x29, 0xd9, 0x53, 0x30, 0x44, 0x5d, 0x3e, 0x59, 0x1d, 0x71, 0x37, 0x50, 0xd1, 0x71, 0x97, 0xd6, - 0xbb, 0x72, 0xff, 0xfa, 0x67, 0xb1, 0x4b, 0xeb, 0x75, 0xf4, 0x59, 0xba, 0xff, 0x64, 0x2c, 0x3a, - 0xb6, 0x62, 0xed, 0xde, 0x54, 0xf3, 0x25, 0xa4, 0xc2, 0x33, 0x53, 0x98, 0x2f, 0x41, 0x3d, 0x33, - 0x05, 0xa8, 0xc1, 0x9c, 0xa4, 0x8f, 0x99, 0x93, 0x77, 0xe5, 0x9c, 0x64, 0x7a, 0x2f, 0x8c, 0x99, - 0x3e, 0xf3, 0x50, 0x0d, 0xbf, 0x90, 0xec, 0x40, 0x07, 0xee, 0x67, 0x30, 0x31, 0x24, 0x27, 0x89, - 0x0a, 0x34, 0xc1, 0x49, 0x3d, 0xc5, 0x0f, 0x0d, 0xce, 0xf4, 0x98, 0x53, 0xfc, 0x9b, 0x30, 0x5e, - 0xf0, 0x7d, 0xab, 0xbe, 0x47, 0x1b, 0x25, 0x26, 0x9e, 0x94, 0xd0, 0x6e, 0x4b, 0xc0, 0xd5, 0xeb, - 0x14, 0x15, 0x97, 0xa7, 0x2a, 0xb2, 0x3c, 0xe1, 0xed, 0x16, 0xa4, 0x2a, 0x62, 0x10, 0x3d, 0x55, - 0x11, 0x83, 0x90, 0x6b, 0x30, 0x52, 0x6e, 0x3f, 0xb0, 0xd9, 0x98, 0xe4, 0x94, 0x77, 0xb1, 0x39, - 0x48, 0x15, 0xae, 0x02, 0x8b, 0xbc, 0xa1, 0xa8, 0xbb, 0xa3, 0xe1, 0xd1, 0x96, 0x1b, 0x43, 0x6a, - 0x52, 0xeb, 0x55, 0x55, 0xd9, 0x40, 0xff, 0xbd, 0x09, 0x23, 0xd2, 0xc6, 0x05, 0xe1, 0x71, 0x56, - 0x50, 0xc6, 0xc3, 0xea, 0x24, 0x32, 0x3e, 0x32, 0xa6, 0x3c, 0xa9, 0x30, 0xa6, 0x3c, 0x32, 0xa6, - 0x3c, 0xa9, 0xa0, 0x3d, 0x32, 0xa6, 0x3c, 0xae, 0x10, 0x98, 0x07, 0xc6, 0x8f, 0x35, 0x0f, 0xdc, - 0x87, 0xf1, 0x8a, 0xe5, 0xfa, 0x36, 0x53, 0x17, 0xda, 0xbe, 0x37, 0x37, 0xa1, 0x59, 0xd4, 0x94, - 0xa2, 0xa5, 0xe7, 0xe4, 0x63, 0x5b, 0x1d, 0x05, 0x5f, 0x7f, 0x15, 0x2a, 0x84, 0x27, 0xfb, 0xba, - 0x4d, 0x3e, 0x8e, 0xaf, 0x1b, 0x0e, 0x2a, 0x5a, 0x51, 0xa6, 0xc2, 0xb3, 0x3a, 0xaa, 0xb3, 0x11, - 0x53, 0x4a, 0x80, 0x48, 0xbe, 0x0a, 0xe3, 0xec, 0x6f, 0x7c, 0x8a, 0xda, 0xa6, 0xde, 0x5c, 0x1e, - 0x3b, 0xf7, 0x5c, 0xe2, 0xd7, 0xcf, 0xdf, 0xab, 0xae, 0x52, 0x9f, 0x7f, 0xc0, 0xc8, 0x38, 0x6a, - 0x1e, 0xd5, 0xb8, 0x91, 0xf7, 0x60, 0x5c, 0x3e, 0x97, 0x8e, 0x93, 0x34, 0x1d, 0x7a, 0x2b, 0x36, - 0x04, 0x3c, 0x96, 0x2d, 0x4c, 0x25, 0x60, 0xdb, 0x7c, 0xa1, 0xc3, 0x05, 0x24, 0x51, 0x56, 0x7b, - 0x27, 0x26, 0x1c, 0x25, 0x1a, 0x79, 0x1f, 0xc6, 0x0b, 0x9d, 0x4e, 0x28, 0x71, 0x66, 0x14, 0x13, - 0x49, 0xa7, 0x53, 0x4b, 0x94, 0x3a, 0x1a, 0x45, 0x54, 0x30, 0xcf, 0x9e, 0x48, 0x30, 0x93, 0xd7, - 0x02, 0xc5, 0xf9, 0x54, 0x68, 0xef, 0x13, 0x47, 0x0a, 0x4d, 0x0b, 0xe7, 0x3a, 0x74, 0x11, 0x26, - 0xb8, 0x01, 0x4c, 0x6a, 0x33, 0xa7, 0x63, 0x5f, 0x4f, 0x82, 0x52, 0xa3, 0xd3, 0x90, 0x65, 0x98, - 0xe4, 0xc1, 0x48, 0x4d, 0x91, 0xc6, 0x6d, 0xee, 0x4c, 0xf8, 0xe0, 0x29, 0x8f, 0x61, 0x6a, 0x62, - 0x76, 0x5f, 0x4b, 0xe3, 0x12, 0x21, 0x32, 0xfe, 0x28, 0x05, 0x67, 0x7a, 0xcc, 0x78, 0x90, 0xe4, - 0x2b, 0x75, 0xcc, 0x9b, 0xef, 0xd7, 0x42, 0x2d, 0x4b, 0xb1, 0x77, 0x0a, 0x2d, 0x4b, 0x9d, 0x2f, - 0xa9, 0x6f, 0x39, 0x40, 0xc4, 0x8b, 0xef, 0xca, 0xcb, 0xe8, 0x22, 0xd3, 0x64, 0x64, 0x13, 0xd2, - 0x5e, 0x86, 0x5f, 0x32, 0x1e, 0x1d, 0x2d, 0x3c, 0xe7, 0x72, 0x50, 0x30, 0xad, 0x1f, 0x3b, 0xda, - 0x17, 0x9c, 0xc0, 0xda, 0x38, 0x4a, 0xc1, 0x98, 0xf2, 0x1d, 0x92, 0x0b, 0x4a, 0xa0, 0x56, 0x9e, - 0xe7, 0x49, 0x57, 0x38, 0xa4, 0xf9, 0x4e, 0x84, 0x1f, 0x55, 0xfa, 0x78, 0xd3, 0xe4, 0x3d, 0xa6, - 0x0a, 0x29, 0x89, 0xd0, 0x5a, 0x9a, 0x1d, 0xd1, 0xc4, 0x72, 0x7c, 0x23, 0xd0, 0xf2, 0xfc, 0x42, - 0xdd, 0xb7, 0x1f, 0xd0, 0x01, 0x36, 0x9d, 0xf0, 0x8d, 0x40, 0xcb, 0xf3, 0x6b, 0x16, 0x92, 0xc5, - 0xde, 0x08, 0x0c, 0x18, 0x1a, 0x3f, 0x9c, 0x02, 0xd8, 0x2c, 0x17, 0x31, 0x93, 0xe1, 0xe3, 0x2a, - 0x05, 0xc9, 0xd9, 0xa1, 0x24, 0xf7, 0x3e, 0xea, 0x40, 0x05, 0x26, 0x75, 0x2c, 0xf2, 0x2e, 0x4c, - 0x55, 0xeb, 0xae, 0xd3, 0x6c, 0x6e, 0x5b, 0xf5, 0xfd, 0x55, 0xbb, 0x4d, 0x79, 0x5a, 0x9e, 0x21, - 0xbe, 0x15, 0x79, 0x41, 0x51, 0xad, 0xc9, 0xca, 0xcc, 0x28, 0xb2, 0xf1, 0xa7, 0x29, 0x18, 0x2b, - 0xb7, 0x3d, 0xdf, 0x6a, 0x36, 0x51, 0xd9, 0xf9, 0x3c, 0x3d, 0x95, 0x11, 0xf4, 0xab, 0xcf, 0x88, - 0xbe, 0x0e, 0x53, 0x11, 0x34, 0x76, 0x48, 0xaf, 0x62, 0x1c, 0xa9, 0x7a, 0x48, 0xe7, 0x91, 0xa5, - 0xa6, 0x28, 0x31, 0x96, 0x15, 0xb2, 0xfb, 0xd7, 0xf1, 0xa6, 0x6d, 0x11, 0xc0, 0x96, 0x20, 0x79, - 0xa4, 0x20, 0xd1, 0x96, 0xdc, 0xbf, 0x6e, 0x2a, 0x58, 0xc6, 0x1a, 0x0c, 0x57, 0x1d, 0xd7, 0x5f, - 0x3a, 0xe4, 0x5a, 0x7c, 0x89, 0x7a, 0x75, 0xf5, 0x2a, 0xcd, 0x46, 0xf3, 0x75, 0xdd, 0x14, 0x45, - 0xec, 0x0c, 0x7f, 0xcb, 0xa6, 0xcd, 0x86, 0xea, 0x33, 0xb9, 0xc3, 0x00, 0x26, 0x87, 0xb3, 0x93, - 0xce, 0xe9, 0x30, 0xd3, 0x6e, 0xe8, 0x9c, 0xf9, 0xb8, 0x0b, 0xb6, 0xa8, 0x8d, 0xef, 0xf3, 0xfa, - 0x4b, 0x94, 0x5a, 0x4d, 0x7d, 0x86, 0xfa, 0xdf, 0x4d, 0xc1, 0x7c, 0x6f, 0x12, 0xd5, 0xdf, 0x33, - 0xd5, 0xc7, 0xdf, 0xf3, 0xc5, 0xe8, 0xd5, 0x0f, 0xa2, 0x89, 0xab, 0x9f, 0xf0, 0xc2, 0xa7, 0x84, - 0xee, 0xb6, 0xf5, 0xe0, 0x4d, 0xdf, 0x0b, 0x7d, 0xda, 0x8c, 0x88, 0x7c, 0x9a, 0x7d, 0xa4, 0x31, - 0x05, 0xad, 0xf1, 0x1b, 0x59, 0x38, 0xdb, 0x93, 0x82, 0xac, 0x28, 0x49, 0xbb, 0x27, 0x83, 0x74, - 0xc1, 0x3d, 0xf1, 0xaf, 0xe2, 0xbf, 0xe8, 0x51, 0x15, 0x8d, 0x02, 0x59, 0x0f, 0x92, 0x35, 0xa7, - 0x91, 0xd7, 0x2b, 0xc7, 0xf2, 0xe2, 0xe8, 0xc8, 0x0c, 0xe2, 0x79, 0x9b, 0x31, 0x58, 0x87, 0xfa, - 0x96, 0xdd, 0xf4, 0xd4, 0xcf, 0xae, 0xc1, 0x41, 0xa6, 0x2c, 0x0b, 0x9d, 0x70, 0xb3, 0xc9, 0x4e, - 0xb8, 0xc6, 0xff, 0x99, 0x82, 0xd1, 0xa0, 0xd9, 0x64, 0x1e, 0x4e, 0x6f, 0x98, 0x85, 0xe2, 0x72, - 0x6d, 0xe3, 0xc3, 0xca, 0x72, 0x6d, 0x73, 0xad, 0x5a, 0x59, 0x2e, 0x96, 0x6f, 0x95, 0x97, 0x4b, - 0xf9, 0x67, 0xc8, 0x34, 0x4c, 0x6c, 0xae, 0xdd, 0x5d, 0x5b, 0xdf, 0x5a, 0xab, 0x2d, 0x9b, 0xe6, - 0xba, 0x99, 0x4f, 0x91, 0x09, 0x18, 0x35, 0x97, 0x0a, 0xc5, 0xda, 0xda, 0x7a, 0x69, 0x39, 0x9f, - 0x26, 0x79, 0x18, 0x2f, 0xae, 0xaf, 0xad, 0x2d, 0x17, 0x37, 0xca, 0xf7, 0xcb, 0x1b, 0x1f, 0xe6, - 0x33, 0x84, 0xc0, 0x24, 0x22, 0x54, 0xcc, 0xf2, 0x5a, 0xb1, 0x5c, 0x29, 0xac, 0xe6, 0xb3, 0x0c, - 0xc6, 0xf0, 0x15, 0xd8, 0x50, 0xc0, 0xe8, 0xee, 0xe6, 0xd2, 0x72, 0x7e, 0x98, 0xa1, 0xb0, 0xbf, - 0x14, 0x94, 0x11, 0x56, 0x3d, 0xa2, 0x94, 0x0a, 0x1b, 0x85, 0xa5, 0x42, 0x75, 0x39, 0x9f, 0x23, - 0x67, 0x60, 0x46, 0x03, 0xd5, 0x56, 0xd7, 0x6f, 0x97, 0xd7, 0xf2, 0xa3, 0x64, 0x16, 0xf2, 0x01, - 0xac, 0xb4, 0x54, 0xdb, 0xac, 0x2e, 0x9b, 0x79, 0x88, 0x42, 0xd7, 0x0a, 0xf7, 0x96, 0xf3, 0x63, - 0xc6, 0x3b, 0x3c, 0x3e, 0x87, 0x0f, 0x35, 0x39, 0x0d, 0xa4, 0xba, 0x51, 0xd8, 0xd8, 0xac, 0x46, - 0x3a, 0x3f, 0x06, 0x23, 0xd5, 0xcd, 0x62, 0x71, 0xb9, 0x5a, 0xcd, 0xa7, 0x08, 0xc0, 0xf0, 0xad, - 0x42, 0x79, 0x75, 0xb9, 0x94, 0x4f, 0x1b, 0x3f, 0x95, 0x82, 0x69, 0xa9, 0x7a, 0x49, 0x3b, 0xfe, - 0x63, 0x7e, 0x8b, 0xef, 0x6a, 0x27, 0x4a, 0x19, 0x3e, 0x11, 0xa9, 0xa4, 0xcf, 0x67, 0xe8, 0xc2, - 0xa9, 0x44, 0x64, 0xf2, 0x21, 0xe4, 0x65, 0x03, 0xee, 0x59, 0x7e, 0x7d, 0x2f, 0x14, 0x63, 0xcf, - 0x45, 0x2a, 0x89, 0xa0, 0x71, 0xcb, 0x5e, 0xf8, 0x16, 0x57, 0x8c, 0x8d, 0xf1, 0xdd, 0x14, 0x9c, - 0xe9, 0x41, 0x4c, 0x8a, 0x30, 0x1c, 0xe4, 0x30, 0xee, 0xe3, 0x29, 0x34, 0xfb, 0xbd, 0xa3, 0x05, - 0x81, 0x88, 0x4f, 0x12, 0xe1, 0x5f, 0xe6, 0x70, 0x90, 0x94, 0x18, 0x33, 0x03, 0xf3, 0x31, 0x39, - 0x1b, 0x19, 0x4e, 0x51, 0x53, 0x61, 0xab, 0xba, 0x34, 0x26, 0x06, 0x24, 0x63, 0x1d, 0x78, 0x98, - 0x1a, 0xd8, 0xf8, 0x4e, 0x8a, 0xa9, 0x4a, 0x51, 0x44, 0xa6, 0x41, 0x16, 0x3c, 0xaf, 0xdb, 0xa2, - 0xa6, 0xd3, 0xa4, 0x05, 0x73, 0x4d, 0xec, 0x05, 0xa8, 0xfb, 0x59, 0x58, 0x80, 0x4a, 0x7a, 0xcd, - 0x72, 0xdb, 0xda, 0xad, 0xa0, 0x4a, 0x43, 0xde, 0x00, 0x08, 0x5e, 0x71, 0x96, 0x41, 0xe9, 0x3c, - 0x8d, 0x81, 0x80, 0xea, 0xda, 0xab, 0x82, 0x6c, 0xfc, 0x95, 0x14, 0x8c, 0x8b, 0x23, 0x48, 0xa1, - 0x49, 0x5d, 0xff, 0xf1, 0xd6, 0xcc, 0x1b, 0xda, 0x9a, 0x09, 0x1c, 0xe3, 0x15, 0xfe, 0xac, 0x38, - 0x71, 0xb9, 0xfc, 0xc7, 0x29, 0xc8, 0x47, 0x11, 0xc9, 0xbb, 0x90, 0xab, 0xd2, 0x07, 0xd4, 0xb5, - 0xfd, 0xc3, 0xc8, 0x3b, 0xf3, 0x1c, 0x47, 0x94, 0x71, 0x4b, 0xa7, 0x27, 0x7e, 0x99, 0x01, 0xcd, - 0xa0, 0x42, 0x5c, 0x31, 0x22, 0x64, 0x9e, 0x94, 0x11, 0xc1, 0xf8, 0xaf, 0xd3, 0x70, 0xe6, 0x36, - 0xf5, 0xd5, 0x3e, 0x05, 0xd7, 0xb8, 0x5f, 0x18, 0xac, 0x5f, 0x4a, 0x4f, 0xe6, 0x60, 0x04, 0x8b, - 0xe4, 0xfc, 0x9a, 0xf2, 0x27, 0x59, 0x0a, 0xd6, 0x75, 0x46, 0x4b, 0x27, 0xdf, 0xa3, 0xee, 0xab, - 0x4a, 0x82, 0xe9, 0x60, 0x59, 0x5f, 0x82, 0x49, 0xcc, 0xa0, 0xd8, 0x65, 0x9f, 0x03, 0x6d, 0x08, - 0x63, 0x4a, 0xce, 0x8c, 0x40, 0xc9, 0xcb, 0x90, 0x67, 0x90, 0x42, 0x7d, 0xbf, 0xed, 0x1c, 0x34, - 0x69, 0x63, 0x97, 0xf2, 0xb7, 0x7c, 0x73, 0x66, 0x0c, 0x2e, 0x79, 0x6e, 0xb6, 0xf9, 0x41, 0x88, - 0x36, 0xd0, 0xe2, 0x21, 0x78, 0x86, 0xd0, 0xf9, 0x37, 0x60, 0xec, 0x53, 0x26, 0x8b, 0x37, 0xfe, - 0xab, 0x14, 0xcc, 0x62, 0xe7, 0x94, 0x8a, 0xd1, 0x14, 0xfe, 0x85, 0x70, 0xb4, 0x94, 0xfc, 0xc9, - 0x16, 0x03, 0xe9, 0x9f, 0x42, 0x30, 0x8a, 0xa1, 0x85, 0x25, 0x3d, 0x80, 0x85, 0xa5, 0x7a, 0x92, - 0xa7, 0xff, 0x06, 0x34, 0x10, 0xf1, 0x07, 0x9b, 0xc3, 0x29, 0x37, 0xfe, 0x52, 0x1a, 0x46, 0x4c, - 0x8a, 0x6f, 0xa2, 0x91, 0x4b, 0x30, 0xb2, 0xe6, 0xf8, 0xd4, 0xbb, 0xa7, 0x3d, 0x80, 0xd7, 0x66, - 0xa0, 0x5a, 0xab, 0x61, 0xca, 0x42, 0xb6, 0xe0, 0x2b, 0xae, 0xd3, 0xe8, 0xd6, 0x7d, 0x75, 0xc1, - 0x77, 0x38, 0xc8, 0x94, 0x65, 0xe4, 0x55, 0x18, 0x15, 0x9c, 0x83, 0xcb, 0x33, 0x74, 0xfa, 0x74, - 0x69, 0xf0, 0xa6, 0x5e, 0x88, 0x80, 0x8a, 0x2a, 0xd7, 0x1a, 0xb2, 0x8a, 0xa2, 0x1a, 0x53, 0x04, - 0xa4, 0xfe, 0x3d, 0xd4, 0x47, 0xff, 0xfe, 0x02, 0x0c, 0x17, 0x3c, 0x8f, 0xfa, 0x32, 0x5e, 0x77, - 0x3c, 0xc8, 0x11, 0xe2, 0x51, 0x9f, 0x33, 0xb6, 0xb0, 0xdc, 0x14, 0x78, 0xc6, 0x9f, 0xa4, 0x61, - 0x08, 0xff, 0xc4, 0x0b, 0x43, 0xb7, 0xbe, 0xa7, 0x5d, 0x18, 0xba, 0xf5, 0x3d, 0x13, 0xa1, 0xe4, - 0x3a, 0x9e, 0xfb, 0x65, 0xaa, 0x6f, 0xd1, 0x7b, 0x34, 0x68, 0x37, 0x42, 0xb0, 0xa9, 0xe2, 0x04, - 0x37, 0xa9, 0x99, 0xc4, 0x28, 0xfd, 0xd3, 0x90, 0x5e, 0xaf, 0x8a, 0x1e, 0x63, 0x0a, 0x10, 0xc7, - 0x33, 0xd3, 0xeb, 0x55, 0x1c, 0x8d, 0x95, 0xc2, 0xe2, 0xeb, 0x37, 0xd5, 0xb7, 0x1a, 0xbd, 0x3d, - 0x6b, 0xf1, 0xf5, 0x9b, 0xa6, 0x28, 0x61, 0xe3, 0x8b, 0x6d, 0xc6, 0x1b, 0x45, 0x1e, 0xe2, 0x8a, - 0xe3, 0x8b, 0x7d, 0xc3, 0xdb, 0x43, 0x33, 0x44, 0x20, 0x8b, 0x30, 0x26, 0xa2, 0x9a, 0x11, 0x5f, - 0x89, 0x3a, 0x16, 0x51, 0xcf, 0x9c, 0x42, 0x45, 0xe2, 0x77, 0x4b, 0x62, 0x82, 0xe4, 0x83, 0x44, - 0xe2, 0x6e, 0x49, 0x4e, 0xa1, 0x67, 0x2a, 0x28, 0x61, 0x84, 0x6e, 0x18, 0xba, 0xaa, 0x46, 0xe8, - 0x62, 0x46, 0xcc, 0x00, 0xc1, 0xf8, 0xc5, 0x34, 0xe4, 0x2a, 0xcd, 0xee, 0xae, 0xdd, 0xbe, 0x7f, - 0xfd, 0xcf, 0xf4, 0xbd, 0xf0, 0xd7, 0x00, 0x37, 0x09, 0x71, 0x22, 0x90, 0xe6, 0x61, 0xde, 0x34, - 0xa1, 0x7c, 0x70, 0x12, 0x44, 0x23, 0x37, 0x40, 0x2c, 0x4c, 0xf1, 0x7c, 0xdc, 0x29, 0x9d, 0x80, - 0x3f, 0x25, 0x22, 0x49, 0x04, 0x2a, 0x79, 0x1b, 0xc6, 0xc2, 0x87, 0x9b, 0xc3, 0x57, 0xe1, 0x54, - 0xca, 0x62, 0x58, 0x7e, 0xff, 0xba, 0xa9, 0xa2, 0x1b, 0xff, 0x7c, 0x08, 0xc6, 0xd5, 0xf6, 0x10, - 0x13, 0x66, 0xbc, 0x26, 0x3b, 0x0a, 0x0b, 0xa7, 0x9e, 0x0e, 0x16, 0x8a, 0xed, 0xf4, 0x82, 0xde, - 0x20, 0x86, 0xc7, 0x3d, 0x7c, 0xaa, 0xd4, 0xf7, 0xed, 0xf6, 0xae, 0xb7, 0xf2, 0x8c, 0x39, 0xed, - 0x85, 0x60, 0x8e, 0x47, 0x0a, 0x90, 0x73, 0x3a, 0xde, 0x2e, 0x6d, 0xdb, 0xf2, 0xf6, 0xe2, 0xa2, - 0xc6, 0x68, 0x5d, 0x14, 0xc6, 0x78, 0x05, 0x64, 0xe4, 0x75, 0x18, 0x76, 0x3a, 0xb4, 0x6d, 0xd9, - 0x62, 0x8f, 0x7b, 0x36, 0xc2, 0x80, 0xb6, 0x0b, 0x65, 0x85, 0x50, 0x20, 0x93, 0x6b, 0x90, 0x75, - 0xf6, 0x83, 0xf9, 0x3a, 0xab, 0x13, 0xed, 0xfb, 0x96, 0x42, 0x82, 0x88, 0x8c, 0xe0, 0x63, 0xab, - 0xb5, 0x23, 0x66, 0x4c, 0x27, 0xb8, 0x63, 0xb5, 0x76, 0x54, 0x02, 0x86, 0x48, 0xde, 0x03, 0xe8, - 0x58, 0xbb, 0xd4, 0xad, 0x35, 0xba, 0xfe, 0xa1, 0x98, 0xb7, 0xe7, 0x34, 0xb2, 0x0a, 0x2b, 0x2e, - 0x75, 0xfd, 0x43, 0x85, 0x76, 0xb4, 0x23, 0x81, 0xa4, 0x00, 0xd0, 0xb2, 0x7c, 0x9f, 0xba, 0x2d, - 0x47, 0x78, 0x55, 0x8d, 0x2d, 0x2e, 0x68, 0x0c, 0xee, 0x05, 0xc5, 0x0a, 0x07, 0x85, 0x08, 0x1b, - 0x6d, 0xbb, 0x96, 0x78, 0xc4, 0x2f, 0xd2, 0x68, 0xdb, 0xd5, 0x7a, 0xc9, 0x10, 0xc9, 0x97, 0x61, - 0xa4, 0x61, 0x7b, 0x75, 0xc7, 0x6d, 0x88, 0xe7, 0xe0, 0xcf, 0x69, 0x34, 0x25, 0x5e, 0xa6, 0x90, - 0x49, 0x74, 0xd6, 0x5a, 0x91, 0xf1, 0x6a, 0xcd, 0x39, 0x10, 0x0f, 0xc4, 0xeb, 0xad, 0xad, 0x06, - 0xc5, 0x6a, 0x6b, 0x43, 0x22, 0x36, 0x95, 0xbb, 0xb6, 0xdf, 0xb4, 0xb6, 0xc5, 0x05, 0xae, 0x3e, - 0x95, 0xb7, 0xb1, 0x48, 0x9d, 0x4a, 0x8e, 0x4c, 0x9e, 0x03, 0xd8, 0xa5, 0x6d, 0xca, 0xa3, 0x2c, - 0xb9, 0xc9, 0xdd, 0x54, 0x20, 0x6f, 0x66, 0xff, 0xfb, 0x9f, 0x5f, 0x48, 0x2d, 0x01, 0xe4, 0x3c, - 0x41, 0x6b, 0xac, 0xc2, 0xd9, 0x9e, 0x0b, 0x95, 0x5c, 0x81, 0xfc, 0x8e, 0x25, 0xac, 0x3e, 0xf5, - 0x3d, 0xab, 0xdd, 0xa6, 0x4d, 0x21, 0x22, 0xa6, 0x24, 0xbc, 0xc8, 0xc1, 0x9c, 0xb3, 0xf1, 0x1e, - 0xcc, 0x26, 0xb5, 0x90, 0x3c, 0x0f, 0xe3, 0x6a, 0x9e, 0x04, 0xc1, 0x64, 0xcc, 0xea, 0xd8, 0x32, - 0x53, 0x82, 0x60, 0xf0, 0xeb, 0x29, 0x38, 0xd7, 0x6f, 0xbd, 0x93, 0x79, 0xc8, 0x75, 0x5c, 0xdb, - 0x41, 0xbd, 0x8a, 0x4b, 0xa5, 0xe0, 0x37, 0x39, 0x0f, 0xc0, 0x15, 0x00, 0xdf, 0xda, 0x15, 0x9e, - 0xdf, 0xe6, 0x28, 0x42, 0x36, 0xac, 0x5d, 0x8f, 0xbc, 0x02, 0xd3, 0x0d, 0xba, 0x63, 0x75, 0x9b, - 0x7e, 0xcd, 0xab, 0xef, 0xd1, 0x06, 0x06, 0x5b, 0xa0, 0x47, 0x8f, 0x99, 0x17, 0x05, 0x55, 0x09, - 0x8f, 0xb5, 0x78, 0xa8, 0x47, 0x8b, 0xef, 0x64, 0x73, 0xa9, 0x7c, 0xda, 0x44, 0xc7, 0x16, 0xe3, - 0x07, 0xd3, 0x30, 0xd7, 0x6b, 0x82, 0xc9, 0x3b, 0x49, 0x63, 0xc0, 0xed, 0xd6, 0x2a, 0x5c, 0xb5, - 0x5b, 0x2b, 0xb5, 0x91, 0x45, 0x08, 0x42, 0x25, 0x8e, 0x0b, 0x7b, 0x96, 0x30, 0x46, 0xd3, 0xb1, - 0x3c, 0xef, 0x80, 0xad, 0xe1, 0x8c, 0x92, 0xee, 0x4b, 0xc0, 0x54, 0x1a, 0x09, 0x23, 0x5f, 0x02, - 0xa8, 0x37, 0x1d, 0x8f, 0xe2, 0xf5, 0xb0, 0xd8, 0x1c, 0xb9, 0xbf, 0x68, 0x00, 0x55, 0xef, 0x03, - 0x11, 0x5a, 0x74, 0x1a, 0x54, 0x4c, 0xa0, 0x05, 0x67, 0x7a, 0x7c, 0xd1, 0x6c, 0x7a, 0xc2, 0x97, - 0xef, 0x64, 0x1e, 0xed, 0x6e, 0xf0, 0xfe, 0x5d, 0x74, 0xc4, 0xd3, 0xbd, 0xd6, 0xc8, 0x21, 0x90, - 0xf8, 0x67, 0xcb, 0xb8, 0x0b, 0xaf, 0xc7, 0xae, 0x1b, 0x70, 0xe7, 0x90, 0x4d, 0xb7, 0x49, 0x16, - 0x60, 0x4c, 0xbe, 0x93, 0xc1, 0x94, 0x4f, 0xce, 0x1c, 0x04, 0xe8, 0x2e, 0xc5, 0xc5, 0x83, 0x59, - 0xe9, 0x30, 0x20, 0x46, 0x6c, 0x6b, 0xa3, 0x08, 0x61, 0xe7, 0x75, 0x51, 0xf5, 0x39, 0xb9, 0xbe, - 0x75, 0x61, 0x2a, 0x4a, 0x7f, 0x26, 0x25, 0xa7, 0x3f, 0x2e, 0x8d, 0x8e, 0x6b, 0x1f, 0x01, 0x0c, - 0x5f, 0x10, 0x0d, 0xc3, 0xbf, 0xd9, 0x36, 0x2b, 0xbf, 0x3a, 0xb1, 0xcd, 0x8a, 0x9f, 0xe4, 0x12, - 0x4c, 0xb9, 0xdc, 0xc1, 0xcd, 0x77, 0xc4, 0x78, 0xe2, 0x4c, 0x99, 0x13, 0x1c, 0xbc, 0xe1, 0xe0, - 0x98, 0x8a, 0x76, 0xdd, 0x09, 0x06, 0x4c, 0x11, 0xce, 0xe4, 0x2a, 0x8c, 0x32, 0xe1, 0x8c, 0x99, - 0x10, 0x22, 0x7e, 0xd3, 0x88, 0x87, 0x5b, 0x9d, 0x99, 0xfb, 0x58, 0xfc, 0x2d, 0x78, 0xfd, 0xd3, - 0x94, 0x64, 0xa6, 0x6e, 0x0d, 0xe4, 0x0c, 0x8c, 0x38, 0xee, 0xae, 0xd2, 0xb5, 0x61, 0xc7, 0xdd, - 0x65, 0xfd, 0xba, 0x0c, 0x79, 0xee, 0xc6, 0xcf, 0xe3, 0xa3, 0xbd, 0xc3, 0x36, 0x3f, 0x3b, 0xe6, - 0xcc, 0x49, 0x0e, 0xc7, 0xc7, 0x00, 0x0f, 0xdb, 0x75, 0x86, 0xe9, 0x79, 0x4e, 0x4d, 0x4d, 0x7f, - 0x22, 0xba, 0x3d, 0xe9, 0x79, 0x4e, 0x98, 0x07, 0xa5, 0x41, 0x96, 0x60, 0x82, 0xf1, 0xa9, 0x49, - 0x21, 0x26, 0x76, 0xae, 0xf3, 0xf1, 0x9d, 0xeb, 0xb0, 0x5d, 0x97, 0x4d, 0x34, 0xc7, 0x3d, 0xe5, - 0x97, 0xe8, 0xcd, 0xcf, 0xa6, 0xe1, 0x74, 0x32, 0x3a, 0xce, 0x17, 0xab, 0x04, 0xa3, 0x59, 0xb8, - 0x1d, 0xd1, 0x1c, 0x65, 0x10, 0x1e, 0xb0, 0x9f, 0xd4, 0xda, 0x74, 0x62, 0x6b, 0x5f, 0x86, 0x69, - 0x64, 0x24, 0x74, 0x85, 0xa6, 0xed, 0xf9, 0x22, 0x0e, 0xdd, 0x9c, 0x62, 0x05, 0x5c, 0xc0, 0xad, - 0x32, 0x30, 0x79, 0x11, 0x26, 0xa5, 0x88, 0x72, 0x0e, 0xda, 0xac, 0x62, 0x2e, 0x9f, 0x26, 0x04, - 0x74, 0x1d, 0x81, 0xe4, 0x14, 0x0c, 0x5b, 0x9d, 0x0e, 0xab, 0x92, 0x8b, 0xa5, 0x21, 0xab, 0xd3, - 0x29, 0x37, 0xc8, 0x45, 0x98, 0xc0, 0xd8, 0x9d, 0xda, 0x0e, 0x7a, 0x4d, 0x08, 0x6f, 0x29, 0x73, - 0x1c, 0x81, 0xdc, 0x93, 0xc2, 0x63, 0x1f, 0x02, 0xa3, 0x95, 0x28, 0x23, 0x88, 0x02, 0x56, 0x47, - 0x22, 0x88, 0x91, 0xf9, 0x32, 0x4c, 0x89, 0x1d, 0x4e, 0x48, 0x78, 0xa4, 0x14, 0xeb, 0x8f, 0xa9, - 0x9e, 0x68, 0xd0, 0x19, 0x35, 0x41, 0x80, 0xca, 0x0d, 0x49, 0xf9, 0xfb, 0x29, 0x38, 0x95, 0xb8, - 0x45, 0x92, 0x6f, 0x00, 0x0f, 0x65, 0xf0, 0x9d, 0x9a, 0x4b, 0xeb, 0x76, 0xc7, 0xc6, 0x60, 0x6f, - 0x6e, 0x18, 0x5a, 0xec, 0xb7, 0xb9, 0x62, 0x58, 0xc4, 0x86, 0x63, 0x06, 0x44, 0xfc, 0x6c, 0x9b, - 0x77, 0x23, 0xe0, 0xf9, 0x8f, 0xe0, 0x54, 0x22, 0x6a, 0xc2, 0x99, 0xf3, 0x55, 0xfd, 0x9d, 0x25, - 0x69, 0xe9, 0x8f, 0x74, 0x5a, 0x39, 0x8b, 0x8a, 0xee, 0xfd, 0xdd, 0xb4, 0xdc, 0xa1, 0x96, 0x1c, - 0xc7, 0xf7, 0x7c, 0xd7, 0xea, 0x68, 0xaa, 0x23, 0x69, 0xc1, 0x59, 0xc7, 0xea, 0xfa, 0x7b, 0x8b, - 0x35, 0xf6, 0xaf, 0xe3, 0xca, 0x58, 0xb2, 0xba, 0xf4, 0xc2, 0x19, 0x5b, 0xbc, 0xa6, 0xaf, 0xd4, - 0x02, 0xc3, 0x2e, 0xa8, 0xc8, 0x4c, 0xa0, 0x2a, 0x5c, 0x57, 0x9e, 0x31, 0xcf, 0x70, 0x9e, 0x31, - 0x2c, 0xb2, 0x02, 0xda, 0xbb, 0xcb, 0x89, 0xba, 0xa3, 0xf2, 0x46, 0xb2, 0xce, 0x75, 0x6c, 0x5b, - 0x79, 0xa4, 0xf9, 0x5d, 0x18, 0xb5, 0x1b, 0x22, 0x71, 0x94, 0xd0, 0x20, 0x75, 0xad, 0xa5, 0xdc, - 0xe0, 0x79, 0xa4, 0x42, 0x1e, 0x4c, 0xfd, 0xb4, 0x05, 0x74, 0x69, 0x42, 0x53, 0xb2, 0x8d, 0x25, - 0x29, 0x0c, 0xe3, 0x64, 0xb1, 0x27, 0x74, 0x4f, 0xc3, 0xb0, 0xa7, 0x64, 0xb2, 0x32, 0xc5, 0x2f, - 0xe3, 0x2f, 0xc0, 0xe5, 0x41, 0xc7, 0x88, 0xbc, 0x06, 0xa4, 0xc7, 0x80, 0x8f, 0x9a, 0xd3, 0x56, - 0x6c, 0xdc, 0x9e, 0x07, 0x35, 0x1b, 0x90, 0x2d, 0xb7, 0x1b, 0x09, 0xdb, 0x74, 0x6d, 0xe3, 0x1d, - 0x98, 0xd4, 0x4f, 0x15, 0xe4, 0x15, 0xc8, 0x06, 0x5c, 0x27, 0x03, 0xeb, 0x97, 0x8a, 0xc4, 0x78, - 0x9b, 0x88, 0x64, 0xfc, 0x8b, 0x34, 0xcc, 0x24, 0x9c, 0x2d, 0xc8, 0x47, 0x30, 0x23, 0x17, 0x08, - 0x17, 0x09, 0x7c, 0xe2, 0xf8, 0xd2, 0xb8, 0x92, 0xb4, 0x34, 0x10, 0x2d, 0x61, 0xfa, 0xa6, 0xc5, - 0xa2, 0x08, 0xcb, 0xff, 0xfc, 0x2c, 0x07, 0xf2, 0x21, 0x9c, 0x16, 0xcf, 0x18, 0x2a, 0xab, 0xa2, - 0xe6, 0xd2, 0x1d, 0x21, 0xae, 0x9f, 0x8f, 0x8d, 0x9e, 0x5d, 0x57, 0x9a, 0x63, 0xd2, 0x9d, 0x95, - 0x67, 0xcc, 0x59, 0x2f, 0x01, 0x1e, 0x5d, 0x69, 0x7f, 0x3f, 0x05, 0xc6, 0xf1, 0xe3, 0x85, 0x0a, - 0x46, 0x74, 0xc0, 0x99, 0x82, 0xa1, 0x8c, 0xde, 0x45, 0x98, 0x70, 0xe9, 0x8e, 0x4b, 0xbd, 0xbd, - 0x9a, 0xfa, 0xa4, 0xf3, 0xb8, 0x00, 0xca, 0x81, 0x91, 0xe1, 0xb0, 0x03, 0xd8, 0x12, 0x73, 0xec, - 0x1c, 0xca, 0xad, 0x40, 0x82, 0xc8, 0xb8, 0x15, 0x08, 0x90, 0xc4, 0x79, 0x08, 0xdf, 0x93, 0x4e, - 0x29, 0xef, 0x49, 0xdf, 0xc9, 0xe6, 0xd2, 0xf9, 0x8c, 0x29, 0x82, 0x76, 0x77, 0xec, 0x26, 0x35, - 0x7e, 0x2d, 0x05, 0xf3, 0xbd, 0x07, 0x8f, 0x7c, 0xa4, 0x58, 0xc3, 0x33, 0x3c, 0x67, 0xd1, 0x31, - 0xe3, 0xad, 0x1a, 0x0e, 0x45, 0x1c, 0x69, 0xf4, 0x05, 0x3f, 0xc1, 0xf2, 0x71, 0x4c, 0x7a, 0x6f, - 0xc8, 0xc3, 0x34, 0xdb, 0xf2, 0xee, 0x5f, 0x27, 0x57, 0x60, 0x84, 0x9f, 0x9f, 0x65, 0x43, 0xa7, - 0xb4, 0x86, 0xde, 0xbf, 0x6e, 0xca, 0x72, 0xe3, 0xbb, 0xa9, 0xe0, 0xb4, 0x12, 0x6d, 0xfe, 0xfd, - 0xeb, 0xe4, 0x4b, 0x83, 0xd9, 0xb5, 0x73, 0xd2, 0xae, 0x1d, 0xd8, 0xb4, 0xbf, 0xac, 0xd9, 0xb4, - 0x5f, 0xe8, 0x3f, 0x4e, 0x42, 0x2f, 0x8a, 0xbe, 0xb1, 0xf4, 0xaf, 0x52, 0x70, 0xbe, 0x2f, 0x05, - 0x39, 0x07, 0xb9, 0x42, 0xa5, 0xbc, 0x11, 0xce, 0x2c, 0xfb, 0x5a, 0x24, 0x84, 0xdc, 0x86, 0xd1, - 0x25, 0xcb, 0xb3, 0xeb, 0x6c, 0x01, 0x8b, 0x86, 0xbc, 0xd4, 0xbf, 0x21, 0x01, 0x3a, 0x3b, 0x2a, - 0x07, 0x3f, 0x48, 0x0d, 0xa6, 0xf1, 0x2b, 0x88, 0xbd, 0x61, 0x12, 0xdd, 0x76, 0x62, 0x0c, 0x63, - 0x64, 0x4c, 0xc2, 0xc4, 0x80, 0xd1, 0x8f, 0xef, 0x01, 0x5c, 0x38, 0xae, 0x81, 0x27, 0x08, 0xfd, - 0xbe, 0x0c, 0xb9, 0x8a, 0x3c, 0xb1, 0x28, 0x4f, 0x98, 0xc9, 0xd3, 0x89, 0x19, 0x94, 0x1a, 0x7f, - 0x35, 0x25, 0xf7, 0x86, 0xe3, 0x3b, 0xa2, 0xa4, 0x56, 0x6c, 0xf4, 0x4f, 0xad, 0xd8, 0xf8, 0x94, - 0xa9, 0x15, 0x8d, 0x5f, 0x14, 0x89, 0x59, 0xca, 0x8d, 0x4a, 0x24, 0xa9, 0xf5, 0xe3, 0xde, 0xd2, - 0x2d, 0x6b, 0xab, 0xf3, 0xa2, 0x92, 0xa3, 0x35, 0x5e, 0x57, 0xef, 0xcb, 0x3a, 0x65, 0xa9, 0xfe, - 0x8b, 0x34, 0x9c, 0xeb, 0x47, 0x9e, 0x98, 0x7f, 0x3b, 0x75, 0xb2, 0xfc, 0xdb, 0x57, 0x20, 0xc7, - 0x61, 0xfa, 0x7b, 0x3b, 0x82, 0x94, 0x0d, 0xb8, 0x2c, 0x26, 0x17, 0x61, 0xb8, 0x50, 0xac, 0x86, - 0xf9, 0x28, 0xd1, 0xac, 0x6c, 0xd5, 0x3d, 0x34, 0x58, 0x8a, 0x22, 0xf2, 0xf5, 0x78, 0x0a, 0x56, - 0x91, 0x88, 0xf2, 0xd9, 0xa4, 0x57, 0xb3, 0x65, 0x08, 0x2d, 0xb6, 0x37, 0xcc, 0xf1, 0x23, 0xd2, - 0x66, 0x98, 0xf1, 0x74, 0xae, 0x06, 0x0c, 0x57, 0x5c, 0xea, 0x51, 0x5f, 0x35, 0xf9, 0x76, 0x10, - 0x62, 0x8a, 0x12, 0x61, 0x90, 0xb5, 0x0e, 0xb9, 0x37, 0xeb, 0xb0, 0xea, 0xec, 0x8f, 0x16, 0x5c, - 0x06, 0x36, 0x15, 0x14, 0xe3, 0xdb, 0x29, 0x98, 0x4d, 0x6a, 0x16, 0x39, 0x07, 0xd9, 0x76, 0x62, - 0xf2, 0xd8, 0x36, 0xf7, 0xa9, 0x53, 0x9f, 0x0c, 0x57, 0xed, 0xdc, 0xda, 0x4b, 0xe2, 0xed, 0xf0, - 0x25, 0xf1, 0x05, 0x29, 0x6c, 0x33, 0xb1, 0x74, 0xb3, 0xf8, 0x9f, 0x51, 0x00, 0x28, 0x37, 0x2a, - 0xeb, 0x1d, 0x9e, 0x82, 0xe7, 0x06, 0x64, 0x59, 0xb3, 0x22, 0x8b, 0x91, 0x2d, 0x87, 0xc2, 0xbd, - 0x55, 0x81, 0xc4, 0x5b, 0xe5, 0x59, 0xad, 0xa6, 0x89, 0xc8, 0xc6, 0x16, 0x4c, 0xea, 0x18, 0x64, - 0x59, 0x0f, 0xda, 0x0e, 0x9f, 0x61, 0x5d, 0x72, 0x1c, 0x7e, 0xd7, 0xba, 0x74, 0xf6, 0x7b, 0x47, - 0x0b, 0xc0, 0x7e, 0x72, 0x9a, 0xa4, 0xa0, 0x6e, 0xe3, 0x27, 0xd3, 0x30, 0x1b, 0x3a, 0x4b, 0xca, - 0x4f, 0xe2, 0xa9, 0x75, 0x20, 0x2a, 0x68, 0x0e, 0x2e, 0x0b, 0xb1, 0x97, 0x0e, 0x65, 0x07, 0xfb, - 0xdc, 0xab, 0xdf, 0x86, 0xb9, 0x5e, 0xf8, 0xe4, 0x95, 0xd8, 0x5b, 0x64, 0x22, 0xa8, 0x27, 0x78, - 0xb4, 0x4c, 0x79, 0x9a, 0xec, 0x9f, 0xa5, 0x60, 0x5e, 0xdc, 0x10, 0xde, 0xb3, 0xec, 0x36, 0xbe, - 0xbf, 0x5a, 0xa7, 0x4f, 0xc6, 0xf3, 0xec, 0xb6, 0x26, 0x96, 0x5e, 0xd4, 0x2f, 0x82, 0x63, 0xb5, - 0xf5, 0xee, 0x2d, 0xb9, 0x82, 0xe1, 0x5b, 0x75, 0xbe, 0x78, 0xb3, 0xdc, 0xd3, 0xb7, 0xcd, 0x00, - 0xaa, 0xa7, 0x2f, 0x62, 0x18, 0x3f, 0x00, 0xcf, 0xf5, 0xaf, 0x80, 0x7c, 0x0d, 0x26, 0x0a, 0xbb, - 0xb4, 0xed, 0x6f, 0x76, 0x76, 0x5d, 0xab, 0x41, 0xa5, 0x27, 0x80, 0x34, 0xf7, 0xaa, 0x65, 0x3c, - 0x64, 0x4d, 0x78, 0x9e, 0x32, 0x78, 0xad, 0x2b, 0x88, 0xb4, 0x6b, 0x78, 0x95, 0x9b, 0xf1, 0x83, - 0x29, 0x20, 0x71, 0x1e, 0xe4, 0x26, 0x8c, 0x6f, 0x6e, 0x14, 0xab, 0xbe, 0xe5, 0xfa, 0x2b, 0x4e, - 0xd7, 0x15, 0xa1, 0x60, 0xdc, 0x11, 0xd1, 0xaf, 0x33, 0xc9, 0xe0, 0xfa, 0xb5, 0x3d, 0xa7, 0xeb, - 0x9a, 0x1a, 0x1e, 0xe6, 0x55, 0xa4, 0x74, 0xbf, 0x61, 0x1d, 0xea, 0x79, 0x15, 0x05, 0x4c, 0xcb, - 0xab, 0x28, 0x60, 0xc6, 0xdf, 0x4e, 0xc1, 0xb3, 0xd2, 0x4c, 0xd9, 0x48, 0x68, 0x4b, 0x11, 0xdd, - 0xed, 0x5d, 0x19, 0x0a, 0xdf, 0x4f, 0x37, 0x9d, 0x96, 0x11, 0x29, 0xd8, 0x40, 0x54, 0x52, 0x39, - 0x2d, 0x3e, 0x3e, 0xed, 0x3b, 0x9d, 0x01, 0x42, 0x52, 0xf2, 0xc1, 0x8c, 0xfa, 0x4e, 0x07, 0x59, - 0x20, 0xa5, 0x41, 0x61, 0x56, 0x6d, 0x9c, 0x6c, 0x31, 0xb9, 0x07, 0x23, 0x22, 0x56, 0x50, 0x68, - 0x7b, 0x32, 0x7c, 0xb4, 0x4f, 0x9f, 0x96, 0xa6, 0x64, 0xdc, 0x8b, 0x08, 0xc5, 0x36, 0x25, 0x0f, - 0xe3, 0x27, 0x52, 0x30, 0xc6, 0x94, 0x07, 0xcc, 0x4e, 0xf2, 0xb8, 0x4b, 0x5a, 0xd7, 0x03, 0xa5, - 0x45, 0x20, 0x60, 0x3f, 0xd0, 0xe6, 0xfa, 0x3a, 0x4c, 0x45, 0x08, 0x88, 0x81, 0x1e, 0xcf, 0x4d, - 0x9b, 0x3f, 0xe3, 0x2b, 0x0d, 0x27, 0x1a, 0xcc, 0xf8, 0xd7, 0x52, 0x30, 0xbb, 0xbe, 0xef, 0x5b, - 0xe5, 0x56, 0xc7, 0x71, 0x7d, 0xb3, 0xdb, 0x94, 0xdf, 0x3b, 0x53, 0x88, 0xa4, 0xbd, 0x9b, 0xbb, - 0x63, 0x72, 0x85, 0x48, 0xc0, 0xcc, 0xa0, 0x94, 0xac, 0x40, 0x4e, 0xec, 0x2f, 0xf2, 0xd9, 0x79, - 0x79, 0xc5, 0xa2, 0x33, 0x16, 0x48, 0xac, 0x27, 0x28, 0xc2, 0x04, 0x8d, 0x19, 0x50, 0x1b, 0x7f, - 0x92, 0x82, 0x33, 0x3d, 0x68, 0xc8, 0x3b, 0x30, 0x84, 0xbe, 0x2d, 0x62, 0xf6, 0xce, 0xf5, 0xa8, - 0xc2, 0xaf, 0xef, 0xdd, 0xbf, 0xce, 0x37, 0xa2, 0x16, 0xfb, 0x61, 0x72, 0x2a, 0xf2, 0x11, 0x8c, - 0x16, 0x1a, 0x0d, 0xed, 0x71, 0xfc, 0xd7, 0xfa, 0xb7, 0xf2, 0x6a, 0x80, 0xcf, 0xcf, 0x25, 0xfc, - 0x96, 0xb5, 0xd1, 0x10, 0xaf, 0x8b, 0x9b, 0x21, 0xbf, 0xf9, 0xb7, 0x61, 0x52, 0x47, 0x3e, 0xd1, - 0xb9, 0xe4, 0xbb, 0x29, 0xc8, 0xeb, 0x6d, 0xf8, 0x6c, 0x22, 0x76, 0x92, 0xa6, 0xf9, 0x98, 0x45, - 0xf5, 0xd3, 0x69, 0x38, 0x95, 0x38, 0xc2, 0xe4, 0x35, 0x18, 0x2e, 0x74, 0x3a, 0xe5, 0x92, 0x58, - 0x55, 0x42, 0xe1, 0x41, 0xdb, 0xa0, 0x76, 0x6c, 0xe3, 0x48, 0xe4, 0x06, 0xe4, 0x70, 0x65, 0x32, - 0x82, 0x74, 0x18, 0xcb, 0xcc, 0xad, 0x86, 0x91, 0x58, 0x66, 0x89, 0x48, 0x6e, 0xc1, 0xa4, 0x70, - 0xde, 0x37, 0xe9, 0x2e, 0x7d, 0x18, 0x24, 0xd5, 0xc1, 0xbc, 0x3f, 0xd2, 0xd5, 0xbf, 0xe6, 0xf2, - 0x32, 0xd5, 0x7d, 0x5d, 0xa7, 0xc2, 0xb7, 0xf1, 0x18, 0x4f, 0x95, 0x13, 0x0f, 0xa8, 0xe6, 0x6f, - 0xe3, 0x61, 0x23, 0x7a, 0xf0, 0x8a, 0x51, 0x06, 0xd3, 0x55, 0xf0, 0x3c, 0x7b, 0xb7, 0xdd, 0xa2, - 0x6d, 0xff, 0xb3, 0x9b, 0xae, 0xb0, 0x8e, 0x81, 0xa6, 0xeb, 0x3b, 0x59, 0xfe, 0x31, 0x47, 0xc9, - 0x8e, 0x79, 0xfe, 0xb5, 0x04, 0x23, 0x3c, 0x6c, 0x40, 0x7e, 0x19, 0xe7, 0x13, 0x9b, 0xc0, 0x71, - 0xee, 0x5f, 0xe7, 0xea, 0x0b, 0x77, 0xb2, 0xf1, 0x4c, 0x49, 0x4a, 0xee, 0xc3, 0x58, 0xb1, 0x49, - 0xad, 0x76, 0xb7, 0xc3, 0x84, 0xf4, 0x00, 0x16, 0x8a, 0x39, 0xd1, 0x97, 0xf1, 0x3a, 0x27, 0xab, - 0xf9, 0x76, 0x8b, 0xa2, 0x24, 0x57, 0x19, 0x91, 0x8d, 0xe0, 0xde, 0x3d, 0x8b, 0xc6, 0xaf, 0x2f, - 0xf4, 0x19, 0x9f, 0x28, 0x10, 0xe9, 0x74, 0xa7, 0x12, 0x71, 0x31, 0x5f, 0x83, 0xc9, 0x55, 0xcb, - 0xf3, 0x37, 0x5c, 0xab, 0xed, 0x61, 0xe4, 0xef, 0x00, 0xe1, 0x58, 0xf2, 0x69, 0x9d, 0x29, 0x74, - 0xb7, 0xf7, 0x03, 0x52, 0x6c, 0x73, 0x84, 0x1d, 0xd3, 0x97, 0x6e, 0xd9, 0x6d, 0xab, 0x69, 0x7f, - 0x4b, 0xba, 0x27, 0x71, 0x7d, 0x69, 0x47, 0x02, 0xcd, 0xb0, 0xdc, 0xf8, 0x6a, 0x6c, 0xde, 0x78, - 0x2b, 0xc7, 0x60, 0x44, 0x78, 0xa4, 0x72, 0x0f, 0xcd, 0xca, 0xf2, 0x5a, 0xa9, 0xbc, 0x76, 0x3b, - 0x9f, 0x22, 0x93, 0x00, 0x15, 0x73, 0xbd, 0xb8, 0x5c, 0xad, 0xb2, 0xdf, 0x69, 0xf6, 0x5b, 0xb8, - 0x6f, 0xde, 0xda, 0x5c, 0xcd, 0x67, 0x14, 0x0f, 0xce, 0xac, 0xf1, 0x4f, 0x53, 0x70, 0x3a, 0x79, - 0x2a, 0xc9, 0x06, 0xa0, 0x0f, 0xaf, 0xb0, 0x2b, 0xde, 0xec, 0x3b, 0xef, 0x89, 0xe0, 0xa8, 0x2f, - 0xb0, 0xcf, 0x7d, 0x4c, 0xd3, 0xf2, 0x56, 0x22, 0x7c, 0xe2, 0xc6, 0x6e, 0x18, 0x45, 0x98, 0xeb, - 0xc5, 0x43, 0xef, 0xea, 0x14, 0x8c, 0x15, 0x2a, 0x95, 0xd5, 0x72, 0xb1, 0xb0, 0x51, 0x5e, 0x5f, - 0xcb, 0xa7, 0xc8, 0x28, 0x0c, 0xdd, 0x36, 0xd7, 0x37, 0x2b, 0xf9, 0xb4, 0xf1, 0xd7, 0x52, 0x30, - 0x51, 0x6e, 0xfb, 0x74, 0x97, 0x5f, 0x2d, 0x3f, 0xee, 0xc7, 0xf7, 0xa6, 0xf6, 0xf1, 0xcd, 0x05, - 0xde, 0xee, 0x41, 0x05, 0x03, 0x7d, 0x79, 0x07, 0x30, 0x1d, 0x23, 0x21, 0x55, 0x18, 0x29, 0x6c, - 0x55, 0xd7, 0xcb, 0xa5, 0xa2, 0x68, 0x98, 0x54, 0xca, 0x05, 0x34, 0x5e, 0x09, 0xf7, 0x25, 0x3b, - 0xf0, 0x6a, 0x8e, 0xdd, 0x50, 0xb2, 0x84, 0xaf, 0x3c, 0x63, 0x4a, 0x4e, 0x4b, 0x13, 0x30, 0x26, - 0xce, 0x15, 0xa8, 0xb2, 0xff, 0x58, 0x0a, 0xe6, 0x7a, 0xb1, 0x63, 0x47, 0x15, 0xdd, 0xf7, 0xf3, - 0x74, 0x90, 0xd5, 0x49, 0x77, 0xfa, 0x94, 0x68, 0xe4, 0x1d, 0x18, 0xe3, 0x6f, 0x61, 0x55, 0x6f, - 0x6c, 0x9a, 0x65, 0x31, 0x85, 0x18, 0x96, 0x25, 0x9e, 0xb7, 0xf5, 0x6e, 0x44, 0xde, 0x3a, 0x55, - 0xf1, 0x8d, 0x7f, 0x33, 0x0d, 0xa7, 0xd9, 0xb8, 0x36, 0xa9, 0xe7, 0x15, 0xba, 0xfe, 0x1e, 0x3b, - 0x76, 0x73, 0x4d, 0x83, 0x7c, 0x09, 0x86, 0xf7, 0x4e, 0x66, 0x24, 0xe3, 0xe8, 0x84, 0x00, 0xca, - 0x2a, 0x79, 0x41, 0xc9, 0xfe, 0x26, 0xe7, 0x41, 0x49, 0xff, 0x8f, 0xa2, 0x66, 0xdc, 0x1c, 0xed, - 0x04, 0x8f, 0x00, 0x7c, 0x19, 0x86, 0xf0, 0x50, 0x2c, 0x24, 0x86, 0xd4, 0xf4, 0x92, 0x5b, 0x86, - 0x47, 0x66, 0x93, 0x13, 0xb0, 0xa3, 0x76, 0x98, 0xb2, 0x47, 0x88, 0x04, 0x79, 0xba, 0x0c, 0xb2, - 0xf6, 0x98, 0xa3, 0xad, 0x1d, 0x4b, 0xe4, 0xc1, 0x79, 0x19, 0xa6, 0xa5, 0x31, 0xa7, 0x23, 0x83, - 0x12, 0xf9, 0x11, 0xdd, 0x9c, 0xe2, 0x05, 0xe5, 0x8e, 0x08, 0x4c, 0x34, 0xfe, 0xbb, 0x34, 0x8c, - 0x6e, 0xb1, 0xfd, 0x13, 0x4f, 0x85, 0xfd, 0x4f, 0x99, 0x8b, 0x30, 0xb6, 0xea, 0x58, 0x0d, 0xfd, - 0x11, 0x6c, 0x74, 0xdc, 0x6a, 0x3a, 0x96, 0xb4, 0x8e, 0x7b, 0xa6, 0x8a, 0x74, 0x8c, 0xd3, 0xd9, - 0x1d, 0x18, 0xe6, 0x37, 0x6d, 0xc2, 0x7e, 0x21, 0x35, 0xa8, 0xa0, 0x45, 0x57, 0x79, 0xb1, 0x62, - 0x85, 0xe5, 0x77, 0x75, 0xea, 0x76, 0x2e, 0xc2, 0xa2, 0x95, 0x33, 0xf0, 0xd0, 0x60, 0x67, 0x60, - 0x25, 0xfc, 0x6b, 0x78, 0x90, 0xf0, 0xaf, 0xf9, 0x37, 0x60, 0x4c, 0x69, 0xcf, 0x89, 0x14, 0xaa, - 0x1f, 0x4a, 0xc3, 0x04, 0xf6, 0x2a, 0xb8, 0x3e, 0x79, 0x3a, 0x4f, 0xf4, 0x6f, 0x6a, 0x27, 0xfa, - 0x39, 0x75, 0xbe, 0x78, 0xcf, 0xfa, 0x1c, 0xe5, 0xef, 0xc0, 0x74, 0x0c, 0x91, 0xbc, 0x0e, 0x43, - 0xac, 0xf9, 0xf2, 0x04, 0x94, 0x8f, 0xae, 0x80, 0x30, 0x55, 0x00, 0xeb, 0xb8, 0x67, 0x72, 0x6c, - 0xe3, 0x7f, 0x4d, 0xc1, 0xb8, 0xc8, 0xe1, 0xd4, 0xde, 0x71, 0x8e, 0x1d, 0xce, 0x4b, 0xd1, 0xe1, - 0xe4, 0x2e, 0xd4, 0x62, 0x38, 0xff, 0x9f, 0x1e, 0xc4, 0x37, 0xb4, 0x41, 0x3c, 0x13, 0x04, 0x0e, - 0xca, 0xee, 0xf4, 0x19, 0xc3, 0x5f, 0xc7, 0x50, 0x7a, 0x1d, 0x91, 0x7c, 0x1d, 0x46, 0xd7, 0xe8, - 0x81, 0x76, 0x90, 0xb8, 0xd4, 0x83, 0xe9, 0xd5, 0x00, 0x91, 0x7f, 0x53, 0xe8, 0xcd, 0xd2, 0xa6, - 0x07, 0xb5, 0xd8, 0xed, 0x46, 0xc8, 0x92, 0x9d, 0x25, 0x74, 0xb2, 0x93, 0x2c, 0x7d, 0xe1, 0x14, - 0x84, 0x51, 0x01, 0x7f, 0x2f, 0x03, 0x10, 0xfa, 0x53, 0xb0, 0x0f, 0x90, 0x6a, 0x99, 0x0e, 0x85, - 0x49, 0x15, 0x41, 0xea, 0x1a, 0x17, 0x20, 0x72, 0x49, 0xd8, 0x0a, 0xd3, 0xbd, 0x03, 0x3b, 0xd1, - 0x6a, 0x58, 0x14, 0xfe, 0x0a, 0x0d, 0xda, 0xb4, 0xb8, 0x2c, 0xce, 0xe0, 0x73, 0xcc, 0xb3, 0x21, - 0xb4, 0x47, 0x32, 0x7e, 0xf4, 0x6a, 0x28, 0x31, 0x84, 0x98, 0x8f, 0x52, 0xf6, 0xd3, 0xfb, 0x28, - 0x0d, 0x7d, 0x0a, 0x1f, 0xa5, 0xe1, 0x01, 0x7d, 0x94, 0x2a, 0x30, 0x6a, 0xb7, 0x1f, 0xd0, 0xb6, - 0xef, 0xb8, 0x87, 0xe8, 0xc1, 0x10, 0x5a, 0x78, 0xd8, 0x50, 0x97, 0x65, 0x19, 0x9f, 0x6f, 0x3c, - 0xe2, 0x04, 0xf8, 0xea, 0x74, 0x07, 0x40, 0x71, 0xb7, 0xff, 0xc9, 0xff, 0x4d, 0xdc, 0xb5, 0xee, - 0xb6, 0x8d, 0x5c, 0x61, 0x53, 0x92, 0x1d, 0xfb, 0xf8, 0x36, 0x9e, 0x38, 0x89, 0xeb, 0x38, 0x4e, - 0x2a, 0xb4, 0x45, 0xc3, 0x36, 0x6d, 0xd3, 0xb4, 0x68, 0xd3, 0x22, 0x0d, 0x68, 0x69, 0x64, 0xa9, - 0x12, 0x49, 0x85, 0x43, 0x5a, 0x75, 0xda, 0x82, 0x50, 0x6c, 0xd6, 0x66, 0xab, 0x48, 0x8a, 0x2e, - 0x6d, 0x93, 0x07, 0x58, 0x60, 0xb1, 0x7f, 0x16, 0xfb, 0x02, 0xfb, 0x67, 0x1f, 0x26, 0xd8, 0xc5, - 0x02, 0x79, 0x82, 0xc5, 0x6e, 0x1e, 0x63, 0x7f, 0x2d, 0xe6, 0x46, 0x0e, 0x29, 0xdb, 0xd8, 0x5c, - 0x80, 0xfd, 0x27, 0x9e, 0x73, 0x66, 0x34, 0x9c, 0xcb, 0x99, 0xc3, 0x99, 0x73, 0xbe, 0x53, 0x00, - 0x3c, 0x5b, 0x01, 0xfe, 0x13, 0x2c, 0x0b, 0x15, 0x1c, 0x8e, 0xc6, 0xcf, 0xa4, 0x83, 0x8b, 0x88, - 0xbe, 0xd0, 0xc8, 0x7a, 0xf4, 0x85, 0x20, 0x7b, 0xe3, 0x67, 0x3d, 0xfc, 0x4f, 0xb8, 0xcc, 0x07, - 0x60, 0x18, 0x8d, 0xe2, 0xc1, 0x71, 0xc8, 0x03, 0xcf, 0xbb, 0x3d, 0x09, 0xad, 0x7b, 0x87, 0x63, - 0xc0, 0xcf, 0xb2, 0xcf, 0x19, 0x28, 0xee, 0x47, 0xd2, 0xe6, 0x92, 0x6d, 0x21, 0x88, 0x7d, 0x40, - 0x7a, 0xf9, 0x7f, 0x4d, 0x7b, 0x3d, 0x39, 0xf6, 0x26, 0x4f, 0x0d, 0x99, 0xe3, 0x9d, 0x53, 0xf1, - 0x5a, 0x5a, 0x71, 0x6d, 0xda, 0xeb, 0xe1, 0x3f, 0x00, 0x0c, 0xfa, 0xe1, 0xd3, 0x78, 0x3c, 0x16, - 0xe7, 0xec, 0x89, 0x0f, 0x58, 0x4a, 0xd5, 0xbb, 0x71, 0xd0, 0xb7, 0x05, 0x11, 0xff, 0x0e, 0xb8, - 0xd3, 0x26, 0xf7, 0x66, 0xe6, 0x33, 0x60, 0x5e, 0x82, 0x65, 0x29, 0x62, 0x76, 0x38, 0x4f, 0x22, - 0x1a, 0xbf, 0x50, 0xbe, 0x55, 0x8f, 0x61, 0x43, 0x46, 0x6b, 0x74, 0xe2, 0xc9, 0xa9, 0x34, 0x0b, - 0xdf, 0xc5, 0xa6, 0xd4, 0xec, 0xc2, 0x0f, 0x4b, 0x00, 0x56, 0x87, 0xaa, 0x40, 0xa1, 0xdb, 0x30, - 0xcf, 0x8c, 0x5d, 0xf5, 0xd1, 0xcc, 0x8f, 0x1c, 0x79, 0xbd, 0xfa, 0x91, 0x23, 0x97, 0x60, 0xeb, - 0xd5, 0x8b, 0x4e, 0xf8, 0xb9, 0x4d, 0x21, 0xfd, 0xc2, 0x1e, 0x09, 0x52, 0xc6, 0x74, 0x13, 0x24, - 0xdc, 0x02, 0x48, 0x43, 0x77, 0xe4, 0xe7, 0xd7, 0x46, 0xea, 0x03, 0x2f, 0x19, 0x12, 0x05, 0x29, - 0x0d, 0xff, 0xd1, 0xa7, 0x4f, 0x2a, 0x86, 0x9b, 0x50, 0xf2, 0xbb, 0x89, 0x87, 0xd3, 0x39, 0x01, - 0x4d, 0xb7, 0x24, 0xf4, 0x71, 0x1a, 0xd4, 0xb4, 0x36, 0xe9, 0x66, 0x10, 0xe2, 0x79, 0x25, 0x98, - 0xc0, 0x82, 0x4c, 0x6b, 0x71, 0x4e, 0x74, 0xab, 0xcc, 0x6a, 0x21, 0xc1, 0x24, 0x38, 0x31, 0x93, - 0xff, 0x5f, 0x24, 0xb0, 0xf8, 0x2d, 0x14, 0x29, 0xb5, 0xa5, 0x1b, 0xef, 0x6a, 0x6a, 0x4b, 0x53, - 0x6a, 0xab, 0xd4, 0x3d, 0x7a, 0x8a, 0x76, 0x26, 0x8c, 0xff, 0x0c, 0xcb, 0x9a, 0x5d, 0x2c, 0x1d, - 0xe0, 0x79, 0x1f, 0xc4, 0x29, 0x39, 0x63, 0xce, 0xa6, 0x64, 0xdc, 0x02, 0xd4, 0x9c, 0x3e, 0x89, - 0xac, 0xe1, 0x90, 0x7b, 0xe7, 0xfc, 0x37, 0x1a, 0x09, 0x84, 0xa6, 0xc5, 0x14, 0x87, 0x21, 0xec, - 0x0e, 0x87, 0xe1, 0xb1, 0xe2, 0xea, 0x07, 0x07, 0xf9, 0x92, 0xe5, 0x48, 0x1f, 0x20, 0xb6, 0x4b, - 0x66, 0x6d, 0x73, 0xbe, 0x4b, 0x2a, 0xdb, 0x3c, 0xb5, 0xc8, 0x7f, 0x7d, 0x46, 0x00, 0x16, 0xbf, - 0x93, 0xd1, 0x02, 0xb0, 0x32, 0x61, 0x57, 0x9f, 0x17, 0xb5, 0xc0, 0x5e, 0xd9, 0x73, 0x0f, 0x00, - 0xfe, 0x3a, 0x88, 0xfb, 0x76, 0x34, 0x39, 0x1d, 0x1c, 0x6b, 0x71, 0x60, 0xcb, 0xff, 0x1e, 0xc4, - 0xfd, 0xf0, 0x29, 0x27, 0x7f, 0xfb, 0xd5, 0x4d, 0x4d, 0xc8, 0xd3, 0x7e, 0xe3, 0x5f, 0xc2, 0x12, - 0x7b, 0xf2, 0x53, 0xcf, 0x04, 0x71, 0x1a, 0xc6, 0x4b, 0xcb, 0x84, 0x5d, 0x89, 0x00, 0xbe, 0xcf, - 0x41, 0xcf, 0xe2, 0xe1, 0x44, 0x33, 0x46, 0x15, 0xc2, 0x59, 0x3c, 0x9c, 0xe4, 0x41, 0x12, 0x34, - 0x61, 0x5c, 0x4f, 0x9a, 0xae, 0x60, 0xf3, 0x24, 0xb6, 0x1a, 0x3f, 0xf2, 0x91, 0x33, 0x23, 0x54, - 0x20, 0x7b, 0x3a, 0xc0, 0x79, 0xae, 0x18, 0x6f, 0x04, 0xad, 0x57, 0xc5, 0x19, 0xbd, 0xdc, 0x13, - 0x44, 0x23, 0xc6, 0xa7, 0xc7, 0xe1, 0x11, 0x27, 0x67, 0x1a, 0x91, 0x08, 0xe3, 0x3d, 0x58, 0x17, - 0xd1, 0x0a, 0x09, 0xfc, 0xae, 0xdc, 0x1f, 0xb8, 0x26, 0x4a, 0xf1, 0x79, 0xf5, 0xbf, 0xcf, 0x15, - 0xc0, 0x35, 0x98, 0xb7, 0x5e, 0x4c, 0x47, 0x91, 0x74, 0x19, 0x57, 0x67, 0x3a, 0x9c, 0x96, 0x9f, - 0xf5, 0x5c, 0x0b, 0x74, 0x19, 0x47, 0xd7, 0x02, 0x5c, 0xb4, 0xdc, 0x80, 0x05, 0x31, 0xc1, 0x39, - 0x62, 0x86, 0x84, 0xe3, 0xd2, 0xf0, 0x16, 0x04, 0x62, 0x86, 0xa4, 0xcf, 0x22, 0x66, 0x68, 0x05, - 0xca, 0x4d, 0xd8, 0x3c, 0xeb, 0xef, 0xf1, 0xbd, 0x99, 0xec, 0x7f, 0x7a, 0xde, 0xb1, 0x2c, 0x92, - 0xa7, 0x12, 0x2c, 0x7f, 0x5a, 0x84, 0x15, 0x5e, 0x9b, 0xd2, 0x6c, 0x16, 0xac, 0xd2, 0xe9, 0x93, - 0x24, 0x00, 0x46, 0x69, 0x38, 0x91, 0x85, 0x59, 0x67, 0xe8, 0x77, 0x1c, 0x99, 0x12, 0x98, 0xc0, - 0x9a, 0xd2, 0xae, 0x12, 0x26, 0xbc, 0x90, 0x82, 0x55, 0xa8, 0xd0, 0xcc, 0x59, 0x90, 0xf0, 0x5c, - 0xa1, 0x54, 0xc7, 0x16, 0xdf, 0x44, 0xc7, 0x96, 0xbe, 0x97, 0x8e, 0xfd, 0x3b, 0xac, 0xa8, 0x7f, - 0xe3, 0xda, 0x71, 0xfe, 0xdd, 0xb4, 0x63, 0xa6, 0x32, 0xdc, 0x4a, 0xb4, 0xe4, 0xc2, 0x85, 0x5a, - 0x92, 0x5f, 0x1c, 0xa9, 0xb5, 0x30, 0x93, 0xf7, 0x47, 0xd6, 0xc1, 0x51, 0x74, 0xf7, 0x2b, 0xed, - 0xb7, 0xd8, 0x79, 0x7e, 0x0f, 0x4b, 0xad, 0x81, 0xba, 0x33, 0xd0, 0x0e, 0x6b, 0x7b, 0x8a, 0xa8, - 0x6f, 0xc1, 0x89, 0x64, 0xb2, 0x63, 0x14, 0xdf, 0xc7, 0x8e, 0x71, 0x1f, 0xa0, 0x2d, 0x5c, 0xa4, - 0x53, 0xf4, 0x4b, 0xbe, 0x7c, 0x95, 0x2f, 0x75, 0xf6, 0xcc, 0x58, 0x13, 0x66, 0x3a, 0x44, 0x7a, - 0x17, 0x58, 0x47, 0x47, 0x83, 0x69, 0x7f, 0x92, 0x81, 0x8b, 0x57, 0x19, 0xc1, 0xbb, 0x92, 0xa7, - 0x2f, 0xe2, 0x5c, 0xb1, 0xf7, 0x3b, 0x20, 0xf8, 0x51, 0xe2, 0x16, 0x75, 0x61, 0xf6, 0xac, 0xf2, - 0x4c, 0x0f, 0x9d, 0xeb, 0x0c, 0x55, 0xfe, 0xc2, 0xd0, 0x91, 0x82, 0xde, 0x62, 0xa8, 0xff, 0x08, - 0x90, 0x5c, 0xda, 0xaa, 0xb1, 0x16, 0x5f, 0x29, 0x09, 0x55, 0xef, 0xe5, 0x54, 0x56, 0x7b, 0x9b, - 0xe2, 0xfb, 0x7a, 0x1b, 0x1f, 0x96, 0xdd, 0xff, 0x4c, 0xba, 0xe9, 0x2d, 0x3f, 0xd0, 0xc4, 0x3a, - 0xe4, 0x9a, 0x49, 0x65, 0xf9, 0x4a, 0x6d, 0xcb, 0x73, 0xb3, 0x7c, 0x25, 0x05, 0xcb, 0x8f, 0x60, - 0x5d, 0xb8, 0xe5, 0xed, 0x8f, 0xba, 0xc3, 0x53, 0xee, 0xf0, 0xfd, 0x17, 0x11, 0x69, 0x6d, 0x64, - 0xec, 0x77, 0x4d, 0x88, 0x69, 0xdc, 0xe7, 0xfd, 0x23, 0x61, 0x53, 0x74, 0xff, 0xa7, 0xb7, 0x95, - 0x7f, 0x59, 0xbd, 0x32, 0x00, 0xcf, 0x8a, 0xeb, 0xda, 0xc4, 0xf8, 0x01, 0x2c, 0xb6, 0x9c, 0xa5, - 0x53, 0x7a, 0x13, 0x4b, 0xc7, 0xfc, 0xd8, 0x80, 0xf5, 0x86, 0x65, 0x4b, 0x58, 0x1f, 0x71, 0xf8, - 0xfc, 0x63, 0xb8, 0xd1, 0xb0, 0xec, 0xb0, 0xed, 0xb6, 0x1a, 0x95, 0xc3, 0xf0, 0x4c, 0xd0, 0x80, - 0x1b, 0xf0, 0xa3, 0x59, 0x91, 0xf4, 0x90, 0x7a, 0x07, 0xb6, 0x66, 0xd9, 0x0a, 0x58, 0xe0, 0xec, - 0xc2, 0x0a, 0x83, 0xa0, 0x68, 0x3e, 0x84, 0x75, 0x15, 0x6f, 0xef, 0xb7, 0x28, 0xc7, 0xc7, 0x59, - 0x87, 0xe5, 0x03, 0xe2, 0x35, 0x6a, 0x87, 0x61, 0x2d, 0x68, 0xb5, 0xd0, 0x1c, 0x5e, 0x85, 0x25, - 0x49, 0xa8, 0x58, 0xc8, 0xc0, 0x2b, 0xb0, 0xd8, 0x70, 0x28, 0xa9, 0x04, 0x1e, 0x41, 0x05, 0xf3, - 0x21, 0xac, 0xa5, 0x79, 0x88, 0xf9, 0x19, 0xf3, 0x25, 0x28, 0x7a, 0x56, 0x07, 0xcd, 0x61, 0x80, - 0x85, 0x76, 0xb3, 0x42, 0xef, 0xde, 0x45, 0x06, 0x5e, 0x86, 0x4b, 0xfb, 0x95, 0x76, 0xd8, 0xb4, - 0x29, 0x2a, 0xb0, 0x07, 0xab, 0x43, 0xf9, 0x43, 0xd1, 0xfc, 0x0d, 0x6c, 0xf0, 0x1d, 0xbd, 0x15, - 0x8f, 0x27, 0x51, 0x3f, 0x1a, 0xf1, 0x36, 0xac, 0xc0, 0x22, 0x8d, 0xd8, 0x22, 0x9f, 0x44, 0xa2, - 0x01, 0xf6, 0xb4, 0x37, 0x89, 0x87, 0xbd, 0xe8, 0xff, 0xc8, 0x30, 0xef, 0xc3, 0xba, 0x37, 0x98, - 0x4e, 0xe2, 0xfe, 0x09, 0x9d, 0x30, 0x89, 0x93, 0xe7, 0xf8, 0x0a, 0x6c, 0x04, 0x8e, 0x65, 0xef, - 0x35, 0xf6, 0x03, 0x37, 0xa0, 0xa1, 0x6d, 0xf9, 0x95, 0xba, 0x38, 0xe1, 0xb6, 0x5d, 0xea, 0x87, - 0x1e, 0xa9, 0x10, 0xc7, 0x47, 0x86, 0xf9, 0x91, 0x01, 0x6b, 0xc1, 0x58, 0x7a, 0x65, 0x06, 0x3c, - 0x76, 0xfc, 0x16, 0xec, 0x04, 0x94, 0x78, 0xa1, 0xef, 0x36, 0x89, 0x13, 0x06, 0xd4, 0xda, 0xcf, - 0x23, 0x56, 0xdc, 0x84, 0xeb, 0x9a, 0x84, 0x47, 0x2a, 0xee, 0x01, 0xf1, 0xc2, 0xb6, 0x45, 0x69, - 0xc7, 0xf5, 0xaa, 0xc8, 0xc0, 0xdb, 0x70, 0xf5, 0x0c, 0x01, 0xbb, 0x66, 0xa1, 0xc2, 0x0c, 0xcf, - 0x21, 0x1d, 0xab, 0x15, 0xee, 0xb9, 0x3e, 0x2a, 0x9a, 0x36, 0xdb, 0xe8, 0x78, 0x50, 0xb7, 0xc0, - 0xc2, 0x5b, 0x84, 0x92, 0xe3, 0x3a, 0x24, 0x7f, 0x0b, 0xb1, 0x02, 0x8b, 0x56, 0xbb, 0xed, 0xb9, - 0x07, 0x7c, 0x40, 0x01, 0x16, 0xaa, 0xc4, 0x61, 0x2d, 0x2b, 0x32, 0x4e, 0xdb, 0x73, 0x6d, 0xd7, - 0x27, 0x55, 0x54, 0x32, 0x3d, 0xb5, 0x60, 0x54, 0xa5, 0x47, 0x03, 0x71, 0xe4, 0x5f, 0x25, 0x35, - 0x2b, 0x68, 0xf9, 0xb2, 0x43, 0x0e, 0x43, 0x8f, 0x3c, 0x0a, 0x08, 0xf5, 0x29, 0x32, 0x30, 0x82, - 0x15, 0x87, 0x90, 0x2a, 0x0d, 0x3d, 0x72, 0xd0, 0x20, 0x1d, 0x54, 0x60, 0x75, 0x8a, 0xdf, 0xec, - 0x1f, 0xcc, 0xcf, 0x0c, 0xc0, 0x22, 0x20, 0x5e, 0x61, 0x96, 0xf1, 0xf1, 0xd9, 0x85, 0xed, 0x3a, - 0xeb, 0x58, 0xfe, 0x6a, 0xb6, 0x5b, 0xcd, 0x77, 0xd9, 0x55, 0xc0, 0x39, 0xbe, 0x5b, 0xab, 0x21, - 0x03, 0x5f, 0x87, 0xcb, 0x39, 0x7a, 0xd5, 0x73, 0xdb, 0xa8, 0xb0, 0x5d, 0x58, 0x34, 0xf0, 0xb5, - 0x19, 0x66, 0x93, 0x90, 0x36, 0x2a, 0xb2, 0x21, 0xca, 0x31, 0xd4, 0x04, 0x14, 0xc5, 0x4b, 0xe6, - 0x07, 0x06, 0x5c, 0x15, 0xcd, 0x54, 0xb3, 0x39, 0x69, 0xea, 0x0e, 0x6c, 0x49, 0xec, 0x8e, 0xb3, - 0x1a, 0xba, 0x09, 0x28, 0xc3, 0x15, 0xcd, 0xbc, 0x02, 0x1b, 0x19, 0x2a, 0x6f, 0x47, 0x81, 0xad, - 0xd5, 0x0c, 0x79, 0x8f, 0x50, 0x3f, 0x24, 0xb5, 0x9a, 0xeb, 0xf9, 0xa2, 0x21, 0x45, 0xb3, 0x0c, - 0x1b, 0x95, 0x68, 0x34, 0x61, 0x5f, 0x0a, 0xfd, 0x71, 0x3c, 0xe8, 0xf3, 0x26, 0xac, 0xc2, 0x12, - 0xf9, 0x9b, 0x4f, 0x1c, 0xda, 0x70, 0x1d, 0x34, 0x67, 0xee, 0xe4, 0x64, 0xd4, 0xaa, 0xa1, 0xb4, - 0x8e, 0xe6, 0xcc, 0x2e, 0xac, 0x2a, 0x2f, 0x48, 0x31, 0x2b, 0x76, 0x61, 0x5b, 0xcd, 0x35, 0xbe, - 0x7e, 0xf3, 0xaf, 0xb0, 0x05, 0x9b, 0xb3, 0x7c, 0xe2, 0x23, 0x83, 0x8d, 0x42, 0x8e, 0xc3, 0xe8, - 0x05, 0xf3, 0x1f, 0xb0, 0x92, 0x01, 0xf7, 0xbc, 0x06, 0x97, 0xf5, 0xe7, 0x76, 0xd4, 0x3f, 0x8e, - 0xfb, 0x27, 0x68, 0x2e, 0xcf, 0xf0, 0xa6, 0xfd, 0x3e, 0x63, 0xf0, 0x19, 0xaf, 0x33, 0xfc, 0x68, - 0xf4, 0x34, 0xee, 0x77, 0x27, 0xd1, 0x31, 0x2a, 0x98, 0xbf, 0x82, 0xd5, 0x0c, 0x08, 0x02, 0x7b, - 0xb5, 0x96, 0x2b, 0x15, 0x82, 0x4d, 0xaa, 0x8d, 0xc0, 0x46, 0xf3, 0x6c, 0xae, 0xd7, 0x1b, 0xfb, - 0x75, 0x04, 0xe6, 0x27, 0x06, 0x33, 0x49, 0x39, 0x50, 0x98, 0x5d, 0xb3, 0x54, 0x67, 0xb0, 0x81, - 0x10, 0x78, 0x29, 0x84, 0x52, 0x71, 0x3d, 0xb5, 0x03, 0x5b, 0xf2, 0x21, 0xb4, 0x9c, 0x6a, 0x58, - 0xb7, 0xbc, 0x6a, 0xc7, 0xf2, 0xd8, 0xe8, 0x1c, 0xa2, 0x02, 0x9f, 0x72, 0x1a, 0x25, 0xf4, 0xdd, - 0xa0, 0x52, 0x47, 0x45, 0x36, 0xc2, 0x19, 0x7a, 0xbb, 0xe1, 0xa0, 0x12, 0x9f, 0xc0, 0x33, 0xd2, - 0xbc, 0x5a, 0xc6, 0x9f, 0x37, 0x63, 0x40, 0x79, 0xbf, 0xff, 0x99, 0x7b, 0x42, 0x2f, 0x70, 0x1c, - 0xb1, 0x42, 0xd7, 0x61, 0xd9, 0xf5, 0xeb, 0xc4, 0x93, 0x88, 0x36, 0x1c, 0xc2, 0x26, 0x70, 0xac, - 0xc0, 0xaf, 0xbb, 0x5e, 0xe3, 0x31, 0x5f, 0xaa, 0x5b, 0xb0, 0x49, 0x5b, 0x56, 0xa5, 0x19, 0x3a, - 0xae, 0x1f, 0x36, 0x9c, 0xb0, 0x52, 0xb7, 0x1c, 0x87, 0xb4, 0x10, 0x98, 0x5f, 0x1a, 0x70, 0xfd, - 0x82, 0x4b, 0x13, 0x7c, 0x07, 0x6e, 0xd7, 0x89, 0x55, 0x6d, 0x11, 0x4a, 0x43, 0x56, 0x25, 0x71, - 0x7c, 0x79, 0x65, 0x77, 0xe6, 0x74, 0xb8, 0x0d, 0x3f, 0xbd, 0x58, 0x3c, 0x55, 0x2c, 0x3f, 0x87, - 0x9f, 0x5c, 0x2c, 0x2a, 0x15, 0x4d, 0x01, 0x9b, 0xf0, 0xb3, 0x8b, 0x25, 0x13, 0x05, 0x55, 0xdc, - 0x7b, 0xf0, 0xf2, 0x9b, 0xdd, 0xb9, 0x97, 0xaf, 0x77, 0x8d, 0x57, 0xaf, 0x77, 0x8d, 0xaf, 0x5f, - 0xef, 0x1a, 0x8f, 0x7f, 0xf1, 0x06, 0x49, 0x9b, 0x9e, 0x2c, 0xf0, 0x3b, 0xe1, 0x7b, 0xdf, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x98, 0x41, 0x63, 0xe1, 0x1b, 0x79, 0x01, 0x00, + // 25594 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x70, 0x1c, 0x49, + 0x76, 0x20, 0x36, 0xfd, 0x01, 0xa0, 0xf1, 0xf0, 0xd5, 0x48, 0x80, 0x24, 0x88, 0x21, 0x07, 0x9c, + 0xe2, 0x0c, 0x87, 0x9c, 0x0f, 0x72, 0x09, 0xee, 0x70, 0x77, 0xbe, 0xb7, 0xd1, 0x0d, 0x12, 0x4d, + 0x82, 0x40, 0x6f, 0x35, 0x40, 0xec, 0x68, 0x76, 0xb7, 0xb7, 0xd0, 0x9d, 0x00, 0x6a, 0xd0, 0xdd, + 0xd5, 0x5b, 0x55, 0x4d, 0x12, 0xab, 0x3b, 0x9f, 0xa4, 0x3b, 0x69, 0x2d, 0xeb, 0xf4, 0x75, 0x5e, + 0x9d, 0xf6, 0xec, 0x3b, 0x85, 0x42, 0x71, 0x77, 0x96, 0xed, 0x93, 0xc2, 0x21, 0xe9, 0xe2, 0xce, + 0x21, 0x9f, 0x7c, 0x72, 0x28, 0x14, 0xb2, 0x2e, 0xce, 0x56, 0x84, 0xcf, 0x61, 0x7b, 0xad, 0x80, + 0x2c, 0xcb, 0xbe, 0x70, 0x30, 0xec, 0x0b, 0xd9, 0xb2, 0x2f, 0xec, 0x75, 0xc8, 0x76, 0xe4, 0xcb, + 0xcc, 0xaa, 0xcc, 0xaa, 0xea, 0x0f, 0x0c, 0x39, 0x96, 0xb8, 0xf6, 0x1f, 0x12, 0xfd, 0xf2, 0xbd, + 0x97, 0x9f, 0x95, 0xf9, 0xf2, 0xe5, 0xfb, 0x80, 0x17, 0x7d, 0xda, 0xa4, 0x1d, 0xc7, 0xf5, 0xaf, + 0x35, 0xe9, 0xbe, 0x55, 0x3f, 0xba, 0xe6, 0x1f, 0x75, 0xa8, 0xc7, 0xff, 0xbd, 0xda, 0x71, 0x1d, + 0xdf, 0x21, 0x23, 0xf8, 0x63, 0x71, 0x7e, 0xdf, 0xd9, 0x77, 0x10, 0x72, 0x8d, 0xfd, 0xc5, 0x0b, + 0x17, 0x97, 0xf6, 0x1d, 0x67, 0xbf, 0x49, 0xaf, 0xe1, 0xaf, 0xdd, 0xee, 0xde, 0x35, 0xdf, 0x6e, + 0x51, 0xcf, 0xb7, 0x5a, 0x1d, 0x81, 0x70, 0x25, 0xa8, 0xc0, 0xf2, 0x7d, 0x56, 0xe2, 0xdb, 0x4e, + 0xfb, 0xda, 0x83, 0xeb, 0xea, 0x4f, 0x81, 0xfa, 0x46, 0x72, 0x5b, 0x1e, 0xba, 0x56, 0xa7, 0x43, + 0xdd, 0xf0, 0x0f, 0x8e, 0x6e, 0xfc, 0x83, 0x0c, 0x8c, 0xdf, 0xa5, 0xb4, 0x53, 0x68, 0xda, 0x0f, + 0x28, 0xb9, 0x08, 0xd9, 0x0d, 0xab, 0x45, 0x17, 0x52, 0x17, 0x52, 0x97, 0xc7, 0x57, 0x66, 0x1e, + 0x1f, 0x2f, 0x4d, 0x78, 0xd4, 0x7d, 0x40, 0xdd, 0x5a, 0xdb, 0x6a, 0x51, 0x13, 0x0b, 0xc9, 0x6b, + 0x30, 0xce, 0xfe, 0xf7, 0x3a, 0x56, 0x9d, 0x2e, 0xa4, 0x11, 0x73, 0xea, 0xf1, 0xf1, 0xd2, 0x78, + 0x5b, 0x02, 0xcd, 0xb0, 0x9c, 0x5c, 0x82, 0xb1, 0x75, 0x6a, 0x79, 0xb4, 0x5c, 0x5a, 0xc8, 0x5c, + 0x48, 0x5d, 0xce, 0xac, 0x4c, 0x3e, 0x3e, 0x5e, 0xca, 0x35, 0x19, 0xa8, 0x66, 0x37, 0x4c, 0x59, + 0x48, 0xca, 0x30, 0xb6, 0xfa, 0xa8, 0x63, 0xbb, 0xd4, 0x5b, 0xc8, 0x5e, 0x48, 0x5d, 0x9e, 0x58, + 0x5e, 0xbc, 0xca, 0x07, 0xe5, 0xaa, 0x1c, 0x94, 0xab, 0x5b, 0x72, 0x50, 0x56, 0xe6, 0x7e, 0xe7, + 0x78, 0xe9, 0xb9, 0xc7, 0xc7, 0x4b, 0x63, 0x94, 0x93, 0xfc, 0xd4, 0x1f, 0x2c, 0xa5, 0x4c, 0x49, + 0x4f, 0xde, 0x85, 0xec, 0xd6, 0x51, 0x87, 0x2e, 0x8c, 0x5f, 0x48, 0x5d, 0x9e, 0x5e, 0x7e, 0xe1, + 0x2a, 0x9f, 0x86, 0xa0, 0x93, 0xe1, 0x5f, 0x0c, 0x6b, 0x25, 0xf7, 0xf8, 0x78, 0x29, 0xcb, 0x50, + 0x4c, 0xa4, 0x22, 0x6f, 0xc0, 0xe8, 0x9a, 0xe3, 0xf9, 0xe5, 0xd2, 0x02, 0x60, 0xd7, 0x4e, 0x3d, + 0x3e, 0x5e, 0x9a, 0x3d, 0x70, 0x3c, 0xbf, 0x66, 0x37, 0x5e, 0x77, 0x5a, 0xb6, 0x4f, 0x5b, 0x1d, + 0xff, 0xc8, 0x14, 0x48, 0xc6, 0x23, 0x98, 0xd2, 0xf8, 0x91, 0x09, 0x18, 0xdb, 0xde, 0xb8, 0xbb, + 0xb1, 0xb9, 0xb3, 0x91, 0x7f, 0x8e, 0xe4, 0x20, 0xbb, 0xb1, 0x59, 0x5a, 0xcd, 0xa7, 0xc8, 0x18, + 0x64, 0x0a, 0x95, 0x4a, 0x3e, 0x4d, 0x26, 0x21, 0x57, 0x2a, 0x6c, 0x15, 0x56, 0x0a, 0xd5, 0xd5, + 0x7c, 0x86, 0xcc, 0xc1, 0xcc, 0x4e, 0x79, 0xa3, 0xb4, 0xb9, 0x53, 0xad, 0x95, 0x56, 0xab, 0x77, + 0xb7, 0x36, 0x2b, 0xf9, 0x2c, 0x99, 0x06, 0xb8, 0xbb, 0xbd, 0xb2, 0x6a, 0x6e, 0xac, 0x6e, 0xad, + 0x56, 0xf3, 0x23, 0x64, 0x1e, 0xf2, 0x92, 0xa4, 0x56, 0x5d, 0x35, 0xef, 0x97, 0x8b, 0xab, 0xf9, + 0x51, 0xe3, 0x1f, 0x65, 0x20, 0x77, 0x8f, 0xfa, 0x56, 0xc3, 0xf2, 0x2d, 0x72, 0x4e, 0x9b, 0x38, + 0xec, 0x93, 0x32, 0x63, 0x17, 0xe3, 0x33, 0x36, 0xf2, 0xf8, 0x78, 0x29, 0xf5, 0x86, 0x3a, 0x53, + 0xef, 0xc0, 0x44, 0x89, 0x7a, 0x75, 0xd7, 0xee, 0xb0, 0xd5, 0x84, 0xb3, 0x35, 0xbe, 0x72, 0xf6, + 0xf1, 0xf1, 0xd2, 0xa9, 0x46, 0x08, 0x56, 0x46, 0x40, 0xc5, 0x26, 0x65, 0x18, 0x5d, 0xb7, 0x76, + 0x69, 0xd3, 0x5b, 0x18, 0xb9, 0x90, 0xb9, 0x3c, 0xb1, 0xfc, 0xbc, 0x18, 0x75, 0xd9, 0xc0, 0xab, + 0xbc, 0x74, 0xb5, 0xed, 0xbb, 0x47, 0x2b, 0xf3, 0x8f, 0x8f, 0x97, 0xf2, 0x4d, 0x04, 0xa8, 0x23, + 0xca, 0x51, 0x48, 0x35, 0x5c, 0x09, 0xa3, 0x03, 0x57, 0xc2, 0xf9, 0xdf, 0x39, 0x5e, 0x4a, 0xb1, + 0x19, 0x12, 0x2b, 0x21, 0xe4, 0xa7, 0xaf, 0x09, 0x03, 0xd2, 0xe5, 0xd2, 0xc2, 0x18, 0xae, 0x40, + 0xf2, 0xf8, 0x78, 0x69, 0x52, 0x9d, 0xcc, 0x85, 0x94, 0x99, 0x2e, 0x97, 0xc8, 0x32, 0xe4, 0x4c, + 0xfa, 0xc0, 0xf6, 0x58, 0xef, 0x73, 0xd8, 0xfb, 0xd3, 0x8f, 0x8f, 0x97, 0x88, 0x2b, 0x60, 0x4a, + 0x53, 0x03, 0xbc, 0xc5, 0xb7, 0x60, 0x42, 0xe9, 0x19, 0xc9, 0x43, 0xe6, 0x90, 0x1e, 0xf1, 0x59, + 0x30, 0xd9, 0x9f, 0x64, 0x1e, 0x46, 0x1e, 0x58, 0xcd, 0xae, 0x18, 0x76, 0x93, 0xff, 0x78, 0x3b, + 0xfd, 0xf9, 0x94, 0xf1, 0xd7, 0xb2, 0x90, 0x33, 0x1d, 0xfe, 0xed, 0x92, 0x2b, 0x30, 0x52, 0xf5, + 0x2d, 0x5f, 0x4e, 0xe0, 0xdc, 0xe3, 0xe3, 0xa5, 0x19, 0xf6, 0x5d, 0x53, 0xa5, 0x56, 0x8e, 0xc1, + 0x50, 0x2b, 0x07, 0x96, 0x27, 0x27, 0x12, 0x51, 0x3b, 0x0c, 0xa0, 0xa2, 0x22, 0x06, 0xb9, 0x04, + 0xd9, 0x7b, 0x4e, 0x83, 0x8a, 0xb9, 0x64, 0xfd, 0x9e, 0x6e, 0x39, 0x0d, 0x15, 0x11, 0xcb, 0xc9, + 0xeb, 0x30, 0x5e, 0xec, 0xba, 0x2e, 0x6d, 0xb3, 0x65, 0x9f, 0x45, 0xe4, 0xe9, 0xc7, 0xc7, 0x4b, + 0x50, 0xe7, 0x40, 0xf6, 0xa1, 0x86, 0x08, 0x6c, 0x82, 0xaa, 0xbe, 0xe5, 0xfa, 0xb4, 0xb1, 0x30, + 0x32, 0xd4, 0x04, 0xb1, 0x4f, 0x75, 0xd6, 0xe3, 0x24, 0xd1, 0x09, 0x12, 0x9c, 0xc8, 0x1a, 0x4c, + 0xdc, 0x76, 0xad, 0x3a, 0xad, 0x50, 0xd7, 0x76, 0x1a, 0x38, 0xf3, 0x99, 0x95, 0x4b, 0x8f, 0x8f, + 0x97, 0x4e, 0xef, 0x33, 0x70, 0xad, 0x83, 0xf0, 0x90, 0xfa, 0xbb, 0xc7, 0x4b, 0xb9, 0x52, 0xd7, + 0xc5, 0xd1, 0x33, 0x55, 0x52, 0xf2, 0x35, 0x36, 0x25, 0x9e, 0x8f, 0x43, 0x4b, 0x1b, 0x38, 0xe7, + 0xfd, 0x9b, 0x68, 0x88, 0x26, 0x9e, 0x6e, 0x5a, 0x9e, 0x5f, 0x73, 0x39, 0x5d, 0xa4, 0x9d, 0x2a, + 0x4b, 0xb2, 0x09, 0xb9, 0x6a, 0xfd, 0x80, 0x36, 0xba, 0x4d, 0x8a, 0x0b, 0x65, 0x62, 0xf9, 0x8c, + 0x58, 0xee, 0x72, 0x3e, 0x65, 0xf1, 0xca, 0xa2, 0xe0, 0x4d, 0x3c, 0x01, 0x51, 0x57, 0x91, 0xc4, + 0x7a, 0x3b, 0xf7, 0xed, 0x9f, 0x5f, 0x7a, 0xee, 0x07, 0x7e, 0xff, 0xc2, 0x73, 0xc6, 0x3f, 0x48, + 0x43, 0x3e, 0xca, 0x84, 0xec, 0xc1, 0xd4, 0x76, 0xa7, 0x61, 0xf9, 0xb4, 0xd8, 0xb4, 0x69, 0xdb, + 0xf7, 0x70, 0x91, 0xf4, 0xef, 0xd3, 0x4b, 0xa2, 0xde, 0x85, 0x2e, 0x12, 0xd6, 0xea, 0x9c, 0x32, + 0xd2, 0x2b, 0x9d, 0x6d, 0x58, 0x4f, 0x15, 0xf7, 0x7c, 0x0f, 0x57, 0xd8, 0xc9, 0xea, 0xe1, 0xa7, + 0x45, 0x8f, 0x7a, 0x04, 0x5b, 0xb1, 0x80, 0xda, 0x8d, 0xdd, 0x23, 0x5c, 0x99, 0xc3, 0x2f, 0x20, + 0x46, 0x92, 0xb0, 0x80, 0x18, 0xd8, 0xf8, 0xef, 0x52, 0x30, 0x6d, 0x52, 0xcf, 0xe9, 0xba, 0x75, + 0xba, 0x46, 0xad, 0x06, 0x75, 0xd9, 0xf2, 0xbf, 0x6b, 0xb7, 0x1b, 0xe2, 0x9b, 0xc2, 0xe5, 0x7f, + 0x68, 0xb7, 0xd5, 0x5d, 0x1c, 0xcb, 0xc9, 0x67, 0x60, 0xac, 0xda, 0xdd, 0x45, 0xd4, 0x74, 0xf8, + 0xdd, 0x7b, 0xdd, 0xdd, 0x5a, 0x04, 0x5d, 0xa2, 0x91, 0x6b, 0x30, 0x76, 0x9f, 0xba, 0x5e, 0xb8, + 0x4f, 0xe2, 0x29, 0xf1, 0x80, 0x83, 0x54, 0x02, 0x81, 0x45, 0x6e, 0x87, 0x7b, 0xb5, 0x38, 0xdf, + 0x66, 0x22, 0x3b, 0x64, 0xb8, 0x54, 0x5a, 0x02, 0xa2, 0x2e, 0x15, 0x89, 0x65, 0xfc, 0x74, 0x1a, + 0xf2, 0x25, 0xcb, 0xb7, 0x76, 0x2d, 0x4f, 0x8c, 0xe7, 0xfd, 0x1b, 0x6c, 0xf7, 0x57, 0x3a, 0x8a, + 0xbb, 0x3f, 0x6b, 0xf9, 0x27, 0xee, 0xde, 0xcb, 0xd1, 0xee, 0x4d, 0xb0, 0xc3, 0x56, 0x74, 0x2f, + 0xec, 0xd4, 0x7b, 0x83, 0x3b, 0x95, 0x17, 0x9d, 0xca, 0xc9, 0x4e, 0x85, 0x5d, 0x21, 0xef, 0x41, + 0xb6, 0xda, 0xa1, 0x75, 0xb1, 0x89, 0xc8, 0x13, 0x43, 0xef, 0x1c, 0x43, 0xb8, 0x7f, 0x63, 0x65, + 0x52, 0xb0, 0xc9, 0x7a, 0x1d, 0x5a, 0x37, 0x91, 0x4c, 0xf9, 0x68, 0xfe, 0x61, 0x06, 0xe6, 0x93, + 0xc8, 0xd4, 0x7e, 0x8c, 0xf6, 0xe9, 0xc7, 0x65, 0xc8, 0xb1, 0xd3, 0x9c, 0x1d, 0x98, 0xb8, 0x5d, + 0x8c, 0x73, 0x21, 0xe5, 0x40, 0xc0, 0xcc, 0xa0, 0x94, 0x5c, 0x0c, 0x84, 0x83, 0x5c, 0xc8, 0x4f, + 0x08, 0x07, 0x52, 0x24, 0x60, 0x73, 0x2d, 0x3f, 0x61, 0x94, 0x21, 0xc2, 0x61, 0x91, 0xe0, 0x70, + 0xae, 0x5d, 0x01, 0xd1, 0x0e, 0x17, 0x79, 0x28, 0xac, 0x42, 0x4e, 0x76, 0x6b, 0x61, 0x12, 0x19, + 0xcd, 0x46, 0x06, 0xe9, 0xfe, 0x0d, 0x3e, 0x99, 0x0d, 0xf1, 0x5b, 0x65, 0x23, 0x71, 0xc8, 0x0d, + 0xc8, 0x55, 0x5c, 0xe7, 0xd1, 0x51, 0xb9, 0xe4, 0x2d, 0x4c, 0x5d, 0xc8, 0x5c, 0x1e, 0x5f, 0x39, + 0xf3, 0xf8, 0x78, 0x69, 0xae, 0xc3, 0x60, 0x35, 0xbb, 0xa1, 0x9e, 0xc1, 0x01, 0xe2, 0x9d, 0x6c, + 0x2e, 0x95, 0x4f, 0xdf, 0xc9, 0xe6, 0xd2, 0xf9, 0xcc, 0x9d, 0x6c, 0x2e, 0x93, 0xcf, 0xde, 0xc9, + 0xe6, 0xb2, 0xf9, 0x91, 0x3b, 0xd9, 0xdc, 0x48, 0x7e, 0xf4, 0x4e, 0x36, 0x37, 0x9e, 0x87, 0x3b, + 0xd9, 0xdc, 0x44, 0x7e, 0x52, 0x93, 0x03, 0x90, 0x81, 0xef, 0xd4, 0x9d, 0xa6, 0x99, 0xd9, 0x36, + 0xcb, 0xe6, 0x68, 0xb1, 0x50, 0xa4, 0xae, 0x6f, 0x66, 0x0a, 0x3b, 0x55, 0x73, 0xaa, 0x74, 0xd4, + 0xb6, 0x5a, 0x76, 0x9d, 0x1f, 0x98, 0x66, 0xe6, 0x76, 0xb1, 0x62, 0x14, 0x60, 0x3a, 0xec, 0xcb, + 0xba, 0xed, 0xf9, 0xe4, 0x1a, 0x8c, 0x4b, 0x08, 0xdb, 0xe8, 0x32, 0x89, 0xbd, 0x36, 0x43, 0x1c, + 0xe3, 0xb7, 0xd3, 0x00, 0x61, 0xc9, 0x33, 0xfa, 0x2d, 0x7c, 0x4e, 0xfb, 0x16, 0x4e, 0x45, 0xbf, + 0x85, 0x9e, 0x5f, 0x01, 0xf9, 0x00, 0x46, 0x99, 0x58, 0xd0, 0x95, 0xc2, 0xd2, 0x99, 0x28, 0x29, + 0x16, 0xde, 0xbf, 0xb1, 0x32, 0x2d, 0x88, 0x47, 0x3d, 0x84, 0x98, 0x82, 0x4c, 0xf9, 0x8c, 0x7e, + 0x6e, 0x2c, 0x9c, 0x0c, 0xf1, 0x01, 0x5d, 0x86, 0x60, 0x42, 0xc5, 0x80, 0xe2, 0x97, 0xd1, 0x91, + 0x93, 0x1c, 0x94, 0x92, 0xb3, 0xc0, 0x26, 0x5c, 0x0c, 0xea, 0xd8, 0xe3, 0xe3, 0xa5, 0x4c, 0xd7, + 0xb5, 0x71, 0x11, 0x90, 0x6b, 0x20, 0x96, 0x81, 0x18, 0x40, 0xb6, 0xfa, 0x66, 0xeb, 0x56, 0xad, + 0x4e, 0x5d, 0x5f, 0x13, 0xc2, 0x04, 0x1a, 0xe9, 0x80, 0xbe, 0x54, 0x16, 0xb2, 0xb8, 0x0c, 0x2e, + 0x27, 0x8e, 0xca, 0x55, 0x0d, 0x95, 0x0b, 0x98, 0x17, 0xe4, 0xa9, 0xd4, 0xe0, 0x65, 0xb5, 0x98, + 0xb0, 0xa9, 0x57, 0x40, 0x6e, 0x00, 0x5b, 0xa1, 0x62, 0xf4, 0x41, 0xd4, 0x53, 0xd8, 0xa9, 0xae, + 0x9c, 0x12, 0x9c, 0xa6, 0xac, 0x87, 0x2a, 0x39, 0xc3, 0x26, 0xef, 0x00, 0x5b, 0xc2, 0x62, 0xdc, + 0x89, 0x20, 0xba, 0x5d, 0xac, 0x14, 0x9b, 0x4e, 0xb7, 0x51, 0xfd, 0xe2, 0x7a, 0x48, 0xbc, 0x5f, + 0xef, 0xa8, 0xc4, 0xb7, 0x8b, 0x15, 0xf2, 0x0e, 0x8c, 0x14, 0xbe, 0xd1, 0x75, 0xa9, 0x90, 0x4f, + 0x26, 0x65, 0x9d, 0x0c, 0xb6, 0x72, 0x46, 0x10, 0xce, 0x58, 0xec, 0xa7, 0x2a, 0xd7, 0x61, 0x39, + 0xab, 0x79, 0x6b, 0xbd, 0x2a, 0x64, 0x0f, 0x12, 0x19, 0x96, 0xad, 0x75, 0xa5, 0xd9, 0xbe, 0xd6, + 0x6b, 0x46, 0x45, 0xae, 0x41, 0xba, 0x50, 0xc2, 0xcb, 0xd1, 0xc4, 0xf2, 0xb8, 0xac, 0xb6, 0xb4, + 0x32, 0x2f, 0x48, 0x26, 0x2d, 0xf5, 0x33, 0x48, 0x17, 0x4a, 0x64, 0x05, 0x46, 0xee, 0x1d, 0x55, + 0xbf, 0xb8, 0x2e, 0x36, 0xb3, 0x39, 0xb9, 0xae, 0x19, 0x6c, 0x13, 0x3f, 0x7b, 0x2f, 0x6c, 0x71, + 0xeb, 0xc8, 0xfb, 0x7a, 0x53, 0x6d, 0x31, 0xa2, 0x91, 0x0a, 0x8c, 0x17, 0x1a, 0x2d, 0xbb, 0xbd, + 0xed, 0x51, 0x77, 0x61, 0x02, 0xf9, 0x2c, 0x44, 0xda, 0x1d, 0x94, 0xaf, 0x2c, 0x3c, 0x3e, 0x5e, + 0x9a, 0xb7, 0xd8, 0xcf, 0x5a, 0xd7, 0xa3, 0xae, 0xc2, 0x2d, 0x64, 0x42, 0x2a, 0x00, 0xf7, 0x9c, + 0xf6, 0xbe, 0x53, 0xf0, 0x9b, 0x96, 0x17, 0xd9, 0x1e, 0xc3, 0x82, 0x40, 0x7c, 0x38, 0xd5, 0x62, + 0xb0, 0x9a, 0xc5, 0x80, 0x0a, 0x43, 0x85, 0x07, 0xb9, 0x05, 0xa3, 0x9b, 0xae, 0x55, 0x6f, 0xd2, + 0x85, 0x29, 0xe4, 0x36, 0x2f, 0xb8, 0x71, 0xa0, 0xec, 0xe9, 0x82, 0x60, 0x98, 0x77, 0x10, 0xac, + 0x5e, 0x60, 0x38, 0xe2, 0xe2, 0x0e, 0x90, 0xf8, 0x9a, 0x4c, 0xb8, 0x1a, 0xbc, 0xa6, 0x5e, 0x0d, + 0xc2, 0x8f, 0xbe, 0xe8, 0xb4, 0x5a, 0x56, 0xbb, 0x81, 0xb4, 0xf7, 0x97, 0xd5, 0x1b, 0xc3, 0xd7, + 0x61, 0x36, 0x36, 0x58, 0x03, 0x6e, 0x7e, 0xef, 0xc3, 0x4c, 0x89, 0xee, 0x59, 0xdd, 0xa6, 0x1f, + 0x9c, 0x24, 0xfc, 0x13, 0xc5, 0x3b, 0x58, 0x83, 0x17, 0xd5, 0xe4, 0xf1, 0x61, 0x46, 0x91, 0x8d, + 0xf7, 0x60, 0x4a, 0xeb, 0x3e, 0xbb, 0x2a, 0x14, 0xba, 0x0d, 0xdb, 0xc7, 0x89, 0x4c, 0x85, 0x57, + 0x05, 0x8b, 0x01, 0x71, 0xba, 0xcc, 0x10, 0xc1, 0xf8, 0xdb, 0xaa, 0xb4, 0x22, 0x76, 0x22, 0x76, + 0xc3, 0x16, 0xfb, 0x41, 0x2a, 0x94, 0x9d, 0x62, 0xfb, 0x41, 0xb0, 0x1b, 0x5c, 0xe1, 0xdf, 0x66, + 0x3a, 0xf6, 0x6d, 0x4e, 0x88, 0x99, 0xc8, 0x58, 0x0f, 0x3d, 0xfe, 0x45, 0x06, 0x2b, 0x35, 0xf3, + 0xc9, 0x57, 0xea, 0x07, 0x30, 0x79, 0xcf, 0x6a, 0x5b, 0xfb, 0xb4, 0xc1, 0x7a, 0xc0, 0xf7, 0x9e, + 0xf1, 0x95, 0xe7, 0x1f, 0x1f, 0x2f, 0x9d, 0x69, 0x71, 0x38, 0xf6, 0x52, 0x5d, 0x44, 0x1a, 0x01, + 0xb9, 0x2e, 0xbf, 0xec, 0x91, 0x84, 0x2f, 0x7b, 0x4a, 0xd4, 0x3e, 0x82, 0x5f, 0xb6, 0xf8, 0x9e, + 0x8d, 0xff, 0x35, 0x87, 0x7d, 0x24, 0xaf, 0xc3, 0xa8, 0x49, 0xf7, 0xd9, 0x51, 0x93, 0x0a, 0x27, + 0xc9, 0x45, 0x88, 0x3a, 0x30, 0x1c, 0x07, 0xe5, 0x0c, 0xda, 0xf0, 0x0e, 0xec, 0x3d, 0x5f, 0x8c, + 0x4e, 0x20, 0x67, 0x08, 0xb0, 0x22, 0x67, 0x08, 0x88, 0x7e, 0x89, 0xe5, 0x30, 0xb6, 0xfb, 0x99, + 0xa5, 0xaa, 0x18, 0x34, 0x39, 0xc2, 0x66, 0x49, 0xd9, 0x46, 0x5c, 0x4d, 0x4a, 0x60, 0xd8, 0xe4, + 0x26, 0x8c, 0x17, 0xea, 0x75, 0xa7, 0xab, 0xdc, 0x19, 0xf9, 0x77, 0xcb, 0x81, 0xba, 0xb6, 0x24, + 0x44, 0x25, 0x55, 0x98, 0x58, 0x65, 0x17, 0x2d, 0xbb, 0x68, 0xd5, 0x0f, 0xe4, 0x20, 0xc9, 0x3d, + 0x4c, 0x29, 0x09, 0xbf, 0x5c, 0x8a, 0xc0, 0x3a, 0x03, 0xaa, 0xea, 0x07, 0x05, 0x97, 0x6c, 0xc1, + 0x44, 0x95, 0xd6, 0x5d, 0xea, 0x57, 0x7d, 0xc7, 0xa5, 0x91, 0x2d, 0x59, 0x29, 0x59, 0x79, 0x41, + 0xde, 0xf5, 0x3c, 0x04, 0xd6, 0x3c, 0x06, 0x55, 0xb9, 0x2a, 0xc8, 0x5c, 0x68, 0x6f, 0x39, 0xee, + 0x51, 0x69, 0x45, 0x6c, 0xd3, 0xe1, 0x99, 0xce, 0xc1, 0xaa, 0xd0, 0xce, 0x20, 0x8d, 0x5d, 0x5d, + 0x68, 0xe7, 0x58, 0x38, 0x53, 0xa5, 0x2a, 0xca, 0x56, 0x62, 0xd3, 0x9e, 0x09, 0x47, 0x19, 0xc1, + 0xca, 0x4c, 0x35, 0x3c, 0x94, 0xcc, 0xb4, 0x99, 0x12, 0x58, 0xa4, 0x03, 0x44, 0xce, 0x1a, 0x17, + 0x74, 0x9b, 0xd4, 0xf3, 0xc4, 0x5e, 0x7e, 0x36, 0x32, 0xf9, 0x21, 0xc2, 0xca, 0xcb, 0x82, 0xf9, + 0x79, 0xb9, 0x0c, 0xc4, 0x3d, 0x8d, 0x15, 0x2a, 0xf5, 0x24, 0xf0, 0x26, 0x6f, 0x01, 0xac, 0x3e, + 0xf2, 0xa9, 0xdb, 0xb6, 0x9a, 0x81, 0x4a, 0x0c, 0x95, 0x42, 0x54, 0x40, 0xf5, 0x89, 0x56, 0x90, + 0x49, 0x11, 0xa6, 0x0a, 0x9e, 0xd7, 0x6d, 0x51, 0xd3, 0x69, 0xd2, 0x82, 0xb9, 0x81, 0xfb, 0xfe, + 0xf8, 0xca, 0xf9, 0xc7, 0xc7, 0x4b, 0x67, 0x2d, 0x2c, 0xa8, 0xb9, 0x4e, 0x93, 0xd6, 0x2c, 0x57, + 0x5d, 0xdd, 0x3a, 0x0d, 0xd9, 0x04, 0xd8, 0xec, 0xd0, 0x76, 0x95, 0x5a, 0x6e, 0xfd, 0x20, 0xb2, + 0xcd, 0x87, 0x05, 0x2b, 0xe7, 0x44, 0x0f, 0xe7, 0x9d, 0x0e, 0x6d, 0x7b, 0x08, 0x53, 0x5b, 0x15, + 0x62, 0x92, 0x1d, 0x98, 0x29, 0x17, 0xee, 0x55, 0x9c, 0xa6, 0x5d, 0x3f, 0x12, 0x92, 0xd3, 0x34, + 0x2a, 0x0a, 0x4f, 0x0b, 0xae, 0x91, 0x52, 0xbe, 0x3d, 0xd9, 0x56, 0xab, 0xd6, 0x41, 0x68, 0x4d, + 0xc8, 0x4f, 0x51, 0x2e, 0xe4, 0x43, 0xb6, 0x06, 0x3d, 0x26, 0x0c, 0x6e, 0x59, 0xfb, 0xde, 0xc2, + 0x8c, 0xa6, 0x07, 0x2b, 0xec, 0x54, 0xaf, 0x2a, 0xa5, 0x5c, 0x4c, 0x59, 0xe4, 0x0b, 0x11, 0xa1, + 0x35, 0xdf, 0xda, 0xf7, 0xf4, 0x85, 0x18, 0x60, 0x2f, 0xbe, 0x0f, 0xf9, 0x28, 0xf1, 0x49, 0x54, + 0x4d, 0x77, 0xb2, 0xb9, 0xa9, 0xfc, 0xb4, 0xd2, 0xe2, 0xd5, 0x47, 0xb6, 0xe7, 0x7b, 0xc6, 0xf7, + 0x6b, 0x5f, 0x0d, 0xfb, 0xa2, 0xef, 0xd2, 0xa3, 0x8a, 0x4b, 0xf7, 0xec, 0x47, 0x62, 0x03, 0xc2, + 0x2f, 0xfa, 0x90, 0x1e, 0xd5, 0x3a, 0x08, 0x55, 0xbf, 0xe8, 0x00, 0x95, 0x7c, 0x16, 0x72, 0x77, + 0xef, 0x55, 0xef, 0xd2, 0xa3, 0x72, 0x49, 0x1c, 0x2e, 0x9c, 0xac, 0xe5, 0xd5, 0x18, 0xa9, 0xb6, + 0x3e, 0x02, 0x4c, 0x63, 0x25, 0xdc, 0xbd, 0x58, 0xcd, 0xc5, 0x66, 0xd7, 0xf3, 0xa9, 0x5b, 0x2e, + 0xa9, 0x35, 0xd7, 0x39, 0x30, 0xb2, 0x97, 0x04, 0xa8, 0xc6, 0x3f, 0x4c, 0xe3, 0xce, 0xc5, 0x16, + 0x69, 0xb9, 0xed, 0xf9, 0x56, 0xbb, 0x4e, 0x03, 0x06, 0xb8, 0x48, 0x6d, 0x01, 0x8d, 0x2c, 0xd2, + 0x10, 0x59, 0xaf, 0x3a, 0x3d, 0x74, 0xd5, 0xac, 0x4a, 0xa9, 0x6d, 0x10, 0xaa, 0x6d, 0x51, 0xa5, + 0x2b, 0xa0, 0x91, 0x2a, 0x43, 0x64, 0x72, 0x09, 0xc6, 0xca, 0x85, 0x7b, 0x85, 0xae, 0x7f, 0x80, + 0xfb, 0x66, 0x8e, 0xcb, 0xd4, 0x6c, 0x85, 0x59, 0x5d, 0xff, 0xc0, 0x94, 0x85, 0xe4, 0x1a, 0xde, + 0x55, 0xda, 0xd4, 0xe7, 0x4a, 0x55, 0x71, 0x50, 0x7a, 0x1c, 0x14, 0xb9, 0xaa, 0x30, 0x10, 0x79, + 0x15, 0x46, 0xee, 0x57, 0x8a, 0xe5, 0x92, 0xb8, 0xec, 0xe2, 0xe9, 0xf1, 0xa0, 0x53, 0xd7, 0x5b, + 0xc2, 0x51, 0x8c, 0xdf, 0x4c, 0x85, 0x7b, 0x12, 0xb9, 0xa4, 0xc9, 0x10, 0xa8, 0x28, 0x61, 0x32, + 0x84, 0xaa, 0x28, 0x41, 0x69, 0xc2, 0x04, 0x52, 0xec, 0x7a, 0xbe, 0xd3, 0x5a, 0x6d, 0x37, 0x3a, + 0x8e, 0xdd, 0xf6, 0x91, 0x8a, 0x8f, 0x9a, 0xf1, 0xf8, 0x78, 0xe9, 0x85, 0x3a, 0x96, 0xd6, 0xa8, + 0x28, 0xae, 0x45, 0xb8, 0x24, 0x50, 0x3f, 0xc1, 0x40, 0x1a, 0xbf, 0x9b, 0xd6, 0xce, 0x12, 0xd6, + 0x3c, 0x93, 0x76, 0x9a, 0x76, 0x1d, 0xaf, 0xcf, 0xb7, 0x5d, 0xa7, 0xdb, 0x09, 0x96, 0x03, 0x36, + 0xcf, 0x0d, 0x4b, 0x6b, 0xfb, 0xac, 0x58, 0xe7, 0x9d, 0x40, 0x4d, 0xbe, 0x00, 0x93, 0xec, 0x58, + 0x17, 0x3f, 0xbd, 0x85, 0x34, 0xce, 0xc4, 0x39, 0x54, 0x79, 0x79, 0xd4, 0x0d, 0xd8, 0x68, 0xf2, + 0x80, 0x4a, 0x41, 0x1a, 0xb0, 0xb0, 0xe5, 0x5a, 0x6d, 0xcf, 0xf6, 0x57, 0xdb, 0x75, 0xf7, 0x08, + 0xc5, 0x90, 0xd5, 0xb6, 0xb5, 0xdb, 0xa4, 0x0d, 0xec, 0x6e, 0x6e, 0xe5, 0xf2, 0xe3, 0xe3, 0xa5, + 0x97, 0x7c, 0x8e, 0x53, 0xa3, 0x01, 0x52, 0x8d, 0x72, 0x2c, 0x85, 0x73, 0x4f, 0x4e, 0x4c, 0x6c, + 0x91, 0xc3, 0x8a, 0x8f, 0x1f, 0xfc, 0x44, 0x46, 0xb1, 0x25, 0x98, 0x0d, 0xb6, 0x15, 0xa9, 0xcd, + 0x54, 0x09, 0x8c, 0x7f, 0x99, 0x0a, 0x4f, 0x3b, 0xf2, 0x2e, 0x4c, 0x88, 0xa5, 0xae, 0xac, 0x0b, + 0xdc, 0xae, 0xe4, 0x77, 0x11, 0x99, 0x59, 0x15, 0x9d, 0x5d, 0xb2, 0x0b, 0xc5, 0x75, 0x65, 0x6d, + 0xe0, 0x25, 0xdb, 0xaa, 0x37, 0xa3, 0x54, 0x12, 0x8d, 0x2d, 0x82, 0xad, 0xf5, 0xaa, 0x3e, 0x2a, + 0xb8, 0x08, 0xfc, 0xa6, 0x97, 0x30, 0x0c, 0x0a, 0xf2, 0x93, 0x77, 0xfc, 0xbf, 0x48, 0x25, 0x1d, + 0xaa, 0x64, 0x05, 0xa6, 0x76, 0x1c, 0xf7, 0x10, 0xe7, 0x57, 0x19, 0x04, 0x9c, 0xf9, 0x87, 0xb2, + 0x20, 0xda, 0x21, 0x9d, 0x44, 0x6d, 0x9b, 0x32, 0x1a, 0x7a, 0xdb, 0x22, 0x1c, 0x34, 0x02, 0x36, + 0x0f, 0x01, 0xc7, 0xe0, 0xeb, 0xc0, 0x79, 0x08, 0x9b, 0xa0, 0x2d, 0x61, 0x15, 0xdd, 0xf8, 0x47, + 0x29, 0xf5, 0xf0, 0x64, 0x83, 0x5c, 0x72, 0x5a, 0x96, 0xdd, 0x56, 0xba, 0xc3, 0xdf, 0x77, 0x10, + 0x1a, 0x6d, 0x89, 0x82, 0x4c, 0x6e, 0x40, 0x8e, 0xff, 0x0a, 0x36, 0x49, 0x54, 0x21, 0x09, 0x42, + 0x7d, 0x87, 0x97, 0x88, 0xb1, 0x99, 0xc9, 0x9c, 0x74, 0x66, 0x7e, 0x20, 0x05, 0x13, 0xca, 0x7d, + 0x9a, 0xed, 0xd5, 0x15, 0xd7, 0xf9, 0x98, 0xd6, 0x7d, 0xfd, 0x98, 0xe8, 0x70, 0x60, 0x64, 0xaf, + 0x0e, 0x50, 0x23, 0xc7, 0x43, 0xfa, 0x04, 0xc7, 0x83, 0xf1, 0x3f, 0xa7, 0x84, 0x34, 0x3f, 0xf4, + 0x1e, 0xa9, 0xef, 0x67, 0xe9, 0x93, 0x1c, 0x0c, 0x5f, 0x80, 0x11, 0x93, 0x36, 0x6c, 0x4f, 0x48, + 0xe2, 0xb3, 0xea, 0xcd, 0x01, 0x0b, 0xc2, 0xcb, 0x8b, 0xcb, 0x7e, 0xaa, 0xbb, 0x3a, 0x96, 0x33, + 0x91, 0xab, 0xec, 0xdd, 0x6a, 0xd2, 0x47, 0x36, 0x5f, 0xc9, 0xe2, 0x80, 0x41, 0x91, 0xcb, 0xf6, + 0x6a, 0x7b, 0xac, 0x44, 0xc8, 0x7e, 0xea, 0xaa, 0xd5, 0x68, 0x8c, 0x0f, 0x01, 0xc2, 0x2a, 0xc9, + 0x5d, 0xc8, 0x8b, 0x6f, 0xdb, 0x6e, 0xef, 0x73, 0xf1, 0x41, 0x8c, 0xc1, 0xd2, 0xe3, 0xe3, 0xa5, + 0xe7, 0xeb, 0x41, 0x99, 0x90, 0x8f, 0x14, 0xbe, 0x31, 0x42, 0xe3, 0xdf, 0x4a, 0x43, 0xba, 0x80, + 0x13, 0x72, 0x97, 0x1e, 0xf9, 0xd6, 0xee, 0x2d, 0xbb, 0xa9, 0xad, 0xc4, 0x43, 0x84, 0xd6, 0xf6, + 0x6c, 0xed, 0x62, 0xad, 0x20, 0xb3, 0x95, 0x78, 0xd7, 0xdd, 0x7d, 0x13, 0x09, 0x95, 0x95, 0x78, + 0xe8, 0xee, 0xbe, 0x19, 0x25, 0x0b, 0x10, 0x89, 0x01, 0xa3, 0x7c, 0x55, 0x8a, 0x35, 0x08, 0x8f, + 0x8f, 0x97, 0x46, 0xf9, 0xe2, 0x35, 0x45, 0x09, 0x39, 0x0b, 0x99, 0x6a, 0x65, 0x43, 0x6c, 0x1f, + 0xa8, 0xc0, 0xf2, 0x3a, 0x6d, 0x93, 0xc1, 0x58, 0x9d, 0xeb, 0xa5, 0x42, 0x05, 0xaf, 0xac, 0x23, + 0x61, 0x9d, 0xcd, 0x86, 0xd5, 0x89, 0x5e, 0x5a, 0x03, 0x44, 0xf2, 0x1e, 0x4c, 0xdc, 0x2d, 0x15, + 0xd7, 0x1c, 0x8f, 0x7f, 0xfa, 0xa3, 0xe1, 0xe2, 0x3f, 0x6c, 0xd4, 0x6b, 0xa8, 0x33, 0x8e, 0xee, + 0xa1, 0x0a, 0xbe, 0xf1, 0x4b, 0x29, 0x98, 0x50, 0x34, 0x3a, 0xe4, 0xb3, 0xe2, 0x29, 0x2f, 0xa5, + 0xc9, 0xaa, 0x0a, 0x06, 0x2b, 0xe5, 0xd7, 0xff, 0x96, 0xd3, 0xa0, 0xe2, 0x61, 0x2f, 0xbc, 0x6a, + 0xa7, 0x87, 0xb9, 0x6a, 0xbf, 0x05, 0xc0, 0xd7, 0x00, 0x36, 0x59, 0x39, 0x8b, 0x15, 0x23, 0x00, + 0x75, 0x5e, 0x42, 0x64, 0xc3, 0x84, 0x49, 0xf5, 0x9a, 0xcd, 0xb6, 0x4f, 0xf1, 0x3c, 0x21, 0x94, + 0xa7, 0xca, 0xf6, 0x29, 0xb8, 0xc5, 0x9f, 0x4b, 0x74, 0x12, 0xe3, 0xb3, 0xaa, 0x8a, 0x67, 0xd8, + 0x0f, 0xd0, 0xf8, 0xa1, 0x54, 0xf8, 0xb9, 0xdf, 0xbf, 0x4e, 0xde, 0x81, 0x51, 0xfe, 0x1c, 0x24, + 0x5e, 0xcd, 0x4e, 0x05, 0xd7, 0x24, 0xf5, 0xad, 0x88, 0xeb, 0x56, 0x7f, 0x8f, 0x3f, 0x26, 0x3f, + 0x67, 0x0a, 0x92, 0x40, 0x2d, 0xab, 0x6b, 0x68, 0x24, 0x77, 0x54, 0x40, 0x5e, 0x4f, 0x52, 0xcb, + 0x1a, 0xbf, 0x95, 0x85, 0x69, 0x1d, 0x4d, 0x7d, 0x33, 0x4a, 0x0d, 0xf5, 0x66, 0xf4, 0x05, 0xc8, + 0xb1, 0xf1, 0xb0, 0xeb, 0x54, 0x8a, 0x1d, 0x2f, 0xa1, 0xb2, 0x5a, 0xc0, 0xb4, 0xb7, 0x50, 0xa8, + 0x1e, 0x79, 0x3e, 0x6d, 0xb1, 0x5b, 0x93, 0x19, 0x50, 0x91, 0x65, 0xe5, 0x61, 0x23, 0x13, 0x9e, + 0xc4, 0xf2, 0x61, 0x43, 0x5d, 0xb7, 0xc1, 0x13, 0xc7, 0x1b, 0x30, 0xca, 0xa4, 0xcf, 0xe0, 0x52, + 0x8f, 0xad, 0x64, 0x82, 0x69, 0xc4, 0xfe, 0x81, 0x23, 0x91, 0x1d, 0xc8, 0xad, 0x5b, 0x9e, 0x5f, + 0xa5, 0xb4, 0x3d, 0xc4, 0x6b, 0xf0, 0x92, 0x18, 0xaa, 0x39, 0x7c, 0x6a, 0xf5, 0x28, 0x6d, 0x47, + 0x9e, 0xf3, 0x02, 0x66, 0xe4, 0x2b, 0x00, 0x45, 0xa7, 0xed, 0xbb, 0x4e, 0x73, 0xdd, 0xd9, 0x5f, + 0x18, 0xc5, 0xdb, 0xd4, 0x0b, 0x91, 0x09, 0x08, 0x11, 0xf8, 0x85, 0x2a, 0x50, 0x19, 0xd4, 0x79, + 0x41, 0xad, 0xe9, 0xec, 0xab, 0xeb, 0x35, 0xc4, 0x27, 0xb7, 0x20, 0x2f, 0xaf, 0xaa, 0xdb, 0x9d, + 0x7d, 0x17, 0x17, 0xc8, 0x58, 0x78, 0xbc, 0xd2, 0x47, 0x7e, 0xad, 0x2b, 0xe0, 0xea, 0x8e, 0x16, + 0xa5, 0x21, 0x5f, 0x86, 0x33, 0x51, 0x98, 0x9c, 0xe5, 0x5c, 0x28, 0x78, 0xaa, 0xec, 0x12, 0xd6, + 0x7d, 0x2f, 0x16, 0xc6, 0x77, 0xd3, 0x70, 0xa6, 0x47, 0x67, 0xd9, 0xf7, 0x80, 0xc7, 0xaa, 0xf2, + 0x3d, 0x44, 0x4e, 0x53, 0x6e, 0xd0, 0x72, 0x01, 0x4d, 0x1f, 0xd8, 0x0a, 0xce, 0xae, 0xe4, 0xa3, + 0xa6, 0x0f, 0x68, 0xf8, 0x70, 0x07, 0xb2, 0x6c, 0x8a, 0x86, 0x78, 0x8c, 0x95, 0x5a, 0x8a, 0x69, + 0xdf, 0x56, 0x97, 0x0f, 0x4e, 0x1d, 0xf2, 0x20, 0x9f, 0x85, 0xcc, 0xd6, 0xd6, 0x3a, 0xae, 0x9d, + 0x0c, 0xf6, 0x7d, 0xca, 0xf7, 0x9b, 0xda, 0x52, 0x9d, 0x62, 0xb4, 0x57, 0x83, 0xb7, 0x7b, 0x86, + 0x4e, 0xbe, 0x14, 0x31, 0x1f, 0x79, 0xb5, 0xff, 0x44, 0x0f, 0x6f, 0x4d, 0xf2, 0x24, 0x06, 0x1a, + 0x7f, 0x33, 0x1d, 0x7e, 0xc3, 0xb7, 0xec, 0xa6, 0x4f, 0x5d, 0xb2, 0xc8, 0x3f, 0xc9, 0xf0, 0x9e, + 0x6a, 0x06, 0xbf, 0xc9, 0x42, 0xf8, 0x7d, 0x73, 0x56, 0xc1, 0x87, 0xfc, 0xaa, 0xf2, 0x21, 0x67, + 0xf0, 0x43, 0x9e, 0xee, 0xf9, 0xc9, 0xbe, 0x9a, 0xb0, 0x2e, 0xf1, 0x43, 0x4c, 0x58, 0x7b, 0x2f, + 0xc1, 0xd4, 0x86, 0xb3, 0xfa, 0xc8, 0x0f, 0x10, 0xd9, 0x07, 0x98, 0x33, 0x75, 0x20, 0xe3, 0xb8, + 0xd9, 0x6c, 0x50, 0x77, 0xeb, 0xc0, 0x6a, 0x6b, 0xaf, 0xa1, 0x66, 0x0c, 0xce, 0x70, 0x37, 0xe8, + 0x43, 0x1d, 0x77, 0x8c, 0xe3, 0x46, 0xe1, 0xc6, 0x0f, 0xa6, 0xe5, 0x60, 0xdc, 0x5f, 0x7e, 0x46, + 0x5f, 0xdd, 0xde, 0xd4, 0x5e, 0xdd, 0xe6, 0x02, 0x7d, 0x61, 0xf0, 0x84, 0xbc, 0x3c, 0xe0, 0xe5, + 0xf9, 0xbf, 0x1c, 0x81, 0x49, 0x15, 0x9d, 0x8d, 0x43, 0xa1, 0xd1, 0x70, 0xd5, 0x71, 0xb0, 0x1a, + 0x0d, 0xd7, 0x44, 0xa8, 0xf6, 0xd0, 0x9c, 0xe9, 0xfb, 0xd0, 0xfc, 0x55, 0x18, 0x2f, 0xb6, 0x1a, + 0xda, 0xf3, 0x97, 0x91, 0xd0, 0xbc, 0xab, 0x01, 0x12, 0xff, 0x16, 0x02, 0x35, 0x58, 0xbd, 0xd5, + 0x88, 0x3f, 0x7a, 0x85, 0x2c, 0xb5, 0x37, 0xea, 0x91, 0x27, 0x79, 0xa3, 0xbe, 0x09, 0xe3, 0xdb, + 0x1e, 0xdd, 0xea, 0xb6, 0xdb, 0xb4, 0x89, 0xcb, 0x2a, 0xc7, 0x65, 0xf2, 0xae, 0x47, 0x6b, 0x3e, + 0x42, 0xd5, 0x06, 0x04, 0xa8, 0xea, 0x04, 0x8f, 0xf5, 0x99, 0xe0, 0x1b, 0x90, 0xab, 0x50, 0xea, + 0xe2, 0x98, 0x4e, 0x84, 0xa2, 0x57, 0x87, 0x52, 0xb7, 0xc6, 0x06, 0x56, 0x7b, 0xbb, 0x16, 0x88, + 0xda, 0x83, 0xf7, 0xe4, 0x90, 0x0f, 0xde, 0xe4, 0x45, 0x98, 0xec, 0x74, 0x77, 0x9b, 0x76, 0x1d, + 0xf9, 0x8a, 0x97, 0x72, 0x73, 0x82, 0xc3, 0x18, 0x5b, 0x8f, 0x7c, 0x09, 0xa6, 0xf0, 0x2e, 0x12, + 0x2c, 0xb9, 0x69, 0xed, 0x9d, 0x48, 0x2b, 0xe3, 0x92, 0x4e, 0x9d, 0x81, 0x6a, 0x09, 0x06, 0x1d, + 0x3a, 0xa3, 0xc5, 0x2a, 0x4c, 0xeb, 0x33, 0xf9, 0x14, 0x9e, 0x8b, 0x82, 0xc7, 0xfb, 0x5c, 0x7e, + 0xfc, 0x4e, 0x36, 0x07, 0xf9, 0x09, 0xfe, 0x6c, 0x6f, 0x42, 0x25, 0xe8, 0x93, 0x49, 0xee, 0x76, + 0x77, 0xa9, 0xdb, 0xa6, 0x3e, 0xf5, 0x84, 0xb0, 0xee, 0x99, 0xd9, 0x42, 0xa7, 0xe3, 0x19, 0xbf, + 0x96, 0x86, 0xb1, 0xc2, 0x4e, 0xb5, 0xdc, 0xde, 0x73, 0xf0, 0xd1, 0x27, 0xd0, 0xf5, 0xab, 0x8f, + 0x3e, 0x81, 0xae, 0x5f, 0xd5, 0xf0, 0x5f, 0x4b, 0xb8, 0x6e, 0xa1, 0x29, 0xa9, 0x72, 0xdd, 0xd2, + 0x74, 0x70, 0xe1, 0xb3, 0x47, 0x66, 0x88, 0x67, 0x8f, 0x40, 0xcb, 0x95, 0x1d, 0xa8, 0xe5, 0x22, + 0xef, 0xc0, 0x44, 0xb9, 0xed, 0xd3, 0x7d, 0x37, 0x5c, 0xe9, 0xc1, 0xd5, 0x2f, 0x00, 0xab, 0x22, + 0xb8, 0x82, 0xcd, 0x96, 0x11, 0xd7, 0xac, 0x05, 0x1a, 0x35, 0x5c, 0x46, 0x5c, 0x01, 0x17, 0xb9, + 0xf4, 0x4a, 0x44, 0xa3, 0x14, 0x59, 0x23, 0xf2, 0x69, 0x99, 0x0b, 0x9f, 0xd3, 0xa1, 0x3a, 0x98, + 0x0d, 0xec, 0xca, 0x6c, 0xf2, 0xd3, 0xb2, 0xf1, 0xcd, 0x34, 0x4c, 0x14, 0x3a, 0x9d, 0x67, 0xdc, + 0xc0, 0xe7, 0xf3, 0xda, 0xf6, 0x2a, 0xef, 0x2c, 0x41, 0xbf, 0x86, 0xb2, 0xed, 0xf9, 0xe5, 0x34, + 0xcc, 0x44, 0x28, 0xd4, 0xd6, 0xa7, 0x86, 0x34, 0xeb, 0x49, 0x0f, 0x69, 0xd6, 0x93, 0x19, 0xce, + 0xac, 0x27, 0xfb, 0x24, 0x5b, 0xe6, 0x2b, 0x90, 0x29, 0x74, 0x3a, 0xd1, 0xe7, 0xc1, 0x4e, 0xe7, + 0xfe, 0x0d, 0x7e, 0xef, 0xb4, 0x3a, 0x1d, 0x93, 0x61, 0x68, 0xfb, 0xd8, 0xe8, 0x90, 0xfb, 0x98, + 0xf1, 0x06, 0x8c, 0x23, 0x2f, 0x34, 0xa6, 0xb9, 0x00, 0xf8, 0x31, 0x0b, 0x3b, 0x1a, 0xad, 0x2e, + 0xf1, 0x99, 0xff, 0x9f, 0x29, 0x18, 0xc1, 0xdf, 0xcf, 0xe8, 0x1a, 0x5b, 0xd6, 0xd6, 0x58, 0x5e, + 0x59, 0x63, 0xc3, 0xac, 0xae, 0x7f, 0x91, 0xc5, 0xd1, 0x12, 0xeb, 0x4a, 0xd8, 0xb0, 0xa4, 0x12, + 0x6c, 0x58, 0xde, 0x02, 0x65, 0xd7, 0x54, 0xb5, 0x3a, 0xca, 0x99, 0xa1, 0xde, 0x34, 0x42, 0x64, + 0x72, 0x18, 0xb5, 0x66, 0xc9, 0xe0, 0x64, 0x5c, 0x8c, 0x36, 0xf5, 0xa9, 0x18, 0xb2, 0xac, 0x01, + 0x29, 0xb7, 0x3d, 0x5a, 0xef, 0xba, 0xb4, 0x7a, 0x68, 0x77, 0xee, 0x53, 0xd7, 0xde, 0x3b, 0x12, + 0x5a, 0x20, 0x3c, 0x97, 0x6d, 0x51, 0x5a, 0xf3, 0x0e, 0xed, 0x0e, 0xbb, 0x8a, 0xd8, 0x7b, 0x47, + 0x66, 0x02, 0x0d, 0xf9, 0x00, 0xc6, 0x4c, 0xfa, 0xd0, 0xb5, 0x7d, 0xf9, 0x46, 0x3b, 0x1d, 0x5c, + 0x9c, 0x11, 0xca, 0x2f, 0x86, 0x2e, 0xff, 0xa1, 0xce, 0xbf, 0x28, 0x27, 0xcb, 0x7c, 0xe3, 0xe3, + 0x6f, 0xb1, 0x53, 0x61, 0x6f, 0x0b, 0x3b, 0xd5, 0x5e, 0xfb, 0x1e, 0xb9, 0x02, 0x23, 0xb8, 0x7b, + 0x0a, 0x99, 0x00, 0x6d, 0x9b, 0xf1, 0x0c, 0x55, 0xb7, 0x76, 0xc4, 0x20, 0x2f, 0x00, 0x04, 0x6a, + 0x76, 0x6f, 0x21, 0x87, 0xa7, 0xb5, 0x02, 0x89, 0x6e, 0xfd, 0xe3, 0x27, 0xd9, 0xfa, 0x3f, 0x3d, + 0x13, 0x8e, 0x5f, 0x4e, 0xc3, 0xc5, 0x60, 0x3b, 0xdb, 0x74, 0xab, 0x85, 0x7b, 0xeb, 0xe5, 0x46, + 0x45, 0x48, 0xff, 0x15, 0xd7, 0x79, 0x60, 0xb3, 0xdb, 0xdf, 0xf5, 0x01, 0x1f, 0xe3, 0x3a, 0x5f, + 0xb5, 0x5c, 0xc5, 0x97, 0xd6, 0x1e, 0xbb, 0x95, 0x53, 0x43, 0xbc, 0xc7, 0x77, 0x3a, 0x31, 0x8d, + 0xdf, 0xda, 0x73, 0x66, 0xc8, 0x80, 0xfc, 0x50, 0x0a, 0x4e, 0x27, 0x37, 0x44, 0xdc, 0x08, 0x97, + 0xa4, 0xe4, 0xd9, 0xa3, 0xb5, 0x2b, 0xaf, 0x3c, 0x3e, 0x5e, 0xba, 0xe8, 0x59, 0xad, 0x66, 0xcd, + 0x6e, 0xf0, 0xda, 0xec, 0x3a, 0xad, 0x75, 0x04, 0x82, 0x56, 0x6f, 0x8f, 0x9a, 0xde, 0x06, 0xf9, + 0x4d, 0x2e, 0xa4, 0x56, 0x00, 0x72, 0x52, 0x3b, 0x63, 0xfc, 0xfd, 0x14, 0x28, 0x2b, 0x2a, 0x67, + 0xd2, 0x86, 0xed, 0xd2, 0xba, 0x8f, 0x3b, 0x5a, 0x60, 0xa0, 0xcf, 0x61, 0x11, 0xdb, 0x06, 0x84, + 0x91, 0xf7, 0x61, 0x8c, 0xeb, 0x72, 0xb8, 0x0e, 0x25, 0x5c, 0x89, 0x42, 0xef, 0xc3, 0xdd, 0x3b, + 0x38, 0x86, 0xba, 0x8a, 0x05, 0x11, 0x93, 0x6f, 0xef, 0xec, 0x6c, 0x15, 0x9b, 0x96, 0xdd, 0xf2, + 0xc4, 0x3e, 0x86, 0xc3, 0xfa, 0xf1, 0x43, 0xbf, 0x56, 0x47, 0xa8, 0x2a, 0xdf, 0x06, 0xa8, 0xc6, + 0x6d, 0xa9, 0x76, 0x1a, 0x60, 0xa0, 0xb3, 0x04, 0x23, 0xf7, 0xc3, 0xeb, 0xe7, 0xca, 0xf8, 0xe3, + 0xe3, 0x25, 0xbe, 0x5c, 0x4c, 0x0e, 0x37, 0x7e, 0x2c, 0x05, 0xd3, 0xfa, 0x7a, 0x22, 0x57, 0x61, + 0x54, 0x98, 0xc9, 0xa7, 0xf0, 0x9a, 0xcd, 0x46, 0x61, 0x94, 0x1b, 0xc8, 0x6b, 0x66, 0xf1, 0x02, + 0x8b, 0xed, 0xc4, 0x82, 0x83, 0xd0, 0x23, 0xe1, 0x4e, 0x5c, 0xe7, 0x20, 0x53, 0x96, 0x11, 0x83, + 0x89, 0x61, 0x5e, 0xb7, 0xe9, 0xab, 0x5a, 0x52, 0x17, 0x21, 0xa6, 0x28, 0x31, 0x8a, 0x30, 0xca, + 0x3f, 0xe1, 0x88, 0x61, 0x40, 0xea, 0x04, 0x86, 0x01, 0xc6, 0x71, 0x0a, 0xa0, 0x5a, 0x5d, 0xbb, + 0x4b, 0x8f, 0x2a, 0x96, 0xed, 0xa2, 0x5a, 0x1f, 0xb7, 0xcb, 0xbb, 0xe2, 0xe3, 0x9a, 0x14, 0x6a, + 0x7d, 0xbe, 0xb5, 0x1e, 0xd2, 0x23, 0x4d, 0xad, 0x2f, 0x51, 0x71, 0x4f, 0x76, 0xed, 0x07, 0x96, + 0x4f, 0x19, 0x61, 0x1a, 0x09, 0xf9, 0x9e, 0xcc, 0xa1, 0x11, 0x4a, 0x05, 0x99, 0x7c, 0x05, 0xa6, + 0xc3, 0x5f, 0xc1, 0xe3, 0xc4, 0x74, 0xf0, 0x01, 0xeb, 0x85, 0x2b, 0x2f, 0x3c, 0x3e, 0x5e, 0x5a, + 0x54, 0xb8, 0x46, 0x9f, 0x2d, 0x22, 0xcc, 0x8c, 0x5f, 0x48, 0xe1, 0x7b, 0x96, 0xec, 0xe0, 0x25, + 0xc8, 0x06, 0xe6, 0x4e, 0x93, 0x5c, 0x53, 0x13, 0x51, 0xc0, 0x62, 0x39, 0xb9, 0x08, 0x99, 0xb0, + 0x27, 0xb8, 0x45, 0xea, 0x3d, 0x60, 0xa5, 0xe4, 0x36, 0x8c, 0x0d, 0xd5, 0x66, 0xfc, 0x34, 0x12, + 0xda, 0x2a, 0xa9, 0x71, 0x16, 0xee, 0xec, 0x6c, 0x7d, 0xef, 0xce, 0xc2, 0x4f, 0xa6, 0x61, 0x86, + 0x8d, 0x6b, 0xa1, 0xeb, 0x1f, 0x38, 0xae, 0xed, 0x1f, 0x3d, 0xb3, 0x7a, 0x8a, 0x77, 0x35, 0x21, + 0x67, 0x51, 0x9e, 0x32, 0x6a, 0xdf, 0x86, 0x52, 0x57, 0xfc, 0xf6, 0x08, 0xcc, 0x25, 0x50, 0x91, + 0xd7, 0x35, 0x55, 0xe2, 0x82, 0xf4, 0x88, 0xfb, 0xee, 0xf1, 0xd2, 0xa4, 0x44, 0xdf, 0x0a, 0x3d, + 0xe4, 0x96, 0xf5, 0xc7, 0x61, 0x3e, 0x52, 0xa8, 0x59, 0x54, 0x1f, 0x87, 0xf5, 0x27, 0xe1, 0x2b, + 0x30, 0x62, 0x3a, 0x4d, 0x2a, 0x2d, 0x19, 0xf0, 0x60, 0x77, 0x19, 0x40, 0x7b, 0xc3, 0x62, 0x00, + 0xb2, 0x06, 0x63, 0xec, 0x8f, 0x7b, 0x56, 0x47, 0x68, 0x7d, 0x49, 0x20, 0x66, 0x23, 0xb4, 0x63, + 0xb7, 0xf7, 0x55, 0x49, 0xbb, 0x49, 0x6b, 0x2d, 0xab, 0xa3, 0x49, 0x20, 0x1c, 0x51, 0x93, 0xd8, + 0x73, 0xbd, 0x25, 0xf6, 0xd4, 0x40, 0x89, 0xbd, 0x01, 0x50, 0xb5, 0xf7, 0xdb, 0x76, 0x7b, 0xbf, + 0xd0, 0xdc, 0x17, 0x7e, 0x85, 0x57, 0x7a, 0xcf, 0xc2, 0xd5, 0x10, 0x19, 0x17, 0x2e, 0x7f, 0x42, + 0xe1, 0xb0, 0x9a, 0xd5, 0xd4, 0x54, 0xd2, 0x21, 0x2a, 0xd9, 0x00, 0x28, 0xd4, 0x7d, 0xfb, 0x01, + 0x5b, 0xc0, 0x9e, 0x30, 0x92, 0x95, 0x0d, 0x2e, 0x16, 0xee, 0xd2, 0xa3, 0x2a, 0xf5, 0x43, 0x15, + 0xb7, 0x85, 0xa8, 0xec, 0x3b, 0xd0, 0xec, 0x59, 0x43, 0x0e, 0xa4, 0x03, 0xa7, 0x0a, 0x8d, 0x86, + 0xcd, 0x7a, 0x60, 0x35, 0xb7, 0x5c, 0x36, 0x19, 0x0d, 0x64, 0x3d, 0x99, 0xcc, 0xfa, 0x8a, 0x60, + 0xfd, 0xa2, 0x15, 0x50, 0xd5, 0x7c, 0x4e, 0x16, 0xad, 0x26, 0x99, 0xb1, 0xb1, 0x09, 0xd3, 0x7a, + 0xd7, 0x75, 0x6f, 0xc8, 0x49, 0xc8, 0x99, 0xd5, 0x42, 0xad, 0xba, 0x56, 0xb8, 0x9e, 0x4f, 0x91, + 0x3c, 0x4c, 0x8a, 0x5f, 0xcb, 0xb5, 0xe5, 0x37, 0x6f, 0xe6, 0xd3, 0x1a, 0xe4, 0xcd, 0xeb, 0xcb, + 0x31, 0xcf, 0x83, 0xb1, 0x7c, 0x8e, 0x2b, 0x32, 0x8c, 0x5f, 0x49, 0x41, 0x4e, 0xb6, 0x9b, 0xdc, + 0x84, 0x4c, 0xb5, 0xba, 0x16, 0xf1, 0x15, 0x08, 0xcf, 0x17, 0xbe, 0x93, 0x7a, 0x9e, 0x6a, 0x10, + 0xc6, 0x08, 0x18, 0xdd, 0xd6, 0x7a, 0x55, 0x88, 0x05, 0x92, 0x2e, 0xdc, 0xb6, 0x39, 0x5d, 0x82, + 0x01, 0xf5, 0x4d, 0xc8, 0xdc, 0xd9, 0xd9, 0x12, 0x62, 0xbc, 0xa4, 0x0b, 0x77, 0x52, 0x4e, 0xf7, + 0xf1, 0x43, 0x75, 0x7f, 0x67, 0x04, 0x86, 0x09, 0x13, 0xca, 0x12, 0xe6, 0xc7, 0x6d, 0xcb, 0x09, + 0x7c, 0xfe, 0xc4, 0x71, 0xcb, 0x20, 0xa6, 0x28, 0x61, 0xd2, 0xc1, 0xba, 0x53, 0xb7, 0x9a, 0xe2, + 0xdc, 0x46, 0xe9, 0xa0, 0xc9, 0x00, 0x26, 0x87, 0x1b, 0xbf, 0x99, 0x82, 0x3c, 0xca, 0x50, 0x68, + 0x1c, 0xe6, 0x1c, 0xd2, 0xf6, 0xfd, 0xeb, 0xe4, 0x0d, 0xf9, 0xb1, 0xa5, 0x82, 0x4b, 0xe3, 0x08, + 0x7e, 0x6c, 0x11, 0xad, 0xb3, 0xf8, 0xe0, 0x14, 0x87, 0xcb, 0xf4, 0xf0, 0xee, 0x58, 0x03, 0x1c, + 0x2e, 0x97, 0x60, 0x04, 0x9b, 0x23, 0xb6, 0x45, 0x6c, 0xb9, 0xcf, 0x00, 0x26, 0x87, 0x2b, 0xbb, + 0xd2, 0x4f, 0xa7, 0x63, 0x7d, 0x58, 0xfe, 0x9e, 0x72, 0x69, 0xd2, 0x3b, 0x37, 0xd4, 0x4e, 0xfd, + 0x21, 0xcc, 0x47, 0x87, 0x04, 0x2f, 0xf4, 0x05, 0x98, 0xd1, 0xe1, 0xf2, 0x6e, 0x7f, 0x26, 0xb1, + 0xae, 0xfb, 0xcb, 0x66, 0x14, 0xdf, 0xf8, 0x6f, 0x53, 0x30, 0x8e, 0x7f, 0x9a, 0xdd, 0x26, 0x9a, + 0x2b, 0x14, 0x76, 0xaa, 0x42, 0x79, 0xa7, 0x8a, 0x71, 0xd6, 0x43, 0xaf, 0x26, 0xf4, 0x7b, 0xda, + 0xfe, 0x12, 0x20, 0x0b, 0x52, 0xae, 0x95, 0x93, 0x2f, 0x94, 0x01, 0x29, 0x57, 0xdf, 0x79, 0x11, + 0x52, 0x81, 0x8c, 0x16, 0x42, 0x3b, 0x55, 0xb6, 0xfc, 0xd4, 0x77, 0x49, 0xa4, 0x73, 0x9a, 0xba, + 0x85, 0x10, 0x47, 0xc3, 0x67, 0xc9, 0x9d, 0x6a, 0xc1, 0xdc, 0xd0, 0x9e, 0x25, 0x59, 0x1b, 0x35, + 0xeb, 0x51, 0x81, 0x64, 0xfc, 0xd3, 0xf1, 0xe8, 0x00, 0x8a, 0xa3, 0xee, 0x84, 0xdf, 0xc6, 0x3b, + 0x30, 0x52, 0x68, 0x36, 0x9d, 0x87, 0x62, 0x97, 0x90, 0xfa, 0x85, 0x60, 0xfc, 0xf8, 0x49, 0x66, + 0x31, 0x14, 0xcd, 0x4d, 0x83, 0x01, 0x48, 0x11, 0xc6, 0x0b, 0x3b, 0xd5, 0x72, 0xb9, 0xb4, 0xb5, + 0xb5, 0x2e, 0xbc, 0xdf, 0x5f, 0x96, 0xe3, 0x63, 0xdb, 0x8d, 0x5a, 0xf4, 0x65, 0x2c, 0x94, 0xdc, + 0x43, 0x3a, 0xf2, 0x1e, 0xc0, 0x1d, 0xc7, 0x6e, 0xdf, 0xa3, 0xfe, 0x81, 0xd3, 0x10, 0x9d, 0x3f, + 0xff, 0xf8, 0x78, 0x69, 0xe2, 0x63, 0xc7, 0x6e, 0xd7, 0x5a, 0x08, 0x66, 0x6d, 0x0f, 0x91, 0x4c, + 0xe5, 0x6f, 0x36, 0xd2, 0x2b, 0x0e, 0x37, 0x41, 0x18, 0x09, 0x47, 0x7a, 0xd7, 0x89, 0x59, 0x1f, + 0x48, 0x34, 0xd2, 0x82, 0x99, 0x6a, 0x77, 0x7f, 0x9f, 0xb2, 0x5d, 0x5d, 0x68, 0x2c, 0x46, 0xc5, + 0xed, 0x36, 0x88, 0x1d, 0xc0, 0x6f, 0x22, 0xec, 0x7e, 0xe2, 0xad, 0xbc, 0xce, 0x16, 0xf2, 0x77, + 0x8e, 0x97, 0xc4, 0x8b, 0x1b, 0x13, 0xd2, 0x3c, 0x49, 0x1f, 0xd7, 0x57, 0x44, 0x79, 0x93, 0x4d, + 0x18, 0xbd, 0x6d, 0xfb, 0x6b, 0xdd, 0x5d, 0x61, 0x62, 0xfd, 0x62, 0x9f, 0x8f, 0x86, 0x23, 0x72, + 0x95, 0xef, 0xbe, 0xed, 0x1f, 0x74, 0x55, 0x73, 0x6b, 0xc1, 0x86, 0xec, 0x40, 0xae, 0x68, 0xbb, + 0xf5, 0x26, 0x2d, 0x96, 0xc5, 0xa9, 0x7f, 0xb1, 0x0f, 0x4b, 0x89, 0xca, 0xc7, 0xa5, 0x8e, 0xbf, + 0xea, 0xb6, 0x2a, 0x05, 0x48, 0x0c, 0xf2, 0xaf, 0xa7, 0xe0, 0xf9, 0xa0, 0xf5, 0x85, 0x7d, 0xda, + 0xf6, 0xef, 0x59, 0x7e, 0xfd, 0x80, 0xba, 0x62, 0x94, 0xc6, 0xfb, 0x8d, 0xd2, 0xdb, 0xb1, 0x51, + 0xba, 0x1c, 0x8e, 0x92, 0xc5, 0x98, 0xd5, 0x5a, 0x9c, 0x5b, 0x7c, 0xcc, 0xfa, 0xd5, 0x4a, 0x6a, + 0x00, 0xa1, 0x0e, 0x5f, 0xb8, 0xe8, 0xbc, 0xdc, 0xa7, 0xc3, 0x21, 0xb2, 0x30, 0xd3, 0x0d, 0x7e, + 0x6b, 0x16, 0x37, 0x01, 0x94, 0xdc, 0x95, 0xfe, 0x0c, 0x5c, 0x22, 0xb9, 0xd0, 0x87, 0x37, 0xf7, + 0x71, 0x98, 0xeb, 0xe3, 0xb9, 0xc4, 0x67, 0x7b, 0xdd, 0xda, 0x15, 0x42, 0xc8, 0x80, 0xd9, 0x5e, + 0xb7, 0xc2, 0xd9, 0x6e, 0x5a, 0xd1, 0xd9, 0x5e, 0xb7, 0x76, 0x49, 0x91, 0x3b, 0x61, 0x71, 0x8f, + 0x9d, 0x17, 0xfa, 0x71, 0x2b, 0x56, 0xf8, 0xc9, 0x9c, 0xe0, 0x8c, 0xf5, 0x11, 0x8c, 0x57, 0x3b, + 0x56, 0x9d, 0x36, 0xed, 0x3d, 0x5f, 0x3c, 0xea, 0xbc, 0xd4, 0x87, 0x55, 0x80, 0x2b, 0x1e, 0x04, + 0xe4, 0x4f, 0xf5, 0x82, 0x14, 0xe0, 0xb0, 0x16, 0x6e, 0x55, 0xee, 0x2d, 0xcc, 0x0c, 0x6c, 0xe1, + 0x56, 0xe5, 0x9e, 0x90, 0x39, 0x3a, 0x2d, 0x4d, 0xe6, 0xa8, 0xdc, 0x33, 0x7e, 0x3d, 0x03, 0x67, + 0x7a, 0xd0, 0x90, 0x0d, 0xb9, 0x47, 0xa5, 0x34, 0xc5, 0x62, 0x0f, 0xf4, 0xab, 0x03, 0xb7, 0xad, + 0x75, 0xc8, 0xaf, 0xde, 0x45, 0xb1, 0x96, 0xfd, 0xa4, 0x8d, 0x62, 0x41, 0xee, 0xee, 0x17, 0x1e, + 0x1f, 0x2f, 0x9d, 0xa3, 0x87, 0xec, 0xf2, 0x5a, 0xb3, 0x78, 0x61, 0xad, 0xae, 0xf9, 0x53, 0xc5, + 0x28, 0x17, 0x7f, 0x30, 0x0d, 0x59, 0x3c, 0x69, 0x22, 0xf1, 0x25, 0x52, 0x27, 0x8a, 0x2f, 0xf1, + 0x05, 0x98, 0x5c, 0xbd, 0xcb, 0x2f, 0x9d, 0x6b, 0x96, 0x77, 0x20, 0xf6, 0x41, 0x7c, 0x63, 0xa3, + 0x87, 0x35, 0x71, 0x47, 0x3d, 0xb0, 0x34, 0x21, 0x4f, 0xa3, 0x20, 0xdb, 0x30, 0xc7, 0xdb, 0x66, + 0xef, 0xd9, 0x75, 0xee, 0x8c, 0x6e, 0x5b, 0x4d, 0xb1, 0x29, 0x5e, 0x7c, 0x7c, 0xbc, 0xb4, 0x44, + 0x0f, 0xd1, 0x2e, 0x4a, 0x94, 0xd7, 0x3c, 0x44, 0x50, 0xf8, 0x25, 0xd1, 0xab, 0x1e, 0xb2, 0xe6, + 0x38, 0x56, 0xc8, 0x6a, 0x63, 0x75, 0x33, 0x5c, 0x8e, 0x64, 0xfc, 0xfd, 0x11, 0x58, 0xec, 0xbd, + 0x9f, 0x91, 0x2f, 0xea, 0x13, 0x78, 0x69, 0xe0, 0x0e, 0x38, 0x78, 0x0e, 0xbf, 0x04, 0xf3, 0xab, + 0x6d, 0x9f, 0xba, 0x1d, 0xd7, 0x96, 0x3e, 0xd1, 0x6b, 0x8e, 0x27, 0xcd, 0xc0, 0x5e, 0x7a, 0x7c, + 0xbc, 0x74, 0x81, 0x06, 0xe5, 0x42, 0x3f, 0x88, 0x46, 0x69, 0x0a, 0xab, 0x44, 0x0e, 0x64, 0x15, + 0xa6, 0x15, 0x78, 0xb3, 0xbb, 0x2f, 0x4e, 0x70, 0xb4, 0x31, 0x54, 0x79, 0x36, 0xbb, 0xea, 0x45, + 0x27, 0x42, 0xb4, 0xf8, 0x0b, 0x19, 0xb1, 0x2c, 0x2e, 0x42, 0xa6, 0xda, 0xdd, 0x15, 0xcb, 0x81, + 0x8b, 0xea, 0xda, 0xb6, 0xce, 0x4a, 0xc9, 0xe7, 0x01, 0x4c, 0xda, 0x71, 0x3c, 0xdb, 0x77, 0xdc, + 0x23, 0xd5, 0x4c, 0xdf, 0x0d, 0xa0, 0xba, 0x4d, 0xa5, 0x84, 0x92, 0x35, 0x98, 0x09, 0x7f, 0x6d, + 0x3e, 0x6c, 0x0b, 0xa5, 0xe6, 0x38, 0xd7, 0x26, 0x84, 0xe4, 0x35, 0x87, 0x95, 0xa9, 0x07, 0x55, + 0x84, 0x8c, 0x2c, 0x43, 0x6e, 0xc7, 0x71, 0x0f, 0xf7, 0xd8, 0x44, 0x65, 0xc3, 0xa3, 0xf4, 0xa1, + 0x80, 0xa9, 0x47, 0x86, 0xc4, 0x63, 0x6b, 0x7e, 0xb5, 0xfd, 0xc0, 0x76, 0x9d, 0x76, 0x8b, 0xb6, + 0x7d, 0xf5, 0xfd, 0x91, 0x86, 0x60, 0xcd, 0xa9, 0x29, 0x04, 0xb3, 0x3b, 0x73, 0xa1, 0xee, 0x3b, + 0xae, 0x78, 0x7c, 0xe4, 0xd3, 0xcd, 0x00, 0xda, 0x74, 0x33, 0x00, 0x1b, 0x44, 0x93, 0xee, 0x09, + 0xad, 0x39, 0x0e, 0xa2, 0x4b, 0xf7, 0x34, 0x8f, 0x2d, 0xba, 0xc7, 0x44, 0x01, 0x93, 0xee, 0xe1, + 0x45, 0x5f, 0x0b, 0x6f, 0xb2, 0x17, 0x53, 0x11, 0x09, 0x34, 0xe3, 0x77, 0xc6, 0x7b, 0xae, 0x5b, + 0xb6, 0xf7, 0x9e, 0x6c, 0xdd, 0xae, 0x5b, 0x43, 0xac, 0xdb, 0xd7, 0x03, 0x4b, 0x4d, 0xd5, 0x4d, + 0x11, 0x21, 0xea, 0xe6, 0xcf, 0x71, 0x16, 0x7f, 0x31, 0x77, 0x92, 0x45, 0x24, 0x06, 0x29, 0x3d, + 0xec, 0x20, 0x65, 0x86, 0x1a, 0x24, 0xb2, 0x02, 0x53, 0x41, 0x10, 0x9d, 0x8a, 0xe5, 0x6b, 0x7b, + 0x53, 0x10, 0x12, 0xa9, 0xd6, 0xb1, 0x7c, 0x75, 0x6f, 0xd2, 0x49, 0xc8, 0xbb, 0x30, 0x21, 0xcc, + 0x95, 0x91, 0xc3, 0x48, 0x68, 0x88, 0x26, 0x6d, 0x9b, 0x23, 0xf4, 0x2a, 0x3a, 0xfb, 0x24, 0x2b, + 0x76, 0x87, 0x36, 0xed, 0x36, 0xad, 0xa2, 0xd6, 0x5c, 0xac, 0x18, 0xfc, 0x24, 0x3b, 0xa2, 0xa4, + 0xc6, 0x15, 0xea, 0x9a, 0xbe, 0x4c, 0x23, 0x8a, 0x2e, 0xd6, 0xb1, 0x13, 0x2d, 0x56, 0x6e, 0x07, + 0xe2, 0xae, 0x3b, 0xfb, 0xb6, 0xb4, 0x7c, 0x93, 0x76, 0x20, 0x6e, 0xad, 0xc9, 0xa0, 0x11, 0x3b, + 0x10, 0x8e, 0xca, 0xe4, 0x7a, 0xf6, 0xa3, 0x5c, 0x12, 0x2f, 0x34, 0x28, 0xd7, 0x23, 0x91, 0x6e, + 0x6e, 0xc8, 0x91, 0x64, 0x35, 0xab, 0x2d, 0xcb, 0x6e, 0x0a, 0x6f, 0xb4, 0xb0, 0x1a, 0xca, 0xa0, + 0xd1, 0x6a, 0x10, 0x95, 0xd4, 0x61, 0xd2, 0xa4, 0x7b, 0x15, 0xd7, 0xf1, 0x69, 0xdd, 0xa7, 0x0d, + 0x21, 0xcb, 0x48, 0x71, 0x7e, 0xc5, 0x71, 0xb8, 0x9c, 0xb6, 0xf2, 0xc6, 0xef, 0x1c, 0x2f, 0xa5, + 0xbe, 0x73, 0xbc, 0x04, 0x0c, 0xc4, 0x6d, 0x59, 0x1f, 0x1f, 0x2f, 0x9d, 0x61, 0xf3, 0xdf, 0x91, + 0xc4, 0xea, 0x11, 0xa3, 0x32, 0x25, 0xdf, 0xcf, 0x36, 0xdd, 0x60, 0x48, 0xc2, 0xca, 0x26, 0x7b, + 0x54, 0xf6, 0x66, 0x62, 0x65, 0x4b, 0xca, 0x68, 0x27, 0x56, 0x9a, 0x58, 0x09, 0x79, 0x0f, 0x26, + 0x8a, 0xe5, 0xa2, 0xd3, 0xde, 0xb3, 0xf7, 0xab, 0x6b, 0x05, 0x14, 0x88, 0x84, 0xbd, 0x71, 0xdd, + 0xae, 0xd5, 0x11, 0x5e, 0xf3, 0x0e, 0x2c, 0xcd, 0x67, 0x23, 0xc4, 0x27, 0xb7, 0x61, 0x5a, 0xfe, + 0x34, 0xe9, 0xde, 0xb6, 0x59, 0x46, 0x39, 0x48, 0x1a, 0x79, 0x07, 0x1c, 0xd8, 0x40, 0x74, 0x5d, + 0x55, 0x3e, 0x8e, 0x90, 0xb1, 0xc5, 0x58, 0xa2, 0x9d, 0xa6, 0x73, 0xc4, 0x9a, 0xb7, 0x65, 0x53, + 0x17, 0x25, 0x1f, 0xb1, 0x18, 0x1b, 0x41, 0x49, 0xcd, 0xb7, 0xb5, 0xed, 0x36, 0x42, 0x44, 0x36, + 0x60, 0x56, 0x2c, 0xf1, 0xfb, 0xb6, 0x67, 0xef, 0xda, 0x4d, 0xdb, 0x3f, 0x5a, 0xc8, 0x23, 0x27, + 0x94, 0x42, 0xe4, 0x77, 0xf1, 0x20, 0x28, 0x55, 0x98, 0xc5, 0x49, 0x8d, 0x5f, 0x49, 0xc3, 0xb9, + 0x7e, 0xf2, 0x3f, 0xa9, 0xea, 0x9b, 0xd9, 0xe5, 0x21, 0xee, 0x0c, 0x83, 0xb7, 0xb3, 0x55, 0x98, + 0xde, 0x74, 0xf7, 0xad, 0xb6, 0xfd, 0x0d, 0xbc, 0xd7, 0x05, 0xe6, 0x30, 0x38, 0x18, 0x8e, 0x52, + 0xa2, 0xaf, 0xf6, 0x08, 0xd1, 0xe2, 0x03, 0xb1, 0xcd, 0x7d, 0x52, 0x07, 0x88, 0x9b, 0x30, 0x5e, + 0x74, 0xda, 0x3e, 0x7d, 0xe4, 0x47, 0x9c, 0xdc, 0x38, 0x30, 0xea, 0xe4, 0x26, 0x51, 0x8d, 0xff, + 0x3b, 0x0d, 0xe7, 0xfb, 0x0a, 0xc0, 0x64, 0x4b, 0x1f, 0xb5, 0x2b, 0xc3, 0x48, 0xcd, 0x83, 0x87, + 0x6d, 0x39, 0x66, 0xb9, 0x31, 0xd0, 0x6e, 0x79, 0xf1, 0x3f, 0x4b, 0x89, 0x41, 0xfa, 0x0c, 0x8c, + 0x61, 0x55, 0xc1, 0x10, 0x71, 0xdd, 0x10, 0xee, 0xc2, 0xb6, 0xae, 0x1b, 0xe2, 0x68, 0xe4, 0x06, + 0xe4, 0x8a, 0x56, 0xb3, 0xa9, 0xb8, 0x00, 0xa2, 0x5c, 0x5f, 0x47, 0x58, 0xc4, 0xd0, 0x47, 0x22, + 0x92, 0xb7, 0x00, 0xf8, 0xdf, 0xca, 0x59, 0x81, 0x9b, 0xa5, 0x20, 0x8b, 0x1c, 0x17, 0x0a, 0x32, + 0x06, 0xfb, 0xaa, 0x3b, 0x81, 0xaf, 0x12, 0x0f, 0xf6, 0xc5, 0x00, 0x5a, 0xb0, 0x2f, 0x06, 0x30, + 0x7e, 0x35, 0x03, 0x2f, 0xf4, 0xbf, 0xc5, 0x91, 0x6d, 0x7d, 0x0a, 0x5e, 0x1d, 0xea, 0xee, 0x37, + 0x78, 0x0e, 0x64, 0x14, 0x3d, 0x3e, 0x20, 0x97, 0xe3, 0xe6, 0xc5, 0xdf, 0x3d, 0x5e, 0x52, 0xac, + 0xc7, 0xee, 0x38, 0x76, 0x5b, 0x79, 0x23, 0xf8, 0x3a, 0x40, 0xd5, 0xb7, 0x7c, 0xbb, 0x7e, 0x67, + 0xe7, 0xae, 0xf4, 0x2c, 0xbf, 0x39, 0x5c, 0xcb, 0x42, 0x3a, 0xbe, 0xaf, 0x08, 0xf5, 0x39, 0x42, + 0x6b, 0x1f, 0x3f, 0x3c, 0xd4, 0xee, 0xa9, 0x21, 0xf2, 0xe2, 0xdb, 0x90, 0x8f, 0x92, 0x92, 0x4b, + 0x90, 0xc5, 0x06, 0x28, 0x36, 0xd2, 0x11, 0x0e, 0x58, 0xbe, 0x78, 0x4f, 0xac, 0x9d, 0x55, 0x98, + 0x16, 0x0f, 0xd3, 0xba, 0x46, 0x0c, 0xbf, 0x57, 0xf9, 0xae, 0x1d, 0xd7, 0x8a, 0x45, 0x88, 0x8c, + 0x3f, 0x4d, 0xc1, 0xd9, 0x9e, 0xf7, 0x63, 0x52, 0xd1, 0x27, 0xec, 0xe5, 0x41, 0x17, 0xea, 0x81, + 0x73, 0xb5, 0xf8, 0xe3, 0x72, 0xed, 0xbf, 0x0f, 0x93, 0xd5, 0xee, 0x6e, 0xf4, 0x92, 0xc5, 0xfd, + 0x8c, 0x15, 0xb8, 0x7a, 0x82, 0xa9, 0xf8, 0xac, 0xff, 0xf2, 0xe5, 0x5d, 0x18, 0x56, 0xf0, 0x8b, + 0x1f, 0xf6, 0x3f, 0x70, 0x60, 0x42, 0xff, 0x32, 0x75, 0x10, 0x23, 0x44, 0xc6, 0x2f, 0xa7, 0x93, + 0x6f, 0xab, 0xec, 0xae, 0x7d, 0x82, 0xdb, 0xea, 0xed, 0x62, 0x65, 0x70, 0xdf, 0xff, 0x23, 0xd9, + 0x77, 0x7c, 0x88, 0x14, 0x3b, 0x9e, 0x54, 0xef, 0x89, 0x87, 0x48, 0xb9, 0x3b, 0x7a, 0xfa, 0x43, + 0xa4, 0x44, 0x26, 0x6f, 0xc2, 0xf8, 0xba, 0xc3, 0xfd, 0x3e, 0x65, 0x8f, 0xb9, 0x87, 0x8f, 0x04, + 0xaa, 0xdb, 0x63, 0x80, 0xc9, 0xee, 0x16, 0xfa, 0xc4, 0x4b, 0xf3, 0x6e, 0xbc, 0x5b, 0x44, 0x96, + 0x8b, 0xae, 0x04, 0xd3, 0xc9, 0x8c, 0x1f, 0x4f, 0xc3, 0x34, 0x5f, 0xbc, 0x5c, 0x49, 0xfb, 0xcc, + 0x2a, 0xc0, 0xdf, 0xd1, 0x14, 0xe0, 0x32, 0x24, 0x81, 0xda, 0xb5, 0xa1, 0xd4, 0xdf, 0x07, 0x40, + 0xe2, 0x34, 0xc4, 0x84, 0x49, 0x15, 0xda, 0x5f, 0xf3, 0x7d, 0x3d, 0x8c, 0x5e, 0x21, 0xf6, 0x0e, + 0x7c, 0x7e, 0xf0, 0x4c, 0x8d, 0x87, 0xf1, 0x63, 0x69, 0x98, 0x52, 0x1e, 0x2a, 0x9f, 0xd9, 0x81, + 0x7f, 0x5b, 0x1b, 0xf8, 0x85, 0xc0, 0x24, 0x39, 0xe8, 0xd9, 0x50, 0xe3, 0xde, 0x85, 0xd9, 0x18, + 0x49, 0xf4, 0xbd, 0x37, 0x35, 0xcc, 0x7b, 0xef, 0xeb, 0x71, 0xb7, 0x7a, 0x1e, 0x51, 0x32, 0x70, + 0xab, 0x57, 0xfd, 0xf8, 0x7f, 0x32, 0x0d, 0xf3, 0xe2, 0x17, 0xc6, 0x8e, 0xe1, 0xbb, 0xf7, 0x33, + 0x3b, 0x17, 0x05, 0x6d, 0x2e, 0x96, 0xf4, 0xb9, 0x50, 0x3a, 0xd8, 0x7b, 0x4a, 0x8c, 0xbf, 0x02, + 0xb0, 0xd0, 0x8b, 0x60, 0x68, 0xcf, 0x9f, 0xd0, 0xae, 0x3a, 0x3d, 0x84, 0x5d, 0xf5, 0x3a, 0xe4, + 0xb1, 0x2a, 0x11, 0x69, 0xc2, 0x63, 0x77, 0x80, 0x4c, 0x28, 0x70, 0xf3, 0x00, 0x3f, 0x22, 0x5a, + 0x85, 0x17, 0xb9, 0x04, 0xc4, 0x28, 0xc9, 0x2f, 0xa4, 0x60, 0x1a, 0x81, 0xab, 0x0f, 0x68, 0xdb, + 0x47, 0x66, 0x59, 0x61, 0x06, 0x1c, 0xe8, 0xc7, 0xab, 0xbe, 0x6b, 0xb7, 0xf7, 0x85, 0x82, 0x7c, + 0x57, 0x28, 0xc8, 0xdf, 0xe5, 0x8a, 0xfd, 0xab, 0x75, 0xa7, 0x75, 0x6d, 0xdf, 0xb5, 0x1e, 0xd8, + 0xfc, 0x0d, 0xde, 0x6a, 0x5e, 0x0b, 0x63, 0x20, 0x77, 0xec, 0x48, 0x54, 0x63, 0xc1, 0x0a, 0x1f, + 0x1f, 0x78, 0x43, 0x29, 0x56, 0x1b, 0xbd, 0xab, 0xe8, 0x2d, 0x22, 0xdf, 0x07, 0x67, 0xb8, 0x1b, + 0x39, 0x13, 0x79, 0xed, 0x76, 0xd7, 0xe9, 0x7a, 0x2b, 0x56, 0xfd, 0x90, 0x9d, 0x7b, 0xdc, 0x95, + 0x01, 0x7b, 0x5e, 0x0f, 0x0a, 0x6b, 0xbb, 0xbc, 0x54, 0x73, 0xdd, 0x4a, 0x66, 0x40, 0xd6, 0x60, + 0x96, 0x17, 0x15, 0xba, 0xbe, 0x53, 0xad, 0x5b, 0x4d, 0xbb, 0xbd, 0x8f, 0x77, 0xea, 0x1c, 0x3f, + 0x8f, 0xad, 0xae, 0xef, 0xd4, 0x3c, 0x0e, 0x57, 0xaf, 0x2e, 0x31, 0x22, 0x52, 0x86, 0x19, 0x93, + 0x5a, 0x8d, 0x7b, 0xd6, 0xa3, 0xa2, 0xd5, 0xb1, 0xea, 0xec, 0x22, 0x94, 0xc3, 0xc7, 0x24, 0xbc, + 0x9b, 0xb9, 0xd4, 0x6a, 0xd4, 0x5a, 0xd6, 0xa3, 0x5a, 0x5d, 0x14, 0xea, 0x3a, 0x2c, 0x8d, 0x2e, + 0x60, 0x65, 0xb7, 0x03, 0x56, 0xe3, 0x51, 0x56, 0x76, 0xbb, 0x37, 0xab, 0x90, 0x4e, 0xb2, 0xda, + 0xb2, 0xdc, 0x7d, 0xea, 0x73, 0x13, 0x36, 0x76, 0x1f, 0x4f, 0x29, 0xac, 0x7c, 0x2c, 0xab, 0xa1, + 0x39, 0x5b, 0x94, 0x95, 0x42, 0xc7, 0x56, 0xde, 0x8e, 0x6b, 0xfb, 0x54, 0xed, 0xe1, 0x04, 0x36, + 0x0b, 0xc7, 0x1f, 0x8d, 0xff, 0x7a, 0x75, 0x31, 0x46, 0x19, 0x72, 0x53, 0x3a, 0x39, 0x19, 0xe3, + 0x96, 0xdc, 0xcb, 0x18, 0x65, 0xc0, 0x4d, 0xed, 0xe7, 0x14, 0xf6, 0x53, 0xe1, 0xd6, 0xa3, 0xa3, + 0x31, 0x4a, 0xb2, 0xc1, 0x06, 0xcd, 0xa7, 0x6d, 0xb6, 0xa2, 0x85, 0x09, 0xdf, 0x34, 0x36, 0xed, + 0x25, 0x61, 0x87, 0x92, 0x77, 0x65, 0x71, 0x2d, 0xc1, 0xa0, 0x2f, 0x4a, 0x4c, 0xfe, 0x02, 0xcc, + 0x6c, 0x7b, 0xf4, 0x56, 0xb9, 0x52, 0x95, 0x8e, 0xf3, 0x78, 0xdb, 0x9e, 0x5e, 0xbe, 0x3e, 0x60, + 0xd3, 0xb9, 0xaa, 0xd2, 0x60, 0x5c, 0x61, 0x3e, 0x6f, 0x5d, 0x8f, 0xd6, 0xf6, 0xec, 0x8e, 0x17, + 0x84, 0xf0, 0x50, 0xe7, 0x2d, 0x52, 0x95, 0xb1, 0x06, 0xb3, 0x31, 0x36, 0x64, 0x1a, 0x80, 0x01, + 0x6b, 0xdb, 0x1b, 0xd5, 0xd5, 0xad, 0xfc, 0x73, 0x24, 0x0f, 0x93, 0xf8, 0x7b, 0x75, 0xa3, 0xb0, + 0xb2, 0xbe, 0x5a, 0xca, 0xa7, 0xc8, 0x2c, 0x4c, 0x21, 0xa4, 0x54, 0xae, 0x72, 0x50, 0x9a, 0x47, + 0x95, 0x34, 0xf3, 0xfc, 0xd3, 0xf5, 0xd9, 0x07, 0x80, 0x67, 0x8a, 0xf1, 0x37, 0xd2, 0x70, 0x56, + 0x1e, 0x2b, 0xd4, 0x7f, 0xe8, 0xb8, 0x87, 0x76, 0x7b, 0xff, 0x19, 0x3f, 0x1d, 0x6e, 0x69, 0xa7, + 0xc3, 0x4b, 0x91, 0x93, 0x3a, 0xd2, 0xcb, 0x3e, 0x47, 0xc4, 0xff, 0x98, 0x83, 0xf3, 0x7d, 0xa9, + 0xc8, 0x17, 0xd9, 0x69, 0x6e, 0xd3, 0xb6, 0x5f, 0x6e, 0x34, 0xe9, 0x96, 0xdd, 0xa2, 0x4e, 0xd7, + 0x17, 0x26, 0xa3, 0x17, 0xf1, 0x82, 0x8b, 0x85, 0x35, 0xbb, 0xd1, 0xa4, 0x35, 0x9f, 0x17, 0x6b, + 0xcb, 0x2d, 0x4e, 0xcd, 0x58, 0x06, 0xe1, 0xce, 0xcb, 0x6d, 0x9f, 0xba, 0x0f, 0xd0, 0x38, 0x25, + 0x60, 0x79, 0x48, 0x69, 0xa7, 0x66, 0xb1, 0xd2, 0x9a, 0x2d, 0x8a, 0x75, 0x96, 0x31, 0x6a, 0x72, + 0x4b, 0x61, 0x59, 0x64, 0xe2, 0xf0, 0x3d, 0xeb, 0x91, 0x78, 0x2d, 0x17, 0xe1, 0x87, 0x02, 0x96, + 0xdc, 0xdb, 0xa8, 0x65, 0x3d, 0x32, 0xe3, 0x24, 0xe4, 0x2b, 0x70, 0x4a, 0x1c, 0x40, 0xc2, 0x5b, + 0x54, 0xf6, 0x98, 0xfb, 0xa2, 0xbe, 0xf2, 0xf8, 0x78, 0xe9, 0x8c, 0x0c, 0xb6, 0x24, 0xfd, 0x83, + 0x93, 0x7a, 0x9d, 0xcc, 0x85, 0x6c, 0xb1, 0x03, 0x39, 0x32, 0x1c, 0xf7, 0xa8, 0xe7, 0x59, 0xfb, + 0xf2, 0x65, 0x9d, 0xdb, 0xd7, 0x2b, 0x83, 0x59, 0x6b, 0xf1, 0x72, 0xb3, 0x27, 0x25, 0x59, 0x83, + 0xe9, 0x1d, 0xba, 0xab, 0xce, 0xcf, 0x68, 0xb0, 0x55, 0xe5, 0x1f, 0xd2, 0xdd, 0xde, 0x93, 0x13, + 0xa1, 0x23, 0x36, 0x2a, 0xcc, 0x1e, 0x1d, 0xad, 0xdb, 0x9e, 0x4f, 0xdb, 0xd4, 0xc5, 0x68, 0x01, + 0x63, 0xb8, 0x19, 0x2c, 0x84, 0x12, 0xb2, 0x5e, 0xbe, 0xf2, 0xe2, 0xe3, 0xe3, 0xa5, 0xf3, 0xdc, + 0x9f, 0xa4, 0x29, 0xe0, 0xb5, 0x48, 0x84, 0xf0, 0x38, 0x57, 0xf2, 0x35, 0x98, 0x31, 0x9d, 0xae, + 0x6f, 0xb7, 0xf7, 0xab, 0xbe, 0x6b, 0xf9, 0x74, 0x9f, 0x1f, 0x48, 0x61, 0x58, 0x82, 0x48, 0xa9, + 0x78, 0x6b, 0xe1, 0xc0, 0x9a, 0x27, 0xa0, 0xda, 0x89, 0xa0, 0x13, 0x90, 0xaf, 0xc2, 0x34, 0xf7, + 0x13, 0x0c, 0x2a, 0x18, 0xd7, 0xa2, 0x9b, 0xea, 0x85, 0xf7, 0xaf, 0xf3, 0x0b, 0x2a, 0xf7, 0x37, + 0x4c, 0xaa, 0x20, 0xc2, 0x8d, 0x7c, 0x24, 0x06, 0xab, 0x62, 0xb7, 0xf7, 0x83, 0x65, 0x0c, 0x38, + 0xf2, 0x6f, 0x84, 0x43, 0xd2, 0x61, 0xcd, 0x95, 0xcb, 0xb8, 0x87, 0xa5, 0x46, 0x9c, 0x0f, 0xf1, + 0xe1, 0x7c, 0xc1, 0xf3, 0x6c, 0xcf, 0x17, 0x86, 0xd5, 0xab, 0x8f, 0x68, 0xbd, 0xcb, 0x90, 0x77, + 0x1c, 0xf7, 0x90, 0xba, 0xdc, 0xb4, 0x6f, 0x64, 0xe5, 0xea, 0xe3, 0xe3, 0xa5, 0x57, 0x2d, 0x44, + 0xac, 0x09, 0x5b, 0xec, 0x1a, 0x95, 0xa8, 0xb5, 0x87, 0x1c, 0x57, 0xe9, 0x43, 0x7f, 0xa6, 0xe4, + 0xab, 0x70, 0xba, 0x68, 0x79, 0xb4, 0xdc, 0xf6, 0x68, 0xdb, 0xb3, 0x7d, 0xfb, 0x01, 0x15, 0x83, + 0x8a, 0x87, 0x5f, 0x0e, 0x63, 0xa9, 0x1b, 0x75, 0x4c, 0xbb, 0x10, 0xa2, 0xd4, 0xc4, 0xa4, 0x28, + 0xd5, 0xf4, 0xe0, 0x62, 0x1c, 0xa7, 0x20, 0x1f, 0x1d, 0x76, 0xf2, 0x25, 0x18, 0xe7, 0x26, 0x09, + 0xd4, 0x3b, 0x10, 0x2e, 0x6e, 0xf2, 0x85, 0x3b, 0x80, 0xeb, 0x44, 0xc2, 0x29, 0x81, 0x1b, 0x3c, + 0x50, 0xf5, 0xbd, 0x16, 0x9d, 0x12, 0x24, 0x11, 0x69, 0xc0, 0x24, 0x1f, 0x59, 0x8a, 0xf1, 0x43, + 0x84, 0x65, 0xda, 0x8b, 0xea, 0x4a, 0x16, 0x45, 0x11, 0xfe, 0xa8, 0xf2, 0x16, 0xf3, 0xc7, 0x11, + 0xb4, 0x2a, 0x34, 0xae, 0x2b, 0x00, 0x39, 0x49, 0x68, 0x9c, 0x85, 0x33, 0x3d, 0xda, 0x6c, 0x3c, + 0xc0, 0x67, 0xb0, 0x1e, 0x35, 0x92, 0x2f, 0xc1, 0x3c, 0x12, 0x16, 0x9d, 0x76, 0x9b, 0xd6, 0x7d, + 0xdc, 0x3a, 0xa4, 0xea, 0x28, 0xc3, 0xdf, 0x5a, 0x79, 0x7f, 0xeb, 0x01, 0x42, 0x2d, 0xaa, 0x41, + 0x4a, 0xe4, 0x60, 0xfc, 0x6c, 0x1a, 0x16, 0xc4, 0x6e, 0x64, 0xd2, 0xba, 0xe3, 0x36, 0x9e, 0xfd, + 0xd3, 0x6f, 0x55, 0x3b, 0xfd, 0x2e, 0x06, 0x3e, 0xcd, 0x49, 0x9d, 0xec, 0x73, 0xf8, 0xfd, 0x72, + 0x0a, 0xce, 0xf5, 0x23, 0x62, 0xa3, 0x13, 0xc4, 0x4b, 0x19, 0x8f, 0xc5, 0x45, 0xe9, 0xc0, 0x1c, + 0x4e, 0x68, 0xf1, 0x80, 0xd6, 0x0f, 0xbd, 0x35, 0xc7, 0xf3, 0xd1, 0x30, 0x36, 0xdd, 0xe3, 0xa1, + 0xe6, 0xf5, 0xc4, 0x87, 0x9a, 0xd3, 0x7c, 0x95, 0xd5, 0x91, 0x07, 0x8f, 0xe8, 0x72, 0x48, 0x8f, + 0x3c, 0x33, 0x89, 0x35, 0x1a, 0x39, 0x16, 0xba, 0xfe, 0x41, 0xc5, 0xa5, 0x7b, 0xd4, 0xa5, 0xed, + 0x3a, 0xfd, 0x1e, 0x33, 0x72, 0xd4, 0x3b, 0x37, 0x94, 0xb6, 0xe1, 0x97, 0x27, 0x61, 0x3e, 0x89, + 0x8c, 0x8d, 0x8b, 0x72, 0xc1, 0x8d, 0x66, 0x68, 0xf9, 0xcb, 0x29, 0x98, 0xac, 0xd2, 0xba, 0xd3, + 0x6e, 0xdc, 0xc2, 0xe7, 0x70, 0x31, 0x3a, 0x35, 0x7e, 0xc0, 0x33, 0x78, 0x6d, 0x2f, 0xf2, 0x4e, + 0xfe, 0xdd, 0xe3, 0xa5, 0x2f, 0x0c, 0x77, 0xaf, 0xac, 0x3b, 0xe8, 0x97, 0xec, 0x63, 0xd8, 0xd0, + 0xa0, 0x0a, 0xd4, 0x6c, 0x6b, 0x95, 0x92, 0x15, 0x98, 0x12, 0x9f, 0xab, 0xa3, 0x86, 0xcb, 0xe1, + 0x6e, 0xdf, 0xb2, 0x20, 0x16, 0x1f, 0x4c, 0x23, 0x21, 0x37, 0x20, 0xb3, 0xbd, 0x7c, 0x4b, 0xcc, + 0x81, 0x0c, 0xbc, 0xba, 0xbd, 0x7c, 0x0b, 0x55, 0x57, 0xec, 0x3a, 0x30, 0xd5, 0x5d, 0xd6, 0x5e, + 0xa8, 0xb7, 0x97, 0x6f, 0x91, 0xbf, 0x04, 0xa7, 0x4a, 0xb6, 0x27, 0xaa, 0xe0, 0xe6, 0xb6, 0x0d, + 0x74, 0x2f, 0x19, 0xed, 0xb1, 0x7a, 0x3f, 0x97, 0xb8, 0x7a, 0x5f, 0x6c, 0x04, 0x4c, 0x6a, 0xdc, + 0x96, 0xb7, 0x11, 0x0d, 0x0b, 0x94, 0x5c, 0x0f, 0xf9, 0x18, 0xa6, 0x51, 0xf5, 0x8a, 0x16, 0xc8, + 0x18, 0xc6, 0x70, 0xac, 0x47, 0xcd, 0x9f, 0x49, 0xac, 0x79, 0x11, 0x35, 0xb9, 0x35, 0xb4, 0x63, + 0xc6, 0x90, 0x87, 0xda, 0x0d, 0x5d, 0xe3, 0x4c, 0xee, 0xc0, 0x8c, 0x10, 0x95, 0x36, 0xf7, 0xb6, + 0x0e, 0x68, 0xc9, 0x3a, 0x12, 0x8f, 0xcb, 0x78, 0xfb, 0x12, 0xf2, 0x55, 0xcd, 0xd9, 0xab, 0xf9, + 0x07, 0xb4, 0xd6, 0xb0, 0x34, 0xa1, 0x22, 0x42, 0x48, 0xbe, 0x1f, 0x26, 0xd6, 0x9d, 0x3a, 0x93, + 0x92, 0x71, 0x67, 0xe0, 0xef, 0xcd, 0x1f, 0x62, 0xe2, 0x0f, 0x0e, 0x8e, 0x88, 0x3e, 0xdf, 0x3d, + 0x5e, 0x7a, 0xe7, 0xa4, 0x8b, 0x46, 0xa9, 0xc0, 0x54, 0x6b, 0x23, 0x45, 0xc8, 0xed, 0xd0, 0x5d, + 0xd6, 0xdb, 0x68, 0x52, 0x00, 0x09, 0x16, 0xe6, 0x24, 0xe2, 0x97, 0x66, 0x4e, 0x22, 0x60, 0xc4, + 0x85, 0x59, 0x1c, 0x9f, 0x8a, 0xe5, 0x79, 0x0f, 0x1d, 0xb7, 0x81, 0xd1, 0x5f, 0x7b, 0x3d, 0x65, + 0x2f, 0x27, 0x0e, 0xfe, 0x39, 0x3e, 0xf8, 0x1d, 0x85, 0x83, 0x2a, 0xec, 0xc5, 0xd8, 0x93, 0xaf, + 0xc1, 0xb4, 0x49, 0xbf, 0xde, 0xb5, 0x5d, 0x7a, 0xef, 0x56, 0x01, 0xbf, 0xca, 0x49, 0xcd, 0x49, + 0x47, 0x2f, 0xe4, 0x12, 0xa5, 0xcb, 0x61, 0x52, 0x5b, 0x54, 0x6b, 0xed, 0x59, 0xfa, 0x6b, 0x81, + 0x4a, 0x42, 0x2a, 0x30, 0x51, 0xa2, 0x0f, 0xec, 0x3a, 0x45, 0x57, 0x02, 0x61, 0xca, 0x17, 0x44, + 0x35, 0x0f, 0x4b, 0xb8, 0xde, 0xa4, 0x81, 0x00, 0xee, 0x98, 0xa0, 0x5b, 0x8b, 0x05, 0x88, 0xe4, + 0x26, 0x64, 0xca, 0xa5, 0x8a, 0xb0, 0xe4, 0x93, 0x16, 0xfa, 0xe5, 0x46, 0x45, 0xc6, 0x80, 0x46, + 0xe3, 0x0f, 0xbb, 0xa1, 0xd9, 0x01, 0x96, 0x4b, 0x15, 0xb2, 0x07, 0x53, 0x38, 0x00, 0x6b, 0xd4, + 0xe2, 0x63, 0x3b, 0xd3, 0x63, 0x6c, 0xaf, 0x26, 0x8e, 0xed, 0x02, 0x1f, 0xdb, 0x03, 0x41, 0xad, + 0x05, 0xb5, 0x55, 0xd9, 0x32, 0xf1, 0x53, 0x04, 0xda, 0x96, 0x61, 0x5d, 0xb7, 0xd6, 0xf1, 0x71, + 0x5b, 0x88, 0x9f, 0x32, 0x2e, 0x77, 0x10, 0x1b, 0xb6, 0xa7, 0xa1, 0x70, 0x9c, 0x0f, 0x79, 0x1b, + 0xb2, 0x9b, 0x87, 0xbe, 0xb5, 0x30, 0xab, 0x8d, 0x23, 0x03, 0xc9, 0xee, 0xa3, 0xc6, 0xd0, 0x39, + 0xd4, 0x02, 0x52, 0x20, 0x0d, 0x59, 0x86, 0xb1, 0x4a, 0xf9, 0x7e, 0xb5, 0xe9, 0xf8, 0x0b, 0x24, + 0xb8, 0xd3, 0x90, 0x8e, 0xfd, 0xa0, 0xe6, 0x35, 0x1d, 0x3d, 0x58, 0xbf, 0x44, 0x64, 0xd3, 0xb7, + 0x66, 0xb9, 0x8d, 0x87, 0x96, 0x8b, 0x1e, 0x60, 0x73, 0x5a, 0xb5, 0x4a, 0x09, 0x9f, 0xbe, 0x03, + 0x01, 0x88, 0xb8, 0x85, 0xa9, 0x2c, 0x84, 0x36, 0x60, 0x56, 0x2c, 0x13, 0xd1, 0xb5, 0x7b, 0xb7, + 0x0a, 0xc6, 0xbf, 0x9f, 0xc2, 0x0d, 0x93, 0xbc, 0x8a, 0x3e, 0xeb, 0xc1, 0x03, 0x2f, 0xea, 0x35, + 0xad, 0x4e, 0x24, 0x14, 0x22, 0x47, 0x21, 0xaf, 0xc3, 0xe8, 0x2d, 0xab, 0x4e, 0x7d, 0xf9, 0xb0, + 0x83, 0xc8, 0x7b, 0x08, 0x51, 0x95, 0xa0, 0x1c, 0x87, 0xc9, 0x72, 0x7c, 0x21, 0x15, 0xc2, 0xc4, + 0x6a, 0xc5, 0x82, 0x7c, 0xd7, 0x41, 0x59, 0x4e, 0x2c, 0x40, 0x25, 0xf3, 0x5a, 0xc4, 0x06, 0x32, + 0x91, 0x83, 0xf1, 0xc7, 0xa9, 0x70, 0x07, 0x20, 0xaf, 0x40, 0xd6, 0xac, 0x04, 0xed, 0xe7, 0xde, + 0x50, 0x91, 0xe6, 0x23, 0x02, 0xf9, 0x08, 0x4e, 0x29, 0x7c, 0x62, 0x06, 0x99, 0x2f, 0xa3, 0xbb, + 0x8e, 0xd2, 0x92, 0x64, 0xab, 0xcc, 0x64, 0x1e, 0x28, 0xb8, 0x86, 0x05, 0x25, 0xda, 0xb6, 0x39, + 0x6f, 0xa5, 0xb3, 0x2a, 0xef, 0x06, 0x22, 0x44, 0x3b, 0x9b, 0xc4, 0x81, 0x7b, 0xec, 0x18, 0xbf, + 0x91, 0xd2, 0xbe, 0xec, 0x20, 0x1d, 0x55, 0x6a, 0x40, 0x3a, 0xaa, 0xb7, 0x00, 0x0a, 0x5d, 0xdf, + 0x59, 0x6d, 0xbb, 0x4e, 0x93, 0x6b, 0x17, 0x44, 0x34, 0x50, 0xd4, 0x99, 0x52, 0x04, 0x6b, 0x8e, + 0x05, 0x01, 0x72, 0xa2, 0xed, 0x6a, 0xe6, 0x93, 0xda, 0xae, 0x1a, 0xbf, 0x9b, 0xd2, 0xd6, 0x36, + 0x93, 0xc8, 0xe4, 0xe7, 0xa1, 0x98, 0x16, 0xc4, 0x3f, 0x8f, 0xf0, 0xe3, 0xf8, 0x57, 0x53, 0x70, + 0x9a, 0x1b, 0x81, 0x6e, 0x74, 0x5b, 0xbb, 0xd4, 0xbd, 0x6f, 0x35, 0xed, 0x06, 0xf7, 0x48, 0xe3, + 0xc2, 0xe6, 0xe5, 0xf8, 0x87, 0x92, 0x8c, 0xcf, 0x2f, 0x70, 0xdc, 0x28, 0xb5, 0xd6, 0xc6, 0xc2, + 0xda, 0x83, 0xa0, 0x54, 0xbd, 0xc0, 0x25, 0xd3, 0x1b, 0xbf, 0x92, 0x82, 0x17, 0x07, 0xd6, 0x42, + 0xae, 0xc1, 0x98, 0x0c, 0xc3, 0x9a, 0xc2, 0x81, 0x47, 0x83, 0xac, 0x78, 0x08, 0x56, 0x89, 0x45, + 0xbe, 0x0c, 0xa7, 0x54, 0x56, 0x5b, 0xae, 0x65, 0xab, 0xc1, 0x4e, 0x13, 0x5a, 0xed, 0x33, 0x94, + 0xa8, 0x64, 0x94, 0xcc, 0xc4, 0xf8, 0x3f, 0x52, 0x4a, 0xea, 0xba, 0x67, 0x54, 0x5e, 0xbe, 0xa9, + 0xc9, 0xcb, 0x32, 0x5a, 0x50, 0xd0, 0x2b, 0x56, 0x96, 0x78, 0xc7, 0x99, 0x51, 0x0c, 0x0b, 0x11, + 0xf0, 0xcd, 0x34, 0x4c, 0x6c, 0x7b, 0xd4, 0xe5, 0x0f, 0x9c, 0xdf, 0x5b, 0x51, 0x61, 0x82, 0x7e, + 0x0d, 0x15, 0xb7, 0xe3, 0x0f, 0x53, 0xa8, 0xf8, 0x56, 0x29, 0xd8, 0x68, 0x28, 0x49, 0x29, 0x70, + 0x34, 0x30, 0x1d, 0x05, 0x42, 0x79, 0x6c, 0x8f, 0x75, 0x3d, 0x3f, 0x0d, 0x26, 0x29, 0x5a, 0x27, + 0x5f, 0x80, 0x91, 0x6d, 0x54, 0xe3, 0xe9, 0xde, 0xc7, 0x01, 0x7f, 0x2c, 0xe4, 0x9b, 0x74, 0x97, + 0xfd, 0xa9, 0x9e, 0x31, 0x58, 0x46, 0xaa, 0x30, 0x56, 0x74, 0x29, 0xa6, 0x9b, 0xcb, 0x0e, 0xef, + 0x41, 0x57, 0xe7, 0x24, 0x51, 0x0f, 0x3a, 0xc1, 0xc9, 0xf8, 0x99, 0x34, 0x90, 0xb0, 0x8f, 0x18, + 0xa7, 0xdd, 0x7b, 0x66, 0x27, 0xfd, 0x03, 0x6d, 0xd2, 0xcf, 0xc7, 0x26, 0x9d, 0x77, 0x6f, 0xa8, + 0xb9, 0xff, 0xcd, 0x14, 0x9c, 0x4e, 0x26, 0x24, 0x17, 0x61, 0x74, 0x73, 0xab, 0x22, 0x1d, 0xd8, + 0x45, 0x57, 0x9c, 0x0e, 0xde, 0xcb, 0x4d, 0x51, 0x44, 0xde, 0x80, 0xd1, 0x2f, 0x9a, 0x45, 0x76, + 0x0e, 0x29, 0x31, 0x51, 0xbf, 0xee, 0xd6, 0xea, 0xfa, 0x51, 0x24, 0x90, 0xd4, 0xb9, 0xcd, 0x3c, + 0xb5, 0xb9, 0xfd, 0xc9, 0x34, 0xcc, 0x14, 0xea, 0x75, 0xea, 0x79, 0x4c, 0xc8, 0xa1, 0x9e, 0xff, + 0xcc, 0x4e, 0x6c, 0xb2, 0x6b, 0xba, 0xd6, 0xb7, 0xa1, 0x66, 0xf5, 0xb7, 0x53, 0x70, 0x4a, 0x52, + 0x3d, 0xb0, 0xe9, 0xc3, 0xad, 0x03, 0x97, 0x7a, 0x07, 0x4e, 0xb3, 0x31, 0x74, 0xe0, 0x65, 0x26, + 0xe8, 0x61, 0x94, 0x46, 0xf5, 0xb5, 0x7b, 0x0f, 0x21, 0x9a, 0xa0, 0xc7, 0x23, 0x39, 0x5e, 0x83, + 0xb1, 0x42, 0xa7, 0xe3, 0x3a, 0x0f, 0xf8, 0x67, 0x3f, 0x25, 0x1c, 0x0a, 0x39, 0x48, 0x73, 0x40, + 0xe4, 0x20, 0xd6, 0x8c, 0x12, 0x6d, 0xf3, 0x58, 0x3a, 0x53, 0xbc, 0x19, 0x0d, 0xda, 0x56, 0x65, + 0x58, 0x2c, 0x37, 0xaa, 0x40, 0x2a, 0xae, 0xd3, 0x72, 0x7c, 0xda, 0xe0, 0xfd, 0x41, 0xbf, 0xcd, + 0x81, 0x41, 0x40, 0xb6, 0x6c, 0xbf, 0xa9, 0x05, 0x01, 0xf1, 0x19, 0xc0, 0xe4, 0x70, 0xe3, 0x7f, + 0x19, 0x81, 0x49, 0x75, 0x74, 0x88, 0xc1, 0xa3, 0xb4, 0x3a, 0xae, 0xea, 0x3c, 0x6c, 0x21, 0xc4, + 0x14, 0x25, 0xa1, 0xcf, 0x7d, 0x7a, 0xa0, 0xcf, 0xfd, 0x0e, 0x4c, 0x55, 0x5c, 0xa7, 0xe3, 0x78, + 0xb4, 0xc1, 0xd3, 0x90, 0xf2, 0xad, 0x70, 0x4e, 0xb9, 0xe3, 0xb1, 0x89, 0xc4, 0x77, 0x42, 0xd4, + 0x70, 0x74, 0x04, 0x76, 0x2d, 0x9a, 0xa4, 0x54, 0xe7, 0xc3, 0x4d, 0x10, 0x2c, 0x4f, 0x84, 0xcc, + 0x0a, 0x4c, 0x10, 0x18, 0x44, 0x37, 0x41, 0x60, 0x10, 0xf5, 0x5b, 0x1b, 0x79, 0x5a, 0xdf, 0x1a, + 0xf9, 0x99, 0x14, 0x4c, 0x14, 0xda, 0x6d, 0xe1, 0xcb, 0x3f, 0xc0, 0x99, 0xf1, 0xcb, 0xc2, 0x0a, + 0xe1, 0x9d, 0x4f, 0x64, 0x85, 0x80, 0x72, 0x8b, 0x87, 0x92, 0x6a, 0x58, 0xa1, 0x7a, 0xcb, 0x51, + 0xda, 0x41, 0xde, 0x81, 0x7c, 0xb0, 0xc8, 0xcb, 0xed, 0x06, 0x7d, 0x44, 0xbd, 0x85, 0xb1, 0x0b, + 0x99, 0xcb, 0x53, 0x22, 0x58, 0x9e, 0x2a, 0x99, 0x46, 0x11, 0xc9, 0x16, 0x80, 0x15, 0xac, 0xae, + 0x48, 0x02, 0x98, 0xf8, 0xf2, 0x13, 0xd2, 0x33, 0xfe, 0xc6, 0x87, 0x1e, 0x55, 0x7a, 0x0e, 0xf9, + 0x90, 0x16, 0xcc, 0xf0, 0xec, 0x2b, 0x98, 0x95, 0x15, 0x63, 0xc2, 0xc2, 0xc0, 0x79, 0x78, 0x45, + 0xe8, 0xaa, 0x9e, 0x17, 0x39, 0x5d, 0x30, 0xd1, 0x6b, 0x2d, 0x21, 0x40, 0x6c, 0x94, 0x37, 0x0f, + 0x4d, 0x68, 0x9e, 0x89, 0xb7, 0x97, 0x2f, 0xfa, 0x9f, 0x4c, 0xc1, 0x69, 0x75, 0xd1, 0x57, 0xbb, + 0xbb, 0x2d, 0x1b, 0xef, 0x82, 0xe4, 0x2a, 0x8c, 0x8b, 0x35, 0x19, 0x5c, 0xa2, 0xe2, 0xa1, 0x6d, + 0x43, 0x14, 0xb2, 0xca, 0x96, 0x21, 0xe3, 0x21, 0xa4, 0xee, 0xb9, 0xc8, 0x3e, 0xc5, 0x8a, 0xc2, + 0xcc, 0x5e, 0x2e, 0xfe, 0xd6, 0xd7, 0x27, 0x83, 0x18, 0xef, 0xc3, 0xac, 0x3e, 0x13, 0x55, 0xea, + 0x93, 0x2b, 0x30, 0x26, 0xa7, 0x2f, 0x95, 0x3c, 0x7d, 0xb2, 0xdc, 0xd8, 0x01, 0x12, 0xa3, 0xf7, + 0xd0, 0x5c, 0x88, 0xfa, 0xd2, 0x9c, 0x4d, 0x3e, 0xd6, 0xc5, 0x10, 0x83, 0xac, 0xd7, 0x13, 0x9a, + 0xfd, 0x2a, 0x23, 0x35, 0xfe, 0x78, 0x1a, 0xe6, 0x12, 0xf6, 0xdc, 0x01, 0x32, 0xd1, 0x92, 0xbe, + 0x41, 0x8c, 0x07, 0xbe, 0xd0, 0x72, 0x5b, 0x78, 0x5f, 0x66, 0x25, 0xee, 0xb3, 0x1d, 0xf4, 0x4b, + 0x55, 0xfc, 0x69, 0xc8, 0x45, 0x6a, 0xb8, 0x82, 0x91, 0xa7, 0x16, 0xae, 0x60, 0x05, 0xa6, 0x44, + 0xaf, 0xc4, 0x76, 0x35, 0x1a, 0x6a, 0x73, 0x5d, 0x5e, 0x50, 0x8b, 0x6d, 0x5b, 0x3a, 0x09, 0xe7, + 0xe1, 0x39, 0xcd, 0x07, 0x54, 0xf0, 0x18, 0x53, 0x79, 0x60, 0x41, 0x22, 0x0f, 0x85, 0x84, 0xfc, + 0xbb, 0x98, 0x8c, 0x02, 0x21, 0xea, 0x9e, 0x95, 0xeb, 0xb7, 0x67, 0x35, 0x9e, 0xce, 0x9e, 0x75, + 0x5e, 0xb6, 0x31, 0x79, 0xef, 0x4a, 0x68, 0x16, 0xf9, 0xc5, 0x14, 0xcc, 0x72, 0x9f, 0x79, 0xb5, + 0xb1, 0x7d, 0xfd, 0xa0, 0xeb, 0x4f, 0xa7, 0xb1, 0xe7, 0x3c, 0xac, 0xb6, 0x47, 0x5b, 0xe3, 0x8d, + 0x22, 0xdf, 0x07, 0x10, 0x7c, 0x51, 0xde, 0x02, 0xe0, 0xa7, 0x76, 0x2e, 0x61, 0x17, 0x08, 0x90, + 0xc2, 0x58, 0xba, 0x7e, 0x40, 0xa7, 0xa5, 0x20, 0x09, 0xa0, 0xe4, 0x2f, 0xc1, 0x3c, 0xfb, 0x5e, + 0x02, 0x88, 0x88, 0xf0, 0xb1, 0x30, 0x81, 0xb5, 0x7c, 0xb6, 0xb7, 0x4c, 0x74, 0x35, 0x89, 0x8c, + 0x47, 0xfe, 0x0b, 0x53, 0xaf, 0xf9, 0xaa, 0x33, 0x70, 0x62, 0x45, 0x18, 0x32, 0x07, 0x5b, 0xcf, + 0xe3, 0xdd, 0xf6, 0xd8, 0xdf, 0xce, 0xca, 0x6f, 0x81, 0xef, 0x6f, 0x9e, 0xee, 0xcc, 0x86, 0x20, + 0xf2, 0x45, 0x20, 0x81, 0xb3, 0x39, 0x87, 0x51, 0x19, 0x0b, 0x97, 0xab, 0x76, 0x43, 0xa7, 0x75, + 0x57, 0x16, 0xab, 0x8b, 0x24, 0x4e, 0x4c, 0x28, 0xcc, 0x8b, 0x4e, 0x33, 0xa8, 0x4c, 0x76, 0xe1, + 0x2d, 0x4c, 0x6b, 0xf1, 0x53, 0xc2, 0x92, 0x30, 0x47, 0x9b, 0x92, 0x31, 0x43, 0x53, 0x39, 0x25, + 0xb1, 0x23, 0x37, 0x61, 0x1c, 0x3d, 0xca, 0xd6, 0xa4, 0x11, 0x94, 0x30, 0xc8, 0x40, 0xdf, 0xb3, + 0xda, 0x81, 0x6e, 0xca, 0x14, 0xa2, 0xb2, 0xeb, 0x40, 0xc9, 0x3d, 0x32, 0xbb, 0x6d, 0x54, 0xc0, + 0x0a, 0x7d, 0x47, 0xc3, 0x3d, 0xaa, 0xb9, 0x5d, 0xdd, 0xe5, 0x10, 0x91, 0xc8, 0xd7, 0x60, 0xe2, + 0x9e, 0xf5, 0x48, 0xea, 0x5f, 0x85, 0x92, 0x75, 0xa8, 0xec, 0xe2, 0x2d, 0xeb, 0x51, 0xad, 0xd1, + 0x8d, 0xc6, 0x1d, 0xe4, 0xd9, 0xc5, 0x15, 0x96, 0xe4, 0x2b, 0x00, 0x8a, 0x56, 0x98, 0x0c, 0xac, + 0xe0, 0x45, 0x19, 0x11, 0x28, 0x51, 0x5b, 0x8c, 0xfc, 0x15, 0x86, 0x11, 0xc9, 0x61, 0xfe, 0xd3, + 0x93, 0x1c, 0x4e, 0x7d, 0x7a, 0x92, 0xc3, 0xe2, 0x2e, 0x9c, 0xed, 0xf9, 0xe9, 0x24, 0x84, 0x69, + 0xbc, 0xa6, 0x87, 0x69, 0x3c, 0xdb, 0xeb, 0x88, 0xf5, 0xf4, 0xf0, 0xc9, 0x73, 0xf9, 0xf9, 0xde, + 0xd2, 0xc9, 0x77, 0xd2, 0x91, 0x23, 0x57, 0x5c, 0x2c, 0x78, 0xb8, 0xfd, 0x5e, 0x32, 0x49, 0x1a, + 0xf3, 0x7f, 0xf1, 0x43, 0x39, 0x1d, 0x5e, 0x68, 0x22, 0x69, 0x4e, 0xf9, 0xf1, 0xfc, 0xa4, 0xa7, + 0xef, 0xbb, 0x30, 0xcd, 0x33, 0xff, 0xdc, 0xa5, 0x47, 0x0f, 0x1d, 0xb7, 0x21, 0x73, 0x59, 0xa2, + 0x0c, 0x1e, 0xcb, 0x91, 0x17, 0xc1, 0x25, 0x25, 0xe9, 0xa4, 0x34, 0x82, 0xb5, 0x9f, 0x4d, 0xdc, + 0xc5, 0x18, 0x42, 0x3f, 0xff, 0x25, 0xf2, 0x66, 0x20, 0xa8, 0x51, 0x57, 0x0d, 0xa2, 0xec, 0x4a, + 0x60, 0x82, 0xbc, 0x46, 0x5d, 0xe3, 0xf7, 0x33, 0x40, 0x78, 0x4d, 0x45, 0xab, 0x63, 0xa1, 0x0b, + 0x9f, 0x8d, 0xa1, 0x28, 0xf2, 0x02, 0xc7, 0xda, 0x6d, 0x52, 0x35, 0x8e, 0x8b, 0x30, 0x3a, 0x0d, + 0xca, 0x6a, 0xd1, 0x8b, 0x4e, 0x8c, 0xb0, 0xc7, 0x56, 0x97, 0x7e, 0x92, 0xad, 0xee, 0x6b, 0xf0, + 0x7c, 0xa1, 0x83, 0x29, 0xc4, 0x64, 0x2d, 0xb7, 0x1c, 0x57, 0x6e, 0x52, 0x9a, 0x73, 0x88, 0x15, + 0xa0, 0xc5, 0x5a, 0xda, 0x8f, 0x85, 0x22, 0xa7, 0xb0, 0x75, 0xd9, 0xf1, 0x55, 0x67, 0x63, 0x29, + 0xa7, 0x74, 0xb0, 0x24, 0x41, 0x4e, 0xe1, 0x24, 0x92, 0x87, 0xed, 0x4a, 0x39, 0x05, 0xd3, 0x06, + 0x84, 0x3c, 0x6c, 0x97, 0xf6, 0x90, 0x75, 0x02, 0x12, 0xf2, 0x2e, 0x4c, 0x14, 0xba, 0xbe, 0x23, + 0x18, 0x0b, 0x6b, 0xe9, 0xd0, 0xae, 0x59, 0x34, 0x45, 0xbb, 0xfa, 0x84, 0xe8, 0xc6, 0x1f, 0x65, + 0xe0, 0x6c, 0x7c, 0x7a, 0x45, 0x69, 0xf0, 0x7d, 0xa4, 0x06, 0x7c, 0x1f, 0x49, 0xab, 0x81, 0x3f, + 0x16, 0x3c, 0xb5, 0xd5, 0xc0, 0x33, 0x91, 0x7d, 0xc2, 0xd5, 0x50, 0x85, 0x09, 0xf5, 0xbc, 0xcb, + 0x7e, 0xd2, 0xf3, 0x4e, 0xe5, 0xc2, 0x2e, 0xf5, 0xdc, 0xc7, 0x7a, 0x24, 0x7c, 0x3a, 0x8a, 0xba, + 0x57, 0x73, 0x0c, 0xf2, 0xaf, 0xc0, 0x05, 0xbe, 0x27, 0x45, 0x3b, 0xbb, 0x72, 0x24, 0x39, 0x8a, + 0x89, 0x5b, 0x7e, 0x7c, 0xbc, 0x74, 0x95, 0xab, 0x4a, 0x6a, 0xb1, 0x61, 0xab, 0xed, 0x1e, 0xd5, + 0x64, 0xcb, 0x94, 0x4a, 0x06, 0xf2, 0xc6, 0xf4, 0x63, 0x4a, 0x76, 0xab, 0x37, 0x92, 0xdc, 0x48, + 0x78, 0x24, 0x52, 0x0e, 0xd6, 0x3d, 0x48, 0xa4, 0x3a, 0x2c, 0x9d, 0xa8, 0x0e, 0x93, 0xfa, 0x94, + 0x4c, 0xa2, 0x3e, 0xa5, 0x04, 0x33, 0xd5, 0xee, 0xae, 0xac, 0x1b, 0x11, 0xb3, 0x9a, 0x27, 0x5c, + 0x52, 0x87, 0xa2, 0x24, 0xc6, 0x8f, 0xa6, 0x61, 0xb2, 0xd2, 0xec, 0xee, 0xdb, 0xed, 0x92, 0xe5, + 0x5b, 0xcf, 0xac, 0x86, 0xee, 0x2d, 0x4d, 0x43, 0x17, 0x78, 0x4b, 0x05, 0x1d, 0x1b, 0x4a, 0x3d, + 0xf7, 0xad, 0x14, 0xcc, 0x84, 0x24, 0xfc, 0x9c, 0x5d, 0x83, 0x2c, 0xfb, 0x21, 0xee, 0xad, 0x17, + 0x62, 0x8c, 0x79, 0xaa, 0x96, 0xe0, 0x2f, 0xa1, 0x33, 0xd3, 0xf3, 0x20, 0x20, 0x87, 0xc5, 0xcf, + 0xf1, 0x9c, 0xff, 0x27, 0x4f, 0xd1, 0xf2, 0xab, 0x29, 0xc8, 0x47, 0x7b, 0x42, 0xee, 0xc2, 0x18, + 0xe3, 0x64, 0x53, 0x79, 0xa5, 0x7e, 0xa9, 0x47, 0x9f, 0xaf, 0x0a, 0x34, 0xde, 0x3c, 0x1c, 0x7c, + 0xca, 0x21, 0xa6, 0xe4, 0xb0, 0x68, 0xc2, 0xa4, 0x8a, 0x95, 0xd0, 0xba, 0xd7, 0x75, 0xe1, 0xe2, + 0x74, 0xf2, 0x38, 0x68, 0x89, 0x65, 0xb4, 0x56, 0x0b, 0xb9, 0xe1, 0x92, 0xb6, 0xb8, 0x70, 0xac, + 0x22, 0xeb, 0x86, 0x2f, 0xb3, 0xe5, 0x30, 0x38, 0xb2, 0xba, 0xce, 0x12, 0x16, 0x74, 0x80, 0x47, + 0x5e, 0x87, 0x51, 0x5e, 0x9f, 0x9a, 0x60, 0xa1, 0x83, 0x10, 0x55, 0xc4, 0xe5, 0x38, 0xc6, 0xdf, + 0xca, 0xc0, 0xe9, 0xb0, 0x79, 0xdb, 0x9d, 0x86, 0xe5, 0xd3, 0x8a, 0xe5, 0x5a, 0x2d, 0x6f, 0xc0, + 0x17, 0x70, 0x39, 0xd6, 0x34, 0x0c, 0xb8, 0x2f, 0x9b, 0xa6, 0x34, 0xc8, 0x88, 0x34, 0x08, 0xd5, + 0x97, 0xbc, 0x41, 0xb2, 0x19, 0xe4, 0x2e, 0x64, 0xaa, 0xd4, 0x17, 0xdb, 0xe6, 0xa5, 0xd8, 0xa8, + 0xaa, 0xed, 0xba, 0x5a, 0xa5, 0x3e, 0x9f, 0x44, 0x1e, 0xfb, 0x83, 0x6a, 0xb1, 0x17, 0xab, 0xd4, + 0x27, 0x3b, 0x30, 0xba, 0xfa, 0xa8, 0x43, 0xeb, 0xbe, 0x48, 0x30, 0x74, 0xa5, 0x3f, 0x3f, 0x8e, + 0xab, 0xe4, 0x17, 0xa2, 0x08, 0x50, 0x07, 0x8b, 0xa3, 0x2c, 0xde, 0x84, 0x9c, 0xac, 0xfc, 0x24, + 0x2b, 0x77, 0xf1, 0x2d, 0x98, 0x50, 0x2a, 0x39, 0xd1, 0xa2, 0xff, 0x39, 0xb6, 0xaf, 0x3a, 0x4d, + 0x99, 0x93, 0x68, 0x35, 0x26, 0xe6, 0xa5, 0x42, 0x9f, 0x5d, 0x2e, 0xe6, 0xd5, 0x0e, 0x45, 0x51, + 0x1f, 0x79, 0xaf, 0x0c, 0x33, 0xd5, 0x43, 0xbb, 0x13, 0x86, 0xc0, 0xd3, 0x0e, 0x53, 0x8c, 0x16, + 0x2f, 0xee, 0xdc, 0xd1, 0xc3, 0x34, 0x4a, 0x67, 0xfc, 0x69, 0x0a, 0x46, 0xd9, 0x5f, 0xf7, 0x6f, + 0x3e, 0xa3, 0x5b, 0xe6, 0x0d, 0x6d, 0xcb, 0x9c, 0x55, 0xe2, 0xcf, 0xe2, 0xc6, 0x71, 0x73, 0xc0, + 0x66, 0x79, 0x2c, 0x26, 0x88, 0x23, 0x93, 0xdb, 0x30, 0x26, 0x2c, 0x6f, 0x84, 0x89, 0xb4, 0x1a, + 0xd0, 0x56, 0xda, 0xe4, 0x04, 0x97, 0x73, 0xa7, 0x13, 0xd5, 0x66, 0x48, 0x6a, 0x26, 0x92, 0xcb, + 0x60, 0x84, 0x5a, 0x26, 0x3b, 0x07, 0xfd, 0xcf, 0x78, 0x40, 0x56, 0x25, 0x47, 0x64, 0x0f, 0xc7, + 0xfe, 0x82, 0x78, 0xc8, 0xc8, 0xf4, 0x63, 0x72, 0x5a, 0x26, 0xfa, 0x4a, 0x7c, 0xe3, 0xf8, 0x83, + 0x39, 0x1e, 0xca, 0x54, 0x36, 0xec, 0x3d, 0x98, 0xbc, 0xe5, 0xb8, 0x0f, 0x2d, 0x97, 0x07, 0xa8, + 0x13, 0x96, 0x03, 0xec, 0xea, 0x38, 0xb5, 0xc7, 0xe1, 0x3c, 0xc4, 0xdd, 0x77, 0x8f, 0x97, 0xb2, + 0x2b, 0x8e, 0xd3, 0x34, 0x35, 0x74, 0xb2, 0x09, 0x53, 0xf7, 0xac, 0x47, 0xca, 0xa5, 0x97, 0x3b, + 0x94, 0x5c, 0x61, 0x0b, 0x98, 0xdd, 0x9a, 0x07, 0x9b, 0x41, 0xe9, 0xf4, 0xc4, 0x86, 0xe9, 0x8a, + 0xe3, 0xfa, 0xa2, 0x12, 0xbb, 0xbd, 0x2f, 0x3a, 0x1b, 0x37, 0xe4, 0xba, 0x96, 0x68, 0xc8, 0x75, + 0xb6, 0xe3, 0xb8, 0x7e, 0x6d, 0x2f, 0x20, 0xd7, 0x82, 0xe6, 0x68, 0x8c, 0xc9, 0x7b, 0x30, 0xab, + 0x04, 0x05, 0xbb, 0xe5, 0xb8, 0x2d, 0x4b, 0x0a, 0xe5, 0xa8, 0x07, 0x46, 0x7b, 0x93, 0x3d, 0x04, + 0x9b, 0x71, 0x4c, 0xf2, 0x51, 0x92, 0x8b, 0xce, 0x48, 0x68, 0x09, 0x96, 0xe0, 0xa2, 0xd3, 0xcb, + 0x12, 0x2c, 0xee, 0xac, 0xb3, 0xdf, 0xcf, 0x52, 0x34, 0xb7, 0x72, 0x5d, 0x5c, 0xbf, 0x07, 0x5b, + 0x82, 0x06, 0xf3, 0xd6, 0xc3, 0x22, 0x74, 0x19, 0x32, 0x2b, 0x95, 0x5b, 0xf8, 0x7a, 0x21, 0x0d, + 0x6d, 0xda, 0x07, 0x56, 0xbb, 0x8e, 0xc2, 0xb2, 0xb0, 0xce, 0x56, 0x77, 0xe4, 0x95, 0xca, 0x2d, + 0x62, 0xc1, 0x5c, 0x85, 0xba, 0x2d, 0xdb, 0xff, 0xd2, 0xf5, 0xeb, 0xca, 0x44, 0xe5, 0xb0, 0x69, + 0xd7, 0x44, 0xd3, 0x96, 0x3a, 0x88, 0x52, 0x7b, 0x74, 0xfd, 0x7a, 0xe2, 0x74, 0x04, 0x0d, 0x4b, + 0xe2, 0xc5, 0x76, 0xc6, 0x7b, 0xd6, 0xa3, 0xd0, 0xa8, 0xde, 0x13, 0xce, 0x8e, 0xe7, 0xe5, 0xc2, + 0x0a, 0x0d, 0xf2, 0xb5, 0x9d, 0x51, 0x27, 0x62, 0x77, 0x9d, 0x70, 0x79, 0x79, 0xc2, 0x4d, 0x64, + 0x51, 0xaa, 0x74, 0xa4, 0x47, 0xac, 0x2a, 0xb0, 0x2b, 0xe8, 0x64, 0x3b, 0xb8, 0xb1, 0xf1, 0x1b, + 0x8f, 0x48, 0x63, 0x75, 0x4d, 0xbd, 0xb1, 0x71, 0x45, 0x8a, 0xd6, 0xad, 0x99, 0xe0, 0x9a, 0xcf, + 0xbd, 0x0c, 0x4c, 0x9d, 0x4b, 0xfc, 0x22, 0x38, 0x79, 0xf2, 0x8b, 0x20, 0x85, 0xec, 0xba, 0x53, + 0x3f, 0x14, 0x91, 0x7e, 0xbe, 0xc8, 0x3e, 0xf7, 0xa6, 0x53, 0x3f, 0x7c, 0x7a, 0x16, 0xb0, 0xc8, + 0x9e, 0x6c, 0xb0, 0xa6, 0xb2, 0x55, 0x20, 0xc6, 0x44, 0x58, 0x55, 0xce, 0x07, 0x37, 0x21, 0xa5, + 0x8c, 0x0b, 0x3e, 0x7c, 0xd1, 0xc8, 0xa1, 0x35, 0x75, 0x72, 0x42, 0x21, 0x5f, 0xa2, 0xde, 0xa1, + 0xef, 0x74, 0x8a, 0x4d, 0xbb, 0xb3, 0xeb, 0x58, 0x6e, 0x03, 0x75, 0x77, 0x49, 0xdf, 0xf7, 0x2b, + 0x89, 0xdf, 0xf7, 0x6c, 0x83, 0xd3, 0xd7, 0xea, 0x92, 0x81, 0x19, 0x63, 0x49, 0x3e, 0x82, 0x69, + 0xb6, 0xb8, 0x57, 0x1f, 0xf9, 0xb4, 0xcd, 0x67, 0x7e, 0x16, 0x45, 0x87, 0x79, 0x25, 0xf0, 0x77, + 0x50, 0xc8, 0xd7, 0x14, 0x7e, 0xec, 0x34, 0x20, 0xd0, 0xa2, 0x24, 0x69, 0xac, 0x48, 0x03, 0x16, + 0xee, 0x59, 0x8f, 0x94, 0xe4, 0x5b, 0xca, 0x22, 0x25, 0xb8, 0xc0, 0x30, 0x29, 0x38, 0x5b, 0x60, + 0x61, 0x80, 0xce, 0x1e, 0xeb, 0xb5, 0x27, 0x27, 0xf2, 0xfd, 0x70, 0x46, 0x74, 0xab, 0x84, 0xd9, + 0x30, 0x1c, 0xf7, 0xa8, 0x7a, 0x60, 0xa1, 0x3f, 0xcd, 0xdc, 0xc9, 0x36, 0x44, 0x39, 0x60, 0x0d, + 0xc9, 0xa7, 0xe6, 0x71, 0x46, 0x66, 0xaf, 0x1a, 0xc8, 0xc7, 0x30, 0xcd, 0x9f, 0x6c, 0xd6, 0x1c, + 0xcf, 0xc7, 0x0b, 0xfd, 0xfc, 0xc9, 0xcc, 0xc4, 0xf9, 0x3b, 0x10, 0x77, 0xac, 0x88, 0x28, 0x00, + 0x22, 0x9c, 0xc9, 0x3b, 0x30, 0x51, 0xb1, 0xdb, 0x3c, 0x8e, 0x59, 0xb9, 0x82, 0xaa, 0x47, 0x71, + 0xfe, 0x74, 0xec, 0x76, 0x4d, 0xde, 0xaa, 0x3b, 0xc1, 0x76, 0xa1, 0x62, 0x93, 0x1d, 0x98, 0xa8, + 0x56, 0xd7, 0x6e, 0xd9, 0xec, 0x00, 0xec, 0x1c, 0x2d, 0x9c, 0xee, 0xd1, 0xca, 0x8b, 0x89, 0xad, + 0x9c, 0xf2, 0xbc, 0x03, 0x4c, 0x3c, 0x5c, 0xab, 0x3b, 0x9d, 0x23, 0x53, 0xe5, 0x94, 0x60, 0x3a, + 0x7d, 0xe6, 0x29, 0x9b, 0x4e, 0x97, 0x61, 0x46, 0x31, 0xb0, 0x44, 0xe3, 0xca, 0x85, 0x30, 0x6c, + 0x97, 0x6a, 0x2a, 0x1d, 0x75, 0xeb, 0x8b, 0xd2, 0x49, 0x9b, 0xe9, 0xb3, 0x27, 0xb5, 0x99, 0xb6, + 0x61, 0x96, 0x4f, 0x86, 0x58, 0x07, 0x38, 0xd3, 0x8b, 0x3d, 0xc6, 0xf0, 0x4a, 0xe2, 0x18, 0xce, + 0x89, 0x99, 0x96, 0x8b, 0x0c, 0x9f, 0x28, 0xe3, 0x5c, 0xc9, 0x1e, 0x10, 0x01, 0x14, 0x69, 0x8f, + 0xb1, 0xae, 0xe7, 0x7b, 0xd4, 0xf5, 0x52, 0x62, 0x5d, 0xd3, 0xb2, 0xae, 0x5d, 0x5e, 0x4d, 0x02, + 0x47, 0xd2, 0x96, 0xf5, 0xc8, 0xf5, 0x85, 0x03, 0x7b, 0x4e, 0xd3, 0x83, 0xc6, 0x11, 0x78, 0x10, + 0xd1, 0xe8, 0xa2, 0x8d, 0x8e, 0x7b, 0x02, 0x67, 0xf2, 0x08, 0x4e, 0xc7, 0x5b, 0x81, 0x75, 0x9e, + 0xc7, 0x3a, 0xcf, 0x6b, 0x75, 0x46, 0x91, 0xf8, 0xba, 0xd1, 0xbb, 0x15, 0xad, 0xb5, 0x07, 0xff, + 0x3b, 0xd9, 0xdc, 0x54, 0x7e, 0x3a, 0xc9, 0xd2, 0xfa, 0x1f, 0xa7, 0x23, 0x9b, 0x36, 0x29, 0xc3, + 0x98, 0x98, 0x0b, 0x21, 0xc5, 0xc6, 0x47, 0xfc, 0x7c, 0xe2, 0x88, 0x8f, 0x89, 0x69, 0x35, 0x25, + 0x3d, 0x79, 0xc8, 0x58, 0xa1, 0xd9, 0xba, 0x10, 0xfb, 0xbf, 0xc2, 0xf7, 0x64, 0x04, 0x69, 0xa7, + 0x4f, 0xe9, 0xe4, 0x4e, 0x3b, 0xba, 0x4f, 0x18, 0x1e, 0x43, 0xb2, 0x36, 0x72, 0xc8, 0x33, 0x05, + 0x64, 0x02, 0xcf, 0x0f, 0x3d, 0x2d, 0xc0, 0x53, 0xab, 0x90, 0xd5, 0x62, 0xfc, 0x46, 0x0a, 0xa6, + 0xb4, 0x5d, 0x9f, 0xdc, 0x54, 0xdc, 0x9a, 0x42, 0xaf, 0x5c, 0x0d, 0x07, 0x37, 0x82, 0xa8, 0xc3, + 0xd3, 0x4d, 0x61, 0x37, 0x9d, 0xee, 0x4d, 0x97, 0x98, 0xfd, 0xbb, 0xbf, 0x92, 0x2c, 0xc8, 0x3c, + 0x94, 0xed, 0x91, 0x79, 0xe8, 0xd7, 0x9e, 0x87, 0x69, 0xfd, 0x5a, 0x40, 0x5e, 0x87, 0x51, 0xd4, + 0x2d, 0xca, 0x3b, 0x26, 0xcf, 0xbd, 0x8b, 0x10, 0x2d, 0xf7, 0x2e, 0x42, 0xc8, 0xcb, 0x00, 0x81, + 0x01, 0xab, 0xd4, 0xac, 0x8f, 0x3c, 0x3e, 0x5e, 0x4a, 0xbd, 0x61, 0x2a, 0x05, 0xe4, 0xab, 0x00, + 0x1b, 0x4e, 0x83, 0x06, 0xd9, 0xd1, 0xfa, 0xbc, 0x1e, 0xbf, 0x12, 0x8b, 0xa2, 0x7d, 0xaa, 0xed, + 0x34, 0x68, 0x3c, 0x64, 0xb6, 0xc2, 0x91, 0xbc, 0x0d, 0x23, 0x66, 0x97, 0xdd, 0x67, 0xb9, 0x2a, + 0x61, 0x42, 0xee, 0xbe, 0xdd, 0x26, 0x55, 0x12, 0xea, 0x77, 0xa3, 0x86, 0x51, 0x0c, 0x40, 0x3e, + 0xe0, 0xd1, 0xb5, 0x45, 0x30, 0xac, 0x91, 0xf0, 0xad, 0x41, 0x39, 0x95, 0x63, 0xe1, 0xb0, 0x14, + 0x12, 0xb2, 0x09, 0x63, 0xaa, 0x92, 0x5c, 0xf1, 0x8f, 0x55, 0x1f, 0x52, 0x94, 0x9b, 0x97, 0x48, + 0xab, 0x16, 0xd5, 0x9f, 0x4b, 0x2e, 0xe4, 0x5d, 0x18, 0x67, 0xec, 0xd9, 0x27, 0xec, 0x09, 0x89, + 0x1b, 0x5f, 0x14, 0x94, 0x06, 0xb1, 0x1d, 0x40, 0x0b, 0x59, 0x15, 0x10, 0x90, 0x8f, 0x30, 0x73, + 0x98, 0x18, 0xea, 0xbe, 0x56, 0x05, 0x97, 0x62, 0x43, 0x8d, 0xa9, 0xc4, 0xe2, 0x49, 0x65, 0x03, + 0x7e, 0x64, 0x3f, 0x08, 0xa5, 0x34, 0x4c, 0x44, 0xf4, 0x57, 0x63, 0x15, 0x2c, 0xc8, 0xe8, 0x40, + 0xf1, 0x2c, 0x77, 0x1a, 0x5f, 0xd2, 0x81, 0x7c, 0x28, 0xf0, 0x88, 0xba, 0xa0, 0x5f, 0x5d, 0x6f, + 0xc4, 0xea, 0x52, 0x27, 0x30, 0x56, 0x5d, 0x8c, 0x3b, 0x69, 0xc0, 0xb4, 0xdc, 0x3c, 0x45, 0x7d, + 0x13, 0xfd, 0xea, 0x7b, 0x39, 0x56, 0xdf, 0x5c, 0x63, 0x37, 0x5e, 0x4f, 0x84, 0x27, 0x79, 0x17, + 0xa6, 0x24, 0x04, 0xbf, 0x0f, 0x91, 0xbd, 0x16, 0xb5, 0x22, 0x8d, 0x5d, 0x34, 0x99, 0xd7, 0x73, + 0xff, 0xa9, 0xc8, 0x2a, 0x35, 0x5f, 0x1d, 0x53, 0x1a, 0x75, 0x74, 0x55, 0xe8, 0xc8, 0xe4, 0x43, + 0x98, 0x28, 0xb7, 0x58, 0x47, 0x9c, 0xb6, 0xe5, 0x53, 0xe1, 0x3b, 0x25, 0x2d, 0x24, 0x94, 0x12, + 0x65, 0xa9, 0xf2, 0x6c, 0x7a, 0x61, 0x91, 0x96, 0x4d, 0x2f, 0x04, 0xb3, 0xc1, 0xe3, 0xaf, 0x22, + 0x62, 0x0d, 0x4b, 0xbf, 0xaa, 0xf3, 0x09, 0x56, 0x0a, 0x0a, 0x7b, 0x11, 0x74, 0x8e, 0x41, 0xe5, + 0xab, 0x44, 0x24, 0xe8, 0x9c, 0xca, 0x93, 0xbc, 0x07, 0x13, 0x22, 0x59, 0x44, 0xc1, 0xdc, 0xf0, + 0x16, 0xf2, 0xd8, 0x79, 0xf4, 0x06, 0x97, 0x79, 0x25, 0x6a, 0x96, 0x1b, 0x31, 0xc7, 0x0b, 0xf1, + 0xc9, 0x97, 0x60, 0x7e, 0xc7, 0x6e, 0x37, 0x9c, 0x87, 0x9e, 0x38, 0xa6, 0xc4, 0x46, 0x37, 0x1b, + 0x3a, 0xc3, 0x3c, 0xe4, 0xe5, 0x81, 0x9c, 0x12, 0xdb, 0xf8, 0x12, 0x39, 0x90, 0xbf, 0x18, 0xe3, + 0xcc, 0x57, 0x10, 0xe9, 0xb7, 0x82, 0x96, 0x63, 0x2b, 0x28, 0x5e, 0x7d, 0x74, 0x39, 0x25, 0x56, + 0x43, 0x1c, 0x20, 0xfa, 0xf9, 0x7e, 0xc7, 0xb1, 0xdb, 0x0b, 0x73, 0xb8, 0x17, 0x3e, 0x1f, 0xf5, + 0xbf, 0x46, 0xbc, 0x8a, 0xd3, 0xb4, 0xeb, 0x47, 0x3c, 0x73, 0x7d, 0x54, 0x1e, 0xfd, 0xd8, 0xd1, + 0x74, 0xc6, 0x09, 0xac, 0xc9, 0x87, 0x30, 0xc9, 0xfe, 0x0f, 0x2e, 0xcc, 0xf3, 0x9a, 0x5d, 0x9b, + 0x82, 0x29, 0xea, 0xc1, 0x39, 0xc2, 0x6c, 0x16, 0x09, 0x77, 0x69, 0x8d, 0x15, 0x79, 0x0b, 0x80, + 0x49, 0x4e, 0x62, 0x3b, 0x3e, 0x15, 0xc6, 0xf8, 0x43, 0x79, 0x2b, 0xbe, 0x11, 0x87, 0xc8, 0xec, + 0x16, 0xcf, 0x7e, 0x55, 0xbb, 0x0d, 0x87, 0x7d, 0x1b, 0xa7, 0x91, 0x96, 0xbb, 0xa4, 0x31, 0x5a, + 0x8f, 0xc3, 0x35, 0x97, 0xb4, 0x10, 0x9d, 0xac, 0xc1, 0x0c, 0xc6, 0x62, 0x2c, 0x37, 0x68, 0xdb, + 0xc7, 0xd7, 0xca, 0x85, 0x33, 0xca, 0x6b, 0x2e, 0x2b, 0xaa, 0xd9, 0x41, 0x99, 0x2a, 0x67, 0x47, + 0xc8, 0x88, 0x07, 0x73, 0xe1, 0xee, 0x12, 0xbe, 0x0d, 0x2f, 0xe0, 0x20, 0x49, 0xe9, 0x32, 0x8e, + 0xc1, 0xf7, 0x63, 0x36, 0x23, 0xca, 0xc6, 0x25, 0x35, 0xeb, 0x6a, 0x85, 0x49, 0xdc, 0x89, 0x09, + 0xe4, 0x76, 0xb1, 0x12, 0x0d, 0x56, 0x78, 0x16, 0x7b, 0x80, 0xd3, 0xbc, 0x5f, 0x0f, 0xf3, 0x36, + 0x26, 0x04, 0x2c, 0x4c, 0xa0, 0x26, 0xdf, 0x80, 0x53, 0x72, 0x07, 0x11, 0x45, 0x62, 0x5d, 0x2f, + 0x9e, 0x70, 0x27, 0x6e, 0xec, 0x06, 0x55, 0xc7, 0x96, 0x74, 0x72, 0x15, 0xc4, 0x82, 0x09, 0x9c, + 0x56, 0x51, 0xe3, 0xf3, 0xfd, 0x6a, 0xbc, 0x1c, 0xab, 0xf1, 0x34, 0x2e, 0x94, 0x78, 0x65, 0x2a, + 0x4f, 0xb2, 0x02, 0x53, 0xe2, 0x3b, 0x12, 0xab, 0xed, 0x1c, 0x8e, 0x16, 0x2a, 0x58, 0xe4, 0x17, + 0x18, 0x5b, 0x70, 0x3a, 0x89, 0xba, 0x23, 0x73, 0x8d, 0xfa, 0x79, 0x6d, 0x47, 0x8e, 0x2a, 0xd2, + 0x75, 0x64, 0xb6, 0x23, 0x85, 0x52, 0xcc, 0xea, 0xa3, 0x8e, 0x2b, 0xd4, 0x27, 0x2f, 0x84, 0x31, + 0xfc, 0x15, 0xe1, 0xa7, 0x46, 0x03, 0x0c, 0x75, 0x4b, 0x48, 0xe2, 0x40, 0xb6, 0x61, 0x2e, 0x38, + 0xb5, 0x15, 0xc6, 0x4b, 0x61, 0x2e, 0x84, 0xf0, 0xa8, 0x4f, 0xe6, 0x9b, 0x44, 0x4f, 0x2c, 0x38, + 0xa3, 0x9d, 0xd3, 0x0a, 0xeb, 0x0b, 0xc8, 0x1a, 0xf3, 0x84, 0xea, 0x87, 0x7c, 0x32, 0xfb, 0x5e, + 0x7c, 0xc8, 0xc7, 0xb0, 0x18, 0x3d, 0x9b, 0x95, 0x5a, 0x5e, 0xc4, 0x5a, 0x5e, 0x7d, 0x7c, 0xbc, + 0x74, 0x29, 0x76, 0xbc, 0x27, 0x57, 0xd4, 0x87, 0x1b, 0xf9, 0x2a, 0x2c, 0xe8, 0xe7, 0xb3, 0x52, + 0x93, 0x81, 0x35, 0xe1, 0xa7, 0x13, 0x1c, 0xec, 0xc9, 0x35, 0xf4, 0xe4, 0x41, 0x7c, 0x58, 0x4a, + 0x5c, 0xdd, 0x4a, 0x35, 0x17, 0xc3, 0x0e, 0xc5, 0xbe, 0x92, 0xe4, 0xea, 0x06, 0xb1, 0x24, 0x0f, + 0xe1, 0x85, 0xa4, 0x63, 0x42, 0xa9, 0xf4, 0xa5, 0x40, 0x41, 0xf9, 0x5a, 0xf2, 0x91, 0x93, 0x5c, + 0xf3, 0x00, 0xb6, 0xe4, 0x23, 0x38, 0xa5, 0x7c, 0x5f, 0x4a, 0x7d, 0x2f, 0x63, 0x7d, 0xe8, 0xca, + 0xaa, 0x7e, 0x98, 0xc9, 0xb5, 0x24, 0xf3, 0x20, 0x2d, 0x98, 0x93, 0x1d, 0x47, 0x4d, 0xb0, 0x38, + 0x7a, 0x2e, 0x69, 0xbb, 0x6a, 0x1c, 0x43, 0x49, 0xb0, 0xbc, 0x5b, 0xeb, 0x84, 0x84, 0xea, 0x4a, + 0x4f, 0xe0, 0x4b, 0xd6, 0x60, 0xb4, 0x5a, 0x29, 0xdf, 0xba, 0xb5, 0xba, 0xf0, 0x0a, 0xd6, 0x20, + 0xfd, 0x5e, 0x38, 0x50, 0xbb, 0x34, 0x09, 0x73, 0xab, 0x8e, 0xbd, 0xb7, 0xa7, 0xb9, 0x17, 0x71, + 0xd4, 0x3b, 0xd9, 0xdc, 0xe5, 0xfc, 0x95, 0x3b, 0xd9, 0xdc, 0x95, 0xfc, 0xab, 0xe6, 0xb9, 0xe4, + 0xdc, 0xb8, 0xbc, 0xb3, 0xe6, 0xa5, 0x7e, 0xa5, 0xe1, 0x50, 0x18, 0x3f, 0x97, 0x82, 0xb9, 0x84, + 0x76, 0x90, 0x4b, 0x90, 0xc5, 0xe4, 0x02, 0xca, 0x03, 0x73, 0x24, 0xa9, 0x00, 0x96, 0x93, 0xcf, + 0xc0, 0x58, 0x69, 0xa3, 0x5a, 0x2d, 0x6c, 0xc8, 0x2b, 0x1b, 0xdf, 0xae, 0xda, 0x5e, 0xcd, 0xb3, + 0xf4, 0x77, 0x29, 0x81, 0x46, 0xde, 0x80, 0xd1, 0x72, 0x05, 0x09, 0xb8, 0x85, 0x13, 0x5e, 0x61, + 0xec, 0x4e, 0x14, 0x5f, 0x20, 0x19, 0x3f, 0x9e, 0x02, 0x12, 0x1f, 0x54, 0x72, 0x1d, 0x26, 0xd4, + 0xa9, 0xe3, 0x17, 0x4c, 0x7c, 0x43, 0x51, 0x26, 0xc6, 0x54, 0x71, 0x48, 0x09, 0x46, 0x30, 0x19, + 0x52, 0xf0, 0x20, 0x96, 0x78, 0x00, 0x9c, 0x89, 0x1d, 0x00, 0x23, 0x98, 0x6a, 0xc9, 0xe4, 0xc4, + 0xc6, 0x6f, 0xa7, 0x80, 0xc4, 0x0f, 0xcd, 0xa1, 0x1f, 0xe4, 0xdf, 0x54, 0x3c, 0x54, 0xd5, 0xf0, + 0xe1, 0x41, 0xee, 0x07, 0xf5, 0xb2, 0x14, 0xfa, 0xb2, 0x5e, 0xd2, 0x2e, 0xe7, 0xbd, 0xdd, 0x9a, + 0xae, 0xc0, 0xc8, 0x7d, 0xea, 0xee, 0x4a, 0xe3, 0x3d, 0x34, 0xf8, 0x79, 0xc0, 0x00, 0xea, 0x65, + 0x15, 0x31, 0x8c, 0x3f, 0x4a, 0xc1, 0x7c, 0x92, 0x24, 0x37, 0xc0, 0xfb, 0xc8, 0x88, 0x38, 0x4e, + 0xe1, 0x63, 0x3c, 0xb7, 0x06, 0x0a, 0xdc, 0xa5, 0x96, 0x60, 0x84, 0x75, 0x56, 0xce, 0x30, 0x2a, + 0x0b, 0xd8, 0x68, 0x78, 0x26, 0x87, 0x33, 0x04, 0x1e, 0xf5, 0x28, 0x8b, 0xc1, 0xad, 0x10, 0x01, + 0x05, 0x05, 0x93, 0xc3, 0x19, 0xc2, 0x3d, 0xa7, 0x11, 0x64, 0x00, 0x45, 0x84, 0x16, 0x03, 0x98, + 0x1c, 0x4e, 0x2e, 0xc1, 0xd8, 0x66, 0x7b, 0x9d, 0x5a, 0x0f, 0x64, 0xfa, 0x0a, 0x34, 0x1e, 0x70, + 0xda, 0xb5, 0x26, 0x83, 0x99, 0xb2, 0xd0, 0xf8, 0x56, 0x0a, 0x66, 0x63, 0x42, 0xe4, 0x60, 0x07, + 0xab, 0xfe, 0x9e, 0x0e, 0xc3, 0xf4, 0x8f, 0x37, 0x3f, 0x9b, 0xdc, 0x7c, 0xe3, 0x7f, 0xcf, 0xc2, + 0x99, 0x1e, 0x77, 0xfa, 0xd0, 0x13, 0x2b, 0x35, 0xd0, 0x13, 0xeb, 0xcb, 0xec, 0x0e, 0x6d, 0xd9, + 0x2d, 0x6f, 0xcb, 0x09, 0x5b, 0x1c, 0x1a, 0x74, 0x63, 0x99, 0x4c, 0x82, 0x2a, 0x2d, 0x7f, 0xcf, + 0xf2, 0x44, 0xd4, 0x35, 0xdf, 0x89, 0x8b, 0x14, 0x1a, 0xb3, 0x98, 0x2f, 0x54, 0xe6, 0xcf, 0x89, + 0x2f, 0x94, 0x6e, 0x9d, 0x9f, 0x7d, 0xaa, 0xd6, 0xf9, 0xc9, 0x96, 0x7d, 0x23, 0x4f, 0x62, 0xe7, + 0x59, 0x84, 0x29, 0x6e, 0x3d, 0x51, 0xf0, 0xf8, 0x24, 0x8d, 0xc6, 0x2c, 0x2e, 0x2c, 0x2f, 0x3e, + 0x17, 0x1a, 0x0d, 0x59, 0xd3, 0x2d, 0xc9, 0xc7, 0xf0, 0xd5, 0xe7, 0x52, 0x6f, 0x4b, 0x71, 0xed, + 0xb5, 0x57, 0x25, 0x35, 0xbe, 0x95, 0xd6, 0x1d, 0xa5, 0xfe, 0x3c, 0xae, 0xbc, 0x2b, 0x30, 0xb2, + 0x73, 0x40, 0x5d, 0xb9, 0xdf, 0x61, 0x43, 0x1e, 0x32, 0x80, 0xda, 0x10, 0xc4, 0x20, 0xb7, 0x60, + 0xba, 0xc2, 0x67, 0x42, 0x0e, 0x6f, 0x36, 0xbc, 0x6a, 0x75, 0x84, 0x42, 0x20, 0x61, 0x7c, 0x23, + 0x54, 0xc6, 0x6d, 0x38, 0xaf, 0x7d, 0x90, 0x22, 0xb0, 0x03, 0x37, 0xe8, 0xe6, 0x27, 0xe2, 0x74, + 0x68, 0xc2, 0x1e, 0xee, 0x1e, 0x66, 0x04, 0x6a, 0xec, 0xc1, 0x0b, 0x7d, 0x19, 0xb1, 0x83, 0x08, + 0x3a, 0xc1, 0xaf, 0x88, 0xd5, 0x59, 0x5f, 0x52, 0x53, 0xa1, 0x33, 0xbe, 0x1f, 0x26, 0xd5, 0x51, + 0xc6, 0x3d, 0x95, 0xfd, 0x16, 0x9b, 0x1a, 0xdf, 0x53, 0x19, 0xc0, 0xe4, 0xf0, 0x81, 0xc9, 0xe3, + 0xc3, 0xe9, 0xcf, 0x0c, 0x9a, 0x7e, 0x56, 0x39, 0x7e, 0xb2, 0x4a, 0xe5, 0xf8, 0x5b, 0xad, 0x1c, + 0x23, 0x37, 0x98, 0x1c, 0xfe, 0x54, 0x2b, 0xff, 0x2d, 0x19, 0xc4, 0x1f, 0xed, 0xc5, 0xe5, 0x9d, + 0x38, 0x4c, 0xd1, 0x39, 0x97, 0x74, 0xd3, 0x0d, 0x31, 0xc3, 0x43, 0x32, 0x3d, 0xe8, 0x90, 0x3c, + 0xc9, 0x42, 0xbc, 0x06, 0x63, 0x05, 0xf1, 0x26, 0x9b, 0x0d, 0x05, 0x1b, 0x2b, 0xf6, 0x00, 0x2b, + 0xb1, 0x8c, 0x6f, 0xa7, 0xe0, 0x54, 0xa2, 0xaa, 0x8c, 0xd5, 0xca, 0x75, 0x72, 0xca, 0x77, 0x18, + 0x55, 0xc8, 0x71, 0x8c, 0x93, 0xb8, 0xed, 0x0e, 0xdf, 0x17, 0xe3, 0x45, 0x18, 0x0f, 0x1e, 0x6a, + 0xc8, 0xbc, 0x9c, 0x3a, 0x34, 0xd4, 0x91, 0xfa, 0xfe, 0x2a, 0x00, 0x6b, 0xc1, 0x53, 0x35, 0x2b, + 0x33, 0x7e, 0x2b, 0xcd, 0x13, 0x3c, 0x3d, 0xb3, 0xd1, 0xee, 0x92, 0x6d, 0xc1, 0x58, 0x97, 0x7a, + 0xc7, 0xb8, 0x23, 0xab, 0x30, 0x5a, 0xf5, 0x2d, 0xbf, 0x2b, 0xbd, 0x8d, 0xe7, 0x54, 0x32, 0x2c, + 0xb8, 0xbf, 0x1c, 0xfa, 0x9b, 0x7a, 0x08, 0xd1, 0x2e, 0x07, 0x08, 0x51, 0x4c, 0xca, 0x6c, 0x98, + 0x54, 0x69, 0xc9, 0x87, 0x30, 0x2d, 0x43, 0x78, 0x71, 0x17, 0x6c, 0xf1, 0xa8, 0x24, 0x8d, 0x13, + 0x64, 0x08, 0x2f, 0xd5, 0x65, 0x5b, 0xc3, 0x57, 0x77, 0xea, 0x8e, 0x8a, 0x6c, 0xfc, 0xf1, 0x28, + 0x5f, 0x07, 0x22, 0x16, 0xdf, 0x2e, 0x4c, 0x6f, 0x96, 0x4b, 0x45, 0x45, 0xf1, 0xa5, 0xa7, 0x5d, + 0x58, 0x7d, 0xe4, 0x53, 0xb7, 0x6d, 0x35, 0x05, 0xc2, 0x51, 0x78, 0x36, 0x38, 0x76, 0xa3, 0x9e, + 0xac, 0x14, 0x8b, 0x70, 0x64, 0x75, 0xf0, 0xcb, 0x4d, 0x50, 0x47, 0x7a, 0xc8, 0x3a, 0x3c, 0xab, + 0xd5, 0xec, 0x51, 0x87, 0xce, 0x91, 0x1c, 0x40, 0xfe, 0x36, 0xca, 0x31, 0x4a, 0x2d, 0x99, 0xfe, + 0xb5, 0x5c, 0x14, 0xb5, 0x3c, 0xcf, 0x05, 0xa0, 0xe4, 0x7a, 0x62, 0x5c, 0xc3, 0x0f, 0x38, 0x3b, + 0xf0, 0x03, 0xfe, 0x91, 0x14, 0x8c, 0x72, 0x41, 0x49, 0xac, 0xaf, 0x1e, 0xa2, 0xd8, 0xce, 0xd3, + 0x11, 0xc5, 0xf2, 0xb8, 0x81, 0x6b, 0x2b, 0x8d, 0x97, 0x91, 0x52, 0x64, 0xc1, 0x4a, 0x13, 0x45, + 0x54, 0x61, 0xf3, 0x92, 0xc1, 0xeb, 0x95, 0x94, 0x43, 0xd7, 0xdc, 0xb1, 0x81, 0xde, 0x5f, 0xd2, + 0x9d, 0x79, 0x4c, 0xb8, 0xe6, 0xea, 0x0e, 0xb9, 0xeb, 0x30, 0x2e, 0x1c, 0x7e, 0x57, 0x8e, 0xc4, + 0x43, 0x55, 0x5e, 0x7b, 0x06, 0x6f, 0xac, 0x1c, 0x85, 0x42, 0xa0, 0x70, 0x19, 0xae, 0xed, 0x1e, + 0x69, 0x89, 0xac, 0x24, 0x22, 0xd9, 0xe4, 0x09, 0x5e, 0x78, 0xb4, 0x42, 0x3d, 0x94, 0x70, 0x00, + 0x17, 0xa1, 0x44, 0xa4, 0xd7, 0x60, 0x42, 0x70, 0xc2, 0x90, 0x07, 0x59, 0x87, 0xbc, 0x48, 0x7c, + 0xcf, 0xed, 0x28, 0xca, 0x25, 0xee, 0x54, 0x2a, 0xcc, 0xdf, 0x64, 0xda, 0x7c, 0x61, 0x81, 0xa1, + 0xfb, 0x73, 0xc4, 0x28, 0x8d, 0x9f, 0x48, 0x41, 0x3e, 0xba, 0xfa, 0xc8, 0xbb, 0x30, 0x11, 0x44, + 0x8b, 0x0c, 0x3c, 0xca, 0x50, 0x61, 0x1d, 0x86, 0x97, 0xd4, 0x7c, 0xcb, 0x54, 0x74, 0xb2, 0x0c, + 0x39, 0xf6, 0x11, 0x47, 0x53, 0x68, 0x75, 0x05, 0x4c, 0x35, 0x13, 0x97, 0x78, 0xca, 0x76, 0xf3, + 0x07, 0x69, 0x98, 0x50, 0xa6, 0x9e, 0x5c, 0x81, 0x5c, 0xd9, 0x5b, 0x77, 0xea, 0x87, 0x41, 0x58, + 0xa8, 0xa9, 0xc7, 0xc7, 0x4b, 0xe3, 0xb6, 0x57, 0x6b, 0x22, 0xd0, 0x0c, 0x8a, 0xc9, 0x0a, 0x4c, + 0xf1, 0xbf, 0x64, 0x70, 0xec, 0x74, 0x68, 0x98, 0xc6, 0x91, 0x65, 0x58, 0x6c, 0x75, 0x0b, 0xd2, + 0x48, 0xc8, 0x57, 0x00, 0x38, 0x00, 0x1d, 0x09, 0x33, 0xc3, 0xbb, 0x40, 0x8a, 0x0a, 0x12, 0x5c, + 0x08, 0x15, 0x86, 0xe4, 0x6b, 0x3c, 0x10, 0xa4, 0x5c, 0xaa, 0xd9, 0xe1, 0x7d, 0x38, 0x19, 0xff, + 0x5a, 0xb2, 0x2b, 0xb9, 0xca, 0x52, 0x44, 0xb0, 0x5b, 0x34, 0x69, 0xdd, 0x79, 0x40, 0xdd, 0xa3, + 0x82, 0x8f, 0x88, 0x0a, 0x86, 0xf1, 0x5f, 0xa5, 0x94, 0x05, 0x4e, 0x36, 0x30, 0x41, 0x1b, 0x9f, + 0x3c, 0x61, 0x5e, 0x11, 0xc8, 0xdd, 0x12, 0x6e, 0xd2, 0xbd, 0x95, 0xe7, 0x85, 0x5d, 0xe4, 0x5c, + 0xb0, 0x04, 0x22, 0x89, 0xdb, 0x38, 0x90, 0x7c, 0x01, 0xb2, 0x38, 0x74, 0x83, 0xf3, 0xf9, 0xcb, + 0xa3, 0x2f, 0xcb, 0xc6, 0x0c, 0x3b, 0x82, 0x94, 0xe4, 0x33, 0xc2, 0x09, 0x8b, 0x0f, 0xfe, 0xb4, + 0x72, 0x7e, 0xb1, 0x76, 0x04, 0x67, 0x5e, 0x18, 0x4d, 0x40, 0x59, 0x3d, 0x7f, 0x3d, 0x0d, 0xf9, + 0xe8, 0x67, 0x45, 0x3e, 0x80, 0x49, 0x79, 0x28, 0x61, 0x06, 0x5f, 0xd6, 0xcb, 0x49, 0x11, 0xad, + 0x59, 0x9e, 0x4c, 0xd1, 0x04, 0xbe, 0x2a, 0x01, 0x13, 0x10, 0xb6, 0x44, 0x74, 0x1f, 0x65, 0x41, + 0xfb, 0x8e, 0xdf, 0x89, 0xc4, 0x12, 0x94, 0x68, 0xe4, 0x4d, 0xc8, 0xdc, 0xbb, 0x55, 0x10, 0x16, + 0xff, 0x72, 0xf7, 0xb8, 0x77, 0xab, 0xc0, 0x3f, 0x3c, 0x6e, 0xd1, 0xa4, 0xdb, 0x57, 0x31, 0x7c, + 0xb2, 0xae, 0x84, 0xea, 0x1c, 0xd5, 0xd2, 0xe9, 0x48, 0x70, 0xd0, 0xb9, 0xc1, 0x31, 0x3b, 0x79, + 0x6a, 0x60, 0x11, 0x10, 0xef, 0xdf, 0xce, 0xc0, 0x78, 0x50, 0x3f, 0x21, 0x80, 0xf2, 0x8f, 0xb8, + 0x74, 0xe0, 0xdf, 0xe4, 0x2c, 0xe4, 0xa4, 0xc8, 0x23, 0x0c, 0xff, 0xc7, 0x3c, 0x21, 0xee, 0x2c, + 0x80, 0x94, 0x6d, 0xb8, 0xb8, 0x63, 0xca, 0x9f, 0xe4, 0x3a, 0x04, 0x82, 0x4b, 0x2f, 0x09, 0x27, + 0xcb, 0x26, 0xcc, 0x0c, 0xd0, 0xc8, 0x34, 0xa4, 0x6d, 0x1e, 0x64, 0x65, 0xdc, 0x4c, 0xdb, 0x0d, + 0xf2, 0x01, 0xe4, 0xac, 0x46, 0x83, 0x36, 0x6a, 0x96, 0xb4, 0x53, 0xe8, 0xb7, 0x68, 0x72, 0x8c, + 0x1b, 0xdf, 0xaf, 0x91, 0xaa, 0xe0, 0x93, 0x02, 0x8c, 0x37, 0x2d, 0x6e, 0xf3, 0xd4, 0x18, 0x62, + 0xf3, 0x0f, 0x39, 0xe4, 0x18, 0xd9, 0xb6, 0x47, 0x1b, 0xe4, 0x15, 0xc8, 0xb2, 0xd9, 0x14, 0xbb, + 0xbd, 0x94, 0xb4, 0xd8, 0x64, 0xf2, 0x01, 0x5b, 0x7b, 0xce, 0x44, 0x04, 0xf2, 0x12, 0x64, 0xba, + 0xcb, 0x7b, 0x62, 0x1f, 0xcf, 0x87, 0x61, 0x73, 0x03, 0x34, 0x56, 0x4c, 0x6e, 0x40, 0xee, 0xa1, + 0x1e, 0x71, 0xf5, 0x54, 0x64, 0x1a, 0x03, 0xfc, 0x00, 0x71, 0x25, 0x07, 0xa3, 0x7c, 0xcf, 0x36, + 0x5e, 0x00, 0x08, 0xab, 0x8e, 0xfb, 0x67, 0x18, 0x5f, 0x81, 0xf1, 0xa0, 0x4a, 0x72, 0x1e, 0xe0, + 0x90, 0x1e, 0xd5, 0x0e, 0xac, 0x76, 0xa3, 0xc9, 0x45, 0xb1, 0x49, 0x73, 0xfc, 0x90, 0x1e, 0xad, + 0x21, 0x80, 0x9c, 0x81, 0xb1, 0x0e, 0x9b, 0x55, 0xb1, 0x74, 0x27, 0xcd, 0xd1, 0x4e, 0x77, 0x97, + 0xad, 0xd0, 0x05, 0x18, 0x43, 0x25, 0x99, 0xf8, 0xd0, 0xa6, 0x4c, 0xf9, 0xd3, 0xf8, 0x8f, 0xd3, + 0x98, 0x19, 0x40, 0x69, 0x27, 0xb9, 0x08, 0x53, 0x75, 0x97, 0xe2, 0xf1, 0x60, 0x31, 0xa1, 0x47, + 0xd4, 0x33, 0x19, 0x02, 0xcb, 0x0d, 0x72, 0x09, 0x66, 0x44, 0x36, 0x6c, 0xd6, 0xa0, 0xfa, 0xae, + 0x08, 0x8f, 0x3c, 0x69, 0x4e, 0x71, 0xf0, 0x5d, 0x7a, 0x54, 0xdc, 0xc5, 0xe0, 0x40, 0x79, 0x35, + 0xb6, 0xa3, 0x1f, 0x24, 0x31, 0x34, 0x67, 0x14, 0x38, 0x9a, 0x1f, 0x9d, 0x86, 0x51, 0xcb, 0xda, + 0xef, 0xda, 0x3c, 0x88, 0xc7, 0xa4, 0x29, 0x7e, 0x91, 0xd7, 0x60, 0xd6, 0xb3, 0xf7, 0xdb, 0x96, + 0xdf, 0x75, 0x45, 0x6a, 0x06, 0xea, 0xe2, 0x92, 0x9a, 0x32, 0xf3, 0x41, 0x41, 0x91, 0xc3, 0xc9, + 0x1b, 0x40, 0xd4, 0xfa, 0x9c, 0xdd, 0x8f, 0x69, 0x9d, 0x2f, 0xb5, 0x49, 0x73, 0x56, 0x29, 0xd9, + 0xc4, 0x02, 0xf2, 0x22, 0x4c, 0xba, 0xd4, 0x43, 0x81, 0x0b, 0x87, 0x0d, 0x13, 0xe7, 0x98, 0x13, + 0x12, 0xc6, 0xc6, 0xee, 0x32, 0xe4, 0x95, 0xe1, 0xc0, 0xf0, 0x99, 0x3c, 0x36, 0xb0, 0x39, 0x1d, + 0xc2, 0xcd, 0x4e, 0xb9, 0x61, 0xac, 0xc0, 0x6c, 0xec, 0xcb, 0x55, 0x12, 0xcf, 0xf2, 0x9d, 0xa8, + 0x7f, 0xe2, 0x59, 0xa3, 0x0d, 0x93, 0xea, 0x4e, 0x3c, 0x20, 0x44, 0xf5, 0x69, 0x74, 0x02, 0xe7, + 0xdb, 0xd4, 0xe8, 0xe3, 0xe3, 0xa5, 0xb4, 0xdd, 0x40, 0xd7, 0xef, 0xcb, 0x90, 0x93, 0xe7, 0xbb, + 0xb8, 0xb3, 0xa0, 0x92, 0x53, 0x08, 0x96, 0x47, 0x66, 0x50, 0x6a, 0xbc, 0x02, 0x63, 0x62, 0xb3, + 0xed, 0xaf, 0xda, 0x34, 0x7e, 0x38, 0x0d, 0x33, 0x26, 0x65, 0x5b, 0x01, 0xe5, 0x71, 0xe9, 0x9f, + 0xd9, 0x9b, 0x56, 0x72, 0x28, 0x31, 0xad, 0x6f, 0x7d, 0x22, 0xc2, 0xff, 0x52, 0x0a, 0xe6, 0x12, + 0x70, 0x3f, 0x51, 0xf6, 0xb2, 0x9b, 0x30, 0x5e, 0xb2, 0xad, 0x66, 0xa1, 0xd1, 0x08, 0x3c, 0xc2, + 0x51, 0x2a, 0x6c, 0xb0, 0x95, 0x66, 0x31, 0xa8, 0x7a, 0xec, 0x06, 0xa8, 0xe4, 0x55, 0xb1, 0x28, + 0xc2, 0xcc, 0xd1, 0xb8, 0x28, 0xbe, 0x7b, 0xbc, 0x04, 0xbc, 0x4d, 0x61, 0x86, 0x4c, 0x0c, 0xef, + 0xc7, 0x81, 0xa1, 0xc5, 0xf6, 0x33, 0x3b, 0x75, 0xc9, 0xe1, 0xfd, 0xa2, 0xdd, 0x1b, 0x2a, 0x28, + 0xfc, 0x4f, 0xa4, 0xe1, 0x74, 0x32, 0xe1, 0x27, 0x4d, 0x44, 0x87, 0xe1, 0xf8, 0x95, 0x90, 0xa4, + 0x98, 0x88, 0x8e, 0xc7, 0xee, 0x47, 0xfc, 0x10, 0x81, 0xec, 0xc1, 0xd4, 0xba, 0xe5, 0xf9, 0x6b, + 0xd4, 0x72, 0xfd, 0x5d, 0x6a, 0xf9, 0x43, 0xc8, 0x9e, 0x2f, 0xc9, 0x17, 0x44, 0x3c, 0xfe, 0x0e, + 0x24, 0x65, 0x44, 0x3a, 0xd4, 0xd9, 0x06, 0x0b, 0x25, 0x3b, 0xc4, 0x42, 0xf9, 0x3a, 0xcc, 0x54, + 0x69, 0xcb, 0xea, 0x1c, 0x38, 0xae, 0x74, 0xf9, 0xbb, 0x0a, 0x53, 0x01, 0x28, 0x71, 0xb5, 0xe8, + 0xc5, 0x1a, 0xbe, 0x32, 0x10, 0xe1, 0x56, 0xa2, 0x17, 0x1b, 0x7f, 0x23, 0x0d, 0x67, 0x0a, 0x75, + 0x61, 0xd8, 0x23, 0x0a, 0xa4, 0xfd, 0xe1, 0xa7, 0x5c, 0x37, 0xb9, 0x06, 0xe3, 0xf7, 0xac, 0x47, + 0xeb, 0xd4, 0xf2, 0xa8, 0x27, 0xd2, 0x00, 0x71, 0x41, 0xcd, 0x7a, 0x14, 0xda, 0xbb, 0x98, 0x21, + 0x8e, 0x7a, 0xe9, 0xcc, 0x3e, 0xe1, 0xa5, 0xd3, 0x80, 0xd1, 0x35, 0xa7, 0xd9, 0x10, 0xc7, 0x98, + 0x78, 0x09, 0x3b, 0x40, 0x88, 0x29, 0x4a, 0x8c, 0x3f, 0x4a, 0xc1, 0x74, 0xd0, 0x62, 0x6c, 0xc2, + 0xa7, 0x3e, 0x24, 0x97, 0x60, 0x0c, 0x2b, 0x2a, 0x97, 0xd4, 0x43, 0xa3, 0x49, 0x31, 0x99, 0x4b, + 0xc3, 0x94, 0x85, 0xea, 0x48, 0x8c, 0x3c, 0xd9, 0x48, 0x18, 0xff, 0x0e, 0x3e, 0xb2, 0xa9, 0xbd, + 0x64, 0x27, 0x91, 0xd2, 0x90, 0xd4, 0x90, 0x0d, 0x49, 0x3f, 0xb5, 0x29, 0xc9, 0xf4, 0x9c, 0x92, + 0x6f, 0xa6, 0x61, 0x22, 0x68, 0xec, 0xf7, 0x58, 0x5c, 0xdc, 0xa0, 0x5f, 0x43, 0xb9, 0xe9, 0x57, + 0x95, 0xbd, 0x42, 0x78, 0xc3, 0x7f, 0x01, 0x46, 0xc5, 0xc7, 0x94, 0x8a, 0xd8, 0xe1, 0x45, 0x66, + 0x77, 0x65, 0x5a, 0xb0, 0x1e, 0xc5, 0x09, 0xf5, 0x4c, 0x41, 0x87, 0x71, 0x10, 0x76, 0xe8, 0xae, + 0x78, 0x73, 0x7d, 0x66, 0xcf, 0xa8, 0xe4, 0x38, 0x08, 0x61, 0xc7, 0x86, 0x3a, 0x9d, 0xbe, 0x35, + 0x06, 0xf9, 0x28, 0xc9, 0xe0, 0xc8, 0xc3, 0x95, 0xee, 0x2e, 0x97, 0xc2, 0x79, 0xe4, 0xe1, 0x4e, + 0x77, 0xd7, 0x64, 0x30, 0x34, 0xc9, 0x70, 0xed, 0x07, 0xd8, 0xeb, 0x49, 0x61, 0x92, 0xe1, 0xda, + 0x0f, 0x34, 0x93, 0x0c, 0xd7, 0x7e, 0x80, 0x57, 0xdf, 0xf5, 0x2a, 0xba, 0x6e, 0xa2, 0x08, 0x2e, + 0xae, 0xbe, 0x4d, 0x2f, 0x9a, 0xb1, 0x43, 0xa2, 0xb1, 0xa3, 0x72, 0x85, 0x5a, 0xae, 0x88, 0x92, + 0x2b, 0xb6, 0x33, 0x3c, 0x2a, 0x77, 0x11, 0xcc, 0x93, 0xe1, 0x9a, 0x2a, 0x12, 0x69, 0x02, 0x51, + 0x7e, 0xca, 0x0f, 0x78, 0xf0, 0x6d, 0x50, 0xda, 0xd0, 0xcc, 0xab, 0xac, 0x6b, 0xea, 0xd7, 0x9c, + 0xc0, 0xf7, 0x69, 0xea, 0x0a, 0x2b, 0x22, 0xf4, 0x17, 0xaa, 0x3c, 0x72, 0x03, 0x99, 0x49, 0xdf, + 0x66, 0xe0, 0xa1, 0xc1, 0x02, 0xc5, 0x47, 0xc8, 0x84, 0xbc, 0x0f, 0x13, 0xaa, 0x43, 0x2e, 0x77, + 0x1b, 0x3d, 0xc7, 0xa3, 0x39, 0xf5, 0xc8, 0xc7, 0xa6, 0x12, 0x90, 0x5d, 0x38, 0x53, 0x74, 0xda, + 0x5e, 0xb7, 0x25, 0xe3, 0x46, 0x85, 0xd1, 0x2a, 0x21, 0xc8, 0xa7, 0xfe, 0x52, 0x5d, 0xa0, 0x08, + 0xff, 0x4f, 0x69, 0xe4, 0xac, 0x5f, 0x40, 0x7a, 0x31, 0x22, 0x5b, 0x30, 0x51, 0x2d, 0xdc, 0x5b, + 0x97, 0x4e, 0x95, 0x13, 0xfa, 0xb6, 0x11, 0x96, 0x94, 0xd8, 0x87, 0xc1, 0x03, 0x9f, 0x58, 0xad, + 0xa6, 0xb4, 0xb1, 0x55, 0xf5, 0x86, 0x0a, 0x32, 0xf9, 0x0a, 0x4c, 0xf3, 0xeb, 0xe6, 0x0e, 0xdd, + 0xe5, 0x6b, 0x67, 0x52, 0xbb, 0x3b, 0xeb, 0x85, 0xfc, 0x4d, 0x56, 0x68, 0x39, 0x1f, 0xd2, 0x5d, + 0x3e, 0xf7, 0x9a, 0x85, 0xbb, 0x86, 0x4f, 0xb6, 0x61, 0x6e, 0xcd, 0xf2, 0x38, 0x50, 0xf1, 0xac, + 0x9c, 0x42, 0x9d, 0x22, 0x5a, 0x1e, 0x1e, 0x58, 0x9e, 0x54, 0x9b, 0x26, 0x7a, 0x52, 0x26, 0xd1, + 0x1b, 0x37, 0xa3, 0xad, 0x16, 0x0a, 0x8e, 0x54, 0xa0, 0xe0, 0x98, 0x87, 0x11, 0x6c, 0x9b, 0x0c, + 0xa7, 0x80, 0x3f, 0x8c, 0xcf, 0xa8, 0x5f, 0xb3, 0x10, 0xae, 0xfa, 0x7e, 0xcd, 0xc6, 0x7f, 0x3e, + 0x0a, 0x33, 0x91, 0xc1, 0x15, 0xb7, 0xbd, 0x54, 0xec, 0xb6, 0x57, 0x05, 0xe0, 0x2a, 0xbe, 0x21, + 0x75, 0x71, 0xd2, 0x19, 0x65, 0x42, 0x38, 0x73, 0x05, 0x2b, 0x53, 0x61, 0xc3, 0x98, 0xf2, 0x75, + 0x3f, 0xa4, 0x6e, 0x34, 0x60, 0xca, 0x3f, 0x1d, 0x85, 0x69, 0xc8, 0x86, 0x2c, 0xc1, 0x08, 0xc6, + 0x40, 0x53, 0x7d, 0x81, 0x6c, 0x06, 0x30, 0x39, 0x9c, 0x5c, 0x84, 0x51, 0x26, 0x8a, 0x94, 0x4b, + 0x62, 0x2b, 0xc1, 0x1d, 0x9a, 0xc9, 0x2a, 0xec, 0xdc, 0x17, 0x45, 0xe4, 0x26, 0x4c, 0xf2, 0xbf, + 0x84, 0x1b, 0xfc, 0xa8, 0x6e, 0xda, 0x54, 0xb3, 0x1b, 0xd2, 0x13, 0x5e, 0xc3, 0x63, 0x32, 0x7a, + 0xb5, 0xbb, 0xcb, 0x93, 0xb1, 0x8b, 0xa0, 0x99, 0x28, 0xa3, 0x7b, 0x1c, 0x88, 0xc9, 0xa2, 0x03, + 0x04, 0x26, 0x11, 0x08, 0x8b, 0xdc, 0x1c, 0xde, 0xcc, 0x50, 0x22, 0xe0, 0x96, 0xb8, 0xa6, 0x28, + 0x21, 0x57, 0xb8, 0xf6, 0x1b, 0x85, 0x2b, 0x9e, 0xe7, 0x07, 0xf5, 0xd5, 0x78, 0xbd, 0x47, 0x09, + 0x2b, 0x28, 0x66, 0x95, 0xb3, 0xbf, 0x57, 0x5b, 0x96, 0xdd, 0x14, 0x1f, 0x27, 0x56, 0x8e, 0xb8, + 0x94, 0x41, 0xcd, 0x10, 0x81, 0xbc, 0x0b, 0xd3, 0xec, 0x47, 0xd1, 0x69, 0xb5, 0x9c, 0x36, 0xb2, + 0x9f, 0x08, 0x23, 0xaa, 0x20, 0x49, 0x1d, 0x8b, 0x78, 0x2d, 0x11, 0x5c, 0xb6, 0x2b, 0xe3, 0xcb, + 0x5a, 0x97, 0xeb, 0xe5, 0x27, 0xc3, 0x5d, 0x19, 0x49, 0x3d, 0x0e, 0x37, 0x55, 0x24, 0xf2, 0x16, + 0x4c, 0xb1, 0x9f, 0xb7, 0xed, 0x07, 0x94, 0x57, 0x38, 0x15, 0xbe, 0xf5, 0x22, 0xd5, 0x3e, 0x2b, + 0xe1, 0xf5, 0xe9, 0x98, 0xe4, 0x8b, 0x70, 0x0a, 0x39, 0xd5, 0x9d, 0x0e, 0x6d, 0x14, 0xf6, 0xf6, + 0xec, 0xa6, 0xcd, 0x6d, 0x4d, 0xb8, 0xc3, 0x37, 0xea, 0x5e, 0x79, 0xc5, 0x88, 0x51, 0xb3, 0x42, + 0x14, 0x33, 0x99, 0x92, 0xec, 0x40, 0xbe, 0xd8, 0xf5, 0x7c, 0xa7, 0x55, 0xf0, 0x7d, 0xd7, 0xde, + 0xed, 0xfa, 0xd4, 0x5b, 0x98, 0xd1, 0xdc, 0xa2, 0xd9, 0xc7, 0x11, 0x14, 0x72, 0xad, 0x4a, 0x1d, + 0x29, 0x6a, 0x56, 0x40, 0x62, 0xc6, 0x98, 0x18, 0xff, 0x2c, 0x05, 0x53, 0x1a, 0x29, 0x79, 0x13, + 0x26, 0x6f, 0xb9, 0x36, 0x6d, 0x37, 0x9a, 0x47, 0xca, 0x75, 0x0f, 0xef, 0x02, 0x7b, 0x02, 0xce, + 0x7b, 0xad, 0xa1, 0x05, 0xda, 0x92, 0x74, 0xa2, 0x21, 0xd8, 0x35, 0xee, 0x92, 0x26, 0x16, 0x68, + 0x26, 0x8c, 0xd3, 0x80, 0x0b, 0x54, 0xac, 0x4e, 0x05, 0x85, 0xbc, 0x07, 0xa3, 0xfc, 0x0d, 0x4e, + 0x58, 0x25, 0x9d, 0x4d, 0xea, 0x26, 0x77, 0x7f, 0xc4, 0x85, 0x88, 0x16, 0x10, 0x9e, 0x29, 0x88, + 0x8c, 0x9f, 0x49, 0x01, 0x89, 0xa3, 0x0e, 0xd0, 0x1e, 0x0d, 0xb4, 0xac, 0xf8, 0x42, 0xf0, 0x35, + 0x66, 0x34, 0x5d, 0x29, 0xab, 0x89, 0x17, 0xf0, 0x81, 0x17, 0x5f, 0x9d, 0xaa, 0xce, 0xe2, 0xc5, + 0xc6, 0x5f, 0x49, 0x03, 0x84, 0xd8, 0xe4, 0xf3, 0x3c, 0xd5, 0xc4, 0x17, 0xbb, 0x56, 0xd3, 0xde, + 0xb3, 0xf5, 0xd8, 0x6b, 0xc8, 0xe4, 0xeb, 0xb2, 0xc4, 0xd4, 0x11, 0xc9, 0x07, 0x30, 0x53, 0xad, + 0xe8, 0xb4, 0x4a, 0x58, 0x7d, 0xaf, 0x53, 0x8b, 0x90, 0x47, 0xb1, 0xd1, 0xfa, 0x50, 0x9d, 0x0d, + 0x6e, 0x7d, 0xc8, 0x27, 0x42, 0x94, 0xb0, 0x8d, 0xa5, 0x5a, 0x11, 0x06, 0xaf, 0x8d, 0x72, 0x49, + 0xec, 0x52, 0xd8, 0x3a, 0xaf, 0x53, 0xeb, 0x08, 0x4b, 0x58, 0xb6, 0x4f, 0x68, 0x78, 0xe1, 0x40, + 0x8e, 0xf4, 0x70, 0x71, 0xfc, 0x59, 0x54, 0x9e, 0xb5, 0x1c, 0x9f, 0x0a, 0x9d, 0xc1, 0x33, 0x7b, + 0x7b, 0x08, 0x1f, 0x70, 0x47, 0x34, 0xcf, 0x2d, 0xad, 0x77, 0xc2, 0x7c, 0xe0, 0x46, 0x28, 0xea, + 0xf3, 0xa7, 0xdc, 0x04, 0x83, 0x83, 0xbf, 0x93, 0x82, 0x53, 0x89, 0xb4, 0xe4, 0x2a, 0x40, 0xa8, + 0x99, 0x11, 0xa3, 0xc4, 0x73, 0xfb, 0x07, 0x50, 0x53, 0xc1, 0x20, 0x5f, 0x8e, 0xea, 0x54, 0x06, + 0x1f, 0x84, 0x8b, 0x32, 0xfa, 0x8c, 0xae, 0x53, 0x49, 0xd0, 0xa4, 0x18, 0xbf, 0x94, 0x81, 0x59, + 0x25, 0xf8, 0x01, 0x6f, 0xeb, 0x00, 0x6b, 0xd0, 0x43, 0x98, 0x64, 0xbd, 0xb1, 0xeb, 0xc2, 0x7d, + 0x84, 0x1b, 0x1b, 0xbc, 0x1a, 0xf3, 0xbd, 0x11, 0xdc, 0xae, 0xaa, 0xc8, 0x3c, 0x26, 0x14, 0x6e, + 0x9d, 0xa8, 0xb1, 0xae, 0xc7, 0xdd, 0x48, 0x34, 0xe6, 0xc4, 0x83, 0xa9, 0xd2, 0x51, 0xdb, 0x6a, + 0x05, 0xb5, 0x71, 0xa3, 0x83, 0xd7, 0x7a, 0xd6, 0xa6, 0x61, 0xf3, 0xea, 0x42, 0x2b, 0x75, 0x5e, + 0x96, 0xe0, 0x20, 0xa9, 0x51, 0x2d, 0x7e, 0x00, 0xb3, 0xb1, 0x46, 0x9f, 0x28, 0x3c, 0xd5, 0x0e, + 0x90, 0x78, 0x3b, 0x12, 0x38, 0xbc, 0xa6, 0x07, 0x3f, 0x3b, 0x15, 0x3c, 0x5a, 0x62, 0x92, 0x5a, + 0x6e, 0xc2, 0xb0, 0xac, 0x06, 0xaf, 0xfa, 0xd9, 0xb4, 0xea, 0xff, 0xf4, 0xac, 0x7f, 0x75, 0x5f, + 0xd0, 0xee, 0x94, 0x2f, 0xf4, 0x9a, 0xd3, 0xa1, 0xee, 0xee, 0xdf, 0xc9, 0xc0, 0x99, 0x1e, 0x94, + 0xe4, 0x28, 0xba, 0x88, 0xf8, 0x5d, 0xfe, 0x7a, 0xff, 0x0a, 0x9f, 0xc6, 0x52, 0x22, 0x9f, 0xe7, + 0x1e, 0xd0, 0x75, 0x4c, 0xae, 0x2a, 0x6e, 0xb1, 0x3c, 0x2f, 0x77, 0x00, 0x8d, 0xba, 0x3e, 0x73, + 0x28, 0xf9, 0x00, 0x46, 0xd0, 0xf9, 0x2d, 0x12, 0x7c, 0x89, 0x61, 0x20, 0x5c, 0x89, 0x54, 0xc5, + 0x7e, 0x6a, 0x91, 0xaa, 0x18, 0x80, 0x7c, 0x0e, 0x32, 0x85, 0x9d, 0xaa, 0x98, 0x97, 0x69, 0x95, + 0x7c, 0xa7, 0x1a, 0x06, 0xc8, 0xb6, 0xb4, 0x48, 0xd6, 0x8c, 0x82, 0x11, 0xde, 0x2e, 0x56, 0xc4, + 0xac, 0xa8, 0x84, 0xb7, 0x8b, 0x95, 0x90, 0x70, 0xbf, 0xae, 0x05, 0xb3, 0xb8, 0x5d, 0xac, 0x7c, + 0x7a, 0xcb, 0xfe, 0xaf, 0xa6, 0xb9, 0xdb, 0x36, 0xef, 0xd8, 0x07, 0x30, 0xa9, 0x05, 0xa7, 0x4c, + 0x85, 0xf2, 0x58, 0x10, 0x03, 0x34, 0x62, 0xa5, 0xa1, 0x11, 0xc8, 0x50, 0xf3, 0xec, 0x37, 0x4a, + 0xbc, 0xaa, 0x91, 0x45, 0xc0, 0x01, 0x65, 0xe2, 0x68, 0xa8, 0xf9, 0x80, 0x84, 0xdc, 0x80, 0xdc, + 0x16, 0x6d, 0x5b, 0x6d, 0x3f, 0x50, 0x2b, 0xa2, 0xa5, 0xa5, 0x8f, 0x30, 0x5d, 0x6a, 0x08, 0x10, + 0xd1, 0x2a, 0xb0, 0xbb, 0xeb, 0xd5, 0x5d, 0x1b, 0xc3, 0x3b, 0x04, 0x67, 0x31, 0xb7, 0x0a, 0x54, + 0x4a, 0x74, 0x06, 0x11, 0x22, 0xe3, 0x67, 0x53, 0x30, 0x26, 0x26, 0x92, 0xa7, 0x08, 0xd9, 0x0f, + 0xcf, 0x12, 0x91, 0x22, 0x64, 0xdf, 0x8e, 0xa6, 0x08, 0xd9, 0xe7, 0x31, 0x14, 0xc6, 0x85, 0x07, + 0x62, 0xf0, 0xc0, 0xc6, 0x33, 0x4a, 0x73, 0xa0, 0x5e, 0x6d, 0x88, 0x3a, 0xac, 0xbb, 0x85, 0xf1, + 0xb7, 0x44, 0xcb, 0x6e, 0x17, 0x2b, 0x64, 0x19, 0x72, 0xeb, 0x4e, 0xdd, 0x52, 0xce, 0x39, 0xdc, + 0x76, 0x9a, 0x02, 0xa6, 0x0e, 0x90, 0xc4, 0x63, 0xed, 0xab, 0xb8, 0x8e, 0xb8, 0xcb, 0x28, 0xed, + 0xeb, 0x70, 0x60, 0xa4, 0x7d, 0x01, 0xea, 0xd0, 0xed, 0xa3, 0x09, 0x9b, 0xc4, 0xfd, 0x1b, 0x18, + 0x83, 0xfb, 0x8e, 0xea, 0xc6, 0x22, 0x8a, 0xe4, 0x4e, 0xb1, 0xd8, 0x6b, 0xa7, 0xb8, 0x7f, 0xc3, + 0x4c, 0xa0, 0xc2, 0xd7, 0xa9, 0x10, 0x5c, 0xa5, 0xee, 0x83, 0x67, 0x78, 0x97, 0x4e, 0x7e, 0x9d, + 0x8a, 0x76, 0x6f, 0xa8, 0x4d, 0xfa, 0x3f, 0x4d, 0xc3, 0xe9, 0x64, 0x42, 0xb5, 0x2f, 0xa9, 0x3e, + 0x7d, 0xb9, 0x0c, 0xb9, 0x35, 0xc7, 0xf3, 0x15, 0xc3, 0x2c, 0x54, 0xa2, 0x1f, 0x08, 0x98, 0x19, + 0x94, 0xb2, 0x3b, 0x37, 0xfb, 0x3b, 0xf8, 0x3c, 0x91, 0x1f, 0x3a, 0x2b, 0xb3, 0x3b, 0x37, 0x2f, + 0x22, 0xb7, 0x21, 0x67, 0x0a, 0x37, 0x8a, 0xc8, 0xd0, 0x48, 0x70, 0x20, 0x4d, 0x11, 0x57, 0x40, + 0xb4, 0x18, 0xa1, 0x02, 0x46, 0x0a, 0x30, 0x26, 0x66, 0x3f, 0xf2, 0x00, 0x9b, 0xb0, 0x64, 0xf4, + 0xb0, 0xbd, 0x92, 0x8e, 0xed, 0x28, 0xf8, 0x94, 0x56, 0x2e, 0x49, 0x8f, 0x08, 0xdc, 0x51, 0xf8, + 0x53, 0x9b, 0x6e, 0x03, 0x17, 0x20, 0x1a, 0x3f, 0x9c, 0x06, 0x90, 0x5a, 0x9b, 0x67, 0x76, 0x85, + 0x7d, 0x4e, 0x5b, 0x61, 0x8a, 0x9d, 0xc9, 0xf0, 0x29, 0xed, 0x36, 0xd1, 0xde, 0x63, 0xf8, 0x84, + 0x76, 0x4b, 0x30, 0xb2, 0x15, 0x2a, 0xb4, 0x84, 0x7d, 0x3e, 0x2a, 0x75, 0x39, 0xdc, 0xd8, 0x85, + 0xf9, 0xdb, 0xd4, 0x0f, 0xd5, 0x5b, 0xf2, 0x01, 0xaf, 0x3f, 0xdb, 0xd7, 0x61, 0x5c, 0xe0, 0x07, + 0xfb, 0x17, 0xd7, 0xc5, 0x08, 0xff, 0x7f, 0xd4, 0xc5, 0x48, 0x04, 0xb6, 0x1b, 0x95, 0x68, 0x93, + 0xfa, 0xf4, 0xd3, 0xad, 0xa6, 0x0a, 0x84, 0x77, 0x05, 0x7b, 0x36, 0x5c, 0x0d, 0x03, 0xc7, 0xe7, + 0x3e, 0x9c, 0x0a, 0xda, 0xfe, 0x34, 0xf9, 0x5e, 0x63, 0x57, 0x4a, 0x11, 0xf1, 0x36, 0xe4, 0xd8, + 0xc7, 0x82, 0xe3, 0x11, 0x2c, 0x4a, 0x82, 0x1d, 0x3b, 0x30, 0x98, 0x1b, 0x8a, 0x96, 0xbc, 0x0b, + 0x13, 0x0a, 0x8d, 0x88, 0xd8, 0x8a, 0xca, 0xde, 0x87, 0xb6, 0x7f, 0x50, 0xf3, 0x38, 0x5c, 0x55, + 0xf6, 0x2a, 0xe8, 0xc6, 0x47, 0xf0, 0x7c, 0xe0, 0x43, 0x91, 0x50, 0x75, 0x84, 0x79, 0xea, 0x64, + 0xcc, 0x37, 0xc2, 0x6e, 0x95, 0xdb, 0x81, 0xdf, 0xa3, 0xe4, 0x4d, 0xd4, 0x6e, 0x89, 0xce, 0x9c, + 0x8b, 0x79, 0x52, 0x2a, 0x0e, 0x93, 0xc6, 0x3b, 0x4a, 0x63, 0x13, 0x18, 0x6a, 0xc4, 0xa9, 0x28, + 0xf1, 0x0f, 0xa7, 0x61, 0x66, 0xb3, 0x5c, 0x2a, 0x06, 0x36, 0x3c, 0xdf, 0x63, 0x09, 0xf7, 0xb4, + 0xbe, 0xf5, 0xde, 0x6f, 0x8c, 0x6d, 0x98, 0x8b, 0x0c, 0x03, 0x8a, 0x0e, 0xef, 0x73, 0x23, 0xff, + 0x00, 0x2c, 0xc5, 0x86, 0xd3, 0x49, 0xec, 0xef, 0xdf, 0x30, 0x23, 0xd8, 0xc6, 0x1f, 0xe6, 0x22, + 0x7c, 0xc5, 0x16, 0xf6, 0x3a, 0x8c, 0x97, 0x3d, 0xaf, 0x4b, 0xdd, 0x6d, 0x73, 0x5d, 0x55, 0x15, + 0xd8, 0x08, 0xac, 0x75, 0xdd, 0xa6, 0x19, 0x22, 0x90, 0x2b, 0x90, 0x13, 0x41, 0x4c, 0xe5, 0x9e, + 0x80, 0x5a, 0xdb, 0x20, 0x06, 0xaa, 0x19, 0x14, 0x93, 0x37, 0x61, 0x92, 0xff, 0xcd, 0x57, 0x9b, + 0x18, 0x70, 0x54, 0x0e, 0x0a, 0x74, 0xbe, 0x3a, 0x4d, 0x0d, 0x8d, 0xbc, 0x0a, 0x99, 0x42, 0xd1, + 0x14, 0xea, 0x20, 0x21, 0x37, 0x62, 0x1a, 0xdd, 0x2e, 0xd5, 0x2f, 0x11, 0x45, 0x93, 0x49, 0x7f, + 0xd2, 0xc7, 0x5a, 0x68, 0xb2, 0x79, 0xb6, 0x5f, 0x01, 0x8b, 0x1c, 0x66, 0x08, 0x23, 0xd7, 0x60, + 0xac, 0x64, 0x7b, 0x9d, 0xa6, 0x75, 0x24, 0xf4, 0xd8, 0x3c, 0x9b, 0x0c, 0x07, 0x69, 0xae, 0xd3, + 0x1c, 0x44, 0xae, 0xc8, 0x2c, 0x1b, 0xb9, 0xd0, 0x57, 0xa0, 0x47, 0x2a, 0x8d, 0xd7, 0x61, 0x54, + 0x84, 0xfa, 0x1c, 0x57, 0x82, 0x78, 0x47, 0x43, 0x7c, 0x0a, 0x9c, 0xb8, 0x37, 0x1f, 0x3c, 0x4d, + 0x6f, 0xbe, 0x5d, 0x38, 0x73, 0x1b, 0xb5, 0x37, 0x7a, 0x50, 0x90, 0x6d, 0xb3, 0x2c, 0xf4, 0xe1, + 0xf8, 0xbe, 0xc5, 0x15, 0x3c, 0xd1, 0xb8, 0x22, 0xb5, 0xae, 0xab, 0x26, 0x47, 0xeb, 0xc5, 0x88, + 0x7c, 0x09, 0xe6, 0x93, 0x8a, 0x84, 0xd6, 0x1c, 0xc3, 0x5f, 0x24, 0x57, 0xa0, 0x86, 0xbf, 0x48, + 0xe2, 0x40, 0xd6, 0x21, 0xcf, 0xe1, 0x85, 0x46, 0xcb, 0x6e, 0x73, 0xcd, 0x3f, 0xd7, 0xaa, 0xa3, + 0xf1, 0xbe, 0xe0, 0x6a, 0xb1, 0x42, 0xfe, 0x02, 0xa0, 0xb9, 0x7b, 0x44, 0x28, 0xc9, 0x4f, 0xa5, + 0xd8, 0x6d, 0x8e, 0x07, 0xc6, 0xdc, 0x36, 0xd7, 0x3d, 0x11, 0x3a, 0xe9, 0x74, 0xe8, 0xc9, 0x51, + 0xf5, 0x5d, 0xbb, 0xbd, 0x2f, 0x5c, 0x39, 0xb6, 0x84, 0x2b, 0xc7, 0xbb, 0x9f, 0xc8, 0x95, 0x83, + 0xb3, 0xf2, 0x1e, 0x1f, 0x2f, 0x4d, 0xba, 0xa2, 0x4e, 0xfc, 0x8a, 0xb4, 0x16, 0x60, 0x62, 0xef, + 0x66, 0xd3, 0x79, 0xb8, 0xdd, 0x7e, 0x40, 0x5d, 0x7b, 0xcf, 0xa6, 0x0d, 0xde, 0xc9, 0x19, 0xdc, + 0xc1, 0x79, 0x62, 0x6f, 0x4c, 0x55, 0xdf, 0x0d, 0x10, 0x62, 0x1d, 0x4d, 0xe4, 0xc0, 0x2e, 0x9e, + 0xd2, 0x5d, 0x80, 0xbb, 0x26, 0xe6, 0xc3, 0x8b, 0xa7, 0xf4, 0x2d, 0xa8, 0xe1, 0x32, 0x52, 0x17, + 0x8f, 0x46, 0x42, 0xae, 0xc1, 0xe8, 0x3d, 0xeb, 0x51, 0x61, 0x9f, 0x8a, 0xec, 0x49, 0x53, 0x72, + 0xfb, 0x43, 0xe0, 0x4a, 0xee, 0xf7, 0xb8, 0x8d, 0xfb, 0x73, 0xa6, 0x40, 0x13, 0xc6, 0xd3, 0x9f, + 0x93, 0x64, 0xe4, 0x0d, 0xd5, 0x7d, 0x2d, 0x83, 0x42, 0xe6, 0x58, 0xcb, 0x7a, 0x54, 0xb3, 0xf6, + 0xa9, 0xf6, 0x24, 0x2b, 0x94, 0xbc, 0x7f, 0x7d, 0x9c, 0xef, 0xfd, 0x85, 0xae, 0x7f, 0x20, 0x4f, + 0x8b, 0xe5, 0x24, 0xe7, 0x0a, 0x6e, 0x4a, 0xa6, 0x38, 0x57, 0xe8, 0x2e, 0x15, 0x52, 0x69, 0x9f, + 0x4e, 0x54, 0xda, 0xbf, 0x0e, 0xe3, 0xc5, 0x03, 0x5a, 0x3f, 0x0c, 0xac, 0xe6, 0x73, 0x42, 0x2b, + 0xca, 0x80, 0x3c, 0xd6, 0x64, 0x88, 0x40, 0xae, 0x01, 0xa0, 0xb7, 0x15, 0x17, 0x25, 0x94, 0x78, + 0xd1, 0xe8, 0x9c, 0x25, 0x5e, 0xe7, 0x15, 0x14, 0x64, 0x5f, 0x35, 0x6f, 0xa9, 0xcf, 0xf9, 0x9c, + 0xbd, 0xe7, 0xee, 0x09, 0xf4, 0x10, 0x81, 0x75, 0x4f, 0x59, 0x10, 0x62, 0xfb, 0xca, 0xc7, 0x56, + 0x8d, 0x8a, 0x84, 0x96, 0x72, 0xd2, 0x44, 0x18, 0x77, 0xaf, 0x49, 0x61, 0x29, 0x17, 0x98, 0x13, + 0x9b, 0x21, 0x02, 0xf9, 0x1c, 0x8c, 0x15, 0xa9, 0xeb, 0x6f, 0x6d, 0xad, 0xe3, 0x8b, 0x3b, 0x0f, + 0xaa, 0x9c, 0xc3, 0x00, 0xb8, 0xbe, 0xdf, 0xfc, 0xee, 0xf1, 0xd2, 0x94, 0x6f, 0xb7, 0xe8, 0xd5, + 0x60, 0x2e, 0x24, 0x36, 0x59, 0x81, 0x3c, 0x7f, 0xcd, 0x0c, 0x45, 0x46, 0xdc, 0xd0, 0x72, 0x7c, + 0x7b, 0x15, 0x4f, 0x9f, 0x0f, 0xe9, 0x6e, 0x10, 0xfe, 0x37, 0x86, 0x4f, 0x56, 0x65, 0xd4, 0x6c, + 0xb5, 0x93, 0x10, 0xea, 0x30, 0xc4, 0x11, 0xa0, 0xf5, 0x35, 0x4e, 0x41, 0x0a, 0x30, 0x55, 0x74, + 0x5a, 0x1d, 0xcb, 0xb7, 0x31, 0x05, 0xcd, 0x91, 0xd8, 0xbb, 0x50, 0x0f, 0x53, 0x57, 0x0b, 0xb4, + 0x8d, 0x50, 0x2d, 0x20, 0xb7, 0x60, 0xda, 0x74, 0xba, 0x6c, 0x92, 0xe4, 0xe5, 0x89, 0x6f, 0x4f, + 0xf8, 0x2e, 0xee, 0xb2, 0x12, 0xb6, 0x9b, 0x8a, 0x9b, 0x92, 0x16, 0xbc, 0x4c, 0xa3, 0x22, 0x1b, + 0x09, 0x5a, 0x6c, 0x75, 0x4f, 0x52, 0x83, 0x00, 0xc7, 0x98, 0x25, 0x28, 0xc0, 0x6f, 0xc0, 0x44, + 0xb5, 0xba, 0xb9, 0x45, 0x3d, 0xff, 0x56, 0xd3, 0x79, 0x88, 0x5b, 0x52, 0x4e, 0x24, 0x47, 0xf0, + 0x9c, 0x9a, 0x4f, 0x3d, 0xbf, 0xb6, 0xd7, 0x74, 0x1e, 0x9a, 0x2a, 0x16, 0xf9, 0x2a, 0x1b, 0x0f, + 0xe5, 0x00, 0x17, 0x61, 0xda, 0xfa, 0xc9, 0x18, 0xf8, 0xe1, 0x87, 0x9f, 0x0c, 0x93, 0x34, 0xf4, + 0xc1, 0x52, 0xd0, 0xd1, 0x05, 0x84, 0x5d, 0xfb, 0x0a, 0x8d, 0x86, 0x4b, 0x3d, 0x4f, 0xec, 0x1d, + 0xdc, 0x05, 0x04, 0xef, 0x88, 0x16, 0x2f, 0xd0, 0x5c, 0x40, 0x14, 0x02, 0xf2, 0xcd, 0x14, 0x9c, + 0x52, 0xad, 0xc8, 0xf1, 0x63, 0x69, 0xd1, 0xb6, 0x2f, 0x76, 0x92, 0x37, 0xae, 0xca, 0xbd, 0xf3, + 0xaa, 0x82, 0x76, 0xf5, 0xc1, 0xf5, 0xab, 0x85, 0xf0, 0x67, 0x55, 0x12, 0x89, 0x48, 0x47, 0x49, + 0xfc, 0xd4, 0x7d, 0xd0, 0x4a, 0x20, 0x25, 0x45, 0x76, 0xbc, 0xb2, 0xf5, 0x84, 0x36, 0x23, 0xe5, + 0x0a, 0x06, 0x73, 0x13, 0x6a, 0x30, 0xb1, 0xfa, 0xb8, 0x75, 0x89, 0xdd, 0xd1, 0x4f, 0x51, 0x85, + 0x06, 0x85, 0xd2, 0x6a, 0xe1, 0xde, 0x7a, 0x28, 0x59, 0x7d, 0x6f, 0x99, 0x6e, 0x6b, 0x7d, 0xeb, + 0x63, 0xba, 0xbd, 0x0d, 0x73, 0x91, 0x61, 0x90, 0x42, 0xa9, 0x06, 0x8e, 0x0a, 0xa5, 0x11, 0x1a, + 0x33, 0x82, 0x6d, 0xfc, 0xbd, 0xb1, 0x08, 0x5f, 0x61, 0xae, 0x65, 0xc0, 0x28, 0x97, 0x39, 0xd5, + 0xdc, 0xc9, 0x5c, 0x22, 0x35, 0x45, 0x09, 0x39, 0x0b, 0x99, 0x6a, 0x75, 0x53, 0x4d, 0x17, 0xef, + 0x79, 0x8e, 0xc9, 0x60, 0x6c, 0x86, 0xd0, 0x12, 0x4b, 0x89, 0xaa, 0xca, 0xb6, 0x3d, 0x13, 0xa1, + 0x6c, 0xbc, 0xa5, 0x04, 0x98, 0x0d, 0xc7, 0x5b, 0x48, 0x80, 0xa1, 0xdc, 0x57, 0x84, 0x85, 0x82, + 0xe7, 0x51, 0x97, 0xad, 0x2a, 0x61, 0xe0, 0xe3, 0x0a, 0x29, 0x45, 0xec, 0xee, 0x58, 0xa9, 0x55, + 0xf7, 0xcc, 0x9e, 0x88, 0xe4, 0x32, 0xe4, 0x0a, 0xdd, 0x86, 0x4d, 0xdb, 0x75, 0x2d, 0x64, 0x8a, + 0x25, 0x60, 0x66, 0x50, 0x4a, 0xbe, 0x08, 0xa7, 0x22, 0x61, 0x83, 0xc4, 0x08, 0x8c, 0x85, 0x9f, + 0xa0, 0x94, 0xa2, 0xc2, 0xe7, 0x54, 0x3e, 0x24, 0xc9, 0x94, 0xa4, 0x00, 0xf9, 0x55, 0x74, 0x55, + 0x28, 0x51, 0xae, 0xd9, 0x75, 0x5c, 0xee, 0x7e, 0xc1, 0x65, 0x5e, 0xee, 0xc6, 0x50, 0x6b, 0x04, + 0x85, 0x66, 0x0c, 0x9d, 0xdc, 0x85, 0xb9, 0x28, 0x8c, 0x6d, 0xe4, 0x5c, 0xbc, 0xc5, 0xb0, 0x7e, + 0x31, 0x2e, 0xb8, 0x95, 0x27, 0x51, 0x91, 0x5d, 0x98, 0x0d, 0xcd, 0x09, 0x74, 0xa1, 0x57, 0xda, + 0xfa, 0x05, 0xe5, 0x52, 0xf0, 0x7d, 0x5e, 0x2c, 0xc6, 0xb9, 0xd0, 0x34, 0x21, 0x10, 0x7e, 0xcd, + 0x38, 0x3b, 0xd2, 0x80, 0xe9, 0xaa, 0xbd, 0xdf, 0xb6, 0xdb, 0xfb, 0x77, 0xe9, 0x51, 0xc5, 0xb2, + 0x5d, 0x61, 0x75, 0x25, 0x6d, 0x2a, 0x0b, 0xde, 0x51, 0xab, 0x45, 0x7d, 0x17, 0x8f, 0x48, 0x56, + 0x8e, 0x9e, 0x83, 0x4c, 0x98, 0x59, 0xf4, 0x38, 0x1d, 0x7a, 0xe5, 0x74, 0x2c, 0x5b, 0x3b, 0x0b, + 0x74, 0x9e, 0xda, 0xc5, 0x63, 0x72, 0xc8, 0x8b, 0x47, 0x13, 0x66, 0x57, 0xdb, 0x75, 0xf7, 0x08, + 0x15, 0xec, 0xb2, 0x71, 0x53, 0x03, 0x1a, 0xf7, 0x92, 0x68, 0xdc, 0x39, 0x4b, 0xae, 0xb0, 0xa4, + 0xe6, 0xc5, 0x19, 0x93, 0x2a, 0xcc, 0xa2, 0x74, 0x58, 0x2e, 0x55, 0xca, 0x6d, 0xdb, 0xb7, 0x31, + 0xc3, 0x2f, 0x3f, 0x63, 0x5e, 0x16, 0x3c, 0xcf, 0x73, 0x01, 0xd3, 0x6e, 0x74, 0x6a, 0xb6, 0x44, + 0x51, 0x99, 0xc6, 0xe8, 0x8d, 0xff, 0x20, 0xc7, 0x77, 0x43, 0x55, 0x4c, 0xeb, 0x65, 0x59, 0x15, + 0x11, 0xdf, 0xd2, 0x27, 0x11, 0xdf, 0x32, 0x83, 0xc5, 0xb7, 0xec, 0x20, 0xf1, 0x2d, 0x22, 0x5f, + 0x8d, 0x9c, 0x58, 0xbe, 0x1a, 0x3d, 0x81, 0x7c, 0x35, 0x76, 0x22, 0xf9, 0x4a, 0x13, 0x14, 0x73, + 0x83, 0x04, 0xc5, 0xff, 0x5f, 0x1a, 0x7b, 0x56, 0xa5, 0xb1, 0xa4, 0xc3, 0xf5, 0x44, 0xd2, 0x58, + 0x6f, 0x61, 0x2a, 0xff, 0x67, 0x2d, 0x4c, 0xcd, 0x7e, 0x02, 0x61, 0xea, 0x2f, 0x40, 0x3e, 0xba, + 0xbf, 0x0f, 0x0e, 0x0a, 0xf6, 0xd4, 0x02, 0xd8, 0xb0, 0xd3, 0x27, 0xba, 0xbf, 0xb2, 0x4b, 0x5e, + 0xc5, 0xb5, 0x1f, 0x58, 0x3e, 0xbd, 0x2b, 0x9f, 0x8f, 0x45, 0x40, 0x3b, 0x0e, 0xc5, 0x6f, 0x5e, + 0x41, 0x09, 0x44, 0x8b, 0x74, 0x92, 0x68, 0x61, 0xfc, 0x68, 0x1a, 0x66, 0x79, 0xb0, 0x89, 0x67, + 0x5f, 0x8b, 0xf9, 0xbe, 0x26, 0x30, 0x4a, 0x63, 0xa5, 0x48, 0xef, 0xfa, 0xe8, 0x31, 0xbf, 0x02, + 0xa7, 0x62, 0x43, 0x81, 0x42, 0x63, 0x49, 0x86, 0xf9, 0x88, 0x89, 0x8d, 0x0b, 0xc9, 0x95, 0xdc, + 0xbf, 0x61, 0xc6, 0x28, 0x8c, 0x7f, 0x91, 0x89, 0xf1, 0x17, 0x1a, 0x4d, 0x55, 0x47, 0x99, 0x3a, + 0x99, 0x8e, 0x32, 0x3d, 0x9c, 0x8e, 0x32, 0x72, 0xb6, 0x64, 0x86, 0x39, 0x5b, 0xbe, 0x08, 0x53, + 0x5b, 0xd4, 0x6a, 0x79, 0x5b, 0x8e, 0x88, 0x5a, 0xcd, 0x8d, 0x15, 0x65, 0x14, 0x0f, 0x56, 0x26, + 0x65, 0x9e, 0xc0, 0xe8, 0xc2, 0x67, 0x04, 0x6c, 0x3f, 0xe4, 0x61, 0xac, 0x4d, 0x9d, 0x83, 0x2a, + 0xc8, 0x8e, 0xf4, 0x11, 0x64, 0xab, 0x30, 0x29, 0xe8, 0xc2, 0x48, 0x68, 0xa1, 0xc4, 0xc5, 0x8a, + 0x10, 0x2e, 0x6b, 0x0f, 0xf2, 0x8a, 0x05, 0xb5, 0x73, 0x61, 0x4b, 0x63, 0xc2, 0x86, 0x60, 0xb5, + 0xdd, 0xe8, 0x38, 0x76, 0x1b, 0x87, 0x60, 0x2c, 0x1c, 0x02, 0x2a, 0xc0, 0x7c, 0x08, 0x14, 0x24, + 0xf2, 0x2e, 0x4c, 0x17, 0x2a, 0x65, 0x95, 0x2c, 0x17, 0xaa, 0x49, 0xad, 0x8e, 0x5d, 0xd3, 0x48, + 0x23, 0xb8, 0xc6, 0x0f, 0x8c, 0xcb, 0x6f, 0xeb, 0xd3, 0xd5, 0x12, 0xe9, 0x7a, 0x9f, 0xcc, 0x09, + 0xf5, 0x3e, 0xd9, 0x41, 0xc7, 0xb9, 0x26, 0x63, 0x8c, 0x9c, 0x40, 0xc6, 0x18, 0x7d, 0x62, 0x1d, + 0xce, 0xd8, 0x09, 0xa5, 0x86, 0xc8, 0x32, 0xcf, 0x0d, 0xb3, 0xcc, 0x13, 0x25, 0x8d, 0xf1, 0x27, + 0x97, 0x34, 0xe0, 0xc4, 0x92, 0x46, 0x35, 0xf4, 0x5e, 0x99, 0x18, 0x68, 0xce, 0x78, 0x5e, 0xc8, + 0xc4, 0xb3, 0xc9, 0x91, 0x43, 0x02, 0x3f, 0x96, 0xef, 0x29, 0xf1, 0xe5, 0x6b, 0xc9, 0xe2, 0x4b, + 0xff, 0xad, 0xfe, 0xff, 0xcb, 0x02, 0x8c, 0x8b, 0xa3, 0xbc, 0x63, 0xb9, 0xec, 0x2e, 0xe8, 0x91, + 0x6b, 0x30, 0x26, 0x23, 0xe8, 0xa4, 0xc2, 0x6b, 0x75, 0x3c, 0x74, 0x8e, 0xc4, 0x62, 0xd7, 0x46, + 0x49, 0xac, 0x06, 0xee, 0x7d, 0x28, 0x60, 0x5a, 0x70, 0x12, 0x01, 0x33, 0xfe, 0x6e, 0x56, 0x7e, + 0xc9, 0xec, 0x5a, 0x23, 0x92, 0xbc, 0xae, 0x28, 0x33, 0xa7, 0x88, 0x4f, 0x91, 0xb9, 0x89, 0x58, + 0x27, 0xe9, 0x24, 0x9f, 0x24, 0xfc, 0x90, 0x92, 0x5c, 0x26, 0x33, 0x44, 0x72, 0x99, 0xb7, 0xb4, + 0xcc, 0x2c, 0xd9, 0x30, 0x15, 0x00, 0x5b, 0xdd, 0xfd, 0x73, 0xb2, 0xdc, 0x54, 0x53, 0xa8, 0x8c, + 0x84, 0xee, 0xfd, 0x48, 0xd9, 0x27, 0x79, 0x4a, 0x20, 0x0f, 0x8e, 0x9e, 0x24, 0xb0, 0xd7, 0xd8, + 0x9f, 0x69, 0x60, 0xaf, 0x55, 0x00, 0x25, 0xb1, 0x26, 0x57, 0xd5, 0xbf, 0xcc, 0x86, 0x69, 0x70, + 0x52, 0x4d, 0x85, 0xd0, 0xf8, 0x5d, 0x02, 0xb3, 0xd5, 0xea, 0x66, 0xc9, 0xb6, 0xf6, 0xdb, 0x8e, + 0xe7, 0xdb, 0xf5, 0x72, 0x7b, 0xcf, 0x61, 0xc2, 0x50, 0xb0, 0x2b, 0x28, 0x61, 0xa1, 0xc2, 0x1d, + 0x21, 0x28, 0x66, 0xc2, 0xf6, 0xaa, 0xeb, 0x3a, 0xae, 0x2a, 0x6c, 0x53, 0x06, 0x30, 0x39, 0x9c, + 0xc9, 0x1b, 0xd5, 0x2e, 0xcf, 0x90, 0xc8, 0x5f, 0x4f, 0x50, 0xde, 0xf0, 0x38, 0xc8, 0x94, 0x65, + 0x84, 0xc6, 0x17, 0xac, 0x90, 0x3f, 0xcf, 0x68, 0xe1, 0xc1, 0xc2, 0x62, 0xbe, 0xe7, 0x89, 0x33, + 0x09, 0xdd, 0x5d, 0x3a, 0x08, 0x57, 0x1f, 0xf5, 0x62, 0xdf, 0xc0, 0x11, 0x9c, 0xd2, 0xdc, 0x36, + 0x86, 0xd5, 0x28, 0xbd, 0x2a, 0xe4, 0x1b, 0x03, 0x7d, 0xed, 0x12, 0xd4, 0x4a, 0x6a, 0x28, 0xf3, + 0xc4, 0x1a, 0xc8, 0x8f, 0xa6, 0xe0, 0x7c, 0x62, 0x49, 0xf0, 0x75, 0x4f, 0x68, 0x21, 0xda, 0x94, + 0x4d, 0x83, 0x07, 0x6d, 0xef, 0x55, 0x75, 0x2d, 0x61, 0x2b, 0xe8, 0x5f, 0x13, 0xf9, 0xf5, 0x14, + 0x9c, 0xd1, 0x30, 0x82, 0x3d, 0xcf, 0x0b, 0xfc, 0x02, 0x13, 0xd7, 0xf5, 0xc7, 0x4f, 0x67, 0x5d, + 0x5f, 0xd4, 0xfb, 0x12, 0x6e, 0xc9, 0x6a, 0x1f, 0x7a, 0xb5, 0x90, 0x3c, 0x80, 0x59, 0x2c, 0x92, + 0xda, 0x2d, 0xb6, 0x66, 0x85, 0x52, 0x6c, 0x3e, 0x6c, 0x36, 0x77, 0x45, 0xc2, 0xc4, 0x5b, 0xcb, + 0xdf, 0x39, 0x5e, 0x9a, 0xd2, 0xd0, 0x31, 0x3e, 0x30, 0xb6, 0x21, 0x50, 0x91, 0xd9, 0xed, 0x3d, + 0x47, 0x3d, 0x2f, 0x63, 0x55, 0x90, 0xff, 0x30, 0x05, 0x0b, 0x0c, 0xca, 0xbb, 0x71, 0xcb, 0x75, + 0x5a, 0x41, 0xb9, 0x7c, 0x1d, 0xee, 0x31, 0x6c, 0xcd, 0xa7, 0x33, 0x6c, 0x2f, 0x63, 0x93, 0xf9, + 0x9e, 0x50, 0xdb, 0x73, 0x9d, 0x56, 0xd8, 0x7c, 0x2d, 0x71, 0x64, 0xaf, 0x46, 0x92, 0x1f, 0x4c, + 0xc1, 0x59, 0x4d, 0xc1, 0xa0, 0x86, 0x86, 0x15, 0x0e, 0x5f, 0xd2, 0x94, 0x40, 0x2d, 0x5a, 0xb9, + 0x2a, 0xd6, 0xff, 0x25, 0x6c, 0x41, 0x78, 0x5a, 0x60, 0x5b, 0x6a, 0x2d, 0x8e, 0xa5, 0x34, 0xa1, + 0x77, 0x2d, 0xc4, 0x86, 0x59, 0x7c, 0x71, 0xd2, 0xac, 0x18, 0xe6, 0x7b, 0x5b, 0x31, 0x04, 0x09, + 0x52, 0x30, 0xee, 0x64, 0x6f, 0x53, 0x86, 0x38, 0x57, 0xf2, 0x17, 0xe1, 0x6c, 0x0c, 0x18, 0x7c, + 0x6d, 0xa7, 0x7a, 0x7e, 0x6d, 0xaf, 0x3d, 0x3e, 0x5e, 0x7a, 0x25, 0xa9, 0xb6, 0xa4, 0x2f, 0xad, + 0x77, 0x0d, 0xc4, 0x02, 0x08, 0x0b, 0x45, 0xfe, 0xc9, 0xe4, 0x05, 0xfa, 0x9a, 0x58, 0x1f, 0x0a, + 0x3e, 0xdb, 0xcb, 0x95, 0x36, 0xa8, 0x47, 0x5e, 0x88, 0x44, 0x28, 0x4c, 0x2a, 0x31, 0x37, 0x8f, + 0x30, 0x11, 0x65, 0xcf, 0x4a, 0xbe, 0x73, 0xbc, 0xa4, 0x61, 0x33, 0xb9, 0x58, 0x0d, 0xe6, 0xa9, + 0xca, 0xc5, 0x1a, 0x22, 0xf9, 0xd5, 0x14, 0xcc, 0x33, 0x40, 0xb8, 0xa8, 0x44, 0xa7, 0x16, 0xfa, + 0xad, 0xfa, 0x83, 0xa7, 0xb3, 0xea, 0x5f, 0xc4, 0x36, 0xaa, 0xab, 0x3e, 0x36, 0x24, 0x89, 0x8d, + 0xc3, 0xd5, 0xae, 0x3d, 0x6e, 0x6a, 0xab, 0xfd, 0xec, 0x10, 0xab, 0x9d, 0x4f, 0xc0, 0xe0, 0xd5, + 0xde, 0xb3, 0x16, 0xb2, 0x05, 0x93, 0x42, 0x24, 0xe6, 0x03, 0xf6, 0x82, 0x16, 0x04, 0x50, 0x2d, + 0xe2, 0xf7, 0x14, 0x11, 0x92, 0x34, 0xd6, 0x43, 0x8d, 0x0b, 0x69, 0xc3, 0x1c, 0xff, 0xad, 0x6b, + 0x07, 0x96, 0x7a, 0x6a, 0x07, 0x2e, 0x8b, 0x1e, 0x5d, 0x10, 0xfc, 0x23, 0x4a, 0x02, 0xd5, 0x0f, + 0x3b, 0x81, 0x31, 0xe9, 0x00, 0xd1, 0xc0, 0xfc, 0xa3, 0xbd, 0xd0, 0x5f, 0x27, 0xf0, 0x8a, 0xa8, + 0x73, 0x29, 0x5a, 0x67, 0xf4, 0xcb, 0x4d, 0xe0, 0x4d, 0x2c, 0x98, 0x11, 0x50, 0x76, 0x01, 0xc6, + 0x1d, 0xfe, 0x45, 0xcd, 0x13, 0x3e, 0x52, 0xca, 0xb3, 0xf7, 0xc9, 0x9a, 0x30, 0x52, 0x41, 0x64, + 0x43, 0x8f, 0xf2, 0x23, 0x9b, 0x30, 0x5b, 0xe8, 0x74, 0x9a, 0x36, 0x6d, 0x60, 0x2f, 0x79, 0x2e, + 0x41, 0x23, 0x8c, 0x1f, 0x6f, 0xf1, 0x42, 0x21, 0xe2, 0x47, 0x13, 0x09, 0xc6, 0x69, 0x8d, 0x6f, + 0xa6, 0x62, 0x8d, 0x66, 0x37, 0x77, 0xfc, 0xa1, 0xb8, 0x85, 0xe2, 0xcd, 0x9d, 0x37, 0x11, 0x35, + 0x08, 0x21, 0x02, 0x13, 0x96, 0xd4, 0x00, 0x2b, 0x19, 0x2e, 0x2c, 0x89, 0xeb, 0x65, 0x78, 0xa1, + 0x5c, 0x92, 0xd6, 0x65, 0x99, 0x50, 0xe8, 0x42, 0xeb, 0x32, 0x61, 0x53, 0x66, 0xfc, 0x60, 0x5a, + 0x5f, 0x76, 0xe4, 0xb2, 0x22, 0xb7, 0x2b, 0x21, 0x5e, 0xa4, 0xdc, 0xae, 0x48, 0xeb, 0x7f, 0x27, + 0x05, 0x73, 0x9b, 0xee, 0xbe, 0xd5, 0xb6, 0xbf, 0xc1, 0x43, 0xc5, 0x39, 0x38, 0x2f, 0xfd, 0x53, + 0x71, 0x3c, 0xad, 0x94, 0x02, 0x8e, 0x52, 0x31, 0x5b, 0x29, 0xb8, 0x64, 0xcc, 0xa4, 0xf6, 0xa0, + 0xbd, 0x2e, 0x36, 0x4c, 0xc9, 0xec, 0xc0, 0xd1, 0x39, 0xdc, 0xf8, 0x89, 0x34, 0x4c, 0x28, 0x9f, + 0x00, 0xf9, 0x2c, 0x4c, 0xaa, 0x7c, 0x54, 0xad, 0x8f, 0x5a, 0xad, 0xa9, 0x61, 0xa1, 0xda, 0x87, + 0x5a, 0x2d, 0x4d, 0xed, 0xc3, 0x16, 0x3a, 0x42, 0x4f, 0x78, 0xb5, 0xf9, 0x20, 0xe1, 0x6a, 0x73, + 0xa2, 0xa4, 0x93, 0xef, 0xc6, 0x2f, 0x38, 0xc3, 0xe7, 0x88, 0x34, 0x7e, 0x3a, 0x05, 0xf9, 0xe8, + 0x47, 0xfa, 0xa9, 0x8c, 0xca, 0x09, 0xf4, 0xeb, 0x3f, 0x9e, 0x0e, 0x02, 0xee, 0x4a, 0x2f, 0x84, + 0x67, 0xd5, 0x56, 0xe2, 0x3d, 0x4d, 0xf5, 0xfd, 0x7c, 0x70, 0xae, 0xa8, 0x9d, 0xeb, 0x13, 0x8b, + 0x26, 0xfb, 0xed, 0x9f, 0x5f, 0x7a, 0xce, 0xf8, 0x10, 0xe6, 0xa3, 0xc3, 0x81, 0xea, 0xef, 0x02, + 0xcc, 0xe8, 0xf0, 0x68, 0xb8, 0xee, 0x28, 0x95, 0x19, 0xc5, 0x37, 0x7e, 0x2f, 0x1d, 0xe5, 0x2d, + 0xec, 0x26, 0xd8, 0xa6, 0xd3, 0xb6, 0x76, 0x9b, 0x41, 0x0c, 0x60, 0xbe, 0xe9, 0x70, 0x90, 0x29, + 0xcb, 0x4e, 0x12, 0xbf, 0x3e, 0xb0, 0xa5, 0xcf, 0x24, 0xdb, 0xd2, 0x93, 0x9b, 0x11, 0x8b, 0x21, + 0xc5, 0xf1, 0xfb, 0x21, 0xdd, 0xad, 0x85, 0x56, 0x43, 0x11, 0x43, 0xa1, 0x22, 0xcc, 0x6b, 0xb1, + 0x00, 0x25, 0xfd, 0x48, 0xa8, 0x70, 0xf5, 0xb1, 0x80, 0x13, 0x27, 0x22, 0x93, 0x35, 0x18, 0x63, + 0xcd, 0xbc, 0x67, 0x75, 0x84, 0x56, 0x9b, 0x04, 0x9e, 0x35, 0xcd, 0xe0, 0xc2, 0xa7, 0x38, 0xd7, + 0x34, 0x29, 0x3b, 0xf2, 0xb5, 0x9c, 0xad, 0x1c, 0xd1, 0xf8, 0x93, 0x14, 0xfb, 0xfe, 0xeb, 0x87, + 0xdf, 0x63, 0x41, 0xf0, 0x59, 0x97, 0xfa, 0x98, 0xf5, 0xfc, 0x61, 0x9a, 0x87, 0x71, 0x16, 0xcb, + 0xe7, 0x2d, 0x18, 0xdd, 0xb2, 0xdc, 0x7d, 0xea, 0x8b, 0x00, 0xc7, 0x2a, 0x17, 0x5e, 0x10, 0xba, + 0xa5, 0xfb, 0xf8, 0xdb, 0x14, 0x04, 0xaa, 0x2e, 0x2c, 0x3d, 0x94, 0x2e, 0x4c, 0x51, 0xcf, 0x66, + 0x9e, 0x9a, 0x7a, 0xf6, 0xfb, 0x82, 0x88, 0xcd, 0x05, 0x7f, 0x88, 0x50, 0x73, 0x17, 0xa2, 0xc1, + 0xc9, 0x63, 0x41, 0x01, 0x43, 0x76, 0xe4, 0xa6, 0x1a, 0xee, 0x5c, 0x31, 0x4f, 0x1f, 0x10, 0xd8, + 0xdc, 0xf8, 0xc3, 0x0c, 0x1f, 0x63, 0x31, 0x50, 0x97, 0x34, 0xd7, 0x15, 0xfc, 0x4e, 0x22, 0x99, + 0xf3, 0xb9, 0x13, 0xcb, 0x25, 0xc8, 0xb2, 0xb5, 0x29, 0x46, 0x13, 0xf1, 0xd8, 0xfa, 0x55, 0xf1, + 0x58, 0x39, 0xfb, 0x96, 0xf1, 0x4c, 0x52, 0x13, 0x4c, 0xe0, 0xb1, 0xa5, 0x7e, 0xcb, 0x88, 0x41, + 0x2e, 0x43, 0x76, 0xc3, 0x69, 0xc8, 0x90, 0x86, 0xf3, 0xe8, 0xc0, 0xa8, 0x25, 0x21, 0x5f, 0x48, + 0x99, 0x88, 0xc1, 0xfa, 0x1a, 0x04, 0x41, 0x56, 0xfb, 0xda, 0xda, 0xb3, 0x44, 0xe4, 0x1f, 0xb5, + 0xaf, 0x61, 0xbc, 0xe4, 0x55, 0x98, 0xd6, 0x53, 0xcc, 0x09, 0xa3, 0x27, 0x54, 0xb3, 0x46, 0x32, + 0xd5, 0xa9, 0xda, 0x71, 0x9d, 0x88, 0xac, 0xc0, 0x94, 0x16, 0x4a, 0x49, 0x3c, 0x2f, 0xa1, 0x7a, + 0x53, 0x0f, 0xc4, 0xa4, 0xaa, 0x37, 0x35, 0x12, 0x76, 0x9e, 0x8b, 0xf6, 0x2b, 0x8f, 0x4c, 0xb1, + 0xb6, 0x0b, 0x1c, 0x72, 0x03, 0x72, 0xdc, 0x53, 0xb0, 0x5c, 0x52, 0x5f, 0x2b, 0x3c, 0x84, 0x45, + 0x3c, 0x6d, 0x25, 0xa2, 0xe2, 0x19, 0xf6, 0x19, 0xc8, 0x8b, 0x2d, 0x29, 0x4c, 0xe6, 0x76, 0x0e, + 0xb2, 0xc5, 0x72, 0xc9, 0x54, 0xb7, 0x91, 0xba, 0xdd, 0x70, 0x4d, 0x84, 0x1a, 0xdf, 0x4a, 0xc1, + 0xd9, 0x0d, 0xea, 0x3f, 0x74, 0xdc, 0x43, 0x93, 0x7a, 0xbe, 0x6b, 0xf3, 0xfc, 0x24, 0xf8, 0x21, + 0x7e, 0x96, 0xbc, 0x0b, 0x23, 0x68, 0x7d, 0x13, 0x39, 0x19, 0xa2, 0x75, 0xac, 0x4c, 0x89, 0x05, + 0x3c, 0x82, 0xa6, 0x3c, 0x26, 0x27, 0x22, 0x6f, 0x41, 0xb6, 0x44, 0xdb, 0x47, 0x91, 0x0c, 0x0d, + 0x31, 0xe2, 0x60, 0x43, 0x68, 0xd0, 0xf6, 0x91, 0x89, 0x24, 0xc6, 0x4f, 0xa7, 0xe1, 0x54, 0x42, + 0xb3, 0xee, 0x7f, 0xf6, 0x19, 0xdd, 0x15, 0x57, 0xb4, 0x5d, 0xf1, 0x82, 0x20, 0xed, 0x39, 0xf0, + 0x89, 0x9b, 0xe4, 0xdf, 0x4c, 0xc1, 0x19, 0x7d, 0x81, 0x0a, 0x73, 0xbb, 0xfb, 0x37, 0xc8, 0x3b, + 0x30, 0xba, 0x46, 0xad, 0x06, 0x95, 0x21, 0xe1, 0x4f, 0x05, 0x31, 0x3d, 0xb8, 0x1b, 0x14, 0x2f, + 0xe4, 0x6c, 0x43, 0xa3, 0x79, 0x0e, 0x25, 0x25, 0xd1, 0x38, 0x2e, 0x8f, 0x1b, 0xd2, 0x25, 0x31, + 0xa9, 0xaa, 0x3e, 0xef, 0xec, 0xdf, 0x49, 0xc1, 0xf3, 0x7d, 0x68, 0xd8, 0xc4, 0xb1, 0xa9, 0x57, + 0x27, 0x0e, 0x4f, 0x54, 0x84, 0x92, 0xf7, 0x61, 0x66, 0x4b, 0xc8, 0xf3, 0x72, 0x3a, 0xd2, 0xe1, + 0xf7, 0x22, 0x45, 0xfd, 0x9a, 0x9c, 0x97, 0x28, 0xb2, 0xe6, 0x2b, 0x9b, 0xe9, 0xeb, 0x2b, 0xab, + 0xba, 0x9e, 0x66, 0x87, 0x75, 0x3d, 0xfd, 0x30, 0x9a, 0x98, 0x59, 0x44, 0x00, 0x0b, 0x1d, 0x6f, + 0x53, 0xbd, 0x1d, 0x6f, 0xfb, 0xc6, 0x19, 0xc2, 0x8c, 0x0e, 0x3a, 0xef, 0x27, 0x9d, 0xcf, 0xf7, + 0xb4, 0xf9, 0x7c, 0x3e, 0x79, 0x3e, 0x7b, 0x4f, 0xe4, 0xff, 0x94, 0x8a, 0x76, 0x76, 0xa8, 0x19, + 0x34, 0x60, 0xb4, 0xe4, 0xb4, 0x2c, 0xbb, 0xad, 0xe6, 0x06, 0x6c, 0x20, 0xc4, 0x14, 0x25, 0xc3, + 0xf9, 0x29, 0x5f, 0x80, 0x91, 0x0d, 0xa7, 0x5d, 0x28, 0x09, 0xdb, 0x3a, 0xe4, 0xd3, 0x76, 0xda, + 0x35, 0xab, 0x61, 0xf2, 0x02, 0xb2, 0x0e, 0x50, 0xad, 0xbb, 0x94, 0xb6, 0xab, 0xf6, 0x37, 0x68, + 0x44, 0xd2, 0x60, 0x23, 0xd4, 0xec, 0xe2, 0xc6, 0x82, 0x6f, 0x3c, 0x1e, 0x22, 0xd6, 0x3c, 0xfb, + 0x1b, 0xea, 0x7e, 0xab, 0xd0, 0x1b, 0x14, 0x20, 0x24, 0xc2, 0x44, 0x49, 0x76, 0x43, 0x24, 0xbf, + 0x9c, 0x12, 0x89, 0x92, 0x18, 0x40, 0x4b, 0x94, 0xc4, 0x00, 0x6c, 0x6b, 0x5f, 0xa3, 0xf6, 0xfe, + 0x01, 0xb7, 0xd7, 0x98, 0xe2, 0x4b, 0xf5, 0x00, 0x21, 0xea, 0xd6, 0xce, 0x71, 0x8c, 0x1f, 0x1d, + 0x81, 0xb3, 0x26, 0xdd, 0xb7, 0x99, 0x98, 0xbc, 0xed, 0xd9, 0xed, 0x7d, 0xcd, 0x93, 0xd4, 0x88, + 0x2c, 0x24, 0x11, 0xbc, 0x94, 0x41, 0x82, 0x81, 0xb9, 0x02, 0x39, 0x76, 0x2a, 0x2a, 0x6b, 0x09, + 0xdf, 0x50, 0x30, 0xb3, 0x2f, 0x5f, 0xe4, 0xb2, 0x98, 0xbc, 0x2a, 0x4e, 0x6d, 0x25, 0xbc, 0x34, + 0x3b, 0xb5, 0xbf, 0x7b, 0xbc, 0x04, 0xd5, 0x23, 0xcf, 0xa7, 0x78, 0x63, 0x13, 0x27, 0x77, 0x20, + 0x5a, 0x67, 0x7b, 0x88, 0xd6, 0xf7, 0x60, 0xbe, 0xd0, 0xe0, 0x9b, 0xb5, 0xd5, 0xac, 0xb8, 0x76, + 0xbb, 0x6e, 0x77, 0xac, 0xa6, 0xbc, 0x2e, 0xe2, 0x28, 0x5b, 0x41, 0x79, 0xad, 0x13, 0x20, 0x98, + 0x89, 0x64, 0xac, 0x1b, 0xa5, 0x8d, 0x2a, 0xcf, 0x5a, 0xcf, 0x9f, 0xc7, 0xb0, 0x1b, 0x8d, 0xb6, + 0xc7, 0xd3, 0xd6, 0x9b, 0x41, 0x31, 0x0a, 0xf5, 0x68, 0x83, 0xb0, 0xb5, 0x5e, 0x0d, 0x7d, 0x4d, + 0x78, 0xf4, 0x4b, 0x6e, 0xa7, 0xe0, 0x37, 0x3d, 0xb4, 0x55, 0xd0, 0xf0, 0x42, 0xba, 0x6a, 0x75, + 0x8d, 0xd1, 0xe5, 0x62, 0x74, 0x9e, 0x77, 0xa0, 0xd2, 0x71, 0x3c, 0x72, 0x8d, 0x2d, 0x85, 0x96, + 0xe3, 0x53, 0x5c, 0xe7, 0xe3, 0xe1, 0x15, 0xc0, 0x45, 0x28, 0xbf, 0x02, 0x28, 0x28, 0xe4, 0x5d, + 0x98, 0x5b, 0x2d, 0x2e, 0x4b, 0xa5, 0x66, 0xc9, 0xa9, 0x77, 0xf1, 0x55, 0x19, 0xb0, 0x3e, 0x9c, + 0x43, 0x5a, 0x5f, 0x66, 0x8b, 0x3b, 0x09, 0x8d, 0x5c, 0x82, 0xb1, 0x72, 0x89, 0x8f, 0xfd, 0x84, + 0x1a, 0xe2, 0x5d, 0x58, 0x6b, 0xc8, 0x42, 0xb2, 0x19, 0xca, 0xa8, 0x93, 0x03, 0x85, 0xc9, 0xb3, + 0x83, 0xe5, 0x53, 0x11, 0x09, 0x9e, 0x67, 0x1c, 0x29, 0x3a, 0x0d, 0xea, 0xdd, 0xbf, 0xfe, 0x3d, + 0x16, 0x09, 0x5e, 0xe9, 0x1b, 0xee, 0x5e, 0xd7, 0x13, 0xb7, 0xba, 0x7f, 0x03, 0x23, 0xc1, 0xc7, + 0x70, 0xc9, 0xe7, 0x61, 0x04, 0x7f, 0x0a, 0xb9, 0x67, 0x2e, 0x81, 0x6d, 0x28, 0xf3, 0xd4, 0x79, + 0x6e, 0x4f, 0x24, 0x20, 0x65, 0x18, 0x13, 0x22, 0xf7, 0x49, 0xe2, 0x19, 0x0b, 0xd9, 0x9d, 0x4f, + 0x92, 0xa0, 0x37, 0x1a, 0x30, 0xa9, 0x56, 0xc8, 0x16, 0xe7, 0x9a, 0xe5, 0x1d, 0xd0, 0x06, 0xfb, + 0x25, 0x52, 0x11, 0xe0, 0xe2, 0x3c, 0x40, 0x68, 0x8d, 0xb5, 0xc3, 0x54, 0x50, 0xd8, 0x6e, 0x5b, + 0xf6, 0xb6, 0x3d, 0xd1, 0x14, 0x71, 0x09, 0xb7, 0x51, 0xa1, 0xd3, 0x30, 0x45, 0x91, 0xf1, 0x7d, + 0x30, 0xbf, 0xd1, 0x6d, 0x36, 0xd9, 0x85, 0x5c, 0x86, 0xaa, 0xf5, 0x2d, 0x9f, 0x92, 0x15, 0x18, + 0xa9, 0x2a, 0xd9, 0xc2, 0xe6, 0xf4, 0x9c, 0xfc, 0x3c, 0x59, 0xd8, 0x19, 0x71, 0x1d, 0x9a, 0x89, + 0xe6, 0x09, 0xe3, 0xa4, 0xc6, 0xef, 0x84, 0x59, 0x66, 0xb7, 0x5c, 0xab, 0x7e, 0x18, 0x64, 0x8c, + 0x1b, 0x36, 0x61, 0xee, 0x1d, 0xd9, 0x08, 0xfd, 0x28, 0x4b, 0x6a, 0xf0, 0xa0, 0xc6, 0x90, 0x77, + 0x61, 0x42, 0x1c, 0x67, 0x4a, 0xf4, 0x14, 0x74, 0x51, 0x97, 0x29, 0xab, 0x23, 0xe6, 0x06, 0x2a, + 0x3a, 0x9e, 0xd2, 0x7a, 0x57, 0xee, 0x5f, 0xff, 0x34, 0x4e, 0x69, 0xbd, 0x8e, 0x3e, 0x4b, 0xf7, + 0x1f, 0x4f, 0x44, 0xc7, 0x56, 0xac, 0xdd, 0x9b, 0x6a, 0xbc, 0x84, 0x54, 0x78, 0x67, 0x0a, 0xe3, + 0x25, 0xa8, 0x77, 0xa6, 0x00, 0x35, 0x98, 0x93, 0xf4, 0x80, 0x39, 0x79, 0x5f, 0xce, 0x49, 0xa6, + 0xf7, 0xc2, 0x98, 0xeb, 0x33, 0x0f, 0xd5, 0xf0, 0x0b, 0xc9, 0x0e, 0x75, 0xe1, 0x7e, 0x0e, 0x03, + 0x43, 0x72, 0x92, 0xe8, 0x86, 0x26, 0x38, 0xa9, 0xb7, 0xf8, 0x91, 0xe1, 0x99, 0x0e, 0xb8, 0xc5, + 0xbf, 0x0d, 0x93, 0x05, 0xdf, 0xb7, 0xea, 0x07, 0xb4, 0x51, 0x62, 0xdb, 0x93, 0xe2, 0xda, 0x6d, + 0x09, 0xb8, 0xfa, 0x9c, 0xa2, 0xe2, 0xf2, 0x50, 0x45, 0x96, 0x27, 0xac, 0xdd, 0x82, 0x50, 0x45, + 0x0c, 0xa2, 0x87, 0x2a, 0x62, 0x10, 0x72, 0x0d, 0xc6, 0xca, 0xed, 0x07, 0x36, 0x1b, 0x93, 0x9c, + 0x92, 0x17, 0x9b, 0x83, 0xd4, 0xcd, 0x55, 0x60, 0x91, 0xb7, 0x14, 0x71, 0x77, 0x3c, 0xbc, 0xda, + 0x72, 0x65, 0x48, 0x4d, 0x4a, 0xbd, 0xaa, 0x28, 0x1b, 0xc8, 0xbf, 0x37, 0x61, 0x4c, 0xea, 0xb8, + 0x20, 0xbc, 0xce, 0x0a, 0xca, 0xb8, 0x5b, 0x9d, 0x44, 0xc6, 0x24, 0x63, 0x4a, 0x4a, 0x85, 0x09, + 0x25, 0xc9, 0x98, 0x92, 0x52, 0x41, 0x4b, 0x32, 0xa6, 0x24, 0x57, 0x08, 0xd4, 0x03, 0x93, 0x03, + 0xd5, 0x03, 0xf7, 0x61, 0xb2, 0x62, 0xb9, 0xbe, 0xcd, 0xc4, 0x85, 0xb6, 0xef, 0x2d, 0x4c, 0x69, + 0x1a, 0x35, 0xa5, 0x68, 0xe5, 0x05, 0x99, 0x6c, 0xab, 0xa3, 0xe0, 0xeb, 0x59, 0xa1, 0x42, 0x78, + 0xb2, 0xad, 0xdb, 0xf4, 0x93, 0xd8, 0xba, 0xe1, 0xa0, 0xa2, 0x16, 0x65, 0x26, 0xbc, 0xab, 0xa3, + 0x38, 0x1b, 0x51, 0xa5, 0x04, 0x88, 0xe4, 0xcb, 0x30, 0xc9, 0xfe, 0xc6, 0x54, 0xd4, 0x36, 0xf5, + 0x16, 0xf2, 0xd8, 0xb9, 0x17, 0x12, 0xbf, 0x7e, 0x9e, 0xaf, 0xba, 0x4a, 0x7d, 0xfe, 0x01, 0x23, + 0xe3, 0xa8, 0x7a, 0x54, 0xe3, 0x46, 0x3e, 0x80, 0x49, 0x99, 0x2e, 0x1d, 0x27, 0x69, 0x36, 0xb4, + 0x56, 0x6c, 0x08, 0x78, 0x2c, 0x5a, 0x98, 0x4a, 0xc0, 0x8e, 0xf9, 0x42, 0x87, 0x6f, 0x90, 0x44, + 0x59, 0xed, 0x9d, 0xd8, 0xe6, 0x28, 0xd1, 0xc8, 0x17, 0x60, 0xb2, 0xd0, 0xe9, 0x84, 0x3b, 0xce, + 0x9c, 0xa2, 0x22, 0xe9, 0x74, 0x6a, 0x89, 0xbb, 0x8e, 0x46, 0x11, 0xdd, 0x98, 0xe7, 0x4f, 0xb4, + 0x31, 0x93, 0x37, 0x02, 0xc1, 0xf9, 0x54, 0xa8, 0xef, 0x13, 0x57, 0x0a, 0x4d, 0x0a, 0xe7, 0x32, + 0x74, 0x11, 0xa6, 0xb8, 0x02, 0x4c, 0x4a, 0x33, 0xa7, 0x63, 0x5f, 0x4f, 0x82, 0x50, 0xa3, 0xd3, + 0x90, 0x55, 0x98, 0xe6, 0xce, 0x48, 0x4d, 0x11, 0xc6, 0x6d, 0xe1, 0x4c, 0x98, 0xf0, 0x94, 0xfb, + 0x30, 0x35, 0x31, 0xba, 0xaf, 0xa5, 0x71, 0x89, 0x10, 0x19, 0x7f, 0x94, 0x82, 0x33, 0x3d, 0x66, + 0x3c, 0x08, 0xf2, 0x95, 0x1a, 0x90, 0xf3, 0xfd, 0x5a, 0x28, 0x65, 0x29, 0xfa, 0x4e, 0x21, 0x65, + 0xa9, 0xf3, 0x25, 0xe5, 0x2d, 0x07, 0x88, 0xc8, 0xf8, 0xae, 0x64, 0x46, 0x17, 0x91, 0x26, 0x23, + 0x87, 0x90, 0x96, 0x19, 0x7e, 0xc5, 0x78, 0x7c, 0xbc, 0xf4, 0x82, 0xcb, 0x41, 0xc1, 0xb4, 0x7e, + 0xec, 0x68, 0x5f, 0x70, 0x02, 0x6b, 0xe3, 0x38, 0x05, 0x13, 0xca, 0x77, 0x48, 0x2e, 0x28, 0x8e, + 0x5a, 0x79, 0x1e, 0x27, 0x5d, 0xe1, 0x90, 0xe6, 0x27, 0x11, 0x7e, 0x54, 0xe9, 0xc1, 0xaa, 0xc9, + 0x7b, 0x4c, 0x14, 0x52, 0x02, 0xa1, 0xb5, 0x34, 0x3d, 0xa2, 0x89, 0xe5, 0x98, 0x23, 0xd0, 0xf2, + 0xfc, 0x42, 0xdd, 0xb7, 0x1f, 0xd0, 0x21, 0x0e, 0x9d, 0x30, 0x47, 0xa0, 0xe5, 0xf9, 0x35, 0x0b, + 0xc9, 0x62, 0x39, 0x02, 0x03, 0x86, 0xc6, 0x0f, 0xa5, 0x00, 0xb6, 0xcb, 0x45, 0x8c, 0x64, 0xf8, + 0xa4, 0x42, 0x41, 0x72, 0x74, 0x28, 0xc9, 0xbd, 0x8f, 0x38, 0x50, 0x81, 0x69, 0x1d, 0x8b, 0xbc, + 0x0f, 0x33, 0xd5, 0xba, 0xeb, 0x34, 0x9b, 0xbb, 0x56, 0xfd, 0x70, 0xdd, 0x6e, 0x53, 0x1e, 0x96, + 0x67, 0x84, 0x1f, 0x45, 0x5e, 0x50, 0x54, 0x6b, 0xb2, 0x32, 0x33, 0x8a, 0x6c, 0xfc, 0x69, 0x0a, + 0x26, 0xca, 0x6d, 0xcf, 0xb7, 0x9a, 0x4d, 0x14, 0x76, 0xbe, 0x97, 0x52, 0x65, 0x04, 0xfd, 0xea, + 0x33, 0xa2, 0x6f, 0xc2, 0x4c, 0x04, 0x8d, 0x5d, 0xd2, 0xab, 0xe8, 0x47, 0xaa, 0x5e, 0xd2, 0xb9, + 0x67, 0xa9, 0x29, 0x4a, 0x8c, 0x55, 0x85, 0xec, 0xfe, 0x75, 0x7c, 0x69, 0x5b, 0x06, 0xb0, 0x25, + 0x48, 0x5e, 0x29, 0x48, 0xb4, 0x25, 0xf7, 0xaf, 0x9b, 0x0a, 0x96, 0xb1, 0x01, 0xa3, 0x55, 0xc7, + 0xf5, 0x57, 0x8e, 0xb8, 0x14, 0x5f, 0xa2, 0x5e, 0x5d, 0x7d, 0x4a, 0xb3, 0x51, 0x7d, 0x5d, 0x37, + 0x45, 0x11, 0xbb, 0xc3, 0xdf, 0xb2, 0x69, 0xb3, 0xa1, 0xda, 0x4c, 0xee, 0x31, 0x80, 0xc9, 0xe1, + 0xec, 0xa6, 0x73, 0x3a, 0x8c, 0xb4, 0x1b, 0x1a, 0x67, 0x3e, 0xe9, 0x82, 0x2d, 0x6a, 0xe3, 0xfb, + 0xa2, 0x9e, 0x89, 0x52, 0xab, 0xa9, 0xcf, 0x50, 0xff, 0x7b, 0x29, 0x58, 0xec, 0x4d, 0xa2, 0xda, + 0x7b, 0xa6, 0xfa, 0xd8, 0x7b, 0xbe, 0x1c, 0x7d, 0xfa, 0x41, 0x34, 0xf1, 0xf4, 0x13, 0x3e, 0xf8, + 0x94, 0xd0, 0xdc, 0xb6, 0x1e, 0xe4, 0xf4, 0xbd, 0xd0, 0xa7, 0xcd, 0x88, 0xc8, 0xa7, 0xd9, 0x47, + 0x1a, 0x53, 0xd0, 0x1a, 0xbf, 0x91, 0x85, 0xb3, 0x3d, 0x29, 0xc8, 0x9a, 0x12, 0xb4, 0x7b, 0x3a, + 0x08, 0x17, 0xdc, 0x13, 0xff, 0x2a, 0xfe, 0x8b, 0x16, 0x55, 0x51, 0x2f, 0x90, 0xcd, 0x20, 0x58, + 0x73, 0x1a, 0x79, 0xbd, 0x36, 0x90, 0x17, 0x47, 0x47, 0x66, 0x10, 0x8f, 0xdb, 0x8c, 0xce, 0x3a, + 0xd4, 0xb7, 0xec, 0xa6, 0xa7, 0x7e, 0x76, 0x0d, 0x0e, 0x32, 0x65, 0x59, 0x68, 0x84, 0x9b, 0x4d, + 0x36, 0xc2, 0x35, 0xfe, 0xaf, 0x14, 0x8c, 0x07, 0xcd, 0x26, 0x8b, 0x70, 0x7a, 0xcb, 0x2c, 0x14, + 0x57, 0x6b, 0x5b, 0x1f, 0x56, 0x56, 0x6b, 0xdb, 0x1b, 0xd5, 0xca, 0x6a, 0xb1, 0x7c, 0xab, 0xbc, + 0x5a, 0xca, 0x3f, 0x47, 0x66, 0x61, 0x6a, 0x7b, 0xe3, 0xee, 0xc6, 0xe6, 0xce, 0x46, 0x6d, 0xd5, + 0x34, 0x37, 0xcd, 0x7c, 0x8a, 0x4c, 0xc1, 0xb8, 0xb9, 0x52, 0x28, 0xd6, 0x36, 0x36, 0x4b, 0xab, + 0xf9, 0x34, 0xc9, 0xc3, 0x64, 0x71, 0x73, 0x63, 0x63, 0xb5, 0xb8, 0x55, 0xbe, 0x5f, 0xde, 0xfa, + 0x30, 0x9f, 0x21, 0x04, 0xa6, 0x11, 0xa1, 0x62, 0x96, 0x37, 0x8a, 0xe5, 0x4a, 0x61, 0x3d, 0x9f, + 0x65, 0x30, 0x86, 0xaf, 0xc0, 0x46, 0x02, 0x46, 0x77, 0xb7, 0x57, 0x56, 0xf3, 0xa3, 0x0c, 0x85, + 0xfd, 0xa5, 0xa0, 0x8c, 0xb1, 0xea, 0x11, 0xa5, 0x54, 0xd8, 0x2a, 0xac, 0x14, 0xaa, 0xab, 0xf9, + 0x1c, 0x39, 0x03, 0x73, 0x1a, 0xa8, 0xb6, 0xbe, 0x79, 0xbb, 0xbc, 0x91, 0x1f, 0x27, 0xf3, 0x90, + 0x0f, 0x60, 0xa5, 0x95, 0xda, 0x76, 0x75, 0xd5, 0xcc, 0x43, 0x14, 0xba, 0x51, 0xb8, 0xb7, 0x9a, + 0x9f, 0x30, 0xde, 0xe3, 0xfe, 0x39, 0x7c, 0xa8, 0xc9, 0x69, 0x20, 0xd5, 0xad, 0xc2, 0xd6, 0x76, + 0x35, 0xd2, 0xf9, 0x09, 0x18, 0xab, 0x6e, 0x17, 0x8b, 0xab, 0xd5, 0x6a, 0x3e, 0x45, 0x00, 0x46, + 0x6f, 0x15, 0xca, 0xeb, 0xab, 0xa5, 0x7c, 0xda, 0xf8, 0xa9, 0x14, 0xcc, 0x4a, 0xd1, 0x4b, 0xea, + 0xf1, 0x9f, 0xf0, 0x5b, 0x7c, 0x5f, 0xbb, 0x51, 0x4a, 0xf7, 0x89, 0x48, 0x25, 0x7d, 0x3e, 0x43, + 0x17, 0x4e, 0x25, 0x22, 0x93, 0x0f, 0x21, 0x2f, 0x1b, 0x70, 0xcf, 0xf2, 0xeb, 0x07, 0xe1, 0x36, + 0xf6, 0x42, 0xa4, 0x92, 0x08, 0x1a, 0xd7, 0xec, 0x85, 0xb9, 0xb8, 0x62, 0x6c, 0x8c, 0x6f, 0xa7, + 0xe0, 0x4c, 0x0f, 0x62, 0x52, 0x84, 0xd1, 0x20, 0x86, 0x71, 0x1f, 0x4b, 0xa1, 0xf9, 0xef, 0x1c, + 0x2f, 0x09, 0x44, 0x4c, 0x49, 0x84, 0x7f, 0x99, 0xa3, 0x41, 0x50, 0x62, 0x8c, 0x0c, 0xcc, 0xc7, + 0xe4, 0x6c, 0x64, 0x38, 0x45, 0x4d, 0x85, 0x9d, 0xea, 0xca, 0x84, 0x18, 0x90, 0x8c, 0xf5, 0xd0, + 0xc3, 0xd0, 0xc0, 0xc6, 0xb7, 0x52, 0x4c, 0x54, 0x8a, 0x22, 0x32, 0x09, 0xb2, 0xe0, 0x79, 0xdd, + 0x16, 0x35, 0x9d, 0x26, 0x2d, 0x98, 0x1b, 0xe2, 0x2c, 0x40, 0xd9, 0xcf, 0xc2, 0x02, 0x14, 0xd2, + 0x6b, 0x96, 0xdb, 0xd6, 0x5e, 0x05, 0x55, 0x1a, 0xf2, 0x16, 0x40, 0x90, 0xc5, 0x59, 0x3a, 0xa5, + 0xf3, 0x30, 0x06, 0x02, 0xaa, 0x4b, 0xaf, 0x0a, 0xb2, 0xf1, 0x23, 0x29, 0x98, 0x14, 0x57, 0x90, + 0x42, 0x93, 0xba, 0xfe, 0x93, 0xad, 0x99, 0xb7, 0xb4, 0x35, 0x13, 0x18, 0xc6, 0x2b, 0xfc, 0x59, + 0x71, 0xe2, 0x72, 0xf9, 0x4f, 0x52, 0x90, 0x8f, 0x22, 0x92, 0xf7, 0x21, 0x57, 0xa5, 0x0f, 0xa8, + 0x6b, 0xfb, 0x47, 0x91, 0x3c, 0xf3, 0x1c, 0x47, 0x94, 0x71, 0x4d, 0xa7, 0x27, 0x7e, 0x99, 0x01, + 0xcd, 0xb0, 0x9b, 0xb8, 0xa2, 0x44, 0xc8, 0x3c, 0x2d, 0x25, 0x82, 0xf1, 0xdf, 0xa4, 0xe1, 0xcc, + 0x6d, 0xea, 0xab, 0x7d, 0x0a, 0x9e, 0x71, 0x3f, 0x33, 0x5c, 0xbf, 0x94, 0x9e, 0x2c, 0xc0, 0x18, + 0x16, 0xc9, 0xf9, 0x35, 0xe5, 0x4f, 0xb2, 0x12, 0xac, 0xeb, 0x8c, 0x16, 0x4e, 0xbe, 0x47, 0xdd, + 0x57, 0x95, 0x00, 0xd3, 0xc1, 0xb2, 0xbe, 0x04, 0xd3, 0x18, 0x41, 0xb1, 0xcb, 0x3e, 0x07, 0xda, + 0x10, 0xca, 0x94, 0x9c, 0x19, 0x81, 0x92, 0x57, 0x21, 0xcf, 0x20, 0x85, 0xfa, 0x61, 0xdb, 0x79, + 0xd8, 0xa4, 0x8d, 0x7d, 0xca, 0x73, 0xf9, 0xe6, 0xcc, 0x18, 0x5c, 0xf2, 0xdc, 0x6e, 0xf3, 0x8b, + 0x10, 0x6d, 0xa0, 0xc6, 0x43, 0xf0, 0x0c, 0xa1, 0x8b, 0x6f, 0xc1, 0xc4, 0x27, 0x0c, 0x16, 0x6f, + 0xfc, 0xd7, 0x29, 0x98, 0xc7, 0xce, 0x29, 0x15, 0xa3, 0x2a, 0xfc, 0x33, 0xe1, 0x68, 0x29, 0xf1, + 0x93, 0x2d, 0x06, 0xd2, 0x3f, 0x85, 0x60, 0x14, 0x43, 0x0d, 0x4b, 0x7a, 0x08, 0x0d, 0x4b, 0xf5, + 0x24, 0xa9, 0xff, 0x86, 0x54, 0x10, 0xf1, 0x84, 0xcd, 0xe1, 0x94, 0x1b, 0x7f, 0x39, 0x0d, 0x63, + 0x26, 0xc5, 0x9c, 0x68, 0xe4, 0x12, 0x8c, 0x6d, 0x38, 0x3e, 0xf5, 0xee, 0x69, 0x09, 0xf0, 0xda, + 0x0c, 0x54, 0x6b, 0x35, 0x4c, 0x59, 0xc8, 0x16, 0x7c, 0xc5, 0x75, 0x1a, 0xdd, 0xba, 0xaf, 0x2e, + 0xf8, 0x0e, 0x07, 0x99, 0xb2, 0x8c, 0xbc, 0x0e, 0xe3, 0x82, 0x73, 0xf0, 0x78, 0x86, 0x46, 0x9f, + 0x2e, 0x0d, 0x72, 0xea, 0x85, 0x08, 0x28, 0xa8, 0x72, 0xa9, 0x21, 0xab, 0x08, 0xaa, 0x31, 0x41, + 0x40, 0xca, 0xdf, 0x23, 0x7d, 0xe4, 0xef, 0xcf, 0xc0, 0x68, 0xc1, 0xf3, 0xa8, 0x2f, 0xfd, 0x75, + 0x27, 0x83, 0x18, 0x21, 0x1e, 0xf5, 0x39, 0x63, 0x0b, 0xcb, 0x4d, 0x81, 0x67, 0xfc, 0x49, 0x1a, + 0x46, 0xf0, 0x4f, 0x7c, 0x30, 0x74, 0xeb, 0x07, 0xda, 0x83, 0xa1, 0x5b, 0x3f, 0x30, 0x11, 0x4a, + 0xae, 0xe3, 0xbd, 0x5f, 0x86, 0xfa, 0x16, 0xbd, 0x47, 0x85, 0x76, 0x23, 0x04, 0x9b, 0x2a, 0x4e, + 0xf0, 0x92, 0x9a, 0x49, 0xf4, 0xd2, 0x3f, 0x0d, 0xe9, 0xcd, 0xaa, 0xe8, 0x31, 0x86, 0x00, 0x71, + 0x3c, 0x33, 0xbd, 0x59, 0xc5, 0xd1, 0x58, 0x2b, 0x2c, 0xbf, 0x79, 0x53, 0xcd, 0xd5, 0xe8, 0x1d, + 0x58, 0xcb, 0x6f, 0xde, 0x34, 0x45, 0x09, 0x1b, 0x5f, 0x6c, 0x33, 0xbe, 0x28, 0x72, 0x17, 0x57, + 0x1c, 0x5f, 0xec, 0x1b, 0xbe, 0x1e, 0x9a, 0x21, 0x02, 0x59, 0x86, 0x09, 0xe1, 0xd5, 0x8c, 0xf8, + 0x8a, 0xd7, 0xb1, 0xf0, 0x7a, 0xe6, 0x14, 0x2a, 0x12, 0x7f, 0x5b, 0x12, 0x13, 0x24, 0x13, 0x12, + 0x89, 0xb7, 0x25, 0x39, 0x85, 0x9e, 0xa9, 0xa0, 0x84, 0x1e, 0xba, 0xa1, 0xeb, 0xaa, 0xea, 0xa1, + 0x8b, 0x11, 0x31, 0x03, 0x04, 0xe3, 0x17, 0xd3, 0x90, 0xab, 0x34, 0xbb, 0xfb, 0x76, 0xfb, 0xfe, + 0xf5, 0x3f, 0xd3, 0x7c, 0xe1, 0x6f, 0x00, 0x1e, 0x12, 0xe2, 0x46, 0x20, 0xd5, 0xc3, 0xbc, 0x69, + 0x42, 0xf8, 0xe0, 0x24, 0x88, 0x46, 0x6e, 0x80, 0x58, 0x98, 0x22, 0x7d, 0xdc, 0x29, 0x9d, 0x80, + 0xa7, 0x12, 0x91, 0x24, 0x02, 0x95, 0xbc, 0x0b, 0x13, 0x61, 0xe2, 0xe6, 0x30, 0x2b, 0x9c, 0x4a, + 0x59, 0x0c, 0xcb, 0xef, 0x5f, 0x37, 0x55, 0x74, 0xe3, 0x5b, 0xa3, 0x30, 0xa9, 0xb6, 0x87, 0x98, + 0x30, 0xe7, 0x35, 0xd9, 0x55, 0x58, 0x18, 0xf5, 0x74, 0xb0, 0x50, 0x1c, 0xa7, 0x17, 0xf4, 0x06, + 0x31, 0x3c, 0x6e, 0xe1, 0x53, 0xa5, 0xbe, 0x6f, 0xb7, 0xf7, 0xbd, 0xb5, 0xe7, 0xcc, 0x59, 0x2f, + 0x04, 0x73, 0x3c, 0x52, 0x80, 0x9c, 0xd3, 0xf1, 0xf6, 0x69, 0xdb, 0x96, 0xaf, 0x17, 0x17, 0x35, + 0x46, 0x9b, 0xa2, 0x30, 0xc6, 0x2b, 0x20, 0x23, 0x6f, 0xc2, 0xa8, 0xd3, 0xa1, 0x6d, 0xcb, 0x16, + 0x67, 0xdc, 0xf3, 0x11, 0x06, 0xb4, 0x5d, 0x28, 0x2b, 0x84, 0x02, 0x99, 0x5c, 0x83, 0xac, 0x73, + 0x18, 0xcc, 0xd7, 0x59, 0x9d, 0xe8, 0xd0, 0xb7, 0x14, 0x12, 0x44, 0x64, 0x04, 0x1f, 0x5b, 0xad, + 0x3d, 0x31, 0x63, 0x3a, 0xc1, 0x1d, 0xab, 0xb5, 0xa7, 0x12, 0x30, 0x44, 0xf2, 0x01, 0x40, 0xc7, + 0xda, 0xa7, 0x6e, 0xad, 0xd1, 0xf5, 0x8f, 0xc4, 0xbc, 0xbd, 0xa0, 0x91, 0x55, 0x58, 0x71, 0xa9, + 0xeb, 0x1f, 0x29, 0xb4, 0xe3, 0x1d, 0x09, 0x24, 0x05, 0x80, 0x96, 0xe5, 0xfb, 0xd4, 0x6d, 0x39, + 0xc2, 0xaa, 0x6a, 0x62, 0x79, 0x49, 0x63, 0x70, 0x2f, 0x28, 0x56, 0x38, 0x28, 0x44, 0xd8, 0x68, + 0xdb, 0xb5, 0x44, 0x12, 0xbf, 0x48, 0xa3, 0x6d, 0x57, 0xeb, 0x25, 0x43, 0x24, 0x9f, 0x87, 0xb1, + 0x86, 0xed, 0xd5, 0x1d, 0xb7, 0x21, 0xd2, 0xc1, 0x9f, 0xd3, 0x68, 0x4a, 0xbc, 0x4c, 0x21, 0x93, + 0xe8, 0xac, 0xb5, 0x22, 0xe2, 0xd5, 0x86, 0xf3, 0x50, 0x24, 0x88, 0xd7, 0x5b, 0x5b, 0x0d, 0x8a, + 0xd5, 0xd6, 0x86, 0x44, 0x6c, 0x2a, 0xf7, 0x6d, 0xbf, 0x69, 0xed, 0x8a, 0x07, 0x5c, 0x7d, 0x2a, + 0x6f, 0x63, 0x91, 0x3a, 0x95, 0x1c, 0x99, 0xbc, 0x05, 0x39, 0xda, 0xf6, 0x5d, 0xab, 0x66, 0x37, + 0x84, 0x37, 0x9a, 0xde, 0x68, 0x76, 0x00, 0x5b, 0xe5, 0x92, 0xda, 0x68, 0xc4, 0x2f, 0x37, 0xc8, + 0x0b, 0x00, 0xfb, 0xb4, 0x4d, 0xb9, 0x83, 0x26, 0xd7, 0xd6, 0x9b, 0x0a, 0xe4, 0xed, 0xec, 0xff, + 0xf0, 0xf3, 0x4b, 0xa9, 0x15, 0x80, 0x9c, 0x27, 0x88, 0x8d, 0x75, 0x38, 0xdb, 0x73, 0x8d, 0x93, + 0x2b, 0x90, 0xdf, 0xb3, 0x84, 0xc2, 0xa8, 0x7e, 0x60, 0xb5, 0xdb, 0xb4, 0x29, 0x76, 0x97, 0x19, + 0x09, 0x2f, 0x72, 0x30, 0xe7, 0x6c, 0x7c, 0x00, 0xf3, 0x49, 0x9d, 0x23, 0x2f, 0xc2, 0xa4, 0x1a, + 0x62, 0x41, 0x30, 0x99, 0xb0, 0x3a, 0xb6, 0x0c, 0xb2, 0x20, 0x18, 0xfc, 0x7a, 0x0a, 0xce, 0xf5, + 0xfb, 0x54, 0xc8, 0x22, 0xe4, 0x3a, 0xae, 0xed, 0xa0, 0x48, 0xc6, 0x37, 0xb4, 0xe0, 0x37, 0x39, + 0x0f, 0xc0, 0x65, 0x07, 0xdf, 0xda, 0x17, 0x46, 0xe3, 0xe6, 0x38, 0x42, 0xb6, 0xac, 0x7d, 0x8f, + 0xbc, 0x06, 0xb3, 0x0d, 0xba, 0x67, 0x75, 0x9b, 0x7e, 0xcd, 0xab, 0x1f, 0xd0, 0x06, 0xfa, 0x69, + 0xa0, 0x31, 0x90, 0x99, 0x17, 0x05, 0x55, 0x09, 0x8f, 0xb5, 0x78, 0xa4, 0x47, 0x8b, 0xef, 0x64, + 0x73, 0xa9, 0x7c, 0xda, 0x44, 0x9b, 0x18, 0xe3, 0x07, 0xd2, 0xb0, 0xd0, 0x6b, 0x6d, 0x90, 0xf7, + 0x92, 0xc6, 0x80, 0xab, 0xbc, 0x55, 0xb8, 0xaa, 0xf2, 0x56, 0x6a, 0x23, 0xcb, 0x10, 0x78, 0x59, + 0x0c, 0xf2, 0x98, 0x96, 0x30, 0x46, 0xd3, 0xb1, 0x3c, 0xef, 0x21, 0x5b, 0xfe, 0x19, 0x25, 0x52, + 0x98, 0x80, 0xa9, 0x34, 0x12, 0x46, 0x3e, 0x07, 0x50, 0x6f, 0x3a, 0x1e, 0xc5, 0x97, 0x65, 0x71, + 0xae, 0x72, 0x53, 0xd3, 0x00, 0xaa, 0x3e, 0x25, 0x22, 0xb4, 0xe8, 0x34, 0xa8, 0x98, 0x40, 0x0b, + 0xce, 0xf4, 0xd8, 0x0c, 0xd8, 0xf4, 0x84, 0x49, 0xf3, 0x64, 0x08, 0xee, 0x6e, 0x90, 0x3a, 0x2f, + 0x3a, 0xe2, 0xe9, 0x5e, 0x6b, 0xe4, 0x08, 0x48, 0xfc, 0x8b, 0x67, 0xdc, 0x85, 0xc1, 0x64, 0xd7, + 0x0d, 0xb8, 0x73, 0xc8, 0xb6, 0xdb, 0x24, 0x4b, 0x30, 0x21, 0x53, 0x6c, 0x30, 0xb9, 0x95, 0x33, + 0x07, 0x01, 0xba, 0x4b, 0x71, 0xf1, 0x60, 0x40, 0x3b, 0xf4, 0xa5, 0x11, 0x27, 0xe2, 0x38, 0x42, + 0xd8, 0x55, 0x5f, 0x54, 0x7d, 0x4e, 0xae, 0x6f, 0x7d, 0x1f, 0x16, 0xa5, 0x3f, 0x93, 0x92, 0xd3, + 0x1f, 0xdf, 0xc8, 0x06, 0xb5, 0x8f, 0x00, 0x7a, 0x3e, 0x88, 0x86, 0xe1, 0xdf, 0xec, 0x84, 0x96, + 0x5f, 0x9d, 0x38, 0xa1, 0xc5, 0x4f, 0x72, 0x09, 0x66, 0x5c, 0x6e, 0x1b, 0xe7, 0x3b, 0x62, 0x3c, + 0x71, 0xa6, 0xcc, 0x29, 0x0e, 0xde, 0x72, 0x70, 0x4c, 0x45, 0xbb, 0xee, 0x04, 0x03, 0xa6, 0xec, + 0xeb, 0xe4, 0x2a, 0x8c, 0xb3, 0x7d, 0x1d, 0x83, 0x28, 0x44, 0x4c, 0xae, 0x11, 0x0f, 0x4f, 0x49, + 0x33, 0xf7, 0xb1, 0xf8, 0x5b, 0xf0, 0xfa, 0x27, 0x29, 0xc9, 0x4c, 0x3d, 0x55, 0xc8, 0x19, 0x18, + 0x73, 0xdc, 0x7d, 0xa5, 0x6b, 0xa3, 0x8e, 0xbb, 0xcf, 0xfa, 0x75, 0x19, 0xf2, 0xdc, 0x03, 0x80, + 0xbb, 0x56, 0x7b, 0x47, 0x6d, 0x7e, 0xed, 0xcc, 0x99, 0xd3, 0x1c, 0x8e, 0x79, 0x04, 0x8f, 0xda, + 0x75, 0x86, 0xe9, 0x79, 0x4e, 0x4d, 0x8d, 0x9c, 0x22, 0xba, 0x3d, 0xed, 0x79, 0x4e, 0x18, 0x42, + 0xa5, 0x41, 0x56, 0x60, 0x8a, 0xf1, 0xa9, 0xc9, 0x4d, 0x4c, 0x1c, 0x7a, 0xe7, 0xe3, 0x87, 0xde, + 0x51, 0xbb, 0x2e, 0x9b, 0x68, 0x4e, 0x7a, 0xca, 0x2f, 0xd1, 0x9b, 0x9f, 0x4d, 0xc3, 0xe9, 0x64, + 0x74, 0x9c, 0x2f, 0x56, 0x09, 0x3a, 0xc2, 0x70, 0x15, 0xa4, 0x39, 0xce, 0x20, 0xdc, 0xd7, 0x3f, + 0xa9, 0xb5, 0xe9, 0xc4, 0xd6, 0xbe, 0x0a, 0xb3, 0xc8, 0x48, 0x88, 0x19, 0x4d, 0xdb, 0xf3, 0x85, + 0x0b, 0xbb, 0x39, 0xc3, 0x0a, 0xf8, 0x06, 0xb7, 0xce, 0xc0, 0xe4, 0x65, 0x98, 0x96, 0x5b, 0x94, + 0xf3, 0xb0, 0xcd, 0x2a, 0xe6, 0xfb, 0xd3, 0x94, 0x80, 0x6e, 0x22, 0x90, 0x9c, 0x82, 0x51, 0xab, + 0xd3, 0x61, 0x55, 0xf2, 0x6d, 0x69, 0xc4, 0xea, 0x74, 0xca, 0x0d, 0x72, 0x11, 0xa6, 0xd0, 0xed, + 0xa7, 0xb6, 0x87, 0x06, 0x17, 0xc2, 0xd0, 0xca, 0x9c, 0x44, 0x20, 0x37, 0xc2, 0xf0, 0xd8, 0x87, + 0xc0, 0x68, 0x25, 0xca, 0x18, 0xa2, 0x80, 0xd5, 0x91, 0x08, 0x62, 0x64, 0x3e, 0x0f, 0x33, 0xe2, + 0x70, 0x14, 0x3b, 0x3c, 0x52, 0x8a, 0xf5, 0xc7, 0xa4, 0x56, 0xd4, 0x05, 0x8d, 0x9b, 0x20, 0x40, + 0xe5, 0x86, 0xa4, 0xfc, 0xfd, 0x14, 0x9c, 0x4a, 0x3c, 0x5d, 0xc9, 0xd7, 0x80, 0x7b, 0x41, 0xf8, + 0x4e, 0xcd, 0xa5, 0x75, 0xbb, 0x63, 0xa3, 0x9f, 0x38, 0xd7, 0x29, 0x2d, 0xf7, 0x3b, 0x97, 0xd1, + 0xa3, 0x62, 0xcb, 0x31, 0x03, 0x22, 0x7e, 0x2d, 0xce, 0xbb, 0x11, 0xf0, 0xe2, 0x47, 0x70, 0x2a, + 0x11, 0x35, 0xe1, 0xba, 0xfa, 0xba, 0x9e, 0xa2, 0x49, 0x3e, 0x12, 0x44, 0x3a, 0xad, 0x5c, 0x63, + 0x45, 0xf7, 0x1a, 0xb2, 0x77, 0x91, 0x63, 0x98, 0xac, 0x46, 0x57, 0x65, 0x92, 0x24, 0x29, 0x89, + 0x06, 0x2d, 0xcc, 0x35, 0x79, 0x2c, 0x27, 0x10, 0x24, 0xac, 0x92, 0x54, 0xc2, 0x2a, 0x11, 0x9c, + 0xfe, 0x6e, 0x5a, 0x9e, 0xa8, 0x2b, 0x8e, 0xe3, 0x7b, 0xbe, 0x6b, 0x75, 0x34, 0x29, 0x99, 0xb4, + 0xe0, 0xac, 0x63, 0x75, 0xfd, 0x83, 0xe5, 0x1a, 0xfb, 0xd7, 0x71, 0xa5, 0xdb, 0x5c, 0x5d, 0x1a, + 0x1c, 0x4d, 0x2c, 0x5f, 0xd3, 0xbf, 0xac, 0x02, 0xc3, 0x2e, 0xa8, 0xc8, 0xec, 0x00, 0x50, 0xb8, + 0xae, 0x3d, 0x67, 0x9e, 0xe1, 0x3c, 0x63, 0x58, 0x64, 0x0d, 0xb4, 0x14, 0xd3, 0x89, 0x62, 0xb2, + 0x92, 0x0e, 0x5a, 0xe7, 0x3a, 0xb1, 0xab, 0xe4, 0xa3, 0x7e, 0x1f, 0xc6, 0xed, 0x86, 0x88, 0x91, + 0x25, 0x84, 0x65, 0x5d, 0x40, 0x2b, 0x37, 0x78, 0xc8, 0xac, 0x90, 0x07, 0x93, 0xb4, 0x6d, 0x01, + 0x5d, 0x99, 0xd2, 0xee, 0x13, 0xc6, 0x8a, 0xdc, 0xbc, 0xe3, 0x64, 0xb1, 0x6c, 0xc1, 0xa7, 0x61, + 0xd4, 0x53, 0x82, 0x76, 0x99, 0xe2, 0x97, 0xf1, 0x17, 0xe0, 0xf2, 0xb0, 0x63, 0x44, 0xde, 0x00, + 0xd2, 0x63, 0xc0, 0xc7, 0xcd, 0x59, 0x2b, 0x36, 0x6e, 0x2f, 0x82, 0x1a, 0xf8, 0xc8, 0x96, 0xc7, + 0xa3, 0x84, 0x6d, 0xbb, 0xb6, 0xf1, 0x1e, 0x4c, 0xeb, 0x17, 0x28, 0xf2, 0x1a, 0x64, 0x03, 0xae, + 0xd3, 0x81, 0xa2, 0x4f, 0x45, 0x62, 0xbc, 0x4d, 0x44, 0x32, 0xfe, 0x79, 0x1a, 0xe6, 0x12, 0xae, + 0x51, 0xe4, 0x23, 0x98, 0x93, 0x0b, 0x84, 0x6f, 0x61, 0x7c, 0xe2, 0xf8, 0xd2, 0xb8, 0x92, 0xb4, + 0x34, 0x10, 0x2d, 0x61, 0xfa, 0x66, 0xc5, 0xa2, 0x08, 0xcb, 0xff, 0xfc, 0x2c, 0x07, 0xf2, 0x21, + 0x9c, 0x16, 0x19, 0x1b, 0x95, 0x55, 0x51, 0x73, 0xe9, 0x9e, 0x38, 0x5e, 0x5e, 0x8c, 0x8d, 0x9e, + 0x5d, 0x57, 0x9a, 0x63, 0xd2, 0xbd, 0xb5, 0xe7, 0xcc, 0x79, 0x2f, 0x01, 0x1e, 0x5d, 0x69, 0x7f, + 0x2f, 0x05, 0xc6, 0xe0, 0xf1, 0x42, 0x81, 0x28, 0x3a, 0xe0, 0x4c, 0x20, 0x52, 0x46, 0xef, 0x22, + 0x4c, 0xb9, 0x74, 0xcf, 0xa5, 0xde, 0x41, 0x4d, 0xcd, 0x5e, 0x3d, 0x29, 0x80, 0x72, 0x60, 0xa4, + 0xe7, 0xef, 0x10, 0x6a, 0xd3, 0x1c, 0xbb, 0x72, 0x73, 0x85, 0x97, 0x20, 0x32, 0x6e, 0x05, 0x1b, + 0x48, 0xe2, 0x3c, 0x84, 0xa9, 0xb3, 0x53, 0x4a, 0xea, 0xec, 0x3b, 0xd9, 0x5c, 0x3a, 0x9f, 0x31, + 0x85, 0x7f, 0xf2, 0x9e, 0xdd, 0xa4, 0xc6, 0xaf, 0xa5, 0x60, 0xb1, 0xf7, 0xe0, 0x91, 0x8f, 0x14, + 0xc5, 0x7f, 0x86, 0x87, 0x67, 0x1a, 0x30, 0xde, 0xaa, 0x8e, 0x54, 0xb8, 0xcc, 0x46, 0x93, 0x15, + 0x0a, 0x96, 0x4f, 0xa2, 0xbd, 0x7c, 0x4b, 0xea, 0x0d, 0xd8, 0x11, 0x7d, 0xff, 0x3a, 0xb9, 0x02, + 0x63, 0x5c, 0x55, 0x20, 0x1b, 0x3a, 0xa3, 0x35, 0xf4, 0xfe, 0x75, 0x53, 0x96, 0x1b, 0xdf, 0x4e, + 0x05, 0xb7, 0xab, 0x68, 0xf3, 0xef, 0x5f, 0x27, 0x9f, 0x1b, 0x4e, 0x85, 0x9f, 0x93, 0x2a, 0xfc, + 0x40, 0x7d, 0xff, 0x79, 0x4d, 0x7d, 0xff, 0x52, 0xff, 0x71, 0x12, 0x72, 0x5c, 0x34, 0x9d, 0xd4, + 0xbf, 0x4c, 0xc1, 0xf9, 0xbe, 0x14, 0xe4, 0x1c, 0xe4, 0x0a, 0x95, 0xf2, 0x56, 0x38, 0xb3, 0xec, + 0x6b, 0x91, 0x10, 0x72, 0x1b, 0xc6, 0x57, 0x2c, 0xcf, 0xae, 0xb3, 0x05, 0x2c, 0x1a, 0xf2, 0x4a, + 0xff, 0x86, 0x04, 0xe8, 0x6b, 0xcf, 0x99, 0x21, 0x2d, 0xa9, 0xc1, 0x2c, 0x7e, 0x05, 0xb1, 0x74, + 0x2d, 0xd1, 0x63, 0x27, 0xc6, 0x30, 0x46, 0xc6, 0x76, 0x98, 0x18, 0x30, 0xfa, 0xf1, 0x3d, 0x80, + 0x0b, 0x83, 0x1a, 0x78, 0x02, 0x2f, 0xf7, 0xcb, 0x90, 0xab, 0xc8, 0x1b, 0x96, 0x92, 0xad, 0x4d, + 0xde, 0xa6, 0xcc, 0xa0, 0xd4, 0xf8, 0xab, 0x29, 0x79, 0x36, 0x0c, 0xee, 0x88, 0x12, 0x45, 0xb2, + 0xd1, 0x3f, 0x8a, 0x64, 0xe3, 0x13, 0x46, 0x91, 0x34, 0x7e, 0x51, 0xc4, 0xa0, 0x29, 0x37, 0x2a, + 0x91, 0xf8, 0xdd, 0x4f, 0xfa, 0x20, 0xb9, 0xaa, 0xad, 0xce, 0x8b, 0x4a, 0x38, 0xda, 0x78, 0x5d, + 0xbd, 0xdf, 0x25, 0x95, 0xa5, 0xfa, 0xcf, 0xd3, 0x70, 0xae, 0x1f, 0x79, 0x62, 0xa8, 0xf1, 0xd4, + 0xc9, 0x42, 0x8d, 0x5f, 0x81, 0x1c, 0x87, 0xe9, 0xa9, 0x85, 0x04, 0x29, 0x1b, 0x70, 0x59, 0x4c, + 0x2e, 0xc2, 0x68, 0xa1, 0x58, 0x0d, 0x43, 0x6f, 0xa2, 0x06, 0xdd, 0xaa, 0x7b, 0xa8, 0x9b, 0x15, + 0x45, 0xe4, 0xab, 0xf1, 0x68, 0xb3, 0x22, 0xe6, 0xe6, 0xf3, 0x49, 0x09, 0xc2, 0xa5, 0xb7, 0x30, + 0xb6, 0x37, 0x0c, 0x67, 0x24, 0x22, 0x84, 0x98, 0xf1, 0xc8, 0xb5, 0x06, 0x8c, 0x56, 0x5c, 0xea, + 0x51, 0x5f, 0xd5, 0x6e, 0x77, 0x10, 0x62, 0x8a, 0x12, 0xa1, 0x7b, 0xb6, 0x8e, 0xb8, 0xe1, 0xee, + 0xa8, 0xea, 0xd7, 0x80, 0xca, 0x6a, 0x06, 0x36, 0x15, 0x14, 0xe3, 0x9b, 0x29, 0x98, 0x4f, 0x6a, + 0x16, 0x39, 0x07, 0xd9, 0x76, 0x62, 0x9c, 0xdc, 0x36, 0x37, 0x1f, 0x54, 0xb3, 0xa3, 0xab, 0x2a, + 0x7d, 0x2d, 0x69, 0x7a, 0x3b, 0x4c, 0x9a, 0xbe, 0x24, 0x37, 0xdb, 0x4c, 0x2c, 0xb2, 0x2e, 0xfe, + 0x67, 0x14, 0x00, 0xca, 0x8d, 0xca, 0x66, 0x87, 0x47, 0x1b, 0xba, 0x01, 0x59, 0xd6, 0xac, 0xc8, + 0x62, 0x64, 0xcb, 0xa1, 0x70, 0x6f, 0x5d, 0x20, 0xf1, 0x56, 0x79, 0x56, 0xab, 0x69, 0x22, 0xb2, + 0xb1, 0x03, 0xd3, 0x3a, 0x06, 0x59, 0xd5, 0xfd, 0xd3, 0xc3, 0x8c, 0xb3, 0x2b, 0x8e, 0xc3, 0x9f, + 0x95, 0x57, 0xce, 0x7e, 0xe7, 0x78, 0x09, 0xd8, 0x4f, 0x4e, 0x93, 0xe4, 0xbf, 0x6e, 0xfc, 0x64, + 0x1a, 0xe6, 0x43, 0xbb, 0x50, 0xf9, 0x49, 0x3c, 0xb3, 0xb6, 0x52, 0x05, 0xcd, 0x96, 0x67, 0x29, + 0x96, 0xd4, 0x51, 0x76, 0xb0, 0x8f, 0x09, 0xc1, 0x6d, 0x58, 0xe8, 0x85, 0x4f, 0x5e, 0x8b, 0xa5, + 0x5d, 0x13, 0xfe, 0x4b, 0x41, 0x7e, 0x36, 0x25, 0x0b, 0xdb, 0x3f, 0x4d, 0xc1, 0xa2, 0x78, 0x0c, + 0xbd, 0x67, 0xd9, 0x6d, 0x4c, 0x35, 0x5b, 0xa7, 0x4f, 0xc7, 0xc8, 0xee, 0xb6, 0xb6, 0x2d, 0xbd, + 0xac, 0xbf, 0x79, 0xc7, 0x6a, 0xeb, 0xdd, 0x5b, 0x72, 0x05, 0x3d, 0xd5, 0xea, 0x7c, 0xf1, 0x66, + 0xb9, 0x51, 0x73, 0x9b, 0x01, 0x54, 0xa3, 0x66, 0xc4, 0x30, 0xfe, 0x12, 0xbc, 0xd0, 0xbf, 0x02, + 0xf2, 0x15, 0x98, 0x2a, 0xec, 0xd3, 0xb6, 0xbf, 0xdd, 0xd9, 0x77, 0xad, 0x06, 0x95, 0x97, 0x46, + 0xa9, 0xd9, 0x56, 0xcb, 0xb8, 0x77, 0x9e, 0x30, 0xb2, 0x65, 0xf0, 0x5a, 0x57, 0x10, 0x69, 0x16, + 0x07, 0x2a, 0x37, 0xe3, 0x07, 0x52, 0x40, 0xe2, 0x3c, 0xc8, 0x4d, 0x98, 0xdc, 0xde, 0x2a, 0x56, + 0x7d, 0xcb, 0xf5, 0xd7, 0x9c, 0xae, 0x2b, 0xbc, 0xde, 0xb8, 0xcd, 0xa5, 0x5f, 0x67, 0x3b, 0x83, + 0xeb, 0xd7, 0x0e, 0x9c, 0xae, 0x6b, 0x6a, 0x78, 0x18, 0x42, 0x92, 0xd2, 0xc3, 0x86, 0x75, 0xa4, + 0x87, 0x90, 0x14, 0x30, 0x2d, 0x84, 0xa4, 0x80, 0x19, 0x7f, 0x3b, 0x05, 0xcf, 0x4b, 0xb5, 0x6a, + 0x23, 0xa1, 0x2d, 0x45, 0xf4, 0x2c, 0x70, 0xa5, 0xd7, 0x7f, 0x3f, 0xd9, 0x74, 0x56, 0x3a, 0xdf, + 0x60, 0x03, 0x51, 0x48, 0xe5, 0xb4, 0x98, 0x67, 0xdb, 0x77, 0x3a, 0x43, 0x78, 0xdf, 0xe4, 0x83, + 0x19, 0xf5, 0x9d, 0x0e, 0xb2, 0x40, 0x4a, 0x83, 0xc2, 0xbc, 0xda, 0x38, 0xd9, 0x62, 0x72, 0x0f, + 0xc6, 0x84, 0x5b, 0xa4, 0x90, 0xf6, 0xa4, 0xa7, 0x6c, 0x9f, 0x3e, 0xad, 0xcc, 0x48, 0x17, 0x1f, + 0xe1, 0x75, 0x6e, 0x4a, 0x1e, 0xc6, 0x4f, 0xa4, 0x60, 0x82, 0x09, 0x0f, 0x18, 0x88, 0xe5, 0x49, + 0x97, 0xb4, 0x2e, 0x07, 0x4a, 0x0d, 0x46, 0xc0, 0x7e, 0xa8, 0xc3, 0xf5, 0x4d, 0x98, 0x89, 0x10, + 0x10, 0x03, 0x8d, 0xbb, 0x9b, 0x36, 0xcf, 0x58, 0x2c, 0x95, 0x0b, 0x1a, 0xcc, 0xf8, 0xd7, 0x52, + 0x30, 0xbf, 0x79, 0xe8, 0x5b, 0xe5, 0x56, 0xc7, 0x71, 0x7d, 0xb3, 0xdb, 0x94, 0xdf, 0x3b, 0x13, + 0x88, 0xa4, 0x7e, 0x9e, 0x5b, 0x9e, 0x72, 0x81, 0x48, 0xc0, 0xcc, 0xa0, 0x94, 0xac, 0x41, 0x4e, + 0x9c, 0x2f, 0x32, 0xc3, 0xbe, 0x7c, 0x4d, 0xd2, 0x19, 0x0b, 0x24, 0xd6, 0x13, 0xdc, 0xc2, 0x04, + 0x8d, 0x19, 0x50, 0x1b, 0x7f, 0x92, 0x82, 0x33, 0x3d, 0x68, 0xc8, 0x7b, 0x30, 0x82, 0x66, 0x3c, + 0x62, 0xf6, 0xce, 0xf5, 0xa8, 0xc2, 0xaf, 0x1f, 0xdc, 0xbf, 0xce, 0x0f, 0xa2, 0x16, 0xfb, 0x61, + 0x72, 0x2a, 0xf2, 0x11, 0x8c, 0x17, 0x1a, 0x0d, 0x71, 0x2f, 0x49, 0x6b, 0xf7, 0x92, 0x1e, 0x35, + 0x5e, 0x0d, 0xf0, 0xf9, 0xbd, 0x84, 0x3f, 0x28, 0x37, 0x1a, 0x22, 0x91, 0xba, 0x19, 0xf2, 0x5b, + 0x7c, 0x17, 0xa6, 0x75, 0xe4, 0x13, 0xdd, 0x4b, 0xbe, 0x9d, 0x82, 0xbc, 0xde, 0x86, 0x4f, 0xc7, + 0x39, 0x29, 0x69, 0x9a, 0x07, 0x2c, 0xaa, 0x9f, 0x4e, 0xc3, 0xa9, 0xc4, 0x11, 0x26, 0x6f, 0xc0, + 0x68, 0xa1, 0xd3, 0x29, 0x97, 0xc4, 0xaa, 0x12, 0x02, 0x0f, 0xea, 0x32, 0xb5, 0x6b, 0x1b, 0x47, + 0x22, 0x37, 0x20, 0x87, 0x2b, 0x93, 0x11, 0xa4, 0x43, 0xb7, 0x6d, 0xae, 0xe5, 0x8c, 0xb8, 0x6d, + 0x4b, 0x44, 0x72, 0x0b, 0xa6, 0x85, 0x9f, 0x82, 0x49, 0xf7, 0xe9, 0xa3, 0x20, 0x7e, 0x10, 0x86, + 0x38, 0x92, 0x5e, 0x0d, 0x35, 0x97, 0x97, 0xa9, 0x96, 0xfa, 0x3a, 0x15, 0xa6, 0x01, 0x64, 0x3c, + 0x55, 0x4e, 0xdc, 0x77, 0x9c, 0xa7, 0x01, 0xc4, 0x46, 0xf4, 0xe0, 0x15, 0xa3, 0x0c, 0xa6, 0xab, + 0xe0, 0x79, 0xf6, 0x7e, 0xbb, 0x45, 0xdb, 0xfe, 0xa7, 0x37, 0x5d, 0x61, 0x1d, 0x43, 0x4d, 0xd7, + 0xb7, 0xb2, 0xfc, 0x63, 0x8e, 0x92, 0x0d, 0xc8, 0x74, 0x5b, 0x82, 0x31, 0xee, 0x21, 0x21, 0xbf, + 0x8c, 0xf3, 0x89, 0x4d, 0xe0, 0x38, 0xf7, 0xaf, 0x73, 0xf1, 0x85, 0xdb, 0x13, 0x79, 0xa6, 0x24, + 0x25, 0xf7, 0x61, 0xa2, 0xd8, 0xa4, 0x56, 0xbb, 0xdb, 0x61, 0x9b, 0xf4, 0x10, 0x1a, 0x8a, 0x05, + 0xd1, 0x97, 0xc9, 0x3a, 0x27, 0xab, 0xf9, 0x76, 0x8b, 0xe2, 0x4e, 0xae, 0x32, 0x22, 0x5b, 0x81, + 0x89, 0x41, 0x16, 0x95, 0x5f, 0x9f, 0xe9, 0x33, 0x3e, 0x51, 0x20, 0xd2, 0xe9, 0xf6, 0x33, 0xc2, + 0x06, 0xa1, 0x06, 0xd3, 0xeb, 0x96, 0xe7, 0x6f, 0xb9, 0x56, 0xdb, 0x43, 0x27, 0xe7, 0x21, 0x3c, + 0xcf, 0x64, 0x16, 0xa1, 0x19, 0xf4, 0x2c, 0xf0, 0x03, 0x52, 0x6c, 0x73, 0x84, 0x1d, 0x93, 0x97, + 0x6e, 0xd9, 0x6d, 0xab, 0x69, 0x7f, 0x43, 0x5a, 0x62, 0x71, 0x79, 0x69, 0x4f, 0x02, 0xcd, 0xb0, + 0xdc, 0xf8, 0x72, 0x6c, 0xde, 0x78, 0x2b, 0x27, 0x60, 0x4c, 0x18, 0xdf, 0x72, 0x63, 0xd4, 0xca, + 0xea, 0x46, 0xa9, 0xbc, 0x71, 0x3b, 0x9f, 0x22, 0xd3, 0x00, 0x15, 0x73, 0xb3, 0xb8, 0x5a, 0xad, + 0xb2, 0xdf, 0x69, 0xf6, 0x5b, 0x58, 0xaa, 0xde, 0xda, 0x5e, 0xcf, 0x67, 0x14, 0x63, 0xd5, 0xac, + 0xf1, 0x4f, 0x52, 0x70, 0x3a, 0x79, 0x2a, 0xc9, 0x16, 0xa0, 0xb9, 0xb2, 0xd0, 0x2b, 0xde, 0xec, + 0x3b, 0xef, 0x89, 0xe0, 0xa8, 0xd9, 0xb3, 0xcf, 0xcd, 0x69, 0xd3, 0xf2, 0x15, 0x25, 0xcc, 0xe6, + 0x63, 0x37, 0x8c, 0x22, 0x2c, 0xf4, 0xe2, 0xa1, 0x77, 0x75, 0x06, 0x26, 0x0a, 0x95, 0xca, 0x7a, + 0xb9, 0x58, 0xd8, 0x2a, 0x6f, 0x6e, 0xe4, 0x53, 0x64, 0x1c, 0x46, 0x6e, 0x9b, 0x9b, 0xdb, 0x95, + 0x7c, 0xda, 0xf8, 0x6b, 0x29, 0x98, 0x2a, 0xb7, 0x7d, 0xba, 0xcf, 0x9f, 0xc2, 0x9f, 0xf4, 0xe3, + 0x7b, 0x5b, 0xfb, 0xf8, 0x16, 0x02, 0xc3, 0xfe, 0xa0, 0x82, 0xa1, 0xbe, 0xbc, 0x7f, 0x96, 0x82, + 0xd9, 0x18, 0x0d, 0xa9, 0xc2, 0x58, 0x61, 0xa7, 0xba, 0x59, 0x2e, 0x15, 0x45, 0xcb, 0xa4, 0x54, + 0x2e, 0xa0, 0xf1, 0x5a, 0xb8, 0xdd, 0xdc, 0x43, 0xaf, 0xe6, 0xd8, 0x0d, 0x25, 0x22, 0xfa, 0xda, + 0x73, 0xa6, 0xe4, 0x84, 0x27, 0xd9, 0x37, 0xba, 0x2e, 0x45, 0xb6, 0x69, 0x4d, 0xa3, 0x19, 0xc0, + 0xe3, 0x8c, 0x79, 0x0e, 0x5c, 0x56, 0x1e, 0x67, 0x1d, 0xf2, 0x5b, 0x99, 0x82, 0x09, 0x71, 0x6b, + 0xc1, 0x0b, 0xc1, 0x8f, 0xa5, 0x60, 0xa1, 0x57, 0x5b, 0xd9, 0x45, 0x48, 0x37, 0xa2, 0x3d, 0x1d, + 0x84, 0xc7, 0xd2, 0xad, 0x67, 0x25, 0x1a, 0x79, 0x0f, 0x26, 0x78, 0x52, 0xb1, 0xea, 0x8d, 0x6d, + 0xb3, 0x2c, 0x16, 0x08, 0xfa, 0xb7, 0x89, 0x3c, 0xc1, 0xde, 0x8d, 0x48, 0xd2, 0x58, 0x15, 0xdf, + 0xf8, 0x91, 0x14, 0x2c, 0xf6, 0xee, 0x22, 0x3b, 0x63, 0xb6, 0x98, 0x64, 0x1e, 0x5a, 0x21, 0xe2, + 0x19, 0x83, 0xd2, 0x7a, 0xc4, 0x0c, 0x31, 0x40, 0x64, 0x44, 0x91, 0x54, 0xc4, 0x6a, 0x82, 0x01, + 0x9d, 0x48, 0x22, 0x1a, 0xff, 0x66, 0x1a, 0x4e, 0xb3, 0xe5, 0xd3, 0xa4, 0x9e, 0x57, 0xe8, 0xfa, + 0x07, 0xb4, 0xed, 0x0b, 0x81, 0x8a, 0x7c, 0x0e, 0x46, 0x0f, 0x4e, 0xa6, 0x0b, 0xe4, 0xe8, 0x84, + 0x00, 0x6e, 0xc9, 0xf2, 0xdd, 0x98, 0xfd, 0x4d, 0xce, 0x83, 0x92, 0xd0, 0x01, 0x77, 0xd4, 0x49, + 0x73, 0xbc, 0x13, 0xa4, 0x75, 0xf8, 0x3c, 0x8c, 0xe0, 0xdd, 0x5f, 0x6c, 0x8c, 0x52, 0xa0, 0x4d, + 0x6e, 0x19, 0x6a, 0x06, 0x4c, 0x4e, 0x40, 0xae, 0x01, 0x84, 0x41, 0x98, 0xc4, 0xce, 0x27, 0x2f, + 0xd1, 0x41, 0x1c, 0x26, 0x73, 0xbc, 0xb5, 0x67, 0x89, 0xc8, 0x46, 0xaf, 0xc2, 0xac, 0x1c, 0x92, + 0x8e, 0x74, 0x33, 0xe5, 0x9a, 0x08, 0x73, 0x86, 0x17, 0x94, 0x3b, 0xc2, 0xd5, 0xd4, 0xf8, 0xef, + 0xd3, 0x30, 0xbe, 0xc3, 0xc4, 0x04, 0xbc, 0xfc, 0xf6, 0xbf, 0x4c, 0x2f, 0xc3, 0xc4, 0xba, 0x63, + 0x35, 0xf4, 0xb4, 0xe6, 0x68, 0x8a, 0xd7, 0x74, 0x2c, 0xf9, 0x08, 0xe0, 0x99, 0x2a, 0xd2, 0x00, + 0x33, 0xc2, 0x3b, 0x30, 0xca, 0x1f, 0x40, 0x85, 0x9a, 0x46, 0x0a, 0x8a, 0x41, 0x8b, 0xae, 0xf2, + 0x62, 0x45, 0xd9, 0xcc, 0x9f, 0x50, 0x55, 0xa9, 0x45, 0x38, 0xba, 0x2b, 0x57, 0xfd, 0x91, 0xe1, + 0xae, 0xfa, 0x8a, 0x43, 0xdf, 0xe8, 0x30, 0x0e, 0x7d, 0x8b, 0x6f, 0xc1, 0x84, 0xd2, 0x9e, 0x13, + 0xc9, 0x8d, 0x3f, 0x98, 0x86, 0x29, 0xec, 0x55, 0xf0, 0x4a, 0xf4, 0x6c, 0x2a, 0x2e, 0xde, 0xd6, + 0x14, 0x17, 0x0b, 0xea, 0x7c, 0xf1, 0x9e, 0xf5, 0xd1, 0x58, 0xdc, 0x81, 0xd9, 0x18, 0x22, 0x79, + 0x13, 0x46, 0x58, 0xf3, 0xe5, 0x45, 0x2f, 0x1f, 0x5d, 0x01, 0x61, 0xf0, 0x07, 0xd6, 0x71, 0xcf, + 0xe4, 0xd8, 0xc6, 0xff, 0x96, 0x82, 0x49, 0x11, 0x95, 0xab, 0xbd, 0xe7, 0x0c, 0x1c, 0xce, 0x4b, + 0xd1, 0xe1, 0xe4, 0x46, 0xf1, 0x62, 0x38, 0xff, 0xdf, 0x1e, 0xc4, 0xb7, 0xb4, 0x41, 0x3c, 0x13, + 0xb8, 0x82, 0xca, 0xee, 0xf4, 0x19, 0xc3, 0x5f, 0xc7, 0xe0, 0x08, 0x3a, 0x22, 0xf9, 0x2a, 0x8c, + 0x6f, 0xd0, 0x87, 0xda, 0x7d, 0xe9, 0xd2, 0xff, 0x43, 0xdc, 0xf5, 0xee, 0x36, 0x92, 0x14, 0xf1, + 0x8c, 0xc7, 0xc9, 0x25, 0x95, 0x7f, 0x9d, 0xde, 0xdc, 0x5e, 0xd8, 0xcd, 0xe5, 0x8e, 0x08, 0x4e, + 0xec, 0xc0, 0x1d, 0x1c, 0x7f, 0x04, 0x0b, 0x3a, 0x4e, 0x13, 0xbb, 0x1d, 0x9b, 0x78, 0x66, 0xbc, + 0xd3, 0xe3, 0x0d, 0xbb, 0x80, 0x46, 0xde, 0x64, 0xc8, 0x0e, 0x78, 0xc7, 0x3e, 0xc7, 0xbe, 0x63, + 0x79, 0x00, 0x24, 0xc4, 0x17, 0xc4, 0x0b, 0xf0, 0x85, 0x2f, 0xbc, 0xc9, 0x09, 0x84, 0x74, 0x4f, + 0x80, 0x60, 0x1f, 0xe3, 0x3e, 0xa1, 0xae, 0xee, 0x9e, 0xe9, 0x19, 0xc7, 0xd1, 0xfe, 0x93, 0xf8, + 0x66, 0x57, 0x55, 0xb7, 0xdb, 0xfd, 0xa7, 0xba, 0xbb, 0xba, 0xea, 0x57, 0x0b, 0x2a, 0xfd, 0x20, + 0x17, 0x94, 0x6b, 0x0a, 0xb7, 0x9a, 0x2c, 0xf9, 0x2c, 0x9e, 0x7b, 0xc4, 0x29, 0xaa, 0x14, 0x57, + 0xa6, 0x72, 0xb1, 0x17, 0x99, 0xfa, 0xca, 0x57, 0x0b, 0xe3, 0x3c, 0xfe, 0x6e, 0x03, 0x14, 0x6e, + 0x2e, 0x62, 0x01, 0x26, 0x25, 0xec, 0x4a, 0x65, 0x39, 0x46, 0x92, 0x39, 0xc7, 0x15, 0x89, 0xbe, + 0xa7, 0x4c, 0xa2, 0xb5, 0xc5, 0xa1, 0xba, 0x68, 0x1c, 0x6d, 0x28, 0x37, 0x92, 0xf3, 0x64, 0x38, + 0x90, 0xba, 0xd8, 0xc6, 0x04, 0xdb, 0xbb, 0x05, 0x75, 0x41, 0x7a, 0x05, 0x74, 0x36, 0x69, 0x0a, + 0x81, 0x39, 0xd7, 0xb1, 0xfa, 0xcb, 0xbb, 0x8e, 0x2d, 0xbf, 0x84, 0xeb, 0xd8, 0xca, 0x73, 0xba, + 0x8e, 0xf5, 0x60, 0x2d, 0xcd, 0x3e, 0x4d, 0xb2, 0xe9, 0x68, 0xf2, 0x14, 0x1d, 0x4b, 0x0a, 0x43, + 0x96, 0xe8, 0xea, 0x8e, 0xe6, 0xc9, 0xf1, 0xc6, 0x0d, 0x33, 0x97, 0x37, 0x87, 0x3b, 0x27, 0x2a, + 0x17, 0x86, 0x2f, 0x6b, 0x40, 0xe7, 0x2b, 0xa0, 0x3f, 0x86, 0x75, 0xa9, 0x82, 0xe3, 0xc9, 0xe5, + 0x27, 0xca, 0xef, 0x48, 0xc6, 0xd3, 0x18, 0x64, 0x33, 0x9e, 0x46, 0x92, 0xc3, 0xcb, 0x4f, 0x86, + 0xf4, 0x57, 0x70, 0x03, 0x07, 0x60, 0x9c, 0x4c, 0xd2, 0xd1, 0x79, 0x8c, 0x50, 0x02, 0x83, 0xa1, + 0x02, 0x4b, 0x7e, 0x1f, 0x51, 0xfd, 0xe7, 0xd9, 0x0b, 0x06, 0x0a, 0xdd, 0x7b, 0x7a, 0x28, 0xd9, + 0x93, 0x82, 0x34, 0x02, 0x62, 0x96, 0xff, 0xf5, 0x6c, 0x38, 0x54, 0x63, 0xef, 0x60, 0xb2, 0xcf, + 0x0a, 0x6f, 0x41, 0xc5, 0x5b, 0x45, 0xc5, 0xad, 0xd9, 0x70, 0x48, 0x7f, 0x08, 0x30, 0xca, 0xe2, + 0x27, 0xe9, 0xe5, 0xa5, 0x7c, 0x4e, 0xc8, 0x5d, 0xf3, 0x0a, 0xaa, 0xd9, 0x8d, 0xa3, 0xcc, 0x93, + 0x44, 0xfa, 0x7d, 0x40, 0x37, 0x5c, 0xf4, 0x4f, 0xc7, 0x19, 0xb0, 0xac, 0xe0, 0xcf, 0x34, 0xb1, + 0x3c, 0x9c, 0x17, 0x09, 0x4f, 0x7f, 0xaf, 0x5d, 0xde, 0x1e, 0xc2, 0x8e, 0x8a, 0xbf, 0x39, 0x4d, + 0xa7, 0x8f, 0xd5, 0xe9, 0xf7, 0x55, 0x8e, 0xce, 0xc6, 0xf1, 0xf7, 0x8f, 0x75, 0x00, 0xf7, 0x94, + 0xeb, 0xd0, 0xaf, 0x3b, 0xb0, 0x2c, 0xce, 0xf4, 0xda, 0x36, 0x80, 0x96, 0x55, 0xac, 0xd7, 0xb4, + 0xac, 0xa2, 0x84, 0x58, 0xaf, 0x61, 0x72, 0x81, 0xe6, 0xa9, 0x5a, 0x61, 0x48, 0x98, 0x48, 0x52, + 0xe9, 0x0c, 0x29, 0x49, 0xb4, 0x0b, 0x50, 0x04, 0x63, 0xa9, 0x5b, 0xe6, 0x4e, 0x11, 0xd5, 0xa0, + 0x18, 0x0a, 0xd7, 0xaa, 0x08, 0xe8, 0x32, 0xa7, 0x4f, 0x21, 0x46, 0x4f, 0xa0, 0x1e, 0x0d, 0x72, + 0xc7, 0xb3, 0x05, 0x21, 0x6a, 0xef, 0x2a, 0x30, 0xeb, 0x22, 0x4c, 0x6d, 0x6b, 0x3a, 0x28, 0x61, + 0xfe, 0x63, 0x25, 0x94, 0xc1, 0x8a, 0x4a, 0x54, 0xb2, 0x20, 0x5e, 0x59, 0xe5, 0x29, 0x51, 0xf0, + 0x20, 0x48, 0x34, 0x4f, 0x1d, 0x2a, 0x25, 0xc9, 0x77, 0xc1, 0xe6, 0xdc, 0x53, 0x8e, 0xd9, 0x9b, + 0xc5, 0x8d, 0x81, 0x73, 0x4f, 0x27, 0x63, 0x32, 0x93, 0xee, 0x0b, 0x61, 0xfa, 0x13, 0x58, 0x37, + 0x0e, 0xc4, 0x2a, 0xa4, 0x01, 0xfb, 0x20, 0x2d, 0xc8, 0xa5, 0x73, 0x75, 0x41, 0xa6, 0x5d, 0x20, + 0x27, 0xb3, 0x47, 0x89, 0x3b, 0x1e, 0xa3, 0xd3, 0xd4, 0xa7, 0xc9, 0x44, 0x62, 0x6e, 0xad, 0x16, + 0xc8, 0x1a, 0xf1, 0x60, 0x3c, 0x8e, 0xcf, 0x35, 0xd7, 0xb4, 0x8f, 0x54, 0x4b, 0x1e, 0x26, 0xe6, + 0x00, 0x89, 0x5d, 0xb2, 0x7c, 0x49, 0xc0, 0x5d, 0x52, 0x5f, 0x12, 0x8a, 0xab, 0xc1, 0xb7, 0xaf, + 0x08, 0xa9, 0xc3, 0xa7, 0x27, 0x23, 0xa4, 0xae, 0x14, 0x48, 0xf7, 0x0f, 0xdb, 0x08, 0xd5, 0x56, + 0x3d, 0xf7, 0x11, 0xc0, 0xcf, 0x46, 0x69, 0xe6, 0x25, 0xd3, 0xc7, 0xa3, 0x73, 0x23, 0xb2, 0x6f, + 0xfd, 0x37, 0xa3, 0x34, 0x8b, 0x9f, 0x20, 0xf9, 0xcb, 0x7f, 0xbf, 0x63, 0x08, 0x85, 0xc6, 0x67, + 0xfa, 0x2d, 0x58, 0x13, 0xdf, 0xa2, 0xc2, 0x01, 0x43, 0x1a, 0xfd, 0xb0, 0xb4, 0x4a, 0xc1, 0x96, + 0x0b, 0xd0, 0xbb, 0x08, 0x63, 0x97, 0x8e, 0xa7, 0xc6, 0x61, 0x54, 0x63, 0xd6, 0xa5, 0xe3, 0x69, + 0x15, 0xf6, 0xc2, 0x10, 0xa6, 0xed, 0xbc, 0xe9, 0x1a, 0x08, 0x51, 0xa1, 0xe5, 0xa1, 0x65, 0x4b, + 0xcd, 0x8c, 0x58, 0xc3, 0x26, 0x9a, 0x90, 0xf5, 0x95, 0x62, 0xd8, 0x08, 0xde, 0x6e, 0xca, 0xa7, + 0x08, 0xb5, 0x27, 0xc8, 0x46, 0x5c, 0x3e, 0x3e, 0x8f, 0xcf, 0x90, 0x5c, 0x6a, 0x44, 0x2e, 0x4c, + 0x8f, 0x60, 0x5b, 0xc6, 0x9f, 0xe4, 0x80, 0xca, 0x6a, 0x7f, 0x40, 0x4d, 0x54, 0x20, 0x2e, 0x9b, + 0x3f, 0x5f, 0x29, 0x40, 0x5b, 0xb0, 0x8c, 0x17, 0x32, 0x15, 0x04, 0x70, 0xdb, 0xbc, 0x87, 0x56, + 0x67, 0x3d, 0x6a, 0x01, 0xbc, 0x81, 0x9a, 0x5a, 0x00, 0x45, 0x0f, 0x3b, 0xb0, 0x22, 0x27, 0x38, + 0x62, 0xa0, 0x28, 0x80, 0x35, 0x03, 0x41, 0x43, 0x62, 0xa0, 0x28, 0xfa, 0x3c, 0x06, 0x8a, 0x51, + 0xe0, 0xf0, 0x04, 0x76, 0xaf, 0xfa, 0xf9, 0xd2, 0x45, 0xcf, 0x7a, 0xde, 0x8b, 0xde, 0x5f, 0x6d, + 0xd8, 0xc0, 0xda, 0xb4, 0x66, 0x73, 0x61, 0x93, 0xcf, 0x1e, 0xe5, 0x21, 0x4d, 0x5a, 0xc3, 0xc9, + 0xbc, 0xda, 0x26, 0xc3, 0x7c, 0xca, 0x29, 0x95, 0xa0, 0x0c, 0xb6, 0xb4, 0x76, 0x55, 0xc0, 0xef, + 0xb5, 0x02, 0x7e, 0x44, 0x07, 0xdb, 0xce, 0xc3, 0xbe, 0x57, 0x0a, 0x15, 0x3a, 0xd6, 0x7e, 0x11, + 0x1d, 0x5b, 0x7f, 0x2e, 0x1d, 0xfb, 0x0b, 0xd8, 0xd0, 0xbf, 0x86, 0xda, 0x71, 0xf9, 0xd5, 0xb4, + 0x63, 0xa9, 0x32, 0xda, 0xcd, 0xb5, 0xe4, 0xca, 0xb5, 0x5a, 0x12, 0xdf, 0xc7, 0xf4, 0x5a, 0x98, + 0xcb, 0xe4, 0xa4, 0xea, 0x40, 0x5c, 0xe4, 0xe3, 0x46, 0xef, 0x25, 0x76, 0x9e, 0x1f, 0xc0, 0x5a, + 0x77, 0xa4, 0x9f, 0x46, 0x0c, 0x9b, 0xf4, 0x50, 0x13, 0xcd, 0x2d, 0x38, 0x97, 0xcc, 0x77, 0x0c, + 0xfb, 0x75, 0xec, 0x18, 0x77, 0x01, 0x7a, 0xd2, 0x73, 0xbd, 0xc0, 0x33, 0xc5, 0xe5, 0xab, 0x5d, + 0xdc, 0xcb, 0xa6, 0x71, 0x43, 0x58, 0xe8, 0x10, 0xe5, 0x44, 0xe1, 0x9e, 0x9d, 0x8d, 0x66, 0xd9, + 0xb4, 0x94, 0x00, 0x40, 0xe7, 0x78, 0x1f, 0x28, 0x9e, 0xb9, 0x88, 0x2b, 0xc5, 0x5e, 0xef, 0x80, + 0xd0, 0x7b, 0xb9, 0xf7, 0xd7, 0xb5, 0xf9, 0xd0, 0x0e, 0xe7, 0x7a, 0x68, 0xa1, 0xcf, 0xd7, 0xe1, + 0x3f, 0x2d, 0x13, 0xfb, 0xe9, 0x25, 0x86, 0xfa, 0x47, 0x00, 0xf9, 0xdb, 0xb4, 0x1e, 0x6b, 0x79, + 0x4b, 0xc9, 0xa9, 0x66, 0x2f, 0x17, 0xb2, 0xc6, 0xbf, 0xb1, 0x5f, 0xd7, 0xbf, 0x89, 0x60, 0x3d, + 0xf8, 0xed, 0x74, 0x50, 0x38, 0x33, 0x00, 0xcf, 0x4f, 0x87, 0xa8, 0x99, 0x74, 0xde, 0xb6, 0xe2, + 0x6c, 0xb9, 0x30, 0x6f, 0x5b, 0x5e, 0xf0, 0xf0, 0x1e, 0x6c, 0x4b, 0xef, 0xc3, 0xe3, 0xc9, 0x60, + 0xfc, 0x18, 0xfd, 0xf0, 0x7f, 0x2a, 0x63, 0xe7, 0xad, 0xd2, 0xf9, 0xdd, 0x10, 0x12, 0x1a, 0xf7, + 0x69, 0x76, 0x26, 0xcf, 0x14, 0x83, 0xcf, 0xcc, 0xb6, 0xe2, 0xcd, 0xea, 0x0b, 0x0b, 0xe8, 0xbc, + 0xb8, 0xa9, 0x4d, 0xac, 0xff, 0xc3, 0x89, 0xad, 0x72, 0xd2, 0xa9, 0xbf, 0xc8, 0x49, 0xc7, 0xf9, + 0xb3, 0x05, 0xdb, 0x1d, 0xd7, 0x53, 0x40, 0x4d, 0xd2, 0xc6, 0xfe, 0x55, 0x78, 0xbb, 0xe3, 0x7a, + 0x71, 0x2f, 0xe8, 0x76, 0x1a, 0x0f, 0xe2, 0x2b, 0x61, 0x20, 0xde, 0x86, 0xaf, 0xcc, 0x8b, 0x14, + 0xb6, 0xf8, 0x7d, 0xd8, 0x9b, 0x67, 0x6b, 0xa8, 0x88, 0xab, 0x0b, 0x6b, 0x54, 0x09, 0xdb, 0xf9, + 0x18, 0xb6, 0x35, 0x82, 0x42, 0xd4, 0xe5, 0x88, 0x78, 0xb4, 0x0d, 0xeb, 0xf7, 0x59, 0xd8, 0x69, + 0x3d, 0x88, 0x5b, 0xfd, 0x6e, 0x97, 0x2c, 0xd1, 0x4d, 0x58, 0x53, 0x84, 0x86, 0x4b, 0x2c, 0xba, + 0x01, 0xab, 0x1d, 0x9f, 0xb3, 0x46, 0x3f, 0x64, 0xa4, 0xe6, 0x7c, 0x0c, 0x5b, 0x45, 0x66, 0x69, + 0x34, 0xa5, 0xbf, 0x01, 0x76, 0xe8, 0x9e, 0x92, 0x25, 0x0a, 0xb0, 0xd2, 0x3b, 0x69, 0xf0, 0x0f, + 0x3f, 0x24, 0x16, 0x5d, 0x87, 0x37, 0x8e, 0x1b, 0xbd, 0xf8, 0xc4, 0xe3, 0xa4, 0x26, 0xbe, 0xb8, + 0xa7, 0x1c, 0xbf, 0xd8, 0xce, 0x77, 0x60, 0x07, 0x77, 0xf4, 0x6e, 0x7a, 0x39, 0x4d, 0xb2, 0x64, + 0x82, 0x6d, 0xd8, 0x80, 0x55, 0x9e, 0x88, 0x45, 0x3e, 0x4d, 0x64, 0x03, 0xbc, 0xd9, 0x70, 0x9a, + 0x8e, 0x87, 0xc9, 0xef, 0x88, 0xe5, 0xdc, 0x85, 0xed, 0x70, 0x34, 0x9b, 0xa6, 0xd9, 0x05, 0x9f, + 0x0a, 0x89, 0x8b, 0xa7, 0xf4, 0x4d, 0xd8, 0xe9, 0xfb, 0xae, 0x77, 0xd4, 0x39, 0xee, 0x07, 0x7d, + 0x1e, 0x7b, 0x6e, 0xd4, 0x68, 0x4b, 0x43, 0xbe, 0x17, 0xf0, 0x28, 0x0e, 0x59, 0x83, 0xf9, 0x11, + 0xb1, 0x9c, 0x3f, 0x59, 0xb0, 0xd5, 0xbf, 0x54, 0xce, 0xa7, 0x7d, 0x44, 0x03, 0x78, 0x17, 0xf6, + 0xfb, 0x9c, 0x85, 0x71, 0x14, 0x9c, 0x30, 0x3f, 0xee, 0x73, 0xf7, 0xb8, 0x8a, 0x41, 0xf2, 0x0e, + 0xdc, 0x36, 0x24, 0x42, 0xd6, 0x08, 0xee, 0xb3, 0x30, 0xee, 0xb9, 0x9c, 0x9f, 0x06, 0x61, 0x93, + 0x58, 0xf4, 0x16, 0xdc, 0xbc, 0x42, 0xc0, 0x6b, 0xb9, 0xa4, 0x36, 0xc7, 0xf3, 0xd9, 0xa9, 0xdb, + 0x8d, 0x8f, 0x82, 0x88, 0xd8, 0x8e, 0x27, 0x36, 0x3a, 0x0c, 0xd3, 0x97, 0xe8, 0x86, 0xab, 0x50, + 0xf7, 0x03, 0x9f, 0x55, 0x1f, 0x5b, 0x36, 0x60, 0xd5, 0xed, 0xf5, 0xc2, 0xe0, 0x3e, 0x0e, 0x28, + 0xc0, 0x4a, 0x93, 0xf9, 0xa2, 0x65, 0xb6, 0xe0, 0xf4, 0xc2, 0xc0, 0x0b, 0x22, 0xd6, 0x24, 0x75, + 0x27, 0xd4, 0x0b, 0x46, 0x57, 0x7a, 0x36, 0x92, 0x2f, 0x1b, 0x4d, 0xd6, 0x72, 0xfb, 0xdd, 0x48, + 0x75, 0xc8, 0x83, 0x38, 0x64, 0xf7, 0xfa, 0x8c, 0x47, 0x9c, 0x58, 0x94, 0xc0, 0x86, 0xcf, 0x58, + 0x93, 0xc7, 0x21, 0xbb, 0xdf, 0x61, 0xa7, 0xa4, 0x26, 0xea, 0x94, 0x9f, 0xc5, 0x2f, 0x38, 0x7f, + 0xb3, 0x80, 0x4a, 0x88, 0x03, 0x8d, 0x42, 0x87, 0xe3, 0x73, 0x00, 0xb7, 0xda, 0xa2, 0x63, 0xf1, + 0xaf, 0x79, 0x41, 0xb3, 0xda, 0x65, 0x37, 0x81, 0x56, 0xf8, 0x41, 0xab, 0x45, 0x2c, 0x7a, 0x1b, + 0x6e, 0x54, 0xe8, 0xcd, 0x30, 0xe8, 0x91, 0xda, 0xad, 0xda, 0xaa, 0x45, 0xdf, 0x9a, 0x63, 0x9e, + 0x30, 0xd6, 0x23, 0xb6, 0x18, 0xa2, 0x0a, 0x43, 0x4f, 0x40, 0x59, 0xbc, 0xee, 0xfc, 0xc1, 0x82, + 0x9b, 0xb2, 0x99, 0x7a, 0x36, 0xe7, 0x4d, 0xdd, 0x87, 0x3d, 0x85, 0xc6, 0x72, 0x55, 0x43, 0x77, + 0x81, 0x94, 0xb8, 0xb2, 0x99, 0x6f, 0xc2, 0x4e, 0x89, 0x8a, 0xed, 0xa8, 0x89, 0xb5, 0x5a, 0x22, + 0x1f, 0x31, 0x1e, 0xc5, 0xac, 0xd5, 0x0a, 0xc2, 0x48, 0x36, 0xc4, 0x76, 0x0e, 0x61, 0xa7, 0x91, + 0x4c, 0xa6, 0xe2, 0xa6, 0x90, 0x5d, 0xa6, 0xa3, 0x0c, 0x9b, 0xb0, 0x09, 0x6b, 0xec, 0xe7, 0x11, + 0xf3, 0x79, 0x27, 0xf0, 0xc9, 0x92, 0xb3, 0x5f, 0x91, 0xd1, 0xab, 0x86, 0xf3, 0x36, 0x59, 0x72, + 0x06, 0xb0, 0xa9, 0x9d, 0x3d, 0xe5, 0xac, 0x38, 0x80, 0x5b, 0x7a, 0xae, 0xe1, 0xfa, 0xad, 0xfe, + 0x85, 0x3d, 0xd8, 0x9d, 0xe7, 0xb3, 0x88, 0x58, 0x62, 0x14, 0x2a, 0x1c, 0x41, 0xaf, 0x39, 0xbf, + 0x84, 0x8d, 0x12, 0x5c, 0xeb, 0x5b, 0x70, 0xc3, 0xfc, 0xde, 0x4b, 0xb2, 0xf3, 0x34, 0xbb, 0x20, + 0x4b, 0x55, 0x46, 0x38, 0xcb, 0x32, 0xc1, 0xc0, 0x19, 0x6f, 0x32, 0xa2, 0x64, 0xf2, 0x24, 0xcd, + 0x06, 0xd3, 0xe4, 0x9c, 0xd4, 0x9c, 0x0f, 0x60, 0xb3, 0x04, 0x6b, 0x21, 0xfe, 0x5a, 0x37, 0x50, + 0x0a, 0xc1, 0x63, 0xcd, 0x4e, 0xdf, 0x23, 0xcb, 0x62, 0xae, 0xb7, 0x3b, 0xc7, 0x6d, 0x02, 0xce, + 0x5f, 0x2c, 0x71, 0x24, 0x45, 0xe8, 0x37, 0xaf, 0xe5, 0xea, 0xce, 0x10, 0x03, 0x21, 0x11, 0x70, + 0x18, 0xe7, 0xf2, 0x15, 0x6e, 0x1f, 0xf6, 0xd4, 0x97, 0xd8, 0xf5, 0x9b, 0x71, 0xdb, 0x0d, 0x9b, + 0xa7, 0x6e, 0x28, 0x46, 0xe7, 0x01, 0xa9, 0xe1, 0x94, 0x33, 0x28, 0x71, 0x14, 0xf4, 0x1b, 0x6d, + 0x62, 0x8b, 0x11, 0x2e, 0xd1, 0x7b, 0x1d, 0x9f, 0xd4, 0x71, 0x02, 0xcf, 0x49, 0x63, 0xb5, 0x82, + 0xbf, 0xec, 0xa4, 0x40, 0xaa, 0xe1, 0x0d, 0x73, 0xcf, 0xa1, 0x61, 0xdf, 0xf7, 0xe5, 0x0a, 0xdd, + 0x86, 0xf5, 0x20, 0x6a, 0xb3, 0x50, 0x61, 0x14, 0x21, 0x28, 0x51, 0xdf, 0x77, 0xfb, 0x51, 0x3b, + 0x08, 0x3b, 0x0f, 0x71, 0xa9, 0xee, 0xc1, 0x2e, 0xef, 0xba, 0x8d, 0x93, 0xd8, 0x0f, 0xa2, 0xb8, + 0xe3, 0xc7, 0x8d, 0xb6, 0xeb, 0xfb, 0xac, 0x4b, 0xc0, 0xf9, 0x97, 0x05, 0xb7, 0xaf, 0x79, 0x34, + 0xa1, 0xef, 0xc3, 0x9d, 0x36, 0x73, 0x9b, 0x5d, 0xc6, 0x79, 0x2c, 0xaa, 0x64, 0x7e, 0xa4, 0x5e, + 0x26, 0xaf, 0x9c, 0x0e, 0x77, 0xe0, 0xeb, 0xd7, 0x8b, 0x17, 0x8a, 0xe5, 0x1b, 0xf0, 0xb5, 0xeb, + 0x45, 0x95, 0xa2, 0xa9, 0x51, 0x07, 0xde, 0xbb, 0x5e, 0x32, 0x57, 0x50, 0xf6, 0xd1, 0x47, 0x9f, + 0xff, 0xf7, 0x60, 0xe9, 0xf3, 0x67, 0x07, 0xd6, 0x17, 0xcf, 0x0e, 0xac, 0xff, 0x3c, 0x3b, 0xb0, + 0x1e, 0x7e, 0xf3, 0x05, 0xd2, 0x70, 0x3d, 0x5a, 0xc1, 0xa7, 0xef, 0xef, 0xfd, 0x2f, 0x00, 0x00, + 0xff, 0xff, 0x67, 0x9f, 0xd4, 0xea, 0xed, 0x7a, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -20538,6 +20704,30 @@ func (this *PluginSpecV1_Gitlab) Equal(that interface{}) bool { } return true } +func (this *PluginSpecV1_EntraId) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PluginSpecV1_EntraId) + if !ok { + that2, ok := that.(PluginSpecV1_EntraId) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.EntraId.Equal(that1.EntraId) { + return false + } + return true +} func (this *PluginSlackAccessSettings) Equal(that interface{}) bool { if that == nil { return this == nil @@ -20984,6 +21174,65 @@ func (this *PluginDiscordSettings) Equal(that interface{}) bool { } return true } +func (this *PluginEntraIDSettings) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PluginEntraIDSettings) + if !ok { + that2, ok := that.(PluginEntraIDSettings) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.SyncSettings.Equal(that1.SyncSettings) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *PluginEntraIDSyncSettings) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PluginEntraIDSyncSettings) + if !ok { + that2, ok := that.(PluginEntraIDSyncSettings) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if len(this.DefaultOwners) != len(that1.DefaultOwners) { + return false + } + for i := range this.DefaultOwners { + if this.DefaultOwners[i] != that1.DefaultOwners[i] { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} func (this *JamfSpecV1) Equal(that interface{}) bool { if that == nil { return this == nil @@ -38832,6 +39081,27 @@ func (m *PluginSpecV1_Gitlab) MarshalToSizedBuffer(dAtA []byte) (int, error) { } return len(dAtA) - i, nil } +func (m *PluginSpecV1_EntraId) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginSpecV1_EntraId) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.EntraId != nil { + { + size, err := m.EntraId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + return len(dAtA) - i, nil +} func (m *PluginSlackAccessSettings) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -39464,6 +39734,81 @@ func (m *PluginDiscordSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *PluginEntraIDSettings) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PluginEntraIDSettings) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginEntraIDSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.SyncSettings != nil { + { + size, err := m.SyncSettings.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PluginEntraIDSyncSettings) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PluginEntraIDSyncSettings) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginEntraIDSyncSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.DefaultOwners) > 0 { + for iNdEx := len(m.DefaultOwners) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DefaultOwners[iNdEx]) + copy(dAtA[i:], m.DefaultOwners[iNdEx]) + i = encodeVarintTypes(dAtA, i, uint64(len(m.DefaultOwners[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *PluginBootstrapCredentialsV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -39821,12 +40166,12 @@ func (m *PluginOAuth2AccessTokenCredentials) MarshalToSizedBuffer(dAtA []byte) ( i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n317, err317 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err317 != nil { - return 0, err317 + n319, err319 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err319 != nil { + return 0, err319 } - i -= n317 - i = encodeVarintTypes(dAtA, i, uint64(n317)) + i -= n319 + i = encodeVarintTypes(dAtA, i, uint64(n319)) i-- dAtA[i] = 0x1a if len(m.RefreshToken) > 0 { @@ -40697,20 +41042,20 @@ func (m *ScheduledAgentUpgradeWindow) MarshalToSizedBuffer(dAtA []byte) (int, er i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n331, err331 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) - if err331 != nil { - return 0, err331 + n333, err333 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) + if err333 != nil { + return 0, err333 } - i -= n331 - i = encodeVarintTypes(dAtA, i, uint64(n331)) + i -= n333 + i = encodeVarintTypes(dAtA, i, uint64(n333)) i-- dAtA[i] = 0x12 - n332, err332 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) - if err332 != nil { - return 0, err332 + n334, err334 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) + if err334 != nil { + return 0, err334 } - i -= n332 - i = encodeVarintTypes(dAtA, i, uint64(n332)) + i -= n334 + i = encodeVarintTypes(dAtA, i, uint64(n334)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -41137,12 +41482,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n339, err339 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) - if err339 != nil { - return 0, err339 + n341, err341 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) + if err341 != nil { + return 0, err341 } - i -= n339 - i = encodeVarintTypes(dAtA, i, uint64(n339)) + i -= n341 + i = encodeVarintTypes(dAtA, i, uint64(n341)) i-- dAtA[i] = 0x2a if m.Status != 0 { @@ -41150,12 +41495,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x20 } - n340, err340 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) - if err340 != nil { - return 0, err340 + n342, err342 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) + if err342 != nil { + return 0, err342 } - i -= n340 - i = encodeVarintTypes(dAtA, i, uint64(n340)) + i -= n342 + i = encodeVarintTypes(dAtA, i, uint64(n342)) i-- dAtA[i] = 0x1a if len(m.Targets) > 0 { @@ -41325,6 +41670,27 @@ func (m *IntegrationSpecV1_AWSOIDC) MarshalToSizedBuffer(dAtA []byte) (int, erro } return len(dAtA) - i, nil } +func (m *IntegrationSpecV1_AzureOIDC) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IntegrationSpecV1_AzureOIDC) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.AzureOIDC != nil { + { + size, err := m.AzureOIDC.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} func (m *AWSOIDCIntegrationSpecV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -41366,6 +41732,47 @@ func (m *AWSOIDCIntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } +func (m *AzureOIDCIntegrationSpecV1) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AzureOIDCIntegrationSpecV1) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AzureOIDCIntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.ClientID) > 0 { + i -= len(m.ClientID) + copy(dAtA[i:], m.ClientID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ClientID))) + i-- + dAtA[i] = 0x12 + } + if len(m.TenantID) > 0 { + i -= len(m.TenantID) + copy(dAtA[i:], m.TenantID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.TenantID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *HeadlessAuthentication) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -50606,6 +51013,18 @@ func (m *PluginSpecV1_Gitlab) Size() (n int) { } return n } +func (m *PluginSpecV1_EntraId) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EntraId != nil { + l = m.EntraId.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *PluginSlackAccessSettings) Size() (n int) { if m == nil { return 0 @@ -50912,6 +51331,40 @@ func (m *PluginDiscordSettings) Size() (n int) { return n } +func (m *PluginEntraIDSettings) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SyncSettings != nil { + l = m.SyncSettings.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *PluginEntraIDSyncSettings) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DefaultOwners) > 0 { + for _, s := range m.DefaultOwners { + l = len(s) + n += 1 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *PluginBootstrapCredentialsV1) Size() (n int) { if m == nil { return 0 @@ -51751,6 +52204,18 @@ func (m *IntegrationSpecV1_AWSOIDC) Size() (n int) { } return n } +func (m *IntegrationSpecV1_AzureOIDC) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AzureOIDC != nil { + l = m.AzureOIDC.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *AWSOIDCIntegrationSpecV1) Size() (n int) { if m == nil { return 0 @@ -51771,6 +52236,26 @@ func (m *AWSOIDCIntegrationSpecV1) Size() (n int) { return n } +func (m *AzureOIDCIntegrationSpecV1) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TenantID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.ClientID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *HeadlessAuthentication) Size() (n int) { if m == nil { return 0 @@ -104874,6 +105359,41 @@ func (m *PluginSpecV1) Unmarshal(dAtA []byte) error { } m.Settings = &PluginSpecV1_Gitlab{v} iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EntraId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &PluginEntraIDSettings{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Settings = &PluginSpecV1_EntraId{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -106527,17 +107047,284 @@ func (m *PluginDiscordSettings) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PluginDiscordSettings: wiretype end group for non-group") + return fmt.Errorf("proto: PluginDiscordSettings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginDiscordSettings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleToRecipients", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RoleToRecipients == nil { + m.RoleToRecipients = make(map[string]*DiscordChannels) + } + var mapkey string + var mapvalue *DiscordChannels + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthTypes + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthTypes + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthTypes + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthTypes + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &DiscordChannels{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.RoleToRecipients[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PluginEntraIDSettings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PluginEntraIDSettings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginEntraIDSettings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SyncSettings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SyncSettings == nil { + m.SyncSettings = &PluginEntraIDSyncSettings{} + } + if err := m.SyncSettings.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PluginEntraIDSyncSettings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PluginEntraIDSyncSettings: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PluginDiscordSettings: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PluginEntraIDSyncSettings: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RoleToRecipients", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DefaultOwners", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -106547,120 +107334,23 @@ func (m *PluginDiscordSettings) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - if m.RoleToRecipients == nil { - m.RoleToRecipients = make(map[string]*DiscordChannels) - } - var mapkey string - var mapvalue *DiscordChannels - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthTypes - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthTypes - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &DiscordChannels{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.RoleToRecipients[mapkey] = mapvalue + m.DefaultOwners = append(m.DefaultOwners, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -111268,6 +111958,41 @@ func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { } m.SubKindSpec = &IntegrationSpecV1_AWSOIDC{v} iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureOIDC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &AzureOIDCIntegrationSpecV1{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.SubKindSpec = &IntegrationSpecV1_AzureOIDC{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -111405,6 +112130,121 @@ func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { } return nil } +func (m *AzureOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureOIDCIntegrationSpecV1: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureOIDCIntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TenantID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TenantID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *HeadlessAuthentication) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 From 3ee2c515645165dde889fb3cba8563c2ba9cac7d Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Tue, 30 Apr 2024 20:08:38 +0200 Subject: [PATCH 25/28] Move the shared part of access requests UI to OSS (#41036) * Move `teleport.e/AccessRequests` to `shared/components/AccessRequests` The last commit from teleport.e that includes the original files: gravitational/teleport.e@5ca6881e29d5342eea70201c3f8b365320348c46 * Move `teleport.e/services/accessRequests` to `shared/services/AccessRequests` * Move `teleterm.e/ui` to `teleterm/ui` * `make fix-license` * Fix imports * Run prettier and eslint * Rename stories * Remove ts-ignore comments `accessRequestsService.test.ts` was refactored slightly, we don't need assumed requests there at all. --- .../AccessDuration/AccessDurationRequest.tsx | 101 + .../AccessDuration/AccessDurationReview.tsx | 49 + .../AccessDuration/durationOptions.test.ts | 100 + .../AccessDuration/durationOptions.ts | 176 + .../getDurationOptionsFromStartTime.test.ts | 192 + .../AccessRequests/AccessDuration/index.ts | 20 + .../AssumeStartTime/AssumeStartTime.story.tsx | 128 + .../AssumeStartTime/AssumeStartTime.test.tsx | 166 + .../AssumeStartTime/AssumeStartTime.tsx | 237 ++ .../generateTimeDropdown.test.ts | 142 + .../AssumeStartTime/getTimeOptions.test.ts | 154 + .../AssumeStartTime/timeOptions.test.tsx | 50 + .../AssumeStartTime/timeOptions.tsx | 207 + .../RequestCheckout/AdditionalOptions.tsx | 131 + .../RequestCheckout.story.test.tsx | 37 + .../RequestCheckout/RequestCheckout.story.tsx | 218 ++ .../RequestCheckout/RequestCheckout.test.tsx | 175 + .../RequestCheckout/RequestCheckout.tsx | 690 ++++ .../RequestCheckout/SelectReviewers.tsx | 391 ++ .../RequestCheckout.story.test.tsx.snap | 3394 +++++++++++++++++ .../NewRequest/RequestCheckout/index.ts | 23 + .../RequestCheckout/shield-check.png | Bin 0 -> 38458 bytes .../NewRequest/RequestCheckout/types.ts | 24 + .../NewRequest/RequestCheckout/utils.test.ts | 114 + .../NewRequest/RequestCheckout/utils.ts | 123 + .../NewRequest/ResourceList/Apps.tsx | 291 ++ .../NewRequest/ResourceList/Databases.tsx | 73 + .../NewRequest/ResourceList/Desktops.tsx | 68 + .../NewRequest/ResourceList/Kubes.tsx | 64 + .../NewRequest/ResourceList/Nodes.tsx | 83 + .../ResourceList/ResourceList.story.test.tsx | 65 + .../ResourceList/ResourceList.story.tsx | 169 + .../NewRequest/ResourceList/ResourceList.tsx | 127 + .../NewRequest/ResourceList/Roles.tsx | 48 + .../NewRequest/ResourceList/UserGroups.tsx | 75 + .../ResourceList.story.test.tsx.snap | 2240 +++++++++++ .../NewRequest/ResourceList/index.ts | 19 + .../AccessRequests/NewRequest/index.ts | 22 + .../AccessRequests/NewRequest/resource.ts | 38 + .../RequestList/RequestList.tsx | 90 + .../ReviewRequests/RequestList/index.ts | 19 + .../RequestDelete.story.test.tsx | 43 + .../RequestDelete/RequestDelete.story.tsx | 79 + .../RequestDelete/RequestDelete.tsx | 108 + .../RequestDelete.story.test.tsx.snap | 1242 ++++++ .../RequestView/RequestDelete/index.ts | 20 + .../RequestReview.story.test.tsx | 33 + .../RequestReview/RequestReview.story.tsx | 69 + .../RequestReview/RequestReview.tsx | 353 ++ .../RequestReview.story.test.tsx.snap | 616 +++ .../RequestView/RequestReview/index.ts | 21 + .../RequestView/RequestView.story.test.tsx | 48 + .../RequestView/RequestView.story.tsx | 266 ++ .../RequestView/RequestView.tsx | 704 ++++ .../RequestView/RolesRequested.tsx | 30 + .../RequestView.story.test.tsx.snap | 3350 ++++++++++++++++ .../ReviewRequests/RequestView/index.ts | 21 + .../ReviewRequests/RequestView/types.ts | 53 + .../ReviewRequests/formattedName.ts | 27 + .../AccessRequests/ReviewRequests/index.ts | 21 + .../AccessRequests/Shared/Shared.tsx | 141 + .../components/AccessRequests/Shared/types.ts | 30 + .../components/AccessRequests/Shared/utils.ts | 29 + .../AccessRequests/fixtures/index.ts | 350 ++ .../services/accessRequests/accessRequests.ts | 95 + .../shared/services/accessRequests/index.ts | 20 + .../accessRequests/makeAccessRequest.ts | 150 + .../AccessRequestCheckout.tsx | 162 + .../AccessRequestCheckout/AssumedRolesBar.tsx | 112 + .../src/ui/AccessRequestCheckout/index.ts | 19 + .../useAccessRequestCheckout.ts | 343 ++ .../useAssumedRolesBar.ts | 148 + .../DocumentAccessRequests.tsx | 95 + .../NewRequest/ChangeResourceDialog.tsx | 76 + .../NewRequest/NewRequest.tsx | 212 + .../NewRequest/index.ts | 19 + .../NewRequest/useNewRequest.ts | 339 ++ .../RequestList/RequestList.test.tsx | 116 + .../RequestList/RequestList.tsx | 270 ++ .../ReviewAccessRequest.tsx | 133 + .../ReviewAccessRequest/index.ts | 19 + .../useReviewAccessRequest.ts | 222 ++ .../src/ui/DocumentAccessRequests/index.ts | 19 + .../useAccessRequests.test.tsx | 162 + .../useAccessRequests.tsx | 175 + .../DocumentAccessRequests/useAssumeAccess.ts | 78 + .../src/ui/Documents/DocumentsRenderer.tsx | 5 +- .../teleterm/src/ui/LayoutManager.tsx | 4 +- .../StatusBar/AccessRequestCheckoutButton.tsx | 45 + .../teleterm/src/ui/StatusBar/StatusBar.tsx | 4 +- .../accessRequestsService.test.ts | 44 +- .../accessRequestsService.ts | 4 +- .../workspacesService/workspacesService.ts | 4 +- 93 files changed, 21229 insertions(+), 52 deletions(-) create mode 100644 web/packages/shared/components/AccessRequests/AccessDuration/AccessDurationRequest.tsx create mode 100644 web/packages/shared/components/AccessRequests/AccessDuration/AccessDurationReview.tsx create mode 100644 web/packages/shared/components/AccessRequests/AccessDuration/durationOptions.test.ts create mode 100644 web/packages/shared/components/AccessRequests/AccessDuration/durationOptions.ts create mode 100644 web/packages/shared/components/AccessRequests/AccessDuration/getDurationOptionsFromStartTime.test.ts create mode 100644 web/packages/shared/components/AccessRequests/AccessDuration/index.ts create mode 100644 web/packages/shared/components/AccessRequests/AssumeStartTime/AssumeStartTime.story.tsx create mode 100644 web/packages/shared/components/AccessRequests/AssumeStartTime/AssumeStartTime.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/AssumeStartTime/AssumeStartTime.tsx create mode 100644 web/packages/shared/components/AccessRequests/AssumeStartTime/generateTimeDropdown.test.ts create mode 100644 web/packages/shared/components/AccessRequests/AssumeStartTime/getTimeOptions.test.ts create mode 100644 web/packages/shared/components/AccessRequests/AssumeStartTime/timeOptions.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/AssumeStartTime/timeOptions.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/AdditionalOptions.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/index.ts create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/shield-check.png create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/types.ts create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/utils.test.ts create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/utils.ts create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/Apps.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/Databases.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/Desktops.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/Kubes.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/Nodes.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/ResourceList.story.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/ResourceList.story.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/ResourceList.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/Roles.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/UserGroups.tsx create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/__snapshots__/ResourceList.story.test.tsx.snap create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/ResourceList/index.ts create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/index.ts create mode 100644 web/packages/shared/components/AccessRequests/NewRequest/resource.ts create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestList/RequestList.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestList/index.ts create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestDelete/RequestDelete.story.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestDelete/RequestDelete.story.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestDelete/RequestDelete.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestDelete/__snapshots__/RequestDelete.story.test.tsx.snap create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestDelete/index.ts create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestReview/RequestReview.story.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestReview/RequestReview.story.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestReview/RequestReview.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestReview/__snapshots__/RequestReview.story.test.tsx.snap create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestReview/index.ts create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestView.story.test.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestView.story.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RequestView.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/RolesRequested.tsx create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/__snapshots__/RequestView.story.test.tsx.snap create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/index.ts create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/RequestView/types.ts create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/formattedName.ts create mode 100644 web/packages/shared/components/AccessRequests/ReviewRequests/index.ts create mode 100644 web/packages/shared/components/AccessRequests/Shared/Shared.tsx create mode 100644 web/packages/shared/components/AccessRequests/Shared/types.ts create mode 100644 web/packages/shared/components/AccessRequests/Shared/utils.ts create mode 100644 web/packages/shared/components/AccessRequests/fixtures/index.ts create mode 100644 web/packages/shared/services/accessRequests/accessRequests.ts create mode 100644 web/packages/shared/services/accessRequests/index.ts create mode 100644 web/packages/shared/services/accessRequests/makeAccessRequest.ts create mode 100644 web/packages/teleterm/src/ui/AccessRequestCheckout/AccessRequestCheckout.tsx create mode 100644 web/packages/teleterm/src/ui/AccessRequestCheckout/AssumedRolesBar.tsx create mode 100644 web/packages/teleterm/src/ui/AccessRequestCheckout/index.ts create mode 100644 web/packages/teleterm/src/ui/AccessRequestCheckout/useAccessRequestCheckout.ts create mode 100644 web/packages/teleterm/src/ui/AccessRequestCheckout/useAssumedRolesBar.ts create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/DocumentAccessRequests.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/NewRequest/ChangeResourceDialog.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/NewRequest/NewRequest.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/NewRequest/index.ts create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/NewRequest/useNewRequest.ts create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/RequestList/RequestList.test.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/RequestList/RequestList.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/ReviewAccessRequest/ReviewAccessRequest.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/ReviewAccessRequest/index.ts create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/ReviewAccessRequest/useReviewAccessRequest.ts create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/index.ts create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/useAccessRequests.test.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/useAccessRequests.tsx create mode 100644 web/packages/teleterm/src/ui/DocumentAccessRequests/useAssumeAccess.ts create mode 100644 web/packages/teleterm/src/ui/StatusBar/AccessRequestCheckoutButton.tsx diff --git a/web/packages/shared/components/AccessRequests/AccessDuration/AccessDurationRequest.tsx b/web/packages/shared/components/AccessRequests/AccessDuration/AccessDurationRequest.tsx new file mode 100644 index 0000000000000..ed17b5b5b7b1c --- /dev/null +++ b/web/packages/shared/components/AccessRequests/AccessDuration/AccessDurationRequest.tsx @@ -0,0 +1,101 @@ +/** + * 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 . + */ + +import { useState, useEffect } from 'react'; +import { Flex, LabelInput, Text } from 'design'; + +import Select, { Option } from 'shared/components/Select'; +import { ToolTipInfo } from 'shared/components/ToolTip'; + +import { AccessRequest } from 'shared/services/accessRequests'; + +import { + getDurationOptionIndexClosestToOneWeek, + getDurationOptionsFromStartTime, +} from './durationOptions'; + +export function AccessDurationRequest({ + assumeStartTime, + accessRequest, + maxDuration, + setMaxDuration, +}: { + assumeStartTime: Date; + accessRequest: AccessRequest; + maxDuration: Option; + setMaxDuration(s: Option): void; +}) { + // Options for extending or shortening the access request duration. + const [durationOptions, setDurationOptions] = useState[]>([]); + + useEffect(() => { + if (!assumeStartTime) { + defaultDuration(); + } else { + updateAccessDuration(assumeStartTime); + } + }, [assumeStartTime]); + + function defaultDuration() { + const created = accessRequest.created; + const options = getDurationOptionsFromStartTime(created, accessRequest); + + setDurationOptions(options); + if (options.length > 0) { + const durationIndex = getDurationOptionIndexClosestToOneWeek( + options, + accessRequest.created + ); + setMaxDuration(options[durationIndex]); + } + } + + function updateAccessDuration(start: Date) { + const updatedDurationOpts = getDurationOptionsFromStartTime( + start, + accessRequest + ); + + const durationIndex = getDurationOptionIndexClosestToOneWeek( + updatedDurationOpts, + start + ); + + setMaxDuration(updatedDurationOpts[durationIndex]); + setDurationOptions(updatedDurationOpts); + } + + return ( + + + Access Duration + + How long you would be given elevated privileges. Note that the time it + takes to approve this request will be subtracted from the duration you + requested. + + + + ) => setRequestTTL(option)} + value={requestTTL} + /> + + )} + + + Access Request Lifetime + + The max duration of an access request, starting from its + creation, until it expires. + + + + {getFormattedDurationTxt({ + start: dryRunResponse.created, + end: new Date(selectedMaxDurationTimestamp), + })} + + + + )} + + ); +} diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.test.tsx b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.test.tsx new file mode 100644 index 0000000000000..0dfe9b5ef2dac --- /dev/null +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.test.tsx @@ -0,0 +1,37 @@ +/** + * 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 . + */ + +import React from 'react'; +import { render } from 'design/utils/testing'; + +import { Loaded, Failed, Success } from './RequestCheckout.story'; + +test('loaded state', async () => { + const { container } = render(); + expect(container).toMatchSnapshot(); +}); + +test('failed state', async () => { + const { container } = render(); + expect(container).toMatchSnapshot(); +}); + +test('success state', () => { + const { container } = render(); + expect(container).toMatchSnapshot(); +}); diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.tsx b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.tsx new file mode 100644 index 0000000000000..29aca2fe46536 --- /dev/null +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.story.tsx @@ -0,0 +1,218 @@ +/** + * 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 . + */ + +import React, { useState } from 'react'; +import { MemoryRouter, Link } from 'react-router-dom'; + +import { Box, ButtonPrimary, ButtonText } from 'design'; + +import { Option } from 'shared/components/Select'; + +import { dryRunResponse } from '../../fixtures'; + +import { RequestCheckout, RequestCheckoutProps } from './RequestCheckout'; + +export default { + title: 'Shared/AccessRequests/Checkout', +}; + +function SuccessActionComponent({ reset, onClose }) { + return ( + + + Back to Listings + + { + reset(); + onClose(); + }} + > + Make Another Request + + + ); +} + +export const Loaded = () => { + const [selectedReviewers, setSelectedReviewers] = useState( + props.selectedReviewers + ); + const [maxDuration, setMaxDuration] = useState>(); + const [requestTTL, setRequestTTL] = useState>(); + + return ( + + ); +}; +export const Empty = () => { + const [selectedReviewers, setSelectedReviewers] = useState([]); + const [maxDuration, setMaxDuration] = useState>(); + const [requestTTL, setRequestTTL] = useState>(); + + return ( + + ); +}; + +export const Failed = () => ( + +); + +export const LoadedResourceRequest = () => { + const [selectedReviewers, setSelectedReviewers] = useState( + props.selectedReviewers + ); + const [selectedResourceRequestRoles, setSelectedResourceRequestRoles] = + useState(props.resourceRequestRoles); + return ( + + ); +}; + +export const ProcessingResourceRequest = () => ( + +); + +export const FailedResourceRequest = () => ( + +); + +export const Success = () => ( + + + +); + +const props: RequestCheckoutProps = { + createAttempt: { status: '' }, + fetchResourceRequestRolesAttempt: { status: '' }, + isResourceRequest: false, + requireReason: true, + reviewers: ['bob', 'cat', 'george washington'], + selectedReviewers: [ + { value: 'bob', label: 'bob', isSelected: true }, + { value: 'cat', label: 'cat', isSelected: true }, + { + value: 'george washington', + label: 'george washington', + isSelected: true, + }, + ], + setSelectedReviewers: () => null, + createRequest: () => null, + data: [ + { + kind: 'app', + name: 'app-name', + id: 'app-name', + }, + { + kind: 'db', + name: 'app-name', + id: 'app-name', + }, + { + kind: 'kube_cluster', + name: 'kube-name', + id: 'app-name', + }, + { + kind: 'user_group', + name: 'user-group-name', + id: 'app-name', + }, + { + kind: 'windows_desktop', + name: 'desktop-name', + id: 'app-name', + }, + ], + clearAttempt: () => null, + onClose: () => null, + toggleResource: () => null, + reset: () => null, + transitionState: 'entered', + numRequestedResources: 4, + resourceRequestRoles: ['admin', 'access', 'developer'], + selectedResourceRequestRoles: ['admin', 'access'], + setSelectedResourceRequestRoles: () => null, + fetchStatus: 'loaded', + maxDuration: { value: 0, label: '12 hours' }, + setMaxDuration: () => null, + requestTTL: { value: 0, label: '1 hour' }, + setRequestTTL: () => null, + dryRunResponse, +}; diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.test.tsx b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.test.tsx new file mode 100644 index 0000000000000..73b80c12cbee8 --- /dev/null +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.test.tsx @@ -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 . + */ + +import { useState } from 'react'; +import { render, screen, userEvent, fireEvent } from 'design/utils/testing'; + +import { Option } from 'shared/components/Select'; + +import { dryRunResponse } from '../../fixtures'; + +import { ReviewerOption } from './types'; + +import { + RequestCheckout as RequestCheckoutComp, + RequestCheckoutProps, +} from './RequestCheckout'; + +test('start with no suggested reviewers', async () => { + render(); + + // Test init renders no reviewers. + let reviewers = screen.getByTestId('reviewers'); + expect(reviewers.childNodes).toHaveLength(0); + + // Add a reviewer + await userEvent.click(screen.getByRole('button', { name: 'Add' })); + await userEvent.type( + screen.getByText(/type or select a name/i), + 'llama{enter}' + ); + await userEvent.click(screen.getByRole('button', { name: 'Done' })); + + reviewers = screen.getByTestId('reviewers'); + expect(reviewers.childNodes).toHaveLength(1); + expect(reviewers.childNodes[0]).toHaveTextContent('llama'); + + // Remove by clicking on x button. + fireEvent.click(reviewers.childNodes[0].lastChild); + reviewers = screen.getByTestId('reviewers'); + expect(reviewers.childNodes).toHaveLength(0); +}); + +test('start with suggested reviewers', async () => { + render(); + + // Test init renders reviewers. + let reviewers = screen.getByTestId('reviewers'); + expect(reviewers.childNodes).toHaveLength(1); + expect(reviewers.childNodes[0]).toHaveTextContent('llama'); + + // Add another reviewer. + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.type( + screen.getByText(/type or select a name/i), + 'alpaca{enter}' + ); + await userEvent.click(screen.getByRole('button', { name: 'Done' })); + + reviewers = screen.getByTestId('reviewers'); + expect(reviewers.childNodes).toHaveLength(2); + expect(reviewers.childNodes[0]).toHaveTextContent('llama'); + expect(reviewers.childNodes[1]).toHaveTextContent('alpaca'); + + // Remove a suggested reviewer by typing the name. + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.type( + screen.getByText(/type or select a name/i), + 'llama{enter}' + ); + await userEvent.click(screen.getByRole('button', { name: 'Done' })); + + reviewers = screen.getByTestId('reviewers'); + expect(reviewers.childNodes).toHaveLength(1); + expect(reviewers.childNodes[0]).toHaveTextContent('alpaca'); + + // Suggested reviewer should still be rendered in the dropdown. + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.click(screen.getByTitle(/llama/i)); + await userEvent.click(screen.getByRole('button', { name: 'Done' })); + + reviewers = screen.getByTestId('reviewers'); + expect(reviewers.childNodes).toHaveLength(2); + expect(reviewers.childNodes[0]).toHaveTextContent('alpaca'); + expect(reviewers.childNodes[1]).toHaveTextContent('llama'); +}); + +test('assume start time + additional info access request lifetime', () => { + jest.useFakeTimers().setSystemTime(dryRunResponse.created); + render(); + + const infoBtn = screen.getByTestId('additional-info-btn'); + + // Init state. + expect(screen.queryByText(/start time/i)).not.toBeInTheDocument(); + expect(screen.getByText(/access duration/i)).toBeInTheDocument(); + expect(screen.getAllByText(/2 days/i)).toHaveLength(1); + const calendarBtn = screen.getByText(/immediately/i); + fireEvent.click(calendarBtn); + + // Expand the additional info box where the access lifetime + // gets displayed. + fireEvent.click(infoBtn); + expect(screen.getByText(/Access Request Lifetime/i)).toBeInTheDocument(); + expect(screen.getAllByText(/2 days/i)).toHaveLength(2); + + // Changing the "access duration" to a shorter time + // should reduce the "access lifetime". + fireEvent.keyDown(screen.getAllByText(/2 days/i)[0], { key: 'ArrowDown' }); + fireEvent.click(screen.getByText(/1 day/i)); + expect(screen.getAllByText(/1 day/i)).toHaveLength(2); +}); + +const RequestCheckout = ({ reviewers = [] }: { reviewers?: string[] }) => { + const [selectedReviewers, setSelectedReviewers] = useState( + () => reviewers.map(r => ({ label: r, value: r, isSelected: true })) + ); + const [maxDuration, setMaxDuration] = useState>(); + + return ( +
+ +
+ ); +}; + +const props: RequestCheckoutProps = { + createAttempt: { status: '' }, + fetchResourceRequestRolesAttempt: { status: '' }, + isResourceRequest: false, + requireReason: true, + reviewers: [], + selectedReviewers: [], + setSelectedReviewers: () => null, + createRequest: () => null, + data: [], + clearAttempt: () => null, + onClose: () => null, + toggleResource: () => null, + reset: () => null, + transitionState: 'entered', + numRequestedResources: 4, + resourceRequestRoles: ['admin', 'access', 'developer'], + selectedResourceRequestRoles: ['admin', 'access'], + setSelectedResourceRequestRoles: () => null, + fetchStatus: 'loaded', + maxDuration: { value: 0, label: '12 hours' }, + setMaxDuration: () => null, + requestTTL: { value: 0, label: '1 hour' }, + setRequestTTL: () => null, + dryRunResponse, +}; diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.tsx b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.tsx new file mode 100644 index 0000000000000..665a7f73d92c9 --- /dev/null +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/RequestCheckout.tsx @@ -0,0 +1,690 @@ +/** + * 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 . + */ + +import React, { useRef, useState } from 'react'; +import styled from 'styled-components'; +import { + Alert, + Box, + ButtonIcon, + ButtonPrimary, + Flex, + Image, + Indicator, + LabelInput, + Text, +} from 'design'; +import { + ArrowBack, + ChevronDown, + ChevronRight, + Trash, + Warning, +} from 'design/Icon'; +import Table, { Cell } from 'design/DataTable'; +import { CheckboxInput, CheckboxWrapper } from 'design/Checkbox'; + +import { Danger } from 'design/Alert'; + +import Validation, { useRule, Validator } from 'shared/components/Validation'; +import { Attempt } from 'shared/hooks/useAttemptNext'; +import { pluralize } from 'shared/utils/text'; +import { Option } from 'shared/components/Select'; + +import { CreateRequest } from '../../Shared/types'; +import { AssumeStartTime } from '../../AssumeStartTime/AssumeStartTime'; +import { AccessDurationRequest } from '../../AccessDuration'; + +import { ReviewerOption } from './types'; + +import shieldCheck from './shield-check.png'; +import { SelectReviewers } from './SelectReviewers'; +import { AdditionalOptions } from './AdditionalOptions'; + +import type { TransitionStatus } from 'react-transition-group'; + +import type { AccessRequest } from 'shared/services/accessRequests'; +import type { ResourceKind } from '../resource'; + +export function RequestCheckout({ + toggleResource, + onClose, + transitionState, + reset, + data, + createAttempt, + appsGrantedByUserGroup = [], + userGroupFetchAttempt, + fetchResourceRequestRolesAttempt, + resourceRequestRoles, + createRequest, + clearAttempt, + reviewers, + selectedReviewers, + setSelectedReviewers, + SuccessComponent, + requireReason, + numRequestedResources, + isResourceRequest, + selectedResourceRequestRoles, + setSelectedResourceRequestRoles, + fetchStatus, + maxDuration, + setMaxDuration, + requestTTL, + setRequestTTL, + dryRunResponse, +}: RequestCheckoutProps) { + // Specifies the start date/time a requestor requested for. + const [start, setStart] = useState(); + const [reason, setReason] = useState(''); + const ref = useRef(); + + const isInvalidRoleSelection = + resourceRequestRoles.length > 0 && + isResourceRequest && + selectedResourceRequestRoles.length < 1; + const submitBtnDisabled = + data.length === 0 || + createAttempt.status === 'processing' || + isInvalidRoleSelection || + fetchResourceRequestRolesAttempt.status === 'failed' || + fetchResourceRequestRolesAttempt.status === 'processing'; + + function updateReason(reason: string) { + setReason(reason); + } + + function handleOnSubmit(validator: Validator) { + if (!validator.validate()) { + return; + } + + createRequest({ + reason, + suggestedReviewers: selectedReviewers.map(r => r.value), + maxDuration: maxDuration ? new Date(maxDuration.value) : null, + requestTTL: requestTTL ? new Date(requestTTL.value) : null, + start: start, + }); + } + + // Listeners are attached to enable overflow on the parent container after + // transitioning ends (entered) or starts (exits). Enables vertical scrolling + // when content gets too big. + // + // Overflow is initially hidden to prevent + // brief flashing of horizontal scroll bar resulting from positioning + // the container off screen to the right for the slide affect. + React.useEffect(() => { + function applyOverflowAutoStyle(e: TransitionEvent) { + if (e.propertyName === 'right') { + ref.current.style.overflow = `auto`; + // There will only ever be one 'end right' transition invoked event, so we remove it + // afterwards, and listen for the 'start right' transition which is only invoked + // when user exits this component. + window.removeEventListener('transitionend', applyOverflowAutoStyle); + window.addEventListener('transitionstart', applyOverflowHiddenStyle); + } + } + + function applyOverflowHiddenStyle(e: TransitionEvent) { + if (e.propertyName === 'right') { + ref.current.style.overflow = `hidden`; + } + } + + window.addEventListener('transitionend', applyOverflowAutoStyle); + + return () => { + window.removeEventListener('transitionend', applyOverflowAutoStyle); + window.removeEventListener('transitionstart', applyOverflowHiddenStyle); + }; + }, []); + + return ( +
+ + + {fetchResourceRequestRolesAttempt.status === 'failed' && ( + + )} + {fetchStatus === 'loading' && ( + + + + )} + + {fetchStatus === 'loaded' && ( +
+ {createAttempt.status === 'success' ? ( + + + + Resources Requested Successfully + + + You've successfully requested {numRequestedResources}{' '} + {pluralize(numRequestedResources, 'resource')} + + + + + + + ) : ( + + + + + {data.length} {pluralize(data.length, 'Resource')} Selected + + + + )} + {createAttempt.status === 'success' ? ( + + ) : ( + <> + {createAttempt.status === 'failed' && ( + + )} + ( + + { + clearAttempt(); + toggleResource( + resource.kind, + resource.id, + resource.name + ); + }} + disabled={createAttempt.status === 'processing'} + css={` + cursor: pointer; + + background-color: ${({ theme }) => + theme.colors.buttons.trashButton.default}; + border-radius: 2px; + + :hover { + background-color: ${({ theme }) => + theme.colors.buttons.trashButton.hover}; + } + `} + /> + + ), + }, + ]} + emptyText="No resources are selected" + /> + {userGroupFetchAttempt?.status === 'processing' && ( + + + + )} + {userGroupFetchAttempt?.status === 'failed' && ( + {userGroupFetchAttempt.statusText} + )} + {userGroupFetchAttempt?.status === 'success' && + appsGrantedByUserGroup.length > 0 && ( + + )} + {isResourceRequest && ( + + )} + + + + + {({ validator }) => ( + + {dryRunResponse && ( + + + + + )} + + {dryRunResponse && maxDuration && ( + + )} + + theme.colors.levels.sunken}; + `} + > + handleOnSubmit(validator)} + disabled={submitBtnDisabled} + > + Submit Request + + + + )} + + + )} +
+ )} +
+
+ ); +} + +function AppsGrantedAccess({ apps }: { apps: string[] }) { + const [expanded, setExpanded] = useState(true); + const ArrowIcon = expanded ? ChevronDown : ChevronRight; + + // if its a single app, just show the app they are getting access to + if (apps.length === 1) { + return ( + + + Grants access to the{' '} + + {apps[0]} + {' '} + app + + + ); + } + + return ( + + + setExpanded(!expanded)} + css={` + border-color: ${props => props.theme.colors.spotBackground[1]}; + `} + > + + + {`Grants access to ${apps.length} apps`} + + + {apps.length > 0 && } + + + {expanded && ( + + {apps.map(app => { + return {app}; + })} + + )} + + ); +} + +function ResourceRequestRoles({ + roles, + selectedRoles, + setSelectedRoles, + fetchAttempt, +}: { + roles: string[]; + selectedRoles: string[]; + setSelectedRoles: (roles: string[]) => void; + fetchAttempt: Attempt; +}) { + const [expanded, setExpanded] = useState(true); + const ArrowIcon = expanded ? ChevronDown : ChevronRight; + + function onInputChange( + roleName: string, + e: React.ChangeEvent + ) { + if (e.target.checked) { + return setSelectedRoles([...selectedRoles, roleName]); + } + setSelectedRoles(selectedRoles.filter(role => role !== roleName)); + } + + return ( + + + setExpanded(!expanded)} + css={` + border-color: ${props => props.theme.colors.spotBackground[1]}; + `} + > + + + Roles + + + {selectedRoles.length} role{selectedRoles.length !== 1 ? 's' : ''}{' '} + selected + + + {fetchAttempt.status === 'processing' ? ( + + + + ) : ( + + + + + + )} + + + {fetchAttempt.status === 'success' && expanded && ( + + {roles.map((roleName, index) => { + const id = `${roleName}${index}`; + return ( + theme.colors.levels.surface}; + + &:hover { + border-color: ${({ theme }) => + theme.colors.levels.elevated}; + } + `} + as="label" + htmlFor={id} + > + { + onInputChange(roleName, e); + }} + checked={selectedRoles.includes(roleName)} + /> + {roleName} + + ); + })} + {selectedRoles.length < roles.length && ( + theme.colors.levels.surface}; + `} + > + + + Modifying this role set may disable access to some of the above + resources. Use with caution. + + + )} + + )} + + ); +} + +function TextBox({ + reason, + updateReason, + requireReason, +}: { + reason: string; + updateReason(reason: string): void; + requireReason: boolean; +}) { + const { valid, message } = useRule(requireText(reason, requireReason)); + const hasError = !valid; + const labelText = hasError ? message : 'Request Reason'; + + const optionalText = requireReason ? '' : ' (optional)'; + const placeholder = `Describe your request...${optionalText}`; + + return ( + + {labelText} + updateReason(e.target.value)} + css={` + outline: none; + background: transparent; + + ::placeholder { + color: ${({ theme }) => theme.colors.text.muted}; + } + + &:hover, + &:focus, + &:active { + border: 1px solid ${props => props.theme.colors.text.slightlyMuted}; + } + `} + /> + + ); +} + +const requireText = (value: string, requireReason: boolean) => () => { + if (requireReason && (!value || value.trim().length === 0)) { + return { + valid: false, + message: 'Reason Required', + }; + } + return { valid: true }; +}; + +const SidePanel = styled(Box)` + position: absolute; + z-index: 11; + top: 0px; + right: 0px; + background: ${({ theme }) => theme.colors.levels.sunken}; + min-height: 100%; + width: 500px; + padding: 20px; + + &.entering { + right: -500px; + } + + &.entered { + right: 0px; + transition: right 300ms ease-out; + } + + &.exiting { + right: -500px; + transition: right 300ms ease-out; + } + + &.exited { + right: -500px; + } +`; + +const Dimmer = styled(Box)` + background: #000; + opacity: 0.5; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10; +`; + +const StyledTable = styled(Table)` + & > tbody > tr > td { + vertical-align: middle; + } + + & > thead > tr > th { + background: ${props => props.theme.colors.spotBackground[1]}; + } + + border-radius: 8px; + box-shadow: ${props => props.theme.boxShadow[0]}; + overflow: hidden; +` as typeof Table; + +export type RequestCheckoutProps = { + onClose(): void; + toggleResource: ( + kind: ResourceKind, + resourceId: string, + resourceName?: string + ) => void; + appsGrantedByUserGroup?: string[]; + userGroupFetchAttempt?: Attempt; + reset: () => void; + SuccessComponent?: (params: SuccessComponentParams) => JSX.Element; + transitionState: TransitionStatus; + isResourceRequest: boolean; + requireReason: boolean; + selectedReviewers: ReviewerOption[]; + data: { kind: ResourceKind; name: string; id: string }[]; + setRequestTTL: (value: Option) => void; + createRequest: (req: CreateRequest) => void; + fetchStatus: 'loading' | 'loaded'; + fetchResourceRequestRolesAttempt: Attempt; + requestTTL: Option; + resourceRequestRoles: string[]; + reviewers: string[]; + setSelectedReviewers: (value: ReviewerOption[]) => void; + setMaxDuration: (value: Option) => void; + clearAttempt: () => void; + createAttempt: Attempt; + setSelectedResourceRequestRoles: (value: string[]) => void; + numRequestedResources: number; + selectedResourceRequestRoles: string[]; + dryRunResponse: AccessRequest; + maxDuration: Option; +}; + +type SuccessComponentParams = { + reset: () => void; + onClose: () => void; +}; diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx new file mode 100644 index 0000000000000..bfd6d0d4ee9a4 --- /dev/null +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx @@ -0,0 +1,391 @@ +/** + * 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 . + */ + +import React, { useState, useRef } from 'react'; +import { components } from 'react-select'; +import ReactSelectCreatable from 'react-select/creatable'; +import styled from 'styled-components'; +import { ButtonBorder, Box, Text, Flex, ButtonIcon } from 'design'; +import * as Icon from 'design/Icon'; + +import { ReviewerOption } from './types'; + +export function SelectReviewers({ + reviewers, + selectedReviewers, + setSelectedReviewers, +}) { + const selectWrapperRef = useRef(null); + const reactSelectRef = useRef(null); + const [editReviewers, setEditReviewers] = useState(false); + const [suggestedReviewers, setSuggestedReviewers] = useState< + ReviewerOption[] + >( + // Initially, all suggested reviewers are selected for the requestor. + () => reviewers.map(r => ({ value: r, label: r, isDisabled: true })) + ); + + React.useEffect(() => { + // When editing reviewers, auto focus on input box. + if (editReviewers) { + reactSelectRef.current.focus(); + } + + // When editing reviewers, clicking outside box closes editor. + function handleOnClick(e) { + if (!editReviewers || e.target.closest('.react-select__option')) return; + + if (!selectWrapperRef.current?.contains(e.target)) { + setEditReviewers(false); + } + } + + window.addEventListener('click', handleOnClick); + + return () => { + window.removeEventListener('click', handleOnClick); + }; + }, [editReviewers]); + + const reviewerOptions = [ + { + label: '', + options: selectedReviewers, + }, + { + label: 'Suggested Reviewers', + options: suggestedReviewers, + }, + ]; + + // formatGroupLabel customizes react-select labels. + const formatGroupLabel = data => { + if (!data.label) { + return null; + } + return {data.label}; + }; + + // Option customizes how react-select options appear. + const Option = props => { + if (props.data.isDisabled) { + return null; + } + + if (props.data.isSelected) { + return ( + + + + + {props.data.value} + + + + + ); + } + + return ( + + + {props.data.label} + + + ); + }; + + function handleOnChange(values: ReviewerOption[]) { + const updateSelectedReviewers = values.map(r => ({ + value: r.value, + label: r.label, + // isSelected flag is used to customize style. + isSelected: true, + })); + + const updateSuggestedReviewers = suggestedReviewers.map(r => { + if (values.find(t => t.value === r.value)) { + // isDisabled flag is used to not render this name in suggested list. + r.isDisabled = true; + } else { + r.isDisabled = false; + } + return r; + }); + + setSelectedReviewers(updateSelectedReviewers); + setSuggestedReviewers(updateSuggestedReviewers); + } + + function toggleEditReviewers() { + setEditReviewers(!editReviewers); + } + + return ( + + + null} + ref={reactSelectRef} + /> + + + + ); +} + +function Reviewers({ + reviewers, + editReviewers, + toggleEditReviewers, + updateReviewers, +}: { + reviewers: ReviewerOption[]; + editReviewers: boolean; + toggleEditReviewers(): void; + updateReviewers(o: ReviewerOption[]): void; +}) { + const [expanded, setExpanded] = useState(true); + const ArrowIcon = expanded ? Icon.ChevronDown : Icon.ChevronRight; + + const $reviewers = reviewers.map((reviewer, index) => { + return ( + props.theme.colors.spotBackground[0]}; + `} + > + + {reviewer.value} + + + updateReviewers(reviewers.filter(r => r.value != reviewer.value)) + } + > + + + + ); + }); + + let btnTxt = 'Add'; + if (reviewers.length > 0) { + btnTxt = 'Edit'; + } + if (editReviewers) { + btnTxt = 'Done'; + } + + return ( + <> + props.theme.colors.spotBackground[1]}; + `} + > + + + Reviewers (optional) + + { + // By stopping propagation, + // we prevent this event from being interpreted as an outside click. + e.stopPropagation(); + toggleEditReviewers(); + }} + size="small" + width="50px" + > + {btnTxt} + + + {reviewers.length > 0 && ( + setExpanded(e => !e)}> + + + )} + + {expanded && {$reviewers}} + + ); +} + +const SelectWrapper = styled(Box)` + width: 260px; + height: 150px; + background-color: #ffffff; + color: #000000; + border-radius: 3px; + position: absolute; + z-index: 1; + top: 40px; + + .react-select__group, + .react-select__group-heading, + .react-select__menu-list { + padding: 0; + margin: 0; + } + + .react-select__menu-list { + margin-top: 10px; + } + + // Removes auto focus on first option + .react-select__option--is-focused { + background-color: inherit; + &:hover { + background-color: #deebff; + } + } + + .react-select-container { + width: 300px; + box-sizing: border-box; + border: none; + display: block; + font-size: 16px; + outline: none; + width: 100%; + background-color: #ffffff; + margin-top: 16px; + border-radius: 4px; + } + + .react-select__menu { + box-shadow: none; + } + + .react-select__control { + border-radius: 30px; + background-color: #f0f2f4; + margin: 0px 16px 10px 16px; + + &:hover { + cursor: pointer; + } + } + + .react-select__control--is-focused { + border-color: transparent; + box-shadow: none; + } + + .react-select__placeholder { + font-size: 14px; + } + + .react-select__option { + white-space: nowrap; + padding: 9px 16px; + border-top: 1px solid #eaeaea; + font-weight: bold; + font-size: 14px; + + &:hover { + cursor: pointer; + + &:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + } + + .icon-circlecheck { + color: transparent; + margin-right: 10px; + } + } + + .react-select__option--is-selected { + background-color: inherit; + color: inherit; + } + + .react-select__indicators { + display: none; + } + + .react-select__selected { + .icon-circlecheck { + color: ${props => props.theme.colors.success.main}; + } + + .icon-cross { + color: ${props => props.theme.colors.bgTerminal}; + display: none; + } + + &:hover .icon-cross { + display: block; + } + } +`; + +const SelectGroupLabel = styled(Box)` + width: 100%; + background-color: #efefef; + color: #324148; + text-transform: none; + padding: 3px 15px; +`; diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap new file mode 100644 index 0000000000000..90726dbc9ad08 --- /dev/null +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap @@ -0,0 +1,3394 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`failed state 1`] = ` +.c8 { + display: flex; + align-items: center; + justify-content: center; + border-radius: 2px; + box-sizing: border-box; + box-shadow: 0 1px 4px rgba(0,0,0,0.24); + margin: 0 0 24px 0; + min-height: 40px; + padding: 8px 16px; + overflow: auto; + word-break: break-word; + line-height: 1.5; + background: #FF6257; + color: #000000; +} + +.c8 a { + color: #FFFFFF; +} + +.c1 { + box-sizing: border-box; +} + +.c4 { + box-sizing: border-box; + margin-bottom: 16px; +} + +.c13 { + box-sizing: border-box; + margin-bottom: 4px; + margin-top: 40px; +} + +.c16 { + box-sizing: border-box; + margin-bottom: 8px; + padding-bottom: 8px; + height: 34px; + border-bottom: 1px solid; +} + +.c22 { + box-sizing: border-box; + margin-top: 40px; +} + +.c24 { + box-sizing: border-box; + margin-bottom: 4px; +} + +.c25 { + box-sizing: border-box; + margin-bottom: 8px; +} + +.c29 { + box-sizing: border-box; + max-width: 270px; + min-width: 200px; +} + +.c37 { + box-sizing: border-box; + padding: 8px; + height: 80px; + width: 100%; + color: #FFFFFF; + border: 1px solid; + border-radius: 4px; + border-color: rgba(255,255,255,0.54); +} + +.c39 { + box-sizing: border-box; + margin-bottom: 8px; + margin-top: 4px; + padding-bottom: 8px; + height: 34px; + border-bottom: 1px solid; +} + +.c42 { + box-sizing: border-box; + padding-top: 24px; + padding-bottom: 24px; +} + +.c21 { + line-height: 1.5; + margin: 0; + display: inline-flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: inherit; + font-weight: 600; + outline: none; + position: relative; + text-align: center; + text-decoration: none; + text-transform: uppercase; + transition: all 0.3s; + -webkit-font-smoothing: antialiased; + color: #FFFFFF; + background: rgba(255,255,255,0); + border: 1px solid rgba(255,255,255,0.36); + font-size: 10px; + min-height: 24px; + padding: 0px 16px; + width: 50px; +} + +.c21:hover, +.c21:focus { + background: rgba(255,255,255,0.07); +} + +.c21:active { + background: rgba(255,255,255,0.13); +} + +.c21:disabled { + background: rgba(255,255,255,0.12); + color: rgba(255,255,255,0.3); + cursor: auto; +} + +.c44 { + line-height: 1.5; + margin: 0; + display: inline-flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: inherit; + font-weight: 600; + outline: none; + position: relative; + text-align: center; + text-decoration: none; + text-transform: uppercase; + transition: all 0.3s; + -webkit-font-smoothing: antialiased; + color: #000000; + background: #9F85FF; + min-height: 40px; + font-size: 12px; + padding: 0px 40px; + width: 100%; +} + +.c44:hover, +.c44:focus { + background: #B29DFF; +} + +.c44:active { + background: #C5B6FF; +} + +.c44:disabled { + background: rgba(255,255,255,0.12); + color: rgba(255,255,255,0.3); + cursor: auto; +} + +.c41 { + align-items: center; + border: none; + cursor: pointer; + display: flex; + outline: none; + border-radius: 50%; + overflow: visible; + justify-content: center; + text-align: center; + flex: 0 0 auto; + background: transparent; + color: inherit; + transition: all 0.3s; + -webkit-font-smoothing: antialiased; + font-size: 16px; + height: 32px; + width: 32px; +} + +.c41:disabled { + color: rgba(255,255,255,0.36); + cursor: default; +} + +.c41:not(:disabled):hover, +.c41:not(:disabled):focus { + background: rgba(255,255,255,0.13); +} + +.c41:not(:disabled):active { + background: rgba(255,255,255,0.18); +} + +.c6 { + display: inline-flex; + align-items: center; + justify-content: center; + margin-right: 16px; +} + +.c31 { + display: inline-flex; + align-items: center; + justify-content: center; + margin-left: 16px; +} + +.c34 { + display: inline-flex; + align-items: center; + justify-content: center; +} + +.c11 { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px; + border-radius: 4px; +} + +.c7 { + overflow: hidden; + text-overflow: ellipsis; + font-weight: 600; + font-size: 18px; + line-height: 32px; + margin: 0px; + color: #FFFFFF; +} + +.c20 { + overflow: hidden; + text-overflow: ellipsis; + font-size: 12px; + margin: 0px; + margin-right: 8px; +} + +.c32 { + overflow: hidden; + text-overflow: ellipsis; + margin: 0px; + margin-right: 4px; +} + +.c28 { + color: #FFFFFF; + display: block; + font-size: 12px; + width: 100%; + margin-bottom: 4px; +} + +.c5 { + display: flex; + align-items: center; +} + +.c17 { + display: flex; + align-items: center; + justify-content: space-between; +} + +.c19 { + display: flex; +} + +.c23 { + display: flex; + flex-direction: column; + gap: 4px; +} + +.c26 { + display: flex; + align-items: end; + gap: 8px; +} + +.c9 { + border-collapse: collapse; + border-spacing: 0; + border-style: hidden; + font-size: 12px; + width: 100%; +} + +.c9 > thead > tr > th, +.c9 > tbody > tr > th, +.c9 > tfoot > tr > th, +.c9 > thead > tr > td, +.c9 > tbody > tr > td, +.c9 > tfoot > tr > td { + padding: 8px 8px; + vertical-align: middle; +} + +.c9 > thead > tr > th:first-child, +.c9 > tbody > tr > th:first-child, +.c9 > tfoot > tr > th:first-child, +.c9 > thead > tr > td:first-child, +.c9 > tbody > tr > td:first-child, +.c9 > tfoot > tr > td:first-child { + padding-left: 24px; +} + +.c9 > thead > tr > th:last-child, +.c9 > tbody > tr > th:last-child, +.c9 > tfoot > tr > th:last-child, +.c9 > thead > tr > td:last-child, +.c9 > tbody > tr > td:last-child, +.c9 > tfoot > tr > td:last-child { + padding-right: 24px; +} + +.c9 > tbody > tr > td { + vertical-align: middle; +} + +.c9 > thead > tr > th { + color: #FFFFFF; + font-weight: 600; + font-size: 14px; + line-height: 24px; + cursor: pointer; + padding-bottom: 0; + padding-top: 0; + text-align: left; + white-space: nowrap; +} + +.c9 > thead > tr > th svg { + height: 12px; +} + +.c9 > tbody > tr > td { + color: #FFFFFF; + font-weight: 300; + font-size: 14px; + line-height: 20px; + letter-spacing: 0.035px; +} + +.c9 tbody tr { + transition: all 150ms; + position: relative; + border-top: 2px solid rgba(255,255,255,0.07); +} + +.c9 tbody tr:hover { + border-top: 2px solid rgba(0,0,0,0); + background-color: #222C59; +} + +.c9 tbody tr:hover:after { + box-shadow: 0px 1px 10px 0px rgba(0,0,0,0.12),0px 4px 5px 0px rgba(0,0,0,0.14),0px 2px 4px -1px rgba(0,0,0,0.20); + content: ''; + position: absolute; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; +} + +.c9 tbody tr:hover + tr { + border-top: 2px solid rgba(0,0,0,0); +} + +.c36 .react-select-container { + box-sizing: border-box; + display: block; + font-size: 14px; + outline: none; + width: 100%; + color: #FFFFFF; + background-color: transparent; + margin-bottom: 0px; + border-radius: 4px; +} + +.c36 .react-select__control { + outline: none; + min-height: 40px; + height: fit-content; + border: 1px solid rgba(255,255,255,0.54); + border-radius: 4px; + background-color: transparent; + box-shadow: none; +} + +.c36 .react-select__control .react-select__dropdown-indicator { + color: rgba(255,255,255,0.54); +} + +.c36 .react-select__control:hover, +.c36 .react-select__control:focus, +.c36 .react-select__control:active { + border: 1px solid rgba(255,255,255,0.72); + background-color: rgba(255,255,255,0.07); + cursor: pointer; +} + +.c36 .react-select__control:hover .react-select__dropdown-indicator, +.c36 .react-select__control:focus .react-select__dropdown-indicator, +.c36 .react-select__control:active .react-select__dropdown-indicator { + color: #FFFFFF; +} + +.c36 .react-select__control .react-select__indicator:hover, +.c36 .react-select__control .react-select__dropdown-indicator:hover, +.c36 .react-select__control .react-select__indicator:focus, +.c36 .react-select__control .react-select__dropdown-indicator:focus, +.c36 .react-select__control .react-select__indicator:active, +.c36 .react-select__control .react-select__dropdown-indicator:active { + color: #FFFFFF; +} + +.c36 .react-select__control--is-focused { + border-color: rgba(255,255,255,0.72); + background-color: rgba(255,255,255,0.07); + cursor: pointer; +} + +.c36 .react-select__control--is-focused .react-select__dropdown-indicator { + color: #FFFFFF; +} + +.c36 .react-select__single-value { + color: #FFFFFF; +} + +.c36 .react-select__placeholder { + color: rgba(255,255,255,0.54); +} + +.c36 .react-select__multi-value { + background-color: rgba(255,255,255,0.13); +} + +.c36 .react-select__multi-value .react-select__multi-value__label { + color: #FFFFFF; + padding: 0 6px; +} + +.c36 .react-select__multi-value .react-select__multi-value__remove { + color: #FFFFFF; +} + +.c36 .react-select__multi-value .react-select__multi-value__remove:hover { + background-color: rgba(255,255,255,0.07); + color: #FF6257; +} + +.c36 .react-select__option:hover { + cursor: pointer; + background-color: rgba(255,255,255,0.07); +} + +.c36 .react-select__option--is-focused { + background-color: rgba(255,255,255,0.07); +} + +.c36 .react-select__option--is-focused:hover { + cursor: pointer; + background-color: rgba(255,255,255,0.07); +} + +.c36 .react-select__option--is-selected { + background-color: rgba(255,255,255,0.13); + color: inherit; + font-weight: 500; +} + +.c36 .react-select__option--is-selected:hover { + background-color: rgba(255,255,255,0.13); +} + +.c36 .react-select__clear-indicator { + color: rgba(255,255,255,0.72); +} + +.c36 .react-select__clear-indicator:hover, +.c36 .react-select__clear-indicator:focus { + background-color: rgba(255,255,255,0.07); +} + +.c36 .react-select__clear-indicator:hover svg, +.c36 .react-select__clear-indicator:focus svg { + color: #FF6257; +} + +.c36 .react-select__menu { + margin-top: 0px; + background-color: #344179; + box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); +} + +.c36 .react-select__menu .react-select__menu-list::-webkit-scrollbar-thumb { + background: rgba(255,255,255,0.13); + border-radius: 4px; +} + +.c36 .react-select__indicator-separator { + display: none; +} + +.c36 .react-select__loading-indicator { + display: none; +} + +.c36 .react-select__control--is-disabled { + color: rgba(255,255,255,0.36); + border: 1px solid rgba(255,255,255,0.36); +} + +.c36 .react-select__control--is-disabled .react-select__single-value, +.c36 .react-select__control--is-disabled .react-select__placeholder { + color: rgba(255,255,255,0.36); +} + +.c36 .react-select__control--is-disabled .react-select__indicator { + color: rgba(255,255,255,0.36); +} + +.c36 .react-select__input { + color: #FFFFFF; +} + +.c30 { + height: 40px; + border: 1px solid rgba(255,255,255,0.54); + border-radius: 4px; + padding: 0 8px; + align-items: center; + justify-content: space-between; + cursor: pointer; +} + +.c30:hover { + background-color: rgba(255,255,255,0.07); + border: 1px solid rgba(255,255,255,0.72); +} + +.c27 { + position: relative; +} + +.c35 { + height: 18px; + width: 18px; + color: inherit; +} + +.c33 { + vertical-align: middle; + display: inline-block; + height: 18px; +} + +.c33:hover { + cursor: pointer; +} + +.c14 { + width: 260px; + height: 150px; + background-color: #ffffff; + color: #000000; + border-radius: 3px; + position: absolute; + z-index: 1; + top: 40px; +} + +.c14 .react-select__group, +.c14 .react-select__group-heading, +.c14 .react-select__menu-list { + padding: 0; + margin: 0; +} + +.c14 .react-select__menu-list { + margin-top: 10px; +} + +.c14 .react-select__option--is-focused { + background-color: inherit; +} + +.c14 .react-select__option--is-focused:hover { + background-color: #deebff; +} + +.c14 .react-select-container { + width: 300px; + box-sizing: border-box; + border: none; + display: block; + font-size: 16px; + outline: none; + width: 100%; + background-color: #ffffff; + margin-top: 16px; + border-radius: 4px; +} + +.c14 .react-select__menu { + box-shadow: none; +} + +.c14 .react-select__control { + border-radius: 30px; + background-color: #f0f2f4; + margin: 0px 16px 10px 16px; +} + +.c14 .react-select__control:hover { + cursor: pointer; +} + +.c14 .react-select__control--is-focused { + border-color: transparent; + box-shadow: none; +} + +.c14 .react-select__placeholder { + font-size: 14px; +} + +.c14 .react-select__option { + white-space: nowrap; + padding: 9px 16px; + border-top: 1px solid #eaeaea; + font-weight: bold; + font-size: 14px; +} + +.c14 .react-select__option:hover { + cursor: pointer; +} + +.c14 .react-select__option:hover:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.c14 .react-select__option .icon-circlecheck { + color: transparent; + margin-right: 10px; +} + +.c14 .react-select__option--is-selected { + background-color: inherit; + color: inherit; +} + +.c14 .react-select__indicators { + display: none; +} + +.c14 .react-select__selected .icon-circlecheck { + color: #00BFA6; +} + +.c14 .react-select__selected .icon-cross { + color: #010B1C; + display: none; +} + +.c14 .react-select__selected:hover .icon-cross { + display: block; +} + +.c15 { + width: 100%; + background-color: #efefef; + color: #324148; + text-transform: none; + padding: 3px 15px; +} + +.c18 { + border-color: rgba(255,255,255,0.13); +} + +.c40 { + border-color: rgba(255,255,255,0.13); +} + +.c3 { + position: absolute; + z-index: 11; + top: 0px; + right: 0px; + background: #0C143D; + min-height: 100%; + width: 500px; + padding: 20px; +} + +.c3.entering { + right: -500px; +} + +.c3.entered { + right: 0px; + transition: right 300ms ease-out; +} + +.c3.exiting { + right: -500px; + transition: right 300ms ease-out; +} + +.c3.exited { + right: -500px; +} + +.c2 { + background: #000; + opacity: 0.5; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10; +} + +.c10 { + border-radius: 8px; + box-shadow: 0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px rgba(0,0,0,0.14),0px 1px 3px rgba(0,0,0,0.12); + overflow: hidden; +} + +.c10 > tbody > tr > td { + vertical-align: middle; +} + +.c10 > thead > tr > th { + background: rgba(255,255,255,0.13); +} + +.c0 { + position: absolute; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + overflow: hidden; +} + +.c12 { + cursor: pointer; + background-color: rgba(255,255,255,0.07); + border-radius: 2px; +} + +.c12:hover { + background-color: rgba(255,255,255,0.13); +} + +.c43 { + position: sticky; + bottom: 0; + background: #0C143D; +} + +.c38 { + outline: none; + background: transparent; +} + +.c38::placeholder { + color: rgba(255,255,255,0.54); +} + +.c38:hover, +.c38:focus, +.c38:active { + border: 1px solid rgba(255,255,255,0.72); +} + +
+
+
+
+
+
+ + + + + + +
+
+ 5 + + Resources + Selected +
+
+
+
+ some error message +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Resource Kind + + Resource Name + +
+ app + + app-name + + + + + + + + +
+ db + + app-name + + + + + + + + +
+ kube_cluster + + kube-name + + + + + + + + +
+ user_group + + user-group-name + + + + + + + + +
+ windows_desktop + + desktop-name + + + + + + + + +
+
+
+