diff --git a/api/client/alpn.go b/api/client/alpn.go index 91a8d968b64d6..4ccaa402f7e8d 100644 --- a/api/client/alpn.go +++ b/api/client/alpn.go @@ -55,6 +55,9 @@ type ALPNDialerConfig struct { // CAs when connection upgrade is required. If not provided, it's assumed // the proper CAs are already present in TLSConfig. GetClusterCAs GetClusterCAsFunc + // PROXYHeaderGetter is used if present to get signed PROXY headers to propagate client's IP. + // Used by proxy's web server to make calls on behalf of connected clients. + PROXYHeaderGetter PROXYHeaderGetter } // ALPNDialer is a ContextDialer that dials a connection to the Proxy Service @@ -132,6 +135,7 @@ func (d *ALPNDialer) DialContext(ctx context.Context, network, addr string) (net WithInsecureSkipVerify(d.cfg.TLSConfig.InsecureSkipVerify), WithALPNConnUpgrade(d.cfg.ALPNConnUpgradeRequired), WithALPNConnUpgradePing(shouldALPNConnUpgradeWithPing(tlsConfig)), + WithPROXYHeaderGetter(d.cfg.PROXYHeaderGetter), ) conn, err := dialer.DialContext(ctx, network, addr) diff --git a/api/client/alpn_conn_upgrade.go b/api/client/alpn_conn_upgrade.go index c96dec445b0cf..bbbe4f99a61ae 100644 --- a/api/client/alpn_conn_upgrade.go +++ b/api/client/alpn_conn_upgrade.go @@ -34,6 +34,7 @@ import ( "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/utils" "github.com/gravitational/teleport/api/utils/pingconn" + "github.com/gravitational/teleport/api/utils/tlsutils" ) // IsALPNConnUpgradeRequired returns true if a tunnel is required through a HTTP @@ -162,35 +163,17 @@ func newALPNConnUpgradeDialer(dialer ContextDialer, tlsConfig *tls.Config, withP func (d *alpnConnUpgradeDialer) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { logrus.Debugf("ALPN connection upgrade for %v.", addr) - conn, err := d.dialer.DialContext(ctx, network, addr) + tlsConn, err := tlsutils.TLSDial(ctx, d.dialer, network, addr, d.tlsConfig.Clone()) if err != nil { return nil, trace.Wrap(err) } - - // matching the behavior of tls.Dial - cfg := d.tlsConfig - if cfg == nil { - cfg = &tls.Config{} - } - if cfg.ServerName == "" { - colonPos := strings.LastIndex(addr, ":") - if colonPos == -1 { - colonPos = len(addr) - } - hostname := addr[:colonPos] - - cfg = cfg.Clone() - cfg.ServerName = hostname - } - - tlsConn := tls.Client(conn, cfg) upgradeURL := url.URL{ Host: addr, Scheme: "https", Path: constants.WebAPIConnUpgrade, } - conn, err = upgradeConnThroughWebAPI(tlsConn, upgradeURL, d.upgradeType()) + conn, err := upgradeConnThroughWebAPI(tlsConn, upgradeURL, d.upgradeType()) if err != nil { return nil, trace.NewAggregate(tlsConn.Close(), err) } diff --git a/api/client/client.go b/api/client/client.go index 9056e854ecf11..f036b37f4db3d 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -338,6 +338,7 @@ func authConnect(ctx context.Context, params connectParams) (*Client, error) { WithInsecureSkipVerify(params.cfg.InsecureAddressDiscovery), WithALPNConnUpgrade(params.cfg.ALPNConnUpgradeRequired), WithALPNConnUpgradePing(true), // Use Ping protocol for long-lived connections. + WithPROXYHeaderGetter(params.cfg.PROXYHeaderGetter), ) clt := newClient(params.cfg, dialer, params.tlsConfig) @@ -562,6 +563,9 @@ type Config struct { // will perform necessary tests to decide if connection upgrade is // required. ALPNConnUpgradeRequired bool + // PROXYHeaderGetter returns signed PROXY header that is sent to allow Proxy to propagate client's real IP to the + // auth server from the Proxy's web server, when we create user's client for the web session. + PROXYHeaderGetter PROXYHeaderGetter } // CheckAndSetDefaults checks and sets default config values. diff --git a/api/client/contextdialer.go b/api/client/contextdialer.go index 693ac9ebd44d3..5dc11b63b74e6 100644 --- a/api/client/contextdialer.go +++ b/api/client/contextdialer.go @@ -45,6 +45,9 @@ type dialConfig struct { // connection upgrade. This is only effective when alpnConnUpgradeRequired // is true. alpnConnUpgradeWithPing bool + // proxyHeaderGetter is used if present to get signed PROXY headers to propagate client's IP. + // Used by proxy's web server to make calls on behalf of connected clients. + proxyHeaderGetter PROXYHeaderGetter } // WithInsecureSkipVerify specifies if dialing insecure when using an HTTPS proxy. @@ -71,6 +74,14 @@ func WithALPNConnUpgradePing(alpnConnUpgradeWithPing bool) DialOption { } } +// WithPROXYHeaderGetter provides PROXY headers signer so client's real IP could be propagated. +// Used by proxy's web server to make calls on behalf of connected clients. +func WithPROXYHeaderGetter(proxyHeaderGetter PROXYHeaderGetter) DialProxyOption { + return func(cfg *dialProxyConfig) { + cfg.proxyHeaderGetter = proxyHeaderGetter + } +} + // DialOption allows setting options as functional arguments to api.NewDialer. type DialOption func(cfg *dialConfig) @@ -96,12 +107,37 @@ func newDirectDialer(keepAlivePeriod, dialTimeout time.Duration) *net.Dialer { } } -func newProxyURLDialer(proxyURL *url.URL, dialer *net.Dialer, opts ...DialProxyOption) ContextDialer { +func newProxyURLDialer(proxyURL *url.URL, dialer ContextDialer, opts ...DialProxyOption) ContextDialer { return ContextDialerFunc(func(ctx context.Context, network, addr string) (net.Conn, error) { return DialProxyWithDialer(ctx, proxyURL, addr, dialer, opts...) }) } +// NewPROXYHeaderDialer makes a new dialer that can propagate client IP if signed PROXY header getter is present +func NewPROXYHeaderDialer(dialer ContextDialer, headerGetter PROXYHeaderGetter) ContextDialer { + return ContextDialerFunc(func(ctx context.Context, network, addr string) (net.Conn, error) { + conn, err := dialer.DialContext(ctx, network, addr) + if err != nil { + return nil, trace.Wrap(err) + } + + if headerGetter != nil { + signedHeader, err := headerGetter() + if err != nil { + conn.Close() + return nil, trace.Wrap(err) + } + _, err = conn.Write(signedHeader) + if err != nil { + conn.Close() + return nil, trace.Wrap(err) + } + } + + return conn, nil + }) +} + // tracedDialer ensures that the provided ContextDialerFunc is given a context // which contains tracing information. In the event that a grpc dial occurs without // a grpc.WithBlock dialing option, the context provided to the dial function will @@ -136,9 +172,15 @@ func NewDialer(ctx context.Context, keepAlivePeriod, dialTimeout time.Duration, // Base direct dialer. var dialer ContextDialer = netDialer + // Wrap with PROXY header dialer if getter is present. + // Used by Proxy's web server to propagate real client IP when making calls on behalf of connected clients + if cfg.proxyHeaderGetter != nil { + dialer = NewPROXYHeaderDialer(dialer, cfg.proxyHeaderGetter) + } + // Wrap with proxy URL dialer if proxy URL is detected. if proxyURL := utils.GetProxyURL(addr); proxyURL != nil { - dialer = newProxyURLDialer(proxyURL, netDialer, opts...) + dialer = newProxyURLDialer(proxyURL, dialer, opts...) } // Wrap with alpnConnUpgradeDialer if upgrade is required for TLS Routing. diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index 5981f08451679..b64eb68d148a5 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -9607,7 +9607,9 @@ type ChangeUserAuthenticationRequest struct { // cluster settings enable optional second factor), or cluster settings disabled second factor. NewMFARegisterResponse *MFARegisterResponse `protobuf:"bytes,3,opt,name=NewMFARegisterResponse,proto3" json:"new_mfa_register_response,omitempty"` // NewDeviceName is the name of a new mfa or passwordless device. - NewDeviceName string `protobuf:"bytes,4,opt,name=NewDeviceName,proto3" json:"new_device_name,omitempty"` + NewDeviceName string `protobuf:"bytes,4,opt,name=NewDeviceName,proto3" json:"new_device_name,omitempty"` + // LoginIP is an IP that will be embedded in the new client's certificate for web session if successful. + LoginIP string `protobuf:"bytes,5,opt,name=LoginIP,proto3" json:"login_ip,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -9674,6 +9676,13 @@ func (m *ChangeUserAuthenticationRequest) GetNewDeviceName() string { return "" } +func (m *ChangeUserAuthenticationRequest) GetLoginIP() string { + if m != nil { + return m.LoginIP + } + return "" +} + // ChangeUserAuthenticationResponse is a response for ChangeUserAuthentication. type ChangeUserAuthenticationResponse struct { // WebSession is a user's web sesssion created from successful changing of password. @@ -14226,829 +14235,830 @@ func init() { } var fileDescriptor_0ffcffcda38ae159 = []byte{ - // 13143 bytes of a gzipped FileDescriptorProto + // 13164 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0xbd, 0x5d, 0x6c, 0x1c, 0x49, 0x92, 0x18, 0xac, 0x6e, 0x92, 0x22, 0x19, 0xfc, 0x6b, 0xa5, 0x48, 0xb1, 0xd5, 0xa4, 0xd8, 0x52, 0x69, 0xa4, 0xd1, 0x68, 0x77, 0xf5, 0x43, 0xcd, 0xff, 0xcc, 0xce, 0x6c, 0x77, 0x93, 0x12, 0x29, 0x51, 0x24, 0xa7, 0x9a, 0x6c, 0xcd, 0xee, 0xce, 0x6e, 0x6f, 0xb1, 0x3b, 0x45, 0xd5, 0xc7, 0x66, 0x57, 0x6f, 0x55, 0xb5, 0x34, 0xba, 0x0f, 0xdf, 0xcf, 0xf9, 0x7c, 0xf7, 0x60, 0xe3, 0xec, 0x33, - 0x70, 0x67, 0xf8, 0x70, 0x30, 0xce, 0x80, 0xfd, 0x62, 0x03, 0x06, 0xfc, 0x72, 0x38, 0xc0, 0x30, - 0x60, 0x9c, 0x6d, 0xc0, 0x6b, 0x03, 0x07, 0x18, 0xb0, 0x0f, 0x06, 0x6c, 0x80, 0xf6, 0x2d, 0xfc, - 0x44, 0xc0, 0x4f, 0x86, 0xfd, 0xb0, 0x4f, 0x46, 0xfe, 0x56, 0x66, 0x55, 0x56, 0x35, 0xa9, 0xe1, - 0x8e, 0x5f, 0x24, 0x76, 0x66, 0x44, 0xe4, 0x7f, 0x54, 0x44, 0x64, 0x64, 0x04, 0xdc, 0x09, 0x71, - 0x07, 0xf7, 0x3c, 0x3f, 0xbc, 0xdb, 0xc1, 0xfb, 0x4e, 0xeb, 0xf5, 0xdd, 0x56, 0xc7, 0xc5, 0xdd, - 0xf0, 0x6e, 0xcf, 0xf7, 0x42, 0xef, 0xae, 0xd3, 0x0f, 0x5f, 0x04, 0xd8, 0x7f, 0xe9, 0xb6, 0xf0, - 0x1d, 0x5a, 0x82, 0x46, 0xe8, 0x7f, 0xa5, 0xd9, 0x7d, 0x6f, 0xdf, 0x63, 0x30, 0xe4, 0x2f, 0x56, - 0x59, 0x5a, 0xd8, 0xf7, 0xbc, 0xfd, 0x0e, 0x66, 0xc8, 0x7b, 0xfd, 0xe7, 0x77, 0xf1, 0x61, 0x2f, - 0x7c, 0xcd, 0x2b, 0xcb, 0xf1, 0xca, 0xd0, 0x3d, 0xc4, 0x41, 0xe8, 0x1c, 0xf6, 0x38, 0xc0, 0x3b, - 0xb2, 0x2b, 0x4e, 0x18, 0x92, 0x9a, 0xd0, 0xf5, 0xba, 0x77, 0x5f, 0xde, 0x57, 0x7f, 0x72, 0xd0, - 0x5b, 0x99, 0xbd, 0x6e, 0x61, 0x3f, 0x0c, 0x12, 0x44, 0x39, 0x64, 0xf8, 0xba, 0x87, 0x83, 0xbb, - 0xf8, 0x25, 0xee, 0x86, 0xe2, 0x3f, 0x0e, 0x7a, 0xcd, 0x0c, 0x4a, 0xff, 0xe5, 0x20, 0xdf, 0x33, - 0x83, 0xbc, 0xc2, 0x7b, 0x64, 0xa6, 0xba, 0xf2, 0x8f, 0x01, 0xe0, 0xbe, 0xd3, 0xeb, 0x61, 0x3f, - 0xfa, 0x23, 0xd1, 0xd7, 0x7e, 0xe0, 0xec, 0x63, 0xde, 0xc7, 0x97, 0xf7, 0xd5, 0x9f, 0x0c, 0xd4, - 0xfa, 0x9d, 0x25, 0x18, 0x59, 0x25, 0x05, 0xe8, 0x43, 0x18, 0xde, 0x79, 0xdd, 0xc3, 0xc5, 0xdc, - 0xd5, 0xdc, 0xad, 0xe9, 0xe5, 0x02, 0xab, 0xbf, 0xb3, 0xd5, 0xc3, 0x3e, 0x9d, 0xb0, 0x2a, 0x3a, - 0x3e, 0x2a, 0x4f, 0x93, 0x76, 0xbf, 0xeb, 0x1d, 0xba, 0x21, 0x5d, 0x10, 0x9b, 0x62, 0xa0, 0x67, - 0x30, 0x6d, 0xe3, 0xc0, 0xeb, 0xfb, 0x2d, 0xbc, 0x86, 0x9d, 0x36, 0xf6, 0x8b, 0xf9, 0xab, 0xb9, - 0x5b, 0x13, 0xcb, 0x73, 0x77, 0xd8, 0x90, 0xf5, 0xca, 0xea, 0xa5, 0xe3, 0xa3, 0x32, 0xf2, 0x79, - 0x59, 0x44, 0x6c, 0xed, 0x9c, 0x1d, 0x23, 0x83, 0xbe, 0x82, 0xa9, 0x1a, 0xf6, 0xc3, 0x4a, 0x3f, - 0x7c, 0xe1, 0xf9, 0x6e, 0xf8, 0xba, 0x38, 0x44, 0xe9, 0x5e, 0xe2, 0x74, 0xb5, 0xba, 0xc6, 0x72, - 0x75, 0xf1, 0xf8, 0xa8, 0x5c, 0x24, 0x6b, 0xd6, 0x74, 0x44, 0xa9, 0x46, 0x5e, 0x27, 0x86, 0xbe, - 0x84, 0xc9, 0x3a, 0xd9, 0x0c, 0xad, 0x1d, 0xef, 0x00, 0x77, 0x83, 0xe2, 0xb0, 0xd6, 0x69, 0xb5, - 0xaa, 0xb1, 0x5c, 0x5d, 0x38, 0x3e, 0x2a, 0xcf, 0xd3, 0xbd, 0xd3, 0x6a, 0x86, 0xb4, 0x50, 0x23, - 0xad, 0x51, 0x42, 0x3f, 0x83, 0xe9, 0x6d, 0xdf, 0x7b, 0xe9, 0x06, 0xae, 0xd7, 0xa5, 0x45, 0xc5, - 0x11, 0x4a, 0x7b, 0x9e, 0xd3, 0xd6, 0x2b, 0x1b, 0xcb, 0xd5, 0x2b, 0xc7, 0x47, 0xe5, 0xcb, 0x3d, - 0x51, 0xca, 0x1a, 0xd0, 0x67, 0x46, 0x47, 0x41, 0x3b, 0x30, 0x51, 0xeb, 0xf4, 0x83, 0x10, 0xfb, - 0x9b, 0xce, 0x21, 0x2e, 0x9e, 0xa7, 0xe4, 0x67, 0xc5, 0xbc, 0x44, 0x35, 0x8d, 0xe5, 0x6a, 0xe9, - 0xf8, 0xa8, 0x7c, 0xa9, 0xc5, 0x8a, 0x9a, 0x5d, 0xe7, 0x50, 0x9f, 0x72, 0x95, 0x0c, 0xfa, 0x00, - 0x86, 0x77, 0x03, 0xec, 0x17, 0xc7, 0x28, 0xb9, 0x29, 0x4e, 0x8e, 0x14, 0x35, 0x96, 0xd9, 0xfa, - 0xf7, 0x03, 0xec, 0x6b, 0xf8, 0x14, 0x81, 0x20, 0xda, 0x5e, 0x07, 0x17, 0xc7, 0x35, 0x44, 0x52, - 0xd4, 0x78, 0x9f, 0x21, 0xfa, 0x5e, 0x47, 0x6f, 0x98, 0x22, 0xa0, 0x75, 0x18, 0x27, 0x2d, 0x07, - 0x3d, 0xa7, 0x85, 0x8b, 0x40, 0xb1, 0x0b, 0x1c, 0x5b, 0x96, 0x57, 0xe7, 0x8f, 0x8f, 0xca, 0x17, - 0xbb, 0xe2, 0xa7, 0x46, 0x25, 0xc2, 0x46, 0x9f, 0xc3, 0xf9, 0x3a, 0xf6, 0x5f, 0x62, 0xbf, 0x38, - 0x41, 0xe9, 0xcc, 0x88, 0x85, 0xa4, 0x85, 0x8d, 0xe5, 0xea, 0xec, 0xf1, 0x51, 0xb9, 0x10, 0xd0, - 0x5f, 0x1a, 0x0d, 0x8e, 0x46, 0x76, 0x9b, 0x8d, 0x5f, 0x62, 0x3f, 0xc0, 0x3b, 0xfd, 0x6e, 0x17, - 0x77, 0x8a, 0x93, 0xda, 0x6e, 0xd3, 0xea, 0xc4, 0x6e, 0xf3, 0x59, 0x61, 0x33, 0xa4, 0xa5, 0xfa, - 0x6e, 0xd3, 0x10, 0xd0, 0x0b, 0x28, 0xb0, 0xbf, 0x6a, 0x5e, 0xb7, 0x8b, 0x5b, 0xe4, 0x48, 0x15, - 0xa7, 0x68, 0x03, 0x97, 0x79, 0x03, 0xf1, 0xea, 0xc6, 0x72, 0xb5, 0x7c, 0x7c, 0x54, 0x5e, 0x60, - 0xb4, 0x9b, 0x2d, 0x59, 0xa1, 0x35, 0x93, 0xa0, 0x4a, 0xc6, 0x51, 0x69, 0xb5, 0x70, 0x10, 0xd8, - 0xf8, 0xe7, 0x7d, 0x1c, 0x84, 0xc5, 0x69, 0x6d, 0x1c, 0x5a, 0x5d, 0xe3, 0x01, 0x1b, 0x87, 0x43, - 0x0b, 0x9b, 0x3e, 0x2b, 0xd5, 0xc7, 0xa1, 0x21, 0xa0, 0x6d, 0x80, 0x4a, 0xaf, 0x57, 0xc7, 0x01, - 0xd9, 0x8c, 0xc5, 0x19, 0x4a, 0xfa, 0x22, 0x27, 0xfd, 0x0c, 0xef, 0xf1, 0x8a, 0xc6, 0x72, 0xf5, - 0xf2, 0xf1, 0x51, 0x79, 0xce, 0xe9, 0xf5, 0x9a, 0x01, 0x2b, 0xd2, 0x88, 0x2a, 0x34, 0xd8, 0xbc, - 0x1f, 0x7a, 0x21, 0xe6, 0x5b, 0xb1, 0x58, 0x88, 0xcd, 0xbb, 0x52, 0x27, 0xfa, 0xeb, 0xd3, 0xc2, - 0x26, 0xdf, 0xd6, 0xf1, 0x79, 0x57, 0x10, 0xc8, 0x59, 0x5c, 0x71, 0x42, 0x67, 0xcf, 0x09, 0x30, - 0xdf, 0x1e, 0x17, 0xb4, 0xb3, 0xa8, 0x57, 0x36, 0x1e, 0xb0, 0xb3, 0xd8, 0xe6, 0xa5, 0x4d, 0xc3, - 0x7e, 0x89, 0xd1, 0x23, 0x33, 0x12, 0x0d, 0xbc, 0x88, 0x06, 0xcc, 0xc8, 0x2b, 0xbc, 0x67, 0x9e, - 0x91, 0x08, 0x14, 0xad, 0xc1, 0xd8, 0x33, 0xbc, 0xc7, 0x38, 0xc7, 0x45, 0x4a, 0xef, 0x42, 0x44, - 0x8f, 0xf1, 0x8c, 0x07, 0xec, 0x54, 0x10, 0x6a, 0x49, 0x6e, 0x21, 0xb1, 0xd1, 0x6f, 0xe7, 0x60, - 0x5e, 0x9c, 0x70, 0x1c, 0xbe, 0xf2, 0xfc, 0x03, 0xb7, 0xbb, 0x5f, 0xf3, 0xba, 0xcf, 0xdd, 0xfd, - 0xe2, 0x2c, 0xa5, 0x7c, 0x35, 0xc6, 0x34, 0x62, 0x50, 0x8d, 0xe5, 0xea, 0xdb, 0xc7, 0x47, 0xe5, - 0xeb, 0x92, 0x81, 0xc8, 0x7a, 0xb2, 0x21, 0x9f, 0xbb, 0xfb, 0x5a, 0xc3, 0x69, 0x6d, 0xa1, 0xdf, - 0xcc, 0xc1, 0x25, 0x3e, 0x3a, 0x1b, 0xb7, 0x3c, 0xbf, 0x1d, 0x75, 0x63, 0x8e, 0x76, 0xa3, 0x2c, - 0x4f, 0xab, 0x09, 0xa8, 0xb1, 0x5c, 0xbd, 0x79, 0x7c, 0x54, 0xb6, 0xf8, 0xc4, 0x35, 0x7d, 0x51, - 0x6d, 0xea, 0x44, 0x4a, 0x43, 0x64, 0x27, 0x10, 0xe6, 0xbf, 0xed, 0xe3, 0xe7, 0xd8, 0xc7, 0xdd, - 0x16, 0x2e, 0x5e, 0xd2, 0x76, 0x82, 0x5e, 0x29, 0xb8, 0x32, 0xf9, 0x94, 0x34, 0x7b, 0xb2, 0x58, - 0xdf, 0x09, 0x3a, 0x0a, 0xfa, 0x39, 0x20, 0x3e, 0x01, 0x95, 0x7e, 0xdb, 0x0d, 0xf9, 0x00, 0xe7, - 0x69, 0x2b, 0x0b, 0xfa, 0x3c, 0x2b, 0x00, 0x8d, 0xe5, 0xaa, 0x75, 0x7c, 0x54, 0x5e, 0x12, 0x53, - 0xec, 0x90, 0x2a, 0xd3, 0xc0, 0x0c, 0xc4, 0x09, 0xe7, 0xdd, 0xf0, 0x5a, 0x07, 0xc5, 0xa2, 0xc6, - 0x79, 0x49, 0x91, 0x60, 0xd9, 0x1d, 0xaf, 0x75, 0xa0, 0x73, 0x5e, 0x52, 0x8b, 0x42, 0xb8, 0xc8, - 0x57, 0xc9, 0xc6, 0x41, 0xe8, 0xbb, 0x94, 0x77, 0x04, 0xc5, 0xcb, 0x94, 0xce, 0xa2, 0xe0, 0xc1, - 0x49, 0x88, 0xc6, 0xbb, 0xac, 0xb7, 0x7c, 0x23, 0x34, 0x7d, 0xa5, 0x4e, 0x6b, 0xc6, 0x44, 0x1e, - 0xfd, 0x3f, 0x30, 0xf7, 0xcc, 0xed, 0xb6, 0xbd, 0x57, 0xc1, 0x0a, 0x0e, 0x0e, 0x42, 0xaf, 0x57, - 0x67, 0x42, 0x61, 0xb1, 0x44, 0xdb, 0x5d, 0x12, 0xdb, 0xdc, 0x04, 0xd3, 0x78, 0x50, 0xbd, 0x71, - 0x7c, 0x54, 0xbe, 0xf6, 0x8a, 0x55, 0x36, 0xdb, 0xac, 0xb6, 0xc9, 0xe5, 0x4a, 0xad, 0x71, 0x73, - 0x2b, 0x64, 0x0b, 0xe8, 0x15, 0xc5, 0x05, 0x6d, 0x0b, 0xe8, 0x95, 0x82, 0x19, 0xc4, 0x1a, 0xd4, - 0xb7, 0x80, 0x8e, 0x82, 0x1e, 0xc1, 0x98, 0x60, 0x0f, 0xc5, 0x45, 0xed, 0xe8, 0x8a, 0xe2, 0xc6, - 0x03, 0x26, 0x01, 0x09, 0x16, 0xa3, 0x9f, 0x5c, 0x01, 0x85, 0x36, 0x60, 0x9c, 0xf2, 0x48, 0xca, - 0xb2, 0xae, 0x50, 0x4a, 0x48, 0x6c, 0x54, 0x51, 0xde, 0x78, 0x50, 0x2d, 0x1e, 0x1f, 0x95, 0x67, - 0x19, 0x97, 0x4d, 0x30, 0xaa, 0x88, 0x00, 0x7a, 0x00, 0x43, 0x95, 0x5e, 0xaf, 0xb8, 0x44, 0xe9, - 0x4c, 0x46, 0x74, 0x1a, 0x0f, 0xaa, 0x17, 0x8e, 0x8f, 0xca, 0x53, 0x4e, 0x4f, 0x1f, 0x16, 0x81, - 0x46, 0x7b, 0x50, 0xa8, 0x77, 0xbd, 0x57, 0xcf, 0x3b, 0xce, 0x01, 0x16, 0xec, 0xad, 0x9c, 0xce, - 0xde, 0xe8, 0xc7, 0x2a, 0x10, 0x08, 0x46, 0x26, 0x97, 0xa0, 0x47, 0x3e, 0x8b, 0x4f, 0xfa, 0x7b, - 0xd8, 0xef, 0xe2, 0x10, 0x07, 0x7c, 0xb4, 0x57, 0xb5, 0xcf, 0x62, 0xbc, 0xba, 0xf1, 0x80, 0xb5, - 0x74, 0x20, 0xcb, 0x4d, 0x63, 0x4f, 0x50, 0x45, 0x1d, 0xb8, 0x10, 0x95, 0x89, 0x4f, 0xcd, 0x35, - 0xda, 0x54, 0x29, 0xd1, 0x54, 0xf4, 0xb9, 0xb9, 0x7a, 0x7c, 0x54, 0x5e, 0x54, 0xda, 0x32, 0x7d, - 0x72, 0x92, 0x84, 0xd1, 0x13, 0x18, 0x5f, 0xef, 0x06, 0xa1, 0xd3, 0xe9, 0x60, 0xbf, 0x68, 0x69, - 0xcb, 0x27, 0xcb, 0x1b, 0xf7, 0x19, 0x13, 0x77, 0x45, 0x81, 0xbe, 0x7a, 0x12, 0x0e, 0xb5, 0x61, - 0x46, 0xfd, 0xe6, 0x90, 0xf3, 0x72, 0x9d, 0x92, 0x2c, 0x1a, 0x3e, 0x62, 0xe4, 0xa4, 0xdc, 0xaf, - 0x2e, 0x1d, 0x1f, 0x95, 0x4b, 0xda, 0x57, 0x2c, 0x7e, 0x44, 0xe2, 0x24, 0xd1, 0x5f, 0x21, 0x3c, - 0xba, 0xf2, 0x74, 0x63, 0xbd, 0xbd, 0xcd, 0x8b, 0xa8, 0xd0, 0x49, 0xe4, 0xf9, 0xb7, 0x74, 0x1e, - 0x6d, 0x04, 0x6a, 0xdc, 0x67, 0x5f, 0x8a, 0xc0, 0x39, 0xec, 0x34, 0xdd, 0xb6, 0x3c, 0x97, 0xcd, - 0x1e, 0x07, 0x88, 0x31, 0x69, 0x23, 0x11, 0xf4, 0x13, 0x98, 0x96, 0x35, 0x6c, 0xc7, 0xdd, 0x48, - 0xdf, 0x71, 0x74, 0x90, 0x4a, 0x7b, 0xc9, 0x0d, 0x17, 0x23, 0x46, 0x4e, 0x15, 0x11, 0x58, 0x1f, - 0xf9, 0x5e, 0xbf, 0x57, 0xbc, 0xa9, 0x2d, 0x8b, 0x2c, 0x6f, 0xdc, 0x67, 0xa7, 0x8a, 0xc8, 0xba, - 0xcd, 0x7d, 0x52, 0xa2, 0xaf, 0x8b, 0x04, 0x24, 0xdf, 0xe9, 0xdd, 0x75, 0xce, 0xe5, 0xdf, 0xd6, - 0x0e, 0xbb, 0x28, 0x16, 0x4b, 0xdc, 0x77, 0x4d, 0x0c, 0x5d, 0x62, 0x23, 0x07, 0xa6, 0xb7, 0x0e, - 0x42, 0x67, 0xfd, 0x90, 0x68, 0x6d, 0x76, 0xbf, 0x83, 0x8b, 0xb7, 0x34, 0xc6, 0xa4, 0x57, 0x8a, - 0xf5, 0xf5, 0x0e, 0x42, 0xa7, 0xe9, 0xd2, 0xe2, 0xa6, 0xdf, 0x8f, 0x09, 0xd8, 0x31, 0x82, 0x84, - 0xf7, 0x91, 0x92, 0x4a, 0x10, 0xb8, 0xfb, 0xdd, 0x43, 0xdc, 0x0d, 0x8b, 0xef, 0x24, 0x9a, 0x88, - 0x2a, 0x1b, 0xf7, 0x19, 0xef, 0xa3, 0x4d, 0x38, 0xb2, 0x38, 0xd9, 0x42, 0x84, 0x82, 0xea, 0x30, - 0xb1, 0xde, 0x0d, 0xf1, 0x3e, 0x53, 0x18, 0x8b, 0xb7, 0x35, 0xa5, 0x44, 0xa9, 0x69, 0xdc, 0x67, - 0xa2, 0x90, 0x1b, 0x15, 0xe9, 0x3a, 0x89, 0x02, 0x4b, 0x34, 0x9d, 0x67, 0x4e, 0xd8, 0x7a, 0x41, - 0x14, 0xac, 0x7e, 0x50, 0xfc, 0x8e, 0x46, 0x54, 0xa9, 0x69, 0xdc, 0x67, 0x9a, 0xce, 0x2b, 0x52, - 0xd4, 0x0c, 0x68, 0x99, 0x4e, 0x55, 0x01, 0xae, 0x02, 0x8c, 0x09, 0x5d, 0xf3, 0xf1, 0xf0, 0xd8, - 0x68, 0x61, 0xcc, 0xfa, 0xe3, 0x1c, 0x8c, 0x50, 0x08, 0xf4, 0x39, 0x8c, 0x3c, 0x71, 0xbb, 0xed, - 0xa0, 0x98, 0xbb, 0x3a, 0xa4, 0xe8, 0x23, 0xb4, 0x92, 0x54, 0x54, 0xe7, 0x7f, 0x71, 0x54, 0x3e, - 0x77, 0x7c, 0x54, 0x9e, 0x39, 0x20, 0x60, 0x8a, 0x3a, 0xcc, 0xf0, 0xd0, 0x2e, 0x5c, 0xac, 0x74, - 0x3a, 0xde, 0xab, 0x6d, 0xc7, 0x0f, 0x5d, 0xa7, 0x53, 0xef, 0x53, 0x01, 0x9a, 0x2a, 0xc5, 0x63, - 0xd5, 0xeb, 0xc7, 0x47, 0xe5, 0xb2, 0x43, 0xaa, 0x9b, 0x3d, 0x56, 0xdf, 0x0c, 0x18, 0x80, 0x42, - 0xc8, 0x84, 0x6f, 0xfd, 0xc9, 0x79, 0x28, 0xac, 0x79, 0x41, 0x48, 0xb4, 0x58, 0x29, 0x8e, 0x5f, - 0x87, 0xf3, 0xa4, 0x6c, 0x7d, 0x85, 0xea, 0xed, 0xe3, 0xd5, 0x89, 0xe3, 0xa3, 0xf2, 0xe8, 0x0b, - 0x2f, 0x08, 0x9b, 0x6e, 0xdb, 0xe6, 0x55, 0xe8, 0x1d, 0x18, 0xdb, 0xf4, 0xda, 0x98, 0xaa, 0x8a, - 0x79, 0x0a, 0x36, 0x75, 0x7c, 0x54, 0x1e, 0xef, 0x7a, 0x6d, 0x4c, 0x35, 0x42, 0x5b, 0x56, 0xa3, - 0x06, 0xd7, 0xe4, 0x86, 0x28, 0x58, 0xf5, 0xf8, 0xa8, 0x3c, 0x4c, 0x54, 0xb7, 0x5f, 0x1d, 0x95, - 0xdf, 0xdf, 0x77, 0xc3, 0x17, 0xfd, 0xbd, 0x3b, 0x2d, 0xef, 0xf0, 0xee, 0xbe, 0xef, 0xbc, 0x74, - 0x99, 0x21, 0xc5, 0xe9, 0xdc, 0x8d, 0xcc, 0x2d, 0x3d, 0x97, 0x5b, 0x39, 0xea, 0xaf, 0x83, 0x10, - 0x1f, 0x12, 0x4a, 0x5c, 0xd1, 0x7b, 0x06, 0xb3, 0x95, 0x76, 0xdb, 0x65, 0x18, 0xdb, 0xbe, 0xdb, - 0x6d, 0xb9, 0x3d, 0xa7, 0x43, 0x94, 0xee, 0xa1, 0x5b, 0xe3, 0x7c, 0x52, 0x64, 0x7d, 0xb3, 0x27, - 0x01, 0x94, 0x49, 0x31, 0x12, 0x40, 0x0f, 0x60, 0x6c, 0x65, 0xb3, 0x4e, 0xd5, 0xc0, 0xe2, 0x08, - 0x25, 0x46, 0x0f, 0x5c, 0xbb, 0x1b, 0xd0, 0xa1, 0xa9, 0x04, 0x24, 0x20, 0x7a, 0x1f, 0x26, 0xb7, - 0xfb, 0x7b, 0x1d, 0xb7, 0xb5, 0xb3, 0x51, 0x7f, 0x82, 0x5f, 0x53, 0xfd, 0x79, 0x92, 0x89, 0x4b, - 0x3d, 0x5a, 0xde, 0x0c, 0x3b, 0x41, 0xf3, 0x00, 0xbf, 0xb6, 0x35, 0xb8, 0x08, 0xaf, 0x5e, 0x5f, - 0x23, 0x78, 0xa3, 0x09, 0xbc, 0x20, 0x78, 0xa1, 0xe2, 0x31, 0x38, 0x74, 0x17, 0x80, 0x69, 0x25, - 0x95, 0x76, 0x9b, 0xa9, 0xd7, 0xe3, 0xd5, 0x99, 0xe3, 0xa3, 0xf2, 0x04, 0xd7, 0x63, 0x9c, 0x76, - 0xdb, 0xb7, 0x15, 0x10, 0x54, 0x83, 0x31, 0xdb, 0x63, 0x13, 0xcc, 0x95, 0xea, 0x19, 0xa9, 0x54, - 0xb3, 0x62, 0x6e, 0x46, 0xe1, 0xbf, 0xd4, 0x51, 0x0a, 0x08, 0x54, 0x86, 0xd1, 0x4d, 0xaf, 0xe6, - 0xb4, 0x5e, 0x30, 0xd5, 0x7a, 0xac, 0x3a, 0x72, 0x7c, 0x54, 0xce, 0x7d, 0xcf, 0x16, 0xa5, 0xe8, - 0x25, 0x4c, 0x44, 0x0b, 0x15, 0x14, 0x27, 0xe8, 0xf4, 0xed, 0x90, 0x53, 0x14, 0xd0, 0xe2, 0x26, - 0x59, 0x7a, 0x65, 0x06, 0xbf, 0xc1, 0x2e, 0x50, 0x1b, 0x42, 0x1d, 0xb8, 0xb2, 0x4b, 0x3e, 0x6e, - 0x7b, 0x1d, 0x1c, 0x15, 0x57, 0x82, 0x00, 0xfb, 0x84, 0xd6, 0xfa, 0x0a, 0xd5, 0xbc, 0xc7, 0xb9, - 0xc8, 0x1f, 0xf5, 0x84, 0xf0, 0x21, 0x06, 0xd2, 0x74, 0xdb, 0xca, 0x88, 0xb3, 0x89, 0x59, 0xff, - 0x34, 0x07, 0x68, 0xab, 0x87, 0xbb, 0xf5, 0xfa, 0x1a, 0x39, 0x3a, 0xe2, 0xe4, 0xdc, 0x82, 0x31, - 0xc2, 0xc9, 0xc9, 0x26, 0xe1, 0x67, 0x67, 0xf2, 0xf8, 0xa8, 0x3c, 0xd6, 0xe7, 0x65, 0xb6, 0xac, - 0x45, 0xdf, 0x85, 0x71, 0xb6, 0x9a, 0x64, 0xc9, 0xf3, 0x74, 0xc9, 0xa7, 0x8f, 0x8f, 0xca, 0xc0, - 0x97, 0x9c, 0x2c, 0x77, 0x04, 0x80, 0x6e, 0xc0, 0xd0, 0xce, 0xce, 0x06, 0x3d, 0x40, 0x43, 0xd5, - 0x8b, 0xc7, 0x47, 0xe5, 0xa1, 0x30, 0xec, 0xfc, 0xea, 0xa8, 0x3c, 0xb6, 0xd2, 0x67, 0x2c, 0xcd, - 0x26, 0xf5, 0xe8, 0x06, 0x8c, 0x0a, 0x21, 0x64, 0x38, 0x3a, 0xb9, 0x5c, 0xba, 0xb0, 0x45, 0x9d, - 0xf5, 0x1d, 0x98, 0x50, 0xfa, 0x8e, 0x16, 0x61, 0x98, 0xfc, 0x4f, 0x3b, 0x3c, 0x59, 0x1d, 0x23, - 0xc7, 0xb3, 0x45, 0xc6, 0x44, 0x4b, 0xad, 0x3f, 0x9a, 0x82, 0x02, 0xe9, 0xb5, 0xc6, 0x21, 0xb4, - 0xde, 0xe7, 0x06, 0xf5, 0x5e, 0x9d, 0x95, 0x7c, 0xe6, 0xac, 0xd4, 0x61, 0x74, 0xf5, 0xeb, 0x9e, - 0xeb, 0xe3, 0x80, 0x9b, 0xe5, 0x4a, 0x77, 0x98, 0x61, 0xf6, 0x8e, 0x30, 0xcc, 0xde, 0xd9, 0x11, - 0x86, 0xd9, 0xea, 0x15, 0xce, 0x32, 0x2f, 0x60, 0x86, 0x12, 0xad, 0xde, 0xef, 0xfd, 0x97, 0x72, - 0xce, 0x16, 0x94, 0xd0, 0x77, 0xe1, 0xfc, 0x43, 0xcf, 0x3f, 0x74, 0x42, 0x3e, 0x29, 0xd4, 0x66, - 0xf3, 0x9c, 0x96, 0x28, 0x0b, 0xce, 0x61, 0xd0, 0x43, 0x98, 0xb6, 0xbd, 0x7e, 0x88, 0x77, 0x3c, - 0x31, 0x95, 0x23, 0x14, 0x8b, 0x7e, 0x1c, 0x7d, 0x52, 0xd3, 0x0c, 0xbd, 0xa4, 0xc4, 0x66, 0xc7, - 0xb0, 0xd0, 0x2a, 0x4c, 0x6b, 0x46, 0x8e, 0xa0, 0x78, 0x9e, 0x1e, 0x05, 0xa6, 0x00, 0x6a, 0xa6, - 0x11, 0x95, 0x9f, 0xc4, 0x90, 0xd0, 0xa6, 0x49, 0xc2, 0x1c, 0xa5, 0x3d, 0x1a, 0x28, 0x45, 0x9a, - 0x64, 0x48, 0x0c, 0x33, 0xbc, 0xa3, 0x52, 0xa5, 0x18, 0xe3, 0xa6, 0x11, 0x66, 0x9c, 0x8d, 0xd5, - 0x56, 0xaf, 0xf3, 0x59, 0x5e, 0x90, 0x63, 0x4f, 0x2a, 0x19, 0x76, 0x9c, 0x26, 0xe1, 0xa0, 0xf2, - 0xeb, 0x30, 0x4e, 0x7b, 0xcb, 0x0c, 0x6e, 0xe2, 0xeb, 0xa0, 0xf2, 0x16, 0xf9, 0x9d, 0xd8, 0x80, - 0x91, 0xdd, 0xc0, 0xd9, 0x67, 0x9c, 0x65, 0x7a, 0xf9, 0x1a, 0xef, 0x51, 0x7c, 0xf7, 0x51, 0x1b, - 0x2d, 0x05, 0xa4, 0x47, 0x61, 0x86, 0x1a, 0xa0, 0xd5, 0x2f, 0x26, 0xad, 0x43, 0x5f, 0x00, 0xf0, - 0x5e, 0x11, 0x2d, 0x65, 0x82, 0x8b, 0x52, 0xda, 0x20, 0x2b, 0xbd, 0x5e, 0x75, 0x89, 0x8f, 0xef, - 0x92, 0x1c, 0x9f, 0xa6, 0xb7, 0xd8, 0x0a, 0x11, 0xf4, 0x39, 0x4c, 0x52, 0xc6, 0x23, 0x56, 0x74, - 0x92, 0xae, 0x28, 0x35, 0xe3, 0x52, 0x5e, 0x62, 0x58, 0x4f, 0x0d, 0x01, 0xfd, 0xbf, 0x30, 0xc7, - 0xc9, 0xc5, 0x54, 0xc6, 0x29, 0xae, 0x22, 0x6b, 0xdd, 0xd3, 0x61, 0xaa, 0xb7, 0x79, 0x4f, 0x2d, - 0xd9, 0xd3, 0x54, 0x25, 0xd2, 0x36, 0x37, 0x83, 0xd6, 0x61, 0x66, 0x37, 0xc0, 0xda, 0x18, 0xa6, - 0x29, 0x17, 0xa7, 0xda, 0x4f, 0x3f, 0xc0, 0xcd, 0xb4, 0x71, 0xc4, 0xf1, 0x90, 0x0d, 0x68, 0xc5, - 0xf7, 0x7a, 0xb1, 0x3d, 0x3e, 0x43, 0x67, 0x84, 0x2a, 0xf3, 0x6d, 0xdf, 0xeb, 0x35, 0xd3, 0x37, - 0xba, 0x01, 0x1b, 0xfd, 0x14, 0x2e, 0x45, 0x36, 0xc7, 0x15, 0xd7, 0xd9, 0xef, 0x7a, 0x41, 0xe8, - 0xb6, 0xd6, 0x57, 0xa8, 0xf9, 0x8e, 0x33, 0xef, 0xc8, 0x66, 0xd9, 0x6c, 0x4b, 0x10, 0x9d, 0x79, - 0xa7, 0x50, 0x41, 0x3f, 0x86, 0x29, 0xde, 0x16, 0xb7, 0x71, 0x5f, 0xc8, 0xde, 0x68, 0x12, 0x98, - 0xdb, 0x9b, 0xc5, 0x4f, 0x26, 0xe0, 0xe8, 0xb4, 0xd0, 0x57, 0x30, 0xf1, 0xf4, 0x61, 0xc5, 0xc6, - 0x41, 0xcf, 0xeb, 0x06, 0x98, 0xdb, 0xec, 0x96, 0x38, 0xe9, 0xa7, 0x0f, 0x2b, 0x95, 0x7e, 0xf8, - 0x02, 0x77, 0x43, 0xb7, 0xe5, 0x84, 0x58, 0x40, 0x31, 0xf1, 0xf2, 0xf0, 0xb9, 0xd3, 0xf4, 0x79, - 0x89, 0x32, 0x0a, 0x95, 0x1c, 0x2a, 0xc1, 0x58, 0xbd, 0xbe, 0xb6, 0xe1, 0xed, 0xbb, 0xcc, 0x7c, - 0x37, 0x6e, 0xcb, 0xdf, 0x68, 0x0f, 0xe6, 0x94, 0x5b, 0x28, 0x2a, 0xa7, 0x62, 0x2a, 0x8c, 0x33, - 0x6b, 0xdc, 0xf7, 0xe4, 0x35, 0xda, 0x1d, 0xf5, 0xb2, 0xea, 0xe5, 0xfd, 0x3b, 0x95, 0xe8, 0x67, - 0x5d, 0x20, 0xd9, 0xb3, 0x8e, 0xa1, 0xd4, 0xfa, 0x12, 0xc6, 0xe5, 0xb1, 0x43, 0xa3, 0x30, 0x54, - 0xe9, 0x74, 0x0a, 0xe7, 0xc8, 0x1f, 0xf5, 0xfa, 0x5a, 0x21, 0x87, 0xa6, 0x01, 0x22, 0x5e, 0x53, - 0xc8, 0xa3, 0xc9, 0xc8, 0x64, 0x51, 0x18, 0xa2, 0xf0, 0xbd, 0x5e, 0x61, 0x18, 0xa1, 0xb8, 0xad, - 0xa4, 0x30, 0x62, 0x7d, 0x02, 0xe3, 0x72, 0x22, 0xd1, 0x0c, 0x4c, 0xec, 0x6e, 0xd6, 0xb7, 0x57, - 0x6b, 0xeb, 0x0f, 0xd7, 0x57, 0x57, 0x0a, 0xe7, 0xd0, 0x15, 0xb8, 0xbc, 0x53, 0x5f, 0x6b, 0xae, - 0x54, 0x9b, 0x1b, 0x5b, 0xb5, 0xca, 0x46, 0x73, 0xdb, 0xde, 0xfa, 0xf2, 0x87, 0xcd, 0x9d, 0xdd, - 0xcd, 0xcd, 0xd5, 0x8d, 0x42, 0xce, 0xfa, 0x8f, 0xb9, 0x04, 0x3f, 0x43, 0xcb, 0x30, 0xc1, 0x35, - 0xc0, 0xcd, 0xe8, 0x3b, 0x5c, 0x38, 0x3e, 0x2a, 0x4f, 0x0a, 0xed, 0x91, 0x2e, 0x9f, 0x0a, 0x44, - 0x3e, 0x51, 0xdb, 0x64, 0xa1, 0x5a, 0x5e, 0x47, 0xfd, 0x44, 0xf5, 0x78, 0x99, 0x2d, 0x6b, 0xd1, - 0xb2, 0xf2, 0x31, 0x63, 0x02, 0x2d, 0x15, 0x9a, 0xc4, 0xc7, 0x4c, 0x65, 0x6c, 0xf2, 0xb3, 0xb6, - 0xac, 0x18, 0x70, 0x86, 0x23, 0x1c, 0x03, 0x23, 0x95, 0x70, 0x56, 0x3f, 0x85, 0x55, 0xa0, 0x4f, - 0x12, 0xf6, 0x26, 0x36, 0x42, 0xca, 0x0b, 0x63, 0x1c, 0x21, 0x61, 0x4a, 0x2a, 0xc3, 0x08, 0xdb, - 0x43, 0x6c, 0x90, 0xe3, 0xc7, 0x47, 0xe5, 0x91, 0x0e, 0x29, 0xb0, 0x59, 0xb9, 0xf5, 0x37, 0x86, - 0x54, 0xb6, 0x49, 0x64, 0x03, 0x65, 0x12, 0xa9, 0x6c, 0x40, 0x27, 0x8f, 0x96, 0x12, 0x31, 0x80, - 0x2b, 0xc1, 0xeb, 0x2b, 0x9c, 0x22, 0x15, 0x03, 0x84, 0x49, 0xd5, 0x6d, 0xdb, 0x11, 0x00, 0x11, - 0x58, 0x99, 0x4c, 0x40, 0x05, 0xd6, 0xa1, 0x48, 0x60, 0xe5, 0x52, 0x03, 0x13, 0x58, 0x23, 0x10, - 0xb2, 0x90, 0xea, 0x85, 0xd4, 0x70, 0xb4, 0x90, 0xea, 0xd5, 0x93, 0x7e, 0xdd, 0xf4, 0x31, 0x40, - 0xe5, 0x59, 0x9d, 0x8a, 0x6b, 0xf6, 0x26, 0xff, 0x74, 0xd3, 0x43, 0xe6, 0xbc, 0x0a, 0xb8, 0xc0, - 0xe7, 0xab, 0x92, 0xad, 0x02, 0x8d, 0xaa, 0x30, 0x55, 0xf9, 0x8d, 0xbe, 0x8f, 0xd7, 0xdb, 0xe4, - 0x9c, 0x86, 0x4c, 0x84, 0x1f, 0xe7, 0x97, 0x19, 0xa4, 0xa2, 0xe9, 0xf2, 0x1a, 0x85, 0x80, 0x8e, - 0x82, 0xb6, 0xe0, 0xc2, 0xa3, 0x9a, 0xb0, 0x40, 0x54, 0x5a, 0x2d, 0xaf, 0xdf, 0x0d, 0xf9, 0xf7, - 0xfa, 0xda, 0xf1, 0x51, 0xf9, 0xca, 0x7e, 0x2b, 0x32, 0x62, 0x38, 0xac, 0x5a, 0xfd, 0x60, 0x27, - 0x70, 0xad, 0x0e, 0x4c, 0x3f, 0xc2, 0x21, 0xd9, 0x4a, 0x42, 0xf8, 0xca, 0x5e, 0x93, 0x4f, 0x61, - 0xe2, 0x99, 0x1b, 0xbe, 0xa8, 0xe3, 0x96, 0x8f, 0x43, 0xa1, 0x20, 0x32, 0x2d, 0xd6, 0x0d, 0x5f, - 0x34, 0x03, 0x56, 0xae, 0xb2, 0x19, 0x05, 0xdc, 0x5a, 0x85, 0x19, 0xde, 0x9a, 0x94, 0xf5, 0x96, - 0x75, 0x82, 0x39, 0x4a, 0x90, 0xae, 0x82, 0x4a, 0x50, 0x27, 0xf3, 0x27, 0x79, 0x98, 0xab, 0xbd, - 0x70, 0xba, 0xfb, 0x78, 0xdb, 0x09, 0x82, 0x57, 0x9e, 0xdf, 0x56, 0x3a, 0x4f, 0xaf, 0x03, 0x13, - 0x9d, 0xa7, 0x77, 0x7e, 0xcb, 0x30, 0xb1, 0xd5, 0x69, 0x0b, 0x1c, 0x2e, 0x17, 0xd3, 0xb6, 0xbc, - 0x4e, 0xbb, 0xd9, 0x13, 0xb4, 0x54, 0x20, 0x82, 0xb3, 0x89, 0x5f, 0x49, 0x9c, 0xa1, 0x08, 0xa7, - 0x8b, 0x5f, 0x29, 0x38, 0x0a, 0x10, 0x5a, 0x85, 0x0b, 0x75, 0xdc, 0xf2, 0xba, 0xed, 0x87, 0x4e, - 0x2b, 0xf4, 0x7c, 0x76, 0x2b, 0x32, 0x1c, 0xc9, 0x29, 0x01, 0xad, 0x6c, 0x3e, 0xa7, 0xb5, 0xec, - 0x32, 0xc4, 0x4e, 0x62, 0xa0, 0x2d, 0x7a, 0xa7, 0x42, 0x2f, 0xd5, 0xf9, 0x6d, 0xec, 0x8d, 0x3b, - 0xf2, 0x96, 0xbd, 0xe6, 0x63, 0xba, 0x29, 0x9c, 0x8e, 0x54, 0x1c, 0x24, 0xdb, 0xa7, 0xcc, 0x45, - 0x40, 0xda, 0x92, 0x88, 0xb5, 0x0b, 0x53, 0xdb, 0x9d, 0xfe, 0xbe, 0xdb, 0x25, 0x6c, 0xa0, 0x8e, - 0x7f, 0x8e, 0x56, 0x00, 0xa2, 0x02, 0x6e, 0x3c, 0x10, 0x66, 0xab, 0xa8, 0xa2, 0xf1, 0x80, 0x1f, - 0x24, 0x5a, 0x42, 0x05, 0x34, 0x5b, 0xc1, 0xb3, 0xfe, 0xda, 0x10, 0x20, 0xbe, 0x00, 0x94, 0xa3, - 0xd7, 0x71, 0x48, 0x98, 0xed, 0x25, 0xc8, 0x4b, 0x1d, 0xff, 0xfc, 0xf1, 0x51, 0x39, 0xef, 0xb6, - 0xed, 0xfc, 0xfa, 0x0a, 0x7a, 0x17, 0x46, 0x28, 0x18, 0x9d, 0xff, 0x69, 0xd9, 0x9e, 0x4a, 0x81, - 0x71, 0x0e, 0xfa, 0xa5, 0xb1, 0x19, 0x30, 0x7a, 0x0f, 0xc6, 0x57, 0x70, 0x07, 0xef, 0x3b, 0xa1, - 0x27, 0x4e, 0x37, 0xd3, 0x9a, 0x45, 0xa1, 0xb2, 0xe7, 0x22, 0x48, 0x22, 0x9d, 0xdb, 0xd8, 0x09, - 0xbc, 0xae, 0x2a, 0x9d, 0xfb, 0xb4, 0x44, 0x95, 0xce, 0x19, 0x0c, 0xfa, 0x83, 0x1c, 0x4c, 0x54, - 0xba, 0x5d, 0xae, 0x8d, 0x06, 0x7c, 0xd6, 0xe7, 0xee, 0x48, 0x67, 0x85, 0x0d, 0x67, 0x0f, 0x77, - 0x1a, 0x4e, 0xa7, 0x8f, 0x83, 0xea, 0x57, 0x44, 0x60, 0xfa, 0x4f, 0x47, 0xe5, 0x4f, 0x4e, 0xa1, - 0x5f, 0x46, 0x6e, 0x0f, 0x3b, 0xbe, 0xe3, 0x86, 0x01, 0xbd, 0x70, 0x8c, 0x1a, 0x54, 0xcf, 0x8d, - 0xd2, 0x0f, 0xf4, 0x0e, 0x8c, 0x30, 0x7d, 0x97, 0x09, 0xf9, 0x94, 0x17, 0xc7, 0x14, 0x5d, 0x9b, - 0x41, 0x58, 0xd7, 0xe5, 0xf7, 0x6e, 0x7d, 0x25, 0x6d, 0x09, 0xac, 0x1a, 0x2c, 0x3e, 0xc2, 0xa1, - 0x8d, 0x03, 0x1c, 0x8a, 0x4d, 0x4b, 0xb7, 0x5c, 0x64, 0xa2, 0x19, 0xa5, 0xbf, 0x25, 0x32, 0x5d, - 0x0f, 0xb6, 0x51, 0x45, 0x8d, 0xf5, 0x57, 0x73, 0x50, 0xae, 0xf9, 0x98, 0xc9, 0x1b, 0x29, 0x84, - 0xb2, 0x99, 0xc9, 0x22, 0xf7, 0xdf, 0xc8, 0x47, 0xb5, 0x64, 0x96, 0xb8, 0x8f, 0xc6, 0xc9, 0xb4, - 0x52, 0xeb, 0x39, 0xcc, 0xd9, 0xb8, 0x8b, 0x5f, 0x11, 0x6d, 0x5a, 0xd3, 0x22, 0xcb, 0x30, 0xc2, - 0x4e, 0x5e, 0x62, 0x08, 0xac, 0xfc, 0x74, 0x4a, 0xb2, 0xf5, 0x0f, 0xf3, 0x50, 0x60, 0xc3, 0xad, - 0x7a, 0xe1, 0xc9, 0xc6, 0xc7, 0x47, 0x90, 0x1f, 0xa0, 0x57, 0xdf, 0x8c, 0x66, 0x7b, 0x28, 0x12, - 0x0e, 0x68, 0x57, 0xc9, 0x37, 0x4e, 0x54, 0x92, 0x01, 0xb1, 0x5d, 0xc0, 0x2c, 0x50, 0x74, 0x40, - 0x74, 0x17, 0xf0, 0xb5, 0x47, 0xbf, 0x93, 0x83, 0xf3, 0x6c, 0x5f, 0x65, 0xef, 0xdc, 0x67, 0x67, - 0xb3, 0x73, 0x0b, 0x21, 0xfd, 0x4b, 0x3d, 0x47, 0xac, 0xce, 0xfa, 0xc7, 0x79, 0xb8, 0xa0, 0xcc, - 0x15, 0x17, 0x32, 0xdf, 0x61, 0xb2, 0x8d, 0x32, 0x61, 0xd4, 0xa6, 0x47, 0x8d, 0xd6, 0x91, 0xa6, - 0x4e, 0x67, 0xee, 0x1d, 0x18, 0x23, 0x43, 0x8a, 0x9b, 0xff, 0xe8, 0x17, 0x96, 0x81, 0x8a, 0xea, - 0x13, 0xcf, 0xde, 0x5d, 0x18, 0xa3, 0x7f, 0x92, 0x15, 0x19, 0x4e, 0x5f, 0x11, 0x09, 0x84, 0x5c, - 0x80, 0xc7, 0x9e, 0xdb, 0x7d, 0x8a, 0xc3, 0x17, 0x5e, 0x9b, 0x7f, 0xeb, 0xd7, 0x09, 0x1f, 0xfc, - 0xbf, 0x3c, 0xb7, 0xdb, 0x3c, 0xa4, 0xc5, 0xa7, 0x35, 0x2f, 0x45, 0x04, 0x6d, 0x85, 0xb8, 0x75, - 0x0f, 0x0a, 0x84, 0x65, 0x9d, 0x7c, 0x6b, 0x59, 0xb3, 0x80, 0x1e, 0xe1, 0xb0, 0xea, 0x69, 0x1f, - 0x53, 0x6b, 0x0a, 0x26, 0xb6, 0xdd, 0xee, 0xbe, 0xf8, 0xf9, 0x4f, 0x86, 0x60, 0x92, 0xfd, 0xe6, - 0x2b, 0x10, 0x13, 0x79, 0x72, 0x27, 0x11, 0x79, 0x3e, 0x84, 0x29, 0x7e, 0x8b, 0x85, 0x7d, 0x7a, - 0xbb, 0xc1, 0xd6, 0x83, 0xaa, 0x2c, 0xec, 0x16, 0xab, 0xf9, 0x92, 0xd5, 0xd8, 0x3a, 0x20, 0xda, - 0x80, 0x69, 0x56, 0xf0, 0x10, 0x3b, 0x61, 0x3f, 0xb2, 0xba, 0xcc, 0x70, 0xad, 0x45, 0x14, 0x33, - 0x7e, 0xc6, 0x69, 0x3d, 0xe7, 0x85, 0x76, 0x0c, 0x17, 0x7d, 0x0e, 0x33, 0xdb, 0xbe, 0xf7, 0xf5, - 0x6b, 0x45, 0xc8, 0x63, 0x2c, 0x7d, 0xee, 0xf8, 0xa8, 0x7c, 0xa1, 0x47, 0xaa, 0x9a, 0xaa, 0xa8, - 0x17, 0x87, 0x26, 0x7b, 0x6a, 0x3d, 0xa8, 0x7a, 0xbe, 0xdb, 0xdd, 0xa7, 0xab, 0x39, 0xc6, 0xf6, - 0x94, 0x1b, 0x34, 0xf7, 0x68, 0xa1, 0x2d, 0xab, 0x63, 0xc6, 0xcf, 0xd1, 0xc1, 0xc6, 0xcf, 0x7b, - 0x00, 0x1b, 0x9e, 0xd3, 0xae, 0x74, 0x3a, 0xb5, 0x4a, 0x40, 0x4d, 0x1e, 0x5c, 0x88, 0xe9, 0x78, - 0x4e, 0xbb, 0xe9, 0x74, 0x3a, 0xcd, 0x96, 0x13, 0xd8, 0x0a, 0xcc, 0xe3, 0xe1, 0xb1, 0xf3, 0x85, - 0x51, 0x7b, 0x66, 0xc3, 0x6d, 0xe1, 0x6e, 0x80, 0x9f, 0x39, 0x7e, 0xd7, 0xed, 0xee, 0x07, 0xd6, - 0x7f, 0x1e, 0x86, 0x31, 0x39, 0xe4, 0x3b, 0xaa, 0xda, 0xc3, 0x45, 0x23, 0xca, 0xa1, 0x22, 0xb3, - 0x8c, 0xad, 0x40, 0xa0, 0xcb, 0xec, 0xca, 0x94, 0x09, 0x65, 0xa3, 0x64, 0x77, 0x3b, 0xbd, 0x1e, - 0xbb, 0x18, 0xbd, 0x04, 0xf9, 0x95, 0x2a, 0x9d, 0xff, 0x31, 0xf6, 0x25, 0x68, 0xef, 0xd9, 0xf9, - 0x95, 0x2a, 0xd9, 0x65, 0x5b, 0xeb, 0x2b, 0x35, 0x3a, 0x95, 0x63, 0x6c, 0x97, 0x79, 0x6e, 0xbb, - 0x65, 0xd3, 0x52, 0x52, 0x5b, 0xaf, 0x3c, 0xdd, 0xe0, 0xd3, 0x45, 0x6b, 0x03, 0xe7, 0xb0, 0x63, - 0xd3, 0x52, 0xa2, 0x2a, 0x30, 0x0d, 0xbb, 0xe6, 0x75, 0x43, 0xdf, 0xeb, 0x04, 0x54, 0xa2, 0x1d, - 0x63, 0xcb, 0xc9, 0x55, 0xf3, 0x16, 0xaf, 0xb2, 0x63, 0xa0, 0xe8, 0x19, 0xcc, 0x57, 0xda, 0x2f, - 0x9d, 0x6e, 0x0b, 0xb7, 0x59, 0xcd, 0x33, 0xcf, 0x3f, 0x78, 0xde, 0xf1, 0x5e, 0x05, 0x74, 0xbe, - 0xc7, 0xb8, 0x25, 0x8b, 0x83, 0x08, 0x4d, 0xff, 0x95, 0x00, 0xb2, 0xd3, 0xb0, 0x09, 0x97, 0xac, - 0x75, 0xbc, 0x7e, 0x9b, 0xaf, 0x02, 0xe5, 0x92, 0x2d, 0x52, 0x60, 0xb3, 0x72, 0x32, 0x4b, 0x6b, - 0xf5, 0xa7, 0xd4, 0x6e, 0xc4, 0x67, 0xe9, 0x45, 0x70, 0x68, 0x93, 0x32, 0x74, 0x03, 0x46, 0x85, - 0xd6, 0xc3, 0xcc, 0xcf, 0xd4, 0xc2, 0x29, 0xb4, 0x1d, 0x51, 0x47, 0x8e, 0x84, 0x8d, 0x5b, 0xde, - 0x4b, 0xec, 0xbf, 0xae, 0x79, 0x6d, 0x2c, 0xac, 0x1c, 0x5c, 0x8b, 0x67, 0x15, 0xcd, 0x16, 0xa9, - 0xb1, 0x75, 0x40, 0xd2, 0x00, 0x13, 0x9c, 0x02, 0xea, 0x87, 0xc4, 0x1b, 0x60, 0x82, 0x55, 0x60, - 0x8b, 0x3a, 0xb4, 0x02, 0x17, 0x2a, 0xfd, 0xd0, 0x3b, 0x74, 0x42, 0xb7, 0xb5, 0xdb, 0xdb, 0xf7, - 0x1d, 0xd2, 0x48, 0x81, 0x22, 0x50, 0xd5, 0xce, 0x11, 0x95, 0xcd, 0x3e, 0xaf, 0xb5, 0x93, 0x08, - 0x8f, 0x87, 0xc7, 0x26, 0x0a, 0x93, 0x8f, 0x87, 0xc7, 0x26, 0x0b, 0x53, 0x8f, 0x87, 0xc7, 0xa6, - 0x0a, 0xd3, 0xd6, 0x7d, 0xb8, 0xc0, 0xf8, 0xcc, 0x89, 0x05, 0x7e, 0x6b, 0x1b, 0xa0, 0x8e, 0x0f, - 0x9d, 0xde, 0x0b, 0x8f, 0xec, 0xc8, 0xaa, 0xfa, 0x8b, 0x0b, 0x8c, 0x48, 0xfa, 0xc1, 0xf0, 0x8a, - 0xc6, 0x03, 0xa1, 0xa7, 0x09, 0x48, 0x5b, 0xc1, 0xb2, 0xfe, 0x3c, 0x0f, 0x88, 0xfa, 0x83, 0xd4, - 0x43, 0x1f, 0x3b, 0x87, 0xa2, 0x1b, 0x1f, 0xc1, 0x24, 0xfb, 0x64, 0xb0, 0x62, 0xda, 0x1d, 0x22, - 0x8d, 0x32, 0x5e, 0xa1, 0x56, 0xad, 0x9d, 0xb3, 0x35, 0x50, 0x82, 0x6a, 0xe3, 0xa0, 0x7f, 0x28, - 0x50, 0xf3, 0x1a, 0xaa, 0x5a, 0x45, 0x50, 0xd5, 0xdf, 0xe8, 0x73, 0x98, 0xae, 0x79, 0x87, 0x3d, - 0x32, 0x27, 0x1c, 0x79, 0x88, 0x7f, 0x39, 0x79, 0xbb, 0x5a, 0xe5, 0xda, 0x39, 0x3b, 0x06, 0x8e, - 0x36, 0xe1, 0xe2, 0xc3, 0x4e, 0x3f, 0x78, 0x51, 0xe9, 0xb6, 0x6b, 0x1d, 0x2f, 0x10, 0x54, 0x86, - 0xb9, 0x7d, 0x99, 0x73, 0xba, 0x24, 0xc4, 0xda, 0x39, 0xdb, 0x84, 0x88, 0x6e, 0x70, 0xe7, 0x56, - 0xfe, 0x05, 0x9f, 0xba, 0xc3, 0x7d, 0x5f, 0xb7, 0xba, 0x78, 0xeb, 0xf9, 0xda, 0x39, 0x9b, 0xd5, - 0x56, 0xc7, 0x61, 0x54, 0x70, 0xf9, 0xbb, 0x64, 0xb3, 0xc8, 0xe9, 0x64, 0xb7, 0x85, 0xa8, 0x04, - 0x63, 0xbb, 0x3d, 0xc2, 0x7c, 0x84, 0x08, 0x67, 0xcb, 0xdf, 0xd6, 0x77, 0xf5, 0x99, 0x46, 0x8b, - 0xaa, 0x9e, 0xcd, 0x80, 0xa3, 0x02, 0x6b, 0x4d, 0x9f, 0xdc, 0x6c, 0x68, 0xad, 0xdd, 0x7c, 0xac, - 0xdd, 0x42, 0x7c, 0xae, 0xad, 0x39, 0xe3, 0xe4, 0x59, 0x5f, 0xc2, 0xd2, 0x6e, 0x8f, 0x28, 0x35, - 0x95, 0x5e, 0xaf, 0xe3, 0xb6, 0x98, 0xad, 0x88, 0x7e, 0x0d, 0xc4, 0x66, 0x79, 0x5f, 0x7a, 0x4e, - 0xe6, 0x52, 0xfd, 0x4c, 0xe0, 0xf8, 0xa8, 0x7c, 0x9e, 0x7d, 0x55, 0x84, 0xc3, 0xa4, 0xf5, 0x7b, - 0x39, 0x58, 0x62, 0x27, 0x20, 0x95, 0xf4, 0x77, 0x54, 0xff, 0x4e, 0x45, 0x4c, 0x91, 0xde, 0x9c, - 0xaa, 0x07, 0x67, 0x74, 0x97, 0x99, 0x4f, 0xbf, 0xcb, 0x14, 0x07, 0x6c, 0xc8, 0x78, 0xc0, 0xbe, - 0x00, 0x8b, 0xf7, 0xa8, 0xd3, 0x49, 0x74, 0x2a, 0x78, 0x93, 0x5e, 0x59, 0xff, 0x3d, 0x0f, 0xf3, - 0x8f, 0x70, 0x17, 0xfb, 0x0e, 0x1d, 0xa7, 0x26, 0x91, 0x9f, 0xfc, 0x0e, 0x49, 0x8a, 0x9b, 0xf9, - 0x14, 0x71, 0xf3, 0x32, 0x0c, 0xed, 0xda, 0xeb, 0x7c, 0x58, 0x94, 0x91, 0xf6, 0x7d, 0xd7, 0x26, - 0x65, 0x68, 0x3d, 0xba, 0x69, 0x19, 0x1e, 0x78, 0xd3, 0x72, 0x91, 0x5b, 0x9e, 0x47, 0xf9, 0x4d, - 0x8b, 0x7e, 0xbf, 0xb2, 0xa9, 0xc8, 0xb4, 0x84, 0xdd, 0xdc, 0xe6, 0x67, 0x2a, 0x65, 0x80, 0x5c, - 0x3c, 0x5d, 0xed, 0x86, 0xfe, 0x6b, 0xb6, 0x05, 0x98, 0x94, 0x2a, 0x64, 0xd3, 0xd2, 0x17, 0x30, - 0xa1, 0x80, 0xa0, 0x02, 0x0c, 0x1d, 0xf0, 0x5b, 0xa6, 0x71, 0x9b, 0xfc, 0x89, 0xbe, 0x0b, 0x23, - 0x2f, 0x89, 0x9c, 0xcc, 0xd9, 0xc8, 0xa5, 0x48, 0x86, 0xae, 0x87, 0x44, 0x3a, 0x60, 0x42, 0xb4, - 0xcd, 0x80, 0x3e, 0xce, 0x7f, 0x98, 0xb3, 0x3e, 0x81, 0x62, 0xb2, 0x37, 0x5c, 0xe4, 0x1a, 0xa4, - 0x85, 0x58, 0x2b, 0x30, 0xfb, 0x08, 0x87, 0x91, 0x73, 0xa9, 0x72, 0x09, 0x16, 0x3b, 0x67, 0x19, - 0xd6, 0x2f, 0xab, 0x0e, 0x73, 0x31, 0x2a, 0xbc, 0xfd, 0x8f, 0x61, 0x54, 0xb8, 0xa5, 0xe4, 0xd2, - 0xdd, 0x52, 0xe8, 0xbe, 0xe5, 0x94, 0x6d, 0x81, 0x60, 0x3d, 0x83, 0x4b, 0x1a, 0xd1, 0x40, 0x52, - 0xfd, 0x3e, 0x8c, 0x89, 0xb2, 0x98, 0xd9, 0x40, 0x23, 0x4b, 0xb7, 0x56, 0x20, 0x90, 0x25, 0x8a, - 0xf5, 0x02, 0x2e, 0x6d, 0xb8, 0x81, 0x4e, 0x99, 0x8d, 0x7a, 0x01, 0xc6, 0x7b, 0xce, 0x3e, 0x6e, - 0x06, 0xee, 0x6f, 0xb0, 0xfd, 0x39, 0x62, 0x8f, 0x91, 0x82, 0xba, 0xfb, 0x1b, 0x18, 0x5d, 0x01, - 0xa0, 0x95, 0x74, 0xfe, 0x38, 0x7b, 0xa1, 0xe0, 0x4c, 0x9f, 0x43, 0x30, 0x4c, 0xb6, 0x31, 0xdb, - 0x90, 0x36, 0xfd, 0xdb, 0xf2, 0x61, 0x3e, 0xd1, 0x12, 0x1f, 0xc3, 0x5d, 0x90, 0x5d, 0xcb, 0x18, - 0x83, 0x2d, 0x81, 0xd0, 0x4d, 0x98, 0xe9, 0xe2, 0xaf, 0xc3, 0x66, 0xa2, 0x0f, 0x53, 0xa4, 0x78, - 0x5b, 0xf4, 0xc3, 0xfa, 0x09, 0xd5, 0xae, 0xe3, 0x7e, 0x63, 0x67, 0x36, 0x79, 0x1d, 0x28, 0x91, - 0x21, 0xe9, 0x6e, 0x42, 0xbf, 0xb6, 0x09, 0x7c, 0x09, 0x0b, 0xc6, 0xd6, 0x7e, 0xdd, 0x93, 0xf8, - 0x97, 0x79, 0x98, 0x67, 0x5f, 0xa9, 0xe4, 0xd1, 0x38, 0x39, 0x0f, 0xfb, 0x56, 0x8c, 0xc2, 0xf7, - 0x0c, 0x46, 0x61, 0x8a, 0xa2, 0x1a, 0x85, 0x35, 0x53, 0xf0, 0x87, 0x66, 0x53, 0x30, 0x15, 0x20, - 0x75, 0x53, 0x70, 0xdc, 0x00, 0xbc, 0x9a, 0x6e, 0x00, 0xa6, 0xe6, 0x30, 0x83, 0x01, 0xd8, 0x60, - 0xf6, 0x7d, 0x3c, 0x3c, 0x96, 0x2f, 0x0c, 0x59, 0x0d, 0x28, 0x26, 0xa7, 0xf8, 0x0c, 0xf8, 0xc6, - 0x9f, 0xe6, 0xe0, 0x0a, 0x97, 0x30, 0x62, 0x87, 0xe0, 0xf4, 0x2b, 0xf8, 0x1e, 0x4c, 0x72, 0xdc, - 0x9d, 0x68, 0xb3, 0x30, 0x0f, 0x50, 0xc1, 0x09, 0x19, 0x3b, 0xd5, 0xc0, 0xd0, 0x7b, 0x8a, 0xb6, - 0xcf, 0x2c, 0x48, 0x97, 0xc9, 0xe7, 0x92, 0x99, 0x05, 0x52, 0x75, 0x7e, 0xeb, 0x2b, 0x58, 0x4a, - 0xeb, 0xf8, 0x19, 0xcc, 0xcb, 0x9f, 0xe5, 0x60, 0x81, 0x93, 0xd7, 0x8e, 0xd3, 0x1b, 0xb1, 0xfc, - 0x53, 0xf8, 0x3d, 0x3c, 0x86, 0x09, 0xd2, 0xa0, 0xe8, 0xb7, 0xfe, 0x24, 0x49, 0xa9, 0x59, 0x71, - 0x42, 0x87, 0x5f, 0x65, 0x39, 0x87, 0x1d, 0xe1, 0x9d, 0x68, 0xab, 0xc8, 0xd6, 0x8f, 0x60, 0xd1, - 0x3c, 0x84, 0x33, 0x98, 0x9f, 0xc7, 0x50, 0x32, 0x30, 0xce, 0x37, 0xfb, 0x20, 0xfe, 0x10, 0x16, - 0x8c, 0xb4, 0xce, 0xa0, 0x9b, 0x6b, 0xe4, 0x73, 0x1f, 0x9e, 0xc1, 0x12, 0x5a, 0xcf, 0xe0, 0xb2, - 0x81, 0xd2, 0x19, 0x74, 0xf1, 0x11, 0xcc, 0x4b, 0x31, 0xf7, 0x1b, 0xf5, 0xf0, 0x29, 0x5c, 0x61, - 0x84, 0xce, 0x66, 0x55, 0x9e, 0xc0, 0x02, 0x27, 0x77, 0x06, 0xb3, 0xb7, 0x06, 0x8b, 0x91, 0x36, - 0x6b, 0x90, 0x25, 0x4e, 0xcc, 0x64, 0xac, 0x0d, 0xb8, 0x1a, 0x51, 0x4a, 0xf9, 0xb0, 0x9e, 0x9c, - 0x1a, 0x93, 0xc5, 0xa2, 0x55, 0x3a, 0x43, 0x59, 0x2c, 0x02, 0x3c, 0x33, 0x71, 0x62, 0x1d, 0x2e, - 0x32, 0xc2, 0xba, 0xdc, 0xba, 0xac, 0xca, 0xad, 0xc6, 0xd7, 0x3c, 0x49, 0x51, 0xf6, 0x29, 0x15, - 0x65, 0x05, 0x48, 0xd4, 0xc3, 0xf7, 0xe0, 0x3c, 0x7f, 0xb0, 0xc8, 0xfa, 0x67, 0x20, 0xc6, 0x24, - 0x75, 0x86, 0xc6, 0x81, 0xad, 0x9f, 0xc2, 0x15, 0xa6, 0x06, 0xc6, 0x1d, 0xe3, 0xc5, 0x92, 0x7c, - 0x3f, 0xa6, 0x05, 0x66, 0xf8, 0xdf, 0x9b, 0x94, 0xc1, 0x3d, 0xb1, 0xb7, 0xd3, 0xe8, 0x9f, 0xc8, - 0x53, 0x55, 0x68, 0x77, 0x79, 0xa3, 0x76, 0x77, 0x1d, 0xae, 0x49, 0xed, 0x2e, 0xde, 0x8c, 0x34, - 0xdb, 0xfe, 0x08, 0x16, 0xd8, 0x40, 0xf5, 0x67, 0x5a, 0xa2, 0x1b, 0x9f, 0xc4, 0x86, 0x99, 0xfa, - 0x0e, 0xcc, 0x34, 0xc8, 0xdf, 0xcd, 0x89, 0x23, 0x67, 0x26, 0xfe, 0x6d, 0xab, 0xbb, 0x9b, 0x50, - 0x96, 0x13, 0xa2, 0xf7, 0xe8, 0xcd, 0x74, 0xdd, 0xa7, 0x30, 0x97, 0x78, 0x4a, 0x40, 0x04, 0x56, - 0xf4, 0x2e, 0x39, 0x16, 0xb4, 0x40, 0x6c, 0xbb, 0xd4, 0xa7, 0x07, 0xb6, 0x84, 0xb4, 0x9a, 0xb0, - 0x98, 0x5c, 0x0a, 0xb7, 0x25, 0x1c, 0x93, 0xd0, 0xe7, 0xe4, 0x08, 0xb3, 0xf7, 0x0c, 0xb9, 0x01, - 0xef, 0x19, 0xf8, 0x39, 0x66, 0xe8, 0x02, 0xcb, 0xb2, 0x04, 0xab, 0x89, 0x8d, 0x9f, 0xb4, 0x2e, - 0xf6, 0x83, 0x0b, 0x48, 0x54, 0xd5, 0xea, 0xb6, 0x68, 0xfa, 0x32, 0x0c, 0xd5, 0xea, 0x36, 0xf7, - 0x87, 0xa4, 0xea, 0x76, 0x2b, 0xf0, 0x6d, 0x52, 0x16, 0x97, 0x5a, 0xf3, 0x27, 0x90, 0x5a, 0x1f, - 0x0f, 0x8f, 0x0d, 0x15, 0x86, 0xad, 0x1f, 0xc3, 0x45, 0xad, 0x29, 0x7e, 0x62, 0x33, 0x9d, 0x36, - 0xd1, 0x4d, 0x18, 0xad, 0x55, 0xe8, 0x5d, 0x1b, 0xb5, 0x0d, 0x4c, 0x32, 0xde, 0xd2, 0x72, 0x9a, - 0xf4, 0xf5, 0xb9, 0x2d, 0x2a, 0xad, 0x7f, 0x30, 0xac, 0x50, 0x57, 0xfc, 0x58, 0x33, 0x46, 0x72, - 0x1f, 0x80, 0xed, 0x06, 0x65, 0x20, 0x44, 0xd8, 0x9b, 0xe0, 0xd7, 0x03, 0x8c, 0xfd, 0xda, 0x0a, - 0xd0, 0x49, 0xbd, 0x57, 0xb9, 0xdf, 0x0e, 0x43, 0x12, 0x77, 0x68, 0xd2, 0x6f, 0x87, 0x93, 0x0e, - 0x6c, 0x15, 0x08, 0xfd, 0x34, 0xee, 0xd1, 0x35, 0x42, 0xaf, 0xac, 0xdf, 0xe2, 0x26, 0x08, 0xc3, - 0xd8, 0x4e, 0xe7, 0xd4, 0xf5, 0x0a, 0xe6, 0x08, 0xae, 0xfb, 0x9c, 0xba, 0x6d, 0xad, 0x7e, 0x1d, - 0xe2, 0x2e, 0xe3, 0xe3, 0xe7, 0x69, 0x3b, 0x37, 0x32, 0xda, 0x89, 0x80, 0xf9, 0x73, 0xe9, 0x88, - 0x4e, 0x13, 0xcb, 0x3a, 0xdb, 0x4c, 0x9f, 0x6e, 0x18, 0x7b, 0x63, 0xb5, 0xdb, 0xee, 0x79, 0xae, - 0x54, 0x20, 0xd8, 0x86, 0xf1, 0x3b, 0x4d, 0xcc, 0xcb, 0x6d, 0x15, 0xc8, 0xba, 0x99, 0xe9, 0x49, - 0x35, 0x06, 0xc3, 0x3b, 0xb5, 0x9d, 0x8d, 0x42, 0xce, 0xba, 0x0b, 0xa0, 0xb4, 0x04, 0x70, 0x7e, - 0x73, 0xcb, 0x7e, 0x5a, 0xd9, 0x28, 0x9c, 0x43, 0x73, 0x70, 0xe1, 0xd9, 0xfa, 0xe6, 0xca, 0xd6, - 0xb3, 0x7a, 0xb3, 0xfe, 0xb4, 0x62, 0xef, 0xd4, 0x2a, 0xf6, 0x4a, 0x21, 0x67, 0x7d, 0x05, 0xb3, - 0xfa, 0x08, 0xcf, 0x74, 0x13, 0x86, 0x70, 0x51, 0xca, 0x2e, 0x8f, 0x9f, 0xed, 0x28, 0x7e, 0x27, - 0x5c, 0x19, 0x8a, 0x5f, 0x85, 0x71, 0xb5, 0x89, 0x1f, 0x19, 0x05, 0x48, 0xbb, 0xc0, 0xcc, 0x67, - 0x5e, 0x60, 0x5a, 0x1f, 0xc0, 0xac, 0xde, 0xea, 0x49, 0xcd, 0x41, 0x6f, 0x51, 0x87, 0x1c, 0xc5, - 0x17, 0x92, 0x68, 0xe5, 0x51, 0x17, 0x39, 0x17, 0xfd, 0x00, 0x0a, 0x1c, 0x2a, 0xfa, 0xca, 0x5e, - 0x17, 0xf6, 0x3a, 0xc6, 0xed, 0xf4, 0x27, 0xed, 0xc2, 0x3d, 0xe0, 0x6d, 0x71, 0x03, 0x30, 0xa8, - 0x85, 0x3f, 0xcf, 0x41, 0x31, 0xe6, 0x56, 0x58, 0x7b, 0xe1, 0x74, 0x3a, 0xb8, 0xbb, 0x8f, 0xd1, - 0x2d, 0x18, 0xde, 0xd9, 0xda, 0xd9, 0xe6, 0x16, 0xb2, 0x59, 0xbe, 0x4d, 0x49, 0x91, 0x84, 0xb1, - 0x29, 0x04, 0x7a, 0x02, 0x17, 0x84, 0xfb, 0x89, 0xac, 0xe2, 0x0a, 0xc8, 0x95, 0x6c, 0x67, 0x96, - 0x24, 0x1e, 0x7a, 0x97, 0xfb, 0x40, 0xfe, 0xbc, 0xef, 0xfa, 0xb8, 0x4d, 0x95, 0xf3, 0xe9, 0x65, - 0x14, 0xf9, 0x40, 0x8a, 0x1a, 0x5b, 0x05, 0x7b, 0x3c, 0x3c, 0x96, 0x2b, 0xe4, 0xad, 0x3f, 0xc8, - 0xc1, 0x7c, 0x8a, 0x9b, 0x24, 0x7a, 0x47, 0x1b, 0xce, 0x45, 0x65, 0x38, 0x02, 0x64, 0xed, 0x1c, - 0x1f, 0x4f, 0x4d, 0xf1, 0xc9, 0x19, 0x3a, 0x85, 0x4f, 0x0e, 0x7f, 0xe2, 0x4c, 0xe1, 0xf8, 0x53, - 0x1e, 0x5a, 0x6e, 0xcd, 0xc0, 0x94, 0x36, 0x6f, 0x96, 0x05, 0x93, 0x6a, 0xcb, 0x64, 0x71, 0x6a, - 0x5e, 0x5b, 0x2e, 0x0e, 0xf9, 0xdb, 0xfa, 0x5b, 0x39, 0x98, 0xa5, 0x43, 0xdc, 0x77, 0xc9, 0x69, - 0x8c, 0x66, 0x68, 0x59, 0x1b, 0xc9, 0xa2, 0x36, 0x92, 0x18, 0xac, 0x1c, 0xd2, 0xc7, 0x89, 0x21, - 0x2d, 0x9a, 0x86, 0x44, 0xb5, 0x3e, 0xd7, 0xeb, 0x6a, 0x23, 0x51, 0xae, 0x21, 0xfe, 0x4e, 0x0e, - 0x2e, 0x2a, 0x7d, 0x92, 0xfd, 0xbf, 0xaf, 0x75, 0x69, 0xc1, 0xd0, 0xa5, 0xc4, 0x24, 0x57, 0x13, - 0x3d, 0x7a, 0x2b, 0xab, 0x47, 0x03, 0xe7, 0xf8, 0x2f, 0x72, 0x30, 0x67, 0x9c, 0x03, 0x74, 0x89, - 0x88, 0x56, 0x2d, 0x1f, 0x87, 0x7c, 0x7a, 0xf9, 0x2f, 0x52, 0xbe, 0x1e, 0x04, 0x7d, 0x1e, 0x17, - 0x64, 0xdc, 0xe6, 0xbf, 0xd0, 0x5b, 0x30, 0xb5, 0x8d, 0x7d, 0xd7, 0x6b, 0x33, 0x6f, 0x2d, 0x76, - 0xa3, 0x3d, 0x65, 0xeb, 0x85, 0x68, 0x11, 0xc6, 0x2b, 0x9d, 0x7d, 0xcf, 0x77, 0xc3, 0x17, 0xec, - 0x26, 0x68, 0xdc, 0x8e, 0x0a, 0x08, 0xed, 0x15, 0x77, 0x5f, 0x38, 0x69, 0x4c, 0xd9, 0xfc, 0x17, - 0x2a, 0xc2, 0xa8, 0x30, 0xe8, 0x50, 0x73, 0x90, 0x2d, 0x7e, 0x12, 0x8c, 0x2f, 0x6c, 0xba, 0x09, - 0xe8, 0xeb, 0x1d, 0x9b, 0xff, 0xb2, 0x6e, 0xc3, 0xac, 0x69, 0x1e, 0x8d, 0x5b, 0xe6, 0xff, 0xcf, - 0xc3, 0xc5, 0x4a, 0xbb, 0xfd, 0xf4, 0x61, 0x65, 0x05, 0xab, 0x02, 0xcd, 0xbb, 0x30, 0xbc, 0xde, - 0x75, 0x43, 0x2e, 0xcd, 0x08, 0x87, 0x62, 0x03, 0x24, 0x81, 0x22, 0x2b, 0x44, 0xfe, 0x47, 0x36, - 0x5c, 0x5c, 0xfd, 0xda, 0x0d, 0x42, 0xb7, 0xbb, 0xaf, 0x7a, 0x25, 0xe7, 0x4f, 0xe2, 0x95, 0xbc, - 0x76, 0xce, 0x36, 0x21, 0xa3, 0x1d, 0xb8, 0xb4, 0x89, 0x5f, 0x19, 0xb6, 0x90, 0x7c, 0xac, 0xa1, - 0x1c, 0xf4, 0xc4, 0xce, 0x49, 0xc1, 0x55, 0x77, 0xe8, 0xef, 0xe4, 0xe9, 0x8b, 0x2e, 0x65, 0x60, - 0xbc, 0xe5, 0x5d, 0x98, 0x55, 0x3a, 0x14, 0xf1, 0xa9, 0x1c, 0x7f, 0x43, 0x6a, 0x1c, 0x8e, 0x7a, - 0x90, 0x8c, 0xe8, 0xe8, 0x19, 0xcc, 0xeb, 0x9d, 0x8a, 0x28, 0xeb, 0x87, 0xc1, 0x04, 0xb2, 0x76, - 0xce, 0x4e, 0xc3, 0x46, 0xcb, 0x30, 0x54, 0x69, 0x1d, 0xf0, 0x69, 0x31, 0x2f, 0x19, 0x1b, 0x59, - 0xa5, 0x75, 0x40, 0x5f, 0x46, 0xb7, 0x0e, 0xb4, 0xf3, 0xf0, 0xaf, 0x72, 0x30, 0x9f, 0xb2, 0xc2, - 0x68, 0x09, 0x80, 0x15, 0x2a, 0x5f, 0x04, 0xa5, 0x84, 0x08, 0x68, 0xec, 0x17, 0xf5, 0xdc, 0x1a, - 0xa2, 0x2c, 0x58, 0xbc, 0x7b, 0x88, 0x2a, 0x6c, 0x05, 0x08, 0x6d, 0xc3, 0x04, 0xfb, 0xc5, 0x9e, - 0x5f, 0xe8, 0x6c, 0x5b, 0xa9, 0x61, 0x82, 0x4c, 0x9b, 0x16, 0x34, 0xe3, 0xcf, 0x2e, 0x54, 0x12, - 0xdc, 0x7c, 0x59, 0x8b, 0x8f, 0x42, 0x0e, 0x1a, 0xdd, 0x82, 0xf3, 0xac, 0x90, 0xaf, 0xa1, 0x78, - 0x11, 0x19, 0x01, 0xf3, 0x7a, 0xeb, 0xef, 0xe5, 0xe0, 0x12, 0xfb, 0x22, 0x26, 0x8e, 0xc6, 0x07, - 0xda, 0xd1, 0xb8, 0x26, 0x3b, 0x6c, 0x02, 0xd6, 0x4e, 0x47, 0x55, 0xf7, 0xd5, 0x3f, 0xe9, 0xa9, - 0x50, 0x91, 0xd4, 0x7d, 0xfb, 0xf7, 0x73, 0xc2, 0x9a, 0x93, 0xdc, 0xba, 0xab, 0x30, 0xf9, 0x66, - 0x5b, 0x56, 0x43, 0x43, 0xef, 0xb1, 0x1d, 0x95, 0xcf, 0x1e, 0x69, 0xe6, 0xa6, 0xfa, 0x14, 0x4a, - 0xe9, 0x53, 0x33, 0x68, 0x5b, 0x59, 0x0f, 0x0d, 0xd8, 0x6f, 0xb2, 0x9c, 0xfd, 0x04, 0x9d, 0xfa, - 0xeb, 0x6e, 0x4b, 0xac, 0xe8, 0xcd, 0xb8, 0x5f, 0x63, 0xaa, 0xaf, 0x98, 0xda, 0xdb, 0x7c, 0x74, - 0x6d, 0xc0, 0x37, 0x27, 0x15, 0xf6, 0xd4, 0xee, 0xff, 0xb3, 0xbc, 0xbe, 0x17, 0xdf, 0xa4, 0xd1, - 0x1a, 0x4c, 0x6d, 0xe2, 0x57, 0x89, 0x76, 0xa9, 0x1f, 0x4c, 0x17, 0xbf, 0x6a, 0x2a, 0x6d, 0xab, - 0x0e, 0xe2, 0x1a, 0x0e, 0xda, 0x83, 0x69, 0xc1, 0x35, 0x4e, 0xca, 0x3c, 0xd9, 0xdb, 0x33, 0xd2, - 0x42, 0xca, 0x4b, 0x91, 0x18, 0xc5, 0xb3, 0x3f, 0xcf, 0xd6, 0x36, 0x14, 0x93, 0xb3, 0xc7, 0x5b, - 0x7b, 0x77, 0xd0, 0xda, 0x33, 0xb3, 0x47, 0x5b, 0xdf, 0x07, 0x6b, 0xd4, 0x14, 0x25, 0x61, 0xa4, - 0x6d, 0xe1, 0x5e, 0x7c, 0x31, 0xa8, 0x3f, 0x8d, 0x58, 0x0c, 0xa5, 0x7f, 0xd2, 0xcd, 0xb5, 0x46, - 0xad, 0x79, 0x2a, 0x25, 0xde, 0xb1, 0xdb, 0x30, 0xca, 0x8b, 0x62, 0xcf, 0xae, 0xa3, 0x5d, 0x29, - 0x00, 0xac, 0x3f, 0xcc, 0xc1, 0x65, 0x6a, 0x5b, 0x74, 0xbb, 0xfb, 0x1d, 0xbc, 0x1b, 0xe8, 0x9e, - 0xaa, 0xdf, 0xd3, 0x18, 0xcd, 0x7c, 0xca, 0x7b, 0xa1, 0x5f, 0x17, 0x7b, 0xf9, 0xe3, 0x1c, 0x94, - 0x4c, 0x7d, 0x3b, 0x5b, 0x0e, 0x73, 0x87, 0x2b, 0x73, 0x79, 0x6e, 0x35, 0x61, 0xe8, 0xb2, 0x4d, - 0x31, 0x58, 0x32, 0x48, 0xf2, 0xbf, 0xc6, 0x5a, 0xfe, 0x57, 0x0e, 0x66, 0xd7, 0x03, 0x55, 0xc0, - 0xe7, 0x13, 0x77, 0xc7, 0xf4, 0x7c, 0x91, 0xae, 0xab, 0x39, 0xc4, 0xc5, 0xbb, 0xca, 0x4b, 0x99, - 0x7c, 0xd6, 0xbb, 0x44, 0x2d, 0xae, 0xc9, 0x4d, 0x18, 0xde, 0x24, 0xe2, 0xd4, 0x10, 0xdf, 0x7f, - 0x0c, 0x83, 0x14, 0xd1, 0x47, 0x2d, 0xa4, 0xcb, 0xe4, 0x07, 0x7a, 0x98, 0x78, 0x3a, 0x33, 0x3c, - 0xf8, 0xdd, 0x5d, 0x32, 0x20, 0x4b, 0x75, 0x0c, 0xce, 0xef, 0x38, 0xfe, 0x3e, 0x0e, 0xad, 0x1f, - 0x41, 0x89, 0x7b, 0xf5, 0x30, 0x6b, 0x2d, 0xf5, 0xfd, 0x09, 0x22, 0xc7, 0xad, 0x2c, 0x4f, 0x9c, - 0x25, 0x80, 0x7a, 0xe8, 0xf8, 0xe1, 0x7a, 0xb7, 0x8d, 0xbf, 0xa6, 0xa3, 0x1d, 0xb1, 0x95, 0x12, - 0xeb, 0x3d, 0x18, 0x97, 0x43, 0xa0, 0x1a, 0xa0, 0x22, 0x31, 0xd2, 0xe1, 0xcc, 0x6a, 0x8f, 0x79, - 0xc4, 0x0b, 0x9e, 0x07, 0x30, 0x17, 0x5b, 0x8a, 0xe8, 0x09, 0x99, 0xd4, 0xcc, 0xa8, 0xab, 0xa2, - 0x2d, 0x7f, 0x5b, 0x35, 0xb8, 0x90, 0x58, 0x69, 0x84, 0xe8, 0xeb, 0x2e, 0xa6, 0xdd, 0x93, 0x0f, - 0x4a, 0xbd, 0xbe, 0x46, 0xca, 0x76, 0x36, 0xea, 0xcc, 0x19, 0x9b, 0x94, 0xed, 0x6c, 0xd4, 0xab, - 0xe7, 0xd9, 0xce, 0xb1, 0xfe, 0x51, 0x9e, 0x2a, 0xbd, 0x89, 0x39, 0x88, 0xd9, 0x0a, 0x55, 0x7b, - 0x65, 0x15, 0xc6, 0xe9, 0x88, 0x57, 0xc4, 0x73, 0x83, 0x6c, 0x47, 0x94, 0xb1, 0x5f, 0x1c, 0x95, - 0xcf, 0x51, 0xef, 0x93, 0x08, 0x0d, 0x7d, 0x06, 0xa3, 0xab, 0xdd, 0x36, 0xa5, 0x30, 0x74, 0x0a, - 0x0a, 0x02, 0x89, 0xac, 0x03, 0xed, 0x32, 0x11, 0x85, 0xb8, 0xd9, 0xc9, 0x56, 0x4a, 0xe8, 0x34, - 0xbb, 0x87, 0x2e, 0x73, 0xf8, 0x1a, 0xb1, 0xd9, 0x0f, 0xfa, 0x20, 0x8f, 0x74, 0x41, 0x3c, 0xf5, - 0x1f, 0xb7, 0xe5, 0x6f, 0x64, 0xc1, 0xc8, 0x96, 0xdf, 0xe6, 0x0f, 0x75, 0xa7, 0x97, 0x27, 0x45, - 0xdc, 0x43, 0x52, 0x66, 0xb3, 0x2a, 0xeb, 0x7f, 0xe4, 0x60, 0xfe, 0x11, 0x0e, 0x8d, 0xfb, 0x46, - 0x9b, 0x95, 0xdc, 0x37, 0x9e, 0x95, 0xfc, 0x9b, 0xcc, 0x8a, 0x1c, 0xf5, 0x50, 0xda, 0xa8, 0x87, - 0xd3, 0x46, 0x3d, 0x92, 0x3e, 0xea, 0x47, 0x70, 0x9e, 0x0d, 0x15, 0x5d, 0x87, 0x91, 0xf5, 0x10, - 0x1f, 0x46, 0xc6, 0x10, 0xd5, 0x8d, 0xce, 0x66, 0x75, 0x44, 0xe3, 0xda, 0x70, 0x82, 0x50, 0xb8, - 0xff, 0x8f, 0xdb, 0xe2, 0xa7, 0xf5, 0x33, 0xfa, 0x50, 0x69, 0xc3, 0x6b, 0x1d, 0x28, 0x56, 0xe9, - 0x51, 0x76, 0x2a, 0xe3, 0xb7, 0x18, 0x04, 0x8a, 0xd5, 0xd8, 0x02, 0x02, 0x5d, 0x85, 0x89, 0xf5, - 0xee, 0x43, 0xcf, 0x6f, 0xe1, 0xad, 0x6e, 0x87, 0x51, 0x1f, 0xb3, 0xd5, 0x22, 0x6e, 0xc1, 0xe1, - 0x2d, 0x44, 0x16, 0x1c, 0x5a, 0x10, 0xb3, 0xe0, 0xb0, 0xd0, 0x58, 0x36, 0xab, 0xe3, 0x06, 0x22, - 0xf2, 0x77, 0x96, 0xf9, 0x46, 0xda, 0x79, 0x06, 0x01, 0xee, 0xc1, 0x65, 0x1b, 0xf7, 0x3a, 0x0e, - 0x11, 0xb8, 0x0e, 0x3d, 0x06, 0x2f, 0xc7, 0x7c, 0xd5, 0xe0, 0x2f, 0xae, 0xfb, 0x3e, 0xc8, 0x2e, - 0xe7, 0x33, 0xba, 0x7c, 0x08, 0xd7, 0x1e, 0xe1, 0xd0, 0x18, 0xdf, 0x2a, 0x1a, 0xfc, 0x1a, 0x8c, - 0x05, 0xba, 0xbd, 0x7e, 0x50, 0x68, 0x2d, 0x7e, 0xa3, 0xc5, 0xe9, 0xc8, 0xbf, 0xac, 0xcf, 0xa1, - 0x9c, 0xd6, 0xdc, 0xc9, 0x7c, 0x5e, 0x5d, 0xb8, 0x9a, 0x4e, 0x40, 0x7e, 0x16, 0x85, 0x6d, 0x5f, - 0xaa, 0xce, 0xd9, 0xbd, 0xd5, 0xaf, 0x03, 0xf8, 0x1f, 0x56, 0x55, 0x78, 0xff, 0x7d, 0x83, 0xee, - 0x36, 0xe9, 0xb5, 0xb9, 0x4e, 0x20, 0x9a, 0xd7, 0x0a, 0x8c, 0x89, 0x32, 0x3e, 0xaf, 0xa9, 0xa1, - 0xc3, 0xe8, 0x84, 0xb6, 0x05, 0x01, 0x89, 0x66, 0xfd, 0x4c, 0x5c, 0x21, 0xe9, 0x18, 0x27, 0x7b, - 0x04, 0x73, 0x92, 0x3b, 0x23, 0xcb, 0x83, 0xcb, 0x3a, 0x6d, 0xf5, 0xba, 0xa0, 0xa0, 0x5c, 0x17, - 0xb0, 0x5b, 0x82, 0xab, 0xba, 0xf9, 0x3a, 0xcf, 0xf7, 0x65, 0x54, 0x84, 0x96, 0xd4, 0x4b, 0x81, - 0xc9, 0xe4, 0xab, 0xa1, 0x7b, 0x50, 0x32, 0x35, 0xa8, 0x18, 0x50, 0xa4, 0xe5, 0x99, 0x47, 0xaa, - 0xf8, 0xcd, 0x1c, 0x58, 0x9a, 0x27, 0x94, 0x16, 0x05, 0x4a, 0x1e, 0x99, 0x77, 0x04, 0x63, 0xa3, - 0xbe, 0x57, 0xcc, 0x17, 0xbe, 0x43, 0x0a, 0xd4, 0xa7, 0x5a, 0x8c, 0xdb, 0xdd, 0x83, 0xd1, 0x4d, - 0xfc, 0x75, 0xc4, 0x7e, 0x98, 0x2c, 0x4a, 0xbd, 0xa3, 0x0e, 0xb0, 0xfa, 0x08, 0x54, 0x80, 0x11, - 0x41, 0xe8, 0x7a, 0x66, 0x1f, 0x78, 0xff, 0xf7, 0xa0, 0x10, 0xaf, 0xe3, 0x6b, 0x3f, 0x30, 0x20, - 0x16, 0x7d, 0x4d, 0x11, 0x8f, 0x83, 0x15, 0xd8, 0x09, 0x7a, 0xa7, 0xef, 0x3d, 0xfa, 0x08, 0x60, - 0xc7, 0x0b, 0x9d, 0x4e, 0x8d, 0xda, 0xb8, 0x28, 0xe3, 0x67, 0x51, 0x95, 0x42, 0x52, 0xda, 0x8c, - 0xbf, 0x56, 0x55, 0x80, 0xad, 0x1f, 0xd0, 0x13, 0x69, 0xee, 0xf4, 0xc9, 0x0e, 0x49, 0x0d, 0xae, - 0xc7, 0x3c, 0x0f, 0xde, 0x80, 0x48, 0x08, 0x73, 0x64, 0xfa, 0x65, 0x38, 0xad, 0x6f, 0x67, 0xd5, - 0xff, 0x6d, 0x8e, 0xb9, 0x4b, 0xaa, 0xcd, 0xf2, 0x85, 0xae, 0x01, 0x44, 0xa5, 0x31, 0x7f, 0x7c, - 0x35, 0x3a, 0x18, 0x55, 0x5e, 0xa3, 0xe8, 0x60, 0x81, 0xad, 0xa0, 0x7d, 0xbb, 0x2b, 0xf9, 0x80, - 0xba, 0x1b, 0xc8, 0xd6, 0x4f, 0x36, 0xef, 0xef, 0x0b, 0x1b, 0xcd, 0x29, 0xf1, 0x5e, 0xc0, 0xac, - 0x16, 0x40, 0x39, 0x8a, 0x08, 0x1b, 0x05, 0x8e, 0x1e, 0xaf, 0x7e, 0xfa, 0xab, 0xa3, 0xf2, 0x87, - 0xa7, 0x79, 0xc5, 0x25, 0x68, 0xee, 0xc8, 0xc7, 0x8a, 0xd6, 0x3c, 0x0c, 0xd5, 0xec, 0x0d, 0xca, - 0xaa, 0xec, 0x0d, 0xc9, 0xaa, 0xec, 0x0d, 0xeb, 0x9f, 0xe7, 0xa1, 0xcc, 0xde, 0x2a, 0x53, 0x2f, - 0x95, 0x48, 0x57, 0x52, 0xdc, 0x5e, 0x4e, 0x6a, 0x21, 0x88, 0xbd, 0x45, 0xce, 0x9f, 0xe4, 0x2d, - 0xf2, 0xff, 0xfd, 0xe6, 0x56, 0x55, 0x16, 0x1c, 0x2f, 0x32, 0x0c, 0xb0, 0x5a, 0x93, 0x85, 0x20, - 0xa5, 0x89, 0xa4, 0x49, 0x63, 0xf8, 0xf4, 0x26, 0x0d, 0xeb, 0x6f, 0xe7, 0xe1, 0x6a, 0xfa, 0x0c, - 0xf2, 0x96, 0x56, 0xb4, 0x88, 0xb6, 0x19, 0xde, 0x35, 0xf4, 0x24, 0x28, 0x11, 0x6d, 0xe3, 0x51, - 0x6c, 0xc5, 0x7b, 0x9d, 0xd8, 0xdd, 0x96, 0xf6, 0x8c, 0x47, 0xc4, 0x03, 0x67, 0x45, 0x5a, 0x20, - 0x2b, 0x5e, 0x86, 0xf6, 0x60, 0x7e, 0xdb, 0x77, 0x5f, 0x3a, 0x21, 0x7e, 0x82, 0x5f, 0x6f, 0x7b, - 0x1d, 0xb7, 0xf5, 0x7a, 0xb5, 0xeb, 0xec, 0x75, 0x70, 0x9b, 0x3f, 0xc2, 0xba, 0x75, 0x7c, 0x54, - 0x7e, 0xab, 0xc7, 0x40, 0xc8, 0x31, 0x6b, 0xf6, 0x28, 0x50, 0x13, 0x33, 0x28, 0x85, 0x68, 0x1a, - 0x21, 0xeb, 0xdf, 0xe4, 0x60, 0x81, 0x8a, 0xc7, 0xfc, 0x9e, 0x40, 0x34, 0xfe, 0x46, 0x4e, 0x96, - 0xea, 0x00, 0xf9, 0xce, 0xa2, 0x4e, 0x96, 0xda, 0x7b, 0x26, 0x5b, 0x03, 0x43, 0xeb, 0x30, 0xc1, - 0x7f, 0x2b, 0xc6, 0xe0, 0x39, 0x85, 0xfd, 0xd0, 0x8d, 0xcb, 0x6c, 0x41, 0x74, 0x9b, 0x72, 0x62, - 0x4d, 0xfa, 0xca, 0x57, 0xc5, 0xb5, 0x7e, 0x99, 0x87, 0xc5, 0x06, 0xf6, 0xdd, 0xe7, 0xaf, 0x53, - 0x06, 0xb3, 0x05, 0xb3, 0xa2, 0x88, 0x8e, 0x59, 0x3f, 0x30, 0x2c, 0x48, 0x8e, 0xe8, 0x6a, 0x40, - 0x00, 0x9a, 0xf2, 0xfc, 0x18, 0x11, 0x4f, 0xe1, 0x3e, 0xf9, 0x2e, 0x8c, 0xc5, 0xde, 0xff, 0xd3, - 0xf5, 0x17, 0xe7, 0x4d, 0x8f, 0x8f, 0x28, 0x0f, 0xde, 0x6f, 0xa5, 0x5f, 0x38, 0x72, 0xbb, 0xc0, - 0xa0, 0xe8, 0x2d, 0xf4, 0xf8, 0x91, 0xa3, 0xe7, 0x28, 0xb5, 0x86, 0xe3, 0xb7, 0x76, 0xce, 0x4e, - 0x6b, 0xa9, 0x3a, 0x01, 0xe3, 0x15, 0x7a, 0x89, 0x4a, 0xd4, 0xf0, 0xff, 0x99, 0x87, 0x25, 0xf1, - 0x02, 0x27, 0x65, 0x9a, 0xbf, 0x84, 0x79, 0x51, 0x54, 0xe9, 0x91, 0xcf, 0x3f, 0x6e, 0xeb, 0x33, - 0xcd, 0x02, 0x55, 0x89, 0x99, 0x76, 0x38, 0x4c, 0x34, 0xd9, 0x69, 0xe8, 0x67, 0x63, 0xde, 0xfc, - 0xcc, 0x14, 0x8d, 0x81, 0x9a, 0x19, 0x55, 0x0e, 0xa8, 0x07, 0x51, 0x54, 0xb9, 0x61, 0x3b, 0x61, - 0x1e, 0x1d, 0xfe, 0xa6, 0xe6, 0xd1, 0xb5, 0x73, 0x71, 0x03, 0x69, 0x75, 0x1a, 0x26, 0x37, 0xf1, - 0xab, 0x68, 0xde, 0x7f, 0x3b, 0x17, 0x7b, 0x30, 0x48, 0xe4, 0x05, 0xf6, 0x72, 0x30, 0x17, 0x3d, - 0xe8, 0xa7, 0x0f, 0x06, 0x55, 0x79, 0x81, 0x81, 0xae, 0xc3, 0x28, 0x73, 0xb8, 0x6d, 0x9f, 0x40, - 0xd3, 0x96, 0x4f, 0x69, 0x5a, 0x0c, 0x85, 0x29, 0xdd, 0x1c, 0xdf, 0x7a, 0x02, 0xd7, 0xb8, 0xbf, - 0xb7, 0xbe, 0xf8, 0xb4, 0xa1, 0x53, 0x7e, 0x8c, 0x2c, 0x07, 0x96, 0x1e, 0xe1, 0x38, 0xeb, 0xd1, - 0x9e, 0x1a, 0x7d, 0x0e, 0x33, 0x5a, 0xb9, 0xa4, 0x48, 0x65, 0x4c, 0xb9, 0x87, 0x24, 0xe9, 0x38, - 0xb4, 0x75, 0xd5, 0xd4, 0x84, 0xda, 0x59, 0x0b, 0xd3, 0x88, 0x53, 0x7e, 0x74, 0x27, 0x1c, 0x9c, - 0x82, 0xeb, 0xdd, 0x52, 0xce, 0x35, 0xe3, 0x78, 0x2c, 0x2a, 0x8f, 0xf8, 0x8e, 0xca, 0x5a, 0x6b, - 0x0a, 0x26, 0x6a, 0x5e, 0x37, 0xc4, 0x5f, 0x53, 0xc1, 0xc5, 0x9a, 0x86, 0x49, 0x51, 0xd5, 0xc1, - 0x41, 0x60, 0xfd, 0xd1, 0x10, 0x58, 0x7c, 0x62, 0x4d, 0xb6, 0x50, 0x31, 0x1f, 0x7b, 0x89, 0xce, - 0xf2, 0x0f, 0xd5, 0x25, 0xd5, 0xe2, 0x1b, 0xd5, 0xb2, 0x9d, 0x47, 0xa5, 0xb6, 0x56, 0x54, 0xaa, - 0x47, 0xc4, 0x8d, 0x8f, 0xfe, 0xc7, 0x29, 0x6c, 0x92, 0x1d, 0x36, 0x1a, 0x8c, 0x3a, 0x85, 0x4d, - 0x6a, 0x74, 0xcd, 0x2c, 0xd3, 0xd6, 0xa6, 0x81, 0x0b, 0x10, 0x48, 0xbe, 0x94, 0x94, 0x35, 0xdc, - 0x23, 0x89, 0x15, 0x34, 0x13, 0x09, 0x18, 0x54, 0x22, 0x68, 0x57, 0x9f, 0x4b, 0x7e, 0x1e, 0x85, - 0x0f, 0x86, 0x5a, 0xc5, 0xa8, 0xf6, 0x94, 0x12, 0x3d, 0x9f, 0x85, 0x06, 0xab, 0xd8, 0xb7, 0x7f, - 0x5f, 0x7a, 0xdd, 0x93, 0x0f, 0xa9, 0xdb, 0xc1, 0xfc, 0x89, 0x89, 0x58, 0x96, 0xbe, 0xf9, 0x2e, - 0x3b, 0x77, 0x22, 0x1e, 0x4d, 0xc3, 0x80, 0x62, 0x8e, 0x9e, 0x76, 0x81, 0x62, 0xa2, 0x6f, 0x1d, - 0xe5, 0xc4, 0x5b, 0x83, 0xc4, 0x05, 0xef, 0x69, 0xe5, 0xc2, 0xaa, 0x76, 0x27, 0x9b, 0x4f, 0xb9, - 0x93, 0xd5, 0x6e, 0xb0, 0xc2, 0x01, 0x97, 0xb4, 0x43, 0xdf, 0xfc, 0x52, 0xe7, 0xbf, 0x8d, 0xc0, - 0x85, 0x6d, 0x67, 0xdf, 0xed, 0x12, 0xde, 0x23, 0x42, 0xd7, 0xa2, 0x4a, 0x22, 0xb9, 0x41, 0xb6, - 0x53, 0xab, 0x21, 0x7b, 0xc1, 0xb2, 0x1a, 0x67, 0x3c, 0x9f, 0xf6, 0xfe, 0x53, 0x8f, 0x26, 0xfe, - 0x91, 0x66, 0xc3, 0x4f, 0x24, 0xda, 0xa0, 0xbe, 0x7a, 0x5d, 0xaf, 0x1d, 0x4b, 0xf8, 0x41, 0xed, - 0xe0, 0xc9, 0x08, 0xec, 0x23, 0x67, 0x1c, 0x81, 0xfd, 0x47, 0x30, 0xf1, 0xa4, 0xbf, 0x27, 0x93, - 0x49, 0x9c, 0x1f, 0x18, 0xe1, 0x9b, 0xae, 0xc1, 0x41, 0x7f, 0xcf, 0x9c, 0x4e, 0x42, 0x25, 0x66, - 0x8c, 0x56, 0x3e, 0xfa, 0x6b, 0x89, 0x56, 0x9e, 0x1a, 0x28, 0x7f, 0xec, 0x5b, 0x09, 0x94, 0x6f, - 0x88, 0x38, 0x3e, 0x7e, 0xe6, 0x11, 0xc7, 0xab, 0x00, 0x63, 0x7e, 0x14, 0x85, 0x79, 0xb8, 0x30, - 0x62, 0xfd, 0xcb, 0x51, 0x98, 0x25, 0xda, 0xb9, 0xd8, 0xe1, 0x41, 0xf4, 0xf9, 0x9b, 0x14, 0x65, - 0x8a, 0xb2, 0xc9, 0x25, 0x55, 0x56, 0xde, 0x8c, 0x25, 0x27, 0xd2, 0x10, 0xd0, 0x7b, 0xea, 0xdd, - 0x46, 0x5e, 0x09, 0x73, 0x99, 0xcc, 0x2b, 0xa3, 0x5e, 0x7a, 0xbc, 0xa3, 0x99, 0xd6, 0x33, 0x6d, - 0x11, 0x0f, 0xe2, 0xf6, 0x76, 0x1e, 0x9f, 0x8a, 0x7e, 0x18, 0x74, 0xdd, 0x3f, 0x32, 0xc4, 0xef, - 0xc2, 0x79, 0x1a, 0x4c, 0x46, 0x3c, 0xc8, 0x7d, 0x9b, 0x33, 0x09, 0xd3, 0x24, 0xb0, 0xb0, 0x33, - 0xfc, 0x35, 0x2e, 0x8d, 0xbd, 0xd4, 0xa1, 0x05, 0x6a, 0xcc, 0x18, 0x06, 0x82, 0x76, 0xe0, 0xe2, - 0xb6, 0x8f, 0xdb, 0xdc, 0x53, 0xb5, 0xe7, 0x73, 0x55, 0x8e, 0xbd, 0x8c, 0xa3, 0x21, 0x1f, 0x7b, - 0xa2, 0xba, 0x89, 0x65, 0xbd, 0xca, 0x65, 0x0d, 0xe8, 0x68, 0x15, 0xa6, 0xeb, 0xd8, 0xf1, 0x5b, - 0x2f, 0x9e, 0xe0, 0xd7, 0xe4, 0xe3, 0x10, 0x14, 0x47, 0xa3, 0x38, 0xa9, 0x01, 0xad, 0x21, 0x03, - 0xa5, 0x55, 0xea, 0x95, 0xb7, 0x8e, 0x84, 0x7e, 0x00, 0xe7, 0xeb, 0x9e, 0x1f, 0x56, 0x5f, 0xc7, - 0x12, 0x0d, 0xb1, 0xc2, 0xea, 0x65, 0x11, 0x2b, 0x36, 0xf0, 0xfc, 0xb0, 0xb9, 0xa7, 0xce, 0x1b, - 0xc7, 0x43, 0x0f, 0x89, 0xe4, 0x49, 0xa4, 0x61, 0x69, 0x36, 0x61, 0x01, 0x28, 0xb8, 0x74, 0x49, - 0x45, 0x68, 0x93, 0xed, 0x24, 0x86, 0x85, 0x5e, 0xc3, 0xac, 0xbe, 0xff, 0x1f, 0xba, 0x1d, 0xc2, - 0x34, 0x40, 0x4b, 0xd9, 0x61, 0x02, 0xa9, 0xde, 0xe2, 0xbd, 0xbc, 0x1a, 0x3f, 0x65, 0xcf, 0x69, - 0xbd, 0x1a, 0xb7, 0xda, 0x84, 0x8f, 0x9e, 0xd2, 0x50, 0xbd, 0x6c, 0x66, 0x2a, 0x81, 0x08, 0xc0, - 0x4c, 0x06, 0x41, 0x63, 0xcf, 0xf5, 0xe9, 0x19, 0xa2, 0x33, 0xea, 0x04, 0xf1, 0x38, 0xcc, 0x76, - 0x02, 0x15, 0x6d, 0xc3, 0x85, 0xdd, 0x00, 0x6f, 0xfb, 0xf8, 0xa5, 0x8b, 0x5f, 0x09, 0x7a, 0x93, - 0x94, 0x1e, 0x5d, 0x6e, 0x42, 0xaf, 0xc7, 0x6a, 0x4d, 0x04, 0x93, 0xc8, 0xa5, 0x8f, 0x60, 0x42, - 0xd9, 0x6f, 0x86, 0xa7, 0xdd, 0xb3, 0xea, 0xd3, 0xee, 0x71, 0xf5, 0x09, 0xf7, 0x5f, 0xe4, 0x98, - 0x69, 0x4f, 0xd9, 0xc0, 0xdc, 0xb2, 0xb0, 0x05, 0xe3, 0xb2, 0x50, 0x3e, 0x24, 0x10, 0xd2, 0x49, - 0xec, 0xeb, 0xc6, 0x8e, 0x8f, 0x38, 0xdd, 0x6a, 0x6f, 0x23, 0x1a, 0xdf, 0xae, 0xb9, 0xed, 0xb7, - 0xa2, 0x27, 0x87, 0xfc, 0x79, 0xa4, 0xef, 0xb4, 0x0e, 0x22, 0x7b, 0xe7, 0x4f, 0xc9, 0xf9, 0x50, - 0x2b, 0x78, 0x7e, 0xa4, 0x79, 0x3d, 0xb9, 0x0d, 0xaf, 0x14, 0x21, 0xf6, 0xe5, 0xcb, 0x4b, 0x56, - 0xac, 0x1f, 0x1c, 0x15, 0x81, 0x3a, 0xdf, 0xce, 0x58, 0x36, 0x7b, 0x31, 0x67, 0xec, 0xc1, 0xfb, - 0xc9, 0x37, 0x5f, 0x34, 0x97, 0x41, 0xf4, 0xe6, 0x4b, 0x9d, 0xc6, 0xe8, 0xf5, 0xd7, 0x2e, 0x2c, - 0xd8, 0xf8, 0xd0, 0x7b, 0x89, 0xcf, 0x96, 0xec, 0x8f, 0xe1, 0xb2, 0x4e, 0x70, 0xb7, 0xd7, 0xa6, - 0xa1, 0x32, 0xd8, 0xad, 0xa7, 0x31, 0x74, 0x1d, 0x47, 0x60, 0xa1, 0xeb, 0x58, 0x30, 0x23, 0xf2, - 0xa7, 0xca, 0x6f, 0x69, 0x9d, 0xe5, 0xc1, 0xa2, 0x4e, 0xbc, 0xd2, 0x6e, 0xd3, 0x90, 0xf9, 0x2d, - 0xb7, 0xe7, 0x74, 0x43, 0xb4, 0x05, 0x13, 0xca, 0xcf, 0x98, 0x6c, 0xa3, 0xd4, 0xb0, 0xd5, 0xef, - 0x45, 0x05, 0xaa, 0x0c, 0xa6, 0xc0, 0x59, 0x18, 0xca, 0xf1, 0xe9, 0x21, 0x53, 0xa6, 0xb6, 0x59, - 0x85, 0x29, 0xe5, 0xa7, 0x54, 0x15, 0x68, 0x58, 0x4a, 0xa5, 0x05, 0x7d, 0xc2, 0x74, 0x14, 0xab, - 0x05, 0x25, 0xd3, 0xa4, 0xd1, 0x10, 0x0e, 0xaf, 0xd1, 0x6a, 0x14, 0x0c, 0x62, 0xf0, 0x6d, 0xf3, - 0x4c, 0x5a, 0x20, 0x08, 0xeb, 0x6f, 0x0e, 0xc3, 0x02, 0x5f, 0x8c, 0xb3, 0x5c, 0x71, 0xf4, 0x33, - 0x98, 0x50, 0xd6, 0x98, 0x4f, 0xfa, 0x55, 0xe1, 0xa0, 0x92, 0xb6, 0x17, 0x98, 0x0c, 0xd6, 0xa7, - 0x05, 0xcd, 0xd8, 0x72, 0x13, 0x19, 0x4c, 0xdd, 0x36, 0x1d, 0x98, 0xd6, 0x17, 0x9a, 0x8b, 0xa1, - 0xd7, 0x8d, 0x8d, 0xe8, 0xa0, 0x22, 0x0e, 0x52, 0xbb, 0x69, 0x5c, 0x6e, 0x9a, 0xd2, 0x49, 0xdf, - 0x44, 0x5f, 0xc3, 0x85, 0xc4, 0x2a, 0x73, 0xb5, 0xea, 0xa6, 0xb1, 0xc1, 0x04, 0x34, 0x8b, 0xfd, - 0xed, 0xd3, 0xe2, 0xd4, 0x66, 0x93, 0x8d, 0xa0, 0x36, 0x4c, 0xaa, 0x0b, 0xcf, 0xe5, 0xe4, 0x6b, - 0x19, 0x53, 0xc9, 0x00, 0x99, 0x50, 0xc4, 0xe7, 0x92, 0xae, 0xbd, 0x9e, 0x05, 0x51, 0xa3, 0x5a, - 0x1d, 0x83, 0xf3, 0xec, 0x37, 0x61, 0x01, 0xdb, 0x3e, 0x0e, 0x70, 0xb7, 0x85, 0x55, 0x5f, 0xa3, - 0x6f, 0xca, 0x02, 0xfe, 0x75, 0x0e, 0x8a, 0x26, 0xba, 0x75, 0xdc, 0x6d, 0xa3, 0x6d, 0x28, 0xc4, - 0x1b, 0xe2, 0xbb, 0xda, 0x12, 0x5f, 0x85, 0xf4, 0x2e, 0x11, 0xb9, 0x39, 0xd1, 0xcd, 0x4d, 0xb8, - 0xa0, 0x94, 0x9d, 0xd2, 0xa9, 0x2b, 0x89, 0xaa, 0xaa, 0xbe, 0x6b, 0xd4, 0x77, 0x6d, 0xc5, 0x3b, - 0x74, 0xdc, 0x2e, 0x11, 0x10, 0x95, 0xb0, 0x0d, 0x10, 0x95, 0xf2, 0xb9, 0x61, 0xea, 0x21, 0x2d, - 0x15, 0x0e, 0x8e, 0x12, 0xc4, 0xfa, 0x94, 0x72, 0x70, 0xae, 0x54, 0xb0, 0xa7, 0x35, 0x92, 0xd8, - 0x55, 0x18, 0xd9, 0xd9, 0xa8, 0xd7, 0x2a, 0xfc, 0xa1, 0x0e, 0x7b, 0xca, 0xd9, 0x09, 0x9a, 0x2d, - 0xc7, 0x66, 0x15, 0xd6, 0x27, 0x34, 0x5a, 0x1d, 0x8f, 0x75, 0x26, 0xf1, 0x6e, 0xc0, 0x28, 0x2f, - 0xe2, 0x98, 0xf4, 0x6a, 0xb8, 0xc3, 0xa1, 0x44, 0x9d, 0xb5, 0x2d, 0xe4, 0xeb, 0x0e, 0x76, 0x02, - 0xe5, 0xc3, 0xfc, 0x21, 0x11, 0xc5, 0x59, 0x19, 0xff, 0x2e, 0x4f, 0xcb, 0x50, 0xa2, 0xb4, 0x98, - 0xa9, 0xcb, 0x02, 0xc6, 0x96, 0x7f, 0x59, 0x7f, 0x96, 0x87, 0x59, 0x11, 0xb0, 0x45, 0x33, 0x05, - 0x0c, 0x0c, 0x19, 0xf9, 0x43, 0x3d, 0x26, 0x4e, 0x4d, 0xc6, 0xc4, 0xf9, 0x06, 0x79, 0x26, 0x78, - 0x34, 0x9d, 0x13, 0x3e, 0x63, 0x7b, 0x22, 0xa5, 0xef, 0x61, 0x4d, 0xfa, 0x36, 0x8d, 0x47, 0x93, - 0xbe, 0xe9, 0xb2, 0x30, 0xe9, 0x5b, 0xc8, 0xdc, 0xdf, 0x44, 0x60, 0xfa, 0x90, 0x6c, 0x2d, 0xad, - 0xc9, 0x93, 0xbe, 0x70, 0xda, 0xa0, 0x8f, 0xde, 0xb7, 0xd6, 0x57, 0x6a, 0x64, 0x4f, 0xf3, 0xae, - 0x8a, 0x15, 0xb8, 0x4b, 0xbd, 0xd6, 0x38, 0x4d, 0x75, 0x63, 0x52, 0x16, 0xcb, 0x43, 0x3d, 0x28, - 0x20, 0xd6, 0x03, 0xf9, 0x84, 0xde, 0x40, 0x2d, 0x2d, 0xfe, 0xe9, 0x26, 0x0d, 0x0e, 0xf0, 0x88, - 0xae, 0xd7, 0x59, 0x74, 0xe2, 0x0f, 0x73, 0x2c, 0xda, 0x40, 0x7d, 0x4b, 0x09, 0x08, 0xdf, 0x7d, - 0xee, 0x29, 0x96, 0x50, 0xa5, 0x99, 0x27, 0x6e, 0xb7, 0xad, 0x5a, 0x42, 0x69, 0xbe, 0x3e, 0xfe, - 0x50, 0xb0, 0x79, 0xe0, 0x76, 0xdb, 0x76, 0x1c, 0x1a, 0x7d, 0x04, 0x53, 0x4a, 0x91, 0xfc, 0x48, - 0xb3, 0x48, 0x7b, 0x2a, 0xba, 0xdb, 0xb6, 0x75, 0x48, 0xeb, 0xb7, 0xf3, 0xb0, 0x90, 0x91, 0x6d, - 0x84, 0xea, 0x80, 0x54, 0x81, 0x97, 0x33, 0xc5, 0x63, 0x14, 0xd3, 0x47, 0x91, 0x1a, 0x8f, 0x94, - 0x80, 0xe8, 0x53, 0x98, 0x50, 0x93, 0x9f, 0xe4, 0x95, 0x40, 0xd8, 0xe6, 0x84, 0x27, 0x2a, 0x38, - 0x0a, 0x00, 0xa2, 0x9e, 0xf0, 0x77, 0xc2, 0x75, 0x22, 0xd1, 0x28, 0x99, 0x53, 0xce, 0x24, 0x85, - 0x8b, 0xd2, 0x8c, 0xf5, 0xd7, 0xf3, 0xb0, 0x94, 0x31, 0x0f, 0x75, 0x1c, 0xfe, 0x9f, 0x98, 0x8a, - 0x58, 0x3e, 0x9b, 0xa1, 0x6f, 0x29, 0x9f, 0x8d, 0xf5, 0xfb, 0x79, 0xb8, 0xb4, 0xdb, 0x0b, 0xa8, - 0x73, 0xe9, 0x7a, 0xf7, 0x25, 0xee, 0x86, 0x9e, 0xff, 0x9a, 0x3a, 0xc7, 0xa1, 0xf7, 0x60, 0x64, - 0x0d, 0x77, 0x3a, 0x1e, 0xff, 0xac, 0x5d, 0x11, 0xc6, 0xe9, 0x38, 0x34, 0x05, 0x5a, 0x3b, 0x67, - 0x33, 0x68, 0xf4, 0x11, 0x8c, 0xaf, 0x61, 0xc7, 0x0f, 0xf7, 0xb0, 0x23, 0x24, 0xd7, 0xcb, 0x1c, - 0x55, 0x41, 0xe1, 0x00, 0x6b, 0xe7, 0xec, 0x08, 0x1a, 0x2d, 0xc3, 0xf0, 0xb6, 0xd7, 0xdd, 0x97, - 0xaf, 0xcf, 0x52, 0x1a, 0x24, 0x30, 0x6b, 0xe7, 0x6c, 0x0a, 0x8b, 0x9e, 0xc2, 0x54, 0x65, 0x1f, - 0x77, 0xc3, 0xa7, 0x38, 0x74, 0xda, 0x4e, 0xe8, 0x70, 0x09, 0xe7, 0x46, 0x1a, 0xb2, 0x06, 0x4c, - 0x73, 0xc4, 0xaa, 0x05, 0xd5, 0x11, 0x18, 0x7a, 0x1a, 0xec, 0x5b, 0xbf, 0x97, 0x83, 0xe2, 0x8a, - 0xf7, 0xaa, 0x6b, 0x9c, 0x98, 0x0f, 0xf4, 0x89, 0x11, 0x2e, 0xd0, 0x06, 0xf8, 0xd8, 0xd4, 0xbc, - 0x0b, 0xc3, 0xdb, 0x6e, 0x77, 0x3f, 0xf6, 0x51, 0x37, 0xe0, 0x11, 0x28, 0x3a, 0x42, 0xb7, 0xbb, - 0x2f, 0xba, 0xf4, 0x0e, 0xcc, 0xa7, 0x40, 0xa2, 0x69, 0xc9, 0xde, 0x86, 0x29, 0x5b, 0x7b, 0x1b, - 0xe6, 0x8c, 0x93, 0x96, 0x00, 0xfc, 0x17, 0x39, 0xc3, 0xea, 0xb3, 0xbe, 0x16, 0x61, 0x54, 0x04, - 0x7a, 0x65, 0xdf, 0x01, 0xf1, 0x93, 0x3a, 0x67, 0x8a, 0xd3, 0xc1, 0x43, 0xfb, 0xc9, 0x43, 0xd0, - 0x50, 0x1e, 0xdb, 0xb3, 0x3d, 0xfc, 0xf1, 0x37, 0xd8, 0xa9, 0x92, 0x16, 0x69, 0x73, 0xcd, 0x0b, - 0xc2, 0xae, 0xf4, 0x1d, 0xb0, 0xe5, 0x6f, 0xeb, 0x3f, 0xe4, 0x69, 0x98, 0xc0, 0x8c, 0x65, 0x26, - 0xe3, 0xde, 0xaa, 0xf3, 0x71, 0xe4, 0xb7, 0xea, 0x68, 0x11, 0xc6, 0xb7, 0xea, 0x5a, 0x1c, 0x5b, - 0x3b, 0x2a, 0x40, 0xb7, 0x59, 0xb2, 0xb2, 0x8a, 0xdf, 0x7a, 0xe1, 0x86, 0xb8, 0x15, 0xf6, 0x7d, - 0xce, 0x9c, 0xec, 0x44, 0x39, 0xb2, 0x60, 0xf2, 0x51, 0xc7, 0xdd, 0x6b, 0x09, 0x62, 0xac, 0x73, - 0x5a, 0x19, 0xba, 0x09, 0xd3, 0x3c, 0x21, 0x22, 0x0b, 0xf3, 0xcb, 0xb3, 0x7d, 0xd9, 0xb1, 0x52, - 0xd2, 0x6e, 0xcd, 0xeb, 0x86, 0x8e, 0xdb, 0xc5, 0xbe, 0xdd, 0xef, 0x86, 0x2e, 0x4f, 0x8f, 0x3d, - 0x6e, 0x27, 0xca, 0xd1, 0xbb, 0x30, 0x27, 0xcb, 0xb6, 0xfc, 0xd6, 0x0b, 0x1c, 0x84, 0x3e, 0x0d, - 0x89, 0x4e, 0x9f, 0x70, 0xdb, 0xe6, 0x4a, 0xda, 0x42, 0xc7, 0xeb, 0xb7, 0x57, 0xbb, 0x2f, 0x5d, - 0xdf, 0x63, 0xa9, 0xf4, 0xc6, 0x78, 0x0b, 0xb1, 0x72, 0x6b, 0xdb, 0x78, 0x02, 0xbe, 0xc1, 0xe6, - 0xb0, 0x6a, 0x80, 0x92, 0x1c, 0x00, 0x7d, 0x0f, 0xc6, 0xeb, 0xf5, 0x35, 0xed, 0x0e, 0x20, 0x6e, - 0x96, 0xb7, 0x23, 0x08, 0xeb, 0x7d, 0xb8, 0x24, 0x89, 0xb0, 0x18, 0x97, 0x8a, 0x0b, 0x38, 0x4f, - 0xc8, 0x22, 0x3d, 0xcf, 0xa3, 0x02, 0xeb, 0xc7, 0x09, 0xbc, 0x7a, 0xff, 0xf0, 0xd0, 0xf1, 0x5f, - 0xa3, 0x8a, 0x8e, 0x37, 0x34, 0x90, 0xd7, 0x55, 0x87, 0x7f, 0x71, 0x54, 0x3e, 0xa7, 0x12, 0xb7, - 0x61, 0x56, 0x3b, 0x91, 0xa2, 0x4b, 0xa5, 0xf8, 0x87, 0x44, 0x39, 0x2a, 0x4b, 0x00, 0x3c, 0x08, - 0xee, 0x86, 0xb7, 0xcf, 0x3d, 0x83, 0x95, 0x12, 0xeb, 0x21, 0xcc, 0xc5, 0x68, 0x72, 0xc1, 0xea, - 0x7b, 0x20, 0x45, 0x41, 0x4a, 0x74, 0xa8, 0x7a, 0xe1, 0x57, 0x47, 0xe5, 0x29, 0xb2, 0x2d, 0xee, - 0x44, 0xa1, 0xac, 0xc4, 0x5f, 0xd6, 0x53, 0x55, 0x62, 0xaf, 0x74, 0xb4, 0x37, 0x1d, 0xf7, 0xe1, - 0x3c, 0x2b, 0x89, 0x05, 0x8c, 0x51, 0xa1, 0xf9, 0x68, 0x39, 0xa0, 0x35, 0x47, 0xfd, 0xb6, 0xe8, - 0x8f, 0x4a, 0xe4, 0x21, 0x6c, 0xed, 0xb2, 0xe8, 0x85, 0x51, 0xb1, 0x0c, 0x4a, 0x33, 0x5c, 0x89, - 0x3c, 0x99, 0x85, 0x59, 0x52, 0xc0, 0x75, 0xbd, 0x57, 0x1d, 0xdc, 0xde, 0xa7, 0xb9, 0x5f, 0xaa, - 0x93, 0xdc, 0x2c, 0x39, 0xec, 0x10, 0x02, 0x14, 0xcd, 0xfa, 0x1c, 0xe6, 0x6a, 0x1d, 0xec, 0xf8, - 0xf1, 0xf6, 0xd0, 0x4d, 0x18, 0xa5, 0x65, 0xfa, 0x95, 0x98, 0x43, 0x8a, 0xe8, 0x95, 0x18, 0xaf, - 0x24, 0x42, 0x26, 0x8b, 0xe3, 0xa1, 0x0e, 0x29, 0x92, 0xef, 0x46, 0xe8, 0xef, 0x98, 0x9f, 0x90, - 0x61, 0xf4, 0x0c, 0xce, 0xfa, 0x8c, 0x5e, 0x44, 0x9b, 0xd2, 0xfe, 0x9c, 0xcc, 0x0f, 0xed, 0xff, - 0x83, 0xc5, 0x4a, 0xaf, 0x87, 0xbb, 0xed, 0x08, 0x91, 0xa8, 0xc1, 0x27, 0xf3, 0xef, 0x45, 0x15, - 0x18, 0xa1, 0xd0, 0xd2, 0x34, 0xc1, 0xbb, 0x6b, 0xe8, 0x0e, 0x85, 0xe3, 0x32, 0x37, 0x6d, 0x80, - 0x61, 0x5a, 0x6d, 0x98, 0xaf, 0xf7, 0xf7, 0x0e, 0x5d, 0x96, 0x61, 0x87, 0xfa, 0xc8, 0x8b, 0xb6, - 0xd7, 0x45, 0xc0, 0x59, 0x36, 0x19, 0xb7, 0xa2, 0x74, 0x3e, 0xf4, 0x76, 0x8f, 0xfb, 0xcd, 0xbf, - 0xbc, 0x7f, 0x27, 0x42, 0xa5, 0x9f, 0x43, 0xd6, 0x0a, 0xad, 0xe6, 0x41, 0x69, 0xad, 0x8b, 0x70, - 0x41, 0x55, 0xf3, 0xd8, 0x0e, 0x99, 0x83, 0x8b, 0xba, 0xfa, 0xc6, 0x8a, 0xbf, 0x82, 0x59, 0x66, - 0x97, 0x64, 0x11, 0x80, 0x96, 0xa3, 0x60, 0x37, 0xf9, 0xc6, 0x72, 0xec, 0x4e, 0x90, 0x3a, 0x69, - 0xca, 0xd8, 0x6e, 0x8d, 0x65, 0xe6, 0x4c, 0xf4, 0x72, 0x59, 0x33, 0x12, 0xe4, 0x1b, 0xcb, 0xd5, - 0x51, 0xae, 0x7b, 0x10, 0xea, 0x6c, 0xf9, 0x7f, 0x2d, 0xd4, 0x97, 0xa9, 0x37, 0xea, 0x1a, 0x76, - 0xe8, 0x5d, 0xb3, 0xd9, 0xa7, 0x6f, 0x1a, 0xf2, 0x6e, 0x5b, 0x7c, 0x7a, 0xdc, 0xb6, 0xf5, 0xa7, - 0x39, 0xb8, 0xc5, 0xcc, 0x16, 0x66, 0x3c, 0xaa, 0x4d, 0xa4, 0x20, 0xa3, 0x0f, 0x81, 0x25, 0xc3, - 0xe0, 0x76, 0x47, 0x8b, 0xf7, 0x3c, 0x8b, 0x12, 0x43, 0x40, 0x15, 0x98, 0x54, 0x2f, 0xa5, 0x63, - 0x6f, 0x86, 0x53, 0xec, 0x0a, 0xf6, 0xc4, 0xe1, 0x73, 0x47, 0x5e, 0x54, 0x1f, 0xc0, 0xc2, 0xea, - 0xd7, 0x64, 0x43, 0xf0, 0xc0, 0xd2, 0xfc, 0x6e, 0x20, 0xf2, 0x32, 0x9b, 0xd9, 0xe1, 0x3b, 0x46, - 0xff, 0x36, 0xc4, 0x8b, 0xc9, 0x37, 0x93, 0x93, 0xf0, 0xa9, 0x0a, 0xc4, 0xbe, 0x13, 0x5a, 0x99, - 0xf5, 0xef, 0x73, 0xb0, 0x68, 0x6e, 0x8d, 0x33, 0x96, 0x75, 0xb8, 0x50, 0x73, 0xba, 0x5e, 0xd7, - 0x6d, 0x39, 0x9d, 0x7a, 0xeb, 0x05, 0x6e, 0xf7, 0x3b, 0xe2, 0xae, 0x5e, 0x72, 0x19, 0x22, 0x03, - 0x70, 0x74, 0x01, 0x62, 0x27, 0xb1, 0xd0, 0xfb, 0x70, 0x89, 0xde, 0x94, 0x32, 0xde, 0xdb, 0xc1, - 0xbe, 0xa4, 0xc7, 0x7a, 0x96, 0x52, 0x8b, 0xee, 0xc1, 0x45, 0x26, 0xac, 0xb4, 0x77, 0xbb, 0x6e, - 0x28, 0x91, 0x98, 0xa8, 0x60, 0xaa, 0xba, 0x7d, 0x1b, 0xc6, 0xb7, 0x7a, 0x98, 0xa7, 0x87, 0x1d, - 0x83, 0xe1, 0xf5, 0xcd, 0xf5, 0x1d, 0x96, 0xdf, 0x6a, 0x7b, 0x77, 0xa7, 0x90, 0x43, 0x00, 0xe7, - 0x57, 0x56, 0x37, 0x56, 0x77, 0x56, 0x0b, 0xf9, 0xdb, 0x4d, 0xf5, 0x32, 0x1f, 0x2d, 0xc0, 0xfc, - 0xca, 0x6a, 0x63, 0xbd, 0xb6, 0xda, 0xdc, 0xf9, 0xe1, 0xf6, 0x6a, 0x53, 0x8f, 0xb9, 0x32, 0x0b, - 0x05, 0xb5, 0x72, 0x67, 0x6b, 0x67, 0xbb, 0x90, 0x43, 0x45, 0x98, 0x55, 0x4b, 0x9f, 0xad, 0x56, - 0x2b, 0xbb, 0x3b, 0x6b, 0x9b, 0x85, 0x21, 0x6b, 0x78, 0x2c, 0x5f, 0xc8, 0xdf, 0xfe, 0x99, 0x76, - 0xd3, 0x8f, 0x16, 0xa1, 0xc8, 0xc1, 0x77, 0xeb, 0x95, 0x47, 0xe9, 0x4d, 0xb0, 0xda, 0xa7, 0x0f, - 0x2b, 0x85, 0x1c, 0xba, 0x02, 0x97, 0xb5, 0xd2, 0xed, 0x4a, 0xbd, 0xfe, 0x6c, 0xcb, 0x5e, 0xd9, - 0x58, 0xad, 0xd7, 0x0b, 0xf9, 0xdb, 0x0d, 0x2d, 0x4e, 0x07, 0x69, 0xe1, 0xe9, 0xc3, 0x4a, 0xd3, - 0x5e, 0xfd, 0x62, 0x77, 0xdd, 0x5e, 0x5d, 0x49, 0xb6, 0xa0, 0xd5, 0xfe, 0x70, 0xb5, 0x5e, 0xc8, - 0xa1, 0x8b, 0x30, 0xa3, 0x95, 0x6e, 0x6e, 0x15, 0xf2, 0xb7, 0x6f, 0xf2, 0x27, 0x40, 0x68, 0x1a, - 0x60, 0x65, 0xb5, 0x5e, 0x5b, 0xdd, 0x5c, 0x59, 0xdf, 0x7c, 0x54, 0x38, 0x87, 0xa6, 0x60, 0xbc, - 0x22, 0x7f, 0xe6, 0x96, 0xff, 0xee, 0xef, 0xe6, 0x60, 0x82, 0x6c, 0x6c, 0x71, 0x37, 0xfc, 0x95, - 0x22, 0x04, 0xf0, 0x05, 0xe5, 0xd1, 0xac, 0x53, 0xbf, 0xf8, 0x94, 0xc7, 0x95, 0x32, 0x64, 0x7c, - 0x0a, 0x70, 0x2b, 0x77, 0x2f, 0x87, 0x6c, 0x6a, 0xdd, 0x8a, 0x49, 0x19, 0x92, 0xb2, 0x59, 0x6a, - 0x29, 0xa5, 0x54, 0x0b, 0xe1, 0xe4, 0x31, 0x4c, 0x91, 0x8f, 0xbf, 0xac, 0x45, 0x0b, 0x71, 0x78, - 0x45, 0xde, 0x28, 0x2d, 0x9a, 0x2b, 0x65, 0xd8, 0xb9, 0x49, 0xda, 0xbf, 0x20, 0x74, 0xba, 0x44, - 0xa8, 0x9e, 0x53, 0xb3, 0x7a, 0x77, 0x5b, 0x98, 0x5d, 0xef, 0x95, 0x2e, 0xc4, 0x8a, 0x1b, 0xf7, - 0xef, 0xe5, 0x50, 0x9d, 0x3e, 0x53, 0xd2, 0xa4, 0x08, 0x24, 0x6e, 0xf2, 0x93, 0xe2, 0x05, 0xeb, - 0x4d, 0x59, 0x9a, 0xa4, 0x52, 0xc4, 0x8f, 0x4d, 0x40, 0xc9, 0x8f, 0x33, 0xba, 0x1a, 0x2d, 0x85, - 0xf9, 0xbb, 0x5d, 0xba, 0x94, 0xb8, 0x37, 0x58, 0x25, 0xec, 0x19, 0xad, 0xc2, 0x34, 0x77, 0xbf, - 0xe2, 0xe2, 0x02, 0xca, 0x12, 0x38, 0x52, 0xc9, 0x3c, 0xa2, 0xf3, 0x24, 0x45, 0x0e, 0x54, 0x8a, - 0xc6, 0x11, 0x97, 0x43, 0x4a, 0x0b, 0xc6, 0x3a, 0x3e, 0xbe, 0x87, 0x30, 0xad, 0x4b, 0x2f, 0x48, - 0x2c, 0x90, 0x51, 0xa8, 0x49, 0xed, 0x50, 0x13, 0xe6, 0x9f, 0x3a, 0x2e, 0x15, 0xe8, 0xb9, 0x75, - 0x5a, 0xd8, 0x96, 0x51, 0x39, 0xc3, 0xd8, 0x5c, 0xc7, 0xdd, 0x76, 0x69, 0xd0, 0x03, 0x5d, 0xba, - 0x73, 0xeb, 0xe2, 0x23, 0xac, 0xdb, 0xe6, 0x91, 0xa5, 0x47, 0xdd, 0x37, 0x5d, 0xb7, 0x94, 0xd2, - 0x6e, 0x08, 0xd1, 0x53, 0x2a, 0x05, 0xc4, 0x28, 0x2a, 0x7b, 0xe2, 0xd4, 0xe4, 0x8a, 0xd4, 0x09, - 0x30, 0x74, 0xe3, 0x57, 0x7d, 0x01, 0x4a, 0x99, 0xb8, 0x54, 0x62, 0xf7, 0x72, 0xe8, 0x2b, 0xb0, - 0xd2, 0xc8, 0x3d, 0x73, 0xc3, 0x17, 0xfc, 0xaa, 0x7b, 0xc1, 0x48, 0x80, 0x1f, 0x94, 0x0c, 0xea, - 0x36, 0xcc, 0x9a, 0x2e, 0x25, 0xe5, 0x84, 0x66, 0xdc, 0x58, 0xa6, 0xee, 0x02, 0x9b, 0xc8, 0x32, - 0xed, 0xf4, 0x45, 0xca, 0xb8, 0x13, 0x4b, 0xa5, 0xf9, 0x29, 0x4c, 0x93, 0x5d, 0xf2, 0x04, 0xe3, - 0x5e, 0xa5, 0xe3, 0xbe, 0xc4, 0x01, 0x12, 0x8f, 0xd7, 0x65, 0x51, 0x1a, 0xee, 0xad, 0x1c, 0xfa, - 0x0e, 0x4f, 0x70, 0xce, 0xdf, 0x5a, 0x8a, 0xa7, 0x98, 0xb4, 0xac, 0x24, 0x7e, 0xd1, 0xca, 0x7b, - 0x39, 0xf4, 0x7d, 0x18, 0x7d, 0x84, 0x43, 0xea, 0x49, 0x75, 0x4d, 0xda, 0xe7, 0xd9, 0x5d, 0xf8, - 0x7a, 0x57, 0x7a, 0xad, 0x88, 0x0e, 0xc7, 0x55, 0x40, 0x74, 0x17, 0x80, 0x31, 0x04, 0x4a, 0x21, - 0x5e, 0x5d, 0x4a, 0x74, 0x1b, 0x3d, 0x22, 0xdf, 0xcf, 0x0e, 0x0e, 0xf1, 0x49, 0x9b, 0x4c, 0x9b, - 0xa3, 0x0d, 0x98, 0x96, 0x91, 0xfa, 0x36, 0xa9, 0x2b, 0xae, 0x15, 0x23, 0x16, 0x9c, 0x82, 0xda, - 0xc7, 0xe4, 0x54, 0x30, 0x7b, 0xb9, 0x7c, 0xd8, 0x8f, 0xd2, 0x9e, 0xfa, 0xcb, 0x49, 0x64, 0x60, - 0x0a, 0xae, 0xcc, 0xa6, 0x2e, 0x71, 0xe3, 0xf9, 0xd5, 0x63, 0xb8, 0x18, 0x4a, 0x6a, 0xbb, 0xfa, - 0x23, 0xff, 0x88, 0xe7, 0xa6, 0xc5, 0x26, 0x28, 0x5d, 0xcb, 0x80, 0x60, 0xec, 0x8e, 0x72, 0x92, - 0x15, 0xa2, 0x1e, 0xb2, 0x66, 0xd4, 0xe4, 0xcf, 0xc2, 0x02, 0x98, 0x4c, 0x66, 0x5d, 0x42, 0xc9, - 0x2a, 0xf2, 0xd5, 0xd3, 0x1e, 0x97, 0x47, 0x5f, 0x3d, 0xc3, 0xeb, 0xff, 0xe8, 0xab, 0x67, 0x7c, - 0x8f, 0xfe, 0x84, 0x29, 0xac, 0x5a, 0x0a, 0xd8, 0xc6, 0x32, 0x12, 0x6e, 0x75, 0x5a, 0x05, 0x3f, - 0xd8, 0x97, 0x4c, 0x75, 0x8d, 0x07, 0xf7, 0x72, 0x68, 0x15, 0x2e, 0x4a, 0xcf, 0xe9, 0xa8, 0x0a, - 0xa5, 0x20, 0xa4, 0x6e, 0x82, 0xcf, 0xe1, 0x22, 0xdf, 0x52, 0x1a, 0x99, 0x82, 0xe4, 0x0e, 0xdc, - 0x68, 0x9f, 0x4a, 0xe0, 0x31, 0xcc, 0xd5, 0x63, 0x83, 0x62, 0x57, 0xcc, 0x97, 0x75, 0x12, 0x4a, - 0x1e, 0xbe, 0x54, 0x5a, 0x4f, 0x00, 0x31, 0x9d, 0x50, 0x90, 0x7b, 0xe9, 0xe2, 0x57, 0xe8, 0x4a, - 0x6c, 0x48, 0xa4, 0x90, 0x82, 0x51, 0xf6, 0x92, 0x36, 0x45, 0x68, 0x87, 0xe5, 0x1f, 0x60, 0x39, - 0x7e, 0x9c, 0x9e, 0xb3, 0xe7, 0x76, 0xdc, 0xd0, 0xc5, 0x64, 0x87, 0xa9, 0x08, 0x6a, 0x95, 0x58, - 0xc6, 0xcb, 0xa9, 0x10, 0xe8, 0x33, 0x98, 0x7a, 0x84, 0xc3, 0x28, 0xd5, 0x20, 0x9a, 0x4f, 0x24, - 0x27, 0xe4, 0x4b, 0x27, 0xde, 0xe9, 0xe8, 0xf9, 0x0d, 0xd7, 0xa1, 0xc0, 0xb8, 0xa3, 0x42, 0xe2, - 0x4a, 0x82, 0x04, 0x07, 0x71, 0x7c, 0xe7, 0x30, 0x48, 0x9d, 0xad, 0xbb, 0xcc, 0x86, 0x8b, 0xc4, - 0xb6, 0x55, 0xc5, 0xaf, 0x8b, 0x5a, 0x99, 0x8c, 0x92, 0x32, 0x67, 0xcc, 0xb1, 0x87, 0xae, 0x47, - 0x9f, 0xc2, 0xd4, 0xc4, 0x79, 0x25, 0x14, 0x7f, 0x45, 0xd3, 0x78, 0x80, 0x64, 0xb8, 0x76, 0x03, - 0xd1, 0x9b, 0xda, 0x17, 0xfb, 0x74, 0x74, 0x3f, 0x83, 0x71, 0x99, 0xac, 0x4d, 0xb2, 0x95, 0x78, - 0xaa, 0xbb, 0x52, 0x31, 0x59, 0xc1, 0x47, 0xfa, 0x29, 0x4b, 0xcd, 0xa8, 0xe3, 0xc7, 0xf3, 0x99, - 0xa5, 0x4e, 0xec, 0x47, 0x30, 0xa1, 0x64, 0x32, 0x93, 0x1b, 0x39, 0x99, 0xdd, 0xac, 0x34, 0xa5, - 0xf4, 0xbd, 0xb1, 0x7c, 0x2f, 0x87, 0xee, 0xd2, 0x4f, 0x0b, 0x75, 0x23, 0x9f, 0x8b, 0xd0, 0x94, - 0xdc, 0x46, 0x31, 0x14, 0xf4, 0x01, 0x7d, 0x3b, 0x5f, 0xeb, 0xfb, 0x3e, 0xd1, 0x10, 0x09, 0x5e, - 0x9a, 0x04, 0x11, 0x43, 0xfc, 0x8c, 0x32, 0x13, 0x05, 0x91, 0xdd, 0xd9, 0x0e, 0xc2, 0x66, 0xb1, - 0x17, 0xef, 0xe5, 0xd0, 0x03, 0x18, 0x13, 0x89, 0x4f, 0xd1, 0x25, 0xbd, 0xab, 0xe9, 0xc3, 0x7b, - 0x00, 0xc0, 0x26, 0x9b, 0xf6, 0x54, 0xaf, 0x4e, 0x9d, 0xce, 0x07, 0xe4, 0x7b, 0xd9, 0x3e, 0x25, - 0xd2, 0x67, 0xe2, 0x9b, 0x49, 0x91, 0x8a, 0xda, 0x12, 0xaa, 0xd3, 0x99, 0x86, 0x4f, 0x04, 0x5e, - 0x2d, 0x1f, 0x6b, 0x24, 0xf0, 0x9a, 0xd2, 0xb4, 0xa6, 0xd2, 0x59, 0x87, 0x42, 0xa5, 0x45, 0xf9, - 0xb8, 0xcc, 0x17, 0x25, 0xb5, 0x8d, 0x78, 0x85, 0xa0, 0x35, 0x17, 0x4f, 0x3f, 0xb5, 0x81, 0x1d, - 0x1a, 0x4e, 0x60, 0x5e, 0xca, 0x04, 0xb1, 0x2a, 0x33, 0x46, 0x86, 0x76, 0x31, 0x5b, 0x23, 0xfa, - 0x50, 0xe7, 0x9b, 0x91, 0xf9, 0x98, 0xf2, 0x32, 0x25, 0x97, 0xd6, 0xa5, 0x38, 0xbe, 0xd4, 0xc3, - 0x84, 0xbf, 0x8c, 0x04, 0xad, 0xc0, 0x0c, 0x7f, 0xbc, 0x2c, 0xa7, 0x25, 0x0d, 0x3b, 0xad, 0xf9, - 0x0f, 0x60, 0x7a, 0x95, 0xf0, 0xfa, 0x7e, 0xdb, 0x65, 0x21, 0x54, 0x90, 0x1e, 0x13, 0x23, 0x15, - 0x71, 0x4d, 0xa4, 0x72, 0x54, 0x92, 0x4c, 0xc9, 0x53, 0x9a, 0xcc, 0xe3, 0x55, 0x9a, 0x15, 0x64, - 0xd5, 0x7c, 0x54, 0x5c, 0x4f, 0x9e, 0x4f, 0x49, 0xeb, 0x84, 0x6e, 0x68, 0xba, 0x5f, 0x5a, 0x6e, - 0x26, 0x83, 0xb4, 0xf7, 0xa5, 0x12, 0xe8, 0x3e, 0x85, 0x66, 0x76, 0xbe, 0xa7, 0xd4, 0x71, 0xcb, - 0xa0, 0x07, 0xc6, 0xbc, 0x4c, 0xe8, 0x1d, 0x9d, 0x7a, 0x46, 0xee, 0xa6, 0xd4, 0x16, 0xa8, 0x6e, - 0xad, 0xa7, 0x0d, 0x42, 0x4b, 0xd9, 0xd9, 0x8d, 0x14, 0xdd, 0x3a, 0x25, 0xdf, 0xd0, 0x63, 0xba, - 0xcd, 0xa2, 0x68, 0xf8, 0x48, 0xd5, 0x54, 0xe3, 0xc9, 0x00, 0xa4, 0x08, 0x65, 0xce, 0x1d, 0xf4, - 0x88, 0xb2, 0x4b, 0x25, 0xb2, 0x7e, 0x2a, 0xc3, 0xbb, 0x62, 0xa2, 0x13, 0x28, 0xdf, 0xc2, 0x99, - 0x58, 0x16, 0x1e, 0x69, 0x1e, 0x31, 0xe7, 0x01, 0x2a, 0x2d, 0xa5, 0x55, 0x73, 0x8a, 0x75, 0x91, - 0x8c, 0x55, 0x19, 0xe9, 0x92, 0xf6, 0x85, 0x4a, 0x0e, 0xb6, 0x9c, 0x5a, 0x2f, 0xe7, 0xae, 0x10, - 0xcf, 0x9a, 0x20, 0x89, 0xa6, 0xa4, 0x53, 0xc8, 0x60, 0x89, 0xb3, 0xea, 0xd6, 0x18, 0x38, 0x83, - 0x69, 0x74, 0x76, 0x60, 0xce, 0x98, 0xe4, 0x40, 0x8a, 0x11, 0x59, 0x29, 0x10, 0x52, 0xa9, 0x62, - 0xb8, 0x64, 0xce, 0x73, 0x82, 0xde, 0xd2, 0x55, 0x7f, 0x73, 0xd6, 0x87, 0xd2, 0x8d, 0x01, 0x50, - 0x7c, 0x42, 0xbf, 0xa2, 0x9f, 0xcd, 0x44, 0x1b, 0xd7, 0x14, 0x63, 0x40, 0x4a, 0x03, 0x56, 0x16, - 0x88, 0xdc, 0x03, 0xb3, 0xa6, 0x3c, 0x4b, 0xa9, 0x53, 0x7c, 0x3d, 0x9d, 0x66, 0xb4, 0xb1, 0x1a, - 0x22, 0xd4, 0x40, 0xea, 0xcc, 0x64, 0xe6, 0xc3, 0xc8, 0xd0, 0x26, 0x4b, 0x72, 0x3f, 0x9c, 0xbc, - 0xcb, 0xe9, 0x96, 0xa1, 0x59, 0x53, 0x16, 0x96, 0xb8, 0xe1, 0xc6, 0x94, 0x64, 0x43, 0x4e, 0x43, - 0x66, 0x1a, 0x97, 0x06, 0x33, 0xe2, 0xe8, 0xd4, 0x55, 0x23, 0x8e, 0x91, 0xf4, 0xd5, 0x74, 0x80, - 0x68, 0x47, 0x18, 0xd2, 0x49, 0xc9, 0x1d, 0x91, 0x9e, 0xd8, 0x4a, 0xee, 0x88, 0xac, 0x6c, 0x54, - 0xb6, 0x38, 0x74, 0x29, 0xd3, 0x92, 0x91, 0x7b, 0x24, 0x43, 0xe5, 0x2a, 0x46, 0x0b, 0x17, 0xeb, - 0xf6, 0x69, 0x97, 0xed, 0x2b, 0xb8, 0x9c, 0x9a, 0x67, 0x04, 0xbd, 0x9d, 0x38, 0xd0, 0x29, 0x33, - 0x91, 0xde, 0xd3, 0x29, 0x2d, 0x45, 0x88, 0xb4, 0x62, 0xc5, 0xb2, 0x91, 0x24, 0x58, 0xbf, 0x21, - 0x55, 0x09, 0x63, 0xfd, 0x4a, 0xba, 0x91, 0x93, 0xb0, 0x7e, 0x53, 0x76, 0x12, 0xc9, 0x53, 0x95, - 0x7e, 0x09, 0x91, 0x2e, 0x5e, 0x71, 0x1a, 0x9e, 0x7a, 0x92, 0xae, 0xa5, 0xd1, 0x59, 0xa1, 0x2a, - 0x87, 0xc8, 0x3e, 0x82, 0x2e, 0x6b, 0xd3, 0xa4, 0x7d, 0x6e, 0x4b, 0xda, 0xe0, 0xf4, 0x2f, 0x6d, - 0x8d, 0x9a, 0x8b, 0x65, 0xb6, 0x93, 0xd4, 0x5e, 0x2c, 0x24, 0x69, 0x68, 0xa6, 0x62, 0x39, 0x0b, - 0xac, 0x37, 0x8b, 0xf1, 0xc9, 0xd1, 0x3a, 0x94, 0x3e, 0x24, 0xa4, 0x4e, 0xcd, 0x80, 0x2e, 0xa5, - 0x8b, 0xba, 0x17, 0x99, 0xf2, 0xc0, 0x62, 0x81, 0x89, 0x37, 0x84, 0x97, 0xa4, 0xdd, 0x4b, 0x29, - 0xcd, 0x30, 0x73, 0x6c, 0x53, 0xef, 0x22, 0x43, 0xe2, 0x16, 0xc9, 0x43, 0x33, 0xf3, 0xba, 0x18, - 0xc4, 0x3c, 0xc9, 0x95, 0x53, 0x29, 0x66, 0x66, 0x72, 0x49, 0xed, 0xe9, 0x4f, 0x15, 0xae, 0x9c, - 0x48, 0xcf, 0x82, 0x6e, 0xc5, 0x65, 0xbc, 0xb4, 0x0c, 0x2e, 0x19, 0x5c, 0x7f, 0xd6, 0x94, 0xd9, - 0x45, 0xb1, 0xdd, 0xa6, 0xa6, 0x7d, 0x31, 0xcc, 0x82, 0x64, 0x6f, 0x29, 0xd4, 0x32, 0xf2, 0xbc, - 0xa4, 0xf6, 0xf0, 0x47, 0x0a, 0x7b, 0x8b, 0xe5, 0x63, 0x91, 0x46, 0x85, 0x01, 0x09, 0x5b, 0x52, - 0x69, 0x6f, 0x52, 0x7f, 0xb4, 0x64, 0x32, 0x15, 0x29, 0xbb, 0x64, 0xa5, 0x5a, 0x31, 0x9a, 0x76, - 0xe7, 0x92, 0x43, 0x24, 0xf4, 0x2e, 0xc5, 0x0c, 0xb3, 0x83, 0x3a, 0x26, 0xf9, 0xb0, 0x21, 0x09, - 0x4b, 0x8c, 0x0f, 0xa7, 0xa7, 0x69, 0xc9, 0xd0, 0x98, 0x66, 0xea, 0xee, 0x7e, 0x57, 0xc9, 0xab, - 0x22, 0xf5, 0xa5, 0x64, 0x5a, 0x17, 0xc9, 0x62, 0x4c, 0x69, 0x58, 0xb6, 0x22, 0x3f, 0x75, 0x35, - 0x43, 0x06, 0x2a, 0xa5, 0x27, 0x06, 0x91, 0xec, 0xc6, 0x98, 0x52, 0x43, 0x21, 0xa8, 0xa6, 0xa7, - 0x90, 0x04, 0x0d, 0x99, 0x32, 0x24, 0x41, 0x63, 0x3e, 0x0b, 0x66, 0x82, 0xb1, 0xbd, 0x0e, 0x56, - 0x4d, 0x30, 0x4a, 0x72, 0x89, 0x98, 0x2d, 0x04, 0x7d, 0x42, 0x2d, 0x21, 0xd9, 0xe6, 0x93, 0x79, - 0x9d, 0x52, 0xc4, 0x2d, 0x1f, 0x88, 0xcb, 0x00, 0xda, 0xa0, 0x4e, 0x79, 0xb0, 0x71, 0x83, 0x22, - 0xe9, 0xc6, 0x0d, 0xb5, 0xa3, 0xe9, 0x76, 0xd2, 0x49, 0x35, 0x38, 0xb1, 0x9c, 0x2b, 0x43, 0x04, - 0x75, 0x39, 0x57, 0xa6, 0xb8, 0xe4, 0x54, 0x07, 0xde, 0x11, 0x9a, 0x7c, 0x44, 0xef, 0x4a, 0x66, - 0x60, 0xf1, 0xd2, 0x52, 0x76, 0x34, 0x6e, 0x7e, 0x8f, 0x57, 0x88, 0xc7, 0x4f, 0x46, 0xa6, 0xb8, - 0xf0, 0x4a, 0x58, 0x6a, 0xa9, 0x0d, 0xa5, 0x06, 0x5e, 0xde, 0x16, 0xc6, 0x6a, 0x9d, 0x6e, 0x4a, - 0x74, 0x70, 0x95, 0x74, 0xb6, 0x80, 0x12, 0x85, 0x52, 0x56, 0x75, 0xd3, 0x44, 0xa8, 0x66, 0x55, - 0x40, 0x31, 0x44, 0x5f, 0x76, 0xc5, 0xbb, 0x46, 0x73, 0x86, 0x92, 0x77, 0x74, 0x5d, 0x2f, 0x23, - 0x2c, 0xc7, 0xc0, 0x9b, 0x52, 0xf4, 0x13, 0x91, 0x89, 0x34, 0x19, 0x89, 0xff, 0x46, 0xcc, 0xec, - 0x6a, 0x0e, 0xe4, 0x50, 0xca, 0x0a, 0xf4, 0x8f, 0x9e, 0xd2, 0x2b, 0xf6, 0xad, 0xf5, 0x95, 0x1a, - 0xf7, 0xe8, 0xf2, 0xfc, 0xc4, 0xb5, 0xd5, 0x33, 0x37, 0x7c, 0xc1, 0x52, 0x53, 0x28, 0xdc, 0x87, - 0x81, 0x68, 0x88, 0x8d, 0x07, 0xa8, 0x4e, 0x25, 0x77, 0xad, 0xd4, 0x70, 0x73, 0x65, 0x20, 0x58, - 0x32, 0x13, 0xa4, 0xc9, 0xb4, 0xa8, 0x60, 0x40, 0x0e, 0x9e, 0xde, 0xcd, 0x94, 0x3e, 0x64, 0xc9, - 0x17, 0x6c, 0xdb, 0x98, 0xc9, 0x9c, 0x94, 0x7d, 0x3f, 0x82, 0x39, 0x36, 0xe1, 0xb1, 0x47, 0x24, - 0x5a, 0x7f, 0x94, 0xf2, 0x52, 0x4a, 0x39, 0xda, 0xa4, 0x9e, 0x1b, 0xf1, 0x52, 0x45, 0x8b, 0x31, - 0xbf, 0x52, 0x49, 0xa5, 0xc7, 0x96, 0x92, 0x88, 0xed, 0x6f, 0xb4, 0x94, 0x1a, 0x62, 0x63, 0x99, - 0x2f, 0xa5, 0x56, 0x7a, 0xba, 0xa5, 0x8c, 0x11, 0xd4, 0x97, 0x52, 0xef, 0x66, 0x4a, 0x1f, 0x06, - 0x2f, 0xa5, 0x99, 0xcc, 0xa9, 0x97, 0x32, 0xf6, 0x82, 0x47, 0xeb, 0x8f, 0x69, 0x29, 0xe3, 0xf0, - 0x6c, 0x29, 0xe3, 0xa5, 0x31, 0x85, 0x34, 0x63, 0x29, 0xe3, 0x98, 0x5f, 0x50, 0x7a, 0xec, 0x89, - 0xd0, 0xa9, 0x16, 0x53, 0x84, 0x9b, 0x88, 0xa1, 0x36, 0x1e, 0xa0, 0x67, 0xd4, 0x1a, 0x12, 0x2b, - 0x3f, 0xd9, 0x82, 0x2e, 0xa6, 0x11, 0xa5, 0x4b, 0xba, 0x2e, 0xe4, 0xac, 0x78, 0x77, 0x53, 0xfb, - 0x92, 0xb5, 0x1e, 0x6c, 0x59, 0xe3, 0xa4, 0x4e, 0xbb, 0xb0, 0x4f, 0x05, 0xd3, 0x4c, 0xbc, 0xb2, - 0x8a, 0xf5, 0x4a, 0x5d, 0xdc, 0xd4, 0x1a, 0xb4, 0x43, 0x6d, 0x3d, 0xc9, 0x72, 0xc5, 0x4e, 0x94, - 0xf6, 0x9c, 0x6b, 0x20, 0xd5, 0xc4, 0xb3, 0x2d, 0x95, 0x6a, 0xda, 0x9b, 0x2e, 0x49, 0x35, 0x89, - 0xbd, 0x42, 0x8f, 0xed, 0x8e, 0x4f, 0xd4, 0xa4, 0x76, 0x52, 0x87, 0xd2, 0xe7, 0x4f, 0xdc, 0x68, - 0xea, 0xe0, 0x8d, 0x65, 0xb4, 0x4e, 0x37, 0xa0, 0x5e, 0x9c, 0xa5, 0x64, 0x9a, 0xc9, 0xd0, 0xfd, - 0xb1, 0x26, 0xbd, 0x61, 0xf5, 0x3e, 0xa5, 0xb5, 0x9d, 0xde, 0x29, 0xa9, 0x81, 0x9f, 0x70, 0x74, - 0x69, 0xbb, 0x83, 0x49, 0x81, 0x4c, 0xe1, 0x1d, 0x34, 0x33, 0x71, 0xff, 0x5c, 0xf4, 0x03, 0x18, - 0x17, 0xc8, 0x83, 0x27, 0x24, 0x8e, 0x4d, 0x27, 0xe4, 0x33, 0x98, 0x50, 0xdc, 0x83, 0x51, 0x5a, - 0x4b, 0x19, 0x22, 0xe5, 0x84, 0xe2, 0xbc, 0x7c, 0x7a, 0xfc, 0x15, 0x98, 0xd2, 0x9c, 0x9f, 0xa5, - 0x20, 0x64, 0x72, 0x89, 0xce, 0xa2, 0xa2, 0x39, 0x39, 0x4b, 0x2a, 0x26, 0xd7, 0xe7, 0x6c, 0xa1, - 0x4c, 0x79, 0xc8, 0xa9, 0x08, 0x65, 0xc9, 0x17, 0xa5, 0x8a, 0x50, 0x66, 0x7a, 0xfb, 0xf9, 0x7d, - 0x98, 0xe0, 0xdb, 0x23, 0x73, 0x65, 0xd3, 0xb5, 0xe5, 0x39, 0xc5, 0x67, 0xb0, 0xdf, 0x76, 0xc3, - 0x9a, 0xd7, 0x7d, 0xee, 0xee, 0x0f, 0x5c, 0xe4, 0x24, 0x4a, 0x63, 0x19, 0x35, 0x68, 0x58, 0x6c, - 0x11, 0xac, 0x1c, 0x87, 0xaf, 0x3c, 0xff, 0xc0, 0xed, 0xee, 0x0f, 0x20, 0x79, 0x55, 0x27, 0x19, - 0xc7, 0x63, 0x74, 0xeb, 0xe9, 0x74, 0x07, 0xe2, 0x67, 0x68, 0xcb, 0x8b, 0xf4, 0xde, 0xfe, 0xb4, - 0x3d, 0x4e, 0xbf, 0x39, 0xb8, 0x1c, 0x79, 0xdb, 0xd9, 0xb8, 0xe5, 0xf9, 0xed, 0xc1, 0xc4, 0xca, - 0xba, 0x6f, 0x5b, 0x0c, 0xad, 0xb1, 0x4c, 0xa8, 0xd6, 0x53, 0xa9, 0x0e, 0xc2, 0xce, 0xf8, 0x5a, - 0x2c, 0xd0, 0xb1, 0x9f, 0xb2, 0xb7, 0xe9, 0x27, 0x83, 0x70, 0x60, 0xc2, 0xe9, 0xb7, 0x7d, 0xfc, - 0x1c, 0xfb, 0xd4, 0x65, 0x72, 0x90, 0xb3, 0xa0, 0x0e, 0xde, 0x58, 0x26, 0x54, 0xea, 0x09, 0x2a, - 0x69, 0xd0, 0x59, 0x82, 0x12, 0x1d, 0xda, 0x09, 0x7b, 0x93, 0x46, 0xe6, 0x43, 0x6a, 0xb3, 0xdc, - 0x5d, 0x1f, 0x30, 0x23, 0xc2, 0x89, 0x57, 0x00, 0x36, 0xee, 0x13, 0xcc, 0xba, 0x82, 0x99, 0x84, - 0x48, 0x6d, 0xf3, 0x07, 0xc2, 0x38, 0x39, 0xb0, 0xd9, 0x74, 0x6f, 0x84, 0x71, 0x99, 0xb2, 0x03, - 0x29, 0x6a, 0xbd, 0x96, 0x90, 0xa2, 0x34, 0xa5, 0xba, 0x0c, 0x06, 0xa8, 0xc2, 0xa4, 0x68, 0x35, - 0x75, 0x85, 0x72, 0x2f, 0x6a, 0xcc, 0x69, 0x11, 0x27, 0xc1, 0xcc, 0x12, 0x1b, 0x5e, 0xeb, 0x40, - 0x35, 0x4b, 0x28, 0xb9, 0x10, 0x4a, 0x7a, 0xa6, 0x02, 0xfe, 0x41, 0xa2, 0xe9, 0x0a, 0x54, 0x07, - 0x0d, 0x35, 0x1b, 0x82, 0x6a, 0x96, 0xd0, 0xf3, 0x36, 0x48, 0xb3, 0x04, 0x6d, 0x50, 0xa7, 0x3c, - 0xd8, 0x2c, 0x41, 0x91, 0x74, 0xb3, 0x84, 0xda, 0xd1, 0x74, 0x76, 0x81, 0x92, 0x89, 0x1b, 0xa4, - 0xc0, 0x9b, 0x9a, 0xd3, 0x21, 0xc3, 0xf7, 0xe2, 0xa2, 0x21, 0xd7, 0x8c, 0x54, 0xf7, 0xd3, 0xf3, - 0xd0, 0x94, 0x74, 0x47, 0x82, 0x7b, 0x39, 0xb4, 0x49, 0x73, 0x95, 0x73, 0x06, 0x66, 0xe3, 0x20, - 0xf4, 0x5d, 0xfa, 0x4e, 0x29, 0xfd, 0x6b, 0x2d, 0xe4, 0x5b, 0x03, 0x4e, 0xe3, 0x5d, 0x42, 0xaf, - 0x6e, 0xa6, 0x97, 0x89, 0x97, 0x61, 0xd1, 0xe1, 0xe6, 0xbf, 0xd3, 0x74, 0x31, 0x7d, 0x8b, 0x8f, - 0xb2, 0x5b, 0xef, 0x74, 0xd4, 0x42, 0x14, 0x9d, 0x90, 0x4b, 0xec, 0x77, 0xe0, 0x3c, 0x43, 0x4a, - 0xfd, 0x46, 0x4e, 0xaa, 0x38, 0xe8, 0xbe, 0x70, 0xd1, 0x22, 0x28, 0x5a, 0x55, 0x6a, 0xbf, 0xee, - 0xc3, 0x38, 0xb3, 0xe5, 0x9f, 0x1c, 0xe5, 0x13, 0xe1, 0xc8, 0x95, 0xd5, 0xb1, 0x74, 0xdf, 0xc6, - 0x29, 0xf5, 0xc2, 0xfb, 0xf4, 0x13, 0xf9, 0x7d, 0x7a, 0x9f, 0x22, 0xcc, 0x96, 0xe9, 0xf8, 0x73, - 0xb1, 0x78, 0x7e, 0x7c, 0x4a, 0x19, 0x83, 0x94, 0x49, 0x9b, 0xd2, 0xba, 0x7f, 0x21, 0x81, 0x8d, - 0x3e, 0x11, 0xcf, 0x07, 0x24, 0x72, 0x12, 0x28, 0x63, 0xce, 0xa6, 0xd9, 0x34, 0xbf, 0x09, 0xb2, - 0x64, 0xb0, 0x03, 0xbb, 0x7d, 0x92, 0x7b, 0x9f, 0xc1, 0x53, 0x97, 0x46, 0x65, 0x8b, 0x0a, 0x5e, - 0x89, 0x48, 0x93, 0xe9, 0x84, 0x96, 0xd2, 0x83, 0x53, 0xd2, 0xc5, 0x78, 0x4c, 0x15, 0xab, 0x64, - 0x02, 0xae, 0xb4, 0xe1, 0x65, 0x04, 0xbb, 0x8c, 0x34, 0xc9, 0x24, 0xb9, 0x0c, 0xb4, 0x2c, 0xc5, - 0x94, 0x2d, 0xd8, 0xd9, 0x90, 0x5b, 0x17, 0x0e, 0x48, 0x27, 0x1f, 0x6c, 0x86, 0x10, 0x64, 0xb8, - 0x69, 0x1a, 0xb8, 0x16, 0x69, 0xe4, 0x7e, 0x42, 0xe5, 0x3f, 0x73, 0xd6, 0x9d, 0x54, 0x62, 0xb7, - 0x94, 0xcb, 0xca, 0xec, 0x7c, 0x3d, 0x07, 0xf4, 0x5d, 0x86, 0x39, 0x16, 0xe7, 0xcd, 0x01, 0x54, - 0xc4, 0x4c, 0xbc, 0x3d, 0x10, 0x4e, 0xde, 0x5b, 0x2c, 0xb0, 0x2f, 0xac, 0xb9, 0xbd, 0x01, 0xb1, - 0x45, 0x0d, 0x57, 0x49, 0x29, 0x29, 0x6d, 0x04, 0x41, 0xdd, 0xbb, 0x2b, 0x73, 0x0c, 0x69, 0xd3, - 0xff, 0x05, 0x94, 0xa3, 0x1b, 0xd9, 0xd3, 0x2d, 0x42, 0xba, 0x44, 0x8f, 0x92, 0x89, 0x7e, 0x50, - 0x56, 0xcc, 0xc7, 0xd2, 0xb5, 0xb4, 0x19, 0x0e, 0x94, 0xab, 0x7e, 0xee, 0x4b, 0x12, 0x8b, 0x4a, - 0x9b, 0x16, 0xdf, 0x36, 0xc3, 0x76, 0xc4, 0x1f, 0xaa, 0x9c, 0x09, 0xa1, 0xe4, 0x6a, 0x9f, 0x9e, - 0x90, 0xbc, 0x30, 0x8d, 0x11, 0xb2, 0x32, 0x96, 0xf7, 0x34, 0xfe, 0x20, 0xf1, 0xa5, 0x38, 0xed, - 0x82, 0x3a, 0xd1, 0xe3, 0x8c, 0x64, 0x36, 0x22, 0x29, 0xcb, 0xa5, 0x66, 0x46, 0x92, 0xab, 0x9b, - 0x91, 0xca, 0xa8, 0x46, 0x8e, 0x29, 0x6b, 0x42, 0x4b, 0x85, 0x52, 0xb3, 0x37, 0x22, 0xab, 0x83, - 0x21, 0x47, 0x4a, 0x09, 0x44, 0xa5, 0xbd, 0x81, 0xea, 0x50, 0x62, 0x5b, 0xc4, 0xf4, 0xe6, 0x5c, - 0x7a, 0xd4, 0x9b, 0x2a, 0x33, 0xb4, 0x8b, 0x3a, 0x94, 0xd8, 0x76, 0x39, 0x4b, 0xa2, 0x4d, 0x9a, - 0xf6, 0xce, 0x48, 0xf1, 0x86, 0xf2, 0x2c, 0x31, 0xfd, 0x25, 0x7f, 0x29, 0xbb, 0x61, 0xf4, 0x63, - 0x98, 0x33, 0x3e, 0xe5, 0x97, 0x77, 0xda, 0x59, 0x0f, 0xfd, 0x07, 0x11, 0x3f, 0x80, 0x62, 0x5a, - 0xa6, 0x93, 0xc8, 0xc3, 0x3f, 0x3b, 0x99, 0x8c, 0xe4, 0xa9, 0x03, 0x53, 0xa6, 0x6c, 0xc2, 0xac, - 0x29, 0x7b, 0x88, 0x3c, 0x1c, 0x19, 0xa9, 0x45, 0x8c, 0xcf, 0x08, 0xb6, 0x61, 0xce, 0x98, 0xc1, - 0x43, 0xce, 0x4c, 0x56, 0x7e, 0x0f, 0x23, 0xc5, 0x2f, 0x61, 0x3e, 0x25, 0x5d, 0x45, 0x74, 0xf1, - 0x96, 0x99, 0xce, 0x22, 0xc3, 0x01, 0xa0, 0x94, 0x9e, 0x09, 0x41, 0xfa, 0x7d, 0x0c, 0x4c, 0x96, - 0x50, 0x32, 0xa6, 0x87, 0x41, 0x3b, 0x74, 0x13, 0x9a, 0x52, 0x23, 0xa8, 0x9b, 0x30, 0x23, 0x75, - 0x42, 0xca, 0xf3, 0x8f, 0xf9, 0x94, 0x6c, 0x08, 0x19, 0x54, 0x4f, 0xd0, 0xdb, 0x4d, 0xc1, 0xff, - 0xf5, 0xf0, 0xf8, 0x31, 0x5f, 0x42, 0x63, 0xec, 0x7c, 0x63, 0x3f, 0x95, 0xe7, 0xc6, 0x9d, 0x4e, - 0x86, 0x18, 0x84, 0xd4, 0xf7, 0xc6, 0x04, 0xb2, 0x71, 0x9f, 0x28, 0x11, 0x2a, 0x6e, 0x16, 0x47, - 0x4d, 0x20, 0x53, 0xc1, 0xf3, 0x63, 0x98, 0xac, 0xab, 0x8d, 0x1b, 0x1a, 0x49, 0xdd, 0x14, 0xd2, - 0xcb, 0x7e, 0x70, 0xdf, 0x07, 0xde, 0x8a, 0x55, 0x3a, 0x9d, 0x13, 0x8d, 0x22, 0xd5, 0x26, 0xab, - 0x05, 0x23, 0x96, 0x9c, 0xda, 0x14, 0x63, 0x5b, 0xda, 0x64, 0xcd, 0xf1, 0x8b, 0x57, 0xe9, 0x94, - 0x46, 0xa1, 0x1c, 0x33, 0x74, 0x70, 0xb9, 0x89, 0x0c, 0x11, 0x23, 0x9f, 0xa8, 0x0f, 0xc1, 0x59, - 0x00, 0xc8, 0x0c, 0x23, 0x62, 0xfc, 0x01, 0x78, 0x2c, 0x62, 0x64, 0x03, 0x8a, 0x22, 0x14, 0x1b, - 0x0b, 0x86, 0x16, 0x05, 0x7f, 0x8a, 0x5c, 0xa3, 0xd2, 0x63, 0xb5, 0x65, 0xcc, 0x5b, 0x21, 0x1e, - 0xe6, 0x44, 0x5a, 0x8e, 0x52, 0xe2, 0x9f, 0x64, 0xec, 0x06, 0x88, 0x82, 0x99, 0x48, 0xfb, 0x4c, - 0x22, 0xbe, 0x49, 0xe9, 0xb2, 0xa1, 0x46, 0x4a, 0x56, 0x93, 0x6a, 0xe8, 0x13, 0xe9, 0x39, 0x62, - 0x88, 0x87, 0x52, 0x5a, 0x30, 0xd6, 0x71, 0x42, 0x21, 0x2c, 0x64, 0xa4, 0xfd, 0x93, 0xd2, 0xea, - 0xe0, 0xf4, 0x84, 0xa5, 0xdb, 0x27, 0x01, 0xe5, 0xad, 0x62, 0x19, 0x5a, 0x31, 0x09, 0x85, 0xde, - 0x36, 0xb8, 0xfa, 0x9a, 0x32, 0xea, 0x95, 0x06, 0x65, 0x1c, 0x44, 0xcf, 0x60, 0x31, 0xe6, 0x8a, - 0xac, 0xb7, 0x34, 0x88, 0x40, 0xea, 0x0a, 0x3e, 0x83, 0x45, 0xfe, 0x36, 0xfa, 0x8c, 0x09, 0xef, - 0xc1, 0x62, 0x56, 0x2e, 0x41, 0x74, 0xdb, 0xec, 0x6e, 0x6c, 0x9c, 0x9e, 0x74, 0xd1, 0xf5, 0x6a, - 0xd2, 0xed, 0x38, 0xb6, 0xee, 0xa7, 0x65, 0x2b, 0x4f, 0x61, 0x5a, 0xcf, 0x23, 0x88, 0x54, 0xd6, - 0x91, 0xc8, 0x6a, 0x58, 0xba, 0x92, 0x52, 0xcb, 0xf7, 0xc7, 0x67, 0x94, 0xd1, 0xcb, 0x0a, 0x35, - 0x5e, 0x42, 0x3c, 0x4f, 0x5f, 0xc9, 0x90, 0x94, 0x10, 0x7d, 0x1f, 0x66, 0xa2, 0xf7, 0x6d, 0x8c, - 0x84, 0x01, 0x2c, 0xc3, 0x5e, 0x34, 0x13, 0xbd, 0x74, 0x3b, 0x3d, 0xfa, 0x9a, 0xe0, 0xf6, 0x11, - 0xfa, 0x95, 0x84, 0x07, 0xb6, 0x36, 0x86, 0x93, 0x30, 0x7d, 0x65, 0x6e, 0x4f, 0xbb, 0x3a, 0x2d, - 0x7a, 0xdc, 0xcc, 0x31, 0x7d, 0xd4, 0xe3, 0x96, 0x19, 0x77, 0x48, 0x4a, 0x98, 0x29, 0x74, 0x3a, - 0x70, 0x6d, 0x60, 0x14, 0x22, 0x74, 0x57, 0x8b, 0x2c, 0x30, 0x38, 0x5e, 0x51, 0xd6, 0x33, 0x05, - 0x53, 0x30, 0x1f, 0xc9, 0xe3, 0x33, 0xe2, 0x0a, 0xc9, 0x67, 0x0a, 0x99, 0xd1, 0x80, 0xbe, 0xa4, - 0x71, 0x57, 0xf9, 0x47, 0x86, 0xc6, 0xca, 0xc0, 0x5d, 0xa7, 0xdb, 0xc2, 0x03, 0xae, 0x2b, 0xae, - 0xe9, 0x97, 0x74, 0x09, 0x44, 0x2a, 0xe7, 0x2f, 0x71, 0xed, 0x24, 0x8d, 0xf8, 0x60, 0x22, 0x69, - 0xf3, 0x52, 0x5d, 0xf9, 0xc5, 0x5f, 0x2e, 0xe5, 0x7e, 0xf1, 0xcb, 0xa5, 0xdc, 0xbf, 0xfb, 0xe5, - 0x52, 0xee, 0xbf, 0xfe, 0x72, 0x29, 0xf7, 0xa3, 0xe5, 0x93, 0x85, 0x4a, 0x6c, 0x75, 0x5c, 0xdc, - 0x0d, 0xef, 0x32, 0x72, 0xe7, 0xe9, 0x7f, 0x0f, 0xfe, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, - 0x44, 0xbc, 0x94, 0xc8, 0xce, 0x00, 0x00, + 0x70, 0x67, 0xf8, 0x70, 0x30, 0xce, 0x80, 0xfd, 0x62, 0x03, 0x06, 0xfc, 0x72, 0x38, 0xc0, 0xf0, + 0xcb, 0xd9, 0x06, 0xbc, 0x36, 0x70, 0x80, 0x01, 0xfb, 0x60, 0xc0, 0x06, 0x68, 0xdf, 0xc2, 0x4f, + 0x04, 0xfc, 0x60, 0x18, 0xf6, 0xc3, 0x3e, 0x19, 0xf9, 0x5b, 0x99, 0x55, 0x59, 0xd5, 0xa4, 0x86, + 0x3b, 0x7e, 0x91, 0xd8, 0x99, 0x11, 0x91, 0xff, 0x51, 0x11, 0x91, 0x91, 0x11, 0x70, 0x27, 0xc4, + 0x1d, 0xdc, 0xf3, 0xfc, 0xf0, 0x6e, 0x07, 0xef, 0x3b, 0xad, 0xd7, 0x77, 0x5b, 0x1d, 0x17, 0x77, + 0xc3, 0xbb, 0x3d, 0xdf, 0x0b, 0xbd, 0xbb, 0x4e, 0x3f, 0x7c, 0x11, 0x60, 0xff, 0xa5, 0xdb, 0xc2, + 0x77, 0x68, 0x09, 0x1a, 0xa1, 0xff, 0x95, 0x66, 0xf7, 0xbd, 0x7d, 0x8f, 0xc1, 0x90, 0xbf, 0x58, + 0x65, 0x69, 0x61, 0xdf, 0xf3, 0xf6, 0x3b, 0x98, 0x21, 0xef, 0xf5, 0x9f, 0xdf, 0xc5, 0x87, 0xbd, + 0xf0, 0x35, 0xaf, 0x2c, 0xc7, 0x2b, 0x43, 0xf7, 0x10, 0x07, 0xa1, 0x73, 0xd8, 0xe3, 0x00, 0xef, + 0xc8, 0xae, 0x38, 0x61, 0x48, 0x6a, 0x42, 0xd7, 0xeb, 0xde, 0x7d, 0x79, 0x5f, 0xfd, 0xc9, 0x41, + 0x6f, 0x65, 0xf6, 0xba, 0x85, 0xfd, 0x30, 0x48, 0x10, 0xe5, 0x90, 0xe1, 0xeb, 0x1e, 0x0e, 0xee, + 0xe2, 0x97, 0xb8, 0x1b, 0x8a, 0xff, 0x38, 0xe8, 0x35, 0x33, 0x28, 0xfd, 0x97, 0x83, 0x7c, 0xcf, + 0x0c, 0xf2, 0x0a, 0xef, 0x91, 0x99, 0xea, 0xca, 0x3f, 0x06, 0x80, 0xfb, 0x4e, 0xaf, 0x87, 0xfd, + 0xe8, 0x8f, 0x44, 0x5f, 0xfb, 0x81, 0xb3, 0x8f, 0x79, 0x1f, 0x5f, 0xde, 0x57, 0x7f, 0x32, 0x50, + 0xeb, 0x77, 0x96, 0x60, 0x64, 0x95, 0x14, 0xa0, 0x0f, 0x61, 0x78, 0xe7, 0x75, 0x0f, 0x17, 0x73, + 0x57, 0x73, 0xb7, 0xa6, 0x97, 0x0b, 0xac, 0xfe, 0xce, 0x56, 0x0f, 0xfb, 0x74, 0xc2, 0xaa, 0xe8, + 0xf8, 0xa8, 0x3c, 0x4d, 0xda, 0xfd, 0xae, 0x77, 0xe8, 0x86, 0x74, 0x41, 0x6c, 0x8a, 0x81, 0x9e, + 0xc1, 0xb4, 0x8d, 0x03, 0xaf, 0xef, 0xb7, 0xf0, 0x1a, 0x76, 0xda, 0xd8, 0x2f, 0xe6, 0xaf, 0xe6, + 0x6e, 0x4d, 0x2c, 0xcf, 0xdd, 0x61, 0x43, 0xd6, 0x2b, 0xab, 0x97, 0x8e, 0x8f, 0xca, 0xc8, 0xe7, + 0x65, 0x11, 0xb1, 0xb5, 0x73, 0x76, 0x8c, 0x0c, 0xfa, 0x0a, 0xa6, 0x6a, 0xd8, 0x0f, 0x2b, 0xfd, + 0xf0, 0x85, 0xe7, 0xbb, 0xe1, 0xeb, 0xe2, 0x10, 0xa5, 0x7b, 0x89, 0xd3, 0xd5, 0xea, 0x1a, 0xcb, + 0xd5, 0xc5, 0xe3, 0xa3, 0x72, 0x91, 0xac, 0x59, 0xd3, 0x11, 0xa5, 0x1a, 0x79, 0x9d, 0x18, 0xfa, + 0x12, 0x26, 0xeb, 0x64, 0x33, 0xb4, 0x76, 0xbc, 0x03, 0xdc, 0x0d, 0x8a, 0xc3, 0x5a, 0xa7, 0xd5, + 0xaa, 0xc6, 0x72, 0x75, 0xe1, 0xf8, 0xa8, 0x3c, 0x4f, 0xf7, 0x4e, 0xab, 0x19, 0xd2, 0x42, 0x8d, + 0xb4, 0x46, 0x09, 0xfd, 0x0c, 0xa6, 0xb7, 0x7d, 0xef, 0xa5, 0x1b, 0xb8, 0x5e, 0x97, 0x16, 0x15, + 0x47, 0x28, 0xed, 0x79, 0x4e, 0x5b, 0xaf, 0x6c, 0x2c, 0x57, 0xaf, 0x1c, 0x1f, 0x95, 0x2f, 0xf7, + 0x44, 0x29, 0x6b, 0x40, 0x9f, 0x19, 0x1d, 0x05, 0xed, 0xc0, 0x44, 0xad, 0xd3, 0x0f, 0x42, 0xec, + 0x6f, 0x3a, 0x87, 0xb8, 0x78, 0x9e, 0x92, 0x9f, 0x15, 0xf3, 0x12, 0xd5, 0x34, 0x96, 0xab, 0xa5, + 0xe3, 0xa3, 0xf2, 0xa5, 0x16, 0x2b, 0x6a, 0x76, 0x9d, 0x43, 0x7d, 0xca, 0x55, 0x32, 0xe8, 0x03, + 0x18, 0xde, 0x0d, 0xb0, 0x5f, 0x1c, 0xa3, 0xe4, 0xa6, 0x38, 0x39, 0x52, 0xd4, 0x58, 0x66, 0xeb, + 0xdf, 0x0f, 0xb0, 0xaf, 0xe1, 0x53, 0x04, 0x82, 0x68, 0x7b, 0x1d, 0x5c, 0x1c, 0xd7, 0x10, 0x49, + 0x51, 0xe3, 0x7d, 0x86, 0xe8, 0x7b, 0x1d, 0xbd, 0x61, 0x8a, 0x80, 0xd6, 0x61, 0x9c, 0xb4, 0x1c, + 0xf4, 0x9c, 0x16, 0x2e, 0x02, 0xc5, 0x2e, 0x70, 0x6c, 0x59, 0x5e, 0x9d, 0x3f, 0x3e, 0x2a, 0x5f, + 0xec, 0x8a, 0x9f, 0x1a, 0x95, 0x08, 0x1b, 0x7d, 0x0e, 0xe7, 0xeb, 0xd8, 0x7f, 0x89, 0xfd, 0xe2, + 0x04, 0xa5, 0x33, 0x23, 0x16, 0x92, 0x16, 0x36, 0x96, 0xab, 0xb3, 0xc7, 0x47, 0xe5, 0x42, 0x40, + 0x7f, 0x69, 0x34, 0x38, 0x1a, 0xd9, 0x6d, 0x36, 0x7e, 0x89, 0xfd, 0x00, 0xef, 0xf4, 0xbb, 0x5d, + 0xdc, 0x29, 0x4e, 0x6a, 0xbb, 0x4d, 0xab, 0x13, 0xbb, 0xcd, 0x67, 0x85, 0xcd, 0x90, 0x96, 0xea, + 0xbb, 0x4d, 0x43, 0x40, 0x2f, 0xa0, 0xc0, 0xfe, 0xaa, 0x79, 0xdd, 0x2e, 0x6e, 0x91, 0x23, 0x55, + 0x9c, 0xa2, 0x0d, 0x5c, 0xe6, 0x0d, 0xc4, 0xab, 0x1b, 0xcb, 0xd5, 0xf2, 0xf1, 0x51, 0x79, 0x81, + 0xd1, 0x6e, 0xb6, 0x64, 0x85, 0xd6, 0x4c, 0x82, 0x2a, 0x19, 0x47, 0xa5, 0xd5, 0xc2, 0x41, 0x60, + 0xe3, 0x9f, 0xf7, 0x71, 0x10, 0x16, 0xa7, 0xb5, 0x71, 0x68, 0x75, 0x8d, 0x07, 0x6c, 0x1c, 0x0e, + 0x2d, 0x6c, 0xfa, 0xac, 0x54, 0x1f, 0x87, 0x86, 0x80, 0xb6, 0x01, 0x2a, 0xbd, 0x5e, 0x1d, 0x07, + 0x64, 0x33, 0x16, 0x67, 0x28, 0xe9, 0x8b, 0x9c, 0xf4, 0x33, 0xbc, 0xc7, 0x2b, 0x1a, 0xcb, 0xd5, + 0xcb, 0xc7, 0x47, 0xe5, 0x39, 0xa7, 0xd7, 0x6b, 0x06, 0xac, 0x48, 0x23, 0xaa, 0xd0, 0x60, 0xf3, + 0x7e, 0xe8, 0x85, 0x98, 0x6f, 0xc5, 0x62, 0x21, 0x36, 0xef, 0x4a, 0x9d, 0xe8, 0xaf, 0x4f, 0x0b, + 0x9b, 0x7c, 0x5b, 0xc7, 0xe7, 0x5d, 0x41, 0x20, 0x67, 0x71, 0xc5, 0x09, 0x9d, 0x3d, 0x27, 0xc0, + 0x7c, 0x7b, 0x5c, 0xd0, 0xce, 0xa2, 0x5e, 0xd9, 0x78, 0xc0, 0xce, 0x62, 0x9b, 0x97, 0x36, 0x0d, + 0xfb, 0x25, 0x46, 0x8f, 0xcc, 0x48, 0x34, 0xf0, 0x22, 0x1a, 0x30, 0x23, 0xaf, 0xf0, 0x9e, 0x79, + 0x46, 0x22, 0x50, 0xb4, 0x06, 0x63, 0xcf, 0xf0, 0x1e, 0xe3, 0x1c, 0x17, 0x29, 0xbd, 0x0b, 0x11, + 0x3d, 0xc6, 0x33, 0x1e, 0xb0, 0x53, 0x41, 0xa8, 0x25, 0xb9, 0x85, 0xc4, 0x46, 0xbf, 0x9d, 0x83, + 0x79, 0x71, 0xc2, 0x71, 0xf8, 0xca, 0xf3, 0x0f, 0xdc, 0xee, 0x7e, 0xcd, 0xeb, 0x3e, 0x77, 0xf7, + 0x8b, 0xb3, 0x94, 0xf2, 0xd5, 0x18, 0xd3, 0x88, 0x41, 0x35, 0x96, 0xab, 0x6f, 0x1f, 0x1f, 0x95, + 0xaf, 0x4b, 0x06, 0x22, 0xeb, 0xc9, 0x86, 0x7c, 0xee, 0xee, 0x6b, 0x0d, 0xa7, 0xb5, 0x85, 0x7e, + 0x33, 0x07, 0x97, 0xf8, 0xe8, 0x6c, 0xdc, 0xf2, 0xfc, 0x76, 0xd4, 0x8d, 0x39, 0xda, 0x8d, 0xb2, + 0x3c, 0xad, 0x26, 0xa0, 0xc6, 0x72, 0xf5, 0xe6, 0xf1, 0x51, 0xd9, 0xe2, 0x13, 0xd7, 0xf4, 0x45, + 0xb5, 0xa9, 0x13, 0x29, 0x0d, 0x91, 0x9d, 0x40, 0x98, 0xff, 0xb6, 0x8f, 0x9f, 0x63, 0x1f, 0x77, + 0x5b, 0xb8, 0x78, 0x49, 0xdb, 0x09, 0x7a, 0xa5, 0xe0, 0xca, 0xe4, 0x53, 0xd2, 0xec, 0xc9, 0x62, + 0x7d, 0x27, 0xe8, 0x28, 0xe8, 0xe7, 0x80, 0xf8, 0x04, 0x54, 0xfa, 0x6d, 0x37, 0xe4, 0x03, 0x9c, + 0xa7, 0xad, 0x2c, 0xe8, 0xf3, 0xac, 0x00, 0x34, 0x96, 0xab, 0xd6, 0xf1, 0x51, 0x79, 0x49, 0x4c, + 0xb1, 0x43, 0xaa, 0x4c, 0x03, 0x33, 0x10, 0x27, 0x9c, 0x77, 0xc3, 0x6b, 0x1d, 0x14, 0x8b, 0x1a, + 0xe7, 0x25, 0x45, 0x82, 0x65, 0x77, 0xbc, 0xd6, 0x81, 0xce, 0x79, 0x49, 0x2d, 0x0a, 0xe1, 0x22, + 0x5f, 0x25, 0x1b, 0x07, 0xa1, 0xef, 0x52, 0xde, 0x11, 0x14, 0x2f, 0x53, 0x3a, 0x8b, 0x82, 0x07, + 0x27, 0x21, 0x1a, 0xef, 0xb2, 0xde, 0xf2, 0x8d, 0xd0, 0xf4, 0x95, 0x3a, 0xad, 0x19, 0x13, 0x79, + 0xf4, 0xff, 0xc0, 0xdc, 0x33, 0xb7, 0xdb, 0xf6, 0x5e, 0x05, 0x2b, 0x38, 0x38, 0x08, 0xbd, 0x5e, + 0x9d, 0x09, 0x85, 0xc5, 0x12, 0x6d, 0x77, 0x49, 0x6c, 0x73, 0x13, 0x4c, 0xe3, 0x41, 0xf5, 0xc6, + 0xf1, 0x51, 0xf9, 0xda, 0x2b, 0x56, 0xd9, 0x6c, 0xb3, 0xda, 0x26, 0x97, 0x2b, 0xb5, 0xc6, 0xcd, + 0xad, 0x90, 0x2d, 0xa0, 0x57, 0x14, 0x17, 0xb4, 0x2d, 0xa0, 0x57, 0x0a, 0x66, 0x10, 0x6b, 0x50, + 0xdf, 0x02, 0x3a, 0x0a, 0x7a, 0x04, 0x63, 0x82, 0x3d, 0x14, 0x17, 0xb5, 0xa3, 0x2b, 0x8a, 0x1b, + 0x0f, 0x98, 0x04, 0x24, 0x58, 0x8c, 0x7e, 0x72, 0x05, 0x14, 0xda, 0x80, 0x71, 0xca, 0x23, 0x29, + 0xcb, 0xba, 0x42, 0x29, 0x21, 0xb1, 0x51, 0x45, 0x79, 0xe3, 0x41, 0xb5, 0x78, 0x7c, 0x54, 0x9e, + 0x65, 0x5c, 0x36, 0xc1, 0xa8, 0x22, 0x02, 0xe8, 0x01, 0x0c, 0x55, 0x7a, 0xbd, 0xe2, 0x12, 0xa5, + 0x33, 0x19, 0xd1, 0x69, 0x3c, 0xa8, 0x5e, 0x38, 0x3e, 0x2a, 0x4f, 0x39, 0x3d, 0x7d, 0x58, 0x04, + 0x1a, 0xed, 0x41, 0xa1, 0xde, 0xf5, 0x5e, 0x3d, 0xef, 0x38, 0x07, 0x58, 0xb0, 0xb7, 0x72, 0x3a, + 0x7b, 0xa3, 0x1f, 0xab, 0x40, 0x20, 0x18, 0x99, 0x5c, 0x82, 0x1e, 0xf9, 0x2c, 0x3e, 0xe9, 0xef, + 0x61, 0xbf, 0x8b, 0x43, 0x1c, 0xf0, 0xd1, 0x5e, 0xd5, 0x3e, 0x8b, 0xf1, 0xea, 0xc6, 0x03, 0xd6, + 0xd2, 0x81, 0x2c, 0x37, 0x8d, 0x3d, 0x41, 0x15, 0x75, 0xe0, 0x42, 0x54, 0x26, 0x3e, 0x35, 0xd7, + 0x68, 0x53, 0xa5, 0x44, 0x53, 0xd1, 0xe7, 0xe6, 0xea, 0xf1, 0x51, 0x79, 0x51, 0x69, 0xcb, 0xf4, + 0xc9, 0x49, 0x12, 0x46, 0x4f, 0x60, 0x7c, 0xbd, 0x1b, 0x84, 0x4e, 0xa7, 0x83, 0xfd, 0xa2, 0xa5, + 0x2d, 0x9f, 0x2c, 0x6f, 0xdc, 0x67, 0x4c, 0xdc, 0x15, 0x05, 0xfa, 0xea, 0x49, 0x38, 0xd4, 0x86, + 0x19, 0xf5, 0x9b, 0x43, 0xce, 0xcb, 0x75, 0x4a, 0xb2, 0x68, 0xf8, 0x88, 0x91, 0x93, 0x72, 0xbf, + 0xba, 0x74, 0x7c, 0x54, 0x2e, 0x69, 0x5f, 0xb1, 0xf8, 0x11, 0x89, 0x93, 0x44, 0x7f, 0x85, 0xf0, + 0xe8, 0xca, 0xd3, 0x8d, 0xf5, 0xf6, 0x36, 0x2f, 0xa2, 0x42, 0x27, 0x91, 0xe7, 0xdf, 0xd2, 0x79, + 0xb4, 0x11, 0xa8, 0x71, 0x9f, 0x7d, 0x29, 0x02, 0xe7, 0xb0, 0xd3, 0x74, 0xdb, 0xf2, 0x5c, 0x36, + 0x7b, 0x1c, 0x20, 0xc6, 0xa4, 0x8d, 0x44, 0xd0, 0x4f, 0x60, 0x5a, 0xd6, 0xb0, 0x1d, 0x77, 0x23, + 0x7d, 0xc7, 0xd1, 0x41, 0x2a, 0xed, 0x25, 0x37, 0x5c, 0x8c, 0x18, 0x39, 0x55, 0x44, 0x60, 0x7d, + 0xe4, 0x7b, 0xfd, 0x5e, 0xf1, 0xa6, 0xb6, 0x2c, 0xb2, 0xbc, 0x71, 0x9f, 0x9d, 0x2a, 0x22, 0xeb, + 0x36, 0xf7, 0x49, 0x89, 0xbe, 0x2e, 0x12, 0x90, 0x7c, 0xa7, 0x77, 0xd7, 0x39, 0x97, 0x7f, 0x5b, + 0x3b, 0xec, 0xa2, 0x58, 0x2c, 0x71, 0xdf, 0x35, 0x31, 0x74, 0x89, 0x8d, 0x1c, 0x98, 0xde, 0x3a, + 0x08, 0x9d, 0xf5, 0x43, 0xa2, 0xb5, 0xd9, 0xfd, 0x0e, 0x2e, 0xde, 0xd2, 0x18, 0x93, 0x5e, 0x29, + 0xd6, 0xd7, 0x3b, 0x08, 0x9d, 0xa6, 0x4b, 0x8b, 0x9b, 0x7e, 0x3f, 0x26, 0x60, 0xc7, 0x08, 0x12, + 0xde, 0x47, 0x4a, 0x2a, 0x41, 0xe0, 0xee, 0x77, 0x0f, 0x71, 0x37, 0x2c, 0xbe, 0x93, 0x68, 0x22, + 0xaa, 0x6c, 0xdc, 0x67, 0xbc, 0x8f, 0x36, 0xe1, 0xc8, 0xe2, 0x64, 0x0b, 0x11, 0x0a, 0xaa, 0xc3, + 0xc4, 0x7a, 0x37, 0xc4, 0xfb, 0x4c, 0x61, 0x2c, 0xde, 0xd6, 0x94, 0x12, 0xa5, 0xa6, 0x71, 0x9f, + 0x89, 0x42, 0x6e, 0x54, 0xa4, 0xeb, 0x24, 0x0a, 0x2c, 0xd1, 0x74, 0x9e, 0x39, 0x61, 0xeb, 0x05, + 0x51, 0xb0, 0xfa, 0x41, 0xf1, 0x3b, 0x1a, 0x51, 0xa5, 0xa6, 0x71, 0x9f, 0x69, 0x3a, 0xaf, 0x48, + 0x51, 0x33, 0xa0, 0x65, 0x3a, 0x55, 0x05, 0xb8, 0x0a, 0x30, 0x26, 0x74, 0xcd, 0xc7, 0xc3, 0x63, + 0xa3, 0x85, 0x31, 0xeb, 0x8f, 0x73, 0x30, 0x42, 0x21, 0xd0, 0xe7, 0x30, 0xf2, 0xc4, 0xed, 0xb6, + 0x83, 0x62, 0xee, 0xea, 0x90, 0xa2, 0x8f, 0xd0, 0x4a, 0x52, 0x51, 0x9d, 0xff, 0xc5, 0x51, 0xf9, + 0xdc, 0xf1, 0x51, 0x79, 0xe6, 0x80, 0x80, 0x29, 0xea, 0x30, 0xc3, 0x43, 0xbb, 0x70, 0xb1, 0xd2, + 0xe9, 0x78, 0xaf, 0xb6, 0x1d, 0x3f, 0x74, 0x9d, 0x4e, 0xbd, 0x4f, 0x05, 0x68, 0xaa, 0x14, 0x8f, + 0x55, 0xaf, 0x1f, 0x1f, 0x95, 0xcb, 0x0e, 0xa9, 0x6e, 0xf6, 0x58, 0x7d, 0x33, 0x60, 0x00, 0x0a, + 0x21, 0x13, 0xbe, 0xf5, 0x27, 0xe7, 0xa1, 0xb0, 0xe6, 0x05, 0x21, 0xd1, 0x62, 0xa5, 0x38, 0x7e, + 0x1d, 0xce, 0x93, 0xb2, 0xf5, 0x15, 0xaa, 0xb7, 0x8f, 0x57, 0x27, 0x8e, 0x8f, 0xca, 0xa3, 0x2f, + 0xbc, 0x20, 0x6c, 0xba, 0x6d, 0x9b, 0x57, 0xa1, 0x77, 0x60, 0x6c, 0xd3, 0x6b, 0x63, 0xaa, 0x2a, + 0xe6, 0x29, 0xd8, 0xd4, 0xf1, 0x51, 0x79, 0xbc, 0xeb, 0xb5, 0x31, 0xd5, 0x08, 0x6d, 0x59, 0x8d, + 0x1a, 0x5c, 0x93, 0x1b, 0xa2, 0x60, 0xd5, 0xe3, 0xa3, 0xf2, 0x30, 0x51, 0xdd, 0x7e, 0x75, 0x54, + 0x7e, 0x7f, 0xdf, 0x0d, 0x5f, 0xf4, 0xf7, 0xee, 0xb4, 0xbc, 0xc3, 0xbb, 0xfb, 0xbe, 0xf3, 0xd2, + 0x65, 0x86, 0x14, 0xa7, 0x73, 0x37, 0x32, 0xb7, 0xf4, 0x5c, 0x6e, 0xe5, 0xa8, 0xbf, 0x0e, 0x42, + 0x7c, 0x48, 0x28, 0x71, 0x45, 0xef, 0x19, 0xcc, 0x56, 0xda, 0x6d, 0x97, 0x61, 0x6c, 0xfb, 0x6e, + 0xb7, 0xe5, 0xf6, 0x9c, 0x0e, 0x51, 0xba, 0x87, 0x6e, 0x8d, 0xf3, 0x49, 0x91, 0xf5, 0xcd, 0x9e, + 0x04, 0x50, 0x26, 0xc5, 0x48, 0x00, 0x3d, 0x80, 0xb1, 0x95, 0xcd, 0x3a, 0x55, 0x03, 0x8b, 0x23, + 0x94, 0x18, 0x3d, 0x70, 0xed, 0x6e, 0x40, 0x87, 0xa6, 0x12, 0x90, 0x80, 0xe8, 0x7d, 0x98, 0xdc, + 0xee, 0xef, 0x75, 0xdc, 0xd6, 0xce, 0x46, 0xfd, 0x09, 0x7e, 0x4d, 0xf5, 0xe7, 0x49, 0x26, 0x2e, + 0xf5, 0x68, 0x79, 0x33, 0xec, 0x04, 0xcd, 0x03, 0xfc, 0xda, 0xd6, 0xe0, 0x22, 0xbc, 0x7a, 0x7d, + 0x8d, 0xe0, 0x8d, 0x26, 0xf0, 0x82, 0xe0, 0x85, 0x8a, 0xc7, 0xe0, 0xd0, 0x5d, 0x00, 0xa6, 0x95, + 0x54, 0xda, 0x6d, 0xa6, 0x5e, 0x8f, 0x57, 0x67, 0x8e, 0x8f, 0xca, 0x13, 0x5c, 0x8f, 0x71, 0xda, + 0x6d, 0xdf, 0x56, 0x40, 0x50, 0x0d, 0xc6, 0x6c, 0x8f, 0x4d, 0x30, 0x57, 0xaa, 0x67, 0xa4, 0x52, + 0xcd, 0x8a, 0xb9, 0x19, 0x85, 0xff, 0x52, 0x47, 0x29, 0x20, 0x50, 0x19, 0x46, 0x37, 0xbd, 0x9a, + 0xd3, 0x7a, 0xc1, 0x54, 0xeb, 0xb1, 0xea, 0xc8, 0xf1, 0x51, 0x39, 0xf7, 0x3d, 0x5b, 0x94, 0xa2, + 0x97, 0x30, 0x11, 0x2d, 0x54, 0x50, 0x9c, 0xa0, 0xd3, 0xb7, 0x43, 0x4e, 0x51, 0x40, 0x8b, 0x9b, + 0x64, 0xe9, 0x95, 0x19, 0xfc, 0x06, 0xbb, 0x40, 0x6d, 0x08, 0x75, 0xe0, 0xca, 0x2e, 0xf9, 0xb8, + 0xed, 0x75, 0x70, 0x54, 0x5c, 0x09, 0x02, 0xec, 0x13, 0x5a, 0xeb, 0x2b, 0x54, 0xf3, 0x1e, 0xe7, + 0x22, 0x7f, 0xd4, 0x13, 0xc2, 0x87, 0x18, 0x48, 0xd3, 0x6d, 0x2b, 0x23, 0xce, 0x26, 0x66, 0xfd, + 0xd3, 0x1c, 0xa0, 0xad, 0x1e, 0xee, 0xd6, 0xeb, 0x6b, 0xe4, 0xe8, 0x88, 0x93, 0x73, 0x0b, 0xc6, + 0x08, 0x27, 0x27, 0x9b, 0x84, 0x9f, 0x9d, 0xc9, 0xe3, 0xa3, 0xf2, 0x58, 0x9f, 0x97, 0xd9, 0xb2, + 0x16, 0x7d, 0x17, 0xc6, 0xd9, 0x6a, 0x92, 0x25, 0xcf, 0xd3, 0x25, 0x9f, 0x3e, 0x3e, 0x2a, 0x03, + 0x5f, 0x72, 0xb2, 0xdc, 0x11, 0x00, 0xba, 0x01, 0x43, 0x3b, 0x3b, 0x1b, 0xf4, 0x00, 0x0d, 0x55, + 0x2f, 0x1e, 0x1f, 0x95, 0x87, 0xc2, 0xb0, 0xf3, 0xab, 0xa3, 0xf2, 0xd8, 0x4a, 0x9f, 0xb1, 0x34, + 0x9b, 0xd4, 0xa3, 0x1b, 0x30, 0x2a, 0x84, 0x90, 0xe1, 0xe8, 0xe4, 0x72, 0xe9, 0xc2, 0x16, 0x75, + 0xd6, 0x77, 0x60, 0x42, 0xe9, 0x3b, 0x5a, 0x84, 0x61, 0xf2, 0x3f, 0xed, 0xf0, 0x64, 0x75, 0x8c, + 0x1c, 0xcf, 0x16, 0x19, 0x13, 0x2d, 0xb5, 0xfe, 0x68, 0x0a, 0x0a, 0xa4, 0xd7, 0x1a, 0x87, 0xd0, + 0x7a, 0x9f, 0x1b, 0xd4, 0x7b, 0x75, 0x56, 0xf2, 0x99, 0xb3, 0x52, 0x87, 0xd1, 0xd5, 0xaf, 0x7b, + 0xae, 0x8f, 0x03, 0x6e, 0x96, 0x2b, 0xdd, 0x61, 0x86, 0xd9, 0x3b, 0xc2, 0x30, 0x7b, 0x67, 0x47, + 0x18, 0x66, 0xab, 0x57, 0x38, 0xcb, 0xbc, 0x80, 0x19, 0x4a, 0xb4, 0x7a, 0xbf, 0xf7, 0x9f, 0xcb, + 0x39, 0x5b, 0x50, 0x42, 0xdf, 0x85, 0xf3, 0x0f, 0x3d, 0xff, 0xd0, 0x09, 0xf9, 0xa4, 0x50, 0x9b, + 0xcd, 0x73, 0x5a, 0xa2, 0x2c, 0x38, 0x87, 0x41, 0x0f, 0x61, 0xda, 0xf6, 0xfa, 0x21, 0xde, 0xf1, + 0xc4, 0x54, 0x8e, 0x50, 0x2c, 0xfa, 0x71, 0xf4, 0x49, 0x4d, 0x33, 0xf4, 0x92, 0x12, 0x9b, 0x1d, + 0xc3, 0x42, 0xab, 0x30, 0xad, 0x19, 0x39, 0x82, 0xe2, 0x79, 0x7a, 0x14, 0x98, 0x02, 0xa8, 0x99, + 0x46, 0x54, 0x7e, 0x12, 0x43, 0x42, 0x9b, 0x26, 0x09, 0x73, 0x94, 0xf6, 0x68, 0xa0, 0x14, 0x69, + 0x92, 0x21, 0x31, 0xcc, 0xf0, 0x8e, 0x4a, 0x95, 0x62, 0x8c, 0x9b, 0x46, 0x98, 0x71, 0x36, 0x56, + 0x5b, 0xbd, 0xce, 0x67, 0x79, 0x41, 0x8e, 0x3d, 0xa9, 0x64, 0xd8, 0x71, 0x9a, 0x84, 0x83, 0xca, + 0xaf, 0xc3, 0x38, 0xed, 0x2d, 0x33, 0xb8, 0x89, 0xaf, 0x83, 0xca, 0x5b, 0xe4, 0x77, 0x62, 0x03, + 0x46, 0x76, 0x03, 0x67, 0x9f, 0x71, 0x96, 0xe9, 0xe5, 0x6b, 0xbc, 0x47, 0xf1, 0xdd, 0x47, 0x6d, + 0xb4, 0x14, 0x90, 0x1e, 0x85, 0x19, 0x6a, 0x80, 0x56, 0xbf, 0x98, 0xb4, 0x0e, 0x7d, 0x01, 0xc0, + 0x7b, 0x45, 0xb4, 0x94, 0x09, 0x2e, 0x4a, 0x69, 0x83, 0xac, 0xf4, 0x7a, 0xd5, 0x25, 0x3e, 0xbe, + 0x4b, 0x72, 0x7c, 0x9a, 0xde, 0x62, 0x2b, 0x44, 0xd0, 0xe7, 0x30, 0x49, 0x19, 0x8f, 0x58, 0xd1, + 0x49, 0xba, 0xa2, 0xd4, 0x8c, 0x4b, 0x79, 0x89, 0x61, 0x3d, 0x35, 0x04, 0xf4, 0xff, 0xc2, 0x1c, + 0x27, 0x17, 0x53, 0x19, 0xa7, 0xb8, 0x8a, 0xac, 0x75, 0x4f, 0x87, 0xa9, 0xde, 0xe6, 0x3d, 0xb5, + 0x64, 0x4f, 0x53, 0x95, 0x48, 0xdb, 0xdc, 0x0c, 0x5a, 0x87, 0x99, 0xdd, 0x00, 0x6b, 0x63, 0x98, + 0xa6, 0x5c, 0x9c, 0x6a, 0x3f, 0xfd, 0x00, 0x37, 0xd3, 0xc6, 0x11, 0xc7, 0x43, 0x36, 0xa0, 0x15, + 0xdf, 0xeb, 0xc5, 0xf6, 0xf8, 0x0c, 0x9d, 0x11, 0xaa, 0xcc, 0xb7, 0x7d, 0xaf, 0xd7, 0x4c, 0xdf, + 0xe8, 0x06, 0x6c, 0xf4, 0x53, 0xb8, 0x14, 0xd9, 0x1c, 0x57, 0x5c, 0x67, 0xbf, 0xeb, 0x05, 0xa1, + 0xdb, 0x5a, 0x5f, 0xa1, 0xe6, 0x3b, 0xce, 0xbc, 0x23, 0x9b, 0x65, 0xb3, 0x2d, 0x41, 0x74, 0xe6, + 0x9d, 0x42, 0x05, 0xfd, 0x18, 0xa6, 0x78, 0x5b, 0xdc, 0xc6, 0x7d, 0x21, 0x7b, 0xa3, 0x49, 0x60, + 0x6e, 0x6f, 0x16, 0x3f, 0x99, 0x80, 0xa3, 0xd3, 0x42, 0x5f, 0xc1, 0xc4, 0xd3, 0x87, 0x15, 0x1b, + 0x07, 0x3d, 0xaf, 0x1b, 0x60, 0x6e, 0xb3, 0x5b, 0xe2, 0xa4, 0x9f, 0x3e, 0xac, 0x54, 0xfa, 0xe1, + 0x0b, 0xdc, 0x0d, 0xdd, 0x96, 0x13, 0x62, 0x01, 0xc5, 0xc4, 0xcb, 0xc3, 0xe7, 0x4e, 0xd3, 0xe7, + 0x25, 0xca, 0x28, 0x54, 0x72, 0xa8, 0x04, 0x63, 0xf5, 0xfa, 0xda, 0x86, 0xb7, 0xef, 0x32, 0xf3, + 0xdd, 0xb8, 0x2d, 0x7f, 0xa3, 0x3d, 0x98, 0x53, 0x6e, 0xa1, 0xa8, 0x9c, 0x8a, 0xa9, 0x30, 0xce, + 0xac, 0x71, 0xdf, 0x93, 0xd7, 0x68, 0x77, 0xd4, 0xcb, 0xaa, 0x97, 0xf7, 0xef, 0x54, 0xa2, 0x9f, + 0x75, 0x81, 0x64, 0xcf, 0x3a, 0x86, 0x52, 0xeb, 0x4b, 0x18, 0x97, 0xc7, 0x0e, 0x8d, 0xc2, 0x50, + 0xa5, 0xd3, 0x29, 0x9c, 0x23, 0x7f, 0xd4, 0xeb, 0x6b, 0x85, 0x1c, 0x9a, 0x06, 0x88, 0x78, 0x4d, + 0x21, 0x8f, 0x26, 0x23, 0x93, 0x45, 0x61, 0x88, 0xc2, 0xf7, 0x7a, 0x85, 0x61, 0x84, 0xe2, 0xb6, + 0x92, 0xc2, 0x88, 0xf5, 0x09, 0x8c, 0xcb, 0x89, 0x44, 0x33, 0x30, 0xb1, 0xbb, 0x59, 0xdf, 0x5e, + 0xad, 0xad, 0x3f, 0x5c, 0x5f, 0x5d, 0x29, 0x9c, 0x43, 0x57, 0xe0, 0xf2, 0x4e, 0x7d, 0xad, 0xb9, + 0x52, 0x6d, 0x6e, 0x6c, 0xd5, 0x2a, 0x1b, 0xcd, 0x6d, 0x7b, 0xeb, 0xcb, 0x1f, 0x36, 0x77, 0x76, + 0x37, 0x37, 0x57, 0x37, 0x0a, 0x39, 0xeb, 0x3f, 0xe4, 0x12, 0xfc, 0x0c, 0x2d, 0xc3, 0x04, 0xd7, + 0x00, 0x37, 0xa3, 0xef, 0x70, 0xe1, 0xf8, 0xa8, 0x3c, 0x29, 0xb4, 0x47, 0xba, 0x7c, 0x2a, 0x10, + 0xf9, 0x44, 0x6d, 0x93, 0x85, 0x6a, 0x79, 0x1d, 0xf5, 0x13, 0xd5, 0xe3, 0x65, 0xb6, 0xac, 0x45, + 0xcb, 0xca, 0xc7, 0x8c, 0x09, 0xb4, 0x54, 0x68, 0x12, 0x1f, 0x33, 0x95, 0xb1, 0xc9, 0xcf, 0xda, + 0xb2, 0x62, 0xc0, 0x19, 0x8e, 0x70, 0x0c, 0x8c, 0x54, 0xc2, 0x59, 0xfd, 0x14, 0x56, 0x81, 0x3e, + 0x49, 0xd8, 0x9b, 0xd8, 0x08, 0x29, 0x2f, 0x8c, 0x71, 0x84, 0x84, 0x29, 0xa9, 0x0c, 0x23, 0x6c, + 0x0f, 0xb1, 0x41, 0x8e, 0x1f, 0x1f, 0x95, 0x47, 0x3a, 0xa4, 0xc0, 0x66, 0xe5, 0xd6, 0xdf, 0x18, + 0x52, 0xd9, 0x26, 0x91, 0x0d, 0x94, 0x49, 0xa4, 0xb2, 0x01, 0x9d, 0x3c, 0x5a, 0x4a, 0xc4, 0x00, + 0xae, 0x04, 0xaf, 0xaf, 0x70, 0x8a, 0x54, 0x0c, 0x10, 0x26, 0x55, 0xb7, 0x6d, 0x47, 0x00, 0x44, + 0x60, 0x65, 0x32, 0x01, 0x15, 0x58, 0x87, 0x22, 0x81, 0x95, 0x4b, 0x0d, 0x4c, 0x60, 0x8d, 0x40, + 0xc8, 0x42, 0xaa, 0x17, 0x52, 0xc3, 0xd1, 0x42, 0xaa, 0x57, 0x4f, 0xfa, 0x75, 0xd3, 0xc7, 0x00, + 0x95, 0x67, 0x75, 0x2a, 0xae, 0xd9, 0x9b, 0xfc, 0xd3, 0x4d, 0x0f, 0x99, 0xf3, 0x2a, 0xe0, 0x02, + 0x9f, 0xaf, 0x4a, 0xb6, 0x0a, 0x34, 0xaa, 0xc2, 0x54, 0xe5, 0x37, 0xfa, 0x3e, 0x5e, 0x6f, 0x93, + 0x73, 0x1a, 0x32, 0x11, 0x7e, 0x9c, 0x5f, 0x66, 0x90, 0x8a, 0xa6, 0xcb, 0x6b, 0x14, 0x02, 0x3a, + 0x0a, 0xda, 0x82, 0x0b, 0x8f, 0x6a, 0xc2, 0x02, 0x51, 0x69, 0xb5, 0xbc, 0x7e, 0x37, 0xe4, 0xdf, + 0xeb, 0x6b, 0xc7, 0x47, 0xe5, 0x2b, 0xfb, 0xad, 0xc8, 0x88, 0xe1, 0xb0, 0x6a, 0xf5, 0x83, 0x9d, + 0xc0, 0xb5, 0x3a, 0x30, 0xfd, 0x08, 0x87, 0x64, 0x2b, 0x09, 0xe1, 0x2b, 0x7b, 0x4d, 0x3e, 0x85, + 0x89, 0x67, 0x6e, 0xf8, 0xa2, 0x8e, 0x5b, 0x3e, 0x0e, 0x85, 0x82, 0xc8, 0xb4, 0x58, 0x37, 0x7c, + 0xd1, 0x0c, 0x58, 0xb9, 0xca, 0x66, 0x14, 0x70, 0x6b, 0x15, 0x66, 0x78, 0x6b, 0x52, 0xd6, 0x5b, + 0xd6, 0x09, 0xe6, 0x28, 0x41, 0xba, 0x0a, 0x2a, 0x41, 0x9d, 0xcc, 0x9f, 0xe4, 0x61, 0xae, 0xf6, + 0xc2, 0xe9, 0xee, 0xe3, 0x6d, 0x27, 0x08, 0x5e, 0x79, 0x7e, 0x5b, 0xe9, 0x3c, 0xbd, 0x0e, 0x4c, + 0x74, 0x9e, 0xde, 0xf9, 0x2d, 0xc3, 0xc4, 0x56, 0xa7, 0x2d, 0x70, 0xb8, 0x5c, 0x4c, 0xdb, 0xf2, + 0x3a, 0xed, 0x66, 0x4f, 0xd0, 0x52, 0x81, 0x08, 0xce, 0x26, 0x7e, 0x25, 0x71, 0x86, 0x22, 0x9c, + 0x2e, 0x7e, 0xa5, 0xe0, 0x28, 0x40, 0x68, 0x15, 0x2e, 0xd4, 0x71, 0xcb, 0xeb, 0xb6, 0x1f, 0x3a, + 0xad, 0xd0, 0xf3, 0xd9, 0xad, 0xc8, 0x70, 0x24, 0xa7, 0x04, 0xb4, 0xb2, 0xf9, 0x9c, 0xd6, 0xb2, + 0xcb, 0x10, 0x3b, 0x89, 0x81, 0xb6, 0xe8, 0x9d, 0x0a, 0xbd, 0x54, 0xe7, 0xb7, 0xb1, 0x37, 0xee, + 0xc8, 0x5b, 0xf6, 0x9a, 0x8f, 0xe9, 0xa6, 0x70, 0x3a, 0x52, 0x71, 0x90, 0x6c, 0x9f, 0x32, 0x17, + 0x01, 0x69, 0x4b, 0x22, 0xd6, 0x2e, 0x4c, 0x6d, 0x77, 0xfa, 0xfb, 0x6e, 0x97, 0xb0, 0x81, 0x3a, + 0xfe, 0x39, 0x5a, 0x01, 0x88, 0x0a, 0xb8, 0xf1, 0x40, 0x98, 0xad, 0xa2, 0x8a, 0xc6, 0x03, 0x7e, + 0x90, 0x68, 0x09, 0x15, 0xd0, 0x6c, 0x05, 0xcf, 0xfa, 0x6b, 0x43, 0x80, 0xf8, 0x02, 0x50, 0x8e, + 0x5e, 0xc7, 0x21, 0x61, 0xb6, 0x97, 0x20, 0x2f, 0x75, 0xfc, 0xf3, 0xc7, 0x47, 0xe5, 0xbc, 0xdb, + 0xb6, 0xf3, 0xeb, 0x2b, 0xe8, 0x5d, 0x18, 0xa1, 0x60, 0x74, 0xfe, 0xa7, 0x65, 0x7b, 0x2a, 0x05, + 0xc6, 0x39, 0xe8, 0x97, 0xc6, 0x66, 0xc0, 0xe8, 0x3d, 0x18, 0x5f, 0xc1, 0x1d, 0xbc, 0xef, 0x84, + 0x9e, 0x38, 0xdd, 0x4c, 0x6b, 0x16, 0x85, 0xca, 0x9e, 0x8b, 0x20, 0x89, 0x74, 0x6e, 0x63, 0x27, + 0xf0, 0xba, 0xaa, 0x74, 0xee, 0xd3, 0x12, 0x55, 0x3a, 0x67, 0x30, 0xe8, 0x0f, 0x72, 0x30, 0x51, + 0xe9, 0x76, 0xb9, 0x36, 0x1a, 0xf0, 0x59, 0x9f, 0xbb, 0x23, 0x9d, 0x15, 0x36, 0x9c, 0x3d, 0xdc, + 0x69, 0x38, 0x9d, 0x3e, 0x0e, 0xaa, 0x5f, 0x11, 0x81, 0xe9, 0x3f, 0x1e, 0x95, 0x3f, 0x39, 0x85, + 0x7e, 0x19, 0xb9, 0x3d, 0xec, 0xf8, 0x8e, 0x1b, 0x06, 0xf4, 0xc2, 0x31, 0x6a, 0x50, 0x3d, 0x37, + 0x4a, 0x3f, 0xd0, 0x3b, 0x30, 0xc2, 0xf4, 0x5d, 0x26, 0xe4, 0x53, 0x5e, 0x1c, 0x53, 0x74, 0x6d, + 0x06, 0x61, 0x5d, 0x97, 0xdf, 0xbb, 0xf5, 0x95, 0xb4, 0x25, 0xb0, 0x6a, 0xb0, 0xf8, 0x08, 0x87, + 0x36, 0x0e, 0x70, 0x28, 0x36, 0x2d, 0xdd, 0x72, 0x91, 0x89, 0x66, 0x94, 0xfe, 0x96, 0xc8, 0x74, + 0x3d, 0xd8, 0x46, 0x15, 0x35, 0xd6, 0x5f, 0xcd, 0x41, 0xb9, 0xe6, 0x63, 0x26, 0x6f, 0xa4, 0x10, + 0xca, 0x66, 0x26, 0x8b, 0xdc, 0x7f, 0x23, 0x1f, 0xd5, 0x92, 0x59, 0xe2, 0x3e, 0x1a, 0x27, 0xd3, + 0x4a, 0xad, 0xe7, 0x30, 0x67, 0xe3, 0x2e, 0x7e, 0x45, 0xb4, 0x69, 0x4d, 0x8b, 0x2c, 0xc3, 0x08, + 0x3b, 0x79, 0x89, 0x21, 0xb0, 0xf2, 0xd3, 0x29, 0xc9, 0xd6, 0x3f, 0xcc, 0x43, 0x81, 0x0d, 0xb7, + 0xea, 0x85, 0x27, 0x1b, 0x1f, 0x1f, 0x41, 0x7e, 0x80, 0x5e, 0x7d, 0x33, 0x9a, 0xed, 0xa1, 0x48, + 0x38, 0xa0, 0x5d, 0x25, 0xdf, 0x38, 0x51, 0x49, 0x06, 0xc4, 0x76, 0x01, 0xb3, 0x40, 0xd1, 0x01, + 0xd1, 0x5d, 0xc0, 0xd7, 0x1e, 0xfd, 0x4e, 0x0e, 0xce, 0xb3, 0x7d, 0x95, 0xbd, 0x73, 0x9f, 0x9d, + 0xcd, 0xce, 0x2d, 0x84, 0xf4, 0x2f, 0xf5, 0x1c, 0xb1, 0x3a, 0xeb, 0x1f, 0xe7, 0xe1, 0x82, 0x32, + 0x57, 0x5c, 0xc8, 0x7c, 0x87, 0xc9, 0x36, 0xca, 0x84, 0x51, 0x9b, 0x1e, 0x35, 0x5a, 0x47, 0x9a, + 0x3a, 0x9d, 0xb9, 0x77, 0x60, 0x8c, 0x0c, 0x29, 0x6e, 0xfe, 0xa3, 0x5f, 0x58, 0x06, 0x2a, 0xaa, + 0x4f, 0x3c, 0x7b, 0x77, 0x61, 0x8c, 0xfe, 0x49, 0x56, 0x64, 0x38, 0x7d, 0x45, 0x24, 0x10, 0x72, + 0x01, 0x1e, 0x7b, 0x6e, 0xf7, 0x29, 0x0e, 0x5f, 0x78, 0x6d, 0xfe, 0xad, 0x5f, 0x27, 0x7c, 0xf0, + 0xff, 0xf2, 0xdc, 0x6e, 0xf3, 0x90, 0x16, 0x9f, 0xd6, 0xbc, 0x14, 0x11, 0xb4, 0x15, 0xe2, 0xd6, + 0x3d, 0x28, 0x10, 0x96, 0x75, 0xf2, 0xad, 0x65, 0xcd, 0x02, 0x7a, 0x84, 0xc3, 0xaa, 0xa7, 0x7d, + 0x4c, 0xad, 0x29, 0x98, 0xd8, 0x76, 0xbb, 0xfb, 0xe2, 0xe7, 0x3f, 0x19, 0x82, 0x49, 0xf6, 0x9b, + 0xaf, 0x40, 0x4c, 0xe4, 0xc9, 0x9d, 0x44, 0xe4, 0xf9, 0x10, 0xa6, 0xf8, 0x2d, 0x16, 0xf6, 0xe9, + 0xed, 0x06, 0x5b, 0x0f, 0xaa, 0xb2, 0xb0, 0x5b, 0xac, 0xe6, 0x4b, 0x56, 0x63, 0xeb, 0x80, 0x68, + 0x03, 0xa6, 0x59, 0xc1, 0x43, 0xec, 0x84, 0xfd, 0xc8, 0xea, 0x32, 0xc3, 0xb5, 0x16, 0x51, 0xcc, + 0xf8, 0x19, 0xa7, 0xf5, 0x9c, 0x17, 0xda, 0x31, 0x5c, 0xf4, 0x39, 0xcc, 0x6c, 0xfb, 0xde, 0xd7, + 0xaf, 0x15, 0x21, 0x8f, 0xb1, 0xf4, 0xb9, 0xe3, 0xa3, 0xf2, 0x85, 0x1e, 0xa9, 0x6a, 0xaa, 0xa2, + 0x5e, 0x1c, 0x9a, 0xec, 0xa9, 0xf5, 0xa0, 0xea, 0xf9, 0x6e, 0x77, 0x9f, 0xae, 0xe6, 0x18, 0xdb, + 0x53, 0x6e, 0xd0, 0xdc, 0xa3, 0x85, 0xb6, 0xac, 0x8e, 0x19, 0x3f, 0x47, 0x07, 0x1b, 0x3f, 0xef, + 0x01, 0x6c, 0x78, 0x4e, 0xbb, 0xd2, 0xe9, 0xd4, 0x2a, 0x01, 0x35, 0x79, 0x70, 0x21, 0xa6, 0xe3, + 0x39, 0xed, 0xa6, 0xd3, 0xe9, 0x34, 0x5b, 0x4e, 0x60, 0x2b, 0x30, 0x8f, 0x87, 0xc7, 0xce, 0x17, + 0x46, 0xed, 0x99, 0x0d, 0xb7, 0x85, 0xbb, 0x01, 0x7e, 0xe6, 0xf8, 0x5d, 0xb7, 0xbb, 0x1f, 0x58, + 0xff, 0x69, 0x18, 0xc6, 0xe4, 0x90, 0xef, 0xa8, 0x6a, 0x0f, 0x17, 0x8d, 0x28, 0x87, 0x8a, 0xcc, + 0x32, 0xb6, 0x02, 0x81, 0x2e, 0xb3, 0x2b, 0x53, 0x26, 0x94, 0x8d, 0x92, 0xdd, 0xed, 0xf4, 0x7a, + 0xec, 0x62, 0xf4, 0x12, 0xe4, 0x57, 0xaa, 0x74, 0xfe, 0xc7, 0xd8, 0x97, 0xa0, 0xbd, 0x67, 0xe7, + 0x57, 0xaa, 0x64, 0x97, 0x6d, 0xad, 0xaf, 0xd4, 0xe8, 0x54, 0x8e, 0xb1, 0x5d, 0xe6, 0xb9, 0xed, + 0x96, 0x4d, 0x4b, 0x49, 0x6d, 0xbd, 0xf2, 0x74, 0x83, 0x4f, 0x17, 0xad, 0x0d, 0x9c, 0xc3, 0x8e, + 0x4d, 0x4b, 0x89, 0xaa, 0xc0, 0x34, 0xec, 0x9a, 0xd7, 0x0d, 0x7d, 0xaf, 0x13, 0x50, 0x89, 0x76, + 0x8c, 0x2d, 0x27, 0x57, 0xcd, 0x5b, 0xbc, 0xca, 0x8e, 0x81, 0xa2, 0x67, 0x30, 0x5f, 0x69, 0xbf, + 0x74, 0xba, 0x2d, 0xdc, 0x66, 0x35, 0xcf, 0x3c, 0xff, 0xe0, 0x79, 0xc7, 0x7b, 0x15, 0xd0, 0xf9, + 0x1e, 0xe3, 0x96, 0x2c, 0x0e, 0x22, 0x34, 0xfd, 0x57, 0x02, 0xc8, 0x4e, 0xc3, 0x26, 0x5c, 0xb2, + 0xd6, 0xf1, 0xfa, 0x6d, 0xbe, 0x0a, 0x94, 0x4b, 0xb6, 0x48, 0x81, 0xcd, 0xca, 0xc9, 0x2c, 0xad, + 0xd5, 0x9f, 0x52, 0xbb, 0x11, 0x9f, 0xa5, 0x17, 0xc1, 0xa1, 0x4d, 0xca, 0xd0, 0x0d, 0x18, 0x15, + 0x5a, 0x0f, 0x33, 0x3f, 0x53, 0x0b, 0xa7, 0xd0, 0x76, 0x44, 0x1d, 0x39, 0x12, 0x36, 0x6e, 0x79, + 0x2f, 0xb1, 0xff, 0xba, 0xe6, 0xb5, 0xb1, 0xb0, 0x72, 0x70, 0x2d, 0x9e, 0x55, 0x34, 0x5b, 0xa4, + 0xc6, 0xd6, 0x01, 0x49, 0x03, 0x4c, 0x70, 0x0a, 0xa8, 0x1f, 0x12, 0x6f, 0x80, 0x09, 0x56, 0x81, + 0x2d, 0xea, 0xd0, 0x0a, 0x5c, 0xa8, 0xf4, 0x43, 0xef, 0xd0, 0x09, 0xdd, 0xd6, 0x6e, 0x6f, 0xdf, + 0x77, 0x48, 0x23, 0x05, 0x8a, 0x40, 0x55, 0x3b, 0x47, 0x54, 0x36, 0xfb, 0xbc, 0xd6, 0x4e, 0x22, + 0x3c, 0x1e, 0x1e, 0x9b, 0x28, 0x4c, 0x3e, 0x1e, 0x1e, 0x9b, 0x2c, 0x4c, 0x3d, 0x1e, 0x1e, 0x9b, + 0x2a, 0x4c, 0x5b, 0xf7, 0xe1, 0x02, 0xe3, 0x33, 0x27, 0x16, 0xf8, 0xad, 0x6d, 0x80, 0x3a, 0x3e, + 0x74, 0x7a, 0x2f, 0x3c, 0xb2, 0x23, 0xab, 0xea, 0x2f, 0x2e, 0x30, 0x22, 0xe9, 0x07, 0xc3, 0x2b, + 0x1a, 0x0f, 0x84, 0x9e, 0x26, 0x20, 0x6d, 0x05, 0xcb, 0xfa, 0xf3, 0x3c, 0x20, 0xea, 0x0f, 0x52, + 0x0f, 0x7d, 0xec, 0x1c, 0x8a, 0x6e, 0x7c, 0x04, 0x93, 0xec, 0x93, 0xc1, 0x8a, 0x69, 0x77, 0x88, + 0x34, 0xca, 0x78, 0x85, 0x5a, 0xb5, 0x76, 0xce, 0xd6, 0x40, 0x09, 0xaa, 0x8d, 0x83, 0xfe, 0xa1, + 0x40, 0xcd, 0x6b, 0xa8, 0x6a, 0x15, 0x41, 0x55, 0x7f, 0xa3, 0xcf, 0x61, 0xba, 0xe6, 0x1d, 0xf6, + 0xc8, 0x9c, 0x70, 0xe4, 0x21, 0xfe, 0xe5, 0xe4, 0xed, 0x6a, 0x95, 0x6b, 0xe7, 0xec, 0x18, 0x38, + 0xda, 0x84, 0x8b, 0x0f, 0x3b, 0xfd, 0xe0, 0x45, 0xa5, 0xdb, 0xae, 0x75, 0xbc, 0x40, 0x50, 0x19, + 0xe6, 0xf6, 0x65, 0xce, 0xe9, 0x92, 0x10, 0x6b, 0xe7, 0x6c, 0x13, 0x22, 0xba, 0xc1, 0x9d, 0x5b, + 0xf9, 0x17, 0x7c, 0xea, 0x0e, 0xf7, 0x7d, 0xdd, 0xea, 0xe2, 0xad, 0xe7, 0x6b, 0xe7, 0x6c, 0x56, + 0x5b, 0x1d, 0x87, 0x51, 0xc1, 0xe5, 0xef, 0x92, 0xcd, 0x22, 0xa7, 0x93, 0xdd, 0x16, 0xa2, 0x12, + 0x8c, 0xed, 0xf6, 0x08, 0xf3, 0x11, 0x22, 0x9c, 0x2d, 0x7f, 0x5b, 0xdf, 0xd5, 0x67, 0x1a, 0x2d, + 0xaa, 0x7a, 0x36, 0x03, 0x8e, 0x0a, 0xac, 0x35, 0x7d, 0x72, 0xb3, 0xa1, 0xb5, 0x76, 0xf3, 0xb1, + 0x76, 0x0b, 0xf1, 0xb9, 0xb6, 0xe6, 0x8c, 0x93, 0x67, 0x7d, 0x09, 0x4b, 0xbb, 0x3d, 0xa2, 0xd4, + 0x54, 0x7a, 0xbd, 0x8e, 0xdb, 0x62, 0xb6, 0x22, 0xfa, 0x35, 0x10, 0x9b, 0xe5, 0x7d, 0xe9, 0x39, + 0x99, 0x4b, 0xf5, 0x33, 0x81, 0xe3, 0xa3, 0xf2, 0x79, 0xf6, 0x55, 0x11, 0x0e, 0x93, 0xd6, 0xef, + 0xe5, 0x60, 0x89, 0x9d, 0x80, 0x54, 0xd2, 0xdf, 0x51, 0xfd, 0x3b, 0x15, 0x31, 0x45, 0x7a, 0x73, + 0xaa, 0x1e, 0x9c, 0xd1, 0x5d, 0x66, 0x3e, 0xfd, 0x2e, 0x53, 0x1c, 0xb0, 0x21, 0xe3, 0x01, 0xfb, + 0x02, 0x2c, 0xde, 0xa3, 0x4e, 0x27, 0xd1, 0xa9, 0xe0, 0x4d, 0x7a, 0x65, 0xfd, 0xb7, 0x3c, 0xcc, + 0x3f, 0xc2, 0x5d, 0xec, 0x3b, 0x74, 0x9c, 0x9a, 0x44, 0x7e, 0xf2, 0x3b, 0x24, 0x29, 0x6e, 0xe6, + 0x53, 0xc4, 0xcd, 0xcb, 0x30, 0xb4, 0x6b, 0xaf, 0xf3, 0x61, 0x51, 0x46, 0xda, 0xf7, 0x5d, 0x9b, + 0x94, 0xa1, 0xf5, 0xe8, 0xa6, 0x65, 0x78, 0xe0, 0x4d, 0xcb, 0x45, 0x6e, 0x79, 0x1e, 0xe5, 0x37, + 0x2d, 0xfa, 0xfd, 0xca, 0xa6, 0x22, 0xd3, 0x12, 0x76, 0x73, 0x9b, 0x9f, 0xa9, 0x94, 0x01, 0x72, + 0xf1, 0x74, 0xb5, 0x1b, 0xfa, 0xaf, 0xd9, 0x16, 0x60, 0x52, 0xaa, 0x90, 0x4d, 0x4b, 0x5f, 0xc0, + 0x84, 0x02, 0x82, 0x0a, 0x30, 0x74, 0xc0, 0x6f, 0x99, 0xc6, 0x6d, 0xf2, 0x27, 0xfa, 0x2e, 0x8c, + 0xbc, 0x24, 0x72, 0x32, 0x67, 0x23, 0x97, 0x22, 0x19, 0xba, 0x1e, 0x12, 0xe9, 0x80, 0x09, 0xd1, + 0x36, 0x03, 0xfa, 0x38, 0xff, 0x61, 0xce, 0xfa, 0x04, 0x8a, 0xc9, 0xde, 0x70, 0x91, 0x6b, 0x90, + 0x16, 0x62, 0xad, 0xc0, 0xec, 0x23, 0x1c, 0x46, 0xce, 0xa5, 0xca, 0x25, 0x58, 0xec, 0x9c, 0x65, + 0x58, 0xbf, 0xac, 0x3a, 0xcc, 0xc5, 0xa8, 0xf0, 0xf6, 0x3f, 0x86, 0x51, 0xe1, 0x96, 0x92, 0x4b, + 0x77, 0x4b, 0xa1, 0xfb, 0x96, 0x53, 0xb6, 0x05, 0x82, 0xf5, 0x0c, 0x2e, 0x69, 0x44, 0x03, 0x49, + 0xf5, 0xfb, 0x30, 0x26, 0xca, 0x62, 0x66, 0x03, 0x8d, 0x2c, 0xdd, 0x5a, 0x81, 0x40, 0x96, 0x28, + 0xd6, 0x0b, 0xb8, 0xb4, 0xe1, 0x06, 0x3a, 0x65, 0x36, 0xea, 0x05, 0x18, 0xef, 0x39, 0xfb, 0xb8, + 0x19, 0xb8, 0xbf, 0xc1, 0xf6, 0xe7, 0x88, 0x3d, 0x46, 0x0a, 0xea, 0xee, 0x6f, 0x60, 0x74, 0x05, + 0x80, 0x56, 0xd2, 0xf9, 0xe3, 0xec, 0x85, 0x82, 0x33, 0x7d, 0x0e, 0xc1, 0x30, 0xd9, 0xc6, 0x6c, + 0x43, 0xda, 0xf4, 0x6f, 0xcb, 0x87, 0xf9, 0x44, 0x4b, 0x7c, 0x0c, 0x77, 0x41, 0x76, 0x2d, 0x63, + 0x0c, 0xb6, 0x04, 0x42, 0x37, 0x61, 0xa6, 0x8b, 0xbf, 0x0e, 0x9b, 0x89, 0x3e, 0x4c, 0x91, 0xe2, + 0x6d, 0xd1, 0x0f, 0xeb, 0x27, 0x54, 0xbb, 0x8e, 0xfb, 0x8d, 0x9d, 0xd9, 0xe4, 0x75, 0xa0, 0x44, + 0x86, 0xa4, 0xbb, 0x09, 0xfd, 0xda, 0x26, 0xf0, 0x25, 0x2c, 0x18, 0x5b, 0xfb, 0x75, 0x4f, 0xe2, + 0x5f, 0xe6, 0x61, 0x9e, 0x7d, 0xa5, 0x92, 0x47, 0xe3, 0xe4, 0x3c, 0xec, 0x5b, 0x31, 0x0a, 0xdf, + 0x33, 0x18, 0x85, 0x29, 0x8a, 0x6a, 0x14, 0xd6, 0x4c, 0xc1, 0x1f, 0x9a, 0x4d, 0xc1, 0x54, 0x80, + 0xd4, 0x4d, 0xc1, 0x71, 0x03, 0xf0, 0x6a, 0xba, 0x01, 0x98, 0x9a, 0xc3, 0x0c, 0x06, 0x60, 0x83, + 0xd9, 0xf7, 0xf1, 0xf0, 0x58, 0xbe, 0x30, 0x64, 0x35, 0xa0, 0x98, 0x9c, 0xe2, 0x33, 0xe0, 0x1b, + 0x7f, 0x9a, 0x83, 0x2b, 0x5c, 0xc2, 0x88, 0x1d, 0x82, 0xd3, 0xaf, 0xe0, 0x7b, 0x30, 0xc9, 0x71, + 0x77, 0xa2, 0xcd, 0xc2, 0x3c, 0x40, 0x05, 0x27, 0x64, 0xec, 0x54, 0x03, 0x43, 0xef, 0x29, 0xda, + 0x3e, 0xb3, 0x20, 0x5d, 0x26, 0x9f, 0x4b, 0x66, 0x16, 0x48, 0xd5, 0xf9, 0xad, 0xaf, 0x60, 0x29, + 0xad, 0xe3, 0x67, 0x30, 0x2f, 0x7f, 0x96, 0x83, 0x05, 0x4e, 0x5e, 0x3b, 0x4e, 0x6f, 0xc4, 0xf2, + 0x4f, 0xe1, 0xf7, 0xf0, 0x18, 0x26, 0x48, 0x83, 0xa2, 0xdf, 0xfa, 0x93, 0x24, 0xa5, 0x66, 0xc5, + 0x09, 0x1d, 0x7e, 0x95, 0xe5, 0x1c, 0x76, 0x84, 0x77, 0xa2, 0xad, 0x22, 0x5b, 0x3f, 0x82, 0x45, + 0xf3, 0x10, 0xce, 0x60, 0x7e, 0x1e, 0x43, 0xc9, 0xc0, 0x38, 0xdf, 0xec, 0x83, 0xf8, 0x43, 0x58, + 0x30, 0xd2, 0x3a, 0x83, 0x6e, 0xae, 0x91, 0xcf, 0x7d, 0x78, 0x06, 0x4b, 0x68, 0x3d, 0x83, 0xcb, + 0x06, 0x4a, 0x67, 0xd0, 0xc5, 0x47, 0x30, 0x2f, 0xc5, 0xdc, 0x6f, 0xd4, 0xc3, 0xa7, 0x70, 0x85, + 0x11, 0x3a, 0x9b, 0x55, 0x79, 0x02, 0x0b, 0x9c, 0xdc, 0x19, 0xcc, 0xde, 0x1a, 0x2c, 0x46, 0xda, + 0xac, 0x41, 0x96, 0x38, 0x31, 0x93, 0xb1, 0x36, 0xe0, 0x6a, 0x44, 0x29, 0xe5, 0xc3, 0x7a, 0x72, + 0x6a, 0x4c, 0x16, 0x8b, 0x56, 0xe9, 0x0c, 0x65, 0xb1, 0x08, 0xf0, 0xcc, 0xc4, 0x89, 0x75, 0xb8, + 0xc8, 0x08, 0xeb, 0x72, 0xeb, 0xb2, 0x2a, 0xb7, 0x1a, 0x5f, 0xf3, 0x24, 0x45, 0xd9, 0xa7, 0x54, + 0x94, 0x15, 0x20, 0x51, 0x0f, 0xdf, 0x83, 0xf3, 0xfc, 0xc1, 0x22, 0xeb, 0x9f, 0x81, 0x18, 0x93, + 0xd4, 0x19, 0x1a, 0x07, 0xb6, 0x7e, 0x0a, 0x57, 0x98, 0x1a, 0x18, 0x77, 0x8c, 0x17, 0x4b, 0xf2, + 0xfd, 0x98, 0x16, 0x98, 0xe1, 0x7f, 0x6f, 0x52, 0x06, 0xf7, 0xc4, 0xde, 0x4e, 0xa3, 0x7f, 0x22, + 0x4f, 0x55, 0xa1, 0xdd, 0xe5, 0x8d, 0xda, 0xdd, 0x75, 0xb8, 0x26, 0xb5, 0xbb, 0x78, 0x33, 0xd2, + 0x6c, 0xfb, 0x23, 0x58, 0x60, 0x03, 0xd5, 0x9f, 0x69, 0x89, 0x6e, 0x7c, 0x12, 0x1b, 0x66, 0xea, + 0x3b, 0x30, 0xd3, 0x20, 0x7f, 0x37, 0x27, 0x8e, 0x9c, 0x99, 0xf8, 0xb7, 0xad, 0xee, 0x6e, 0x42, + 0x59, 0x4e, 0x88, 0xde, 0xa3, 0x37, 0xd3, 0x75, 0x9f, 0xc2, 0x5c, 0xe2, 0x29, 0x01, 0x11, 0x58, + 0xd1, 0xbb, 0xe4, 0x58, 0xd0, 0x02, 0xb1, 0xed, 0x52, 0x9f, 0x1e, 0xd8, 0x12, 0xd2, 0x6a, 0xc2, + 0x62, 0x72, 0x29, 0xdc, 0x96, 0x70, 0x4c, 0x42, 0x9f, 0x93, 0x23, 0xcc, 0xde, 0x33, 0xe4, 0x06, + 0xbc, 0x67, 0xe0, 0xe7, 0x98, 0xa1, 0x0b, 0x2c, 0xcb, 0x12, 0xac, 0x26, 0x36, 0x7e, 0xd2, 0xba, + 0xd8, 0x0f, 0x2e, 0x20, 0x51, 0x55, 0xab, 0xdb, 0xa2, 0xe9, 0xcb, 0x30, 0x54, 0xab, 0xdb, 0xdc, + 0x1f, 0x92, 0xaa, 0xdb, 0xad, 0xc0, 0xb7, 0x49, 0x59, 0x5c, 0x6a, 0xcd, 0x9f, 0x40, 0x6a, 0x7d, + 0x3c, 0x3c, 0x36, 0x54, 0x18, 0xb6, 0x7e, 0x0c, 0x17, 0xb5, 0xa6, 0xf8, 0x89, 0xcd, 0x74, 0xda, + 0x44, 0x37, 0x61, 0xb4, 0x56, 0xa1, 0x77, 0x6d, 0xd4, 0x36, 0x30, 0xc9, 0x78, 0x4b, 0xcb, 0x69, + 0xd2, 0xd7, 0xe7, 0xb6, 0xa8, 0xb4, 0xfe, 0xc1, 0xb0, 0x42, 0x5d, 0xf1, 0x63, 0xcd, 0x18, 0xc9, + 0x7d, 0x00, 0xb6, 0x1b, 0x94, 0x81, 0x10, 0x61, 0x6f, 0x82, 0x5f, 0x0f, 0x30, 0xf6, 0x6b, 0x2b, + 0x40, 0x27, 0xf5, 0x5e, 0xe5, 0x7e, 0x3b, 0x0c, 0x49, 0xdc, 0xa1, 0x49, 0xbf, 0x1d, 0x4e, 0x3a, + 0xb0, 0x55, 0x20, 0xf4, 0xd3, 0xb8, 0x47, 0xd7, 0x08, 0xbd, 0xb2, 0x7e, 0x8b, 0x9b, 0x20, 0x0c, + 0x63, 0x3b, 0x9d, 0x53, 0xd7, 0x2b, 0x98, 0x23, 0xb8, 0xee, 0x73, 0xea, 0xb6, 0xb5, 0xfa, 0x75, + 0x88, 0xbb, 0x8c, 0x8f, 0x9f, 0xa7, 0xed, 0xdc, 0xc8, 0x68, 0x27, 0x02, 0xe6, 0xcf, 0xa5, 0x23, + 0x3a, 0x4d, 0x2c, 0xeb, 0x6c, 0x33, 0x7d, 0xba, 0x61, 0xec, 0x8d, 0xd5, 0x6e, 0xbb, 0xe7, 0xb9, + 0x52, 0x81, 0x60, 0x1b, 0xc6, 0xef, 0x34, 0x31, 0x2f, 0xb7, 0x55, 0x20, 0xeb, 0x66, 0xa6, 0x27, + 0xd5, 0x18, 0x0c, 0xef, 0xd4, 0x76, 0x36, 0x0a, 0x39, 0xeb, 0x2e, 0x80, 0xd2, 0x12, 0xc0, 0xf9, + 0xcd, 0x2d, 0xfb, 0x69, 0x65, 0xa3, 0x70, 0x0e, 0xcd, 0xc1, 0x85, 0x67, 0xeb, 0x9b, 0x2b, 0x5b, + 0xcf, 0xea, 0xcd, 0xfa, 0xd3, 0x8a, 0xbd, 0x53, 0xab, 0xd8, 0x2b, 0x85, 0x9c, 0xf5, 0x15, 0xcc, + 0xea, 0x23, 0x3c, 0xd3, 0x4d, 0x18, 0xc2, 0x45, 0x29, 0xbb, 0x3c, 0x7e, 0xb6, 0xa3, 0xf8, 0x9d, + 0x70, 0x65, 0x28, 0x7e, 0x15, 0xc6, 0xd5, 0x26, 0x7e, 0x64, 0x14, 0x20, 0xed, 0x02, 0x33, 0x9f, + 0x79, 0x81, 0x69, 0x7d, 0x00, 0xb3, 0x7a, 0xab, 0x27, 0x35, 0x07, 0xbd, 0x45, 0x1d, 0x72, 0x14, + 0x5f, 0x48, 0xa2, 0x95, 0x47, 0x5d, 0xe4, 0x5c, 0xf4, 0x03, 0x28, 0x70, 0xa8, 0xe8, 0x2b, 0x7b, + 0x5d, 0xd8, 0xeb, 0x18, 0xb7, 0xd3, 0x9f, 0xb4, 0x0b, 0xf7, 0x80, 0xb7, 0xc5, 0x0d, 0xc0, 0xa0, + 0x16, 0xfe, 0x3c, 0x07, 0xc5, 0x98, 0x5b, 0x61, 0xed, 0x85, 0xd3, 0xe9, 0xe0, 0xee, 0x3e, 0x46, + 0xb7, 0x60, 0x78, 0x67, 0x6b, 0x67, 0x9b, 0x5b, 0xc8, 0x66, 0xf9, 0x36, 0x25, 0x45, 0x12, 0xc6, + 0xa6, 0x10, 0xe8, 0x09, 0x5c, 0x10, 0xee, 0x27, 0xb2, 0x8a, 0x2b, 0x20, 0x57, 0xb2, 0x9d, 0x59, + 0x92, 0x78, 0xe8, 0x5d, 0xee, 0x03, 0xf9, 0xf3, 0xbe, 0xeb, 0xe3, 0x36, 0x55, 0xce, 0xa7, 0x97, + 0x51, 0xe4, 0x03, 0x29, 0x6a, 0x6c, 0x15, 0xec, 0xf1, 0xf0, 0x58, 0xae, 0x90, 0xb7, 0xfe, 0x20, + 0x07, 0xf3, 0x29, 0x6e, 0x92, 0xe8, 0x1d, 0x6d, 0x38, 0x17, 0x95, 0xe1, 0x08, 0x90, 0xb5, 0x73, + 0x7c, 0x3c, 0x35, 0xc5, 0x27, 0x67, 0xe8, 0x14, 0x3e, 0x39, 0xfc, 0x89, 0x33, 0x85, 0xe3, 0x4f, + 0x79, 0x68, 0xb9, 0x35, 0x03, 0x53, 0xda, 0xbc, 0x59, 0x16, 0x4c, 0xaa, 0x2d, 0x93, 0xc5, 0xa9, + 0x79, 0x6d, 0xb9, 0x38, 0xe4, 0x6f, 0xeb, 0x6f, 0xe5, 0x60, 0x96, 0x0e, 0x71, 0xdf, 0x25, 0xa7, + 0x31, 0x9a, 0xa1, 0x65, 0x6d, 0x24, 0x8b, 0xda, 0x48, 0x62, 0xb0, 0x72, 0x48, 0x1f, 0x27, 0x86, + 0xb4, 0x68, 0x1a, 0x12, 0xd5, 0xfa, 0x5c, 0xaf, 0xab, 0x8d, 0x44, 0xb9, 0x86, 0xf8, 0x3b, 0x39, + 0xb8, 0xa8, 0xf4, 0x49, 0xf6, 0xff, 0xbe, 0xd6, 0xa5, 0x05, 0x43, 0x97, 0x12, 0x93, 0x5c, 0x4d, + 0xf4, 0xe8, 0xad, 0xac, 0x1e, 0x0d, 0x9c, 0xe3, 0xbf, 0xc8, 0xc1, 0x9c, 0x71, 0x0e, 0xd0, 0x25, + 0x22, 0x5a, 0xb5, 0x7c, 0x1c, 0xf2, 0xe9, 0xe5, 0xbf, 0x48, 0xf9, 0x7a, 0x10, 0xf4, 0x79, 0x5c, + 0x90, 0x71, 0x9b, 0xff, 0x42, 0x6f, 0xc1, 0xd4, 0x36, 0xf6, 0x5d, 0xaf, 0xcd, 0xbc, 0xb5, 0xd8, + 0x8d, 0xf6, 0x94, 0xad, 0x17, 0xa2, 0x45, 0x18, 0xaf, 0x74, 0xf6, 0x3d, 0xdf, 0x0d, 0x5f, 0xb0, + 0x9b, 0xa0, 0x71, 0x3b, 0x2a, 0x20, 0xb4, 0x57, 0xdc, 0x7d, 0xe1, 0xa4, 0x31, 0x65, 0xf3, 0x5f, + 0xa8, 0x08, 0xa3, 0xc2, 0xa0, 0x43, 0xcd, 0x41, 0xb6, 0xf8, 0x49, 0x30, 0xbe, 0xb0, 0xe9, 0x26, + 0xa0, 0xaf, 0x77, 0x6c, 0xfe, 0xcb, 0xba, 0x0d, 0xb3, 0xa6, 0x79, 0x34, 0x6e, 0x99, 0xff, 0x3f, + 0x0f, 0x17, 0x2b, 0xed, 0xf6, 0xd3, 0x87, 0x95, 0x15, 0xac, 0x0a, 0x34, 0xef, 0xc2, 0xf0, 0x7a, + 0xd7, 0x0d, 0xb9, 0x34, 0x23, 0x1c, 0x8a, 0x0d, 0x90, 0x04, 0x8a, 0xac, 0x10, 0xf9, 0x1f, 0xd9, + 0x70, 0x71, 0xf5, 0x6b, 0x37, 0x08, 0xdd, 0xee, 0xbe, 0xea, 0x95, 0x9c, 0x3f, 0x89, 0x57, 0xf2, + 0xda, 0x39, 0xdb, 0x84, 0x8c, 0x76, 0xe0, 0xd2, 0x26, 0x7e, 0x65, 0xd8, 0x42, 0xf2, 0xb1, 0x86, + 0x72, 0xd0, 0x13, 0x3b, 0x27, 0x05, 0x57, 0xdd, 0xa1, 0xbf, 0x93, 0xa7, 0x2f, 0xba, 0x94, 0x81, + 0xf1, 0x96, 0x77, 0x61, 0x56, 0xe9, 0x50, 0xc4, 0xa7, 0x72, 0xfc, 0x0d, 0xa9, 0x71, 0x38, 0xea, + 0x41, 0x32, 0xa2, 0xa3, 0x67, 0x30, 0xaf, 0x77, 0x2a, 0xa2, 0xac, 0x1f, 0x06, 0x13, 0xc8, 0xda, + 0x39, 0x3b, 0x0d, 0x1b, 0x2d, 0xc3, 0x50, 0xa5, 0x75, 0xc0, 0xa7, 0xc5, 0xbc, 0x64, 0x6c, 0x64, + 0x95, 0xd6, 0x01, 0x7d, 0x19, 0xdd, 0x3a, 0xd0, 0xce, 0xc3, 0xbf, 0xcc, 0xc1, 0x7c, 0xca, 0x0a, + 0xa3, 0x25, 0x00, 0x56, 0xa8, 0x7c, 0x11, 0x94, 0x12, 0x22, 0xa0, 0xb1, 0x5f, 0xd4, 0x73, 0x6b, + 0x88, 0xb2, 0x60, 0xf1, 0xee, 0x21, 0xaa, 0xb0, 0x15, 0x20, 0xb4, 0x0d, 0x13, 0xec, 0x17, 0x7b, + 0x7e, 0xa1, 0xb3, 0x6d, 0xa5, 0x86, 0x09, 0x32, 0x6d, 0x5a, 0xd0, 0x8c, 0x3f, 0xbb, 0x50, 0x49, + 0x70, 0xf3, 0x65, 0x2d, 0x3e, 0x0a, 0x39, 0x68, 0x74, 0x0b, 0xce, 0xb3, 0x42, 0xbe, 0x86, 0xe2, + 0x45, 0x64, 0x04, 0xcc, 0xeb, 0xad, 0xbf, 0x97, 0x83, 0x4b, 0xec, 0x8b, 0x98, 0x38, 0x1a, 0x1f, + 0x68, 0x47, 0xe3, 0x9a, 0xec, 0xb0, 0x09, 0x58, 0x3b, 0x1d, 0x55, 0xdd, 0x57, 0xff, 0xa4, 0xa7, + 0x42, 0x45, 0x52, 0xf7, 0xed, 0xdf, 0xcf, 0x09, 0x6b, 0x4e, 0x72, 0xeb, 0xae, 0xc2, 0xe4, 0x9b, + 0x6d, 0x59, 0x0d, 0x0d, 0xbd, 0xc7, 0x76, 0x54, 0x3e, 0x7b, 0xa4, 0x99, 0x9b, 0xea, 0x53, 0x28, + 0xa5, 0x4f, 0xcd, 0xa0, 0x6d, 0x65, 0x3d, 0x34, 0x60, 0xbf, 0xc9, 0x72, 0xf6, 0x13, 0x74, 0xea, + 0xaf, 0xbb, 0x2d, 0xb1, 0xa2, 0x37, 0xe3, 0x7e, 0x8d, 0xa9, 0xbe, 0x62, 0x6a, 0x6f, 0xf3, 0xd1, + 0xb5, 0x01, 0xdf, 0x9c, 0x54, 0xd8, 0x53, 0xbb, 0xff, 0xcf, 0xf2, 0xfa, 0x5e, 0x7c, 0x93, 0x46, + 0x6b, 0x30, 0xb5, 0x89, 0x5f, 0x25, 0xda, 0xa5, 0x7e, 0x30, 0x5d, 0xfc, 0xaa, 0xa9, 0xb4, 0xad, + 0x3a, 0x88, 0x6b, 0x38, 0x68, 0x0f, 0xa6, 0x05, 0xd7, 0x38, 0x29, 0xf3, 0x64, 0x6f, 0xcf, 0x48, + 0x0b, 0x29, 0x2f, 0x45, 0x62, 0x14, 0xcf, 0xfe, 0x3c, 0x5b, 0xdb, 0x50, 0x4c, 0xce, 0x1e, 0x6f, + 0xed, 0xdd, 0x41, 0x6b, 0xcf, 0xcc, 0x1e, 0x6d, 0x7d, 0x1f, 0xac, 0x51, 0x53, 0x94, 0x84, 0x91, + 0xb6, 0x85, 0x7b, 0xf1, 0xc5, 0xa0, 0xfe, 0x34, 0x62, 0x31, 0x94, 0xfe, 0x49, 0x37, 0xd7, 0x1a, + 0xb5, 0xe6, 0xa9, 0x94, 0x78, 0xc7, 0x6e, 0xc3, 0x28, 0x2f, 0x8a, 0x3d, 0xbb, 0x8e, 0x76, 0xa5, + 0x00, 0xb0, 0xfe, 0x30, 0x07, 0x97, 0xa9, 0x6d, 0xd1, 0xed, 0xee, 0x77, 0xf0, 0x6e, 0xa0, 0x7b, + 0xaa, 0x7e, 0x4f, 0x63, 0x34, 0xf3, 0x29, 0xef, 0x85, 0x7e, 0x5d, 0xec, 0xe5, 0x8f, 0x73, 0x50, + 0x32, 0xf5, 0xed, 0x6c, 0x39, 0xcc, 0x1d, 0xae, 0xcc, 0xe5, 0xb9, 0xd5, 0x84, 0xa1, 0xcb, 0x36, + 0xc5, 0x60, 0xc9, 0x20, 0xc9, 0xff, 0x1a, 0x6b, 0xf9, 0x5f, 0x39, 0x98, 0x5d, 0x0f, 0x54, 0x01, + 0x9f, 0x4f, 0xdc, 0x1d, 0xd3, 0xf3, 0x45, 0xba, 0xae, 0xe6, 0x10, 0x17, 0xef, 0x2a, 0x2f, 0x65, + 0xf2, 0x59, 0xef, 0x12, 0xb5, 0xb8, 0x26, 0x37, 0x61, 0x78, 0x93, 0x88, 0x53, 0x43, 0x7c, 0xff, + 0x31, 0x0c, 0x52, 0x44, 0x1f, 0xb5, 0x90, 0x2e, 0x93, 0x1f, 0xe8, 0x61, 0xe2, 0xe9, 0xcc, 0xf0, + 0xe0, 0x77, 0x77, 0xc9, 0x80, 0x2c, 0xd5, 0x31, 0x38, 0xbf, 0xe3, 0xf8, 0xfb, 0x38, 0xb4, 0x7e, + 0x04, 0x25, 0xee, 0xd5, 0xc3, 0xac, 0xb5, 0xd4, 0xf7, 0x27, 0x88, 0x1c, 0xb7, 0xb2, 0x3c, 0x71, + 0x96, 0x00, 0xea, 0xa1, 0xe3, 0x87, 0xeb, 0xdd, 0x36, 0xfe, 0x9a, 0x8e, 0x76, 0xc4, 0x56, 0x4a, + 0xac, 0xf7, 0x60, 0x5c, 0x0e, 0x81, 0x6a, 0x80, 0x8a, 0xc4, 0x48, 0x87, 0x33, 0xab, 0x3d, 0xe6, + 0x11, 0x2f, 0x78, 0x1e, 0xc0, 0x5c, 0x6c, 0x29, 0xa2, 0x27, 0x64, 0x52, 0x33, 0xa3, 0xae, 0x8a, + 0xb6, 0xfc, 0x6d, 0xd5, 0xe0, 0x42, 0x62, 0xa5, 0x11, 0xa2, 0xaf, 0xbb, 0x98, 0x76, 0x4f, 0x3e, + 0x28, 0xf5, 0xfa, 0x1a, 0x29, 0xdb, 0xd9, 0xa8, 0x33, 0x67, 0x6c, 0x52, 0xb6, 0xb3, 0x51, 0xaf, + 0x9e, 0x67, 0x3b, 0xc7, 0xfa, 0x47, 0x79, 0xaa, 0xf4, 0x26, 0xe6, 0x20, 0x66, 0x2b, 0x54, 0xed, + 0x95, 0x55, 0x18, 0xa7, 0x23, 0x5e, 0x11, 0xcf, 0x0d, 0xb2, 0x1d, 0x51, 0xc6, 0x7e, 0x71, 0x54, + 0x3e, 0x47, 0xbd, 0x4f, 0x22, 0x34, 0xf4, 0x19, 0x8c, 0xae, 0x76, 0xdb, 0x94, 0xc2, 0xd0, 0x29, + 0x28, 0x08, 0x24, 0xb2, 0x0e, 0xb4, 0xcb, 0x44, 0x14, 0xe2, 0x66, 0x27, 0x5b, 0x29, 0xa1, 0xd3, + 0xec, 0x1e, 0xba, 0xcc, 0xe1, 0x6b, 0xc4, 0x66, 0x3f, 0xe8, 0x83, 0x3c, 0xd2, 0x05, 0xf1, 0xd4, + 0x7f, 0xdc, 0x96, 0xbf, 0x91, 0x05, 0x23, 0x5b, 0x7e, 0x9b, 0x3f, 0xd4, 0x9d, 0x5e, 0x9e, 0x14, + 0x71, 0x0f, 0x49, 0x99, 0xcd, 0xaa, 0xac, 0xff, 0x91, 0x83, 0xf9, 0x47, 0x38, 0x34, 0xee, 0x1b, + 0x6d, 0x56, 0x72, 0xdf, 0x78, 0x56, 0xf2, 0x6f, 0x32, 0x2b, 0x72, 0xd4, 0x43, 0x69, 0xa3, 0x1e, + 0x4e, 0x1b, 0xf5, 0x48, 0xfa, 0xa8, 0x1f, 0xc1, 0x79, 0x36, 0x54, 0x74, 0x1d, 0x46, 0xd6, 0x43, + 0x7c, 0x18, 0x19, 0x43, 0x54, 0x37, 0x3a, 0x9b, 0xd5, 0x11, 0x8d, 0x6b, 0xc3, 0x09, 0x42, 0xe1, + 0xfe, 0x3f, 0x6e, 0x8b, 0x9f, 0xd6, 0xcf, 0xe8, 0x43, 0xa5, 0x0d, 0xaf, 0x75, 0xa0, 0x58, 0xa5, + 0x47, 0xd9, 0xa9, 0x8c, 0xdf, 0x62, 0x10, 0x28, 0x56, 0x63, 0x0b, 0x08, 0x74, 0x15, 0x26, 0xd6, + 0xbb, 0x0f, 0x3d, 0xbf, 0x85, 0xb7, 0xba, 0x1d, 0x46, 0x7d, 0xcc, 0x56, 0x8b, 0xb8, 0x05, 0x87, + 0xb7, 0x10, 0x59, 0x70, 0x68, 0x41, 0xcc, 0x82, 0xc3, 0x42, 0x63, 0xd9, 0xac, 0x8e, 0x1b, 0x88, + 0xc8, 0xdf, 0x59, 0xe6, 0x1b, 0x69, 0xe7, 0x19, 0x04, 0xb8, 0x07, 0x97, 0x6d, 0xdc, 0xeb, 0x38, + 0x44, 0xe0, 0x3a, 0xf4, 0x18, 0xbc, 0x1c, 0xf3, 0x55, 0x83, 0xbf, 0xb8, 0xee, 0xfb, 0x20, 0xbb, + 0x9c, 0xcf, 0xe8, 0xf2, 0x21, 0x5c, 0x7b, 0x84, 0x43, 0x63, 0x7c, 0xab, 0x68, 0xf0, 0x6b, 0x30, + 0x16, 0xe8, 0xf6, 0xfa, 0x41, 0xa1, 0xb5, 0xf8, 0x8d, 0x16, 0xa7, 0x23, 0xff, 0xb2, 0x3e, 0x87, + 0x72, 0x5a, 0x73, 0x27, 0xf3, 0x79, 0x75, 0xe1, 0x6a, 0x3a, 0x01, 0xf9, 0x59, 0x14, 0xb6, 0x7d, + 0xa9, 0x3a, 0x67, 0xf7, 0x56, 0xbf, 0x0e, 0xe0, 0x7f, 0x58, 0x55, 0xe1, 0xfd, 0xf7, 0x0d, 0xba, + 0xdb, 0xa4, 0xd7, 0xe6, 0x3a, 0x81, 0x68, 0x5e, 0x2b, 0x30, 0x26, 0xca, 0xf8, 0xbc, 0xa6, 0x86, + 0x0e, 0xa3, 0x13, 0xda, 0x16, 0x04, 0x24, 0x9a, 0xf5, 0x33, 0x71, 0x85, 0xa4, 0x63, 0x9c, 0xec, + 0x11, 0xcc, 0x49, 0xee, 0x8c, 0x2c, 0x0f, 0x2e, 0xeb, 0xb4, 0xd5, 0xeb, 0x82, 0x82, 0x72, 0x5d, + 0xc0, 0x6e, 0x09, 0xae, 0xea, 0xe6, 0xeb, 0x3c, 0xdf, 0x97, 0x51, 0x11, 0x5a, 0x52, 0x2f, 0x05, + 0x26, 0x93, 0xaf, 0x86, 0xee, 0x41, 0xc9, 0xd4, 0xa0, 0x62, 0x40, 0x91, 0x96, 0x67, 0x1e, 0xa9, + 0xe2, 0x37, 0x73, 0x60, 0x69, 0x9e, 0x50, 0x5a, 0x14, 0x28, 0x79, 0x64, 0xde, 0x11, 0x8c, 0x8d, + 0xfa, 0x5e, 0x31, 0x5f, 0xf8, 0x0e, 0x29, 0x50, 0x9f, 0x6a, 0x31, 0x6e, 0x77, 0x0f, 0x46, 0x37, + 0xf1, 0xd7, 0x11, 0xfb, 0x61, 0xb2, 0x28, 0xf5, 0x8e, 0x3a, 0xc0, 0xea, 0x23, 0x50, 0x01, 0x46, + 0x04, 0xa1, 0xeb, 0x99, 0x7d, 0xe0, 0xfd, 0xdf, 0x83, 0x42, 0xbc, 0x8e, 0xaf, 0xfd, 0xc0, 0x80, + 0x58, 0xf4, 0x35, 0x45, 0x3c, 0x0e, 0x56, 0x60, 0x27, 0xe8, 0x9d, 0xbe, 0xf7, 0xe8, 0x23, 0x80, + 0x1d, 0x2f, 0x74, 0x3a, 0x35, 0x6a, 0xe3, 0xa2, 0x8c, 0x9f, 0x45, 0x55, 0x0a, 0x49, 0x69, 0x33, + 0xfe, 0x5a, 0x55, 0x01, 0xb6, 0x7e, 0x40, 0x4f, 0xa4, 0xb9, 0xd3, 0x27, 0x3b, 0x24, 0x35, 0xb8, + 0x1e, 0xf3, 0x3c, 0x78, 0x03, 0x22, 0x21, 0xcc, 0x91, 0xe9, 0x97, 0xe1, 0xb4, 0xbe, 0x9d, 0x55, + 0xff, 0x37, 0x39, 0xe6, 0x2e, 0xa9, 0x36, 0xcb, 0x17, 0xba, 0x06, 0x10, 0x95, 0xc6, 0xfc, 0xf1, + 0xd5, 0xe8, 0x60, 0x54, 0x79, 0x8d, 0xa2, 0x83, 0x05, 0xb6, 0x82, 0xf6, 0xed, 0xae, 0xe4, 0x03, + 0xea, 0x6e, 0x20, 0x5b, 0x3f, 0xd9, 0xbc, 0xbf, 0x2f, 0x6c, 0x34, 0xa7, 0xc4, 0x7b, 0x01, 0xb3, + 0x5a, 0x00, 0xe5, 0x28, 0x22, 0x6c, 0x14, 0x38, 0x7a, 0xbc, 0xfa, 0xe9, 0xaf, 0x8e, 0xca, 0x1f, + 0x9e, 0xe6, 0x15, 0x97, 0xa0, 0xb9, 0x23, 0x1f, 0x2b, 0x5a, 0xf3, 0x30, 0x54, 0xb3, 0x37, 0x28, + 0xab, 0xb2, 0x37, 0x24, 0xab, 0xb2, 0x37, 0xac, 0xff, 0x9e, 0x87, 0x32, 0x7b, 0xab, 0x4c, 0xbd, + 0x54, 0x22, 0x5d, 0x49, 0x71, 0x7b, 0x39, 0xa9, 0x85, 0x20, 0xf6, 0x16, 0x39, 0x7f, 0x92, 0xb7, + 0xc8, 0xff, 0xf7, 0x9b, 0x5b, 0x55, 0x59, 0x70, 0xbc, 0xc8, 0x30, 0xc0, 0x6a, 0x4d, 0x16, 0x82, + 0x94, 0x26, 0x92, 0x26, 0x8d, 0xe1, 0x37, 0x30, 0x69, 0xdc, 0x83, 0x51, 0xaa, 0x7a, 0xac, 0x6f, + 0x73, 0xdf, 0x4a, 0xba, 0x3d, 0x69, 0x58, 0x81, 0xa6, 0xab, 0x46, 0x25, 0x11, 0x60, 0xd6, 0xdf, + 0xce, 0xc3, 0xd5, 0xf4, 0x39, 0xe7, 0x7d, 0x5b, 0xd1, 0x62, 0xe0, 0x66, 0xf8, 0xe3, 0xd0, 0xb3, + 0xa3, 0xc4, 0xc0, 0x8d, 0xc7, 0xbd, 0x15, 0x2f, 0x7c, 0x62, 0xb7, 0x61, 0xda, 0xc3, 0x1f, 0x11, + 0x41, 0x9c, 0x15, 0x69, 0xa1, 0xaf, 0x78, 0x19, 0xda, 0x83, 0xf9, 0x6d, 0xdf, 0x7d, 0xe9, 0x84, + 0xf8, 0x09, 0x7e, 0xbd, 0xed, 0x75, 0xdc, 0xd6, 0xeb, 0xd5, 0xae, 0xb3, 0xd7, 0xc1, 0x6d, 0xfe, + 0x6c, 0xeb, 0xd6, 0xf1, 0x51, 0xf9, 0xad, 0x1e, 0x03, 0x21, 0x07, 0xb3, 0xd9, 0xa3, 0x40, 0x4d, + 0xcc, 0xa0, 0x14, 0xa2, 0x69, 0x84, 0xac, 0x7f, 0x9d, 0x83, 0x05, 0x2a, 0x50, 0xf3, 0x9b, 0x05, + 0xd1, 0xf8, 0x1b, 0xb9, 0x65, 0xaa, 0x03, 0xe4, 0x7b, 0x91, 0xba, 0x65, 0x6a, 0x2f, 0xa0, 0x6c, + 0x0d, 0x0c, 0xad, 0xc3, 0x04, 0xff, 0xad, 0x98, 0x8f, 0xe7, 0x14, 0x86, 0x45, 0xb7, 0x3a, 0xb3, + 0x1e, 0xd1, 0x8d, 0xcd, 0x89, 0x35, 0xe9, 0xbb, 0x60, 0x15, 0xd7, 0xfa, 0x65, 0x1e, 0x16, 0x1b, + 0xd8, 0x77, 0x9f, 0xbf, 0x4e, 0x19, 0xcc, 0x16, 0xcc, 0x8a, 0x22, 0x3a, 0x66, 0xfd, 0x88, 0xb1, + 0xb0, 0x3a, 0xa2, 0xab, 0x01, 0x01, 0x68, 0xca, 0x13, 0x67, 0x44, 0x3c, 0x85, 0xc3, 0xe5, 0xbb, + 0x30, 0x16, 0x8b, 0x18, 0x40, 0xd7, 0x5f, 0x9c, 0x50, 0x3d, 0xa2, 0xa2, 0x3c, 0xaa, 0xbf, 0x95, + 0x7e, 0x45, 0xc9, 0x2d, 0x09, 0x83, 0xe2, 0xbd, 0xd0, 0x03, 0x4b, 0x0e, 0xab, 0xa3, 0xd4, 0x1a, + 0x0e, 0xec, 0xda, 0x39, 0x3b, 0xad, 0xa5, 0xea, 0x04, 0x8c, 0x57, 0xe8, 0xb5, 0x2b, 0x51, 0xdc, + 0xff, 0x67, 0x1e, 0x96, 0xc4, 0x9b, 0x9d, 0x94, 0x69, 0xfe, 0x12, 0xe6, 0x45, 0x51, 0xa5, 0x47, + 0x04, 0x06, 0xdc, 0xd6, 0x67, 0x9a, 0x85, 0xb6, 0x12, 0x33, 0xed, 0x70, 0x98, 0x68, 0xb2, 0xd3, + 0xd0, 0xcf, 0xc6, 0x20, 0xfa, 0x99, 0x29, 0x7e, 0x03, 0x35, 0x4c, 0xaa, 0x3c, 0x53, 0x0f, 0xbb, + 0xa8, 0xf2, 0xcf, 0x76, 0xc2, 0xa0, 0x3a, 0xfc, 0x4d, 0x0d, 0xaa, 0x6b, 0xe7, 0xe2, 0x26, 0xd5, + 0xea, 0x34, 0x4c, 0x6e, 0xe2, 0x57, 0xd1, 0xbc, 0xff, 0x76, 0x2e, 0xf6, 0xc4, 0x90, 0x48, 0x18, + 0xec, 0xad, 0x61, 0x2e, 0x0a, 0x01, 0x40, 0x9f, 0x18, 0xaa, 0x12, 0x06, 0x03, 0x5d, 0x87, 0x51, + 0xe6, 0xa2, 0xdb, 0x3e, 0x81, 0x6e, 0x2e, 0x1f, 0xdf, 0xb4, 0x18, 0x0a, 0x53, 0xd3, 0x39, 0xbe, + 0xf5, 0x04, 0xae, 0x71, 0x0f, 0x71, 0x7d, 0xf1, 0x69, 0x43, 0xa7, 0xfc, 0x7c, 0x59, 0x0e, 0x2c, + 0x3d, 0xc2, 0x71, 0xd6, 0xa3, 0x3d, 0x4e, 0xfa, 0x1c, 0x66, 0xb4, 0x72, 0x49, 0x91, 0x4a, 0xa5, + 0x72, 0x0f, 0x49, 0xd2, 0x71, 0x68, 0xeb, 0xaa, 0xa9, 0x09, 0xb5, 0xb3, 0x16, 0xa6, 0x31, 0xaa, + 0xfc, 0xe8, 0x16, 0x39, 0x38, 0x05, 0xd7, 0xbb, 0xa5, 0x9c, 0x6b, 0xc6, 0xf1, 0x58, 0x1c, 0x1f, + 0xf1, 0xe5, 0x95, 0xb5, 0xd6, 0x14, 0x4c, 0xd4, 0xbc, 0x6e, 0x88, 0xbf, 0xa6, 0xa2, 0x8e, 0x35, + 0x0d, 0x93, 0xa2, 0xaa, 0x83, 0x83, 0xc0, 0xfa, 0xa3, 0x21, 0xb0, 0xf8, 0xc4, 0x9a, 0xac, 0xa7, + 0x62, 0x3e, 0xf6, 0x12, 0x9d, 0xe5, 0x1f, 0xaa, 0x4b, 0xaa, 0x8d, 0x38, 0xaa, 0x65, 0x3b, 0x8f, + 0xca, 0x79, 0xad, 0xa8, 0x54, 0x8f, 0xa1, 0x1b, 0x1f, 0xfd, 0x8f, 0x53, 0xd8, 0x24, 0x3b, 0x6c, + 0x34, 0x7c, 0x75, 0x0a, 0x9b, 0xd4, 0xe8, 0x9a, 0x59, 0xa6, 0xad, 0x4d, 0x03, 0x17, 0x39, 0x90, + 0x7c, 0x5b, 0x29, 0x6b, 0xb8, 0x0f, 0x13, 0x2b, 0x68, 0x26, 0x52, 0x36, 0xa8, 0x44, 0xd0, 0xae, + 0x3e, 0x97, 0xfc, 0x3c, 0x0a, 0xaf, 0x0d, 0xb5, 0x8a, 0x51, 0xed, 0x29, 0x25, 0x7a, 0x06, 0x0c, + 0x0d, 0x56, 0xb1, 0x88, 0xff, 0xbe, 0xf4, 0xd3, 0x27, 0x1f, 0x52, 0xb7, 0x83, 0xf9, 0xa3, 0x14, + 0xb1, 0x2c, 0x7d, 0xf3, 0xed, 0x77, 0xee, 0x44, 0x3c, 0x9a, 0x06, 0x0e, 0xc5, 0x1c, 0x3d, 0xed, + 0xca, 0xc5, 0x44, 0xdf, 0x3a, 0xca, 0x89, 0xd7, 0x09, 0x89, 0x2b, 0xe1, 0xd3, 0x4a, 0x92, 0x55, + 0xed, 0x16, 0x37, 0x9f, 0x72, 0x8b, 0xab, 0xdd, 0x79, 0x85, 0x03, 0xae, 0x75, 0x87, 0xbe, 0xf9, + 0x35, 0xd0, 0x7f, 0x1d, 0x81, 0x0b, 0xdb, 0xce, 0xbe, 0xdb, 0x25, 0xbc, 0x47, 0x04, 0xbb, 0x45, + 0x95, 0x44, 0x3a, 0x84, 0x6c, 0x37, 0x58, 0x43, 0xbe, 0x83, 0x65, 0x35, 0x32, 0x79, 0x3e, 0xed, + 0xc5, 0xa8, 0x1e, 0x7f, 0xfc, 0x23, 0xcd, 0xea, 0x9f, 0x48, 0xcd, 0x41, 0xbd, 0xfb, 0xba, 0x5e, + 0x3b, 0x96, 0x22, 0x84, 0x5a, 0xce, 0x93, 0x31, 0xdb, 0x47, 0xce, 0x38, 0x66, 0xfb, 0x8f, 0x60, + 0xe2, 0x49, 0x7f, 0x4f, 0xa6, 0x9f, 0x38, 0x3f, 0x30, 0x26, 0x38, 0x5d, 0x83, 0x83, 0xfe, 0x9e, + 0x39, 0x01, 0x85, 0x4a, 0xcc, 0x18, 0xdf, 0x7c, 0xf4, 0xd7, 0x12, 0xdf, 0x3c, 0x35, 0xb4, 0xfe, + 0xd8, 0xb7, 0x12, 0x5a, 0xdf, 0x10, 0xa3, 0x7c, 0xfc, 0xcc, 0x63, 0x94, 0x57, 0x01, 0xc6, 0xfc, + 0x28, 0x6e, 0xf3, 0x70, 0x61, 0xc4, 0xfa, 0x17, 0xa3, 0x30, 0x4b, 0xf4, 0x79, 0xb1, 0xc3, 0x83, + 0xe8, 0xf3, 0x37, 0x29, 0xca, 0x14, 0xf5, 0x94, 0x4b, 0xaa, 0xac, 0xbc, 0x19, 0x4b, 0x67, 0xa4, + 0x21, 0xa0, 0xf7, 0xd4, 0xdb, 0x90, 0xbc, 0x12, 0x18, 0x33, 0x99, 0x89, 0x46, 0xbd, 0x26, 0x79, + 0x47, 0x33, 0xc6, 0x67, 0x5a, 0x2f, 0x1e, 0xc4, 0x2d, 0xf4, 0x3c, 0xa2, 0x15, 0xfd, 0x30, 0xe8, + 0xd6, 0x82, 0xc8, 0x74, 0xbf, 0x0b, 0xe7, 0x69, 0xf8, 0x19, 0xf1, 0x84, 0xf7, 0x6d, 0xce, 0x24, + 0x4c, 0x93, 0xc0, 0x02, 0xd5, 0xf0, 0xf7, 0xbb, 0x34, 0x5a, 0x53, 0x87, 0x16, 0xa8, 0x51, 0x66, + 0x18, 0x08, 0xda, 0x81, 0x8b, 0xdb, 0x3e, 0x6e, 0x73, 0xdf, 0xd6, 0x9e, 0xcf, 0x55, 0x39, 0xf6, + 0x96, 0x8e, 0x06, 0x89, 0xec, 0x89, 0xea, 0x26, 0x96, 0xf5, 0x2a, 0x97, 0x35, 0xa0, 0xa3, 0x55, + 0x98, 0xae, 0x63, 0xc7, 0x6f, 0xbd, 0x78, 0x82, 0x5f, 0x93, 0x8f, 0x43, 0x50, 0x1c, 0x8d, 0x22, + 0xab, 0x06, 0xb4, 0x86, 0x0c, 0x94, 0x56, 0xa9, 0x97, 0xe4, 0x3a, 0x12, 0xfa, 0x01, 0x9c, 0xaf, + 0x7b, 0x7e, 0x58, 0x7d, 0x1d, 0x4b, 0x4d, 0xc4, 0x0a, 0xab, 0x97, 0x45, 0x74, 0xd9, 0xc0, 0xf3, + 0xc3, 0xe6, 0x9e, 0x3a, 0x6f, 0x1c, 0x0f, 0x3d, 0x24, 0x92, 0x27, 0x91, 0x86, 0xa5, 0xa1, 0x85, + 0x85, 0xac, 0xe0, 0xd2, 0x25, 0x15, 0xa1, 0x4d, 0xd6, 0x96, 0x18, 0x16, 0x7a, 0x0d, 0xb3, 0xfa, + 0xfe, 0x7f, 0xe8, 0x76, 0x08, 0xd3, 0x00, 0x2d, 0xc9, 0x87, 0x09, 0xa4, 0x7a, 0x8b, 0xf7, 0xf2, + 0x6a, 0xfc, 0x94, 0x3d, 0xa7, 0xf5, 0x6a, 0xa4, 0x6b, 0x13, 0x3e, 0x7a, 0x4a, 0x83, 0xfb, 0xb2, + 0x99, 0xa9, 0x04, 0x22, 0x64, 0x33, 0x19, 0x04, 0x8d, 0x56, 0xd7, 0xa7, 0x67, 0x88, 0xce, 0xa8, + 0x13, 0xc4, 0x23, 0x37, 0xdb, 0x09, 0x54, 0xb4, 0x0d, 0x17, 0x76, 0x03, 0xbc, 0xed, 0xe3, 0x97, + 0x2e, 0x7e, 0x25, 0xe8, 0x4d, 0x52, 0x7a, 0x74, 0xb9, 0x09, 0xbd, 0x1e, 0xab, 0x35, 0x11, 0x4c, + 0x22, 0x97, 0x3e, 0x82, 0x09, 0x65, 0xbf, 0x19, 0x1e, 0x83, 0xcf, 0xaa, 0x8f, 0xc1, 0xc7, 0xd5, + 0x47, 0xdf, 0x7f, 0x91, 0x63, 0xc6, 0x40, 0x65, 0x03, 0x73, 0xcb, 0xc2, 0x16, 0x8c, 0xcb, 0x42, + 0xf9, 0xf4, 0x40, 0x48, 0x27, 0xb1, 0xaf, 0x1b, 0x3b, 0x3e, 0xe2, 0x74, 0xab, 0xbd, 0x8d, 0x68, + 0x7c, 0xbb, 0x06, 0xba, 0xdf, 0x8a, 0x1e, 0x29, 0xf2, 0x07, 0x95, 0xbe, 0xd3, 0x3a, 0x88, 0x2c, + 0xa4, 0x3f, 0x25, 0xe7, 0x43, 0xad, 0xe0, 0x19, 0x95, 0xe6, 0xf5, 0x74, 0x38, 0xbc, 0x52, 0x04, + 0xe5, 0x97, 0x6f, 0x35, 0x59, 0xb1, 0x7e, 0x70, 0x54, 0x04, 0xea, 0xae, 0x3b, 0x63, 0xd9, 0xec, + 0x8d, 0x9d, 0xb1, 0x07, 0xef, 0x27, 0x5f, 0x89, 0xd1, 0xec, 0x07, 0xd1, 0x2b, 0x31, 0x75, 0x1a, + 0xa3, 0xf7, 0x62, 0xbb, 0xb0, 0x60, 0xe3, 0x43, 0xef, 0x25, 0x3e, 0x5b, 0xb2, 0x3f, 0x86, 0xcb, + 0x3a, 0xc1, 0xdd, 0x5e, 0x9b, 0x06, 0xd7, 0x60, 0xf7, 0xa4, 0xc6, 0x60, 0x77, 0x1c, 0x81, 0x05, + 0xbb, 0x63, 0xe1, 0x8f, 0xc8, 0x9f, 0x2a, 0xbf, 0xa5, 0x75, 0x96, 0x07, 0x8b, 0x3a, 0xf1, 0x4a, + 0xbb, 0x4d, 0x83, 0xec, 0xb7, 0xdc, 0x9e, 0xd3, 0x0d, 0xd1, 0x16, 0x4c, 0x28, 0x3f, 0x63, 0xb2, + 0x8d, 0x52, 0xc3, 0x56, 0xbf, 0x17, 0x15, 0xa8, 0x32, 0x98, 0x02, 0x67, 0x61, 0x28, 0xc7, 0xa7, + 0x87, 0x4c, 0x99, 0xda, 0x66, 0x15, 0xa6, 0x94, 0x9f, 0x52, 0x55, 0xa0, 0x81, 0x2c, 0x95, 0x16, + 0xf4, 0x09, 0xd3, 0x51, 0xac, 0x16, 0x94, 0x4c, 0x93, 0x46, 0x83, 0x3e, 0xbc, 0x46, 0xab, 0x51, + 0xf8, 0x88, 0xc1, 0xf7, 0xd3, 0x33, 0x69, 0xa1, 0x23, 0xac, 0xbf, 0x39, 0x0c, 0x0b, 0x7c, 0x31, + 0xce, 0x72, 0xc5, 0xd1, 0xcf, 0x60, 0x42, 0x59, 0x63, 0x3e, 0xe9, 0x57, 0x85, 0x4b, 0x4b, 0xda, + 0x5e, 0x60, 0x32, 0x58, 0x9f, 0x16, 0x34, 0x63, 0xcb, 0x4d, 0x64, 0x30, 0x75, 0xdb, 0x74, 0x60, + 0x5a, 0x5f, 0x68, 0x2e, 0x86, 0x5e, 0x37, 0x36, 0xa2, 0x83, 0x8a, 0xc8, 0x49, 0xed, 0xa6, 0x71, + 0xb9, 0x69, 0x12, 0x28, 0x7d, 0x13, 0x7d, 0x0d, 0x17, 0x12, 0xab, 0xcc, 0xd5, 0xaa, 0x9b, 0xc6, + 0x06, 0x13, 0xd0, 0x2c, 0x5a, 0xb8, 0x4f, 0x8b, 0x53, 0x9b, 0x4d, 0x36, 0x82, 0xda, 0x30, 0xa9, + 0x2e, 0x3c, 0x97, 0x93, 0xaf, 0x65, 0x4c, 0x25, 0x03, 0x64, 0x42, 0x11, 0x9f, 0x4b, 0xba, 0xf6, + 0x7a, 0xde, 0x44, 0x8d, 0x6a, 0x75, 0x0c, 0xce, 0xb3, 0xdf, 0x84, 0x05, 0x6c, 0xfb, 0x38, 0xc0, + 0xdd, 0x16, 0x56, 0xbd, 0x93, 0xbe, 0x29, 0x0b, 0xf8, 0x57, 0x39, 0x28, 0x9a, 0xe8, 0xd6, 0x71, + 0xb7, 0x8d, 0xb6, 0xa1, 0x10, 0x6f, 0x88, 0xef, 0x6a, 0x4b, 0x7c, 0x15, 0xd2, 0xbb, 0x44, 0xe4, + 0xe6, 0x44, 0x37, 0x37, 0xe1, 0x82, 0x52, 0x76, 0x4a, 0x37, 0xb0, 0x24, 0xaa, 0xaa, 0xfa, 0xae, + 0x51, 0x6f, 0xb7, 0x15, 0xef, 0xd0, 0x71, 0xbb, 0x44, 0x40, 0x54, 0x02, 0x3d, 0x40, 0x54, 0xca, + 0xe7, 0x86, 0xa9, 0x87, 0xb4, 0x54, 0xb8, 0x44, 0x4a, 0x10, 0xeb, 0x53, 0xca, 0xc1, 0xb9, 0x52, + 0xc1, 0x1e, 0xe3, 0x48, 0x62, 0x57, 0x61, 0x64, 0x67, 0xa3, 0x5e, 0xab, 0xf0, 0xa7, 0x3d, 0xec, + 0xf1, 0x67, 0x27, 0x68, 0xb6, 0x1c, 0x9b, 0x55, 0x58, 0x9f, 0xd0, 0xf8, 0x76, 0x3c, 0x3a, 0x9a, + 0xc4, 0xbb, 0x01, 0xa3, 0xbc, 0x88, 0x63, 0xd2, 0xcb, 0xe4, 0x0e, 0x87, 0x12, 0x75, 0xd6, 0xb6, + 0x90, 0xaf, 0x3b, 0xd8, 0x09, 0x94, 0x0f, 0xf3, 0x87, 0x44, 0x14, 0x67, 0x65, 0xfc, 0xbb, 0x3c, + 0x2d, 0x83, 0x8f, 0xd2, 0x62, 0xa6, 0x2e, 0x0b, 0x18, 0x5b, 0xfe, 0x65, 0xfd, 0x59, 0x1e, 0x66, + 0x45, 0x88, 0x17, 0xcd, 0x14, 0x30, 0x30, 0xc8, 0xe4, 0x0f, 0xf5, 0x28, 0x3a, 0x35, 0x19, 0x45, + 0xe7, 0x1b, 0x64, 0xa6, 0xe0, 0xf1, 0x77, 0x4e, 0xf8, 0xf0, 0xed, 0x89, 0x94, 0xbe, 0x87, 0x35, + 0xe9, 0xdb, 0x34, 0x1e, 0x4d, 0xfa, 0xa6, 0xcb, 0xc2, 0xa4, 0x6f, 0x21, 0x73, 0x7f, 0x13, 0x81, + 0xe9, 0x43, 0xb2, 0xb5, 0xb4, 0x26, 0x4f, 0xfa, 0x26, 0x6a, 0x83, 0x3e, 0x93, 0xdf, 0x5a, 0x5f, + 0xa9, 0x91, 0x3d, 0xcd, 0xbb, 0x2a, 0x56, 0xe0, 0x2e, 0xf5, 0x73, 0xe3, 0x34, 0xd5, 0x8d, 0x49, + 0x59, 0x2c, 0x0f, 0x0e, 0xa1, 0x80, 0x58, 0x0f, 0xe4, 0xa3, 0x7b, 0x03, 0xb5, 0xb4, 0x88, 0xa9, + 0x9b, 0x34, 0x9c, 0xc0, 0x23, 0xba, 0x5e, 0x67, 0xd1, 0x89, 0x3f, 0xcc, 0xb1, 0xf8, 0x04, 0xf5, + 0x2d, 0x25, 0x84, 0x7c, 0xf7, 0xb9, 0xa7, 0x58, 0x42, 0x95, 0x66, 0x9e, 0xb8, 0xdd, 0xb6, 0x6a, + 0x09, 0xa5, 0x19, 0xfe, 0xf8, 0xd3, 0xc2, 0xe6, 0x81, 0xdb, 0x6d, 0xdb, 0x71, 0x68, 0xf4, 0x11, + 0x4c, 0x29, 0x45, 0xf2, 0x23, 0xcd, 0x62, 0xf3, 0xa9, 0xe8, 0x6e, 0xdb, 0xd6, 0x21, 0xad, 0xdf, + 0xce, 0xc3, 0x42, 0x46, 0x7e, 0x12, 0xaa, 0x03, 0x52, 0x05, 0x5e, 0xce, 0x14, 0x8f, 0x6a, 0x4c, + 0x9f, 0x51, 0x6a, 0x3c, 0x52, 0x02, 0xa2, 0x4f, 0x61, 0x42, 0x4d, 0x97, 0x92, 0x57, 0x42, 0x67, + 0x9b, 0x53, 0xa4, 0xa8, 0xe0, 0x28, 0x00, 0x88, 0x7a, 0xc2, 0x5f, 0x16, 0xd7, 0x89, 0x44, 0xa3, + 0xe4, 0x5a, 0x39, 0x93, 0xa4, 0x2f, 0x4a, 0x33, 0xd6, 0x5f, 0xcf, 0xc3, 0x52, 0xc6, 0x3c, 0xd4, + 0x71, 0xf8, 0x7f, 0x62, 0x2a, 0x62, 0x19, 0x70, 0x86, 0xbe, 0xa5, 0x0c, 0x38, 0xd6, 0xef, 0xe7, + 0xe1, 0xd2, 0x6e, 0x2f, 0xa0, 0xee, 0xa8, 0xeb, 0xdd, 0x97, 0xb8, 0x1b, 0x7a, 0xfe, 0x6b, 0xea, + 0x4e, 0x87, 0xde, 0x83, 0x91, 0x35, 0xdc, 0xe9, 0x78, 0xfc, 0xb3, 0x76, 0x45, 0x18, 0xa7, 0xe3, + 0xd0, 0x14, 0x68, 0xed, 0x9c, 0xcd, 0xa0, 0xd1, 0x47, 0x30, 0xbe, 0x86, 0x1d, 0x3f, 0xdc, 0xc3, + 0x8e, 0x90, 0x5c, 0x2f, 0x73, 0x54, 0x05, 0x85, 0x03, 0xac, 0x9d, 0xb3, 0x23, 0x68, 0xb4, 0x0c, + 0xc3, 0xdb, 0x5e, 0x77, 0x5f, 0xbe, 0x57, 0x4b, 0x69, 0x90, 0xc0, 0xac, 0x9d, 0xb3, 0x29, 0x2c, + 0x7a, 0x0a, 0x53, 0x95, 0x7d, 0xdc, 0x0d, 0x9f, 0xe2, 0xd0, 0x69, 0x3b, 0xa1, 0xc3, 0x25, 0x9c, + 0x1b, 0x69, 0xc8, 0x1a, 0x30, 0xcd, 0x2a, 0xab, 0x16, 0x54, 0x47, 0x60, 0xe8, 0x69, 0xb0, 0x6f, + 0xfd, 0x5e, 0x0e, 0x8a, 0x2b, 0xde, 0xab, 0xae, 0x71, 0x62, 0x3e, 0xd0, 0x27, 0x46, 0x38, 0x4d, + 0x1b, 0xe0, 0x63, 0x53, 0xf3, 0x2e, 0x0c, 0x6f, 0xbb, 0xdd, 0xfd, 0xd8, 0x47, 0xdd, 0x80, 0x47, + 0xa0, 0xe8, 0x08, 0xdd, 0xee, 0xbe, 0xe8, 0xd2, 0x3b, 0x30, 0x9f, 0x02, 0x89, 0xa6, 0x25, 0x7b, + 0x1b, 0xa6, 0x6c, 0xed, 0x6d, 0x98, 0x33, 0x4e, 0x5a, 0x02, 0xf0, 0x9f, 0xe7, 0x0c, 0xab, 0xcf, + 0xfa, 0x5a, 0x84, 0x51, 0x11, 0x1a, 0x96, 0x7d, 0x07, 0xc4, 0x4f, 0xea, 0xce, 0x29, 0x4e, 0x07, + 0x0f, 0x06, 0x28, 0x0f, 0x41, 0x43, 0x79, 0x9e, 0xcf, 0xf6, 0xf0, 0xc7, 0xdf, 0x60, 0xa7, 0x4a, + 0x5a, 0xa4, 0xcd, 0x35, 0x2f, 0x08, 0xbb, 0xd2, 0xdb, 0xc0, 0x96, 0xbf, 0xad, 0x7f, 0x9f, 0xa7, + 0x81, 0x05, 0x33, 0x96, 0x99, 0x8c, 0x7b, 0xab, 0xce, 0xc7, 0x91, 0xdf, 0xaa, 0xa3, 0x45, 0x18, + 0xdf, 0xaa, 0x6b, 0x91, 0x6f, 0xed, 0xa8, 0x00, 0xdd, 0x66, 0xe9, 0xcd, 0x2a, 0x7e, 0xeb, 0x85, + 0x1b, 0xe2, 0x56, 0xd8, 0xf7, 0x39, 0x73, 0xb2, 0x13, 0xe5, 0xc8, 0x82, 0xc9, 0x47, 0x1d, 0x77, + 0xaf, 0x25, 0x88, 0xb1, 0xce, 0x69, 0x65, 0xe8, 0x26, 0x4c, 0xf3, 0x14, 0x8a, 0x2c, 0x30, 0x30, + 0xcf, 0x0f, 0x66, 0xc7, 0x4a, 0x49, 0xbb, 0x35, 0xaf, 0x1b, 0x3a, 0x6e, 0x17, 0xfb, 0x76, 0xbf, + 0x1b, 0xba, 0x3c, 0xa1, 0xf6, 0xb8, 0x9d, 0x28, 0x47, 0xef, 0xc2, 0x9c, 0x2c, 0xdb, 0xf2, 0x5b, + 0x2f, 0x70, 0x10, 0xfa, 0x34, 0x88, 0x3a, 0x7d, 0xf4, 0x6d, 0x9b, 0x2b, 0x69, 0x0b, 0x1d, 0xaf, + 0xdf, 0x5e, 0xed, 0xbe, 0x74, 0x7d, 0x8f, 0x25, 0xdf, 0x1b, 0xe3, 0x2d, 0xc4, 0xca, 0xad, 0x6d, + 0xe3, 0x09, 0xf8, 0x06, 0x9b, 0xc3, 0xaa, 0x01, 0x4a, 0x72, 0x00, 0xf4, 0x3d, 0x18, 0xaf, 0xd7, + 0xd7, 0xb4, 0x3b, 0x80, 0xb8, 0x59, 0xde, 0x8e, 0x20, 0xac, 0xf7, 0xe1, 0x92, 0x24, 0xc2, 0xa2, + 0x62, 0x2a, 0x4e, 0xe3, 0x3c, 0x85, 0x8b, 0xf4, 0x55, 0x8f, 0x0a, 0xac, 0x1f, 0x27, 0xf0, 0xea, + 0xfd, 0xc3, 0x43, 0xc7, 0x7f, 0x8d, 0x2a, 0x3a, 0xde, 0xd0, 0x40, 0x5e, 0x57, 0x1d, 0xfe, 0xc5, + 0x51, 0xf9, 0x9c, 0x4a, 0xdc, 0x86, 0x59, 0xed, 0x44, 0x8a, 0x2e, 0x95, 0xe2, 0x1f, 0x12, 0xe5, + 0xa8, 0x2c, 0x01, 0xf0, 0xb0, 0xb9, 0x1b, 0xde, 0x3e, 0xf7, 0x25, 0x56, 0x4a, 0xac, 0x87, 0x30, + 0x17, 0xa3, 0xc9, 0x05, 0xab, 0xef, 0x81, 0x14, 0x05, 0x29, 0xd1, 0xa1, 0xea, 0x85, 0x5f, 0x1d, + 0x95, 0xa7, 0xc8, 0xb6, 0xb8, 0x13, 0x05, 0xbf, 0x12, 0x7f, 0x59, 0x4f, 0x55, 0x89, 0xbd, 0xd2, + 0xd1, 0x5e, 0x81, 0xdc, 0x87, 0xf3, 0xac, 0x24, 0x16, 0x62, 0x46, 0x85, 0xe6, 0xa3, 0xe5, 0x80, + 0xd6, 0x1c, 0xf5, 0xf4, 0xa2, 0x3f, 0x2a, 0x91, 0x4f, 0xb1, 0xb5, 0xcb, 0xe2, 0x1d, 0x46, 0xc5, + 0x32, 0x8c, 0xcd, 0x70, 0x25, 0xf2, 0x7d, 0x16, 0x66, 0x49, 0x01, 0xd7, 0xf5, 0x5e, 0x75, 0x70, + 0x7b, 0x9f, 0x66, 0x8b, 0xa9, 0x4e, 0x72, 0xb3, 0xe4, 0xb0, 0x43, 0x08, 0x50, 0x34, 0xeb, 0x73, + 0x98, 0xab, 0x75, 0xb0, 0xe3, 0xc7, 0xdb, 0x43, 0x37, 0x61, 0x94, 0x96, 0xe9, 0x57, 0x62, 0x0e, + 0x29, 0xa2, 0x57, 0x62, 0xbc, 0x92, 0x08, 0x99, 0x2c, 0xf2, 0x87, 0x3a, 0xa4, 0x48, 0xbe, 0x1b, + 0xa1, 0xbf, 0x63, 0x7e, 0x42, 0x86, 0xd1, 0x33, 0x38, 0xeb, 0x33, 0x7a, 0x11, 0x6d, 0x4a, 0x14, + 0x74, 0x32, 0xcf, 0xb5, 0xff, 0x0f, 0x16, 0x2b, 0xbd, 0x1e, 0xee, 0xb6, 0x23, 0x44, 0xa2, 0x06, + 0x9f, 0xcc, 0x23, 0x18, 0x55, 0x60, 0x84, 0x42, 0x4b, 0xd3, 0x04, 0xef, 0xae, 0xa1, 0x3b, 0x14, + 0x8e, 0xcb, 0xdc, 0xb4, 0x01, 0x86, 0x69, 0xb5, 0x61, 0xbe, 0xde, 0xdf, 0x3b, 0x74, 0x59, 0x4e, + 0x1e, 0xea, 0x55, 0x2f, 0xda, 0x5e, 0x17, 0x21, 0x6a, 0xd9, 0x64, 0xdc, 0x8a, 0x12, 0x00, 0xd1, + 0xdb, 0x3d, 0xee, 0x69, 0xff, 0xf2, 0xfe, 0x9d, 0x08, 0x95, 0x7e, 0x0e, 0x59, 0x2b, 0xb4, 0x9a, + 0x87, 0xb1, 0xb5, 0x2e, 0xc2, 0x05, 0x55, 0xcd, 0x63, 0x3b, 0x64, 0x0e, 0x2e, 0xea, 0xea, 0x1b, + 0x2b, 0xfe, 0x0a, 0x66, 0x99, 0x5d, 0x92, 0xc5, 0x0c, 0x5a, 0x8e, 0xc2, 0xe3, 0xe4, 0x1b, 0xcb, + 0xb1, 0x3b, 0x41, 0xea, 0xd6, 0x29, 0xa3, 0xc1, 0x35, 0x96, 0x99, 0x33, 0xd1, 0xcb, 0x65, 0xcd, + 0x48, 0x90, 0x6f, 0x2c, 0x57, 0x47, 0xb9, 0xee, 0x41, 0xa8, 0xb3, 0xe5, 0xff, 0xb5, 0x50, 0x5f, + 0xa6, 0xfe, 0xab, 0x6b, 0xd8, 0xa1, 0x77, 0xcd, 0x66, 0x2f, 0xc0, 0x69, 0xc8, 0xbb, 0x6d, 0xf1, + 0xe9, 0x71, 0xdb, 0xd6, 0x9f, 0xe6, 0xe0, 0x16, 0x33, 0x5b, 0x98, 0xf1, 0xa8, 0x36, 0x91, 0x82, + 0x8c, 0x3e, 0x04, 0x96, 0x3e, 0x83, 0xdb, 0x1d, 0x2d, 0xde, 0xf3, 0x2c, 0x4a, 0x0c, 0x01, 0x55, + 0x60, 0x52, 0xbd, 0x94, 0x8e, 0xbd, 0x32, 0x4e, 0xb1, 0x2b, 0xd8, 0x13, 0x87, 0xcf, 0x1d, 0x79, + 0x51, 0x7d, 0x00, 0x0b, 0xab, 0x5f, 0x93, 0x0d, 0xc1, 0x43, 0x51, 0xf3, 0xbb, 0x81, 0xc8, 0xcb, + 0x6c, 0x66, 0x87, 0xef, 0x18, 0xfd, 0xdb, 0x10, 0x2f, 0x26, 0xdf, 0x4c, 0x4e, 0xc2, 0xa7, 0x2a, + 0x10, 0xfb, 0x4e, 0x68, 0x65, 0xd6, 0xbf, 0xcb, 0xc1, 0xa2, 0xb9, 0x35, 0xce, 0x58, 0xd6, 0xe1, + 0x42, 0xcd, 0xe9, 0x7a, 0x5d, 0xb7, 0xe5, 0x74, 0xea, 0xad, 0x17, 0xb8, 0xdd, 0xef, 0x88, 0xbb, + 0x7a, 0xc9, 0x65, 0x88, 0x0c, 0xc0, 0xd1, 0x05, 0x88, 0x9d, 0xc4, 0x42, 0xef, 0xc3, 0x25, 0x7a, + 0x53, 0xca, 0x78, 0x6f, 0x07, 0xfb, 0x92, 0x1e, 0xeb, 0x59, 0x4a, 0x2d, 0xba, 0x07, 0x17, 0x99, + 0xb0, 0xd2, 0xde, 0xed, 0xba, 0xa1, 0x44, 0x62, 0xa2, 0x82, 0xa9, 0xea, 0xf6, 0x6d, 0x18, 0xdf, + 0xea, 0x61, 0x9e, 0x50, 0x76, 0x0c, 0x86, 0xd7, 0x37, 0xd7, 0x77, 0x58, 0x46, 0xac, 0xed, 0xdd, + 0x9d, 0x42, 0x0e, 0x01, 0x9c, 0x5f, 0x59, 0xdd, 0x58, 0xdd, 0x59, 0x2d, 0xe4, 0x6f, 0x37, 0xd5, + 0xcb, 0x7c, 0xb4, 0x00, 0xf3, 0x2b, 0xab, 0x8d, 0xf5, 0xda, 0x6a, 0x73, 0xe7, 0x87, 0xdb, 0xab, + 0x4d, 0x3d, 0x4a, 0xcb, 0x2c, 0x14, 0xd4, 0xca, 0x9d, 0xad, 0x9d, 0xed, 0x42, 0x0e, 0x15, 0x61, + 0x56, 0x2d, 0x7d, 0xb6, 0x5a, 0xad, 0xec, 0xee, 0xac, 0x6d, 0x16, 0x86, 0xac, 0xe1, 0xb1, 0x7c, + 0x21, 0x7f, 0xfb, 0x67, 0xda, 0x4d, 0x3f, 0x5a, 0x84, 0x22, 0x07, 0xdf, 0xad, 0x57, 0x1e, 0xa5, + 0x37, 0xc1, 0x6a, 0x9f, 0x3e, 0xac, 0x14, 0x72, 0xe8, 0x0a, 0x5c, 0xd6, 0x4a, 0xb7, 0x2b, 0xf5, + 0xfa, 0xb3, 0x2d, 0x7b, 0x65, 0x63, 0xb5, 0x5e, 0x2f, 0xe4, 0x6f, 0x37, 0xb4, 0xc8, 0x1e, 0xa4, + 0x85, 0xa7, 0x0f, 0x2b, 0x4d, 0x7b, 0xf5, 0x8b, 0xdd, 0x75, 0x7b, 0x75, 0x25, 0xd9, 0x82, 0x56, + 0xfb, 0xc3, 0xd5, 0x7a, 0x21, 0x87, 0x2e, 0xc2, 0x8c, 0x56, 0xba, 0xb9, 0x55, 0xc8, 0xdf, 0xbe, + 0xc9, 0x1f, 0x0d, 0xa1, 0x69, 0x80, 0x95, 0xd5, 0x7a, 0x6d, 0x75, 0x73, 0x65, 0x7d, 0xf3, 0x51, + 0xe1, 0x1c, 0x9a, 0x82, 0xf1, 0x8a, 0xfc, 0x99, 0x5b, 0xfe, 0xbb, 0xbf, 0x9b, 0x83, 0x09, 0xb2, + 0xb1, 0xc5, 0xdd, 0xf0, 0x57, 0x8a, 0x10, 0xc0, 0x17, 0x94, 0xc7, 0xbf, 0x4e, 0xfd, 0xe2, 0x53, + 0x1e, 0x57, 0xca, 0x90, 0xf1, 0x29, 0xc0, 0xad, 0xdc, 0xbd, 0x1c, 0xb2, 0xa9, 0x75, 0x2b, 0x26, + 0x65, 0x48, 0xca, 0x66, 0xa9, 0xa5, 0x94, 0x52, 0x2d, 0x84, 0x93, 0xc7, 0x30, 0x45, 0x3e, 0xfe, + 0xb2, 0x16, 0x2d, 0xc4, 0xe1, 0x15, 0x79, 0xa3, 0xb4, 0x68, 0xae, 0x94, 0x81, 0xea, 0x26, 0x69, + 0xff, 0x82, 0xd0, 0xe9, 0x12, 0xa1, 0x7a, 0x4e, 0xcd, 0x03, 0xde, 0x6d, 0x61, 0x76, 0xbd, 0x57, + 0xba, 0x10, 0x2b, 0x6e, 0xdc, 0xbf, 0x97, 0x43, 0x75, 0xfa, 0xb0, 0x49, 0x93, 0x22, 0x90, 0xb8, + 0xc9, 0x4f, 0x8a, 0x17, 0xac, 0x37, 0x65, 0x69, 0x92, 0x4a, 0x11, 0x3f, 0x36, 0x01, 0x25, 0x3f, + 0xce, 0xe8, 0x6a, 0xb4, 0x14, 0xe6, 0xef, 0x76, 0xe9, 0x52, 0xe2, 0xde, 0x60, 0x95, 0xb0, 0x67, + 0xb4, 0x0a, 0xd3, 0xdc, 0xfd, 0x8a, 0x8b, 0x0b, 0x28, 0x4b, 0xe0, 0x48, 0x25, 0xf3, 0x88, 0xce, + 0x93, 0x14, 0x39, 0x50, 0x29, 0x1a, 0x47, 0x5c, 0x0e, 0x29, 0x2d, 0x18, 0xeb, 0xf8, 0xf8, 0x1e, + 0xc2, 0xb4, 0x2e, 0xbd, 0x20, 0xb1, 0x40, 0x46, 0xa1, 0x26, 0xb5, 0x43, 0x4d, 0x98, 0x7f, 0xea, + 0xb8, 0x54, 0xa0, 0xe7, 0xd6, 0x69, 0x61, 0x5b, 0x46, 0xe5, 0x0c, 0x63, 0x73, 0x1d, 0x77, 0xdb, + 0xa5, 0x41, 0x4f, 0x7a, 0xe9, 0xce, 0xad, 0x8b, 0x8f, 0xb0, 0x6e, 0x9b, 0x47, 0x96, 0x1e, 0xa7, + 0xdf, 0x74, 0xdd, 0x52, 0x4a, 0xbb, 0x21, 0x44, 0x4f, 0xa9, 0x14, 0x10, 0xa3, 0xa8, 0xec, 0x89, + 0x53, 0x93, 0x2b, 0x52, 0x27, 0xc0, 0xd0, 0x8d, 0x5f, 0xf5, 0x05, 0x28, 0x65, 0xe2, 0x52, 0x89, + 0xdd, 0xcb, 0xa1, 0xaf, 0xc0, 0x4a, 0x23, 0xf7, 0xcc, 0x0d, 0x5f, 0xf0, 0xab, 0xee, 0x05, 0x23, + 0x01, 0x7e, 0x50, 0x32, 0xa8, 0xdb, 0x30, 0x6b, 0xba, 0x94, 0x94, 0x13, 0x9a, 0x71, 0x63, 0x99, + 0xba, 0x0b, 0x6c, 0x22, 0xcb, 0xb4, 0xd3, 0x17, 0x29, 0xe3, 0x4e, 0x2c, 0x95, 0xe6, 0xa7, 0x30, + 0x4d, 0x76, 0xc9, 0x13, 0x8c, 0x7b, 0x95, 0x8e, 0xfb, 0x12, 0x07, 0x48, 0x3c, 0x77, 0x97, 0x45, + 0x69, 0xb8, 0xb7, 0x72, 0xe8, 0x3b, 0x3c, 0x25, 0x3a, 0x7f, 0x9d, 0x29, 0x1e, 0x6f, 0xd2, 0xb2, + 0x92, 0xf8, 0x45, 0x2b, 0xef, 0xe5, 0xd0, 0xf7, 0x61, 0xf4, 0x11, 0x0e, 0xa9, 0x27, 0xd5, 0x35, + 0x69, 0x9f, 0x67, 0x77, 0xe1, 0xeb, 0x5d, 0xe9, 0xb5, 0x22, 0x3a, 0x1c, 0x57, 0x01, 0xd1, 0x5d, + 0x00, 0xc6, 0x10, 0x28, 0x85, 0x78, 0x75, 0x29, 0xd1, 0x6d, 0xf4, 0x88, 0x7c, 0x3f, 0x3b, 0x38, + 0xc4, 0x27, 0x6d, 0x32, 0x6d, 0x8e, 0x36, 0x60, 0x5a, 0xc6, 0xf6, 0xdb, 0xa4, 0xae, 0xb8, 0x56, + 0x8c, 0x58, 0x70, 0x0a, 0x6a, 0x1f, 0x93, 0x53, 0xc1, 0xec, 0xe5, 0x32, 0x14, 0x00, 0x4a, 0x0b, + 0x0e, 0x20, 0x27, 0x91, 0x81, 0x29, 0xb8, 0x32, 0xff, 0xba, 0xc4, 0x8d, 0x67, 0x64, 0x8f, 0xe1, + 0x62, 0x28, 0xa9, 0xed, 0xea, 0x61, 0x01, 0x22, 0x9e, 0x9b, 0x16, 0xcd, 0xa0, 0x74, 0x2d, 0x03, + 0x82, 0xb1, 0x3b, 0xca, 0x49, 0x56, 0x88, 0x7a, 0xc8, 0x9a, 0x51, 0xd3, 0x45, 0x0b, 0x0b, 0x60, + 0x32, 0xfd, 0x75, 0x09, 0x25, 0xab, 0xc8, 0x57, 0x4f, 0x7b, 0x8e, 0x1e, 0x7d, 0xf5, 0x0c, 0xf1, + 0x02, 0xa2, 0xaf, 0x9e, 0xf1, 0x05, 0xfb, 0x13, 0xa6, 0xb0, 0x6a, 0x49, 0x63, 0x1b, 0xcb, 0x48, + 0xb8, 0xd5, 0x69, 0x15, 0xfc, 0x60, 0x5f, 0x32, 0xd5, 0x35, 0x1e, 0xdc, 0xcb, 0xa1, 0x55, 0xb8, + 0x28, 0x3d, 0xa7, 0xa3, 0x2a, 0x94, 0x82, 0x90, 0xba, 0x09, 0x3e, 0x87, 0x8b, 0x7c, 0x4b, 0x69, + 0x64, 0x0a, 0x92, 0x3b, 0x70, 0xa3, 0x7d, 0x2a, 0x81, 0xc7, 0x30, 0x57, 0x8f, 0x0d, 0x8a, 0x5d, + 0x31, 0x5f, 0xd6, 0x49, 0x28, 0x99, 0xfb, 0x52, 0x69, 0x3d, 0x01, 0xc4, 0x74, 0x42, 0x41, 0xee, + 0xa5, 0x8b, 0x5f, 0xa1, 0x2b, 0xb1, 0x21, 0x91, 0x42, 0x0a, 0x46, 0xd9, 0x4b, 0xda, 0x14, 0xa1, + 0x1d, 0x96, 0xb1, 0x80, 0x65, 0x05, 0x72, 0x7a, 0xce, 0x9e, 0xdb, 0x71, 0x43, 0x17, 0x93, 0x1d, + 0xa6, 0x22, 0xa8, 0x55, 0x62, 0x19, 0x2f, 0xa7, 0x42, 0xa0, 0xcf, 0x60, 0xea, 0x11, 0x0e, 0xa3, + 0xe4, 0x84, 0x68, 0x3e, 0x91, 0xce, 0x90, 0x2f, 0x9d, 0x78, 0xa7, 0xa3, 0x67, 0x44, 0x5c, 0x87, + 0x02, 0xe3, 0x8e, 0x0a, 0x89, 0x2b, 0x09, 0x12, 0x1c, 0xc4, 0xf1, 0x9d, 0xc3, 0x20, 0x75, 0xb6, + 0xee, 0x32, 0x1b, 0x2e, 0x12, 0xdb, 0x56, 0x15, 0xbf, 0x2e, 0x6a, 0x65, 0x32, 0xae, 0xca, 0x9c, + 0x31, 0x2b, 0x1f, 0xba, 0x1e, 0x7d, 0x0a, 0x53, 0x53, 0xed, 0x95, 0x50, 0xfc, 0x15, 0x4d, 0xe3, + 0x01, 0x92, 0x01, 0xde, 0x0d, 0x44, 0x6f, 0x6a, 0x5f, 0xec, 0xd3, 0xd1, 0xfd, 0x0c, 0xc6, 0x65, + 0x7a, 0x37, 0xc9, 0x56, 0xe2, 0xc9, 0xf1, 0x4a, 0xc5, 0x64, 0x05, 0x1f, 0xe9, 0xa7, 0x2c, 0x99, + 0xa3, 0x8e, 0x1f, 0xcf, 0x80, 0x96, 0x3a, 0xb1, 0x1f, 0xc1, 0x84, 0x92, 0xfb, 0x4c, 0x6e, 0xe4, + 0x64, 0x3e, 0xb4, 0xd2, 0x94, 0xd2, 0xf7, 0xc6, 0xf2, 0xbd, 0x1c, 0xba, 0x4b, 0x3f, 0x2d, 0xd4, + 0x8d, 0x7c, 0x2e, 0x42, 0x53, 0xb2, 0x21, 0xc5, 0x50, 0xd0, 0x07, 0xf4, 0xb5, 0x7d, 0xad, 0xef, + 0xfb, 0x44, 0x43, 0x24, 0x78, 0x69, 0x12, 0x44, 0x0c, 0xf1, 0x33, 0xca, 0x4c, 0x14, 0x44, 0x76, + 0x67, 0x3b, 0x08, 0x9b, 0x45, 0x6b, 0xbc, 0x97, 0x43, 0x0f, 0x60, 0x4c, 0xa4, 0x4a, 0x45, 0x97, + 0xf4, 0xae, 0xa6, 0x0f, 0xef, 0x01, 0x00, 0x9b, 0x6c, 0xda, 0x53, 0xbd, 0x3a, 0x75, 0x3a, 0x1f, + 0x90, 0xef, 0x65, 0xfb, 0x94, 0x48, 0x9f, 0x89, 0x6f, 0x26, 0x45, 0x2a, 0x6a, 0x4b, 0xa8, 0x4e, + 0x67, 0x1a, 0x3e, 0x11, 0x78, 0xb5, 0x0c, 0xae, 0x91, 0xc0, 0x6b, 0x4a, 0xec, 0x9a, 0x4a, 0x67, + 0x1d, 0x0a, 0x95, 0x16, 0xe5, 0xe3, 0x32, 0xc3, 0x94, 0xd4, 0x36, 0xe2, 0x15, 0x82, 0xd6, 0x5c, + 0x3c, 0x61, 0xd5, 0x06, 0x76, 0x68, 0x00, 0x82, 0x79, 0x29, 0x13, 0xc4, 0xaa, 0xcc, 0x18, 0x19, + 0xda, 0xc5, 0x6c, 0x8d, 0xe8, 0x43, 0x9d, 0x6f, 0x46, 0xe6, 0x63, 0xca, 0xcb, 0x94, 0xec, 0x5b, + 0x97, 0xe2, 0xf8, 0x52, 0x0f, 0x13, 0xfe, 0x32, 0x12, 0xb4, 0x02, 0x33, 0xfc, 0xb9, 0xb3, 0x9c, + 0x96, 0x34, 0xec, 0xb4, 0xe6, 0x3f, 0x80, 0xe9, 0x55, 0xc2, 0xeb, 0xfb, 0x6d, 0x97, 0x05, 0x5d, + 0x41, 0x7a, 0x14, 0x8d, 0x54, 0xc4, 0x35, 0x91, 0xfc, 0x51, 0x49, 0x4b, 0x25, 0x4f, 0x69, 0x32, + 0xf3, 0x57, 0x69, 0x56, 0x90, 0x55, 0x33, 0x58, 0x71, 0x3d, 0x79, 0x3e, 0x25, 0x11, 0x14, 0xba, + 0xa1, 0xe9, 0x7e, 0x69, 0xd9, 0x9c, 0x0c, 0xd2, 0xde, 0x97, 0x4a, 0x68, 0xfc, 0x14, 0x9a, 0xd9, + 0x19, 0xa2, 0x52, 0xc7, 0x2d, 0xc3, 0x24, 0x18, 0x33, 0x39, 0xa1, 0x77, 0x74, 0xea, 0x19, 0xd9, + 0x9e, 0x52, 0x5b, 0xa0, 0xba, 0xb5, 0x9e, 0x68, 0x08, 0x2d, 0x65, 0xe7, 0x43, 0x52, 0x74, 0xeb, + 0x94, 0x0c, 0x45, 0x8f, 0xe9, 0x36, 0x8b, 0xe2, 0xe7, 0x23, 0x55, 0x53, 0x8d, 0xa7, 0x0f, 0x90, + 0x22, 0x94, 0x39, 0xdb, 0xd0, 0x23, 0xca, 0x2e, 0x95, 0x58, 0xfc, 0xa9, 0x0c, 0xef, 0x8a, 0x89, + 0x4e, 0xa0, 0x7c, 0x0b, 0x67, 0x62, 0x79, 0x7b, 0xa4, 0x79, 0xc4, 0x9c, 0x39, 0xa8, 0xb4, 0x94, + 0x56, 0xcd, 0x29, 0xd6, 0x45, 0xfa, 0x56, 0x65, 0xa4, 0x4b, 0xda, 0x17, 0x2a, 0x39, 0xd8, 0x72, + 0x6a, 0xbd, 0x9c, 0xbb, 0x42, 0x3c, 0xcf, 0x82, 0x24, 0x9a, 0x92, 0x80, 0x21, 0x83, 0x25, 0xce, + 0xaa, 0x5b, 0x63, 0xe0, 0x0c, 0xa6, 0xd1, 0xd9, 0x81, 0x39, 0x63, 0x5a, 0x04, 0x29, 0x46, 0x64, + 0x25, 0x4d, 0x48, 0xa5, 0x8a, 0xe1, 0x92, 0x39, 0x33, 0x0a, 0x7a, 0x4b, 0x57, 0xfd, 0xcd, 0x79, + 0x22, 0x4a, 0x37, 0x06, 0x40, 0xf1, 0x09, 0xfd, 0x8a, 0x7e, 0x36, 0x13, 0x6d, 0x5c, 0x53, 0x8c, + 0x01, 0x29, 0x0d, 0x58, 0x59, 0x20, 0x72, 0x0f, 0xcc, 0x9a, 0x32, 0x33, 0xa5, 0x4e, 0xf1, 0xf5, + 0x74, 0x9a, 0xd1, 0xc6, 0x6a, 0x88, 0xe0, 0x04, 0xa9, 0x33, 0x93, 0x99, 0x41, 0x23, 0x43, 0x9b, + 0x2c, 0xc9, 0xfd, 0x70, 0xf2, 0x2e, 0xa7, 0x5b, 0x86, 0x66, 0x4d, 0x79, 0x5b, 0xe2, 0x86, 0x1b, + 0x53, 0x5a, 0x0e, 0x39, 0x0d, 0x99, 0x89, 0x5f, 0x1a, 0xcc, 0x88, 0xa3, 0x53, 0x57, 0x8d, 0x38, + 0x46, 0xd2, 0x57, 0xd3, 0x01, 0xa2, 0x1d, 0x61, 0x48, 0x40, 0x25, 0x77, 0x44, 0x7a, 0x2a, 0x2c, + 0xb9, 0x23, 0xb2, 0xf2, 0x57, 0xd9, 0xe2, 0xd0, 0xa5, 0x4c, 0x4b, 0x46, 0xb6, 0x92, 0x0c, 0x95, + 0xab, 0x18, 0x2d, 0x5c, 0xac, 0xdb, 0xa7, 0x5d, 0xb6, 0xaf, 0xe0, 0x72, 0x6a, 0x66, 0x12, 0xf4, + 0x76, 0xe2, 0x40, 0xa7, 0xcc, 0x44, 0x7a, 0x4f, 0xa7, 0xb4, 0xa4, 0x22, 0xd2, 0x8a, 0x15, 0xcb, + 0x5f, 0x92, 0x60, 0xfd, 0x86, 0xe4, 0x26, 0x8c, 0xf5, 0x2b, 0x09, 0x4a, 0x4e, 0xc2, 0xfa, 0x4d, + 0xf9, 0x4c, 0x24, 0x4f, 0x55, 0xfa, 0x25, 0x44, 0xba, 0x78, 0xc5, 0x69, 0x78, 0xea, 0x49, 0xba, + 0x96, 0x46, 0x67, 0x85, 0xaa, 0x1c, 0x22, 0x5f, 0x09, 0xba, 0xac, 0x4d, 0x93, 0xf6, 0xb9, 0x2d, + 0x69, 0x83, 0xd3, 0xbf, 0xb4, 0x35, 0x6a, 0x2e, 0x96, 0xf9, 0x51, 0x52, 0x7b, 0xb1, 0x90, 0xa4, + 0xa1, 0x99, 0x8a, 0xe5, 0x2c, 0xb0, 0xde, 0x2c, 0xc6, 0x27, 0x47, 0xeb, 0x50, 0xfa, 0x90, 0x90, + 0x3a, 0x35, 0x03, 0xba, 0x94, 0x2e, 0xea, 0x5e, 0x64, 0xca, 0x03, 0x8b, 0x1e, 0x26, 0xde, 0x10, + 0x5e, 0x92, 0x76, 0x2f, 0xa5, 0x34, 0xc3, 0xcc, 0xb1, 0x4d, 0xbd, 0x8b, 0x0c, 0xa9, 0x5e, 0x24, + 0x0f, 0xcd, 0xcc, 0x04, 0x63, 0x10, 0xf3, 0x24, 0x57, 0x4e, 0xa5, 0x98, 0x99, 0xfb, 0x25, 0xb5, + 0xa7, 0x3f, 0x55, 0xb8, 0x72, 0x22, 0xa1, 0x0b, 0xba, 0x15, 0x97, 0xf1, 0xd2, 0x72, 0xbe, 0x64, + 0x70, 0xfd, 0x59, 0x53, 0x2e, 0x18, 0xc5, 0x76, 0x9b, 0x9a, 0x28, 0xc6, 0x30, 0x0b, 0x92, 0xbd, + 0xa5, 0x50, 0xcb, 0xc8, 0x0c, 0x93, 0xda, 0xc3, 0x1f, 0x29, 0xec, 0x2d, 0x96, 0xc1, 0x45, 0x1a, + 0x15, 0x06, 0xa4, 0x78, 0x49, 0xa5, 0xbd, 0x49, 0xfd, 0xd1, 0x92, 0xe9, 0x57, 0xa4, 0xec, 0x92, + 0x95, 0x9c, 0xc5, 0x68, 0xda, 0x9d, 0x4b, 0x0e, 0x91, 0xd0, 0xbb, 0x14, 0x33, 0xcc, 0x0e, 0xea, + 0x98, 0xe4, 0xc3, 0x86, 0xb4, 0x2d, 0x31, 0x3e, 0x9c, 0x9e, 0xd8, 0x25, 0x43, 0x63, 0x9a, 0xa9, + 0xbb, 0xfb, 0x5d, 0x25, 0x13, 0x8b, 0xd4, 0x97, 0x92, 0x89, 0x60, 0x24, 0x8b, 0x31, 0x25, 0x6e, + 0xd9, 0x8a, 0xfc, 0xd4, 0xd5, 0x9c, 0x1a, 0xa8, 0x94, 0x9e, 0x4a, 0x44, 0xb2, 0x1b, 0x63, 0x12, + 0x0e, 0x85, 0xa0, 0x9a, 0xd0, 0x42, 0x12, 0x34, 0xe4, 0xd6, 0x90, 0x04, 0x8d, 0x19, 0x30, 0x98, + 0x09, 0xc6, 0xf6, 0x3a, 0x58, 0x35, 0xc1, 0x28, 0xe9, 0x28, 0x62, 0xb6, 0x10, 0xf4, 0x09, 0xb5, + 0x84, 0x64, 0x9b, 0x4f, 0xe6, 0x75, 0x4a, 0x11, 0xb7, 0x7c, 0x20, 0x2e, 0x03, 0x68, 0x83, 0x3a, + 0xe5, 0xc1, 0xc6, 0x0d, 0x8a, 0xa4, 0x1b, 0x37, 0xd4, 0x8e, 0xa6, 0xdb, 0x49, 0x27, 0xd5, 0x70, + 0xc6, 0x72, 0xae, 0x0c, 0x31, 0xd7, 0xe5, 0x5c, 0x99, 0x22, 0x99, 0x53, 0x1d, 0x78, 0x47, 0x68, + 0xf2, 0x11, 0xbd, 0x2b, 0x99, 0xa1, 0xc8, 0x4b, 0x4b, 0xd9, 0xf1, 0xbb, 0xf9, 0x3d, 0x5e, 0x21, + 0x1e, 0x71, 0x19, 0x99, 0x22, 0xc9, 0x2b, 0x81, 0xac, 0xa5, 0x36, 0x94, 0x1a, 0xaa, 0x79, 0x5b, + 0x18, 0xab, 0x75, 0xba, 0x29, 0xf1, 0xc4, 0x55, 0xd2, 0xd9, 0x02, 0x4a, 0x14, 0x7c, 0x59, 0xd5, + 0x4d, 0x13, 0xc1, 0x9d, 0x55, 0x01, 0xc5, 0x10, 0xaf, 0xd9, 0x15, 0xef, 0x1a, 0xcd, 0x39, 0x4d, + 0xde, 0xd1, 0x75, 0xbd, 0x8c, 0xb0, 0x1c, 0x03, 0x6f, 0x4a, 0xd1, 0x4f, 0x44, 0xee, 0xd2, 0x64, + 0xec, 0xfe, 0x1b, 0x31, 0xb3, 0xab, 0x39, 0x90, 0x43, 0x29, 0x2b, 0x35, 0x00, 0x7a, 0x4a, 0xaf, + 0xd8, 0xb7, 0xd6, 0x57, 0x6a, 0xdc, 0xa3, 0xcb, 0xf3, 0x13, 0xd7, 0x56, 0xcf, 0xdc, 0xf0, 0x05, + 0x4b, 0x66, 0xa1, 0x70, 0x1f, 0x06, 0xa2, 0x21, 0x36, 0x1e, 0xa0, 0x3a, 0x95, 0xdc, 0xb5, 0x52, + 0xc3, 0xcd, 0x95, 0x81, 0x60, 0xc9, 0x4c, 0x90, 0xa6, 0xdf, 0xa2, 0x82, 0x01, 0x39, 0x78, 0x7a, + 0x37, 0x53, 0xfa, 0x90, 0x25, 0x5f, 0xb0, 0x6d, 0x63, 0x26, 0x73, 0x52, 0xf6, 0xfd, 0x08, 0xe6, + 0xd8, 0x84, 0xc7, 0x1e, 0x91, 0x68, 0xfd, 0x51, 0xca, 0x4b, 0x29, 0xe5, 0x68, 0x93, 0x7a, 0x6e, + 0xc4, 0x4b, 0x15, 0x2d, 0xc6, 0xfc, 0x4a, 0x25, 0x95, 0x1e, 0x5b, 0x4a, 0x22, 0xb6, 0xbf, 0xd1, + 0x52, 0x6a, 0x88, 0x8d, 0x65, 0xbe, 0x94, 0x5a, 0xe9, 0xe9, 0x96, 0x32, 0x46, 0x50, 0x5f, 0x4a, + 0xbd, 0x9b, 0x29, 0x7d, 0x18, 0xbc, 0x94, 0x66, 0x32, 0xa7, 0x5e, 0xca, 0xd8, 0x0b, 0x1e, 0xad, + 0x3f, 0xa6, 0xa5, 0x8c, 0xc3, 0xb3, 0xa5, 0x8c, 0x97, 0xc6, 0x14, 0xd2, 0x8c, 0xa5, 0x8c, 0x63, + 0x7e, 0x41, 0xe9, 0xb1, 0x27, 0x42, 0xa7, 0x5a, 0x4c, 0x11, 0x6e, 0x22, 0x86, 0xda, 0x78, 0x80, + 0x9e, 0x51, 0x6b, 0x48, 0xac, 0xfc, 0x64, 0x0b, 0xba, 0x98, 0x46, 0x94, 0x2e, 0xe9, 0xba, 0x90, + 0xb3, 0xe2, 0xdd, 0x4d, 0xed, 0x4b, 0xd6, 0x7a, 0xb0, 0x65, 0x8d, 0x93, 0x3a, 0xed, 0xc2, 0x3e, + 0x15, 0x4c, 0x33, 0xf1, 0xca, 0x2a, 0xd6, 0x2b, 0x75, 0x71, 0x53, 0x6b, 0xd0, 0x0e, 0xb5, 0xf5, + 0x24, 0xcb, 0x15, 0x3b, 0x51, 0xda, 0x73, 0xae, 0x81, 0x54, 0x13, 0xcf, 0xb6, 0x54, 0xaa, 0x69, + 0x6f, 0xba, 0x24, 0xd5, 0x24, 0xf6, 0x0a, 0x3d, 0xb6, 0x3b, 0x3e, 0x51, 0x93, 0xda, 0x49, 0x1d, + 0x4a, 0x9f, 0x3f, 0x71, 0xa3, 0xa9, 0x83, 0x37, 0x96, 0xd1, 0x3a, 0xdd, 0x80, 0x7a, 0x71, 0x96, + 0x92, 0x69, 0x26, 0x43, 0xf7, 0xc7, 0x9a, 0xf4, 0x86, 0xd5, 0xfb, 0x94, 0xd6, 0x76, 0x7a, 0xa7, + 0xa4, 0x06, 0x7e, 0xc2, 0xd1, 0xa5, 0xed, 0x0e, 0x26, 0x05, 0x32, 0x85, 0x77, 0xd0, 0xcc, 0xc4, + 0xfd, 0x73, 0xd1, 0x0f, 0x60, 0x5c, 0x20, 0x0f, 0x9e, 0x90, 0x38, 0x36, 0x9d, 0x90, 0xcf, 0x60, + 0x42, 0x71, 0x0f, 0x46, 0x69, 0x2d, 0x65, 0x88, 0x94, 0x13, 0x8a, 0xf3, 0xf2, 0xe9, 0xf1, 0x57, + 0x60, 0x4a, 0x73, 0x7e, 0x96, 0x82, 0x90, 0xc9, 0x25, 0x3a, 0x8b, 0x8a, 0xe6, 0xe4, 0x2c, 0xa9, + 0x98, 0x5c, 0x9f, 0xb3, 0x85, 0x32, 0xe5, 0x21, 0xa7, 0x22, 0x94, 0x25, 0x5f, 0x94, 0x2a, 0x42, + 0x99, 0xe9, 0xed, 0xe7, 0xf7, 0x61, 0x82, 0x6f, 0x8f, 0xcc, 0x95, 0x4d, 0xd7, 0x96, 0xe7, 0x14, + 0x9f, 0xc1, 0x7e, 0xdb, 0x0d, 0x6b, 0x5e, 0xf7, 0xb9, 0xbb, 0x3f, 0x70, 0x91, 0x93, 0x28, 0x8d, + 0x65, 0xd4, 0xa0, 0x81, 0xb4, 0x45, 0x78, 0x73, 0x1c, 0xbe, 0xf2, 0xfc, 0x03, 0xb7, 0xbb, 0x3f, + 0x80, 0xe4, 0x55, 0x9d, 0x64, 0x1c, 0x8f, 0xd1, 0xad, 0xa7, 0xd3, 0x1d, 0x88, 0x9f, 0xa1, 0x2d, + 0x2f, 0xd2, 0x7b, 0xfb, 0xd3, 0xf6, 0x38, 0xfd, 0xe6, 0xe0, 0x72, 0xe4, 0x6d, 0x67, 0xe3, 0x96, + 0xe7, 0xb7, 0x07, 0x13, 0x2b, 0xeb, 0xbe, 0x6d, 0x31, 0xb4, 0xc6, 0x32, 0xa1, 0x5a, 0x4f, 0xa5, + 0x3a, 0x08, 0x3b, 0xe3, 0x6b, 0xb1, 0x40, 0xc7, 0x7e, 0xca, 0xde, 0xa6, 0x9f, 0x0c, 0xc2, 0x81, + 0x09, 0xa7, 0xdf, 0xf6, 0xf1, 0x73, 0xec, 0x53, 0x97, 0xc9, 0x41, 0xce, 0x82, 0x3a, 0x78, 0x63, + 0x99, 0x50, 0xa9, 0x27, 0xa8, 0xa4, 0x41, 0x67, 0x09, 0x4a, 0x74, 0x68, 0x27, 0xec, 0x4d, 0x1a, + 0x99, 0x0f, 0xa9, 0xcd, 0x72, 0x77, 0x7d, 0xc0, 0x8c, 0x08, 0x27, 0x5e, 0x01, 0xd8, 0xb8, 0x4f, + 0x30, 0xeb, 0x0a, 0x66, 0x12, 0x22, 0xb5, 0xcd, 0x1f, 0x08, 0xe3, 0xe4, 0xc0, 0x66, 0xd3, 0xbd, + 0x11, 0xc6, 0x65, 0x92, 0x0f, 0xa4, 0xa8, 0xf5, 0x5a, 0x0a, 0x8b, 0xd2, 0x94, 0xea, 0x32, 0x18, + 0xa0, 0x0a, 0x93, 0xa2, 0xd5, 0x64, 0x17, 0xca, 0xbd, 0xa8, 0x31, 0x0b, 0x46, 0x9c, 0x04, 0x33, + 0x4b, 0x6c, 0x78, 0xad, 0x03, 0xd5, 0x2c, 0xa1, 0x64, 0x4f, 0x28, 0xe9, 0xb9, 0x0d, 0xf8, 0x07, + 0x89, 0x26, 0x38, 0x50, 0x1d, 0x34, 0xd4, 0xfc, 0x09, 0xaa, 0x59, 0x42, 0xcf, 0xf4, 0x20, 0xcd, + 0x12, 0xb4, 0x41, 0x9d, 0xf2, 0x60, 0xb3, 0x04, 0x45, 0xd2, 0xcd, 0x12, 0x6a, 0x47, 0xd3, 0xd9, + 0x05, 0x4a, 0xa6, 0x7a, 0x90, 0x02, 0x6f, 0x6a, 0x16, 0x88, 0x0c, 0xdf, 0x8b, 0x8b, 0x86, 0xec, + 0x34, 0x52, 0xdd, 0x4f, 0xcf, 0x5c, 0x53, 0xd2, 0x1d, 0x09, 0xee, 0xe5, 0xd0, 0x26, 0xcd, 0x6e, + 0xce, 0x19, 0x98, 0x8d, 0x83, 0xd0, 0x77, 0xe9, 0x3b, 0xa5, 0xf4, 0xaf, 0xb5, 0x90, 0x6f, 0x0d, + 0x38, 0x8d, 0x77, 0x09, 0xbd, 0xba, 0x99, 0x5e, 0x26, 0x5e, 0x86, 0x45, 0x87, 0x9b, 0xff, 0x4e, + 0xd3, 0xc5, 0xf4, 0x2d, 0x3e, 0xca, 0x6e, 0xbd, 0xd3, 0x51, 0x0b, 0x51, 0x74, 0x42, 0x2e, 0xb1, + 0xdf, 0x81, 0xf3, 0x0c, 0x29, 0xf5, 0x1b, 0x39, 0xa9, 0xe2, 0xa0, 0xfb, 0xc2, 0x45, 0x8b, 0xa0, + 0x68, 0x55, 0xa9, 0xfd, 0xba, 0x0f, 0xe3, 0xcc, 0x96, 0x7f, 0x72, 0x94, 0x4f, 0x84, 0x23, 0x57, + 0x56, 0xc7, 0xd2, 0x7d, 0x1b, 0xa7, 0xd4, 0x0b, 0xef, 0xd3, 0x4f, 0xe4, 0xf7, 0xe9, 0x7d, 0x8a, + 0x30, 0x5b, 0xa6, 0xe3, 0xcf, 0xc5, 0xe2, 0xf9, 0xf1, 0x29, 0x65, 0x0c, 0x52, 0xa6, 0x79, 0x4a, + 0xeb, 0xfe, 0x85, 0x04, 0x36, 0xfa, 0x44, 0x3c, 0x1f, 0x90, 0xc8, 0x49, 0xa0, 0x8c, 0x39, 0x9b, + 0x66, 0xd3, 0xfc, 0x26, 0xc8, 0x92, 0xc1, 0x0e, 0xec, 0xf6, 0x49, 0xee, 0x7d, 0x06, 0x4f, 0x5d, + 0x1a, 0x95, 0x2d, 0x2a, 0x78, 0x25, 0x22, 0x4d, 0xa6, 0x13, 0x5a, 0x4a, 0x0f, 0x4e, 0x49, 0x17, + 0xe3, 0x31, 0x55, 0xac, 0x92, 0x29, 0xbb, 0xd2, 0x86, 0x97, 0x11, 0xec, 0x32, 0xd2, 0x24, 0x93, + 0xe4, 0x32, 0xd0, 0xb2, 0x14, 0x53, 0xb6, 0x60, 0x67, 0x43, 0x6e, 0x5d, 0x38, 0x20, 0x9d, 0x7c, + 0xb0, 0x19, 0x42, 0x90, 0xe1, 0xa6, 0x69, 0xe0, 0x5a, 0xa4, 0x91, 0xfb, 0x09, 0x95, 0xff, 0xcc, + 0x79, 0x7a, 0x52, 0x89, 0xdd, 0x52, 0x2e, 0x2b, 0xb3, 0x33, 0xfc, 0x1c, 0xd0, 0x77, 0x19, 0xe6, + 0x58, 0x9c, 0x37, 0x07, 0x50, 0x11, 0x33, 0xf1, 0xf6, 0x40, 0x38, 0x79, 0x6f, 0xb1, 0xc0, 0xbe, + 0xb0, 0xe6, 0xf6, 0x06, 0xc4, 0x16, 0x35, 0x5c, 0x25, 0xa5, 0x24, 0xc1, 0x11, 0x04, 0x75, 0xef, + 0xae, 0xcc, 0x31, 0xa4, 0x4d, 0xff, 0x17, 0x50, 0x8e, 0x6e, 0x64, 0x4f, 0xb7, 0x08, 0xe9, 0x12, + 0x3d, 0x4a, 0xa6, 0x06, 0x42, 0x59, 0x31, 0x1f, 0x4b, 0xd7, 0xd2, 0x66, 0x38, 0x50, 0xae, 0xfa, + 0xb9, 0x2f, 0x49, 0x2c, 0x2a, 0x6d, 0x5a, 0x7c, 0xdb, 0x0c, 0xdb, 0x11, 0x7f, 0xa8, 0x72, 0x26, + 0x84, 0x92, 0xab, 0x7d, 0x7a, 0x42, 0xf2, 0xc2, 0x34, 0x46, 0xc8, 0xca, 0x58, 0xde, 0xd3, 0xf8, + 0x83, 0xc4, 0x97, 0xe2, 0xb4, 0x0b, 0xea, 0x44, 0x8f, 0x33, 0x92, 0xf9, 0x8b, 0xa4, 0x2c, 0x97, + 0x9a, 0x4b, 0x49, 0xae, 0x6e, 0x46, 0xf2, 0xa3, 0x1a, 0x39, 0xa6, 0xac, 0x09, 0x2d, 0x79, 0x4a, + 0xcd, 0xde, 0x88, 0xac, 0x0e, 0x86, 0xac, 0x2a, 0x25, 0x10, 0x95, 0xf6, 0x06, 0xaa, 0x43, 0x89, + 0x6d, 0x11, 0xd3, 0x9b, 0x73, 0xe9, 0x51, 0x6f, 0xaa, 0xcc, 0xd0, 0x2e, 0xea, 0x50, 0x62, 0xdb, + 0xe5, 0x2c, 0x89, 0x36, 0x69, 0xa2, 0x3c, 0x23, 0xc5, 0x1b, 0xca, 0xb3, 0xc4, 0xf4, 0x97, 0xfc, + 0xa5, 0xec, 0x86, 0xd1, 0x8f, 0x61, 0xce, 0xf8, 0x94, 0x5f, 0xde, 0x69, 0x67, 0x3d, 0xf4, 0x1f, + 0x44, 0xfc, 0x00, 0x8a, 0x69, 0x99, 0x4e, 0x22, 0x0f, 0xff, 0xec, 0xf4, 0x33, 0x92, 0xa7, 0x0e, + 0x4c, 0x99, 0xb2, 0x09, 0xb3, 0xa6, 0xec, 0x21, 0xf2, 0x70, 0x64, 0xa4, 0x16, 0x31, 0x3e, 0x23, + 0xd8, 0x86, 0x39, 0x63, 0x06, 0x0f, 0x39, 0x33, 0x59, 0xf9, 0x3d, 0x8c, 0x14, 0xbf, 0x84, 0xf9, + 0x94, 0x74, 0x15, 0xd1, 0xc5, 0x5b, 0x66, 0x3a, 0x8b, 0x0c, 0x07, 0x80, 0x52, 0x7a, 0x26, 0x04, + 0xe9, 0xf7, 0x31, 0x30, 0x59, 0x42, 0xc9, 0x98, 0x1e, 0x06, 0xed, 0xd0, 0x4d, 0x68, 0x4a, 0x8d, + 0xa0, 0x6e, 0xc2, 0x8c, 0xd4, 0x09, 0x29, 0xcf, 0x3f, 0xe6, 0x53, 0xb2, 0x21, 0x64, 0x50, 0x3d, + 0x41, 0x6f, 0x37, 0x05, 0xff, 0xd7, 0xc3, 0xe3, 0xc7, 0x7c, 0x09, 0x8d, 0xb1, 0xf3, 0x8d, 0xfd, + 0x54, 0x9e, 0x1b, 0x77, 0x3a, 0x19, 0x62, 0x10, 0x52, 0xdf, 0x1b, 0x13, 0xc8, 0xc6, 0x7d, 0xa2, + 0x44, 0xa8, 0xb8, 0x59, 0x1c, 0x35, 0x81, 0x4c, 0x05, 0xcf, 0x8f, 0x61, 0xb2, 0xae, 0x36, 0x6e, + 0x68, 0x24, 0x75, 0x53, 0x48, 0x2f, 0xfb, 0xc1, 0x7d, 0x1f, 0x78, 0x2b, 0x56, 0xe9, 0x74, 0x4e, + 0x34, 0x8a, 0x54, 0x9b, 0xac, 0x16, 0x8c, 0x58, 0x72, 0x6a, 0x53, 0x8c, 0x6d, 0x69, 0x93, 0x35, + 0xc7, 0x2f, 0x5e, 0xa5, 0x53, 0x1a, 0x85, 0x72, 0xcc, 0xd0, 0xc1, 0xe5, 0x26, 0x32, 0x44, 0x8c, + 0x7c, 0xa2, 0x3e, 0x04, 0x67, 0x01, 0x20, 0x33, 0x8c, 0x88, 0xf1, 0x07, 0xe0, 0xb1, 0x88, 0x91, + 0x0d, 0x28, 0x8a, 0x50, 0x6c, 0x2c, 0x18, 0x5a, 0x14, 0xfc, 0x29, 0x72, 0x8d, 0x4a, 0x8f, 0xd5, + 0x96, 0x31, 0x6f, 0x85, 0x78, 0x98, 0x13, 0x69, 0x39, 0x4a, 0x89, 0x7f, 0x92, 0xb1, 0x1b, 0x20, + 0x0a, 0x66, 0x22, 0xed, 0x33, 0x89, 0xf8, 0x26, 0xa5, 0xcb, 0x86, 0x1a, 0x29, 0x59, 0x4d, 0xaa, + 0xa1, 0x4f, 0xa4, 0xe7, 0x88, 0x21, 0x1e, 0x4a, 0x69, 0xc1, 0x58, 0xc7, 0x09, 0x85, 0xb0, 0x90, + 0x91, 0x28, 0x50, 0x4a, 0xab, 0x83, 0x13, 0x1a, 0x96, 0x6e, 0x9f, 0x04, 0x94, 0xb7, 0x8a, 0x65, + 0x68, 0xc5, 0x24, 0x14, 0x7a, 0xdb, 0xe0, 0xea, 0x6b, 0xca, 0xc1, 0x57, 0x1a, 0x94, 0xa3, 0x10, + 0x3d, 0x83, 0xc5, 0x98, 0x2b, 0xb2, 0xde, 0xd2, 0x20, 0x02, 0xa9, 0x2b, 0xf8, 0x0c, 0x16, 0xf9, + 0xdb, 0xe8, 0x33, 0x26, 0xbc, 0x07, 0x8b, 0x59, 0xd9, 0x07, 0xd1, 0x6d, 0xb3, 0xbb, 0xb1, 0x71, + 0x7a, 0xd2, 0x45, 0xd7, 0xab, 0x49, 0xb7, 0xe3, 0xd8, 0xba, 0x9f, 0x96, 0xad, 0x3c, 0x85, 0x69, + 0x3d, 0xf3, 0x20, 0x52, 0x59, 0x47, 0x22, 0x0f, 0x62, 0xe9, 0x4a, 0x4a, 0x2d, 0xdf, 0x1f, 0x9f, + 0x51, 0x46, 0x2f, 0x2b, 0xd4, 0x78, 0x09, 0xf1, 0xcc, 0x7e, 0x25, 0x43, 0x1a, 0x43, 0xf4, 0x7d, + 0x98, 0x89, 0xde, 0xb7, 0x31, 0x12, 0x06, 0xb0, 0x0c, 0x7b, 0xd1, 0x4c, 0xf4, 0xd2, 0xed, 0xf4, + 0xe8, 0x6b, 0x82, 0xdb, 0x47, 0xe8, 0x57, 0x12, 0x1e, 0xd8, 0xda, 0x18, 0x4e, 0xc2, 0xf4, 0x95, + 0xb9, 0x3d, 0xed, 0xea, 0xb4, 0xe8, 0x71, 0x33, 0xc7, 0xf4, 0x51, 0x8f, 0x5b, 0x66, 0xdc, 0x21, + 0x29, 0x61, 0xa6, 0xd0, 0xe9, 0xc0, 0xb5, 0x81, 0x51, 0x88, 0xd0, 0x5d, 0x2d, 0xb2, 0xc0, 0xe0, + 0x78, 0x45, 0x59, 0xcf, 0x14, 0x4c, 0xc1, 0x7c, 0x24, 0x8f, 0xcf, 0x88, 0x2b, 0x24, 0x9f, 0x29, + 0x64, 0x46, 0x03, 0xfa, 0x92, 0xc6, 0x5d, 0xe5, 0x1f, 0x19, 0x1a, 0x2b, 0x03, 0x77, 0x9d, 0x6e, + 0x0b, 0x0f, 0xb8, 0xae, 0xb8, 0xa6, 0x5f, 0xd2, 0x25, 0x10, 0xa9, 0x9c, 0xbf, 0xc4, 0xb5, 0x93, + 0x34, 0xe2, 0x83, 0x89, 0xa4, 0xcd, 0x4b, 0x75, 0xe5, 0x17, 0x7f, 0xb9, 0x94, 0xfb, 0xc5, 0x2f, + 0x97, 0x72, 0xff, 0xf6, 0x97, 0x4b, 0xb9, 0xff, 0xf2, 0xcb, 0xa5, 0xdc, 0x8f, 0x96, 0x4f, 0x16, + 0x2a, 0xb1, 0xd5, 0x71, 0x71, 0x37, 0xbc, 0xcb, 0xc8, 0x9d, 0xa7, 0xff, 0x3d, 0xf8, 0xdf, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x9e, 0xad, 0x72, 0xee, 0xfa, 0xce, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -32413,6 +32423,13 @@ func (m *ChangeUserAuthenticationRequest) MarshalToSizedBuffer(dAtA []byte) (int i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.LoginIP) > 0 { + i -= len(m.LoginIP) + copy(dAtA[i:], m.LoginIP) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.LoginIP))) + i-- + dAtA[i] = 0x2a + } if len(m.NewDeviceName) > 0 { i -= len(m.NewDeviceName) copy(dAtA[i:], m.NewDeviceName) @@ -39487,6 +39504,10 @@ func (m *ChangeUserAuthenticationRequest) Size() (n int) { if l > 0 { n += 1 + l + sovAuthservice(uint64(l)) } + l = len(m.LoginIP) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -59165,6 +59186,38 @@ func (m *ChangeUserAuthenticationRequest) Unmarshal(dAtA []byte) error { } m.NewDeviceName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LoginIP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + 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 ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LoginIP = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipAuthservice(dAtA[iNdEx:]) diff --git a/api/client/proxy.go b/api/client/proxy.go index 500217fd9941e..786d9ca8295d7 100644 --- a/api/client/proxy.go +++ b/api/client/proxy.go @@ -27,8 +27,14 @@ import ( "github.com/gravitational/trace" "golang.org/x/net/proxy" + + "github.com/gravitational/teleport/api/utils/tlsutils" ) +// PROXYHeaderGetter is used if present to get signed PROXY headers to propagate client's IP. +// Used by proxy's web server to make calls on behalf of connected clients. +type PROXYHeaderGetter func() ([]byte, error) + type dialProxyConfig = dialConfig // DialProxyOption allows setting options as functional arguments to DialProxy. @@ -44,7 +50,17 @@ func WithTLSConfig(tlsConfig *tls.Config) DialProxyOption { // DialProxy creates a connection to a server via an HTTP or SOCKS5 Proxy. func DialProxy(ctx context.Context, proxyURL *url.URL, addr string, opts ...DialProxyOption) (net.Conn, error) { - return DialProxyWithDialer(ctx, proxyURL, addr, &net.Dialer{}, opts...) + var cfg dialProxyConfig + for _, opt := range opts { + opt(&cfg) + } + + var dialer ContextDialer = &net.Dialer{} + if cfg.proxyHeaderGetter != nil { + dialer = NewPROXYHeaderDialer(dialer, cfg.proxyHeaderGetter) + } + + return DialProxyWithDialer(ctx, proxyURL, addr, dialer, opts...) } // DialProxyWithDialer creates a connection to a server via an HTTP or SOCKS5 @@ -53,7 +69,7 @@ func DialProxyWithDialer( ctx context.Context, proxyURL *url.URL, addr string, - dialer *net.Dialer, + dialer ContextDialer, opts ...DialProxyOption, ) (net.Conn, error) { if proxyURL == nil { @@ -88,24 +104,19 @@ func dialProxyWithHTTPDialer( ctx context.Context, proxyURL *url.URL, addr string, - dialer *net.Dialer, + dialer ContextDialer, tlsConfig *tls.Config, ) (net.Conn, error) { var conn net.Conn var err error if proxyURL.Scheme == "https" { - tlsDialer := tls.Dialer{ - NetDialer: dialer, - Config: tlsConfig, - } - conn, err = tlsDialer.DialContext(ctx, "tcp", proxyURL.Host) + conn, err = tlsutils.TLSDial(ctx, dialer, "tcp", proxyURL.Host, tlsConfig.Clone()) } else { conn, err = dialer.DialContext(ctx, "tcp", proxyURL.Host) } if err != nil { return nil, trace.ConvertSystemError(err) } - header := make(http.Header) if proxyURL.User != nil { // dont use User.String() because it performs url encoding (rfc 1738), @@ -158,12 +169,26 @@ func dialProxyWithHTTPDialer( }, nil } +type socksDialerAdapter struct { + dialer ContextDialer +} + +func (d *socksDialerAdapter) Dial(network, addr string) (c net.Conn, err error) { + return d.dialer.DialContext(context.Background(), network, addr) +} + +// DialContext dials with context. Even though socks dialer interface requires just Dial() function +// internally it will use dialing with context. +func (d *socksDialerAdapter) DialContext(ctx context.Context, network, addr string) (c net.Conn, err error) { + return d.dialer.DialContext(ctx, network, addr) +} + // dialProxyWithSOCKSDialer creates a connection to a server via a SOCKS5 Proxy. func dialProxyWithSOCKSDialer( ctx context.Context, proxyURL *url.URL, addr string, - dialer *net.Dialer, + dialer ContextDialer, ) (net.Conn, error) { var proxyAuth *proxy.Auth if proxyURL.User != nil { @@ -175,7 +200,7 @@ func dialProxyWithSOCKSDialer( } } - socksDialer, err := proxy.SOCKS5("tcp", proxyURL.Host, proxyAuth, dialer) + socksDialer, err := proxy.SOCKS5("tcp", proxyURL.Host, proxyAuth, &socksDialerAdapter{dialer: dialer}) if err != nil { return nil, trace.Wrap(err) } diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index be9fb7e191fb6..983682726e94e 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -1607,6 +1607,8 @@ message ChangeUserAuthenticationRequest { MFARegisterResponse NewMFARegisterResponse = 3 [(gogoproto.jsontag) = "new_mfa_register_response,omitempty"]; // NewDeviceName is the name of a new mfa or passwordless device. string NewDeviceName = 4 [(gogoproto.jsontag) = "new_device_name,omitempty"]; + // LoginIP is an IP that will be embedded in the new client's certificate for web session if successful. + string LoginIP = 5 [(gogoproto.jsontag) = "login_ip,omitempty"]; } // ChangeUserAuthenticationResponse is a response for ChangeUserAuthentication. diff --git a/api/types/session.go b/api/types/session.go index a883426b8b58c..0826a9f77571a 100644 --- a/api/types/session.go +++ b/api/types/session.go @@ -610,6 +610,8 @@ func (r *NewWebSessionRequest) CheckAndSetDefaults() error { type NewWebSessionRequest struct { // User specifies the user this session is bound to User string + // LoginIP is an observed IP of the client, it will be embedded into certificates. + LoginIP string // Roles optionally lists additional user roles Roles []string // Traits optionally lists role traits diff --git a/api/utils/tlsutils/tlsutils.go b/api/utils/tlsutils/tlsutils.go index 496b433cfc079..09f9b81c38d13 100644 --- a/api/utils/tlsutils/tlsutils.go +++ b/api/utils/tlsutils/tlsutils.go @@ -18,8 +18,12 @@ limitations under the License. package tlsutils import ( + "context" + "crypto/tls" "crypto/x509" "encoding/pem" + "net" + "strings" "github.com/gravitational/trace" ) @@ -36,3 +40,55 @@ func ParseCertificatePEM(bytes []byte) (*x509.Certificate, error) { } return cert, nil } + +// ContextDialer represents network dialer interface that uses context +type ContextDialer interface { + // DialContext is a function that dials the specified address + DialContext(ctx context.Context, network, addr string) (net.Conn, error) +} + +// TLSDial dials and establishes TLS connection using custom dialer +// is similar to tls.DialWithDialer +// Note: function taken from lib/utils/tlsdial.go +func TLSDial(ctx context.Context, dialer ContextDialer, network, addr string, tlsConfig *tls.Config) (*tls.Conn, error) { + if tlsConfig == nil { + return nil, trace.BadParameter("tls config must be specified") + } + + plainConn, err := dialer.DialContext(ctx, network, addr) + if err != nil { + return nil, trace.Wrap(err) + } + + colonPos := strings.LastIndex(addr, ":") + if colonPos == -1 { + colonPos = len(addr) + } + hostname := addr[:colonPos] + + // If no ServerName is set, infer the ServerName + // from the hostname we're connecting to. + if tlsConfig.ServerName == "" { + // Make a copy to avoid polluting argument or default. + tlsConfig = tlsConfig.Clone() + tlsConfig.ServerName = hostname + } + + conn := tls.Client(plainConn, tlsConfig) + err = conn.HandshakeContext(ctx) + if err != nil { + plainConn.Close() + return nil, trace.Wrap(err) + } + + if tlsConfig.InsecureSkipVerify { + return conn, nil + } + + if err := conn.VerifyHostname(tlsConfig.ServerName); err != nil { + plainConn.Close() + return nil, trace.Wrap(err) + } + + return conn, nil +} diff --git a/constants.go b/constants.go index 7e02aad7af144..0cafbcf90d0fc 100644 --- a/constants.go +++ b/constants.go @@ -465,6 +465,11 @@ const ( // CertExtensionDeviceCredentialID is the identifier for the credential used // by the device to authenticate itself. CertExtensionDeviceCredentialID = "teleport-device-credential-id" + + // CertCriticalOptionSourceAddress is a critical option that defines IP addresses (in CIDR notation) + // from which this certificate is accepted for authentication. + // See: https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD. + CertCriticalOptionSourceAddress = "source-address" ) // Note: when adding new providers to this list, consider updating the help message for --provider flag diff --git a/integration/appaccess/appaccess_test.go b/integration/appaccess/appaccess_test.go index 2b9856c4cf09e..499cd266dccb2 100644 --- a/integration/appaccess/appaccess_test.go +++ b/integration/appaccess/appaccess_test.go @@ -39,6 +39,7 @@ import ( apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/integration/helpers" "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/service" "github.com/gravitational/teleport/lib/service/servicecfg" "github.com/gravitational/teleport/lib/srv/app/common" @@ -257,8 +258,13 @@ func testForwardModes(p *Pack, t *testing.T) { // testClientCert tests mutual TLS authentication flow with application // access typically used in CLI by curl and other clients. func testClientCert(p *Pack, t *testing.T) { + modules.SetTestModules(t, &modules.TestModules{ + TestBuildType: modules.BuildEnterprise, + TestFeatures: modules.Features{ + App: true, + }, + }) evilUser, _ := p.CreateUser(t) - rootWs, err := p.tc.CreateAppSession(context.Background(), types.CreateAppSessionRequest{ Username: p.user.GetName(), PublicAddr: p.rootAppPublicAddr, @@ -278,16 +284,17 @@ func testClientCert(p *Pack, t *testing.T) { inTLSConfig *tls.Config outStatusCode int outMessage string + wantErr bool }{ { desc: "root cluster, valid TLS config, success", - inTLSConfig: p.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), p.rootAppPublicAddr, p.rootAppClusterName), + inTLSConfig: p.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), p.rootAppPublicAddr, p.rootAppClusterName, ""), outStatusCode: http.StatusOK, outMessage: p.rootMessage, }, { desc: "leaf cluster, valid TLS config, success", - inTLSConfig: p.makeTLSConfig(t, leafWs.GetName(), leafWs.GetUser(), p.leafAppPublicAddr, p.leafAppClusterName), + inTLSConfig: p.makeTLSConfig(t, leafWs.GetName(), leafWs.GetUser(), p.leafAppPublicAddr, p.leafAppClusterName, ""), outStatusCode: http.StatusOK, outMessage: p.leafMessage, }, @@ -298,25 +305,41 @@ func testClientCert(p *Pack, t *testing.T) { }, { desc: "root cluster, invalid session owner", - inTLSConfig: p.makeTLSConfig(t, rootWs.GetName(), evilUser.GetName(), p.rootAppPublicAddr, p.rootAppClusterName), + inTLSConfig: p.makeTLSConfig(t, rootWs.GetName(), evilUser.GetName(), p.rootAppPublicAddr, p.rootAppClusterName, ""), outStatusCode: http.StatusForbidden, outMessage: "", }, { desc: "leaf cluster, invalid session owner", - inTLSConfig: p.makeTLSConfig(t, leafWs.GetName(), evilUser.GetName(), p.leafAppPublicAddr, p.leafAppClusterName), + inTLSConfig: p.makeTLSConfig(t, leafWs.GetName(), evilUser.GetName(), p.leafAppPublicAddr, p.leafAppClusterName, ""), outStatusCode: http.StatusForbidden, outMessage: "", }, + { + desc: "root cluster, valid TLS config with pinned IP, success", + inTLSConfig: p.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), p.rootAppPublicAddr, p.rootAppClusterName, "127.0.0.1"), + outStatusCode: http.StatusOK, + outMessage: p.rootMessage, + }, + { + desc: "root cluster, valid TLS config with wrong pinned IP", + inTLSConfig: p.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), p.rootAppPublicAddr, p.rootAppClusterName, "127.0.0.2"), + outStatusCode: http.StatusForbidden, + wantErr: true, + }, } for _, tt := range tests { tt := tt t.Run(tt.desc, func(t *testing.T) { t.Parallel() status, body, err := p.makeRequestWithClientCert(tt.inTLSConfig, http.MethodGet, "/") - require.NoError(t, err) - require.Equal(t, tt.outStatusCode, status) - require.Contains(t, body, tt.outMessage) + if tt.wantErr { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, tt.outStatusCode, status) + require.Contains(t, body, tt.outMessage) + } }) } } @@ -576,7 +599,7 @@ func TestInvalidateAppSessionsOnLogout(t *testing.T) { require.Equal(t, http.StatusOK, status) // Generates TLS config for making app requests. - reqTLS := p.makeTLSConfig(t, sessID, p.username, p.rootAppPublicAddr, p.rootAppClusterName) + reqTLS := p.makeTLSConfig(t, sessID, p.username, p.rootAppPublicAddr, p.rootAppClusterName, "") require.NotNil(t, reqTLS) // Issue a request to the application to guarantee everything is working correctly. @@ -636,25 +659,25 @@ func TestTCP(t *testing.T) { { description: "TCP app in root cluster", address: pack.startLocalProxy(t, - pack.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), pack.rootTCPPublicAddr, pack.rootAppClusterName)), + pack.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), pack.rootTCPPublicAddr, pack.rootAppClusterName, "")), outMessage: pack.rootTCPMessage, }, { description: "TCP app in leaf cluster", address: pack.startLocalProxy(t, - pack.makeTLSConfig(t, leafWs.GetName(), leafWs.GetUser(), pack.leafTCPPublicAddr, pack.leafAppClusterName)), + pack.makeTLSConfig(t, leafWs.GetName(), leafWs.GetUser(), pack.leafTCPPublicAddr, pack.leafAppClusterName, "")), outMessage: pack.leafTCPMessage, }, { description: "TCP app in root cluster, invalid session owner", address: pack.startLocalProxy(t, - pack.makeTLSConfig(t, rootWs.GetName(), evilUser.GetName(), pack.rootTCPPublicAddr, pack.rootAppClusterName)), + pack.makeTLSConfig(t, rootWs.GetName(), evilUser.GetName(), pack.rootTCPPublicAddr, pack.rootAppClusterName, "")), wantReadErr: io.EOF, // access denied errors should close the tcp conn }, { description: "TCP app in leaf cluster, invalid session owner", address: pack.startLocalProxy(t, - pack.makeTLSConfig(t, leafWs.GetName(), evilUser.GetName(), pack.leafTCPPublicAddr, pack.leafAppClusterName)), + pack.makeTLSConfig(t, leafWs.GetName(), evilUser.GetName(), pack.leafTCPPublicAddr, pack.leafAppClusterName, "")), wantReadErr: io.EOF, // access denied errors should close the tcp conn }, } @@ -699,7 +722,7 @@ func TestTCPLock(t *testing.T) { ClusterName: pack.rootAppClusterName, }) require.NoError(t, err) - tlsConfig := pack.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), pack.rootTCPTwoWayPublicAddr, pack.rootAppClusterName) + tlsConfig := pack.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), pack.rootTCPTwoWayPublicAddr, pack.rootAppClusterName, "") address := pack.startLocalProxy(t, tlsConfig) @@ -777,7 +800,7 @@ func TestTCPCertExpiration(t *testing.T) { ClusterName: pack.rootAppClusterName, }) require.NoError(t, err) - tlsConfig := pack.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), pack.rootTCPTwoWayPublicAddr, pack.rootAppClusterName) + tlsConfig := pack.makeTLSConfig(t, rootWs.GetName(), rootWs.GetUser(), pack.rootTCPTwoWayPublicAddr, pack.rootAppClusterName, "") address := pack.startLocalProxy(t, tlsConfig) diff --git a/integration/appaccess/pack.go b/integration/appaccess/pack.go index eaa4f4dc81ff3..e0917907702b6 100644 --- a/integration/appaccess/pack.go +++ b/integration/appaccess/pack.go @@ -313,7 +313,7 @@ func (p *Pack) CreateAppSessionWithClientCert(t *testing.T) []tls.Certificate { ClusterName: p.rootAppClusterName, }) require.NoError(t, err) - config := p.makeTLSConfig(t, session.GetName(), session.GetUser(), p.rootAppPublicAddr, p.rootAppClusterName) + config := p.makeTLSConfig(t, session.GetName(), session.GetUser(), p.rootAppPublicAddr, p.rootAppClusterName, "") return config.Certificates } @@ -414,7 +414,7 @@ func (p *Pack) startLocalProxy(t *testing.T, tlsConfig *tls.Config) string { } // makeTLSConfig returns TLS config suitable for making an app access request. -func (p *Pack) makeTLSConfig(t *testing.T, sessionID, username, publicAddr, clusterName string) *tls.Config { +func (p *Pack) makeTLSConfig(t *testing.T, sessionID, username, publicAddr, clusterName, pinnedIP string) *tls.Config { privateKey, publicKey, err := native.GenerateKeyPair() require.NoError(t, err) @@ -433,6 +433,7 @@ func (p *Pack) makeTLSConfig(t *testing.T, sessionID, username, publicAddr, clus PublicAddr: publicAddr, ClusterName: clusterName, SessionID: sessionID, + PinnedIP: pinnedIP, }) require.NoError(t, err) diff --git a/lib/auth/auth.go b/lib/auth/auth.go index d238769e1517f..0d877afbf96c9 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -1447,6 +1447,10 @@ func (a *Server) GenerateOpenSSHCert(ctx context.Context, req *proto.OpenSSHCert }, nil } +func certRequestPinIP(pinIP bool) certRequestOption { + return func(r *certRequest) { r.pinIP = pinIP } +} + // GenerateUserTestCerts is used to generate user certificate, used internally for tests func (a *Server) GenerateUserTestCerts(key []byte, username string, ttl time.Duration, compatibility, routeToCluster, pinnedIP string) ([]byte, []byte, error) { user, err := a.GetUser(username, false) @@ -1499,6 +1503,8 @@ type AppTestCertRequest struct { AzureIdentity string // GCPServiceAccount is optional GCP service account a user wants to assume to encode. GCPServiceAccount string + // PinnedIP is optional IP to pin certificate to. + PinnedIP string } // GenerateUserAppTestCert generates an application specific certificate, used @@ -1541,6 +1547,8 @@ func (a *Server) GenerateUserAppTestCert(req AppTestCertRequest) ([]byte, error) awsRoleARN: req.AWSRoleARN, azureIdentity: req.AzureIdentity, gcpServiceAccount: req.GCPServiceAccount, + pinIP: req.PinnedIP != "", + loginIP: req.PinnedIP, }) if err != nil { return nil, trace.Wrap(err) @@ -2016,11 +2024,9 @@ func generateCert(a *Server, req certRequest, caType types.CertAuthType) (*proto } pinnedIP := "" - if req.checker.PinSourceIP() || req.pinIP { + if caType == types.UserCA && (req.checker.PinSourceIP() || req.pinIP) { if req.loginIP == "" { - // TODO(anton): make sure all upstream callers provide clientIP and make this into hard error - // instead of warning, after merging #21080 - log.Warnf("IP pinning is enabled for user %q but there is no client ip information", req.user.GetName()) + return nil, trace.BadParameter("IP pinning is enabled for user %q but there is no client IP information", req.user.GetName()) } pinnedIP = req.loginIP @@ -2397,6 +2403,7 @@ func (a *Server) PreAuthenticatedSignIn(ctx context.Context, user string, identi } sess, err := a.NewWebSession(ctx, types.NewWebSessionRequest{ User: user, + LoginIP: identity.LoginIP, Roles: accessInfo.Roles, Traits: accessInfo.Traits, AccessRequests: identity.ActiveRequests, @@ -2993,6 +3000,7 @@ func (a *Server) ExtendWebSession(ctx context.Context, req WebSessionReq, identi sessionTTL := utils.ToTTL(a.clock, expiresAt) sess, err := a.NewWebSession(ctx, types.NewWebSessionRequest{ User: req.User, + LoginIP: identity.LoginIP, Roles: roles, Traits: traits, SessionTTL: sessionTTL, @@ -3619,6 +3627,7 @@ func (a *Server) NewWebSession(ctx context.Context, req types.NewWebSessionReque } certs, err := a.generateUserCert(certRequest{ user: user, + loginIP: req.LoginIP, ttl: sessionTTL, publicKey: pub, checker: checker, diff --git a/lib/auth/clt.go b/lib/auth/clt.go index 7aaeb784f26db..f40a0d13a830c 100644 --- a/lib/auth/clt.go +++ b/lib/auth/clt.go @@ -104,6 +104,7 @@ func NewClient(cfg client.Config, params ...roundtrip.ClientParam) (*Client, err contextDialer := client.NewDialer(cfg.Context, cfg.KeepAlivePeriod, cfg.DialTimeout, client.WithInsecureSkipVerify(httpTLS.InsecureSkipVerify), client.WithALPNConnUpgrade(cfg.ALPNConnUpgradeRequired), + client.WithPROXYHeaderGetter(cfg.PROXYHeaderGetter), ) conn, err = contextDialer.DialContext(ctx, network, addr) if err == nil { diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 4fb132af8ac79..84b4ef905465f 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -62,6 +62,7 @@ import ( "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/httplib" "github.com/gravitational/teleport/lib/joinserver" + "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/observability/metrics" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/session" @@ -2613,14 +2614,19 @@ func userSingleUseCertsGenerate(ctx context.Context, actx *grpcContext, req prot return nil, trace.BadParameter("can't parse client IP from peer info: %v", err) } - // Generate the cert. - certs, err := actx.generateUserCerts( - ctx, req, + opts := []certRequestOption{ certRequestMFAVerified(mfaDev.Id), certRequestPreviousIdentityExpires(actx.Identity.GetIdentity().Expires), certRequestLoginIP(clientIP), certRequestDeviceExtensions(actx.Identity.GetIdentity().DeviceExtensions), - ) + } + + if modules.GetModules().BuildType() == modules.BuildEnterprise { + opts = append(opts, certRequestPinIP(true)) // We always want to pin single use certs to client's IP, regardless of roles) + } + + // Generate the cert. + certs, err := actx.generateUserCerts(ctx, req, opts...) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/grpcserver_test.go b/lib/auth/grpcserver_test.go index 5136376870782..0f6f0bdf2afe2 100644 --- a/lib/auth/grpcserver_test.go +++ b/lib/auth/grpcserver_test.go @@ -1166,6 +1166,11 @@ func TestGenerateUserCerts_deviceAuthz(t *testing.T) { } func TestGenerateUserSingleUseCert(t *testing.T) { + modules.SetTestModules(t, &modules.TestModules{ + TestBuildType: modules.BuildEnterprise, // required for IP pinning. + TestFeatures: modules.GetModules().Features(), + }) + ctx := context.Background() srv := newTestTLSServer(t) clock := srv.Clock() @@ -1287,15 +1292,18 @@ func TestGenerateUserSingleUseCert(t *testing.T) { authHandler: registered.webAuthHandler, checkAuthErr: require.NoError, validateCert: func(t *testing.T, c *proto.SingleUseUserCert) { - crt := c.GetSSH() - require.NotEmpty(t, crt) + sshCertBytes := c.GetSSH() + require.NotEmpty(t, sshCertBytes) - cert, err := sshutils.ParseCertificate(crt) + cert, err := sshutils.ParseCertificate(sshCertBytes) require.NoError(t, err) require.Equal(t, webDevID, cert.Extensions[teleport.CertExtensionMFAVerified]) require.Equal(t, userCertExpires.Format(time.RFC3339), cert.Extensions[teleport.CertExtensionPreviousIdentityExpires]) require.True(t, net.ParseIP(cert.Extensions[teleport.CertExtensionLoginIP]).IsLoopback()) + pinnedIP, ok := cert.CriticalOptions[teleport.CertCriticalOptionSourceAddress] + require.True(t, ok) + require.Equal(t, "127.0.0.1/32", pinnedIP) require.Equal(t, uint64(clock.Now().Add(teleport.UserSingleUseCertTTL).Unix()), cert.ValidBefore) }, }, @@ -1366,6 +1374,7 @@ func TestGenerateUserSingleUseCert(t *testing.T) { require.True(t, net.ParseIP(identity.LoginIP).IsLoopback()) require.Equal(t, []string{teleport.UsageKubeOnly}, identity.Usage) require.Equal(t, "kube-a", identity.KubernetesCluster) + require.Equal(t, "127.0.0.1", identity.PinnedIP) }, }, }, @@ -1405,6 +1414,7 @@ func TestGenerateUserSingleUseCert(t *testing.T) { require.True(t, net.ParseIP(identity.LoginIP).IsLoopback()) require.Equal(t, []string{teleport.UsageDatabaseOnly}, identity.Usage) require.Equal(t, identity.RouteToDatabase.ServiceName, "db-a") + require.Equal(t, "127.0.0.1", identity.PinnedIP) }, }, }, @@ -1519,6 +1529,10 @@ func TestGenerateUserSingleUseCert(t *testing.T) { sshCert, err := sshutils.ParseCertificate(sshRaw) require.NoError(t, err, "ParseCertificate failed") + pinnedIP, ok := sshCert.CriticalOptions[teleport.CertCriticalOptionSourceAddress] + require.True(t, ok, "missing 'source-address' critical option from SSH certificate") + require.Equal(t, "127.0.0.1/32", pinnedIP, "pinned IP mismatch on SSH certificate") + gotSSH := tlsca.DeviceExtensions{ DeviceID: sshCert.Extensions[teleport.CertExtensionDeviceID], AssetTag: sshCert.Extensions[teleport.CertExtensionDeviceAssetTag], @@ -1576,6 +1590,8 @@ func TestGenerateUserSingleUseCert(t *testing.T) { if diff := cmp.Diff(wantDeviceExtensions, gotTLS, protocmp.Transform()); diff != "" { t.Errorf("TLS DeviceExtensions mismatch (-want +got)\n%s", diff) } + require.Equal(t, "127.0.0.1", singleUseIdentity.PinnedIP, + "missing pinned IP on single use identity") }, }, }, diff --git a/lib/auth/keygen/keygen.go b/lib/auth/keygen/keygen.go index 107f5a3f3f303..81f3da57cf121 100644 --- a/lib/auth/keygen/keygen.go +++ b/lib/auth/keygen/keygen.go @@ -150,11 +150,6 @@ func (k *Keygen) GenerateUserCert(c services.UserCertParams) ([]byte, error) { return k.GenerateUserCertWithoutValidation(c) } -// sourceAddress is a critical option that defines IP addresses (in CIDR notation) -// from which this certificate is accepted for authentication. -// See: https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD. -const sourceAddress = "source-address" - // GenerateUserCertWithoutValidation generates a user ssh certificate with the // passed in parameters without validating them. func (k *Keygen) GenerateUserCertWithoutValidation(c services.UserCertParams) ([]byte, error) { @@ -242,7 +237,7 @@ func (k *Keygen) GenerateUserCertWithoutValidation(c services.UserCertParams) ([ //IPv6 ip = c.PinnedIP + "/128" } - cert.CriticalOptions[sourceAddress] = ip + cert.CriticalOptions[teleport.CertCriticalOptionSourceAddress] = ip } for _, extension := range c.CertificateExtensions { diff --git a/lib/auth/methods.go b/lib/auth/methods.go index f6475a9e22271..def597f01be92 100644 --- a/lib/auth/methods.go +++ b/lib/auth/methods.go @@ -20,6 +20,7 @@ import ( "bytes" "context" "errors" + "net" "time" "github.com/gravitational/trace" @@ -453,7 +454,15 @@ func (s *Server) AuthenticateWebUser(ctx context.Context, req AuthenticateUserRe return nil, trace.Wrap(err) } - sess, err := s.createUserWebSession(ctx, user) + loginIP := "" + if req.ClientMetadata != nil { + loginIP, _, err = net.SplitHostPort(req.ClientMetadata.RemoteAddr) + if err != nil { + return nil, trace.Wrap(err) + } + } + + sess, err := s.createUserWebSession(ctx, user, loginIP) if err != nil { return nil, trace.Wrap(err) } @@ -666,11 +675,12 @@ func (s *Server) emitNoLocalAuthEvent(username string) { } } -func (s *Server) createUserWebSession(ctx context.Context, user types.User) (types.WebSession, error) { +func (s *Server) createUserWebSession(ctx context.Context, user types.User, loginIP string) (types.WebSession, error) { // It's safe to extract the roles and traits directly from services.User as this method // is only used for local accounts. return s.CreateWebSessionFromReq(ctx, types.NewWebSessionRequest{ User: user.GetName(), + LoginIP: loginIP, Roles: user.GetRoles(), Traits: user.GetTraits(), LoginTime: s.clock.Now().UTC(), diff --git a/lib/auth/middleware.go b/lib/auth/middleware.go index 826ad05a837bd..0cbf38b6a9966 100644 --- a/lib/auth/middleware.go +++ b/lib/auth/middleware.go @@ -724,37 +724,6 @@ func (a *Middleware) WrapContextWithUserFromTLSConnState(ctx context.Context, tl return ctx, nil } -// CheckIPPinning verifies IP pinning for the identity, using the client ip taken from context. -// Check is considered successful if no error is returned. -func CheckIPPinning(ctx context.Context, identity tlsca.Identity, pinSourceIP bool) error { - if identity.PinnedIP == "" { - if pinSourceIP { - return trace.AccessDenied("pinned IP is required for the user, but is not present on identity") - } - return nil - } - - clientSrcAddr, err := authz.ClientAddrFromContext(ctx) - if err != nil { - return trace.Wrap(err) - } - - clientIP, _, err := net.SplitHostPort(clientSrcAddr.String()) - if err != nil { - return trace.Wrap(err) - } - - if clientIP != identity.PinnedIP { - log.WithFields(logrus.Fields{ - "client_ip": clientIP, - "pinned_ip": identity.PinnedIP, - }).Debug("Pinned IP and client IP mismatch") - return trace.AccessDenied("pinned IP doesn't match observed client IP") - } - - return nil -} - // ClientCertPool returns trusted x509 certificate authority pool with CAs provided as caTypes. // In addition, it returns the total length of all subjects added to the cert pool, allowing // the caller to validate that the pool doesn't exceed the maximum 2-byte length prefix before diff --git a/lib/auth/middleware_test.go b/lib/auth/middleware_test.go index 9811a442564bf..19e0688317d40 100644 --- a/lib/auth/middleware_test.go +++ b/lib/auth/middleware_test.go @@ -212,73 +212,6 @@ func TestMiddlewareGetUser(t *testing.T) { } } -func TestCheckIPPinning(t *testing.T) { - testCases := []struct { - desc string - clientAddr string - pinnedIP string - pinIP bool - wantErr string - }{ - { - desc: "no IP pinning", - clientAddr: "127.0.0.1:444", - pinnedIP: "", - pinIP: false, - }, - { - desc: "IP pinning, no pinned IP", - clientAddr: "127.0.0.1:444", - pinnedIP: "", - pinIP: true, - wantErr: "pinned IP is required for the user, but is not present on identity", - }, - { - desc: "Pinned IP doesn't match", - clientAddr: "127.0.0.1:444", - pinnedIP: "127.0.0.2", - pinIP: true, - wantErr: "pinned IP doesn't match observed client IP", - }, - { - desc: "Role doesn't require IP pinning now, but old certificate still pinned", - clientAddr: "127.0.0.1:444", - pinnedIP: "127.0.0.2", - pinIP: false, - wantErr: "pinned IP doesn't match observed client IP", - }, - { - desc: "IP pinning enabled, missing client IP", - pinnedIP: "127.0.0.1", - pinIP: true, - wantErr: "expected type net.Addr, got ", - }, - { - desc: "correct IP pinning", - clientAddr: "127.0.0.1:444", - pinnedIP: "127.0.0.1", - pinIP: true, - }, - } - - for _, tt := range testCases { - ctx := context.Background() - if tt.clientAddr != "" { - ctx = authz.ContextWithClientAddr(ctx, utils.MustParseAddr(tt.clientAddr)) - } - identity := tlsca.Identity{PinnedIP: tt.pinnedIP} - - err := CheckIPPinning(ctx, identity, tt.pinIP) - - if tt.wantErr != "" { - require.ErrorContains(t, err, tt.wantErr) - } else { - require.NoError(t, err) - } - - } -} - // testConn is a connection that implements utils.TLSConn for testing WrapContextWithUser. type testConn struct { tls.Conn diff --git a/lib/auth/password.go b/lib/auth/password.go index 02bacd190fbdc..76d3a6594a464 100644 --- a/lib/auth/password.go +++ b/lib/auth/password.go @@ -63,7 +63,7 @@ func (s *Server) ChangeUserAuthentication(ctx context.Context, req *proto.Change } } - webSession, err := s.createUserWebSession(ctx, user) + webSession, err := s.createUserWebSession(ctx, user, req.LoginIP) if err != nil { if keys.IsPrivateKeyPolicyError(err) { // Do not return an error, otherwise diff --git a/lib/auth/sessions.go b/lib/auth/sessions.go index b9010e79e6ba4..c34ce430a71b0 100644 --- a/lib/auth/sessions.go +++ b/lib/auth/sessions.go @@ -69,6 +69,7 @@ func (s *Server) CreateAppSession(ctx context.Context, req types.CreateAppSessio } certs, err := s.generateUserCert(certRequest{ user: user, + loginIP: identity.LoginIP, publicKey: publicKey, checker: checker, ttl: ttl, diff --git a/lib/authz/permissions.go b/lib/authz/permissions.go index 1097b8b147a07..98cf0d67e25b1 100644 --- a/lib/authz/permissions.go +++ b/lib/authz/permissions.go @@ -19,6 +19,7 @@ package authz import ( "context" "crypto/x509" + "errors" "fmt" "net" "strings" @@ -230,6 +231,12 @@ func (a *authorizer) Authorize(ctx context.Context) (*Context, error) { if err != nil { return nil, trace.Wrap(err) } + + if err := CheckIPPinning(ctx, authContext.Identity.GetIdentity(), authContext.Checker.PinSourceIP(), + logrus.WithFields(logrus.Fields{trace.Component: "authorizer"})); err != nil { + return nil, trace.Wrap(err) + } + // Enforce applicable locks. authPref, err := a.accessPoint.GetAuthPreference(ctx) if err != nil { @@ -289,6 +296,45 @@ func (a *authorizer) fromUser(ctx context.Context, userI interface{}) (*Context, } } +// ErrIPPinningMissing is returned when user cert should be pinned but isn't. +var ErrIPPinningMissing = trace.AccessDenied("pinned IP is required for the user, but is not present on identity") + +// ErrIPPinningMismatch is returned when user's pinned IP doesn't match observed IP. +var ErrIPPinningMismatch = trace.AccessDenied("pinned IP doesn't match observed client IP") + +// CheckIPPinning verifies IP pinning for the identity, using the client IP taken from context. +// Check is considered successful if no error is returned. +func CheckIPPinning(ctx context.Context, identity tlsca.Identity, pinSourceIP bool, log logrus.FieldLogger) error { + if identity.PinnedIP == "" { + if pinSourceIP { + return ErrIPPinningMissing + } + return nil + } + + clientSrcAddr, err := ClientAddrFromContext(ctx) + if err != nil { + return trace.Wrap(err) + } + + clientIP, _, err := net.SplitHostPort(clientSrcAddr.String()) + if err != nil { + return trace.Wrap(err) + } + + if clientIP != identity.PinnedIP { + if log != nil { + log.WithFields(logrus.Fields{ + "client_ip": clientIP, + "pinned_ip": identity.PinnedIP, + }).Debug("Pinned IP and client IP mismatch") + } + return ErrIPPinningMismatch + } + + return nil +} + // authorizeLocalUser returns authz context based on the username func (a *authorizer) authorizeLocalUser(u LocalUser) (*Context, error) { return ContextForLocalUser(u, a.accessPoint, a.clusterName, a.disableDeviceAuthorization) @@ -372,7 +418,7 @@ func (a *authorizer) authorizeRemoteUser(ctx context.Context, u RemoteUser) (*Co UserType: u.Identity.UserType, } if checker.PinSourceIP() && identity.PinnedIP == "" { - return nil, trace.AccessDenied("pinned IP is required for the user, but is not present on identity") + return nil, ErrIPPinningMissing } return &Context{ @@ -1025,6 +1071,9 @@ func ConvertAuthorizerError(ctx context.Context, log logrus.FieldLogger, err err case trace.IsNotFound(err): // user not found, wrap error with access denied return trace.Wrap(err, "access denied") + case errors.Is(err, ErrIPPinningMissing) || errors.Is(err, ErrIPPinningMismatch): + log.Warn(err) + return trace.Wrap(err) case trace.IsAccessDenied(err): // don't print stack trace, just log the warning log.Warn(err) diff --git a/lib/authz/permissions_test.go b/lib/authz/permissions_test.go index b023d4be2c02a..039dc076f69d6 100644 --- a/lib/authz/permissions_test.go +++ b/lib/authz/permissions_test.go @@ -37,6 +37,7 @@ import ( "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/services/local" "github.com/gravitational/teleport/lib/tlsca" + "github.com/gravitational/teleport/lib/utils" ) const clusterName = "test-cluster" @@ -455,6 +456,73 @@ func TestContext_GetAccessState(t *testing.T) { } } +func TestCheckIPPinning(t *testing.T) { + testCases := []struct { + desc string + clientAddr string + pinnedIP string + pinIP bool + wantErr string + }{ + { + desc: "no IP pinning", + clientAddr: "127.0.0.1:444", + pinnedIP: "", + pinIP: false, + }, + { + desc: "IP pinning, no pinned IP", + clientAddr: "127.0.0.1:444", + pinnedIP: "", + pinIP: true, + wantErr: "pinned IP is required for the user, but is not present on identity", + }, + { + desc: "Pinned IP doesn't match", + clientAddr: "127.0.0.1:444", + pinnedIP: "127.0.0.2", + pinIP: true, + wantErr: "pinned IP doesn't match observed client IP", + }, + { + desc: "Role doesn't require IP pinning now, but old certificate still pinned", + clientAddr: "127.0.0.1:444", + pinnedIP: "127.0.0.2", + pinIP: false, + wantErr: "pinned IP doesn't match observed client IP", + }, + { + desc: "IP pinning enabled, missing client IP", + pinnedIP: "127.0.0.1", + pinIP: true, + wantErr: "expected type net.Addr, got ", + }, + { + desc: "correct IP pinning", + clientAddr: "127.0.0.1:444", + pinnedIP: "127.0.0.1", + pinIP: true, + }, + } + + for _, tt := range testCases { + ctx := context.Background() + if tt.clientAddr != "" { + ctx = ContextWithClientAddr(ctx, utils.MustParseAddr(tt.clientAddr)) + } + identity := tlsca.Identity{PinnedIP: tt.pinnedIP} + + err := CheckIPPinning(ctx, identity, tt.pinIP, nil) + + if tt.wantErr != "" { + require.ErrorContains(t, err, tt.wantErr) + } else { + require.NoError(t, err) + } + + } +} + func TestAuthorizeWithVerbs(t *testing.T) { backend, err := memory.New(memory.Config{}) require.NoError(t, err) diff --git a/lib/client/api.go b/lib/client/api.go index 46b95d67ee201..fc09c5e73abbf 100644 --- a/lib/client/api.go +++ b/lib/client/api.go @@ -74,6 +74,7 @@ import ( "github.com/gravitational/teleport/lib/events" kubeutils "github.com/gravitational/teleport/lib/kube/utils" "github.com/gravitational/teleport/lib/modules" + "github.com/gravitational/teleport/lib/multiplexer" "github.com/gravitational/teleport/lib/observability/tracing" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/session" @@ -418,6 +419,9 @@ type Config struct { // DialOpts used by the api.client.proxy.Client when establishing a connection to // the proxy server. Used by tests. DialOpts []grpc.DialOption + + // PROXYSigner is used to sign PROXY headers for securely propagating client IP address + PROXYSigner multiplexer.PROXYHeaderSigner } // CachePolicy defines cache policy for local clients @@ -3021,8 +3025,25 @@ func makeProxySSHClient(ctx context.Context, tc *TeleportClient, sshConfig *ssh. return client, nil } +// CreatePROXYHeaderGetter returns PROXY headers signer with embedded client source/destination IP addresses, +// which are taken from the context. +func CreatePROXYHeaderGetter(ctx context.Context, proxySigner multiplexer.PROXYHeaderSigner) client.PROXYHeaderGetter { + if proxySigner == nil { + return nil + } + + src, dst := utils.ClientAddrFromContext(ctx) + if src != nil && dst != nil { + return func() ([]byte, error) { + return proxySigner.SignPROXYHeader(src, dst) + } + } + + return nil +} + func makeProxySSHClientDirect(ctx context.Context, tc *TeleportClient, sshConfig *ssh.ClientConfig, proxyAddr string) (*tracessh.Client, error) { - dialer := proxy.DialerFromEnvironment(tc.Config.SSHProxyAddr) + dialer := proxy.DialerFromEnvironment(tc.Config.SSHProxyAddr, proxy.WithPROXYHeaderGetter(CreatePROXYHeaderGetter(ctx, tc.PROXYSigner))) return dialer.Dial(ctx, "tcp", proxyAddr, sshConfig) } @@ -3032,12 +3053,15 @@ func makeProxySSHClientWithTLSWrapper(ctx context.Context, tc *TeleportClient, s return nil, trace.Wrap(err) } + headerGetter := CreatePROXYHeaderGetter(ctx, tc.PROXYSigner) + tlsConfig.NextProtos = []string{string(alpncommon.ProtocolProxySSH)} dialer := proxy.DialerFromEnvironment(tc.Config.WebProxyAddr, proxy.WithALPNDialer(client.ALPNDialerConfig{ TLSConfig: tlsConfig, ALPNConnUpgradeRequired: tc.TLSRoutingConnUpgradeRequired, DialTimeout: sshConfig.Timeout, - })) + PROXYHeaderGetter: headerGetter, + }), proxy.WithPROXYHeaderGetter(headerGetter)) return dialer.Dial(ctx, "tcp", proxyAddr, sshConfig) } diff --git a/lib/client/client.go b/lib/client/client.go index f6d3f9db15bc8..4ad94f72ab886 100644 --- a/lib/client/client.go +++ b/lib/client/client.go @@ -1122,6 +1122,7 @@ func (proxy *ProxyClient) ConnectToAuthServiceThroughALPNSNIProxy(ctx context.Co ALPNSNIAuthDialClusterName: clusterName, CircuitBreakerConfig: breaker.NoopBreakerConfig(), ALPNConnUpgradeRequired: proxy.teleportClient.IsALPNConnUpgradeRequiredForWebProxy(proxyAddr), + PROXYHeaderGetter: CreatePROXYHeaderGetter(ctx, proxy.teleportClient.PROXYSigner), }) if err != nil { return nil, trace.Wrap(err) diff --git a/lib/kube/proxy/forwarder.go b/lib/kube/proxy/forwarder.go index 9ab0612a55f39..7913ede5cee58 100644 --- a/lib/kube/proxy/forwarder.go +++ b/lib/kube/proxy/forwarder.go @@ -1143,11 +1143,6 @@ func (f *Forwarder) authorize(ctx context.Context, actx *authContext) error { ) defer span.End() - // TODO(anton): Move this into authorizer.Authorize when we can enable it for all protocols - if err := auth.CheckIPPinning(ctx, actx.Identity.GetIdentity(), actx.Checker.PinSourceIP()); err != nil { - return trace.Wrap(err) - } - if actx.teleportCluster.isRemote { // Authorization for a remote kube cluster will happen on the remote // end (by their proxy), after that cluster has remapped used roles. diff --git a/lib/multiplexer/multiplexer.go b/lib/multiplexer/multiplexer.go index c3af65047d2e3..3090f456261bf 100644 --- a/lib/multiplexer/multiplexer.go +++ b/lib/multiplexer/multiplexer.go @@ -686,13 +686,11 @@ func NewPROXYSigner(signingCert *x509.Certificate, jwtSigner JWTPROXYSigner) (*P // SignPROXYHeader creates a signed PROXY header with provided source and destination addresses func (p *PROXYSigner) SignPROXYHeader(source, destination net.Addr) ([]byte, error) { header, err := signPROXYHeader(source, destination, p.clusterName, p.signingCertDER, p.jwtSigner) - if errors.Is(err, ErrBadIP) { + if err == nil { log.WithFields(log.Fields{ "src_addr": fmt.Sprintf("%v", source), "dst_addr": fmt.Sprintf("%v", destination), - "cluster_name": p.clusterName}).Warn("Got bad IP while trying to sign PROXY header") - return nil, nil + "cluster_name": p.clusterName}).Trace("Successfully generated signed PROXY header") } - - return header, err + return header, trace.Wrap(err) } diff --git a/lib/srv/alpnproxy/proxy.go b/lib/srv/alpnproxy/proxy.go index 6cf22111841f9..55140f64d8674 100644 --- a/lib/srv/alpnproxy/proxy.go +++ b/lib/srv/alpnproxy/proxy.go @@ -35,9 +35,11 @@ import ( "github.com/gravitational/teleport/api/constants" "github.com/gravitational/teleport/api/utils/pingconn" "github.com/gravitational/teleport/lib/auth" + "github.com/gravitational/teleport/lib/authz" "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/srv/alpnproxy/common" "github.com/gravitational/teleport/lib/srv/db/dbutils" + "github.com/gravitational/teleport/lib/tlsca" "github.com/gravitational/teleport/lib/utils" ) @@ -393,6 +395,13 @@ func (p *Proxy) handleConn(ctx context.Context, clientConn net.Conn, defaultOver return trace.Wrap(err) } + // We try to do quick early IP pinning check, if possible, and stop it on the proxy, without going further. + // It's based only on client cert. Client can still fail full IP pinning check later if their role now requires + // IP pinning but cert isn't pinned. + if err := checkCertIPPinning(tlsConn); err != nil { + return trace.Wrap(err) + } + var handlerConn net.Conn = tlsConn // Check if ping is supported/required by the client. if common.IsPingProtocol(common.Protocol(tlsConn.ConnectionState().NegotiatedProtocol)) { @@ -409,6 +418,30 @@ func (p *Proxy) handleConn(ctx context.Context, clientConn net.Conn, defaultOver return trace.Wrap(handlerDesc.handle(ctx, handlerConn, connInfo)) } +func checkCertIPPinning(tlsConn *tls.Conn) error { + state := tlsConn.ConnectionState() + + if len(state.PeerCertificates) == 0 { + return nil + } + + identity, err := tlsca.FromSubject(state.PeerCertificates[0].Subject, state.PeerCertificates[0].NotAfter) + if err != nil { + return trace.Wrap(err) + } + + clientIP, err := utils.ClientIPFromConn(tlsConn) + if err != nil { + return trace.Wrap(err) + } + + if identity.PinnedIP != "" && clientIP != identity.PinnedIP { + return trace.Wrap(authz.ErrIPPinningMismatch) + } + + return nil +} + // handlePingConnection starts the server ping routine and returns `pingConn`. func (p *Proxy) handlePingConnection(ctx context.Context, conn *tls.Conn) utils.TLSConn { pingConn := pingconn.NewTLS(conn) diff --git a/lib/srv/app/server.go b/lib/srv/app/server.go index 25f17f300ec6f..7d6523494cbf2 100644 --- a/lib/srv/app/server.go +++ b/lib/srv/app/server.go @@ -708,6 +708,7 @@ func (s *Server) handleConnection(conn net.Conn) (func(), error) { } ctx := authz.ContextWithUser(s.closeContext, user) + ctx = authz.ContextWithClientAddr(ctx, conn.RemoteAddr()) authCtx, _, err := s.authorizeContext(ctx) // The behavior here is a little hard to track. To be clear here, if authorization fails diff --git a/lib/srv/db/proxyserver.go b/lib/srv/db/proxyserver.go index 8c6e7ba08d752..0d012210f8a99 100644 --- a/lib/srv/db/proxyserver.go +++ b/lib/srv/db/proxyserver.go @@ -506,11 +506,6 @@ func (s *ProxyServer) Authorize(ctx context.Context, tlsConn utils.TLSConn, para } identity := authContext.Identity.GetIdentity() - // TODO(anton): Move this into authorizer.Authorize when we can enable it for all protocols - if err := auth.CheckIPPinning(ctx, identity, authContext.Checker.PinSourceIP()); err != nil { - return nil, trace.Wrap(err) - } - if params.User != "" { identity.RouteToDatabase.Username = params.User } diff --git a/lib/srv/db/server.go b/lib/srv/db/server.go index 172d8ff4c94ad..570d3ad345afd 100644 --- a/lib/srv/db/server.go +++ b/lib/srv/db/server.go @@ -1010,11 +1010,6 @@ func (s *Server) authorize(ctx context.Context) (*common.Session, error) { identity := authContext.Identity.GetIdentity() s.log.Debugf("Client identity: %#v.", identity) - // TODO(anton): Move this into authorizer.Authorize when we can enable it for all protocols - if err := auth.CheckIPPinning(ctx, identity, authContext.Checker.PinSourceIP()); err != nil { - return nil, trace.Wrap(err) - } - // Fetch the requested database server. var database types.Database registeredDatabases := s.getProxiedDatabases() diff --git a/lib/srv/transport/transportv1/transport.go b/lib/srv/transport/transportv1/transport.go index a9eb17e524341..d18f1b314cf30 100644 --- a/lib/srv/transport/transportv1/transport.go +++ b/lib/srv/transport/transportv1/transport.go @@ -18,6 +18,7 @@ import ( "context" "io" "net" + "net/netip" "sync" "github.com/gravitational/trace" @@ -267,8 +268,12 @@ func (s *Service) ProxySSH(stream transportv1pb.TransportService_ProxySSHServer) return trace.Wrap(err, "failed constructing ssh streamer") } + clientDst, err := getDestinationAddress(p.Addr, s.cfg.LocalAddr) + if err != nil { + return trace.Wrap(err, "could get not client destination address; listener address %q, client source address %q", s.cfg.LocalAddr.String(), p.Addr.String()) + } signer := s.cfg.SignerFn(authzContext) - hostConn, _, err := s.cfg.Dialer.DialHost(ctx, p.Addr, s.cfg.LocalAddr, host, port, req.DialTarget.Cluster, authzContext.Checker, s.cfg.agentGetterFn(agentStreamRW), signer) + hostConn, _, err := s.cfg.Dialer.DialHost(ctx, p.Addr, clientDst, host, port, req.DialTarget.Cluster, authzContext.Checker, s.cfg.agentGetterFn(agentStreamRW), signer) if err != nil { return trace.Wrap(err, "failed to dial target host") } @@ -303,6 +308,38 @@ func (s *Service) ProxySSH(stream transportv1pb.TransportService_ProxySSHServer) return trace.Wrap(utils.ProxyConn(monitorCtx, hostConn, userConn)) } +// getDestinationAddress is used to get client destination for connection coming from gRPC. We don't have a way to get +// real connection dst address, but we rely on listener address to be that. Returned IP version always have to match +// IP version of src address. If IP versions don't match or if listener is unspecified address we return loopback. +func getDestinationAddress(clientSrc, listenerAddr net.Addr) (net.Addr, error) { + la, err := netip.ParseAddrPort(listenerAddr.String()) + if err != nil { + return nil, trace.Wrap(err) + } + ca, err := netip.ParseAddrPort(clientSrc.String()) + if err != nil { + return nil, trace.Wrap(err) + } + + // If listener address is specified and matches IP version of source address, we just return it + if !la.Addr().IsUnspecified() && la.Addr().Is4() == ca.Addr().Is4() { + return listenerAddr, nil + } + + // Otherwise we return loopback with matching IP version of source address + if ca.Addr().Is4() { + return &net.TCPAddr{ + IP: net.ParseIP("127.0.0.1"), + Port: int(la.Port()), + }, nil + } + + return &net.TCPAddr{ + IP: net.IPv6loopback, + Port: int(la.Port()), + }, nil +} + // sshStream implements the [streamutils.Source] interface // for a [transportv1pb.TransportService_ProxySSHServer]. Instead of // reading directly from the stream reads are from an incoming diff --git a/lib/srv/transport/transportv1/transport_test.go b/lib/srv/transport/transportv1/transport_test.go index 1503310be42f2..2e7cc21fc18b0 100644 --- a/lib/srv/transport/transportv1/transport_test.go +++ b/lib/srv/transport/transportv1/transport_test.go @@ -125,12 +125,47 @@ type testPack struct { Server *Service } +type listenerWithAddr struct { + *bufconn.Listener + localAddr net.Addr +} + +func (l *listenerWithAddr) Addr() net.Addr { + return l.localAddr +} + +func (l *listenerWithAddr) Accept() (net.Conn, error) { + conn, err := l.Listener.Accept() + return &connWithAddr{ + Conn: conn, + addr: l.localAddr, + }, err +} + +type connWithAddr struct { + net.Conn + addr net.Addr +} + +func (c *connWithAddr) RemoteAddr() net.Addr { + return c.addr +} + +func (c *connWithAddr) LocalAddr() net.Addr { + return c.addr +} + // newServer creates a [Service] with the provided config and // an authenticated client to exercise various RPCs on the [Service]. func newServer(t *testing.T, cfg ServerConfig) testPack { // gRPC testPack. const bufSize = 100 // arbitrary + var lisWithAddr net.Listener lis := bufconn.Listen(bufSize) + lisWithAddr = &listenerWithAddr{ + Listener: lis, + localAddr: utils.MustParseAddr("127.0.0.1:4242"), + } t.Cleanup(func() { require.NoError(t, lis.Close()) }) @@ -152,7 +187,7 @@ func newServer(t *testing.T, cfg ServerConfig) testPack { // Start. go func() { - if err := s.Serve(lis); err != nil { + if err := s.Serve(lisWithAddr); err != nil { panic(fmt.Sprintf("Serve returned err = %v", err)) } }() @@ -162,7 +197,11 @@ func newServer(t *testing.T, cfg ServerConfig) testPack { defer cancel() cc, err := grpc.DialContext(ctx, "unused", grpc.WithContextDialer(func(ctx context.Context, _ string) (net.Conn, error) { - return lis.DialContext(ctx) + conn, err := lis.DialContext(ctx) + return &connWithAddr{ + Conn: conn, + addr: utils.MustParseAddr("127.0.0.1:8484"), + }, err }), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithStreamInterceptor(utils.GRPCClientStreamErrorInterceptor), @@ -218,7 +257,7 @@ func TestService_GetClusterDetails(t *testing.T) { FIPS: test.FIPS, SignerFn: fakeSigner, ConnectionMonitor: fakeMonitor{}, - LocalAddr: &utils.NetAddr{}, + LocalAddr: utils.MustParseAddr("127.0.0.1:4242"), }) resp, err := srv.Client.GetClusterDetails(context.Background(), &transportv1pb.GetClusterDetailsRequest{}) @@ -300,7 +339,7 @@ func TestService_ProxyCluster(t *testing.T) { Logger: utils.NewLoggerForTests(), SignerFn: fakeSigner, ConnectionMonitor: fakeMonitor{}, - LocalAddr: &utils.NetAddr{}, + LocalAddr: utils.MustParseAddr("127.0.0.1:4242"), }) stream, err := srv.Client.ProxyCluster(context.Background()) @@ -450,7 +489,7 @@ func TestService_ProxySSH_Errors(t *testing.T) { SignerFn: fakeSigner, ConnectionMonitor: fakeMonitor{}, Logger: utils.NewLoggerForTests(), - LocalAddr: &utils.NetAddr{}, + LocalAddr: utils.MustParseAddr("127.0.0.1:4242"), authzContextFn: func(info credentials.AuthInfo) (*authz.Context, error) { checker, err := test.checkerFn(info) if err != nil { @@ -514,7 +553,7 @@ func TestService_ProxySSH(t *testing.T) { Dialer: sshSrv, SignerFn: fakeSigner, Logger: utils.NewLoggerForTests(), - LocalAddr: &utils.NetAddr{}, + LocalAddr: utils.MustParseAddr("127.0.0.1:4242"), ConnectionMonitor: fakeMonitor{}, agentGetterFn: func(rw io.ReadWriter) teleagent.Getter { return func() (teleagent.Agent, error) { @@ -622,6 +661,58 @@ func TestService_ProxySSH(t *testing.T) { require.Len(t, keys, 2) } +func TestGetDestinationAddress(t *testing.T) { + testCases := []struct { + listenerAddr string + srcAddr string + expected string + }{ + { + srcAddr: "4.3.2.1:65", + listenerAddr: "1.2.3.4:56", + expected: "1.2.3.4:56", + }, + { + srcAddr: "4.3.2.1:65", + listenerAddr: "[2601:602:8700:4470:a3:813c:1d8c:30b9]:56", + expected: "127.0.0.1:56", + }, + { + srcAddr: "[2601:602:8700:4470:a3:813c:1d8c:30b9]:65", + listenerAddr: "1.2.3.4:56", + expected: "[::1]:56", + }, + { + srcAddr: "4.3.2.1:65", + listenerAddr: "0.0.0.0:56", + expected: "127.0.0.1:56", + }, + { + srcAddr: "4.3.2.1:65", + listenerAddr: "[::]:56", + expected: "127.0.0.1:56", + }, + { + srcAddr: "[2601:602:8700:4470:a3:813c:1d8c:30b9]:65", + listenerAddr: "[::]:56", + expected: "[::1]:56", + }, + { + srcAddr: "[2601:602:8700:4470:a3:813c:1d8c:30b9]:65", + listenerAddr: "0.0.0.0:56", + expected: "[::1]:56", + }, + } + + for i, tt := range testCases { + t.Run(fmt.Sprintf("Test #%d", i), func(t *testing.T) { + res, err := getDestinationAddress(utils.MustParseAddr(tt.srcAddr), utils.MustParseAddr(tt.listenerAddr)) + require.NoError(t, err) + require.Equal(t, tt.expected, res.String()) + }) + } +} + // clientStream implements the [streamutils.Source] interface // for a [transportv1pb.TransportService_ProxySSHClient]. Instead of // reading directly from the stream reads are from an incoming diff --git a/lib/utils/proxy/proxy.go b/lib/utils/proxy/proxy.go index 441b78394188e..a2d3c5c4356d7 100644 --- a/lib/utils/proxy/proxy.go +++ b/lib/utils/proxy/proxy.go @@ -28,7 +28,6 @@ import ( "github.com/gravitational/teleport" apiclient "github.com/gravitational/teleport/api/client" - "github.com/gravitational/teleport/api/observability/tracing" tracessh "github.com/gravitational/teleport/api/observability/tracing/ssh" apiutils "github.com/gravitational/teleport/api/utils" ) @@ -37,35 +36,6 @@ var log = logrus.WithFields(logrus.Fields{ trace.Component: teleport.ComponentConnectProxy, }) -// dialWithDeadline works around the case when net.DialWithTimeout -// succeeds, but key exchange hangs. Setting deadline on connection -// prevents this case from happening -func dialWithDeadline(ctx context.Context, network string, addr string, config *ssh.ClientConfig) (*tracessh.Client, error) { - dialer := &net.Dialer{ - Timeout: config.Timeout, - } - - conn, err := dialer.DialContext(ctx, network, addr) - if err != nil { - return nil, err - } - return tracessh.NewClientConnWithDeadline(ctx, conn, addr, config) -} - -// dialALPNWithDeadline allows connecting to Teleport in single-port mode. SSH protocol is wrapped into -// TLS connection where TLS ALPN protocol is set to ProtocolReverseTunnel allowing ALPN Proxy to route the -// incoming connection to ReverseTunnel proxy service. -func (d directDial) dialALPNWithDeadline(ctx context.Context, network string, addr string, config *ssh.ClientConfig) (*tracessh.Client, error) { - ctx, span := tracing.DefaultProvider().Tracer("dialer").Start(ctx, "directDial/dialALPNWithDeadline") - defer span.End() - - tlsConn, err := d.alpnDialer.DialContext(ctx, network, addr) - if err != nil { - return nil, trace.Wrap(err) - } - return tracessh.NewClientConnWithDeadline(ctx, tlsConn, addr, config) -} - // A Dialer is a means for a client to establish a SSH connection. type Dialer interface { // Dial establishes a client connection to a SSH server. @@ -78,22 +48,21 @@ type Dialer interface { type directDial struct { // alpnDialer is the dialer used for TLS routing. alpnDialer apiclient.ContextDialer + // proxyHeaderGetter is used if present to get signed PROXY headers to propagate client's IP. + // Used by proxy's web server to make calls on behalf of connected clients. + proxyHeaderGetter apiclient.PROXYHeaderGetter } -// Dial calls ssh.Dial directly. +// Dial returns traced SSH client connection func (d directDial) Dial(ctx context.Context, network string, addr string, config *ssh.ClientConfig) (*tracessh.Client, error) { - if d.alpnDialer != nil { - client, err := d.dialALPNWithDeadline(ctx, network, addr, config) - if err != nil { - return nil, trace.Wrap(err) - } - return client, nil - } - client, err := dialWithDeadline(ctx, network, addr, config) + conn, err := d.DialTimeout(ctx, network, addr, config.Timeout) if err != nil { return nil, trace.Wrap(err) } - return client, nil + + // Works around the case when net.DialWithTimeout succeeds, but key exchange hangs. + // Setting deadline on connection prevents this case from happening + return tracessh.NewClientConnWithDeadline(ctx, conn, addr, config) } // DialTimeout acts like Dial but takes a timeout. @@ -103,15 +72,12 @@ func (d directDial) DialTimeout(ctx context.Context, network, address string, ti return conn, trace.Wrap(err) } - dialer := &net.Dialer{ + dialer := apiclient.NewPROXYHeaderDialer(&net.Dialer{ Timeout: timeout, - } + }, d.proxyHeaderGetter) conn, err := dialer.DialContext(ctx, network, address) - if err != nil { - return nil, trace.Wrap(err) - } - return conn, nil + return conn, trace.Wrap(err) } type proxyDial struct { @@ -119,6 +85,9 @@ type proxyDial struct { proxyURL *url.URL // insecure is whether to skip certificate validation. insecure bool + // proxyHeaderGetter is used if present to get signed PROXY headers to propagate client's IP. + // Used by proxy's web server to make calls on behalf of connected clients. + proxyHeaderGetter apiclient.PROXYHeaderGetter // alpnDialer is the dialer used for TLS routing. alpnDialer apiclient.ContextDialer } @@ -138,7 +107,8 @@ func (d proxyDial) DialTimeout(ctx context.Context, network, address string, tim return tlsConn, trace.Wrap(err) } - conn, err := apiclient.DialProxy(ctx, d.proxyURL, address, apiclient.WithInsecureSkipVerify(d.insecure)) + conn, err := apiclient.DialProxy(ctx, d.proxyURL, address, apiclient.WithInsecureSkipVerify(d.insecure), + apiclient.WithPROXYHeaderGetter(d.proxyHeaderGetter)) if err != nil { return nil, trace.Wrap(err) } @@ -178,6 +148,8 @@ type dialerOptions struct { insecureSkipTLSVerify bool // alpnDialer is the dialer used for TLS routing. alpnDialer apiclient.ContextDialer + + proxyHeaderGetter apiclient.PROXYHeaderGetter } // DialerOptionFunc allows setting options as functional arguments to DialerFromEnvironment @@ -197,6 +169,13 @@ func WithInsecureSkipTLSVerify(insecure bool) DialerOptionFunc { } } +// WithPROXYHeaderGetter adds PROXY headers getter, which is used to propagate client's real IP +func WithPROXYHeaderGetter(proxyHeaderGetter apiclient.PROXYHeaderGetter) DialerOptionFunc { + return func(options *dialerOptions) { + options.proxyHeaderGetter = proxyHeaderGetter + } +} + // DialerFromEnvironment returns a Dial function. If the https_proxy or http_proxy // environment variable are set, it returns a function that will dial through // said proxy server. If neither variable is set, it will connect to the SSH @@ -215,14 +194,16 @@ func DialerFromEnvironment(addr string, opts ...DialerOptionFunc) Dialer { if proxyURL == nil { log.Debugf("No proxy set in environment, returning direct dialer.") return directDial{ - alpnDialer: options.alpnDialer, + alpnDialer: options.alpnDialer, + proxyHeaderGetter: options.proxyHeaderGetter, } } log.Debugf("Found proxy %q in environment, returning proxy dialer.", proxyURL) return proxyDial{ - proxyURL: proxyURL, - insecure: options.insecureSkipTLSVerify, - alpnDialer: options.alpnDialer, + proxyURL: proxyURL, + insecure: options.insecureSkipTLSVerify, + alpnDialer: options.alpnDialer, + proxyHeaderGetter: options.proxyHeaderGetter, } } diff --git a/lib/utils/tlsdial.go b/lib/utils/tlsdial.go index 802b554ece3c4..c33b6effbdcff 100644 --- a/lib/utils/tlsdial.go +++ b/lib/utils/tlsdial.go @@ -13,7 +13,7 @@ import ( "github.com/gravitational/trace" ) -// DialWithContext dials with context +// DialWithContextFunc dials with context type DialWithContextFunc func(ctx context.Context, network, addr string) (net.Conn, error) // TLSDial dials and establishes TLS connection using custom dialer diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 7da4d4d873e25..a262e78a88ee9 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -317,6 +317,7 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*APIHandler, error) { cipherSuites: cfg.CipherSuites, clock: h.clock, sessionLingeringThreshold: sessionLingeringThreshold, + proxySigner: cfg.PROXYSigner, }) if err != nil { return nil, trace.Wrap(err) @@ -1966,6 +1967,12 @@ func (h *Handler) changeUserAuthentication(w http.ResponseWriter, r *http.Reques }} } + remoteAddr, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { + return nil, trace.Wrap(err) + } + protoReq.LoginIP = remoteAddr + res, err := h.auth.proxyClient.ChangeUserAuthentication(r.Context(), protoReq) if err != nil { return nil, trace.Wrap(err) diff --git a/lib/web/desktop.go b/lib/web/desktop.go index 480a970c7d943..66de7829fa3c2 100644 --- a/lib/web/desktop.go +++ b/lib/web/desktop.go @@ -45,6 +45,7 @@ import ( "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/httplib" + "github.com/gravitational/teleport/lib/multiplexer" "github.com/gravitational/teleport/lib/reversetunnel" "github.com/gravitational/teleport/lib/srv/desktop" "github.com/gravitational/teleport/lib/srv/desktop/tdp" @@ -165,11 +166,14 @@ func (h *Handler) createDesktopConnection( validServiceIDs[i], validServiceIDs[j] = validServiceIDs[j], validServiceIDs[i] }) + clientSrcAddr, clientDstAddr := utils.ClientAddrFromContext(r.Context()) + c := &connector{ - log: log, - clt: clt, - site: site, - userAddr: r.RemoteAddr, + log: log, + clt: clt, + site: site, + clientSrcAddr: clientSrcAddr, + clientDstAddr: clientDstAddr, } serviceConn, err := c.connectToWindowsService(clusterName, validServiceIDs) if err != nil { @@ -177,7 +181,7 @@ func (h *Handler) createDesktopConnection( } defer serviceConn.Close() - pc, err := proxyClient(r.Context(), sctx, h.ProxyHostPort(), username) + pc, err := proxyClient(r.Context(), sctx, h.ProxyHostPort(), username, h.cfg.PROXYSigner) if err != nil { return sendTDPError(trace.Wrap(err)) } @@ -211,7 +215,7 @@ func (h *Handler) createDesktopConnection( return nil } -func proxyClient(ctx context.Context, sessCtx *SessionContext, addr, windowsUser string) (*client.ProxyClient, error) { +func proxyClient(ctx context.Context, sessCtx *SessionContext, addr, windowsUser string, proxySigner multiplexer.PROXYHeaderSigner) (*client.ProxyClient, error) { cfg, err := makeTeleportClientConfig(ctx, sessCtx) if err != nil { return nil, trace.Wrap(err) @@ -222,6 +226,8 @@ func proxyClient(ctx context.Context, sessCtx *SessionContext, addr, windowsUser // environments where we're running as an arbitrary UID) cfg.HostLogin = windowsUser + cfg.PROXYSigner = proxySigner + if err := cfg.ParseProxyHost(addr); err != nil { return nil, trace.Wrap(err) } @@ -281,10 +287,11 @@ func desktopTLSConfig(ctx context.Context, ws *websocket.Conn, pc *client.ProxyC } type connector struct { - log *logrus.Entry - clt auth.ClientI - site reversetunnel.RemoteSite - userAddr string + log *logrus.Entry + clt auth.ClientI + site reversetunnel.RemoteSite + clientSrcAddr net.Addr + clientDstAddr net.Addr } // connectToWindowsService tries to make a connection to a Windows Desktop Service @@ -318,11 +325,12 @@ func (c *connector) tryConnect(clusterName, desktopServiceID string) (net.Conn, *c.log = *c.log.WithField("windows-service-uuid", service.GetName()) *c.log = *c.log.WithField("windows-service-addr", service.GetAddr()) return c.site.DialTCP(reversetunnel.DialParams{ - From: &utils.NetAddr{AddrNetwork: "tcp", Addr: c.userAddr}, - To: &utils.NetAddr{AddrNetwork: "tcp", Addr: service.GetAddr()}, - ConnType: types.WindowsDesktopTunnel, - ServerID: service.GetName() + "." + clusterName, - ProxyIDs: service.GetProxyIDs(), + From: c.clientSrcAddr, + To: &utils.NetAddr{AddrNetwork: "tcp", Addr: service.GetAddr()}, + ConnType: types.WindowsDesktopTunnel, + ServerID: service.GetName() + "." + clusterName, + ProxyIDs: service.GetProxyIDs(), + OriginalClientDstAddr: c.clientDstAddr, }) } diff --git a/lib/web/files.go b/lib/web/files.go index d2e427be4217b..d75d949d52921 100644 --- a/lib/web/files.go +++ b/lib/web/files.go @@ -32,6 +32,7 @@ import ( "github.com/gravitational/teleport/lib/auth" wanlib "github.com/gravitational/teleport/lib/auth/webauthn" "github.com/gravitational/teleport/lib/client" + "github.com/gravitational/teleport/lib/multiplexer" "github.com/gravitational/teleport/lib/reversetunnel" "github.com/gravitational/teleport/lib/sshutils/sftp" ) @@ -124,7 +125,7 @@ func (h *Handler) transferFile(w http.ResponseWriter, r *http.Request, p httprou return nil, trace.Wrap(err) } - tc, err := ft.createClient(req, r) + tc, err := ft.createClient(req, r, h.cfg.PROXYSigner) if err != nil { return nil, trace.Wrap(err) } @@ -160,7 +161,7 @@ type fileTransfer struct { proxyHostPort string } -func (f *fileTransfer) createClient(req fileTransferRequest, httpReq *http.Request) (*client.TeleportClient, error) { +func (f *fileTransfer) createClient(req fileTransferRequest, httpReq *http.Request, proxySigner multiplexer.PROXYHeaderSigner) (*client.TeleportClient, error) { if !types.IsValidNamespace(req.namespace) { return nil, trace.BadParameter("invalid namespace %q", req.namespace) } @@ -193,6 +194,7 @@ func (f *fileTransfer) createClient(req fileTransferRequest, httpReq *http.Reque cfg.Host = hostName cfg.HostPort = hostPort cfg.ClientAddr = httpReq.RemoteAddr + cfg.PROXYSigner = proxySigner tc, err := client.NewClient(cfg) if err != nil { diff --git a/lib/web/sessions.go b/lib/web/sessions.go index f86dd4ea9d718..2dc5c65a5c25d 100644 --- a/lib/web/sessions.go +++ b/lib/web/sessions.go @@ -48,6 +48,7 @@ import ( apisshutils "github.com/gravitational/teleport/api/utils/sshutils" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/client" + "github.com/gravitational/teleport/lib/multiplexer" "github.com/gravitational/teleport/lib/reversetunnel" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/services/local" @@ -290,12 +291,20 @@ func newRemoteClient(ctx context.Context, sctx *SessionContext, site reversetunn } // clusterDialer returns DialContext function using cluster's dial function -func clusterDialer(remoteCluster reversetunnel.RemoteSite) apiclient.ContextDialer { +func clusterDialer(remoteCluster reversetunnel.RemoteSite, src, dst net.Addr) apiclient.ContextDialer { return apiclient.ContextDialerFunc(func(in context.Context, network, _ string) (net.Conn, error) { - dialParams := reversetunnel.DialParams{} + dialParams := reversetunnel.DialParams{ + From: src, + OriginalClientDstAddr: dst, + } + clientSrcAddr, clientDstAddr := utils.ClientAddrFromContext(in) - dialParams.From = clientSrcAddr - dialParams.OriginalClientDstAddr = clientDstAddr + if dialParams.From == nil && clientSrcAddr != nil { + dialParams.From = clientSrcAddr + } + if dialParams.OriginalClientDstAddr == nil && clientDstAddr != nil { + dialParams.OriginalClientDstAddr = clientSrcAddr + } return remoteCluster.DialAuthServer(dialParams) }) @@ -383,9 +392,11 @@ func (c *SessionContext) newRemoteTLSClient(ctx context.Context, cluster reverse return nil, trace.Wrap(err) } + clientSrcAddr, clientDstAddr := utils.ClientAddrFromContext(ctx) + return auth.NewClient(apiclient.Config{ Context: ctx, - Dialer: clusterDialer(cluster), + Dialer: clusterDialer(cluster, clientSrcAddr, clientDstAddr), Credentials: []apiclient.Credentials{ apiclient.LoadTLS(tlsConfig), }, @@ -603,6 +614,8 @@ type sessionCacheOptions struct { // sessionLingeringThreshold specifies the time the session will linger // in the cache before getting purged after it has expired sessionLingeringThreshold time.Duration + // proxySigner is used to sign PROXY header and securely propagate client's real IP + proxySigner multiplexer.PROXYHeaderSigner } // newSessionCache creates a [sessionCache] from the provided [config] and @@ -630,6 +643,7 @@ func newSessionCache(ctx context.Context, config sessionCacheOptions) (*sessionC log: newPackageLogger(), clock: config.clock, sessionLingeringThreshold: config.sessionLingeringThreshold, + proxySigner: config.proxySigner, } // periodically close expired and unused sessions @@ -669,6 +683,9 @@ type sessionCache struct { // is either explicitly invalidated (e.g. during logout) or the // resources are themselves closing resources map[string]*sessionResources + + // proxySigner is used to sign PROXY header and securely propagate client's real IP + proxySigner multiplexer.PROXYHeaderSigner } // Close closes all allocated resources and stops goroutines @@ -942,10 +959,12 @@ func (s *sessionCache) newSessionContextFromSession(ctx context.Context, session if err != nil { return nil, trace.Wrap(err) } + userClient, err := auth.NewClient(apiclient.Config{ Addrs: utils.NetAddrsToStrings(s.authServers), Credentials: []apiclient.Credentials{apiclient.LoadTLS(tlsConfig)}, CircuitBreakerConfig: breaker.NoopBreakerConfig(), + PROXYHeaderGetter: client.CreatePROXYHeaderGetter(ctx, s.proxySigner), }) if err != nil { return nil, trace.Wrap(err)