From a594f9be986d81c90dc6b92a1abbd3d8c187f028 Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 02:59:57 -0400 Subject: [PATCH 01/13] Added favicon handler to serve favicon.png --- hscontrol/handlers.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hscontrol/handlers.go b/hscontrol/handlers.go index 0cc5bd36..db1d80f2 100644 --- a/hscontrol/handlers.go +++ b/hscontrol/handlers.go @@ -1,6 +1,8 @@ package hscontrol import ( + "bytes" + _ "embed" "encoding/json" "errors" "fmt" @@ -8,6 +10,7 @@ import ( "net/http" "strconv" "strings" + "time" "github.com/chasefleming/elem-go/styles" "github.com/gorilla/mux" @@ -268,3 +271,10 @@ func (a *AuthProviderWeb) RegisterHandler( writer.WriteHeader(http.StatusOK) writer.Write([]byte(templates.RegisterWeb(registrationId).Render())) } + +//go:embed assets/favicon.png +var favicon[] byte +func FaviconHandler(writer http.ResponseWriter, req *http.Request) { + writer.Header().Set("Content-Type", "image/x-icon") + http.ServeContent(writer, req, "favicon.ico", time.Unix(0, 0), bytes.NewReader(favicon)) +} From 19b36c5adc0cf7a5581a36c277a66e18e3fe615b Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:00:36 -0400 Subject: [PATCH 02/13] Added blank page handler, return blank html linking favicon --- hscontrol/handlers.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hscontrol/handlers.go b/hscontrol/handlers.go index db1d80f2..9c9d6451 100644 --- a/hscontrol/handlers.go +++ b/hscontrol/handlers.go @@ -278,3 +278,12 @@ func FaviconHandler(writer http.ResponseWriter, req *http.Request) { writer.Header().Set("Content-Type", "image/x-icon") http.ServeContent(writer, req, "favicon.ico", time.Unix(0, 0), bytes.NewReader(favicon)) } +// Returns a blank page with favicon linked +func BlankHandler(writer http.ResponseWriter, res *http.Request) { + writer.Header().Set("Content-Type", "text/html; charset=utf-8") + io.WriteString(writer, ` + + + + `) +} \ No newline at end of file From 5888e5896f3a7a1c6876e6991947f85ede39f4ca Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:02:22 -0400 Subject: [PATCH 03/13] Added route for /favicon.ico to createRouter --- hscontrol/app.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hscontrol/app.go b/hscontrol/app.go index eb5528ba..8bf923fc 100644 --- a/hscontrol/app.go +++ b/hscontrol/app.go @@ -476,8 +476,7 @@ func (h *Headscale) createRouter(grpcMux *grpcRuntime.ServeMux) *mux.Router { apiRouter := router.PathPrefix("/api").Subrouter() apiRouter.Use(h.httpAuthenticationMiddleware) apiRouter.PathPrefix("/v1/").HandlerFunc(grpcMux.ServeHTTP) - - router.PathPrefix("/").HandlerFunc(notFoundHandler) + router.HandleFunc("/favicon.ico", FaviconHandler) return router } From f00af9ee2605cef99168cab237d4d7fead76f532 Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:03:39 -0400 Subject: [PATCH 04/13] Changed root route to use BlankHandler instead of 404 handler --- hscontrol/app.go | 1 + 1 file changed, 1 insertion(+) diff --git a/hscontrol/app.go b/hscontrol/app.go index 8bf923fc..4ce98719 100644 --- a/hscontrol/app.go +++ b/hscontrol/app.go @@ -477,6 +477,7 @@ func (h *Headscale) createRouter(grpcMux *grpcRuntime.ServeMux) *mux.Router { apiRouter.Use(h.httpAuthenticationMiddleware) apiRouter.PathPrefix("/v1/").HandlerFunc(grpcMux.ServeHTTP) router.HandleFunc("/favicon.ico", FaviconHandler) + router.PathPrefix("/").HandlerFunc(BlankHandler) return router } From 6783132c00c014813b45c80a668fb0a6f23eaa91 Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:04:32 -0400 Subject: [PATCH 05/13] Added favicon to assets, downloaded from GitHub README --- hscontrol/assets/favicon.png | Bin 0 -> 50413 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 hscontrol/assets/favicon.png diff --git a/hscontrol/assets/favicon.png b/hscontrol/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8463e5ec2bde6a8115e00567a4a040c6434d12ab GIT binary patch literal 50413 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 S-u=SF-&R-EQpr%V@clo$q<(1t literal 0 HcmV?d00001 From a96d3300de5ef0488ce024bcb91adb3fe1c63b59 Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:05:10 -0400 Subject: [PATCH 06/13] Linked favicon.ico to base template --- swagger.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swagger.go b/swagger.go index 306fc1f6..9f2b1f4e 100644 --- a/swagger.go +++ b/swagger.go @@ -20,7 +20,7 @@ func SwaggerUI( - + From 903351d44f02e61dadd4d009ef9b1a0b1ca4bd2e Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:10:51 -0400 Subject: [PATCH 07/13] Change content type to match actual file type --- hscontrol/handlers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hscontrol/handlers.go b/hscontrol/handlers.go index 9c9d6451..b4bcd022 100644 --- a/hscontrol/handlers.go +++ b/hscontrol/handlers.go @@ -275,7 +275,7 @@ func (a *AuthProviderWeb) RegisterHandler( //go:embed assets/favicon.png var favicon[] byte func FaviconHandler(writer http.ResponseWriter, req *http.Request) { - writer.Header().Set("Content-Type", "image/x-icon") + writer.Header().Set("Content-Type", "image/png") http.ServeContent(writer, req, "favicon.ico", time.Unix(0, 0), bytes.NewReader(favicon)) } // Returns a blank page with favicon linked From 29f4fb91e816510a5d4452cec1b250450fa8cb80 Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:22:59 -0400 Subject: [PATCH 08/13] Update after running make fmt --- hscontrol/handlers.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/hscontrol/handlers.go b/hscontrol/handlers.go index b4bcd022..d52b4d50 100644 --- a/hscontrol/handlers.go +++ b/hscontrol/handlers.go @@ -101,6 +101,7 @@ func (h *Headscale) handleVerifyRequest( // Check if any node has the requested NodeKey var nodeKeyFound bool + for _, node := range nodes.All() { if node.NodeKey() == derpAdmitClientRequest.NodePublic { nodeKeyFound = true @@ -131,6 +132,7 @@ func (h *Headscale) VerifyHandler( httpError(writer, err) return } + writer.Header().Set("Content-Type", "application/json") } @@ -152,6 +154,7 @@ func (h *Headscale) KeyHandler( resp := tailcfg.OverTLSPublicKeyResponse{ PublicKey: h.noisePrivateKey.Public(), } + writer.Header().Set("Content-Type", "application/json") json.NewEncoder(writer).Encode(resp) @@ -174,13 +177,14 @@ func (h *Headscale) HealthHandler( if err != nil { writer.WriteHeader(http.StatusInternalServerError) + res.Status = "fail" } json.NewEncoder(writer).Encode(res) } - - if err := h.state.PingDB(req.Context()); err != nil { + err := h.state.PingDB(req.Context()) + if err != nil { respond(err) return @@ -195,6 +199,7 @@ func (h *Headscale) RobotsHandler( ) { writer.Header().Set("Content-Type", "text/plain") writer.WriteHeader(http.StatusOK) + _, err := writer.Write([]byte("User-agent: *\nDisallow: /")) if err != nil { log.Error(). @@ -214,7 +219,8 @@ func (h *Headscale) VersionHandler( writer.WriteHeader(http.StatusOK) versionInfo := types.GetVersionInfo() - if err := json.NewEncoder(writer).Encode(versionInfo); err != nil { + err := json.NewEncoder(writer).Encode(versionInfo) + if err != nil { log.Error(). Caller(). Err(err). @@ -273,12 +279,14 @@ func (a *AuthProviderWeb) RegisterHandler( } //go:embed assets/favicon.png -var favicon[] byte +var favicon []byte + func FaviconHandler(writer http.ResponseWriter, req *http.Request) { writer.Header().Set("Content-Type", "image/png") http.ServeContent(writer, req, "favicon.ico", time.Unix(0, 0), bytes.NewReader(favicon)) } -// Returns a blank page with favicon linked + +// Returns a blank page with favicon linked. func BlankHandler(writer http.ResponseWriter, res *http.Request) { writer.Header().Set("Content-Type", "text/html; charset=utf-8") io.WriteString(writer, ` @@ -286,4 +294,4 @@ func BlankHandler(writer http.ResponseWriter, res *http.Request) { `) -} \ No newline at end of file +} From 4f05974d86e5e2e7ce50719f6e9fd7213943ee23 Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 03:36:04 -0400 Subject: [PATCH 09/13] Update after running make fmt --- hscontrol/app.go | 65 ++++++++++++++++++++++++++++++++++++++++++------ swagger.go | 3 +++ 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/hscontrol/app.go b/hscontrol/app.go index 4ce98719..5f245ad1 100644 --- a/hscontrol/app.go +++ b/hscontrol/app.go @@ -114,6 +114,7 @@ var ( func NewHeadscale(cfg *types.Config) (*Headscale, error) { var err error + if profilingEnabled { runtime.SetBlockProfileRate(1) } @@ -141,6 +142,7 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { if !ok { log.Error().Uint64("node.id", ni.Uint64()).Msg("Ephemeral node deletion failed") log.Debug().Caller().Uint64("node.id", ni.Uint64()).Msg("Ephemeral node deletion failed because node not found in NodeStore") + return } @@ -156,10 +158,12 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { app.ephemeralGC = ephemeralGC var authProvider AuthProvider + authProvider = NewAuthProviderWeb(cfg.ServerURL) if cfg.OIDC.Issuer != "" { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() + oidcProvider, err := NewAuthProviderOIDC( ctx, &app, @@ -176,17 +180,18 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { authProvider = oidcProvider } } + app.authProvider = authProvider if app.cfg.TailcfgDNSConfig != nil && app.cfg.TailcfgDNSConfig.Proxied { // if MagicDNS // TODO(kradalby): revisit why this takes a list. - var magicDNSDomains []dnsname.FQDN if cfg.PrefixV4 != nil { magicDNSDomains = append( magicDNSDomains, util.GenerateIPv4DNSRootDomain(*cfg.PrefixV4)...) } + if cfg.PrefixV6 != nil { magicDNSDomains = append( magicDNSDomains, @@ -197,6 +202,7 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { if app.cfg.TailcfgDNSConfig.Routes == nil { app.cfg.TailcfgDNSConfig.Routes = make(map[string][]*dnstype.Resolver) } + for _, d := range magicDNSDomains { app.cfg.TailcfgDNSConfig.Routes[d.WithoutTrailingDot()] = nil } @@ -231,6 +237,7 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { if err != nil { return nil, err } + app.DERPServer = embeddedDERPServer } @@ -253,6 +260,7 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { if h.cfg.DERP.AutoUpdate && h.cfg.DERP.UpdateFrequency != 0 { derpTicker := time.NewTicker(h.cfg.DERP.UpdateFrequency) defer derpTicker.Stop() + derpTickerChan = derpTicker.C } @@ -270,8 +278,10 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { return case <-expireTicker.C: - var expiredNodeChanges []change.ChangeSet - var changed bool + var ( + expiredNodeChanges []change.ChangeSet + changed bool + ) lastExpiryCheck, expiredNodeChanges, changed = h.state.ExpireExpiredNodes(lastExpiryCheck) @@ -286,11 +296,13 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { case <-derpTickerChan: log.Info().Msg("Fetching DERPMap updates") + derpMap, err := backoff.Retry(ctx, func() (*tailcfg.DERPMap, error) { derpMap, err := derp.GetDERPMap(h.cfg.DERP) if err != nil { return nil, err } + if h.cfg.DERP.ServerEnabled && h.cfg.DERP.AutomaticallyAddEmbeddedDerpRegion { region, _ := h.DERPServer.GenerateRegion() derpMap.Regions[region.RegionID] = ®ion @@ -302,6 +314,7 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { log.Error().Err(err).Msg("failed to build new DERPMap, retrying later") continue } + h.state.SetDERPMap(derpMap) h.Change(change.DERPSet) @@ -310,6 +323,7 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { if !ok { continue } + h.cfg.TailcfgDNSConfig.ExtraRecords = records h.Change(change.ExtraRecordsSet) @@ -389,6 +403,7 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler writeUnauthorized := func(statusCode int) { writer.WriteHeader(statusCode) + if _, err := writer.Write([]byte("Unauthorized")); err != nil { log.Error().Err(err).Msg("writing HTTP response failed") } @@ -400,6 +415,7 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler Str("client_address", req.RemoteAddr). Msg(`missing "Bearer " prefix in "Authorization" header`) writeUnauthorized(http.StatusUnauthorized) + return } @@ -411,6 +427,7 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler Str("client_address", req.RemoteAddr). Msg("failed to validate token") writeUnauthorized(http.StatusUnauthorized) + return } @@ -419,6 +436,7 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler Str("client_address", req.RemoteAddr). Msg("invalid token") writeUnauthorized(http.StatusUnauthorized) + return } @@ -454,6 +472,7 @@ func (h *Headscale) createRouter(grpcMux *grpcRuntime.ServeMux) *mux.Router { if provider, ok := h.authProvider.(*AuthProviderOIDC); ok { router.HandleFunc("/oidc/callback", provider.OIDCCallbackHandler).Methods(http.MethodGet) } + router.HandleFunc("/apple", h.AppleConfigMessage).Methods(http.MethodGet) router.HandleFunc("/apple/{platform}", h.ApplePlatformConfig). Methods(http.MethodGet) @@ -485,6 +504,7 @@ func (h *Headscale) createRouter(grpcMux *grpcRuntime.ServeMux) *mux.Router { // Serve launches the HTTP and gRPC server service Headscale and the API. func (h *Headscale) Serve() error { var err error + capver.CanOldCodeBeCleanedUp() if profilingEnabled { @@ -511,6 +531,7 @@ func (h *Headscale) Serve() error { Msg("Clients with a lower minimum version will be rejected") h.mapBatcher = mapper.NewBatcherAndMapper(h.cfg, h.state) + h.mapBatcher.Start() defer h.mapBatcher.Close() @@ -544,6 +565,7 @@ func (h *Headscale) Serve() error { // around between restarts, they will reconnect and the GC will // be cancelled. go h.ephemeralGC.Start() + ephmNodes := h.state.ListEphemeralNodes() for _, node := range ephmNodes.All() { h.ephemeralGC.Schedule(node.ID(), h.cfg.EphemeralNodeInactivityTimeout) @@ -554,7 +576,9 @@ func (h *Headscale) Serve() error { if err != nil { return fmt.Errorf("setting up extrarecord manager: %w", err) } + h.cfg.TailcfgDNSConfig.ExtraRecords = h.extraRecordMan.Records() + go h.extraRecordMan.Run() defer h.extraRecordMan.Close() } @@ -563,6 +587,7 @@ func (h *Headscale) Serve() error { // records updates scheduleCtx, scheduleCancel := context.WithCancel(context.Background()) defer scheduleCancel() + go h.scheduledTasks(scheduleCtx) if zl.GlobalLevel() == zl.TraceLevel { @@ -575,6 +600,7 @@ func (h *Headscale) Serve() error { errorGroup := new(errgroup.Group) ctx := context.Background() + ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -589,6 +615,7 @@ func (h *Headscale) Serve() error { } socketDir := filepath.Dir(h.cfg.UnixSocket) + err = util.EnsureDir(socketDir) if err != nil { return fmt.Errorf("setting up unix socket: %w", err) @@ -658,8 +685,11 @@ func (h *Headscale) Serve() error { // https://github.com/soheilhy/cmux/issues/68 // https://github.com/soheilhy/cmux/issues/91 - var grpcServer *grpc.Server - var grpcListener net.Listener + var ( + grpcServer *grpc.Server + grpcListener net.Listener + ) + if tlsConfig != nil || h.cfg.GRPCAllowInsecure { log.Info().Msgf("Enabling remote gRPC at %s", h.cfg.GRPCAddr) @@ -714,12 +744,14 @@ func (h *Headscale) Serve() error { } var httpListener net.Listener + if tlsConfig != nil { httpServer.TLSConfig = tlsConfig httpListener, err = tls.Listen("tcp", h.cfg.Addr, tlsConfig) } else { httpListener, err = net.Listen("tcp", h.cfg.Addr) } + if err != nil { return fmt.Errorf("failed to bind to TCP address: %w", err) } @@ -735,22 +767,27 @@ func (h *Headscale) Serve() error { } debugHTTPServer := h.debugHTTPServer() + errorGroup.Go(func() error { return debugHTTPServer.Serve(debugHTTPListener) }) log.Info(). Msgf("listening and serving debug and metrics on: %s", h.cfg.MetricsAddr) var tailsqlContext context.Context + if tailsqlEnabled { if h.cfg.Database.Type != types.DatabaseSqlite { log.Fatal(). Str("type", h.cfg.Database.Type). Msgf("tailsql only support %q", types.DatabaseSqlite) } + if tailsqlTSKey == "" { log.Fatal().Msg("tailsql requires TS_AUTHKEY to be set") } + tailsqlContext = context.Background() + go runTailSQLService(ctx, util.TSLogfWrapper(), tailsqlStateDir, h.cfg.Database.Sqlite.Path) } @@ -762,6 +799,7 @@ func (h *Headscale) Serve() error { syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGHUP) + sigFunc := func(c chan os.Signal) { // Wait for a SIGINT or SIGKILL: for { @@ -786,6 +824,7 @@ func (h *Headscale) Serve() error { default: info := func(msg string) { log.Info().Msg(msg) } + log.Info(). Str("signal", sig.String()). Msg("Received signal to stop, shutting down gracefully") @@ -798,12 +837,18 @@ func (h *Headscale) Serve() error { context.Background(), types.HTTPShutdownTimeout, ) + info("shutting down debug http server") - if err := debugHTTPServer.Shutdown(ctx); err != nil { + + err := debugHTTPServer.Shutdown(ctx) + if err != nil { log.Error().Err(err).Msg("failed to shutdown prometheus http") } + info("shutting down main http server") - if err := httpServer.Shutdown(ctx); err != nil { + + err := httpServer.Shutdown(ctx) + if err != nil { log.Error().Err(err).Msg("failed to shutdown http") } @@ -839,6 +884,7 @@ func (h *Headscale) Serve() error { // Close state connections info("closing state and database") + err = h.state.Close() if err != nil { log.Error().Err(err).Msg("failed to close state") @@ -854,6 +900,7 @@ func (h *Headscale) Serve() error { } } } + errorGroup.Go(func() error { sigFunc(sigc) @@ -865,6 +912,7 @@ func (h *Headscale) Serve() error { func (h *Headscale) getTLSSettings() (*tls.Config, error) { var err error + if h.cfg.TLS.LetsEncrypt.Hostname != "" { if !strings.HasPrefix(h.cfg.ServerURL, "https://") { log.Warn(). @@ -892,7 +940,6 @@ func (h *Headscale) getTLSSettings() (*tls.Config, error) { // Configuration via autocert with HTTP-01. This requires listening on // port 80 for the certificate validation in addition to the headscale // service, which can be configured to run on any other port. - server := &http.Server{ Addr: h.cfg.TLS.LetsEncrypt.Listen, Handler: certManager.HTTPHandler(http.HandlerFunc(h.redirect)), @@ -949,6 +996,7 @@ func notFoundHandler( func readOrCreatePrivateKey(path string) (*key.MachinePrivate, error) { dir := filepath.Dir(path) + err := util.EnsureDir(dir) if err != nil { return nil, fmt.Errorf("ensuring private key directory: %w", err) @@ -967,6 +1015,7 @@ func readOrCreatePrivateKey(path string) (*key.MachinePrivate, error) { err, ) } + err = os.WriteFile(path, machineKeyStr, privateKeyFileMode) if err != nil { return nil, fmt.Errorf( diff --git a/swagger.go b/swagger.go index 9f2b1f4e..fa764568 100644 --- a/swagger.go +++ b/swagger.go @@ -57,6 +57,7 @@ func SwaggerUI( writer.Header().Set("Content-Type", "text/plain; charset=utf-8") writer.WriteHeader(http.StatusInternalServerError) + _, err := writer.Write([]byte("Could not render Swagger")) if err != nil { log.Error(). @@ -70,6 +71,7 @@ func SwaggerUI( writer.Header().Set("Content-Type", "text/html; charset=utf-8") writer.WriteHeader(http.StatusOK) + _, err := writer.Write(payload.Bytes()) if err != nil { log.Error(). @@ -85,6 +87,7 @@ func SwaggerAPIv1( ) { writer.Header().Set("Content-Type", "application/json; charset=utf-8") writer.WriteHeader(http.StatusOK) + if _, err := writer.Write(apiV1JSON); err != nil { log.Error(). Caller(). From 1f35939bcbff131cca0d5542ceb6a0e108b95684 Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Fri, 31 Oct 2025 04:10:17 -0400 Subject: [PATCH 10/13] Undo make fmt, will break a lot of code --- hscontrol/app.go | 65 ++++++------------------------------------------ 1 file changed, 8 insertions(+), 57 deletions(-) diff --git a/hscontrol/app.go b/hscontrol/app.go index 5f245ad1..4ce98719 100644 --- a/hscontrol/app.go +++ b/hscontrol/app.go @@ -114,7 +114,6 @@ var ( func NewHeadscale(cfg *types.Config) (*Headscale, error) { var err error - if profilingEnabled { runtime.SetBlockProfileRate(1) } @@ -142,7 +141,6 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { if !ok { log.Error().Uint64("node.id", ni.Uint64()).Msg("Ephemeral node deletion failed") log.Debug().Caller().Uint64("node.id", ni.Uint64()).Msg("Ephemeral node deletion failed because node not found in NodeStore") - return } @@ -158,12 +156,10 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { app.ephemeralGC = ephemeralGC var authProvider AuthProvider - authProvider = NewAuthProviderWeb(cfg.ServerURL) if cfg.OIDC.Issuer != "" { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() - oidcProvider, err := NewAuthProviderOIDC( ctx, &app, @@ -180,18 +176,17 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { authProvider = oidcProvider } } - app.authProvider = authProvider if app.cfg.TailcfgDNSConfig != nil && app.cfg.TailcfgDNSConfig.Proxied { // if MagicDNS // TODO(kradalby): revisit why this takes a list. + var magicDNSDomains []dnsname.FQDN if cfg.PrefixV4 != nil { magicDNSDomains = append( magicDNSDomains, util.GenerateIPv4DNSRootDomain(*cfg.PrefixV4)...) } - if cfg.PrefixV6 != nil { magicDNSDomains = append( magicDNSDomains, @@ -202,7 +197,6 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { if app.cfg.TailcfgDNSConfig.Routes == nil { app.cfg.TailcfgDNSConfig.Routes = make(map[string][]*dnstype.Resolver) } - for _, d := range magicDNSDomains { app.cfg.TailcfgDNSConfig.Routes[d.WithoutTrailingDot()] = nil } @@ -237,7 +231,6 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { if err != nil { return nil, err } - app.DERPServer = embeddedDERPServer } @@ -260,7 +253,6 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { if h.cfg.DERP.AutoUpdate && h.cfg.DERP.UpdateFrequency != 0 { derpTicker := time.NewTicker(h.cfg.DERP.UpdateFrequency) defer derpTicker.Stop() - derpTickerChan = derpTicker.C } @@ -278,10 +270,8 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { return case <-expireTicker.C: - var ( - expiredNodeChanges []change.ChangeSet - changed bool - ) + var expiredNodeChanges []change.ChangeSet + var changed bool lastExpiryCheck, expiredNodeChanges, changed = h.state.ExpireExpiredNodes(lastExpiryCheck) @@ -296,13 +286,11 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { case <-derpTickerChan: log.Info().Msg("Fetching DERPMap updates") - derpMap, err := backoff.Retry(ctx, func() (*tailcfg.DERPMap, error) { derpMap, err := derp.GetDERPMap(h.cfg.DERP) if err != nil { return nil, err } - if h.cfg.DERP.ServerEnabled && h.cfg.DERP.AutomaticallyAddEmbeddedDerpRegion { region, _ := h.DERPServer.GenerateRegion() derpMap.Regions[region.RegionID] = ®ion @@ -314,7 +302,6 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { log.Error().Err(err).Msg("failed to build new DERPMap, retrying later") continue } - h.state.SetDERPMap(derpMap) h.Change(change.DERPSet) @@ -323,7 +310,6 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { if !ok { continue } - h.cfg.TailcfgDNSConfig.ExtraRecords = records h.Change(change.ExtraRecordsSet) @@ -403,7 +389,6 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler writeUnauthorized := func(statusCode int) { writer.WriteHeader(statusCode) - if _, err := writer.Write([]byte("Unauthorized")); err != nil { log.Error().Err(err).Msg("writing HTTP response failed") } @@ -415,7 +400,6 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler Str("client_address", req.RemoteAddr). Msg(`missing "Bearer " prefix in "Authorization" header`) writeUnauthorized(http.StatusUnauthorized) - return } @@ -427,7 +411,6 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler Str("client_address", req.RemoteAddr). Msg("failed to validate token") writeUnauthorized(http.StatusUnauthorized) - return } @@ -436,7 +419,6 @@ func (h *Headscale) httpAuthenticationMiddleware(next http.Handler) http.Handler Str("client_address", req.RemoteAddr). Msg("invalid token") writeUnauthorized(http.StatusUnauthorized) - return } @@ -472,7 +454,6 @@ func (h *Headscale) createRouter(grpcMux *grpcRuntime.ServeMux) *mux.Router { if provider, ok := h.authProvider.(*AuthProviderOIDC); ok { router.HandleFunc("/oidc/callback", provider.OIDCCallbackHandler).Methods(http.MethodGet) } - router.HandleFunc("/apple", h.AppleConfigMessage).Methods(http.MethodGet) router.HandleFunc("/apple/{platform}", h.ApplePlatformConfig). Methods(http.MethodGet) @@ -504,7 +485,6 @@ func (h *Headscale) createRouter(grpcMux *grpcRuntime.ServeMux) *mux.Router { // Serve launches the HTTP and gRPC server service Headscale and the API. func (h *Headscale) Serve() error { var err error - capver.CanOldCodeBeCleanedUp() if profilingEnabled { @@ -531,7 +511,6 @@ func (h *Headscale) Serve() error { Msg("Clients with a lower minimum version will be rejected") h.mapBatcher = mapper.NewBatcherAndMapper(h.cfg, h.state) - h.mapBatcher.Start() defer h.mapBatcher.Close() @@ -565,7 +544,6 @@ func (h *Headscale) Serve() error { // around between restarts, they will reconnect and the GC will // be cancelled. go h.ephemeralGC.Start() - ephmNodes := h.state.ListEphemeralNodes() for _, node := range ephmNodes.All() { h.ephemeralGC.Schedule(node.ID(), h.cfg.EphemeralNodeInactivityTimeout) @@ -576,9 +554,7 @@ func (h *Headscale) Serve() error { if err != nil { return fmt.Errorf("setting up extrarecord manager: %w", err) } - h.cfg.TailcfgDNSConfig.ExtraRecords = h.extraRecordMan.Records() - go h.extraRecordMan.Run() defer h.extraRecordMan.Close() } @@ -587,7 +563,6 @@ func (h *Headscale) Serve() error { // records updates scheduleCtx, scheduleCancel := context.WithCancel(context.Background()) defer scheduleCancel() - go h.scheduledTasks(scheduleCtx) if zl.GlobalLevel() == zl.TraceLevel { @@ -600,7 +575,6 @@ func (h *Headscale) Serve() error { errorGroup := new(errgroup.Group) ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -615,7 +589,6 @@ func (h *Headscale) Serve() error { } socketDir := filepath.Dir(h.cfg.UnixSocket) - err = util.EnsureDir(socketDir) if err != nil { return fmt.Errorf("setting up unix socket: %w", err) @@ -685,11 +658,8 @@ func (h *Headscale) Serve() error { // https://github.com/soheilhy/cmux/issues/68 // https://github.com/soheilhy/cmux/issues/91 - var ( - grpcServer *grpc.Server - grpcListener net.Listener - ) - + var grpcServer *grpc.Server + var grpcListener net.Listener if tlsConfig != nil || h.cfg.GRPCAllowInsecure { log.Info().Msgf("Enabling remote gRPC at %s", h.cfg.GRPCAddr) @@ -744,14 +714,12 @@ func (h *Headscale) Serve() error { } var httpListener net.Listener - if tlsConfig != nil { httpServer.TLSConfig = tlsConfig httpListener, err = tls.Listen("tcp", h.cfg.Addr, tlsConfig) } else { httpListener, err = net.Listen("tcp", h.cfg.Addr) } - if err != nil { return fmt.Errorf("failed to bind to TCP address: %w", err) } @@ -767,27 +735,22 @@ func (h *Headscale) Serve() error { } debugHTTPServer := h.debugHTTPServer() - errorGroup.Go(func() error { return debugHTTPServer.Serve(debugHTTPListener) }) log.Info(). Msgf("listening and serving debug and metrics on: %s", h.cfg.MetricsAddr) var tailsqlContext context.Context - if tailsqlEnabled { if h.cfg.Database.Type != types.DatabaseSqlite { log.Fatal(). Str("type", h.cfg.Database.Type). Msgf("tailsql only support %q", types.DatabaseSqlite) } - if tailsqlTSKey == "" { log.Fatal().Msg("tailsql requires TS_AUTHKEY to be set") } - tailsqlContext = context.Background() - go runTailSQLService(ctx, util.TSLogfWrapper(), tailsqlStateDir, h.cfg.Database.Sqlite.Path) } @@ -799,7 +762,6 @@ func (h *Headscale) Serve() error { syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGHUP) - sigFunc := func(c chan os.Signal) { // Wait for a SIGINT or SIGKILL: for { @@ -824,7 +786,6 @@ func (h *Headscale) Serve() error { default: info := func(msg string) { log.Info().Msg(msg) } - log.Info(). Str("signal", sig.String()). Msg("Received signal to stop, shutting down gracefully") @@ -837,18 +798,12 @@ func (h *Headscale) Serve() error { context.Background(), types.HTTPShutdownTimeout, ) - info("shutting down debug http server") - - err := debugHTTPServer.Shutdown(ctx) - if err != nil { + if err := debugHTTPServer.Shutdown(ctx); err != nil { log.Error().Err(err).Msg("failed to shutdown prometheus http") } - info("shutting down main http server") - - err := httpServer.Shutdown(ctx) - if err != nil { + if err := httpServer.Shutdown(ctx); err != nil { log.Error().Err(err).Msg("failed to shutdown http") } @@ -884,7 +839,6 @@ func (h *Headscale) Serve() error { // Close state connections info("closing state and database") - err = h.state.Close() if err != nil { log.Error().Err(err).Msg("failed to close state") @@ -900,7 +854,6 @@ func (h *Headscale) Serve() error { } } } - errorGroup.Go(func() error { sigFunc(sigc) @@ -912,7 +865,6 @@ func (h *Headscale) Serve() error { func (h *Headscale) getTLSSettings() (*tls.Config, error) { var err error - if h.cfg.TLS.LetsEncrypt.Hostname != "" { if !strings.HasPrefix(h.cfg.ServerURL, "https://") { log.Warn(). @@ -940,6 +892,7 @@ func (h *Headscale) getTLSSettings() (*tls.Config, error) { // Configuration via autocert with HTTP-01. This requires listening on // port 80 for the certificate validation in addition to the headscale // service, which can be configured to run on any other port. + server := &http.Server{ Addr: h.cfg.TLS.LetsEncrypt.Listen, Handler: certManager.HTTPHandler(http.HandlerFunc(h.redirect)), @@ -996,7 +949,6 @@ func notFoundHandler( func readOrCreatePrivateKey(path string) (*key.MachinePrivate, error) { dir := filepath.Dir(path) - err := util.EnsureDir(dir) if err != nil { return nil, fmt.Errorf("ensuring private key directory: %w", err) @@ -1015,7 +967,6 @@ func readOrCreatePrivateKey(path string) (*key.MachinePrivate, error) { err, ) } - err = os.WriteFile(path, machineKeyStr, privateKeyFileMode) if err != nil { return nil, fmt.Errorf( From b319f19b6d3c18353349b11b12fb4ad64e1733fc Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Sun, 2 Nov 2025 00:09:03 -0400 Subject: [PATCH 11/13] Update general template to include favicon link --- hscontrol/templates/general.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hscontrol/templates/general.go b/hscontrol/templates/general.go index 3728b736..6e2af390 100644 --- a/hscontrol/templates/general.go +++ b/hscontrol/templates/general.go @@ -49,6 +49,10 @@ func HtmlStructure(head, body *elem.Element) *elem.Element { attrs.Name: "viewport", attrs.Content: "width=device-width, initial-scale=1.0", }), + elem.Link(attrs.Props{ + attrs.Rel: "icon", + attrs.Href: "/favicon.ico", + }), head, ), body, From 822021360de1eed801b7fafbc4cfd5b57d30628e Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Mon, 3 Nov 2025 15:53:02 -0500 Subject: [PATCH 12/13] Update CHANGELOG --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02986867..04e0220d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -105,7 +105,8 @@ the code base over time and make it more correct and efficient. starting/ending with hyphen are rejected ### Changes - +- Add favicon to webpages + [#2858](https://github.com/juanfont/headscale/pull/2858) - **Database schema migration improvements for SQLite** [#2617](https://github.com/juanfont/headscale/pull/2617) - **IMPORTANT: Backup your SQLite database before upgrading** From 7fb1a25441357680261c5c0af0f1b1bb3cb4243a Mon Sep 17 00:00:00 2001 From: TeejMcSteez Date: Wed, 5 Nov 2025 13:34:01 -0500 Subject: [PATCH 13/13] Changed favicon to only dots --- hscontrol/assets/favicon.png | Bin 50413 -> 22340 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hscontrol/assets/favicon.png b/hscontrol/assets/favicon.png index 8463e5ec2bde6a8115e00567a4a040c6434d12ab..4989810faa546554d0e8a494ce8b980816c46b54 100644 GIT binary patch literal 22340 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 H^o;*2r@Ea? literal 50413 zcmeEuWn7bQ{O%Mi1d)&qMMRL6MnV+C(TpAqk|U(0K?Df}snMVyAhD67OOWmw(g@Ne z-R#`^{m*%O-k;CsJTKUk?RoC_#`V3v*G-t3iaZGs9T5ZqA%VV@g+U_VD?a`y4#?In?7`Ly=szVdmX1Gu1a% zG*t>B?>ArJoOq z9yny)oIBjy+RjyYa@TravZ``WwDC+jVhDa4i~<7r+?Vf0@ZYnyydDSU>Aj-! z+&qry^rYeTsogn!raX+h;aJ7yGpSnvqkN6&>XhRZ^>uZrJKs3t6_DT#f0?h)Ja0&x zN@0Zx$FszKjAeardUf4&QTfNDqaBLbMb=Uf0&$SR`!{W;pZiPXM*{F2k5^Y9MQ zAOXn_fkOvyy{RAspYwS6e~kmBO)R?q`x_t@{7(pY6R7p|3Pec$|9la@z5%0fWj!cI zYn?2JEo|V~YDe0!CKxQI0N+c&zylM%vN#wLlmE>Mj@Z(@0?`hF5PxmZLt0E$OmSS# z?L0(=*6v0t`pbIa7b;kK4x8Col6~IcC26!z^|3m%_C8I%H0UEa1vW zrD$X?PAADQ9`@ZBOs)-omszZ>6C-5ZHeP5_-;xIc`DcO;t0vQA##bPo&wmo)1Lyzy zq4vGT`gK8e6eg6MOdXEM?y-uu=2i$>p~q2@4Q4v{T`nC#ng|9a>MBEFl@0OVjcXQk z)L$Mo2pWh&AXus^??(4~2{~D8w%^D}FCq+)^vp#YzkW#j8iiruzMIjIw^lZSL-2x> zt;4x^;~{wNEJE)SL4M#q`P5l{ryBkVcasV2$WVdyOQ?RhaXy{=QQj3rAPQiAw-gVBQW!+|cY zIMy(%cy*`GXblwgwp-va)JzIm3MaLBTfZ<(v^V#%R;_+mV!?GtlP?Rz|Cz{> za)sK*=9N z3n>=G@-bh-(`^s526gPOty-&da<(PY5DPL=IQHO_sT3MDQQFj0R7=at_@7HlNF*|U z)Rt0i)K-YNg+2WJ{Q-DwC5RDeX=#j%j7zx9&CSwGN}njFkz?&G_sUFI-gg~)KR-WD z&v64@mp{#Xh1vxy^EK#YPflI~MaAwA68a&84i}Y0tHpft706rZn@vZ`2#uNUBlobB$A>y@=I6kk33&@>s>*XR0x*!^6WA6cjpWgQWCy;V_ZN zg%{uMvp6xVPbO~XYZq`ThUTEHUnDGh2EQ+F^c_ITT^rW#tjksiIL%9bEE4a zdCM+;fSE8}IZoGprJT(gzOX7M$)Ca%w+|b4+$>&r&2mfby@K5PaMn|m{x6XUMkiYJ zy9IF8@GSPo@AkcC-H2L zA4`Ks(!b~BTVuD9NQ&C1HEtn{$9w(dr9(+k_ZH5~J~4W)qu z=-&<4o^KQH6%i-t+<-mhPf_agEFqsn>gr$!yCX!H3vv701(Imt{@4}P(0uY>7PGJ_ zE$(59q$)}(J50&&%m_*xu5@}a{KF1%z(tb8cEQ8LlP>LlIaTcfp6p~e_9h*K!KS5s z{h?6rsO7k#+`@R~b|3KnZS))&t zQv;?qUS`E>Q1$lW)NRa-yE}YAS9a*OM|XW#t>hm`DHVn-0oh_{Hq%4JXZNg zDD8rW4p##&(woqtZZ)9*Z=IbTlCb0!)xB{ z%qIz0^^n}w*f4Aavrzsb8mZhP{PKDvv-IUoJ2TjA&;E2t@IAiay5So|OH~la$g`{e zh}hmHGg)zj%ICzC*!1&Gm}=g;rJyL%&fQI?<=vA=AM<2sBa4rauGj2Ir>(?NYR z@3NwEimJb z|9oV=bLWoKf`Fa*!uD@V7L#32p4E6_YzyvCIwUYj3Jhi&6iP%s;U`M z_6iMbM_7r|85a8(T1H7p$%~~FM<%e9b3cQ;4>$NZ-JmX?B%v=Ce*gacIK#*JPxH0e zBe`F3J}z#5v|l-CbT&FKc4aFjRM=0tuMB*%pR7o_Jw~hpFj9Q-Ge}BbI4sl6$LXoK z^cFQ7gZ;S+L+QKE_K2gQT-lE%OVjce*Wxt}w`9P!vmank36Q@5dhuhWg}^3BrH<$R zcE+ODa|SE1sI%*<&4VmY1qAl`o^3OL@zu^=Y@rQnzYkI~2r=7$MK);T`z$;&O6qiFAxhfauyTvXU_yl==<(yn z{yP!I5<9;r`X%;0L3f83gnR(d6oMeQ6;|(m>i^vRyL{P81`{*v)HfTBHD!P@oWTkk zaM=fHjb+|yc8Um8;yvOK6}WV2a%qXwT7+<69WuScMt zLEN=tV{4c%du~6yRma%Z?QcgkEH4i2KJ-n&~x%#+~d}E74co+Wv;K zhl8C80+ApJy^ht{`NyQ)M05m>O^6p<7Y<1t#%wEX(=^8KyaZ4hc_HiSnY zI?CETBzIc=eHNKH26con_;6oepI4(T1mcs$Ry*chwm_a%&5~ifOMXkC+pBe%{v#F2 zO$~nd;+C{TtU)RznYyQ8?`>-Xwu`==p7UAUnZIhfgiS~v*746#vK1STTX|o-det*Db#O*8tscW_N${tnq{RQc-Cyv5@mfU{38d-5 zI+Lh)bznt7==?lWXHbSAN$_{aQ4Qu!b3Uw#F6q`Xa!S53!dzr6ZZ7^=PR_kgY+M#o zr7jy?0s|kcvMPq|x}EN?R?hlO+9^IHQ9rKFVukjQ9)pp9v|6`6q!|3-8`LH$2n34DSPP_5DKiBpij!g#>K<4}edox7174rU` zzBs7YFygqQ(A^8WJqkxK#wARj*dEW=NH+SIyRC$*^q^8-RovGKxPrQ*=gakXh;aB$H0e4ZL$kySS6K{H_^@Id2>HJuEf z-LSl9VIR4Xk$+k2;!g9wq;Y%Fyj)x(|BXmWNcoyB)W-(a_vs9IPqX_o8Lr_Pw~Xib z5z)`H+_ZM4(i`68=^*Xv1FASQxd zkcR3F4cEhP0dalh7xN0JpK7G&n1YNNS$47@n3EY}JIiHoo@n@{VT$aUUBX;BL49%Y+qIFr!9n%CB-g}D zY>fd=E~zj*(xBc8RPaB4{*-6({GOXDzxJKR&2csA?aq8FZ{zvy>A`yN3mMs-7~xg6 z>?HyCx@aUdH8n^e(?dh0AofanA12aFL2_Ai{@aGLG5-sly;8f0a}y)@sO9_{2a80I_IW3~OV_bywWGg0T=u|0B^QpIvSGo>LTbWkC_tUCrihuHPw4a-; zt?ipPZ$OEBcC@{{vht%-wS;Y`c{`p{r{Q=$;^f40Pqj=WZ%RUkvp?uo(^AHw^U40| zF!;PTKoa2U-6YVi)uXV4YzE(^_S;LD?Fhd=SU$w@bGbi*^!=Q?^l5aGUUG{FL-t5J zv;R3jA33p=i0MrD(=qn&%q;n+>oRYT|NTjwt%E@3E`_X%##{}{??k1!EVX18I%#Hb8AuJY63{8x|Dp zeR;Vwlq%}fEPHKen>&V;U*OOsK5&@+RU__VTQya5@ZFg}QF^u8yRE5ek(qZd*Zw+i zKp;ohfGfYxgCkXp+^O<^4rQvW^iBl>fbm`uLz%|hzqzqeF5tECy9A&x8&noMythlx z(!iA_1ONnl;>`A|akYH6IX^$YUewr7Tx_y+RpPDHv`>-V(^HU-Xz1y?p=^2bmc%E( z24=k0xy$AR9IP@&Ha0dIFD4tI4qK8O*^x|=UTY&9E{H;GZ|B3kS39FR#*AXlvcHu{ zAZj=|K1jrCABU+VIFUm4dD`W5`1_$!7aMWfdOvgjIRkOGwUO2cYQ^j!xLYy?n+;o? zz#zbO46bEx6Ii~prwPH&e?e3@J736if<2t8Tip3?$Hs=8%2TK>|LPGar5aCq9fvNE zi0L1xPu=Fi!ovJ?>FM?39^VwHGhHZd{ZGQ{urgcur8h1>F*8Q3B3M?<5uwsa#%rlBC!O3pdg=N ze3yh0(2_0yO5DHs{=RO@w4Rb=duib;?(%5SIf?ijm8c;CFxt8?ZX#8@Z>By;{2zcG z7H!5OYoC%Psel9dpKVt5*3E8Asu}kLdvDhtsbom?))GR#qJ`8TSa=+(hRf-QwNN3^ zMbeq808Tc;H+vbmH(bV_SETvG7dYs8xgknV?BsWe`B;&0e?O_;v*F@}_9$RcDEYi6 zP;!Cd^OeCY#97bh-a6TYgarSC0^{u3x1%-cZcVazbVv&2Q$}WHe~>5GCuXI~%+7%U z_^l2-+H*qb6GEDTtiM1Cdo3&CZTC+eO;%uDJIL=XX~eOnFUVyW$FXaB(%tqwKX#g| z7~_B^E^|>50jH@R@p`^Aoj6IMsHm8$lBQ58YUBcqiR)er3%kWeFe~kn>323cdtIiu zD{r;8t?>56<=M7z)!PRP>=r}YLqjo1;auNm&n#8q>?iSCYH4MqC&>g+%cWz5q^ywp z`3<_%*-|dLNah+0i~rCz*pz+zs;3b#&47x-mzn^<0V6s+h*IWX111Ej=9mTaznz74 z#`b78hi|a8!?a9Dk`q-t|h|cNhr&18@=N% zC%d&nT82u~#0TpNdBEL*@Bul^HWXr)bD2)>!3k;~Xd~%sMNHjBkM?|YUNSF{{i#;2 zY6cG_5$%2nuu{+6?|+MK+MOnsm6cKR8Yvw~8a0{+n^x7;`G95a+^G+c;4{SCrsnZE zUCmwBK|0!5>dG^;J2sr;geDr)%=8qT29Zi7rluMc#Q#lJj$t*W0r2j7SruZM1p;YE zJ0)#`N09s4%NQpXB9YL>f^V2RK?<&3n!Itg>4BW_UB}1ot{0Rgv-~?)AG5Nw#2!2+ zwR3eXS7U$UUKJf3-4m%5HFWU<@6?^W?otOGvLFlRfpX)y!`4VW`ePXv;?0}C0F@bR zPeMQU+I@08Ki=6}?iZk?fv9<`NkCHa8b{gB=VQ$EU0>+%4u)-?{#mAer1JgMq8i0x z5XzIs$>L$bFa7`zjVXH{lK0vez>W z#hLw%|9~!y-dZLj_$e#U1{d9q?p7@O6QIC~X!FzMK6|EhRT9|HOD(2Xe|o;-SG z|A*C?3?=N+kN{wpIh)5)(hiq;oaW}{dWRaZthDs>u@ax(3;T8fR00z8HJL9m)EWr; za4`)HjdkC`8u$H`K`?JV;yho}t;vd6zq3t+?9!P=-^R1)?H*?f!V0aYm3|-`Km2_K zJoJDe02BJ!+4pC1Dk+j0QE#U~Fj!MlM`@UAc~|Naf5cuaGX9dV8 zfY#9M1=FR4e8jWf+mbIPk|Q!#fbp>>bdPhH17dV-blsS1_+>b+vR5?Gd!nF>u|(uo z183^@Z+zO$1qJZD9FtZ{jJzw-&y0Pz3~g5Cc#9(GMw<Tyy|#n5$bm#|#U?;yBq}|6e@zH*b$rmot!F zV$)=3Z;xb*#ni6409*=u*%s3ktp7O2OIk?CZK)>-UU>}?;Hd3?<@f7X=o4<#o7sbG zHxRpZLV1n*k2}(rPZ}~72aLN*LF46$=;NM#BQB~ku8@?IwpKHBXYE@>4_ug}&Nc)N zqYND_P5)3lR^j61EgH?c{2QxUWxL*6$oQ{a`cmE5g@6naP@7i?Da61Ocy(fSR*N+= z&uh2JRo*K|cq!{-*;!sq>5E;jNnakXNNar{2l_!4Vv!o`l&n^aRamTcX9W~#kred8 z0r?B0C{VTPp|q=P&&BOc?_;+vj6W$AM9-f3GgYXgm5Xy z#zZ61XJf3}$}ApydN_MHKe*09%Y7q_HOzhzu!(wi0xRrmK@3)7|BG73PEV)p4D_;x zdwF}8NtmT4jkSOb(R;(w+f(p6A2EPgrtVn1#alQ)3rY5Ok8-1~TTUKYW%#m*)qcDQ zY2sdcf+s0ltLcoBB7>Y!`oj`&A4ZRNH7&bkQu>Am2GnRmk`_s{KYz>rKU#q9(h7&^ zJAyNm>wHjK9jo8sU8oLc3ab= zlw(UAt&vmyNjTRpbyf&Rp)IxkfOkDdzFP}#+NNaAz}A0Q1T8=@ZJjH+VXWfS;+&=( z8?$ycWMS=AvaBhF2^ehpG6@NZ#el!iGl=6vd0tkQxgqI3WXS9tL;Lvt!h)#Z%D0an zc8fwo*|TF<#r)2zZZ%;XRLb}eGCEJ(N@xHBX zK9=MPWDdRd7?0WBc>OG3lc9M-(egG3#G#mKi+Z)L-C{r>yrq;|Px}?a%8}3ws-A>< z^dFZ#Vrx(+d%&EoOA<}kEsc+jRa$gYnG!Da3cNkpT?`JscJ-}tqP-iF9d`g2Lp8b< z%iUa`cyECyxETxsF---5Y~}l1EhZ;}vRSt7$y)K>r8ds`g|Ja(Taqo+CF<6knV6hB z+MLv3r^Gr6ab;_QW(?rLgdL_5TlQ1D09ccIV|e2O0tJ$?d6Xnubsd=+Cy4O}61?39 zzfCj?MuB-(S64e87_KTF0ruVQJVjEYUfN?TmA1Uu{vqV~ol%V<6`ibiwosg+ z46&FdD)lL3%2_xOG|NW%o*gDxBw-&$ab(*~MrL+=Z}53~bXB6?d!wYi$5S^-!?Z$* zj)`e&bMw&!okE^-wGRjz_iu*6Xa#wgU`}p`cJI72%mF8mZw7dmH6~GEu zd$8zzYXECu)t*$q2 zmW2fXV_vF=kxfK%T}C2F;1x*6H?I|DYkSLcwpbUlXXCQGQ-Lt|l1EAB?hnazJf3G` zz?^)ys+X0F-BG1Uo=bo&0rV@lByx>g1h=2fp7epX7-&#%b;Ap;>mwIy&^(%s5xK6<+s2c!It!{*_vONL*w>2fUWiX-;!zyz(k>m%>H4^+-ZZ_o* z(0$lBI4Opi9Xj?}gB^WiD^;dG;4F}LhlE5DFq%jU(78W-ZZ?#)eFkXw3D9&-E*B8s zt^4;vUtj;5+80a}Y%@5*>==P^}+{^96|LC z2$aYLH`{v+(Va~IL>9We1Z}S%Fb)=$n4Sb53jvCvie}NF`1{o*RIaa}op0sR*dV;arso^(oHuhT027KgM125^s?ml5fdAX~*`{knX zrG=H1RSYXJt)UGt1qzr893hah?`O2Oq}_UaTvh$@S6T#|KkI9ITbu3lUEmg9nQA=X z5wD+?-AA|oTb>wV@%tv%&oh0l^GfMD=!WcZ7S#>S%owp#GPGCYHmr8jE%YoSB42#_ z2YAlysp_(=)Al6^_Uv@er6hS~Uri2+!&gsp=cQCbJ;`T}7~5&-=)g!5!dqEZkK6&G zgT{R$Mwv#JZNJuFDr<6OOPW4q#^lzEt z$jKxt4c6VC%gWm6_wz=)Zqw&aY5np{T-?a-WD%fmP;s+_XNpFGj!=C4gNBwG7gf-GKE>dqqU2ONzr*+p!T2Qh z@S2*MI}D=5P77`OdzfPz=dM(KiU7nkG6#7nZd~h*DkxZ=aXIKsKqe#r!WzWB`0I16 zt*wrAZy}I3g-lnALwT-snu#fta*5CPxn`5M2U4`nqZiW4J>t+o7~n{ola(3IJhtXr zBLLfuUQdp9j7jOad}Y~J97-rNFfmaB`VOEA=W6$+US102CNJL(7^P|OKLS>LpQ55} z$e1kcv^m*b^0F+kCI-&R+|@;nPEJ0PkN{g{S)CNSnu31Q*VzL|B_v-S6GbUbDOKHo}l(_;j05~bbNdaYW}-~@d~XQM(dvG+h>3|uCMnU&QS(k!#IVv#Lr5fW+&pCcosb~_%{jY1&K z*-}^EJ}rA=L#7@Vu-D`~_0AG1u0PC}U+NHG(b@ZTXdHi4gQ1H?0tR9svllB>VV^=& zY%2ci!06bpbDyKPf3ao@*u~u3*U%59iL7C?3=WeO3!;@uNjd+#NtepOx~Dv9?^MTR zVri^>_@J5^b9H_Vz%@0bqw)&C*rK*9W7W%-@~0$}MlqoeyN^ zzs9bcOb>E*YR|e>-Vn@p&0gQPYFyMzEW)A#4}R8ZDz&GXmV26PO&m7>2jrbCzw4T( z8J-zhfMiBmaPtay+=6`JbyK^7UCh6e#Y(0gPHf-}n(nS&T`4&qdk{=Ibk_9V^>vKC z>`*=~D@xCU@N#o&J&6Z4WNd!*U%l}t7@pe^S9@7;kP zoG9DB&l;#biF}y%iu?n{fvC7mY3HrGJJQzEFVU@dh{3J>s-xE*b{t6g;?S6+q$Icq zAtazEFGwXF{lV|s>s&Sw*Hl)t_5`5`4>4UIfEnD~A>S&%%IoUheE)n4rYM+^nwHjE zV^NjM3Iz&{4@7+U$KQu2irpQfxb#~3K*gOIF2|vRn5Hx_OpGpf9p3|$jxFZNQR;Q2 zYodd?&h{XFHR6N9`uD^OQGcNlpIi8P0j6E#&+v^LY}THntJVru7KoMoty zhX_-1hO_V(%p{^ZTKFhKZeM{oXWhA49BGD1vQ2)d0F*DLT>CZyZ(~?*wG6mU0jP8y z2J50E-#&gs7M2;h(_d|dj?BRBkR9jt(Ay_zvg&r~wviIy7q$5oHW|O!=jI02mxK(*%55pYTQeBNz1`}sZ zG<&vEWK9}W+mvRa0u{$%y-0KqOlW3A27(k-aeXn+MfNCDPJZWeRA9)LzAM6m2@LVf zmiJb?dEeiYBdZlz{+tJyJp)3SFC`$KDh%d!K6r7JE@qr0@hFv{=7^;qtnR3DXtD(4 zz9TRJ&ao0r#`3Z-YqIRPZr5jmlzV0sT-~33|HY(n;vvxX4y4^l_nP>}7*;2STr3K3 z-l}U4bSID&gA~2AkIcqeB5oWb?Iwj09Aw$MEd~*1x0;$kKpKQo01d9E#tqt6)fL%X z-&A9n6~fq^HsF;6y54LMipO{1+H?WY6qf&77}}2-T!65z4Gb&7J_7ba zh)pMsyq%m3eVgu+g&unS36iNJ$@S*`G&*9v<}}AHCB!>y;kRbMN$^$3Us*#!6GgD@ zyzn?!MIOY(WgPp67^gA8ST~H;BI<>nD;<9+z}6UNqdkw<&mJXT$n{cCU5gyYeBj(H_85o@{8fL zzcDM$N>tFb=ni-Fw)Y?CtGG z$X(<(fDlkeCt=FwN#2Q)w|DKbCsK>leP>n_l9FkY%!h9HBm_&;BbAK0lgA10qB`S)c4;pa@HsV@h=EeiE;sub=WSgaFbJD}JlVaPuksNX@;wKw&F~ zs4Xy*Ew|RnBDOoN&Cvh>9Wb{*;s(A_ZGhH%Vp-2XVGiU_;C8(a>3OdgorlG+0zpd# zka{I_XTty-_~kSOG(cQbw}W5k=#1foY$RfOu}e$_V*mu)dVe2EKBQ^SkzJ0JxjR++ z#oDL`7zkb?*LRH?y<|6e=$r8fl%}2<%vW^XDhRV5g*;ylw9u0=I1mqqWt}?4up%uu zK*$_gSy=&T@$cX7CqrH2*5W#R(3pmXhQPqUZ{Hpa-xKIpi>N5djvw@Jc6PS2vjac9 zye90blhVW2$BI(qllkfZwgbIE@M)Lpp+776EI7MMh3zNe8qjJl;fUC*>({UU-SQ~v z3Ff4Vn5ym|ZFd6m2F0Og#udn4g*3uB?0Z{IFD*t*f>$zQG2~;sA5bDXOynhc+KiX!It~2m!>qXBpi?6 z^4S)Mm-=n;!ne317r=+N0r_uAgY32t=-u|)4Wqqd4>MzE$M<2D(>&haFXk#}nE!kt z!_}RfnD`F#M8HxbS;II^X1u)<<7d%$9?_Hr$m1^08gXaUF3Z{~UqV8yQ4y_Xj*dmW zhYLdSJm256N&7DZ$^Gg%DQc(JCuu931|*BldI$vawxDM9k?!=SjL>}?HU?W^@fcZJ zGa*|_kFy)v26Lx(tmEhBH^sVp6_;DiXXpv81Jy%HQc_+mabcXe%TkZNWBon3=sY{= ze|dbJC&PfZ1hTuoOSUf&lM~_=eJubR+D+yN8|gmjkg@yeQOMa^kBe!KB^GFCRa=8F4yz`V%tSFA?{oH2dtS~42 ztZLpKQ%~g$nY$r>zzBq-r5*LO4GE=P9?l`j<_dgXkmYF?0HvUq*Zz+$fsRjQ5CDyv z(m21c?XK8NPfvgG?X5I*^Z6@cV&b=xnH4>2#5oR*Z22QKauCQl6xbKpAe_tM$nkD_ z_q#ujzQ={?cG3O5KYk}+6yA8YRclIv{_~-S723?Fsc_Nme=dKQ@PyQl?E*-|{Pzdt zR}+_oJmIJVuzr9K1I%5?>0>+MoW=&=qlbs??M^EVW7w_f+U>pQB?V9zq2Q>cbCH_B zq`-C1>HhYSDW+}0{SIV+22XGN6B@V|mrzJ&FEP0h=WJI?r-f=z>9i$a9S)WR8lL%i zvuv2&WJwn^CNZyAK9V8Yhgw?sG%X`T+WGJ68sEVQDgSJk7?6d4q3roEl>*uEvL~tJ z{@vjKLT>pmrsBAMos|kf|PW*%QP7M+Bl4XIj2wwmDrpwn5dsrmj(FNUZD%ggPZRG6AaiYANK@h zQfF7!eb8oGboNX`ZVbUwpsk?gM_z*xIXJ>!-suVbW3S8=V_3sk1TIe|)BQCBg|GcR zu%_SQ4$owK<_@w41Tv*}L1^-b#ms)AP`f+QB05lD>6wF8tF}k&o2q-GprZ#^;W4)d zndM)-cK<>>VAM>FAtOy?(DWlqBwg`rX9CLxlbl0c1B1E$$94$aFj?pY#hP2^7eVdzX%J z3KFd-^v_`9#-%^=;0clpSNeChR#4dX#lyT|)019qA z31H=N8LbfWUGoXpOr3@c)JIqD6|<5Kl|H?vS(%tOTGuC;9Rng@ ze_yaf#-V|dlu3d{j%-0pAS-Uy*B>+=f`Wob-6wikX27`%6H3=MgR$vGe}6^A+mpDf z5a)vQtHnR)wM@>w`GsW`9?sjiE3BJ%cFs6-HLe?xkHAwn5=C3ba8fm8o6-p zI-zu$oSuH?eG_3Z@tyoQTN|6C)YP6i-4iP#VjxXrWMKGyGnKZCb@FG>4d!Fo9`BCJ zi!;V{Qz8$`9?BSk8+ST-6~V!^JEM~sKj;-r?SE9%G;EhqVrw+!@9Cp1Nw6Wp(Og}P zY|ex-YER-b+2PwQ**88fRKZa^yu6BiA(zRI@=8A~Ix+C_@L0N6r3&zdy!?1)aZPKm zDGmmR?K^isU2iY6Y=AK2qQc8X`uA>{)ACJfO9CRIk08 z<{;yC!k9U3Qcj13TIQ@tzgo>NR_ABRp+_pNQkxrMR zjdBefmF|w8WS%XCj!=f7UC-SJXoWTGU53nsd)ea^Xvd1mu{q>-s;ik}LM4Ds7~`P0 zprKHW291(>zG1F+_%TeatjI~#&;nBsRb=kfv`+Dy{;Ka zc0H||DREdCoADV*YpK574krdH>BXVFIs^N6v60vN8?L7IChH$Gr{e0pkKEnd#3Ey3 z6Xdgo;L-;p8kWMVPgF4{hd?$oHPt-VjABN)(S)cQb!qkUQBfu5m#rd!)%G43|YJUFTb%_&v@Icvyp^6sIl(_`Xa9^yNka_N5r zeG!OAOMEg9Aj7|Z#f5T4LUMDFk&(F>eiM5V=n3%>t^zf72_Q}eO5bxp7VZ{F5fo3+ zL?TEX@4PQ<&6pI*{Z*D`%P_@`v-As*?B@hc{p~-r?IpMT#8#V;mJ5~LTv=W}^1+djz&KL#TR>wwoU^~Q_4uBge&-|)U#bR#?NRuf>OJy=B?(?Q^S zIei_Zzsw1uzQ`+;&&l5PaxB&W0q|lqEvcXI#p8CTQiIyj{XYg{y??YtTFv;+h~Ady z#!YE9yDW}dWeDX4M_x`mU7Q6b3bH*Lv{bwCY^g8ULeJ*FPdS~6lOsFb_fT)lO`t*R z1`u=PE#ouHMjC+@=dNKCah+w{?(NoM>&chC8KiWm~{8{_D0GV-d=q-VU_L~vQv)eo(kOc#jWOMATcv9um)8i9+8rgQWIU%Zh^nF zT+agJI{=5@^{W68;^KC>tPr7#EOUHa-dCkI-ozFC)u8mqo-BI93YQbHb%&Vv4b{04 z4i7{tHqS>wm42;lZ5{ebmkp-C*I{`hv$GjLOV%Q*32%@xZLF-A2o+*1!pqZ_QSH26 zt6?8WnRC1vE3_lwHy~e)Mm!rqvBKd^i05JY?Bd>)x@o9P1mBsCgS%>_ z-8c-$tL96k#4whEPCBxqMRc|E3ao)2UKRjB4`=VTi+LKaOeHFDK47GQ31>> zNLav}yuJ^Yd*OBXDZyLCUQ5l4Qa-;w!IvullZJmflKxij_%lkcdFt>tb6VGkH%WqXj_7(AB}LG?^@7!1VL zera6Y_E~DC7EEEh!jPS^0cfC#)&se~krZapw3yg ztgNg>r^rlZvQGe9>&2XnP8wT|Rh6m+lyK(ATCgczlMGx;`QFaiEY7b)_l?}j=xZGk zA3)3x^^a6QfiX9RtkeL|U4VUG>tDOcSGOr+!`K#m_WR|$_)_|dUU1m17K3p!49b9Y zNt`^4l3=OcXiM_G0#e5Syl6e(t;<7`*#=(_L_KTCzHqK4d4hZQz!y^sZkXqXg3d`Z zkc*DJU0kl^_uv6tt;Kj95WmOFg@jRV4DG!2`!EE8GYFJeZn+NtiJqAJ$HYT$V5`#o z?}NHg#zxHaM1AL)%~%qzkK40hEiDDf!{6qmeP=tz4LAU!(Zg%c3arEvfRL45#DR+{ zVx5va4i>qfi^Mq2N_8%N4lv*+_@)ns`yID1msa-$@e8~LcC-r`qL%J0tp-)fDZ=&t znr|20yf6WMT&f75Y3~7yw?GwWo;4*SQl$+=4x@bE=>N_SB7ywQ?!8v2z<+;d#dyNCIy{DGGYQR)OxGP*tyiqC6oWokaK#?>#F@dc!FkdRJ zMk5aYb?kjLcHuPv#5LYB^F+}08hCAwDJU?(*n9UpJLp|9)4kU6Kr7OsOv%Iibwb)% zr>Y;Q=>_~clV;h-Ji)GkrhD)G!=6Z^v7RpnB=o}PEArAYZcK>;kfu|cD(Q20oPDk8 zW`6$fBcG@LMAU#EX^A*x{N||M7)Yco#<%U(YY@6trl>!4R@NZt)uiy4{1dA0%vHj7r(*|YidoT*lV2R)Ah#!byT7Fts*Sji(B-h#iBYylE}Q6SU&>22RBj zKmKy^qt0nFz0AF*$DWUdbq;-TH>8hcK;L(*JvrHtmy!s*emQqTdSzpy@XIZ_0SM%O z{w_d*oIy_>INT(>m#H(05Rt|#d+Jx%f$o#W7Usi&2nFL!xyrA0+i&hzz2ItkcQ zptINkL4w5U3($zLhHanuUyS*0o;BD{8dP}~0|F9`TUGV%YSw`Sc#Vbn?>h1jZAz4I zhCZBqKrkByYtXsrx*}1nc;cXf^lf-ZaSlirW3Ux~2moEUCjG?3eGvSIMn?~*{dcHA z>~pIOjp%HWKK@B+FlMOC@w@PZiv`49pS8T)5Bq0dhYV|tz!HM`>gm7fL<$QBiA~VP zTWa)TBdEk+F7|V!F%J2r-p-ud6S%*RrTOK&RVeYA#+3~IY}ZT_T6lX^QVU9R+m|!@ z{6&fFqf3D^O~khl{mYqLL30KvpW~)L0&vvjndgkEPLC_l5M@U$Y)oL*@uBCN+K<}w z)DxK)R$3YwJ^`9uSj}p}*79WUQ(^Ra1qM?O=mXHC6Bbe$+9psu8sk6U@81(ms^ok8 z%WWF;qz?z>nS~nrFb*T1iKiwf&tfyqWjW*+kKLEjhQH4O7a5%fge#;H@w@R&7c3Jq zF|g+6;i&bf!MMXdSOB4LZl*XoI^%JqP>``av8}K=B-GNwzq5M)u`7Q>rSS%2<@8E64!=tkE&{Dh1=`4@$!h5e6 z{0hL6Q{KyY-qX`l_H*>Dy;C~`;%vO%4?8;A>N6KVH1_AH;iw*uN^MbBVgp4SXU_LB za8r8{O9Vx4LL{F>?v-U+0JpaXXO^FvzqOqXIQSlCt!{s9d%S)$s{bVa(ao-yzdyFM z2oz3Qk;Px@9v_99E8eL%ulHxmO-k|x@%T4rGlCNKF&kS>PR`Jc?|Lc-`_pk~jH`!- z<5ZOs@FYC#CV;dUbz4((ys`gZt%pA$`S~+ANcP_e$;X^3a$ZdHq7F7TtJ~Ym3=C7H z77?o*F@9rTs@Yr3b{uhsj<^G3oErfCH{Tls*C)SL48MXX}lZ>!6Ar;)Q%Q6?BClQxInNB({_4|CG2iOjB|3 zLS5XU@uBRE7)d+zEsENn=|FLX#yr7lOnLbR*d}nU4^*sxlyh<_G2lt)Uc7%(q92fT zpaY4)U~+SFLDlP1wCW@BN`$AklI1BM{<_<~bAEmf+K=F1hUSxO7zZ?FUKt#H0EaPO z7yM#7U3&6S5E2{6*nZNFJCVj6RyNjyvy9oWXajUnI!Siif~Z0sh%=27HEsxpmvNm< zfX~A%Hl8QoPnLi#7dQ%1?>X`z4rckIL)HIOqYP#u#R~{&(yxOA#Xu{A(ME6jS&54C z&$qW0!&GDyHQemtoVmK)Q-4&hNJ+4=9B7@@8`9z8V6A3O;E?E%pU<6j6@-}uF;G7J zcbzdssXp8P?D52zW!h{RDE9|}V0~{f!C1RswA^e~v!|jYaseOs0Ock|st%kPNR>9M zq|XkD{CzhkFwWIeAE^841SpAuLDbyB3t;!3_HRS1Un{F!5mvfRRZ?N^`V5|*VZ5J){aVM$^4X9`JM$cg%};wbJDxic z4w|?1)7*OK&aCM!=EhD{Is5FRhfF{&1LESCv46eh6QRyH6M>&I6`P>s+W7aU1*UVm zFUi|hA&=VVovDe*9IA4LJerR<#Z~6(4<;#Z)9T4 zcJGcfLmJIaHutS3rsN_^g(lfP?e`|by~1Z&^jl${6Z`@t1X{kGot@z({m&d7>kqI% z|Jw6*<&~ic$MkwfX<>q~pC`b3u#dM<*&@6E8JwM-8u?!wfNnZqw3}MK4g1ysiWwi( zU7e0kYrv*V|!TG`;>tRPrQgVQm@Atpl1GSv+KT-GYQoBia zLl3}`g1@VAIR+?nR_NM(KK{&ka^6*+*qRbZ>2LkB!p~`g<4%?E61&GguEW<)FUuS= zi;Rh%EdD5JrJv!7#nENEsN~ zZ}X_m-d-R&Dc9l`;pOT+1s-m0gp`S9ZQgDWx5sa}#>xy}2|+Ups;QAA>Tdwlsn+iv{Y`DFQB@3N6v z?16P#l+aMmox&6*9V>(Rye*s|g0<)RLsLPyY8t~Nd#>I`H{WkBzS_U0cC$e~nza+;A3&;t zlloHc{x!XMn&;%l!5n-1t&EnI7EqrYoSYBSUC(W~WFOVMKiZx(*3fWSX!~4J!XLwG zUPAM&f+jUFSNX22jLgsIhw`9@a`T?b=yeF>uJY`a#MgzN)LJ-Y zlsxFfI56Wb0t3f~bi^1>1BGr&%JoM)2HM(Kz-fLA3E7&dUqA4&NnW}k$9dlTs2MeA z{a3Va(;b91kWk6!?90I4>-hbCi-2!C<6-8lA-nGgq90F51^$?~`B-M9nV9`~{lRBQ zr;w5r>YUnX_rO|Qp>1{7&Rkviq<^(x<@lOf`L9<$ffs_x9|ZJzf1IDO@&97)z5lWN z|Mzi8LMkLHPf3?OQb|I?-q~3h$;`+~Rzyf-T}D~il$5N9jFf~#i0m@TC`ES0_qck$ zKmWn!hwtt7{hmL(UT)8>abD;7IPZ`9{kR{;aZm4ajFRWNGxVg(^nGNHl6guS7`!Ey zoA%Tm(LR3pK}BMvi~hd@sl)Q@PzqcVSZHIF<%_fXR)dn%d7{RoIY3qPEqMHRU#!_) z<~=YNIZg598pF}gRvC|JCOZdLf}>N+GA_q|w6X2&u@sV{lb4JWRbgPaJ;tIEaf1Eg z9V7b!i6*^xjSfZ`I`-CBMitIgay~OI{}@uwZ42@$V3YTvU#-KBISxkhF*S!@4v ze0BMqcKgnx8r>DsX`|pbJSqg03;zyKXRvWzb##31D6W*P9eQacHFcPW)?fUH`T1H4 z&=!F;PZ(6GuG1*j!BR?&sy;>9=wO6sXK0IG7FV<>?Hk*~&o9D~vZ?!7cHK6N+W0;* z{&X~EJWj+kipT!eCsp}u?d>w(`_-j(Ju18#PtS=2#cN)5D4^b}2XI?2+h?_RqY8LGUq@@00`#@@S|Ni|+QRHL+>xZNFnoPY_6f9Avrm@pgz6fFH_28HS=>_o83APLtnG zq_i#mJ8;`T>cUQd$Bp71`ggv*>Nk7M7LX*=I; zzQpbHEg)fBC4u?{^SL;Np#nd<;yy?0l%&v4U@$T?ybu4Dg9n#=YBIInIf{3QrG@GH zi48qVYWt>Ld8h8TX{Fz2E?@Y;k{J(4HC57q7|Aeq$FM?=!3T}(kCE*sxvgw$z!t|5 zDw~NA1F_QFoa-6dlr|e8VIQ;e1}lRw+sw`#j%JLJ{z05!E)tGnY(vi1?d|QgwY5Dx z#q0LFXNkV6!3sFQNwzC?^4-LiEHP(DwqID!p9xp6$u*OTIb761+gZ3JgiAj45KH1^ z7UHEB5=w7QMNKG&TiO#vwJ0=V#WYy>IxRSzY&va@8Aqt3+$l>wxp^__u)j{Zf)nMr zG4bodkWS&4?JMPFxZ_nbJi)u}UpMmW`#vF!u5rmb9~7f}JIR;Fe-Tt{tgIk;%PG5HN=ThAsAx(` z8uq%5xO`&ZH46B&vXx^mdHi_Sgxj1!+mr{mT9WKh@~k~d)+8UIn{9MAcc_Zxo^7t* z`jNnWN1kKYi>j5LLh1KV9feE`;p}|Um)^quET_$8b&Jtvfx^yB0kRCg6kpdi8+S{Y z!$F)YQ?FiGxOjV?VvBrhS!^iub}Pg@{__1RQL#6*7L_;AGpMsV$`=gySM>OJ&{@5~;cuE`PtyfmZxSysCIYSIIzIEfZ z=EaeU^zacnG%m{NZpPL39`7*_-_*Z;vEn~^1qKQgt*y1&`Fff?n%n;xyiF{~Aj|Mc zIlg}@dfm=2qLCOEcX+hy&e!rg9LiJSv|Ii1;alyCuZg?yH5SkTjedA}DfqYu3W<90 zLu6`KoqVQ!Sce(Z1f5-oe|LUNM8tXLu z=h3AlCReqKj4XyR(V9BQf+duoLL?}p-_CkywPz>UYKAxdEr&#Fnzj*7p$-ydi)>C0 zACs`MAluQv3}(c?f4kD?ihxm5Q$wm`_eVET7nfT_joBsp|7kl35@T%Ow(C7 zL_+!jyWYA`LUUuIf`1RZ7;j3zZ7c(%1#LZ@h*e~1qIW;qiLua9ftK5~@y@TFKX&cNtGg37$f!!46>UeqSpOKF^M_u2S%xp!;VR*jjlF@vca7IV(`leOezIXY}tRVO!h#E`ZH6>z>l z7QaU+H=R6$4`q2f`3=?$A;1)Iza6?}|q0ut7NScgn8oY*MXV2Dc^qv$K@Bit! z+OmBuXMyZJW$$QB+(5wTiI#tcrKeW>YSEGeYP4g=4${@82226`1)l|d1i7g49yzeT zNXP&EmHU7DN%;Ri?;JCt!OfOpc4osd@RAb)?!P6wnR( zy2lp7Zx5l?r*)MM4i0y&@@+APUZSPEHJ7i>qpPS$8Q}WlfJ~tE+xhHt?-@(g!J8#P4p7E0v%}r#uI9f=DsuUlWd3{=KKbK6X|SjWyjb8kqi6ETJSXzIEJQEJj2sAwlNFkDS)?ELw5OG_OU^q+j*)^n^kIan#A_ z=Zo8KEQ_C*TZplxozHI?oAZ)JxmTH)Lm9wdV^-8VlQ6D>r}m5xUcH}@5n*?VW>)7aM9+WP)|eAPQ+BuQxbi?R%kCfrdI z6&FX6mG$s{iWt-}sCW8W3*2xs5H@f?!s%akmWB4ra$I|aJXhekFGgGU2rBnl6G;5X zw6wUmxU{sNp4I#`hyN1xMK?k6&hrn(W@2VGFfd5>RYrSzCshY#O5SE%V3Y8N$uv_Cn`-NAD!hhLywf%$vPsfRVx^{%PCGZTVc$OYglur|iN=XTRrb9?&{ zetwz5Psfq3LJ9IeG+CC=*r|LJ=W%hm7fHttw-;7x{LcbMex*Nnu;fz%sZaY2H{Qd? zkC#?fR_5fO(2F7PH$|hEtV6eL$voiOd)A5pVI>uL6Em|~;32<%|HfjQw>_+a;7TIv zL`FtVMqa$?>gozvS9=XEzQRlPY{Yy^J2gek>|zY`~61%c`(FJ18jV-aZp_Ue>xwlUAn8fCB@l&VxXKe3&_mGST4@WUmP*BjZGv+4Q zI(uqBLQ<-2jlalz>Ymr*u@{b;66Kg}_c4t>ezLN$iT*oOk6L{3Yw72;^<-pZP&=xq zP>1&N*yArRFE6Oyq@FzJYE=SZa-~+}vD{#8J^tzLW9&dAzvR+Qu%?RDI}1j7h|s zzxnqA?OVojW+Iwt%evO(CD=Lsr)D-bR=s@GFfk1eKyq@HeHGRrWM!3=5|I|hJg&jX|*B`%JnIlgd#M_*^u*Z=vdJul3J$!l^y2IOiZe=l7RADpB?mG`F*Ko@%a1p_CGI9MlP2v zuF&h46)mF!?^#__RpkTFw`$sE5KhPCpm?H}ijd%uaLLo8pCp{?5%qrBj zFF|ZU1kMMp?8m>`-e}c()TCu1&r*KjEYl%I8eG-gw6yO|Ysu3AjGA&kpI-{svXT;p zxS|IRPEL_^@#_pnR7J7$0ZSrpILyy|=hA&BuW_`}gx6U5`vfSzZFDhBHfo?)O7fTpZDRp^@Ib`^C^K zI(~28D*h~QJj+b}Tl3j*wYgdq5yG61IlV;G<+tBHPbpO8#fY?WTP1zSBgfYw#^Lsb zhu0o}8h-?my|1rt11`ah@UlFu&&N3Z;|DuCyWY3laR*tPAO1VEg7UOX*eTIbyLSEh zp9o4p4eUWmX?XGhj}Clw$*Gp-FM0OtcO$cTj{iG#3HDl_#VgPag4zvWMQ6QB_b^8^ z(D0G!>qlx16De2^l8)<=Y53{DJUafI--$r{Ax#P=7aq<{4dez3q#E22clSTIe%g<; zvd?h>w;k^5d-Ps%FJjOfoafGNu3Sd59Iy1arg@Ic-%^0d18yp|=T zW{-;{5S?rE`n|rotl*d8r%$md@OR^J$2yaglEQ<0fQ`+{_?A+no(KQsVng&Oe*bpC zexabCP!*9)js_Xd{Q7kzuBodh2iaOnUjW@i2_4P5Q|T#n}8LPgz% z6HXoI{in{37CSK?;L1Swooyq1b{HeB!hH(*@@Md106{9hD`}P?SC5Zz4Ni72GK*(d z^ZIDF0Jbq&==g{yMfa?|4PtJEpSk=Js|`5L($W$dw{o$9KmQLG0AFgi`So4bhvWRL z@5Am*rGJZGQ?b6~P&}~VVM=eBls;RM^A7YL^jxe=MKACa8~zxs@dY;sFn`zklHJX~ zG%EwPYO6#h`uow=AHZt^x9@yb`hf`>3p9(u&6W-P=$_(szI#VvOO~(gwl-RVg&9zL z&FeC7E|Qd#ge|&enq+R|^=d3JsJ0g)mQ+NTB2N3QJj0F)GC4Zf##b^wH(&{)1)TXl zP@ug8aR3xpltuWDg0>2$y%O;^G!lTRot>X%P=18o;pZ6BIDqQR_btBhWrlE=4V|kI3JBBVaI9zfJ}!E%$>jOEX=+Ki)9~0 z=JX;ta)(;52_O@ic+afCQI~fa?fN0--X#X3b&s3)&(=}i{!b?+to=FcFI~#a`2Gt> zzDzcbQBz4@40Dx6C~RzEcNMZ4KUS%xyggMaGyrbK%G~9IZ@FzNX>Gu&XQrn+O%vlS zjh?qOI_@#L?FFI~dAPQIwXHbegi~!XH)V>Vhe7dq*FiH9*jaS5qPpR<-aO z!_^`l6KVwkG#a6OvDe&Sh{D(359H{IhKfi=VLB>!_6DYx3a>tQv2PN653M-qYAzM* zcr6N+7OF3jOVN@@TtTtW0G{pP;iuD+)x&7e;1tmG@%%NMHe2#eq3CqI5OaX^TiQ0d zE550&A0?#9&q+GwnCk96j>mN5#_|x@nQyPKus7j}L`2!o#58RcTXT-nWuhek4W+h= zcn~F}rGL0c0O0jBEBeau#Y=j)rzh_>Ek-Nm935-YgLpeE#0bC&F)AP3H}Cqx!2A(@r_=ki~Y{|($w+oYo#zPe~? zMt4mO+C-oBxjDf^OL=x{-FU44C@ec@Fd}Kd7)PvNn7X9%B=V+eCFcg4cQod{St9W?uR>J2%*0UjAOPZq&8U<`9 zCv+niUj14QSo~x_YI}-=Eg-HHU3`)CG-)~oil54wn$ttMUQsw%%`>a=`_s8XFOh%; zFrj24yH?+Pm3W$+Jw_Tlke8p|Wy(ZNyLOlby-QnZ0?{oGM=p#r*?fOmvp7zM6savBwlq^PCcVkz)D+B=iT+n!&qUt6d-0{0w&{#1HOZS6{%?=$ z)KYf8eft*T1>&rZqnZT!H!1Z_)0ihh!ooLTa0tf;_3JX7oGi4U+MoYaC)MP7(s^(N zbf?U~B(`=pL|>>}^!{Aq+ zS;%xU+KcP3GPPLeyB&M>Nh$E&A|f?jayY zWb$kf6%$R!hxD^Yenu+v@E;IrB|(44e`0hT-jJ2aVU~p)?4S=1CClkqQCj>sA+#DPaFPC ztz`Z@z0eSkewEt^EoHHL1TPJ{sYEN^HQDX{_>wr?H>L}pZ(6loyLk7`5UVIhq3)O; z9+J(W>m%MZW<~)t8eJ$gQR}v$N`1f8_z%NIsn$o>QF9Lw1iLGV2Qs88`Y)`*5ruJK zH<4gpZVaKglX%KMka0boQK6Ak|8Yb#j?Q_Zex@J~Ja;ay(RlU4dK|Cj^d%#q&`TuI zRPt9%o6=Kw>*2$<>I$i8U%yEYYqZ4H5_rzS$w?#XYrs0eHfpT9eAfcD(-r8rXw1TyvrTL`Q1l)|uz^@7VfFdiV^P z1g$NLKaXr}UVqWcmSf*PFUAwc&ldRHj<^e`K4) z>H@SdNeN(hPf9ai+E+qV+NYcxnKLlgKD?xSck#(HcmJLl&CP9Z6)cOF{JSEgsIrrp z48t2OA+U;l)Q89F_%e0oF5YKC)s>Z#i#~AI#$n}S*#>YDOON+_s`A_>pPQkP5y|45 zkI<@2K_p-^0Q!I?1g?$*dyr2qf*dE^@4p+Q@_kX&@SQRt>ozTWL}TsNrthlpBOoZ4 zFyQPg65zVyv@UBXHRUbb8o&a;1TI~YDM+-B8iNFJXAoyMF%UW=DJiMO|I~<9;C`V& zi?0&jGQagIhE$KIrL6!#K^#Vsy^`=+KG7=;lmf)1!%9(vfP(R2Ay^=ew44+luoJ^C zAvKX0Nyq1(o*(lqS#0d>@9cdIlQta3u6L|R$I-7y}zefIh)gDMv$dit#Lo$sgjNsY2i`Vd1-2M zSU*)`zwN%SEXU6@slVqvMMyD;cw7B;ceVa+mr;f6kMNCzIk2+V`HBHkoYp1h%w@8dtrG=Erk+0i(Av7M z?A8nuzTu$$dcfPUx#s3(RAjL1vQK|PArt%>5B=D|t1ssiQG1rzCMNdIY`~A6kiO5M z*bo2_fQImhh&ZE~!GAy+5Fo%KL7eOUTL2}HSWQma&9@)6`qE8x`!x(;M{=APA(}$I zAdE_1NJu?TH#pC}*4hbs289f;VthSL4Bi^{b&O}ye}Pih1-jdqXEnF9({wD2xqQ^3 zaMLWUX#DbrY`iRwGwe?=W)YCXE4`#$Vs^R7#Sx(XAIGq^ag zJ($-DefmuZ&%*gm&&*W3IC#^Jy$RR~6d0-l4o>C9=Dt5qa2Nfm+fmf}7Xe*O;{E-s zhgn&qHvpV?RB%Ug{~dWKV1ZH+>ym9sz1=C{hkSsQweK6NUGgUQj!9NW3CuJhBBoV@ zug^S*gg^810)m1l#m0xVUd=21TB=@PHTZCp35lxPA_J2_zO*f!GMh?`ds!4La zj_kXNV=xV5gZ<$V_$}ANBBycj#YeFlOFxXb%Z~k?aZ{=8jRmezR8;ijiH0i=o^)Ur zu+;6}v~e7e=~{r|Q{T)?>%1~+`wzAKF>e{gULJ=XCRhY(J)UJLzAR`#+2Olip_wxz1DUh6l>sqyOI`{e8 zlRU5=8vp)X&8@)}`Al8i7RtuXCF23d=OiymyOZTvcG6^}W&!J)F<~RIZic&eb6cGc z_xWDgc&_kryve?^LFr@F7AotVsd1YK*Si|@(GK8_gPoo7+-!z_U0rGE@#a^lDaW7nZ+AhB z2hL2caUU^n3TqWYkQ}c!jIAXo#1P_|*SYYrPV(QRB#h?gocoK5q|`Y05p)C_$heRY z&@G(KvL~78J}f987O;Q>{S-#T0SPWWb^zp%2loe*<7t6B3D!-IY<99lz9l&qS5_Jl zOI7SFEl2;fpS^d5uCm#xzsC1EULT&`3asgW^6=)1MQyAs+YA}7H-ey7N|4KP6gNTb zjlEcBU46l)24^riGZR*_AKb7o$S*w%|aWQ%!5~RhHh4@EJ`*Td!m5no%A18@4A8I&yeu2S=RxOxIFVJl#;hE51q!`=* ze_dW&#J&fef&d?%@`j|&g~zCD%kuKx+KG`Gl3Q;g6|=E{8GMpusrj zZjC*i^n^4MB$M+{4#9sI75am<6UUW_?>~HaT2$2j?wz5T8B@)u>hpa2Dx?|(1y}H@lyvs+ESQXE2OlbrRUU`TI>G9*sDd`& z8q#P3RL}{c5*-t6NQlAGVWp)^Z@=gFY7{Hh;#=1GLhvFbcssMbfk z#v<|XclV0muAs(&@s1FaiJ>9gvNV8aaKKP|-Z3Hh2Q5hn^M^~ie7PBxF8HpaBPQdk z0e-CdFQuqU_d$RZTHT$Ca-8IN4TLE%At84&>3(diwyEjR;GpBNB;+@7TP^Zjv8aW? zlIk`XCS(qgu}3yJFS}}Ay5>>EH&9s-+T!_6;@hebUwBJ<7W)O~L+3;-`?o4B?zcQ6 z?g?4q28W*eMIu_!I8&%PU{6Ji4JmynRK-lS8r?fzA` z|Iy;#NV8T73x#SPr^OMbJgadhLFBBYt#=*l?$*l+l+)f;2@64N%YTb1jGvHvHq~eL zeEzuvYC4`_aAKaAH1UN?-dOWM9Aa;z1JDKM?(eux&FKY&g+IX2z2fYA!8jnS*$RlT z)0HdXirLM*Usyv~+1U{z4Bi#JC@JA;HmihSqx&>2{EzXq_f{X zQZW4a^SiUrU}#*2aUQ{7X9nLD2uv_d2CP(#s~YWgVz>cld(crFJ$^jSYViak4K%&I zy}ggK)~W&(w~ID4&eBp%YjE!_bG1EXs;k^F^)lQlG(qIOjqSa#%7<_JE$)l7CRAxL zU;>LwKtRATTNlYRAoprkwA`E|7{3l4ZSXm7-uW9r2&SM6-x{2R*&@xVJor~91WiSH z0k$BAiSPR5bSw$mB4{&yXVSwGfv_{~xxM--aC&z=vSv;H#Riea&ojSKSN5#MmxK@Iz##{O@W$>=zWuy!m8j&NvG~JkVq&Xl30M@HA zcQ>J};p=adal~{zBtx%Hn(^fyZnZ2H6BEOJ57BYh{m<-F6c-E(R%KSG>Q$~dIQTA1 zYU7er51oY`fr3?OQY4)*MV|hIzO?v9W@!Y8&}Hh6uSXiM3{>R{z*i;3^9W}Qc;0c z=YC2GT9+W0QPnql0kMlba8jOhJusvJo)nqy_ug-_8F=BI-)seK_W8WEsjCta{}Y6hhqkWloMUXM0u; zp)V(^^d8RF$PtiIKNKPR)B2XjowBqKc-j$UssgKzRq2ppJ}fLm_l$8(fAQ~zVs>m6 zUkJq)ApSq2TaKr+fmeT_Wo>*nC5BaO;0apulO>W&mE(Wg^HPnXrA2z~{;e?RBF-b6 z5P#WdB4B;$?jB$M8<+G0O=o4|_{l?R5r9<)rvyHIb$Pk5G=Qx^wKhmh!$42ZOZova z-puxFgkbCjMZFPZLLZQ(!^J?sz&!2zchHi7`X#KZ6I1}XKYRMr+28+6(v5=%XUNOr zlm4VDIBdIbVd#9m-ixKG`|@Xf8NOdjN;duPBwnxWh*tm7aJ2s?r_&>oR}Q<@6YH|B z^B_iGV@ftoG&-5m1|}<0gu+4@P1G3hUp&?E$3-PF>*~xqN+MIR`=&{I>j*C^<#!pO zUF5N4>tD;K(KT>THz%0vB}xtSO02$-qb-4Qo~B=0Jd&1DPC;QuYl&=i^h>iN3fe)T z7h9NbV#w8t4bMbC@OfU_4-g6X9&B|hD-v5r;I2PX?qDF$`dbKDDCtr8MvLb}(s!va zt0#ydcqFLNxgt6`I%0Me)8a$~1=U(pegm&4qK+6$2X)=IgSv|4HV8o(J;frE+7qQpy{c!>{oA zkI$K@-W2V*gErKzm4<$QncKCJuG$I2l}k5g98l%c{wvxT;&HQe8m#>+TV{#05BSXm z&H)*yRPUMjsCWdS)42g;KUY|19wi#~hLrcLNcmwJtp`DnehY3YpO}d86SiYn(=PvH;g*ElCAsXQ`Mwoo-9r!XMF1K_dy<> z{gI@t&9@<2a^FE77{Pob+<6vzEefT#Seklz?Y@bK6M#vyJgBUUmSFqH;Jl+w10@X* zxaQQ%+}sJwdeWUw{n-Y16pQ$CM+fKRLoGgnU7EDAvdu{fTqbzm@Oz4ll%jd?_kGgw ztj9%Y*kBSx>~rOkPGhp+GjdM!rbP?eX5JqfSacB+`YGReHR-(z1{ zNZeQxtMfnd4g`9&g{mjc6{JGUz;tZ_PcrF&#qUQa3Fu?|bLIJu_GEdjZd21@S0C31 zEB1F73XDqhR1>_7D5xpOvy}MerVLDLLJk0wz~CG~o6>iIlSrqP{mpki8mzrxvhbdc zNI);8DCWdfd3datBi2=^9g09YX!Y$QNf=pPu3t5p6WBC%3ex~4i>_3O(w1&8@=6XX zE1WWQLR^Fg7X9_YfuE%DN4sdcwcP0%?8LzTzhKvENwUJKufJKQ(BFWWEs2Tp7p^K3 zrQrjG{Q)a89Hqz);9*lDA&H=hAU!f0EXLMD%9Gq?y}07ha)9$u*57or%!n5+NLnwj z+~kk$dM2k{puS6>SH+rUQ>1v<>LjJI4y?T@W3}0o>s|scA#FB;H$<5txJ#X%2cuk7 zD56y-j-xC?hL$6&V+=v2T5j5B6Yy}F?>dfPx00nS=V|`w`Plj8oeZ{6V;;#CClpf) zH_&4z&2>`0tW;HqbHA}xR%ugf(2($~A(4Q`>QSUgPo~^$c(PhYo{o+m z!&)D`@U;2EhYLd;Yxynh?E%358Z{h930z@HnrhXq`uNvZ997)iE44hXWp>C_PUv$9 z_}|qcQV3VqJ?L}1Fr@xbxbost%uCW39Nmq8G&(FtjWuIM-ia^5^57QI^!e1=D`>@% zuLp=%A(}9V`l`QomKf7IL7LtW{#JGuO})T>cX^-Ki3#|8eT)tE`mndswbvBEK2S4L z?4CsJ^9z{ZR9C)kmlq?rMM-OaF`)?6fr>$@*Z}4UVm49ytd587TfJr-)2FnfC3C6Tvdpbte*jWwAGKh_W{o*DiRFH(4J2 z=uU<)xH(V#?|%m+LITZ!un8TBC^ff))^S)ADK99K^o{v9zT}Rh=s$7%pckOig}e(m z7h}~r>HIEl$jZ!Dz zPs&JqVxF_;5V}7Kd!P6r-RVBF&$bl(NXs+N%CbH_%xL@6D}@VHbs@;_DIh4_CO)n?O{ucpi!O zY*W_#1JLoSybP?koH@n|T~0wk-Pz8$fj6ReCu=uANMZaD7t4fX;lx~M@A97x<{#E-pNk(PB6`9VHCRrHJZLam!`D0X_?u$K34Glq)H&RlPlgoTs zB|U%KPfWB@tA=!)`ihCV-IXhyon95e0NK#qy(8gbW23m>7!v zL5D_P$mv^sXj0yZJl%)@F{%^y`YYW%2K~&cD&vb+d{%yEPHM2lbq^1V%qlT6GO|m1 zY0b~`H32R|o|Q7ILzqBYebnbQf;IYdC#07POG&z8$R&9=c|jI6em4}jCMByZTA2_BQ0g)iMC|* zJgcQ;oe1nu4YIFVMRM+EtUerNlM)-lZ{y<0(PqRX0@lb#`#~Nefi&ZzurS?&1^LkW z?DaY|wLe;<*9+7$=1pbYcT^BNpLk&IM&s#RFlTf|vQjM-vvKpy z8RrP+TSXaMU+-8ArFA+>?S+RB?NEeGWwZjBDjxqq!`6ei(+m^lLQcA5?DR?*om;`K z%Q;$)jU~s?_41Bm$RO)B#J7&ROR$q9nmFa8r_JL~U^BWhDrgtgZB}u--5U701Yjw* znsHhj=G4xwBj8G8ch#Y6_j{W^m;xxTXO1o^uab98Rs@;)_e>v=u>Zpau#N4ryfCWI zlpXkOJ!sLw!_r)BaVZqK0x=r>`S3_jj%+z?cm#BAS)vi7-pN*{{6tggZHwfi5>oA zJp3(MMX{b21x!A3QiyQch}TKHvd|jbS(BTqFmTwW7X^c@r|0vIY_O-s`QDepTRdDs z;K&h8wG?&7CTwnc6|b)#=!L1!?71!X`0+bwHK?(P70>dJ*$m~a@V{o+lqu$^fTux-$Rxg7`TmoCuzRf z+M`+y2^UU$?WDHqEJcq$wt9E!6vgMivfU^szgSHB-1PPFk@)K1Jn`+@75{~Ilw65Q z50aCO&CY+!y8yrn+9TQMV=S~J+X;OCG5;fU`%iBn>{T|cgO5^vT4C!E`1|qFr5~m| zoc|<%e<`d+ons2a(y-Nbv|~D6OYhN#c^7jrTgXSd?yoTx$$7A;%gp*7>o!;yU@pIi z?NKyg;3j`ynCEYdN1@km>F)3%<9zD#VjMT8i0tJ>Hx~CXD%en)gam0cOB#X}z!m!0TbiTh+SWYw zpb!pXvNz-Cw*yk_NY6aqX>;g*hTELL8VrH<7Zb8yS#c$Rj2_B`{X;!`YwVT+T*q`1ze> zp;f0TN(O#P8YQX-jP@9Q{FyTN`7@u#@h}Tfi4!Ndb-jt16ITQiesKvI1CBo)?DQcv z$i5yO#5c71(M{RwZQ|Cl+VNrMzkuLyil+2I*qtDtYiQOSi&xM`RTRF&J;_H^XDnaw`D3#IZb@e$CLE$lz>jkv**6< ztD8A-^5ib3IfHL}c5Rdvot9js!PmMTlk=BpN(uOqF@1Ep50vx$`Gk0sM6!o5GX~)5 zv4q=npX5mY&~7xC0vwkA#S$sTd8|Bcwn8^5_L1~78i6sW+-G&9L&A1kMeX)@{04sx zm&ZaOIuzv&_tZnS(aVcnLNEKq`PRWg1g-sox;bfKWIyJ-JO(yep%9V%l?e409BcFD z!}9vb)F-MS9rC^(*}xPO_3psUd;fT|!5kshXf4pqJxnaxci-BGp11c;zrg`;oI!#0 zxHp<4U#5d}Cz~cA<9)e4vKoa#Pv4*YC!ChIV@Mn5sWg&Sh{USS^_>S2trhMjb(7wX zmERa;qP-`*9dIIH;o;hv&ncR05s>+0_i9`4KJ(n}@&I_E44uuP_9+%Qs^MXEGS{*6 zYs3C;(IsM#yet1EDs14aJAr}TBW%dI>Dooj;_QsExyp{W2H{!ptgD^5Sy>H^7Y6<3 z2`b?;6)&OQ{hl5mvLIN*Bx_K9NQJ@4JNy{wk~W^X{W{R9#0scEcuAjIigjy_VgATt1$gf7Xa zTu*@pa;p&C7!`9<&*vZ8*#dcAqV& z5wAJvbsK<6=1g)>p?r73fddETq>bBudVYtGZ#82$&* zSqa>g=%=lZ*KPgpZjSbss=|^*G9Xo=w1+2AA0`+@tM8&0RBkTblNc6COA;H{Ur!7) zYDKS00s9w8+LgpnluB_`{QSX96_ZQ;>1uO-ntQnHi?kXN;^3`Re zZziDQE+u7>H~)~iv!96sBYG-BE^Rsc_`;os&4Nz<2{}<(9MkQ(wH!zFNO(5=HLixhVCV>^}Y$bj9v&NtNt%oM`2&tvNhLK9Tl8rS(5RVUAU zrI3k_kGEJe3qp1*`CaXeuZUnIrA76-Z!Xv9q$!M_k_ly6N)*p?JqEU$5fKsA0@PuLvl8!~ zS+{-Fwr(Wv_r4>$Hn2mJIrLmUxxK;Yxf73K%IY68?YposbS86~Vezi!oY;<+sLm9A zNR^++?EPq2ERlBJzBPkY)xniH);4}gkPqy9mFx5mrjSvq_z#sJ*(9+I(5MnH<&*tS+Ps3-$n+8Aq#qF}~vs1V{m+VOaPL+8KSxn3po#yuNHVfheYF#!%N2AeArEH>QtVlya z9%Kgj-!rb+Qo|=bXmMDG-k%MU4*7KDG)9b)2q&5UZ60u8@BR4ksHo`gPPHSCoZUIo z+nZd;mo`cbg;f7G1a$};J2uS3C}qc81CYJHKe;1&6J9#4+ANC<+BX1=w)6?fWp6Va zpm^&Wm0*3?g1-D*=q0hzZdEqwNHLQ!iSv`W@?^t7eU6@zX)UX%+1KQZ@yI7_yU!Vh zo&pAmq@E2hldrM5rNy^^R;#q%%5Th16_`G(;He`OH5NQv;zD0he?1zsdvMBHMwkDF za5RY04!<40V2SMvUZbTpAu;}TP$>dCWPX@por=d z6Yc(2?d-sbz(iEybTHx$NKrsmBtU>|xZSktiRq;yCv)kO)iIGl@NJKa+6e772~)b8 z6ACmJ2}U>K>2H4Ao+>i6yIwpcl3|Uyn{|TX%Q;R?J5@qvPJ>`v!#>Wd@Cu=jx%k43 zd$qVjI%*6YKUf)Hl6@)i*T&fc!DNM=vPBlq7-{SpV9~ky`_PEG_EB{M#>Ec~#as@Z zeq?Xy>`Zr2-jdaAV+uA?qR9EKb6%0b$8|U5_UBW>$wSTt3fnuteT6|wx|;8a%f+8T zf8BypHO8LlHgu^f+x?_TyR3SPhqjqNphI;!bEkwUU`j$^Esx5My>6Ku+g}E%M_Al3 zl-o;qRZ4^LTGNFeB+d7FZ_mJ=LOfJ4tZnr*`#CS|mZ}OhrsgI`3dJFr3aAPFoCG=y)Z6Bnh zkV4`b=xPG_M-=Q#I68~Ssc&!`8ajOs4w*@1wPJG#=ea6B40;aWFmicA}8AVIkNc#N$dP^@Q%l#&-#M~i6VoTevvLS!I;8g zhpb>I`)?7an`Ehq40|lpiA>v{$;@ms+$NU+_tYylwCN5-p02-AxRL)rc9{F(#ZwO# zOpyexeYv$49dH4q)f%&3a8&ifauf61ahS}3Oe71R_XLA!J8JS|WU14UaZVN2`M{4O_S=*%nzf$tD*i z%DAn+Nal3~9qMSE6@KaH@r)&t#4@cL8b>DHZ|fPYklmdkR*)8!CJKh4z*4*34(cXW znj2yQm&y-J=)R-aX8a|HsD8(c!9Vk5N1Kd%IR(h9BI%(Q9s5n+)FM#O-QO zh`(jyY(%7URq`2&Jc%C8I3I0J?6+hwv2=fGZuMP@=8bzb6Ds3d*$FKOdw>7;=g%y{R(am)N!nXBSI}fhIQLMGOId(i4*)UdVoUbn-Gojx_qA+#$shhkD zTv=vw7ulP>x??+!X7#ywLd6}cf0z7JaEH`8>=EkRfmVi3F31!q=}x-Cx;mt=%D&i; zqK1R{x|D|wD|+|qZCCyOv#f?naDK!rl5xTnGqUyXivR%i5%(VQ_5 zWr_E^A+=jHr7g&;D9*Qb*iM-2vTa>_^SgI+3qBqq{Ba#M=VD_YsGZuYmT3-qMEwwi zKxDWEY3ET!lE^-_kRptyKS47E1N-K$Dfa#J%nXtD(_sVnHn~_C)E-h{cN`s#$;B4$ zyj#I#OgE2GNLtHNSWGx>?VzTrC+Z@$E{wXd-{#%u33`<=+)pLM)QY~3|Hh0t^ZxzZ z-UWa&z#~-CDQJTZwIjcCe!c|7i)%2?zMSgs4Y&P{XC5rYsp*-QE4goDIbHvVE6X|Z zyu}U%pa0Mo6?;h)Lx_(%WS{)J&oO9^N?+ayf!x%dNX9>2(se71N8sbApIN=zspEfu zc>PD>bo~Jm80&;P%${lBa_!pw_UtE!-3Wf}?6+0?`mZJVXqI}&M@j{KiC}+Cdg|wSe<*{{(Hz-as(|94IdvSkY}}L-m)IEq6wTVSbi#)Z z%T0FPFhlX#V7L82ZwmG9`rxRPGbhyXBmTpWDEl6xrPIz*$h)8enqRXXgVXO-KkV9d zUq)5cw3$yrsL_NEg~G&@KH~gb*2hWACLd?f;S(d?7pE3VP3vpAUFf#|&(^^7fyO==7mF%@N&^H=C5innaWB$@2GEV6&AE_G=8Q zJ{|P4ae&+qF3_E7L>cnIu3<|QM3oCuxlclq4l zq^oB!RsdCIe^sX!_5<}0Z7JzT=?ZW1oRMz1#Zz=D_-?OD`q$_PoS z2WB2qwD_G1w|l7b?Fi8fG~LSUPG2!&1$csNG#eWm@i~jEFM21?-ZnK{4d==_aL{Qc zCDYVm7m&SmmSSIN0m;gZXwap#pnLg2;^!Nnv?^` zJz0n2p2QNor@Q$h8o4I zxGDYvj{2%0;V*$vy8RE{PBoM` zYHDg$sb%hAR3ME+=r}}-4tiQpz)*D;NC_!dVA@VRBu2K6!gXu&hIF(SIPG>1{6*mZ z1;BhV<{alu?G9?Zjzr$`IeAEqEYym+<`x|V6v~I>WV(47X`sgOf{v;oWEXl98ozj& z(P@?K4WC_$T?Qq#L2_v=5A{FO(JQ1*Yef-0ahPQySFF3co9XvKil=P zYvT<$iZ`=)GRgW&t2MeiGl%e;n?Y3JX5j8G@9 zzW8*xr*mb)zj|o6yW0baL|D8o3?of5CW7GLn(h6|!3#`!uCr?p1r*l#jnbla{xV!*-ob`PrckwL#~KtYe&=&J5sAR>8zAoO%(Qhu{$9v(R3z3FgXLU$2u;&VlCp7X-I7+mWK z@Zuik2xw-sM$3IvF)p=f!+h1yk$wP0Fp0cfb8V&v6t;&4c(!k2Y2gzPAQpdD4T%HF zzXhTEwp^nM(&+L3o?kL$jjIph#6TJ~r$50Q(chPQij{=DV>6)JoO^AYo!b7r+ILxG z$M86{9i<^%Fx`HUez+yy<=zY83TQCu*(zL{g3mCon$-a6kfW)B`B{MjKVhwW$3xIk z2YrJKB@3#8LFymNe=(MpPD}GDg!q_I`_YIHLPl%-|Frkrk67-1+$toMQnx}fvk8@q zjIxR{Gop;7LL!nKg_a0MMk&Nywi^+d$t>AXICjX+ip=MAb)M&6cz*g`Kb+$@+^*~T zd_M2_dcEG(N1g`+1RSRj9nnt103ft#rH@Vk*sQ6cL9goREeu8p7|V^RDCM=j6G*~9 zRfxwmr_%*~vikh#)0R1*(jFg(K3kjBlJki(vEi8A#_eBHfi2-nV9Vj8ga3wbeLx=n z5CAdDQ$FjSRt=jVasdv@wz(8QbTQG`KVDvU45c)V9;16bVId&^pRaH=rgoRyPJL(F zNo*fxX1ci)G@>8;+`@5Sqd4iTi3#R#G5<6m_F($wkuvz(NJp~9l`C%o4_zt?(cPo8 z)4!xdVP1piacJ2x4LR1KOb@>cg+wLKs<6^z;Ehcs%@1I;{^sbcMVJrT|r7lhUMntSR>T?S#k|%P5?<_`%_0tQ?sks zQwsNeeFIHzh!#WC89sMUS?Uw{KnAeJT;Z^K+ipl->`~l}5D_((^@sZAD6s3RO>aE0 z6C7|r;7AVIIbi97d=`W)5^Y9_l&J4_Da5m;-dB2rkOp-w`Z=K>HB_J0baGBIQd&_LS4RQN z0ZZjiv0zV)7R|TT)=!=FUEjYmuU2PKU$U_w$U7$ue*yP9DEdy(XU)sY)m)xk8*qj| zn-qXI$H&KYj;IqiuAb0j*Ii^>bq~@zB@LZ+4i1r7&Bp`<)vMY_s^rAP+V5XQ={_R* zMqpJ`5{!-()-cT>S3_MrR7!McVHs)uehO2mJbMF7ujT5Hn%^C7C8c6{5kbKb2oHz3 zPQa$XIwidIw|RI*ODjg^=8)fxUvyeD(O4PEN8|*sFmAMhY@A?&!(AvJTdx`=E0UUfA2aBycM#`Inr}4wlYc-+1=u|HA_O z>Qj!c;~V%0Ebi#MM`h<*4Q%e2D_S@&o~ujqi~Dw?ii>VraPXp$fdOyAWcstVvyK$PG;lO0v-d9TGaxsX$yF@xam;5{zl0ws<&?!kL#V+N}SC* z?K{u_9wBc2{qw;w#%J_xWAoWpXHZcEC4_W!Dgh~T?Y?u>C%t~RU!7qmAzTXzE}M2m z2MwAAI#u@!Qw_SGJ?>MXx<7-oy6DiyX``KEC@IZU(d3#;px(#ipdAN3+91;zD3Dxv z+g0R#*nWu(N+3aRc?!YfBiLA`SUS&<=GVxqE=Q9Xo7Yyp@9%)ZE9#Y@_Lb{<8|NsT zbTfwAXg*sVqM22>JwIvyhIi5A_)g*@SK+regwJkS*S~?@d{K~$FK3b0pBV&~j)wyr z@v|)a8olO#c|ndpGH@%vO<1=6WGao*rym#1rMB88y#L)wzfoK%J|#uNjHM3}EO_eb zYULkzj%;nd?>RPM$V1-A&tMvWX157|*&ud;I+V5`1L2qXv2U9u+N%8l?5a&N;ScpT zxOBUEyt%mud<=*%u>B^YiZm09Z65DNd=w@8RK(> zz?O=0tSmFe3qW-Aq#BLZrw<>F={c!qI+o8C6eI*!`P7K& zvYp*H3bKLoj(v#h3aT}@}&Df7Y?=qfr}_~xpHL)(3VF{hndk@MpARR zG#+RT9GCFxdLhW#`~=k|oZeeHt0>dE-5sKD_oHFNfKM)pQ=!#=dMa7cevtB5sue4x zHmMW#u+L~1hJ*N5!z1$J4XZo}NY31HcBXb#kJ@wtbQ%Ee#HAd)yjBQ*Ewc7uy$z%b z1P#Q=^r3xR>D2pS15I=eEAT`!dy+L?Xbqzo#{Bs53ZevHHCcXoKltfxRT%=7PP^iF zFp+3;c}G@+;H9zJOrS(rMJyf7BgVISmN~HwyKWZ(|dq zquJ*~7~AFh<~@KS+{iktaq5&b_*z-SHd&$3i|ZRPZz;n>;?olJ115PUGp?#M1KUj3SUHk)7O z2x}eSzn0c2>YP+OUvo?*a98YK-lgspGb1{5pKC2eMMUt`ApS}j$*UvtqThJAQ2B9E zCCC95_ZP?(?s#BpGX{C=CWs{0WGzYGNc9e6}iQg!zI zQy`;|okwOF8Imf2vO4*x_bXhag5Hak;aOAst*W4XedBJX5bID2nu8tIIdVl3U|-Ui z6C#ivTj}gs+q2ep-vXlLi7}*`sibVkhNtMaD$8o5F$ zD!QOPF+AXjQhE*s9&lW6@UZ0xO#KNcg8oJeeWzjV*G zDU;fSyX#*IZ*7FZg_$ESjaIDRdCYbP>Gb_5WN8@>CCSc-Y<^x4`w4%vc{8Ah z306$;ICHB@x1j$6R9^_cFj&IakV*90O8If@FrtNc^M80_8-|_UV+u9McOh?|Xn^Nv z_je3Wq)%gu5$(A|LuO*#;Fp`W#Z==lUk$HHqY0lXVOen0{jSOFju;0SFs>qDeWuMnM0q3OK+&8_v3d%VE+@qKio-I(& zZikw}4Ur5ZhCvKA@ae^L1~Y%UG81{U+Vh=zE|epapc(< z3}#X#xkP(w+uEj-SG$%V>?cj7sj%At%7K@5l-xV<;^2 zM3jq0`gF4gjx7!_eGXrGh1H?`K(6+4X(YBls0}ZJwxDy}4;p^4a_)yDCDA00w|eU0 z=C+7n72$2TQSERZlBI;cs$yYe^XRWs(XT9gsjGw2N2UcJ30;+FVV5`JRmkDhMkno6 zod(n&Z%}ys9u->=5eMbuaQak{FJ{A%AsDFHBRerNVqDpPaOBzZKI1+_tf~IfwFy z5%+$xT|eG1egf?hW2swh!Gn)5e0E43rU%c3d*bEzq$);NfrGkGUju-VRfJ`QX`+7dz zkmfv%I?BGN)4+XZFL$7d+};k>9q#p=Yjs_@1%fuXIrPa5Y^6nng~u>DK;pSK%|`K$ zX+=dB5?i_;5mX}?p%B{uWER^KY<#fe;Q2xhe)#1kheA7S!CNL#_XejK0l zm490z>WeS6TnWP*>2sRQ`~o;d0EJ;eLkyc^qoOj~?O-Kp=riCd!RF2~_f4)AuWQqi1*_caFgRCHxNHjVKrB z{foEdv1nGFj#KV8Cf@ZAHg^6)=s*XBE47CZ4#jF6EY45OX=i#C9}T zI#9kHla^k@(SUkfuhde>ReWrd%kkAhu#ll1i&2AYKRmS5u|qIfrOA2)BNy?1lx0`Z z{OUk7j}qGtmpLpb+c6gr`Z01v5R~xn2H=-_3n{SO*d_oWBIbsL;+mjF0S}3Dsn?%F zi*+7TpX=)tT*l8?8ClY*?;d0-xSeoza+zYdKD~t{xxYT3F_)ipv8P@n&!?9v5Ou2v z?#T>#Q%@^w0c;mNarIGWqA!JILG^^jhYPiTlwV$GT}6kBo6_ovc@OaQ)z(XrWSK=0g|coDlJ7qIrpw-ZaJb1f7np!p zUk7ag|NbF*UyGyB7@L7oZg@vDp$U5E(9BTXzQh)mmFEXf>{QWRfvSpv82HbLt! zT2DsHiuC7D;+r?b-1_sO%C0#k*C9Fq>NHUY=lAF5=ikpzjd;QL!V2_~)}X(o)^`9q zSHX4ig81+z9~JaGus+!9#CA8|FWSZWpu7oQH2!7{&Ojb?%yhi2T$XuR53?<_tcmIe zUO09U{;5%UI<`UT$dLo-d|R{ELJsio3}B;kq#1cl_p6S4A8liozcrvVG^Q{ zIE&|2t7D}dm3}*_1dL5imbgvF`*s=WlD@&t85%}JMke-_UvzP48+0o6nAZq>=`odM zl8${C^#1kZsf)DCj6frkTW!Oin1xglFO2fk;4&B_+0{ZXq!{u;NMEv0M zdXaO9{&A(Ak%>1}z9HY_q$5^y>ZF3O!gs z7)-<$P*jECVq#l{Uu?R0!0zYYH4;Z(_BvG<{Ur@4DS7$Z^F0lygu_w5up(!J#K&cA z3H38)fZ2ci?$J|x5*9E3*!6TwEoh@irlsZL zx?ZY20}&61O8xUse9MT6?$;40enFrO$;F_#I@*{yr1-ws1tLJ`%!A_h(Cv_RyEO!u zICIL51ycYhs^!KN3pkV$8f^E1v6bK(iiQQTV4W9MXp78E)-kC{Kt7`Gxn%S8aQiGyI$_tgfoVu#py??5z3{d+q9-VOh;LTB z|D@9L&rq}j*bm{OZU}nU*47s2V;;r-oc%*$6ZJ5{OE@Bypo!Gc?Ux0j7L?GG7V^&g zy_}t$(^g*NZ2mo->irZvr(x>t1zz6bLqVrB{)svo{er>g9 zU7mr@fqJ7jw*Wu?a4Mw)QOMRS$J$G=S9h)m?$v+<+kavyx_VSL4HBlB zaN>M+RfnvJa_B-`)qQs8)P6HoMqw#eI5x6RXy-(P**e$ic?E71+Te$qE;J{^#r1;k zicD>r?r|n+E@!_xGBPp}j)p(b1I0L*gXSe{F?%0042RKPFaPD59;3gVU=e05rhvZH z0|IH~ zbMSn8R<{3}2D^wVE}U-D3vXVu)G$Zw(R&&?TE9L}$sUDY7Q;bTT=}I;wv|440eK2? ziaZ?0@2kY-l6Cq~19<19h0}}D#b!N?jhTqMnjOec$bKR17@s0kAT;iO3cCrqLHk-7 z{Co6FwHcb!Qr@vHyyupZS^((Sd%?LRUmrmdjGa$y7TLHFguzo%2mZlJ7?>GC&^pmm zs(8Q3o>*6SfvUy`MO_kjVQk9VkuTuZ7pDi1s0U8%ZE*;Xj9dq;x9Pq1F&)@JMW~6a zFkJ(fiU6QuqoIJ93%xnyQ-RADA0l)Cgp&)Vt9iR_R6)%6Llc-3q&}CO?TfeSDJgwK z=+%En#w(=Nb`?@f?*E34WA<-R`x4;%N-1sT^2Rn!?H7&3x)U^jx9 zrSqx5>I{}{b+T~EvfqYHAl;A{4Vuq}nL8(zBTH9!o3Af2udn>$Abv-A?-6y6>)y@= zQ~KQ~S8?9C?(|$m_x#RHFM|PdZ*JC0H#{aQ%Q~2NGd%_l9A-VHMWtMsREg(CV*q4Du}B)0;;iQR=yv9=a)K2PC67H}Ks z2}%-S$VPJg12ItWBB={5WaQ5k+3w%vdJoHgBW%;`Nzj!Q5b{*%}b)myh)UQ%YzSEApfs;Y{&7OqwH$P^harlBS! zCFyk17ce2U1<4XTP;}M<-ZKXI`};#IXry=fR30xY)84(%nIY7-^YWyI>@zs&0N243 zWaHIjlO}b_H^4bF^Ya(c5_om&t>)3x)+NBqE0&~;cT!`SF4snYUW3juW$jdJ6nsK9 zl*`fH%=aPWIv^n1je-!AHY65mP@ww`G%L7g{RvC<7yhYYKo^8!TDT{EprV`)9T_w> z(T}q65}SDA@F3}uI5XH+2#4U1;}bV_k3NcrmZGtNL1m!^sS=@k_|vDvah~^UWQ@eT zKeT}JFN9Dyi_IXz?=mu^mg#&m4n`M;pY`Uo7{z#SE^zoz9G}{6O)|#odH6Qn@mgD& zjPp+&1l-WShFmo{dbbEZ!KUR6s`07A^1Mv5SYm)^FhDK9`KF;Tq<;Xg!SXe4FDs1* z4RyqzF`%w7s@#9J;?Qe!9p(2}X4J=Tqqa~<#-aB0-56ch*3`r(+`yP_2&sD$Q`7yc zxmM*wkpT7!C{dVGC~7=%zNvt7e;J({Au$&wwA5Fi+lm6Jg6D6M=imD2VazPC6=1Da zG+or0qETP4Of^LpfBlNo3L--`ZdQvEaWV(cG1H`xibrBX4>bIdx zjbdWO3T9N}<)YiVWB&c^6WF<^Uj+?FCQYZ{mce9(X(oET?{?RF2OFlQCnvYRyMCT6 zt=*V+qjDCv7QgtDi=f?%g=um88O;cy7?tt)<;mH zha^+Axh(xA^h84EB3xg<-h$f)AAN7eXZo4HXVWZ!e%UPNhGDjv*NP+H#ti zJ~|hPs}FMpkkMg+?j=iyOfw1v`#U4!$#OZJp>lyA(l9ii5mhwTx%XhVqTH7@B&wgK z)zO%DvHU*P2+ycG%PknBb{3kPNSP4B;Q*x3eR$}i_YNAC(C(X>m;kFYFoks!Lc~hU zdQw$&H0ITI#KyygmJv>nlk7_v)lmD;kg%}XPyDeJw8Scb`Z4bTz&$k5RA?n(uOJG5%@e4WkR2=2$WfdB1^uJE($XILypunMkai(b z$L;9^UZZyQ;c>f(?k(D1u?n|YM{jRdOK=441)CPZLwpZT7{X9QMHNP`wh|lK%*+fc zi~8IJ_QrVW;Oa|n+rh`!&v0^)!&qHi9foDSoMSC+@$Nu_srUOYv)VdI0D`1Jux#y!|i17`e`Jj1jH`WWiA8a{D{zP*gpth)x zgVG9I(0@5g<*{}cE`T~vCTmtqwr8?M(E#dJ&FT6nv!PK@P}+rjALNX9_A){(^1ahd z$S;uoyoeXT(7!a(La222SY|aoT6qXpUD##+wjCWEtI{PTWLOGhqy*zw=pJqP!1T5q zJ4!J=;KmII?Fr5wE>%ix#b*Eq0TJWB>93oz;5CHGy+#^cB}fc_1j;qRQ#oXv!ykO8 z3!<%u3OXVv*ar6@__DI9G#)Yu#ihjxeg~k}5G71!AZpe3&5g?&`@`Sk&-NA&d-JuBl_9 zK2h-AqgX*yv~E%Omc1E$GkiZ(Ss{jw3tu2e!p`w296w8{eCmp@4X{hW5|y*^aOH_> z6r_eY`N7q*p)pZfiQ+|Rb{Ioyr>=5B|Gc||y7ti)3W9Lv=`GQy!hbT?M6#fz1wkw? z^0ik@*5ty77cZay*p^{>4Y<}Thl52{*hd(%W-jr`b0fn!xkpAL_#PAXHY|)@|7Gd% z0YDHK8z|(&M_*HSs)j14*rAFV<9cd!o8W%c0vozEPbp->;nB5IHm8927&Hfd<_($r zYb(=HVKF{I9h=;a@D0X>hfd01P?7foLTig|j3+KGoI~8^)11cSV6MQv|Hhxi(FclP z7BLl-{$0$|!=-~77xC}oO#gRingJ&jF$3;@Kk&czKx_l5|Lunl|KHz3pU(#Wj;|F? S-u=SF-&R-EQpr%V@clo$q<(1t