From a59e346d4af2a1ac91ea087a0c465e9a1e593f86 Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Wed, 9 Oct 2019 19:51:26 +0300 Subject: [PATCH 1/2] * dnsfilter: major refactoring * dnsfilter is controlled by package home, not dnsforward * move HTTP handlers to dnsfilter/ * apply filtering settings without DNS server restart * use only 1 goroutine for filters update * apply new filters quickly (after they are ready to be used) --- dnsfilter/dnsfilter.go | 180 +++++++++++++++++++++++++--------- dnsfilter/dnsfilter_test.go | 38 +++---- dnsfilter/rewrites.go | 93 ++++++++++++++++++ dnsfilter/security.go | 179 +++++++++++++++++++++++++++++++++ dnsforward/dnsforward.go | 157 +++++------------------------ dnsforward/dnsforward_test.go | 26 ++--- home/config.go | 17 +++- home/control.go | 146 --------------------------- home/control_filtering.go | 52 ++++------ home/dns.go | 47 ++++----- home/dns_rewrites.go | 104 -------------------- home/filter.go | 91 +++++++++++------ home/helpers.go | 25 ----- home/home.go | 11 ++- 14 files changed, 578 insertions(+), 588 deletions(-) create mode 100644 dnsfilter/rewrites.go create mode 100644 dnsfilter/security.go delete mode 100644 home/dns_rewrites.go diff --git a/dnsfilter/dnsfilter.go b/dnsfilter/dnsfilter.go index 14c12844..2902c75a 100644 --- a/dnsfilter/dnsfilter.go +++ b/dnsfilter/dnsfilter.go @@ -14,6 +14,7 @@ import ( "net/http" "os" "strings" + "sync" "sync/atomic" "time" @@ -66,7 +67,7 @@ type Config struct { UsePlainHTTP bool `yaml:"-"` // use plain HTTP for requests to parental and safe browsing servers SafeSearchEnabled bool `yaml:"safesearch_enabled"` SafeBrowsingEnabled bool `yaml:"safebrowsing_enabled"` - ResolverAddress string // DNS server address + ResolverAddress string `yaml:"-"` // DNS server address SafeBrowsingCacheSize uint `yaml:"safebrowsing_cache_size"` // (in bytes) SafeSearchCacheSize uint `yaml:"safesearch_cache_size"` // (in bytes) @@ -75,13 +76,11 @@ type Config struct { Rewrites []RewriteEntry `yaml:"rewrites"` - // Filtering callback function - FilterHandler func(clientAddr string, settings *RequestFilteringSettings) `yaml:"-"` -} + // Called when the configuration is changed by HTTP request + ConfigModified func() `yaml:"-"` -type privateConfig struct { - parentalServer string // access via methods - safeBrowsingServer string // access via methods + // Register an HTTP handler + HTTPRegister func(string, string, func(http.ResponseWriter, *http.Request)) `yaml:"-"` } // LookupStats store stats collected during safebrowsing or parental checks @@ -99,17 +98,30 @@ type Stats struct { Safesearch LookupStats } +// Parameters to pass to filters-initializer goroutine +type filtersInitializerParams struct { + filters map[int]string +} + // Dnsfilter holds added rules and performs hostname matches against the rules type Dnsfilter struct { rulesStorage *urlfilter.RuleStorage filteringEngine *urlfilter.DNSEngine + engineLock sync.RWMutex // HTTP lookups for safebrowsing and parental client http.Client // handle for http client -- single instance as recommended by docs transport *http.Transport // handle for http transport used by http client - Config // for direct access by library users, even a = assignment - privateConfig + parentalServer string // access via methods + safeBrowsingServer string // access via methods + + Config // for direct access by library users, even a = assignment + confLock sync.RWMutex + + // Channel for passing data to filters-initializer goroutine + filtersInitializerChan chan filtersInitializerParams + filtersInitializerLock sync.Mutex } // Filter represents a filter list @@ -119,8 +131,6 @@ type Filter struct { FilePath string `yaml:"-"` // Path to a filtering rules file } -//go:generate stringer -type=Reason - // Reason holds an enum detailing why it was filtered or not filtered type Reason int @@ -153,25 +163,99 @@ const ( ReasonRewrite ) +var reasonNames = []string{ + "NotFilteredNotFound", + "NotFilteredWhiteList", + "NotFilteredError", + + "FilteredBlackList", + "FilteredSafeBrowsing", + "FilteredParental", + "FilteredInvalid", + "FilteredSafeSearch", + "FilteredBlockedService", + + "Rewrite", +} + func (r Reason) String() string { - names := []string{ - "NotFilteredNotFound", - "NotFilteredWhiteList", - "NotFilteredError", - - "FilteredBlackList", - "FilteredSafeBrowsing", - "FilteredParental", - "FilteredInvalid", - "FilteredSafeSearch", - "FilteredBlockedService", - - "Rewrite", - } - if uint(r) >= uint(len(names)) { + if uint(r) >= uint(len(reasonNames)) { return "" } - return names[r] + return reasonNames[r] +} + +// GetConfig - get configuration +func (d *Dnsfilter) GetConfig() RequestFilteringSettings { + c := RequestFilteringSettings{} + // d.confLock.RLock() + c.SafeSearchEnabled = d.Config.SafeSearchEnabled + c.SafeBrowsingEnabled = d.Config.SafeBrowsingEnabled + c.ParentalEnabled = d.Config.ParentalEnabled + // d.confLock.RUnlock() + return c +} + +// WriteDiskConfig - write configuration +func (d *Dnsfilter) WriteDiskConfig(c *Config) { + *c = d.Config +} + +// SetFilters - set new filters (synchronously or asynchronously) +// When filters are set asynchronously, the old filters continue working until the new filters are ready. +// In this case the caller must ensure that the old filter files are intact. +func (d *Dnsfilter) SetFilters(filters map[int]string, async bool) error { + if async { + params := filtersInitializerParams{ + filters: filters, + } + + d.filtersInitializerLock.Lock() // prevent multiple writers from adding more than 1 task + // remove all pending tasks + stop := false + for !stop { + select { + case <-d.filtersInitializerChan: + // + default: + stop = true + } + } + + d.filtersInitializerChan <- params + d.filtersInitializerLock.Unlock() + return nil + } + + err := d.initFiltering(filters) + if err != nil { + log.Error("Can't initialize filtering subsystem: %s", err) + return err + } + + return nil +} + +// Starts initializing new filters by signal from channel +func (d *Dnsfilter) filtersInitializer() { + for { + params := <-d.filtersInitializerChan + err := d.initFiltering(params.filters) + if err != nil { + log.Error("Can't initialize filtering subsystem: %s", err) + continue + } + } +} + +// Close - close the object +func (d *Dnsfilter) Close() { + if d != nil && d.transport != nil { + d.transport.CloseIdleConnections() + } + if d.rulesStorage != nil { + d.rulesStorage.Close() + } } type dnsFilterContext struct { @@ -294,6 +378,9 @@ func (d *Dnsfilter) CheckHost(host string, qtype uint16, setts *RequestFiltering func (d *Dnsfilter) processRewrites(host string, qtype uint16) Result { var res Result + d.confLock.RLock() + defer d.confLock.RUnlock() + for _, r := range d.Rewrites { if r.Domain != host { continue @@ -704,17 +791,28 @@ func (d *Dnsfilter) initFiltering(filters map[int]string) error { listArray = append(listArray, list) } - var err error - d.rulesStorage, err = urlfilter.NewRuleStorage(listArray) + rulesStorage, err := urlfilter.NewRuleStorage(listArray) if err != nil { return fmt.Errorf("urlfilter.NewRuleStorage(): %s", err) } - d.filteringEngine = urlfilter.NewDNSEngine(d.rulesStorage) + filteringEngine := urlfilter.NewDNSEngine(rulesStorage) + + d.engineLock.Lock() + if d.rulesStorage != nil { + d.rulesStorage.Close() + } + d.rulesStorage = rulesStorage + d.filteringEngine = filteringEngine + d.engineLock.Unlock() + log.Debug("initialized filtering engine") + return nil } // matchHost is a low-level way to check only if hostname is filtered by rules, skipping expensive safebrowsing and parental lookups func (d *Dnsfilter) matchHost(host string, qtype uint16) (Result, error) { + d.engineLock.RLock() + defer d.engineLock.RUnlock() if d.filteringEngine == nil { return Result{}, nil } @@ -926,27 +1024,21 @@ func New(c *Config, filters map[int]string) *Dnsfilter { err := d.initFiltering(filters) if err != nil { log.Error("Can't initialize filtering subsystem: %s", err) - d.Destroy() + d.Close() return nil } } + d.filtersInitializerChan = make(chan filtersInitializerParams, 1) + go d.filtersInitializer() + + if d.Config.HTTPRegister != nil { // for tests + d.registerSecurityHandlers() + d.registerRewritesHandlers() + } return d } -// Destroy is optional if you want to tidy up goroutines without waiting for them to die off -// right now it closes idle HTTP connections if there are any -func (d *Dnsfilter) Destroy() { - if d != nil && d.transport != nil { - d.transport.CloseIdleConnections() - } - - if d.rulesStorage != nil { - d.rulesStorage.Close() - d.rulesStorage = nil - } -} - // // config manipulation helpers // diff --git a/dnsfilter/dnsfilter_test.go b/dnsfilter/dnsfilter_test.go index 4c574b57..37255b78 100644 --- a/dnsfilter/dnsfilter_test.go +++ b/dnsfilter/dnsfilter_test.go @@ -108,7 +108,7 @@ func TestEtcHostsMatching(t *testing.T) { filters := make(map[int]string) filters[0] = text d := NewForTest(nil, filters) - defer d.Destroy() + defer d.Close() d.checkMatchIP(t, "google.com", addr, dns.TypeA) d.checkMatchIP(t, "www.google.com", addr, dns.TypeA) @@ -133,7 +133,7 @@ func TestSafeBrowsing(t *testing.T) { for _, tc := range testCases { t.Run(fmt.Sprintf("%s in %s", tc, _Func()), func(t *testing.T) { d := NewForTest(&Config{SafeBrowsingEnabled: true}, nil) - defer d.Destroy() + defer d.Close() gctx.stats.Safebrowsing.Requests = 0 d.checkMatch(t, "wmconvirus.narod.ru") d.checkMatch(t, "wmconvirus.narod.ru") @@ -158,7 +158,7 @@ func TestSafeBrowsing(t *testing.T) { func TestParallelSB(t *testing.T) { d := NewForTest(&Config{SafeBrowsingEnabled: true}, nil) - defer d.Destroy() + defer d.Close() t.Run("group", func(t *testing.T) { for i := 0; i < 100; i++ { t.Run(fmt.Sprintf("aaa%d", i), func(t *testing.T) { @@ -175,7 +175,7 @@ func TestParallelSB(t *testing.T) { // the only way to verify that custom server option is working is to point it at a server that does serve safebrowsing func TestSafeBrowsingCustomServerFail(t *testing.T) { d := NewForTest(&Config{SafeBrowsingEnabled: true}, nil) - defer d.Destroy() + defer d.Close() ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // w.Write("Hello, client") fmt.Fprintln(w, "Hello, client") @@ -192,14 +192,14 @@ func TestSafeBrowsingCustomServerFail(t *testing.T) { func TestSafeSearch(t *testing.T) { d := NewForTest(nil, nil) - defer d.Destroy() + defer d.Close() _, ok := d.SafeSearchDomain("www.google.com") if ok { t.Errorf("Expected safesearch to error when disabled") } d = NewForTest(&Config{SafeSearchEnabled: true}, nil) - defer d.Destroy() + defer d.Close() val, ok := d.SafeSearchDomain("www.google.com") if !ok { t.Errorf("Expected safesearch to find result for www.google.com") @@ -211,7 +211,7 @@ func TestSafeSearch(t *testing.T) { func TestCheckHostSafeSearchYandex(t *testing.T) { d := NewForTest(&Config{SafeSearchEnabled: true}, nil) - defer d.Destroy() + defer d.Close() // Slice of yandex domains yandex := []string{"yAndeX.ru", "YANdex.COM", "yandex.ua", "yandex.by", "yandex.kz", "www.yandex.com"} @@ -231,7 +231,7 @@ func TestCheckHostSafeSearchYandex(t *testing.T) { func TestCheckHostSafeSearchGoogle(t *testing.T) { d := NewForTest(&Config{SafeSearchEnabled: true}, nil) - defer d.Destroy() + defer d.Close() // Slice of google domains googleDomains := []string{"www.google.com", "www.google.im", "www.google.co.in", "www.google.iq", "www.google.is", "www.google.it", "www.google.je"} @@ -251,7 +251,7 @@ func TestCheckHostSafeSearchGoogle(t *testing.T) { func TestSafeSearchCacheYandex(t *testing.T) { d := NewForTest(nil, nil) - defer d.Destroy() + defer d.Close() domain := "yandex.ru" var result Result @@ -267,7 +267,7 @@ func TestSafeSearchCacheYandex(t *testing.T) { } d = NewForTest(&Config{SafeSearchEnabled: true}, nil) - defer d.Destroy() + defer d.Close() result, err = d.CheckHost(domain, dns.TypeA, &setts) if err != nil { @@ -293,7 +293,7 @@ func TestSafeSearchCacheYandex(t *testing.T) { func TestSafeSearchCacheGoogle(t *testing.T) { d := NewForTest(nil, nil) - defer d.Destroy() + defer d.Close() domain := "www.google.ru" result, err := d.CheckHost(domain, dns.TypeA, &setts) if err != nil { @@ -304,7 +304,7 @@ func TestSafeSearchCacheGoogle(t *testing.T) { } d = NewForTest(&Config{SafeSearchEnabled: true}, nil) - defer d.Destroy() + defer d.Close() // Let's lookup for safesearch domain safeDomain, ok := d.SafeSearchDomain(domain) @@ -352,7 +352,7 @@ func TestSafeSearchCacheGoogle(t *testing.T) { func TestParentalControl(t *testing.T) { d := NewForTest(&Config{ParentalEnabled: true}, nil) - defer d.Destroy() + defer d.Close() d.ParentalSensitivity = 3 d.checkMatch(t, "pornhub.com") d.checkMatch(t, "pornhub.com") @@ -435,7 +435,7 @@ func TestMatching(t *testing.T) { filters := make(map[int]string) filters[0] = test.rules d := NewForTest(nil, filters) - defer d.Destroy() + defer d.Close() ret, err := d.CheckHost(test.hostname, dns.TypeA, &setts) if err != nil { @@ -472,7 +472,7 @@ func TestClientSettings(t *testing.T) { filters := make(map[int]string) filters[0] = "||example.org^\n" d := NewForTest(&Config{ParentalEnabled: true, SafeBrowsingEnabled: false}, filters) - defer d.Destroy() + defer d.Close() d.ParentalSensitivity = 3 // no client settings: @@ -529,7 +529,7 @@ func TestClientSettings(t *testing.T) { func BenchmarkSafeBrowsing(b *testing.B) { d := NewForTest(&Config{SafeBrowsingEnabled: true}, nil) - defer d.Destroy() + defer d.Close() for n := 0; n < b.N; n++ { hostname := "wmconvirus.narod.ru" ret, err := d.CheckHost(hostname, dns.TypeA, &setts) @@ -544,7 +544,7 @@ func BenchmarkSafeBrowsing(b *testing.B) { func BenchmarkSafeBrowsingParallel(b *testing.B) { d := NewForTest(&Config{SafeBrowsingEnabled: true}, nil) - defer d.Destroy() + defer d.Close() b.RunParallel(func(pb *testing.PB) { for pb.Next() { hostname := "wmconvirus.narod.ru" @@ -561,7 +561,7 @@ func BenchmarkSafeBrowsingParallel(b *testing.B) { func BenchmarkSafeSearch(b *testing.B) { d := NewForTest(&Config{SafeSearchEnabled: true}, nil) - defer d.Destroy() + defer d.Close() for n := 0; n < b.N; n++ { val, ok := d.SafeSearchDomain("www.google.com") if !ok { @@ -575,7 +575,7 @@ func BenchmarkSafeSearch(b *testing.B) { func BenchmarkSafeSearchParallel(b *testing.B) { d := NewForTest(&Config{SafeSearchEnabled: true}, nil) - defer d.Destroy() + defer d.Close() b.RunParallel(func(pb *testing.PB) { for pb.Next() { val, ok := d.SafeSearchDomain("www.google.com") diff --git a/dnsfilter/rewrites.go b/dnsfilter/rewrites.go new file mode 100644 index 00000000..6cc18784 --- /dev/null +++ b/dnsfilter/rewrites.go @@ -0,0 +1,93 @@ +// DNS Rewrites + +package dnsfilter + +import ( + "encoding/json" + "net/http" + + "github.com/AdguardTeam/golibs/log" +) + +type rewriteEntryJSON struct { + Domain string `json:"domain"` + Answer string `json:"answer"` +} + +func (d *Dnsfilter) handleRewriteList(w http.ResponseWriter, r *http.Request) { + + arr := []*rewriteEntryJSON{} + + d.confLock.Lock() + for _, ent := range d.Config.Rewrites { + jsent := rewriteEntryJSON{ + Domain: ent.Domain, + Answer: ent.Answer, + } + arr = append(arr, &jsent) + } + d.confLock.Unlock() + + w.Header().Set("Content-Type", "application/json") + err := json.NewEncoder(w).Encode(arr) + if err != nil { + httpError(r, w, http.StatusInternalServerError, "json.Encode: %s", err) + return + } +} + +func (d *Dnsfilter) handleRewriteAdd(w http.ResponseWriter, r *http.Request) { + + jsent := rewriteEntryJSON{} + err := json.NewDecoder(r.Body).Decode(&jsent) + if err != nil { + httpError(r, w, http.StatusBadRequest, "json.Decode: %s", err) + return + } + + ent := RewriteEntry{ + Domain: jsent.Domain, + Answer: jsent.Answer, + } + d.confLock.Lock() + d.Config.Rewrites = append(d.Config.Rewrites, ent) + d.confLock.Unlock() + log.Debug("Rewrites: added element: %s -> %s [%d]", + ent.Domain, ent.Answer, len(d.Config.Rewrites)) + + d.Config.ConfigModified() +} + +func (d *Dnsfilter) handleRewriteDelete(w http.ResponseWriter, r *http.Request) { + + jsent := rewriteEntryJSON{} + err := json.NewDecoder(r.Body).Decode(&jsent) + if err != nil { + httpError(r, w, http.StatusBadRequest, "json.Decode: %s", err) + return + } + + entDel := RewriteEntry{ + Domain: jsent.Domain, + Answer: jsent.Answer, + } + arr := []RewriteEntry{} + d.confLock.Lock() + for _, ent := range d.Config.Rewrites { + if ent == entDel { + log.Debug("Rewrites: removed element: %s -> %s", ent.Domain, ent.Answer) + continue + } + arr = append(arr, ent) + } + d.Config.Rewrites = arr + d.confLock.Unlock() + + d.Config.ConfigModified() +} + +func (d *Dnsfilter) registerRewritesHandlers() { + d.Config.HTTPRegister("GET", "/control/rewrite/list", d.handleRewriteList) + d.Config.HTTPRegister("POST", "/control/rewrite/add", d.handleRewriteAdd) + d.Config.HTTPRegister("POST", "/control/rewrite/delete", d.handleRewriteDelete) +} diff --git a/dnsfilter/security.go b/dnsfilter/security.go new file mode 100644 index 00000000..c4ce32de --- /dev/null +++ b/dnsfilter/security.go @@ -0,0 +1,179 @@ +// Parental Control, Safe Browsing, Safe Search + +package dnsfilter + +import ( + "bufio" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "strconv" + "strings" + + "github.com/AdguardTeam/golibs/log" +) + +func httpError(r *http.Request, w http.ResponseWriter, code int, format string, args ...interface{}) { + text := fmt.Sprintf(format, args...) + log.Info("DNSFilter: %s %s: %s", r.Method, r.URL, text) + http.Error(w, text, code) +} + +func (d *Dnsfilter) handleSafeBrowsingEnable(w http.ResponseWriter, r *http.Request) { + d.Config.SafeBrowsingEnabled = true + d.Config.ConfigModified() +} + +func (d *Dnsfilter) handleSafeBrowsingDisable(w http.ResponseWriter, r *http.Request) { + d.Config.SafeBrowsingEnabled = false + d.Config.ConfigModified() +} + +func (d *Dnsfilter) handleSafeBrowsingStatus(w http.ResponseWriter, r *http.Request) { + data := map[string]interface{}{ + "enabled": d.Config.SafeBrowsingEnabled, + } + jsonVal, err := json.Marshal(data) + if err != nil { + httpError(r, w, http.StatusInternalServerError, "Unable to marshal status json: %s", err) + } + + w.Header().Set("Content-Type", "application/json") + _, err = w.Write(jsonVal) + if err != nil { + httpError(r, w, http.StatusInternalServerError, "Unable to write response json: %s", err) + return + } +} + +func parseParametersFromBody(r io.Reader) (map[string]string, error) { + parameters := map[string]string{} + + scanner := bufio.NewScanner(r) + for scanner.Scan() { + line := scanner.Text() + if len(line) == 0 { + // skip empty lines + continue + } + parts := strings.SplitN(line, "=", 2) + if len(parts) != 2 { + return parameters, errors.New("Got invalid request body") + } + parameters[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1]) + } + + return parameters, nil +} + +func (d *Dnsfilter) handleParentalEnable(w http.ResponseWriter, r *http.Request) { + parameters, err := parseParametersFromBody(r.Body) + if err != nil { + httpError(r, w, http.StatusBadRequest, "failed to parse parameters from body: %s", err) + return + } + + sensitivity, ok := parameters["sensitivity"] + if !ok { + http.Error(w, "Sensitivity parameter was not specified", 400) + return + } + + switch sensitivity { + case "3": + break + case "EARLY_CHILDHOOD": + sensitivity = "3" + case "10": + break + case "YOUNG": + sensitivity = "10" + case "13": + break + case "TEEN": + sensitivity = "13" + case "17": + break + case "MATURE": + sensitivity = "17" + default: + http.Error(w, "Sensitivity must be set to valid value", 400) + return + } + i, err := strconv.Atoi(sensitivity) + if err != nil { + http.Error(w, "Sensitivity must be set to valid value", 400) + return + } + d.Config.ParentalSensitivity = i + d.Config.ParentalEnabled = true + d.Config.ConfigModified() +} + +func (d *Dnsfilter) handleParentalDisable(w http.ResponseWriter, r *http.Request) { + d.Config.ParentalEnabled = false + d.Config.ConfigModified() +} + +func (d *Dnsfilter) handleParentalStatus(w http.ResponseWriter, r *http.Request) { + data := map[string]interface{}{ + "enabled": d.Config.ParentalEnabled, + } + if d.Config.ParentalEnabled { + data["sensitivity"] = d.Config.ParentalSensitivity + } + jsonVal, err := json.Marshal(data) + if err != nil { + httpError(r, w, http.StatusInternalServerError, "Unable to marshal status json: %s", err) + return + } + + w.Header().Set("Content-Type", "application/json") + _, err = w.Write(jsonVal) + if err != nil { + httpError(r, w, http.StatusInternalServerError, "Unable to write response json: %s", err) + return + } +} + +func (d *Dnsfilter) handleSafeSearchEnable(w http.ResponseWriter, r *http.Request) { + d.Config.SafeSearchEnabled = true + d.Config.ConfigModified() +} + +func (d *Dnsfilter) handleSafeSearchDisable(w http.ResponseWriter, r *http.Request) { + d.Config.SafeSearchEnabled = false + d.Config.ConfigModified() +} + +func (d *Dnsfilter) handleSafeSearchStatus(w http.ResponseWriter, r *http.Request) { + data := map[string]interface{}{ + "enabled": d.Config.SafeSearchEnabled, + } + jsonVal, err := json.Marshal(data) + if err != nil { + httpError(r, w, http.StatusInternalServerError, "Unable to marshal status json: %s", err) + return + } + + w.Header().Set("Content-Type", "application/json") + _, err = w.Write(jsonVal) + if err != nil { + httpError(r, w, http.StatusInternalServerError, "Unable to write response json: %s", err) + return + } +} + +func (d *Dnsfilter) registerSecurityHandlers() { + d.Config.HTTPRegister("POST", "/control/safebrowsing/enable", d.handleSafeBrowsingEnable) + d.Config.HTTPRegister("POST", "/control/safebrowsing/disable", d.handleSafeBrowsingDisable) + d.Config.HTTPRegister("GET", "/control/safebrowsing/status", d.handleSafeBrowsingStatus) + d.Config.HTTPRegister("POST", "/control/parental/enable", d.handleParentalEnable) + d.Config.HTTPRegister("POST", "/control/parental/disable", d.handleParentalDisable) + d.Config.HTTPRegister("GET", "/control/parental/status", d.handleParentalStatus) + d.Config.HTTPRegister("POST", "/control/safesearch/enable", d.handleSafeSearchEnable) + d.Config.HTTPRegister("POST", "/control/safesearch/disable", d.handleSafeSearchDisable) + d.Config.HTTPRegister("GET", "/control/safesearch/status", d.handleSafeSearchStatus) +} diff --git a/dnsforward/dnsforward.go b/dnsforward/dnsforward.go index d28889b3..415b1cef 100644 --- a/dnsforward/dnsforward.go +++ b/dnsforward/dnsforward.go @@ -3,7 +3,6 @@ package dnsforward import ( "crypto/tls" "errors" - "fmt" "net" "net/http" "strings" @@ -44,12 +43,6 @@ type Server struct { queryLog querylog.QueryLog // Query log instance stats stats.Stats - // How many times the server was started - // While creating a dnsfilter object, - // we use this value to set s.dnsFilter property only with the most recent settings. - startCounter uint32 - dnsfilterCreatorChan chan dnsfilterCreatorParams - AllowedClients map[string]bool // IP addresses of whitelist clients DisallowedClients map[string]bool // IP addresses of clients that should be blocked AllowedClientsIPNet []net.IPNet // CIDRs of whitelist clients @@ -60,15 +53,11 @@ type Server struct { conf ServerConfig } -type dnsfilterCreatorParams struct { - conf dnsfilter.Config - filters map[int]string -} - // NewServer creates a new instance of the dnsforward.Server // Note: this function must be called only once -func NewServer(stats stats.Stats, queryLog querylog.QueryLog) *Server { +func NewServer(dnsFilter *dnsfilter.Dnsfilter, stats stats.Stats, queryLog querylog.QueryLog) *Server { s := &Server{} + s.dnsFilter = dnsFilter s.stats = stats s.queryLog = queryLog return s @@ -76,6 +65,7 @@ func NewServer(stats stats.Stats, queryLog querylog.QueryLog) *Server { func (s *Server) Close() { s.Lock() + s.dnsFilter = nil s.stats = nil s.queryLog = nil s.Unlock() @@ -84,11 +74,8 @@ func (s *Server) Close() { // FilteringConfig represents the DNS filtering configuration of AdGuard Home // The zero FilteringConfig is empty and ready for use. type FilteringConfig struct { - // Create dnsfilter asynchronously. - // Requests won't be filtered until dnsfilter is created. - // If "restart" command is received while we're creating an old dnsfilter object, - // we delay creation of the new object until the old one is created. - AsyncStartup bool `yaml:"-"` + // Filtering callback function + FilterHandler func(clientAddr string, settings *dnsfilter.RequestFilteringSettings) `yaml:"-"` ProtectionEnabled bool `yaml:"protection_enabled"` // whether or not use any of dnsfilter features FilteringEnabled bool `yaml:"filtering_enabled"` // whether or not use filter lists @@ -116,8 +103,9 @@ type FilteringConfig struct { // Per-client settings can override this configuration. BlockedServices []string `yaml:"blocked_services"` - CacheSize uint `yaml:"cache_size"` // DNS cache size (in bytes) - dnsfilter.Config `yaml:",inline"` + CacheSize uint `yaml:"cache_size"` // DNS cache size (in bytes) + + DnsfilterConf dnsfilter.Config `yaml:",inline"` } // TLSConfig is the TLS configuration for HTTPS, DNS-over-HTTPS, and DNS-over-TLS @@ -140,7 +128,6 @@ type ServerConfig struct { TCPListenAddr *net.TCPAddr // TCP listen address Upstreams []upstream.Upstream // Configured upstreams DomainsReservedUpstreams map[string][]upstream.Upstream // Map of domains and lists of configured upstreams - Filters []dnsfilter.Filter // A list of filters to use OnDNSRequest func(d *proxy.DNSContext) FilteringConfig @@ -204,13 +191,18 @@ func processIPCIDRArray(dst *map[string]bool, dstIPNet *[]net.IPNet, src []strin // startInternal starts without locking func (s *Server) startInternal(config *ServerConfig) error { - if s.dnsFilter != nil || s.dnsProxy != nil { + if s.dnsProxy != nil { return errors.New("DNS server is already started") } - err := s.initDNSFilter(config) - if err != nil { - return err + if config != nil { + s.conf = *config + } + if len(s.conf.ParentalBlockHost) == 0 { + s.conf.ParentalBlockHost = parentalBlockHost + } + if len(s.conf.SafeBrowsingBlockHost) == 0 { + s.conf.SafeBrowsingBlockHost = safeBrowsingBlockHost } proxyConfig := proxy.Config{ @@ -228,7 +220,7 @@ func (s *Server) startInternal(config *ServerConfig) error { AllServers: s.conf.AllServers, } - err = processIPCIDRArray(&s.AllowedClients, &s.AllowedClientsIPNet, s.conf.AllowedClients) + err := processIPCIDRArray(&s.AllowedClients, &s.AllowedClientsIPNet, s.conf.AllowedClients) if err != nil { return err } @@ -269,97 +261,6 @@ func (s *Server) startInternal(config *ServerConfig) error { return s.dnsProxy.Start() } -// Initializes the DNS filter -func (s *Server) initDNSFilter(config *ServerConfig) error { - if config != nil { - s.conf = *config - } - - var filters map[int]string - filters = nil - if s.conf.FilteringEnabled { - filters = make(map[int]string) - for _, f := range s.conf.Filters { - if f.ID == 0 { - filters[int(f.ID)] = string(f.Data) - } else { - filters[int(f.ID)] = f.FilePath - } - } - } - - if len(s.conf.ParentalBlockHost) == 0 { - s.conf.ParentalBlockHost = parentalBlockHost - } - if len(s.conf.SafeBrowsingBlockHost) == 0 { - s.conf.SafeBrowsingBlockHost = safeBrowsingBlockHost - } - - if s.conf.AsyncStartup { - params := dnsfilterCreatorParams{ - conf: s.conf.Config, - filters: filters, - } - s.startCounter++ - if s.startCounter == 1 { - s.dnsfilterCreatorChan = make(chan dnsfilterCreatorParams, 1) - go s.dnsfilterCreator() - } - - // remove all pending tasks - stop := false - for !stop { - select { - case <-s.dnsfilterCreatorChan: - // - default: - stop = true - } - } - - s.dnsfilterCreatorChan <- params - } else { - log.Debug("creating dnsfilter...") - f := dnsfilter.New(&s.conf.Config, filters) - if f == nil { - return fmt.Errorf("could not initialize dnsfilter") - } - log.Debug("created dnsfilter") - s.dnsFilter = f - } - return nil -} - -func (s *Server) dnsfilterCreator() { - for { - params := <-s.dnsfilterCreatorChan - - s.Lock() - counter := s.startCounter - s.Unlock() - - log.Debug("creating dnsfilter...") - f := dnsfilter.New(¶ms.conf, params.filters) - if f == nil { - log.Error("could not initialize dnsfilter") - continue - } - - set := false - s.Lock() - if counter == s.startCounter { - s.dnsFilter = f - set = true - } - s.Unlock() - if set { - log.Debug("created and activated dnsfilter") - } else { - log.Debug("created dnsfilter") - } - } -} - // Stop stops the DNS server func (s *Server) Stop() error { s.Lock() @@ -377,11 +278,6 @@ func (s *Server) stopInternal() error { } } - if s.dnsFilter != nil { - s.dnsFilter.Destroy() - s.dnsFilter = nil - } - return nil } @@ -607,33 +503,24 @@ func (s *Server) updateStats(d *proxy.DNSContext, elapsed time.Duration, res dns // filterDNSRequest applies the dnsFilter and sets d.Res if the request was filtered func (s *Server) filterDNSRequest(d *proxy.DNSContext) (*dnsfilter.Result, error) { - var res dnsfilter.Result - req := d.Req - host := strings.TrimSuffix(req.Question[0].Name, ".") - - dnsFilter := s.dnsFilter - if !s.conf.ProtectionEnabled || s.dnsFilter == nil { return &dnsfilter.Result{}, nil } - var err error - clientAddr := "" if d.Addr != nil { clientAddr, _, _ = net.SplitHostPort(d.Addr.String()) } - var setts dnsfilter.RequestFilteringSettings + setts := s.dnsFilter.GetConfig() setts.FilteringEnabled = true - setts.SafeSearchEnabled = s.conf.SafeSearchEnabled - setts.SafeBrowsingEnabled = s.conf.SafeBrowsingEnabled - setts.ParentalEnabled = s.conf.ParentalEnabled if s.conf.FilterHandler != nil { s.conf.FilterHandler(clientAddr, &setts) } - res, err = dnsFilter.CheckHost(host, d.Req.Question[0].Qtype, &setts) + req := d.Req + host := strings.TrimSuffix(req.Question[0].Name, ".") + res, err := s.dnsFilter.CheckHost(host, d.Req.Question[0].Qtype, &setts) if err != nil { // Return immediately if there's an error return nil, errorx.Decorate(err, "dnsfilter failed to check host '%s'", host) diff --git a/dnsforward/dnsforward_test.go b/dnsforward/dnsforward_test.go index 94e72d67..2568ef7b 100644 --- a/dnsforward/dnsforward_test.go +++ b/dnsforward/dnsforward_test.go @@ -148,7 +148,6 @@ func TestServerRace(t *testing.T) { func TestSafeSearch(t *testing.T) { s := createTestServer(t) - s.conf.SafeSearchEnabled = true err := s.Start(nil) if err != nil { t.Fatalf("Failed to start server: %s", err) @@ -376,23 +375,24 @@ func TestBlockedBySafeBrowsing(t *testing.T) { } func createTestServer(t *testing.T) *Server { - s := NewServer(nil, nil) + rules := "||nxdomain.example.org^\n||null.example.org^\n127.0.0.1 host.example.org\n" + filters := map[int]string{} + filters[0] = rules + c := dnsfilter.Config{} + c.SafeBrowsingEnabled = true + c.SafeBrowsingCacheSize = 1000 + c.SafeSearchEnabled = true + c.SafeSearchCacheSize = 1000 + c.ParentalCacheSize = 1000 + c.CacheTime = 30 + + f := dnsfilter.New(&c, filters) + s := NewServer(f, nil, nil) s.conf.UDPListenAddr = &net.UDPAddr{Port: 0} s.conf.TCPListenAddr = &net.TCPAddr{Port: 0} s.conf.FilteringConfig.FilteringEnabled = true s.conf.FilteringConfig.ProtectionEnabled = true - s.conf.FilteringConfig.SafeBrowsingEnabled = true - s.conf.Filters = make([]dnsfilter.Filter, 0) - - s.conf.SafeBrowsingCacheSize = 1000 - s.conf.SafeSearchCacheSize = 1000 - s.conf.ParentalCacheSize = 1000 - s.conf.CacheTime = 30 - - rules := "||nxdomain.example.org^\n||null.example.org^\n127.0.0.1 host.example.org\n" - filter := dnsfilter.Filter{ID: 0, Data: []byte(rules)} - s.conf.Filters = append(s.conf.Filters, filter) return s } diff --git a/home/config.go b/home/config.go index 726eda90..fcd5e3dc 100644 --- a/home/config.go +++ b/home/config.go @@ -10,6 +10,7 @@ import ( "time" "github.com/AdguardTeam/AdGuardHome/dhcpd" + "github.com/AdguardTeam/AdGuardHome/dnsfilter" "github.com/AdguardTeam/AdGuardHome/dnsforward" "github.com/AdguardTeam/AdGuardHome/querylog" "github.com/AdguardTeam/AdGuardHome/stats" @@ -71,7 +72,6 @@ type configuration struct { client *http.Client stats stats.Stats // statistics module queryLog querylog.QueryLog // query log module - filteringStarted bool // TRUE if filtering module is started auth *Auth // HTTP authentication module // cached version.json to avoid hammering github.io for each page reload @@ -79,6 +79,7 @@ type configuration struct { versionCheckLastTime time.Time dnsctx dnsContext + dnsFilter *dnsfilter.Dnsfilter dnsServer *dnsforward.Server dhcpServer dhcpd.Server httpServer *http.Server @@ -217,10 +218,10 @@ func initConfig() { } config.DNS.CacheSize = 4 * 1024 * 1024 - config.DNS.SafeBrowsingCacheSize = 1 * 1024 * 1024 - config.DNS.SafeSearchCacheSize = 1 * 1024 * 1024 - config.DNS.ParentalCacheSize = 1 * 1024 * 1024 - config.DNS.CacheTime = 30 + config.DNS.DnsfilterConf.SafeBrowsingCacheSize = 1 * 1024 * 1024 + config.DNS.DnsfilterConf.SafeSearchCacheSize = 1 * 1024 * 1024 + config.DNS.DnsfilterConf.ParentalCacheSize = 1 * 1024 * 1024 + config.DNS.DnsfilterConf.CacheTime = 30 config.Filters = defaultFilters() } @@ -367,6 +368,12 @@ func (c *configuration) write() error { config.DNS.QueryLogInterval = dc.Interval } + if config.dnsFilter != nil { + c := dnsfilter.Config{} + config.dnsFilter.WriteDiskConfig(&c) + config.DNS.DnsfilterConf = c + } + configFile := config.getConfigFilename() log.Debug("Writing YAML file: %s", configFile) yamlText, err := yaml.Marshal(&config) diff --git a/home/control.go b/home/control.go index d18c2a85..1f2eb1fa 100644 --- a/home/control.go +++ b/home/control.go @@ -377,142 +377,6 @@ func checkDNS(input string, bootstrap []string) error { return nil } -// ------------ -// safebrowsing -// ------------ - -func handleSafeBrowsingEnable(w http.ResponseWriter, r *http.Request) { - config.DNS.SafeBrowsingEnabled = true - httpUpdateConfigReloadDNSReturnOK(w, r) -} - -func handleSafeBrowsingDisable(w http.ResponseWriter, r *http.Request) { - config.DNS.SafeBrowsingEnabled = false - httpUpdateConfigReloadDNSReturnOK(w, r) -} - -func handleSafeBrowsingStatus(w http.ResponseWriter, r *http.Request) { - data := map[string]interface{}{ - "enabled": config.DNS.SafeBrowsingEnabled, - } - jsonVal, err := json.Marshal(data) - if err != nil { - httpError(w, http.StatusInternalServerError, "Unable to marshal status json: %s", err) - } - - w.Header().Set("Content-Type", "application/json") - _, err = w.Write(jsonVal) - if err != nil { - httpError(w, http.StatusInternalServerError, "Unable to write response json: %s", err) - return - } -} - -// -------- -// parental -// -------- -func handleParentalEnable(w http.ResponseWriter, r *http.Request) { - parameters, err := parseParametersFromBody(r.Body) - if err != nil { - httpError(w, http.StatusBadRequest, "failed to parse parameters from body: %s", err) - return - } - - sensitivity, ok := parameters["sensitivity"] - if !ok { - http.Error(w, "Sensitivity parameter was not specified", 400) - return - } - - switch sensitivity { - case "3": - break - case "EARLY_CHILDHOOD": - sensitivity = "3" - case "10": - break - case "YOUNG": - sensitivity = "10" - case "13": - break - case "TEEN": - sensitivity = "13" - case "17": - break - case "MATURE": - sensitivity = "17" - default: - http.Error(w, "Sensitivity must be set to valid value", 400) - return - } - i, err := strconv.Atoi(sensitivity) - if err != nil { - http.Error(w, "Sensitivity must be set to valid value", 400) - return - } - config.DNS.ParentalSensitivity = i - config.DNS.ParentalEnabled = true - httpUpdateConfigReloadDNSReturnOK(w, r) -} - -func handleParentalDisable(w http.ResponseWriter, r *http.Request) { - config.DNS.ParentalEnabled = false - httpUpdateConfigReloadDNSReturnOK(w, r) -} - -func handleParentalStatus(w http.ResponseWriter, r *http.Request) { - data := map[string]interface{}{ - "enabled": config.DNS.ParentalEnabled, - } - if config.DNS.ParentalEnabled { - data["sensitivity"] = config.DNS.ParentalSensitivity - } - jsonVal, err := json.Marshal(data) - if err != nil { - httpError(w, http.StatusInternalServerError, "Unable to marshal status json: %s", err) - return - } - - w.Header().Set("Content-Type", "application/json") - _, err = w.Write(jsonVal) - if err != nil { - httpError(w, http.StatusInternalServerError, "Unable to write response json: %s", err) - return - } -} - -// ------------ -// safebrowsing -// ------------ - -func handleSafeSearchEnable(w http.ResponseWriter, r *http.Request) { - config.DNS.SafeSearchEnabled = true - httpUpdateConfigReloadDNSReturnOK(w, r) -} - -func handleSafeSearchDisable(w http.ResponseWriter, r *http.Request) { - config.DNS.SafeSearchEnabled = false - httpUpdateConfigReloadDNSReturnOK(w, r) -} - -func handleSafeSearchStatus(w http.ResponseWriter, r *http.Request) { - data := map[string]interface{}{ - "enabled": config.DNS.SafeSearchEnabled, - } - jsonVal, err := json.Marshal(data) - if err != nil { - httpError(w, http.StatusInternalServerError, "Unable to marshal status json: %s", err) - return - } - - w.Header().Set("Content-Type", "application/json") - _, err = w.Write(jsonVal) - if err != nil { - httpError(w, http.StatusInternalServerError, "Unable to write response json: %s", err) - return - } -} - // -------------- // DNS-over-HTTPS // -------------- @@ -543,15 +407,6 @@ func registerControlHandlers() { httpRegister(http.MethodGet, "/control/i18n/current_language", handleI18nCurrentLanguage) http.HandleFunc("/control/version.json", postInstall(optionalAuth(handleGetVersionJSON))) httpRegister(http.MethodPost, "/control/update", handleUpdate) - httpRegister(http.MethodPost, "/control/safebrowsing/enable", handleSafeBrowsingEnable) - httpRegister(http.MethodPost, "/control/safebrowsing/disable", handleSafeBrowsingDisable) - httpRegister(http.MethodGet, "/control/safebrowsing/status", handleSafeBrowsingStatus) - httpRegister(http.MethodPost, "/control/parental/enable", handleParentalEnable) - httpRegister(http.MethodPost, "/control/parental/disable", handleParentalDisable) - httpRegister(http.MethodGet, "/control/parental/status", handleParentalStatus) - httpRegister(http.MethodPost, "/control/safesearch/enable", handleSafeSearchEnable) - httpRegister(http.MethodPost, "/control/safesearch/disable", handleSafeSearchDisable) - httpRegister(http.MethodGet, "/control/safesearch/status", handleSafeSearchStatus) httpRegister(http.MethodGet, "/control/dhcp/status", handleDHCPStatus) httpRegister(http.MethodGet, "/control/dhcp/interfaces", handleDHCPInterfaces) httpRegister(http.MethodPost, "/control/dhcp/set_config", handleDHCPSetConfig) @@ -565,7 +420,6 @@ func registerControlHandlers() { RegisterFilteringHandlers() RegisterTLSHandlers() RegisterClientsHandlers() - registerRewritesHandlers() RegisterBlockedServicesHandlers() RegisterAuthHandlers() diff --git a/home/control_filtering.go b/home/control_filtering.go index 03699953..453e0ec4 100644 --- a/home/control_filtering.go +++ b/home/control_filtering.go @@ -86,17 +86,8 @@ func handleFilteringAddURL(w http.ResponseWriter, r *http.Request) { return } - err = writeAllConfigs() - if err != nil { - httpError(w, http.StatusInternalServerError, "Couldn't write config file: %s", err) - return - } - - err = reconfigureDNSServer() - if err != nil { - httpError(w, http.StatusInternalServerError, "Couldn't reconfigure the DNS server: %s", err) - return - } + onConfigModified() + enableFilters(true) _, err = fmt.Fprintf(w, "OK %d rules\n", f.RulesCount) if err != nil { @@ -121,32 +112,28 @@ func handleFilteringRemoveURL(w http.ResponseWriter, r *http.Request) { return } - // Stop DNS server: - // we close urlfilter object which in turn closes file descriptors to filter files. - // Otherwise, Windows won't allow us to remove the file which is being currently used. - _ = config.dnsServer.Stop() - // go through each element and delete if url matches config.Lock() - newFilters := config.Filters[:0] + newFilters := []filter{} for _, filter := range config.Filters { if filter.URL != req.URL { newFilters = append(newFilters, filter) } else { - // Remove the filter file - err := os.Remove(filter.Path()) - if err != nil && !os.IsNotExist(err) { - config.Unlock() - httpError(w, http.StatusInternalServerError, "Couldn't remove the filter file: %s", err) - return + err := os.Rename(filter.Path(), filter.Path()+".old") + if err != nil { + log.Error("os.Rename: %s: %s", filter.Path(), err) } - log.Debug("os.Remove(%s)", filter.Path()) } } // Update the configuration after removing filter files config.Filters = newFilters config.Unlock() - httpUpdateConfigReloadDNSReturnOK(w, r) + + onConfigModified() + enableFilters(true) + + // Note: the old files "filter.txt.old" aren't deleted - it's not really necessary, + // but will require the additional code to run after enableFilters() is finished: i.e. complicated } type filterURLJSON struct { @@ -173,7 +160,8 @@ func handleFilteringSetURL(w http.ResponseWriter, r *http.Request) { return } - httpUpdateConfigReloadDNSReturnOK(w, r) + onConfigModified() + enableFilters(true) } func handleFilteringSetRules(w http.ResponseWriter, r *http.Request) { @@ -184,12 +172,13 @@ func handleFilteringSetRules(w http.ResponseWriter, r *http.Request) { } config.UserRules = strings.Split(string(body), "\n") - httpUpdateConfigReloadDNSReturnOK(w, r) + _ = writeAllConfigs() + enableFilters(true) } func handleFilteringRefresh(w http.ResponseWriter, r *http.Request) { - updated := refreshFiltersIfNecessary(true) - fmt.Fprintf(w, "OK %d filters updated\n", updated) + beginRefreshFilters() + fmt.Fprintf(w, "OK 0 filters updated\n") } type filterJSON struct { @@ -260,9 +249,8 @@ func handleFilteringConfig(w http.ResponseWriter, r *http.Request) { config.DNS.FilteringEnabled = req.Enabled config.DNS.FiltersUpdateIntervalHours = req.Interval - httpUpdateConfigReloadDNSReturnOK(w, r) - - returnOK(w) + onConfigModified() + enableFilters(true) } // RegisterFilteringHandlers - register handlers diff --git a/home/dns.go b/home/dns.go index 64c9efe4..8e755e06 100644 --- a/home/dns.go +++ b/home/dns.go @@ -55,7 +55,18 @@ func initDNSServer() { HTTPRegister: httpRegister, } config.queryLog = querylog.New(conf) - config.dnsServer = dnsforward.NewServer(config.stats, config.queryLog) + + filterConf := config.DNS.DnsfilterConf + bindhost := config.DNS.BindHost + if config.DNS.BindHost == "0.0.0.0" { + bindhost = "127.0.0.1" + } + filterConf.ResolverAddress = fmt.Sprintf("%s:%d", bindhost, config.DNS.Port) + filterConf.ConfigModified = onConfigModified + filterConf.HTTPRegister = httpRegister + config.dnsFilter = dnsfilter.New(&filterConf, nil) + + config.dnsServer = dnsforward.NewServer(config.dnsFilter, config.stats, config.queryLog) sessFilename := filepath.Join(baseDir, "sessions.db") config.auth = InitAuth(sessFilename, config.Users) @@ -159,34 +170,11 @@ func onDNSRequest(d *proxy.DNSContext) { } func generateServerConfig() (dnsforward.ServerConfig, error) { - filters := []dnsfilter.Filter{} - userFilter := userFilter() - filters = append(filters, dnsfilter.Filter{ - ID: userFilter.ID, - Data: userFilter.Data, - }) - for _, filter := range config.Filters { - if !filter.Enabled { - continue - } - filters = append(filters, dnsfilter.Filter{ - ID: filter.ID, - FilePath: filter.Path(), - }) - } - newconfig := dnsforward.ServerConfig{ UDPListenAddr: &net.UDPAddr{IP: net.ParseIP(config.DNS.BindHost), Port: config.DNS.Port}, TCPListenAddr: &net.TCPAddr{IP: net.ParseIP(config.DNS.BindHost), Port: config.DNS.Port}, FilteringConfig: config.DNS.FilteringConfig, - Filters: filters, } - newconfig.AsyncStartup = true - bindhost := config.DNS.BindHost - if config.DNS.BindHost == "0.0.0.0" { - bindhost = "127.0.0.1" - } - newconfig.ResolverAddress = fmt.Sprintf("%s:%d", bindhost, config.DNS.Port) if config.TLS.Enabled { newconfig.TLSConfig = config.TLS.TLSConfig @@ -242,20 +230,18 @@ func startDNSServer() error { return fmt.Errorf("unable to start forwarding DNS server: Already running") } + enableFilters(false) + newconfig, err := generateServerConfig() if err != nil { return errorx.Decorate(err, "Couldn't start forwarding DNS server") } + err = config.dnsServer.Start(&newconfig) if err != nil { return errorx.Decorate(err, "Couldn't start forwarding DNS server") } - if !config.filteringStarted { - config.filteringStarted = true - startRefreshFilters() - } - return nil } @@ -285,6 +271,9 @@ func stopDNSServer() error { // DNS forward module must be closed BEFORE stats or queryLog because it depends on them config.dnsServer.Close() + config.dnsFilter.Close() + config.dnsFilter = nil + config.stats.Close() config.stats = nil diff --git a/home/dns_rewrites.go b/home/dns_rewrites.go deleted file mode 100644 index e58c50d7..00000000 --- a/home/dns_rewrites.go +++ /dev/null @@ -1,104 +0,0 @@ -package home - -import ( - "encoding/json" - "net/http" - - "github.com/AdguardTeam/AdGuardHome/dnsfilter" - "github.com/AdguardTeam/golibs/log" -) - -type rewriteEntryJSON struct { - Domain string `json:"domain"` - Answer string `json:"answer"` -} - -func handleRewriteList(w http.ResponseWriter, r *http.Request) { - - arr := []*rewriteEntryJSON{} - - config.RLock() - for _, ent := range config.DNS.Rewrites { - jsent := rewriteEntryJSON{ - Domain: ent.Domain, - Answer: ent.Answer, - } - arr = append(arr, &jsent) - } - config.RUnlock() - - w.Header().Set("Content-Type", "application/json") - err := json.NewEncoder(w).Encode(arr) - if err != nil { - httpError(w, http.StatusInternalServerError, "json.Encode: %s", err) - return - } -} - -func handleRewriteAdd(w http.ResponseWriter, r *http.Request) { - - jsent := rewriteEntryJSON{} - err := json.NewDecoder(r.Body).Decode(&jsent) - if err != nil { - httpError(w, http.StatusBadRequest, "json.Decode: %s", err) - return - } - - ent := dnsfilter.RewriteEntry{ - Domain: jsent.Domain, - Answer: jsent.Answer, - } - config.Lock() - config.DNS.Rewrites = append(config.DNS.Rewrites, ent) - config.Unlock() - log.Debug("Rewrites: added element: %s -> %s [%d]", - ent.Domain, ent.Answer, len(config.DNS.Rewrites)) - - err = writeAllConfigsAndReloadDNS() - if err != nil { - httpError(w, http.StatusBadRequest, "%s", err) - return - } - - returnOK(w) -} - -func handleRewriteDelete(w http.ResponseWriter, r *http.Request) { - - jsent := rewriteEntryJSON{} - err := json.NewDecoder(r.Body).Decode(&jsent) - if err != nil { - httpError(w, http.StatusBadRequest, "json.Decode: %s", err) - return - } - - entDel := dnsfilter.RewriteEntry{ - Domain: jsent.Domain, - Answer: jsent.Answer, - } - arr := []dnsfilter.RewriteEntry{} - config.Lock() - for _, ent := range config.DNS.Rewrites { - if ent == entDel { - log.Debug("Rewrites: removed element: %s -> %s", ent.Domain, ent.Answer) - continue - } - arr = append(arr, ent) - } - config.DNS.Rewrites = arr - config.Unlock() - - err = writeAllConfigsAndReloadDNS() - if err != nil { - httpError(w, http.StatusBadRequest, "%s", err) - return - } - - returnOK(w) -} - -func registerRewritesHandlers() { - httpRegister(http.MethodGet, "/control/rewrite/list", handleRewriteList) - httpRegister(http.MethodPost, "/control/rewrite/add", handleRewriteAdd) - httpRegister(http.MethodPost, "/control/rewrite/delete", handleRewriteDelete) -} diff --git a/home/filter.go b/home/filter.go index be60e2a3..38425301 100644 --- a/home/filter.go +++ b/home/filter.go @@ -19,18 +19,13 @@ import ( var ( nextFilterID = time.Now().Unix() // semi-stable way to generate an unique ID filterTitleRegexp = regexp.MustCompile(`^! Title: +(.*)$`) + forceRefresh bool ) func initFiltering() { loadFilters() deduplicateFilters() updateUniqueFilterID(config.Filters) -} - -func startRefreshFilters() { - go func() { - _ = refreshFiltersIfNecessary(false) - }() go periodicallyRefreshFilters() } @@ -180,32 +175,43 @@ func assignUniqueFilterID() int64 { // Sets up a timer that will be checking for filters updates periodically func periodicallyRefreshFilters() { + nextRefresh := int64(0) for { - time.Sleep(1 * time.Hour) - if config.DNS.FiltersUpdateIntervalHours == 0 { - continue + if forceRefresh { + _ = refreshFiltersIfNecessary(true) + forceRefresh = false } - refreshFiltersIfNecessary(false) + if config.DNS.FiltersUpdateIntervalHours != 0 && nextRefresh <= time.Now().Unix() { + _ = refreshFiltersIfNecessary(false) + nextRefresh = time.Now().Add(1 * time.Hour).Unix() + } + time.Sleep(1 * time.Second) } } +// Schedule the procedure to refresh filters +func beginRefreshFilters() { + forceRefresh = true + log.Debug("Filters: schedule update") +} + // Checks filters updates if necessary // If force is true, it ignores the filter.LastUpdated field value // // Algorithm: // . Get the list of filters to be updated // . For each filter run the download and checksum check operation -// . Stop server // . For each filter: // . If filter data hasn't changed, just set new update time on file -// . If filter data has changed, save it on disk -// . Apply changes to the current configuration -// . Start server +// . If filter data has changed: rename the old file, store the new data on disk +// . Pass new filters to dnsfilter object func refreshFiltersIfNecessary(force bool) int { var updateFilters []filter var updateFlags []bool // 'true' if filter data has changed + log.Debug("Filters: updating...") + now := time.Now() config.RLock() for i := range config.Filters { @@ -229,7 +235,6 @@ func refreshFiltersIfNecessary(force bool) int { } config.RUnlock() - updateCount := 0 for i := range updateFilters { uf := &updateFilters[i] updated, err := uf.update() @@ -239,24 +244,14 @@ func refreshFiltersIfNecessary(force bool) int { continue } uf.LastUpdated = now - if updated { - updateCount++ - } } - stopped := false - if updateCount != 0 { - _ = config.dnsServer.Stop() - stopped = true - } - - updateCount = 0 + updateCount := 0 for i := range updateFilters { uf := &updateFilters[i] updated := updateFlags[i] if updated { - // Saving it to the filters dir now - err := uf.save() + err := uf.saveAndBackupOld() if err != nil { log.Printf("Failed to save the updated filter %d: %s", uf.ID, err) continue @@ -290,12 +285,20 @@ func refreshFiltersIfNecessary(force bool) int { config.Unlock() } - if stopped { - err := reconfigureDNSServer() - if err != nil { - log.Error("cannot reconfigure DNS server with the new filters: %s", err) + if updateCount != 0 { + enableFilters(false) + + for i := range updateFilters { + uf := &updateFilters[i] + updated := updateFlags[i] + if !updated { + continue + } + _ = os.Remove(uf.Path() + ".old") } } + + log.Debug("Filters: update finished") return updateCount } @@ -413,6 +416,12 @@ func (filter *filter) save() error { return err } +func (filter *filter) saveAndBackupOld() error { + filterFilePath := filter.Path() + _ = os.Rename(filterFilePath, filterFilePath+".old") + return filter.save() +} + // loads filter contents from the file in dataDir func (filter *filter) load() error { filterFilePath := filter.Path() @@ -467,3 +476,23 @@ func (filter *filter) LastTimeUpdated() time.Time { // filter file modified time return s.ModTime() } + +func enableFilters(async bool) { + var filters map[int]string + if config.DNS.FilteringConfig.FilteringEnabled { + // convert array of filters + filters = make(map[int]string) + + userFilter := userFilter() + filters[int(userFilter.ID)] = string(userFilter.Data) + + for _, filter := range config.Filters { + if !filter.Enabled { + continue + } + filters[int(filter.ID)] = filter.Path() + } + } + + _ = config.dnsFilter.SetFilters(filters, async) +} diff --git a/home/helpers.go b/home/helpers.go index 756d6b97..6b0f01ed 100644 --- a/home/helpers.go +++ b/home/helpers.go @@ -1,12 +1,10 @@ package home import ( - "bufio" "bytes" "context" "errors" "fmt" - "io" "net" "net/http" "net/url" @@ -155,29 +153,6 @@ func postInstallHandler(handler http.Handler) http.Handler { return &postInstallHandlerStruct{handler} } -// ------------------------------------------------- -// helper functions for parsing parameters from body -// ------------------------------------------------- -func parseParametersFromBody(r io.Reader) (map[string]string, error) { - parameters := map[string]string{} - - scanner := bufio.NewScanner(r) - for scanner.Scan() { - line := scanner.Text() - if len(line) == 0 { - // skip empty lines - continue - } - parts := strings.SplitN(line, "=", 2) - if len(parts) != 2 { - return parameters, errors.New("Got invalid request body") - } - parameters[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1]) - } - - return parameters, nil -} - // ------------------ // network interfaces // ------------------ diff --git a/home/home.go b/home/home.go index 80f9e860..afbb3002 100644 --- a/home/home.go +++ b/home/home.go @@ -143,11 +143,12 @@ func run(args options) { } initDNSServer() - - err = startDNSServer() - if err != nil { - log.Fatal(err) - } + go func() { + err = startDNSServer() + if err != nil { + log.Fatal(err) + } + }() err = startDHCPServer() if err != nil { From 31ec7f9652c6fb5947eca9e96f1507aad3e5ed13 Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Wed, 9 Oct 2019 19:51:51 +0300 Subject: [PATCH 2/2] * doc: new arch picture --- agh-arch.png | Bin 77733 -> 86292 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/agh-arch.png b/agh-arch.png index a041007561fb7a6f10a2f8428d81a8aee32b4f31..8270d02063c1d312fa39663f4236265a36a1fef4 100644 GIT binary patch literal 86292 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%0AoVCnSK(x+8E5;EdzVCfGR;GYbpwAQfM~a6!dN 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≺ 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

XjfcPDT1{^El|k}dTj!)Enw9NMLm|q}CdpAo zU6znsmatv{+k;rb5zC@NEMxo51aE0D+8zAi6!N=M@Rj^MQA1f_sG>qv@|pVw zvSoWX<6-8eYQ>q)OACE4(wGtZ(Nq&I9;(i63Fi8-=HSZsGvABe;^Eze3$T zKmaTT*xJuVN(W+o!3rhi^?HI}xr0Q0I_U$F-rLxUqUt%qO!E!H zq$J2OJZAHXii(T8Kr_ukt9OB*X`6(C;Q@`J-z8UQn&!9k&TamE zxqat!%jZn1=OY2H{j={yx~+``tI*wYI2gone!(zX1Zqq|1t|Q4hi@&i`hb7P1q7IL zUZrT}Nb}wTX`mifOw;iKzx(Ea4Yp(~*6CrdUrQ8r3>CN5XGB*^R&WvPKd&HR{`VCM zn1SLOMA&g?$5fDoDQtU}$3Srk?*Ghe@5CL0^m3Bfm+Th6P?q)DPB&7D1O22)6VpF4 z^blqUM>!ZXPA}zOg0vA*)R$CMi0w0g{ zr=uvauU1x83hTPBCZn9JMwz#(WxKeJAHTvngP_D!Mv0W-1u#2aB>1M2%M}`^2nRJn zBA~m{B)z`H`iI93XFIzi#$D|r8^7Q2f083Hrd22A zi5#9jJ9Uc`yroC`EV8~-zgd?Rbp}S;vR~H^-~2pC;g*~s@MqhIWmHm*Mq%h#RnLpH zP}qms(bcpYxB0*~DuJR+@KZQK2J*L;iDi>Rn?-QDGQdH|l^NV#7Jg^kRG0XLTA7ry~7 z-?4b<55w3MV+58U&I%{TQ``5;KL%(88NUh>wYxyiPJc$vf{Hi@*{TxAAIJ|yQWsOT zWPSh@!mV3V9^;@6A&$RhFt@q({DH(5sNA^I9N2hC#`4UUQ){q*p6*VOG}cRx2hr4m zG50kL4WoM9A3b_a(pL-JoJlSpfEzD|UaF5acw+(IsMNM5M)oh|d!DHEj zX=&o0Ua(JD`GCbC)WdR33*--Kd5<%>`1saWR&1X>9pdmxq@k^#MnEyWnZ9{s zqZ#`Jw*NCx27zv{A4$+(HC-eK?M5352?@=bMXQewSV;kohwo1Hzcg zlWvG)61E}c;U4ss=&(G3BFzMMDsoC>-Iw5T3>j8G}JpN9!)4B3EIh* z$;mJFQ(wI@?eB8EF8$-i_5}sb3P_0>cuK!rzEm?6SmxMdkowZfBWrQd;(enkRcAM^ z@a-;QqX?^Hroyl@^*EYe;0S@ha6=pRiKpvUILdRM4D}3X6Cx}&SvV4Vf#xz&WOya5 zv;ZjOsw|pXT6#OXEAn+I*`(oWM)?r+!@eucRmDo~vsGIJ;}@Z7$gy84$36l8o47#d z3xDb#g5_$S52vT6pneFFfX<``5}s-reK&!4_(T|5#er4{0dR$Fv|3<3M9FMyfjBpX za_70m!3QH()!879X>fd;`<(?CVu5_4=yG@%xLgqG;Yl)TI}T1x@)o=SP!`y@$2_Wg zlumSnId}L4ZDb&SAS#}iDZLj-o8e#@wEB(wPs#}hP2+!qIGzI)bi3emHGN+e5J$mEqE<=ZSq%%iJ?ql>^rd8FA{)*$W|a&r+~R#?4!B4 zIb11;u38S6KBR{j3ZED#BCt^y$U7gxT*#forKLF(CPsBf-VD|zT>(W9Lduqf1?@Y^ zo+^L;SSBnbx0Us+QG`(hI07B#rKTckZc`3~i}+jU4^=o_&1)a;91E-9q)FGLpBxq9Qs8kLG@dIKaT2B)Wujf@`tGZF~~iPs=I zf*V0n9;8Qs71WXfn_phKL=%|DgmZygilQ!-8BAI>ceB7K<^@YU zL)cthL&G~WQ!~)4nB)LgI%@=60XY5g!JiK-UA_x*#W>ztcoW@KhFQPy@mI&QX*+L) zm*&E<@h^8FvU1an2$jRSsjV28{2(!fXO+X-5th<>HxUt$#D88o=jh0DlsN;KrQICX z;(QJmivw-rcVf@jtL|pmfz8ExD27K^NLv)nfFZIWaK?5FghK7u{4&b!v){EO8Yw&V|`*(FvW!ijK zPodD({K*qo>##1Rvnyped3egd;Z*3I;?qR-GI2GTe7#V12v~}H4 zr;fM7vX^_FT+z*3;a|OF$Uv#&UIq?6e;|cmNI!ctNEpP-xp6tzvC(HpuA=0$4%44Z2HYq%V0U5)4gG7uRcn z34*i)JPuWCJ}b<#xHw%ImSq6E1y~bIx{8nR3FNk8vq}bHcKy|>IN10~P2lrGif>-X z$^+XP6jad>bU8cilwi)pK)Ia@=1jM484XwbkX3*!Ci`0CPdhA%uR;v3U%jd}Weebr z9aeO?qF!vcvuAJ5J=ZW_Y6#W_FkO<;v8Ayf;`q#~eicT?cskg+3Z4R@fCu290D(Mo zUiUJ?91Z-P-@fhI)jt08MB+D8L-?L9gL7sCEja}ed<*jpHyTz6Sdk)$B*-N6vyP?4fA58Mf>4>%#37#7sN~X2_YoQ2y;77 zo<#ZB=`6n%^(g`@)jk4IfB@uklV4NGr{D99$ET$=fiDb<#Azq75E8}_zQL^=2K@W? z@7cX2wY6{F6646jvzxkIzid+bVKN)G1k(`MOEG>0)<{nil$GKy0j|*Mi|a<2L7Xm; zfn{c!(%aGpAYID_MAeTg>323)chY4FU^2SabQDnLg^$0!hX&M!U;*PHhA#`%a${qa zzk9eW;2fs@rbv^Y+1^5tklG#{Wt9^4gGOvKD1xT>2ji-hj zp8lS)f|cz_mT?D8W(L-#+{#LzVX$*?b+($2}zaGyNCuWoZ1ERXw;tOZpJ`I`#=&Zii{s}Uv1-M zwVe$rcMO@yhq>X1T&nQg(1WtVjvi(wbHasPJHF^Yin4?}bbQt^_hp+M>Le>53;g4f zxOGz-4(1|UQVT2m&zpbnBt6hIPt+FYt9y7K$SD|thoQjZ9m9XVN`qysh4`-frC%fP zL`FZ&a@BdCl3R$9D)e2@f{RU6=Xjn&`ugYYZ*zIE_`3$+O~yzgH*KCeC-2D$vHUV- z8F7_3LHTcXpaGPBt6f`0AddUBD(c;Po*?JkF9*Lr<4|j&6}Wd7Vhzz-8nMCi%Z{Qv z{jk`nv>J(u*d|O1A3D5VW2lL`C5PIbKFh-T2=G6NO}VM5DM*!Kd9RT@|J}FthAMTU*x$5HL z-m(#OE>6zJi!6F~s6YBXd`OCUb-7|WwG1}{>D9yD;r%8ZQ0z|(KRt2=W0U&Blf8Rx zzejwgm7$mKt}dh3>L+ajWIG$^tDxSJRP%P!$^E1ES|HmTC3ue6ib-M$4otZ33C#s* zP@erW*~HopEa2DtwIC5~ofSAE_~dM0vQjsn$u7M8cfJz8Z!SCdRUi6Cp>rf9juMGH zh<4V}?>~cteK@7Ytr0_7xD7(ZruXMwW%aN>>8f?VtMbOOW`x0QFVpt7QB#@QK9m4L zlXVoI=q3t0HJ^Z^42VN;us~)T-n?*B$k*NI3_CmsA0LrwSd|hR;1O{keOKA|=}{AgaPFetFl&}rrMbqGr{A?A zF)^vtxR=p29?pNjipE(KNX)Cu`Z?43xrQoOI zULa#{JY1yD^PSHv8&za-b9b+yo{c7%nrk2J|u74qD83|x3X zM{pkHntp47-LIWQ#B|S{chiu1Qqa(Ycl6cEM2n1{)u(~?*ErHNu7{S-ZGK$nPaixo719Yhc~y}vW%3|)(TaGeCFQSkG2(97%!u-7cr#_c&8Pr2O>M7H&*&;}MtlMv1+7q!ow~n*+g- z+49K~hRw3HsJG5SfGpg3ebp6iwaiNd33XcW&9GjRDZOSyd)wabTZU%Yk22nPIkc*o!31>Uu&XMAtTAD8@Qcz z*)bySJ9UZKn~u7to{s_2Og}X1Z+-)Onb+c6LFScPV+9~r~eN2*Xf%6DzC1$GN{(hApxRyO?5Ao^cM`~yno#@ zq84YWyZGxZqx7#(qq{7v^+Pk|R9PB?qjj1}e!K8BV%_q35UkWEPXz za15V>M8T{M&xy`fqWw<$6rD{(^fp(5NN{vrB|~CG^lZ{5smPI|!~fHNudSCat`jo4pZ;Yh7yXU^}$qkf3Ur!MS$^HyI zSlD1JMsO-T_c8K$mWxxjjvqj13;R^f#o77Gp&`qT;ZgiLaP={#bJ3k3YnPM7UV-0p z1-?nT4vU8!QIaWv>jpd3JkE{aEMh6|{=LX7cK?H!haYv&QtMaGeze`EyZZKjtDajrD7+Wb-L!i@-_VJk>?WKUQ>#keR0VJP}huyAzsAOt#^T5)(eew!O6@}hJ8n||K?Z-BGy07cB+7utN2#w@5n08Aqk`GW1nIxtIDWO~6-6l=Z? zf-T@$L&^vXrc)jjY&|49iB|4Mk6+W5ZE*aS9-0i6A|?ony`0ym(4j)Nec=0pl}Lxa zLqjlXhANXV?oo}5&VD+3hoABI<_q3U+Qr84^^FZjz9=&HpCR>-z5S1u$VdIZo5$%Y zJG+IsIRxyk6gSl2dO0Wp108VGBRvy)nE+rS8jXh4VpAQhRO~gFymIGOw_OV`9~dlL zEA=~(QegK5d~1isLv{okhsMtCZZZnloIt;UzwP>cW+o%Cy)$;a8v`yaMI~e&qpNosT7bXaw@2yeH+JMm zDu|a+fO>~+k#aX-cLpNx4|}=`k{Y_ilJ9x6LM9$YgP}v=j1nCYlo4S<^%alKL21Ni z+YpMf{{%=>jwqpS96mBbDOp}m8K<$@rXvD8!x>=k3gBC~Ld)+>$JW*+W#bpJ_~jG$}o`% zj;E*f$wU(wp9JH*ZS-z!E&BUps`p)a?%r2~@6rbzL*B=aaYEb&xgjCA6X;{wilT+} z>zCwkz9NHVrA?lb3O216Rf3wmwY6K>*x3McP3aBj=m5Tik_&$ETRoLaOiXuQ1JvD} zwn)Q>%z$}}*$7ooYq!ae3jV)lBLn*jkx-TN!NDUNm%!kY0sPO_F{d`pn47=%rXe`E z56FfU8;oS;&WQ1mjawvr0G>x^veYH1gl7i79=uJTz1X8{4B9d{)(Bs`|3rQfZkrb6 z4Q=2Z%~e3g1Pg=fM|9T$l|raTl32et@^}r@ayaA2yhqn0CHTIlR@&DTAu!e>Xy+vNlI1QuNxRj*znKA!lECeR*$mIj zC70l9a@!5sHg{ZIs^*!rw^_{L7ytWO%r%#8nBGNUJOptjkoPCitJML1W1a^)l>h58 z5}l?bS?yzfd$Z)z-`^$HA+f-za&lIw&A}v zCwuY!t!xh%K&g84J?%6|57PR*`PVA!n2&-VAW#`Tzli?pIQRV~i{)I1 zRq$O{mAbmHLtyNKKO+w}%U$*;Yd?BX^G;bA{^N-^{0RJvfS-Jim=m5AA~bE)^SCEfKsnf$sCh=E7v=)q-q6a%SID$2?Da!& z>#wh_5^~)=1XlMnMnUYb`ORbL9fxYe$=*1I#&}v_{XGZH0q$G3Zb51BpO+0mtJews zaZMVfkYG)EUw|j`$($EOr6<{v504hQ#;8r+7qH|{GgkSOzFPcn{06^AFN&bkU~L4CG?N>^B5*c5+jmEhf{H1 z$j3;6&W@nOooLy(QdIX)V(sSauNETyw&Ei21>nHd(9#Mq{^!K{=6LN1W+~=wxEQQ* z?EJP~(Q-C83La}AiJ94_41w}5mfkrtKO~6b zMoz6q(6<4xvTlfqPcI}7{~@+f{k%l!RxoQu>=E#p|2I@0tQEp*815qptCZs zV-10#$f0^R1i+D9?x0jF9AnrehK9=joKS7ZWtW&ni87IsAkOIBPO9Bcb-pdVxBfg( z)bTdU{h+3k&eyMGqah5u3a~d_d!!;&0exPMty-ueXPq%Sm4u3{f&Jdc_y&J+bGK+B zmV~ew`oPJS1Ga!3qk@c#Sy1y_5WuvkI}P@af`oZte*VE*;Wc<8@dsF8Pp=k2ZyF3eyHETVs4FG66x?h-9ISzoYeLN9*ak-2 zs4_nw7Sv1{MJ;x>i8dQBEY1Qvg!^+i4&Z!ptamm5?^TU242gA_csTZLQ)7U&!tyVd zK3P^tYT5OqBUMB=t`t_$fm0Y}Rh8<)-O3rVv&10g^aN_JPhIbpAb*87y~XOgl-s591tnYZkjY*hv3+a(I72p4HXnO(q$M|*iiKW!K7_pMf#+?OKS)gu-0CO zW3oq4%_80L9#|V}ZrvuMZAAkIz}2#R=6JIJL&c(^xNpW%l7TskGqHYF@6@8YfZv`a zc;m(|+@MYjY<+9J8tu6BQXWwQj08)R%jffW>CgMTaBz={!u#1m zy!PVK(m1#h{fh1i&EXI3gl% zL!crg8-4$9vjk2(s8VG0Im3U&DkhXZUEue-PKAKW`*=K`%lboZ?w1-(DkGvMEUt3| z{-UcTt)KM)ScPUX&`t!F8Thrbi{X9x>;SO&8Jtf<$Ipjgd(S24+h6=#TUQ6DF@9+4 zdFdwCHNCb?3^z>5%hkvz_5HioP&)x^q_wHlPq)$g5cXy8SsiqEaEyQT$_bngiwtTg z&NB1z?)wHiglQ>Ui3)!F{GZbx4n3ffy>Ti~7T2GvN9;nz&O4EoloU31kIVX+4`1Vf zsdodE+;+B~IsaAm9fyUZx)?92UM3q;3A@ogQ>|(e&neNxGd+qbb2ZmR+JSnnFxh_q>H8)n}iiyX!{V4PG5>~U?+I6!z} zPDb3Hblq&R=N-585>%CHP79z38z`!E`kYQ-Wov>yZ7nLn_!1Kn8S(!_2zgGGJ@WhAY7yj^Dqtq9o;xxL>BKOKV>BJbbd`-bei_5n&XGuQJ| zjY=Lj1IGgj3pSUewxo=jGS=_(OZy(X#|cgSb#lABC%l16w)93PW6t|1AwA&BuV`D) z)ddjVySMq+(IEXQ9Ds&()_3ll7l<{aBt`U`LM-#b2Q8e?kBj$h$$O&6rIAj-y zcrqdrZ2o{7g!g7UjpiNVG+f~g4R^N|deP0AW$up*iN<|f=;1`#`K44Z(vJZoOAR{Y zc>wfm5OAfC?L2=C1ocyRfADUIFtKKA!q`;YP={K7b2nQWnEIao0-{db%-3SxeOnO_ znX+X4-G;}%VH?U%zwzihA#g#Nb9!P(2gV?)g^knAnQLw+UWAb*q24+)Ue=86!YP9L z>H--?tph$y8kag%Bsbfjv1~N3fR+%NN8M@C#-2lPa8|>$y6=yNfIc-y*e?d)|MzEI z0^)e!l-hMX#bsA#3`s&jW>~@r3doyySXAJ}0cJqyb3I5nuxAiK6zIkJ&%xk89 z(TUg_fX$2{*lA(HhOIpqeLKd)UMrlrG5fvo%kj}&^d@brY;3aCPy>TdH|{Cp2zUtZ z=By)icR+BNi@j0stVc{f9C0mcwpw+^0A%LiiS_)OqpJb%#ol}r{7kC+PMm5TUrU+a zvkeLPWWKLVoDd2QH|X8B;F;BloP9Vt_V8CKCJM5#)!cln*DeK$m+X9(_pNJC0Bzg< zkmA&-;=A=4+`ct;E>Tgnahy)JOc>xMKT$4U=b5Pq}P5Q zT4k(?bk_{F&8Ez-969MsVPb99SFuhGz2>SNK`J=8)2hROE>lPW>vPmRfZ>&2cL zN{gXXcODa>ib1gePw`kl_1@C_eD%b0Ang!6T*O!rd=QCblJ@=fMyM7IyZL(rhE9g( zrdW^!Dx4{=Vxt`f@IQm45^_Rd&Lr3{ku3a_&PX4cF{I97$Y~L&dwZ_OzXp`}b%gVNaF*0m@UqJzcTV$Yo zdioG7kwD{{TZR^&4Wisg33=lV&LQq5PI`%=MNmfaIvCd;KyE6ooFBu?zY=sbz6<^{ zztq3{y}9??41Q@4e(5SgxQ(;ihMN6>riDdL<9SAg#5jq8#tM+7ChGetO$OFJX%4_K z^(7Vm$sEVliOf(PUV%jdk^7y)O^Ch{P(R^JR~y_3$>abi*rm*9bH*HnLZN%1m9h6y zQ7YK4ARIrR=hRjG`GsQCXMa-UeQS6Adb2jY)ad3l#l*`4?{OBygY{wl{6 zJ>R$o)EPGaCQinvg;reWT$d-i%>4Ylj!w}Uk^;04Wr%~g33xWL+PxrF2}HqJK-r0G zegWYc9x9s)@gUP3A=@9w#S}9bkqXC8=OUhfS&yLn8v9?gHZ^Q(}#=@&n0nzB?!zg-vgPMiQcnCzD91Uy3qWq~0(m zM1YH4FDD9ui%bc=xYZFd>MN@_JKDb7vv2uaNy1NYhB(&w=DxVdfH z!Y;Z8hGfd`sl}R$j0&15geGfFmbt8G6^QbI;<*ENYNQQDllAn^^ciBGEg+xS)ztu3 z;}U{i*v_%&1r={kbk`x40WNA6ZnUtf5hW832+#O-nvo=V%SsmnT2RPC5IyZuvTlEt zhvOU5(6dUPzv=kKxzH%|Sdi9(KRIom;B5e&dCjd2 znQ__($eswXLeF;1dhLpac8nL1#-ecO%4hCxGB`Q^gE^10wRP zOiM6B4kg8({u%tx(vpMSOj3QXo7SeE%_ZhbW^`9o4nNZ1cDB=PTnzzJAnlx|TIlE% zU*VA>Iv4m>y_{2|2xNwuAqLNt#ERf1)F7OLGH0s=@C?p}fRPElJ9Z?mekB72ELp2! zGI|Crptv-C)BskBNgp~*>lwiVBz6N|1w{pFDhOuOC%_@LEtFn7`6cyYZ(2;B4!HEf za1{?g!2Rga-?WvpNvsI`?T4#Ew4=M;79o%Zia;ZvWPbo{!H&Ss#x~b$hvcV5e4wJ7 zjr~G3M)-_T0BaU|KK$`^VqyZAE@02#@uVGnRlub8qptN{wnY_$#NyNOv{_72FS13G;@ta1H{aJ9n~-?y^L$Kxg>Yz1C2&4<9}xCMIg<6)Zt>#oXM-pFXbtf~xFGF~N_b z-K(|HN+U=;Hf7^`#h;q_rl1u{T#47d{g?ECH$Q%rk^d-jr_q=KEMb|G^dGk1Ja$cr=>Dj|+GDGWR! zW;!SLHp-P~D1Jq}=uLd+A7xfcPO_m`uQ+t6p&nFKg0jH_%@ZhpHa5Q?S^cxK%r+3< z4yGs2*UqE}9DrgT59B@KI3{EZl5VbQHJxqpnrnN(&Gn=5slL5^ksYRMN46UsJxSs~ z!uGGHOQa^n#`aa%YTGrtD(fAHIA}CON*m$^=1sT{^q}JsxRRN?9Nw61-TVrC z!zn1BRREtwrz9PGz2dZ#)!3qdX%R#|w-~MTPB=>)WxlW5!UOR~E;>Ke+%bVimjZzR zI^;NX{x(BJk2)odf&(vC%&)Y&J=x&ZSih|F8n1j-EV^rb;MHrrd)YW-Y-RaYwJoGi zA)EL;)gY%gaGTRG_)XE1EWX8`375%HICa_giM&c4z7sbwF?mxC0#uG?PBsG|SDHy@81_8215icofv<04R_|k4YAJ}VuyKiRU#|kD z(zuFaO(;5l)VHPBp&fY=q*5H8fjzQm9vv z&h+#ZG3+z#1c@T(q+2jRNJ8>-_+v8r74H)0^O8T%ax0jd5{09NbKyd{%@E;`aP|W6 zV`Z%ck^vm=aI-topH{mF`wJEhrw&gE<}oa#g5HT`PQZ^*t75#8`&bsu_^D ztuFK(AJ;jY)lk_IXVxzyC2P|92tBOEHg2NKjjd;yY=%GT!tlHN8hjbdzcl_#syRJkLBJlx-)OS8%a zOiPWX-w4?IYJFZ%rXc6}WeFMdZ?7x&GZgQ|Mu z9baCunI~UREXc_{{bzw7{ZQF&(?>NXTYY85{}34VBlAWMtUc2u8Rk3G@VuhYPPygq zYQYq)5JXioQBnr}!H}b`@`^o+PfE&FRO+S@rgJf1wPc^s6RtPSvcV4pz;j2E1i(d;3qSA zq``r}WSyIF>681Avfsj;T7Xhiv+W#dwq{@(Xa_C-U9mN2bq+2KTgE*~@t?#Y5PWZM z<&G|MPZ}ZC*Q!_f3PG#Vc}yt-p~AGs5~H#gP`X6AD}itmSNo>}e&0u8u1Nlj0P z=!)7qC6@2Vi!xyn5`2?`8#%uaOKBIIK^jfMukR)YQ`uCPzXksCR6?IZMfvdV6CL>{ zkCt0QpQgIc=@%vn}?gb;EuJ)NY)!BapzoiUVL_t-?|5*iu`B)PSYjK zG&u%euz-{I#bd{6+z-z=(DoM;O1h0;4B2pq6BT8bnU!Vqjn2qD}%BNff%YPEykQNb#MdJ(2sbrg{f2Fw2Is)oHGc zAjZkS{#qfh>p{>W2_Be`&2iRifz`Y6{fOuS#S3_N+A9A}UK4sinWn>6CKO@eDu$Bt z(9r*$$R0B;(Yv;HI}J{OEc^mkK~`2jrB64>>Wkls@hKJ@Wy_&7uflQ*IlDs)?O|Dh z`jDgZ)x;cDt}T}@PUM($!+9RH^;kNCcMICjJXBB!3lF#XQNogcou9uL+MyNemgS6D ze9S4I&;)3Snl&mI4qnWaA%ilvL@jij1Pwh)8hxN0Lodqr(0IAp^^u_YW^*9khX=_6 zrRGY>wBE)<%ie4l=8EAgcTJ|fen!mq)i4oXP`5kYD62U8WjlKsCMffia zRtDo<lKiownO#a-OwPo_L_v|MTTDR79v2rU`e8S- z+(1F^E{<0r9VSJA7zfP&2KDjKCl2`)A=e8`!&ydVYi1u0@;H4~A4K_FjNG9$z@&=K zvWW$ai$R?H?qJ)HDm66q?oAey|EOKTyC!Gt5l}usD=+fTFUpJZ!SpXR*-d_h6C9cf zP}`V&Pn2EwWYX3D>srJnmFgW}-y40TS)b89xDHRu8X{W$@0HVo{FK(05t=+yi=u-0 zQhU0UTUknrjSmzyaiJ^3XkL6i%PQIy=LI zjaD+lF64bwUIx$&eucf!iI?9^Y^UvpBd@Pd)xp7G&<~UjkbeM}F5)otzMPYn4D~-l z58;!@9l^wAq?L9|ml)p~opjxoKxJdiSMnqY?LU@btYO4W8-9%xldZ(Rd}&ev3y+gm z<+z#KLv=$EHBp3a~`7-Ym=#n}6!&XS#g(+AxtclF8y@zLJ-kUR(nGO!dEa zpDfDd=rvQU+w`RCJrSY$t1dCyOct(-zA`4u<9Gt6zn_kAfLjg)Ti~V}1?uXSLeDK* zc@M`UMecbP^Xs=h2*$OS7{SYE@xzR$>DiwP0^+<72&*u0LN?-S|`L$*1C;$F+!x?1tl$6JFynScc^j*tt^7 z%m5gW%lxe7ax;Jpj@l79a|qa)l$X|~LBFc~aKx{_A6taT^BQ;-P8XUJnN(Q_tsLLK zzfk-mzcQr17g+~L-|{R{A7?tXd@1iYb#2S(@&HU?n2%;#LOuK^ZsWB zOR%;~RGIav%W1MT(E|f=2+M>7!PiMi_<7?#7jZD7fD}Om58!>>-HKl^l(&0I-@2_s%7^kb$kFP$3vOQ3A-I3lB z#QgI}bO*^Q-6}H&v1|g*nz^E0548sz#1tM=(>^~c-Y?jR=Kix2Ci;*k7@8|EjC*|c z7!}h(eAMstj8+Jj?VQM_%~Ya4qsDk0&cxOd>VC65s#^2vrE4(%&8O`!?)t81r_yEV z+FE7yjO<#%u5WVQ_~NnpTBSAW{#rt^Tgxl`qdl_n@s1R9!o)ynjCIxE)Ao?6xI($w z@ep45vrn#PFu75(k5qT;zDYnBumj+DI)%(yFe};BMZnpvxTr))@O?ppK==Pp_1^JV z_W%2M~j!Ef)j zd8fWJ2ER5iobD|oY?~4rcXkg`^TiaIl%kdB{@!M1I*2-OvvI+m&mn_G$xD)n>;f;} z+-l|YD^!J!3R0msnu`{iW*t`r|BdB`xcectj{dPa@>J|8lh3Q)o!9gIea|lxoBr+z zFL;A@$a(DL9EGf}n}PHKJzr8J$$$0xsm)mf($ePNoI))|nGY{5n*BEZ{rh{s>HgE- z(u$(a|Dt|hT|CCL;;HXf1M=>A>P^8Du*fsS@W?aG>aq8WEu*%wA75s`k%Cj+w=8XO z{@XWfQF;IH%kL6yhtYz%X2NFyyVl_pwgeR8yuNd&w5+)YWxQyg8!w+AOi=k(*^xozMQ6fP-gv&w1D6*mDmA%R=q zo$ko=$>~^@?0MojVSvr6PeLA4_5;@k8No8~r?vkggP<;h3Xg2nOm$b`E-r$+O;k*u zNIl&a=q7)m6MqVWG9bPyKw(rQR}oRM3S5_o+HHPR-AF!9H{7CKcW*VZpg zbWimb`M@O9Zd4-@CvB+FxFXPNwz&BEo~o_hpE ziiRAw`Sx$*)FtQK9Q&1%3zEuD9^) zY~4aDjhL|WG)(la$Hc^BWbjU&H0HsC&W*+oYhAOv>va2*$e3c4v;cg`##1h<;FX_m z=ql=U9cT8_8{s{C$rsaf3=8VN{V4tYqx8w;pJJBP3$HSdM#=Z?5}lY`frgpc?}kQE z@Vjk)>ktO+{@)^bj~YDjc68OA5rl4n@;rJnRd`m)?wmwfSrw-(=M7?C#{5{D-NP~t zuzMVPkY;SvR)BB^aq=;4Cf}5wHEE{cNO*eqW#{Elb`RxEwNmi%3+0EJ`b(`D8L>CI z)~QoKtuaSCMVTkA53ANe9dw94it-O-!6n5L;!P1Q3GAgq73&`Vo3Ss-mHaLySx`SZ z-r>o=NJxWCN-Pv@f8in8qS`sGS=Pnc+33%#-~iIsMSZ(I`Ds z4(TIzZQG(MiHR&o6bqlwkWQ>@y3>F~&W8&=m&T9|>5!RPQaV&6EFEMrDZPpd z$w*JyS9Urv2=D>__Pd*lpe)EW)19@D*asb=$xqhxJc%Sm`55bwHn%pD8XQP^DS zE-Nboz)i}Zs8BW|P-CK5VB{71+J-9U5^y$f2XLjODAyuYc)mT0{2KIFpdCPYtoAzO+#&z` zCS{(<&w}Kp=y-#kmKJM&-50|hTXqr=XyEDj@phVx8)MsQe|-D$6x&)5kJ6Z%QUzmf z*^>Y54fV*!-o}I2ZwpLC?K5`7`YblyKJhpoxX|+V@0qK& zU#)QJybBMc)%yu9e0%n^fB5iW>GUq5V+f9pB+=|VI+pe7oWTMD zQb9MdMqWivFSb2@4zl)(LmTn5{BTRzx6f#YEImDaFtgWHf6b9#j2x)k+18!xLFXeU zHqv=#&F2qKk97GdD+iAy*uQdrB!()An*M<<74F#A$^^@;5^4BBZt0ROnHd?@Slt#p z++`TWbgEwLdPtNR(bXNZxB)g(L5-oI;i1vp_q{vQ9<=AXBMJB|I}v}b58Nn&dmO9W z0s;aR6%}tu50j0yc{}g1|Mxe3k3Sp7f6U-(p9N(u)P)0H4eXwSQEww`#*c|2G$ zYr}TPN*mWQPZ{g!t(g+iyx6imZ26RIz^XiTm=W8XZFF0z{(cWmSkA@I4@wEUocwIJ z`Haf-@bHc4U7ZR^^ac5v7ej)B8yXueNp68xkM3z$YEn`WB??{vv3hu(+Ivr%`+5 zA8{MNzZ}^~OGhWm7y1b;)5eWAU`w8|B;Z(9{=cWZ{}r2#)EExA4Jo|+Hrr|Q*^UO~ zxCf0PmJlE@$?&N>avN5%utqT0hvR?ZbGdgpRZlqJ{>7>Ouz>K$NJ^@K<}1<9A(=<(7^IrmwPS?D#ThlqW<2+1 zvHv;td4jukwP05K@@34Hn^lpuv0J2vhOb_|imhTYe97kG_|qp!U%h&T{p&h)Ujj9r zy@!XL#E+Ma`G4?(1_y;L!U^_#r6xBUCrE0>fqnq18rO8BN|8@;aF%UC(TLVLc`3*z zWO1a+il-5SkxQ2@d1_O?Qpk~Vk#J#F+Q`k}&JOb<%9k%OQR#7Ub)8I*wRs7%M)irg z<>g%*~mvy(Y)!)&QhLDF3U zhrn%g6FHRX_H|r4b-UoceTiZ1#x{p*Yisr2xtQ=yxNx|J^#^I^_~oo~9oOuoC-P)ZJ!5(rq26Ob?ELS)4dOH1LjNCJP4F>83-!Ksg)@_t8(H5=c+YRzPM#|_U+Mo zo`>1~HhKcl4n|bDs}Uj$-?10?X<1q9Nryzh98XtTa6J#W4qQ11zDsm?crvPSw2lh>7V@u#@sFlql1OeJ3d7n3G{YzJGVFBlq{G{B0rCt_QXn zUw9vM^(w<{PLKU8kGzT=`)<8T&A1xrtjFdaK0U$&A*bzGeZ`wkcZ%T)nY=KK-t#%9 zq_91w*5Xr!z|Ng&9Bw`96}l9`uK zXL{|PpJUk?by)xEkLBgrn!9X$k@&4#uO3-wxJ2N${`XZf*pz(6Y>BFsSY)uW#x<#PgHo!*nkSL(%8tiK;QjLBFL|D67g6a~ z&i#AR47i>1UE zl^jiJnipmHw`|#x%VmNj@HYd+ZROj$S3e~Qmv2sL$BxiEs(Tc0+a$0NLw%TA8}#3M zGW+1W|JmZMBO~b2GUVLa*qmDXxP52-+ywa>a-UB6&oTb{ked|E*$s2fzN^M55u+xv z<7F4iRBO48{tb_koqm9-ALO%E*$OfW3~-nZYFZLsR+eT`gUwj(h0fo1-q3L)^~5+8!va_rMGUT5r>v`Lippa*POK7IORR^_rK;x*2jCbyC9ql~z? zy~J9Y(i-#?q!>|)!J?bLnR{f;U5oiQAlMzC7vCpob_>FnCNf#@XV+O%eRqxGtG1(K zM|)NL{JtZCwrj zVa7}urJhH~;ALX6$)wCLE%k|RZ)`Ta-SuOc5`*56fh_b>b3DbTzu-ceq8V7$8=AJ% zJ?&DRd3~Qcra_lTH14|OkfG(DyuUAxcejPT^3#zQ(GOD`Yx}Cb zrflm&QM7R%zO;<(FL9nBd&b(sHdq?*PZdD9 z^GJ-tBsiA^Du-+q3fpj7^q4+R@1^dR^F&Hs#02$jf&b9V)N5o(|~^M(b|Ms0qJyLGRUy z_MyJ2F9RvLXD>!ReRUSdxYI+RX%9yqOf{bxJacL|Z?G7Umgdll-7-i!$HZ#ER1VFn9oIm7>|Zhk`8 zeLoM4Hqo4r%ldkHOx)ZI-9qR6qqj=KKlkPLkJ>qvoTxJ!Cb;_Vjghx4sVh1fi0@Ge zH)8F2L3@_7UL|rdfu`hbM5k+Zo7{(6;|Hk>Uw^twqvarIXsSx)c<7CHF*u^nd%WLu2P*6nx9+MV0!AecqH z)NaqGSrL~?xg?UrGa%KjkXzCDkv7A4cHv&o`1-Dn%a?e>!()WM(+G-xFK7~S*vYud zLPXSbC*#l7_2SVn5#rHt4b2C8P4zU|va*e>te&77TKfFvqA?RYdos#jj!eMW4`cBC z>}n};KVQc%{LFT3KXT63TeD5;>5ZWu#re)H&s`U?XxbNy@>5%kHdF{~OP#z^Cb7*@ zBG7h!*K%dh*cUe2m4|GJX-9qs~#om7U^@v%&9;p0W@)GZX%?i=x8 zC2sD3gMJ9#ly~Dj7bYIUoIsOnS$iz3%frig*b>FtQ6(jN7`XmEzhk<39)_jmuONF|Js ze~aBxNl6tsWBzbv#Kw@kvPX9H)IO=pj?eOFKe8Rxj~%T%{Ph+1l!PDL$o0{EDSgW` z7!@=hJ@nn#YMbMz?QjUg*&Q)2qii3^zklbs47hBW?Oa4@lFW<|T1nIe(KB$*0Wa0Z9m6$HGLeqqkjRwB_vcKOYI*mx;M_Igd z=U`P4kj$5-@)L&@1cw9Jm#u|b}KR;P~ zrf{R{iYl3US6gU8BHuJ;72fxfHRH*69}zMybAFsYJyLgOduSTQ4kA=PEAQOl!&of2 zcIgjN8@gC=*8e+Zn3Ud~q8h|cc;jw5aM{*zm{~KLYW2;&m8zfT#cMuFt8?ex^S!BR)V5NJd~7VUPb`)U)xjL+C7ZpYB{QU* zqA~I8-eOV7=lkWAeeE*7M50dD=f41E{RYNDYT6{p)sq|!EA-0~qJ`Z{m z7BDiI&(=w-(-|Y#w0X_DO?VrA{L|l z^(<3VVM{5rxjMI9Di!0p{`7yRKmlfJa?JIpu=}w?Q!;^#yza$-sI;u?sUw+N$U^;F z4&I_*dZ>6?HhHrc&rU|m&p~T3O~(xH9{)Z0p)YGIy) zP~H>WhU0xNYsZ@Gh(aE^eNxv9uUnW~Ag1#0q+^G&`qVLf{Z3?Utj-|z3JXNuc&X+4 z0;v{NW3SecOw4yzDzm-I%caOFekTrhr)XB*x)6>tyi?R|=B+GU$`b9SO{;AgZ;=%_ zy@}CaFjER#kj!X@1y((FV{nW_x}Qbs`a`Q}D76O4Y~fo|WN>5{B>%8;afylcPZk9Z z9C!$9agw7H!*g_DbGgkbcqCp)do^&4Zl(^sm@R|s@5T}KPZ7~=i5L#LkUO|uLfOoo zFG}}%Yk{Iyo zi!C3si&yynx?mXHrse1%OLkD<+2nFyaiD`s_dM}?a_-_=OGvn(okwSdiAeSOfbf^- z#_|7%`fZ358{6Q1==aK3Gc%=*D|7kAMeLG+H&bJMV;x1#)G7#c3JJR^&g}i58{T7g zBcZ`PCpUNNA@=ZwtN)z5k=iaJ)tPX%n z(0O{r<$)AA;?I%P9~KAfeZ5*Pq*!_Rc*uHUAYD zHxL^@}%MBN`XixX(Vu61LC(sc}SC3ZHcU zq?hNxS5;M26*TAcvQRM>hZ$)o^-!&rknknu&&9WlnAq5IkYnbQsz?}FFOnW4hmHyw+*PQY>;As($mv{*F-!6`{jEv+a zkbmC3?C6;3E$T-Bnx35e0KUS$QY+3Vpv{!xvElOBGZdVAte;$h&E3eo3ro{9>o-sm z)6zf#BFKRkhMui$(SkZ{e|m3;Ha*ov|+g$JAg`}m)_Bk%xdVMqY^y!;;ht};Zn>PoGtNnf43(=VLfJo|J z04@{ozWCHwFVECn`}ec!Dz+PQn_!|7=UCZZ2|UXcE1P;GS-TXzj=um0GD}WuKvYzg ze=R0x)bG{Xw9qY<3>xQ4vrfi$BTvkgfp<8;l~Qmr&}+9uMp||eleP8>tt7dUnBNT{ zTq)kG-TCqsIZ|Z5q*&*j!2a@TnSd@SFy&~Uq7n<4iZRPEix3f& zX#MoUeCH;m%VEd%bd3M9v59oab@4gKpkHdfMi=zaEmv<~*os&Nb#*RRKlb9iIJE<$ zKo@d>P*o&%O2u3|B8dB+2*N`j-ri-;?=`uSqMNtt?>!Zxkb2s)Th1zbS-3g5c%X|q+m+pN#oU>o4qmIwlr2HLD}4P4*1cFyn(4hq@4Q9z z=}2o_p8A*T1?{g=o!y;hV+xf=?D))ff2`11aK_KlYrcXy@G6eUkz|H>pX|cBw617MKVM z?C-cKJ%x#wnnd$aI6OIWrPw-7cIPqjV5DrnL&_Oyms$zp#dsp}<2TFsl}VAsG+%Qj zh2?<;6xqcxE30~aD;p~-D+fnPT3T9C64m<9((mv^LIs94iIj;K(1nxK?g?n~+hnh% zwhl=DdfX|?u|PJZWg&N|MrYy}O=UJi!cd~8ee}zh512kl%eH8m&X9(9=GMrxh{%d< z=d8)qCoj$wlR)jdD@FZypiFPgK;H5X>P=jnlJ?D@O&#MTrXZzY;Cd*Z(t)tu*Vh*s zN<**lSMIWv6KzYT3>FV3BD=s)t$r3_N%QMdc248&$7*z`L@(_t{Zr#KxT+xT6S*Wi zl)Jx*wx`{wfa21VA2&|Qeue$8s_h5Gwr68=)7othU0>UYNTs@443;aDdjsD!p5l>L z;7Uop{sZ|AezJ|4h|KMtNlj2kE*2+w5;&L_P#}^$

z7gZ3CoA)s zFWggQ*~1ynBW(5+7@mTjeR)OgB2e-S8TS#8D5CH3epo;p^_{wN=MFaKiCRCA-@Usn zks{fyB{oTlYRxLte62RTPWMSkQ1%hU(58O!rbbRX@-?;nXW!<_iM@6oa7yXmnpT|N zwV7I{HP++iHb^J2yRw!#^$MDPJ6Bh{a=%u2 zhxQXWu~Jz|MGsCt9j&eCxF4Q0c{yAk7WW(R z;>`4<;!F!rQ+4&%Ri{%d&BTMR%aTFcdcBje{&{0Qrrk%595Kyd7<|RWv3(Bex_4l_ zFS8x_CE^R6r!w2Xt%M!gL6#}UGlqtSxDR?eJ@-W{_)#+HhV zSU`$UevPZ==tiPg!D+sxkAW%gUc2D-jZ}96VbP&sNHbyp(lv9Uku$fvFB7|_(s7ui z&zVS}zCzU-c2MjLt!4e_=$#TC-N&xK-WHRRL9~{SViybLP~wy;f!Lduo$jfMs;aP2 z?5$h7<2TaK1SVa8WEY;DW!xcD{_pOeiZLT$9rYoQk77wYXqaiUVFtQZgyh`G4HYGC$2O_Ram zW(g$9q1QKRejh7uuA*c*%TrO@s>SYlNg7RjCoAMp$hs@FT zm6b_!HeuvHdj;%JZ5C|39xX zvu{lXr9Fn_%emssY|ID-2K-O z{O-IPaqU{%K)&+?wm0-D{VDKqndtiudq1tx*t6>b)HbfS-+73F@$bjUE;fYYyZ=J$ z04kZ7o?Pv1mfBofwwM+j7o{&4C+TrcjA9vCzS5s+#n>-6H1uu|^O;Iy3Y1^f(S|1^ z6U8^hhrLN@l-}kiUz`#9H**ooyr?#8K>xPQY9sAld0|F5&rh$w*uGt9(={vL0rS)n zR1mp%=Bal+AClUxrHEUXB(SGPzr2$`$WoYpj8>F*v*mj{pJ~!eJtC^>%&es5br1$Q zgTDstz+s)F`s5uK)|YnDi08PB*tv6Gc4*&Rc$@?l`bgY>&t#_EZIOK-H!_h!eyAi- zPZpx^3YXU-({st_p(9D#0SAR4Yt9`1U2`#ZHA@*J0&WEzQ zoooA_PEQ}?&%A`>w8EzuuOjN(O9pg5RY$jp%}eaDfT$rhP@f!9k&BM*+=_ZlP$lzC zAB#by0UYf@1S$I~axG<-oFO|wOy=srxmIgGQR5o){9w9|(Xs+Y1i(c86$e!*G%{tnK1>Ow`!XqSlMi!JZgNf*q(TD0s zPd%fy*7Q&^Ykm3hC3XveLBDgS!iGW@M=Tp%gpw?D6L+To8yIoj&7ipqIUx6dIWMt242RQ~q766m2Ud|&8SaCqAA@bJdX9j|rOoL_ep7SbU!p#Km3 ztQVe1ap}BEB@n7(bX(4AesPh_`5i*hM(f<{9I6sD&O;r9EJRy>=iTS$QJkMvF$005 zuC8u;Tjnm}vL7ZBa^+O3<5>`V!1$nWte;&sU4F|;qTC3h-?EPE@XppTi_T3}*Cb|N zEFawq$o zq6JuP5s(n&tYL;8u4(uX^q9VXMyXdjIIox#)-&xgy9nNMX&Ksqr*!?G3g+~LFd_3?R7f!$TO!S z{2L5|;%gmMq__IPcBq8jsP1ftjn-??jVe3}&b_`pLHXO=3YM3b={Y6%U>To~+~FRG zW(T#1`b7UBO1_4f7{ z_T^~mEVrt~#xuuVIB;e#cx}LZ3#@LTWUHSvWtcvEjmulC@Gedg7$1|)2aXjCkBu$% z80x-u_@Til9$B26+_`%_F;ix~pqCT!>o67`OA9!2TjyIaKTa02EL5j+UlX{_xOBXV z=>+Hr$4pov_12y)-xvdEq(Q}$mnLwISnck;Qd6`pSelt_NhV$B`rBpBjfaBu?3q35Yu7XxEv>8+``$A*3i?n?k$F(;J9+!5p6&9G`KWdw?RYf$Mdfl5E zzxx;HJFOCC2$jbt(jG4hbVtfo8L-nD_7I9s7`k&|aWcg0pS9eL!Fw8IoL=#@r~^(5 z{uUca8VbLxoV(@GZVFm?NcH!=SUmp>6br1LW;kyraD`n4`(z z3PYkt$*Iv?vO(2_7y@J8IPDYe&~-bCQMKYsd$EyobiO+n@pSCJoOASzwth-cG+k0T zmtdL6sc6-t#-;dVeX>wy7Lb;1wtWa7K}`D`S~pKit_W%>L#>ptlQwXqQ$&Xr7%5$oYKJHkH$aJjBLU-PwHWcv@% zRGR%NkIgK70dST(KuH{*I=a9y&yZdP!R(6q?RoPZC!g)s)QMM=xS1OD2ZfW$tf}9Y z=>&TV(9$ExuJ3D1HFfec${HECQZ&WG&UiiEHGSaH;vL%Tb7z`k`5#zZD0$2jgyuh? z+4hbVl#;F!ukYs-?!Kl50Ow}q><3Y1b!DmpA-}EVxg!Q^FCO4o!MtB^IlKh(hz9L~ z;=)e~0xP4X~mojyDv_NNyfA}#U$rfs1a z=6sR^LA;r`FY168?t{5Igd4PduTD=-<6EmMf-YL1YXZ_W5u+XUH ztIng@qnkvY&OWE}*kjRUprEiuWCFd1=_e8qWE^)Gom-YLb98|ekUslnnx185;dwTc zq_Km?Zri?Y>fm}~qFz`qu{-lFB!0mmA$2D8ry+Xnu(~aqew_V{zF8>80ADj7m#wd{ zGrs`l%Grycd{gT5;@AUbU6!Q*q6P|pG-nQq+SR%gL85WeFD>`OzOEM*Tbz2_y*>|0 zOGxPD?Y?p7620?}E+wX%#{98xbsvOef};;D55UTJ)_5||ZF{ln2zz`1YVa~RbJN>7 zVMD97VKg00%bPdbN+pJlV@wjJD&Tj+-2&r-$#Ml*YO4Nh*%F3r`}12`+S=&GN=p{k zeF>pei8qAkAU!0AhGqf|F#d>;aUQdCqw^!gdCygA)AAL3G+qdf7p8icHkx_FPYroR z({1Y=4gPlK)t$iPRQneemL4ejLZFy>cXR(HIiu<7+p^xNPr9Vq?B3+$+*00@OoC1v z_26@-qOSPxp5Mo}3nXY4@9CUfA;ru4V?zT!b`m=EM*< zVbQ8C&buTeB%pX~*}!O3wul_pfmFi@gZ(a0X{4L7n+uDcS<=)tVY!3){GJ9K zGY!v%xsTfG`8ea)({wR@o!h-G#Nu#-nvBh}H9P2i%EMelRBDS{ z$zPdviAJhA7Y8k$v{Z|5-9=}UqA9MFr%wY2tUR>0%CWy9oC{oZtP8 zIGuIr>OAqgDF;#grs&>~W8c|!^eH^}bAgA8NE5KNfxf3_WxGS3P~PkNr%r0Z&Iy`v zAOlyq`c~`*D(w@KXaYnOD>m(k(ccUddDqlNO*Yog+?EAf&(|R< zkFT&NwZ3A&1xO(rztYTDd1XD6S3CFVH)5Aa8*X^Jnr2Bac=5!|`ZNg&X9ZQ@I)l#V z(H-vB@*BWV3NM+B5pSaucHNY5zq_DgKCmG4accWNP-wGMxnyVPMcQ<{{eOWYhyr5N z#i2lIVrOTzcVZcA*Kwhn=TJ)}RBlfm2l#O8hM0)R)sPDFrBts>%ENX% zr4m__FYl2}$1#%uL6$fe(0ML=(w|mUmcOQUvoiYy=gT0kejp!rRbzNu2K2d8yxGxf z>7>hFGr4MRUT)V2wAG=r7=AYcvJL+z_u#Z8r=-9>MHdkdU66pN=s&}{;qopU?^e2O zcX+Ce6V%V z#%zE5SKqSpE*>x|iTn|$uhr%nY>XM!emTheS#{<0^MYXf^9k6p>T8azTPInf>E`u> zO&_f2m3MY<(MwLg1GHz>pL$XzBSJ>3Qw0Zxnx6AcuNWG@XX#2K4=)X#ElR0K-Fq?= zvgV~M(c7{f`O8{V>3T#?lml+8p>w{j+^OsNz}D+(g_VC`g79NEEA4k=!e0ug4Qy>X z+!ggPX>jSzy$->_p6z^QP=hGW>K{=-LyDEJ!d;VZAKfotQg${D=&68KxQC`h<0lPs z9bY<5iSfsEn8ATS_sU(}Lur4|f##ML*$WH#XV;3gsHm+$SUbA8#AS-g?yR@>68^O| zaGj5^hr8^8$C={W`GT}fyob}0lf7q$6t~4t3C!Ufo(0DMU&GtAHg*)WOZ7zS{9%YD zAC*ulN~BJ~L`{tU0^=%_APCtTpm|EfV7#vt!r#{LTg}~Ra#i&=#S@FomMy509n`#9Za~wFF zTa?!2W>ej6UJo6)Q$5BBW?Jf+k(Mf1$xcmA)L+yRg%k|0%$^?1U+tqiU{#czpRabt zJ7sDJb29+x1t~{Qh{g~eh!E45jFmgS*a}2_dYv&3U=4rx>yEAx+zD!XM@P6QbiR3G z9;$=Uz%ftH1sD&8SkGN~EYf^$jnAw^z4|DW>O}c8VVy)qnRa|M@ZAF1O7-qNT1IHt zADn$xNVEQMF+dC70!(t+!b~5yrhXcR`68yT#W)WFF;W2|vP7>twjqw}u5ArWrR#Zg zx`b`e17+G7dbEED>`SY_OfOx&EOeHy74z@YT}llKv9C$)S?mo=L1k2(y27G0jy5)Y zRt(>Sg6d*VcRlA(y_djaa^-2qtpmE<@u>q;$81$&wn&YGe4g-eqywZcb)b;ptg>Q; zsRb8GL`y;o((XCc=697p!$|A7v%IMyYQPFhjPyXQ2G^$T;CYGk<(Yg=BflD~I~>>< zt;xE64?!mBRp};t0ryW|Kk!~nO|7}Dty{JPv&pfxl(u6QZMzko^p{X1)0DBT!n}l0 znMNq#>L~|@VJVxudYR1aN^`+>8#9U#_?Eo@_TRluz+k38-Qb;uB6jcLmpGKi81ubm z^8if@`sd$pDA(L~SvFuavvPW8ah#y)^Cqo~!-qsMT$1(zX<2et4=>J3@;@-1< z>W_wtsIE%Uxv*Nc)M&Fbj8G^bbUs4M1jwEcz7kiWTzC^Z|L`$9$@}yDNOSyU$93kNtnOMc0L(G8q&{x4E%f3R@I4u>GXbuCl^(#bC^~G1E?))4)4BC#PWk z6<10j^-=O7TrNM2W}dg;l*@|Nyd_f4Lhc1h3NxGA@_3^=rl_5wPs7s~U4A|djn(=V@?JRalJ`QA>nG1Qsd1o<3$q${oRfLP1o7EZ^9^KPavWA#Xq!_o+ zjxzoFzVxvwcq6bU8|k*4<}X6EjS>v@HqzeCcjE`B#uQAz7R7-<%w9uWeVt)a&+aJZ zowvPG6!e(H`6L3fvlFzi`U)p<6x{AeX|x=(L;pN7AT6qr0=+EXW3b z%IF|74ac8XL}30YB($Xv;{s?&KMODd^(Yb%UBbL4I+=ZS%3+U!DRzgNh?jOixcQZEx9QX>v&azRjUEHh7ViZ)Ij8<*`=c0SpjW z{R)Q_5JjshB`k2>Q21Q^4tu2XZ<#shit3wc3TB%!6ohlZ1X8(i`}Xyps70;{ir{jM zk(h3S9hFsnTAhmJF<&M!xlXEN4ldaIcd+8crXCm)hbSSsO+uFc7p7i!x{iIng+-F| zM!ogzyN}=F-0wPoN{vI*Y?S9$Fe*LR)Ba=NnDm3@U6;G@U}^%^DMl6-%rh|>8X09D zuLn3gLaL1H;FrBEzYnRhE{YPgT??0r1>YOB&t5@Bspu(42TeFm-OqWK=-_Ug)2QR9 zQ6!fWG8|vvW0P|y=YP&is0r;SvV{yC;%Nhs;Vo z##Bj;@mL^yv6J2wlhs0I`@1ArX{}Sek6Q})L3^A0jTO^HiYbBsx{hrNtgXAYCVnwK zR2SkpY8I_o+w@Y8C)sn{M*OH0f`&;|If!hjZc0TaLzCrH(VCq)sDI83dvUzp|g4x3P zXNRkSaiV?u0mzF$6X0hoYE~JG306aEA%(>@oT8zjAvsC%q;qqQrn{&S?2ht)GaJ;? z8~ITC0j6Xt+$k#B__)8wgfXNUnWikJtGgQzwj8uZ8r=P$kpY*oD}COGan?okNU1CX zvrS3I(euuJ2>`Oc(FVv{v%^Lz()wezPx$ln4w$-q$LteZD-gZ;1~I zS~oq13&BLzI;DxIjPgj153sKhMc1)J$6~!cpX2X_d zt#?;xH&9(KxT~sTZ+u}7(+3li1+~__6jJQRJrlx42?;O|YRfB4+`7&oLWGgD)ij24 zpL5qgOYdL4EX75_72ZKF72Wnp%UX_1#lpe@dJJW3EaWrv{>*1!<`Wzi)+RKr^l#la zAKP+-p1U89Ty`0W?}5*F*`5bFFo?~rEIYt(vLBNAJxWAv`9rwj1g9E7Whv}+ zpXd|atEB_QOsVDL2dVABLqFkQ$``J=?78fZbn$4qn~BU=YcZ9RYg*t7_gk7ozPt&#^A*MVW0q z+&{(qet@j9imIwbUT0mzMWYo&O4Y6Ps*NZ0Y$@7tva@R6V@GHqSQky5cyZuEq8!hM zIik+_0`#F>1GAu5N}&;t@nk!JSE|JD6z`7A{AcXy9u;06L z9RxL(a?M_r)kNUOX=z{rEBu}Jmee*{-_X@rmbGix=z9%XVa|?Z{uY`|g{NMoYbNhe z+!uB-u8JFb(bd(DK|TmZs|T}*5*0>2%8geSa4puI`-+7d+l7Q|FA}tfDdf%Tj=6am z{#y^bfWI-d8-Ct|O?JM+4*S~#LZut_J<#U@j3O|wzGAIU*3?l-e!d=aqPc#U0iqn- zz&imZUH>Mjwk=VZbmAh=h_52K0~Os;kb_L?vHDL2p$ml~h*V10)jh+pg0PEX;wSOm z^5OAok#b_1qxv~`i%z6(*s?;>?(PSQ0p*;1veLG^(uMqrftjumj0!QlCn`=l8L>s$ zlZ($s(3|v@T3hSvX5f->!_Z1rR@TKsskPG~7el_`Ik)4XmLUMt9=QXmt!xke1dph% z7@uv^*6}cC>nT_8Q$2B5REnQ<-|0U360OradI&nJ{21o#@u>~&b&LFuol>1~fd)um z4S@^V=w5f$*_p;liCt%Jz@ArZ+$p>KjH)K+a;HGUdVq@3DQWxE%_mp{T(J0Y0A$Pc zZHPc^Oa4lE@yYLQJt6q&L}J+LZBZ?I+p~p6kysWAO!D+UScP>4_H8%QY;tgbDjo%) zD~$NvDJ!;k!UjzMengh04v4>?A}3q)EA_6WZB98n+iz10VyK{|hC?#xL-Dib;W#zU z&{Uc}wUS?-yK>rK5_21V#5;ujs>04uMQ@5xeIDDs@bKv`?UDxu#0+AR)Z@n-8w-lh zRb7X|MWx5lnlH2v5r9($ruNbKcvyH_2(=uQJ1=tPfP*PPl>f{5gpW#8iMicjS@16F zTx&qVY1RUnCEntb7eEDjj?v6N95K_Eq^j;u~yocqH_t&o9 z@NDBS6%?Ft`?m`Z_XY(8jYI{KVn+A*&D+aU>3+C>iZMN;a{JeJEeo80sI2;4xjPp$ z10bZpaKw4NMYDTqeAwlK=e4*+N=Qd0xKvzZM3I~*;fqBT8Ga3+-P#XjrmzDNXB`O9cd;!~kObr{}Zm`Wq2 z_K|eq+sv6({8JN%d`;$4H*kj10z;SNn;*_Vzmlo&!|^Kko}* zw#JjOEJI_MUFTqqpk@{k71cn&D8LjA%c zIKajy$F9eOv+4*MP0d@*dLK!c39C$HhVgWzhxZ38y*}kd+>b(v+?lNp@$M~JLvPFO z`Oj??1aEbQZuABUJot!1UGdCqt(faB5fKCq))7}@bMaV9Gc9*ll6>Zdlf+5HJ%M7`>6PR`jO48-Yz$B|4S^13?Ma1qc=QFz6> zp3IQQ9gK{-{{OE~?o4Rv=xB03yUF>fklk`(vcH|hiHA_~^HuuqL%_>vh7R7KBPaOw zBu^1ObogP;|M_90V#4y)=N63=*PyObBSEGE!7Rs;l9xc8SL&(!xIl#Qq4#NhGJdAmftgVl=vee@9$7*;V8 z=T<*hlst~{FVSJJcJ@G4;p(}de+Z(uDytJWQVV-7to@($+-JDax_HFb2X;VK!5*b zjAmWfr0CQy$*hMjzUK^{>5fhq6qWiCEc9^UGq2M_uyI8n`sf_8F#MJ3b53*o?^4XkfC2a)qc=7E8rdIx z_X1oRdO*Kgenfr29Lw# zZPwXRiC>yCUR`DEu80vjC$`y7VOwID;HW#Q0Bs(0gYicjQ^YKPpf;^Ky<$=Op8)>N z$D&#=2*ppnJkVglEGV=C2U>;1FV4N1Z#I!wNayz+=BVPxmC&bS-of7BM<* zc%4VhXiv+_wj5)QrJfh6*x~V!!}`)39H-J`&u-;SUfc(X=It z;qf9^p%4JT*rXS#+@AGK9_*XPB7Hr!8yQI?hFyL3Oo^v#B!Baf-z(=gLqds0IZcD- zZ@v674te>+7s7rH#hQY@QfJIg!v9dkkTaY?xMRW9@{D-zEHB4soksc|B6NeA&UbHlYsxcftrW z^3BTrN|#pfude?35>W5M@6^ggvSz+`Rlo87+YPTMC&vcE>u;t7%W_|ts{i4M$0GYb zADFcyCbE|=ZGOTiU-$Bos;?aI)U|Ra(57Huqu<6II4qPj`SGv&UH8h@3O@#(S>V{^ zv;%nXrTo=a<<7kmrY0I}lSup+CGi;)LYBspr|8eJnc$+y?|zz@xqH%4)hCYN2Fgbn zU_EsrKBs11Rg8e