pax_global_header00006660000000000000000000000064145605037710014522gustar00rootroot0000000000000052 comment=5507063454b1b8c930db99818a88b52f1f143418 vuln-1.0.4/000077500000000000000000000000001456050377100125105ustar00rootroot00000000000000vuln-1.0.4/.gitignore000066400000000000000000000000771456050377100145040ustar00rootroot00000000000000**/.terraform/* .terraform.lock.hcl terraform/terraform.tfvars vuln-1.0.4/CONTRIBUTING.md000066400000000000000000000017431456050377100147460ustar00rootroot00000000000000# Contributing to the Go Vulnerability Database Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! ## Reporting a vulnerability To report a new *public* vulnerability, [open an issue](https://github.com/golang/vulndb/issues/new), send a GitHub PR, or mail a Gerrit CL. Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. ## Contributor License Agreement Contributions to this project must be accompanied by a Contributor License Agreement (CLA). You (or your employer) retain the copyright to your contribution; this simply gives us permission to use and redistribute your contributions as part of the project. Head over to to see your current agreements on file or to sign a new one. You generally only need to submit a CLA once, so if you've already submitted one (even if it was for a different project), you probably don't need to do it again. vuln-1.0.4/LICENSE000066400000000000000000000027071456050377100135230ustar00rootroot00000000000000Copyright (c) 2009 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. vuln-1.0.4/PATENTS000066400000000000000000000024271456050377100135560ustar00rootroot00000000000000Additional IP Rights Grant (Patents) "This implementation" means the copyrightable works distributed by Google as part of the Go project. Google hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, transfer and otherwise run, modify and propagate the contents of this implementation of Go, where such license applies only to those patent claims, both currently owned or controlled by Google and acquired in the future, licensable by Google that are necessarily infringed by this implementation of Go. This grant does not include claims that would be infringed only as a consequence of further modification of this implementation. If you or your agent or exclusive licensee institute or order or agree to the institution of patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that this implementation of Go or any code incorporated within this implementation of Go constitutes direct or contributory patent infringement, or inducement of patent infringement, then any patent rights granted to you under this License for this implementation of Go shall terminate as of the date such litigation is filed. vuln-1.0.4/README.md000066400000000000000000000030331456050377100137660ustar00rootroot00000000000000# Go Vulnerability Management [![Go Reference](https://pkg.go.dev/badge/golang.org/x/vuln.svg)](https://pkg.go.dev/golang.org/x/vuln) Go's support for vulnerability management includes tooling for analyzing your codebase and binaries to surface known vulnerabilities in your dependencies. This tooling is backed by the Go vulnerability database, which is curated by the Go security team. Go’s tooling reduces noise in your results by only surfacing vulnerabilities in functions that your code is actually calling. You can install the latest version of govulncheck using [go install](https://pkg.go.dev/cmd/go#hdr-Compile_and_install_packages_and_dependencies) ``` go install golang.org/x/vuln/cmd/govulncheck@latest ``` Then, run govulncheck inside your module: ``` govulncheck ./... ``` See [the govulncheck tutorial](https://go.dev/doc/tutorial/govulncheck) to get started, and [https://go.dev/security/vuln](https://go.dev/security/vuln) for more information about Go's support for vulnerability management. The API documentation can be found at [https://pkg.go.dev/golang.org/x/vuln/scan](https://pkg.go.dev/golang.org/x/vuln/scan). ## Privacy Policy The privacy policy for `govulncheck` can be found at [https://vuln.go.dev/privacy](https://vuln.go.dev/privacy). ## License Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. Database entries available at https://vuln.go.dev are distributed under the terms of the [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/) license. vuln-1.0.4/all_test.go000066400000000000000000000072711456050377100146550ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.17 && !windows // +build go1.17,!windows package main import ( "bufio" "bytes" "context" "io/fs" "os" "os/exec" "regexp" "strings" "testing" "golang.org/x/mod/modfile" "golang.org/x/vuln/internal/testenv" "golang.org/x/vuln/scan" "mvdan.cc/unparam/check" ) // excluded contains the set of modules that x/vuln should not depend on. var excluded = map[string]bool{ "golang.org/x/exp": true, } var goHeader = regexp.MustCompile(`^// Copyright 20\d\d The Go Authors\. All rights reserved\. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file\.`) func TestBashChecks(t *testing.T) { skipIfShort(t) bash, err := exec.LookPath("bash") if err != nil { t.Skipf("skipping: %v", err) } var cmd *exec.Cmd if os.Getenv("GO_BUILDER_NAME") != "" { cmd = exec.Command(bash, "./checks.bash", "trybots") } else { cmd = exec.Command(bash, "./checks.bash") } cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { t.Fatal(err) } } func TestDependencies(t *testing.T) { dat, err := os.ReadFile("go.mod") if err != nil { t.Fatal(err) } f, err := modfile.Parse("go.mod", dat, nil) if err != nil { t.Fatalf("modfile.Parse: %v", err) } for _, r := range f.Require { // This is used by staticcheck. if strings.HasPrefix(r.Mod.Path, "golang.org/x/exp/typeparams") { continue } for ex := range excluded { if strings.HasPrefix(r.Mod.Path, ex) { t.Errorf("go.mod contains %q as a dependency, which should not happen", r.Mod.Path) } } } } func TestGovulncheck(t *testing.T) { skipIfShort(t) testenv.NeedsGoBuild(t) var o string out := bytes.NewBufferString(o) ctx := context.Background() cmd := scan.Command(ctx, "./...") cmd.Stdout = out cmd.Stderr = out err := cmd.Start() if err == nil { err = cmd.Wait() } t.Logf("govulncheck finished with std out/err:\n%s", out.String()) switch err := err.(type) { case nil: t.Log("govulncheck: no vulnerabilities detected") case interface{ ExitCode() int }: t.Errorf("govulncheck: unexpected exit code %d and error %v", err.ExitCode(), err) default: t.Errorf("govulncheck: abruptly failed with error %v", err) } } func TestStaticCheck(t *testing.T) { skipIfShort(t) rungo(t, "run", "honnef.co/go/tools/cmd/staticcheck@v0.4.3", "./...") } func TestUnparam(t *testing.T) { testenv.NeedsGoBuild(t) warns, err := check.UnusedParams(false, false, false, "./...") if err != nil { t.Fatalf("check.UnusedParams: %v", err) } for _, warn := range warns { t.Errorf(warn) } } func TestVet(t *testing.T) { rungo(t, "vet", "-all", "./...") } func TestMisspell(t *testing.T) { skipIfShort(t) rungo(t, "run", "github.com/client9/misspell/cmd/misspell@v0.3.4", "-error", ".") } func TestHeaders(t *testing.T) { sfs := os.DirFS(".") fs.WalkDir(sfs, ".", func(path string, d fs.DirEntry, _ error) error { if d.IsDir() { if d.Name() == "testdata" { return fs.SkipDir } return nil } if !strings.HasSuffix(path, ".go") { return nil } f, err := sfs.Open(path) if err != nil { return err } defer f.Close() if !goHeader.MatchReader(bufio.NewReader(f)) { t.Errorf("%v: incorrect go header", path) } return nil }) } func rungo(t *testing.T, args ...string) { t.Helper() testenv.NeedsGoBuild(t) cmd := exec.Command("go", args...) if output, err := cmd.CombinedOutput(); err != nil { t.Log("\n" + string(output)) t.Error("command had non zero exit code") } } func skipIfShort(t *testing.T) { if testing.Short() { t.Skipf("skipping: short mode") } } vuln-1.0.4/checks.bash000077500000000000000000000030611456050377100146120ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2021 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # This file will be run by `go test`. # See all_test.go in this directory. # Ensure that installed go binaries are on the path. # This bash expression follows the algorithm described at the top of # `go install help`: first try $GOBIN, then $GOPATH/bin, then $HOME/go/bin. go_install_dir=${GOBIN:-${GOPATH:-$HOME/go}/bin} PATH=$PATH:$go_install_dir source devtools/lib.sh # check_shellcheck runs shellcheck on .bash and .sh files. check_shellcheck() { if ! [ -x "$(command -v shellcheck)" ]; then echo "Please install shellcheck. See https://github.com/koalaman/shellcheck#installing." fi runcmd shellcheck -x checks.bash runcmd shellcheck ./**/*.sh } go_modtidy() { runcmd go mod tidy } # runchecks runs all checks and is intended to run as a precommit hook. runchecks() { trybots "$@" # These checks only run locally due to a limitation with TryBots. check_shellcheck } # trybots runs checks supported by TryBots. trybots() { go_modtidy } usage() { cat < k8s.txt k8s k8s.txt update_status $? "kubernetes(source)" popd || exit # Clone scanner to a dedicated directory. dir="$GOPATH/src/scanner" if [ -d "$dir" ]; then echo "Destination scanner already exists. Using the existing code." else git clone https://github.com/stackrox/scanner.git "${dir}" fi pushd "$dir" || exit # Use scanner at specific commit and tag version for reproducibility. git checkout 29b8761da747 go build -trimpath -ldflags="-X github.com/stackrox/scanner/pkg/version.Version=2.26-29-g29b8761da7-dirty" -o image/scanner/bin/scanner ./cmd/clair govulncheck -mode=binary --json ./image/scanner/bin/scanner &> scan.txt stackrox-scanner scan.txt update_status $? "stackrox-scanner(binary)" popd || exit if [ ${#failed[@]} -ne 0 ]; then echo "FAIL: integration run failed for the following projects: ${failed[*]}" exit 1 fi echo PASS vuln-1.0.4/cmd/govulncheck/integration/integration_test.sh000077500000000000000000000011651456050377100240320ustar00rootroot00000000000000#!/bin/bash # Copyright 2022 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # Runs the integration tests for whole program analysis. # Assumes this is run from vuln/cmd/govulncheck/integration echo "Building govulncheck docker image" # The building context is vuln/ so we can have the current # version of both govulncheck and its vuln dependencies docker build -f Dockerfile -t govulncheck-integration ../../../ echo "Running govulncheck integration tests in the docker image" docker run govulncheck-integration ./integration_run.sh vuln-1.0.4/cmd/govulncheck/integration/internal/000077500000000000000000000000001456050377100217225ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/integration/internal/integration/000077500000000000000000000000001456050377100242455ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/integration/internal/integration/test.go000066400000000000000000000030251456050377100255530ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package integration import ( "bytes" "encoding/json" "fmt" "log" "os" "strings" "github.com/google/go-cmp/cmp" "golang.org/x/vuln/internal/govulncheck" ) // CompareNonStdVulns compares vulnerable packages in out and want. // For out, it only considers vulnerabilities outside of the standard // library. Assumes the same for want. func CompareNonStdVulns(out string, want map[string]bool) error { outJson, err := os.ReadFile(out) if err != nil { return fmt.Errorf("failed to read: %v", out) } calledVulnPkgs := make(map[string]bool) dec := json.NewDecoder(bytes.NewReader(outJson)) for dec.More() { msg := govulncheck.Message{} // decode the next message in the stream if err := dec.Decode(&msg); err != nil { log.Fatalf("failed to load json: %v", err) } if msg.Finding != nil { if msg.Finding.Trace[0].Function == "" { // No symbol means the vulnerability is // imported but not called. continue } // collect only called non-std packages pkgPath := msg.Finding.Trace[0].Package if !isStd(pkgPath) { calledVulnPkgs[pkgPath] = true } } } if diff := cmp.Diff(want, calledVulnPkgs); diff != "" { return fmt.Errorf("reachable vulnerable packages mismatch (-want, +got):\n%s", diff) } return nil } // isStd returns true iff pkg is a standard library package. func isStd(pkg string) bool { return !strings.Contains(pkg, ".") } vuln-1.0.4/cmd/govulncheck/integration/k8s/000077500000000000000000000000001456050377100206135ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/integration/k8s/k8s.go000066400000000000000000000026721456050377100216560ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "log" "os" "golang.org/x/vuln/cmd/govulncheck/integration/internal/integration" ) const usage = `test helper for examining the output of running govulncheck on k8s@v1.15.11. Example usage: ./k8s [path to output file] ` func main() { if len(os.Args) != 2 { log.Fatal("Incorrect number of expected command line arguments", usage) } out := os.Args[1] want := map[string]bool{ "github.com/containernetworking/cni/pkg/invoke": true, "github.com/evanphx/json-patch": true, "github.com/opencontainers/selinux/go-selinux": true, "github.com/prometheus/client_golang/prometheus/promhttp": true, "golang.org/x/crypto/cryptobyte": true, "golang.org/x/crypto/salsa20/salsa": true, "golang.org/x/crypto/ssh": true, "golang.org/x/net/http/httpguts": true, "golang.org/x/net/http2": true, "golang.org/x/net/http2/hpack": true, "golang.org/x/text/encoding/unicode": true, "google.golang.org/grpc": true, } if err := integration.CompareNonStdVulns(out, want); err != nil { log.Fatal(err) } } vuln-1.0.4/cmd/govulncheck/integration/kokoro/000077500000000000000000000000001456050377100214125ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/integration/kokoro/integration.cfg000066400000000000000000000001741456050377100244200ustar00rootroot00000000000000# Format: //devtools/kokoro/config/proto/build.proto build_file: "vuln/cmd/govulncheck/integration/kokoro/integration.sh" vuln-1.0.4/cmd/govulncheck/integration/kokoro/integration.sh000077500000000000000000000010521456050377100242720ustar00rootroot00000000000000#!/bin/bash # Copyright 2022 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # Run integration_test.sh on kokoro. # Fail on any error. set -e # Code under repo is checked out to ${KOKORO_ARTIFACTS_DIR}/git. # The main directory name in this path is determined by the scm name specified # in the job configuration, which in this case is "vuln". cd "${KOKORO_ARTIFACTS_DIR}/git/vuln/cmd/govulncheck/integration" # Run integration_test.sh ./integration_test.sh vuln-1.0.4/cmd/govulncheck/integration/stackrox-scanner/000077500000000000000000000000001456050377100233735ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/integration/stackrox-scanner/scanner.go000066400000000000000000000025541456050377100253610ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "log" "os" "golang.org/x/vuln/cmd/govulncheck/integration/internal/integration" ) const usage = `test helper for examining the output of running govulncheck on stackrox-io/scanner binary (https://quay.io/repository/stackrox-io/scanner). Example usage: ./stackrox-scanner [path to output file] ` func main() { if len(os.Args) != 2 { log.Fatal("Incorrect number of expected command line arguments", usage) } out := os.Args[1] want := map[string]bool{ "github.com/go-git/go-git/v5": true, "github.com/go-git/go-git/v5/config": true, "github.com/go-git/go-git/v5/plumbing/object": true, "github.com/go-git/go-git/v5/storage/filesystem": true, "github.com/go-git/go-git/v5/storage/filesystem/dotgit": true, "golang.org/x/crypto/ssh": true, "golang.org/x/net/http2": true, "golang.org/x/net/http2/hpack": true, "google.golang.org/grpc": true, "google.golang.org/grpc/internal/transport": true, } if err := integration.CompareNonStdVulns(out, want); err != nil { log.Fatal(err) } } vuln-1.0.4/cmd/govulncheck/main.go000066400000000000000000000010351456050377100170350ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "context" "fmt" "os" "golang.org/x/vuln/scan" ) func main() { ctx := context.Background() cmd := scan.Command(ctx, os.Args[1:]...) err := cmd.Start() if err == nil { err = cmd.Wait() } switch err := err.(type) { case nil: case interface{ ExitCode() int }: os.Exit(err.ExitCode()) default: fmt.Fprintln(os.Stderr, err) os.Exit(1) } } vuln-1.0.4/cmd/govulncheck/main_test.go000066400000000000000000000213241456050377100200770ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Only run this on Go 1.18 or higher, because govulncheck can't // run on binaries before 1.18. //go:build go1.18 // +build go1.18 package main import ( "bytes" "context" "flag" "fmt" "os" "path/filepath" "regexp" "runtime" "sync" "testing" "unsafe" "github.com/google/go-cmdtest" "github.com/google/go-cmp/cmp" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/test" "golang.org/x/vuln/internal/web" "golang.org/x/vuln/scan" ) var update = flag.Bool("update", false, "update test files with results") type fixup struct { pattern string compiled *regexp.Regexp replace string replaceFunc func(b []byte) []byte } var fixups = []fixup{ { // modifies paths to Go files by replacing their directory with "...". // For example,/a/b/c.go becomes .../c.go . // This makes it possible to compare govulncheck output across systems, because // Go filenames include setup-specific paths. pattern: `[^\s"]*\.go[\s":]`, replaceFunc: func(b []byte) []byte { s := string(b) return []byte(fmt.Sprintf(`.../%s%c`, filepath.Base(s[:len(s)-1]), s[len(s)-1])) }, }, { // modifies position lines to mask actual line and column with and // placeholders, resp. pattern: `\.go:(\d+):(\d+):`, replace: `.go:::`, }, { // modify position lines in json pattern: `\"line\":(\s)*(\d+)`, replace: `"line": `, }, { // modify position columns in json pattern: `\"column\":(\s)*(\d+)`, replace: `"column": `, }, { // modify position offset in json pattern: `\"offset\":(\s)*(\d+)`, replace: `"offset": `, }, { // There was a one-line change in container/heap/heap.go between 1.18 // and 1.19 that makes the stack traces different. Ignore it. pattern: `heap\.go:(\d+)`, replace: `N`, }, { pattern: `Scanning your code and (\d+) packages across (\d+)`, replace: `Scanning your code and P packages across M`, }, { pattern: `Scanner: govulncheck@v.*`, replace: `Scanner: govulncheck@v1.0.0`, }, { pattern: `"([^"]*") is a file`, replace: `govulncheck: myfile is a file`, }, { pattern: `"scanner_version": "[^"]*"`, replace: `"scanner_version": "v0.0.0-00000000000-20000101010101"`, }, { pattern: `file:///(.*)/testdata/vulndb`, replace: `testdata/vulndb`, }, { pattern: `package (.*) is not in (GOROOT|std) (.*)`, replace: `package foo is not in GOROOT (/tmp/foo)`, }, { pattern: `modified (.*)\)`, replace: `modified 01 Jan 21 00:00 UTC)`, }, { pattern: `Go: (go1.[\.\d]*|devel).*`, replace: `Go: go1.18`, }, { pattern: `"go_version": "go[^\s"]*"`, replace: `"go_version": "go1.18"`, }, } func (f *fixup) init() { f.compiled = regexp.MustCompile(f.pattern) } func (f *fixup) apply(data []byte) []byte { if f.replaceFunc != nil { return f.compiled.ReplaceAllFunc(data, f.replaceFunc) } return f.compiled.ReplaceAll(data, []byte(f.replace)) } func init() { for i := range fixups { fixups[i].init() } } func TestCommand(t *testing.T) { if testing.Short() { t.Skip("skipping test that uses internet in short mode") } testDir, err := os.Getwd() if err != nil { t.Fatal(err) } vulndbDir, err := filepath.Abs(filepath.Join(testDir, "testdata", "vulndb-v1")) if err != nil { t.Fatal(err) } govulndbURI, err := web.URLFromFilePath(vulndbDir) if err != nil { t.Fatalf("failed to create make vulndb url: %v", err) } moduleDirs, err := filepath.Glob("testdata/modules/*") if err != nil { t.Fatal(err) } os.Setenv("moddir", filepath.Join(testDir, "testdata", "modules")) for _, md := range moduleDirs { // Skip nogomod module. It has intended build issues. if filepath.Base(md) == "nogomod" { noModDir, err := filepath.Abs(t.TempDir()) if err != nil { t.Fatal(err) } os.Setenv("nomoddir", noModDir) b, err := os.ReadFile(filepath.Join(md, "vuln.go")) if err != nil { t.Fatal(err) } err = os.WriteFile(filepath.Join(noModDir, "vuln.go"), b, 0644) if err != nil { t.Fatal(err) } continue } // Build test module binary. binary, cleanup := test.GoBuild(t, md, "", filepath.Base(md) == "strip") t.Cleanup(cleanup) // Set an environment variable to the path to the binary, so tests // can refer to it. varName := filepath.Base(md) + "_binary" os.Setenv(varName, binary) } testFilesDir := filepath.Join(testDir, "testdata", "testfiles") os.Setenv("testdir", testFilesDir) runTestSuite(t, testFilesDir, govulndbURI.String(), *update) if runtime.GOOS != "darwin" { // Binaries are not stripped on darwin with go1.21 and earlier. See #61051. runTestSuite(t, filepath.Join(testDir, "testdata", "strip"), govulndbURI.String(), *update) } } // Limit the number of concurrent scans. Scanning is implemented using // x/tools/go/ssa, which is known to be memory-hungry // (see https://go.dev/issue/14113), and by default the testing package // allows up to GOMAXPROCS parallel tests at a time. // // For now we arbitrarily limit to ⌈GOMAXPROCS/4⌉, on the theory that many Go // developer and CI machines have at least 8 logical cores and we want most // runs of the test to exercise at least a little concurrency. If that turns // out to still be too high, we may consider reducing it further. // // Since all of the scans run in the same process, we need an especially low // limit on 32-bit platforms: we may run out of virtual address space well // before we run out of system RAM. var ( parallelLimiter chan struct{} parallelLimiterInit sync.Once ) // testSuite creates a cmdtest suite from dir. It also defines // a govulncheck command on the suite that runs govulncheck // against vulnerability database available at vulndbDir. func runTestSuite(t *testing.T, dir string, govulndb string, update bool) { parallelLimiterInit.Do(func() { limit := (runtime.GOMAXPROCS(0) + 3) / 4 if limit > 2 && unsafe.Sizeof(uintptr(0)) < 8 { limit = 2 } parallelLimiter = make(chan struct{}, limit) }) tsReadDir := dir if filepath.Base(dir) != "strip" { tsReadDir = filepath.Join(tsReadDir, "*") } ts, err := cmdtest.Read(tsReadDir) if err != nil { t.Fatal(err) } ts.DisableLogging = true govulncheckCmd := func(args []string, inputFile string) ([]byte, error) { parallelLimiter <- struct{}{} defer func() { <-parallelLimiter }() newargs := append([]string{"-db", govulndb}, args...) buf := &bytes.Buffer{} cmd := scan.Command(context.Background(), newargs...) cmd.Stdout = buf cmd.Stderr = buf if inputFile != "" { input, err := os.Open(filepath.Join(dir, inputFile)) if err != nil { return nil, err } defer input.Close() cmd.Stdin = input } // We set GOVERSION to always get the same results regardless of the underlying Go build system. cmd.Env = append(os.Environ(), "GOVERSION=go1.18") if err := cmd.Start(); err != nil { return nil, err } err := cmd.Wait() switch e := err.(type) { case nil: case interface{ ExitCode() int }: err = &cmdtest.ExitCodeErr{Msg: err.Error(), Code: e.ExitCode()} if e.ExitCode() == 0 { err = nil } default: fmt.Fprintln(buf, err) err = &cmdtest.ExitCodeErr{Msg: err.Error(), Code: 1} } sorted := buf if err == nil && isJSONMode(args) { // parse, sort and reprint the output for test stability gather := test.NewMockHandler() if err := govulncheck.HandleJSON(buf, gather); err != nil { return nil, err } sorted = &bytes.Buffer{} h := govulncheck.NewJSONHandler(sorted) if err := gather.Write(h); err != nil { return nil, err } } out := sorted.Bytes() for _, fix := range fixups { out = fix.apply(out) } return out, err } ts.Commands["govulncheck"] = govulncheckCmd // govulncheck-cmp is like govulncheck except that the last argument is a file // whose contents are compared to the output of govulncheck. This command does // not output anything. ts.Commands["govulncheck-cmp"] = func(args []string, inputFile string) ([]byte, error) { l := len(args) if l == 0 { return nil, nil } cmpArg := args[l-1] gArgs := args[:l-1] out, err := govulncheckCmd(gArgs, inputFile) if err != nil { return nil, &cmdtest.ExitCodeErr{Msg: err.Error(), Code: 1} } got := string(out) file, err := os.ReadFile(cmpArg) if err != nil { return nil, &cmdtest.ExitCodeErr{Msg: err.Error(), Code: 1} } want := string(file) if diff := cmp.Diff(want, got); diff != "" { return nil, &cmdtest.ExitCodeErr{Msg: "govulncheck output not matching the file contents:\n" + diff, Code: 1} } return nil, nil } if update { ts.Run(t, true) return } ts.RunParallel(t, false) } func isJSONMode(args []string) bool { for _, arg := range args { if arg == "-json" { return true } } return false } vuln-1.0.4/cmd/govulncheck/static/000077500000000000000000000000001456050377100170525ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/static/govulncheck.css000066400000000000000000000005201456050377100220710ustar00rootroot00000000000000/* * Copyright 2022 The Go Authors. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. */ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 'Helvetica Neue', Arial, sans-serif; } ul { list-style-type: none; } vuln-1.0.4/cmd/govulncheck/testdata/000077500000000000000000000000001456050377100173745ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/000077500000000000000000000000001456050377100210445ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/informational/000077500000000000000000000000001456050377100237065ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/informational/go.mod000066400000000000000000000003471456050377100250200ustar00rootroot00000000000000module golang.org/vuln go 1.18 // This version has a vulnerability that is imported. require github.com/tidwall/gjson v1.9.2 require ( github.com/tidwall/match v1.1.0 // indirect github.com/tidwall/pretty v1.2.0 // indirect ) vuln-1.0.4/cmd/govulncheck/testdata/modules/informational/go.sum000066400000000000000000000007671456050377100250530ustar00rootroot00000000000000github.com/tidwall/gjson v1.9.2 h1:SJQc2IgWWKL5V+YGJrr95hjNXFeZzHT2L9Wv1aAb51Q= github.com/tidwall/gjson v1.9.2/go.mod h1:2tcKM/KQ/GjiTN7mfTL/HdNmef9Q6AZLaSK2RdfvSjw= github.com/tidwall/match v1.1.0 h1:VfI2e2aXLvytih7WUVyO9uvRC+RcXlaTrMbHuQWnFmk= github.com/tidwall/match v1.1.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= vuln-1.0.4/cmd/govulncheck/testdata/modules/informational/vuln.go000066400000000000000000000002031456050377100252140ustar00rootroot00000000000000package main import ( "fmt" "github.com/tidwall/gjson" ) func main() { fmt.Println("hello") gjson.Valid("{hello: world}") } vuln-1.0.4/cmd/govulncheck/testdata/modules/multientry/000077500000000000000000000000001456050377100232605ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/multientry/go.mod000066400000000000000000000001101456050377100243560ustar00rootroot00000000000000module golang.org/multientry go 1.18 require golang.org/x/text v0.3.5 vuln-1.0.4/cmd/govulncheck/testdata/modules/multientry/go.sum000066400000000000000000000004061456050377100244130ustar00rootroot00000000000000golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= vuln-1.0.4/cmd/govulncheck/testdata/modules/multientry/main.go000066400000000000000000000032451456050377100245370ustar00rootroot00000000000000package main import ( "fmt" "os" "golang.org/x/text/language" ) func main() { args := os.Args[1:] // Calls foo which directly calls language.Parse. A() // Also calls foo which directly calls language.Parse. B() // Calls language.Parse directly. // // This will be displayed by govulncheck, since it is the shortest path. C() // Calls foobar which eventually calls language.MustParse (different // symbol, same report) D() // Calls moreFoo which directly calls language.Parse. E(args) // Calls stillMoreFoo which directly calls language.Parse. F(args) } func A() { foo(os.Args[1:]) } func B() { foo(os.Args[1:]) } func C() { _, _ = language.Parse("") } func D() { foobar() } func E(args []string) { moreFoo(args) } func F(args []string) { stillMoreFoo(args) } func foo(args []string) { for _, arg := range args { tag, err := language.Parse(arg) if err != nil { fmt.Printf("%s: error: %v\n", arg, err) } else if tag == language.Und { fmt.Printf("%s: undefined\n", arg) } else { fmt.Printf("%s: tag %s\n", arg, tag) } } } func moreFoo(args []string) { for _, arg := range args { tag, err := language.Parse(arg) if err != nil { fmt.Printf("%s: error: %v\n", arg, err) } else if tag == language.Und { fmt.Printf("%s: undefined\n", arg) } else { fmt.Printf("%s: tag %s\n", arg, tag) } } } func stillMoreFoo(args []string) { for _, arg := range args { tag, err := language.Parse(arg) if err != nil { fmt.Printf("%s: error: %v\n", arg, err) } else if tag == language.Und { fmt.Printf("%s: undefined\n", arg) } else { fmt.Printf("%s: tag %s\n", arg, tag) } } } func foobar() { language.MustParse("") } vuln-1.0.4/cmd/govulncheck/testdata/modules/nogomod/000077500000000000000000000000001456050377100225065ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/nogomod/vuln.go000066400000000000000000000001721456050377100240210ustar00rootroot00000000000000package main import ( "fmt" "golang.org/x/text/language" ) func main() { fmt.Println("hello") language.Parse("") } vuln-1.0.4/cmd/govulncheck/testdata/modules/replace/000077500000000000000000000000001456050377100224575ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/replace/go.mod000066400000000000000000000002031456050377100235600ustar00rootroot00000000000000module golang.org/replace go 1.20 replace golang.org/x/text v0.9.0 => golang.org/x/text v0.3.0 require golang.org/x/text v0.9.0 vuln-1.0.4/cmd/govulncheck/testdata/modules/replace/go.sum000066400000000000000000000002311456050377100236060ustar00rootroot00000000000000golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= vuln-1.0.4/cmd/govulncheck/testdata/modules/replace/main.go000066400000000000000000000001721456050377100237320ustar00rootroot00000000000000package main import ( "fmt" "golang.org/x/text/language" ) func main() { fmt.Println("hello") language.Parse("") } vuln-1.0.4/cmd/govulncheck/testdata/modules/stdlib/000077500000000000000000000000001456050377100223255ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/stdlib/go.mod000066400000000000000000000000421456050377100234270ustar00rootroot00000000000000module golang.org/stdlib go 1.18 vuln-1.0.4/cmd/govulncheck/testdata/modules/stdlib/go.sum000066400000000000000000000000001456050377100234460ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/stdlib/stdlib.go000066400000000000000000000004501456050377100241340ustar00rootroot00000000000000package main import ( "io" "log" "net/http" ) func main() { // Hello world, the web server helloHandler := func(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "Hello, world!\n") } http.HandleFunc("/hello", helloHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } vuln-1.0.4/cmd/govulncheck/testdata/modules/strip/000077500000000000000000000000001456050377100222055ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/strip/go.mod000066400000000000000000000001751456050377100233160ustar00rootroot00000000000000module golang.org/vuln go 1.18 // This version has a vulnerability that is only imported. require golang.org/x/text v0.3.0 vuln-1.0.4/cmd/govulncheck/testdata/modules/strip/go.sum000066400000000000000000000002311456050377100233340ustar00rootroot00000000000000golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= vuln-1.0.4/cmd/govulncheck/testdata/modules/strip/vuln.go000066400000000000000000000001111456050377100235110ustar00rootroot00000000000000package main import ( _ "golang.org/x/text/language" ) func main() {} vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/000077500000000000000000000000001456050377100226525ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/go.mod000066400000000000000000000006061456050377100237620ustar00rootroot00000000000000module golang.org/vendored go 1.18 require ( // This version has one vulnerability that is imported, and // one that is called. github.com/tidwall/gjson v1.6.5 // This version has a vulnerability that is called. golang.org/x/text v0.3.0 private.com/privateuser/fakemod v1.0.0 ) require ( github.com/tidwall/match v1.1.0 // indirect github.com/tidwall/pretty v1.2.0 // indirect ) vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/go.sum000066400000000000000000000014771456050377100240160ustar00rootroot00000000000000github.com/tidwall/gjson v1.6.5 h1:P/K9r+1pt9AK54uap7HcoIp6T3a7AoMg3v18tUis+Cg= github.com/tidwall/gjson v1.6.5/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.0 h1:VfI2e2aXLvytih7WUVyO9uvRC+RcXlaTrMbHuQWnFmk= github.com/tidwall/match v1.1.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/subdir/000077500000000000000000000000001456050377100241425ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/subdir/subdir.go000066400000000000000000000001351456050377100257600ustar00rootroot00000000000000package subdir import ( "golang.org/x/text/language" ) func Foo() { language.Parse("") } vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/000077500000000000000000000000001456050377100241475ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/github.com/000077500000000000000000000000001456050377100262065ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/github.com/tidwall/000077500000000000000000000000001456050377100276465ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/github.com/tidwall/gjson/000077500000000000000000000000001456050377100307665ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/github.com/tidwall/gjson/gjson.go000066400000000000000000000002771456050377100324430ustar00rootroot00000000000000package gjson var prevent_optimization int type Result struct{} func (Result) Get(string) { Get("", "") } func Get(json, path string) Result { prevent_optimization++ return Result{} } vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/golang.org/000077500000000000000000000000001456050377100262045ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/golang.org/x/000077500000000000000000000000001456050377100264535ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/golang.org/x/text/000077500000000000000000000000001456050377100274375ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/golang.org/x/text/language/000077500000000000000000000000001456050377100312225ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/golang.org/x/text/language/language.go000066400000000000000000000001371456050377100333350ustar00rootroot00000000000000package language var prevent_optimization int func Parse(string) { prevent_optimization++ } vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/modules.txt000066400000000000000000000006471456050377100263670ustar00rootroot00000000000000# github.com/tidwall/gjson v1.6.5 ## explicit; go 1.12 github.com/tidwall/gjson # github.com/tidwall/match v1.1.0 ## explicit; go 1.15 github.com/tidwall/match # github.com/tidwall/pretty v1.2.0 ## explicit; go 1.16 github.com/tidwall/pretty # golang.org/x/text v0.3.0 ## explicit golang.org/x/text/internal/tag golang.org/x/text/language # private.com/privateuser/fakemod v1.0.0 ## explicit private.com/privateuser/fakemodvuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/private.com/000077500000000000000000000000001456050377100263765ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/private.com/privateuser/000077500000000000000000000000001456050377100307475ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/private.com/privateuser/fakemod/000077500000000000000000000000001456050377100323555ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendor/private.com/privateuser/fakemod/mod.go000066400000000000000000000001351456050377100334620ustar00rootroot00000000000000package fakemod import "github.com/tidwall/gjson" func Leave() { gjson.Result{}.Get("") } vuln-1.0.4/cmd/govulncheck/testdata/modules/vendored/vendored.go000066400000000000000000000003051456050377100250050ustar00rootroot00000000000000package main import ( "encoding/pem" "private.com/privateuser/fakemod" "golang.org/x/text/language" ) func main() { fakemod.Leave() language.Parse("") _, _ = pem.Decode([]byte("test")) } vuln-1.0.4/cmd/govulncheck/testdata/modules/vuln/000077500000000000000000000000001456050377100220305ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vuln/go.mod000066400000000000000000000005321456050377100231360ustar00rootroot00000000000000module golang.org/vuln go 1.18 require ( // This version has one vulnerability that is imported, and // one that is called. github.com/tidwall/gjson v1.6.5 // This version has a vulnerability that is called. golang.org/x/text v0.3.0 ) require ( github.com/tidwall/match v1.1.0 // indirect github.com/tidwall/pretty v1.2.0 // indirect ) vuln-1.0.4/cmd/govulncheck/testdata/modules/vuln/go.sum000066400000000000000000000014771456050377100231740ustar00rootroot00000000000000github.com/tidwall/gjson v1.6.5 h1:P/K9r+1pt9AK54uap7HcoIp6T3a7AoMg3v18tUis+Cg= github.com/tidwall/gjson v1.6.5/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.0 h1:VfI2e2aXLvytih7WUVyO9uvRC+RcXlaTrMbHuQWnFmk= github.com/tidwall/match v1.1.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= vuln-1.0.4/cmd/govulncheck/testdata/modules/vuln/subdir/000077500000000000000000000000001456050377100233205ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/vuln/subdir/subdir.go000066400000000000000000000001351456050377100251360ustar00rootroot00000000000000package subdir import ( "golang.org/x/text/language" ) func Foo() { language.Parse("") } vuln-1.0.4/cmd/govulncheck/testdata/modules/vuln/vuln.go000066400000000000000000000003411456050377100233410ustar00rootroot00000000000000package main import ( "encoding/pem" "fmt" "github.com/tidwall/gjson" "golang.org/x/text/language" ) func main() { fmt.Println("hello") language.Parse("") gjson.Result{}.Get("") _, _ = pem.Decode([]byte("test")) } vuln-1.0.4/cmd/govulncheck/testdata/modules/vuln/vuln_dont_run_me000066400000000000000000121277421456050377100253500ustar00rootroot00000000000000ELF>`F@@8@@@@@@@@dd@@\ \  LL ppYpYpQtde*@\z ]L  cDme FQ F oLQL yMQMMQM@ 5pYp sY s h @Z@y T[T 6^69 `33aȒzusOsL"F%bC@d&08'SGoyKpIeGBaUHD1ZBOlls3J/i4Zc6OIPqV8t7crZ3fS9/sC-HQsgtwQJ2d-kDM9F1/QpogqjNmq2Y7Uj0F_FEdI;fv8HHl$Hl$HD$ H\$(fHD$ H\$(,Hl$HHD$H\$HD$H\$Ld$M;f*HH$H$H$HLH.1HH}E11H1@H9HqH9H)H{IHH?H!HH|8cpu.u1HLD$PHt$xHZH9IH2HzIHH?H8LRL9LL$HH\$`H)LYL\$ MII?M!NL\$XHuFfAonuxH)fDHufF,fAofuYFTAfuMHAHu'D8fAalu|8@luH=H1DT$HHHT$@1.H {7HD$XH\$ l7H [7HD$`H\$HL7Hn;7.Ht$xLD$PHL$(HD$h.H!7HD$hH\$(6H}n6b.Ht$xLD$PH HH HHL$P1H HH9HXpH8L@xt@tk;ufH|$xLD$HHT$@HD$pt-H'c6HD$xH\$HT6H̦C6-HD$pHL$PHT$@k@3@_H$HĈHH94@,uHDH9<<@=u4IC@H9H=FH FfH9IHHLH<L9uHD$8L\$0HPu)HT$@H\$`Ht$xLD$PLL$HDT$L\$0{H FH5uFHD$0H9H|$8D>H ^FH5OFH9sdDL$DL>Ht$xLD$P+HH4HD$`H\$H4HPl45,Ht$xLD$Pa[VETICH9tH EL EH9s(IHADH EL EI9rL LАHHHHDHHHHD$H\$XHD$H\$I;fWH`Hl$XHl$XHA ۴H@H kHH #'HHH@(H kHH H 'HH0H@HH lHH@H &HHPH@h H xHH`H &HHpHǀH oHH &HHǀH .kHH &HH3DH0D=)"u HDH=DfEWdL4%$vHCHHCH CH9sDD$HHпH5 LeH C=!u HC H=CgH‹D$HHCLCIJDfBDMHIMP0IMXPIM`pIMIJ<Mx ILMh@ILM``ILMIԃ=!uL xnN L =%NL%HT$PHZnLH%HT$PJD(fBD8= uL jNL L $NL0LL jLL $JDHfBDX=m uL kNL@L $NLPLL kLL w$JDhfBDx= uL kNL`L F$NLp#HL kD[HL !$LJDŽfBDŽ=u L NkNL #N LH+kf{HH#lWHdAHHQAH ZAH9s6H5y bH =A=6u HA H=AHAHKHHDfDHQHHY0HHqPHLApILIH<LQ ILY@ILa`ILIŃ=uHPgHH"HT!ML 4gHH"gMHD(fD8=]uHgHT H{"HT0LHg"HH["HDHfDX= uHgHT@H+"HTPf#LHugHH "DHDhfDx=uH@gHT`H!HTpLH#gyLH!jHDŽfDŽ=]u HfHH|!HLHeLHX!H$@[EWdL4%D$D$DH$/EWdL4%D$H$ EWdL4%D$         j ˆe !ш \ r10D$LEWdL4%$s 1D$L!Ȉ D$DL$CH$EWdL4%D$  T$C!ʈ H$EWdL4%|$s Hl$XH`øH$YEWdL4%D$(Hl$XH`Hl$XH`Hl$XH`̋D$L$ D$\$L$T$̹ЉD$T$ D$I;fvYH Hl$Hl$HHHH0fH9Ku-HxH9{u#x@8{uxf@8{u HH 1Hl$H HD$H\$HD$H\$I;fH(Hl$ Hl$ HD$0H\$81HL$HH\$8HD$0H}{HHHtH<LLL I9uQLL LTM9uBDL DTE8u1DL DTE8u HT$HLHD y1Hl$ H(øHl$ H(HD$H\$ HD$H\$HH9 HH9 HHHUUUUUUUUH!H!H HHH33333333H!H!HHHHHH!HHHHHHHH H̸I;fv"H Hl$Hl$ b Hl$H HD$H\$HD$H\$I;fRHHHl$@Hl$@HD$PH|$h1E1MHDiғFCML9IAAEEHEEHEEH1E1L^EiD,0G ,LI9~ H9wߐH\$XHD$PLD$8HL$`H|$hDT$T$A9uDL9pDL$ HL;u,HD$PHL$`T$H\$XH|$hLD$8DL$ DT$L1Hl$@HHLML9EiɓEEMI)L9F$EE)McfD9L9MhM9M)IL)LAII?M!IL9t1PDL$$Ld$(Ll$0LHLaT$H\$XHt$8H|$hDL$$DT$Ld$(Ll$0L|$`HD$P' IϐLHl$@HHHHl$@HHLLHLGLHِHL0HHHD$H\$HL$H|$ Ht$(LD$0!HD$H\$HL$H|$ Ht$(LD$0[I;fHHHl$@Hl$@HD$PHL$`11LFDiʓD1CLƐH9HAAEEHEEHEEH1E1LWEiؓD$8G#LH9~ H9wߐwHt$8H\$XHD$PHL$`DL$T$A9uDH9ADD$ HHD{u'HD$PHL$`T$H\$XHt$8DD$ DL$H1Hl$@HHLސH9EiD0EIH)fH9D0EE)MZD9uLfM9I)LII?M!IfH9t1KDD$$L\$(Ld$0LHHHL$`T$H\$XH|$8DD$$DL$L\$(Ld$0HD$P@?LHl$@HHHHl$@HHLLHH/HHdHHHD$H\$HL$H|$ @HD$H\$HL$H|$ ̀=t H? HwH9"H9ILLII?v=9 Iv[ooftfH5u*HHIH0H0H H HHHH1 : HEIv HHH9uJDJLH9tuHHH1HHHHEJ HtK@wH6JtHH@wH?J|HHHHH1tHHHHuH1H1H9HDAooftfH5!oFoOftfH5oF oO ftfH5oF0oO0ftfH5H@H@I@I@ioooof oo t5u#t5uH@H@I@I@rw`wFwHHHHHHH@=thH@oooVo_of oo ov0o0ftftftftffffH@H@H@tH1H@r=oooV o_ ttH@H@H@twH1wHvHHHHHH9tH1HLHTH9Ht7H H@wH6HtH@wH?H|HH)HH9uHHHHH9uHHHHZH9wHzHw$fEHTf7fD9HH9rCHw@fAXfEHTf7fD9tHH9rfwf9xHH9rHw!EHT7D9QHH9rHw?HTH)A\E7D9tHH9rt89 HH9rHw"MHTH7L9HH9riHwBHTH)I\MH7L9tHH9r=Ht8H9HH9r!Hw1AoHToftfHeHH9rHw`HTH)AoDAooftfHtHH9ro\8ftfHHH9rH w)~oHTotthHH9rRHTH)~oD~oott HH9ro\8ttHH9rwIw`=yH sIpf`AoHtII)f:a L9vLH9rf:aN L9wH~HL)I;H|$HT$LD$ HD$(IL\$8H|$HT$LD$HD$ IL\$(fHnf`f`fpH|THH HDoftfu%HH9rHoftfuIH)HI8HtHFftoftft9sIoLftfщtIÀ=*ffHnL\}xot}u&H L9|Lot}u wIH)HIwHt$H\$D$ LD$(Ht$H\$D$LD$ I;fvPHHHl$@Hl$@H\$XHuHH\$8HcHcIcHE1MHwHHl$@HHÉD$H\$HL$H|$ t$(DD$,D$H\$HL$H|$ t$(DD$,hH@Hl$8Hl$8 Hl$8H@IHHHH=vHHHHHHI;fv"H Hl$Hl$Hl$H HD$H\$)HD$H\$H Hl$Hl$HH fHl$H I;fv)H Hl$Hl$HHHHfbHl$H HD$H\$肷HD$H\$I;fH Hl$Hl$W.u{w.u{\IN0H/dxdvH H(~H1HHH H1ЉH1H!VjnuH1HckRHHl$H ùMHl$H H!VjnuH1HckRHHl$H HD$H\$菶HD$H\$DI;fH Hl$Hl$Wf.u{xf.u{\IN0H/dxdvH H(~H1HHH H1ЉH1H!VjnuH1HckRHHl$H ùKHl$H H!VjnuH1HckRHHl$H HD$H\$荵HD$H\$I;fv=HHl$Hl$HD$ DHL$ HHHHl$HHD$H\$HD$H\$I;fv=HHl$Hl$HD$ D{HL$ HHHgHl$HHD$H\$讴HD$H\$I;fH0Hl$(Hl$(HDHt}HRHztr@ t4HpH!VjnuH1HHHckRHHl$(H0HpH!VjnuH1HHHckRHHl$(H0HHl$(H0HI@HH1HMp pHH* HD$H\$諳HD$H\$I;fH0Hl$(Hl$(HDHtyHztr@ t4HpH!VjnuH1HHHckRHHl$(H0HpH!VjnuH1HHHckRHHl$(H0HHl$(H0H-?HH1H1TnHH) DHD$H\$苲HD$H\$I;f\HhHl$`Hl$`P@PHH H\$xH5$HHHl$`HhHHHl$`HhHH{Hl$`HhHHHl$`HhHD$p1pHx@uHHHl$`HhHHHl$`HhHHHl$`HhHP8Hp@Ht$H1vHHt4HuHHː;Hl$`HhHHHHl$`HhHHHl$`HhHT$XHH|$@HH\$xHt$HHHH9}SHD$@HL$8HT$XHHJHL$PHZH\$0ItHD$8HT$xHt$0HHD$PHL$8*HHl$`HhHT$(Hp0H>HHHHfHT$(HH\$xHHD$pfDH9P@wHHl$`Hh<HH1H证JlHH& [HD$H\$HL$HD$H\$HL$r̸8 f9 ̋9 HH9 HH9 u HHH9K1ɉ .! f.! .!@K.!! f.!@Kf.!!I;fv6H Hl$Hl$HHHHfH9Kt1HHl$H HD$H\$HD$H\$I;fv8H Hl$Hl$HHpHKH9t1 HHlHl$H HD$H\$蓭HD$H\$I;fv8H Hl$Hl$HHpHKH9t1 HH,Hl$H HD$H\$3HD$H\$I;fH0Hl$(Hl$(Ht9HPHt?p@ tH9Hl$(H0H2HHHl$(H0øHl$(H09HH1H&f;~hHHl# HD$H\$HL$rHD$H\$HL$;I;fH0Hl$(Hl$(Htp@ tH9Hl$(H0H2HHHl$(H0øHl$(H038HH1HCZ}gHH" HD$H\$HL$葫HD$H\$HL$f;I;fH Hl$Hl$=at8=et/=]t&H}H萹Hl$H H? HrH *H *H *H *Hl$H ê[I;fvOHHl$Hl$H DHt*1HHu Hl$HHAQFI;fuH8Hl$0Hl$0xe@GHH H H!HD$@D$L$HbHHHX H H@;HL$@HY H HH@蛛HL$@HQ H H5HH 6HL$@HQ H HHHQ H HHPHpHQ H HhHj ŜHL$@HY H HHn1D|$ H zHL$ HL$@HL$(HL$ H $f軧EWdL4%Hl$0H8HA,H޴(HD$跨HD$mI;fvNH Hl$Hl$HJHL$HjHH\$'HVlHl$H 觧HHl$Hl$IN0HH`H0HH2HZH`HH`H9huH莜Hl$HHHl$Hl$=tH\$(HD$ zHD$ H\$(HHl$HHpHl$hHl$hH=zHD$0D|$8D|$HD|$XHHT$8HT$0HT$@HD$HH\$PL$X|$\t$`DD$dHD$8H$EWdL4%HD$0H=sH1Hl$hHp1Hl$hHpH$H\$L$|$t$DD$vEWdL4%HD$ H\$(Hl$hHpI;fvoH8Hl$0Hl$0HBHJZ r$z(DB,HRHT$(H$HL$\$t$|$DD$OEWdL4%HD$ HL$(HHl$0H8膥I;fH0Hl$(Hl$(H=tJD|$HD$ H HL$HD$H\$ HD$H$苤EWdL4%Hl$(H0H$H\$EWdL4%Hl$(H0HD$H\$D{HD$H\$LI;fv;HHl$Hl$HBHJH $HD$EWdL4%Hl$HzH`Hl$XHl$XD$hH=fD!={D$$=kt Lt$(HT$(1HL$xH\$pHt$hHH92wH9rw0H$H\$HL$6EWdL4%D$D$$D|$0D|$8D|$HHHD$0HD$$HD$8HD$hHD$@H\$HHL$PHD$0H$ѢEWdL4%*H$H\$HL$EWdL4%D$D$$|$$uD$hH\$pHL$x۵ԵHl$XH`I;fv[H0Hl$(Hl$(HBHJHZ HRHT$ H$HL$H\$"EWdL4%D$HL$ Hl$(H0蚢H0Hl$(Hl$(=DHH\$@HD$8IF0HD$ H08H@H褂HD$ ƀHL$8H $HT$@HT$D軿EWdL4%D$D$HL$ Ɓ8菂D$Hl$(H0H=N PH4e@;HHl$Hl$HtBHD$u"H Ht HHI11H\$1!Hl$H1Hl$HHLH9~HH4HIfDH9wH9rHH9wfH9sHl$H1Hl$HH(Hl$ Hl$ H\$8HD$0HDtZHD$0uBIF0LfH9t*H9HPt$uHD$0HH+Hl$ H(Hl$ H(Hl$ H(Hl$ H(HHtH9rHH9sHl$ H(D|$HD$H:HD$HD$8HD$HL$HD$H$EWdL4%Hl$ H(I;fH(Hl$ Hl$ HBHJHL$HD$HLiDHD$H^D{HD$H$kHHHl$@Hl$@HxtlH|$(Ht$ HD$PH\$8HL$0HJtHL$(HHD$HD$DH9u Hl$H H# D{HL$( lHD$Hl$H HD$RzHD$HH8Hl$0Hl$0HD$@IN0LfDH9HL$@H9 soH9JriD|$D|$HD$(HHD$HD$@HD$ HD$HD$(HD$H$D{xEWdL4%HD$H\$Hl$0H8H_Hl$0H8H_Hl$0H8I;f HPHl$HHl$HHJHL$8HRHT$@H.tHu8H|$8HG=u HTH HS軘Hl$HHPHD$0H\$({fH H uUHHdebugCalH9ufxl3ux 2H9@H9fxl6{x 4gkH aHHdebugCal@H9uxl1284H9uxl256f H9!xl512 @ H x 2VHHdebugCalH9uxl102ux 4H9H9xl204x 8fDHHdebugCalH9uxl409u x 6tzH9H9uzxl819uqx 2taiHucHHdebugCalH9uxl163u fx 84t6H9H9uxl327u fx 68tH9H9uxl655ufx 36u Hl$HHPH~GHruntime.H9u8H|$8HG=u HeH Hd荖Hl$HHPHL$0HD$(2oHL$@HH9tHHH9HD$0H\$(11t.H|$8HG=`u H#DH HDHl$HHPuHPHl$HHl$HD$ D$ Lt$D|$D|$(D|$8H HL$LHL$ HT$PHT$(HD$0HD$ HD$8HD$ HD$@HD$H$tEWdL4%H-s|$ t-HD$HH0T$ hlHH`HHT$ƂHl$HHPI;f<HHHl$@Hl$@HJHrHt$Hz H|$0LB(LD$8HZH\$(HTeHD$ HH8 VHT$H=u HL$(HHHxHL$(處H|$ =u HfHHHlHHfHtNHq0H9uaHD$0hHT$8ldžhHH`HHǁHƁHHl$@HHH;DusI;fvpHHl$Hl$IHHIHL$=u IdžLHLj1蒔-HL$IHqHl$HsI;fH8Hl$0Hl$0ILl$(D$HD$HD$HD$HD$D$D|$HmHD$HD$HD$ HD$HD$(D$HT$HD$D$HT$(HHl$0H8Hl$0H8HD$rHD$DI;fvFHHl$Hl$HJ9u%HD$ YH$H\$論EWdL4%Hl$HqI;fHHHl$@Hl$@HD$PH<H5=HH\$XHD$PHt$1HHH9HzLfH9}ZE A=tE1MHL$(HT$8LD$0H|$ HHLIHL$(HT$8H\$XHt$H|$ LD$0AHD$PE1EtHCH9r2H)H_HHH?H!LHHl$@HH11Hl$@HHHvHc?EHD$H\$5qHD$H\$Ld$M;fHH$H$H$HHu H H4HH$H\$PHL$xHPHH$HQHH\$`H$HH$Hy H\$XH$H$HHl$Hl$RHmH>H$HDŽ$HT$xH$HT$PH$HH$HDŽ$H$H$H H$HDŽ$H$H$Ht$`H$H1H$>HL$XHT$`H9HD$pH\$HH$H$fuH\$HHD$pH$HA;H$H\$hH$HIHHL$hH9uHH$D{u1H\$pHL$HH=N` z@1H\$pHL$HH=QX[@H$HH$HHl$Hl$蛕HmH<H$HDŽ$H$H$HH$HDŽ$H$H$HT$`H$H(H$HDŽ$HQ HqH$H$1H$H@;=H$HùH|$xHt$PLA II1H;@H$HHD$mHD$WI;fv6H0Hl$(Hl$(HD$8HH1H$>Hl$(H0HD$H\$mHD$H\$I;fv6H0Hl$(Hl$(HD$8HH1H#n>Hl$(H0HD$H\$HL$lHD$H\$HL$HD$L$(M;fHXH$PH$P@H IHL N NL t(H}#fI{LoNNLL$@L$GH$H$LL$`D$H$HfHl$Hl$蜒HmHruntime H$H error: H$1ҾdH$AHI9fDEA%tlIL9sZHT$XD\$FHLHH5 HT$XLL$`L$@D\$FIHHH$L$GH$E\8qLZM9!L$BTxtpH}cIPH9sMHHHH5 LL$`L$@L$HHHH$L$GH$D:-IHILILD$D$ADyH}cIPH9sMHHHH5O JLL$`L$@L$HHHH$L$GH$D:-IHILD$D$AJL1HL>H$PHXMLk0FILL$HLfH r,IHIHHL$IL)IrILk0FHL)HMhMI?M!NIH9s?HT$hL|$HL$0HHLH5 HT$hL$0L|$HHHHt$xH\$pH$HHLL0H$L$GH$LL$`L$@L$Ht$xLD$pH$HLbLUI0FIIHLH r7IHIIHLL$IM)IrILh0FIL)HMxLI?M!NHH9sNHD$PL$8L$HHH5 HHHL$8L$HHHHD$PH$HHt$xHT$pN /LHLДH$L$GH$LL$`L$@L$Ht$xLD$pH$HELLLLHL@ۊHΊHй HD$H\$L$@|$HfHD$H\$L$|$Ld$M;fOHH$H$H$H$HHlc\rR&fD#>xuLH DH9HCHD$(H HL$x!HD$xH\$(荽#>`H ͕ H9PHHD$pּHD$pGPf4Cu8H Q H9HHD$p蚼HD$p fD\rRH H9HHD$@WHD$@Mȼ H9D$8膺D$8{ysu8H B fH9HD$hJHD$hD;趺C֙H ~ H9HHD$XHD$XvDH u8H H94D$軹D$Q,5H H9CD$ L$jD$ZL$Z豾̹Wsu8H ё H9HHD$`HD$`茹(cu.H  H9uXHD$h@۸HD$hѾLX'u.H  H9u"HD$h誸HD$hD蛾"O舸H wH$HĈHD$H\$`HD$H\$I;fHĀHl$xHl$xH$H$H$HD$`H\$ H$IHHeHa$H$D$ɷHD$`H\$ HgD$@;H DOH$HHD$XfHD$`H\$ WH`gFHD$X;HL *襷DH$HHD$PHD$`H\$ HfHD$P۽H ʿEDH$HHD$P襶HD$`H\$ 薿Hf腿HD$P{H jD/H$HcHD$PFHD$`H\$ 7H@f&HD$PH,  腶DH$HHD$PHD$`H\$ ׾HeƾHD$P軼H 誾%DoH$HHD$H膵HD$`H\$ wHefHD$H[Hl JŵDH$HD$@&HD$`H\$ H eHD$@H eDH$HD$@ƴHD$`H\$ 跽Hd覽HD$@蛺H 芽DOH$HD$@gHD$`H\$ XHadGHD$@f;HL *襴DH$HHD$@HD$`H\$ HdHD$@۹H ʼEDH$HHD$8観HD$`H\$ 藼Hc膼HD$8{H jD/H$D$DHD$`H\$ 5H>c$D$ZH& @{H$D$0@۲HD$`H\$ ̻Hb軻D$0谵H @蛻eH$D$HL$oHD$`H\$ D[D$ZL$Z袷f軲 H$D$0HL$(HD$`H\$ D$0L$(ToH$HHL$pH@HD$X̱HD$`H\$ f軺H 誺HD$pH\$X蛺H 芺WH$HD$hqHzaD[HD$`H\$ LH ;HD$h豹謱Hl$xHHD$H\$sYHD$H\$L$XM;fYH(H$ H$ H$(*T\H$H\$0H$H\$D$(腟EWdL4%HL$HHAHT$0H9LAL9#1H(x1H$HP*諕rDI9\H$DL9D9AE fA.(uDL9A*uHD$(H)HT$8HBHD$0HHH?L!HH$H$HL$D$)訞EWdL4%HL$HLAHT$0@I9|%1Hq.H$Hf{)֔bL9NH$D fA).uHH$HHl$Hl$~HmH H$HDŽ$ H$H$HT$(H$H H$HDŽ$H$H$H$HDŽ$HT$8H)HHHH?L!HH$H$H,H$HDŽ$H$H$H% H$HDŽ$1H$ H%HH~ ًHL{L{HD$@HH$Ht$0';LS{LzHzHD$`HkH$Ht$0D'UI;fH(Hl$ Hl$ =yHD$0fHOH\$1HH9}kH57L(IH)HI9HL$HEL0I40HtEtH HHuRHD$0HL$H\$D== u HH=1@tHl$ H(H0^'ّHL.yH/]&f軑HD$THD$H3٤H/dxdvH1HHrltbHrCt7HvH0vHHHHHHqHƐHH6_H0HUHHyHǐ2Љ<4HHyHIH HH HH L1HH(~H1H1HHHO}'NH1H1HH1H0H(~H1L@I1HLIHH𐐐H1HCHLHwHyHLAIH?I0HHuLI(~M1LPI1HLIILCIƈjM1LcI1HLIILC IL7ueXM1L{(I1HLIIHАI1I1H1HC0LLHLH0gH1H15̋H(~H1H1H3ǢH/dxdvH1HHH1HHK}'NHᐐH1HH(~H1H1H3fH/dxdvH1HHH1HHG}'NHᐐH1HHl$Hl$HHHHDHrH } 1Ҿ HH(s>HNH@HHH HHHsHHйHHl$HùHHl$HùHHl$HHй@uI;fH@Hl$8Hl$8HP8Hx@H\$PHD$Hs@uD1Hl$8H@ÈL$XHCHHHHHAHBH\$HHL$PeDHt HD$ H HHD$ HT$HHB@HHH 1H >95=uHL$HHHT$PHP HHL$HpHPHH\$PfpHD$0@HD$0DHrHD$0HxuL$Xt1Hl$8H@Hl$8H@f{HD$(H\$H_ %1=NuQHL$PHHHL$HHHHL$HH =*uHL$(HHHH D{HxHL$(oHxHL$PfoHxHL$Ho롋@;HD$(H\$H*_ 0=uQHL$PHHHL$HHHHL$HH =uHL$(HHHHe DۃHxHL$(-oHxHL$PfoHxHL$H oH=:HD$H\$L$&NHD$H\$L$HHʋs3qH!ֿ LGHH!LǐLM@MMtI9uI9HuL1I;fHHHl$@Hl$@IV0H?HrH:IHH<H9HT$HD$(IPIH1۹3%HD$ HT$H2HH0D|$0H5Ht$0HD$8HD$0@ H\$ HSHt$H9VuF=ϜtH6?葤H\$ H %?HH?HD$(HHKHl$@HHHV'萉H@{HD$pLHD$H HSH0H΋I3JH! HzHH!HH|LM@H9tHuIH@Ld$M;fHH$H$HpH8DFAtVDFAIIw=H mB$LFH5LF@/LF8)LFP#LFXLF8LF8fLFP LF0E1HW@EHEPMI0HH$H|$xHt$hLD$`LT$XHT$LL$H11E16HLd$H|$xH\$(LHt$hLD$`LL$HLT$XIH$fH9Lg8Lo@L9L$HL$ H\$(L$A\H@;HD$PHL$ H$HD$x{H$H$H\$8H$HuHL$xHA0HD$pH\$0HT$hHt$XHL$HH|$(HL$@HT$X\ HD$hcHL$ Hu H$H$HHVH$HL$@HT$X\ HD$hHL$PH9t17H${HL$8H9t1HH$f{HL$8HL$PGH$[HuHL$`HD$hDH$t HT$0 HT$0H9t1HH\$pHT$0[HL$PH$HAH$H\$8H$HĨHlHLlmLʻumHD$ HHD$DI;fH@Hl$8Hl$8H H ̴Ht HHI11HT$(HL$1HH9~%HD$ HHxHt$0HH\$1GHY Hl$8H@H|$HH|$HHD$ HL$HT$(H\$Ht$0H9|G/I;fHHl$Hl$H\$(HD$ HL$0H2W (=u.HL$0HHL$ HHHL$(HHDxHH{ {HHL$0IgHHHHT$ XgHxHL$(*gHD$H\$HL$TFHD$H\$HL$D;I;fH Hl$Hl$H\$0HL$8HHPHT$HEV D'=ĕu.HL$8HHL$HHHL$0HHDxHH {HHL$8WfHHHHT$ffHxHL$08f1HD$H\$HL$[EHD$H\$HL$'I;fvTH0Hl$(Hl$(H\$ HD$8HHHH HD$HHL$ HD$8蕀HD$Hl$(H0HD$H\$DHD$H\$I;fvQH0Hl$(Hl$(H\$ HD$8H1HHHHD$HT$8H H\$ XrHD$Hl$(H0HD$H\$ZDHD$H\$I;fvWH Hl$Hl$H=s H }H 'HD$(Hs1@HT$(HHHHl$H HD$CHD$I;fvtH Hl$Hl$HD$(Hu HIH\$0HD$(HȰyHT$0HP=Yu HL$(H HHL$(dHl$H HD$H\$7CHD$H\$hI;fv{H Hl$Hl$HD$(H\$0HL$8H|$(u HCHHT$(Ht$0H|$8HpHx=uHHcHl$H HD$H\$HL$BHD$H\$HL$WI;fvrH Hl$Hl$Ht1D;Hl$H HD$(HR D#HL$(=uHHDxHH SwHxbHD$H\$AHD$H\$jI;fv^H(Hl$ Hl$ H\$8HL$@fHt1HL$HtH\$Hl$ H(11Hl$ H(11Hl$ H(HD$H\$HL$HAHD$H\$HL$tI;fv`H Hl$Hl$HD$(H `3HL$1HH9v+H\HtHT$HHHHD$(HL$HT$Hl$H HD$@HD$I;fv HHl$Hl$HI&{}u@I;fH8Hl$0Hl$0HKHHKHHH΁H HHHH9t%HHHHHHÄtHl$0H8Ht$HT$(HL$H\$ yH W,hHD$(۟H JHD$D蛞H *HD$D{H: HD$ D{VqHu D;|HD$H\$+?HD$H\$I;fH(Hl$ Hl$ HD$01HyHuyHD$0HHH HHH9u Hl$ H(FHD$0HD$7H|#&HD${v葖H< D[{H@?$J{HD$@;>HD$1I;fvHHl$Hl$1Hl$HHD$=HD$I;foH8Hl$0Hl$0IV0=Ɖt!HD$@=HOHt$ *Hl$0H8ûH'AHD$@Ht$ T$1I1uuɐoHL$($ ZEWdL4%HL$(HHD$@T$H\$ HH9|cfy|EWdL4%HD$@L$Ht$ H|Hl$0H8HH8uH1ÄtHl$0H8HH8WH1@@tHl$0H8HohyHD$f[<HD$qI;fvHHl$Hl$GHl$HHD$<HD$I;fHHl$Hl$1ɇ@tVu m@IN0IN0|uAtIFHl$HH@xHuxHD$j;HD$D[I;fvzH Hl$Hl$u?Hl$H É\$褒H]蓛D$舘H wHwHD$:HD$lI;fH0Hl$(Hl$(IV0LH92HD$8Ht$ H,H:HHEHL$Ht$ HV0ƂHD$8HL$uBHV0Ƃ1=Hj,HHtH$HD$WEWdL4%Hl$(H0H vHD$9HD$H8Hl$0Hl$0HD$@Lt$(H}H+H:HEH\$ (u*H\$HrEWdL4%H$H\$HHHD$Hl$0H8HH)HHk+H:tH~HT$(Hr0ƆHD$@H1D<H,+HHtH$HD$UEWdL4%HL$(HQ0ƂHT$@u*,rEWdL4%H$HL$H9JHT$@ Hl$0H8HT$(Hr0ƆHD$@H\$ uLHT$(Hr0ƆH1f;Hl*HHtH$HD$UEWdL4%딸Hl$0H8I;fvJHHl$Hl$IN0LDH9t HuHl$HH qtHD$H\$a7HD$H\$I;fviH0Hl$(Hl$(IN0LDH9t8H\$HD$ HD$ H\$f[D$D$Hl$(H0H- sHD$H\$6HD$H\$sHtOH=t:H|H '3H9!3 H% HHH\HH H~ I;fvHHl$Hl$'Hl$HHD$H\$5HD$H\$I;fvHHl$Hl$Hl$HHD$5HD$I;fH(Hl$ Hl$ f=DHHfH3HHZfHWHHHZHH@v H$H=@HΕ詒H1HH|BHL$Hf;HL$HH(HH HHL$H1HpHHBH|HD$fH?~ H H Hl$ H(HQHcH \H@HһHH!H9Ku2NjHM趔H'誑Hj虔H p{H jH[HJŋHL p/Hv HH6%H( DۓVH %pD車H 誓H#蛐H2$芓D{H jHl oHoH! o2Ld$M;fHH$H$H$H$@$HHHH\$ DH9t1KHH=AHHu%H$H\$ $HH$HL$ H$HL$`HHHHH$LT$xIIH$HL$`LLIHILHfH9Ht$HHpHuEH'H$HHpHHL$`Ht$HL$IH@LHMHT$xHxLH=ܢHАHu$LH DHX$@L$MM9HD$0IMuL pLL$(LȻH TWHH$HLHLL$(ILHL9IOHH9tH]H$HD$0$L$IILIL9rTMIL9s6LL$HL L$LL$HLHH$HĐHLSL+TH+":lHE,)lHlH@SH8'kLNL LiL+iLiLiLHiLH1fDHHt$XHDFIH)MLEJ I9vIE1kIMII@rE1KLL$@HT$`L3H$HT$`H\$ Ht$X$ILL$@IH$MM9tWML$LهH$H$H\$ Ht$X$IL$DDVMIEHHHI1IH1H˹f;H7H$H\$`H$HiHL$pHɶH$H@H kHHH`HD$p蛶L$LH\$`JHH5HPH*H$$IILJ4I9vIAL%ZIOII@rA!L%#0M0II@AA MCAL-MCMu;Iu!HHfq11H$HĐH$!iL\$8Ht$`LT$PLd$hf蛃H6%!芌HD$8DۊH jHD$`D車HJHD$hH\$P;薅豃H E.D{hHD$H\$HL$@|$ a+HD$H\$HL$|$ I;fH0Hl$(Hl$(HL$HH\$@H HT$ HHHH\$HHSHtlHD$HPHHH!H\$H)H谄HD$H\$@H HT$HHt$HHH)HvHH{HD$H\$@Hl$(H0HH\$ Hl$(H011Hl$(H0HD$H\$HL$S*HD$H\$HL$@I;fH@Hl$8Hl$8HHT$0\$PHD$HHL(HL$(HhHL$(HQ8H9uTHT$ I`H9 HD$HD$H\$P@軉HL$0HT$HHD(HD$(hHT$ H\$HL$(HH9A8HqhHHAq`fq`LA8I9rH9HˉHl$8H@ft$LD$ 軀H 誉D$f蛆HK 芉HD$ D{ւHm DeH efL$D;H *D$DH HD$ DVqH@H1D;eHйLHD$\$@(HD$\$I;fH`Hl$XHl$X=uHWL$xH\$p=z=ztWHt4Hu*HuHHDHH  Hl$XH`À=wtHwI9uHwHD$hIN0IN0LLH9QPǁHHtHR@HuHH|$pHt H@HD$PHL$@HT$0@t$&H\$hH@fHLBHu II!Hu IIrIIN IwTLRMtKKLJHB ǁZ@uAtIFHl$XH`LBPMH@MA@MDI@}iMX0O$Mh8M9vXIMI?uM9tIE1?II@MILIM!MH@MX0EH`AfEH`MHhMMHIE1Mt14HлHT$0t$&H|$pL|$@IIHD$PH\$hE9H9ZwHzu MLJHZMAHw$LCIIL FG$LIIkL GIDEL IG AADE EINT(MZ@MA@MDI@}yMj0O|%IR8L9vbIMI?uL9t HT$0E1LIT$H@MHIM!MZ@Mj0AR`fAR`IRhIIRHL$@IHT$0HT$0E1LL$8MtE1f7HDHT$0t$&H|$pLL$8IIAHD$PHL$@H\$hDd$xEtTAzdtML\$HDD$%LT$(LL:NHD$PHL$@HT$0H\$ht$&H|$pDD$%LL$8LT$(L\$HIDMME1HЉ艅H@0f@`HXhHPt$x@tHxdt9t$&@u+HD$(H\$8HT$HHMHD$(HT$HH\$8t$&L$&1L$&1H|$pL|$@IAIٹIHD$PHT$0H\$ht$<$HLL$8L$%D\$'LD$(@uQLHLDtHT$pH2LD$hI9vHBLI)IHHEHBLH\$0HC>EWdL4%HD$(HH0H=otH\$HHL$8HH~CHtHT$0H2HL$8@H9s H)H2$HL$8HD$@H\$H@[HL$8HL$8HT$@ǂ~uAtIFT$'tT$&HH\$HHL$8=stA=stHD$HHHL$pLHL$8=@qtH?qI9uH ?qHT$PfHtHt$hH)H)T$%t111Xt 111iHD$HHl$XH`HpHl$XH`H>1X]LйDDDDLDLDH9B4]H3 @\H< \H@2\HD$H\$L$HD$H\$L$I;fvkH Hl$Hl$=]mtEIN0HHu Lt$HL$HH)HH}HL$H&HL$1HHl$H HD$%HD${I;fv~H(Hl$ Hl$ H HL$/H)HHGHHIH\$HHL$H9s'H\$AtHtHL$H\$Hl$ H(HD$H\$mHD$H\$[I;fv+H Hl$Hl$HHùHHl$H HD$HD$I;fH Hl$Hl$Ht>HHHHpMHH9w>DH|4H˹Hl$H HHùHqHl$H H` Ha7RHD$H\$DHD$H\$UI;fH0Hl$(Hl$(HHtHR@HkHtXHfHu1)HT$HL$H\$ HcHT$H\$ HHL$HHH@Hl$(H0HrB8D{YHD$H\$HL$fHD$H\$HL$2HHl$Hl$H=~  HIV0H/dxdvH H(~H1HHHHH H1ЉHH WH*fH~HH/HHpH!HH4HHLWH*X\WH*Y a/YX/\Wf.vWWH* 0YY,Hl$H1Hl$HH!x?I;fv{H@Hl$8Hl$8HD$D|$D|$D|$(HHT$HT$HT$HD$ H\$(HL$0HD$H$;EWdL4%HD$Hl$8H@HD$H\$HL$KHD$H\$HL$WI;fv;H(Hl$ Hl$ HBHZHJ HRHT$2HT$HHl$ H(:I;fH@Hl$8Hl$8H\Ht HSH5DH v H=HL$XHD$HH\$IV0IV0HT$ HtHHt H)Hi4HD$HHL$XHT$ H\$H5iHt$(H~LCLHH\$H!H~HHwH>u?H܊藈HL$(HH9D HsHl$8H@H>LFN LNDEQDJAuAtIFHT$0H=DhH9uH.h)HD$HHL$XHT$0H53H9t$HH H\$HHH HT$0HHl$8H@HHfHHH5fH„tH|$HLD$L!HyHD$HHT$ HHL$XHgH9tHJqTHhgcH #PTHG)*@;TH *THD$H\$HL$^HD$H\$HL$AI;fH8Hl$0Hl$0HHqHHH!H H9Pr~HHeHpHHHH!H9sQxtGHD$@HL$ H\$H)H\$(HHƈHT$@HBH\$(HHD$@HL$ H\$HXHHl$0H81Hl$0H8HD$H\$HL$H|$ +HD$H\$HL$H|$ I;fHXHl$PHl$PHD$`H\$hHL$pHx(HHWHtzDCRIHL„H:tE=eu H H1o6Hx(=refu HGQH1I6DK=LeuHW1H+6&HS@HH5HL$pH\$hIHD$`P sP fP HHfMF0I/dxdvM I(~M1HLЉID_A EM HDAAE!AH1Au V fV HS@Hz,LL$@H~(uIH :=cdu HT$`HB(H|$`HW(HH4HH\$hHH|$pLL$@HV(H:uT$Ht$HH$HH$HL$PH$~@u+HL$`H @HL$`H$H$^^RTsH HHl$xHHz H  8HD$H\$HL$HD$H\$HL$I;fH`Hl$XHl$XHH;H\$pHD$hHL$Ps@t H #@HD$hHL$PH\$pHPHH2{ HHH\$pKKK HHNH!H{t#HD$(HL$0HD$h HD$(HL$0H\$pHt$h~RHHKH8<sHL$@D$H/pTsHPHH2H1Hl$XH`~RHHHHt HL$H16KuH 4?H\$pCCHl$XH`HHsDD8tEuH|$ DFPLILHL$8DFTAsLIHN0HQH HD$PLÐфu#D$HL$HHT$@H\$pHt$hH|$ |HT$hrTs"H|$8=kPu H&1!Hr0H~tHHD$8>HT$hrPDBQLL$ MI4LD$HMHJrTs"=Pu H;H1f!-HJ8Hyt H> H*HT$hLL$ LT$HC IurRLMBLH6Ht>tCt@u LHt$@XHL$pHHrH1Hu8IV0H/dxdvH H(~H1HHHH H1ЉA HMIslBMuDH9tH.MAIsE 8DAtfLh#DBRIHLH6H9uHLALȹ6#HD$H\$HL$HD$H\$HL$ I;fAHHl$Hl$=ONuHA HyHH;=#NuHY Hy"S QJHS=NuHQ Hy @HP@HzH\$(HL$0H{(u?H =Mu HT$(HB(H|$(HW(HHfHHL$0HHS(H:u2H  EHL$(Hy(=cMuH'HHL$0HS(H=AMuHQ0Hy0DHS(HR=MuHQ8 Hy8{ v;IV0H H/dxdvH7H(~H1HIHL H18Iv0H I/dxdvI8H(~H1IHL H1‰s HȉHHwH!Hp@K @HHH!փ@pHHP@HPPSt HKJHl$HHl$HHD$H\$HL$!HD$H\$HL$I;fHhHl$`Hl$`HD$pHXH\$Ps@tH&@9HD$pH\$PHpHt$@L@PLH(DPKLXXDfRMkMM $E1IMt LML9@@u xILKMtpDPJD8S ueLPEZ ERAuADAIIM!D^RMO$G AfDAsMLX HLMD^RMLX HIDHJHDAIM9u@IE1E1LD$(HT$ L\$X6=JuD8H1f;Hx2Hl$`HhADAADHHEEAG, AvAtADnPMMLIMLDFTAsMmDT$Ll$HDnQMOdIML\$8H4DcA%LL$0AsAFHN0HQH HD$HHHL$XHT$ H\$PHt$@H|$(LL$0DT$L\$8AHD$pEu?D@JAA@MIDIHL!GD AI9LIMHVHH { HD$HHH|$pOJHHNH!HL$ H9t%HHH\$PHt$@LD$(DT$L\$XfHH\$PHt$@H|$(LL$0DT$L\$8Ll$XIIIGD At AtUDFTAs@HN0HQH HD$HHH\$PHt$@H|$(DT$L\$8Ll$XL|$ HD$pHHL$H9Hu)HD$pHT$ H\$PHt$@LD$(DT$L\$X=GuH|$pHH_H|$pHGHHHHH|$(DT$Ll$XL|$ V=Gu HL$HHHHHT$H[HϋNTsM=UGuLXHHHHLKHHxP@L9h(t=#GuLh(Hx(L@AJHKLxXHl$`HhHD$HD$I;fH8Hl$0Hl$0HHK H~$HHHAw>ALDhTAsM+MH|$(LL$XLl$HL\$PD{AtE1Dd$HPHH s LHH$q@tOH$sTfs1BHD$0HK0HQH HD$HHfуH$H$HD$0 H$1҄tH8<st$DD$L@D$L$HT$@H$H|$(ALL$XLT$ L\$PLl$HAAH$Ht$`EWD>EIILT$8N|pfDIDd$JLhHHHHT$8HDhHDpHpHtxH$sPH4HvHHL$HT$@H$Ht$`H|$(ALL$XLT$8L\$PDd$Ll$HN|hANDpAG$D@TAs4NDxA=?uM(iILILDLLKHP0J\xLH@[+H$L$HT$@H$Ht$`H|$(LL$XLT$8L\$PD@TAs5NAM!=X?uM cILILpLLJHP8JLH*H$L$HT$@H$Ht$`H|$(LL$XLT$8L\$PJDpD@PNDxD@QNALT$ Lй(H0 +HD$H\$HL$HD$H\$HL$nI;fHH,$H,$HP HH9HBHHP HHP HP @H9t!DCRLL@EADArH9uO==u H@ Hx1Hx(Ht==u HG H1HHH,$HHD$H\$HL$HD$H\$HL$I;f`HHl$Hl$L$0@HH;HD$ H\$(KtH !)+HD$ H\$({ u HKHPHH s HD$0HHL$(q HʉHHOHH!H|$ DGRILJHJMt)RuHH!LKCfrHH!HLHl$HPRHYHڄH Ht HQ1H}LHl$HHHHsċ2@9t$0u4 @vPQHH(H Hl$HHD$H\$L$HD$H\$L$pI;ffHHl$Hl$L$0@HH;HD$ H\$(KtH !)HD$ H\$({ u HKHPHH s HD$0HHL$(q HʉHHOHH!H|$ DGRILJHJMt*RuHH!LKC4f@rHH#H K1Hl$HPRHqHH Ht HQ1HJ1Hl$HHHHs‹29t$0u4 @vPQHH(H Hl$HHD$H\$L$f[HD$H\$L$hI;fH8Hl$0Hl$0L$P@HH\$HHD$@KtH 'HD$@H\$HHPHH s HD$PHHD$H\$HKKH{uGHT$@HZ@H=9u H\$HHCH|$HHWHHא; HHD$HT$@HHD$@H\$HHL$HHT$@K HHNH!H{t!HL$ H&HD$HL$ HT$@H\$HrRHHK1E1wMHMH{H3H{ H~%IȉAIIO$ROI9KIȉs vf9#LE1'ILQIMMumLWHMLMIsӄF AwHIHELMEEu8INIED9\$PtMHLMLL[IMu#HHLHT$@H\$HIE1HD$H8<sALACLIAw >DAH|$(Dd$L\$HLL$@DkAtE1[HPHH s LHfL$H@H$HT$8H$H|$(ALL$@LT$ L\$HDd$AHt$PE}D<>EI]ILl$0N|,`IuyJL,XHHHzHT$0HDXHD`HpHthHpHHtpH$L$HT$8H$Ht$PH|$(ALL$@LT$ L\$HDd$Ll$0N|,XANT,`AG$LP0Izt8=)t/NT,hAM!=)uM"!ILMLA NT,hM!M"HP8J\,pLHf;HT$0HD`HDhH$sQHtpHL$HT$8H$Ht$PH|$(ALL$@LT$ L\$HLH &HD$H\$HL$HD$H\$HL$fI;fH`Hl$XHl$XHL$xH$HtrH;tlHD$hH\$psf@tH !HD$hH\$p{ uFHsHt$PH$H } HV1vH~1AlH]8Hl$XH`HPHH s HD$xHHL$pq HʉHHOHH!H|$hDGRILJHJMt,RuHH!LKC4@@rHH8<sD$WRHqHH HtHL$HHQ1H7Hl$XH`HHHsH$H9ruD A8uLLL$xM9tFH\$(HT$8LLHuD$HL$HHT$8H\$(H|$hHL$HH\$(H|$hWQHHH Hl$XH`HHHH9OuD 2AwD 2Eu]LLT$x@M9t/EE9uIIIIEfE9uI>IHQHHH1Hl$XH`It!LD$ IILHH\$xuHA6Hl$XH`HL$hIQHT$ HHL$PHHHl$XH`HH@HH$H9zuD1Aw <1@unLH\$xDL9t>HL$0HT$@LHuHD$hHL$0HT$@Ht$PHD$hHL$0Ht$PPQHHH Hl$XH`HX5Hl$XH`HD$H\$HL$H|$ HD$H\$HL$H|$ I;fH`Hl$XHl$XHL$xH$HtrH;tlHD$hH\$psf@tH !HD$hH\$p{ uHHsHt$PH$H } HV1H~1AH]41Hl$XH`HPHH s HD$xHHL$pq HʉHHOHH!H|$hDGRILJHJMt+RuHH!LKC4@rHH8<sD$WRHqHH HtHL$HHQ1H31Hl$XH`HHHsH$H9ruD A8uLLL$xDM9tIH\$(HT$8LLHuD$HL$HHT$8H\$(H|$hHL$HH\$(H|$hWQHHH Hl$XH`HHfHH9Ou D 2AwD 2EufLLT$xM9t7EDE9uIIIIEE9uDI%IHQHHH1Hl$XH`It!LD$ IILHH\$xuH!21Hl$XH`HL$hIQHT$ HHL$PHHHl$XH`HHHH$H9zu D1Aw <1@upLH\$xL9t>HL$0HT$@LHuHD$hHL$0HT$@Ht$PHD$hHL$0Ht$PPQHHH Hl$XH`H411Hl$XH`HD$H\$HL$H|$ HD$H\$HL$H|$ I;fHhHl$`Hl$`H$H$HH\$xHD$pKtH jHD$pH\$xHPHH s H$HHD$(H\$xKKH{uFHT$pHZ@H= u H\$xHCH|$xHWHHHHD$(HT$pHHD$pH\$xHL$(HHT$pK HHNH!H{t!HL$0H{HD$(HL$0HT$pH\$xrRHHsIH8<sD$11uLH{L IDS I~&IDAIIO,dO$M9@IDDK vAAfE9%Ht$XE1$DJRIHLH6HueIDIsքFD8tAw HuHLEu3MIIILL$L9NtLML&L$M9uE1VLT$8Ht$HH|$ HL$PLLLHL$PHT$pH\$xHt$HH|$ LD$(LT$8L\$XAD$Et LM(H$=uHHzIMu"HHH趷HT$pH\$xI1D$AHA;HHMMKI< H$L$HO=XuLHMIJQLKIJu%HD$@H D HD$@H\$xKKHl$`HhHD HGJHD$H\$HL$H|$ HD$H\$HL$H|$ I;fBHXHl$PHl$PHL$pH|$xHH;H\$hHD$`KtH G HD$`H\$hHPHH s HD$pHH\$hKKK HHNH!H{ft#HD$(HL$0HD$`HD$(HL$0H\$hHT$`rRHHsH8<sHt$8D$HHl$PHXDBRLNMI0HtHt$HLF1;KuH j H\$hCCHl$PHXHIHsLL$xM9HuD7A8uH|$ ML\$pfM9uE1t|2D@uH|$`ILD$8UHL$hHHrH1Hu8IV0H/dxdvH H(~H1HHHH H1ЉA HRAHslAHu@M9tL1HAHsB4 D@tiHйIWRLILHI9uIIHйHD$H\$HL$H|$ ;HD$H\$HL$H|$ I;fvjH(Hl$ Hl$ S s@@uH\$8HD$HΉѿHHOH!TH\$8H{tHK HD$:Hl$ H(HD$H\$HL$HD$H\$HL$gLd$M;fHH$H$pRHHsDC DK@AuADAHDAIAD|$XD|$hD|$xD$DHRLLKLL$XMYL\$hILL$pDKAu1M DXRMLKLL$xMYL$IL$HT$0L$LT$ H$H$8H9S uLHHHH$HĠDHRL^MI1fHtHt$PLNL1gs@uHp@H~tHRHHʐHHKHHHH$HT$0H$LT$ UHD`QIMHcD$>Aw >AH|$(Dd$L\$HLL$@DkAtE1[HPHH s LHfL$H@H$HT$0H$H|$(ALL$@LT$ L\$HDd$AHt$PE}D<>EI=ILl$8N|,`Iu|JL,XHHHگHT$8HDXHD`HpHthHHtpH$L$HT$0H$Ht$PH|$(ALL$@LT$ L\$HDd$Ll$8N|,XANT,`AG$NT,hM!MyMz=5uM" LMsHP8J\,pLH@HT$8HD`HDhH$sQHtpHL$HT$0H$Ht$PH|$(ALL$@LT$ L\$HLHv HD$H\$HL$HD$H\$HL$fH0Hl$(Hl$(H9t~HD$8HL$HH\$@=+t)HPHt HHH{ HD$8HL$HH\$@HHHH=tHD$8H0H\$@HL$H19$Hl$(H0Hl$(H0H Hl$Hl$Ht$H=tB@Ht9Hxt2Hr,HL$8H\$0H|$@HHHHL$8H\$0H|$@HHH4HT$H1I@H }oHHHsoHHIH)H|PH EHD!@@tJH0Hl$(Hl$(HP0Hp8H9t$ Ht$HD$8Hx@HA@IDCHHl$(H0H\$H{HD$8HH@HA@IDHL$H\$HHH@uHZ@HH9wHp0HHl$(H0L:L9vlHOH@MLP@IM!LP@HH:H?u+H9t&LD$ H\$H@HD$8H\$LD$ HX0LHl$(H0Hp0HHl$(H0HM HD$访HD$I;fHHHl$@Hl$@HD$PH|$8HL$`H\$0 Ho| HD$0OjHD$PDHHcL$'ODH҄ %HD$PHHpHL$0H@HD$(Hto xHD$(Hfl f[HD$0HUl D;D$'.$@{HD$`HuIN0Ɓ)H >PHܪ HD$`0HU @HD$8HU DH7[ HL$`H|$8{jqH D[HD$H\$HL$H|$ 蘽HD$H\$HL$H|$ @H0Hl$(Hl$(HHHH@r1-H5<HHtHH %H@H1HT$ H@rc@uLBL9r H9BpwI@t1=tHHHHHT$ 1HHHl$(H01HHHl$(H0ÐHrhL)J\HH HJHHl$(H0HޭޭޭH9u$=tHHHHDHT$ 1HHHl$(H0HHl$Hl$HHHHH@HHHH΁IHf@HI?LHLIHHHHH9vHHI!I8uI1I I@s4BHHIHHHELLHl$HL@HȹH@HHl$Hl$Hu%HHHH)Hu1HHHl$HHHH4Hl$HH`Hl$XHl$XHH H fH=a HHHH@r1/LQAIHtHH H@H1Hu"H%'Ht LHR1E11@rc@u H9zwH9zpw Hl$XH`H|$HH\$pIV0HHT$PHHHT$p@H Hl$XH`fDHHLD$HL)LL$pLLT$PM`H6HI3ISI`HI`I9huH|$@HL$8H\$0HD$(11賭HD$(HL$8H\$0H|$@LD$HLL$pLT$P`Hl$XH`ÐHtHT$PL`H6I0I@H`HH`H9huH|$@HL$8H\$0HD$(11$HD$(HL$8HT$PH\$0H|$@HH9~5M ML9rI9vHL)IHl$XH`H=%DHt LHR1E11HH9~5M ML9rI9vHL)IvHl$XH`Hl$XH`HU (HXHl$PHl$PHH H fH=at)H\$hHT$@Iv0HHt$HHH$ Hl$PHX3HHT$@H)LD$hLLL$HM`H6IIrI`HI`I9huH|$8HL$0H\$(HD$ 11hHD$ HL$0HT$@H\$(H|$8LD$hLL$HDcHl$PHXH$ (D{H8Hl$0Hl$0HD$@H\$HHL$PIV0HHT$(IHIIHAAL1 HHfDI9EuH~~uH8AH7DHL$H|$ DT$H4HuoL`H6I0I@H`HH`fH9h11 HD$@HL$HT$(H\$HH|$ LL$PDT$`LL`H6MI3MCH`HH`H9hu-11訩HD$@HL$HT$(H\$HH|$ LL$PDT$AHl$0H8HPHl$HHl$HHHD$X@H98RP@=wt'H\$`HL$hIV0HHT$@Hp 1E1Hl$HHPHH9xfH?u DHAAsL LL`M MM MSL`IL`L9huH|$DD$Ht$011uHD$XHL$hHT$@H\$`Ht$0H|$DD$]Hl$HHP?HD$8H\$(, H (HD$8H\$( Hh v H $EH|$p?HD$8H\$(HL$XH HL$ @ H (HD$8H\$(H\ HD$ D{Hp jHD$pD[  HJ $DHs )I;f%HPHl$HHl$Hu_PbuVHxhuEHD$XL@ I LD$@LILD$8LHMIA?MIM)1L1Hl$HHPÐL@ I HxHH?HHHH)1HHHHl$HHPHL$0LHLA@HHHT$0H@LD$8IHIHD$XHHHT$@L9rLHLHLIHLΐHl$HHPHD$\$CHD$\$HHl$Hl$JH@H H@MLQII@MIHL!H HHIM!ILƐIIII@J„H@MIH I%HAIM!MD$L#I LHH=@sODAEDILH1Hl$HH@MHL!H HHl$Hù@L@{I;fvXH@Hl$8Hl$8HtH%Hl$8H@Ht$01A@Ht$0HH@wI1lHl$8H@HD$H\$HL$H|$ Ht$(dHD$H\$HL$H|$ Ht$(fHHl$Hl$I0H)HH)@HvHqHH9HGHH)H5IM IfI@eJ4IH I%H9tFH@MH@MIHAIM!ILAIM!II L#L HHt<HfH=@ADӈI-Hl$HDADHHH5IHH=@skH4HH H%H@r*tHH@H=@r*HHѺHHH!Hl$Hù@@@Lȹ@Ld$M;fNHH$H$HH$H$H$H$WIH?IHMI)@LGIHH9tGIHH@w&MLo HH1IMeL1L$L11I@vHW 1LDHW H2L1LHD@vL$LL$xLH$HG HVHD$HH$H1Ht$x1EH$HİHT$HHH)H$LLL$pMHHHD$HHLH|$pIL$E HIHHLH$H2LL$pM1L$M9y^HD$`L$EHHLAH:HT$`HL$ILD$HHHHHH|$pHwcH$L$H\$HHHH$H$HİH$L$H$HİH$HIIHHLD$8H$H2HHLLA@D[LD$8II@wH$Hr9oLBL)hH$LLL$hK4L$L$IHIH$H$HH$Ht$hLg MI4$HHLLH$H2LL$hM1L$M9aLD$XL$I4$HHLA@LhLD$XIL$IHt$hL$L$IHIH$H$HH$I@w?MMH s[HL$0LD$8Ld$PHD$@LHLLIHLD$8L$Ld$PIHHIHD$@HL$0H$HMIM M$HfHhMMLd$8Ll$PHL$0RHD$@LHLLIHAHT$@HL$Ld$8Ll$PHIIH$HHHL$0HwLHHLLM$HD$H\$HL$H|$ HD$H\$HL$H|$ qI;fH@Hl$8Hl$8HD$0HHSHHT$ HrHt$H H蕌HL$H@wVHT$ H9sDHD$(HHD$0eH\$(HL$  u Hl$8H@Hކ Ho@HD$H\$HD$H\$&HH,$H,$H11LLL8ILHArDHH1cHu 111E1HH9wLCHIOH)LGIIL)IHt-HOHH@MD#IM!HIL HH)IXHHH.H@HAIII!HHII!L H@3HHHHsHH)HHHڃH4LALI@MEMAILIM!L IArH@HDIHII!L ƐA2HȐHHILHw@HEL ސHIH9rvH)H@MIHHL! IHHuHu9H(H#H?H9wHH H)HLIH9wI@HHLIHH!I HWHv4H@HI@HHAII!IPH!LHH!I LLLIhDIHHÐHsnHIHIHH!L H< LH@vHt9H¸9H1HHH@HAII!IPH!HH 0HyLMH@MEMAIHIM!L MAArLMH@7HHHHwH,$HEIHIL ֐@3HHIHLH9rAMvA9HHHH IIHII+I;fvhH(Hl$ Hl$ H\$8HP?HHH HLH@{ HD$HXHT$8HHHD$Hl$ H(HD$H\$cHD$H\$tI;fH(Hl$ Hl$ HD$D|$HHD$HD$HD$HD$H$赠EWdL4%1HL$HVHT(HH=|H,Hu1pHcHT$H HD$Hl$ H(葡LI;fv]HHl$Hl$HJHL$HucHN*HL$H H̄'eHl$HxI;fvJH Hl$Hl$D|$H _HL$HD$HD$H$臟EWdL4%Hl$H HD$覠HD$I;fv{HHl$Hl$HBHD$HD$AHcbH kH+ 4H ]H >HT$H H/H dHl$HZuI;f+H8Hl$0Hl$0HHL(q`fH9q8HD$@HT$(H5DH95)9qX\$HHL$ H4RHH=H>H HZՑHL$ Q`qfH)t$H@HHD!HT$HH[HH@uHT$@HZ HX0HB HPHL$ HQhH\$HڐHHfAfHT$(H RHHOHHP`H9P8tkHD$ 'PXP`fPfP`HphHHX H H)HT$@HJHzHT$@HBHt$(H|$ H|(Hl$0H8Hm HO HDf;Hzk HM (Hй HD$\$f蛝HD$\$I;fH@Hl$8Hl$8H H9OH\$PL$XHH HHHHEHD$(HH HD$0H@L$XɈL$HH\$(HHD$ H聏HL$0HH8HH@H@;HL$0HH HL$ HY H H1ND$H=s^H @H+HXH5 HHHH\$ NHD$ HHHT$PHHHp1HD$ Hl$8H@ùyHM HM HD$H\$L$HD$H\$L$OI;fH`Hl$XHl$XHD$hHHHL$PH@DT$11HHt$8H(H|(LL9tH\$0H|$(O`HL$HWfHT$@fGfHR͍HL$HHT$@H)HT$0HHDHL$ HHRHH HkH\$(HKhHT$ HH"H L$Q9SXtHS8{`H)H{hHHt$8H)Ht$8Ht$8HL$0HIHH=>HfHL$0HHt$hHT(HT$HLHt$8HL$PDxHYԌHL$hHQ HP0HA H6葍HJH\$8HL$P軣Hl$XH`HйDDHD$ٙHD$I;fH Hl$Hl$ Z~9t9Y9uu17HHZHHHZHH BHeJH Hr HD$xH$fH~@7Ht$h~2ff~0S~@tH8H<H|$pDH94DGAAWu1CHk$HWH.HW@(HW8"HWPHWXHW8HW8 HW0HWPHtdPu1OPHHw:H $HPH.HP@(HP8"HPPHPXHP8HP8 HPPHP0H fDHW0H9P0tKfAH@t,H$HHѐ:HHD$xHt$hH|$pVtH8V2^0HH9[H)HHH?H!H11D$HH$H$H$H$H$zEWdL4%H$HH$HLHEHLVK4 IL!I0H9|Ht$XD$D$D$HH$H$H$H$H$HD$XHHH$HD$pH$HD$xH$H$H$yEWdL4%H$HÉHD$x#H$H\$`HD$h "H$Ht$`LX- AII1Hv MtH$H\$`HD$h"H$Ht$`L- AII1Hv EMDvH$H\$`HD$h@[H 8 H $HD$"H$Ht$`L, AII1H v M诶H)HHLI1 A1H K{H AjH0HHtfHH9wH9wAfDH9w H9w)H9wDH9wH9wH9vH$HHA 4H @ӵH, µf(HHL|) A 1H J萵H +@{HD$H\$HL$H|$ axHD$H\$HL$H|$ I;fvOH0Hl$(Hl$(LBLJHJHz Hr(I@IYt Hl$(H0HI +FwI;fv)HHl$Hl$HJHA@Hl$H wI;fHHl$Hl$H@HHBH=Lu HHHxHPIHHxxDx@(HtBH@1HHÉA,HA0=uHq8 Hy8A@Hl$HD[Hj ʳHD$H\$HL$H|$ Ht$(vHD$H\$HL$H|$ Ht$(I;fH0Hl$(Hl$(H0DHHxHt6HHHHHH0x@tH|$HH H|$HHl$(H0HD$8x(H9v#P,HH81H[HT$8HB r,r(HHX HPHtH\$ H HpHHD$8H\$ HHH H)H(HHH0HHl$(H0:HN 4)HH sHD$huHD$I;fv[H(Hl$ Hl$ H |yD$\$HHBf{oHHHl$ H(tI;fH Hl$Hl$H HD$HK FVH H=eu HL$HHHxHL$cH VH H=(u HL$HHHxHL$f۔VcHD$1jHD$1[LHl$H sDI;fv*HHl$Hl$Mf MuHBZHl$HrLl$@M9,$uI$$I;fv*HHl$Hl$Mf MuHB蚪Hl$HrLl$@M9,$uI$$I;fHHl$Hl$胬EWdL4%HH $HH)DHHl$HI^0HH0H)HWH*WH*^ ʆY f.Hl$HTrOI;fHHl$Hl$=yt u =t 1Hl$HHtrHu@ !|)H HtH)H91ɉHl$H1Hl$HHu)хHl$HøHl$HH/}H H9Hl$HHD$H\$L$EqHD$H\$L$I;fRHĀHl$xHl$xIV0IV0LLH92tGHD$XHeRHT$XHL$XHDH=RHT$HHH 1H6115Hl$xHHH9}#H4H~@DSD9t@H, H$mEWdL4%&$ 9} HEH>H#HD$@H2EWdL4%H$HD$8HH=Qt1HD$XHD$X HHL$XHH H$lEWdL4%HP H$lEWdL4%#H 8H\$8Hc HH|$HHt$PDD$4fhHL$8H&HD$@Ht 1蔗HD$@Hb Zu Vft C 8..fH IF0IF0HD$`D|$hH zHL$hHL$8HL$pHL$hH $fkEWdL4%H11fHD$`Qu&AtIFHT$@HHT$@HHT$@Ht H jHT11SHl$xHÉ|$0DD$4HcHD$PH HD$PHw D$0H D$4H!4 ŨHD$H\$L$kHD$H\$L${I;fv}H Hl$Hl$HJHL$ NHL$HHH)HHHHH+H;HL$HH $Hl$H XjsI;fHXHl$PHl$PH111q4H H$@[iEWdL4%H11f{=Tk9QHMHuf9v1 HL111DͷH H$hEWdL4%=tH11:OEWdL4%H$HHI~0HLJ=juHd HHHM 5HD$0=Kt1HD$8HD$8 HHL$8HH H$gEWdL4%D$/D|$@H'HD$@HL$/HL$HHL$@H $gEWdL4%|$/t@I~0HLJ=uHLJH1D;,1H @H_1HL$03!>HB11f;1Hc =;H\H\$0Rh Hl$PHXÐH11Hl$PHXgI;fH8Hl$0Hl$0HJHL$(H8HT$ H4H\$1HD$HHL$(HT$ H\$H9}IHD$H HL$H\HL$H8HtHzuH@HytHD$(Hl$0H8ofJL$M;fE HH$H$H utHHEWdL4%IF0H $HL$PI~0LHLJHH$= uH HHHH5 ,HH$Ƈ)HH$ƀtD$HD H$HT$PH$H$H$[dEWdL4%H H$;dEWdL4%H$Ƃ)H$=GtH11HH$Hǁ=u HǁH$1ͅ=ƲfD H HH H${cEWdL4%HEWdL4%H$HD$HMHD$`\$4H HT$HHH)HH5H H)HHkHD$`Hiʚ;L$4HcHH VHHHD$HH dHHGH H59H .H 'HHdH Hc*H 7H+ (HH5H=LLc LL+LL%H$L,7L-!L"HHD$XMLL$xJ H H HHLLH LL%K H H >H)Hc HH 1H H CHHH HH5H5HH)HH H+ jWH*H WH*^1HH 1HH 1HH H=ntHD[$mHvi.H`&HH\$HPHH:R)ЍPH tĐ!%u#QÉH5tՋ SF IFL$0D$/H H $0`EWdL4%2ּH' H$`EWdL4%HZ H$_EWdL4%Hq\$0L$/臕=zuY*$D$D$jH#H+ HHil7HHHH sH|RHHHHHH4HH)HHs0@ HqHuƄ .fHLH0]H$HHHH?H!HHH$PH45H$H$@{Hy jH$f[H JH$H$5H $$H,H DvHD$D$H5H$H5H$H5H$1lH)H$HHHH$0!4H$H$lH$H$WҶH$HHT$hfH}ZH$HH|$hDHkH$ H tH$H|$h6f۵Hj ʾEHH HHD$pD$xD$Ht$XH$pH$xH H$H$HD$xH$1gH$Hf[HHH$2H$H$H$H$vH$HHH$HpH|$pHt fDHu)赴H 褽@H|$p?H6胴H rH$H|$p H\HD$@H `HL$8H,H$H%H$H5H$H=H$LcL$Hc H$HѹH D軼H$H誹H 虼H$H船H wH$HfH UHD$@HGH 6HD$8H(H H$ H5 t=etH ջP˲&AIF0QuHnHp H H$H}H$D=m=u HQH=H1{HH$1/H$H$H/H$HH$HH$H9|ĐH11:Hb11)H$~uAtIFH$HùD;~Hȹ.~H[8 f軖H? 誖Y@I;fv!HHl$Hl$HBHl$HXI;fv\HHl$Hl$4H [HHH!Hʦ Ħ9 ΦHl$HXLd$M;fHH$H$Lt$XI~0HLJ=ouH HHH x yHs? :HL$XHy0HLJ=#u HLJH1xHD$PHHIN0IN0HHHHŭ H\$P1oIV0IV0LD$PIPHT$XLJ0M=w AI(LL$`fEWdL4%H$HL$`H0H(u1H H=uHH!H=H 1һH5ˋ=9HD$8T$#D|$hHD$xHHD$hHT$XHT$pHL$xH\$hH$D{UEWdL4%HEWdL4%H $HL$0HD$8H)HL$@HD$`H(H_D$#tHD$`H HL$0HHT$`H(uLD$@LAL EAD E9Hǂ(D9u/HHuf9dv 11HD$PHHZuAtIF1HHDD$$DL$,H(HD$HH= HD$HD۳H ʵD$$H 谵D$,觲fH}) \$(|$,f{H jD$(aHf PD$,G袮f軬H6 芑H7 yAI(HD$HHI HD$HED[HP\ &*$T@[I;f}HHHl$@Hl$@HBHD$0HRHT$(ƀ@[HD$(H(Ht;Ht H H87H8 q7H8HL$8HS7HL$0HD$(wHD$H\$ vqL$H47HL$ HT$Ht1HHǁH bHt HHEHFL$ DD|$HHD$86HD$05Hl$@HHHTe +zQoI;fTHpHl$hHl$h=)~HD$x3HD$x=HH HL$PH9=~H=gD==u HH=1lrH EHL$`HAHT$H1H8HD$@HHL$`HT$HH9}]HD$@HH\$X=~ HFH`@[EHD$XH8HtHyu`H@HytPH H1HH9}H4Hv@HtHFHWH+YHl$hHpÐ[HD$XHcHL$8XT$;H2 *HD$8DH D$D蛪vHD$XH8HHAHD$HӧH °HD$H踮3HD$XH@HtNH@HD$H蔧H^ 胰HD$HyoʩHk /贌OHw ;趧/HK 薧^H D[HD$0 HL$(HHT$HHH\$@H5Ht$ H=H|$谦HV @蛯HD$PH D{HD$0qH D[HD$(QH D;HD$H1H DHD$@H DHD$ H DۮHD$Ѭ,GH` HhtHs 8HD$MHD$I;fH Hl$Hl$=HD$(HL1X21H 1Hi2H H 2H2H2H2H2=Lu H 2 H=2n1H;2H 1H62H H0f1Hq HL$(Hu+H0W1H0fOH=t H1۹HHl$H DHu1uIPHH:R)ЍPH tHl$H HZ ) HD$HD$I;fH0Hl$(Hl$(H [HR/ H 1HL$H0HT$ H,/HL$HT$ 10HD$HHD;vHD$HHL$HT$ H9}H5M0HHGL9uI9vND7.HGDI9v.H0>H)HHH?H!H1I)LHHl$HHLBlL:lHL/lHLH sH9|KIHIHHLIM)H9viI0D >HGL9u@H9vGD7.HGH9v,H0>H)HHH?H!HH)HHl$HHHkHkHHkI;f|H Hl$Hl$H12@@tE8Z t/HT$\$0HHL$0HT$J B!Hl$H HS_ -謃Hb /蛃HD$\$HL$FHD$\$HL$SI;fvsH Hl$Hl$x!tMHP@fH9*H\$0HD$(HH)HcPLH1ېHD$(H\$0HX@@!Hl$H HUb /HD$H\$EHD$H\$iI;fvfH Hl$Hl$H1„t'y!u+HL$HdHD$Hl$H Hl$H Ho UHD$H\$EEHD$H\$vI;fH`Hl$XHl$XHP@@H9HcpLHHX@L@(HH)HMtLIL@(LHp8HtIHHp8IxPuJH\$HD$hH|$@MN0AL "LL$PLLT$8M^0L\$H1kHl$XH`Àx tWH* lXYH,HL)H)H Hl$XH`HL$0HHD$hH\$H|$@LL$PLT$8L\$HL9}fHL$0LD$ HT$(IɄH H<wu(HT$(LD$ <t<uHt$(HLD$ <uIHt$ LHT$(oA~AA IFH;6 GHD$H\$7CHD$H\$HPHpH)HH)H~5H9r-H)HHHHHHHtHH HHH}IH)H9wH@HII)L)HpHtHu H1ɆI;fv3HHl$Hl$1ɇu Hl$HH HHD$f;BHD$I;fH Hl$Hl$H12@@trL$8HT$HDL$8HD$HLHcHiʚ;HHHPH9vHHHH HH s HH1҆ Hl$H HbM (n~HD$H\$L$ZAHD$H\$L$'1 LHHHHHH=thHH!HH!H HH)H9HLHt.IH=II!L IHI„tL1H1HI;f\H Hl$Hl$HHHH=8HH1H:AEtHH!HH!H HH)H9ֺHLHthw"fuHKHCt PDuHH#u2HHHHHHl$H Hl$H H3a 3|\$0HT$6H %D$0H~ HD$fVqHi >D;|HD$\$HL$'?HD$\$HL$sI;fHH,$H,$D=HHt HH@111HfH9~0HHH+HHH9>}H5H@Ht HH@111HH9~4HHH+HH@H9}HH#H #H#H#=u H #f H=#^HHHhH YHH=u H  H=m^Hf$H=H>H?H@H4H H (HHщ ЍHHщ H ȉH,$H=I;fH8Hl$0Hl$0 jh9w9HD$D|$ H HL$ HL$HL$(HD$ Hl$0H8ÉL$T$2D$)Ho D$H vH Ey@;<6I;fH(Hl$ Hl$ HJHH9~tHBHHl$ H(Hl$ H(HD$0L$HHT$\$FHG 5HD$0諛Hp HD$H @D$H| @ۛD$q,GHI xHD$k:HD$Ld$M;fHH$H$$$H$HD$89}w89yv0H@Ht LHR1E1HT$0LD$h1{9Aw89=v0H|@Ht LHR1E1HT$(LD$`1u H`;9r9v)i1в99Ʋ H5ɲH=)H9Hߐ@tuHuH=HD|$pD$H HL$pHT$xHL$8H$H$HD$pH$8EWdL4%HH֏ H$7EWdL4%1Ht&HL$8HtH$t HD$8[HD$8H$HĘÉH;]vHD$X HL$P[HL J$;H *HD$XDHT  HD$PDH2 eH 4uHT$@DBELJKHH H1Lh"HT$@HH$$Hu1Ht$HILLM)H)HLȉLӉ)HD$8Ht$HHH$$HT$($LD$`H9HGDHt$HILLM)H )HLȉLӉHD$8Ht$HHH$$HT$0$LD$hH9H̏HD$\$L$f6HD$\$L$I;f"HHHl$@Hl$@Iv0HzLBHBHH9u@1HD$ H|$8LD$(HT$@t$f@tƂHлHD$ uwHT$ u\$HD$0L$HH\$( HL$8HHL$ ƁHD$0\$L$CL$tHD$fHl$@HHHD$ ƀHl$@HHHh r4I;fvnH8Hl$0Hl$0HHDH9w 1Hl$0H8LIH)M9ALBLD$(HH HL1{HD$(Hl$0H8HD$H\$HL$H|$ Ht$(4HD$H\$HL$H|$ Ht$(PI;fHHHl$@Hl$@H@H <HL$H,HvHL$HtHL$(HL$0HL$;Hl$@HHHL$8HYHDHL$8D9HHL$0HfHuʐH-HL$0HT$(HT$HL$ HtHHHL$H HqHl$@HHf3Ld$M;f7HH$H$5,H H=HH?HH H=դ7DA9H\$8HT$(ƀ薱IV0HH8H\$@HD$0HD$hD[HۄHt$0WH*fHnYH,Ht$hHHHH=‹=9fuJHWHuԣ9ңv 1u={u H H|$P4LdEWdL4%HD$hH@0HHD$HH$HL$(HH)HHL$8u&HT$@H HHHD$HHT$@HH~,H5uHH}HHL$HHǁHl$XH`ÉT$|$$HV D$؇H NJD$$軇1H Dft$ DD$$荁HD {D$ rHw aD$$X賃΁H ffHD$H\$KqHD$H\${I;fvWHHl$Hl$Hl@[H dD=\HL$HD$f[H: Hl$H(I;f H0Hl$(Hl$(H vLt$ H١LʡIdžL Mt MM ML LL$ L L 7M~:L{H|@Ht 1HHQ$1Hl$(H0ÐH( H1 *蕑Hl$(H0ÐHHl$(H0'@I;fgH0Hl$(Hl$(H=tEHD$8H HL$H{HL$8WH*HL$fHnYH,8H HHl$(H0HT$ Hǀ11 HT$ HH*Ht~H~yHtHH Hu HHHʐH}HHǀH ٟHt HHHHHʐH1H~+HWH*fHnYH,ɐH,H Hf9Hl$(H0HD$%&HD${L$M;fHH$H$H$ @% wtDqLH9KL`pfMuL`8HR0HLhM)L"H"Hxput11H$Ll$h@u ƀNH$H$Ll$hH$Hf@Hl$Hl$KHmHPL L$H$HxPt3HPPH ƮHH$HH$H$D$HDŽ$HH$H$H$H$H$1H1E1AL$E1HHoH$Lb(L$u1H$HÐL$XHHT$xb{HF QH$ăH 3HD$x)H D$X h}{Hz R`L$M@(L$H$HHxt-HH 8H$H$a H$H$Hx(t-H(H H$H$% H$L$AxXH$H H$H$ H$"HZ HtH$1ɐOH$H$1SH$H$PHtYH$H)H$1HtLBMtƐE1LJMH.HHH$H@0{H$HuH$u+H$u H$uHD$hH$HH {^HaDA9vHRDJED9EHRH0HtfL9@wL9v1EA L8EQE|15\$SHT$`L$AIcL~L@HT$`\$SL$HD$pH$t4EIE}AMcMcHLLH$H$X2EIE}AMcMcHLLH$H$ H\$pHH褙@H4 *]CL$THHT$xwH 蔀H$H vHD$xl}H4 [D$TP}ywH \L$\HHT$xwH H${H HD$xD|H D$\@~y1wH D[HD$H\$fHD$H\$I;fv.H Hl$Hl$HJHZ@;Hl$H HD$H\$fHD$H\$I;fH`Hl$XHl$XHDHt z(AHAt z(1HL$PHD$hH\$pDE1Ht$@LD$0~DH|$HL$,HcHLD$hI@8H)HH|$PHt$pHL$,Ht$@H|$HLD$0~,HT$hHB@HcHHH|$PHt$pHt$@LD$0HT$hHz81DD$+T$*LH8Mt9LP(M)Mv-LHHL1 HD$hHL$PT$*H\$pDD$+YHt HT$hHR@H1H|$PHt$pH D$+u D$*tHD$pƀ HD$pƀHl$XH`Hl$XH`HGI9~HHH D LR8E|LR@McK H9Z(wH|$8HD$pSLHT$hHt$@H|$8LD$0HD$H\$HL$)HD$H\$HL$I;fHXHl$PHl$P=kIV0HHpH t/s H=r HLr IEL I1H\$hHT$@HD$`H|$HD D9 v2Ht$LD$ L$LL$@LHH|$HHHD$`tsAD EA E1EHt$8LD$ H=u&[pHD$`HT$@H\$hHt$8H|$HLD$ LMt)MQMt MZMY@IKL1HuEDnHu11 HD$`nHT$@H\$hHt$8H|$HLD$ HHD$`fHHH,H\$`HKHH5rHHt$hrHD$8HCHL$8H)CH\$`Ht$h1H{HCLD$ I)MKHT$HHu1-LD$0HD$(HHT$HH\$`Ht$hLD$0HD$(uII'HT$HHT$HHt$hLD$ HD$8HHD$8H\$` HHH\$`HKH~/HqH sHKH)HhH\$`HCHl$PHXLعD=HD$`H\$hLL$@L$LHt$H|$HLD$ tsAD EAE1EZALE DE98DaHT$HHu1 HHT$H]H\$`Ht$hHD$H UHD$H\$ HD$H\$I;fH(Hl$ Hl$ =gH\$8HD$0IV0HpHHHT$HT$H|$8HHt1@=uj@@@[HxHH9KHt$H=DuflHD$0HT$H\$8Ht$H8@Ht/LGMt&MHLOfIJ|1Hu9D{jHu11m HD$0cjHT$H\$8Ht$HHD$0HuN=)9=&LA8DD9sq1nHT$HH\$0HHHNH\$0HKDH|'HnH HSHCH|$H4yHt$oHHHHl$ H(LȹG:H@ RHD$H\$]HD$H\$I;fAH`Hl$XHl$XH\$pHL$xH$H|$PHD$h1LDH9vIHu IP@IE1Hl$XH`III}DL9vsMMMtLL$@LT$8LD$HT$4HLLWHu=H$HtRH\$8H9wDH9v310BH$"HHt$PIH\$hHL$H,H$HD$hHL$xT$4H\$pH$H|$PLD$HLL$@!HD$H\$HL$H|$ Ht$(7HD$H\$HL$H|$ Ht$(yLd$M;fHH$H$HHHHH@8HHH %H@HWhHDGbfAHt$xH$fHvH9w&H|$0H;HT$HHH WHT$xHt$HE1IHuE1LLN fMu LD$8WHHT$xIHt$HMI)M MtMI)L9wLD$pH|$PHL$`H\$XHD$hLHL;UHtHH$IH\$xHL$pHD$hHL$`HT$xH\$XHt$HH|$PLD$p5HD$HH$HAHD$8HAH$HĈHWhHWH)HHGHLGhLGL9sLMt I@H=t s4ITI@HT$@HH;bHT$@H$Ht$xH|$0뛹5H NH vNH@5HD$H\$YHD$H\$JI;fHPHl$HHl$HH\$`HL$hH|$@HD$XHt$x1 HH9HtEIH uI?IP8MIAILuLLIILL$8JHHtEH9wMHH)H~#HLHDHD$8H\$@Ht$Ht)H8HtHzuH@Hzt*HqHur9rv 1t1HHl$(H0HHGHt,HHHLHHL GM@@t HL G1Ht1HHl$(H0ÐHH~#HD$HxH@@tH|$HWf.u{`HIH)H~?HWH*WH*^f.vLH1H\$Hl$(H0ÄHǃ()LH1H\$Hl$(H0ÄHǃ(HBHD$ }=tHD$ 1D;?HD$ H\$Hl$(H0H 64HD$H\$HL$HD$H\$HL$MI;fH8Hl$0Hl$0HHHXPLL@XLL@`LL@hH@@=t-HD$(HT$(!HHL$(H%Hl$0H8HD$H\$fHD$H\$LI;fvnHHl$Hl$HuHH%Hu HHuH(Hl$HH (m3HD$H\$HL$XHD$H\$HL$dI;fv}HHl$Hl$Ht9HNHHH=tHL$0HD$H?HD$HL$0=CuDHtHkNH'Hl$HHD$H\$HL$HD$H\$HL$UI;fvlHHl$Hl$HD$ HH0HL$yHL$H9sH1*HT$ Hr8H9HGHR@Ht HH9rHHHHl$HHD$HD$zHHHH H)H H9rאHXHH)H9ALBH)H)J H9v3H)HrHHsHH9HBHHI;ffH8Hl$0Hl$0HD$@HL$@HH9v|H9HBHH)HHZHcH H HHH„tĸHl$ H(1Hl$ H(HL$HT$jGH YPHD$HcLNH ;PHD$Hc.NIGHH s,I;fH(Hl$ Hl$ HHHH Z|*HcH H HHH„tHl$ H(HL$HT$FH( OHD$HcwMH fOHD$HcYMHFHs +HD$HD$&I;fH Hl$Hl$HH|,HcH H HHHtHl$H É\$0HL$EHN NHD$HcfLH ND$0Hc{LGEH D*HD$\$HD$\$I;fH(Hl$ Hl$ bHE=%;t H|E=t7HbEfH\$<HREH EH\$Hl$ H(4eWH* PY|f.vH,\H,H?H5FH9wHH5=H H5=HHH| WH*HHڃHH WH*XH| WH*HʃHH WH*X^H hnH| WH*HʃHH WH*XYf.v H,f\H,H?H:HDH5EHHHHHHHHH!H H9s H)H9 :vHH ;H H;H8ÐHH ;HI;fHHl$Hl$HxHD$ =:u LHH HxL H$ =:u H|$ HGH|$ HOHH HH  HH =:uHx(H(HHW HHG=w:u H ? HHHHHH? B HH?HG8HjHAHG@HeAHGHHMbP?HGPH@@HGXD`$G0Hu5=9uH ? HHHHH> HHu5=9uH> HHHHH> l HHu,=g9uH> HHǘH>  Hl$HHk 7&HD$,HD$I;fviH(Hl$ Hl$ HD$0@LH\$0H9Ku*CH? mRHl$ H(Hd .%HD$HD$f{I;fvuHHl$Hl$HD$ @{HD$ xt:1ɇH @HD$HHHǁHL$HD$[HD$ Hl$HHD$HD$qI;fIHhHl$`Hl$`D$xHD$pթLHD$pH9H;L$xf.v 'L$X@0^H,HL$PHt)f[HL$pHHHD$PD EWdL4%HD$pHHH$HT$@H\$PHӐHqHyLA LI(LQ0HHLMMeH\$pCH= D[PV EWdL4%H$HD$8HD$p质HD$pHHHHD$pwHD$8HL$@H)HL$pHYpH~.D$XH,HH9} HApH)HYpHl$`HhHD$HHHHL$HWH*D$XXW*Y^HD$pHH8 Hf;HL$pA0u#A0H*HQpHJHl$`HhH /"HD$D$f{HD$D$I;fv9HHl$Hl$HD$@[HD$@x+Hl$HHD$HD$I;fH(Hl$ Hl$ HD$0LHD$0H9HNèW1H Nf.D$HD$HD$0HH HL$0HHfHuZH t3HHH1HH| WH*HHH WH*XY\$XWH*T$XHtHL$HHr#H=K2 HL$L$HHv H9 2wHHl$ H(H . H> -j HD$@[HD$QI;fv|H Hl$Hl$HD$HXHD$H LHXHXHuHXH bHHXHD$HD$jI;fHHHl$@Hl$@HL$`HD$PH\$XHD$HD$PHH\$XH9\$HHD @HD|$D|$ D|$0H HL$HT$HT$HT$PHT$ HD$(H\$0HD$XHD$8H\$H$EWdL4%HT$`Hu1 HHT$`HHD$Hl$@HHHD$H\$HL$HD$H\$HL$@I;fvAH0Hl$(Hl$(HBHZHJ Hz(HRHT$ H+:HT$ HHl$(H0tI;fkH(Hl$ Hl$ HD$0\$8z8H:H :H9H:HH!HD$HkdH1HHD$78H{ &AHD$0H >HZ AHD$H =HI @HD$=H\| @E8L$8u/=MVtA7H= f@8'V7H w@7m797IF0QuH.蛣Hl$ H( HD$\$f{HD$\$lI;fHxHl$pHl$pH$H$HL$hHJ.H HHBHT$(HH LGHIEH|$0HH H$HQhHY`H$H9xHH?s HHt$(H9r\HH H= 5HD$`LDxAHHT$XIH\$hH|$0LHHuaH$H$HHHHH9HHH@ ;H1Hl$pHxHD$8H\$ H H$HHHHHt$@H$HHuH7H$H蕡H$fDIN0HD$@H\$ H MH\$ H H\$PH6'H\$PHH\$HH{6HGAHL$HHHL$PHHH&AH$H H$H\$@HL$ 萉HL$`H$HLxH\$XH@HH\$8HL$ D;H$H膠HD$ H Hl$pHxHi bH HHD$H\$HL$H|$ #HD$H\$HL$H|$ I;f|HHl$Hl$HwrfHt`Hu(HUUUUUUUUH!HUUUUUUUUHH H HHHwwwwwwwwH!HwwwwwwwwHH H HHl$HHw^Hu)HH!HHH H H֐HHH!HHH H HRH u&HH!HHH H H'H@uJHH?HH<H H HHKH@HHHH!HH)H HHl$HH@ @{HD$H\$kHD$H\$[I;fHHHl$@Hl$@HL$`HQHHH@XHuHHWHHHH!HHD$PHL$8HH\$ HHD$PHT$`HL$8H\$ H|BHH H L@HHHtHD$ HHD$PHL$8HT$`H\$ HH H L@HHBHHHHHDHzHH@HLD$ MILROMIHLHH!HtHHDHHDL\$(LD$0HJIQ+1HHl$@HHH|$HHLD$0L\$(HH|OHT$HL$HL$PHH D@H\$`uHHHDHHt$H)HN@HtLD$0L\$(HT$8H9HHBLI)H=D'H vKH9=9's:H LOMHI!DM9rH)L!H9rI)LL LLLHHHl$@HHHعHع F/H 58HD$`+51/HD p /Ho 7HD$`4K1f/H !5HD$H\$HL$H|$ HD$H\$HL$H|$ HHl$Hl$HH}HHHHHH9Abtx IH11Hl$H9HHLHLcL9ME EtאHcAэzH HLI@L9t5HHH| H?HH?HHH _?H HHl$HÐHؐHDH|&HlaHHHHHt11Hl$HHHl$HHؐHH9|HHH „tLHHl$Hl$HHHHHHHHH9HHHH9teLBIMI)АMv@I EILAAE!EBHAHHHPH9+HDILIH)HH AAA!ApHHHHPH9viH @1ZHHHxHDH9v<HѺHHHHHHLѐH9sHH0Hl$HHHHIMHM9sHPHXMIL9wf:L)HHvH һ!HHHPH9v KH HDLH9H1\Yh(Xf.@\f.f.Hf.ΐwH f.wxEWfD.fu{jDHfE.u{[Y^YA^\YXXh(f.uz\f.u zf.u{D@(@0@1ÐWH(@1@1I;fH Hl$Hl$H9H9HtH(HT$H\$0H2HtJH~uZH HtHǀ (HT$H\$0HHFH:H~H2(DxHL$HH\$0HHFH=sH\ HFHl$H ùH HD$H\$L$pHD$H\$L$I;fHHHl$@Hl$@HD$PD|$0HHT$0H(HT$(HT$81HHHt0H>DHtHuOL Mt0HL$Ht$ H|$L*HD$PHL$HT$(Ht$ H|$H HH>HtHGL@LGIsGH9HDHl$@HHH HtH)HL$PHǁ 11Hl$@HHL{HD$HD$I;fPH Hl$Hl$HD$(H\$0HL$8H8Hu2&H@HL$(H0H8HL$8H\$0HHD$(HrH~zHIH)H~H?HDL: DL:$A9H?uuHS1HHL$`Ht$8H)HHHf[HT$(Ht$H|$0Ht0HD8HD$ Hl$@HHHH1Hl$@HHHȹ?HD$H\$HL$@[HD$H\$HL$I;fH Hl$Hl$HD$(T$qB\$HD$(T$fHt$H[Hr,HpHHH HW5H HfHH H)fHH AT$I A AكsH AÄt1Hl$H Ð dAHؐ9sHÉH5PAtHHHl$H Éй'йHعHD$HD$YI;f|H8Hl$0Hl$09tBH؋fDJHÉ tΐ=H#HD$H ӯHL$HׯHT$(үD$ o"Hݺ [+HD$HM(H} ;+HD$HL$(H)H%(HA +HD$ (Hq *D$ $Hw f*V"Hl$0H8Hl$0H8H #Hb 1DHD$\$L$HD$\$L$UI;fH8Hl$0Hl$0>Hu>5D$1^HL$HHT$(H HH4Ht$ HH@FHL$(HXHHHT$ H%HL$HT$H}HIؐHrH>lUHl$0H8ù3Hx ,I;f_H@Hl$8Hl$8HD$0=lu LH =H==L@H=m=HD$0H51HE Hf= 11cHE=D P=u.5=H H= b1f묐H<谋HHD$ !HtN<HL$ HHHHHHH?H)H HH9uH\$(0H\$(0#fu)HD$-HD$I;fvqHHl$Hl$xtKKXP9u1HKXtHػHl$H11Hl$H11Hl$HH HD$H\$HD$H\$kI;fMHHHl$@Hl$@Lt$8IN0;%u#QÉH5;tՋ  ֪H5s;L$ D$$t HL$8HI0HHl$@HHHDHtpHctPX\$ 9t֍s9tHHD$ HD$(@tHH HL$0HD$(1tHL$0H~HH 11::%uH=:„t҅HT$Ht$0\$ L$$Ho:T$t6=~H H$EWdL4%H: HL$8HI0HD$0Hl$@HHÈL$T$\$D;H/ *%D$f"Hr %D$"HBl $D$!Bf[H* *$@I;f-H0Hl$(Hl$(IN0uu LH9Hؐ 9ʁu$rHÉH=87„tЋF <HH\$ T$D$uzHD$GHD$fu\$L$H8H\$ fGHD$1\$L$H~8fHl$(H0EWdL4%HD$ HËCXL$9t9uHl$(H0Ho "HD$@HD$Ld$M;f HH$H$IV0uu LH92 HuH5t$(@zc@|$ @ DFD9BX $HT$@DD$,=t#HB H HT$@$t$(DD$,Hz L I9zb@|$!LJhLL$8LL$LL$L$ t$(|$!L$MACM LbPA$H1IHILiIŐIHB<"AL@tnA{ tL$IH$DIH$H$HACLLL"I$DD$,LL$8L$HT$@,J4 A<11Ht$`D$"HT$@ MtyHuoLAHBIIII@ OAH H%HH=LHMڃAAAE =u =tNLRPAL$Ƅ$HDŽ$LRHAL$Ƅ$HDŽ$13HJ0H9J8vxLRPALZHAIHFFAE!AHLAEt8H$HZ H$HT$@$t$(|$!DD$,LL$8HH9HJ8HHH$1E1HMLT$hH9skLZPAML% EtMHD$HL/H$HT$@$t$(|$!DD$,LL$8LT$hL%M IHD$HJ`AD)fL$$fE9fDR`HB0Hǂ=t!M^0MADLjhMMHJPHJHHB8GHL$@HAPH1H\$@KcL$SXt$,9t$(~9~9sX{e@$@]Ht$h@fvKD$!H=4H @HHXH5/HHHb1H$HHC HH HHCc1ɆD$HH$H$H$H$»EWdL4%1H$HD$!S|$$fw$@D$#CdH DL$#HHD,H HxT$$HT$xHH H\$@HKhHT$xHH H$ɋT$(t$!H|$hfH9{8u=HH vHHXH5HHH@HSH vHHH5sHHH覧H:3H$H$@|$$ff= ~HCpHCH\$8, HϞ3HC軭HpHL$8HhHsHL$8H>H H$HHs:H vHHXH5hHHH蛦1H$HÉfHȹDH *;Hw *CXHD$pfH} D$fHa HD$pD{HXq jD$(aHJ 'fD\$&HB8H$.Hs fH$HZ fHD$hHǂ fD$&HZ DD$$ $HǮ HLR8II@L9LRPALZHAFFAEtHL$PHHL$PHT$@$t$(|$!DD$,LL$8H$HH9B8L$D$EEL$L9R0wL$D$EEtdLRhLLR= tBHD$XLT$0LLۗHD$XHT$@$t$(|$!DD$,LL$8LT$0=n t1{D$AuH$Ƅ$ AD$H$D$DAuH$Ƅ$AD$A ᆳHL9r@wLع@MMyEkI9fA{ ufIH$H[D_DI9HLbM ttH$H?H$뵐HH$H$HHLL>D$"HT$@$Ht$`DD$,LL$8L$f`BXHD$p H$z D$ H ^ HD$pHm @D$(Hh H HD$\$践HD$\$I;fH Hl$Hl$HJHQH5H9uQHL$HwHH\$P3HH\$@4HҘ-yHl$H Hl $lgI;fHxHl$pHl$pH${ H$HHhHL$8HP0HT$0[ Hx $JH$fH8_ *HD$8DHs^ HD$0DHx .e H$HHPHL$@D$HHD$PHHHHL$XD$`HD$h1HD$hHL$ HH$H9H8HL$ HPhHHPHT$(l HD$(f HD$ H$H9A0vHT$X\$`ˆT$t" HCO   HDO o HD$@L$Hft H>W A  HqW # HD$@L$Ht D$1D$ftw HP f [   D$t-H$HrhHHGHD$(H1ɐ{L$Hu HD$@D$HL$HHD$PL$`uHD$XD$`@5L$`*H9 @HD$HD$I;f>HHl$Hl$ؖWf.u{)HD$ H\$(=tt-fHD$ H\$(WHl$HHD$ H\$(WɐH uH H5nHH)HH9HHG[H| WH*HƒHH WH*XH $YH,H)HD$HD$H\$(Ht$ WHH)H9}1{HtH֕H $H9tD9Wȕ=yt"Hl$HHD$H\$詰HD$H\$̐ %u W^tH H4H$H)HH= HLH)HW.WH*WH*^H H۔HI;fv?HH,$H,$HD$HL$H HuHL$HAH,$HHD$葯HD$I;fH Hl$Hl$H\$0HD$(HHtfHzuUHpH0HPHVHu7HT$HHL$(A HL$(HHL$HH\$0H@H1 HL$(H1H\$01HFH=s-H\HF@t=u HHl$H ùHD$H\$艮HD$H\$I;fHPHl$HHl$HH\$`Ht?HD$XHHu.H|$pHL$hH\$`:HL$XHHHL$hH\$`H|$p1'Hl$HHPL)L)IHIH?L!HLHH|$8H\$@HL$0MMIL9LLII?M!IIL9tAHT$ LL$(@t$LHLIHD$XHL$0HT$ H\$@t$H|$8LL$(LJfL9Es@t= u H`[Hl$HHPHHL$XA HL$XHQHHAHHL$0H\$@H|$8LBIt LLHD$H\$HL$H|$ 蓬HD$H\$HL$H|$ I;fH(Hl$ Hl$ HD$0HHuVHL$0HHHzuSHPHHHXHzu>HT$%DHtHD$HD$LHT$HL$0H 1Hl$ H(HBHXHZDHsHDHl$ H(HعHD$萫HD$&I;fHHl$Hl$HDHtdHD$HyuHHL$fHHL$A HHAHxu vHL$HL$A HAHHAHtHd#HHAHAHtHHHAHl$HHD$襪HD$I;fHHl$Hl$HDHtvHD$HPHzu(Hy~HȐHL$HA )Hl$HHHL$A  HL$HA=u H4/Hl$HHl$HHD$ѩHD$GI;fv1HHl$Hl$Hxt Hl$HHc HD$@{HD$I;fv1HHl$Hl$Hxu Hl$HHbr *HD$@HD$I;fHXHl$PHl$PH= tw1HHD$ HD$H=!tOH jH H\$HtH &H\$H 'H llHD$ H|$uvD|$@HQHD$@HD$HD$HHD$@H$EWdL4%H|$Ha ,jH\$Hh {'HB kHD$ 1Hl$PHXHL$0HHwHL$HT$0HD$(HT$HZH HD$8H@hHL$HuHD$8HD$8HD$(HPY bHcHt*HHHHHHH5BHt1HtH\$8HH\$8H4I;fv?H(Hl$ Hl$ HRHT$H|HT$HHl$ H(I;fv5HHl$Hl$HD$ "H\$ H|fHl$HHD$[HD$I;fv5HHl$Hl$HD$ bH\$ HeHl$HHD$HD$I;fv{HHl$Hl$HDHt*HHHHHHH5Ht1HtH\$HfHD$Hl$HHHl$HZuI;fH(Hl$ Hl$ HD$0HL$0HQHH?HHH)HYHPHYHs9HD$HpHH[HHHHD$0HD$Hl$ H(HعHD$蛤HD$QI;fHHl$Hl$H{fH=SHJH Hu&H}(hHl$HHoHQH HuH \@Ht,HdH H BHSHQH @H )H 8H)HH D=pHa (菣 I;fH(Hl$ Hl$ D$0Hwe=0u H=uH6g1Hl$ H(HD$D$HuHD$D$0D$HD$H$蹡EWdL4%H=<D$H$fD$Hl$ H(ÈD$趢D$,I;fH@Hl$8Hl$8IN0RT$HHL$01LHD$(H\$ HV HH\$ DHD$(HL$HT$0HT$H@}t u H^HuHl$8H@RMI;fH@Hl$8Hl$8H0H9(HD$HH\$PH vHH?HHH HOHD$HD$ D|$(HHCHD$ HHt$HH(HL$(H|$H|$0H(H HtH9HLHD$ H9tHHt$HH H0H|$(LD$0LL$ H(L H(L0tHH Ht$HHH\$PH(H0HqH9r,H(H H9sHHl$8H@HHHCH+ RHD$H\$BHD$H\$S̐HHHH@r1-H H HtHH %H@H1HtH9AwQcfwH9Ap11̐HHHH@r1-HH HtHH %H@H1Ht Qcu H9AwH9Apw1HI;f?H0Hl$(Hl$(HD$8HhH 6 HH5HА;'HD$8H`h11H5H'HD$8Hh011H5H&HD$8Hh11H5H&HD$8H8i11H5sH&HD$8Hi11H5OH&HD$8ƀXh1HIHHDH|HPHH HA,Hl$(H0HD$͝HD$I;fHhHl$`Hl$`H`IL9smHD$pIV0IV0HT$P= t#H\$xHD$pHT$PH\$xIHHL$8LLT$XHH|$@1Hl$`HhLLHLhMv6I9MLGMM)ILMhAEIL)MLE묐AL`MI L9H\$0@u%Ld$H^HD$pHL$8H|$@LT$XLd$HLLAHT$0H9w H)LL$pH)LL$pIh1HL$8H|$@MILT$XIվHT$PL`@t _HT$P=~t HHT$PHuAtIFHl$`HhHD$H\$裛HD$H\$Ld$M;fHH$H$H$LАׁu(DOI‰LE @@t̋= =I‰|$D$u$LT$xL$H$H$L1 1H$HĠK4IM)MMHH H9MpAH4fH@I4IIHHoLMI?L!L@IIHDHMIM9wML|$pLD$8Ht$HL\$hL$H$LL$`E1vHT$0\$L$H1P=y|t1HD$x]H$HL$0H)H bHD$x[HD$0H$HĠILT$xL|$pM9OT%L$EM9fE|=AE!EtLl$@E1LQH$LL$`fDIsLAAEtO IfI HL$XHT$PD|$J@HD$HD$ u"H$H$Ht$@D|$H\$PoHH HL$(HD$x\HD$ 1D$HD$xZH$D9HT$(H\$PHt$@HHEH$Ht$@<A!H$HL$XHt$HHLD$8IL\$hL$Ll$@HH$Lȹ lLLAHH@GH@;HD$H\$HL$H|$ Ht$(LD$0藗HD$H\$HL$H|$ Ht$(LD$0I;fv{H@Hl$8Hl$8HD$D|$D|$D|$(HHT$HD$H\$ HD$HD$(L$0HD$H$@軕EWdL4%HD$Hl$8H@HD$H\$L$̖HD$H\$L$XI;fvqH@Hl$8Hl$8HZHrHt$0z HB t#HD$(H\$ @|$HD$(H\$ |$1HT$0HHl$8H@脕I;fv5H Hl$Hl$t1aHl$H H <HD$H\$L$HD$H\$L$HHl$Hl$HpHLII@syIH JE1J@MCL9v>NAMu)HpMI MIII@sJMHl$HL@蒹L@腹I;fHHl$Hl$1I)K I M)HLDH}HpHLIfDI@J4ƄLLIفI9AIH L$ A Iv"AHcHl$HHIM9vHLLL„2HLL9wH9vH 3L@gHD$H\$HL$ғHD$H\$HL$I;fH(Hl$ Hl$ IV0HHtH u#HD$0HT$1~HhHl$ H(H HXHsH H Hl$ H(HعoHL$HhH{HL$HT$H HHD$0H@|Hǂ @HD$HD$Ld$M;f9HH$H$@|$/$H$H$IV0HH$HfHHzPuOGTH$HHHQH$HBHHZPHJXH$UH$H$HBHMHtMIV0HHt.L Mt"MQI?N L E1Mt 17E1HIH$1E1E11E1E1LD$8LL$pHt$XiSHL$X@Ht1HD$XH\$8H$HHHL$xH$H ;Ht1f_H$H$iu!H$T1H$HĐHD$HHD$xH$:H-HL$HH\$8HD$XHL$HHT$pHuH$HHT$pH$bTHL$HHD$XLL$pH\$8HDCEt1LIMI)L9ںIBLItVHvDL8L%AMIM9sM)L9IGH9HBL$M%L$ML$M L$MH\$8HD$XLL$pHHT$P"EWdL4%H$HD$0H$H H=HT$hu#HH!H`H H H$HPH\$PH  HkEWdL4%H $HT$hu"HL$@H$H .NHL$@HT$0H)HJH HD$XLL$pL$|$/HL$H$cH$H H\$`HL$8Ht+HD$XH\$8HH'HL$8H\$`H)H{H $uHMH\$`H$@蛀HL$8HHHHP$wu HL$`HH/HL$`HH"u HL$`HH(u HL$`HH H HD$pH$HĐHk +fLй蹱HD$H\$L$@|$DHD$H\$L$|$I;f=H0Hl$(Hl$(L$H@|$IHD$8LD$XHt$ H\$@HHLf{ HD$8H\$ HL$Xt H|$@GdH|$@T$Ht8HG(HG8Hw H HwHwpHwcADHD$8\$I_bHD$XH uHGhHG8G\EHfHDOH L YHOhH+1HHG8H e O\HG0HLJHG@HG8f[HL$@HAPHA8iH|$@HGHHD$8OXHOcH_HL$XT$HuzHpH\$@HKHH HDH=@sbH„HHH@HH HѺHD$8HT$XH8 EWdL4%Hl$(H0ù@lgHعD:HD$H\$L$@|$Ht$ LD$(跊HD$H\$L$|$Ht$ LD$(tI;fHpHl$hHl$hHD$xHHH HH4L]MHIIM!L9rH9H\$XHWHHHt$xHH9uHH1HH)Hu1wHT$`H\$PH|$HHH DH/|HT$HHPH|HD$xHPHHL$HH;HT$`H\$PHt$xHD$HHHHHLKHH|$XHIxHII!HKHD$0H 7HL$(H#HT$ H, (pHD$XfH9 UHD$(HL$0HHL$ H;H~, *11Hl$hHpH1HD$@HHT$8LHI)LD$XLH Hf{HTzHT$XHPH={HD$xHH\$8HL$XDHT$XHt$@HHl$hHpHD$H\$χHD$H\$D;I;fvXH(Hl$ Hl$ D|$HD$H VHL$H\$HD$HD$H$EWdL4%Hl$ H(HD$H\$3HD$H\$I;fvWH0Hl$(Hl$(IN0HJHL$HBHD$ IHD$ H\$1HD$ JHl$(H0I;fvXH(Hl$ Hl$ H\$8L$HD$0IV0CdHHD$0H\$8L$XHD$0LJHl$ H(HD$H\$L$HD$H\$L${I;fmHPHl$HHl$HHD$XL$hH\$`Sc{e&S`fT$&f4sXf9HS HH8HjHsHHHH@HHHH@HH HAAAD vf{`UHK H HL$@H:HvL$huH\$@HH vHawL$hw$uHL$@HHH8HL$@HHH(uHL$@HHH(uHL$@HHH H@wHD$XHHHT$`HZ Hr1HIHL0HL$`HQc1ۆIV0HHt"H H=}sGH H ,HD$XHHhH+hHHhH0hHH0hHl$HHPùH )DH} )H@fKXHL$8HD$0HSHT$(H g HD$`@HP HD$(DH/0 D$&DH* HD$8D{H jHD$0D[H #D蛿Hg 7芿HD$H\$L$vHD$H\$L$bD8H@HXHH f@`@bH@hDxx@dH@0HǀDxHHc1ɆI;fAH0Hl$(Hl$(HK@H9uLH9uH HHKHH@H9Xu HKHH HHKHHD;HCHl$(H0HD$8H\$@HL$ HC HD$HKHL$ Hҙ -HD$Hi fHD$@HF DHD$qHw+ DHD$ QH D{HD$81H$: 趽HD$H\$覀HD$H\$I;fH0Hl$(Hl$(H HL$ HuHL$HH\$ t$PHH:HtDGI9u@8w uHH1H|$HueHaHAHHHH@HڄH H%HH=s`HHHڃ HD$0@HL$(ZuAtIFHD$Hl$8H@ùKHع@;H~o 誸HD$\${HD$\$LI;fHPHl$HHl$HHt$xH|$pHL$hH\$`HD$XHgb=HHD$@HH#?H|$@G HO=u HT$`HWHHHT$`қHHL$8HT$hHW=uHT$pHW HT$xHW(%HW HHHt$pЛHx(HT$x肛HHD$XH2=cHD$X1H IV0IV0HT$(HLH8sb@uH|$0H+fH|$0HD$8H 71ndHT$(DEHDAuAtIFHl$HHPÐH;H 1H+ H #H HT$@H HH=1Hl$HHPHD$H\$HL$H|$ Ht$(f[yHD$H\$HL$H|$ Ht$(fI;fH Hl$Hl$HtWHD$H;H SH+ H EH &HT$H HHHT$0HHHHv1fH)H3HHHHtHHHt15HH8H4DHv1H)HHNHHHL$H HHH HH+8HD$Hl$8H@HT$H HHHH7HD$Hl$8H@HL$ Hz7HD$ Hl$8H@HHl$8H@H/ 訰HHйHD$osHD$I;fvHHl$Hl$Hl$HHD$3sHD$I;fHHl$Hl$H5H HtHHuJH H H H wH x1HgH HK6Hl$HHHYHuHQH EH &wrRI;fH(Hl$ Hl$ HHt!HD$HHH HD$1芿HD$ HD$(HD$0H$HL$ HT$(Ht$0HH=Uu H HnHl$xHHQ %3HD$(MHD$[Ld$M;fWHH$H$H$H$fH?H?H$D|$pH HL$pHD$xD$HDŽ$H H$H l H$HT$pH$HH0HD$H1 HfHHL$@H$H$;.H  H HHD$@HHIHAHL$@HIH$H|LDH9}L9H\LHL LTMIL!MIM!MfMMHD$HH~wHLLXM9/LD$(LL$ H$II;I|;HHH$HHHD$(H\$ -HL$@H$IIHD$HLLL9}bLL$0LD$8H$HJNDHLH$HHHD$8H\$0Q-HL$@H$IIHD$HHMMM9v MM)ME1MLT$hL\$`Ld$XM9vM)E1LD$PLHLVHT$`Ht$hH9vHL$XHD$PHH)H9HD$PH|$XfvH)1H5.H>HHL$`HT$hH9vHT$XHt$PH)1H$HHD$HHL$@HH$CH$HHH$H$HH$HH$HĠL{mLLpm1HfmHLm薠H 腩H$اH gH$躧赢РH#d .@蛅HD$H\$HL$HHD$H\$HL$rI;fvFH0Hl$(Hl$(HD$HrHt$ HRH:HT$ H2HHHD$fHl$(H0HD$H\$HL$D[GHD$H\$HL$HHl$Hl$HRH5HHHH!HH觻L$,uT$ T$ 9~ HL$pQ$HL$pT$(u\$$\$$9}Y(HD$0HL$8HT$HHt$@H\$p{ u H9LD$P LD$PD9~ H9DC H9vH)1HHl$`Hh1HCi1H9itH cHD$x蹣H HH$蛣薞豜H` .D{HD$H\$HL$H|$ aDHD$H\$HL$H|$ I;fHHl$Hl$HP@Ht^HuIHH@HHpHH!HH!HPH!xHH!H HH HHl$HGHl$H1HHl$HHD$H\$@CHD$H\$LI;fH Hl$Hl$HPHs H)HHHv&H9sHHH!Huߺ@HHHH!HҾ@HDH@H@HHٿHH!HHHHxH!LEtH.HD$(HL$Ht$HfzHL$HHt$HHD$(HH!pH!pH HH HHHl$H 1HHl$H HD$H\$aBHD$H\$I;fHHHl$@Hl$@Hxt@HD$PH\$XHIM LL$8MILL$0?H HT$(1Hl$@HHHMMH@LXIsPMI#I (NTxAMAIML MIIOs1QfH u H HH ցH*H HH@IJH}FHHL>I;fHHl$Hl$HD$ H\$(Hu%HT$ H2HzHHl$HHT$ HJHHpH9vsHH<Ht2ILLL$(OI9rLL9vLȻHl$HH9}s%HHHl$H11Hl$H>H@=1H=HD$H\$HD$H\$I;fH`Hl$XHl$XHH4HH9v HH)H1H|$HH\$@H^Ht$8HT$0HD$hf{H~8Ht$hHNH>L@fDL9IJ|LD$@L9@f Ht$hLD$@1HNLHVH9}!fIHMLd$HM9A ILd$HE1E@@I9IBLIO\H9iHM\HNLL^H9AIH)I)MII?M!K HI9LQL9IOMWIHI?I!KH9tHEHt$hLD$@Ld$HHVHNHH9HNHD$0HL$8H92E0@t(IBH9HMdHD$0HL$8H9Et#I9NIOHD$0HL$8H9LT$(HyH9H~HLNIBH9L)M)MYIHI?I!JI9HyH9HOILII?M!IH94HD{DHt$hH|$(LD$@Ld$H HT$ HL$LL$PH~HHHVHHN sHT$hHHrHL$(fH9Ht$ H9H\$P@H9tHCHL$(HT$hH\$PHt$ HzLLJHAH9H)HLT$I)I9ILI)IIHI?I!KIH)LIH?L!HfH9tHHoCHT$hHt$(HLD$@Ld$HHHHNH9s3HL:Ld:HD$0HL$8H9vM)E1LfHl$XH`H9HF:H9H9LH(:HD:H9LK9F99HL9H9)9L!99L9NlH; f;uHD$@sHj DuHD$HqsH DtvlH" )EQHD$H\$HL$0HD$H\$HL$I;fH`Hl$XHl$XHD$hH\$pHH HHL$hHQX\$H H\$0HL$hH\$0t$HT$(H9HHD$hHHHL$(HT$0H9wHpHxfH9upHt$PHHHDH|$ H3HHH EHHT$hHJHtHD$@HH\$P@HD$@HT$hHHBHL$ HJHt$8H7b:HD$HHL$0HT$8H HHL$(HHD$hHHt$HD$HHIH HHH@HL$pHHl$XH`HD$H\$D[HD$H\$LI;fH Hl$Hl$HH HH 9v%HpHH)H9vHH-1Hl$H 1Hl$H ÐHK HH HH9urH AL ƐHHHs @@tĐHS H HHHRH2H2Ht1H:Su$Ht$1H1ɇKH`Ht$HHl$H HD$fHD$I;f#H(Hl$ Hl$ HH HH 9HP H9vRHPH HHt>StaSt=HD$01H1ɇKH_HD$01HH 1HHHl$ H(H. 1JMH23 49MHT$HL$gH pHD$mH pHD$mihH #LHD$HD$@I;fv{H Hl$Hl$HHfHt%HHHH:HHH9@@t1Ht HHl$H H3H GJHl$H HD$HD$kI;fH Hl$Hl$HHAt Hl$H HD$bfH QoHD$H ClH: 2o1+lhfH pKHD$eHD$[H Hl$Hl$H\$0HHHHD$H~H9H} HKH9 Hl$H ueH dnHD$ZkH InHD$0@;lgeH D{JH Hl$Hl$IV0HHtt"Sr\HD$(H H2HD$( ӾHH!v)HsHiʘHHl$H Éй-1T$ddHȾ SmD$JjfDdHY IH Hl$Hl$IN0HHtt"sH ;Hl$H ÉD$cH, lD$i f$dH HI;fv`HHl$Hl$HHH=[t HH HH HHHHHH+Hu Hl$HH {HHD$p HD$HHl$Hl$IN0 h=3[t8Ht3i=[u%IF0HHpH`Hl$HHb H$ EWdL4%Hl$HHHpH`Hl$HI;fH@Hl$8Hl$8HpH`H)HHOHD$HHL$0Hǀ`=Wu11fH1'HT$(HpHEHT$(HHD$HHL$0H9|H`#Hl$8H@HH9rHpDHrHT$(H\$ H1HD[LHuHD$HHL$0HT$(H\$ fHsPIHD AHLAAHEtHD$HHL$0HT$(H\$ ^DH5[HKIM II@J4΄IHDDLDLI ALAAEuDsb@t+HD$HHHHshHHHL$0HT$(H\$ Ht$ HL$0H9sqH\$HHpHHHT$(HHw;HpH8HٿHHYHD$HH`aHl$8H@Hٺ -H,Lȹ@,,HD$DOHD$QI;fv\HHl$Hl$ Uu:HV UuEH UHVHl$HyI;fvIHHl$Hl$HD$H\$ ZHD$HHHT$ H HPHl$HHD$H\$HD$H\$̃rtu1҃wt Du.1HtHHHHtHHHHHK Ht.HHȿH{ ADEtHHDH1HHHSHt*HHпH{AEtHAID HƿE11H+HH tHS I;fBH0Hl$(Hl$(HPfwu HP HHƸE1LAELAL AEuLItMtuXDNAs?ru ArwwuAsrruAs1Hu+HT$ H[ HӹInHT$ E1LIw IHl$(H0øHl$(H0H fAH UAHD$\$L$BHD$\$L$I;fH(Hl$ Hl$ HD$0HD$0Hxu1H vHT$01?HHHL$HHPHD$Hl$ H(HiHrH4HHZHHrHHD${HD$QI;fHxHl$pHl$p#1HHIIJQDH&$:EWdL4%D$Hc|$HcL$ HL$PH|$HHD$\D$dHQHT$`HcHt$\Ht$hE1MIHu"HD$HHrQHD$PHnQHl$pHxHL$@ ZH bHD$@_J\eZH 4?D$HL$@YH !vbHD$@l_[YH5 >FI;fvcHXHl$PHl$PHD$<HD$@D$< H\$@HcHt$ AArEEEPwEEEH\$XDS@HD$8H$pHxÐDSDAAA8tEAADDSAAAE1EuHD$8DCD$,L$0HT$HH=KArt$4TH' %]D$4ZVTHC$ 99H!H\$@NTHr f;]Hc/[H ]HD$@ZlVTH V9HD$KHD$HHHl$@Hl$@H}:H$D$\$ D|$D$ :EWdL4%Hl$@HHD|$0HHRZ/DHHHHT$0Hiʚ;H)HL$8H4$D$\$ HL$0HL$HD$D$ 9EWdL4%Hl$@HHHPHl$HHl$HHD$XH$D$\$ D|$D$ *9EWdL4%D$(| Hl$HHPD|$0D$@H VHL$0HL$XHL$8D$@HD$0H$EWdL4%Hl$HHPI;fvsH(Hl$ Hl$ HcBHD$HJHL$RH& [HD$zZH ZHD$@X6TQRHl$ H(f{IIM;fH( H$ H$ H|$ 1HH$HD$ HT$ HT$D;9EWdL4%T$|HcH wY11H$ H( HH9}\ (ҹDщH$ H( Éރ@uº  I;fH`Hl$XHl$XHD$hHHIHL$8HD$($HHHT$HT$(HT$D$3EWdL4%D|$@HD$PHAHD$@HD$8HD$HHD$hHD$PHD$@?D$$$HL$(HL$HD$D$2EWdL4%D$$u Hl$XH`H:vH+CvHD$0OH* .XHD$0Hc{VHH jXD$$HcH[VH JXOD$$ tHR 4%OH|! =XOHD$cHD$YI;fvmH8Hl$0Hl$0HBHJH$HL$HD$HT$HHD$ :5EWdL4%D$(| 1Hl$0H8Hl$0H8(L$@M;f.H@H$8H$8PHcH4HuHcHӻHH.H>H=>H$HD${-EWdL4%D$}E1"E1hNHuH$0H$8H@ÉD$ H|$0Hl$Hl$Hm$HL$0HL$D$k-EWdL4%D$D$$L$ $ -EWdL4%D$$}H$8H@HDŽ$ HD$0HH$8H@H$8H@HL$(HH$0HsOHL$(HH$HD$HBHT$g.EWdL4%|$uHL$(H CH$0H=Cu HCD{NH$8H@1HD$H\$rD$H\$I;fH Hl$Hl$HD$(H\$01$HHOHL$HHT$(Ht$0HHH9HHtkHqH9vzHL$HtHu H5CfHuIHRgHOg=Cu H5/g H=&gL_HH?HHHl$H HHHHHD$H\$HL$VHD$H\$HL$I;fHHHl$@Hl$@D|$,D|$0HH=H$HD$5*EWdL4%D$@D$($HL$,HL$D$z*EWdL4%D$D$$L$( $*EWdL4%D$$~?HHcHD$,ttH}1HHDHt 1Hl$@HHHl$@HH1Hl$@HH1Hl$@HH1HfI;fveHH,$H,$?H@=x?t-D}:}7},} "}H,$HI;f@H@Hl$8Hl$8H\$PHD$HHL$XHdH5dHtBH9HHOH9t$H|$(HHHD$HHL$XH\$PH|$(DHl$8H@HH=H$HD$f(EWdL4%D$HL$PDHvpD$$$HT$HHT$L$a(EWdL4%HcD$HD$0L$$ $'EWdL4%HD$HH\$PHL$XH|$0CHl$8H@1H1HHD$H\$HL$"HD$H\$HL$I;fvqHHl$Hl$HD$fH|$=?uHGPHOPHHvHׄ=?uHx0H0HHSHl$HHD$@{HD$qI;fv;HHl$Hl${'EWdL4%IF0 $HHHHl$HH@Hl$8Hl$8D|$D|$(HD$ HD$0HL+HT$(HeH9u=_<t Hk*H)fHHT$H\$1IHl$8H@HHHl$@Hl$@D$D|$ D|$01HL$ 6IHT$(s Hl$@HHHHT$(D$H\$ 1IHl$@HHH0Hl$(Hl$(D$8H$H\$HL$HD$P(EWdL4%|$ t0D$8 t'!t"@tH:E H$9EWdL4%Hl$(H0I;fv`H(Hl$ Hl$ HD$0H\$f&EWdL4%HD$0H@HHD$HD$HD$&EWdL4%Hl$ H(HD$H\$HD$H\${Ld$M;fHH$H$IN0H$<H<H$tY$8D$$1҆ǁ8$%EWdL4%D$$H$H$D|$PD|$`IV0øʚ;Hփt1HcӉøʚ;HHtHHH1H/dxdvH H(~H1IHIHL H1Љ‰HH HZHRZ/DHHHH?H)HT$`Hiʚ;H)HVHT$hHRZ/DIHLI?L)HT$PHiʚ;H)H\$XD$ D|$pD$D$D$HHT$xHQH$$HT$pHT$HT$ HT$#EWdL4%|$tH$HËD$ $D$HD$PHD$HD$#EWdL4%D$uCD$ H$8H$H$HH$HÉD$(HD$PHD$HHL$XHL$@HT$`HT$8H\$hH\$0AHe <vJHcD$ lHH: [JHD$HQHH D;JHD$@1HH DJHD$8HHG DIHD$0GH DID$(HcG(CCAH[ &D$,@H= 9ID$$HcGHj {ID$,HcmGB@H %D$D$@HH$H$IV0=+L$H(:H$!:$":$#:$$:$H$H$H$H$H$L$L$'/HD$@H\$8HL$HHu!H9$ufH9$>H$H$H$HL$xH$HT$pH$H\$hH$Ht$`H$H|$XL$LD$P>Hł GH$DH fGHD$xDH D{GHD$pqDH D[GHD$hQDHr D;GHD$`1DHR DGHD$XDH2 DFHD$PCH~~ DFV>H$H$H$HL$x=Hբ FHD$@CH FHD$8{CH jFHD$HD[CH JFH$f;CH~ *FHD$xDCH F=HR DT#H$H@0H=1ɆH$HH$HI;f~HHl$Hl$HL$0H\$(H|Hruntime.@H9t3LHtHI0Ht u Hl$HHD$(H\$0!HD$(H\$0y!HD$H\$HL$dHD$H\$HL$PI;fvAHHl$Hl$HD$ L@HtHI0Ht u Hl$H HD$H\$HD$H\$I;fvzH8Hl$0Hl$0HD$@H\$HHD$8H D|$fD$(HT$@HT$D$(HT$HHT$ D$)H: H\$萞HH& HD$H\$1HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8Hw D|$fD$(HT$@HT$D$(HT$HHT$ D$)H H\$HH HD$H\$HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8Hg LD|$fD$(HT$@HT$D$(HT$HHT$ D$)H H\$PHH aHD$H\$HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8Hǻ D|$fD$(HT$@HT$D$(HT$HHT$ D$)HZ H\$谜HHF HD$H\$QHD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8H' D|$fD$(HT$@HT$D$(HT$HHT$ D$)H H\$HH !HD$H\$HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8H lD|$fD$(HT$@HT$D$(HT$HHT$ D$)H H\$pHH HD$H\$HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8H D|$fD$(HT$@HT$D$(HT$HHT$ D$)Hz H\$КHHf HD$H\$qHD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8HG ,D|$fD$(HT$@HT$D$(HT$HHT$ D$)H H\$0HH AHD$H\$HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8H D|$fD$(HT$@HT$D$(HT$HHT$ D$)H: H\$萙HH& HD$H\$1HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8H D|$fD$(HT$@HT$D$(HT$HHT$ D$)H H\$HH HD$H\$HD$H\$bI;fvzH8Hl$0Hl$0HD$@H\$HHD$8Hg LD|$fD$(HT$@HT$D$(HT$HHT$ D$)H H\$PHH aHD$H\$HD$H\$bI;fvDH Hl$Hl$HD$ H HHHtHRHI;fv@HHl$Hl$H H HHtHIHȐ5HHl$Hl$IN0LH9uXf@HL$ HHHL$HHDx8H@ H@0HJ(HH(HB(!EWdL4%Hl$HHI I;f HhHl$`Hl$`I^0I^0HMAH~pu4H=Zt*H\$@Ht$XHYDHL$XHQhHT$PHNpLFhHt;MLI~uLF(HD$8Ht'LF(=}uL@(>LH(ILL*LF(=VuLA(H|$`LL$h IH|$`HN(HL$@HHL$pHT$ H\$0H|$hLD$@Ht$8GH$=uHq Hq HtS~1tHv=uHq Ht.HHH Hw| ǁHV(HHV HH HN [H$ JHe %OH$H$^+HE H1e %@H$H$^aQH$ D;%HD$pH@0HHL$PHHD$(HD$PH\$(%{QlH0 ;Hrd $D;H$H$]H D{Hd j$H$H$]KH HD$H\$D{HD$H\$HD$IN Ht!y2uy0uHH9u A0HAHY11H(Hl$ Hl$ HD$0HD$D|$H WHL$HD$H\$HD$H$zEWdL4%Hl$ H(I;fvYH(Hl$ Hl$ HBHD$HJHL$Hs "HD$H\$"0KHl$ H(Ð{H(Hl$ Hl$ HD$0HD$D|$H WHL$HD$H\$HD$H$zEWdL4%Hl$ H(I;fvYH(Hl$ Hl$ HBHD$HJHL$Hr !HD$H\$!0KHl$ H(Ð{I;fH0Hl$(Hl$(HHHtHL$HH\$H9wEH9HrX D Hrn HD$ڿHD$H8Hl$0Hl$0Lt$IN0fuD|$D|$ HeHD$HD$HD$HD$8HD$ HD$@HD$(HD$H$EWdL4%1HHl$0H8I;fvnH8Hl$0Hl$0HBHD$ HJHL$HRHT$(HD$(H\$ HL$XtOE$EWdL4%Hl$0H8HHHl$@Hl$@D$D|$D|$ D|$0H HL$HD$HD$HD$ LHD$(HD$HHD$0HD$PHD$8HD$H$EWdL4%|$t WBH H$ǼEWdL4%1HHl$@HHI;fHHHl$@Hl$@HBHD$8HJHL$0HZ H\$ Hr(Ht$HRHT$(vt HD$(HtH  2HD$0H\$ HL$HT$8Hl$@HH襼D[I;foH Hl$Hl$Lt$H=uH .HL$HQ0HQ0} ǂHI0 fthu>ǁ 'H` $eEWdL4%$LEWdL4%1Hl$H ǁ HK .1Hl$H ǁ H  H }= =~@;Hl$H 袻f{I;fHpHl$hHl$hHL$XH\$PHD$x5ArE11H4RH=sLDHtMt6LD$0Ht$`H] HD$`H\$0(T$,Hs] tD$,HD$xHHL$HHHT$@H H\$88HeV 'HD$Hf{H6V  HD$@D[HIS HD$8D;HhR EHD$xHL$XH\$PHDIv0rAA)@uCT$(Hx0H9AE DL$'H9uY}5Hr $@HD$PH\$X1H|$x%,HD$xT$(DL$'>JeHD$x9HD$PH\$X1H|$x+HD$xT$(DL$'=uEt;T$(H|H ɅtH2zH$zD$(Hl$hHpHD$H\$HL$蒸HD$H\$HL$IN0IN0LH9t*ZuAtIF1Ëu%uuHu t$SuAtIF1Ð uHzpt*ZuAtIF1ÐZuAtIFI;fvwHHl$Hl$HtXHP0uHL$H HtHl$HHD$Ht 1Hl$HøHl$H1Hl$HHD$H\$HL$诶HD$H\$HL$[HHl$Hl$mHtx(Hl$H1Hl$HI;fsHpHl$hHl$hIV0HHt3HD$x11111E1 H|$8HHD$xHt$0\$ HT$XL$LD$(Ht$0\$ HT$XL$H|$8DAAbAt8t*HxuH9P0uD0A9AE1E1E1 E1EF93HD$xfǀH@HP0HT$`0t$$H|$XH9t |$ 9@@|$D5=D$uHT$`HD$0+EWdL4%H$HL$0H9MH1HT$`4@@t#HL$HHлfHL$HHT$`HHT$`HHT$`HD$0H|$8LD$(L$\$$HHD$xHD$xH|$8LD$(L$HT$X\$ Ht$0Ar%AfAA tA D =u$HD$xH|$8LD$(L$HT$X\$ Ht$0SHD$xAL$DA DD7HD$xH|$8LD$(L$HT$X\$ Ht$0Ht$0\$ HT$XL$HuuEWdL4%L$I'LD$(SEWdL4%HD$(H9$}#$ nEWdL4%LD$(EWdL4%DEWdL4%L$IGHD$xfǀHH HP1L$Hl$hHp11Hl$hHpÐLt$PL$HHT$@y H0r hHD$xHO JHD$@D;Hs *D$@v HD$PL$HHT$@Hq DHD$PQHYO DHD$@Hfr DD$  H#j HS 'HD$yHD$oI;fHHHl$@Hl$@HD$PuRHD$8L$t w: N1T$tHD$81۹4.Hl$@HHHl$@HHÐLt$0L$$HHT$(fHRp HD$8DHN jHD$(D[ H#q JD$$@; HD$0L$ HHT$(Ho DHD$0qHyM DHD$( Hp DD$ &Ht HD$\$L$HD$\$L$.HHl$Hl$Lt$AƆAtH Ϭ H HD$ƀHl$HI;fH Hl$Hl$H;ֵD$H kH#軵L$HcH@H G9H w Hl$H H wH9k Hw 読EI;fsHpHl$hHl$hHP0@H9&HHH~HH9rH)DH9 Y8v11Hl$hHpH$HHHD$`H\$X1H$7WHL$`HQ+y+w HLD$X12H֋yHH@LD$XM@@HLH!fHQ)D$,H\$0Ht$PHL1HL$`y+w LL$X13HT$PDAJH ALL$XM@EILL!HtoH\$8HD$HHT$@HL˹H$1|-HcH=HHT$@LHD$`H\$X̯ H\$8HD$HHL$`LL$XH|Hruntime.H91҄t;H}11H\$8HD$HH/h HL$`H\$8LL$XHD$HuH|Hreflect.H91҄t11Hl$hHpËT$,ftZJw;H\$0HH$H9H)HHl$hHpøH$Hl$hHpËLHøHl$hHp11Hl$hHp11Hl$hHp11Hl$hHp11Hl$hHp11Hl$hHpH] .HD$H\$HL$H|$ HD$H\$HL$H|$ QI;f<H0Hl$(Hl$(HL$HHD$8H\$@TuHL$@HT$HHt$81?Hl$(H0LMMI?I7MIM)L%KHH9~H=tfHLMI?I!fH9rnIHH)I9LOLMIH)H?L!HL9_L\$ LL$LLHT$HHt$8H|$@LL$LwL\$ %HHD$H\$HL$膨HD$H\$HL$I;fvTHHl$Hl$IN0ZuHL$H;jHL$Hl$HI;fv?HHl$Hl$IN0ZuHkHl$H薧I;fH0Hl$(Hl$(HD$8HH\$@HD$8hLDHHHHfHtxLB0A jH)LD$@I9IILII?L!H>H\$8H9tHT$ HL$HL$HT$ HHHH9r:HHl$(H0ÐH\$8HL$@NHl$(H0Hl$(H0HRHD$H\$HL$f[HD$H\$HL$I;fv)HHl$Hl$HE Hl$H I;fv)HHl$Hl$H {Hl$H̥I;fv@HHl$Hl$tH? 7Hw@ $Hl$HÈD$qD$I;f3H0Hl$(Hl$(f.@Xf.uVzTWf.w+f.uHzFf.v@H > fHl$(H0H= D{Hl$(H0WHD$HD$ D$+f.u z ^f.vD$-1vD$-b f1"H< Hl$(H0H^ f.sHY| f.w1 H^H|Xf.rH^1)H,Hr0@t HWH*\H YH|T$T$D$.fD$#e+H}D$$-HHH ףp= ףHHHHH?H)ʃ0T$%HHHHH)i HD$HH @{HD$ qH9? D[D$PHD$(L$HHT$ &H= HD$(H HD$ H> @D$+FH 4H +@HD$HHv! D{D$PHL! @[D$TLt$0HD$HL$HHT$ DH<  HD$HD{H HD$ DH= D$@1HD$0L$HHT$ HZ< D{HD$0H D[HD$ QH= D;D$0H 7uHD$\$L$b{HD$\$L$PI;fHHl$Hl$\$(L$,Sw$ 9uHÉHl$HHs !{D$(H @[D$,H3 蕷HD$\$L$zHD$\$L$0H@Hl$8Hl$8HD$HL$T\$P r  r9uBD|$(HGHD$(\$0L$4HD$(H$xEWdL4%HD$HL$T\$P11HT$ HHD$HL$T\$PHljAfDEuDAHT$ Hu2EWdL4%H4$HƈHt$EWdL4%HD$H9$}HL$HT$P1øEWdL4%ѲEWdL4%H4$H (u+=u uƇˆ]tnftt GEWdL4%H$HL$HH+HHHHǁL$TH|$HDEWdL4%H$HL$HH+HHǁL$TH|$HtttC<t f<t<ut蒱EWdL4%H$HL$HHOƇHH%HL$HHǁ#AEWdL4%H$HL$HHHl$8H@Hl$8H@H\$$@;EWdL4%H\$HHD$HL$PHD$HL$HT$PH }9@1@uH HB 1I;f|H(Hl$ Hl$ B HD$JHL$SH[ BHD$H 'HD$f{vHd D[upI;fv`HHl$Hl$u: t)HH ÄtHl$HH. ۲HD$\$L$uHD$\$L$vI;fvSHHl$Hl$ u.u)ƀH Hl$HH- HHD$\$L$5uHD$\$L$I;fHHHl$@Hl$@H\$XHD$P11H*1Lt$(I~0HT$XH=uHD$PHHHD$PjD|$0H]HD$0HD$(HD$8HD$0H$D;sEWdL4%Hl$@HHHD$H\$UtHD$H\$&I;fvQH Hl$Hl$HBHD$ƀHD$Hl$H DsI;fH(Hl$ Hl$ HQ H$xrEWdL4%IF0I~0H|$LHLJ=pu HLJHH1D{H1HHT$~uAtIFHl$ H( s(I;fvIH0Hl$(Hl$(H\$@HD$811H1HD$8H\$@Hl$(H0HD$H\$rHD$H\$I;fv.H Hl$Hl$H11VHl$H GrI;f`H`Hl$XHl$XIN0/Lt$@H!$4  H 胑HL$@HI0HA H _HL$PH[HT$01HFH9}H{uHƸ{A HƿE1EtĀ=Tt5Ht$(H\$8HsHD$8HL$PHT$0H\$8Ht$(C x軪EWdL4%H$HD$@ HD$茠Hu䐐 L$H4L$~- D[H8tH=uH *H+111)H t  t1HD$ HL$HHj2H[2HD$ HL$HHu Hl$XH`HHH<.HELK IEHH9|HH|HP ׬oI;fHXHl$PHl$PD$`IN0IN0HL$8zt1@oHD$0HD$0;H{{1 9Kt =ʉuxHD$@1H  t1H HD3H 2HL$@HL$HHtUHQHA8HT$HHt0HA8HHHH@[31HH렐DEWdL4%H$HD$(L$`t H11H#HD$8QuAtIFHD$(Hl$PHXHt %D$mD$H(Hl$ Hl$ Lt$IHuAtNH1袢HL$8HHD$(HHT$( HHHL$(#HL$8HvHq [HL$0HXЫHwH Hl$@HH](I;fH@Hl$8Hl$8IV0HT$0HIHT$0HƆH=7HHt$(1$HT$0HXH$"{EWdL4%HT$0H5HHT$(HT$ $HT$ HT$HD$D$TEWdL4%Hl$8H@\HHl$Hl$D$ 1 T$ ЈL$HHtxHu9u5uHB $fEWdL4%HH5H>@@u:诛EWdL4%D$n蒛EWdL4%D$QHHl$HI;fiH(Hl$ Hl$ H\$8IV0LHHHHT$8HHJHLHHJ0HHD$hu H&a=:H HT$HXH=tHfHҫIN0ZuAtIFHl$ H(tIN0ZuAtIFHl$ H(H"l *nHD$H\$HL$YZHD$H\$HL$eI;fH8Hl$0Hl$0=̧HD$D|$ H=HHL$HHL$ H WHL$(H3ήH H $HL$HL$vEWdL4%HHl$0H8HD$@HD{HD$@q`HʪůHl$0H8H0 JHD$@;YHD$I;fH(Hl$ Hl$ IV0IV01H5>@@u1HuAtIFHl$ H(HT$Hf 1HHT$~uAtIFHl$ H(UX0I;fHHl$Hl$H8;QmHf/HH¨fH̨/HfHH HtHL$H{HkHD$!HXHL$HǀX"HD$HuQW I;fH(Hl$ Hl$ IN0HfLt$HHL$HA0HLt$IF0HHHL$HI0HǁHHL$HQ0HKhHL$HI0HǁHl$ H(H [H JH{ 93VIF0ƀI;fqHHHl$@Hl$@HD$P\$XIN0IN0HL$ HfHL$PHtH$L$X11HH HtHXH HHD$(HD$L$XHɹH HEHL$0H>!HD$0H\$(HL$-HD$ QuAtIFHl$@HHHL$8HHD$8 HL$Xt HT$(1HH@{HL$ ZuAtIFHl$@HHÈHL$(HHHHL$ ZuAtIFHl$@HHËL DA9u9uMtH . 蹐H 訐H 藐HPV $膐HD$\$wSHD$\$hI;fH Hl$Hl$H 9u9H==5u =5t6H=5u =5t H 61Ht1Hl$H Ã=thH8HtHyuH@Hyt*H Hu 9 v 1t1ې[Hl$H HD$( хuAH1H2ft#1H5rHȻHl$H ÐH  tDHL$(A Qu HuHHl$H HD$(p"tH1p"@H1@t7HnHHӋ hY_uH[HL$(={59u2HHt&HfHD$(1Hl$H ÐHHHt HtH9|HHt$H1~HHD$HtHl$H ÐH{HD$(1oHl$H 1[Hl$H HD$GPHD$fI;f4H(Hl$ Hl$ ^fu1H O„u Hl$ H(IN0IN0HL$H1Hu_H ɅHHL$ZuAtIFHl$ H(HD$HV9HD$*HL$ZuAtIFHl$ H(H>, fNI;f3HHHl$@Hl$@IN0H`HHH9Lt$0Ht a cHL$0HQ0H` u.HQ0H_HL$0HI0HǁHl$@HHÉ\$裥Hb +蒮D$臫HM $vHD$0H@0H`HD$8Lt$(L$HHT$ ;H *HD$8D蛭H  HD$ DH D$@۪6QHD$(L$HHT$ 豤Hz D蛭HD$(H D{HD$ qH& D[D$P諦ƤH' 蕉HF !脉{LI;fH Hl$Hl$HI9N0t_Hu?HL$`[_HL$HHHfHl$H H DۈH( ʈHD$@KHD$QI;fH Hl$Hl$ jfIN0tƁH Ʌ|b^HD$HSV HD$@H u HHHl$H H-. ۇH) ʇJ@I;fLH Hl$Hl$\$0HD$(I~0H|$=tHn #HD$(\$0H|$=9u HHHHiHτ=uHx0HP0HHjHT$(HǂƂH2HƠHrt$0@tHL$HL$HC9t \HT$(=F,t&Hzptt HؑsHT$(HB8H$GEWdL4%Hl$H HD$\$;IHD$\$Ld$M;f HH$H$IN0H$Ht7H$H$p"t H$1&HD$XH\$P=E+u ==+tuDHHD$XH\$P=>t(H$HHMHpHH\$PHD$XH$ri fDS\2wb=~YH! H$sH$H H$H4HD$XH$H\$P5 uYH H5i>@@t H5x1Ht0H1۹hHL$XH$H\$PHH59H6Ht'H4$HD$FdEWdL4%H$H|fH=htIHDH$1lrH$H H$HtvHH11҄t1FHD$hHH$t5=DA)D9@@u H|$PHL$Xyu%ƂHY 1HO HD$X HX@tH$DHtHT$PHtH9| HT$PHH|$PHL$X=iH$H8HtH~uH@H~t*H5THu5ѽ95Ͻv 1u1,HbfTHL$XH$H|$P H$1tH H$HH$H~H$H5H$H=H|$pLLD$xL 8L$L1LT$@L-L\$HH L@uH$p"tHZf;H$@=H$t1 f„tAƁHC1H9HH$VH$H9HH\$XqHH$T$?ƁALE AEOH$H$H$H$Ht$pLD$x Ht;TH$ƁHP1HF@V HH$H$H$H$Ht$@LD$HLL$Py H$T$?HD$P5ot(5iwHt1H=kH7H@11@H5PHHHDH${EWdL4%H$HD$XH$HtH)HɺHL 1HH=GHEHBHD$`1HH HL$XHH H=tH|$`uBH$HHD$XfpH$HbEH$HRHL$`HL$?t2H$ƁH5W1H5MH$H$bH$1H$1۹H$H1ۉH$H1H$HÐH$Ht HHL$hHD$h H$="tH$1VH$1ۉH$H1ۉH$H1H$H1۹H$HH$H$hQH$ƁH 1Hݽ H$Hǁ(H$=!tH$1yH$1ۉH$HÐH$Ht HHT$`HD$`8 H$=!tH$1 H$1ۉH$HHD$` 8Ht 1҄tHHtH9~ =H$$H$i1iH$HW:H$1ۉH$HH< # {H zH5 !zH zHzHt,HHHLHHL YM@@t L B1HuH̕'NHǂ(HCH$= tH$1胄H$1ۉH$H"=fI;fHHl$Hl$=Yu IN0HHl$HËH 9u9ukHue t vH H11Ʉt1 D}uH Y@;6I;fv[HHl$Hl$H@ t1H~ H}8HjHl$HZI;fHHl$Hl$IN0HHL$H'*=~HL$QHL$1ҐtC=tHdHD$a]HL$A Qu HYHHl$HÐ{6H`Hl$XHl$XLt$IN0AƆIFIN0HRAƆIN0HAHD$`H\$hHD$HH8HHpHP@HPxDH9wH9Hs[HP8D|$0D|$8D|$HHH\$0H\$hH\$8HT$@HL$HHD$PHL$0H $LEWdL4%HD$ HT$HrpfH92wH9rsGD|$HD$(HHD$HD$hHD$ HT$(HL$H $fEWdL4%Ho H$EWdL4%HD$`H\$h@HD$H@0Hl$XH`I;fH@Hl$8Hl$8HBHJHL$HP8HT$(HXpH\$ H0Ht$H@HD$0qH  zHD$XxsHD$(IxsHD$ :xH yHD$@xH yHD$0DwH( yqHt U. I;fH@Hl$8Hl$8HB HJHL$HZH\$HRHT$ H0Ht$(H@HD$0pH  yHD$ XwrHD$IwrHD$:wH xHD$(@wH xHD$0DvH( xpHt T. I;fvSH0Hl$(Hl$(=Ut(11HlFIV0H`*Hl$(H0bfI;fv!HHl$Hl$HBCHl$HtH@Hl$8Hl$8=ԕLt$Ht9xu3H1Q„t H(oHl$8H@HH=tXD$D|$D|$(HzHD$HD$HD$ HL$(HD$HD$0HD$H$EWdL4%|$u 1Hl$8H@øHl$8H@1Hl$8H@I;fH(Hl$ Hl$ HBHD$HJHL$HRHT$HL$t=et HL$Hu, Hl$ H(1]UEWdL4%HL$HT$HZ0q9tf[H(Hl$ Hl$ IF0H9AtVLt$=t5D|$H`HD$LHD$HL$H $EWdL4%HD$H@0H@Hl$ H(I;fv3HHl$Hl$HJHI0H]1\Hl$HfI;fHHl$Hl$H8;1CHt 1HD$t1H HHHD$Ht{%Hl$H1Hl$HUI;f_H(Hl$ Hl$ HD$0IV0H1Hr0IV01HHBE=tHD$0 t 1Bf1HD$Ht, t1HՑ HԑHD$1THL$0HǁHHt HHHH HӐHHHˆT$H~aHD$Ht$HD$01D$twHD$01AHl$ H(HD$ HD$I;fH8Hl$0Hl$0D$@Hݐ L$@|1Hl$0H8HQH ۉHѿ!9HD$D|$D$(H jHL$HD$ |$(HL$H $.EWdL4%HD$HHHHH@HHkD$.D$%I;fv5HHl$Hl$BHJHL$軲HL$HHYHl$HD;I;fvbH0Hl$(Hl$(D|$D|$H YHL$HD$LHD$HD$0HD$ HD$H$/EWdL4%Hl$(H0HD$NHD$I;fvWH Hl$Hl$HZHJHB[IV0HHùHDA=]tͿHl$H ;I;fHHHl$@Hl$@H\$8HD$PHL$`HuH MIN0IN0HL$LHHD$09Hu*JHD$ 1۹ٔHD$ oHD$ HxDHD$ HHHL$HP8HT$(8H9HL$HHT$ HJ8HH F.HHJ@HHQHHD$(H\$PiHL$`HT$ H(HD$8=w^uHL$ H0H|$ H0HHD.HHT$PHH8H1@;tH5rHT$H|$ fHT$HHt:Hh=]uH|$ Hh!H|$ LhHL.HH|$ =It |Iv0H/dxdvH I(~I1HIH H1ЈuƇH@HD$ HPH+Ht$0HtHH"H<H"HHfH?r'H eH9Hdž" H eHHfH9u(HʊH HQHHHHHH=CtH8PHD$ HL$ZuAtIFHl$@HHHk 9IHv (IHD$H\$HL$ HD$H\$HL$@;L$M;fHH$H$^~ Hu1H$HH$H0fHt H>Hv11H$Ht$XDFD9DLIcHL$`H H@۝HL$`HH$HQIHH?(HH$Ht$XH[ LSHH|$hHfHl$Hl$0HmH$HH1H$1LD$hAdE1E1YVHD$PHHHGB "HL$PHddIHOH\$hH9tH$H28H$LD$PD$D$D$H$L$L$H$HH$H(H$=Yu-H$H$H $B$BH H$H$:EH. NHL$`HHHH=jYu H$HHH$*H$Hø1@[.HD$0 HD$FI;fH`Hl$XHl$XHKHHH)ы=@H9t.HD$hH\$pHHfHL$pD9HAHD$hHH HH @|D|$D|$H1 Hl$XH` f|qH HtHH H:u%H\$HHHHT$HH|$PuH\$P말H\$HHHT$H|$ uH\$ 낉L$HHL$PHT$HHT$8HL$@HtHkHHL$8H XHL$ HT$HT$(HL$0HtH0HHL$(H L$ #Hf[H EDHD$H\$5HD$H\$I;fH(Hl$ Hl$ HD$0HHL$0HH @Hu+H={u H=ytH_HL$0HtHH HL$ HHtIHYH)ӋH9t7D|$HHD$HL$HD$H$ EWdL4%HL$H9uHD|$HHD$HL$HD$H$EWdL4%HD$HHHHHHHl$ H(1Hl$ H( H HH HBHtHH/uH-HtHHubHD$YHD$/I;fv8HHl$Hl$HJHL$QئHL$HHYHl$Hf[I;fv>H Hl$Hl$HJHL$HHYWHL$D9HAHl$H I;f7HXHl$PHl$PD|$D|$@1H HtlHtHH H:u%H\$@HHHT$@H|$HuH\$H묐H\$HHHT$H|$uH\$놉L$ HqHL$HHT$@HT$0HL$8HtH\HHL$0H IHL$HT$HT$ HL$(DHtHHHL$ H L$  HIHl$PHXHD$5HD$HHl$Hl$Lt$IF0lfuHGX H$EWdL4%HD$H@0lIF0luhuHǀ`IdžHl$HI;fv HHl$Hl$HZ- >[?UI;fvHH,$H,$H,$HI;fvHH,$H,$H,$HI;fvHH,$H,$H,$HI;fvHH,$H,$H,$HZI;fvHH,$H,$H,$HI;fvHH,$H,$H,$HL$M;fHhH$`H$`D%OE7HtuH$`HhH$H$pH$Mf0A$HH|$`Hl$Hl$&Hm8~jLMtYI|$xtLI|$pt?D<Eu,H@HtH;t 1D1Q1J1CH HHHt=L Mt1H(H$L1HLD$`A@E1E117K6H$H1LD$`A@E1E1KH$`HhHLL 1DRNEL$Mt"MH0@MtMMt IhE1H@HD$PLHL$`HǾ@HH$Ht*LB0@MtMMIEM E1E1HLHL$`H|$P@a4IF0H$`HhH@"MB HL9}JMM@M@MtL 4MMIM!L$pM9rMM9sLIL L$pL9 s HHLHD$`L$ItL&ILD$hLUILD$h^HLgxH_pH@s?HL$XH$LD`LIIL1E1E11IHT$XHHHOHȹ@!HH } L$MuH wVLd$`DL9t3HL$XHL*H$pHL$XH$H$Ld$`L@IE1 J!HD$H\$HL$H|$ Ht$(HD$H\$HL$H|$ Ht$(I;ftHHl$Hl$@Hǀ Hǀ H = Lu H H \$(H@pH@x H=KfuHHh HxhHD$ H`HHL$ Hy@tT$(0T$(uH5bJHHq@FYHL$ HA@T$(HoH5 oʉ׃)х|] AAA!HcH9v9HD H snHdn@H9vHAD!Hl$HaHYHS 7HD$\$HD$\$fI;fHPHl$HHl$Hy9tBɉHȘHxHHH xH=xuHxH Ht?HxHHH xH=xuHxxHǀ HD$XH"IN0HHD$0Hx"HL$(HHD$XHx"HL$ HѻHL$XH"H"H"HD$0HH|$XD"=fIu HLJ"H"HH13Hǐ1ɇ"1ɇ"1HHD$ (HD$(HD$X=FthHD$XH8HtMHD$XH H{7HD$XHǀ Hǀ H =Hu H H [HH'7H|$XHGpHGx H=THuHOhHGhHH HD|$8HHD$8H|$@HD$8H$EWdL4%HD$XHH@HWHD$XH@@uHD$X &HD$XHǀ@Hl$HHPHD$DHD$I;fH Hl$Hl$HR1f1H H5WCH+5 CH5ICH5*CH3H CHH9 ~@H=rKHT$Hǂ H8HD$HHHôHHl$H ùA;6Ld$M;fPHH$H$xDT$@$="t,HD$xHcHT$xHL$xHH޸$%/EWdL4%HOuH $HtT$@LcIH)LL3uT$@ILL$pL uD$EPAAAEADT$DLkhE9HCɷHRh$9HcH9H5,h@HcH\$`Hy HH$H=gH5gHHL$`Hy 2HT$`HgHg=EuH$H5gH=gH$$H;hH=$hH5%hDD$DD9|/IcH9AHhHihH9"HQhIcH\$XH+ HͅH\$XHgHg=cDu Hg H=gH=gH gHF+ 聅HT$XHgHg=Du Hg H=gHOBT$@D$LL$pDT$D(L$LT$PD$D$@LL$pDT$DA9HcH UfH=FffDH9T$PHt$hH HuHm 9T$PHH$HȉDH eHeHD$hH9H€=C>H$H$JH$L$IV0HHIDD9|}M={tLM11H!H$LB0I34D$@D$LL$pDT$DH$HZ0HHC8f%BIN0HHA@XTH$HZ0HǃHdH=dpHH@8@=t6H@T$@$"D$LHD$LL$@$T$@9}HcH5KdH=HHl$Hl$HD$BHL$HA@TT=tF/Hl$HHD$HD$H0Hl$(Hl$(IN0HfDHP8HT$ Hu5xu&HHIF0HB8BHl$(H0fHHHT$@HD$DH3 MHD$ DJH MHD$DKH MHD$DJFEH$ D)1dH )I;f2H@Hl$8Hl$8IN0HHHL$0HD$(HP8HT$H9uKxuELt$ =t .HD$(HL$ HI0HǁH@8@Hl$8H@ËHHL$CH LHD$0(LH LHD$( LH {LHD$JH D[LHD$QIECH (H1 (@{I;fvJHHl$Hl$D$HXi[L$ ]i~(H7iHl$HÉD$D$I;fHHHl$@Hl$@=8=}8 8=\8t10=I8u1#ԍ=U8H8HɋhHhH+hH)Ӌ=h)DhD)9 HD$ D|$0H BHL$0HL$ HL$8HD$0^H|$ uHhH 6'H=Z8tHH9|H ]\H^\1H(8CHH gHtHXHg gHtTHgƁHHHHl$@HHHl$@HHHl$@HHHl$@HHH  &H' %HH9}HH"tHl$@HHÐHfˬH %&Hl$@HHHt$(T$|$DD$9@H (ID$HcGH  ID$HcFH HHD$(HcfFH2 HD$HcFB1@H D$I;fH0Hl$(Hl$(HD$8HJHL$ 1nu6HD$8 Yv&t uHD$ HHl$(H0Hl$(H0ÉT$HHD$>H| GHD$@DHT GD$@DA1?H D#HD$PHD$I;f%HhHl$`Hl$`HdۨdHd裪111!Ht$HHe航HD$PL$ HT$HHT$HHD$PHu H2Oف''G؉\$ $@;EWdL4%EWdL4%H$=8$ dt Od391ɄuD$ HL$P&HD$(Hc dt d39uD$ HL$PI HL$(@H9D$ HL$PHD$0HRd HgcJH pHH?HHHL$0HT$(H)H9HOHdUD$H c#1Hc HcL$t 1 D$ HL$PHL$PD$ Hb蹨D$ HL$PHL$PD$ Hc蹦3EWdL4%H H H$HD$XHt%H $HD${EWdL4%HD$XH Ib+2taHt\HH9~PHHH bH1iHD$@@Ht HD$@'f{HD$X YtHYD;HD$XD$$H\$X1ɸ[qHL$PHT$$ҺHE@t V1HL$Pt^H{Vv1H{V HD$8H aVHǁHL$8HD$8[H2V HL$P1ҋ5~AHcHi@BHt$HHH|$XDH9<=5Ht$X Ht$HI;fH8Hl$0Hl$0HD$@H0薤HL$@11HHT$HTH9THHtHD$H\$(stu^{DCI9t {HK 1IH{ HǀH9|1t$ H|$ H7HL$@HT$ H9HD$HT$H\$(t$ @1[s@u{(H9t s(HK0<H/藥HD$Hl$0H8ËL DA9u9u$DMu5_=_@11@tHs0HƀH9He/HL$(1QÄt5=tH*HD$({"HL$(AHkHT$HHT$HT$MH.D転HD$HL$@HT$HD$f{HD$I;fvsH0Hl$(Hl$(H RHL$ HRHT$11HH9}3H4~uHD$\$HK\$ HD$HL$ HT$ʼnHl$(H0f{I;fHHl$Hl$HH8@HtuI9N0toHHtWH9tRƂHB=F2u+ƀ"14„t HȻHl$H1Hl$H1Hl$HHD$HD$FLd$M;fHH$H$$nEWdL4%H$HD$(H=.uH.H\蹠 \L$$H\H+\HT$x\\$ 5\t$H=-H|$pLc}\LD$hLc \LL$`@5Hz >HL$(HT$pH)H4ׂCHHH?H)HfHc+{L$$Hc[HL$xHcf;L$ HcL$@:H =HD$hD;H =HD$`D;65$[ [D$L$Hc [HT$xHc[H\$pk4HΆ Z=D$6HD @;=HD$x1;H^ D=HD$p;H! D<D$6L6g4$HNH$HNH\$X1fHA$H$H\$XDH9mHD$0H4H~8DDD$DDL$H$H$FHD$PNHL$HVHT$@f;3Hs *F <A)|N A!IcH9v*H !1HD$THl$H Hl$H HRHD$'HD$fI;f]H Hl$Hl$H 9u9H HD$(HuG EWdL4%H$HD$(H\$H DHDH\$(3A) AHȉAAA!IcH9v{H D H wOHKHHhOH5cOH H=u*HD$HH!H?H Hl$H H) (f HHHz # HD$H\$HD$H\${I;fH0Hl$(Hl$(HNH/HT$ Hu EWdL4%H$HT$ H5CH=C AE EAE)EA EADAAE!Mc@L9J4D H5BH=B AE EAE)EA EADAAE!McL9v]HD$J4AD!HrH5MH=M7H HHrHT$ HD$HHHl$(H0LHMLHf;HD$HD$aI;fv=HHl$Hl$GHt Hl$HÐHL 1Hl$HHD$sHD$I;fH(Hl$ Hl$ ugHD$0H\$ HD$0H\$)ρrtHl$ H(HȘJHl$ H(HHH HHHH AEtHt HHgHl$ H(HD$H\$L$HD$H\$L$L$PM;fH0H$(H$(D|$ H|$(fHl$Hl$Hm)f.14 @HHt rHƉ„t H$ 11H$(H0H\ H=sHT H=rD|$HL$ HL$H$ HL$HaJdHL$HT$Ht1HHǁH JHt HHrJHsJqJD|$HJH$(H0ù&H HD$H\$L$|$fHD$H\$L$|$$I;fHHl$Hl$1ENИAqLMt-A)ցs#MtIH3HuHCADH)H;txH\$(HL$HIHL$(HQHHt1HHǂH,IHt HHIH5IHT$ ID9HH胎Hl$HHD$H\$HL$eHD$H\$HL$H Ht#HH1H @@t HȻH‹f9t'Hʘp@f@tH111HHl$Hl$D<$H HtHH1H @ H1D@t:HǂHt$Ht HH HH$HH|$1؋)օt)w݉É@@t1"H\$H$HHl$HÐLL$9s=<@HHLJLD$Mt IIIH<$MHT$H$HHl$HI;fUHHl$Hl$HD$ H\$(L$0@|$4H)AA)E|@H Hxu;HT$$DEWdL4%HD$ L$0HT$H\$(|$4HHE1L AEdHHHfHfH9]wHHDHHD$H\$HL$H|$ yHD$H\$HL$H|$ D< r Hp HHH H\ I;fvjH Hl$Hl$IN0LH(}2D|$H _HL$HD$HD$H$gEWdL4%Hl$H HD$膪HD${I;fH Hl$Hl$HBHD$XlHD$HvɉHDnEIN0HL$HPHXHHmHD$HHHEoHL$HǁHHl$H %D[I;fHHl$Hl$H(Ʌ}Nt}tuH,Ʌu1HD$ pkHD$ HH HtHHmHD$ *mIF0QuAtIFHl$HH HD$ڨHD$0I;fvXH Hl$Hl$Hx(t1HD$(H\$EWdL4%H$HL$(HA(HH\$HLHl$H HD$H\$SHD$H\$I;fH`Hl$XHl$XIV0ML9LȋtDBIE„tHl$XH`HL$xH$@t$#\$"HD$hhHD$HHL$hHDx @0HHHGA@s}HHHHHHiH)HL$8HD$xsOH=w1CDEWdL4%H$HL$HHA(HL$8H\$HHt$hHHD$x1s8H=v.Hu%HEWdL4%H$HL$8H\$HHt$hHS HT$(HHL$0H=JLLD$@ HL$0H=JHHD$PhHL$0HQHyJHھ2Ht$hDD$$EHD$@HHL$H|$"{H$HVH` H\$PL$#HHD$Hx0tHL$hHúHL$hH4;qD$$D@DAEtN HD$PiHD$HHH(H~!HT$(H)H$HH{HD$H'Hl$XH`H؋grHÉ1@@tIHg EHD$\$HL$H|$ @t$('HD$\$HL$H|$ t$(I;fHHHl$@Hl$@H¾2HHHGA@s}HHHHHHiH)HHVLHLD E\$XHL$`HT$8Ht$H|$0I0HD$(fHL$8fDHL$H,HH H\$0HD$ H\$HtHT$8 HD$(hHD$ HtdHH HtHD$H)H\$`HKH{HD$ x0L$Xt1HL$0dHD$(gHl$@HHHl$@HHHl$@HHH\$`HHL$ y0fuIN0uΐH 褡H؋trHÉ1@@tfHuHC0HH6~ HD$\$HL$HD$\$HL$I;f\H Hl$Hl$HQHq=uMLHYDy4AHMLILHE1@HDL@LHE1MLMMMMMQL9tII9vMQMQ@^=uILAA0A0IA HA IA8=uHA8 Hy8Iy=uHyHHHIA=uHAHHeHfHt=uHO8 H8CHyHt=cuHO8 H8"=KuLI@ Hy@HyHIAH=+uHAHHu=fuLIHs=uIA8EyIAHIy81IyIyIyHlIyHHt=uHO@#H@c=uII@ Iy@I=rfuIIHHA@IyH'Hy@1Hl$H IV0H/dxdvH I(~I1HHHIH H1ЃA0=u LQ8IHy8LLHL$8H\$ H\$HL$8HQ8Ht5r09q0s-fDH9JtH9Ju%HHHHӐHl$H HH HD$H\$HL$@|$ aHD$H\$HL$|$ hI;fH8Hl$0Hl$0HxHHH H1LHHHHqfH9tIH9vHHHT$(HL$HD$@Hy u12H|$ EWdL4%H$HL$HT$(H|$ HHD$@Hq@Hu H\$=quH7蔿Q0V0HQ8=SuHV8 H~82Hy=7uH~HVHHHHt=uHw8 H8/Hy=uH~HVHH譽HHt=uHw8 H8H~@tHQH=uHVH*H~H芾=u HFH H~H1iH^ =nuDy@%Hy@1JHyHA11Hl$0H8Ã=9uHA8HADy(Hy81Hy1:HyHyA0HHl$0H8HD$@HL$HT$(H\$HqHu Hyt*HtHyHt09~0w HH(Hy8fHtVH9Ou*=~uHG@+H1P=Tu HGH1*=.u H@H1DHD$H\$ HD$H\$fI;f,HHl$Hl$H{HK8HW=uH_H{8HS%HwIH薼H{8ͼH{dLǐHt#=duHZ8H8HHf[H=AuHO8HW8HHHHtLH9Yu =uHyWHAHHλFH9YuJ=uHy1HAHH註 =uHxHHH膻Hl$HH_ HD$H\$蛚HD$H\$I;f,HHl$Hl$H{HK8HW=EuH_H{8HS%HwIH6H{8mH{LǐHt#=uHZ8H8HHfH=uHO8HW8HH蚺HHtLH9Yu =uHyWHAHHnFH9YuJ=uHy1HAHHH =muHxHHH&Hl$HH3b KHD$H\$;HD$H\$Ld$M;fHH$H$H$HHHH$yH[9 hH$H$HHHH$0H 9 @H$niH$HHHH$H8 H$%D6H$HHHH$H8 H$H$HHHIhHL$xRHP8 AHD$xH$HHHIpHL$pH38 HD$pWRmH$HHHIxHL$hH7 HD$h-H$HHHHL$`H7 {HD$`H$HHHI(HL$XLH 7 ;HD$XH$HHHI0HL$P H6 HD$PQLgH$HHHI8HL$HHv6 HD$H 'H$HHHI@HL$@H=6 {HD$@H$HHHIHHL$8LH6 ;HD$8H$HHHIPHL$0 H5 HD$0QLgH$HHHIXHL$(H5 HD$( 'H$HHHI`HL$ HY5 {HD$ H$HHHHL$IHc5 8HD$H$HHHHL$H5 HD$KFaH$HHH$DH3 H$fH$HHH$pH3 @[H$H$H@H$#HV3 H$eD[vH$HİHD$;HD$I;fH(Hl$ Hl$ HD$0HPHH6HH\$HHtEHD$0HHHHHӄH UHt$H2HPHH@HHD$0H@H HHl$ H(HD$\$HL$[HD$\$HL$(HPHl$HHl$Hu=t =tu Hl$HHP1AbH@H5(<օtr݉D$HT$ D|$(D|$81HL$(HT$(D$H5jHƍPwHHHu H=1c='u!uH=GHT$ H=s1.=u =tr t t1uaHHtCHu$HszLZE MAE脢T$H5H=‰H5DH H衡D$H5Hl$HHPùf۴I;fvIHHl$Hl$  fr t Hl$Hø [Hl$H I;fH(Hl$ Hl$ uHP0HHt""t 11҄trH\$8HD$0HSHH1Hft>HD$8HHHHHքH HHPHH@HHD$0HH00H@01ɇ4Hl$ H(HD$H\$HD$H\$HpHl$hHl$hH$D$xH$D|$XH$HD$XH$HL$`Lt$PLH$@[EWdL4%HD$PfHL$xuOHL$XIDt u tHL$`H)Hl$hHpÃu=u Hl$hHpÉH\$XHl$hHpHH0HIPH $D蛫EWdL4%D|$(D|$0D|$@HD$PHX0HL$(D$xtH|$PHW0HRPHt$xHH|$PD$'H.uD$x H|$PD$xH$H$LHT$PH$EWdL4%T$'t8IF0H@PHL$0HT$(HHHHL$8HHHL$@HHHL$HHHl$hHpHl$hHpH(Hl$ Hl$ 5t1s@t u @f@t11H ZHl$ H(HH }HRH4HuH H<wH Hk H 藰H8Hl$0Hl$0t3HD|$ HD$ HHT$(HH\$ Hu Hl$0H8H`Hl$XHl$XH\$pHL$xD$hHSPHt$hHt$H92wH9rv 1Hl$XH`D|$@D|$HH$HD$@HD$EWdL4%HD$@L$HHL$H9HT$PH@H9Lt$ HL$xHtIIV0HRPHHRHHQIV0HRPHRHQIV0HRPHRHQIV0HRPHHQ HL$ HQ0HRPH\$@HHQ0HRPHt$PHHrHQ0HRPHàHZHI0HIPHYHl$XH`HL$HT$pHH9 H9KHKH+ D|$(D|$0HL$8H H HL$(Lt$HL$xHtIIV0HRPHHRHHQIV0HRPHRHQIV0HRPHRHQIV0HRPHHQ HL$HQ0HRPH\$(HHQ0HRPHt$8HHrHQ0HRPHàHZHI0HIPHYHl$XH`H$EWdL4%U'D$Hs D$hf D$h5+1Hl$XH`Ld$M;fHH$H$Iv0D$H$H$LzI8t(Ht#LMDM9uMNM9HA E1E1DbHt$xDD$/H$$uOHzHtCH2HH$Hքu$Ht$xH$DD$/H$Hİà uEH.Ht9H Hфu$Ht$xH$DD$/H$HİÐ!u2=cu)Eu$HH$t$Ht$xH$AsH IH HH$[ttstL$4H$HzH$HҋT$4EӐItu JɉT$4t ts$&fD T$4H$[t @u<$HSH H HI sH$HİË$sk T$4$ yHD$xǀH$HH=t A'@$AHD$xH$$sLH@H HTH$HDHD$p2H$H\$pDv4 Hd$ $HC[H$H$HT$xHH\$hHc@HD$`HHL$@H{ HD$@DH1 jHD$hD[H) JHD$`D;HD$xtEH$H9u@Ht6H $qHD$xHHfH$H$$t fH$H'HHHT$8H1HH)DHrH\$HkHnC ZHD$8H$HL$H1ҐQH$HİH$HİË$H$H$HcRHH$HRHH$HH H$H$Hİ腚H$HİEuiSu u%AHtD<EtAAEt H$HH1ǁH$Hİm IN0)uCʅD$0H$H$HH1H$=~9HL$xHH$H9tHt 11H$HL$x1҄u=cuB83,HHL$xHHH11H$.D$0fD  HUH+^+9~PH# $誹EWdL4%$@KLѸEWdL4%$護EWdL4%H$HİHT$P HL$Xf6HD$XlHT$PHHD$HH$HHL$HH9v Hr.IHй藤蒣hD$H\$HL$H|$ D$H\$HL$H|$ I;fHXHl$PHl$PLt$0;HL$0 HuHftkHHL$ H 1D|$8HD$HH HL$8HD$@1HL$ HL$HH H\$89HH FHHD$(uHHY dHD$(H @蛻Hc 1IH 2yH3yHtHIHʳHHtjHt3HE H xHxHtHIHȐ{H'7 əH xHxHtHIHJe HHHBHHHHH@~1HD$Htyeu; HW HD$QLgH. 6H} $DHD$ 'HbH HtHH %H@HV1OHHL$H 1sH | HL$8HD$@1HL$HL$HH H\$8C7HH ԱH< 1"H wH wHtHIH裱HoHeqArHvP H RHFH\HD78HHHH *׸{ HHl$Hl$D$ L$ HAHH1҇ $@EWdL4%EWdL4%׺EWdL4%źEWdL4%D$ 1-D$ $衳EWdL4%菺EWdL4%f{EWdL4%iEWdL4%$бEWdL4%Hl$HùAI;fH Hl$Hl$H\$0Ar1H H H HL$D$(kD$(H\$f;=u =t-HD$@HuHD$0H@tt Hl$H ËD$($pEWdL4%$ױEWdL4%HD$(躊Hl$H Hl$H ÉD$H\$yD$H\$HHl$Hl$Hl$HI;fv`HHl$Hl$D$ H D$ Hʆ )Hl D۵D$xD$I;fv`HHl$Hl$D$ CHy 2D$ 'Hڈ *H3 9D[D$QxD$I;fv`HHl$Hl$D$ H D$ HD HX D۴D$wD$H(Hl$ Hl$ HD$0H\$=LuH=<u?HHf ;$oEWdL4%{HHD$0uHD$0H\$OHl$ H(H(Hl$ Hl$ AnH5H4H6HIF0H@PHH@HT$HJXHB`IF0H@PH@HBhIF0H@PH@HBpIF0H@PHHBxIF0H@PHL$HIF0H@PH\$(HHXIF0H@PHHHIF0H@PHHƂHL$HAPHL$ƁHl$0H8rI;f H0Hl$(Hl$(IV0HHT$ 1HHADHAHRHr,fu =,t=u=futHPH?H;HHHHsVt xt s$HD$ HD$HD$D$D;EWdL4%Hl$(H0HйHйA q@H0Hl$(Hl$(IF0u1HHPHP`HXXHHQHPhHQHPpHQH@xH?HD$HD$HD$ HD$H$HD$EWdL4%Hl$(H0H0Hl$(Hl$(HHH+D|$D|$HL$ HHD$HD$H$HD${EWdL4%Hl$(H0I;fJHHl$Hl$`sHH5H H H r$1Hl$H1Hl$HÉH N<rH A׉D9tHl$HÐ :fu1H +t9u.H 1uH/4u H Hl$HH'P 7荓D$#oD$I;fv"HHl$Hl$HHv 9nI;fH@Hl$8Hl$8H9s@HHT$(HHHHfH9HHT$(H HHHHH|$`HL$ H~u=HD$117FHL$ H\$H9sYHD$0H)HHHD$0HL$ 9HEHL$ Hv"=ڽtHD$0H\$`9HD$0HL$ HD$0H\$`D蛛HD$0Hl$8H@ÐHH5 HD$H\$HL$H|$ {mHD$H\$HL$H|$ I;fH Hl$Hl$HHHHHp|HH9w$H|H9|HEHl$H HHqHH HHH9wH|ؐHHm DHHD$H\$HL$lHD$H\$HL$'I;fHXHl$PHl$PHH)fH\H>Ht&L L9fDHHHHHHl$PHXHHHwBHzHfHxLL+B<HDILo,AIIILH~H9H~ IHLHIHHH HHD$H\$HL$H|$ Ht$(eHD$H\$HL$H|$ Ht$(+I;fvvH(Hl$ Hl$ HtHu 1Hl$ H(H9HOHt9HfDHu H|$HH#H|$HHl$ H(HHl$ H(HD$H\$HL$H|$ Ht$(eHD$H\$HL$H|$ Ht$(HI;f|H8Hl$0Hl$0DHLHHrH=ǺHHTHuXD$@Ht$ H*H[Hfx`HP(HL$@HHPh1vHB(HHt=H8Hz(z`fz`Hz(HuHL$(HH HL$(HHl$0H8H7 HPHHHx(H:Hp(HPhHHrHD$HHD$ 1Ht$ HT$`H" 葠H D{HX jHйf軇D$QcD$gI;fiH0Hl$(Hl$(H1HHHHfH@HHH %H@WcH|$HW(Hu@H\$@Ht$ HHHHH H \$@Ht$ H|$HLG(LHW(W`rfw`=;uHfuBHsCHHHH[H H/H\$HC(HEqHl$(H0ùf[QHY !D۞H@NHD$\$@aHD$\$lI;fH8Hl$0Hl$0DHHD$@HT$ \$HHH}HHD$(o#117D$H@[HHT$HHL$HHH\$HHHHD$HL$H=@rHD$($HL$@HT$ HH\$HhH\$HpHl$0H8Hй HD$\$[HD$\$I;fH8Hl$0Hl$0HHD$@\$HHHHT$ HhH\$HpHt$HH=<HHL$(H,"HD$HL$f/HH HL$\$HL$HHHD$H)HL$HD$H=@wHL$HD$(#HL$ HT$H\$@H hHT$H pHl$0H8HйփHD$\$'HD$\$I;fH@Hl$8Hl$8HD$H1ɐD;HD$(#L$HD$HfsOL$HT$ HH5HHD$( HL$HHT$ HHhHH\$0Hh+Hl$8H@H HL$\$PHL$HH\$0HT$HHuVHD$*HD$DI;fHpHl$hHl$hIV0LH92ph=u%D$x=s 1OHH H1^H HqHHH!ʉHD$XHHtHL$XHHl$hHpH9 茚HHfDHwH\$XHT$PHt$0HBf{HD$0H#HH )HHu1H\$HH'HD$HHD$(H!HL$(Hu'H@H\$XHt'HL$PHHhHHIT$xHHHl$hHpH 貙#@=wHHt HtSH\$HH HHD$`yD$oHD$ HD$`@; L$xHt$ lHF@HsfHHhHHu1HD$8HT$@[HL$@HT$8H hHHHL$xHH?HhH)pHHйH< 蓘HU !肘D$8D$/I;fHxHl$pHl$pHH)HsH=֭HsLt$hH1UH5@HHHfH@H4H H@Sc=tHK 12H6>Hl$pHxHl$pHxHHHwH\$(HD$0H2mHD$0H#s)HH HH\$(H랹#o~HD$XHCHD$ 蛱HD$ 謳HD$Xf۳Hf ŖH@8~HHwHT$PHt$hHv0HHt HtPHL$HH HHD$`yHD$P\$ HD$`;Hw@HseHL>pIr-HD$HH|$@Ht$8HyHD$HHT$PHt$8H|$@HH>hHH>hH>pGH} }H( 蚕HD$H\$JHD$H\$I;fH`Hl$XHl$XH$H$Ht$PHHD$8LL LQHILcL\$0E1MeM9sLd$ MILcE$$Hl$XH`Ll$ L\$0EtEE\$E!Dd$O/N<$HD$8Ht$PIN,HD$8Ht$PLl$ N,Ll$Ht&MefIs=0uCDd$Dd$M9uM9lI9vHt$HLI7@@tsL|$@IN0Ɓ)HHYHD$HH\$(衮HVC 萷HD$HH\$(職H pHD$@H UHD$諵覰H$B 萓HD$H\$HL$H|$ Ht$(qVHD$H\$HL$H|$ Ht$(Ld$M;f8HH$H$Hx=HHpz(@H$Ht$XH$HT$PHSHmHt$HLD$8D$`H\$hL$pH|$xT$`~H)HT$HH~HD$@HL$HL$HH1 HZ@HBPHHt%HZPH9tHT$ HCXHL$HT$ HHl$0H8HD$H\$HL$ePHD$H\$HL$L$M;fHH$H$HxpqHHHDHFH$H$HT$xIv0Hx8IH)HL$PHLI)LD$pIL)Ht?L"ML"ILH?r'H5LHdž" H5HLL$hLHD$`H\$XH$HHl$Hl$uHmHL$xH$H$H$HH)H$H$tHHE1H|$hLD$pL9s@@HHH@Ht+LGL9$wL9$vL$MLGH|$PHH)HH)HL|H$HPPH9$wH9$vH$HHHPHHhH9$wH9$vH$HHHhH$FH$HO H9$wH9$vH$HHW H$HtL$LH$HT$`HLd$XLgH HWHT$PI)Lg8H$HH$HH11E1AL L$ HD$xH$H$HİHi /H@MHt$LOPLWEIML9w L9vM9rML$HH\$PH$ H|$PH)H$Ht$X1H D蛉HV '芉HD$H\$zLHD$H\$+L$M;f HH$H$IN0HQHHz.@ L$HH$H9) HQH$A$A $A0$ IN0HAIN0HA0IN0HAIN0HAHHH$HufIV0u!uHu Hzt8HHHHHH8H $LIEWdL4%H$H$HHHp8H~H|$0H9H$H$HHH$H$H$H$H$H$ Ht$xHx@H|$pL@`LD$hLHPL$!H[ HD$0fH H$HH! תH$*H 蹪H$ H 蛪H$H f{HD$xѨHJ D[HD$p豨H D;H$莨Hp fHD$hqHD DH$nH f۩VH$H$H|$0H98H}H$HR0H9Hu@t!ƀ H$H$H|$0t !H$!H$HHH+HL$HHP@HuCHL$HHHHt.HL$`OHcHH$HPH+P8Ht$`H$HHDHH9H9 uryHL$PH$H$H\$PfH$dH$H8H$EEWdL4%H$HĨH9DH@ ! HHG eH$HH$H@H$H 谧HD$0Ht 蕧H$H wH$ʥH YԞH@ 裃;H? !*HHg 腞DHHHH)H9rHT$HHfHB "*H" L$,HH$蚝H~ 艦H$H jH$f[Hz JD$,@蛤H *襝H$HH$ HT6 HD$0QH DۥH$.)DH- H HQH$0A$8A $HA0$XH$0HHpH$8HHxHH@H?H{ H  1HD$@H$HT$8H$Hs8H$H;H$LCL$L$8L$L$0L$L$XL\$xLc@Ld$pLk`Ll$hL{PL$誛H 虤H$H\$@臤H vHD$8̢H [H$订H f;H$莢Hg fH$nH7 fH$NH@ fۣH$.H f軣HD$xH D蛣HD$pH D{H$ΡH f[HD$h象H D;H$订H f薚H$H@0ƀ)H$8H$0H$XH$1H6 *H$H$DH$H\$@H$ H$o:H$HQ@H)HD$@H$7H$Ht$XHH$HQPH$EH5 4HD$X芠H H$茡Hj H$nH> fۡH$NHf f軡H$. $H$H@0HHH$h@$p@ $@0$H$pH$hH$H$x1@[HB $}H y}s@1I;fvWHH,$H,$HtH H HHH֐L@LH0HH=uHX Hx`H,$HHD$H\$?HD$H\$I;fHHl$Hl$H8@a r+IV0HfH9-LH9!Hxput1f1ɄIN0H9uHH0H=‘HD$ H8H9Htx(u Hl$HHD$ HXHHH)HHHr5Hp8H)H HDH9w Hl$HLHl$HHl$HHl$HHP f[{H% J{H 9{H" ({HD$f>HD$QI;f{HhHl$`Hl$`1HD$XHD$(HH}OHD$(HHD$PHՓHH\$XHHL$PHQHHHD$0HL DHS1 HAfDH#}"HD$8HHH/H4Ht$HHXH*Hl$`HhHT$H HL$@HHH H\$QHL$8Ht$HHT$@fHulHHHfy`fuHL$ HT$@H謺H\$ HC(H8 HD$0HT$@Hv<q̃=9tHH111'H<„L"L"D"HLLH9|Ht2H1HHHjH9HBHHB1HH H!95I;fvEHHl$Hl$HIfDt HcHl$H&HcHHl$HHD$K;HD$I;fHpHl$hHl$hHHXrt211Hl$hHpHD$xH\$`HT$XH=Ht Hu/H C|t HU )|u 111HL$xHQ(Hq0HH9r0HL$XHD$`2HL$xH9A111Hl$hHpHH  L$HHT$HHt$XHD$`2HL$HH9u;HQ2HR|$@uHyHH9OHӉHl$hHpHD$XH\$`<HD$PH\$@jHz YHD$PH\$@J襓D軑HX vHD$XH\$`[<HD$PH\$@HL$X HD$`1HD$ HL$xHQ(HT$8Hq0Ht$0HIHL$(ѐH D軙HD$PH\$@謙Hl 蛙HD$8H D{HD$0їHM D[HD$(HL$ H)詗褒@軐HX uHD$@{8HD$1Ld$M;f?HH$H$HPH HT$8H$H$HH$HPH$Hw0H|$8H9u0HH|$8H$H$H$@H|$8H|$8DD$,H$HQ8H+Q(HH$~+w H$E17LF+DNOIEAAH$L@EIMM!HT$@MuEfDEcAP~1LD$pfA9|DJADMcIM 1E11E1LD$xT$4HHtH$L$AH$z+wL$E1f7LR+DZOIEAAL$M$@EIMM!ډD$0MEELT$hDl$,E!E9EZEuE1f,E{AEMcIK*H$L$AÄtAL%tz+w1-LR+RIH AM$@EILL!Ht2LMzHT$`IpeHT$`HIHH9vOE1E1D$4DHLMMH\$xH$HĠ11ۉH1E1MH$HĠÐ{vHL7HD$xH\$XHL$hHc HL$PoH [L$,HcOH ;HD$P1H DHD$xH\$X H8 HD$8QH( D۔VH %qHL6HD$xH\$XH$HI@HL$H蚋H 艔HD$xH\$XzH iHD$H@軒Hm JL$0Hc蛒薍豋H D{pHS6HD$xH\$XHL$pHc HL$PH< L$,HcڑH6 ɓHD$P@軑H 誓HD$xH\$X蛓H 芓HD$8DۑH jH oH5HD$xH\$XH$HI8HL$H,Hr HD$xH\$X H HD$HHL$@H)IH ؒHD$@.)DH oHD$H\$L$@1HD$H\$L$L$HM;fH8H$0H$0H|$ HfDHl$Hl$\XHmH > HL$HL$ HL$HL$Q@H.H)H0HtfH9@wH9v1HtDHHZHHqHI H+8Ӏр5π ̀H$0H8H+D +mHZ =@m0I;fHhHl$`Hl$`H\$xH11E1E1IL[LMILH9~,IL[Mu HLMOM9HHHH$HT$XHuTHu$L9JLIJ<MFI9>wL9r- LH9HH2H\2Hl$`HhLHD$@H\$ HT$XL$E1111Hl$`HhHIL)M)IHH?I!LLLM9LRL9IIOL"L9uM9eLL$8HT$PHL$HLT$Ht$(L\$0HLH\HL$0HD$H9HT$PH\$ Ht$(L$LL$8IIHD$@HL$HM Hl$`HhLLSHSLSH kHD$H\$HL$H|$ .HD$H\$HL$H|$ I;fvTHHHl$@Hl$@H\$XH|$hD|$ D|$0H\$ HL$(H|$0Ht$8H\$ HpHl$@HHHD$H\$HL$H|$ Ht$(-HD$H\$HL$H|$ Ht$(jI;fvlHXHl$PHl$PH\$hH|$xL$D|$ D|$0D|$@H\$ HL$(H|$0Ht$8LD$@LL$HH\$ HHl$PHXHD$H\$HL$H|$ Ht$(LD$0LL$8&-HD$H\$HL$H|$ Ht$(LD$0LL$8;I;fHhHl$`Hl$`H\$xH$L$L$D|$ D|$0D|$@D|$PH\$ HL$(H|$0Ht$8LD$@LL$HLT$PL\$XH\$ HHl$`HhHD$H\$HL$H|$ Ht$(LD$0LL$8LT$@L\$Hf,HD$H\$HL$H|$ Ht$(LD$0LL$8LT$@L\$H I;fHxHl$pHl$pH$H$L$L$HH|$ HHl$Hl$RHmH\$ HL$(HT$0Ht$8LD$@LL$HLT$PL\$XH$HT$`H$HT$hH\$ HHl$pHxHD$H\$ HL$(H|$0Ht$8LD$@LL$HLT$PL\$X*HD$H\$ HL$(H|$0Ht$8LD$@LL$HLT$PL\$XI;fH(Hl$ Hl$ HHu0 HHHHHHȻHl$ H(HL$@H\$8HtH ~H11D;HL$@H\$8HD$XH\$@fH|;HD$HHH9wHHl$ H(11Hl$ H(Ht!HD$H\$HL$)HD$H\$HL$I;fH Hl$Hl$HtH wlHv] -H\$0H11ZH|$0H|5HHH9wHHHHHHl$H Ht"f[1HlMHٺ @MHD$H\$(HD$H\$;I;fH8Hl$0Hl$0H\$HHtH D8DxHʾ HL$PHHT$PHHH\$HH9HHLH9t#HD$(Ht$H|$ "VHD$(Ht$H|$ HHHl$0H8HD$H\$HL$(HD$H\$HL$;I;fpH@Hl$8Hl$8HD$HH\$PHL$X11HLH9~HDA}LBHt$HHH{HD$HHL$XHt$IH\$PfHt=H 7HffHl$Hl$3NHm fH6HHHL$XH\$PHD$0HT$(Ht$ 1E1F IH9~TD ;A}H:LD$HHHHL$XHT$(Ht$ LD$AHHD$0H\$PI9rHHHl$8H@LHJH KHD$H\$HL$R&HD$H\$HL$[I;fHxHl$pHl$pH$H$HD$hD$$11?HT$PfDHDH=4w"H fH9vHHHHt$H11HL$HT$ H9t&HD$(HH)HT$XH4HKHD$(HL$HD$0H\$XH\$8HHL$@HD$0Hl$HHPHDDHDDHDDHDH 0]HD$% HD$;HD$Ht&-uHHHH?HH1111HHDH9}F<DGA w3IL9wH4IHJL$LDH°H<H$fHl$Hl$AHmHM LH$RH$x@HtkHu_HH$ HH$(Hl$Hl$IAHmH@ H@(HP0=fu HPbLf{7SH1H$HHH$ HH$(Hl$Hl$@HmHpHH DHj=fu%HVXHP0Hx8H`Hl$Hl$@Hm$HX0HNXHYL QH$xL$H@ H@(HP0=euHP~L6tHH$ HH$(Hl$Hl$ @HmHP LHLP(HHHP IRHP(HH?XLʃ=CeuHPL#6HP HH$hHuH?HT$`H$pH$ 1H$@H$HHcH$PHT$`HH$Hø19"99HD$`HD$`Ld$M;f\HH$H$H$D|$hD|$pD$D$HD$hHD$hEH|$pu H$t111011HH$HHD$h HD$HHL$XHT$@HT$@HL$XHD$HH$HHD$`H\$PHL$pHD$H$HffDHl$Hl$:HmH$H$HT$`H$HT$PH$H$H$HT$xH$H$H$H\$@HHT$HH9rHD$X$HD$XHѿH5iI 脦HH$HD$XH\$@HT$HLkXMHI=bu2L$MLIJ<H$Hl$Hl$$=Hm.HH LH$-NHD$XH$HT$HH\$@H$THD$hHD$hTHD$XH\$@HL$HH$HHD$+HD$I;fOHhHl$`Hl$`H/HD$PH /  H0fDHk(uHL$XHXHHL@I9sFHLH5@H|$PHO={au H @;1HL$XHHHXHHHHHH|$XHt$PH$HD$@H$H$H9D$HAH$H\$PHL$XH|$HHt$4W @HT$HH$H9sH$HI~0H/dxdvH I(~I1HHIH HHHL1DL1DT1 L1H1ЉHH fHHMELET T$4H<1$|1T1 D$4H\$@H$HËnNx$hH$H\$hHL$`H$H$H$H\$xHL$HH$WH $@`H$H\$x`Hט x`H$^H Z`H$^HǙ ;`H$H\$hHL$``@{YWH$HHXHPPHp`H$H9`Ht$xHL$pH$H$HD$HD$4HL$xH$H)Ht$pH)HHH?H!H$H1H$HH\$PH$HL$XHD$HH$SVH B_HcD$48]H '_H$z]uXVH|$XHt$PH$H|$XHt$PH$H$H$H9D$HAH$H\$PHL$XH|$HHt$4 @+H{ :H #@;"LH"MKLI}?IHHMIFdA9uN$@I9uBD 1H$HHאHD$H\$L$H|$ Ht$(DD$0YHD$H\$L$H|$ Ht$(DD$0I;fvuH0Hl$(Hl$(HD$8H\$@fHtPtHKH[HcH9v9H 1HL$HHL$HL$HD$ HL$HHHl$(H0!HD$H\$HD$H\$gI;fvsHHl$Hl$HD$ H\$(f;HKHH~4@/uHH9~v$4@.uH9r HHl$HH HHh HD$H\$HD$H\$iI;fvqH0Hl$(Hl$(HD$8H\$@fHtHSH[HcH9v9H 1HL$HHL$HL$HD$ HL$HHHl$(H0HHD$H\$L$VHD$H\$L$cI;fH0Hl$(Hl$(HD$8H\$@HtlHS(Hs H H9vwt>HK@HS8H9v]HHD$HL$HL$HD$ HL$HHHl$(H0H Hl$(H0H Hl$(H0HHD$H\$L$tHD$H\$L$!I;fH`Hl$XHl$XHD$hH\$pHHL$@@|$7HD$PH\$HP1AHωD$8HT$PJH\$HH|$@1DD$7HL$8DttHcH\$HH9S@H 1Hl$XH`ÉD$uL  H"L"M9Hu HD1H"fL9L"L9uHfHD$8H\$@H"H"HLHDHD$ HT$8H"H"H"H|$@HHD$8HL$@H\$ Hu+H"H"u 1HH HIH"Ʌu 1HHHl$(H0Lf[LLHLDH J*HHD$H\$2HD$H\$I;ffH(Hl$ Hl$ H"H"6H6LL9HH"H"HYH~Ht=<uH7 H"L"I9HLGIL9N I9Q~"H9vdL=&uL LH9v7H HH9t=&uH4HHHHHl$H HHHHLHHHHD$H\$HL$H|$ 6HD$H\$HL$H|$ fI;fH Hl$Hl$H|$@H\$0HD$(H9HL$0HD$@H9HD$(HH|$@HHRHHT$HD$(HT$H\$0H|$@H4LIHLOL9=LTMRL_L9~LdMd$M9|MMMMLOL9~JLTMRLoL9~L| MM9|MMMMM9MMMMI9}8L9vyN DL9v`J<=$uN 'DL9v+J JfIsBIHHJH\$@LT$(hL+LHǃȀ2HHH@H=r Hr*Hs2HNHJHHI΀@:IHLHr Hr/Hs@:HOHJH@[HNMAˀG!IIMIIr LLLȹLȹIۃˀCIILfHr Ir_IsICIMHLD$8MHMYIsIKLعZLȹMLȹD;Lй.HD$ H\$(L$0H|$8@t$@DD$DLL$HHD$ H\$(L$0H|$8t$@DD$DLL$H@{I;fv4H Hl$Hl$ZHJHL$HHL$HHl$H I;f*HhHl$`Hl$`H$=tHD$pH\$xH$H$H$EWdL4%H $D|$PHD$xHtHcHHHT$P HD$PHT$pHt HHT$XHL$H!Hl$`HhEWdL4%HL$H1HnAD"AEtH[Ht31H|$PIL$L$L$ H1Hl$`HhHD$H\$HL$H|$ Ht$(HD$H\$HL$H|$ Ht$(I;fH@Hl$8Hl$8H\$PH\$0H|$`HHD$(MI9t>DHu1NHHIHILLfEH\$0H|$`HHD$(HF{CH\$0H|$`HHD$(HqHHOH~ HuHH9rHȪHl$8H@HHD$H\$HL$H|$ Ht$(HD$H\$HL$H|$ Ht$(I;fHHl$Hl$H=tIV0IV0IF0LHHtHHl$HHD$HHD$H qHl$HmI;fvUHHl$Hl$uH&虊IF0QuAtIFHl$HÉD$[D$I;fTH0Hl$(Hl$(H ɨHtIV0H9\$@L$t!HD$8HHD$8L$\$@Ht0HHH=u H H5HHHHtHH2H5{H7X5H{HD$HD$ 1HH@EWdL4%H$HHL$ HQHZH9HDHAHQHƄAHQHHQ\$@HcHރˀHHHHrHrfHHHQHÃȀHHHH=rHrJHs4HHQL$tHGHD$Hl$(H0HйHй{HйnHйaHйTH HD$\$ HD$\$I;fqHhHl$`Hl$`H\$xHtKH$H\$ H$HD$pHH1HT$pH%H| H$HD$ 1Hl$`HhH?Ht0H9wuH_H9ufHE11ۅt Hl$`HhD$D|$(D|$0D|$@D|$PHH\$(HT$0HT$HT$8HD$@HL$HH$HD$PHt$XHD$(H$TEWdL4%D$Hl$`HhII9}NL NM9t_JHٺHD$H\$HL$H|$ ,HD$H\$HL$H|$ SI;fHPHl$HHl$HHBHD$(HJ HL$HZ0H\$HrHt$@HRHT$0ӃHL$HʁHD$(H\ H4Hv H|$0LD$H@Ht0H9SuLKM9ufIE11LL$@AuNHL$ Ht$8@LHL$HHHL$(QPHt$@HT$HPfHw[Ht$01Hl$HHPHHI0D)uAAACԉѐHu'HuHWpHtH_xH_@HW8HHHHL$D$D$D$D$(D$8H$H$(LPLXLHMt$1D$.$MAD\$.L$H$xH$L$H$(H$ L$L$L$L$L$H$D$Hruntime.H9u/xgopau&fx niuxcuT$PuHl$0H8HD$(H\$ H$H\$D$.EWdL4%H|$|`HL$ H|Hruntime.H\$(H9@Hruntime.H\$(1@t H~H9uKArZ 1 1ɉHl$0H81Hl$0H8øHl$0H8HD$H\$L$@|$@t$@HD$H\$L$|$t$fI;fH@Hl$8Hl$8 sHH5 H<3H\3 H= u@@t1@ rH=D HHH<H\HD$HH|$0T$H\$ tu[Hu1OD{EWdL4%H$HL$HH+HH@GO?LIHHH"H?H)HH1HL$HHT$(DH' HD$(DH( HD$0H\$ VD$ sH 1HD$H|6H HD$H$ uHD$HHt![H; JD;H$ *Hl$8H@HD$q}HD$I;fH`Hl$XHl$X zIV0)uCˉIN0HHtSH9tNHD$hHL$0T$, HD$0AHH1H|$01HD$hHL$0T$,D|$8HD$HD$PH\H\$8HD$@HL$HT$PHD$8@Hl$XH`HD$g|HD$fI;fH8Hl$0Hl$0JHrH9BuH9u „uHD$@L$,1tD$,} Hl$0H8kHD$@H|$@HG0I9F0t9 u)3H 6"fHD$@HH11Hl$0H8HD$zHD$fI;fHhHl$`Hl$`HQ(Hq0HtH9sHI HIHHT$ LD$@HD$8H\$0H$H$Ht$tI9wILD$(HH8 7HD$ H HD$@qH! DHD$8QH DHD$01H D6HD$HHL$ HH9HGH\$(HHH9HBHL$0H9HBHL$8H9HGD|$HHD$XH pHL$HH$HL$PH$HL$XHL$HHl$`HhHD$H\$HL$H|$ dyHD$H\$HL$H|$ +HJHRH9A0tH9A(tH9u!1ø<ø>I;fHHl$Hl$\$(H8sHtyH(t u 1Hl$HÀu,L$(t 1Hl$HË iHl$Hc{H|Hruntime.H91ɉHl$H1Hl$HHD$\$D;xHD$\$,I;fHhHl$`Hl$`HD$pH=tD|$(D|$0D|$@D|$P11AHL$ HT$gHnF VHD$HL$ HHD$pH } HHuHl$`HhHL$ HлHL$(cHL$ HHT$pHH } HHuHD$(HD$(/Hl$`HhHD$wHD$I;fHhHl$`Hl$`H\$xH$HD$pH1H\$xHHD$pfH9nHT$HH$HAHtJHD$8YHD$ HL$8HL$PHD$XHL$PHL$0 HD$0H\$ fVqH/ TH } 6H$HHHtuHL$8HXHD$ HL$8HL$@HD$HH$HQHT$H\$@H\$(dHD$(H\$ UHl DHD$:U+HA HD$ppkHD$HH$Hy(|HHl$`HhHD$H\$HL$(uHD$H\$HL$I;fvWHHl$Hl$ wIN0LH9t H H * H1H=HHHHl$HHD$tHD$I;fH8Hl$0Hl$0H\$HH=Ktj5SwIv0LH9t Hp H Hv=HD$HD$H\$ HL$(H HH\$Hl$0H8Hl$0H81H;HD$H\$HL$H|$ sHD$H\$HL$H|$ (I;fvoHHl$Hl$HD$ X(@{HL$ It&Hr*HHHH?HHHl$HHl$Hø1LHD$!sHD$wI;fHHl$Hl$H@tUHHHw>H $HHH7HH@1HH8+HHP%HHXHH8HH8HHP HH01@HuJHt&uH@0Hl$H11Hl$HH@0DHl$HË*Hl$HHD$rHD$I;f\HPHl$HHl$Ht \$`H j1Hl$HHPH0@Ht2H(H9rH0H9sHcH H9iHl$HHPHD$ H:3H>HL$`{\$HHL$8HD;5L$uhH!. D$`HcH HD$ H~( D{HiHD$8Hl$HHPHD$@H(HL$0H0HT$(9H (HD$0{H  HD$(D[VqHD$@H0DHuH .*HT$0Ht$(H- D$`HcH" HD$0DH( jHD$(DH i !D蛬HD$\$oHD$\${I;fHPHl$HHl$Ht@t H tg1Hl$HHPH0HtH9(wH90v1ɉ\$`HtcHL$@H HHHӉ[HHu1HL$@H(\$`HcH2H0H9QHl$HHPHl$HHPHD$HI0HMHL$`HHL$0HV2HD$0Hu_H+ D$`Hc*H HD$H% H/fxHl$HHPHD$8H(HL$(H0HT$ aH PHD$(H 5HD$ HD$8H0HuHY .@[HT$(HL$ H* D$`Hc/H HD$(H^ DHD$ Hf !֩HD$\$lHD$\$YI;fHHHl$@Hl$@t H dH+Hl$@HHH0fHtH9(wH90v1DHHD$\$XH@;.HH-L$X~HHL$0H/HD$0Huj{H) jD$XHcH JHD$DH(# *HcHl$@HHHcHl$@HHHD$8H(HL$(H0HT$ Ht HD$(DH1 HD$ DHD$8H0DHzH .ƧHD$\$jHD$\$ I;fHH,$H,$Ht11Ґ11H,$HHHHHyL8EL IN IM|nI@MEAHLIM!LAÀuHt$HKHHH|0HH9rHH,$H11H,$HHt&HD$iHD$&I;fHH,$H,$t1111H,$HHHHHyL8EL IN IMI@MEAHLIM!LAÀuH11IKH4 HxH?LINAM|`I@MAILHL!HA€uHHHHH|(HDH9r H,$HHt֋ыHD$hHD$I;f<H Hl$Hl$Htt1111Hl$H HHLHHyL8EL IN IfDMI@MEAILIM!IAÀuK< IMt11>D$J HT$H9tB L$\$HHl$H HKLIIEL IN IM|:I@MEAHLIM!LfDAÀuH HL9kd@[HD$0gHD$HH,$H,$Ht111H,$HHHHHHpH6HH@MAHHHL!HAuHu {_1ɉH,$H踉L$M;fHH$H$H=`H_D$D$D$H/H$HHl$Hl$ތHmH$H$H H$[SHHt H2HzHR111HHD$xLHHH?HH$HwHt$p1H$HİHIH9YHL$hL$HHD$X<|$DLcL(L$AHH\$xHbftHH$HpHt$P1D~H$H$H$H$H L$DHGw=ɱuH$H1HH$藂HD$HHH$Ht$PH9}HD$HH H$D$D$D$H$(HHl$Hl$JHmH$(H$8E$H$H$H$TZH@H9LI9u1H@;`PL$hM;ft HH$H$H$(H$ H$D$H$H$H_HH$/TH@H$H$KXH$ H$(H9]H˃r@82\$L$JH$H\$hH$(0HL$hH9HH$2H$ p@u1OpHHw:H ܂ $HpH.Hp@(Hp8"HpPHpXHp8Hp8 HpPHp0H$(DGAuE1SDGAIIwI;fvQHHl$Hl$Hd"@HD#1]1H4#H H8"Hl$H>I;fvFH Hl$Hl$HD$(H\$0HEH9uHUHl$H HH 5HD$H\$HL$D>HD$H\$HL$I;fH8Hl$0Hl$0HD$({wEWdL4%H$HD$H\$(1H_![HD$ GwEWdL4%H$HD$H9HD$ 1Hl$0H8H)H HHHD$ HHl$0H8HD$M=HD$CH qHzHHH9rH |HH91ɉ̋ފƀHǀI;fvYHHl$Hl$HKHt'ruAtIFHHl$HHD$H\$R<HD$H\$I;fH Hl$Hl$H H =~Hl'IF0HH8HD$1IF0H81HD$N)1H u t  wHHl$H l;'I;fv)HHl$Hl$D{Hl$H,;I;fv!HHl$Hl$H@@CHl$HHD$:HD$I;fv)HHl$Hl$H DHl$H:I;fv]HHl$Hl$HD$/HD$H8HHL$XtH.ƁXHl$HHD$3:HD$I;fv_H Hl$Hl$IV0HHD$ƀ腿H֏ HD$eHl$H 9I;fvSHHl$Hl$5DH HH)HH H)HqHl$HB9fI;fvHH,$H,$IoH,$H8I;fH(Hl$ Hl$ ILl$D$D$D|$H HL$HL$HL$HL$HL$D$HHD$HT$HD$Hl$ H(ZbD$Hl$ H(HD$A8HD$WI;fv8HHl$Hl$HJHL$HD$ tHtHD$Hl$Hf;7I;fWH8Hl$0Hl$0HHǀHtHǀL@0Iǀ`HT$(HD$@=t.IV0HI11HfHD$@IV0H1Hr0IV01HHHT$@HǂH5IHt HH HH%H %'H=Jt HD$(1}HD$(HD$(Hl$0H8HD$U6HD$I;fH Hl$Hl$HHT$Hǀ=tHD$(|HD$(ƀxIV0H1Hr0IV01HHD$ Hl$H HD$5HD$K̐ }HHl$Hl$Hs}HHH@HH=HHD$ H\$Hl$0H8HtT菼JHD$@;HD$QI;fvH Hl$Hl$=Hl$H HD$H\$HL$HD$H\$HL$dH%IH#HC HSHk0HHC HCHC0H[H0Hl$(Hl$(H$H|$Ht$HL$Ld$ THl$(H0L MN@LL$MN8IFXInhMNPMt-dH<%IfHnfpfof%bf8Hr,H H@HSHtOHft-oHHH; f ff8f8f8fH~oLHH< f8 f8fH~of af8oo\fff8f8f8f8f8f8ffH~fofof BafJafRaf8f8f8o ohoto|fffff8f8f8f8f8f8f8f8f8f8f8f8ffffH~fofofofofofof `f`f`f%`f-`f5`f=`f8f8f8f8f8f8f8DoDoHDoP DoX0DodDolDotDo|fDfDfDfDfDfDfDfDfE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fEfEfEfEfEfEfEfEfL~fofofofofofof _f _f_f%_f-$_f5,_f=4_f8f8f8f8f8f8f8DoDDoLDoTDo\DodDolDotDo|fDfDfDfDfDfDfDfDHHfE8fE8fE8fE8fE8fE8fE8fE8ooHoP oX0fD8fD8fD8fD8o`@ohPop`oxpfD8fD8fD8fD8HHjfE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fE8fEfEfEfEfEfEfEfEfL~dL4%H(Hl$ Hl$ Mf MuIIHl$ H(Ll$0M9,$uI$$dL4%HHHl$@Hl$@Mf MuIIHl$@HHLl$PM9,$uI$$dL4%Ld$M;fv@HH$H$Mf Mu'IIH$HĈgL$M9,$uI$$dL4%L$xM;fv@HH$H$Mf Mu'IIH$HL$M9,$uI$$dL4%L$xM;fv@HH$H$Mf Mu'IIH$HdL$M9,$uI$$dL4%L$xM;fv@HH$H$Mf Mu'IIH$HL$M9,$uI$$dL4%L$xM;fv@HH$H$Mf Mu'IIH$HdL$M9,$uI$$dL4%IIrFM;fv@HH$H$Mf Mu'IIH$HL$M9,$uI$$dL4%IIrFM;fv@H H$ H$ Mf Mu'IIH$ H `L$ M9,$uI$$dL4%II?rFM;fv@H@H$@H$@Mf Mu'IIH$@H@L$@M9,$uI$$dL4%IIrFM;fv@HH$H$Mf Mu'IIH$H`L$M9,$uI$$dL4%IIrFM;fv@HH$H$Mf Mu'IIH$HL$M9,$uI$$H<$Ht$HHH(HHD$H\$ H=yH$hH_H_HHgt,GenuuineIunteluP6QHoHt1H5HHH hyHHHAHA-H=v} BdH%#H]}H=#t H !ydH %H|HHA0$JD$$HD$ HD$IG$IH PwIXql H$H) HD$HD$T KH$<97 H#HH\$HSH HH$I^@H\$I^8InhI^0H3L9uWGLIdL4%If8PL"AXwGH|$dH%HX0H;CPt[HH9tSH;uRdH%IHZ8HHH?dH%HX0HdH%H`8H@8HH?HHdH%H[0H3dH94%u F{HsPdH94%u FbHD$HCHD$HCdH4%HsH$HF@HD$HF8HnhHVPHdH%Hc8G̺VI$I\$IL$I|$It$ MD$(ML$0MT$8M\$@fAD$HfAL$PfAT$XfA\$`fAd$hfAl$pfAt$xfAּ$fEք$fE֌$fE֔$fE֜$fE֤$fE֬$fEִ$I$I\$IL$I|$It$ MD$(ML$0MT$8M\$@A~D$HA~L$PA~T$XA~\$`A~d$hA~l$pA~t$xA~$E~$E~$E~$E~$E~$E~$E~$̋L$(Hw HH w HH@w HHw HHw HmHw H;Hw H Hw HHw HH w HH@w H Hw Ho Hw H] Hw HK Hw H9 Hw H'Hw HH w HH@w HHw HHw HHw HHw HHw HHw HH w HsH@w HaHBdL4%I;fvqHHl$Hl$Mf MudHt$0L$8HLd$HHT$(L"ALd$H-L$8\$̸'HD$H|$Ht$HT$̋|$Ht$HT$D$ ̋|$t$ HT$LT$D$ ̋|$D$H|$Ht$HT$D$ HHl$Hl$II^0H(H H $HT$HT$ HJH(H L;uHHb8HHH4$HuHt>H$HT$LHL$H H $H(Hiʚ;HHD$ Hl$HH̋|$Ht$HT$DT$ H=v %H|$Ht$HT$LT$ D$(HHl$Hl$H|$ Ht$(HT$0H$1HHH܉D$8Hl$HHD$|$Ht$HT$ UHHH]H0Hl$(Hl$(H$Ld$Ll$Lt$L|$ dL4%fEHHHH5HH$Ld$Ll$Lt$L|$ Hl$(H0H)1HtoH 0HtcdH%HtZH@0HtL8tBHHt6HIpHt-L@Mt!<uH 0L H/uLA uH 0LL Hg/HH|$Ht$T$DT$DD$ DL$$ H=vHHHD$(HD$0HD$(HD$0HHl$Hl$H|$ Ht$(T$0L$4DD$8DL$HT$0HZ Ht$(HF HN(tHD$(H0H\$0H0({1Hl$H HD$H\$۴HD$H\$,I;fvnH Hl$Hl$HD$(H\$01HL$HHD$(H\$0H}+HL$HkXH4HHHu1Hl$H øHl$H HD$H\$f;HD$H\$lI;fvVH Hl$Hl$HH9u4HPH9Su*HPH9Su HH HSH@@H9K u HR1Hl$H HD$H\$赳HD$H\$I;fH Hl$Hl$HDH9uuHPHpHKH9SucHD$(H\$0HH4tJHL$(HQH\$0fH9Su4HQ H9S u*HQ(H9S(u Q0f8S0uQ18S1u I28K21ɉHl$H HD$H\$HD$H\$:HH9 u HHH9K18 HH9 uHf9Ku H 8K 1I;fv"H Hl$Hl$Hl$H HD$H\$ HD$H\$HH9 uHHH9KuH8Ku H8K1̋9 uHHH9KuH9Ku HHH9K1I;fv"H Hl$Hl$Hl$H HD$H\$)HD$H\$HH9 u H9K1I;fvTH Hl$Hl$HH9u2HPH9Su(HPH9SuPf9SuHHD1Hl$H HD$H\$wHD$H\$I;fvNH Hl$Hl$HP8H9S8u*HP@H9S@u HPHH9SHuHPPH9SPu 61Hl$H HD$H\$fHD$H\$̸HH9 I;fv"H Hl$Hl$Hl$H HD$H\$iHD$H\$I;fv"H Hl$Hl$!Hl$H HD$H\$ HD$H\$̋9 uH8Ku H8K1I;fvCH Hl$Hl$HHHH0fH9KuHxH9{u HH1Hl$H HD$H\$hHD$H\$f.uszq@Kf.fu_z]@Kf.uMzK@Kf.u;z9@ K f.u)z'@(K(f.uzH08K0u H18K11I;fH(Hl$ Hl$ HS@H9PuHPH9SuHD$0H\$81"1Hl$ H(HL$HHD$0H\$8@H}'HL$HH4H<HLHHu뱸HD$H\$fHD$H\$LHHHHH ̇HHH9 Ld$M;fHH$H$H$H$Htq=t%H=u H H=H$H$H$HtrIH@ LDƐE1111E11ҐLADIH$H$HHHgH$ H $ H H9qH HL$H{0HSHQH$HH$HYH\$ HIHL$(HS脌H HHL$ HHHL$(HH=uH$HHHxH$@;H$HH$HH$HYH\$0HIHL$8HRH 3HHL$0HHHL$8HH=uH$HHHxH$H$HfDHHHH$HH$HYH\$HHIHL$hHOQH HHL$HHHHL$hHH=^uH$HHHxH$ H$HH$HH$HYH\$@HIHL$`HP̊H HHL$@HHHL$`HH=uH$HHHxH$H$HHHHH$HwH$H%D;H 4H=ZuH$HHHxH$ HL$HH=)uH$HHH$HH "HxH$Hx H$H$HH$HH$HYH\$XHIHL$xHNzH HHL$XHHHL$xHH=uH$HHHxH$6H$HH$HH$HYH\$PHIHL$pHMH HHL$PHHHL$pHH=uH$HHHxH$H$HH*H$HH H$HHH I`L$HdPH@H EHH$HHHH HD$H\$SHD$H\$I;fHPHl$HHl$HHrHzLBHR LNL9L9s~H\$`LD$H|$0HT$8H6Ht$@IH 0HL$(HH1{HT$Ht$`HHt$@H 2HL$ HD$0H\$({HD$0H\$ HL$8zHl$HHPHH HD$H\$ŤHD$H\$HHl$Hl$HrHJH9s*H9s  Hl$HH@[VHHl$Hl$HrHJH9s*FH9s ^f Ff^Hl$HHfHHl$Hl$HrHJH9s*fH9s Hl$HHDHHl$Hl$HrHJH9s*HƐH9sH H HHl$HHf;6I;fHHl$Hl$HrHJH9srHHLDH<H9sTHH LLLLL =XuH fLD==uH LfHl$HHHD$H\$tHD$H\$EI;fvlHHl$Hl$HrHJ@H9sGHHHH H\HHl$HHvHHZHl$H1H@{I;fvoHHl$Hl$HD$ X(@[vHL$ It&Hr*HHHH?HHHl$HHl$Hø1HD$聠HD$wHHl$Hl$p@tQpHHw:H $HpH2Hp@,Hp8&HpP HpXHp8Hp8HpPHp01Ht1Vfu11~HHw$HHHHl$H11HHl$HûI;fv@HHl$Hl$HDHuH@@Hl$HHHl$HHD$PHD$I;fHHl$Hl$H@tTHHHw;H $HHH5HH@/HH8)HHP"HHXHH8HH8HHP HH0f1Ht0KHl$H11Hl$H11Hl$HHD${HD$1I;fHHl$Hl$H@t 6HK111Hl$HHH|%4@.uHt@[uH@]uHHQH9r#H)HHHH?H!HHHl$HHHHD$谝HD$FI;f HHl$Hl$HHwZHu#HH0Ht HL 11HHl$HHHH0Ht H 11HHl$HÐHu#HH8Ht H 11HHl$HHu$HH0Ht H 11HHl$HHu&HH0Ht H 11HHl$HHH HD$胜HD$I;fvBHHl$Hl$HDHuH@@Hl$HHeH& yHD$HD$I;fvBHHl$Hl$HDHuH@@Hl$HHHֱ HD$讛HD$I;fH`Hl$XHl$XHP@HL%H H9~@HM,ITHM,$IT$H8HpL%6L$$HD$1HWL3AMIoHl$XH`H8Hp1HWL{MAmHl$XH`1HH+HD$D蛚HD$I;f<H Hl$Hl$HD$(H\$0HʃHL$HwUHtAHH8HxsHHgHl$H H@@Hl$H Hu2H8HxtsHHnHl$H fDHtHuHCHl$H HCHl$H HWL{H@H VHHL$HHHHHH HH HD$H\$HL$&HD$H\$HL$I;fv"HHl$Hl$H%H 9ӘI;fv6HHl$Hl$HuHu Hl$HHH HD$H\$uHD$H\$̋9 uHf9KuHf9Ku H9K1HHl$Hl$Mf Mu]HtRHH:H ;H9~v5HH HT HvH HRHHHl$H1H2M>Ll$ M9,$uI$$I;fvCH Hl$Hl$HHHH0fH9KuHxH9{u HH1Hl$H HD$H\$(HD$H\$HHXHI;fvrH Hl$Hl$H HL$HD$HL$Ht H 11HP(HH=yu H H=rHl$H cI;fH8Hl$0Hl$0HD$@H\$HHL$PHPHt rH11@t$HHHL$HHt$@1HT$@2@@u H( HT$@HrHt ~H611@|$H!HHL$HtHuDt$@t:HT$@HZHHL$HI\$HHT$ HD$@ \$HT$ HD$@0΅tHT$(\$HT$(\$t7HHtH9tH2HR111HӉHHl$0H8111Hl$0H8HD$H\$HL$軔HD$H\$HL$GI;fHXHl$PHl$PH$H|$xHD$`H\$hHL$pHPHtH1HHHL$h(HtH\$xH$@1HT$`2@@u Hd HT$`HrHt ~H611@|$Ht$(HXHHL$h談HtzHD$8H.1`uHT$8@HT$`HZHHL$h誋=qu HT$8HHHD$8'HHH\$xH$bHT$`HZHHL$hHL$uNHD$`rH dt=u HL$(H HHL$(観@HL$`HQHHN_HtHD$HHL$xH=uH$HPHxH$mH3AtHD$0H\$H^HL$`HYHHL$hw=>u HT$0H HHT$0HD$x1H$9H\$xH$HD$ H\$@L$HD$`zHD$ L$HT$@HӐHt$`ʅt'HD$ H\$@L$H HD$ L$H\$@Hl$PHXHl$PHXHD$H\$HL$H|$ Ht$(zHD$H\$HL$H|$ Ht$(I;f H0Hl$(Hl$(H\$@HL$HHH5H9tiHuLHD$8HL$HH\$HrHL$H=u HT$HHPHxHT$H襱HD$ /HHZHl$(H0111ɉHl$(H0HD$ 1HHD$8D]uFHD$8HH5H9tfHtHHZHl$(H0111ɉHl$(H0HD$H\$H1ɿHl$(H0HD$H\$HL$HD$H\$HL$I;fvkH0Hl$(Hl$(HD$8H\$ f HD$8H\$ HH5"H9t(HT$HH\tHD$Hl$(H011Hl$(H0HD$H\$D[HD$H\$lI;fuH`Hl$XHl$XHD$hH\$pHL$xH$H$HfpHD$H=u$fHH$HgHD$HHT$hHrHtH61H&HHL$pyHt@H\$Ht2@HtHHXHйHl$XH`111Hl$XH`Ð1HT$h2@@u HHT$hHrHt ~H611@|$Ht$(HHHL$pׁHHD$8HV1[uHL$8?HT$hHZH<HL$p҅=u HL$8HHHD$8PHHH\$H@[ZHt HHp @OHT$hHZHHL$pDHL$uPHD$hf{H^n=u HL$(H HHL$(语@HL$hHQHHWYHnHD$PHL$HHQH H=uHP Hx@{H-OnHD$0H\$P@XHL$hHYHHL$p聄=Hu HT$0HHHT$0@111(H\$HYHt HHp @ǐHD$h˅t#Ht$@HT$ @|$BHT$ Ht$@|$HHHl$XH`HD$H\$HL$H|$ Ht$(裋HD$H\$HL$H|$ Ht$(EI;fHHl$Hl$HHHHHHPHtH1H9HD$ H8\lHL$ HQ=uHHHQHHW=uHD$ H@H|$ HGHH1跫HH@Hl$HHl$HHD$變HD$$Ld$M;fXHH$H$HxHPHtH1H$HT$HtH21HH1w=uH$HBH$HWHʩH|$8HHl$Hl$HmHfH\$HL$8WH$HĠHD$8軍HL$8HthHHIHT$(HL$0HL$@HHD$ nuH$HZHHL$(荁=Tu HL$ HHHL$ H$HĠHD$/HD$I;fv[H Hl$Hl$HD$(H HD$(HHu!H e1&VtHl$H H9DHl$H HD$赈HD$I;foHHHl$@Hl$@HD$P1111LH|$0@t$\$HL$8T$ AЃT$,tE1-HkHL$8T$,\$t$H|$0DD$ AHD$PE(EAAEEDEAEEȄtAs AD@tKAr@DL$$HtfHD$PHL$8T$,\$t$H|$0DL$$DT$ AIDEAEuA:HuuHL$0HLD$PHH|$0I@[tT$t HL$0uHL$0H)H=@BHT$P2r~IЉ1ɉþH|$0t@u1Ar)DAEtAЃIDA„t@t$iHL$8HHD$PI\$t$H|$0D$t$(u uHWseD$L$(HT$PttHl$@HHHD$fHD$qI;fv-HHl$Hl$ːt7Hl$HHD$ÅHD$I;fH Hl$Hl$Sr#HD$(\$0H~rdHD$(\$0s)HDqHl$H ËHȉt;u0rH1„tHA1۹qHl$H Hl$H HD$\$ЄHD$\$"I;f HXHl$PHl$PD|$@D$H1q@HA@u#HL$H\$hHD$HD$HL$H\$hD|$ H5Ht$ HD$(HD$ HD$HD$9t3D|$0HHD$0HL$8HD$0HD$@D$HHиtD$D$HT$@H fD$tD$HT$HHHl$PHX赭Hl$PHXHD$H\$蛃HD$H\$Mf Mu HBLl$fDM9,$uI$$I;fv*HHl$Hl$Mf MuHBHl$HkLl$@M9,$uI$$I;fH Hl$Hl$H\$0HL$8HthHL$8H\$0JH8u,HL$0H=u HL$8HH(HxHD$8:HH\$0HL$8 DdHl$H Hl$H HD$H\$HL$3HD$H\$HL$@;I;fH0Hl$(Hl$(HD$8{HHPH=u H@ Hx1ϢHu)H\$H HuHD$8H\$gHHHT$ HL$dHD$HtH\$ HL$8HQ HuH\$ HHl$(H0HD$3HD$)I;f~H0Hl$(Hl$(HD$8H\$@HHHL$HHT$ 1HD$8HL$HT$ H\$@Ht$H9~AHHt$H3HHtHHH1HHHY HtHl$(H0HHH9vdHPHHLLLMtHD$(H\$0HHft%HL$(HQH\$0H9Su HIH9K11ɉHl$H HD$H\$D;pHD$H\$lI;fvvH Hl$Hl$HHpHKH9uKHD$(H\$0HHt2HD$(HPH\$0H9SuHPH9SuH H `21Hl$H HD$H\$oHD$H\$fHH9 u H9K1I;fHHl$Hl$H PH@ H HH ڋ H =u HH=f軎H PH@H 6HH H =u H H=~qHj ePH@ H 9HH D H =nu H  H='H PH@H HH H =$u HH=fۍHOH@H "HH H =ؽu H H=葍HOH@+H ]HH d H %=u H H=GH@;OH@H 3HH  H ;=Du H3H=*fHNH@H j3HH Ή H =u H H=豌HNH@H SHH H 5=u H- H=$gHl$Hl3HHl$Hl$HD$ HfH5z@4@+@@LXI4@+@@LI=uH HǐlHԻH\$8H h;{H>=ۛuH HǐlHH\$8H  zHz>=uH Hǐ{lHTH\$8H MzHJ>=[uH Hǐ;lHH\$8H {zH>=uH HǐkHԺH\$8H o;zH==ۚuH HǐkHH\$8H yH==uH Hǐ{kHTH\$8H yHj==[uH Hǐ;kHH\$8H {yH:==uH HǐjHԹH\$8H `;yH==ۙuH HǐjHH\$8H .xH<=uH Hǐ{jHTH\$8H xH<=[uH Hǐ;jHH\$8H }{xHj<=uH HǐiHԸH\$8H ;xH2<=ۘuH HǐiHH\$8H ( wH;=uH Hǐ{iHTH\$8H wH;=[uH Hǐ;iHH\$8H {wH;=uH HǐhHԷH\$8H  ;wHb;=ۗuH HǐhHH\$8H DvH*;=uH Hǐ{hHTH\$8H evH:=[uH Hǐ;hHH\$8H {vH:=uH HǐgHԶH\$8H | ;vH:=ۖuH HǐgHH\$8H  uHj:=uH Hǐ{gHTH\$8H uH2:=[uH Hǐ;gHH\$8H -{uH9=uH HǐfHԵH\$8H ;uH9=ەuH HǐfHH\$8H RtH9=uH Hǐ{fHTH\$8H tHR9=[uH Hǐ;fHH\$8H 5{tH9=uH HǐeHԴH\$8H ;tH8=۔uH HǐeHH\$8H d sH8=uH Hǐ{eHTH\$8H sHz8=[uH Hǐ;eHH\$8H {sHB8=uH HǐdHԳH\$8H e;sH 8=ۓuH HǐdHH\$8H rH7=uH Hǐ{dHTH\$8H  rH7=[uH Hǐ;dHH\$8H ]{rHb7=uH HǐcHԲH\$8H ;rH*7=ےuH HǐcHH\$8H DqH6=uH Hǐ{cHTH\$8H qH6=[uH Hǐ;cHH\$8H {qH6=uH HǐbHԱH\$8H ;qHJ6=ۑuH HǐbHH\$8H PpH6=uH Hǐ{bHTH\$8H pH5=[uH Hǐ;bHH\$8H |{pH5=uH HǐaH԰H\$8H  ;pH5=ېuH HǐaHH\$8H oHZ5=uH Hǐ{aHTH\$8H ~ oH"5=[uH Hǐ;aHH\$8H m{oH4=uH Hǐ`HԯH\$8H ;oH4=ۏuH Hǐ`HH\$8H |nH4=uH Hǐ{`HTH\$8H nHJ4=[uH Hǐ;`HH\$8H }{nH4=uH Hǐ_HԮH\$8H  ;nH3=ێuH Hǐ_HH\$8H mH3=uH Hǐ{_HTH\$8H mHj3=[uH Hǐ;_HH\$8H {mH23=uH Hǐ^HԭH\$8H  ;mH2=ۍuH Hǐ^HH\$8H ClH2=uH Hǐ{^HTH\$8H lH2=[uH Hǐ;^HH\$8H {lHZ2=uH Hǐ]HԬH\$8H t;lH*2=یuH Hǐ]HH\$8H kH1=uH Hǐ{]HTH\$8H kH1=[uH Hǐ;]HH\$8H {kH1=uH Hǐ\HԫH\$8H ;kHz1=ۋuH Hǐ\HH\$8H tjHB1=uH Hǐ{\HTH\$8H jH1=[uH Hǐ;\HH\$8H {jH0=uH Hǐ[HԪH\$8H  ;jH0=ۊuH Hǐ[HH\$8H iHj0=uH Hǐ{[HTH\$8H 8 iH20=[uH Hǐ;[HH\$8H {iH/=uH HǐZHԩH\$8H ) ;iH/=ۉuH HǐZHH\$8H  hH/=uH Hǐ{ZHTH\$8H  hHb/=[uH Hǐ;ZHH\$8H v {hH*/=uH HǐYHԨH\$8H L;hH.=ۈuH HǐYHH\$8H gH.=uH Hǐ{YHTH\$8H gH.=[uH Hǐ;YHH\$8H {gHR.=uH HǐXHԧH\$8H  ;gH.=ۇuH HǐXHH\$8H FfH-=uH Hǐ{XHTH\$8H XfH-=[uH Hǐ;XHH\$8H {fHr-=uH HǐWHԦH\$8H $ ;fHB-=ۆuH HǐWHH\$8H  eH -=uH Hǐ{WHTH\$8H  eH,=[uH Hǐ;WHH\$8H {eH,=uH HǐVHԥH\$8H ;eHj,=ۅuH HǐVHH\$8H 9dHJ,=uH Hǐ{VHTH\$8H dH,=[uH Hǐ;VHH\$8H {dH+=uH HǐUHԤH\$8H ];dH+=ۄuH HǐUHH\$8H  cHj+=uH Hǐ{UHTH\$8H B cH2+=[uH Hǐ;UHH\$8H E{cH*=uH HǐTHԣH\$8H  ;cH*=ۃuH HǐTHH\$8H  bH*=uH Hǐ{THTH\$8H  bHR*=[uH Hǐ;THH\$8H V{bH*=uH HǐSHԢH\$8H  ;bH)=ۂuH HǐSHH\$8H CaH)=uH Hǐ{SHTH\$8H aHr)=[uH Hǐ;SHH\$8H &{aH:)=uH HǐRHԡH\$8H C ;aHJ)=ہuH HǐRHH\$8H  `H)=uH Hǐ{RHTH\$8H  `H(=[uH Hǐ;RHH\$8H {`H(=uH HǐQHԠH\$8H  ;`H(=ۀuH HǐQHH\$8H _H(=uH Hǐ{QHTH\$8H :_Hb(=[uH Hǐ;QHH\$8H {_H*(=uH HǐPHԟH\$8H ? ;_H'=uH HǐPHH\$8H  ^H'=uH Hǐ{PHTH\$8H t^H'=[uH Hǐ;PHH\$8H ;{^Hb'=uH HǐOHԞH\$8H ;^H*'=~uH HǐOHH\$8H 2 ]H&=~uH Hǐ{OHTH\$8H ]H&=[~uH Hǐ;OHH\$8H W{]H&=~uH HǐNHԝH\$8H O ;]Hj&=}uH HǐNHH\$8H \H2&=}uH Hǐ{NHTH\$8H  \H%=[}uH Hǐ;NHH\$8H  {\H%=}uH HǐMHԜH\$8H ;\H%=|uH HǐMHH\$8H [HR%=|uH Hǐ{MHTH\$8H [H%=[|uH Hǐ;MHH\$8H {[H$=|uH HǐLHԛH\$8H };[H$={uH HǐLHH\$8H EZHr$={uH Hǐ{LHTH\$8H ZH:$=[{uH Hǐ;LHH\$8H {ZH$={uH HǐKHԚH\$8H ;ZH#=zuH HǐKHH\$8H YH#=zuH Hǐ{KHTH\$8H dYHb#=[zuH Hǐ;KHH\$8H {YH*#=zuH HǐJHԙH\$8H 3;YH"=yuH HǐJHH\$8H MXH"=yuH Hǐ{JHTH\$8H XH"=[yuH Hǐ;JHH\$8H {XHJ"=yuH HǐIHԘH\$8H ;XH"=xuH HǐIHH\$8H WH!=xuH Hǐ{IHTH\$8H  WH!=[xuH Hǐ;IHH\$8H 0{WH!=xuH HǐHHԗH\$8H &;WHJ!=wuH HǐHHH\$8H <VH!=wuHHT$8HBHpHH=1HT$8@[HH4#1HD$0HH H VH=(wuHH HHH\$0H - LVH=vuHHGHH\$0H VHO=vuHHGHjH\$0H  UH=tvuHHUGH.H\$0H 6 UH=8vuHHGHH\$0H [UH=uuH HǐFHH\$0H  UH:=uuH HǐFHtH\$0H 6TH ={uuH Hǐ[FH4H\$0H ITH=;uuH HǐFHH\$0H "[TH=tuH HǐEHH\$0H  THb=tuH HǐEHtH\$0H  SHR={tuH Hǐ[EH4H\$0H SH=;tuH HǐEHH\$0H [SH=suH HǐDHH\$0H <SH=suH HǐDHtH\$0H w"RH={suH Hǐ[DH4H\$0H fRHr=;suH HǐDHH\$0H G[RH:=ruH HǐCHH\$0H RH=ruH HǐCHtH\$0H KQH={ruH Hǐ[CH4H\$0H @ QH=;ruH HǐCHH\$0H [QHZ=quH HǐBHH\$0H +QH:=quH HǐBHtH\$0H PH={quH Hǐ[BH4H\$0H |PH=;quH HǐBHH\$0H y[PH=puH HǐAHH\$0H ͿPH=puH HǐAHtH\$0H DOHz={puH Hǐ[AH4H\$0H OHr=;puH HǐAHH\$0H [OH2=ouH Hǐ@HH\$0H ] OH:=ouH Hǐ@HtH\$0H NHz={ouH Hǐ[@H4H\$0H NHr=;ouH Hǐ@HH\$0H [NHB=nuH Hǐ?HH\$0H s NH=nuHHD$0HZH?H=IHD$0@[> HD$(HH IH;MH =VnuHH?HH\$(H 5yMH=nuHH>HӍH\$(H f;MH=muH Hǐ>HH\$(H µLHj=muH Hǐ{>HTH\$(H KLH2=[muH Hǐ;>HH\$(H H{LH=muHHD$(HH=H=HD$(@< HD$ HH KHLH U=luHHv=HoH\$ H KH =yluHHZ=H3H\$ H M fKH=;luHHD$ H҉H=H=HD$ @;Hl$HHP 'I;fvhH Hl$Hl$Ht9HHHHpH@H9r;H)HH)H?H!H:1Hl$H HHl$H @HD$HD$HHH+HHI;fH0Hl$(Hl$(HpL@L)HuMtH@H@@ HHHPLIH)H9!H@I9HXHHl$(H0HD$8H\$@Mu H@Ht$ MII)L9VHxH9aIH)I9LOIL)H?L!NHLLLXHHD$8H\$@Ht$ JII)M9HPfDH9I)H)LII?I!KH<HHQH|$8H_HO=iuH9HH\$@Ht$ H@HPH 3H9rWHHHHl$(H0H7Q@MHT$@H|$8HWHG@=iuHD91Hl$(H0S>H>H HHtHIHNHd>HL>HD$H\$)HD$H\$I;fH(Hl$ Hl$ H\$8@ HpHPHH)H9LL9L@)HL$@H\$8HD$0H:HL$@H\$8HHD$0HPH8L@H9wCH)H9HLIL)H?I!JH9tHT$H+FHT$H11Hl$ H(HHJ=LH@DWDT$LMEL9(I9hLl$`D<E8@L9=LzM9%L|$pH)HHHH?L!HH $H)H\$H|$DL$EEWdL4%HD$ fHLL$pJH$H$H\$xH$H$L$DL$>DT$L1ۉ|$DME1Hl$8H@L1ۉ|$DME1Hl$8H@M)MAMEtqL9LT$0DD$Ld$(Ll$ L*tT$DD$LT$0Ld$(Ll$ +HD$ H\$(L$|$t$LD$0E1Hl$8H@LL|$DMAHl$8H@LHIML9~HE$A0r=A9w&fDH'}ML,KM| WI*LAHL WH*X@t  fHHSfHH ~*H QHBHCH9TYʻ  .w  .v1Hl$HH HH9YHl$HHS H s1H HHH9vK^Hl$H1Hl$HHl$HW1Hl$HH; H3 . I;fHxHl$pHl$pH$HQH@MIHAIM!ISMT$II HL$8HIHHL$8LHt$LiI@MLIHItHL$8LIHEMLEIII HLHyH@MIHLIMuIHAL HHv LJL9|D$IIMAI H~IuGIOH@MMIAIM!MIM9LMDHI9HDMMD$I@HLMILHDI9| 11fL\$hLd$0HT$(Ht$ HHHD$@VHH1IHD$`H\$HH@ HƍHHT$HPHL$8HHt$ H!Ht$0HH|$(H=4u LD$`L@HxLD$`LUL ULH =g4uL@( Hx(D$L\$hIHHH ISH@HMI@MH@MHLAIM!MGM!I+{HAII!IqH!LHL!I HIM!M $HMEHuI9ufAnZHl$pHxfInHl$pHxHD$H\$HL$H|$ Ht$(DD$0DL$1yHD$H\$HL$H|$ Ht$(DD$0DL$1L$XM;fH(H$ H$ H$0H$8fH$0H$8#LD$hE@t[H$8I9^HALHAH$0H tZHHHD$hH$ H(À=lHD$PH\$XL$3@|$2@uHD$PL$3H\$X(tlT$2tJD$4HD$PHH\$XL$3(tBL$4.u7z5HD$h11H$ H(HD$h11H$ H(LD$hHD$h11H$ H(D$H$HfHl$Hl$zHmH$8DI9H$H$0L@H$HDs@u 11HD$`HD$pH$0H$8-HH1DH$H\$8HH@ HHHT$8HP=0uH$HPHxH$@[HQH5QHp =R0fuHP( Hx(/H HHD$`fnHD$hHHH$ H(H$H$0H$8DHH17H$H\$@HH@ HHHT$@HP=/uH$HPHxH$xHPH5PHp =o/uHP( Hx(NWH HHD$hH$ H(H$H$0H$8oHH1bH$H\$HH.H@ H܇HHT$HHP=.uH$HPHxH$HPH5OHp =.uHP( Hx({WH HHD$hH$ H(Z11H$ H(LLHD$H\$AHD$H\$L$PM;fH0H$(H$(H$8H$@bfH$8H$@LD$pE@tWH$@I9\HALHAH$8H oHHHD$pH$(H0À=ugHD$PH\$`L$7@|$6@u/HD$PL$7H\$`!tmT$6tKD$XHD$PHH\$`L$7!tCL$Xf.u7z5HD$p11H$(H0HD$p11H$(H0LD$pHD$p11H$(H0D$H$Hf@Hl$Hl$ZHmH$@DI9H$H$8L@H$HDn@u 11HD$hHD$xH$8H$@ HH1DH$H\$8HbH@ HuHHT$8HP=p+uH$HPHxH$@;HLH5}LHp =2+fuHP( Hx(H HHD$hfHnHD$pHHH$(H0H$H$8H$@"HH1H$H\$@H{H@ HHHT$@HP=*uH$HPHxH$XHKH5KHp =O*uHP( Hx(.WH HHD$pH$(H0H$H$8H$@OHH1BH$ H\$HH詻H@ HHHT$HHP=)uH$ HPHxH$ HJH5JHp =})uHP( Hx([WH HHD$pH$(H011H$(H0LfLHD$H\$#HD$H\$I;fHhHl$`Hl$`H\$xHD$pHT$xH9GHtrH5? H=0 H9;HA Hq(LIH9ItPD$ H\$XHL$PHL5,HL$PHT$xH\$XH= D$ H= HD$(H\$pHfHH1YHD$HH\$H(ùH@ HրHHT$HP='u HL$HHHHxHL$HH IHHHP ='uHH( Hx([WHH Hl$`HhHHHl$`HhHHH dBHD$H\$HL$MHD$H\$HL$9I;fvH5>Hp =iuHP( Hx(HH HHD$`H$`HhH$HLvHH1iH$8H\$8H5ЮH@ H/rHHT$8HP=uH$8HPHxH$8H=H5=Hp =uHP( Hx(H HHD$`H$`HhH$HL豣HH1褡H$@H\$@Hp H@ HjqHHT$@HP=uH$@HPHxH$@HI=H5:=Hp =uHP( Hx(HL H1H$`HhH$HLHH1@۠H$HH\$HHBH@ HpHHT$HHP=PuH$HHPHxH$H@H|<H5m<Hp =fuHP( Hx(H H1H$`HhEt&H$xL$XLd$XLqtLd$XL11H$`HhHD$hH$XH$xסHH1ʟH$(H\$(H1H@ HoHHT$(HP=?uH$(HPHxH$( Hn;H5_;Hp =uHP( Hx(Ht H1H$`HhbHD$H\$HL$H|$ HD$H\$HL$H|$ OLd$M;fHH$H$H$HH$H$+uHSHHH?HIHE1(-uHsIHH?Hƀ-IHAH$ DL$'HLH\$PH$DHtiHT H5E H9HQ LA(L 9H99tHHHHIxH9LGLAIu#HuH<H9vW1LHLHHH?Hy H@MHHIHL!HH)Hu IuHHuW1HHHH΃HHH6HHHGHHHHHGHJHrW1H4HH!H HH?AHHEfHn¸W1Hut ? WH\HHHHDH~HH@HHIHAHHH!HH5H|HHHHHijRHLI?I!I?M9ucLL9vHH4>HHHHHLFH9IGI!H?L9u7Hu1LL9v(W1H?HHH?HHHH?LA&I@MHLIHL!HH)HuLuHHuW1HHHSH΃HHHHHHGHHHHHGHJHrW1HH HHAHHEfnW1I;fH`Hl$XHl$XHL$PD$?H\$xD$HHSHHOHt$@H1HI1HL$@D$H|$?Ht$xLD$PlHH1@;Hl$XH`D$D$H\$HL$ ضD$D$H\$HL$ ;L$PM;fH0H$(H$(H$8I uZf~L zHI@qfH~L HH$H$@MaM)O<,I@MML$ILIHH$LI@HI@ML$LIM!LAIL!HI!LAIL$M!Ml$LL$M!I9MtHN1H$L$ItH{Nf HcNL M9s=HL$`H$LHH5LHH$IIHL$`H$@L$L$H$H4HHH$H$H$H$(H0MuH$L$IAI H$L$IMy@by@xt@Xu+LAMMMHOH$(H0À=[> H$8T$_L$H$`@$XD$D$D$HBf@f@Gw@Et@GuH'I I@euLfI H?D@gu'HLAIMDI ILH$` I HAL$L|$pLl$hH$D$D$I H$H$HDŽ$HDŽ$ILH)H$LLH$8H$`T$_H$@H$$XL$L$Ll$hL|$pAILd$xH$H$HDŽ$HDŽ$ILH)H$LL HT$xHH$8H$`T$_H$@H$$XL$L$Ll$hL|$pA HE1DEtH^LAMMMHXH$(H0D$D$H$H$HDŽ$ HDŽ$ II)H$LLLR%D$XAGw,AEt)AGu H$`HzH$`HAeu$H$HHҾHOH$`HXAfu)H$H+$ HҾHOH$`H)AguH$`HH$H$`HHH$8T$_H$@DL$AL$L$$$D$$D$LIAD׉H$(H0LAMMMHH$(H0LىLMmH$(H0HHg *HD$H\$HL$D$ @|$(Ht$0LD$8D蛯HD$H\$HL$D$ |$(Ht$0LD$8L$M;fHH$H$H$H$H$@$DD$_L$L$H$LL$hD|$pH|$xHfDHl$Hl$HmHD$pLD[H$HH$H)HD$pD$D$D$H$H:D$fDAGwAEtAGuHHHAeu*HKHD$pHH$HD$HvAftAAgu6H۹HDH\$`HD$pH$HD$H\$`4H/H$HHD$pHqH$HD$HD$D$D$HT$pH$HDŽ$ HDŽ$ H$H$H$H$HD$pH\$hH$H$D$D$D$HT$pH$HDŽ$ HDŽ$ H$H$H$H$D$AGw)AEt)AGu L$M^H$Hf_AeuHzH$HKAfu!H)HҿHOH$H)DAguL$MHH$HHH@H$H$$D$$D$H$H$t$_IH$H$HHD$H\$HL$H|$ @t$(DD$)LL$0LT$8L\$@舫HD$H\$HL$H|$ t$(DD$)LL$0LT$8L\$@I;fH`Hl$XHl$XH$AGwAEtAGtb9AeuCHT$hLd$pLl$xL$L$L$DL$HMMHl$XH`ÐAf%AgL$@M9~L9$LLMDMAMEL$McI}I9M9HI9LOLd$hLl$pL|$xHIPH$AQT$MMILfHl$XH`M9LOM)MAMOLl$hLD$pLL$xL$$LIz Hl$XH`HH9s"D$H53.=D$D%DLHl$XH`HT$hLd$pLL$xL$L$L$HM Hl$XH`HD$0H\$8HL$@@|$H@t$ILD$PDL$X/HD$0H\$8HL$@|$Ht$ILD$PDL$XL$M;fHH$H$HH$H$H$HWHHT$H9~4H(H+ HiLLL)HkdH9H$HĘH$D$XH$`HHl$Hl$NHmHKHH$XHH$HH$H)HH$XH$HH@HHHAII!H$L9v H$H$Ht$H9uHq LAJ4HHT$D|$ H|$(HffHl$Hl$zHmHNHHD$ H\$H$H+HHD$ ;H$11Hǀ H$HĘHGH$HH)H(L0L M9L$HMM|)L9$@~fI rF\ A0DM|I @F$A0L$xL9}H  D ףHH%DkdD)&HHH ףp= ףHHLkdL)H> ףLKIH=LILHFLM$[Md$E$$I9NFdHHfH=!HFLILI[fI9!HvGHZHDH=HFHYH9L RM QMIE H9DL>HH r:HHHspHPHqH9L IYH9vG\8HqIHQHHAHpH9vT0tLHA Hl$HHHưHH۰HйΰHư軰L賰詰L衰藰HjLd$M;fHH$H$H,HAHIHfH9|3H@HHH!HHپE1H$HĈIHH@HAII!L9uHWH)HI9uHHLRILZII"IIIRMZIHHLIMLHT$xLT$PH\$pL\$@LL$XH$IiɿHHL$8HqHt$HLL9uaLLH D$0L$.H\$XHD$pHL$HD$4L$/H\$XHD$@HL$HT$0ҋt$4D$/DD$.`LLH HD$`L$.H\$XHD$pHL$He HD$hL$/H\$XHD$@HL$HH HT$`Ht$hHD$/DD$.HLL$HfI7~11E1LT$8MZIsTIL\$PME1HL߾E1LH$HĈDxH$HĈHt$hIHH@MAHAIM!IIHL!HL!LT$hM!HHL!L!Et HAEAtHuLd$xAALd$xLLgEMLE琄tBIII@MHLLAIM!M9s HAuH7H10III@MHLLIM!IAHIDLEtDMu rH„t MAE1H$HADH$LJ LT$8M)ILJ H$HĈIDLT$8ILM9}-AHIIHLM9tDLLT$8AL\$pMtFE1IDLT$8ILM9}+AHIIHLLM9tLIAL\$@Mt1DIILILL9}IHIIHLLM9tLI‰fHWH kHD$H\$HL$H|$ HD$H\$HL$H|$ I;fH(Hl$ Hl$ HD$0HHIH6A_pIHHLiʚ;M)IHH6A_pHHHLiʚ;M)IHH6A_pHHHLiʚ;M)tp9wIA RDcEAE@t EAE1AevAAE!LHDEA H|$0HG fLLLLAH|$0fH_HGH~$HOHHXfDH9T0tHWH~\HHvh;0uMHHWHO HWHHwHr;HHWHVHWHH?Hڃ=uHHl$ H(ø11HHHD;Di0FlIIHLv2AIH#D ףHH%DkdD)DAAfILPLL%GM9swG Hs\L@LMYE$ M9w:uHpH8I9s!0B HJHHHKHH Hl$HLH[LLPȹDLL9D,I;fHHl$Hl$HtjH\HwpHH5HHHTHrHHL։HHHH@Li5IILHH9H HЉHl$HHHl$HH\H pD$H\$HL$D$H\$HL$(I;fH(Hl$ Hl$ HH\HHH5XGHD$H}HD$HT$HHHH|$IHHHHHHi5HHHH)HH fHu M@1H H7H HЉHl$ H(HHHl$ H(H8H LHD$H\$HL$HD$H\$HL$I;fH8Hl$0Hl$0HdshfH u`H }HHH9H pH,HpH 0HwXHHH9rHH5H VHHHl$0H81HHE1E1HHHHl$0H8-裣HD$H\$~HD$H\$I;fH8Hl$0Hl$0HdshfH u`H }HHH9H p~H,HpH 0Hw_HHH9rOH5H VHHHl$0H8HA1HHE11H{HHHl$0H8&蛢HD$H\$}HD$H\$I;f<H`Hl$XHl$XHD$hHdH H } HWfH9H`}H3LGIIHHI9LIPL3L9s3Ht$0H\$pHT$HLHH5HT$HHt$0IH\$pHD$PLD$@HL$8H<HHH趪HD$PH\$@HL$8Hl$XH`HAA Hl$XH`HL趡L)HH蛡HD$H\$HL$H|$ Ht$([|HD$H\$HL$H|$ Ht$(f{I;f5H`Hl$XHl$XHD$hHdH H } HWfH9H{H3LGIIHHI9LIPL3L9s3HT$HHt$0H\$pLHH5HT$HHt$0IH\$pLD$@HD$PHL$8H<HHHHD$PH\$@HL$8Hl$XH`E1AoHl$XH`HLL荟HHHD$H\$HL$H|$ Ht$(zHD$H\$HL$H|$ Ht$(Ld$M;fHH$H$H$HVH"}D|$?D|$@D|$PD|$`D|$pEtHH u AHVHuHփLVAAAFd>HHLH9w@IHI1HHHH)H$ICL%yF$'HArzLRLyFDIALD\>EtIRHABD>-LEfHAIH)HAHzIH?H!HT?IH9s3LL$0H$LD$(LH5 H$LD$(LL$0H\$0H$HL$(J4HHL躦H$H\$0HL$(11H$HĐHAw=HJHH?H!H\?H1HM1HH1HH$HĐHйA脝HйAwHйA誜LйAf蛜A葜H$褜F|>HHIHLMH9w&IL!fH$sYMkL=wFEIҐ-HйALAH$FT=HHHfDHdIHHH ףp= ףIHHLkdM)MbK"fH=CICL%yO,TMmEmHAFl>LHH=ICOTEHABLWIfILRLM${Md$E$$IAsfDd>H r.IHHs't90yI| 1LH5qLr1111Hl$H8u1H5FLG1111Hl$HÀ\wUtz\\1au 1b1Druwtt ut 1vt`xUuuuxu1L9 11]H5kLl1111Hl$Hú 1fu 1nu 1@ru 1H5L 1111Hl$HH5L1111Hl$HH{IHH?H 81L1E1Hl$HHD$ H\$(HL$(H9wLH)HHH?H!HT$ Hѻ1E1Hl$HH5XLY1111Hl$HHLL1E1Hl$HHD H9}kF EZA w0EZAw EZEZAw EZɿ1E1@uH5L1111Hl$HH)LSMII?I!MрxuMډ1fDr wMډH5NLO1111Hl$HHD H}/FAAvH5L1111Hl$HLSMII?AMf M1H5L1111Hl$HHD$H\$L$[cHD$H\$L$GI;fvPH Hl$Hl$HD$(f[HtH OH=P11Hl$H HLHl$H HD$H\$bHD$H\$Ld$M;f HH$H$H$H$H$H$L$FHPH$H$HsHt$XHt$L$èEWdL4%HL$HHL$PHAHD$xDL$FA"YfA'EA` D$EH$H9H$H $HD$D$ *EWdL4%H|$tLHL$PHQH$H1HH$H$HL$PH$E1HL$PLIH$L9iISHHH?L$M HH$H9L$MH5L11H$H$H$HH$fH9eH$H $HD$D$\EWdL4%H|$t17H$H$HL$xHL$D$ EWdL4%H|$L$F"u^H\$PHsH$H9HHHH?H$HHHT$xA@'uyH\$PHsH$DH9IH3HHH?H$HHHKHT$xH9u=tAHA E1HT$xE1ED$EtCHL$PLII9fIHHH?L$M HHL$PL$HMH$H)HIHH?H!I HL1E1LH$HD$Eu11EHT$PHRHHH?H 2HH$Hɕ1D$HH$DT$FH$Ht$X1lH5PLQ11H$H$H$HH5LHH11H$HHLEIHLH1fD8H$H$H$H$HHDiH$: HD$fDEYH|$`H$=|ukH$HL$I9r H$@D$HH$LѿH5_ZH|$`D$HIʋD$HH$DD$LHىHD$LHH$HH$H9r H$,HD$hHH5ٓH$H$HHD$hH$H$H$HHHH\$LHH$H|$`D$L$H$H$H$H$L$D\$FA'TH5L11H$H$H$HEHHHHEHHHHfHD8LWMII?ALEu=H$HH)HH9H$L1E1H$HL$H$1HH0H$H$1E1H$HH5L11H$H$H$HHH1L~1nH~1ZH~H~L\$xDL9r6H)HzHHH?I!K HH1E1LH$HLH~Hr~1~L[~HLIL9}kH9D A tIL9sGH\$pDL$GLHH5H$H$DL$GIHHL$PH\$pELHL1w.HL$PH$L$IHHHl}H}HD$H\$L$XHD$H\$L$HHl$Hl$=~U=})H VH~VHoVH5VHE1H VHuVHVH5_VHE1?H^v%=|=Hl$H1Hl$HøHl$HLL9~4IL)HNDL9FA9s LQMMfI9}]MIL9FDA9w?IL9B9r*fD=}H1Hl$H1Hl$HHH9~+HH)HL L9vKF FfA9s LBLLH9| s Nf9Hl$HHHHk{HLD[{LHP{LHE{LH:{LL9~4IL)HNDL9FVfA9s LQMMI9}>MIL9FF@fA9wIL9B4Nf9rH11Hl$HHH9~+HH)HL2L9vEF CfA9s LBLLH9| s sf9Hl$HHPzLHzLHf;zLH0zLH%zI;fHHl$Hl$Ha[7H@H HH :r H =du HH=fuH7H@H  HH q H o=u Hg H=^tHl$HUf;I;fH Hl$Hl$HHHH0H9KuiH{H9xu_HD$(H\$0HHtFHT$0HZHt$(HFHNt'HT$(HB HZ(HT$0HJ(H9B t1 1Hl$H HD$H\$4THD$H\$EI;fHxHl$pHl$pH}/HHtD|$D$J HT$H9tB L$\$HHl$H HKLIIEL IN IM|:I@MEAHLIM!LfDAÀuH HL9kU@{UHD$P2HD$Ld$M;f7HH$H$H$H$fH H rHDŽ$HDŽ$HDŽ$HDŽ$HE1ˀB ILIڃIMt I rfI B HE1πBILIIMtDI rI BIyL:N$ HtN,IMMH$H|$xL\$HH\$pH$H$Ld$hLT$PLL$XEt@t$?Ll$`H0hLHEHL$`HH$HQHt$XH~H9IHL|$?@8II?AI<H$H9tHH)^H$HL$`Ht$XHT$xH9nHH)HH$H9IHLII?L!HH$H9u HT$pHH]HT$pHH$H|$`Ht$HH9LD$hL)HOLD$PMHI9IILMII?L!HH$H9uM9WLL$@H$L\$xH$H4]HD$@HL$xH9HT$pH$H$LD$PIIH$wLL)HOH9HHLHH?L!H>H$H9tH\H$H$HĸLLSHHSHS1H SLй RLй RLȹ RLȹ R1H!HϾLA HH}dcHJ&!HǾLA1PKHHAd[cHD$H\$HL$H|$ @t$(DD$)-HD$H\$HL$H|$ t$(DD$)sI;fvjH0Hl$(Hl$(H )DH9)vHHH\HHl$(H0û 蓮HH1HHl$(H0HD$&-HD${I;fvoHHl$Hl$HD$ X(@HL$ It&Hr*HHHH?HHHl$HHl$Hø1QHD$,HD$wI;f~H0Hl$(Hl$(HtWHHHwHHHl$(H0%HH1H1;HH1bLaH%bHC 9aHD$+HD$d@HHl$Hl$p@tQpHHw:H pL $HpH2Hp@,Hp8&HpP HpXHp8Hp8HpPHp01Ht1Vfu11~HHw$HHHHl$H11HHl$Hû$PI;fv@HHl$Hl$HDHuH@@Hl$HHHl$HHD$p*HD$I;fHHl$Hl$H@tTHHHw;HJ $HHH5HH@/HH8)HHP"HHXHH8HH8HHP HH0f1Ht Hl$H11Hl$H11Hl$HHD$)HD$1I;fHHl$Hl$H@t VHK111Hl$HHH|%4@.uHt@[uH@]uHHQH9r#H)HHHH?H!HHHl$HHHMHD$(HD$FI;fvaH0Hl$(Hl$(HDHuH@8Hl$(H0"HH1HR$HH^]HD$O(HD$I;f+H0Hl$(Hl$(HHwZHu#HH0Ht HdW 11HHl$(H0HHH0Ht H4W 11HHl$(H0ÐHu#HH8Ht H W 11HHl$(H0Hu$HH0Ht HV 11HHl$(H0Hu&HH0Ht HV 11HHl$(H0Ð;HH1H f[HHQ]l\HD$'HD$Ld$M;f HH$H$D$H$HDHl$Hl$MHmHfDHu}U H $HL$xH$Ht$Hl$Hl$PHmHL$xH$H$H$ffDHl$Hl$}PHmH$H"HH1H"@{HH \'[HD$pH\$x%HD$pH\$xI;fH0Hl$(Hl$(pHupp@tH8P0fu11 H4Hw4H9s$H Ht HT 11HHl$(H0HHtIjJHH1H 'HH[8ZHD$H\$$HD$H\$I;fvvH0Hl$(Hl$(HDHu#HH0Ht HS 11HHl$(H0RHH1H tHHjZYHD$$HD$pI;fvaH0Hl$(Hl$(HDHuH@@Hl$(H0HH1HDNHHYXHD$#HD$I;fvaH0Hl$(Hl$(HDHuH@@Hl$(H0G%HH1H(iHH_YzXHD$#HD$I;fvaH0Hl$(Hl$(HDHu@0Hl$(H0 HH1H]NHHXWHD$"HD$I;fH0Hl$(Hl$(PHu:P2fu1@0H9wH)HHl$(H0G@!HH1Hbf;HH1XLWHD$!HD$WI;fH0Hl$(Hl$(PHPtH8P2fu11,p0H<H9wMH)HHHH?H!HH9s#H Ht HP 11HHl$(H0HHmEFHH1H #HHW4VHD$H\$ HD$H\$I;fH0Hl$(Hl$(HtgfHtIHuHHl$(H0û 蔡HH1HHl$(H0H0Hl$(H0HZHl$(H0HD$HD$QI;fgH@Hl$8Hl$8HD$HH|$`HL$XLHH-1AH9H)HHH?H!H@H10HL@L9H9D fA:L9DLA"H)HVIHH?L!LL9}tLRM9:H)HIHH?L!LH9 LD$(LT$LL$ Ht$0HH#`HL$XHt$0H|$`LL$ @111Hl$8H@HH94@ tHDH9DA A:A"AuHL9zsXFA"@A\uHHD$(H\$膺fDH<Hl$8H@LLf;BHLALHAHfAHHBHD$H\$HL$H|$ VHD$H\$HL$H|$ f[I;fpH(Hl$ Hl$ D|$0H|$8HHl$Hl$CHmfDHHH8H9X@H$H$H[HtHt H=L 11HL$HT$H|$PHt$XHHD$0H\$8HL$HT$H$Hu(H$HA0{HD$@H\$HHL$HT$H;Ht HD$`H\$hHL$HT$HLHL$pHWH$HHD$xHDŽ$HDŽ$Hl$ H(HQH3 QHD$pH\$xHD$pH\$xhI;fAHĀHl$xHl$xX,DH$HHHڄuGH$)HHHD$0H" HD$PH\$(H$1HHHHfHT$pHH$H$H$H9Q@ LËIHf9s&?u1HHH9w?u1HPHHDEAL9EAEF‰?uHPH$1H9 H$HfHl$Hl$ HmL$H$ A$AB$AB $L$IIL$EREAIu/L$MR=l6uLHHL'8L$As8A t2L$M=)6uLHL@=6uL$LDHH$fDI[ L$L$L$IH$H ; L$EZEAfIu!L$McLİML$;L$AsA tL$M,$LİL$LİH$H  EREAIuMT$LAsA tM$LLI6 H$fH L$EREAfIuL$MRL8:L$AsA tL$ML8L$L8L$EZAtH8EZ0fDfEuE1E1IIM L$L$H$1 ILIL9M$H$L$H9 M|LLaL9u L$L`L9 MdL$LL$M9 M9 LLXM)MM)O@II?M!OT=ML$ML$M9> L$L$xMTMeM9u L$L`M9MdL$L$M9M9M)LM)L<@II?M!O<*LL$MuMtL$L$xA$XMYMA$hMY MA$xH$XMA$HMZIA$XI IA$hH$HtL$L$1fL$hL9$XH$`H$pHL$J HH{H$HlH$H$L$MYA$MZIA$I IA$H$uL$xH$(12M9L$xH$(1DL$H$LIIL$ $2f$H8H$HL$H$v(H$(HtG=R0fuH$Hl$Hl$ HmHHH$H$(H$HH$H)Hv.H$`H$H>H$HH$H$ H$AH$HH$\H$HI0HL9A$AB$AB $LvIO$A$$McMA$$I MA$L$L9$It?IumL$I L$NI NL$I L$N@I srNIuLL$ Is-L$N\HIs N8LLعfHtHEL {Lع nL aLع TH-HAHH.I0HL9pA$(AB$8AB $HL$0L$L$(N<IIuJL$HI WN=2-fu N$gILML@MIL$PL$8IuINdHF$D IIBDHBH$L$H$HH$8LˡH$(H$HtH$H$H$L$L$yL$tLHfHzLmHFHZL M1HCHH0I0HIfDL9\H$L$A$AG$(AG $8L$ L$pL$LO$fIItuI2L$@L$(Iu0CfIfA~N84@IOIN8 L$8O I s{NİH$8H$(H$L聠H$H$HH$H$H$L$L$fL$L LHmHLtHMHa1HWH0HDLLLLLL#LLLLLLLDڻHH5  1HHH 38HD$H\$HL$H|$ HD$H\$HL$H|$ L$M9,$I$$I;fH@Hl$8Hl$8HD$HH\$PHL$H\$ HʃH|@H s1p@ u$HD$H9HD$HT$H\$ HHt"H@0`HH HɀHl$8H@111Hl$8H@cHuHT$ H2HRHT$ H2HRHtHvHt$(HT$0Ht$(Ht~AIHA LDϐE111MtH|$H`A IEI HHLHl$8H@H H HL$H%H@H lHHL$HHHH? HD$H\$HL$&HD$H\$HL$2I;fH Hl$Hl$HD$(H\$0HʃHuwHp8H9x@vYH<HDLDHAL EDAuIH@I ALEʐLʐH\HHl$H H H HL$Hϕ H@H ȚHHL$HHHHe>D{ HD$H\$HL$H|$ HD$H\$HL$H|$ I;f|H Hl$Hl$HD$(H\$0HʃHuKH9x@5H@0H` HEH0HH PH HHl$H HuLH9{H@0H` HEHpH HɀHH;HHl$H HuNH9{v5H` HEHHɈHAH:Hl$H H H.! HL$H5pH@H THHL$HHHH< H H H HD HD$H\$HL$H|$ AHD$H\$HL$H|$ HI;fH8Hl$0Hl$0HD$@H\$HH@t H` sHHλ HHxCHʃHuJH\$(HJHt"HL$(HHYHtHRHHl$0H8HL$(HHYHl$0H8HEHl$0H8H HHH@H EHH@HHW;rHD$H\$HL$@|$ HD$H\$HL$|$ @HD$H\$HI;fvIH Hl$Hl$HD$(H\$0HʃHuHCHl$H HD;Hl$H HD$H\$HL$f;HD$H\$HL$I;fH(Hl$ Hl$ HD$0H\$8HʃHL$HwUHtAHH8$HxsHHPHl$ H(H@@Hl$ H(Hu3H8HxsHH)Hl$ H(HtHuaHCHl$ H(HD$HHHu$HD$@ۨHHHl$ H(H>HORHk覲H@H lHHL$HHHH9HHHHHD$H\$HL$D{HD$H\$HL$GI;fH Hl$Hl$Hx(tmHD$(HHH谤HtDHT$(H2Hv0HRH` HEVH HHHl$H H HQ4H H.!HD$HD$LI;fH Hl$Hl$Hx(tmHD$(HHHHtDHT$(H2Hv8HRH` HEVH HHHl$H H`HtHMHaHD$HD$LI;fH(Hl$ Hl$ HP@HHHHL$Hx(u.H0HxH>ueH~t^sH?HH@[HHt$HD$袢HD$آHHl$ H(HHHnHoH[HoHD$HD$I;fH0Hl$(Hl$(DHu Hl$(H0HD$HD$ H\$HPHL$HH=pu#HL$ HHL$HHHH5HHL$ HD$BHD$XI;fvsH(Hl$ Hl$ P uIHL$@H\$8HD$0ϛHD$HHL$@HD$0ءHL$8HHD$0H\$Hl$ H(HHHHl$ H(HD$H\$HL$HD$H\$HL$@[I;fvvHHl$Hl$HD$ H\$(fHt! s 1Hl$HdHl$HHέH@H /HH@HH*4EHD$H\$HL$HD$H\$HL$[I;fH0Hl$(Hl$(HD$8H\$@HuH@@Hl$(H0HL$f;HD$ H\$HʊHL$HH=%u HL$ HHL$HHHHX3sHHL$ HD$H\$HL$HD$H\$HL$;I;f|H(Hl$ Hl$ HD$0H\$8HʃHL$HwrHHuO r8H8Hx@ sHHtHHHl$ H(HLHl$ H(HtKDHu,Hxu4HHD$HD$Hl$ H(Ht,HuCH8u*Hxt#sHHHl$ H(HHl$ H(HHHKH@H HHL$HHHH1HHHHHD$H\$HL$&HD$H\$HL$RI;fEHpHl$hHl$hHD$xH$H$H$HL$8LD$@Ht$`H|$XH\$PHD$HH`ur&HHD$HHL$8H\$PHt$`H|$XLD$@Mt I`t&LHD$HHL$8H\$PHt$`H|$XLD$@HALDLIHH=tH s6H((H9uHD$HH\$Pt7HD$HHH\$PDۜH|$P=u H @Hl$hHpHD$H\$HL$H|$ Ht$(LD$0HD$H\$HL$H|$ Ht$(LD$0kI;fH8Hl$0Hl$0HD$@H\$HH\$(@|$XH`urHL$HxHL$H\$(|$XDHu @;Hl$0H8HL$HD$ H\$HR荨HL$HH=u HL$ HHL$HHHH.HHL$ NHD$H\$HL$@|$ sHD$H\$HL$|$ I;fJH@Hl$8Hl$8HD$HH\$PHD$0H|$`LD$pHt$hH\$(DH`ur+HL$HDHD$0HL$H\$(Ht$hH|$`LD$pfHuhuHHHu>HD$hH|$(HGHD$pHG=uu HD$`H HD$`/Hl$8H@HH?HL$(HD$ H\$HHL$HH=fu#HL$ HHL$HHHHC-[HHL$ HD$H\$HL$H|$ Ht$(LD$0HD$H\$HL$H|$ Ht$(LD$0fI;fJH@Hl$8Hl$8HD$HH\$PHD$0H|$`LD$pHt$hH\$(DH`ur+HL$HHD$0HL$H\$(Ht$hH|$`LD$pfHuh՛HHHu>HD$hH|$(HGHD$pHG=u HD$`H HD$`Hl$8H@HHHL$HD$ H\$HRHL$HH=rfu#HL$ HHL$HHHH+HHL$ HD$H\$HL$H|$ Ht$(LD$0)HD$H\$HL$H|$ Ht$(LD$0fI;fH(Hl$ Hl$ HD$0H\$8H\$D$HH`urHL$HHL$H\$D$HH u Z HuHl$ H(HL$H+H@H bHHL$HHHH*HD$H\$HL$D$ &HD$H\$HL$D$ I;fH(Hl$ Hl$ HD$0H\$8H|$HH\$H`urHL$HHL$H\$H|$HHL$HwHuH;-Hu1@;"@Huf;Hu; Hu H;Hl$ H(Hр H@H ˉHHL$HHHHg)HD$H\$HL$H|$ HD$H\$HL$H|$ I;fH8Hl$0Hl$0HD$@H\$HH|$XH\$(H`urHL$HHL$H\$(H|$XDHu'H9{rH{Hl$0H8HH`HL$)HD$ H\$HHL$HH=u HL$ HHL$HHHHF(aHHL$ HD$H\$HL$H|$ ٿHD$H\$HL$H|$ DI;fBHĀHl$xHl$xH$H$H$H$L$L$L$L$HʃfHHT$HHD$pH\$hfDH`tHoHD$pHT$HH\$hL$Mt I`tLBHD$pHT$HH\$hL@0L9h+tL$AI?L9$1LP8I: L$I IzH$u-H8HxsHԑHl$xHHL$PH|$8L$Mt I`t LHD$pH$H$H$L@8H=HE1HHH$HEH$H$H$HD$pH8HxHT$Hs HT$hHH\$hHL$PH|$8Hl$xHH$H$H$H=E1%HH$HEH$H$H$H$uLHD$pH8fD HxHt$Hs Ht$hHH\$hHHl$xHHT$XH$HtH`tH$H$H$HT$pLB8H=ʕE1OHH$HEH$H$H$HD$pH8u5Hxt.HT$Hs HT$hHH\$hHL$XHl$xHH=H>QH*H+;HH(HHHL$HHD$`H\$@H{UHL$@HH=u u HL$`HHL$HHHHH#HHL$`HD$H\$HL$H|$ Ht$(LD$0LL$8LT$@L\$H"HD$H\$HL$H|$ Ht$(LD$0LL$8LT$@L\$HPI;fH(Hl$ Hl$ HD$0H\$8H|$HH\$H`urHL$HHL$H\$H|$HHL$H w%HuH;:Hu @;/@H u/f; H u;H uH;f H u H;Hl$ H(Hy@ۛH@H HHL$HHHH6"QHD$H\$HL$H|$ ׹HD$H\$HL$H|$ I;fH8Hl$0Hl$0HD$@H\$HH|$XHt$`H\$(H`ufr!HL$HHL$H\$(Ht$`H|$XHu'Hs= uH; HHHl$0H8HL$HD$ H\$Hqx謚HL$HH=u HL$ HHL$HHHH HHL$ mHD$H\$HL$H|$ Ht$(荸HD$H\$HL$H|$ Ht$(I;fQHHHl$@Hl$@HD$PH\$XH|$hHt$pHL$HʃHuHH@H@8HLHKLHH9fH9HD$ H\$(HL$H{HHL$pHT$hH)HHHL$H)HHH~0Ht$ LF0MILD$(Lƒ=cuH/HD%=Ku HT$(H HHT$("Ht$ HT$H` HEHɗHHHl$@HHfHH|wH9|rH9s|lH\$8HD$0Hu萘HL$hHT$8fDH9J~)HHt$pH)ΐHpHʃ=uHHqHHL$HD$0Hl$@HHHHHL$HuH@H {HHL$HHHHqHeHVyHRH#fHD$H\$HL$H|$ Ht$(HD$H\$HL$H|$ Ht$(iI;fvIH Hl$Hl$HD$(H\$0HʃHuHH[Hl$H Hf;Hl$H HD$H\$HL$f[HD$H\$HL$I;fH@Hl$8Hl$8HD$HH\$PHtXHt r HH`HHѹHHLRA1HLHl$8H@H,jHl$8H@HD$H\$HL$蓴HD$H\$HL$@;I;f%H(Hl$ Hl$ HD$0H\$8H H PHu+HP8H9H@\HHYHl$ H(HD$HL$D[HL$H9v>H\HD$@軝HHHl$ H(HHHl$ H(HHmDHHUHrH@H tsHH@HHwHD$H\$HL$fHD$H\$HL$I;fH(Hl$ Hl$ HD$0H\$8HʃHL$HwrHHuP r8H8!Hx@sHHtHHHl$ H(ÐH5Hl$ H(HtP@Hu5Hxu:H\$HHL$HHl$ H(fDHt)HuCH8u*Hxt#sHHHl$ H(HHl$ H(HH1HJq腓H@H HHL$HHHHHHHHHD$H\$HL$D[HD$H\$HL$GI;fHĀHl$xHl$xH$H$HL$pHt$hH$H$H$L$H9uHHLt Hl$xHHL$pHH$HD$`H\$XHL$hHH$H$H\$1H$H$H=[HLD$`LL$XL4IAtlHHDHD$H\$HL$H|$ Ht$(LD$0HD$H\$HL$H|$ Ht$(LD$0Ld$M;fHH$H$H$H$H$H$HʃHL$xHtfHSHH$HT$pLD$hH$H$H$uLDH`ur7H艽H$HL$xHT$pH$H$H$LD$hHt H`t7HCH$HL$xHT$pH$H$H$LD$hMALD$`ItpItdItE1OJHHHH$HT$pH$H$H$LD$`LL$hAHL$xEu E1E1DT$?Mt I`tLoH$…H$H$L$?t HT$xHMH$葅H$H$HIH'] jHL$xHH$H$tH$H2HzHRLD$`IEH$H$HL$p6HT$`HH$IHHH$H$HT$XH|$PH$t/IuH$LLIHIML$MJML9H$H$HL$hH$HIL$H$HL$HLL$@L$HHH$HL$PH|$XH$LD$@LL$H)H$HHk H@ H [HHL$`HHHHhHk׍H@ H {[HHL$xHHHH2MHD$H\$HL$H|$ Ht$(LD$0ɫHD$H\$HL$H|$ Ht$(LD$0I;f|H(Hl$ Hl$ HD$0H\$8H|$HHL$@HHH#HL$@HHT$HHH9HGHD$HL$0HQHHD$8H nH_H9uHH\$HzHL$@H\$HKHL$HHK=uH HD{HHD$0H5H9uHD$8Hl$ H(HH %D[dHH LdHHHHHHHlHD{HD$H\$HL$H|$ HD$H\$HL$H|$ HI;fH(Hl$ Hl$ HD$0H\$8HL$HHHuOHHD$0HH9u+HD$8H\$D[yHùHD$8Hl$ H(H 8cHHHD$H\$HL$0HD$H\$HL$;I;fH(Hl$ Hl$ HD$0H\$8HH6H5'H9udKʃ uFH;w HHL$H\$8HowHL$H\$8HHHHHl$ H(H1Hl$ H(HH /bHHHD$H\$+HD$H\$I;fH(Hl$ Hl$ HD$0H\$8HtqH:H5+H9uOH\$8H9H t&HD$HD$8vHùHD$Hl$ H(HHTHH HaHH"HD$H\$EHD$H\$6Ld$M;fHH$H$H$H$L$H$L$H$ s%HHIHIHLL'mL$HL$XH\$xHD$pHLHf2H$H\$p&fD\HL$XHʃHu*H\$xH;u$H$1۹H$HĘH\$xHD$pH1H$H\$hH$HuH$tHH$H$ {Hu7H$H$H=u HT$hHS:H{HT$ho*H$H$HL$hH$KsH$H$H$HĘHL$XH` HEցH H$PH H\$xH$HĘHD$pwH$H\$`H$wH$H\$1H$H$H=\L$LL$`LAx`HHHD$H\$HL$H|$ Ht$(LD$0LL$8RHD$H\$HL$H|$ Ht$(LD$0LL$8 I;f0HxHl$pHl$pH$H$H$H$ s*HHλHHBBHjH$H$HL$PH\$hHD$`HHH\$`Ht2LH\$hHL$PH$H$HHD$`AHl$pHxHD$`RvHD$XH\$HH$HH$ѹ%H|$XHt$HLAII1H~@v6_HH,GHD$H\$HL$H|$ Ht$(ȢHD$H\$HL$H|$ Ht$(I;f\H8Hl$0Hl$0HD$@H\$HSH7HrHw`PHrH v=HrHv"HHHl$0H8HHl$0H8HHl$0H8HrHw\PHrH v9HrHvHdHHl$0H8HHl$0H8HHl$0H8H 'PHrHv:HrHvHHHHl$0H8HHl$0H8HHl$0H8HwyHw*PHHH}Hl$0H8HPHyD{uHD$@H\$H\H9Hl$0H8HPfDHt1$HNxHHHHD$@H\$Ht2H&xHHH;H HD$@H\$HPHt1"wHHHHD$@H\$Ht\HfwHD$(H\$ HD$@wHHHHHL$(H9t1HHH\$ D{|HD$@H\$HPfH*HNwHD$(H\$ HD$@:wHL$(H9t1HHH\$ uHD$@H\$HH Hl$0H8HHl$0H8HHl$0H8HHl$0H8@HPHt1&DvHHHHD$@H\$HtOvvHHHt'@Ht HD$@H\$H"HWHl$0H8HNHl$0H81襏D HD$@HHt1ftHHD$@t0H\$HKHt1!HtHHD$@H\$HH\$H1ɄtKuHHfHD$HD$HuHHH1HD$uTHD$@H\$Hat4HL$HIHuHHl$0H8HRHl$0H81Hl$0H8HHl$0H8HHl$0H8HD$H\$+HD$H\${I;fHHl$Hl$HL$0H|$8HD$ H\$(HHHD$kHL$HHwHu HT$(.Hu(HT$(fHu HT$(HuHT$(HQHt$ H HHHHHl$HHD$H\$HL$H|$ 0HD$H\$HL$H|$ I;fHHl$Hl$H\$0HL$8HD$ D$(HHHD$fjHL$HHuD$(ZHu D$(QHt$ H HHHHHl$HHD$D$H\$HL$ LHD$D$H\$HL$ 2I;fvoHHl$Hl$H\$0HL$8HD$ D$(HHHD$iD$(HL$QH\$ H HHHHHl$HHD$D$H\$HL$ 葚HD$D$H\$HL$ WI;fHHl$Hl$H\$8HL$@HD$ L$0D$(HHHD$hHL$HHuD$(ZD$0Z@HuD$(D$0@QHt$ H HHHHHl$HHD$D$L$H\$ HL$(舙HD$D$L$H\$ HL$(I;fv{HHHl$@Hl$@H|$hHt$pHD$PH\$XHL$`HH(CHD$0H\$8HL$(H|$XHt$`eHL$(HHT$PH HD$0H\$8Hl$@HHHD$H\$HL$H|$ Ht$(HD$H\$HL$H|$ Ht$(CI;fHPHl$HHl$HHt$xL$HD$XH\$`HL$hH|$pHLÐ[vHD$8H\$@HL$0H|$`Ht$hLD$pHL$0HHT$XH HD$8H\$@Hl$HHPHD$H\$HL$H|$ Ht$(LD$0HD$H\$HL$H|$ Ht$(LD$0'I;fHPHl$HHl$HHt$xL$HD$XH\$`HL$hH|$pHLÐ{薾HD$8H\$@HL$0H|$`Ht$hLD$pHL$0HHT$XH HD$8H\$@Hl$HHPHD$H\$HL$H|$ Ht$(LD$0 HD$H\$HL$H|$ Ht$(LD$0'I;fH0Hl$(Hl$(HD$8H\$@H|$PHt$XHʃHL$ HwfHuL,HuSL HuLHuLc Hu0LH` HELHHFHl$(H0HUwH@H RHHL$ HHHHKfHD$H\$HL$H|$ Ht$(HD$H\$HL$H|$ Ht$(I;fH0Hl$(Hl$(HD$8H\$@H|$PHt$XHʃHL$ H w%fHuL7HuD+H uRDH uDH uL H u0LH` HELHHHl$(H0HTvH@H 0UHHL$ HHHH ;HD$H\$HL$H|$ Ht$(軔HD$H\$HL$H|$ Ht$(fI;fH0Hl$(Hl$(HD$8H\$@H|$PHt$XHʃH u Z Hu3H` HEH,HHHl$(H0HL$ HxSuH@H XHHL$ HHHH)HD$H\$HL$H|$ Ht$(誓HD$H\$HL$H|$ Ht$( I;fH0Hl$(Hl$(HD$8H\$@H|$PHt$XHʃH u Z HuT f.vL,\L,I?H` HELHHHl$(H0HL$ HWRtH@H cWHHL$ HHHHHD$H\$HL$H|$ Ht$(艒HD$H\$HL$H|$ Ht$(I;fH0Hl$(Hl$(HD$8H\$@H|$PHt$XHʃHL$ HwfHuL,HuXL HuLHuLc Hu5LH` HEWI*HHHl$(H0H0QksH@H NHHL$ HHHHHD$H\$HL$H|$ Ht$(bHD$H\$HL$H|$ Ht$(I;fH0Hl$(Hl$(HD$8H\$@H|$PHt$XHʃHL$ H w%fHuL7HuD+H uzDH uDH uL H uXLM| WI*MIAM WI*XH` HEHHsHl$(H0HOfrH@H PHHL$ HHHHvHD$H\$HL$H|$ Ht$(HD$H\$HL$H|$ Ht$(I;f\H8Hl$0Hl$0HD$@H\$HHL$ H\$(Ht$`H|$XHt r H 0HHHѐH t1HL$XHHD$`H uaHT$ HփH uHT$( ZHuvHT$( H` HEH\$XHL$`Hl$0H8HT$ H` HEHT$(H\$XHL$`Hl$0H8HT$ H/NjpH@H ;SHHL$ HHHHDHD$H\$HL$H|$ Ht$([HD$H\$HL$H|$ Ht$(f[I;fH8Hl$0Hl$0HD$@H\$HH|$XHt$`HʃHu[ZZHu=[H` HEHH@;Hl$0H8HL$(HMD;oH@H XHHL$(HHHHHD$H\$HL$H|$ Ht$(2HD$H\$HL$H|$ Ht$(I;fH8Hl$0Hl$0HD$@H\$HH|$XHt$`HʃHL$(Hw#HuL5HL%DHuLHuLc HulLIcI9tH>%%HT$(H|$XHt$`1hHT$(Ht$`H|$XH`A IEHHHHl$0H8HKmH@H HHHL$(HHHH&AHD$H\$HL$H|$ Ht$(‹HD$H\$HL$H|$ Ht$(I;f/H8Hl$0Hl$0HD$@H\$HH|$XHt$`HʃHL$(H w3HuLIHuD=fH D$H u DDH uL H uqLMcM9tH#*HT$(H|$XHt$`Ic1ffHT$(Ht$`H|$XH`A IEHHHHHl$0H8HJRlH@H JHHL$(HHHHȿHD$H\$HL$H|$ Ht$(IHD$H\$HL$H|$ Ht$(I;fH8Hl$0Hl$0HD$@H\$HHt$`H|$XHL$(H9u HLC ؚIH1HL_HT$(H` HEHH|$XHt$`HH3Hl$0H8HD$H\$HL$H|$ Ht$(kHD$H\$HL$H|$ Ht$(-I;fH@Hl$8Hl$8HD$HH\$PHt$hH|$`HL$0HʃHu LLKHII1LL@`HT$0H` HEHHt$`LD$hHHHHl$8H@HD$H\$HL$H|$ Ht$({HD$H\$HL$H|$ Ht$(fI;fv{H8Hl$0Hl$0HD$@H\$HHL$(H|$XHt$`讚HHH1aHT$(H` HEHH|$XHt$`HHiHl$0H8HD$H\$HL$H|$ Ht$(衇HD$H\$HL$H|$ Ht$(CI;fH@Hl$8Hl$8HD$HH\$PHt$hH|$`HL$0HʃHu LLKHII1LL@;_HT$0H` HEHHt$`LD$hHHH&Hl$8H@HD$H\$HL$H|$ Ht$(軆HD$H\$HL$H|$ Ht$(fLd$M;f{HH$H$H$H$H$H$H\$xHD$pHL$`HWHHHHHD$HHL$`HʃfDHu H\$xHs/HL$XHD$pH\$xH踳HL$XHT$`H\$xHHD$HH9AH$HH$HL$xHHL$`H`HH$HĈHuhHKHH1HD$hH\$PHD$H41*H|$hHt$PL{A!II1HQDX@[AHHQlHD$pH@۲HHD$H\$HL$H|$ Ht$(؄HD$H\$HL$H|$ Ht$(:Ld$M;fHH$H$H$H$H$H$H$H$HL$`HHHD$HHL$`HʃHuH$Hs7HL$XH$H$HرHL$XHT$`H$HHD$HH9|H$HH$fHD$hH$H HL$pRH$HHL$pHD$hXHL$`HHHD$hH$H$HĘHudHKH+/HD$xH\$PHD$H/*H|$xHt$PLOAII1H4'VB?HH8SH$HðHHD$H\$HL$H|$ Ht$(D軂HD$H\$HL$H|$ Ht$(fI;fH@Hl$8Hl$8HD$HH\$PH|$`Ht$hHL$H\$0HHHL$r HH\$0`H@H CHHL$(HHHHHD$H\$HL$H|$ Ht$(~HD$H\$HL$H|$ Ht$(fI;fHPHl$HHl$H11Hِ;HHT$8HD$@HT$8=u H H=HHD$(HTHD$0HD$(=u H H=y茝HHD$HHD$ HD$=u H? H=6QHl$HHP}fdL4%H@H$8H$8Mf MukLd$(M}HT$H$Ld$zHT$H$H$HHL$D$ HD$ HD$HD$(HD$Ld$(}H$8H@L$HM9,$uI$$̋9 uHf9KuHf9Ku H9K1I;fH Hl$Hl$HHHH0H9KH{H9xHD$(H\$0HH葽tyHT$0HZHt$(HFHNrtZHT$(HB Ht$0HN(HZ(H9F u>t5HL$(HQ0H\$0H9S0u!HQ8H9S8uHQ@H9S@u HIHH9KH1ɉHl$H HD$H\$w{HD$H\$I;fH0Hl$(Hl$(Mf @MuzHt[HH wH9wvHHTH ) JHH1HLHHHHHl$(H0v!HD$zHD$aLl$8M9,$wI$$nI;fv7HHl$Hl$Mf Mu1HtHYHl$H!HD$YzHD$Ll$M9,$uI$$HH,$H,$Mf MuHtH@H,$H Ll$M9,$uI$$I;fvZH Hl$Hl$Mf MuTHt5HXHHHHʃHuHK HvHHHl$H ! HD$vyHD$Ll$(M9,$uI$$I;fvBH Hl$Hl$Mf Mu<HtHHXHHHhHl$H HD$xHD$Ll$(fM9,$uI$$I;fvBH Hl$Hl$Mf Mu<HtHHXHHH(Hl$H HD$nxHD$Ll$(fM9,$uI$$I;fvcH Hl$Hl$Mf Mu]Ht>HXHHHHʃHu H HSHHHHHHl$H xHD$wHD$Ll$(M9,$uI$$I;fv)HHl$Hl$Mf Mu%KHl$HHD$gwHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%NHl$HHD$wHD$fLl$M9,$uI$$Ld$M;fHH$H$Mf MD$H$HHl$Hl$蔝HmOH $HL$xH$Ht$DHl$Hl$轠HmHL$xH$H$H$fHl$Hl$}HmH$HHD$pH\$xuHD$pH\$x@L$M9,$I$$DI;fv2H Hl$Hl$Mf Mu@H\$0HL$8R\Hl$H HD$H\$HL$TuHD$H\$HL$Ll$(M9,$uI$$I;fv)HHl$Hl$Mf Mu%[PHl$HHD$tHD$fLl$M9,$uI$$Mf Mu@Ll$M9,$uI$$I;fv)HHl$Hl$Mf Mu%[PHl$HHD$GtHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%{JHl$HHD$sHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%PHl$HHD$sHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%{HHl$HHD$'sHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%{HHl$HHD$rHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%{EHl$HHD$grHD$fLl$M9,$uI$$Mf MuLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%EHl$HHD$qHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%[IHl$HHD$qHD$fLl$M9,$uI$$Ld$M;fHH$H$Mf MD$H$HHl$Hl$HmJH $HL$xH$Ht$DHl$Hl$=HmHL$xH$H$H$fHl$Hl$HmH$HHD$pH\$xnpHD$pH\$x@L$M9,$I$$DI;fv2H Hl$Hl$Mf Mu@H\$0HL$8VHl$H HD$H\$HL$oHD$H\$HL$Ll$(M9,$uI$$I;fv)HHl$Hl$Mf Mu%JHl$HHD$goHD$fLl$M9,$uI$$Mf Mu@Ll$M9,$uI$$I;fv)HHl$Hl$Mf Mu%JHl$HHD$nHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%DHl$HHD$gnHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%JHl$HHD$nHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%BHl$HHD$mHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%BHl$HHD$GmHD$fLl$M9,$uI$$I;fv)HHl$Hl$Mf Mu%?Hl$HHD$lHD$fLl$M9,$uI$$Mf MuLl$M9,$uI$$HHl$Hl$HD$ H\$(EWdL4%5Hl$HdL4%H(Hl$ Hl$ Mf DMu0HD$0H\$8HL$@H|$HEWdL4%赂Hl$ H(Ll$0fDM9,$uI$$I;fvCH Hl$Hl$HHHH0fH9KuHxH9{u HH%1Hl$H HD$H\$kHD$H\$HH9 u HHH9KuHHH9Ku Kf9H1HH9 uPHHH9KuFHHH9Ku<Kf9Hu2HH H9K u(HH(H9K(uHH0fH9K0u HH8H9K81ɉ1I;fviHHl$Hl$HeD[LH@)H xHH :H [=du HSH=JfHl$HLjHHl$Hl$H\$(Ht$@Mt&HHHILHHR1E1Hl$HE\HIfDH9I93DLXDM9ID\IM LPfM9DT0M MIA?E:L9F MQMI A?FL9E\MQMIA?F$'L9iEdMQA?E;L9$ALI)MH9DIIuLX@L9THI LIA?A4:L9B4 IAHH ?H9ATIu4@ft_IAH9v|ATIA@H9v`AT8Iu2IAH?7H9v:AT@tIAH9vATHl$HHl$Hc[VQLLDLH9H1L)L!LLLLLLLI;fqHxHl$pHl$pH$LLXMuH$Hx0~ 11:1LLHl$pHxH|$HL)L)IHH?I!Ll$hK\LLHL$XHT$PHCfH},HHIHL IORIL)MI)HIIAI9=H|$HH\$hL\$8HFHV8HT$`MIHIHLHHT$8HHHHHHH$LFHF M@H\$`HѿAH$H=uHH Hx訆HDHu<$PL\$8MHL$XfI9JHD$PHl$pHxHp(fH9tHsH$HL$XHT$PHH0H 11Hl$pHxL胊HѺLH+F\(H@0HH9~"LP0I}DIrDH9H)H)IHH?H!L;Hx0HT$@HL$XLT$PL\$hHPHX8H\$`Hp(HAMHrH$LRHB MRH\$`AH$H=juHH Hx)HHu&H@0H|$PHL$XH\$hHT$@D>HD$@Hl$pHxH11Hl$pHxH3LйfHD$H\$HL$H|$ cHD$H\$HL$H|$ SI;f\HHHl$@Hl$@H8@HH0HHHD$PHPHX8H\$8Hp(IAHHHT$PLRLZ0A@u0LIMCHHIH4HHI?L)-MCHHILJK4 HI?L)HHwbHQHA HRH\$8HH|$PH=uHOHWHHVHHG0HHH_Hl$@HHHHD$PbHD$I;fv;H0Hl$(Hl$( b"HH1He]3Hl$(H0HD$aHD$I;fH8Hl$0Hl$0H\$HHt$`D$1HMfHM9E 2MZFd@AtH_Dd뱐A tA uHL\$(D@E9uH$L9qLT$hL)IHH?L!L$;LLLT$H HT$hH@HuIH$H$L$L$IIIH$H$HH$HHHH$HĘIMMMMIMI)ILL)HLjM9L9tHT$`Ll$xL$L\$XL)H?L\$`L!DF\@DdFd @DlFl(@D|F|8@DE E E Au A"AA AE AE fDAt@H$L9LI)I?I!AF<LzHT$xLT$XL$H$L9|LT$PL)IHH?L!L$;LLLT$`D;HT$PHHuIH$H$L$L$IIIH$H$HH$QHHHH$HĘL$H$L$H$L$L$L$HLMIIILHH$I9~^M9rrLT$xL)LL)IHH?L!L,LLIf;HT$xHH^HHHH$HĘLLLH$HĘLL|LH|L|HL|LL|LH|L|HL|LL[|HD$H\$HL$H|$ Ht$(LD$0LL$8RWHD$H\$HL$H|$ Ht$(LD$0LL$8I;fH0Hl$(Hl$(1HH@}H e   uݐHy8HD$ ǀ@=H+H9t@芄HD$ HHP@H5H9t&HH[HD$ HH51 L@HH@|=<u Hs H=ju1HH@}H Ӂ   uHy7HD$ǀ@=HDH9t@豃HD$HwHP@H5҆H9tHH腃HD$HK1 L@HH@|=mu H H=&uH_x7H5HHHHxDHl$Hl$~Hm1 HfDH@}uǀ@=u H H= tHw6H5 HHHxHHl$Hl$Y~Hm1 HfDH@} u2ǀ@=nu H H='tHl$(H0HHi誉HHi藉HpHi脉H]Hniq TI;fv"H Hl$Hl$EbHl$H HD$H\$SHD$H\$I;fH Hl$Hl$HHpHKH9uHD$(H\$0HH#tcHT$(HrH|$0H9wuOHBHO HZ H9Gu=t4H\$0S(HD$(f9P(u P*8S*uH0H0{1Hl$H HD$H\$RHD$H\$,I;fvUH0Hl$(Hl$(Mf MuOHt0H "HH1HM$Hl$(H0HD$[RHD$Ll$8M9,$uI$$I;fvnH(Hl$ Hl$ H\$81H\$8H9~@HL$HD$H4HHt$H;HHׄt HD$HL$HL$HHD$HHl$ H(HD$H\$fQHD$H\$lI;fHhHl$`Hl$`HD$pH\$xHL$HHtn=lt%Hk=Lu Hc H=ZErHD$PH\$XHT$PHtrIH@ LDƐHHE111 HE111HT$0LD$(H\$8H襤HD$@H\$8HL$(HD$0LHHHDHH\$@1HHD$HHl$`HhHD$H\$HL$PHD$H\$HL$I;fvaH0Hl$(Hl$(HD$8H\$@HHHH Hl$(H0HHHDHH\$@1HHD$8Hl$(H0HD$H\$OHD$H\${HD$HHHl$Hl$HD$ H9v-H@H9vH H9Hl$HHHِsHHsHHl$Hl$HD$ H9v.H@H9vH H HHl$HHHZsHHOsI;fv=H Hl$Hl$HD$(H\$0HHHH\$0HHD$(#Hl$H HD$H\$NHD$H\$I;fH@Hl$8Hl$8HD$HH\$PHL$XH|$`HD$0H\$(HqHrH9~ Ht$HDHl$8H@H H~H|$ HHHHL$XHT$(Ht$ HD$0HT$H\$(H|$`H9|E15Ht$HH^HHHL$XHT$H\$(Ht$H|$`AHD$0Eu`HD$H\$HL$H|$ MHD$H\$HL$H|$ I;fHHHl$@Hl$@HD$PH\$XH|$hHt$pH\$8HD$0-HT$8H HD$(H\$ HD$0H\$8Ht$pH|$hHL$LAIL9LII@L9~TLD$LL$(HL$H8HNLCHHLׄtHD$0HL$Ht$pLD$(HD$0HL$Ht$pLD$LD$H8HHL$(I0H\$ HHfD0Hl$@HHHl$@HHHD$H\$HL$H|$ Ht$(&LHD$H\$HL$H|$ Ht$(I;fH`Hl$XHl$XHD$hH\$pH\$PHL$xHD$HH)H|$8LGLD$@MI?III2LD$0HL;LD$0IHD$HHL$xH\$PH|$8LL$@M}ILL$(H3J< HHHHD$HH\$P1H|$(Ht$xLL$(IHD$HHL$xH\$PM}Hl$XH`HD$H\$HL$H|$ KHD$H\$HL$H|$ Ld$M;fHH$H$H$H$HD$xH\$pALL$xLT$pHt$PHALLIH)H ]H3H|$@DD$.T$/HL$hLL$`u)Ht$XLnHt$XHHD$xHL$hH\$pLL$`Ht$PL DHtDD$/EHL$hDH|$`EHD$0HD$xH\$pHL$hH|$`D HT$0HL$hH)HD$`HH)HT$/һHD$HtDDD$.Et?Hu9HD$xH\$pV:HD$HHL$hT$/H|$`DD$.DD$.H13HT$xH2HyHHփHL$hT$/H|$`DD$.HD$Ht)H\$pHHD$xzHHD$`T$/\$.PH\$pHHD$x1HD$8\$.HL$hHH)HT$`IH)LL$@IH9~2I9ˆT$/HD$xH\$pHt$PHL$8HHD$`T$/4I9ˆT$/HOHD$xH\$pHt$PLmHL$hHD$8T$/\$.H$HĈLϐH$HĈLH$HĈHD$H\$HL$H|$ Ht$(GHD$H\$HL$H|$ Ht$(I;fH8Hl$0Hl$0HD$@H\$HH|$XH\$(HL$PHD$ LHHHAH\$PHKHt$XHHt$HHL$H9~1HT$ H2HHL$H\$PHt$uHHt$H9}1HT$ H HуHL$H\$PHt$uH9|"HT$(H:HHHL$HHt$HAHT$(H HHD$Hl$0H8HT$(H:HHHL$HHt$HHt$ H9}kHHL$H9}1HT$ H2HH\$PHL$Ht$uHHt$H9}1!HT$ H HH\$PуHL$Ht$fuHT$(H HH\$PHD$1Hl$0H8HD$H\$HL$H|$ Ht$(EHD$H\$HL$H|$ Ht$(I;fH8Hl$0Hl$0HD$@H\$HH|$XH\$ HD$(HL$PLHHHAHD$PHHHt$XH%HT$ H:HHHL$HHt$HHD$PHt$ H9}pHHL$H9}1$HT$(H2HփHL$Ht$HD$PuHHt$H9}1HT$(H HHL$Ht$HD$PuHHl$0H8HD$H\$HL$H|$ Ht$(ZDHD$H\$HL$H|$ Ht$(I;fHPHl$HHl$HHD$XH\$`HL$hH|$pHD$@H\$8Hq1"HT$ HHD$@HH\$8LHt$(DH}HT$ H9H)@H2H H~H|$0HHHHL$(Ht$hHH)H| HD$0&HL$pIH)HdHOf1Hl$HHPHHt$(H9E13HH^HHуHL$hHT$ H\$8Ht$(H|$pAHD$@EuD+1Hl$HHPøHl$HHPHT$8H HD$H\$0HL$HHt$hH|$(LD$pI9HL$HT$@H2HYH\$0HքuHt$hH|$(LD$pvHT$8H HD$H\$0Ht$hH|$(HD$0HHD$HT$@H HXH\$0фuHt$hH|$(DHD$H\$HL$H|$ AHD$H\$HL$H|$ I;fHHHl$@Hl$@HD$PH\$XH)H|[HL$`H|$ H\$8HIIDHH@MH|$IHHL II< NIOIN$HfH2H$LT$@L\$PLd$8HD$`H\$XHQLLQK4LD$0HHD$HHL$@HQHqH\$XHLD$0HHD$`HD$@HT$PLJL$K HI4H\$XH|$8LD$0HD$`H\$XH|$HLT$@IHD$`HLLLD$0LHL$0Ht!H uHl$hHp1Hl$hHpûHl$hHpHD$H\$HL$H|$ >HD$H\$HL$H|$ UI;fH8Hl$0Hl$0HD$@H\$HLD$hHD$(HL$PH|$XHt$`LHHHAфtHt$hHHD$XHL$P HD$PHL$XHD$ HL$HT$(H2HHD$`քtHL$hHHD$`HD$HD$HT$(H H\$ фtHL$hHHD$ HD$Hl$0H8HD$H\$HL$H|$ Ht$(LD$0=HD$H\$HL$H|$ Ht$(LD$0I;fv`H0Hl$(Hl$(HD$8H\$@H\$ Hw.HL$Ht$H;HHHHL$HHt$HH\$ H9Hl$(H0HD$H\$HL$H|$ =HD$H\$HL$H|$ hI;fH8Hl$0Hl$0HL$PH|$XH\$HHD$@HQHVH9~ HT$ HMHl$0H8Hp(HJHL$(HHHT$PHD$HHt$@H|$(HHH\$HHt$ H|$XHT$(H9|E16HT$Hp HJHHHL$PHT$H\$HHt$ H|$XAHD$@EtDMHD$H\$HL$H|$ ;HD$H\$HL$H|$ I;fH@Hl$8Hl$8H|$`Ht$hH\$PHD$H3HT$HHr(HD$PH\$0HL$(HD$HH\$PHt$hH|$`HL$HQHH9LAIL9~bHT$ LD$0HL$HP HHT$hIH)DHjHW1Hl$@HHHHT$0H9E15Hp HJHHӐփHL$`HT$0H\$XHt$(H|$hAHD$PEu51Hl$@HHøHl$@HHHT$PHr(HD$XH\$HL$8HT$HHt$`H|$0LD$h@I9HT$Ht$PH~ HJHL$8HD$XHׄuHt$`H|$0LD$hoHT$PHr(HD$XH\$ HL$8Ht$`H|$0HD$8HHD$ HT$PHr HHHL$8HHD$XքuHt$`H|$0HD$H\$HL$H|$ 0HD$H\$HL$H|$ I;fHHHl$@Hl$@HD$PH\$XH)H|cHL$`H|$(H\$XHD$PHHHDHH@HH|$ IHHL II< NIOIN$HDH2HL$xLT$@L\$PLd$8HD$hH\$pHQLLQK4LD$0HHD$HHL$@HQHqH\$pHLD$0HHD$hHD$@HT$PLJLT$xK HI4H\$pH|$8LD$0HD$hH\$pH|$HLT$@IHD$hHLLLD$0LHL$0fHt!H uHl$XH`1Hl$XH`ûHl$XH`HD$H\$HL$H|$ -HD$H\$HL$H|$ YI;fH8Hl$0Hl$0LD$hHD$@H\$HHL$PH|$XHt$`HP HH҄tHT$hHHD$XHL$P HD$PHL$XHD$(HL$HT$@Hr H\$`HD$HքtHT$hHHD$`HD$HD$ HT$@HR HHL$(HD$H҄tHL$hHHD$(HD$ Hl$0H8HD$H\$HL$H|$ Ht$(LD$0+HD$H\$HL$H|$ Ht$(LD$0DI;fv`H0Hl$(Hl$(HD$8H\$@HW3HL$ HT$Hp(HHHHL$ HHT$HHD$8H\$@H9Hl$(H0HD$H\$HL$H|$ !+HD$H\$HL$H|$ hI;fHHHl$@Hl$@H\$XHL$`HD$P15HT$0HHDHT$0HrHD$PHL$`H\$XHHt$0H9}HHH|$`H\$XHD$PHH9~HHL$(HHHL$8HE1uLH9~LHH@HD$PH\$XHt$8H|$`Hl$@HHHL$0I<HLgHT$(LD$0I PHD$PH\$XHt$8H|$`DH9}HD$H\$HL$)HD$H\$HL$Ld$M;f)HH$H$H$H$H$HH)HQH$IH)@HuHI4HH<2H9~ IL)I IIHHLT$xLL$pLD$h2H$H$H$LD$hLL$pLT$xHH$H|$(H9~EHt$0H 7HHL$`HP I)IHL҄t HD$`H|$(H|$`HHD$0|I)LL$XH9~?L9}:HHL6H$H$H$H|$(LD$hLL$XLT$xH9}1DL9}'LsH$H$LD$hLL$XLT$xM9}M9~LLLƐ;H$HĐH$H$HH$HL$HH9~uHT$8H<HH|$xL@ HHHAЄt HD$xHL$HHL$xHHD$8HP(HNH$HHH$HL$HH$H$H9H$HĐH$H$HH$HT$PH9~vHt$@H<2HH|$xL@ HHAЄtHT$xHHD$@HD$xHT$PHP(HqH$HHHH$HT$PH$H$HrH9|H$HĐHD$H\$HL$H|$ Ht$(J&HD$H\$HL$H|$ Ht$(I;f}HhHl$`Hl$`H$H\$xHD$pHH)H)LH|$8H9t=Ht$}IH)HT$X1IH)HT$PM 0I)LL$@1H)HH)HT$H1@HL$ Hx(LL 1HLLHL$ HHD$pHT$HH\$xH$H|$8H9|Hl$`HhHL$(Hp(H<N HHLHL$(HHD$pHT$PH\$xHt$H|$8L$LL$@H9|GHL$0Hp(H<N HHLHL$0HHD$pHT$XH\$xHt$H|$8L$H9|H)HD$H\$HL$H|$ Ht$({$HD$H\$HL$H|$ Ht$(f;HH,$H,$Mf MuHt H@H,$HLl$M9,$uI$$HHl$Hl$Mf MuOHtDHPH0H9s(HH9sH H9Hl$HHHHHHHD;Ll$ M9,$uI$$HHl$Hl$Mf MuOHtDHHpH9s*HD(Aw H%HAHːL$MtL$M9tL$L$L$H$LJMH\$PL$L$MM)M9| HL$XH9L\$`J jHHL$hH PL%H$HL$`H9HHLH$H9uH$HL$XH9*H$"FH$HL$XH9H$Ht$`H$LD$hL$H$H\$PDD$HL$L$Mt fM9t L$L$N L$H$M9s*LL$xLHH5OLLL$xIIHL$XLd$xL\$pH$JH$Hf;EHT$pH$HT$xH$H$H$\$H|H$Ht$XH|$PH7H$DH9H)HHH?H!H$HH$HH$tHL$xH$14HHH$HH$HL$xH$HT$p@H94}HzHHHWHH$H|$pHH‰х|=L$fMtL$M9tL$L$H$HL$H$H9s/D$DLH5FMAH$H$ID$DH$BDH$H$HHH$H9wHH$HHtLHKHa0JO:HhKHI0{J9HOKH@0cJHHT$`H$HT$hH$H$H$H$HHH$fH9wHH$HĸHt6H/FH+CEHH4HFH*%EHEH*EH4HD$H\$HD$H\$I;foHxHl$pHl$pH$H$HTHDH9H$H$H$H$H9="]|kH@~11@t$/DADD$-HH)H\$hLKLL$8E1E1DH$H\$HL$H|$SEWdL4%HD$ Hl$pHx1@t$.DADD$,HH)H\$hLKLL$0E1E1HHl$pHxHHHOt 1Hl$pHxHHl$pHx H$H\$L$TEWdL4%HD$Hl$pHx1Hl$pHxMM9L9<L\$PE$A8@L9MbM9Ld$`L)HHH?L!HH$HT$@t$@SEWdL4%HD$fHgHt$`L0H$H$H$H\$ht$.H$DD$,LL$0L\$PMbL9LLd$`ElE8M,:L9#fDM9 LT$@HHH?L!H4HHH3NH$H$H$H\$ht$.H$DD$,LL$0LT$@L\$PLd$`IMIIM9aM9XL)HZHHH?L!HHHGH}HHl$pHxHL$`HHl$pHxHD$@Hl$pHxHHl$pHxHHl$pHxLL0L[0LH0LL0Lf;0LH/MM9,@L9dL\$XF$A8@L9<MbM9"Ld$`L)HHH?L!HH$HT$@t$@QEWdL4%HD$fHHt$`L0H$H$H$H\$ht$/H$DD$-LL$8L\$XMbL9tLd$`FlE8M,:L9KfDM90LT$HHHH?L!H48HHHKH$H$H$H\$ht$/H$DD$-LL$8LT$HL\$XLd$`IMjI?I=IMIM9TL)HHHH?L!HH$H\$HL$H|$NEWdL4%HD$ @H|HL$`HHl$pHxHHl$pHxHD$HHl$pHxHHl$pHxHHl$pHxLL[.L-LH-LLf;.L-LHh-HD$H\$HL$H|$ HD$H\$HL$H|$ UI;fH(Hl$ Hl$ HL$@H|$HH\$8HD$0H|KHT$8DH9waLD$HIL9rIL)HHH?I!HT$0J HþHHl$ H(HD$0H\$8111Hl$ H(LH:-H,HD$H\$HL$H|$ HD$H\$HL$H|$ @I;fH8Hl$0Hl$0HD$@HL$PH\$HH$H\$HL$D$ MEWdL4%HD$ H}HL$HLL$@IL8~%L@HL$HL9LL$@FTA t HL$HLL$@IHXHT$PL9rgH\$(LLHH=מHt$HHT$(H9r.LD$PI)H)MII?L!LT$@I<MHl$0H8HH+L+L@*HD$H\$HL$HD$H\$HL$I;fH0Hl$(Hl$(HL$HHD$8H\$@H=H|%H=H\$@H诘HL$@HT$811HD$8H\$@HL$HHl$(H0HfH9~<@ t@ tH9v+@<0HH9r HHl$(H0HHD{*H)HD$H\$HL${HD$H\$HL$L$ M;f H`H$XH$XH$hH$pH$xHHH!H$pHHLH$hH$xL LLI) III?AMIL9}E1JHL$xH\$hH$LLFHL$xH$pH\$hH$hH$xAH$Et5LhMHL9L)LQMII?M!L)NLK,H=+H5,L- EMIILLL8H$H$PH$L$HL H9|{IH)I9MI)IH)H?L!L$L9t1VL$HL$XLLLDHL$XH$H$PL$L$H$ I1D$HI)L9YL\$PH$HHH$@=RuH$HHPHxH$H#1H$HL$PH$@H_=RuHd"H$H$H$PwH$@LJMtM E1MunH *L L$HrIII?AK HLL$`I9}1H$CH$@LL$`tLI1GLL$`H=H5LH$LHL$pHLH$@LL$`H}LD$pLH$M9LL)L\$pMM)MII?M!L$ML=IHHT$PIL9}MLL/OH$L$LM)L$L)H$LII?M!ML$L9~1wH$L$ LH$HMBH$H$@H$H$LL$`L$L$ Ld$pL$L$H$HRML-@L9L$I)L$@M9AL$M)I)I?LL$M!ML9t1VLH$LxAH$H$@Ht$`H$L$L$Ld$pH$L1҃ LMt MLLHHHtLD$pHt$`H$XH$HT$pH9[H$HHH$(H$H$HTk@uH[HHH?H=HrHHH[HT$8Hj6HH@{H|$8H$@Hz Hz(=NuHBLRHLhHHjHZHH$(L$L$HLD$pHt$`H$F1H$hH$pH$xH$XH`H$@H$H$H$HHL$pHD$`H$HH*H$H$L$HkL lLmHLMoELD$HHt$@H$H$H$HL$HH$H\$@HH1H$8H$H$@HrH$0H$1H$D[HHHoH$0A,H$HP=LuH$8HHH$8H$@HV(H9HF HnH$L:HHHL$`H9r}L)HT$pL)HHHH?H!H$HHYHH$@HHLH$XH`1H$hH$pH$xH$XH`'!H@ LL !L!LL 1 HL HL LH 1@ HD$H\$HL$HD$H\$HL$H@I;fvwH8Hl$0Hl$0HLHDL9sLL[JJ\NTL9s*L IJIHLL#HHL$XHHHL$`HH=Du H$HHH$uHL$HHH HL$PHH(=Du HL$xHHHxHL$xAH$HH芥H$H$(H0HD$H\$HL$;HD$H\$HL$L$pM;fHH$H$H$H$ H$0H$8L$H$H$H$H$H$Ht r HL ";+?H$H$H$H$L$IHH$H$LL$PMtA r IL"QHHL>H$H$H$L$LL$PL$IHH$H$M9g HHLFI H$HʃLIDI HL$xHJB$ȐH$H$H΃Ht!T$7H$H$HT$7H$8t0tH$HHH$H1H$HHw0Hu H$H YH H$H ADHuH$H (Hu H$Hc H H$H H$H$Hw,Hu H$HWH H$H>HuH$H*Hu H$HcH H$HfH9|)~H$H1H$HHH$HH w?HuH$H jfHu H$ UH  H$ >H uH$ ,@H u H$H H  H$H H$H$@H w=Hu H$HgHu H$TH I H$=H u H$+H u H$HH  H$HH9r)vH$H1H$HHH$HH uH$ZH_ H$H$H uH$ ZfDHH$ f.u{ H-f.u{f.v Hf.v1H$HHuH$IZZH#H$IH$HuH$YZZHH$Yf.u{ H.f.u{f.v Hf.v1HuOf.u{ H.f.u{f.v Hf.ːv1H$HH$H1H$H$HH$H$L$ H$H$H$V"HD$hH$H$H$4"HT$hH9w)sH$H1H$HHH$HH$HH$H$HH$H$L$JdH$H$H$eDHt r HH 7@HtH@Htq=J^t%HI^=;u HA^ H=8^ H$H$H$HtrIH@ LDƐE111E111H$LD$8H$H$H$H$Ht r HH6HtH@Htt=s]t%Hr]=;u Hj] H=a] H$H$H$HtDJEAMIA MDِE111E111H$HL$8HHMH$f{HtH$HH$H$H$H$H$H$H$H$H$THHIH$H$H$H$HH$HH$HH$HZH\$HH$Hʃ@HuH$H2HR+H$H$HQ4HHH$H\$HHT$@H$HH)H|MH$H\$HH$H|$@b)fH~H$H1H$HHH$H1H$H$HHD$pH$H$H$HT$pH9w)sH$H1H$HHH$HHH$HHD$`HH$HD$`H$HH$H|$`fDH9H$H$H$H$H$HL$xH|$`H$H$H$HHIH$H$HL$xD{H:H$H1H$HHD$XHH$HD$XH$HH$#H|$XH9H$H$H$8H$H$HL$xH|$XH$H$H$HHIH$H$HL$xHBH$H1H$HH$H;H@H ϱHH$HHHHNHǥH@H HHL$xHHHH]NxH$HH@H HH$HHHHN7HPH@H \HHL$xHHHHMHUH@H HH$HHHHMHH@H HHL$xHHHHvMHH@H HH$HHHH=MXHqH@H aHHL$xHHHHM"HL$PHH$ѹHH1H3ΠHH@HD$H\$HL$H|$ Ht$(LD$0WHD$H\$HL$H|$ Ht$(LD$0I;f5H Hl$Hl$HD$(H\$0H|$@Ht$HHʃHL$HwHyHv*HtHvHu H;H rsHHLALD$@IwIPHv/ItDIvIu H>I rsH6Ht11Hl$H øHl$H ÐLALD$IwIPHv$It]IvIu H>IuA rsH6HtHHl$H 1Hl$H H8H@H /HHL$HHHHJHǡH@H HHL$HHHH]JxHH@H æHHL$HHHH'JBHD$H\$HL$H|$ Ht$(LD$0HD$H\$HL$H|$ Ht$(LD$0xI;fHHl$Hl$H!|H@H pHH H +P=$1u H#PH=PfH{H@H sHH H O=0u HO H=OH{H@H HH dH O=0u H}O H=tOGH@{;H@H ܣHH H [O=D0u HSOH=JOfHzH@H jHH H N=/u HN H=NHl$Hf[I;fvsH(Hl$ Hl$ \$8HD$1ɻHtHHHl$ H(HH H T$8HHEHD$HHHl$ H(HD$\$9HD$\$jI;fvjH0Hl$(Hl$(H=s&HHHV2H\HHt Hl$(H0HH賊HH1H{ZHl$(H0HD$HD${I;fH(Hl$ Hl$ H1HϸHt[Hwu?H HGH uH |H}1HuH sHtH™H H11HHHl$ H(HD$HD$NI;fH0Hl$(Hl$(HHHøHHtfHD$ HwuHHHHHH!HHH tH\$+1Hl$ H(HT$HC肻HT$HH\$HHuf(HT$HC PHL$HHH\$HHHuɸHl$ H(HHRHD$zHD$I;f%H8Hl$0Hl$0tHHHHH HHHD$@HL$(Ht$H\$HT$ LH8r~fHuIH HHu~L;LtbMILILI9@f@tIt#HHL$(HT$ H\$Ht$LL$@노Hl$0H81Hl$0H8HHH~HHD$\$#HD$\$I;fH Hl$Hl$tHHH'HH HHHLH8HthHt_IHH!LJH)HHLEHHL AEtHtLL$HθLL$AIHl$H HjH{HD$\$ HD$\$fI;fvyHHl$Hl$HHfHtBHQHHHtفHuH Hl$H11Hl$HHH?HD$WHD$mI;fv7HHl$Hl$HD$ 1t HD$ Hl$HHD$HD$I;fHHl$Hl$HD$ }uH\$(HmHDH\$(HC3HtmHwu>H HEH uH iHjf-HuH aHbHDH LHHHHl$HHL$ H11Hl$HHD$H\$HD$H\$ I;fH Hl$Hl$HDHL$8ΣHD$HCHu11_HuwL$8tH 7H7@H GH0fDHuH CHDHu,H }7H~7HHHl$H 11Hl$H H}(HD$&! H'H;HD$H\$L$HD$H\$L$I;f#H Hl$Hl$HDHL$8HD$HCHu11_HL$8tH [6H\66HHHl$H Ha蚨H@!H WHHHvHl$H OH{;'HD$1% HHaHD$H\$L$D[HD$H\$L$I;fvpHHl$Hl$H\$(Hu ;fileu@2@t1HD$ HHHHHt HL$ A,Hl$H@,11Hl$HHD$H\$HL$@|$ HD$H\$HL$|$ XI;f~H Hl$Hl$HD$(HHHtH貟HL$(HAHHH HXHHD$H\$HL$(HAH(H茲HD$H\$Hl$H HD$HD$dI;fH Hl$Hl$HD$(;tXHD$(HHHtHD{HD$(HL$(y,uH\$HD$HA(ӰHD$H\$Hl$H HL$(y2tH m3Hn3H HHHHl$H HD$HD$1Ld$M;fHH$H$IL$H$H$H$H$D$'HD$(D|$x1.tH$11,H$x2tH2H52H/H5HD$HWH$H$H$H$D$'HPHT$XH2wHHu'H$L$L$H$1HD$(HD$xH$D$'H$HHD$(H\$xH$H$HĨHD$(HT$xH$HD$(HHH$HĨL$H$HLHD$@Ay0t!MI)fI@~ H@MLH9H9HD$@MALD$PHH)H|$8H)HL$0IHH?H!H>H\$`(HD$HHL$hHH\$pHt$@LHIOL$@I9Ht$@H9t17HHH |HL$hHcH\$pHt$@L$HD$H@trL$IytkAI2HD$XwjHt)HHt$@L$L$HHHD$H)HHt$@L$L$jL$HHPcHL$0H\$`LD$PL\$8LLHD$HH\$pHL$hH}DH9HHH uH/H /Ht$(HD$xH$D$'H$HHD$(H$H\$xH$HĨHt$(H\$xH$D$'H$HHD$(H\$xH$H$HĨHt$(H\$xH$D$'H$HHD$(H\$xH$H$HĨv1KHD$(H\$xH$H$HĨHD$H\$HL$H|$ HD$H\$HL$H|$ I;fv*HHl$Hl$Mf MuHBzHl$H Ll$@M9,$uI$$I;fHHl$Hl$H!YH@H ^HH H [-=$u HS-H=J-fHXϟH@#H HH H -= u H- H=-HX腟H@ H mHH dH ,= u H, H=,GHl$HxHH,$H,$Mf Mu HtHI H,$HcLl$fDM9,$uI$$I;fv"H Hl$Hl$3bHl$H HD$H\$ɼHD$H\$I;fviHHl$Hl$HEWD;H@ H kHH H +=D u H+H=+fHl$H,I;fvuH(Hl$ Hl$ HD軝HD$ HHgNH\$HC HC = uHHvHHl$ H(D蛻vHHA8HY@I;fZH`Hl$XHl$XH\$pHt11H+H5+H HD$hHL$xHHfHHLHT$xH9tH~*H5*11HD$8Ht$PHT$0H\$(HL$HH=H9t1-HHH UHL$HHT$0H\$(Ht$PHD$8@t4H|$hLAxQt*HD$8HL$HHT$0H\$(Ht$PH|$hH|$hHH)H9)t1Ґ$HHH HL$HH\$(H|$hHD$8H)H9)u.HHH tH)*H **f HL$HH\$(HL$@H\$ H[H@H =UHHL$hH HQ8HI@HH=^ uHP Hxf;HT$ HP =; u HT$@HP(Hx(HT$@HaHHD$8HHHl$XH`1HHHl$XH`HD$H\$HL$H|$ HD$H\$HL$H|$ jI;fvUH0Hl$(Hl$(HL$HH\$@HD$ XHu t1H\$@HL$HHHD$ OHl$(H0HD$H\$HL$QHD$H\$HL$f{I;fH8Hl$0Hl$0H\$HHH|$XH\$HHL$PHD$@HuHˆT$'H!o{HD$(HOjHL$@HHf@0HT$PHP@={u HT$HHP8Hx8HT$HPT$'PQ=Qu HT$(H H|$( HHt$XfHtHuA HA@EtQHu@P1HDD$%HȻ;HtHT$( HT$(H2FPAt$%D!HL$@DAE11D$&H2HjPDHeDHt/T$&t&HD$@1HtHT$(HT$(H2FPHT$(HHH H= 6HD$(Hl$0H81Hl$0H8HD$H\$HL$H|$ HD$H\$HL$H|$ fI;fHPHl$HHl$HHHD$XHPHHtqH DHtEHT$@HHȲ2=luHL$@HH|$@1DHD$X=?u H@H HxH1SHH K$H99$u-H\$8HD$(tH]%H^% H\$8HD$(HD$(H\$8H蔖H@H OHH\$XHK8HS@HP=uHH HxYHT$(HP =yu HT$8HP(Hx(HT$8NH  H\$X11HD$0HL$ 1H14HD$ H\$0Hl$HHPH?HxHl$HHPHD$ HD$"I;fvHHH,$H,$IH &H &=u H%H=%f{H,$H譳I;fvRH(Hl$ Hl$ D|$H\$WHu HL$H9L$tHL$H\$Hl$ H(CI;fH Hl$Hl$H 9#H*#H#=u H # H=#H &#H#H#=u H # H=#H "H"H-#=u H %# H=#OH "H"H*#=cu H "# H=#H L"H="H"=/u H " H="H Y!HJ!H"=u H " H="H H׫HP"=u H H" H=?"H{LvH@H #HH UH f"=u H^" H=U"8HHY D=Du HH=fH<H[ c= u H H=H<H[ -=u H] H=THK胒H@7H HH bH !=u H! H=!EH>K9H@H HH H 9!=Bu H1! H=(!Hl$H ,I;fv|H Hl$Hl$HD$(H\$0ftMHT$(HJ@Ht$0H^8HB8H9N@u0HzHH9~Hu&zP@8~PuzQf@8~QuRR8VRu,1Hl$H HD$H\$華HD$H\$D[Ld$M;fHH$H$H$H$H$H$H$H$)H$ƀH$H$H$H$L$ɅH$HHH1H$H\$@H$HHHfHeHtgt3HHH9kHHw]H$H$H\$@HH$HHt$p1E1E1E1H#i軏H@Hx=u H@1HT$@HP=u H$HHHH$HH$HHH6H$H9HD$xH$HH$H2HL2H:kHT$xHB=!uHZH$HFHGŎHL$@HH=u H$HHH$HHH$HD$`H$(HD$`H$H$HH1HHLD$XLT$PL$H9JLH~.LLLfM9MdM9tL$DM9H|$HIH$JJLH691jHHT$PHHL$XH9r H$D(Aw H%HIH)LNfM9Ht$@LH)HIHH?I!J LHH :HD$@HPHL$8H9XHT$HD'HpDH92D HD$`H\$hHHL$0DTHILLHr LFIكLZFL9wLFL ZF L9DLHq AD0HMH~ MHL9w{IpfH9veAD+IpH9vKADUDHDL$'@L)HHHH?H!HH8T$'Ht$`VHl$PHXHHHHLHDLHLHHfHLLHLHf{HD$H\$ HD$H\$I;f<HHHl$@Hl$@LD$p@tH1҄tHۈT$'HD$PLP(xux tyLXLX IDIDD`HL$`t$lL\$(LL$xLD$pH\$8HLH0HL$`T$'H\$8t$lLD$pLL$xH|$(IHD$PDx t>LX Mu]@HuTHL$&@HXL$&HT$PJHl$@HHÀxtxtLXu x ux tIE1H&HuIHIDH uIHIBTIT$'LLHr$I݃I9LAM9wfI9rLoF<M9UF| CD0IIM~LM)M9fLx Hu2MEL9CDbMEL9CD0Hu5I9G*DA0tMEL9CD0PMfIHu;I`MME@DL9>GDMEL9!CD0MMOu*IpH9CDoIpH9CD0LƐtHVH9BD-9x tHVH9BD+x tHV@H9v`BD Hp@H9w8@t$%H)HHH?H!IHT$%Ht$PVHl$@HHHHD[HH萿HH腿HHzHHoHHdLHYLHNLALH6LH+LHDLHLLHLLLHLHH.L{0F|HLHD$PT$'H ,LoHHHH4HH)M9wLL{Ll$0I߃Lk0FlIH|$0LHLoM9wLLf;Ll$0I߃Lk0FlIH|$0LHLoM9wLLHD$H\$HL$@|$ t$$LD$(LL$0sHD$H\$HL$|$ t$$LD$(LL$0lI;fH0Hl$(Hl$(H\$@x tHL$HH\$@H|$PHp 1HHHHl$(H0HH9~HH|jH9DAsHD$ Ht$H)HHH?H!HH)HHH,HD$ HL$HHt$H|$PHH\$@H9rHHHHHl$(H0HH3讼HD$H\$HL$H|$ 4HD$H\$HL$H|$ I;fH0Hl$(Hl$(H\$@x tHD$8HL$HH\$@Hp 1!Hl$(H0HH9~<}Hz4HT$ Ht$HHHDHD$8HL$HHT$ Ht$HH\$@HH}H9rHHHHHD$H\$HL$3HD$H\$HL$@I;fvHPHH=ouLH谝H$HĈHD$H\$HL$H|$ F|HD$H\$HL$H|$ MLd$M;f#HH$H$H$$ƀHPLBHHLL9s6HT$XLLÿH583HT$XIIH$$fA%!L@HH=suLHԜwHPHH=[uL Hǐ蛘HXHHHHH9s9HпH5 H$HO=uHԖHHHXD)ƀH$HĐHD$\$DvHD$\$I;fv6HHl$Hl$ttvu H@nHl$HHD$\$L$rvHD$\$L$I;fv[H@Hl$8Hl$8HD$HPLT$7HLLP@1vL0AL7T$7LT$HARLHl$8H@HD$H\$L$uHD$H\$L$xI;fH8Hl$0Hl$0cU+OfU<H@ fXtLfbtcH@AH@ϾbL/A;H@ϾXL/Ao`dt2oH@Lp/AϹH@ϾdLE/A qtwvu;xPtu dH@ϾvL.A c@xt 1H@ϾxL.A. H@AHl$0H8HD$H\$L$|$DsHD$H\$L$|$I;fH0Hl$(Hl$(X6F"Et;FuoH@fwGt>Xt9Kfbt-e|9H@kGgt@vt"xuH@HD H@gH"Hl$(H0HD$D$H\$L$ @rHD$D$H\$L$ I;fHXHl$PHl$PbQv)Xt$bt]Qv@vt xC$HD$`L$pPKT$GL@ILLPM9sdH\$xD$hLLLѿH5@H|$`HO=u H @軑$D$hIIHH\$xL@CD(HH?HHH\$H@HD$`@KD$pH\$H$H|$`H_HSHOHH9s&H\$HHӿH5H|$`HH\$Hfi)HWHO=6uHD$GGKHl$PHXHD$D$L$H\$ L$(@pHD$D$L$H\$ L$(I;fHHHl$@Hl$@H\$Xq=Xtqu^H@&H@11IL +AfcstPvuxPt H@HH@:=xt /H@11IL *AH@Hl$@HHHD$H\$HL$|$ oHD$H\$HL$|$ Ld$M;f\HH$H$H$L$$H$qjXt;dtuqHD$hDH$H@HHHfUH@HIL )A1H1+sv&H$H$xPHPN LXL M9sKL$HT$`L$LLLLH5HT$`L$L$IIIL\$`LT$XL$ILL9H\$XH$H_HL$`HO=(u H$HH$ۍH$HtSHH9s9H5ytH$HO=ѽuH蔍H$H_D{1eHSH9s&HӿH5"fH$HH\$X(nilD)HWHO=`uH$H$HĨÐHPHLLXDI9sYLHLٿH5H$HO=uHŒH$$HIHH$HPBD[1QxHHH)=t.HiH=u HH=DH;H$H$H$HtDJEAMIA MDِE111HHLߋ$E1H$2H@HIL &A1H1n H@H$HĨHP@Lӹ 1Ld&AHHT$@HH$H$H$$H9HT$@DH~LXIL LhM9shLT$PLLLH5H$HO=uH׊H$HT$@$LT$PIIHH$LXCD#  HXHHHHH9s9HпH583H$HO=uHTHHHXD]DHHD$HHH$H$L$I9HD$HH~LOMQHOLL9sNLL$`H\$PLLӿH5H$H$L$LL$`IIHD$HH\$PfC , LWHO=uL9L̊,H_HHHOH9s0H5H$HO=_uH#H_D}tHD$H\$HL$H|$ t$(LD$0LL$8.iHD$H\$HL$H|$ t$(LD$0LL$8GLd$M;fHH$H$H$H$H$$HLGIvLGfDIv HHT$`H$H\$xHHH谝$d)@X,b#dD&p6opH$JLHHDvH$zPHD$@HZHLHJH9s>LH5=8H$HO=uHYHIHD$@HZBD(HL$`Ht rH ͖H\$xHD$xH$HHHH$HQH4HyLH9s?H\$HHD$hHT$XLHHHH5HT$XIHHHD$hH\$HH|$XHt$PLD$pLHHH誔H\$PH$HXHL$XHH=u HT$pH HHT$ppLCL9s*HLÿH5HIH$H\$Pf)(L@HH=7uHfHH\$@Hu`IXH9s)LD$XHпH5LD$XHH$fBniBDlHXHH=͵uHH讆bH$HXHHHHH9s9HпH5H$HO=ouH3HHHXD)ZfHuHB@H覿<JLHH(xu1ɉHH$W H$H$HĐÉH$HĐHD$H\$HL$H|$ t$(dHD$H\$HL$H|$ t$(Ld$M;fHH$H$H$H$L$H$H$H$$H$HHH$fH=Ot7HN=uL$L>H=5L$L$H$L$H$HtRAуIHA LDҐE1E1E1E1LAI sMM|H$H_HSHOHH9s)H\$XHӿH5H$HH\$XHWHO=uH諂H$HĠH$KHD$HH\$pHWHDGPHT$gDD$oHGHHGIHWLBHOLL9s9HT$XLLÿH5HT$XH$IIHD$HH\$pfA%!LGHO=$uL舃$wFIL9s7LLÿH5{$H$IIHD$HH\$pCT%LLÉH$IIHD$HH\$pLGHO=uLIPH9s9LD$@LHӿH5H$LD$@IHHD$HH\$pC(PANCDNIC=HWHOL$N=uLyL9s-HT$XLLLH5~yHT$XL$IIHL$XLT$PLL$xIH$L裎H\$PH$HXHL$XHH=fu HT$xH HHT$xgLC fL9s*HLÿ H5HIH$H\$PH method:H4D L@HH=uH HDƀH\$HHL$pvDH$ƂHZHHHJH9s3H5LGH$HO=uHhHHZD)HD$gL$oHBHJPH$HĠ֔HD$H\$HL$|$ Ht$(LD$0S_HD$H\$HL$|$ Ht$(LD$0L$8M;fsHHH$@H$@D$+0H$Pwu;HXHH H @HH$Pv\$,HPHH HJHfHH$PzP_t$,qXtqt_stvt fxJHZHJ H9H$H\$PHRMHH$HD$8D$+H$PHQHY D$D$D$H5H$H$H$H$T$,$H$H$H$XuDHL$8HIH$Hً|$,HH$PED$+H$@HH+D$+H$@HHHH\$PH$f;HH$xHD$0D$+H$PHQHY D$D$D$H5NH$H$H$H$T$,$H$H\$pHD$XLuHHL$0HIH$xHً|$,HH$P{6D$+H$@HHÐD$+H$@HHHZHJ H72HuD$+D$+H$@HHH$HD$@D$+H$PHQHY D$D$D$H5*H$H$H$H$T$,$H$H$H$"fuMHL$@HIH$H$PH@HHHHH D$+H$@HHD$+H$@HHH$HD$HD$+H$PHQHY D$D$ D$0H5H$H$ H$(H$0T$,$8H$H$HH$0)~uEHT$HHRH$HyH$P|$,D$+H$@HH@D$+H$@HHH$PwD$+ʃD$+H$@HH调D$+H$@HHHD$\$YHD$\$@[I;fvBH8Hl$0Hl$0Mf Mu2HZHJz HBH5AHl$0H8sXLl$@M9,$uI$$fI;fvBH8Hl$0Hl$0Mf Mu2HZHJz HBH5AHl$0H8WLl$@M9,$uI$$fI;fvBH8Hl$0Hl$0Mf Mu2HZHJz HBH52AHl$0H8sWLl$@M9,$uI$$fI;fvBH8Hl$0Hl$0Mf Mu2HZHJz HBH5AHl$0H8VLl$@M9,$uI$$fLd$M;fHH$H$H$H$HXHP = uHH HwH@8=uDx($LP(LI1ҐwHx01wL‰HH$TujH$H$H$Ht H11HHȐH$H@HHHHH[H$HĘÃp=zt&Hy=u H q H=gvH\$pHL$xHT$pHtDBEAMIA MDАE111HL׾pH$HĘH\$XH$$HDSAl fDA\rRA#>wjAxu&HH9HQHHf1A#>bHH9KHI@A4Cu#H0H9HA\rRHH9H1AHPHH=xu LHmGHwHuH:fHMH(Hu H@HuHc H"HHӹ9%H w.HuHEHu7H (fDH uH uH H HH1ɉ  Z @@ YZZ˻@{g IaL HHH-rHH$PH$Ht rH7zH$XH$XH$`XHHH$HQH4HyLH9sVH$ H$H$LHHHH5DH$IHHH$ H$H$H$L$PLHHHwH$H$H_H$HO=ڙu H$PH H$PiHSH9s'HӿH550H$HH$(nilD)HWHO=rfuH 1i H_HSHOHH9s/H$HӿH5H$HH$HWHO=u H4 h' L$IHϋ$HHH$N xPDHt r H=xHHH8HHHH$HQH4HyLH9sSH$H$H$0LHHHH5fH$IHHH$0H$H$L$PH$LHHHuH$H$H_H$HO=u H$PH H$PngH$ fs L$`#s L$`M L$`MMtaHH9s@H5~H$HO=5uHfH$L$`H_D{LH$XHSH9s'HӿH5w~rH$HH$(nilD)HWHO=uHxfH$HÐLHMQLXL M9sbL$LLLٿH5}H$$L$L$IIIH$H$`H$XC map[LPLX= uL HMhgHHHzMH$HHpH$1ɐ{t1EHHH{HH$H$`H$X$L$H$@HHHlHσHwHtHtHt HH$LJILHJL9suH$`H$XH$LL˿H5|D{H$HO=ؔuHdHH$IIH$XH$`LJCD&L$IHً$HHH$HH$H$`H$H$X$rqXtqt@st xHt r L {sHHH諏IH$LL$xIIHHHHfDHH$HH$r>H$XH$`qH$HHH {'H$H1 H$XH$`CqH$`H$1HH$XH9ѯuH HSH[n "THHH[ H$XH9uH$`HHYHI H$`H$SH H$H$`H$H$X$H$L$xP)Ht r L qHHH IIHH$HQH4HyLDH9sQH$H$H$LHHHH5yH$IHHH$H$H$H$L$PLHHHoH$H$H_H$HO=u H$PHH$P;aH$Hu|L$`I8uuHSH9s,HӿH5xDH$HH$(nilD)HWHO=uH`H$HL$`HH9rHTH5OxJH$HO=uHH$H@[`H$HL$`H_D{H$XH$LHILLXM9svLLLٿH5wH$HO=uH_H$`H$$H$L$IIH$H$XLHCD[E1\HHIxP;Ht r H=nHHH*HHHH$HQH4HyL@H9sQH$(H$H$LHHHH5vH$IHHH$(H$H$H$L$PLHHHlH$H$HWH$HW=u H$PHH$P{_HH$`H$H$X$L$LHILLXM9siLLLٿH5uH$HO=uH]H$`H$$L$IIHH$XLHCD{1HHH$HH$XH$`H$"L$IPHϋ$HHH$IH$HH$`H$H$XH$HHHfqH$H9HH$zPtHZLCHJHL9s;H$LÿH5dt@[H$H$IH$f, LBHJ=uHqHHY\HaHZHHHJH9s;H5sH$HO=MuH\HH$HZD H$zOu zPdH$Ht rHikH$XH$XH$`艇H$HHPHHH $H$hH$pHt$Hl$Hl$fHmH$pH$hHH$LBN HJHL9sBL$H$H$8LH5rH$L$IH$8L$H$PH$JHHhH$H$H_H$HO=ӊu H$PH H$PZH@H9s0H5/r*H$HO=uHKZH_D:fH$H$H$HZHHHJH9s6H5qfH$HO=uHYHHZD};HHHLdL$IPHϋ$HHH$IML$IH$H$H$XH$`H$HHH$H$X$H$L$L$DHuLQTHHH&gH$`H$H$X$H$L$L$IH$@M9MLPILL`M9s~LLLH5FpAH$HO=uHbXH$`H$$H$L$L$IIH$H$XLPCD DHXHHHHH9s9HпH5oH$HO=uHWHHHXD]$HLbL$IPHϋ$HHH$IА;H$HH$HH$H$XL$`H$HH$uMH;LIeH$H$H$H$L$`IH$XI9H1LOMQL_L'M9scL$LLLٿH5rnmH$H$L$`L$IIIH$XH$H$fC , LWL_=uL'LW@H_HHHOH9s0H5mH$HO=3uHUH_D}ZH$H$H$@Ht$xHH$H$H$$IIH$H$@ H$HHHHHH$H$HHH$H9H$H$XH$`HH${_H$H w)HuHHuH uFzDH uhH u HZDH uHGHH.H`H@H HH$HHHHjKRIILI|$L$H$`HH$HH$H$H9qH$H$`HLJHzHH$L$HH$XL$AzPMZMcMjM:M9ssL$LLLH5VkQH$`H$H$L$HL$L$IIIH$H$H$XfC, MbMj=Zu M:DILIL*TLL@MZIM"MjM9sLLLH5jH$HO=uHRH$H$`H$H$L$HL$IIH$H$XMZCD# L$L$IPH$LLɋ$IH$HXHHHHH9s;HпH5iH$HO=uHQHHHXD:H$LJHJ L$I9=H$zPtUHZHHHJH9s3H58i3H$HO=uHTQHHZD}HZHHHJH9s7H5hH$HO=8uHPHHZD][LUHH@H AHH$HHHH.IfHbfH@H PHH$HHHHfHD$H\$HL$H|$ t$(LD$00HD$H\$HL$H|$ t$(LD$0I;fH(Hl$ Hl$ HD$0H9HHH48LD8L Z`L9uMAu Lָ.Hth=-t%H5,=u L$ H=QHt$LD$H|$HtAIHA LDE1E1E1E1AI|$Hw9IwIuI0!I0IuI0IuIc0I0pL9@I|$HwYI w%DIuI8.IuA8"A8I uA8I uI8I8HALMD ƉLLH@BfDHv11Hz11HHHl$ H(HHRHD$H\$HL$H|$ r.HD$H\$HL$H|$ HD$H|11HH9~#]uH~ 1һ1MH11 11ÄtH9uHSHXHйHX11HL@J4GH9}.<@0r$D@9wH@BHvH11HHHI;fH Hl$Hl$HL$8H9~1[tHH1Hl$H HD$(LD$PH\$Ht$HƀH)HHH?H!HH@t&H|!HT$PH9}HT$HHӹHl$H HT$(ƂHT$HHHD$Hl$H HHPHD$H\$HL$H|$ Ht$(LD$0d,HD$H\$HL$H|$ Ht$(LD$0I;feHXHl$PHl$PHD$`\$hHPLBHHLL9s0HT$HLLÿH5tcoHT$HIIHD$`\$hfA%!L@HH={uLHMw6IPH9s&LHӿH5cHIHD$`\$hB\ LȉL-HIHD$`HPHH=C{uLHLHZ H9s&HT$@Lȿ H5b衾HT$@IHD$`H(BADINDEI4fADX)HXHH=zuL HD;LHl$PHXHD$\$*HD$\$uI;f^HXHl$PHl$PHD$`\$hHPLBHHLL9s0HT$HLLÿH5aϽHT$HIIHD$`\$hfA%!L@HH=zuLHvKw6IPH9s&LHӿH5uapHIHD$`\$hB\ LȉLHIHD$`HPHH=yuLHKHZ H9s&HT$@Lȿ H5aHT$@IHD$`H(MISSINGI4AD)HXHH=AyuLHJHl$PHXHD$\$*)HD$\${Ld$M;fHH$H$H$L$ H$H$H$H$H$ƀ1E1'HLH$H$L$ LILH9 ƀIHLL$`L9H9JH9L9HT$XL)IHH?L!HLPO,LxLM9sQL$H$L$LLLLH5W_RH$L$L$IIIL$L$L$KHLjUH$H$HPH$HP=SwuH$HH$HT$XH9#HH$HH$HT$XH9HHH$H$H$L$ LL$`8H@HH@IH EZAL9~HT$XAvuL9AwLILLM9rL9DT$CLLLH5VH$H==vuHH$HT$`H9-HHEH$Ht$`H9HHH$H$HT$XH$H$L$ LL$`DT$CIIH$H$LOLDXLDXP@LDXKDXO@KL9 IJJLDHT$`HHt$XHH$L$L$IHHIHHLH$H9:m L$EA*t H9@H$H$H$ HH$sH$HGX_H@H_LK LWHM9sFH$H$LLѿ H5\H$IIH$H$I%!(BADWILDDTH)LOLW=(tuHCLOXM}ILOXGJGNL$IH$L$LHL$1CL$| 11H11 11HL$IrXARHt tAƂHsH9H9 EfA.tAƂHLL$LH$H92l L$EA*t H9@H\$xH$H$ HH$H$HG`_IH`f} HG`GIIH_LK LWHM9s?HL$pH$LLѿ H5ZH$IIHL$pH$I%!(BADPRLIBADPREC)L\LOLW=8ruHALL$xIH$L$LHL$1L$| 11H 11 u1LHL$HLuH$L$L$H$H9P EA}LH\$XH)HHH?H!I9H诶H$L$L$HAH$H\$XL$Ld$XA%u}IZHMIJH9s[LؿH5X莴H$HO=puH@H$L$L$Ld$XIH$IZBD%$AH$fH9mAwIHIMI9rH9D\$DHLH5P̳H$H=&puHH$H$H90HH?H$H$H9HHH$H$L$L$D\$DLd$XHH$IHD Avu'H9ARLARPABLARKAROABK fDH9HH$HHLLDH$HH$L$L$Ld$XLD@{H$L$L$Ld$XH$]LDH$L$L$Ld$XH$'L9H@HH@IHXHS HHL@H9sWH$LL$`LHӿ H5UױH$H$L$ LL$`IHH$H$I%!(EXTRAMAD HPHH=muLL9HHL>L9HfLM)IHI?L!HL)H$1H$HHHH9HL$PH$LLD$hLJL$HHXLSLXL M9s]H$LLLٿH5T賰H$H$LD$hL$IIIH$HL$PH$fA, LPLX=lfuL HLM+>IMHXLCLHLM9sUH$LLLɿH5TDH$H$IIIH$HL$PH$AL@LH= luLHM[=rL$L$H$Ht H=RK11HHfH$HQH4HyLH9sKH$H$H\$HLHHHH5SH$IHHH$H\$HL$H$H$LHHH.IH$H$HXH$HH=ku H$HHH$;H@H9s9HпH5lRgH$HO=juH:HHHXD=H\$hH$vBH$HL$PH$H$DHXHHHHH9s9HпH5QӭH$HO=0juH9HHHXD)DgLH0?HH9@DA%uHH9:DA#w&fDA u@MA#@L@A+u@KA-u@J@N@A0DPJADPNzHLAEK4ZH9EA0gA9]L@BIvAIZHS IJMH9s=H$LHӿ H5]PXL$IHH$H$I%!(NOVERM fADB)IRIJ=huML9LH$H$L$ L$L$L$HHH$HL$PH$HLAL$It1@LH*&HH$HL$PH$HL$L$H$NIIu HHOH$H$HH@H GHHL$PHH=AuH$HHPHxH$HH$HrHp HzpuBH HH"H$HGp=AuH_xHOxHHxHHH*11H$HĘHHHHHHH v\HtVHL$PHH$HH y Hj H9HyH_H _fDH$ s H$fms H$L H$IMuJHD$PH$H1FHHIH$H$H$a'H$H$111D$hD$pD$H$LAh@Mt%ML$hA@$pA@$H$H$H$LAhL$E1E1E1KH xH@H HHL$PHH=?uH$HHPHxH$HUH$HrHp HzpuBH HHH$HGp=)?uH_xHOxHH"HHH11H$HĘH$r>=*at/H`H"a=>u HaH=a{HR`H$HH$PH$HHtDJEAMIA MDِE111H$H$HHMH$I%11H$HĘHD$`H$XH$HHH$H$HQHHIH9r]H$HpH9rDLD$`M@H)HzHHH?H!H)HHH$XHAH$HĘHtHL$L$L$L$L$L$HȻ H$HH H HHHH$ZH$HQHHqH~H9qH$L@L9QH)H$H)HJH$HHH?I!J<H$HHH!A@H$H$H$H$HuHL$PHQHH$HH$HtELCHHIH$H$H$&#H$H$H$ D"1HHIHHH%]H$Ht/H$fH9HHL$L"1r L$E1H$MLfHtVH$DDT$OLZXL$Lb`L$H$L$L$LLHE1H$D$XH$H$H$ʧHH$XH$`H8H$XHR;H$Hzpu@HHHH$HGp=r:fuH_xHOxHHi HHHH$L$1111H$H$IHHH$H$H$H$Ht$hT$OL$hH$`L$Iy uGLȻ H$H$T$OH$Ht$hH$`L$hL$Iy  LȻ L$OH$HxxuqHH9ulHKH1@{HH$`L$hLL$hAHHH$H_ H$HH$H!HL$hHt rH*H$`f!H$`H$hI4HL$hHD$XHtH@H$XH$`H`SH$XH8H$HzptH$HHHHH$HGp= 8uH_xH$HHwxHHH$HHH@HTH UH=VH$H$`L$hLL$hE1!H H$HH$CH$H$`H$hH|$h@;HH$HH$bHL$PHH$HH HtH9Y H$H$HsH UH UDH$HH$HH$H$H$s=Xt0HBHX=d6u HXH=XfHH$8H$@L$8MtEHEAMIA MDِE1E11HLH$H$LAHH$DH$HH$HHHyHPHH$H$H$ɺH$pH\$p @ HtgH$H$H$D<HQH,HHHQHH@HHH$HHH!HH!H9H؄HH$HH$pHt$p1[H$HY=4uHHYL$La=v4uL$LaHyH$%L$La H$HxpuAH{H$HGp=4uH_xfLgxHLHH111趟=.Vt3H%H&V=3u HVH=VD{HH$H$ L$MtEHEAMIA MDِE1E11HLH$H$L0?HH$DH$(H$H$[H$xH\$x @@[HtzH$H$H$9HQfHoHHHQHH@HHHH$HHH!HH HHH9HHf!H$HrH$xHt$x1ٳH$HY=2uHHL$La=1uL$LaHyH$L$La H$Hxpu>H;H$HGp=1uH_xfLgxHLHH111R6=St3HeHS=G1u HSH=SDH2H$(H$0L$(MtEHEAMIA MDِE1E11HLH$H$LA r L HH$LK'IHIHHHD$XHtH@H$XH$`HY:H$XH+H$HzpuAHHHАH$HGp=+uH_xfHWxHHHHH$H$H$H$H$L$E1E11E1LL$hL$hH$`DT$OL$I{hHzU=~*uH$HBhH$1H$H$H$H$H$H$`H$L$LL$hDT$OL$L$hMchM|$ MD$IML$LHRM9L$H$L$LLLH5;mH$HO =)uHGfHOHHOHH$H$H$`L$L$IL$hIIH$H$H$MD$IIKTK=)uOIHMiLIShLD$PL=(uL$HLJHIHML$H)LLL$T$OH\$hLaHH LHH[HH HH 9HD$H\$HL$H|$ @;HD$H\$HL$H|$ I;ffHXHl$PHl$PH\$h#HD$`HL$pH\$hHH˹@HH HL$@H HL$HHL$@Ht H11HD$(HL$0HIHD$8HwH|$hHt$p1H|$8H_=G'uH HT$(HW=+'u HT$0HWHWHHHt$0:HHT$`HRHW 11H 7Hl$PHXfH~諒H11HHl$PHXHHH11HfHl$PHXHD$H\$HL$HD$H\$HL$gL$M;f"HH$H$H$L$H$H$H$H$H'MtA r Hd,HLL!H$H$HHH$H$H$D$xD$HHH膒H_H$xH$H$HtHRH$H$H$H!GH$xH%H$Hzpu2HHHH$HGp=%uH_x Hx11H$HĠD$H$0L$ L$(;n@HLLH H?H$"$@7H$ Ht rHH$0fH$0H$(H$H$D$xD$H$H$H$HH$xH$H$HtHBfHH$H$H$H~GH$xHB$H$Hzpu2HHHH$HGp=b#uH_x Hxa11H$HĠÀftnuHmtuHl H]pH$H$H$ Ht rH$0HDH$0H$(HjHH$H$H$HqH$HWH$HH=t"u H$HHH$EH$HP=B"uH$HPHxH$H$HHP H$Hzpu8HDHHH$HGp=!uH_x Hxf11H$HĠH$H$H$H$"&f@$H$ Ht rHH$0H$0H$(H$H$D$xD$H$H$H$HH$xH$H$HtHBHH$H$H$HGH$xHI!H$HĠH$HRHHHH$H$HĠH$0L$(L$H$f"tfR HH$H$$@aH$H$H$HփH@HH$ rHH$0H$0H$(H5HHHJHHHHH H$ rH$0HH$0H$(H$H$H$HQH$H˰H@H zlHH$HH=uH$HPHxH$H$HHP H$HzpHHHH$HGp=nu H_xyHxjkH:@u$H$H4RHHH?H=H4~HH$HH4RH$HHH`H$ H(:HH$HH$L$L$HJpHtJH$Hxp,H$HGp=u H_xHxDH$H9H$(H$H$ HIH$0@<H rH H$08H$0H$(HfH$HHH$H$H=:H9 :t1pHHH{ uH$H$H$1BH$(H$H$軡WH$H$H$u:HH1舡H$HHH$0H$(D!D$hH$H$H$ՈHH$hH$pH@H$hHf[H$HĠHt frH$0HH$0H$(HH$H$H$HQH$HJH@H hHH$HH=uH$HPHxH$@H$HHP H$HzpH HHGH$HGp=u H_xHxDH$0H$(HHH$ rH$0HH$0H$(H$HD$xH$HQH$HΫH@H }gHHL$xHH=uH$HPHxH$H$HHP H$HzpHHHH$HGp=tu H_xHxpq1H$H$蔞菅=;t.H~H;= u Hw;H=n;HPH$HH$PH$HHtDJEAMIA MDِE111H$(H$HHMH$0$H$Ht rHH$0H$0H$(H$H$D$xD$H$H$H$HH$xH$H$HtHBHH$H$H$HGH$xHSH$HĠn$;H$Hu ;null!MtA r H!HLLH$HH$H$H$D$xD$H$HHHH$xH$H$HtHBHH$H$H$HuGH$xH9H$HzpHHHH$HGp=Uu H_x`HxQRLAIQH; r HHLHHHHIH$0H$(H$DtD$EPL$Iu ;true>Iu;falsu {e&MtA r H!HLLL$HH$H$H$D$xD$H$HLHH$xH$H$HtHBHH$H$H$HGH$xHbH$HzpHHH!H$HGp=~u H_xHxz{L$t@ǐLAII&fEHt r HHLL$HH$H$H$D$xD$H$HL谀HH$xH$H$HtHBHH$H$H$HFGH$xH H$Hzp]HHHɸH$HGp=&u H_x1Hx"f!Ht r HHf HLH$H$H$HQH$H艤H@H C\HH$HH=uH$HPHxH$cH$HHP H$HzpgHHHϷH$HGp=,u H_x7Hx()@|$?HLHT$?L [.Iѐ=/4t/L fL '4=u H4H=4L 7L$XH$`L$XMtEQEAMIA MDE1E11H$0H$(H$LHMMN H$ rH$0HH$0H$( H$H$H$HQH$H褢H@H ^ZHH$HH=uH$HPHxH${H$HHP H$Hzp HHHH$HGp=Du H_xO HxD;< HL, fD-Ѐ $C MtA r HEHLLu HH$H$xHD$pD$xD$H$HH$s|HLH$xH$HT$pHtHBHH$H$xH$H GH$xHH$HĠ1H$PH$H$H$HʃH wLAIH @f[Ht H$08H$0H HHqHH@HHHHH!HH!H93H$ r HHH$( HH$PHD$HH$HYH$H"f۟H$H,^H$H$1萏H$HY= uHHHT$HHQ= uH$PHQHyH$Pf{H$HHQ H$Hxp HH$HGp=J u H_xU HxFG HH$(H$I* @uHt H$0AH$0H HHqHH@MMHHHL!IL HHH98H$ r HHH$(;HH$XHD$PH$HYH$Hp+H$H|\H$H$1DۍH$HY= uHHHT$PHQ= uH$XHQHyH$XH$HHQ H$HxpH:H$HGp= u H_xHxHH$(H$uvH&H$  rH5H$0H$0H$(HHHHN(HfH$HH$HtH$ ]H$ H zWf.v ff.M|f.;H$ rH$0HH$0H$(H$HHD$@H$HQH$HFH$HRZH$H$1趋H$HY= uHHHT$@HQ= uH$HHQHyH$HH$HHQ H$HxpHH$HGp=r fu H_x{HxlmH$0H$(H$JKDHH rH H$08H$0H$(HfH$HHH$H$L&H9 &t1-HHL{ H$H$H$1Ʉ$@Ht rHH$0H$0H$(HH$pHD$hD$xD$H$H$H$tHH$xH$HT$hHtHBHH$H$pH$HGH$xHMH$HĠHt rH$0HH$0H$(H H$hHD$`H$HQH$HAH@H nTHHL$`HH= uH$hHPHxH$hH$HHP H$HzpHHHDH$HGp=u H_xHxfHHHH$0H$(yHHH$D;HtKH$HxpHHH跫H$HGp=u H_xHxH$H$H$0H$(H${HH$ rH$0HH$0H$(;H$`HD$XH$HQH$Hs.H@H RHHL$XHH=<uH$`HPHxH$` H$HHP H$HzpH:HHwH$HGp=u H_xHxH$H=&t7H&=uL$L &H=&L$L$H$8L$@H$8HtDREAMIA MDE11E1E11E1H$0H$(H$HLM11H$HĠHPHH$H$H$H$HĠHHHH HgHHHD$H\$HL$H|$ Ht$(LD$0LL$8DT$@FHD$H\$HL$H|$ Ht$(LD$0LL$8DT$@I;fH0Hl$(Hl$(HH @Ht^HD$8Ht1Hu\@oHD$ HD$8LHeH\$ 'HD$HD$8*H#$H\$WHl$(H0HHHD$OHD$ELd$M;fHH$H$H$1HH D11 HHHHHT$@HD$`HL$H H$H$Hx HL$@HHT$HH9rHt$`9H\$xHD$pHD$`HHѿH5; DHHHD$pHH\$xLAIJMHJ<=8uJ\9H$Hx u0Ht$hHL$XHT$P QH$HL$XHT$PHt$hHx HtH(HL$@HT$HHt$`HHHH$HĈHH& HD$蛰HD$QI;f(H`Hl$XHl$XHD$h[HD$@HD$h 臨HD$hHH HvHHHHL$0[HL$hHQHHqH~H9HD$0L@L9pH)HJHHH?I!H)JHH;@|$'HH1T$'@H\$(HD$8HL$hHy uHȻ 赧HD$8HL$hH\$(Hy HȻ 荧HD$hCHD$PH\$HHL$8H|$(H H\$@[HL$PH=u HL$HHHHxHL$HHD$hHx u HD$hHH Ht HkHD$@Hl$XH`HHHHHHLHHBHHHD$DHD$I;fH@Hl$8Hl$8HD$HHHHL$ 5HL$HHQHHqH~H9HD$ L@L9H)H)HHHH?I!JH[BfwY"t ft]}HHf@|$HH1詂T$@iHHHl$8H@Àntu%tHHHHl$8H@À-t@ HH1*HHHD$HHtPHT$HHzpuCHD$0H\$(HHH0H|$HHGp=uH_x HxHD$0H\$(Hl$8H@11Hl$8H@HHHH1HfLHPHHD$fHD$HD$H|8\u xuu11H@H}4\s@@ v܍s@ws΍s@wsÉLd$M;fQHH$H$H$H|68"u1Tf"u%H$H$H$HSHT$h111H1H$HĘHt$0H9DD0A\A"A fAsHH)HHHH?H!H)LIIHHL >=ufHt+HT$0H4H$H$HT$hH$RH$H$HT$hH$Ht$0LALHDH9LD$`L$HKHL$8HzHHT$(H4H$LD$`L$LT$hL\$HA".A $AsL9dD0LYHH$H)H$H)HIHH?H!HIHLN8HT$0HHt$(HL$`H9HT$0HH)HHH?H!L$M HӉLH@=HT$(H4H$LD$`L$LT$hL\$011H1H$HĘ11H1H$HĘ11H1H$HĘ11H1H$HĘL9wHLH$HĘHL@HHLHDHHLHLHLHLHLHLLLHL HHHD$H\$HL$ HD$H\$HL$xLd$M;fVHH$H$IL$H$H$D$/HD$pD|$xD|$`HD$PD$D$H H$H NH$H H$H$H$H$D$/H$H$1HHT$PHJLLJHBH9#H)HL)H?H!IHw1110HL$0H\$H1H1HH55HHHL$0H\$HHT$@Ht$8HD$XOHT$XHT$pHT$8HT$xHT$@H$D|$`D$/H$H2H|$`H\$xHt$hH$HD$pH$HĸHD$pD|$xHD$`H\$hD$/H$HH|$`H\$xHt$hH$HD$pH$HĸHD$pH\$xH$H|$`Ht$hH$HĸHD$H\$lHD$H\$f{I;fv2H Hl$Hl$Mf Mu"HZHJHB2Hl$H cLl$(M9,$uI$$I;fH@Hl$8Hl$8HL$XH\$PH|$`HD$011HH9HT$(DAt A&DD$'H9}/!H)HH)IHH?H!HLHNHD$0H8XH Ht$'@@H9HD$0H טHȘD$'H9HD$0蹉Ht$(HNHD$0HH\$PH|$`DD$'HHL$XALBfL9LJL9'DL@AL9DDAAH9}/H)HH)IHH?H!HLH'HD$0H81HT$(Ht$PDH ЗH=H9vq8HD$0軈Ht$(HNHD$0HH\$PH|$`HHL$XH9~ r(H)H)HHH?H!HH莄Hl$8H@HHHLLHHfHD$H\$HL$H|$ ,HD$H\$HL$H|$ 3I;fvAH0Hl$(Hl$(HH@HѹHH1HXrcnHl$(H0HD$诜HD$I;fv3H0Hl$(Hl$(HxHp 1HunHl$(H0HD$f[HD$Ld$M;f;HH$H$H$HHP(HT$ HX H\$0HpHHHD$8H\$(H$HQHIHRHHL$ Hɺ HDHT$0H5FHDH|$@HHl$Hl$HmH5cHt$@HD$HHT$PHL$XH BHL$`HD$h HL$8HL$pHL$(HL$xH $3H$HDŽ$H$H$1H\$@HfjH$HĨHD$HD$I;fH(Hl$ Hl$ HHtPHoH9HCHCC HKpHtH 1fHWHChHHl$ H(aHD$H|=9u HL$HHpHxpHL$Hl$ H(H]HqHH SI;f3HpHl$hHl$hH$H$ILl$`D$/D|$@D|$PH4HT$PHT$@HT$XHT$PHT$`D$/Htt= t.H =Iu H H= DH\$0HL$8HT$0HtDJEAMIA MDِE111E111HALD|$@D$/HT$`L AH\$HHD$@Hl$hHpHD$@H\$HHl$hHpHD$H\$HL$@|$ @t$!腘HD$H\$HL$|$ t$!I;fviH Hl$Hl$HJHL$HD$(Ht3H mLH9u1HCH H|$H=uHG HHl$H RLI;fH(Hl$ Hl$ HD$0H\$8HʃHqHHL$H=$Hl$ H(Hw$@HuH BHH 2DHuH !HuHc fHH HHl$ H(H w)HuH @Hu  5@H f "H u H uH H BH HHl$ H(H u ZHWf.!Hl$ H(HwHqHv#HttHvHu H;HuY s1sHHHl$ H(HuHK HѐHHHl$ H(1Hl$ H(HuUwH@H ZHHL$HHHH &H?UzwH@H KZHHL$HHHHH UDwH@H UHHL$HHHHHTwH@H QHHL$HHHHiHD$H\$HL$HD$H\$HL$I;fv|HXHl$PHl$PH\$hHL$pHL$HH\$@H|$0HD$8@t$/DD$.HHHHH\$@HL$HH|$0t$/DD$.IHD$8ILAHl$PHXHD$H\$HL$H|$ @t$(DD$);HD$H\$HL$H|$ t$(DD$)7I;fv_H Hl$Hl$HD$(H\$0fHt/ r H . gHHHHVHl$H HHl$H HD$H\$HL$臓HD$H\$HL$sI;fHHHl$@Hl$@HD$PH\$XHD$(HtHPHH\$XH?HHt&H fH9HHl$@HHHÃtHD$0HtHD$8HD$0H/kjtH H=uHT$0HPLD$8L@LL$(M(HxHT$0MHxLD$8@蛳LL$(MtMQMLHL$XH=9HHOtHH9HHl$@HHHD$(H\$X=u HL$8H H|$8蘱HD$0HHL$(HtHAHHT$8H2HHL$XH=HOHT$8HHl$@HHHH 3nJHH $@[JHD$H\$KHD$H\$I;fH`Hl$XHl$XH\$pHL$xH\$HHD$@HL$8H|$0@t$.DD$/LJLL$PHRHHL$PHH HD$@H\$HH|$0t$.DD$/IHL$8AHl$XH`HD$H\$HL$H|$ @t$(DD$)ΏHD$H\$HL$H|$ t$(DD$)*I;f|H0Hl$(Hl$(L$HHD$8H\$@HHHT$HHXHD$8H5D@H9HD$@MtHH vtjHD$8H\$@1eHD$ H2TqHHHHP=hu HL$ HHHxHL$ fHl$(H0T$HH5H 6HT$8HrxHD$@քBHL$8HHD$@HT$H@HYHD$8HEDH9HD$@MsHH uteHD$8H\$@1eHD$H1TpHHHHP=hu HL$HHHxHL$fHl$(H0HZH [HT$8HrxHD$@ք6HL$8HHD$@HHHH$H>Hl$(H0HMHl$(H0HlHl$(H0HHl$(H0HHl$(H0HD$8H\$@9Hl$(H0HHl$(H0HD$8H\$@+Hl$(H0HD$8H\$@>Hl$(H0HD$8H\$@f[6Hl$(H0HHl$(H0HD$8H\$@ Hl$(H0HHl$(H0H~Hl$(H0H]Hl$(H0H lFH `FHD$H\$L$觌HD$H\$L$SI;fv+H Hl$Hl$H8&ytHl$H HD$H\$HL$H|$ @t$(DD$),HD$H\$HL$H|$ t$(DD$)I;fHĀHl$xHl$xH$H$H$DD$/H@Hu6 r0sH1HHuHm%sHl$xHHT$@HL$`H\$XHHHѿBHHHIHtEHHHfHu&H$Ht$/HHH{iHHHu/Hl$xHH$H$ sHl$xHHt$PH|$8HL$@H DHD$XH HL$0HD$HHgXlHL$0H=yu~HL$HHHHL$8HH=^uSHL$PHHH@( H f5HH D|$hH ;HL$hHD$pHr>H\$hDHH^>yHxHL$P˪HxHL$H軪xHD$XH\$`HHؐ-HD$H\$HL$H|$ @t$(DD$)踉HD$H\$HL$H|$ t$(DD$)Ld$M;fHH$H$H$H$H$DD$/H|$HHL$pH\$hHHHD軘HʃHL$@HwHqDHv+HtHvHu H;@%H rsH3HH@@tqHѿ肴H\$XHHH+FHPHD$XfHu&H$Ht$/HHHfHHHu;H$HĐH$H"CpH$HĐHt$`H|$8HL$H@H HD$hH AHD$PHL$0H0eiHL$0H=HL$PHHHL$8HH=uVHL$`HHH@( H 2HH D|$xH jHL$xH$H;H\$xBHH;襼HxHL$`HxHL$PuHD$hH\$pHH'HFhH@H KHHL$@HHHH1HD$H\$HL$H|$ @t$(DD$)譆HD$H\$HL$H|$ t$(DD$) I;f HĀHl$xHl$xH$H$DD$/H$H@Hu6 r0sH1HHuH.nHl$xHHT$@HL$`H\$XHHHѿ±HHHDHu%H$HmHl$xHHHHHu'Ht$/HHH$f;BHl$xHHt$PH|$8HL$@fH HD$XH HD$HHL$0HbfHL$0H= ~HL$HHHHL$8HH=uSHL$PHHH@( H 0HH D|$hH ʠHL$hHD$pH9H\$hw?HH8HxHL$PZHxHL$HJxHD$XH\$`HH*HD$H\$HL$H|$ @t$(DD$)HHD$H\$HL$H|$ t$(DD$)Ld$M;fHH$H$H$H$HL$pH\$hH|$HDD$/H$HHHD[HʃHL$@HwHqDHv+HtHvHu H;@%H rEsH3HH@@u+H$HTkH$HĐHѿH\$XHHHHD@HPHD$XHu,Ht$/HHH$?H$HĐHt$`H|$8HL$HH HD$hH HD$PHL$0H_8dHL$0H=YHL$PHHHL$8HH=:uVHL$`HHH@( H M-HH D|$xH HL$xH$HK6H\$x`H@H @;HHL$@HHHHHD$H\$HL$H|$ @t$(DD$)f{~HD$H\$HL$H|$ t$(DD$)wI;f=HXHl$PHl$PH\$hHL$p@t$/H|$@H w(HuH?Hu4H %H uH uH H HHD$`L@(1۹@H׾ L{T$/t-H\$0HD$HHL$8HD$`"ThHD$HHL$8H\$0HHHHD$`RdT$/tHD$`"hHl$PHXH<^H@H O=HHL$@HHHH?ZHD$H\$HL$H|$ @t$(DD$)|HD$H\$HL$H|$ t$(DD$)rLd$M;f*HH$H$H$H$H@H u ZHHT$XHL$xH|$pf.!f.f.zDoDD$?fH~H?fHnWf.u{UH@uڏf.w3|f.s%H u&Z.ڐw .re ffH$L$>HS(HIHй@1T$>eu7fDH|+Teu!T-uT0u TTHT$?t0H\$@HD$`HL$HH$"eHD$`HL$HH\$@HHHH$DaT$?tH$"D{eH$HĘHHgHD$hH\$PH3\HT$XHP=;HL$xHHL$pHHHL$PHH =uLHL$hHHD$H H$H$H2.H$4HH.6HxHL$h舚HHL$xyHHHHT$p舚oHt$XH9R[H@H #>HHL$XHHHHȮHD$H\$HL$H|$ Ht$(DD$0DL$1@;yHD$H\$HL$H|$ Ht$(DD$0DL$1qLd$M;f:HH$H$H$H$DD$/HL$XH\$P@t$.H$H|$8Ht r HL 3HHH$HL$XHT$Pt$.H|$8DD$/IH$L`L9 Q LLDHL$8HʃHuHL$XHHIHD$PH\$XHHHHɾHDHL$0H=HDHT$@HHpT$.tH$"bH$H\$@HL$0_T$.tH$"TbH$HĈH$HL$XHT$Pt$.H|$8DD$/f@uJHHu HHq"HHHDD$/HHH$HHDV/ HD$HHL$8HʃHuHT$XH2HRHD$PH\$XHvHHHD$HHH|$/.HT$HHJH2HzHBH9wQH)H)HHH?H!HH$H13HRH HL$HaH$HĈLD|$pHD$@H\$0W2H PHL$pHD$xHeHL$pHD|$`HD$`H\$hH*H\$`0HH)HD$H\$HL$H|$ @t$(DD$)uHD$H\$HL$H|$ t$(DD$)pHHl$Hl$HD$ H8-u&HSHHH?HHu1Hl$HHHH0uH^HHH?H`1r9wH^HHH?H.1Hl$H1Hl$HHHHH?HHHt 0r9vH|.:.fu'Z0r9wH^HHH?HH|WetEuJH^Hv~J+t Hz-u*HNHHH?HHHu81Hl$HH&HHl$HHHHH?HHHt 0r9vH1HHHHH?HHH=019v$1HїI;fH@Hl$8Hl$8H\$PHL$X@t$/HD$HDD$.HH|$0HwLOIv,HtDHvHu H9@!Hus rsH9HH@@t6HHH֙Ht$/DD$.HHHD$HHl$8H@ÄHZ ZHl$8H@H1%TH@H 7HHL$0HHHH蛧HD$H\$HL$H|$ @t$(DD$)rHD$H\$HL$H|$ t$(DD$)I;fH@Hl$8Hl$8H\$PHL$XH r~HH\$ HD$HW RSHL$H=su@HL$ HHD|$(H ÍHL$(HD$0H%H\$(,HH%衦HxHL$ HHHüsHD$H\$HL$H|$ @t$(DD$)pHD$H\$HL$H|$ t$(DD$)Ld$M;fJHH$H$H$H$L$L$H\$hH$LT$`H$L$L$1ɺ{HL$H$MIH9HL$8T$/LIL\$XNdXL$Nl`Ll$PLM1H|$HLLD$pB@u1LLLLHL$8T$/H\$hH|$`LD$pLL$xLT$@L\$XL$H$@0H$FZ$t&HT$XH$H\@HLHH$VW$HT$XH$H\0HL8H$0WLL$XL$C K L H$H\$pHL$xH|$@D$AH$HL$8H\$hH|$`L$,\{uHHVH}TYH$HĨLLLLSHT$HHHt$PL$H$H|$`L\$XMLl$PL$HT$HIIIH$HL$8T$/H\$hLT$@LL$xHt$HL9MAIuWL\$0LT$@A r%AsM!ML$fMPLL$xLLL褔L\$0III LT$@HD$H\$HL$ H|$(Ht$0LD$8LL$@LT$H:mHD$H\$HL$ H|$(Ht$0LD$8LL$@LT$HMI;fH8Hl$0Hl$0HD$@H\$HFHD$ H\$HL$H|$(H~yNH HHL$HHHL$HH=uHL$ HHHL$(HH fHxHL$ 0Hx HL$("Hl$0H8HD$H\$IlHD$H\$:L$`M;fH H$H$H$8H$@IL$D$,HHt$hHwLVIv1Ht>Hv fDHu H?A'H fr@sLIMAEu&HH-nSH$H HT$`H$H$H$0H$DL$/DD$.LShILSh@IwE1HHHHD$pHբH$H$H$0H^pH$H^tHL$`HHH$Ht$pH$H$0H_pH?H$rbH$0HPpD$D$H5 H$H$HH$HT$pH$H$H$D$,HADT$-Hػ{THL$hHuH$HrH$H$HL$`{HHt$0HGHH!H$HT$hHtHD$`胛H$D$H$HfDHl$Hl$7HmH$H$H$H$H\$`H$1Ht$@HHt$@H$fH$kHT$@Ht$0H9HHT$XL$ILI H$J< LRMLZML$Lb ML$=Uu II\ LKH$蛘HT$XH$HL(=fu HDH\ H$ŇH$H$HfH$H\$0H$D$D$(HH$H$H$ Ht$0H$(H$0HH$HnH$1H$H$H$0|$/H$0:RH$H2H$pH$xH$H$0DD$/It$.AH$H@HD$8HHt$0H9}\HD$8H$$XB$hB $xB0$H-H$0,UQH$0};QH$0HIhL$-tL$,H$HH$H H\$xHD$HHL$`H DH SH$HHАH$H\$XHL$HHIHD$xH$H\$PD$8D$HH$H\$X!H ɛH$8H$@H$H\$P!H H$HH$PHe$H$8HϵH$H$HXH$HHA[H$H$膰HHHH0 6HH$D$HtH@H$H$H?H$HH$H\$XHFHT$`HP=;H$HH$HHHL$XHH =uPH$HHD$H xH$H$H)H$HH,HxH${HH$iHHHH$ubH$H$HL$`HH""EH@H (HHL$hHHHH}蘘2H$H HD$H\$HL$H|$ Ht$(DD$0DL$1bHD$H\$HL$H|$ Ht$(DD$0DL$1I;fviH(Hl$ Hl$ HrHJ@H9sDHHT0LD8H9s)HHL30H|38HL菢HHl$ H(H跆貆HD$H\$aHD$H\$sI;fv5H Hl$Hl$Mf Mu*HJHZHo_Hl$H D;aLl$(M9,$uI$$I;fH(Hl$ Hl$ HD$0H\$8HHHHHHfH v>Ht8HL$0HHD$8H jHkHpxHHH@t]HL$0HIHHD$8HD$H[BH /H=u HL$HHHxHL$誁Hl$ H(HxHl$ H(HD$H\$@`HD$H\$Ld$M;fPHH$H$H$H$HH|$PHwHwHv8HtHv$HuH9@/fH rsH1HH@@JH$H9{u HHqHIHHHpHHH$Ht$8HT$XHL$@"f{JH @u2LD$8MIMXHIN$III?M)+LD$8MPHIN$II?M)IMLd$HI@cH$HS(HT$xHL@Ht$XMLL$@HH$H\$xHL$H@EIaH0LHEHD$pHHHL$HHHt$XLD$8LL$@H7H$H\$pHL$HHf[EHL$`H@=-u HT$`HPHxHT$`HzHP=uH$HP fHx H$~HD$hH\$XHL$8H|$@THD$h H$"HH$HĈÄHtEH$HĈL@H,?H@H #"HHL$PHHHH袒HD$H\$HL$H|$ @t$(DD$)]HD$H\$HL$H|$ t$(DD$)WL$hM;f#HH$H$H$0H$8IL$D$/IHt$@HwL^Iv1HtrHv fDHu H?A0HLA r'AsLIMAEH$(L[hIL[h@Iw1DL$.DD$-HL$hH|$`HD$XLT$8HHLĨHT$@Hu HT$`Hr!HD$PHD$hH\$`HL$8uHHD$PD$HDŽ$HqH$H$H$H$H$H$H$H$HH$H$H$H$(H^pHH$NHH$H H$H$H$(HZpHH$@RH$(HHpH$H$H$H$H$H$D$D$HH$H$H H$H$H$H$H$D$/HD$XHL$hH$(H|$`DD$-DL$.LT$8T$,LDEIHHHLLAL$(IIhDL$,AtADL$/H$HH$HÄHH<f{AH$HHL$8fDH! HHT$hD$HtH@H$H$H'4H$H{HD$HH\$0Hj:HT$8HP=uzHL$hHHL$`HHHL$0HH =uDHL$HHHD|$pH tHL$pHD$xH H\$p@HH 謍HxHL$HxHHL$hxHHHHT$`xtHD$hH\$`解HL$8HHs9H@H HHL$@HHHH $軁H$HHD$H\$HL$H|$ Ht$(DD$0DL$1WHD$H\$HL$H|$ Ht$(DD$0DL$1yI;fv5H Hl$Hl$Mf Mu*HJHZHTHl$H D[VLl$(M9,$uI$$I;fH0Hl$(Hl$(HD$8H\$@HHHHHHHulHL$8HQHHD$@H HDH9H:HD$ HSH T7=uH\H ]HD$ =tVHD$8H\$@(HD$H\7H p}H=u HL$HHHxHL$vHl$(H0H*Hl$(H0HH fHD$H\$UHD$H\$I;f*HhHl$`Hl$`H$H$H\$xHt$@H|$XHD$PDL$/DD$.HL$HHػ[&@HL$@HʃHu H\$XHsHD$HH\$XHHT$@H\$XHHt$01NHHHD$HHT$PH2HDD$/HHHD$xIt$.AHD$8HHT$@H\$XHt$0H9}*HD$8H~HD$x,v?HD$8HT$@H\$XHD$x]V?Hl$`HhHD$H\$HL$H|$ Ht$(DD$0DL$1DTHD$H\$HL$H|$ Ht$(DD$0DL$1zI;fvmH Hl$Hl$HD$(H\$0HHHHtHD$H5H \zH=u HL$HHHxHL$WtHl$H HD$H\${SHD$H\$lLd$M;fHH$H$H$H$IL$D$/HHt$8HwLVIv+HtUHvHu H?@%H5 rsH7HH@@DL$.DD$-HD$XH$HshHHshfHw1HL$PH|$HHT$8HHHѿ.~HD$`H\$hH$HZpHHL$`F4H$HZpHHL$`JHT$`Ht$hH$LGpD$D$L L$L$H$H$H$H$D$/HL$PHT$8H|$H@t$,HHHxHT$XH2HDD$.HHH$It$-AH$HJhT$,tT$/H$HH$HÄHH9H$HHL$8H  H%HT$PD$HtH@H$H$H+H$HfHD$@H\$0H %2HT$8HP=EuzHL$PHHL$HHHHL$0HH ="uDHL$@HHD|$pH lHL$pHD$xHIH\$p@ HH1LHxHL$@pHHL$PpHHHHT$HptHD$PH\$HGHL$8HHN1H@H EHHL$8HHHHĄ[yH$HHD$H\$HL$H|$ Ht$(DD$0DL$1#OHD$H\$HL$H|$ Ht$(DD$0DL$1I;fv5H Hl$Hl$Mf Mu*HJHZH/LHl$H DMLl$(M9,$uI$$I;fvmH Hl$Hl$HD$(H\$0HHHHHD$H0H tH="u HL$HHHxHL$nHl$H HD$H\$MHD$H\$lI;fvkH0Hl$(Hl$(HD$8H\$@H|$PHt$XAsLHLEHHHDALHHDHHLEAHl$(H0HD$H\$HL$H|$ Ht$(LD$0DL$8DT$9BMHD$H\$HL$H|$ Ht$(LD$0DL$8DT$93I;f'H0Hl$(Hl$(HD$8HtHD$8H\$@11Hl$(H0HD$8H\$@HL$ H9D}Hq HމT$Ht$ H.*H}\$wH5n`HkA6\$H5K„`0|91H?H5„)1Hl$(H0øHl$(H0HD$H\$DKHD$H\$L$xM;f&HH$H$H$H$H$(H$ 1sHHPHH\$xH $H$H$Ht$fHl$Hl$}uHmH$HH$H$H$ H$(fH9~cH$H$H$H4Ht$xHHHtH$H$@H$HIHH$%H$HHD$H\$HL$H|$ Ht$(JJHD$H\$HL$H|$ Ht$(I;fTH@Hl$8Hl$8HHHʃHu6HHHHIHH8=љuHP0 Hx0j11Hl$8H@HD$HH0HXHѿHuHHHHHL$HHQHփHu'HQ rsHHu11Hl$8H@HHHH|$0Ht$(HH1mH|$HH_8= uHG0 H0hHD$0H\$(Hl$8H@HL$HHQHrHwwHqHwHuH&H fDHuHHuHcHHл H|$HH_8=yuHG0 H08h11Hl$8H@HrfDHHqH wHuH/Hu#H u fDH uHHHл EH|$HH_8=uHG0 H0g11Hl$8H@H~H`]#}HD$GHD$I;fH@Hl$8Hl$8HD$H@|$`HL$XH\$P"H2HL$XHT$Pt$`11HH9LHD$0<@LE 8fEu@uL E9EtHxL @|$H9})QHH)HHH?H!HHHD$H.HD$H\1\$ w5 t uMHD$Hnr1HD$Ht[1 "t\uHD$H91HD$HH[.T$H @H?fH9|HD$H0D$H ?H?H9JHD$H0HD$Hr0H\$0HHL$XHT$Pt$`L,HQH\$ HH)HHH?H!H<HHf=}HuwHD$ HL$0H9},H)HHH?H!H|$PHHD$HHO-HD$HH9-H\$0HHL$XHT$Pt$`L{H=( t1=) t*HT$0H<HL$XHT$Pt$`LFH\$ hD$H\$(HT$ HL$0H9}/H)HHH?H!LD$PIHD$HH,HD$HH{,D$H %>H>fDH9HD$H /HL$0HT$(H HL$XHT$Pt$`LHfH9~"r9H)HHH?H!HHD$HH+HD$H".Hl$8H@HhhHhhggHHhgHD$H\$HL$@|$ lCHD$H\$HL$|$ I;fLHHHl$@Hl$@HD$P@t$pHL$`H\$XH|$h"-HL$`HT$Xt$p11LH9xfHD$8DAL ?GEu@uLG@Et L@LDD$#H9}5@H|$hH)HH)IHH?H!HLHD$PO)HD$P\D-\$# w6 t uQHD$Pn,HD$Pt,@ "t\uHD$P,HD$PHD)T$#H ;Hr;fH9HD$Pi,D$#H R;HC;H9bHD$P;,HD$Pr*,H\$8HHL$`HT$Xt$pL I6H\$(Ht$hH)IHH?H!HHH)HLv=HHD$(HL$8H9}7H|$hH)H)IHH?H!LL$XIHD$PL'HD$PH(H\$8HHL$`HT$Xt$pL I@m=( t0=) t)HT$8LHL$`HT$Xt$pL H\$(6D$$H\$0HT$(HL$8H9}4H|$hH)H)IHH?H!LT$XIHD$PL&HD$PHe'D$$H 9H}9H9HD$Pv*HL$8HT$0H HL$`HT$Xt$pL I|H9~*rAH|$hH)H)HHH?H!HHD$PH;&HD$P" *Hl$@HHH:ducH-d(dcc[cHHdKcHD$H\$HL$H|$ @t$(>HD$H\$HL$H|$ t$(nHD$HLd$M;f#HH$H$H$H9HHHH|$ HHffHl$Hl$ShHmH9LIJ4Ht$=܍uHHl$Hl$hHmHāHHYy=u%H|$Ht$ fDHl$Hl$gHmHH\$HL$ yH$HĸHHaHHaHD$H\$HL$H|$ Ht$(0=HD$H\$HL$H|$ Ht$(HHl$Hl$HD$ H9HHH|`HTX1HH9}FLfH9vhL INTXNL`I9~M M9tHl$H1Hl$HfH9vH HHL`H9Hl$HHH`HH`HHf`L$M;fH H$ H$ H$ H$ H$HHl$Hl$bHmH$H$D$HD$XD$hD$P H$X HHl$Hl$jbHmH$P H$XX$THDŽ$D$D$ D$(D$8H$1Ht$x1$HLHH$PH$H$xHtaH$H$H$PH$H$H$'H$xH$H1H$1L$H$H$H$f;D$H H$H$H$HH$HY{H$H$11 LHLL$L$L97?H$H$hH$H$LIL$PMH$HLHl$Hl$cHmL$L$L$L$H$H$H$hH$L$PL$HL$@IILAL9s+HHٿH5|LqL$HIHHO IIpJ< =u H$Hl$Hl$bHmH$L$8H$0H|HH$tH$H$0L$8L$HKL$L$M9L9sH$HfHl$Hl$ _HmL)H?I!K4I~*OL`OM9uGLPGE8u1)MH$Hl$Hl$aHmH$H$Hl$Hl$aHmLAL9s+HHٿH5]{LL$HIHHO IIpJ< =u H$Hl$Hl$SaHmH$L$(H$ HzHH$yrH$H$ L$(L$HIH$H$H$HHHfHHUH$H$PH$ H$ 1#H$HH$PH$ H$ H9L$H$H9gH$L$HHH$HILXML`MThHLHL.iH$HLL$K<=u IESU;H$H1"H$H$H$H$P1zH$H$H$HHl$Hl$l_HmH$H$HHLGdH$HH$HHH$H$PH9|H$H$H$HHH$ H YH$@HH$L$L$H$H$hH$L$PLL$HL$L$M9O$IMH$@ILHl$Hl$K^HmL$HL$@M9L$@LLLVu,n1H@XLXLLXLLfWLWL$IH$HHHHIH$xH$LL$L9HH$HH$H$L$H$H$HHl$Hl$L]HmH?H$HH$$8tH$H$H$5HH$HH$*1H$H$H$.H$H$@H$H$HHHH$H$@H$H$H$H$HHH$H9~H$H$HIPfH $H$xH$Ht$DHl$Hl$=\Hm$uhH$xH$H$H$Hl$Hl$[HmH$@H$@H$H$fH$H$H$H$`HHtH$H$`H$HIHH$`H$xH$HH$PH$@Hl$Hl$=[HmH$`u1HHHtH$@H$H$H$H$H @Hu"8-uH$@H$H$H 8o'H$XH$H$pH$ D$H$HH$HH)`H$H$H$H9HHLT$HҺL$IEH$AL$XMEL$H$H9t)HN]H$H$H$L$H$fDH9H$H H$H$H$H$HHؐHuGH$H$HfHu&H$H$HIHH$H$H$pH$H Gu18H$H$HHHH v fDHu1D$~H$DHt>$u-H$H$HHD$~H$IHuL$xH$ HL$H$L$H$pH$H l FH$`HffDHl$Hl$jTHmH$H$`H$H$hH$H$H$H$H$H$H$H$H$H$H$$T$~$H$`H$h1H$pH$xH$111H>H$xH$$HHH$xH$ H8tH$@H$H$H$H$HH$0HfHl$Hl$ SHmH$0H$8H$H$H$H$H$H$H$H$H$H$HH$@fH9r H$H$H5}oHHHpH<=N{u!H$0Hl$Hl$UHmH$H$H$HoHH$0fH$H$H$HH9~G<@s-DGAv fD@Kt@SuźH|&@t H|@t H|H}H$HDŽ$(HDŽ$8Ƅ$@H$ H [H$pH$xH$H$ 6H$ H1fH$(H$ H$0H$8H9GHH)H)H?H!H:1H$H$H$`H$h1HULAH$H$H$HH$H$H9s!H5;m趼H$H$H$HHHpH<=xuH$`Hl$Hl$-SHmHlHH$`ndHgH$H$RH8H$H$L@L9LIIpI4H$fHl$Hl$RHmH$H$H$HH9s"H5!l蛻H$H$H$HHHpH<=wuH$Hl$Hl$RHmHkHH$ScH$@H$H$&HLKLHHKHD$H\$k'HD$H\$;I;f4H@Hl$8Hl$8HRH2HJH9 HHLDHH9L IJNTM9u~HT$(LL$ Ht$0LJhtTHL$(HT$0H\ `Ht XH|$ LD:XLL:`L9uD PL:P8u1PHl$8H@Hl$8H@HT$(Ht$0LL$ H\HJ J|lfHHl$8H@HH9}H IH9tL9Hl$8H@HhJcJHD$H\$S%HD$H\$I;fkH`Hl$XHl$XHD$hH\$pHD$0HtHPHH\$pHߙHH4tLD|$8D|$HHH9HHSHKH{HD$8HT$@HL$HH|$PHHl$XH`HD$0H\$pHD$8H\$@HL$HH|$PHL$0HtHAHHD$(H\$8H}H\$(HL$pH=gHH8D|$8D|$HH EDH9u0HHSHKH{HD$8HT$@HL$HH|$PHHl$XH`HH A{HH 1lHD$H\$[$HD$H\$lI;fHHHl$@Hl$@H|$hH\$XHD$P1HHH9SfH8DAs=A8tDRAAA8IPIHH?HHHL$0T$LD$(Ht$ H|$8HHL T$DSwKtSt#ku=*!tts=upHL$ fH9HT$(H)H)HHH?H!LD$8LHD$PH\$XHIHL$0f1Hl$@HH1Hl$@HH1Hl$@HH1Hl$@HH1Hl$@HH1Hl$@HHHHl$@HHHGHD$H\$HL$H|$ Ht$(LD$0w"HD$H\$HL$H|$ Ht$(LD$0HD$H|$ H9u11HH9~24@8tDBAv DBAw߃@8t11øHD$H|$ H9u11HH9~4@8t1øI;fHxHl$pHl$pILl$h@$H$H$H$H$D$'D|$HHPH+PHT$(HD$@D|$XH dHL$XHD$`HL$XHL$hD$'H$H$H$H$$E1E11LAHD$@H$H$H$H$$L9LD$8FDT$&@,At A&M9}8/HL)M)IHH?I!IHLLL;H$HH@;H Ht$&@@H9H$ H HD$&H9H$ LL$8II$HD$@H$H$H$$MDT$&IH$ @AMXfL9M`L9Ed0@AL9F\AAM9}8HL)M)IHH?I!IHLLLH$HHHHT$8H$DH aH=RfH98H$F LL$8IIHD$@DT$&ILL$0HH DӐH |cH tlHD$0HL$8H9}EH$H)H)IHH?H!L$IH$LHL$8LIHL$8LL$0HD$@LL$0LL$0rH Ht$(HuH$H@H@@ ;H$G HWLGLOM)L9J H9HOHD$@HH(H@0HL$HHD$PD$'HT$hHHD$HH\$PHl$pHxH$HD$0H9~:raH$H)H)HHH?H!H$HH$HאD|$HD$'HT$hHH\$PHD$HHl$pHxAhAHRH1QA@LLD{ALH@LH@D@@LLKA%FHD$HH\$PHl$pHxHD$H\$HL$H|$ @t$(HD$H\$HL$H|$ t$(5I;fv*HHl$Hl$Mf MuHBHl$HLl$@M9,$uI$$I;f H Hl$Hl$HD$(=)ku H mHH m@;HGHG(=ju HG0HO0HH1d 2)HD$XH\$HH1HD$PHH|$XHt$HL*&ALA1H|$PH_=`uH0HL$pHQ8HWH,HQ(=`uHy0H0HH[0 Hl$`HhHD$\${HD$\$lI;fHHl$Hl$ w#t t t u Hl$Hf}u.HHHPHqH9v,HD}Hl$HHHl$HH64HD$\$HD$\$XI;f`HhHl$`Hl$` w#t t t u Hl$`Hhf"u5=B_u H bHHH b/Hl$`HhHD$p=_u H aHHH a/&HD$XH\$HHHD$PHH|$XHt$HL#AL A*1@H|$PH_={^u H @;.HL$pHQ8HWH*HQ(=L^uHy0H0HH. Hl$`HhHD$\$(HD$\$yI;fQHhHl$`Hl$`HHHPHu7=]u H `HHH `w.@.Hl$`Hh@ wDt t t u3=s]u H b`HHH S`&. Hl$`HhHD$pHtH.@:uBuHy0H0HH Hl$`HhHD$\$HD$\$I;f.HhHl$`Hl$`au4=Au H DHHH Df{1Hl$`HhHD$p=Au H DHHH xDCؐ; HD$XH\$HHj%HD$PHH|$XHt$HLcALA 1IH|$PH_= AuHHL$pHQ8HWH HQ(=@uHy0H0HH Hl$`HhHD$\$HD$\$I;f.HhHl$`Hl$`lu4=j@u H yCHHH jCf1Hl$`HhHD$p=1@u H 'CHHH CؐHD$XH\$HH HD$PHH|$XHt$HLALA 1H|$PH_=?uHmHL$pHQ8HWH HQ(=~?uHy0H0HH7 Hl$`HhHD$\$ZHD$\$I;f.HhHl$`Hl$`su4= ?u H BHHH Bf1Hl$`HhHD$p=>u H AHHH Aؐ{HD$XH\$HHeHD$PHUH|$XHt$HLAL@A 1H|$PH_=I>uH HL$pHQ8HWHQ HQ(=>uHy0H0HH Hl$`HhHD$\$HD$\$I;f.HhHl$`Hl$`eu4==u H @HHH @f[1Hl$`HhHD$p=q=u H g@HHH X@#ؐHD$XH\$HHJHD$PHH|$XHt$HLCALA 1)H|$PH_=<uH HL$pHQ8HWHHQ(=<uHy0H0HHw Hl$`HhHD$\$HD$\$I;f.HhHl$`Hl$`uu4=J<u H ?HHH ?f 1Hl$`HhHD$p=<u H ?HHH > ؐHD$XH\$HHHD$PHH|$XHt$HLALA1ɾH|$PH_=;uHM HL$pHQ8HWHHQ(=^;uHy0H0HH Hl$`HhHD$\$:HD$\$I;f.HhHl$`Hl$`lu4=:u H I>HHH :>f 1Hl$`HhHD$p=:u H =HHH =c ؐ[HD$XH\$HHEHD$PH5H|$XHt$HLALTA1iH|$PH_=):uH HL$pHQ8HWH1HQ(=9uHy0H0HH Hl$`HhHD$\$HD$\$I;f.HhHl$`Hl$`lu4=9u H y<HHH j<f; 1Hl$`HhHD$p=Q9u H G<HHH 8< ؐHD$XH\$HH*HD$PHըH|$XHt$HL#ALA1 H|$PH_=8uHHL$pHQ8HWHHQ(=8uHy0H0HHW Hl$`HhHD$\$zHD$\$̸ I;f$HĀHl$xHl$x<'<"HD$H$H5!F${H$D$L$AD\I|$HH$HHHHH$L$8H$HHLHHH$HH$H$HL$@D$D$L$H$HH$8H$L$XDI9aH$LL9WH$LH5 EH$H$HL$@I fD HƐI9HH9sH$ HӿH5DH$ L$XD$D$L$HH$LHPHHEu M\$2H$h1H$H$hML$0L$$L$8Ld$L$@Ld$L$HLd$D|$ L$XILd$(L$Ld$0HT$8MMEMH$hHt)EtD$ EE1H$HD$ ED$A{{D$EIL$EL$M9EL$L9} E1L$L$L$qML$IL$DM9H$H$H$H$H$H$LLH5BH$hH$H$D$D$D$ L$L$H$IIH$H$H$IUHL$M<L$M|M\I\pEEL$L$L$PED$L$L$L$*D$D$L$L$L$HWH$HL$D$H$EL$L$L$H$L$(D$IIH$hH$xID$L9~6ffFA"uMSH$`1H$H$`M9M9L$M)MM)I?L$M!N'L9sNL$L$H$(LLH5@L$L$D$IH$(L$H$H$AHҺH$HEH$H<LHLuH$HH$fH9rD$ EH$%H$H5?D$ ED:t,HH9sH5D?D$ D H$hH$H$L$L$(ED$L$ LLLLIL$IL$L$(M9~F A\tL$(L$I?L$MIM)fIu L$(IL$(D$LHH$@H$L$0JH$@HLH$HH$H$H$L$L$(D$D$L$HL$@L$H$H$@H$H$hL$M9}CL$0O@L9.LLH5=L$0L$HIA{L$0L$D$LL$L$D$  fAD IL$L$0L$HL$@L$M9}L$0IL9sLH5=H$hH$H$L$L$(D$D$L$L$IH$IA{L$HL$0@LHpLHeHLHD$XH\$`HL$hH|$pHt$xL$L$D$D$軨HD$XH\$`HL$hH|$pHt$xL$L$D$D$Ld$M;fHH$H$H$H$L$0fMH$L$8L$@H$L$0H$H$L$(H$ IIHL$@IRHT$pHITHT$HHȲcH$H$HffDHl$Hl$HmH$H$H$H$H$H$H$H$H$ H$H$(H$H$0H$H$8H$L$@L$=u)HH$fHl$Hl$+HmHH$H4H$HHfWH$9tKHL$HHT$@H)HL$XH18H$0H$8H$L$(LL$X11uH$H$ H$(H$HHHLH$HL$I LZL$8H$L$(LLILH\$PfH95LRLZM9fDM9HL$`H$M)M$MM)I?M!N/M9s:L\$hL$LLLH58L$L\$hIIH\$PHD$xLL$XLd$PHLLHHT$`Ht$pH9}mH\$PHHL$XH9rHD$x HD$xH5948HT$`Ht$pD,HfH9sH5 8HT$`Ht$pD HL$XH\$PHD$xHL$@I9HI9s;H$HLHH5H7HIHH$HL$@H\$PLD$pH$HT$hH4HHHH$H\$hHL$pH$HLLLLLHD$H\$HL$H|$ Ht$(LD$0LL$8LT$@L\$HyHD$H\$HL$H|$ Ht$(LD$0LL$8LT$@L\$HI;fNHHl$Hl$H!ۄH@H =HH@H _<HHH@(H=HP H@8HH0H@HHu=HP@H@XHHPH@hH`=HP`H@xHHpHǀHHǀHHǀH=HHǀHHǀH<HHǀHH PH=u HY H=OHl$HI;fOHPHl$HHl$HHD$X@|$p@ @ f@ @ @ HSH9s+H\$`HӿH5D4|$pHH\$`\u00A@@ sDO0DOWHZH9s"DL$GH5sn4DD$pDL$GDLAA sAP0APWHH9sT$FH51,4T$FTHl$HHPHH9sH5D3|$p@|Hl$HHPHD$H\$HL$@|$ NHD$H\$HL$|$ uI;f;H(Hl$ Hl$ HD$0H\$8HL$@H|$HHt$PD$XLD$`HT$0HbHtFHuhH\$@HD$8Ht8-fH@Hl$ H(Ho:Hl$ H(HtDHt(Ht11Hl$ H(HD$8H\$@Hl$ H(H)9Hl$ H(HHHl$ H(HH9}04@0r@9vfH@oHl$ H(Hl$ H(HD$H\$HL$H|$ Ht$(D$0LD$8貞HD$H\$HL$H|$ Ht$(D$0LD$8iI;fWH`Hl$XHl$XHD$hH\$pHL$xH$H$$L$HL$hHHt$HuHl$XH`1Hl$XH`HHTHu.F80tw81t:Ftmo8Tt.8fta8tt$^@Hu8TRUEt8Truet8trueu<YHu/8FALSuxEt8Falsuxet8falsu xeu1$HHHD$8tHHHD$r1Hl$XH`Wf. Hl$XH`HD$H\$HL$H|$ Ht$(D$0LD$8HD$H\$HL$H|$ Ht$(D$0LD$8MHD$H\$HL$H|$ Ht$(D$0LD$8HL$Hue f.w *f.vBHL$HT$Ht:-fu  1111H9t111H,Hu-Ht?-u  1111H9t1%1Hu1HLJCH9~80r9v1אtHHHńtHH,HL@J4GH9}<fD@0r@9v11뿄t H޸H뮸HL$M;fAHH$H$H$H$H$H$H$$L$L$L$$$$$$$H$uH$H$u\H$H$D$(D$0D$@D$PD$D$D$D$1vML$L$$L$$L$$L$(111HHILAH$HĠH$HĠHH9}@{t![t vH$HĠH1HDŽ$(H1L$H$H$T$wHH9H9,4@"uH$HQH& fD@Q@uBHqH9DHHQHHH?HH$@H$HqHqH9HlH$HL$xH$HQHHH?HHdgH$@H$HH$HL$xH$H$0H$8H$H$XT$wH$L$HH$zH$hnH$`H$hH$pH$xL$$L$H$`H$$h$$x$$$E!H$L$L$L$H$LH$(H$0H$8H$@H$H$PL$XL $$L$$L$$L$(A҄t{H$T$wH$L$H$dH$HĠH$HĠHH9}s@4@ v@,tD@:t[H$HĠH$HĠHH芺1;HH谺1$HH虺HHNHD$H\$HL$H|$ Ht$(D$0LD$8LL$@@軕HD$H\$HL$H|$ Ht$(D$0LD$8LL$@MLd$M;fHH$H$H$D|$D|$D|$(D|$8D|$HD|$PD|$`D|$p1HH9{nD[` vԀfwz"t8fHD$HH)HHH?H!L HD$HH)HHH?H!HHHD$PH\$XHL$`H|$hnuH)HHH?H!L ptu+HD$HH)HHH?H!L @0r9v;-u6HD$HH)HHH?H!HH+HD$PH\$XD$piD|$D|$D|$(D|$8HD$H\$H|$(1HWIH$HĈHD$HH)HHH?H!L LL$PHT$XHT$HHT$L$PL$L$`L$(L$pL$8HD$H\$HL$ H|$(Ht$0D$8LD$@H$HĈHH9}FAar AzvHLL$PHD$XvHH9}FAar AzvHLL$PHD$XFHH9}FAarAzvHLL$PHD$XHD$H\$wHD$H\$HHl$Hl$HD$ H_8"@@HHH9~~6<0f@"r@}w@)w@"uH~bf@(t(@)t-@]w@[tfD@]t@{uH@}uHtHH^Hl$HHl$HHǐH9~4D8A\wA"uLGL9vpDDA\uLG1@HtH&H9~HOH9rHHl$HHl$HH͵IHI9~ E A\tiLHD[HHPHHE1H;I;fH(Hl$ Hl$ HD$0HH9~nHL$-w v,u ]r؀et&H˹@D[HD$0H\$Hl$ H(H˹@:HD$0H\$Hl$ H(H\$8@HD$0H\$8Hl$ H(HD$H\$HD$H\$%I;fH Hl$Hl$HD$(HH9~F4@\w@"t@@\uHq]HYHyHHH?H 8HHl$H Hr"H{HHH?H HHl$H ø1ZHH9~;<0@\wf@"uH~H9|@\u H~1HNH9~H9H9fH9riHrYHrDHL$HD$(H^HHH?HHH]HHHD$(H\$Hl$H ø1蛳HHHHHfHHH~ D8A\t>HH芲HH@{HD$H\$ HD$H\$HHl$Hl$HD$ HHDH9~fzDA\wA"t@A\uLALBLIM9rpH)HHHH?L!HLH1Hl$HLBL9r-H)HSIHH?L!HHL1Hl$HLH4LL)IL9~>E A\wA"uMHDL9ELA\uMH1RLfLJIHL9r/I)IPIHH?L!HHLHl$HL藱IHM~ EA\tNLH誰LH@蛰HH萰I;fUH Hl$Hl$H$H$D|$(H|$0f@Hl$Hl$ӲHm1 HJDH9|x@..#D$[fHHP.u8D$ZHSHHH?HHT$`Ht$hHD$8HD$@1c[t (t1RD$p<$HD$xH$H$H$H$L$H$I9}"H$A#uƄ$H$ISHHHH@H$H$zHD$(HL$0H)HSHHH?HH!HHD$8H\$@D$YHl$H HD$(HL$0H)HSHHH?HH!HHD$HH\$PD$XHl$H HD$(H\$0D|$8Hl$H L-HH"H$H$謉H$H$wHHl$Hl$HD$(H|$8#uD`A(tA[u1+D$ 11HHHIIIIHl$HHH9Hu>Hu4@H9D$A!tA%t AfAwHH9H9H9D$A\u LaLIEA[t DA(uLb.A]tA)uLb@Hu A"u LaKIL@IMaH~3H9DHLfMII?AIĐH9HHQIHH?H?D$ 11HHIIIIHHl$HIMII?ALMMt: vI@Mt Fl"A vLiL9rOH)L{LII?M!N,8111E1D$ LYLIMIHLHHHHl$HLHLBH身IMII?AMMMt A<$ vIMtG|,@A vH9H9H9sIH)IHH?H!LL$ILII?AMIMtA<$ vIIMtLGlI~=u@A!uIj~%u AuI~=umA=u'I~=uLnIϸLFA<Au"A=u fDA%u1L9wtI)MII?I!IILII?AMIMtA? vIHMtHCT/ vHIHHLLMILSHLMHDHHHԨHǨ1Hf軨LHpHhHDۨLHHIL9~vF, A\uIA"uLLHNHHCHH8Ld$M;fHH$H$H$D|$xD$D$D$1HH9`|.*t?u Ƅ$ʀ\uHL$HH$H$HHD$XPZHT$HHrH$H9]HL$ELH9s1DL$GH5IDHT$HH$L$DL$GDLHpHD$xH$='ubHSH9}XHQH9DdA@tfA[tA{u1H)LcMII?L!HH$L$Ƅ$4H)HSIHH?LiI!J(H$L$Ƅ$H$H$H$H$L$D$D$D$HD$xH$HĸHD$xH$H)HSIHH?LiI!J(H$L$Ƅ$H$H$H$H$L$D$D$HD$xAH$HĸHD$xH$H$H$H$L$D$D$D$HD$xH$HĸHHHH1UHD$xH$H$H$H$L$D$D$D$HD$xH$HĸIQH9~fDE A\u]LJL9~fDHATH9s4LL$PT$GH5WRT$GH$L$LL$PTHT$HA.A|t_A*tA?uƄ$HE H9s1DL$GH5HT$HH$L$DL$GDLI HH1nTHD$xH$H$Ht$HH)HHHH?HH!H$HH$H$Ƅ$H$H$H$H$L$D$D$HD$xAH$HĸHH1SHD$xH$=tHD$HH$L$pH$HQHD$HH9}RHPH9L$ElA@u9H)LiMII?L!LH$L$Ƅ$G,fDAarAzvI9MI)MII?I!MI)MII?L!MLMIEtWLh =uL@ HxAfuH@DAtuH@LлH$HL=HL臘LLѐ軗IM9}FG$A vfA,t A]tA}uI9MI)MII?I!MI)MII?L!MLMIEmLT$@L` =uL@ HxH@L@L讙H$B8HD$@H$HHL蛗LLЖ1脗HH1mHHHL藖HL9}N;A4@@\w@"t @\uHiH9rVHrH)HIHH?H!Lʹ1#I)IMII?I!M11HLMH׉HLHHÖHL9}A4@\w@"uHrI9vwBt @\uHr1GH9r.HrH)LBMII?I!KMvHHIHHH~ E1A\tcHLYHLNHLCHL8HD$H\$HL$H|$ pHD$H\$HL$H|$ BI;fH`Hl$XHl$XH\$pHL$xH$H$L$$L$HPpHpxH~:"uDDA"uHHLD$pLD$ D$xD$($D$8$D$HH|$ u H|$0L@`LHhDMLT$pIIIuUA8=t%>>$f.Hl$XH`$f.!Hl$XH`$f.Hl$XH`DH$f>!=tJf><=t)f>>=$f.Hl$XH`$f.Hl$XH`$f. Hl$XH`fDIIEA<wA8%uH$H$HHHHl$XH`DIA8!fA8!%u:H$H$Hu :*u HHWHl$XH`fA8!=@HH$H$H9t H֭Hl$XH`fA8<=t7fA8>=H$H$HH:HHl$XH`H$H$HHHHl$XH`IIuTA8=uHu :true1ɉHl$XH`A8>ur@Hu:falsu ze1ɉHl$XH`IuCfA8!=u$Ht f :trueHl$XH`fA8>=uHl$XH`1Hl$XH`øHl$XH`1Hl$XH`HD$H\$HL$H|$ Ht$(LD$0D$8LL$@fjHD$H\$HL$H|$ Ht$(LD$0D$8LL$@ L$xM;faHH$H$H$ H$H$HDŽ$D$HH@H $H$xH$Ht$fHl$Hl$aHm$tE1gL$L$xMu11:11HL$AEK cL9}EA0rA9v11DMILEɀ$uO$tEL$L$H$LXP=PuLPHHxHLM詊I@XfH$L$D$D$L5L$L$xL$L$L$H$H$1111E1E1HDLXIL9$tA I9uD$AI9AD$$H$$tmI@L9s\H$LLHH5~$L$D$IIHH$H$H$K\H$L$L$fHKLL@H$H$xH$$ufD$E$ZH$H$$H$L$L$L$D$H D$(D$0D$@D$P@t[HqH9DHtHQHHH?HH5H$@H$HH$H$xFLIL9fILIMII?AIL$@L$HH$0H$8HDŽ$(H$(L$H$@H$H$PL$XH$AфH$D$H$H$$H$L$L$L$D$ trEumHH$H$tI$H$$H$L$L$IAH$Y ALHL6$udD$E$@H$$H$L$L$ID$H$ H$D$D$D$ D$0H$ H$H$HDŽ$H$L$1WIH$AфH$D$H$$H$L$L$EIH$ IL{"L9tvEuqHH$H$ltM$TH$$H$L$L$IAH$@ A LHLe$ubD$E$H$$H$L$L$ID$H$ H$D$@D$HD$XD$hH$XH$HH$PHDŽ$@H$@L$1WIH$AfDqH$D$H$$H$L$L$EIH$9L9 L9JF<+DL{'H1H$HHL`L(L9 uA] F<+fA[wIA-wA"A-u@LEOA fA[IAfwA]Afe\An'At A{;:@t{HqH9HHQHHH?HH/H$H_0=˰uHG(HO(HH脀HH$H$H$xXHqH9<H"HQH$HW0HH?Hڃ=YuHW(Hw(IH2LHO =4uH_HOHH-HHGH$HH$H$H1H$HûH$HH$HO =uH_HOHH@蛀HHGH$HH$H$HH$$`H$xH$I:#@$H$H$D@t:H$H$H$HzP=ȮuHJH HzHBXH$D$8D$HD$XD$hƄ$8[L$L$11ɻ@H$8H@WH*@8 HD{H$H_ =uHGfHOHH}HGYH$HH$HH$tSHPH$@$@($@8$H$t H$ƒ 1H$HL$H$H9sLHӿH5ƔHIBD]D$D$D$D$1LHD2H$H$HDŽ$=Ѭu:H$H$HJ$B$B($B8 H$HHH$$H$HC1H$HûH$HH$HO =.uH_HOHH'}HHGH$HH$H$HIL$M9}<G /Aar AzvI9MI)MII?L!Iݐ#I)L$II?L!IML$$ulEu$gL` =?uLh HxL{@fu H@@tuH@LȻH$HL$D$D$D$D$L$L$@fuHDŽ$@tu HDŽ$H$L$H$H$H$H$$L$H$AфuCH$H$$H$L$L$L$D$H$H$HLL$HL~LL-~HL"~HL9MM9}fA]tH$H$H$H$H$LLLѿ@/H$H$H$H$L$$L$fEu%H$H$H$H$H$H$H$$P$$`$$pH$H$H$PH$XQH$`H$hH$pH$xH$$L$H$`H$$h$$x$$$H$`H$$h$$x$($$8H$u2H$ u'H$H$H$H$fH$H~JH$HH$H9r H$!H$H5؎H$D,H$H$H$H$H$H$L$L$@Mu:H$H$H$$L$LL觶IIH$LL-H$H4H$H9r H$HH$H$H$HHH5H$HHH$H$H$H$H$HIHILLH$HH$H$H$L$L$HHH$HH$LGL9s-HHٿH5(LDH$IHAD0]HB1HL*H$H_ =OuHG HuH$HH$HILZL"@M9Us1G,"E}AvfDA tA tBLLDyLL9yIIM9}PM9!LG /A vA,tA]t A}uDI9MI)MII?L!Iݐ*L9I)LII?L!IMIH$L$$uzfED$6L` =uLh HxLtH@L@LzH$B8H$H$HD$D$D$D$L$L$HDŽ$LL@xz$H$H$H$H$H$H$L$ IH$AфuNH$H$$H$H$L$L$L$D$H$H$HHLwHLwLLv1wHL"w1wHH w1@{wHHv1dwHHvHLvHD$H\$HL$H|$ RHD$H\$HL$H|$ [L$M;f HH$H$H$H$H$H$H$$L$LRLT$xLZL\$`HBHD$ptbIIJIzuTHsCHлHH5H|$xHO=uHpIL\$`HHD$pIB[D$D$D$D$H$t`HxXuGH$H$$$$$$$f1H$HĠH$H$$$$$$$HHPHxXH$H$HH$`H$hH$pH$xH$$L$H$`H$$h$$x$$$HD$pH$H$H$H$L$$L$ qHT$pz1uEL$L$$$$$$$FHBHZ@tTHT$pHZ=ÞuHBHrHH{nHHt$`H~P=uHNHf H~HUoFXHT$pH$H$$$$$$$HJHzH$H$H$(H$0H$8H$@H$H$PL$XH$(H$$0$$@$$P$HT$p_H$H$Hu8H$H$H$$L$ @;HHHxHL$@H\$XHT$xHLBLJI~UIM9sCLLɿH5H|$xHO=uHlHL$@HIH\$XLBAD,LBM LRHM9s/LD$PLHH51L)LD$PIIHL$@H\$XLL$PHD$hLT$HJHYzHT$PH|$xHWHT$HHW=Ku HL$hH{HL$hmoH\$`=%u2H$HK$C$C($C8HHH$艇H$HĠ1H$HĠHD$H\$HL$H|$ Ht$(D$0LD$8JHD$H\$HL$H|$ Ht$(D$0LD$8I;fH Hl$Hl$HD$(1ɐHH9|u8{t 1fH\$0HD$(HKHL$HHH?HHH荸HL$H9}lHKHT$0H9H)LBMII?I!HD$(NMvdFA|u-HzHHH?M:HLH׾Hl$H 11HH1Hl$H 11HH1Hl$H 1HnnHH9D\u HQH׀.}HSDH9HQH9zTD#uHQH9tQQDDfDA[u []A(()LA|H,11HH1Hl$H 11HH1Hl$H H)H{HHH?LAL!LHLH׾Hl$H 11HH1Hl$H HIL9~=vnF A\uID8u LILD8u HtHA"uIfLIL9~vE A\uIA"uLHlLHDlHHlHHlHHlHD$H\$JHHD$H\$Ld$M;fHH$H$H$H$HDŽ$D$HDŽ$HD$@HD$p1HD$pLL$pL$H$L9GA:A(w!A"uILL$pfA(WA)]DA,HuL$Mu*L\$@M9M)MII?M!O E1E1[Ld$@I9zM9fMM)MII?M!O"MefDM9.M)IMII?M!O "MH$HL$L$fI9swLd$PL$L|$`L$HL$xHD$hLLH5DH$H$HL$xL$L$Ld$PL|$`IHD$hH$LkIO|*Od*K<*MeMԃ=ȕu O*OL*LMDgLfHDŽ$LL$pILL$@A:HH$HL$A\wLA@u'HuM~GTA.t A|tILzA[t(fA\hILL$p[A]tA{uHDA}:HtH,H$Hu1HD$@L9&I)LII?L!M E1E1[HD$@H9H9HH)IHH?H!M$HBfI9I)ILII?L!M H$HH$H$DH9sUHT$HL$L\$XL$H5UpH$H$HT$HL$L\$XL$H$LSIN\JTJ<IRHƒ=u N$NLHLbdHdHDŽ$HT$pHHT$@H$H$HD$pLHL9H)HqIHH?L!H<H$L$H$H$H$LAH$HH$H$H$11E1H$HLgL@gg1gLgLLgLLgLgLLf{gHD$pLL$pL$L$M9s%GA"xfDA\uILL$pLLefLHZfHD$H\$AHD$H\$Ld$M;fHH$H$H$H$H$H$1HH9DDA rA\t A"tA~vHHf{HHqwLHHHD$P[H$HH$H9r H$BH\$HHD$xH$HHH5YxHQHHHHD$xH$H\$HHT$HH|$pHt$@LHHLunHD$pH\$HHL$@H$HĈH$H$HH9s!H5wH$H$D"HH9s/H\$HHHH5wH$H$HH\$HHL$HHT$@HD$pLHLHmH\$@HHL$HH9rHD$pHD$pH51w,D"H$HĈHD$H\$HL$H|$ Ht$(y?HD$H\$HL$H|$ Ht$(L$8M;f HHH$@H$@H$`H$XH$PD$D$D$ D$0H=juC9@u>H$hH$`(@H$PH$`H$XH$hT$G[t {HHEDEtdH$H$H$H\$HHt |t.u511HH5uT$GL$11H$PH$XHHHE|t .4HSHHH?HHHHH[H$H$H$H$H$$L$H$H$$$$$$$HDŽ$H$H$$$$$ $$0H$H$H$H$ H$($0L$8H$@HHHHH$pH$xH$H$H$$L$H$pH$$x$$$ $$0H$H$H$H$ H$($0L$8H$@HHHH$HfHl$Hl$bHmH$H$H|N9.uIy.uCƄ$:HzHHH?HH$1HH$PH$Xi1HfH9~[D 0A{t,A[uH^H$HVH$PH$X$H^H$HpH$PH$X$8H$H$H$t8$9u.H$H+$H$ H|H9 HDŽ$ H$H$$$$$ $$0H$H$H$H$ H$($0L$8H$@HHH$H$@$$H$$X$$hH$(H$0H$HH$P1H$H$H$H$H$$L$H$H$$$$$$$HDŽ$H$H$$$$$ $$0H$H$H$H$ H$($0L$8H$@HHL$I L$IHHHT$GLLL$HI9H$H$HL$hH|$`Ht$XL$IPH$IHH$I0H$IxH$H$PH$XH$8H$@H$HH$PH$X$`L$hH$8H$X$@$`$P$p$`$H$8H$$@$$P$$`$H$uH$~HT$XH~AH\$`HHL$hH9r H$H$H55n0HT$XD,HL$hH\$`H$DL$GA{6H$HuL$MPL$[H$H$?"tE1KHL$xH$HHHL$xHT$XH$H$H$DL$GAH$EtvL3L9s-LHH5[mVH$H$IH$HL$hLD$`H$HHHHwcHL$hH\$`H$DD:HD$XHL$hHT$`H$H_H9sH5lT$GTD$ D$(D$8D$HHH1; H$(H$0HDŽ$ H$HH$ H$x$($$8$$H$HHHH?H$H >H$H$HH$H$H$H$H$ $(L$0H$H$ $$($$8$($HHDŽ$PH$ H$$($$8$ $H$0H$H$H$H$ H$($0L$8H$@HHH\$`L$hL$`Mu{HL$pH$H$XH$pH$x$L$LLђHۺHDL IDHL$pHT$XDL$GIIH$H\$`NL9s4LT$PL$LLH5jLT$PL$IH\$`LD$`HL$hH$HLHL6`HD$XHHL$hHT$`H$HH9sH5iD:HT$XDL$GIM|HG$A|uMA.uDM~ GdA\tM)IxIHH?II!MM1HL9}PFA r/A)wA#t#A(rDA[tA]t AÅAwH=FLL HD$H\$HL$H|$ +1HD$H\$HL$H|$ Ld$M;f7HH$H$H$H$H1H>hYH$H$H11f IHLH9MDA H\$hA\]LCL9LD$xDLfDAb6A/A"uFH_fH9s,HH5gH$LD$xHH$D"GDA/?H_H9s,HH5>g9H$LD$xHH$D/A\u?H_H9s,HH5fH$LD$xHH$D\AbH_@H9s,HH5fH$LD$xHH$DgDAnAfu?H_H9s,HH5XfSH$LD$xHH$D AnH_H9s,HH5 fH$LD$xHH$D DAruAH_H9s.HH5efH$LD$xHH$D {Atu?H_H9s,HH5{evH$LD$xHH$D 6Au3LCfDL9LKL9H)LYMII?M!N IHt$XH|$PH$LD$xHL$pLȻ@[(H$LD$xL9BLL$pMQ@IL9L$L\$hGdA\McL9GdAuIsH9MAMII?I!K4IT$LHD$`H@'[HT$`f}#$sDD$LA A ALD$hI H$L$L$H$L$LD$xLD$hH\$PHHT$XH9r H$?D$HH$HѿH5VcQLD$hL$HHƋD$HH$HD3LKDL9|H$H\$PHT$xHH)HIHH?L!L LLȻHPHt$PH HT$xfDH9LD$hIH$Ht$xHH$H$lLOL9s=DD$GLHH5jbeH$DD$GIHH$H\$hEDILHH1H$HĘHH1H$HĘHH1H$HĘHH1H$HĘHH1rH$HĘfNLH0OLNHOLSNLKNLOLvNLNL&NHNHD$H\$)HD$H\$Ld$M;fHH$H$H$@$D|$ D|$(D|$8D|$HD|$XD|$`D|$pD$HH9u>{[ vӀ9w"t2-t$0rftnt DtuLYlHQH@D$EHD$XH\$`HL$h@tSHqfH9SH=HD$HHHH?H H+HD$pH\$xHD$5LYL9IHQIHH?HHT$pL\$xHT$XHT$ L$`L$(L$pL$8$L$HH\$ HL$(H|$0Ht$8LD$@D$HLL$PAH$HĘHT$XHT$ L$`L$(L$pL$8$L$HH\$ HL$(H|$0Ht$8LD$@D$HLL$PE1H$HĘ$tH\$`HL$hHD$XHT$XHT$ L$`L$(L$pL$8$L$HH\$ HL$(H|$0Ht$8LD$@D$HLL$PAH$HĘD|$ D|$(D|$8D|$HH\$ HT$(Ht$8HH1IWIE1H$HĘIL9~CE$AarAzvfI9MI)MII?I!IÐ IH)IHH?H!L<LMM@uLL\$`Ll$hfu HD$Xtu HD$XHT$XHT$ L$`L$(L$pL$8$L$HH\$ HL$(H|$0Ht$8LD$@D$HLL$PLAH$HĘHLVJLHI1@;JHLI1$JHHIHH9~SDfDA vA,tA]tA}uH9IH)IHH?H!H H)IHH?H!L$LILI@t6L\$HT$`Ld$hHD$XHL@QK$L\$HT$XHT$ L$`L$(L$pL$8$L$HH\$ HL$(H|$0Ht$8LD$@D$HLL$PLAH$HĘHHHHH%HHHHHD$H\$HL$@|$ D#HD$H\$HL$|$ I;fH(Hl$ Hl$ HD$0HH9~I8r@v t tHD$0H\$8t HL$8HT$01Hl$ H(H1Hl$ H(HH9~+v84~@v@ t@@ t1Hl$ H(ûHl$ H(GHHGHD$H\$HL$H|$ "HD$H\$HL$H|$ I;fH(Hl$ Hl$ HD$0HH9=8-wF wr@v׀ t tȀ"t@-t-HHl$ H(@fr@ wHHl$ H(À[fHWHwfH9|xH9DD8AaucLGfL9DD8AluHLGL9DD8Asu(LGL9Leu H1HHl$ H(HHl$ H(ÀnurHWHwH9|TH95DD8Auu?LGL9DD8DAlu!LGL9L8lu H1HHl$ H(ÀtueHWHwH9|GH9DD8Aru2LGL9v}DD8AuuLGL9vZL8eu H1HHl$ H(À{tH1Hl$ H(HHl$ H(H1Hl$ H(LH;DLH0DHH%DLHDLHDHHDLHCLHCLHCHHCHHCHD$H\$HL$H|$ SHD$H\$HL$H|$ I;fH(Hl$ Hl$ HD$0HH9~bQ8 wr@v t tӀ"uH\$8HD$0HL$@F}tH1Hl$ H(HGHl$ H(H1Hl$ H(HHL$@H\$8HHHT$0H\$8@:u H 11HL$@HHHT$0HL$8@,t f@}@}HpA"N1Hl$ H(HfH9r4@ wDFAv@ tF@ t+1Hl$ H(1Hl$ H(HH9~L@4@ wDFAvfD@ t5@ t"HHl$ H(1Hl$ H(HH9~>vKDA wEHAvA tDA tH1Hl$ H(H1Hl$ H(HA AHAHH@HD$H\$HL$H|$ f{HD$H\$HL$H|$ BI;f-H(Hl$ Hl$ HD$0H\$8HL$@HH9~A8D wr@vۀ t= tπ]u3HGHl$ H(H1Hl$ H(HxHHL$@H\$8H9~d@t$HL$8HT$0&@,t @]u]@]u@1Hl$ H(HH9~>vH4@ wDFAv@ tfD@ tHHl$ H(1Hl$ H(?HH?HD$H\$HL$H|$ HD$H\$HL$H|$ HHl$Hl$HD$ HH98 @\HWH9it8@bwE@/w@"9f@/&s@\f@bS@nw@f@@n3@rf@t@uu1`"H1Hl$HH1Hl$HHGHl$HH1Hl$HH1Hl$HHHH}VHrfH9~Hl$`HhHD$H\$HL$H|$ X HD$H\$HL$H|$ @;L$M;fHH$H$H$H$bvH$H$H$H$H$$L$H$H$h$$p$$$$H$H$0$$8$$H$$XH$0H$8H$@:[HDŽ$D$D$HH$H$H$H$hH$pH$xH$H$$L$L$7oHA1H$H$Hs1HH5Af軝H[L$I1ɻH$hH$$p$$$$$ H$H$H$:{HDŽ$D$D$HH$H$H$H$hH$pH$xH$H$$L$L$mH@1H$賛H$Hs1HH5t@oH{L$I1ɻtH$H$H$HHL$PLT$@H$H4HHHp6LD$pIHL$`HHT$@H$H|$PHHH\$@fMLD$pHL$`H~3HDH9s!HѿH5?觛LD$pHHL$`D,L$L$DM9Mk8L$K|LOTL9sBL$H\$@H$LHH56?1H$L$HIH\$@HT$PL\$@H$H4LHHR5H\$@HHL$PDH9r H$H$H5>踚D:H$L$LL$pMQM9L$I|HLIT@L9>H$H\$@H$LH5S>NH$H$IH\$@HH9sHѿH5>D}H$HLL*LL*H$HT$XL\$HH4LHH%4LD$xIHL$hHHT$HH$H|$XHHH\$HMLD$xHL$hDH~2HH9s%HѿH5d=@[LD$xHHL$hD,L$L$M9Mk8K|LOLL9,H\$HH$L$LHH5<H$L$HIH\$HHH9sHѿH5<貘D]H$HLLr)HD$H\$HL$H|$ HD$H\$HL$H|$ @I;fjHXHl$PHl$PH$H$H$H$H$$L$HRHZHHHJH9s5HT$HH5F`H|$HHO=!TuH#HHZHk8HrHHrHƃ=SusH$HLHJH$HJH$$AHL$`HLHJHD$hHJHD$x$A4Ht$@H_H$?Ho_H\$@HL$`D>Hl$PHXHD$@H\$HHL$PH|$XHt$`D$hLD$pHD$@H\$HHL$PH|$XHt$`D$hLD$p:I;fHPHl$HHl$HHRHZHHHJH9s9HT$@H5^H|$@HO={Ru H @;"HHZHk8HrH=QRu6HL$XHLHJHD$`HJHD$p$AH!^HL$X=Hl$HHPcL$M;fHH$H$H$H$H$H$lH$PH$XH$`H$hH$p$xL$H$PH$$X$$h$$x$H$PH$$X$$h$$x$H$eH$H$N:[ED$GH$HH$kH$H$ H$(H$0H$8$@L$HH$H$$ $$0$$@$D|$PH AHL$PHL$GHL$XH$H$H$H$H$$L$LL$PodHD$`D|$h11HH5 7HL$pHD$`HD$h[HD$HD|$xD$D$HJHT$xHT$HH$HT$`H$HT$GH$H$H$H$H$H$H$H$H$H$$L$LL$x{cH\$hHHD$`HL$pH9sH56HL$pHD$`H\$hD]HD$`H\$hH$HH$H$H$HHD$H\$HL$H|$ ,HD$H\$HL$H|$ 3Ld$M;f!HH$H$LBL$LJHJ Hz(LRL$I:IXHIMXI9sgL$H|$PHL$xLٿH54H$HO=PMuHHL$xH|$PL$L$L$IXD,L$L$$$$$$$H$uQL$H$t>A;[u8A9uL$L$H$H$IPH$H:IHIL$H9s0H|$`L$HT$XH53ˏHT$XH|$`L$H$H\$`HL$XHHLH)HT$`H$HWHT$XHW=Ku H$H H$H$HH$HHIHH?HLHt 8 vHHADDHKA vH|8[tH H8{u4H9fHHHHH?HfHL$MHJ IHM@H9s3LL$`HT$HHD$pLHH5_2ZHT$HLL$`IHD$pHL$`H\$XL$K4 HHHH(HT$XH$HWHT$`HW=pJuH$HH$!1oH1HfIMII?AMM@Mt A9 vIM,Gd IKA vI|A9[tM fDMA9{u3I9HILII?AMِLMXJIHIH9s-L\$`HT$@LL$hHH50HT$@LL$hL\$`HL$`H$H\$XJ4HLH'HT$XH$HWHT$`HW=IuH$H*H$1Lf{1H1+I;fHHHl$@Hl$@H$H$H$H$H$$L$HRHT$8H$H$H$)XHu;8deepu3HD$PH\$XHL$`H|$hHt$pD$xL$YHT$8Hl$@HHHD$@H\$HHL$PH|$XHt$`D$hLD$p0HD$@H\$HHL$PH|$XHt$`D$hLD$pL$M;fHH$H$H$H$H$H$aH$H$H$H$H$$L$H$H$X$$`$$p$$H$H$ $$($$8$$HH$ "H$(H$0 :[D$GH$HH$`H$H$H$H$H$$L$H$H$8$$@$$P$$`D$H ^ H$HL$GH$H$8H$@H$HH$PH$X$`L$hL$#ZHDŽ$D$11HH5,趈H$H$HDŽ${|$GHDŽ$D$D$D$D$H$pHfHl$Hl$ HmH$pH$$D$HDŽ$HH$H$H$H$H$H$XH$`H$hH$pH$x$L$L$HHX1zHD$HD$HDŽ$HH$HT$HH$H$H$H$XH$`H$hH$pH$x$L$L$*X H$H$H$HH$HH$H$H9s!H5*藆H$H$H$D}H$H$H$HLL$pHL$hH\$`J LH HT$pH$HT$`H$HT$hH$HD$PHfH9$*HD$PH~YH$HH$H$H9s,HпH5)贅H$H$HHD$PH$D,H$H$H9L$Lk8LL$hJ| JH$L$JT H9s0LD$`HT$xH|$XLH5))$HT$xH|$XLD$`IHL$`H\$XLT$pKHHTHD$pH$H\$XH$HL$`H$HH9s!H5(贄H$H$H$D:H$H$HD$PfH9LL$hN L$MQIA $MQIA $I(L $(H$H$H$H$H$ $(L$0PPHHH`H$vH$HxH:H$L$LPH9OLT$xH|$hHT$`LH5'苃HT$`H|$hLT$xIOJHD$H\$HL$H|$ HD$H\$HL$H|$ Ld$M;fHH$H$LRHRL$L\$X$L$`$L$p$$H|$XL\$`H|$h@A;{u}D|$@HD$PLL\$@HT$HLT$PH$H$H$H$H$$L$LL$@lSH$HĘøH$HĘfI;fHhHl$`Hl$`H$H$H$H$H$$L$LJLL$XHRHT$HH$H$H$DMHD$PH\$@HHHD^H\$HHT$XHZHHHJH9s0H5I H|$XHO=i=uH- HHZHk8HrH=C=u?H$HtHrH$HH$$BH IH$(Ht]H\$HHL$PH|$@D=<u+HL$pHD$x@$@$@(HHL$pHH1(Hl$`HhHD$@H\$HHL$PH|$XHt$`D$hLD$pHD$@H\$HHL$PH|$XHt$`D$hLD$pLd$M;fHH$H$LBLJL$LT$x$$$$$$H|$xL$H$tA:{uyLL$pLD$hI9f~TIXHIIHH9s8H5"~H|$hHO=:;uH ILL$pIXD,L$L$,H$HĸIMII?AMMMt A: fvIM=GdIKfDA vI|A:[tM fMA:{u3I9HILII?AMڐLMXIIHIH9s-HT$@LT$XL\$PHH5!}HT$@LT$XL\$PH\$PHD$`HL$HJ4HLHHT$PH|$hHWHT$HHW=9u HL$`H HL$` HL$pHH$Hĸø1ɐL31H [I;fHHHl$@Hl$@H$H$H$H$H$$L$HRHT$8H$H$H$HHuBHpreserveH9u3HD$PH\$XHL$`H|$hHt$pD$xL$(JHT$8Hl$@HHHD$@H\$HHL$PH|$XHt$`D$hLD$pHD$@H\$HHL$PH|$XHt$`D$hLD$pDI;fvEHHl$Hl$H\$(HD$ f[tHD$ H\$(Hl$H11Hl$HHD$H\$HL$H|$ HD$H\$HL$H|$ I;fH0Hl$(Hl$(HD$ HH ԄHW=J7u Ha;HHHR;fHTWH\$ H [=7u H1;HHH";HWH\$ H =6u H:HHH:HVH\$ H =|6u H:HHH:OHVH\$ H =96u H@:HHH1: HEVH\$ H O=5u H:HHH9HVH\$ H  =5uH 9HHD$ HQ HH9ZH=QHD$ IHl$(H0zI;fH Hl$Hl$HDH9uwHHHSHpH9KueHx DH9{ uV@(K(f.uFzDHx0@H9{0u6HD$(H\$0HHe&tHT$0HZHT$(HBHJ F&1Hl$H HD$H\$HD$H\$:I;fvmH Hl$Hl$HHHH0fH9KuAHxH9{u7HD$(H\$0HH%tHT$0HZHT$(HBHJ%1Hl$H HD$H\$HD$H\$lI;f>HPHl$HHl$HH\$`HD$XH|$pHL$hHt$xD|$D|$D|$(D|$8HPHT$HD$H\$ H|$(HL$0H|$8Ht$@HHH\$HL$pHHt$`H9HHH9HHH?H!H|$XHHT$xH9raHT$h1HH9~#DvAD 8E8w sH 1HtHHl$HHPHHl$HHPHHHHH9HD$H\$HL$H|$ Ht$(zHD$H\$HL$H|$ Ht$({HHl$Hl$HZ(Hr0HJHzLBLJ LL9HfI9H9HHLIHH?H!I<H9rc1HH9}%AL9sE48@8w sH L9~ H }1HHl$HLHLLLHHHl$Hl$HD$ HL$0MHMIL9~;NIL9M9|HHH?I!J<H9r[1HHl$HHH9~!v048@8w sH 1HuLHl$HHHH[LLLHI;fH0Hl$(Hl$(fD$8f\$:L$<@|$=ft$>LD$@LL$HD|$D|$MtTAs8T$8f2s(D\$HIHOL9t)HL$HLHD$HHL$H\$PH|$`LD$Xx)I9OLI)IAMOIH)H?L!L L%.M9tH >1Hl$8H@ûHL$HHt$XHT$PHtIHLHIL9H N MIA9uN MIE @HD8IufAu111Hl$8H@L11Hl$8H@H HSHuHT$HLD$P11HHHqH wMH9w;HHHRHsHZ B11Hl$8H@ù(HHfH NLILkD AßEKLI9HHfDH=~L MKE HȃAAEu/HQ HѿHt$XVHL$HHt$XHT$P1211Hl$8H@ûHL$HHt$XHT$PHttIHLHIL9HN MIE HD8IuN MIE HvpD8IyL11Hl$8H@HHLHD$0HD$0H9t HH/HH\$0{HH1Hl$8H@øHxHkL#LɺlH@;LLɺfHʹDHH}RDL ieE AZwAarAEHAvȐAZwA EHAv11 HD$H\$HL$;HD$H\$HL$I;fH(Hl$ Hl$ ft~f=2rfD$D$ҸHHHpHw]@H9wLHH4HvH>uHl$ H(ûHl$ H(HGdHl$ H(HHHH؉؉HHHHkH)sa@t HAH}1H\$ZHl$ H(fD$D$I;fHHHl$@Hl$@HD$PHui89wSHD$PH\$XHL$`HùHD$ ԟ H'HtHD$PHL$`H\$X lHl$@HHfHl$@HHLHl$@HHHD$H\$HL$.HD$H\$HL$:I;fvaH@Hl$8Hl$8HD$HHHLaAHHD;Ht 1Hl$8H@à 11Hl$8H@HD$H\$HL$HD$H\$HL$qI;f,H@Hl$8Hl$8HD$HHu11҄tFHH\$PHL$XHD$HHHHHL$HHt$XHT$P;H7H 71Hl$8H@û{HL$HHt$XHT$PHtvIHLHIL9HfN MIE HD8IuN MIE H|D8IuA@ 11Hl$8H@1HH!}qHxH9>HALLL9L I1H!H~ H }1HuHHLHD$0HD$0H9t HHgH H\$0趂H'H1Hl$8H@HL9}D Hs\F E8ZsJHHHH HH sH Y B11Hl$8H@ù PHعCLHHH#HLLɺA1uDHH}TDL _E AZwAarAEHAvAZwA EHAv1 1HD$H\$HL$HD$H\$HL$Ld$M;fNHH$H$H$HpH%HHH H=U LGMLPI HHl$8H@ÍpHHHpHw'H9wHHHl$8H@H.HfD$D$ I;fHPHl$HHl$HD|$D|$ H%-Hn-HL$X脴(fpHfDHNH=_K 4>HDH$H7L( 8@H9H9H)HHH?H!I0HlfD$0f\$2L$4@|$5ft$6LD$8LL$@HT$0HT$D$8D$ \$L$|$t$LD$ LL$(D$AHl$HHPfD$\$L$|$t$LD$ LL$(AHl$HHP\$L$|$t$LD$ LL$(D$E1Hl$HHPHWH{0H`Hl$XHl$XfD$hf\$jL$l@|$mft$nLD$pLL$xD|$D|$Ld$hLd$@D$pD$HH|$PtN|$EuGHT$hHT$D$pD$D$\$L$|$t$LD$LL$ E1E1Hl$XH`D$lDd$jfEpDl$hfEEl$AHfh I9W M$EII?M!L)H+ L-O|%LG|%DG|%Gd%AtBF$;AH] H9 H)LcHI?L!L% M< L% I14 fDIf HL B"!s5HRL% E|TDM T$hf2L%RIDbRtHaH HDbf|$luDd$lT$jftf9tzHfL%; A!szL=j IfDH=ffF< IIJL- OlA!rL HLftL-U fD$jL%ə L-@ L% D$jH=fB !s/HREdUM|UEATUf9T$hu D8|$lufDd$jf|$hufD$h9HT$hHT$D$pD$D$\$L$|$t$LD$LL$ E1E1Hl$XH`HT$hHT$D$pD$D$LV&\$L$|$t$LC&LD$LL$ Hl$XH`ùffDIfйfa]fDIfDfL-Ń D}HL% H9 L,E}EeEmADl$jDfE9IfNDL%ߗ G,,A!sIH N,fDIf CL$@L$HH$8H$ $@$(f|$Du!HT$HLRD$"L%@ fG\T HT$HL%@ f|$FLRD$"fG\TH$HĈuI;fH8Hl$0Hl$0HHD$(HL$@HH$HD$HD$D$nEWdL4%HL$ HHDHwHD$(HHHl$0H8oɯdI;fvcH@Hl$8Hl$8HD$HH$;D|$(plH IHL$(HD$0H.HL$(H-Hl$8H@RI;fH8Hl$0Hl$0H$H$H|$@ffHl$Hl$HmH衐HD$(H$H u HLHpH$H9t(Ht$ HT$HH@{HD$(HT$Ht$ H HPH@ =_uH0AHD{21H$芅H|$(H_HO=&uHHHPH1HH9}4 @_uHpH8fH9s8-H|$@Ht$(fDHl$Hl$!HmHl$0H8HHHѺ KH$H$蕭H$H$D;I;frH`Hl$XHl$XHXPH;H9HD$hHT$(IH)HxLHLM9L9LM)IL)MII?M!ML9I)JIH)H?L!I I9s9H|$@L\$8HT$PLLLH5)$@HT$PH|$@L\$8IILd$@H\$8LL$PI9LHQHT$8H|$hHWHT$@HW=Cu HD$PH HD$PfLD$(HL$xH\$pH :HL$0HH>H|$hHHWHL$pH9HD$HHT$0H9HHLѐH9tHHD$HHt$0H|$hHT$(H9HH)IH)H?L!HLOLL_Ld$xM9wtM)I9ILMM)I?M!K"H9tHCHD$HHt$0H|$hLD$(HwHw=0uHHG`H+GXLHG`LGXHl$XH`LL,HH!HLLHHD$H\$HL$H|$ ˪HD$H\$HL$H|$ RI;f4H0Hl$(Hl$(H\$@HL$HHD$8HxhH\$ HL$HH5%H9t1HHHHL$HH\$ HD$8tHHphL@pL H95t.HLLDHL$HH\$ HD$81t!HXh=uHHpHxpD{HpPHuwHHH0HxL@`I9,IL)I9LOMI)I?M!I2MtLL$HLDHD$8LL$HPL9LHH@XHHH8L@LNL9MI)III?M!IIH)HpXI9ruHI)I9ILIL)H?I!I9L9tHL$LHD$8HL$HPHXPHqH 3H9r!HHHHPHHHXHHPHH`Hl$(H0fHLLLKLHD$H\$HL$NHD$H\$HL$I;fHPHl$HHl$HHpXDx@Hx8=u H@8 E1DHt$0H|$@HD$XL@`L@P"H{H |HD$XHt$0H|$@L@`HHLLPL9,M)LII?M!KH$L)HL$HD$D$-EWdL4%HD$ HuHD$XHpHpXL@L@`L@PL)!LD$XMH`NMPXIIMH`HLHPLLHPHHXH9L9tL)IHH?L!LL)HH1HFD A-H ULFHxhtjHL$8LD$(LH)t4H|$XHGhH_pH H9 tH|$XH|$X1t0HHL$8Ht$0LD$(L@h=uHHpHxpHHt$0HPHHHH9rHH@xHHl$HHPHH9}&4DFAvDFAv@ vHH@LPH=tuHP8 H|$@RHD$0Hl$HHPL{6LnHD$CHD$I;fv^HHl$Hl$H\$(HD$ HHXHL$HD$HJXHL$HАHD$HL$(HT$ H9J@}Hl$HHD$H\$譤HD$H\$L$M;f(HH$H$H$D$D$HtAH$H$H$H HDŽ$HDŽ$1?LLHH$$$$$$L$L$$H$HĨHHXH$ Hf@Hl$Hl$HmH$ H$H$0L$L$f$f$$@$f$L$L$H$H$$$$$$$$L$L$L$Df$f$$@$f$L$L$H$H$$$Et H$$$$$L$L$$L$L$H$HĨ@HH9~4}Hz;H$HHHNH$H$HH$H$DFAw _A-ADfDH sH$H$H$HL$Sf$f$ $ @$ f$L$L$EuH$H$?H$H$$$$$$$$L$L$E1E1H$HĨHй HD$H\$HL$RHD$H\$HL$I;fHhHl$`Hl$`H$H\$xHD$pD|$0D|$8HHT$0D$8HP@H L`1fH8fD$Hf\$JL$L@|$Mft$NLD$PLL$XHL$HHL$0D$PD$8H|$pH@fDL9W0H HHhtjLT$HL$(HD$ Ht5H|$pHGhH_pH H9 t fH|$pH|$p1t6HD$ HL$(LT$HGh=uHOpLgpHLuHLT$HWI9LWkfDT$6HH|$pISH2HT$0.D$8D$0L \$2L$4|$5t$6LD$8L LL$@Hl$`HhDd$5HOHHWL9~BL$M9~s MMthI9MLOfL9HT$x1^D$5fD$6D$0\$2L$4T$5t$6LD$8LL$@LWhL_pHl$`Hh1rHD$8H\$@H|$pHL9}+D,L9sKD<E8w sH%DI9} H ~1HuHT$8Ld$@LnLLLLHHL9}-L(LxL9F<.HAWwAW AT5Ht"HP8Hx@vR:xuH|$pIn\$2L$4|$5t$6LD$8LL$@D$0L* L+ Hl$`Hh1HHLHD$H\$HL$/HD$H\$HL$Ld$M;f_HH$H$H$D$D$HP8HX@HHHHf$H$HhH$HL$pHD H95 t1#HHH!HL$pH$H$tGHGhHWpH5 H9 t*HHHL$pH$H$1t%H_h=uHOpHWpHH虻H$HD$hH\$@H$HQPHqXHHHH;H$HHHHXHpP@H9H)H|$@H9HLHH)H?H!HH\$hH9tH&H$HHPHL$HH$*H$HL$xtH$H$HHQ8Hy@HqHH:9HHHH$HL$xff$H$HrH:LBLL$HL9LD$XHt$PH$VHL$PHT$HH)H9HLH\$XHH)H?H!H$HDH9tHHHt$HH$HHHH~H9\D-HVHPPfH$HuU:9vPHHL&2AB$u H$ H$f{H$HY@HQ8LaHLkIHLf$fuH$H$[HD$`H\$8H$HQPHqXHHHHH$HHHHXHpPH95H)H|$8H9HLHH)H?H!HH\$`H9tH@H$H$HQPLaHIL9}.L)LyL9E|LEgAwEg EdLj$$$$D$L$L$HIHȉf$$$$L$L$$HIH$HĸHLDHӻH LHD軻H賻HD$舖HD${L$M;f HpH$hH$hH$H$xf$f$@$D$fD$L$L$HHPHL$xHwH$0HJw1HH$01AE1L$H$H$H$L$H$L$L$L$@|$GL*L$GH$H$H$H$L$H$L$L$L$L$xMc@Mk8ILD$XH$LL$PH\$hH|$`H$H$L$FH$HeLL躿T$EH\$`HHL$hH9r H$H$H5'T$ETLD$PIL$xMQ8MY@MaHLl$XM9r H$L$L$L$(H$ H$H$H$LLH5K'T$EL$xL$(L$L$HIIH$ H$H$O<@N\NdJH$H9t VH$xHJXIf{IL~IuHML9|H$L$L$L$HLH!H$H$HrH$H9HHOHH9t-H$踼H$H$H$H$Ht$XHHH?HH$H$L$E1 HILLM9gLLZfH9iL$H$IH)H9HLIL)H?L!L<L9t~L\$pL$H$L$LHۻH$H$H$H$H$L$L$L$L\$pL$L$IM9LL)I9ILMM)I?M!IM9L$H$LL6H$H$H$H$H$L$L$L$L$HH$LLHHL軱LH0H(LDHD$H\$fL$f|$@t$DD$fDL$LT$ L\$(臌HD$H\$L$|$t$DD$DL$LT$ L\$(HD$H\$HL$H|$ Ht$(LD$0HD$I;f<HHl$Hl$HD$ H\$(HL$0H|$8Ht$@LD$HHL$(HT$ I9AI9A4B4 HL$(HT$ I9BHT$8HL$@I9KIH4LDLLHf[H$HL$pOH$H$HH$HP8Hx@uz9vHH$HHI9~&HHpH9s4 ~@@wۃ @4 LHH!H$HH8H$HP@H$HXHH$HpXH$HdH$H$H$H$HL$MQ@MY8MaHI~gH$PLHHILL+H`H$HQH$H$HP`H11H$P H$H1110H$L$H$PH$HH$H$@Iy@MA8MQHHL$PH$HL$H$H$H$IIXH$LȻ!H$@H$H9uEH$H$HH$PH$H$L$HH$@H$HQHT$xH$HP`H?11H$@HHHHLH$H$H$H$H~@'HNPH$PHVXH$HfH$H9L$IPMH9 L$PL9 H$HL)IHH?L!LIL)H$H9r H$dL$PH$HL$@H$H$H5R H$L$L$PL$@HH$HL[JDN\JH$HPhHXpH H9t!HH$ H$1Ʉt?H$H$H$HGh=suHOpHWpHH,HHIH$H$H$L$PH$PHH6HH(H:uH5+uH$Hu1HtLGIIL$M1H$HZLfHw119L$H$H11HH5 L$HHH$HHD$HHHLHFH$HD$HLD$xN L$NH$PL96L$HL$@H L%L$I}hH$L$LHt9H$HGhH_pH H9tvH$ H$1tlH$PH$H$LD$xL$HL$L$@L$L$Meh=;uIMpIMepHLH5H$PH$LD$xL$HL$L$@L$IMMeM}L9LM)III?M!MHL)fH9HH)H9HLHH)H?H!IM9tPH$8LLbH$8H$PH$LD$xL$HL$L$@L$IULaK #H9IML)IU`H)HIU`IUPH)HIUPIUXH)HIUX L$IIMIUM]fDL9L$M)III?M!JL)HqLqHH$H$PHtHwIHL$M1H$HzHHw119H$HH$1H1H5H$HHHH$Ht$@H$XHHH$H$PL$HT$@H$X1H\$@HH9HLH9t 衢L$LMM{M]HLH9|L$HL$H$@H$HHH H$H$HrH$H9HHOHH9t-H$H$H$H$H$H$HHH?HH$HH$L$@E1 HILLM9_LLZH9L$8H$IH)H9HLIL)H?L!L<DL9t}L\$XL$hH$0L$(LH3H$H$H$H$HH$0L$@L$8L$hL\$XL$L$(LI9LH)I9ILIL)H?L!HI9L$0H$(HL葠H$H$(H$H$H$HL$@L$8L$0L$H$H$PL$HH$fHLPHHELf;H.L&MMjMT$HLH9|L$HH$L$@H$HHHHf[H$H$HrH$H9HHOHH9t2H$D[H$H$H$H$L$MHII?AIL$HH$L$@1%IHLL$HLL$L9iM!MiH9yH$8L$H$IH)I9ILL)H?L$L!LL9tuLl$`L$pH$0LHgH$H$H$H$8H$0L$L$L$@L$pLl$`L$IM9LL)I9ILMM)I?M!IfM9L$0H$(LL軝H$H$(H$H$H$8L$L$0L$@L$iH$H$ LL莔HH胔HLxH0IHXH$PLH$H$H$H$PL$MH8MP@MXHIHYH9sOL$PL$HL$HѿH5AL$L$L$HL$PHH$H$H$H [LTL\HFMc6?OP3M#6?OP6N?r6?OPG@`M6?OP&Mg6?OPQ: M::6?OPy@M*:Y6?OPP0MUX6?OP6@M;6?OP+@M>կ6?OPD`M$E6?OPw::NBTm6?OPI@MЮz6?OP>MAb46?OP3]M@+6?OPK`=Mex?OP7M2^OQ6?OP`0Mqc6?OPnF M|-.6?OP]LMʺgw6?OP:xM 6?OPp0 M76?OP0"N*86?OP#7@M%z6?OPzLMm6?OPLMyYT6?OPLM,H6?OP@`MmmN6?OP2 bM<?OP0@Mݐ-?OPbM6?OP 4Mv6?OP@M06?OP"M876?OP>4M'Tb6?OPG`Mo6?OP0MA&6?OP2cM#xn6?OPM眈6?OPM~36?OP Mx2I6?OP@ M 6?OP M6?OP M?b6?OPY7M$6?OPk7M@:6?OP@`M=16?OPO4!MG%P5@L#{P <@LڭcP8 MͺP5U@~MAWmP5SMBPE`lMRmP89Nz-P8LxP9@LŹ$P /MPE@M3qPR&`"M {hPh?@MMP M**OPM8nAP2+NX"lP5zNdP2<N/] xP5`Ns ynPAMoPFU`M?PF<M\P}?EM4PFMKi~PZ<`M}CPDM`@PAMsnPG M6P?`MjPn<@MP@MCCUP`&GM |P)MP5VM;PM?P McOP@ Me@PD@V MLP M=5ԃP<MBP<MkP!9!M3P>*struct { F uintptr; wg *sync.WaitGroup; f *json.encoderFunc }H ?OPVJg?OP)Vui 2?OPM 2?OP@M vX>OP="W`>OP@Wl >OPNZ-Y>OPXZ3PJ CNhS7E3PO`gMJO3PE`RN[Kh3PM`hM@23P&Mh3Pd"@M`{U3P(*M֧3PACMCP:^3P1H DMQS3PKHM.3PGDMne%3PBDMA-3P)B+Nજ3P/@M3P2 MWs?OP9]#>?OP @]?OPH@da9?OP:@eo\?OP3eA?OPJfC?OP6i>bc@OP]Llc?OP0m;"c ?OP>nk?OP#7n} ?OPzLn34v ?OPLolP ?OPL@ox@OPp< d?OP@r(c ?OPr' ?OPr-ŏ ?OPsys?OP @s\rR ?OPsF*Y:?OPO4t f ?OP8@LM9I LP6& MM0 LPPIM@M  LP MM p LPMA9N@M_ LPcALM@xx LPyA9N@MxjBJ нLP!@ MM-`!P! MM8d ?OP@M MS ?OP MM` ?OP! MMMR 1?OP;!MM4 LPV) MMϯ= LPEEMM#{>  LP! MMw$!ȘLhP8`N M VИLP@MM  LPA@LM @LP( MM ,7'  LPD& MM kV 0LP MM`P%pP "M@M@`) LPkI M@Me%Q ?OP MMɲ `LPe) MM(&: PLP" MM@f LP4 MM@DcT LP@ MMD>'ؘLhP/ M M0yB LP#" MM ?OP MM`F[g LP| MM`H鶏 оLP0" MM HHѧV оLxP;!MM o&qPW" MH3PHM@vM3P?@MM3P&D`OM@vMJ3P&O MN&l3P?BM@vMuf3P4GMMk3P2@MMT3PI@MNW!3P@N@MNP3PMG@M+NⳆ3P 3@M@Mi|3P<MM=3PLCM M-3\3P MMMPK3PeH+NM@ȃ3P<@MM@@'pP; M@M@@HpPQ2MM@@BpPF@M@MXhPt)`"MMPA@MMr PMM@@} pP`N@BM Mf=vDPO5EN MgmP>?@M@ M@HP@M MWPM M PNPM M$sPa5CM Mu;tPs5+N@ MQ`PCM@ M ES!PS?@MMx XPL@MMGjm^P)GM@M5u]PXMM `]Pd M@M@E}JPp@ MMP MM@@'TpP;!MMpWPKk MFR?6?OPG7GM3Ź?OPI@2@v7:>?OP"=8)p `\ 3PN@M M@Mi&3PQL!MMǦq3P;KM@M@vM3PLMMM+ O3PMM MMkD3P3U`4MNMԵ3PUB@M@MM)3P6Q@MNMX23PR@MNM2=3P+M@M@M@M5b3PN M MM׏3PS!M!MM#V?OPq"G 9z ?OPF*@^DMC.M?OP9@!A @7`?OPK6 `^`?OP*  ]`dH # ?OP:>  ?OP+:O#?OP>: `#Ñ ?OPd: ?OP:P ?OPGCV ?OP GMN 6?OPI >M@2@@% 6?OPXK@M8) ̟8 6?OP49M8) 0: 6?OPHN8)` ` , 6?OPJM8)< < ҵ 6?OPuKM8)`< `< T 6?OP<M8)p  6?OP=DM8)p ` 6?OP"=>M8)p NW 6?OP.3@M8) Jܙ 6?OP6M8)p DO< 6?OP6M8)p " 6?OPfG M8)] ;F 6?OP6= M8)p h 6?OP?M8)p -p 6?OP?M BB 6?OPq"`CMG ) 6?OP9 DM!A @@ 6?OPG@M!A`=`= 6?OP"MEG 6?OPvNE # # Y 6?OPK6DM `^`^Nb 6?OP*DM ]]~' 6?OPP3N7TU 6?OPBNSJ 6?OP%@M^ D 6?OP]6@ND6' 6?OP= M0 f? 6?OPr3M@@a#V 6?OP&>M C( 6?OP:>@EMC 6?OP* NVE 6?OP>:FM N'- 6?OPsN`1=zZ ?OPb>MVo 6?OP1M ?OPA` MM& Z5PB`"MM ML xQ5PCJM!MM?Op5PNCMMM@Og5PKCMGM`M@OC 5P&F+NM M?OyL5PTD+N@MM?OZA5POMGMM?O5PQ@M M`M?Opu.5PO@M@M M@O 5PHR@M@BMM@O 95PH@MENM@O8P =5PK@M@M`M@O =5P?3@M@M M@O 85PH@MCMM@O b+5P^=@M@MM@O 5Pr=@M@ M`M@O \5P9@M M M@O c"5PgM M@MM?O_q5P= MMM?O@R5P^J!MM`M?Op h LPO@d MM H-t?OP3@k M@MD3P9X8)(JNzN@M:?OP?Y^M8))K?OPK _MG)?OP>`X ??OP@` -$i?OP2obMFI?OP`/bMFv5 ?OP@p@cM7Aœc??OP&cM3?OP2rdM!8[?OP`/``dM!j4o 6?OP2N@2@u@uNqqLb 6?OPkB`M8)< < hi 6?OP/ M. . C 6?OP2M/ / [br 6?OPA`UM& G, 6?OPn&`M&i6+f 6?OPyJN!A4u< 6?OP= _M p q 6?OPD` N4tr 6?OPL`Mgg\' 1 6?OP/=Njr 6?OPC N``\'q[C 6?OP1C_M\'H ?OP3MMMO 6?OP004NZ3ƌ 6?OPVF@MV, 6?OPd@^N"Ƣq5 6?OPd:`FMҨ 6?OP cN@@s0 6?OP E!Nm`` 6?OP@aM\')BCN 6?OP:FMMq 6?OP>`aMX ?hig] 6?OPGC GM?> 6?OP@aM $j ?OP57M/,@/ 6?OP|&MF2 2 6?OP`/bMF  6?OP: M`` & 6?OP&@cM3  6?OP`/dM! f*struct { F uintptr; s *unsafeheader.Slice; size uintptr; typ *reflectlite.rtype; tmp unsafe.Pointer }Kx?OPGWLtM"x?OPIWL uM+@5Z0x?OP3X8LuM8)"ex?OPG9@X8L vM8)+@50x?OP @ZvM3?x?OPp/[L wM` ׀Ƣx?OP2@[LwM̊x?OP)[L xM Jfx?OP@`ALxMANYgVx?OP:lL yM  B@OP&8)E `  6?OP&@yM8)E Kf$ 6?OPU*@M8)    dq 6?OPBMJt t )ȳ 6?OP?@MJ@w @w  w w `x `x xA 6?OPEMJt t  t t u u Br 6?OP<M=5 f 6?OPK^MG)` ` ⽒ 6?OP@MG)  b 6?OP*M|   G 6?OP*M% %(x 6?OP#L M?\'5F N 6?OPQ M12h 6?OP+:EMo'% 6?OPDMe['``} 6?OP0Mw'ӣ% 6?OP4M3eec)gg` 6?OP-4M3@d@dddF`b`b,x?OPXK@M8)(L+N> x?OPJ` M8)(L+N2y֚PU*@-N8) `   ~q@OP?L M (,L@Mc;P?@MJ@w @O  w `P `x `O p?OP/GL MG)(L Mg?OP*`3LM(xLGM?OP*@L M(ҢL,MWH?OP0LM(LEMɞLPD@L M(TL`M?OPVFLM(,LM- LPb>L M( L@MC?OP+jLM(L MpuV?OP|&`L MF(2LM\`LP0p7LM7A( LbM֨|0x?OP 4p-L M-( @LP"o3LM3()L`M"!%x?OP[L M0{^ G N W  ?OP'6J' p%PSML MLMPTML MLM.-pPSML ML>M#_\PRML MLM??OPRML MLMlJP!TML ML M((5{HPyTML MLM gXPO!LMIL ML M uPP!LMIL ML M P9P!LMIL ML@ M nPO!LMIL ML M >FPMT!LMIL MLM aPP!LMIL M͐LM$PqRLMIL M;L`RN ҬPqSLMIL M$L@MJ PSLMIL M0L@M܁ pLPQ8LMݑLCML@M$:xLPP LMCL@M&LM8 LPTLML@MjL"M&,YE ?OP0  Yh 6?OPW"`.M%sD 6?OP96 M5I` `    @ @   Xw 6?OP'6@MJ' p%ݫQ 6?OP0@MC 6?OPv>Mq( 4q ?OP:FNs@$%HK 6?OP0 M0  Zؼ 6?OP)MFe2)d 6?OPP@Mo$^HD 6?OPM`M!129h, 6?OP0@M  YQC9P< 8LM8)(L^Mp ` ` =#x?OP.3@8LM8)(L@vM u&9P68L@M8)(L^Mp l l M/9P68LM8)(L^Mp {9P6=8LM8)(RL^Mp | | RP? 8L M8)(LMp @h xu9?OPlELME(L`OMOe4LP498L`M8)@L@MLM( 3L PuKM8)@@LzNLL@Mfeu?OPd*X8LM8)@؝LMLM(ToP=Y@M8)@L+NLM :PJ=Y8LM8)@=LML@ZM y>A LP/`LM@L@ML@vM(<1P2L M@L@ML@ M }0LP<@\LMG@[L@ML@M0 QP<@`M=5@L M@L M2T?OP@@MG) @ cPLPGM!A@xL@ML DMJ=?OP]C`@MC@]L!ML@M^rt2xLP%@@M@xL@MLDM O5P=LM@&L MqLM =?OP=@aL M@דLXNӔL`RN88xP6LM@L0NL`RN0~&?OP=cL`M@ѐL MՐL MkyLP&>LM@&LMzL@M/ˏ?OPKdLM@L MLLLJ?OP6eL@M@L ML M(/ЙLP3LM@ L@M;L M=?OPQ@LM@PLbML MB?OPD@gL M@L M͔LFM]=?OP6gLM@[L@ML@Mk?OP3hL`M@mL@ M'L MQ?OPP0iLM@L@`ML Me?OPIjLM@GLTML MF?OP>kL@M@[L@ML@MJ?OP`0lLM@L ML MFuy?OPnF@lLM@=L@EML MN?OP0L M@LL1LL~LP@oLM@yLMsL@M6)?OP@/~L`MF@PLbML MHd?OP) LMF@PLbML M?&1?OP2aLMF@PLbML Mܰw?OP"q3L@M3@L!M#L!Me?OP-43LM3@LM-LM _P:@03LM3@tL@ MELM ?/L0P>4@q3L M3@HL`MđL@-M ZL0PGq3LM3@LCMLMϫjP0q3L`M3@#LVMLM@?OP1M@EL@ML@ M 6?OPs*N8)~ , 1 _ 6?OP*`MG)P 1  q 6?OP: NUj$5 ?OP3'ND;4@? 9 @=KS 6?OP)MF12] 6?OP0 M-   v 6?OPN3 @WW3 V VWWYY Z ZwT 6?OP>M3FX$L 6?OP: M3__aaF^^X/ 6?OPP/ M!12P88LMIL ML@MLLRy~fP0`.@M-@ ` P=D8L M8)@L^ML^Mp s+ 6?OP*@Mj@@ݥ 6?OP>N?)R-άQ ?OPN>`M XF W(0P)@uLMuXjLML@MLM 0(LxPkB8LM8)XL+NL@vM̰L@M @8{LPfG`8LM8)X LzN5LzNL@M00 f(PZ@M &XL@MWL[MLMƅ?OPBLMJ(5L,Mt @) ( kM?OP*+GLMG)XbL@ ML ML M r3ZLP@_MCX]L!ML@ML@M00W`LP*@M|XaL@MϒL@ML@vM LP"ELMEXjL@LaL@MSL@M8(apP9LMXL0N4LM0LM2oP:@aLMX/L`RNPLM/L@N@8cGLPBbL@MXXLM0L@M ӔLzN(֣Pr3`LMXALML M4L@'M0(kFPDdLMXɑLMݓL@ ML M BG@LP@L@fLMXyLM}LEM#L`FMP@8P>FgL@MXL3NġLN0OLM82LP&hLMXLM[LMLM=k LPN>4LMX L@ML9N1L9NcLPQ:iLMX LLRLLtL@~M((\LPPy@@iL@MXįL@M.L@MLM Հ`LPv>@LMXGL ML@ ML@ MLP:mLMXL MyL MpL M6pLP0 LMXmL MyL MjL*MHLP57L@MX L@ML`ML &M#bkPLP)-LMFXPLbM L bMLMlXLPP/ aLMFXPLbM L bML@ M00.KhLP:`MXL@M)L@ML@vM mEARLP4@3L@M3XPL@cMbL M L M000P>/3LM3XyL MmLM LM(o$/LPM` ȱLM!X L@!M LdM5L!M<LPP/0ȱLM!X LdM LcM5L@ Me+fLPY7s@MX]LMQLM؛LM oC`LPk7tMX]L MQL M؛L M8 )dyP@@tMX8L@M=LML@M0xBPKLpMɢL,M%L5MŖL8M` L MpppHPHOL0MɢL,M%L8MŖL=M( L!Mh:}}8P\QLMɢL,M%L@9MŖL 5M L!Mf(P\PLMɢL,M%L@9MŖL ;M L!M;+0PMLpMɢL,M%L9MŖL6M L!Mx* PIML0MɢL,M%L9MŖL 8M L!MthPRLMɢL,M%L:MŖL ;M L!MppXHPESLMɢL,M%L`:MŖL4M( L!Mhg+0PQLpMɢL,M%L:MŖL5M L!M>0PUL0MɢL,M%L:MŖL7M L!MPPDFPNLMɢL,M%L:MŖL`7M L!MHo\PPLMɢL,M%L:MŖL7M L!MX.PFLpMɢL,M%L:MŖL 8M L!M7d_ PNL0MɢL,M%L:MŖL@9M L!MMcM(PILMɢL,M%L:MŖL:M L!MP JLMɢL,M%L:MŖL@ 4LN@GLNtLN?:g 6?OP5 N@2  {{&`( nn 1l A#&, w w 6?OP9 NJ +3 3 # `. `. T$+ + 0 0 BI 6?OP3@ N &..-- ) )))P**0P,,!H@.LPH`N8)@L@ML+NLM L@M(L@M8@8mPs*@+8L@N8)!L>MxLML ML@vM(uLM8p1&;LPbL NjLMBL#N(L@ML@M L+M(|kXLPyJ`!LN!ALM(LMLMUL M L M H nPa3 mLNiL ML MذL M0mL@M85L@M@[LPD`L NLM(LMLMUL M L M (pؙLP3 tL NLpMLpMhL@ MLMLM b"LP*L NfLLcL ML M L@*ML`%MHgLP5`r@L` N@2ppL`+ML&M@LM@0LMD A#ߤ+LPCL@ Np;LM>L@MLM_L@M`l\' H?OP:,L N@\L`iML`lMUjJd 6?OP@/MF 1#E"e2x'P@ev pLPPP3NL@M{L@ML+N LzN0L@MH)?OP6_LN(L MV5w 8(2|LXP2`@LN@2L@vMtL`N8L@xMjL )M(aL@M0L!M8XP'Z|hLPv`ELNEΑL %N[L@M8LOMHLMPVLMQPLMR0åLPo6`LN+L@MpL ML M(L M L@M ˓L@M(0U LP6@hLNuL M&L MAL ML ML M L M(((PP/3LN3PL@cM{L!ML MpL!ML M$L@M C ` 6?OP/MG)    (   $(W` ` )r/9?OP +nLN(uL@Mq=qq[`n`nppx @o@o8 ?[ILP 0fLNɐL ML MLEMeL!ML M L M(mL M0hP PB NL@M{L@ML+N QL _M0L M@L MH'LM`PZ98L@N8)qLML@ML@M LN(ڷLLhL@vMpΫLMQLMpP*\`N5IL'ML'M L'M@L'M`ޕL'MɒL'M0L'ML`@Mxk^P9@sLNJLMuL`(M~LM8[L@MPyL@MXmL@M`L@vMh}LMxқ-P]6LNYLNLNHnL ML MFL MkLRM|L`UM L`UMXX΄L`P/cLNiL ML`ML@MuL@M L@M0L@M8ɕL M@jL NH80CLP3cL N;L!M[LCM7LLL M ɐL!M(ƪLM0LM1LM28Kd(LP EL"NL@MِL@MݐL@ML@ML@M L@M(óLM0LM1H0P0@nL #NLFMcLMLML@3M[LCM L M0إLM8 LM@ LP *\L@$N LMLMLMLM*LM?LMoLMϗLMLM8(JHL@PGL%N G)L`M9L@MLMLL L M(L M,УLM0ۻLM1LM200)fLP*^L&N L@M L ML M 7LM QL M 8L!ML!M L M LL(!ULP3 -L(N  L@ML ML M9L MPL MDL M qL#M(L)Mh.LM]Š 6?OP7*ENGQ8 N ` #@@\^9PL*N jL`.M[LCMLzN(LN@ܪLM|LMnLMLMLML Muvx?OP*`L,N&K!T'+ox&"q4U @x `'S . { H h@P~"@Y8L`-N 8)[L@MLM:L@M(ܯL@M0L@M@LMP_L MXL+NpMLM؝LML^M0(rspP= !L.N !AL ML ML MpLMjL ML M+L MږLCML@M LM(LM,0(( `VpP/`L`0N L ML ML MpLMjL ML M+L MږLCML@M LM(LM,H8bP3@cL1N LMLMXLMɐL ML MuLMLL 7L@L(qL!M0KL M8L M@0(zpP0 ^L`3N L ML ML MpLMjL ML M+L MږLCML@M L@M(L@M,`XovLP00`L4N НLMLMjL!MޤLM@L ML M #LM(LM0LM8LMHILMX[ 6?OPZ9N8)4 x` ` @1& & , 8@* * <(  h ` ` 4( ( -@ @  @ @    02@& & %@ o& 6?OPbN 6 6 B B I I L K K  : : G G '@J @J A A B B .(6 6 0 0 c`3 `3 T? ? 2*) / / um ?OP@0 UN;G7# V(& F 418,U8,$I.;Hߧ оLPw:jL:N HL ML ML ML M L ML@MHLML ML M L M(SL M0lL M8$L M@XX϶8LPp0mLN`L MLMALML M L ML ML ML ML M LM$LM(LM) L%M*!L M+cPG``L?N`ILMLLLMwL@LLM L@M(L@M0 L!N8LMpLMxJL2MLBMLMpLM< 6?OP)Mui $ >NN#  8ЕW 6?OP=.N!A&To`;`;U<<::==S`9`9 .{99 88SH 488"h8 Ƭ(LP7*`ENGL`CMBL@MLL@M)L@M(L@M0Q: 8 N= @< ` 8 #@@\7P:L@GN L@M7LMqL MtLML@ML@M ILM(\LM0?L M4L M8ŐL"N@LMiL ML"NLMLM% 6?OP@*N{^ G NU U N#  \ \ `t `t    b b @b @b 8@i @i @f @f L@e @e @c @c p p E@h @h `T `T q,y y ` ` 2 T % Z Z e 6?OPm9`M8)` ` i $ >N N#$| ? ? D,( D D 8` ` c% sCZ"` 6?OPl`ME%M    N'#4}7 4#>N  N# dB$4y8-H 6?OP6`M'&Kff!T'+o@g@gggx&"q4hhU `i`i@iijjx `'`j`jjjS k k . {kk kkH @l@l4"h@bg 6?OP/0N'&K!@@T'+o  x&"q4U ````@@@x `'S@@ . @@{ H ``4"h@LP@0LUN L@MmL9NL9N=LMvL M`L M L@EM([L M0@L M8,L@ M@LjMHLLjMPL MX`L M\8LM`UL`aMbbL@McĥL Md LMe:LMfޤL MhtL Mp"LMxܦLL*LNL M b 6?OP9`M)&K`a`a!T'+oaa b bx&"q4`c`cU cc@@d@dddx `'dd@e@eSee . {ff `f`fH ff4"h@żs 6?OP %NG)6.    @ H P =    c+r+2'@' ##4}7017:> A+74N  H++'' P      nl %  88ty,Pd@`L_N++LLLML@M ѠLM8ȗLMPyLMhѓL MݳL ML ML M3L ML M,L MԮL MqL ML MeL ML ML M/L MnL MԤL MyL ML MJL M L M(L M0L M8L M@LMHL M`LMxLM0L@MLMįL@MfLM+L M@LMfLML`XM `LM(mL`lM0""hP`LcN00LM L M7LFM)L M}L ML`M#L`FM8 L M@LMHL M`LMhL(MqL@ ML@ MxL ML ML&MfLEM 25: > CcCfCoCsLlLmLoLtLuMcMeMnNdNlNoPcPdPePfPiPoPsScSkSmSoYiZZZlZpZs")":" ][] i)msn=nss uszz{}} G M P *( - < > m= n=%: '"'...125625???EOFHanLaoMroNaNNkoPC=VaiZZZ]: adxaesavxendfinfmagc gp in intmapnannilobjpc=ptrshau00undµsμs� != <== at fp= is lr: of on pc= sp: sp=%03d'\'') = ) m=+Inf,r2=-Inf1901199419963125: p=AhomChamDashGOGCLEAFLisuMiaoModiNewaThaiZzzz\u00 m=] = ] n=allgallpavx2basebmi1bmi2boolcallcas1cas2cas3cas4cas5cas6chandeadermsfilefuncidleint8itabjoinjsonkindnullroots + sbrksse3thistrueuglyuint ... MB, and cnt= got= max= ms, ptr tab= top=, fp:1562578125AdlamBamumBatakBuhidDograErrorGreekKhmerLatinLimbuNushuOghamOriyaOsageRunicSTermTakriTamil\u202] = (alukuarraybarlabiskeboontclosecornudeferfalsefaultgcinggscanhchanhelloinit int16int32int64jauerkkcorkscorlipawmheapnedisnjivanulikosojspanicputerrigikrozajrumgrscav schedsleepslicesolbasotavsse41sse42ssse3sudogsweeptracetrap:uccoruint8validwrite B -> Value addr= alloc base code= ctxt: curg= free goid jobs= list= m->p= max= min= next= p->m= prev= span=% util(...) , i = , not 390625<-chanArabicBrahmiCarianChakmaCommonCopticFormatGothicHangulHatranHebrewHyphenKaithiKhojkiLepchaLycianLydianRejangSCHED StringSyriacTai_LeTangutTeluguThaanaWanchoYezidi[]byte\ufffdao1990asantechan<-dajnkoefenceekavskerrno fonipafonupafrenchheplocndyukanumberobjectpamakapinyinpopcntprettyrdtscpscouseselectsimplestringstructsweep sysmontarasktimersucrcoruint16uint32uint64ulsterunifon (scan (scan) MB in Value> allocs dying= locks= m->g0= nmsys= pad1= pad2= s=nil text= zombie% CPU (, goid=, j0 = ,errno=19531259765625: type AvestanBengaliBrailleChanDirConvertCypriotDeseretElbasanElymaicGODEBUGGranthaHanunooIO waitKannadaMakasarMandaicMarchenMultaniMyanmarOsmanyaRadicalSharadaShavianSiddhamSignal SinhalaSogdianSoyomboSwapperTagalogTibetanTirhutaUNKNOWN types value=abl1943akuapemalalc97arevelaarevmdabalankabauddhabohoriccpuprofcs deutschemodengenglishflattenfloat32float64fonnapaforcegcfs gctracegs head = hepburninvaliditalianitihasalaukikametelkominpc= monotonnumber pacer: pahawh2pahawh3pahawh4panic: polytonr10 r11 r12 r13 r14 r15 r8 r9 rax rbp rbx rcx rdi rdx reverserflags rip rsi rsp runningsignal sursilvsutsilvsyscalluintptrunknownvaidikawaiting bytes, etypes is not maxpc= mcount= minLC= minutes nalloc= newval= nfreed= packed= pointer stack=[ status ) errno=1606nict1694acad1959acad48828125ArmenianBAD RANKBalineseBopomofoBugineseCherokeeCyrillicDuployanEthiopicExtenderGeorgianGoStringGujaratiGurmukhiHiraganaJavaneseKatakanaKayah_LiLinear_ALinear_BMahajaniOl_ChikiParseIntPhags_PaTagbanwaTai_ThamTai_VietTifinaghUgaritic[signal ----- stack=[baku1926basicengbiscayancgocheckcolb1945deadlockfonxsamphognorskhsistemoijekavskinfinityjyutpingkociewieluna1918newfoundno anodeoxendictpetr1708pollDescrunnablerwmutexRrwmutexWscavengescotlandspanglisstrconv.surmirantraceBuftrigger=unknown(valenciavalladerwadegilexsistemo (forced) -> node= B exp.) B work ( blocked= in use) lockedg= lockedm= m->curg= marked ms cpu, not in [ of type runtime= s.limit= s.state= sigcode= threads= unmarked wbuf1.n= wbuf2.n=(unknown), newval=, oldval=, size = , tail = 244140625: status=Bassa_VahBhaiksukiCuneiformDiacriticHex_DigitInheritedInterfaceKhudawadiLINUX_2.6MalayalamMongolianNabataeanPalmyreneParseUintSamaritanSundaneseatomicor8bad indirbad prunechan sendcomplex64copystackctxt != 0funcargs(hchanLeafinittraceinterfaceinvalid nmSpanDeadnewosprocomitemptypanicwaitpclmulqdqpreemptedprofBlockrecover: reflect: scavtracesignal 32signal 33signal 34signal 35signal 36signal 37signal 38signal 39signal 40signal 41signal 42signal 43signal 44signal 45signal 46signal 47signal 48signal 49signal 50signal 51signal 52signal 53signal 54signal 55signal 56signal 57signal 58signal 59signal 60signal 61signal 62signal 63signal 64stackpooltracebackwbufSpans} stack=[ MB goal, flushGen for type gfreecnt= heapGoal= pages at ptrSize= returned runqsize= runqueue= s.base()= spinning= stopwait= sweepgen sweepgen= targetpc= throwing= until pc=, bound = , limit = ,errno=0} /dev/stdin12207031256103515625: parsing Bad varintChorasmianDeprecatedDevanagariGC forced GOMAXPROCSGOMEMLIMITGlagoliticKharoshthiManichaeanOld_ItalicOld_PermicOld_TurkicOther_MathParseFloatPhoenicianSaurashtraatomicand8complex128debug callfloat32nanfloat64nangoroutine invalidptrmSpanInUsenotifyListowner diedprofInsertruntime: gs.state = schedtracesemacquirestackLarget.Kind == tracefree(tracegc() unknown pc of size (targetpc= , plugin: KiB work, exp.) for freeindex= gcwaiting= idleprocs= in status mallocing= ms clock, nBSSRoots= p->status= s.nelems= schedtick= span.list= timerslen=) at entry+) returned , a123456=[, elemsize=, npages = /dev/stderr/dev/stdout30517578125: frame.sp=Dives_AkuruGOMEMLIMIT=GOTRACEBACKIdeographicMarshalJSONMarshalTextMedefaidrinNandinagariNew_Tai_LueOld_PersianOld_SogdianPau_Cin_HauSignWritingSoft_DottedWarang_CitiWhite_SpaceassistQueuebad addressbad argSizebad m valuebad messagebad timedivbroken pipecgocall nilclobberfreecreated by file existsfloat32nan2float64nan1float64nan2float64nan3gccheckmarkglobalAlloci/o timeoutmSpanManualmethodargs(minTrigger=netpollInitreflect.SetreflectOffsruntime: P runtime: g runtime: p scheddetailshort writetracealloc(unreachable B (∆goal KiB total, MB stacks, [recovered] allocCount found at *( gcscandone m->gsignal= maxTrigger= nDataRoots= nSpanRoots= pages/byte preemptoff= s.elemsize= s.sweepgen= span.limit= span.state= sysmonwait= wbuf1= wbuf2=) p->status=, cons/mark -byte limit 152587890625762939453125Bidi_ControlJoin_ControlMeetei_MayekPahawh_HmongSora_SompengSyloti_Nagriabi mismatchbad flushGenbad g statusbad recoverycan't happencas64 failedchan receivedumping heapend tracegc entersyscallgcBitsArenasgcpacertraceharddecommithost is downillegal seekinvalid pathinvalid slotlfstack.pushmadvdontneedmheapSpecialmspanSpecialnot pollablens} value: {reflect.Copyreleasep: m=runtime: gp=runtime: sp=short bufferspanSetSpinesweepWaiterstimer_deletetraceStringswirep: p->m=worker mode }, want {r1= != sweepgen MB globals, MB) workers= called from failed with flushedWork idlethreads= is nil, not nStackRoots= pluginpath= s.spanclass= span.base()= syscalltick= work.nproc= work.nwait= , gp->status=, not pointer-byte block (3814697265625: unknown pc GC sweep waitGunjala_GondiMasaram_GondiMende_KikakuiOld_HungarianSIGKILL: killSIGQUIT: quitbad flushGen bad map statedouble unlockexchange fullfatal error: invalid base level 3 resetload64 failedmin too largenil stackbaseout of memoryprofMemActiveprofMemFutureruntime: seq=runtime: val=srmount errortimer expiredtimer_settimetraceStackTabvalue method xadd64 failedxchg64 failed} sched={pc: needspinning= nmidlelocked= on zero Value out of range to finalizer untyped args -thread limit 1907348632812595367431640625GC assist waitGC worker initMB; allocated Other_ID_StartPattern_SyntaxQuotation_MarkSIGABRT: abortallocfreetracebad allocCountbad restart PCbad span statefile too largefinalizer waitgcstoptheworldinvalid syntaxis a directorykey size wronglevel 2 haltedlevel 3 haltednil elem type!no module datano such deviceprotocol errorruntime: full=runtime: mmap(runtime: want=s.allocCount= semaRoot queuestack overflowstopm spinningstore64 failedsync.Cond.Waittext file busytoo many linkstoo many usersunexpected EOFunknown methodunreachable: unsafe.PointeruserArenaStatework.full != 0 with GC prog 476837158203125: no frame (sp=ASCII_Hex_DigitHanifi_RohingyaOther_LowercaseOther_UppercasePsalter_Pahlavi] morebuf={pc:advertise errorasyncpreemptoffdouble scavengeelem size wrongforce gc (idle)invalid argSizekey has expiredmalloc deadlockmisaligned maskmissing mcache?ms: gomaxprocs=network is downno medium foundno such processnot a directorypreempt SPWRITErecovery failedruntime error: runtime: frame runtime: max = runtime: min = runtimer: bad pscan missed a gstartm: m has pstopm holding psync.Mutex.Locktraceback stuck already; errno= mheap.sweepgen= not in ranges: untyped locals , not a function0123456789ABCDEF0123456789abcdef2384185791015625: value of type GC scavenge waitGC worker (idle)GODEBUG: value "Imperial_AramaicMeroitic_CursiveOther_AlphabeticSIGNONE: no trapZanabazar_Square runtime stack: after object keybad g transitionbad special kindbad summary databad symbol tablecastogscanstatusgc: unswept spangcshrinkstackoffinteger overflowinvalid argumentinvalid exchangeinvalid g statusmSpanList.insertmSpanList.removemessage too longmissing stackmapno route to hostnon-Go function object is remotereflect mismatchremote I/O errorruntime: addr = runtime: base = runtime: head = runtime: nelems=schedule: in cgosigaction failedtime: bad [0-9]*workbuf is empty spinningthreads=, 0, {interval: {, p.searchAddr = 0123456789ABCDEFX0123456789abcdefx1192092895507812559604644775390625: missing method GC assist markingOld_North_ArabianOld_South_ArabianOther_ID_ContinueSIGBUS: bus errorSIGCONT: continueSIGINT: interruptSentence_TerminalUnified_Ideographbad TinySizeClassentersyscallblockexec format errorfutexwakeup addr=g already scannedin string literalinvalid bit size key align too biglocked m0 woke upmark - bad statusmarkBits overflowno data availablenotetsleepg on g0ns}}, nil) errno=permission deniedreflect.Value.Intreflect.Value.Lenreflect: New(nil)reflect: call of results: got {r1=runtime/internal/runtime: level = runtime: nameOff runtime: pointer runtime: summary[runtime: textOff runtime: typeOff scanobject n == 0select (no cases)stack: frame={sp:swept cached spansync.RWMutex.Lockthread exhaustionunknown caller pcunknown type kindwait for GC cyclewrong medium type but memory size because dotdotdot in async preempt to non-Go memory , locked to thread298023223876953125Caucasian_AlbanianGC worker (active)RFS specific errorRegional_IndicatorVariation_Selectoradaptivestackstartbad lfnode addressbad manualFreeListconnection refusedelem align too bigexceeded max depthfile name too longforEachP: not donegarbage collectionidentifier removedin numeric literalindex out of rangeinput/output errorinstruction bytes:invalid character multihop attemptedno child processesno locks availableoperation canceledreflect.Value.Elemreflect.Value.Typereflect.Value.Uintreflect: Zero(nil)runtime: gp: gp=runtime: getg: g=runtime: npages = runtime: range = {runtime: textAddr stopping the worldstreams pipe errorsync.RWMutex.RLocksystem page size (tracebackancestorsuse of closed filevalue out of range [controller reset] called using nil *, g->atomicstatus=, gp->atomicstatus=14901161193847656257450580596923828125Canadian_AboriginalGC mark terminationGC work not flushedIDS_Binary_OperatorKhitan_Small_ScriptPattern_White_SpaceSIGTRAP: trace trap__vdso_gettimeofday_cgo_setenv missingadjusttimers: bad pafter array elementbad file descriptorbad kind in runfinqbad notifyList sizebad runtime·mstartbad sequence numberbad value for fieldcgocall unavailabledevice not a streamdirectory not emptydisk quota exceededdodeltimer: wrong Pfile already closedfile already existsfile does not existinvalid key or typem not found in allmmarking free objectmarkroot: bad indexmissing deferreturnmspan.sweep: state=notesleep not on g0nwait > work.nprocspanic during mallocpanic during panic panic holding lockspanicwrap: no ( in panicwrap: no ) in reflect.Value.Bytesreflect.Value.Fieldreflect.Value.Floatreflect.Value.Indexreflect.Value.IsNilreflect.Value.Sliceruntime: pcdata is runtime: preempt g0semaRoot rotateLeftskip this directorystopm holding lockssysMemStat overflowtoo many open filesunaligned sysUnusedunexpected g statusunknown wait reason markroot jobs done to unallocated span37252902984619140625Egyptian_HieroglyphsIDS_Trinary_OperatorMeroitic_HieroglyphsSIGALRM: alarm clockSIGTERM: terminationSeek: invalid offsetSeek: invalid whenceTerminal_Punctuation__vdso_clock_gettimebad font file formatbad system page sizebad use of bucket.bpbad use of bucket.mpchan send (nil chan)close of nil channelconnection timed outdodeltimer0: wrong Pfloating point errorforcegc: phase errorgo of nil func valuegopark: bad g statusinconsistent lockedminvalid request codeinvalid write resultis a named type filejson: Unmarshal(nil json: Unmarshal(nil)json: error calling key has been revokedmalloc during signalnotetsleep not on g0p mcache not flushedpacer: assist ratio=preempt off reason: reflect.Value.SetIntreflect.makeFuncStubruntime: double waitruntime: pipe failedsemaRoot rotateRighttime: invalid numbertrace: out of memorywirep: already in goworkbuf is not emptywrite of Go pointer of unexported method pcHeader.textStart= previous allocCount=, levelBits[level] = 186264514923095703125931322574615478515625Anatolian_HieroglyphsInscriptional_PahlaviOther_Grapheme_Extend_cgo_unsetenv missingafter top-level valueasync stack too largebad type in compare: block device requiredcheckdead: runnable gconcurrent map writesdefer on system stackfindrunnable: wrong pin string escape codelink has been severednegative shift amountpackage not installedpanic on system stackpreempt at unknown pcread-only file systemreflect.Value.Complexreflect.Value.Pointerreflect.Value.SetUintreleasep: invalid argruntime: confused by runtime: newstack at runtime: newstack sp=runtime: searchIdx = runtime: work.nwait= stale NFS file handlestartlockedm: m has pstartm: m is spinningstate not recoverabletimer data corruptionunexpected value step into Go struct field received during fork to array with length 4656612873077392578125Inscriptional_ParthianNyiakeng_Puachue_HmongSIGSTKFLT: stack faultSIGTSTP: keyboard stopaddress already in useargument list too longassembly checks failedbad g->status in readybad sweepgen in refillcall not at safe pointcannot allocate memoryduplicated defer entryfreeIndex is not validgetenv before env initheadTailIndex overflowinteger divide by zerointerface conversion: json: unknown field %qminpc or maxpc invalidnetwork is unreachablenon-Go function at pc=oldoverflow is not nilprotocol not availableprotocol not supportedreflect.Value.SetFloatremote address changedruntime.main not on m0runtime: out of memoryruntime: work.nwait = runtime:scanstack: gp=s.freeindex > s.nelemsscanstack - bad statussend on closed channelspan has no free spacestack not a power of 2trace reader (blocked)trace: alloc too largeunexpected method stepwirep: invalid p state into Go value of type ) must be a power of 2 23283064365386962890625Logical_Order_ExceptionMB during sweep; swept Noncharacter_Code_PointSIGIO: i/o now possibleSIGSYS: bad system call", missing CPU support bytes.Buffer: too largechan receive (nil chan)close of closed channeldevice or resource busyfatal: morestack on g0 garbage collection scangcDrain phase incorrectindex out of range [%x]interrupted system callinvalid m->lockedInt = json: cannot unmarshal left over markroot jobsmakechan: bad alignmentmissing type in runfinqmisuse of profBuf.writenanotime returning zerono space left on deviceoperation not permittedoperation not supportedpanic during preemptoffprocresize: invalid argreflect.Value.Interfacereflect.Value.NumMethodreflect.methodValueCallruntime: internal errorruntime: netpoll failedruntime: s.allocCount= s.allocCount > s.nelemsschedule: holding locksshrinkstack at bad timespan has no free stacksstack growth after forksyntax error in patternsystem huge page size (unexpected map key typeunexpected signal valueunlock of unlocked lockwork.nwait > work.nproc116415321826934814453125582076609134674072265625bad defer entry in panicbypassed recovery failedcan't scan our own stackconnection reset by peerdouble traceGCSweepStartfunction not implementedgcDrainN phase incorrecthash of unhashable type json: unsupported type: level 2 not synchronizedlink number out of rangemissing likely tags dataout of streams resourcespageAlloc: out of memoryqueuefinalizer during GCrange partially overlapsrunqsteal: runq overflowruntime: epollctl failedruntime: found obj at *(runtime: markroot index runtime: p.searchAddr = span has no free objectsstack trace unavailable structure needs cleaningupdate during transition to unused region of span2910383045673370361328125GODEBUG: can not enable "_cgo_thread_start missingallgadd: bad status Gidlearena already initializedbad status in shrinkstackbad system huge page sizechansend: spurious wakeupcheckdead: no m for timercheckdead: no p for timerinconsistent poll.fdMutexinvalid cross-device linkjson: Unexpected key typejson: unsupported value: missing stack in newstackmissing traceGCSweepStartno buffer space availableno such device or addressno such file or directoryoperation now in progressreflect.Value.OverflowIntreflect.Value.SetMapIndexreflect: Bits of nil Typereleasep: invalid p stateremaining pointer buffersresource deadlock avoidedruntime: epollwait on fd runtime: program exceeds runtime·lock: lock countslice bounds out of rangesocket type not supportedstartm: p has runnable gsstoplockedm: not runnableunexpected fault address using unaddressable value1455191522836685180664062572759576141834259033203125SIGSTOP: stop, unblockablecall from unknown functioncorrupted semaphore ticketencountered a cycle via %sentersyscall inconsistent forEachP: P did not run fnfreedefer with d.fn != nilinvalid request descriptorname not unique on networknegative idle mark workersno CSI structure availableno message of desired typenotewakeup - double wakeupout of memory (stackalloc)persistentalloc: size == 0reflect.Value.OverflowUintrequired key not availableruntime: bad span s.state=runtime: pcHeader: magic= runtime: pipe failed with shrinking stack in libcallstartlockedm: locked to meunknown ABI parameter kinduse of invalid sweepLockerwakep: negative nmspinning is not assignable to type not in stack roots range [363797880709171295166015625: unexpected return pc for G waiting list is corruptedSIGILL: illegal instructionSIGXCPU: cpu limit exceededaddress not a stack addressafter object key:value pairchannel number out of rangecommunication error on sendfailed to set sweep barriergcstopm: not waiting for gcgrowslice: len out of rangeinternal lockOSThread errorinvalid profile bucket typekey was rejected by servicemakechan: size out of rangemakeslice: cap out of rangemakeslice: len out of rangemspan.sweep: bad span statenot a XENIX named type fileprogToPointerMask: overflowreflect.Value.UnsafePointerrunlock of unlocked rwmutexruntime: asyncPreemptStack=runtime: checkdead: find g runtime: checkdead: nmidle=runtime: corrupted polldescruntime: netpollinit failedruntime: thread ID overflowruntime·unlock: lock countsignal received during forksigsend: inconsistent statestack size not a power of 2stopTheWorld: holding lockstime: invalid location nametimer when must be positivework.nwait was > work.nproc args stack map entries for !#$%&()*+-./:;<=>?@[]^_{|}~ 18189894035458564758300781259094947017729282379150390625FixedStack is not power-of-2Prepended_Concatenation_MarkSIGHUP: terminal line hangupSIGWINCH: window size change[originating from goroutine comparing uncomparable type destination address requiredfatal: morestack on gsignal file descriptor in bad statefindrunnable: netpoll with pfound pointer to free objectgcBgMarkWorker: mode not setgcstopm: negative nmspinninginvalid Extension or Variantinvalid runtime symbol tablejson: Unmarshal(non-pointer mheap.freeSpanLocked - span missing stack in shrinkstackmspan.sweep: m is not lockedneed padding in bucket (key)newproc1: new g is not Gdeadnewproc1: newg missing stacknotewakeup - double wakeup (os: process already finishedprotocol driver not attachedreflect.MakeSlice: len > capregion exceeds uintptr rangeruntime: bad lfnode address runtime: casgstatus: oldval=runtime: no module data for save on system g not allowedunexpected end of JSON input cannot be converted to type 45474735088646411895751953125SIGPIPE: write to broken pipeSIGPWR: power failure restartaddspecial on invalid pointerdoRecordGoroutineProfile gp1=executing on Go runtime stackgc done but gcphase != _GCoffgfput: bad status (not Gdead)invalid function symbol tableinvalid length of trace eventio: read/write on closed pipemachine is not on the networkneed padding in bucket (elem)no XENIX semaphores availablenumerical result out of rangeoperation already in progresspadding contained in alphabetprotocol family not supportedreflect: Elem of invalid typereflect: In of non-func type reflect: Key of non-map type runtime: impossible type kindruntime: levelShift[level] = runtime: marking free object runtime: mmap: access denied runtime: p.gcMarkWorkerMode= runtime: split stack overflowruntime: sudog with non-nil cruntime: summary max pages = runtime: traceback stuck. pc=scanobject of a noscan objectsemacquire not on the G stackstring concatenation too longsyntax error scanning booleantoo many open files in system (types from different scopes) in prepareForSweep; sweepgen locals stack map entries for 227373675443232059478759765625GODEBUG: unknown cpu feature "MapIter.Key called before NextSIGPROF: profiling alarm clockSIGUSR1: user-defined signal 1SIGUSR2: user-defined signal 2SIGVTALRM: virtual alarm clockabi mismatch detected between assignment to entry in nil mapcheckdead: inconsistent countsfailed to get system page sizefreedefer with d._panic != nilin exponent of numeric literalinappropriate ioctl for deviceinvalid pointer found on stacklooking for beginning of valueprotocol wrong type for socketreflect: Elem of invalid type reflect: Len of non-array typereflect: Out of non-func type runqputslow: queue is not fullruntime: bad pointer in frame runtime: epollctl failed with runtime: found in object at *(runtime: impossible type kind socket operation on non-socketsync: inconsistent mutex statesync: unlock of unlocked mutexunsafe.Slice: len out of range) not in usable address space: ...additional frames elided... .lib section in a.out corrupted11368683772161602973937988281255684341886080801486968994140625SIGSEGV: segmentation violationbad write barrier buffer boundscall from within the Go runtimecannot assign requested addresscasgstatus: bad incoming valuescheckmark found unmarked objectentersyscallblock inconsistent fatal: bad g in signal handler fmt: unknown base; can't happenin literal null (expecting 'l')in literal null (expecting 'u')in literal true (expecting 'e')in literal true (expecting 'r')in literal true (expecting 'u')internal error - misuse of itabjson: invalid number literal %qmalformed time zone informationnon in-use span in unswept listpacer: sweep done at heap size pattern contains path separatorreflect.MakeSlice: negative capreflect.MakeSlice: negative lenreflect: Len of non-array type resetspinning: not a spinning mruntime: cannot allocate memoryruntime: split stack overflow: slice bounds out of range [%x:]slice bounds out of range [:%x]unsafe.String: len out of range (types from different packages)---corhbshebkinspayid28421709430404007434844970703125MapIter.Value called before NextSIGFPE: floating-point exceptionSIGTTOU: background write to tty" not supported for cpu option "end outside usable address spacein literal false (expecting 'a')in literal false (expecting 'e')in literal false (expecting 'l')in literal false (expecting 's')invalid limiter event type foundlanguage: tag is not well-formednon-Go code disabled sigaltstacknumerical argument out of domainpanic while printing panic valuereflect.nameFrom: tag too long: reflect: NumIn of non-func type removespecial on invalid pointerresource temporarily unavailableruntime: fixalloc size too largeruntime: mcall function returnedruntime: newstack called from g=runtime: root level max pages = runtime: stack split at bad timeruntime: sudog with non-nil elemruntime: sudog with non-nil nextruntime: sudog with non-nil prevscanstack: goroutine not stoppedscavenger state is already wiredslice bounds out of range [%x::]slice bounds out of range [:%x:]slice bounds out of range [::%x]software caused connection abortsweep increased allocation countsync: negative WaitGroup counteruse of closed network connection of method on nil interface value to pointer to array with length 142108547152020037174224853515625710542735760100185871124267578125GODEBUG: no value specified for "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATNSIGCHLD: child status has changedSIGTTIN: background read from ttySIGXFSZ: file size limit exceededbase outside usable address spaceconcurrent map read and map writefindrunnable: negative nmspinningfreeing stack not in a stack spanmin must be a non-zero power of 2misrounded allocation in sysAllocreflect.nameFrom: name too long: reflect: Field index out of rangereflect: NumOut of non-func type reflect: array index out of rangereflect: slice index out of rangeruntime: castogscanstatus oldval=runtime: epollcreate failed with runtime: failed mSpanList.insert runtime: goroutine stack exceeds runtime: memory allocated by OS [runtime: name offset out of rangeruntime: text offset out of rangeruntime: type offset out of rangeskip everything and stop the walkslice bounds out of range [%x:%y]stackalloc not on scheduler stackstoplockedm: inconsistent lockingtimer period must be non-negativetoo many levels of symbolic linkswaiting for unsupported file type3552713678800500929355621337890625Other_Default_Ignorable_Code_PointSIGURG: urgent condition on socketdoaddtimer: P already set in timerforEachP: sched.safePointWait != 0illegal base64 data at input byte in \u hexadecimal character escapemspan.ensureSwept: m is not lockedout of memory allocating allArenasreflect: ChanDir of non-chan type reflect: Field index out of boundsreflect: Field of non-struct type reflect: string index out of rangeruntime.SetFinalizer: cannot pass runtime: g is running but p is notruntime: netpollBreak write failedschedule: spinning with local workslice bounds out of range [%x:%y:]slice bounds out of range [:%x:%y]too many references: cannot splice1776356839400250464677810668945312588817841970012523233890533447265625ParseAcceptLanguage: invalid weightattempt to clear non-empty span setfile type does not support deadlinefindrunnable: netpoll with spinninggreyobject: obj not pointer-alignedmheap.freeSpanLocked - invalid freemismatched begin/end of activeSweepnetwork dropped connection on resetpersistentalloc: align is too largepidleput: P has non-empty run queuereflect.MakeSlice of non-slice typeruntime: close polldesc w/o unblockryuFtoaFixed32 called with prec > 9traceback did not unwind completelytransport endpoint is not connected) is larger than maximum page size () is not Grunnable or Gscanrunnable 0123456789abcdefghijklmnopqrstuvwxyz444089209850062616169452667236328125Go pointer stored into non-Go memoryaccessed data from freed user arena accessing a corrupted shared libraryjson: encoding error for type %q: %qkey size not a multiple of key alignlfstack node allocated from the heapmethod ABI and value ABI don't alignreflect: NumField of non-struct typeruntime: bad notifyList size - sync=runtime: invalid pc-encoded table f=runtime: invalid typeBitsBulkBarrierruntime: marked free object in span runtime: mcall called on m->g0 stackruntime: sudog with non-nil waitlinkruntime: unblock on closing polldescruntime: wrong goroutine in newstackryuFtoaFixed64 called with prec > 18signal arrived during cgo execution startm: P required for spinning=truestrings.Builder.Grow: negative countsyntax error scanning complex numberuncaching span but s.allocCount == 0user arena span is on the wrong list) is smaller than minimum page size (2220446049250313080847263336181640625_cgo_notify_runtime_init_done missingall goroutines are asleep - deadlock!bytes.Buffer: truncation out of rangecannot exec a shared library directlycannot set a key on a private use tagfailed to reserve page summary memorylanguage: region is not a valid ccTLDmethod ABI and value ABI do not alignoperation not possible due to RF-killreflect.Value.Bytes of non-byte arrayreflect.Value.Bytes of non-byte slicereflect.Value.Bytes of non-rune slicereflect.Value.Convert: value of type reflect: Bits of non-arithmetic Type reflect: NumField of non-struct type reflect: funcLayout of non-func type runtime: allocation size out of rangeruntime: netpoll: break fd ready for runtime: unexpected SPWRITE function setprofilebucket: profile already setstartTheWorld: inconsistent mp->nextpvalue too large for defined data type1110223024625156540423631668090820312555511151231257827021181583404541015625after decimal point in numeric literalarg size to reflect.call more than 1GBcan not access a needed shared librarycannot read stack of running goroutineconcurrent map iteration and map writeelem size not a multiple of elem aligngcBgMarkWorker: blackening not enabledindex out of range [%x] with length %yinternal error: exit hook invoked exitmakechan: invalid channel element typeruntime: blocked read on free polldescruntime: sudog with non-false isSelectunreachable method called. linker bug?277555756156289135105907917022705078125internal error: exit hook invoked panicmismatched count during itab table copymspan.sweep: bad span state after sweepout of memory allocating heap arena mapreflect.MakeMapWithSize of non-map typeruntime: blocked write on free polldescruntime: casfrom_Gscanstatus failed gp=stack growth not allowed in system callsuspendG from non-preemptible goroutinetraceback: unexpected SPWRITE function transport endpoint is already connected13877787807814456755295395851135253906256938893903907228377647697925567626953125MapIter.Key called on exhausted iteratoraddress family not supported by protocolbulkBarrierPreWrite: unaligned argumentscannot free workbufs when work.full != 0failed to acquire lock to reset capacityinvalid span in heapArena for user arenamarkWorkerStop: unknown mark worker modemust be able to track idle limiter eventrefill of span with free space remainingreflect.Value.SetBytes of non-byte slicereflect.Value.setRunes of non-rune sliceruntime.SetFinalizer: first argument is runtime: netpollBreak write failed with runtime: out of memory: cannot allocate runtime: typeBitsBulkBarrier with type ryuFtoaFixed32 called with negative prec received on thread with no signal stack 34694469519536141888238489627838134765625MapIter.Next called on exhausted iteratorattempted to add zero-sized address rangebinary: varint overflows a 64-bit integercan't call pointer on a non-pointer ValuegcSweep being done but phase is not GCoffmheap.freeSpanLocked - invalid span statemheap.freeSpanLocked - invalid stack freeobjects added out of order or overlappingreflect.Value.Addr of unaddressable valueruntime.SetFinalizer: second argument is runtime: blocked read on closing polldescruntime: typeBitsBulkBarrier without typestopTheWorld: not stopped (stopwait != 0)strconv: illegal AppendInt/FormatInt base received but handler not on signal stack 173472347597680709441192448139190673828125867361737988403547205962240695953369140625MapIter.Value called on exhausted iteratoracquireSudog: found s.elem != nil in cachefatal error: cgo callback before cgo call looking for beginning of object key stringnon-empty mark queue after concurrent markon a locked thread with no template threadout of memory allocating checkmarks bitmappersistentalloc: align is not a power of 2reflect: cannot convert slice with length runtime: blocked write on closing polldescsweep: tried to preserve a user arena spanunexpected signal during runtime executiongcBgMarkWorker: unexpected gcMarkWorkerModegrew heap, but no adequate free space foundinterrupted system call should be restartedmethodValueCallFrameObjs is not in a modulemult64bitPow10: power of 10 is out of rangemultiple Read calls return no data or errornon in-use span found with specials bit setreflect: nil type passed to Type.Implementsroot level max pages doesn't fit in summaryruntime.SetFinalizer: finalizer already setruntime.SetFinalizer: first argument is nilruntime: casfrom_Gscanstatus bad oldval gp=runtime: releaseSudog with non-nil gp.paramruntime:stoplockedm: lockedg (atomicstatus=unfinished open-coded defers in deferreturnunknown runnable goroutine during bootstrap using value obtained using unexported fieldactive sweepers found at start of mark phaseencoding alphabet contains newline charactergcmarknewobject called while doing checkmarkmult128bitPow10: power of 10 is out of rangeno P available, write barriers are forbiddenout of memory allocating heap arena metadatareflect: funcLayout with interface receiver reflect: slice length out of range in SetLenruntime: cannot remap pages in address spaceruntime: lfstack.push invalid packing: node=span on userArena.faultList has invalid sizeunsafe.Slice: ptr is nil and len is not zerocannot send after transport endpoint shutdownexitsyscall: syscall frame is no longer validproduced a trigger greater than the heap goalreflect: internal error: invalid method indexruntime: failed mSpanList.remove span.npages=transitioning GC to the same state as before?tried to run scavenger from another goroutineunsafe.String: ptr is nil and len is not zero (bad use of unsafe.Pointer? try -d=checkptr) language: subtag %q is well-formed but unknownmemory reservation exceeds address space limitpanicwrap: unexpected string after type name: reflect.Value.Slice: slice index out of boundsreleased less than one physical page of memoryruntime: failed to create new OS thread (have runtime: name offset base pointer out of rangeruntime: panic before malloc heap initialized runtime: text offset base pointer out of rangeruntime: type offset base pointer out of rangeslice bounds out of range [:%x] with length %ystopTheWorld: not stopped (status != _Pgcstop)sysGrow bounds not aligned to pallocChunkBytestried to park scavenger from another goroutineP has cached GC work at end of mark terminationattempting to link in too many shared librariesfailed to acquire lock to start a GC transitionfinishGCTransition called without starting one?function symbol table not sorted by PC offset: racy sudog adjustment due to parking on channelreflect.Value.Bytes of unaddressable byte arrayslice bounds out of range [::%x] with length %ytried to sleep scavenger from another goroutinenot enough significant bits after mult64bitPow10runtime: cannot map pages in arena address spaceslice bounds out of range [:%x] with capacity %ystrconv: illegal AppendFloat/FormatFloat bitSizecasgstatus: waiting for Gwaiting but is Grunnabledelayed zeroing on data that may contain pointersfully empty unfreed span set block found in resetinvalid memory address or nil pointer dereferenceinvalid or incomplete multibyte or wide characternot enough significant bits after mult128bitPow10panicwrap: unexpected string after package name: reflect.Value.Slice: slice of unaddressable arrayruntime.reflect_makemap: unsupported map key types.allocCount != s.nelems && freeIndex == s.nelemsslice bounds out of range [::%x] with capacity %ysweeper left outstanding across sweep generationsattempt to execute system stack code on user stackmallocgc called with gcphase == _GCmarkterminationrecursive call during initialization - linker skewJSON decoder out of sync - data changing underfoot?fatal: systemstack called from unexpected goroutinelimiterEvent.stop: invalid limiter event type foundpotentially overlapping in-use allocations detectedcasfrom_Gscanstatus: gp->status is not in scan statemallocgc called without a P or outside bootstrappingruntime.SetFinalizer: pointer not in allocated blockruntime: cannot disable permissions in address spaceruntime: use of FixAlloc_Alloc before FixAlloc_Init span set block with unpopped elements found in resetreflect.Value.Slice: string slice index out of boundsreflect: non-interface type passed to Type.Implements goroutine running on other thread; stack unavailable bytes.Buffer: reader returned negative count from ReadgcControllerState.findRunnable: blackening not enabledno goroutines (main called runtime.Goexit) - deadlock!casfrom_Gscanstatus:top gp->status is not in scan stategentraceback callback cannot be used with non-zero skipmheap.freeSpanLocked - invalid free of user arena chunkos: invalid use of WriteAt on file opened with O_APPENDreflect: internal error: invalid use of makeMethodValuein gcMark expecting to see gcphase as _GCmarkterminationnon-empty pointer map passed for non-pointer-size valuesprofilealloc called without a P or outside bootstrappingptrEncoder.encode should have emptied ptrSeen via defersstrings: illegal use of non-zero Builder copied by valuegentraceback cannot trace user goroutine on its own stacknon-Go code set up signal handler without SA_ONSTACK flagruntime: checkmarks found unexpected unmarked object obj=runtime: failed to disable profiling timer; timer_delete(runtime: netpoll: break fd ready for something unexpectedsync: WaitGroup misuse: Add called concurrently with Waitjson: cannot set embedded pointer to unexported struct: %vreflect: reflect.Value.Elem on an invalid notinheap pointerruntime: mmap: too much locked memory (check 'ulimit -l'). sync: WaitGroup is reused before previous Wait has returnedaddr range base and limit are not in the same memory segmentmanual span allocation called with non-manually-managed typereflect: call of reflect.Value.Len on ptr to non-array Valueruntime: failed to configure profiling timer; timer_settime(abiRegArgsType needs GC Prog, update methodValueCallFrameObjsruntime: may need to increase max user processes (ulimit -u) found bad pointer in Go heap (incorrect use of unsafe or cgo?)limiterEvent.stop: found wrong event in p's limiter event slotreflect: reflect.Value.Pointer on an invalid notinheap pointerruntime: internal error: misuse of lockOSThread/unlockOSThreadmalformed GOMEMLIMIT; see `go doc runtime/debug.SetMemoryLimit`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_json: invalid number literal, trying to unmarshal %q into Numberruntime.SetFinalizer: first argument was allocated into an arenaruntime.SetFinalizer: pointer not at beginning of allocated blockuser arena chunk size is not a mutliple of the physical page sizeAllThreadsSyscall6 results differ between threads; runtime corruptedreflect: reflect.Value.UnsafePointer on an invalid notinheap pointerbytes.Buffer: UnreadByte: previous operation was not a successful readjson: invalid use of ,string struct tag, trying to unmarshal %q into %vtoo many concurrent operations on a single file or socket (max 1048575)MapIter.Next called on an iterator that does not have an associated map Valuecannot convert slice with length %y to array or pointer to array with length %xjson: invalid use of ,string struct tag, trying to unmarshal unquoted value into %vreflect.Value.Interface: cannot return value obtained from unexported field or methodreflect: New of type that may not be allocated in heap (possibly undefined cgo C type)xtg-x-cel-gaulishen-GB-oxendicten-x-i-defaultund-x-i-enochiansee-x-i-mingonan-x-zh-minen-US-u-va-posix00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopoBrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCpmnCprtCyrlCyrsDevaDogrDsrtDuplEgydEgyhEgypElbaEthiGeokGeorGlagGongGonmGothGranGrekGujrGuruHanbHangHaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamoJavaJpanJurcKaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMendMercMeroMlymModiMongMoonMrooMteiMultMymrNarbNbatNewaNkdbNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhliPhlpPhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaamQaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabeQabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabwQabxRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdShuiSiddSindSinhSoraSoyoSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglgThaaThaiTibtTirhUgarVaiiVispWaraWchoWoleXpeoXsuxYiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzzAAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLAAZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTNBUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPTCRRICSCTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDYHYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEUEZ FIINFJJIFKLKFMSMFOROFQFRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGRRCGSGTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERLILSRIMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM KNNAKP KRORKWWTKYKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTULUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQMRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOORNPPLNQNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPMPNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTTQUQVVVQWWWQXXXQYYYQZZZREEURHHOROOURSRUUSRWWASAAUSBLBSCYCSDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYRSZWZTAAATCCATDCDTFTGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTVUVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVUUTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXOOOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYTYUUGZAAFZMMBZRARZWWEZZZZ---aaaraaiaakaauabbkabiabqabrabtabyacdaceachadaadeadjadyadzaeveaebaeyaffragcagdaggagmagoagqahaahlahoajgakkaakkalaalialnaltammhammamnamoampanrgancankannanyaojaomaozapcapdapeaprapsapzarraarcarharnaroarqarsaryarzassmasaaseasgasoastataatgatjauyavvaavlavnavtavuawaawbawoawxayymaybazzebaakbalbanbapbarbasbavbaxbbabbbbbcbbdbbjbbpbbrbcfbchbcibcmbcnbcobcqbcubddbeelbefbehbejbembetbewbexbezbfdbfqbftbfybgulbgcbgnbgxbhihbhbbhgbhibhkbhlbhobhybiisbibbigbikbimbinbiobiqbjhbjibjjbjnbjobjrbjtbjzbkcbkmbkqbkubkvbltbmambmhbmkbmqbmubnenbngbnmbnpboodbojbombonbpybqcbqibqpbqvbrrebrabrhbrxbrzbsosbsjbsqbssbstbtobttbtvbuabucbudbugbukbumbuobusbuubvbbwdbwrbxhbyebynbyrbysbyvbyxbzabzebzfbzhbzwcaatcancbjcchccpcehecebcfacggchhachkchmchochpchrcjacjmcjvckbcklckockyclacmecmgcooscopcpscrrecrhcrjcrkcrlcrmcrscsescsbcswctdcuhucvhvcyymdaandaddafdagdahdakdardavdbddbqdccddndeeudeddendgadghdgidgldgrdgzdiadjednjdobdoidopdowdridrsdsbdtmdtpdtsdtyduaducduddugdvivdvadwwdyodyudzzodzgebueeweefieglegyekaekyelllemaemienngennenqeopoeriesesuetstetrettetuetxeuusewoextfaasfaafabfagfaifanffulffiffmfiinfiafilfitfjijflrfmpfoaofodfonforfpefqsfrrafrcfrpfrrfrsfubfudfuefuffuhfuqfurfuvfuyfvrfyrygalegaagafgaggahgajgamgangawgaygbagbfgbmgbygbzgcrgdlagdegdngdrgebgejgelgezgfkggnghsgilgimgjkgjngjugkngkpgllgglkgmmgmvgnrngndgnggodgofgoigomgongorgosgotgrbgrcgrtgrwgswguujgubgucgudgurguwguxguzgvlvgvfgvrgvsgwcgwigwtgyihaauhaghakhamhawhazhbbhdyheebhhyhiinhiahifhighihhilhlahluhmdhmthndhnehnjhnnhnohomohochojhothrrvhsbhsnhtathuunhuihyyehzerianaianiaribaibbibyicaichidndiddidiiduieleifeigboigbigeiiiiijjikpkikkiktikwikxiloimoinndinhiodoiouiriisslittaiukuiwiwmiwsizhizijapnjabjamjbojbujenjgkjgojijibjmcjmljrajutjvavjwavkaatkaakabkackadkaikajkamkaokbdkbmkbpkbqkbxkbykcgkckkclkctkdekdhkdlkdtkeakenkezkfokfrkfykgonkgekgfkgpkhakhbkhnkhqkhskhtkhwkhzkiikkijkiukiwkjuakjdkjgkjskjykkazkkckkjklalklnklqkltklxkmhmkmbkmhkmokmskmukmwknanknfknpkoorkoikokkolkoskozkpekpfkpokprkpxkqbkqfkqskqykraukrckrikrjkrlkrskruksasksbksdksfkshksjksrktbktmktokuurkubkudkuekujkumkunkupkuskvomkvgkvrkvxkwkwjkwokxakxckxmkxpkxwkxzkyirkyekyxkzrlaatlabladlaglahlajlaslbtzlbelbulbwlcmlcpldbledleelemlepleqleulezlguglggliimlialidlifliglihlijlisljplkilktllellnlmnlmolmplninlnslnuloaolojloklollorloslozlrcltitltgluublualuoluyluzlvavlwllzhlzzmadmafmagmaimakmanmasmawmazmbhmbombqmbumbwmcimcpmcqmcrmcumdamdemdfmdhmdjmdrmdxmedmeemekmenmermetmeumfamfemfnmfomfqmglgmghmglmgomgpmgymhahmhimhlmirimifminmismiwmkkdmkimklmkpmkwmlalmlemlpmlsmmommummxmnonmnamnfmnimnwmoolmoamoemohmosmoxmppmpsmptmpxmqlmrarmrdmrjmromssamtltmtcmtfmtimtrmuamulmurmusmvamvnmvymwkmwrmwvmxcmxmmyyamykmymmyvmywmyxmyzmzkmzmmznmzpmzwmzznaaunacnafnahnaknannapnaqnasnbobncancencfnchnconcunddendcndsneepnebnewnexnfrngdongangbnglnhbnhenhwnifniinijninniuniyniznjonkgnkonlldnmgnmznnnonnfnnhnnknnmnoornodnoenonnopnounqonrblnrbnsknsnnsonssntmntrnuinupnusnuvnuxnvavnwbnxqnxrnyyanymnynnziocciogcojjiokrokvomrmongonnonsopmorriorooruosssosaotaotkozmpaanpagpalpampappaupbipcdpcmpdcpdtpedpeopexpflphlphnpilipilpippkapkoplolplapmspngpnnpntponppopraprdprgpsuspssptorptppuupwaquuequcqugrairajraorcfrejrelresrgnrhgriarifrjsrktrmohrmfrmormtrmurnunrnarngroonrobrofroorrortmruusruerugrwrwkrworyusaansafsahsaqsassatsavsazsbasbesbpscrdscksclscnscoscssdndsdcsdhsemesefsehseisessgagsgasgssgwsgzshshishkshnshusiinsidsigsilsimsjrsklkskcskrskssllvsldslisllslysmmosmasmismjsmnsmpsmqsmssnnasncsnksnpsnxsnysoomsoksoqsousoyspdsplspssqqisrrpsrbsrnsrrsrxssswssdssgssystotstkstqsuunsuasuesuksursussvweswwaswbswcswgswpswvsxnsxwsylsyrszltaamtajtaltantaqtbctbdtbftbgtbotbwtbztcitcytddtdgtdhteeltedtemteotettfitggktgctgotguthhathlthqthrtiirtiftigtiktimtiotivtkuktkltkrtkttlgltlftlxtlytmhtmytnsntnhtoontoftogtoqtpitpmtpztqotrurtrutrvtrwtssotsdtsftsgtsjtswttatttdttettjttrttsttttuhtultumtuqtvdtvltvutwwitwhtwqtxgtyahtyatyvtzmubuudmugigugaukkruliumbundunrunxurrduriurturwusautruvhuvluzzbvagvaivanveenvecvepviievicvivvlsvmfvmwvoolvotvrovunvutwalnwaewajwalwanwarwbpwbqwbrwciwerwgiwhgwibwiuwivwjawjiwlswmowncwniwnuwoolwobwoswrswskwtmwuuwuvwwaxavxbixcrxesxhhoxlaxlcxldxmfxmnxmrxnaxnrxogxonxprxrbxsaxsixsmxsrxweyamyaoyapyasyatyavyayyazybaybbybyyerygrygwyiidykoyleylgyllymlyooryonyrbyreyrlyssyuayueyujyutyuwzahazagzblzdjzeazghzhhozhxziazlmzmiznezuulzxxzza80hX 8 I =71A  )9x#+X&o!x< `(@y/@ u`t    `/  8;3SA V`,w@hp O P  FF_JdJJgJ`JJ J iJuJ\J]J JJ JJ`J`JJJ`JJJJJKJ JJ`JJJJJJJJJ@JJJJ@JJpJbJjJ wJ`cI  K`KKKKKL@GK`EPF@PF 3I,I^HZHfHTHUH YH iHVH\H RH`HbH`dH_HaHgHWH`]H@SHEEEEEED1FC:@@:@E@h@E@Eu@C@C@CC:@ :@`EdAQCD@E@AA`EE`EEEE E E AECC@CCCE ;@`4@ EL@A@9@9@9@9@9@`9@0@FFC B;@5@.FC`CvACCE GB(C E`CeAEXDEvC:@F EE DC.E 1EE mF II IFF    !  +K ' H ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '       KAA@%   "          81$%$"     D@@"     #      $                   QA ;8<lR$  03?))!    O{[A#        (     !                ( ( )) 0    ̎ =!.    %!  !1     ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (  ( ( ( ( ( ( $ (  (0%"5_|a|C8)C4)C.)C2)4KTw S 9 `4FW /&xH]|d% SYSu4%W4W4W P   #o75%8#K7Se E'1l"x42V,'l> 0GS=S cFqGDCHfH#_&K K /#":R3;:R&;P RSfSFT## ,T"X_X~/#X"/#("e E2Y Z~Ze HE )\r)\rbSP *P =""n$G"n#w F I$Ic`)7e&eBg5h0JQ&iR=6 1 (1l 1l m6| a 0|bs)\+rt0t-t&Ky-5ht Kzxz9 z" )\r|?)fn?0P e===8/xe 4Ee #E-"U#w$$G"+|ސS& # z= x"odq M X\2S֩A9&Qī9O%AݮrݮrMPjj=j,)d2J G>G~OG,CGCG2CѶ<Ѷ<2j fXX8H;8H;8X;8X;c?ػJػJHdM";ź7Rź7ź`7ź7ź7ź7L"|/6 ]"]"cTT]|6 ]"T'6) |N6 ź7źz7źU7ź7-XPXXź 7ź 7~=l !st2'Z'P7=W7<<H~= f;0~=7%nADw?'gi|6x:a'2) [=::9?O?iO?O??O??O??O??O?^O?;O?;O?)O?)O?)O?)O?)O?)O?)O?)O?)O?)OO I8< 3<b` q@ .l0l&0l0 22Z ee'xC@l))  082414    191507        ! ( ( ( ( (  0824<9=     T   HD  p08  IHHHHH     @   ( ( !  (0 () (0 () (0         e"ee   khh` (V  81046081   (0 (0 () ( (0          ( (0      z:  "   02140 (08 (08 () (0 (0 (08@H ()* !(08 (0   ! -#/ (01 (08 (08 (08  (08 (08@ (08<@ _xXa ` __@.@@@@@@`phba   ___8(H` 0 _xXXb_ _____( _8 0`80`((`H8a(_ _0(P`@8@aPHHa00`_@@@bp8 `0 0`__H___ 0`0__ _p`a((H`__((` _8 `pp``XPa(_ __ (08@ D8(  [[[[()+(,    PX`hpx (08@ (08@H ``xx (08@HP(08@A @@@-A%A@HPX`hpx BH@@$ %4   E (08@4?4w, &"oo ^zbP  e 5E| Sw  1Y #Y*#/B9F/F9 _ ~uH  5 =#"=?SBSg?4"Wg?4W EBn@Lg?a*F#6t2S4(W3:4W&S GS W %S &$$7',P I$ Io$OP7',P )RS)/$eG|4W4eW"4"84(JD"4(PD"4(HD"41(09SqS;G HcFu6V6V6VH/IRbJ"+|)')l1(094WrN9P8P7k8PkS,>>?WMl| 7S/#"/#z"e Ee GE7/8-o.\>\:E9a.i_E oYev jj.i_:  E1)12 Y[pP pw ! 1l nF5hVc`$7t7;t0tet0ttti0NSNSRBvNSBvvd,w _} fn 0} fn 0| {S| S1~DM41~DM41~FM6|~B|~P %&lF@e (E?W2l)w)Z )IX%Kfn0fn0>"9fnK0*Y*Sp<fp<.f=>dz,4*Ө:?E6M?E"6=n,56E6,?YQīO A2HO A0H֬֬vA֬'sSO?2ZQde42[.i@2- 2 31GN2"N2"y;`0?~=~=  nź7*pź7& ź7i79Fz]":PK'TZAXźA7AXźA71,]W1@]z1@]z1-YT1,`T1,]W1,`T11]cź>7|K6 1X)1,%zV"T 6Tb  6TXE>]E>!wE?n~7=~=l0|ZItZ*u)9*~N=U$A:+Z6hoh%kU?UFe_Ooo~=~=R{ 3ME%-VD2kTA)T4AY )TF21T'") "OteT?eO?[O?PO[0iG,,00w(Q(||FE  <`{nq"@ k"5EKn{'M.8R,E[ M0, Q9 ?X.5 e x5I )C5 $        .(  @ 0   8@HPX`h (08@HP  0,./     , @ `px___`P`__ _xa___(__0_pH _H ____________((@`___________`@pb____@`P ((JCBB('?? @P@CcSC"$7prpr5S5w  1w   R3e3 J=e|#[$sENioj{=I5J5o 33I$vI/+7P L"y4"4ct?P R363)03E3ELE"6PVLELE'LQ4^D7/#"</E/#"6o>Q)"RI :R;NS2NSbSS5SFSX)4`O`6T&7zEi ,vw4&w,wS>xfn0ss;s3tttvSNSwIwIb5e E| S| S| Se E?Wmle E|gs4W|N|e)| eS|7}Ei_F o$1P/#<"o' ǂmǂxi_> oi_> oe +EgTxX3>7<BLHAfn0)"od % S'l  a)+M5\īFīī(Ys`oOIx-aBj~=~=~=2V 2* 2 2 "~ = 2 "~ =~%γ~%γwpnG111 T%R?6<T~Tź7') :Mź57; &A15TOź@7 T -,T-X4-Y ,T-X[-_,T-X[-_,T-X-,T-X4-Y ,T-X-,T-XITX4IY TXb1 7T1Xb1 7T1XTwTMF-,TXY;;;;***;;;6***&5I&^I&IIt^*~=~=~=~=~=~=~=?kg?-g?ghkkh-khk(D5I?5o?g,%TF, o_V_eTF#DZxZ%RrRr|  42/ L &&>&<q`  1f T qz@ q@ .! p{ M,A.2ZexF9RVe(       )3Rxp2  PP@@@@@@@@@@@@@@________0(`_ 0`xxa``___8`___J; @Q4W/<o=  (o)P 7  P /6oM  : 8= =?V@RQQl@ZwAZQQka|mu./KoL `"4(Ey|%%Sq({Dl)5'l"4"4"4I$)I/.o//7oB951u:F1/2eof"k4"s4"4"4./0GoH,/.HoI#/"@oA/lomFoGo/pS  OT#/"o/oL@4^Dm7m7/ ;o< R2P /sot  ( ` aJ/KxoycBobeI$DII$MI/8o9"4" 4"4(DS>)S>nwIxS2v!"ShwI,`/a| S}-| S| @S?WQl}-| S| +S)"oud )$)K/?o@'sWs pv vNȣWVȣoץ}ȣQEd82γUn~mOwwnGg7 xRGCGC%8a%-%]|6 96<T ź07ۺ%ۺ%ۺ+%ź7}]Lź7FI.]OLI ź7iR9]TLR k ȿ޿R$R$ź$7ź$70]L0T]~LźS7źj7T3&~) 9b@98;Sw+<<V<VTnn nt'N) T$ :Z/Kg^h!kswhkh!kswhk__+K[[OWI<"RxaO0Ip2phppT QEkI3-M-%,~@RF,8eXoexQ Gl0 )a  @0`8`<`>`4`0`0  _______ ``( `( `( `( `0_@_P_`0 `_____00`__ 00`P00`hb`     @   /8yoz|v#d4?[$V#FaVQd4?[$V#FaVQd4?[$V#FaVQd4?[$V#FaVQ=65W5'//0=jioje; f4WL;?/@o %/&KoL"4 / 0 < | }/+4EoF*GY*fog{-'lSLWoX{SLLoQ{//0=jiojJrQ/o+/*K]o/^o_tS>)SU>cTXK/Lgoh_edP eY8 e1!elw p *o{i_ *o{=#/)o"jz/{o= 3 jJjc`&7mt#m#m>m>m:mt#m#m>m>m>/UwhIoY/wIo&o'I/ewIpx;pxO;-,<-YHbx px;#o8O} P O? d ~eo$Po$P/#"o$P~o$Po$ P/#"o$+PP xP P MP lP X"%e mE)wTX2Lz3|.$u"4"+4"+4ҤJ28ȣL8ȣuF"Nh[ƧJ[Ƨ`N2"2z"2"2]LL]uL*IA *A *$A *JA *A "T hbJ9 b9TFXź 7'6) [_TXX',¢[~=~=~=~=~c=~=~=~=~=~=Io') hkohk~=~w_~_zC o nź7|6 FeTr') OFeTr 'a) aOF76T),wOFMT') OFJTr') Ot?O?O?]O?LOB! pR! pm{ M,Q =Gl0.e\x*>?eRo____ `_____   $ @@H@ @@@___2_2_L_?C21{gv23SyC-.3 8.PP..%5 A/. /k/T/WI$XIo$ePG6OG6G6G6G6G6& J6V6`V6V -S E33"4"$4p<,f%; - < N.$u.$u.$uJsj/!o"J[/ko^D^D7Q7o7o7/2 ;JoKjW*jWujW7)-1Y )))-/.o)\"r^]kyNS[O`T&zc`L7p<f/#=" aN>aa*"c`N7\/]oac+S_mkmI$mI   X = @=c`7c`A7Joopv)-&G,v*^or{e E/I$SII$mIo6/7M|€Nyoz?W6l?WlWrWrWurWr|}/~'o/'ors/t'oBԌS u v/'  o ,Y7nvQn,6MbҲeҲ 2ź7, Y ź/7ź@7ȿwȿ{"TźE7޿Ayȿz]~L"T LbM9: b9"T LbM9: b9F-,TFTFST65TF6r'F) FO65TF6r') O5 j(<` r (; { M, SG,},E.809888 8 80!8)888$8d8`8"8 Fv/woEoF"Snoi{no$-PI$5I'IlI$ZI'el7',P  l m y 1u)I=Wu)=)'2-r*o{'l'l*o`{32So{,o({%;I$'I%/;I$;II$?I%G;1]/ 0a Cw R jok/=>HJoK>^D*D^D*D\*Dv7v7vE*7,E. Me M7E*E='O/jof=wk</=ow)=>/`%o&o=N1/2oI/J]!]!Jtou<q/ruow  14Wc`7 1O`T&zc`J7_n 1O`T&z`NSe*=Oe~P es8 1!ew -/9PjTo!9o: [1`oa5%{sOt;t0s)r*p0t-/#"/#O"/#"P P /#"px;px/;pxJ;pxe;px;px;px;I$Io$DPP P /#"P PP P P /#"P [P 4&$QGesP eh8 t1!e{w hg2Z2 Zh2Zh#t@88e2γ%4I24288e2%4K24228e28e2462V  ) ^ "T|X6 ź7nź7|6 2X,TLb&b ]L1X ]LFT1O,ToO*Lg5\Yv Ee "< `(<`~=~=~Y=~7=~=~=~= S001915 ___ ` _ `xXXb`_p_____ `_____000`PPb5``` =~rrvSIZ>"T "j " @jSS S3SSg?B@c;P :@FL$*G/%q&h4&:o;V/o!CoU{.$u.$Eu3E|.$Bu.$Bu$AKWoX=87K8 Y8 =8K8 Y8j8j8/>)<o=>o $S %7\i7]i755Q5$5]yY-e E?Wl?Wal| STXTcXTX V=/e*zox{ | }+)9D1Y ))^O)eu4&1Y ) )cTaT+/oo/*-o+{ / 0HoI/*,o7{ I Jeofo;/T/o!I$::: :2:J:fXs%e Ee {Ee E?Ws l?Wsl))) %<YPQ'Q }@QeQQ:~&Vz&fzź07;t޿t ;P޿PR EOT o') hkhpkhkFo(,T2Ii4Y [/_FFMT'a) h') OaO v'] ' F \ sp"xa8i<@ t  %L __ _8(_`00`aah0aW/o/mon"74%V;%X;3|.$Iu.$Iu%^;%r;%~;Q;r;oP.% ;tEtt;8`/i7; S$o%07ij7at5t5Q5y5!6n7Uj7t)JX|YvKP GK X@X%o/#"//Z~[w  1  7#?!i_@ / 1o,1l +E\w _ w h w } +\w w  w # :uoOu%`ursuP!7S:uOuL4&-Ye E)RGe EK | q SK | iS?Wl zij5?Wl?Wl zyb5P ~o$Po$PP %o7Y/Z!/G&lF@F@oNoO4N{AH/Rpoqo6;¢j&?FNeA~=~=~=~=~c=~=~=~C=~=¼4]NL{]L]L%<]YL¼]L]L[6_^T." x*5O'W) b Tb Tb6 $T|e6OeoCCex5' ex5 5) tR=T=rO|##2O q uV9So{=H"n#R*/F6"n# +#4##|%'(CD(ky)'l0)'l)'l'l."P.%6 !$5.#.\]bS% ;"4%; ",4",4%m;"}4"}4%};)9/BD9L\F:]9F)9B]9F)9B)9B)95BL/MZjo/jo.P.%  t.5.I.WX]SCPPa 3w > a Gw R p<Zf>p<f>*OoM{ b c w x-|RfRfI$II$!I Xoo/Boa+ S jyi_ c`7^%o"4|%% q%;w w w  /%q&h4&/mono-o}8o|/#"+o/#o"yozo$P/#n"P P /#;"~wo$}Po$PP P L!C)5q)q!)q6!!H/n]AL!>C)q!9`!Hw/jL!C)q!`!)zq!H/zeC k nź7|6 T4IY X_ @,@,,,,r/F i"7o OoPPii5}K5iiii5P!7Si!B!/>>!n8<  E/F+k/33+ocZ'P 9o{:5:JP ,X: 1(J/Ko/o9cn5P Ho/o/P@t; g?;p q.S:IP 8F/Gl/ooPzQ|}>E>cp<hf'Q}@QeQQ~QP I1Y ))iZ1YZ )o`)?b$KR/\c`7oo=|kcc!c*6o3{c<&cmc@&c@@O`vT&wzbSoaiHc`7i_ 'o(/aC+o C Czo{/w ( h*&N,Rwh*N/%q&h4&oo8d/#"oo4=o>o@nzQn,6?,46֩9h$9M"TCXźC7]XLXź7 ]LX ]L=)"hM'hh="h+="hgM'h]Flz(C - n\ź7|6 TF: Tb) rdTF(8T?4Y )````h``````````?``?`?`_` q'H'H$@$H$@p$H$@p`&H$@v#VtPv#VtQv#VtS/<o= Rw /O*h*No 5*0VI$bI#Q7F61(91LI$aIR1sY4&3"49p<f>4W*/+:o%;o):l.S;o({ @ pj9n/wo{A&S'So2/1OoP>Cr/joBX-B-/BE-B-GoH{o|o? 7,ij7/t5Q55yDiDC5Q5y57X&=-8/L3o45%/v/wod,/d:,+O\w o w x w  oo)7e hEeP e8 1!ew 1YE )VK)/%Yq&Zh4&pooo Nq+r**p/rdPNqkpTrx4pyr3pr3p6}?e lE| S(| `S| Sb|6}a| 0S| SK/Lo|€p€€!$:c:ovT#jnVt'=sz v/+F\w a w j w u I$Iw o+oo$!Po$+Po$5Po$?Po$IPo$SPo$]P"r4o$P/x*"4"(47i7i O7S P7767)7/o$0P j7P a   @7^k 'l 7^k h =&fEg4W4Wc`7*"4'le'P e8 (1!e/w 3 A=V)c`7@GK |feg4W4W4Wo  2 2 2Y/f p4&qa Tw c  ~  2Y/Z bS *o{*o{a.=mz"w4mtm,mt#mm~tmqm|"B4(PD%n;%s;f^g4W4WxX*^ot{x} px;xpx;px;x:px;;PQ'Q!}@Q*eQ*QQ~PQ'Q}@QeQQ~*yA *A Fe.]kLiK9T*mT]MLTm$ZZź"7ź=7ź7ź 7źv7ź7ź7źk7ź7ź7źT7ź7ź7./7a jw w v a w ! v go  oN~   k2&M|; }21v~#Vt"qs vv~#Vt$ss v*CY*coj{*r"s4*{"|4I$I'l+Cd#?>+Nh>+zh>+h l^%"4|%%q%;$G*E"Z4*F6 ='kl.7P.1%8 558.fP.x% t..SC.#/%|o} z44*+ i7/A4L]o^.// H I YoZ5%*o{//!x b/>#o$_/ow.IwWIvabS!x/6o7`/owqIbP P P =r/#"P =/# "adb+ H,I/Jatdbk Hlx/Y}oo*>>""2!S/o!|/! 8! 8 S 2b 42422 8r2872Q42]42]jOy GbOT)9O` b9 b9O bb\9h<ksw'o hkyoo~') hkohOkq T$T%TTPTTT T$Ti +/v o    zQoRo})KyX@}K}"K}bK}K}KX}K}EK}|K}K}K}K.//eof/o//0ToU y!  "#4"-4I$II$II$I/[x"r4"r4"v4"400%;00%;6 9o_{6~Y7=i!6n#7E7R1Yj7t7I$IR1YI$NIR1gY78i79i5Q5y55Q55Q5y5B5y5Q55y55)()G  YpP  | l 1YE )VK)]'c]K/]O/]vI]c^]yNSn]Ntr/s o$P2o/0o15%IUoV@/q/a.oa.sU) =sy)rh*pjsy,NqirPNqpr4pr3pnQ%n,6kY?<,~6֩%9ih9 <M5yhkohklozC  nEź7|6 yoohko zC  nNź7|6 ~Wrz6C  nź+7|,6 s`@)*0 00800 @ 0@@0@@@@@0 3 1 o/v P5o6 zBoCqor k l =v#a QHaPQ P=#`yPDto6=v#a QHaPQ P=#ayPDto$<=v# aQSaeQ e=#vyeDto-+v#aQttJ3t|e*'"R44/5'glh*eN,w+\w  w  w  *.">4'LlYoZ_?/ *o+Z/[tou / o _"%,/6axHoay..o/ac+soti_O 4dL"(4*`FI6s/t1V(oo09[o\o & 6hWSw d w z h|Sw w /O*h*NO*h*N)o*4&efeP e8 1!ew /FeX+\w w w  o./9p<Efp<^fRP &z&zP oź&7ź`7}]L;;  ޿z;;  ޿;w  1 1=  =^%"w4|%w%|q%{; *F6  81/,xI$PI"4I$~II$II$II$I"4I$%II$%II$%I"%4"%4"4$}Koz"C nź 7| 6 "TF"hIk+6hkxswh khkhkov#aQt$ss1 cvt;|th-/n5>5^Q5y55\5 RoY!6uno_/n5QoEX|S Y dE|*7EEt*EE *EE *E" K4*WE\*EN2NdVNZrNPp<5f;M:H;M@ HAQ`MmInNt@ u(O%;&z"4 S_86T/U *o{ o=i_  :_d8)a kw  hSw w  hSw  w 1 7/8O*Eh*\NO*xh*NoO  *O^  XwV1Oo  %O  %Q/(UZP uPp<f>Pp<f>oL/#"L/#" <X@ l ) *D { j{ q {  l  D@ I D l   D  {e7P e,8 81!e?w C M/Ndu,*o{ FeX+\w w w ojP | / o=e>/?oa8+j aqH 1i_ j*hk+ 6hHkCo'eh8ke+[ 6hl kh khI k  h k oo_hk_I{"n" n"Yn"+#"k4 #4/#+"U#h# #Re#?#7Oi7Pij7Qtj7Rt5Q5y55EQ5Jy5JC/C `5OQ58y58LCdkC65Q5y5)ePP eE8 Q1!eXw \ f/gFetX+u\w w w o1Y ))iZFjAdhBSw Q w f Fj|dh~Sw w =// p yo$Poo)2)MFG,v*o{)-"a,0,M,,,--E-y<-H))vkCT5Q5y5!6xn!6DnCC5CD5]CDC5C*DC! 5! C! p<0fNoOq/rp<{f;MHeM IMI+&=zNo];M_H`Me HfMXIvQPT'Q) QZ.TF`VTF``T1cYTF') 'f) WfrraQtkd4[V##6osVPCyv#Py v+/,h&@ A%M;%;&zo&T/o/8o9$va$wxP {P P P /#["= /'?o@P dkP I$/IR1YYT') zC  n.źg7|h6 ') _%%') N'L) ') 4&[DVd#Vt8)BCfqOOoV4&[DVd#Vt8)BCepNNoV4&[DVd#Vt@/JKq|YYoV B7FiS F7zi z ?EB*79E;Ej*EfE*EE*EK4Wk/k/Eb*E^ /k/W7i7i5Q5y5j7tFzFS F5,Q51y51j7^tFzFS !6nFj7tFG>3Gh=/>HKIroHRIhIM/HRIhIMRIHHIIoo~v#V $4t&:YRY[[t^~v#V $4t&:YRYss~=v#1a=QaQ =#yDtZojesK|es= Hv=O v2NdVNZrNPp<*f2N[d"\4VNaZrNbPN>i(DN>K;MHM HNHNHMI/#"MIN@ ź7|6 Bź`7ź7|6 |6 ź7|6 Fl.]qLmm]L]LT]Y L]a L] LO ] L/B0 4&Bw w  /%q&h4&1o2+\w ^ h*N,vww  w  =/%q&h4&9o:h*tN4&[DVd#VtXIbcvvos<VP]ys va+aVdb{ H|*#7F6  ?b $ Dg/h*}o{{oobI${I =I$=IUoVI$Ioo75Qj7tj7t7i7i5y5Dn5lQ5My5MDln5Q5y7i5j7tDiDC5uQ55D<s/CG`55y5Q5y5Dn=F?oq/so@ 9$/Qo/o0I$dI*dY*Yoa{"j4"43|.$u.$u ^%"L4|%L%Qq%P; 'lpBp2pp{ppp&p qip_ qp7qpNq,peqope{q pq!pq/"p%qo#peq$pq%pr/&p%rr*pe2r,pLr-pbrK.p;xr/p'y) vzT'y) 22TAAT4|Y 4|Y T[_[_TEc:cKTEc cE[cPca') zC  n=źs7|t6 ') zC  n źM 7|N 6 bu  bu  ` T el\ZleZw]Zw^ZlgZwhZ{VV|R}RVRlQlQlZwZlZwZQ Ll ZlLZw>Zw?ZlTZwZlTZwZTQl?ZwZl?ZwZ?QlBZwZlBZwZBQ/0oCJoK *o{ /*%o#{ % x yo/  5%o9/: GI$IS_R1Y *3oj{|/}  a w  ott0s)r*pt t0t&tctT0bscw  t0s)r*ps)r*pt0t.u1s)r*pt;t0*#o {sR)rA*pCsR,NqBX%s)r*ps,Nq) KebS_XU#)"w4 ~$G$0.$-u RI$8II$@II$HII$PII$mII$uII$ Io$qPo$~Po$P/o$a$P 2cg4P F$6I$II$) II$) II$I"K 4"j 4$ K o  / _ o` # #  boa{4Wg?:.WP.9%X Itu:~:;7;0 21SQ;r;oP.% % % ;wx% o{L:P;c d4:WfLB@i4WLF% % ; t2 t2 ; ; :  : : ') ') T[rFm( zC  nź'7|(6 _x_t_~ ') [ z C  nNź7|6 }3.\TzC  nź'7|(6 !T3z(C * nnź7|6 ~TFc'2) ')  B @@(K@DB@@A@(K0C ,Q$C ,Q$C[&,Q$C[&,Q$C[&,Q5C[&,Q5K[&,Q5K ,Q$C ,Q4K ,QC ,Q(K$ ,Q$ ,Q,Q~hWhrThkhk2<4Y [_[_6S~v') hkhkhk') hkFkohpkhk a T5 o'e ) Z  ) ,) ,' ) h kFh"koob ') hkohmkCo'w) hkoqo-o2oh\ko4Y %Thxkoooo*Bo@{=2/9o:pbP 2/3\o]S_I$I   c[c`7 '*#7F61'(/*o{oc$[c`,7 =IoJoc`7c[c`7 0S_"cao$P o$jPo$wP /o c[c`7 ) 4&cx [c` 7  4& S_ I$ I o ^ 94& '|) |') ') _') T') ') _]l'a ) ' ) _ ' ) _  z C 1 np ź 7| 6 ' ) '&) &4@T'X) ') T' ) 'p) _ppzvC  nź7|6 'F) _FF') T}.') _k!'p) _pp'/) z #') _'J) ') ') _* z`"C ' ) _ ! nu |L"6 źK"7(@@   BP( 0 I$%''H()*,-2681?EII$NRTUTUTUTUUUUUUUUUUUUUUX[beep@fqx@- TTU?!$Z BP( @*UUUURUC"""$""DK ",##C  @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@i@UID I     !@!@!@!@!@!BBBBB!!!!!!BBBBB!!!!!BBBBBB     @!@!@!@!@!@BBBBB!!!!!BBBBB!!!!!!BBBBB      !@!@!@!@!@BBBBBB!!!!!BBBBBB!!!!!BBBBB     !@!@!@!@!`*C 1/UUFDDDDDDDDDDPHHHHHHHH!!!!!!!!!!!!!!!!BBBBBBBBBBBBBBBB $$$$$$$$$$$$$$$$HHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!BBBBBBBBBBBBBBBB $$$$$dTUUUEUUUUh۶mm۶UUUUUUUUUUUUJ$I$I$$I$I$I$I$$$I$I$I$I$II$I$IRUUUUUUUU*UUUUUUUUUP75K'Xb]{}>ư>MbP?{Gz??333333?????333333?@@$@:@W@Y@@@.A4&k C?CCPKDG333333ӿ9B.4&k ?pY @MC_go1.20.3N%N,eN O3 O8DNmNN OG;NN NN4N$NN *NIO<"NJN(N N*POMN)O>N N(N(N,O1# O5O.N)8ODN#rNSNNN'LNNOVAO7N!gNN"N+X O5ǦNRN dN)0N% N%O/UN%NO8CO-N%$NNN$ O;:N!|N!EN"?OUNlNQNNKNO-.NO,N%6NNNdNNN*VN ^N& O0N(?N#}O0xN$2O1|N+0N,1N)XO8N$N O9O;call frame too large\z @@xM@AN<F@vM@HM% I@vMdMLbLJ@vMHM̟8J@vMIM0:`I@vM`IM,LJ@vMIMҵ`LJ@xMJNe K@vMMM-pRF@vM`eMhi>I@vMeMC?I@vM|Mf`I@vM}MbI@xMMNZ"`-I@vM`rM`G@vM >MŹ@H@vMMƅL@vMM2T+I@vM_MC+F@vM@M&,YEIM`MsD`#K#K@$KM@|MBrHHHM@M2y֚ K K KM@Mc;@LL`LMM4s1LLLM MRy~fHHHMHN%`@`@`@eIr5 8/l7v7F9Gj=5U=\5 C JFJFJFJF"JF(JF.JF:JF4JFHFHFHFHFHFHFHFIFHFGGGGGGGGGGGGŽG˽GѽG׽GGݽGHGNGTGZGbGhGnGzGtGCvEIvEOvEUvE[vEbvEhvEtvEnvEV@\@b@h@n@t@z@@@kAkAlA lAlAlAlA)lA#lAkAkAkAkAkAkAkAkAkAEEEEEEEEEEEEE EEE"EEEEE>EEEEEEEVE EE6EEVEEEEEDDeDDDD{DDDeDYDDhDDhDYDDDDhDEEEEEEEEEEk EE EE Ek E E E E EEDEwEEEE'EELEEMO HPQRSN !"#I$%&'()J*K+,-./012345678TL9:;<=>?@ABCDEFG6@7@7@/7@D7@8@8@P7@8@8@8@7@7@M CNЕW`@`@`KF`@`@JFIF`@HF`@`@fQJvQJvQJvQJvQJvQJQJQJQJQJQJQJARJARJRJRJRJRJRJxRJRJxRJRJRJÈ@%@@@E@@@e@ŋ@%@@@E@@@j@@@@@@@@@[J[J[J[J[J[J%[J%[J%[J%[J%[J%[J6[JG[J[J[JX[J[J[Jq[J[J[J[J[J[JzH H H H H HEHEHEHEHEHEHHHdHdHHH>IfH>I I>IHI IGGGGGyGGGGGyGGœGœGG%GPG*G*GG*G*GƝGGG*GDIIIIIII I I I I I IsIIIʝIIIII7I%II7IJII             +N`RNbg`@`@G@G`@`@G G`@`@`@`@G`G`@`G@GG`@`@GGG@GG@GG`@G`G`@art-lojbani-amii-bnni-haki-klingoni-luxi-navajoi-pwni-taoi-tayi-tsuno-bokno-nynsgn-be-frsgn-be-nlsgn-ch-dezh-guoyuzh-hakkazh-min-nanzh-xiangcel-gaulishen-gb-oedi-defaulti-enochiani-mingozh-minrooten-us-posix0w tApath golang.org/vuln mod golang.org/vuln (devel) dep github.com/tidwall/gjson v1.6.5 h1:P/K9r+1pt9AK54uap7HcoIp6T3a7AoMg3v18tUis+Cg= dep github.com/tidwall/match v1.1.0 h1:VfI2e2aXLvytih7WUVyO9uvRC+RcXlaTrMbHuQWnFmk= dep github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= dep golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= build -buildmode=exe build -compiler=gc build CGO_ENABLED=1 build CGO_CFLAGS= build CGO_CPPFLAGS= build CGO_CXXFLAGS= build CGO_LDFLAGS= build GOARCH=amd64 build GOOS=linux build GOAMD64=v1 build vcs=git build vcs.revision=9c19e53c7c8ed2cb0dead1690a83fdc093b37300 build vcs.time=2023-11-07T00:22:33Z build vcs.modified=true 2C1 rBANNNN!N%NNNUN\NNNcNjNNNqN˃NNxNNЃNNՃN͋N߃N NNN$NN*N݋NN6NNNNNNN N N%NN*NN NNNCN-N.N5N?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~``a`Rpop#9bgklm  (^00@/@n2p2pRGPbP/8  P 5P P S x P P p q 3q pu 3pu p "p np xp p 5  1 P5P^{c.6N`pp`@R@C"`]``%&-./46:=BFHIJNPR\]`acdmrstu{|     %),-/1359<=?Babd,?AHQTVYehin56;jPnP`R`$Rr00cv67:;<IKLMNORbgxz~  "(?@_{n0N0x00@@@@@@53 ` PPp(pppSPN8 0 p Rp / !}! !g !`!p!p!!0"/0"p"Zp"@#@### $ $@$R@$P$P$`$`$$$%%@%@%@%`%`%&&&/&&R&&`&@'({((()/)P)P)0*10**5*P+*P+KP+LP+MP++++++,, ,K ,@,@,P,P,p,p,--/-....// / /@/R@///@0@000111>11 122P2RP233334P4P4p4p4p44d45`55555p60p66p6@p6[p6p6p6p66R6666R66P7`7788p88189o99P9P99}999P9P90909:0;0;;;;$;<*G > > > > >0 >P>P>`>/`>>>>>0?/0?????r?? ???@@ @L @@p@p@@@@@ A A`A`AAAAArA B0Bd0BBbBoBBBC'CCMC C!C3!C!C!CM!Cp%C3p%Cp%Cq%CMq%CpCCC@D1@Dr@D @DPDKPDPD/PD1PDDEEEE EFF@F@F1@FpF$pFF#FFmFoFG`G'`GH H) HH]H+HH@I@I@J@JJJJSJJ0J@K@K@KKPK$PKK7KpK7qKKpKpK0K0KL0L>0LLLL/LLLNLPNPN OO1OPRP Q QQ;QQQQSQQQRRRRSRRƀR RRRƐR.RRaR  : MW a lo y        #)08 H S ]b o }             !* ; P Y h t         !* 69 E PV b s{{          ) : #)cj  $%')+.4 !"(((     # -3:?ENSW[ dhkrw       !# ) 4=EGNP [ n |        % 2 G QWW^ehjjloqw~  .text.noptrdata.data.bss.noptrbss.go.fuzzcntrs.go.buildinfo.note.go.buildid.elfdata.rodata.typelink.itablink.gosymtab.gopclntab.symtab.strtab.debug_abbrev.zdebug_abbrev.debug_frame.zdebug_frame.debug_info.zdebug_info.debug_loc.zdebug_loc.debug_line.zdebug_line.debug_gdb_scripts.zdebug_gdb_scripts.debug_ranges.zdebug_ranges.shstrtabUUV@V``-` ~0 a aor``r`V@VW@W^WW@ZZZ[@[[[\`@@\]@]]]^@^@`@X@X` @XXY@Y@`@+ YY@@s`Z@+\`\ `@@ m`an@aaab@b`bb`@^_ @__`c``3@c`c ^c 4d@@ddde`@ee,ef@ff t f@g`@g^ggh@h@h@h4i -`@iinij_`@@jjj`k``@kk`kl@lllm@mmmn@nnno@o` o`.p`p /@qo/@0@qqqp@p @rrrs@ssst@tt_`@` @` @` @` @tu@uuuv@vvvw@wwwx@xx|@yyyzz{@{{{xy@zz@|||}@}}}~@~~~@@@@@ @@@@@`` @`@ @` @` @XQQQxQQQQ`Q(QQQQQQhQ8QQQQxQQXQQ8QQ8QQQQ@` dZinternal/cpu.Initializeinternal/cpu.processOptionsinternal/cpu.indexByteinternal/cpu.doinitinternal/cpu.isSetinternal/cpu.cpuidinternal/cpu.xgetbvinternal/cpu.getGOAMD64leveltype:.eq.internal/cpu.optiontype:.eq.[...]internal/cpu.optiontype:.eq.runtime/internal/atomic.Uint64type:.eq.runtime/internal/atomic.Int64runtime/internal/sys.OnesCount64type:.eq.runtime/internal/sys.NotInHeaptype:.eq.internal/abi.RegArgsinternal/bytealg.IndexRabinKarpBytesinternal/bytealg.HashStrBytesinternal/bytealg.Equalinternal/bytealg.IndexRabinKarpinternal/bytealg.HashStrinternal/bytealg.init.0cmpbodyinternal/bytealg.Compareruntime.cmpstringmemeqbodyruntime.memequalruntime.memequal_varlenindexbodyinternal/bytealg.Indexinternal/bytealg.IndexStringindexbytebodyinternal/bytealg.IndexByteinternal/bytealg.IndexByteStringruntime/internal/syscall.EpollWaitsyscall.RawSyscall6runtime/internal/syscall.Syscall6runtime.memhash128runtime.memhash_varlenruntime.strhashFallbackruntime.f32hashruntime.fastrandruntime.f64hashruntime.c64hashruntime.c128hashruntime.interhashruntime.isDirectIfaceruntime.nilinterhashruntime.typehashruntime.addruntime.memequal0runtime.memequal8runtime.memequal16runtime.memequal32runtime.memequal64runtime.memequal128runtime.f32equalruntime.f64equalruntime.c64equalruntime.c128equalruntime.strequalruntime.interequalruntime.nilinterequalruntime.efaceeqruntime.ifaceeqruntime.alginitruntime.initAlgAESruntime.init.0runtime.(*mspan).setUserArenaChunkToFaultruntime.makeSpanClassruntime.bool2intruntime.(*mspan).baseruntime/internal/atomic.(*Uint64).Addruntime.(*mspan).setUserArenaChunkToFault.func1runtime.lockruntime.lockWithRankruntime.unlockruntime.unlockWithRankruntime.atomicwbruntime.(*wbBuf).putFastruntime.atomicstorepruntime.mmapruntime.mmap.func1runtime.munmapruntime.munmap.func1runtime.sigactionruntime.sigaction.func1runtime.cgocallruntime.cgoIsGoPointerruntime.activeModulesruntime.cgoInRangeruntime.cgoCheckWriteBarrierruntime.inPersistentAllocruntime.cgoCheckWriteBarrier.func1runtime.cgoCheckMemmoveruntime.cgoCheckSliceCopyruntime.cgoCheckTypedBlockruntime.spanOfUncheckedruntime.arenaIndexruntime.(*mSpanStateBox).getruntime.cgoCheckTypedBlock.func1runtime.cgoCheckBitsruntime.addbruntime.cgoCheckUsingTyperuntime.makechanruntime.(*hchan).raceaddrruntime.chansend1runtime.chansendruntime.fullruntime.(*waitq).dequeueruntime/internal/atomic.(*Bool).Storeruntime/internal/atomic.(*Uint8).Storeruntime.(*waitq).enqueueruntime.chanbufruntime.chansend.func1runtime.sendruntime.sendDirectruntime.recvDirectruntime.closechanruntime.(*gList).pushruntime.(*guintptr).setruntime.(*gList).emptyruntime.(*gList).popruntime.chanrecv1runtime.chanrecvruntime.emptyruntime.chanrecv.func1runtime.recvruntime.chanparkcommitruntime.init.1runtime.(*cpuProfile).addruntime/internal/atomic.(*Uint32).CompareAndSwapruntime/internal/atomic.(*Int32).Loadruntime.nanotimeruntime/internal/atomic.(*Uint32).Storeruntime.(*cpuProfile).addNonGoruntime.(*cpuProfile).addExtraruntime.GOMAXPROCSruntime.debugCallCheckruntime.debugCallCheck.func1runtime.funcInfo.validruntime.funcInfo.entryruntime.debugCallWrapruntime.(*muintptr).setruntime.debugCallWrap.func1runtime.debugCallWrap1runtime.debugCallWrap2runtime.debugCallWrap2.func1runtime.gogetenvruntime.envKeyEqualruntime.(*TypeAssertionError).Errorruntime.errorString.Errorruntime.errorAddressString.Errorruntime.plainError.Errorruntime.boundsError.Errorruntime.appendIntStrruntime.itoaruntime.printanyruntime.printanycustomtyperuntime.panicwrapruntime.runExitHooksruntime.memhashFallbackruntime.r8runtime.readUnaligned64runtime.r4runtime.readUnaligned32runtime.mixruntime.memhash32Fallbackruntime.memhash64Fallbackruntime.(*timeHistogram).recordruntime.getitabruntime.(*_type).nameOffruntime.(*itabTableType).findruntime.itabHashFuncruntime.itabAddruntime.(*itabTableType).addruntime.(*itab).initruntime.(*_type).uncommonruntime.(*_type).typeOffruntime.name.isExportedruntime.itabsinitruntime.panicdottypeEruntime.panicdottypeIruntime.convTruntime.convTnoptrruntime.convT64runtime.convTstringruntime.convTsliceruntime.assertE2Iruntime.assertE2I2runtime.iterate_itabsruntime.unreachableMethodruntime.(*lfstack).pushruntime.lfstackPackruntime.lfstackUnpackruntime.lfnodeValidateruntime.lock2runtime.unlock2runtime.notewakeupruntime.notesleepruntime.notetsleep_internalruntime.notetsleepruntime.notetsleepgruntime.lockRank.Stringruntime.mallocinitruntime.(*mheap).sysAllocruntime.alignUpruntime.(*fixalloc).freeruntime.sysFreeOSruntime.sysReserveAlignedruntime.(*mcache).nextFreeruntime.mallocgcruntime.acquiremruntime.getMCacheruntime.releasemruntime.nextFreeFastruntime.divRoundUpruntime.deductAssistCreditruntime.memclrNoHeapPointersChunkedruntime.goschedguardedruntime.newobjectruntime.newarrayruntime.profileallocruntime.nextSampleruntime.fastexprandruntime.fastrandnruntime.fastlog2runtime.float64bitsruntime.persistentallocruntime.persistentalloc.func1runtime.persistentalloc1runtime.(*notInHeap).addruntime.(*linearAlloc).allocruntime.(*hmap).newoverflowruntime.(*bmap).overflowruntime.(*bmap).setoverflowruntime.(*hmap).incrnoverflowruntime.(*hmap).createOverflowruntime.makemap_smallruntime.makemapruntime.overLoadFactorruntime.bucketShiftruntime.makeBucketArrayruntime.roundupsizeruntime.mapaccess1runtime.bucketMaskruntime.(*hmap).sameSizeGrowruntime.evacuatedruntime.tophashruntime.(*maptype).hashMightPanicruntime.(*maptype).indirectkeyruntime.(*maptype).indirectelemruntime.mapaccess2runtime.mapaccessKruntime.mapassignruntime.(*hmap).growingruntime.tooManyOverflowBucketsruntime.isEmptyruntime.(*maptype).needkeyupdateruntime.mapdeleteruntime.mapiterinitruntime.fastrand64runtime.mapiternextruntime.(*hmap).oldbucketmaskruntime.(*hmap).noldbucketsruntime.(*maptype).reflexivekeyruntime.hashGrowruntime.growWorkruntime.evacuateruntime.advanceEvacuationMarkruntime.bucketEvacuatedruntime.mapaccess1_fast32runtime.(*bmap).keysruntime.mapaccess2_fast32runtime.mapassign_fast32runtime.growWork_fast32runtime.evacuate_fast32runtime.mapaccess2_fast64runtime.mapassign_fast64ptrruntime.growWork_fast64runtime.evacuate_fast64runtime.mapaccess1_faststrruntime.mapaccess2_faststrruntime.mapassign_faststrruntime.mapdelete_faststrruntime.growWork_faststrruntime.evacuate_faststrruntime.typedmemmoveruntime.reflectcallmoveinternal/abi.(*IntArgRegBitmap).Getruntime.typedslicecopyruntime.typedmemclrruntime.memclrHasPointersruntime.(*mspan).refillAllocCacheruntime.(*gcBits).bytepruntime.(*mspan).nextFreeIndexruntime.badPointerruntime/internal/atomic.(*Uint8).Loadruntime.findObjectruntime.spanOfruntime.(*mspan).objIndexruntime.(*mspan).divideByElemSizeruntime.heapBitsForAddrruntime.heapBits.nextruntime.bulkBarrierPreWriteruntime.puintptr.ptrruntime.bulkBarrierPreWriteSrcOnlyruntime.bulkBarrierBitmapruntime.typeBitsBulkBarrierruntime.(*mspan).initHeapBitsruntime.spanClass.noscanruntime.writeHeapBitsForAddrruntime.writeHeapBits.writeruntime.writeHeapBits.padruntime.writeHeapBits.flushruntime.heapBitsSetTyperuntime.readUintptrruntime.add1runtime.progToPointerMaskruntime.runGCProgruntime.subtract1runtime.subtractbruntime.materializeGCProgruntime.allocmcacheruntime.allocmcache.func1runtime.freemcacheruntime.freemcache.func1runtime.(*mcache).refillruntime.spanClass.sizeclassruntime.(*mcache).allocLargeruntime.(*mcentral).fullSweptruntime.(*mcache).releaseAllruntime.(*mcache).prepareForSweepruntime/internal/atomic.(*Uint32).Loadruntime.(*mcentral).cacheSpanruntime.(*mcentral).partialSweptruntime.(*activeSweep).beginruntime.(*mcentral).partialUnsweptruntime.(*mcentral).fullUnsweptruntime.(*mcentral).uncacheSpanruntime.(*mcentral).growruntime.startCheckmarksruntime.endCheckmarksruntime.gcMarkWorkAvailableruntime.(*lfstack).emptyruntime.setCheckmarkruntime.markBits.isMarkedruntime.sysAllocruntime.sysUnusedruntime.sysUsedruntime.sysFreeruntime.sysFaultruntime.sysFaultOSruntime.sysReserveruntime.sysReserveOSruntime.sysMapruntime.sysAllocOSruntime.sysUnusedOSruntime.alignDownruntime.sysUsedOSruntime.sysHugePageOSruntime.sysMapOSruntime.queuefinalizerruntime/internal/atomic.(*Uint32).Orruntime.createfingruntime.finalizercommitruntime.runfinqruntime/internal/atomic.(*Uint32).Andruntime.SetFinalizerruntime.inUserArenaChunkruntime.(*functype).dotdotdotruntime.(*functype).inruntime.(*functype).outruntime.SetFinalizer.func2runtime.SetFinalizer.func1runtime.(*fixalloc).initruntime.(*fixalloc).allocruntime.gcinitruntime.gcenableruntime.gcenable.func2runtime.gcenable.func1runtime.pollFractionalWorkerExitruntime.gcTrigger.testruntime/internal/atomic.(*Uint64).Loadruntime.gcStartruntime.semacquireruntime.traceGCStartruntime.semreleaseruntime.traceGCSTWStartruntime/internal/atomic.(*Uint32).Addruntime.setGCPhaseruntime.gcBgMarkPrepareruntime.Goschedruntime.gcStart.func2runtime.gcMarkDoneruntime.gcMarkDone.func2runtime.(*gcWork).emptyruntime.gcMarkTerminationruntime.casGToWaitingruntime.traceGCDoneruntime.(*sysMemStat).loadruntime/internal/atomic.(*Int64).Loadruntime/internal/atomic.(*Int64).Storeruntime.mProf_NextCycleruntime.(*mProfCycleHolder).incrementruntime.itoaDivruntime.printunlockruntime.gcMarkTermination.func1runtime.gcBgMarkStartWorkersruntime.noteclearruntime.gcBgMarkWorkerruntime.(*limiterEvent).startruntime.limiterEventStamp.typruntime.makeLimiterEventStampruntime/internal/atomic.(*Uint64).Storeruntime.gcBgMarkWorker.func2runtime.globrunqputbatchruntime.(*gQueue).pushBackAllruntime.guintptr.ptrruntime.gcMarkruntime.gcSweepruntime.(*activeSweep).resetruntime/internal/atomic.(*Uintptr).Storeruntime.(*sweepClass).clearruntime.gcResetMarkStateruntime.clearpoolsruntime.fmtNSAsMSruntime.(*gcCPULimiterState).startGCTransitionruntime.(*gcCPULimiterState).tryLockruntime.(*gcCPULimiterState).finishGCTransitionruntime.(*gcCPULimiterState).updateruntime.(*gcCPULimiterState).updateLockedruntime/internal/atomic.(*Int64).Addruntime.(*gcCPULimiterState).accumulateruntime.(*gcCPULimiterState).unlockruntime.(*gcCPULimiterState).resetCapacityruntime.(*limiterEvent).consumeruntime.limiterEventStamp.durationruntime/internal/atomic.(*Uint64).CompareAndSwapruntime.(*limiterEvent).stopruntime.(*gcCPULimiterState).addIdleTimeruntime.(*gcCPULimiterState).addAssistTimeruntime.gcMarkRootPrepareruntime.gcMarkRootPrepare.func1runtime.allGsSnapshotruntime.gcMarkRootCheckruntime.gcMarkRootCheck.func1runtime.readgstatusruntime.markrootruntime.markroot.func1runtime.markrootBlockruntime.markrootFreeGStacksruntime.(*gList).pushAllruntime.(*gQueue).emptyruntime.markrootSpansruntime.gcAssistAllocruntime.(*gcCPULimiterState).limitingruntime/internal/atomic.(*Bool).Loadruntime/internal/atomic.(*Float64).Loadruntime.traceGCMarkAssistStartruntime.traceGCMarkAssistDoneruntime.gcAssistAlloc.func1runtime.gcAssistAlloc1runtime.gcWakeAllAssistsruntime.(*gQueue).popListruntime.gcParkAssistruntime.(*gQueue).pushBackruntime.goparkunlockruntime.gcFlushBgCreditruntime.(*gQueue).popruntime.scanstackruntime.isShrinkStackSaferuntime.(*stackScanState).buildIndexruntime.(*stackScanState).findObjectruntime.(*stackObject).setRecordruntime.(*stackObjectRecord).gcdataruntime.(*stackObjectRecord).useGCProgruntime.(*stackObjectRecord).ptrdataruntime.dematerializeGCProgruntime.scanstack.func1runtime.scanframeworkerruntime.gcDrainruntime.(*gcWork).tryGetFastruntime.gcDrainNruntime.scanblockruntime.scanobjectruntime.heapBits.nextFastruntime.(*gcWork).putFastruntime.scanConservativeruntime.(*mspan).isFreeruntime.(*gcBits).bitpruntime.shaderuntime.greyobjectruntime.(*mspan).markBitsForIndexruntime.markBits.setMarkedruntime.pageIndexOfruntime.gcDumpObjectruntime.gcmarknewobjectruntime.gcMarkTinyAllocsruntime.(*gcControllerState).initruntime.(*gcControllerState).setGCPercentruntime/internal/atomic.(*Int32).Storeruntime.(*gcControllerState).setMemoryLimitruntime.(*gcControllerState).startCycleruntime.(*gcControllerState).heapGoalruntime.(*gcControllerState).reviseruntime/internal/atomic.(*Float64).Storeruntime.(*gcControllerState).endCycleruntime.(*gcControllerState).enlistWorkerruntime.(*gcControllerState).findRunnableGCWorkerruntime.(*gcCPULimiterState).needUpdateruntime.(*lfstack).popruntime.(*gcControllerState).findRunnableGCWorker.func1runtime/internal/atomic.(*Int64).CompareAndSwapruntime.(*gcControllerState).resetLiveruntime.traceHeapAllocruntime.(*gcControllerState).markWorkerStopruntime.(*gcControllerState).updateruntime.(*gcControllerState).heapGoalInternalruntime.(*gcControllerState).memoryLimitHeapGoalruntime.(*gcControllerState).triggerruntime.(*gcControllerState).commitruntime.readGOGCruntime.atoi32runtime.readGOMEMLIMITruntime.(*gcControllerState).addIdleMarkWorkerruntime.(*gcControllerState).removeIdleMarkWorkerruntime.(*gcControllerState).setMaxIdleMarkWorkersruntime.gcControllerCommitruntime.isSweepDoneruntime.(*activeSweep).isDoneruntime.gcPaceScavengerruntime.heapRetainedruntime.(*scavengerState).initruntime.(*scavengerState).parkruntime.(*scavengerState).wakeruntime.(*scavengerState).sleeptime.resetTimerruntime.resettimertime.stopTimerruntime.(*scavengerState).controllerFailedruntime.(*scavengerState).runruntime.bgscavengeruntime.(*pageAlloc).scavengeruntime.(*pageAlloc).scavenge.func1runtime.printScavTraceruntime.(*pageAlloc).scavengeOneruntime.pallocSum.maxruntime.(*pageAlloc).chunkOfruntime.chunkIdx.l1runtime.chunkIdx.l2runtime.(*scavengeIndex).clearruntime/internal/atomic.(*Uint8).Andruntime.chunkBaseruntime.fillAlignedruntime.fillAligned.func1runtime.(*pallocData).findScavengeCandidateruntime/internal/sys.LeadingZeros64runtime.(*scavengeIndex).findruntime.(*atomicOffAddr).Loadruntime/internal/sys.LeadingZeros8runtime.chunkIndexruntime.(*atomicOffAddr).StoreMinruntime.(*atomicOffAddr).StoreUnmarkruntime.chunkPageIndexruntime.(*atomicOffAddr).Clearruntime.(*scavengeIndex).markruntime/internal/atomic.(*Uint8).Orruntime.offAddr.lessThanruntime.(*atomicOffAddr).StoreMarkedruntime.(*piController).nextruntime.isInfruntime.isNaNruntime.isFiniteruntime.(*piController).resetruntime.(*stackScanState).putPtrruntime.(*stackScanState).getPtrruntime.(*stackScanState).addObjectruntime.binarySearchTreeruntime.(*mheap).nextSpanForSweepruntime.(*sweepClass).loadruntime.sweepClass.splitruntime.(*sweepClass).updateruntime.(*activeSweep).endruntime.finishsweep_mruntime.(*activeSweep).sweepersruntime.bgsweepruntime.(*sweepLocker).tryAcquireruntime.sweeponeruntime/internal/atomic.(*Uintptr).Addruntime.(*activeSweep).markDrainedruntime.(*scavengerState).readyruntime.(*mspan).ensureSweptruntime.(*sweepLocked).sweepruntime.(*specialsIter).validruntime.(*specialsIter).nextruntime.(*specialsIter).unlinkAndNextruntime.markBits.setMarkedNonAtomicruntime.spanHasNoSpecialsruntime.(*mspan).markBitsForBaseruntime.(*mspan).allocBitsForIndexruntime.(*mspan).countAllocruntime.(*mSpanStateBox).setruntime.(*markBits).advanceruntime.clobberfreeruntime.(*sweepLocked).sweep.func1runtime.(*mspan).reportZombiesruntime.deductSweepCreditruntime.gcPaceSweeperruntime/internal/atomic.(*Uintptr).Loadruntime.(*gcWork).initruntime.(*gcWork).putruntime.(*gcWork).putBatchruntime.(*gcWork).tryGetruntime.(*gcWork).disposeruntime.(*gcWork).balanceruntime.(*workbuf).checknonemptyruntime.(*workbuf).checkemptyruntime.getemptyruntime.getempty.func1runtime.putemptyruntime.putfullruntime.trygetfullruntime.handoffruntime.prepareFreeWorkbufsruntime.(*mSpanList).takeAllruntime.(*mSpanList).isEmptyruntime.freeSomeWbufsruntime.freeSomeWbufs.func1runtime.recordspanruntime.inHeapOrStackruntime.spanOfHeapruntime.(*mheap).initruntime.(*mcentral).initruntime.(*mheap).reclaimruntime/internal/atomic.(*Uintptr).CompareAndSwapruntime.(*mheap).reclaimChunkruntime.(*mheap).allocruntime.(*mheap).alloc.func1runtime.(*mheap).allocManualruntime.(*mheap).setSpansruntime.(*mheap).allocNeedsZeroruntime.(*mheap).allocMSpanLockedruntime.(*mheap).allocSpanruntime.(*pageCache).emptyruntime.(*mheap).tryAllocMSpanruntime.(*mheap).initSpanruntime.spanAllocType.manualruntime.(*mheap).growruntime.(*mheap).freeSpanruntime.(*mheap).freeSpan.func1runtime.(*mheap).freeManualruntime.(*mheap).freeSpanLockedruntime.(*mheap).freeMSpanLockedruntime.(*mspan).initruntime.(*mSpanList).removeruntime.(*mSpanList).insertruntime.addspecialruntime.spanHasSpecialsruntime.removespecialruntime.addfinalizerruntime.removefinalizerruntime.setprofilebucketruntime.freeSpecialruntime.newMarkBitsruntime.(*gcBitsArena).tryAllocruntime.newAllocBitsruntime.nextMarkBitArenaEpochruntime.newArenaMayUnlockruntime.(*pageAlloc).initruntime.(*pageAlloc).growruntime.(*pageAlloc).updateruntime.addrsToSummaryRangeruntime.(*pageAlloc).allocRangeruntime.(*pallocData).allocAllruntime.(*pageBits).clearAllruntime.(*pallocBits).allocAllruntime.(*pageBits).setAllruntime.(*pageAlloc).findMappedAddrruntime.(*pageAlloc).findruntime.offAddrToLevelIndexruntime.pallocSum.startruntime.pallocSum.endruntime.levelIndexToOffAddrruntime.offAddr.addruntime.(*pageAlloc).find.func1runtime.offAddr.lessEqualruntime.(*pageAlloc).allocruntime.(*pageAlloc).freeruntime.(*pallocBits).freeruntime.(*pallocBits).free1runtime.(*pageBits).clearruntime.(*pallocBits).freeAllruntime.mergeSummariesruntime.pallocSum.unpackruntime.packPallocSumruntime.(*pageAlloc).sysInitruntime.(*pageAlloc).sysGrowruntime.(*pageAlloc).sysGrow.func2runtime.addrRange.sizeruntime.offAddr.diffruntime.(*pageAlloc).sysGrow.func3runtime.(*scavengeIndex).growruntime.(*pageCache).allocruntime.(*pageCache).allocNruntime.findBitRange64runtime.(*pageCache).flushruntime.(*pageAlloc).allocToCacheruntime.(*pallocBits).pages64runtime.(*pageBits).block64runtime.(*pallocBits).allocPages64runtime.(*pageBits).setBlock64runtime.(*pageBits).clearBlock64runtime.(*pageBits).setRangeruntime.(*pageBits).setruntime.(*pageBits).clearRangeruntime.(*pageBits).popcntRangeruntime.(*pallocBits).summarizeruntime.(*pallocBits).findruntime.(*pallocBits).find1runtime.(*pallocBits).findSmallNruntime.(*pallocBits).findLargeNruntime.(*pallocData).allocRangeruntime.(*pallocBits).allocRangeruntime.newBucketruntime.(*bucket).mpruntime.(*bucket).bpruntime.stkbucketruntime/internal/atomic.(*UnsafePointer).Loadruntime/internal/atomic.(*UnsafePointer).StoreNoWBruntime.(*bucket).stkruntime.eqsliceruntime.mProf_Flushruntime.(*mProfCycleHolder).setFlushedruntime.mProf_FlushLockedruntime.(*memRecordCycle).addruntime.mProf_Mallocruntime.(*mProfCycleHolder).readruntime.mProf_Malloc.func1runtime.mProf_Freeruntime.blockeventruntime.blocksampledruntime.saveblockeventruntime.gcallersruntime.tryRecordGoroutineProfileWBruntime.tryRecordGoroutineProfileruntime.(*goroutineProfileStateHolder).Loadruntime.(*goroutineProfileStateHolder).CompareAndSwapruntime.(*goroutineProfileStateHolder).Storeruntime.doRecordGoroutineProfileruntime.doRecordGoroutineProfile.func1runtime.savegruntime.traceallocruntime.tracebackruntime.tracealloc.func1runtime.tracefreeruntime.tracefree.func1runtime.tracegcruntime.makeAddrRangeruntime.addrRange.subtractruntime.(*addrRanges).initruntime.(*addrRanges).findSuccruntime.addrRange.containsruntime.(*addrRanges).findAddrGreaterEqualruntime.(*addrRanges).addruntime.offAddr.equalruntime.(*spanSet).pushruntime.(*atomicSpanSetSpinePointer).Loadruntime.(*atomicSpanSetSpinePointer).StoreNoWBruntime/internal/atomic.(*Pointer[...]).StoreNoWBruntime/internal/atomic.(*Pointer[...]).Loadruntime.(*atomicMSpanPointer).StoreNoWBruntime.(*spanSet).popruntime.(*atomicHeadTailIndex).loadruntime.headTailIndex.splitruntime.headTailIndex.headruntime.(*atomicHeadTailIndex).casruntime.makeHeadTailIndexruntime.(*atomicMSpanPointer).Loadruntime.(*spanSetBlockAlloc).freeruntime.(*spanSet).resetruntime.(*atomicHeadTailIndex).resetruntime.(*spanSetBlockAlloc).allocruntime.(*atomicHeadTailIndex).incTailruntime.init.4runtime.(*sysMemStat).addruntime.(*consistentHeapStats).acquireruntime.(*consistentHeapStats).releaseruntime.(*wbBuf).resetruntime.wbBufFlushruntime.(*wbBuf).discardruntime.wbBufFlush1runtime.netpollGenericInitruntime.(*pollCache).freeruntime.netpollreadyruntime.netpollunblockruntime.netpollblockcommitruntime.netpollblockruntime.netpollcheckerrruntime.(*pollDesc).inforuntime.pollInfo.closingruntime.pollInfo.expiredReadDeadlineruntime.pollInfo.expiredWriteDeadlineruntime.pollInfo.eventErrruntime/internal/atomic.(*Uintptr).Swapruntime.(*pollCache).allocruntime.netpollinitruntime/internal/syscall.EpollCreate1runtime.nonblockingPiperuntime/internal/syscall.EpollCtlruntime.netpollopenruntime.netpollcloseruntime.netpollBreakruntime.netpollruntime.(*pollDesc).setEventErrruntime.futexsleepruntime.(*timespec).setNsecruntime.futexwakeupruntime.futexwakeup.func1runtime.getproccountruntime.newosprocruntime.sigprocmaskruntime.mcountruntime.newosproc.func1runtime.sysargsruntime.argv_indexruntime.sysauxvruntime.getHugePageSizeruntime.atoiruntime.osinitruntime.sigdelsetruntime.getRandomDataruntime.mpreinitruntime.minitruntime.setsigruntime.sigfillsetruntime.setsigstackruntime.sysSigactionruntime.signalMruntime.setThreadCPUProfilerruntime.runPerThreadSyscallruntime.panicCheck1runtime.hasPrefixruntime.panicCheck2runtime.goPanicIndexruntime.goPanicIndexUruntime.goPanicSliceAlenruntime.goPanicSliceAlenUruntime.goPanicSliceAcapruntime.goPanicSliceAcapUruntime.goPanicSliceBruntime.goPanicSliceBUruntime.goPanicSlice3Alenruntime.goPanicSlice3AlenUruntime.goPanicSlice3Cruntime.panicshiftruntime.panicdivideruntime.deferprocStackruntime.newdeferruntime.freedeferruntime.freedeferpanicruntime.freedeferfnruntime.deferreturnruntime.preprintpanicsruntime.printpanicsruntime.addOneOpenDeferFrameruntime.addOneOpenDeferFrame.func1runtime.addOneOpenDeferFrame.func1.1runtime.funcdataruntime.runOpenDeferFrameruntime.readvarintUnsaferuntime.deferCallSaveruntime.gopanicruntime.getargpruntime.gorecoverruntime.throwruntime.throw.func1runtime.fatalruntime.fatal.func1runtime.recoveryruntime.fatalthrowruntime.fatalthrow.func1runtime.fatalpanicruntime.crashruntime.fatalpanic.func1runtime.startpanic_mruntime.dopanic_mruntime.signameruntime.gotracebackruntime.canpanicruntime.shouldPushSigpanicruntime.isAbortPCruntime.suspendGruntime.preemptMruntime.dumpgstatusruntime.resumeGruntime.asyncPreempt2runtime.init.5runtime.isAsyncSafePointruntime.canPreemptMruntime.recordForPanicruntime.printlockruntime.gwriteruntime.writeErrruntime.printspruntime.printnlruntime.printboolruntime.printfloatruntime.printcomplexruntime.printuintruntime.printintruntime.printhexruntime.printpointerruntime.printuintptrruntime.printstringruntime.bytesruntime.printsliceruntime.hexdumpWordsruntime.mainruntime.lockOSThreadruntime.dolockOSThreadruntime.main.func2runtime.init.6runtime.forcegchelperruntime.goschedIfBusyruntime.goparkruntime.goreadyruntime.goready.func1runtime.acquireSudogruntime.releaseSudogruntime.badmcallruntime.badmcall2runtime.badreflectcallruntime.badmorestackg0runtime.writeErrStrruntime.badmorestackgsignalruntime.badctxtruntime.allgaddruntime.forEachGruntime.forEachGRaceruntime.atomicAllGruntime.atomicAllGIndexruntime.cpuinitruntime.getGodebugEarlyruntime.schedinitruntime.moduledataverifyruntime.stackinitruntime.(*mSpanList).initruntime.fastrandinitruntime.sigsaveruntime.goenvsruntime.checkmcountruntime.mReserveIDruntime.mcommoninitruntime.int64Hashruntime.readyruntime.freezetheworldruntime.casfrom_Gscanstatusruntime.castogscanstatusruntime.casgstatusruntime.waitReason.isMutexWaitruntime.casgstatus.func1runtime.casGToPreemptScanruntime.casGFromPreemptedruntime.stopTheWorldruntime.stopTheWorld.func1runtime.startTheWorldruntime.stopTheWorldGCruntime.startTheWorldGCruntime.stopTheWorldWithSemaruntime.startTheWorldWithSemaruntime.netpollinitedruntime.(*puintptr).setruntime.traceGCSTWDoneruntime.mstart0runtime.mstart1runtime.mstartm0runtime.mParkruntime.mexitruntime.unminitruntime.forEachPruntime.runSafePointFnruntime.allocmruntime.allocm.func1runtime.needmruntime.unlockextraruntime/internal/atomic.(*Int32).Addruntime.newextramruntime/internal/atomic.(*Uint32).Swapruntime.oneNewExtraMruntime.dropmruntime.msigrestoreruntime.lockextraruntime.usleep_no_gruntime.osyield_no_gruntime.newmruntime.newm1runtime.startTemplateThreadruntime.templateThreadruntime.muintptr.ptrruntime.stopmruntime.mspinningruntime.startmruntime.mgetruntime.runqemptyruntime.handoffpruntime.traceReaderAvailableruntime/internal/atomic.(*Pointer[...]).Loadruntime/internal/atomic.(*Int32).CompareAndSwapruntime.nobarrierWakeTimeruntime.wakepruntime.stoplockedmruntime.startlockedmruntime.gcstopmruntime.executeruntime.findRunnableruntime.wakefingruntime.(*m).becomeSpinningruntime/internal/atomic.(*Int64).Swapruntime.pollWorkruntime.stealWorkruntime.(*randomOrder).startruntime.(*randomEnum).nextruntime.(*randomEnum).doneruntime.(*randomEnum).positionruntime.pMask.readruntime.checkRunqsNoPruntime.checkTimersNoPruntime.checkIdleGCNoPruntime.(*gcControllerState).needIdleMarkWorkerruntime.wakeNetPollerruntime.resetspinningruntime.injectglistruntime.scheduleruntime.schedEnabledruntime.checkTimersruntime.parkunlock_cruntime.park_mruntime.dropgruntime.setMNoWBruntime.setGNoWBruntime.goschedImplruntime.globrunqputruntime.gosched_mruntime.goschedguarded_mruntime.traceGoSchedruntime.gopreempt_mruntime.traceGoPreemptruntime.preemptParkruntime.goyield_mruntime.goexit1runtime.traceGoEndruntime.goexit0runtime.(*gcControllerState).addScannableStackruntime.saveruntime.reentersyscallruntime.reentersyscall.func1runtime.entersyscall_sysmonruntime.entersyscall_gcwaitruntime.entersyscallblockruntime.entersyscallblock.func2runtime.entersyscallblock.func1runtime.entersyscallblock_handoffruntime.traceGoSysCallruntime.exitsyscall.func1runtime.exitsyscallfastruntime.exitsyscallfast.func1runtime.exitsyscallfast_reacquiredruntime.exitsyscallfast_reacquired.func1runtime.exitsyscallfast_pidleruntime.exitsyscall0runtime.malgruntime.round2runtime.malg.func1runtime.newprocruntime.newproc.func1runtime.newproc1runtime.saveAncestorsruntime.gfputruntime.(*gQueue).pushruntime.gfgetruntime.gfget.func2runtime.gfget.func1runtime.gfpurgeruntime.unlockOSThreadruntime.dounlockOSThreadruntime.badunlockosthreadruntime._Systemruntime._ExternalCoderuntime._LostExternalCoderuntime._GCruntime._LostSIGPROFDuringAtomic64runtime._VDSOruntime.sigprofruntime.inVDSOPageruntime.(*p).initruntime.pMask.setruntime.pMask.clearruntime.(*p).destroyruntime.globrunqputheadruntime.(*p).destroy.func1runtime.procresizeruntime.traceGomaxprocsruntime.(*randomOrder).resetruntime.gcdruntime.acquirepruntime.wirepruntime.releasepruntime.incidlelockedruntime.checkdeadruntime.checkdead.func1runtime.sysmonruntime.retakeruntime.preemptallruntime.preemptoneruntime.schedtraceruntime.schedEnableUserruntime.mputruntime.globrunqgetruntime.updateTimerPMaskruntime.pidleputruntime.pidlegetruntime.pidlegetSpinningruntime.runqputruntime.(*guintptr).casruntime.runqputslowruntime.runqputbatchruntime.runqgetruntime.runqdrainruntime.runqgrabruntime.runqstealruntime.doInitruntime.(*profBuf).takeOverflowruntime.(*profBuf).canWriteRecordruntime.(*profAtomic).loadruntime.profIndex.tagCountruntime.countSubruntime.(*profBuf).canWriteTwoRecordsruntime.(*profBuf).writeruntime.(*profBuf).hasOverflowruntime.(*profBuf).incrementOverflowruntime.profIndex.addCountsAndClearFlagsruntime.(*profAtomic).casruntime.(*profBuf).wakeupExtraruntime.retryOnEAGAINruntime.argsruntime.goargsruntime.gostringnocopyruntime.goenvs_unixruntime.testAtomic64runtime.checkruntime.timedivruntime.parsedebugvarsruntime/internal/atomic.(*Pointer[...]).StoreNoWBruntime.extendRandomruntime.waitReason.Stringruntime.(*rwmutex).rlockruntime.(*rwmutex).rlock.func1runtime.(*rwmutex).runlockruntime.readyWithTimeruntime.semacquire1runtime.cansemacquireruntime.(*semTable).rootForruntime.semrelease1runtime.goyieldruntime.(*semaRoot).queueruntime.(*semaRoot).dequeueruntime.(*semaRoot).rotateLeftruntime.(*semaRoot).rotateRightruntime.dumpregsruntime.(*sigctxt).raxruntime.(*sigctxt).regsruntime.(*sigctxt).rbxruntime.(*sigctxt).rcxruntime.(*sigctxt).rdxruntime.(*sigctxt).rdiruntime.(*sigctxt).rsiruntime.(*sigctxt).rbpruntime.(*sigctxt).rspruntime.(*sigctxt).r8runtime.(*sigctxt).r9runtime.(*sigctxt).r10runtime.(*sigctxt).r11runtime.(*sigctxt).r12runtime.(*sigctxt).r13runtime.(*sigctxt).r14runtime.(*sigctxt).r15runtime.(*sigctxt).ripruntime.(*sigctxt).rflagsruntime.(*sigctxt).csruntime.(*sigctxt).fsruntime.(*sigctxt).gsruntime.(*sigctxt).preparePanicruntime.(*sigctxt).pushCallruntime.(*sigctxt).set_rspruntime.(*sigctxt).set_ripruntime.initsigruntime.getsigruntime.sigInstallGoHandlerruntime.sigInitIgnoredruntime.sigpipeos/signal.signal_ignoredruntime.doSigPreemptruntime.wantAsyncPreemptruntime.(*sigctxt).sigpcruntime.(*sigctxt).sigspruntime.sigtrampgoruntime.sigFetchGruntime.validSIGPROFruntime.(*sigctxt).sigcoderuntime.restoreGsignalStackruntime.sigprofNonGoruntime.sigprofNonGoPCruntime.adjustSignalStackruntime.setGsignalStackruntime.setSignalstackSPruntime.sighandlerruntime.(*sigctxt).sigFromUserruntime.(*sigctxt).faultruntime.(*sigctxt).sigaddrruntime.sigpanicruntime.panicmemAddrruntime.panicmemruntime.panicfloatruntime.panicoverflowruntime.dieFromSignalruntime.raisebadsignalruntime.noSignalStackruntime.sigNotOnStackruntime.signalDuringForkruntime.badsignalruntime.sigfwdgoruntime.sigblockruntime.unblocksigruntime.sigaddsetruntime.minitSignalsruntime.minitSignalStackruntime.minitSignalMaskruntime.blockableSigruntime.unminitSignalsruntime.signalstackruntime.sigsendruntime.panicmakeslicelenruntime.makeslicecopyruntime.makesliceruntime.panicmakeslicecapruntime.growsliceruntime.isPowerOfTworuntime.slicecopyruntime.stackpoolallocruntime.gclinkptr.ptrruntime.stackpoolfreeruntime.stackcacherefillruntime.stackcachereleaseruntime.stackcache_clearruntime.stackallocruntime.stacklog2runtime.stackfreeruntime.adjustpointersruntime.adjustframeruntime.adjustpointerruntime.adjustdefersruntime.syncadjustsudogsruntime.adjustsudogsruntime.copystackruntime.findsghiruntime.adjustctxtruntime.adjustpanicsruntime.newstackruntime.nilfuncruntime.gostartcallfnruntime.gostartcallruntime.shrinkstackruntime.freeStackSpansruntime.gcComputeStartingStackSizeruntime.(*stkframe).argBytesruntime.(*stkframe).argMapInternalruntime.(*stkframe).getStackMapruntime.stackmapdataruntime.stkobjinitruntime.concatstringsruntime.stringDataOnStackruntime.concatstring2runtime.concatstring3runtime.concatstring4runtime.concatstring5runtime.slicebytetostringruntime.rawstringtmpruntime.rawstringruntime.stringtoslicebyteruntime.stringtosliceruneruntime.slicerunetostringruntime.intstringruntime.rawbytesliceruntime.rawrunesliceruntime.atoi64runtime.parseByteCountruntime.findnullruntime.badsystemstackruntime.(*Frames).Nextruntime.expandCgoFramesruntime.modulesinitruntime.(*gcControllerState).addGlobalsruntime.moduledataverify1runtime.(*moduledata).textAddrruntime.(*Func).Entryruntime.(*_func).isInlinedruntime.(*_func).funcInforuntime.(*Func).startLineruntime.findfuncruntime.findmoduledatapruntime.(*moduledata).textOffruntime.pcvalueruntime.pcvalueCacheKeyruntime.funcnameruntime.cfuncnameruntime.funcpkgpathruntime.funcnameFromNameOffruntime.cfuncnameFromNameOffruntime.funcfileruntime.funcline1runtime.funclineruntime.funcspdeltaruntime.funcMaxSPDeltaruntime.pcdatavalueruntime.pcdatastartruntime.pcdatavalue1runtime.pcdatavalue2runtime.stepruntime.readvarintruntime.doaddtimerruntime.deltimerruntime.dodeltimerruntime.updateTimer0Whenruntime.dodeltimer0runtime.modtimerruntime.updateTimerModifiedEarliestruntime.moveTimersruntime.adjusttimersruntime.addAdjustedTimersruntime.runtimerruntime.runOneTimerruntime.clearDeletedTimersruntime.timeSleepUntilruntime.siftupTimerruntime.siftdownTimerruntime.badTimerruntime.writeruntime.traceReaderruntime/internal/atomic.(*Pointer[...]).CompareAndSwapNoWBruntime/internal/atomic.(*UnsafePointer).CompareAndSwapNoWBruntime.traceProcFreeruntime.traceFullQueueruntime.traceBufPtr.ptrruntime.traceEventruntime.traceEventLockedruntime.(*traceBufPtr).setruntime.(*traceBuf).byteruntime.(*traceBuf).varintruntime.traceEventLocked.func1runtime.traceCPUSampleruntime.traceStackIDruntime.traceAcquireBufferruntime.lockRankMayTraceFlushruntime.traceReleaseBufferruntime.traceFlushruntime.(*traceStackTable).putruntime.(*traceStackTable).findruntime.(*traceStack).stackruntime.(*traceStackTable).put.func1runtime.(*traceStackTable).newStackruntime.(*traceAlloc).allocruntime.(*traceAllocBlockPtr).setruntime.traceProcStartruntime.traceProcStopruntime.traceGCSweepStartruntime.traceGCSweepSpanruntime.traceGCSweepDoneruntime.traceGoCreateruntime.traceGoStartruntime.traceGoParkruntime.traceGoUnparkruntime.traceGoSysExitruntime.traceGoSysBlockruntime.traceHeapGoalruntime.startPCforTraceruntime.gentracebackruntime.elideWrapperCallingruntime.printArgsruntime.printArgs.func3runtime.printArgs.func2runtime.printArgs.func1runtime.tracebackCgoContextruntime.printcreatedbyruntime.printcreatedby1runtime.tracebacktrapruntime.traceback1runtime.printAncestorTracebackruntime.printAncestorTracebackFuncInforuntime.callersruntime.callers.func1runtime.showframeruntime.showfuncinforuntime.isExportedRuntimeruntime.goroutineheaderruntime.tracebackothersruntime.tracebackothers.func1runtime.tracebackHexdumpruntime.tracebackHexdump.func1runtime.isSystemGoroutineruntime.printCgoTracebackruntime.printOneCgoTracebackruntime.callCgoSymbolizerruntime.cgoContextPCsruntime.(*_type).stringruntime.(*_type).pkgpathruntime.resolveNameOffruntime.reflectOffsLockruntime.reflectOffsUnlockruntime.resolveTypeOffruntime.(*_type).textOffruntime.name.nameruntime.name.readvarintruntime.name.dataruntime.name.tagruntime.name.pkgPathruntime.name.isBlankruntime.typelinksinitruntime.typesEqualruntime.name.isEmbeddedruntime.panicunsafestringlenruntime.panicunsafestringnilptrruntime.panicunsafeslicelenruntime.panicunsafeslicenilptrruntime.decoderuneruntime.encoderuneruntime.vdsoInitFromSysinfoEhdrruntime.vdsoFindVersionruntime.vdsoParseSymbolsruntime.vdsoParseSymbols.func1runtime._ELF_ST_TYPEruntime._ELF_ST_BINDruntime.vdsoauxvruntime.schedtrace.func1runtime.injectglist.func1runtime.startTheWorld.func1runtime.main.func1runtime.fatalpanic.func2runtime.preprintpanics.func1runtime.sysSigaction.func1runtime.wbBufFlush.func1runtime.sweepone.func1runtime.(*scavengerState).init.func1runtime.(*scavengerState).init.func2runtime.(*scavengerState).init.func3runtime.(*scavengerState).init.func4runtime.gcResetMarkState.func1runtime.gcBgMarkWorker.func1runtime.gcMarkTermination.func2runtime.gcMarkTermination.func3runtime.gcMarkTermination.func4.1runtime.gcMarkTermination.func4runtime.gcMarkDone.func1.1runtime.gcMarkDone.func1runtime.gcMarkDone.func3runtime.gcStart.func1runtime.runExitHooks.func1runtime.runExitHooks.func1.1runtime.debugCallWrap1.func1runtime.debugCallWrap.func2runtime.(*mheap).allocSpan.func1runtime.(*pageAlloc).sysGrow.func1runtime.offAddr.addrruntime.blockAlignSummaryRangeruntime.initsync/atomic.StorePointersync/atomic.SwapPointersync/atomic.CompareAndSwapPointerreflect.chanleninternal/reflectlite.chanlenreflect.ifaceE2Ireflect.unsafe_Newinternal/reflectlite.unsafe_Newreflect.unsafe_NewArrayreflect.makemapreflect.mapassignreflect.mapassign_faststrreflect.mapdeletereflect.mapdelete_faststrreflect.mapiterinitreflect.mapiternextreflect.mapiterkeyreflect.mapiterelemreflect.mapleninternal/reflectlite.maplenreflect.typedmemmoveinternal/reflectlite.typedmemmovereflect.typedslicecopyreflect.typedmemclrreflect.verifyNotInHeapPtrsync.runtime_registerPoolCleanupsync.eventinternal/poll.runtime_pollServerInitinternal/poll.runtime_pollOpenruntime.(*pollDesc).publishInfointernal/poll.runtime_pollCloseinternal/poll.runtime_pollResetinternal/poll.runtime_pollWaitinternal/poll.runtime_pollUnblockruntime.netpollgoreadysync.throwsync.fatalruntime.entersyscallruntime.exitsyscallsync.runtime_procPinruntime.procPinsync.runtime_procUnpinruntime.procUnpinsync.runtime_canSpinsync.runtime_doSpinsyscall.runtime_envsos.runtime_argsruntime/debug.SetTracebackreflect.typelinksreflect.resolveNameOffreflect.resolveTypeOffreflect.resolveTextOffinternal/reflectlite.resolveNameOffreflect.addReflectOffsync.runtime_Semacquireinternal/poll.runtime_Semacquiresync.runtime_Semreleasesync.runtime_SemacquireMutexinternal/poll.runtime_Semreleasesync.runtime_notifyListChecksync.runtime_nanotimeos.sigpiperuntime.morestackcruntime.gostringreflect.memmovegogocallRetgosave_systemstack_switchsetg_gccaeshashbodydebugCall32debugCall64debugCall128debugCall256debugCall512debugCall1024debugCall2048debugCall4096debugCall8192debugCall16384debugCall32768debugCall65536_rt0_amd64runtime.rt0_goruntime.asminitruntime.mstartruntime.gogoruntime.mcallruntime.systemstack_switchruntime.systemstackruntime.morestackruntime.morestack_noctxtruntime.spillArgsruntime.unspillArgsruntime.reflectcallruntime.call16runtime.call32runtime.call64runtime.call128runtime.call256runtime.call512runtime.call1024runtime.call2048runtime.call4096runtime.call8192runtime.call16384runtime.call32768runtime.call65536runtime.call131072runtime.call262144runtime.call524288runtime.call1048576runtime.call2097152runtime.call4194304runtime.call8388608runtime.call16777216runtime.call33554432runtime.call67108864runtime.call134217728runtime.call268435456runtime.call536870912runtime.call1073741824runtime.procyieldruntime.publicationBarrierruntime.asmcgocallruntime.setgruntime.abortruntime.stackcheckruntime.cputicksruntime.memhashruntime.strhashruntime.memhash32runtime.memhash64runtime.checkASMruntime.return0runtime.goexitruntime.sigpanic0runtime.gcWriteBarrierruntime.gcWriteBarrierCXruntime.gcWriteBarrierDXruntime.gcWriteBarrierBXruntime.gcWriteBarrierSIruntime.gcWriteBarrierR8runtime.gcWriteBarrierR9runtime.debugCallV2runtime.debugCallPanickedruntime.panicIndexruntime.panicIndexUruntime.panicSliceAlenruntime.panicSliceAlenUruntime.panicSliceAcapruntime.panicSliceAcapUruntime.panicSliceBruntime.panicSliceBUruntime.panicSlice3Alenruntime.panicSlice3AlenUruntime.panicSlice3Cruntime.duffzeroruntime.duffcopyruntime.memclrNoHeapPointersruntime.memmoveruntime.asyncPreempt_rt0_amd64_linuxruntime.sigprofNonGoWrapperruntime.exitruntime.exitThreadruntime.openruntime.closefdruntime.write1runtime.readruntime.pipe2runtime.usleepruntime.gettidruntime.raiseruntime.raiseprocruntime.getpidruntime.tgkillruntime.timer_createruntime.timer_settimeruntime.timer_deleteruntime.mincoreruntime.nanotime1runtime.rtsigprocmaskruntime.rt_sigactionruntime.callCgoSigactionruntime.sigfwdruntime.sigtrampruntime.cgoSigtrampruntime.sigreturnruntime.sysMmapruntime.callCgoMmapruntime.sysMunmapruntime.callCgoMunmapruntime.madviseruntime.futexruntime.cloneruntime.sigaltstackruntime.settlsruntime.osyieldruntime.sched_getaffinitytime.nowruntime.(*lockRank).Stringruntime.(*waitReason).Stringruntime.(*errorString).Errorruntime.(*errorAddressString).Errorruntime.(*plainError).Errorruntime.(*boundsError).Errorruntime.(*itabTableType).add-fmruntime.debugCallCheckruntime.debugCallWrapruntime.reflectcallmoveruntime.wbBufFlushruntime.osinitruntime.osyieldruntime.asyncPreempt2runtime.badmcallruntime.badmcall2runtime.badreflectcallruntime.badmorestackg0runtime.badmorestackgsignalruntime.schedinitruntime.mstart0runtime.goexit1runtime.newprocruntime.argsruntime.checkruntime.newstackruntime.morestackcruntime.badsystemstackruntime.reflectcallruntime.asmcgocallruntime.writetype:.eq.runtime._functype:.eq.runtime.itabtype:.eq.runtime.modulehashtype:.eq.runtime.bitvectortype:.eq.runtime.Frametype:.eq.[...]runtime.Frametype:.eq.runtime.TypeAssertionErrortype:.eq.runtime._panictype:.eq.runtime.mSpanListtype:.eq.runtime.gcBitstype:.eq.runtime.specialtype:.eq.runtime.mspantype:.eq.runtime.boundsErrortype:.eq.runtime.sysmonticktype:.eq.runtime.mcachetype:.eq.struct { runtime.gList; runtime.n int32 }type:.eq.runtime.hchantype:.eq.runtime.sudogtype:.eq.runtime.notInHeaptype:.eq.runtime.limiterEventtype:.eq.runtime.workbuftype:.eq.runtime.gcWorktype:.eq.runtime.mOStype:.eq.runtime.errorAddressStringtype:.eq.runtime.piControllertype:.eq.[...]stringsync/atomic.SwapUintptrsync/atomic.CompareAndSwapUintptrsync/atomic.StoreUint32sync/atomic.StoreUintptrtype:.eq.sync/atomic.Uint64internal/reflectlite.Swapperinternal/reflectlite.ValueOfinternal/reflectlite.escapesinternal/reflectlite.unpackEfaceinternal/reflectlite.(*rtype).Kindinternal/reflectlite.ifaceIndirinternal/reflectlite.Value.Kindinternal/reflectlite.flag.kindinternal/reflectlite.(*rtype).Sizeinternal/reflectlite.Swapper.func9internal/reflectlite.arrayAtinternal/reflectlite.addinternal/reflectlite.Swapper.func8internal/reflectlite.Swapper.func7internal/reflectlite.Swapper.func6internal/reflectlite.Swapper.func5internal/reflectlite.Swapper.func4internal/reflectlite.Swapper.func3internal/reflectlite.name.nameinternal/reflectlite.name.readVarintinternal/reflectlite.name.datainternal/reflectlite.Kind.Stringinternal/reflectlite.(*rtype).Stringinternal/reflectlite.(*rtype).nameOffinternal/reflectlite.(*rtype).exportedMethodsinternal/reflectlite.(*rtype).uncommoninternal/reflectlite.(*uncommonType).exportedMethodsinternal/reflectlite.(*rtype).NumMethodinternal/reflectlite.(*interfaceType).NumMethodinternal/reflectlite.(*rtype).PkgPathinternal/reflectlite.(*rtype).Nameinternal/reflectlite.(*rtype).hasNameinternal/reflectlite.(*rtype).Eleminternal/reflectlite.toTypeinternal/reflectlite.(*rtype).Leninternal/reflectlite.(*rtype).NumFieldinternal/reflectlite.(*ValueError).Errorinternal/reflectlite.Value.Leninternal/reflectlite.Value.pointerinternal/reflectlite.(*rtype).pointersinternal/reflectlite.Swapper.func1internal/reflectlite.Swapper.func2type:.eq.internal/reflectlite.uncommonTypeinternal/reflectlite.(*Kind).Stringtype:.eq.internal/reflectlite.ValueErrorerrors.(*errorString).Errorerrors.initinternal/reflectlite.TypeOfsync.(*Map).Loadsync.(*Map).loadReadOnlysync.(*Mutex).Locksync/atomic.(*Pointer[...]).Loadsync.(*Mutex).Unlocksync.(*entry).loadsync.(*Map).LoadOrStoresync.(*entry).unexpungeLockedsync/atomic.(*Pointer[...]).CompareAndSwapsync/atomic.(*Pointer[...]).Storesync.newEntrysync/atomic.(*Pointer[...]).Storesync.(*entry).tryLoadOrStoresync/atomic.(*Pointer[...]).Loadsync.(*entry).trySwapsync.(*Map).Swapsync.(*entry).swapLockedsync/atomic.(*Pointer[...]).Swapsync.(*Map).missLockedsync.(*Map).dirtyLockedsync.(*entry).tryExpungeLockedsync.(*Mutex).lockSlowsync.(*Mutex).unlockSlowsync.(*Once).doSlowsync.(*Once).doSlow.func2sync.(*Once).doSlow.func1sync.(*Pool).Putsync.(*Pool).Getsync.(*Pool).getSlowsync.indexLocalsync.(*Pool).pinsync.(*Pool).pinSlowsync.(*Pool).pinSlow.func1sync.poolCleanupsync.init.0sync.(*poolDequeue).pushHeadsync.(*poolDequeue).unpacksync.(*poolDequeue).popHeadsync.(*poolDequeue).packsync.(*poolDequeue).popTailsync.(*poolChain).pushHeadsync.storePoolChainEltsync.(*poolChain).popHeadsync.loadPoolChainEltsync.(*poolChain).popTailsync.init.1sync.(*WaitGroup).Addsync/atomic.(*Uint64).Addsync/atomic.(*Uint64).Loadsync/atomic.(*Uint64).Storesync.(*WaitGroup).Waitsync/atomic.(*Uint64).CompareAndSwapsync.inittype:.eq.sync/atomic.Pointer[...]type:.eq.sync.entrytype:.eq.sync.poolLocalInternaltype:.eq.sync.poolLocaltype:.eq.sync.WaitGroupio.initerrors.Newunicode/utf8.DecodeRuneunicode/utf8.DecodeRuneInStringunicode/utf8.DecodeLastRuneunicode/utf8.RuneStartunicode/utf8.DecodeLastRuneInStringunicode/utf8.EncodeRuneunicode/utf8.appendRuneNonASCIIunicode/utf8.RuneCountunicode/utf8.RuneCountInStringunicode/utf8.ValidStringunicode.IsSpaceunicode.is16unicode.is32unicode.isExcludingLatinunicode.tounicode.ToUpperunicode.Tounicode.ToLowerunicode.SimpleFoldunicode.initbytes.(*Buffer).Stringbytes.(*Buffer).Lenbytes.(*Buffer).growbytes.(*Buffer).Resetbytes.(*Buffer).tryGrowByReslicebytes.(*Buffer).Writebytes.(*Buffer).WriteStringbytes.growSlicebytes.(*Buffer).WriteBytebytes.IndexRuneunicode/utf8.ValidRunebytes.IndexBytebytes.IndexAnybytes.makeASCIISetbytes.(*asciiSet).containsbytes.TrimRightFuncbytes.TrimFuncbytes.TrimLeftFuncbytes.indexFuncbytes.lastIndexFuncbytes.TrimRightbytes.trimRightBytebytes.trimRightASCIIbytes.trimRightUnicodebytes.containsRunebytes.TrimSpacebytes.EqualFoldbytes.Indexbytes.Equalinternal/bytealg.Cutoverbytes.Cutbytes.growSlice.func1bytes.initmath.initstrconv.specialstrconv.commonPrefixLenIgnoreCasemath.NaNmath.Float64frombitsmath.Infstrconv.(*decimal).setstrconv.lowerstrconv.readFloatstrconv.(*decimal).floatBitsstrconv.atof64exactstrconv.atof32exactstrconv.atofHexstrconv.rangeErrorstrconv.cloneStringmath.Float32frombitsstrconv.atof32strconv.syntaxErrorstrconv.atof64strconv.ParseFloatstrconv.parseFloatPrefixstrconv.(*NumError).Errorstrconv.Quotestrconv.quoteWithstrconv.baseErrorstrconv.Itoastrconv.bitSizeErrorstrconv.ParseUintstrconv.ParseIntstrconv.underscoreOKstrconv.(*decimal).Assignstrconv.trimstrconv.rightShiftstrconv.leftShiftstrconv.prefixIsLessThanstrconv.(*decimal).Shiftstrconv.(*decimal).Roundstrconv.shouldRoundUpstrconv.(*decimal).RoundUpstrconv.(*decimal).RoundDownstrconv.(*decimal).RoundedIntegerstrconv.eiselLemire64math/bits.LeadingZeros64strconv.eiselLemire32strconv.FormatFloatstrconv.maxstrconv.genericFtoamath.Float32bitsmath.Float64bitsstrconv.bigFtoastrconv.formatDigitsstrconv.roundShorteststrconv.fmtEstrconv.minstrconv.fmtFstrconv.fmtBstrconv.fmtXstrconv.ryuFtoaFixed32strconv.mulByLog2Log10strconv.divisibleByPower5strconv.ryuFtoaFixed64strconv.formatDecimalstrconv.ryuFtoaShorteststrconv.computeBoundsstrconv.ryuDigitsstrconv.divmod1e9strconv.ryuDigits32strconv.mult64bitPow10strconv.mulByLog10Log2strconv.mult128bitPow10strconv.FormatUintstrconv.smallstrconv.FormatIntstrconv.AppendIntstrconv.AppendUintstrconv.formatBitsstrconv.isPowerOfTwomath/bits.TrailingZerosstrconv.appendQuotedWithstrconv.appendQuotedRuneWithstrconv.appendEscapedRunestrconv.isInGraphicListstrconv.bsearch16strconv.CanBackquotestrconv.UnquoteCharstrconv.unhexstrconv.Unquotestrconv.unquotestrconv.indexstrconv.containsstrconv.IsPrintstrconv.bsearch32strconv.inittype:.eq.strconv.NumErrorinternal/itoa.Itoainternal/itoa.Uitoareflect.(*abiSeq).addArgreflect.(*abiSeq).stackAssignreflect.alignreflect.(*abiSeq).addRcvrreflect.ifaceIndirreflect.(*rtype).pointersreflect.(*abiSeq).regAssignreflect.(*rtype).Kindreflect.(*abiSeq).assignFloatNreflect.(*abiSeq).assignIntNreflect.newAbiDescreflect.(*bitVector).appendreflect.(*funcType).inreflect.addreflect.(*funcType).outreflect.(*abiSeq).stepsForValueinternal/abi.(*IntArgRegBitmap).Setreflect.intFromReginternal/abi.(*RegArgs).IntRegArgAddrreflect.intToRegreflect.makeMethodValuereflect.Value.Typereflect.methodValueCallCodePtrreflect.moveMakeFuncArgPtrsreflect.name.namereflect.name.readVarintreflect.name.datareflect.name.tagreflect.name.hasTagreflect.name.pkgPathreflect.newNamereflect.writeVarintreflect.Kind.Stringreflect.(*rtype).Stringreflect.(*rtype).nameOffreflect.(*rtype).Bitsreflect.(*rtype).commonreflect.(*rtype).exportedMethodsreflect.(*rtype).uncommonreflect.(*uncommonType).exportedMethodsreflect.(*rtype).NumMethodreflect.(*interfaceType).NumMethodreflect.(*rtype).PkgPathreflect.(*rtype).Namereflect.(*rtype).hasNamereflect.(*rtype).ChanDirreflect.(*rtype).Elemreflect.toTypereflect.(*rtype).Fieldreflect.(*rtype).Inreflect.(*rtype).Keyreflect.(*rtype).Lenreflect.(*rtype).NumFieldreflect.(*rtype).NumInreflect.(*rtype).NumOutreflect.(*rtype).Outreflect.ChanDir.Stringreflect.StructTag.Lookupreflect.(*structType).Fieldreflect.(*structField).embeddedreflect.name.embeddedreflect.name.isExportedreflect.(*rtype).ptrToreflect.(*rtype).typeOffreflect.resolveReflectNamereflect.fnv1reflect.(*rtype).Implementsreflect.implementsreflect.(*uncommonType).methodsreflect.specialChannelAssignabilityreflect.directlyAssignablereflect.haveIdenticalTypereflect.haveIdenticalUnderlyingTypereflect.typesByStringreflect.rtypeOffreflect.funcLayoutreflect.funcLayout.func1reflect.addTypeBitsreflect.packEfacereflect.(*ValueError).Errorreflect.valueMethodNameruntime.Callersruntime.CallersFramesreflect.flag.mustBeExportedSlowreflect.flag.mustBeAssignableSlowreflect.Value.Addrreflect.Value.panicNotBoolreflect.flag.mustBereflect.Value.bytesSlowreflect.flag.kindreflect.Value.CanAddrreflect.Value.runesreflect.methodReceiverreflect.(*rtype).textOffreflect.callMethodreflect.storeRcvrreflect.floatFromRegreflect.floatToRegreflect.archFloat32ToRegreflect.Value.Elemreflect.unpackEfacereflect.flag.roreflect.Value.Fieldreflect.Value.Indexreflect.arrayAtreflect.valueInterfacereflect.Value.Kindreflect.Value.Lenreflect.Value.lenNonSlicereflect.Value.pointerreflect.(*MapIter).Keyreflect.(*MapIter).Valuereflect.(*MapIter).Nextreflect.Value.IsValidreflect.(*hiter).initializedreflect.flag.panicNotMapreflect.copyValreflect.Value.NumMethodreflect.Value.NumFieldreflect.Value.Pointerreflect.Value.Setreflect.flag.mustBeAssignablereflect.flag.mustBeExportedreflect.Value.SetBoolreflect.Value.SetBytesreflect.Value.setRunesreflect.Value.SetFloatreflect.Value.SetIntreflect.Value.SetLenreflect.Value.SetMapIndexreflect.Value.SetUintreflect.Value.SetStringreflect.Value.Slicereflect.(*rtype).Sizereflect.Value.Stringreflect.Value.stringNonStringreflect.Value.typeSlowreflect.Value.UnsafePointerreflect.typesMustMatchreflect.Copyreflect.MakeSlicereflect.MakeMapWithSizereflect.Zeroreflect.Newreflect.Value.assignToreflect.Value.IsNilreflect.Value.Convertreflect.convertOpreflect.makeIntreflect.makeFloatreflect.makeFloat32reflect.makeComplexreflect.makeStringreflect.makeBytesreflect.makeRunesreflect.cvtIntreflect.Value.Intreflect.cvtUintreflect.Value.Uintreflect.cvtFloatIntreflect.Value.Floatreflect.cvtFloatUintreflect.cvtIntFloatreflect.cvtUintFloatreflect.cvtFloatreflect.cvtComplexreflect.Value.Complexreflect.cvtIntStringreflect.cvtUintStringreflect.cvtBytesStringreflect.Value.Bytesreflect.cvtStringBytesreflect.cvtRunesStringreflect.cvtStringRunesreflect.cvtSliceArrayPtrreflect.cvtSliceArrayreflect.cvtDirectreflect.cvtT2Ireflect.cvtI2Ireflect.initreflect.rtypeOfreflect.methodValueCalltype:.eq.reflect.uncommonTypetype:.eq.reflect.Methodreflect.(*Kind).Stringreflect.(*ChanDir).Stringreflect.(*Value).Kindreflect.(*Value).Lenreflect.(*Value).NumFieldreflect.(*Value).NumMethodreflect.(*Value).Stringreflect.(*funcType).Bitsreflect.(*funcType).Elemreflect.(*funcType).Fieldreflect.(*funcType).Implementsreflect.(*funcType).Keyreflect.(*funcType).Kindreflect.(*funcType).Lenreflect.(*funcType).Namereflect.(*funcType).NumFieldreflect.(*funcType).NumMethodreflect.(*funcType).PkgPathreflect.(*funcType).Stringreflect.(*funcType).commonreflect.(*ptrType).Bitsreflect.(*ptrType).Elemreflect.(*ptrType).Fieldreflect.(*ptrType).Implementsreflect.(*ptrType).Keyreflect.(*ptrType).Kindreflect.(*ptrType).Lenreflect.(*ptrType).Namereflect.(*ptrType).NumFieldreflect.(*ptrType).NumMethodreflect.(*ptrType).PkgPathreflect.(*ptrType).Stringreflect.(*ptrType).commonreflect.moveMakeFuncArgPtrsreflect.callMethodtype:.eq.reflect.ValueErrortype:.eq.reflect.makeFuncCtxttype:.eq.reflect.methodValueencoding/binary.initencoding/base64.(*Encoding).Encodeencoding/base64.(*encoder).Writeencoding/base64.(*encoder).Closeencoding/base64.(*Encoding).EncodedLenencoding/base64.CorruptInputError.Errorencoding/base64.(*Encoding).decodeQuantumencoding/base64.(*Encoding).Decodeencoding/base64.assemble64encoding/binary.bigEndian.PutUint64encoding/base64.assemble32encoding/binary.bigEndian.PutUint32encoding/base64.initencoding/base64.NewEncodingencoding/base64.Encoding.WithPaddingtype:.eq.encoding/base64.Encodingtype:.eq.encoding/base64.encoderencoding/base64.(*CorruptInputError).Errorsort.Searchsort.Slicesort.Sortsort.IntSlice.Lensort.IntSlice.Lesssort.IntSlice.Swapsort.Stablesort.insertionSort_funcsort.siftDown_funcsort.heapSort_funcsort.pdqsort_funcsort.partition_funcsort.partitionEqual_funcsort.partialInsertionSort_funcsort.breakPatterns_funcsort.nextPowerOfTwosort.(*xorshift).Nextsort.choosePivot_funcsort.medianAdjacent_funcsort.median_funcsort.order2_funcsort.reverseRange_funcsort.insertionSortsort.siftDownsort.heapSortsort.pdqsortsort.partitionsort.partitionEqualsort.partialInsertionSortsort.breakPatternssort.choosePivotsort.medianAdjacentsort.mediansort.order2sort.reverseRangesort.stablesort.symMergesort.rotatesort.swapRangesort.(*IntSlice).Lensort.(*IntSlice).Lesssort.(*IntSlice).Swapstrings.(*Builder).WriteRunestrings.(*Builder).copyCheckunicode/utf8.AppendRunestrings.IndexRunestrings.IndexBytestrings.Joinstrings.(*Builder).Growstrings.(*Builder).growstrings.(*Builder).WriteStringstrings.(*Builder).Stringstrings.Mapunicode/utf8.RuneLenstrings.(*Builder).Capstrings.(*Builder).WriteBytestrings.ToLowerstrings.Indexstrings.Cutencoding/pem.getLineencoding/pem.removeSpacesAndTabsbytes.ContainsAnyencoding/pem.Decodebytes.HasPrefixbytes.HasSuffixencoding/base64.(*Encoding).DecodedLeninternal/fmtsort.(*SortedMap).Leninternal/fmtsort.(*SortedMap).Lessinternal/fmtsort.(*SortedMap).Swapinternal/fmtsort.Sortreflect.Value.MapRangeinternal/fmtsort.comparereflect.Value.Boolinternal/fmtsort.floatCompareinternal/fmtsort.isNaNreflect.ValueOfreflect.escapesinternal/fmtsort.nilCompareinternal/oserror.initsyscall.SetNonblocksyscall.Errno.Errorsyscall.Closesyscall.errnoErrsyscall.fcntlsyscall.writesyscall.munmapsyscall.Getrlimitsyscall.Setrlimitsyscall.mmapsyscall.initsyscall.RawSyscallsyscall.Syscallsyscall.Syscall6syscall.(*Errno).Errortime.initpath.initio/fs.(*PathError).Errorio/fs.inittype:.eq.io/fs.PathErrorinternal/syscall/unix.IsNonblockinternal/poll.errNetClosing.Errorinternal/poll.(*DeadlineExceededError).Errorinternal/poll.(*fdMutex).increfAndCloseinternal/poll.(*fdMutex).rwlockinternal/poll.(*fdMutex).rwunlockinternal/poll.(*FD).decrefinternal/poll.(*fdMutex).decrefinternal/poll.(*FD).writeUnlockinternal/poll.(*pollDesc).initsync.(*Once).Dointernal/poll.errnoErrinternal/poll.(*pollDesc).prepareinternal/poll.convertErrinternal/poll.errClosinginternal/poll.(*pollDesc).waitinternal/poll.(*FD).Initinternal/poll.(*FD).destroyinternal/poll.(*pollDesc).closeinternal/poll.(*FD).Closeinternal/poll.(*pollDesc).evictinternal/poll.(*FD).Writeinternal/poll.(*FD).writeLockinternal/poll.(*pollDesc).prepareWriteinternal/poll.ignoringEINTRIOinternal/poll.(*pollDesc).pollableinternal/poll.(*pollDesc).waitWritesyscall.Writeinternal/poll.(*FD).Write.func1internal/poll.initinternal/poll.(*errNetClosing).Errortype:.eq.internal/poll.FDinternal/safefilepath.initos.glob..func1os.(*File).Nameos.(*File).Writeos.(*File).checkValidos.(*File).writeos.(*File).wrapErros.epipecheckos.NewFileos.newFileos.(*file).closeos.(*dirInfo).closeos.init.0os.init.1os.inittype:.eq.os.filefmt.Errorfsort.Intsfmt.(*wrapError).Errorfmt.(*wrapErrors).Errorfmt.(*fmt).writePaddingfmt.(*fmt).padfmt.(*buffer).writefmt.(*fmt).padStringfmt.(*buffer).writeStringfmt.(*fmt).fmtBooleanfmt.(*fmt).fmtUnicodefmt.(*fmt).fmtIntegerfmt.(*fmt).truncatefmt.(*fmt).fmtSfmt.(*fmt).truncateStringfmt.(*fmt).fmtBsfmt.(*fmt).fmtSbxfmt.(*fmt).fmtQstrconv.AppendQuotestrconv.AppendQuoteToASCIIfmt.(*fmt).fmtCfmt.(*fmt).fmtQcstrconv.AppendQuoteRuneToASCIIstrconv.AppendQuoteRunefmt.(*fmt).fmtFloatstrconv.AppendFloatfmt.(*buffer).writeBytefmt.glob..func1fmt.newPrinterfmt.(*fmt).initfmt.(*fmt).clearflagsfmt.(*pp).freefmt.(*pp).Writefmt.Sprintffmt.Fprintfmt.Fprintlnfmt.getFieldfmt.(*pp).unknownTypefmt.(*pp).badVerbfmt.(*buffer).writeRunereflect.TypeOffmt.(*pp).fmtBoolfmt.(*pp).fmt0x64fmt.(*pp).fmtIntegerfmt.(*pp).fmtFloatfmt.(*pp).fmtComplexfmt.(*pp).fmtStringfmt.(*fmt).fmtSxfmt.(*pp).fmtBytesfmt.(*fmt).fmtBxfmt.(*pp).fmtPointerfmt.(*pp).catchPanicfmt.(*pp).handleMethodsfmt.(*pp).handleMethods.func4fmt.(*pp).handleMethods.func3fmt.(*pp).handleMethods.func2fmt.(*pp).handleMethods.func1fmt.(*pp).printArgreflect.Value.CanInterfacereflect.Value.Interfacefmt.(*pp).printValuefmt.intFromArgfmt.tooLargefmt.parseArgNumberfmt.parsenumfmt.(*pp).argNumberfmt.(*pp).badArgNumfmt.(*pp).missingArgfmt.(*pp).doPrintffmt.(*pp).doPrintfmt.(*pp).doPrintlnfmt.inittype:.eq.fmt.fmttype:.eq.fmt.wrapErrorencoding/json.Unmarshalencoding/json.(*decodeState).initencoding/json.(*UnmarshalTypeError).Errorencoding/json.(*InvalidUnmarshalError).Errorencoding/json.(*decodeState).unmarshalencoding/json.(*scanner).resetencoding/json.Number.Stringencoding/json.(*decodeState).addErrorContextencoding/json.(*decodeState).skipencoding/json.(*decodeState).scanNextencoding/json.(*decodeState).scanWhileencoding/json.(*decodeState).rescanLiteralencoding/json.(*decodeState).valueencoding/json.(*decodeState).readIndexencoding/json.(*decodeState).valueQuotedencoding/json.indirectreflect.Value.CanSetencoding/json.(*decodeState).arrayencoding/json.(*decodeState).saveErrorreflect.Value.Capencoding/json.(*decodeState).objectreflect.PointerToreflect.MakeMapreflect.Value.OverflowUintreflect.Value.OverflowIntencoding/json.(*decodeState).convertNumberencoding/json.(*decodeState).literalStorereflect.Value.OverflowFloatreflect.overflowFloat32encoding/json.(*decodeState).valueInterfaceencoding/json.(*decodeState).arrayInterfaceencoding/json.(*decodeState).objectInterfaceencoding/json.unquoteencoding/json.(*decodeState).literalInterfaceencoding/json.getu4encoding/json.unquoteBytesunicode/utf16.IsSurrogateunicode/utf16.DecodeRuneencoding/json.Marshalbytes.(*Buffer).Bytesencoding/json.Marshal.func1encoding/json.HTMLEscapeencoding/json.(*UnsupportedTypeError).Errorencoding/json.(*UnsupportedValueError).Errorencoding/json.(*MarshalerError).Errorencoding/json.newEncodeStateencoding/json.(*encodeState).marshalencoding/json.(*encodeState).marshal.func1encoding/json.isEmptyValueencoding/json.(*encodeState).reflectValueencoding/json.valueEncoderencoding/json.typeEncodersync.(*WaitGroup).Donesync.(*Map).Storeencoding/json.typeEncoder.func1encoding/json.newTypeEncoderencoding/json.newCondAddrEncoderencoding/json.invalidValueEncoderencoding/json.marshalerEncoderencoding/json.(*encodeState).errorencoding/json.addrMarshalerEncoderencoding/json.textMarshalerEncoderencoding/json.addrTextMarshalerEncoderencoding/json.boolEncoderencoding/json.intEncoderencoding/json.uintEncoderencoding/json.floatEncoder.encodemath.IsInfmath.IsNaNmath.Absencoding/json.stringEncoderencoding/json.isValidNumberencoding/json.interfaceEncoderencoding/json.unsupportedTypeEncoderencoding/json.structEncoder.encodeencoding/json.newStructEncoderencoding/json.mapEncoder.encodeencoding/json.mapEncoder.encode.func1encoding/json.mapEncoder.encode.func2encoding/json.newMapEncoderencoding/json.encodeByteSliceencoding/base64.NewEncoderencoding/json.sliceEncoder.encodeencoding/json.sliceEncoder.encode.func1encoding/json.newSliceEncoderencoding/json.arrayEncoder.encodeencoding/json.newArrayEncoderencoding/json.ptrEncoder.encodeencoding/json.ptrEncoder.encode.func1encoding/json.newPtrEncoderencoding/json.condAddrEncoder.encodeencoding/json.isValidTagstrings.ContainsRuneunicode.IsLetterunicode.IsDigitencoding/json.typeByIndexencoding/json.(*reflectWithString).resolveencoding/json.(*encodeState).stringencoding/json.(*encodeState).stringBytesencoding/json.byIndex.Lenencoding/json.byIndex.Swapencoding/json.byIndex.Lessencoding/json.typeFieldsencoding/json.dominantFieldreflect.StructField.IsExportedreflect.StructTag.Getencoding/json.parseTagencoding/json.foldFuncencoding/json.typeFields.func1encoding/json.cachedTypeFieldsencoding/json.equalFoldRightencoding/json.asciiEqualFoldencoding/json.simpleLetterEqualFoldencoding/json.compactbytes.(*Buffer).Truncateencoding/json.compact.func1encoding/json.checkValidencoding/json.(*SyntaxError).Errorencoding/json.glob..func1encoding/json.newScannerencoding/json.freeScannerencoding/json.(*scanner).eofencoding/json.(*scanner).pushParseStateencoding/json.(*scanner).errorencoding/json.(*scanner).popParseStateencoding/json.stateBeginValueOrEmptyencoding/json.isSpaceencoding/json.stateBeginValueencoding/json.stateBeginStringOrEmptyencoding/json.stateBeginStringencoding/json.stateEndValueencoding/json.stateEndTopencoding/json.stateInStringencoding/json.stateInStringEscencoding/json.stateInStringEscUencoding/json.stateInStringEscU1encoding/json.stateInStringEscU12encoding/json.stateInStringEscU123encoding/json.stateNegencoding/json.state1encoding/json.state0encoding/json.stateDotencoding/json.stateDot0encoding/json.stateEencoding/json.stateESignencoding/json.stateE0encoding/json.stateTencoding/json.stateTrencoding/json.stateTruencoding/json.stateFencoding/json.stateFaencoding/json.stateFalencoding/json.stateFalsencoding/json.stateNencoding/json.stateNuencoding/json.stateNulencoding/json.stateErrorencoding/json.quoteCharencoding/json.tagOptions.Containsencoding/json.inittype:.eq.encoding/json.SyntaxErrortype:.eq.encoding/json.UnsupportedValueErrortype:.eq.encoding/json.MarshalerErrortype:.eq.encoding/json.UnmarshalTypeErrorencoding/json.(*Number).Stringencoding/json.(*encodeState).Lenencoding/json.(*encodeState).Stringencoding/json.(*encodeState).Writeencoding/json.jsonError.Errorencoding/json.(*jsonError).Errorencoding/json.(*byIndex).Lenencoding/json.(*byIndex).Lessencoding/json.(*byIndex).Swapencoding/json.floatEncoder.encode-fmencoding/json.condAddrEncoder.encode-fmencoding/json.ptrEncoder.encode-fmencoding/json.arrayEncoder.encode-fmencoding/json.sliceEncoder.encode-fmencoding/json.mapEncoder.encode-fmencoding/json.structEncoder.encode-fmtype:.eq.encoding/json.reflectWithStringtype:.eq.struct { encoding/json.ptr interface {}; encoding/json.len int }github.com/tidwall/match.matchgithub.com/tidwall/match.matchTrimSuffixgithub.com/tidwall/pretty.PrettyOptionsgithub.com/tidwall/pretty.uglygithub.com/tidwall/pretty.appendPrettyAnygithub.com/tidwall/pretty.isNaNOrInfgithub.com/tidwall/pretty.appendPrettyNumbergithub.com/tidwall/pretty.appendPrettyStringgithub.com/tidwall/pretty.(*byKeyVal).Lengithub.com/tidwall/pretty.(*byKeyVal).Lessgithub.com/tidwall/pretty.(*byKeyVal).Swapgithub.com/tidwall/pretty.(*byKeyVal).isLessgithub.com/tidwall/pretty.getjtypegithub.com/tidwall/pretty.parsestrgithub.com/tidwall/pretty.appendPrettyObjectgithub.com/tidwall/pretty.appendTabsgithub.com/tidwall/pretty.sortPairsgithub.com/tidwall/pretty.init.0github.com/tidwall/pretty.init.0.func1github.com/tidwall/pretty.hexpgithub.com/tidwall/gjson.Result.Stringgithub.com/tidwall/gjson.Result.Boolstrconv.ParseBoolgithub.com/tidwall/gjson.Result.Intgithub.com/tidwall/gjson.safeIntgithub.com/tidwall/gjson.parseIntgithub.com/tidwall/gjson.Result.ForEachgithub.com/tidwall/gjson.Result.Existsgithub.com/tidwall/gjson.Parsegithub.com/tidwall/gjson.tolitgithub.com/tidwall/gjson.squashgithub.com/tidwall/gjson.tonumgithub.com/tidwall/gjson.tostrgithub.com/tidwall/gjson.parseStringgithub.com/tidwall/gjson.parseArrayPathgithub.com/tidwall/gjson.parseQuerygithub.com/tidwall/gjson.trimgithub.com/tidwall/gjson.parseObjectPathgithub.com/tidwall/gjson.parseSquashgithub.com/tidwall/gjson.parseObjectgithub.com/tidwall/match.Matchgithub.com/tidwall/gjson.parseNumbergithub.com/tidwall/gjson.parseLiteralgithub.com/tidwall/gjson.queryMatchesgithub.com/tidwall/gjson.parseArraygithub.com/tidwall/gjson.parseUintgithub.com/tidwall/gjson.Result.Getgithub.com/tidwall/gjson.parseArray.func1github.com/tidwall/gjson.splitPossiblePipegithub.com/tidwall/gjson.parseSubSelectorsgithub.com/tidwall/gjson.parseSubSelectors.func1github.com/tidwall/gjson.appendJSONStringgithub.com/tidwall/gjson.Getgithub.com/tidwall/gjson.fillIndexgithub.com/tidwall/gjson.nameOfLastgithub.com/tidwall/gjson.isSimpleNamegithub.com/tidwall/gjson.unescapegithub.com/tidwall/gjson.runeitgithub.com/tidwall/gjson.parseAnygithub.com/tidwall/gjson.validpayloadgithub.com/tidwall/gjson.validanygithub.com/tidwall/gjson.validfalsegithub.com/tidwall/gjson.validnullgithub.com/tidwall/gjson.validtruegithub.com/tidwall/gjson.validobjectgithub.com/tidwall/gjson.validcolongithub.com/tidwall/gjson.validcommagithub.com/tidwall/gjson.validarraygithub.com/tidwall/gjson.validstringgithub.com/tidwall/gjson.validnumbergithub.com/tidwall/gjson.Validgithub.com/tidwall/gjson.stringBytesgithub.com/tidwall/gjson.execModifiergithub.com/tidwall/gjson.modPrettygithub.com/tidwall/pretty.Prettygithub.com/tidwall/gjson.modPretty.func1github.com/tidwall/gjson.modThisgithub.com/tidwall/gjson.modUglygithub.com/tidwall/pretty.Uglygithub.com/tidwall/gjson.modReversegithub.com/tidwall/gjson.Result.IsArraygithub.com/tidwall/gjson.Result.IsObjectgithub.com/tidwall/gjson.modReverse.func2github.com/tidwall/gjson.modReverse.func1github.com/tidwall/gjson.modFlattengithub.com/tidwall/gjson.modFlatten.func2github.com/tidwall/gjson.unwrapgithub.com/tidwall/gjson.modFlatten.func1github.com/tidwall/gjson.modJoingithub.com/tidwall/gjson.modJoin.func3github.com/tidwall/gjson.modJoin.func3.1github.com/tidwall/gjson.modJoin.func2github.com/tidwall/gjson.modJoin.func1github.com/tidwall/gjson.modValidgithub.com/tidwall/gjson.inittype:.eq.github.com/tidwall/gjson.Resulttype:.eq.github.com/tidwall/gjson.subSelectorgolang.org/x/text/internal/tag.Index.Indexgolang.org/x/text/internal/tag.cmpgolang.org/x/text/internal/tag.Index.Index.func1golang.org/x/text/internal/tag.Index.Nextgolang.org/x/text/language.Tag.canonicalizegolang.org/x/text/language.(*Tag).remakeStringgolang.org/x/text/language.Tag.equalTagsstrings.HasPrefixgolang.org/x/text/language.(*Tag).genCoreBytesgolang.org/x/text/language.langID.stringToBufgolang.org/x/text/language.intToStrgolang.org/x/text/language.scriptID.Stringgolang.org/x/text/internal/tag.Index.Elemgolang.org/x/text/language.findIndexgolang.org/x/text/internal/tag.FixCasegolang.org/x/text/language.mkErrInvalidgolang.org/x/text/language.getLangIDgolang.org/x/text/language.normLanggolang.org/x/text/language.normLang.func1golang.org/x/text/language.getLangISO2golang.org/x/text/language.getLangISO3golang.org/x/text/language.strToIntgolang.org/x/text/language.langID.Stringgolang.org/x/text/language.getRegionIDgolang.org/x/text/language.getRegionISO2golang.org/x/text/language.getRegionISO3golang.org/x/text/internal/tag.Comparegolang.org/x/text/language.getRegionM49bytes.NewBuffergolang.org/x/text/language.getRegionM49.func1golang.org/x/text/language.normRegiongolang.org/x/text/language.normRegion.func1golang.org/x/text/language.regionID.Stringgolang.org/x/text/language.regionID.M49golang.org/x/text/language.grandfatheredgolang.org/x/text/language.Makegolang.org/x/text/language.CanonType.Makegolang.org/x/text/language.addTagsgolang.org/x/text/language.Tag.privategolang.org/x/text/language.specializeRegiongolang.org/x/text/language.(*Tag).setUndefinedRegiongolang.org/x/text/language.regionID.containsgolang.org/x/text/language.(*Tag).setUndefinedLanggolang.org/x/text/language.(*Tag).setUndefinedScriptgolang.org/x/text/language.init.0golang.org/x/text/language.ValueError.taggolang.org/x/text/language.ValueError.Errorgolang.org/x/text/language.makeScannerStringgolang.org/x/text/language.(*scanner).initgolang.org/x/text/language.(*scanner).resizeRangegolang.org/x/text/language.(*scanner).gobblegolang.org/x/text/language.(*scanner).setErrorgolang.org/x/text/language.(*scanner).scangolang.org/x/text/language.isAlphaNumgolang.org/x/text/language.(*scanner).acceptMinSizegolang.org/x/text/language.CanonType.Parsegolang.org/x/text/language.parsegolang.org/x/text/language.(*scanner).toLowergolang.org/x/text/language.parseTaggolang.org/x/text/language.(*scanner).replacegolang.org/x/text/language.getScriptIDgolang.org/x/text/language.parseVariantsbytes.Joingolang.org/x/text/language.variantsSort.Lengolang.org/x/text/language.variantsSort.Swapgolang.org/x/text/language.variantsSort.Lessgolang.org/x/text/language.bytesSort.Lengolang.org/x/text/language.bytesSort.Swapgolang.org/x/text/language.bytesSort.Lessbytes.Comparegolang.org/x/text/language.parseExtensionsgolang.org/x/text/language.parseExtensiongolang.org/x/text/language.(*scanner).deleteRangegolang.org/x/text/language.initgolang.org/x/text/language.(*ValueError).Errorgolang.org/x/text/language.(*variantsSort).Lengolang.org/x/text/language.(*variantsSort).Lessgolang.org/x/text/language.(*variantsSort).Swapgolang.org/x/text/language.(*bytesSort).Lengolang.org/x/text/language.(*bytesSort).Lessgolang.org/x/text/language.(*bytesSort).Swapmain.mainfmt.Printlngolang.org/x/text/language.ParseKY\ `}J VV>6 D(vtI  Al+:sc~!Y FB " j /5  Y #} X>  >`"wffY   7!!"^"""J###AA>$$$>%%$%&T&&&''p''~. /.>/S/&%T&&''1.Y J l/-,(>%&''@((a))?())(>%>*)(Yv?Z+*A*t,V-+>%-,--,+( -+Z+1.<00(&%T&. /0>%)1(-,0z121I22 -$$2(&%*3)Y(t3()*3>%2)1>*3. /4>%S5&%T&a44545>%46x6&%6 7>%R746x657>%4579&%}98846x6545*968>%+:>%<;}98846x6545:R7:(O;&''^<<>%T&%a4;9;<)=n==. /&''(=>%(+*+;}98846x6545:<R7:O;3-,V-2:> /.>'?)(&''&%T&@@N@*3>%+(>*12-,(?=)1)=Z+V-v?'>+*))+@A46x65.AA*3*>(+'?-,@A8BCBBICC2WD>%8BD*3*>*=z1() E=ICBBCA/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/cpu/cpu.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/cpu/cpu_x86.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/cpu/cpu_x86.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/internal/sys/intrinsics_common.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/bytealg/bytealg.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/bytealg/equal_generic.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/bytealg/index_amd64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/bytealg/compare_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/bytealg/equal_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/bytealg/index_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/bytealg/indexbyte_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/internal/syscall/syscall_linux.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/internal/syscall/asm_linux_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/alg.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/stubs.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/typekind.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/arena.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mheap.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/internal/atomic/types.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/lockrank_off.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/lock_futex.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/atomic_pointer.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mwbbuf.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/cgo_mmap.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/cgo_sigaction.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/cgocall.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/symtab.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/malloc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/cgocheck.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mbitmap.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/chan.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/runtime2.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/proc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/cpuflags_amd64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/cpuprof.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/time_nofake.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/debug.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/debugcall.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/env_posix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/error.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/exithook.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/hash64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/histogram.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/type.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/iface.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/lfstack.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/lfstack_64bit.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/lockrank.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mfixalloc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mem_linux.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mcache.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/runtime1.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/fastlog2.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/float.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/map.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/msize.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/map_fast32.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/map_fast64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/map_faststr.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mbarrier.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/abi/abi.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mcentral.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgcsweep.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mcheckmark.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mem.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mfinal.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/trace.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/sema.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgcwork.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mstats.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mprof.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/print.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgclimit.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgcmark.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/stack.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgcstack.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgcpacer.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/string.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mgcscavenge.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/time.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mpagealloc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mranges.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mpagecache.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mpallocbits.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mpagealloc_64bit.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/traceback.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/mspanset.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/netpoll.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/nbpipe_pipe2.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/netpoll_epoll.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/defs_linux_amd64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/os_linux.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/os_linux_generic.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/panic.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/signal_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/preempt.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/write_err.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/runtime.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/stubs2.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/vdso_linux.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/profbuf.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/retry.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/rwmutex.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/signal_linux_amd64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/signal_amd64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/sigqueue.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/slice.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/sys_x86.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/stkframe.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/unsafe.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/utf8.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/select.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/asm_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/duff_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/memclr_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/memmove_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/preempt_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/rt0_linux_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/sys_linux_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/time_linux_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/reflectlite/swapper.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/reflectlite/type.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/reflectlite/value.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/errors/errors.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/errors/wrap.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/mutex.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/map.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/atomic/type.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/once.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/pool.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/poolqueue.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/runtime.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sync/waitgroup.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/io/io.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/io/pipe.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/unicode/utf8/utf8.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/unicode/graphic.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/unicode/letter.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/unicode/casetables.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/unicode/tables.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/bytes/buffer.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/bytes/bytes.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/math/exp_amd64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/atof.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/math/unsafe.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/math/bits.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/atoi.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/quote.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/itoa.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/decimal.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/eisel_lemire.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/math/bits/bits.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/ftoa.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/ftoaryu.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/bytealg.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/itoa/itoa.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/reflect/abi.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/reflect/value.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/reflect/type.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/reflect/makefunc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/extern.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/reflect/float32reg_generic.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/reflect/asm_amd64.s/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/binary/binary.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/binary/varint.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/base64/base64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sort/search.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sort/slice.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sort/sort.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sort/zsortfunc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/sort/zsortinterface.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strings/builder.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strings/strings.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/pem/pem.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/fmtsort/sort.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/oserror/errors.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/syscall/exec_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/syscall/syscall_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/syscall/zsyscall_linux_amd64.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/syscall/env_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/syscall/syscall_linux.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/time/format.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/time/time.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/time/zoneinfo.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/time/zoneinfo_read.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/path/match.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/io/fs/fs.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/io/fs/walk.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/syscall/unix/nonblocking.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/poll/fd.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/poll/fd_mutex.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/poll/fd_poll_runtime.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/poll/errno_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/poll/fd_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/poll/copy_file_range_linux.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/internal/safefilepath/path.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/dir_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/file.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/file_unix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/file_posix.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/proc.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/rlimit.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/dir.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/error.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/exec.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/os/tempfile.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/fmt/errors.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/fmt/format.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/fmt/print.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/fmt/scan.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/json/decode.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/json/scanner.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/unicode/utf16/utf16.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/json/encode.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/math/abs.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/unicode/digit.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/json/fold.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/json/tags.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/encoding/json/indent.go/usr/local/google/home/zpavlinovic/go/pkg/mod/github.com/tidwall/match@v1.1.0/match.go/usr/local/google/home/zpavlinovic/go/pkg/mod/github.com/tidwall/pretty@v1.2.0/pretty.go/usr/local/google/home/zpavlinovic/go/pkg/mod/github.com/tidwall/gjson@v1.6.5/gjson.go/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/strconv/atob.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/internal/tag/tag.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/language/language.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/language/lookup.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/language/parse.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/language/match.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/language/coverage.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/language/index.go/usr/local/google/home/zpavlinovic/go/pkg/mod/golang.org/x/text@v0.3.0/language/tables.go/usr/local/google/home/zpavlinovic/golang-dev/vuln/cmd/govulncheck/testdata/modules/vuln/vuln.go 03/Y C ; .~ { -l   a"^1 4#; D:   >   9: K L&O R;Y Z      # 4  > *. A S # 3   f '' 6 <  "  $^i       ^S H?-0>9:9$ 3 %       ' I C + M S  . P @T?zzdL %fPOPO-    n n   nn @?CC-/9I  "{  w|      9      I;o'I"U'(B  -6"    '    0       66"B&(=""   "N    "4^ <D  !&>" KCb $ BzDBL6>>@?$H @$?Jj46@z?@?@$?$-2~ t *%# 4#-2@|?@?@$?"/2 \ k*%!4!/2 08/^*HE*`__`3_` _`7_0y44 7Q0`[_`3_` _`;_,44 ;M,S*5M3(G.| '>  C@     3](S] M=M53(+fZRN[G.|     ++++---- @1?W(A-%C @3?/%E`1_`_`_`5_+&5 +JP+&`5_`_`_`3_** 3 *MN**@K?@=?     # KM 5U 03/0/ \  FJ pop#o @A      9 s\ (7@A  @I?     3   E&.  0W/8  ,  NM N 08/8=@    /!   ?<@ ^   &qz pjo<|PL fL)`]_`$_$<f @   #PA# 06/,! 3 8  I J Y? @*Uj  N `U_ >h)  R9(`_`'B    UX ,Wh %' P  R B$\[        = `$- PjOP OP OP OP"OPNOF\ (Y4    E 9 \ (YP}O Fl%T x*a N"  F    }1 ] R  HF         ,5( 8 I \ p(IF*XW1 %7 87887 @7          % M 2  Rl*1 %    %  P(OF:$ $$F)+ +,sM       () sx   3F%|A TK' , 3  L         K      C2xWL 7C<5%|Apop9oH ',  '.3    A  PC]+VWP"OH' McGe1H`2` 234/34e34F34346` 2` 2E  Bw tmn CLTMNM 3          + ,   o         / K        %_ ""       !9} [1 3% .! P1[[9 3e923   (!6  E $H`2 PO=H""!$  !& 1  9<2@l<  D `E_'Hv  &`*& X `K_&H{  %e0% ]pop3oH7` 2& E@ E@` 2 ` 2<   3  \ ^      $EF      ,4[ ^ ab   $kl       ,1   [[[[ {  ;BsE  4    )7 &  X  +  ,   =  6  J  /00=6G   <@?H"  +(H`2`2 R` 2$` 234234b34I3434& "S RM Ng zu v  ?drklk 3            A      _ "       +,  4'  5@/( ^O'&I 7       R $      )   !     : `_=Hk ' 0 3     " => / O<;8h<7b  6H3 4`2*  _  !-H *TxT   T@zmefef6-e fI7  ,  '?91ORUm6- I@?@ z6efjefef  nk  y. 6j(z. E6   + +3( ~"&@`?@4?&%kl kl&%&%b"@5  #%@) bpopopo6O^i {W`Lv 2pV*  .  af .  . [ -8J)82p{|d\ ,   N  rh  {|={ |{| {|{|+@  ""       1# G  =  + 0k/T{ |  z w : OgNT popo)  + (uy/$ 0A/S ="    *)  (' -s !0!}?>.     Vc^@  G!12H&$Y& `1_W#<-> `1_'b#&F-&I1 )% 8+  )*  !#"!      7#"!   -      N $     M $    1  q'~#u9NBNG1) 8*- ( -( 2   N,3  U,f  6>F&G23 B) C6"7(./:; "#>%#?  &' *+LKLQ '  .6 ($b```````````ee[L?gDW S0BTRQPQQQQPRQSV]L9"*% ( )-  #B7 %$  + . 1%U ~K  POP0OT  0  w (Rl kl k l kW lk lk    #lk!8  /:50= 6\b11 *`7f=%  DCL  $qr+:VS $qr 8  6 ;FF R       :  !&% *),+,+$- 09 >= BADCDG LKD   Q VUN   W<Y!EC$ EE$  FC$  FF$  0/0/0/0lL "     + 2 lLE ' w &   F   ( 3 N%d `!" D ` [b  _ 'h 4/OC E: E:  ''9w &     $ ' .$-\  %   # h4&6 $\N 0&# NN + --1(U g& <     43& . C 2?vs 8 5 & %3   b a;(' 7  +    #Q  e 3L&1--1(U   g 6  B J%    Y - B J0/- 'q- .73-@?+ " x+;<7+ 4x- `O_ u_/+ W `L_ r\, T @R?  X<" @o?  ) B.(?( @v?) # - (E22 @$?@I?  D} - b P=OP OP O)    (i/5(n @[? w   aI^ 0/ - p_opo$6 2 8 C  <A ^+$ 6PFOPbO,z  5 " )S, 0/6` "pYopop"op(opoh4   Z/ ()  "     SV   ?B ;tb* ( 4  0Z/0#/     .* @(?@M?  7{$\`_`_      5&pxopopzoIhghg   % *  9  I%MS:5F6%{I 03/0/kU/!W `R_`_   t/1yada    aa >, (*4@ POPO .   " C:   '8 ; ^ [ 1Z< 2.HD / U &8  ?  !      > - rq   +$# %!  2/ & &a>D    # *)0 (:g < {9:g  E 6 9    :  &  =@! q2 ~?-Z|4+sb&2& HD/U &8   ?   !    `_`_` _-.S'` "  4    7, .hV S'`!.         %. O  O !H!#/ '.$(I   **` 0  &  ,    _l     '  <              x  S         x -  s - y}e:    T1) IT*279y1/S    ,    "      (   q'4aYQG*T# s '  9$(I    * * @   * z 0> 5& @f?.    %lUq PyO".b 7     !!8*+b 7 @&?.B,".@M?@?@?.  M@`_`_(. >3 (Y#*(m0/0 /0.)" btaLb   ( :1  ,  (# )"  tL v). U (]$( P5O .H)  )(.nz  ez o +z b  % >  3 4 >    #  1 (]![ &N D  ,(Q`n     e  o + bpop o3.             2u*OEBO  )BX WMXW{W#XWX"WXWXW XWXWjXWAXWfXW'XWXWK'M V[^(  I V   0 7 < *nam+,rqt 1((= (   " '   4  a  '   5 0b/%X"WXW  ^R%"*hX/W          )   !"?)VMAAW)[/  pop?o'K 87/X 7/  8WX WXW) :'     / / o  / !0   '     9 '&^?'   / /  7q:'pop,opo+XWXW&%XWLXOX < & ! -    ]2 ('     k*XaV}i%(     !I. <pop0opo)XWXW&'XWLXNX ? & ! -    ('    k(XaV}l%*     #I- ?*)XWXW8XWHXWX ?      ('   "  G(R= l%`     E6 ? ({ |XWXWX WUXW>X \7X W*X W {|'  {|O2N   .   14d e     X    3  5 58  T$m #;   !T$i (         ( T?hWF =  (! < n         " (& >  !. &$#7& %*(),+,+ .-'0/ 0/ 21O4324343NN(XW XW XWXWXWlX  G WX`X W9X5W*XW5X WL & !                  Z4  "   "       $    /   *     (Xr@;x* C _ 8(%!         i  8  WB 6 5*  0" !I0/0 /)X9WX6W   % 0   *,       G   Q (20 7R96 pXWuXWX WX WX W XW>      UV|      2| $ k|   4     v_   v=E`7NM-lD   -v.*  3O`>] >= $ `[;  $ uvv   #(' (       <j%@ J &         w    " ! $#(%"!"*)>* )p"!,+popo PO   %&  3: ;< -0  /D. 5t[ E"  PeO*'    1 8 )G3l    C(XWXW XW#XWXW XWVXWXW+XW7XW& Z-  QXW gXWXW)XW  N&X rXWXWp&I  &  i n '?         Vk lY     :    &%dG42        dB4  klqr il  dv  uv{|svEd  Gf1 IA(  v]O/.(&'2  -        ; + !7$%('* ), +3.--0/ 0 /2 1B$# 0/g43650/ ,+$# 0 /N87 ,+$ 7`,+ &%$#p)OXW       +( E 0/0./03.b"b~ 7       Q "!" ! $#E&'!* ),+4.- 0/h0/212 1O903~XQX Q8RQ RW XW XQRQYRQRQR QR QERQ$R QRQ6RQRQeRQRQR QT%  tm   5z   ) (' 8  & m         W     92R,C=6.g"b~ 8       Y "!" !$ #E&'$* ),+6.-0/e0/212 1T2 Z  RQRW  X W$R Q1RQR Q=R QRQz(   &   !$fgM D  =B @X          39 p 5 P Q   56A0w $&  (  2Q~i-(2#F Z         $ 1 =  zU2 RQ RW XQRQ XW XQ9RQcRQ=R Q- X WR5Q'RQ3X WR"          %  r  y 4'\m        $  / +     o2Tqlgx9 2'        9c= -  5'  3 R  C        )*2*RQRQRQ RQRQRQ  9XW R Q(RQ2RQ) RQRQ RQRQN&   &    '    X    c  >  &*= "0+  ab %P  "0+ ) OP  ' A* p*&'2  *       9 ( !2$%(')* ),+.-*)*) $#&%N`_` _    =Eo @?@B5B) J  .B5pop op o 8 7 0      5 D*! "e @V?[   M4 !P9O>  0 &   `G_`Y_`t_`_`_        ! / _  &6j 7 ,%   e  Z %6 ,= 6j7 `_`_`'_`D_    &        v    5.L!  &  \  Z0/0(         0:/0/U(% GEGD_ 9   (    (R> => ==>=> =>$=)>=Id   '&op  ; B  ; X     )    A  3 2  '  x.Q1 9 (    ( R  = $)IdcJ7> =>$==> =&           !W  ,$ J7 $= &po(>=>0=>=>=> =>=(          . .  (;0   (kTK>=> =$>=                 /M -  1$e - cT4 $l>t  )  5  k    ?     I   c   +1@I ) T    ?0/0/0Z       %= . Z 4=    <6(<0/0/0,B          3 <        'B$2 & 4   f$ /f=#  6    '        4     P  ! UZ*        <= >?  ,' (/%2  . Ku ^R  2&*U>;    - oH! $-    F0[p}   *  !       yz      h_ 6-  $   #%&  uvuv  ab  ;<  IJ C ^d 0F .U  O  2!!*& PcO_  s<s ! 5PO z! 9   F4 z! 0X/ ! O3  * x T&. !  @E?b2 K4N 0v/ 0 "+!  3     rd 0 + popdo \              7'    70> \ -'f S6  v !        !'\ '9f S6 v>  *)        } '1 *&    A> @Q?@ ?@_?K k     E4-W-}K k&0!"st  & Y\ R0   1RO MPO uvu x daod"     41    0AOb S"J t 9   Y    S}  "@?@?0 Qn7 G]pop op o0!"K R W Z RaK R ,N3       U  0M/0/, xO'9  [d 9popopoF,       !*[  FF 0J/&dA3<& 0-/ -z  )? - 0$/(6 '@ 'B6POO)  F#"A)  P=O % pm M9O % P3O  XY Z [#   P4O&d %N!%P`_` _, " "  % #>H GHGH GP"4      1 2 &  *  ' '  %} >  P"OP=OP(O * - "& PfO$*HG[ ) #U-* [`"   41 @R@?@p?<@ q3             5  .)<H  <'N@    D!  >! 1*mp $* /*  ) K uJ))3    ",ABh 3 %K }21   /8 >OLQ7@  , ;<     >P  WXWt41782    5+ 5 7. ~ C ! /*  )  K uJ{2%'  *  f%)wDC\D CPF      ,,6)        < <3    )QF}opJ} ~@ Y-Yl47 02."7 .3 3Ko2 '    *                             f )w\ P `8_`_\( 0 6  0/0/<4r       <<`Y_`x_`-_4     1Q03--UtD PUO T? @F r g# !"? F@?T=?  $ % TLL!L E R T|   5  | ? >    "'T"?@1?@??@,?@6  "  &&"1?,6)T %=M8y?@0@?@:+   ?@     ,  H3   1 Q7 6        0 ( ) $"   9z   j}) -# ~%2,\Qo  )  %=M    8 y0@VF: "+!"!"! $ #&% (' @x? T    $P T$'P O31I 09      '    6     ;  07@        *bO:  m,  $'   1   I 09po Tv" !$"  j8v"ATp?@ 3K/0&?@?@?@?@?@?@?@e? @? @? @T>T >QR!QRI 878?@?@?@7 >T >KT >I._) #   3T* 8      # 1      3    <9kRO     " '  ` CZ     0#\*   -       9 B 3 , $   y  P =Jc  O $) E<.B 3    K &e " !$ #&'* +.! 565<};<;>ADCF  GJIJ MP QKT UIXWZY\.[<;3 T.  0W/T9T S%   S;9 % TKL) L.KL?>=>'OP O8&KL& 7 8     *         &QkQJL      +  +qwE >  mbo.o!) .   ' O # &"! T+T >EF>T >I*" ! 3 D ]]    D   / <93O 0 ! +  . IT   ' ,*E%  :  Ke.. #A  ' Da6e/ @?@r?@?T,T >7 @? @B? @? @T>7 8 T > T>T >$T >1QR!QR53   A    3   3    ) <9 A4g# " ( 5> &,   B       $" #1&!'5`_`_ T&T >T >f?@* 3      5 &  f  *po TF    T >ZT>T >[T >     3  $3  $  G (I ^ q  F     Z   [ 0/0/0/0T  %(    $ 7     ()        -3 z@T?@#?'R*=>     'C  '%&J @\?@?R=>%= >=>C_n a feh ~? ! H% C @E?@ ?@?R%=>c    q7 vc9R.=>=>=>=> => hl50  8/vo  3 `0  c,+  ^IJE  JI   WIHBn6E.       h l5 0R0= >=>6= >  _    $78_0 6  0/0/RL 638@?@?&R*=>@= >=>= >G%    _ _ &;K  &n8@     GRn= >U^EHY` and   &  @?@ ?@{?'R2=>C= >= > =>= >y|   ]  Q  ]   Cs~J 'o'  &      ) #$'@ ?#$%@?Ystt      < , &  u  & $  Y pRop[o & 1ARjP4OP OPOSs9       o  u{:S 'U#$)#$s t<        P!" 1xj  g ' '$ 7  7  ' _zE'&U)  4st,st          +0   / z6(, 4, p&opBo=W@?V     <_<WV`  8t= st    a]   WL3 \ ]  1  E* #   =    J *&)  2 #(le &JA&#" 3( [  !$!>/ !     B33&J *   @ +)co=  h qrst*qrqrqr     DX  &, 7$    ^] RQE     %k f    #2'%)c      h * 0$/6  NmNMN>=*oMst< C On,NMNMopNM2 &    ,&Qk             3F=D7m7aO_Tm * < C ,2  0R/  8t   aX  QA   `_`1_`_"sEF E FE   s"t      W  ]] ] ]]  "+   >Y "      " `o_`_(     +s ts$tsEF E FE        3       V VW W V  ]] ] ]]     a=*+ @(    + $       1sts9^' (s9 '(n-)6('('('('( '('(-s9 s9  1       W @  $, L*  p% !!)        !  /1M MP   p y  .WL   T2 . -  -   Wf)1^  n-/  -"!$ %( ) @)?Q  ;= W( #$ #$   T& !"{  1BC.  3:78   N #    (y?9RD1 P(<  kl1klk/l| mklk ,k l=    ~3  q & G  GH Xj!;   E       #E     *)  "  OR"-5<   yXc +, X twA&8r+BA9 p21/| mk , = POPOfo=6klk9l 6k l0  W FA  ,    ,    +F    BK 0f69 6 0]<6  (  ," <<) 9%0k&lkl k l"&  '   !.        B?67 "! . W      "3# $&qN) '%0     &   "? $    3>  _` $),)26gF"    /)26g^ ;)26gh;)26g R SU?BP ?  pHod 0 ] F1       '  Aklk l!k G                  -J  O  t F+  F: ]1      A !  32 &m OB2     7 99   # " #   U2F$`<2  &m  O  B  0/0    # %              %  (      i% 0v/'0#=      &r&   =G"       #0            KL4 +S!   +  + ,   K FCP"        0  -      $  X I -D313.. # 8   \        3I>;7F ' . !  6    j )   B m /2'"  F'>     !FPPOP OP OPOP OP O<%;<;<;<;< ;            (      7"% `_`^_`_`*_`R_`_(6JIqr> tqrqr! Or!"!  "!"%w        R        B $    78        (   * (6^a3 (:6        wpo!  u,v*        ,  *     , * 0W/0/(#k      (S(#k 0x/)9 9      #(C"2'Y9 9 0g/ D  JG  4 34 Sm"Nm D ]     v   ]pop opoy"34     #. u &FE[[yE s        )*  78W  Es 0*I ,##$# #  _2"K04Q   -zSPO  21 '       #$  &E   &+   34y  #**2'(>2FK04Q   0P/0/0G/0/0)" ! 6                            &       ! 6                0/0"-  6 %         K       $        W      a - 6  %   K"rqrqrrqrq5     #)  +63  r      @?@?(       /(d (>:1; *     +j+@?@,?+'  Q      +3$+h,       ,@,:@?@7?@&?%'" ADC%F]'b O XY  Z W^OHGPm  @')(%'          "pop op(o%R    {    % %R   popo +3   YR      #  J +/  F 2"12$1 (3 "3($   * EN, G ~F " $  0>/0 /0 /0/ |q(A P \  RO N *  2#DC PI @:= 5j; (+p4:|' A P   X  `_`5_`_@RO 5      5 :  lB a ` >         - +  d 1  R   2   ~  P " `  7"e P&   5  %E 49 )     &   1   $ TST>  J     )`   - 4 1             !         >    2           "      S  % C %t5    %           s|     }7 8/An  56UI$:tMA;;k5&ka` >   -   + M"!$%1*),+R.2-  .-45~87: 9<7:=P "`@ ? BA7BA"DCeFEPHG&JIL K NMPO5 RQTS%VUEXWXWZ4YR9;)\ [^]`_ba^]@n?@? 2 ' &   3    |:U 2 ' & jJEz!(*     $           C W   j  J Ez! ( *0O/0/lL%T  25 N ;$ $#$"         a> .( lL%TR               R  :VV    B.?@?@ ?V"         -Tz _e2V    / (1           '2AN O2  POP(OPOV   &+% VA B&            =4U\_\ & N = V         ? ,(q 0/0/VL 1  V"NM"R @/R @SR @R @ '$|  J   # V     EZ%      x>   K0sY 9 q ?R  ss  &  yR$ R  L9  yy  &  `_"!E &$$$$$   5?EA  7   &(    "&    ;, 3 *  9$    WCPO"( A        7   &(F0         .    RO       "XU    2    N    3 MR7 'R )B?%@;    3 4%7   >i ,    F 7F.s0       v( U'\%' l) H)( ! hG0)H @?@?$_$I!$K0/0        O:0/0U/+\Yba    $ 2 /-8& ]8=@ K++HPHOP,OPOO9      ! HI3! OV96M) e f >=  o>)=#C% B3(  P/ =3!    VZQK   R  DXR   &     - &Qk"    2          6  t) )d7@= A6& M)  < Ge f $#&% *'o. 7#: /:9%< ; 6`_`_E  ~5     &           +E>/? Em#           X$  $         >=    $ 1L&%    # za$#      PSOy@& 'cBe `R_ 0   3  # 1, 0  PSO(. 1" 3  '//'c. 1's  3&+%&  -       .              'N;'(J       0+  ' RI RRH`b_`_    %   c`Q_`_  ixnN.5. C + +["    3       o rs #r w *"'2?)  5. C  +  B  + 0,4! +X!   3      %  |!'%E'  4!M D +/SA1  </ &+% L1          3   E@9'@D :@1       -/  + L@r?@ ?0 &+% ( 3   d0 + (PiOPO" Z"     * " Z`_`_(M &+t  &+% D   3  3   %(G(M +   + D3! @  '  p   "!"!    3 = 65 4+* Q  JI H?> Q$h_ ^UV    !)    @W/ ' !  + " +     $     $ '  -    4! u  H 4"!!!!     !     H 4POPO G  3"    "!3 "   :  )$  G  3POPO(  ( )K* (aJ(%a"(&""| }    % 2! ]t !   op Q(K0;1( &  A  !  5&  n> .F "<7 ( -U5 8  %    ),R d'%"i ): 9       %>  K8J;1%RA,>&V U:$" '     m#+%   > @ #  %>(C>(    #     $    !   !  ( $*B$.@6Q%D! <(&S      # 8  Y   " !&  #!$ #%$   (0Q/0/0/0/0vhg   g #0v p9\5, q  #   #,       $ %     /       `E   & .- .  8 :y < yFKBA >       & lj    #        &   - d% [!)&O (            @ &*(  <J  !"!" !  #&% & %( )*)* )P`_`_ . -" Q`ga   pop`opopo                    YM'  +  *^~?! ,     A *7!0C 9 Bb^                   <  ba     D      "7-/ _m$E75!0           $   '(  *),/*) 2  3 :94 %7@?@     (5 (   #$  g   C !p#!&  ,!  I E  (&      #   @"@; S     YX:',J->  1 LKL ? @? V  I   LW X    Z% V= ] H kK( B3/^Ak'(&,    %         # m  `A_+&v&!*)*b0Z/0&     fdf    s2&C   r     #        %   )#F                  1 5H2f@@d2 C   r      $# $#&%&% & ),+- -)0e/0/0/#(L  "t"@?@?(1t         T)T1],!(0 0    *     )   ;  !in *7 ^K  J -U D  *S b a  !a($!6       )   ; !X(!  K .     * 1       T      U *Y<#       - . U ovks S    u1GKL !K  *       !$ #  &%( +,+.-T,   0/0/0:/0 >      !   `0/0/09/0    #       cpop"opopo(          D 0 C (,=E'\(G[C A( _   zy         F5 >       +  ( A( _  @,?@?@8?)   % ((W($ A M       e#  g.<*! 4  g.< `D_( v# '%']%L @a?@?f     K3 ~ 0&/0/f0 = 0 01/0/f*- H*-J8&Gf>B PQR Q RB PQREQRB R]QRQRQRQRB P?B P,3   '   #B       9> =>  oN3  7     I  ] q n /GF,$N AI&   GuY>          A  ]"!$#&%('* + . /   cPOP OP O f&QR QRB P2BP B PB P)^[3 3      O;  ,    )POP Of0QR        A\0OfkQRBP#B P9" * 3   b   e1R?)j#  f6  `_` _f$QRCBPB P53    (D(6  5POfE" M        (+" ?2fz&ZB PB PPA&, 3 #$  )2 h #2)z&Z  P 00/0/f^  ,!J@??@ ?@?fAQR QR Q > Q R-        '   O4^$G( @     >  -pop op[ofQRQR .@.  /<S G= g PEOP O fbbJA  T 4f'  49 4)f*BAOP{B P2* ^T  -(2&> (*{ 2 `)_f!    %%! #f"BAOPB P," \ Q  "* "" ,   @? fBAOPqBP    i q 04/0/ qD!  K ]0B/0K/0/6z      6 6"       Z@|?"    ?L 0/0>/0 /0 #$&    - Y;30B/0V/0/0 /0/"%"  "lF sz)    '   $5 + /l      #,  pG6 9 3     % ]) ^`{ME)F"  A;    %    $21 v v  O   vu -"  &z   O3  (   u Zv/7uu }#+#!?!. U 1      O    !$%()-@@?@ ?@?2+.   4    ,_ <u  -2u        !$%( +./2 1(POPO2.   ,y Nueji v->ur a_  t8J  %|U    "!,$t @S?@!?2r qrqI$  #q I@%?@]?2"l AF MHU V' 9X" M$@A?@`$  IF`@?@P$E@  3 &.I ;I.E@@J?@?$ ;    )?; ; 0H/0/Xw    #_c0W/0&/0 /X     '  ){D: -X= JI   >= JI(JI JIJ IJI J$   2-  & @+@'A8!@-  9 @A@ :N    v"Cn1)$      $ W%  %  3    '#      D %%%3 ! L %4 E E   [ ^[ ^[Y[ [[[Y[ [[        &&&`_`_`#_%+un#4{|zsDCDCts h !$/,%% 6%+       ,nPeOP$O%:%43) 3        @;:  ) `_  $`_'`_;?`_F0"!  ' *) 2 *'   %*?,.* 0p1   $';?F ^:`"_+j" nWs:"+ Q-`"_x" WJY-"P.OP6OP OPHO    .% SD O K )    (!$#  )  GP. 9 ` :}B] AB ?9 j; * L/ F) K HxbW! "!"G~   T STS- 1W GPWb  C  1;' PnO b&I  &8 !ЀπЀ*πЀπ b1 %      [ b  %@" EEY 5WFHWb p\op obz  '  A2{- b0 )   ;  0/2,14 M 4   + % MA;)KG%)0 @?@?(b$ +  9   (,(      b \ <         F'  \ `b6     + ^#=6 m(b' :*    (T1$( lb& O" 5 bH  -{b$ T          sqs$ T:#bc      U%U`y_b~ p+I l P[O "  k,lnb8MNMN:MN-! U"MN & X _  @0 \ (  fe!. _aLiK!  u52M<]&2Rw8:  -  &/  bM N  KL &   0Z/0/(^,mn"   ("=( ,m 06/0/^b  GA pvo^L/Q LLLLLLLLLL @@?^Q %% 0?      ,% J > M     2=>(=> =2>=> = > =3>j= b# $ # $aba>$#$#w= > - !*            -      ,  E# - u2"xu0E  A(2N=-=( 2   3j     w `I_`_(,P' 36  ('"*(, 0O/ 87 +3 d  @8  :.7 B b 6. `_`_` _` _*DCG   ; * '    !*3t6 * 3G6    0;/V $``_`_`v_`_   JC 8i 2       4 ^q( 0i/#V " T" v&- - ' #& 0;/W *  &-       *&4   Y     dUf2/PO)1Y (1^(2+AB AB' 0 '       A*'/P*  NEF EF9:$9:h9:)   DDDKNCBACF   + ,     o i n uK- !M hLQo z    $ L  #N5   ! N6 PO N?Z :9:h%3 X_"   ?&/@ ?   "E N$   5 N9:$   6+ $0/0/;Nv'd      ;"; c'dNy@ B @%?N7  !!N  F7 8ZYh*Z 8  #vy  ' { FDl `m   h *     NkExEF 2(Z 8G7 8ZY      '^/0 /- (Q' 1 %% 3      pK q]}kx 2( G   N- 0/N/"@*?N  !  0N N.Z 8 Z8: 3    6. &    :PONZY78JZ8 %  %5 J  PhON 34+$'( Kn  # 0K/Nq     )V 6XPOP"O N)( 'j  YZ  YZ '"  y /W )( ' jNN.POL  KeZ8 : Z 8 .        3    |    $ 7 /    5J)  3.    ;      @+?@S? N << = z>O k @:?@?N^  1&NJZ 8CIJ%I Jr)Z8h " 3 %    %    7 ]D j( J C% r )   h'N@0+9 :9: ! pSj  |  |'*.6'b ' /0+  | |90/N9:09:Z `   _  %1  0ZW$NW9:9:9:9:9:%     i  v  qo    |$f[ b$ Wv v q  | 60=/0`/$N    N$L`$ vN9: 9: $`E F9 :DE F;X9: 9:)5 !"              0   |   g !     O:@HkP" ;)   $  `   D ;X )PxO N(G s(^  0H/0/$NE9:C     $_$EC 0/NC  5$POP*OPON@L7 Y:9 :;Z 8#Z 8 Z8 9:QZ 8 Z 8P.   5B  4     3  IX o; 3  DC D):VMN[*q%@L : ;  #   Q     %9N   8Z8Z Y,/31 . 5"1>9  ! 4#6     ) +  + &d@?@p?@W?@[?@?@X?@&?@?Nh;:#V O&9 : 9:9 :Z :/Z 809:79: 9: 9:Z8 EFEF Z 8Z8@& 6 6 u   !%  !% &)%%# #  %3 X#  $ & GH%%%% && %%%&       % &  )%&  O  X'2 6 L7',#*%%#    &   /  !0&%7&% (' *),-$  #2 367@P8OPOPWOPO N$9:  G 8 9: Z 8,Z 8+(' &&  3 '&&% ' % '  % d#21 $      , +( N9:GEF 9:9:'     %%7#  |  | Ks u9G| |0@`?@(?N0EFE F]( ## # # :>0 ]@?@#?N 9:9:Z 8-Z 8@(%% '' (3 (  ' (  R, 8  -  @@?N)!    !$      K:A ro N99 :EFZ 8Z 8#9: 9oZ8Z 899:9:?9 :69:9 :b'V ODVU|Z  :Z8/9:9:9 :Z 82Z 8"9:S9:9:[99: 9 :9 :)A9 :9:%Z 8Z 8>9:9 :E F9:9 :`EFx9 9:9Z 8aV  #U%EFP)& 'X'%%       ()3 *( *)'(( " *3*) *''(()) 77 + +Z Y    (    8# &'* !xq ++-''+3  X)*) ))    )* )  * ,,, /    * &4 eZn+*++ , ,, ,\S--  - --- 33-3 ., .33!   +*z-7^ ^ 7  %9    * f3^^ 3   . ++-- * ,_Y,$ #+ ''  D" ((I * /+c]i) $ 6>} ; = t " QZ#W9 U %!-+: 9   #   "!$#&%()., /b4'16 1D87|:  =BC/FE H KN O2R S"VUCX[[`]ba d cf e)hgAj ilk nmp qt uxwz }  _g 9 a8 ` _`_#7%P0//0r/0/0/ Ne99:9:e/  --- -,,,,..33    E -%   B0N#E F% 9 :/ + +T e - ..b4 44ru4 44 4-X-44 2**#V / ,/ &% 0QTc`4 *abS44G4 *4 42i0# % G0   /"KM@u?@b?@?@ ?FNZ 8Z 8Z 8]0") ), ,  +,/3 0  / 0. 0 ) )F# F"3!#      F0/0 ND EFEF 50 ))%    % ) ,* `_`_` _` _`g_`6_N(x wV OZ8/VUZ 8Z 8*V  U Z 8(Z 8'10 *031 110 10 1/0$ 10 10 1 c |/  ! z'- (    /   *     ( 'N9:02 11   !0 D0 0H/0$/N*9:>2 11   D3*>3*NEE F2EFEFEF9:Z 8EF@Z 8 EFIEF E F EFZ 8EF@Z 82//  . . //m////( 3323 3& ]]    &1 3 -]/--.  .-  ]] ] ]- // 33 3% ]]    %2 3 --    eV/1$/1,   " 2     .    &%( ), .+2 3'65[`_`4_ NZ 8@EF E FEFZ8 Z 84   bY + 2=`9 $ $`9,+ 33 X$$$ , ]] ] ]]034 3 4=`K8Q`  S 8&' (N ?C  #      IN9:9:0&9 :(Z89:Z 8754444  55  2 2  535 '(,%&  334 5iY<8)1D60& (   7 !NZY78*6445513*PONeEFEF6    1001       1='Y `_`_NQEFEFZ 8EF E FEFZ 89 :9:6((  200163 6" ]] ] ]]U"5 6 * u  q* ;W.\'       u q+NL7   " `_N!'*$*72'2  !!!!  RN!'*$* pToN"$%7 !!!!  ZF \"$%NePO/EFEF9 :9:7  )))) **  3001 J+ y  |+  - $`( Bb2'#  y |+poN&$EFEFEF;8 """"33 3001 J$2&$ 4 `D_N 8 "" 1 popDoN-EFx9  : 9:9:9: 9 :EFEF8 44 +    3 77!      , 4422 7 7  4001 ;D C F$ )*S<M) &e-9          0D/0N[9 :M`_N9:EF9:P:   2&9X8 ( 679X8 7  P`_N;6 U NZY7 :9 : Z 8;;;; X99_ 9 : ;      0/ N$E 8rZ 8;73 ;"     : ;  1q  $ r N<     R G  a N<% H <7  `N_ N.< &&  /* .N.= [p N>    L 7 GPTOP6O N>3     3& - PON? 5 wV%  . NB? *# 0/0 / NZY78 9 :9 :Z 88?>>??=X<<_ == ?   , $     8PON8EFEFZ 839:9 :3EF E FE FZ 8^? :001 ?3 X   >X==_ >  ]] ] ]] U > ?    I'g`',       $ %^p/opoN2LK L KLKA 33 3333># ]<2   00/ NGB     `]_BD L @R? NgB     3#,N=EFE9:9M9:9: Q 23x9  :9:F+YB';;;;>>  4 ?    -34 B;*AB???? 5  A 5    >>>    << , 8* $/ =O M  B,=D  M  239  F + Y5N1D)   1&617  R 3 L8  ).1NEFoEFEFEFEFZ 8qZ85D56    ^@   ]]]] ]]]]D3 D   CDIU`7$W(      "#5POP OPoON Z 8-7  YEFEFfE"C E!D 4 DAA2 2= ^A ( ,`S       03/ E  #  @9?NKE   5$ NeEFEFEFEFZ 8vZ 8F ]]]] ]]]]E3 F   D E )e1       0/H GJI  D -N N( H  N(H( H(H(H(H(H( =       <N9::EuH)P OT%FF8UHGHGHGx9EI &+     E E    C@  EENU m< ,T!@<)FEu0/0$/NK;1      $H6.9  .NRE F EF E F EF/EFZ8Z8^9:9:9:9 :Z 8Z 8K    ] ] ]U  ] ] ]U   GGK3KK3K'#2 HHHHHHK KJ KJ K @/WX5  ( '?# "      )^ " #& '@?@ ? N*&+Z 8Z 8L J J  K3 LJ L  ( *&+  NQ+&?Z 8Z 8  EFZ 8eZ 8EFEFM& 9+9MMMMLGMM$L3 M"A(! 21L M bM M L.k    (M MM MII 88$ .3"       N3 N$  M N"!* )  &#     !&  JJJJ79 8      1  )  w o .!M  *  ^b &!$Q+&?       e m  "!$#'&_B&%%& + 9NUO   ?<`Y_`N;E FEFOK KKK }; N1EFPKK    Y?n1 ENZY78Z 8POOPP N P   G    C( N39 :89 :~Z 89:EFyZ 8P M M  / K & O Q 85 QQMM  k %   (   P Q  K gm  aM*. 3 7  g  ]# y `X_` _`u_Nq9:Q& B B   NNZ( Pe2 4 NZY78 7YZ 8[ 9: 9:!Z : 9:E9:Z 8:Z 89 :Z Y$Z 8Z 8  +9 ::9:T9 :Z 89 :EFZ 8fRQQRRRRR R  %"RR)PXP RR-RRR3 XP RR17P_QQ RR3 SP_ QQ Q k P R rR3 SSS S SRPSR   :QQ   RXQS3 TQ_ R  ^P R R/   F$;8I!    [  !   E !$ %:( ), -0 /$2 36 7:9 : 9+<=:ADC'FETJGL MP QT UX YfpopoNZY78Z 8<9 :*Z 8l78ZYTTTTTts   tA   T U  U U)S U    UTVUT%U A>MI +  * l `n_ V*  P) 0/0 /0 /N\96;V    S P!  z,\; N-  Z  :9:9:EFEFV-VV V V V3  HH  S U XT%$  !$RR $  )*EP  .'" SS> ''%  -, 6VMS\$&-        @?@ ?@-?NZY78DEFA7 YZ 8Z8+9:#XWWWX  ]]    W VV XVW    XX$c1   )1.   +# 1N!EF%XTT  9.;!%pop]op oNEFY    ]U*# (   % O  w913@?@ ?@?N9:Z  :QZ 89[XX Z3  XM PY Z  ;:=S  $   <     @?@5?NTtE F9>!=:][  [[   W WZ&QkV  T6 60%$#   0`_`#_N)EF9:h[ WW[['/  [[  4%)RJ   1  N)9:\ YY > 6@)PPOPOPAO(NbEF&EFC]  ,   YY  !XY  'L  \ib&C0NEF(EFEFZ 8EF?Z 8a])"   YYYZZZ]3 ] ]]    \ ] % 0 /060)(  .  a0/)N,EF\Z 8EF>Z 82^ZZ    -]3 ^ ]]    ] ^ 7(1/2rs2,     .  2pNEFL^ ZZ   ppL0/0b/N"EF(EF EF^EF-EF E F_[[   ]] ]] $ ][  ]] ] ]"  Y     0/0 /03/1NEFEF EF_+   \\\\W[\ IL[\WX    ]0{/ POP OP OPO,N`  ,8{,EN/8# <;'%\ZA,  ) &/8#    m Y i k  &K|ghghghgh   KK |            U  |        !       d|sgh ghghghgh ghgh(  8  r#(a^#(M '#(;\[\  , }8         !      O,  # d x3jJ d(K vs-F@1          J|f  PFR(0 @f?@?3P   34.|3P 0a K   "  rq 1*q     S   ;sh 4-W 46  ;[M.0  A7  ,    %  A  M  'S 5K OK G u  &   9@6U   ` )"4 4-6YZ9;'FL  .'^ $     G G  Q@?@?@?2"     vu  Ne           #  22"pop[opo  $%  " LG 1 $##" %& 3` qt   - -   &*s x P0/0/      !(  '      !(  ' .-12-***-**********!/1W . - 1  2  -  ? *  *  -  *  *  *  *  *  * "! * $# * ,+ * 0/ * 21/ 431 65 2+  B B& .- 1  2 -  *  *  *  -$  #*(  '*,  +*0  /*4  3*8  7*<  ;*@  ?*D  C*H  G*L K/P O1T SWPO'    0d% \ ;+ hg jjA? E=ts p1=t 9&Bf0        08 Jn!d       2 14/:9JIV$U$ + ,  $Xn $!d  / J6wx   ' 6PO"J 9 M   *+ jA? E= !!~NHLhH     M Jopo"  % (  *+    #   { ~      e ":v)VP 6    / PYOPLJpos    #&spPoJU   F <OJ   2     kn        _J%# M_Hp}0Jopopo &opo *MAB  >o%M N  &# 796^  0 &= !8(cO 78jc    L *+          'KRab  opq  L4 7   + o% <;<7   +     S!    *+  Q1   X5p *+       *+ '     Yd  << % Y$    0 "'"8Ks&5 | * i    7  <J 0&| ~          & *M &%"% &%( ',+21>6% 3 @C&F#EFE LO7RS^VU FEXW[Z Y 0 J{_L020H;!<= >n;&<= > P3t     N6      ' ! # *11 " ? " 4)Y R @ & e8D  {_L020H   n &  P3t0/0 J " " + @?@K?@ ?Jopo~   +*    B EL  a PJE&"&~ J"   0\/Ju7N]77POJ, O   =J, OPOP2OP2(2L2TZ~#S`_`:_! F B! '   *  $  ) !G#5!~/ ' B!popoL  A ` 4      L\9 ,L A `popol ? Y  4     o[3+l ? Y.' 3T#   3'    -9.&' 3T  #kh g^ 1{  6j   87>4 f c  3    y' ;   3O   TO ? .* )!R5`  <      1{ 6j X DU $  < Y G g  58 %  U h 3 #  d4  9D  3 = MN    ? )QX %,   $  < Y G go<i5hg/]hg -   8 7    )6.      ;D  z9< <<(i5/] &    NK+D7  QA    %  0    8&    ( nV(C*G&5*%"  6 .> #                   . p5opo)h  5      0 a           [(hcC( h !q  5,+    )          j W" X        + Y [ m60 )(F+  u  */'/0}  1B(AK9 |{3| {-)    *0     (     --.-: 0I       ") @H 9 ai0   +-   ) >    /_t  #R '&J9  o, 1(    3 - R#t st&s$   df# &$0/0M/0/0 /0 /0G/&K9ES +W (  -4     !   X ;g&1 H    ,) 3  34         #5-; ~6  ,)  3          * \  57k5  ;de          M  CXd FT /-%35 +_ n 7A-7I-!f e&   #l gd S       z W   U      W,         (! / )K+  d;8+ cR  g\O  _ +&"!_ n 7A-     7 I     - ! ' fej)@      j1-24,'(%   &+     %   2!|> 2eD  O=x<<sK<x gT&LS cS&g5\f+f5e8}d.d8PPOPbOP OPO(  $"/ 8 ? B9:/({.(QY.@e?@2?    A !(;:!;po)    3(F$(&j++   (    +]hXJ+2      %%  $    12P9h 2`r_`_  ),%  #I.#Q6,587-6 7-65 658(8566,- -   &:.,- - (  86KH58716 7365658+ 9596&'  1 3  "+>1 '&H1 3+ 99&  21   0/6 AH  @?@ ?@ ?@?@ ?@ ?@?@ ?@ ?@d?@?@ ?@ ?@?         -"     `+"      u&;067 F-#5 da 33 3 !Y#3     & #   : '  )L! &      WX *5{x+Y=*J      5 M  q5^ B)  7v.# $  7   5q   C V<E$ &   ('he'f" z)    4   7 ]$  h'" &''   ) *$/ 9($    b%Q   * .85*   V&*8_W!&Y `<_`     `r 0'/0    "  I  \g C  \g W  <Q  \g  U  \g  ;  GB+ 2+ Be  3   %4 < ?2/0/ ZNMCD/E FEFN D)        / 3? /   @?@-?4Z     "   4,'4@?@Y?2Z .%  #-   8      2,6S2Z- ).&   P$OP,OV8   H9H0/0/0 / P,;<X :;< ;<X :X :$ " u3 uQo     R9       $0/0 /P7X :5X :(     3      ?R7 +  (=P 3  + .   <3m)<RP = C   $ # :9    (. $               : 4R  "$3  R     T     0<MF E  SM:R @/? PB  +#=P;<:;<; TF   .mJ42P JM N ]`I j, S 2H(T2"1 M#  !2@B PGX:X:6X :V!$3* _`9 2+   ; >      K ` C%" HL@>5 Q G/   2  6    0&/!PQ " @?@0?P2       c S  ::902 pJoP\7 FP GH*)      Y@ *) 08/0/    O pdoP9GHG    O'%%'9G P8GHs   <   t'  8sP >8 =n P5GH   h 5<    5 `;_PM 7 pQoPv  4  "3P  /5 ZD(P; P K !   pDoPb1 ;po Pvux  2,  jx@l?@?@?P%NMNMN,MO     B-%,O     J   dP%#&wx wx{wxwxwxwxFwx wx!wBxwx#w xwAxwx*wx wxwxwxwxB)      #&SR- 5678TU`5@ $  V;<s      -   $5UE   ;    I   ,KLKLKL,  6 x  $  8%       + {  (  ) KX    KnKLKe nA c  !     W T? > ?      VHV , 0WX  O43'.- 1  Q".-Z^ 1  =f1$ FE  .EDR`0  1 5O i 9&% %&  !  ,+  u  I_#d 8f <DF iGAuV 9 ) R"&!*  d)5P# { F   ! : #  9*  ?5:w xw.xwxwxw(x6&   %     22" [`,+ /0 -, )*-,  #-,  &56  -, ' 5 'UW^56`: .("="D * I " `_&, )  %\-!/,GG   GG    ; H+$P  + $  *#  "  !; +;)y1wxh     ,$)1h)rwxw"xKwxwxq 4> "K 0 (4 W K X ("r"Kq `_0T  // `>_`_3    2:#2{=  6^  +  &  /: 0-_< *nh$L){ =wx 96=>;    <9v C% F (?wxw2xow x w*xwx wx : }    3   *B;G*' (%5  (:t59j;E e ((? 2o  * 3  2!2 V s 0   ]J H < E<|D< @I?@?H # G[GpopJopop opoB(%$&wx-  "   ?J <; ,12- ! #  Ac"U\($- ! lG $ 0  *  [), 6! EFG%&       M" Ef@6EI_Gmpaop~o9Y9f$_`     q    T (" 6 9Y3 3 "!   C 2s2G....08/0/0/0-/0 /#(wx6:       "#>:"(6:T  *    'TH4)l#q *   "   9* -(Q#e4t2l#q  0R/n* Q Zpop op o2' , '  2 2' 0S/0 /0 /n &  pBp d0/0 /0/0/<h[\CDOPst78  5 'Y#&A~ (   ;3 &+c  e% o5o  } ' +  !     56 +{3 k  ] ]jA5#._' bH   (t!    3  e  g-|2j uZs   n / ; U   5       ( ;""1 J5 RAD/,   ,1  2/ $     ,  ' 2 @*?@?@j?9 ^5o A>  > GNg SDE6~)  ,  - . `& V a^ ]  ^_ } }   '       )n  %   "" a '4%0M(!  + "7_ +V*%  ]t9#[$5   2X$$v(- MA E<q<   & M3       $K$8Y%%O &e4a(! S&ZI&  !+*      :-  -( l$[  ,#aX!  O ! &'!~,$"&Y h'*6s()"4       @      $   i/Zb0/0/0s/0/0/0z   > 7 E  06/09/0e/0I/02             *0/0/0 /0H/          4 :7        "      #$ $ @J ?D 1 ( ? ED*!:,      %   ' l7Q  :, & )(12  9:9:!  (QRQR!      Q ArU& `x) A ,    1  @)|@(I au&"   X>&N9:EFEFWIITTFFFF"' lcR>`_N= G 8Z 8 :Z 8+3 +++++ 3 31 2 ++1 2++ Z @ 1=   :  + N,, @(?N:  1 ^G  ! 1 ^& ' ; . IR b-X6  0L/      ;   @1?@?*"v *V-*Xpvop#o"    &   h8   &8"  8 "T  0T/T&6   3K&6@? T      % /$ I xA T66 T8  "$  XTt  @[ @Z?T%1   " 1V6 %1 0N/ Tb   > T(  PqOPO`.+ 3 ]_6$Gb  "poN{|343$45 6{FEF6$ n5EF E FEF6$ nV   bq 1 100113 U ]] ] ]]UU    7f.8@N$     V@?{|(565!6{FEF6{ |  $ 20112 G /%d(   RC 0/0 & 3,  b  `      %e%c ZE%%'%)% $  P?O8D   !   pVo8[ -)H  PdOPEO2 "-, #&1 '@(236)2" Gr% @@2 0/.>@?@?3 )          %&  3 )   P=O4{ 3*3b `D_=# <m#,<m @?&H %%4 PO4[ 3@3B %4    H % @?&I  %35/ `;_`_S!R7$R h   & #   #hh  &# .  8:PO f0"E    )0"E( `_`_`%_9%    % 3   >;:;    ^[JK ' $!{9       0`/09/     J% -+,M tW    tt    0s/0s/0 /$    |    ## [   -        Epopo(%8  %  > 3X[  JKT   T           z w t q / ,]  (%         " !4 0/^:! 0/^C (*0"/N'; popAopvNEEF= 88  TO 7 0       "    -&,uU188E Nb cN9 :Mcc c  $  ,N1c # pJQ# |0/ d     /:    7Md  -QR&0 56JB "( $ *   ^n - 0/<&(# #POH " ##   5 &, " `&_B|   @?%G $$ `%_'V &!& @?8 0/0c/  L-^r )      JG8    p)opIopoo jg r qdL> !H %@ `0_5      P,OPK ,K8oo@8rr@8r8r 8  r"@8@@vv @"8v"8v"8v"8v"H8  z =J                                 0l/ 0  qC=PlO P l     eR%"   hR%"  "  "   *@@ @   pR%*  *  *  *  *  *   *@@ @ *  *  *  *  *  *   *@@ @ *  *  *  *            #:   ;    ^  8  0./ &             P                      8                  `40/!_l& !jx,0B/ 0/0      09/>  & !   P  0L/Q ' 05/ (    P=OB     0/0   babab!ab a-   - ! -Q & &XVX & `>_`_`,4,4A:$V,4,4(DD/-/ @;?@?@>7"Q 0+/0]]-''@ 499+& *`>_'0//44&3%pNopddM7-M@2?77) )@7?<<.  @+?Q'% @q?J*0,*@?"`@-BM- @Z?@?!P$  v @Q?wwI %@?GS,)Y,!!'' @O?uuG %a @I?qqA ' @>?6 %P;OPJO  " jQ9N $]X$6 %      w    $  %e %f %`%`  @!%`%`7Zu: =-]((](W( E](](#[N< I ` I <I /<I<IHG6 9.    ] XW  _(   j+'y2W  _04/0|K<=06/0vK> 03/0pK;jK0/0/^G  0Y/0/"V4 g " i  )* + /   F 5    ( /0 {! E S  `@ ?  G r 1  =%  0  Aa <    3 =$^ 1(8 7S' /%;bF E(Q4 ;!  0    A  ``_`_`P_`_`_) "  ; (O"#L69"B* `X_` _$ 'G   #kF+#{' G= ! I >NJ ]y G r$  < *" 0  <aH !K<@4#~ 8<$z7>@$L / %* ?iA:! $&<~`!  4  >  <H ]0/0 / la  +    L1H$ H)}la 1& r  4 5  2 A \+"f^-!) $&#1 @B?@?   6 [5,Y  6 N  1HG     5 UZFi&  '* G2 '/ 0'4;F %  Z  0(/D  -$0@`?@H?@ ?    4  !$  7]& :& (%& &N N^< +:,,LL*@?@ ?-", ' ,:$1# 1E6"^6`_%    3)rl.`_`^_`_`b_`_"     ,   G  < v*P ; l   RS/ 3?5Z % T 0 d & S^ q6.% TP$R5Z% LL       n / 4,)!#% 6 )0/0 /0 /0 /)"  5    )pA$)"2adgL         *+!/ !        ; >h3!  -' 6  $'    "3   AD ,c-j"&*7':GA  6T 08/0/d Q F   M0 + Ap1opgop o uz    W! O9 0 /h  PlOP,OP>O'  /   X ?  %0R -]'/  @W?@ ?@?.   A! ]!2 :7 % 5zF". A 0D/ VV  * @f?$5.141v54*A*0/ .,,.,,., 6 <BA.B;,<5,6#.$,,.,36 ; ,,, ,,, ,, FCCECCECC.,,.  ,  , .,@0/0@/0)/0#/0/0/0/0"/0/0       * $           * $   PJOPOPuOP OPO(      )0#  #(#,(zTC|@J?@?@r?@ ?@?       /0   #+zP5|             []1!A%X^0+>00/0-      ) "    ! '     ) "    ! 0/0 /0 /0 /0 /0/02      *       $    , 0K/0 /0/    w n0/0 /0c/0 /0 /0  !5 !  6 0/0 /0X/0 /0 /0   - ! - wPsOP,OP OPO (7    s[`._`_`_` _`   *"-*!/  `$_`'_  QH/ `$_`*_ #!. TK/!0H/0 /0e/0/0/0/    )6      ()w w 8N } J&()))))))))))))))))))))))))))))))))7<&&&&'))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))7<&&&&')))))))))))))))))))))))))))))7.&()))7.&(7 &  N     @G?@?@?z9 hC+k `k_`_`E_`@_Y^ -0!"  kv B Y  %: "9 ZL4l* *& POPO2yx pt2-a862A!,2POPO( p(#a86(A!,(*6@ %& (- P$'50>LI5,MY0m/0/!     !M#!0U!J !8h 0 P  2   " 0+}+ &"$209PsG`X= 6        'N!_N '   uv+uN..gN !" PS \ 8 ?56N41     3?<  7|K<6/*popo2  ') 2-) 2pzopo6 ,- ,%*&%$6- .L6.*6`_`_` _<  3 " <7S<`_`_` _<  "         <7yZ<PZ*= %      <7x%@ 4 Fr<       0    <7P6AA<Z 0  HPgOPxOP.OPOP-O)    6"    7 #$%  #)#gF')l>"F '       /&  / ) &%* A D  ? KFAzF%G*;DK  <  6   0   /"'B  S  f  B     ) L * '(  %!()#  ?I0  F    2P 72 +QR $"  1K FX"39K6S A/r  /  v   < pop"opoF 1 ^#FA1F 0$/0#/ #9 '0/ .,@Z$#.$!,"6 ; ,, FCC.,@&0/0/0a/0/0   V    E @EXW TY,6[  J GNK  6  Q JEFS     #5 I$     0V/0/0/0 /0 /0/0/0r      63    ^Y# , ?@AR    $   N !     ))3"   9  6ZY RO FA <9  6d zy\ qO a bQTOT ^]z    43    )HW`   +# %      w %   popo  ! " '   $m 65 $  "! "   JA<  6*'(M Q{Z10/0./0?/0/0/0/0(   -/1#2 0/0./0:/0/0/0/0(   */ 1#0 SN%M\   )    3@ IJ     W V1M   &   {R#M#t 1%M\ "i9 <  %( %&2: , *"*" L9  !,((K9nI+&&) ,  *"* i "g 9 <  %( %&5:  ,   * " *" L 9  $,((I9nE+&&) ,  *"* g(0b "I    ~ (#:#"dB #( 0~b 0(/0/&g  %<##%N@X>.W a"6&@W=\ Dz  34D< & " " 7@&0: F : D  ;<D<5A21  Ha  NM HG   BA"<+    ij op!%6 6} :pHG opB=    $  $* 'Oi2 ((s(s(t,)"-W&b*& & * ,& 21 8l U  N$   $^'T&%2 .    >  ;>*$ #+%(% "'2 &6,,y)A-`t* ' & 2.WW*+L (%  s       FaA`_`5        "9' 4 ; 2-=  (0y/0/0e                .      0']D  X0/05 #(       14      '       -Y =  (@)?@Y?#         #B# |0/0D/0V %  .' '    3B E'N . ;  "   ZJ        >     !"      #         {|e         -.    %  #          e  7 `,Q 6.NA60Q 6}*W ;    t1c f S `* #(/4  ]^ cl +, +V! U.j U4x (YZ  ( YZ  G TSTO(            V YZIeef AW  RBf5W1>Kk;    f k(    '('! 8 '0/ 8 )% 8 e/`        8! 878[Ae d`e)=p@>9R          % *  ?@.5   QLp?Q u"ft2 m'  1 LZ) * )/<(&ST'(4 ,     STS T/0 FC}~)4  34      #2 5 !(   2 )-V.2)!Mm'  1 LZXd K #- "O (    " 5  R     7  d_ape;d f K - U      "     faaUt(f V 0   %UK K5U e ='oy  x /=    9zID(/%(/   %  "     t  9 "    ! We `93e  ='oy73*             "%   7 &! 73+3kZY   |/w2            "%   7 &! =2-2jFS  i0/0h6!    -2!    W *   Mb^2 &  0s   b{8o v  *2 '  "!"!   $* !Li*  Lc3  L=G2  -`**y2&;uG9            RPOPOG Y   8-B        F  1G@BG" 0&/0/0;  DK        4   50x/0/0/'    '"'[ rPOPOPO(   !"  3# (#( pwop'opoZY^,]X]-&",8pwop.opo4DCH,GBG.&",?'?R &%*3)c $)?8+6?)4$3'?$<f 3^  <7'3<$4$3$<BR{ .   @e    )      <E&&    :?  1 1 d w ab E     {|{ [ cR  MR. r  ]@6      &  !       !     :  .        - ] X"?q5 ].)uUNv" " TK D!2T 0NQ'N;NM)   ( -9 B;33;    !54320 .,' "- "0       Q KtH)KC~(47j^Q :RW&;   QPOP OP OPOP O#     80K/0/0*/0/0b/0/0*/0D/0/0 /0x/0o/0=/0H/(    d, + &m             + 6i       VQC   "' ";#; W @;?@?q  P8'A1(x   t      "    .    4$-  "* =& %2{  M J/  ]b>Qg x1y "2 (xBA BAB;6 "}   -B } !"2, A6  = 2 2% 9 P%      !( "xwEI>_ e(.! ( x ]r      0/0 /0/0/0 /0V/0/0V/04$oc. 1  ^>    $ c !  j; ov u   r,wpo n1@#<<Q32 <A 3, 0/ .6 XW.XQ6 ; , FC.B@?BH*$U*o     # " #    #' &  '"p #o * "  D66 (;n   3  3 0  ;" g!yvep1"& @oJ D  Q.;.. ..       36 2 % g!eH*1p& _ E H3;pc$&&'?j,) m)   $ %/& ''('P I+J*  -<      7?      6?   W  -a, h'h:P7 GFLA,)% +r)u/&mr'<   * 7     7  #<v7t<Y c *!0d.3$4 ! G4%dBh*s- *!***    -       %  E-    ( "%  @:4 44  4 44  **  3**'**  5**+* 8)7#>!#%zZ    c} k n B B*)!0   d   g   ( $V4 ! G4 % d*h* @;?@!?7!7   7a2707!7   7   # <s  A ( ' 0)  !  Q 1+< ##  <Hj7A   <A"Ps  +O9$:}9  O9$74   )* + /5,WXGD   )* DI  )* + 2G <   =   ,  ' 2  YV  )* V qt_f  o  )*\]Ni:J )  ,     -  .  G @  ]   h[    n   / m T*  'V     6      X<>G B\hs:1  "   G6ADP>  , `8_`,_C4 38  #jH(C 8  &  `1_`G_  3~AGw   4xklST_`GH     4   8 `)_`3_x3a43dX`@_`/_`)_`)_`+_`6_     6#6 $   ]7S }7 (.27f&S `q_`H_r   o- u  v {3B#    Q `>_`3_ 3vI3|  Z333`H_`>_> 7>= > C5W>  I`_`E_ (    '."-  .33? ("  Q`3_`,_`_`_B4 3c #  GTB c94' >    MNM NU ?    4-*\4 POPO:   n    4 +CR7  O2p - \  3    "  R   *+#8VTA</ y^p?|`o_`3_(" B(#@/.("g<$ &    4                    9#,       V      #  )  @         E      ##  )    :  & 1-yl>  (" 0 !"&0' *)  "        V EE C  "  %H (@B?@6?@?@?          a=I. @C=/  D<7=(z. <,7zz3M(&   +"  {{F  L!6ANU    L9 Z n !K$O &JO' "/-V:  d 3l0'&e<0    6 (  21   2/ 2 + 2/ 2 %    '   ' 2 /&  ? =u    ,RW<65"67x@ & +0S# # ## 5SM !! - . - .-  w9%% y $3U S' #75+ (-  0#.i0N0f-  0#%P%i+)q W  &80+l( 1&  # ,+ 2 9:% E) !  6  6  > 5$7,;,!,-  G  7   6 .+( !k"$r"l"#D^BAKiFCPFEIP(&#f "4hqK%A%  no((("//      1(#GO("(0) 2 3  Y1X/<@87)   ;0/ 0n) =,&+$ j ("#0 ; n# B`2X22   D@b A6 PCOPO(  (`#.. (p`&_`a_(" \(T2:2("% a(`f_`__`_('  < 5 ? <%(#=BC("*j dpSopto("\(20@ 2("%Ja(FI,T W 0op       D DI FA{i'N" J F(I, T W    5Dy86: F+'63-7uM?2-*  6i)-0O V$3(Q /""2;f ""z ""| "" - + ,            A (I;  9@*F" (  # ?2-#( 6@ 67L  )=f] 0uv uv  uikly   3O    EE Ud   /        #P #  >   @\?(Qj:S0 J t ! ^`P6  Do ( (    !%+'6 3- k 7" #&%(  ),+u.M-?,+2.-- /*2 61i0/)2-10 ,# O(P5i " '>  C   ..   7](#bVA("/5_   8_@?@U?2K   "         )<2G2"%#      !n@j?@Q?@@?@z?2b7@"         6!% 2-l2"%       popopopJo6"    "% 76- XEY6"]   @-?@?(v 'I%;'!RPkOP OP8OPOP?OPqO-T?"     $7'-(k#$.-"% & -@j?@'?ZS +?" h(E ; POP:OF     \'O   U(`!_`d_ _O52  d P[OPO- ,s# ,#?:? 0,/0/06/)   6)v#7E)`*_`c_)"^)Z2>2)"%c)PuOPOPAOP1OP OPpO(W $a!"    + . '   (  67(#,>b("%   [    I(G"5!!!!!!'  !F Ae#L!>P5Zpdopao2#,5  \2<C!22" 3  a2yF#@ 4 aFFPW# K 4F"G hfF#@   4  aFPuOP't-(" > 3 :9<,# BW,+  ~PbOPGOPOPbO*9:("  #  )$7*%X#!*"9:PuOPOPCOP4OP OPpO-W %f*"(() ) (( + 0)(  ( * ))69((-2>b-%   `    I-dF+(   FA`  @ F(*mF,F++* ()#))!++))#!+++ + #!)) )) % & ') Z' ' ( F( u?67F A44%E6r ?& FFIO    8       n POPuO20   s@2-6[k2PmOP O)0  )#1R) POPOP$O? 1" $ $J  $$"l1"Gj? PgOP6OG|1" {~ B* "JAG|IP2V/  1 !  7"%1 0%%01AP $Kt%/K'^yFP6      v<2852v <7S.6&-<(plopopopCopopopDopopop2opKopopopopopopopopop opopo &c_b,B $1"[     u5"((*' ((   ((    ((  /G((C)) + ( )$))3  ))))"))V))) )I   ((&H G D G>) )  ) )   ? ) )   8W?'k?   &c_b  ,  B $1"[     u0/3R6,    )) 2-6z2" R0/5sT6- ** 4/7\4" sT 0j/5I T7) * * 4o/3;4 I T0/A`73** @;=t@"` v=7-<{73#+<G79FA?)+F%79F`_`7_<7,!!6!!!!!!!!6&!7!<7F<,,     &7<`_`7_?7,6((( (6&7?8F?,,      &7?`m_`<_<8,""6""6(67"<7mK<,, (7<`_`<_<8,""6"""#66&67"<K<,, #&7<`_`7_<8,!!6!!!!!!!!6+!7!<7F<,,     +7<`_`9_<8,6((( (66&9<7H<,,      (&9<pop;opAo?868"  "" 7*7 7&7 <"?8K=R?"98  * & <?popAo<8,%%7%% 7-7<%<7|T<,,-<<pop7o<8,!!!!!!!!!!"! 77 777 7!<7F<,y,     7<pop7o<8,((     77 777 (7<7F<,,       7<po=8174447 70<7CE<" 8 lB817&&&7 73A:ILA" 4 t pvo=9-7 7&7 7<-E<E & <917&&&7 73A<967 7Ad< 7\* 03<6oOdAC968  8   -`C <ey2 0. C6l  `H=9,    888 8<7@><, < <9"  %;8 88 8 <.7H#t9 <"   Ipop9op:o?:,!!8 !! ! ! 8 88 :!?8?" ,/#9  :? 66( Bvu( 1 6664t)$@?J,,,`v_`_`-8 3H-  D  HQ:,%- H ,  __7("B&  +-  @O?@?@0808ZE"e0 8 @7?@?@lB3$O @X?@?@0?0&(((?cH!#o0 ? $ SS)$6#  5 L)]B3 @-?&@2#)6'G       PGOP%G93[[ 0d/8 n8?  J?0H/0/0 /0v      I""      -  vL:2   D""!"! 5:   n     +    *Q" )2d-Rv0P a(w 2  * $ -.%*12)?  !9g5 * "y `6_-;(>pop"op>opopopRopopop%op0oZ"       ' #-* !-  $*  jy ,  -0) ' $' ) %ZU:* <wZ"-^Pfg68 ~ k)!j 9/   <    : OJI$ j k+  12: 9#8 7    @GN G : % )8 9  8   *     P  KwXP6= <S f" g`_`M_ i   #RQ Nq    \Y V ;G 4 9Q >(E&5'` !+!(WL%z2-w?  Y)W&( "8e -u- `J_`_`(#2(#2U-."`(#2 PiO!v    nF. )*E  ,' %        (3#&("*.     `,_`/_V  a%+ g  04/0QQ?>06/0RRA? @8?^% =% @J2 6 # 2-nn2"  = *6   C <7JP" 3 N1      2-_|<" = |K<% <  HG  0/2% 2/2 12M   gL m  -  < 7.<6popo= ' )     (A<7B$<"po> '      #=7B="_2 6       ?! 0!2# 6   12-2" 4 :#t"       4-14"V :#t 3 %      $J!GH,EF5?,  72-D2%M!,5poG '   FAGkP"' \ `[_3#  2`-?<p@opo2 ,  )  2b2 = *,    D <7FP4 N'     2-U== |3<%  <  HG 0% 2"/212M $  gL !m   -   <7 &<`_`_=  + .   ) .A<79+<`_=    $+ #<79<\2 ,       ?#   0!2 # 6     12-22 ?("        2-62"O ?( 3 "     $J!GH,EF2?,  72-F2"f!,2poL      KA @vU  !$a    2;!< zB( .    #     (#;3(= >87D cz     W    C   $+< 7S\PdL&> *     >7+%>YG 38 F">')0@/02# # K,`# 0B/00# # M*# `  u    |%%J2(+Y0 %  Epyopop-opMopo'F     ,  % &!d  ! ?&g.FJY`<" G x6O71e`<6  IL  $$*   & x6O J =J< `%Y71Yk67 3G<6P "%p   & x 6O 70/J <o,       0 K*a R8"&5>H   -      U   $* @ D  }t 8 I !,  # i('CQ^6AQt 0 f B 3 j ,&      /  @* ! a 1 8  5q_A $l-K % &' 2 8"/ IR+$* %     ! } tJ   & k    & 1  s1O 9R Xby2/5Z.r,s! $ !J       -$& k  'A0 @2  (     /"!B S      f 7 $    i    $  ? 7$   i121D Q R $  12 -R&-k2(G} $$ PqOPOPO6, K6- ,u6pop o(: R'f_ '  y (#:.\H(:`l_`9_`_+. z'( '     " +&3+. )r(   &O %        # * * 2   $    * D)       3   5#-+    (3 0R %/ 8% gj 2WXw z  1    *   1 N. *N)3  & \V!}*|    =    ( ( !/#g6tD~ +  qpe; 'HPr!()  &+  %    # *2$ * D6 p[opo(8w#Q,(`_`-_):. )u8)P!*7#'),Q#(:  UhN''''#B   U     84'+ &3&"/&b(=4#f|Kv+9Q#:  UdF|    b  J@@EDE8NF    Q 2   Q Cy'' ''t&' ' ' ''t}~~}'   P             (  '( ('  (( (( ((  ((  '( ('  (( (( (( (                      Gx;?  48"% % & % . % . .. . .2% % &% . % . .. . .% %&&&&&  &1d= mApopoHF  Ai8X (" {X*  ( 5& h+$d% h#Jb#1  FI|   b  '   @EE  !& !" !" !('( )* -2 -. -. - 6 38 34 34 3: 9 : 9 <.   ;2F E FE H.   GRSTSXWXW,:6969796@?@?@p?@?@?I,6D&9+I,       IDI,,.3&  ,   + 667I0/ .,,.Bba.b_,`],^[.\Y6 ; ,,, , FCCEC.,,.  B P3OP:O  s$U~ `7_`-_ . PO4/-  % J%/-`_)45F (#&A.(5Fpo34OP          2-?D*2OPPO4/7         % J%/7`_!449  * G* 49  G4@d FA/A*F@d f E(,'&3,  V 2%|p2u"0g"Sg2171Z}`_ .,,6 . , ,l "'$$$$*,( , `6x ; ,,(;, FCcYC.,,  @?`_? lq(@0/ .6 K3343].^S6 #- , FC.B PEOPO  _(=4 2 z  PaOPwOPO        y}pop op'o  J    AB !,#  /ID@?@?  ! /0!9 0R/0 /0/   yN1" 02/ N  750/0/ #"!"!"!"!HN0161%!" :  I:#H@?@ ?@>?'X&% b a`o)&inmz*'"-$w>'e7,,>'@?@1?@A?,\&%\(' B A@OI"INM-(Z-_,'-(ll,2m7 (A, 0V/0/3 n     2p-AQ,G@y? !a7 >   )F!a@r?@8? *E*)C Y \    / gh. -X*EC0EE13 i  ('K  li    5  ,JA  2             1TFF 22  -mW/  9?25  i  K *B   l1 LL0.,6/ *65.6-,.6g *LL/7dc? PpO0>VM B4r34#* D+",+,+,+, ts    *"# # "2 "4-^hgrN6D#* >" # _ `P_+#! *U##)* gpop o5    + ~i*FIL @  " 4"!-_@ @8( '(;'    (    S( "XXP+,,8 ; CtU& 3   3 PMO|_4  R$*@? H, , :6 3334333FW,^=66 , 6j #, ,, CC,@ @w?$| Q - <`_;.V - &  +g4 N@; #  3*$l     %<  ,h&_+.&7V<f 4  S%N<.( ;z  3     #  ! $ #p-1r;{3s.<%      2 -HV5C=29 ;3;< s.<)s*2%     ( #E\6C=29 ;3;2 s*2 @;?b @$&g     "   6%  ,%&  !@?       (  0)              +dY"a      N #    g>W0] '    ?B -.'!" oj&   WZ03 "CD           % + joD\ ad N I1-z"N"FC `>_`_`_2   $ 2-D 2`:_`p_,A@=@ A@? 85 6,# :-=,!2% , `7_0q /<-/GZ 0      N'Oz; $ at+  4at   (A  8 &%at   YZY f  YVUPO`j al "    KZnU  ^AZ0F(p  $!(  $! = %    (#V1 .3L(,+  $!g8* ( PhO") A  !mN  !.9) APO#6? " P,6? ;<H\[ : E,&  ) *  X W- <" =  z" : 1,,  KFE> -     DK& /  %DK& 9:      ^   < #7]WyDM  @@ ,! <&H : E, 0./ BB3 @i?@? B)'    8.;( B'@? % (.  ) $ &+3"2!-XP2 5" E=1   <71#'<?"  +   >71)>"  +   > PJO3%Q  2O- 2i%Q~4  @ :&& & """C V2 &s-dR8> @+DC6M:   C   V C "&+  5C% &  ,M    M""""JuU%! e*", )4&hD!Z<A8@X-I#J!& =C%+  ,M!     M JuU8 01/#^   "6 $, V(% '["D'opo5 "!**  ", ) &)# % & 54/O>`_7      61?@D!  >    a  C=DMH'YTi >   <a^1E<J      }~ %0+5:E<JN_ (E@9@- 1   9 VQ   ( 5 .  .. "  #9    Z  -LN $3]O` p1Idh=#P > >> U 9. K - ` #E< 1 _ 2N67689 V Q    > (H69  Z"   -LS;HE  *)*)& )&$% L &Y _ U  ; :  BRF5fRdR8? HT#LC:6HL    Y  Q UDvy  q3   ]' 7 . ...   K C " '    * 8kO%D 750hp"Q`3?h<D'm!Z6A  dz D./ v@     KCC "3    *   k0"O!k         7          0   ! .  (" ~*$x-3@73~'    WML - ) : p=opb bB9 b b b 71IG  g  6 y "   0 & & . .. ) ,?*+" #FG): ;  . /& ' 2 3J   |  %[67b% < . ..  0 /4 0+!x/4) / *@6p h I/     E   Dq              TG !#$ oZo0        9uD h     !                           n      a  u -w       8   W  6    )        ?     'e%     #     '     \    +   L       >    O    IL  ?  '    F   Y $  G  Z r=3            L       U 8            6      1  L `!( (      9&-  6    %      L    1 _ & O  S 9< D #^..,l!#EX#bn&gC/d&f0#)\"1969tE?;Z1U  U ]      5XOHI,m [ LHQM?Bw$Fph 0."29N`JY(D2k(s  _Ju+h (/PR5^?B HF'D(x#>2w ^/mS2"!(" 5 <z D9=q                    "!$a#&u%<('('*+ ,+,+.8-. -0W/261212)165)874?7878 7:9:9G< ;>=!@?#BABAD$CDCFEHGFEFEJIL KN\MPQR+Q R Q P QTL GHGTST SVUXWXWZ['\O[\ [\ [^?]^']^]^F_` _ba baZd$cdGehZguj!GHGH GHGHGj ijLiHGjij ilUktnmPOPOnm&n6mnmnmn1mpLor qr qr q rqr q r qr9qv6u vuv%uvuvu vLw(xwx w4z_y5|O{~S} 9<DPOP O2fH        -('" % . ..."             3 2r-2f.            `        .61@7?@c?@"?@ ?F !  FAwVF=sRa&+  !'% &  ) Z j\N L>!QK& %'%+  ) Z&a&+  !'% &  ) S j\L L>!QD' %'%+  ) S' F ^  "&!,   %&9 OhIJ   g7 5.9  .  '* .9/  -A0XG    Q  :?F   6    & /  3. ? 11 6*  ;? NZ #"    + A< M81    9   F O3((g" %.$)!MV{U-* A)$u&:"|'e&-&'4$  ! .}SlAH]I 7H34/.8?"!I z   2HGK E, #C  -[fF.0"A.9+     -  A   -^"F  ? 6*;? N Z C $A#$<#;1 -  3     $      J    24H-AX(d<  fJ A3& 6    N 20Qd-9F2U":2  6   N<.6 .6 @?! * @h?"6)-7-`_` _=1 ;& )  <w$"478FjdV.W PX'0&D IE 8!{**t)+E    &.c|(. % . ..$!( ..  3&*'&$!0   T(4}&"#&2 C ((]+.      &.c |po)"$ 0C  (y0!#xG88"G8   # y/0m/0 /  |A1 }pop!op o!"      !}5! @?@?    =<      ;#~(E: '4:7N*0  #   6   :  74/?      %c !4%:7>    0p/0 /0/     7 >i83P w  .i  =   .  'P !!!!1$# $ 12  12LKL  5 6  1 65 65 6''12L CL  =   !!!. ! !!! i pq r~ KP~}2B"0-.&2  -w<u@!w8I,ee0 26 P w      .i =     !"!. $#$#& %(''*)3   a 7    2$ Q  G MYS    c7) : . .. #    l5  V]         (1-  . 9    ! "   {l kn &   3 4   3 "9#N%(7# .^f>! 1l<8\5'l 4/ !!2X ) $ ^ $ 3G k  36   c>9 C   7l<0   " !"!2$#$#$#$%&%&%$(' ('Q&%*) * )G*%M,+Y                     6{  ! ]   `^ Ga Za 6 Y l1     : 9 " _1'  !  &&&!%JK%_1- ' 6 . .. &! Vt00/      <] p + r& !1 0hg6^/ _`s  % u%  E w   YC '   D w/ O    #$ 7 . .. . 9* (0 $ : . ..   - 1- $ : . ..  %-=2   ;   / %= t0x  99  !'26pQ hghg        X  >&%  R0<P6%06P665OP656565$65 63'4343 4%_p3Q%   6 (5#(5!(5!E!#9" (6#.% (3#.%#w,#f  4n1d4l:SP|l8#t L l8";_[ - yFT/83,<$16H2~E*L& %;#N (1=4d,16/Q 698{l8 ;      8   ` ! 80?  H  " !$ # " !& %(>'('*) *)O,+ ,,+ ,+,+,+.-.-`0@  3:C9>?=>=@C  CJVIN  ""5 6 E   &*:p   V  C $  O  > " 5 . .. +  Q Q X  :       ; i r8 :   ~  <$     R  > "" 6 . .. +  U  C \  @      8 )    9  '  )      : 'C    "       P  @  7-!)  O  >- 7 ..# .. . !&61E A[ & (<(@ %,@%(@ 4   "p(@ D!+@% *:  (:! (:"(@"k (@ %0VNa< 6?h3_ 4?f w*/1z= m* # 0 8 10~I/0 wC 5?fKH(i#R,"1 \H*f%H,f'T0*z)<,3 /0.}-<8B$c S0N9"<0-7D"U9"<3+;EF"A9<- +?K#*JI2<8c3/-FxEL3YHO/0JwI1[9 CiA A[      r G T   % R Q+] IO" ! "!$ #$#&%V& %(V'$*)*) ,+O, +.Q-0>  3;:9 :9<;<;>M=BA@? D CD CFEFEHMGJK&NMN MPO Q R QTSRT SVQU,X?  [+babadcUd cfVe>hghgjkEn2mpoporqr qtKs;v;uxwxwzyz y|L{'l } ~}.~ }8~   M;  83   P SAJ) O Q@  `_`_   7Y(.     (% :3Xeh &a     $         ]    #" WD>S W   %+ 2 F    # X  U %  /'   h&q 0&8!   F*  /~kk     fl ( LKLK;L*K.  , % &% ) 27     3  wxw                 G 7D  4 nm xN(  x 9<  =9h/          % ( #LOD  (./  ;*W6!)  7 _ \  )  :eX7 _~Z$< 5)  7  @-?@PP2)?2*2- _*6 )*"     2-%~ <2 `<_X3A"%D `._%3*.  )?  Q#&PkOPAOP#O B  B  "-@' B =j( ?+, 777, . .. . ,C<v'7H<4j"     @^?@?v  %"= PGOPfOPcOP6OPWOP'OP OPO("           +   ("  gp   $ $$$$ $$$$$$ $     6667(#(""                   +     6667( wH<< G|BE0 G @I?@?)% T " """(_#41(% Tg#@?  T"&1"+1 0 !M^~GJh$W   ! "THM0 GBP2 G"`_`_`d_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_'I*+'  *E & +E &. 9 '$$"0%(>+8&(>&'I*-Ec+-E  ' @&?Eu D+B"Dm}$G5.S5       !!j7#!! G J#Bm,G SpA G(5.  j 7 #  S*Ge@%  8GR         n:#  8G  M#RB[v$& XwA1 G6e 4% n : # 8Gm]4G5.{R5      n7#  G J#Bm,2RtA G( 5.{  n 7 #  RcGe@%0 b 7GR       n:#  7G  M#VB[XwA0G6e 4%0 bn : # 7GHQ '     GBG'+  Q"Q  7I'   7I'  "   7ID*%0I"['   7I7G'    7G' ((             "   7 GB*"0G"e~'    7GV9 :9:9NMu<;<V6     Z(% 1<*ADCrC37 V  C3<Qk%  " J /V69   uC37VzGZ =  1$': W O565, & + 7(&'  &  '  D1G BwV,2A W" 6]  /6 G6Z  =    1    $':D1G0C/0X/0 /0/0/0z      ,       % H7G1?!X7G 1        ,  7 GBcG" 1 4!X7GG%wL "07GL7BI#:G"%07LZ   F:9: ' :3$! *)*)*#$#4     &$.) 4) *)* $#4 )     Z UE  ZF   po "Y; " \(" SMA'#]$ LR M       F 7 ;>f 0/   "  ] N!Sr"< Z   .$4#  D< L R !"1p#$ D<nMm< JlS%Ps0P.)8I\P!/aERHM 5'#   ]  $ 4 D< LR PVOPO iL# @0? @ X5 ,POPO# " 8C "",f1> "DJ6: %26956(56h5p7J 6          0(  ) )!  h  3 7 J " *E)5(.p  0J6# 62 %29( h p7J'SMA0\% OR M         ' ('    oQ- 2'%;6 O R  ;6kM// !  hC# X  H RH(M 50\% ; 6 OR X`_`_`_M) %)3B"+)[1% M)SZK    7  RMUR(Z B!A" %1+v%SJ;%S ORJ       $  ,d8 . ; 6 O R  ;6kM',+ !  bC# X  H RE&J /%S ; 6 ORXB! `f_]( \kWG f(`0_`_`_$0#/0/ 0&1H   B      #n+,!1# # &H=9 F    < b7Y1L9PsT 7$ n   T  d      .   . .).||"vxL 7$   n   T  d62, !    )   209 >(#$,M R w l5 $/2o t" % 2-3&~'*E28< 1 !    1   209 >(#)7M R w l5 $4,o t* % <78&//x%G<  < >&~'7<.0m/0 /0#/0$-   - ''''  J)1I   ZD+9/ g    _."! !"& #t !QD(;B AH#!"!" P`J* . '#(RA  &!! )I 6  7  1 *.>-  ,+87# 3& ) J!. (  /"    %D@&    m /<,}*OR} ,2rg";M 1*&v=^#]=9I Vqep\. %r=.?))(   J) 1    I    ZD+ 5+F +  6     qB<OM8 "L#A]G r"      F ~JI  ! J    0C JID/    ; F EFAF V V    L :   0 t="X *;$,  #n k &y  0 50  0 .)  g0?   @5D > ]D  I::)DS%< 7e+;@(4<$( X "L*L@?@$?@ ?3 @%  2%'-"02nL  j B% @?@? l$'o  0$! :W' @Z? v   " V0/0/0/0/    S <@22 2 6  ) 1[#4)b,WNB<u1 hN0/0 /  $( )$( 03/0/0/    bJX/I=9M>=9H<!  &&&' ,&),&&!&.&?&C K$$$%*$$$$($$b!<i /0//04/0/0 /kl d'{/; & &=$$i?ngR,MLWJC $$  $$  $ ' $ &$U$-$4$$i'$'i4$&b$$^M?)?na(<g&8f `cp$  ,! ($ G$b!w<\/6/( /B7 " ( '  & !&%$c <f--<9   & ) ']$'%c<f,Z ( & -&$b<fVn,( & ( & ( & B9 ( & &&$$_9fx, 0F/0/ {)  'Qg0B/0?/0/ (  * &(H  & ) $'i?nD\, 0R/0/0 /  '  &%*] '  % & )  0/0/ Q 1(B ( ' &%c<f>V,( ' ( ' ( ' ( z'q ( h'_ ( V'M ( D'; ( 2')  (  '    G(W'  V J  8/"GVp0opjop o3(4"     2-^#52"  -F% F   .   % 1 3@J L6<!=#"" M-F :   F   V@?8S*`*@?<**    #  @K?@?@!+  "!+ "VG"a!+ " P(O0P--$@"Q / 4. 2'E ) V.( "0/0A0 X   ! 00     ;0X ! (C    ICI S|,# C3CI pDoHpIB"@d' WH\B!Sc3 hHmBd`3Y- %% @X?~~]5 )&)     28"     " `ilkVQ2 aF5  <     yzY P  $   7   ,  /& &#   M2-_2Lz2"s20/   *#    !+0 )&(  !2c2 4F6  E @&3 .^L3) C&F1  " !    FAo5Eh FPSM8q @ 0       (  NQT+r 'r'/! >   ,.  >   q  lEKoEJ2q6  P:!>m>" }I")'  # (#)C(0|/0f )d2 &Z3  * J  3   (G HA @/<3 47 8/ 0GJC B1>5 69 :1 2   $$!""! .   ! !2  -{K?7+e$B  3  P 2&9       p[opdopo*" $ (#*:\V:n~)a'   A !4  ; iDi&  .i& +,% cb[< ' .i  $%a- $( @ * i %[2e4 0- (.+g  ' 9+ )k yu  9+ %k t  MZ  QRQ + yu  p *ej yu  p$     d  c >RQNMNMNM             P3 2  2  !e 121 4  )  2 D   2  Dji 3   } ~   !%&,W .  %&5Q.$ E. $ E . $ ^ T$6 /2e6< ot O"o p#o p   #  za^ _l&knqu  P/ j yu   C^ne    % yu  +  A  ~ (yWzYRHnI~10Q$Fiv2jP"Y4 ` f" # ,&:0P *2d @ H   +( .   x/    d &Q>+AK((_/X9>?*d>S0/ %$++" #  13"<  +*%& -,'(02 2-{;2J& 4 POPOPOPOPOPOP7OP OS<     '*   'RM\f SW3#uH    .3H"x RM uW3"u$%% %%%% % % %%%% %%%%0 3+&1 *@H` b@ J S  !,  B  -"~7<;<+4"  =`  [|wB`) F  !  4   +B :\ 5 #~.[' 00/0 /0d/0 /0[<;BC6=BAB =BAD I 56), !   XPjOP OP"O"   /6 7[b<@c?@'?@?@p?"    &D4;  -.-2KLT     i:0/04/0/0P   <8A7  D   M@?@?% $  $   ? *) %I*0`/0/0/0  (  <5 <' .L$Q(V *.  F"LKJ ?JI JG                  /,  _& '(;u@%*$) \t* Q  3<  2 1    ' ,X# ,U Pu lPA    #7 6 78 >U  7' 4U   A  -.kO'.u0/0'/0 67 *1656 1658, 3 5     bAII5>>12 V "       % *   !feHGHS Va fe,+,7:E feZ BA^W ^]BAnmnG   < I <  )  ux  cf   y &:2 %? +85    5 !E#"P!>!0D- M  2R  m W 5.> d DmL[/9eD`904Z@>*4.1  _  K.   (6  %( o(EH   %1    + + 0   1 ++4   %$ y ^ YR/<*6(I4^  MI 2A = xi/hghe`_I\  e  \e      O ` $  IF DG  ` 40rq`jq ^U`  s `/   e` r  }`  y `/ jS    ts  t"8 &9(SJ t  .$ $ J ! ;C$ d             $ P `/   L , UPN@@ ;  04 ),'(+ 8( 1 3!           @/$ J `e/ ?     7 2 l!!Q!!m%#d?! -\Fm- } 5DfMt .zQx 210 /     ? N  B! S } :| @ GS?!;=b98 F21L. CN Q Q D X h 0& \[     1:9:# "!"  !&%&!*)*  %.-.)212 -656  %Q jQ   #"_  SV KDKZ YT]\ -!YT[b[   \U:%`  k `Y R-  B2P:ys>&   0   ;aJ"7 !N&#$  ) 0   '  5fb!   e^K! RWZST   h  #  EH  m   7  2J7.   I2YCPaOPOP2OPOPO3"  !     3-O!Q32!G?PmOP'OPOPOPvOPiOPOPOPOP}O2"     ;>< 3   2-mI2y7S$FP$!,>PgOPOPOPOPLOP OPSOP OPEOPOP!O4#    @9 @ G H  Q  ) >9  R G   :S 4/ ;4C6@4!1AB{@PcOPOPROPEOP OPO2$'   !  +  " '  , + 2- 24>0/0/0/0/0/0Q/0/0,$  &  (/6 $  0b/0l/0/0/0{/0/0/0/0/0%     &   0     .$2 V|&    [Pc#(1$3 '@   "!  $>4, ! && l  / 3 -RH   36$@O3  B)@ ,     ,(#2 -729 +*(BS)Z9 UT 4R MXMrHR)7Y , @)"   ,( 6e6,-,@ 6)9~@&)&n,@&)&n* $ #  !?I4!  !$"  {! 6  - 9::_iv?:j9Pf q<&6))) S)UR~MzR) DQ@ 3*I~@')'.  <= 2 -I(S2) )  *J 3  @'"'     4    3  #,+!&H5 ~ 9Rw o3Q "  A  ? D ?! S*Z+3RMr:Rm2*I~@')'7 f;  lN F 'G 6g2 ' -IS[0@e  2) )  +.7(%(h / e%S+c,j R_"HM{&cR  +.=(#( F  "   3  =50] k#xH  ?  X+Z23WM rAW 02/0 /1{+ 0E.-0`_ " 5&"$$$$$A  v*X,*@-&-- $=21T*   1 ()=7-{!=5.Q0/0$:&#*/0 7 * AFE4/!I -  0o/0=/0*RB      'Z  `_`_`_\F#  Dn    M1 2o4  69! B EFY  `iRmH "%&%&k\W_\!&)  5 =    C  61   AS.(   & )=2/jx' ,& 2,Y ^4*  %% :$\ [b,  LY        2-PC2/' 9x' ,& 2pop opopcoP * @>Lg&'v{ 2 1   PKC5:'o* @>Lg @$?@?& cP%8#%JPOPOP O`0" H T00/0 @b.:2popUopopo( $ 7#"@0s?x $) %Y#Z " U A(#Vo, $$ 7#"@0[?tT) $ !;$P?0 S?  -65'!5 Gm;nJ9/$$?     )$c$ `Mn)/-$ !y;! $ P ? 0   S?P}OPOPOP^O H9_ #  \@9/0o)   $ (#G(/(DH K),  (a#;,(vd( $ x!o / </@" U>   -'!C  1  &      =    (#c$UBTp(/-$ x!o       < /@" U>4  E. U!?EB- *  gL/U&E0./0 93+ .%`  +j C &0+/0 ;)5-,U8 $:5D$S/^;J$2/% 0$$ u /G.1 % 7{ /N1P n g #$VC &?j Q%< G$8 I #  G   614 I|        G "  # N      GO      @s&              G  %     G  O 6$G  kP/P S n      \   g )J #$VC &5 j  G"%! ,$#x )Uk^!  % Ci~Rp}opo M8j2LI  .? M8 ^ p|Uc/popo/Su/!- %/#&wD#% ZBU(28/6- =32    p 2P-<#2 I`_`)_( 'CB A" @  !D i  (#Yks)(", b ) .0   = <#  "!   k%l,0Fy<' V#5.Z 0Y/     ^'3% a+ C t"6  W X <  Zn+  #Hi+1/)t( % [L  2 1  ;  :    S   7    +     ;  (##oz2D mR (`sV  [% l ( 9 !@B <4 )U  - ~&  ! % &U    AHH  !OK+XFR  Q [3& ] ! #       g r B W80 =0 W8$>K!"'"  #    $ GR (&%  E   -   `   N "39 # /  Wg (2. )MOb{D( J;h9g) 2$ $0/03/_ 6A _=U 0_0T/0 n,B\` 0/0/<  z <[ !7< pXopo< G d. (<t7M-<G d y 51   K(G :') !: 1)*    * `  ]cjgr0< # /yz  {# #&|4B?+ (JIV`(CFH8e3)wy 5' 5O  R) `(*)jg $ #tn     , "#$    PY.  5P O  DY d9F@ /   k 6]^]> `] ]'^  $#)$#$#%  k$#*$ ! "3< (  /$#   $8=  0 8  1  % hQ$#* n @ 21<"3<  #  / 5 D  A   #NHke+2. (M^4. b:2. (OSe* J=Y!0 :y ,.BX;s=n!2${ .H+`.;1)-)"L. 5\    < V    '       V U R)   =  `(*  ,,,#. ,  ,   D%`,, ,#.1,2, .  """" . ,,,q1 ,,, .r  &;FCC>JCCeE? ,,#.  ,  ,  0  @,&p?op5  !5!DD5!\-6 !  6! g'w6! H*L  B HLA !!HR#BB)L BHpmopo-p5 .  K5. K#"f2E)5. K0/0/(0@ z  K@z K{ &#"E)@z K 6  .  Qa 6 .>`h>>@?`P??? 8@ @@@`@AAA`HB BB0C`C C@CC DPDDD@E`@EEE@ (F` F F!G@!`G!G"H#hH$H`$I%pI&I@) J`)xJ)J)(K)K)K*0L *L@*L*8M*M +M+@N+N,N-HO`.O.O`0(P0pP 1P`1 Q`2xQ2Q3R4PR`5R5R6@S7S8S`90T:T:T<8U =xU>U @(VBV@BVH0WHxW JWJ(X KX`OXO0YVYVYX(ZYZ`YZZ[[h[^[^\_h\b\c]eP]e]@f]f0^g^k^l8_l_l_r@``x`` (a`a`a0b bb8c`cc@d dd8ee@e@f@ff@g@gg`Hhhh8i ii@jj`j`Hk@kk`Pll m`XmmmHnn`nPoo pXpp q`q@qqPrrr@Hsss Pt tuXuu v@`vvwhw wxpxx` yxy@y(z z z@0{` {{8||@|`@}@}}H~~`~P`X`!"@$`&' )h)+@1p 2ȃ 6 6x788` 9;@=X@? @C`D`E`FPFH@IHIJ`JPJ@KKXL OO`PQ@ThTUYP` a`a bxcЏ@d@eXeffPgm n@@qrВX@0   (pȕ @xЖ(ؗ0`(h@`@`XH `؜0@8 `@ HP@`@@@H` P X``P@ 8 @H`8@`H P   X@`P`H`#$'@( ))H*,-P.@//X02`282 33045з`6( 7h8`99p@;ȹ= Ax`BкB@CpDȻ`E `FxKмN(`QQؽ`R SxVоW(XYؿ[0]_`8@abe@ef`g(h kq0tu`8@@H PX`h@p@ x`@ p@ ` h@X`P@@8@H`P8 @` H  @`H`@`8`h@X@0 @80@8 `@@H P(pH@8 ( `0hX@H` 8  !h""`(p@**`+H /0 1@123 @3`366h78 9p`99 :x;@= @p@AB8@BxBC`DpDGJP K`KK@K L@LMh`NOOpPTTHUW Y8Z]^0 bb`c cxd ef`ff@iH@kkl @m`m p`sP tw@w0xx@y {@|P }~ X   0 h   @`  ` `H   0   8`@  x`p @ x( x@`(@h@8@x@@`XP@@( 0 `(@h(@h@`p@ h@ `    !`H!!@!8""@"@###H$@ $ $ P% %&@X&& ' `' '( h( (@)p)` )  *"h*@#*@%* )8+,+-+.0,.,`/,@0(-0-4- 60.9. =.>8/?/E/F@0H0I0 J81`L1 M1M@2 P2@Y2@]83`^3_3_(4@`4`4@a05a5c5 d86d6e6@f7g`7 h7h8jX8@j8k8lH9`s9 t9uP:`w:x;yX;z;}<`<<@=@h==>`>>@>H??`?0@@ @`(AA@A 0B B@B`8C@C C@DDD HEEEPFFF@(G`GG` HxHH@(III0JJJ 8KKK@L LL HMM`MPNN@OXOOP``PPQ`hQQ`RpRRS@hSSS @T TT 8UUU(VV@V W@xWWX pX@XY``YY`Y @ZZ`Z [@ x[ ![`!\ "h\"\`#]$`]$]A^Eh^F^F_`Ip_J_K ` Lx`L`P(aQxaTaU(bVhbVb`Wc`Ypc[c\ d]xd_d`(e`ebed0fdf`eff8gggig`l@h`nh@ohpHiqiri@x@jj@jkXkkk@Hlll`Pm mnXnn n`0opooo 0pxpp(qpq q@rXrrr 8s`xss`tXt tt@0uuu(v@vvw@hwwxpxx@ yxyy(zz z0{{@{8|||@}}`}H~~~@P`@` H@P 0x@X`@؄`0xЅ@(؆0` 8`@ȉ `@ P @ X@Ȍ@8@p@@P` @@p`Џ 0x@X`H@ 8ؓ(xȔhXH8ؘ(x 8h @Ț(X@`0`؜8 h@`ȝ (`XH x@`؟8h@Ƞ (`pС @0` `P( p@`Ф0``@ P`@p@Ч 0`HP`@X H`جX@`8x8 x@ ȯ  X  ذ!!p!ȱ"`"p"Ȳ@# `#x@$г$(`%@&ش`&0&& '8`''(@ (( )H@)`))P *@**X`+ ,@,``,,,h,23p 4Ƚ4 4x@5о6(67ؿ808`998:`;<@=`=>H@@@@P@ABX BB`DPG IIXM`NO``PS`Sh@TUUh VWWpY Z \x ]^^H_a`bP@ddeXeggHh h@h8hii@l@np8@q`rs@@uvxHy`z{P}~X `P @X````@hp@ x(@h`@@H@PX` ``hp x(!`")0-0589<>@DG JHM@R@UP@W X@YX@Z@[\``^cghhpqpu@v @x@ p  x(@0@ 8``@@H`@P@X ```h@p`  x(0`@8  (0`x`(@0 8 @@`H  `   P      X `  @ `   `h   p`  `x @#(#$&0' )`-8 /01@14`6H<==P>?`@X@A B@C`DEFhG IJpL`M NxOP(QR`T0VW Y8Z[`\ \x]`^(^ __0 @` ` `a8!a! b!`c@"c"@d"dH#d#@e#eP$f$`f%fX%f%@g&g`&h&`i'ih'j'`j(jp( k(k )kx)@l)`l(*lx* m*m +mx+@n+n,qp,@u,v - wx-{-(.p.`.@ /x/`/(0@0`001 11822 2`@333@H44`4P5 5@6X667@`778`h8 8`9p9`9 :x::(;;@;0< <`<8=@=@=@>>>H???P@@A@HAAA@PB B CXCCD `D  D` D PE E F HF F  F 0G G@ G` (H H H 0I  I I  8J  J` J @K K  K HL  L L @M M` M 8N xN N@ (O O # O% 0P`% pP% P( P) PQ. Q/ R / XR0 R`3 S 6 `S6 S : T? hTA TB UB pUG UI V@J xV K V`S (WS hW`T WU XV `XW XX YY hY Z Y\ Z@b pZb Z@c [@e x[@f [@h (\@i \p \`t 0]y ] ] 8^ ^ ^ @_ _ _ H` ` `` Pa a b Xb b` b@ Pc c` d Xd d` e `e e f@ hf@ f g pg@ g` h` xh h (i& i& i( 0j* j- j- 8k 6 k8 k 9 @l< l`< l< Hm > m ? m@ @n A n D nE 0oE oG oH 8pL pM pO @qR qT qW Hr Y rZ r`\ Ps` sc te Xt g t@h ul `ul u@v vv hv@w v`x w | Xw w w` Hx x x Py y y @z` z z` H{ {` { P| | } X} } ~ `~ ~` @ h   p @  P  ` X  ` `   h   p ȅ  x І (`  ؇ 0   8@   @`   H  @ P   X @  P@   X`   `   h  @ p Ȓ  x` Г  (  ؔ@ 0   8 ` ` @ @  H  0 P5 @7 8 @: @< = 0C F @H 8 I  K L @O @U \ H] `h `n P   P@   P   X   ` `  h   h  @ p   h@ ` ` `   P `  8   @   H   P `  X    `   h   p  ȱ   p% ( @) P) + `. P0 3 `4 X8 = B `L M N X@O `O `P ` Q Y  o ht t t `u @w w h`x y \z  }"+  `2CGh<x= N K'CG2 @r  `//2 ==@ ELOR]dH  iuy}H  H  @H  `D7  = e    H  `0* h l]>v  59  h*j>   V%^8  w(&&)@226-   8@(@`(a a d `# a a o  D(z 0 0G)* @ g8 %  V* ` {     ! #   @!   4" - 4  !9 H R >r ~ x* " J * # V   I$   [   I`$1 1 ; `V b p j * %Yx uV j * &n  -  d@N@)   `)=  H  ) H  )  H  ) H  )  H  *     H  * ! $ ' + $ H  @*. 1 4 8 1 H  */; > A E > H  *AH O R Z e l H  +Rq x  H  +eq   H  +{  $ * , -9@ $ * -HSW7w  *`.  .$:0  = `0ZLSf.  0H * 1H  `1 -1DJO I `2U\_'hs 21z2 , J 3@4  4U  J?`5g(/2D@K 5R\`{0 6\ l= 76Ajpz , 8K* 85  `9)(CI:A $XJPh]4$+.:[ po=CWQH hH0 <   =  #\(m > 0Yu 7*l`NI @ KWbHD\NgBF H  @BX /m8,$&&(FD9 jH   NH (&+L8 J) 7>AOOZc0@J< jqt\0@ KO e 3)tx)= `O H  O ."#8C(FlG V   NV (g ! < / L|N0X J Q _ z H ( Y'    `Y6 ( j !!+!#!ph4Z B!L![!!!!! O C[ !!!""" = ^ #"."F"m"y"""  = ^1 """"" (j=_H """*7#C#U#P Ob a#k#t#e####| H@O= c ###m $,$8$(tLme P$W$_$y$$$ +e $$$$$$ Pj= @f $$$$$  f( %%% H%T%l%b%((+ gM x%%%%%%=@fJ= kq %&&M &&&  l #&*&.&X6&A&H&  l M&Q&lW&\&  l a&r&w&'''' rO(Y(^((((0 `x(()0)<)%t%G-)))1))(>0J ?)**)5*A*M*  = `TW*[**+++  ``,c,i,G~,,, ( ,,,L,,, h ,,,i - - 8+ ---O-"----tF;,..a,1.,$ `O `n<.L.T.z5*...T4(FH+= ~......H O ..J/(040d0Y0p>K= 00011!1< < 41<1@1H1T1]1$  #e1m1q1 11110X+C9111A111I@G111O1128IZ 22z&21282  = @jA2H2L2 `2g2  ~p2w2{222 FY222222(I@2223 330b 33"3:3E3L30= `S3Z3]3e3p3  w3333333O (333<4404(4 O= :4A4E4/N4U4 = ?Z4r4w43444 = 444o455 = M55$5s@5L5W5 = ]]5h5m5555 = `p5555550= `566\6b66s60OI@666666  6666660 `77 7x77  = !7(7+747?7F7  4K7N7455 = `W7d7h7a77  77D8P9999T&&0 .E:':<:h:t::: |mC_:::M::;  q z ;0;;n==>>&$%X*C`h>o>s>>>> = >>>>>>> h+ =>>???? = O?.?2?H?T?[?  `a?m?u?????\0P ???(7@=@I@C@  = `@h@l@n2x@@D HJ @@@p@ @ @@@zAAAA(#x$@; B%B;BkBwBB~BH( PIXBBBCCCC4\8 DD+D%MDXD_D  x+jDsD|D0DDDDm @7EEEEYEEEE< c-F>FeFFGGG<8+F)TGeGGH)HEH8H<,F <}HHH7ICI\IOIHF OIIJBeKqKKK%&܀FL4LyLMMMM#x#WFN!N/N/NNNN(CNN7ObPPQPto= pnQzQQQQRQ@Pg@RRRhARMR]RVR0ܛgtRRSTTTT@!IlFUUUUUUH m VVAV VVVVH " V W$  ccXdl^ejeeeIL>$@ efefggsgggIlJ>$` ! ghYh-XidiiviIlK>$;RiiARMR]RVR0̜gTj+jjkkkk@!IwFmVlblgl}lll$  @(lllllll+4`(lmm6mwW |U j@0Plܼ R= 02%1MC\F`1Ǿ0  1#.8DVbsm , 1zSſٿп0Rs2(6/ S= >2AE[ = o21 *" ,= `226^ q `2  ,2  8D 2S`p06m  S= 3S(xAx @S= P3g ;JB `Slg3V^t  n 32:6  H 3`lpJ = 4 ' n= ;44;\ `= Z4) / 43>NG (= 4]i}' h= 4p2$0= `5*48ݩRZ I &5bilv J5  0q a5 7NJVzr XF36D!)D  | a6 D\bAMl_ ܲ 6 == 7?&   ` 8 .{pxt  80g8 %5*YexJ= 8my~ , 89-9E  s 9Qaqc  = z9%5Akw ,o @9$  `9&/W0= 9 Q"-4  9:R~b" x:Xht  \o= `:% =2DpLqg`#;5@Sv  $!<,=I`X i= '@<b %  ( (Z<<@S  <= )<d = )<q(4A  *< I_c0 I,<(x#- = -<5=E ,= .=  = @/-= P  = /N=V  = 0l=):q`T (Ft2}=OVy` `2=gnz  = 2=gz  = 3={ S3=   = 4=(4N  5.>'3F>  0 `6D>enr 7`>LXI 8s>!$+_eb  = `9>  = 9>,$  ,= @;>4E ]iy(XI=?0.Y)G; $'A4?{ G `BK? oBh?!   @C? &04djvp  S D?3  , `E?P50F; -= `F?Ne*RJ(jK6@(Zgs  Nm@_kz I`Q@   Q@  h`R@ 3#>P^W  FS@m~,1=WO   VA}  S W0A "   XLA*6:V V]  gYhAey*6PHT [AK&2LDThq ]A(y0Qqi=x< _A  <= `A +@eqDg@aA%91 8IbBZw=?K`Z  X= e7B4u45  = eLB*2  (fjBCOb h`gB+l(hB-Y @ kB  P9=v,qB0f tC<OVr~ -' uC>"H!(Fk `>Dy  @gxD$-  D G\7#'KC  jE CIUO o7 @bEpH (-= E(k iYCEry|O  E|   F rkw\y,F / 3 %N   GFU a m 9     8-IzF   N    ( F ! x s4 @ g Y (z= TG     %   H- G- ? C Hk q } w  X- G   n   IG 1 o= G$+ø h- H6:D S @H: T aH5<?OO_X x-I@HfquV   HZ l  -= @H!  -= H0(ymyd<| *<`xIEl @I~ ,7   Tp IFVmJ !J8Ŋ  @ *+ . R++"+Q6+<+E+ , JlI` SM+T+X+Z b+ 'Sk+++a++  /G/  p mTL/S/V/f/k/r/ ?ITy/T+/-/// I@T///j0000< p T11&1jH1N1W1 8.T_1j1s16111 H.bCT111H11H&  @U111o11   U111u11   0U111}11   IU11211   cU11211   `|U11211   U11&211   U110211   @U11:211   U11D211   U11N211   VX2_2b2l2  "Vs2z2}222  6V2223222 = MV223]33( ^V33"44444d= pVS344e3p3  VS345e3p3  V5#5'5a5m5@VD5556555D= V555O6!6*6 = V2696=6}2Q6@ 8H VX6a6d6hr6 pIWy666.7H7=7UI PWY7h77>8J8a8V8x|= W888888(I`W899$ R:^:::>K H U W::  W:::::  = W:::::: , J W:::: W:::#::: , J W::;&: X;#5;;a5?;G; = @ XM;U;Y;Ui;n;s; Ep 3Xx;;;`; `LX;;;u;;;; @IX.= mX;;;|@5<<h.X<'</<k<w<< x.X<<<.]=~=v=0I X=== 4>8>  !XY>l>w>.>>>> @U "X>>>V>>>>  .= "Y>?h?ht@@@@" >= `(EY@A*AdApAAATTܵ @*UYAAA-%pA *kYAAA<AA  `+zY AEBBj@CLCxCkCx"8$0g /YCCC'CD D .Y 0YD#D/DA8{IDPD `U 1$YD`DlDKDD  U1YDDDUDDDD0.YF2Y8EEiE  3Z8EEmE  @3Z"E)E-Eq;E   3"ZBEVE[EyEEE  = 65ZEEE2F F   6JZF"F'F?FKFSF  = 7\ZYF`FdFZ vF}F  = 8mZFFFFFF  = 9~Z4FF455 = `9Z4FF45  = 9ZFFFGG)G$G j. :Z0G8G=GKGWG`G F.Y;ZhGrGG GGGG. @=ZG H)HHHH(`G@+[ III I+I  @>[2I5I$?I  AM[FINIdI(III  B#III? I  @Bc[IIIQJ JJ  .By[ J'JWGW Uf^VW]WfW{vWW]% h/ f_WWWWW  x/f_WWWXXXhx0@i5_XYEY37IYYY\ @k_7Z?ZCZiZoZ k_tZZZZZ l_ZZZ" Z  @m_ZZZZ[ m_[[O[[[\ \(lM p_N\^\\zB]N]w]o]%t'= `s`]]]]]^   t`^#^R^^^_^&4%jFw,`,_3_6_  @wA`@_H_a_`___ x`___h`!`  lq@y`6`@`Z````(0 {```aPa\afa @|`aaa6"aba   }3ab,b]bbbbb8g~@ac"c*cTc`c{cqcpI/= Naccc{)cc qjaddCdddd @ad ee Wecepe(̡aeee# e  aeef4 ffff&%lNq a7g\gg hhhh ,= bPidii i jj(@bNj_juj jjjbjk k  0k?k9k0U= `bJkVkok" kk \`bkkkD l*l6l0q b>llmp pp|ppgܬHc r r2r trrr  Ycrrr ssss(D= c0t(tAt( tttt\0]> d8ttt> uu*u$u A d?u[uuO "v.vCv(lO`ddvv vvv  /= zdvvv vv  /@dv wWw UxaxxxD= dxy.y yyy(d)z=zeza zzzzpI`d {'{2{ D{O{[{V{ V df{n{z{ {{D= 2e{{#| ||||Dg= @Zeg } } }0= le%}-}>} -b}s}k}  V= e}}} }}}}0/= e}}} ^~j~~~tX= e~~~$7/0= eX_f x  /f+C\vn("= Mfrom̀ր   @ZfۀLRe]T (Fl `qfz<  @f@  f*<\i fzxj@fɂ͂.؂  @gɂ'؂  @ g<r   /Yg֔'*b  sg4KOu{ I= ghN((gÃՃڃT (F`g  g /H?l} 0hτWrj0a= (hЅ~l J/p Dh&-0D{: @WhAJHT J= gh[bew  @}h~׆ڇ҇8??"@ h.9{""/= h"H <] h ML(F#= h-tD{ h k) h0:[؋ lP= i19ՃQX 0?iS3Lc e3p3  Yikru'y  iikr(y  @ikr)y  ikr*y  ikr+y  ikr,y  @i(܌2}(qiɍՍٍ\#8. @Vlg@1jR\Yex #(F i= `^jяݏ$<#- @yj@QQP\$'bp j!$4?H = jOYe `V= @j“ i0j:LE  (p k])BNj (F %kSՕ0V= =k "@  ̖`Lkۘ;љə = [k  @nk%4=dp}w V= kÚht&$ kԛ t   @kΜ՜ܜ: (0= k'{3(ql kȝtr0= k8DY ϞŞ XIk`lz \= @ lǟҟޟٟ  80= !lJ}=NE0VI IlYpm H k0 ]lEMf͡١(T grl 5;8 H0= @lBNi̢آҢ = l"4v~H X0' l3r ̣գ(I lݣ4G>0tDH= lor h= lȥ֥ڥ$  Om7EI  umHѦ/QB0h%E@nϨڨ h0= 4n"% x0= ` Jn,37BrEJ{  WnLZnHWeT F,r"}n©ΩR-  @#n!i Y  @%nbq{ '  V )n8Imh׫t, o ".>t 07F-"od   . (FW= .Uo))@5[f(`/to>{) |= @0o%)_9D I0o(McrS_}"!.4o3ðϰTd C 6p 5FT0'00 s9)p=NSMI =EpkH  >dpskH  ?pųϳ'Ҵ޴ = Er˵12W (IFsRevrٶ߶  \r HRs )M;F  0I{sMUU۷H A Js0SmܸDxJ`? `LLt(1<_eqk  W? Mat|%p/p  = Mxtù )/C;4 ir? Pt Ul`dp<<xJ9 L@Y)u2GSyl XIX@]ukڿ  p `^u AMdX @Wg__Xry|  _u1  p @`u1  p `u 1  p @au}l00Ia v$03x~ `W?Icv  W d/viZ"  Wp dTv/69EP  eivW_c(PXI0@fvݩ  rgv!%CIP XI0 hv[bi8y~ , XI0= hvG!3-  p jvMRV"M-M  @jw ]ku&ܼDWykwX1&  W lFw(1H-D\^,`smw(6  tw `l  r uw9/  (qg`ww[g۷ Lq xw/IUlb q ywBr (= zxfZ*N@ X1p }3x(82 Ex( 2[s \xHh< @xu8=yH @ @x(/;THD$ xm~[BNsi 8&Iy1l%y\`c  5yfmyiH 0 @_y/J? ܸ= sybs4 y!%*^b  1`yny}H = y^Ux7/"X"Ls= yI`?L?xI "zFRZ t@k1`5z b  (1 sez(!*/;6AH xG$ @{z8MV[?cov HD zH|Ch HL1 zXG|H g@zQ #C`z0V;~ [wj 81g@zVb@ {&b 2{ .>C$ CL{H1g^{ @(XIܥ= s{;GaW(XI,= {d  {  {LF= {4M@PMUMZM  X1|   @{`%*Z#0L@g|s `{:JOL(I= |"%6(hs`A|FW\k`Cf= [|!?EK l z|Q\a  > s= @|( h1= | SH  |]IO[U   t= &}0o`AtA)N}  8CQL\LFX q}`kpH  } \LF X} } /;JD\LFx1} } Qgl\(3 }-H P } 1 B ~ ;>J]Wt@X ~(hs{Q\ `X- E~0Y\ X) `Z~  c%0<7H X o~0GV[ X) ~"O[skH  ̦= ~8cr&WM$d&Lr@`( fQnf C;O[wtIP 1 C`j *0  {I`s#8#F`0<bZ\8=    < /;?. !{ 7| Gn 7|@S3-0ve3p3   8?CHM  R]alqv   {R 3 >J[p 9k = ڀ(V D : H)E=d$J0EU t( 4((X (DRVk(y  h@ف'.>6[b6  ltp o{;GeY Xlg@ FHY .b/E^RX}"  )5E({ tI@   r0t= `0;AK  0RY`O x 1= `IY 1 bl2W Ix t $-:  1`eBIL2Z  ahkO{  I@ KG  !Bgc  `!m"  = "΃r0t= "1#*-r7J{  = `#>FMamt  1${! 9k   Y= $P[ C 7 IXDAE   6    tjBsEo   `1< M E  @Y.IFW Z ^ Un q    F(t      Jm`I   % 0 B ; (1= J҄I S g     tPsKK   ǟ ٟ  L       L( $ 7     4`YDP(   k t1)Q2)G1%%PsTY F PH Ui#'K7B VJ(KZ_Qgry  V W$ ) `Wa+7LB\la s`YhqG0(= [؅%Q]qhXJY= \|Q h= ]  ?ID , JB_'QTXjm  = `Fp' ,uqg``Tc+J= bz3=NjY d:&2 = d K/) H1 `edž7FJ6_j|u 2= f߆ Y= g.K_D\lgiA !vTlg`lX+7YLDlg`nqm  @o1{ ( p&GUO 0 qӇ \u r|2@x<frdMxJ4F)M,"M-M  @FM0"M-M  fM\"M-M  M`"M-M  < P  $hZ`f  @Ljlfd p x H  ~   ۷   @FY  !!!!!!|JlI`(!!!2">"N"H"Fu3@ a^"m"r" """J r""""" ##0u= !#)#\# ####(= ###$ $   $$$  `ԉ'$.$1$D{;$  B$R$V$7j$v$ (F S3$$e3p3  %$$   >$$$ $$  U$$$S%%% P z%*%C%oi%u%%|%  u= %%%{%%   Ċ%%%%   %%%7%% = @%%&R&&d (2 %&&.&2&1X&g& 82En&q&B?I  eu&|&&U&&& = n&&T?I  `&&&.MD&& = ‹&&&'&' ' H2`ۋ'''qr+'  k2'5'y    ?'J'O'/Z'i'p' t `G= %v'z'0D{' @B'''G(S(i(a(plQ= _((( ) ))p= {A)D)M)(Z)])  Zf)p))t))))  | @))),)   ***DJ#*,*Gg **5*PJ#*,*Gg@1C*J*M*]omY*b*0(kCSek*n*ev* = cek*y*ev* =  *******\X2!>>*??? = @>>*??? = č***47?7F7  ܍*+%+ y++++   +++H++P0I(+++N+++0I +, ,T,,$  * ,&,*,Y4,?,F,$ > D+,K,^,,$  @X4U,Y,c455 = lc,f,j,hn,q, = t,w,{,m,, = e,,rev* = e,,~ev* = +,,,$  `ӎ,,,,,,$ h2 8,,,+,,-\ A  *m -E47F7H   --$-r@-F-C-   Z= @;U-\-Rf-q- = \v-~--'--  x2 `gk--y  -.U... lR= `ˏ,/7/H/n//y/  @Z= //////    0*060)t000  ' * 11`12"2G2?2|_= @c222222  n22222  y2222   23 3Pg3m33(P(F`Z! 33+ 3  2ǐee3e3  2-33@-3C-  v= @3334 4  4447<!4 `.44*4=<!4 @>.464?4q4}444 2 `Y4445$565d2k>5E5I5Q5\5c5 l >5h5r5Q5\5~5c5 2l @>5E55 Q5\5c5 l >5E55Q5\5c5 l ԑ555#5*55e ܻ= 666=??? = `66'6B??? = #1686<6GD{F6V{  ;M6T6X6Lb6  Xi6p6t6[&&6& 2= y666o66  = `666wW6  2'$66D{6  mM66{MM   ʒ777> 67A79kD2= ے+P7T7t,,H  @^7^7a7{777::7A)A)7 777l'9o939o9@?9999L9: ::@Y::&::f*::6::@t:::F::J:V:Y:]:@h:V:w:]:{:V::]:@:V::]::V::]:@˓&&:`֓:::!!e;i;  //o;@y;;; !!;:;;;`N<<; `5<C y;<;<?<H;<;<s<d 0<<< )0<<<<=p P(@”0 =<=<= (є0=<'=<=p P)0,=9===B=N=@  (`0U=b=f=k=w= (@0~=b==k=w=@  ) 0=b==k=w= '!0=b==k=w= (20===== )C0===== )T0==>== `(f0>=>== (x0>=,>== `)01>=A>==P 0(0F>=V>== (0[>=k>==P 0)Õ0p>=>== (ו0>=>== (0>=>==0 )0>=>== )0>=>== p((0>=>== (=0?=?== p)R0?=.?==` @(h03?=I?== (~0N?=d?==` @)0i?=?==0 (ee?!!?p ؖ;<;<?* ???c,c,?$ ??@*@@@@6* %%-@R:  7@]JE@E@H@\^@^@a@@nw@w@z@ `@,%%@=mm@P@@@`ǗAAA %A@+/A`D9A]CAMAQA qAA` A AAɘBBB  B@$ $B`9 *BQ 0Bj 6BTCT  = 877FHT^Tj|u H3= 8iTwT{TTTT h= `9  UUU/U:UAUl Z= 9dLU\U`U'UUUU Lv= :UVV6)V5V=Vw X3= `;ӦEV`VdVQVVVV <= <VVVvV WW h3= =4VVW~V WW x3= `=[*W@WOWmWyWWW 3= >WWWIXX#XXH Y @M:@XCX-MNX   @@SXO ^XiXtXl   @3tLtLPPH  @^{XXXXXX 3= APOOXPH  BXXFX = BǨXXXXY Y (FZBY"Y3YxYYYYGb`Du(YYYjZZZZ8B$BG $G(ZZ[4[D[\[P[,\Zb@ Ifi[t[[<[[[[(ZII|([[ \J\\\\B`BGB$&MǪ ],]3]S]f]z]q] 3= `Nު]]]]]]] tChk[= O^ ^^6^A^O^H^  [= `PZ^d^h^u_)_1_ = SM9_@_C_Q_\_c_ = `S,h_w_{____ l @TE___E` `%``,k3`gUYI1`4`I  hUs8`;`G?`  \ VJ`V`Z`_t```(bCW``````0= W`aacataaa0|v Yԫaaaaaaa 3= Zfaaa7bLbdb\b`G@[d= \qbtb?`  \ ]xbbbb  ^&bbb?I  ^2bbbP#c2c@c:c 3b _jHc[c_cpccc.(`[= acccd+d=d7dD[= `bIdWd[ddddd$[b @ddddde e03= de!e%eKeWede:D[= e7oeveye3CXe  eCeee+eeff vIg f/f:f[_fjfuf50[= gfffNff  hH  hH  @h&f&P*P[ffH  hFOOOfffH  i^! ! $ $ H  ivff g6gegg  lgggh!h Y @ngg'hh!h  pahxh|hhhhh 3Yg@qhhh.i:iOiFi 4g`r Wi[iV`f  s0 iiiiii  y@uPiii#j)j Y vgii/j#j)j  xgjjjjj  yjjjk k   p `z k,k0k[bkik T { okkk|kk  }ɯkkkkl l l ~(l)l-lUl[lD { al/Tlllll6  4p l/Tl lll6  (4p lllT"m.m>m  p +HmRmZm sm.q"8Lq[q^q<kqvq}q = Oev*qIv* = cqqquqqr r v  +r7r;rQr]rrrhrH 84 j Ű~rrrrrrrH H4b @ Krrrss's(d7F1sP \0yyyzzzz ]> 0{{{<'{3{={ ]>E{P{\{k{  @v{~{{,{{{   w`{{    ²{{ | *z|||  ||| Jm}y}s}H 4b @@}}} ~   :H  o   =C   Igk    @0̀ n<f@ 6n‚Tp ߂4 iʃT &3 Ym @\PF( Ä P `AȄ҄ڄ  =J`\= {(%1 <Ie{s !lw'F(% @Ie{s !w'F  NA2>?5Bg`  Jr&$PBLҴ ߈و \  Q6B< 4 N\` n̉؉҉ 4 !  jvp \ L ;Ɋ֊ Ie b;GA ( ̵lpt  4=  D@  w X\p ^  w !3  $ /5APH  4Q s`"S8[ 9ȎԎ h$KhD@X)@ *. ďڏҏ<4D-X   _kwx 4(M0 ڐ ߑБH(,x.5ĶX {h4 M9ݶPƒגے 3?XR5L<8eos (w@>@Г ה05DD .2 ɕՕ \Z LGL .2 ZƖҖ \L Jc #   My ϗӗ (OA8(I@R( n-B\T \xn I@U˷   G* @W߷  >JXR  (5? X _os    85 @Y%țכۛ   H5 @ZF&* CO]W  X5 @[X(l (Ȝh5g\j(؜ 24)x5g`^}0D[c X9EWQ0]@ c0csw   H$$mDTgָ ,6B :coz 5U@Ph  DxU@p7.2 P\f0 qLl آɢ  ]Fun  O  @v~a (=< @'OS ڥ  p @Ϲ"1 @S^  @] ܹiKOS q}H  4    `]= 'CP|٧ѧP=x bp(I è$0 H4((@(sת k y*"gDMi'@Ż ֭ 5  ֭ 5 (!/`mX#x$FY֮ͮH 5 @uSS SSTS L 9= h `ּЯԯ /GFO  ({21=fZH"$]"@@`z>  5= #7Fȱ^Tj|u 5= Tޱ(  5= @ź #7 = `j!'*;. = iTwT1=TTT h= @ UUE/U:UAUl ]= #LU\UUUUU y= <UV)V5V=Vw 5= @k/:FA 6= Mhl̳Ƴ \= x "0*t86`8CGnz  `ԾȴӴߴڴ ]= /:FA (6= /:FA 86= /:FA H6= / +/KWd^ ]= @Gw&˵ŵ  `\P$+9k  X6= s 2FJ(xǶ˶/%@(AdhշTt(FLy= N"/(bgj8nr LllS pz~ctD p H h `(.2EQj'v@r8=H= '+ нt A о8T) $/   m6MQN )J}q  m#l(Fh6Y +;Ifr} ^= (? ^`,<@P`k = ` q = /\0Y @B#'82\x6Y qCSW4@^Y L6Y 0 9mT'D%0@ |B [COa[@(F0Y  QrH 7  .FnH d 7  "DPc]\6I @/kntH Y `y%H 6Y '3IC\Y 6gry" `^= ` MgrM ^= f zHTc]0(= z 6= 06 '+;FMH Y ` S^bv\6Y @ K,8JDH |Y 0mw{|y]> k  5E\T^Iy0q4^]>(`0q4^]>( %04amx\0_7y  \0 _7y   HXog@_7y`H6 >`?`i6PK   f ]itg\0`_7y` ( _'+ 8(( +@#b  %H 6Y #w^ /;BH 6Y $M`p0 \yY & '_kC\0ܾY '0 4A )0. '&]> `-  9JVd0B /^^i.  PF0V  _g1# p 2>VM07g1/8]{ 8A$A<B4Z( 04 FRc'+`6pkG RJ( <  47>F=   ,=54(7>F= DKR dox487,F>( H7$j?( $j`@0 -9B>v@A0J -9B>v B(Zfj \ y' @C$( KWe_\  z' DG(0\ LF\ lz' F(kw{ \ z' G(_kys\ z' I(D0'+J(COS!\ z' L(&'=3D(,{'+`M(jvz/D(\{'+N(+378T`qiD(_'+O=(=D({'+PT(BD(X7'+Qk(GD({'+R(4EILd{'+`T(V"?7%T%|'+V([dhf4Th7' W(u #h!!x7'+ Y(/?CD(L|'+Z   ||[+8<690`\tLtLPPH  \4emquH  ]L _= `^c  = ^} ,61 `= _?LWkv}  `= _I = @`I = ` @`= `a ' = a ' = b'x,9=AT\t8`cAbkv} b c` ' = @dx 7= d ' = d ' = @e ' = e ' = f ' = `f ' = f4w@w@P = fO ' = @gg ' = gx,9=AT\t8hbkv} b `i ' = i 7= j ' = `j ' = j ' = k0 ' = kM ' = kh ' = @lw@w@P = `lMOTOWOZO_OH l I  mPOOXPH  m. . 1 1 H  mH  @n"76  7n78 Asy\ A qZ A(=S I@u{_osA07= vA!  = w@ 9=A*(Cj{8 8NAjv\ hA Ar.Si(p AH  `.OPPAH  @OA 7= z*PF:![ g`(2JFTX(FܪP F*  @=  Fr Y `(!Fs%*  (/8;Ft?D  IPSF]hq   xF \(B(F \(T + '+F&NZa\(Bs (iF="/\(T `/(5BFF\(T C(F\(T \ *.F\(B@{ F!5)\0``Bs H^bF\(|Bs`0F3 $|8* -H24F?JU\0B % \hlF N B @8(F T mF F&!-5 BjT(=SWF= T Fa( Flx T v@p(F T v Ffr{ B  F  `Bj` 04Fnz  }Bj 0F3(<}8* ` -F?J  BF'7;FOs P ` (FzUat T j(|F  l}T |5-gK6F9> = JCLWFfpk 7 `{Fk 7 vOh,I< `lI@hOv `}F(4O >> K'. bTkO" Kxb `QnOqXd=< K  HUO=Itg  @ O |@_(  7Y &5=_<Zfxp 8Y )_Yq    lK l Y t,,7 h, = : SE hI T >  [ g k h        h3; ]  z AhHG(Y 0 k @hN #xrLBMHh<]> 0 h0 <]> l <S  ,@juyoj  qgok>  = o5%  8= @8@So  (8 ! o0G88 /(0Coiu  H8 >o} 0GX8 Po- 0Gh8 b0*4Go+s  x8 oo    | o=   ` oD     8&*oZ6;  V*  o  =  @Hd |   8    =  )1?W~  ` iKOSq}H  $  = @ 9A)  ` [A)< = G(0= .>Bu0qI j q  )4@; 8=  -OVYepy =  M&(aI   (@Uaxl  as` P }s  '+6FQX(I ahoJ; (8=  [](4(@a=  =q4&D`G  gEHu?`    v{L_{{{  } r{~ =  H  `    8   &8 =   p    h @@ l   e    bC w !!!zU!j!w!p! # !!!!!"!$8= % """'"6"  `% ="D"G"V"a"  % h"p""l""#  }( ##S#(#1#H  ) (9#J#X###$$tBM`a$m. X$;X = / X!$HX = / %$8$<$@t$$$0 0 0 $$$Z$$%%%<<,~ `3 S7%H%Z%l%%%%<<\~bC 6 %%%~%%J{ q 6 % &*&&& ''08 : 0)'A'E'((((*>? (9(R())( RA )&)*)eZ)f))s)H 8b B  )))k))O\0 B @)))q***  EOG %*+"+z++++(~bFI d+++,,0,', 8I@J t?,G,R,n,z,,, aI K (,,,- .:.2.?$?~L`S \.c.f.j.u.  S |......  a`T A....// = U P /(/,/G/W/n/b/09 V `(~//////<$ W l(/////$ X w(//.///$ Y 00&0UA0L0\0W0H ~7 Z i0y00s00 118""̫ I\ 71A1h1}1'2X2P2t(Fx7l @b 22222  b 222223 I@c  333b3n3v3 t @e  |33333 k @f ,(333404O4A4 a [@h A f4p4{44444H a  @i f84456466n6T(FCAvp (6 77%7777X! ^`t 0848]8K9I9y9q9''(FV;>Uy 9,:0:m:::%glI :::::   :::::   :::::   &::;::   D ;+;Z;}<<<<$B D  0=D=l>BjCjDbDK$a FFFGGGG (F7 H H HGHAH b 0VHiHmHHHH($a HHHII.I&I l ` SI]IqIIIII l 0IJ#JMMSNKNBM(FdL>X + "O,O5OOOOO(F @ = OOP4PKPCP b @ QcPrP@S^  @b` ZPPPP H  @ kP&P*P,PPH  (PPPNaPQQQ09' ` Q.Q2QN?QOQ]Q E= eQxQ|QNQQQ = QQQNaR}RRR$Hh bI` YRN\&  uRRRNRSSpb@ !SP/SN MSYSk}(= bSOmSNSSS = @ SSN$SSS( @ STTN<bTnTT = < TTTNeUUAU9U I ]UlUpUNUUU = @ UU:VNWWWWt Fs$s,sN.JsZsks 89 ? c $ssssN@ssss Xl$ @ tt tNA0tCt A NtrttNSuuuuH 0Y D (%v.v2vNe E VvavlvNtvvv7H H9Y E vvvN{ww5w-w%&bgG V(AwKwOwN[wgwpw> H vvwwwN,xBxmxex0h L (xxxNxxP > M (xxxN4yLyiyay""(F>IO (yyyNz1zVzNz%D&(F>IR ;(zzzzN{{5{-{d(F>IT ^(T{k{{N {{||("!(F >IW (B|K|_|N||||b>I Y (||}N%[}g}}y}b>IZ (}}}N00~<~X~N~c>I`\ 0|~~~N=5ZN#"(FAg` (Niq}==Hh>Ic / N\b  e K(h{NˁׁT( c>I g j(N,?PJL(F@c> @h H_pN*D<4|M:l W_cNn} l 0܃N ƄKHCg@v \gkN$p{6   v rN  @w =N2Džׅ `x Y((N@==\>I | 0 $;\Ncև%X=phCg rNNu   RbnN{X9 ` 0ɈՈN$x`cCg P26N@OX :0]tNF5X=@F@Cg ZrkN   P2oN@OX 8yN D ЊN."  ` (DNRNt`<$ *Nڌ(t= ` U @NRN( y( 04NMҎގ( ` =N Y ( N"5= ! (C_TNhn  tNldf00 ˒ϒN5  h9 .EINamyLFg 0N> #H0]>F 0+.1NkK ]> 0E@PSNe ]> ` &(vjN*6_Wx`G7 @ U{~N?`   q Nʕޕt(x97| N4X = \.  NXj.u.   !%N]=PX  9@ _fiNe{ = NŖՖݖ =  N"=XL9Q  ^epqN9k = ` Nɗԗۗ> 9q (,NȘט0cqI 'N&- 9q ` 4JNN ocqI #Ncߚ0LqI ?NH1H]ScqI YmNQ͛ٛ9qI uNa:Yne9qI wNnќɜ9qI wٜNxќɜ9qI wNќɜ:qI wNќɜ:qI 48NUt(:qI 1NÝ q Fȝם۝N  q ` [ $N;Vjb8:qI rrH2N q NÝ q  ̞N;VjbH:qI N q #N:Uh`X:qI@ pN:Uh`h:qI N:Uh`x:qI N :Uh`:qI` %N:Uh`:qI ;ʟN:Uh`:qI RߟN%:Uh`:qI jN.:Uh`:qI  N7:Uh`:qI@ N@:Uh`:qI 36NJ q :V^NVy3 c Nՠ NZ] @ POONXPH  5 = ̢֢N  ; 2>NNaoi 8!(; @ ({N$ > (PPN$ > ({N$ > A({N$ > ` f({N$ >  ({N$ >  (ǣӣףNۣ$ >  ELON H  @  N#.5H   G >| ,>(  f D.QR|k @ "7 0 @^jwt(]>+` beq@TM{` t,,ɧ, =  ͧߧ0 @ !'   -VZ P?x"#dI Oȩ0Y  rѩ  fLC L0 H֮\?jt?hLPK15 ̯  @7 ԯ$<0  dI8 O8Quy~G C: v8ڰ~f'3@ <C@< 8TX\~uı lC= @ ~ݲԲ@pF8;7E C c~`lyh# F ~  @H $37~Uah I I rg ~/̴ش I K  ~CN P L $Thl~е>(O L  ~w4. @U r~NZv \ ~* P ] Qf~Z_ûLA(>F`h k@~Vb ̀NE`n  )~=vn EX8ȃ>F 8~RPwt&8l@dC &~W?K\  Qk~%;Pph`d@ (s~x! 'j ~Q3]FtEh\F a ~NZzh  ~Fh#d3y  ~)8 7F  Equ~ 7 w GK~ d7j  !~ ]i~v H;7j  ~*   7 - <@~J  7 ` R~  FX;  ~ X$LLdF  ~D !;0CЙ,F pISW~G qh=pg ) ~Z \&  J ~_ uLFdg  ~d nzA(eF@ p~y h"g )p~h   h0g S (8<~ bn}`fh; wp~ !@b<XFg@ p~ h=pg`  ~ ,=me?X8x; ` pv~  F;g 3p~ @Dg \p~ av@\g p=~ h=pg  ~  F`  ~< PPXP\P~FR[H  P&P*P~,dmH  A(vT G;$    ;= 0.;?(Xd^ ;@  s , D ,IRtA e=   8(  V8:N](@e.D ' Y  <1/k}   `  (1409>  =  = CXk; YF d ?[ Y "5Dy  `e   Y  j$ Y  ( )It- Y  x j=8i;=    =    $6MY     ajmsx  =  0 } (Fe   )5A8 eG L{ i`B% 6 <Y( X epw4 ;D@) = (FD) R.&B; +  >NR`. 82%`;b0 ?U^= 3 %(@KR  `4 Yw{FhbC8 D  b = L\e33+?K<= B (ducD0GeeEL @0147 BM l@=IM^rD |EN @z |E@O = Y `O (  `P ( < Q Q3IaCfe= Y |kdg@= o !?wd`t I = t '  <= t V(7A< (< u L_k 8< @w -gK69> = w  f `x .AOI H< y <Zds  ` G Go buildinf:go1.20.30w tApath golang.org/vuln mod golang.org/vuln (devel) dep github.com/tidwall/gjson v1.6.5 h1:P/K9r+1pt9AK54uap7HcoIp6T3a7AoMg3v18tUis+Cg= dep github.com/tidwall/match v1.1.0 h1:VfI2e2aXLvytih7WUVyO9uvRC+RcXlaTrMbHuQWnFmk= dep github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= dep golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= build -buildmode=exe build -compiler=gc build CGO_ENABLED=1 build CGO_CFLAGS= build CGO_CPPFLAGS= build CGO_CXXFLAGS= build CGO_LDFLAGS= build GOARCH=amd64 build GOOS=linux build GOAMD64=v1 build vcs=git build vcs.revision=9c19e53c7c8ed2cb0dead1690a83fdc093b37300 build vcs.time=2023-11-07T00:22:33Z build vcs.modified=true 2C1 rBA:-null-----{((@S 4ФP@w,+// EE E( ( ) ) -=JVf@ H  @Y  -----END -----BEGIN >DFFKP|h8jO;',.,0,^,0JA0000-//Pv@[^^@nn  `l  Pz'`   H `0S__-0>ŨΨ٨P0YP Pmptª۪ߪ:@[ƤG////`!o!$$     /dev/urandom/proc/self/auxv;l#M9{>A1/111p,,,,ͩЩ٩ީߩ7;IMO``lnprs0-g-o-p---09AFafiq!.!002....//Wp!_4 1VY 5 9 ? jjjj0coo46G6@MPY\_ P U c f  0.40484 ' 0 9 @UW_` r x  @ U X _ ddegoՌ> 9 ? ?     DPY[]aopAq#-/     JMO`j  * + . f i   e  ( )   +0;@DEO   pr ^`|Is*wyj o )#*#O_`Te d1<_? @ T 34MO?? ^ : .. . ..!.   / _ 000Y&@Y Y YY`F Y         / _ 0 FKPY^_+0?MRo@`EPR6@U`gp      oJoOoooo x@j^j`jijnjoj            09AFaf!&AF-|  .0c ee@D0IPip m   9 .. . .. .   ( ) / _ 000 Y RFYYYI "/+xM--@./000011223W3foq    D F H J O T c f  GIlq`!!!!0!0"0)080:000!0)080:04MNmp  e ( ) / _ 000? ABzD@FPG$tIK L(knNPYY`,IYYyFYYI 68EPl #$n$p$t$$C%-%-'---,0=@INOop p@tAJ $n$4MN !#$'()/sys/kernel/mm/transparent_hugepage/hpage_pmd_size68<>@ACDFGOYYYH`YY`YYYYY@GYwFnFuF  578<?jp|!#$&*....//00!0)080;04MNmpkEkPkYk[kakckwk}kk > W    > hW x 5V .0"/0oϟ"'  9 : B. 0 0000ADbcij/Ih5AVXb4-q H!I!|,3 YYYY@FYYYYEKYYYYYY YYYI-]B   ..:.;.@.0000p12Xc S   * . ` d f o   YYYYY@~HY@YYYYY YYYYYI`eghj@kCkooooo7Tq8=KK                ( * 9 = D F H J M U V X Z ` c f o w  >W 0en or ݦ4@ J'  @n_n!(O  `nn"C0484sz !5Oo             -]B   S { ( "..:.;.@.0000p12Xc $~ |  ?F  8UiYYYY@YY`LDX_`f;yx733?+3pd*&2{:>A3]^cKY@Y@YYYY IY@E`>@i@B:CPC              S   * . ` d f o               .0/011122`2~2`|;g,hi{  &(:<=?MP]  6:<=?@GPY      ( * 0 2 3 5 9 < D G H K M U W \ ] _ c f w ]iBkPCkooo<=DF`YY YY@YYY*IYYYYYYYjH               @oU [F C96{010500000 ϩpݪmppYYYYYYY L5L   578;FPY      ( * 0 2 3 5 6 8 9 < > ? B G H K M Q Y Z \ ^ f g v ooݦ4@ J         5 8 : ? H P X 0484sz !Ez5,jx#q   p!!$$|,},p\c]_ YYY@YYYYYYIoKUpQ R T   *0-000 -   !?AJVoqPP=Pptv @YYYYYYYYYYYY K  )]4};=_F ~ 8 #{ #*#i'u'''!'')))))#.&%.). 000000>6DHZ\^ =4]c 0@P`p @`@  %&(*058@HJPU`jpoppՌpݦ4@ J!/:@[^`{|~  ' 0 > A S U ^ !_$%u''+..000 000>?EFF^`u800 ![jkGP>@([3{:<_  E } 8 #{ #)#h't'''!'')))))".&$.(.B.0 00000?"57CGY[];3[_bb  YYYYY YY@YY@Y@YY`Y5I5I`5I"#VW&'Z[*+^_ d'@Bʚ; TvHrN @zZƤ~o#]xEcd #NJ (*02359<DGHKMPW]cflpt r w  x ~ X ^ p x *3i|p t y  P!_!!`$a$$$$v'',111 2)2H2O2Q2_2222205psuwz}&*]afjA EHMPWY_`}&!e?AZaz%,\bekwyq   *!+!2!N!`!!`,,"§ʧ0Z\dfi!:AZ?$@Y@@@@j@.AcAחAeA _BvH7BmB@0BļB4&k C7yAC؅W4vCNgmC=`XC@xDPKDMD ';> 6V   5)14:\6 7 ;>fio$_jZkbkUԝԭԺԼ:?EQՠ"% #(38:HJLPSXZ\^`cksx}yHJMPVXZ[]`Z]|------------------  &(.     9W95WAW9/W9W>WE/W:kEKW9aW95W95W>YW)S8!WW9/W9W9WBW)S87W:9{W `W9W>W9W9{W!. ?J,7>9=>d &e JKbghn56 D;EcZ[^_;<~< = G I ..<.0tvwΨϨ/ȩɩ]^_RgRVW aB09`if o  f o  f o  f o  f o  PY )@IFOPY@IPY )Ш٨ Щ٩PYtzY@ $(q F6Clxy},jx#q   |,},o-/.010,2050;00b00^00 spϩpݪm\_ipT !"#$%%&&''((()))*++,,,,,------....//////0001123333333333444444444455666677777888888888889999999999::::::;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<=====>>>>>>>>>>>??????????@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJ*!LMNOPQRTUVWXYZ{|}~#4D+<=>|~ D R z |  !@!(A!D!K!!E!!!!!!!! !!!! !" #!#|######%% %%o&'Q'''''')))))))*0+D+G+L+)b9df \^ D0< @L8@ @  H @uӺ?c?yڌX?9?-^? h?:D?Kx? !? ?8G?2Sg?hz?:?Е1?z?G?g!?Kx?4&?̈Gj?TNK?sp (??P??2Ut?Uᢜ>?&m??l??sjbƈ?UϋE??0?_  ) 1 4 7 = ]  ) 1 4 ^  ) E I W  E I HIWY mq_XZ\^ +/,_,&---------.@00112Ω'/7=?BESgu  VUU433$Ir]tVUU;J$9.ى%IqgffF]VUU$I@8433.*J$ qaVUzDy 0  C{ ?gfVUJ9o43]g%I0 9 fo6?PYPY09PYPYPY`jijPkYk@IPYV W UYGHAC8Y9;<mKLAB<>DFBCABnjojj7kB8kDk nN`~!"$')2479;BGIMNOQRTWYabdgjlrtwy|~!, .: ;?~ : ,  071>^d e Z[ JKahn}56( DEZ[]_;?~< = G I ..<.A.L. N.O.00 vwΨϨ/ǩȩɩ]_ߪPRTW  adKkSsk*!s+!0011SE&!24>!A"B*J24>ABJbcc!"*bJ`aa`E&!*!K+!JKK !"#$%&&#$&'"()*+&,$#&%*-.$/-&01(&(&%1"2340"'''5-)('6("4#!&-&"7.5*"/8&&!99(899/:/ !8;(<,!*5'8&$(,-#0--&':"4<-(6"4:&.!918$,%"$%,:,&$6!/=1>t2W8,5W{W]\WR $SS+WS+WS+W!ZWxxSmSmWJ3SW!LWWW+W$S!!7W$S$9S8S8S8/9>9{9~999999999#9.959>9..4.909`if o   f o  f o r w  f o x ~  X ^ f x  PY 3@Ii|FOPY@IPYp t u y  P!!!!`$$$$v'',0 !0)080:011 2)2H2O2Q2_22222 )05Ш٨ Щ٩PY(O  `nn3NTVg7Rk";Vo6NPUp"W#C1W V W   : ?   UYGMAC8Y9<KLMZ[AB<>DFBCACqp$xq$t$njojj7kB8k9kDknSnN'  @n_n4Mh  89;>@DFJKPl!<Up4Vn6!  " <# ' FP34sM56<MflptBF?w+t9:=>C4G?BDERjj0k6koooogimr{06DFHJ@[`{ t~  @d e ?56   d f p t ~   !%!'!)!,!1!3!M!O!_!!!!&$@$J$`$')s+v++++.R.//0000 0 00070<0?00000[011111 2_2222X3YY33MM!09.ϩ[jk>Q?0RTfhk ;@[ep.A3ux #X_y        @ H } ~     X _ x      `~&QTRe:;Zl[kaknn`xq-/= 1oW ?  P X   q  9 ?   UYGM@Ctu8=KLOZ[]iAC`l<>;D EF?]@FAEpqp$qq$t$njojj7kB8k;kDknSnnoL^_1oW ?  P X   q  9 ?   UVYGM@Ctu8=KLOZ[]iAC`l<>;D EF?]@FAEpqp$qq$t$njojj7kB8k;kDknSnnoL^_MQ NQxxaR `lRpEpERV``V5Q@\L@\L sY@Z@ZT[T[6^6^pp^pp^pp^pp^P`PLDQL8OQ FQLQ ; 8> @ I L N O       ,> @  ;    6 > ;@ G H K L W      *  A D         > @ F H J L W + L   >?+,18;<VWb cdgm #&)+0138UWacdm nr51;=>ACD=$1%+45.0/0#$'Y3èRS1/034M{.}n  p v   O y *48m@ajt|!!!!! !!!!!!#!%!)!.!:! ;!J!L!M!O!!;!! !!!!!!!!!!!!!!!!!!## ##"#(#+#{#}#####&$@$J$$$%%%%%%&n&p&g'''((+/+E+F+M+s+v++++,,P.Q.....////000 0 6070>0?011111122*2G2P2`2a222223MMƤ(+679w>xy@ D8@<" D@   M8@(@@@@A @  H(@   @@@"|_8@BB@ ^`NPW]btuz Y8KRWX0J< M Q T q K < oM o 0 < M U xM o ; n< M  G}HLNl59>?7q9:cdim ]^_9\:;u|14Dks67x},j,,/.*0+0/0000osu|}S!Ĩ+.S`%{}ª[e\_ik !/>@p.DAZ.269GJxy}2:;=>ACDFHNEp+rv /`.1V(/8?HMY_ho&!*!+!2!!,} ,.,`,b,c,d,g,m,n,p,r,u,~,,,,,,,@NyBl".2ny}~§ħŧǧɧ,!:AZ69GJxy}2:;=>ACDFHNprv /`.1V(/8?HMY_ho!! ! !!!!!!!$!*!+!-!0!3!>!?!E!!>,.,`,b,c,d,g,m,n,p,r,u,~,,,,,,,@NyBl".2ny}~§ħŧǧɧ,!:az*/37:HKwz~#3<?@BGOPTVWY[\`aefhiloqru} Eqsw{|}0_a/ay}s '07@EQW`gp}N!!60,^,a,e,f,l,s,v,,,,,,- -%-'---Am#/3oz|çȧʧ,SpqAZGo2zSQ!>D-0Q1b1:>!V)XE Z~ 16 = "38 )u Z&~ N )B ) -. 1   - 1Z .9g@y!$^pN #2 &&&&''GEGII#TV  9;>@DFJKPR46NPnp!"$')2479;BGIMNOQRTWYabdgjlrtwy|~$ '+g - " $ &"( **0%8:<2>,@DF/HN.PBX9`5d(f4hjl6pr=xzC?3FEAH <>8:GRIZL " ),.Q046S8.=\DJLTT\__MdKhPpVx~Y]^;cdeioomjvt܈sr1yx~! b z}&`(_,`0@HPX`|hpx8ȕМ؛O (04ad]n l  N$#"% ),# ()+1'79-=1A0INUkd{t~/5=767;@B^^Wb |~pCDEFGHIJKLMNOPQRSTUVWXYZ[\e!#%'*./: ;?@\~Z[_7    jKkm, 0>^d e p v y w  pOZ [qJO`eahn}56 DEZ`;?~ C ! ' 0 8 ; > A C G Q S U V ^ ,,,,p-..... .........*. +...0.9.<.?.A.C.D.O.R.000=00 s~ twΨϨ.2/_0ͩީߩ\_ުߪ%R0EFILPRTW_ahjk   <adee.,EF<,^-.235>?ADGHKMWb c567@AEk0r12;<>n j!&,.801578=@B9UWX/>k_Qo[PRooooefmr!#%*,/:;?@[]_{}$~ Z_    jKkm, 0>^d e p v y w  pOZ [:&;=KJO`eahnn56 DEZ`;?~ = ' 0 C E Q S ^ } ~  # #)#*#h'u''''')))))),,,,p-....0.O.R.000000000=0 00[ s~ twΨϨ.2/_0ͩީߩ\_ުߪ>SQ?0RTachjk   ;=?[]_`e "#'569=3 ($F428Vd0l<`DL,@hJHpT|x{( 2G :4 ? $0D8,@<pHXNTL\VhtxAdVpl`|@Et(HE'hD2>6$.B  :*O\V`JhdvlEIXOz~Z*rr B$ :EHZ\P^\R$lErw{~az*78HIwz~349<?@BGOPqsw{|}041_a/`+kwy '07@EPW`gp} !!!!/!9!^`|~ uq     p   O y ?48mn@ajt|D R z |   !!!!! !!!!!!#!%!)!.!:! ;!@!A!D!J!M!O!!;!!!# #(#+#&$@$J$$$%g''''''))))))s+v++++,,P.Q.....////000 0 6070>0?00011111122*2G2P2`2a222223MMƤ !(+69wy[jk)Obdefi >@\^3@x #AJ X_y        @ H } ~     X _ x      0 9 `~&QTRo6?PYPY0;PYPlPY$n$`jijPkYk[kaknn`x@IPYq-/= 7?y0wx ?w  L N O U W b c         > B G H K L Q p q u         > D G H K L V W b c  <    )  > D F H J L U V b c         > D F H J L W b c      145:Mdqr+68;<>VY^`bdgmqt 23RSrs w!+08U^at5C$6$$--t{ #'èŨ:&*GR)D*6CL M{.|}-vz      $ ' 8E.'2EF,47>>DGHKLWb c56ACE0>@k*,80578;<@B 59;>Q[/68>16:<=?@ACGOoQoRoooooob#!#$&*G01IPipN:k;([`Rc5).^x5I+>5k]^x3k1''o}806).T)S)S).+BT5JQTp#S++7SS   S51;S*S5);}SSSr  ^E59{ 3>M5NZ^S2SPS>a(S(k#S"S37?oo&)fjzV`xTV  9;>@DFJKPRq=+0;@HPQ`es GPY`xzS`mptxz !oK_pf01J#%')-Y[ : < > O Q W b c         < > ? B G H K M Q p q u          < > ? D G H K M U W b c  <    )  > D F H J M U V b c          ; < > D F H J M W b c       145:GN59>?q+e,>VY^`bdgmqt ]_24RSrs .   w!+0;U^`|14Dks$7 ,,--a--*0/000ort} #$',T3Ũ&''-GS)D*6CL M{.|}* /oK_pf01J#%')-Y[ : < A H M Q R W b c  ;     < A B G H K L M Q p q u         < ;? A B D M U V b c   > @ F H J M U V b c  ;     ; < A D M b c    1[4:GN59q~-g.0279:=>XY^`qt]^_24RSrs .   w!"'(29:;V;X^`bels|1467:<Bks,367   ,,--a--*0-000otu} %&,ĨŨ&''-GQ)D*.1256CL |4+ 1O /vz      8 : ?   $ >% ' FP8F'4EFs ,7>;<>DGHKMWb cfglpt5F^R0@+,:0578;>@BC 39;>GQ R[/68?16:<=?@EGCjj0k6kOoQoRoooooo oLefimr{BD6;lu!#$&*06DJvz      8 : ?   $ >% ' FP879F'+-4s 5/`01467>;<@f&glpt8?BDF^3:=?@kf"%'+/79:;<>C! 38;>GQ RVY[068=?S16:<=?@EGI\jKjj0k6kOoo@oooLghi{BD6;lu!#$&*06DJW)WWWWWWWWW1WWWWWWWWWWWWWWWW2W;!WWWWWWWW;F+WKOP!WWWTWW!WWWkW!WWrWWWW!WWWWxWWWW}3WWWWWWWWWWWWWWWWWW)WWWWWWWWWWWW;WW:WW>WW WgWDWXWgW^W~:W^W^WW>WWWWq;EW^W^W W^W>W^W >WW>W>WWWW WWW>W>W>W@W::o)>W WQW!XW^W^W^W!WEW^W^W>WW>WW)9W>WWWW>W;: WW:FEW"%TPTP:': W ;WW^WW:)^W+2W^WW-W/13^W5 W7(>WWWW^WW>WgWGWQ!:>W>W^WWSW:W^W>W:WWW:^W=2?W:^W:AWGWCW^W)WgWW>WE^W^WGILwWWvWNWPWTEWVEW;>WWW>WWW^WWY:[#W< ?AJnoq /M@X`j 9 = P X a r                 ( * 0 2 3 5 6 8 9 Y \ ^ r s t               ( * 0 2 3 5 9 = \ ] _ ` a q            5    ( * 9 = X Y Z ` a        !      : = N T V _ a z       023@E@@AGIl*?PQUZ]aefnopurHJMPVXZ[]`Zlo  1@Q`lnp D!BDxPmpt T3EK#MOZw5!;6!8!0-g-------------------0<06A000000011/111111114MNФ *+n2h  "@s %0F`|(@BDK`oqvz~ª۪ܪ  &(.mp (*68<>@ACDFG=PptvfoqMP]37#-JPz'0coo6@U`g8<<?  9 ? ?        5 8 : ? H P X `       5 9 U X r x       H      ' 0 9 `'0YMRoGPv> DGHKMPPWW]cflptaDPY`l+0?;   8;FPYGPEPlp6:GPY`#$t$$C%0.4DFFh8j@jijnjojjjjjkEkPkwk}kk@nnoJoOoooooooopՌPRdgpjp|&)r{EV`x  FJ*,0=@INOKPY^_q=$';BBGTWdg+0;@HPQ`es GPY`S`mptxzݦ4@ J  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~AZaz ptvwz}/1VY`a Jnoq /M$ (@AX`j 9 = P X a q                 ( * 0 2 3 5 6 8 9 Y \ ^ r s t               ( * 0 2 3 5 9 = \ ] _ ` a q            5    ( * 9 = X Y Z ` a        !      : = N T V _ a z       023@F@@AGIl*?PQUZ]aefnopuHJMPVXZ[]`Zlo  1@Q`lnp xPmpt T^3EK#MOZ} EHMPWY_`}q   !! !!!!!!$!*!+!-!/!9!@ACDFG=Pptv!:AZf;z7@@!P]ܾ^d Ay"^d$˟ g_V^l7Vi,i ?P  `D(@-d5$RԽb@9W!@@D9 ( PU@0ͿzÃW'U ŤE%DT(_my}!d_O@@=T'# {8~Z@p @h p{`f@Q? @`H P@G@  PlP')Y3 @PDI]G@@9ĉ  ݠН@bLJF oݿ;l٭}/oҫ_Mo_;$p^=r`<D0zW1E@TQGPX ҹǾSoewߛo߼k{vw}/Ns翷V_mQP]cS5 UQeA"tiAQ  GIWLkb@BTOF1 [=BA0yrI-'W??ƠG~m[w<BqB@CW] @!#0P@{>]R @aZ1 B ҹ?Ϝ_{K@ٷosnUnvw}_F_Pu}Wlov_z}P{>_׹'㗝7S]}i 0$@ P$X MDB@@XA 0@m% y;%@ ~D\0U?JUU|1hW',`h8 $D՗pxxPAk9Rt0jKSݿr BTw@V5}DMNJP(0 $/` @+<IA῿ԣ@DfU 0=ń.P"Pn ED? 0(!#$:BP@8@v $   &(:<=?MP]-@BIPuP'0c6@U`g  578<?@U`v   9            5 ` |        5 @ U ` r    H  # '0 1E7&DGPrv + (*02359=P]a4GJ_a/D<H+   /?A  2:P\# .@r2s  0F`aeghjH P #$C%0.4DFFh8j@j^jjjk/kckwk}kkoJoPoppՌPRdgpjp|,Nr!"$')2479;BGIMNOQRTWYabdgjlrtwy|~ݦ4@ J  &(:<=?MP]-@BIPu'0c6@U`g  578<?@U`v   9            5 ` |        5 @ U ` r    H      # '0 1E7&DGPrv + (*02359=P]a4GJ_a/D<H+   /?A  2:P\# .@r2s  0F`aeghjH P #$C%0.4DFFh8j@j^jjjk/k@kCkckwk}kk@nnoJoPooCoooooppՌPRdgpjp|TV  9;>@DFJKPR46NPnp,7=NrCK!"$')2479;BGIMNOQRTWYabdgjlrtwy|~ݦ4@ J5WoWeWeWeW}eWeWeWeWeWW1WWeWeWeW (eWaWeWeWeWeWeWRWeWeWeWWeWeWMWo)eWeWWeWeWeWeWeWeWeWWe"eWeWeWeWkeWQW?Wgk/W5eWeWnWeWeWIWeWeeWeWeW!eWeWeW?WeWW!.WRWeWR eWeWWeWRWeWeWeWeWOWeWeWeWe)eWeWGeWeW bWeWWeW/WRW!8!+1!eW!WeW!eW?WeWeWWeWWeWeWeWe)!WeWeWWeWeWRWeWWeW>WeWeWWeW5eWeWeWSeWeWeWeWeWOWxW!!eW3WeW RWe)WeW!_WeWWeWRWeWeWeWWeWeWeWeWm)eWeWRWeWeWWeWeWeWnWeWeWW5WeW1WWuW5WIW5>eWeWeWeWeWeWxWkWI0IIII W^WWI{WcWeWeWeWeW5WWeWeWeW`WeWIWeWeWeWeIWeWeWWOWeWeWeWeWe)`WWWeW!RWeWeWeWeWeWW7WCeWWWWWk'eWH1eWeW eWeWWeWnW5WjWeWCeWeWnWRWnWeWeWeWeWW eWWrW W WsWeWeWvWeW;WeWeWeWxW5WxW`W`WR@WeWWeWWWWeW WWWWeWWeWeWeWS8eWWeWeW!eW~W{WeWeWeWeWeWeWo)eW!eWWeWeWeWeWnWeWe)WeWeWeWe)eW!WW0/eWeWNW2AWTWeWWeWeWWWeW!eWeIWeeWeWS8eW5W$eWe);eW!eWsWeWeWWeW+=SeW!>WW!!eWW`WS8WWeW(WxWeWeWWWeWeWeWWeWeWeW"WWeWeWSeW5WeWIWeWeWWeWWWeWeWWWI;eWeWWeWFeWWWeWeWeWRW0;eW/W!eWcWWW}+7gWWeWeWWWWeWeWeWeWWdWeWeW/W"eW#ZWRWeWOW!!KWWeWAWWS!WeWreWWeW+WeWWeWTeWeWeWRWWWeWeWeWK*WeWeWeWeWeWOWeWP!eWuWeWWeWeWeWeWeWeWeWe)eWWWWeW!/WeWRW`WeWeWe)eWeWeWeWeWeWeWeWeWeWW{WeWeWeWe)#eWeWeWeWeW8W[;/W1WeWWeWWeWSeWeWeWeWYeWeW1WeWWeWeW!eWeWWS]W5WeWeWWeWKWeWeWTeWeWKWeWeWbWWWKWKWWWW#S8+WWRW!!W#WeWWeWeWeWeWeWeWeWeWeWeWeWeWeWWe)eWeWeWWWeWeW#WeWeWeWWWeWRW!/WWeWeWWeWW:eWeeWeWeWkeWeW WeWeWeW&eWeWreWIWIW7WeWeWeWeWeWeW!!5o)WeWeWeW!RWeW5WeWeWW!WdWeWreWe)eW1WceWeWeWeWeWWeWeWeWS8WWeWWeWeWeWWeWeWdWW`W!eW!eWeWWeWeWWeWWWeWeWWeWWeWeWWeWeWWRWeWWeWRWeWeWW#S! eWeWxaWeWIeWaWeWeWeWeWeWWeWeW5WeWSWeWW/W1WWxWeWeWeWoWeWeWeWeW}eWe}5~e|eW,W/W0WWeWxWW5WIWeWeW`WeeWeWWWeWWeWeW1uWeWJW$eWAWeWzWeWWWiWeW!eWWWeWeWWeW1!5NWrWNW W:WeWWWW/WeWeWsW0 WW/WeWI!WWWWWeWeW/WW!eW{WIW3WWOWWWWLWzWe)eWeWreoWeWeWeWeWWeWeWWeWWeWWBW W WrWeWrWdWeWWeWeWeWWeWeW#eWeWeWeW'W7WW!aWeWeWmWaWeW`WWeWeW/WeWW W/W_KW`WeW!WeW5W!eWeWeWeWeWeWeWeWWeWeWOS!!eWW1W&WeW<eWeWeW#!!!o)eWm)eWeWeWW'W%W2W!WeWeW2WWeWaWeW)WeWWeWWeWeWeW+W+W.WeaW1!WCeWeWeW1WeW#2WeWeWWeWeW-WeWeWWSWeWWeW?0uW*WCeWeWeWeWeWeWeWFeWeWaWWW>WWeW6W`WWWWjW/WeW6WNWeWo)eWW/W!eWeWeWeWeWeWeWeWeW@WeWeWeWWeWeWeWeW!S8eWeWAWeW+eWaWeW+_+`}+Sd is!1WeWeW^eWeW!eWeWWuWeWeWRWeWeWeWRWeWeWeWeW;eWeWeWeWeWWeWeWeWAWeWWJeWeWeWSW WWMSyeW"WWeWaW+WAZ az yy/00911279HJwxxy~Oaa88  ~"3::+*;<==]>>(*?@?*?*ABCC=DDEEEGFOPP**QQ**RR**SS..TT22VW33YY66[[55\\OO``33aaKKcc11ee((ffDDhh//ii--jjDDkk))llAAoo--qq))rr++uu**}}))&&CC&&**&&''%%EETTpsvw{}t&%@?  ~P/ 0OP_`/1V0a```  З‰‰@@yy}}88A '(/078?@EHMQQSSUUWWYY[[]]__`ghopqJJruVVvwddxyz{pp|}~~   &!&!*!*!A+!+!2!2!N!N!`!o!p!!!!$$$$,.,00,^,`,a,b,b, c,c,d,d,e,e,f,f,g,l,m,m,n,n,o,o,p,p,r,s,u,v,~,,,,,,,,-%-'-'-----@m"/2oy|}}u~Z00ZZZZZZZZ§çħħŧŧZƧƧuǧʧSS``p0h0h!: AZ'((O(  @   @n_n `nn!""CS`i2Տ\ B噜asRU^RxZGv\cҾ("J382t/)?;)?Z;S$YJeefXI- y]v>ᮺsy,,SoΊߙZiKy+ؑlHFq6N%#MDz 0rxjm5Q^3-O\5x,#Gf+1̯!P;LvU0 =*$Jߓk<ܭ 4mx݅KbSh@drk3o=qԇQhˌɩf%H;WK`0Kmtv-^85A>~;ΥuLR5]JBϓ CszΕ IBNww&Ԧ`fʴ"U 8G5U]_nUc^s 4!b/6#u{+ջCn6%!3G-;eUk niԜ %Cpv,n% DH(W^j8dW*͖7Ƽ>'u.h3DJkq!jz~X1[Dd)غ`YLhr3)$oE=VyԶӥk0bЏlwHijޔ3<)). %I qM^o(TPa,J2q\":1n1'H cmƚp̻, }x=M֥`%NFN *!&8#Xl᮴ fo(,nGMȟPEyۤ̂(}eC2f;^j@>Ծ@J6VcؑDwZhN"uO>6qZS >D[Z U1(\Q† yX葀r9Mnbf-!= -@s]Ι 4f|hNr#j9 bf'NDGCɨbK"=`?woɦq!M8U"|Hj`FS*~+TmBDt.OSU9zc%C1'~U5yX=X4/UKc5u|&o<%y^Fˋ#w" _uv{fg6]I@'᷂YyX7 1 ?gjgν$m\,B`A֋nsXmSx@I̮jPu9Hh[BRm-^zy;Ӧ{xd J2_`U\&;\HH/oJ&$ڔ;W`X=vWζ]y+zCB,Z[lS*xP1r'0(d$5VN1J<왾6w6^F?nY{U(ω/3&t~W!v]?OH8oꖐSkuzcZ (YImM\ٻ-qd`3ϪMy4,9UgAwGDrĆ`I,"u(19b7]k62c}:%˅tח1]dqӨMS{$crf-bgmYGB`=ހtRx Sal'.gVfQp[yͶSۣ2Fqk(󗿗φͲ"a}ȁ_ Wkyl]=;t60c1ÜD۾`wD-HU;մJM-u-]cxZbҶxF\4|q* 4M=5]z Y`tWFK?p8+׬XҘ'Fc{#TwBձL;,)UdJ_ wsj=r{~T>*bC#Oa鍲5*g8Ԕd1Ӎ@~8<vJ)?@'D|Y+(0TX0tx>ݔ<6Rj20:'Dܡ?^:)巧`Htޥ!d4[IV֑f4 ʕ%ΟkB@OQ]=;i‡FQ* k)XrGVieg!Ysۓ,S>ih0PҸ:BAsUrsONdP#9JFE߃b}$lۃ2kr]ΖKde2?/nO|{S ȢUra6__,tuE7#8H,RA,ZQ;"sMH=`>_ Xf&1ѷ?RpIFwϻ3ӛa՟k.dȂS|nǰsƣz={ch iN\ ->!Qab OInHiãۉZ&ޓuZF)v:k\m#X񗳻e 3R,.X}jtYg+WN¨@8H۔labMPF wfנ.t `2$^V$ il`#c?ʏū|0ks]|d|Fk:Bzk ,SҘl.J{qDw`zdrIdGJ|l_bϛ= -]:NJy4yxӺ9QX*r`K6(eNC2)b"=s>'=z_R?Z}5)f&ϰʨ&4*cݓR04`Cx g|A8?, LKK6)e^y 1cJFM}e5CENKP.?q/^9ϛdLZN'sv]pÂz}oj:U&N6U (&.tE+۲Ꝓɋ ;oOFkȒD7@n ˻zj B̽ܝY-#JFTW"GdeT-V+~xY~)p$wZU|Hihaέ["RDù?BrAggɟܥ k`ŗ T`鸶h;#)8>G#g$!e r v6i>[ΛpD0 ’sHo^+Ʊ;Hw 68(J촰c%2R l (8Z~HW_S#YQZ-7yHelE1D"'Xd˞k?/"=~Fr6-j[wŸG꺔R̆$bGט#?9': dҬ$0hS>-_Uj[n*uRDZZE dug.k`MFU=Ķ{s휆&|VsJyݭ'vcR] X`UY~S|n𸪯qޝhp b!q&" ŗ{`=Ui jP|};+*\B`w[zY78U@gf/Flk7._=;K##⼺;1a ^wl}9!J5U"ST.wAP~uu\T Ғsi$$dDKN^wÿ-> ;ZJbڗ<섎ꊭaнK'Jg9EpCK,΁My%1^_B0CXn >;5Snʋ }4Ud^wH~t*J6ڝXv%"݃:QӮB5yrjR;uD<u'm8c$S,^{tPd2l1+a}JϟCb.2:]‡ I62wyh.L[Mľ K7٬:|S\ 5$oe(KB.E.D?ˈPo ̼H9i$ MZDs00 h16A_p=|6+ aw̫Liv2=BzՔI?il7Sr3܀#GGŧN@a+eX&1Zd;Onp= ףp= ףp= ף@P$ (k@C*焑 1_.@v:k #NJbxz&n2xW ?h@aQYȥo: '@ x9?P 6NgM"E@|o p+ŝ(lL672V߄@<\l: K{ΗԆ H½D PvU1P?]%OʡZ7и@=J'ƫ͜mCư#o\{2~,݋] 7 n0b/54"&EE=!A+p֕C)@_v $_E^D+S69uq`D]ȩdL1FUJ:Ack݈-~<MXdQpl԰k2#FۄEk0ScgedF|~`?~On_O83^Iwm,ӿ\U /ssc*Og(~MTၲQ5F&B|Z"e B‹Xixu3_FiYW皮dR7/-#]gk}{x F6@2cPME;P fδzBΨ?]76l3oߌGA]DG #٨tY l*/h7ȇCØE)wyTzm)^Tj fX_4'R⌏.]^EsCupv]dB!ܨSyJIj~IrhcۇiEB<]ҩE֒PֲE# ś[[hwl26h& C2d#DѸIDvja5 bl _ӨŹzÇ67h͉,TIIdZk"!"lk*Ǭ唔o=]S59#wˌ:BnSv*xriJh %i]_fX~ь[eaz?w/8y/UJX8σS*g].a{tZݲ\*q߈=9tau]V7zGѹ: Ub" `M1k{W+ ~Z픝_vIsX}Aȏ%زnYzdұَ_o_FTX H{%;#jVJ ,ڔQ+(B]D"ySJt:5(+EWA\Bu-/ں5ai .|]|i~C%94›^g.²xº}DKa2si*bd2u{}(>DRs\x5˲dj:aEz®kE='WT[rKxT6c? <ݧjW<Ϗ(QDme %JdCYxķ ]=apeFU Yy "WB$ ˇu/Sm ξTSܷmh.$*(弇Di}nVyu܁7UD`ג{S⻅jU'9pxtmbCF'z8TfAX1{jiQ.DA"&v'ZҪ/ iyhx{RMh, XǂVpEa75 . @v`|BǼ5Гj]CMĸR5VJpz3zrS!{Z\L.YOt֨Ysyob dp+EV݊>ԅ6+>m.7J7̶șŇ" @Ա K ж%YJ^MdD.:0ܵ\$~sީqG_,>%t]V w(N/ukPopk/t#[DzT%k$M,4xߎT¶@)s$ Уrt-ČV<ڒez|/~qeݍ~e>"t*U1Vx_':5k\(37h*VFs-Ciu+-,Ws)b);gj{IB_s!6p$wqBv/?ӌ# S@J286c]ɞ>CH|Y{ ځo&|(1ca/r}c%2t.5_(o?0:ͳ[cрyϧz^KDb2üfQ6^U+Gٍ@4õjQOP4c3Vnع^G/ O 5X'a'bbLBx8}Vc G,ݬ@!tlXxP]C 7 RzRT%`ϖi *.G|$ PATW3L~tґR?GQ.G#wX嘡cHv WD^/gQe,s?5;X^~OK ނ'aB.cy9'zխ"xR7t8DZJٵ "Ho·"MPu8벚ƣJy©Qa_A33Ӽ(ׁl"M"sǥ 4k"hk9@fu)/ ZI`So:K[8h#`^ʵמrFB,8,Fj¢l㴒$s ǓbwRŧmO˸8ۢ:g(3tsɥDm@e?S.R_PD;ϕ&wd C4>04x^M Ɩr =A}_Lb%xW[wߺnYb47>'6r  ;~"6汧 O:!UWʏbO∩*r;듧EuϬ3f0rIl|j; hۘs*hیC?C:ԑy!YkO jHI6.iyF㌄ 9NDN @iꅕ!o!]eqKguDid>Z@OU[D[[#[ZZZ@ZZZZZZZ@Z[ZZZ@ZZ@ZZ@ZZ[[ZZ@ZZ"[ZZ@Z@ZZZ[[@ZZ@[ [ZZ@ZZZZ@Z[ZZ@ZZZZ@ZZZZ@ZZZ@Z[Z[@[[[ZZ@ZZZ[Z@ZZZ@ZZZZ@ZZZZZZZZZ@ZZZZ@[Z@ZZZ@ZZ@ZZZZZZ@[@[[@[[[[@[@[[[[[[ [[@[ [[[[[@[[@[[[[[[[@[[[[[[[@[[@[[[[@[[[[[ [[@[@ [[[ [@ [ [ [ [ [[![ [[@[[@ [ [@![ [@ [![[ [ [ [@ [ [!["[@"[[ [ [@ [ [[@[[[[@[[[[@[[@[[@[[[[@[[[[[[@[@[["[[#[@#[#[@[[[[[@[[[[ԠNOfQ6^QtYQtYQtYN@NN:NO18PQ@ZQ`ZQpZQQPZM(7^Q0Z`=M`[[MZ[M6^M6^M 7^QtYQtYQtY$sY sYtY @sYtY !sY@&[([)[-[..ZxYY33xY N u$[Y YYY@Y__ZNZ0[==Y Z??YXXAOAO`;O<Zm]C sGѦ-2Q rksY$pj'=?&w7+p{c[a J;gYyXQWi LF%y/\Yi6Tzf񪚆 -),Nu6x xT6ΝJx L NZ62$2 9 ЊZ-TQk-$/0Xa҆K''c &N*-RZ>exUYޖXRjY޶taYe+z#eYcco 7YZV0Hسg)068a gV0 8a]$0@w]0L$0R颧a [ˇlYyvU2bYe9v>~Íf)g ,Y ߂aoFֱUWLa"YH?05,bx7AdqS<Bd1ۙ@_.|>+Ϯ U^Hް$d:KwvMg}le:[,Ч36a^O"s1lc ocXú7?פ LyR $סwݷjwt#] Owk?Wtv~= ]2H" <5u'2MYk有 TfPAr3 S2?f2zJtw}qlx2]k vMg 7N#X M0 F=A37_ hWE lNԚ܍Lah-ƥ %M흱/|54rΜisΞ3ԊSTM3b4es*^Z1gbuŜm|aYucS[CKSJj7.4v~s{ 'U%l96Zckjnn̥1[X8b`.K) }AvЏ0m1H?\C?gx J-)k=a-ѹa;N%Fa׉cT6GrG*D^d>¾I 0f2^$v1hZO/ƼjVVDOuAu~; YdV5}oB@$z 2dogAzn2b|1n Yn3 s2ў{i ״u}10g˄ots+%"8p\MfяYDA,-$d8r;s*Pk}fXobyü 䙎y   "rj24'K༄!q̯C''z~jtEo짟 9sr> c0ia 1}IK&sOnkhm׷O^/ih5>+Ǵ`iۿSuabr cDɝ:۪:N,6okl[~^mKL^5TqRJOwZKlIȆxc K?kZ3YkfirsbɒHkW^11yAeUַ}πƦ6-AaY<&7.o(~;9՝hjhlZH?.H,7=XX˂姤K47,/ZVkYm] Kײ4.i75v٧fjgtvyJ??l&$ϲO*1]WfE,kyKc[CG|%[ֵ)3ü)Lkj0]{/GZVKC}|AKb 0eշ m]k,kaXOl`۲Yd*ӌ~,ן#->XV}[b~Ҳ4,:<[79#S_1Cqy:NdDO9t=.bmrb!Q|'dy_% s 8{q|㸸·jw[8M LVz5On:Eu.+^gi|N]418Ĝ'';#D_bշv%IT.s]uPMz/z%loɮKmpr%la)|B99iD28+*deya pOv3B٩N" :$}.b>/urp~AZ*֪.Ơ )=Z!K%XYeV*pEkvJb\h5鶞A,![i=K-V%HdW"8kNQH̞ !Y̴bt-|1ik&&p~&g&0(CW|.=~c \q.OaK7KKf7mePޓ*L˚1g~^a);uκҔƯgX{TA /bb|#cÙNvZa@Tu%\|U= Ck8#\\*tr:ܝϭםBWKMZ2=W\E(t2~RN%ޛ4)_Y :D"|,1vWdJ_%yjJ/89|l9bd'Ҝߡ\j2-,bXj0ߞDfխl̖xZԕ"ӝVkHMwri\1˜y''abL-Ra_8_-Y\Ek+Qș^c@~C`Hfx) E8M],k|+ qJ q Spyj\?Bkuf%3{?;/3Ġ[4o{/6ɬb Et=_) rrh1u(5R 銉'>$O?|%CvfYte԰OA0fnD*I-yt/hZ{˔t4&U[G{Rg>I%}q/ζs::u sqO$S#v'nsgEYܬM7F ;q[j k5WL}^M&0J= yAt/5-Y)+f"Z0lknZ>яb_5ɰ; qJ1kFg ^3Tk=U){$b` ww;~}٬Ɵ֩ oIӅ1` S5 kR6תd Og-_5t 'Iv '),AQZ#._7ZXˇCezJ䀡DdVb G,,a.{,CgkYpܘR${V=Ng=눣qfq7tlj-#hbgqqYt_2qxz ;eE!@AaMOR=Usl~/x*#zYD){ u{ R$RL;R xw1kz1>pqOƹW*a(6>h'eWw]%Xİ{*/6{&cYfnHB{yO1&ǰX؎Se<0_J٫N ɯ$DOmW17R]lj%M~䩰X]palj}S QԜ = !v2]Vs+{~H| ћ|nnj+gy!= n[]bu\Ya֞),iwJY?yslwU[ ݋O:WX!1v]@3nFHpqoa$YA6-;'ӼP38Uk#y,OTɄ1oLC16|`CWo${~x1RcoOSt9cv:e@/}"?(M"*S(`1 'zt~Ƞ/e[c63FTKkyi/ג_A9f||%^Nj7#x9޼ouSA| O`/Ϳ|cWHK?ѷ1V(&dn7_<[HX۩J6,[˟Z4&rx HwE3"9\xGM2J\+#^W"}3I}\-(i2~ג J߸v-n-£lK{v gxq2J2*!Dm5cgլANxjk1%t#3c{0?"!θ8#b9csGjŕ|ngd z= q56%mK*&UM5f(9>z*UnǍ<Pw8s{[qn'&=Qwnݭϫ.g2Ā3|zdW C"_1jH3BunI!eHa{N<9w 0 95ue `LuO*?=l۟+=2-.dc >ekzBju8%ke2h{I7"Ж2Hw km}"OMoO3oEC3x86sehŽ}HT3c_,^Xu}E[>;bEb0Cg*r-]B?J09.L,_o\51`9V 0* /g얩hڏ0e\Yy gq[XӸy&ͺyO[74zΫW?Z: uhr?zr`yĔ2mY p"!Zd1#El5a)hbDgT\5~[\)f Go! br,-Jn1fޒ"b5Vjk$ڣՌavj1إW!~i,Ƹ1NcܕYQ;qvAwiO@zWu5iyQS2b1A5a(ȤX̘}ȍw{^a۽X{ ޲wJqW~"զ3źf3%f3Zf&d̮Aj!7j=@=תW>NJFQm B(jⲰ௽%r㋝wa*vg4^|AKT ҽOܽXK7NNĈ8R FCHuaa,-!shaa#6]h;^O?BHe62#Op3zc$%]p3hwc$Fm'Pw"om'=([o-k}'uKܺ:E QP`;y[<4>eO=\Zohx}tH>挖̛IkI0_LʵΛރdC4~ј!Gzީ3>&HQc[aXv/˯`8]jo`屬u y0T/u0hfrETH2v >HQɰ㣋z5\ f\\ ]h;zut9>/6WYM}BLS#)W 7f[6rH71dPZc3zKۏ `tU&݁p|cx(gwx[9mmk?X8}5Ge7/i\O״<{/%Oտ|'ǜ?Ә" nomgYx2Qơ7=51̟1PAf1̍F~٬b<"5N slFL8\i$eǨ]%oږ'f-Fg1N/ԇH 6%Q>wv3AqK)tgEocnۦ/%X!h3iKÂ% -ǭ@[ں:N*-+b}FִP}uԘ: !T|6{[}i!U+sg_˿kMжƥ ijg\<סޮeu/i7!g+J;4^yz:=mI&#oEZ:2WfNMyؖW#Mү 80ː_ETZzi(Ty,YY0e"I1) j) 3y$BўQk [g>YBdhN_gf;ߝ)H&ij7#lMLoѱFy(BϱhlM{5l{KՍBg nBHªe\@X5# ỖW'EK4'+WC#ziHN AWJ?[it|zGq&3eF(n1@ܰ\CIKK5EVy5{5WmK7pQ1hɓ&1H{ ":p==I֝s;ᙜOSĞE06QM!lG@.W!*H]Dt>4нA<-[k7%El$Mb "lbzؒ )Y u~J+Pry}nRYĖayʤ}fF1%UMx͒Y %f@5׍ 6cٛd'L `,mb1&*ѕy<W2B]tuTJ5TNd[+` WP~CAc[ ˈD]&T3el'Z' 5Y 7T?]]}V}=3\,,z1+iִ-7IrfKG4d&g7kT:/"VP41ZłT oyKXSFʼn186 ]qў8pdيcY tX3)P,I6Jb/z>xk8D1OJFDBϖ@dӊ =f&T//6QdnղncW&ZO:Ƥ+ȸVŲd} !Lx_w.iE~,+4wj$<\h\ªgM%^e9)ξ/Ͼ0ݕn{Ed6*H{2-@8eƇ[rFTB^/tq3 oT[.YjD.&dmtNyW3K8\qjT!15.ļb|D 0v1Ljtr"VC%G,;A$ ~Atyy e6~VӏdTA&`H,vrg4  Se^GVw\$ zwBiڱXޅL,gW5dtP t4"s輸ʨ` ׸Wם$+:֪Wӆ_֊LkL}:K+"@>aT I6)qO`s "cUºygL'D9YWπEpxpDluPc2sNOP:0/gm1R/Q@wZØY/NF md1׹/gQA̙1A_+XO:3ΏWpD̨hEܵ"ؕ^P0p9a# !yin=TYmH){ĤƆJIYΘ$ '1">)X5"?t#ȉL=Mϫ#U\ Q*oP+w?~̟N_JQ,y1?DY[/v9X6Н/bO>-!ۜM*M:S9:bngúD}=rվW;A 8cO!#k\B4R0S,Ư KE:~%2_F TUxPnj QZF3j<$Q:1C }Ka?V]ӽMU%M,nRWvq PCyֈ\UDwIȠݺet92437$]_)xv'KpiN|sHyipIb3<\MV^*a _ߨj\Üa7͠~:Q(GTBt< B;ȏ7@qv|H'utUhNc"tDVcpl=/Vqp0%c偫C:hNWr ՙ?4 3y'X6sj5t͢`;/Nlf;L$6)X7(>y ݧH;PU.c S([=n\$_d8"-!3|f`r]2!kQPDFۉTA Aa +|؟,aQ)bbl#\gvEI1fGߊTR$̷.-sgqO:[Ԫq8^O_!Հ!6bk=K?m|caꢪO U BVL|5b?S$|j +NL5%bE}|1-k WhՐ |qJ5dzY2uZI+~v[w +\Nx*_35k]bL gڰ3f〉C:N7S~00N7,e^j6U&BhWTLfܛ!$|~'U>N$,$*qK_2S x*b8mUeYv'sa,"F$⻩\v).O Q>:x,EKځ'BWoM@N8qOrwNTF<[ |ԾqKYqā:k1#g_V:4ێĦ6v;1ODKj.bQGgO2bE^r臁~_}XtD,IwЃnFxs^?23"Iv{9Bc4Z7фqW[SpAj`ȮU8D㻈&Ц~3ԋ8V' JI%}pa$AbO蜶'<+zezhJBUf>:7KW-ȹXn崴3L{oc'"10OP4O8J#60讙5rH  !-A_q-nx2g.193VF$]< v[eؒ*Q=JbIɌ2+1̢iX~QīRfQfGqOdup] mɮ{vʿc>,TA}|3 s&Iy|}, .(xO1Yr{nve\-SEk,Xf3qy6 ^8LcPL##{i6ݺXD stEd00-Q\:?/s%V %!!/bymPaJnjtDHI8(a5՛ XeY.Z A!}65G8T4%Qb>H9o>,-tҌhBAL#r/5YV9kog އ]$2-(4H_Π3 /5Owlpd3.ج(3/Fn6 HscRB+1q+8v{*ab|jQb0WՍLհm4L`HsZϠ'^ ^?FZnBE%yl] UI$jFE*ٲ mFѽNa6  TsO -92 M~-$pRQI Vs*Pe CdEN"UPMU(RzZ=cE'S;)Oq@C4R; y,—hOx}v:t3QP;zY^1j~Qev:v`73G["_ K3"gKUA>ݘṬ4R'3Wi x2,y/a ֩.^h~V2u#:y0rE G%W.k{Oy}5a!.]#]u$՟;Ze1k3y`K>H_|y꩸1Ʒ3}Iv\ڨiql1&Zlo?3m~MmºV:ԗwlc/ J1$T(c1`0r{?gPCr/ۇgPF3?b|_biH6x!]̓Ta+FJ p:i&V"VNk|RMR E~*3et+aqlsof{4 ZM{O.˨5ƿ-)QVi'M9d&rٲk ϔm2?)|Ѹ)i;崵ާT'a#?3Xh A`Ghá#lKwaDH6/4!{|{dna⚖~nO|õc˰5GbON1{%nn]=C:uԎyJbo? [lŀ5ηuUe}yan1gwO*tMLƠCI&)Mkb|W1lyHIv  BR؋ # ]xK}:cvIZ$'f?fjĺ@>]8_3W}~ g3y_?d&DWm"|F^RRᄩ _z?-<>XI.YZtn+怕)S">DZcΗ-15kb?^FUmF 3IV8jLRe[7,ޡjo6rkOGycz3Z t@O۲ qeէȣ=ϮbR/]V-~oʳw~.G{$ZE:RQWN*.puў ctǞnF)7heنO e؎9b3 h5Vs9O2q}7p;mh]I!} .=Mu 3ə;;3 gaܛO=V}T\ fYX(ۢ;"%aBx^SGq*Α6JeDҫ=U;cMj|ًV.pS<٦R^GLRoP0q!n2ڊ3+?zkG %:I8 >'_!hDWfm7mo&el!`Jw03Zeψ"-g M9:Պ㛩< &+QBUjp<}ށmRCM1xȊcٳjT'F@*j̉f[P`EsC&h²?XZ2=(!8Fut ;fG)$Fy, GUDݯPfC+^9wVFEAkZ|#[rz_*O`e "N^ LrU87J$g+)!U"&9_v7)CO+'̈x@gA)o­~lʼnkSb;kU"m;ȭmHF/BE^EG!u/4_ Q*0PTbDKp~[ e_ DNdbbfRiZ e*F84å勇2F^FnAw xR b>ؐ(4-Vbc.|r`iR;?*u *gcLe<+-X3{cNDl:Da.0~UuGR,Ub]*UǬĔbV+/w^LuGak!1D@jqvآRܑ*ēZ6r-qtA{-wY%%#;Xq/+]ֽC.~m{t_jgܟjo&˦12(CrwSvC+e"Ħ:6`IƔavOc#ʡĀ89NtDWo<L VŌʛ\rQ''w3q?NrqOx}9J'<J` 7Je;5ݺ HSiԤa1;3򮑻YDux5%6۪пnOm)UXq| \`xZB߅vY; woRߚf8I)PA>>Ic6 5= dƴ5VߋH*LjӫJOpDtִwD/gK7G";_g9$:ߑ8UR )Y2 N_z M-IF! zV*tݻ |5 TWI'0 C)!G>IgE/{6"փXJUaRfZR݇dVyyT⏢ [ˋR2/<(m9HA1vBN"r+f-!?soP\KיuZ̐o4ϩfM ljjQ2gB\5Y)VXK8}lsSkɳ ",IJFETZ'YZ15'ƇuTQӏxBcWQ4[odkx?ɤŬ0S&ff잟V,p}y _g`i}ۢZ7=x'}${Y!~AâxCAU9tO seίojʊzGS7^OFocY͉6zSd+ǰ]NtpIwK< - 3Dٯ] i|J:w|{2/Y}gaaK]ku^٪:m:/?XG!%tIJ=(T̀bSNw}՛ӽ7WQo-*gxZYLݠG՗?.*ԧ:hkR2ʮɟNPD}ĵ%_qrd5*:9h"0v1bt!ar. Xr @ N^kZLw3,W2D/[yMO|\`H|} ۓ(;Owi1.ADtsR*(Eޅ|bRiͻ\6q[ !t1 6AWIWnc- 'Fb3B4YQ EoX~.lsfd %[$(Q4 qEU*ʴPfjDO m rL`mzsDU)KsrUײ,`0_]!uyŎ;:afcFTrlZZҋ~)Hg[K8tǼ][: Wi˾jyc6!!qΨb D_׆ݔ:6^"8?qּzѪ$Z k'2DTcH=fbSc#Wcּ As_他Ȇ-;K߶gyĕ8O98|}L啩8?Û&Oҫ3.яIk"ϛN[8r7r%8{(.H?r#HxzyqIw(௖ Y-&q+=lR#pL{:7hGExWSRq4S)XgcccZWN+VkB|'rƩq`^𿨘>qjgG6JSCŰci aRT},J40Y 9{qpI޸Atlmנ :5\"a5Nx+:$fDv GsNׄ\aY[@q1!Hc/yǩذޛzmeoWӯ[]M,0#0`Ɔ2 &R;a5+4ߵßAW8YfVALv8^{^rhnmө<-6qA: F:J0_e#]- ,:ntl\T^y| 6c7.Zeq𖶇H'_[YTƦsaeďJck)e=.3sAk;1|~A7}izAmy IȰUV8xad7egőɰ$6_ZC>|Dz0 w=]e\=ˀq5G{~HxtfzniUs3<|aw?.(vw Tqp;9ơʴpv# |Eu _Mxn dk눁HxV9x5:qX5Lsl:x>ˁ6njc3ZKs٘'yŒyʛ?HUo+:J2#h W נ0 >91CH#DX@WvOv}q3 xO K)|˕)W61rtM+qv,Gp_;J<=2~;6] "DuoGryFN(N߅qbVLތYz0RǐccSظK+V>}"jRvuÊ`CwqK̔b]ӋR54,t;#C*i*==Xi۲S,gqaf m:%}4S`S㢂mӕQ&38h,1Q䂕X\"݀e%Z&LGCT׺k*|Crk1R-]J^znj:3{ gGκo.QGR4{„K M?V=}ZqhGFQZ%xЊޖ+}*kZ!k"vUZ:m,sn(UDJ#Ҽ[#j;>|SͿ L0n"#{ɯZ#{%D#vj{&=msaO9juhc9GԝQWҬ c;?@\ͱkA5HzGnB3 #io^!ᚬR{;~IRLY螮q~8<.;R82 տuW d6QZnMF2;;r^t&>yO4me;p__gT-wnGr1FQiQ &G@i 3fw͓Ɔ6CK[fFg`Fw7_ѕJ{G F[yQ3fx^v׽1 ^PЮ's^_x+%7$Oyeߓ q^fct|hf eua}" :8ӈ.6jSk2{j=z{UU>-VRʺXJ.JDܟSFVthFtz(VT7QUCh !t*n(|{DzUf@2]>ʖѭ\&njguTσ-ĩRw[% KC{0;CkIkU֌h gopw~ Cqŕ9// sq[Fo䚡y뵻_X"+3Cn~!Ix{ gBr})چ(Y֧vZOpYo%ĸ;g O8 GU*-@*oìVy*~L[ɭplBDg7b:5zF;]C]ĊV7(ha%=K~/sl?yϜ!~9aiB"`i֐v\b`lg&og/H;V6+]]c]WpˣKyCtAM<3?e ^oT[3oᝎ[LZ5UǖG5 q`T7G3syo3'QN4 esY3&Q~Wk"C{9XbٷbmtSܣ螬ҟ6]~~BdY(n&th|)G͘r+L2_ɶuڒe3Ⓜ "L(<\ߡvQŬurƥ_ +ǧt:bܦ`5`WzӵyV1&ebâ yAFq?;[Io0dWI̹/R ?.G}|1EyI'D8Sl. prqr刧]*rgs5-K"j//ZxvCTneSԀ3V4z]Jd <4SK fgpi \"5 x*,潧l= ::@UC@l3@x-!ޫ$Oܕ/Ʒ]~/gI{HG[: K\r]ߧ;CN.~|`}-/&yžetul44ς&F0S2qf`#xWS0 cU`5W8p5WXnlQȀɧ*}Msv70g!kA|+y|[-|QϱVɓiۣ=zUB&L.U2Wu,ӽ-2LKJ#wXdBFR-ζUn{hWoh'KkW+{XJ)ye+0e_`)FX:.q;_y<<1eW'Y2"y'wr}v'Ipr%츏²r⊌ K4DŽ&KXNU{h/r$tL&#]a|wQ+5N.Kh#!+bq(Εv@X?, o|I~Ћyњ͍?G&yA{M2N)"]c#3Ƨkca =1>1F7Z×;ӳoCpY·M/4.1ӒyNxw%|<.[O:}+ͬR{?1Kޘnt]vL/hLDg43V9uX =ZʃM)s*{,s\@N*|[9popWN g`?In\?kps\-G{avcJ9w8$Cyq^!Ux8Yȧk!'obyأw}GYs%_Df7f!7Mf<9U :wO>?iLtrǥyTMvOgI{"97H4# 4e^kBx4c~ģS;giG4/%tZh@PF=DeTY_%UܖvlFD=gGxE(n/]Z$;8qQ;X/5Xܥ9bjf U9|+zd%V;9Exg˝J 2HSgz I 9ɑ%A{r*gzʝz'0uSa?;x{c1i8On/2pEr@QwXԬLplО쭩՜SbGx2'5G8xpx4'W 4Nh_n^fieeVRfڛ!n-Ԩ.a wfiDv!iv({/7fI'q2-,mve!J'nzsd_0'+eX=Z+#yYUf-WOwkTw;Xx}m {\fony>.ԍ.~(nE~8|6SNnXM tn3ك iw~/ѿDj kL5nBB޹e־=(vE\qN.*p\S?<dJzy~TM%Oy,bf$#9~V+/ςs4)!=Fel1.!:mj<ܺ*$U~cN?Jm0~4˗8!Og#V JQQs sK27EbD-!Dz6|r_91s1QOcXIK]$D*\~^{..YWHQ&FzT] hf;% o}8$ MR+qEykv:}W-f=]5MjEiћ}f }ev&`UiV޷9rԙ47Gljx/m"|;2UyqsEB?WjSkCy+1{^ ?0L N]hz2o_+&Oa铎ftU^N.J|1RVq=۸>~{z(up=\^1"(?ڱ1Kx)񘖨E{!]ta\ ,M݈u@#"]9pYsYe]Q?5燲>m{"{Te! rU]odRZW]|fcLBf7#ۅ,r)?}Zmfy(U 'V菌?jϱc $}%ʠV]&}4[Y #g?,A.jL*BIٝfvH ٺ|[5gwף# Oו^V{+soJ%4L:BI{x?j[C7=~81bi- Wj95ՎͣZқ&X3g_l볓|e˯<`tV5"OHPkȵ|Q"7=E\nw:U֞ug(H7& xKS4a!oߢ4/+T3Ona$?Fu Y&iךFw2ٞHY²疱;G7~٣4 Cv=¯A=kBRNqQѰY7}ߙ[j(r$~>8XE [ fp &2 Ϡi4\ړE f>EW ~|?ٖ~.ǣ֦lGҨRoX%Y9žLd2+)'B*dTI\]]xt W pZs syc~,uWgm!: `~>|o+n6++esP&&8zy  +ϙ`YbEȟA8?vK|h־TRGrNXQN.1zKtwj9:Ucwg͹e+r9pY׽%[P4M"/{۠ L;UxD~P8ʬp~]kZ~qxFeVp=<5yգN.6"Rq.b}Yyݖ׊p#X4~1gVskZUfҏZRDUN9NrG|̤[z©0c#̭*ᆰV +O KC$,#FF܀*崩Gպ\hQn[a|:™1a*N}ah04#ݭFҌTE3Jn%?˚vn>]sf5l%ʸ"3U3 :U:60*tݫ:tyYܸ͘jh)[5Η7aXՂ NWYvnC+4opҦ2E\7F:'d?akwJ3-ㆼ1&v>|kDmB͔SZ#yߪ^t;~g3DF?j.a#:߿s@ѭtGs}=~gmV1Pd}1X^ű$^Bk?uWZΐ9Q"݇y:cI1XpFsQ̟.d u66Ab3>I}W*Y2P)4Hw k(UŻ]Wow.\jwh1~g=u&6:nL LK?FϷ 3g2ܒ*3r ט6|bd:tqg # xĚE T4Z9ܛz_ZI5qj@3% a\j`3?7x./0OU'm]'ac%-V(S:3t_3>uwbN_"M<}RF<]XݓTpy[W NuD%9.9a:ם?lܖ1 ' o aKw$fJ s7`R|,_^mje8W=;H}M9#ʱifF@\]5Gy|. 3g* M\W")VSDk!7mOFNk\c!+T/NbLBcq\#CSdt q |1Kov>5FrQJ)D=hy`?T6#>|]h [(Ǡ3`~ѢWtK&4!aI.5,/a ՟|X6!Q"u1LR1ӂH)_IŔ &P\OA4#5IY*6m3.D3s0VS&x]5νLL6\*i'a[|+U']&R<ʘq-DXԵ.KOAt6񃯟-*,)x'3k#9Q@[?FeӗՌQLg#c@+7C^o;k\%W1h Gj6<03Jnf˲W3i>{'t q%f I·Lv$fINjeAk!MNibGjVݯm=9ISfgZ oTx5dkm GeDN-E:S&vW"ڻxP\% _'Ƹmhl3AC?NQl ɾqG68 Jۂ̼.[Byl"%mm{h?ϕ><ӛȴfmmךkm)ug\|!_7勇#|`JIZ;;I?& R%tOkV+$V4")?m!klS{MQly.׿4FևoE:ϠIZLXҋK~OyIӯNXqk}tYS7M>L+o&^0ևl}lֿWσVr4;ȧx;[L ¥ 7w iZɶvЕrr|E>#pО˹ ҄k2uk̊]W`LeWl;20.1J?+ڣa,T2 >50lw-G6or3>ZLBYfE>O?'-aΐ&&}d8&tlʋSP_N}maAZ0=t&j>Ώ l8H}ҧ0_8S g1O5l1ҀftU wK`Ur3$Tz9~x8cbcA'.h uqw-Z&v q\o<λ OL>kӧn8W#u&2\x۰kIv$b7&*IK .vyr,NyyOthtT,r Wb)!t\jߣ;(hUNxH՞}y{ig>UqR>﷋ZVOo?WCzuo#YPPJƒy@~|}tqz/v2pzA6$/ӛFn6c+*zMF&?sWd0v*XM1oxwmZiu)x%;-}]ut1])s)}T]Y Z)%|ɊTO҈e+&Aǘ}2F>%[`G٫KDhog:e} Ѳ-ܒwm]IǀvY{w?,1j_ߤbC%rwEk 1sI\ZHe-h\kojT9=dzO ^= 5c-oYZklIcSeeQ _c Db͉V|՝hjhlZ`f` >Z///?%]aA2=gi`Tk])1DY|J?yĐwf_5ͷ-m Ɩl<]Ңe3#Okj0]^'}OɂA`,mhB|5uee.$%*mzՈZL5ue6Է_j<OfEcn juz,Y,)3RW(r]ea;,d̽2=p5Ee Ew0 ?c?d3>̰jC4#:W~fهevYy_ֈ,s:-;t's֦y)67@l/guYt:O%!Y CgUcAGt~5$fW6$xZҝN1xq79NcOΨ+ȑTz`L=hΨYe;{ӝI^fbZ]kFMӽ|ALyz?l2G=~(%7H%^x4ϘI7V@SjY7Q锃M2cYhy ! 9k~e!9Rd4]QňLaubo% Ẁ_JͯUFo^HvFz_#]}כ2QuE Y-8ma+M ]bVED1)238\^MrU>:۞(0d.߮ep= fv!HkRnE< O䪣{7M uB&!cVH9 d|=Ğ:"^N9w'r"ȓ|B2㉥r/O< UT,Ơ$nsJ:0"O'Bӡd(?.!?[`Do#WRQAOI'!C&UNMhf]{68Y8{:JW/v !5]=&pW 1 ( ' og`Rg!5 Og ;ѡ&39\z&7{tz]:æggW^tqIXź 9Lvs}Q CgVz~ļ8Ma*<kR̩f|3Ro3I ޳7oFb`D 7Ec?%@([҇Iz[+wА0ƍݑ9MY,afP8fL}X9xn^OCWBDAʎvlIOB6Uͽ< EDܻ΁ǯq߫ҤrF]⇽w)KUj}^P_ۈ1/A+RpJtF#R03ǦY iM0|Lt̋j;FqHYĒ4/`%IJ(:B;p񹈹K-A.s<|$}'`[g=ہpЗzeJuӫ`ܚ4A^i`:Rsڔy oOW\ ųlT#wY- 0Uo^Ⱦ ~x:MLzgD[lEC]jqM*!lWkqWB%̩yA^e=*,- +UDXWBXWE.oH=KPfڧeŢlC߮٘trrpO~/اr;( i񋳭d,.~+g'MVKBąfb/>:L٦'7}^)D"pCs$.#ʱH`A\hUOE>};<%YH!~x]5v޾t{3'%/!zm.So3lAj"5Z}`m[EvHlpxxfZxsy9kw>kz?HEya}2@d1{ѕ4S6%dO]_nom{>sT$w4{?z>=`Y?Ӷª\޻/媘NyЕX!7j7( _,DJtj6Y\e[= ݅ k 1"*"@$c=pm2)eߕ_6Xz9*S7vKȐI,b+lrw(Ա.7)&4&tx,DU{)OeNJ\)l|bzS>O7Hoof_67`wk.t#/5_Z6pt|OWpM_}޴ʾuxn•7m;w5\])c}޷E̦Aɪ:~up5t*r'N+_#,+I"6r"kRp 0F5_e {JzQXX(oy,~Ǭr2u&/ƻ r-QEDNb=[]˰Kc ˱O,lo>vF4ᏽQlZIٖkFz\&5>cbE){r7Š&q\!Vb.ܯ%3?%+=MJh1?`#wRNk b#n{C ݻ*3 jl8(EUQkPa.[bbQX7T:ß{*wS(&}ٵ/Y볝ѫxʧPuRp\PGxʐ')?oL|\ APg ChMgLFIT-(uHV'-m"4HK.IT).Zt@WQQ}ܙqqqP'礌7{zg>ҜsF\080'? 9EN/|5va[}i]` k<߭UN@cb[(q>0G>̮³b5a.n|1NXFHs Ԟea+VF_aI.'wqLpZUkĺ!X#o9b1Τxk9hvk.`Q1KĿQ]UrsqF[>5εW=5ij][k5IJJgȮpeFe57+pTDYBY6[~&\cr'enMH SQQ)6u 0#n`\oƟw*a7CйQ,zM|z/'{kCD)y]_7Wbɿ/1"Կ7W:3&' @5XP':9}ƉȂ[ƼlMr_N뷏22OQ$ zQ0ILtr`ahe |j*E~PɅ~<:o-F3S7c.)3>{1rn~߳K|%Uku0yS1 Pcb"Fv,uL߳aNTL`mm 8qT+;|ʅ\AtSg`b9E.n$,&RIBnW`s*1.*1U d.1a\f,'~I5H\{W}:6Z +l5D'11r3]ʅ.r *9CO6Zg`Q%R5uoݟt@-E'w '#2rrSvgŸƉU(S|3k]}&Wv0wE9>d*z\:§%ʅ\E<4:Kpt>2_LQ 0l [oa쫭gXÉpU<3 zUmlA՟`Q!kJPļ?\.tn2%Z+-K pms:yRD]#}ZJpΥڶ9 '>\d>Ts}Ǯ0O3g.\\83'!iCX5͝5ʅhrLNʅ] 2,w$E/cu xOq45R{\}wA>6WT\6l(ES DcxUp}FPwh2끎90}t8 `(x(z5X/rFz.SgNqk-*Cqۮf]>\^t5hڬ8ݰ/ !~aHn\{xxU΍bf yDGMW~KG{'S?8%}J;}z-x_GM {(*˔rog&nP҇kiӴq<2qIk9>`37."v*la+J޼jG\}a{;7W喝h+2.BcK /G?)=ꛄS)Nb`g ϴVl7S{\MKT7RS &  !ZR/K%UIuտ )-pUqi4оJ yH?HB6w *_ZȜ. ,]|]f]|BʨMB |+jxpm-/E޾ZcyC#sūEaZ .aZxO Hh $ IP6rͺ?gZ*RH{ŀZza%,k8m:rZgW0[}.~LRpf^~L jy|*7QC^?SG? 3ي!Jc"Kf,[|n[=ey=#YGrHۊGRuNnlb?$&)<:vz#V;x'~(.wFLs>ZN' M>.A\&7g;qi^܈K>`a/d&?G%L&-! }L)p >plFO._ #L0= azb co֩lWd|e$B%ayk n0kflLָj`Gӯf d kGe|XٹTNWqEg9u5cB)l b#7M}-Spy"PS!1> `cᓎfK(X. }ԀkpAPCrH FGߍs2I40fPoZ|^ dKknq\{`;g%L`D?g x>;faҀO!7RӢAL4\0讕8>Is 9L}:dkT0Ȼc^WgUt{>R6WumEg}+—Inu/9|>mdŽV_c$x[$1<=G8jh=3H5H{%EPXfB*IxXwx sfx?1VT1KsEJJ 7O)ix?r.<۹ϸ W#Q|{f1 ],n to]?)!|ZtVvvo%hՠ@e.Mn=SN8)(ǵ kxi_G!v&U+!rI$xY{KoK&{=$xȝ#a[wڣM9J'3r#/t-]Pޞ0 Rܞf&ɚ~5[^J&a5Pp>4sa__`&~(E=}Z ٖzt8ĝ}b{crI^,p:c+3lNڑW|vLSѐ)SƔNaWߔ ƊX/xXiaqqiiiqao"KGՎ/]<:/"/֑evO!ŅU.ΆJ9oCJ5;ss457Q6T!SJN,.RZ\80߅wqUBg82\h.YN&VeFnaJB]h ߎ1Q~],a\f 3qcGpIl8ud^]k$z"y<~kǍ56FZ[YjlQʠXx…z׽ʭԿ9gb6p?k$Zqaa-PyQkݬܒ dmtvck M5M;M {X&>l't.kݘ՝hk7/n /4oi]4+;.E  -MwěZZҡWsȆZ-wLku+%dX0>/ t88hӚ4⊙shօ gDyӛu&U%maA$a>^d?; ` #{b)hg_0Oi̘ƮqY 011JwKl CǗ.g G`uZ~#]@ _.M_\FMggǑܕVV U|HX{1SeyzWWH:'кGvJLC|利41ύ# N F "^"8zΰbQ~_) Qɀe4Jx>[,,/Ù,9yd=o54IDڧ/8jQ,Nh^T֣bJ 9B !-࿧k.1󻹲Pf| ݭcrV,P]vGb! 6F#ĭZLVf ! aBbx"R vaؘK?tViL/˨43.c(`tna9722~ag dBL RV}¡IkO*d# qV΄0 MFv2j=8Ma 3<f5η[?`dXM͛jן]R_<~>@B2?ٍ?s89ϯ[xz"uC}csBd{- [[5%kk>4ܚ Rٗ-A~v">?>4ͮomJX<Ag3uiV]5~~甬.Y 4nɰN#=L%Cj1r6f׷'Z=o5kdG%Cuv^†YfK_ ˲,4kh2 O43k~M_0jSӾzfN h*>E߶ƅ[}Q`if[xg=f EFƟ9x/XDQʮє,0AmMyLDymo w„nɦ9$u^fNӺ<X%Lp̩ksa|k氯ͷּc~k%f.hvuGFSn:M?mQt3nA3(cl g-\d/z,prQ,?օM:O"S")?~A]=N ͳkv͍TeG}7{"Ls4NLt6Y9Q(?iH+؜hN,hl),ll"'kojnH[韧:jfCzcЅ/lW쯵Xغh2{?c|VbaV' [{i#V-M[fe9_:U.UkI֪}-{n]db_m-~(Z?NVz]nZs՝n̈́oZ,n<;Kxğd&sZ/j=4%ow=_Hs/_F`!rjg%uSCsHaCbfB%1N5503-D9l8&aOi#XCTv$Mc~g&2fko \oR @SF1iFhCE$!{Z;Oj3l:jgO޻6ϣɔDNE%6^@czsXj'}cҬlm3V0~u`V tRejgT&O*rH܅>RTbuR:fL0ɒ^wӕ΀\(ay/SpFIJ߾[&aCd_vG<4X{~?"^gߕ{<ˋ=wؑ"Ac?/ٛ&]c_{gߞ{˩obB Gew/.~gUjqu]R7_o?5Hnsfiw*O!XiuVk9˘\b.x[.z*y][J반3b$Ib!]lQ{t Ä5T=&H8Bxk*OtC:QR>%`$fB#]#1=(kbXo5s+EtpgDp|9g)Ak'#A]ZNWqVg!0=V5Sj 6g|aj,oZ9Ѓ}yq@yJ>vL+.Ձ8'S)Rg!Gc8ЃaCH`Y$*Pka!o.U2\-!n ,qߵl#p4]x5]"bĥ0cJY+NH{{'lY[1)1t$V89%LMFE$s]֋WGjd ,#^4&ޕ;qhd'mNMs'M2l=GA| L#S`P"U'ry/Nc҆w"P-ؖbЬEvEC8ȃԐ5?XV' nTR:Z NCΗt}t5sMw05WFߌ/oe^/~ZZ,CPiEVC*|Zt5&}B+ڤB Z~ kЕbog=*Aˑ֦EbjM Uq|\w]Z&\@:҃ܞaWUal_k8d`N}\ Qd-W5od%(it'|^MȴJ>Eh]]SdxP\ۥ[Lj$B|pJJ*Py[pa&_ZZx$Byqvfڜ 1VHv`D T1^w; 8"f9N⫾tpNd3i{*#nu6_LEPᬌOy#0G yQDg\QtDerđ,0W`h2%d,.&ak8N#,(<ŏQ*~,(W 7>wb}\h$DWhMlr tHy3x8Bu_Zy\>eԌOd7f+4A"uRmfk4m4n:kvEhZx#"]NfH6L̔,hoB!f)ͳL ųXo%6Q[;7TMhL Ght1Y&ϐ!L1]V>+c1%!)TnjagRԲzARʧCo&lF)ĿR⭚.I7 W1RX %+]KTv-yFD_3]r0ϰxKK'^|UTw/˻D]0(&Z]ga߱[ :+t==3|ʃ;3/1b<ȈGEIivU٢t9o'"K2J [0Gam$+ΔGeRⲞXM'}l$5d($7FԤ̎܏]"Nj! d?^.BU$99: =KtUAqI)3 ǗWf'pB  m9M'QM){3#)j SP($_#d&]~R% 5v}A,wv˻iX}Oo"*qH\2Ԅ~>o3VhrLm&IX4:j4  O?HLm>:^a $O_)ʿc)B%K `z'YW4! _VI=z wgٚӬi>avuu| ٞ+/n*J#tsC PHlg:Kiu-'0cċ1<ѱzTasc鏮! 8{OV~W25;rvs4e[)À!R 5kKXj8ɪde{S]*1AkT,Wč2ʃ3*BR:܉k3V!Xǫ2*\e܄7(MFraiv!Y!Qd#jV1y(H]!OZX\#}|OM&z1j߃Uf*ez[ Ľ#LcɄ|gu-fK8q)HU"bls0ЋL24|wW>dRIĘLuCÂVfsFkvx4k#.^hZf&]lzKĢIٱ[9Q U9FĽ[ZsTrМCLtlCb-Su_D&R5GKPey7-5sa4+Ts}/* +3iYǜrMs氋Tj S( hC cF}rN52̄$"񮇋3>/ y..$cq8P/5D  L\wu'>fme>%*Įpy5ۻKLh;W!݁ ,x -YlbDdE;^U*8Αg2^MYNs;GnOfr^1+OaׯhGxSCX03eZǗ0kZO>fٞrn6hFۚ@=ܦP.a٠_\nZca4Tw"!D}]nC 2ws!qhöo3JAuX6C<;X}^NA MD{1G̳7GʖXCNk'Y/׉wM5/0 #]sηNgW۶be2,ĸ J"̀tp$e !w[UVY-HZµHc%V+?DbB1i\?6i^@ES hI+o2)_ƙF tyEL`j{EUY:dڻYRtۋ|Ż% XB㩜 ayC0_%Rӓ_2]gjm4yv6~(p.I(d^^wCDHO ?k0)CZ?Q۸0`N.(D 5 8dLJ$ \bڣ9E5̙$hZAc Y{B>]1 *hĝEG@0wy2IG9U08Ucv9Yۇ!mFH.1FZKB 錚uoI3N2'*E\5tt!#_Hf#|5[ӗ)v8ͮMW ʣϩ*Q!i;j:v+y7wǭmcRbk~bgBuRL~$o;!;;kܔ#q`AN0S6~Y\I3W@_ILXBDŽ?UJf4Y+Ms5b5LS9D3aŏġ'v]440+Wc9x*)Ydo!og]Ywhc4 s&[=Lޮ kjY.IURu*9gY}x%[cĪRv~F=^VPոz,z~a!R~Z`l:I0Fe/6aH(hOLPǰ(( ӘcA >8ԊYؐI8,# R+ϻDmE[펣RZJ kGnv3~NYdPǏh52Q M@^4K[< 'B«AH|8|Ӊ.ڈ<ڜiN/A4 䫕8Zp9k6o58n?}̳l3-< ۅ2OP+uD/H]\*sM EʘVp`>Hv>jo;I) B- ү \EB5^bn$y#9kZmyp=|ƓC׍]&<8R-w 63L5MέTd+hIL^ЂB ;8܉f{YgW0{^e}7s*fBT, h(\]R"@Xb?Mr!b$N a]_2+$&JreU}31#@ ~$A֗; d9ɉ)1CbR}%,yL"9"SXzIt h`*S"8躗'*QZXMG5g[fӤ_9= ToyR&هAQ, <\aٯdt݄YD?l^{4U*X gh':-Dž6 j!\bb ?/QMTXx057{ #D0&Y]db/IU Cr1/Nj([Ź' LAb'i m@{ ]bZHիTCu\=ruFGkP\0'%[$a JEHaIG`6($yW\븐P[b8` .ԘcS$)RC񔣏۔NG̝d9d&o#1Mbp!]#뽂_?Fx ZBQRܰ^yJ ˔dQ{@IKo%*F?L'~7>Tu-5/$4EGEsx\au-%N][}q,UiPF0́;&5v%-F=%8*+*DRP$J}n%xZ%R0A0>Bs} :Xpn9ʘ۟!HP7U;2 P5i<3o'3h5 ů(#ԱL<헙/Jp*i*n\E^PXBX|(Q58!c:vo Lš®\r/c3vS_yL>dd#8@SI< ؐO%acGk+ z#s <=rOR;߭2CLǙI7yzy*ijƋl`JJbk2$HGG<.r79IDM=jj .3aOd 3_01Nk 9#G$Ioˋp盻YkQB'ľ"Srp-B``(! C`T qduLxiS1i5Nҝi4vq3 ŪQp>-x][k񌱙 (Fdl}yجqg@T>Z 4j,}pNNOϼra'ECzDwQjA<(TV?`ϝU3n%Y$Gp͗e}jm qT #gäp7ppH?' еF.B;/[%uh=, s3tKj l}P 3P-1ͩ/t?L68xާs©|/;5w+0 ۺ6^y eؕn$gy6em37Rg/ڏelCPˆKPܥ_&lW6-{f|*8Vr/ܸIM#}3!5`j8F>v_Ҽ~-W`Gy_@,T >+Anec36;>*-AܻM2o/*Ms@4r.#}NEuUd1HpD"> IW5/38 Kf\u5ye2 'ÕJ^ܡɕc )mTdֿ*TIԂ'] #gP} !\% %dO'bKqOˢɥW1ܗW[5UBaQt/H`aqsOPYSoJ>$4Ecu!2 sL($S88S}n̯aL ~-'(r&z 2E&ڤ{2_w0< hIp4UQaP$"JUQ*B&4N 1>q\ftFщz/pEp)9iN4f \X@7a$1^M tc -Fg6r_cbE&AeDifVuwPD3lƠFÉ.d-SxՊ(=`|v&RF"]KkyFbn0,&L ;1 dMjjAS^'{j,ΆBmy k4.L?(2衶NY]&C</1-l_$}[ʰ׃q{^@tݛ=]I^O;OevMULp"TnړyV;e$ K5pt !?%x /J'W%XUZ|@DӾy.} *UC9exK[=?(V3߷%HKо1/p[Gw/uo]|8,!*$C ]#qn;&w4KiɎIy K(鏢6TC~4?!QpCQŊTbC'g\H͚MýrĽd[aH|P0{$1 p`F1]Sб U'IWo8q8FKHP7vT1lm@[ۥũ%6q;qxQq8\7yk^ |0jkP N.rwGT/?PAdO?2jm{IE\3'kCf>ϐLEsݞlwUȣetQ狡M- (,H-B1ޢ7蓽AUtTi+QUe&75U}|ut^KT kUGxYgRo~/7}@nThr%Y>ufM&aKCp2p6(tҢ[P,AѓAqaY 3w,(.ra嗠8soPrJA@<-L b6Eґq ?yaƉoS$N:*AO;GkP1/#V#A%]y./b؟B~Az39&YtT FNM\"{I ؛ɥRA_kh}9DҝɄT9 S o+8U&kG?Gt6d0â~z̞+3U%+; Ȫ |(("|A7esbfMڪ(>YU"gɰthVKV 'W+Q'1 %[;*S}PUxzU oYp6LjgTVPǮ Ԛ׵8\%3T(1>3UF/ɂR6'ci *\\[YbUJ NZ*~¥CL5;K,T#;\J _'Hը*|Imy $KTd1rx.Y[( irRgcƏqųY {3S-⨿3z*42 #e#0"J^cQ-656x0$EWsL>%o*ݨ6>&.Z4/z$:u딊FIt^шE WTUQWBÙN|]p|BE=+NZb ?EfBg^|࿢3?=ϠcNVdًw|EYOY<4=Apиɓ){ MgoZT3^:3?Q5yQ.# ?4DS&nDj ˪m~J]g::L:u;Qdjt|?[3TTٸ/Mǣ΄ M܋ߝ&%!x`RqoRc-*>#m3;_{—&IX[0a Y!ؤ( \ɓCW.1)kb|W/S䑡%B6ޤ nV3pT L4 TbO[#G{R.-ſOcXueQ=Io 1GJF) 1 {S4!_(xy({) c =kBuj ~547  ¯(F5nRI-5(&yIE l﬙QkWRMMƬefu:%1,(RS7Iۧf~%sn5^=붙s~Yi3OюLi4jyF~1I urw;)MD^_٩a -(zA%e9b)(ӌOydWg L䠭ݽe?]!#-T3:Ruj&.΋ݎjctiY3we|j&sQ%qD)/$GǎD6e 8, \zݞ) SusPMW\#~&ʧPO2S0&=磍~l{#08 %dw5Y^n C#H̒y R{mYdɐIuF cD9ʨ ?޳8F1]-_ˎP]Ʊ^t"7 &=άBҠf0Nk$[m^ vò$9,KT :(0SC¯EZGtj4Qz'o/ įD6 ;n,|: %`29|aX֞Ų)b8o`<[l!OZWdT3iNt;+nҩYLBwE9H܊Q q}GB:O 7wY_ (>3ŻM4mݿ[?K3o3{rB↚s ~ɼoȼ}$$1tbxc5%_FqlhD͇' 1ha`T _eTy"Z9TkmYJo\`r/B~}qhc<&k&ՒUbwPDxh*~*y>7"Y2!}M%L\fJ{0S迈'Y"?ե݉"£ɊJZDXfDZhHC* 0bB9 [ !#3jqyJVHrVH\ K6S0ܠvs?i wG rʟ,reN&?XnXj+ЧV %,/5ax 0aTΛ8؏_+T0`\j|u'Qs}DU 3fss}rա{=&%9Q/yQV~3ja?. |гoXre;Ĝ58FFK1W i~HRrZDGYQJMK%*Ɖ2%Вp # &كRoUIZF)^=HphS <,5KP ϻ'|#aa;10b<ѻ%&ȚFk ;<k-d>ֵHCriQHR/~9_0X)K37 |w]{} )Z\!XU> Y}p8FQ4!R Z8[ۯڅvn蜦s#J8i/W' ׮  f<܄2 A()#?-!80)AT%k_Zoj ԟAS3pZ &R8_5ҡqx;.r/$2Lt[/w̶6Z ݾb:zTKdɄ8XhRP_ Z`D徊XHvJSBmzؐ,;,n/B M`ݕC[xugr;S. Q] t":Lk0_0ta1knOfq Muc:("zj4$ҍj"r It'QyM^`L'B@ |8ATV>vF*G\sCn9a֘=H;$BϕTnOkZ;XN\[9=JP?~DG#p-2R$= QP{]vv]!0k J1M xI1 e*[/&R\G/!"1[ޯ@0,)?vKk(D5$Fbs+Dd}duӡ({71'AōxcřSKDAQr.)r!?CKeԁ B/^.~…|9t,J&Kpa^!QANŋкTPK)g: PLeʨHPv|,8zHAZ'&vlcye#c_a&gʑMehy4ІR40 %( }p릈jBx#]+u\U^Ţ8\w "S)hhBtEc ]Cӟ -C{{,C^5wFzڇ:`Dyg#ia=QB;?m"\ڞ/] L#:C$Em><}ϕbCthd{ nsEU&8;G֏tQ^ҀxM>稖bY>|aq3Uۀγܖ Dž%MaRT(~ܖ3A/t%'_=/cruLNP %8N˥T_iGx0Q\A_D1)Rpˀpa +(A"k !o>RM/K,Þo|:/6/ \Eٱ,T(}u[ 1([Fi%a|xO{*б-#͂^";g.˔ f Wllr?J1H*odE%2OΒ$w<ia q }ZRuǀ"gjPlP$a5撶<;x1Èj:NW8Gbܠ-qA&ad;[y0c ^ a`X+{i$tL{}ѣL2Tj:𼣧3ZweO&ɉXKڟͤ{B"#C̨RF0j\3:U)*sV!:Z.*M5 (W3`5[#U6Fg~I󸭈:|pMcuL񃓔9~`]7P=@{ۍ>/y]WhpUPX`KuT{?Z Z $8)Z֜'y[UT?JiV"P $gRcT(a~'-ʋJ_LGĹ֞ǬA}B.꟡D{zYJ?YB*Q\)7c̀Ηʃs2%ɏh5|d]h5#e{8fJ}@gL35=MŒr Ǥa5/Lh ~Y\zd [cVqzHyP8B )ld%r0`R|X0(v r`# cM/eH`JG!:<ô09顲nEf;IO s<3v_ĸ{lĤ6J)|xq]&RG.joJ̣f>c#&SU&ŋO>"5Lx=\5yUȨ[+jbtϏt*VtWCbLt1rΣ;!^Tl9Rm,0rF7$, 琗R&a SdaP$r\pzB˜CHS78u1i^Lx yFxJl922@q<Ưql.:)h#%[/,GT͒ڠo^ϔ$o& #z\?%8:{!~~ZNHÒ*W ݘ*Pq_ߩ?=!gO7{?+jj9%d^cʋׇf 搄c24ne1]88[iS+N z1U7wBVAMS<+0y#v96SJnJvqJT4̪`0ylLoTqAZZbehE!}i4 196sA>)zX~Bb҄\6ֿ@'Y-/IPcGaZ-EWYk5ruQٳǫJ~8<\'FH+ Pv 3JBi,^pb%^o#=MilْoAbB]Fueb F^Hy.QYUof4ɇ41Л~ӿhr'zҗM?/OWY!,aVrp$X\W1_ ڔOk4JWH<vHaJ<|~,B1Ʉ'TWZ3VDv{V:iJ 'L%*d=b#**z+jXt9GجS&_*hs 4Oʹ@~RMJz&`km-|U"1]'DbqwPcT'p"Ajqcg1ՉuA5ůTQ[Bf8,!^;RypS\ߌꪴžU)a6Gm EA*_d&*J1 XObIXjo: /;_s Tb~ĈVٝ Kҍj,>uE0]NԌ1Ou.BB]4ϦKcѠx ]b9+"Ai~;_Nl׭dUc1(S4~7┍Q;ywKmAt=x̭72mW9SVYI:}+gE:*Չ-ZY~$qNz`eZ Y]V+*-d*Y:Ή^h,wю#[$;<ԱܧuDF`꣱Xboxuz++y6?VQp ]VoHУZ C; 49u& %:KV. [HLHcwTu$/ERVe|h6)^D%n<ԽQ WIiءQ# x/mnЃV*KĥbUS!Xܐ aHLBp] Zbgrr ps2O}l1y]o/1%Z>DCbByjI?U`|z|>ZbBEȋ|ͯ/ApS^)F_1SP%^1ïPNG+zb vdx ]ff陼MOMj:֯inJ>*8Z xwZG9R}8r{to=W+w庿貂jeeĕICd>s?Y3_Y] kv +Pkuloؤ!4wְ` & #ΏQXˁK]5w5ծ?Bxp#w/')%بiNg]=G4R%J1Fmye؏ć!<֡zLSI<ޑϖOQ>ȣϭ7MJaOe|4Eb'r$ qTcpxG0#8F/:Y<鎔0-m,!'b [ }IEYO KTBw'Ϥ[cy^d܂$F>'K ݹj,zqw.CP\u7 r?k rC Bآ68.Wv)18?#IլOX߇&ڧ+_h"$6U"xCӣڃ}gꥻ@*TFnR)j,^=۬̈́[<=BMjГUt. %6N&j'nHI@0]~Pޔs3I\x&Gm٥[9':P &1Y.CBq%,瑌G@RtIw465vx|{`T <ۚm z _ de~? ,RӱRCPH\5O//ݧ3,eOұxS6Fxֲ=*3C( ij:v@X#5:_S(K%ʃuS]-kfkF^mw7vJњ1S nÿ́}x;u hG&';ZvW}@<ܲ!,.xnm-+WJQEBUR $xv.֯cZ-`3!>=9_cڃ @r,8DEͣ}P ޘ A+ +-R;9' Veٗb*DYY+_Gb2tKϐC-G*TIpL!)9|T|xMkq-)&Q}Go Bc%jˠIS"nKmAZ^ A6`Cԯ<|[Y|_VZW\&\g7yVFeO0qLټ^'H% #aʵAM HK*deʃZۆGXIGT0H0GVj_9hP,4 ߜ񙅟gËS|dtF#|OU s^Y['kWCTIռƦ3ǚBxȨ0e&yY&,J( Aȵ-5Fd%NQJ cf u,5st-^*A$KY<a:?>W0y?/޼:wLGk`P@0΅\;ke/^oeA$ IT"ǔp%h M+CK j'ۛ&p^' Sh-2UӾBD~4F-!7FMnX;Ԣu?d:P=Dmeu % %lG^5ϋIR7ʃߌi_97My8+7j1BgsJ*䳜Q5lVuGK\f Wc2_0oU7d<6|&y~2Ei^2p^eeld 7}:R,g<ʈ?P& w |- 68Ь(IVW:| Y}JUv פ --gtmv!,LX{4JpR2:?(d^W0HZБ8Z:OQ_ .RV-|ҵ (PuJҕdMLЕJU.:"(鹹 P&Ba35Z\IWV~caUE/U; ۰uWBJl}8]7::nYڏ$%y}vL*.E?5ZH&JXZRFV 9{m¼hOgH`oWjsW% |phJװ=/&ZUo-v䂫xH{ō]$ܯT4P*52"-1p[e4Y(ps%_J=0Fj켔nhr|KV7ȇg9~eW=<0R J}.T EZ&$^| $vdj!5oI05|9k;i>JD_AN@K;{Vcpel߂3V0JyU7ce,Ks'%mT7꩚ՃT׋! ʶtTp\۝CPaFHB3A WKPUj*բOk13_M4:nWӏ$A 83v~  SISjҸ |'a+^8MNj}٭qpLTL{92-^؍e$]'U&{2IhP4ɋ$+UJYs $.4 2<5 wr7 r+1bj[HC-8E5N%uĤB£]! H( R5kExʊyuH8@Z4vjHRSqdR5E݋Sk SE1u}j*AhWdqE4z\5O 8KK7Fn1Ƀݖ/:j prڟ/7?pZ݋"Nx++kS3EF\ pW[352^OEC`lX o t(Yu**CWj+喰*:ABP)٩# YXRCt^&O\jSQ-dfXHUU=zwH= Uf4$L')hu՚C=7oj̽LbBT$Fܟjag3!8ço-@A0Npn^xq+qZHĶC:ȱ>"Qv:H3!Ziϔ Bb[(B ?~a07"Xث2h5>D}푪k󢂣QP>FupTdv #ӈ}8u.H:\+QFWDrqJF2!pDY~~yuhÊpSƧQ-LLP,?6p|;lUя<ޤv/}rjyDpkc\)q{휑m9 $Y"Öf+w ͮùj6'=Dfwe^L!g$[R}WnydF' _F /U7z J5ˤK~O<17IT er52 2D<$ahOØs~jv9!$ >Q@KX_J52T!)ǥh֨M~1\Nl݀Du.on*,X񅮐\pa靷hAOvyS뽶zXLT h KO`z  51Nk Go j5DhS*i!Ѹ%އ\Wi;|5L1}p5[(Qyxx0|ZEyb@@0_:5"VνbbYLS?$.Jp*U'\3ƬY24f{["z_M*OxD-2Bd$3K|<סh ֋ 3Bڥ7Op^s~}*Omߣ<`.- _<%aqs_x(.^bRuývħV#XHG؇D*Ҏ`J Pwtٌqn GI5X]ET\~FWla5ʓm$\]0\ } @0ge0snק082%l4*D{)im&mFvl@_VI #'b}XIvi7 ~ 1}*ZunX"$H$: \%тu5-_4Ls2amI%=fz58(C%&O Tਨ J(Z0}D.NB+ S#yA8+C5F OIBt#hM?*IgwoaaS&alHCUn.`/FG٥BttTq#%c{ t6wYpIc8Y0#{>CsK~Q$XȴOa`h`Qc1C?Ot>fBG(>_|[0{Q$WN*4SLWN|Uq 1y.߿PYdLႇJ/MV !#]*,QMН8Y^'Ōԛݙҗj,UQU:m> )pT}?)% +\dln*lu$YN YEnTB-Q'a[')}"U$u* x,jk]>Ix=^p ,a:ɂ*ӺM.ރ:Y"zoIÉNGb_n1m-]%lrndsctO4ڗ~n/:!=zn}EsȊ|Lz㪦s#5eا*r3Bl:ɮ/쮷Rrvƽz BfNtX,ʞݹbCk @zwtN ݇*~&SXrDZ2.*e"gOԆGoVw2$5/#GP°fyC.8=J҇]OW$ n 3N/@@>:zaRa*'-_bF6]\o)jjjz_WhEV"]XawVxJ+۸:xW&!]-dB*[ͫG{vqfǀzog\dϷrlrQqҷF;dhخT=Mj0^j+ f*!aSu= Fi Cd S >I̯tFK_LďL"F $&a@ſFjYJi)8v)׮} БL gjG 1`!Uϡ:(en4G*7UZ 铸f0yZz%6&8%W3?LVHƱ9Zݮr4xO2BOKsQT%?&!|Ò% Jqi.H̩ʃ{t_3Uc,Ut'Pmw K ڪ6P۪ybUtڽoʲ(]`t_p (/~U '"5qt |fg$@֢}_w;ЬK5Wswd^j nȐ{-\ lI0tBpGw>2\$%־KeFs ˲&B)]x0M$,HXZ:j'|k䛋 dx鸜 c L)Um0}&,mCEá0qQV̼㨨 VȐ`1ŠVP TPa#8,3CZOiOIfZi-VjeeOb^s?2}sky_ׅq~{ R[Z1*ɑjKQWH!x$(R}>/E\,"i▫ә$@ kb~k9/{yqeIP0895b~~`Y.>Fh`OMˁɫ%ıM6+2)U~6&n(,obut&]I.U?cMlӊq?]L!5 hfrV"akRc$Mb0H{)bB6O6=+V?؜T+՘R5D TacL Vx0-5!. )=b0 6EOZK?2~x7D,v|ёnxx[l 7د T9>=2WIq4$a5KZ 7@>jOTs 9 I@=`=oʚS3woۊĘ?ׅW!=uX#~Ȩ~y˸5-VCkk"1 K5.1Z+q 5/CEO S}Dy,J@)gl@`(L" َGݬC^N)faHi+OF@>)C0E)v]u:pIJD -_I4O(M5ҎvR>`gkwnٮ;WZ0%mNE~rkQ x8EIob{kϥM- 5?J 0Clf$\Hme`[C>} :iaMKGsJPC}[(^9,TuBBIj9 1|*=jִ ں>^&68сʁ<&{F;@ʩ`8ht5Og2°Fr^ iZOeFf![ 76zxRpWkZ$VD W_kzgKU )KhZxoerz1w9c1by-KO ^~u,AMv}%,N5 K\_ ﵧ!x:aCzNvj&QRz lץY$XׂW-|hk឴tcK/I. xA{2HţKIWp}+qr$gK)P-&2+3ߢ<=+fA&\;YGpx#\eAk!41kTs'ޙ'8b}X@챧jl:IpaJ |iqs;{7_<SūN;:,_9L^/l")k CL@:ޗ/~,:;M4X{9/K2i‰ AT)3يLɓ}&F d雗KO\M}٭}ou{D -t"5kyJ ;^ 5ZLpSdh y z2lner6Ęg*֘,rw|W?!Wexex=dM\k0= e 8Sivxj}&osV؇:sgeR*~YsBC &+ka,C╦k r87W"43NCm?h"ڪ`Gecؑ^*~ &Ձr JC4ju/sHaJ l钉4pkޝ3B᥂ĉ 3I'w%K<P#%r&u9<^kS 0]2RJʁ-cSb)`݃h(ĵFe5DYa6n ̓ӊU $dTWGkY`lIJl|n +䵭 K:y-<@$Ep6}'N ^< 1R%w?Ux+m0/M`f78k+fk eMsqcԇsU2~X5ւۈ݋HW^-u0>лpyR8~ey|ư)Iu;SD| !QpmɬdvNB\l+WZFNQ.Uv>B<=o8B8-D bѨVdmT5~S1Jw+嬩*]z/Ir6FCO'N%RpV27G(MvB 3+n ̏NOAUgRGڰc{㰨r|ՖP.&m筣tu;_ ꤮02-1]WP[4Xl-ھߠ[Se ZR)%Mv.ZђWB[)` T2: CD <3)U5X!Y&s7~CRIEu>xx>W`J:ELߋ rpb:W`,^sG;tH ]S*DŽ,V6RѰ>ӮYU%UnAs1C1k iNUx޵WqGJq+}I(Itǐ7 R1q_[1K*6XOg!{TSI2=W뵡HbNFۯH$4&PyD#2qv\fSC9iWEρB{T)>PRX.&#{ٛZó+n`-VFpq`HCJ-]b+` M>&X"B!2[16Ϯ젫[&D|*,x3BG 6و9YFo wds *A4AVA_ Xl(&,xH?ˢFsOhHer`MGIk㺕]qyOcWJ%n) #:a.ɭX_E7fTDXF[dslN6X}΍dM?1@Ս43d2vjQJ('SR U+EGtb\6=} ؎L)m U` hoyfŰ˫ |PuˇQiy7g 3M.A j1%XsbbRXe*rtkp!˩ȕm}d f!VjM1:F hoetCF [TX}"JÏZ4ŀqa$D|a L@[-Fpju#m 0(gobz >sBO56,BxW9L-JGI2JIRK "}J^f%u U`mm*<=єo%$N;请2C+4Mr 0t2Lܸ +&u2B[ܗyRh?&kwq}1[voA<,NT<ੵ[%KB"ogt1nykLCs|0.=CjQKў^n~@*eDL*ABySqϒH>.rxe,Kd$՚ E_>%ZSС=Ugx|%cA/iFR-hI* 3kV+ CPH?g2[p5{b>4Vl-)XcĜjyM+R-~d7 :{\5 blʧx-"4[gC:{]O``e4Ɔ?Zϒ+/_\K+ٚ*/vpaT:[8-tM{-jPG`jV }zWpAy-aהZJzs/7 '/"yY[EYg,K\&=CQD |*xz2kjī㑭h! YрarߏZJ*̧ N1+Ze-ū'H1/vI|cAOGH *R[yI.[ L7nI]x86&RW Ir=6m!,L S y9!nRDOڧ#Yp tɂ E;o9db .}xQNf=IUR9+DfoPZ*Γ&b'FwZ"VQ^)~yۅ[ Bp xS͹((au\nBTi wŤGӽ"#^ݜaĒw ?+uW39+J~`X0+<QݳW0 bmM~]>(̋.|Uۃ[2ptR&29G u- [,ؤx]\O~a[3č%,5DUkWQs>|~«#jcRXdd_D*qHԇy [ 3WɄ?6P#*$?J<&Up beOs֊[-z& /t:(ubM~skbEU6A 2{OFѥVLCdqy5P6ѤGJ+CG%:ЬqQE||l9Ma;,g #άcs4$rC *O6GcŸ+:~ݕuq(Vw,S5vSZU9շJ 0m FdlsԒRd0)bj_\8) ?Na[7 ,FA7 ,훁o dFc֔~#]P riL`5m^A=0nj՟ӉCjUÚsXarcC#YRg)7rط8mKaGyV8ӌMG2'$"j=z3;=ZsT$ȷ5g; lg2J c6Bəq=/4IPn$(I%c]J*+AcHZj {I_|]!sV O`La]nhnhaSТ!]f&ΙfrJ`LNCfr!z$~mMrN1U7f3I[KO&aA-3z8o:oʧŝ0ʐ.Ӛ[ɾ?GC~~{HW^(~@^T9үWd3:z9 fN!XI+D;N|;A:A):#I& O!DҶ߅f;Y,l ֝H0ӅLThSph>a^+~bn{eO߷n?RA&FZ*8%`H_r=[07?SK!AV|E )'&2(~:T%92KӞ,OvDqV0ȃ.nZ#TDcCj2Xn zw[9b_'^;6 'u֑D,U*F"f^J/[JqwBebTNƜ}^ S|r^ 6+ wk 66h'ڱ#Vcj[\2^ܘ*ۉiȳ7g$?RxX^dvJu.;"o-\F'#p\Q~a&9ZJpXh; ?B9>û-.,7=  Y,bֲ\jwU;J`p[)H7-olJw[/s!Yk`GGrpBk|FQ-dgI5^x2Z{P1VGԩ!Xb]zDi~:sr뭥x1GBAF ؃U1| !:p6E> v`XɛVK&l/#st+mbw2\lm̜ky|#sMD!sMZD*2DGH[gfU*S#UQ)tadJ5d%c7̈ZI0POKZ޾Wb ?,{xչ5&:l_>@Rlêa`5 -MENO IG??njLCXn [N \hZϹ[R7>azNZh1nh 'c޴1ƒo6Kp Q#W+8J#H]uVDÇwڧ U)v^{Ix׺OW(𮆳m+Vb-n찺psԇ$4z*RxnTLlҧZW*tZgLkrUH*ZKd@HHyZAUN6iU ߛu4hYÂ+I)<-lQnqGebI9Nb;73"5pZ>jT<^"x%vwZpܥ7 ҄ע9}|->'w26h$}%rTL,1O<\ ֑c̷AAy8 aE ʞGjBEq`hA#dSk^zBO][Z"Nؓgʤ >]oHIl'˧$Ū/3|KZ%)J&2\B)6:XRlʅ 3/\xTnGmkz9~NILg[#nD a'6e!x&) ۣ>|6)M"LI͔`=ImU)Yq ~o!możA*IrE;;= o$AO4oUkc0 |o-{ XT"ϴ m۱JuU݂5WBpm[.e C$)A,)o_^By&LSrO4kF_Me}WI]B\^U.}J%ҁGtjvCtiYHb0[%FMe\!T)Ő]etfdX`;d֦(ぽq,]˘*%r x}8/$M -\ qX o}=5a.x BHqxR/N6;·TL'K'TmgJ9Zλ}3#[Ҡo6&JL3q+JKQ&|zjM6=ձb/%u[0mg ;`1,PdsLWbK *|Z]x8!<'C R5pBZ`y,GU1>zzVoAn+:#C"QR̩t2%F?D glfEU+NlDO b)\݂kBa)Lh@B\wB5ePoBQL3n;BGHt`ICpM{O~5_Z 'biWd؇fb5Sx%W9D4M ǣVe1JMqoÉ{+Gۚ(y!Wjԧ[eZ@!b>}BЏ "yNZ UM\А^5ѽxǢŭ1nw,\;bYj.]6uuձ50*[ӛch= # %xG 2+4\hW4 *;q NASwk4+q}c h%rc4ͨS rEb9j8ޱrcؠ]kkcw*$|b!A]\asP8C;.RqeX φk,y5ow '!@OԇaJEOhU*8Xs@o1CXyw,VCжYTtFӤI܉Uٺڜod!hNŀO/ZCG4qUȒTCp&kPޔxJb`Gt & ނOjb@p{bv.pò!7N.yP(SR@fNjƔi#c !V\9k7m*Z5ؠRy$O zU*(PCqMl#~ ,"k884Qm)b!}R/IԌ1e1NY!N5'@.e.vk@ ӑjU*GKi]_Jx&:;Y`ǃ(U|DWj>GJ}~zq {TQֻs; v 9ŋ@vD` oMBq cGȥQId5 r2Ew/s&g78a]̵^XV#G03?Xz#ֱQ_fCs4xBvN_~4W|yjLry9Z ŵ䴅mscAyhFzXPW&3ިhP-$*xYq?<@$ 9ϔ B4 uKc2:Bҏ+۩M(ޓ(0@U\z˅UMʯT>W^=hZ8aXa;qD'$: >z#yh)fJ.)Xq.gIqbF`zH0;]Uyh.|߲F>jxRطwBݱz xoާ^RLNTX0,ca-AGOY´kWul+s!it1\m._/zTvGsLZ+<|',6ʱVԘ•6n >E2DlrWre~hZ(/{A- ND#abbcgl2wΧ2mMǫb#qk.k)hieǴ[D}C/Hpk;z*l5PyxV[ʵǀ'~Yp*dw҄,|^vFqY٣ 2eXR/1g&D@ܷ Yt_dCF$JGA<NoĉbV$gc_*<"x9\M?/ Z^6f7tډgA2} ^o!Zb_ć+l:h1'g3V:a"O~ަFً0o{o^Gm1-W.B^ ^ MR!M*<$RFrT6~ɑ\lԹ^j VOlZjhh%DV°؇Nb^ՕVlv:{ 1;\:`z./xśU#gkM0?YjY?Q#qJA VIu74ʵ f5pg_=Ā3ٚ2v5KӰ%#?Bj^m/Vyx@i4p# _1.gnyE c]ߛ* FlTi=Ӟ&%:RǷH9pO?_0eĮ'!&~53ߚ.%B?Gے$*$0FZ^E:A0k* LAJq I-vCc4 9m6m+͘Azqr4JӁ8)ާ\B<)lQy~@Za@@C*Z.i qçwUU2_D:mC~p%& <[tPnv0p֞&Nj\dcлJ -!{31 {j;~w ;6V*ޭKu]h D>cv]u*e*~j]_:7s :2e@G] !I6@vwWhOEn Z](O,Kƛuy? r%B^_wrŅb9duD Əie dNeOhpk]Co|Ks+^(W>\ts, ~] W¬"r0#̚0W;]X" qBXϻ 2[ny@&ͱNb> R"/rt`bd/ѹ ɽx$bNJ]Z.0N0H<ݏGIx l|˕':RJZvcU'xwFڍ_hAgx:[QsGO nVmk7fWhmU;j|P#[Rxm7LL%DǟUh>P bяb:H(7FR9XO#_DP4@JK#Eyl=D}Yq^}ڸϚ~Lgrl35]y*Y;=[!*22w!՟>9emrd>yϿ!yg/LtE@+ 8,>5f1]ѫ+"yʁ HKo =aN3tLm`cpg»98#Ւ+byΒ1FsYJ,Qn$9oǭrme"qcmoʯ2A!TUi;6>pW4aO8}Yr6X8(~~m^O y ԼiNŽ 4УNϑ M*^]f؂U#e67.{QVykyˬGR#ΐL!֑A(~-*=Xq5|^,哙$Sn&JwI-N]^\_ROSZv^VuW(Mmwk|}`+o(:BL #Xb/_w3 cyTQ*AF E?J08}9p5ɂ3huF-12 T&$̞cD 'K &AR#ʲ▱QP#FњCf8.8ߗP1w\!QjT⛤x''2KsouZ-_ױQ%yQq/=/c0*w x#w"+fR+S$ \1bVo틥  >3ɪ״D(.ZtK8dH90 AtU;c#)JkC=ę޾z/&qG4/6?0W,g s6&Gj#=F}ha0^nᮘFlYEzNTBifaSfCn;cTb=[ m%^B&e}-6_>v}Ue֣ffSv]u?{Ѩdik ͨA*[9X< V%+ÌNl7Uܙʁ#j2C刟~fYì`bεK˧d[jnୋYi.2 ab-L&ƐIxqi=lmK ޫ:}.a0?l{d:[%{ UaH(YE'og;E1mjkz%V<;ꨶR_!nL8=S%(U٠ qOl:fT uM9UJS,!bO͘.Hyڇjs$-=˾DT=j,^HSG~p[^$̋:E09X-_ #UK^#'w_O`QbGksy bGr:wp;Q,UD7jfH*-QVd((Au$D$wBojdMt*!ʁ۫j^/(/}|ԭwEe|&];*I6 }ߞ3>wL#©įl'տi߮&InU[C:A҄e{ŋV |ES` :k7ȱq-]g{?j5,ʻSK6IP<(A:J| M7K.wR{}`kD;?Q*SWѧlvuzƟ^5scy*,Ò>[R`Dj0~t)Qn@-ML' Z[xLY9\rY֋Bf-~cDМ2՘e(i.11#YvDnȐl9.(<XY̑O%[И&k%[NJҧYp@)Z|B,/f`H%frUS jpr94F .sk>%;2^ "M$_@UTxń-)@΋^'Y) e?kʧHpf0|9xGS?ďd3zFa^MC/͢#3/GEaMXk3$:=Ԥu-t .PTSmPBaZIcD:g|\{M!"rJ( 0 pjP,z]7nf C` PAXGyUܨ /phX LqަX#>m>c 2bǗe\+uSUĩNƉł 9QK x=,g$[> IyەW%b rA"m97zmޖ#u\<(0H(ԇҋ%Zh¾s|&-C)@-$P6.э[j.*/ {ikLqO8:YR-YtSH2H+h#s}Qz,sK*ɩ`8mw/XdO29tX#в}4gt, _+Q6?vcΘ"k)¼m<$>wE{MRkݓ.\cT;YRZΞzV[Te,lF?aԨqCcSĒ֫Ƌ d.q*BpW_ Risl5]z37WCV c)5hZwGD?'g_T|Ay&F6N.6֜ K Y.De 3N:xp@3-l&-~-B=oܺ*@vSK\ [5PƓ-94OO/dJ[k'A/ST<5Dab4sYqRUwN ZL9K4~%[ǥʱQ&Ot;:vPi< NL^ wso&L1[ 3I8P&TkJ,l5wrl\mSj5;)ƋPݺ4*f#$G]^vv̚O:yT\R2<%1ADHQv.bM>eD|HRxi(K Hk(&p0Gڤjۭeprq>v* V@]Lsj&^ AC*њa`< 筛X]o@t^e{%v\aM/z#<6_h ?"CoQFpQðSPliql[^mevsN}oFN4y; /~+@5||lb*ێI.Y!4LY n=:}{ǺYG+t{VW"?n0V%~1`. Apmȁv& H1Ҥ϶i Xɂ[ۊI>W b;7E-3/6lɣFcPNJW 8fQ0$4dMg$/at6PRdL/Y /k6}#)Sӯ]qFfrRG)h{v<ͻޭ'vl3״H UqԪlȑhTIT5ྶA[:%jY"q|}]nn@3u*LjyV]:U_lj+թx6G{ְ9[@<ȾKԩa%]Aa~_?j3RZC6BTfX?`C,?1 F ,ߏA5.B)Z$f5o07xs^1S.]%>i‰iw񓌫d&F:5P35}wIcGQbyrmLP~A夷ЬX|Z9Jx45STt?׏?Imea ~(.&T}HnXN9\OF+ fi|MGVӤfe As7JqF'ik٥t*[&o?׷}oL*L*xKdqI&qq|o_8+2䡚 JS3mS/,WU(Ւ/2uj(Bj8(Z/ls|f.H[e^E{+KdJYG[0@4Re$E %-sB6%RBmFcJ{lxT"v+㩐᰷iK+ݲm}fMhY=;Opt9S@]sT6nPy*b:&揣䖾89S%G^qe".74:y1R-H)3g\9Md(/(C!:]eWJ:g:Y;U6iPf)DR* 3T68GIBǕ,1~nB,5Ius2?ɴxo+rD n[)g*Ae4m4G|X]iu1Q6!^ss-N rZ}Rn {֖sr`[$``f^cҫqML{SpƊ+pbj; VVmeD&I2B-su#c&EѪc hIsP֔E.e^E}EA)=1wn gT}[淽[Ajsy-8r({;_1fQg%^Z6|܄my\(9RdSmS%:$ȶT:T{O()0U)c #?1a=;M9ԧ̪l$q/U6O?MNh׼TS-w[kн݂ws5jx5ŶLvoL.Z%r)6'?o{:eJ\R͏*'RЏ o-*g9W/RVX'ZWn5 |P,O<8: r2JPJYYis)$Q Ljn[6=z6rJIѾc#n%\pqL0;CI#(\G0|.*yFn4:Hl 8`I yc1 ((*QBSH'rP<ʫ~!ܡg~)չBk?6jVbհ+ D9N4oGblg~ZJlħgH?l1 >6؋>ֱQ9km9LP؍&%l{Y<@, ?[$HMEmnF6Yf{hlo CvlDK0"JW6OEDbV}o;ͪ);%E3rTg"Ն{U6f&.}E>VdU9QM9Hi9}s{m'KP> {/'|#6J0<>EoU]޶TF-.%E SIUQا Ug@&bLJ-ņ♪W*텋@ 5/(Bq+$ВDFвSJ8 I腭HڽT$zǭG)U"GSlUqEtJOGi@Zf-zB![X6E?/6 5VX[2=ad 9J9,zR]^2#[Yٕʅi!rZW1h Ŷ-lOLW Ԣ\^L˼ȸ71{1l=-H!&3n eV(?*Ar XG) SDŽ8xd"XmՑ>(WL@y #"G/W%^Ysg/hVGi*tڢ!MJRƩ)M#}n1r7LƵA6)J0LMAd_Ҽ Mq[B`à.&>0ࣁRLj`0Lղ"Ѫzt5.]V|^إ)ᙙƕFdQ9ϜBч뫖~}T @4ZMSD]+ H2hĵNY 7ppdS6QxSW rN6sƄ}2Yd 5^VK>Pj@"IQx)Mec rHP"ꔹtZvp@^"LvuW[*&w%gIn[cY1fJ{2Zos;-K jFhfVQAQьD狷PB;_Yh6sTGaNyA [S>4:HzHӖf[iGszj]AYDd \>EјJcvZSqn'9 ?%~Xkf^wM|dIWoypʍХCSM̊lu 93QCH*ԑgb@Tv烉e ͭ|iO;msʻucٓ®DOX?S3 !F\#4T6}22r-ʁ7ekCtJ0s-4ϱH\ʰ*? &D|H,8w݉5jqwFN=7"ʝ5ui#nipsnԚS_0Y==#B  j.OF#'J J&'$2q>2+xlplrc&OhŋWs4ӄ5-%SN)43GecB [@{PIljSuY\qe*yZyRe0{|~;vW}qdW"IZ~\sll+j9h`.xuso L%MSxag;`wʺ"ę77f 5-h;||xcrܣ k=E\gꃸ}H bu0퐴j\,af;ܐ@TK콭K̡-8E+a^ER\z9+T}]?{sZlͲF}CVQw>F Ұ[1GFZZOGc7jV42\HPhđ)9h 酵f`XKÈtI`^*~GvDx OihLW21Y751CflR"桜yx^qTcRJwse8+CDḹ(!12w) +աy͡*nŅ%CjԩXo 4 $h4!do ^2X<#sĔ-~pEC4SI? 6-Iq?cvuQ*iԐ$+28 HB%%zy>YsYiQ,l\0rwzc*ǼG(R< jy@z4o&/YdK> ~iDxP(4 גʖy5IQ $jRa IpfoL3/ʁ* wer)*Nj)`ZZ 1Znb),feZ?čb{}9uIūA~Kjgi=1^r+>~y]Kō7AHE|~PXJ-Ҩ5K 5chTKl'?HXO).ƍi+v~]fg.P<';/T\ğ{RI-Ǔ6KEWxZ?FB.ƴ Tq篐ʁDi\:yh|fa:)Afm1g..juҠf8x}GxPl Δ|u6i64#pک]q}|放e!tTsr D/w+Xqb~ǧᡙuϧ6r<3KpUkɾX wҩʁOʌy_~N9<ܪ$${Bi_=ES+DUVW-T-%vƆ4 [ʌC uqiY)М*wԥ2~ϐxK|rZqP]|o<}`m+C~\<зTjqNjAN~׾X+NjT)wgק5HDwӈ\yDN } ,#N/\|} B`+qNˣ [->LIv^ a*wHHKPPLSanKIecAZxaRƪ|/T6uO7 źWqeqF<4҃=ӧ :#|GVb< 3H4QĬyD$n {WQLqi bŏPY#⑕b(YruL {DN5;ʼn #݇bګŏgsdBD}6ꢍ'%d;sZBy&uZr09D w$]ʃ+T5Y|Q-`vIӁNe&#oXybƦK捶,l;;W> nlHT&N Cŗ)|='Mk\|EMKOfKbT`:aUfs_=8@ nA#̓wbr?2&UNc~yj^1@O}15^t^~/>k)i4f9eWHuPEP<2wԶ9WꚌ ߂}]ϴOė͈ߝ_Y]}B?Co4g&knk/̑1k)/o:K2A|aFV ɧ~ˏOl.ꣷ^Al=(*ృB+g!p#JOXlU.0֜.,N7d|fOTL Gr=Ia~]bŪ]}| 'kX1:PaVdbALkN&]82- , ~%C )pP@X ] .]W`l 8lvG(1Ì>AsK=Q'Dax J`BBձJ 3;`\@00P/ s0|r zv<0N_0'Xy g&ʉy,iYܤjn^i"Tn 19"qZ;7TGMʁ/sw*/knJq_h7w2NJy8?r3˅$ "hCt>8tl|4L $#yE4]D7r7 ۡl #iǩ;%TG*ө_92] ĢTߘlC(& )Au1Kkg :8vIRxzF@C8<إm7i/h3,%2MgXa:xta"\DS6ĸGm6G'&5}xKBw ktrGW҅kw68O^H[t-$xIwiwb;wi= #12V"fUo_猹I/^vQi(]`>z !}4hSC#Ydw>fvDW冐j{WQM,qģ-5@L%l{jb;< L*½rTuV.}/+#5WcBI%qy9Ѽ?,[6s=4qN! ӓ[9lX@ hm vGq=[^EEh%jO}8(Sa*7#W2zh9aybMMO2%=jGKU@"'flE=$v0/BE5Y2U-8cgK>}DʁH)dJ*xD@-+6^?$ ~J@R q7$H&"A($ԋ2 Y?*͈'M푉N)-7 s͖#*Wh&o՜Gn0|tURMn ^vKQ u6NWH~,u݊Qj!>#E9Fm6巉Y?=8lMɉ}̒f\_[abv^oE|` -?s n9'r}8bQ7uI@_<߭}mezq7צvXև. =Uo5%Ng*g0f; >Ӊ4(Sk l=uAv>d! f&XW SW4'Ņ/&Ztcn `-7ʞh{,"^N̶ l?=AL|u1 'HwXҗaw,1ځ2R{nLq:X8-9ư>eg:ܓa ]bc F (_'эqVs`!ήּjrHE¤ C7 }aT9^.;L5Ƞ|c dSӔ-x0#1E |nߦ~?\b57`kFJ&2SnMtfw`/ﷅxHeJtr6y%C6R:¥NƝhqj|"x>[&.N~9R]<OF((|̕yNf'uc7m+W岀Q$xh~}6+~ӬDʚqt;,c$<"܅&)ˍ*XЂƽX峍3`lU6(w0xsB, 4 6P+4ȭo+MHH0_CjwNew;P@vߊC=ʁ5/ۭ kao ]ÝiѹMvumLkWuZ*xeGK˜&nYbMbVV\îg 2%ّ Fi 8E\RSa[k,P?Z5G:` qXy-RO]7I`)5bHҊm,ګ [#m}LEr6RgAjenWׂ-i ~rfzG?}x")Ad0H[< vQֽ1RH:S$K0ЅQA')& 7QkdPY2<n(l \))1C&c U"e [pa!f%>^zxL11#IɌ'8IVbc u9{h *Z,A9[2߃e͗;[?2(KlFq&hר2e4dA`;]ꤪ, 9r2T|?_Yx俗4tӳ-tcB-?Y-Bj3nqOs>'J}{{ wgM iT5YOa^&zȭ}oWGݘeg槷¾ξ˭}/WKfea;3uF$,*h_+pU:G_^2EMJqÙAMFu0],XbGcRFIKV Tp~۝I M:N͹"̷T9JN;zEq uXˍ4d 'fJЃX-Aɒ$z 9g#M!O]+D-Vl>jħbLgVi' ^-M89V`rȢ!S*(;R>{&lr%6$rNfe'3Z8q_2'}IBx1_=L9 H9_l;Pf~`nėZD5,r.>t|mwTRP И xJͭdh- R?Uhǽ, p+ 0xY #Xg>;Y;ڋ\T0Tgǎ8TRU?Yx2rsV*Ǯ}VX}> C1'+ nPR-v蟜/3Q]%G^5EB15Z :Y?\_^#Yj$WVIP-(WeެJi/r,b' I걼Y#4mO J`l7 [?-=;6ձש!OQM8?M4`aЙcc$Jj1{Qǿ.3c#AY̙^-4Ǹea>a؇ #aT+{29܏MUuzv.Ƙ] )V`t- N)>Yn{aVdBM{s3O>[ڮ?J9[e㋱j’*:<Y+HJ?7科xPn`pszmxiB]gZkVGĭVcqM [)z0#H}fsb픹$!0RД'^BBzVc dMʣ'rԒbeh͎]IH%雄'+pi{Rg;@)QIl`uVdhLF?KCXBok 4el(Y.KGz,n|"=,sg[o :Q6:0FKWuW ii2 08 s\r&c@pS1f2j0^fks6 Beu_F}\vx9L_[ &jܙ&T:|D::. :qt{]W(NKc5mz~ՠʱߢ+Xx-gcKNr]-x53-5W_ 5s~J9]w0&}mAp0ďg>K2YjaΕ }?DrjŖm4j܇ů}j fb{L<$~xX  ck1:,Ex5rɍyrB\s|ii,|<+x$(lXPRXgǐϱ^\g-H)X*VPaɠCࣩ_Pl|yZc8 7K;fJEĦ3- x)Ym<~x7-bN-s Pܛ7!ϝw #UKz,4w-ӢDg`vSj[>2rE4D|SɫeG,>l+IŦj;^*Б-t[[o+nu s![5=gZ7xX'SUS^q.#Rͫa}Kzx>LeoJa4?9ߪ2nQ/9 _DH-JU9>_.m>jAѐ'ęЈufm6m,!HvcN┥xjdJ5f2zq4OpIqM.<&[Ac@WM…ffzɫ)ŗ.Lq*n^LϋqK 39*=mIT{ I#cah:Ds'vGu /مW,Z~ƵR0`cGQ, FbO\ n,hן:UW1Z,if2Fvrpw8̀o-</tb;DKL/qJUtu~!ߢ5 qFbĖVzG[,+)cu85uA.ҰRe1b4W >4u Ðt">&g'mVQ98p|MRk~5 ݘF[rq/Wq_@G`lXuBdoAtq b:ی:<>`YѧX96}8|VmG&/ݘU!X]7T*<Z|J}#A/y]xZ+h.(e2i"])DlZk4Ta]4 /s@w3,GqcT"9MHGkfīf)7s0%Op,oWbڣ&uٍIr!%J.̔ ~I[$ twnVX7ѡQu.]3$n?YMBwr,> XiOC|d).e_"*NJwb9h~< e, ]Y!MbŶZcN0{ޞY!_Fr8c>JMik0̨,\ljAbG wu&I&#٢5o2TGIuZd__i>n֤HLL܉Adp|Z0X!^}oaAoNRۑ#HDMKh-ϱU!'}"\N%85#IedsTm6'hM3Sa"4DOaI JvVKLse4ij"3?U,-q"U+N|k]#NMݚa+Z0?V&؛a554#qۜʿq#>sY>rO'6_$uƋ6Sg<>/8,xl 5$eIaFDfܚ ^sNvɲ,F!)v[خv lHTWL$Q@f)"BpKZ$Ǭbw٠he0H@y xX*=l ebP.]D/.<+<c,G\ dԠɛ[ΐc4'lx=n4φ†䂳 qװjj\LMwI5s?cV߷j5H- aAUѡ`jl !Ph"sl"0f3"8Q13C5Ri\Uz9WH A')RkMWXS8z &Kst~(kEs A):ՈO5RyL#.qxD/hC"j T#S۔cK8z<nFuTE_'$vaa/mx=#o' pv9X}E&az%=|2V0?2ѱOoN✔IK6r0JrĎg-ƪ-lpQ缀?mLACɮĎ,sbUm@(X`z J~8Ǫ/n+BO6xR1_/.C "gxޖ%WI.f,Kgkѐ B6E8'Egڠ, o_}!'j;kf0go9 q l\ECA^OkpM,z4Ն( I.+/ F[2_xeQx\Rcʼn[O4Wiޟ=D=rY ght#0FPG1˧=!Xj>.^ vJԯavڌiTd RH'98)AI(2Bܸ$GsQ(a>-Z@٫)RH9bՀ>oऍD7CFlN_'23?(}-] >)Zs7"'xqsǻ<-"Д'§81gB3Mp)f'Nw Y#zY!~U'Z4U/ޒj)VGzIy 6!rt(*VAq_p;^$E|>\?2$~~B0W{3> y@(#I vk2fZotZE`p;lØ^ᩊW0w?:I}7S|Eu{9Lidquog#x0Y+jsPg%X@Pl<|z+ /TG2=GCH(%֋ez^S)+Z(QGs'+^||@ *FuL-(;JI">VW ĝIg>(xkHҶ"Hеgf12)|z<@R XaV f΃lZ-gN>`žvg08a<$A39ޚqeOW054-1ssq .{ᤊvp..h2S)W~ǝe 3 o*~nT)fvڒI>;Ym6|vH-n6R6lNUL4ίP(4J{u}:Ƅ)=0WbAޟj&dv=/U3'zCdB|hB* ks7I'}-\9AE B#13Ise9U}$ӮUmiʹ7V[25MkQlªtEhO"HVbς,^nJ}VC1YfvBfk-T&65 DyHpͧݚFyJpV=<ʁ095PE2F9wLP+US Hz-c/Y=fvz+#b\zRjB[87#a1)+Ms]KKvٻ9G 1I0]4]L;BSm׸} 5*fߛEfʣt'߮ CB$tl_ѯ/ FvHI SQs u mvb[̶ߊw0.ue8R1Ut,dd&O\/._;Bv5"OͣC烌B4xr.۱*Ob-cB8?OAQ"N@V- dƚseA"`-b `vCXsфtV ~ЕEN[mD(#[~ KӋVtC'ZL /='lMBQvzTqwm1{mN.lc=7m_)ut˔*Zl/H>)Z4rkIxGs< 0ǫ (-DaZUү$f ֟a> q+qpu:\Re[%TX-&(INLyL٘cA҂R0Ydmeq5 t΃n,(Apa75sx4MjSc\F9-N'6F-Һ,:c7c<(SV`>1C$[]l`rb>;ƾ{M2HO:0/2 ]fu0dRe:ݒ:405e:y l]f*t>e{|OQPe~#{9Ajf:}4'1G5fq^lcr?0&"(%_AoĽa7=csr+\^o 2~,ڍIΥӵv† L]2dΓh \0Q>SR2J q4? 0^YacY(% ĞV$%e(J 12VN; z26@qkAd'VLrx{42DR EM8S`zY9χb SF/> `޷tg\qہg|2އ ҶX6}2CDʏXu tZ`ƽ"b24w) }  S aA?'ly>k Sd G>VsY[e,a G}dJaL/tauT8p  sxcA{p6N/NΦN/*~V =`R|"ų4N #m**,#~UOpA6|VXCcZ}=|'S*aKzOp >2v9q+&- b}(Q y!2H%w(fLcBLR!PkGaCwU. #$z6䩴\ms>j^Ր2CRr<^g |5/Aw*i'\ZevU~1E'. u 't&ƅЛ8au&(֙r\Tls̝ۻ֚ݭq0m)vCi\=_0'-ő@UhcCxz3BJ nvZe08컖:5n<r%F Ypɛh^2(2_YB \ -jDb|Z_/d05Cd@2Us #P o`xIN ^vR>>W4(6">%:p7=ʓ¨WM M\ոQ|R&U.QT֌QIj!0OlWLe0=<mVXd]Ea/_78{V.2 'u{o6?˼9!{h4e/u.]jH=+\_2:,%5ka}ZIT:6hl"j:/ut>2`MXV)Lb7dl *\gB] nV$9HT"+ຠ|01 iVkF2 VֵґuQ`;q|&vzG@CQem[`8B7g.55ha)M?Ttui^''J: ]Kp*qǓm)&Gvk<외 @.Ṓ2 q\.q <ˍHQ`lE,2Qn;>& 2pAav6%9kp~Kر:W CSAAzw8ְo9Nig u!i'3myM0GXN2^1qLڽzx>->4qW' u458 w[sok3ɛu 7/^5f *>l)%}2^.e ݖfoXܑBT\hh@4V3@.Hx2Kn0;؍Ҹ󒧒:P g(iuG\忌.S2TpWy7_d7*StК]oaZ{ҝfO1"[vϥU;΅mHB:Q(NxD@Pka,0"@tSbȏ!eCDpV㣋Jy !7kxyl?gG- -~`6iQp$OBkAߎǣ޲yhF*g"g7Uy 5cp # d<pӢL 3z=C Uk)IB mG-qPb^%gpy&g3ZzԵ̄!d/p̨ .Vn(T\s9tn뫹9wR^,^3X:x9lXriO]C^jbRWq8bj-6(vϔX"UY(f_%T%µ"gk\w8k}'{_pL .Q{f4FD0B<^*)EY&D@`/ ]e"IJ?zqWRB pz^[RGKG}g \*cib) x󓭨|>̣RG?pV5gf>sJBJ@-sd6r kW;0K2䷔:!(Rc,ETcʼn0lcE3YPc*]1#=m r%= %0e0ͭs2GQTH``?MLb©5G\-$je GO"rE z PViFy_z^ Zn|2 " jp0)1L] |7.BRR q(mM^H\_1l A΅T58нʉ l.L98rR hӖmK(jSz+x5N[]vוy`@Z)Ws},_. wKUYu(B<+Z=nVԗGAN2b])39|UC~EZ.{f;.hy.5תg9`;ݚ0;1EB{qnA/Qf}lpOGg:&1ԝ}T0B1Ti/ak-G{V{p&k;{›@Z-}Kӛne2ä<geam 2  =}GgbjV*qtyg`@Q{;d]Ldz'wA5Ebzh-y1e  j.EXâL^\z&JƻiK*UtF[],Cd@lЄi@G/J/A@ҠSi^ $[>ɱ֥LKYБ{ Ns# /fx߁tg-lG譼3!b'yR)t%#D)=&EiV)I;Z0l|Oq"*|!CcJ>}g}\ًmb0$Q/()!\gOzmGG:suZ -%cn+;Ӹ7(Sa }'Z8gV_ F/3&P"=1hR ܪjNo08̎o:~MD4I־BɭV]oankpBb8bPC/Y뷛Է;jc-:X`@3lKߘm5Jc^0ſ}L1j k0PJK שpa9ႯR\.:OSI 3,P`MWBLZHC 4?r>~bdapt#U4|P1w]엇L(`mzK1@گ/T4zVة5};8a ه8]Y`l6rd/.cʏ*Q\r*}/a\vߌ~OLS(]bf@wV'^_JTcuF=R˘FGJ446  Md8L@>6?ڜB[1#L-@CXW)v*'ti.Xv_Ѯ-qch]Fݖ0&7k%J@[v Rcu|Y UмOD;[-n`2Xa+v]zH(C2ͪq>#jL} 5;xsOF&Fo#Ylf*AULwy{7A}KE>.-TOXRi -U/f`&e4%'r|I_ھDOb`_&6đ`B&L4d<0l *  *X\Hn;p vp}U@4cû,]/;nOCGOxn#F WwblXhLrK(ؔz45B7Q;ӳ0k(A^Ŕ^TS:&gRtQp d[ne ^boO^t5A?DuA'Αed>mIԹ_!(8WeKӦ.+J%kW8ỹ=x6eO]>"Pyb /u/Ncz>\nVYqAXJjX$/!.ʣSFr/e{UzxVoc]HYPtXeB^ZdHm/el Aӱ'"|` I&fl XP|~c\`zv>YmԨV=P7v 둮:E'v`6!㓮<}!nR$X~&x j ] 6Wp9?*|G.e,y29}h{,bů^ L#dy@c#GP.t$^@@ [͘D&=[(&iP0UZU7jdg(>qk+#LvFي%o.;;ABЮ2!K]BzXf5:E3A;`բ1mJBiB*/uy  'Jl{'˼";n';sz1R;;颴hˏ\IC,Nȕ#Y>SRi/ƙ6CM.^0}4c>_,4m![=E @CKǀWkzU\ _2fWߑɭVNGW+eWF);xا u;mZcz2l}Q Ytz5 /eMzQ ^%s\| pv]%\2=b3UM0pa8 [nf9b%FRuRx^t#&vNV1jӿ0˃Ze ԓ)7:&1ԝ' Mta#9;JuS::8F,N/β` 1"V3wN3ײFKD5?k sѴ.r=FNd9Y~|^Nowe:?N.\'*A:ޒ^g_N-I*ae:9%~{ќ9 R"pF[ 淓5Bd:p~*:)GQ{I/+K)A'Y)5/2`-۩tV6u+-IZBbA x x[.ge\Y(Џn;DaE8'-8Hl:IiTB:d>qa-ZrHZ+؝Al]'؃n]2PE1Ȓ?p$rbӘ]#;bT%ri1/Sk@0UZdW1\#FbUvRQY.EaR\)D-:"=B= `F ?=W^sH[\6&AF+)k/[bY,ϖ]l0k1;hdIOB?+^q K2oB&- 05eC5G*<-CqJ+ÜٖY( dzNq҅aS'0EIR E>`FP {xx uv<[Y/=z=jˡDvv*NcwKt5w߇uq8d@Yn1tNr'AOTқ݅椛($5[!H,NPHGL9H41U-; ˓訽`(Q.cxʸVXQvxy0EF[>c#ػGE0UbՒΞ> @@nìlpBǝ:*F q=j@z=\&D` &Õ)W:|*c04#AWQ-@]Ub9"$=.LK"5gz%#[X[T6U XVL!  _q/WRƶJǽ_^+<RA6B}#HFMÝtQ6,9iZ-ȦJ_KhƄWǥW1f3b۱*TA_HEԮu/Mx)aZ(EpQ|24yg6ӵ 8g_G)S?!3.s<}ί1>L۽rȩE1F㷒O%_Jł~R)t_ܯ(TEJEtOK6΅SZ8 iNA. x_鮢yz~!{q\FKX-(:Ϧ? h)Tc}jIUxa>Էg*='z\[C\?0@I{n/Qbe7c3_4*نFMٕg F,̋xPT۹Z(tI>BIR:ZOlbnM33c"r:y밻DlR mZVR6&\/B#'aV賂%mRFSɵ׬xK aF:29DÜT[Ű/c9{Û8Tø0!nߪӄ9V> SibJJ/HSa Ȕ0B.\8%\~ D1Kw'6]T%jމ鞌ɦ?+ 胮w$"gO S4GUnvh1e-+ĔS QSz{S ; ,}ӵ R!{@`˙ɣmXk5%VE$^j[&|S" & $EslL3+lt7][7 ܨ 0w-S %ƍ ;/`S/v4f1Uڹ4ߋ6UBBtA3ъЗ[% ֕ 1]%΋i[LL|\FGM J+nE۹8S|>}EtT +eJ+*04~E#QH uA @ }| &}=`6g3zE:sAl`Z;WqQhMԼ#g;i_L@!j! 6MBpes9HPv2X`ϲCFԫc7ZQKJĞG% ߘE6r2cgaW"@~{Db~ LГ*uuU03G嶽k>1zG9bd!P'%'>2@^ǴY#4@8o+n'j{<"KǪ׳:٠ ԑ+/g{X;].j~{M$^Ե`N18c>/8<.0)K.z7R t q -B! O^MzcXZAO`8.JVZeVHŢl+yvpkB8^9JК0fC1#+aMyggSL/}]ۦz/[J=v|)vA= -Pjy0pvUɘJZh r)#ʴ~'K6,ĭؼ_] FU^jIj|V'jwiGu.5g=RkvakT+`hOJ' \ؙ.E@eE%yk</B'0rP45mFDct)V[iW܋[cc%X\y-X$BnC (*)&dәE4#N* lzL*swE@"3@8]95Ry)i D2VuKVLj3+8"hTyc kU Ь,e:73jT=>t]Pv nG ENt)hpl8.D]AZ'hCX?u LKpSSI P?&#Â_!zM?dv1AЃbʃ`?J<h%1\WPל;휴.{5.)kÜ`,BtpIT(x}r`jJ9>b'ci^6hp/q; X$L^ڣĴBPYQZ-.E=^םo4AHP\%Ȗzq‚YA3.61[0}7'9 H*-,W u+ᓮ1`oMim=SÆq{ktM' ֽHﴀ]9C>5 d'M׍ O {D)0g %?$'vc>Lk>NDۯv 7oP~mNA^BHZlFٳ_26cXtZ%؅ۓamfsp9lb-?a=\=똲 sA5:O1!A_}>;B1Vj<3ÈKA Q^.1I(NvS <# 7 >͔bYx5/+:|79GqP43!鲓2e)}ۅPxug3}o{|[ooۍ֏o oxRĴ ie£ЕJ/} LCݺOL|ķm7~|[oRP*AXvB.;n]-KyU1H ZJjb<`?`wv?" NŇ<jᙒ6ӣɾ}48@JWk.쾝ՓӿHBh %L (r_1tJ&;c˘w+g{iG, :^<}}klLmr_LIJxJ(Z,O/] ;hWj`1ط-z2fI/VKMY8l4Jh y&Z{/r{Rr_~ݗ/UFWtzave]BO`ǑFnÞs>y/`ZzE @llž[ٻ[+k;-5-_3ebj .U}|+8`=XL2^v%Gދ3zF6@i_6 { J!'1ɅgR 9x4rnx'RZ 5+3zD猑Ls`s %byr(v@Bsi%R<T@*( x@@S[a-2< Z Śu$X٥t|Φ P2)o52Nbp tӥ8Lˬ};9S9bӔ4g+m0NdsmV$9bndsȃ?͹Ӫask |8?.$02o:GWKѴZ1O9>yi0NnOseA^FSAހa*)'K^ gsPpAL]e 4*>27L,>^#$p9{&/ڊsV:u'pP-f(~z}_ސ1L:? #h|4EaLYhx'\S E4N/Mgz)Cِ)fOLBwO|Uu|E;h4ˮJEMΓ+?],UrO `bXd߽\\BJ eMٸq2ݔ@;Q2zm@m YUo:|- ͱ39khO% NiQ{);GMo[OpdZ#Νnnd7/ pImnh60Pb/o#/"S|`MNzȘ =1ief~{vxJG6ˆ`>agQd;̂F~j\f@$޳gxnKldyf韣ᔜ,ӟ,ï A-#p/U~eJd-`MH_z kNU_r#?=Z]>>3+nITcYJ:Ta^8ƴ3VC35aLCpUo,3:i/["OH-ڛ.̒:F7΁yy;RHuygwB t^QK~:A21ٚ f^dKxRKs2t(qPmX6=/RAݱlSB˦D9z  Qf;!i$ d#m"i,+Hx3( k@6^KBvK܄',o$ n oBiMSCijB鮘WLޡ9-Ž iԠ/]EE8+֯?̦^/8`887uLL`!G~dNUAMN<f3=a[Hg~QF Ά}Sx15dfH'd盹fh;}zRZpIL-iv̵ [ߕ@1s281q작Ʊ.A JõO\G>fhҹA!['e<ZGNzBx2(3Tiya] m>8bYuza *SzNnIjEH*OV_2ϻ&wphN2%OuOIӿwgσW 3K-~ƄN_*1i,`,RӨN_)RQ$JkW[4. pk~Š(2fh4f,1خ^׳J.,9뺄TW)%95gNTߋ,?bKVf8U JBBQh@ =̫~̼ٗ O1+DK=]0-+AЫPS8ȟg3>ɧ+DĠTB;͢5Wu;.TwX|df/2V!p\j5.?x|^֓,(At_bw_Ŀ0)@F r׼fvvV:6ycWԯ\^H;)2Zd+Y3Ff؆4q)OGhdҘ*vt31zQ:~48,lbHy}B \//}IُJ$X%ؘ&V+Grr?/Od;#PlJ(!niQ5~='h\azG5m_(jT}x)f#ePwbMȴCllb%Bu^:ҩf?>6a,D5&;t((^0 N3w{613r\fz~>{R})aS}VNDСaa{{ľ%,Q+PoKNOmDil &ғ:Z;<}lm6yY&ɚpZd+&3ee~Sd_\h5*ܩjvh 3gfյ@Fax7( ˎK":qrV iK@2Xldy9~LN`MJ?Do2s`'ITM$3e֌PLY?g\Yˤ8%Q3ߒd@~-#d^kdq2Sl#u}Ugm$K$I~!͆R~[%1<1v8<.Nx^]~gsPpXWWa~ef~}Sk]KSmc~vVݬƺ9X]KK%"IEmuMu-uxؚk[f%$CDzuuN] 0)C9ԑ V}N#(XCbScF1 Ɍ5ϫȼyOsEL_7]K .㩨*`i{3>+rfq-!a5g5kLXOnS^Q>5wU6UQ>?3fg %$3{<j?Q?_^^^QQq?\c;Y/鍘TV+35~9sMσMB9a=XL{dVȴ&WWiL/m_ޗL_^U~ejz_2#2fuU}ɌU2߷jїӀLd$2+j<\\ Ȋ Wp{ΠWTNh8?yx\X C'O7k*Eb4SK(ZќdLpR9r喸\d6x\ \k8`xp5xVҿ*[Lks۔LlzVϜdwҽX].NlذaU̪bZ}pne4 ?򀌞/eۍj2^M)ym`NVLIUͪ#y}`dȉYucyoy=V?y瀜ﭜr~rvy}V{h@OVl|x@~+r$ȱY9: Gr>9 OQIrL5V4IL  \Ǖr7.hߐ!uwr.rjfI.[=ިf4WN2y<{̊҆\fd̊Mf KfmPfEYSR-@w콃2+*\uV̺upI&?08sh9#gggg7'x*WGrU2_"{"1F2QqXfZd}2$U9Ɍ2 ȨIf= ʰӒ3ɶ[ͨ1FJKur#+< CIvV xW")9ñӚ#2{&zYcGdZ/gO2dGd}S[RӥMhkjzN2nO$$w$$ܛL~LmPY$1}gHkf?2]׸//f3~EW7ofcˁ3].Aryʍ*+&UY1b H5ϬmQQQ\Kd9\ω.8_^A_g :Od^xA/XkNg\rLuaf&Wr垄-r.0gǓ?q&z0\.:х'=//'`0|_?s>?y$cY?wEE$?ϟ\AMy''OV]5~E9نyʍb9].缊JVTJ)~/L] Q1Rx^互Ylp?X斺yͭyI֚˙CO8c~7՚_#*+<Cqq{uLuc}S[dDǧa.$ ʙ p\%$^cA$d2KXzL3-[(lO2Y mf&3ws}ɼݨIO}*eȒCӿ̵"ӟ;ZU.eۓ̸.n+eןEJ#Lh \yMfoyrɼGmdfM2iTL$s7zʳL OSq^Hq~O'wO -)F>Ԗfo2VY3>+Nșk~˓k"Zoϫ!'w|%KPfktrss+ė |[Q1*$փ碢bPx2MD>/] eV'qb*\OXhڪ-OF+NTЂ^ۜ~+!S\`i;E(NfowGzr=zNipMjx;OVD9ivkoq.`q+.MLndibCp7mM3áJfFZkg4 рMZ[-@~v}!"R<~k@H.3f!J㊏+\Ű 6(%u$bˍd4ؽY}9kK^X=c|xeBwVXE9;|S 6XH2b}X]n.-ʎ椐d{ݫ WHM^d}h(>0K_iٯ0 z]S=h`P~o&-\}|NJW i͘$2>>i*^`d{D·F!md5. Y삾-s]Šεf )!$,0괠n:ڨ0HW[< cZLqX͔gXxRvS>cVA Sc a9ˍ~dJϴG^ 3WMЊLGZ??b/Vemm"|UM2o. lX7P%-J5A.96Tr[#^luƵ^mkiB,Iy3O,IjgR6ͮΜkOIeWdL;ޭ(LL$/Byr*r(ѭ;~0-y\8'JLqJLgױ\ uf? FSy9Q>au m4H;OW#bˡ~:u?߅$y)\#f6aٍPti׊cy~x4;9u`9PlVrn\TbVwk.YM5|7o~Ea PE]p.) }/X8zBdDEhL9٧ Gxݓ=Vd9lPx891m,O^.gWo* m,, k"zp`$-/-}};&V<*#ƚ1)ðJYk*E/CROgY!,Դ%Β? `1~)YUN˕̵L[!g<l :,bDcELeLݓif6ӉEL(b*bzc"p6ӑEL8NJM6M/|4ẃtCb]R]ktatk Eq7Z>A-:L-HVf-Ѐex;Q/utg1"s5uE6"Nf/bىݎo/Lv1$} ZZ\k8p y(?G2yS*>nn.,Ś2TRTTt&\_SZ3)nMLgoIl%Gһz1o#|Goת,0H-&_+x6n Q"Fa<\>iU{*ׯ1+)j?m83K20uu ?U ~[t>#͍qLۚ4 mé5J-Igx~KSvv{uԟ̜ofp DWa&H,6 Kbﲛn⦦qy1WGR4LcpgŲ_g,]=W뷱atkA~RL:~nPݘ̅؟a7IVWlMghhc)7DZÍE:fzCQz_Z:,5'[=1\3")Nqr̜Yz#I/N)4 ;s2{@wVs8,&KpHpq~[Nɒ4oV}S(ǒnm3YtIH-HBa1tIj 7h Ϝ[4ЩWv*IsZԵDMA:gHRSX{mH!.I"Mc ZU;W$ɤ!QV⡆P::*uM23 f6@\]1xiԾq}AQ.þ >#g ,}"6<ԕoN0bRyGFhC'b5Eno1B$]*=uL'MpBD D Xx('5\wR$C:ɂc@8wpv1@ILv OaDq+>r"?Hl( }ëKuEJ:FW3ckOLv<z`dM9i2^:b%^4rd#~41ʧq_Fyu+0"p؎ Ns`>}J ~cWӂuɵxhFDt:;|4AS9^fjFXoYDbÚ^i5 >¬KPbKfZjhPaa31$e'#> B3cDSYy9vN#y k7|]K{>RZLfDi2ӗ`2E +A@Ƽ\ XJ:ܮYWLQuL_u xIyh)-Hz DC;}W*} 2EݏJQ>y~9ٚ/Mo*K3_&xWґ؟V}э:Fb,ģ")r`NT+eȽ 2.3!L+ A4om$Kf"=Cn$!s[bUkX7Q@]Ǡdd1e'&~%Y1j[gL@P2u3FfnAp -]p6]u S QĒJMO(UAǢ /KIlQ9{yuf )#@ " 5ČEWCZ P (g!;ϚVye3oŬX6kO#ZcAۜ!|UmKy{ >`N '`o2H2X_BD[>6Ay6ЫPA/[/Vu-Xi|S[vbDz1r`>\b+J16=ѱip%H9x.w*ē>4cz+O:MuRB&R[]sHoZelY2%6 lF`f]Rsև[igwf\ \Jd؏طiHľ͈cD=E7MW[MO Ӗ,}*Ep/M@`^./Ӡ&wU2EΤ:ܑn.:71N[g1 iFhaw;gMxu-Y)^Qv0粛TGE4f/Sc;qH jv14 (Iy ,/Ӱ鱌Bc|/P6m5ݑBW3y|9ɽbUBw&Ym\=kY.!h~M3FWax #싟(I.A0ڵYcvU 0V'9!<4 "Y]s&ٸeЏBŌ+hnJ<jɆ۹zk}X8Pr '=!vSfOrؖY+Dk_Rl%\͵\*JA9@^So8&݌`6 >W*>y(ר4ʜF >̳?Z`ƂP;q8䋡\3.lZX~4(0_6x:nfəpAyZEf7_nd'C~ P 9fGGpZY6͠O_s%\ߞS0h|3%fJvr A+젴^^OK)Io i|w]7݉-Gۥƽht Ū"(m3u4gK5|z'G1zr$U;lj+mE\ MW/;,ѤEل^H14vA fſ+ΐ7L]pPw; c/üXIczT1A1" X 쪘_`֑Ru8ϟQzp3Z3XIj% Qnm*00EБH6XSO1IOb:HH-gT?Ld_X(w7cE[:k^lX*tm AGKE#XNR$%H2H5lE/87Ax's UX{l{Y .Om2D,5_YuL67_SNƕoq^X-7x+Jp5n*Dj!a]lƂyG#xL痢®C?G!Wd4}㕥lvoܷ p˹s;=S3ajMPw3XÄbt[c*DdѫBt1XEgN UzUpD5Yu4.K֣M*3BL+(usEBm|^&alS=9eGbwdz 6"ㇰ UEb`|ٖN>\oB7^CXmXWdPv$hۖ؞/_{*D/]`/Hh6,Wc6ԥvF1q2\DSKퟛ̢`-Dsb h\1؅[CX!Xta^Os؜U>(0Q~fF)EE ]11ޕ!~ݖ6$M-iЂQ)P<~HBq1c:K]j CߑF;x^zU/:ڥU@HFŻ-΄^KޞWUj^Qװgp5^JRSbemY3)DřgZ.&>ShJv(27gB0轿x hpْO} +GcƗ0D;i=&═Aߑy`~MseҰ2X,$'c 黌W]};@*LɷdL$pPIlbz[ 3*(2{ A?gb܂G&h'7!ebMWHRdږ՚6 PZ9LiPrL N(&r\͹YLCJ{4h/Ā&G=z`Mni3NL([M7<ThM?.e7Cـ>too`SPd-2[@F7ʿif8T4;nޡb4.rFZ[fru8 BkgFN?PAp"xcx6י]Jmf<$c l[$"=]Н(+J$$Ej[t@!>_Й3t%ɵJ MáئQP[{sb:]FkJQ<yʩE *7 ?;XSڳR1_2E%%&rP`-q<= ْx;xR LHM.oAwq@ z(BwĔ C~J_umbRW]^zKW2D"3P2/%y2aEt\n^[0PJ˅t %/}Uȴ¶i~#9xP9H5qk:NGi EKIP!jݥ&"1-PC*z8QdJiKwmJdNN3?-"BJIL_ub6,DKF&%$0m/XxhiT@*ee35u"}p˴]1-@ dwc$}_+*=N@qdzPvIjݗ(eLxhf8.g@hl$*`\&.;ˡuc9Ny{ ˞=@hbKEJ vwPtPLuwt]gAx]*z]oͯ7:g LT\uNZmF2' jh Z&D K&$ T5Tq *jݩXuj=w&(ps9yĂ GL}o3R3IRK1ZFiKϿom bFIe9q$|3$3MӚ3d9iC>5Ȱ {̋ogҴ9F.Lk{W (1mhFb~c C-ܲ}3k:Ye 2GED_iƲMQs- s*-9A>p˦9Ē YWˍUycK#61@< YYGE8J`=m X-9XT"!XrNϛҺ8\FO-^CϹ< a _,q rd`Tt\Ԛ g ]ۢۺtt 򸝵غr^Zaw=։vM֪:E `c@jxUo*]MZK"vЛq^( WvVfAňOsT :QǻjT(Dw*q!^y=DrqaW*a{#%=ÆT|Akγjf+ |"/w#E#))Y7M*4v)`VߔZ@_W790~|8sBO=V}Kg?sG!y>YB/Qw*m _wְL3N`JU쟝=^g 1UWg^dYvUx ˛rZ_Y-L׉]5΀=[<_:2<J;:tR $ ~hDH`]+]ڍ~q,+ST 'L\9#"ֺJ%XMj,H8HVlC\A? m>Aq<塱/'ȁ|jSO0tƧ #XTać "ӂZ7{AM qI>BwإL˶y3~z&_31D vyFq{.}k_pV߳ }~U;51]l1unje~Fi sZzg܁{ `ڍ~oPR?vNwvcZ<7?њaual|J;[ 7,44Ҏq?M[aQ(]9'0Q8J,~WJdt{*lK8Q8#_ZG4R.+d tDSV\r7''f$ ۹D]=`Ho0<(^w;Y)!xc1 xFz5[kX=J`hL_F '=6wQ"TBMd;U=-0ȫ¬YE%: T/sg(Ka,Xub8J#й^R5ļvuЁ6հEyn6, @,&S Иb$ԺicA;?<ٶ[=e-~ٖJV%]‰bı@ n<+ebxtS͟#-Lg:NBKY#[4DXcDx{ɖp2XΨƪi2!JsmHN\KEoX( [!g"ɜPqXDJ@dSL Ί 5^}{2էqV0А/7̾^-_7yddRX r/9 ]5ɉ}6D/iz-f-GO4֩FceV1|,{OaçS8 y4k 2x.B:Gˬ'+"G3Y&V"jS_kK0,cX Cd3d[٦@&v6.Pa`b=hMl_nX|]H՗J)dtBb^>8ʅkT( M(UfDR$L8K˔O/w(װknwك# vxcGZS|%kmӚdtj>NRP( ȷ0höވkVuD?K5"RkD/#Ž#rmD9@.k=";"8r f&_7"wgV~Mص(b8?+4E:дִ5u/惍P_|<f71._2T.պ8 Vԍ5]E7gxK" d=)27!3hIS# B_hwA% l[ȅD4?/j8V?hht0 ͧ4SD۫xV'5*B+5g2?WaaۛY#љ>e푔Z]#VFDz&}"JA쏷4VAuxY~ED{\obn!I{,CS>S׻V֕,_*;] bJQ|&["C̪EIL,(s z=8mH#ZW ˜t[n7yFg8-8ŦOKQo%Wq?/Oly\>I#5| KO:Jh_ػx2ԅ:%.=C0XmSuOcj6qT,!ų,ȓt5&).\ݹE \+y x1òԕc 9e") סzqT\QjR"cO)(TȠ~ĠRAEg~goTI OCGyc>F]RT7\cJze,@?5q;tGP^/5,G+NKݸWQ b15b9Sd(1 R@ʶ5p g/+LeHgv曎Ax3@귄XKF+"Pr ZLލb. tVt1jw%t]C;.neO$kY~Ul`[~KM E>C aKZ|U@]s"cjCXy=zy7MĜ݌r(BØ1ED-JBY%%.X~@G=Vk,`X/Z1hwϭZ?ŒV;"H&-S˚$6sq @E)G_a-ǕPiqEL0sOho) ]:`1xDE=A:NTs0&x<<Ku Da؄vTg3;5Ȫb-&0"(sGY8NWqjaHᆑ括5 |X P9[YPle.T䖡&t0{,8> 1&+v*?Y$fg"y{r)x7R`+%Tveȕ⛊]Jktn J\-_̗Ue :򬸻Ozw{Zקwj=-'K7o KU:a'E#Z2\V\RΡgO ʳMZC\OF& X!r-:+"xsi$A 0Q]c %G-=71Rphe?,,_>m2Q<. )0 1Hb|UtxA1GqS1ڊLw!RA؍O\=̤XS}Kw/5, ʉ$ -|HaYK dжx'$ܚc5'[4E1mJ0hI.c&I2z*Q. K ^A)žrbFJ \㤙 ?"6|2Bܚ2v!*%DRq]ulޛJY_im`"]yĥ- L%/췎mDF WTh'ؿ |o7H[ ΓT Hk7覰ļ4-T_aH΂O H/C ?]'n"򤢶Ȋ7&x*ZwC}@2 F]EfӔMiVg1uqٙmr4OAZ'n.H9XX|A.zc5R Ǎt8q=Bv;?qw!~UKqKzbq ^B*gmYݕӈKr& ƩDZz. #<] v"o+b3 LKdݰcK#\iksI@e L.5Bt.tYgt`Bw?0klM98ϖΒ,sx BɋLa%5U6 4ocoRD YpN:&cxZm# dȎm5 "VbVRl 5x?:M@g%ĵ ;.XWp*`HY`pEyeDNusyuFlG a~BtOӵ:tiڹKeזyXcMN1M+Ct}9V'Gu +QdW-/.uv 7م:yַ؛f4AnYhdQ&g^ t("WUWX`AV:ę<4XnPd2bx*1FCi[F)DVUb(U.tI"xh?pꧢ4,Ɣ-u[|1:S)_LޤTs2hR,*&j*&9-fܓ)&O=Jŕ/yT_ij x/|دXI:qKRM{SM[Duk2w՝ 0t^e0>2yǰ3G,*aT+a v?|Y?9b ca6h8C.rܣHtYx BYe%L?}"aOKܟ]p,"kg>SWi>bQX` Djɰ2ds[AHl2|PT&—P,bAVkۍ녃Rqx30F*dPD-Bv ˜ThF$+d#f.u$81|F|PڃW6maRa1e/ %qs> _h$kk{RT=X˘W+ǭ<{e{m8>Sf)1Q#Yk.+.ˬXe^kh{l!4(X81x 7w[(qb \ CF ZWrzui 0u.$Rk8Y 93w@[fn{6ua~c˴sґ/ swƆnGY}[z`JoM̬ooZ?AaWk{S}jx,L7ϛ 6'1$\?l>ws7f~,HHgA7Yq7 :|ʷLo-hhi>9q㋦ WPӦ p$yd| 7d|MstsId+дH7wi-[[MJ9>߼iG671 3wPupoתɝދRsF|0|}ﯹgz2iU 3-V{w[C=9T>ab"YGd5{́n ے5OmlK;J.-sr[ÿ ݇7 NLqb(BT v)@Fv<0tisi qU6\|Pg皘q(xs6pqV-m=4cCYk4=Rk;J=Ű$:Kur7hs_, x [!m#{ 0ܼՊ4 /9wƋ]xѧ{SOvLV}J%FEڔocTx~Ũ 0sj G>N0T1wo#oWbVV'93Cʭa_Y.l{/JWEFr.OWy7505!t 4IUðUE 2BQ?N;Dl8Kl_yÿǽKg1SM*YKn}V新ڶ >Z"K?ZTiTp1e8[)M|U*KtL 2HlvW#8 w=YbbQJΨzd֥dE=7vF0l"n[ /S-jKeG$n敖V+L{$^v.Πj=dzHo{;KDŢ8H!YKA-PegaUW@(vx!ۄNhQ7t YvsA} R+l`svE*9̩ɷfx*o lfu+t>ggi UP'm PaⶼO2!{.>I?7ʷrGٝޢ܊k,Nm[J,E[^:UZXQW͈y`.Jl/08xç-y?6_Β]M|T]mΉlVrF8HݕwKɰ !6cU+W+dTb$2v{2AnZ;HavtDviyqGÃ7{J{@ u_Q-@K:xXஎ)5DPFn.6vh_"tH"1HdF1hhkr5P;d]>Pw}g M 7jK&/~,pFo!c -2{uyRiL1Q|)n/0 !ȩHt|T PEIq}z2$ݑf ÄL:Pk0M{Xn(}֜1Jy'G0 XrF40uM̨5 8pL=x4C iHq(٤[a|%C ?R[#p]N{'!0M8Xc ɼgR&Q-{j^_ ĵ:kMJǙ 9D(~8 {Ջ"NN-Ui5F)J;dnWtTv~P$ }Y2I.eMc'DL~fI/Z7m]:7^Jبϸ=a{+,OW] .KWQoVڵZUxCu 疸?PAFL7SwpweNR>tA b\kEy8 ~=Pd]f1=bdNY ᬈqL. jMa{Acm@]ݎ ~FixXv,|]:ZX#۞n}Ց" +J .lgArB:!3BuwXj|,WfQ67\N,y; לQi(X-?r$jnd2/ -Z׳blm#{Yje,*sF򩰂_0=B\L?d(ȳE96rUCAa028YŬZPgDRӦNE%ċY=U9!.B2 w=mzZsSݯ=mzmge7izFg>& `V9Qh:I4eʹn` Oqv-Ncq`nqOx})Ւ=TPZjZX>s6QyDUUDU񣩨$Jbu{ oTUU w[.L$İ z]\ɻJz F+,so4=6v\r4jO\jh6k­1qTnBm1rgo.'VL;+%%rY|bOFk:6KxOgktRt70AM~RbڇEPymcl%NFeНu.w}̪#3D,pH]&3] ٢Ӧd1 R?քVu?Bc^^^O[n%J7_IW"}uq<.nI&fՓ9'&rۉqGm|qжd-O)b۰:UC91cvK >_c=iZbP6"rc\i7GՒnIH{<~̳m< MQ-0[~4^$?WtLV顬!|Ì2C+`۸-kΔ%Ta~ 0UF 3JgOϛMR̐Wxn~>wSDxY[ ><ߌ=Zd[y"ːtx[~c:ҷƿKMtF13RbbE< mqaz`?3`qSW ^B\`/5)!`֒hXYոyvڭ]0i_E܇ wen z50W 픊 ,]pjDAyG&"ٳW:ý טpn' *]޻{^ iCymǼv!QPos2kxEYCv) x9Š%MyZ%B{p.p]SB#u6(69"E$&6y۠T8J]VcYKbuI̕Mf]bU7]9,O5Mf8MD=';ަW] f^uM񎚹^lǒ稙n3v3WFz|nf;q~dR+mjPxQsu2yq {Yd7ukX'LDho#^hLh>HAe0ZJ* fvf/tӰ"+5b{b2Uc缾<<.a:Pb'}f(ܗKG?.൰!݂Xq'zrncsqOB1l 8I}dŊkAZF0EB[%MuPMl-pheya*kew3˖ 6(˟qչX= En-RT}7j~`j$ {m]NERbi3wZ](nj@ *B.cNM>N]^ٕ `5؛mx*1hWiZW5 UP>xY^pKpY07JgO_qp%hڈ/]ro[Q٫LjѸe+BA^Kd<:8N7NL)+=n芌7 3FJk3C.)NRW깆oTF7Wϭ` enXA iԇo]yZ77CndZ6A nܣ">0׈s@AJ%7M5V@EfiFTMn9m^ ; ,&/T,{mchY1Hh{D_=Oua*D$?je@>%BmW:?/+<7p8"<1rf8#!=ܩ.{@ASL^-Tq1y݁/Hʍf;4<4۽ .ם.wnO)s .=gNayEo99umWb ;R(ڻŴVG<Gs 1kUjb8[G@x-nW?Űna[v`Mş)fGbnLqc1 ΒfYk1j J{@cS@$"(j$zXv l0 Ҙ_/ h`a(3Q)QJMBb41xwmEPEsVfj|ɨ T)-xQ5jϲ[=XxH I}+*h*JW6m$ʰ8hHV/eb5ڧ!gLNvE jze[/ Kᣏ}4G'9~N{j3QxEll:D"XT`X+1QjAsr#+u'V3>  Bo3o ֮ c5$Je9f lT (P0[xQK1[] d#Rʩj+1b2alX46N|zJUgFlX'ٻ]P{&7ưU ҅`c):_g[ `wp߆Q撚:2m!nBg?fTɈ8[zJ)Y͎02Vr".שޛqn8]L$tGj!/f66bWnH22Ґ rNeNRAR>ٗ繠:k˶^POkfk[Yq,O@ǫ}3ibbCq'ޝΥ=PS=Xqpe (b>nI4=kM1zd_W7 Ŷ9_#6/![L! <)Ń(osJpysNöbS^gf<34ŲzH|A❶>{(tX#ΛSB9EbMvȵuc!.%峴K7Wea>N?>;4B4{Y:e=%x0xDSosGK,[3mhۊӒܘ.gp𬄭Rܟ%[rMB<C'qGl!D+. W #$7Ŵl{Jp\a?'4qm\1ۅM,KlW9CBV=b*EG>? jFaZć9X& Î2&WdM c1Cxp>c)`6;x?gs{VG 6X,0_9 F̉Pq91m㤽=e}uORMYkcdBG+cnKYadL»zk- .B?qaG}(Em0B % r෡8?VsXm5}}R}0Dc5H}=[auWC2Mۤ3wށ.B޺`~#a:>چbp5ma^~YWU\e|{ 37{?Vmlzuowխίz+ӑm/Ljmm}|,ԵYu_[]: /ί۾kYw꼗9~nwh~`]EjYEú~ods(ؚoZiscPܢK>ź__]yVNXW87Hg8v!}k*2[fNFoi='1cڜ3sG[?zQӴs fW`D5 r)+nݾ•3[<3֐Ѓ֤͝Sl9U$7WϷ`ZsCc}}bj'L$/sQȐsxfYe0&}vbdsG[aGR Ig~Z0]ӄ}K c >kvg7=q?7O,hVwM&&q݊Oɲ譄&ㆃ\5l&;[RGzYFm$ vVI.f+VE3;^sgE2.>[aOzKeA{"#Fn~3ѐO"6baAcTQ Y(yuڗtai%ƍc\v\βq0d\HVČ=V7ЗnxF`^HiҲ|\&N_jB1qeļ&f'r(F>VV2| ^}/?(csg&DðeӮ"g@vxN UI0 UY:nØO WxbiKGR.MWaD@#ehh!݂T> 5UIG7JDvնPfDVRRioz1Ә8F36aL 4Xp1R̍**с̢1Th k ^8qjG쒿T_1_ ҁ708\.łfSՄl5s o6F7J&6xW4n,2mhVgT~! km~T~8$Fb"k1:2٘ ]ۭu)ȎÉ1q3 f[CB )grù+Ä:v`xѸc ~A*PWbȎou׎1]Gnn@#Z# 4&툰``wp38:kL 1u')S< ԂD)ߵw`QjбC5mz˽H~8g$)u 2eT\}SsFd &؁`xNDemSd|Q5>FDu2d0ېזn@ Ej[d*4)ߌ5$pʰ澫}~^C `_e0CqVg${Xkbݮ<uv$wc1m7~oҼ眆}-Ӛg>rqN ]}Ez'pmZDbtomQ]K[ך^ 7, @f~,䚟 r9ÜϕHF'ZX޺鵑6iIC!E uM0YK+"ϑ~"U|Y¿#62ϵИ ,KW/Sզ_t7&?%3HZʑLd NcڛQTPRDF,VvM0*1byc$Q\ϰiۦ>eqlᇙ2~i°*[7/g>gAܸe XQM ʄ7{Mjdyj'].簉' q:#':cGPA:O5a1 oNކ(>j7`TxQ]fDayFNXŇ0$1nY!1F8.\V1#,87y_sJķ!p1"2 L:"b)+PQŸebdIȮ xA/)qRUcMa'~m=se;]=uXؓݺuހ'kn*ciQ>\x cu y&)htR 0/jNFGrdߩ|U-.y7yd %f, ą<蚥7Zƿ |qJԠ9A+OֶuSŰ@XEx %~=jyD LU C#e+}8p <_2Ԕmdo6(-_N@aSq ̎dmo-f2Եa\f01 ӛɀaGn?f 3rx6)VYF}1d\wjFCH%'&SE}/u!'U XgxAV:r%0Lm i[C#m.FMdG!wtmwt )*eNP:)m FEv%dS4EDrCQ"u~t8Շ63pv1tDž 81Z0A2ı ]0r]ڔJ\ Jo% "cD q*C!Q[إG߃^IV}GcLQ$A5I:1kPluE3!^ض/LI<$Dd JHa A=QňEK ӎ钡i".UܩY=%a:=A6̥ߠǼ:O4[N`ee!3Aʴ#c˛hRFLT4 (}{k3+zE>qu!E] XZBJm)*1.gƍRgu50bnϮ;{Bz?@s D!@3lLp$1%e*yalS澳M0'=p Ohgge" ?yf ogc*YcNB]F,e2³ň-w" 6=/ _& 7G H^z[c_w2_jT<ݭvy*QkWaNaxyE>^憨W@&aIa 04Mta +\]pEpV**=99lNt=uԩԩSh߾}h`tѓ"gkms3Lq=F.صϔg(J/\{ȕ |y\e?(7¢p{#g0,o~ej|A׌7 x3r`1cV^@'ȷ?gwUL ڣ<|Ŀ_k煮Dcs=X*9<ޞcH{"\,ySG0% ~eSM|v"i'R7=Mӧ?DI˧GO驦? LKg2(˧wH%3*j׎W7Kro+o2=_FKSEǑ%ܜgߧc_9ay{\3Fm}v&˟ǟ]aF873V~f_iFRw`|i GQ}W˛\&6O=o7!&~|,Vе~gi;|t]v">=M_*_++=?§,ʷȿATӟ""}J?ME:[QO9ڑ>,oOr`]7zepֿ5 WPBs׷;뽐|'fNm}P6/b[q4wɆ^LܨQ)F^灞Zrcb>tM^ԌWYw|_rxB^,Uܠ.HЋǸvERX_'׮vOg 4'ʯiĿvm6 #T~1\"oWqKiAW|r<8ߣkmsZ6%_(E]}q؍ƯFE?#J2U9W~&`G )S7y֓ @MIA7O[sv, 4}KP^9yԀkϊ` ן"?˷wX?NHy# קJM.L6\{)6+Zf?|O'̀1ESI_ؙE=hՙ{&m*Tۈ[ȭpeFߠkew Z|pȵ7.m4@ܺ{~g|UDȤcvmMƤgggm?݋/Wahq0|Ӏ0 |48&wl2 ճ=Lgܙ9vme$;;ƒ4}=q۽6fu6շFB78n5^o4{q>-L|ŲdZzOWmsZ:׊gњP0f] k>/yU1o]5ytw]ɓU]6~w0|~L.r1@.wPďkb u`mHN!7ڧ3/=j_Gګ=ąz Oq׶ңUgM$N]/,Wε!=H/4[{\_qCڪ{I-!nř6N \CiW^}I7_(vJX]ŝ$|*vZ|G ݯFRǝZy)>\[#^ A$Is:%tM:> ټ\zbg˷ӧ7[ hڧ7RvZze!{[p}k~]C|>~\kVF7(j~胰]kl)]ϴ&h|b1T8_ דRrUc?ɳdi$2tn$uzeI]2h>|sab Ov M#wYM[/OR)jh\؆=l?C99H)~RNʱht~|ۂzbYZ?~CC&WI9Y#/G|hǨ%=6롵oX/n_qy>ݺBw]F7Cn@KvjſEhUt/O Z;E#v%wX7w-+tݰS'ፏ~%wt0{#Ê@OIHܮ NCHr|]wכkI ue{\zt1'~B'M[ֹv>ЛHnG?q>\&a-~x[Nq~e8yC͛6NO"hLYaO~ r>uqSr5O Sv$q:Xr5ZQkbjJ"$'t=\*ƅ}=P7=9:z@er=nVuFD#;ux@O!&LjX*!s_˜3\tc,׶NEټGQ)._KLeLO.trj> 3I d^Fy_%s?~MszTrS[T!НJ3:!~cMŲ`O;?E.=߅| W==%J& ZF}~bK ]?N*Sp3M/%7V棙x$JўrZˣ<é9xJK]D\hk޳zt A?%8k*֩ψ:BG-~-ps}.i~__9Weٺ&j^ii_qV_zSg6ANXSzЊ1G8E΃u7_y\Wq29n´^~Qr ͨyz1{___q_Ac ;bF8)+ 'ѯXݻ=Hճzia3Q;$EUQ4Ю~\b|t2 UTaM| ;sɵ2.8;# >li,h曮8c<E@-7Mdjhsqe09\L(r>߆~>"F:Z]YP9Vz\Bb礙\0Z\@[}ɹS'#W|Xy=m#^M2PTOB3m7w^k@zۉ[Bozke 5IސzR.^)!AbZpb_q ?wu|ȍDK Eэ%?n0fd؄QWM܁0|MO8 17rAG7/<@k]2}jp,N؟:'鄳FS9N{Rһʏ3G_|7TI2*tPX-=!7\*Vj_x 7qhlVxC2`Ec rHs&[{&.Ci^آHF עBf|}L(]tͳ]l{{+@tM^w @w:Y4Ln}%[98*p`vU 켗| vuWP.8bGzE55=əZyˍ>@|͈]F"˨@bU  ƍ:};=Id>8=3FA^GsWEtvk y x-^3V0STbhcoذ £b&q ϓɣғbZEs0bv*nuz8ѭ۝dɾs2 I|hOo$? ɾE+Yӈ~t;7zp_8 0~zw<]MD #>kI sWqV'J=XtBIY~|i݉d9_QoJq?!.*p>?{*| MTI>v,.~NmA;Vktz$z+ L/OCX@A9g!+?s}^u9؁@.8Q1g_ߓNh7>)x VS\~ {HKlғEjraq}%]Ojv jn'# r=m?3/%}h( ENiC Q񽿐~hwn\t 9VmIJ@_i 1;#~zEjiyvN|nWr Pmr+%.s9r{`Al%ڿ𼼁p0\GO_ư>[+0О0\)O`XgnBK<ЎT~+SdkyБY[ },8c)EW T\ܼGPC)roC&È`%'& -<&\׵ \ q;F'@\~cеgM^D;4<_د}MtU_3mmv$yJ|1JPNI,WJ؏])=j){磰 >峉[P,s} z.q-؃1@~ȏ~ ?KW8顽rf: Qr jۻ'пd G 87qO_HNpm(΋׻i\M>t^L~>jZ0WAMKx'>Iu^QJzyMnt>.[7KXnoA;Z⮁0UX$BDzHq-GU27tN RO mV_l%*שb/H܇s*@TƢ8V1B$2]TFw_ ʫ˄_jґBgMԄUas2a7L}w8)|7,L|W)gyx\8GW1aĔ^St=HpX!0"A ąɭFw0yӈq]CNPl[6L|wzl$Y#35<\O'NooR8UϟLYvMse7W^M~]eSs^S&߻eL1VX\e$sy[w!@x/G5;~V+mYG\{ݦ &ĿZ5q㱒S#.w_|}H/ .Á^l5S'qAUӤݪzHCHng~O0- Mr{: M\l *oj :4[6|EӃ.'K{}w(\D-^@䲖;b֋gVNt1}7^M^/0z/%ʥ~:oq2t^|w<blr7& 7&{7bk_\>  o;0[z>7+_M.d]vpܣ??@AVNLO{\[/Z_N|Ε\SBMN\oK]tcpˏwpK>/0.ʞ:N u0\sc=b*Ѿ_9!5oV$ЎւfKl*f{M#tK\~3-N]ڙWa~e׋h ]{~Bik6>>߇/ |*6]|,_ڋj?O/jgpտ| zy}颃XH׹x1J?OGIOŸ֟z70}n+`>M?F\h?m2U75z}Ņ~ -9߂Z_nz#WK ؟v qEG* W!xUTʴ;;d_ `}mW6v5ſC5'gIw$obP No{>[N2~{B9 IO+ծpI?\&xE^bJ~}k_qL%>0I~yu<8 Gjf>=Ņv-:-av_WI`^ }p': a.QZfzט/ cxΔbM[׏\9ySN|?Z~ ڱ (v tOau7>;y-`;{֟Njyks{\s 6qnFi5Ozj9O,/?JsNq:dmbm~H\x߷lkk5uw%)=;2I E|Zf11瀸t8A*N+į ^~)~#'M@ vz@a\cTtnқkИpa۽Ot0Y9Ycr~N|yȑoE , 8lO}8K!1~{l\F[55aL|[|r8Q*'ϡkaUk<=2nk^Qi7iq%y֛ą*!*բWj2(vK:|;2U ߀È ujtÉ{vkOmmiu ^P8Uc}cd~5I?@3K6QIon.=Gt4; ^L̾ũ[׽Z 0}ř_(y _ =-3ް^)ą -VB{r3 )&k|~ýtg$Pq;9 F&A6/-n¤9}Ž!'.qqsO:1>&ygc+\Et-szU'AT6q߳m^e~ HPxp߸@SnɟfBM` EB_ڿ97Rc,Oق _dp΂q׺9JWq=rs`0~#la\ U)v@|v=D35E'0/_c&:i*]@osl?q]1Z&cY`w}h5qr/'Qlq6nӓ{F0n&'ʀy<_g-<2f^h).ootZ}*ĨU+ p눳v¾ez83=Ap'7_Rs M~pyqh(aWٿ8uM?˃~ZI+B U`5;OSM8Ӎ\_&crG( >_NaăF8pyv# p%AB@$>|Q̒_H/OTr;2P+jSR\M2_Dka޹[6W-/`Ko mz[*cmt Y4]:G )yW- gQV<zl;Gm*5] q`vn'`#nEw}0#5xj1m.BzST5`wI`$[<' ?$~>.ivI;9A%So?#^{ޔSox]\XSo-Mt|07/\O(ISgrCza8D'3△'w42fiӋ~NzuO\͟ [7b- ww;7w+CX?=hVZ4(X;РO%?hąt*?G>>?j tugzjt{#>?tzN\Sݜ1^B}}ltt ~3:/p6D$@NF+s/A+@E<۩0@o(Tʅhz6.x/pqI?#>k\cP\^+wnz>!1bGh< ܐ/z^)%؄h#G|xԤ:Z'F7#ļ5sAonWqkx_Ğ#I74r=ᴠ"~lknn~Ŀ;d<$U}X9BnZXp>&+Is%nsޞ|jf4 zyGss~3H/ԛaڝop5ү+3I/<`ߢC!M鳈cf5U%3į cɩX|W y!a|:RpQEL&9{\Wqᾡ?I/+Z0ner2 k)|ʱ)+6^>,X*zQ~YSX|4Ќ?~<͵/rz?!$~4/d!Z ;C7O!~Bo쁰q7D&\z}[rSbJ.kJN|h} m".֙H~!(ߞ%7sэu\FOc\l?Jɺ}$N7jXZ>/v΀ҷ2P~b6jn.'v?;YD`;/?oM{UKot&^qt z$נ探+WGzt?M=G$p6A [?>LA7-ӧW~l|8N[nKLȍ>_ZҿP}89Jz8fY8~ܵP٭l?f7\M.r dn<[`?E ~ WE\x>2|1w~F) =M\N>bn54>nf_'[`zpΘj8ցfi¸%Tn2oԼ!>׏qO*Jmy|,D@x)?Oun!.+]I.t+Mz|@|x<55xD7\˖q ׏\ DREu9Е]}|aMzGc?ןV{@ J40ei69Z 7&Wo=KEn$6q{VƭH^,Lw\`L/|&Gxu~L8+IX`k7vB\oɵXUҟGk颌Ic"nҹ8˄ݴk.?`]u?F[tM${#<&2 5q*' !]ַwxwaVu.;UVRѽ}V7Ruo4*`?XqK延͛cŷFV-H jt%Ymµs>w9@sqcxf1]MC!ϒk@hu˕[/?:6_gqt>p!l6rzeÂ|u #Z;񡽿8 ;o?ۓq*]A(|( 0\=9XFJxN ƒ1]{ګs_E!ҮX^-}gv0qc݆akSt .h{)oMO`c N RN.ɛ:x/Dnon=0O) 6+?rąn6W3Jr~ %7}f{z="*@G\ -/lnQć~-T7X} :N}1O5W\xk=YJnpe~]|+ziW8<ƅ##edV #ɯ0b~ўr,;4=BT=yl ]F\h' T^pN@;/XaEq=Ņj !>{vT> W8Џ~x]r=|U`.grW\xa,,9;>Uj 1qo  7}еw7'&|itvDw4 uX۝atx ޮ\5?lr?h'!\X&BX.!.|wv"N;8m~ב\4zQrK\z(V Y&H}.&!Sэ2 +}@`9ݳ<(N^x߹3A|nU`U>V~g qy|AWƼ]t}L\'ܻ\wU\."[NtlVҽ'_jʴw#wM`?>K5ydlps soB\-kqGɛL:,zw.&0^Tcxt %ToL@ÂYޯ#j(-[uA; ד*pZsgIUztKz Qz< ^6-95EpQ^o|?:xPD)\R* rwڣ{!/WSo {M S B$yMVn~*knE};H>_g:j3g8H'Y ϹfL !~$q]=7aTU_L|^%7#Sh~9Vl0KvCɓ;+#ح$fIY1,4 Ep}4K?f'P VQ^wӬr__s!/e.V,וaZmmYfG*Jșp6oEol~J[^j |q{wAn6z=v#b wr/\HO_ `e(.ܧ4Z2\A{ȵ]{D:j,⃥4<7>RMs { f0YN}WUM ?zƁu%hg=O1\k{J}-wOp-quzؑE%8 շwqCcބe6}?\O>;9jzgۢ->9>kF}аhLj+D O\z#i?Z< ӟ|lKjOOiRD1M>O8>fOcPhEW:+s3]X{SaD4:itO|Tu߮n_0;ӤV~6mqz}kp~:).|sGڷ8\Dw^A~av|#Vv5_n_KVn]kzk3R<.`k̾|}M!?[yInf#G.K~r4a>]#tV@9)\*n)>zr_N,GG 5=bK~-;~_&+V_OkYZ8W\Z,5k" q2p ׹w6QKvЅ y]w q{mTݷ"]ir{w(nGܞEpys?.YYi>>zÛ\@/M`.ZbZ};/7Aۼw1>?5z?{D=~ߢx/PGr|>jE^&Q|^&QO T%,Jy@Dc::|LӱM_r^"gH)BA̒e˟j#QiϷZzW̒; KizcK&K˰~ }z6YzKM_^􇃸Ч^rޣ9l>z,~IIOIϖHzv4U~_~N.^?`\j:G8uڭLzWܩ!Y2eңK/hRˤgˤwI.D\1M>!nt;d:\;ٍ?m.Vt3%7}bnکO<`6훾iz~NRB:W? DYj-hP?tM_jj?K (h5}==8^d[JM5'Oa:z"|P4})9~˟i!>;>M]Mϩ!`[ΏN|'KjznGi;ȡ$^.zc97ǥ[nwKU,o[c G~no,yV(nuK˞/[_B1!?%7CuLN3S.H碧' +]{kG0|g?GT笮|H4aGkpy[atG񁽳ukoYҧ%7(.+>z=JO;Wx:JOp23-Kٚ>?WӗWt,] g_gˤwI.[&D#zƿR-v<ˤI/n|FDZ>v^{~ !EWÐ1\Gq2%mp=D%ܱpDd:0𞈝c0djz݄? N,7_/1:~M&zqIM`F/=G/'0j }!|Ls[J/4]Evw4 B d|4=]L[-s9K>淇iRaWӗ+'zY j"G-Wod٥퐭"=NjnTݞ⾎Jj=[U3l /nXֈjR.@Zߩh4\@<~]rSh$:_㬾{5e-KzmzygtM!tj ̝m%\\_qaᡟe+]-5]5En/frJou{=`5̘@.Y͗l WNJ\;QݕFwS?u3O/'Ʈ=ct;gn~n qa'#"/a7aT\yo&>{޶z/eĽFKi!W/Ix>w?1?b:Ar zBcFcOՍLi eҙoI׮.JA=&{}Ņ?+5| VŸ HESr簜N5E|׷0E|;! /̢YGOW!~YyGg\>XJRlS{WA8Z2>:ڳw>lUZY? ]@|x_<\ Ͱ ՉnPj `vIć<dݫ"7㨻tEu:t ﱊFܫڲg2>OMī+ׯxryG7O"zHr|r+ܾs!Yj[8A|b7̐N>nB!T@ΖHֿΥX"O7՗`kR!OX|x\Je.ҋ߂Mxr A%&knI6bg3w~p1W Sx~f }=4׭J_qNE$}sGzr|C沅xqZqH`ኖWv a0smyB^W33 j5 }txG`E]&kuJ^rEmIbW}Π˽p],¼R \dk[^qTx|W#M%|`J\=DE1 ?H&Ǯ :aw5! {r_oq[^m!ı)6{>҂^<&Aϊ;+ܦ AV6l;C:!vi)1N|D.RO\˳OE=uIkxzFF΍44*n~K{ N m^^M_|QLZZ~".chpahT'{G"V3DUUI'T"j|iy;NEWK }Ŀ{(UEג͒A:͗NW=G8]iXHap.ϒw H!^ܞGQ؞4)ڞb\ڳ3)➝˞Wg=;Ou3~};9ݷ}߷3Xݧtߢ߇_>ot s' NПX(F~yf3ͮ[<.{8qtʤSą8KC5֧6+gJW4+_A^9˛yWRrvOqyݳɳyih,#?g=GO"߳?w=r{{A;֏GB֢"<(P$>_ӠFNQ z4Dv) <(a%<eȥh񬷺v;_!>cA@+O>JInIN?\z:ۘ^x5BoDgq Cﴈ;Sc$GY|-Q ɒURXT\;^+TrE!]g_/)7X~ Xks1o0/ۗ̌{)o$]KIKrdWh老dcV/X(??)08}9q jLY|q&//Ãtp`U(ABuq`+ifh!}#V &s&"EI`7n~[H7=:E$j>f6[@ ~ EQĿܮYv1`ܮYpv1j.,E%kVv f,oEM̮Y)xByȍa#|`lk_3~]6|EfD׻#_gUEk28s Nfj-YP~:oƗR~ɕ^l[^OOn >A%cxLjxa69]A_IAWHG.0]ŋow~t4]iOhY^wHWq/ҹt1=]ŭR8ȑn]f%$;u+9+]`ik}nYrs vf"~n9/ײոp0g▪:>9"Eas 9}agr9_$>߇ Iepr _b9zvRnBc |5 Ɨέoc:19Cm.h|øzu{hЭM@[`Rtkfzk?JDM,O??+:/>v .\/./^Fd;yV9 GӪEX1ߙ^v|hys%f@5ݲRoD,|sM2j:hr ߭Ź?˱čwfg~1ӥ ]Jh,CU^qi;d쓕6K6^|a鲳p_Fx2BsH.|G#Q]Gܣv? \{ճ6:qtf$!gb_ cJeĽ cJN!u &]WWv$!8G8_;a߈ өLQs w JF ^J}5iɹ 'I>zޙd~ˠr؉ȯa/tG|kGgGS,+8o]aKk;!'%"Rd0KwA-}$=Lju;L߿4]lAkcTПW}O] y[}4couy?c 7Xc:WxqW{9 ^WU!oWp =?۵'M}$hgqER$:ބ*ڋI?93.q/ixq-5He_HUsU9s|{$~?r,yQ=, Gwj2X7=&;k{Xr,Gc<5'>*<{1q-arώ%Uy6Γm>(qQqVՙ/QFJ݀ucDWjqlz祩i(J6OE1h Q)jwOO&٤G ~!*33G{{9 gW^U柭MVS|cy.)jdQ\,5L%_Io&]ȉUIbˆ:y5 WlX rGƷx9򦯔Ŀ6wu*ᇡ~z) tE/^Hݒof`t"q}ZݕE4I8_,E{2S~tOBTXs>Q_~!_h;5uթ@[RC_bRW]hIFs{ITY.݂}O-8~p8ď,} כ ~gh;^0`*F/$.-B^8}\q  XKq9+O\<5"mn .Ǝ^sމׯ!qop?Ը*fϭqEøl$Yx`ɬs9ߓYsD[m"!?7#@o'7#5ׯY{1qѳ;O}؇+1 Y#yɽ\iTcw+긟~J܍~7.'[T2亷H|̏E8.%.''^qs{gUVxXwÊse߫@<%l ZYx1B;m~^=ŝί/}-޷S1I{m'޷ϡy+~Ck-7eqp?Y(Ǻo%O;-Ι厴LK>ێ=sg LTlJw@6%z\zmXӾFYs¾ _hh ^z#.uwԻE};/Go'`wƾh񴫉Uv =It>A鹡 #>6$> ub]k~!SjDwBC^(ǚg:>@/%0>Hp<8C&="VL8[@KϨ[WߧjeS_WqqGA3{&8꜈ZMA] H>B|瘝{GnO GǸEqV$~;>ssij=gGYǍ*86? ގso"PȽ<bU'E+[ݹyOI' t?I1~ڀV߷KzK'OAR3{v}E_G;&ے֣7 Ai>iŽPkFhIX$.iʓ>* ,˝ѯ^9svN;GsKr;v#{a9o̐sߓ^6mě=%f2/vۘ2,woė2ėaCH-Fp鮶6\Wqq> C 4\-:9^_qq d̾ Io* :Ἣ^0.|z#mǕ֎?E,^\&z^L"78O;t> b40}v o5!/n|<m/KZ=TgK||mx& \>Ѳ{ q J^B\յ$ &Ir*qS~* 7mltٯ9Y wp>CާV6zW;iD.y9q(./] wxr#1u_wE`ŝ%'_IzC y1K;5[w{0:ԣ*ҕIiτ_tay HxptWy %~v%kX[s jwq/u\f㮐I3_Ϟ'ox֏}^} ,QQQ5l,?~ݬyEeP|Rܖ " ' c{c+ϥ"'UvK>P3x?}.k=!KM3;zX;1得Xq~kYe%"f.x=> r\H\5 0ӓ w`].~Z+Ask`;6d|~:X+`%mo*Y?Do_twl"MdV^R}"BVؙ[塊 Gm]8H6gqϥ3-,wGw@ai;\mT??9} txU?zճ~?f-u0s$ b?~!g %}{Ƶ,"7RUeu~axq np׈wL%|K~$.%ɔmd@aGne%v7sY]Iա;8pbё?ߍι[31A\Tv>H\.!8ۻ?n ſ'.^=P\pFtaahLG] _W] #Ŀ.yגvk &_?[oS=}j?{PH' |e)߄?[c>{xZ{]vwNru]^ !>WW,Z9[孶`1XthA y_7|i 2m0-Ⱦv#i~}JqwJb w O dCރgVP['=vtP[P<| 'T <Ԧyn/w,"}tpؔт{4`A:taDNbRϽm$Gkۖ,{n޶;hL{2m;e˵no@t7 򟼚U 8v|=lW\~-B<VE辆t㼍~'uxumZok k *lq,A𫑝[Wmv>,78~_L˱iL/{ F=i(7]kW7L/V߅7߭u2j9;8jp6 e\c('fZKD65MJfpY@zH) $V =1ܟ-=FqFb_tUPKA^ȇӵkkدA7!fӔ㛡" Oѩo/;#S|/Ys$>У*l"e\* flk=+rޜ.rQYRo!y .(x|ߠrrS~c575,? bqoT Wzc"q-rX@mJ=iO_%̧ߤN#.FH9@<{ =?'DF[+ +hQٻ/ /͂ y•5$zݢrGԞ lO7/FKoҽLq'OMFOd۽HV'i:/_ב~n `~7E}? al꿇VOĝտ>M9]/S[mc|)nk —-Ƅ`/|Wk񡫸a‡I:1է7+ Qbhk1a{7Go .0]ruZNJ\#s2טJJ}`N "*h9 D۽".%B{#|=GT[8#O.1RBykBXbOn#|cޒuA',Zz3raqnh\^q,a~/'a.,ڸpRbckApZ c{AJzT2qŒ}W݈*3?eVVH}y y |߯ϙ>RGxs;]hL.񧧸8o=`Dio#?LB+ϗl]݅J˸K&W*7n Ƨbiq OQȭ~Gn޽G68A|W>f$.>DADE CwH CX(Za/x[o0ϴ`m((]d).Γ"<3\Nd֡zHN;5_F|*EP TƏO7;CNP06UC#)QX?#݃~~hϞ:4|/Cwuh _m]ͤ+6y2NQM&\!h ]SL#ҷO9og{LnGg.^wgr1&dRG>/ EܓZq_J&;8ӻOo|gⵜ+=}l'l,A^`o-j8 ]M1IԚoY]T?%=p|q](ΡЃ.bq|oY^q ]²볹|%&.?5Z_( w zށp +jD`C?}D@ma?;Ǣ}SmY6O^>N쩶{hj=ʷe[zE;9jGM({y, i76W|#qoڷN.o->_%sM9cjJL~#YJŮf뎑 :tSiލcIqrH:>#mH(]TcW}_8FSJv\I0?·YBwB#'ؕX.A~.U ̝ 2Gdq㼞MjUyYc?+8C%D>\"tԓ>-N*,˽-k%KG%?7C}xrV^HBmvU-,ht'JNGIN*37'ktJz7~Rqy7}ww녨g)b2{}ԞqaVcL\ L>!gJ%_l)lm+qWca|ˆ# +kETH|fEfL^#ӊYzvjeY[NTc={e:ܳ#Lڳ,g${pUUYnY+,R8I=j۞ey=nQ8^ +so=ȗ#nJ&͓ܩa~Mk2[.$nL-5HP)?Ncq(y/b~¹7& Io' $w߲IҾ~Hоe}ieEf߲{a߲;:mM"-;Hvzv}Nսt>Nw =Z5OkNϋͿ{I/8"ڦxiy+XQZDHW(:p% *BfIQ8j|&בjH(|5i.6#ܢ~Ի9ـzm> GOeXVJ(aLCzަ~ ńTjD~>esuUo/.R6wD88R{E/QߓPv[ٖ}s'‰7o}?>w {M;;]ǝ' ^%u2K8voaMpw\V< ^Jz:R2b۪Qj6%QԹ#}5EOXx3ش+Si,W9e*tHQW7]{o;" `ןC*r!sBs~'HƱH5>:_?8v.\brW\_w5)FV /:ҽ= ٙW"|)oc YX}E9_5~ "#Tgs;;ygǵ|6;yݎ{8t;}`)tR >s8|1gve~YV.c]ӌdx{-h>*B3?>8V 0\>ۗ:F{'ay[r{\1K$I r/usr/local/google/home/zpavlinovic/old_go/go1.20.3/src/runtime/runtime-gdb.pyb- x}Gu/Y챑 u`1D~Y#V+YބĬތ6Z#̶w#  KDͫ!%poLn+@7dyIP tI8|9U]ճ3&>OG4]/N:uSO4H+aE5>NH}=j/V4j#ڰ~ltUNF6{ڡ?IFESD4"ZQ(G(7wkCDTzFL`0:҃4W_tDtA|wWk睷[NW(@/=2+7x#Z{=Օһ'*]5:Ϳs(ϛpŸ!ue+n̗7sCDÏHp]H9%)䔻2 rC\"a>UbOSOtJdt0O cУRC#Hk?N჻.DçDQ0CSBJ,)s@W+fPSIg~ )Atj|0Ab4;3w?.|?V]w/&XAtGs)I) IN9q1z6) Ҏ$.OtIYNy;ӟ~ -7_;˙zi;I7!wj֔P~f&u#q.؝Ou'_ɧUJ/.sfH.͐-f$ߐ3@"sc=țNul:Ptu%)&Y*4PM*T+UH5̩cmWYM]v-~/zEA-QX_=Catlg ӫ0dΙ*8B2>X%m/c`{czjNֻpYhHtV8'?C6HknllH)V]ʰCF&-7} s7c_YAPoO" ΐ38!o2Wxq{}gA8t^#UZ6]_|"ȹwvoΤmSM*E# /"1l Ckڻ^ū8 DkBJIAsE[Kf7+Ԭ_reN)Ѷ(#z31?ͶO|s/6SyI@eQp菞 K7Ug^LnD疟6\X.&D /B%-W_"@ Ciq ,㺲|'!\|ӹtˣlWwcXJ/EX*,%1OAX3kQ& *D:1\XT~ؒ4Rzů Rf%ETwYJ)aRuڝ%)-N?k'twСIul%X?[`t;WϿKx85\b&^fBly~jzU/JFzN[=D_yV+Jv3#ZQ&#N"/NF4BID# ЭPҠ+uJ;kt]b[=c'Da4h$<ݘҠA^tu(YL'WԬŴ>,px(zJS$c/ @q8u:QrR:Ħ%rjs(&4;JI Q,;Sw )*-N0C9zp~'FDGT~Y;w=WAF |)Qw,q8_:-:*eS6#=z5mn'-OU-TZX94szl6 ѥLi)' k ZQ|!Ɂ0)c62$eW߫9@N d|C>ҐBСB<- b:ó1\T;kx3JA}_)nSLأ+1;JI1-StrFD4M|FGէ/Czwa *֌F:vg6Mt c R;f?sy"=v1pS]jrp:Jx} cd//G&QE ?:j~Ohbf-dqW|iLP G*!ɢ8SM*Ls$vJKX7D $߈)ɺc d*(&QņHE GK2d*MBoҭloOdVv3OĆznXB>q3QzYp{7m S:2΃qSdtZ^*A#>SΥxT}|}+aҿ~]B(/$ւ"YYp39t.g +1*P# M7̖Zt$|{)5 ]4"?JdأyՈb741J1UYZPߘX | l6_ Mwotr@(S  S=ӊ_wl5 oKiUGݠyP3j 7#b9Ӂ2QR×9H7]A4t+n҈I ?nҠg@ym9bjLb$Fܩ(mF9CceVy|6z=TeRM7E 𶏕$^EӨT+ T+!-dtޫɯih;b?lR i S#bLf^5e̝n+ېSOܖ{mR8]Ieq#n_iM4^?{{ ɶa98Pgz 40(2( HP۞[^5S]KX]J%ԃJ+Bj?(1b(jRp9mwq5V{ ~JDE_\g0H5d`eWku)5k#zU("}6 b!=R(W%"QH+oÅ)˜*)a9}&*=j/ZԠ|>Ħɏfwk >Aq!V=:\v#I漣4"I?Fy:A:ɇgI۞)]#@5.abN1a37hNhWK(Z|0 2}jxa0W:pǮy.VH;,#C@6:bQ9M2 N6K#%4j>g 6A;b tP:sf9,U}A4QiwIJPW4,{^~ƟS@_`]2qt]E~=fS M.[vVު0c"9&T]'AT!sd=V2ㄓtR\I,J'^{+Z߱!MO%Oz^zQ'4XQ^>]hSsK,ޮIqcO7+< ScWЎЇPqf37#ؚfl Q5m A*y5^aTL=2(T wV/U%zF_ǥ^,q`HAgv' F+j;\؋ldL'ZL2dӐohk y\zajﲫ@PoQ)l <éJꡯ'7O'[ ,J>  9 eEͰ|i5U0:lCRj&gFsęN*'cZۺy >k[ݦOaOWk##Uu&ثM1U55>׮}e1o{?􉍠?6%o?{O?v by'&6ψ9D[VLqz?WvTߕa6*zWz_T=K9ZTﱻz=)U.OwnJLKaK%ff4͠)xZ)VXܰ6O|TYy-*Am$~+է.`osi&DV唭kBk 695n'hol7T_D%kB5m}>Tj|bp臓-ۦ "*[zu]Nu~<tkiE U^/j9"&rXY`伙)0omS} V@MpIJG4ݤs2wHApRѸ$sXu\A>R)MAoEdžY6o`qn9k wګz w2S[u>ƭs ~>nwZ^/9j2gq%0>> .Izr͆.z) $'?"k[DXfYU;-ˡdK8jfL1^XNuqz>?kZ,ॏH8UEF2Q ռ-&h̽CK+P[ ON#E4h؄ FIL4QGZ{hĈ{aÿe g$/gԬQs1Y;` qO N+HoUavZYXO,<%u%lQEh$G̢/VTk7}xm~U`eOՂ3>^˸JG49o\byG3؍vZ씾j5@G^VʤYWf X]#ZP)IzL%1- 5~8> N*ŋxYRGٶ`C:!656Ip*Hs{ä&s$mQkD i;>60 #pRZ8o;Rp9%x|4ۍ d|f?~JV }eI@yJwo#^nmU=Fʋ7lsSqLB?W>Cuc Hi]IuLBQP&K^[}++`dJT%^c*I09 UJ*[rm1r.P.?2_xdo;e9% X1+. Q,>Gd[DL"|+s]$ u2`ae9X;ZxSY]UY2@>"]6Mpٟ]HeqBJ` jrs.9$i8T2FYS;ZM^ ;{YlDHWqn[r{{q. UϪ_Z&qfIص4ɍ5hX@^N\lC&WӂzShm4KLuu- H+b'89Ւ(ÕQ AMA6'6R|8C7ږEe4`$F 3a5b/]Ƥ2~NhkR/%d9!vfo %-@KʊGDeYkre xԈ؃Ì.6Rs}@ ?tiKV}/n+or^fob9QHep6 ܀}m ۭ=qvL3IYN1(Ͷ=5:)I*oMXT( u{dNT?74q :GNU:ӵs^ 3pyN^fmnNKYA ^QM/V(e5+. ͛ +Jjw/r8l]FMknecẢf\+Dm״^Rz*t׍=OA3= |㲶 Ea[`]/r!). '!#/Kɻa!ĈĠbH3䎊,g.n =i Nti0#r Uf Aʧv"#c K{]U A"9TrXnVSBqNn.G0dޣ"P/+ډ|x,̫evÒF6{ĽD ̛B.ZUѝcVI@Ղʰz.&ĞtJ `~ *'1Κu\*ʚ?nī7ۘV奐rC =f~6^cfR({YU cLnʆu#]upLk+/ݬ+㔰;m\ے~[|>bNG*rO9zWrFC 47hZ+#Vפ|& l,˜>p-4UJU;҆PE5ӣअStE!->(0q?O`_\MˣTV2Kʬ5@piE= ˆubRm7ъ :u85{+zя7Մ`.trYg mB .WV{:GIZ\AEmn!t9|>HDCkJ/$r}-mΝm 8 ԛnhn~镽S,s:Y';*S b4m(zL7.|%[~&BuEX>DOqTchwȒs_=T>uV;*ي!,đ>?^4,<} TQ-⠘gj^g e L1{+B_ ,G XC˱ZA8A=rĊ*iTqu"A+?X2F!LWyUfGQ0#c۬_-w׹։nj{F5h@TP_pȉfjZ;~F] qD&eÊAџ0`i /Y]wkoPM-Zt0?bsgФC@>:#%6IS{{!iaj(9F3VNTJΖO'K嗶[-7#I; dԹwpz C#-K=wq=wVs) R܈H5q}W9ft..e6sQЄih}fX Ɣ=G#qMлXon!rǧ>',΢r*_=K$e3Mm'D>/t̢mϥZgc߂ZؒXf vYs\Zޕ_E`Ks]L&naִzAѮ.6|ChۍZCdN|o6-q#٫01k]~4? -][Hri/gQ-(Ţ_1WFFe|x{se 'COHSL\tZ=m-r3_pU{7mMG7AOU(pCRr"t:97ws,iSŌ^1y/=%2n[Q2G94IT&wx}Fj#^df,mS(DQ3(m^-%]'bVݫOA{
]gCkX ޠ9GGKB0c:jp,o$ `0>MAnc~h~FwN[MPgC9 : iH$iz;^Z}w< u3nQCnLdROSKsEXł )Гf|`jWݠݟ6q\g>;1tzLas80<ͬ;n+31H1%q7tIK =VRbu9F;^8NND-=biQZ+pV!҃_Dա[SFnG {2 6R˜~'euX١a#z9E)Se ̻gp4~e\\X|8$v ֙WP9LseHxo["SDE OfE~#_@AdGToiQ;z޷ZNkBvIMD ;!h6&0nxֈhb;44/TuKr[LB hq OB|Վf0M47)6)=ɧMLTF5iO()) +ç! j<< 8Ihs) } [4=9j&Nb8ΗBJ/"gHEM~ pSz'"0@!L dC*1iwLnb  VY ٌ\W6rGsIP}䢝l$EouRg Pmz%aJ!:yRZW# F'U w 'Be,K?}MU0Ʈe/[ `wЂs75U^݆rۨl窝# V;H.Kbp&w}HT Sqw)ZiRg3IS~TC*q=[6KwZ,Ge1ztL.kK쐉ggtL`CFʔ1_f-#XZTkլC_ Eqt,L(JRr'մj5)Y,mNe~je_E 1- hb0DΗU(2 "GG>}dǁn0XM>cl|CĢ ͒0@!]`eIO *zpbB}_[X1$tGqSutظ驀orjod^gj"3=t\YIcʗ0kzT=S^`蔌9v1->Γ5!Pa*jL7N&oִUS -RJ ၯHeN5 DV>Fel 2k상ȒƯqRjnA{>%3dEA,Ϲ|2 m2G(QթL lsSuFԪAbcld%(f0'/\]ݓBaN _sDʱ_(FqRe`X(Yz*ݫjlعmZ ~ciR#I:pL/̡hk9ZZU/ GRE:01{b`[ Ywspw" :tN6xgW~@ϚU,;Y'첆}N{Mz|6qhe;$]<4sqJeJɏ0:_vƨrq$ QSTL?zmWf03Fl]v7Zn,en g;iJ/+j$A)!nLΗ.i@,՟!87c Ǥ3(O=]ӱ*pF_QqIbg):)¦j;eX&E,J/^&?}-=(xr5vnfhqߞfԩ"ӥ,UJ"'~3zzjVu߃.xK.xqfx|82lTЀFflbZ"GR3_,YYN, dǪ|H CyXYS Br+Q͎8 gb)م((E9%~ $^PlquGDrS2gy atCFq>Ǟ[d YǍe-՚B`#QF.Zl8\%S8"-gu4W5>.5Ua2U"+K)d;unM Me0A>RqG1CDXo U͛QU@ M?6H gf&Y/kG"ub1=YD{ f"kfpEHoəhCfڼԙUY=*~,ƍeUYAk^ce KGa^^L)xpjқGԍq'7`N,{TCn:f+~:7C%5+Z}ͷz+4go8 okGvpL'ք&qJUj"ކ=zOa u%`F,=?hmehf; M/|,`+z3/.{eMSm} =yUtoI95iYHMUw=xHtix(jM\Rj lX… 嵸;4"JdpQN5yڸ!-q RτIQm󒢝(nv3l&YPQփf͛f湱ٜ(2kWtA] x)4+..~]w1};Kۣ6<+l${색 xCdc;.}P$g䖘 ]ج`˒w}3r}W{,sD[ٷ_4ue7hP: 1TFS2*&TK|Nӯg441f0*.S^7GUnpOFPV (lWAPXOAқ5tdQ'J={-HM!ӆ Z_zC-1_!Qg@ 0nz#oAqaW26>2pO.vL})- DQF #~3%E[Y:V_઎ۉ gP 2m{sqf; o/FY7h}*VJ_<6iO],Y?XW;tHy;S.J1s'ϞjEB3@xj¢6,c#KS?m2N}דUFrv~ExMJlJ5mQ%rBENY 8Ǿ!,SY][Ē̙o#27xq{6x_"PnFKh{2='V ࠌG5YkI4xWRQoqj8^ŕ;rg|Lmo^fzɧMߏ`DiTƒS ۢ?'&bd"O@xT|7+h1ɬ=E*siAJItn&(åOùiDD^JGJA)3]dzAkM|@o&&~ dt3hH~ӝO]a7pRG?In&Q_mc4 |~qf7*/ZM6cR(ݼZWտP<1 gR`kF8 GtyYG-}KG`4[ r'o2D]YV& W,s81 }r֧OU,pU?Hbºp+3'3].ZBLq߱G HZB;-;v쐮!͸ʽ!Pv'DԄ~:K;" w>̩7iJK1˫PPɻi$w/=`{=&iꕙ)Ɲ=H\rѤu >KV9s9Ч/:[ _t&} ؕSUG +}erC9Hsl)9L>JVdY x'OeKXI9<&gj94T#m&ҫf^Tr@yQm6,4VE (}b:xi69].K~f1{7*2=TLtg94ECi]0yzSaY(~^Tl@y_6qM)7{Q.X0imߋA“fC7̐ ekd*\֩(`Nt5d?l8B@\7{#2V_ER% C3eV$ήӏ Qa^A^r {~wZU?"Zh~⯂P,*N/饕-Lkؑ_^jhוsfSģ>Km9 ]P>[ڞ\hR"~gB ̮gF^r]U20[gR6Y$ ʵ`IojteMH}*0 ?j9(45zyI."ܠQ 4G~t̲WcE?6Se3w ŗt%zu߶[JEyQhP&ߎw"~}DdvS2+T}Q2D,FrKl<;vTr>>niQ *Ez,M4weoO-h4^4KXB1N9^A{` M=5zpepzU'ڞQ'9/ފlkګ=M4ك9e-b31DN+sԉ㗑 vOn #tY{A#`PrGzgat#ޠUkRX_1N$f>dQ:_v c NV?eu0nF!%yf)ir#&[qJ~Ct[ٓh{NA"GF r}8c=ŝRr^aL|!#uW]0+UՍ;F_0QZ\A3=Xnq&a* ӈexI TwY:&KF>vct 2fXn @85i CQ6zd wB{*?0Ͽpwtms><˹@ ?&NpXr8(d`.ۃ' ZYK2@ w>f ŕfalOc=Uij~f.|~H=[60 M76 sqDZ9&RJbǞ]plA7M[(h-!wWe'dOvFSOCv?($cj-{ODGlzP OCRƒr"RwD@3le ZNPY&sZ1 EfU8V8V?Hs`t=ց?=oXuMt ? ?f ĚNgI+7L6CÔK 0 K},P$L01ydAh AaXYKӧ᝷|xA^}DUۚNHi?0ʂrD`˦߭ jz-i^5OcP7ٯt)DG =rČْ4R|ču_ eL܍J⸛ǽFow $HQ\O$N~/" 5GsiCe#L<~޻≿ŨbH!z_]8r($G?: s`A}h0g9$ݯ&H/}lţp( *$N7 XW6'|6'x2/v^ne/VeTR/ - >?\E1~҆ejt/jk,Ѥ*cDQaމS&ܗ0~X{  m54y60/H kx(~_Ig䱉^E9B{}k;<6J$EGn-7޳ݞRXPmf ;p7.ȊU8i?K`>(=&d/^hM}MЄ&Y~%XE8n. /T޽ d.gaY+"-!*O~Se0>+'Ct&Zyqҵ67h%|k kDbv7}+R!.QvMr?J]}%ESY;? @@~m<՚ݱuËEst<.(yx=˚[GV~pA*lF$"{Q6ԻNL,/Cp.Aq1s$ӲOBr/pf&Q^hM憥Yo~4LVˤrxF4ծ["2^{|6EqJɓ<8]c1 #px3ҹԟ 2DMOUc6@՗X!祦l`"cD4OR$Bi2ڋgӃaAlDR,JU= D^00^&^U ÀxC7F-ͪBզ;7Ӿ$\ zmcbMM6ټI5@;P$t_qEحѾQZg`4J !>*&oUƕ*d# XהjE&\$U:CUV*}hD hw-4(̝Әb>o-|a4MꨰFJr% ¨ %_ Qx0`C%~lс/#=|%8GKbQS߸-CJ{2qZ!CPJ4bS*܇GUXU.)S;0ҵ:n=@70 u~O0}+aҿ~23_fE2aݩ&b_qU P# |_KGlk-:YS4M6Iӥ6qȄ`V'lЊ\$ͫl/CSzdL.u{ ҂t1B)@D$R$9*SY QK.tOYw5''I,ubi󍾗tl>ctEpk-)Noe|G7>:Ym4ً}cM:{#jo0h# eQ_`SsS @T]cC@%d7Žh*Fya 3weyP+'+PLȎg˓*Oq7胀ò)J+RN;*1LWq =vzې 3^(wy)PvXۈZS׌h Hx'EaPء ߞW1jS{%N 𯕜`P^ L*-#;iP$_T%7NSK|Ҵ@}ܑ.! [o[HŒ _UK7Hϖ5!}|C(I5 Ic"L"~qyzǚDL^{rȸ0SۍXG~Qd:EUyYTM 5Lٞ"?Tl};2\2ݰ,1l@18nɂTfe#, à2 Pr Pc8vEO?aĿ,$DҠ"c"ݣƭc3-x$4S>RO|"EMT|VRI?G f4tbsMnXUňa!C9NTv~j5ʯsKO7e{llW|;r+Jh0TB聧8j%y?hXi7"@Yz[1(R3՘{~ꔄ~ʽ FQO(ƥm$_G=1lDO?=~%85aO7{'HܪͺJ3V#)ZHמןBaB3jBbpk7k&' ^KQ7%cU2OJtt`0:2VG"3:}dpsǞ5+IciEP91-t;V񋍉;Aad='8HERΉ,0gU$ > s+Vi_eOaD@F+r2zHjAk!B4Z҈Vz*CEEp&{z8Ɩ\ץF_BH]..᫲k n,?mV,g+tSn2'C|$W= ɗ?[`0o8x {lSM۞?[1i+4 /=(_l:3.8l< k)=k%lw]Q7?xP̣\ъ۟t 3t( ?Po~0* \{.nܺuk`@xJ믓թ<л}=}=b ǛhR }@KT_jH]8&_~(Q:]Д\1B64 +ӅQ(iZ.Z >ngaq@ye(ǻ]=Yk`ϹƝh`;2÷ hOtG9W{TbvO!J7wu'Y54% A%%ĵѧx 6N;M&Ȗ-=[ #v׬CWd ][2Fc0XEZDO4Gz{o2{`<K;qRUñp1gI(d"-)$"mlRdS(wgn bj 00D7x4oB`PA/J8Iq;x\%-}X%u:oՊa kyQPH%s7- @uL]ܿ~NϬ9Y7),Z9%wL:&K[K#8 }_1sK\Qb,RY+q|)rQ$[mM1T%F"KN.ɨ_q\iJ!cDS_ _P4 `@tʡaE֤\O8Vjuh\ 쮛JNVW>ЪTN+S״*]%Vۤ5iUEuKIQq {hEWK $tЋ%M|-%jkOUHk0KFoIQ Y=t r׳N;*dOW3fNY=<_hQŷvsۛ6]|2Q0: tjJ&|"2`QWZljX‰Xr(#iqs㙑6d]22UdMqxH0|r-:etB~RQlO3H ity.&l }n DjNޭT\([;+ߞ?\*ɰgyC-fKE+XGQjXkCbi3wúbp8rV^d ;!O9*+h.j%gڳG,k1"Lad "E3S_9l^M0_(nWO nJ؃E򁡪_jhͱUȾoqdòJ)GXƮlJˊUetâEok"S&#TQQ\4$4)c{9OMܣqXliLp$H]N9v}:%Unk<ټ0s6w.k]ԈiƑ&l~)XO.QTxegsiF˻jQB`i:h< Ͼ6b|1iFd^thŴˁ ݲ3^Քl7c+ɜjdVDGE;Yx־ e (o30C uyaR1W ڳ ?܌p$y0'y:>O %Z 3(-4{A>/;,Q 8ǫ_%l(;FtM]*}j9Ҁ'"Ԉ. tQJ^0K]Ȩ|h,2WmR}:wPm[Tum.Ϻf~Ƃ:q( ʜȋ@zo 8 A} X^Рe])X8!RjaSoTQ!Y)ԞodM;O)_貹OH{h_WZ)rȕ#Hg~.2U}w)%Cٱ8Ƚj]f2mUC/~Y- ACʻN8"5XU7qPnIk{_˱@z*[3QC35ZgXTߞ !A7Jzn?}:_PRn$3u_c >cT6M+=%6F8e JB%_>И"{8?ᆁp_a0[ CM#vf(YԪwa:30V0 i(fџVPZh.A:ڗl"47*M=Ax.?/lm)grt):w9EWSrD/E/qî[/0H.ۛuޙ_ B0n*+Y>3Q{Cӥ|Ph&_"')׳y#=/Rt7u@%irXe^i<<(OZ]x!3I֞Qk6QЄÁr"nTN;:{I# 'i£'GY&/Suųg KeD6TkYmG=ZR={JOWtvє{ ̖!V ++sF=}Z/"Ղ1ٯ @hʂCXKD[Aj 5YXbܱ}Ԃ: lV๵*#TDٳ{zJyQ٦Q"A` #cNlSʻmqztml]ʻq^ wuhޒCGVOԙױǒz! x喌W_/]?( s6 /M$mj,Rzp3ʼn!cUGz^utj-.j췂l|$޼ҶT33"Qv ]BQSVw eQ1DpyHp~uRi>ވT4b[>"lBu%gGmbφi #ȞHi/Y}a&*=Ecx" 92gISYN<}C% T$nxr)ha,T) `j$֙XVNkG6n繠<]qT[b$Q{]xi8"6b|X^yVdzvdQksZ2}")E ERMpd.ЎkcBnFO6{L nHvg_.5%4q'ƔںR mէ))Dɳי ݩlowA~T}*~ 5HNO@w (vR ~rEh uP4"%B1OӟBsgœОoM*FM+nHQǤ!Q$;K!&Rv-esY7G;8t7FaPT%l o -=$–9JKNw/G퇀Tz`}[ea~ԉZsP_vdKn2{SJ%wh(,1={jbM0v'sOC7e'U;uψX3O PhDcfXkGz1e/M`*؁H%Ԏ@"[= d@,ARorVROH1e4 ;ոb9/NkF(~aui%I0qL #e&͈G͔]S kOC&:d7Q> mTc %!L_rӓQ[v,57$׹ٱgJV\s?tb ДbnT_(kXT ;b1Lf^xHVHZsڎZE~.˾re-+ˋVܚOcN(`ڛStd|{&N5\=X00CEVJPaz\;C ;bܕYf{vAl|(]D?1#LRu1BJ--kTmh( \1 q1tL(шehδJPЍ\Fa(2{XG?,gW5TZ#e*z [xLܝ9ͺR0MF^fC4xU܈z12Qsr#=#1:N/w1 36 !HH#ptuP÷ǰK1u󯇯OSqT vU_0Jn8 ;EռˎAu~`(dRB'jٞ ܖ} *,ڞ=C25[MJۣO3rADhM$e( !ujh/)!ی=;*z9 CF)יS󍧼DjZ(NAXMn U4Ugq=TsS2<`пT" }A&YzοT-ՀIm3g gcKLGNMaw|.mF0]vn|{k#) M=ԖH }ɂTęZG mؾao۔bw>׶I'xk{E1b\ POn1.`:;:Lw;I+_?7oĄ7N(kkFpckGe\JvWj-KeEv}o~Q: Dk| ][r`(}1E Ԇ[zľ*tߋtpOxç)}I~6<bzQ.^]1 L LOz&L9-ٙʶ/}q/q$)E'KL_ìǏcbT?Qc$~׎Z /6+9Fn.œ/^Kt_lp IP,y9$^_C ڕ.wtPD1*Н=Fz-&7~r˞MF-U,c>^ c`̔a T[z J\/؝%(uQZ2aX+?9zff &)X ?k|yk'W/ux'UZ߁~z/Rt٘! 8ǵ^=w)x~r`[QnSr.mHvg͆_PUč2= z#y^SXN)[EMg-q,>DJ> 9lPnr r.˶6{&o 4 5(@sRZf\& KAg'.ӞCƤ ()4 ~ʜ䏋8B*I h<_O=Ų=h0{e& 8i)3[(vާWd2%'ظIRÁg[f*Bsų}hHbɇS/%g=7` Kg~Z `Fm'A2!~Q>t.˅9gBB;,֞2߃MB l` E:]˄/ Wrvٵx$VJ"&eMrX]O>4(̀Y dg"\q}g`bؘm3i(!ָV(y" -,> K*u]QtmW/Ύ_޸}E.spSoοLfI0~1?FydւC4͒C7N;zS(qscB㠮IJgdLV KA퐍&Kh\?",nV3u?8͂nb8Q UiJ|8z${J )8`fD%svpRLLu ۽Z7p+/"~gUw{O>$Ty3zNNY=>59&`Hp)%@مimSO܎ޓ0`y[rԝ@%i0Z ,c =am'֢-])95d}k>-6B*.sZ!w؞K5J*@8ٷc>`k[<ߥd o /Jfp.C/j v^x ˦xYT%`߬[?gنԙ]hO{&O4p w !MQ?/~^ 畞PzM"cLEJ7$sz(2d&P(irX<3{k{Yx(wor:{9W{{̚ݏ%[w_=fxx-x㽥Uv'mj|UeO؞fV UI|O8mQuix)2QO[^5ۍQcNTOF7f_AռlC tI݈DX9Mr&ն3].q`CemeWSRWdlO* Y}/+m0"bo>yF;D=F.rwg_#$LnTw_?o9ymL%uD4ߚfʳLkqۣ95JU.'oq>%y}։T3DZ=T?|{)ujT-Wjgs]NS5qdGOh]~BjҗU엽z ur J^=USt f$Y%!V3{'b "PY4Jj(RCfP(K\RbyUGRCK4GIߛ%-I\Hc.NvCIIAsgzsr~|za?h@ †$RʸfP=3-7YIל57U8%eBR|ܮZ.3AH)hD+zt=O/j1i <; q7(Nolg)lS:bO.+@+X"Z2e$D`3-q!X8y3x&Ne鏔RXBMД́vFH* ylA;=z`? IW.Gt&:Unp|G8wD{.fN ' &vRkpKn?xo;. ׃^gM=g&E8x9} ~rM+`[_j:6 ‡+ fc"ʨ|1'SoѤtްm;TƘ01~49^)'FxC쐞xI˶6KMcv;f6j/DI.7'IN"+0C/׎^. Z-/#!%ޠCv4+FDh^S)[Ւ8~ZݷhNxM *g0G5lBn[(VF<Ăs/<ʰI u㖿bp]}ȝz1(ڝ1kN9%Θּ<y\C4^Җٞt3?ycfg.VT|C$= 73#4$tvm`V]y)i=[jɷN*z779z˥<ۭlN^Msƪe;ܚOR6%;Eއ@<hnk *4G88Τ9߁ޗ1L6\W}z-U_iާgd.j}zm2p'Io,U1F2JȉFvaZG~ mEI9qU-ϯwNZq4)?19u53N9ӧYD(7SP¹Cb*9=X \}Q~QpVPq>h99Pkq.q gK. Pft2jR>g+|x _j6l4eTFr+5C,PɋkX}VLI,y*ECn\L뻟 t7/3{MLƻnT8iWW=;fgQ8- ߎ4` H/TjM<[?gAHtH 1D^iCdEA@>%B$cyO%ww67ݚ׫MBDk-R+%fZͷhѤEWo$[v Sf=;ݴӢ(ХN`wMBE6>l^f;Mo#z)n.;v:=в}BM{R̢Aǐc⒕3Z 9-qL&Ls| O4 k 0g,a,zҴWSdb? '&^pmkvj*n5e+#Z )0G=?&nMFnS$e4!A=Hẍ#74gV/(1T0Lk{b<uZL3ZK|S8ۮ6Ќ=(e"4)f K JDpmj(NK(RT4GIk2ڞT=XU L/4 9+. -wVV6LV\j»EAq*o66, V j>P^EcњBs5~-P QRոӛ1[P~JBi81ɻ(^FBhj*4ҵPxdk'Ƅw"$ SO2+uiO'>)$I0پMۢh]JiVF3Ke9͏,be)v^ꙫ}5o{`"qbxnRSo˝2)}`4;ʃ~*]\wլ݅?K#ܹ/S!Q+pt?mNי(l< dТ gXhp3-W|[A1+YC 爴*u.U:vʶ~!k{R^J&t Si]~EP~ۼo[X,槳S s%>[ƨ3bC\xJ e!.(BRQ5o{6d@ыi3;,>߀`SN.m&|Vl-#[`=ṕ.<^r z˙eB|? >jKKQ*o{ԻZI]S_+ҰJ Xe`{G y>B{᪱7:ꅷ y\ʥ)XFOJcM\6!1 6˗~;3пzE|4 w2hmTrgYD\*&qRgWglePgRfɟۘoy pF{Jcwbދ-j_־kGkqZaZ {x#&4ev N:Pf +SH˺#a70 ت?ؼ^N[̬TԪK"=t{x-[ߞQ%Zh`Eo.@ }hɸ$ Ù!_ -,>%wzju.y7DVՁ7q>gVqtVi] -vgE tMM#=ăbavmhqϟ퉘6k=}}| q=%*q\/۬e"|֎lUB y> <~sħ\5}R8?ZlC0fHTϏI師ja:a-6b3)lwٳueqHypqH ņؙ p} Gmq8ǁ`_}"!ܗK}蓁~D \by#ܗ-" Chl .j ֏Hed9?Zs^DsҶⓨ;ٌ_hA yי6Dk?~s=u:e)5NW@ QO0R(յ`b*+tThZ{c}KeW.̔}oqn4=:hkrKj| =C-X&҉CO^ oJ3'6YC zz%6\slL6 7f6)Yo/VT8NߛHC>Ü|!:lXeߦ|sKg҂^¼>\x@+s?ʩoJ_2; ̲*,Q5T=PhslJ'r S>71Qq4r5{ jK6ֲ8h 0QC_+*kr}aWOG3ׄ]q].M۷ݳkd͙NXrвlܵvJ v(WQ?;Sю=S WsSܭ2|VtB4)A:Nw\7bh+> F{'~j!\ ?κڏI_LN%:UiKLj'.2IмtAtu<'gܧS$=&I[PiP! ;S7@H>}HKG4t6uG@&а]觪ȰulN|\%AA;Ksm/$ E6EB`D~ͷ= tF]#XrJA*ﵭҴMmfl݂Iۮj6{.ĥllp:ф|zbH—TB0 0GmBgۄk8.reR׻Uˤ+3W/ͫ|̧{Mu G Ά?XgDu³(2Qx͟Ϗh!l[67.eoV5>|V>yN[wfq)EJcxɬ]UgUR(IHm}5XYeO#r=ӈ@H&tD~G)ʍEkg;ztɭ ->'Gd]VRF>5t7HmL|aMl4[hj HXX.&mpIȰg]`<ek.V@ÂGY,ŀZ)guJOڜJBtݤOrc*?Pó>Tqg (K-S>Q֗OcɎOg}&Iqjb\+ԩU&^*UZ1?F'<p*Rc9.{d!}-MTыyzZjمk[Qx#>Y#4.9EnL xxP Ik>jWe+Nz%W&NP]QRiE{Қ)#o=d1GQ.эwh2ƃQDbOA<6TGg«= @,Z9FsE'6few|p}"f[K byuy\@O+Idi~ʝh`>zB}nC%R6U  Mm ;J:va%N9a9y\OֵY'_l| ;V*j\Xq(7Yklai`)#_ \4wF^_ 1dK ːH'EA:-.tinet*#MϖψsBJN6I[R#Sꗜ/iPMҵV;g2!h$9t6'xk^7WgSf|:\Ǥ׫& :9)Bj1[W k,} n A25 EQ7nP6d\uemB[Tkz2p9{R$_(lU`KU^ŚQ+p*0X8 ̂^9E "SV8ud9Zb70Hv!Lƫ9'h_æzM ΅ԧ˯bOBJH)lCIڹêT]L_J]ʎ_BgS(hyF}7%x!=ܟ+~+q/Fn{Bka\UtZԃn`ә6ixeWlL8ub[SS) 6!Gj-0=| ߴv%Ɋ[I|O?&&Q3IR̖:6+"\8Q2iv#јd0jgPڑq뭢H_//^؋ۮwq5yRmʙ)`&0RꤰqWu_'~kDYC&%CgeXAMeGndbLGĶO] Ӷ:i9xA_9zvafyv~Q 4um/رÖYt@_D~wt|QN> $34(7BnxgPJcT:5R5~DgEY%@Fm(ߝػ1 1Gޭ,$J zoYg"?C~Lq?r)e#\ ޟ@Tݮx}s<Lσãy_cq<7D`!^Mrz(F# MKmR}b̍E2NуhJ sX۰2a྄\}H؀!CVT:#:41qCޔWno~הDqdNOjAwgԸ^C=hOaG#!!HH7wx{yjƮR|ծ[csހB'p}wEVm," *3/ [m uF\u[G[[|g1p#8Qv-qHw9YBꄑ3kD+vq9o $rP[я=>|ʾ.nR~Ԍpgtn/U`-г/^VscECIXUG4_$zYQn5w;7Kv#wxA=vpoN" 5N^%{){g!)Qv*_S6$C.Ll6 26*U._&pPis߄ G>}/7hM;Hnc&>JM4!?aRP}J')KR>Q?g^o\o.lE<\5˗58o u]ݻhէ܍%\x(}@>US~d? Ԡe~S{ƄI/j, ө!!p&^%O٠S7F.7IY y,R mpS-Trmտv#?G@$ԙ-5Zr4g_=U?3X;Om!GEb W9ݦ.Q1A(w"+5o2',hX)#イ, l DNzw3BLq0& rQtzc3/RTgIJk!Ӭu\Lk͊>%c4c%1:%n+p!s5ң?Q7mzR?PщQQRDE ~~e ~oSJC>s owP\b4<%dfbds!F''!Ⱥ*_$PGj _ԺSBjF*FjI9RklvA:zF-7xxPjĽa[F]1a;n;r.iLӬ±.Dh_W XENoUA_FB4HT'i^)ac,9q=QSޥ fam0Q] !n 卡[PPJ6&Y]v7!A( 4*VTbi6Ăb+ 9n a=3iw\YwA/?%3g30э qe2_13TRW#@1S_EM-fm77Pտߑ7k]S9VW!HE4F{bf}dGVDZ.p||Ti)+ZxBqv*-=}DODLtG3w {t?h"ncX)+&Npo;_=ʈ/)?RP[MV>U<rlz"R;U[\R>29L*.F"tdC\hB 1*%׿i䋩P@NRqZf(#Q)paJgFZ5帤Ak&;g 7)U8Y23o + ᇔoTC-ItG`&P/N4PHjymmIHfO2KpQP碹("ǁCMӠE$U2; 5C A)q@lG!֠iĒ "&mr^?K]#rVzj "-K#ۄl02*  @jv gKjDu|3 R橡Iڶ?0T0l]~@^I!./)(kmaމuj'UST3b0㵮TSLeCIONkzƷA?Bɪ Y8r.Q$K=L[k\E;?{"G&r@]p4*UJƏ3Wvi%Пj[esu]qH~@_3-A"!qQ18]:P}]a:PR'rthF ںgz >Ojácz 5QZ Uݳ#cp\m`9&{#%›@;r$5$>j !b$On@`@@1Fa`҃HZ̢7h2Vz|rJ0/t){3rh^a'=De,o8LPr?pͰ% k< O͋f :0N0vfߔa/.0V'+ 9->CiEHwuh'h-zܳ|_:QC}lD^\y'UycY2ʊf(Yvg#yC=°W({>6}ӪJW"Ri_ٌgk_ :68&"xtAm/d6X?F"DY7)o ) ͪ!OM4E`bl^Lg؅:-¤yCajWtT ;$6  nWMCJ0Q6z=mŠdRHӪJKl% q1"ΰy#a" `F{,6qaCŒvӣT NH }Yh% y}L@g;!5t𱞲"@솒*b._ T +)JZ`KM))u\o; %G-~P&Ӟ8/}{o0V#DWǖ(S)dNP MoU( =#*%#zd1#oݓ) ׅrה 7{C~O1ǹEq5T捊 |Ltv&,ao2/; x*!t?#=@7vFtS'VX-!Zh-⢸U`pM{vc&{B.B0'Κ(#?q p11?AzK#[mt{=ba -UԖxި' K|#))A^Wtl5̸z*YQ<+b0t9p>YR[/jw@NMyKh.GDN?-n=<" y0n7,tQWB8JOw k@ *tAJȟ- NWhCN.[ӛ+Fi^1X38p^ E FM̿-WVC\dz4BT4 @{#h70(b.B*`8Kh%C Qfm›Yrh>rFu|͒cTT7LCF䚙iDs3 q8LCDDTgVdp u(9Brd"GfBqװn̥@^mˍMP+;LL]>(;y LM31!HIV&]#7 8Qeh嚒e(DYJK1;.9PY'Jv"+ϝBcžp4ғkd&E!OuehGhiw1fTSq>w7.X(d]J U.X]u4{= |t |hvyW|"J9RFI>~"񰽫("VFUƪcUk+#)Y' ee G6t<<6r F` c۵<jOYͫO;5cݲpnV'VED7X: <~`[Druϋؗ>R9YKO"~ #/dK]X,Zg7^yX6r孚!ZnU :d<Ī/(wA7Pq2S q0nд/kNadinev2W 6Ԡw(ܴb=sQ|\gbl`VnƾO%>EP[E@4."6nVзOsEla0{r 6i 4ȱPCw"' uVbhF %Lae|Vbh~|Sba6 Lc.:b :H8>DBfaTL[xPH:.P3Bx?c|fĀuSGlA9/?,11WۋqRއ60obt%/RD]+O]x*O` BPmVrږy񙶸a@#۔#3\ݧ-0\1Zs &l6t6o\e:W]}|s*2WJJ=ro[Bڰ=B4- _~3dMK†ڵguV w~N»ϝE V\I7V%VcF51(lC_Zlr"WPHtOIXOYp-=ZR>H|a%!!Ze"#ӈ:ȟzziECs5ѻ-6ݔUa*;M, =w؍64w# ݅.?x qLWPRCW+h@廉54X<2T_)}r r*cPq+cЭ\1eY+vZfuzs,QanC8~nCD2^Lg+~ESp%uyR7ISmQl])vilHZVn>Jݡ)bYC*-emԬʺA79D,ks`&V$-4R0re -D[p-~?Us1@BK8ݮ7*=ru]Pl&xA yT38A1K+ΨwFP9vE6t3 #ZMkܠbpZ̈Cq< <0РN:^SݽDŪM<)h7|Թ mS\0dYµl+3*P \~\y+#:4)'|nmY4l}. rltr|WrDCOa>|`4_ՠ̌\l+At[Q Jfж䊉 Aq5XAuJDq5Eʳex[mK ls"%kAwz-lyawoSmC59-#~'e|c*'ؙcr_mccJKC`A]!1 :b}?6TK 6q44SF4B3}1_+c%UM?jyv"Ԃ{UANlH40wzvl:-0z`j!^`+npjaJM=.schDˍ 047`AC h |=`z$ʘЈ kb}Gg f+BD.tc s&A8s5HnkgNB7(!<(rS@'GH_00jOx`Ub8B'EVSwE'Fؚ(}mcGx&Gp5їaJ 2xY9=!SZY}8ޯEXgk025s"w~f߂jdphnJ¤)ܔt[W(ŏ= }k{ _A^C)u PZ MzWl-QRz4D}VkhOC$r44*EOC3"OOCM 7>dnOCOraOCӧih4C@%Jym7LS^OCƠ:wBZ^ &re2=ȵo/CgL޽ MPP'dt/CSyA/Cfz*a30ZнQM%.ehZ^Ёa7& DHy2f x-V$axs QJνw z@ lkFhU`O$穊GȪ:uxvQ{A\W?I1rfE@z)^HG9?@lj:78~s %~/ {CPkkmYrp.0zhyD99 ¶1`ft2Xś7uj}lX{gGGt3D;E-7B?n~AgHW鎥 (?1i Lz7.[XvN|S^!_fs駋 |J)B¾=-`[Q?w3t'bF-iju ?s m4sΜ.Ȏn qw5EnO_/@hF':68:BN٘׉C42nBY!nc5J4¹wh(wӝ@7E\+z|5{ DNu>YN\DYt ʼR/rv=NWy xsܧ-AEGzݕp1~`붔݃{*14%ol{#tkj[E!|KƇG"S'M;lG4fE.X<^CDIs'>d:p`q )s{ 4WVPqfH8`I*"zŃEs̸7<0%(.cf Fvf=A%ە O E WHq V2t\@ t\U|oE+FR\wePO&N%ܿJ)>TJ(sV"(`9CU1%q;@ /$J%|'1i(1o ܿLJ(残Í9 *X 3y-8[ LPYq&ZJڔz9>TPCWǝj}]JdJPⅷ'I&&z$>THԚJ@ __&*$8,w|H(>J,>TX8tMŇV.P@&'|=JP@MfCE@~Jtm( ?ዊfŇ;>Jp=J|ŇZj]e&IM?zx*q/DOde#}2vğG9M nf#zDpҩ."Z3>>U7Hoc.?Ed1q|:wa|#J^_򈀽MX('32w7_6xWh12?*-25ܣƸ$6C=>.X`g{<҇_w#ݘ5\| | JH7eecxO\ݝ6^oArӫ񡆌a\ 3Nc?!V ,P8q}_bG/H Oćfyq7qN%ܿ V!wsX􍬪{EV& dBb8 -`qV8Y, xɑx4{#?eU@tEA:MW~FxBH ''#i^_vYO/4d͟yr'b#|/P6/>=Q9&쭤`tȤ*_ D"(dibs D=ioE!O ɑEqbzc7>9dKsrmS\%rV19"곉GvjD@n .FÕ𽦇?(FB9N<{RKNG5d>'G% {p~%jSVWGRdm&QۤjԱHXdAt==i?^){(ZZGRݛ"_{RFr$5 gv6ׅӖG2044QctL%bc!W_(3}b/ %P4(W)\5i:_6=cWҼ4Q@ ,>Ά[tp- <` ͅ2)vsp a?\X.MTs͏61aL@qikw^i g[jR;znl>Qn`+uYWFW\7pyHn+"Ht^LGDnr,!\(?NW=L~/!ޤ׹$>rYߗvh?z84LA~?BQ!c!*R!n{J8d޳p>~@#5QjRVv^\nۡX4Qf QHi[2t(0#QVJςU:r@+/E˫򊃕GE}%=~|iu;o @XvZ0'\l ԗD2/)ED#5ߝl=7j}k6OѺ,11h}V*4oH/@(VJvؔ$YUY$-'wGdh*ᾨ7aw‚%a8{pqQc!'PKA#4NS1UEc~oq4hGcY^sN)K}~?wNkQ0=θ٢0~/q8 x*J5j%DSy#=|eq2 `!%B xۻqztU7zry5BvhO2Cu'ukC+?,E&n2W?zj%QƁYEqD!*(3NܗqVeo+ S*$2f7|lA32y8V}lUϢk䝫ma k+7!SUyUo+@] }@s_85L_2Z|/S*(.%_ R+7T4RĪr:v-rAe9vMBxsoTFݧ"(qՐ7['7 V8I冚 r-(7&QƝ冞y-T)u :t(!2)U!u l%ONRn}Y E˵`|;"h,EQ> V.لJ&җ\r`6^GJ*P.9#nM|kŷ%OҺ&S(>kyl{vh/숃eASw3FHGYT"gu~ QsP2VpI6d)o]3q%͐Y5}j/YL?d ?qFFKnG H d!Y =rjV}ۊB%bQfwKoph{LM4Gs 9'1G% !Ybz+.ho>:e0o['q-?Qwo=j-cU۠>Ta VqNXP> DL{0} HaFӤbTlUjjI+"zsGl]:XS3Ta{s眹);cJ # J(JwT$+c$`@*XET"g+GE>YGEl֘eS|In~$ Ev.% ~K^I$hTKjڊSLa*Y>d#'KTSBa@qox܏koJ-Vhv}Q7sz}{t!$j;;Dk)GIoP1`9+7T8DP"'sb@\S!a>Cb5g2 #p3TpPivf <9?=w# ܘm-p<Ϣ?eJA;g[tl|v8PP5t# nw::@7a7lMcs 9̶~ql!]wUΪD"<ˆ(#+@T[;O.C\4S3rϧAP.[ |hD]ΎwJyێ\U*YNMLKdBpWRC+Ou'&ePؐv!"sݲ襴O$U/4tZ;Y hUF:Y5i+`at…M(.Y]߈6 ga.1.KGsi!J7n~ME]˗7*&v?3hH(V9( CQa\̾#T~b; "gfIg/`&w}+~E!AKB^"7{&S#slz1k\+|b5]-rmE "o6[p';- X{ -?E::%ZSꮲsMuv0\ ]0G@K~f N9Dv}~PP^8RKTełӎM4ڐ?a!>JC!ڐ.9X3 i+əpogd3-riL}Uې71Y [%uO5yT/05y[jlhza@uUԀZt).8ٞH#_[ yAu15>m#=.̖Pw85C)iR5u#-|A˱] ~gx9OdaQ"ęNDrcO˾PJ'}{YrٝdG8bkNͪ6ZDsU/2#^΍7ZU/@+Y,zôyw^},*{k%,9GDCH;S@EV,{vO( 9f1+P﾿%XtCwr ZʹVQ̺OP8}t+ڟE9זbF{`5gxԤl} -(@ԧmJGf>ϕt`72[Pfjs-9upyPR>aZTE7<(B_s2 uE"ƚYpT7wW"0x#< 5`Q{}%.< 'ۨH0%whNn ePS +nܟ|Pa#QI3xt ħwg|1/K͚BuRҚξhh|MO+ЋeZaW@q7R y iY'K´b޾,47zoBX~[B<NFq'>/}5Ё'Z1PD+ e\,;IB"-^[8 ]eWB9t jNU0uuGX;$paMjrҚ D?'ۊza_dwC (N?ECenTxE ?TosOXKD[;3\W }{E¢~[BPApّ 7fi!ȟ|dL)Anda'Und5jl#`F {0{Wؓaa]'rp/,C ^8xv-sl5n85$yNPBkjY=0{0 VCs974M/PJCמ_~ox&>o*@y؜H Ɲk(LXc:`=LrOd`,B%F,_xE&G;Ёu>!rhZs7[4|闧eC#`Ά@an6<"^ ?Bͨ}n6Lj"Yv}W)9+n4[+4l7}h2X hP*@Ҷ%xEpiËlzrO(L3К,:b pE ՚w1.@ IōHo媷h^JChoDExx#al ^l>Q[ /yrY=rr_VMmV |:|>VkږfS>ަ#1:}ۜu:bLm/4t)ӜИ e̪44[KM/D|5@zlMI^+[؜x,r3]6F<O2}E[(}ϑ"DDJFߌlyk.Ƙa{EU;oU8BVHKJ`˅|L|W|{[˿J*j{ߎ&yUmk.$ވ7\gNBlP=mv]U*B SR<%UP6Oe;Ma&1ՀPm Ts~̲oV湢|7̷jKՊM.7<n_myL4RbsE\?79uR ~pfE9G)3XA[՛5{~Ԭ#i--&=[3X`=[3LU h nRkG~nGL8iABԠ߱e{f^b)e\me5V[\nG_nGʗoOP%!gTҞƆ i0x0i{n/){e-^m8vfL=G+>/7)V"N}wM8:K!m;=R狌(qHX^'D"S-dYY8 8fRK/W ?Atؕ_7d7:1ZExࢁ"~eEP[꫑Yx/L|E }ģTs!y3U|_b]"$q/d>5ˢ F&E~!51^`}灰ve**sur|@CԠݷ-E~W4IW \lz%74⓯]4  F\E x0A~P[E`hF8?S@YےP"U(+S r l'*2#؞%A`83'bD#Q&.xB1ǹ'ԐdV4Qd1̓r;}Gߒ-rJ-,EnUlt,P]L;*\ͷzLGڧ[]o9 =>"qγ(c`YD 5hrץͳ5P-\`kAy ,ʸКemIwZsa M 7;&-Gt_4ug%}Gsn(xvuw,.U&J+_X~w‹m7؊?K?:t-Ƌm8tkʵЁ,rEqbCY1xcbC6e`ynbV,'TX`l꧇`c%?]L'9}]]r"1=NxS!->3N_A@'oaOy& |jR1zFxԗ z9%dm"x^o-&(j8wqUIņ>FE~T*VKEբy<Px JWqM䗰15K/\ g نb 6+:\>+~^W8~$WaY+}L֏{%Gb.ɉF]&wք{zF x#U|Mm'YCt .y,wp zBԬjza7McݝA'mv]:=&)8.QB~<WVjHP]nήU5B26cT#|ÞDJ);{Z71п7;O1 8s&u ]P>ze_{lڅ o7o?]yM7 x|)˓r_! 0Ӣ9{hrTklye|F8Hv}r aphoYv=ֶ~Hi82hoY1Sitf^ٍ9ҸWɜ9RoXu؊"3xՏFn=BDõgO}żY SB`hqrgtUp$oF96uzF)sS8fаacrO8SY_X-7h:H^L3:FpOW,7&'BPN*glW9[=*P Edw <E)"(GmqX֘mNll.mBӋiA2Jn۱oVQRr̃_7*b6%Ws"L"ZUCÆzMzW2C[bղpp25h[Ѭ, UWo)ΒQy%G^'J̈́85m7g"uYfh-`}ʨIeq le4c ^"@$m%=$a{x%xާuu/_7FBg0T g1G?SgԨOކz:sl=i _2ף1⣿P(_ _~|E+`1ܑ(ލY+y[3Z,'8Kيh;lŶM{gq6+ٍ VdЧM6|^iR^0߰q}iQ6ܥnPgSXVfWeCڦ~+Jj^4pvx%t5VHtfp7"@rYXԵZg2Cەw+tv@:wKMtZ#hqG՞tF`Y> }%l=Ĺ ӳ,mؒQTh \z"rϙ*|qނ'-Y_@plZ%r/\thH'j%2C`Qe(enQenߎe*>h žcj4@b1L菥u+ޕx2KJ V֬`:SuMpYNȣQBRId7LBI޴&)8PQ#) }ӢэIlT0Ui7GiB.㊍|Bl.6hx+ /e#Di?bȭZtXYgaf9ef_l־aK0r_g( wLί؏Mw q`?A9y7~ xWD^USA3Fr7]*qGg̻5ʸL[gWܾP+n?6noG vv7:w^fhb0])af*ch76'sPj&ZTVb [@Ƚ2Sa?;/%OpE V5zO\k 9(˴ 1!O ՟ᴿlv$o{]@߰4G8or&*5uݩz`Qc\4E6[<<=/feﭻubvIs7ѡ:lhBc(`PSg$L78|c ` ;w* Ӄ$> :\!w%$rr842u_2l'>$HLKmHmW|W Y.@j4P&-HԤB=ǷDH݆yKa/YRD=Q,li7y[ϥqCW<[37.&ٺ?ݬ\ l*к;Z {#3:sEP{0xOBƢA9EZ}ZXfoga_v`y#EdFÇ1.P G=@=-[hȕc(ȃ^{9uRB^[r 9ȥ(?/:}CSL*\^24!WK>v9<ڐ0 i#m%n5F,:t`w:׋iC WnEcD*\EyᦶKZ/=EK-{T/[--L( kFcdGόN a:tKN~"jQ=rhUAuDN9i4RYLND댜4/'MOi2|+iF]i~7#k(i4G,ZS|ѝZyZdrxNFkMM@Y3h~R_F/k T7:RW\FkMפѱ4x9%C(1I'b͚Ö?&{J7M 4TS޵%C6w^:El0hGF ]LD)^N8$ B) v 6IINoލL~:(4`&y)#n;Ov} l?`O4h>ݍu@bOrKega[:?f5 n9暧afGlMWc{;yTe'5+}Qlqs 36m-fE?und0CbW]|[V_Hà=Ԑ{;JW'a~6#z)4EFjٹ[C_2T8].eV*FFx?)MKT4zVVj@XgcRBu[Ecbz^>r%a̠yh0ZߟLWYdջLGgv^ ((ӿmK$ eWer*]{Ia!-ׅ?f%(Yb9AO% dm` "g}(Ecڌ4 <ĝM-JgZzu94j5"WVy ͿFLdܑJB >R43MSPXǛ ǃ|l@[ȮvulG+Tt1$FeU~k*YhC.+ mF\0ԄfuW"O QX]EvU+΁4ZG["W\S舣 ]+6ITnD-L)mJruDcDkfM9gl7D)h BnHzqOUd̑9t?s,g7aƿ_~ g+{ub:Jy`&l߹3qaNxө]9u,"G3;[M=bOb6 QNao‚tnBu;q$mΎ$ _/s:by9+ =z!%+ &M@5a:,^Ö 6H糋[lt>T[=)Z|rDߤJi(cW 8sq`)PePu<(VJB+wv"KӲtMQwW'aNۉwHvyT 4ߨͿ2n/((%$)xyS&hMg6s c%6wxuvmf$Zj`Y {+dxEUi'bODxFN?mՋ }em On_ >m xMD#K6)p7 9?A4"?M?jqɆ_y?ұ c\| UE(y_[IK8АrnDXӓPŸA`nvS,Z2Ȑp>t/2;' v^dҕ_ pU/IYZJka zn3 ݡ|9!DO 1nDUM8Q:I L0RKC(TMRqo y CƅDA5I1 )PC&nu0ݖ -`ZFع ۰8{R "t7R{ Fm_i˻Ы>qv, tI:ovL"~^2c7\1  C 'WZ4hu<9rW&}Bdb!{TF ?\Mf ֍o2" h@:@$Q9J m5YSaxZ9MS- DݯWa?ċB(@b8*x"<%)_*@k;!MTi>XхJ;QUSQSxnp-ph (Sq(ƫ4;5k Sxti/uk  D0 Zi#h^{][mx3joV~)x09V04Ge75V eXah)~8VJ=GZӣd]RXsT, ).u:WEFj Ua'k+H>Wv/~@a5*dMJ<+rRȑP {{뤕"гqJC=W͹Kv(!5+lhM=_ YEa] Ta)̛aUY@*x&Hv oկ*l  G+G DQ?4pO/:w9j yB4M::cd^pi.踵y ~2/6_u9{ Ѝ4iRqFn!@KԖ@mvK`ʣ~j cm²wMıfb{⸖YrW .x=WL.i=ېnե{3|fwã)ِ;N(PNr|#(Tޯzro*1ɳ>I zi^A4M)w%XjgKNN_Ru̢q&J[S0..kY܍d3>$ kV `lq[֪OmUmeR콄:6xuVyntSgh6j־}} B4/O !歼Pg,pq8dSm;Ovk[0OJ;k](Ow緮n|V9d0=+-t z۶&<mȻڠx4sܚ?(8LEGq\ ǴvA1-nJEltVi37u Q]mM[_ַkۤԈ^k]["焗_Sx^}xCs$_m(h43R4SZj֏w-nZdWu"el FEywA,|l%o̓U.@;^=0s]?FGWr}`WNGM^|+:d8Mo 6۱<= Y ̓Bfde;&Sh*ڦX A{϶ 5]Z+Zg^tՙ ]SOgj4I؈3):S\)~Ԙ):UOMJg)@Z[SLq(EQ|@uŔ(">)DNsUKǻuOh4‡^ LMh@Meᔃ4Eƒ* ;g*]Va^Vw%[o O.S]8m`{\,7q"h?hk* s*г5=qçǥi0M!z4F;_+mDR{fz; ]jh7 S5zܵ=%1}X5,@SѳF̯i  Yu3bW4owWlATx μO/2Z!Tby@EM+ͫZZ)wvU퐫 b*pBby&L ሦ q>vI\JWrI4ER]sWfԻV:ƝzagXb'w4-UF <3 BMArZ*>VknP4jѬO5_Z~n)g'd'j MWáKgM@_oCo4jRKXay9KShNò5 S+@/^a~ ,֐Gkĩ5.0Bû;/BwEQ Mxmuj{\eїTaDV{ᇎ1||1WeCW5Y;u7jDMEwNܟʅ;]IZ,+9t;T}<s.ܜm/>Z4^*_U񃚶"xEW'vo &ŸHfe=<`Ro>Bh-=Ui|]& d}sPF>Xo)RtMDoo6* 0[51#&dyccBJ/zֱ-+c+\|w⍽J gUߙcã*qܾ!q8FDG K@(ttgF⾡FGu5.,n qW\QQԹݷÓ:uΩSNUK<<87 ggZYnM`~q,-z} 3'xbv|w߷/LS~{ Mb&Q|i)!-? PSD2/@/Jx۔SNۯ -G)'! 2@2@WF&r\]F|U#,YW <|o}'W (!qxW$!`65pC9KwV}P,eBkHxCWBڬ;aE˗.JW! KwJ߰t{$#oX/a1NфGY'I " h{Jt{.T*u8 !d) 'Pg?,ԍOpwrsmzAٕ|3b%\:|`>YX||V0G<͝*nO{v J) ^\I<y,/\_崏灣3b*[ddw |3vH/*o v~.@lK WF1W?W<~,nT'<jn?xϕz^U~L1seB/pc8ݡ8(qbkDi @\qIª=ǎKXYB@pxJK\-|Q)`%K 2$P>ke*~(!ǃ+]ɠm/%Wh ,?{eB/%cV蒗T~jّBTn$yUZu:KnkNli9UWTsnN~%@.kՉjki+" K()6HˀFaX#^EVhQRYЧ&҄XNGLi ;nPmKeL}v1ts,J_C䳗o R'WҘU|Q -/V^8T>? SKOd`YJf`''t{T !ϕLï {-j/S9oa_/K+ڞLSŶ͎B|!PXx'IaV򭔓Sʹa՛**9l2] 8 A Y`,{MS~:N8SoO1ۼ8~9>-4$akKU k %D-p[ะCdr}^)yFo_0" ˻U%%wpU\}T+Mo0,zy+׍o)ߗk<qH^!HWmJ`{KvNge̠Bsv)n[/.k+i@K1zxӰu}&Q$"y/4h/M] GUN7]YfdNYSKBmU5ZՎC6Q->W3HjS Ci'q?mTM"ؕ #FP<[4I4俟i;IXpd&h5+hfJv Y^t> O=|%ڦ7pv3^z: f}JKѤ<_'%_?hER+$i|ЮWҘ7,7ʆQRKkY~ _(F/֬[ ibiLSTLo?AmQ[0@-n)-~_ )ǥN_HھnchSK#-%tv~'MHUHM߱t8g2^Խ~^˔ B\ o|'C]^,"] D۟Pv˱ӗ-ka#Fu⨳=T;w1?c~'zbZr1ơCw{u)Id3î7‰?we0zFSP 2ĺ{/"gI 4#L:D3nďM:Մ){B.R^{Mz%̞U\Us$Kt~>q>J`!_}$Z1zʞuEG"iPZM',u#bۄ[?Nwвn)é5H[4][VhxiƼ{yOÃ=4G>|%!-A\\SMB5e_PXR T_|Uhԅ*DxZ޳DWWF^_,:wy=q7 ׆ %ӌ'F]8%U$T>R@v'uc =:ao^Y>֓2d?ĔzBʲ웍'̾D52k˽Z= EcuWxthe6aەZ Њ5Uڦ8~*@Jmxf(p:7AIs%sQN#3HdR^.{O-uxyz r{v)+׹XIB\z>*8QP (qTsT>7FW|E\W~"q}FEϮ"*ǾE>)Sv!!6^cē*8#XҎor$:7>Pe(+Е<Dn\xo-*LN p;/ @ !Z=ƓٵN2-Զ:նlsmDeQg2Dpj|ShVX H5Z+S\:OR if:5qHI~9PM B?أTuJ]y¡%UzmAew@RcUz*@ckt9yU>3V׵:Q8AP[^sתT}Vh<7*ZhU:l;*@KyCF~!סA!!ES# fWh*aM~ >uk4|{&=\bEBu:mm9kFhe>aNRf¥*>ҟ鲇 A*;ғW:(Xġ5 q OHw76ito0}BW9SVꗸuFVyIXSSȿ~K5:UyS*u]XFAY\zSwԱ598EJpۇd\D6aS;DZl"GD V!a:USUDH _bST[Mr]Ta.*GD-]Nwʢ}hh##o кjPYX4``:@ IeD,3@KYB^@W2оtd/!>:@/74TM5KWt~RUᏬMi?X}vi%(֯.VO]hAlOp@/QjY{vgoLP5xF:U]nԩ#Ѐ0H%<5s.:ȳf]3ƙ1Гce$;tt )n;MDJjƎSf۾薯W>ꞌ"vӤ/v6{Ӏp[.pk qݥ^`c:m.Q$r/ڃYkPNJ'cz<`>\B-+=*fxXA::.ӟN_ 6vi)O0#9#K4> {hH*F@>2.d~i   r-d_ Lÿ٦y' j!/ѩv2i42[E ?)@ɟ\ P[kv_'թf5g]9%w+yUs^R_MPLLLxM@FSKS| :$h[l,jcÓ\0{LL[3'zLc^A`t|fhP.sIS⎘qޟW7ArbIIEtgX$ۡyh5'"qD*{UpϯOoVϬ^z>?ע :U%'ǶZeL6(JURFOLԈ*e ~2%=lU)B筼2 A" yX=PfU͉l;I}7yװ8Pz =Ya*^,H<Z}'3 LѩҝhPX\VSⱺ^zp/3i\4;a03R2M13r47| ##gNF6NɌ̡>w 89AOq2(lV\{p9ٕ=B*Բfe銕oӧ{|cJG~P<4]Xa'<|A/' Pcj .hX e /mTLt}B`23LRf恙3K} 3g)f6f2433( ʏ 8Gb)Ս;A{#ml8IKO ˈVl {bfWAxѾ.ha#g{h mMmRF?WF<[qQ_AAfd~Ȭa2kC}Bw>1#(1eslto.֧A)OZVTk̃ZBEÅ~[!\]˙}P ,g9c`Aar#nr`8XW>~Tp {943O>}|בML#=7+_)[ 4 ,7?(En(>B>E۹BsǨIKps>? oYQJB_/|Y}bA]xw㊅&v)%ʅ^p}*AN72M=JB=5*1<6%σg\%liԻ*F}Wv\#:3Zvi(;:a\W,hGM3=߮I,;1ÀwP߇: /~]X:&iD,Rܻģm"6K^y5&e{7OB @zq9!U08*AӅ:s!H^HBA4.t*Wh$ .H4sϮ|{$RBli#D6]+:t9_"iTˍEs o^.3 ,US %G +~ >$'kGGbeVIS2U$ۣ"3D%cVߠnp!*W'I-MkÎmMI͟'EJ-t!.jh3\m~) Ş\ :G f쐔T'ϖP[ΚvF} I%HJm0S)D!;΍_nS/H}CwP'! !_XV$4[2Tqǡ)w 8!}: 鍉DRu+hK8>€ez$ ?Tu=R/-*A3/ g֕Ǚ.Bȥ̝;$th?v MۥGqOHPJ ||I<e()EBJɌ?eȠ ?{[EL(76[Qnx!"NӨKoCfI⌓׈8IB2EAfCFߑP|CLy}؅d;"> g%NWڊ"bԜ,$⸅wPAȜʨl$WjW.q4Y>R*yn2O -LG"u>〒tSuw9o7/?f&_jHQΛCj47%l "ư\'vDtptwf~YxpEQ|]2cVK^pd'͎ ?fH Q"l$-Nl?0L1J*{!"(6x&X9Q` QR RZst5'" 8ʋh벒cpED*`m䰼\'fd+, U7Ka:PIfd~']fb) ڠތ'0Y;X$YHQ-v7ST7Qȏc\PUiaH)Of+ ctm ^s7uEt㱶 d>Hz'4 *xJ]RD~Ę5i]Gv3c4o]ʌyEK5h8N51:4NêaD!v8J=4Sâdv@i(*,*LCm=E{߇Sâ}EzAɻhӌTRUГZ|v~YY蓎d"U qNvFbMҚ8JnHW enoMi Iq鴦[NirNOSmzu~4ǕtzN7Niߪ M5OOi "[zN-Љ~q V [ՉȎQQx~,ceqS$C7O~ǫC'jӭ谿TI8NtI\: i: l_F0MS ƏrN~NTW\.kC}R+$eVqvGcǁw4C Z!V*q>8>4;3VlQSDB)"B$=9fn.d^FR:2z\nm1O9 I5RX!`Yp =ݡs1HuČ(+z94'lmSfG fvEߐߒl3k\GmP:bE]0 ^ 9%+rKDCVM{ؔV "~]1AF*B7 8W]Ub SՖÿ_0{,dyבݫWܛ;Tpj!4 m>ov۪$mwBF>{?;îjxݣ5Zsĺo:] ?S'ҌTtF:NÒ~TR' BLTӅ %!L?P]*}UVßU_ܥb,dx[ȃ"%dcjȓľև00 }=&#HHӱssRc'iibI!Պ_,֩6 [.A4"/̙X`:l':C~TcEN sOթ|Y:UWo:jv=T,%%'B3 K=gKOgOCb^d'ņMV|Rz_#(֛qFzQ{ЩiN $zkS2jY:u8E49 f5gze 9;S0? u 3INWcQƳJS1^)@Gܝ4 (}Nր`JQCYnlߜ si)~! &Fc_*+*bDHR9_HQ ?Nq߄}"9GU]q;zuϢ~wa|?C ~}A7\C)aq۪`:]Uvй]N]^'nGiN4LyLY 7`8|iNڃj5RB0_>ϸПJNfb'4\Z=D ;UEfadF<ӈi yJ 倳?bh%KP7271[Rdnb2dnʐG&jH st=ϟaYx d*5r#zhABދVUeR$04+?t@%BkDWI`CgcuH}> kaoGt7GZBJϾ e] ߓo\(Fl OIp!iN\ۍcn)EGz6f%(}DJ]a?b6U5t}̀$yX`J\9vDʕuTb \Yzd^-!IkpUu*Jz\`'RXx%IEA X~RY9_A0FVH5$XMթf]N+iK\{׍Tv| V'd0oj%j"'gk*U+'$A@/TNEb&|r)UW`?VxdzvJE: yQ' )u(%+\"[I%EZvVD2BGCU UXtD^vAXUOB>/$_7J ;WIӂƫ3Eԧ0P."QWq8# ˧Z"WuJUA~5r&!$Kt"R趠jTnxfr+XXI;DBKlPJ%l#aiHST`L Fc*JDF\ Hn o\XT[WÀTd4Kٶh;gM8K5uA^QU 1:I}]:Fi_:I 4_ ) $Nr ~N2SiJ ${HU\xR%Yo1޿IT'\*P|r% yַMY: nk}xAwIJkCu?S8OA6)․+CRJYB \&7 H6YxGBpLj{/W;D$fNgshPcVB1+Io4B!1&QZb>x\R7Y^ō3E'ܒ薷{*.6.QaU7]Pw%wi&ҒFeB݃jjşT_UGR2UNCٍ Zd, h̟HeW$=̫(K~B51ז`(>]oй{j"}NSO!CU}VuЪ#~Itg(JXAkJENPidz$rZ>"Խ?5d@"99Q]3Oƃ*qaÕ_Y)%A{NZI#[!D%Rtn^tJ !/e ? R:Z71&Mtv"P\@TJY"oYv;=yA)wT<\TJ@s7 Qv-e"R*[\I+$. /yKڳ"R%/$+ J2 oγ/ULPʫKd#!^JZeBl i< {"6,H+-RR~}g`/7M+خ-UvޠT*jQ8@=~?U$( ˠmQ;&B$~)߱Ba9PBʯ8"iQ -K$D'T -HDLߗR J|ij+R<-ZgKfAOIQB(Ė5(N,SL'He'L=絊%+"]$0u `U ƹE*i?)~?)D%NvV+ЭoRT$gJR|I$!^e [[UسʔNE{m  {JBZ_ʠAvUV On&4wx%U;.e(x䍾[J$XI[/!JewJSvi,G&M2'~XF]aA3YMiLMbOF$v joم7H1閲Z)`:JIw=Il)bnMelm#IH)?͚$i%D)7nTYoQUA5CHRm2O2#HcDjP>VMe84p,u;VBȓUfJ5 wyq%M g봛4 !u@(v,nh@OW kyX%Zyy*~m->N&bw7{mnMŲ:5 ҨgñݳuznxjfT6"H5i~7[F!s%F"ĢNEC.}rI]#}=mգH6 nlu*D],*FecQ&aDY=AxT \E0cr;ڍj{M{$Y/o*U^DwB: 1 ^!:Ez&O#",>b" VRظB_! k*#G}R McPo% ܖ7eǾ)kTPy'Iڠ@pp/~WѠtU*Nt{F1^Y}5-ywT`ƻGktj9 vߎ:cyO rp'.fU,m%ܤ%W[299e6p :f&P"ʱ1@mz siۈ;Lr`S6b܌>Hɑ 4mĨO .PA!zs ~OBgKcvh@UV>jb7$x ԨFBmw\&)RɵC/vk _ '2ږj2R>)q^IP]j;T IT?ۡiol/h.D5P(ߡ"w/AYCd[H6㩲B\'0VO0+fb7DD=1f(B!)I蝕cR^EU;ѻ64¬Ux7Oʞ.|Adu: QUP>=Hۅ1V%){O(`' dP 5 'ǀ{d898Sc@~ڞg(:" sي=8;?wҎŌIۼW¸;NL.3n )ѷٛr4UpwjZ>i){u:jk}MjboB32dJ{i5bAReI{>Є4@eYaq  CjJjܕIփj61+N;|:O#ɺIBނ}xARd5yt.*&UgJ4IڅN!=40`\aV 5od;)HS<=ݡ'Y愛Z/} #gj%uhd9uirHk&1V`D3oii1Sʁ{܉g7sЉqBi;lDnyܶ p9>#>s>'\3fb2\-VlaN#-f&ݶ],Y9J - =L:ͽXڱLfdեCM;͇6)D2dams'O1[M>k 料4w@ Su+OjI%X.o}Uev`!8gsknUsmVtouI`j<ď ц`F ?ID ^3O0[c4C~^Ga<4qT{N͓OC]f'>%:`0L{I~'"բa8n'/B-!B1[~eKX$+eݩ8UD3aD"HOaă?|;>FM]f[HL?Ӛ0GO O.O ;cqY@*7!$F~O*-+ ׎[9Vci#f5pv<ƈ`є+2V#N!NtEѨ"z';F7&dGډCTm"JPJҙoQq픙I<M0{ea6ۑtD+tJОSFB䩁)WPm&,^+bq̈́;>̉;Ӊ.zhXegvI5LȰhM{+#e& aүoCvh`;љx"vd$XP<1u;s)#"Xٟtc g2`14o'JrIZXZQh-E4nlCÂvUw+PC7JBOf/pQ f"jO}/}Ur6 <0 Q,N' cD5!&_ Q9@ckƓbm#B9Mҕ o"-6vD 74ՃH0T2\A85 -~$ZqPh<2&Nҝ6;҉068N+ẁER !d$8f ˍf{g4P*RvJcisg4ֶcHK*9ɘa|CӀ=H&DdjPwڱwB-ڿrXmpA;Mhb!ǾQ*#/4"sFi1O6W+x6xp5ԐJhiQ+3Տ,82݈]vG9xxr:DNIT.H["D؎Ex'xx:ph9ͽI#iDHXc3 :nSqWc$jm|q̔<̩`>dqpWf!aGL?FT >[KH x!䃱]XhZQ5j2yMEUa+0/B͏888}Dۓ '"f9FgrYAe,-yS]+Pl,U2!})Iʷܒ V%WmE cf}R2z SXxRs| %IpDaF٬&s~+!6[ހ4"jNҢ˰-k@er4"]}>nCi7V!RLj~[:LtqDNi&fR,[1?r-'koP:m`gtc00`:N(I8?9bP4nS] Kmmv~;:4G*nj=r8s׭üNwF j!,Y#sb: V1SmPn`p xr?t66'=`kp9 P3':a96! =!K7Z9SMB4g'+t"(z=J]$Pn(= D`Δ߂E3L8f\V)_ E攉Z~1ZهxJ1dwyIvq") xĖN< 6s| QN 5KNZ}C4n=DBH†3e_1m= S }/)w,t3]э1sZE$5Uxk]Q# 3)u+2-)c ם >o\8ЎEY,6̸k="P2ev<2ŒI,I'MјE#|>#dѢ*>! i',~@J`OA0 5XkqT?Q Xa`U=j,_5IؠCt3峤|C/Ҫ83>(Yx6NOv GP9!: {jG{NKc;/h >rl"oJO-Sz-T7:5XlŰ_FVwr Ol# hntS U "I\2rvB-SUΨWH9XB4Ry{03Hm](#Վ'Lg9lxGf[-̦Vvex6qѝՈŦ8m #tژ/90ã0 Ӽш6a :W94RQ<2KQah.`EښDt-XBJѝ`g7`2TMC2YTUD w]TycLI#Օ׫Ns&jKwT鲒y#NV q|B8PXۏEЩ|lj jݦ-S%F7F1|?T0q;B?VOT*92: YݩWuTLyӎ9ebK(!"I7ZҗW%1k,#f ;~ 5L13~b҅z`b|Giio hjJ0TTZPפxؗվʂ̮gE8= o9N5k TG:)awz`cQӂk҈X}WL4$U3Hxcj# |k԰Mބm|:eb7;& f [v񳱋&V6Wيrx13>ru;Qt3n Tf JSl@BQĿ-ً͙T$3}d"W"{dze˚-~3{2gw:'K `7ħ8T ]-lW DcL,$8T>I7p0ʌW]b(p55‚'lt ~r,2jڲ3IeۉB u -1}ASeKleU}yhG.jLm)Ef=XD7|n 5N#%3 =9j&VR1w2jktvs*dk3blW{"U?u؂L¦OٲxBO{:(o* Dr-r56 uv֟'3Ŷ^7߆4K-NĬDDdme)zs5{|bEΰy(s_ M(1ClTO!!: ZyY ߂0tธeQX,dO®-},x׉Sc~q9  #~V8s?@@M^sߥHljNQpno7S+r HE枉^dx!gX>oC:HA15`?` =m_ CUXl! k>.Bd8yڗR3e_B31+)QncQ`2oK֖hdpIwvtO9#C=T+.땍q#V |1_2VZ !P2I_0le@'ezə^/e+=ty/Vn 1X\#Yp̶Z"3͘`n 7߶@VuށPu:I gNiJ׊mR%<6IYN]r rpJ~27[ݠEۛ8tǑ}꘷(K>;,v"yQ&CJҦwyja䀕fmICM^9t)#(SGQc #vi$FMnzd^),p 7l㘙 %R5|!fyLfmc6SVmB% \i&[!!?p6[]= 96,ʱcrS8D7*r< Xj;1 }V~3=횽G\z1#`@s/E۟O)wo:"9Z)F쭍ImT:ǎ7nLIf +c!iw/obF :q/ka\~tU<[xn0S|g٬x6g_~Ir#Yp,˵ x]7EYjJqTJX8Qb>kmE8qq>p@.!da08V"l0.x1`2K56Nn!~yy 1K+/Ntr^^V4섍DNynga PzN4N^vHd@Wցsz)#lZфbIp8ɣDBr9[Շ+ц{4?89 r]+1 q>ϓMZ0# 7e!+,鎺#ૢcEv,6f""3jK5a읺#/+Oxwj%]_]ѣD4;9b Gn+)3͘1Kߘ,^nja5D'۱qYѰ8-J6oG|h?|t7ëzN˙vJYfu3+y9ͿG9{.CGE(f7q:lMl&$O93tg~xβlIO?)3}"Yϗ*ҜHGgL~b$H:dv,U1t5%ΌFA BRAeNZ2Sz(IOU*P^,byd֢OERv,;Zp6a,7Ń^0\.hnLs4)vj,I:9ϚY@ iŁFQg{#]ρ>)gOKy*̴-p&i<k`WuِC1Q\?*" 5*3OjS^T; uQ}{IW)^^3fcwձSKF"S׻PPq XT^cF8h1XvC$\M}@{#džHY7DZGʊ6 Xɦv׈\6uJKɐ"lcXd v/cfCUo(E[S=;E2c:.ѭo?|SeppIRE\0N.ϻnfs[RHWӎhΈ~ *{|ޙL}lχ`Y%59Yȡ3roߧc}vhv.W?d]׆(-ҡ$]Ia@^ũCs mfr/xD Ô$ȝ-S"FwPVj'1OQWjhO{2:2ʖL=0Twrp^syjТْ[ZbOFe$;[XR79h]YAj2`&%8(ۍ ٟGU=qX e+ED=TJ&$Kڲ EХ.@BQ@DzH&3w?z9>s̙9ힻWQ<c =KE$QF J\_7СJJEeipzsifCR`FfBZI"h, a ڙPSeQNGbDC+PW+ߨ1uDxH>G0Wkl Ƅ$R?bhVXM< w8C|6ZAUZ;k&]$F8L)|w;s X'q^REÀ0NQaLJ?@)a:=r?8lS{(gǐm_ćXݩU|4IONMy-0#xƏGGm/zTj,p 8G&\W?b0E V(e*xr'9IuyЃ Te9`1DLV>^PY|@=ߢX^n}ݢQ.#@ϯE2e!)T3jfN·acSl Jvǹ:{ /0*vǒnKaVhک,nbb:+Zd,n ʇ)_ї}aC:>, 18" ս( ~0 ՝od"z6n٤g=;tO`P(Z7Bb,x\]]\>0?>zɫnqj:Ofch+.ŕ¿O81>oK)P9 OzLۗhlm jїfER % HqIыEe2ʍXC5W5qnX1@~煫R0PԬU/̳L-;2h{L"QEl){㫺5H{f8}Qh uH}Rrl)i"zߍG\ߋF4q&'˂RhFN:ZRGHdK&bU׮*(WDea hN-QZ}ퟥSaS`Fgg4¯05K'kSiQJHk?Ds(vDs(PP~gonQ"R"8@mh"V⭆Ŕ5dNP"RXP0rӵ.@vck֪ :a=5R?lo#C6'!6 w^B"$Hx4_^!ds}mMdô60NQN?,N..S^ҡ]&.']FAmM>_4}VB &rEoOA3_cT"xЭFSC,NS7aBmnZuW44`[m^LG[_AIGDsl>Z=VIsQ :e6WNIiG/[C yE*) #"Q"#DBDfWEJ="c "*IhBٮjJ W,P JLRh̳,sT+gV*"ʨA"/ȊQJMje"ytTB#DX?ABeDJmaƨfB^cEJUhk({axg՛ Ew7OtϨ&*_dCF/o*6Wo5/Ek[-"1x@]MC*a843YvJfRHR3=4iڙXOCER plkغ}1 TrE0[».Ҿ fH^WBl ֱE^_=ˏ__'|)>PEeƋc9w}4Dz l}UPeN,Y+2[RDU:RZ(JwDd-֩0{h%v&EK6 K|?BDrt(1BQc\Z)GA0nrOdmS kjN%`'xݫC|2 dEѕqT'hЪF(ZyNM:Ⱦ5G~M;Gព9:EH]݅j+9:2TS23%hh`YX7, z=$<4?ѳxui^eDev/{  FXdlfj,< UJ՗Qi<%TS^FJ0ⷝMdTFKJv1-*C{R荤jp:N%"VTF#Jt-fTرPtX UٱiV$h7r;@Бbp#oS#HƊjr&;!ѩĻD 瞜-4%Ы8!C5QTO@iMԿK:.DWo%Z$j !8U[c2AT|H^+{ͻӛ@*9}ʟ&0Q*l -J^.~P^)ݨ蔺ȅAqzz9T`:DJyhySu*߃uh1l0lab*b}@CF`C]I; {4/650=i2|$\bIO<ėi.ukg|?S?Rf⺨wVlЪ.:E+B5i54jcC`*J%w!c`/<-l8ul\abwAG .A,*A'L%Dlnly-5Sc0c9]p3%?j4iS.lPL4(~ehěH* ꆤ2'ěȖ_o1V,`"L &CP#<0<4MQ39b;s"Qu6g?H0-iPV",G(7CL.A%^N{B_ 94Z( abqŦzpG E{qDOZP=Bkdl D1}l2ulHBen&:Y„ѕ$ Gz28 8{aTגLST$١TzjE~]" B*իY$Ie^x!p`u iP2&#^TL1|cSLTj`k!GD [d7 AѪѩ(R(,V61 f :2< /Ji#~i OZ9JQt%:a H# 2>W26FtGpOtrӯꍜBiG8glǨgC V#O(.Ň;JrL $`g=>np},@+Q9BvƅDg*EYjkEbDMhJQzvM1O7MCw tR\)d 4aRԶI(JF{vTi)stS%hυv jҔX, jLc2M I)FwQ岠,C6a5rg2XXd"e5hkk;u5 a~]Be9 }G Y>F#k=tNlf2GI`i= 5؛Nˇ9'5gOLmA/J(U l2XC6sNA>$$?~A:hTiXET(%ruJ*Ϫt)RPrB'Tv\"`<|rB9ոɒeq\8Tc(O{S {;e⣶X:.ZrIչE;Cݕ{Da Wn4Gރ"-iT(*JE!0h$- EᲈO*fz6*EFBd`Y"bs"Ff %!*Lj'GmoU*8~e`Yx]ROMz"H=H 4DVe4{&<[&*' /9::>W;Tm]b9;)$=0h0Y+(&#-banpu=]BTCx91̤Ƒ.30p*5<7Neq='W&.3JD4}ONXHq?GˈҨʨE]:#30Au%@Y5If‘kP5O`[-Y vYT cBQlN۹:B[Dql0ā>x%6?|MCQKIGI7خCb3)$QHW`A,Of>5Qic"8T&b]̥ ;R>ք8ϥLG#cc]>%.*D&pM!fE=?W.Nsuj00 qM1:ZbPC'~N Jαv &v ?g8s^(abg8*Y 5` tL<33/-$_͆gQrNդkBQU92XRjUP[,%xp] !\!|m&^!8ƛW=Øx̰_ߵb`xjl,vL1 -0apxJiq/De"x+:ACD]d {ф 3l,'#͈1YŃ #Ȃ_9 ?Rje4|xID7P^q"L\:17)6-%ϯ}k_Y+Ntk&'+f,ɊW"dP,Z@ZZb}r@f%`q:Dngj`Gs~ :i^z'm'Ȇ/] Wg;FM ^ TIŻE^2-]Tc^D&ߙ]'= Q/|hd9iT*1KQh3W}"PN.L!tY7mS~7zhNEB\<^6NK ѤG:ZCKs&#h +l0+-&jŕJ[D7BScB)u/N ]jlXGdw>tY!FM1? #BJ%IN{m"U~*O[j W.2mZծMDB1D#8IaXev0{г˗D@U˰9:K7oPM+&=7)M)e7`E~ jS MːdTj"GxJ Jx+$DMa"Gb |07j=0sDEBa1gkT~0]j+S|"TB&O63eCא;>nzn͝}:̒}N-:S͚);0.Z)P*jA~55A&*D׵m1ԥ%_DJJӒO ,D {P pKeZR3(W'jģNQ{O1pl(V˶Dq9jTK`0%'6J/9OAtz=|T cs1pFc %t-nf7LTp e1]5ϮBmnđ=E-N+nc)L-鹋a2 ۼ@]:EK #vDC0Z߂?bD}*}CE鵃X:\P c1XgzB? `Z-ęި;N3oIl`l7Q>[y[I%}k X%)+sv|NѢy%:}DuI E t.ݨ䊐,nb>MBֳ+4"kBQ,!𪰂!JV/gVaNy#{:D: tq,=& o@{AkUd)H9?P䉽("ro+~ NB́{7@\CgIeIe Q5l?'՗L3L(ĽǶ `7](09Aq`XF/eHFRdPWXc5d(kxDH}rb^~t?<%OB>/iKmRfP.+R#I5ur/H藕rH]~HjCįB $;pR.QhQGQ ~4Ȓ"owD}pQP &SM)J7X?5~F툣2$0#w摩vJ,MV`Z~OV`1?qRsѢrSJqΐ#aA8!IBn6XvPlp`C&z]!+ 4+JU IeBe5u/U[(-aSh c<~0'U.8x1do:<%~l)l?RʁZoT0F~wOK:SQD7"jشkxuTG"QK:Y((*I.2婌M4` &*T-ԖL}$u ^X Fh4 Gk3ղͼ,TczU̼y\gڂd35{P =*սܑHrPTN9j_7XQarAl 18(g8}m2C5Pjͥ>cj@b(U~!/q18R=ޝG4KUDa_?VtD0Zd0e0(J#n>qt)$Z= %v": t %CJS:pNѫP4/>mN2}<@ 81ȩ`qq-٪FS-j@iء⬁xi)P8Ue=θ8ʕbׄpMu~2ԚArhoqg"H9'9jpl"9Z]Zō9`敢:h|g :&#Oֈrs5BzThPm*6~izb!:;WK۵:5Q7ӆHD|zj -=c"[<4ۣЙ轳˟}ZD3Ϊ$·D29`$*`s3˦[9tg`{|_ qQ=)!OӌpD\/Dǧk/V.Wco/i%x?ק{R%,u0F fOZS%1BlzpN]g%=z@^ 'KzW:Q ):j"Y3W#<22d,ԩ `C8"*NkdK.»ژ.8N&G4"(hACX(.@#j^q`0 _upd,ԀrD=wղ/ԩٛ/ԩPWOb((._nFRx|%LlW&љ"^1Q>T?209^EXfϽj"+4,'B E˲BX˿ ~3k97}`с 'uf2Haf.8ul3HVaT .@ *Nr 5LxgLDv#DŽja:-"gzDN;ER|ԢPgv/b,1 u|F9{:^7}B0|+v'?"i\Y-{.?pmhU"^vsk&;>#|C^7N'T(u^b?To0:c pʇ 67ӱzD%R RCvW}dYs=IO'.e"IFyacꔟjy>Np&2*i:d 'g;w-SP(/hw> @JT BPckR w" X43Q}ZlR-V&vǷRW9a$2<6 H:WZb6^GAC;0x 9C?j|5m}eZD+ jE;Z߽%i~>f|alHL%MJxX~ai#;-?X),_IT t -A4YjOR-b_\,{ JXocTZ)/s$xhW=o\θdwe/Ai}U .L-ʷ |BÅw xP(\hOr#>/8o4dQ#Nq#A{Ց@"ZXP%?J.p%1**.r%K uI~BE6ZBאRNЇ_VK T45řˋh\ce׫t 67*IkIgBmnȑ'Pug/J4ȣ}]{d/HWf*"Q HK S_(#m %'%= Ed-rGި Q"(KM)fFr(5.ڿY5 JbpiNAtoR>+e&siwmfU84V5&cfMz&.l6 ǙJ_msFFb5*ydg?W܇.o;563gnq"o#Y$ԦznY Gh97,n~g SwwWl磑VXmrf[ѽ̠,+m+\,֙mE9H#v#-}>BKirؚ4yE:]š1hu"ߨ G ob7Sx":">v% jo` rN)[VeŖ7K!z]qn?E r^hdM\gqbMEcZNw}8JMNkrz'm| S\qD+ -^~m3fQa .%kDZ:)Sjy阪UjӭZfs&<3*6'jM/m&[ԶfrDշBuuN]ڱ5RZ1}R15kNՎ*E l/$ TKe^70Z[K)Rl1*&&̈́9-[T'q~Nwu3V|<*]qn=Q 6.vFPW!Gԧجކ":ǩ?뚉ᣀ`VzMv"7 f- v"M9 wcPTѪΥ:|k:-Bk(wf/&2jGZH`=aWWO~uP0SKc뙉g+jhM<4#Ko8C̝ q2:tynC"AW:Mt Ã"IRjǩHL6FG&h+lc놷Si ao㴆q"ϝ Vxc&Gh~i18)I\*4l7a7,@Nm䢭5#rF6}9Y.թIzBayץ:{W l/({p;:n,թ0PYSKa/m'=xO/aAe2Joztz}(`N5E(d:zN L+}27s<"ēwI}B!G5ժV?)!〲Z@tt /CCBJR0ez9*E_^j#:jQ~V^4x]#J ~ihDJ!.! ؍cq̉iHP!;)$*W8T<*X+ـqF\RΎhdL$_\r"seMPNJӪ}¬?P9DB0*@wPpB* P!B:B%ABJ3,!8TƫPMf*כIXR6~\(HtkG _P1 -*eZ"an I B@P9J Z*#LHT2„d R*#Y`VF$Ԭ2kš2+&,!n Pn2oDk ;q%1I\Ύhdi&$E!'2Cer*T2¬cLw?f&F qNEkdwD31"6zEB3`=\"1o-)͗4>1y笲Uk3诗Tc} crOTjm\  5\[&*AǠ\C@ׅy[($QT &S O\nL P>yN0]8O4C[NT1a LsAY 0(^(7E08ʞW-yI(5sD0>ELSnc .RÅBUz/@\:ZJQQlDs%.ʔwY4m0cZF fL"#Zqf~4둖A<°FxHD;sdcți/LlśɖTsvt}DB#3N`[OW{鋪ž< j` HS:xKB!# PzDiJHA3  ^B!o38OJR^f3\QJ.)<)s+'!V C 0ӅBo ;P^a UGɨ!a0n* nuiSHZJ(S3U7ͱ)gTy߲T];UB`t&WP%KP{(qZ)WAqڂ8]tqz)h*3n^hLg5BqӍNZ=pD%{;-||9u~K:5m1kuZ2f);x >^SKt iZ8ӽ&-#5A~Sf{`3l^dtό]a&"!cUjΡx(J MR;HIǙ,٘WeN JR Ʋ91?C1$Gf&#_t\G7r}.IJlw-Tp'S(L2hOq2}Ņ=#`q}_&V1}vN4GpjzN):Yg+O[yf? id 쁅9ao)e~@?6N%) ,^TY4Rfs k0whr=~N?2:E}øc(0o hF(/GZ0JZ!l%i@a8#rOZcNIBQza "@¤*rh' 60 L0TW z|ODOv* 2p<%~MC2*j ~V }ՉV ?RƝTw98L+>3U\}YrHͲb)2 \)Ӭxa: 5ɲ5M.js7O4oEJ[ j%nWT/qL<]bhi&(##s%_"L%»HqBD{2ta Dpdw7VӄvFݕMǫA{3+dۻ 11gX!oQgaH~Ce.dzFӰO 5#z>/e?Z? PÞ|&_CNbx<+ uj;E*J{YKb9q9<49.7[^ɳH%.ܯ˔? 㑻H׬үR}Q(Bu;JeOY>( qOe#Uo.qx~_4&L T򲄂76L;IH@:an $AQp] [](@E;&)ajrKٯP,5Jfᕣd.ׅ,e4lʪ4nK@}ƳD,P 2@3(?,B!j` ]T^%!̓%`+tRh~ARZ9΂0`YyXh%`ڟxDkעLis?F;]%? ,50&mDֆ9WM咕ưZ3⫓EE= \dO/AIPrxj(Xj2Fs2&X8WWTuge`@ *=bp Aϲ;/&ByS3(ɜ)э(62yb.Xq4USe"BF E;e !dB)UoXSi"h W ݧcyZ/T S@9&BTgv`b3 ߌ`7_oޚ|ufo\:-,uu?n&GjO> RSH9ZAH 5x)ߚ~e2g?͓l K4a?nR 0]Q&="B!j3؋, Bi~ړ1»%V5f^e03n~,v ?S~ڞt,ӍĽ^!Մ⧥uӺ}W(~([!,A} 4 UbL?  L'Ɯ.My ?C(˗MsvHp9vȱնȠ xtmP_sp"O )I5 dW|F2Q'Nˈ|ߴ\&a44`\v>uo@i70C/p` A< U  1Aw#|#__pˌ+dQk>N!28|"$՗B!=[cgxi^ z %Uthl>%H ^͆<>z(65-B7JHOJ%R^.B!r!qPx? fn@ [ hUYd9|2jFQDo#(DРq HEz) ++,6RG!56쿧/}OePXQi`ua/ ٳuH-ɠDG;=6,+%[E,q-q`-+Koo1Kyܸͷ["!;̶/A _`}^C^̤eEh!c,~#?9e>lZnw[ NL7/gZc(0b glwpTK+Q;p;!R:ҡGĔ焢C 75Tn!x uRɿs^U2u_gPR]W}TK(z9S BpFBeg3k'afp0]BTiPbf/a hh!y7ZWcn;&qN׻e ZƠtX(-cMh|NBxܨ2 $Kg7 4tfUdnc6 oP`Ԓy80Eh\Qɪ<͒y nWJo2w7#6ΪҲrF2u&xj鼗ss/K:YˋtdoW+|X?JV~%SJpxRCF4 MX[³Y5l&Ba]1q[z2@{5^B_Z<,X-PR($Sܖ@خV嗙!^Eп1)ѵ"Xp뫅ȍ xx/oEtVYD*m%3-~9mE4+5oi/7‹R@([ mxQD[m;½/"k<^ Y^$ Qo )m忁"cUt:)u\hPkߨ׎xexYEgJ*vyN]eΫˢkvYtuŒڻnUt0 H`eE40Mn°%X[ 9\D%%},q-q)Dɯ0.U=U Ut6Ա~;*>XB9ī*;qF'yNc=7Θ]l2rCs]v*z' J?p-\WѴSE=cthҡK)(}%k(thN҉kP,ZE-0`PkB*L&a%y7BBV sPƈ_HޗB+0BVw)]hG"cZ{QB^K5j0&%nbQ]B =OI  ') ߥLt['uOQ *:JJg>+Ѽ)E庲<[$VE|~/EHa.j]e4?0$k PO\x?[J~^3߳w )9Hovc/__^EC?]#0XbU39"Y1\Ǒ,7U"Q("΃j)*:b=DX.Pe!M=Q٫zClW Be-ݰP(:"}Xbd bDVC[x][& B!:m[.,$.H8lN PkGdb@d67AQ'BP;^K} oN*Et댁«#.fqT6'"d91@]lۣ2*f0A($w`c~ 1TY4ʍdX+{\q Qdm58'U:a ˀ@':Q'#Pʺ8(ٖ/Q}RY(Wj Q6Ex~Y?ʖBQ /Biʘ+YVi Ls[%o2Z%80OحA2V}B4&cil%cBGGy1x1@G8e<ʃśW1J /3sAEKr+'/r+(RX6eVa)ٗ|3VQmkCݛ3G?C;JWCcXT;Ƅ`pCe7qG.-'+\ʻ ,6%»»L`ЯeA;]ReMHW(vS$0D:Cؓ`W*rBN]= c< P˗-EOxd&|HpֻaFPTq@~`vBL(@TӪ+M(#B4DBWD"f8(Ab.?`1x캈["Wr?P_-v+"bl$,d!ܠ? R2?HFE#Q:|<tyf!~ bQ{;It@S0^/fمP`r@r\Mu|Gc-tȔ"_|wC)&)bJLbk-8^c 9^wLSr)u<,C2>dE9Ql!G<֬婜S(+8YXa#xy+23>|Qm$S4GϨ^[PңĔ EgI>^.8Bzc~Vɟ¼B[P}9Ge0 P&FH^%͖jPrQFl*JapZ"Z P]%/Z(xEr%oP0KY- hP[J^eXP 2ǃ@P=lo IUCK-7aASJ[%B1R]`⤭(uR/:^._>7 E $P >^ƇR\))i.ʕ1헔D-:X!/(e2q>|m*Ƃ6KOvc\AnTp+8\%h~̨@{r?VHx; ^WO'*x)WD$"_ 2(WlUS|8ޝ?נBxCmcŇ!RZLDwlb~fX_sZzgN(^vNZJBS@tznPeݪ(h zUds8W_YˡS?[v ٜS v)ȉqUӸO 'ip[/'AѢW37zwcr8}.#/&>j]^1<#U!,zlNߋ6+B/id,|aNoPUi_F(ʭ ź+ޝ&+OSTa gV) /iSPhW&iqq^*^-gN0i2/Ў>{Qi#&=D'Mӽl}\փ4G#Hg{{aHgD1Xbn?[gЦj4 !NH +;Cyƀ_oX*3ܴWĮ jIONjz.o(ZFT:u\: %&kihYтߋhaU# ~Fȉx(ׄo>:R "-K[M'Z Q'e@K{8aYwUɎ EH-~)6Z.1"AvR?{Ujz?lJ= DŽYV(@+M<=.Y "IaVq$ԩ0 h^nN^&5?isos ߝSa@=or*\o凤DTTmRQtMe-戧K>o8JxivD1v^#Fw. /^E L_-8[qDtTS[Xpn <_Zh=V&Jw4Qed#QxO}1nY@:?&ܻe 9򡿛2wީd!GK3i)2F6yb;6 s'mS_5Bp2cWŌWŌـ1uM]N)S 0cJħyc] ]N/^s@-䈂>:ʖSBBq+*)W/-)iDp[֋2;;#%9Bο{;4̊Zg' {M'@=\9 N4n?X%5 g)ӣ+{H]4F,3eRX|l 4[˅Bt4Α|>hm^A YSst'9e=7@DMubx/@QARd3%Fb)?6'BYPsHEWnoHo>PxE:}om. P36W$ࠢbغQ4ߢXaW|j}ViaMSaun"Au-pᎦ}4O_@}i~_G+k[s*GwNEËBjf3 [͕mZk9:(,MpQf+%F:V8Vxب2tR>}cc8![Ǚ\LO6ep:ggOQPW>4[{L El6E B-V4NZ08vkY(@j|0וr\)RlX#ȖCCQDLxB%'2"tghC@يT 949wz4$FCNƱ1`"{5kb;#U(l0)DRkհB¾"iEEצ%ǨZx Q( =s\G5bd>).]hk{uvdZ[$4:Ij&jj2+j(j%ZJ[eׄ>Fi;suz_ /GӆD ه20sNRO+y:Up[^;O 7iS}R Rt 0[hLtN.ˤ9M89ͷf[/Dg/'*%YR%|>:: YҞK$1$)UՆ| 0ېΔ*?7X c}xlQ~4Kd [T׺d:]_BG=P>*7S$Ej=;*:MUM"SLsT'ȗW=Vљ8QUԸj"<2%3PuQgpј59T(]LZL/WNP>VHcL58IFC-0BMY,06 WF`x"KYXx'6/y,d!O'4ԅ-탲P>yw,|Բ uUBnD\ x#7k߃hWM\S3E?%RjT5wLM:,RUg@-/,+[Bl{¼?FwG5:yEfA ؖ,vaqCeBJ8h/؊qbOj"}NoKVs`%/i~vAZi(JV~QGE=~n|C?ƉJkt)BI7^S0\fPo~l0dԯ4S~ñZ)+gt ZSMHjР*rʱ\WH{3wfFiO"sL79ݍXÞu3 5< \zɁeGU8iO"޳ Js+C^ #H\"7V-CXȁ]8jiNwJ6qF} rC_QT u~U. ECQXjle]S~XmS4PMA45GS\B; rP2N%3"iz+ʙjӞ ?Nga zsǡh&-R('Q/!2Ba'0|2T,PZ9=mS@t>Fy#+fPMlntW+ޝQ^d@|>SzH!zTōDݩ~xf iHJ!zf y6drZl I1BGŪN ?m@t#P؄B-w!&bѩw 1Lt,"5: /](F2raM)j yZsurX*/>S-TI->Gtjʰqi1ヌf1o3( }qKT77 ?|ozj;7Ku-Lqɛ YqbZvl ͘;BBxJ| m'WI!d}]o,G |kCJHTOGX~P ~3N>- ` zt YaaR^oZJPxZZBQ*[F=^8[n-dpN&)Xeuku ﰵ:6u:-mEku:]6|FY5DXV'E1GqϬӱ7bBuwy,+E <_AyJ(@G8 L (_ު&qRNp9X;zHˏWyZB||H5)B$\'TUEK1P)^[֍(o<0|]끳Hǻx݉p-Ǜ@TfH␓&XQ` R)T a(SY{DPhckȖA`C%&勐~C4><.3B2XÄXW3&E"blF;( ~w+PL<$R ek[rsU(%'7:cg2)6e(TS1!,"5WYJ;ig MٕFD;S\4'Z(l\CCXOpb;x .ou|>J+?<ߴ&ӉF77nP sJ4ᅚIs#':_|><#\N\`"븹:=)uG/Ϥyzjn&yh){2Riq.lj*~lFQ&xh ˿S`Hk9O~'vѼJb3tNVS;MTr("c~iNa[_ՔB ԛA/i0 gSwxy)1o F1[i+Du:% gP \f#3}[_?%oP!tʖBn.7[j:J}$?#r':(mr*Dz6 gP +Jz则kͭ=@UX( ]4̒BܕGZ(E:Uf!^,)-3+CHJMfm ރ2% lgN,!5Rˢhq4pR^Ly v6BdᘰO8ÅqB|B /§ N_%I'7ݞ2btobt|3,YF'"s9N!җA:=ݷuZ:ϐ5C>x>?7`4rŹx7wM`f%NoRdFQ-l_3o0$@ V$V<|x t4!lpó$~%իﳡ"*5] gGwGY-If]l(ޕ"`E%YB$٬ k ҕbAit;^ *,;$#gfΜ9ssd6NA؈A(6@[o}ԑN~ Vtg{X-T> lM?b2,zqext&fEzNܡ30Xp!ýB9M7j|! O7sGޚCGӍ,%˗`Fjvbn&+Ԝ0!hzŷu{|u A;AZ=%$i׌I{ A0qFZ["i)u3H AKgzғC*p"e!8q` Rc/ng: v7*n$~Bӭ]D9$dHF~#펮6 0r,6$qa䊡I23C`4&ZVc ʾ|hK |qOg;, ^!OˋP #5m9K[z la"E2 #QUo ᡓ>Ksp?~&?q !7e{N~Ksp: #Zß>Ȟ"ݡ}Bs{*-4og5:Һy1ǬB?.<$8 Q1<[#"U Q 4$m!}OkggXIBp|RƁNR<_8|s96:U )b$&C\Yˮ}cRLj(_FN@4毰0KVn?& @[Dn1-$̋^8?ϓ0HǓ4E eBؚ#t-nΗIX}f6{4q$3 vvHuak_+B713!\?#>±Om:Í$"~F^.e!Is=NC4"eI|LC-`=:'F&y'!2MJJ˚iD4rhm%"ޜip*g) id !`I[Emej)c^5PecN4L$5IjKSI&qHǑtM L6zcTKrC?PD>BwBY&3f )<ͩ{dk5dh0;MZEFJnH%ͱ._!X%{Hp529>),#Kztsyo2r3 F|QBߐD9$h%C'E6ʞF>&iGҋ̫)*nIh'+ew<W'VU,L'sTLl5CV‰{>Gn]Ä0mM3ӍQ8CQ?ؖɈbrvņ|΃M!&lSf2$G.!D{-rH|]m8L7SrڰX"G2&e!8KN{} IO ;rH0zl#H;Nlݓn2$%iu68OE``:ٯ%D>VD9$d>(z$DUk x!b-e2dL?!m+! Jf͜~97S2%3.&n3!h~2 ǡtB5ClE0,JNk-gx ǃVX FQ#14NΜsZUݢўdCQ{Z8ۭӍ̥bB%~Uuk+ZRR5rwpA'f8WޞAYgK;>ɯd>H1n/ BGdCc6ݠȅn-x;n3eSq-RzBqn(~({Zdpȃl m[Fn^ $!L'!\#טkK'$DyGy8$2t+߉;{5z t#pLZ} fCm8nCmu0ʒun/#̖nl@uPJؑ=؍e߈PFv0'oouco` Ź B$[k`"8Ye~u.vBů&&ܸ'`J.AftA/l^ tDNW-2zz\j%判mFB7o3Z1[.wD#Џ51D"eu;p`#7{D>HsxPu6rH ֗^F<;Pg zq#ʹ=T2z99yRJ+ͳ9Gf˕" xxH 5ztžӪbeM?az\BŻx#b!Bzld7 Fy6!2U8ЇòkǂnԤBtɖW8AR#hJX>ޞbd8 !v}qHH³#4-XC8UZ!g^/̀sHlO* B 貝iL~b+ahgL'IgGSρ|^N|vj$:[4L;v M,'n%!h]pЌӻ|EZ%D9$CyFVnGi_ ooOm^B KrH,$mS+_c`K*TxnDI~n3#]F*2] ISî &]+}j>"Q{7!aY{T#"GºщqmcXWhūȱ"&tIr0IoIZ4AmJbwB0-L}kFoք׉8;G!z$I&F0TRíF{1U^i:J̹D"B3@&sI\I6 B$URQ׮{4>ID$b]YzA~O1(eCz tD:;H2o5Ep?Iˆޞ#9~7[5؇F1PY:>A(6W[+5[<^"w}m%^" eI+`T-#vV6B׉lM1mF$6%ӷkLÃp.FƓxO7rw"V6N~B|:VZnCfBo{դ9֌v2̃~'Z>[J>Zx{èCXj|EAGRcb͢Pn$_z`)Zd5 Eo:k1Ym_zU aJ,׏Q?jzyPǀʖ]^l6~ɖn/:VGU+R_*ɖXHR)Ǝy&P 7rqH4YouMd8uJ/:G6Xj/߶EH_f?ᖉ _s(탏}L>u(C_9(k eoNvkݒR%.4RXӚT \Hq޼Hql ]?"gsH?t:wB泴-[BlwRe6֖ZWޢXOJ c[ ֆ9 .[/;4%O_tʔ.~x} [iOz$XMn?̾';˼G-> -=֮D9$GL(eVjEǯIVX(5 QWf`sKoA|fq-%jˠo -%~~q5Kұ|k+T_H8xWtNZp&֏}Hz3 _?Zu>Ddf\1`η)s (C͏YǽH}B=W| _5m/3wXXZS("&?ky79E9!:T?;7~T : K7_rXh-_qlq#_nuJe]3KL2Xgtsclb?=3NCBl!JkK_u˶΄~ݲ.GDB0of7X=%^Xhο^YdWRsic8o}.2JEFDk~ ujk+>|<4!#}c/'D8.X2V-4bVUxWWT$ K) Bp6L1RQJSlEF$!V \d] Ȕַ*-2rg%-2?v.22?,2OS^KB]Hhۄf(}C%mwK;$!ӶJډgI{XUd}N޷i J-o Fgi 9j] RD37iU+'}aeX9MUMɎDBk%=( k4"6}TIwO-x cpH/ͱ(#U{IگʚCc#[xoߴT$f:m]ћN?jk4n:*hm= jBNUj FCpbVάoPl4(TN JF#>'bLU~f RyEQόNF-ԭL1ML{e81j1{ ة<TSiq ة$*; !»Óu݉2Ji^;~$ÌK{eCi?_OC -8E^!{DhoPtDv;AR+<`]M1wsz! k8)lv>bI1BpTI|&)z[R2df2J,sKH^s54>#ܼdL֤Cry^8?r!Y Yu9e g 5ELי[Pߥ'TJPn^ɩox0%" bt#HMW-~>5gUї^B땋ⴤN:{pL)\-)KBR =HO8>$e0!8UBBpt/HFڹA %^߶b#?xLkL/4KYl+p'B?: 9 I9DCz_ mdWyrXCKUփ1@sSNi*?kֻ+vJq!BaH(=;7s(lʻ D.`{M:@; , " 0Ռ6$0r>/mPZ kXY%nI 4-A0 Sŵ{Aa=t"D%1;כO'4܈8Ϥ99yg[NN0ZVpm>Cv%!JyWi:qN `(6f+I0g" -'`aB16Y)D98/g!!;PЍ?Ze܎2=jxžػCi-;YXJTAFN~=+1 q^ܣ"!cj/ox Gr\I^y7veDp~p KD{2E+Eh[ KD+j"M۲̢rQ% _͈~5F!el n3!hl[OBNܒJZDU?]~ -]GG7OHspCspϢ<\<_K8bu.drF&d_w?!IxGҺu{^Bvءe.)MLDSvZQM#4X5أ-)PL%qLY)b&1j~- 1FZi=<1}@#%w|Jv9z%@#GׁF cg>S 0FRDS?mj351lSm#ӌMpu^OU\()zOF,z|7:T-s{YzC#č۩BD0`ݻ'3|{=_$ADU=%ؒBpJb#*$}i,6""78nrTb#EĴ Ț:k{%ub#?ǺF(#S)d>3"R;ykn;9F==-1һWФ 8xHu:BhZ^ ,1r : W` eI*[ў +M0{k J;a~x~:ހ!1L ~3TH ] 4OK*n$~@/$4p(!c‹C3(|,q-M7UYH` ]bLM,mlwjkЕ \L]ōXCeDyXe2mLϕPӄn' 7c_Y`o(f6'ϩ-RR-U ٢*.b`wݸMQS%fY?Bm[2T6B0L<<&яp0G )9v"O앪YXg:zR57;,wpmӋab8{66wqK^nˠ^ʐS[(Ti8!L9-!WڸԔU' jNo?Y5FPH*bsmJBxx.L(ف{mt\E:VM*?+aymC`VH~S&"P uhAmBd:i"AB]lj{gg˦zNPM!v‘ k4U,8,Kk.WΔRVd wk>,**Zn m۽X$}Ժ2GZ~BBw+ղcqO#yHo?H̿ gAZm+Є8ds;oGwZB߹+LJxҁ-MZV0ioL\7BNu jo"n!ԂCǴܞhތ,!/7@xy 3?ո NBVVcOO\wxLr.!if݁^(rgwx%u#rWRNeZӆMLȶ2IL Vj<)`"^H+BLd{'"QP\G{H0FJ;$@*&@ʞ?șHNhg"aoZ]H 9ϛVmBRH U\:PUALsKrnOܸq{~ 3"rH[JLBdj7ߛEFVM`pm!9OnW=1WToqIƏOVUb,'H #sofo6>j)0[–1?M(g|٢y%9;3,dꎳdD 3rMqM~O.|g n^tI%T$Lɗ_+6Ґ>AϱUو(T%^L(Bd!D9$dm6⫹ ^B!Kwz%Poukɳoî@R#fuV̆|mſhbj!dB%Q [ji{`:lQ !f3ʆFP1lB T^EGPSkZ -TH9 SVEs֧,DxY`FHgB*QLBnjjrx"v a U[(: DK_RSkXH9HuJY4(kNC^u!Brw}g[y>INƈ#_F6!ChFka%Zwuzq#' mZpd2l)xv(^I c*Sc,|L,l` ffFe}QȜl+QH*Y&{b{{Df3I:!j|gã^{COsch?~K>dCiWb`R#@O_j[W_-51,5"lv\j$q/2-36LH˖yL⯹H݇m=fˌ y+9\'a_eF?@eF.|rl}O 4OxEIsxHP߶>Yf"ZBڗTpii!pv)iOyi76Q1N#w=ZiikBzϣU ,)1z]nJoXΐThS/';+g])6 GUڋ `;)!B~NT\f& yM,3^Ir^YV#!XgZg"K1!Xg[gn$ BεGb,`ηW=UQ҈ -s`\[H0?XKl;{ L\k]LYU\o핔7n^l!RuH™L =8?D4 8 <81^~VoWқUd#$p BkG7,zn)䵓YJYm Tby !G5Ymd -3g;@F)#+>0LbB6S9N:TzN5'.YS˶ g۸fͿBYDNxWy9Ox1fO_$Ŏ0xס }yzs^I._L10 mbR T}(pr#օ'.7}pU}u!F\B }{qw{nˍˍ|Db!x9LF8LtH6F/72Kz^JFz [EdK|82"U.==pr#uvk_z*bX1/H1=_} WMaKO_FzB5ėo/҄b0&\Jk9k^b/;5vB,'>sVH hK8TDF K/k#k]2zeI}^}NiTv+2FnIiZf*(jTU@gd||:R$Eq0u3Ƨ\~Dl1>bw"40riՄ֯0o6Q%B0}A!r Al4V(42&mS6JؽˆBXKSPobF5FmԪϗINu ?|< G F|#`bH^v H(Mx|||K$%͋ȟJWRvO䣜Y?𳘎~?^7\i.?J#=uG݂} F+iWݕFzO-+"[EStJ(1^5-*H7tOZ(^iW`z`z2 sfQ)dQ՝zkOkb"\[zxLhR9u.ϛ2 ǑƗJ?Q,mBM1s9ڤR5"T먪"u&̔cA FSCLv)Yu\lI}pRRKTūqÒ"T>iS}Dn-g(A( T(n#\F`*Wev8\M̹Eh)335iN&6@ELlk7UIU|~A+ E`5GHJNU,PChzYPœ5YFyQ=!72Go<~tUk-Q!gIIeI&.Fu@B^,*0%` u[!sҾV?H'܊lH^e0rL1RBk#gaF8Hj˟}oXeYedBWR_Yedo*2RkTB(%JBAl6 EX׶9d(&#/%j5!HO/U!65S H!+.VOPdW(vkr<^I/wK6&MbUo榝Mڧ,ӕ BI*lfdR6Z>N.VWp9jq鮸*_cxJ]x +f# }.,ʖ zd2҆ )d^#māaTQSvrkLuRNk-d҂zﹲ?pc'jȓy;T ^Q Lol$i[%&/uuW#BTĽFc6ZH g#rl$2=1^ }iG4ٓuiWڿQq p%"գN`7}6*VP(S:&^^Yd 0l|f`B"GV :G.\qM -+hQ>aH%\E [ E0~4<;k 0ݛo7j*ʗQ|7?7"a (7Y7N~l'I-kum^B7+yNӶh^)"oRgpTE7{.}{{v;w1 3F;/uxulM@쒠.U_QȦe|F`.=(Q%[rQU;^"tw{vXdKncp{?p4cdm6Ynx?/}d#oSB䛝h6H股}K 0QW~)tĢĴfkQoJjXO;nvn&;¡1 Ѫ_F~&M6ROdd. գq\-Um%]AeI=؂Lz]*7TL~P7XLmޑ;rM}]/5R_L9!ro%m#q Iw\k$B9z+F>{+EP䃷Z_'lx69Ab+KO"_]'#mݽyPPMW9C gd:xnQYk˰d> ˬb+gJ&.1RB?VMWߛ. &r$!QM mW|3HtB-sJ2oogBaVv8jgK fhKt>0i'>ӣ- Z&g, -nBx>dYWtn |hHvOL g|5/x ~0?81.حSD~W}> .}$6fBygf"yRjs>PX=wFn940!ye0.ds,ríQdIY#p\g [U[ARR{:RDCPG*ʱBa*dL!Y|OZg!mR))-e[cnIz:g iX k)] ?ޙq[[ox?o-czq[F;U#?A_$D߸nBÀ ILWr|HnD9$dLl&n 2W,C7_@ڗD9$d [Fm]N/-29/*JSj`^;RoC'2pVgkU#dOn`6\-?!+ds`icoEM_5>hK˽:ĝŔ90F;}MKJ[ez}Mu;@N"h* oY*&,m E`E|1(BDLYa_gDRk3r'^ݰB[E|big hS~l-Yvm,#!A kp6 `-g!6`yHT2'$UZ_qMKJn^4$8"{{FqP]i%E;=5.$!A0 8&]Jl(n%{+ZEP` Wp#rȑOv{4*oT6F#|@m eE3E)jm[7I;b)$Q$b';g8Q(+x[^NʊȄYt8N>5QbYCc2^Kh#Tck)K_0xq>IIo]-?.̰ۆY B{Qwh]B1'j(uu{{'a\8V0YZy %ZDdccfn_ LkkA G ,m}~0jk em:f".k4Im)yy)|bն!50Lg%%[ |{|ϯ3rq!X-++ fJ]tZ9kjaC_|ѡXo `2?;&+5f_uF.lbs=! ,YgḜgC~ #Is v0널1ϣS `rٖ{t+ JۏxL3j !!;liaBdhK$!!h\փٺ rHVFU1}j3oEDfj* 3r1GX\ɹWPWָtgò&)ejUajp^gK7*gs=kԝR?& D9$9>dI/[)%5qܡ4*CDdKD:w</lj̘eAgx.1ܒ''k$OqNID~gP^y$pL~Ǽ͙ 7-0xf#G42u0ФԢ64DYiXT`SIs^OL}tEOqjRF\X;k[ʎ5?VF0; ldw0g"}$"׷NBܲs=С3&Dm&2X?wHa̶o^odpZIquZٙ;$#CIFIzF4 WWԳR\AϐW6RQ%;vo\)lx^dd.~[V?ǁEFj,Lw+"\~˪$wHF`[{ҵt)?iX%]Ky++N L MqA5*m3jLZ~y3i7Q?MO5,{=r*s5;aKS͋V~{HؑJi/|D_[)J)+CŚbT5;!׺K*a ]́&7b~U+{!5ܦzûCω̨6eZJb !Y|9;y,۳]F~%^J~W<4x7q]qn2b%CzWq\RX*e,X=-<#dgT%!auI>LyF-Eλ\`TKGF-1.zR>HXs> !A/ǜqM'Dq֜ωrHAr"13!,3iZfM&5FJM& g}1ِm@9`( OdQ2&;(Lي(طA l;9YϘdZMw ؗ~2Fs$q~Ö;]y).%ܺ]wW+?Е`Wދ!]y $+JjOB%@\4z#WPZqCc񞸜C?H+Mt_o$+덌YOiW|׏6?!8 4mU^I}v֫Um!s֓+c:EN|EO _WyZV;R <kP8/"!Kv˯˗Elle6wʠw|Rb=⡟8X(/%|bg[֠ߕ*xX$̑"JѦg1~SQHEkx!&+CG"#*HZ#+;iΔ11ݻ|v(*7,ZjsKzi[f;~3괳<>֫f-u9^/Uu=.lBlz׃߇Xk2AvD9$Ǻ SIJl+룕Hf,XEr~| |a# 6`$C,cZ=f&%֠krHB˄ȶtFF`˚v܉bfϵ54ZRMBjDZv: Jlxm) /b9K_IK 771l~xU+B=m&'؊YK[m[-湍^m Hsx[ly?ڈ|r/̗\RxE_riqЃ'māC,cD#m !AW'v)~qP-6R}+eqldӬ̷<;. y|+)DHP>mJo)TpQ劄9ASX}[ePȄm3sc*627~P"5۰SKHeeUpԯh;R8)fuwl\H8ARBBSX6吐;U >U};*IFCWBއU 7$^E*-V !hsClh؂Tx7hw}j8ׂ-*yX.OL&~|}|Q]"*viQC=NKT[,±LD8$8~ecvy$}[){Dw^c@eHGy;\^YO讱RBkV]GM5 Œݚ;0x@Ћ2W7BH&i$~KS+&m;[D/W7oϫxYf6H݇wMϥFPJYGp}|o\`/qG`HxS .oyeQ5Ǜy,z%̒WR2ZYLޔrAxǍ ~ǚKDFJJ !TnBe rs2шW5zXYG+#X` Balk"!d*dYlY N̵>C*;42bv]g Ar\K.%`R0lZ_ɼOUazUc.fCds`+ԗBy9J/T{PpQۦy&`ڤG ^InWl tBl$VX7/ȕ^G) {'bP| ,W"OH&JDaZ_|"-@zM(Izq0Tu&-RlύT@ *`焊,5Y&y[n4r*%6]Nδg?ӄF]m$7%Dkl}H6ydBrL]IF>r񑩄ĭ`2&;֝=6顄6 7YR#ӻ[3Blg~Tl3$ث0/1F# > h |f]mШ. ;U\%@f! 5rRrz#5\[p̋l4!rK(d_5\fDL'l|%[3n+E8v@rZ|>vi4$fys:"}⻮;ٟ j &$͏|5X933Q:JA;Atඟq2pE[BG >zkIUu"T|h$_Qh/cْ~&%=S&+J˺OVɇAL#Zؙ #H{gwm E9H>J&PBs&|JHNy[sZ m' #hBjxL*Q5m~)&Jkpz9@8UjQR 1L%n)>g朗~Il2FB27J?p3[IݑX̴ _VGlm;L.B윾d*9ҊJ@dU˩2B"T#?PWOȧ> t)1jb1Ŝ&JXS!1J'$'u A0H/:%(%nXD:>F'?L !ĵ&$q{" Ai>I{h3冢Y溧KJl9}B 7&ċ4T!7 E1ݗ%u uĵċYJ$_ɣH;\6yUOK*/ PIJe؞N_')!'@uOddP+6E HXc Õp&#ulCl@MF|$&#_eu{,/u^ Q }ַ_JPb9XEGtZgʗ'EYc4[|)-4dsO>~^%sy-I5ui& _d603ⲡ YX%>IT@ͳ!AS9Z)zQQ@9k,E™ .jvOk S~KPccy.')D-1t`E1-aDVoqn2e> d{O7rd$?dr}2lݎV`T#[.GׅCczDO]\`r}޵LI7Њ\Ct말nߥ bE,"u(H9VV@& \>[gė:ʖ<#kDi6ʪr~bxI'*S<է^鳷H -"MQW! M"!Dϳ& iMZXn"aEN{ tp{O]r:j_楍 O94%=\E]N7ɞ.rR-ޫm2َ,:jG5HЫ66F5ovr5>IE;isO3U:!װԥQlК!*rE~`b˹LU̙we`1k1&ܵrkזu˵Y 2`AOTrr>]q%)mCMòu5}DvEyc ekfV'ÌaSiNN&p2LW#bB0)*o$L;O!h\k+G])m h_17l)c{c.` ؜`Б6šԐwi㿓(DqZlZBq\ 2ҁвjV]؅:ay60FdgWb#;@QB]~n!Э-$g\Vfq?d'\ Cl)g]t!r-^}C&ĵh78mA*]0Aq)r2U݈j5I)IQ^(ҍq݋2(I*fd}s_&G1F"?n62&7fkf#o߆ŧRL=ǎ'aG>ϓlk$}8}_E~uݟ 5) ?e?G35Y#܂>*c659+aL[|<0N7)iхf[Կtf9Xp6Payu-1|P}(?Zt:\ԍ 6su+[OH>VfHzV؍n=(:hu>""1Ԙ X|̘3[xѭ>IɐӭXM}.TPv uv4~Tݱ֟mM֙dNI~C\굎k/ gtsmf7)!6w@ΛFFR'ZضHd3b?q陜 !C\KEZluEڝGf:NH*[oI_G䭄PK),+0qwPRfFv܉(5J B{Ф|QвZW %n!hݬ+'Zj.A'FM*rkm1RD;_#[+B bd 8Ώժ m ŮAتkV/<\d]>-r97m&ۇi5AȻ'Ǧ%bݰm#RU`#I`#՞9KxB'ﱚ>;"~j Iz@\|/4Ew77 MtŽF"a:|a^j 4:U |JwsV혮R8Oz\ :E(-t:8F[{'OIJ_? -5sA^hEeC>W&y'_hS1/< _{[\$|-s~`!&ӭo] <zР.ΚvE5)DL~Pv>Pk䨚rS'6ͩk u*5U-FR-F[tԄFGV#\WѴ'q݈;_fg`76M q}}]k^!K)yEc!Qc*Ӡ(!BfKQd9' R1t׌^}( !<_FSЧ շo,eA_ݮ+)}%"?ٮ=Vǜ:kLإ#$;t*XFS_4IժRxLR[pK4o;:ۺpao;qb!'\}2"u>1oZs]2Sd--= G Q{P6x)"3s+/tmf|**5P"N!8:$ixmek7NdWlH_NSC3=u5CsA"ߙv.rSX›7O7z Gi*|MkC?Y=Ҋ٭F$!DtqF.eXFnn ^y("wsP(w\VyߵH]'i~6#儋'+Y'i޶HRsUv w-sP [IOM~TcկRd5d[;4 /~@IϠWcgo5rsrjnW}kαf&RJ-sl5 %aB0GS]i;lCgz#zܫm84$!΋S}HLlmD9$f+{rEZ( ZZ?0Ϻ]OJ>:YfGwjmFx'{'>|s=J@O۞bpr&\ئ: ocIp`fySET QB٭W=ljF'Q)4׸A&S"A4gߩ#/ DlyrHv:+IL,+T5[SVϣw 3AǻyjbSw[Rr#`,{-:BBF)gnRSנj/bDd@d~0X2RHhO?DKD"7"T#/$YGx6#=BB0T`;$%T'.W8h4zs1iFLԏdjFAW吐»x.'k,i~3Kޗ9VEܕYiiMN:U]U]㲠x)%' )X9[i"w)_[ŹK~k~w/l-~K8k?XrKT:O, [)2 Zi =Ό}ɖ0C8qe[vJ_OOLĕ֓*oM:m!9oal[vS윏bIYHD㜵sQ 9@5سG}t/:T`'䲠yO&`~^VnʬsI* rfȟQm=X2jj][[g3Dw=;ْ,atiDPH>Wmh.EZ2}LD@W%ϳ?fX~XegJ"u_E{/İ5tmTi%3Xb+'af Iop߮ɒ{і4 +гrR1jdkL~JG7*[f/R"n_vlMtOS/"bktס8'%thz_NpO cLxd2A-57ݛ+2//R(]d~t f!r1.3=0%R?m堸`?=`Xg_PӁ1(2GLK5>,`C-)0h4..UY"!bԅ&it<#`z5AiMa%D4.'R0)OldqY G/'Ղ*zL!eA9*x9NiF#1AmnY8WYISTa'e+D#󤈅)/r' 4~xqYS wb"eWgu`cXד/"XV3n"zX]e54/uKE\T1' ==nu^[bU<*y*?=] h//e8ъ1n8馝ķ l[!^%NJ8OxHwBlM5/tH GL}4^l"| "7ͬCD&J 3Ânᖝ,42pE!!c C4[Ct: F7ٺ39Z{rmQ?YBKc}7Y jydn=ΒksԐ5爮?#C [ZZ bE+ b]({"CħفHz rkպx&$EfI7YlGҥ 6ouͻu'u"xbY"x`EA٬~C|@^&!ϦYSp3'DWyyy qg <ȕ6 IWoOD0&Kz,b-!ɀj\@קT#POGж6~=?ۘo&"X/@߆Á^ KcU?m*^f"l(M _jDsfK}/odrmH+bgnC~%bg-se#*&k< 9DXz+KB\biM٧]-Fۑ Ӻ'A&[,@f.\-j bbI2N/e%+8t%+qHG.QȦ|@ 2|w@$O| l^k*Qȷ1H:]';5l[-5F19E=c}weW[Njf:|#N[nkp/Ւ]mIB;ZRHmI[-y EwZOD32V!Ea瘤m3?drf!)& Ú)e b2BY)/ndEVackm<)M|"dź;%ٌ-`D(莓P+XAq['I&~5}c@#[۔joq:2M M6'3HAZ?MIUzǍ}$,x8Ow*~?CZ;"xǘ|%-^XO>pPODx'V!܃ЅW)mcߍuD +M;mQE'Dz/6 wSVL>$ɽ8 v̬D7B"Λ.2{& In3$~}]0g%jK¢E܍?~XdIWm玳7D|RD6WO d?g<~KǕV-];}ȦW]OV&/kܢKO:X'pqhM!"pٔ5+7+MRDEĘoy,T?)gU xkgk8n#rx~͖.lw%LF"yܼJ4hOH!=o!nNTzH|f W *-Ld8 !9YH H!"r"jK8q%Eb8U;XB!q>싼}se04Ϝƿ&x|E\ VM ?ƽiKrP!{d ͥ[զC*5Ąv ]FD ?Ç8Gioq.$ϕA C>|sְ͛k;+pHeMcFހlú͠E<=.7xEM#4pN74PF$OdBUE:`N5l}\`|%{E1wNoUrI; UD>[ԉ{b/7P0"鱴w2/m1+ĽeKRr ^-A<.oْ\~+n/|ӿv\ۿe%1@3٫|?I>OmL-=>?vcȶ^BK jYho{i%mKBBKG|-x) - Wc%i㺅Dz✞dIڏÃ|տd|o[,ygiw[$ǩh{7TKƌBK&R~2I00BK~g.>~XhIw8>|j[G?q"f 6s?R}M!44wdK:C| 䅂٭pV|G^==JgIQH~14.IJ3/i[饎?FfqMBQQBTcŪ5f|זPHLrƻt"\h*6A˂Zlp]Re{ >+=,:Ђ fтL)'pսJg6KU7[-yNm_?[޵#LӡDԬ#u~~$1J@)GKy ҏDXʵ=Vh:eQhI['aDlv$ vW[Q<5!ϕ1| -y?EN9|64L=GےG9ߝ뷀cU][tx3$ovGQvB890k?+/+D:w\q#$'}E'2X-=߯.G)=vK ֙Xݒ߳ŗݒlIݒlqz#uovK#MoLj_md+1YoVl [r3Dm|[2IbvXR#RKvЍ;,j$q %qDHm`Iˁ$}D" *g)o.D(+^m_y~% wX$C;f٢wc%Ŭ%).[_fo0 I|(CJ|N GWlIN'4#r@)%!'Uq DόЁt\Tw$D7GzHrYPK| !DE8RxW4YN!^ՍVGZpnPj`O8 j ?~`K\y 5mhmaI$aIKF/:H^KiI҇7iI%wJ$i7P W_12Dn|țMhCWf /FʷDC!izv_M?`Ct\Z]^w;јzp.]'}t)' mgDy -qQLyiզQv#L&c **1#.Ǫܸcx 9 ᑏ;t J>bPM@n^D"gsEy:x+F %BY+0=󊏕05!ohSJ~3~^6gc3֧2:&2Sd0L]멇 q'Πl{LoNK* NKnnKҝ26{e0"sl:i }nNOE%;\*kyn@ $El>LbF6Cۻ%-㐻.s#"w^oRF Kþ;-1ʎ.S ?$,×* Ï1m?~W'%9"NB5w|@`8je%D cO$_N+p8М:Җ Ŭz9Z"M$ޅ?jw!mطi -J0EXTUL،x Ԋ<7ל쏫J}7ۺ83"i;xD83jAH@gv:tدgqE}#2r^p0$ݚFԬ.\yK!svY=_]Z˒A7垔MQ`~ N\0P_A[;ϒ-$CЧǪFeff ~)F,bA*4*t "S 5Eј2w%z \u%ۣѽ9<-2,eɪѶ$˒1$ eMc<Ft"a";.Kn!""?D{Dvz'S]kR@c+tGFckk*%eus7 U۱Q B0pma Ͳ7G )}HrH /j9c$R]ؤ/?3֖"㈻_6[mFc~˒ۘsKH?R:k xX Q$7+.?17zF,F'UE-b̒$N BD>v, W3b́Mf1sW)BE_X"_d|$9VzȈ}$lѷH^nr lfߦwQ+`8?M ltvQY-жn*7rrL|+2/ypfDJ+CCTR"<yFiJ.uu3|XRJܛO猍+8:Ж^NzFRidcW < ~m<ӑY\?$E}kKh\7:=#h<\ƹչ}"Sǔ@lc\wg6blzlR(uug$z̍UMU55]wZO{-6B~x\ Ázq*;Y oFVPh "@@8?buv2CdFlR=MLw^e¹jN i(+fCH|ԿnbqKWe >.6LInE8~y3k%[bu<w}kKVѓD zűɖ!='ZL=K먱KVVShi|&_* %.y Go"LF=v&A᧙&juXs>r-D,F0%pkjP՞lx{֐ʐUl4iL=[zsP=wZ_^GזFfFf#$ގj^.c-Ow VGpn7n;Ptp/I&^3CQ"amp /?+RԭiA cHTƖ(URD#e%Cl'78=V3AxTvtp JF$ֿE]"WI`,o簘\jH+T/R{ ) x (o/*`eֹ֡@xsRDݬhx&w3ka7]oݦ8O%oM9_|trRR K]-HHzWDap+8vQE_M0Uο O적> -@HԷAx&7N4 Cϗp!C\eVA>qLխ 9MINہd獅 |Ŗ a [2m- --ه?/$Ȗ-y-y[XҢD+z:{A0do^eTe^0ȍ?Yd4 q} lݡv,g1G4"RtʤhEl]@5I^@eɟ;a)Kpjg9B~82NK Jv 9S}5H!9_?s%;MT ($ -=Y%%cR%w/eb&m9ReevåhxmQpZ&Do.ǽVآWx|8dK-6gADCŸK@ m6޸yZ {{{ keRfPGJiG!G[ |^ۺ"W4`\dI,[iKrb Y[ wlͶc[>CVKPpHީw5NV|g\{' K+5}5hˎF"$W }f  I!0ȘV{#Tbi%< ҃]a)")Ug׸ݲ2GrJo $+پE)c8UF&ѵdc5zb%wʯDGdjwgcqD꠸6p[U~%R5>"_(MƯH}SbkM|g#*. jڋ`Fs?]y"?j\μѷ7?q۬%߻Yb~a߫֡ue^HW)/~Ik5EYM̉dFDNȔOau?LF0=tlgڳ-39TPgXT`ƫKGK_-?N f`yWtofHWx;KGoo;Z=͑bGtVaBݨr(^_\T.H{7*G3uI6,\bf.F[lϓK7`#>ߛэ>Pw8O6mbK GŖzؒlmQ}%?lK5-%nKF0 )Dﴓ]Q\F+$T hӀ0qm]55!"$3/2\RjRwR!"LT]$,U\2)fQmor*e96 R/f: &ϟU_o8ڜIcREזG[r&LD!״F&>߂OI[aodɬM|y ٍŏ AOMqjmFn@ J}N8#f:巻H`~vFHǧ2MЋhtp537M{ï /vɦ1I'𭨊UcIIDUx}0צPdcnQތ,+OR~(ElɏOۭ~ni_,|{yQgoō3/|hoPI2B@tErn?-M8 =&`,cedleHU'!dz0,^x#vXWԙ> R@ns٠nu/S jRw'co,Uܝ:A4;BDAR\:J_cUѰJ7FF 1,mIuňl% _c|-w[rf'?8S׋ȩؤO*`[LawQQރe;I^!inK*jl^lwnKeKBp%#vIQ8[IC2XGWF }2?%{Ŷ 20n@$?'J淛Jİ+`T E*6ӍQsmh.`<bwb3_ ?V9hy~+򁽌2d)oaAW<>\Ə '&I5xz'x(f)wZyA1E)F>h͓vTzO ~ӒX p)ewMo)>Ė }sy?<N@ -L$!C-,ZQMlnv%=Z0̥$L~~xHF7|ynK4CʼnXߐݖlGR4BDXNTjSՃw`)`iӶ+`*7Sh|oT@9@ 孿AVOXKy=ǪCM)_ơ2F cEٚp>FT47ׇlIFϒpөxBacףy =E{jQ. ka%D|ts$|*3˒TM<ے?Pf܏"EL[QDل<ș]Yy)j^#f8}Sq+#؟ejےuYj8#!)I"lƧ[l fKE)E3& p%ړARϖ,bE~*%>O屻1d? ,_%e,)ԧG"!hdWJP"2I)sBفn"C"bzZd*k 2\.}"1bdC?Y1pjN=7$l;|GA@ z##ԑӑtݖRibHO-~QwQr-5$rT\}n$/)Th{w[Dt1C-y--y@~bDY'lQ)ID9b4q'w t = gDD11n!{I[uo\Ý@xH䇓ācS[! jjS$g6 lSPz;{1ǟ+it*u^`)[:_1ɖ@ \WB@p,~qO,ӶHʌwĸn2$v]i=93Y1N=rc{,t/wk:٧(~a%E:7XBbɮq bŘQ+c 3i] LK^"^ {ͥџEa+D{u *k:1EvHt 2;C&'==KsbFN0I pp+AӃ0utY™ I@ت' vA{|KRd*6&mS_V4Q3uoq$B^%j8RU$9jW ?IVMވqLAB7\/Y'iG_l[fJ?1ߣRa"fu-zh,#m<}RڂRJfHiUp0E E}H[*$cɡ $ cp% ж {,y#e{,YLc(4Ig[@nJV@̖pvw)v [Y0A"Tr$韺\BPdR*Vv$YY"#&ެܗd>qzvM%o#F/ioFQ͵@C*G6Zli%QC|Z:Ȧp0="58@4- +5 ܒ\UTq$>I~#fVqD  iW?Xr.\7.~cɷ*tz%d>CЊ {-Ȋ佖<|#v^K)T̎1H{<kI'$5+k(/SpؾF,zbokIID\ь7֒޾›p0N 2)ΕT,K^F&&K*=˒pؒ*Z7e%q$YlI-dx|G;wN\ 7xrr 0"{5i7QƇ<GΓH %RHD1]T%<*sr0`FJ]HbVDS-Wz?%Sns*!(K0U'7B?UҖB˂Q-mAi"[=ˠa,j_܉ZeTPY䠞{9^sLƻaUGՆz*o.|wy8*Z8'4h%=7z|CD$VM8i!Jmhj ?+C V5NOD!#ԕye OYDC\/畁Oz:ȖKh-PexŞ ‰={ `6z5xmE+mƖtsڶs4i9YĉzDGߢ&L=@ t%"|U̽KZ]}z ϭxGuGoUGU(T֬ZY1&1~>"UAYULWIYK"jk @W̙=qXf-I|Ddo'2(N=By" ߹3ye` :u򂙞)rMmy\&&ٓ75onCz5\FRNr-LJe'cP6MKG9v )Z)|3ԙ(9mx:sG#e[)xG}Bw$Oc5Zr1h8Z jbf42AJ,t38C Q%Q;DZԫxtWC8!Bdeѭ,$wwIOyH+&-w 8-d-vKzPJ_Q& ;CZΦP&¶0C5D͠H :[rt3ϸߘ,JdGef<8T?W(pxMeZ1ĦZe`# i2CyHȐvTJzRGՄRd swcKy>іC{pr xNԘwK׽J3|G y#vTRM"$ݩ/@b5Ώ*kZQLKvR8e u|y3-U$y*+^*&29!`.UMKI,gLwkUtGg\]Wʒ[y"qz-9 W@=ƥkA%U< WyV/۸R.k/YDD?;@q"y>H+mOKu"l|oUe\*~G~kNڏU5,m{%|ngHWUľy%H+"W\Ŭv:$_)h64D C/ã܇>g|2beX~p#J\ sΫz1LiL`=ƋIy2zKT)(R>KHEgݰU^@<)H(;nu8Էf7_nw$91.2%nb:"v>Kign(0=Borgt򬼓mmIora(hKެHqaL8O@B9ggɳ4B8}m,5֩ޔL˂JC}E=Ds3ޠ}@+ACϞH9DI. !dGi MGT LL5KD5tV3(n+!9)Hza|Ks''ka6szCc냝Gr\vsO.m. 64g3:el"w.NǷ H.G輷rpFz(xMgHrYPFaZӆ| #meIrY0*6x$5xif,Ծi}!b9-{G\iG͊oc&Ňd֪Wv{Id3:[(L%䲠ΑTOK$g8l< l<SZCq/.F @G1gzO~oA-_'c-^GSϫny2H%o7.BMoyvWj~FD޽p`#5>m"\1F͟Ô:N͠>K˵|M˂h6qkuM(G]Z8#iTcU 9#2hU& 9H'9~:=i<,b[< !p(h@b쳤}F;U*e bg2G7j}x,Z]s])."ݖo<ٔR7dJ5c&S"3Asv?&)'TMJ(39ԩU}Y2c~ BP|50J07xkK1I|wk4BmVGX){7%U^sBa)֍ʘ/y~3 A6[M6"궙cDHn j!Yu!׷q 9C`B0DF&h4CFM/100$U%P& KcnB)d}ڻЬ0pv5IF
P&fe;N$Ns^2[)Ya̬XaOt~,t NO0[yD%$'2[X9>AldV[Oo\v#C%?Pd'?&A.@Ie7:70K[ wonDJdH5$7XzOV #y˛ʞ%Xjz.s_jJ0WNB"VOg FV~?RL_011-J Du"$,NRȻi^ېٕYFME3rI־8@77Z%yWmoAq_ZPr"[PM'!T^䄲yRL ]} , M#ruiQ"i-/"Nr/BXY)5D\݃uGnFCRgpnt}=wȕՑmqFPu/&| x4 uo=yu[r%I.쯠,<P[oL 9oTK֙VbCy2O$HZw"x^&$#Q ϥ]{KVhWVF%!iu.=̄GĘꞡ!@uV}6r$L ]V-N}6#ePXҴWÒA:pKJ,iq#ƙT(6c6"w"bA7Ń]jq4 |SSX U{/Ԩ=NכF I.j彲S $k84<$&}[> ]w`Wc[/GcSmF-a`7"@eʳg(I-"u"$Xu&eI.[&bGHB)d[5G {mT?Ҩ1y~ڤ'JӤِ8.}DIs Nd[ISbKǼ}: Ns,D0{'ϱeKdNyX KLZd[SDԤ]jMWF]d$OMq l%+ޤ2= yQl=6( 23 }l5B!{8YG3?I:O+D 7d#B$i ɑvQ![ƪs Z.?U9 wнzoQҸ$6D&%YEĴ$ϝeGyG:Et&$,(GmjҎ?6RӇ܎p9!K0i~Ad˴ɖcٖqy7;df|{˾|$bi.Ƒ6}EI,9,|ʑE,?~Xdɚq掳$5ޒ'Eo8KitL͛~%${F2\4}yތgqP&F&ku *뺸7&qzK!eP8ygP,ڎǙ4 EcBsDwHL"$F":hi:ٕOSLy}HrYhRlt#&7)SHrYPCÓm!BIM(ĬMr<BWٓ0RdeKHmHB"d>o&4&y$iI݉`E;؃y"LJQOwuYh keu",7δ;DK1#\Җc<\X#"Nt{3vH1 L2ޗr4orH'V딭3Wǻuf&Kƛ)G3#݄?GZYGtgб"]БԉX: AFV@,ZRHX"xR- N$/gt6 N5$b ;uz][Yk&Ј1R 72;Aw50ޥA9G\n59GKDaq$r . GZ}<-^qࠪ%q5e&Ksf@hj5ЀH/ QvʞQ"1%OnhWN=k?_S~bI⏓X\EGLT5,IK26M!Kl.y#7v ):qY7U6}ؒI|?Ri}ؒA,|/pؒ*=>8$J0JQ Uj_G|9-Y_İ,YOv<l#L ӌa7aٞLbL/W&rM|ȷ nKX5/[eG ! $%2KfH+ֱb+Vg4nDf2\ SM>01>%eAOu$/)F-$E ZtF4O1{Lg6OJ~9zChv@" j`]jZ M-V{iDSa8@WY{ڕ5ZBi">?Z@-Ǣ01?< w̸\ҍ]<iBDNU PFvU ı-gFܵjw3YC -(} wl9W w̻Qjbؒ ,n.5FX;:lNKJL%Ț*"6-$3[j$h:W`%Ev$Va p$cYu_6u_t&vs7(ŻK@nhx>1٭m|.>}swlQ dJnݧ9A5xEJ"Xv^Pƙ mo4w3!K"x%Wn!+|SZDNj_C:>DړD蝻w(Kqa\?S22#6D~Q" e26D2!4HrY;w2o.(mY|XZ跗uv$gD>ݝǵЃ͙vWNms LwlMgIrZ@? $ԥaDѩrĒZƯ/k%:bI ]%g OD"q.͍M/`#4ȍDxER'^ߌ W6&$sBْP\_d/0N0rؤ}nLnLG(,LiQ2ZMd$k`+y^ʞQѶ9RH;.36+qOgݙIlWj&QbZïԵ@rNYLYofJլdh !Ea#Y YCfSi&T ٻX)i(mܕi*XőJ#ݡ}LI k=0% g-~1H/_Iy2!4J_RKFRKꈾ yMk|x0CDDqӯL2o;YRpWh SD<$XBQ"}o,i25h\oˈPJ. WqArUH26+ W6.\S̬Pȱ+T^xͬsԌrH"FmbS_ms9uc{Up Ϋ>jXkND_e_UjJZN_YRB"ݰϒg@Y%z9B{qGkFW_hG?`l~.jCew@oFGrF DpM37/D̒熨ɡyeu"˭~ ,DkD蝾%dОT,tޏ"Cq*]'e\Tx2ӻJ\4߾an W# pGDQp'n} ̓72\ܴmؗH(gZ,\g}뺴*wCFyMGBa gϔF?ĸH|nPsD/fvsI3VLQ;Iw6dfFch3Vx1#Ԝ卼<̐L2oٶyNX"b*ehW{-+CFQ0^++گrcMlHk#{_0>$ڞ$]mI\6KdGdud5o{u!p9oEE:FmXMnA!YZhg cok<)r2OcVOkޭc{w5Jߣ#"J;:EOSU]2zIZ%/# K!I. GImT (/QS{VCWmG12k۷3iZ`u.I7,b>FM `si Ea#jҴ W6<&HmD9md]yc圠$LFxe2BR5=\VYhڲIDO(=  Oz`"RT9j9׉Q7|Qh{-B(@f!U1= wS3"j.HBDr?;SdmD <zHVT<sϧb.~LG/~ӾԒ6tgJ-/V"e;ȑlgx%SzF }q+Wm1 '$ViM?RAGrDvXfHw4:M ,z[+Gj BZWn5~ 6naUyf֣;JԊ"H"V0vjv綘&6T_^•z:Qu$$mB3ec˼[ȆP[]d8&X1Dd藵uAR~2!4/y%yeU[Ma`MuxK_}[=;=tj,IM5lK6Y"іR-QDzV.{(fk|bIG4=G,͸ \SۇxWpOwW!?̾@CJADqj g剎ケH^0T]Yk%S)ڳ p#W_~} #2Zk[@H>QvCz=BWA*q:Y+,6"\tdS(XrNSl"j?Z__,G:Ot`dvI1+u>\N{G>F`<3L~q-q xqf/7]fih6v$.7:~B\k6Ʌ <|7kWQj)5.5;ZߨBKŦ*PLf8?wc#b)dZ߄RKrM"Bgs~cW2 Bh!Sr1 W#w2<2,7#X\!ZĶ&ӛyFabI㈅p{&]"y]G@J8"W\Ӏa$,85 ȓbMk2ƛk4 ?rQ]t?RF%=5 dOoo1$,fLW*yuP[{]OZc/n%#K;D jC 2!!i72:w- yDȰ]Af*B,)7!5gO+7t {D^3xt X@gDhvzyTDI"ei]CG%:BS}F8L/]ss],!r0?(5\S#y)ł-¹ȯċ FT(ڑx ~ ċ`Zy燳r3 drQbgNH, ;H>(PPLsO<\2;,Kk%>9:,:Uv\o#z'~2 1g[w TQ8z3eEnMRB($\,3tJ4A\'ΖRKBיzzߑRK̑Pm4F=Dh3ojD),n!ԙE"\bM+QKơ}uZҷ_RHMG-j# iG-i3q;jI:Sz/%F;>jH繺䅃%>zÚcIɥ[D4mǠ1]tS 3n5YQKqD^58zc9&o$2cƢ91~ADlbDz46߈O[ ~$o32)sקdz ѧ{ $ GLد&;uuΜn f"yԱ1y Ys1Pk" 4nGCse .۱I?˅~aUa~pDY,!"$>[r6!1J~$e3JPȨm%eQAcͤ{Ccyo1^4#b)֬.Rk0?&"a{#)4nT>n0>/bx H*%}O;>/Qr^)1hS8ёA0q+$|7qJ|mTCetU2 o 󵪦5 Yb?HrZCcl5 1{QK>`%xԒtH95P3F7y!@G'Q<&ުI. x?]@Oޫ}%NvDۚnpkKj4VÃꉍ~&"x3uz{޼zz$;%<j X\PzN|ic%B͜mG-Iºz ՎYp#NcL%澆, Mu%ۧj+.diS Dx~(iDD&/wT!*Lf1B?C%@||Аc'8%b6ResY@HR)}NV:ڥ_HJ/*@ 9W&j"eDԠW}B,!BZ32oÁ?Iwj`tҿ>Fg1acn̝i _լt 6|XȲ!"2>؍$IO{"-#"CrM䲠5+&xPΛ$܏sBu>A~fAY>nuҞvjҢOzG@K3$44|/H, b($52WgӚ1Odu#KO#"&sꋍ߿p={[R_b,E72(ٹe%MLoa<z,!Hz|4M%Pb&Q ֧*,$B|h9Stj3bf"kq@ݫ,8EJe ]kUOڳH|ݲCE1"u8|tcr,#"cr"Z*xR7H^^؟ fVFv@5@*#pi7$˿~]e*9G<,GV4ገ$5Us B7?OBfBFC!ݒ5s?sAɩͱʕ†ӂ"+<+4s&$F5,i LK"Z7zdy1@3eew݉nDMjj$, \@1ʞ!̒ze& e!=3hJ]D6D3\\ \ZK@mqe +ʕI|h̩ŏI@oeNF }/)2KL3M$eRh&nJ-&GIrYPC,pf[z>fCx"M-"l`nt IkJoHCӁ&}"x du!1F8 =#ǧdQA$s01E=lW nxhVPd3>oSVOyef%hRj?$x3,JBI@S@mZĽaa+6rnw ϕor߷$ߨ˾%JʠfiCLaϮev׋CC6~7 vz7}OD]3 4ԅM\,lXl]ʦYD K$,xy_V|ԥMⶑv$,)bjClM j?;[ )sc*ʦ5Kލy"G_-6BX)[tv07 iyHۺ_/tfiF6/4Kэ&^l%#ik!r%@2S)_;r#fF$UL$tK$ f"ʼFEKJlQ#z$djEA̒G*/2KdsBFc=:J5h1>,"1Ÿzۯ G@ W5đYD̔wj:ټFf cID6/ h%rL+\NgJDQ#pio_Kx6<`"6UXH3V8u1lZ+SYi㍁AWAЯt0.H3@XѼ-ɠrze$ryԙKqt d)+ f]f XRGk.)UArH *:4RȂ7=1 .%m=je$,FJPf~&ejȮ9<퓃Xi wfk~t$t&c:XXs;K!K|ѭ7`̑7ޫ0FVcd~c?_6=L+|~|?v:w"i;O9}̿*m=*gx qlK&Bn~ DmQuclKYO,ٖ\>*cPK:A3hj{n\,伶k<-w S_e?rv%mHDDz6N,Zs#!ԻiBf&ښ~dk&ekhnk1HnxO }Xc-iICZMZB34MBc&){$j6BBEnWH!-gN0} r/^Beo\hUU Q}J!L.9ql7t|W}jtVH}j:YDjTjV tEҞxֱ~Pnd[tZ PWs0>(4qG'fOw9XLxond$pD ec֮F8DocApjԲqcygEĄ3\cZcR MϖK) vM+K)u!~9!n q).B4% )a98O-lI1!\SHk)v!%)D  qW*)qs͖-hg"Wmfyܭ(F%m).O_YH`/KKrCQl,= 5٪Y w\h|xSό!S8c,)D|hRzjYzSsLŖm [o3!qmI rҸ7nP֌!R2u͇Q7A^ZsRaV3RWnoaݍ[XΈ&/(d*hoo>¿ۙy|^RS~>:gM"G($TC@3OcP!~^mSHj QT_l,DRzhZ7]!qS}vXtkw]g>aa.TH#);,m+^ca72_]cdXca yC[hZ-?z90M2k[xA5u"3 P|tQŃY1`zz,q$2ŃʎYRInι? g!,-ۣZr*t jT U_wZ\lܸY<ٴy;ցk/(tT=&cY8s`偻 Z <9Z2FsSyqb<\L3fz_ͨ*9ckWV|=uBmfЪ j Rkl>s B6z(;z56Ɩ̭)"JyXڥ@IFZF&3ՃluzfE?VTC'#mJ{^! NHV0$&`?S$ho~f7[:y e:B)b+sڜf'ƗW UK^ƁG.z%ۗdGع.I$E5,/^ZFikӈ q9q FYuYXӀXE}ű@Y0ĨDY`  NB.|X_x&08z;hbH;ޫu{Ko0^p{n){%[,^;-lw{ydvP;/Ňy,l4n5:omC,~ dCAO[Gq$zǑr,;'N0V1ڑdgG(LLVSS$Bi\2iaǻR1=FiC]fŃeMPKFtyea03Ãnދb/뒛~9 6 > HQo3 EV[w+t]0IjҜ_RR}}.j@-<"]B%c`Y4g|ɾ@,8H3A)o}|KSzeGy"Z)LV2XcYUw+uRsY^1ǰ^,MOſ% vUMs>`>w/gasy> /@M&ךJy\D7bG1>pgaﷰ"T}/IOi}1mS)X{4^X{͵=` 4~VM\T׍Qz65^עvmhz]^QdzwٌFw#cDLeђr5U:<0eط0b_y4σP]F[aEa' x=ydbń*_ZLk[%|X!RLCx$(54-s[i/KoaڻD!3p)2-=h%) .&:eܮ&[L4ͲLlfOó2l:1w+s~ Vs]dwEo;DP&wP` Wa>&Q|"M#&-C_ js|;[hjBS g\A,_BXha;M!&9Q銜Dlǥ*&^PSc` !n ɵ1eX=}YtPdW\:ك#!C#_s6H\.]t`iWȴ+M@Io!WLGb:&4e|j.sCOe_ib[TRW:+=ȩ&q}U &"K2R_>` x } ۔ohjPȱCE# 3T O֛Wp^^+ޯxT I1Y)d#ŘcT?W=EKT'<7UPp^m*fYK,9DcCT8&DoIXU?ʶ5䀅QA$ Wh44ϮeNӔWdlXTْ1G&qf1{ iڃ[8mޓ׌v9 rŴUHNF+=VhǙyE&nEvˬ2K*PV|IsCmʶ/Bk<y@((ٳ@zD'+9}9{trCv~njU^t?gM؞\[ORm@0o(5JqI8V(xHSج+ E?=(5dĺF9/y8 M~_|eY.(mM/zRxM![j+J"U1ow:x]%7R)oƻzF{:eVEØ &||qM:{uvcƂ;.YWnUNru- GVHcJ% 7M,VRHg6RVK%bMQoAyX b5W)G+m 4y&0=_n[bFOA s۱ӄU; igǚPFQ['Q\G ٵ= TR6\~ݕ; _:92srC(6CU )V{yWr$= $&cEnԪխDBT IiHFS)zB= sf&-&OAexi0XBR }p8y|I(R rw{V"eU*Ӫ :xid7{CPZi<ƚ˵BTӋZ5@!Q'M-Ӻ% |*8g\g?:W4jR!Qntu7AntS]!D^uUH[VSHѽfXY)2.wnj ew5t9'?oC`""kɭYw0lײ=k8&Q5K "TFN~d$dݜJy ŷH4PZ)D;[eĊxO^=ϖ uvgmzuB^ruj鐞<ȩeMO&4c@]C)3ҐY,&* ')$oU"J:Cg)$#nVX0 lk;4%4/ݯOIMWZ-Ā}@oPex(jQ~Z6@!]逛nVƵknX8TZ*QЦ.l*>Pݠ6|ރ|̶Naÿ²0Irf* EC xnBZAwi|4ܠh֚D9&/f*rB (E0ubNe+$*E% $HəTO6ׇjÒ% Y8})qjSUE }0Aڞ1CɕLX\̨?dtRRW+dJ΃%a`;JBRLf@>"ljһs-L) )ʒaV(JQlz8pBd%i0E~D-.覩l*1id?c噩<4]}:X2$~MBtf IIRUfj}ܞ#3YBt@p'K=B3,.P g~fqF)|_DDKqw#uqDuU)Dr1Y{ELc&MwXxz8̺0m;liA=/nvJ7+t "eOSY ײcFG1#5cDŮx?&,G1G r6A"VH@*)_S x kXI.FNbraCFeBFT7{xTx! y ΗG/t+ Ϡ Iܔ'<~c=gk?nW3Cb{J_! 9`q$*ٌ͞dT^QHC'_JBR6ԻG(UBR1MT>i[2MV*$ue6:UJ[!5Իl eQs5ʤ~P?Z:[)+\hZ*^^)#_yG{lK}"=AVydg=Ȝ}z V)"1eY ߤ9dBiL egʅY:.Ajcc'ϙgM8z{6CmXS*Iœ=ȰδN{V =)d6Y,k~U*,Ou L;Xhj! WYxy25/[823[9ٿ=ce i49:TEQƸj \f^2bܮDҤ_X)-T+wy-txQ% I)U$USAɂv$(ՅM(ta i/ǡc %^e`IjM7?1rux[ʙ|}9YR_ٽTG׾eμE_JU-+WWXky16wG'9O}}krz_&43xa8PIJtЇ56bm*y@OL;xUF`QS H*dsUN@CH!CcO3b7A!uAz RHI.Ii]!q]oV٨MJyLJ.[n60}5f*$n]R 恟{F⩥j>W}lɶJEޯyTHFI}Ud{^Pd/^}~u pg#V 5 K"qX(--F.iR zj7YsE֌v{yB8㰅W_?谅oya AynPt[?=ʞ(=7:gnNc.1eи (4chXU)d_ws&Yc~Dq6M]ba"g(nS,|@e)nBv(;^lcQWd'*$#@vWtq37>7P4'i!t8ЏhY+ϗg^ Tg$Yl7+Y d9Ryɛ4) "e"75q,ìa^!Ͼ%r+{Z{Bz-F4N=l?ϬV.47җ E%zG!-u'=2 (Hy D!E5.*EtK Fʢ 6`LCrluTvN<,'8pq|*-Dzk)z7(|!yãx8wϳ )W"GZ7E6y{%tMms;yk ڑ!RԨ7707zǃFx7h-#X\,LH:u}n9g . tF) yΛ=d=02!Q/ i5]*$1ڰ}g%ϭ(& Q{8V C끊dAY zШ;8Lhƿ$ C|R_"+ &* "@?rpG]5Z(c%ALg@aP汃e(jgn~O]#x_FBMҦ|N2whSDN0s=qu5qe{p09K5+j-?؃v~mR<ȼZ^ũca qF`B ;lahU-1c+5Q"/&[?===3={xA{ U{7=T*J=)ȳσ>7>4QH6x_}}I>VW4WR:LD R][ cW׊k,+'ey'&\n{>kFY>rhMɼ׭P^:q${}vB󀫨j)ҫA*=uq\G-+DnpFRgK-=(VZlSH6U]Gg[Cm3S)Z)K)ҖOm Xp rUǂϨ3@ RK-R+-Rk-]9h)mIG6t&"&͑t86NR6;)nc,ۙw5Nዢ7 Ew}ѠF,U}nqLx&wOS/;̓T }7d/OL}c[Y*Iy/n?FQ! M i߳".+XQ-2Hwl)X*/!l2Ã{sT|a|#F8ߜa)Lb&g(_ }a({Gap&c!!F?,uuP(\^Z 5}0)P{-άδW).?of3.w8:@(Ɨx[/NNOgۺ%  ]?zSAYx"Xfը Ur,ߍ-Ժ H㉂8ZƓ?xd1?zةxN;W Ӧo|}h=#0,p&Y4o85rE]y1v"&`D"]7[B zN% .^1HJȩV>>[`|xB^*ijq3[иSw}4cX؏ez'|~/+G!C4_KnWȭf>/xoOG̵Uc)G^{Fᢶ%d(P,1؍5s1{#wFKű_gEM~9y9U)*/ V5[@Oi0i 7TE{Y5U@@"Ѕ>m'?/ oE?VdӥqB*d2)PNkG,L/ Xf }I!_4/!3\ X8س-F{g!賛4Q`m>-og4ʼn@Wv,kh} D_)~k~B9)n_pPJ?.tC2HqzM='{Y|r4u ĻI퀧[ j<외(Jz_VJe]̍ŭ[պvJd4rx 1Z]/bKhtYÅM1Z8}8,]b++nSx_g+N Lc1TΕr_W-N\ʃ+D*&8XKUcpbIMVs{3 M7PU UHU8Շ(ZC~Z#3gso3 W2#l ?o!߱Rg'.9 &Hy~T`oK&9ft{,#Z}`l:oZAFe~=W u_)*3r X鎯ʻ֓ a^_^/o&( "ݱFxac8Q[!`p:8s[ $n^uĵčK7/Mh|}|l>S\7{F!q1o93]Πg =ߠgPjճɨVH_OH_ F[xMo*$bkڟF|>;O MOJ`oj5s{m1v/Knn0#+}eg#;,4UQRtm=qR6y s&fQ CKD7T*㿏1mdۘ aMo G0""eʂrUTIqbOORjuVi$Hwu681FcÉeia!/ ҭ=1Ar21/FBp/6llnpq(#YJb #1n V]+9F[um9p[ZzC[ C]J{X*GotۃFƟF[}n\p |? |5jImEN'^ǃ;N !oN0}&Xk? +~Jƺ8nb''W0 R@.oժ6u`dvCS^d)Ir̓Ô+ xV?/^(- m%"$~D_J>/͋܁LUr_É@4oX~_y!250_!]ۚ~ CQ1t)޴-PHH4VHj:^PCFqatj1%0݋1&C-kKxlx|nqi<~;hTmTH+cb($ƣqŔ٫t5T#C1~sl<":W*ݽ).qYxNy`,)" ut{up,n:r<[=@  x"(;4 n,Fv6 \iRu -oy{/xR;XVt1J^urL ~N6lR0d2z%A"dp6MxB֒aPISH ]}: cpQBYb48Jc%+' DƓ/TH1sOhc+%馐mhuJC!ynD-'z['zywkї:L~ut nB⎤N酿t.ҝ8 5H![2"lXc%;k3)ln6;o$x(@i"?wsV) [ I΀[8guF_FnTHFEsJaYTM,e,:vh:t}YitSȒX|'5ˋ Ye迬fMI'-8Ib |:)tZƆqU(INdB>*?EOINHt>O L2%ҍ aQl/!vc^>.-S/Re^Dhy+ߋ!19߇ʂT/&}˂ ;)iA2b &3;{0 T3[׺ )-IQHl[9 [ϱVzd;^Lcz-;ٞM9Ւ7/1ohBYki̛&_{j6fqҤC-lҰ*m&i!M;!JrBVB OKnO3Y!)FWthPI:M)lM(}Ʊ䜘-Qz L`{KgK;]T䃏a4.&5q/])54E+tkdi@q)$M헊}4LŮTHGĹs)$ݎ4{m,UM#_q3 Ob )hO|~V(%\n v4MnǗ٫.< {D5M@ok~GtYg f:kۇ˸= oc.S3D)grH3j =!FXR;+_3V#>]B~ްon`I7(:*RG I7;rKYF.V$amSDGL_q1BRLA'嬆#j%١C %ԥ4NJQmd4jJg/8z&G JcsŜĪ(*0@N=_t`~lZ5WvZtBݺ 9-g9 YR7׺K7yպ{7%fQTM0Pq<* *x}VF 3woeQ|bO`>apzU(vE*d,8o6-Q,cɏ"+\/^Β,%sŒX%ŒzSIK 085Ji0KX*EN-+ZcT]y>7k,")T0 ZB{cZX(DR,OmSzS{0p*- "WBI)&7MCm{!߾G9 ivW6-k'n':mۉa]vq>?v@S< {X! *E F< BpJ +Mw5"+=e*Vǵz-#R ECExOϊص8RsR}KnvM/@E=ǁb fq<Qˢ3EHVЭ6evI¥e׹jt< Lqjln5GXvTnМ~b, sBװ,:GCj 'Tr-yd!?"i-<.^u;qBϩn'?DZK/vVp]ۉ+ۉOMnJH˻{Cw0 y(9f0 52Fe`I&DrAQГ2nNq^oY6C41_aOإd&"Q|*屒(ެ3CE/wg_yL̯/|< P^\jeXۨZ48adLqI`fޔNx:ŋrwu7pqFQ2 P0qMPNPH>IE暣Z`i0WYGz:=r8+MB/=;Ƚ2g?fDyk vW )tyekx7(6h!@sZ>*v ͳT1|$gQx5Ұ_sd28&3\~ƈ& 'mSM Ե5Ο˼/d޿H9[(h{_I)BRN7wnBN*JFI"9A'2BMۉH"˄Z9_#:~J:ݐ^wt|g+.>?DŽtBZ=39F)&`H>e.h&# Cw6'iyFZ?~u:pR>ӧ02gA6 -99h^d`6!g(>(\!p=Uq" Ź.'ljxljm^8qƍ^dN8L{lj~*_ljndB|י cĘ 7z;/T_]3ڵˋXuI YdI^{k"ދ_0,;$VjϦA-U!~u 7ib&Mh^ACCNC{ m^G;*MC[ؑWw=I#D!^A0[lo\:)~d`:kRQFM4IC³;9pH`G;IHa5=[kK9'—=\ݬ9cx±ĕ(T1|o<;Dzx[yW!i]B^zMHku"_RCS2tE $"QT+=6˰j9Nͼ#bx3)uؠD_ D?v8[6(yd6!\Dxd=V}˳mT.@,eQPDa(_E>R&y&[bmzR{ 8^K޷Oo(P7MWm%*T(t%` DJޫPV[<\$stO'/6o$PQыȣs U65[))nI:k.QҗƗ:ӗ[-Q UZxG9TK%ݠ]M/L\wg+ۏYWwRfJkP&4e·׉$n=/{" OBx@1=CKx V &'^>dL+7_ q QJYPI:d/WRZYzdz)-;qa t|5Cڷ^w;#X!+?!D9Q!JvHjv<[8c+@) Bu-0?yN/\k,׀ȐvV‹j- ~3/6fg+%t2ϪۍݎW< X,KBzA.;A7]o.TŽ2tY=> baTlAnM`;z ɭze~UCN>yЎ(%[ Dcp7Q m槣;qMW`:Vq&x#42. u;cYW/|.{Img>r@u"|eyN^X~Q+y nQJzO88ė_yGs"|ѣT2G:)<+{-ӏh!~R*!4ZER("z"zrF9>CvuSDNt 62+ jmU)/ {[{'C^;C#޵iBRipqY : |Fx{ʢ9Fh&u4М0R^'rZBFJ[ALQ/?oʼnFقYAcӏb )%&WXg^bkRZ e1/k'&<~<9exRB2FG[R<0j-?29O":0ہ,z%n<'S0*#:\ 7[B=XrbiK:< EDi$A{}a٢c2DurhCNL58 |m"5<,SPگlfkל r /l"Xkasv*/y=)Z82 2? 26ue$]9_Mi8ĽZ{'YŅ:ܪC.lHp E~#q8 8XjbxɵDҲŤDç\įfuP"UR|mK"m#aZ6VԬ5r%_N1D~r+e ƐTv%@"^4e^]zuae3:g\݇S~Is8ϽL9y?rD!>aOdU!F_#JrVԵ у Fh5Y~/ BL^ѵdeY1NQK~ұhk*fr}EƯz:UipsR9 YpN*LU~rmkL 3~W&)$nN|b~~b܅xkA}`!U]QHFݹZSZȯ_<ʿ;/^\jahl""WVhG1M"/WZtEVi.^"7iG_?Q>b[M6!D=}C,RFѳEHd?Ro?ne!@i)z;9g5n0ODb62TH;;87O7LF{S9,g層N}J/@Y@;uv`r[/GPQO F7}il&*Wvvt=ưukX `*Ծ5V4~HU][l.Xǥ#˲tIRpviŽl.ǧqUMcɛ2 U8W|Y#Dgf&k5B^pi7Yp^ju>YT^E *]Ŧt>]]aSz59keiv`*YҬcک^ƙ{uK.9}\ܢ(B_!qP@HM\1c,䨌UuytJP!}|+QH(\[*=čv8s' LnmK"Z¶^OEOj=ּOh|R[ṋO>&<|y"?e6bϭ>.*{BFA4{$+l'@Sʒ N> 4nKL"b45v“B_By[g}z@Sd[o99r pXF+Hx's8O' uQZk9Zxl Z>-%u}tcxG> Ʊzh;M:o]`1^d5clg8Q] fˊxKw őpyc3{)lOV+cU5?S0Y!Xu)UblyZQI9N~\KNS )~CЌתd4(s1pgW $׏[ac^gIDV"<;D-g>x/rr)z$"k EARa~l46VU{PI7UH{L ѪdУPܰ]:>GBzX-r$~/p~eGmw$ecr\9xWh}d-)E櫤eLJB+)M2:HXUɨ_|ctTS28I!KNU( ~Q( r__g+1쨇ǚ'Q-K?)2p:; ?[ge8/2/p^pb)p",-_.Ps+$b%WjU2Jz _ V"qol9Lz.Q[ak[%ާv-'J,0AXf0 ^^0NBY)5Z_DT,7󂢖ڢr5JU*"Vb8I!+ KQ0%< UW<{L|WK|=Z5K1:ɋ f#G';­NH5Z]k$K^H\NoSJ qB&qIDUj:roSsw/xX_?EeWu]!)%ʹBb7Y~Kbwi[")~(~Ci z-_1ŎrKTLD5̟nO$%{dRi$tLܮ76+,T*a JJ2b8lq[߲*5=[Xd2GƪD)3XoT;nАr}*Ӂk,!Q:/mxS UxOD:͋1R"5XSJ0O甲BF< c,}n(ODeG\!}iP 6AZ!yl2id]c+"_#l `2aW~ɔ$FaXuvzL7C"̑w~<N.7H~R dSNp 0Cy[̚ s*]yw|+&[]X.ŷ/DN h2}&ge|=w&}Q!R4U 69 URz3sW罽(GF#ƿTأHy{a嵳Lg81[ri0;$弋v'ooT*c߲ 95R'ovKLe)1VdtfM /fDGJ/%zE1 l>+zHRq\.|;R/y.w R7η T>Z,#uI??{6-6u>J$?P|(ISM |{B#t/ J  3~!,XiN!td;UASlB R)g)Q?T*$2C홯ԷϧYU:CYx~#Y3 7776V}e~E\Ye2DeX2.yivm i۶ wٯ*pߥ]wFC{8 Ԏ=N/,<KYËYW5o ) jЃ ifbX݋T`8Taދ(ip1BG>p"_DG+d 'jUa^`a(On@UȊW׋\zbp\͝h'`NvʼlPCQ.^EV FqKU񎣸}!<x)U7i(G:C nߥW<.㇦!~@-'90hYE. Gywb>;PTCoZ-W+dI;FKIU,qD-B?'#s0bMŭ˹X&xU/YAosFkya`#C|\7ٟH`dMB:\- c8VRr8H5ECZ ~86+o8J qM+ c#5ǁi+CWYf'kGk-ALsIKVy!OYO_Po_}xV̟'?ژ/b2vЊ0/Hs1B? ?,LCQgVlN_?x+NƞR)k,EMht:Q,mOL ֙0(a!ޘI&ݞ)T &0ϐNJqBe݂Db ʞIg* ڪJsBmz@"P*LG+( U-8 sDcAy&LPTCF6 WBNz}INr#Y/)B_v[oz]B%D(b{^,?+tTlGEʋۗǻ-Q9>\Ԑ##a{U:N / 9RlR2jen0 S"FmZeM^Z],^ c<9ش9~ʽ[Bna 7Vg&fSڲVGmgSpl5?tk cvn26y ]pmŐͽ,m)f/ȝjģ ۞W /k@N65"[F*T[}[(PF}iGE!?v'j[|Ggmn'mM˥+lIo&ITIx0qk ]JS)W[+tT5T➄ 71uwI %qO$=S!f/K%:¡B8ZHG8^I*k'|%{%pl!%Vr_OqӖ=(ص;-58[ Nj_Ols@ii(\n/\,o)$< \pV ,Avdj*Ax' ֑yV ´pfB.vE|61%$k\m[I)EdwW[أ2dT-2| ZGҢ!E6ECNTR߭>-d*fuEѓ-l$ ͽHq-fM^O]ȶ InTd? DCQH0*h V; RM2j|6X?^[Q!Rwfe] 1YVY!%wI2,Z7H(#km\k\!kk(&`皛6fF%uwB%WpA2~GtsrUJg4KO<2daF DOҿ)4Jz0KWC,R!sݗv+DYf-|dyxrm/8]Mk_cQ ɹQXUB*)_,mL/. _,<̋/_,MD?esb >9l}N< ׫c-4Vr`_=B^?kM<7Ʀ:!#,&ĕMfƕ:*WvXSVX^D,TؼK" v‰` J9C4rp;pcJ.‚\3*Q[\9kۀ$q)nuwN](gNbĚlxHY4 ^.JV+lCT9c'wQvI.ۂ$ałťDs 7*ss$F_D,7% J[P"X'FU$Vm@a]U9PUXj廽|?KEV@/]?0r/Y(ㅿGf1S<-XZz7Ƣ K+*IRUs R RR5X, *7 Uzh{ @l_'LIʅ@`Y Z?QO+X}E:}=7S 'M4aUH!ozS?l]|$z=$D?~j!ȘB~uDo(]$h'Q}Ηxf_W3`/`]~>)ln:x"JUbHR(?Q(ʒ(WRol"~> I!Qʋʺ)LRHv8h.$JQ[]0Ir_K݀"Cv@Oeu(ɨ_/zL~OST77M I<0uݏ7I }V)LzNFy*etKDԉ.}TeWr(LwXQ'K5sBGω#^ȋ>'<°@~ 8Ee2 TH`+ |/G Y g7#.W2WHI3I"㥡`a$ 5JWqV.g3.{2ԀR`Y 0eˑ\pvƲ`Yai [:quh92`-3eG$a=Pq"a9Cʺv'Y:۶GY wM@,\ġ~R*TK!G.KBD09)m[ ˣW^S >^wNi-*,!;biJR|,ubŔ*$:>'QW I N|Npb3/ZD īJBr Vj0 QGjxU+O.C,|d3|C^+N*u'`K mi$Di3LSk?Ȋ%OW<=w5K F!WɘgTLo4fZBKIώM#Wm0ٶwRط\5 \v3e`Spw\ea20_% d\e;VY8SVϷVY\p"*$* U.SU I]e$j Q5[m^mAE($ y,PS IU^RL_jS_C=P5s)3R=O]zf1fT{Y2i26x6DU>I!Mfe0,S9M!Y. e"*$6#BfYZJfyS,;G!Yfd\?umqmovO]kL!ŨkCi %q ׈3.,Gp~$˿/nG 6Rt:X:vQu<;7MuW av1\~ev;.bܱ;'֒rOJ BEk>x$k G& ~ 5X~BT& >A]KMy@<2 G?@}9ϳϊY].]˓`EptwScE~]37aᩙ7i] yۚ&8$Wng")@bf9vU!f/.rz3<_.`s r™`1*!Pn4p]pq{ 9k~ 1oz>I ȫIXǎ8:IkxlxoWDM~46 ?-?b.~R3!k ~x}$^36= sof׏~苿 ş/^g58E]4ڦyvż")j+z3AWGA\VheEZ8{ G)_1~b|IW '\bHR%[Hy[H66 vRB6gNNB?X~Jl1lyZ\2 oIvN ?ds{ g/1 ~`qC/Kge.>YP?Rn& p~圓s;+&Y%D<7p(בqgxaRX IX7[ ?F/\/\Ac-ʘ葪gC G3n8a% J 0q0/Wͫq'uoSp( K-G_ v]~LwWᥥ5X|ZU5|~ ^$4Ӓv 8= ˬֆGAIy6'aݴc,<\? m⪰qY8 3@,n 'S{ 69 ~"U[] XR~HBH8#fk0}qVu$o:=N\⮗} 66ֻ11cl#@ :n`5v{,ۭ$|LU-$,G.F5&|:P1rkE}:^(cZ3e-?j_6ug)6j"2rpi:M0<^?n] EL*u2KLuĢVXf-cgű8%e"=ek3Ք)^]v@yzV+=/0q>O]y~] 32vRW *u Ĝ[ǝ .m(d/3yv}~ceZEBƋp " D$alȗ.'Vd7`ůd ȻC0P }z {ޠE\]6}4{N)o[֧Wa℣JwγW Dt-p<~-GY'6W9x &bv8*5ϢԫǩoJ pq4B&N0ɢcWě@"ǮzU,tV_rB ƃ:ezsF9byr~ `h#+?v0I^/k$"!v_bp٬*xI\ݮk8x녆$̂S }~E0NgpCgNظަh]8y.]Ur3[ ,dW-c ʺ#o%ϰJo TqXIJ-yv} *Sha)vUm;NA\s0[-$ ]U'N]`׹YU>^8y3k?29ռZL:Ez7'~|FYdhaYeW7<'7V vY֑ }UvNɴUNgW{]_.x`rKfI.yhZaG$NۙN$K]U5;K8b~_dayw?N8, U|u]H,XgU#x|ݏ<~*&2Xb}קº-8/MÚ<˟/~uo%o_=g8*^g3\5Z,t;TYU5G֋ bח'+#l-RGʠր2ml َΎ!޶4n4ޟh<7MȐRۺ필T:ѾcHwG$)e}7=vi2:ٮǞNoB]6=د yo?.3c?>=5;D'SȞLooQNfGvB sf 32M(fD0JyfiF&FE*ŚLY)ٌFnJf$;C l/=,>F3"{G{cC8{{}HrQ6mLFݚ!כ(r)©m>a%rhJY7Tv,B(vgEX7-**3Rƾ1 {6A ᱠoS[qV ޾kAK YKԍfک(ATڪ=dÚ\!,K ɲX/*KzmkpG#|!?[^އw˶dwV.E '4Rxw )~ndL^Hضd$^eD >|F敧i/4Ŵe1˭yŔOT8;>zzzq(G"zzQ5 d>Iv=ؓ-tjL%e4[N8-"@Ş^9dV/WJ"e)|N:(rF&bΆmO/eNY"aq[^/K8jxTª@e3hI6\>6(#l|B1l|,Jvb!Xַme i<CN:|Ƅx]}9ISy("!X,hħ ˉ v_rSF՟,0rPpHOe+o"kO)eF!F%MqNJzUGpN y]$0UTlD_NQ?@%|Ev^o[";Ψ);(r? 0XuĐ>agI&ק:No :m\"qِqZFY=- ~-(-sYϖR)VSFlTvƜH?Ž'K퍑 / uO"ٝXG0"> B Sx[RCm2Ed?7!mxtC$5eneฐ.FT"d 1^Q^ 3M YzíhHN H,+FAzt8xNDMB1dflʦ5lpPw= (,kx_ɑHQ2J^hL 3Ji,%C|MTcDI-`Bpv2SY9=_= 0V )_x e+C;CᆰGs]*䫔|ɞ2ӄ×?桿<|EP*, r6[xIjf8p <؞.J5$bVgT\'3lxŅah'X'ၒ٣]t2 :LVqC& gdC1p"U@$S,R0)8'o{ o>cZkaR܀iFq {#[yQ9B-sn`1SuG*a &mOQ=le3 foi@L 88-#MJF@Y٢ YDUJVwbp0afPpC*^| @)T=\2j[/$W\ݡ'B!EL ?gU2Ui)ɑV./:4.蟚;婒^P |%iqC^b d81HAP䮼LǶ=su"β>?6U2<UE7p1ϝv-^/Hh ebLXYq @BSPL2ՊpiB1lIϋFA9.Er- b~lp ab]֫%+͈ieLq(q;ׁxlmgDA[/cblj g\U1{S\Y! 8Pw@(/2c@(sʂ)e0푵O"Pv ZVI \(SRe|IDž# Ud٧8C )k5yGnW&1LQLnQrzh~<(+PXr!R$(`sy!Jz$-\AX69UJЄR2xT.r/#QC /"cǓ)D[S%#LUtRwQTp\;Pb:Jz29u, sF){M&W"]e)M!2\V &Xqtl6ćB^Jvq[0E..N;Aɛ;_:4^lQ1ތcJ| `G{OF TbG;Z4ueT~x[%#"$ ,ت,8)]Ю|i{"2OiP.!k\){3KFҎ]KDq%1{;mI#g 1x<Ǭ3LesZ?+dRia(!xA I5Q[\ꨔTw|~ΟJ Q]e),9nPD4¨YRDWza|x 4O(jvx#аv8%\ E3 Mr, z!@oS4701޿?glN<ES&_wxl?MI Ja^dPBC>ʈxuUF ej/S`TPhQ6&BK۲|LVr||, WhE$>m2w(5ܗHZ<v9QY=c"{`VfĸoPES|6/ٖ1Pҋ}Jnys|QZӟ|,NΙG sѾ1Q$~X.\3Wst+Y4°Z販D?CxpHjY-\_*3,ʯR]F)QEXr=Ĩ M btgE5q{d8IB=O!aRdeNܠmhnc Fֳi@fi<+ؗKi{n{ŁIMgHLAV5$TQC/b'$݌QGLUaSSz~We.&Z&[ eLAjYAo'cjiJ_zC9 ԣse1V!W.ʐ (0UxH #77rӝe ({`šg89ω=RTZBJw Z "Y NQF%}5lJ(ٔ.].%Aj@w ǴE^$Jnd$Ek战TbJrF@Ƙ&o>y` Y(NO  լ+=NO#i`FX""D- 2lɚE<+Fl9},>:kn̟K1YI.q ŶcDW?&xy5[kyR=KQ",pneaf U05kX8x2뫖-l`5Aݙã)HdSi %J2~Kg%I R'=7.X^1!a]6lg%W-¬ve\$OaȳSRX)ytJ2hwH2)FCv(1*Ah"ʃT87ϋ$dR}y B2F~8 o1l\ - ;]e;e_Mbӧl#HeTfm/Xy F\f g8"R&Ћ8LFL"82O}G+ڄ%@*tsߒэYD ;VYÇ@L1Rk'iQd0xrl_X՚6(VH3F1䤂n&r>aRCL唢swr'Z gC*L9@WscLH? 4v lZNjJ sڍh"׫㪪aEK!J h.xH[dO;6pDG bbM1+ItMURDzeX*-( 0#!`llTʖMM[ʖ&pVJ2e@mL=² `fl`V%Eٮ0yaM1v9K x )r5be\pՅ$50aeM.>xv˕f岃 S:Ppj&8eJ)J;6AJ0Q`<H+QkTEw!Q aPvC^Ѓ~!3",PKȡj5O"&yi+`P>QryoˇiuH,.(W^݊M,[Y!G*Wpq($cM[̍ώ‡mr'+ÿmah$^I4=M>rpN.Kh<ފτɵ]B Kzqmmf)*J'GQ @jIwF-do3kZ|;*zOhطȲeVn #g^'w>菓f򖝥- tW~Xp̲Kȅ [(,Ld'H'3&{Akmnn<*!{@==zTǐ}zc Cl7dO;{C_zT/c9(0L(3#e`/`JmF$8,;j˒H(RLo߯b%SY!\GE?1~"YOD!+Rk`)7Jrx$E1zdoIOljt`,?'A@.=x!o *G'?}0?Dhڻ?lgrÃ8p$Rvh471ْQBf-+XInSezxOn{3JTn4ғ\ ~C?#oq .EcCKld헺!o ?5irBGC$l2hA:TCβӿa[U6\ +qXHHn},gc  кx6WD$QT^f 틑䋘4FlHBK)<W -o₷4x^M{G!GdCS1FC䰰ZB{Ia1e`≭7a/RSUDh2'OB_DZGd`rT$87-ҲfK9+G8]LHhiN/<(زfwZ J~v1aEnJE,5O^yھ#'N.HB[^{VSmZw=l"\]BJբ7N-gR[i.qo$2;\wNG!gxS$l{>ͳV!xDl2&Xp #E;n߻3a2`;CO2>*t5`;Fw,au+kN7 wq_- q.ԿI\>b9+^W(Ūd,4B!l[~2 k,p^rI.aBѦkWatF k K^T't]\}^C53\/w5U89#["bB$8:_ Y*eGt$c}=~sh z(o V9j;8F~(;")Qp DjM,1R'jSF.Y q\h%wl+$/Gڂ`{YQY[7i^UBKY u[~c (&d͢g~7p'<ƜK+ii\xw'D5nc [W 3Cdy?S596$ϋ͢.W.~TeȂ9W֋&!xZ&%:q2t}1 Oh$0b2.l=CЖ% U>OrP9HhNpIy_{Q5$Ⱦlx3xq +]dAZn iZ^Sާ9PbZAs2Ihܮ*$it\O|_{8nH\ZIE|7 *iZ5- 1 4b Եcy(_E\v 4{W|Ʊ* %p^x0_ )[|T&=ՏMOctK>\cG>Pj z5P4g,tOpY\SD 6 ݒ/Y2ZvƶM7E}W Et aig'm1vI-p5 w<:B9> 'n{UA"^XR01JBvugk$KL}@kx\1x5C'90x'5јmPc~v$ IΦvN,1(紶A#_e7,uS[;,1_QB6wBC_e7,}ӹPt] }ݰ֎͝XcQb6m.ƾnXN9l%:(htI/:ڡGE1иnQ쿥Ow԰-3 ut(u<*-[wƺ~uJϰ{0ĤDžudyAm)ϱۘ7zu!܊Y*}Jhaʏ٭V-I^fܥqyI{*Ln Z;`󟖼gst1+v1=co{5lVI/ۀDk@&)NAB8Lhs MA 3b !2̋=XsaW["ok)ɴN05n]cM:ɜvvMΖ̼"A=P2d 5"gzI=y5ΓLa`&](D/,2Vv}6,K<K|7f i<i]+Rۏ97]Qa&+Jǻo`{t,|/_ sׯТŏ>23>jQ8M_̧O\Q,2s[ĺ;yEsQ_wLbs\ W9 ,Q4WR3+9csl|wt*|E %@^yhdW;œ٭Â.FKֱ%5 Pc'٭#1VXdnvxa%FeU1+F,3gvhU^hSD [ǣ%L2^bk@ٍuԢU,34u<8O©’cحary?-:lW,PCӮ`@Ϭ$*ֱ˦jLuDKe2\:afp2~gid7B/2k:6hln3(kw^/=:.>+Ōg{>yIo;M#fQ Ɣ[O]pGp~ {٭#r"N_nI\n՗+L%uNW;` [Gz<B B?t1vhgQ\e&f]O6*>e qQ|T-VqXL zoObxK qP kb Sв;ߜ{Q%<9%R jy6/뫑% ?'>`<[$Ȳ^zT &p4I^ Rv~[D>Jܷ$a(cE>\dށ_v^8fV.%Oߒj}2 n? +gtAg/U>.:/8| jҸ=ldWUX Et_abt7Ӆerd a WJ/ vt:; k"~O>oNs?_.$KVk ۜijVIQh;.qq)1J*(>%YRb!Ք 7(>Ie%0P0_|D:o_ƨQ6cֺx};ۛJ2}VHb+*T7d_-P(_}OP2-CwM=hӧ.>bԅ+ LjWYLBxwC4dhrDB}xf/nGx*xwQ K鷑0ԈFd4&DCxtjG$/`B r4c4zEChE"x 2Өzm9*iӘ)!hK΍ѐ BP aIDhֱ2+;!,2;!Tp2ϕWdTa.Gat.2 .*3Q-StNrWlXhœ"xv?nmۦ`nt,XwFUKXݜuȸ/aW=pO4g~lJhxhZ"6 ̘ ^kEӢMN\udtc3lknjcl=k`t5 R7Mo% Gz2Z9m;c%PqLcJE-gcsu b4Ŝ3\lvh]t0jd/P2I/.T[Ŕ{˱VW;iڈO whIxm4hSoiZ؁Q2of8XA6EcՒ'Ig4[e*']>{ `Òcgn\7sU4`Wgh`=1]0Y*U=?S5rCeۢ; CoFKZ c4ʰ;R.ƂK )`o7%א62`<4d":TCJ=ސ9^ufIǤKѨ@[- s& HcXdF5kZ!|4gF/4۰Lnoz3e `$/c\S R!$"Ѭ^Q2GVmQfk)3#&snBATx&Հc%Lh<(ŕvbP$ H vy Z4^ (oW4cd{fnT/|$1n.^KYlO6 a,5E~ِͤ9R,w_lUrO4lEx.{GQ +m4vio@pfttm$>=sIFmĶV~^gs&M*"9W4HGØ4;"KuKү֝\`ٙ$b8)VG/Hf{Sܐ17f"ףẑ-|B$ڮ_GMcu1!byHF#D4$, -TĀw>Nes=; Bgcdq+\0pU"1n\dKahR] ΒfyhyԶ'0&N\uoprݥʌ>ex4czFNTIhhcT60]fY:܈bRd6>l=^BoDKYHHjְ<91 ml=FDr|!t{UoG'p(䂺E,܆kzNT7ERY3=g:.;4!;qn]'n4CBkG0"7LXԗ8-![ ]*b1bFnk Ά0n/5F1Ѹ`Ɔ "}B|CCdyʂNgL9ǘ.ydz4Xz8s(饪16L0 7W $Vb5| SNiPc"p-T37n5J0\L\2:;ݓEڈAFyk{=$Vƒ*G%dcGY/|@ A-llzYgH5sp?kZcyѪF Tz%lŒ(RA!GMSflhAQӊ {Y>w 1_z.p gQ}R+$V"0GЁr՘Q*ʚgc$,(HaRk<` k4Z-F7: X)A0@G'6ۘ݉G,G:2 ?wb Ijz~uW@>Vuؔߛ;2[Dt- wuŅ3z ծ o /{`?k«#~dUܓZb~nc7_[+~Cq+w!B5PLԡ$]p&oy8N>kx8Pq[E҇cqI=kQ͟z8 %!oa XZq #h_z8oKaqf 獤֓9p K\+R/^&@]uW^ ;N7CXߚ",vUUEX~R+ 3? ?+\vkSB;{$ǰjgj>813?G:#q8~ ̎Z#IhvF-q6ӷqH!I ѹQ}s|.FwWRK 0 O?NKR}Ef,j-,z]%o(QЏ'92~UQt@EϮ=i#-؂M.s`E.1" E|WeE;tU؈QQЏ V6bs̫b3#*QQ-B@ٍ ?gn$&Y=*݄:31l731A"Ɤ5j=(*X3c(~ '] uŰz~ W $_bU87' c_b<g8qXfE\?qseü%aXVDv myJӉV0lvakq?u2I 11pdJm.1vǣ],~CRqU3Z]E]þ~8EO‘8_MRVL̂En]˃*X/i@Ocрg\GJ(5 XՓ@66i*֯)au,h눬,0&Qh>Q8>OkD::4Wni? >BMcK8!?61a#ʪ6E3(.O+[N5D٠b5jIwݠ8F~t G|JͦloƧ4hBpR{ӎ-. /5h6pr(o 'HqBfx-#/O52MY!a7|YA& ֠|H$ CpXü"{]\E rg wyg}E淽jv-)!s8[]*3;a*@ gMFI37cnP pA>k ~0ge V~ㆳƬq>zxyK pe;8~A=f'֜PYpnQ;` l&9sYhlė]\ߩ>lԫ93O|}gn阞"h,vt˭8FEw X VxǴLj M[WNc8*@_\c}8/>v7? .ϓR v*Q*&:x 5i@I9 M>A%K4-R gz/ `h̻XTM1o88ia= X 57vӡ$+ ֢)F7HjZ)P٩$54E#iD,YXȞ:>*Fz\T1@cJOX]Jcz0~8d: RyY]0SHM E?\8UU=$\51oaF`4z[&~h- _gMx)$q>l No$HDA??i ܨ=oֿǰh)f\ԻD8W 8"C>HmфH%nh_hBAu k~t/5Tı MbHhJoԂ{>=ՆX6lg3IH|4@g}:[_H܇Cg5q8Č4\*-+#܅:wIXWw u~'҅uSoG%ڞL^ēao~ q(^#_wLB0Z\.ڸ| q4(鱵IVSH H?߾i4䛑f#ed]%62q/kMvV͠o*vLX-Rg^&فrYЁ)VaNShܵo\0; ϻ2۸"/ PxOx}}a ~J 瘝x8|e.Z0h_plϲ?V_/ϸ+ZO$@p+{\o`k?.{c3~H LW5B_{Ⱇؿ}q8}q^Mڋ᰹$璐߅Vrhse_.ޙ}q8}qOBuyX!YfFO"]5cP @k-%vq O ?1~6JUӌ.^'Z?:C@gDhE?<_5W,_UKׅʫ>kWpBǏ3M3k:+lsQ+P;ܴ<ñ?LOBLЯ7:D0pV%U^ sӤ+INW[\h"H EE@AqF_6Bϻ{so|y{s{s{;>% Y}M k^G-V@,g; IpQ&caaχub:5"%-,,ݯh(4Yy'?pQ8td BwuKtznoV~he_JІSuu]_ O !;[7wԝO[|k_Nۣ vZXаƭ%%3]RZ5J%?(+i/:jqYgT%ʿ09u(̖z}"S]z\.o^OXxJ)Ճ-^&X=)u8<],wBj*[6l]:\NbڹLC.\@\^)VY UƑ8:&f3݂K!SJR(xLjXԹkt LKPDf㮔 n8Agi_-F )ٝhYsuU7N0fs^pw\ ݚ!ɋZMߘA=h6Jٹ9QF[Ȗ#pF5;X_KlՍӬ"g|rk^Z쳇c{̸eiP<=7SW)ON}ٖYja5uS̪L/jVUZv,Kwkߤ? -!N38i# +eäg(y BI[M;JWZ^&vEǏAeؙ>"aDvo/Doa;3pU4 ꞅgttEM:;f - 4޽` ˅fEGCkD*ش'g2p9L!OfeE;s[ "կnيXn"e)zˠT TW 7^84p$Ճ}aI8ߒaTiqwMKscMD-*o)}RLA=I[kcZ=[kRtO}[3/Z;:n١KK&fU݋T45]_vvL77yn֠kvϼY`V ozLvwt':kNvּ鵐8ޒڥԦ,OПTXQ 7+UгbTZ(-cv¥NULt+GϨKK/qή魸2D9ϺMI*ƪ摠.^nNM(7Ǘ1@f菰$ٹmCV jN5 B#OtQP;ya_IMc9 4}Z&?&&2$՚qLkA k'':SPYS֣fԻ$lWpN:w^ė!RW13sY`mc'̌o`R+J䤳s^'v'ݩ9~fF!Jñ8S*xZR DPv!ؤMTR+;(v/0#쑸5nz,PPj\Q+wv+ 7W vNHP+=BK; Ww>M{`mIMY[l?ndەŸUY貺ǍGVW}tY=}_ptY5eGձ1i}"I&PBAgjAw,TTGUJvYYZZ^_VV eevWdҪm%gUԪee7.+;Ϊ{ Y0+T~У®҈6u#܃Coj8V;SDLj<4=KvRm>SQ|=%hGwS.>V/?4 έ(`^W ^BŽz #(V$Qw!"~PؤceGM=l s^E-&|0U/LW)4oq{Dvi+ڔQ&q&?d?k/^VV'ee*j`WԒ{$?[Zu+]^Vj-/K·r/ٰg(J>\Kn]^V ^̿K_^VY^V{<[zEY-A.ߏ nxѮQqlRQpq4~0T"C}[\ {5Nz XfuPkJdg-zԤZx_+QR::w;ۍ.'WӋmTO/.#;^nb(gF~Eh+/d.ZĿgQR9;{8+/NEىUԊ^gdw~VhZn*ҿDwcaacg8_bwԽXkSe-zhZS݇na>v3Qg]LAً+="TFii ,默ƿPҝ{Bݳ^v eS?M0S)Ѵ5:uy%~ /B3q ^$Pe|1ۋVqEY\ZQ]QV7_ZQVU wVݳ~ ( dU"Q5?]>\: _(/Bve>t$4tǿZ?ЇKr#0CI~( \؟/y߽/ _ESY sA don7籉e+-3c/KvEזZ}p1v ܺz|m1|^>8 4\5'tՇp0=/ߋ LdWmoի(}}kER=pWO}yR/AE\Oo!}3l_E*A~ PHgBG'($;WieW)wpO)Nxꊊ*˽W]wtY5sx+T pf_PR,%1ZSSB_!C):!MY[Q"uC IU%u+ YgjW/gPT /c_Zu\ G*Jen k7tԁ)A<QZiٖ :Я@j Go󁽩ǩ})1܍P!`OubetPJG* JPwnX{#|bB! zfϹ们ÏJ2%F.ɏyxeY=L7,|V>YSqL\VrQ]˰\p৒_G]|`PͮWpta9AKX?ƥ '0+nU{V$p[ֈ![ĥ|Ŝ]JtëJjMMtB=V 7Wp> [4^ \|>K?+~eYU?^Q>v~a h_w߲EuCnVEPE7ٸ4<רPsA^wKEÿMۃ?S{P>ʲ:Y7/DNKwYϟZ*_*Vb̍U5?} jVRwz?V([o8g/odi# ͋%m h̵\3[w$xthםAf{lЬJg*m^Coxn|N tK0,#Xܑ BOX☲IhSV`$jI:I}svp{ЃU_@'juЀjjtl13S5[֮?n\l?mRMv:x,w9v:1.wR8:`=¿7L>Z#1 O2ĩtؗZ,ɹmɉǧ^c|n6z1Y<%)D%\jͅZ9;Sp LCf;>{u0S8}rjB=> y UσfD 01 WQqJrL7x~˖]JKLʱQA9ϯNikQK?_Q3 7Ϊ(_Jgvz=ݬ?| >~ZYN/bQՒLQ>:SVd:/W4C,c9jiNLQyVO#2̿KRJM4[[9zE`g?1S;5tw4d$p=rӤفwJr*R ,*03`;՝f}A[s2~{i3 ϳ TbMVfŽü^y"!~3Qx,@.-V3_ɉ;3U쮘⛚.J­MҽNܙBKz|W/c|ԔmCO0錾p|ӳ",Oչ!NkRVh\#mJ93)$pմwO#!'Ow뿧?v!ĝΎ:=$ljґD; QDu6Zh1|pSά&qIG:ӆȥM2F.p7rqONuYdsWq:'ȪI,W+p<:5W97rMT^̴I==$\zfJ s|jap;&k= 6u1OwgBr֩5'?biMNMM iI]E,㧏rӱG 7]tx{{#քΆ'*o0L ^QyHǹ& )Z_ĉݐ㎃ƧuͿ: p)'trO֦ wzpKbxz(+GgHI?nVBtOuNV3} ` I\@Ts;w) LC.,,dhokg; 7#5.纓S\ZbVon,Y'Z3Ϝ`K-P ̴(-U܊ONfZYn[YウjYt1>rUV vN[:sXY)YQ+7P㽭n9s]k*w|G*u]t[Pw{YUZʭZZT#@KP#qTQ+U0V#Ht8u/qG~e#@7}#Plc~zZÊ=ʿaBza/WʩֹmI֍0+Y{wsԈ_x3כ큃Guv{;Je &wa^_P u֩'@%X(c% c)gJ,;7 JL%>z̔葠w˗QMt$*{-%v@;|/_nOp}ڹqh"^wN+ߍ@25uVS"eBy} *j.̩DbPzǩPP}>.*Xo\\#ܑ%/aKp!PU+㿦וbT ө%~Q8VJ<Vj_uu<X $%DA};l-N- kM_uu<;_t/_{LҗJ.־/F~KQQ:]n:L؇$c z={"{M%9(COF,,ρW3۔20KAD/<,,Љ\?$Cp *Sϥ(c,]B9b7I:i$x:BC^VBjnT\-PR.mI;RmDA;Tݑv [(xaU-. P,FB\ݸqXX5)'Aj_ Ŧi/mz~{4:35d,v xT Mnⶹ?5&P& F~R@tթ~~uuЬ ms3S-]s#6s] &қe";&gc%gf#t3N F:[dutoܙE' S@6 atI>i!Ja$ 'iL?(Rev H(+ F^A&xWƦH|$* MPt.vGnӶN=\=^N ̿)<- #w (H9EqYk5* ,j::t;e٤?1:M rH mx39uH4|<]&Fvh+,P e0 )Q*bGvBdKh4b|v%TG[OMZ'm#mqRCT|;Ip(N iPx05ưrѨT#Ƹg_$ZR2P B^\,- gʌs `VmQ=fZtNx $e===;ߢu/)dV֝#ùR/D[j5*yE( hƎe 71h^:-r Oټ''l5] 'c;,yPN L~ج' \Q,ĨA[p99 iF-HrF=?QX-6/mz~fWZ<7/aMP }N6Ϯ!Wm#n) ]W1x)YmSk[l2JVSx[fגtgz$Qi$NWKҺW0#S$mdfRKRscx ^RՒo'SZ QͦF4Gky!٣,MYڊi!&S1 ʑÈ9n;eChH2<ĐDԋe"49F,%0UZm(2d(Ѥj!! K'~‚H a'҆.Be41eXJ>QvL8ND & ;% hqUA9P2fNٜ'e5HZuסsKZ0 ?p$\= kp0;dҔ" ._IU$ 6řŕq@sC)BHgÞScZ"",=iykhU.7Hu( Ҭ)#eo5 xnL:T 0Ba ~| tX꓅.- DhrBC;5`״QF`A@!`K\ M-/rDM]4t?C͡SoaV0 b0y =0<ivP0J}Bt}^F)/IK\}|Ue DxsDK"GxȻLJB3SJJ8Rق1MV*35ػSt!ISq<mz4RNXԹBju^ϒ^ʛv!$MdF"4Soe{Mt.X~xu -e*+3ڒյe[T[3#B-⬶F tSckW1vkׄ%Qst9{=tH\MNVY;mZ4մWm`+%+ӚSCaFMF0rN°Y<\V15eE kyqařAQm1LjND6GQ?qoCzW-fLh!:b$h5_t0 ZPOk`:,}=NeA  ,'XEuϔA@=V- χ(U88qJmS$ I{a%1/ ) N$jSMZYO,`2-Wm;7&PԶIN+=NîMY$h<&զN:QcY46vYbK{yujE3ux9gYy|`**]y[UhV'^EC. >WA~0yi "D}n6Z'e8s "fykaS;׷ȼ7׿bd ak6gg&1 4 Nnn>͠d#J,P:L:2+SϠCl[&Dɐl#UƸMv"fQ- ¼d! ohцe0vi4*+&:X6}qs|4WMvS/P<1(:1tN} jZq9i̜PA ; q΄v)4l%W 907ҕa $?12#oVI<aL).+GW-)(u.e9>8O0B4S45X@>;ףQY~+* 9m?gbR1!"%}9^vTuNtB*̈mizaZsNj% m69gњY^(#G;Y R afoeLR<ERG6mqi)*:u#kڊ^Sru']j0{Y1(SP|Dj*Arb go!F-N`t 8yN;dVr0cUJ d-;u聵o?Jl 'JjM{ psb8)bb㖫԰D.Y[>!?;:8r\,Mi6#`"s n%HAV[pQil>r}X]siR1>?75Yۘ0qLGr{9r!.X3 EOx4nǡSP{8gr^οg\prǿt-E(cOH咬GpZ Kk1'f!|#=j7w 6^6cZܨ:M]c%%!QIFc21i"4""Sڮx,9mV4:#^UT[N~WbJȣcM.j?f"" *Eʌ0{ܠfF5 &(IP crȎp 0,S'af xёIia'd9C[VQvS6z;intARڀ;zB" F|Td7* 2[,_ `/@/NPG c#NÍE\Ew;EJi+zfo7uTJG)5u1niY4[XSՖ;M֧SũgIbэdDn5pXiQM[Tx}`taGq[7܄Y:VAȬ4 4JlF oGa "Hš$C1۟ĠhVbf,Ǜ, (n깓yio>kKfH,pHQڪFM9[2URo"UDKmc7z3gh,1&%JÐ0cLfg 6&Xb2&3`43&c6B15=j~s=VA9,K sf{h}9iԉ\"7yhV 5gÑba3P{/#3f l bEggYCYD<7_A@M 6)9ЈpXRب9 tAHQRm ]& 6 .\KpX?@ S PE3Zs,=}SK?/GŠx~2TDLF$C^<⪎ŠD- qFb))/2fxnP^[r5:Q $rL 1{kl y3Jԩ c% R R]v"6pN,'O*D4cQ;yQdy5s;i(n*P9_@٪Sz4r ;Z~&C SUTb,3H+_c&BfÈz yne蔚+Xs!9ijs\LPIW6[iF^V!$ś?/a1 #oOg`Lt+`@L+m^m& VdYghwVsaӶf,dY~izsgS7ST 7*FDӿ8_p$#~;"zyĭbKYE۽^&BO1Դ q隶\f $ 34W8isg! f*! rD+J`֝xꚫ(m 8H=;Wvc:hdaJ~:̖?BEa1Ӑc?ЍX?!G<*֊fo%A,6 W[pFclӶF^cwHL!w2ʌS[g|e?^EP&}E84Upk5^+)dhvTYd柗1mͿ5e>([UE(`šaa͟(ƚo*šG3k>;d=Սrey giLȡbi; }Ba&[gO\5̗Q&6I`Xf[TE|;kni=v@~C A<.kHߟ.u*.eCŗ]]?yrFO&hȀ2r/ݙn $_2Q@uq NpLz@<'˚.ĜTA65o y֟Cf$?KNS/? (faþ)ϼ4#R3yIABujK6 їM\׍$&Ĥ-syA1(C$H*m!qF6͢,׳w&F`3a0B`` n;/֝F?vjq@'[[}F,$N2+xɈ 0پ`N"_Udv2" T bAYg6bww}FS/kD$Nr|  2 tp}Aց {EAWg3DHۢ-,X 36⊶KHOԋ}N(muhRTޯ>(C.щ.vǓz#(å/m5HVD[)pGPb@w`/>Ɵ3H/AG|ՐE9 h'ؗp#尿H7疄HxϮpca2 Kt/'gs }][ٓ7vv|(Wqvyč ȷZDcܢ苚7q#s"BY⇋ <O`7a[_OUpۇ/Tcq>O9ν$o\j\뼲 p2*Z+}:ő珌1ǰ0>iN{~pG=}\!5G@lAƕA6Zp#CGixLM%1sa#L1 }׈A ;^ujHG\q;7 Jl] %cN0fɀSKmUREY25n&H5ouxWFvL꛱έ:~ՅۆXuF [) ZHS&| "?oeGEȭ <H 5ש57b jPCM=|CJ H_rkAR (Oq~̭fEzw\hno)ɭk6aKc` @|zp_,ZD:]s~ T y܂2* \^'BNs)f}?G^;Fw> .Dg;˸%†f#nsyma(<^CVn(&3o޻MoЩRzqfȃ V@ƸTWEi JIu2\$L`Ӆ/[p? -<&:m SJï5| $@]8 QkL\fb#.'Rѷp慾%٭r#U"{$,2R6 YÒ^Povu2@lkqOdgUgΔqT\M؍O!'N keb&Ƀr)iKPArFA \]mA̰Q->"xGvF@1Isqvmk8Ql*fBEh`5kT5YPa6 ZF|OffD7d4f4b4~ hY"^ fԀĆQPG^3ޑcqJ#fї!3Ӏ@M6֛m HB6C#Pb$E5xyF 0J Qj(+j檱ܠ D3m8ZT!z5IfCnFk¥MLZOE18$i8ɾa&o,NY cO1Éd. v,N]4X6301x[iK& dMaj:8qTPi )d07^$cܤцϱXC5@cm8+T@r!@D-LoEh'C&%$~,SպRPrkrdW#Ty*-&PX;$잲48a PY#\YODazчb0d,L Q|}w n|7Dk#.m՘ `Ng豕LpkIțkfv @5\@5BAUɠ_1! ~hw}fi itD1d@,[gcl&@nzqWB pXfb2g;e JU: !HauZXsՠYGhb& kyw-w?lp"Y2¬g̢8Y")!Yc7~b o\U U~aFLjHWN723bHT%'hJzgDP A+^|BU—3b!XE@8 +V8UG7p !X݂4AC1FDimD $KEQb-%@-&z/)$8$h`,`ա?"P "֖TWDABAĊv6Kpn#BPf^mƁrVآ0cCb ȑD z 7iP#bic~AiIӈ: &g4" U Tb P&z =)Ď@P"Hi(;:A5EA;Atc4 Kz#7;'V6- q*cB" Ԡ3UdM "E0JEj/mDû5E߰W1>$v 0oHgW^q~r+&t|ngK.=U h[$zcbfП mz/&G y{?%㸸PnD{o?.0:pZvY`ܹQ|D6c+m3 zW@?;uyd}=N&k7 ;Q=gCa+lߟCk'C[Wxf6F U6ݩAmzqukm$?hC'>4,]uDn|#d ^ tAFp~炱>j3V w[A&޲0f唶IAh:'liI{4n!|)UONio6_gHpwdImi~RXwv\J/~>ln_Q;lzƓlhMvewKfN={15\[|>Ń L { XͅwI (ɇ& a#DGom8VK m(dlx;6@es(N0xFV#ٷ;)j y#[F$үCrQACx 5?dž(a7bx W;c1$c2JZ'^kr|́S NφNd+lPKȑJ&䝜6E<A֚VW0).1} jNJƦ1Ic,Ivk>Cp㛠PIϜmf ]tZGlzkm} aǺf)0pvNwK8Cۺ9D)iٝފ p|n[k|RUwT+n>>1;sd@B\ؙ8ݘ[ IRC-+q;sS13qy[9SKyZ[Mb_50XRs[3m pV㣨qlHv,!aBkHV$XHvMH,:" 5` 6P6@5**""6Ć3}G{=ֹsg\Ev~CeQFcqa_IѦPgĈ\+f-mg+_7~ 9 {?7/`<2?58nVhkĠI۞욍ݮԈAvF ԮψA/F7Jb*lⲑXďRqɄy#,OSqN`o1\fv*~KsBCT=&ː??%c=ފ7+Ǩbe1稸 o줂1T\?dЈ|BqhsHC*̛4 |h=:o1zm(VE%Brm~+,5aXh1q:}RWl$l+XIUI %xoN.˒qxФ6|y75;Js ֺ>QҠě X JFq:㭐K6Lᠱr=xcofnثś\n2 ❠݈6_XШAWl7hAn҂I9ܰQz_ݦTCܲZv'$-&(Vݨuf[==vs: {{#X3m`=۴h`B)D*50!1X A_4xl4ccحd Lj#40 zVy? ǰ qM-_Lb=m$l7{v"*/룭y~]&Key\|2k\stt/P9w<.:;XFG(/fciKҸ,#U_Utj0āظޘ`t\P8(j6)K*}b#L4vҐy5Q ZdQ0#}v#tK_k>>7N+\:bxc7JƓn9o8~m7~L3׀ L/ [<:/ގƏ+};6܄nȜ 7dЂB'nAGuJ/(o;Z/Ɍ/\ FJoh;?@3m{sGȢ2rGHwk PvAA:'Zm&Z _;?nB&ըBk~ݨDجrTLϸF4nT(U=nQ#FɄ1n8|Ka3ܨ!{9Y,u9z9={ R- q rz*x%-&fLN?͊kӪo.9=(^y‹7xK9bo(9X %~FǏ+-;FOӟk;FNgB9fb>wF- 5Xq60W"xku[ogv\Ҝ=Zc;2\[v~YٲfᏍ0ߞ =WOK잠,ΞoؖFz{ - { F[~x~uOQ*n)&Zv܍yFMY22 yŒE*5d^h[l /[h!P`۸D[*:Y1{7z~Xܞ'ٶScq3dY0"ՑboYYw_2BDRߖ⅓L8 ҏtL gz-E- VDQ9z1WnRI3q}žp8Onq& b \ÙXr31_0/:WԟA,S@xz#p8&C"$sIԝ3KzC2_`>'3짠VMlL?ƈ5 DHIw) Qb}Y)R E.)Y#Uk (JmB!2H*er& 4[ #6U#I - F|x.nՌKˣ-L/ueyIKDKĥE\A{q(&od/@~ւ'S++ƌ%zg/KſRSDf1UjGʳY^[pQ;ļ7)44wĔ%c(*fF1SS bZNK`(PfCؚ~Zg~Jk\ZLwpu&Y$ԸE7 Jr(G8oħW,`pdDW_⠌jcCS|/fCX3*R2 ;8Mm¾HJ~ꊙw*Ө~ߟJ)7mHԼ7)DgCM^n(SW y}AUV~՜|BmYaILs!R "eQV'$9~iET=Zȓ ڥl>VAsO>ɠߧRi'aH\18ժd7ꤡ/ϿO6!r\| G|\B(h7Ɔ2_^tEz~hׯbDC>q)dxYEnw FQyƾ 0=bϘ'r \AF*Ybs%OI<],l_RbR^~s\߁¡UnUE%y;X\e3zIJOJ"3B4r8ɠ½$=7d[GS)峍 t>) Dtw tL$2O*SOd{I+$>W*17ꚿU7Q*l1dTBcJL~[le"ʭuv=MnR)՟@hws Ie*4r9ɠʖ&9ɠZU'+GxDrTGFc1Qo=&Xyl.*Cr&7fqwj(3"Ѱ?0%B&mӆN V{n9_k`:wx::DZT{TDKt %+1 #L?4|t9Qұ'\3l\cDM)&W`XZo HkJFƀп9M-`7J̠l(,e/E+**a`u?4)=L40+S1wOrLEoJΚ.-wv1d,-bn͟ŠdK^iQ%RDJs% o*'4^_ Nudj rD) @QEqFzAh? T>Š ?@*jʮ"|ġ0)= ! =>ie1?/I51oN\wjSMԈVOp{&Yu2a俺yz tb[OW}|Wv&5^&ȶpQ] ڨo"FaJv5(eRs+t^ՠܚ^ՠ֦ӥ uў-. jYkoYW m Q!=Q¡T )D?AǵC;Xix}tx+tX{Y3Ll얄Ps2L2gKSS'># Վ0Զ&yjsrnjPھDA ,)jg,:Ҭiwnu=n 7t%ZD){XuB4'8n(Ah[ l Szb<!) ogyKҔ O?'aFTod\( kYMN% ,,vɯIUicx  FhN lϭqv ƼZO&3݋,h2wJAsL_xI!54MnZpB48}"GiEJnnb-!vTz᥍n2WlQwkImTD(mD-B1Iz &9 sQ?n/sVS yD4笏gGb"ljZ~W>EŰ?T3$ػ-OxrlcximnEգCSYw|Im&Ja9$2*, VJ6쩃u#['4z+k"SDs+JKy֝BmnJ>(&BdL {CSţb9qZѠdO4K4fVC|DN4Y'*O8`EYhD8+݌@Ic]޲.?<\t,Aruc 3X̦<<=RGFRUVYd˽"{*]9B<[oq1e9#SzNU"DDO.T"\TȘ..?ǣzVD}9p ^ D*$2JˢD mEhZž@4-#IU$RVxTUq.o]ŹcY f2Jޤ]}|#>oxj~ %9APOя51䜸Z>v+ɱ?(#8xgUL9'^Ǐ5?jskڣIe!=O 4TsxU]~$+{b#uXdE<4ڔ}9x@n䞻;8>$3H/>$O$Lp"1^۠t@>ݤ{4Ii ?6.VR%$t*Һ&6hϢVB(78ݤ9VI[":9j)l fRڑUt3^*Dݎ8 cETxi,#O&nH]^(pX&`.CoV ˑwΙ L"NX-y&>O ۠?i7B;AY % Rj_R$B2 !$%S*6$ 0+$ ZGAiY(#/BCw`0ayG[51Q NE}CM-5 ЛL'5 ^sF#$D;9v&g'a5|sbG@g/jN[jw7/on! C e+Ғ_@{ ѿ2K$ v6)ǘ- e$[0P`/\Z}- qzd"XY$g,@sŠr9g}h__8J} %/, -~aGZ3ZI_y0*D2gcZ@NDO%cg|Hg ,P١A5p_{@ڝcRJn>JS0/cе砇K)cyjh!/Լq Qn{Q2iM9MI96ɐ:6V@Bs+ϹBoB!)d z$51R &:$3XYJ_0%6;g% %ikX\-On6'-ڽDp:mf.@S,F8L/2F`dFp:d]M,׹l=^`ƅ}FyIQg߀B)?ŷOD,쓀2H9UqW=(p[ ecw3$=} zbb8LrTwa& 4"9!TZ8)nsLqJJ`kqr%̿c|;w8[h V#?$`ORHjP MJMdͼUBk(FG[`,C?4g?w!f4i?\4c |bē .oj/Hw*_(lQj74/;Fص|%NiiZJ!+CU}y G ^dӐ@Ŀ cˏ. */TԜm-SG9:xJ%e ͳuJǠZ%zT!HcPR^cZ-PZg} 1ɣXbos7ۗBQX'+Dus1ne9\hW&ڝd ], y@sS]nk 'yHi9!'@?2NFʢwX5Ӡ5IjL1A `+ViE'ő~r٦ $qT#%pqBP[p)n#~&TՃ@%1dpnS\H`|> 5jM+]dt]p9ݩwݛm#y}tne9et9(B Zl/TlB۶ExVQ?8͒{.¶_e&W]{9:D0ZnR*<'F5>'P>rX,6 L/R2{K0>(/Cʡ V p N HO y@.rV:2o]dwqe|*nMd7*\)ߐI\iY+zFv*di9'v"1nٺ+޽aVsޱ04Xfe̞xh_v.VO,Mp5$b{z_VGLJ58D PĽf!\TV/[u APS*ߞ)TmԾdj l }6ZSaھe$ok[&kPB%Zנem{{_Vנ&-𣾯A_pY]gP&4t)Q5DWp*% nPhSti"bVGqg9eฐU&({۫7WA}lCud6)TZ*ٙEħ.ZU)Dq~ts>eWQW+f}ѼP/:DAN0?@jF%u`)ogg *<5C(zz#Aj_0?AAZ{5 ^WCg02٩AuCNW~R6U.f޽VflW@k▾v t5b+KsX:O\#cKoK_TkM2aiNG*[zNlj^8$ U[)5vֳP15"(Yf~@MBnغp:ʶTE}xz9$.F (R^/-y+%(3 ʣD=(u$Ca_1L:j=0=VrgвIY~YcRۉx!p/ L vDDqLmȀ k_cI<H1\Ĝ5r%1#yq6|S3$d㘏B E m r[£GN"x+*OPON^C /T',Ĉ6,I g0 u6qgj} a)ef?Ь~5װkj\Îۨ3x)7?Vzfv7Q:/Hא[}<i60mOdJ z8,4u[#=wzz5pGSt>:?`/$t)7(N5f45+V4Ы,6d"4}tImX"zErQkn?(v*[k „Q[FUʂt+vC+puO>'ڮ Ϟ` ?=Dfᬖ7d9N =ʐ(88GN/ .^}+cӭ~=uv)ӭ\t[0Etk9(ӭgoV[uuxD֥-fˣyDy<j5¿X쪕&%<GI]eE_l VYQ),Js/GVi4SVɇگjD-oj #ZK35&gPp 4D!Tь'Buk,_) >wV'%Te)$ɳ2d ADVi;wE!x*fXȚF1ϵPX٬QQԵ(C5#]qZKwY]b ]1;,¥Hs|!|zlH {b<<*BYؖӇ7B^T 3ɼ Ŷ3KT ?Cm\, $ؖ$+cl܅<HuxdX]0Sx>o=a7aV!.H;NxR '(2┩v2a`'a`YߐCt? ]I7yby)*ZTM|_^+#Yz QIحVyslyjUٓ^{6dV`4trQd6b;? WL~2~4wL_t3P~dK9U8U[$d:"u%Ɖn[#e sXS?sBSe,}psH[휬Eσ#;ݑs,N^VAaoq1匉VFQN4y$+B?q2^T:$E3솷Jz]ձȱ㜮dߠ1?:t֋&7?r?F7h;~\ߠ!/ߠ#A=U!goJem>^3TEO5V$EP_0.falTlpoo<$%]ݤt!vZX/h{ɯIYD??dEJ׼jY6Obf6sIDZTD~ 8qA-r^ߠb 4 m$ BZ:&>1EjSXiM"tq+a!'f%{yj%ɹ <YIXIJu'5ߴu^8ˋ_^ν.z/z;>cv@>9 vbk&*(+1=([~jC+݁NүR&_L3ͩVKZ̓H^IzcWL-Ze=i5SgZHނ=i s*KS!U/;LJu'JtNxD!Կ=tVOfiyȅiIg.hnkv]93Bqn7pbD c|*ѥf$5fLd${ߒqi(Y ddo Lx?H%iF&WMdo#!!3c-'b.BDulRiQ9&·x3 >cRe'YȻ'3R$L̻Eȩ(U;e_d zw.ߍadM%ybo2Sf;u"Dw7qyC m(//mEfy9{㷖LR=NDμJd^(^gUS'9Q<ge^!(t`Pw&]8ߙ;0h&? 0(Ii0rF w[.FY8OװZ!@s^z ˕$'j\k_4[8=3_>`q xC&UȱPRY$3:C4ܟ(DXqRgQsԴ9j6дg+$$Ml}.È{B49\t/p\KoŴqPlz겆ꋿ`| @&#x}"JA6a_y<!7drLͼCyD Ⴁ2V'k2!*Jn{;b=uA':]>kA!4n8AЁ ZeaXa(Ï OlVVZgy2R]u.-. ~|#[}gxD>1If(ętǽBq}WvJX5P2Xc[!"Mu.jN8J~wQ0ųϮro(sq /apu Qc}@^N#kު8 1 a Ȱ E'G.F@Cg;Ěo/8lr>!ޜp&~#H64ABQm ѸaY?ybDULnW-F 5*oF(uD pY޽ 93L˱c~}'Y?nGN]^~z'I~Ո_ 6R2詚#HH i=lcgDHϭqyIT*{v$ע8}/Kyz ,-u%u@ %%X"pՓ$pgzG飳&uhe֫1Ơc&z9mT4 v5@[BF m!G'UKXǪMn1+vDe#K4(A\R#dňp*U)f@`_-J2D.]vs|{c J K/+2 j,-ŕ]7hxv&}`*Apr%ј 1c\~DuK+nJrP ІFv,a! 3Vn `E Jϧj{}X/ wpl%D'kR[Nw-?27%-v㋂d%477ePxJk@T~*) ulGD1T& t'}ѩFK|QSx}|ax/]QsT hDWv7G|z#c|ou \ aOxFLkV=~tCzk!nBKulq<Ϳ"IJṮ}U Ԋe F6TPQ.* UHã Hi}mM$(JvOW)|;/F/2?zcy161 Ee>ޙbʞ`WE|TFǹAMӥ_46G9J$aD-'|dߺ,TLz7 oH[.BQ\4_^Zҽ"a/;DLW4xFc"]6.Iwwyl`5H4.DczWnMFȹxۓO }11#a cI1ܶj^1:<cn"OC˄Av.-w;XS\VwbU! 5q7VQutʉGYŝA/X/:R?G /إT|>-_%T?&6u,e:\ƦlbĻ/i T@QH/l5bqũ4&t jJjVs>j>n\Ɇ5 h, S&W~*N㤴XhsxlT{xrqB^29} :A]oDbV{KJP.R\p%S~]%5k7L免ű-A/vsյeezAG[梔ϯ5ۇ:ާ܇5he/Ukv0V:qYuR' ^{4ѻҽܿ䵱6u dw^w+r6.22UVv(%sAV ee)84hdf1ٯ.j Q]$x_ |jggQ`b3þ)7Pu"00lH䙶 ]lɜďU7vw(;CsxXEǑ:"Otެ<CN rJGKgxDN|ltWfW9uAieRýxAoiv.r5Ӡ\XS?>ӠaMEZj5oPVZTA+,ࢶ`eeHߌ_dٙP:{v6O@碘+'`%d-] ϋˑ EO;ZΛOS_Ɔ_5t¦}yVfK]Vbklm)rho"vV.ꂆݕlfyXJM@9TR|>Ơ]]Ω1?F4kcdP >IURmjIUR}tLzS7MStSȵ[ʽ}i[Q*Km`ۺpm(g<8Ifib9L܂di%]dB4e*h@;_B!tݺk/!/!$%U$̟Ӓ5SS7N) ͚E_R(FmpBΡ(VKG8hKw;U<܇Tfqy5@=H5'#wHIKoťIؗ{冥Iep*WXƠ\V_chƠY.rRcPZ`Mt>ˠ"M <)D-Im,{WO(=BLSMZJ=e)"j}̲^Uje$k]S!Lt:8ZܟYc>.@_p?BZE3X5\! o$wlzQq%^al:2rk_=ξYK~.4;LfKq $=0@ET%$2i7׾c B$AYW&-Mmqg(-<۠-eo|TQk~бƽfAsα,'ۖ$} zIZY|)o=+NNC(ѝ-0cxgK#t~RmP'{Bp=tܯ6sYS1sV<9&z,׷pDtz%swWB[ca IA_7L-_k.in @j&T0m*6`BrR%te)hUZ9S!x/L.cQ~)(H:GƸ7 6YܮkB"Bۘ -os_\xVT+>"J5Z";1~Uw 11X\0E 0 HR ttK۽e;aeRG}e=BeLI)GX֪OMǏFJܩtڈDpy]W􇤍lfȯ#lH-(!ڝHK)<}u:Bۛ*o }D0+2Ӷ7rucΓF;E}D9劽#9rKcN,sx&0mvO/ɕOE^ΩEP>1Fv :u?8UǥzSZDhRMKrwbTZq<\ tJK=jA&ғtjM!kE)5h]erkg]v\G7nKET%Sae24.qYIϧb1sƥFJ˩XL6_/V`f~N2 OV ^l˘:.2yvx9+.wf6f弦7=s?T^sZ=p{NpG9s$'*֯ssδwŹ9nKRy>0S!jiP1FɌT^].Ms J//5b|V+Zz,/(Ni{SycfJx=z;" QT^~YѮ>4!B`OvvE s ;|Wh{*6>`$cgj @\ įU_ cZ]Z4}}B}]$}#tWH jaB !f$nWE맨v 329/GV[{J}ŭTi1j_Is)}Ѳj~jhއMf˕?,y%rB(|4.tDO QhCHXoM iLNJ@ "]S_ /aЧ"sGMg'zSR7MwQzqyhF/( ,7,0lxM8/3y˄~B*ysTnqR!{}dAWؔev9.d|h1 3:UJ-(J+#8cp%妫qdOiN{xj)řuY` 8ҽx^"3Pm{LTG,꧇cbvQl -)A?ʏ2ΟIǻ\hZjbgvȊb+k"6yTzdO z2 t=:91cE~`W^"Ξ|9zjL_p++X\ cb|&%sƃ1 Qh Fy1|EH1,5~¿^Mgˤ5ɔWwVVE@#q" \xcíB;]i)4Z8fEynA)]Y N+>cBK4Drk$󰃷FҴvgc#ƻ7䗙xPyGh(B#uY"=/s͛Hp1=y?iKʩݻ ,}:&qzx l=Ϡe㎶'+S3%B]8Ϡa]v<~^ j1k4˜ *R.Z_l,%9z-mdR!X}T?L!OGÚDK͵׻p<3_&WtB4 tJBKJx93hy/ҟ" } O&yҖ 8`v#>/CK8+F~W,- ŕ+C!4'zjSotAqS5-V0*).9|6ڛ\dGhv2GT a噵f^<2E,Ҡ|ڞye1*|3'3Y̝kݲd9ɾwۿǚbd^!# }vyn}JޛǤ}}vůœ>W,A&=~smj)q|B+*F)Ɵ'kr[gKVB>w/J1bD*(bAMf@4'7U,+.pnK#BJ&rU2H|jIZuOH(lP7[$s8MQ\&ۢe?POf(DE!۠ekT/.y^ZגY3wW㺎|Gw+u5:lOQֈ [з]4_MO! BM /ޡB¶aw*N[ CS(=rtE2AC٥H w)ɫbq6 zU*ZLL7(1 }EEXH,8A1*C :y7h:loS,": f2CD:hj#l睘\ΚH+T=Xܑ{=xJɳX8;1iؙyNwQ_pl7 xR8yu#ag-|R!8yk=F:8ߠ 5 @zN\`P.JkskYOWZ+5# 졅i|Hrhha)~.k!渟x=p_{ )n߭|E_;0pkB(qLL/#a8A KƐ=ˬӳ ߼RQ*"f3K3)%w0(e:&m2t$C餔<~?^Y7E鈁 ]<؆} ԇDvbwV!EpnCt?_u<},-[ؔG@,աZ-gH-MZkYGCZ $wk1Cst)ܐJQD *?╕jw"m𾾕خv*D[1Q)%wA{3@Z}zmptA :~HvOܿ޾Qr5:NR[/0McɎFG"OQ CZTO`|d#R!#hcV;P!(zAR׷KP~kUɱD,KY&ZfZNj*Ͽ\Рњ7A!ʎܧ,4h?Smuq*tSlޤT_ShEN)ц{<s5jck76&?Pxo+D3z5B֧gQ$Bz5Þ,TkvJkBauyU)Z$; ŝsPJ?g%)kLĩ7!uI=#uTHa$5U\fC=޲{q}BqkN1khޛ QUDn%9S Zk(S,q$z ,Rҫϡt(yРK4``AW?}10+>ӆTmܕ z CoOkUNj",60|ENV<a v`GfybϜ%4a3-ni}-!-x)ӈ/%DHyj2_.旔iLl1Eϛ27iWH8L,L|Eyp ZHc+E-\kf]mI1/vH1/=C6[R,H[RԬspӂod*ðfb%Kviee:zW\t,^}UAUCekfcyZ&BlJ)ftn+x(y5J[1EyV:Yo`w>7$2} Btz.2oZӃt֠ ^eIa=.SVz!D}Ȥh QL:w o1//G (ҳܱ&Jig P $}kU7D3Dq QǚoV噂J2 52(+Xg=$B轪;N=8 Jy=D [+Cci%ߤsNG!N=>&:GU3Y TRz>}B}U!\ku:~bk"Wrx:*+ZM?A,Q{A.Vѕ,\Рl M k,4-Gi)WJ漶lfl%2:7fkv"],lk^u]ֶILck}Ȥ4GHLy L'B9qǺW)+[=饶pw'R)O!h˸6F6E/fݰ՝X ]FT{O]܀}j~Y+dRYمe@~=Aýnq&(nBnk([2J! h832"O:aH$\L^YoQD2K,tzS9šμ`}'rK"%jX rY⣗<>oYGYW*6xq} $LpB =!^*nnHLO ĎYuJAyst;[Hb1 JEe>ܺ֝ s{C(Go,oyZw~^p pcpsyZaޏ2>,QGScEAOG;_8H-}մb?bW|'(>n<}Fc܎?e0Fur&t" xcb0\!I{ޘxH>7hHfS$?W|."8 '82ن*ȶ ƤF86HZ"%f%ђ"j < _"iK:`h!t%[Y KFyq~,XO/DV 0O*6:^]2b>evK ڢ/+T{Tzqi}v' ׃ Q<,C6 *}(ի6>& !ze)%3;hP,GH)=!Z_=.xglkt_,.Ң%tBq_աܩ*<2TDiH R@ +3A:W-L! /d vmiIG-,RB' qޭ^#pڙOH8,kQ0.T A}9^ TByR=-WiT DR;6 ;V=#.JFeɿKD>9w+V&O&F;"]:YQ-S^+BM"e :H)W[HsB[YΫƭSTh+ %VϲB>B.C(BWDgh^޽^+qmbbҟ"k/L4(k, Zbfus۟*,f* * !󂿚i]طj",悿D̷;K(,[bms*,5{* !G" ZE)?툑rDcIJ7>ߎcA&ۢEhEMc7:b[=D- K_6f([ʨ& giԚO~[㑊} wRk==3w Gk[c/]LLCnDG͎|+Q!/<РvutLXdԄ֔iAZZ\&*oE0I(ȏ LhM 䍠l7DtM%E*c/2֔6rATАrRA?jS"1ԗXPЃ֨qM ]I"N0Oha +䜰Ƞle7SZ"-Zr`*a͘ۉ zfb+֨@o"B"BlnKK0)6`Tj5?&Xf,Jn,X~@lF*ϳ5ކ^r%\KXo-T0suC'R4 KSԻˇ XjW4dSJzqiobiw7cR*HO7wXީS=\*XҶ0K+f.i"m,C$%]jXJV^+:hi~5NҷH՝6pkW)^Dڵ,텭Dڵ,ۭ,i5hd] rtuѩ͆4Ą%M62ZCx%},؊T>xLJy'Gʫ\oʳ^wK÷ƥCq+7^CyTȅϊZ522W"U+%l`uԑR9ܺ5yjeu넙` ꠯zNxL{m4UgJB!H(;/xU[p 0XlQ^\)WEDS6%nHHK:ÒNJ>Y/}^?d4(dS|p|9i+_e8J#_{<47+l`.M3AXRa4L5*א&`w|;Xܖ|RJfvvAiwmQֲ1Gub]E&m;x˴ƱTD_iQ?`Q?c۵=,}XԏYCH`YI CԷ}klNX]d1}Ɖ۫V*쇢U֋j5CLm`W)M454}:qNRNf)} +ǵƫYYHw,ZSOSytKQaߦNc{SVko"o,ꦎguDr2us]Щ5έ T;;E/%ཨ3,io)SE?(;󜲳%r [H9y_gh.Wx[5*i_,4[SځvՅ|Bn{<\|eK+ym=%rV?>)o.2-X!hߟlAK@hEB 0.4B /RLFHoU[/ٿHEe"BN-.)J"N\ٚl߫"m"Sb q;'.vЍQ$kH4_nB[RҚєk'|9{l:ؚZBl׫ N+\q`8ƸHбFxd|ZNM"}sͱJXl6n/@e˜z"<̡PQ+U&5!vejkF:5Za1f*ƈ+2harD!TΤ4E^H?0&z~?=uZ%#H/GU9(u"Klghhzm+R2% [➌n9pk% Nt8U&+rsK~n[v#P!PE(޻ cDQSnY*+WZ7J,賵r1zwVCX}̼pT)BQw7_[NVzBa^|e@oVTaue-vBQ~yz{LK䆔5+l!jJ;*۪bL`,iG1BfTT b脓VL3QC+*O(L+WD#_*մ7Z[aF#6DW2ch6ӆb i'j6ӄ5V?Vd (SEƪ7ӀbխSULUSuz_HfOls_f}sHkݢКBGb\pR\Z|Rk[_TR顔 σRivqO 78ԓ[SℋO:gNi ObL8OGչ$Dc~g!VUo*'~H#q)4_SR* Ď.c _O1'MdayLEcx.p98@i>WYY7'LefaWdx`V eV0ʾ9 zȅ3\7aވ,b敹Dd\,$ӆ]#pxc6'L$]6K˙;6+i4FHbܐ8Pg5MwH, uVOS~"HhhVv҄T hQ0"_N̔5¿yTG*.-n9$V2kV (;4 :+Ln{[ikOs"YɿMt JYHд3m(L*JWޫL*STU9._0J\<*#vl'fNem;s\"<'C'OK 0?C`z턀Yhu(d1.[m"9ܢ96=؊gO:ךsD-(ئ r6s '3-U^VNk5;Ĝ\!͏t iJc6meTʣGxt(a}ÌnmDFFOK1Q>.|vN[ԣ0wvZtFC?c/N01 \_ o+Пx쇁O,V`=8 n} L%?P}:gP(ө}ƧSXYt8EWT(rS0N=AV&@SmA2{0s5H_ς.;*Mr!S!/|b"Lty,H+Pi =ҫ3(3|5ϡo&YbzT7bDyň>|Dtjb-^l+&(ҘCoc2(c;Qz=\H>\ $ρŒKFڟ0uf_s=nt:sTo|:-ޠPOrOGeOPidB;}:=ʷ|: >>6ŠANuSO?Ct:~j%uzc:MjPh_*7uچlN/N/uڠ7TvA~fހ Z 5mQXіb8;n0(}A ~N*on~^~>qAed\8&`ɛ>~NmJreYxNgO*~ /{>q% wm^T%l$(& 7]`{fy-ժ%:Ӵgġ|%l$豃 ̇Y5Q%M$p&Ҭt;948mdn}9]@&TʎHjdo#;ufg}:tŇ[+NUL3t>T;%[ٚ"ƝR9A[`wm.X]d.j\ҙ|rbsxspFPGJ#ѴK+8a!gk1"A|FASSf[ad٤܉Ӊ\P7oKqy {:i>DS] E>sR1w2]n̒m.'ƑAieOШin˴FM3pf7cZ\#jPn*~7 _EN(3Bs}ttA[3*!I >:!$vZTD?-h!m2bڍa࡭qn%pA> zs@jeFڎP}@'c+:5(Tb3 i,Btje(ވ%&SR <=ilBOtZ;;;&BܫY-IYnN:=JsF _}s.NJKٍYNG^Dh]b!,0L0b4ssB֚nƔb4 %0Ā9")Z uv[Jt|[Q*sA7ul9CtG.O܅$B+U㓪c"'CY U ї+P8T(:з6zNPO:Pl7E[3lIf<&.5:3 urQ }h;D5(@m}S\J='j! oWG bhTNa)st c2q 0qOTx;ɌjvQ7uh3R,B=T\M ele,aPZ5M)  qAN@占N37(Nݏ @g~U"ϊIHC bU@<>wVN(ݨ*п74TPϫ2?9 {%!EsN2kL23KYJG2KzAyO64OF[Ifi)&"_5(?w;r,jP_I!1!{l$)jr|Jۭ>AҦx W5k *qo4vԦuZLl]kЈ9J䫪,muz:2|=qEֱטxoA#W^Qei+}[[uuйɴ͟ :YUzI2#""ݏ,9łhou*,š!:n0(TViT,*un4ltN/o%rJy;*P-*PI)'6ሂrt9UzC IlZ d2߂`rG܌[7}*z2sO7ݏ NU&(52HԸ | Ƕ$*Ɏ}*Q ||j^0`=ԣ\J:=2Hjf♭LzmGxmjw:ǧiu-ؙ+raNԵ̔4eZ4iYZAx ]Eu?s/f'K""j}{C"AEP] ZM|AXt* P*")-m*+RۦKOR[-3{9gsi0yrgZ֬Yf93W|M5NbrYe@͊20e <.._(T X8)q#%Ĕ($JdQ+āhA9Os+I/W`Q ELOE`P9B"1Kt3Xyq)QpfJ^ؚ)0fzg. :RS%,lIJY5Jŀ׾eưRI/J) +¤q瀿Ŝ \1 ըy_ MGcbҲɢ|A*Z3E. eTZD;9KLgDߊP%Jdq\ds(ēD(U4Q" gPy( D(YX-B楢D#\?m*5S۔5HH ]uyrT'R{wxgI],bӔÚ)W5fz\;4s1;43Mk~.Y EV^*Vi,`Ne^gJKi0b[&YJHC# 59Ibk$z?~?Kqӛj壳QY[=H:*2B"n^9E2tgQT4Pb7l{O +f4\9Q<N.$&[0v xFˁ`8 S ڰt Y[-ta+XÜCУ7eZ䇰&5e"xP6&RIA3;4]M mI~`V䉀fro "AiZyX!yBI.x-;.~8E*٧]|R`L%D :.~*`/Cڮ'N59dw;XLdYG >W!y.p6C|+;.ƘTȓQKa&M Oz0?wQS7YUT,4 : KfvVHMA/|w?ф [GȊ3x i'1*+TI%xNq /~vݻx@I|90()*q|Vկ+e>wO7&;/4"ۣ3 ̱Vf &'0@ K'@9A*zaXCge%bk$y^4;VPlM$m$} mP$?uPxִHT3n'.*JEyB+I(]YaE"Y-zdUz::xޱS~PK^I 'bu4C;- ׋;y!ņ7_I{@k4pP˙1iQ?iGi:xS~狿^1~x`! ~2-!4HŰ,x `#&Eך$_#kDx@DPC)6t6#<nZh/u7+$M6@Tu\iT4TX$Y"*ҰZJyDQ^nKk.bSHԊXP-*\j/Gd%XbںOp5-,4RvJ< [⾑6tIgJZ$_^撨R半/.d.kl\9@fE$$;T哊֕8#0OwƁbކ"OZr@_PۆdˀJ,_0,/k}T7}IfM}gN*OP2ߔOdޮYӵ$apng+`CqU yx XB3焋!eU6ݳ&;rb7-&ebk$ʸx 2GjET(9 #ou$r"J44[ z~_fɷV|DHk֑bPkZ? YIM oNG'+K~$Et60@֗%N 9qs 5\;U M^%ebHN?- =Zc7xXv*nZ =>Z"y#HtXהU_359UmU6-WPAXVL75( "vQ/Qx]Aa# (Y5Rww\S9xY':%8*jurb% %R ̋n_U,rLfz %%w^=SW*n3YW֏(nlrѷEr[iq*L Hs9¸>pzRE8fIt Ub 4io**)7uv7K!SU?dĐJ*sE* ;iiKQ YJF /4J@,ִI& dRQⲲ6 @w,%$ݚdElnM?|i3F4/[gnRWؚj,רuzι UᏣn2P.rޮYo߬ F} xޗ4Y^<" faWanPk\2@*~tEx ~_Xi P\[Wg /}pdE'q,.Ҙ.]1֩h@Q^vtĈGMoo۽u[H|./\n­etZ3?Nv&|^zQ4K_+A2}h j Ovˠ!mz!.QϱM7gdM2 & bA iy61 LY&R{T҂ 孒6.˔` iB[8f[kˀޯ\3w|H%LOXN"]: Eýz0D h`JKeapKS1j} ^A?2֙j 3h0!ʶu`ivՙ$j zV`5ah$d9C Wl{ŌzҬ ^c ϦL5Yd+Z$DR(N)`X3CyK%y#^`0K[|nQyJ?Q O GƉ!қ%A$/i!5(y &g#jÛt*a.l$e<]Q Z;]ֻwe%[$Z%<% fMzq )5]v.Ɋ;U@2k xNY?MESV'1gTQ[ |o`]!0ì nQd5%~;dX#,/ZbWT %j %:Kw|2&aUSƋ!rڊ4z>Wh̀RR|<ִIVt^9w>?1'0.RSc:]__b[\ ,JIԌQZ{lEF1H B20%a[G¿ cP-<[?:q 8ו0veBuR,(FR ,GH-ؒ/Uۤ23Ҵ]|lHU\#}^fdM{L‘iM$Myh!y [y3 qXu/?`zx 4/ l R#ZbcMND wnҚ%5k+5F .. [ X a³9A4xYߙ0DZ;^]Fi|ҪgVGFн~R\P<nTHe!՚}TK"g,qEic5= 1qӻu:1~V3k:$7$AHk:$ 5nz;~&5|L9H~T Ǧ鐼w iM$?&R tH[|yi`] Z2 fxqu8prZr-v8xµBZ3C;bX"-Wvx0gwy ,}bz].!ŋc~VDЦMEpt}mٰ~Ħ O]3hX㢺-Z!Rx'e#<ִIҍMosW6z]WԨ//h+X\~:׉Byx $R DŽ $PT@*:HeamAeHM+ݲR7"rҞ`M6h|bk$Cwy<>6~ܟM.@ޗ Q* "B tʐ6wlKh3˚$O0 [@!Շ#њ6ɪٝ_LqkfHDl@<PTTT iU L~1wJ{7$<9s{0q`BR(3s4!Ƀo}57rߡzoO+_bVp߈W*Rga8g{hGh>Zpe[4.B wix?姗 Al$`-Bj5 z }#Ӛ6ImIVNdr qX9?7bSШH8HXXS$?8xY!ɚZB>wiMNJ5`e!I~]v!^UtKYBOz/S c\t)lPԪ(=MँA%k:&Mx\@1d+O2@fTrOٗ{\hj^xW "/tUTBjl/Ҋ%}.!t52`ZWi,B_-C,DlCjLM‘iM$yK$y }Jy88[?`8)h8: ~ ǚ䯩qӻw !ߨv[ZsbkViqn&,_Ьv?GsEOPD}RkֲOBIq!_i=zfʼ].#'W.UEWXuH(mXԒtfLkI"~>w%Y}w|ㄴ%Av% љCu*S%r,!=FJ~_59*R9X S$dߠѿ-5gRޱbos,)iϜ=1r,fw Kl Ą;-Bvjo(ᲹeMwށɪ4pG|VhNi:ĐVLa:WߘbHTK&?ogS6v%DktPsX:7d Wvoblj7wOAVpg`ֿ.2]ЫOT,qyzVh>'_ ͵:.Gh)CS1V,:hN8bkr70d!}I,_ U_IY# aKQe.cHN1ִH"a2GrVXFeR&*KIvC+["G{ &]=qQTI{jL,^ 2L|R1TW!E xaL Wo'ҳc@WJw#ÚnLJ5]̭"[e.!-P5]L\A%:%,H:zPS^1թr etYW'b/4*'n()Ap ^3SeMN|6/)[= X HBOzu\ %.4  0_WN i059I"noӰv c6H"NT:Ԫ(3O`H=El xu]\8S*2H>@lMN*a:nBg$k¶'RwrnX Ux"SŸP R۳2":<^)+wQa|ݛMYY߁#*Ěij-2'faWQS{*ؚ$;GH/+fl%K)3c jzri7|KywnOs*-w6V>"$ğSߧؚ6IZ@Xm|ZĐb9:i[xgry/;(̯S"Xr0L JXiDZ8p]Sw,|Ukqe1.bB-F>Io exO[ Ā٩OD.OKwVmF Uk$?#Q)|bkrr"O%OVlMN4 BLqoˀo^BKRBubo˫+Q`S]|e//e'b;Cي'̩mMBOzo^7 Ѡ u13FZb 2@0@#y+k\*S?^]eH,:c ;OqӰx %&']Ibl??XTG%k [DM5C2S[M˄f$hMt"5maPmxq= l6.vOv L dA,ZaM*$P<nz>_*RЎfx(ڠd:W(0@ۢDZ% Y6ߥo-~s(q_8 E(Y\"Jdq% -c u*N /$GKmUQGbVaMNtI@fMN`k$9MNbieM%D ec`£bU$y"4L`V$,L!hoHa92WK)C'lE#HG5~Rx C_kIjB 9dfMg6PGj0/");"W2Bi[a^3Q& NZ9a՚d"7HNExOSTjwsݕvC QuZZZ3C-co*-s%nkie,2sݹsVi0QU2eg D]|yeӁi}P >x?)rxv0))+\`b>H #^ճcH8.cOx~@EdLLiygs=K9IS;\OJ~RlF {.(VDB(W'q .{Je?|Hl2%Tx;詌̆!,koL\/=O[}K)#t @BPzɄ:p4 *2} i۰.] 02`>v3W$X.{90iZa0{_JgR~RSDQ\|57t&jMgBV?N5(Q$l#QV!mHtI~)*Æ5T4P]VZW*f+kMl%yWD ! eW1.nsif\#&whrgj.DA!g M+<.ďf+|pϯP&C2(,{+S\/ }"!g)'zWg{U}" qV]_O"!+"NȹcHX,aڰYnL~F/ !Հs}:4S# CO6#&xyl'>ըVJ;DF;j=\}Xg̚?%T 鐼M_"k:$_ ptHS6&'YHs~$ZY$wh1P)g9U$eBZ;%WmMX%??B__:u؀xִx5x[%wH ]SX=i|PiM3t>9 iM}tHާ|t~I7=Qlͩս(f6%Q5_A7 iM#u=5c桇 C8Բ\/EMb^^g1s+[tRcǖ x?Tj Θ'k\'+&wTO0B#;p?>y\?O`Wί@Qq|CTѲT&c1|/ ON@b OqDo[ft뙮Ϟ ^" DwW<B~ʠɅNi\c M4y:"UYj9 XNVǝ̟:xqBw'cd,}9(w& >̨Dǝa@D[O xTL :޲:GV,nL%UF3sG @/9  ݾg=s癮8)=;r+ 8u:Rp\QbS@㸗, 3^a|V M ) u Uݢr []<ĕM<ܪrpprUy`&'ĿH)_w}-}uTVy)_7V5p&4PK<('[gΑܣxdH~=u?Mi-2ƻbQ?\FCnN%<ʊJWg=W=G0.'UY?+|̄+G`eSޢ3>Iյ_h\a?E^@~EAޠzyNmSIX:zQ:a};IQM98~#byƾ9/Rb<|G?ă*e#y,[R/V3{d#: 5*h @1pV4NNCKUo%r?Tˉ$ι￈]TpTt䳢C,=W.>VHhrm}OG^1O7J$L.+Tk8oq)wFC*CZM噜wȶf guU'dZy_ Ik}%Mi]\SVm,5P 4^ơ˾9KM_m.'p[Q LdH[tp~^EcM*XHZN[$55 YqĂ"`.Qu*1}w&W@nPzbU "hfVv0L`ċsU 柋Sq GHH@>r\ | WgAVu:c>qI\P느0 >z]xK8oo逹Ӳ}*Ոa\1UEZS9>wo\0Vʁ!V:t]1JdQ%M>Œ&/4lfYxQb3)К wikǨZ3:-ϣ`U5ʰy`8#|AfI%u|_[r09h`py=VqydH8Q˴.B_T_1@Il;tC5Vϑm 7F';i$e62iP>%a߰&]qwVĴerjPĶf7D<#?xH(hgSJq3!IDc.,K0l/U^o apEwOA' ^%U pt~62C.BC2n@G P@$ *;jpdJ XtTл%Ui1Q*(vcxB2@6R ^Tp5G`G 7C2@JRDU@L(QM4-EUMLԠ/;j(! >)@UirmVL'#q* @ƴ5xdJ .lJ 8/\9~~ sB@ ISSpxp42Bbzb@!&VX1@)UV _9M*b8 01\/Ulw [v^?lJ< ćr)ďo~}Kk}da̚qW̸c9gש(,w%*TGp/f85D%}x"nYffC%tyϵtpVO57H`sR~g"k5Hqv߆1V6؆dDcv;8)y7E1B1l+8mJhr= kQ`U0]0~L^W`;]\9fT\/TETo=WP) z,+Uab+xEE(y= WeP$DC-PNmbW "<<"=SU8%N:Ȝ bXr5]\^$;%w?L䞭a#kr8+9nJ S`$b@\ [ -ڳ[efܠD]$T2tT KD1ˇD 45ŀ>+*$5 b`(D VQجD 蛢R10_'b@"%bqa;oCk^іa2DlC,Dmײ$]Q^n޾u rCآɫQC yIbA(Ҩq<蛕״la({LĀ~OT*U0HԀlsvVpn7ypnyM*՜?[|A)6ߊ+3ie3X^odޚI5dњ f rɋ?Oq@\jM瓂ʚS.F4QL|k:"e2~Qͅ}t:fwfD:CTwt=^uʰʹPH4|V ~ss-9NyU|9/ܣ58ϕ5f$N>39ZQD'O,{!^:̤\.@\^1q*YޗQ ތ   >e$bPMc$rfuqbEZ-Jkz8wĈzu@^0 V/J:1|&yU" (UU)&%aC{xJm1Q"*."qbVU* aE.(*^$Lo)JbWT" |7EP\A!"Q0Y"V" |EvN(%2!D@@6Gw)58P'Y3MU(o$N.Ƴf%Ck&q~prA5]+{k&q.NJeh\S}P0~|a~lJly Og\ 57d0L0.+kL AL"}L?\mrET0_LZ'|^]L25D|Bz8)>y&7 _x][:E7ϲ/|)/{)43"2xK~ZRtlkp~Fz|C,*U+PU?|ZS9?%;Cյ]皟ȫ5`/^6]ѯS dᾢ]Gr7Sc=[#U})7Ą+R(.t䛌|XZ˕m{T'dU,j0䝋]x$o'`='\(Wm.#!N~JSqOIWc-_Au bJgD䊝/hG2Pgᣥߩ8"EЎB{MfP^H--[Z9v75`yIR O8ޫ4HNvj+Z3 k8yH4D3z)6( 3ZYA|7~S]b7tިzӨV/hPmZ FIʚ.$WOƘWAA?JⰣpьQјGSL8 0Ƅڣ9E%L"I퀩@v BaeQtW 5(#b8Hԁт^=!sLP";(uM"HoۻJj}  4_e)7V0|t42!kfU%|?#Ԛ)@ p %%Fp@1=>wL)NeM^x@G[ 7PLhK%Qk$B@S p2߾[}oڳS;=Jv M v5టX@KNQ?,w]= H. JO%;ف+@:{DUrqʄb҃73H4b-QgʦOG6vwdLژڀgZ5=Bg L+Ɏ5SlmD?9FQɫx/3x?;=q$r{UarBxOLdM [ x[AP^c)/w-Ppxfc:f¡a0ɤ؄| eue -kQQ]T( ;=NxPx+X0)UV  < - s,wCZTЬĢ5!_اMcS!bd7O;/O./vb>7zșxV 3hșm%B[㲢V9M$"L*Cia<5f(UeXCacx̡4n{A+ yNtq8&~58hx2&Ux0qW\E Wz(h47^V=ވ0,kqZ5SѠ"ѤIĚ)$9Q5S8Rpx%TN5O'}L/ /jWej*x1碉?_cBpTAuq{јoG+e+2la `r 8~\9(]<rsϪ`5.3oV22yF( #(K0j̚א`V) ~S)LH%14ՙuE FW4MU!I,LQ-+M'$[cI,mʬ?h%_<鰥KMXXڔٵ_j|e5R*k]Guآsv`$Nky4ߪiϤ[(gEUB lNR`I*rǸqMJ} ǫ,(_`$)@;NPx‰rIl@PBA(,P[ u?zk|BT0]H"bGB@|k +gD_A࿠[-r@N̅& 08aՄ^k08W<ՒEx\z8{Wf_[p-Si(f-3A |uQbkW ~Մ J|]/ЮZԀkDf^t=f7 "뢠!. ]58F0Tc ;ޠd8aNjLDB],R'Sհ_${,*⊭jBWN9:Qٷf56-/#B$l˲^6W"|mMȧ<-Pi<_-(sJ  &E6B<+ƕ3HJzBM p6< MR.~MXy]/n<87E$ e'?S@م(WMd=bD=a$D}ؼmsS΃Y΃oWI11AsdЗDUB ݄F5d'ze _uLoW=Yp ˝mrUPq"O_RlD/ʍ)eG^LoTOWzq;B6N3(XddRcI:K2YP]8]ꢠ /5Q@ R#]ꉂ2c8cK΃Ӡs&)f FjPECmy^}];eP4|O ~Trqal?J`k7[UWKb\-sؗŕ:M!%y]tqo;ʛ)k:8Ug@3+\6Ϻ2DO Ey5+ N2,mh>/k|2h)=*f7_Mϐ0FO@Mp]1 kƃq|UqTGOh Q{<.K咯xȴJS7RTY?W|.a|>Qoni< SDfg7?3=>>nW.W+g\b³:>EUd:J]$./~}Ou*>L [S@TLYNJVzHv6Pqkd4-u u2Vk"So k"ˢ+>#V׈Lآ2 uT"XOX\vr`KrQ5e*,o+ /'"A/^NM;i@*Ӗp#ݟcwfW<1Cܾl \b)ECd׊[ugVg+wE2t~Wf?ח]smch sʼ sBL(% tKy5u_$2Ueu^o*II{ 7ߜo#iiO)xԓh xL$ji1K R11DQ~s4W3}abLOxo> k)?2agg'1M>xFYH3謙KѬ9.4^Y\tjkd}zd .4}B7<^--2=\ -(jKMXuE8G ,<+nWy֒d[#AJ6~)jrL9s˧t1Nf-\(qW"QPF( F&FMT$ &'cOZM|H<`DAV4_H8 ?w0 Cc7`<,\빁5ߴ7ZdbJ(V_ǢT-W,J%bMRʏJP[0< !/} ;bXrGj qW]Ɠ yJ +<eU*uƉܸGwe[^9M[>as*Nmͪ?Q,$(w k@X!A˱d' sX|qwpx %"YųMbҀ7\b†ѐz]dĔ{=Dޠ '24o4l|ȤX) MrYa0>Hv(?Y}ô?cjԿ5VuP~Ef#@ڠB@5kpRMOZf %0,i6tqb{j7ޥpd-[_@|7~syKrŽn5?h_'<~pV rEeq$KE层 <+xp">Q 臑rEh )EY_)VYx?  Lވ0CsZVa`xlk&pTT/gh7-Қ T]G^0|W7_B=ss >UX iHF 2I$Q,Ʒ|4MC~zI AEAh]1 j7LW7e Q0 WpHR,\CeeM'72 `LJ&Or$cMgbim>7tp&lm@#ۚ T]W fIR qy4r5G}T /ge6-m:b@OQr*o~p%V1!io?O->"4C[%M3ǂ!6H{q'j3)Ȋ/>JM%8_G~_B.*|~>> [RJ8jo"O`anXyS sIJcqY \l+o*qsĄV*> CJm>勠l$O(c3 CԈ\#*p$ - {m! P#W4엨TsN&lÙ^biWĚq%OM~bj\/3bj[[hpV s͘9ы4.?+hlxl쫤#N{B5])Í-spM%!!UPsHJC{!>/;)Oe zx) +JeSS+ޖ._W Bcgvr3 0ɼ(DH)!?H$H:eM*9m8Ώؼ^DzH:_.9(v 9utCZ3Umߌtq&}3%J/k:TI^y&Z}ɞCa+ Rۚ.E͡doUݶ Apo&gև(P&Gicbl%BYySԳ5<赕crFl-?^/0.(9XCLQܫ #$Jez*j텶GCFf2}AzLͯ)mnThr _)<_}b &MF8) Jq֌kq@4yc yؖ ]LГ25y|mm9 \pbP~Q$nㅿ58&ōV-JM5&vp~P152>4f[\X׫m0In%WO+/W;2QqU'iöi2(k\D0R.qpxiqnbkl5]8 .<~FK~rW 熑,m$% )+AӈIvXu;f҈~˿n_SowP {7åPi uhlc]3),d˖.ƛS$(ޏZEۢY"HײQe_Al)5SVAT<|Ť"=V Tˎ)k b5L] l"oe/ELX}fX".\3FՆq$aj хa$Cy"^7T>]FwZ|^7](s믝/Y &o4_^ݪ?+.(s?V8?_ry) v6nk~ נ7SP1P1Bњv\0.Ś6cF{O-`O,x@m=&xĈKyf*o&MXszȜz\&k ~A)&OkTmN< <-•"#KJ$ĂGywDRki$7 [`vӒzL~ɸzSJ1\4-$dϿ [O5u$|x߭௄]4 v 搫.ba(fS4PhɯbM‰@ZЗKHUI_T" }v``2w<~ ͟{5OIc9| Mp81ox^M&pkpqjL85ǭMpq٧]dw/ư4'ʇO^~:h2S_?0P)z<#:}Rۋ?`&|w 6 1[29bw ^^ QVSZ MUbo? p|4I:h'iTn,|5J151[swCRIҸ?_XdB;zx.pgoVݪFR]p϶ـaJa4ߣ]c/2X(%^-Fb6"wJcQ(p, H>^X~NUߕE|7|'( $dZ.shb 4 ֊6ZƬneO+L8;}UQ/N|ZOVz^,l.cak(h%77ZYj`J8 }8 ĿͯN셼ObNW?)q!²lmY=e ?}İ%+Qtm[akZN8q|+ 7zl#86RU(?mþ>?TG[%T(N {K<>`y0~C _*)sv 5m5uW#,B. X+`U'%Qȩb`;a꾲%,+}5]>Y&%1w{&o71`TQ.Ѱ* ֑3s"5Prs`<~ "1~Y\Q(:c-#Eg`N j$j9GWrw^->C9ߥYGUEh f kŁuDt00m,[|;wn& a.GUN~C=aצ =/$#dxIu"k,:>aZgAl2 i zZ\뉰9"˟v#"C4*ZmhA=£4 FQhQVD_cI\;_xȶ0!O$Fy,$xE`?&Iؚ{h@tϪ*׌Ԑ9 ~;``ޭִR~/d%si Nȩ 5^YG ֈi0A(/d$vF)}A.X|E5šYRbߤK&&,%!ĦY L˜bu((B k/AT:ȫ$:*,u:Q/` yĘ*y.@.GQXK;P Ε͚RY?`0W"uDsLy n!k)\0&2 j>P|o׹ִI.q+I²l2ypùOWI%UV=FexCG)ݼAMsSE\X$䷔sl+%-]*. 4EzJw)z&9G]NK]fBkx` $@sevԄnwaid@Y'øV^)XZ+"A9f}袑K%7S25'z*©vuMuKBL $&WA\&WG WfPhTAJ7VeW u<Ir aI菉Ķ29 fy!,斣6s첌w9N0 wC|pG+g\'0c*:YbMfKzXnG 3 ngH)Ėg~) vuB\2/v-嫗qlٻa,lɞRn<+"yʴ w6U-eIxtO`fj :G_bߓصβ a_-uR .>\.`O) NPK)] 2$v셗Zgݿ R7\59Gޯ' [3DШl! a&2b7W15Ǜd\j34kkZ'ݷ.2T+gNTsK7WN F!phl#aiv E&9)rwL#;elӕ|x0LpNNF!*X^Y֫jB vZ?PXZ~miW]H}lӀM/R~sPAo/eK+ޯH83 #~'$5&*`]ca'ėo"vb*3%i1ޕT-΋%q}9WApۇc$]Wdey%ҟTcmد\5m)2f61Ӯ׸eI*.nۥ)_N o KKm q~IJ׋6:-|F'[)n14Y%?EEvȓ{"|"W%dUN@&'Qv̓=Tdg|rT !=-$,;"ۘR$֡V䵤Nr<&|fB1iD@ IaʚAL19w`9EAL|AS]6D?_i33!)F~I.Hrs^r v l۽D1yQ~P! j~1Jr>,\I<1JViYi,rSihki 0¸E6MDtP !\:z!ּ9IubMĘ>R81EL0"hLƐ >C/m [ ƚ 9ʚs(bDbZ[7DgL;bkh ɉ:y7+ۅ(3rB8 u^}fb ӣh0øTalIBPk]&Fhu+N-ښ~NXz8zn~y. ر`k rubF ٿYڬ$6kDn:LIjnwpuO~Jυr0+,wzs Ri`la~jp~z1]p,_dpOPҦgƔ˜RS4ij;UFy`fc s,!׌%yMrnS w_0%b,Am oM +xYkBUˊVEݧr\We a(L/2شH z5j(-[6æEbشH {g5H cvKi*cѤ㪄 [ q_%>#cⱗqjHM4$oI:_W6MњAZ[$L˜yϼ5 b/ڧ/i/5ts5wa ? $UӅ@y p!ɸu֭uo֜skD槦QHd5-JD`=ANQ^hޭ,с$Ha?oC~(ǝ-a{ҽg㼍Ef59$*jv, [4.4*Iبm$Vؚ6A^1ZӞ+׽Uؚ\RlM{ĉg5"-`;gM 2p Sf'f Eb ʼl6Sމmq/O:JQkZv~,-ûuEɸ08g|W2\w^5P@  ζ"}GXl^~놨l"¼}bW QqV jG T>my4l ]XhV;T6^+H­{ }׷*QbvCTԻI2\"ɪVوY*|}0lJ4zxm(Nr#%uV>L!x^ `@•jΙ!nUhx7auI uQ,8I M)TxSQS?ёw(Wjd|InV`Hͻ6->!\.4p1)U^:^.paњ|{jS &|FS]4qت(]\L Z%[nr+<Ȑl>:Xp$U-[!jNִtwR։'!I4  EvH9'@J$`&-Ȝhj(ȋe\[ʊ &ϞU@Ӭ/ !yVffoI5-?+5Dj6DBVVLPNbw+l{aS^hHHU)Uj zʂ9o0ܾ-иׇFvVƊ#pjl )&tR<,ۚո.*=ۨ=]+w6[9©9=R*ŝݳ|Q70O<I^J2%!XC8f^ %hfl E09{b-Я _;G=a׺ NymnVTdAQʝnc<<=@'70#0>f yYaaY,qNlPߕj]{,ª '"3G P;Ws_8<&̰~DpH`<K`ZnYCչ]vc_){| Zq{J`PMN=%qa~bAZ5m: Mhc8S|/;诊ĹU&2찷{ W6<:5-̋Q?J1,gQʷؼqİ%:v ~:mY$ YB~T9:/bE'}w"U>@\Pҁ}Fn0%8j%y$!``<5aˤ;?"ao ]ysG)Ya0qt㷆3ZϮ NEӤ%VȚ$x0' r$$p$4f ]9;N`ب5UkU[C-i^9]mȃŤnO󰻛i^\ꀱ># 6Pr89Q:w:X 㽌؊ Μ0bW'62zJ*Fv$pvM6!4y]mŤ.*ƖH~ljϠQ뇭\]w^,‡|o!VJ7׃~@!ç@\Pҁ}Fn\4pتR`2JH[IP%s$azȆ xՈFBѠwE+.h0.&|4f[tkԒ>>&@`BbG.4f7W_ oд}&4LzΗ/Wkr>xdM (5EZxS`Uo" ;]paUJZ^ZE ~S g.LaDTa SWhS kki.;N..rF0E+ vYD["ސ"Hf]$ GE9ሖ MC >"ƀaV\5<8! Mf&%lJ=.%kVyHP8b(Q1"S]4D`A,>EޣN>I[3HIg7D%ky\Ţh&QԷW MS~w!gdC]oT<@f{pak.2Ki0,QE@l-ؚ I"X ½f ̎8liߊp!H%6ZPuK^& ]A{,W_VdQX;o5g;4 KeN򮐤=EVwrCZ n XӆI&J7L DϊzWW jhX"xb)4`, gC;~&ƖH,8bP< }n,q)Fp^)yU<$\stdBؖI_Yu"n̠U+hkP+krkY~-#Uo6cC4,2h'>􇔟绥:"a[dѡ9 >47QK !~/7C_$W7>vNw5 i!:4_Ç6@ W?A 4G1"fVO@ssB:fY=`Ao:Ƞɠ/ L|\(75&:4UwBdÜִ,~+k>,y(، TyhJÅ?yXϯ5CQʋ&$Xxbwt.$@wJR)cn\kÆCWq- K&V,%9PJ>V6ns썂SD1Q6T$3Mk8|`<5My5"u:yqQ` *fNM(`^ 15'>ĎX-F. (g 0V3JfA 9 0wھl2e+:Ρ6=yYƆHeLW~ýQnW;!%XtMp>J&j&U5+ײ,ُ 08sfsϕkuϽT㈬YD:hAhyiF汊tktP kZ4C 4A\. q8B~VUK!oP[qYX7Sr|N9%O?౟kO>Νp)BS U3:;So斔G rsHJK^5n0VLkZ/ǃJ.F**Iu'\XNϧX&=&_=n5O kJ՜ k4*NSEUj+{IJ aFjl^z:FYh3q7Ifp|<2,sܓ{ڄ(EW%,6H>2,"KyP9<6-ҵ}K?cw~^)t2=l7``pS֨\3k0 tW.kؚ((d'YȢA?[@4uto߫>RަT% 7)okZ(  b5vY3D+jSLKh$ I´ 5kQYqqM$u+ ʱ[ERbKe7AšX-Tn X 55pbXs'A+7EX$Cf̘݌>fE^x):]i܍eCNRE=^8 .^iJʎ Z) Ϳ^%Ijݹ GtY 6/i؂8#R˗WBi_v\8vkDkQh.c1Xc fEy竺N0Ç蘀!5|&qeD}߷3[ qŬY73EMt ;*+IY᠄` szNOpSSSO=yJŨ|9s51v[)Mmjc߬6L$"*#k. W # g:.|sƷ['L'5]@p 4ϴKbZAqbZL5$L.a&½9.S/2_#`v.REo4`UCu;*Ulƛ;ъ0*;Meõ3Wb9N!1 CzwWdozw@ J]V+=KM/20^ [Uג#2>ŹokfXG3y1>+jwmf ?&uGhBcPHmTp{1X Spe*5_P T4kO!ϐ"{xb`XMxP1ɚ h?2.pP)ԆW9%08ܩJ4H..*{(6nɐ,^UZgkv'J)@yYй6"վv9*Ϫ#U88 6 %PP\e]no+JS~V'}Ҡ 1d{צ9_2h%`udrܓ_(:`0\3`"$$;+ȏD 3,5tǜra^'jrdlv1%c*YC[YW1Z-58yښkUoK gf^yt%v22T"xJʸ/%:5&*@Ò@MT6l_JPu 7K,d{w(m~^~:w7OA/^d2^J'*@!2SaMْy@6BV..V\iUə)O„Z ~I-@aĚm@ae!`/(+ A[v{::PX6s[J |? CTka@iɯpzW o^dB!M.Eߴ |Nj(0"gO F%ᆆF~Ex*C8Ȫn42; º³"@5]+Ղpq / b"Ų^vb*I{P<8K^*¿MB"@xWp+1/UQ%K‡Ecm g4#"@جF "ڰgES; -6*R6 .  P*>$RzьEP s+ŭ4S7Ȼ[kL2їטwqJq~N:Wk:5pw/^?~ 5n Ud|Md&Ą"W2}P _l=bL\.dEɯ^dஈh7m/2p {d-'ssS5]yc h.=p498 UU?Ԕb(,SKQGZJbK/7+X ڿ(Qiɗ\9! 9=bذkC?CnQJ_/sЙ߷p3P0P#(};ݪ9?ygJoM:%)5@F#vcM'W¿b+`($ܒ}MH, 'jfvrd+3՗ 0mKۋccliQu#q?µeƸ\F1]L)J'wkgCɗx$XJf y)&c;H2DꄿC.6Toq{s? ާUz:/wmdh/vq]6zXLMy/G.G||#qr8I cK}"{xf0`kz*JBzK٢/XF Y>\Mgm8ч,YF\@fS/Qs0cD)sm;x+\K (ǧ-t.WyQGZ=AgM̓:`IjSu*ݾ Ur0Qhu|u DM-ҿP(.N'1`1XAK{/w[^+̈́!Fҟ7Kj뱠b;kJ@ۢF]Q#Ia0i jnAqoAZSmŶ(mA*N.ܞ0\ S?"y?E1o"5r k6%bͰ[Қ)X wc&90p8tz4N JCX3+ȻXAR歭TOT`9+6MT~hsByYz u9Sʕ"CS<`~U'Nn”1ˏzlZtX:7kGZя׮!*@2w.tXG-n]b르%f9{.]b#2%8|g .1՗(#2wMԆ~VeY˚wпDy:1D,REw 1KXjQ>.?a׹5ϾtS..ߚq,]^JkcvA+bpxhRbP̃TVͮ8f9}.Oe<óPATjeLٱb DkY.[iU%<]bkdXvYV.t1Fv?t{d .1˪՗X,` ~5K,x,V_b#2%8ekdXvYVĂGeˏ.Ǚ.~AYjV\j&m{;,<ڀy!dB;mڸH@\ǎ%No2nHחr@[xiym)O,N6ۄ;>Sku`(`mT*ic-ĄaSҗ4aTtg 1u ?!۔p.6  4aL4MG5|5 ;_U{(k#Q(b ƐΗ$q trc-ӖC ڞb7>B,/ʖf^ht9%8F. Rܳ,R; k59S1r$R^tRf2ڪm`d&U `'ºr]*6]~.}Na1Q v.чdz*w>/o]1YE`_(=T./=gʅp.P,o^޴yJKrTP |%;ƙEWmjMqD3 6,joyƩ %ט{3ߞ(#oBa ,[^@fSw9/rU›O GtL۳J3`^LHtT|^g9µ Im{Z8-7DN{Gf 1 c)L"%+"c`f䛊 {"C +b-EP<eu=k4pq?^i.0cAǹ9\srp)D[3H*c&`'h9ʆ8k"ͽs $fw`$#5\~~|P. g, cw,%y$}[ ,$vc,QZӟ խ9A.T9=xGeȻ88󄫓bz(2KP&8ufTpkIi:Ȥ`MߚY@zcɚl [M6`, vx@.zH8'xZ{Epƶ0ų9fSFqq_l>[;*/-@P'x 5ݚFj9R,e%Z*'|GrBRpc(0yKH~XCCցɃchp`783Z< ꭫k>8Π:5[B|2yj'JUTf 1;n6G=8ewqQQ05ym*6TJ-\a]eX61nIup c6ZMmp nCש*j `Cx&T F0]Y]=S*K>Q5EVWd{F ?.ӡr|\9|H13_ '&+J"uyۍ; OP_N|nʐUdۄJeyN#zoW(.!@}Q\JdJ I>oròhM'^&fY&RdlYKuzwrYwqDNOhkc Ze{'|U^e_o:EA(^,Ej 13CpŽfV5/%b)YHqk)?xGF2#)+L"F"zU#,*$YbGyI/``#|1"Ÿ4EUิf #YM7u,&iį kVzm}d8늻EF4'\޳ ?wÀFRt1{W*z>lZ셳ަx) zz.`:tqqcTxSM"@@# <`5j DAM#[O0ryC9"~%(k5QHs.Gi,BkaL*,ŐX q*knRcf fH44CϽpX0ptdUGi>2ř`U{J6Z;ޚ)QV5:*';!ʛn6&vf,lNQ*ܰx!5>9"}PIq43MPc&gwE &Mִi4KL7?Qɯ~|GM- -E.tnTfJRʏwq]}(hm EnUV,b1=S5= 5fkKT415RFmg~hbq|k^f `|>31xG>{,Uj֜xG Zs> M֚@53 #XgE([W0U՚ iuFp+9E'PXE"o7k7jRtehf4Rc&;Yzys8Vb05yR囿3?bzSw$6UuYQnu?7BRP~0>cxCb,ѭ1|g@&DA25@NB[$7Rwq("Z3Ef0SĮgk:,r_ޡK,+O I<>xŻ6Hkmsr[($#{1ZkzL\x*K Jڃ S2bOn,޴ȋKwX[4{/$◻̫N ((?JY  wkLMt;}E;iZL'μ%eH!Kwm8[1jAaL{ Lەݴ9臱 "/Aչa:MyזhYE1#HC>qa:X3'Bc4]4%]rg7GZ |@tjG*6a(]6M[!0|Nɚ>)Hջ81V+^N@\o4]d`zwm%(."L}~NF*2{jLTsט@Hm7ɪ%zpś[.c2UMɫ5hu;R[<9~aME=q,&.w:c}I(/ҹFńً'8)1H"l[M]P/$%RK.PP."] +Px/,zGXځI- 3_W}{ O0ՑtP|R_ 1tMHG6חs !Ckג BFQ'=9N1P}.Yݖʐ`(!y(į 3 m[XY ݢ*sG-tGjA'~o=o4= =n(s."uUmANL {=CԆ`rTWQe)ߜ-t)E-t)z1Kf+o3 #B`x$B`CY\6M~/KKrq6X{q/[Y3 H*]X3 Hk7]RKy# f{.u0lDq߷J[?D{uSe IWԹ~R<'No9Sp;‘@=S*&K"5%RC$kDhʥ5dgA8^yhp<]ZfEjZB 6Ќ;پ SW4dѤGQ#)Й<M/3hM.oMpPnз!k, bM#[YY3 ͭK1b 9Mszd~!UNwUxEʑҫG00# ,T*k:~ivCI jkuH $ue '4p2='@Q+z2Oz 0hSVzM7ˉ''W 0{{uН4yXyq~ÌYtU1HQSb)\gM)31?b#Kޣz6y;~W U _~RH+!:s._lܕTd}U-b@-4¿/ʡԬ',Tpw()tٳhO25fyTKTuYbWYG,"z$Z,yT^"k+kK%wm,lHlcts7,^QƱ`nH0,  o"0*u}@ Ixy3Ey[˚. :_ˀT$5Ӏ(vj)9Dژy<;75{P}a[nniB ``MTQi8=m?j[͂X;CF,ͭT(vؗ)H̚" Ucr5ޙ"r@&́XoNMj@xO[E[WX"zӴ`f03>&DsKܙ"I7J-"K{T~-xNLWz:R"ut_n\-E6uu̥ l2Nt: '0K.V}\,\'1!sEICRo~gw5S2,x@̉yh Y IE߬sOq@bfRh?;H]T?ҀI־R#WTC*+PSR6ӝjvZt7gTdMp|$x!UkP,`8 =ы \&4-HQt]&kӟI5=@axwuOC`Q DD/@z8l句 ~[d' LmԱ,@*?[x%N6p[ut/:K.ln"pq?{צ%D[{7L̄`Dz.Hė DENBVvS`NQ(0POR1H' oSG. sEFu_PSU+V}Ev:FH͝w (aJfU,ʈwO\qUYVI;+;=Y|zkãZb\DaM˘oM, 7]nы૗$xjP+S4YBw5.</,202iG\T4pN:9U KLvw7,20w2i5Uu7km|,S۷ƁRE΂rU`M1wW>؞t==nb?)5ϓT>hnx7[@](mjńIk8N9_UZ6qD`uu[I?g'w.o[ַrlN9gC@r%.MkTny9_u#t Q2/AmE_9ۄ/A*嗵$/)Q~o#_r{q8d+mW-o⋌ ~6jos9P1Yٍ녗\O;?/c[˟_\T4#\o3māGr%)\G߷u^E#g|&_v;w8poW_(ķ:Ej}7h/Xe54 EM{ѓD>ٵd 9$P(+M9̝@_hm B|A~$[+䞤9D(ܸT^ w. :jo!+9' MQ6>"B ҄pV?l%_"ˆ|A" OlMD}@䒳j^||乧|g}Yx&s|HHg&TcT9;?" JYH&.C%$1\oNʭN,+7 ȘEֽLZG4?DYܫ> K?/W0g}@!r6\BDΆV<_+;;bGwUl8QWդt6Pw( o>YL"K*RΆO\ ),y23g + "PgKlKNՊe$!! I5* 'uf(T%Ģ{̓`I~a߯,B$4x3by|̈́=k _ ˟(mNik,0hkΩiVn_r`qk }.*q4d7c MK3ַ B}|g dI1n )w6>&" T\MlT=ꌛ^S$錜.USFNوmA/.O?)}|g+^+;]#9 fꗜNSCTKX_sQnjN>2p6P/2-(j_QuE#9E1s6Aqr~'w:[Xh#z aTT;qY 3(-pW*8 {D` L93}k2  RYc vdQ: u:(v:%;h0cip1a?zsܥ4πO iK Ru0/\{` .^3}G _(¤sʅF.)CJl>oY6};t NCVY8 eʯ*&yóS}@50)9"Pg*)i&ܕ0*~󄡟)Ơ+E<鋻tLƊ$TytB#Z~s!?)BpgƘbQ|wo`( "POCe @job#;ЏO`|2֯-=].E~Z$ cO҂BY7K܍(H H}d?!$g VeS^Wwxda FJkOa4X,Uw ʪ2NcC°6P(19IFrʾ4EN: jiOq!Q6~&~;K ۍ % ,paYIƳBɥyjBo6*_(/yds¯ig 3Ζy>cnI~tqwۅnUu;O}u ::8N=Q@|U=PY^e՜u{`H|{0E7Q& KHC< -W#xyAYR%)yyi ):Q,IZfXJBU+Td)+b3Z* >$Gh!yHY#CB  %Yi3 OKL,U,K $yD5.S)%!%9t'qv^?%[$l'y.Y$Q1QXdxJB)הdR8ÐP§̬,ɡNf8G E<%yJ0r6wSMHbB M&b%!yˀTcxfל-x l8/~ _G\h0%BG4`.Bπrѷ 0NY. 7or& PRq G=jU _|+ZʇqԴD{2}~)D &1%Y))$D[;KiYIhi)-)IL~6-Ғ̐D ğٴ#' )  C=H_){),G P"ށ$~$/bWJKJ2=_ eӒ< drhRR%RfX-KI7$.eG?,IQm2$ҲɬDZ$3bHIpbtd-)ٲ eg~;[E`|RJ6 hΒuUQKIJHWhZSMHD5RPhbU1[ wO*@V-0gE q6DS9y΃ 8MCˑyi n0 рKp5(c\:00L@GQlvYgk>_TvYg+(BZW HIP0OIP(yl+۳vvh$ oKa'Y7f+KҢp$Ops{t61Hhm[!eq~);q%fs&փ3Ksm? gmC1eWHAH_BogFMyUTg  r|g ,  Klpin 8|+ &zX$[&RhU/Bolo" U}T/ltm.vRlL_p6KπQqpX>` NDoo[%D~Av6A3 TTJݛaA|)E:pO=U{\$ʃ7W;׌k %(TZo/4%ZjHpGNT\`,]vX<蔥˦ZKt(ݣOUW>[~YR.sܑSSjR $+ڶYOR@kɚภ0LII!UlKa "8JOdȯ3T8N; .U0]hu'lK - *@. - xR.lq,Ӕ$g"=`Dh ;lfXIPqV,k)4(!%a Kf f`>Y&k=gM8Ze9 ˈlXsҏy)to_|g ^8?N\(zR}I87j3XTilH> .Uvl!@e fȌV)R~ibc,JBg?"yR dkɺxP$YV)8x*Ζ_ro0Ke;[Fo ܹ~Lڠ+>IXpϼVU}&F~OjBπ;Ze{W [0 vDfFu :4H%34'Nq_r)h^%U)~(H G9{j*ٱBgh^1fgC@jB3A2Yi rW# `_v2S73:e??@~TR rO8uZ)ʧԁHvH)Ep46նC. ·@*p;ѿZqΖY-L3:u6J\ll[!/kcJ*&\Ԍ9>&8 dC#`Gr(쐆&_ņ}6١l`*ajP!>婲,$;l/j /_J+eMI/THqdG ;_K 9$3xP :p> 6`mn+!^ ⫟ 2 $`E$:$n[{~jD6«R8g• z v4œeuo|Z#v O>AT-N:ԌA5x4YFbT(T/xQ/sg#bʽW$,0!uh߫{RO @lH-e09b  (p">RTa8r *o][A}ՖHP4+՞|Ioě6kBb@^7v i2qE! O*"F1IlWa \'H\QTȮbrUGjb،6.GMǷo1Ytsԩ=Wvx}XAqT㤍 dSACΈ8{:5gy|gO T>lV}rhofg]lڃR̼_uPqK%01dcnk2D4m GNqMmX>fǠ? /_؜Ti!Ȇ5 ú14HiޚE&=ԑvj mipH:+q{wzDܽIp u݁z#c4 q1"A )\j;)PEv HfWA9U@EH0i Š!ŁYH\3l޳严vIIppS G;9P⏻ʆ_Ї1۰౤:~\(p8jR|p R4C^H[& _ :.s9,k~`85A֐[r- _ %ggFDe!M*Wn }.eZa.T+lѕkX%p6HegHyNΆǤ ?0\ܜce/KM)X#쭠$8=(r% ȴ_Wfh"ԾO;HHcԧ㘪ܣbSipb f0[*f̩C }{o):8f3C؍ȏ'^{ngu6|/|GҫA@°;hM>0~~DeYʞ!EȂ(L@l9%ɂku0b(!r k#` m#BS w0 ElADTK$bm5yyr+nu[+i":QߒUa݉֝\;:Kw+IQa#)a#/.p!]Ᏹ޺nc^*\$CcR_|T'0 'EEÅ Eʌ037zgGh[f yrH4*jCpA=iGxlpY3 u&/YK&KvIIFpKÆqpYKذ`$NNrJ ȳfjG|g}@9^dppiv :׷wҙ2&0@*@>+ &r6V$8, * 6{?&.{uV\!M)lR` ܎ &$M;pV2SJEhF*IF*iw+2"mu#͘Um&E3r0$C%74A9XHZEUJ9[|[G n:l/@-NI}aXx73xssa~wˆ02IB\ۇOY)~-199zS$piN8¥TaCwQsd=FZajaS~@+,]X`ߔhg¢c $٨ؐW?y3[ s-'!J43b ட4œqsV~!m \X)d)$8mM0;òZ8L??M%Ylr ʘnGzHd] mƯl|60g1L&ܧ g $&[P"ܷo;LJlOۋi|dL3pk{$ɦ)4<,D1 5.̖l{epdG'ډ "r kaL [2I(Pt2I;RE0fs2 ̵Ά,>}*C.dlŠ7P˯R6~Daɜ`W(6yZRSBiY .Myk/+ l~&6l/$>%8D_LUp!kV3܂Hb(1j:#qD9kνu57F bP$^l1 *qX}]ugG:{6koo)؜ kW:>P𡹔dۈY(c}Kƽ\s p:OF"kr1s["b  U5Njz7fnTXHy}ξ:A ' &1sDy$Saa$<>-ğ$vl_3vUM ɤHmlZ?-D3F5: У6`ۖ+Oh i>$(ܰviinBZl,'M* i"R64`!箻ds `èwvި^?G)F@v3B 1izH e'W>93Xu|V8M m\)mBQ|F! Ź .$ n?SrUj{y޼Z6bZ(OYQh@c7* JlAix |h@c hW;#|]e[1Q9N-aF5yL q`l q\Ft*' *`͂1[CgFkߢ u|M *]ⰱz2'*tN@g?v2?Oq1zZ * 1P@_׻CT~m$&2eR6ټsrq۶W*U6>O"n r:m|h hP]|V_nr;pCc%?Q/W0Eb9B͸z x ʂ4<*񍞟~-UjeUg {g.ؼdt( n6)#bp"ucjAE}\zJZx&e=XG3xinJﲗgB{)="*,\Di^G#^ϋޑHaǑQ(|+Br7x9Q`jc s^6_*8?٘71GWXGEiDnu0VrcálstcN0! rcCs&`S:i%#U٠mw,tmQ`9JFAs{nW^R,V0Nu>XK , ;E,ieOf# =cJY/tj}IrD[09"}2m^F1!J_Y\wHS^}Wh" EvU-X PIs->\hݰKx{\ 0W~6![ 0W{ҵЍ G+dGa ^yX[?4C)5sBK;,hT-ϣ3KKZyWov>tnmmӧiC:8Qx4E6 Lkws%AEDZVS IZS^DpxyPYa9[jO+s [(]v8p%j(rC[esp~\kjIۀkbR) I [rˑX)nCkW}Ef?u7Rn̩>9+9)8``aі"-_sP1X劚¸\P^$JqмT:8.`'9DAByY]3H|uha{:s H J "0I q Da FJHJc HSGJ\)0R Xˌ MS6043C ,{ ;)5Ƒ:UԧcnPa0Re,3O5cwK3qм8h枇*-Kֱ@CQP^Ek7ҽ8e0];l0Rud6 )DKf6V;kb* H͵#X8ޟ6*.eʤ+tn@RV¨/9UZf4VVlH\6`b[C)&1GhPHo J6]!f.^1H6\Q x"%mUR}zLkI*TWe)ܒURx RZmѺ#۹#p' .$'&Q^$T)jr޽mK#i)|AkW,Rp4yaB!O2ʳ D7_WSt͸h5R|7WآMRab$Z qO X<1]z]4eh`O!@g:ԻC'0([KBsx[tUPﶌ4ǽ=l9#gr5TmwD;`-,纨Dy&JQ,<&"1lȵW;P0ILZQO( InE ~@ QT٬Ɖic= *  nW#nʆ0L]Lmn[ˡ􂶯IM 1&:)蟔-Uv?8DNn+@,dAsD`)=A!. "Â,yuf#j,/6Qa5 DYY\j v<nEA@{Y+dArKC2DA+d 2s$j}{˪С إJ9|(eRd^.T*XDJ2/-NN`nטp?0{68Eq[㾩ˊ$f2=Or&n{N]}z] ur+0F#'JKҶʋGp[`rI#icX  *V(X[v#isFrmC@Œ7?^ v47Zv:Rٻ5uu +t[ 5c<:WKdǗY!!#oUkx؂卒X8)*Мޓ_8N@sj~̠yHy6q=-]kaFG8Z m͙%|cp zV/T\* Gq%-X跷{mᑷPP5eC w SmLCf^ܶy#.YrD-S 1XZۚXK-L)"QIX CXxt-<ʌ巛+c 0ƺ]*)S&Kj c7R#DS@v H mter [kY]\Vm/t7 ǻEX.餼j  Zx)|<-worBQa鈄2 '_'THa.t(xnIs yHyuhp7Oҡ`mۃDyd{0OiH ]QYc%-`))Wb3*nP?&0zz [d|q<)/uZԢ[ /i–\?;[z Jc{P {P/ th\Д:زwX:4 { vo4mxsj96"-0 .$qa  =)@ (CPH[X0[GL*1nǨ 0P;) >EnHWMv#V ֕ xxZY<^5>G;tZ$;>n @Zp1H*Ven#cH*VI*Ҡœ{a- ˻S0 $w{T撍nk?1G>,R{ ?`uI6|X c~'%\n`vB]̄zE^: ArX00Zn[@ z&tgj[au7"i-z+ۏyJ'f:,f#m#%%`.sH[ H[O˪~jn0FmOF:g;G|c)aEMbofY$-sAlNN#,UN 'ɲHꟿ[wm .^IPۘc8*1ncI*5~T$q)iҶvm 5~$m~mohTmK~mEiC_GJH#~JD,`A"K *h*w3ӡԻ`aanf1aǺ,.N06' E#1`3B?#-Fɍ'8rmVJz41O5sXXAvV7i4ٺm,zBI[i3 ;~$m.q*n+@DRغGVXEڒj7?ƭ;DsY `!U-`9I<- R_[Wq>wE!C زTlIFObzr=wH1qʢKyw`s: ;C U,Wɹ-;Et 3Ja8864u7E4V7ol& }țPF,T8Rz)>if)oRV?mQH _I=X͋ xHq* bMəR[ 3je<ݔtr׎mLcWdȏꑿLM"c>k=|wnY) xtvŕlʬ)M=7JQPnJrObpJ)+#y:eJ4T:p*iinJ 7bn.j+l#.?%mt+ŕote ((N7%'1=;ϩUX~*-tp-|w %GSln>wh f)-/t&}p~4`<݆&#&cݓo^`;twHXmμ9⮛_8&~&F5MH FQr'dcےߏ#ߊ/zW@+N%Ct8TIFt`X{pI!e ߬o '$$X5˜c>GȖ),蝩' }Z:@ź*?8o{RiatDA,Y@t@}S|ʾ>^RóE퍔?ʶ_ݛ y rQ!m0>/IE@ 0FPafB`BX!..`ƀxCptPPtɬڻ!:kwjY_{BM܈@- jn/4wjw7= lwJ366E $;Κ.DYŇ9lpa)a< *1UJm_cQ7B/\!3.5G=(>cUvWONhpYU!eΩx<`CbqYNϚ珕XAčCnt }ܲ pP,n9 ܲg kV5O$=k-5;5)/pAUCX\" R%eU@B(t,Џp9kΛTBCH:ΚI@Z\Z bP;R*MDH]"nRt@XTm6ޱh6rT*X8[dI0H ?0PB#n<&OH9۴-6)Jj?IiD9BmMN~JY8tBmMn @9Je R "=y₻meܦvVrwA=DQlfѭ4- p6|F(:Hu6_,sVl -%|}_B{pcC!Z" *! );! T|is(X&UUK@!D\'ھ:Od!**h ; ԜqU_lli >CgCL#!y@O7l~pA4Q۝$lBv6E/hrE1w|`- Q 0y̵.! y*Ô0`2' ;dƛV(\1D<o-P˧ %"nklgħPSv z) [At7P[Ѕ:da(!5|J/{O Cd[0qX₳Olm2m?\˶ZR#\ D=v޳. aVFP^W?bg\Y=5R?N{$"mTRRO[$p/޴Ge@ DP],'&8Eex|9lȜ i- 5S@A3veAZ~PH֧lDJ٨tv wi)wUG«|i !pkd\¡^۝[.D=fs-F~"9[09e.O\ pI.5;%[O~@xDwVr (Z'ioNΞ0 1*0wP|6{ΞHei,TM'T^zظ)BE2Ӂ!F L)!ZݻׂB8}`SpdO䴷4Ltn~NmT_u GjfC9RדLHcZOfziԑ5zH"}uYO{r 6I߲WTFBp+ );5j%jԡ&@Z"Ȑ!JAjuOQX'.HA!̡U^lZL@y]m 9.jAtԙ2 =4B Hi+Kد#O09hBnB*˚cHa:궰?<췺|2I? zԖTݒu6x!Yy7 P U>+[(p5@1T{R(:pADYEpPS,|C'+{`[;]eY0!if*t^Sӏh a_F6%\" ^=ebXݿܐ ?dA\Տal xP׀pb0YEu>tmV[P B";TJt}%q:1݊OQ]W G"f4KIqcS%N1AIv%N*!_iI˦"|Az&K*-ҋsS<ҴWM{k˓wOOyH B=> zғU&CGbk=>ؠ/W@O3DDAJ #.ol\W50pR$`j4g}@Q _QMqR\lHY?$Ο# bgF?!uVB BR}#&Rըy*tp4tb, UAs/ Juv.`ȗͭ n+}zlH R !OkWo ˧υD):?"Q%0q7@(]XM{@4U}?NV6Y=H;S4\iƽQbZ)&E.Q0@nblâD(ZUT":ӦKmo,i[|06ۙǤUznLhr7gEd`; -Ƶp3ΖY_t-U?#tVF\z"3 pm-`ؓ- fl;#129H(^ xq;`ygG"%MΆ-WgC@yWO ͭoga ]fd;?Gr~z|md,#e9l0f\EѧE)gPҏE4x(ύoJeH{*.tz02']DdY/ y,č$G[cJX)ƚjnAFG2} ;MTq'[5!;ە)¾|))6lsMOS!KBZ;$;I \&_ؕFVm4\6p^9++JqamhZFtT?Uf.\=pL) fK 9S A& ف5!٪g֦{OIlҘΚ!,daC*@8ߴxD4*[r xǐͧ0T  w}x Ņ (3.  u߀o| @LWA\0)F).¶\ϡB!1qC-sQm׾*ygCiY-X& j~pK:%3dp ?5!&tNHsO )RZCS`w$7 r,m6gI¦B0 TJmdEY2{mrUv]:h~ F|/QޡIl_u8זʭ*\S@9OPq;e[ri<_.ʅ*"Ȋ[Ȯ\Bo$DJ.Dn F",pxn-!P[(PB ʩ2LC!~@!lAQ?.JF 'M A3p4[Lmw L>/vM28VI:'r6oR-sƮaz>M!Cn1%]$+~S5 y⥄0t'yR@S!Gԫ=`iz-i.oc{-N{$AO5(6s΅q3|CNQX%pDAR];/mG88 jx /4) ܶxa-> ^dWlv-)`ympy.Y;6rW?R248Ά 2bn$E9/'v`) Tp6Px..ъٖ/OPD]b) ,OfU|[)&_ dmYLIPYwZle670 X;q*L=? HJ%ޚ1_ E9 zd{BJ{_'k ujl`;UL`;[ֳBfS.Cq(zE`]*݌[$W:[pV|PRz1UOKHЁ `|UC2z nN嶏0#5JƸ6uD6Q|kAq|s T's8 ),Sɟ'F^񇸕x +Vf{mrd?Щ!PD?{ _?2:VCfɥ+DFxq͙? ^6W-d"1[ !mBH_tbgÞ.F!l A T$"8;HXw1E1|V2v$jC~ϟ՚'M/]q!`,A}c9ɍ J:` c2}Y<׉yױ3qD\B[t5rSꢟ/|<ğ(S3NϗXaϛ\|#9bՉRNX iKl=g#ˣ%}G*WŤ(,:@BPϙ&UJ6qrS-$7UAv0QF$Z9Kq B=@}ݪhy4ngkԗbQXx!EوT`w- K'%; p9m2BVe:pJQX/ R6g8EY(Q?wf1YEVB;[.~xq=1\ܙ?3 y7ӂe* OOY҇_ۅ320Y%Pxqt@aqDO I0vD+t9"ԗC\̞FQcHt'WQKf!A)j@!E( ! Ȳs/%6%5(:)l}ڒp731ioriVeaA2@ KJ[$}YpIOzf+^N։B*ύxBļ0CՓjDEZO4T*в&UH~stl\|+BG:Ȝ!Vg J.!OpLf$ dh9.Jd& v8 ϻ_:BŨ_`|-`ƭŭ0N +@d.edΗ(vV)aoS*¬ tdzL^L7wKVd!`:1^!?{ i:̥sϔ#<{mCi\;\L޲d).WzP@qrcj[PnW)ZXeA\/ ϊ0oUdvHff&&pYx=s CR0v%Q,8n>&Z0ܵ%#U!`Ք (\4\.t@՗tG;v4c~40^xH /֫EqHA).Tlg?Pw 4|뙵?Ms+M:{8q?{@KWJg>o :M% }Lg} bؿ[Z4ILȧ &> Ԑ4WUP;HU  ٥ŏ̑7r\u颰>Q9=>*_.dBˀVǩQx !PRR~JoJ (իM\LQ@uVF*ي *L>YvȨ5#oxbI UH&1FBZry =ps6$vV%~D 2v-a%Ey:r ?<c2s41FA7UfD,17kB %j0r0PVӂɳu($pG-[k\3^pwj\H gX AM ?8(X6@ayMR=R_9tE&2~h?:[_\p3a!>$ :9"-IEt=w6BΘӋn.mt1~OQN+sTjߩE#d2Ox R(s ,TpN8G0]133VbW,̓]7ﯔ VʌʔR;-Pqg ԹηP.)~[b?-X n+'\:tSRM!BO% 9^RJy _,19TrwyR^QVVl,"(T% ;l !?W:Tni #8m{mke[S  =iq4  GV-[p,P[_$pن`@!lblQevw, #;Eẘ"woKH(l)f$P@SzB7(P8Dt#>`[@Y|/./V4(aV5!!P;&]V2VO5-hR gC@ 86hOT եXٶ 7jmOFPNCw@ |ZY3ZrGU9IDA]/+ rjzJcb( r֬6ۂ,\9+ATY ?@>3%ƀ 24!X.d7 'pdm!1F 2BJf9J2;pByf%^mSxZ'̔)&E -)(HU"\]Tc*X0ͻO Qș U,VNzivu 7SvUg Լ?ښlSh8@a_t6D< N i2 SvW;4p8>B Rh:iEk4?g~G#R$m Tu=ařTe_EoQ٠FڍRyN+vFV ; %"8iOث^1SQ%j53.^.QkY(9y*Ôˏ qfrYfwNo hrF ׉*r |QuBN« *@+E w~?UuubG!U@}\]">LPnWطaojIRiww1NvO?$CF d ^*8ڇfu #f> ؁#3`iߓ">M`x L;l*1UG%g(1!=g|V_³?C"7jKA!+"*ې {r>JVU\nQdeTe(ͯbfӀ|"H_a9$Em2E% :{m~/iQu"N(p̞B_ce=$( >-THYsE_V(˰6oM"x3?;Iȯ]񻙨Z.,DCov0d1)-unЫlbT*T*@ryM>+(M7/Nrm~pTp-GcT/ L1<}@bg7cHH1;֡f 18w(ۨ,n;{Hd6{\0-?i>Uzl T!W#('˥k.";F2LNx@NMg@)T!È-r̺qCp.TBݑt8 =69A@S!% I_/;ȏ=&gM{F#fRHR-ZhV(dSRŅ*O?Qe]ZaL wЅ"d3\86Q>ٮX #gS?* w90qE> σs5c(8BRqx!B_':oM?ЮBJ;#`!\LvJp R~^xY%Ώ΀7Ҁ_4g e;Xzg i" n< c=˟k;f\nDݕ{B]*4%%^DgB Yƀ 2Y/IA}!䤹IXEm^_Y}$" FqذO+7oBBHUs9gK Q6\gd#_'~3Jue)oH(ЮbngKQ8lT5'?Oi&Oǘo;Z:?/ 8h@OE_VPo`|L--UE@kź!Bs+)?Oj/}TEO$"Ln~J깒z>9kڛTӞOo:SIW\^.QrK-l bNPV%jK +廠.(EyI@Ņh (L1Ō϶vcWL xMnRGL}!P\$X pa]ȗm!]g`?ҫϞL$)( G JG sI&fB$5 PF\+,AtkK ]"ߒ mC,_ D z~=ws C:kϻ0@l W"rc`[0pán#Z0pfL9 !lKel$S.&JP->ύ3N_Y)-ц- SL{,e𝊄Yib|P<=+*";ޏw 5f%"§Q,LgptR%*¤Xv,|TC; T q<>~\nY1V=኱r,+UH:y_ˑӡ6D>d=B_L"= GH[.ze؄ŨCRHTnZ7RADçadlT2]"^Mڄb & Da b9O0>~m U2 jr(?A[dN/?lƹxhivt: 2W 0,?PF%oA`+JlZH9 ¢l*NQˇ aUk(Pc 6 3X4=wm<P~F=l#OeH0`CX 6A>[juL Lfp]VSOu3pg URn.ڷJr\gȵU.CD @;Y"w6E)OO:ŠMZ Yn9GhK,OĿ@X>FyĨ$lurH(0l-&`w "E3P_qe=YLEř\yїbXr֊0lBZ@CdߧQ 55VMqr$GI=b"i`y:?=s5BuF$2(R.Fط6[27 zxL\)U& twEK^зߥg|&3AxԼE3\7ky=XG2te (\.<w#-baoNr !7܊\íDHCXF 6M)XaܰWGV|a M[qs4xXÝ|)/z)O*IZA1X>DaOn1)wУ/ 3Z8VaF#F"3i4eLyxLiϸ<˹⏛SkD(U1ԗDY.zJ"WP,}7[ @30lBc (5(l"awviBV/EB H9kЕR>oBdo9zFcsQ./~YWnhs5uP,paIsaN~׼]l$-߈HocˊSO(N1U#By`CX(WEJ]]_d% #\Ve5P rK%,kK̵NA+Nbz"TD1"Uة]] rAga4ZIj͔ʚC,b28G_e0,gxt7 kߨ/*En"4X"isk2~`CاJC يpvPYe)w>fs@t+5/hqг2Qj vOW޻ )꟣"e:0Ţ%!Txl?,I9i!l){rmيL7^^M)fc) xZ5ؐ7$#6u!/2,8,*'uDcz$e./X!–Ux }!"/+[nSfܠTrr6[{+\DM2|Y@Jx!˒>p@ VTcXϔt#b;c^\"NvHqZ6lF c[Fz Ȋ='gOߔg& 7&"q$`#VԐ"90\|0rؤ̆ߡg*dd-ȷc`CXHD'Ppp1F"W rʞ!2c:pL +wt>5DyH DΓzV]it<@a_J"Al2ȽBJ [ "#z{!iDPl1.qEipU)VE-Y%^b[<^; J.IǯR=vX JF6VZa!#ەPQbkzbjH^9!B4:a32@../QXӳx6F@Xƾ{c3~4Z=tnFLC.zY6[Lx(/E8{rx"wBLOӪ|YGKEP}$ N"i " wv݋]/P|*krUEr5!ܠA!, x7^:Dq2ey5q mXTCǾ i W$2(i}2,>Ql4'bꆜk5lH2Q5N‚y yvnƬ%T |jL4b# 76Ya`F,"f҈r>+s3 6[^nZMbXm)i`Smdpo[fo> yn;c8񱋡b}iq&N0  ̹wK/[Ű \̌u$W A!, ,ü$m h[}F9)0Ο{ VK6y8λ#69[?[`#XM9ej aI_|Yo{65\jm:q$8']ST˧ӕ^M~wp?c) ˇyiyCU! v ,ֹE(FFVyy8 Z229}3X*lü<]B_gaA[ɱ\Dp'eb3Feӯl=^ JO{d748stBoGvϿap7CsXXErPl g(bhӠGEi{T!nNZNXL;.>冫ڱj6`8fPVaDTmg_Q.H#(gҿ֧zV:oS|6mE{Qq=Sj\gemۅvu'+71v={T֧CdҳG&.;ܦ~PoW\_`#Y*Nv"Q3b0 ؏`Q\|Jj#C?ο*T0(H -bsM֎H ,ޢ ̾3ran/b¶p^[fl p^!J>_khk  3wGLnFQݬ:``Ga ^Xe_q 3<>&Dޯal 8 +E&ҠG+Vy S'ݔ:J2V4",)+.G",H T;KyzYۄb{52uc{#*N>MK؄Rk 3X{B Ga}k1,( kaE Ӻ7"y2qɚ`CM2, _-_P#2lErmF8X. vXQ$_{l<?)ϴ`:c:{:f[8wrqehK'VhuqeQ_\d؂etc4<&}eX&O`/*[2L|p?Q*ETb8>;~x1wGr:=Ι6}o"@+D ł Ii)}Ku6lְk`Aectse8Ùz[tNPSyӸ<ؕx-"ϽZ^1L-=ixQu6# +6Nw{a<>) ݿEAח;n5XrK8aOOxĂݺws Grż-͊-w[WR "mPU)^6 9vg|DX=yC_z\އblb@ea9YLO+V.pޫ$}t*]52(l:}(*kٯ1~]#3{ ưl v)Űao9R&׶[!,v:0)qpĽUFY@$O٘t~`:1:6TE#LO|%\"s*8@=*׈_"cشXB-UT")Tv&OXm9¿mN#yv"$#+anİ"RP^+p|tۙZM/Uu4`֧fV2ue?(&qf`CXtl#<9CIN/Ұ\Oo3dx,8P f\'HnBaaPR"t"ib` , 3R.4O`̌>paY]R6D6 ,JEIAP"yL;2g}QhH1 1^IܜpCg).iXa'SfD)Zyh\DIP\nU)X6aHD^Q̖NDxYdy̌o% QFL:3ش򫘄f/M׈ $u`7DȡnJ`}#>'m+*%0 ;dwD$ _ZUDvck*cQR M@+-C?ݵpUl`Ǎa28Gq+.[ҩ 3Zx^f%Y+ 3p(E ! ~<4dž#XhlvscV)su\Y7DƹR*%bVo6iرXNG%V3G^,`#XT}˻wHЋv)Z zܽ}#EPj)v@fdlKzV7F}ZQWDHbd#Uѡ/?(|Vҹn"*TÌ /D U* >1DקPdQrP]8y$={Dvy y/t]0-/6.Z3/U4rֵÂRk\0`&M)`ɫ2:0Z VFrM'U2"*ԳGr>Jz:9"`Jd}=zmъ=l.LbU=Q9 WZ4aZư 2Lj0+h Hל0a1EVbtʠ_DEҽtP"yx>?/o"GyC8sE6 qxvU&oA:* "?)C\w'D ϗϘ۔Zs_tKU"|Jmպdo_u(&oEgw Q܃֐a"yZta3S\ OGL9@q#[1J񕱍yeh&a@eh&Am9L]}n7U^Hs"I_T:¡yMlmGlˡre')ˠf\F6zm=G-brcNK?WIWu-7!FʡyJ=ED)f!NfJ/r\C_!EC/M?zpSJi0S2ZEdnaqb WNy澰i-ej`9kx+z\L(Ebˁ8{r잩T92yb5ɣ8rVF(91_;/[Gx!S\5 CȆC5V~òJm(FQ+RnT)؋$(kd@ts` {b.QQ l*%N.€beD"t`.ωX-?LV~YO3⿢g~C z}Q,+lü8+F\E5N1t7e{+\ԳҰ:ǩTn&jp: މ=S8<\(=g/_kl 'E9i;?8j:?<|]TQgv/.;/(ZR14kk}9UeH^ZuGx9/mERy!AQL^(0bBe[UدiV2zyas2~kdwm¥ZWierp^yIa w^>@a!lj_֟}KnWK+ C+`J[ @<ɘ[ˣ[CybجH R TZm-x) )} i}g2[X,5{arq1[. W'>M CeJ"D4R·ꋺOh{sJ GIǰǞXz`C?P5;ە1WA}[XrҚX|]r !*^gx^n3{67zVFrUYllrKT5^|xj3G^JՊyW)]9͆x+H}(R̿էVin"}6E+321G>6MsBzy ʈI$.{F%o/^6*-3Afno!Ia^Z*/ߥ_3إON w^,ҷ[5y.9Fۊrڶ*sK^{ QLĢQ|R@2,sܗʍv #P xJ$-^) 5jL!M(~ i$utso׻k}ν%P?{XsU^5e>j0;;Ϛ)C-d{jٳCi2|*-A$O ħOqfVx\ѽ'x !i^` n޶rCy (Z,a 稜$,FϬHCvȫ'id ,*h)O05|Kvmc\O PAŭO/Vzy:w"TX&_QLK9Hu.E۟[ϊks6X{$-p7Aj)F9}t P̃T%u6@ӑ50xJ 2EU~f\c6 }.'y} EM }YD(*(tr~ؔ'٩64 mN8È#d( :(jAN2;A< l0+˹%.l m)ΣlPd@#H ʽz<68g9]8IL /gS-c=מ]U0M sXi s=A t<,r]j۳dHN.6K6̴^\q I TDz+5;׊-{:%\Մyn3P5G '&U adVM>H2GFКi@A{N0$wdgc18Qsk$ v^G3S%L9h99 W8@Mb\!ɸD6S99Io۹-A*PV eӘ7~ܞ< Rp 5a2N\#; 3cW@QނK v Wtk!ˑ")=YlAYq:ufr6m)`ɒYBpB,:(^ e?^>{5kJ'J;jYgW_t:í]5d搀AY+Xa189}Cod~;C{b3et{f*KutX\p~ei@rz+G3G{L : m@n7ze_")MDR~fZO 1z\L28HNK qq6p,9Mn< mXu$t5!N)ܨXw)\vJ+"f)tG p!߸lfIy)}0lApΘAYY5s6`Ԡ 6p31+M;\89vAp[GNB8 9~ApKbGR{a ؁uq/Z?=;$-$'87p=kWٌ攵HUkj&boBRwAټxqK@m$.^E5s/1P-Ɏ^ǁ+[lv;@Nu>N= Nm QҀNqv~q6HlvX)3fĉ1$4fIdڮOΐ S3݃ArQ>%dj>2_LؤC"p/u&ěQxKm+fT_AA9o$PxM 0#f 5D5(C?ץߌGXxX̏ٯTXh1cq~jJآ1jX̾p35dJ |HN`& igql\w,UWz=l.ǿ-z4oftc\g1h)1YG,,H"SD c'L|H˹dr7nOʍCF": ƽ7G0}Q6c~Tx9iaRp >އ&su\u Y@/bxW)bYwO](]@1 sc9Wtwt:='r&N ΋Lmb{Z 棩Ylq'\۶8Ig$]n$H`KYe`,u]o6qA*P|A6@TA6@a.wrWEI Hr<G:(H8\p71zPHk|#3@ۉ8lc8w>({Нe @1CAa(Wp/p:[hFƅhYmhd EcAjP:N? xB:w˧,<ԠOtJd~Y=1RЇǠ T+\z!(u6Nn FA a ՞Ao55Ԡdk`ğJR, yөXFxϟaL;_N!J\B2㖎K MA, c; VցX .s(ƅ;<Ԡ,@+&K.47!'r_58>>/.P ASdHBfP(3QLA3H &pIʎ vnceCdd4V*w`di,J;N@Si 1G(0flCvnk:违Y) a6麗R?H*LLb<~.{:q e3S, N 94 279Mz[ 6әI<& h9],Q3R7<A4qi ASM=մZdɉaLt(hZGuvgHAbrLkI_Gyrnx -4 srs3P>+J+ jA*ЏD!M~~}=eٙ ϴb|gc$]6AYA_0=u4L "!φGCd90E*eZNы@ΑܟM43Z$aX\MC+KrXzܽuo1=;dW`u4 +'͔trE?e(ʕY=HMA*Pm}Þ7׿o$J?R6Ta]Yi3A Ӎ֩sZAjP379g#(Ӌ R~ƊjwsIpzavLHn5,Hnx/@k,: U| b\  Ψaև3lq n  |tJ,~qD¼@]6)@I2jU= cTRr] 7"qB֦)}F܋#}A"E+^chGtlfC$0ZgŞIS-;stOGŊC(x%w;['&S3\u{9td1S$TAV@)"ರJBYNIjU$Fy&HQe#`\Vyu)p2YEsE57IѤO+"D՝̀zqr'[qng*Pfl6 'ӨzFB2 ^詹B<'dR.aCqҵON 0I}Uj7٠u(l&;bfs>MujbiNPƙ q 7;+7?55)jf?T_N$E/H  y)mR\*P΂0gìm(l&8'=Ff#gbf1R%Vg1ED@N}NIrN=VzT٠|V4+a-V핽+.;i;O21"`<?f0;Kϕ݊c ɪ (9 d =2`Ix$tȥ.s.i#w80R&.Ȑ&w8BzK;YM2j\9LhPs8# IX6Ȩ`{ :[^d[G?`4ޑrLyv u\ tttD3ɇrά&8wowۆe@/>G*r.` 2aE4NYfrAA16i7h4AL\r[R39,()E n: Ǔ7S/gŴzi}bkc#l0G& @C!hC~C +Hp[D"R|!")3"53#6ϳ/ `t|`du[i<(cR IiA~qp:#9'!([4˃G\l5L:ޱ~洂Ԡc0 fȨA=S8Y) F"{\$ X1fr;XHaoRKgz͑)r{H݈ 4*n^k4`$$;H]̡hCi R(qZ@ۣŊ̐01wQw m]̡|mTLF¯AYeveͶiv }12QEaIO=p[|;FMn t s"  yqO$.H}򠧹/7$.Lc ܿtvly;qe$bqBX4\уt[#TW:Ie^T0eìOj!g!as̛%UA5ĥh%w+ZA*h꬀2R&;8ANZCͫbl{-m]`6m|B@|ݓ:raxb+biTYVTAT7!RR퀌f*xtGHE4A*T&ngw$v$PZUz#uRS={&N-FA]YȀ>TBibShd>fgquۢ, Rrpn?m.($d ąV6 q@F KDP G֟m6A*FX̥X!If+иut-s.Z[#m8NR2d=`L2}m{S7T7pZS6'xyO`NLQ,b$9q1-{Ny!6(@) .Tq;N`~LЄwH%* Hvy7[6k3yNrvPYkZOS̊HaOFHY=K䟂-943 N1ΰi mⷖTY] B6:'R3m.0X0ݶܗ,ur{I=o p䐗4eLN+@BOxa#fO.66Ϟz%z ^?۸0C)*[o9l6;)|NA/>9(Aq_I~8NђgcE !ʯA#$_8[n,ich aId-HRNq>(+Lf+ Ե[0pViFPS+L,Y RX=NgHR*-+ mE1Nˏ hLVTVDI W<+Ӄև坋̬ʐ X014)WJ4ny !em{Ac|TOG0PN$]kĥX&.s1&lZ v& aj>I)Y CVIM99oMCj'6}R,7@Y*ŸcH}`jtRY" CPy3Si4FάpYd=6~JE_B%.@BC>vV!Y3 }fW\jTlA V.GZ:3I_j3MίYaI${QW .! B116@iBzŢ1f N+S.x:IAt8!H;>hjA˦ʏ3H-LD0tP mH!( YdٙIƍpe2A GA1] ttk\|5ʣ զ/xR`uS(f ;:V! cTF ̂$%jZA0sK &'\a8%$d$5 CP6x#0dgby=;)LLy'. ¯tH(l R3Ѻi!L1 GAz:㟈ؑm3] €#^:OIk MȍyM @1E{:C0N=;Dvƽ+л,Π]K_6_[; 3ugϜ?L_h"* }Ub8 ^;="pLjɒ{.芓ALyuՄ7$/<')S+Rc Zѝ'xT0ܤ-hIFw* tvh~c5ta*'1 F4FW\S%{{wbLo1a CPYm D*J璌OV t*BN*0N@.u* KWE$)!Ivilǽ 1ɍ$[$)x1lnb0yeΙ2| } th|Ș|*nNk+6NL˜jLakÆMmmeMEe!9ǒ;slo4(lhiJK_"P m 80mAl-ԵmOH'tɛ#OJaA6ؠ# 6 e:w*b NA m N`6f-TW5 "k*_8M* WgZ8Q2ȹx ^fSRy5T̞NدdZz>vE=/8(qou~I5GпH5&0 CPbDSR@ AI^L'N-沜-7ȼ?Q]1v]bFfBJʢ'MZIn@ ez٢DJkpf5 Zq'IgFVA*З[<cP؄1\X0ټ0d 0%=2O 5hg2sG }[A7kxp4m_dU҂郢ffQ4tXOfa)oOdtI^Pz ZOyA P0/*o+2t#78` C0% X#$dOӶ! (oMXe0Aep=u`pG$U>( n0PE`=A:E\%L>\~Y@{V푑=bڢod1H:מ֮ B=qsI|F/j~#Tox! M2¨m&olThyQA*PoHT0("uOd?N46cJf-v3v%ՁY!a i|Y5qϷ{T +V9IZ6ycÁN:<5 LAۜ&|N:*HXgz*A i@m[Nr^mg&KE@1 WڐWn!EVi^Lf^ ɨF!l J_a#xHS e|!^mM wj8<9.%bOEL+M.LHc6mŧAW*3A7l}it@Ns9u>o͐+>ڤu ڤ%tM;{"F;k=( w#w GJ5)Vldz2.dBkf;v ':AuC󳦱N|98(@)n& GAbWWUDasyIfpٳeN 9#isN2"" FОm[F(UYjt;l#6-dҕ E !I gls,gB( 3,?wfk"?Hr22NC =;\ʊ-Y (܂T3ť<|?(-O)sL , Oi4',.\nԐ:m?\6}߸;kg.6HEv\/mKސAɂUsB߃u A6@{OMzMpyAq#\~"'p!A9*H )&HyCi];C6?fF94x=;`unG.j>iv;,h;rn1Zrq[b}5ee.٘Zl<,( вb@BL:XHd,GPgڗa (uǒ},`zK7S]a0'fg),t,j:AH,SkCN\6`#%'IUHqBN.:bt(sۢ6jEPR WX2Byi&Ŋ mHPlP~Q-tx1$$7>Jb,0v<:u&%\d@- 2K+lO H#}d Ja q)[ג4"v p>jyEIasv4Brz-l] R~;M1Ƙ &.,K$(Ife2>ܬs 7޹[vTu~U_tȃgF$pQf"9N:$dx`5Ax$W1 F D^ L":gwW}OD>w[kQVծw}tuE{1vyS(Ll(z/gTi >R&GJM640-Kv #eq뮝?][(wmdiz%*PFł-.*]gOkh 0С qMz`"@q`0}zJaq!4$7PgFpa -/x8 9ǞC2TslM%ӅkEDXng"wl J(,9$kz yɟm-H5ϋ:8G{8о@S;0zڸ#3)L͔m ']#ҷWE$u)(*п{+\e 6Kq,Z0AUVhC B;e&n@` X?C9sEV-xhGRϋ T6 i^?/d ٌIP2K FeCm$6p<s8`fy)gK\ H{~] jJr `CP+oht<=a5R;@-SX ^=]ڶv҆~A-U/* W;BPY}taShuI!rRma0&[raCko3V^8F W`m.l la5l0\Kli zN Ά`Ke6_XZ.ɇݼ_ 샢)Px`?*BCǫf`P aG,$$jܡW? /޻+Ҽf"!/%}ٴb,)(&AI80PR+hq9&&-$f fOզd%t@+.aNlt =0j`;@% lzwdNm u όF ?9gê$P%tjw=+O' ~P-(|= 'ո)~!Ө:N6~"{x~54=prp㙔,pS;i` +J7OT\f3sEsV-l1`fLD{ .,6g_#Be :Xڨ!wsFW0t@OQE>{lo7[8<sgÐx #rbɖy7-$@U&OEʜXc̛t)vCA+sxQ)&ǫDEh BQZ"6 v!(L]pJC`P$A;xl\k0UlM^/KN+.2(Я87b-op)}` 6WZ% J+R) g9mY׋I6rH>b7b   cBF"!U “RoR눸̝0 Iz5dt!y$*6`z羗sJ_ ]yt8_}x`ˠ'lk -7dYjA?T8*sZ+%PmӝIl/?dg 7HzhXk\P]W.aۣB9HԠ͋E=UlkbV˝ǁwDkѴP!S:YXs{$s:&*H^|Sir8[V\ίP#K; /f%iH16ȍ A*+j'1EN >?|+,^ q`=B(8>3R65@eDJJRQ $z JpsZ2j`O o%.n%lA 6l^{kmV3lY[6Wt8XKQ,\n_X3z`(llt|8`C[]:yK-*XL-1]?jH>ތ|7pf@rk­~䈟EB@?kQW~cfbIű}L9b[fZKQxcFwjK4:ytJ2UsoGƽW~LޮrϣJw VG΅ ;F("K8 12ӡ$.Ξ.)`(^KKT`kbsR[v5~HaAdqQőe;Ni eWqVmq5ME۫C$Y7ѐ'>$hFt8IWHRx‚{H>WoQV5u?0X)Y8qQ{.K\pF+4DFA
LL#?|0۬`ԳW+,r^`(w}I$|c'V HOa>^ ݠBqR:xv; [_ AA+(CS]Sz ^WR9M$CG,ud"~:{U|e,&XΠ R+<,*2X1jG5YlC:l58}'ryx" [0ᰉק/Ì|0 & J'@-ؙl OつO%P? HǤsgEyنؾbH$c9 H2pn}ȁ`;Aa#d@3lp{8y@D9%2g)<my_P -6I!٬$pCvP 3p%Xͫ8Bo+[ aqwci &W%%bWMs{܍`s~`HؼJlXa^Hx3A½Zntf^Ljr  mV]X(U`( OʑB)^iq`h. hk}V`5y@E O V32i/@VieحMCY͗5aʱ#Pc1o/c~0_36+Z7sP3ֻkQn0񗮨f.$tQT柑t;+|n6A/. .TKlAa 6nYs?i΁$,B$jx{FHf ϑ9Kt;ɧPmI%.ORiӊqlxc5}p)튂 h}4In\&k@ Y4IJe3& ΜEca~!ƕjm9 &&]A]ˬt*|a4 c 9S-@( 6':F v  ֽl~/'C/`u(9GEhk~Kƽ£m]2#om-gX-r;oRNu#6Y)Z жH/"p 1߸|ܛ#uV9L 8/[pԢ'L ̭tse!2(`eBiJkCPF2a[# kH& 6ѨloSp[ a6; 63;$9.'e2)2Gv8`z 6("VLe μzi$ZФr#rLC*f6AI6`/Cߚ1`. ۿ8͆`P>:HP}pH& 6}nXsG;#!ZlKhg&*5 nO $? V8F-\ZLB7->]t kp=p5&l()d;&|J dzfș?Y/"uoS?寁74`2B[gJ2KU/TRUldrf>#U* 6Zezx`I#^h2c3 @`ޯ % H?~CQn<`>Ek&#;oM(RNr{&ৃwr![hW#ݪW+>5h &cjsat!.l*?a?'d8Ƚ[Ha 2VXX8 'l2zjr ΐ:6mxDc1g6ANx`І61%쾧.̋9X;o9ȭ0hg*.t -ldk&@\5feХUƬ`V-Xn 6j9]//ՍJ&'?,(`f01ק8'"JFrK :&϶zB nqQ-,%>?E dh#}=PL*=F?M~'2KmF*LjC8Q{j?ibb{_ Ԗʒ-P>tLJ&?/Ù AWQxUpM_WBVq8xc~Ѵ_P>`}iD%~gMn) 6}~ V^יls7e[Zp*F=72Q(`7Le~X1* 6*C_0ʽWlǓkdl_ 4Oaow_Çc2֭WOR\v6ɳCr@n_]$:X9`[?_R m߮W ݭmO$j"I>wH.hsd-VnTl@wP58߷Ǽ\^C@RhH(5V94>Q9M8%-B`<$\GA7=Vj؀lgHj+c^ Am*MS3K `쐭VUk0\e+haXͅ 6Ml1 @5Vp y +EQ0ˠ u6ɡWr׵d{c1,-뇐 Xl{`} ,wVeL\F i(\|Ĥ/lK9r mqSm0seiyCOc}P9EFǑ &XҨ@ZmVd~dnr#lh 6`U8a!()6E 7INEE5%'N"fPJt[E }B1~YM&\٣0XuPNdEpx{ږ}j#Um{n Vˏm-fPfru$ >`DwVp _x gMF ` ftfʁm^smJTCjmh |!(^u lHX`K+lt6xZ쑽bη)9+ #Y]ȄaL\i%ƺiRH;$4Jfb{u`:.l9+wYDF炧&Sw0IVXV/K!a$y&+ĕ2Qiwiܬ_l VeFwgoWU1HX W/=~IlAރĒa`K_w_V\ay@a*C8`/76DF6'i`s2 }UGqk࿣Ba(_Gy v'KDh|Bh]OSn VTNŅ~O6Em-qH8!Zsc8u ŇH g YiI!e޹6$Z\ siC:îD!hp Jm.`}Sd`G][aoȪ#'j|fei(ܼg/XIl> ]H`sdFd-{<ި(~sg_OpcbQX %0KaQ$׋# E3*LJ$T|Ӳ!W!\B>]K҂UɅ\ 9=q!:DK0YJJ+eԕz ~RI MApa)%*t@!ih}v. iz N*ϻW4.V#䷤0R+0 DW"Rϩe,VꄍLAE")m(ŕR)mzs $9EiG֋$1eP+fp6MB li<6.\80Ф  'qOt$@RlNY6 ܻ X=qаP@3Hk@B*llpBin]6GM[I߂ xH: H 1‹@ WPm[+ ḓ K6wԒV/`Dzմ"-r%b9ۧAVt]}(ͅuPp)~[@l`=3fA<$: W P=$t( AS,3 0A%][ޡ^3 -bng*PEAj?IOv`9@ Aց\hZmԅ~ aop>(&a $,AS@ !=yf q2Ǩ7 2A}P.< \qrX䜂k7 F͏o˒~>m]`㴗$yS= $L4b ߺ'<#ӲY]QlW.KAxHnTOxE[ms96ad#t V=T)%Xi襑˺I)kBAao0X%_U9FU72bTflm?EwO#&`-I(B7DPkIEɂ?߷Ҹs# 9F'{~9q([ Da&q$q$RzG%yޮqo=$?kYGY"#5 ډ; +u[w+ME,'=Ϟ7## ߊ$N3GT.q^Tef2n DZBe+v0HIR$V؁K{Y<ߔ#yyD+,H}>kyj|y *e3H@Q^ʻ·AHa$ |JYm%q((eMp9Y#>Άg!^(J nT~TY&tz9Kو]FF@O>N5_U\0u#v6ۂߵCǙgz eAl/y0o3!"_8UL;I[r;[la}JiXM=B sg/XB*p(biS wԿ__xx}x^K7l8[*6'Kv#1;UcpP;$! ~0W>ay΃p>\mluF#QCsW:YzQ<!-R !`C\*#&uNU\h39\lrYH&@2 m9P<]\,}JRႏ$VYu6\%GMt@ ]佀h?2&yvYg+4Zwt}Qlh ^@bggOd(C|0d뀍T6;?:U%e>FWä,x=$3as Ief󑙠ZSgEu6dQWWW*Xve߂ [OOJ~$O{ y tĭ=~$ɇdC2Go9CvJq.@qH (bg`tÅe""u$Y)k FLI0gCl6O0l=]gsR%{%ޯ; %zQQn"yHUR>MBv ^pcҹӏ3g @SE;-Ylq_`)T8M z޾Uq4Q 6 9j\/>Pޏ.I;) JbwS?"|g [? A<ͅZYx0!ɺg0e 6s.P3bg@$8"4[ gnt&lH,bv`ƶpY: kUsUJQ¥q \J.qK†UQsMX'տ 5f*S &wx=d <Ri .Zg+ϒZoW)TF/P}82TvM;&>Z?H?4p1<+| ᜝M菳>#j\" -Dva LQ.q3ds;weL+ps6|d:bq?H D|kpυ D2Tyb?(&  YJɒɯc, $t©蕳9Y},/Heˀ$ɷ  |ÑQ7*Ǻ<71!u!š/`ر!9g*F>6$K:*KToC?v+ʯIIW6>IIIcPS ;kRFZS" L3tP`WPpϋ9 j U]r\|N2osF> Fj4x Y*@n"?Igetzt*fЁ#v6*--P[!قݎ1Hƥmwg,)ʂΆ IJoAggYr"3a <:$~mf;?'~!$eh0%Kp&v08g@$I`M;fi z=Кoц|l 0f56> ;o A lj"< ^7pgC( ߧ{Xhi #g !zC&'08]L$owX +vwp@}1q$@/mb}aX_~39Pi~QjD f@e۫p!Pc-SNrNO86fW؅!e ${=JaE-TOc,E[BEC V Ņ&8b%.w@Q#,*)%\`HI_!H$[/Avh HsHyhHaZ*.͎AZ؟pQM 1zt,vHij#hv]U穾)S.T2 Rj &{l߆:و)!#J  ;20  eHc q$v +#ex%$IfHd> ! vt+?~; mWRIb%'C:$%ɛ w=j]y z/W:*)c6 etg@4ָ6i&![ !l{K{V i0sǿ#%;quOGۿ/U]V#Hfڍ9PPbJNl\z4 ۮRfŅݡiMG? .x -diXIhKxxyS91`08{bg#@mƟ%oljUlyY;)vV햊'+.|jPbw&b]݁> k><<#"]ÇH>_\ੑ3BϒF"9Їd'hY!l|%kzxBͱ^WMz)67~%ޙb?T|_1t{SzdI!5eh}ɘ=eɊ; IFZEt=no+fJ9Aypw H߳$1u*PA7鯑dboD2Sk7["WL?& iɓdH U PlO+87\s-Rf&ҌSR a鿶oeu@ I PAtgH$mW <#Z q g xx8%`Ev*\@5k9l9 }f8o>M6*WW 7 b 'R]7pgKzUBt`z0:j ls6,!)Џ7|i ->Q O!|z˴N+ΊcYzbg%.ܖ֍p. }pH^!;ԫBrʩ2HHKF~$k7O!aXU bɯ*).CW- '=2t:VԞޯ:P[RqnL_ yr& _{H8;Dw~6H)C@M|1Dꂍ_tf0FPE3i9>U^"[4"vxh(qL%X?u%CfKzco)FׂV_ pV2߀W<)Uɰ>CL YeIݰT!§i  28Gt &``zu2L$*]dFIfJ;֮wKG\baoͅ[ŻEơ|G=*]\ #L)'I Մ R{H;+vE)UedfWuޓϗq/P!_u*Sy JE0 ^V@qV. -y9ɂo@hbg *tMZ9L-KhtA() =7'=P?,ڞ 7ld|_D 5qe?M`&MCHSi 8EO;[aI>i9rTDB,Aɸ&f zcdwRgˀ(t@g46&~"!*U_:WJhiN2 K[yGA/opތ&HW5Q] (noг@$D5;06^ - 'Ke E@&"0/]!3<(?|%Rh'ؤ/n_R|jM@JDij(; kLѡwl*‡!%atnQU6 z &t`(hٍNc$HT^BRv?%A{y]zo򱹑uݔ \셊Jv7p 9r.oDgNr. .:aSq ;߀Q_pUÒU(Ǡ٫Z~!A锄XgC@}N3 Vgeo|Nzhޤ3G F !KJQTcΚK5[iwz"M$!Mj0Mn]SG$GcBԧ(vtO|xU3o>;ͤ3)@:sJ|~ |_d`f&vj0 ~AdQW ԩ߀a6yL&= #U0VY{3 RqL07* `HRYpb<)pi[?og;[{H -xfψ$Maj8RPWއA=ߪCbw7~b6^^{$yU$0u+&6߰[`:F$C+Rm4'=P,&;pdIuId|`Kn߂%k-kKR!nyїuV^' R)nslnbu;mw"Tkxdlg#@d \R ~CT_7"*+\8kbog`CkfjsYDA6-+$Bl t=}35D!z$m(v&S쏇8i1eFߦ@P(HQ<‰F Bj_M1{ap VEβk!R$)Q1 BHHrϦ*)!-p$P.xoO\6Nz`֦?ʷ~}(77A >+,lQJxΟ* 6b ;97ߣR Jn l !v 6 l/-!,.Uq)[ 9Bo8S~(([j"o 4_- :ZMO>C:C<(yEBU8BZgX>0~le>X0d`㍃4hzWxnZmݤw%R|xf0EŇR^/+YA7]+IXʽÔE5x~U /c4g^~fXop ;V?r;W&CҤ U`=_i9KTJR9DQr )hE(CI\.py<(AQ*+jt6Dýŵ*q 6^_B:QOC`ΊM^g), s=IQ7OsنM*)4 !5nKbV4-4n9!@vڅeRJ,z>$8s1f1?YzkR_|+L"+d-*$% cFHpe'^,-E'uAr:;89hi ?@~B{ ڇG2-ŧIl|,/g$Zڔ *vʘѢ |,Dͤ<*OlMsY֕P ɏfGa >! I19K#`L% 36=n$-4w#"u{?,Y|go!p!#g;ޠZu|g;!(z&A \4gQ(g?8d`O>#hmb-ɰ[vr?;A ]HRXp(ZR&1'- \*Ţ;1-4E{"Q*HI.M :7Q(8 QP Q_~ 6ᾷ,Ya˲r԰NlB_DD-joڱ xOv??JcӸvTxn8h]*lTYe〉HKϭQحdp DJc13,u$+o?e,-(^I(AoЇw1+WRݔk^t+LiCRg}@Ta^,.N?_ª-9 H9Y%σKIUp9P20'J͌4sdx<[)lX.ͬEαY"îe-$/#Õ鵣;J(P5  uTѥ°Zg=@nlm 0TnVY?~p;F:p[|a"VKeRuJ[#wy Rٔ k韣؈$G e6pIp)60mu²~vv.#N}j8#eGoBᜡP:¯$".1?e.SÀ*o9eO'.cgsSi#pN0 sx;U!Q5$#Wx;D?JXg3bM`ʆm(L*C A][f@/F8݁DWbX.I(|,),c rAfO-Ujj8R *K5ϖ=l hljcp)kN~G-\Ju caBp<UXXgg>>Â(TjhX@^v6|2 0 &-J)QL3Kf^"4v=Վ}Q}8/Sb79fRnl::l(Og=@澓Bμ]w6*\vowj\n׆rVRnM`YcϣGp&"I6 a >7;?!Kq̅1*׼l`oJv!AbⱯŽܥW&$ C< vZ0 g}@vy;.'OSYٙ%HxW 6L@ yY2:nT`Ë G̳&k@sl3)S̿9: aCɅ꜒T 6|0sM~FBѲQ6kǹ) +y j7:r6&k$3A&< r6lfWa@/7\_-r|ȃy^ߓ$K zB8_n4;LXG{V/aP X,h}9lY@n,H od_ ߬5r>Zk=S~sHЇ@Rwqo(~u{*f$#Z I~<^&]D A:QkYj0S K.W(?Z)>}]{E) h=2zqV~'-}eIG3V㉅-'-d=][P"γʵ)}p|g;&02u \V\j!./ aҧdU( spپW -ğW,#-j@c,sfofZ\0-dI$o $["\fF(,p-޳q>782Q`SC[3cƝ/YaC992Y(q6$2 bkXG5 BP<2N) ʥ򲣟>aiMdsda vaxXHX9 VܵrzE!Gu2[[p:M1[ · g6 B\*1n,mďK[Y/>W6nYrURg= Y#'>Y&Un?cܬbĝuu;5,IbWx,{hՍziOQ !jk㒀 j*ZEeF //1-;Hpdm`^ (0m(Q1v8a՘\8' \"0gQӁd }kSJUYJZ\.4`M/u6ln \.pS"C): :ن/48W,6Z 7[Q~~(l$,@Z(SI9^ bH wSvr 2qo0 ;u.;PiZC~}8C5e>喣,HBT&~ڔ.` $ $^BS Wr( KʘMwM?&2fYAg,2:ƻ8~dICXV.PA,CXFqoH_8RN!ǥlh0u6 `" Fd$fH`A bO.-Y0j R 㕲 n>#l3ሡ0DZ1<[u2/ 3AQ2᜾(Zfkap< ± lW, iaY"O a4 HBCcKJ>'u9lx*Ȕ K,4ـGZ:{W\#cʆ 2=(Ȕ2UȚ8|6Gq?+ܔ Sxrmzw6 J*R/Ѵ<&#pw)w ]@C <luQ0lQg=t9oͲO!bKLͽGc뜝>*Rzǿ"c+:F0o?F4dw3ʼF;[\:6L#2 &C.eYg=5L2ov#E?ug2V #Ћ@:v0$ BߣF +H:( 00 r$ $ 0 #@t$H:|E0ا@CI0$  #@t$H:` I0$ E0 ґ @RKM"Q_Q=O.EO=[r@2qY6gMV.֥l\0iEXHH@`" 5۸)_~ S򯚞wd>w{֧ 3[XR!¹D̵,kljK >~Z~nZ{vC䇂,lJ  6< x c3 auZ^1@($Il&8L|sEܿ +'2A I-4w#ŰC! ll~κ7h_Oyd?h6'\OM$O ldQW)mdIQTE$lR Քsxr GIc'/*:TjtZƧ<ւQ0Feo5`IE^IH%$(j.M>#Ivx+ Q.^0AK<'5HbڂO,QR.ΦGR6HxG\1;e7%pZȲA6$,.!@MfEG:LB˥kDT-ύw . ; .h> \6Xe1. gթ^7EJG->qb^> L~;A : DomϏ`O S9~:v; }b@Im^$ka$!]iL@J€"%ᡄBHIՒٴ,%iY?*ߟ u|cp!K╸@-0p6$Z?} GZM >W泬9'mPT'4 j204 9R rBtYbHK(JZl~EGxRx{ӊc,t:?,|pzIo =!V-=}\Q jʆͶ!n|5n‡ߓy?ו:] n,|(K#IO%JAԴ n0@oR<#z$XU։ Q/I3 @UO?i|2[!(Xv G(GYO\;ZqQ. FRn}Z@搸ZY/Pԅgmp6Ԑ0GBƙ$ۉ'-"I~HZ_Dڟui͎<^J |gJ=N@T$:"%biGG=0LwmeQx-֩7ċIj(J%X-RdibWi$j"4K+]RSXK jeJ>$Lݗ6isoǯ'y{!/6O0_ЅO՛!J>&L/W&x'iis_: P,QI^ \a" 75ĬS[/sMsκ04C+.ܮ%;Pw;mHYYJfÙ5D FZ#\ɣZ &葂(.Il#88-g/ƛ4T ^Pt nzp`gÙ > 8rΖ98Avg}@bXdmFh\$7^r PLB;;kA\t։CIx[ZdA' lfZlyTWBz6`M愠u6la\* f YJTvTDDRy wf@B]*b&؉~AN1FQn򶑳> #g}@$yi4FD>|g}@,$""fRY,VQKr} 8E: $//> ̳f0J.sX8oŀ:Y[Fn@S(p!y-HkkD|X%(-}6Iak%0〯t[{ |Dz$0L$$̠R;ePz6}IGI5%|goQ\ $H漢%E&jۥBE#H@"yE]x$Q/:u_*ϐ)"C0HPG z > z(.,@a 1 /5(fYyʵ7F,YV,#Y) K pF, Wx:fNG e:٦ NQԍ"Q \}ʯI@TI}TIT7Kg+7owG肋v~[(-s>ou@?7G~vs'T_( ʁ~OYzW]3CO9^.GUۄIR~Bw:oRo | a1DdEU+;6VܟPyZ+JQ[:*9[{Gum>Cd^dӣA$Å}vW'2Tϗbϝ#B:~S;TJԒ|Ia x;&DćU*;. #&B:>)>]![hdQ,J9@.?K%D)}0 É_uT'}wDB[EݪsyIp9$=F}#rtI]B:>Vu"&x!,wWw.{w9$wl%bu~C ECǨ[C|1[.߬tdZk w%[>)0Os/FӄUxW ~MN EpMd:mIQ0{h&?A=Gl$`L6RI0H@?T3*Q rģWy $ ?b $ z#'G<9nt6NS- k.!F9"~pȜRNH8TjErb$3m"{zqe.]WCr,?c!A2\[Rv.^;iztlakzn?϶Sg$#GCzmOEpi‘VΦ]z 㮶 lJE _  mA4)ulH?_J.m@TѪWaU!ɢs'H؃6Lr"Y:ʒ^`S!"CŮu[zxf~ybpJ^o83Uz) PigH=g]@N_ Q7K&H7 **\t$+ ɩ4GB`ms 2w1u@=_i=Әl9BJIQ [7/ȗ+’Z("۲ M^{QO`5 MHЍ 7g]LK`/ulViׄ* `mZ7HĉɶN1{aPL*9ƒK+-GA%lby82S*+.)(~$k;c0;$_{I~.%qd_}N5l&1] Y Jmt]'|c auQƛlT s$ppT::9^ZT/HbWhD#3s9HȷG2 $pْ-X5 ~(x-]]kjp). u%/I~ʬɋ-e!|pIZk;n6@iQp)L{rb(vAwVG&+VOk&æ4 ,9RkҜ䀸G]{V gpXS\BkNdkHIV}H)쫏R8RB¼ >Ob:pW](vjI֓gXњ]*a HmI QmZ33St ) LzpU(.x]!kFBJII2ἔ7=*BN^>we l~_ _1oezYBO1p~HP"RF?&9y.KpyAtk̈́ ~Y{vH+0AB $7~ToȠDݐVyt1S58G6#^ί[,#by֬d5q/Ȉ4zmtqys?ХPS:g%>P븛 5_]3nX&(jHNp6]̍E. =@깔#w>I1T-8@OڷR&$T⥤MH褈&|$+E5(.n4XŏDT.ln%5/iQ_ eQmXw(P̍tR=XKPA$[55"?)Zs"`W!A$]Բf Jy3e.l\fL+%~)X HRr4xλY/*4X>Rmg߼Dm k&=˲VK{$/P!oAr&zZ3&x5DϯJIkjhG)nȉ?wooT9!獿~z{b#dHٔSg">2洀%Ы>ܒƱ&~dCR ^lWzQqڸ-R?hZU#@\0n ԏ+jGŞcRӐh4>+?3hq+\FRNQӻZ'\c ћo3h8o};}T`Нcd&@ꣳEwA#+_5$EޠXuEdn*t*V`9{"K;"mB|M:w]B ) OeϥJBLr7" Lƃ8&H81'6V0-؎8[5+̺$Y3"7W G%@3Κ1A^D5c6tlPY"a)`,zrل-qk;u=rOax )Kgׄ$v Hmz~q{nxepgΡMG~.HY޾-C&$jMHN-kbOIPs.#atLl.) d[`WIRl/3E9WV.~̾-jŔe8[ a*K9^ޑ#زBZHH82]-!an$WC ˇ!+֞OGgI:Ù9$ucpa}8O+ι1ISw]?Rn'$?p;[TXm ['cJ)!bх6$ RHv $62Fc_$-t @H]c I-+ cZ#IÙS;f5cE& JUS@j͈ >j_\ȴ̤{5hd_D3:ek|=Zk2}^ş:Tm]o=L.ȒdfLxIvxA$LQa{dI,fIRRҰ0'&c^JX~ʅI*>YCO1=N^,5X;bTc\5ʬ Q(WzAʆ/:Ӎ4 O'rcy;hYOx(0+^' JqE] YYIӺ) 4+lDK1L7XSUJ$$  ӷ9@ @A*si,EJB-M9uL^P3HY UfBF] <I?PfL}lww5agG_*\g0; %sFAo$>gٚ g6ڜ)W攣Htm2R:~55Av#)kTrsR$+ lb"=i{L#'8F)/$R>$Ha *}4kjy"qpz &6@ s.( 9S?}sr"^8F u"prSB+$%D1)5:H$2?Aʩ3y=bx9 >ޮ55· h>{=EͲG#6EzJ"bMM0??AT;rYi/¢8kjkO Q=5/Y7"s} 91 ^">3oG>, 1C C60Pho^Oά0A6pH!N ®HrKh-f5a獡gWqkf5~me=54g2 3}vp` ߪ*tc>Woe=ކuSIX3"'FϏ> _q+;d`<@jpAiE0%Œ9UYݟ_^H H^%1PKJ51T*|1W)qu|M/5'ROlj AoZ3aP?yakHMŗeg$fB%ATذ&}0g^N^o'^ 鏺ˆxHSHa^^ @GawZ H+6nnER\j>EO$lfBVQ rΡGM;OMΈ947?ɬ_Hck/4+n=ps}tU770,p uV#+0% ;h" ? .nUByu X"@@:QU0k-1`MQZc(Q윋4[sF118''pygt۪$v xV$bpwraŨVv*n*0F7;uS!!" Ӭ4N8n+-ta!!õf=ykFZg8/(X3z_5%#R+f:D7k&͚%$flo:\#H'F]saZB A7_%bKe܈+`$1M8# A;l@h9AdCcL0QZ*0897š &alK[#|mGAjK2ʚ 5eȍF{ qJm!iHzHv84V53eԼn `#>.fIucME=wr@aIAGb H؀2owEG]Jda3pxsӱ"wlS|@-Dtٗ. /= ut7#p$μۓV-%=[%69K3Gw9ez98 csUI4g..R`%AHB jlM54(i[z\] 9P6fz뱦wY-n\.s^57o*_En-<7tu~yqS$~^T/ۙYL·QzZ3"GB3wQ{}X_TxnOU"^|~|:ezZS|P܇UT oI3oWK}fz1^Қwm0Bj;`¯zs+^Қ[`TZ.=|Di[z@{dDŽ Z3!'܇ӚAx_J@[lQRhfA,M#nmW_b͈ _oOHNg?5#R<=:7^)T*⑨u{7nh*0w_gj`U5c7$7ߠ)o(@RQ>8l1NEYUf$@"8HH6[B%u(K[ް[?n.׾;n•L,:ۭqs [a\5}&ls'̹G*FG?,Fr8'xO)}`|>4ss , .ڸn3m%>wUrڑg"(%ǵ=B,[EĶ.W1V#$^أoAs{>݃sHܸ꟨`MMpNV?qzz$/>\Gr~3ʾXSw e=B ic>(W4zZs%Al.Ģ6WfZ Y!nT ?H!|po @uM&`9'D bʼn2H(/\JCg~,؛ 򝊔9Տ{6qާ87?K咽MÁ"\;n`SL ,eMxf`Ȼ]?w5Ă}z]JpWos`G营9"Z -iOex9h[pzCpW*Ο&|,ط(b4h|{LםO=ع߯[~ [FoCŇ~|FEdBu}7+'617zAgDB'@sYvUCSY߯stzxF}Q/ӕ([F}XRʵ|‚AZ4 .JZfzn6O~| q^^j<וK"~@--dnnn|@st&RL?噍)IPqMKo~SYc߬Z/Y} >! 2P(y]$Tӻku;ҧA ##eӳ 8~35[AGPlq$T9[s꫐=~Yx.j_bBPD$C$Ȗiฆ7xXGMzͥm wU.⨋>v5}Nvw m(]2phnߨBOts-sn!Ϩxl]yx٢Cn~=pkKW̙=^\W[.җukU}uk Kls7t9n*PTյ0t"z0Ps\1n*0K4fcC}B" ҴZֶ -G}m*r'OYi/&U`z.@Cݼ+] WuT!IilR첢o7ihQܙ1MhFPv!xWn27`qТѠqčqV'#jԹ_9}G>ֿ[{Z{Uô89ͅ5u`Y@jMϯrE(&tL|Pm[#eHc% S_=^X_ [nSLF  @(T踱z|{Id8n. 1xg)$3L!ӁΆt ~cn-HsE}z?Vlzn(Ά9T2zވUf*ņ)\[:Ϧ( NVm /0@JUaf; ,\+Ea~4*u ˡ( 1>ii@_:7v~YPx96YI(&I(n瑨8 mQò{[}zyt܀,: +*PӴecżVpZNan!X4tB^O )mDEs9O싐q[֠?/[S 2#'wOaGe5|- EI`T'V{V _$95۪ >0j5U[@yhJ~V ?a~arZ&Mr W[͸|R̗v}XCp1*yFFB&4n5O5{&.pփd,MJn@#~.%"=W5Zޯjz@̚:xy ?a>UͰA84?/qY\!'֪M)8|Yg,ΕZʤ?SLPU^! "9J 7;n* ˃g~ٖr)-ω?4\ UJ# 7c1\rNdk7WvPJ#xH`"N|mz)n۱+CG{e&g64&Q~"!3+.i40Ʃ6T)`R A8!*s6)8@̔R%:Ζ[agKlA/HmgKb374Ax7.Fd]j r>Dd9rs|F2dL 0YXE[gʹZсK4zry O9[:H]? )!&Et%;!"92YKRdNDQ(M# U[ہ,: 4`AF:$ᦧ;_,]]"ńh:vU[H*D9)e{;) 0 "f]t `Ryn\| GUnn '+磲#>, #,E}.'/DƹSޕQY1x>[FK %ƁHg4HYz,;/#2p\?){27s6 lgCH!zOC.RdX92rKP̲y`;C%`Ҁ!jg&?5-Q?J!̰켺LK/jytC Ke/\|b%g_*FWFW!r_A&$tHeE!6XcXdR>0L$MqI[DC?B$C8aݨҿrIDþ+n-x9/-{r^%[Fq( ϕCȐ/D%ٲ-lp"Lg TCdim!Ci&MP\K[P^Ζ)œA?_c/lr [ez. z*ٱ݄w]xQ5R Aʖ=".lӷU(Sζ&89[yeQsgː1fW|Z/6ϗݡR?C0B׈d[FNq5`b# 1n-\{~lmP9lg;  UԦِCoKn;?FaF}HS}+퉍>$YcLz )l%W!"~B3fu]̠ {)˻^1HQJ5샚?QVk/n/4 2\0kdbX1[cBIs6OVm~]1${ '=VIlE>FH;sܵ>CEn%98Is6dAHF+%atliIH%W0ʤbafǒ1Jt ( YĥƐ܇!`OS25D ׁګRz*3( ܄uWS ~BٽٚF^U o*Sᵮ~ys6Y8j¯}MZWoys6jYxEW v*SJXhE(o6e4)K:8W,pM78 &-폳'Aئ;DѬuHYJ}=Xx C(D0Po*?XA1K0ib(dnD1/LC;U2F ̮M`f: b i-ߕ8éh3+eAu}eHz1D=O^lrrYLN\5@ L dC&zwg> sfMUY,;.TvԌK77?O@툸lߔ{Ҝe?[6^$]W&l}u$pg2T4cH)lu*;ʝzF,T2Y3BeLH326BQΖ!А6+lB ͐(lӹx ȜM<qM_93伯/ ̗֭k\fN&`N>-1Z&Q06&0wB!q !$d6S#(gR!Tq%7yD3 -)2ޜ R"nX ׇ^~pKrև؈0"tL,Ιl~G:Cb;A/Y z29MXoWe;[eG Wl gFU<\lΖ kA6ƨ.Cr:GU(٪oe;[(@}wh2&AIwg \k9E: n])mHKL~d!WAcC# b(m8,ϕ>$t .=b9A#"ʐ'vփg5[w$Kc)@!?:"D)IDC(l]~O{'ri~tY2Nrښ0* ?\^F(v. B2R0ݬEzx\&qhRZ6441h Ά,rݼ l)1x:NˍF#enR> .Cy|$7i67`n4YewfLmV rG} ~pU4C;o BlHٵac:Drw.'z8Dn 6eB\yT(QyDЕ4 [,ya>;ՓYISB:^HsY9IzDC$n#-hQ$נ8l!ٙeDid9PVɃH>'7; $nZulYj,{QR)jPҡ5').;{V9FOd;A9vkORaQ<!YuqJxycltt6K}QJE$#/B$i2PVɖ+;'$IzN`JzQLLa{4 Qo;MLA!61lYsHis kbNo0HLzfrr(z# _s,@OWn~CR`}-59AOolo ;be>%q}|:]~M@?(:'':YN9~`_zoVlxPJ,pk G_yzM&)=)Slg N1#VàaУnas66ЂY-) aF'ъ,$L[ZH>`{ߢ/>$k&c5TPo-L8H O!EZ #*S*mm8(Hs6y6Wrwh鸄2o /+T4[`3+CI`$v*QrTaϤ† xD٬N]36Ql #I5]ɲ3#(l <'*a.n/Vg~` I[*/|E؜MvoAV4)R3tegXv4^⁦? O3J'!R, B8qpǟ=}ozgCHDu;3YFtq6$|J`Rb4L3[""kr;=-g)&d-fy1 2+?^.;3:!_X!ֹ 5Kٙ:fcZ94ajv~%%:h<)] lE#; ~9[b6Ï܂ ^@% %B.Aq;)BR9#a1H~EBřBml-d~Ph{תέ8%a}V8B !A$8!8@h>˙"l 4CGɭsHf Ari&;wF]'l䀰OAh$SqԾT1EZgсihG`>]vUM Y3jHa0g-X~[jeg.§ȲU Ym.ڜidB^-oAʿ`ima*oc(7#Rr)!CC ^0i>Hr9B14gϫ(7ov6[U5aoV m6ܥUct&5& "8/+a˪WY\,@KU4k,@/[e&/W#ߚJ@?WLjHjL@Lt5& #Ӌ1[ԘޣO"ȏqΜ=M'rnOjE^1 Q~Tv- 0ě;5֩:Z+i8;{ zW,*.,) ۿ|7,rYA>ʆPFM'" 'р%;|DHމqI{&Ml^*lI5ϤE0ijO/lJI:O[lޣBIIuև}訓bLZܟ>Q޳ 2|uе*IbkLUͫF JŸ}D^ l^{)k(&4 ӋAyJ ۂM_*7cj*c0YԘxt*RǨ )Q ˶iҦ,4YK@l2--,쉥9CcM6B?^Yly h@+,37v62r DB,,x=>-F'g 0gA$Z-DLU>$;r V[zDQzs^ {rJZU1@v^t*@8Rc1a+i ܼ]p!oTȌRv8A~74T2J&-@~Z3hv>$ǠI:[$qsKvb, MEfsC/iI =jU@g@3Wc>LRFtyE&x@L*}B>5&W B֨t[yE&-}gBOpɰba&t-ʮ9xMm* S9P+!#,ʮ$豲hlW3S+U]c:J[ "jw04SidƐ$O~61Rv6i]PMfzäd|})pzgW*8By9E6QG@֢$iuYӺ2ñLB~j d;@jq8o~!BvT8nJՏ6v6GMİo0Uz:4  ~ԫ0k}j8J;  Rqt1d#br6$56kiOT`#S!Q7XЏ ʴ fa3e)4+q%N~'Fs:[Yw0x22kr )IYbۇ>bKdgFlf)s^6юP- XX(@îxnʹUF8_XRٙ~)oPĻl{!3l?dlv@ƥ%Ksj( !$ P=Y!d:eo!QdgH* {>]?W/7:A p<^iJ1`hO<Zg5L %NЁSgZw]Zée.GSLD(|ʣxXhެМ ْ١x&iPHnʈLZT~.EޔJp@l C/5#Ekmg2Tp{:JYc j-̤@$AAg y )E8Ab;A>A"R_6'9A~__u4hsߩi(l-8U)7҉$L?脎Ꮮ_' tAHY>AϳAs)*i2f/m1$Ϫ8L _C(xt~s69 $]ShH AѬ@`ҲY!>UdM ? #5.hivLb;%v6x +d;A*B!dҴ_20 }k3\,-?ByXnXfvП5sOX!.B}Su₀Sً;{0Or{: zH.w6A g.v6Hvp((kFL:gUڥ mfJ.1F󔩔ڽYr]("H%:I*vdyCHvfZIWU8( `M)5ίO/]m[YUgb*AD@*[lkqWk%s1,yà.Wj2`h$g[L{LrIntepeeص]/ `TFYd o`, Kn*cV)_`,dB CYH|rCY؇P>YXeZnAYpq߮_xt1y<>( YJJ`H6kpثl2ɒZ^aLLY&I0eLf Cofu (sևd&`(y%v=E^z͐2d\A>(|g A@Yj,\iNv6&Z'~Hs,((ܡCiKBCً`:Q5@@ Rtw5(s{DFM_7 <U$gU(b/"/ U-kL@\2C~Զ1ިj_JV/ vZ {aV.]u?0.Xs]+#[\`ؑ ʠi'v 脔_`_6J eK^$8WhUZofwA&aţֲϲy U n$r܏U*x5-!JT̜M.f: rVR?jHJt@}՚F@fJ K5AאJ2ib=XʼnBT-Qrh ! )MKTt TJ޻q[Tf3ǙjPe#`o8ԘámJZU2@4 m*jBVc )&.2ƐD&#!83OcK$j0m: sMO^0%/"+%[Q'qsPVw,e>sh+SM(wb8;Pcm /s hNl{[pSOx6wXU}A↑/H=/sc=Oٟ]0hyXd@{*VvE#|Sdܙ 1*(U$\9S!"͔glvT &\({SS,t )ˏ>e)yW&b҈tPjhŲ;}`cؙ.0Bư,p3X*Y L>ek} ! *Ldj[ʂR`L2VƉn6W): >+8/+X½/{ص271b~1]bp)1v1yGbpbpsmY] ~{y?5, _o}$&RY~a +8/܏P׭qW ]%F+PRtMp$fa‡K{J\VJy wc;A>WYVgH&:d^-i $_oRFi됡Vg=c!o ~}&1iee΀<-Bqf?DMk:D>^{د+~ᾟp5~rCⶇ2;X^h[㙟5Ӈ Wh 8Tql?ZuTUqY|H֛i,> +XuYka@^A?y޸,p?"ҧ }BeU~q~U0Bx@e2ƀJ>{5es t@~ZMBI:E]R U0 (]?LM0gn#"IH^s#@IPu  A>xp<:cRqv'eɆM ~Zmte/U)dW[o_-;A\+ GE%|Λ)?u"Mox _M{uuo෭ LxtҘoP @Ĕ!bU _+eyDүf!Y}kWUYȈ|U]ݻι>@e}ݷV:kժU]0*SDDy!@ I_m "m5˗\-y8WWԥd9rid$ְ/n3\ca =ݣ+M6D҄(Z-E@! @^$Rx_nh);T\ty>謩AYZMnxbMBo[j=gq?]e(-̟$+XuŠn7a8:L^qKfQܼdWm^h4kl(l|-CaNnOdΥeTx!xs7Txv/Kns񱬳d fD)6)Rλ-P '`Yq6EP?'Rv#%Lp',Si,h +E-ԡRPxN@^O9M- M5T&h  eUB$ך[Ƹƚ0R\ :55hГ7se͐wBQ@p[3QWߔФq jr @I[i]f2i4xrIr-{IКyP6 zf= |¸ZZWƵffY3zH[=xvȺ]|?\k@+os_i߃" ]'HE(e vq`n\f4w9Hce*)(\ %se5 Hs'*"@wK昚5HbF3Qr?(ssX8Զk廊_n {XAOWF#`\J A9쐎ybk5kd:!K obX:KԠInD,L<>O%xngjUg"(ܶÈ[Fx-Ij'1Q$akh*L,B ٿK-qaEJך_R颴rB^?#Ě!(Ql5c Rr; ><Mx)5C&K|ODkJJc%] @wQ`:6MRR֫'}ZS^ kjФkR*Ԡ$\\0VEe>ʫUK&hOUR ܬ~ ׆iyPShKKe{mT${unXz}h 'S̃5H~~i}Éj-byךyPIorfȝ b6>HMmZξ;<)BGXzrkF,_Y9˽&-3#G r^#,9˽&-{d&æϑmjB?TGtgؿg'W o*eFw\T;ݟ7t^:%%3=zI!ʵf@ZBxpؾ$lA'r߬ٙȚ4sX96v O{"eI*Zh*h( -7TLrBM"D%ȭĻՌp$riEU=no#p}U2n v\?e5˿ZJbN5*Lf&Q!r~gw!pNd`]E,$[ƈ.Ƚsbp* 5' [ mus_Pad^)!X%@ky˚d&&uFN@WZ\kAc;ۚRh u4 :% ³wP 5P y+׎PL$__ܭd̈y:> @o ڝQ|\ɖ~2Wȶ:Նݶwc`t}sPjt}:] ͝*<$j %gjs:Ou|OÂcM(el5M DB#6B|֜ Drߐknc9nȴo< )m/h?awz_!o*HsoUJK&2wuA"#^#AS1H:o' J~8䑿U!\l"e1!͚ݠ5A1ϟIErY`$pGRxi֜֜[U<:s2*Zzdzn,LdM Vر ઃIB?gwb] rK5G)v^[‚GKH`Xf?Tu%Ŗ25%H˿O8w``BU~/ԋ,+YZ. iy= Yz?7,*\suH3׈H՚9W(*PhqhEEx_9d6b+6'e>2*,vg0ɼHo52:1i*t)=0}G Eg-S,M BZrooZr)bX }r@E(@tbSĂB"= %ynVly)+7~3bnBZ6e󧫷ئbBVY8^nLp@ƒMeX6Kў>iY5ytwc)c*)XH?%Y=G0g)2MB⥫/Gt I}h~5"~/ܠ|P(fmx 2bע+V+2k"F1[yvFK7I{hܓP((MBnYSr`Ƴ3c^7!c^sٚzVF:C55(j4zFʉiQ eѾofݢ^tg5!w(zn)~1 Y Y)Z5\U]F r}Q `9n~4kj_Pm5ۂ"7+rk; Ht<,4dmWw>Ncj\= -^Fy7C%Ӛ}*UkrU ѳlkmNl @9B !;ZS&bzW}wӅH۫IMxQiդnu҄wْ H) Rt>@6xbqbS1‹i$%*#3ض nOg KBJ^ 5@ .YOP`A:{)J"=>3dH&ȓP7!Q\k>)]D5Ke{v;$k*[˸KM^ 0Bz6VȬtYDԠ} 7~>\Dihc">1蹑*(̿B7uGKD<$PɎWjF-ٚEK-y,^- ;Pg (jYʣN;=Mh0:@_Sh,?ābmiJghHwxB9yU*<(^QX3E;i}J-?9P݆û~I f rKU g:=jB+c?H$vZx"Ԡ]"c+NSzp~@_hDaSA!m=kgr!o*D鮀C!H~<nEd$6%Oo\nfVH{d~`OӮ@J w&r/=':n:şI*79+t,# l9{`mk ;!+ :jOa6qӕ cZ3}kwɶB^rˋ1 @l5=^*?(& koEb?5P+~_9(\kW)ȚDrlU)qݍ"1n +OpVMc<0”;G*A=WFP?.t:~k n_Ը&TAA+KP!(K gε ?/| šiN"n$%Ԡ\l>I6C+N君k}X3.9~aM ʷk$a? ԠkARqjϤ0/UL W7f匌?9l*K MH};=9ꟂBce;LH6:IՆ@% SΐlA`K.ʝ]Nm' HNw=y?#6H쩉ZƱJ& 8& M[!!-}̱B zՃ= 97$w6lCp/at*v%:EwC/h**Iҳ j٪M9 \"hDh#N_vbKT>7ɢ,bY[+駑ɂy_y \r ls֫YP| ='0^'ך>MPI;zl٠Ta4޿-?x^:x&(47J‹\Z|P REr k Xcy0cVX窽U4i(Kd>:1!g5qT^#("te\X gc[Aβݵ1v%sy^ړxM5: wU Śn(T^Hu! {FИs0B%}M~UaF\a2K c\,en(-䢏30H$0XmDqc˓? JF<=@441KoAJ55(ҭS #?$S#K%+Pr&f[:~ E;PЁr?Մ[2E,`1SI +*M7y/q~e7 yz~~1w2 ? X j(5A`vǨsr )P07KKvфB:i! آ$.@lTd6FmI emXx:fXUeMIMjaF' G$Px+n#ϟ)>6O ˒JrX#rŭam샻f$@jHZ@Jĩ-$\b;NHW h C4K**M1bV C~&|R 7:`W>Qe(OOm!,*Ci @cRqmk"Y%ٚ:’r3z<6/c5Ԛi(/tA04q,\ȼUI,4v <4G/#"l] ² 2EWa)b]wNͬf7 @yh7P`9rr}6.`_Hb<8䣑PqB2bR!@5kʏw%,w!1ágK>6bP֍ ItxT,Pc{<6X΂6,}x7MtYI Qc( ]8!RCH]2r_ ǩS̋0OT҃r @)Ҍ?R൦ѷ1 ̰$f4IBbO6ߑehPSh 5ev7'#g/ f t 5È=]ۯatsij#+vh[Lbb8 :3h*HlsTPxH#8Sy PӚPm1!fJ\B=kbbH,FBPM8DS KGASAQPI+ k5pR !vqfjt|l$ԭ1Lf ^ͣ UR!lhD c4 u0 c3[#29a1h" @1*xmh]yb~SINAin@-Kà$9 zc~@yڧ")mR Sf ə8!zF9@LSk/k#M 5TғJ9/fDL}fOx/=Y-PXZāxACnHà}[aQbDj&ғ~E:k\mxmg7Uy<2ȦztVn i#ֳ0 #>m/ >-ך/ Kc„#=]),9B&OaaOlϒDBSq]W[ 9WߵT,-e$ q1WO /LUbvE brQ(m3'v4K/fn&!6PhHc~ S@zV۸t(VSTDm /=Y-=PA!N0  _=15)6G"W*}TL:l*\~:wzmؿD@L~ LawUđOG:/y|*؞CH,Ǫ%Pc3~(SާDhܧLSAbw+nm!@a;~T 7@ qiy7ubS  :We&` An` .Ã:9@zH8-z0Z~>hB%n(}"ş]4 %&3?ݵ2L'*D{{[oB%f30h7*,J `cJ2X߮E1DpGe'OUm}\kAѮ>rV6֜3F$W[=x sƬM}U-M:k$OވφC{>J]neME;/ @Ȅc /0@4||u+ʧ rRÇxALP*iB{Ž2~at{'=F9`/ CD)M*|^kTw E2lQ Wg rĕxOPT6O}̈+O*.gX-xx~uI2 ° y"at%+#E{C?F{X,FL͒háVwAi8!@'w-jbIH1D;+@_f5CDXmBfk5FhT./(U.Ce:_ﷻMk{ɿB^* n*Pː_KF2-O3Y3E-wK_F&6E5P>6A$b*%tK95[xjJ~ :~7)c>+#W2mš!( N䥲%Ɉ#˚Wٱ\*]Z X_R`͋f|/+p}QEѮ$ ])_n*+ >2n1 SIuael3]P0wHpM{r\3W[ JKHͅӥkv. Oփ\ pJB 4BUp2PyHM/W2#!!ISi,c1c?wkQxziR1ʣZ'!1OF9pm默VBlT#S~rVh$ 틦-Dm3Ƃ?CƬ}gyw{kYkZ3g̞-EtD%@vxgA4?,Faѡ K'h:߿Nq4-~ Ƿ;ߺz!G'S1lfI1w8^]Iv 16f8Pf0L8fjIGn>J^#ޔF$XtdqKR2Ux_ DJ3ho .  Ԩ apB5,Pq Wd>KÕ{8A *>ő[]J;1| >o*>y嘶;c8,WҊU2f0׈*ӑT{ׯR=je,hīV5mq5V?KYJ8 |Ve&9 V,gjPhCGƾfɬ./ ZVP;(%>ŀ< KYimdx2{'f})>8lljT3uJc#JgXeܒIh/bL>,9dr&Ϲi,͸Lҥ)r8,Ra>Bc{Ц硆sm.&:YrB & )I+~l "v֪Lꕋ;ݒTధF'^b8di9+ͦq+?a8 "&$CR8׳\Lu*S3Q(gLSxUF9+`Ar\8ʚ-X|;͇q1LpZM(>UaTڂjj›n!ѩL'Ɋ6K`n?pm<cv-tsTfG*=aOzSppAd{鉵ܬ ?yLi1N,$"7yj/GoeHxx%e {MdH/_jaĉJ1n<=O O;?Şl% ME-" =, "Jm4"r$Rëk†fcgצ j8ڸr**Q@tE+L]|tWy54Ml>W4v>~Ӹ.;]5-X)adb?"޺f ̌Be]/&3]XWubK7;9 gf.yl˟9όe½h׳p_gsns`R5!? *?<#~.isy|xUxj?s z? r3/ATyWS* 0:;O:7b; ~ʙ3SH+,KF] "LJogaT: M\nv]׻ S50Sf#G'~uopm 2NоJwʝg{S`U;.rWPn{+p83T| NgQ=Iι-ɠvg>pF')py O[1lo+$[DџJ=\S2>Y_< v`/:>X>& T&u(QFy^ *u^^^I:FMw ZKoZp܍=)>Eۡ囼М|__ cV'QMQ`&KLݞryR9ܮ^39,&$oJrʹPBL=P9 C5>ע~iz$dKPY$=$'KiTHܥ=h9`˥I.K$@t@#ZA >۽i7Y6BDD1?F KFW ^%~4junVP%Z\Uz ^!K$"*eۓ?R-^ ${VT:ཞF_ ٶ,Hi~"lFϪF9I+:nf\ 31/ Fi@VR{N_QjYp?ŖW.VX>F kM5I/Fl^ODC i/Q這jێV~ A_SGAf6,a| y*HgvM.7T 0~4hU|@e>)0!otYiw)_c(Hه=$y6>mF*?M9lf^Zyޅ\:٨#$avn| o9RZ w*>0 بͰ Hv!+ӛ) :yM "eH8sᆔd(,MLÔ{- FNj"t6TORuСۉ邨} Z' ty};Io`5_r"gMֲR A̋P*-X32fڪ!UeʶެVٺ^e +Ohhw2=3k{= Y֓JoV2E A+d1,!U0@6̓@wgZ`Ob&t YcuN!& Ce (crey+%JDX(ŤȄS-/ۧf40@ ܁HΤ3ڂ|Oz=XB+Cwp|[~IT"S ծn Rh:sTY CWdA0 ZS)բ&*S`e`IQqI'G;5Ҩr7jP1\AG3. }= *@qdx?f̀H;`( фe[j9s;v  ҟ{j[G4;4>]UցYkir/ 9Ֆ,/~o E~TUö9n]ybu733Q ( .6eTk݆bfvbIXWTY1N(S`&kkEXߵYY ]]L.S ]]L5t$!t4*=^Uz`f`5h#¨P``zJ*S`ZN3. wP9~ ]#gd 7sEMZ)`Sw:0O+*S`f@\Fu2.;Y0)k?ՋJ1T;֫?Zx]c'pk~r`r~g8k.;a{`L13Gٮuy|CjUA5,wWhz6KFBSM|Dĥl+3 u *-İjɎÈ`mSCʗ I'U;+ [QY8~׼tûd{5r?Q~K+Tz ZՠgVՀ$\ IQ?wʹ5&ivMHtT6MWy`Qȴ@̰; ; . +JcV*ŬH50D_'B,l >\eLS``T/8-W7C3(6fE+l j<:kYumlQ31ձ]İ(hbg̚ꭼnM:S +SFYSm2|9#E *0Z]G)S;nzᘱz6~o'yMOcdڬIbkdbcX($OH$s3GDc>$|{ĉPLSQ#A51W*3`&Ԑo^"* NXl2fڪmR -M*S 3* e04F`?0rdMH- fM` דJv?.bϺ1qvsWmb$w]~F$xgzP這 u,{zɕmCo9< !geQ(N)VS9'O  q~aPMo@NUn<9 =N5u̧6fdK3 7= ,5Ա{Udbak &1G+&x`5zGhcc:Lh8<Kr ևgЉzsDN$/wiV-(0ֈ Ì3Lnةlf70PAFHtT6z\Fi"*W1IrcGc(U#L]"IVsV,mXLa>D6}x܎/q"(@0$N&DzIz"k|4' ZnfmV4iPf=3]آi0S%@b&ʠC, JɬfbO7u1gh,F+}Df^ڦ-*31hTptr"ha !ND#D[ZjF?ߘ{'w  kbc.piT&@Y{Nq yrZR RȲdTœ]~^~YvWTz!êjSCF(x x`v6WP&[J0cX(0XO{_sq|'=֤Va-0z+E[X8OgXeZTܡ؛oqg@}Wh&aŅdyVlQ/*?\Az Όx'OvTXs qˇ{N{KMJ72 7*3 PM3+5a2f.FٹMe1( ZL&^غ\9:,4SUq\Y6=3BqY/PZYAey49ER}Yشnp/[<[zVņج QNSzaNs`r@^ƭkLauWd; I$6o5qHe9h̘Etf.\Cgcg2 4@g{fW޷f2oA]A [@xwVٿhV%X+FPAc<6 b(Qb7z4nK xFAG Tbry9yfyGÔ_;cotq5=#%g;!xLa()_̧׏ f>LO|KO/bŽGZO?''N1=eJyw|ׯHSR6RG~%>l)߰Bѷ>|!'8hRg됞g/ކ/(s;G07\xbqQ fx<-pيpus S2}OgzOIGp| 8r*LOGomG ^ 7cܾ9NJd\X/RR%#%Bjx v^&a?7 Q{yzvRҟ{ZۍlR2v&%ڝ VWڧr0۱ ]xN,}/я heb/߳Bw90%_QgN:?SR%pgp"LQӇ 8p{)zFOw%tyfJ^%}@.ڻuϝ[. vWn{i'EZ7-w:@ S2U8n :؛c3%[6l›T8;XL1o&7VDLag>ߊ@bz;,%0% : ]: vLwJ `hrkbO)kٶ܏H\2/dمB筮%  ~w)u\(M~[}>7/V¿5[ xN?d_DmHe_xd~cLÏRp9\ /7pڛ-p<^o1n nOgs0x|erރS`.]{ [~? /É wY\d; \'㳔G,k؉oquaK:̏%%=y_Gۛz)念io==W/m)^h,oO{{w~xޕ>,o)Uc?3o~%o[n~hXJ3X fX{.O?ނ}l}NW.x߄_o`JS6cL0%%ջO?%)ijr-s\.LQ@}9R*O{b Js낖%\gE3.C'\ChzmS⛥\z zӉkto;߆ju?"6)k޼س:ov2 g7/=ω?oܲo>{_P>k= d|~?:RPk~/}O=%=0%I?2ޔ{+%} ߪɇ/82S=9Rҟzu /E{!a~~T&~W^N ;/%WO{]K,H]35,!w5+II{w#o~O?"~o=]`z9SLO~oEMDxYޯ.O)џ Fo7^~Է޸nvzO!_\Wљz>LI)_wÑx"|~S2EW'PRtt)/7:[|ٿ]{yɯ=~ g#)m'\yg0%#/B}Oȗ`x= w;~_tww.q1lBϼ@xK ư/^ Gh8K ߄\yKp7~_uNw•,܈?Sֵ 3p.ļNXc~{f8^b]x c#ٔ!W c}LBnp1Xg x;|b0%\:3wgCܯ[^oOI5Ўd AlO\ǖk#0ۏhvl?8o{q3]^C7;;}`/Q7mzPׄ_/m7Q~Q~)Y~]KI|^M9t7ϊw7yr8k#oާSN紏IOg8W}ϿWɿ*70 >73=(y^]<O7%w{7Sŷ aUSLPQWR2?}j9}r$|N9~})ϝKhCuY~__b ջHxˋ6Dz[I1~O;o<~=u-f!)߭oΓuW})om)C?_<:s8%KN늿pyד|16a 8NO__gb)L/;^wB~cWWkA*?{ӿ] o8v'?ׄ3*\#x/kH%Eݥ~$׉DvS߷ap|[r8r%~gBq~ [gCC)ܘ|{{U/_n v'~ǜ%%kr3dI^C?0.t= y~nO7~~Wa J&;4u_zIG;oR>w\O$RR_\zA)M!9~+g3w_zc~R{Nؒpԯ[- ܟ+~yA?7 ᔴ\K~t=J{WWp7}XBs߽.MJQ/K>G ;UOM^;yOޭx~y5/Oˢ%}?fxhRc7t*+_7?Fpߑ0N$[x*Hr0Lwm9hg;@n_iR]BI^%>/@7vWkBs=_Js}9nݍH"7< Sy~ϝ#[V.wHyWއ SҞ+Lԓxh=}v]/p =|>C Gy[ u9dAzP_ׅ[< vp> n<{ܧl~?/<ép&;nmNp  O~؋4B)P߭[h>iJ=f=z`9ڊo=pF zߗ¼yq_)yl:f;5rx~ ߀=rw6SpVU=aJdޓ\ yu\pbq3/ىvsW7t]dJ}=x7ML;#b}K~po)﹁_or#]ʃB%_߯osJ~zGKKqf鷎-sUN#B![-LNI=GXN[YQO ~+ 7=|eUdY\Ô6K}{SS_)/t9p{a;- ~s|?g)<|\|I?S^o9 λoG}AZ7> wk'|U=vvO"ԯoq}HQ׸/|MӖ/uSU㯊27zI\p+/F>qk~8ς3~K܂@[xz^0yf&>^ϓ#wF:9w湿+9^)~/Դ뼵k)ia<+goM,g)}gKQR_|B{'֥Bhᕲs,~Bvᔴy쥤דq}'.hyBI5V?n\/{:+SFo'~Ӄ:4[>ݿmsu;?^Q}W3]wwRfx^ڇhϪQU>23v|ݔ,wv}nJ;pO`J?BK'j4C?ѻ-%=7mZGsXj /ssS]=OȞ;>_=_q}WHƯ軯׬YOӻ~ñ0?[SR\w*Z~}~z~N_$?=)Xֳ7/zdoؙ|p0LIo\Q0%9o}ᥰ"4ϋS2rꕣԷ\]Jڳ\^CZNSRr(`JoN}t* ԯ)_USRz0MZ/RR|G0%-~"|s_9Y޽zz_/BOw{aOEJJ[SR~{ 'B֯6{Sw <^sb?%>lWfSd|7r}_s2޵B7=}>E[u}}Udž}!p2t?+x/||` p.%'[]"8 n|O/TOx '༼_ |N;pg3N_k/F |߁),k/[wr^h v,o]o;N%< e}2^9rooĮy?Co p<τqz^6+-!8^p/< OgeU/ g0|>p"~ S[RO,sݗ|^t,3{{[#]!%k֧FA֟[}In.%`ʌ~dLa9xi/M)ێUsqmߢ}ho;|8~vhNssߒ]ըgz^G/O/_O`O:[KӔ̯ L{)?yHo>w"ᔌxݟ:~z;%; RR"{yII}iv\O^OcT;NJ:lכ9ٴw:Ox=%Yy_#0%IRR?r %'B:oU)sy{{sPx^s^"%z>%es +ߝy&II}IN;:o\rC?RRc{m:I;:blEΣO{>yO 14\~}ԏ<]坄G]hWàA=L1 ]]b~w* dAEH-)~Gz[sc m=o;asޞGx$|ve4ty{ 1?y~ `vyB8 a1*n  >O%ߙޥܡ m8F?x~;я O{\߂=iׄ?p;up yp7]p?!xx~o7' `#t~x8nsx <^ /7f΅4t~w"Ol^Ewax< _{+8%a|.xo8> ߃|K{ 8~^\,O$2 ÛI8~;A x GC{)p?)9tC{Qrd[s<[yO`s=DR~迕r}:ڜ~uGg;C?%|?/9Cw?OȸdsS㇔o(n#<Ӕszm>6ܥ~WJ'w)_5U)_5U)yŘ_MI{^Wo7%ySRj7%SRj8%SRj\U)_5ϜU)_5U)_5oU)?yz)_5ϝU)_5U)>nd!;oyj?%SR~%äRR=AJWGHI}s{ՎS\W{ԯz/S ^WFc)_5G0quGHI0%ä~{6^eJ\p(7CKp'OGw'xSRʯ[)q#$t!~)it.; g|(_$UxR>գmemԯ+Ez:mNZߌ.peIO7^$%HTg]~'}N1Sw\Z )m6+XR: P=oxqKù] ?ڪ꼺s,tW {>ϧ6?!xݵ'6~쥨ү}sA(qJ{WG}ެ@D[g0E먾,lrt?s/~=Ku'>>3s%?+%Y =>/=={5;xRҾ6ދsRԯm_c7.XO\o)균oyvuP8>o>~ә|N1;? 9~2))ikMޚo㛒+8;^߼g=u[ ˧Xϴ_%hݧ_OI{~9Ҧo}vB#[~wwx3RҾLOQaP}7Bovl>}K1E3_X4P%?֛v"=gЯR_~_a/ҳ! {NWK_㛛m" n?"ݟ})u#/sR/O/aJƟճ?o}NISJ}r~|<7ϵM~Qž^\y9So<]krN= E3av#?އh=^zwv59 Eqc~씳wS鹗Xo%}Uz=gq~k}L!s {^~\AQWU.R,Ǘx$y>ދyyt}}\O޷,)aJ}筽)r~饾L{DWcSMI{ېnk:SRq0}:xMϔ'zNzȶ\P΃7O@Vd|4}v_Ʉ?68}]7_ǥG! Ů=%~?R8 Vg}?eK&7~F\r]ay+/`8w`+}cdOOX ς8vcA"?^S2?kI.tb>}A8 gҗ{ .Ec,\}k±K3~H} )Ot] v8ّ8ڮd|K|}ݝop4w4{pFogf<6&<d]3{ y_RR*,IIUϡ?\ߞ7|돜p=SbzIc}v?hžߌgE<'P~Ic9{H}<]{i{4ߟ9Ϲ;~7ݓ~ۡHQ]uU)7z@w󮾇|]/>+^ mM;|>_+ S?^ ݏtޖ'uؔԷ>-Iωw]O?S}k!3X]|ton-uI()귾VsvmP~Es}/-='/'}׷nY4E[ӧ&M~Ev~y)irߍ VܿڇӧQw}*EL~'ӧ_l>>SOӧ~5}{gxgF: H IcIiA֒#Ҧ5HUVztJ QQRN!_3s}M}~OK0X® +*g1`epƕ1oWS~8Nc¯>ޗN2w,_Suy;h'NuU咒,7!~zE'EZM~wg +gGYGI^|]+)zr&~˧3!isn{z.?i0~׫)^G=jV4/,r{߾HOᤌxYxZٿ+v9Lį|3ķ:h7%ʕ~s׎4[{3=t'YJ{eX r ;$_N>M T5)[q:+gzZ(w~L2Jy!%ۻz;I1įraߓJ~ߛoz5A:A`ym5zmR~(_]_oIWdC/àz A3;=]GX_{0*G+¾7a`o n n ww/S/3d}U'߮7c(ۍ~8L@5ſwɯ0Ǭ}|g}w(ώ8p~($9ꭠ~&e~!_]ȧ,o7m |(; 20)]cg Մ2WNyA%߶ޓ6~O2I%>_Cap~Sf~~rI#0>-)[zϬe*:Iɟ|I{|u`R6|P'%v5ܿNz;T{!IӇ˃H^v u0_֫zm]7͏x4nRWy)}v<^{*1M/;sg-U!i^=%d0r7`kk/h'e~Ǐ~Գ`G%e|WkWozLz^2%VXkme|@mZ|!}!z:NJ~"Sw''%||0Β}Lջ\=*|坕Tyʧ|"wD a v5I?8\z[?k*=^R>)oULJ~ &Ջgk7w?";2_9"/9gz'ez6q'_2_SlgpuRƳ:t,aM2K~b|:s`m > \ >Nπo}ӎ~|1%NOak/}\P 1_IiW`RW~׍2}yR7OOoN(w_׃I>))[틒jߔ7 /]_p <~ryF震2Gx":XN&e4>[Rƿ&YY|'+`R/|9y98Nr^О.p1="v}ֵԯQosCR(>?w5'31P?5F!sK#Vuo^rq߬aSڧ4z^@=~i]zd?[>Z>ه%e|@w$%8q-W~Wx̿rwQ;nïW\jx3)}x[}ObZ0)>|y|_NQ'GΓ(^6/Bd7.T΀?oۢnI]C /yxWH}wS;IY?U$%U=&ZGqs'xߞ$m¯ի~~>@xߣ$U׏~?ho4O!Wk=)o6$ؾq={$k;~A=0hgQ{U:O?)$#)D`;OΫo;~;]-&e~჌cR]wӿ~,8%eU֓L{;/?$k]_#;)s^vv75%[9#Ȑ4_bu#ҮW|z+[p.-I)op.iyw'[o󩐗@W~L"w/۸^{YwWUΤ,_U?Kulɝ.ڵ`R5ྠ&e|C3U&%T[ۗYOʑIv9TSNWr :\izo5|1޼_R4^!<|~#$ۣ+*>}r\ދgY,~v~h~OW\kWtwz7eMFI zMJ~Ícz_"|;h%e~֣>תzWoQ~>5]9F~ T?9)P~G k/E]v)`R Ò_{ݾۻ0)#W> &e|U>sRO.x-x^ʭDXmN!FvOA.OaAv"uF~[ہۃ;cq@~YmKIJ~סzHRLóAރjuN;MIUO%!+iK|_GU&yTɟOwv>j=?]2b[Nl| Ty0슔gUp2Sl=He~L[㾣 t0G~~'-:`SR燴{Mۡ޸]n>7]Fvm(_~t%e'9۝7PT+o?`ǕO2-gM{{'%rxyd|*q9WWӟ~溧 j| 軶Mu4ߝNЯ$ p6}v?WR_WDK[woIYz|%%vsIJz|sZޟio9)pQqQ2)sʧJR;n=Ox$e|o?v@(OR<8BR#yI?:ߢ= RվgIǤM囕Gӯba"BP{-SӬ_I#2pR!6I_$[f~88NӔoz߳{>r&e~2z(Wy.AG鍿z; 'u_Sܿo^v}^@C!s瞄ǁǃk#pA2(;s~߲~A7'`R>V5|| ^M=F߇lݟz9-)aD:*q:7וd~:.*WdWCl4?ڏ]d()=S7|gN|/zw[UMm[CFX֟~ͯ/3t3?Gˤ̏~d_@@=ڧ^|+wU,||wR+ERWz,{P"ڈ}G`<潬qh`w7L`{ xN4'ևJ}j_ykK\wye<h897+OQ#$eտ3\!-@=xI;']R'1q)ע]J2>s|'%Oz/`r:~d~T[;z~߻HRS~@AZ??-A8)](ew7=ϵwpzHlw_VH|ߕos+~|T>)u]LL_͝_,oˣ='0 zoe_/QS9,ɤWcnu7YI]}Vw^M5Ww/~'z.a/$Kw`'Q+޷C3zڙL~Oɏ9J}(PoͶwo<~r6E}j%eyr?=oRA }LJ~Ϗ}}vR$%:xr'%v"s^Ro:)mG׵FRMIɿ! Z >j_cId'_P@9h@G+ k-W5<4R#-AWOX LNy"W*Wk2sg}j[7Rojd_}UvG[YLOIoWOt$u?]O`dޫk$)SAQ;I}r$kϖ(W| n{+@Y&ezjVy%#H#p}R6ws_yAc%a퀸>߽wUOui_يq^¾_+Ǣݞ_<5YuJ=/>\GZD8)`AY~9|2=kQ~x~jH9<>FR~`Rv͵7pe2BɟN{j'wi<I~/2>q>I)vPS>VIT=wG-IƧ>Lu?(ǜ[k{e3x0{w~὏Ysx!KwkIc?xn~X|ot޽ou7aEWb~c}'|OSoρڛ[ys3!W? n 'I_~Wnڃz}KMkMif6N.xgmỤZ;i{#Ƨvmoڙ|7_9s];.9_\=7^@4U\<<>+Ǒ\%-I_q_yN<r/]I>5}bR1I7GY/ρ V?5㽘 Փ2Y|iҎ$w[O/䃿-L5*odͶ_g5˟}[9ߓl?˟ydoKyIU^Iy z1 z>4<I[[t]hiQ9lL[JI_ ~}Jȇ%e~gz$OL[U5{NS\7kT9eƔv~?2hwO|绖z>ʃzOMgp~_Iy7+ߝ*NBj]ie??ֿrY~;.|ھI{ey zIW=$F @2݈uj>p$e|7TsrW$e|>Q~?-Qu>vp^}zyt_ǒ?vۯ>~5z>l6/_ *P%g=_s_: (cQ}ޢ+Ƽ)}p®vJ75i._/R^QߍJ>Þ'i՟y{Kx ӏU|ΎWU%xW޿js'e||FGGH~!o=\7|s^NJ\W(w뼟d|-+vD?u<ӿhch+v_y,lK3῁'qWHgy}iL_{Zk T{N{yy,›?M|e~uGER{)E#VϤʞ㵧z׎ϸv>w1ϳڥ.DR֗v~~xϣ,WR淪ޒj^JJy3=WF}yy"ڷWw16/_> _Ow_髏zy{r}n]M{=FRW}G/?IePdSޢSՎb~~U}X87IY_Mx՗3N/,WR淪ޒjIJy1IUAϩku+3z߮STnK/*W?{iɯ~i,yU}*^]7Z%/ym\Gg);SMgiO#)qPd_q)wh/P;Ur&ezﳟ'%ǤwWt\$߹vϽ^W_um-%;H;ڇS*>aP{ʝ+"μ\r?wGy{{z$?.cE?Ig'ʕJ}?ޫ?gvxx}Z9>+2q㥝/;~H>6g2?I9~Tg㤌uV;I_y(wߜߜl;k )/DγIɟ1u:'_e=ρIɟ|7cH%|ຮ'%~OGS%% |0/7l\Ϟ|=/R5o&k Na~ 1}MeRgbի2_ZEՇQMI0>NIl2f1+KՏNk>M7ڇ*'8v~~|}x%%;%=x?d|#J~>w-i ޵__ʍg'$Ջ0A)[iG!@w2=={~|vW2~|>OsWƛkq"΃)v3n%8=.+azŜAx&; } ~Lr?!w֫? k|ii?%)^W^G;ΫIG6ex/ RV'r.;O]S=+^zAQv^]{h?5yM;K_=\]'ʳk[=\凜{fV~{[kJ?{RviWj4?0uJt_d(n i^ͤ?f{Okޓ2$ A}WWA}*MˍG懤,lW Ku*j{jdoٱ{=:r]$^|~{D;=ʁG{}RWRu)P U~I*?WWײk9A5wglz%)nRO9(]wGҿ~TIw~ԏ~T0zHcB*IA~_jZvbV{}U 7*)P#a% 'Sa"ID!QTL1F9^0L[1/#8&)P3/h^yyi~fdz^k_k={ϮƎ!F7;}<#;7s?}-xqo}|ijw}cq\zr5]WW|/9y/:??xS^}l>lGm;^98?t߅6s⼈F=Գȓ'0vO|w.yf;z?'*Sv]6Z޼~9c%M|Bkvgݺg}nW#A -+AW~?KS,h}Zr-;g>4_}G(~ּpl tNP>~{QG+7_7G3(|q{;!c?#h 򃏆'zsP6ZΛD^m1o8_y_-cg`=V+o.N7C?oyj~w֫K|{ޖgyyuC_~=>+gRk?SOOk~?Wv~[}yDޗFKߺ#y.Z~g7Zyۛ|fsnh?s˯SK/'&_~Ow3n5[}ho`Q?e{v .4~q7G~,gi6_<ċg ػgү GYz`BO ==ɛ(?e|~!;0J=6w =(Brׄ7z<-z![~=ΨxFh4ZT5^8Ɨxfy]_o%]>I5/WxX~w[ޫ[.Zmb >8ڟ]AvdOp.&G ?fgqz/1:+?/ԺC+OwCBWB<7g29?^n qE\KzAw~{?_e'g2}qk_wC}\i]x5[Ȩ][4z}fG巶>쑽xU*Wo(죣˱/'Ry qOA?ݷ?4:4-~K|"F˟һQP{ѫAFv1ycl|~5-Cuر3:wG~e_*қ,_ﵼ+MncuXC~r<옾Yd~>?;s1qvoh}}C7ȍoOjQ} 4>W闷6[o?% .1#f]?{޿{ dor\GWFG(gF{:f=^KQ@!%Q`Q}gXG9ϷoX?^mw1/oLˇ<=C4G6[fyīIi|r|'[N N|QG'jCcS/0ٽ6Z\)ܣhleg|G_{i/v*M[7[뤼B;ެ>AaEltWy? ^1B>AR5]9˹-C'-{|c+?n$g^-zsL w`c}YC o*O( V3iwtFy+Qy+;xIy6s}|/.~i%#Ǔ`v"! w[o)-i|6#-3#%vgy΍] oDҫ쥭fFWyJT w"9]ol~`doh4zhq0Ww>ïUȟ"Tވncgg_8dB~\(\Ew~|n*j_.#?/^c?{8=Fbk] c7q"~SY,i^gO/f)}`9#~`ڥd7?6gbQ'_"0yiF= ]h/?7(nO_{?GOq;Іߺ־ڮ-9ӢFk{yCmt{$]F¿ĹvG3}Wo:UKyg_?H\eo[mQo?}R~;nxgg#8og_~h^W<Ϲ{TyPiyj5Z_+/?evkww?XkFwrͯ}\jGvIDžQ>q}iϡ}_P|{+-Γ#:A򖡿=4EȵޚA^Cy̾^>{O]'|}GRF<Ӎ[TF#S<6;f E..]= ;7nD92N^/Lz4_Q圁=ܹtX\hMվνGa?^=sO{uoLNOih|N_^KBz0Loz}B^VJ=B~u_\ɇky3? cp+NC }T艡^KC/ 5Qhk2}NJ=sBV<|kw:t-^Y=VAvCЯ~3t5q@o=1-tqе8u 8T{w>;okhwnⴭI;/Y=z/ e~[{N;*nϺrJ~wtΛywNJ}*ԸaF?4{g9-!ߍ_K;4߼9ڵzeaKc=^CyrPya Ԡ_zXw^Λ|M67k__<̍]ջ W@܄vD~7L!Γh(|d!e~O~"Sgbǯ(OG~D "~DgqOOiC})}I}W{,ZqpQΏmʽsr;։ϟ}<%E8drЇ,?Sm~2'?F;~Al_}k}6-d4ygү_Sa/g9/w^,?ÙyGw[֏_kjE?:7i>ƍT,݃ooSiWF|9qh=z\5ogvev%~zOE^"cY_zE|6>nлO#<%/xد~?Wg®۩ѩCBFrJw-t{#Sq{Ϗ}IhGΫ>vRy{略Uշ*y|{w/hn[c~'% ߝ6Zg[xU-ov9kعCX ]>b?}wQ2?[b١-YOYwWb[h=4C7[^|ynwO|f_ܧʞvI/~1ۨ~է!zΫ_c#ۧiǻ>[dw|o&Cotׇ.8~6}.^=h'GD^F˓şAgzw vЏC^_yMa,uYѳ^l>|"h~voizq.?Xi?h~r@x_sխ?ui=)]>g߽Q{}t. /;WI>kǍCz⳴|?=MLWyտX_>r/͹r݌A7oq額?5uqhy0.{z:.Gfn{^[Sy+O&T£GO }fBsnPq ;&趡.+A }lɡO }g>zQCz4ˡ wQ =)B z9xř-/И7u5~7gf^yYmO9Ѿw 熞T.'OBҾ?v1g{Dy{{"32 W~E?|1z9GN}՗? 8RNY4]Nzpo6}yo{-owPNz-o]~5TF˛jFk]w{y^t]O3 ցOyFǼuj{;-jYvhݢF˛FE )?ϯ/ _#5?@<]3; ~罍h0wڱYn ֞?} ?f??y'p/?zD3?FzG8C~TGχ?DFG.;Uj<f{/{/#ދFcc~o}-=|mc~2W'OsңiG;^4CyaO\~!q7džʟd+~9.?'T}mm bkyv~ThIH-#=ltș_}٘o{7h(gq_orNkq [~<;]iW}kZғ_H/_ƺROhO6ZS<76*YTq`? rY9gcۋf j[϶FܫB|:rw>4~wxJFwɴ/Ϫ⫵_jODvP.G5O?\ZFyF7N6?5."ƺ>=7_<˿+!3G(/ȏӡg/'>~Q?د\ _=_6mh~|ꉯiu~B-߸Nc4ӛ7κ]7R/z6Z?w"8lŽvjG۟۹u#@97=oQ^F/^z+_s%.ϢzhFoکoG(G܄Fw<>\e>σHK?֏-{KS.{9 o5Z?dz6Hr[!45ڵ!ov;=3 :ƷλWƯfߕ#P{ NyXw O9Lj)uw7/6my'o~yR^#[4U_7%_ ;jߏwZл"_o~WCKE~KSz76浓{AQnF뫞ڵۻGZOϟ}?o3cio|0+Ok_W~c>1?~N []^.uƙ>I~}. =Nr-oJ<~yBW?4OٽԜc||__ژWgtH[{oo7Wy|W|g9#w'3h?/Z>;^{ҺyzGo;l^m|h6Fwo_N .ݏ=ſѿ7I7 (JChIN쓣| 97c~0_C>o2F7>ߨ~EN>+k_k^6-GݍS?rSigS~ ȳD!7vCžSCj&{ Ӑ׺w#T}=yl}&^[e}ϫudS\E>5]eziqj>+PޖTUה_˶FB-|?r}9?Q55|(:DETv6@̷<˹ ?7v8WY6gOY_<Ν[/Zw}.nos֩'{Bh٩cǯ^8u >94? d|6[!O^XZ3+:rΙԃ?y9cwyiO}Oٗ7ݬ>s8ޖl)Knor.oFh;v?ߺ[|7/1ƣȌ+Pl^<>C_zqY_z'.Α{._|yIX}? |nvs?W/O/<(hy6${OHgا6z)];y=qtJh~{F~h&i'ykݺig|!}B=$ =8S]_OUyR_I}~7TZ?sƍYOϫ}|7> }7|ϼS>}?p_w^G~;{-k駟 m<NOw|ژ'_ |؃7QF>Q^F#>ҼvmʓF3Ϝ nToZowA?7e_#vSh~y"+_~Fhc~&Cyz_:Wg^3|{ZmTqs[1~ouw{s̢K;[pԠQ.5=c~lL~3 E~-_屏hy_^ +njww;?^'G?iKזG{>g^5|b~Aݛh~R7_ghK#F{xw?ߣ?<:oeϹ<?w>0{EZwszֹ{3]<=]yDΓ'){{~kȗ-nK> #W! =]{ՑC>)١..]-xvc69l?Py{;?S?[ڵ_C5۲2947ྤ淞=CZP.C "o7cW 6Z9U˯YmnN7@{hyT|iCB@k7Yhymh4 K(߸s6fmfwQV u@#(NW BLGN+QDl"(qbJ4J$&?;|\OAIzw{=|{~d2ig^nxY/e!k }?/Opcc"z7[9~OexPAۆ>]l-_yאgx7-޿-ϟ9??;p^ nq>'p;vOQ-orig'yyhOgf߼Mc*,vQg8e~8Թ}Is+천s^y<}&79Zo!{9'߷]߻;|wMq}K _vy6OrϼPʛWΪ=ܷ֑ٿȧFU%-?n=_:f'7׮Uzl_v>v֣#¥A~ãާhᗔ$7:>jNrcw#_G~[ϳ.:<75ZqT%h_1TiзO{_o^!|?g7dnR=1η3w⡏}GwD!|ݻRN|NՍ7t>}w?g4g咑QvNM?MvgqH~Ct5:~%竍_Nz$S}i} Ia{t >Xce^a _/+IvS٠岡=Mᅳ7/|̓o/ _Q'1T:F8Ժ/=t4[rs8b>xFgO4/ҲsqY؝kWGZgL}zi~Wٸ_sd~7Q]̫?ڍFϋwi>A¿}Oi??|ayV y.3Iӑ᷅^{ˣ~皝g~].秅_jIt6:}ςpE߷×_/7 #M/}yl>|7?BLxg%s>Nٟ]n ~F9>6I˲|Uj{@a_ bgcʬzFr|Gߵy/ ?,Kav kG@mæ?'?֥YJ?ބ?O g}!)#_uqiGn_sC`ml>`1>|$(4μ<Ώoi=߸|oqN[kuτy'qN3@{ eaٌnh3sD_~kᏇ?jx~O|^tn|ht|tk6:|Fc/i_x}¾ |HxSܯJړn7]htS[+,o>ʋrۗwQ`O}1rió:ɟKųA~#?B^jye΅݃uqI l?g|pN1wo?G4[ag|?蔛[GazS};caj1wOߔ {dh_Am~E~z_ACr$-̓秊uvrgNy[}'{J׌~g=/^:?`~}y·%<_߄P3/4oklG7ZtΊQ ~dWQ`zv{ߋ?晽7iKYae<N 7:=ʣhy{{Hݽ`=KZsYRx94:?Ż]NJt~%*0h亜ӘeԜ тT~!ga\|ONnpAnt|J}d<<_7<&|T>IyH FGȮl!/6f7m? 6{D߽`=(z  7Z?}{}s®b݀nzuF˛<{5yVvyVt>8Caow?qCgpM5o?}#`ğ?3 3ս 5<\Դ''P#ᯆsGǵi_v [Wit|V- }uS30Wk+՘Dxo\˫x5Oa"ϿuI!k5[`'/cծjmyy2?&o>vR/ y #|lu-iO2IhO٩f|'|${W^Fos=g &qhg%֙yurou};X֗z%tV:¿t7[_Z/:{E{ÿ|ߠo#~ϨkSq}ߗACx+ ~i[UnhyuU-o|=_`=n}φp?69^Ƚ Fi-Mܯhyy;!=$Ap_%-wE-ļ0&-BOiF_. c_jmw ϳ yg-IcG|e'wmyoÏ 7ZyLJS' {~m̓7Xqhtu_6}Y0lJ~;~[G[Ǯ6Z޺j坃2N`#0O~yQ~΅Snc.ɺHgJ֋ƱOKِ>htxO$ L8S5d'!'mȋΙ7f?;/ndϊ|itg,;4fɛnIW~˳W\رsXm}yk`-ܟԣW?G'᷼ʷ/%7#;w"~_fCʳ;/K^dtp;%>>7h}o{hN}VKμkyV:Q=֙(|0>&67::zC  |ZM9?\a}*r?R1K켿򟏞Ն?+_/lNiu29NT4}r-ةܓO.]Wg-=*^x_e=qwۇrO's9 G3fx]A7u3`ۇׄ׆-2`ok_xߐ'~4O>0E·Ni]zk8绥9Wcզ9YȷF-Ϡso~;X^X_36Oi_>uo}B?B?)I_{[҇Gc{.&.K9~V=^fg>G瞧Fy#?%i~+>^~sއ=]>OxV5:<Ąc|ov_sv>~?<܇bR2cGvf}2o;?$qV y~؟['o C}u}λO`密>) %i_ q\;L:o|s[>{D9j_A~!1CaHsҚϏ;.3~7|e_Ǧ_|Y͍Wί*<c+g}r( ߛr9{Uᇢd5Yjt A K9o};]k}GRߋU;Oy~%ᷤ6g;#?1A? Cs4/\:ʋW ?;/8|ϖ.яf_D}"+y,?>!M9nluD?~þ$|m_m/tx[$~w ?9hy^޹':[J+Wkg.A~?qzd}A~9gGWG3mзtՈk'?fa_z+՞;Vx}~I'&uyy# >}ZZ'rn:}P~Nʼnsez~^}=Kbos/Sb>>"6:k+~v [k6:}}]N`;՛yMڇyW/䗯7,ünjY_o!>+?GƏ{!-O?EIooq~r߰ktx|&J{zyao=g'b~ÌnYx-yPq(lǺ~dl>Z:"Fʍ|?~;jm=֛X4`?=:|uaz[mg8˸.zA׺{77Mt^z7[|G2~Y׳_iǤ=ho3޽u>)/tz3[3O¯ oj~JGl=Wmm}Q}ߐܘjC-~z賎]Ro=/S `_<w+SoԃFW1a/;K~yܰy}N|7˾uKO_etJWKZ_?=|{M_懂]gܹSwtO!{^g (lqq~pcZz}@oOgo^)nb'|M^?U>ƃa=z?Gy>+<< <,ˬzWd_lˣr+']ww#,\eîg]CaaRos6=tz02@"Kߍ_Wx{~ ؝HwC|kϸz2ݷh#vaOn:}$_d;vJyyrgLCэi|o5$٩'OQcc9>Z}Íϟ'\W;/Uh}eF瀵6Zߺ2nm>Wܳ{rv`enз|}~ݻ|I׆߲Fc/n>7=珏(m4/z-;7'w_)\pM'?H?3[9KtK_9(|T]yntwT><#WCk:Ͼ|_ø| ?4Oxo On2 ;o)|=7 ~cSß27z (|huß_"|UxзMễw ~XK /|sc@x]~z_/ _8 w? _I&ۅ]>|N~jvԧ'U?YsH*j}J>n̊o'\;0>lH;Cׄoz]a)y~U¯ >-sڇK}:{;~<9~0ϯ 6=0ׄ{R.N^QxCWo[/OF͏'dž w~=8(:?odzw=K=G Rŧd džvx_c_=NW^Ed1n_hɸ`} c)oOvb!lb&Y?<'w2^`m޻Cݯ7; 2>4Oltz+:t'(Ƒhu0ߖ/ o9w΅~c'.Ҿ7l=NW>*q~ =}o;/L39>#,}"?7Z ~I`^`u/7??#v}$kt|a<7//_P9׷h}{'GoȳW-Gb٘?u}"?k8!_Ρgou<>9q~GewIj<9~$ȱ7hL7MOSKvߠv]]ʟ'?)('/;?Sv>cHyq^}o\|~9{&űޜp^soVhnҘ%{:_ /ʥvvGʳ#/_CK/at>6yI6Z]rn|YQkз#ؿ)/.5Z^c|_td>S?S;{vk>v56V_«Fwt|M:V_Gˮ}|Fc缀47ȯ^YV2/q>yF. ᧍e:֬5Zsy8_0ỏ2}iux?[?; M fsxHpw5d@>7:>샟燿^f ?'{g]~w_;QzE)9{|F/~E7k{` ,co>>CIC7ύ?x cOm/mtˆgfA<-?*yjxӝxExS)ggnrzjX=b]Voׅg+8 ZQ?87i}_}7'-==ooC ??l ?쩵/scyvN` ;u^v 3;91s¿sQ k7zu`>?5Z^NvHnGwO8v WMos. 1 ѿwk}~Qkz<yOp!?QoXw^rϴK;/|ǟ_DG3{wӫ_#s!wȯF#_hGzHn۠om [6ȯs[''E^;Q_Ug&ƥٹ{=)?%߽䙟f~_W7~Bgg+cgsWOߟy~|b0x Z=~?5/INP.N>u(n |zOkgsws5[GFz@dK[.3_)h߇CC|?3ʰwzΐ_|nrd׽q%R~onпMMǜkHx/Ezi>8׭O>o=~pcvoA㞆3>=oߙqs?LnoGa{(G ˑW'O7F9i>zk^zן?hO^n|¯q{S +e_oَo!_uX=a?;免__k%|!57헨O  :nПkhE'oпYς{f6g:Y\Y8M0ss]_{ |fh}gr^Q }˯S٬Kh}+# ApM3QoG/<=[b*o=mHo ^v}=gf_~Ϻu'cFSfTF)r`ɽ(zȉW=>1hy㇍_{a_= {> ć>qI/1ݑ>Kv/"`ޫhF/7C9.d~A[0oht|RooA#F[:~]vi ]_"n<)zxj=~7:>zn3ОoL=ʭxi̛?,>f3>S}_ !oAQP(GCE+1J;Q⌢8RDӈ#ԀG![u`:?zYk=;}whʮh~/:<⾣>ܗoHvo}r+9 чž*~Fc{@Vʯ=z_MO?;ğ=zHBӼyڿFNwq^UL~/v4i4X)i=]-o|z`h7?ÿ??뭒._ɳ-z>3Ⱥ'7$SB2֡^~۽B{G8UF'XǴ.@=qsz>fO?'Fyzh9R/z};G@/2/6J|$dߘ}=yH] :wyoN<~}N_'$!O;W??a_ UC~ï޶{PZ~Z);$oMXN7 ?^\|ľ|?! ?Vq96S͓|W'η7w3ȿzmơx_ߡIݿՐ3ksO=`ڏxM:҇[N@Mě&Fbm-zi?o|oAn6w죰KoǍe7T,ElܶɾV>7Pn1k-/l'Ⱦe6 řr@)~ ?S=i4q]~1h~yc/®ʎ oʑ]3o-T\"k|ls9y>7};y2&fCCh}\߫Bzg#t13O'oD^:󦛄8гBzaš31IO$ۇo[=kt'̽BzuDBݿXV+_?8mgծߑ:wk߮yMh4~d}YvL<C>kIУׯqgDz5Z|7ԸtW1OF K? #m<|?sFwUؠőo4t'>)~An<|=݌%~{~_LJZyBߝC;G˳8n)`6<=N4Xۅ]~-81;'6:=|7<!/B?z^š? 2Mk_v鉛#啶F˟NnN'ݴ~#p Ϝ=wCKtmّh߽1ş|k2ϩ!s5;i_|L^d7h5ޟHaO9,N:dԳFˣ[/8J/q s_½+='|j˞)}Bj)ߍoZ~~8r܋ONC_߾ qޜ>4ߏIΏ}H仚)st}cO jOC۴a=P./?|?MQR7v.~Пnin6{uzwPI?$4;7:7tvh}/̫F[_h7h4wZIL=?!M?h}NO=^jÓKCiH18043FXWs>ǧ>O׷C=B>ˡ滋 }v7ϳ}+|]nx(;yqS[W|?;#ՖDZ[|W?&}u4[R.%K^= ]-vƟi_YyWBW/n4ѿtߺyO;ӏ'7fB aRlpo*}-۟<3}5Z_~N5K׽Q;7ZoHy_G{JWZn;.q= ~6K w~?{';~4{?U~'^⿋ҫ+7Z9v q#<$_+l^y۴wq'ү~2ӡa5ׅnwP|m|R~?0楍Ӽ|GwyAQ? nR௨~nC7k gfI}+Tgn {evX٧0W/}wwOCK79m_y$8m~߽:꼸Z~MiH<틋 󜍕O7Hxȏѐڭ?s')y'?I ߁}]u8LP~c?53׭gv1L?6CyϪ_v.wrhoRyצ|4G{𜧽yKy8|p~7/n˼%.;0W-ϺI<qEq뼜N9:O\9wQ8/7cGЧq˝hy=>C!{~۶׍wiC?2?7=~v^zEu, 5.:wi~g:e,TmƻwՏy;f*h.ץrm_fԏ C7/wOyh?פ9W/Aܐodp޹{[$? {C|SN{E~/ #tзslt_%?]u,F_?1z+Ш_I~lg甿gqozX/m_o|x>E/>%YN~0r-E8|ΛOW\|܏NR^t6ol|YvCɹuP;WgЋB<^ӽ[ַ]7><č5oעos^:Ks;ǺA}G~ra0o4?ΤuG߉^7 8T>ȳ{ng.3٠#?3K|]׬ٻ-oSs[2ύ޵nj<~Oxp^CI. qW^zmFIwP!q#ܧ{͋>*=0Ϗ rxn~ot-&Mo 5sYyr(7?QoV2}} kCOmtzi;=+SccȯG7Tzs/G_j]ޓt_DF˟$ǹ2F?!O?-(hy[7k>,0?,;te>>Ʋy*._i#,=me 67!ǹ Yq{_|Bwo~DŽ?i&k1ntzϩmovc-ЋC7t&Y7m:?NzׄJr^ dž6:?wA/2#_:M(o#i\hgg㥸K)^ۃ|6Z-?Ij>v^OxhiQcm^WixύoyF' F~Z#|W4Z޽{So:V[Րҫ3ffv?p?-Y| Op6kf1 cp>.,,v?d⭊;Xwg޼/EF/=$ω fnc߾=űh>{GsUƓ&))GzI+gUM-AFwzQ_ŏ_6`;=Rݧ?s?Lgm#?hc{_gsThCyx_>F+38gd2 -tB \hcwpitz}h͓ G@;j4;-TSҎ_94F[i͝:ƳrQ7 ?'[Gg>0nz|x'5߹(|3N[_'w?H׭7V+F߱Ohy7~γ[.k4?"~sh~9_9O'NG}9h~ ~ k@/瑦8D̾J&E{$g~`ϛ1x^gPvY|>$̻oqhP;ƵFN٣ |>Cv~%6Q[rQR::neףY+{νgqg{!+h~?y_4c_-Ϯ o_͝39/S+7~7 fw+Ao.  Cz)K:fO6ZvN>~Xh]V˿x_Ǘp[. ,P~{b5g!mvɸβR}Jy8幮|/qJ}OePNgG}5K*^P9γ8;4.6:?=.r~6|GS:>}pwG?ißjA?6 -oZ;n4V>{~ s̷xأv]o">RUu\C4Z>?RUϛ%?+Mѡ6ZI| /DV~/KiLϟ9'O-IϹM|)ӣ'=' o>Oύ_gfFMޔߵ2$25/]1۶u>N8#}$㝏ff^Ͼ\yomOǾyc?U/f|YϺϹňgv6:}|o>!{'WW:eBev|^ڛWv^ymn)tD=#Q}}8G_ 26_}y<_zmI{\*? 2t_wU6|cC/ ,S{T~Xm\r,¿9iuBׄ΅vy_y^nr&tՖ9)W}i)C׵KyO]L9 V7?$OWɏmɗ2 3o3ROݾF߾9KYO?*/W)iѻ{@LJzth{k2aGyM!?uNͫZFyФy5ZyjYe{X#B =,ч^gr'פ7ѣw?F)槷yc go1,"eŸI ፖO*^"N =㞒Fg/_K>ga=){}Fl?bF¯!eNa;3drnsE\Lv}Wly4Z^|F4z_4MgV Kr`7O|)=arotz<ڱA/_a~746K^fg+7v&qg`H??WOք_o}s? F?A~5PzL$pmSA~ǯr?y/ړ{٥cvC]Xy=j|Å.I8o~UJ߸i_9}q}3~Uj<k@k6~MK;WcY#Qq:w?=ֵ~gh{Zgw>!w2U!I;Ճ*ހ{p}iMңd,kd_03'F˟lWeOK~i4yy>&Bm7{'' hy\yiS<6vzh??~{bgm>GՏK>nq-Z.{'FGG֯˭h~HJFO ߼Xή 3;~-?V`i%8a]Fg׌v^v?yϞ=2 m<(IoTū?CC7vɫg~ۍrXodюο7YxЇ=C)?紭ʧio?t 8~@vv$y~Ž旮syƏGy Oc70iqco|gg5>,;wG^_v6/J?I/r>}^=_ng'5/>W?m.3 GMu[,wЏcߋa o!O<bO }~hOؗ2/7?W|x\wo#%lgؑr*#N[7=@=E-~5Euc/ uoCPK6~y8P+oe؅KwVx̷Iiw }t({"{{7\Ey_Wh7І?ZV(;B T)vy.>Qvuy;mh0Խg0?ۇo>b7{[.t;zP~oC*qw=n4zhG]O^5v,pκ Uqϵ/r-ϽKh~Bəp.?Q~/w4o6Z$y '} `_'~Og>m~~ai]=-7  j$>7#=o>ğz!'gyL~>#~gr~. <۟lw#×C|7_{6/^9ܕʷ/JE B3M9ѣAwg_F=WSO m:>{xcǏx֟ \~ ?+Ψ\?MwC^Nv ~|֍AϯY?ƟU8MS~%QvZ~'Mɹi_ ugC/ ?{=;G<2'ű:%4}%! B>+awQkOwE"?/`ߏ^F+>я]JwNM:]n |xuy}guun(b{s/"bJ4~lyAfg/~;g~'/^AO ~>M;>:r-¿M}m?}<{\BW;,{@&@-@)@>&*@0@.@>@E@CE5KE/eE n EZzEKEK@EoEr@ErEr@ErEv@EvEv@EvEvFl:\LH tY ` tY x @sY sY $sY xY Y3 xY QT`Q `QQ*QFHP\PrPPPPPPPP Q*P@PVQx QH QH QH(P8P`PhP0PFP\PjPxPP`QQpP` QH3 QH_PuP P0P@PPPXPxPP%P;PQPgP}PPQh Q@ QH QH QH6 QPM@QPeQP QPQP QP QH` QH QH(`QPB FQSLQdMQt5QLDQLDQ sY @Z @Z T[  T[  6^  6^.  pp^@  pp^P  pp^a  pp^m eY~ MQ P  P `Pw P N 8O P MQ @Y `@W4 @kH @@` `@y @ @z  @  @ @ @ ' ` @nH  @p !@C `!@  $@^ &@" )@   )@ *@' *@? -@![ .@!} `/@ /@ /@ @0@ `0@6 0@C/ 1@$F @1@J^ 1@n 2@~ 3@^ 4@^ `4@ 5@ 6@ @9@ `9@ 9@ 9@!9@ 49@H:@Y :@j@:@+{:@-:@W ;@Y;@Y;@<@=@`>@\>@0`@@[`@@\q A@=`A@`B@|B@C@HD@V`E@hE@F@G@8H@[`I@sJ@J@ L@: M@N@ P@ R@'@R@J,X@6CX@7P Z@vcZ@{v [@%`_@"_@f@6f@h@\i@T`i@ej@.k@Mn@`n@wo@r@s@Pu@}u@@v@Sv@:"w@F{@W`|@b|@|@1@|`@<@u @:`@`@E9@FS @s@@F`@:@N@ @@ @!@u/@@rB@nR@@f@y@@@@w`@-@E@@6  @@4'@7@J`@\`@x@@k@`@a@> @4`@@8@*@E@OV`@q@@B @@@I @@H@@0@M@i@t@@@M@%@) @ @]@@s@, @=@@N@_@}@ @@%AA`AA90@ AH A%` A{ A @A `A~A A$A@%A)`&A@@'A[T'A>n'A(A\`)A%+A<,A.AU`.A`1A&B2A\@4A7x6AL7A& 9A9A;A@AA BA, FAFFAZGAjtHAbHA IATKA@MA@OA PA[3SASTAl`UA`VAqVAXAO@YASYAVZAT`ZAcZAY@[Ad%[A8\AuL _A^_At`A:aAk@dAVdAWeA|iA8pA\  qA6" `qA; rA%U sAhd @tAu @uAL uAL vA vA wA }A! ~A!@A-!Ae G!A.g!Ai!@A!A!Ar! A! A! A"A "AD"At"@A"A"A"AL#A9#AY#`Av#A#A#A#A8#@A6#A$@A  $`Ae6$AL$A6h$A$Ag$ A%$`A$A%$@AQ$AK%A% A)(%`A:%AM%AEf% Adt%A%A%A%A%A%@A &`A;&@Aa&@A^&A&`A& A'A4'Ab' A'A'`A'`Ax'A(A3(Ae(A(A( A(A(A )B() BuH)BPs)B)B)`B%)BN)B) BK* B2*B>^*Bt|*B*`B *B%*B:*B+B6+BX+Bs+@B +` B}+!B+"Be+%BO+`&B ,`3B),4BH,7Bfb,8Bx, 9BV,9B,:B,B -@?BL.-?BLL-@B]-BBLt-`BBL-BBL- CB-CB-DB-EB-`FB. GB.HBs/.`IByB.IB]X.@KB,q.MB .QB.`RB~.RB_.@SB.TBE/`UB5 B^b5BF5BZ5@Bb5B5`B?5B;6BT6@B;06B@6@BqV6Bq6B6B6B6BE6B7B/7BE87`B[7B7B7B7B7B7 Bw8B#8`B78 BiR8Bjl8 B8 B&8`Bq8B8B8`B8Bm 9B9`B_.9BA9BU9`Bo9B9B9Bz9@B\9B9B*9Br9Br :B:BH*:B9:BcM: B~b:Br:@B%:Cd:C:Cb:@C:C:C; C1;CJ;`Cd; Cz; C;@ C; C; C; CQ; CM< C< C,<C><C-U<C-i<C0}<@Cg<C<C<C|<Cu =C'=C==`C4M=%C]=%C/o=&Cg}=&Cg='Cg='Cg=(C0=@)C=)C{=`*C> +C>+C1>-CC>0C T>1Co>2C5>2C>`8C>@:CU>:C>`;C> ?Cn>@Cb ? ACL?AC9,?BC6DM>DM`?DN@@DyN@D72NDDFN FD`NIDE|N MDTNNDTNODNUDNVDNXDV OYD!O ZD'4O`\DIO ]DU`O]DzO `D O@iDO@mDO`nDOoD"OoDuO@pDuPpDuP@qD0PqDAPsDRP tDePtD,zPuD>P@vD%PwDP xD\PxDfPzD/Q@zD^Q{D(Q|D:Q`DLQ DcQDyQ`DQD(QDQDQDQD RDeR@D*R@DoCRDURD fRDvRDxR@DRDRDR`D\RDSDy:S D0MS`D1cSDyS@DS DS DS@DS`DS@DT DTD8TDJTD_T DtTDTDTDTD/TD3T@DT`DUDeU`D0UD OUDeU@DCUDQUDUD*UDUDU DUD VDVDW,V Dm@VDeWV DkVDV`DVDVDV@DoVDVDVDV`EWE&WE@W`E^QW EeW` EOWEWEeWE%W@E-WE.WEVW EX EXE.XEGXEBfXEp}X EX!EX@"EkX"EzX@%EX'EY(EQCY )E_Y@*E\vY*EY`+E\Y+EY`,EY -EY.EPZ`/EMZ/Ev,Z@0EBZ 1E;YZ`1EpZ 2EZ2EbZ`3EZ4EZ4EZQEZUE [VEG$[VEq@[`YEW[ZEo[[ET[ \E[\E1[`E[aE[dE\eEs\fE'\fE9\`gEN\`iE9f\kE~\lE\mE\oE.\pE\pE]rE%]tEn?]tEU]`uEm]vE]wE]yE]`|E]`~E]@E%]EZ^E^E0^@E C^E/`^@E/^E/^E/^E^EW^@Eh_E_Es2_`EQ_ Eb_E{_E_E,_ E:_`EG_E_E-`E6.` E^E`Evj`E`E8`E` E`@EzaE5aE6UaE8wa E6a`EtaEla`EbaE(a EbEG2b@EuObEkbE bEb@E9bEDbEDb@E[cE cE cEcE{cEc EHcE[dEHd@E4(dE;dEOdE ^dE zdEHd`EIdEdE>dEhd@ELeE#e`E(HeEge`Ee EteE%eEEe@E:eECeE'f EY'fEhEHNh@EYh`ErmhEhEh Eh@EJhEhEh`EiE $i E;iETiEmiEi@EiEiEi`Ei@Ei EiEjE*jE@jEWjEnjEjEjEjEjEjEjEkE1kEKkEekFkFkFkFkFkF lF#l F;lFMlF`l Fxl@F#lFlFlF:lF;l@Fl`FlFmF(mF?m F Xm F qm F m F m@ F m` F m Fm F3n` Fn F/n F Fn F ^n F unF n Fn@Fn`FnFnFnFq o@FoF;oFKoFeo`Fvo F o Fo@ F,o Fo Fo Fo Fp!FGp`!F (p!F";p!FRp!F fp"Fzp "Fp@"Fp`"Fp"Fp"Fp`#F.q#F *q#F>Hq$F"\q@$Flrq$Fq%F q%FPq&FQq`&F'q&F:r&Fr'F(*r@'F=r'F'Vr (FBjr(Fr(Fr(Fr)Fr*Fmr+Fsr+Fs s,FDv4Fwbv`5Fzv@6Fv`6F v6F!v6FCv 7F)v`7F'w7FC.w8Faw 8Fuxw8Fqw 9Fw@9F w`9FCw9FCw :Fx@:Fd2x:FPx`;Fcx  H^JHbHXuH H)`HHEǘHW@HEH`H%H< HO@HZ]HkH=xH3@HHH^HOș`Hٙ H%`HHO`HtHH>2HwHHw^H&{@HLHh H%`HHĚ@HК@HNHH H<H_HHYHI͛I@ I I  I@ I' I5 ID IVIhIuIx I%`IuII_͜IלIvI IIIv?@I a`I IIL֝I IIN3 IR I-t`!IY"I#IȞ $I%I  *IL*I /+ILT,ICn`,Iv,I-I-I@0Iğ0I%ϟ 3I5IU`5I_5I8I 9I'>I /?I G ?Il_@In`CI FIbFIe JIŠOI%٠QIRIqRI WIYI,@ZI= [I9Q`cIBacIp`dIeI fIgIhIiI jI֡lIS@rI^rI @sI!@uI4@vII@xI]@yIpIY`IoIIbТ IbIb  Ib*I=IRIaItII`IIģI֣II`I@IIu3`I] I I;`IͤI/IIB@Ii@III@I`I`I~>JiJh#6J6J8JF:JF=JkZ=Ju FJHJP IJLJX`LJLLJ^? NJ\ OJyPJv QJǨ TJUJ UJ%&WJFXJc\Ju]Jl_JǩbJ\dJgJ0+ iJDjJ^`lJpJsJuJmת wJ @xJ|J>|JP ^@JJX@Jƫ`J JJX. J>L`JnJJg JXҬJ JJT,`JtFJrq`JMJ`J حJnJJ'J\F JeJJV J:î`Jٮ@JLJIJ 1 JBKJd@Jv~JJïJ`JJ-JS`JrJxJTJİJJkJk$JkFJkiJ J{J`JgJٱJ{JgJQJU2@JUHJU_JUt`JUJU JUJUβJU@JUKKE, KN Ka@KdKw@K׳KKD `K,AK~e Ks Kl KVǴ K> K Kz @ KEKmKK`Kڵ KK#KzL@K~K*K޶KK%`KO`#Ky#K@$KϷ$K*K +KL@KpEKe@GKHK߸JK@LKm(MKPSKoVK@XK YK͹ [K\K_K>@eKglKmK `xK׺`~K Kp%K%PKE{@KeK.»KeKK,K&NKsKi KK]`K|K&KgIKQrKKKEؽ@K K, KPK:z@K`Kž`K*K0K<K%cL{`L+L̿L L%LVLL L%L L/LcTLx`L@LLYL% L@LiL^#Lq%L9%L&L;: 'Le (L*Lf 5L8L@9Lp)9LV;L`>Lf@LCL`DLe?HL`MLRL \L$]L^Ln3@_L \`_L``L aLiLO L%LlTL[LL@L>L<`L%iLs Y8 `YH Z Z Z Z Yh @Z(  PW[ @W[( `YPK 6^u PU[ Y` hU[ W[  W[9 W[] pU[ sY Z `W[ Z[0 W[U Zz pW[ W[ `U[ eZ% tY M Yu Y  XZM `Z\ pZn xZ~ Z Z Z Z Z Z Z Z Z" Z3 ZD ZW Zf Zv Z Z (Z 0Z 8Z @Z HZ PZ XZ `Z pZ. ZG ZY Zw Z Z Z Z Z Z Z Z Z% Z4 ZF ZR Z` (Zo 8Z} @Z HZ PZ Z Z Z Z Z Z  Z  Z0 ZF ZZ Zo Z Z Z Z Z (Z 0Z 8Z @Z PZ% XZ9 hZM pZZ xZf Zt Z Z Z Z Z Z Z Z Z0 ZJ Z] Zk Zy Z XZ `Z xZ Z Z Z Z Z Z/ ZB (ZR 0Zb 8Zr @Z HZ pZ xZ Z Z Z Z Z Z" Z1 ZB ZS Za Zo Z~ Z Z Z Z Z Z Z (Z 8Z @Z PZ) XZ4 hZM V[` hZx Z Z Z Z Z hZ xZ Z  Z* Z> ZS pZs Z Z Z Z (Z 0Z& 8Z> @ZQ HZi hZ pZ Z Z Z Z Z hZ1 ZN Zh 0Z HZ Z Y Y Z V[ Z Z Z" Z1 Z? ZN V[a Zt Z Z YH V[ Y  @Z  [[( YP8 Y[I 0Y[] Y[l Y[~ X[ PY[ @Y[ YP 6^ `<^ @9^  ^[8  6^ 6^- XZ? 7^P 6^e 6^y 6^ 6^ `m[p U[ U[ %[ $[ ][  Z5 `YK 7^W 7^h `Zz D[ Z 0Z @Z Z Z XV[ `V[ hV[, @V[? 8V[Q `UZg Zy 8^ 8^ 8^ 8^ 9^ 8^ I^ =^" 6^7 (sYL 6^_ 7^o U[| 7^ 7^ :^@ 07^ HsY 6^ 8^ 6^  a[ 6^0 0V[D [[Y <^Xn "sY @A^p 9^  ^[ @^[( \j Z 9^( Y( @Y(( Y(> @8^U 88^k H8^ 9^ V[ U[ pV[ U[ 6^ P7^ 7^( 8tY? @Z^ @$[@w x8^ xtY `tY X8^ M^P# 7^ 6^ 8^ 6^0 Z@ (V[O ,sY\ 7^s 7^ 6^ Z 6^ \[ Z Z  :^H& tY9 ZL Z` Zv Z Z 7^ 7^ 8^ 6^ h7^ @tY B^, (8^F p7^X 7^m Z} c[ `_[ 7^ V[ 6^ P8^ 7^ @7^  [[ 87^) U[9 7^N 6^_ 6^}  7^[ 6^k 6^} 6^ `7^ X7^ [> D^ @^ 6^ >^ 7^, 6^= HV[Q PV[e tY~ @;^H @6[ Y YD Y Y Y ?^* F^8= ptYR htYj 4sY 8^ PtY `\[ @Y8 XtY V[ 7^% V[; [I %[` U[u U[ ][  @Z `Z 8^ 8^ YH ][& 8^4 8^B tYQ tY` PZr `Z pZ `<[P Y  @YX Z Z Z  X[= 0X[Y Z{ @X[ 8^  PZ @Y  Y0  PX[1 `Y Q tYt 6^ sY <^ Z[ 6^ Y( W[2 X[Q W[k X[ W[ @Y0 Z[ 8^XQ Q Q AxQ aQ8{Q Q `Q(Q0Q0;Q0zQ Q QphQ0O8Q nQ Q Q0xQ Q @XQ rQ 8Q Q 8Q0<Q ^ T[h U[z U[ T[ U[ T[ T[ U[(PQ Q A8P ZQnpY{PLQgo.goruntime.textcmpbodymemeqbodyindexbodyindexbytebodygogocallRetgosave_systemstack_switchsetg_gccaeshashbodydebugCall32debugCall64debugCall128debugCall256debugCall512debugCall1024debugCall2048debugCall4096debugCall8192debugCall16384debugCall32768debugCall65536runtime.sigprofNonGoWrapperruntime.etextencoding/pem..gobytes.1encoding/pem..gobytes.2encoding/pem..gobytes.3encoding/pem..gobytes.4encoding/json..gobytes.1runtime..gobytes.2runtime..gobytes.3runtime..gobytes.4bad_cpu_msgmasksshiftsdebugCallFrameTooLargefmt.(*pp).printValue.jump18$f64.3ff0000000000000$f64.433fffffffffffff$f64.43e0000000000000$f64.c33fffffffffffff$f32.4b189680$f32.80000000$f32.cb189680$f64.430c6bf526340000$f64.8000000000000000$f64.c30c6bf526340000internal/fmtsort.compare.jump18$f64.47efffffe0000000$f64.7fefffffffffffffreflect.(*abiSeq).regAssign.jump4reflect.(*rtype).exportedMethods.jump7reflect.(*rtype).PkgPath.jump9reflect.implements.jump45$f64.3fd0000000000000$f64.3fe0000000000000$f64.4010000000000000$f64.4014000000000000$f64.7ff0000000000000$f64.ffefffffffffffff$f32.358637bd$f32.6258d727$f64.3eb0c6f7a0b5ed8d$f64.444b1ae4d6e2ef50encoding/json.isEmptyValue.jump5encoding/json.newTypeEncoder.jump31$f64.4024000000000000internal/reflectlite.(*rtype).exportedMethods.jump7internal/reflectlite.(*rtype).PkgPath.jump9$f64.3eb0000000000000$f64.3f50624dd2f1a9fc$f64.3f847ae147ae147b$f64.3fd3333333333333$f64.3fe8000000000000$f64.3ff199999999999a$f64.3ff3333333333333$f64.403a000000000000$f64.4057c00000000000$f64.4059000000000000$f64.40c3880000000000$f64.40f0000000000000$f64.412e848000000000$f64.bfd3333333333333$f64.bfe62e42fefa39efruntime.typehash.jump14runtime.printanycustomtype.jump4runtime.(*itab).init.jump6runtime.SetFinalizer.jump96runtime.SetFinalizer.jump113runtime.deltimer.jump8runtime.modtimer.jump13runtime.moveTimers.jump13runtime.adjusttimers.jump19runtime.runtimer.jump13runtime.clearDeletedTimers.jump14runtime.(*_type).pkgpath.jump6runtime.typesEqual.jump15runtime.typesEqual.jump30runtime.typesEqual.jump59runtime.typelinkruntime.itablinkruntime.pclntabruntime.findfunctabruntime.rodataruntime.erodataruntime.typesruntime.etypesruntime.noptrdataruntime.enoptrdataruntime.dataruntime.edataruntime.bssruntime.ebssruntime.noptrbssruntime.enoptrbssruntime.covctrsruntime.ecovctrsruntime.endruntime.epclntabruntime.esymtabruntime.gcdataruntime.egcdataruntime.gcbssruntime.egcbssgo:string.*go:func.*runtime.gcbits.*runtime.symtabinternal/cpu.Initializeinternal/cpu.processOptionsinternal/cpu.doinitinternal/cpu.cpuid.abi0internal/cpu.xgetbv.abi0internal/cpu.getGOAMD64level.abi0type:.eq.internal/cpu.optiontype:.eq.[6]internal/cpu.optiontype:.eq.runtime/internal/atomic.Uint64type:.eq.runtime/internal/atomic.Int64runtime/internal/sys.OnesCount64type:.eq.runtime/internal/sys.NotInHeaptype:.eq.internal/abi.RegArgsinternal/bytealg.IndexRabinKarpBytesinternal/bytealg.IndexRabinKarpinternal/bytealg.init.0internal/bytealg.Compareruntime.cmpstringruntime.memequalruntime.memequal_varleninternal/bytealg.Index.abi0internal/bytealg.IndexString.abi0internal/bytealg.IndexByte.abi0internal/bytealg.IndexByteString.abi0runtime/internal/syscall.EpollWaitsyscall.RawSyscall6runtime/internal/syscall.Syscall6runtime.memhash128runtime.memhash_varlenruntime.strhashFallbackruntime.f32hashruntime.f64hashruntime.c64hashruntime.c128hashruntime.interhashruntime.nilinterhashruntime.typehashruntime.memequal0runtime.memequal8runtime.memequal16runtime.memequal32runtime.memequal64runtime.memequal128runtime.f32equalruntime.f64equalruntime.c64equalruntime.c128equalruntime.strequalruntime.interequalruntime.nilinterequalruntime.efaceeqruntime.ifaceeqruntime.alginitruntime.init.0runtime.(*mspan).setUserArenaChunkToFaultruntime.(*mspan).setUserArenaChunkToFault.func1runtime.atomicwbruntime.atomicstorepruntime.mmapruntime.mmap.func1runtime.munmapruntime.munmap.func1runtime.sigactionruntime.sigaction.func1runtime.cgocallruntime.cgoIsGoPointerruntime.cgoCheckWriteBarrierruntime.cgoCheckWriteBarrier.func1runtime.cgoCheckMemmoveruntime.cgoCheckSliceCopyruntime.cgoCheckTypedBlockruntime.cgoCheckTypedBlock.func1runtime.cgoCheckBitsruntime.cgoCheckUsingTyperuntime.makechanruntime.chansend1runtime.chansendruntime.chansend.func1runtime.sendruntime.sendDirectruntime.recvDirectruntime.closechanruntime.chanrecv1runtime.chanrecvruntime.chanrecv.func1runtime.recvruntime.chanparkcommitruntime.init.1runtime.(*cpuProfile).addruntime.(*cpuProfile).addNonGoruntime.(*cpuProfile).addExtraruntime.GOMAXPROCSruntime.debugCallCheckruntime.debugCallCheck.func1runtime.debugCallWrapruntime.debugCallWrap.func1runtime.debugCallWrap1runtime.debugCallWrap2runtime.debugCallWrap2.func1runtime.gogetenvruntime.(*TypeAssertionError).Errorruntime.errorString.Errorruntime.errorAddressString.Errorruntime.plainError.Errorruntime.boundsError.Errorruntime.printanyruntime.printanycustomtyperuntime.panicwrapruntime.runExitHooksruntime.memhashFallbackruntime.memhash32Fallbackruntime.memhash64Fallbackruntime.(*timeHistogram).recordruntime.getitabruntime.(*itabTableType).findruntime.itabAddruntime.(*itabTableType).addruntime.(*itab).initruntime.itabsinitruntime.panicdottypeEruntime.panicdottypeIruntime.convTruntime.convTnoptrruntime.convT64runtime.convTstringruntime.convTsliceruntime.assertE2Iruntime.assertE2I2runtime.iterate_itabsruntime.unreachableMethodruntime.(*lfstack).pushruntime.lfnodeValidateruntime.lockruntime.lock2runtime.unlockruntime.unlock2runtime.notewakeupruntime.notesleepruntime.notetsleep_internalruntime.notetsleepruntime.notetsleepgruntime.lockRank.Stringruntime.lockWithRankruntime.unlockWithRankruntime.mallocinitruntime.(*mheap).sysAllocruntime.sysReserveAlignedruntime.(*mcache).nextFreeruntime.mallocgcruntime.deductAssistCreditruntime.memclrNoHeapPointersChunkedruntime.newobjectruntime.newarrayruntime.profileallocruntime.fastexprandruntime.persistentallocruntime.persistentalloc.func1runtime.persistentalloc1runtime.(*linearAlloc).allocruntime.(*hmap).newoverflowruntime.makemap_smallruntime.makemapruntime.makeBucketArrayruntime.mapaccess1runtime.mapaccess2runtime.mapaccessKruntime.mapassignruntime.mapdeleteruntime.mapiterinitruntime.mapiternextruntime.hashGrowruntime.growWorkruntime.evacuateruntime.advanceEvacuationMarkruntime.mapaccess1_fast32runtime.mapaccess2_fast32runtime.mapassign_fast32runtime.growWork_fast32runtime.evacuate_fast32runtime.mapaccess2_fast64runtime.mapassign_fast64ptrruntime.growWork_fast64runtime.evacuate_fast64runtime.mapaccess1_faststrruntime.mapaccess2_faststrruntime.mapassign_faststrruntime.mapdelete_faststrruntime.growWork_faststrruntime.evacuate_faststrruntime.typedmemmoveruntime.reflectcallmoveruntime.typedslicecopyruntime.typedmemclrruntime.memclrHasPointersruntime.(*mspan).refillAllocCacheruntime.(*mspan).nextFreeIndexruntime.badPointerruntime.findObjectruntime.heapBitsForAddrruntime.heapBits.nextruntime.bulkBarrierPreWriteruntime.bulkBarrierPreWriteSrcOnlyruntime.bulkBarrierBitmapruntime.typeBitsBulkBarrierruntime.(*mspan).initHeapBitsruntime.writeHeapBits.writeruntime.writeHeapBits.padruntime.writeHeapBits.flushruntime.heapBitsSetTyperuntime.progToPointerMaskruntime.runGCProgruntime.materializeGCProgruntime.allocmcacheruntime.allocmcache.func1runtime.freemcacheruntime.freemcache.func1runtime.(*mcache).refillruntime.(*mcache).allocLargeruntime.(*mcache).releaseAllruntime.(*mcache).prepareForSweepruntime.(*mcentral).cacheSpanruntime.(*mcentral).uncacheSpanruntime.(*mcentral).growruntime.startCheckmarksruntime.endCheckmarksruntime.setCheckmarkruntime.sysAllocruntime.sysUnusedruntime.sysUsedruntime.sysFreeruntime.sysFaultruntime.sysReserveruntime.sysMapruntime.sysAllocOSruntime.sysUnusedOSruntime.sysUsedOSruntime.sysHugePageOSruntime.sysMapOSruntime.queuefinalizerruntime.createfingruntime.finalizercommitruntime.runfinqruntime.SetFinalizerruntime.SetFinalizer.func2runtime.SetFinalizer.func1runtime.(*fixalloc).initruntime.(*fixalloc).allocruntime.gcinitruntime.gcenableruntime.gcenable.func2runtime.gcenable.func1runtime.pollFractionalWorkerExitruntime.gcTrigger.testruntime.gcStartruntime.gcStart.func2runtime.gcMarkDoneruntime.gcMarkDone.func2runtime.gcMarkTerminationruntime.gcMarkTermination.func1runtime.gcBgMarkStartWorkersruntime.gcBgMarkWorkerruntime.gcBgMarkWorker.func2runtime.gcMarkruntime.gcSweepruntime.gcResetMarkStateruntime.clearpoolsruntime.fmtNSAsMSruntime.(*gcCPULimiterState).startGCTransitionruntime.(*gcCPULimiterState).finishGCTransitionruntime.(*gcCPULimiterState).updateruntime.(*gcCPULimiterState).updateLockedruntime.(*gcCPULimiterState).accumulateruntime.(*gcCPULimiterState).unlockruntime.(*gcCPULimiterState).resetCapacityruntime.(*limiterEvent).consumeruntime.(*limiterEvent).stopruntime.gcMarkRootPrepareruntime.gcMarkRootCheckruntime.gcMarkRootCheck.func1runtime.markrootruntime.markroot.func1runtime.markrootBlockruntime.markrootFreeGStacksruntime.markrootSpansruntime.gcAssistAllocruntime.gcAssistAlloc.func1runtime.gcAssistAlloc1runtime.gcWakeAllAssistsruntime.gcParkAssistruntime.gcFlushBgCreditruntime.scanstackruntime.scanstack.func1runtime.scanframeworkerruntime.gcDrainruntime.gcDrainNruntime.scanblockruntime.scanobjectruntime.scanConservativeruntime.shaderuntime.greyobjectruntime.gcDumpObjectruntime.gcmarknewobjectruntime.gcMarkTinyAllocsruntime.(*gcControllerState).initruntime.(*gcControllerState).startCycleruntime.(*gcControllerState).reviseruntime.(*gcControllerState).endCycleruntime.(*gcControllerState).enlistWorkerruntime.(*gcControllerState).findRunnableGCWorkerruntime.(*gcControllerState).resetLiveruntime.(*gcControllerState).markWorkerStopruntime.(*gcControllerState).updateruntime.(*gcControllerState).heapGoalInternalruntime.(*gcControllerState).memoryLimitHeapGoalruntime.(*gcControllerState).triggerruntime.(*gcControllerState).commitruntime.readGOGCruntime.readGOMEMLIMITruntime.(*gcControllerState).addIdleMarkWorkerruntime.(*gcControllerState).removeIdleMarkWorkerruntime.(*gcControllerState).setMaxIdleMarkWorkersruntime.gcControllerCommitruntime.gcPaceScavengerruntime.(*scavengerState).initruntime.(*scavengerState).parkruntime.(*scavengerState).wakeruntime.(*scavengerState).sleepruntime.(*scavengerState).controllerFailedruntime.(*scavengerState).runruntime.bgscavengeruntime.(*pageAlloc).scavengeruntime.(*pageAlloc).scavenge.func1runtime.printScavTraceruntime.(*pageAlloc).scavengeOneruntime.fillAlignedruntime.(*pallocData).findScavengeCandidateruntime.(*scavengeIndex).findruntime.(*scavengeIndex).markruntime.(*piController).nextruntime.(*stackScanState).putPtrruntime.(*stackScanState).getPtrruntime.(*stackScanState).addObjectruntime.binarySearchTreeruntime.(*mheap).nextSpanForSweepruntime.(*activeSweep).endruntime.finishsweep_mruntime.bgsweepruntime.(*sweepLocker).tryAcquireruntime.sweeponeruntime.(*mspan).ensureSweptruntime.(*sweepLocked).sweepruntime.(*sweepLocked).sweep.func1runtime.(*mspan).reportZombiesruntime.deductSweepCreditruntime.gcPaceSweeperruntime.(*gcWork).initruntime.(*gcWork).putruntime.(*gcWork).putBatchruntime.(*gcWork).tryGetruntime.(*gcWork).disposeruntime.(*gcWork).balanceruntime.(*workbuf).checknonemptyruntime.(*workbuf).checkemptyruntime.getemptyruntime.getempty.func1runtime.putemptyruntime.putfullruntime.trygetfullruntime.handoffruntime.prepareFreeWorkbufsruntime.freeSomeWbufsruntime.freeSomeWbufs.func1runtime.recordspanruntime.inHeapOrStackruntime.spanOfHeapruntime.(*mheap).initruntime.(*mheap).reclaimruntime.(*mheap).reclaimChunkruntime.(*mheap).allocruntime.(*mheap).alloc.func1runtime.(*mheap).allocManualruntime.(*mheap).setSpansruntime.(*mheap).allocNeedsZeroruntime.(*mheap).allocMSpanLockedruntime.(*mheap).allocSpanruntime.(*mheap).initSpanruntime.(*mheap).growruntime.(*mheap).freeSpanruntime.(*mheap).freeSpan.func1runtime.(*mheap).freeManualruntime.(*mheap).freeSpanLockedruntime.(*mspan).initruntime.(*mSpanList).removeruntime.(*mSpanList).insertruntime.addspecialruntime.removespecialruntime.addfinalizerruntime.removefinalizerruntime.setprofilebucketruntime.freeSpecialruntime.newMarkBitsruntime.newAllocBitsruntime.nextMarkBitArenaEpochruntime.newArenaMayUnlockruntime.(*pageAlloc).initruntime.(*pageAlloc).growruntime.(*pageAlloc).updateruntime.(*pageAlloc).allocRangeruntime.(*pageAlloc).findMappedAddrruntime.(*pageAlloc).findruntime.(*pageAlloc).find.func1runtime.(*pageAlloc).allocruntime.(*pageAlloc).freeruntime.mergeSummariesruntime.(*pageAlloc).sysInitruntime.(*pageAlloc).sysGrowruntime.(*pageAlloc).sysGrow.func3runtime.(*pageAlloc).sysGrow.func2runtime.(*scavengeIndex).growruntime.(*pageCache).allocruntime.(*pageCache).allocNruntime.(*pageCache).flushruntime.(*pageAlloc).allocToCacheruntime.(*pageBits).setRangeruntime.(*pageBits).clearRangeruntime.(*pageBits).popcntRangeruntime.(*pallocBits).summarizeruntime.(*pallocBits).findruntime.(*pallocBits).findSmallNruntime.(*pallocBits).findLargeNruntime.(*pallocData).allocRangeruntime.newBucketruntime.(*bucket).mpruntime.(*bucket).bpruntime.stkbucketruntime.mProf_Flushruntime.mProf_FlushLockedruntime.mProf_Mallocruntime.mProf_Malloc.func1runtime.mProf_Freeruntime.blockeventruntime.saveblockeventruntime.tryRecordGoroutineProfileWBruntime.tryRecordGoroutineProfileruntime.doRecordGoroutineProfileruntime.doRecordGoroutineProfile.func1runtime.savegruntime.traceallocruntime.tracealloc.func1runtime.tracefreeruntime.tracefree.func1runtime.tracegcruntime.makeAddrRangeruntime.addrRange.subtractruntime.(*addrRanges).initruntime.(*addrRanges).findSuccruntime.(*addrRanges).findAddrGreaterEqualruntime.(*addrRanges).addruntime.(*spanSet).pushruntime.(*spanSet).popruntime.(*spanSet).resetruntime.(*spanSetBlockAlloc).allocruntime.(*atomicHeadTailIndex).incTailruntime.init.4runtime.(*sysMemStat).addruntime.(*consistentHeapStats).acquireruntime.(*consistentHeapStats).releaseruntime.(*wbBuf).resetruntime.wbBufFlushruntime.wbBufFlush1runtime.netpollGenericInitruntime.(*pollCache).freeruntime.netpollreadyruntime.netpollblockcommitruntime.netpollblockruntime.(*pollCache).allocruntime.netpollinitruntime.netpollopenruntime.netpollcloseruntime.netpollBreakruntime.netpollruntime.futexsleepruntime.futexwakeupruntime.futexwakeup.func1runtime.getproccountruntime.newosprocruntime.newosproc.func1runtime.sysargsruntime.sysauxvruntime.getHugePageSizeruntime.osinitruntime.getRandomDataruntime.mpreinitruntime.minitruntime.setsigruntime.setsigstackruntime.sysSigactionruntime.signalMruntime.setThreadCPUProfilerruntime.runPerThreadSyscallruntime.panicCheck1runtime.panicCheck2runtime.goPanicIndexruntime.goPanicIndexUruntime.goPanicSliceAlenruntime.goPanicSliceAlenUruntime.goPanicSliceAcapruntime.goPanicSliceAcapUruntime.goPanicSliceBruntime.goPanicSliceBUruntime.goPanicSlice3Alenruntime.goPanicSlice3AlenUruntime.goPanicSlice3Cruntime.panicshiftruntime.panicdivideruntime.deferprocStackruntime.newdeferruntime.freedeferruntime.freedeferpanicruntime.freedeferfnruntime.deferreturnruntime.preprintpanicsruntime.printpanicsruntime.addOneOpenDeferFrameruntime.addOneOpenDeferFrame.func1runtime.addOneOpenDeferFrame.func1.1runtime.runOpenDeferFrameruntime.deferCallSaveruntime.gopanicruntime.getargpruntime.gorecoverruntime.throwruntime.throw.func1runtime.fatalruntime.fatal.func1runtime.recoveryruntime.fatalthrowruntime.fatalthrow.func1runtime.fatalpanicruntime.fatalpanic.func1runtime.startpanic_mruntime.dopanic_mruntime.canpanicruntime.shouldPushSigpanicruntime.isAbortPCruntime.suspendGruntime.resumeGruntime.asyncPreempt2runtime.init.5runtime.isAsyncSafePointruntime.recordForPanicruntime.printlockruntime.printunlockruntime.gwriteruntime.printspruntime.printnlruntime.printboolruntime.printfloatruntime.printcomplexruntime.printuintruntime.printintruntime.printhexruntime.printpointerruntime.printuintptrruntime.printstringruntime.printsliceruntime.hexdumpWordsruntime.mainruntime.main.func2runtime.init.6runtime.forcegchelperruntime.Goschedruntime.goschedIfBusyruntime.goparkruntime.goreadyruntime.goready.func1runtime.acquireSudogruntime.releaseSudogruntime.badmcallruntime.badmcall2runtime.badreflectcallruntime.badmorestackg0runtime.badmorestackgsignalruntime.badctxtruntime.allgaddruntime.forEachGruntime.forEachGRaceruntime.cpuinitruntime.getGodebugEarlyruntime.schedinitruntime.checkmcountruntime.mReserveIDruntime.mcommoninitruntime.readyruntime.freezetheworldruntime.casfrom_Gscanstatusruntime.castogscanstatusruntime.casgstatusruntime.casgstatus.func1runtime.casGToPreemptScanruntime.casGFromPreemptedruntime.stopTheWorldruntime.stopTheWorld.func1runtime.startTheWorldruntime.stopTheWorldGCruntime.startTheWorldGCruntime.stopTheWorldWithSemaruntime.startTheWorldWithSemaruntime.mstart0runtime.mstart1runtime.mstartm0runtime.mParkruntime.mexitruntime.forEachPruntime.runSafePointFnruntime.allocmruntime.allocm.func1runtime.needmruntime.newextramruntime.oneNewExtraMruntime.dropmruntime.lockextraruntime.newmruntime.newm1runtime.startTemplateThreadruntime.templateThreadruntime.stopmruntime.mspinningruntime.startmruntime.handoffpruntime.wakepruntime.stoplockedmruntime.startlockedmruntime.gcstopmruntime.executeruntime.findRunnableruntime.pollWorkruntime.stealWorkruntime.checkRunqsNoPruntime.checkTimersNoPruntime.checkIdleGCNoPruntime.wakeNetPollerruntime.resetspinningruntime.injectglistruntime.scheduleruntime.checkTimersruntime.parkunlock_cruntime.park_mruntime.goschedImplruntime.gosched_mruntime.goschedguarded_mruntime.gopreempt_mruntime.preemptParkruntime.goyield_mruntime.goexit1runtime.goexit0runtime.saveruntime.reentersyscallruntime.reentersyscall.func1runtime.entersyscall_sysmonruntime.entersyscall_gcwaitruntime.entersyscallblockruntime.entersyscallblock.func2runtime.entersyscallblock.func1runtime.entersyscallblock_handoffruntime.exitsyscall.func1runtime.exitsyscallfastruntime.exitsyscallfast.func1runtime.exitsyscallfast_reacquiredruntime.exitsyscallfast_reacquired.func1runtime.exitsyscallfast_pidleruntime.exitsyscall0runtime.malgruntime.malg.func1runtime.newprocruntime.newproc.func1runtime.newproc1runtime.saveAncestorsruntime.gfputruntime.gfgetruntime.gfget.func2runtime.gfget.func1runtime.gfpurgeruntime.unlockOSThreadruntime.badunlockosthreadruntime._Systemruntime._ExternalCoderuntime._LostExternalCoderuntime._GCruntime._LostSIGPROFDuringAtomic64runtime._VDSOruntime.sigprofruntime.(*p).initruntime.(*p).destroyruntime.(*p).destroy.func1runtime.procresizeruntime.acquirepruntime.wirepruntime.releasepruntime.incidlelockedruntime.checkdeadruntime.checkdead.func1runtime.sysmonruntime.retakeruntime.preemptallruntime.preemptoneruntime.schedtraceruntime.schedEnableUserruntime.mputruntime.globrunqgetruntime.updateTimerPMaskruntime.pidleputruntime.pidlegetruntime.pidlegetSpinningruntime.runqputruntime.runqputslowruntime.runqputbatchruntime.runqgetruntime.runqdrainruntime.runqgrabruntime.runqstealruntime.doInitruntime.(*profBuf).takeOverflowruntime.(*profBuf).canWriteRecordruntime.(*profBuf).canWriteTwoRecordsruntime.(*profBuf).writeruntime.(*profBuf).wakeupExtraruntime.retryOnEAGAINruntime.argsruntime.goargsruntime.goenvs_unixruntime.testAtomic64runtime.checkruntime.parsedebugvarsruntime.extendRandomruntime.waitReason.Stringruntime.(*rwmutex).rlockruntime.(*rwmutex).rlock.func1runtime.(*rwmutex).runlockruntime.readyWithTimeruntime.semacquire1runtime.semrelease1runtime.(*semaRoot).queueruntime.(*semaRoot).dequeueruntime.(*semaRoot).rotateLeftruntime.(*semaRoot).rotateRightruntime.dumpregsruntime.(*sigctxt).preparePanicruntime.initsigruntime.sigpiperuntime.doSigPreemptruntime.sigtrampgoruntime.sigprofNonGoruntime.sigprofNonGoPCruntime.adjustSignalStackruntime.sighandlerruntime.sigpanicruntime.dieFromSignalruntime.raisebadsignalruntime.crashruntime.noSignalStackruntime.sigNotOnStackruntime.signalDuringForkruntime.badsignalruntime.sigfwdgoruntime.sigblockruntime.unblocksigruntime.minitSignalsruntime.minitSignalStackruntime.minitSignalMaskruntime.unminitSignalsruntime.signalstackruntime.sigsendruntime.panicmakeslicelenruntime.makeslicecopyruntime.makesliceruntime.growsliceruntime.slicecopyruntime.stackpoolallocruntime.stackpoolfreeruntime.stackcacherefillruntime.stackcachereleaseruntime.stackcache_clearruntime.stackallocruntime.stackfreeruntime.adjustpointersruntime.adjustframeruntime.adjustdefersruntime.syncadjustsudogsruntime.copystackruntime.newstackruntime.nilfuncruntime.gostartcallfnruntime.shrinkstackruntime.freeStackSpansruntime.gcComputeStartingStackSizeruntime.(*stkframe).argBytesruntime.(*stkframe).argMapInternalruntime.(*stkframe).getStackMapruntime.stkobjinitruntime.concatstringsruntime.concatstring2runtime.concatstring3runtime.concatstring4runtime.concatstring5runtime.slicebytetostringruntime.rawstringtmpruntime.stringtoslicebyteruntime.stringtosliceruneruntime.slicerunetostringruntime.intstringruntime.rawbytesliceruntime.rawrunesliceruntime.atoi64runtime.parseByteCountruntime.findnullruntime.badsystemstackruntime.fastrandruntime.(*Frames).Nextruntime.expandCgoFramesruntime.modulesinitruntime.moduledataverify1runtime.(*moduledata).textAddrruntime.(*Func).Entryruntime.(*Func).startLineruntime.funcInfo.entryruntime.findfuncruntime.pcvalueruntime.funcnameruntime.funcpkgpathruntime.funcnameFromNameOffruntime.funcfileruntime.funcline1runtime.funclineruntime.funcspdeltaruntime.funcMaxSPDeltaruntime.pcdatavalueruntime.pcdatavalue1runtime.pcdatavalue2runtime.stepruntime.doaddtimerruntime.deltimerruntime.dodeltimerruntime.dodeltimer0runtime.modtimerruntime.moveTimersruntime.adjusttimersruntime.addAdjustedTimersruntime.runtimerruntime.runOneTimerruntime.clearDeletedTimersruntime.timeSleepUntilruntime.siftupTimerruntime.siftdownTimerruntime.badTimerruntime.nanotimeruntime.writeruntime.traceReaderruntime.traceProcFreeruntime.traceEventruntime.traceEventLockedruntime.traceEventLocked.func1runtime.traceCPUSampleruntime.traceStackIDruntime.traceAcquireBufferruntime.traceReleaseBufferruntime.traceFlushruntime.(*traceStackTable).putruntime.(*traceStackTable).put.func1runtime.(*traceStackTable).newStackruntime.(*traceAlloc).allocruntime.traceProcStartruntime.traceProcStopruntime.traceGCSweepStartruntime.traceGCSweepSpanruntime.traceGCSweepDoneruntime.traceGoCreateruntime.traceGoStartruntime.traceGoSchedruntime.traceGoParkruntime.traceGoUnparkruntime.traceGoSysCallruntime.traceGoSysExitruntime.traceGoSysBlockruntime.traceHeapAllocruntime.traceHeapGoalruntime.startPCforTraceruntime.gentracebackruntime.printArgsruntime.printArgs.func2runtime.printArgs.func1runtime.tracebackCgoContextruntime.printcreatedbyruntime.printcreatedby1runtime.tracebackruntime.tracebacktrapruntime.traceback1runtime.printAncestorTracebackruntime.printAncestorTracebackFuncInforuntime.callersruntime.callers.func1runtime.gcallersruntime.showframeruntime.showfuncinforuntime.goroutineheaderruntime.tracebackothersruntime.tracebackothers.func1runtime.tracebackHexdumpruntime.tracebackHexdump.func1runtime.isSystemGoroutineruntime.printCgoTracebackruntime.printOneCgoTracebackruntime.callCgoSymbolizerruntime.cgoContextPCsruntime.(*_type).stringruntime.(*_type).pkgpathruntime.resolveNameOffruntime.resolveTypeOffruntime.(*_type).textOffruntime.name.nameruntime.name.tagruntime.name.pkgPathruntime.name.isBlankruntime.typelinksinitruntime.typesEqualruntime.panicunsafestringlenruntime.panicunsafestringnilptrruntime.panicunsafeslicelenruntime.panicunsafeslicenilptrruntime.decoderuneruntime.encoderuneruntime.vdsoInitFromSysinfoEhdrruntime.vdsoFindVersionruntime.vdsoParseSymbolsruntime.vdsoParseSymbols.func1runtime.vdsoauxvruntime.schedtrace.func1runtime.injectglist.func1runtime.startTheWorld.func1runtime.main.func1runtime.fatalpanic.func2runtime.preprintpanics.func1runtime.sysSigaction.func1runtime.wbBufFlush.func1runtime.sweepone.func1runtime.(*scavengerState).init.func1runtime.(*scavengerState).init.func2runtime.(*scavengerState).init.func3runtime.(*scavengerState).init.func4runtime.gcResetMarkState.func1runtime.gcBgMarkWorker.func1runtime.gcMarkTermination.func2runtime.gcMarkTermination.func3runtime.gcMarkTermination.func4.1runtime.gcMarkTermination.func4runtime.gcMarkDone.func1.1runtime.gcMarkDone.func1runtime.gcMarkDone.func3runtime.gcStart.func1runtime.runExitHooks.func1runtime.runExitHooks.func1.1runtime.debugCallWrap1.func1runtime.debugCallWrap.func2runtime.(*mheap).allocSpan.func1runtime.(*pageAlloc).sysGrow.func1runtime.initsync/atomic.StorePointersync/atomic.SwapPointersync/atomic.CompareAndSwapPointerreflect.chanleninternal/reflectlite.chanlenreflect.ifaceE2Ireflect.unsafe_Newinternal/reflectlite.unsafe_Newreflect.unsafe_NewArrayreflect.makemapreflect.mapassignreflect.mapassign_faststrreflect.mapdeletereflect.mapdelete_faststrreflect.mapiterinitreflect.mapiternextreflect.mapiterkeyreflect.mapiterelemreflect.mapleninternal/reflectlite.maplenreflect.typedmemmoveinternal/reflectlite.typedmemmovereflect.typedslicecopyreflect.typedmemclrreflect.verifyNotInHeapPtrsync.runtime_registerPoolCleanupsync.eventinternal/poll.runtime_pollServerInitinternal/poll.runtime_pollOpeninternal/poll.runtime_pollCloseinternal/poll.runtime_pollResetinternal/poll.runtime_pollWaitinternal/poll.runtime_pollUnblocksync.throwsync.fatalruntime.entersyscallruntime.exitsyscallsync.runtime_procPinsync.runtime_procUnpinsync.runtime_canSpinsync.runtime_doSpinsyscall.runtime_envsos.runtime_argsruntime/debug.SetTracebackreflect.typelinksreflect.resolveNameOffreflect.resolveTypeOffreflect.resolveTextOffinternal/reflectlite.resolveNameOffreflect.addReflectOffsync.runtime_Semacquireinternal/poll.runtime_Semacquiresync.runtime_Semreleasesync.runtime_SemacquireMutexinternal/poll.runtime_Semreleasesync.runtime_notifyListChecksync.runtime_nanotimeos.sigpiperuntime.morestackcruntime.gostringreflect.memmove_rt0_amd64runtime.rt0_go.abi0runtime.asminit.abi0runtime.mstart.abi0runtime.gogo.abi0runtime.mcallruntime.systemstack_switch.abi0runtime.systemstack.abi0runtime.morestack.abi0runtime.morestack_noctxt.abi0runtime.spillArgs.abi0runtime.unspillArgs.abi0runtime.reflectcall.abi0runtime.call16.abi0runtime.call32.abi0runtime.call64.abi0runtime.call128.abi0runtime.call256.abi0runtime.call512.abi0runtime.call1024.abi0runtime.call2048.abi0runtime.call4096.abi0runtime.call8192.abi0runtime.call16384.abi0runtime.call32768.abi0runtime.call65536.abi0runtime.call131072.abi0runtime.call262144.abi0runtime.call524288.abi0runtime.call1048576.abi0runtime.call2097152.abi0runtime.call4194304.abi0runtime.call8388608.abi0runtime.call16777216.abi0runtime.call33554432.abi0runtime.call67108864.abi0runtime.call134217728.abi0runtime.call268435456.abi0runtime.call536870912.abi0runtime.call1073741824.abi0runtime.procyield.abi0runtime.publicationBarrier.abi0runtime.asmcgocall.abi0runtime.setg.abi0runtime.abort.abi0runtime.stackcheck.abi0runtime.cputicks.abi0runtime.memhashruntime.strhashruntime.memhash32runtime.memhash64runtime.checkASM.abi0runtime.return0.abi0runtime.goexit.abi0runtime.sigpanic0.abi0runtime.gcWriteBarrierruntime.gcWriteBarrierCXruntime.gcWriteBarrierDXruntime.gcWriteBarrierBXruntime.gcWriteBarrierSIruntime.gcWriteBarrierR8runtime.gcWriteBarrierR9runtime.debugCallV2runtime.debugCallPanicked.abi0runtime.panicIndexruntime.panicIndexUruntime.panicSliceAlenruntime.panicSliceAlenUruntime.panicSliceAcapruntime.panicSliceAcapUruntime.panicSliceBruntime.panicSliceBUruntime.panicSlice3Alenruntime.panicSlice3AlenUruntime.panicSlice3Cruntime.duffzeroruntime.duffcopyruntime.memclrNoHeapPointersruntime.memmoveruntime.asyncPreempt.abi0_rt0_amd64_linuxruntime.exit.abi0runtime.exitThread.abi0runtime.open.abi0runtime.closefd.abi0runtime.write1.abi0runtime.read.abi0runtime.pipe2.abi0runtime.usleep.abi0runtime.gettid.abi0runtime.raise.abi0runtime.raiseproc.abi0runtime.getpid.abi0runtime.tgkill.abi0runtime.timer_create.abi0runtime.timer_settime.abi0runtime.timer_delete.abi0runtime.mincore.abi0runtime.nanotime1.abi0runtime.rtsigprocmask.abi0runtime.rt_sigaction.abi0runtime.callCgoSigaction.abi0runtime.sigfwd.abi0runtime.sigtramp.abi0runtime.cgoSigtramp.abi0runtime.sigreturn.abi0runtime.sysMmap.abi0runtime.callCgoMmap.abi0runtime.sysMunmap.abi0runtime.callCgoMunmap.abi0runtime.madvise.abi0runtime.futex.abi0runtime.clone.abi0runtime.sigaltstack.abi0runtime.settls.abi0runtime.osyield.abi0runtime.sched_getaffinity.abi0time.nowruntime.(*lockRank).Stringruntime.(*waitReason).Stringruntime.(*errorString).Errorruntime.(*errorAddressString).Errorruntime.(*plainError).Errorruntime.(*boundsError).Errorruntime.(*itabTableType).add-fmruntime.debugCallCheck.abi0runtime.debugCallWrap.abi0runtime.reflectcallmove.abi0runtime.wbBufFlush.abi0runtime.osinit.abi0runtime.osyieldruntime.asyncPreempt2.abi0runtime.badmcall.abi0runtime.badmcall2.abi0runtime.badreflectcall.abi0runtime.badmorestackg0.abi0runtime.badmorestackgsignal.abi0runtime.schedinit.abi0runtime.mstart0.abi0runtime.goexit1.abi0runtime.newproc.abi0runtime.args.abi0runtime.check.abi0runtime.newstack.abi0runtime.morestackc.abi0runtime.badsystemstack.abi0runtime.reflectcallruntime.asmcgocallruntime.write.abi0type:.eq.runtime._functype:.eq.runtime.itabtype:.eq.runtime.modulehashtype:.eq.runtime.bitvectortype:.eq.runtime.Frametype:.eq.[2]runtime.Frametype:.eq.runtime.TypeAssertionErrortype:.eq.runtime._panictype:.eq.runtime.mSpanListtype:.eq.runtime.gcBitstype:.eq.runtime.specialtype:.eq.runtime.mspantype:.eq.runtime.boundsErrortype:.eq.runtime.sysmonticktype:.eq.runtime.mcachetype:.eq.struct { runtime.gList; runtime.n int32 }type:.eq.runtime.hchantype:.eq.runtime.sudogtype:.eq.runtime.notInHeaptype:.eq.runtime.limiterEventtype:.eq.runtime.workbuftype:.eq.runtime.gcWorktype:.eq.runtime.mOStype:.eq.runtime.errorAddressStringtype:.eq.runtime.piControllertype:.eq.[2]stringsync/atomic.SwapUintptrsync/atomic.CompareAndSwapUintptrsync/atomic.StoreUint32sync/atomic.StoreUintptrtype:.eq.sync/atomic.Uint64internal/reflectlite.Swapperinternal/reflectlite.Swapper.func9internal/reflectlite.Swapper.func8internal/reflectlite.Swapper.func7internal/reflectlite.Swapper.func6internal/reflectlite.Swapper.func5internal/reflectlite.Swapper.func4internal/reflectlite.Swapper.func3internal/reflectlite.name.nameinternal/reflectlite.Kind.Stringinternal/reflectlite.(*rtype).Stringinternal/reflectlite.(*rtype).exportedMethodsinternal/reflectlite.(*rtype).NumMethodinternal/reflectlite.(*rtype).PkgPathinternal/reflectlite.(*rtype).Nameinternal/reflectlite.(*rtype).Eleminternal/reflectlite.(*rtype).Leninternal/reflectlite.(*rtype).NumFieldinternal/reflectlite.(*ValueError).Errorinternal/reflectlite.Value.Leninternal/reflectlite.Swapper.func1internal/reflectlite.Swapper.func2type:.eq.internal/reflectlite.uncommonTypeinternal/reflectlite.(*Kind).Stringtype:.eq.internal/reflectlite.ValueErrorerrors.(*errorString).Errorerrors.initsync.(*Map).Loadsync.(*Map).LoadOrStoresync.(*entry).tryLoadOrStoresync.(*entry).trySwapsync.(*Map).Swapsync.(*Map).missLockedsync.(*Map).dirtyLockedsync.(*entry).tryExpungeLockedsync.(*Mutex).lockSlowsync.(*Mutex).Unlocksync.(*Mutex).unlockSlowsync.(*Once).doSlowsync.(*Once).doSlow.func2sync.(*Once).doSlow.func1sync.(*Pool).Putsync.(*Pool).Getsync.(*Pool).getSlowsync.(*Pool).pinsync.(*Pool).pinSlowsync.(*Pool).pinSlow.func1sync.poolCleanupsync.init.0sync.(*poolDequeue).pushHeadsync.(*poolDequeue).popHeadsync.(*poolDequeue).popTailsync.(*poolChain).pushHeadsync.(*poolChain).popHeadsync.(*poolChain).popTailsync.init.1sync.(*WaitGroup).Addsync.(*WaitGroup).Waitsync.inittype:.eq.sync/atomic.Pointer[interface {}]type:.eq.sync.entrytype:.eq.sync.poolLocalInternaltype:.eq.sync.poolLocaltype:.eq.sync.WaitGroupio.initunicode/utf8.DecodeRuneunicode/utf8.DecodeRuneInStringunicode/utf8.DecodeLastRuneunicode/utf8.DecodeLastRuneInStringunicode/utf8.EncodeRuneunicode/utf8.appendRuneNonASCIIunicode/utf8.RuneCountunicode/utf8.RuneCountInStringunicode/utf8.ValidStringunicode.IsSpaceunicode.is16unicode.is32unicode.isExcludingLatinunicode.tounicode.ToUpperunicode.ToLowerunicode.SimpleFoldunicode.initbytes.(*Buffer).Stringbytes.(*Buffer).Lenbytes.(*Buffer).growbytes.(*Buffer).Writebytes.(*Buffer).WriteStringbytes.growSlicebytes.(*Buffer).WriteBytebytes.IndexRunebytes.IndexAnybytes.TrimRightFuncbytes.TrimFuncbytes.indexFuncbytes.lastIndexFuncbytes.TrimRightbytes.trimRightUnicodebytes.TrimSpacebytes.EqualFoldbytes.Indexbytes.Cutbytes.growSlice.func1bytes.initmath.initstrconv.specialstrconv.(*decimal).setstrconv.readFloatstrconv.(*decimal).floatBitsstrconv.atof64exactstrconv.atof32exactstrconv.atofHexstrconv.atof32strconv.atof64strconv.ParseFloatstrconv.parseFloatPrefixstrconv.(*NumError).Errorstrconv.baseErrorstrconv.bitSizeErrorstrconv.ParseUintstrconv.ParseIntstrconv.underscoreOKstrconv.(*decimal).Assignstrconv.rightShiftstrconv.leftShiftstrconv.(*decimal).Shiftstrconv.(*decimal).Roundstrconv.(*decimal).RoundedIntegerstrconv.eiselLemire64strconv.eiselLemire32strconv.FormatFloatstrconv.genericFtoastrconv.bigFtoastrconv.formatDigitsstrconv.roundShorteststrconv.fmtEstrconv.fmtFstrconv.fmtBstrconv.fmtXstrconv.ryuFtoaFixed32strconv.ryuFtoaFixed64strconv.formatDecimalstrconv.ryuFtoaShorteststrconv.ryuDigitsstrconv.ryuDigits32strconv.mult64bitPow10strconv.mult128bitPow10strconv.FormatUintstrconv.FormatIntstrconv.AppendIntstrconv.AppendUintstrconv.formatBitsstrconv.appendQuotedWithstrconv.appendQuotedRuneWithstrconv.appendEscapedRunestrconv.CanBackquotestrconv.UnquoteCharstrconv.Unquotestrconv.unquotestrconv.IsPrintstrconv.inittype:.eq.strconv.NumErrorinternal/itoa.Itoareflect.(*abiSeq).addArgreflect.(*abiSeq).addRcvrreflect.(*abiSeq).regAssignreflect.(*abiSeq).assignIntNreflect.newAbiDescreflect.intFromRegreflect.intToRegreflect.makeMethodValuereflect.moveMakeFuncArgPtrsreflect.name.namereflect.name.tagreflect.name.pkgPathreflect.newNamereflect.Kind.Stringreflect.(*rtype).Stringreflect.(*rtype).Bitsreflect.(*rtype).Kindreflect.(*rtype).commonreflect.(*rtype).exportedMethodsreflect.(*rtype).NumMethodreflect.(*rtype).PkgPathreflect.(*rtype).Namereflect.(*rtype).ChanDirreflect.(*rtype).Elemreflect.(*rtype).Fieldreflect.(*rtype).Inreflect.(*rtype).Keyreflect.(*rtype).Lenreflect.(*rtype).NumFieldreflect.(*rtype).NumInreflect.(*rtype).NumOutreflect.(*rtype).Outreflect.ChanDir.Stringreflect.StructTag.Lookupreflect.(*structType).Fieldreflect.(*rtype).ptrToreflect.(*rtype).Implementsreflect.implementsreflect.specialChannelAssignabilityreflect.directlyAssignablereflect.haveIdenticalTypereflect.haveIdenticalUnderlyingTypereflect.typesByStringreflect.funcLayoutreflect.funcLayout.func1reflect.addTypeBitsreflect.packEfacereflect.(*ValueError).Errorreflect.valueMethodNamereflect.flag.mustBeExportedSlowreflect.flag.mustBeAssignableSlowreflect.Value.Addrreflect.Value.panicNotBoolreflect.Value.bytesSlowreflect.Value.runesreflect.methodReceiverreflect.callMethodreflect.Value.Elemreflect.Value.Fieldreflect.Value.Indexreflect.valueInterfacereflect.Value.Kindreflect.Value.Lenreflect.Value.lenNonSlicereflect.(*MapIter).Keyreflect.(*MapIter).Valuereflect.(*MapIter).Nextreflect.flag.panicNotMapreflect.copyValreflect.Value.NumMethodreflect.Value.NumFieldreflect.Value.Pointerreflect.Value.Setreflect.Value.SetBoolreflect.Value.SetBytesreflect.Value.setRunesreflect.Value.SetFloatreflect.Value.SetIntreflect.Value.SetLenreflect.Value.SetMapIndexreflect.Value.SetUintreflect.Value.SetStringreflect.Value.Slicereflect.Value.Stringreflect.Value.stringNonStringreflect.Value.typeSlowreflect.Value.UnsafePointerreflect.typesMustMatchreflect.Copyreflect.MakeSlicereflect.MakeMapWithSizereflect.Zeroreflect.Newreflect.Value.assignToreflect.Value.Convertreflect.convertOpreflect.makeIntreflect.makeFloatreflect.makeFloat32reflect.makeComplexreflect.makeStringreflect.makeBytesreflect.makeRunesreflect.cvtIntreflect.cvtUintreflect.cvtFloatIntreflect.cvtFloatUintreflect.cvtIntFloatreflect.cvtUintFloatreflect.cvtFloatreflect.cvtComplexreflect.cvtIntStringreflect.cvtUintStringreflect.cvtBytesStringreflect.cvtStringBytesreflect.cvtRunesStringreflect.cvtStringRunesreflect.cvtSliceArrayPtrreflect.cvtSliceArrayreflect.cvtDirectreflect.cvtT2Ireflect.cvtI2Ireflect.initreflect.methodValueCall.abi0type:.eq.reflect.uncommonTypetype:.eq.reflect.Methodreflect.(*Kind).Stringreflect.(*ChanDir).Stringreflect.(*Value).Kindreflect.(*Value).Lenreflect.(*Value).NumFieldreflect.(*Value).NumMethodreflect.(*Value).Stringreflect.(*funcType).Bitsreflect.(*funcType).Elemreflect.(*funcType).Fieldreflect.(*funcType).Implementsreflect.(*funcType).Keyreflect.(*funcType).Kindreflect.(*funcType).Lenreflect.(*funcType).Namereflect.(*funcType).NumFieldreflect.(*funcType).NumMethodreflect.(*funcType).PkgPathreflect.(*funcType).Stringreflect.(*funcType).commonreflect.(*ptrType).Bitsreflect.(*ptrType).Elemreflect.(*ptrType).Fieldreflect.(*ptrType).Implementsreflect.(*ptrType).Keyreflect.(*ptrType).Kindreflect.(*ptrType).Lenreflect.(*ptrType).Namereflect.(*ptrType).NumFieldreflect.(*ptrType).NumMethodreflect.(*ptrType).PkgPathreflect.(*ptrType).Stringreflect.(*ptrType).commonreflect.moveMakeFuncArgPtrs.abi0reflect.callMethod.abi0type:.eq.reflect.ValueErrortype:.eq.reflect.makeFuncCtxttype:.eq.reflect.methodValueencoding/binary.initencoding/base64.(*Encoding).Encodeencoding/base64.(*encoder).Writeencoding/base64.(*encoder).Closeencoding/base64.CorruptInputError.Errorencoding/base64.(*Encoding).decodeQuantumencoding/base64.(*Encoding).Decodeencoding/base64.inittype:.eq.encoding/base64.Encodingtype:.eq.encoding/base64.encoderencoding/base64.(*CorruptInputError).Errorsort.Searchsort.Slicesort.Sortsort.IntSlice.Lensort.IntSlice.Lesssort.IntSlice.Swapsort.Stablesort.insertionSort_funcsort.siftDown_funcsort.heapSort_funcsort.pdqsort_funcsort.partition_funcsort.partitionEqual_funcsort.partialInsertionSort_funcsort.breakPatterns_funcsort.choosePivot_funcsort.median_funcsort.reverseRange_funcsort.insertionSortsort.siftDownsort.heapSortsort.pdqsortsort.partitionsort.partitionEqualsort.partialInsertionSortsort.breakPatternssort.choosePivotsort.mediansort.reverseRangesort.stablesort.symMergesort.rotatesort.(*IntSlice).Lensort.(*IntSlice).Lesssort.(*IntSlice).Swapstrings.(*Builder).WriteRunestrings.IndexRunestrings.Joinstrings.Mapstrings.ToLowerstrings.Indexstrings.Cutencoding/pem.getLineencoding/pem.removeSpacesAndTabsencoding/pem.Decodeinternal/fmtsort.(*SortedMap).Leninternal/fmtsort.(*SortedMap).Lessinternal/fmtsort.(*SortedMap).Swapinternal/fmtsort.Sortinternal/fmtsort.compareinternal/fmtsort.nilCompareinternal/oserror.initsyscall.SetNonblocksyscall.Errno.Errorsyscall.Closesyscall.fcntlsyscall.writesyscall.munmapsyscall.Getrlimitsyscall.Setrlimitsyscall.mmapsyscall.initsyscall.RawSyscallsyscall.Syscallsyscall.Syscall6syscall.(*Errno).Errortime.initpath.initio/fs.(*PathError).Errorio/fs.inittype:.eq.io/fs.PathErrorinternal/syscall/unix.IsNonblockinternal/poll.errNetClosing.Errorinternal/poll.(*DeadlineExceededError).Errorinternal/poll.(*fdMutex).increfAndCloseinternal/poll.(*fdMutex).rwlockinternal/poll.(*fdMutex).rwunlockinternal/poll.(*FD).decrefinternal/poll.(*FD).writeUnlockinternal/poll.(*pollDesc).initinternal/poll.(*pollDesc).prepareinternal/poll.(*pollDesc).waitinternal/poll.(*FD).Initinternal/poll.(*FD).destroyinternal/poll.(*FD).Closeinternal/poll.(*FD).Writeinternal/poll.(*FD).Write.func1internal/poll.initinternal/poll.(*errNetClosing).Errortype:.eq.internal/poll.FDinternal/safefilepath.initos.glob..func1os.(*File).Nameos.(*File).Writeos.NewFileos.newFileos.(*file).closeos.init.0os.init.1os.inittype:.eq.os.filefmt.Errorffmt.(*wrapError).Errorfmt.(*wrapErrors).Errorfmt.(*fmt).writePaddingfmt.(*fmt).padfmt.(*fmt).padStringfmt.(*fmt).fmtBooleanfmt.(*fmt).fmtUnicodefmt.(*fmt).fmtIntegerfmt.(*fmt).truncatefmt.(*fmt).fmtSfmt.(*fmt).fmtBsfmt.(*fmt).fmtSbxfmt.(*fmt).fmtQfmt.(*fmt).fmtCfmt.(*fmt).fmtQcfmt.(*fmt).fmtFloatfmt.glob..func1fmt.newPrinterfmt.(*pp).freefmt.(*pp).Writefmt.Sprintffmt.Fprintfmt.Fprintlnfmt.getFieldfmt.(*pp).unknownTypefmt.(*pp).badVerbfmt.(*pp).fmtBoolfmt.(*pp).fmt0x64fmt.(*pp).fmtIntegerfmt.(*pp).fmtFloatfmt.(*pp).fmtComplexfmt.(*pp).fmtStringfmt.(*pp).fmtBytesfmt.(*pp).fmtPointerfmt.(*pp).catchPanicfmt.(*pp).handleMethodsfmt.(*pp).handleMethods.func4fmt.(*pp).handleMethods.func3fmt.(*pp).handleMethods.func2fmt.(*pp).handleMethods.func1fmt.(*pp).printArgfmt.(*pp).printValuefmt.intFromArgfmt.parseArgNumberfmt.(*pp).argNumberfmt.(*pp).badArgNumfmt.(*pp).missingArgfmt.(*pp).doPrintffmt.(*pp).doPrintfmt.(*pp).doPrintlnfmt.inittype:.eq.fmt.fmttype:.eq.fmt.wrapErrorencoding/json.Unmarshalencoding/json.(*UnmarshalTypeError).Errorencoding/json.(*InvalidUnmarshalError).Errorencoding/json.(*decodeState).unmarshalencoding/json.Number.Stringencoding/json.(*decodeState).addErrorContextencoding/json.(*decodeState).skipencoding/json.(*decodeState).scanNextencoding/json.(*decodeState).scanWhileencoding/json.(*decodeState).rescanLiteralencoding/json.(*decodeState).valueencoding/json.(*decodeState).valueQuotedencoding/json.indirectencoding/json.(*decodeState).arrayencoding/json.(*decodeState).objectencoding/json.(*decodeState).convertNumberencoding/json.(*decodeState).literalStoreencoding/json.(*decodeState).valueInterfaceencoding/json.(*decodeState).arrayInterfaceencoding/json.(*decodeState).objectInterfaceencoding/json.(*decodeState).literalInterfaceencoding/json.getu4encoding/json.unquoteBytesencoding/json.Marshalencoding/json.Marshal.func1encoding/json.HTMLEscapeencoding/json.(*UnsupportedTypeError).Errorencoding/json.(*UnsupportedValueError).Errorencoding/json.(*MarshalerError).Errorencoding/json.newEncodeStateencoding/json.(*encodeState).marshalencoding/json.(*encodeState).marshal.func1encoding/json.isEmptyValueencoding/json.(*encodeState).reflectValueencoding/json.valueEncoderencoding/json.typeEncoderencoding/json.typeEncoder.func1encoding/json.newTypeEncoderencoding/json.invalidValueEncoderencoding/json.marshalerEncoderencoding/json.addrMarshalerEncoderencoding/json.textMarshalerEncoderencoding/json.addrTextMarshalerEncoderencoding/json.boolEncoderencoding/json.intEncoderencoding/json.uintEncoderencoding/json.floatEncoder.encodeencoding/json.stringEncoderencoding/json.isValidNumberencoding/json.interfaceEncoderencoding/json.unsupportedTypeEncoderencoding/json.structEncoder.encodeencoding/json.newStructEncoderencoding/json.mapEncoder.encodeencoding/json.mapEncoder.encode.func1encoding/json.mapEncoder.encode.func2encoding/json.newMapEncoderencoding/json.encodeByteSliceencoding/json.sliceEncoder.encodeencoding/json.sliceEncoder.encode.func1encoding/json.newSliceEncoderencoding/json.arrayEncoder.encodeencoding/json.newArrayEncoderencoding/json.ptrEncoder.encodeencoding/json.ptrEncoder.encode.func1encoding/json.newPtrEncoderencoding/json.condAddrEncoder.encodeencoding/json.isValidTagencoding/json.typeByIndexencoding/json.(*reflectWithString).resolveencoding/json.(*encodeState).stringencoding/json.(*encodeState).stringBytesencoding/json.byIndex.Lenencoding/json.byIndex.Swapencoding/json.byIndex.Lessencoding/json.typeFieldsencoding/json.typeFields.func1encoding/json.cachedTypeFieldsencoding/json.equalFoldRightencoding/json.asciiEqualFoldencoding/json.simpleLetterEqualFoldencoding/json.compactencoding/json.compact.func1encoding/json.checkValidencoding/json.(*SyntaxError).Errorencoding/json.glob..func1encoding/json.newScannerencoding/json.freeScannerencoding/json.(*scanner).eofencoding/json.(*scanner).pushParseStateencoding/json.(*scanner).popParseStateencoding/json.stateBeginValueOrEmptyencoding/json.stateBeginValueencoding/json.stateBeginStringOrEmptyencoding/json.stateBeginStringencoding/json.stateEndValueencoding/json.stateEndTopencoding/json.stateInStringencoding/json.stateInStringEscencoding/json.stateInStringEscUencoding/json.stateInStringEscU1encoding/json.stateInStringEscU12encoding/json.stateInStringEscU123encoding/json.stateNegencoding/json.state1encoding/json.state0encoding/json.stateDotencoding/json.stateDot0encoding/json.stateEencoding/json.stateESignencoding/json.stateE0encoding/json.stateTencoding/json.stateTrencoding/json.stateTruencoding/json.stateFencoding/json.stateFaencoding/json.stateFalencoding/json.stateFalsencoding/json.stateNencoding/json.stateNuencoding/json.stateNulencoding/json.stateErrorencoding/json.quoteCharencoding/json.tagOptions.Containsencoding/json.inittype:.eq.encoding/json.SyntaxErrortype:.eq.encoding/json.UnsupportedValueErrortype:.eq.encoding/json.MarshalerErrortype:.eq.encoding/json.UnmarshalTypeErrorencoding/json.(*Number).Stringencoding/json.(*encodeState).Lenencoding/json.(*encodeState).Stringencoding/json.(*encodeState).Writeencoding/json.jsonError.Errorencoding/json.(*jsonError).Errorencoding/json.(*byIndex).Lenencoding/json.(*byIndex).Lessencoding/json.(*byIndex).Swapencoding/json.floatEncoder.encode-fmencoding/json.condAddrEncoder.encode-fmencoding/json.ptrEncoder.encode-fmencoding/json.arrayEncoder.encode-fmencoding/json.sliceEncoder.encode-fmencoding/json.mapEncoder.encode-fmencoding/json.structEncoder.encode-fmtype:.eq.encoding/json.reflectWithStringtype:.eq.struct { encoding/json.ptr interface {}; encoding/json.len int }github.com/tidwall/match.matchgithub.com/tidwall/match.matchTrimSuffixgithub.com/tidwall/pretty.PrettyOptionsgithub.com/tidwall/pretty.uglygithub.com/tidwall/pretty.appendPrettyAnygithub.com/tidwall/pretty.(*byKeyVal).Lengithub.com/tidwall/pretty.(*byKeyVal).Lessgithub.com/tidwall/pretty.(*byKeyVal).Swapgithub.com/tidwall/pretty.(*byKeyVal).isLessgithub.com/tidwall/pretty.parsestrgithub.com/tidwall/pretty.appendPrettyObjectgithub.com/tidwall/pretty.sortPairsgithub.com/tidwall/pretty.init.0github.com/tidwall/pretty.init.0.func1github.com/tidwall/gjson.Result.Stringgithub.com/tidwall/gjson.Result.Boolgithub.com/tidwall/gjson.Result.Intgithub.com/tidwall/gjson.Result.ForEachgithub.com/tidwall/gjson.Parsegithub.com/tidwall/gjson.squashgithub.com/tidwall/gjson.tonumgithub.com/tidwall/gjson.tostrgithub.com/tidwall/gjson.parseStringgithub.com/tidwall/gjson.parseArrayPathgithub.com/tidwall/gjson.parseQuerygithub.com/tidwall/gjson.parseObjectPathgithub.com/tidwall/gjson.parseSquashgithub.com/tidwall/gjson.parseObjectgithub.com/tidwall/gjson.queryMatchesgithub.com/tidwall/gjson.parseArraygithub.com/tidwall/gjson.parseArray.func1github.com/tidwall/gjson.splitPossiblePipegithub.com/tidwall/gjson.parseSubSelectorsgithub.com/tidwall/gjson.appendJSONStringgithub.com/tidwall/gjson.Getgithub.com/tidwall/gjson.unescapegithub.com/tidwall/gjson.parseAnygithub.com/tidwall/gjson.validpayloadgithub.com/tidwall/gjson.validanygithub.com/tidwall/gjson.validobjectgithub.com/tidwall/gjson.validarraygithub.com/tidwall/gjson.validstringgithub.com/tidwall/gjson.validnumbergithub.com/tidwall/gjson.Validgithub.com/tidwall/gjson.execModifiergithub.com/tidwall/gjson.modPrettygithub.com/tidwall/gjson.modPretty.func1github.com/tidwall/gjson.modThisgithub.com/tidwall/gjson.modUglygithub.com/tidwall/gjson.modReversegithub.com/tidwall/gjson.modReverse.func2github.com/tidwall/gjson.modReverse.func1github.com/tidwall/gjson.modFlattengithub.com/tidwall/gjson.modFlatten.func2github.com/tidwall/gjson.modFlatten.func1github.com/tidwall/gjson.modJoingithub.com/tidwall/gjson.modJoin.func3github.com/tidwall/gjson.modJoin.func3.1github.com/tidwall/gjson.modJoin.func2github.com/tidwall/gjson.modJoin.func1github.com/tidwall/gjson.modValidgithub.com/tidwall/gjson.inittype:.eq.github.com/tidwall/gjson.Resulttype:.eq.github.com/tidwall/gjson.subSelectorgolang.org/x/text/internal/tag.Index.Indexgolang.org/x/text/internal/tag.Index.Index.func1golang.org/x/text/internal/tag.Index.Nextgolang.org/x/text/language.Tag.canonicalizegolang.org/x/text/language.(*Tag).remakeStringgolang.org/x/text/language.(*Tag).genCoreBytesgolang.org/x/text/language.findIndexgolang.org/x/text/language.getLangIDgolang.org/x/text/language.normLanggolang.org/x/text/language.normLang.func1golang.org/x/text/language.getLangISO2golang.org/x/text/language.getLangISO3golang.org/x/text/language.langID.Stringgolang.org/x/text/language.getRegionIDgolang.org/x/text/language.getRegionISO2golang.org/x/text/language.getRegionISO3golang.org/x/text/language.getRegionM49golang.org/x/text/language.getRegionM49.func1golang.org/x/text/language.normRegiongolang.org/x/text/language.normRegion.func1golang.org/x/text/language.regionID.Stringgolang.org/x/text/language.grandfatheredgolang.org/x/text/language.addTagsgolang.org/x/text/language.init.0golang.org/x/text/language.ValueError.taggolang.org/x/text/language.ValueError.Errorgolang.org/x/text/language.makeScannerStringgolang.org/x/text/language.(*scanner).resizeRangegolang.org/x/text/language.(*scanner).gobblegolang.org/x/text/language.(*scanner).scangolang.org/x/text/language.(*scanner).acceptMinSizegolang.org/x/text/language.CanonType.Parsegolang.org/x/text/language.parsegolang.org/x/text/language.parseTaggolang.org/x/text/language.parseVariantsgolang.org/x/text/language.variantsSort.Lengolang.org/x/text/language.variantsSort.Swapgolang.org/x/text/language.variantsSort.Lessgolang.org/x/text/language.bytesSort.Lengolang.org/x/text/language.bytesSort.Swapgolang.org/x/text/language.bytesSort.Lessgolang.org/x/text/language.parseExtensionsgolang.org/x/text/language.parseExtensiongolang.org/x/text/language.initgolang.org/x/text/language.(*ValueError).Errorgolang.org/x/text/language.(*variantsSort).Lengolang.org/x/text/language.(*variantsSort).Lessgolang.org/x/text/language.(*variantsSort).Swapgolang.org/x/text/language.(*bytesSort).Lengolang.org/x/text/language.(*bytesSort).Lessgolang.org/x/text/language.(*bytesSort).Swapmain.mainmain..inittaskencoding/pem..inittaskencoding/pem.pemStartencoding/pem.pemEndencoding/pem.pemEndOfLineencoding/pem.colonfmt..inittaskfmt.ppFreefmt.complexErrorfmt.boolErrorgithub.com/tidwall/gjson..inittaskgithub.com/tidwall/gjson.DisableModifiersgithub.com/tidwall/gjson.modifiersgolang.org/x/text/language..inittaskgolang.org/x/text/language.coreTagsgolang.org/x/text/language.errPrivateUsegolang.org/x/text/language.errInvalidArgumentsgolang.org/x/text/language.errNoTLDgolang.org/x/text/language.grandfatheredMapgolang.org/x/text/language.altTagIndexgolang.org/x/text/language.altTagsgolang.org/x/text/language.ErrMissingLikelyTagsDatagolang.org/x/text/language.notEquivalentgolang.org/x/text/language.errSyntaxgolang.org/x/text/language.separatorgolang.org/x/text/language.errInvalidArgumentgolang.org/x/text/language.errInvalidWeightgolang.org/x/text/language.acceptFallbackgolang.org/x/text/language.langNoIndexgolang.org/x/text/language.altLangIndexgolang.org/x/text/language.langAliasMapgolang.org/x/text/language.langAliasTypesgolang.org/x/text/language.suppressScriptgolang.org/x/text/language.altRegionIDsgolang.org/x/text/language.regionOldMapgolang.org/x/text/language.m49golang.org/x/text/language.m49Indexgolang.org/x/text/language.fromM49golang.org/x/text/language.variantIndexgolang.org/x/text/language.likelyScriptgolang.org/x/text/language.likelyLanggolang.org/x/text/language.likelyLangListgolang.org/x/text/language.likelyRegiongolang.org/x/text/language.likelyRegionListgolang.org/x/text/language.likelyRegionGroupgolang.org/x/text/language.paradigmLocalesgolang.org/x/text/language.regionContainmentgolang.org/x/text/language.regionInclusiongolang.org/x/text/language.regionInclusionBitsgolang.org/x/text/language.undbytes..inittaskbytes.ErrTooLargebytes.errNegativeReadbytes.errUnreadBytebytes.asciiSpaceencoding/base64..inittaskencoding/base64.StdEncodingencoding/base64.URLEncodingencoding/base64.RawStdEncodingencoding/base64.RawURLEncodingerrors..inittaskerrors.errorTypeio..inittaskio.ErrShortWriteio.errInvalidWriteio.ErrShortBufferio.EOFio.ErrUnexpectedEOFio.ErrNoProgressio.errWhenceio.errOffsetio.ErrClosedPipesort..inittaskstrings..inittaskstrconv..inittaskstrconv.optimizestrconv.powtabstrconv.float64pow10strconv.float32pow10strconv.ErrRangestrconv.ErrSyntaxstrconv.leftcheatsstrconv.detailedPowersOfTenstrconv.float32infostrconv.float64infostrconv.uint64pow10strconv.isPrint16strconv.isNotPrint16strconv.isPrint32strconv.isNotPrint32strconv.isGraphicunicode/utf8.firstunicode/utf8.acceptRangesinternal/fmtsort..inittaskos..inittaskos.dirBufPoolos.ErrInvalidos.ErrPermissionos.ErrExistos.ErrNotExistos.ErrClosedos.ErrNoDeadlineos.ErrDeadlineExceededos.ErrProcessDoneos.Stdinos.Stdoutos.Stderros.errWriteAtInAppendModeos.Argsos.errPatternHasSeparatorreflect..inittaskreflect.intArgRegsreflect.floatArgRegsreflect.floatRegSizereflect.kindNamesreflect.ptrMapreflect.layoutCachereflect.bytesTypereflect.uint8Typereflect.stringTypereflect.dummysync..inittasksync.expungedsync.allPoolsMusync.allPoolssync.oldPoolsmath..inittaskmath.useFMAencoding/json..inittaskencoding/json.nullLiteralencoding/json.textUnmarshalerTypeencoding/json.numberTypeencoding/json.hexencoding/json.encodeStatePoolencoding/json.encoderCacheencoding/json.marshalerTypeencoding/json.textMarshalerTypeencoding/json.float32Encoderencoding/json.float64Encoderencoding/json.fieldCacheencoding/json.scannerPoolencoding/json.safeSetencoding/json.htmlSafeSettime..inittasktime.atoiErrortime.errBadtime.errLeadingInttime.unitMaptime.startNanotime.errLocationtime.badDatagithub.com/tidwall/pretty..inittaskgithub.com/tidwall/pretty.DefaultOptionsgithub.com/tidwall/pretty.TerminalStylegolang.org/x/text/internal/tag..inittaskinternal/bytealg..inittaskinternal/bytealg.MaxLenunicode..inittaskunicode.Categoriesunicode.Ccunicode.Cfunicode.Counicode.Csunicode.Digitunicode.Ndunicode.Letterunicode.Lunicode.Lmunicode.Lounicode.Llunicode.Municode.Mcunicode.Meunicode.Mnunicode.Nlunicode.Nounicode.Nunicode.Cunicode.Pcunicode.Pdunicode.Peunicode.Pfunicode.Piunicode.Pounicode.Psunicode.Punicode.Scunicode.Skunicode.Smunicode.Sounicode.Zunicode.Sunicode.Ltunicode.Luunicode.Zlunicode.Zpunicode.Zsunicode.Scriptsunicode.Adlamunicode.Ahomunicode.Anatolian_Hieroglyphsunicode.Arabicunicode.Armenianunicode.Avestanunicode.Balineseunicode.Bamumunicode.Bassa_Vahunicode.Batakunicode.Bengaliunicode.Bhaiksukiunicode.Bopomofounicode.Brahmiunicode.Brailleunicode.Bugineseunicode.Buhidunicode.Canadian_Aboriginalunicode.Carianunicode.Caucasian_Albanianunicode.Chakmaunicode.Chamunicode.Cherokeeunicode.Chorasmianunicode.Commonunicode.Copticunicode.Cuneiformunicode.Cypriotunicode.Cyrillicunicode.Deseretunicode.Devanagariunicode.Dives_Akuruunicode.Dograunicode.Duployanunicode.Egyptian_Hieroglyphsunicode.Elbasanunicode.Elymaicunicode.Ethiopicunicode.Georgianunicode.Glagoliticunicode.Gothicunicode.Granthaunicode.Greekunicode.Gujaratiunicode.Gunjala_Gondiunicode.Gurmukhiunicode.Hanunicode.Hangulunicode.Hanifi_Rohingyaunicode.Hanunoounicode.Hatranunicode.Hebrewunicode.Hiraganaunicode.Imperial_Aramaicunicode.Inheritedunicode.Inscriptional_Pahlaviunicode.Inscriptional_Parthianunicode.Javaneseunicode.Kaithiunicode.Kannadaunicode.Katakanaunicode.Kayah_Liunicode.Kharoshthiunicode.Khitan_Small_Scriptunicode.Khmerunicode.Khojkiunicode.Khudawadiunicode.Laounicode.Latinunicode.Lepchaunicode.Limbuunicode.Linear_Aunicode.Linear_Bunicode.Lisuunicode.Lycianunicode.Lydianunicode.Mahajaniunicode.Makasarunicode.Malayalamunicode.Mandaicunicode.Manichaeanunicode.Marchenunicode.Masaram_Gondiunicode.Medefaidrinunicode.Meetei_Mayekunicode.Mende_Kikakuiunicode.Meroitic_Cursiveunicode.Meroitic_Hieroglyphsunicode.Miaounicode.Modiunicode.Mongolianunicode.Mrounicode.Multaniunicode.Myanmarunicode.Nabataeanunicode.Nandinagariunicode.New_Tai_Lueunicode.Newaunicode.Nkounicode.Nushuunicode.Nyiakeng_Puachue_Hmongunicode.Oghamunicode.Ol_Chikiunicode.Old_Hungarianunicode.Old_Italicunicode.Old_North_Arabianunicode.Old_Permicunicode.Old_Persianunicode.Old_Sogdianunicode.Old_South_Arabianunicode.Old_Turkicunicode.Oriyaunicode.Osageunicode.Osmanyaunicode.Pahawh_Hmongunicode.Palmyreneunicode.Pau_Cin_Hauunicode.Phags_Paunicode.Phoenicianunicode.Psalter_Pahlaviunicode.Rejangunicode.Runicunicode.Samaritanunicode.Saurashtraunicode.Sharadaunicode.Shavianunicode.Siddhamunicode.SignWritingunicode.Sinhalaunicode.Sogdianunicode.Sora_Sompengunicode.Soyombounicode.Sundaneseunicode.Syloti_Nagriunicode.Syriacunicode.Tagalogunicode.Tagbanwaunicode.Tai_Leunicode.Tai_Thamunicode.Tai_Vietunicode.Takriunicode.Tamilunicode.Tangutunicode.Teluguunicode.Thaanaunicode.Thaiunicode.Tibetanunicode.Tifinaghunicode.Tirhutaunicode.Ugariticunicode.Vaiunicode.Wanchounicode.Warang_Citiunicode.Yezidiunicode.Yiunicode.Zanabazar_Squareunicode.Propertiesunicode.ASCII_Hex_Digitunicode.Bidi_Controlunicode.Dashunicode.Deprecatedunicode.Diacriticunicode.Extenderunicode.Hex_Digitunicode.Hyphenunicode.IDS_Binary_Operatorunicode.IDS_Trinary_Operatorunicode.Ideographicunicode.Join_Controlunicode.Logical_Order_Exceptionunicode.Noncharacter_Code_Pointunicode.Other_Alphabeticunicode.Other_Default_Ignorable_Code_Pointunicode.Other_Grapheme_Extendunicode.Other_ID_Continueunicode.Other_ID_Startunicode.Other_Lowercaseunicode.Other_Mathunicode.Other_Uppercaseunicode.Pattern_Syntaxunicode.Pattern_White_Spaceunicode.Prepended_Concatenation_Markunicode.Quotation_Markunicode.Radicalunicode.Regional_Indicatorunicode.Sentence_Terminalunicode.Soft_Dottedunicode.Terminal_Punctuationunicode.Unified_Ideographunicode.Variation_Selectorunicode.White_Spaceunicode.CaseRangesunicode.propertiesunicode.asciiFoldunicode.caseOrbitunicode.FoldCategoryunicode.foldLunicode.foldLlunicode.foldLtunicode.foldLuunicode.foldMunicode.foldMnunicode.FoldScriptunicode.foldCommonunicode.foldGreekunicode.foldInheritedencoding/binary..inittaskencoding/binary.overflowinternal/reflectlite..inittaskinternal/reflectlite.kindNamesinternal/reflectlite.dummyio/fs..inittaskio/fs.ErrInvalidio/fs.ErrPermissionio/fs.ErrExistio/fs.ErrNotExistio/fs.ErrClosedio/fs.SkipDirio/fs.SkipAllruntime..inittaskruntime.useAeshashruntime.aeskeyschedruntime.hashkeyruntime.userArenaStateruntime.iscgoruntime.cgoHasExtraMruntime.cgo_yieldruntime.ncgocallruntime.x86HasPOPCNTruntime.x86HasSSE41runtime.x86HasFMAruntime.useAVXmemmoveruntime.cpuprofruntime._cgo_setenvruntime._cgo_unsetenvruntime.boundsErrorFmtsruntime.boundsNegErrorFmtsruntime.exitHooksruntime.buildVersionruntime.fastlog2Tableruntime.infruntime.itabLockruntime.itabTableruntime.itabTableInitruntime.uint16Efaceruntime.uint32Efaceruntime.uint64Efaceruntime.stringEfaceruntime.sliceEfaceruntime.uint16Typeruntime.uint32Typeruntime.uint64Typeruntime.stringTyperuntime.sliceTyperuntime.staticuint64sruntime.lockNamesruntime.physPageSizeruntime.physHugePageSizeruntime.physHugePageShiftruntime.zerobaseruntime.globalAllocruntime.persistentChunksruntime.zeroValruntime.emptymspanruntime.useCheckmarkruntime.adviseUnusedruntime.fingStatusruntime.finlockruntime.fingruntime.finqruntime.fincruntime.finptrmaskruntime.allfinruntime.finalizer1runtime.gcphaseruntime.writeBarrierruntime.gcBlackenEnabledruntime.workruntime.gcMarkDoneFlushedruntime.poolcleanupruntime.boringCachesruntime.gcCPULimiterruntime.oneptrmaskruntime.gcControllerruntime.scavengeruntime.scavengerruntime.sweepruntime.mheap_runtime.mSpanStateNamesruntime.gcBitsArenasruntime.levelBitsruntime.levelShiftruntime.levelLogPagesruntime.profInsertLockruntime.profBlockLockruntime.profMemActiveLockruntime.profMemFutureLockruntime.mbucketsruntime.bbucketsruntime.xbucketsruntime.buckhashruntime.mProfCycleruntime.blockprofilerateruntime.mutexprofilerateruntime.MemProfileRateruntime.disableMemoryProfilingruntime.goroutineProfileruntime.tracelockruntime.minOffAddrruntime.maxOffAddrruntime.spanSetBlockPoolruntime.memstatsruntime.netpollInitLockruntime.netpollInitedruntime.pollcacheruntime.netpollWaitersruntime.pdEfaceruntime.pdTyperuntime.epfdruntime.netpollBreakRdruntime.netpollBreakWrruntime.netpollWakeSigruntime.procAuxvruntime.addrspace_vecruntime.startupRandomDataruntime.sysTHPSizePathruntime.urandom_devruntime.perThreadSyscallruntime.sigset_allruntime.shiftErrorruntime.divideErrorruntime.overflowErrorruntime.floatErrorruntime.memoryErrorruntime.runningPanicDefersruntime.panickingruntime.paniclkruntime.didothersruntime.deadlockruntime.asyncPreemptStackruntime.printBacklogruntime.printBacklogIndexruntime.debuglockruntime.minhexdigitsruntime.modinforuntime.m0runtime.g0runtime.mcache0runtime.main_init_doneruntime.mainStartedruntime.runtimeInitTimeruntime.initSigmaskruntime.allglockruntime.allgsruntime.allglenruntime.allgptrruntime.fastrandseedruntime.freezingruntime.casgstatusAlwaysTrackruntime.worldsemaruntime.gcsemaruntime.extramruntime.extraMCountruntime.extraMWaitersruntime.allocmLockruntime.execLockruntime.newmHandoffruntime.inForkedChildruntime.profruntime.forcegcperiodruntime.starttimeruntime.stealOrderruntime.inittraceruntime.envsruntime.argsliceruntime.godebugEnvruntime.traceback_cacheruntime.traceback_envruntime.argcruntime.argvruntime.test_z64runtime.test_x64runtime.debugruntime.dbgvarsruntime.globalGODEBUGruntime.waitReasonStringsruntime.allmruntime.gomaxprocsruntime.ncpuruntime.forcegcruntime.schedruntime.newprocsruntime.allpLockruntime.allpruntime.idlepMaskruntime.timerpMaskruntime.gcBgMarkWorkerPoolruntime.gcBgMarkWorkerCountruntime.processorVersionInforuntime.isIntelruntime.islibraryruntime.isarchiveruntime.chansendpcruntime.chanrecvpcruntime.semtableruntime.fwdSigruntime.handlingSigruntime.signalsOKruntime.sigprofCallersruntime.sigprofCallersUseruntime.crashingruntime.testSigtrapruntime.testSigusr1runtime.sigsetAllExitingruntime.sigruntime.sigtableruntime.class_to_sizeruntime.class_to_allocnpagesruntime.class_to_divmagicruntime.size_to_class8runtime.size_to_class128runtime.stackpoolruntime.stackLargeruntime.maxstacksizeruntime.maxstackceilingruntime.startingStackSizeruntime.methodValueCallFrameObjsruntime.intArgRegsruntime.pinnedTypemapsruntime.firstmoduledataruntime.lastmoduledatapruntime.modulesSliceruntime.faketimeruntime.overrideWriteruntime.traceruntime.gStatusStringsruntime.cgoTracebackruntime.cgoSymbolizerruntime.reflectOffsruntime.vdsoLinuxVersionruntime.vdsoSymbolKeysruntime.vdsoGettimeofdaySymruntime.vdsoClockgettimeSymsyscall..inittasksyscall.envssyscall._zerosyscall.Stdinsyscall.Stdoutsyscall.Stderrsyscall.errEAGAINsyscall.errEINVALsyscall.errENOENTsyscall.errorsinternal/testlog..inittaskinternal/poll..inittaskinternal/poll.errEAGAINinternal/poll.errEINVALinternal/poll.errENOENTinternal/poll.ErrFileClosinginternal/poll.ErrNoDeadlineinternal/poll.ErrDeadlineExceededinternal/poll.ErrNotPollableinternal/poll.serverInitinternal/poll.CloseFuncinternal/syscall/execenv..inittaskinternal/safefilepath..inittaskinternal/safefilepath.errInvalidPathinternal/syscall/unix..inittaskinternal/syscall/unix.FcntlSyscallinternal/cpu.DebugOptionsinternal/cpu.CacheLineSizeinternal/cpu.X86internal/cpu.optionsinternal/cpu.maxExtendedFunctionInformationinternal/oserror..inittaskinternal/oserror.ErrInvalidinternal/oserror.ErrPermissioninternal/oserror.ErrExistinternal/oserror.ErrNotExistinternal/oserror.ErrClosedpath..inittaskpath.ErrBadPatternruntime/internal/syscall._zerogo:itab.*os.File,io.Writergo:itab.*bytes.Buffer,io.Writergo:itab.*errors.errorString,errorgo:itab.*strconv.NumError,errorgo:itab.*fmt.pp,fmt.Statego:itab.*fmt.wrapError,errorgo:itab.*fmt.wrapErrors,errorgo:itab.*reflect.rtype,reflect.Typego:itab.sort.IntSlice,sort.Interfacego:itab.golang.org/x/text/language.bytesSort,sort.Interfacego:itab.golang.org/x/text/language.variantsSort,sort.Interfacego:itab.golang.org/x/text/language.ValueError,errorgo:itab.encoding/base64.CorruptInputError,errorgo:itab.*internal/reflectlite.rtype,internal/reflectlite.Typego:itab.*internal/fmtsort.SortedMap,sort.Interfacego:itab.*io/fs.PathError,errorgo:itab.syscall.Errno,errorgo:itab.*encoding/json.SyntaxError,errorgo:itab.encoding/json.byIndex,sort.Interfacego:itab.*encoding/json.UnsupportedValueError,errorgo:itab.*encoding/json.encodeState,io.Writergo:itab.*encoding/json.UnsupportedTypeError,errorgo:itab.*encoding/json.MarshalerError,errorgo:itab.*encoding/json.UnmarshalTypeError,errorgo:itab.*encoding/json.InvalidUnmarshalError,errorgo:itab.*github.com/tidwall/pretty.byKeyVal,sort.Interfacego:itab.runtime.errorString,error_cgo_init_cgo_thread_start_cgo_notify_runtime_init_done_cgo_callers_cgo_yield_cgo_mmap_cgo_munmap_cgo_sigactionruntime.mainPCgo:itab.internal/poll.errNetClosing,errorgo:itab.*internal/poll.DeadlineExceededError,errorruntime.buildVersion.strruntime.modinfo.strgo:buildinfogo:buildinfo.reftype:*runtime.textsectionmapvuln-1.0.4/cmd/govulncheck/testdata/modules/wholemodvuln/000077500000000000000000000000001456050377100235675ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/modules/wholemodvuln/go.mod000066400000000000000000000001111456050377100246660ustar00rootroot00000000000000module golang.org/wholemodvuln go 1.18 require gopkg.in/yaml.v2 v2.2.3 vuln-1.0.4/cmd/govulncheck/testdata/modules/wholemodvuln/go.sum000066400000000000000000000005501456050377100247220ustar00rootroot00000000000000gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= vuln-1.0.4/cmd/govulncheck/testdata/modules/wholemodvuln/whole_mod_vuln.go000066400000000000000000000001301456050377100271310ustar00rootroot00000000000000package main import ( "gopkg.in/yaml.v2" ) func main() { _, _ = yaml.Marshal(nil) } vuln-1.0.4/cmd/govulncheck/testdata/strip/000077500000000000000000000000001456050377100205355ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/strip/strip.ct000066400000000000000000000031011456050377100222210ustar00rootroot00000000000000##### # Test for stripped binaries (see #57764) $ govulncheck -mode=binary ${strip_binary} --> FAIL 3 Scanning your binary for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: language.MatchStrings #2: language.MustParse #3: language.Parse #4: language.ParseAcceptLanguage Vulnerability #2: GO-2020-0015 An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2020-0015 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.3 Example traces found: #1: transform.String #2: unicode.bomOverride.Transform #3: unicode.utf16Decoder.Transform Your code is affected by 2 vulnerabilities from 1 module. This scan found no other vulnerabilities in packages you import or modules you require. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/000077500000000000000000000000001456050377100213765ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-call/000077500000000000000000000000001456050377100235735ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-call/binary_call_json.ct000066400000000000000000000340551456050377100274420ustar00rootroot00000000000000##### # Test basic binary scanning with json output $ govulncheck -json -mode=binary ${vuln_binary} { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "symbol" } } { "progress": { "message": "Scanning your binary for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get", "receiver": "Result" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language", "function": "Parse" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "ForEach", "receiver": "Result" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } { "finding": { "osv": "GO-2020-0015", "fixed_version": "v0.3.3", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0059", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-35380", "GHSA-w942-gw6m-p62c" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.4" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Array", "Result.Get", "Result.Map", "Result.Value", "squash" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/192" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0059" } } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-call/binary_call_text.ct000066400000000000000000000033731456050377100274540ustar00rootroot00000000000000##### # Test basic binary scanning with text output $ govulncheck -mode=binary ${vuln_binary} --> FAIL 3 Scanning your binary for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Example traces found: #1: gjson.Get #2: gjson.Result.Get Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: language.Parse Vulnerability #3: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 Example traces found: #1: gjson.Result.ForEach Your code is affected by 3 vulnerabilities from 2 modules. This scan also found 0 vulnerabilities in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-call/binary_vendored_json.ct000066400000000000000000000334051456050377100303330ustar00rootroot00000000000000##### # Test basic binary scanning with json output $ govulncheck -json -mode=binary ${vendored_binary} { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "symbol" } } { "progress": { "message": "Scanning your binary for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get", "receiver": "Result" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language", "function": "Parse" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } { "finding": { "osv": "GO-2020-0015", "fixed_version": "v0.3.3", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0059", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-35380", "GHSA-w942-gw6m-p62c" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.4" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Array", "Result.Get", "Result.Map", "Result.Value", "squash" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/192" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0059" } } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-module/000077500000000000000000000000001456050377100241455ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-module/binary_module_json.ct000066400000000000000000000304331456050377100303620ustar00rootroot00000000000000##### # Test binary scanning at the module level with json output $ govulncheck -json -mode=binary -scan=module ${vuln_binary} { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "module" } } { "progress": { "message": "Scanning your binary for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } { "finding": { "osv": "GO-2020-0015", "fixed_version": "v0.3.3", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0059", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-35380", "GHSA-w942-gw6m-p62c" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.4" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Array", "Result.Get", "Result.Map", "Result.Value", "squash" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/192" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0059" } } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-module/binary_module_text.ct000066400000000000000000000036751456050377100304050ustar00rootroot00000000000000##### # Test binary scanning at the module level $ govulncheck -mode=binary -scan module ${vuln_binary} --> FAIL 3 Scanning your binary for known vulnerabilities... === Module Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Vulnerability #3: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 Vulnerability #4: GO-2020-0015 An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2020-0015 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.3 Your code may be affected by 4 vulnerabilities. Use '-scan symbol' for more fine grained vulnerability detection. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-package/000077500000000000000000000000001456050377100242535ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-package/binary_package_json.ct000066400000000000000000000317461456050377100306060ustar00rootroot00000000000000##### # Test binary scanning at the package level with json output $ govulncheck -json -mode=binary -scan=package ${vuln_binary} { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "package" } } { "progress": { "message": "Scanning your binary for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } { "finding": { "osv": "GO-2020-0015", "fixed_version": "v0.3.3", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0059", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-35380", "GHSA-w942-gw6m-p62c" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.4" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Array", "Result.Get", "Result.Map", "Result.Value", "squash" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/192" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0059" } } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/binary-package/binary_package_text.ct000066400000000000000000000030331456050377100306050ustar00rootroot00000000000000# Test binary scanning at the package level. $ govulncheck -mode=binary -scan package ${vuln_binary} --> FAIL 3 Scanning your binary for known vulnerabilities... === Package Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Vulnerability #3: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 Your code may be affected by 3 vulnerabilities. This scan also found 1 vulnerability in modules you require. Use '-scan symbol' for more fine grained vulnerability detection and '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/convert/000077500000000000000000000000001456050377100230565ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/convert/convert_input.json000066400000000000000000000147641456050377100266640ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "go_version": "go1.18", "scan_level": "symbol" } } { "progress": { "message": "Scanning your code and P packages across M dependent modules for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get", "receiver": "Result" }, { "module": "golang.org/vuln", "package": "golang.org/vuln", "function": "main", "position": { "filename": ".../vuln.go", "offset": 183, "line": 14, "column": 20 } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language", "function": "Parse" }, { "module": "golang.org/vuln", "package": "golang.org/vuln", "function": "main", "position": { "filename": ".../vuln.go", "offset": 159, "line": 13, "column": 16 } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/convert/convert_text.ct000066400000000000000000000027651456050377100261440ustar00rootroot00000000000000##### # Test using the conversion from json on stdin to text on stdout # location of convert input is subdirectory/convert_intput $ govulncheck -mode=convert < convert/convert_input.json --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Example traces found: #1: .../vuln.go::: vuln.main calls gjson.Result.Get Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: .../vuln.go::: vuln.main calls language.Parse Your code is affected by 2 vulnerabilities from 2 modules. This scan also found 1 vulnerability in packages you import and 0 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/extract/000077500000000000000000000000001456050377100230505ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/extract/binary_extract.ct000066400000000000000000000037741456050377100264310ustar00rootroot00000000000000##### # Test binary mode using the extracted binary blob. $ govulncheck -mode=binary ${testdir}/extract/vuln.blob --> FAIL 3 Scanning your binary for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Example traces found: #1: gjson.Get #2: gjson.Result.Get Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: language.Parse Vulnerability #3: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 Example traces found: #1: gjson.Result.ForEach Your code is affected by 3 vulnerabilities from 2 modules. This scan also found 0 vulnerabilities in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. # Test extract mode. Due to the size of the blob even for smallest programs, we # directly compare its output to a target vuln_blob.json file. $ govulncheck-cmp -mode=extract ${moddir}/vuln/vuln_dont_run_me ${testdir}/extract/vuln.blob vuln-1.0.4/cmd/govulncheck/testdata/testfiles/extract/vuln.blob000066400000000000000000003467271456050377100247170ustar00rootroot00000000000000{"name":"govulncheck-extract","version":"0.1.0"} {"modules":[{"Path":"github.com/tidwall/gjson","Version":"v1.6.5","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null},{"Path":"github.com/tidwall/match","Version":"v1.1.0","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null},{"Path":"github.com/tidwall/pretty","Version":"v1.2.0","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null},{"Path":"golang.org/x/text","Version":"v0.3.0","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null}],"pkgSymbols":[{"name":"Encoding"},{"name":"FD"},{"name":"Int64"},{"name":"MarshalerError"},{"name":"NotInHeap"},{"name":"PathError"},{"name":"Pointer[...]"},{"name":"RegArgs"},{"name":"Result"},{"name":"SyntaxError"},{"name":"Uint64"},{"name":"UnmarshalTypeError"},{"name":"UnsupportedValueError"},{"name":"ValueError"},{"name":"_rt0_amd64"},{"name":"_rt0_amd64_linux"},{"name":"aeshashbody"},{"name":"callRet"},{"name":"cmpbody"},{"name":"debugCall1024"},{"name":"debugCall128"},{"name":"debugCall16384"},{"name":"debugCall2048"},{"name":"debugCall256"},{"name":"debugCall32"},{"name":"debugCall32768"},{"name":"debugCall4096"},{"name":"debugCall512"},{"name":"debugCall64"},{"name":"debugCall65536"},{"name":"debugCall8192"},{"name":"encoder"},{"name":"eq.[...[...]string"},{"name":"eq.[...]runtime.Frame"},{"name":"eq.fmt.fmt"},{"name":"eq.fmt.wrapError"},{"name":"eq.os.file"},{"name":"eq.reflect.Method"},{"name":"eq.reflect.ValueError"},{"name":"eq.reflect.makeFuncCtxt"},{"name":"eq.reflect.methodValue"},{"name":"eq.reflect.uncommonType"},{"name":"eq.runtime.Frame"},{"name":"eq.runtime.TypeAssertionError"},{"name":"eq.runtime._func"},{"name":"eq.runtime._panic"},{"name":"eq.runtime.bitvector"},{"name":"eq.runtime.boundsError"},{"name":"eq.runtime.errorAddressString"},{"name":"eq.runtime.gcBits"},{"name":"eq.runtime.gcWork"},{"name":"eq.runtime.hchan"},{"name":"eq.runtime.itab"},{"name":"eq.runtime.limiterEvent"},{"name":"eq.runtime.mOS"},{"name":"eq.runtime.mSpanList"},{"name":"eq.runtime.mcache"},{"name":"eq.runtime.modulehash"},{"name":"eq.runtime.mspan"},{"name":"eq.runtime.notInHeap"},{"name":"eq.runtime.piController"},{"name":"eq.runtime.special"},{"name":"eq.runtime.sudog"},{"name":"eq.runtime.sysmontick"},{"name":"eq.runtime.workbuf"},{"name":"eq.strconv.NumError"},{"name":"eq.struct { runtime.gList; runtime.n int32 }"},{"name":"eq.sync.WaitGroup"},{"name":"eq.sync.entry"},{"name":"eq.sync.poolLocal"},{"name":"eq.sync.poolLocalInternal"},{"name":"gogo"},{"name":"gosave_systemstack_switch"},{"name":"indexbody"},{"name":"indexbytebody"},{"name":"len int }"},{"name":"memeqbody"},{"name":"option"},{"name":"reflectWithString"},{"name":"setg_gcc"},{"name":"subSelector"},{"name":"uncommonType"},{"pkg":"bytes","name":"Buffer.Bytes"},{"pkg":"bytes","name":"Buffer.Len"},{"pkg":"bytes","name":"Buffer.Reset"},{"pkg":"bytes","name":"Buffer.String"},{"pkg":"bytes","name":"Buffer.Truncate"},{"pkg":"bytes","name":"Buffer.Write"},{"pkg":"bytes","name":"Buffer.WriteByte"},{"pkg":"bytes","name":"Buffer.WriteString"},{"pkg":"bytes","name":"Buffer.grow"},{"pkg":"bytes","name":"Buffer.tryGrowByReslice"},{"pkg":"bytes","name":"Compare"},{"pkg":"bytes","name":"ContainsAny"},{"pkg":"bytes","name":"Cut"},{"pkg":"bytes","name":"Equal"},{"pkg":"bytes","name":"EqualFold"},{"pkg":"bytes","name":"HasPrefix"},{"pkg":"bytes","name":"HasSuffix"},{"pkg":"bytes","name":"Index"},{"pkg":"bytes","name":"IndexAny"},{"pkg":"bytes","name":"IndexByte"},{"pkg":"bytes","name":"IndexRune"},{"pkg":"bytes","name":"Join"},{"pkg":"bytes","name":"NewBuffer"},{"pkg":"bytes","name":"TrimFunc"},{"pkg":"bytes","name":"TrimLeftFunc"},{"pkg":"bytes","name":"TrimRight"},{"pkg":"bytes","name":"TrimRightFunc"},{"pkg":"bytes","name":"TrimSpace"},{"pkg":"bytes","name":"asciiSet.contains"},{"pkg":"bytes","name":"containsRune"},{"pkg":"bytes","name":"growSlice"},{"pkg":"bytes","name":"growSlice.func1"},{"pkg":"bytes","name":"indexFunc"},{"pkg":"bytes","name":"init"},{"pkg":"bytes","name":"lastIndexFunc"},{"pkg":"bytes","name":"makeASCIISet"},{"pkg":"bytes","name":"trimRightASCII"},{"pkg":"bytes","name":"trimRightByte"},{"pkg":"bytes","name":"trimRightUnicode"},{"pkg":"encoding/base64","name":"CorruptInputError.Error"},{"pkg":"encoding/base64","name":"Encoding.Decode"},{"pkg":"encoding/base64","name":"Encoding.DecodedLen"},{"pkg":"encoding/base64","name":"Encoding.Encode"},{"pkg":"encoding/base64","name":"Encoding.EncodedLen"},{"pkg":"encoding/base64","name":"Encoding.WithPadding"},{"pkg":"encoding/base64","name":"Encoding.decodeQuantum"},{"pkg":"encoding/base64","name":"NewEncoder"},{"pkg":"encoding/base64","name":"NewEncoding"},{"pkg":"encoding/base64","name":"assemble32"},{"pkg":"encoding/base64","name":"assemble64"},{"pkg":"encoding/base64","name":"encoder.Close"},{"pkg":"encoding/base64","name":"encoder.Write"},{"pkg":"encoding/base64","name":"init"},{"pkg":"encoding/binary","name":"bigEndian.PutUint32"},{"pkg":"encoding/binary","name":"bigEndian.PutUint64"},{"pkg":"encoding/binary","name":"init"},{"pkg":"encoding/json","name":"HTMLEscape"},{"pkg":"encoding/json","name":"InvalidUnmarshalError.Error"},{"pkg":"encoding/json","name":"Marshal"},{"pkg":"encoding/json","name":"Marshal.func1"},{"pkg":"encoding/json","name":"MarshalerError.Error"},{"pkg":"encoding/json","name":"Number.String"},{"pkg":"encoding/json","name":"SyntaxError.Error"},{"pkg":"encoding/json","name":"Unmarshal"},{"pkg":"encoding/json","name":"UnmarshalTypeError.Error"},{"pkg":"encoding/json","name":"UnsupportedTypeError.Error"},{"pkg":"encoding/json","name":"UnsupportedValueError.Error"},{"pkg":"encoding/json","name":"addrMarshalerEncoder"},{"pkg":"encoding/json","name":"addrTextMarshalerEncoder"},{"pkg":"encoding/json","name":"arrayEncoder.encode"},{"pkg":"encoding/json","name":"arrayEncoder.encode-fm"},{"pkg":"encoding/json","name":"asciiEqualFold"},{"pkg":"encoding/json","name":"boolEncoder"},{"pkg":"encoding/json","name":"byIndex.Len"},{"pkg":"encoding/json","name":"byIndex.Less"},{"pkg":"encoding/json","name":"byIndex.Swap"},{"pkg":"encoding/json","name":"cachedTypeFields"},{"pkg":"encoding/json","name":"checkValid"},{"pkg":"encoding/json","name":"compact"},{"pkg":"encoding/json","name":"compact.func1"},{"pkg":"encoding/json","name":"condAddrEncoder.encode"},{"pkg":"encoding/json","name":"condAddrEncoder.encode-fm"},{"pkg":"encoding/json","name":"decodeState.addErrorContext"},{"pkg":"encoding/json","name":"decodeState.array"},{"pkg":"encoding/json","name":"decodeState.arrayInterface"},{"pkg":"encoding/json","name":"decodeState.convertNumber"},{"pkg":"encoding/json","name":"decodeState.init"},{"pkg":"encoding/json","name":"decodeState.literalInterface"},{"pkg":"encoding/json","name":"decodeState.literalStore"},{"pkg":"encoding/json","name":"decodeState.object"},{"pkg":"encoding/json","name":"decodeState.objectInterface"},{"pkg":"encoding/json","name":"decodeState.readIndex"},{"pkg":"encoding/json","name":"decodeState.rescanLiteral"},{"pkg":"encoding/json","name":"decodeState.saveError"},{"pkg":"encoding/json","name":"decodeState.scanNext"},{"pkg":"encoding/json","name":"decodeState.scanWhile"},{"pkg":"encoding/json","name":"decodeState.skip"},{"pkg":"encoding/json","name":"decodeState.unmarshal"},{"pkg":"encoding/json","name":"decodeState.value"},{"pkg":"encoding/json","name":"decodeState.valueInterface"},{"pkg":"encoding/json","name":"decodeState.valueQuoted"},{"pkg":"encoding/json","name":"dominantField"},{"pkg":"encoding/json","name":"encodeByteSlice"},{"pkg":"encoding/json","name":"encodeState).marshal.func1"},{"pkg":"encoding/json","name":"encodeState.Len"},{"pkg":"encoding/json","name":"encodeState.String"},{"pkg":"encoding/json","name":"encodeState.Write"},{"pkg":"encoding/json","name":"encodeState.error"},{"pkg":"encoding/json","name":"encodeState.marshal"},{"pkg":"encoding/json","name":"encodeState.reflectValue"},{"pkg":"encoding/json","name":"encodeState.string"},{"pkg":"encoding/json","name":"encodeState.stringBytes"},{"pkg":"encoding/json","name":"equalFoldRight"},{"pkg":"encoding/json","name":"floatEncoder.encode"},{"pkg":"encoding/json","name":"floatEncoder.encode-fm"},{"pkg":"encoding/json","name":"foldFunc"},{"pkg":"encoding/json","name":"freeScanner"},{"pkg":"encoding/json","name":"getu4"},{"pkg":"encoding/json","name":"glob..func1"},{"pkg":"encoding/json","name":"indirect"},{"pkg":"encoding/json","name":"init"},{"pkg":"encoding/json","name":"intEncoder"},{"pkg":"encoding/json","name":"interfaceEncoder"},{"pkg":"encoding/json","name":"invalidValueEncoder"},{"pkg":"encoding/json","name":"isEmptyValue"},{"pkg":"encoding/json","name":"isSpace"},{"pkg":"encoding/json","name":"isValidNumber"},{"pkg":"encoding/json","name":"isValidTag"},{"pkg":"encoding/json","name":"jsonError.Error"},{"pkg":"encoding/json","name":"mapEncoder.encode"},{"pkg":"encoding/json","name":"mapEncoder.encode-fm"},{"pkg":"encoding/json","name":"mapEncoder.encode.func1"},{"pkg":"encoding/json","name":"mapEncoder.encode.func2"},{"pkg":"encoding/json","name":"marshalerEncoder"},{"pkg":"encoding/json","name":"newArrayEncoder"},{"pkg":"encoding/json","name":"newCondAddrEncoder"},{"pkg":"encoding/json","name":"newEncodeState"},{"pkg":"encoding/json","name":"newMapEncoder"},{"pkg":"encoding/json","name":"newPtrEncoder"},{"pkg":"encoding/json","name":"newScanner"},{"pkg":"encoding/json","name":"newSliceEncoder"},{"pkg":"encoding/json","name":"newStructEncoder"},{"pkg":"encoding/json","name":"newTypeEncoder"},{"pkg":"encoding/json","name":"parseTag"},{"pkg":"encoding/json","name":"ptrEncoder.encode"},{"pkg":"encoding/json","name":"ptrEncoder.encode-fm"},{"pkg":"encoding/json","name":"ptrEncoder.encode.func1"},{"pkg":"encoding/json","name":"quoteChar"},{"pkg":"encoding/json","name":"reflectWithString.resolve"},{"pkg":"encoding/json","name":"scanner.eof"},{"pkg":"encoding/json","name":"scanner.error"},{"pkg":"encoding/json","name":"scanner.popParseState"},{"pkg":"encoding/json","name":"scanner.pushParseState"},{"pkg":"encoding/json","name":"scanner.reset"},{"pkg":"encoding/json","name":"simpleLetterEqualFold"},{"pkg":"encoding/json","name":"sliceEncoder.encode"},{"pkg":"encoding/json","name":"sliceEncoder.encode-fm"},{"pkg":"encoding/json","name":"sliceEncoder.encode.func1"},{"pkg":"encoding/json","name":"state0"},{"pkg":"encoding/json","name":"state1"},{"pkg":"encoding/json","name":"stateBeginString"},{"pkg":"encoding/json","name":"stateBeginStringOrEmpty"},{"pkg":"encoding/json","name":"stateBeginValue"},{"pkg":"encoding/json","name":"stateBeginValueOrEmpty"},{"pkg":"encoding/json","name":"stateDot"},{"pkg":"encoding/json","name":"stateDot0"},{"pkg":"encoding/json","name":"stateE"},{"pkg":"encoding/json","name":"stateE0"},{"pkg":"encoding/json","name":"stateESign"},{"pkg":"encoding/json","name":"stateEndTop"},{"pkg":"encoding/json","name":"stateEndValue"},{"pkg":"encoding/json","name":"stateError"},{"pkg":"encoding/json","name":"stateF"},{"pkg":"encoding/json","name":"stateFa"},{"pkg":"encoding/json","name":"stateFal"},{"pkg":"encoding/json","name":"stateFals"},{"pkg":"encoding/json","name":"stateInString"},{"pkg":"encoding/json","name":"stateInStringEsc"},{"pkg":"encoding/json","name":"stateInStringEscU"},{"pkg":"encoding/json","name":"stateInStringEscU1"},{"pkg":"encoding/json","name":"stateInStringEscU12"},{"pkg":"encoding/json","name":"stateInStringEscU123"},{"pkg":"encoding/json","name":"stateN"},{"pkg":"encoding/json","name":"stateNeg"},{"pkg":"encoding/json","name":"stateNu"},{"pkg":"encoding/json","name":"stateNul"},{"pkg":"encoding/json","name":"stateT"},{"pkg":"encoding/json","name":"stateTr"},{"pkg":"encoding/json","name":"stateTru"},{"pkg":"encoding/json","name":"stringEncoder"},{"pkg":"encoding/json","name":"structEncoder.encode"},{"pkg":"encoding/json","name":"structEncoder.encode-fm"},{"pkg":"encoding/json","name":"tagOptions.Contains"},{"pkg":"encoding/json","name":"textMarshalerEncoder"},{"pkg":"encoding/json","name":"typeByIndex"},{"pkg":"encoding/json","name":"typeEncoder"},{"pkg":"encoding/json","name":"typeEncoder.func1"},{"pkg":"encoding/json","name":"typeFields"},{"pkg":"encoding/json","name":"typeFields.func1"},{"pkg":"encoding/json","name":"uintEncoder"},{"pkg":"encoding/json","name":"unquote"},{"pkg":"encoding/json","name":"unquoteBytes"},{"pkg":"encoding/json","name":"unsupportedTypeEncoder"},{"pkg":"encoding/json","name":"valueEncoder"},{"pkg":"encoding/pem","name":"Decode"},{"pkg":"encoding/pem","name":"getLine"},{"pkg":"encoding/pem","name":"removeSpacesAndTabs"},{"pkg":"errors","name":"New"},{"pkg":"errors","name":"errorString.Error"},{"pkg":"errors","name":"init"},{"pkg":"fmt","name":"Errorf"},{"pkg":"fmt","name":"Fprint"},{"pkg":"fmt","name":"Fprintln"},{"pkg":"fmt","name":"Println"},{"pkg":"fmt","name":"Sprintf"},{"pkg":"fmt","name":"buffer.write"},{"pkg":"fmt","name":"buffer.writeByte"},{"pkg":"fmt","name":"buffer.writeRune"},{"pkg":"fmt","name":"buffer.writeString"},{"pkg":"fmt","name":"fmt.clearflags"},{"pkg":"fmt","name":"fmt.fmtBoolean"},{"pkg":"fmt","name":"fmt.fmtBs"},{"pkg":"fmt","name":"fmt.fmtBx"},{"pkg":"fmt","name":"fmt.fmtC"},{"pkg":"fmt","name":"fmt.fmtFloat"},{"pkg":"fmt","name":"fmt.fmtInteger"},{"pkg":"fmt","name":"fmt.fmtQ"},{"pkg":"fmt","name":"fmt.fmtQc"},{"pkg":"fmt","name":"fmt.fmtS"},{"pkg":"fmt","name":"fmt.fmtSbx"},{"pkg":"fmt","name":"fmt.fmtSx"},{"pkg":"fmt","name":"fmt.fmtUnicode"},{"pkg":"fmt","name":"fmt.init"},{"pkg":"fmt","name":"fmt.pad"},{"pkg":"fmt","name":"fmt.padString"},{"pkg":"fmt","name":"fmt.truncate"},{"pkg":"fmt","name":"fmt.truncateString"},{"pkg":"fmt","name":"fmt.writePadding"},{"pkg":"fmt","name":"getField"},{"pkg":"fmt","name":"glob..func1"},{"pkg":"fmt","name":"init"},{"pkg":"fmt","name":"intFromArg"},{"pkg":"fmt","name":"newPrinter"},{"pkg":"fmt","name":"parseArgNumber"},{"pkg":"fmt","name":"parsenum"},{"pkg":"fmt","name":"pp).handleMethods.func1"},{"pkg":"fmt","name":"pp).handleMethods.func2"},{"pkg":"fmt","name":"pp).handleMethods.func3"},{"pkg":"fmt","name":"pp).handleMethods.func4"},{"pkg":"fmt","name":"pp.Write"},{"pkg":"fmt","name":"pp.argNumber"},{"pkg":"fmt","name":"pp.badArgNum"},{"pkg":"fmt","name":"pp.badVerb"},{"pkg":"fmt","name":"pp.catchPanic"},{"pkg":"fmt","name":"pp.doPrint"},{"pkg":"fmt","name":"pp.doPrintf"},{"pkg":"fmt","name":"pp.doPrintln"},{"pkg":"fmt","name":"pp.fmt0x64"},{"pkg":"fmt","name":"pp.fmtBool"},{"pkg":"fmt","name":"pp.fmtBytes"},{"pkg":"fmt","name":"pp.fmtComplex"},{"pkg":"fmt","name":"pp.fmtFloat"},{"pkg":"fmt","name":"pp.fmtInteger"},{"pkg":"fmt","name":"pp.fmtPointer"},{"pkg":"fmt","name":"pp.fmtString"},{"pkg":"fmt","name":"pp.free"},{"pkg":"fmt","name":"pp.handleMethods"},{"pkg":"fmt","name":"pp.missingArg"},{"pkg":"fmt","name":"pp.printArg"},{"pkg":"fmt","name":"pp.printValue"},{"pkg":"fmt","name":"pp.unknownType"},{"pkg":"fmt","name":"tooLarge"},{"pkg":"fmt","name":"wrapError.Error"},{"pkg":"fmt","name":"wrapErrors.Error"},{"pkg":"github.com/tidwall/gjson","name":"Get"},{"pkg":"github.com/tidwall/gjson","name":"Parse"},{"pkg":"github.com/tidwall/gjson","name":"Result.Bool"},{"pkg":"github.com/tidwall/gjson","name":"Result.Exists"},{"pkg":"github.com/tidwall/gjson","name":"Result.ForEach"},{"pkg":"github.com/tidwall/gjson","name":"Result.Get"},{"pkg":"github.com/tidwall/gjson","name":"Result.Int"},{"pkg":"github.com/tidwall/gjson","name":"Result.IsArray"},{"pkg":"github.com/tidwall/gjson","name":"Result.IsObject"},{"pkg":"github.com/tidwall/gjson","name":"Result.String"},{"pkg":"github.com/tidwall/gjson","name":"Valid"},{"pkg":"github.com/tidwall/gjson","name":"appendJSONString"},{"pkg":"github.com/tidwall/gjson","name":"execModifier"},{"pkg":"github.com/tidwall/gjson","name":"fillIndex"},{"pkg":"github.com/tidwall/gjson","name":"init"},{"pkg":"github.com/tidwall/gjson","name":"isSimpleName"},{"pkg":"github.com/tidwall/gjson","name":"modFlatten"},{"pkg":"github.com/tidwall/gjson","name":"modFlatten.func1"},{"pkg":"github.com/tidwall/gjson","name":"modFlatten.func2"},{"pkg":"github.com/tidwall/gjson","name":"modJoin"},{"pkg":"github.com/tidwall/gjson","name":"modJoin.func1"},{"pkg":"github.com/tidwall/gjson","name":"modJoin.func2"},{"pkg":"github.com/tidwall/gjson","name":"modJoin.func3"},{"pkg":"github.com/tidwall/gjson","name":"modJoin.func3.1"},{"pkg":"github.com/tidwall/gjson","name":"modPretty"},{"pkg":"github.com/tidwall/gjson","name":"modPretty.func1"},{"pkg":"github.com/tidwall/gjson","name":"modReverse"},{"pkg":"github.com/tidwall/gjson","name":"modReverse.func1"},{"pkg":"github.com/tidwall/gjson","name":"modReverse.func2"},{"pkg":"github.com/tidwall/gjson","name":"modThis"},{"pkg":"github.com/tidwall/gjson","name":"modUgly"},{"pkg":"github.com/tidwall/gjson","name":"modValid"},{"pkg":"github.com/tidwall/gjson","name":"nameOfLast"},{"pkg":"github.com/tidwall/gjson","name":"parseAny"},{"pkg":"github.com/tidwall/gjson","name":"parseArray"},{"pkg":"github.com/tidwall/gjson","name":"parseArray.func1"},{"pkg":"github.com/tidwall/gjson","name":"parseArrayPath"},{"pkg":"github.com/tidwall/gjson","name":"parseInt"},{"pkg":"github.com/tidwall/gjson","name":"parseLiteral"},{"pkg":"github.com/tidwall/gjson","name":"parseNumber"},{"pkg":"github.com/tidwall/gjson","name":"parseObject"},{"pkg":"github.com/tidwall/gjson","name":"parseObjectPath"},{"pkg":"github.com/tidwall/gjson","name":"parseQuery"},{"pkg":"github.com/tidwall/gjson","name":"parseSquash"},{"pkg":"github.com/tidwall/gjson","name":"parseString"},{"pkg":"github.com/tidwall/gjson","name":"parseSubSelectors"},{"pkg":"github.com/tidwall/gjson","name":"parseSubSelectors.func1"},{"pkg":"github.com/tidwall/gjson","name":"parseUint"},{"pkg":"github.com/tidwall/gjson","name":"queryMatches"},{"pkg":"github.com/tidwall/gjson","name":"runeit"},{"pkg":"github.com/tidwall/gjson","name":"safeInt"},{"pkg":"github.com/tidwall/gjson","name":"splitPossiblePipe"},{"pkg":"github.com/tidwall/gjson","name":"squash"},{"pkg":"github.com/tidwall/gjson","name":"stringBytes"},{"pkg":"github.com/tidwall/gjson","name":"tolit"},{"pkg":"github.com/tidwall/gjson","name":"tonum"},{"pkg":"github.com/tidwall/gjson","name":"tostr"},{"pkg":"github.com/tidwall/gjson","name":"trim"},{"pkg":"github.com/tidwall/gjson","name":"unescape"},{"pkg":"github.com/tidwall/gjson","name":"unwrap"},{"pkg":"github.com/tidwall/gjson","name":"validany"},{"pkg":"github.com/tidwall/gjson","name":"validarray"},{"pkg":"github.com/tidwall/gjson","name":"validcolon"},{"pkg":"github.com/tidwall/gjson","name":"validcomma"},{"pkg":"github.com/tidwall/gjson","name":"validfalse"},{"pkg":"github.com/tidwall/gjson","name":"validnull"},{"pkg":"github.com/tidwall/gjson","name":"validnumber"},{"pkg":"github.com/tidwall/gjson","name":"validobject"},{"pkg":"github.com/tidwall/gjson","name":"validpayload"},{"pkg":"github.com/tidwall/gjson","name":"validstring"},{"pkg":"github.com/tidwall/gjson","name":"validtrue"},{"pkg":"github.com/tidwall/match","name":"Match"},{"pkg":"github.com/tidwall/match","name":"match"},{"pkg":"github.com/tidwall/match","name":"matchTrimSuffix"},{"pkg":"github.com/tidwall/pretty","name":"Pretty"},{"pkg":"github.com/tidwall/pretty","name":"PrettyOptions"},{"pkg":"github.com/tidwall/pretty","name":"Ugly"},{"pkg":"github.com/tidwall/pretty","name":"appendPrettyAny"},{"pkg":"github.com/tidwall/pretty","name":"appendPrettyNumber"},{"pkg":"github.com/tidwall/pretty","name":"appendPrettyObject"},{"pkg":"github.com/tidwall/pretty","name":"appendPrettyString"},{"pkg":"github.com/tidwall/pretty","name":"appendTabs"},{"pkg":"github.com/tidwall/pretty","name":"byKeyVal.Len"},{"pkg":"github.com/tidwall/pretty","name":"byKeyVal.Less"},{"pkg":"github.com/tidwall/pretty","name":"byKeyVal.Swap"},{"pkg":"github.com/tidwall/pretty","name":"byKeyVal.isLess"},{"pkg":"github.com/tidwall/pretty","name":"getjtype"},{"pkg":"github.com/tidwall/pretty","name":"hexp"},{"pkg":"github.com/tidwall/pretty","name":"init.0"},{"pkg":"github.com/tidwall/pretty","name":"init.0.func1"},{"pkg":"github.com/tidwall/pretty","name":"isNaNOrInf"},{"pkg":"github.com/tidwall/pretty","name":"parsestr"},{"pkg":"github.com/tidwall/pretty","name":"sortPairs"},{"pkg":"github.com/tidwall/pretty","name":"ugly"},{"pkg":"golang.org/x/text/internal/tag","name":"Compare"},{"pkg":"golang.org/x/text/internal/tag","name":"FixCase"},{"pkg":"golang.org/x/text/internal/tag","name":"Index.Elem"},{"pkg":"golang.org/x/text/internal/tag","name":"Index.Index"},{"pkg":"golang.org/x/text/internal/tag","name":"Index.Index.func1"},{"pkg":"golang.org/x/text/internal/tag","name":"Index.Next"},{"pkg":"golang.org/x/text/internal/tag","name":"cmp"},{"pkg":"golang.org/x/text/language","name":"CanonType.Make"},{"pkg":"golang.org/x/text/language","name":"CanonType.Parse"},{"pkg":"golang.org/x/text/language","name":"Make"},{"pkg":"golang.org/x/text/language","name":"Parse"},{"pkg":"golang.org/x/text/language","name":"Tag.canonicalize"},{"pkg":"golang.org/x/text/language","name":"Tag.equalTags"},{"pkg":"golang.org/x/text/language","name":"Tag.genCoreBytes"},{"pkg":"golang.org/x/text/language","name":"Tag.private"},{"pkg":"golang.org/x/text/language","name":"Tag.remakeString"},{"pkg":"golang.org/x/text/language","name":"Tag.setUndefinedLang"},{"pkg":"golang.org/x/text/language","name":"Tag.setUndefinedRegion"},{"pkg":"golang.org/x/text/language","name":"Tag.setUndefinedScript"},{"pkg":"golang.org/x/text/language","name":"ValueError.Error"},{"pkg":"golang.org/x/text/language","name":"ValueError.tag"},{"pkg":"golang.org/x/text/language","name":"addTags"},{"pkg":"golang.org/x/text/language","name":"bytesSort.Len"},{"pkg":"golang.org/x/text/language","name":"bytesSort.Less"},{"pkg":"golang.org/x/text/language","name":"bytesSort.Swap"},{"pkg":"golang.org/x/text/language","name":"findIndex"},{"pkg":"golang.org/x/text/language","name":"getLangID"},{"pkg":"golang.org/x/text/language","name":"getLangISO2"},{"pkg":"golang.org/x/text/language","name":"getLangISO3"},{"pkg":"golang.org/x/text/language","name":"getRegionID"},{"pkg":"golang.org/x/text/language","name":"getRegionISO2"},{"pkg":"golang.org/x/text/language","name":"getRegionISO3"},{"pkg":"golang.org/x/text/language","name":"getRegionM49"},{"pkg":"golang.org/x/text/language","name":"getRegionM49.func1"},{"pkg":"golang.org/x/text/language","name":"getScriptID"},{"pkg":"golang.org/x/text/language","name":"grandfathered"},{"pkg":"golang.org/x/text/language","name":"init"},{"pkg":"golang.org/x/text/language","name":"init.0"},{"pkg":"golang.org/x/text/language","name":"intToStr"},{"pkg":"golang.org/x/text/language","name":"isAlphaNum"},{"pkg":"golang.org/x/text/language","name":"langID.String"},{"pkg":"golang.org/x/text/language","name":"langID.stringToBuf"},{"pkg":"golang.org/x/text/language","name":"makeScannerString"},{"pkg":"golang.org/x/text/language","name":"mkErrInvalid"},{"pkg":"golang.org/x/text/language","name":"normLang"},{"pkg":"golang.org/x/text/language","name":"normLang.func1"},{"pkg":"golang.org/x/text/language","name":"normRegion"},{"pkg":"golang.org/x/text/language","name":"normRegion.func1"},{"pkg":"golang.org/x/text/language","name":"parse"},{"pkg":"golang.org/x/text/language","name":"parseExtension"},{"pkg":"golang.org/x/text/language","name":"parseExtensions"},{"pkg":"golang.org/x/text/language","name":"parseTag"},{"pkg":"golang.org/x/text/language","name":"parseVariants"},{"pkg":"golang.org/x/text/language","name":"regionID.M49"},{"pkg":"golang.org/x/text/language","name":"regionID.String"},{"pkg":"golang.org/x/text/language","name":"regionID.contains"},{"pkg":"golang.org/x/text/language","name":"scanner.acceptMinSize"},{"pkg":"golang.org/x/text/language","name":"scanner.deleteRange"},{"pkg":"golang.org/x/text/language","name":"scanner.gobble"},{"pkg":"golang.org/x/text/language","name":"scanner.init"},{"pkg":"golang.org/x/text/language","name":"scanner.replace"},{"pkg":"golang.org/x/text/language","name":"scanner.resizeRange"},{"pkg":"golang.org/x/text/language","name":"scanner.scan"},{"pkg":"golang.org/x/text/language","name":"scanner.setError"},{"pkg":"golang.org/x/text/language","name":"scanner.toLower"},{"pkg":"golang.org/x/text/language","name":"scriptID.String"},{"pkg":"golang.org/x/text/language","name":"specializeRegion"},{"pkg":"golang.org/x/text/language","name":"strToInt"},{"pkg":"golang.org/x/text/language","name":"variantsSort.Len"},{"pkg":"golang.org/x/text/language","name":"variantsSort.Less"},{"pkg":"golang.org/x/text/language","name":"variantsSort.Swap"},{"pkg":"internal/abi","name":"IntArgRegBitmap.Get"},{"pkg":"internal/abi","name":"IntArgRegBitmap.Set"},{"pkg":"internal/abi","name":"RegArgs.IntRegArgAddr"},{"pkg":"internal/bytealg","name":"Compare"},{"pkg":"internal/bytealg","name":"Cutover"},{"pkg":"internal/bytealg","name":"Equal"},{"pkg":"internal/bytealg","name":"HashStr"},{"pkg":"internal/bytealg","name":"HashStrBytes"},{"pkg":"internal/bytealg","name":"Index"},{"pkg":"internal/bytealg","name":"IndexByte"},{"pkg":"internal/bytealg","name":"IndexByteString"},{"pkg":"internal/bytealg","name":"IndexRabinKarp"},{"pkg":"internal/bytealg","name":"IndexRabinKarpBytes"},{"pkg":"internal/bytealg","name":"IndexString"},{"pkg":"internal/bytealg","name":"init.0"},{"pkg":"internal/cpu","name":"Initialize"},{"pkg":"internal/cpu","name":"cpuid"},{"pkg":"internal/cpu","name":"doinit"},{"pkg":"internal/cpu","name":"getGOAMD64level"},{"pkg":"internal/cpu","name":"indexByte"},{"pkg":"internal/cpu","name":"isSet"},{"pkg":"internal/cpu","name":"processOptions"},{"pkg":"internal/cpu","name":"xgetbv"},{"pkg":"internal/fmtsort","name":"Sort"},{"pkg":"internal/fmtsort","name":"SortedMap.Len"},{"pkg":"internal/fmtsort","name":"SortedMap.Less"},{"pkg":"internal/fmtsort","name":"SortedMap.Swap"},{"pkg":"internal/fmtsort","name":"compare"},{"pkg":"internal/fmtsort","name":"floatCompare"},{"pkg":"internal/fmtsort","name":"isNaN"},{"pkg":"internal/fmtsort","name":"nilCompare"},{"pkg":"internal/itoa","name":"Itoa"},{"pkg":"internal/itoa","name":"Uitoa"},{"pkg":"internal/oserror","name":"init"},{"pkg":"internal/poll","name":"DeadlineExceededError.Error"},{"pkg":"internal/poll","name":"FD).Write.func1"},{"pkg":"internal/poll","name":"FD.Close"},{"pkg":"internal/poll","name":"FD.Init"},{"pkg":"internal/poll","name":"FD.Write"},{"pkg":"internal/poll","name":"FD.decref"},{"pkg":"internal/poll","name":"FD.destroy"},{"pkg":"internal/poll","name":"FD.writeLock"},{"pkg":"internal/poll","name":"FD.writeUnlock"},{"pkg":"internal/poll","name":"convertErr"},{"pkg":"internal/poll","name":"errClosing"},{"pkg":"internal/poll","name":"errNetClosing.Error"},{"pkg":"internal/poll","name":"errnoErr"},{"pkg":"internal/poll","name":"fdMutex.decref"},{"pkg":"internal/poll","name":"fdMutex.increfAndClose"},{"pkg":"internal/poll","name":"fdMutex.rwlock"},{"pkg":"internal/poll","name":"fdMutex.rwunlock"},{"pkg":"internal/poll","name":"ignoringEINTRIO"},{"pkg":"internal/poll","name":"init"},{"pkg":"internal/poll","name":"pollDesc.close"},{"pkg":"internal/poll","name":"pollDesc.evict"},{"pkg":"internal/poll","name":"pollDesc.init"},{"pkg":"internal/poll","name":"pollDesc.pollable"},{"pkg":"internal/poll","name":"pollDesc.prepare"},{"pkg":"internal/poll","name":"pollDesc.prepareWrite"},{"pkg":"internal/poll","name":"pollDesc.wait"},{"pkg":"internal/poll","name":"pollDesc.waitWrite"},{"pkg":"internal/poll","name":"runtime_Semacquire"},{"pkg":"internal/poll","name":"runtime_Semrelease"},{"pkg":"internal/poll","name":"runtime_pollClose"},{"pkg":"internal/poll","name":"runtime_pollOpen"},{"pkg":"internal/poll","name":"runtime_pollReset"},{"pkg":"internal/poll","name":"runtime_pollServerInit"},{"pkg":"internal/poll","name":"runtime_pollUnblock"},{"pkg":"internal/poll","name":"runtime_pollWait"},{"pkg":"internal/reflectlite","name":"Kind.String"},{"pkg":"internal/reflectlite","name":"Swapper"},{"pkg":"internal/reflectlite","name":"Swapper.func1"},{"pkg":"internal/reflectlite","name":"Swapper.func2"},{"pkg":"internal/reflectlite","name":"Swapper.func3"},{"pkg":"internal/reflectlite","name":"Swapper.func4"},{"pkg":"internal/reflectlite","name":"Swapper.func5"},{"pkg":"internal/reflectlite","name":"Swapper.func6"},{"pkg":"internal/reflectlite","name":"Swapper.func7"},{"pkg":"internal/reflectlite","name":"Swapper.func8"},{"pkg":"internal/reflectlite","name":"Swapper.func9"},{"pkg":"internal/reflectlite","name":"TypeOf"},{"pkg":"internal/reflectlite","name":"Value.Kind"},{"pkg":"internal/reflectlite","name":"Value.Len"},{"pkg":"internal/reflectlite","name":"Value.pointer"},{"pkg":"internal/reflectlite","name":"ValueError.Error"},{"pkg":"internal/reflectlite","name":"ValueOf"},{"pkg":"internal/reflectlite","name":"add"},{"pkg":"internal/reflectlite","name":"arrayAt"},{"pkg":"internal/reflectlite","name":"chanlen"},{"pkg":"internal/reflectlite","name":"escapes"},{"pkg":"internal/reflectlite","name":"flag.kind"},{"pkg":"internal/reflectlite","name":"ifaceIndir"},{"pkg":"internal/reflectlite","name":"interfaceType.NumMethod"},{"pkg":"internal/reflectlite","name":"maplen"},{"pkg":"internal/reflectlite","name":"name.data"},{"pkg":"internal/reflectlite","name":"name.name"},{"pkg":"internal/reflectlite","name":"name.readVarint"},{"pkg":"internal/reflectlite","name":"resolveNameOff"},{"pkg":"internal/reflectlite","name":"rtype.Elem"},{"pkg":"internal/reflectlite","name":"rtype.Kind"},{"pkg":"internal/reflectlite","name":"rtype.Len"},{"pkg":"internal/reflectlite","name":"rtype.Name"},{"pkg":"internal/reflectlite","name":"rtype.NumField"},{"pkg":"internal/reflectlite","name":"rtype.NumMethod"},{"pkg":"internal/reflectlite","name":"rtype.PkgPath"},{"pkg":"internal/reflectlite","name":"rtype.Size"},{"pkg":"internal/reflectlite","name":"rtype.String"},{"pkg":"internal/reflectlite","name":"rtype.exportedMethods"},{"pkg":"internal/reflectlite","name":"rtype.hasName"},{"pkg":"internal/reflectlite","name":"rtype.nameOff"},{"pkg":"internal/reflectlite","name":"rtype.pointers"},{"pkg":"internal/reflectlite","name":"rtype.uncommon"},{"pkg":"internal/reflectlite","name":"toType"},{"pkg":"internal/reflectlite","name":"typedmemmove"},{"pkg":"internal/reflectlite","name":"uncommonType.exportedMethods"},{"pkg":"internal/reflectlite","name":"unpackEface"},{"pkg":"internal/reflectlite","name":"unsafe_New"},{"pkg":"internal/safefilepath","name":"init"},{"pkg":"internal/syscall/unix","name":"IsNonblock"},{"pkg":"io","name":"init"},{"pkg":"io/fs","name":"PathError.Error"},{"pkg":"io/fs","name":"init"},{"pkg":"main","name":"main"},{"pkg":"math","name":"Abs"},{"pkg":"math","name":"Float32bits"},{"pkg":"math","name":"Float32frombits"},{"pkg":"math","name":"Float64bits"},{"pkg":"math","name":"Float64frombits"},{"pkg":"math","name":"Inf"},{"pkg":"math","name":"IsInf"},{"pkg":"math","name":"IsNaN"},{"pkg":"math","name":"NaN"},{"pkg":"math","name":"init"},{"pkg":"math/bits","name":"LeadingZeros64"},{"pkg":"math/bits","name":"TrailingZeros"},{"pkg":"os","name":"File.Name"},{"pkg":"os","name":"File.Write"},{"pkg":"os","name":"File.checkValid"},{"pkg":"os","name":"File.wrapErr"},{"pkg":"os","name":"File.write"},{"pkg":"os","name":"NewFile"},{"pkg":"os","name":"dirInfo.close"},{"pkg":"os","name":"epipecheck"},{"pkg":"os","name":"file.close"},{"pkg":"os","name":"glob..func1"},{"pkg":"os","name":"init"},{"pkg":"os","name":"init.0"},{"pkg":"os","name":"init.1"},{"pkg":"os","name":"newFile"},{"pkg":"os","name":"runtime_args"},{"pkg":"os","name":"sigpipe"},{"pkg":"os/signal","name":"signal_ignored"},{"pkg":"path","name":"init"},{"pkg":"reflect","name":"ChanDir.String"},{"pkg":"reflect","name":"Copy"},{"pkg":"reflect","name":"Kind.String"},{"pkg":"reflect","name":"MakeMap"},{"pkg":"reflect","name":"MakeMapWithSize"},{"pkg":"reflect","name":"MakeSlice"},{"pkg":"reflect","name":"MapIter.Key"},{"pkg":"reflect","name":"MapIter.Next"},{"pkg":"reflect","name":"MapIter.Value"},{"pkg":"reflect","name":"New"},{"pkg":"reflect","name":"PointerTo"},{"pkg":"reflect","name":"StructField.IsExported"},{"pkg":"reflect","name":"StructTag.Get"},{"pkg":"reflect","name":"StructTag.Lookup"},{"pkg":"reflect","name":"TypeOf"},{"pkg":"reflect","name":"Value.Addr"},{"pkg":"reflect","name":"Value.Bool"},{"pkg":"reflect","name":"Value.Bytes"},{"pkg":"reflect","name":"Value.CanAddr"},{"pkg":"reflect","name":"Value.CanInterface"},{"pkg":"reflect","name":"Value.CanSet"},{"pkg":"reflect","name":"Value.Cap"},{"pkg":"reflect","name":"Value.Complex"},{"pkg":"reflect","name":"Value.Convert"},{"pkg":"reflect","name":"Value.Elem"},{"pkg":"reflect","name":"Value.Field"},{"pkg":"reflect","name":"Value.Float"},{"pkg":"reflect","name":"Value.Index"},{"pkg":"reflect","name":"Value.Int"},{"pkg":"reflect","name":"Value.Interface"},{"pkg":"reflect","name":"Value.IsNil"},{"pkg":"reflect","name":"Value.IsValid"},{"pkg":"reflect","name":"Value.Kind"},{"pkg":"reflect","name":"Value.Len"},{"pkg":"reflect","name":"Value.MapRange"},{"pkg":"reflect","name":"Value.NumField"},{"pkg":"reflect","name":"Value.NumMethod"},{"pkg":"reflect","name":"Value.OverflowFloat"},{"pkg":"reflect","name":"Value.OverflowInt"},{"pkg":"reflect","name":"Value.OverflowUint"},{"pkg":"reflect","name":"Value.Pointer"},{"pkg":"reflect","name":"Value.Set"},{"pkg":"reflect","name":"Value.SetBool"},{"pkg":"reflect","name":"Value.SetBytes"},{"pkg":"reflect","name":"Value.SetFloat"},{"pkg":"reflect","name":"Value.SetInt"},{"pkg":"reflect","name":"Value.SetLen"},{"pkg":"reflect","name":"Value.SetMapIndex"},{"pkg":"reflect","name":"Value.SetString"},{"pkg":"reflect","name":"Value.SetUint"},{"pkg":"reflect","name":"Value.Slice"},{"pkg":"reflect","name":"Value.String"},{"pkg":"reflect","name":"Value.Type"},{"pkg":"reflect","name":"Value.Uint"},{"pkg":"reflect","name":"Value.UnsafePointer"},{"pkg":"reflect","name":"Value.assignTo"},{"pkg":"reflect","name":"Value.bytesSlow"},{"pkg":"reflect","name":"Value.lenNonSlice"},{"pkg":"reflect","name":"Value.panicNotBool"},{"pkg":"reflect","name":"Value.pointer"},{"pkg":"reflect","name":"Value.runes"},{"pkg":"reflect","name":"Value.setRunes"},{"pkg":"reflect","name":"Value.stringNonString"},{"pkg":"reflect","name":"Value.typeSlow"},{"pkg":"reflect","name":"ValueError.Error"},{"pkg":"reflect","name":"ValueOf"},{"pkg":"reflect","name":"Zero"},{"pkg":"reflect","name":"abiSeq.addArg"},{"pkg":"reflect","name":"abiSeq.addRcvr"},{"pkg":"reflect","name":"abiSeq.assignFloatN"},{"pkg":"reflect","name":"abiSeq.assignIntN"},{"pkg":"reflect","name":"abiSeq.regAssign"},{"pkg":"reflect","name":"abiSeq.stackAssign"},{"pkg":"reflect","name":"abiSeq.stepsForValue"},{"pkg":"reflect","name":"add"},{"pkg":"reflect","name":"addReflectOff"},{"pkg":"reflect","name":"addTypeBits"},{"pkg":"reflect","name":"align"},{"pkg":"reflect","name":"archFloat32ToReg"},{"pkg":"reflect","name":"arrayAt"},{"pkg":"reflect","name":"bitVector.append"},{"pkg":"reflect","name":"callMethod"},{"pkg":"reflect","name":"chanlen"},{"pkg":"reflect","name":"convertOp"},{"pkg":"reflect","name":"copyVal"},{"pkg":"reflect","name":"cvtBytesString"},{"pkg":"reflect","name":"cvtComplex"},{"pkg":"reflect","name":"cvtDirect"},{"pkg":"reflect","name":"cvtFloat"},{"pkg":"reflect","name":"cvtFloatInt"},{"pkg":"reflect","name":"cvtFloatUint"},{"pkg":"reflect","name":"cvtI2I"},{"pkg":"reflect","name":"cvtInt"},{"pkg":"reflect","name":"cvtIntFloat"},{"pkg":"reflect","name":"cvtIntString"},{"pkg":"reflect","name":"cvtRunesString"},{"pkg":"reflect","name":"cvtSliceArray"},{"pkg":"reflect","name":"cvtSliceArrayPtr"},{"pkg":"reflect","name":"cvtStringBytes"},{"pkg":"reflect","name":"cvtStringRunes"},{"pkg":"reflect","name":"cvtT2I"},{"pkg":"reflect","name":"cvtUint"},{"pkg":"reflect","name":"cvtUintFloat"},{"pkg":"reflect","name":"cvtUintString"},{"pkg":"reflect","name":"directlyAssignable"},{"pkg":"reflect","name":"escapes"},{"pkg":"reflect","name":"flag.kind"},{"pkg":"reflect","name":"flag.mustBe"},{"pkg":"reflect","name":"flag.mustBeAssignable"},{"pkg":"reflect","name":"flag.mustBeAssignableSlow"},{"pkg":"reflect","name":"flag.mustBeExported"},{"pkg":"reflect","name":"flag.mustBeExportedSlow"},{"pkg":"reflect","name":"flag.panicNotMap"},{"pkg":"reflect","name":"flag.ro"},{"pkg":"reflect","name":"floatFromReg"},{"pkg":"reflect","name":"floatToReg"},{"pkg":"reflect","name":"fnv1"},{"pkg":"reflect","name":"funcLayout"},{"pkg":"reflect","name":"funcLayout.func1"},{"pkg":"reflect","name":"funcType.Bits"},{"pkg":"reflect","name":"funcType.Elem"},{"pkg":"reflect","name":"funcType.Field"},{"pkg":"reflect","name":"funcType.Implements"},{"pkg":"reflect","name":"funcType.Key"},{"pkg":"reflect","name":"funcType.Kind"},{"pkg":"reflect","name":"funcType.Len"},{"pkg":"reflect","name":"funcType.Name"},{"pkg":"reflect","name":"funcType.NumField"},{"pkg":"reflect","name":"funcType.NumMethod"},{"pkg":"reflect","name":"funcType.PkgPath"},{"pkg":"reflect","name":"funcType.String"},{"pkg":"reflect","name":"funcType.common"},{"pkg":"reflect","name":"funcType.in"},{"pkg":"reflect","name":"funcType.out"},{"pkg":"reflect","name":"haveIdenticalType"},{"pkg":"reflect","name":"haveIdenticalUnderlyingType"},{"pkg":"reflect","name":"hiter.initialized"},{"pkg":"reflect","name":"ifaceE2I"},{"pkg":"reflect","name":"ifaceIndir"},{"pkg":"reflect","name":"implements"},{"pkg":"reflect","name":"init"},{"pkg":"reflect","name":"intFromReg"},{"pkg":"reflect","name":"intToReg"},{"pkg":"reflect","name":"interfaceType.NumMethod"},{"pkg":"reflect","name":"makeBytes"},{"pkg":"reflect","name":"makeComplex"},{"pkg":"reflect","name":"makeFloat"},{"pkg":"reflect","name":"makeFloat32"},{"pkg":"reflect","name":"makeInt"},{"pkg":"reflect","name":"makeMethodValue"},{"pkg":"reflect","name":"makeRunes"},{"pkg":"reflect","name":"makeString"},{"pkg":"reflect","name":"makemap"},{"pkg":"reflect","name":"mapassign"},{"pkg":"reflect","name":"mapassign_faststr"},{"pkg":"reflect","name":"mapdelete"},{"pkg":"reflect","name":"mapdelete_faststr"},{"pkg":"reflect","name":"mapiterelem"},{"pkg":"reflect","name":"mapiterinit"},{"pkg":"reflect","name":"mapiterkey"},{"pkg":"reflect","name":"mapiternext"},{"pkg":"reflect","name":"maplen"},{"pkg":"reflect","name":"memmove"},{"pkg":"reflect","name":"methodReceiver"},{"pkg":"reflect","name":"methodValueCall"},{"pkg":"reflect","name":"methodValueCallCodePtr"},{"pkg":"reflect","name":"moveMakeFuncArgPtrs"},{"pkg":"reflect","name":"name.data"},{"pkg":"reflect","name":"name.embedded"},{"pkg":"reflect","name":"name.hasTag"},{"pkg":"reflect","name":"name.isExported"},{"pkg":"reflect","name":"name.name"},{"pkg":"reflect","name":"name.pkgPath"},{"pkg":"reflect","name":"name.readVarint"},{"pkg":"reflect","name":"name.tag"},{"pkg":"reflect","name":"newAbiDesc"},{"pkg":"reflect","name":"newName"},{"pkg":"reflect","name":"overflowFloat32"},{"pkg":"reflect","name":"packEface"},{"pkg":"reflect","name":"ptrType.Bits"},{"pkg":"reflect","name":"ptrType.Elem"},{"pkg":"reflect","name":"ptrType.Field"},{"pkg":"reflect","name":"ptrType.Implements"},{"pkg":"reflect","name":"ptrType.Key"},{"pkg":"reflect","name":"ptrType.Kind"},{"pkg":"reflect","name":"ptrType.Len"},{"pkg":"reflect","name":"ptrType.Name"},{"pkg":"reflect","name":"ptrType.NumField"},{"pkg":"reflect","name":"ptrType.NumMethod"},{"pkg":"reflect","name":"ptrType.PkgPath"},{"pkg":"reflect","name":"ptrType.String"},{"pkg":"reflect","name":"ptrType.common"},{"pkg":"reflect","name":"resolveNameOff"},{"pkg":"reflect","name":"resolveReflectName"},{"pkg":"reflect","name":"resolveTextOff"},{"pkg":"reflect","name":"resolveTypeOff"},{"pkg":"reflect","name":"rtype.Bits"},{"pkg":"reflect","name":"rtype.ChanDir"},{"pkg":"reflect","name":"rtype.Elem"},{"pkg":"reflect","name":"rtype.Field"},{"pkg":"reflect","name":"rtype.Implements"},{"pkg":"reflect","name":"rtype.In"},{"pkg":"reflect","name":"rtype.Key"},{"pkg":"reflect","name":"rtype.Kind"},{"pkg":"reflect","name":"rtype.Len"},{"pkg":"reflect","name":"rtype.Name"},{"pkg":"reflect","name":"rtype.NumField"},{"pkg":"reflect","name":"rtype.NumIn"},{"pkg":"reflect","name":"rtype.NumMethod"},{"pkg":"reflect","name":"rtype.NumOut"},{"pkg":"reflect","name":"rtype.Out"},{"pkg":"reflect","name":"rtype.PkgPath"},{"pkg":"reflect","name":"rtype.Size"},{"pkg":"reflect","name":"rtype.String"},{"pkg":"reflect","name":"rtype.common"},{"pkg":"reflect","name":"rtype.exportedMethods"},{"pkg":"reflect","name":"rtype.hasName"},{"pkg":"reflect","name":"rtype.nameOff"},{"pkg":"reflect","name":"rtype.pointers"},{"pkg":"reflect","name":"rtype.ptrTo"},{"pkg":"reflect","name":"rtype.textOff"},{"pkg":"reflect","name":"rtype.typeOff"},{"pkg":"reflect","name":"rtype.uncommon"},{"pkg":"reflect","name":"rtypeOf"},{"pkg":"reflect","name":"rtypeOff"},{"pkg":"reflect","name":"specialChannelAssignability"},{"pkg":"reflect","name":"storeRcvr"},{"pkg":"reflect","name":"structField.embedded"},{"pkg":"reflect","name":"structType.Field"},{"pkg":"reflect","name":"toType"},{"pkg":"reflect","name":"typedmemclr"},{"pkg":"reflect","name":"typedmemmove"},{"pkg":"reflect","name":"typedslicecopy"},{"pkg":"reflect","name":"typelinks"},{"pkg":"reflect","name":"typesByString"},{"pkg":"reflect","name":"typesMustMatch"},{"pkg":"reflect","name":"uncommonType.exportedMethods"},{"pkg":"reflect","name":"uncommonType.methods"},{"pkg":"reflect","name":"unpackEface"},{"pkg":"reflect","name":"unsafe_New"},{"pkg":"reflect","name":"unsafe_NewArray"},{"pkg":"reflect","name":"valueInterface"},{"pkg":"reflect","name":"valueMethodName"},{"pkg":"reflect","name":"verifyNotInHeapPtr"},{"pkg":"reflect","name":"writeVarint"},{"pkg":"runtime","name":"Callers"},{"pkg":"runtime","name":"CallersFrames"},{"pkg":"runtime","name":"Frames.Next"},{"pkg":"runtime","name":"Func.Entry"},{"pkg":"runtime","name":"Func.startLine"},{"pkg":"runtime","name":"GOMAXPROCS"},{"pkg":"runtime","name":"Gosched"},{"pkg":"runtime","name":"SetFinalizer"},{"pkg":"runtime","name":"SetFinalizer.func1"},{"pkg":"runtime","name":"SetFinalizer.func2"},{"pkg":"runtime","name":"TypeAssertionError.Error"},{"pkg":"runtime","name":"_ELF_ST_BIND"},{"pkg":"runtime","name":"_ELF_ST_TYPE"},{"pkg":"runtime","name":"_ExternalCode"},{"pkg":"runtime","name":"_GC"},{"pkg":"runtime","name":"_LostExternalCode"},{"pkg":"runtime","name":"_LostSIGPROFDuringAtomic64"},{"pkg":"runtime","name":"_System"},{"pkg":"runtime","name":"_VDSO"},{"pkg":"runtime","name":"_func.funcInfo"},{"pkg":"runtime","name":"_func.isInlined"},{"pkg":"runtime","name":"_type.nameOff"},{"pkg":"runtime","name":"_type.pkgpath"},{"pkg":"runtime","name":"_type.string"},{"pkg":"runtime","name":"_type.textOff"},{"pkg":"runtime","name":"_type.typeOff"},{"pkg":"runtime","name":"_type.uncommon"},{"pkg":"runtime","name":"abort"},{"pkg":"runtime","name":"acquireSudog"},{"pkg":"runtime","name":"acquirem"},{"pkg":"runtime","name":"acquirep"},{"pkg":"runtime","name":"activeModules"},{"pkg":"runtime","name":"activeSweep.begin"},{"pkg":"runtime","name":"activeSweep.end"},{"pkg":"runtime","name":"activeSweep.isDone"},{"pkg":"runtime","name":"activeSweep.markDrained"},{"pkg":"runtime","name":"activeSweep.reset"},{"pkg":"runtime","name":"activeSweep.sweepers"},{"pkg":"runtime","name":"add"},{"pkg":"runtime","name":"add1"},{"pkg":"runtime","name":"addAdjustedTimers"},{"pkg":"runtime","name":"addOneOpenDeferFrame"},{"pkg":"runtime","name":"addOneOpenDeferFrame.func1"},{"pkg":"runtime","name":"addOneOpenDeferFrame.func1.1"},{"pkg":"runtime","name":"addb"},{"pkg":"runtime","name":"addfinalizer"},{"pkg":"runtime","name":"addrRange.contains"},{"pkg":"runtime","name":"addrRange.size"},{"pkg":"runtime","name":"addrRange.subtract"},{"pkg":"runtime","name":"addrRanges.add"},{"pkg":"runtime","name":"addrRanges.findAddrGreaterEqual"},{"pkg":"runtime","name":"addrRanges.findSucc"},{"pkg":"runtime","name":"addrRanges.init"},{"pkg":"runtime","name":"addrsToSummaryRange"},{"pkg":"runtime","name":"addspecial"},{"pkg":"runtime","name":"adjustSignalStack"},{"pkg":"runtime","name":"adjustctxt"},{"pkg":"runtime","name":"adjustdefers"},{"pkg":"runtime","name":"adjustframe"},{"pkg":"runtime","name":"adjustpanics"},{"pkg":"runtime","name":"adjustpointer"},{"pkg":"runtime","name":"adjustpointers"},{"pkg":"runtime","name":"adjustsudogs"},{"pkg":"runtime","name":"adjusttimers"},{"pkg":"runtime","name":"advanceEvacuationMark"},{"pkg":"runtime","name":"alginit"},{"pkg":"runtime","name":"alignDown"},{"pkg":"runtime","name":"alignUp"},{"pkg":"runtime","name":"allGsSnapshot"},{"pkg":"runtime","name":"allgadd"},{"pkg":"runtime","name":"allocm"},{"pkg":"runtime","name":"allocm.func1"},{"pkg":"runtime","name":"allocmcache"},{"pkg":"runtime","name":"allocmcache.func1"},{"pkg":"runtime","name":"appendIntStr"},{"pkg":"runtime","name":"arenaIndex"},{"pkg":"runtime","name":"args"},{"pkg":"runtime","name":"argv_index"},{"pkg":"runtime","name":"asmcgocall"},{"pkg":"runtime","name":"asminit"},{"pkg":"runtime","name":"assertE2I"},{"pkg":"runtime","name":"assertE2I2"},{"pkg":"runtime","name":"asyncPreempt"},{"pkg":"runtime","name":"asyncPreempt2"},{"pkg":"runtime","name":"atoi"},{"pkg":"runtime","name":"atoi32"},{"pkg":"runtime","name":"atoi64"},{"pkg":"runtime","name":"atomicAllG"},{"pkg":"runtime","name":"atomicAllGIndex"},{"pkg":"runtime","name":"atomicHeadTailIndex.cas"},{"pkg":"runtime","name":"atomicHeadTailIndex.incTail"},{"pkg":"runtime","name":"atomicHeadTailIndex.load"},{"pkg":"runtime","name":"atomicHeadTailIndex.reset"},{"pkg":"runtime","name":"atomicMSpanPointer.Load"},{"pkg":"runtime","name":"atomicMSpanPointer.StoreNoWB"},{"pkg":"runtime","name":"atomicOffAddr.Clear"},{"pkg":"runtime","name":"atomicOffAddr.Load"},{"pkg":"runtime","name":"atomicOffAddr.StoreMarked"},{"pkg":"runtime","name":"atomicOffAddr.StoreMin"},{"pkg":"runtime","name":"atomicOffAddr.StoreUnmark"},{"pkg":"runtime","name":"atomicSpanSetSpinePointer.Load"},{"pkg":"runtime","name":"atomicSpanSetSpinePointer.StoreNoWB"},{"pkg":"runtime","name":"atomicstorep"},{"pkg":"runtime","name":"atomicwb"},{"pkg":"runtime","name":"badPointer"},{"pkg":"runtime","name":"badTimer"},{"pkg":"runtime","name":"badctxt"},{"pkg":"runtime","name":"badmcall"},{"pkg":"runtime","name":"badmcall2"},{"pkg":"runtime","name":"badmorestackg0"},{"pkg":"runtime","name":"badmorestackgsignal"},{"pkg":"runtime","name":"badreflectcall"},{"pkg":"runtime","name":"badsignal"},{"pkg":"runtime","name":"badsystemstack"},{"pkg":"runtime","name":"badunlockosthread"},{"pkg":"runtime","name":"bgscavenge"},{"pkg":"runtime","name":"bgsweep"},{"pkg":"runtime","name":"binarySearchTree"},{"pkg":"runtime","name":"blockAlignSummaryRange"},{"pkg":"runtime","name":"blockableSig"},{"pkg":"runtime","name":"blockevent"},{"pkg":"runtime","name":"blocksampled"},{"pkg":"runtime","name":"bmap.keys"},{"pkg":"runtime","name":"bmap.overflow"},{"pkg":"runtime","name":"bmap.setoverflow"},{"pkg":"runtime","name":"bool2int"},{"pkg":"runtime","name":"boundsError.Error"},{"pkg":"runtime","name":"bucket.bp"},{"pkg":"runtime","name":"bucket.mp"},{"pkg":"runtime","name":"bucket.stk"},{"pkg":"runtime","name":"bucketEvacuated"},{"pkg":"runtime","name":"bucketMask"},{"pkg":"runtime","name":"bucketShift"},{"pkg":"runtime","name":"bulkBarrierBitmap"},{"pkg":"runtime","name":"bulkBarrierPreWrite"},{"pkg":"runtime","name":"bulkBarrierPreWriteSrcOnly"},{"pkg":"runtime","name":"bytes"},{"pkg":"runtime","name":"c128equal"},{"pkg":"runtime","name":"c128hash"},{"pkg":"runtime","name":"c64equal"},{"pkg":"runtime","name":"c64hash"},{"pkg":"runtime","name":"call1024"},{"pkg":"runtime","name":"call1048576"},{"pkg":"runtime","name":"call1073741824"},{"pkg":"runtime","name":"call128"},{"pkg":"runtime","name":"call131072"},{"pkg":"runtime","name":"call134217728"},{"pkg":"runtime","name":"call16"},{"pkg":"runtime","name":"call16384"},{"pkg":"runtime","name":"call16777216"},{"pkg":"runtime","name":"call2048"},{"pkg":"runtime","name":"call2097152"},{"pkg":"runtime","name":"call256"},{"pkg":"runtime","name":"call262144"},{"pkg":"runtime","name":"call268435456"},{"pkg":"runtime","name":"call32"},{"pkg":"runtime","name":"call32768"},{"pkg":"runtime","name":"call33554432"},{"pkg":"runtime","name":"call4096"},{"pkg":"runtime","name":"call4194304"},{"pkg":"runtime","name":"call512"},{"pkg":"runtime","name":"call524288"},{"pkg":"runtime","name":"call536870912"},{"pkg":"runtime","name":"call64"},{"pkg":"runtime","name":"call65536"},{"pkg":"runtime","name":"call67108864"},{"pkg":"runtime","name":"call8192"},{"pkg":"runtime","name":"call8388608"},{"pkg":"runtime","name":"callCgoMmap"},{"pkg":"runtime","name":"callCgoMunmap"},{"pkg":"runtime","name":"callCgoSigaction"},{"pkg":"runtime","name":"callCgoSymbolizer"},{"pkg":"runtime","name":"callers"},{"pkg":"runtime","name":"callers.func1"},{"pkg":"runtime","name":"canPreemptM"},{"pkg":"runtime","name":"canpanic"},{"pkg":"runtime","name":"cansemacquire"},{"pkg":"runtime","name":"casGFromPreempted"},{"pkg":"runtime","name":"casGToPreemptScan"},{"pkg":"runtime","name":"casGToWaiting"},{"pkg":"runtime","name":"casfrom_Gscanstatus"},{"pkg":"runtime","name":"casgstatus"},{"pkg":"runtime","name":"casgstatus.func1"},{"pkg":"runtime","name":"castogscanstatus"},{"pkg":"runtime","name":"cfuncname"},{"pkg":"runtime","name":"cfuncnameFromNameOff"},{"pkg":"runtime","name":"cgoCheckBits"},{"pkg":"runtime","name":"cgoCheckMemmove"},{"pkg":"runtime","name":"cgoCheckSliceCopy"},{"pkg":"runtime","name":"cgoCheckTypedBlock"},{"pkg":"runtime","name":"cgoCheckTypedBlock.func1"},{"pkg":"runtime","name":"cgoCheckUsingType"},{"pkg":"runtime","name":"cgoCheckWriteBarrier"},{"pkg":"runtime","name":"cgoCheckWriteBarrier.func1"},{"pkg":"runtime","name":"cgoContextPCs"},{"pkg":"runtime","name":"cgoInRange"},{"pkg":"runtime","name":"cgoIsGoPointer"},{"pkg":"runtime","name":"cgoSigtramp"},{"pkg":"runtime","name":"cgocall"},{"pkg":"runtime","name":"chanbuf"},{"pkg":"runtime","name":"chanparkcommit"},{"pkg":"runtime","name":"chanrecv"},{"pkg":"runtime","name":"chanrecv.func1"},{"pkg":"runtime","name":"chanrecv1"},{"pkg":"runtime","name":"chansend"},{"pkg":"runtime","name":"chansend.func1"},{"pkg":"runtime","name":"chansend1"},{"pkg":"runtime","name":"check"},{"pkg":"runtime","name":"checkASM"},{"pkg":"runtime","name":"checkIdleGCNoP"},{"pkg":"runtime","name":"checkRunqsNoP"},{"pkg":"runtime","name":"checkTimers"},{"pkg":"runtime","name":"checkTimersNoP"},{"pkg":"runtime","name":"checkdead"},{"pkg":"runtime","name":"checkdead.func1"},{"pkg":"runtime","name":"checkmcount"},{"pkg":"runtime","name":"chunkBase"},{"pkg":"runtime","name":"chunkIdx.l1"},{"pkg":"runtime","name":"chunkIdx.l2"},{"pkg":"runtime","name":"chunkIndex"},{"pkg":"runtime","name":"chunkPageIndex"},{"pkg":"runtime","name":"clearDeletedTimers"},{"pkg":"runtime","name":"clearpools"},{"pkg":"runtime","name":"clobberfree"},{"pkg":"runtime","name":"clone"},{"pkg":"runtime","name":"closechan"},{"pkg":"runtime","name":"closefd"},{"pkg":"runtime","name":"cmpstring"},{"pkg":"runtime","name":"concatstring2"},{"pkg":"runtime","name":"concatstring3"},{"pkg":"runtime","name":"concatstring4"},{"pkg":"runtime","name":"concatstring5"},{"pkg":"runtime","name":"concatstrings"},{"pkg":"runtime","name":"consistentHeapStats.acquire"},{"pkg":"runtime","name":"consistentHeapStats.release"},{"pkg":"runtime","name":"convT"},{"pkg":"runtime","name":"convT64"},{"pkg":"runtime","name":"convTnoptr"},{"pkg":"runtime","name":"convTslice"},{"pkg":"runtime","name":"convTstring"},{"pkg":"runtime","name":"copystack"},{"pkg":"runtime","name":"countSub"},{"pkg":"runtime","name":"cpuProfile.add"},{"pkg":"runtime","name":"cpuProfile.addExtra"},{"pkg":"runtime","name":"cpuProfile.addNonGo"},{"pkg":"runtime","name":"cpuinit"},{"pkg":"runtime","name":"cputicks"},{"pkg":"runtime","name":"crash"},{"pkg":"runtime","name":"createfing"},{"pkg":"runtime","name":"debugCallCheck"},{"pkg":"runtime","name":"debugCallCheck.func1"},{"pkg":"runtime","name":"debugCallPanicked"},{"pkg":"runtime","name":"debugCallV2"},{"pkg":"runtime","name":"debugCallWrap"},{"pkg":"runtime","name":"debugCallWrap.func1"},{"pkg":"runtime","name":"debugCallWrap.func2"},{"pkg":"runtime","name":"debugCallWrap1"},{"pkg":"runtime","name":"debugCallWrap1.func1"},{"pkg":"runtime","name":"debugCallWrap2"},{"pkg":"runtime","name":"debugCallWrap2.func1"},{"pkg":"runtime","name":"decoderune"},{"pkg":"runtime","name":"deductAssistCredit"},{"pkg":"runtime","name":"deductSweepCredit"},{"pkg":"runtime","name":"deferCallSave"},{"pkg":"runtime","name":"deferprocStack"},{"pkg":"runtime","name":"deferreturn"},{"pkg":"runtime","name":"deltimer"},{"pkg":"runtime","name":"dematerializeGCProg"},{"pkg":"runtime","name":"dieFromSignal"},{"pkg":"runtime","name":"divRoundUp"},{"pkg":"runtime","name":"doInit"},{"pkg":"runtime","name":"doRecordGoroutineProfile"},{"pkg":"runtime","name":"doRecordGoroutineProfile.func1"},{"pkg":"runtime","name":"doSigPreempt"},{"pkg":"runtime","name":"doaddtimer"},{"pkg":"runtime","name":"dodeltimer"},{"pkg":"runtime","name":"dodeltimer0"},{"pkg":"runtime","name":"dolockOSThread"},{"pkg":"runtime","name":"dopanic_m"},{"pkg":"runtime","name":"dounlockOSThread"},{"pkg":"runtime","name":"dropg"},{"pkg":"runtime","name":"dropm"},{"pkg":"runtime","name":"duffcopy"},{"pkg":"runtime","name":"duffzero"},{"pkg":"runtime","name":"dumpgstatus"},{"pkg":"runtime","name":"dumpregs"},{"pkg":"runtime","name":"efaceeq"},{"pkg":"runtime","name":"elideWrapperCalling"},{"pkg":"runtime","name":"empty"},{"pkg":"runtime","name":"encoderune"},{"pkg":"runtime","name":"endCheckmarks"},{"pkg":"runtime","name":"entersyscall"},{"pkg":"runtime","name":"entersyscall_gcwait"},{"pkg":"runtime","name":"entersyscall_sysmon"},{"pkg":"runtime","name":"entersyscallblock"},{"pkg":"runtime","name":"entersyscallblock.func1"},{"pkg":"runtime","name":"entersyscallblock.func2"},{"pkg":"runtime","name":"entersyscallblock_handoff"},{"pkg":"runtime","name":"envKeyEqual"},{"pkg":"runtime","name":"eqslice"},{"pkg":"runtime","name":"errorAddressString.Error"},{"pkg":"runtime","name":"errorString.Error"},{"pkg":"runtime","name":"evacuate"},{"pkg":"runtime","name":"evacuate_fast32"},{"pkg":"runtime","name":"evacuate_fast64"},{"pkg":"runtime","name":"evacuate_faststr"},{"pkg":"runtime","name":"evacuated"},{"pkg":"runtime","name":"execute"},{"pkg":"runtime","name":"exit"},{"pkg":"runtime","name":"exitThread"},{"pkg":"runtime","name":"exitsyscall"},{"pkg":"runtime","name":"exitsyscall.func1"},{"pkg":"runtime","name":"exitsyscall0"},{"pkg":"runtime","name":"exitsyscallfast"},{"pkg":"runtime","name":"exitsyscallfast.func1"},{"pkg":"runtime","name":"exitsyscallfast_pidle"},{"pkg":"runtime","name":"exitsyscallfast_reacquired"},{"pkg":"runtime","name":"exitsyscallfast_reacquired.func1"},{"pkg":"runtime","name":"expandCgoFrames"},{"pkg":"runtime","name":"extendRandom"},{"pkg":"runtime","name":"f32equal"},{"pkg":"runtime","name":"f32hash"},{"pkg":"runtime","name":"f64equal"},{"pkg":"runtime","name":"f64hash"},{"pkg":"runtime","name":"fastexprand"},{"pkg":"runtime","name":"fastlog2"},{"pkg":"runtime","name":"fastrand"},{"pkg":"runtime","name":"fastrand64"},{"pkg":"runtime","name":"fastrandinit"},{"pkg":"runtime","name":"fastrandn"},{"pkg":"runtime","name":"fatal"},{"pkg":"runtime","name":"fatal.func1"},{"pkg":"runtime","name":"fatalpanic"},{"pkg":"runtime","name":"fatalpanic.func1"},{"pkg":"runtime","name":"fatalpanic.func2"},{"pkg":"runtime","name":"fatalthrow"},{"pkg":"runtime","name":"fatalthrow.func1"},{"pkg":"runtime","name":"fillAligned"},{"pkg":"runtime","name":"fillAligned.func1"},{"pkg":"runtime","name":"finalizercommit"},{"pkg":"runtime","name":"findBitRange64"},{"pkg":"runtime","name":"findObject"},{"pkg":"runtime","name":"findRunnable"},{"pkg":"runtime","name":"findfunc"},{"pkg":"runtime","name":"findmoduledatap"},{"pkg":"runtime","name":"findnull"},{"pkg":"runtime","name":"findsghi"},{"pkg":"runtime","name":"finishsweep_m"},{"pkg":"runtime","name":"fixalloc.alloc"},{"pkg":"runtime","name":"fixalloc.free"},{"pkg":"runtime","name":"fixalloc.init"},{"pkg":"runtime","name":"float64bits"},{"pkg":"runtime","name":"fmtNSAsMS"},{"pkg":"runtime","name":"forEachG"},{"pkg":"runtime","name":"forEachGRace"},{"pkg":"runtime","name":"forEachP"},{"pkg":"runtime","name":"forcegchelper"},{"pkg":"runtime","name":"freeSomeWbufs"},{"pkg":"runtime","name":"freeSomeWbufs.func1"},{"pkg":"runtime","name":"freeSpecial"},{"pkg":"runtime","name":"freeStackSpans"},{"pkg":"runtime","name":"freedefer"},{"pkg":"runtime","name":"freedeferfn"},{"pkg":"runtime","name":"freedeferpanic"},{"pkg":"runtime","name":"freemcache"},{"pkg":"runtime","name":"freemcache.func1"},{"pkg":"runtime","name":"freezetheworld"},{"pkg":"runtime","name":"full"},{"pkg":"runtime","name":"funcInfo.entry"},{"pkg":"runtime","name":"funcInfo.valid"},{"pkg":"runtime","name":"funcMaxSPDelta"},{"pkg":"runtime","name":"funcdata"},{"pkg":"runtime","name":"funcfile"},{"pkg":"runtime","name":"funcline"},{"pkg":"runtime","name":"funcline1"},{"pkg":"runtime","name":"funcname"},{"pkg":"runtime","name":"funcnameFromNameOff"},{"pkg":"runtime","name":"funcpkgpath"},{"pkg":"runtime","name":"funcspdelta"},{"pkg":"runtime","name":"functype.dotdotdot"},{"pkg":"runtime","name":"functype.in"},{"pkg":"runtime","name":"functype.out"},{"pkg":"runtime","name":"futex"},{"pkg":"runtime","name":"futexsleep"},{"pkg":"runtime","name":"futexwakeup"},{"pkg":"runtime","name":"futexwakeup.func1"},{"pkg":"runtime","name":"gList.empty"},{"pkg":"runtime","name":"gList.pop"},{"pkg":"runtime","name":"gList.push"},{"pkg":"runtime","name":"gList.pushAll"},{"pkg":"runtime","name":"gQueue.empty"},{"pkg":"runtime","name":"gQueue.pop"},{"pkg":"runtime","name":"gQueue.popList"},{"pkg":"runtime","name":"gQueue.push"},{"pkg":"runtime","name":"gQueue.pushBack"},{"pkg":"runtime","name":"gQueue.pushBackAll"},{"pkg":"runtime","name":"gcAssistAlloc"},{"pkg":"runtime","name":"gcAssistAlloc.func1"},{"pkg":"runtime","name":"gcAssistAlloc1"},{"pkg":"runtime","name":"gcBgMarkPrepare"},{"pkg":"runtime","name":"gcBgMarkStartWorkers"},{"pkg":"runtime","name":"gcBgMarkWorker"},{"pkg":"runtime","name":"gcBgMarkWorker.func1"},{"pkg":"runtime","name":"gcBgMarkWorker.func2"},{"pkg":"runtime","name":"gcBits.bitp"},{"pkg":"runtime","name":"gcBits.bytep"},{"pkg":"runtime","name":"gcBitsArena.tryAlloc"},{"pkg":"runtime","name":"gcCPULimiterState.accumulate"},{"pkg":"runtime","name":"gcCPULimiterState.addAssistTime"},{"pkg":"runtime","name":"gcCPULimiterState.addIdleTime"},{"pkg":"runtime","name":"gcCPULimiterState.finishGCTransition"},{"pkg":"runtime","name":"gcCPULimiterState.limiting"},{"pkg":"runtime","name":"gcCPULimiterState.needUpdate"},{"pkg":"runtime","name":"gcCPULimiterState.resetCapacity"},{"pkg":"runtime","name":"gcCPULimiterState.startGCTransition"},{"pkg":"runtime","name":"gcCPULimiterState.tryLock"},{"pkg":"runtime","name":"gcCPULimiterState.unlock"},{"pkg":"runtime","name":"gcCPULimiterState.update"},{"pkg":"runtime","name":"gcCPULimiterState.updateLocked"},{"pkg":"runtime","name":"gcComputeStartingStackSize"},{"pkg":"runtime","name":"gcControllerCommit"},{"pkg":"runtime","name":"gcControllerState).findRunnableGCWorker.func1"},{"pkg":"runtime","name":"gcControllerState.addGlobals"},{"pkg":"runtime","name":"gcControllerState.addIdleMarkWorker"},{"pkg":"runtime","name":"gcControllerState.addScannableStack"},{"pkg":"runtime","name":"gcControllerState.commit"},{"pkg":"runtime","name":"gcControllerState.endCycle"},{"pkg":"runtime","name":"gcControllerState.enlistWorker"},{"pkg":"runtime","name":"gcControllerState.findRunnableGCWorker"},{"pkg":"runtime","name":"gcControllerState.heapGoal"},{"pkg":"runtime","name":"gcControllerState.heapGoalInternal"},{"pkg":"runtime","name":"gcControllerState.init"},{"pkg":"runtime","name":"gcControllerState.markWorkerStop"},{"pkg":"runtime","name":"gcControllerState.memoryLimitHeapGoal"},{"pkg":"runtime","name":"gcControllerState.needIdleMarkWorker"},{"pkg":"runtime","name":"gcControllerState.removeIdleMarkWorker"},{"pkg":"runtime","name":"gcControllerState.resetLive"},{"pkg":"runtime","name":"gcControllerState.revise"},{"pkg":"runtime","name":"gcControllerState.setGCPercent"},{"pkg":"runtime","name":"gcControllerState.setMaxIdleMarkWorkers"},{"pkg":"runtime","name":"gcControllerState.setMemoryLimit"},{"pkg":"runtime","name":"gcControllerState.startCycle"},{"pkg":"runtime","name":"gcControllerState.trigger"},{"pkg":"runtime","name":"gcControllerState.update"},{"pkg":"runtime","name":"gcDrain"},{"pkg":"runtime","name":"gcDrainN"},{"pkg":"runtime","name":"gcDumpObject"},{"pkg":"runtime","name":"gcFlushBgCredit"},{"pkg":"runtime","name":"gcMark"},{"pkg":"runtime","name":"gcMarkDone"},{"pkg":"runtime","name":"gcMarkDone.func1"},{"pkg":"runtime","name":"gcMarkDone.func1.1"},{"pkg":"runtime","name":"gcMarkDone.func2"},{"pkg":"runtime","name":"gcMarkDone.func3"},{"pkg":"runtime","name":"gcMarkRootCheck"},{"pkg":"runtime","name":"gcMarkRootCheck.func1"},{"pkg":"runtime","name":"gcMarkRootPrepare"},{"pkg":"runtime","name":"gcMarkRootPrepare.func1"},{"pkg":"runtime","name":"gcMarkTermination"},{"pkg":"runtime","name":"gcMarkTermination.func1"},{"pkg":"runtime","name":"gcMarkTermination.func2"},{"pkg":"runtime","name":"gcMarkTermination.func3"},{"pkg":"runtime","name":"gcMarkTermination.func4"},{"pkg":"runtime","name":"gcMarkTermination.func4.1"},{"pkg":"runtime","name":"gcMarkTinyAllocs"},{"pkg":"runtime","name":"gcMarkWorkAvailable"},{"pkg":"runtime","name":"gcPaceScavenger"},{"pkg":"runtime","name":"gcPaceSweeper"},{"pkg":"runtime","name":"gcParkAssist"},{"pkg":"runtime","name":"gcResetMarkState"},{"pkg":"runtime","name":"gcResetMarkState.func1"},{"pkg":"runtime","name":"gcStart"},{"pkg":"runtime","name":"gcStart.func1"},{"pkg":"runtime","name":"gcStart.func2"},{"pkg":"runtime","name":"gcSweep"},{"pkg":"runtime","name":"gcTrigger.test"},{"pkg":"runtime","name":"gcWakeAllAssists"},{"pkg":"runtime","name":"gcWork.balance"},{"pkg":"runtime","name":"gcWork.dispose"},{"pkg":"runtime","name":"gcWork.empty"},{"pkg":"runtime","name":"gcWork.init"},{"pkg":"runtime","name":"gcWork.put"},{"pkg":"runtime","name":"gcWork.putBatch"},{"pkg":"runtime","name":"gcWork.putFast"},{"pkg":"runtime","name":"gcWork.tryGet"},{"pkg":"runtime","name":"gcWork.tryGetFast"},{"pkg":"runtime","name":"gcWriteBarrier"},{"pkg":"runtime","name":"gcWriteBarrierBX"},{"pkg":"runtime","name":"gcWriteBarrierCX"},{"pkg":"runtime","name":"gcWriteBarrierDX"},{"pkg":"runtime","name":"gcWriteBarrierR8"},{"pkg":"runtime","name":"gcWriteBarrierR9"},{"pkg":"runtime","name":"gcWriteBarrierSI"},{"pkg":"runtime","name":"gcallers"},{"pkg":"runtime","name":"gcd"},{"pkg":"runtime","name":"gcenable"},{"pkg":"runtime","name":"gcenable.func1"},{"pkg":"runtime","name":"gcenable.func2"},{"pkg":"runtime","name":"gcinit"},{"pkg":"runtime","name":"gclinkptr.ptr"},{"pkg":"runtime","name":"gcmarknewobject"},{"pkg":"runtime","name":"gcstopm"},{"pkg":"runtime","name":"gentraceback"},{"pkg":"runtime","name":"getGodebugEarly"},{"pkg":"runtime","name":"getHugePageSize"},{"pkg":"runtime","name":"getMCache"},{"pkg":"runtime","name":"getRandomData"},{"pkg":"runtime","name":"getargp"},{"pkg":"runtime","name":"getempty"},{"pkg":"runtime","name":"getempty.func1"},{"pkg":"runtime","name":"getitab"},{"pkg":"runtime","name":"getpid"},{"pkg":"runtime","name":"getproccount"},{"pkg":"runtime","name":"getsig"},{"pkg":"runtime","name":"gettid"},{"pkg":"runtime","name":"gfget"},{"pkg":"runtime","name":"gfget.func1"},{"pkg":"runtime","name":"gfget.func2"},{"pkg":"runtime","name":"gfpurge"},{"pkg":"runtime","name":"gfput"},{"pkg":"runtime","name":"globrunqget"},{"pkg":"runtime","name":"globrunqput"},{"pkg":"runtime","name":"globrunqputbatch"},{"pkg":"runtime","name":"globrunqputhead"},{"pkg":"runtime","name":"goPanicIndex"},{"pkg":"runtime","name":"goPanicIndexU"},{"pkg":"runtime","name":"goPanicSlice3Alen"},{"pkg":"runtime","name":"goPanicSlice3AlenU"},{"pkg":"runtime","name":"goPanicSlice3C"},{"pkg":"runtime","name":"goPanicSliceAcap"},{"pkg":"runtime","name":"goPanicSliceAcapU"},{"pkg":"runtime","name":"goPanicSliceAlen"},{"pkg":"runtime","name":"goPanicSliceAlenU"},{"pkg":"runtime","name":"goPanicSliceB"},{"pkg":"runtime","name":"goPanicSliceBU"},{"pkg":"runtime","name":"goargs"},{"pkg":"runtime","name":"goenvs"},{"pkg":"runtime","name":"goenvs_unix"},{"pkg":"runtime","name":"goexit"},{"pkg":"runtime","name":"goexit0"},{"pkg":"runtime","name":"goexit1"},{"pkg":"runtime","name":"gogetenv"},{"pkg":"runtime","name":"gogo"},{"pkg":"runtime","name":"gopanic"},{"pkg":"runtime","name":"gopark"},{"pkg":"runtime","name":"goparkunlock"},{"pkg":"runtime","name":"gopreempt_m"},{"pkg":"runtime","name":"goready"},{"pkg":"runtime","name":"goready.func1"},{"pkg":"runtime","name":"gorecover"},{"pkg":"runtime","name":"goroutineProfileStateHolder.CompareAndSwap"},{"pkg":"runtime","name":"goroutineProfileStateHolder.Load"},{"pkg":"runtime","name":"goroutineProfileStateHolder.Store"},{"pkg":"runtime","name":"goroutineheader"},{"pkg":"runtime","name":"goschedIfBusy"},{"pkg":"runtime","name":"goschedImpl"},{"pkg":"runtime","name":"gosched_m"},{"pkg":"runtime","name":"goschedguarded"},{"pkg":"runtime","name":"goschedguarded_m"},{"pkg":"runtime","name":"gostartcall"},{"pkg":"runtime","name":"gostartcallfn"},{"pkg":"runtime","name":"gostring"},{"pkg":"runtime","name":"gostringnocopy"},{"pkg":"runtime","name":"gotraceback"},{"pkg":"runtime","name":"goyield"},{"pkg":"runtime","name":"goyield_m"},{"pkg":"runtime","name":"greyobject"},{"pkg":"runtime","name":"growWork"},{"pkg":"runtime","name":"growWork_fast32"},{"pkg":"runtime","name":"growWork_fast64"},{"pkg":"runtime","name":"growWork_faststr"},{"pkg":"runtime","name":"growslice"},{"pkg":"runtime","name":"guintptr.cas"},{"pkg":"runtime","name":"guintptr.ptr"},{"pkg":"runtime","name":"guintptr.set"},{"pkg":"runtime","name":"gwrite"},{"pkg":"runtime","name":"handoff"},{"pkg":"runtime","name":"handoffp"},{"pkg":"runtime","name":"hasPrefix"},{"pkg":"runtime","name":"hashGrow"},{"pkg":"runtime","name":"hchan.raceaddr"},{"pkg":"runtime","name":"headTailIndex.head"},{"pkg":"runtime","name":"headTailIndex.split"},{"pkg":"runtime","name":"heapBits.next"},{"pkg":"runtime","name":"heapBits.nextFast"},{"pkg":"runtime","name":"heapBitsForAddr"},{"pkg":"runtime","name":"heapBitsSetType"},{"pkg":"runtime","name":"heapRetained"},{"pkg":"runtime","name":"hexdumpWords"},{"pkg":"runtime","name":"hmap.createOverflow"},{"pkg":"runtime","name":"hmap.growing"},{"pkg":"runtime","name":"hmap.incrnoverflow"},{"pkg":"runtime","name":"hmap.newoverflow"},{"pkg":"runtime","name":"hmap.noldbuckets"},{"pkg":"runtime","name":"hmap.oldbucketmask"},{"pkg":"runtime","name":"hmap.sameSizeGrow"},{"pkg":"runtime","name":"ifaceeq"},{"pkg":"runtime","name":"inHeapOrStack"},{"pkg":"runtime","name":"inPersistentAlloc"},{"pkg":"runtime","name":"inUserArenaChunk"},{"pkg":"runtime","name":"inVDSOPage"},{"pkg":"runtime","name":"incidlelocked"},{"pkg":"runtime","name":"init"},{"pkg":"runtime","name":"init.0"},{"pkg":"runtime","name":"init.1"},{"pkg":"runtime","name":"init.4"},{"pkg":"runtime","name":"init.5"},{"pkg":"runtime","name":"init.6"},{"pkg":"runtime","name":"initAlgAES"},{"pkg":"runtime","name":"initsig"},{"pkg":"runtime","name":"injectglist"},{"pkg":"runtime","name":"injectglist.func1"},{"pkg":"runtime","name":"int64Hash"},{"pkg":"runtime","name":"interequal"},{"pkg":"runtime","name":"interhash"},{"pkg":"runtime","name":"intstring"},{"pkg":"runtime","name":"isAbortPC"},{"pkg":"runtime","name":"isAsyncSafePoint"},{"pkg":"runtime","name":"isDirectIface"},{"pkg":"runtime","name":"isEmpty"},{"pkg":"runtime","name":"isExportedRuntime"},{"pkg":"runtime","name":"isFinite"},{"pkg":"runtime","name":"isInf"},{"pkg":"runtime","name":"isNaN"},{"pkg":"runtime","name":"isPowerOfTwo"},{"pkg":"runtime","name":"isShrinkStackSafe"},{"pkg":"runtime","name":"isSweepDone"},{"pkg":"runtime","name":"isSystemGoroutine"},{"pkg":"runtime","name":"itab.init"},{"pkg":"runtime","name":"itabAdd"},{"pkg":"runtime","name":"itabHashFunc"},{"pkg":"runtime","name":"itabTableType.add"},{"pkg":"runtime","name":"itabTableType.add-fm"},{"pkg":"runtime","name":"itabTableType.find"},{"pkg":"runtime","name":"itabsinit"},{"pkg":"runtime","name":"iterate_itabs"},{"pkg":"runtime","name":"itoa"},{"pkg":"runtime","name":"itoaDiv"},{"pkg":"runtime","name":"levelIndexToOffAddr"},{"pkg":"runtime","name":"lfnodeValidate"},{"pkg":"runtime","name":"lfstack.empty"},{"pkg":"runtime","name":"lfstack.pop"},{"pkg":"runtime","name":"lfstack.push"},{"pkg":"runtime","name":"lfstackPack"},{"pkg":"runtime","name":"lfstackUnpack"},{"pkg":"runtime","name":"limiterEvent.consume"},{"pkg":"runtime","name":"limiterEvent.start"},{"pkg":"runtime","name":"limiterEvent.stop"},{"pkg":"runtime","name":"limiterEventStamp.duration"},{"pkg":"runtime","name":"limiterEventStamp.typ"},{"pkg":"runtime","name":"linearAlloc.alloc"},{"pkg":"runtime","name":"lock"},{"pkg":"runtime","name":"lock2"},{"pkg":"runtime","name":"lockOSThread"},{"pkg":"runtime","name":"lockRank.String"},{"pkg":"runtime","name":"lockRankMayTraceFlush"},{"pkg":"runtime","name":"lockWithRank"},{"pkg":"runtime","name":"lockextra"},{"pkg":"runtime","name":"m.becomeSpinning"},{"pkg":"runtime","name":"mPark"},{"pkg":"runtime","name":"mProfCycleHolder.increment"},{"pkg":"runtime","name":"mProfCycleHolder.read"},{"pkg":"runtime","name":"mProfCycleHolder.setFlushed"},{"pkg":"runtime","name":"mProf_Flush"},{"pkg":"runtime","name":"mProf_FlushLocked"},{"pkg":"runtime","name":"mProf_Free"},{"pkg":"runtime","name":"mProf_Malloc"},{"pkg":"runtime","name":"mProf_Malloc.func1"},{"pkg":"runtime","name":"mProf_NextCycle"},{"pkg":"runtime","name":"mReserveID"},{"pkg":"runtime","name":"mSpanList.init"},{"pkg":"runtime","name":"mSpanList.insert"},{"pkg":"runtime","name":"mSpanList.isEmpty"},{"pkg":"runtime","name":"mSpanList.remove"},{"pkg":"runtime","name":"mSpanList.takeAll"},{"pkg":"runtime","name":"mSpanStateBox.get"},{"pkg":"runtime","name":"mSpanStateBox.set"},{"pkg":"runtime","name":"madvise"},{"pkg":"runtime","name":"main"},{"pkg":"runtime","name":"main.func1"},{"pkg":"runtime","name":"main.func2"},{"pkg":"runtime","name":"makeAddrRange"},{"pkg":"runtime","name":"makeBucketArray"},{"pkg":"runtime","name":"makeHeadTailIndex"},{"pkg":"runtime","name":"makeLimiterEventStamp"},{"pkg":"runtime","name":"makeSpanClass"},{"pkg":"runtime","name":"makechan"},{"pkg":"runtime","name":"makemap"},{"pkg":"runtime","name":"makemap_small"},{"pkg":"runtime","name":"makeslice"},{"pkg":"runtime","name":"makeslicecopy"},{"pkg":"runtime","name":"malg"},{"pkg":"runtime","name":"malg.func1"},{"pkg":"runtime","name":"mallocgc"},{"pkg":"runtime","name":"mallocinit"},{"pkg":"runtime","name":"mapaccess1"},{"pkg":"runtime","name":"mapaccess1_fast32"},{"pkg":"runtime","name":"mapaccess1_faststr"},{"pkg":"runtime","name":"mapaccess2"},{"pkg":"runtime","name":"mapaccess2_fast32"},{"pkg":"runtime","name":"mapaccess2_fast64"},{"pkg":"runtime","name":"mapaccess2_faststr"},{"pkg":"runtime","name":"mapaccessK"},{"pkg":"runtime","name":"mapassign"},{"pkg":"runtime","name":"mapassign_fast32"},{"pkg":"runtime","name":"mapassign_fast64ptr"},{"pkg":"runtime","name":"mapassign_faststr"},{"pkg":"runtime","name":"mapdelete"},{"pkg":"runtime","name":"mapdelete_faststr"},{"pkg":"runtime","name":"mapiterinit"},{"pkg":"runtime","name":"mapiternext"},{"pkg":"runtime","name":"maptype.hashMightPanic"},{"pkg":"runtime","name":"maptype.indirectelem"},{"pkg":"runtime","name":"maptype.indirectkey"},{"pkg":"runtime","name":"maptype.needkeyupdate"},{"pkg":"runtime","name":"maptype.reflexivekey"},{"pkg":"runtime","name":"markBits.advance"},{"pkg":"runtime","name":"markBits.isMarked"},{"pkg":"runtime","name":"markBits.setMarked"},{"pkg":"runtime","name":"markBits.setMarkedNonAtomic"},{"pkg":"runtime","name":"markroot"},{"pkg":"runtime","name":"markroot.func1"},{"pkg":"runtime","name":"markrootBlock"},{"pkg":"runtime","name":"markrootFreeGStacks"},{"pkg":"runtime","name":"markrootSpans"},{"pkg":"runtime","name":"materializeGCProg"},{"pkg":"runtime","name":"mcache.allocLarge"},{"pkg":"runtime","name":"mcache.nextFree"},{"pkg":"runtime","name":"mcache.prepareForSweep"},{"pkg":"runtime","name":"mcache.refill"},{"pkg":"runtime","name":"mcache.releaseAll"},{"pkg":"runtime","name":"mcall"},{"pkg":"runtime","name":"mcentral.cacheSpan"},{"pkg":"runtime","name":"mcentral.fullSwept"},{"pkg":"runtime","name":"mcentral.fullUnswept"},{"pkg":"runtime","name":"mcentral.grow"},{"pkg":"runtime","name":"mcentral.init"},{"pkg":"runtime","name":"mcentral.partialSwept"},{"pkg":"runtime","name":"mcentral.partialUnswept"},{"pkg":"runtime","name":"mcentral.uncacheSpan"},{"pkg":"runtime","name":"mcommoninit"},{"pkg":"runtime","name":"mcount"},{"pkg":"runtime","name":"memRecordCycle.add"},{"pkg":"runtime","name":"memclrHasPointers"},{"pkg":"runtime","name":"memclrNoHeapPointers"},{"pkg":"runtime","name":"memclrNoHeapPointersChunked"},{"pkg":"runtime","name":"memequal"},{"pkg":"runtime","name":"memequal0"},{"pkg":"runtime","name":"memequal128"},{"pkg":"runtime","name":"memequal16"},{"pkg":"runtime","name":"memequal32"},{"pkg":"runtime","name":"memequal64"},{"pkg":"runtime","name":"memequal8"},{"pkg":"runtime","name":"memequal_varlen"},{"pkg":"runtime","name":"memhash"},{"pkg":"runtime","name":"memhash128"},{"pkg":"runtime","name":"memhash32"},{"pkg":"runtime","name":"memhash32Fallback"},{"pkg":"runtime","name":"memhash64"},{"pkg":"runtime","name":"memhash64Fallback"},{"pkg":"runtime","name":"memhashFallback"},{"pkg":"runtime","name":"memhash_varlen"},{"pkg":"runtime","name":"memmove"},{"pkg":"runtime","name":"mergeSummaries"},{"pkg":"runtime","name":"mexit"},{"pkg":"runtime","name":"mget"},{"pkg":"runtime","name":"mheap).alloc.func1"},{"pkg":"runtime","name":"mheap).allocSpan.func1"},{"pkg":"runtime","name":"mheap).freeSpan.func1"},{"pkg":"runtime","name":"mheap.alloc"},{"pkg":"runtime","name":"mheap.allocMSpanLocked"},{"pkg":"runtime","name":"mheap.allocManual"},{"pkg":"runtime","name":"mheap.allocNeedsZero"},{"pkg":"runtime","name":"mheap.allocSpan"},{"pkg":"runtime","name":"mheap.freeMSpanLocked"},{"pkg":"runtime","name":"mheap.freeManual"},{"pkg":"runtime","name":"mheap.freeSpan"},{"pkg":"runtime","name":"mheap.freeSpanLocked"},{"pkg":"runtime","name":"mheap.grow"},{"pkg":"runtime","name":"mheap.init"},{"pkg":"runtime","name":"mheap.initSpan"},{"pkg":"runtime","name":"mheap.nextSpanForSweep"},{"pkg":"runtime","name":"mheap.reclaim"},{"pkg":"runtime","name":"mheap.reclaimChunk"},{"pkg":"runtime","name":"mheap.setSpans"},{"pkg":"runtime","name":"mheap.sysAlloc"},{"pkg":"runtime","name":"mheap.tryAllocMSpan"},{"pkg":"runtime","name":"mincore"},{"pkg":"runtime","name":"minit"},{"pkg":"runtime","name":"minitSignalMask"},{"pkg":"runtime","name":"minitSignalStack"},{"pkg":"runtime","name":"minitSignals"},{"pkg":"runtime","name":"mix"},{"pkg":"runtime","name":"mmap"},{"pkg":"runtime","name":"mmap.func1"},{"pkg":"runtime","name":"modtimer"},{"pkg":"runtime","name":"moduledata.textAddr"},{"pkg":"runtime","name":"moduledata.textOff"},{"pkg":"runtime","name":"moduledataverify"},{"pkg":"runtime","name":"moduledataverify1"},{"pkg":"runtime","name":"modulesinit"},{"pkg":"runtime","name":"morestack"},{"pkg":"runtime","name":"morestack_noctxt"},{"pkg":"runtime","name":"morestackc"},{"pkg":"runtime","name":"moveTimers"},{"pkg":"runtime","name":"mpreinit"},{"pkg":"runtime","name":"mput"},{"pkg":"runtime","name":"msigrestore"},{"pkg":"runtime","name":"mspan).setUserArenaChunkToFault.func1"},{"pkg":"runtime","name":"mspan.allocBitsForIndex"},{"pkg":"runtime","name":"mspan.base"},{"pkg":"runtime","name":"mspan.countAlloc"},{"pkg":"runtime","name":"mspan.divideByElemSize"},{"pkg":"runtime","name":"mspan.ensureSwept"},{"pkg":"runtime","name":"mspan.init"},{"pkg":"runtime","name":"mspan.initHeapBits"},{"pkg":"runtime","name":"mspan.isFree"},{"pkg":"runtime","name":"mspan.markBitsForBase"},{"pkg":"runtime","name":"mspan.markBitsForIndex"},{"pkg":"runtime","name":"mspan.nextFreeIndex"},{"pkg":"runtime","name":"mspan.objIndex"},{"pkg":"runtime","name":"mspan.refillAllocCache"},{"pkg":"runtime","name":"mspan.reportZombies"},{"pkg":"runtime","name":"mspan.setUserArenaChunkToFault"},{"pkg":"runtime","name":"mspinning"},{"pkg":"runtime","name":"mstart"},{"pkg":"runtime","name":"mstart0"},{"pkg":"runtime","name":"mstart1"},{"pkg":"runtime","name":"mstartm0"},{"pkg":"runtime","name":"muintptr.ptr"},{"pkg":"runtime","name":"muintptr.set"},{"pkg":"runtime","name":"munmap"},{"pkg":"runtime","name":"munmap.func1"},{"pkg":"runtime","name":"name.data"},{"pkg":"runtime","name":"name.isBlank"},{"pkg":"runtime","name":"name.isEmbedded"},{"pkg":"runtime","name":"name.isExported"},{"pkg":"runtime","name":"name.name"},{"pkg":"runtime","name":"name.pkgPath"},{"pkg":"runtime","name":"name.readvarint"},{"pkg":"runtime","name":"name.tag"},{"pkg":"runtime","name":"nanotime"},{"pkg":"runtime","name":"nanotime1"},{"pkg":"runtime","name":"needm"},{"pkg":"runtime","name":"netpoll"},{"pkg":"runtime","name":"netpollBreak"},{"pkg":"runtime","name":"netpollGenericInit"},{"pkg":"runtime","name":"netpollblock"},{"pkg":"runtime","name":"netpollblockcommit"},{"pkg":"runtime","name":"netpollcheckerr"},{"pkg":"runtime","name":"netpollclose"},{"pkg":"runtime","name":"netpollgoready"},{"pkg":"runtime","name":"netpollinit"},{"pkg":"runtime","name":"netpollinited"},{"pkg":"runtime","name":"netpollopen"},{"pkg":"runtime","name":"netpollready"},{"pkg":"runtime","name":"netpollunblock"},{"pkg":"runtime","name":"newAllocBits"},{"pkg":"runtime","name":"newArenaMayUnlock"},{"pkg":"runtime","name":"newBucket"},{"pkg":"runtime","name":"newMarkBits"},{"pkg":"runtime","name":"newarray"},{"pkg":"runtime","name":"newdefer"},{"pkg":"runtime","name":"newextram"},{"pkg":"runtime","name":"newm"},{"pkg":"runtime","name":"newm1"},{"pkg":"runtime","name":"newobject"},{"pkg":"runtime","name":"newosproc"},{"pkg":"runtime","name":"newosproc.func1"},{"pkg":"runtime","name":"newproc"},{"pkg":"runtime","name":"newproc.func1"},{"pkg":"runtime","name":"newproc1"},{"pkg":"runtime","name":"newstack"},{"pkg":"runtime","name":"nextFreeFast"},{"pkg":"runtime","name":"nextMarkBitArenaEpoch"},{"pkg":"runtime","name":"nextSample"},{"pkg":"runtime","name":"nilfunc"},{"pkg":"runtime","name":"nilinterequal"},{"pkg":"runtime","name":"nilinterhash"},{"pkg":"runtime","name":"noSignalStack"},{"pkg":"runtime","name":"nobarrierWakeTime"},{"pkg":"runtime","name":"nonblockingPipe"},{"pkg":"runtime","name":"notInHeap.add"},{"pkg":"runtime","name":"noteclear"},{"pkg":"runtime","name":"notesleep"},{"pkg":"runtime","name":"notetsleep"},{"pkg":"runtime","name":"notetsleep_internal"},{"pkg":"runtime","name":"notetsleepg"},{"pkg":"runtime","name":"notewakeup"},{"pkg":"runtime","name":"offAddr.add"},{"pkg":"runtime","name":"offAddr.addr"},{"pkg":"runtime","name":"offAddr.diff"},{"pkg":"runtime","name":"offAddr.equal"},{"pkg":"runtime","name":"offAddr.lessEqual"},{"pkg":"runtime","name":"offAddr.lessThan"},{"pkg":"runtime","name":"offAddrToLevelIndex"},{"pkg":"runtime","name":"oneNewExtraM"},{"pkg":"runtime","name":"open"},{"pkg":"runtime","name":"osinit"},{"pkg":"runtime","name":"osyield"},{"pkg":"runtime","name":"osyield_no_g"},{"pkg":"runtime","name":"overLoadFactor"},{"pkg":"runtime","name":"p).destroy.func1"},{"pkg":"runtime","name":"p.destroy"},{"pkg":"runtime","name":"p.init"},{"pkg":"runtime","name":"pMask.clear"},{"pkg":"runtime","name":"pMask.read"},{"pkg":"runtime","name":"pMask.set"},{"pkg":"runtime","name":"packPallocSum"},{"pkg":"runtime","name":"pageAlloc).find.func1"},{"pkg":"runtime","name":"pageAlloc).scavenge.func1"},{"pkg":"runtime","name":"pageAlloc).sysGrow.func1"},{"pkg":"runtime","name":"pageAlloc).sysGrow.func2"},{"pkg":"runtime","name":"pageAlloc).sysGrow.func3"},{"pkg":"runtime","name":"pageAlloc.alloc"},{"pkg":"runtime","name":"pageAlloc.allocRange"},{"pkg":"runtime","name":"pageAlloc.allocToCache"},{"pkg":"runtime","name":"pageAlloc.chunkOf"},{"pkg":"runtime","name":"pageAlloc.find"},{"pkg":"runtime","name":"pageAlloc.findMappedAddr"},{"pkg":"runtime","name":"pageAlloc.free"},{"pkg":"runtime","name":"pageAlloc.grow"},{"pkg":"runtime","name":"pageAlloc.init"},{"pkg":"runtime","name":"pageAlloc.scavenge"},{"pkg":"runtime","name":"pageAlloc.scavengeOne"},{"pkg":"runtime","name":"pageAlloc.sysGrow"},{"pkg":"runtime","name":"pageAlloc.sysInit"},{"pkg":"runtime","name":"pageAlloc.update"},{"pkg":"runtime","name":"pageBits.block64"},{"pkg":"runtime","name":"pageBits.clear"},{"pkg":"runtime","name":"pageBits.clearAll"},{"pkg":"runtime","name":"pageBits.clearBlock64"},{"pkg":"runtime","name":"pageBits.clearRange"},{"pkg":"runtime","name":"pageBits.popcntRange"},{"pkg":"runtime","name":"pageBits.set"},{"pkg":"runtime","name":"pageBits.setAll"},{"pkg":"runtime","name":"pageBits.setBlock64"},{"pkg":"runtime","name":"pageBits.setRange"},{"pkg":"runtime","name":"pageCache.alloc"},{"pkg":"runtime","name":"pageCache.allocN"},{"pkg":"runtime","name":"pageCache.empty"},{"pkg":"runtime","name":"pageCache.flush"},{"pkg":"runtime","name":"pageIndexOf"},{"pkg":"runtime","name":"pallocBits.allocAll"},{"pkg":"runtime","name":"pallocBits.allocPages64"},{"pkg":"runtime","name":"pallocBits.allocRange"},{"pkg":"runtime","name":"pallocBits.find"},{"pkg":"runtime","name":"pallocBits.find1"},{"pkg":"runtime","name":"pallocBits.findLargeN"},{"pkg":"runtime","name":"pallocBits.findSmallN"},{"pkg":"runtime","name":"pallocBits.free"},{"pkg":"runtime","name":"pallocBits.free1"},{"pkg":"runtime","name":"pallocBits.freeAll"},{"pkg":"runtime","name":"pallocBits.pages64"},{"pkg":"runtime","name":"pallocBits.summarize"},{"pkg":"runtime","name":"pallocData.allocAll"},{"pkg":"runtime","name":"pallocData.allocRange"},{"pkg":"runtime","name":"pallocData.findScavengeCandidate"},{"pkg":"runtime","name":"pallocSum.end"},{"pkg":"runtime","name":"pallocSum.max"},{"pkg":"runtime","name":"pallocSum.start"},{"pkg":"runtime","name":"pallocSum.unpack"},{"pkg":"runtime","name":"panicCheck1"},{"pkg":"runtime","name":"panicCheck2"},{"pkg":"runtime","name":"panicIndex"},{"pkg":"runtime","name":"panicIndexU"},{"pkg":"runtime","name":"panicSlice3Alen"},{"pkg":"runtime","name":"panicSlice3AlenU"},{"pkg":"runtime","name":"panicSlice3C"},{"pkg":"runtime","name":"panicSliceAcap"},{"pkg":"runtime","name":"panicSliceAcapU"},{"pkg":"runtime","name":"panicSliceAlen"},{"pkg":"runtime","name":"panicSliceAlenU"},{"pkg":"runtime","name":"panicSliceB"},{"pkg":"runtime","name":"panicSliceBU"},{"pkg":"runtime","name":"panicdivide"},{"pkg":"runtime","name":"panicdottypeE"},{"pkg":"runtime","name":"panicdottypeI"},{"pkg":"runtime","name":"panicfloat"},{"pkg":"runtime","name":"panicmakeslicecap"},{"pkg":"runtime","name":"panicmakeslicelen"},{"pkg":"runtime","name":"panicmem"},{"pkg":"runtime","name":"panicmemAddr"},{"pkg":"runtime","name":"panicoverflow"},{"pkg":"runtime","name":"panicshift"},{"pkg":"runtime","name":"panicunsafeslicelen"},{"pkg":"runtime","name":"panicunsafeslicenilptr"},{"pkg":"runtime","name":"panicunsafestringlen"},{"pkg":"runtime","name":"panicunsafestringnilptr"},{"pkg":"runtime","name":"panicwrap"},{"pkg":"runtime","name":"park_m"},{"pkg":"runtime","name":"parkunlock_c"},{"pkg":"runtime","name":"parseByteCount"},{"pkg":"runtime","name":"parsedebugvars"},{"pkg":"runtime","name":"pcdatastart"},{"pkg":"runtime","name":"pcdatavalue"},{"pkg":"runtime","name":"pcdatavalue1"},{"pkg":"runtime","name":"pcdatavalue2"},{"pkg":"runtime","name":"pcvalue"},{"pkg":"runtime","name":"pcvalueCacheKey"},{"pkg":"runtime","name":"persistentalloc"},{"pkg":"runtime","name":"persistentalloc.func1"},{"pkg":"runtime","name":"persistentalloc1"},{"pkg":"runtime","name":"piController.next"},{"pkg":"runtime","name":"piController.reset"},{"pkg":"runtime","name":"pidleget"},{"pkg":"runtime","name":"pidlegetSpinning"},{"pkg":"runtime","name":"pidleput"},{"pkg":"runtime","name":"pipe2"},{"pkg":"runtime","name":"plainError.Error"},{"pkg":"runtime","name":"pollCache.alloc"},{"pkg":"runtime","name":"pollCache.free"},{"pkg":"runtime","name":"pollDesc.info"},{"pkg":"runtime","name":"pollDesc.publishInfo"},{"pkg":"runtime","name":"pollDesc.setEventErr"},{"pkg":"runtime","name":"pollFractionalWorkerExit"},{"pkg":"runtime","name":"pollInfo.closing"},{"pkg":"runtime","name":"pollInfo.eventErr"},{"pkg":"runtime","name":"pollInfo.expiredReadDeadline"},{"pkg":"runtime","name":"pollInfo.expiredWriteDeadline"},{"pkg":"runtime","name":"pollWork"},{"pkg":"runtime","name":"preemptM"},{"pkg":"runtime","name":"preemptPark"},{"pkg":"runtime","name":"preemptall"},{"pkg":"runtime","name":"preemptone"},{"pkg":"runtime","name":"prepareFreeWorkbufs"},{"pkg":"runtime","name":"preprintpanics"},{"pkg":"runtime","name":"preprintpanics.func1"},{"pkg":"runtime","name":"printAncestorTraceback"},{"pkg":"runtime","name":"printAncestorTracebackFuncInfo"},{"pkg":"runtime","name":"printArgs"},{"pkg":"runtime","name":"printArgs.func1"},{"pkg":"runtime","name":"printArgs.func2"},{"pkg":"runtime","name":"printArgs.func3"},{"pkg":"runtime","name":"printCgoTraceback"},{"pkg":"runtime","name":"printOneCgoTraceback"},{"pkg":"runtime","name":"printScavTrace"},{"pkg":"runtime","name":"printany"},{"pkg":"runtime","name":"printanycustomtype"},{"pkg":"runtime","name":"printbool"},{"pkg":"runtime","name":"printcomplex"},{"pkg":"runtime","name":"printcreatedby"},{"pkg":"runtime","name":"printcreatedby1"},{"pkg":"runtime","name":"printfloat"},{"pkg":"runtime","name":"printhex"},{"pkg":"runtime","name":"printint"},{"pkg":"runtime","name":"printlock"},{"pkg":"runtime","name":"printnl"},{"pkg":"runtime","name":"printpanics"},{"pkg":"runtime","name":"printpointer"},{"pkg":"runtime","name":"printslice"},{"pkg":"runtime","name":"printsp"},{"pkg":"runtime","name":"printstring"},{"pkg":"runtime","name":"printuint"},{"pkg":"runtime","name":"printuintptr"},{"pkg":"runtime","name":"printunlock"},{"pkg":"runtime","name":"procPin"},{"pkg":"runtime","name":"procUnpin"},{"pkg":"runtime","name":"procresize"},{"pkg":"runtime","name":"procyield"},{"pkg":"runtime","name":"profAtomic.cas"},{"pkg":"runtime","name":"profAtomic.load"},{"pkg":"runtime","name":"profBuf.canWriteRecord"},{"pkg":"runtime","name":"profBuf.canWriteTwoRecords"},{"pkg":"runtime","name":"profBuf.hasOverflow"},{"pkg":"runtime","name":"profBuf.incrementOverflow"},{"pkg":"runtime","name":"profBuf.takeOverflow"},{"pkg":"runtime","name":"profBuf.wakeupExtra"},{"pkg":"runtime","name":"profBuf.write"},{"pkg":"runtime","name":"profIndex.addCountsAndClearFlags"},{"pkg":"runtime","name":"profIndex.tagCount"},{"pkg":"runtime","name":"profilealloc"},{"pkg":"runtime","name":"progToPointerMask"},{"pkg":"runtime","name":"publicationBarrier"},{"pkg":"runtime","name":"puintptr.ptr"},{"pkg":"runtime","name":"puintptr.set"},{"pkg":"runtime","name":"putempty"},{"pkg":"runtime","name":"putfull"},{"pkg":"runtime","name":"queuefinalizer"},{"pkg":"runtime","name":"r4"},{"pkg":"runtime","name":"r8"},{"pkg":"runtime","name":"raise"},{"pkg":"runtime","name":"raisebadsignal"},{"pkg":"runtime","name":"raiseproc"},{"pkg":"runtime","name":"randomEnum.done"},{"pkg":"runtime","name":"randomEnum.next"},{"pkg":"runtime","name":"randomEnum.position"},{"pkg":"runtime","name":"randomOrder.reset"},{"pkg":"runtime","name":"randomOrder.start"},{"pkg":"runtime","name":"rawbyteslice"},{"pkg":"runtime","name":"rawruneslice"},{"pkg":"runtime","name":"rawstring"},{"pkg":"runtime","name":"rawstringtmp"},{"pkg":"runtime","name":"read"},{"pkg":"runtime","name":"readGOGC"},{"pkg":"runtime","name":"readGOMEMLIMIT"},{"pkg":"runtime","name":"readUintptr"},{"pkg":"runtime","name":"readUnaligned32"},{"pkg":"runtime","name":"readUnaligned64"},{"pkg":"runtime","name":"readgstatus"},{"pkg":"runtime","name":"readvarint"},{"pkg":"runtime","name":"readvarintUnsafe"},{"pkg":"runtime","name":"ready"},{"pkg":"runtime","name":"readyWithTime"},{"pkg":"runtime","name":"recordForPanic"},{"pkg":"runtime","name":"recordspan"},{"pkg":"runtime","name":"recovery"},{"pkg":"runtime","name":"recv"},{"pkg":"runtime","name":"recvDirect"},{"pkg":"runtime","name":"reentersyscall"},{"pkg":"runtime","name":"reentersyscall.func1"},{"pkg":"runtime","name":"reflectOffsLock"},{"pkg":"runtime","name":"reflectOffsUnlock"},{"pkg":"runtime","name":"reflectcall"},{"pkg":"runtime","name":"reflectcallmove"},{"pkg":"runtime","name":"releaseSudog"},{"pkg":"runtime","name":"releasem"},{"pkg":"runtime","name":"releasep"},{"pkg":"runtime","name":"removefinalizer"},{"pkg":"runtime","name":"removespecial"},{"pkg":"runtime","name":"resetspinning"},{"pkg":"runtime","name":"resettimer"},{"pkg":"runtime","name":"resolveNameOff"},{"pkg":"runtime","name":"resolveTypeOff"},{"pkg":"runtime","name":"restoreGsignalStack"},{"pkg":"runtime","name":"resumeG"},{"pkg":"runtime","name":"retake"},{"pkg":"runtime","name":"retryOnEAGAIN"},{"pkg":"runtime","name":"return0"},{"pkg":"runtime","name":"round2"},{"pkg":"runtime","name":"roundupsize"},{"pkg":"runtime","name":"rt0_go"},{"pkg":"runtime","name":"rt_sigaction"},{"pkg":"runtime","name":"rtsigprocmask"},{"pkg":"runtime","name":"runExitHooks"},{"pkg":"runtime","name":"runExitHooks.func1"},{"pkg":"runtime","name":"runExitHooks.func1.1"},{"pkg":"runtime","name":"runGCProg"},{"pkg":"runtime","name":"runOneTimer"},{"pkg":"runtime","name":"runOpenDeferFrame"},{"pkg":"runtime","name":"runPerThreadSyscall"},{"pkg":"runtime","name":"runSafePointFn"},{"pkg":"runtime","name":"runfinq"},{"pkg":"runtime","name":"runqdrain"},{"pkg":"runtime","name":"runqempty"},{"pkg":"runtime","name":"runqget"},{"pkg":"runtime","name":"runqgrab"},{"pkg":"runtime","name":"runqput"},{"pkg":"runtime","name":"runqputbatch"},{"pkg":"runtime","name":"runqputslow"},{"pkg":"runtime","name":"runqsteal"},{"pkg":"runtime","name":"runtimer"},{"pkg":"runtime","name":"rwmutex).rlock.func1"},{"pkg":"runtime","name":"rwmutex.rlock"},{"pkg":"runtime","name":"rwmutex.runlock"},{"pkg":"runtime","name":"save"},{"pkg":"runtime","name":"saveAncestors"},{"pkg":"runtime","name":"saveblockevent"},{"pkg":"runtime","name":"saveg"},{"pkg":"runtime","name":"scanConservative"},{"pkg":"runtime","name":"scanblock"},{"pkg":"runtime","name":"scanframeworker"},{"pkg":"runtime","name":"scanobject"},{"pkg":"runtime","name":"scanstack"},{"pkg":"runtime","name":"scanstack.func1"},{"pkg":"runtime","name":"scavengeIndex.clear"},{"pkg":"runtime","name":"scavengeIndex.find"},{"pkg":"runtime","name":"scavengeIndex.grow"},{"pkg":"runtime","name":"scavengeIndex.mark"},{"pkg":"runtime","name":"scavengerState).init.func1"},{"pkg":"runtime","name":"scavengerState).init.func2"},{"pkg":"runtime","name":"scavengerState).init.func3"},{"pkg":"runtime","name":"scavengerState).init.func4"},{"pkg":"runtime","name":"scavengerState.controllerFailed"},{"pkg":"runtime","name":"scavengerState.init"},{"pkg":"runtime","name":"scavengerState.park"},{"pkg":"runtime","name":"scavengerState.ready"},{"pkg":"runtime","name":"scavengerState.run"},{"pkg":"runtime","name":"scavengerState.sleep"},{"pkg":"runtime","name":"scavengerState.wake"},{"pkg":"runtime","name":"schedEnableUser"},{"pkg":"runtime","name":"schedEnabled"},{"pkg":"runtime","name":"sched_getaffinity"},{"pkg":"runtime","name":"schedinit"},{"pkg":"runtime","name":"schedtrace"},{"pkg":"runtime","name":"schedtrace.func1"},{"pkg":"runtime","name":"schedule"},{"pkg":"runtime","name":"semTable.rootFor"},{"pkg":"runtime","name":"semaRoot.dequeue"},{"pkg":"runtime","name":"semaRoot.queue"},{"pkg":"runtime","name":"semaRoot.rotateLeft"},{"pkg":"runtime","name":"semaRoot.rotateRight"},{"pkg":"runtime","name":"semacquire"},{"pkg":"runtime","name":"semacquire1"},{"pkg":"runtime","name":"semrelease"},{"pkg":"runtime","name":"semrelease1"},{"pkg":"runtime","name":"send"},{"pkg":"runtime","name":"sendDirect"},{"pkg":"runtime","name":"setCheckmark"},{"pkg":"runtime","name":"setGCPhase"},{"pkg":"runtime","name":"setGNoWB"},{"pkg":"runtime","name":"setGsignalStack"},{"pkg":"runtime","name":"setMNoWB"},{"pkg":"runtime","name":"setSignalstackSP"},{"pkg":"runtime","name":"setThreadCPUProfiler"},{"pkg":"runtime","name":"setg"},{"pkg":"runtime","name":"setprofilebucket"},{"pkg":"runtime","name":"setsig"},{"pkg":"runtime","name":"setsigstack"},{"pkg":"runtime","name":"settls"},{"pkg":"runtime","name":"shade"},{"pkg":"runtime","name":"shouldPushSigpanic"},{"pkg":"runtime","name":"showframe"},{"pkg":"runtime","name":"showfuncinfo"},{"pkg":"runtime","name":"shrinkstack"},{"pkg":"runtime","name":"siftdownTimer"},{"pkg":"runtime","name":"siftupTimer"},{"pkg":"runtime","name":"sigFetchG"},{"pkg":"runtime","name":"sigInitIgnored"},{"pkg":"runtime","name":"sigInstallGoHandler"},{"pkg":"runtime","name":"sigNotOnStack"},{"pkg":"runtime","name":"sigaction"},{"pkg":"runtime","name":"sigaction.func1"},{"pkg":"runtime","name":"sigaddset"},{"pkg":"runtime","name":"sigaltstack"},{"pkg":"runtime","name":"sigblock"},{"pkg":"runtime","name":"sigctxt.cs"},{"pkg":"runtime","name":"sigctxt.fault"},{"pkg":"runtime","name":"sigctxt.fs"},{"pkg":"runtime","name":"sigctxt.gs"},{"pkg":"runtime","name":"sigctxt.preparePanic"},{"pkg":"runtime","name":"sigctxt.pushCall"},{"pkg":"runtime","name":"sigctxt.r10"},{"pkg":"runtime","name":"sigctxt.r11"},{"pkg":"runtime","name":"sigctxt.r12"},{"pkg":"runtime","name":"sigctxt.r13"},{"pkg":"runtime","name":"sigctxt.r14"},{"pkg":"runtime","name":"sigctxt.r15"},{"pkg":"runtime","name":"sigctxt.r8"},{"pkg":"runtime","name":"sigctxt.r9"},{"pkg":"runtime","name":"sigctxt.rax"},{"pkg":"runtime","name":"sigctxt.rbp"},{"pkg":"runtime","name":"sigctxt.rbx"},{"pkg":"runtime","name":"sigctxt.rcx"},{"pkg":"runtime","name":"sigctxt.rdi"},{"pkg":"runtime","name":"sigctxt.rdx"},{"pkg":"runtime","name":"sigctxt.regs"},{"pkg":"runtime","name":"sigctxt.rflags"},{"pkg":"runtime","name":"sigctxt.rip"},{"pkg":"runtime","name":"sigctxt.rsi"},{"pkg":"runtime","name":"sigctxt.rsp"},{"pkg":"runtime","name":"sigctxt.set_rip"},{"pkg":"runtime","name":"sigctxt.set_rsp"},{"pkg":"runtime","name":"sigctxt.sigFromUser"},{"pkg":"runtime","name":"sigctxt.sigaddr"},{"pkg":"runtime","name":"sigctxt.sigcode"},{"pkg":"runtime","name":"sigctxt.sigpc"},{"pkg":"runtime","name":"sigctxt.sigsp"},{"pkg":"runtime","name":"sigdelset"},{"pkg":"runtime","name":"sigfillset"},{"pkg":"runtime","name":"sigfwd"},{"pkg":"runtime","name":"sigfwdgo"},{"pkg":"runtime","name":"sighandler"},{"pkg":"runtime","name":"signalDuringFork"},{"pkg":"runtime","name":"signalM"},{"pkg":"runtime","name":"signalstack"},{"pkg":"runtime","name":"signame"},{"pkg":"runtime","name":"sigpanic"},{"pkg":"runtime","name":"sigpanic0"},{"pkg":"runtime","name":"sigpipe"},{"pkg":"runtime","name":"sigprocmask"},{"pkg":"runtime","name":"sigprof"},{"pkg":"runtime","name":"sigprofNonGo"},{"pkg":"runtime","name":"sigprofNonGoPC"},{"pkg":"runtime","name":"sigprofNonGoWrapper"},{"pkg":"runtime","name":"sigreturn"},{"pkg":"runtime","name":"sigsave"},{"pkg":"runtime","name":"sigsend"},{"pkg":"runtime","name":"sigtramp"},{"pkg":"runtime","name":"sigtrampgo"},{"pkg":"runtime","name":"slicebytetostring"},{"pkg":"runtime","name":"slicecopy"},{"pkg":"runtime","name":"slicerunetostring"},{"pkg":"runtime","name":"spanAllocType.manual"},{"pkg":"runtime","name":"spanClass.noscan"},{"pkg":"runtime","name":"spanClass.sizeclass"},{"pkg":"runtime","name":"spanHasNoSpecials"},{"pkg":"runtime","name":"spanHasSpecials"},{"pkg":"runtime","name":"spanOf"},{"pkg":"runtime","name":"spanOfHeap"},{"pkg":"runtime","name":"spanOfUnchecked"},{"pkg":"runtime","name":"spanSet.pop"},{"pkg":"runtime","name":"spanSet.push"},{"pkg":"runtime","name":"spanSet.reset"},{"pkg":"runtime","name":"spanSetBlockAlloc.alloc"},{"pkg":"runtime","name":"spanSetBlockAlloc.free"},{"pkg":"runtime","name":"specialsIter.next"},{"pkg":"runtime","name":"specialsIter.unlinkAndNext"},{"pkg":"runtime","name":"specialsIter.valid"},{"pkg":"runtime","name":"spillArgs"},{"pkg":"runtime","name":"stackObject.setRecord"},{"pkg":"runtime","name":"stackObjectRecord.gcdata"},{"pkg":"runtime","name":"stackObjectRecord.ptrdata"},{"pkg":"runtime","name":"stackObjectRecord.useGCProg"},{"pkg":"runtime","name":"stackScanState.addObject"},{"pkg":"runtime","name":"stackScanState.buildIndex"},{"pkg":"runtime","name":"stackScanState.findObject"},{"pkg":"runtime","name":"stackScanState.getPtr"},{"pkg":"runtime","name":"stackScanState.putPtr"},{"pkg":"runtime","name":"stackalloc"},{"pkg":"runtime","name":"stackcache_clear"},{"pkg":"runtime","name":"stackcacherefill"},{"pkg":"runtime","name":"stackcacherelease"},{"pkg":"runtime","name":"stackcheck"},{"pkg":"runtime","name":"stackfree"},{"pkg":"runtime","name":"stackinit"},{"pkg":"runtime","name":"stacklog2"},{"pkg":"runtime","name":"stackmapdata"},{"pkg":"runtime","name":"stackpoolalloc"},{"pkg":"runtime","name":"stackpoolfree"},{"pkg":"runtime","name":"startCheckmarks"},{"pkg":"runtime","name":"startPCforTrace"},{"pkg":"runtime","name":"startTemplateThread"},{"pkg":"runtime","name":"startTheWorld"},{"pkg":"runtime","name":"startTheWorld.func1"},{"pkg":"runtime","name":"startTheWorldGC"},{"pkg":"runtime","name":"startTheWorldWithSema"},{"pkg":"runtime","name":"startlockedm"},{"pkg":"runtime","name":"startm"},{"pkg":"runtime","name":"startpanic_m"},{"pkg":"runtime","name":"stealWork"},{"pkg":"runtime","name":"step"},{"pkg":"runtime","name":"stkbucket"},{"pkg":"runtime","name":"stkframe.argBytes"},{"pkg":"runtime","name":"stkframe.argMapInternal"},{"pkg":"runtime","name":"stkframe.getStackMap"},{"pkg":"runtime","name":"stkobjinit"},{"pkg":"runtime","name":"stopTheWorld"},{"pkg":"runtime","name":"stopTheWorld.func1"},{"pkg":"runtime","name":"stopTheWorldGC"},{"pkg":"runtime","name":"stopTheWorldWithSema"},{"pkg":"runtime","name":"stoplockedm"},{"pkg":"runtime","name":"stopm"},{"pkg":"runtime","name":"strequal"},{"pkg":"runtime","name":"strhash"},{"pkg":"runtime","name":"strhashFallback"},{"pkg":"runtime","name":"stringDataOnStack"},{"pkg":"runtime","name":"stringtoslicebyte"},{"pkg":"runtime","name":"stringtoslicerune"},{"pkg":"runtime","name":"subtract1"},{"pkg":"runtime","name":"subtractb"},{"pkg":"runtime","name":"suspendG"},{"pkg":"runtime","name":"sweepClass.clear"},{"pkg":"runtime","name":"sweepClass.load"},{"pkg":"runtime","name":"sweepClass.split"},{"pkg":"runtime","name":"sweepClass.update"},{"pkg":"runtime","name":"sweepLocked).sweep.func1"},{"pkg":"runtime","name":"sweepLocked.sweep"},{"pkg":"runtime","name":"sweepLocker.tryAcquire"},{"pkg":"runtime","name":"sweepone"},{"pkg":"runtime","name":"sweepone.func1"},{"pkg":"runtime","name":"syncadjustsudogs"},{"pkg":"runtime","name":"sysAlloc"},{"pkg":"runtime","name":"sysAllocOS"},{"pkg":"runtime","name":"sysFault"},{"pkg":"runtime","name":"sysFaultOS"},{"pkg":"runtime","name":"sysFree"},{"pkg":"runtime","name":"sysFreeOS"},{"pkg":"runtime","name":"sysHugePageOS"},{"pkg":"runtime","name":"sysMap"},{"pkg":"runtime","name":"sysMapOS"},{"pkg":"runtime","name":"sysMemStat.add"},{"pkg":"runtime","name":"sysMemStat.load"},{"pkg":"runtime","name":"sysMmap"},{"pkg":"runtime","name":"sysMunmap"},{"pkg":"runtime","name":"sysReserve"},{"pkg":"runtime","name":"sysReserveAligned"},{"pkg":"runtime","name":"sysReserveOS"},{"pkg":"runtime","name":"sysSigaction"},{"pkg":"runtime","name":"sysSigaction.func1"},{"pkg":"runtime","name":"sysUnused"},{"pkg":"runtime","name":"sysUnusedOS"},{"pkg":"runtime","name":"sysUsed"},{"pkg":"runtime","name":"sysUsedOS"},{"pkg":"runtime","name":"sysargs"},{"pkg":"runtime","name":"sysauxv"},{"pkg":"runtime","name":"sysmon"},{"pkg":"runtime","name":"systemstack"},{"pkg":"runtime","name":"systemstack_switch"},{"pkg":"runtime","name":"templateThread"},{"pkg":"runtime","name":"testAtomic64"},{"pkg":"runtime","name":"tgkill"},{"pkg":"runtime","name":"throw"},{"pkg":"runtime","name":"throw.func1"},{"pkg":"runtime","name":"timeHistogram.record"},{"pkg":"runtime","name":"timeSleepUntil"},{"pkg":"runtime","name":"timediv"},{"pkg":"runtime","name":"timer_create"},{"pkg":"runtime","name":"timer_delete"},{"pkg":"runtime","name":"timer_settime"},{"pkg":"runtime","name":"timespec.setNsec"},{"pkg":"runtime","name":"tooManyOverflowBuckets"},{"pkg":"runtime","name":"tophash"},{"pkg":"runtime","name":"traceAcquireBuffer"},{"pkg":"runtime","name":"traceAlloc.alloc"},{"pkg":"runtime","name":"traceAllocBlockPtr.set"},{"pkg":"runtime","name":"traceBuf.byte"},{"pkg":"runtime","name":"traceBuf.varint"},{"pkg":"runtime","name":"traceBufPtr.ptr"},{"pkg":"runtime","name":"traceBufPtr.set"},{"pkg":"runtime","name":"traceCPUSample"},{"pkg":"runtime","name":"traceEvent"},{"pkg":"runtime","name":"traceEventLocked"},{"pkg":"runtime","name":"traceEventLocked.func1"},{"pkg":"runtime","name":"traceFlush"},{"pkg":"runtime","name":"traceFullQueue"},{"pkg":"runtime","name":"traceGCDone"},{"pkg":"runtime","name":"traceGCMarkAssistDone"},{"pkg":"runtime","name":"traceGCMarkAssistStart"},{"pkg":"runtime","name":"traceGCSTWDone"},{"pkg":"runtime","name":"traceGCSTWStart"},{"pkg":"runtime","name":"traceGCStart"},{"pkg":"runtime","name":"traceGCSweepDone"},{"pkg":"runtime","name":"traceGCSweepSpan"},{"pkg":"runtime","name":"traceGCSweepStart"},{"pkg":"runtime","name":"traceGoCreate"},{"pkg":"runtime","name":"traceGoEnd"},{"pkg":"runtime","name":"traceGoPark"},{"pkg":"runtime","name":"traceGoPreempt"},{"pkg":"runtime","name":"traceGoSched"},{"pkg":"runtime","name":"traceGoStart"},{"pkg":"runtime","name":"traceGoSysBlock"},{"pkg":"runtime","name":"traceGoSysCall"},{"pkg":"runtime","name":"traceGoSysExit"},{"pkg":"runtime","name":"traceGoUnpark"},{"pkg":"runtime","name":"traceGomaxprocs"},{"pkg":"runtime","name":"traceHeapAlloc"},{"pkg":"runtime","name":"traceHeapGoal"},{"pkg":"runtime","name":"traceProcFree"},{"pkg":"runtime","name":"traceProcStart"},{"pkg":"runtime","name":"traceProcStop"},{"pkg":"runtime","name":"traceReader"},{"pkg":"runtime","name":"traceReaderAvailable"},{"pkg":"runtime","name":"traceReleaseBuffer"},{"pkg":"runtime","name":"traceStack.stack"},{"pkg":"runtime","name":"traceStackID"},{"pkg":"runtime","name":"traceStackTable).put.func1"},{"pkg":"runtime","name":"traceStackTable.find"},{"pkg":"runtime","name":"traceStackTable.newStack"},{"pkg":"runtime","name":"traceStackTable.put"},{"pkg":"runtime","name":"tracealloc"},{"pkg":"runtime","name":"tracealloc.func1"},{"pkg":"runtime","name":"traceback"},{"pkg":"runtime","name":"traceback1"},{"pkg":"runtime","name":"tracebackCgoContext"},{"pkg":"runtime","name":"tracebackHexdump"},{"pkg":"runtime","name":"tracebackHexdump.func1"},{"pkg":"runtime","name":"tracebackothers"},{"pkg":"runtime","name":"tracebackothers.func1"},{"pkg":"runtime","name":"tracebacktrap"},{"pkg":"runtime","name":"tracefree"},{"pkg":"runtime","name":"tracefree.func1"},{"pkg":"runtime","name":"tracegc"},{"pkg":"runtime","name":"tryRecordGoroutineProfile"},{"pkg":"runtime","name":"tryRecordGoroutineProfileWB"},{"pkg":"runtime","name":"trygetfull"},{"pkg":"runtime","name":"typeBitsBulkBarrier"},{"pkg":"runtime","name":"typedmemclr"},{"pkg":"runtime","name":"typedmemmove"},{"pkg":"runtime","name":"typedslicecopy"},{"pkg":"runtime","name":"typehash"},{"pkg":"runtime","name":"typelinksinit"},{"pkg":"runtime","name":"typesEqual"},{"pkg":"runtime","name":"unblocksig"},{"pkg":"runtime","name":"unlock"},{"pkg":"runtime","name":"unlock2"},{"pkg":"runtime","name":"unlockOSThread"},{"pkg":"runtime","name":"unlockWithRank"},{"pkg":"runtime","name":"unlockextra"},{"pkg":"runtime","name":"unminit"},{"pkg":"runtime","name":"unminitSignals"},{"pkg":"runtime","name":"unreachableMethod"},{"pkg":"runtime","name":"unspillArgs"},{"pkg":"runtime","name":"updateTimer0When"},{"pkg":"runtime","name":"updateTimerModifiedEarliest"},{"pkg":"runtime","name":"updateTimerPMask"},{"pkg":"runtime","name":"usleep"},{"pkg":"runtime","name":"usleep_no_g"},{"pkg":"runtime","name":"validSIGPROF"},{"pkg":"runtime","name":"vdsoFindVersion"},{"pkg":"runtime","name":"vdsoInitFromSysinfoEhdr"},{"pkg":"runtime","name":"vdsoParseSymbols"},{"pkg":"runtime","name":"vdsoParseSymbols.func1"},{"pkg":"runtime","name":"vdsoauxv"},{"pkg":"runtime","name":"waitReason.String"},{"pkg":"runtime","name":"waitReason.isMutexWait"},{"pkg":"runtime","name":"waitq.dequeue"},{"pkg":"runtime","name":"waitq.enqueue"},{"pkg":"runtime","name":"wakeNetPoller"},{"pkg":"runtime","name":"wakefing"},{"pkg":"runtime","name":"wakep"},{"pkg":"runtime","name":"wantAsyncPreempt"},{"pkg":"runtime","name":"wbBuf.discard"},{"pkg":"runtime","name":"wbBuf.putFast"},{"pkg":"runtime","name":"wbBuf.reset"},{"pkg":"runtime","name":"wbBufFlush"},{"pkg":"runtime","name":"wbBufFlush.func1"},{"pkg":"runtime","name":"wbBufFlush1"},{"pkg":"runtime","name":"wirep"},{"pkg":"runtime","name":"workbuf.checkempty"},{"pkg":"runtime","name":"workbuf.checknonempty"},{"pkg":"runtime","name":"write"},{"pkg":"runtime","name":"write1"},{"pkg":"runtime","name":"writeErr"},{"pkg":"runtime","name":"writeErrStr"},{"pkg":"runtime","name":"writeHeapBits.flush"},{"pkg":"runtime","name":"writeHeapBits.pad"},{"pkg":"runtime","name":"writeHeapBits.write"},{"pkg":"runtime","name":"writeHeapBitsForAddr"},{"pkg":"runtime/debug","name":"SetTraceback"},{"pkg":"runtime/internal/atomic","name":"Bool.Load"},{"pkg":"runtime/internal/atomic","name":"Bool.Store"},{"pkg":"runtime/internal/atomic","name":"Float64.Load"},{"pkg":"runtime/internal/atomic","name":"Float64.Store"},{"pkg":"runtime/internal/atomic","name":"Int32.Add"},{"pkg":"runtime/internal/atomic","name":"Int32.CompareAndSwap"},{"pkg":"runtime/internal/atomic","name":"Int32.Load"},{"pkg":"runtime/internal/atomic","name":"Int32.Store"},{"pkg":"runtime/internal/atomic","name":"Int64.Add"},{"pkg":"runtime/internal/atomic","name":"Int64.CompareAndSwap"},{"pkg":"runtime/internal/atomic","name":"Int64.Load"},{"pkg":"runtime/internal/atomic","name":"Int64.Store"},{"pkg":"runtime/internal/atomic","name":"Int64.Swap"},{"pkg":"runtime/internal/atomic","name":"Pointer[...].CompareAndSwapNoWB"},{"pkg":"runtime/internal/atomic","name":"Pointer[...].Load"},{"pkg":"runtime/internal/atomic","name":"Pointer[...].StoreNoWB"},{"pkg":"runtime/internal/atomic","name":"Uint32.Add"},{"pkg":"runtime/internal/atomic","name":"Uint32.And"},{"pkg":"runtime/internal/atomic","name":"Uint32.CompareAndSwap"},{"pkg":"runtime/internal/atomic","name":"Uint32.Load"},{"pkg":"runtime/internal/atomic","name":"Uint32.Or"},{"pkg":"runtime/internal/atomic","name":"Uint32.Store"},{"pkg":"runtime/internal/atomic","name":"Uint32.Swap"},{"pkg":"runtime/internal/atomic","name":"Uint64.Add"},{"pkg":"runtime/internal/atomic","name":"Uint64.CompareAndSwap"},{"pkg":"runtime/internal/atomic","name":"Uint64.Load"},{"pkg":"runtime/internal/atomic","name":"Uint64.Store"},{"pkg":"runtime/internal/atomic","name":"Uint8.And"},{"pkg":"runtime/internal/atomic","name":"Uint8.Load"},{"pkg":"runtime/internal/atomic","name":"Uint8.Or"},{"pkg":"runtime/internal/atomic","name":"Uint8.Store"},{"pkg":"runtime/internal/atomic","name":"Uintptr.Add"},{"pkg":"runtime/internal/atomic","name":"Uintptr.CompareAndSwap"},{"pkg":"runtime/internal/atomic","name":"Uintptr.Load"},{"pkg":"runtime/internal/atomic","name":"Uintptr.Store"},{"pkg":"runtime/internal/atomic","name":"Uintptr.Swap"},{"pkg":"runtime/internal/atomic","name":"UnsafePointer.CompareAndSwapNoWB"},{"pkg":"runtime/internal/atomic","name":"UnsafePointer.Load"},{"pkg":"runtime/internal/atomic","name":"UnsafePointer.StoreNoWB"},{"pkg":"runtime/internal/sys","name":"LeadingZeros64"},{"pkg":"runtime/internal/sys","name":"LeadingZeros8"},{"pkg":"runtime/internal/sys","name":"OnesCount64"},{"pkg":"runtime/internal/syscall","name":"EpollCreate1"},{"pkg":"runtime/internal/syscall","name":"EpollCtl"},{"pkg":"runtime/internal/syscall","name":"EpollWait"},{"pkg":"runtime/internal/syscall","name":"Syscall6"},{"pkg":"sort","name":"IntSlice.Len"},{"pkg":"sort","name":"IntSlice.Less"},{"pkg":"sort","name":"IntSlice.Swap"},{"pkg":"sort","name":"Ints"},{"pkg":"sort","name":"Search"},{"pkg":"sort","name":"Slice"},{"pkg":"sort","name":"Sort"},{"pkg":"sort","name":"Stable"},{"pkg":"sort","name":"breakPatterns"},{"pkg":"sort","name":"breakPatterns_func"},{"pkg":"sort","name":"choosePivot"},{"pkg":"sort","name":"choosePivot_func"},{"pkg":"sort","name":"heapSort"},{"pkg":"sort","name":"heapSort_func"},{"pkg":"sort","name":"insertionSort"},{"pkg":"sort","name":"insertionSort_func"},{"pkg":"sort","name":"median"},{"pkg":"sort","name":"medianAdjacent"},{"pkg":"sort","name":"medianAdjacent_func"},{"pkg":"sort","name":"median_func"},{"pkg":"sort","name":"nextPowerOfTwo"},{"pkg":"sort","name":"order2"},{"pkg":"sort","name":"order2_func"},{"pkg":"sort","name":"partialInsertionSort"},{"pkg":"sort","name":"partialInsertionSort_func"},{"pkg":"sort","name":"partition"},{"pkg":"sort","name":"partitionEqual"},{"pkg":"sort","name":"partitionEqual_func"},{"pkg":"sort","name":"partition_func"},{"pkg":"sort","name":"pdqsort"},{"pkg":"sort","name":"pdqsort_func"},{"pkg":"sort","name":"reverseRange"},{"pkg":"sort","name":"reverseRange_func"},{"pkg":"sort","name":"rotate"},{"pkg":"sort","name":"siftDown"},{"pkg":"sort","name":"siftDown_func"},{"pkg":"sort","name":"stable"},{"pkg":"sort","name":"swapRange"},{"pkg":"sort","name":"symMerge"},{"pkg":"sort","name":"xorshift.Next"},{"pkg":"strconv","name":"AppendFloat"},{"pkg":"strconv","name":"AppendInt"},{"pkg":"strconv","name":"AppendQuote"},{"pkg":"strconv","name":"AppendQuoteRune"},{"pkg":"strconv","name":"AppendQuoteRuneToASCII"},{"pkg":"strconv","name":"AppendQuoteToASCII"},{"pkg":"strconv","name":"AppendUint"},{"pkg":"strconv","name":"CanBackquote"},{"pkg":"strconv","name":"FormatFloat"},{"pkg":"strconv","name":"FormatInt"},{"pkg":"strconv","name":"FormatUint"},{"pkg":"strconv","name":"IsPrint"},{"pkg":"strconv","name":"Itoa"},{"pkg":"strconv","name":"NumError.Error"},{"pkg":"strconv","name":"ParseBool"},{"pkg":"strconv","name":"ParseFloat"},{"pkg":"strconv","name":"ParseInt"},{"pkg":"strconv","name":"ParseUint"},{"pkg":"strconv","name":"Quote"},{"pkg":"strconv","name":"Unquote"},{"pkg":"strconv","name":"UnquoteChar"},{"pkg":"strconv","name":"appendEscapedRune"},{"pkg":"strconv","name":"appendQuotedRuneWith"},{"pkg":"strconv","name":"appendQuotedWith"},{"pkg":"strconv","name":"atof32"},{"pkg":"strconv","name":"atof32exact"},{"pkg":"strconv","name":"atof64"},{"pkg":"strconv","name":"atof64exact"},{"pkg":"strconv","name":"atofHex"},{"pkg":"strconv","name":"baseError"},{"pkg":"strconv","name":"bigFtoa"},{"pkg":"strconv","name":"bitSizeError"},{"pkg":"strconv","name":"bsearch16"},{"pkg":"strconv","name":"bsearch32"},{"pkg":"strconv","name":"cloneString"},{"pkg":"strconv","name":"commonPrefixLenIgnoreCase"},{"pkg":"strconv","name":"computeBounds"},{"pkg":"strconv","name":"contains"},{"pkg":"strconv","name":"decimal.Assign"},{"pkg":"strconv","name":"decimal.Round"},{"pkg":"strconv","name":"decimal.RoundDown"},{"pkg":"strconv","name":"decimal.RoundUp"},{"pkg":"strconv","name":"decimal.RoundedInteger"},{"pkg":"strconv","name":"decimal.Shift"},{"pkg":"strconv","name":"decimal.floatBits"},{"pkg":"strconv","name":"decimal.set"},{"pkg":"strconv","name":"divisibleByPower5"},{"pkg":"strconv","name":"divmod1e9"},{"pkg":"strconv","name":"eiselLemire32"},{"pkg":"strconv","name":"eiselLemire64"},{"pkg":"strconv","name":"fmtB"},{"pkg":"strconv","name":"fmtE"},{"pkg":"strconv","name":"fmtF"},{"pkg":"strconv","name":"fmtX"},{"pkg":"strconv","name":"formatBits"},{"pkg":"strconv","name":"formatDecimal"},{"pkg":"strconv","name":"formatDigits"},{"pkg":"strconv","name":"genericFtoa"},{"pkg":"strconv","name":"index"},{"pkg":"strconv","name":"init"},{"pkg":"strconv","name":"isInGraphicList"},{"pkg":"strconv","name":"isPowerOfTwo"},{"pkg":"strconv","name":"leftShift"},{"pkg":"strconv","name":"lower"},{"pkg":"strconv","name":"max"},{"pkg":"strconv","name":"min"},{"pkg":"strconv","name":"mulByLog10Log2"},{"pkg":"strconv","name":"mulByLog2Log10"},{"pkg":"strconv","name":"mult128bitPow10"},{"pkg":"strconv","name":"mult64bitPow10"},{"pkg":"strconv","name":"parseFloatPrefix"},{"pkg":"strconv","name":"prefixIsLessThan"},{"pkg":"strconv","name":"quoteWith"},{"pkg":"strconv","name":"rangeError"},{"pkg":"strconv","name":"readFloat"},{"pkg":"strconv","name":"rightShift"},{"pkg":"strconv","name":"roundShortest"},{"pkg":"strconv","name":"ryuDigits"},{"pkg":"strconv","name":"ryuDigits32"},{"pkg":"strconv","name":"ryuFtoaFixed32"},{"pkg":"strconv","name":"ryuFtoaFixed64"},{"pkg":"strconv","name":"ryuFtoaShortest"},{"pkg":"strconv","name":"shouldRoundUp"},{"pkg":"strconv","name":"small"},{"pkg":"strconv","name":"special"},{"pkg":"strconv","name":"syntaxError"},{"pkg":"strconv","name":"trim"},{"pkg":"strconv","name":"underscoreOK"},{"pkg":"strconv","name":"unhex"},{"pkg":"strconv","name":"unquote"},{"pkg":"strings","name":"Builder.Cap"},{"pkg":"strings","name":"Builder.Grow"},{"pkg":"strings","name":"Builder.String"},{"pkg":"strings","name":"Builder.WriteByte"},{"pkg":"strings","name":"Builder.WriteRune"},{"pkg":"strings","name":"Builder.WriteString"},{"pkg":"strings","name":"Builder.copyCheck"},{"pkg":"strings","name":"Builder.grow"},{"pkg":"strings","name":"ContainsRune"},{"pkg":"strings","name":"Cut"},{"pkg":"strings","name":"HasPrefix"},{"pkg":"strings","name":"Index"},{"pkg":"strings","name":"IndexByte"},{"pkg":"strings","name":"IndexRune"},{"pkg":"strings","name":"Join"},{"pkg":"strings","name":"Map"},{"pkg":"strings","name":"ToLower"},{"pkg":"sync","name":"Map.Load"},{"pkg":"sync","name":"Map.LoadOrStore"},{"pkg":"sync","name":"Map.Store"},{"pkg":"sync","name":"Map.Swap"},{"pkg":"sync","name":"Map.dirtyLocked"},{"pkg":"sync","name":"Map.loadReadOnly"},{"pkg":"sync","name":"Map.missLocked"},{"pkg":"sync","name":"Mutex.Lock"},{"pkg":"sync","name":"Mutex.Unlock"},{"pkg":"sync","name":"Mutex.lockSlow"},{"pkg":"sync","name":"Mutex.unlockSlow"},{"pkg":"sync","name":"Once).doSlow.func1"},{"pkg":"sync","name":"Once).doSlow.func2"},{"pkg":"sync","name":"Once.Do"},{"pkg":"sync","name":"Once.doSlow"},{"pkg":"sync","name":"Pool).pinSlow.func1"},{"pkg":"sync","name":"Pool.Get"},{"pkg":"sync","name":"Pool.Put"},{"pkg":"sync","name":"Pool.getSlow"},{"pkg":"sync","name":"Pool.pin"},{"pkg":"sync","name":"Pool.pinSlow"},{"pkg":"sync","name":"WaitGroup.Add"},{"pkg":"sync","name":"WaitGroup.Done"},{"pkg":"sync","name":"WaitGroup.Wait"},{"pkg":"sync","name":"entry.load"},{"pkg":"sync","name":"entry.swapLocked"},{"pkg":"sync","name":"entry.tryExpungeLocked"},{"pkg":"sync","name":"entry.tryLoadOrStore"},{"pkg":"sync","name":"entry.trySwap"},{"pkg":"sync","name":"entry.unexpungeLocked"},{"pkg":"sync","name":"event"},{"pkg":"sync","name":"fatal"},{"pkg":"sync","name":"indexLocal"},{"pkg":"sync","name":"init"},{"pkg":"sync","name":"init.0"},{"pkg":"sync","name":"init.1"},{"pkg":"sync","name":"loadPoolChainElt"},{"pkg":"sync","name":"newEntry"},{"pkg":"sync","name":"poolChain.popHead"},{"pkg":"sync","name":"poolChain.popTail"},{"pkg":"sync","name":"poolChain.pushHead"},{"pkg":"sync","name":"poolCleanup"},{"pkg":"sync","name":"poolDequeue.pack"},{"pkg":"sync","name":"poolDequeue.popHead"},{"pkg":"sync","name":"poolDequeue.popTail"},{"pkg":"sync","name":"poolDequeue.pushHead"},{"pkg":"sync","name":"poolDequeue.unpack"},{"pkg":"sync","name":"runtime_Semacquire"},{"pkg":"sync","name":"runtime_SemacquireMutex"},{"pkg":"sync","name":"runtime_Semrelease"},{"pkg":"sync","name":"runtime_canSpin"},{"pkg":"sync","name":"runtime_doSpin"},{"pkg":"sync","name":"runtime_nanotime"},{"pkg":"sync","name":"runtime_notifyListCheck"},{"pkg":"sync","name":"runtime_procPin"},{"pkg":"sync","name":"runtime_procUnpin"},{"pkg":"sync","name":"runtime_registerPoolCleanup"},{"pkg":"sync","name":"storePoolChainElt"},{"pkg":"sync","name":"throw"},{"pkg":"sync/atomic","name":"CompareAndSwapPointer"},{"pkg":"sync/atomic","name":"CompareAndSwapUintptr"},{"pkg":"sync/atomic","name":"Pointer[...].CompareAndSwap"},{"pkg":"sync/atomic","name":"Pointer[...].Load"},{"pkg":"sync/atomic","name":"Pointer[...].Store"},{"pkg":"sync/atomic","name":"Pointer[...].Swap"},{"pkg":"sync/atomic","name":"StorePointer"},{"pkg":"sync/atomic","name":"StoreUint32"},{"pkg":"sync/atomic","name":"StoreUintptr"},{"pkg":"sync/atomic","name":"SwapPointer"},{"pkg":"sync/atomic","name":"SwapUintptr"},{"pkg":"sync/atomic","name":"Uint64.Add"},{"pkg":"sync/atomic","name":"Uint64.CompareAndSwap"},{"pkg":"sync/atomic","name":"Uint64.Load"},{"pkg":"sync/atomic","name":"Uint64.Store"},{"pkg":"syscall","name":"Close"},{"pkg":"syscall","name":"Errno.Error"},{"pkg":"syscall","name":"Getrlimit"},{"pkg":"syscall","name":"RawSyscall"},{"pkg":"syscall","name":"RawSyscall6"},{"pkg":"syscall","name":"SetNonblock"},{"pkg":"syscall","name":"Setrlimit"},{"pkg":"syscall","name":"Syscall"},{"pkg":"syscall","name":"Syscall6"},{"pkg":"syscall","name":"Write"},{"pkg":"syscall","name":"errnoErr"},{"pkg":"syscall","name":"fcntl"},{"pkg":"syscall","name":"init"},{"pkg":"syscall","name":"mmap"},{"pkg":"syscall","name":"munmap"},{"pkg":"syscall","name":"runtime_envs"},{"pkg":"syscall","name":"write"},{"pkg":"time","name":"init"},{"pkg":"time","name":"now"},{"pkg":"time","name":"resetTimer"},{"pkg":"time","name":"stopTimer"},{"pkg":"unicode","name":"IsDigit"},{"pkg":"unicode","name":"IsLetter"},{"pkg":"unicode","name":"IsSpace"},{"pkg":"unicode","name":"SimpleFold"},{"pkg":"unicode","name":"To"},{"pkg":"unicode","name":"ToLower"},{"pkg":"unicode","name":"ToUpper"},{"pkg":"unicode","name":"init"},{"pkg":"unicode","name":"is16"},{"pkg":"unicode","name":"is32"},{"pkg":"unicode","name":"isExcludingLatin"},{"pkg":"unicode","name":"to"},{"pkg":"unicode/utf16","name":"DecodeRune"},{"pkg":"unicode/utf16","name":"IsSurrogate"},{"pkg":"unicode/utf8","name":"AppendRune"},{"pkg":"unicode/utf8","name":"DecodeLastRune"},{"pkg":"unicode/utf8","name":"DecodeLastRuneInString"},{"pkg":"unicode/utf8","name":"DecodeRune"},{"pkg":"unicode/utf8","name":"DecodeRuneInString"},{"pkg":"unicode/utf8","name":"EncodeRune"},{"pkg":"unicode/utf8","name":"RuneCount"},{"pkg":"unicode/utf8","name":"RuneCountInString"},{"pkg":"unicode/utf8","name":"RuneLen"},{"pkg":"unicode/utf8","name":"RuneStart"},{"pkg":"unicode/utf8","name":"ValidRune"},{"pkg":"unicode/utf8","name":"ValidString"},{"pkg":"unicode/utf8","name":"appendRuneNonASCII"}],"goVersion":"go1.20.3","goos":"linux","goarch":"amd64"} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/000077500000000000000000000000001456050377100232105ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/after_body.blob000066400000000000000000000001571456050377100261710ustar00rootroot00000000000000{"name":"govulncheck-extract","version":"0.1.0"}{"modules":[]}{"name":"govulncheck-extract","version":"0.1.0"} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/binary_fail.ct000066400000000000000000000044371456050377100260270ustar00rootroot00000000000000##### # Test of passing a non-file to -mode=binary $ govulncheck -mode=binary notafile --> FAIL 2 "notafile" is not a file ##### # Test of passing a non-binary and non-blob file to -mode=binary $ govulncheck -mode=binary ${moddir}/vuln/go.mod --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing a blob with invalid header id $ govulncheck -mode=binary ${testdir}/failures/invalid_header_name.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing a blob with invalid header version $ govulncheck -mode=binary ${testdir}/failures/invalid_header_version.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing a blob with no header $ govulncheck -mode=binary ${testdir}/failures/no_header.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing a blob with invalid header, i.e., no header $ govulncheck -mode=binary ${testdir}/failures/no_header.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing a blob with no body $ govulncheck -mode=binary ${testdir}/failures/no_body.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing an empty blob/file $ govulncheck -mode=binary ${testdir}/failures/empty.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing an empty blob message $ govulncheck -mode=binary ${testdir}/failures/empty_message.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing blob message with multiple headers $ govulncheck -mode=binary ${testdir}/failures/multi_header.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of passing blob message with something after the body $ govulncheck -mode=binary ${testdir}/failures/multi_header.blob --> FAIL 1 govulncheck: unrecognized binary format ##### # Test of trying to analyze multiple binaries $ govulncheck -mode=binary ${vuln_binary} ${vuln_binary} --> FAIL 2 only 1 binary can be analyzed at a time ##### # Test of trying to run -mode=binary with -tags flag $ govulncheck -tags=foo -mode=binary ${vuln_binary} --> FAIL 2 the -tags flag is not supported in binary mode ##### # Test of trying to run -mode=binary with the -test flag $ govulncheck -test -mode=binary ${vuln_binary} --> FAIL 2 the -test flag is not supported in binary mode vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/empty.blob000066400000000000000000000000001456050377100251740ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/empty_message.blob000066400000000000000000000000031456050377100267030ustar00rootroot00000000000000{} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/extract_fail.ct000066400000000000000000000002331456050377100262030ustar00rootroot00000000000000##### # Test extraction of an unsupported file format $ govulncheck -mode=extract ${moddir}/vuln/go.mod --> FAIL 1 govulncheck: unrecognized binary format vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/invalid_header.blob000066400000000000000000000003261456050377100270070ustar00rootroot00000000000000{"id":"invalid-name","protocol":"0.1.0"}{"modules":[{"Path":"github.com/tidwall/gjson","Version":"v1.6.5","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null}]} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/invalid_header_name.blob000066400000000000000000000003271456050377100300100ustar00rootroot00000000000000{"name":"invalid-name","version":"0.1.0"}{"modules":[{"Path":"github.com/tidwall/gjson","Version":"v1.6.5","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null}]} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/invalid_header_version.blob000066400000000000000000000003361456050377100305550ustar00rootroot00000000000000{"name":"govulncheck-extract","version":"8.8.8"}{"modules":[{"Path":"github.com/tidwall/gjson","Version":"v1.6.5","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null}]} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/multi_header.blob000066400000000000000000000001571456050377100265150ustar00rootroot00000000000000{"name":"govulncheck-extract","version":"0.1.0"}{"name":"govulncheck-extract","version":"0.1.0"}{"modules":[]} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/no_body.blob000066400000000000000000000000611456050377100254760ustar00rootroot00000000000000{"name":"govulncheck-extract","version":"0.1.0"} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/no_header.blob000066400000000000000000000002561456050377100257770ustar00rootroot00000000000000{"modules":[{"Path":"github.com/tidwall/gjson","Version":"v1.6.5","Replace":null,"Time":null,"Main":false,"Indirect":false,"Dir":"","GoMod":"","GoVersion":"","Error":null}]} vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/query_fail.ct000066400000000000000000000002641456050377100257020ustar00rootroot00000000000000##### # Test of query mode with invalid input. $ govulncheck -mode=query -json example.com/module@ --> FAIL 2 invalid query example.com/module@: must be of the form module@version vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/source_fail.ct000066400000000000000000000021471456050377100260370ustar00rootroot00000000000000##### # Test of missing go.mod error message. $ govulncheck -C ${moddir}/{nomoddir} . --> FAIL 1 govulncheck: no go.mod file govulncheck only works with Go modules. Try navigating to your module directory. Otherwise, run go mod init to make your project a module. See https://go.dev/doc/modules/managing-dependencies for more information. ##### # Test of handing a binary to source mode $ govulncheck ${vuln_binary} --> FAIL 2 govulncheck: myfile is a file. By default, govulncheck runs source analysis on Go modules. Did you mean to run govulncheck with -mode=binary? For details, run govulncheck -h. ##### # Test of handing an invalid package pattern to source mode $ govulncheck -C ${moddir}/vuln blah --> FAIL 1 govulncheck: loading packages: There are errors with the provided package patterns: -: package foo is not in GOROOT (/tmp/foo) For details on package patterns, see https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. ##### # Test of handing a package pattern to scan level module $ govulncheck -scan module -C ${moddir}/vuln pattern --> FAIL 2 patterns are not accepted for module only scanning vuln-1.0.4/cmd/govulncheck/testdata/testfiles/failures/usage_fail.ct000066400000000000000000000006151456050377100256410ustar00rootroot00000000000000##### # Test of invalid input to -mode $ govulncheck -mode=invalid ./... --> FAIL 2 "invalid" is not a valid mode ##### # Test of trying to run -json with -v flag $ govulncheck -C ${moddir}/vuln -show=traces -json . --> FAIL 2 the -show flag is not supported for JSON output ##### # Test of invalid input to -scan $ govulncheck -scan=invalid ./... --> FAIL 2 "invalid" is not a valid scan level vuln-1.0.4/cmd/govulncheck/testdata/testfiles/query/000077500000000000000000000000001456050377100225435ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/query/query_json.ct000066400000000000000000000073161456050377100253000ustar00rootroot00000000000000##### # Test of query mode for a third party module. $ govulncheck -mode=query -json github.com/tidwall/gjson@v1.6.5 { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "symbol" } } { "progress": { "message": "Looking up vulnerabilities in github.com/tidwall/gjson at v1.6.5..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/query/query_multi_json.ct000066400000000000000000000147171456050377100265150ustar00rootroot00000000000000##### # Test of query mode with multiple inputs. $ govulncheck -mode=query -json stdlib@go1.17 github.com/tidwall/gjson@v1.6.5 { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "symbol" } } { "progress": { "message": "Looking up vulnerabilities in stdlib at go1.17..." } } { "progress": { "message": "Looking up vulnerabilities in github.com/tidwall/gjson at v1.6.5..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/query/query_stdlib_json.ct000066400000000000000000000061351456050377100266370ustar00rootroot00000000000000##### # Test of query mode with the standard library. $ govulncheck -mode=query -json stdlib@go1.17 { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "symbol" } } { "progress": { "message": "Looking up vulnerabilities in stdlib at go1.17..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/query/query_vstdlib_json.ct000066400000000000000000000062001456050377100270160ustar00rootroot00000000000000##### # Test of query mode with the standard library (with a v prefix on the version). $ govulncheck -mode=query -json stdlib@v1.17.0 { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "scan_level": "symbol" } } { "progress": { "message": "Looking up vulnerabilities in stdlib at v1.17.0..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/000077500000000000000000000000001456050377100236075ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_call_json.ct000066400000000000000000000406771456050377100275010ustar00rootroot00000000000000##### # $ govulncheck -C ${moddir}/vuln -json ./... { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "go_version": "go1.18", "scan_level": "symbol" } } { "progress": { "message": "Scanning your code and P packages across M dependent modules for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } { "finding": { "osv": "GO-2022-0969", "fixed_version": "v1.18.6", "trace": [ { "module": "stdlib", "version": "v1.18.0", "package": "net/http" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get", "receiver": "Result", "position": { "filename": ".../gjson.go", "offset": , "line": , "column": } }, { "module": "golang.org/vuln", "package": "golang.org/vuln", "function": "main", "position": { "filename": ".../vuln.go", "offset": , "line": , "column": } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language", "function": "Parse", "position": { "filename": ".../parse.go", "offset": , "line": , "column": } }, { "module": "golang.org/vuln", "package": "golang.org/vuln", "function": "main", "position": { "filename": ".../vuln.go", "offset": , "line": , "column": } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "ForEach", "receiver": "Result", "position": { "filename": ".../gjson.go", "offset": , "line": , "column": } }, { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "modPretty", "position": { "filename": ".../gjson.go", "offset": , "line": , "column": } }, { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "execModifier", "position": { "filename": ".../gjson.go", "offset": , "line": , "column": } }, { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get", "position": { "filename": ".../gjson.go", "offset": , "line": , "column": } }, { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get", "receiver": "Result", "position": { "filename": ".../gjson.go", "offset": , "line": , "column": } }, { "module": "golang.org/vuln", "package": "golang.org/vuln", "function": "main", "position": { "filename": ".../vuln.go", "offset": , "line": , "column": } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } { "finding": { "osv": "GO-2020-0015", "fixed_version": "v0.3.3", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0059", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-35380", "GHSA-w942-gw6m-p62c" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.4" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Array", "Result.Get", "Result.Map", "Result.Value", "squash" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/192" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0059" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_call_text.ct000066400000000000000000000163701456050377100275050ustar00rootroot00000000000000##### # Test of basic govulncheck in source mode $ govulncheck -C ${moddir}/vuln ./... --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Example traces found: #1: .../vuln.go::: vuln.main calls gjson.Result.Get Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: .../vuln.go::: vuln.main calls language.Parse Vulnerability #3: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 Example traces found: #1: .../vuln.go::: vuln.main calls gjson.Result.Get, which eventually calls gjson.Result.ForEach Your code is affected by 3 vulnerabilities from 2 modules. This scan also found 0 vulnerabilities in packages you import and 2 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. ##### # Test of basic govulncheck in source mode with expanded traces $ govulncheck -C ${moddir}/vuln -show=traces ./... --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Example traces found: #1: for function github.com/tidwall/gjson.Result.Get .../vuln.go::: golang.org/vuln.main .../gjson.go::: github.com/tidwall/gjson.Result.Get Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: for function golang.org/x/text/language.Parse .../vuln.go::: golang.org/vuln.main .../parse.go::: golang.org/x/text/language.Parse Vulnerability #3: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 Example traces found: #1: for function github.com/tidwall/gjson.Result.ForEach .../vuln.go::: golang.org/vuln.main .../gjson.go::: github.com/tidwall/gjson.Result.Get .../gjson.go::: github.com/tidwall/gjson.Get .../gjson.go::: github.com/tidwall/gjson.execModifier .../gjson.go::: github.com/tidwall/gjson.modPretty .../gjson.go::: github.com/tidwall/gjson.Result.ForEach Your code is affected by 3 vulnerabilities from 2 modules. This scan also found 0 vulnerabilities in packages you import and 2 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. ##### # Test of basic govulncheck in source mode with the -show verbose flag $ govulncheck -C ${moddir}/vuln -show verbose ./... --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Example traces found: #1: .../vuln.go::: vuln.main calls gjson.Result.Get Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: .../vuln.go::: vuln.main calls language.Parse Vulnerability #3: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 Example traces found: #1: .../vuln.go::: vuln.main calls gjson.Result.Get, which eventually calls gjson.Result.ForEach === Package Results === No other vulnerabilities found. === Module Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Vulnerability #2: GO-2020-0015 An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2020-0015 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.3 Your code is affected by 3 vulnerabilities from 2 modules. This scan also found 0 vulnerabilities in packages you import and 2 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_informational_text.ct000066400000000000000000000007471456050377100314350ustar00rootroot00000000000000##### # Test souce mode with no callstacks $ govulncheck -C ${moddir}/informational -show=traces . Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === No vulnerabilities found. Your code is affected by 0 vulnerabilities. This scan also found 1 vulnerability in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_multientry_json.ct000066400000000000000000000226671456050377100310010ustar00rootroot00000000000000##### # Test for multiple call stacks in source mode $ govulncheck -json -C ${moddir}/multientry . { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "go_version": "go1.18", "scan_level": "symbol" } } { "progress": { "message": "Scanning your code and P packages across M dependent modules for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } { "finding": { "osv": "GO-2022-0969", "fixed_version": "v1.18.6", "trace": [ { "module": "stdlib", "version": "v1.18.0", "package": "net/http" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.5" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.5", "package": "golang.org/x/text/language" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.5", "package": "golang.org/x/text/language", "function": "MustParse", "position": { "filename": ".../tags.go", "offset": , "line": , "column": } }, { "module": "golang.org/multientry", "package": "golang.org/multientry", "function": "foobar", "position": { "filename": ".../main.go", "offset": , "line": , "column": } }, { "module": "golang.org/multientry", "package": "golang.org/multientry", "function": "D", "position": { "filename": ".../main.go", "offset": , "line": , "column": } }, { "module": "golang.org/multientry", "package": "golang.org/multientry", "function": "main", "position": { "filename": ".../main.go", "offset": , "line": , "column": } } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.5", "package": "golang.org/x/text/language", "function": "Parse", "position": { "filename": ".../parse.go", "offset": , "line": , "column": } }, { "module": "golang.org/multientry", "package": "golang.org/multientry", "function": "C", "position": { "filename": ".../main.go", "offset": , "line": , "column": } }, { "module": "golang.org/multientry", "package": "golang.org/multientry", "function": "main", "position": { "filename": ".../main.go", "offset": , "line": , "column": } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_multientry_text.ct000066400000000000000000000057101456050377100310020ustar00rootroot00000000000000##### # Test for multiple call stacks in source mode $ govulncheck -C ${moddir}/multientry . --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.5 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: .../main.go::: multientry.foobar calls language.MustParse #2: .../main.go::: multientry.C calls language.Parse Your code is affected by 1 vulnerability from 1 module. This scan also found 0 vulnerabilities in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. ##### # Test for multple call stacks in source mode with expanded traces $ govulncheck -show verbose -C ${moddir}/multientry -show=traces ./... --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.5 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: for function golang.org/x/text/language.MustParse .../main.go::: golang.org/multientry.main .../main.go::: golang.org/multientry.D .../main.go::: golang.org/multientry.foobar .../tags.go::: golang.org/x/text/language.MustParse #2: for function golang.org/x/text/language.Parse .../main.go::: golang.org/multientry.main .../main.go::: golang.org/multientry.C .../parse.go::: golang.org/x/text/language.Parse === Package Results === No other vulnerabilities found. === Module Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Your code is affected by 1 vulnerability from 1 module. This scan also found 0 vulnerabilities in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_replace_text.ct000066400000000000000000000020041456050377100301720ustar00rootroot00000000000000##### # Test of source mode on a module with a replace directive. $ govulncheck -C ${moddir}/replace ./... --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: .../main.go::: replace.main calls language.Parse Your code is affected by 1 vulnerability from 1 module. This scan also found 0 vulnerabilities in packages you import and 2 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_stdlib_text.ct000066400000000000000000000035321456050377100300470ustar00rootroot00000000000000##### # Test finding stdlib vulnerability in source mode $ govulncheck -C ${moddir}/stdlib . --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Example traces found: #1: .../stdlib.go::: stdlib.main calls http.ListenAndServe Your code is affected by 1 vulnerability from the Go standard library. This scan found no other vulnerabilities in packages you import or modules you require. Use '-show verbose' for more details. ##### # Test finding stdlib vulnerability in source mode with expanded traces $ govulncheck -C ${moddir}/stdlib -show=traces . --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Example traces found: #1: for function net/http.ListenAndServe .../stdlib.go::: golang.org/stdlib.main .../server.go::: net/http.ListenAndServe Your code is affected by 1 vulnerability from the Go standard library. This scan found no other vulnerabilities in packages you import or modules you require. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_subdir_text.ct000066400000000000000000000041741456050377100300610ustar00rootroot00000000000000##### # Test govulncheck runs on the subdirectory of a module $ govulncheck -C ${moddir}/vuln/subdir . --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: .../subdir.go::: subdir.Foo calls language.Parse Your code is affected by 1 vulnerability from 1 module. This scan also found 0 vulnerabilities in packages you import and 2 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. ##### # Test govulncheck runs on the subdirectory of a module $ govulncheck -C ${moddir}/vuln/subdir -show=traces . --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: for function golang.org/x/text/language.Parse .../subdir.go::: golang.org/vuln/subdir.Foo .../parse.go::: golang.org/x/text/language.Parse Your code is affected by 1 vulnerability from 1 module. This scan also found 0 vulnerabilities in packages you import and 2 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_vendored_json.ct000066400000000000000000000355431456050377100303700ustar00rootroot00000000000000##### # $ govulncheck -C ${moddir}/vendored -json ./... { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "go_version": "go1.18", "scan_level": "symbol" } } { "progress": { "message": "Scanning your code and P packages across M dependent modules for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } { "finding": { "osv": "GO-2022-0969", "fixed_version": "v1.18.6", "trace": [ { "module": "stdlib", "version": "v1.18.0", "package": "net/http" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0265", "modified": "2023-04-03T15:57:51Z", "published": "2022-08-15T18:06:07Z", "aliases": [ "CVE-2021-42248", "CVE-2021-42836", "GHSA-c9gm-7rfj-8w5h", "GHSA-ppj4-34rq-v8j9" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "parseObject", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" } } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "finding": { "osv": "GO-2021-0265", "fixed_version": "v1.9.3", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson", "function": "Get", "receiver": "Result", "position": { "filename": ".../gjson.go", "offset": , "line": , "column": } }, { "module": "private.com/privateuser/fakemod", "version": "v1.0.0", "package": "private.com/privateuser/fakemod", "function": "Leave", "position": { "filename": ".../mod.go", "offset": , "line": , "column": } }, { "module": "golang.org/vendored", "package": "golang.org/vendored", "function": "main", "position": { "filename": ".../vendored.go", "offset": , "line": , "column": } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0", "package": "golang.org/x/text/language", "function": "Parse", "position": { "filename": ".../language.go", "offset": , "line": , "column": } }, { "module": "golang.org/vendored", "package": "golang.org/vendored", "function": "main", "position": { "filename": ".../vendored.go", "offset": , "line": , "column": } } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0054", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-36067", "GHSA-p64j-r5f4-pwwx" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" } } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5" } ] } } { "finding": { "osv": "GO-2021-0054", "fixed_version": "v1.6.6", "trace": [ { "module": "github.com/tidwall/gjson", "version": "v1.6.5", "package": "github.com/tidwall/gjson" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } { "finding": { "osv": "GO-2020-0015", "fixed_version": "v0.3.3", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.0" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0059", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-35380", "GHSA-w942-gw6m-p62c" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.4" } ] } ], "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Array", "Result.Get", "Result.Map", "Result.Value", "squash" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/192" } ], "credits": [ { "name": "@toptotu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0059" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_vendored_text.ct000066400000000000000000000053131456050377100303730ustar00rootroot00000000000000##### # Vendored directory w text output $ govulncheck -C ${moddir}/vendored -show verbose ./... --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2021-0265 A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time. More info: https://pkg.go.dev/vuln/GO-2021-0265 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.9.3 Example traces found: #1: .../vendored.go::: vendored.main calls fakemod.Leave, which calls gjson.Result.Get Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.7 Example traces found: #1: .../vendored.go::: vendored.main calls language.Parse === Package Results === Vulnerability #1: GO-2021-0054 Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2021-0054 Module: github.com/tidwall/gjson Found in: github.com/tidwall/gjson@v1.6.5 Fixed in: github.com/tidwall/gjson@v1.6.6 === Module Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Vulnerability #2: GO-2020-0015 An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector. More info: https://pkg.go.dev/vuln/GO-2020-0015 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.0 Fixed in: golang.org/x/text@v0.3.3 Your code is affected by 2 vulnerabilities from 2 modules. This scan also found 1 vulnerability in packages you import and 2 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-call/source_wholemodvuln_text.ct000066400000000000000000000017231456050377100313110ustar00rootroot00000000000000##### # Test of govulncheck call analysis for vulns with no package info available. # All symbols of the module are vulnerable. $ govulncheck -C ${moddir}/wholemodvuln ./... --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Symbol Results === Vulnerability #1: GO-2022-0956 Excessive resource consumption in gopkg.in/yaml.v2 More info: https://pkg.go.dev/vuln/GO-2022-0956 Module: gopkg.in/yaml.v2 Found in: gopkg.in/yaml.v2@v2.2.3 Fixed in: gopkg.in/yaml.v2@v2.2.4 Example traces found: #1: .../whole_mod_vuln.go::: wholemodvuln.main calls yaml.Marshal #2: .../whole_mod_vuln.go::: wholemodvuln.init calls yaml.init Your code is affected by 1 vulnerability from 1 module. This scan also found 0 vulnerabilities in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-module/000077500000000000000000000000001456050377100241615ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-module/source_module_json.ct000066400000000000000000000161521456050377100304140ustar00rootroot00000000000000##### # Test that findings with callstacks or packages are not emitted in module mode $ govulncheck -json -scan module -C ${moddir}/multientry { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "go_version": "go1.18", "scan_level": "module" } } { "progress": { "message": "Scanning your code across 2 dependent modules for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } { "finding": { "osv": "GO-2022-0969", "fixed_version": "v1.18.6", "trace": [ { "module": "stdlib", "version": "v1.18.0", "package": "net/http" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.5" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-module/source_module_text.ct000066400000000000000000000044771456050377100304360ustar00rootroot00000000000000##### # Testing that govulncheck doesn't mention calls when it doesn't # have callstack information $ govulncheck -scan module -C ${moddir}/multientry --> FAIL 3 Scanning your code across 2 dependent modules for known vulnerabilities... === Module Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.5 Fixed in: golang.org/x/text@v0.3.7 Your code may be affected by 2 vulnerabilities. Use '-scan symbol' for more fine grained vulnerability detection. ##### # -show verbose flag should only show module results with scan level module $ govulncheck -scan module -show verbose -C ${moddir}/multientry --> FAIL 3 Scanning your code across 2 dependent modules for known vulnerabilities... === Module Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Vulnerability #2: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.5 Fixed in: golang.org/x/text@v0.3.7 Your code may be affected by 2 vulnerabilities. Use '-scan symbol' for more fine grained vulnerability detection. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-package/000077500000000000000000000000001456050377100242675ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-package/source_package_json.ct000066400000000000000000000165341456050377100306340ustar00rootroot00000000000000##### # Test that findings with callstacks are not emitted in package mode $ govulncheck -json -scan package -C ${moddir}/multientry . { "config": { "protocol_version": "v1.0.0", "scanner_name": "govulncheck", "scanner_version": "v0.0.0-00000000000-20000101010101", "db": "testdata/vulndb-v1", "db_last_modified": "2023-04-03T15:57:51Z", "go_version": "go1.18", "scan_level": "package" } } { "progress": { "message": "Scanning your code and P packages across M dependent modules for known vulnerabilities..." } } { "osv": { "schema_version": "1.3.1", "id": "GO-2022-0969", "modified": "2023-04-03T15:57:51Z", "published": "2022-09-12T20:23:06Z", "aliases": [ "CVE-2022-27664", "GHSA-69cg-p879-7622" ], "details": "HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.", "affected": [ { "package": { "name": "stdlib", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.18.6" }, { "introduced": "1.19.0" }, { "fixed": "1.19.1" } ] } ], "ecosystem_specific": { "imports": [ { "path": "net/http", "symbols": [ "ListenAndServe", "ListenAndServeTLS", "Serve", "ServeTLS", "Server.ListenAndServe", "Server.ListenAndServeTLS", "Server.Serve", "Server.ServeTLS", "http2Server.ServeConn", "http2serverConn.goAway" ] } ] } }, { "package": { "name": "golang.org/x/net", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.0.0-20220906165146-f3363e06e74c" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/net/http2", "symbols": [ "Server.ServeConn", "serverConn.goAway" ] } ] } } ], "references": [ { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/x49AQzIVX-s" }, { "type": "REPORT", "url": "https://go.dev/issue/54658" }, { "type": "FIX", "url": "https://go.dev/cl/428735" } ], "credits": [ { "name": "Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0969" } } } { "finding": { "osv": "GO-2022-0969", "fixed_version": "v1.18.6", "trace": [ { "module": "stdlib", "version": "v1.18.0", "package": "net/http" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2021-0113", "modified": "2023-04-03T15:57:51Z", "published": "2021-10-06T17:51:21Z", "aliases": [ "CVE-2021-38561", "GHSA-ppp9-7jff-5vj2" ], "details": "Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.7" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/language", "symbols": [ "MatchStrings", "MustParse", "Parse", "ParseAcceptLanguage" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/340830" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/383b2e75a7a4198c42f8f87833eefb772868a56f" } ], "credits": [ { "name": "Guido Vranken" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0113" } } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.5" } ] } } { "finding": { "osv": "GO-2021-0113", "fixed_version": "v0.3.7", "trace": [ { "module": "golang.org/x/text", "version": "v0.3.5", "package": "golang.org/x/text/language" } ] } } { "osv": { "schema_version": "1.3.1", "id": "GO-2020-0015", "modified": "2023-04-03T15:57:51Z", "published": "2021-04-14T20:04:52Z", "aliases": [ "CVE-2020-14040", "GHSA-5rcv-m4m3-hfh7" ], "details": "An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "golang.org/x/text", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "0.3.3" } ] } ], "ecosystem_specific": { "imports": [ { "path": "golang.org/x/text/encoding/unicode", "symbols": [ "bomOverride.Transform", "utf16Decoder.Transform" ] }, { "path": "golang.org/x/text/transform", "symbols": [ "String" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://go.dev/cl/238238" }, { "type": "FIX", "url": "https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e" }, { "type": "REPORT", "url": "https://go.dev/issue/39491" }, { "type": "WEB", "url": "https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0" } ], "credits": [ { "name": "@abacabadabacaba and Anton Gyllenberg" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2020-0015" } } } vuln-1.0.4/cmd/govulncheck/testdata/testfiles/source-package/source_package_text.ct000066400000000000000000000042201456050377100306340ustar00rootroot00000000000000##### # Testing that govulncheck doesn't mention calls when it doesn't have the relevant info $ govulncheck -scan package -C ${moddir}/multientry . --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Package Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.5 Fixed in: golang.org/x/text@v0.3.7 Your code may be affected by 1 vulnerability. This scan also found 1 vulnerability in modules you require. Use '-scan symbol' for more fine grained vulnerability detection and '-show verbose' for more details. ##### # Test for package level scan with the -show verbose flag $ govulncheck -show verbose -scan package -C ${moddir}/multientry . --> FAIL 3 Scanning your code and P packages across M dependent modules for known vulnerabilities... === Package Results === Vulnerability #1: GO-2021-0113 Due to improper index calculation, an incorrectly formatted language tag can cause Parse to panic via an out of bounds read. If Parse is used to process untrusted user inputs, this may be used as a vector for a denial of service attack. More info: https://pkg.go.dev/vuln/GO-2021-0113 Module: golang.org/x/text Found in: golang.org/x/text@v0.3.5 Fixed in: golang.org/x/text@v0.3.7 === Module Results === Vulnerability #1: GO-2022-0969 HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service. More info: https://pkg.go.dev/vuln/GO-2022-0969 Standard library Found in: net/http@go1.18 Fixed in: net/http@go1.18.6 Your code may be affected by 1 vulnerability. This scan also found 1 vulnerability in modules you require. Use '-scan symbol' for more fine grained vulnerability detection. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/usage/000077500000000000000000000000001456050377100225025ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/testfiles/usage/source_no_packages.ct000066400000000000000000000003251456050377100266640ustar00rootroot00000000000000##### # Test message when there are no packages matching the provided pattern (#59623). $ govulncheck -C ${moddir}/vuln pkg/no-govulncheck/... No packages matching the provided pattern. No vulnerabilities found. vuln-1.0.4/cmd/govulncheck/testdata/testfiles/usage/usage.ct000066400000000000000000000023051456050377100241360ustar00rootroot00000000000000##### # Test of govulncheck help output $ govulncheck -h Govulncheck reports known vulnerabilities in dependencies. Usage: govulncheck [flags] [patterns] govulncheck -mode=binary [flags] [binary] -C dir change to dir before running govulncheck -db url vulnerability database url (default "https://vuln.go.dev") -json output JSON -mode string supports source or binary (default "source") -scan string set the scanning level desired, one of module, package or symbol (default "symbol") -show list enable display of additional information specified by the comma separated list The supported values are 'traces','color', 'version', and 'verbose' -tags list comma-separated list of build tags -test analyze test files (only valid for source mode, default false) -version print the version information For details, see https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck. ##### # Not scanning anything. $ govulncheck No vulnerabilities found. ##### # Reporting version without scanning anything. $ govulncheck -version Go: go1.18 Scanner: govulncheck@v1.0.0 DB: testdata/vulndb-v1 DB updated: 2023-04-03 15:57:51 +0000 UTC No vulnerabilities found. vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/000077500000000000000000000000001456050377100212125ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/000077500000000000000000000000001456050377100215065ustar00rootroot00000000000000vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2020-0015.json000066400000000000000000000023521456050377100236540ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2020-0015","modified":"2023-04-03T15:57:51Z","published":"2021-04-14T20:04:52Z","aliases":["CVE-2020-14040","GHSA-5rcv-m4m3-hfh7"],"details":"An attacker could provide a single byte to a UTF16 decoder instantiated with UseBOM or ExpectBOM to trigger an infinite loop if the String function on the Decoder is called, or the Decoder is passed to transform.String. If used to parse user supplied input, this may be used as a denial of service vector.","affected":[{"package":{"name":"golang.org/x/text","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.3.3"}]}],"ecosystem_specific":{"imports":[{"path":"golang.org/x/text/encoding/unicode","symbols":["bomOverride.Transform","utf16Decoder.Transform"]},{"path":"golang.org/x/text/transform","symbols":["String"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/238238"},{"type":"FIX","url":"https://go.googlesource.com/text/+/23ae387dee1f90d29a23c0e87ee0b46038fbed0e"},{"type":"REPORT","url":"https://go.dev/issue/39491"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/bXVeAmGOqz0"}],"credits":[{"name":"@abacabadabacaba and Anton Gyllenberg"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2020-0015"}}vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2020-0015.json.gz000066400000000000000000000013351456050377100242730ustar00rootroot00000000000000|Tn6žV(ɾ8zjppCaEd"i{}2ֻ;3YAo{A;i映VXzVB̄`n4BLgjqS-1~ב|BTb^-qjb.0_f /nޕ]m#i; #g `b ڶ>DCK؃!"+S|~ K2Etn[@mՑ8׃n ׶f2jg?d dDGXM,dC|Nx)|l`4{ChVm?N5O@d5dسΧM2|=bOZꈖ: [gȶmE~ K!r7ހSl{Џ{OOqx6N-mwj#6e2-=m࿅nwStJ6]á9T׊ͫ%v]xp1Ņ4sÞ|k·_FZo]}u}&MVˢ\ֹppJM~Ȋ\(漹7̢岩Y xX~|Oa଼K{ûmgUm67#k`%g2<]w/Oҳҗt/#$&u ltưٷeEj ^ު`lu:z2%vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2021-0054.json000066400000000000000000000016021456050377100236550ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2021-0054","modified":"2023-04-03T15:57:51Z","published":"2021-04-14T20:04:52Z","aliases":["CVE-2020-36067","GHSA-p64j-r5f4-pwwx"],"details":"Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.","affected":[{"package":{"name":"github.com/tidwall/gjson","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.6.6"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/tidwall/gjson","symbols":["Result.ForEach","unwrap"]}]}}],"references":[{"type":"FIX","url":"https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b"},{"type":"WEB","url":"https://github.com/tidwall/gjson/issues/196"}],"credits":[{"name":"@toptotu"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2021-0054"}}vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2021-0054.json.gz000066400000000000000000000010671456050377100243010ustar00rootroot00000000000000n<_.,9Vɟm$HF0F$xczB ԋ]sx7iėY' ddl8ys^J+91/bxʪ+D`B=Hd$+s^*YDGgi3x+c,^c[ElwFАG98@k&Gc!jTIIElA LXl=5'W1 *u] *)v2Iձ2Ltlio:!%q`eN b;^dmI 7#( *C=^6{{uZA$;8O SUwv0ǧ,ޑKRy N9LZ~:e2Y´?ٿ8CBRmh{62߷cɅ'nPAP{v,dIoR;@UiTq>ۂZQ/DjU^zZECX:+8 ק97yt.K*ag$ڇSA5:xe޺ICt^|i[vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2021-0059.json000066400000000000000000000017231456050377100236660ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2021-0059","modified":"2023-04-03T15:57:51Z","published":"2021-04-14T20:04:52Z","aliases":["CVE-2020-35380","GHSA-w942-gw6m-p62c"],"details":"Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.","affected":[{"package":{"name":"github.com/tidwall/gjson","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.6.4"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/tidwall/gjson","symbols":["Get","GetBytes","GetMany","GetManyBytes","Result.Array","Result.Get","Result.Map","Result.Value","squash"]}]}}],"references":[{"type":"FIX","url":"https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc"},{"type":"WEB","url":"https://github.com/tidwall/gjson/issues/192"}],"credits":[{"name":"@toptotu"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2021-0059"}}vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2021-0059.json.gz000066400000000000000000000011251456050377100243010ustar00rootroot00000000000000S]o6+>۲I)Hh`+j%1H? 9?޸쌸{yG %Yղ#8dz7?y\u"VcWm 9 ĜbbFi2V^6]Fab`aTBYQ2Cɔwj#F)x®[X!;-&.b8eZf'#I¦mK/bGPAHPA'\넫1uyaH$D@\:C  `ܤ. HΨZP*)a&.Z,1je@]svk5b"#w99qG.0AY<)}h{97Ԓ!O ?*ӶJ-r5¥mF^R<[96M\d+x3@{mҴWIKSʇ\euyk|T?UpJ/>~K˺TU~WU]]eI757P+\E؛Ay ZtCK7ч>z ӛ9(vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2021-0265.json000066400000000000000000000020641456050377100236640ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2021-0265","modified":"2023-04-03T15:57:51Z","published":"2022-08-15T18:06:07Z","aliases":["CVE-2021-42248","CVE-2021-42836","GHSA-c9gm-7rfj-8w5h","GHSA-ppj4-34rq-v8j9"],"details":"A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.","affected":[{"package":{"name":"github.com/tidwall/gjson","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.9.3"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/tidwall/gjson","symbols":["Get","GetBytes","GetMany","GetManyBytes","Result.Get","parseObject","queryMatches"]}]}}],"references":[{"type":"FIX","url":"https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96"},{"type":"WEB","url":"https://github.com/tidwall/gjson/issues/237"},{"type":"WEB","url":"https://github.com/tidwall/gjson/issues/236"},{"type":"WEB","url":"https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2021-0265"}}vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2021-0265.json.gz000066400000000000000000000011251456050377100243000ustar00rootroot00000000000000Tn8^c, Lh`4yiёHEEx_s#X^c˞[e4TIJ@?qxJ**1>M*ݰi?Zb~GEEͧ(fBW~iD,w>/rY]'i] k: \5+3@xϤCA:j™&  aZjˀAsC8ZHXk,1\RmgwɗSvcf+t]Gи4бf|f5ZXq"ڣ5?W?_oڹVa#!7m\,˥`E.8[*r.\dQ Eʈٳ=//}v@I]mVRQ)O,)ʌy" ed`mų|_ &Có8~ 784vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2022-0956.json000066400000000000000000000020401456050377100236660ustar00rootroot00000000000000{ "schema_version": "1.3.1", "id": "GO-2022-0956", "modified": "0001-01-01T00:00:00Z", "published": "2022-08-29T22:15:46Z", "aliases": [ "CVE-2022-3064", "GHSA-6q6q-88xp-6f2r" ], "summary": "Excessive resource consumption in gopkg.in/yaml.v2", "details": "Parsing malicious or large YAML documents can consume excessive amounts of CPU or memory.", "affected": [ { "package": { "name": "gopkg.in/yaml.v2", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "2.2.4" } ] } ] } ], "references": [ { "type": "FIX", "url": "https://github.com/go-yaml/yaml/commit/f221b8435cfb71e54062f6c6e99e9ade30b124d5" }, { "type": "WEB", "url": "https://github.com/go-yaml/yaml/releases/tag/v2.2.4" } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0956" } } vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2022-0969.json000066400000000000000000000026721456050377100237050ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0969","modified":"2023-04-03T15:57:51Z","published":"2022-09-12T20:23:06Z","aliases":["CVE-2022-27664","GHSA-69cg-p879-7622"],"details":"HTTP/2 server connections can hang forever waiting for a clean shutdown that was preempted by a fatal error. This condition can be exploited by a malicious client to cause a denial of service.","affected":[{"package":{"name":"stdlib","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.18.6"},{"introduced":"1.19.0"},{"fixed":"1.19.1"}]}],"ecosystem_specific":{"imports":[{"path":"net/http","symbols":["ListenAndServe","ListenAndServeTLS","Serve","ServeTLS","Server.ListenAndServe","Server.ListenAndServeTLS","Server.Serve","Server.ServeTLS","http2Server.ServeConn","http2serverConn.goAway"]}]}},{"package":{"name":"golang.org/x/net","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.0.0-20220906165146-f3363e06e74c"}]}],"ecosystem_specific":{"imports":[{"path":"golang.org/x/net/http2","symbols":["Server.ServeConn","serverConn.goAway"]}]}}],"references":[{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/x49AQzIVX-s"},{"type":"REPORT","url":"https://go.dev/issue/54658"},{"type":"FIX","url":"https://go.dev/cl/428735"}],"credits":[{"name":"Bahruz Jabiyev, Tommaso Innocenti, Anthony Gavazzi, Steven Sprecher, and Kaan Onarlioglu"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0969"}}vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/ID/GO-2022-0969.json.gz000066400000000000000000000013531456050377100243170ustar00rootroot00000000000000TOo۸*;Kr[Z]b x$)w_PvqGΛ:-u}GIOx J4tQ, T&yOtu6+grVI׾P2uL@A%ё||XE1n>b!/y簉"R9(z%ə##˄њF;&Pujc) Qzy:3dBjWQ3ߢgXoSŶ{Frn ;*VWFPI!Pg0#"-Q1S _$|Hz?!(#(J-D@¸ԅ #1}ȫ@ޑޚjc)iń4+œf80L+[XQ3nCbnH\.GJCdcojcyBk.HH 9;\IqG\K%VA/vЦn>k;[}5cuGMv54U8.-˰nDzErU٭ͧ7-R %_=˜f<<;(6˪&]p2VJ#s2y6_T2OK!@tw \..^`81o{}Zl/NM`D<^n'>o;O{(vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/index/vulns.json000066400000000000000000000014251456050377100243650ustar00rootroot00000000000000[{"id":"GO-2020-0015","modified":"2023-04-03T15:57:51Z","aliases":["CVE-2020-14040","GHSA-5rcv-m4m3-hfh7"]},{"id":"GO-2021-0054","modified":"2023-04-03T15:57:51Z","aliases":["CVE-2020-36067","GHSA-p64j-r5f4-pwwx"]},{"id":"GO-2021-0059","modified":"2023-04-03T15:57:51Z","aliases":["CVE-2020-35380","GHSA-w942-gw6m-p62c"]},{"id":"GO-2021-0113","modified":"2023-04-03T15:57:51Z","aliases":["CVE-2021-38561","GHSA-ppp9-7jff-5vj2"]},{"id":"GO-2021-0265","modified":"2023-04-03T15:57:51Z","aliases":["CVE-2021-42248","CVE-2021-42836","GHSA-c9gm-7rfj-8w5h","GHSA-ppj4-34rq-v8j9"]},{"id":"GO-2022-0969","modified":"2023-04-03T15:57:51Z","aliases":["CVE-2022-27664","GHSA-69cg-p879-7622"]},{"id":"GO-2022-0956","modified":"0001-01-01T00:00:00Z","aliases":["CVE-2022-3064","GHSA-6q6q-88xp-6f2r"]}] vuln-1.0.4/cmd/govulncheck/testdata/vulndb-v1/index/vulns.json.gz000066400000000000000000000006341456050377100250050ustar00rootroot00000000000000N0y*k;!`b,@,@DM:4a@E":(9v_Q-ɗ(DТH4:(M&fa2I}Ų˽|"ǾSZߦyzvJ(u`zۺ63qX0 m*(uui~>}YaD;;u ZjU3=1ftJ Ky2  ax؟ƧPS Q0QUKIG$h$_O}*QRƾ+ F)ܻi.i 6T go;j hVл&#"YDfw6>RI!}Lm~%.ȷ׿RZ+h=xJX9鏒1c1c1c1c \(vuln-1.0.4/devtools/000077500000000000000000000000001456050377100143475ustar00rootroot00000000000000vuln-1.0.4/devtools/lib.sh000066400000000000000000000022671456050377100154600ustar00rootroot00000000000000#!/bin/bash # Copyright 2021 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # Library of useful bash functions and variables. RED=; GREEN=; YELLOW=; NORMAL=; MAXWIDTH=0 if tput setaf 1 >& /dev/null; then RED=$(tput setaf 1) GREEN=$(tput setaf 2) YELLOW=$(tput setaf 3) NORMAL=$(tput sgr0) MAXWIDTH=$(( $(tput cols) - 2 )) fi EXIT_CODE=0 export EXIT_CODE info() { echo -e "${GREEN}$*${NORMAL}" 1>&2; } warn() { echo -e "${YELLOW}$*${NORMAL}" 1>&2; } err() { echo -e "${RED}$*${NORMAL}" 1>&2; EXIT_CODE=1; } die() { err "$@" exit 1 } dryrun=false # runcmd prints an info log describing the command that is about to be run, and # then runs it. It sets EXIT_CODE to non-zero if the command fails, but does not exit # the script. runcmd() { msg="$*" if $dryrun; then echo -e "${YELLOW}dryrun${GREEN}\$ $msg${NORMAL}" return 0 fi # Truncate command logging for narrow terminals. # Account for the 2 characters of '$ '. if [[ $MAXWIDTH -gt 0 && ${#msg} -gt $MAXWIDTH ]]; then msg="${msg::$(( MAXWIDTH - 3 ))}..." fi echo -e "$*\n" 1>&2; "$@" || err "command failed" } vuln-1.0.4/devtools/snapshot_vulndb.sh000077500000000000000000000027061456050377100201240ustar00rootroot00000000000000#!/usr/bin/env -S bash -e # Copyright 2023 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. source devtools/lib.sh || { echo "Are you at repo root?"; exit 1; } # Script for copying data from the v1 schema in vuln.go.dev for tests. origin="https://vuln.go.dev" go install golang.org/x/vulndb/cmd/indexdb@latest # Copy files for unit tests. copyFiles=( "ID/GO-2021-0159.json" "ID/GO-2022-0229.json" "ID/GO-2022-0463.json" "ID/GO-2022-0569.json" "ID/GO-2022-0572.json" "ID/GO-2021-0068.json" "ID/GO-2022-0475.json" "ID/GO-2022-0476.json" "ID/GO-2021-0240.json" "ID/GO-2021-0264.json" "ID/GO-2022-0273.json" ) UNIT_OUT_DIR=$(pwd)/internal/client/testdata/vulndb-v1 for f in "${copyFiles[@]}"; do mkdir -p "$UNIT_OUT_DIR/$(dirname "$f")" && curl -L $origin/"$f" --output "$UNIT_OUT_DIR"/"$f" done unit_vulns="$UNIT_OUT_DIR/ID" indexdb -out "$UNIT_OUT_DIR" -vulns "$unit_vulns" # Copy files for integration tests. copyFiles=( "ID/GO-2022-0969.json" "ID/GO-2020-0015.json" "ID/GO-2021-0113.json" "ID/GO-2021-0054.json" "ID/GO-2021-0059.json" "ID/GO-2021-0265.json" ) INTEG_OUT_DIR=$(pwd)/cmd/govulncheck/testdata/vulndb-v1 for f in "${copyFiles[@]}"; do mkdir -p "$INTEG_OUT_DIR"/"$(dirname "$f")" && curl -L "$origin"/"$f" --output "$INTEG_OUT_DIR"/"$f" done integ_vulns="$INTEG_OUT_DIR/ID" indexdb -out "$INTEG_OUT_DIR" -vulns "$integ_vulns" vuln-1.0.4/doc/000077500000000000000000000000001456050377100132555ustar00rootroot00000000000000vuln-1.0.4/doc/vulndb.md000066400000000000000000000031051456050377100150700ustar00rootroot00000000000000# Go Vulnerability Database ## Accessing the database The Go vulnerability database is rooted at `https://vuln.go.dev` and provides data as JSON. Do not rely on the contents of the x/vulndb repository. The YAML files in that repository are maintained using an internal format that is subject to change without warning. The endpoints the table below are supported. For each path: - $base is the path portion of a Go vulnerability database URL (`https://vuln.go.dev`). - $module is a module path - $vuln is a Go vulnerabilitiy ID (for example, `GO-2021-1234`) | Path | Description | | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | $base/index.json | List of module paths in the database mapped to its last modified timestamp ([link](https://vuln.go.dev/index.json)). | | $base/$module.json | List of vulnerability entries for that module ([example](https://vuln.go.dev/golang.org/x/crypto.json)). | | $base/ID/index.json | List of all the vulnerability entries in the database | | $base/ID/$vuln.json | An individual Go vulnerability report | Note that these paths and format are provisional and likely to change until an approved proposal. vuln-1.0.4/go.mod000066400000000000000000000005171456050377100136210ustar00rootroot00000000000000module golang.org/x/vuln go 1.18 require ( github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 github.com/google/go-cmp v0.5.8 golang.org/x/mod v0.14.0 golang.org/x/sync v0.6.0 golang.org/x/tools v0.17.0 mvdan.cc/unparam v0.0.0-20230312165513-e84e2d14e3b8 ) require github.com/google/renameio v0.1.0 // indirect vuln-1.0.4/go.sum000066400000000000000000000024621456050377100136470ustar00rootroot00000000000000github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 h1:rcv+Ippz6RAtvaGgKxc+8FQIpxHgsF+HBzPyYL2cyVU= github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786/go.mod h1:apVn/GCasLZUVpAJ6oWAuyP7Ne7CEsQbTnc0plM3m+o= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= mvdan.cc/unparam v0.0.0-20230312165513-e84e2d14e3b8 h1:VuJo4Mt0EVPychre4fNlDWDuE5AjXtPJpRUWqZDQhaI= mvdan.cc/unparam v0.0.0-20230312165513-e84e2d14e3b8/go.mod h1:Oh/d7dEtzsNHGOq1Cdv8aMm3KdKhVvPbRQcM8WFpBR8= vuln-1.0.4/internal/000077500000000000000000000000001456050377100143245ustar00rootroot00000000000000vuln-1.0.4/internal/buildinfo/000077500000000000000000000000001456050377100162775ustar00rootroot00000000000000vuln-1.0.4/internal/buildinfo/README.md000066400000000000000000000006051456050377100175570ustar00rootroot00000000000000This code is a copied and slightly modified subset of go/src/debug/buildinfo. It contains logic for parsing Go binary files for the purpose of extracting module dependency and symbol table information. Logic added by vulncheck is located in files with "additions_" prefix. Within the originally named files, changed or added logic is annotated with a comment starting with "Addition:". vuln-1.0.4/internal/buildinfo/additions_buildinfo.go000066400000000000000000000154061456050377100226450ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package buildinfo // This file adds to buildinfo the functionality for extracting the PCLN table. import ( "debug/elf" "debug/macho" "debug/pe" "encoding/binary" "errors" "fmt" "io" ) // ErrNoSymbols represents non-existence of symbol // table in binaries supported by buildinfo. var ErrNoSymbols = errors.New("no symbol section") // SymbolInfo is derived from cmd/internal/objfile/elf.go:symbols, symbolData. func (x *elfExe) SymbolInfo(name string) (uint64, uint64, io.ReaderAt, error) { sym, err := x.lookupSymbol(name) if err != nil { if errors.Is(err, elf.ErrNoSymbols) { return 0, 0, nil, ErrNoSymbols } return 0, 0, nil, fmt.Errorf("no symbol %q", name) } prog := x.progContaining(sym.Value) if prog == nil { return 0, 0, nil, fmt.Errorf("no Prog containing value %d for %q", sym.Value, name) } return sym.Value, prog.Vaddr, prog.ReaderAt, nil } func (x *elfExe) lookupSymbol(name string) (*elf.Symbol, error) { x.symbolsOnce.Do(func() { syms, err := x.f.Symbols() if err != nil { x.symbolsErr = err return } x.symbols = make(map[string]*elf.Symbol, len(syms)) for _, s := range syms { s := s // make a copy to prevent aliasing x.symbols[s.Name] = &s } }) if x.symbolsErr != nil { return nil, x.symbolsErr } return x.symbols[name], nil } func (x *elfExe) progContaining(addr uint64) *elf.Prog { for _, p := range x.f.Progs { if addr >= p.Vaddr && addr < p.Vaddr+p.Filesz { return p } } return nil } const go12magic = 0xfffffffb const go116magic = 0xfffffffa // PCLNTab is derived from cmd/internal/objfile/elf.go:pcln. func (x *elfExe) PCLNTab() ([]byte, uint64) { var offset uint64 text := x.f.Section(".text") if text != nil { offset = text.Offset } pclntab := x.f.Section(".gopclntab") if pclntab == nil { // Addition: this code is added to support some form of stripping. pclntab = x.f.Section(".data.rel.ro.gopclntab") if pclntab == nil { pclntab = x.f.Section(".data.rel.ro") if pclntab == nil { return nil, 0 } // Possibly the PCLN table has been stuck in the .data.rel.ro section, but without // its own section header. We can search for for the start by looking for the four // byte magic and the go magic. b, err := pclntab.Data() if err != nil { return nil, 0 } // TODO(rolandshoemaker): I'm not sure if the 16 byte increment during the search is // actually correct. During testing it worked, but that may be because I got lucky // with the binary I was using, and we need to do four byte jumps to exhaustively // search the section? for i := 0; i < len(b); i += 16 { if len(b)-i > 16 && b[i+4] == 0 && b[i+5] == 0 && (b[i+6] == 1 || b[i+6] == 2 || b[i+6] == 4) && (b[i+7] == 4 || b[i+7] == 8) { // Also check for the go magic leMagic := binary.LittleEndian.Uint32(b[i:]) beMagic := binary.BigEndian.Uint32(b[i:]) switch { case leMagic == go12magic: fallthrough case beMagic == go12magic: fallthrough case leMagic == go116magic: fallthrough case beMagic == go116magic: return b[i:], offset } } } } } b, err := pclntab.Data() if err != nil { return nil, 0 } return b, offset } // SymbolInfo is derived from cmd/internal/objfile/pe.go:findPESymbol, loadPETable. func (x *peExe) SymbolInfo(name string) (uint64, uint64, io.ReaderAt, error) { sym, err := x.lookupSymbol(name) if err != nil { return 0, 0, nil, err } if sym == nil { return 0, 0, nil, fmt.Errorf("no symbol %q", name) } sect := x.f.Sections[sym.SectionNumber-1] // In PE, the symbol's value is the offset from the section start. return uint64(sym.Value), 0, sect.ReaderAt, nil } func (x *peExe) lookupSymbol(name string) (*pe.Symbol, error) { x.symbolsOnce.Do(func() { x.symbols = make(map[string]*pe.Symbol, len(x.f.Symbols)) if len(x.f.Symbols) == 0 { x.symbolsErr = ErrNoSymbols return } for _, s := range x.f.Symbols { x.symbols[s.Name] = s } }) if x.symbolsErr != nil { return nil, x.symbolsErr } return x.symbols[name], nil } // PCLNTab is derived from cmd/internal/objfile/pe.go:pcln. // Assumes that the underlying symbol table exists, otherwise // it might panic. func (x *peExe) PCLNTab() ([]byte, uint64) { var textOffset uint64 for _, section := range x.f.Sections { if section.Name == ".text" { textOffset = uint64(section.Offset) break } } var start, end int64 var section int if s, _ := x.lookupSymbol("runtime.pclntab"); s != nil { start = int64(s.Value) section = int(s.SectionNumber - 1) } if s, _ := x.lookupSymbol("runtime.epclntab"); s != nil { end = int64(s.Value) } if start == 0 || end == 0 { return nil, 0 } offset := int64(x.f.Sections[section].Offset) + start size := end - start pclntab := make([]byte, size) if _, err := x.r.ReadAt(pclntab, offset); err != nil { return nil, 0 } return pclntab, textOffset } // SymbolInfo is derived from cmd/internal/objfile/macho.go:symbols. func (x *machoExe) SymbolInfo(name string) (uint64, uint64, io.ReaderAt, error) { sym, err := x.lookupSymbol(name) if err != nil { return 0, 0, nil, err } if sym == nil { return 0, 0, nil, fmt.Errorf("no symbol %q", name) } seg := x.segmentContaining(sym.Value) if seg == nil { return 0, 0, nil, fmt.Errorf("no Segment containing value %d for %q", sym.Value, name) } return sym.Value, seg.Addr, seg.ReaderAt, nil } func (x *machoExe) lookupSymbol(name string) (*macho.Symbol, error) { const mustExistSymbol = "runtime.main" x.symbolsOnce.Do(func() { x.symbols = make(map[string]*macho.Symbol, len(x.f.Symtab.Syms)) for _, s := range x.f.Symtab.Syms { s := s // make a copy to prevent aliasing x.symbols[s.Name] = &s } // In the presence of stripping, the symbol table for darwin // binaries will not be empty, but the program symbols will // be missing. if _, ok := x.symbols[mustExistSymbol]; !ok { x.symbolsErr = ErrNoSymbols } }) if x.symbolsErr != nil { return nil, x.symbolsErr } return x.symbols[name], nil } func (x *machoExe) segmentContaining(addr uint64) *macho.Segment { for _, load := range x.f.Loads { seg, ok := load.(*macho.Segment) if ok && seg.Addr <= addr && addr <= seg.Addr+seg.Filesz-1 && seg.Name != "__PAGEZERO" { return seg } } return nil } // SymbolInfo is derived from cmd/internal/objfile/macho.go:pcln. func (x *machoExe) PCLNTab() ([]byte, uint64) { var textOffset uint64 text := x.f.Section("__text") if text != nil { textOffset = uint64(text.Offset) } pclntab := x.f.Section("__gopclntab") if pclntab == nil { return nil, 0 } b, err := pclntab.Data() if err != nil { return nil, 0 } return b, textOffset } vuln-1.0.4/internal/buildinfo/additions_scan.go000066400000000000000000000071471456050377100216210ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package buildinfo // Code in this package is dervied from src/cmd/go/internal/version/version.go // and cmd/go/internal/version/exe.go. import ( "debug/buildinfo" "errors" "fmt" "io" "net/url" "runtime/debug" "strings" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal/gosym" ) func debugModulesToPackagesModules(debugModules []*debug.Module) []*packages.Module { packagesModules := make([]*packages.Module, len(debugModules)) for i, mod := range debugModules { packagesModules[i] = &packages.Module{ Path: mod.Path, Version: mod.Version, } if mod.Replace != nil { packagesModules[i].Replace = &packages.Module{ Path: mod.Replace.Path, Version: mod.Replace.Version, } } } return packagesModules } type Symbol struct { Pkg string `json:"pkg,omitempty"` Name string `json:"name,omitempty"` } // ExtractPackagesAndSymbols extracts symbols, packages, modules from // bin as well as bin's metadata. // // If the symbol table is not available, such as in the case of stripped // binaries, returns module and binary info but without the symbol info. func ExtractPackagesAndSymbols(bin io.ReaderAt) ([]*packages.Module, []Symbol, *debug.BuildInfo, error) { bi, err := buildinfo.Read(bin) if err != nil { return nil, nil, nil, err } funcSymName := gosym.FuncSymName(bi.GoVersion) if funcSymName == "" { return nil, nil, nil, fmt.Errorf("binary built using unsupported Go version: %q", bi.GoVersion) } x, err := openExe(bin) if err != nil { return nil, nil, nil, err } value, base, r, err := x.SymbolInfo(funcSymName) if err != nil { if errors.Is(err, ErrNoSymbols) { // bin is stripped, so return just module info and metadata. return debugModulesToPackagesModules(bi.Deps), nil, bi, nil } return nil, nil, nil, fmt.Errorf("reading %v: %v", funcSymName, err) } pclntab, textOffset := x.PCLNTab() if pclntab == nil { // If we have build information, but not PCLN table, fall // back to much higher granularity vulnerability checking. return debugModulesToPackagesModules(bi.Deps), nil, bi, nil } lineTab := gosym.NewLineTable(pclntab, textOffset) if lineTab == nil { return nil, nil, nil, errors.New("invalid line table") } tab, err := gosym.NewTable(nil, lineTab) if err != nil { return nil, nil, nil, err } pkgSyms := make(map[Symbol]bool) for _, f := range tab.Funcs { if f.Func == nil { continue } pkgName, symName, err := parseName(f.Func.Sym) if err != nil { return nil, nil, nil, err } pkgSyms[Symbol{pkgName, symName}] = true // Collect symbols that were inlined in f. it, err := lineTab.InlineTree(&f, value, base, r) if err != nil { return nil, nil, nil, fmt.Errorf("InlineTree: %v", err) } for _, ic := range it { pkgName, symName, err := parseName(&gosym.Sym{Name: ic.Name}) if err != nil { return nil, nil, nil, err } pkgSyms[Symbol{pkgName, symName}] = true } } var syms []Symbol for ps := range pkgSyms { syms = append(syms, ps) } return debugModulesToPackagesModules(bi.Deps), syms, bi, nil } func parseName(s *gosym.Sym) (pkg, sym string, err error) { symName := s.BaseName() if r := s.ReceiverName(); r != "" { if strings.HasPrefix(r, "(*") { r = strings.Trim(r, "(*)") } symName = fmt.Sprintf("%s.%s", r, symName) } pkgName := s.PackageName() if pkgName != "" { pkgName, err = url.PathUnescape(pkgName) if err != nil { return "", "", err } } return pkgName, symName, nil } vuln-1.0.4/internal/buildinfo/additions_scan_test.go000066400000000000000000000073561456050377100226620ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package buildinfo import ( "fmt" "os" "os/exec" "path/filepath" "sort" "testing" "github.com/google/go-cmp/cmp" "golang.org/x/tools/go/packages/packagestest" "golang.org/x/vuln/internal/test" "golang.org/x/vuln/internal/testenv" ) // testAll executes testing function ft on all valid combinations // of gooss and goarchs. func testAll(t *testing.T, gooss, goarchs []string, ft func(*testing.T, string, string)) { // unsupported platforms for building Go binaries. var unsupported = map[string]bool{ "darwin/386": true, "darwin/arm": true, } for _, g := range gooss { for _, a := range goarchs { goos := g goarch := a ga := goos + "/" + goarch if unsupported[ga] { continue } t.Run(ga, func(t *testing.T) { ft(t, goos, goarch) }) } } } func TestExtractPackagesAndSymbols(t *testing.T) { testAll(t, []string{"linux", "darwin", "windows", "freebsd"}, []string{"amd64", "386", "arm", "arm64"}, func(t *testing.T, goos, goarch string) { binary, done := test.GoBuild(t, "testdata", "", false, "GOOS", goos, "GOARCH", goarch) defer done() f, err := os.Open(binary) if err != nil { t.Fatal(err) } defer f.Close() _, syms, _, err := ExtractPackagesAndSymbols(f) if err != nil { t.Fatal(err) } got := sortedSymbols("main", syms) want := []Symbol{ {"main", "f"}, {"main", "g"}, {"main", "main"}, } if diff := cmp.Diff(want, got); diff != "" { t.Errorf("(-want,+got):%s", diff) } }) } // sortedSymbols gets symbols for pkg and // sorts them for testing purposes. func sortedSymbols(pkg string, syms []Symbol) []Symbol { var s []Symbol for _, ps := range syms { if ps.Pkg == pkg { s = append(s, ps) } } sort.SliceStable(s, func(i, j int) bool { return s[i].Pkg+"."+s[i].Name < s[j].Pkg+"."+s[j].Name }) return s } // Test58509 is supposed to test issue #58509 where a whole // vulnerable function is deleted from the binary so we // cannot detect its presence. // // Note: the issue is still not addressed and the test // expectations are set to fail once it gets addressed. func Test58509(t *testing.T) { testenv.NeedsGoBuild(t) vulnLib := `package bvuln %s debug = true func Vuln() { if debug { return } print("vuln") }` for _, tc := range []struct { gl string want bool }{ {"const", false}, // TODO(https://go.dev/issue/58509): change expectations once issue is addressed {"var", true}, } { tc := tc t.Run(tc.gl, func(t *testing.T) { e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/entry", Files: map[string]interface{}{ "main.go": ` package main import ( "golang.org/bmod/bvuln" ) func main() { bvuln.Vuln() } `, }}, { Name: "golang.org/bmod@v0.5.0", Files: map[string]interface{}{"bvuln/bvuln.go": fmt.Sprintf(vulnLib, tc.gl)}, }, }) defer e.Cleanup() cmd := exec.Command("go", "build", "-o", "entry") cmd.Dir = e.Config.Dir cmd.Env = e.Config.Env out, err := cmd.CombinedOutput() if err != nil || len(out) > 0 { t.Fatalf("failed to build the binary %v %v", err, string(out)) } exe, err := os.Open(filepath.Join(e.Config.Dir, "entry")) if err != nil { t.Fatal(err) } defer exe.Close() _, syms, _, err := ExtractPackagesAndSymbols(exe) if err != nil { t.Fatal(err) } // effectively, Vuln is not optimized away from the program got := len(sortedSymbols("golang.org/bmod/bvuln", syms)) != 0 if got != tc.want { t.Errorf("want %t; got %t", tc.want, got) } }) } } vuln-1.0.4/internal/buildinfo/additions_stripped_122_test.go000066400000000000000000000016571456050377100241520ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.22 // +build go1.22 package buildinfo import ( "os" "testing" "golang.org/x/vuln/internal/test" ) // TestStrippedBinary checks that there is no symbol table for // stripped binaries. func TestStrippedBinary(t *testing.T) { testAll(t, []string{"linux", "windows", "freebsd", "darwin"}, []string{"amd64", "386", "arm", "arm64"}, func(t *testing.T, goos, goarch string) { binary, done := test.GoBuild(t, "testdata", "", true, "GOOS", goos, "GOARCH", goarch) defer done() f, err := os.Open(binary) if err != nil { t.Fatal(err) } defer f.Close() _, syms, _, err := ExtractPackagesAndSymbols(f) if err != nil { t.Fatal(err) } if len(syms) != 0 { t.Errorf("want empty symbol table; got %v symbols", len(syms)) } }) } vuln-1.0.4/internal/buildinfo/additions_stripped_test.go000066400000000000000000000036561456050377100235670ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 && !go1.22 // +build go1.18,!go1.22 package buildinfo import ( "os" "testing" "github.com/google/go-cmp/cmp" "golang.org/x/vuln/internal/test" ) // TestStrippedBinary checks that there is no symbol table for // stripped binaries. This does not include darwin binaries. // For more info, see #61051. func TestStrippedBinary(t *testing.T) { // We exclude darwin as its stripped binaries seem to // preserve the symbol table. See TestStrippedDarwin. testAll(t, []string{"linux", "windows", "freebsd"}, []string{"amd64", "386", "arm", "arm64"}, func(t *testing.T, goos, goarch string) { binary, done := test.GoBuild(t, "testdata", "", true, "GOOS", goos, "GOARCH", goarch) defer done() f, err := os.Open(binary) if err != nil { t.Fatal(err) } defer f.Close() _, syms, _, err := ExtractPackagesAndSymbols(f) if err != nil { t.Fatal(err) } if syms != nil { t.Errorf("want empty symbol table; got %v symbols", len(syms)) } }) } // TestStrippedDarwin checks that the symbol table exists and // is complete on darwin even in the presence of stripping. // For more info, see #61051. func TestStrippedDarwin(t *testing.T) { testAll(t, []string{"darwin"}, []string{"amd64", "386"}, func(t *testing.T, goos, goarch string) { binary, done := test.GoBuild(t, "testdata", "", true, "GOOS", goos, "GOARCH", goarch) defer done() f, err := os.Open(binary) if err != nil { t.Fatal(err) } defer f.Close() _, syms, _, err := ExtractPackagesAndSymbols(f) if err != nil { t.Fatal(err) } got := sortedSymbols("main", syms) want := []Symbol{ {"main", "f"}, {"main", "g"}, {"main", "main"}, } if diff := cmp.Diff(want, got); diff != "" { t.Errorf("(-want,+got):%s", diff) } }) } vuln-1.0.4/internal/buildinfo/buildinfo.go000066400000000000000000000136621456050377100206110ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package buildinfo // Addition: this file is a trimmed and slightly modified version of debug/buildinfo/buildinfo.go import ( "bytes" "debug/elf" "debug/macho" "debug/pe" "fmt" "sync" // "internal/xcoff" "io" ) // Addition: modification of rawBuildInfo in the original file. // openExe returns reader r as an exe. func openExe(r io.ReaderAt) (exe, error) { data := make([]byte, 16) if _, err := r.ReadAt(data, 0); err != nil { return nil, err } if bytes.HasPrefix(data, []byte("\x7FELF")) { e, err := elf.NewFile(r) if err != nil { return nil, err } return &elfExe{f: e}, nil } if bytes.HasPrefix(data, []byte("MZ")) { e, err := pe.NewFile(r) if err != nil { return nil, err } return &peExe{r: r, f: e}, nil } if bytes.HasPrefix(data, []byte("\xFE\xED\xFA")) || bytes.HasPrefix(data[1:], []byte("\xFA\xED\xFE")) { e, err := macho.NewFile(r) if err != nil { return nil, err } return &machoExe{f: e}, nil } return nil, fmt.Errorf("unrecognized executable format") } type exe interface { // ReadData reads and returns up to size byte starting at virtual address addr. ReadData(addr, size uint64) ([]byte, error) // DataStart returns the virtual address of the segment or section that // should contain build information. This is either a specially named section // or the first writable non-zero data segment. DataStart() uint64 PCLNTab() ([]byte, uint64) // Addition: for constructing symbol table SymbolInfo(name string) (uint64, uint64, io.ReaderAt, error) // Addition: for inlining purposes } // elfExe is the ELF implementation of the exe interface. type elfExe struct { f *elf.File symbols map[string]*elf.Symbol // Addition: symbols in the binary symbolsOnce sync.Once // Addition: for computing symbols symbolsErr error // Addition: error for computing symbols } func (x *elfExe) ReadData(addr, size uint64) ([]byte, error) { for _, prog := range x.f.Progs { if prog.Vaddr <= addr && addr <= prog.Vaddr+prog.Filesz-1 { n := prog.Vaddr + prog.Filesz - addr if n > size { n = size } data := make([]byte, n) _, err := prog.ReadAt(data, int64(addr-prog.Vaddr)) if err != nil { return nil, err } return data, nil } } return nil, fmt.Errorf("address not mapped") // Addition: custom error } func (x *elfExe) DataStart() uint64 { for _, s := range x.f.Sections { if s.Name == ".go.buildinfo" { return s.Addr } } for _, p := range x.f.Progs { if p.Type == elf.PT_LOAD && p.Flags&(elf.PF_X|elf.PF_W) == elf.PF_W { return p.Vaddr } } return 0 } // peExe is the PE (Windows Portable Executable) implementation of the exe interface. type peExe struct { r io.ReaderAt f *pe.File symbols map[string]*pe.Symbol // Addition: symbols in the binary symbolsOnce sync.Once // Addition: for computing symbols symbolsErr error // Addition: error for computing symbols } func (x *peExe) imageBase() uint64 { switch oh := x.f.OptionalHeader.(type) { case *pe.OptionalHeader32: return uint64(oh.ImageBase) case *pe.OptionalHeader64: return oh.ImageBase } return 0 } func (x *peExe) ReadData(addr, size uint64) ([]byte, error) { addr -= x.imageBase() for _, sect := range x.f.Sections { if uint64(sect.VirtualAddress) <= addr && addr <= uint64(sect.VirtualAddress+sect.Size-1) { n := uint64(sect.VirtualAddress+sect.Size) - addr if n > size { n = size } data := make([]byte, n) _, err := sect.ReadAt(data, int64(addr-uint64(sect.VirtualAddress))) if err != nil { return nil, err } return data, nil } } return nil, fmt.Errorf("address not mapped") // Addition: custom error } func (x *peExe) DataStart() uint64 { // Assume data is first writable section. const ( IMAGE_SCN_CNT_CODE = 0x00000020 IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040 IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080 IMAGE_SCN_MEM_EXECUTE = 0x20000000 IMAGE_SCN_MEM_READ = 0x40000000 IMAGE_SCN_MEM_WRITE = 0x80000000 IMAGE_SCN_MEM_DISCARDABLE = 0x2000000 IMAGE_SCN_LNK_NRELOC_OVFL = 0x1000000 IMAGE_SCN_ALIGN_32BYTES = 0x600000 ) for _, sect := range x.f.Sections { if sect.VirtualAddress != 0 && sect.Size != 0 && sect.Characteristics&^IMAGE_SCN_ALIGN_32BYTES == IMAGE_SCN_CNT_INITIALIZED_DATA|IMAGE_SCN_MEM_READ|IMAGE_SCN_MEM_WRITE { return uint64(sect.VirtualAddress) + x.imageBase() } } return 0 } // machoExe is the Mach-O (Apple macOS/iOS) implementation of the exe interface. type machoExe struct { f *macho.File symbols map[string]*macho.Symbol // Addition: symbols in the binary symbolsOnce sync.Once // Addition: for computing symbols symbolsErr error // Addition: error for computing symbols } func (x *machoExe) ReadData(addr, size uint64) ([]byte, error) { for _, load := range x.f.Loads { seg, ok := load.(*macho.Segment) if !ok { continue } if seg.Addr <= addr && addr <= seg.Addr+seg.Filesz-1 { if seg.Name == "__PAGEZERO" { continue } n := seg.Addr + seg.Filesz - addr if n > size { n = size } data := make([]byte, n) _, err := seg.ReadAt(data, int64(addr-seg.Addr)) if err != nil { return nil, err } return data, nil } } return nil, fmt.Errorf("address not mapped") // Addition: custom error } func (x *machoExe) DataStart() uint64 { // Look for section named "__go_buildinfo". for _, sec := range x.f.Sections { if sec.Name == "__go_buildinfo" { return sec.Addr } } // Try the first non-empty writable segment. const RW = 3 for _, load := range x.f.Loads { seg, ok := load.(*macho.Segment) if ok && seg.Addr != 0 && seg.Filesz != 0 && seg.Prot == RW && seg.Maxprot == RW { return seg.Addr } } return 0 } vuln-1.0.4/internal/buildinfo/testdata/000077500000000000000000000000001456050377100201105ustar00rootroot00000000000000vuln-1.0.4/internal/buildinfo/testdata/main.go000066400000000000000000000001251456050377100213610ustar00rootroot00000000000000package main func main() { f() } func f() { g() g() } func g() { println(1) } vuln-1.0.4/internal/client/000077500000000000000000000000001456050377100156025ustar00rootroot00000000000000vuln-1.0.4/internal/client/client.go000066400000000000000000000173501456050377100174150ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package client provides an interface for accessing vulnerability // databases, via either HTTP or local filesystem access. // // The protocol is described at https://go.dev/security/vuln/database. package client import ( "bytes" "context" "encoding/json" "errors" "fmt" "net/http" "net/url" "os" "path/filepath" "sort" "strings" "time" "golang.org/x/sync/errgroup" "golang.org/x/vuln/internal/derrors" "golang.org/x/vuln/internal/osv" isem "golang.org/x/vuln/internal/semver" "golang.org/x/vuln/internal/web" ) // A Client for reading vulnerability databases. type Client struct { source } type Options struct { HTTPClient *http.Client } // NewClient returns a client that reads the vulnerability database // in source (an "http" or "file" prefixed URL). // // It supports databases following the API described // in https://go.dev/security/vuln/database#api. func NewClient(source string, opts *Options) (_ *Client, err error) { source = strings.TrimRight(source, "/") uri, err := url.Parse(source) if err != nil { return nil, err } switch uri.Scheme { case "http", "https": return newHTTPClient(uri, opts) case "file": return newLocalClient(uri) default: return nil, fmt.Errorf("source %q has unsupported scheme", uri) } } var errUnknownSchema = errors.New("unrecognized vulndb format; see https://go.dev/security/vuln/database#api for accepted schema") func newHTTPClient(uri *url.URL, opts *Options) (*Client, error) { source := uri.String() // v1 returns true if the source likely follows the V1 schema. v1 := func() bool { return source == "https://vuln.go.dev" || endpointExistsHTTP(source, "index/modules.json.gz") } if v1() { return &Client{source: newHTTPSource(uri.String(), opts)}, nil } return nil, errUnknownSchema } func endpointExistsHTTP(source, endpoint string) bool { r, err := http.Head(source + "/" + endpoint) return err == nil && r.StatusCode == http.StatusOK } func newLocalClient(uri *url.URL) (*Client, error) { dir, err := toDir(uri) if err != nil { return nil, err } // Check if the DB likely follows the v1 schema by // looking for the "index/modules.json" endpoint. if endpointExistsDir(dir, modulesEndpoint+".json") { return &Client{source: newLocalSource(dir)}, nil } // If the DB doesn't follow the v1 schema, // attempt to intepret it as a flat list of OSV files. // This is currently a "hidden" feature, so don't output the // specific error if this fails. src, err := newHybridSource(dir) if err != nil { return nil, errUnknownSchema } return &Client{source: src}, nil } func toDir(uri *url.URL) (string, error) { dir, err := web.URLToFilePath(uri) if err != nil { return "", err } fi, err := os.Stat(dir) if err != nil { return "", err } if !fi.IsDir() { return "", fmt.Errorf("%s is not a directory", dir) } return dir, nil } func endpointExistsDir(dir, endpoint string) bool { _, err := os.Stat(filepath.Join(dir, endpoint)) return err == nil } func NewInMemoryClient(entries []*osv.Entry) (*Client, error) { s, err := newInMemorySource(entries) if err != nil { return nil, err } return &Client{source: s}, nil } func (c *Client) LastModifiedTime(ctx context.Context) (_ time.Time, err error) { derrors.Wrap(&err, "LastModifiedTime()") b, err := c.source.get(ctx, dbEndpoint) if err != nil { return time.Time{}, err } var dbMeta dbMeta if err := json.Unmarshal(b, &dbMeta); err != nil { return time.Time{}, err } return dbMeta.Modified, nil } type ModuleRequest struct { // The module path to filter on. // This must be set (if empty, ByModule errors). Path string // (Optional) If set, only return vulnerabilities affected // at this version. Version string } type ModuleResponse struct { Path string Version string Entries []*osv.Entry } // ByModules returns a list of responses // containing the OSV entries corresponding to each request. // // The order of the requests is preserved, and each request has // a response even if there are no entries (in which case the Entries // field is nil). func (c *Client) ByModules(ctx context.Context, reqs []*ModuleRequest) (_ []*ModuleResponse, err error) { derrors.Wrap(&err, "ByModules(%v)", reqs) metas, err := c.moduleMetas(ctx, reqs) if err != nil { return nil, err } resps := make([]*ModuleResponse, len(reqs)) g, gctx := errgroup.WithContext(ctx) g.SetLimit(10) for i, req := range reqs { i, req := i, req g.Go(func() error { entries, err := c.byModule(gctx, req, metas[i]) if err != nil { return err } resps[i] = &ModuleResponse{ Path: req.Path, Version: req.Version, Entries: entries, } return nil }) } if err := g.Wait(); err != nil { return nil, err } return resps, nil } func (c *Client) moduleMetas(ctx context.Context, reqs []*ModuleRequest) (_ []*moduleMeta, err error) { b, err := c.source.get(ctx, modulesEndpoint) if err != nil { return nil, err } dec, err := newStreamDecoder(b) if err != nil { return nil, err } metas := make([]*moduleMeta, len(reqs)) for dec.More() { var m moduleMeta err := dec.Decode(&m) if err != nil { return nil, err } for i, req := range reqs { if m.Path == req.Path { metas[i] = &m } } } return metas, nil } // byModule returns the OSV entries matching the ModuleRequest, // or (nil, nil) if there are none. func (c *Client) byModule(ctx context.Context, req *ModuleRequest, m *moduleMeta) (_ []*osv.Entry, err error) { // This module isn't in the database. if m == nil { return nil, nil } if req.Path == "" { return nil, fmt.Errorf("module path must be set") } if req.Version != "" && !isem.Valid(req.Version) { return nil, fmt.Errorf("version %s is not valid semver", req.Version) } var ids []string for _, v := range m.Vulns { if v.Fixed == "" || isem.Less(req.Version, v.Fixed) { ids = append(ids, v.ID) } } if len(ids) == 0 { return nil, nil } entries, err := c.byIDs(ctx, ids) if err != nil { return nil, err } // Filter by version. if req.Version != "" { affected := func(e *osv.Entry) bool { for _, a := range e.Affected { if a.Module.Path == req.Path && isem.Affects(a.Ranges, req.Version) { return true } } return false } var filtered []*osv.Entry for _, entry := range entries { if affected(entry) { filtered = append(filtered, entry) } } if len(filtered) == 0 { return nil, nil } } sort.SliceStable(entries, func(i, j int) bool { return entries[i].ID < entries[j].ID }) return entries, nil } func (c *Client) byIDs(ctx context.Context, ids []string) (_ []*osv.Entry, err error) { entries := make([]*osv.Entry, len(ids)) g, gctx := errgroup.WithContext(ctx) g.SetLimit(10) for i, id := range ids { i, id := i, id g.Go(func() error { e, err := c.byID(gctx, id) if err != nil { return err } entries[i] = e return nil }) } if err := g.Wait(); err != nil { return nil, err } return entries, nil } // byID returns the OSV entry with the given ID, // or an error if it does not exist / cannot be unmarshaled. func (c *Client) byID(ctx context.Context, id string) (_ *osv.Entry, err error) { derrors.Wrap(&err, "byID(%s)", id) b, err := c.source.get(ctx, entryEndpoint(id)) if err != nil { return nil, err } var entry osv.Entry if err := json.Unmarshal(b, &entry); err != nil { return nil, err } return &entry, nil } // newStreamDecoder returns a decoder that can be used // to read an array of JSON objects. func newStreamDecoder(b []byte) (*json.Decoder, error) { dec := json.NewDecoder(bytes.NewBuffer(b)) // skip open bracket _, err := dec.Token() if err != nil { return nil, err } return dec, nil } vuln-1.0.4/internal/client/client_test.go000066400000000000000000000171101456050377100204460ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package client import ( "context" "encoding/json" "errors" "fmt" "net/http" "net/http/httptest" "os" "path/filepath" "testing" "time" "github.com/google/go-cmp/cmp" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/web" ) var ( testLegacyVulndb = filepath.Join("testdata", "vulndb-legacy") testLegacyVulndbFileURL = localURL(testLegacyVulndb) testVulndb = filepath.Join("testdata", "vulndb-v1") testVulndbFileURL = localURL(testVulndb) testFlatVulndb = filepath.Join("testdata", "vulndb-v1", "ID") testFlatVulndbFileURL = localURL(testFlatVulndb) testIDs = []string{ "GO-2021-0159", "GO-2022-0229", "GO-2022-0463", "GO-2022-0569", "GO-2022-0572", "GO-2021-0068", "GO-2022-0475", "GO-2022-0476", "GO-2021-0240", "GO-2021-0264", "GO-2022-0273", } ) func newTestServer(dir string) *httptest.Server { mux := http.NewServeMux() mux.Handle("/", http.FileServer(http.Dir(dir))) return httptest.NewServer(mux) } func entries(ids []string) ([]*osv.Entry, error) { if len(ids) == 0 { return nil, nil } entries := make([]*osv.Entry, len(ids)) for i, id := range ids { b, err := os.ReadFile(filepath.Join(testVulndb, idDir, id+".json")) if err != nil { return nil, err } var entry osv.Entry if err := json.Unmarshal(b, &entry); err != nil { return nil, err } entries[i] = &entry } return entries, nil } func localURL(dir string) string { absDir, err := filepath.Abs(dir) if err != nil { panic(fmt.Sprintf("failed to read %s: %v", dir, err)) } u, err := web.URLFromFilePath(absDir) if err != nil { panic(fmt.Sprintf("failed to read %s: %v", dir, err)) } return u.String() } func TestNewClient(t *testing.T) { t.Run("vuln.go.dev", func(t *testing.T) { src := "https://vuln.go.dev" c, err := NewClient(src, nil) if err != nil { t.Fatal(err) } if c == nil { t.Errorf("NewClient(%s) = nil, want instantiated *Client", src) } }) t.Run("http/v1", func(t *testing.T) { srv := newTestServer(testVulndb) t.Cleanup(srv.Close) c, err := NewClient(srv.URL, &Options{HTTPClient: srv.Client()}) if err != nil { t.Fatal(err) } if c == nil { t.Errorf("NewClient(%s) = nil, want instantiated *Client", srv.URL) } }) t.Run("http/legacy", func(t *testing.T) { srv := newTestServer(testLegacyVulndb) t.Cleanup(srv.Close) _, err := NewClient(srv.URL, &Options{HTTPClient: srv.Client()}) if err == nil || !errors.Is(err, errUnknownSchema) { t.Errorf("NewClient() = %s, want error %s", err, errUnknownSchema) } }) t.Run("local/v1", func(t *testing.T) { src := testVulndbFileURL c, err := NewClient(src, nil) if err != nil { t.Fatal(err) } if c == nil { t.Errorf("NewClient(%s) = nil, want instantiated *Client", src) } }) t.Run("local/flat", func(t *testing.T) { src := testFlatVulndbFileURL c, err := NewClient(src, nil) if err != nil { t.Fatal(err) } if c == nil { t.Errorf("NewClient(%s) = nil, want instantiated *Client", src) } }) t.Run("local/legacy", func(t *testing.T) { src := testLegacyVulndbFileURL _, err := NewClient(src, nil) if err == nil || !errors.Is(err, errUnknownSchema) { t.Errorf("NewClient() = %s, want error %s", err, errUnknownSchema) } }) } func TestLastModifiedTime(t *testing.T) { test := func(t *testing.T, c *Client) { got, err := c.LastModifiedTime(context.Background()) if err != nil { t.Fatal(err) } want, err := time.Parse(time.RFC3339, "2023-04-03T15:57:51Z") if err != nil { t.Fatal(err) } if got != want { t.Errorf("LastModifiedTime = %s, want %s", got, want) } } testAllClientTypes(t, test) } func TestByModules(t *testing.T) { tcs := []struct { module *ModuleRequest wantIDs []string }{ { module: &ModuleRequest{ Path: "github.com/beego/beego", }, wantIDs: []string{"GO-2022-0463", "GO-2022-0569", "GO-2022-0572"}, }, { module: &ModuleRequest{ Path: "github.com/beego/beego", // "GO-2022-0463" not affected at this version. Version: "1.12.10", }, wantIDs: []string{"GO-2022-0569", "GO-2022-0572"}, }, { module: &ModuleRequest{ Path: "stdlib", }, wantIDs: []string{"GO-2021-0159", "GO-2021-0240", "GO-2021-0264", "GO-2022-0229", "GO-2022-0273"}, }, { module: &ModuleRequest{ Path: "stdlib", Version: "go1.17", }, wantIDs: []string{"GO-2021-0264", "GO-2022-0273"}, }, { module: &ModuleRequest{ Path: "toolchain", }, wantIDs: []string{"GO-2021-0068", "GO-2022-0475", "GO-2022-0476"}, }, { module: &ModuleRequest{ Path: "toolchain", // All vulns affected at this version. Version: "1.14.13", }, wantIDs: []string{"GO-2021-0068", "GO-2022-0475", "GO-2022-0476"}, }, { module: &ModuleRequest{ Path: "golang.org/x/crypto", }, wantIDs: []string{"GO-2022-0229"}, }, { module: &ModuleRequest{ Path: "golang.org/x/crypto", // Vuln was fixed at exactly this version. Version: "1.13.7", }, wantIDs: nil, }, { module: &ModuleRequest{ Path: "does.not/exist", }, wantIDs: nil, }, { module: &ModuleRequest{ Path: "does.not/exist", Version: "1.0.0", }, wantIDs: nil, }, } // Test each case as an individual call to ByModules. for _, tc := range tcs { t.Run(tc.module.Path+"@"+tc.module.Version, func(t *testing.T) { test := func(t *testing.T, c *Client) { got, err := c.ByModules(context.Background(), []*ModuleRequest{tc.module}) if err != nil { t.Fatal(err) } wantEntries, err := entries(tc.wantIDs) if err != nil { t.Fatal(err) } want := []*ModuleResponse{{ Path: tc.module.Path, Version: tc.module.Version, Entries: wantEntries, }} if diff := cmp.Diff(want, got); diff != "" { t.Errorf("ByModule() mismatch (-want +got):\n%s", diff) } } testAllClientTypes(t, test) }) } // Now create a single test that makes all the requests // in a single call to ByModules. reqs := make([]*ModuleRequest, len(tcs)) want := make([]*ModuleResponse, len(tcs)) for i, tc := range tcs { reqs[i] = tc.module wantEntries, err := entries(tc.wantIDs) if err != nil { t.Fatal(err) } want[i] = &ModuleResponse{ Path: tc.module.Path, Version: tc.module.Version, Entries: wantEntries, } } t.Run("all", func(t *testing.T) { test := func(t *testing.T, c *Client) { got, err := c.ByModules(context.Background(), reqs) if err != nil { t.Fatal(err) } if diff := cmp.Diff(want, got); diff != "" { t.Errorf("ByModules() mismatch (-want +got):\n%s", diff) } } testAllClientTypes(t, test) }) } // testAllClientTypes runs a given test for all client types. func testAllClientTypes(t *testing.T, test func(t *testing.T, c *Client)) { t.Run("http", func(t *testing.T) { srv := newTestServer(testVulndb) t.Cleanup(srv.Close) hc, err := NewClient(srv.URL, &Options{HTTPClient: srv.Client()}) if err != nil { t.Fatal(err) } test(t, hc) }) t.Run("local", func(t *testing.T) { fc, err := NewClient(testVulndbFileURL, nil) if err != nil { t.Fatal(err) } test(t, fc) }) t.Run("hybrid", func(t *testing.T) { fc, err := NewClient(testFlatVulndbFileURL, nil) if err != nil { t.Fatal(err) } test(t, fc) }) t.Run("in-memory", func(t *testing.T) { testEntries, err := entries(testIDs) if err != nil { t.Fatal(err) } mc, err := NewInMemoryClient(testEntries) if err != nil { t.Fatal(err) } test(t, mc) }) } vuln-1.0.4/internal/client/index.go000066400000000000000000000047211456050377100172440ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package client import ( "encoding/json" "fmt" "io/fs" "os" "path/filepath" "golang.org/x/vuln/internal/osv" isem "golang.org/x/vuln/internal/semver" ) // indexFromDir returns a raw index created from a directory // containing OSV entries. // It skips any non-JSON files but errors if any of the JSON files // cannot be unmarshaled into OSV, or have a filename other than .json. func indexFromDir(dir string) (map[string][]byte, error) { idx := newIndex() f := os.DirFS(dir) if err := filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error { fname := d.Name() ext := filepath.Ext(fname) switch { case err != nil: return err case d.IsDir(): return nil case ext != ".json": return nil } b, err := fs.ReadFile(f, d.Name()) if err != nil { return err } var entry osv.Entry if err := json.Unmarshal(b, &entry); err != nil { return err } if fname != entry.ID+".json" { return fmt.Errorf("OSV entries must have filename of the form .json, got %s", fname) } idx.add(&entry) return nil }); err != nil { return nil, err } return idx.raw() } func indexFromEntries(entries []*osv.Entry) (map[string][]byte, error) { idx := newIndex() for _, entry := range entries { idx.add(entry) } return idx.raw() } type index struct { db *dbMeta modules modulesIndex } func newIndex() *index { return &index{ db: &dbMeta{}, modules: make(map[string]*moduleMeta), } } func (i *index) add(entry *osv.Entry) { // Add to db index. if entry.Modified.After(i.db.Modified) { i.db.Modified = entry.Modified } // Add to modules index. for _, affected := range entry.Affected { modulePath := affected.Module.Path if _, ok := i.modules[modulePath]; !ok { i.modules[modulePath] = &moduleMeta{ Path: modulePath, Vulns: []moduleVuln{}, } } module := i.modules[modulePath] module.Vulns = append(module.Vulns, moduleVuln{ ID: entry.ID, Modified: entry.Modified, Fixed: isem.NonSupersededFix(affected.Ranges), }) } } func (i *index) raw() (map[string][]byte, error) { data := make(map[string][]byte) b, err := json.Marshal(i.db) if err != nil { return nil, err } data[dbEndpoint] = b b, err = json.Marshal(i.modules) if err != nil { return nil, err } data[modulesEndpoint] = b return data, nil } vuln-1.0.4/internal/client/schema.go000066400000000000000000000041321456050377100173710ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package client import ( "encoding/json" "path" "sort" "time" ) const ( idDir = "ID" indexDir = "index" ) var ( dbEndpoint = path.Join(indexDir, "db") modulesEndpoint = path.Join(indexDir, "modules") ) func entryEndpoint(id string) string { return path.Join(idDir, id) } // dbMeta contains metadata about the database itself. type dbMeta struct { // Modified is the time the database was last modified, calculated // as the most recent time any single OSV entry was modified. Modified time.Time `json:"modified"` } // moduleMeta contains metadata about a Go module that has one // or more vulnerabilities in the database. // // Found in the "index/modules" endpoint of the vulnerability database. type moduleMeta struct { // Path is the module path. Path string `json:"path"` // Vulns is a list of vulnerabilities that affect this module. Vulns []moduleVuln `json:"vulns"` } // moduleVuln contains metadata about a vulnerability that affects // a certain module. type moduleVuln struct { // ID is a unique identifier for the vulnerability. // The Go vulnerability database issues IDs of the form // GO--. ID string `json:"id"` // Modified is the time the vuln was last modified. Modified time.Time `json:"modified"` // Fixed is the latest version that introduces a fix for the // vulnerability, in SemVer 2.0.0 format, with no leading "v" prefix. Fixed string `json:"fixed,omitempty"` } // modulesIndex represents an in-memory modules index. type modulesIndex map[string]*moduleMeta func (m modulesIndex) MarshalJSON() ([]byte, error) { modules := make([]*moduleMeta, 0, len(m)) for _, module := range m { modules = append(modules, module) } sort.SliceStable(modules, func(i, j int) bool { return modules[i].Path < modules[j].Path }) for _, module := range modules { sort.SliceStable(module.Vulns, func(i, j int) bool { return module.Vulns[i].ID < module.Vulns[j].ID }) } return json.Marshal(modules) } vuln-1.0.4/internal/client/source.go000066400000000000000000000071131456050377100174330ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package client import ( "compress/gzip" "context" "encoding/json" "fmt" "io" "io/fs" "net/http" "os" "path/filepath" "golang.org/x/vuln/internal/derrors" "golang.org/x/vuln/internal/osv" ) type source interface { // get returns the raw, uncompressed bytes at the // requested endpoint, which should be bare with no file extensions // (e.g., "index/modules" instead of "index/modules.json.gz"). // It errors if the endpoint cannot be reached or does not exist // in the expected form. get(ctx context.Context, endpoint string) ([]byte, error) } func newHTTPSource(url string, opts *Options) *httpSource { c := http.DefaultClient if opts != nil && opts.HTTPClient != nil { c = opts.HTTPClient } return &httpSource{url: url, c: c} } // httpSource reads a vulnerability database from an http(s) source. type httpSource struct { url string c *http.Client } func (hs *httpSource) get(ctx context.Context, endpoint string) (_ []byte, err error) { derrors.Wrap(&err, "get(%s)", endpoint) method := http.MethodGet reqURL := fmt.Sprintf("%s/%s", hs.url, endpoint+".json.gz") req, err := http.NewRequestWithContext(ctx, method, reqURL, nil) if err != nil { return nil, err } resp, err := hs.c.Do(req) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("HTTP %s %s returned unexpected status: %s", method, reqURL, resp.Status) } // Uncompress the result. r, err := gzip.NewReader(resp.Body) if err != nil { return nil, err } defer r.Close() return io.ReadAll(r) } func newLocalSource(dir string) *localSource { return &localSource{fs: os.DirFS(dir)} } // localSource reads a vulnerability database from a local file system. type localSource struct { fs fs.FS } func (ls *localSource) get(ctx context.Context, endpoint string) (_ []byte, err error) { derrors.Wrap(&err, "get(%s)", endpoint) return fs.ReadFile(ls.fs, endpoint+".json") } func newHybridSource(dir string) (*hybridSource, error) { index, err := indexFromDir(dir) if err != nil { return nil, err } return &hybridSource{ index: &inMemorySource{data: index}, osv: &localSource{fs: os.DirFS(dir)}, }, nil } // hybridSource reads OSV entries from a local file system, but reads // indexes from an in-memory map. type hybridSource struct { index *inMemorySource osv *localSource } func (hs *hybridSource) get(ctx context.Context, endpoint string) (_ []byte, err error) { derrors.Wrap(&err, "get(%s)", endpoint) dir, file := filepath.Split(endpoint) if filepath.Dir(dir) == indexDir { return hs.index.get(ctx, endpoint) } return hs.osv.get(ctx, file) } // newInMemorySource creates a new in-memory source from OSV entries. // Adapted from x/vulndb/internal/database.go. func newInMemorySource(entries []*osv.Entry) (*inMemorySource, error) { data, err := indexFromEntries(entries) if err != nil { return nil, err } for _, entry := range entries { b, err := json.Marshal(entry) if err != nil { return nil, err } data[entryEndpoint(entry.ID)] = b } return &inMemorySource{data: data}, nil } // inMemorySource reads databases from an in-memory map. // Currently intended for use only in unit tests. type inMemorySource struct { data map[string][]byte } func (db *inMemorySource) get(ctx context.Context, endpoint string) ([]byte, error) { b, ok := db.data[endpoint] if !ok { return nil, fmt.Errorf("no data found at endpoint %q", endpoint) } return b, nil } vuln-1.0.4/internal/client/source_test.go000066400000000000000000000030261456050377100204710ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package client import ( "context" "os" "testing" ) func TestGet(t *testing.T) { tcs := []struct { endpoint string }{ { endpoint: "index/db", }, { endpoint: "index/modules", }, { endpoint: "ID/GO-2021-0068", }, } for _, tc := range tcs { test := func(t *testing.T, s source) { got, err := s.get(context.Background(), tc.endpoint) if err != nil { t.Fatal(err) } want, err := os.ReadFile(testVulndb + "/" + tc.endpoint + ".json") if err != nil { t.Fatal(err) } if string(got) != string(want) { t.Errorf("get(%s) = %s, want %s", tc.endpoint, got, want) } } testAllSourceTypes(t, test) } } // testAllSourceTypes runs a given test for all source types. func testAllSourceTypes(t *testing.T, test func(t *testing.T, s source)) { t.Run("http", func(t *testing.T) { srv := newTestServer(testVulndb) hs := newHTTPSource(srv.URL, &Options{HTTPClient: srv.Client()}) test(t, hs) }) t.Run("local", func(t *testing.T) { test(t, newLocalSource(testVulndb)) }) t.Run("in-memory", func(t *testing.T) { testEntries, err := entries(testIDs) if err != nil { t.Fatal(err) } ms, err := newInMemorySource(testEntries) if err != nil { t.Fatal(err) } test(t, ms) }) t.Run("hybrid", func(t *testing.T) { hs, err := newHybridSource(testFlatVulndb) if err != nil { t.Fatal(err) } test(t, hs) }) } vuln-1.0.4/internal/client/testdata/000077500000000000000000000000001456050377100174135ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-legacy/000077500000000000000000000000001456050377100221475ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-legacy/ID/000077500000000000000000000000001456050377100224435ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-legacy/ID/GO-2021-0157.json000066400000000000000000000015521456050377100246220ustar00rootroot00000000000000{"id":"GO-2021-0157","published":"2022-01-05T20:00:00Z","modified":"2022-08-29T16:50:59Z","aliases":["CVE-2015-5739"],"details":"The MIME header parser treated spaces and hyphens\nas equivalent, which can permit HTTP request smuggling.\n","affected":[{"package":{"name":"stdlib","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.4.3"}]}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2021-0157"},"ecosystem_specific":{"imports":[{"path":"net/textproto","symbols":["CanonicalMIMEHeaderKey","canonicalMIMEHeaderKey"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/11772"},{"type":"FIX","url":"https://go.googlesource.com/go/+/117ddcb83d7f42d6aa72241240af99ded81118e9"},{"type":"REPORT","url":"https://go.dev/issue/53035"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/iSIyW4lM4hY/m/ADuQR4DiDwAJ"}]} vuln-1.0.4/internal/client/testdata/vulndb-legacy/ID/GO-2021-0159.json000066400000000000000000000031351456050377100246230ustar00rootroot00000000000000{"id":"GO-2021-0159","published":"2022-01-05T21:39:14Z","modified":"2022-08-29T16:50:59Z","aliases":["CVE-2015-5739","CVE-2015-5740","CVE-2015-5741"],"details":"HTTP headers were not properly parsed, which allows remote attackers to\nconduct HTTP request smuggling attacks via a request that contains\nContent-Length and Transfer-Encoding header fields.\n","affected":[{"package":{"name":"stdlib","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.4.3"}]}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2021-0159"},"ecosystem_specific":{"imports":[{"path":"net/http","symbols":["CanonicalMIMEHeaderKey","body.readLocked","canonicalMIMEHeaderKey","chunkWriter.writeHeader","fixLength","fixTransferEncoding","readTransfer","transferWriter.shouldSendContentLength","validHeaderFieldByte"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/13148"},{"type":"FIX","url":"https://go.googlesource.com/go/+/26049f6f9171d1190f3bbe05ec304845cfe6399f"},{"type":"FIX","url":"https://go.dev/cl/11772"},{"type":"FIX","url":"https://go.dev/cl/11810"},{"type":"FIX","url":"https://go.dev/cl/12865"},{"type":"FIX","url":"https://go.googlesource.com/go/+/117ddcb83d7f42d6aa72241240af99ded81118e9"},{"type":"FIX","url":"https://go.googlesource.com/go/+/300d9a21583e7cf0149a778a0611e76ff7c6680f"},{"type":"FIX","url":"https://go.googlesource.com/go/+/c2db5f4ccc61ba7df96a747e268a277b802cbb87"},{"type":"REPORT","url":"https://go.dev/issue/12027"},{"type":"REPORT","url":"https://go.dev/issue/11930"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/iSIyW4lM4hY/m/ADuQR4DiDwAJ"}]} vuln-1.0.4/internal/client/testdata/vulndb-legacy/ID/GO-2022-0463.json000066400000000000000000000215141456050377100246230ustar00rootroot00000000000000{ "id": "GO-2022-0463", "published": "2022-07-01T20:06:59Z", "modified": "2022-08-19T22:21:47Z", "aliases": [ "CVE-2022-31259", "GHSA-qx32-f6g6-fcfr" ], "details": "Routes in the beego HTTP router can match unintended patterns.\nThis overly-broad matching may permit an attacker to bypass access\ncontrols.\n\nFor example, the pattern \"/a/b/:name\" can match the URL \"/a.xml/b/\".\nThis may bypass access control applied to the prefix \"/a/\".\n", "affected": [ { "package": { "name": "github.com/beego/beego", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.12.9" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0463" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego", "symbols": [ "App.Run", "ControllerRegister.FindPolicy", "ControllerRegister.FindRouter", "ControllerRegister.ServeHTTP", "FilterRouter.ValidRouter", "InitBeegoBeforeTest", "Run", "RunWithMiddleWares", "TestBeegoInit", "Tree.Match", "Tree.match", "adminApp.Run" ] } ] } }, { "package": { "name": "github.com/beego/beego/v2", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "2.0.3" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0463" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego/v2/server/web", "symbols": [ "AddNamespace", "Any", "AutoPrefix", "AutoRouter", "Compare", "CompareNot", "Controller.Bind", "Controller.BindForm", "Controller.BindXML", "Controller.BindYAML", "Controller.GetSecureCookie", "Controller.ParseForm", "Controller.Render", "Controller.RenderBytes", "Controller.RenderString", "Controller.Resp", "Controller.SaveToFile", "Controller.ServeFormatted", "Controller.ServeXML", "Controller.ServeYAML", "Controller.SetSecureCookie", "Controller.Trace", "Controller.URLFor", "Controller.XMLResp", "Controller.XSRFFormHTML", "Controller.XSRFToken", "Controller.YamlResp", "ControllerRegister.Add", "ControllerRegister.AddAuto", "ControllerRegister.AddAutoPrefix", "ControllerRegister.AddMethod", "ControllerRegister.AddRouterMethod", "ControllerRegister.Any", "ControllerRegister.CtrlAny", "ControllerRegister.CtrlDelete", "ControllerRegister.CtrlGet", "ControllerRegister.CtrlHead", "ControllerRegister.CtrlOptions", "ControllerRegister.CtrlPatch", "ControllerRegister.CtrlPost", "ControllerRegister.CtrlPut", "ControllerRegister.Delete", "ControllerRegister.FindPolicy", "ControllerRegister.FindRouter", "ControllerRegister.Get", "ControllerRegister.Handler", "ControllerRegister.Head", "ControllerRegister.Include", "ControllerRegister.Init", "ControllerRegister.InsertFilter", "ControllerRegister.Options", "ControllerRegister.Patch", "ControllerRegister.Post", "ControllerRegister.Put", "ControllerRegister.ServeHTTP", "ControllerRegister.URLFor", "CtrlAny", "CtrlDelete", "CtrlGet", "CtrlHead", "CtrlOptions", "CtrlPatch", "CtrlPost", "CtrlPut", "Date", "DateParse", "Delete", "Exception", "ExecuteTemplate", "ExecuteViewPathTemplate", "FilterRouter.ValidRouter", "FlashData.Error", "FlashData.Notice", "FlashData.Set", "FlashData.Store", "FlashData.Success", "FlashData.Warning", "Get", "GetConfig", "HTML2str", "Handler", "Head", "Htmlquote", "Htmlunquote", "HttpServer.Any", "HttpServer.AutoPrefix", "HttpServer.AutoRouter", "HttpServer.CtrlAny", "HttpServer.CtrlDelete", "HttpServer.CtrlGet", "HttpServer.CtrlHead", "HttpServer.CtrlOptions", "HttpServer.CtrlPatch", "HttpServer.CtrlPost", "HttpServer.CtrlPut", "HttpServer.Delete", "HttpServer.Get", "HttpServer.Handler", "HttpServer.Head", "HttpServer.Include", "HttpServer.InsertFilter", "HttpServer.Options", "HttpServer.Patch", "HttpServer.Post", "HttpServer.PrintTree", "HttpServer.Put", "HttpServer.RESTRouter", "HttpServer.Router", "HttpServer.RouterWithOpts", "HttpServer.Run", "Include", "InitBeegoBeforeTest", "InsertFilter", "LoadAppConfig", "MapGet", "Namespace.Any", "Namespace.AutoPrefix", "Namespace.AutoRouter", "Namespace.Cond", "Namespace.CtrlAny", "Namespace.CtrlDelete", "Namespace.CtrlGet", "Namespace.CtrlHead", "Namespace.CtrlOptions", "Namespace.CtrlPatch", "Namespace.CtrlPost", "Namespace.CtrlPut", "Namespace.Delete", "Namespace.Filter", "Namespace.Get", "Namespace.Handler", "Namespace.Head", "Namespace.Include", "Namespace.Namespace", "Namespace.Options", "Namespace.Patch", "Namespace.Post", "Namespace.Put", "Namespace.Router", "NewControllerRegister", "NewControllerRegisterWithCfg", "NewHttpServerWithCfg", "NewHttpSever", "NewNamespace", "NotNil", "Options", "ParseForm", "Patch", "Policy", "Post", "PrintTree", "Put", "RESTRouter", "ReadFromRequest", "RenderForm", "Router", "RouterWithOpts", "Run", "RunWithMiddleWares", "TestBeegoInit", "Tree.AddRouter", "Tree.AddTree", "Tree.Match", "Tree.match", "URLFor", "URLMap.GetMap", "URLMap.GetMapData", "adminApp.Run", "adminController.AdminIndex", "adminController.Healthcheck", "adminController.ListConf", "adminController.ProfIndex", "adminController.PrometheusMetrics", "adminController.QpsIndex", "adminController.TaskStatus", "beegoAppConfig.Bool", "beegoAppConfig.DefaultBool" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/beego/beego/pull/4958" }, { "type": "FIX", "url": "https://github.com/beego/beego/commit/64cf44d725c8cc35d782327d333df9cbeb1bf2dd" }, { "type": "WEB", "url": "https://beego.vip" }, { "type": "WEB", "url": "https://github.com/beego/beego/issues/4946" }, { "type": "WEB", "url": "https://github.com/beego/beego/pull/4954" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-31259" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-qx32-f6g6-fcfr" } ] }vuln-1.0.4/internal/client/testdata/vulndb-legacy/ID/GO-2022-0569.json000066400000000000000000000040221456050377100246250ustar00rootroot00000000000000{ "id": "GO-2022-0569", "published": "2022-08-23T13:24:17Z", "modified": "2022-08-23T13:24:17Z", "aliases": [ "CVE-2022-31836", "GHSA-95f9-94vc-665h" ], "details": "The leafInfo.match() function uses path.join()\nto deal with wildcard values which can lead to cross directory risk.\n", "affected": [ { "package": { "name": "github.com/beego/beego", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.12.11" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0569" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego", "symbols": [ "Tree.Match" ] } ] } }, { "package": { "name": "github.com/beego/beego/v2", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "2.0.0" }, { "fixed": "2.0.4" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0569" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego/v2/server/web", "symbols": [ "Tree.Match" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/beego/beego/pull/5025" }, { "type": "FIX", "url": "https://github.com/beego/beego/pull/5025/commits/ea5ae58d40589d249cf577a053e490509de2bf57" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-31836" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-95f9-94vc-665h" } ] }vuln-1.0.4/internal/client/testdata/vulndb-legacy/ID/GO-2022-0572.json000066400000000000000000000036741456050377100246330ustar00rootroot00000000000000{ "id": "GO-2022-0572", "published": "2022-08-22T17:56:17Z", "modified": "2022-08-23T19:54:38Z", "aliases": [ "CVE-2021-30080", "GHSA-28r6-jm5h-mrgg" ], "details": "An issue was discovered in the route lookup process in\nbeego which attackers to bypass access control.\n", "affected": [ { "package": { "name": "github.com/beego/beego", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0572" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego", "symbols": [ "Tree.Match" ] } ] } }, { "package": { "name": "github.com/beego/beego/v2", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "2.0.0" }, { "fixed": "2.0.3" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0572" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego/v2/server/web", "symbols": [ "Tree.Match" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/beego/beego/pull/4459" }, { "type": "FIX", "url": "https://github.com/beego/beego/commit/d5df5e470d0a8ed291930ae802fd7e6b95226519" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-30080" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-28r6-jm5h-mrgg" } ] }vuln-1.0.4/internal/client/testdata/vulndb-legacy/ID/index.json000066400000000000000000000000711456050377100244430ustar00rootroot00000000000000[ "GO-2022-0463", "GO-2022-0569", "GO-2022-0572" ] vuln-1.0.4/internal/client/testdata/vulndb-legacy/aliases.json000066400000000000000000000453201456050377100244670ustar00rootroot00000000000000{ "CVE-2013-10005": [ "GO-2020-0024" ], "CVE-2014-125026": [ "GO-2020-0022" ], "CVE-2014-7189": [ "GO-2021-0154" ], "CVE-2014-8681": [ "GO-2020-0021" ], "CVE-2015-10004": [ "GO-2020-0023" ], "CVE-2015-1340": [ "GO-2021-0071" ], "CVE-2015-5305": [ "GO-2022-0701" ], "CVE-2015-5739": [ "GO-2021-0157", "GO-2021-0159" ], "CVE-2015-5740": [ "GO-2021-0159" ], "CVE-2015-5741": [ "GO-2021-0159" ], "CVE-2015-8618": [ "GO-2021-0160" ], "CVE-2016-15005": [ "GO-2020-0045" ], "CVE-2016-3697": [ "GO-2021-0070" ], "CVE-2016-3958": [ "GO-2021-0163" ], "CVE-2016-3959": [ "GO-2022-0166" ], "CVE-2016-5386": [ "GO-2022-0761" ], "CVE-2016-9121": [ "GO-2020-0010" ], "CVE-2016-9122": [ "GO-2020-0011", "GO-2022-0945" ], "CVE-2016-9123": [ "GO-2020-0009" ], "CVE-2017-1000097": [ "GO-2022-0171" ], "CVE-2017-1000098": [ "GO-2021-0172" ], "CVE-2017-11468": [ "GO-2021-0072" ], "CVE-2017-11480": [ "GO-2022-0643" ], "CVE-2017-15041": [ "GO-2022-0177" ], "CVE-2017-15042": [ "GO-2021-0178" ], "CVE-2017-15133": [ "GO-2020-0006" ], "CVE-2017-17831": [ "GO-2021-0073" ], "CVE-2017-18367": [ "GO-2020-0007" ], "CVE-2017-20146": [ "GO-2020-0020" ], "CVE-2017-3204": [ "GO-2020-0013" ], "CVE-2017-8932": [ "GO-2022-0187" ], "CVE-2018-1103": [ "GO-2020-0026" ], "CVE-2018-12018": [ "GO-2021-0075" ], "CVE-2018-14632": [ "GO-2021-0076" ], "CVE-2018-16873": [ "GO-2022-0189" ], "CVE-2018-16874": [ "GO-2022-0190" ], "CVE-2018-16875": [ "GO-2022-0191" ], "CVE-2018-16886": [ "GO-2021-0077" ], "CVE-2018-17075": [ "GO-2021-0078" ], "CVE-2018-17142": [ "GO-2022-0192" ], "CVE-2018-17143": [ "GO-2022-0193" ], "CVE-2018-17419": [ "GO-2020-0028" ], "CVE-2018-17846": [ "GO-2020-0014" ], "CVE-2018-17847": [ "GO-2022-0197" ], "CVE-2018-17848": [ "GO-2022-0197" ], "CVE-2018-18206": [ "GO-2021-0079" ], "CVE-2018-21246": [ "GO-2020-0043" ], "CVE-2018-25046": [ "GO-2020-0025" ], "CVE-2018-6558": [ "GO-2020-0027" ], "CVE-2018-6574": [ "GO-2022-0201" ], "CVE-2018-7187": [ "GO-2022-0203" ], "CVE-2019-0210": [ "GO-2021-0101" ], "CVE-2019-10214": [ "GO-2021-0081" ], "CVE-2019-10223": [ "GO-2022-0621" ], "CVE-2019-11250": [ "GO-2021-0065" ], "CVE-2019-11254": [ "GO-2020-0036" ], "CVE-2019-11289": [ "GO-2021-0102" ], "CVE-2019-11840": [ "GO-2022-0209" ], "CVE-2019-11939": [ "GO-2021-0082" ], "CVE-2019-12496": [ "GO-2021-0083" ], "CVE-2019-13209": [ "GO-2022-0755" ], "CVE-2019-14809": [ "GO-2022-0211" ], "CVE-2019-16276": [ "GO-2022-0212" ], "CVE-2019-16354": [ "GO-2021-0084" ], "CVE-2019-16884": [ "GO-2021-0085" ], "CVE-2019-17110": [ "GO-2022-0621" ], "CVE-2019-17596": [ "GO-2022-0213" ], "CVE-2019-19619": [ "GO-2021-0086" ], "CVE-2019-19794": [ "GO-2020-0008" ], "CVE-2019-19921": [ "GO-2021-0087" ], "CVE-2019-20786": [ "GO-2020-0038" ], "CVE-2019-25072": [ "GO-2020-0037" ], "CVE-2019-25073": [ "GO-2020-0032" ], "CVE-2019-3564": [ "GO-2021-0088" ], "CVE-2019-6486": [ "GO-2022-0217" ], "CVE-2019-9512": [ "GO-2022-0536" ], "CVE-2019-9514": [ "GO-2022-0536" ], "CVE-2019-9634": [ "GO-2022-0220" ], "CVE-2020-0601": [ "GO-2022-0535" ], "CVE-2020-10675": [ "GO-2021-0089" ], "CVE-2020-12666": [ "GO-2020-0039" ], "CVE-2020-14039": [ "GO-2021-0223" ], "CVE-2020-14040": [ "GO-2020-0015" ], "CVE-2020-15091": [ "GO-2021-0090" ], "CVE-2020-15106": [ "GO-2020-0005" ], "CVE-2020-15111": [ "GO-2021-0091", "GO-2021-0108" ], "CVE-2020-15112": [ "GO-2020-0005" ], "CVE-2020-15216": [ "GO-2020-0050" ], "CVE-2020-15222": [ "GO-2021-0092", "GO-2021-0110" ], "CVE-2020-15223": [ "GO-2021-0109" ], "CVE-2020-15586": [ "GO-2021-0224" ], "CVE-2020-16845": [ "GO-2021-0142" ], "CVE-2020-24553": [ "GO-2021-0226" ], "CVE-2020-25614": [ "GO-2020-0048" ], "CVE-2020-26160": [ "GO-2020-0017" ], "CVE-2020-26242": [ "GO-2021-0103" ], "CVE-2020-26264": [ "GO-2021-0063" ], "CVE-2020-26265": [ "GO-2021-0105" ], "CVE-2020-26290": [ "GO-2020-0050" ], "CVE-2020-26521": [ "GO-2022-0402" ], "CVE-2020-26892": [ "GO-2022-0380" ], "CVE-2020-27813": [ "GO-2020-0019" ], "CVE-2020-27846": [ "GO-2021-0058" ], "CVE-2020-27847": [ "GO-2020-0050" ], "CVE-2020-28362": [ "GO-2021-0069" ], "CVE-2020-28366": [ "GO-2022-0475" ], "CVE-2020-28367": [ "GO-2022-0476" ], "CVE-2020-28483": [ "GO-2020-0029", "GO-2021-0052" ], "CVE-2020-29242": [ "GO-2021-0097" ], "CVE-2020-29243": [ "GO-2021-0097" ], "CVE-2020-29244": [ "GO-2021-0097" ], "CVE-2020-29245": [ "GO-2021-0097" ], "CVE-2020-29509": [ "GO-2021-0060" ], "CVE-2020-29529": [ "GO-2021-0094" ], "CVE-2020-29652": [ "GO-2021-0227" ], "CVE-2020-35380": [ "GO-2021-0059" ], "CVE-2020-35381": [ "GO-2021-0057" ], "CVE-2020-36066": [ "GO-2022-0957" ], "CVE-2020-36067": [ "GO-2021-0054" ], "CVE-2020-36559": [ "GO-2020-0033" ], "CVE-2020-36560": [ "GO-2020-0034" ], "CVE-2020-36561": [ "GO-2020-0035" ], "CVE-2020-36562": [ "GO-2020-0040" ], "CVE-2020-36563": [ "GO-2020-0047" ], "CVE-2020-36564": [ "GO-2020-0049" ], "CVE-2020-36565": [ "GO-2021-0051" ], "CVE-2020-36566": [ "GO-2021-0106" ], "CVE-2020-36567": [ "GO-2020-0001" ], "CVE-2020-36568": [ "GO-2020-0003" ], "CVE-2020-36569": [ "GO-2020-0004" ], "CVE-2020-7664": [ "GO-2021-0228" ], "CVE-2020-7667": [ "GO-2020-0042" ], "CVE-2020-7668": [ "GO-2020-0041" ], "CVE-2020-7711": [ "GO-2020-0046" ], "CVE-2020-7919": [ "GO-2022-0229" ], "CVE-2020-8564": [ "GO-2021-0066" ], "CVE-2020-8565": [ "GO-2021-0064" ], "CVE-2020-8568": [ "GO-2022-0629" ], "CVE-2020-8911": [ "GO-2022-0646" ], "CVE-2020-8918": [ "GO-2021-0095" ], "CVE-2020-8945": [ "GO-2020-0002", "GO-2020-0031", "GO-2021-0096" ], "CVE-2020-9283": [ "GO-2020-0012" ], "CVE-2021-20206": [ "GO-2022-0230" ], "CVE-2021-20291": [ "GO-2021-0100" ], "CVE-2021-20329": [ "GO-2021-0111", "GO-2021-0112" ], "CVE-2021-21237": [ "GO-2021-0098" ], "CVE-2021-21272": [ "GO-2021-0099" ], "CVE-2021-22133": [ "GO-2022-0706" ], "CVE-2021-23409": [ "GO-2022-0233" ], "CVE-2021-23772": [ "GO-2022-0272" ], "CVE-2021-27918": [ "GO-2021-0234" ], "CVE-2021-27919": [ "GO-2021-0067" ], "CVE-2021-28681": [ "GO-2021-0104" ], "CVE-2021-29272": [ "GO-2022-0762" ], "CVE-2021-29482": [ "GO-2020-0016" ], "CVE-2021-30080": [ "GO-2022-0572" ], "CVE-2021-3114": [ "GO-2021-0235" ], "CVE-2021-3115": [ "GO-2021-0068" ], "CVE-2021-3121": [ "GO-2021-0053" ], "CVE-2021-3127": [ "GO-2022-0386" ], "CVE-2021-31525": [ "GO-2022-0236" ], "CVE-2021-32690": [ "GO-2022-0384" ], "CVE-2021-32721": [ "GO-2021-0237" ], "CVE-2021-33194": [ "GO-2021-0238" ], "CVE-2021-33195": [ "GO-2021-0239" ], "CVE-2021-33196": [ "GO-2021-0240" ], "CVE-2021-33197": [ "GO-2021-0241" ], "CVE-2021-33198": [ "GO-2021-0242" ], "CVE-2021-34558": [ "GO-2021-0243" ], "CVE-2021-3538": [ "GO-2020-0018", "GO-2022-0244" ], "CVE-2021-3602": [ "GO-2022-0345" ], "CVE-2021-36221": [ "GO-2021-0245" ], "CVE-2021-3761": [ "GO-2022-0246" ], "CVE-2021-3762": [ "GO-2022-0346" ], "CVE-2021-38297": [ "GO-2022-0247" ], "CVE-2021-38561": [ "GO-2021-0113" ], "CVE-2021-3907": [ "GO-2022-0248" ], "CVE-2021-3910": [ "GO-2022-0251" ], "CVE-2021-3911": [ "GO-2022-0252" ], "CVE-2021-3912": [ "GO-2022-0253" ], "CVE-2021-39137": [ "GO-2022-0254" ], "CVE-2021-39293": [ "GO-2022-0273" ], "CVE-2021-41173": [ "GO-2022-0256" ], "CVE-2021-41230": [ "GO-2021-0258" ], "CVE-2021-41771": [ "GO-2021-0263" ], "CVE-2021-41772": [ "GO-2021-0264" ], "CVE-2021-42248": [ "GO-2021-0265" ], "CVE-2021-4235": [ "GO-2021-0061" ], "CVE-2021-4236": [ "GO-2021-0107" ], "CVE-2021-4238": [ "GO-2022-0411" ], "CVE-2021-4239": [ "GO-2022-0425" ], "CVE-2021-42576": [ "GO-2022-0588" ], "CVE-2021-42836": [ "GO-2021-0265" ], "CVE-2021-43784": [ "GO-2022-0274" ], "CVE-2021-44716": [ "GO-2022-0288" ], "CVE-2021-44717": [ "GO-2022-0289" ], "CVE-2021-46398": [ "GO-2022-0563" ], "CVE-2022-0317": [ "GO-2022-0294" ], "CVE-2022-1227": [ "GO-2022-0558" ], "CVE-2022-1705": [ "GO-2022-0525" ], "CVE-2022-1962": [ "GO-2022-0515" ], "CVE-2022-1996": [ "GO-2022-0619" ], "CVE-2022-21221": [ "GO-2022-0355" ], "CVE-2022-21235": [ "GO-2022-0414" ], "CVE-2022-21698": [ "GO-2022-0322" ], "CVE-2022-21708": [ "GO-2022-0300" ], "CVE-2022-23628": [ "GO-2022-0316" ], "CVE-2022-23772": [ "GO-2021-0317" ], "CVE-2022-23773": [ "GO-2022-0318" ], "CVE-2022-23806": [ "GO-2021-0319" ], "CVE-2022-24675": [ "GO-2022-0433" ], "CVE-2022-24778": [ "GO-2021-0412" ], "CVE-2022-24912": [ "GO-2022-0534" ], "CVE-2022-24921": [ "GO-2021-0347" ], "CVE-2022-24968": [ "GO-2021-0321", "GO-2022-0370", "GO-2022-0947" ], "CVE-2022-2582": [ "GO-2022-0391" ], "CVE-2022-2583": [ "GO-2022-0400" ], "CVE-2022-2584": [ "GO-2022-0422" ], "CVE-2022-25856": [ "GO-2022-0492" ], "CVE-2022-25891": [ "GO-2022-0528" ], "CVE-2022-26945": [ "GO-2022-0586" ], "CVE-2022-27191": [ "GO-2021-0356" ], "CVE-2022-27536": [ "GO-2022-0434" ], "CVE-2022-27651": [ "GO-2022-0417" ], "CVE-2022-28131": [ "GO-2022-0521" ], "CVE-2022-28327": [ "GO-2022-0435" ], "CVE-2022-28946": [ "GO-2022-0587" ], "CVE-2022-28948": [ "GO-2022-0603" ], "CVE-2022-29173": [ "GO-2022-0444" ], "CVE-2022-29189": [ "GO-2022-0461" ], "CVE-2022-29190": [ "GO-2022-0460" ], "CVE-2022-29222": [ "GO-2022-0462" ], "CVE-2022-29526": [ "GO-2022-0493" ], "CVE-2022-29804": [ "GO-2022-0533" ], "CVE-2022-29810": [ "GO-2022-0438" ], "CVE-2022-30321": [ "GO-2022-0586" ], "CVE-2022-30322": [ "GO-2022-0586" ], "CVE-2022-30323": [ "GO-2022-0586" ], "CVE-2022-30580": [ "GO-2022-0532" ], "CVE-2022-30629": [ "GO-2022-0531" ], "CVE-2022-30630": [ "GO-2022-0527" ], "CVE-2022-30631": [ "GO-2022-0524" ], "CVE-2022-30632": [ "GO-2022-0522" ], "CVE-2022-30633": [ "GO-2022-0523" ], "CVE-2022-30634": [ "GO-2022-0477" ], "CVE-2022-30635": [ "GO-2022-0526" ], "CVE-2022-3064": [ "GO-2022-0956" ], "CVE-2022-31022": [ "GO-2022-0470" ], "CVE-2022-31053": [ "GO-2022-0564" ], "CVE-2022-31145": [ "GO-2022-0519" ], "CVE-2022-31259": [ "GO-2022-0463" ], "CVE-2022-31836": [ "GO-2022-0569" ], "CVE-2022-32148": [ "GO-2022-0520" ], "CVE-2022-32189": [ "GO-2022-0537" ], "CVE-2022-33082": [ "GO-2022-0574" ], "CVE-2022-36009": [ "GO-2022-0952" ], "CVE-2022-37315": [ "GO-2022-0942" ], "GHSA-25xm-hr59-7c27": [ "GO-2020-0016" ], "GHSA-27rq-4943-qcwp": [ "GO-2022-0438" ], "GHSA-28r2-q6m8-9hpx": [ "GO-2022-0586" ], "GHSA-28r6-jm5h-mrgg": [ "GO-2022-0572" ], "GHSA-2c64-vj8g-vwrq": [ "GO-2022-0380" ], "GHSA-2m4x-4q9j-w97g": [ "GO-2022-0574" ], "GHSA-2v6x-frw8-7r7f": [ "GO-2022-0621" ], "GHSA-2x32-jm95-2cpx": [ "GO-2020-0050" ], "GHSA-3fx4-7f69-5mmg": [ "GO-2020-0009" ], "GHSA-3x58-xr87-2fcj": [ "GO-2022-0762" ], "GHSA-3xh2-74w9-5vxm": [ "GO-2020-0019" ], "GHSA-44r7-7p62-q3fr": [ "GO-2020-0008" ], "GHSA-477v-w82m-634j": [ "GO-2022-0528" ], "GHSA-4hq8-gmxx-h6w9": [ "GO-2021-0058" ], "GHSA-4w5x-x539-ppf5": [ "GO-2022-0380" ], "GHSA-56hp-xqp3-w2jf": [ "GO-2022-0384" ], "GHSA-5796-p3m6-9qj4": [ "GO-2021-0102" ], "GHSA-58v3-j75h-xr49": [ "GO-2020-0007" ], "GHSA-59hh-656j-3p7v": [ "GO-2022-0256" ], "GHSA-5cgx-vhfp-6cf9": [ "GO-2022-0629" ], "GHSA-5gjg-jgh4-gppm": [ "GO-2021-0107" ], "GHSA-5mxh-2qfv-4g7j": [ "GO-2022-0251" ], "GHSA-5rcv-m4m3-hfh7": [ "GO-2020-0015" ], "GHSA-5x29-3hr9-6wpw": [ "GO-2021-0095" ], "GHSA-62mh-w5cv-p88c": [ "GO-2022-0386" ], "GHSA-6635-c626-vj4r": [ "GO-2022-0414" ], "GHSA-66vw-v2x9-hw75": [ "GO-2022-0558" ], "GHSA-66x3-6cw3-v5gj": [ "GO-2022-0444" ], "GHSA-6jqj-f58p-mrw3": [ "GO-2021-0090" ], "GHSA-72wf-hwcq-65h9": [ "GO-2022-0563" ], "GHSA-733f-44f3-3frw": [ "GO-2020-0039" ], "GHSA-74xm-qj29-cq8p": [ "GO-2021-0104" ], "GHSA-75rw-34q6-72cr": [ "GO-2022-0564" ], "GHSA-7638-r9r3-rmjj": [ "GO-2022-0345" ], "GHSA-76wf-9vgp-pj7w": [ "GO-2022-0391" ], "GHSA-77gc-fj98-665h": [ "GO-2020-0011", "GO-2022-0945" ], "GHSA-7gfg-6934-mqq2": [ "GO-2020-0038" ], "GHSA-7jr6-prv4-5wf5": [ "GO-2022-0384" ], "GHSA-7mqr-2v3q-v2wm": [ "GO-2021-0109" ], "GHSA-7qw8-847f-pggm": [ "GO-2021-0100" ], "GHSA-85p9-j7c9-v4gr": [ "GO-2021-0081" ], "GHSA-86r9-39j9-99wp": [ "GO-2020-0010" ], "GHSA-88jf-7rch-32qc": [ "GO-2020-0041" ], "GHSA-8c26-wmh5-6g9v": [ "GO-2021-0356" ], "GHSA-8v99-48m9-c8pm": [ "GO-2021-0412" ], "GHSA-8vrw-m3j9-j27c": [ "GO-2021-0057" ], "GHSA-9423-6c93-gpp8": [ "GO-2020-0042" ], "GHSA-95f9-94vc-665h": [ "GO-2022-0569" ], "GHSA-9856-9gg9-qcmq": [ "GO-2022-0254" ], "GHSA-99cg-575x-774p": [ "GO-2022-0294" ], "GHSA-9cx9-x2gp-9qvh": [ "GO-2021-0091", "GO-2021-0108" ], "GHSA-9jcx-pr2f-qvq5": [ "GO-2020-0028" ], "GHSA-9q3g-m353-cp4p": [ "GO-2022-0643" ], "GHSA-9r5x-fjv3-q6h4": [ "GO-2022-0386" ], "GHSA-9w9f-6mg8-jp7w": [ "GO-2022-0470" ], "GHSA-9x4h-8wgm-8xfg": [ "GO-2022-0503" ], "GHSA-c3g4-w6cv-6v7h": [ "GO-2022-0417" ], "GHSA-c3h9-896r-86jm": [ "GO-2021-0053" ], "GHSA-c8xp-8mf3-62h9": [ "GO-2022-0246" ], "GHSA-c9gm-7rfj-8w5h": [ "GO-2021-0265" ], "GHSA-cg3q-j54f-5p7p": [ "GO-2022-0322" ], "GHSA-cjjc-xp8v-855w": [ "GO-2022-0229" ], "GHSA-cjr4-fv6c-f3mv": [ "GO-2022-0586" ], "GHSA-cm8f-h6j3-p25c": [ "GO-2022-0460" ], "GHSA-cqh2-vc2f-q4fh": [ "GO-2022-0248" ], "GHSA-cx3w-xqmc-84g5": [ "GO-2021-0098" ], "GHSA-cx94-mrg9-rq4j": [ "GO-2022-0461" ], "GHSA-f5pg-7wfw-84q9": [ "GO-2022-0646" ], "GHSA-f6mq-5m25-4r72": [ "GO-2021-0111", "GO-2021-0112" ], "GHSA-f6px-w8rh-7r89": [ "GO-2021-0084" ], "GHSA-fcgg-rvwg-jv58": [ "GO-2022-0586" ], "GHSA-ffhg-7mh4-33c4": [ "GO-2020-0012" ], "GHSA-fgv8-vj5c-2ppq": [ "GO-2021-0085" ], "GHSA-fh74-hm69-rqjw": [ "GO-2021-0087" ], "GHSA-fx95-883v-4q4h": [ "GO-2022-0355" ], "GHSA-g3vv-g2j5-45f2": [ "GO-2022-0422" ], "GHSA-g5v4-5x39-vwhx": [ "GO-2021-0099" ], "GHSA-g9mp-8g3h-3c5c": [ "GO-2022-0425" ], "GHSA-g9wh-3vrx-r7hg": [ "GO-2022-0253" ], "GHSA-h289-x5wc-xcv8": [ "GO-2022-0370" ], "GHSA-h2fg-54x9-5qhq": [ "GO-2022-0402" ], "GHSA-h2x7-2ff6-v32p": [ "GO-2022-0400" ], "GHSA-h395-qcrw-5vmq": [ "GO-2020-0029", "GO-2021-0052" ], "GHSA-h3qm-jrrf-cgj3": [ "GO-2022-0942" ], "GHSA-h6xx-pmxh-3wgp": [ "GO-2021-0077" ], "GHSA-hcw3-j74m-qc58": [ "GO-2022-0316" ], "GHSA-hmm9-r2m2-qg9w": [ "GO-2022-0402" ], "GHSA-hp87-p4gw-j4gq": [ "GO-2022-0603" ], "GHSA-j6wp-3859-vxfg": [ "GO-2021-0258" ], "GHSA-j756-f273-xhp4": [ "GO-2022-0386" ], "GHSA-jcxc-rh6w-wf49": [ "GO-2022-0272" ], "GHSA-jm5c-rv3w-w83m": [ "GO-2021-0103" ], "GHSA-jp32-vmm6-3vf5": [ "GO-2022-0701" ], "GHSA-jq7p-26h5-w78r": [ "GO-2021-0101" ], "GHSA-jxqv-jcvh-7gr4": [ "GO-2022-0534" ], "GHSA-m658-p24x-p74r": [ "GO-2021-0321", "GO-2022-0370", "GO-2022-0947" ], "GHSA-m6wg-2mwg-4rfq": [ "GO-2020-0002", "GO-2020-0031", "GO-2021-0096" ], "GHSA-m9hp-7r99-94h5": [ "GO-2020-0050" ], "GHSA-mh3m-8c74-74xh": [ "GO-2022-0300" ], "GHSA-mj9r-wwm8-7q52": [ "GO-2021-0237" ], "GHSA-mq47-6wwv-v79w": [ "GO-2022-0346" ], "GHSA-mr6h-chqp-p9g2": [ "GO-2020-0021" ], "GHSA-p55x-7x9v-q8m4": [ "GO-2020-0006" ], "GHSA-ppj4-34rq-v8j9": [ "GO-2021-0265" ], "GHSA-q3j5-32m5-58c2": [ "GO-2021-0070" ], "GHSA-q547-gmf8-8jr7": [ "GO-2020-0050" ], "GHSA-q6gq-997w-f55g": [ "GO-2021-0142" ], "GHSA-qj26-7grj-whg3": [ "GO-2020-0027" ], "GHSA-qpgx-64h2-gc3c": [ "GO-2022-0492" ], "GHSA-qq97-vm5h-rrhg": [ "GO-2022-0379" ], "GHSA-qqc5-rgcc-cjqh": [ "GO-2022-0706" ], "GHSA-qwrj-9hmp-gpxh": [ "GO-2022-0519" ], "GHSA-qx32-f6g6-fcfr": [ "GO-2022-0463" ], "GHSA-r33q-22hv-j29q": [ "GO-2021-0063" ], "GHSA-r48q-9g5r-8q2h": [ "GO-2022-0619" ], "GHSA-rmh2-65xw-9m6q": [ "GO-2021-0089" ], "GHSA-v3q9-2p3m-7g43": [ "GO-2021-0092", "GO-2021-0110" ], "GHSA-v95c-p5hm-xq8f": [ "GO-2022-0274" ], "GHSA-vc3x-gx6c-g99f": [ "GO-2021-0079" ], "GHSA-vpx7-vm66-qx8r": [ "GO-2021-0228" ], "GHSA-w45j-f832-hxvh": [ "GO-2022-0462" ], "GHSA-w6ww-fmfx-2x22": [ "GO-2022-0252" ], "GHSA-w73w-5m7g-f7qc": [ "GO-2020-0017" ], "GHSA-w942-gw6m-p62c": [ "GO-2021-0059" ], "GHSA-wjm3-fq3r-5x46": [ "GO-2022-0957" ], "GHSA-wmwp-pggc-h4mj": [ "GO-2021-0086" ], "GHSA-wxc4-f4m6-wwqv": [ "GO-2020-0036" ], "GHSA-x24g-9w7v-vprh": [ "GO-2022-0586" ], "GHSA-x4rg-4545-4w7w": [ "GO-2021-0088" ], "GHSA-x7f3-62pm-9p38": [ "GO-2022-0587" ], "GHSA-x95h-979x-cf3j": [ "GO-2022-0588" ], "GHSA-xcf7-q56x-78gh": [ "GO-2022-0233" ], "GHSA-xg2h-wx96-xgxr": [ "GO-2022-0411" ], "GHSA-xhg2-rvm8-w2jh": [ "GO-2022-0755" ], "GHSA-xhqq-x44f-9fgg": [ "GO-2021-0060" ], "GHSA-xjqr-g762-pxwp": [ "GO-2022-0230" ], "GHSA-xw37-57qp-9mm4": [ "GO-2021-0105" ] } vuln-1.0.4/internal/client/testdata/vulndb-legacy/github.com/000077500000000000000000000000001456050377100242065ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-legacy/github.com/!bee!go/000077500000000000000000000000001456050377100253715ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-legacy/github.com/!bee!go/beego.json000066400000000000000000000333361456050377100273550ustar00rootroot00000000000000[ { "id": "GO-2022-0463", "published": "2022-07-01T20:06:59Z", "modified": "2022-08-19T22:21:47Z", "aliases": [ "CVE-2022-31259", "GHSA-qx32-f6g6-fcfr" ], "details": "Routes in the beego HTTP router can match unintended patterns.\nThis overly-broad matching may permit an attacker to bypass access\ncontrols.\n\nFor example, the pattern \"/a/b/:name\" can match the URL \"/a.xml/b/\".\nThis may bypass access control applied to the prefix \"/a/\".\n", "affected": [ { "package": { "name": "github.com/beego/beego", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.12.9" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0463" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego", "symbols": [ "App.Run", "ControllerRegister.FindPolicy", "ControllerRegister.FindRouter", "ControllerRegister.ServeHTTP", "FilterRouter.ValidRouter", "InitBeegoBeforeTest", "Run", "RunWithMiddleWares", "TestBeegoInit", "Tree.Match", "Tree.match", "adminApp.Run" ] } ] } }, { "package": { "name": "github.com/beego/beego/v2", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "2.0.3" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0463" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego/v2/server/web", "symbols": [ "AddNamespace", "Any", "AutoPrefix", "AutoRouter", "Compare", "CompareNot", "Controller.Bind", "Controller.BindForm", "Controller.BindXML", "Controller.BindYAML", "Controller.GetSecureCookie", "Controller.ParseForm", "Controller.Render", "Controller.RenderBytes", "Controller.RenderString", "Controller.Resp", "Controller.SaveToFile", "Controller.ServeFormatted", "Controller.ServeXML", "Controller.ServeYAML", "Controller.SetSecureCookie", "Controller.Trace", "Controller.URLFor", "Controller.XMLResp", "Controller.XSRFFormHTML", "Controller.XSRFToken", "Controller.YamlResp", "ControllerRegister.Add", "ControllerRegister.AddAuto", "ControllerRegister.AddAutoPrefix", "ControllerRegister.AddMethod", "ControllerRegister.AddRouterMethod", "ControllerRegister.Any", "ControllerRegister.CtrlAny", "ControllerRegister.CtrlDelete", "ControllerRegister.CtrlGet", "ControllerRegister.CtrlHead", "ControllerRegister.CtrlOptions", "ControllerRegister.CtrlPatch", "ControllerRegister.CtrlPost", "ControllerRegister.CtrlPut", "ControllerRegister.Delete", "ControllerRegister.FindPolicy", "ControllerRegister.FindRouter", "ControllerRegister.Get", "ControllerRegister.Handler", "ControllerRegister.Head", "ControllerRegister.Include", "ControllerRegister.Init", "ControllerRegister.InsertFilter", "ControllerRegister.Options", "ControllerRegister.Patch", "ControllerRegister.Post", "ControllerRegister.Put", "ControllerRegister.ServeHTTP", "ControllerRegister.URLFor", "CtrlAny", "CtrlDelete", "CtrlGet", "CtrlHead", "CtrlOptions", "CtrlPatch", "CtrlPost", "CtrlPut", "Date", "DateParse", "Delete", "Exception", "ExecuteTemplate", "ExecuteViewPathTemplate", "FilterRouter.ValidRouter", "FlashData.Error", "FlashData.Notice", "FlashData.Set", "FlashData.Store", "FlashData.Success", "FlashData.Warning", "Get", "GetConfig", "HTML2str", "Handler", "Head", "Htmlquote", "Htmlunquote", "HttpServer.Any", "HttpServer.AutoPrefix", "HttpServer.AutoRouter", "HttpServer.CtrlAny", "HttpServer.CtrlDelete", "HttpServer.CtrlGet", "HttpServer.CtrlHead", "HttpServer.CtrlOptions", "HttpServer.CtrlPatch", "HttpServer.CtrlPost", "HttpServer.CtrlPut", "HttpServer.Delete", "HttpServer.Get", "HttpServer.Handler", "HttpServer.Head", "HttpServer.Include", "HttpServer.InsertFilter", "HttpServer.Options", "HttpServer.Patch", "HttpServer.Post", "HttpServer.PrintTree", "HttpServer.Put", "HttpServer.RESTRouter", "HttpServer.Router", "HttpServer.RouterWithOpts", "HttpServer.Run", "Include", "InitBeegoBeforeTest", "InsertFilter", "LoadAppConfig", "MapGet", "Namespace.Any", "Namespace.AutoPrefix", "Namespace.AutoRouter", "Namespace.Cond", "Namespace.CtrlAny", "Namespace.CtrlDelete", "Namespace.CtrlGet", "Namespace.CtrlHead", "Namespace.CtrlOptions", "Namespace.CtrlPatch", "Namespace.CtrlPost", "Namespace.CtrlPut", "Namespace.Delete", "Namespace.Filter", "Namespace.Get", "Namespace.Handler", "Namespace.Head", "Namespace.Include", "Namespace.Namespace", "Namespace.Options", "Namespace.Patch", "Namespace.Post", "Namespace.Put", "Namespace.Router", "NewControllerRegister", "NewControllerRegisterWithCfg", "NewHttpServerWithCfg", "NewHttpSever", "NewNamespace", "NotNil", "Options", "ParseForm", "Patch", "Policy", "Post", "PrintTree", "Put", "RESTRouter", "ReadFromRequest", "RenderForm", "Router", "RouterWithOpts", "Run", "RunWithMiddleWares", "TestBeegoInit", "Tree.AddRouter", "Tree.AddTree", "Tree.Match", "Tree.match", "URLFor", "URLMap.GetMap", "URLMap.GetMapData", "adminApp.Run", "adminController.AdminIndex", "adminController.Healthcheck", "adminController.ListConf", "adminController.ProfIndex", "adminController.PrometheusMetrics", "adminController.QpsIndex", "adminController.TaskStatus", "beegoAppConfig.Bool", "beegoAppConfig.DefaultBool" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/beego/beego/pull/4958" }, { "type": "FIX", "url": "https://github.com/beego/beego/commit/64cf44d725c8cc35d782327d333df9cbeb1bf2dd" }, { "type": "WEB", "url": "https://beego.vip" }, { "type": "WEB", "url": "https://github.com/beego/beego/issues/4946" }, { "type": "WEB", "url": "https://github.com/beego/beego/pull/4954" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-31259" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-qx32-f6g6-fcfr" } ] }, { "id": "GO-2022-0569", "published": "2022-08-23T13:24:17Z", "modified": "2022-08-23T13:24:17Z", "aliases": [ "CVE-2022-31836", "GHSA-95f9-94vc-665h" ], "details": "The leafInfo.match() function uses path.join()\nto deal with wildcard values which can lead to cross directory risk.\n", "affected": [ { "package": { "name": "github.com/beego/beego", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.12.11" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0569" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego", "symbols": [ "Tree.Match" ] } ] } }, { "package": { "name": "github.com/beego/beego/v2", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "2.0.0" }, { "fixed": "2.0.4" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0569" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego/v2/server/web", "symbols": [ "Tree.Match" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/beego/beego/pull/5025" }, { "type": "FIX", "url": "https://github.com/beego/beego/pull/5025/commits/ea5ae58d40589d249cf577a053e490509de2bf57" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-31836" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-95f9-94vc-665h" } ] }, { "id": "GO-2022-0572", "published": "2022-08-22T17:56:17Z", "modified": "2022-08-23T19:54:38Z", "aliases": [ "CVE-2021-30080", "GHSA-28r6-jm5h-mrgg" ], "details": "An issue was discovered in the route lookup process in\nbeego which attackers to bypass access control.\n", "affected": [ { "package": { "name": "github.com/beego/beego", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0572" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego", "symbols": [ "Tree.Match" ] } ] } }, { "package": { "name": "github.com/beego/beego/v2", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "2.0.0" }, { "fixed": "2.0.3" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0572" }, "ecosystem_specific": { "imports": [ { "path": "github.com/beego/beego/v2/server/web", "symbols": [ "Tree.Match" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/beego/beego/pull/4459" }, { "type": "FIX", "url": "https://github.com/beego/beego/commit/d5df5e470d0a8ed291930ae802fd7e6b95226519" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-30080" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-28r6-jm5h-mrgg" } ] } ]vuln-1.0.4/internal/client/testdata/vulndb-legacy/github.com/tidwall/000077500000000000000000000000001456050377100256465ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-legacy/github.com/tidwall/gjson.json000066400000000000000000000213651456050377100276700ustar00rootroot00000000000000[ {"id": "GO-2021-0054", "published": "2021-04-14T20:04:52Z", "modified": "2022-08-19T22:21:47Z", "aliases": [ "CVE-2020-36067" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.6" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0054" }, "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Result.ForEach", "unwrap" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/bf4efcb3c18d1825b2988603dea5909140a5302b" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/196" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2020-36067" } ] }, { "id": "GO-2021-0059", "published": "2021-04-14T20:04:52Z", "modified": "2022-08-19T22:21:47Z", "aliases": [ "CVE-2020-35380", "GHSA-w942-gw6m-p62c" ], "details": "Due to improper bounds checking, maliciously crafted JSON objects can cause an out-of-bounds panic. If parsing user input, this may be used as a denial of service vector.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.6.4" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0059" }, "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "sqaush" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/f0ee9ebde4b619767ae4ac03e8e42addb530f6bc" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/192" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2020-35380" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-w942-gw6m-p62c" } ] }, { "id": "GO-2021-0265", "published": "2022-01-14T17:30:24Z", "modified": "2022-08-19T22:21:47Z", "aliases": [ "CVE-2020-36066", "CVE-2021-42836", "GHSA-ppj4-34rq-v8j9", "GHSA-wjm3-fq3r-5x46" ], "details": "GJSON allowed a ReDoS (regular expression denial of service) attack.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2021-0265" }, "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "match.Match" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/590010fdac311cc8990ef5c97448d4fec8f29944" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/compare/v1.9.2...v1.9.3" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/236" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2020-36066" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-42836" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-ppj4-34rq-v8j9" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-wjm3-fq3r-5x46" } ] }, { "id": "GO-2022-0592", "published": "2022-08-15T18:06:07Z", "modified": "2022-08-19T22:21:47Z", "aliases": [ "CVE-2021-42248", "GHSA-c9gm-7rfj-8w5h" ], "details": "A maliciously crafted path can cause Get and other query functions to consume excessive amounts of CPU and time.", "affected": [ { "package": { "name": "github.com/tidwall/gjson", "ecosystem": "Go" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "0" }, { "fixed": "1.9.3" } ] } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-2022-0592" }, "ecosystem_specific": { "imports": [ { "path": "github.com/tidwall/gjson", "symbols": [ "Get", "GetBytes", "GetMany", "GetManyBytes", "Result.Get", "queryMatches" ] } ] } } ], "references": [ { "type": "FIX", "url": "https://github.com/tidwall/gjson/commit/77a57fda87dca6d0d7d4627d512a630f89a91c96" }, { "type": "WEB", "url": "https://github.com/tidwall/gjson/issues/237" }, { "type": "WEB", "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-42248" }, { "type": "WEB", "url": "https://github.com/advisories/GHSA-c9gm-7rfj-8w5h" } ] } ] vuln-1.0.4/internal/client/testdata/vulndb-legacy/index.json000066400000000000000000000001611456050377100241470ustar00rootroot00000000000000{ "github.com/BeeGo/beego": "2022-08-23T19:54:38Z", "github.com/tidwall/gjson": "2022-08-23T19:54:38Z" } vuln-1.0.4/internal/client/testdata/vulndb-v1/000077500000000000000000000000001456050377100212315ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/000077500000000000000000000000001456050377100215255ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2021-0068.json000066400000000000000000000021721456050377100237040ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2021-0068","modified":"2023-04-03T15:57:51Z","published":"2021-04-14T20:04:52Z","aliases":["CVE-2021-3115"],"details":"The go command may execute arbitrary code at build time when using cgo on Windows. This can be triggered by running go get on a malicious module, or any other time the code is built.","affected":[{"package":{"name":"toolchain","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.14.14"},{"introduced":"1.15.0"},{"fixed":"1.15.7"}]}],"ecosystem_specific":{"imports":[{"path":"cmd/go","goos":["windows"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/284783"},{"type":"FIX","url":"https://go.googlesource.com/go/+/953d1feca9b21af075ad5fc8a3dad096d3ccc3a0"},{"type":"REPORT","url":"https://go.dev/issue/43783"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/mperVMGa98w/m/yo5W5wnvAAAJ"},{"type":"FIX","url":"https://go.dev/cl/284780"},{"type":"FIX","url":"https://go.googlesource.com/go/+/46e2e2e9d99925bbf724b12693c6d3e27a95d6a0"}],"credits":[{"name":"RyotaK"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2021-0068"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2021-0068.json.gz000066400000000000000000000012131456050377100243160ustar00rootroot00000000000000o6ƿul%=r\ن#4#Ʌ^줰RҞgf~̠ x yCjqs(çUf|-D029YJUyY@wI,>K봨lV?缄C 02ML0 2pg&I!5 f@vвȲWc|L dѡb͙9Aihl 51rL3С _B<׶(l B~B 0"@Iz)_A4ñhyv. o&:4o1Lnf!|$]J&bHhJ;k +HVBմҚm(RUY.i]QZ9gYU/RJV,UdyXFYFkVX@J9yb)Y˲⤠BREEԋ &\eB.xȊl+DVO/U{?aBaOuĻg8;4q7݂c'#0zΆ5$Φ/3}vp(i-a]g}t)rOnyh; &yUӺvuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2021-0240.json000066400000000000000000000020571456050377100236760ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2021-0240","modified":"2023-04-03T15:57:51Z","published":"2022-02-17T17:33:25Z","aliases":["CVE-2021-33196"],"details":"NewReader and OpenReader can cause a panic or an unrecoverable fatal error when reading an archive that claims to contain a large number of files, regardless of its actual size.","affected":[{"package":{"name":"stdlib","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.15.13"},{"introduced":"1.16.0"},{"fixed":"1.16.5"}]}],"ecosystem_specific":{"imports":[{"path":"archive/zip","symbols":["Reader.init"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/318909"},{"type":"FIX","url":"https://go.googlesource.com/go/+/74242baa4136c7a9132a8ccd9881354442788c8c"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/RgCMkAEQjSI"},{"type":"REPORT","url":"https://go.dev/issue/46242"}],"credits":[{"name":"the OSS-Fuzz project for discovering this issue and\nEmmanuel Odeke for reporting it\n"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2021-0240"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2021-0240.json.gz000066400000000000000000000012161456050377100243110ustar00rootroot00000000000000|ݎ6_ꏒ6p\nhbcj$1H {AX4$?9sfx':뙬FC<)*uY,/37l$<ˋ8+xjo`J?$~,Y'zk$5GI9 R>}Tv8;;/{gkD#|"D#~{UXV`LR-bY/rݬ7ͺKdb}R-\=Tf]7*BP3z$?uT)N^3#6 |9G2 8F4,[=gҚlHB˚๷@ԓ= l ^APrGF =Ly4'ZP{*bDI%-4a>8bG2=4"["{g3@Oj}('f,{Aٟg:"GR7mMGPΦlf2@z;u}$y B5[t#:F>c(<[:%oxZ=PܶȄyhع,&n <IM"res@c(c:RnWXE&Ǽ=yRn'R%ifh = ~rǻh[!^Χ1EDY>([ }!ާL84]:c߼xs&8&ns)ًhk*"/翝ʼ?`7JO'Z>$,bF]㍈F=ƣȄ[ӿ9i,x:<"<͟"Ӣ}o]!u6Y;k;MNNR.PtVfuUokZU["TK+,i?n~MfM@cd$XoW)͇w6${?QQ_./"$)>}ܕk/2@۸F;=ܣ ^>dCp*7&EpHܢE_(t7iS*jqvuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0229.json000066400000000000000000000030121456050377100236760ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0229","modified":"2023-04-03T15:57:51Z","published":"2022-07-06T18:23:48Z","aliases":["CVE-2020-7919","GHSA-cjjc-xp8v-855w"],"details":"On 32-bit architectures, a malformed input to crypto/x509 or the ASN.1 parsing functions of golang.org/x/crypto/cryptobyte can lead to a panic.\n\nThe malformed certificate can be delivered via a crypto/tls connection to a client, or to a server that accepts client certificates. net/http clients can be made to crash by an HTTPS server, while net/http servers that accept client certificates will recover the panic and are unaffected.","affected":[{"package":{"name":"stdlib","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.12.16"},{"introduced":"1.13.0"},{"fixed":"1.13.7"}]}],"ecosystem_specific":{"imports":[{"path":"crypto/x509"}]}},{"package":{"name":"golang.org/x/crypto","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.0.0-20200124225646-8b5121be2f68"}]}],"ecosystem_specific":{"imports":[{"path":"golang.org/x/crypto/cryptobyte"}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/216680"},{"type":"FIX","url":"https://go.googlesource.com/go/+/b13ce14c4a6aa59b7b041ad2b6eed2d23e15b574"},{"type":"FIX","url":"https://go.dev/cl/216677"},{"type":"REPORT","url":"https://go.dev/issue/36837"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/Hsw4mHYc470"}],"credits":[{"name":"Project Wycheproof"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0229"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0229.json.gz000066400000000000000000000014011456050377100243150ustar00rootroot00000000000000TMo6+\/R-Mmm,FHbV"rbd=d|3dK=~ّuh(Gi!UAoC&B\ATh:Hd&gE.2'0e\ a|7Hf`БzꟄ+>.OO2|6pe@EU砀[R3U-!뱫bJg0i7K\1co{-l@nX=jю5CD6K~ʽ'&Q#P+}֟3nI֫ZI\*JbujG*SUFkN,vZ;;g(% -s"1M>nScEIkYgv{s:)ȞU1KҜi u55IOU4OP~ņ8ƞNIS?%1r&'n2:)F9.cpZ+q|޻lx|< $'ߓb. 8 T:5|k&Q%JX <ܔ$Qjbv,iy_~FAS\Ǎ*ŲI1MGΌVR$M7&!.y* s\Ɋc%ʜHge^ 3A9~O%ʹ4ߤE|[a8C|lZQKe|WrN`T: YDҳ{`gdKttqMߍ/>_I:! vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0273.json000066400000000000000000000021331456050377100237000ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0273","modified":"2023-04-03T15:57:51Z","published":"2022-05-18T18:23:31Z","aliases":["CVE-2021-39293"],"details":"The NewReader and OpenReader functions in archive/zip can cause a panic or an unrecoverable fatal error when reading an archive that claims to contain a large number of files, regardless of its actual size. This is caused by an incomplete fix for CVE-2021-33196.","affected":[{"package":{"name":"stdlib","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.16.8"},{"introduced":"1.17.0"},{"fixed":"1.17.1"}]}],"ecosystem_specific":{"imports":[{"path":"archive/zip","symbols":["NewReader","OpenReader"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/343434"},{"type":"FIX","url":"https://go.googlesource.com/go/+/bacbc33439b124ffd7392c91a5f5d96eca8c0c0b"},{"type":"REPORT","url":"https://go.dev/issue/47801"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/dx9d7IOseHw"}],"credits":[{"name":"OSS-Fuzz Project and Emmanuel Odeke"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0273"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0273.json.gz000066400000000000000000000012331456050377100243170ustar00rootroot00000000000000|TM6+Z}^:pZFZ40'Ib"~nFB'3 zqO_켲+̓21B%ŸqE#TyȊ2VqVuTOpk|uo*ʪ\ yX}>OJ ot$ u،FeeԙW5 F@0QL8̎jP uԱ$igu7T!X@k6(>-9yR$Hz9 ˬ904[$eK漚Er#  1Bֿܛ)BG]`xf|fޖ Q,e8El2ʓ..S7<7wMtN| (1V`UtaK_[܌4vl>|# _ikT\b񭵭foG'8O[$jQrWŪibӺY ڊLd{<)GNWm'{/O8$Ku z[>9X'3G^[Oc\OrIoފi;4)[vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0463.json000066400000000000000000000145631456050377100237130ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0463","modified":"2023-04-03T15:57:51Z","published":"2022-07-01T20:06:59Z","aliases":["CVE-2022-31259","GHSA-qx32-f6g6-fcfr"],"details":"Routes in the beego HTTP router can match unintended patterns. This overly-broad matching may permit an attacker to bypass access controls.\n\nFor example, the pattern \"/a/b/:name\" can match the URL \"/a.xml/b/\". This may bypass access control applied to the prefix \"/a/\".","affected":[{"package":{"name":"github.com/astaxie/beego","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/astaxie/beego","symbols":["App.Run","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.ServeHTTP","FilterRouter.ValidRouter","InitBeegoBeforeTest","Run","RunWithMiddleWares","TestBeegoInit","Tree.Match","adminApp.Run"]}]}},{"package":{"name":"github.com/beego/beego","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.12.9"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/beego/beego","symbols":["App.Run","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.ServeHTTP","FilterRouter.ValidRouter","InitBeegoBeforeTest","Run","RunWithMiddleWares","TestBeegoInit","Tree.Match","Tree.match","adminApp.Run"]}]}},{"package":{"name":"github.com/beego/beego/v2","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"2.0.3"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/beego/beego/v2/server/web","symbols":["AddNamespace","AddViewPath","Any","AutoPrefix","AutoRouter","BuildTemplate","Compare","CompareNot","Controller.Abort","Controller.Bind","Controller.BindForm","Controller.BindJSON","Controller.BindProtobuf","Controller.BindXML","Controller.BindYAML","Controller.CheckXSRFCookie","Controller.CustomAbort","Controller.Delete","Controller.DestroySession","Controller.Get","Controller.GetBool","Controller.GetFile","Controller.GetFloat","Controller.GetInt","Controller.GetInt16","Controller.GetInt32","Controller.GetInt64","Controller.GetInt8","Controller.GetSecureCookie","Controller.GetString","Controller.GetStrings","Controller.GetUint16","Controller.GetUint32","Controller.GetUint64","Controller.GetUint8","Controller.Head","Controller.Input","Controller.IsAjax","Controller.JSONResp","Controller.Options","Controller.ParseForm","Controller.Patch","Controller.Post","Controller.Put","Controller.Redirect","Controller.Render","Controller.RenderBytes","Controller.RenderString","Controller.Resp","Controller.SaveToFile","Controller.SaveToFileWithBuffer","Controller.ServeFormatted","Controller.ServeJSON","Controller.ServeJSONP","Controller.ServeXML","Controller.ServeYAML","Controller.SessionRegenerateID","Controller.SetData","Controller.SetSecureCookie","Controller.Trace","Controller.URLFor","Controller.XMLResp","Controller.XSRFFormHTML","Controller.XSRFToken","Controller.YamlResp","ControllerRegister.Add","ControllerRegister.AddAuto","ControllerRegister.AddAutoPrefix","ControllerRegister.AddMethod","ControllerRegister.AddRouterMethod","ControllerRegister.Any","ControllerRegister.CtrlAny","ControllerRegister.CtrlDelete","ControllerRegister.CtrlGet","ControllerRegister.CtrlHead","ControllerRegister.CtrlOptions","ControllerRegister.CtrlPatch","ControllerRegister.CtrlPost","ControllerRegister.CtrlPut","ControllerRegister.Delete","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.Get","ControllerRegister.GetContext","ControllerRegister.Handler","ControllerRegister.Head","ControllerRegister.Include","ControllerRegister.Init","ControllerRegister.InsertFilter","ControllerRegister.Options","ControllerRegister.Patch","ControllerRegister.Post","ControllerRegister.Put","ControllerRegister.ServeHTTP","ControllerRegister.URLFor","CtrlAny","CtrlDelete","CtrlGet","CtrlHead","CtrlOptions","CtrlPatch","CtrlPost","CtrlPut","Date","DateFormat","DateParse","Delete","Exception","ExecuteTemplate","ExecuteViewPathTemplate","FileSystem.Open","FilterRouter.ValidRouter","FlashData.Error","FlashData.Notice","FlashData.Set","FlashData.Store","FlashData.Success","FlashData.Warning","Get","GetConfig","HTML2str","Handler","Head","Htmlquote","Htmlunquote","HttpServer.Any","HttpServer.AutoPrefix","HttpServer.AutoRouter","HttpServer.CtrlAny","HttpServer.CtrlDelete","HttpServer.CtrlGet","HttpServer.CtrlHead","HttpServer.CtrlOptions","HttpServer.CtrlPatch","HttpServer.CtrlPost","HttpServer.CtrlPut","HttpServer.Delete","HttpServer.Get","HttpServer.Handler","HttpServer.Head","HttpServer.Include","HttpServer.InsertFilter","HttpServer.LogAccess","HttpServer.Options","HttpServer.Patch","HttpServer.Post","HttpServer.PrintTree","HttpServer.Put","HttpServer.RESTRouter","HttpServer.Router","HttpServer.RouterWithOpts","HttpServer.Run","Include","InitBeegoBeforeTest","InsertFilter","LoadAppConfig","LogAccess","MapGet","Namespace.Any","Namespace.AutoPrefix","Namespace.AutoRouter","Namespace.Cond","Namespace.CtrlAny","Namespace.CtrlDelete","Namespace.CtrlGet","Namespace.CtrlHead","Namespace.CtrlOptions","Namespace.CtrlPatch","Namespace.CtrlPost","Namespace.CtrlPut","Namespace.Delete","Namespace.Filter","Namespace.Get","Namespace.Handler","Namespace.Head","Namespace.Include","Namespace.Namespace","Namespace.Options","Namespace.Patch","Namespace.Post","Namespace.Put","Namespace.Router","NewControllerRegister","NewControllerRegisterWithCfg","NewHttpServerWithCfg","NewHttpSever","NewNamespace","NotNil","Options","ParseForm","Patch","Policy","Post","PrintTree","Put","RESTRouter","ReadFromRequest","RenderForm","Router","RouterWithOpts","Run","RunWithMiddleWares","TestBeegoInit","Tree.AddRouter","Tree.AddTree","Tree.Match","Tree.match","URLFor","URLMap.GetMap","URLMap.GetMapData","Walk","adminApp.Run","adminController.AdminIndex","adminController.Healthcheck","adminController.ListConf","adminController.ProfIndex","adminController.PrometheusMetrics","adminController.QpsIndex","adminController.TaskStatus","beegoAppConfig.Bool","beegoAppConfig.DefaultBool"]}]}}],"references":[{"type":"FIX","url":"https://github.com/beego/beego/pull/4958"},{"type":"FIX","url":"https://github.com/beego/beego/commit/64cf44d725c8cc35d782327d333df9cbeb1bf2dd"},{"type":"WEB","url":"https://beego.vip"},{"type":"WEB","url":"https://github.com/beego/beego/issues/4946"},{"type":"WEB","url":"https://github.com/beego/beego/pull/4954"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0463"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0463.json.gz000066400000000000000000000033551456050377100243270ustar00rootroot00000000000000ܙ[s8KCoB'[!adv1hcKnIR[/Swt97Kb 18CglD4F_z^z(f (g㳋_FIxE?Xyq||v`Gorz|s 7 1K%PKnZluZ-1b,RB%+R±V[",zkpu&tc`%c"-L-,%߁[YCϨ,+}S-8KYS+:}[<>ܵrŔ Y8I"F!$lW(!R`o?Zцmv|XH'j!AHUt!Q× yTf"4 R_>>*!IH|a CfΏI8"]g/`CL ,"[Ӆ˗wrhJ" <|)GS"jW2+(jg"3%0j?\@3=y5"&. Ai`˜]$6A[-V_%W* Csy]`Ț[ؙ6f K1;,qvg-̰et* w+SQ%Yw06o8It T=),jr{->+';юOIaKeJX6pMڶ%k.6d]vOYwO@ RQw0 YxO( KHdD؜KwL:Q=5\j-/$d\=TI"Kn3żq۽zZTB̔㩫"Qx}Sʉ4b s9G&x%Zj+mɸ#W{Ɯf_yYDU=!e^枽q#e*;eK&:rSg /cm"ό0`rya)b,[LMVwV`Cr[`mV$l39F[ m1i*͋-|LIi(Jo&IRdm 3d/.DyNVՔB_3}"CH:6gAc ΀iT8DeVqU%miSӖ24*M&.Ԭ`򑨻]iDp488VTwQfGm,SH'}g-篾' ~I)>3lg/y`4}p$HПќk9g1-b_g"x_J,S5N?oQl!ԯ?!M_R1Jv<$i˳/Q鯏Y鞏p4 .3ς/лa^kX֡UoIIc:D;32Bʿx$gÜv.[LUsvuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0475.json000066400000000000000000000021621456050377100237060ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0475","modified":"2023-04-03T15:57:51Z","published":"2022-07-28T17:24:30Z","aliases":["CVE-2020-28366"],"details":"The go command may execute arbitrary code at build time when cgo is in use. This may occur when running go get on a malicious package, or any other command that builds untrusted code.\n\nThis can be caused by malicious unquoted symbol name in a linked object file.","affected":[{"package":{"name":"toolchain","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.14.12"},{"introduced":"1.15.0"},{"fixed":"1.15.5"}]}],"ecosystem_specific":{"imports":[{"path":"cmd/go","symbols":["Builder.cgo"]},{"path":"cmd/cgo","symbols":["dynimport"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/269658"},{"type":"FIX","url":"https://go.googlesource.com/go/+/062e0e5ce6df339dc26732438ad771f73dbf2292"},{"type":"REPORT","url":"https://go.dev/issue/42559"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/NpBGTTmKzpM"}],"credits":[{"name":"Chris Brown and Tempus Ex"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0475"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0475.json.gz000066400000000000000000000012421456050377100243230ustar00rootroot00000000000000|ݎ6_e0CY.7pHSlhb9ؕH?κ޽vR9 xF'z#YL LPI[m FVQ?MQ݇sIˑ2䌭z]X[ɊoUZ|7,DBJDh5N^]'{Q2 &xcY.TtF+-'}i0GoK-Y&5OβΤ2yT}_ LRaƬ3wYaS%h#۲|m%[\nE-e2n w?r.PfUx[ kd3݊km~?cJ’TY\Mo'khq vK7DI.à'dPx(mrvuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0476.json000066400000000000000000000020701456050377100237050ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0476","modified":"2023-04-03T15:57:51Z","published":"2022-07-28T17:24:43Z","aliases":["CVE-2020-28367"],"details":"The go command may execute arbitrary code at build time when cgo is in use. This may occur when running go get on a malicious package, or any other command that builds untrusted code.\n\nThis can be caused by malicious gcc flags specified via a cgo directive.","affected":[{"package":{"name":"toolchain","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.14.12"},{"introduced":"1.15.0"},{"fixed":"1.15.5"}]}],"ecosystem_specific":{"imports":[{"path":"cmd/go","symbols":["validCompilerFlags"]}]}}],"references":[{"type":"FIX","url":"https://go.dev/cl/267277"},{"type":"FIX","url":"https://go.googlesource.com/go/+/da7aa86917811a571e6634b45a457f918b8e6561"},{"type":"REPORT","url":"https://go.dev/issue/42556"},{"type":"WEB","url":"https://groups.google.com/g/golang-announce/c/NpBGTTmKzpM"}],"credits":[{"name":"Imre Rad"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0476"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0476.json.gz000066400000000000000000000012121456050377100243210ustar00rootroot00000000000000|ͮ6_meɔh "MqkE#cH q~BNa]Js8/@,tM!-wW,Wm >j+ܬjۮBSGrnWvۮj3Kp(@|׫riZ8d )t)DŽ3dόH^Ḡ0>Q L(t`ڲ(gA"gOjfE9ː.62Hrɿ/vhYOL` $Yk`U`a"$N.R{Q(:I9AAw(2 9D2\3hy>|=\6z'Xfkv|W9/2:bfr:aaddΦw'|̤Gop=\羞Ɋ[}d 1N+ rIBEٴe.WΩK^P.)+~*$ocrjMW5Vu{|ŷO_?>Iʺn{wi 7gBZ.YA(~^O`NIxmQO R@y4{J-a-8vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0569.json000066400000000000000000000140341456050377100237130ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0569","modified":"2023-04-03T15:57:51Z","published":"2022-08-23T13:24:17Z","aliases":["CVE-2022-31836","GHSA-95f9-94vc-665h"],"details":"The leafInfo.match() function uses path.join() to deal with wildcard values which can lead to cross directory risk.","affected":[{"package":{"name":"github.com/astaxie/beego","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/astaxie/beego","symbols":["App.Run","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.ServeHTTP","FilterRouter.ValidRouter","InitBeegoBeforeTest","Run","RunWithMiddleWares","TestBeegoInit","Tree.Match","adminApp.Run"]}]}},{"package":{"name":"github.com/beego/beego","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.12.11"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/beego/beego","symbols":["App.Run","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.ServeHTTP","FilterRouter.ValidRouter","InitBeegoBeforeTest","Run","RunWithMiddleWares","TestBeegoInit","Tree.Match","adminApp.Run"]}]}},{"package":{"name":"github.com/beego/beego/v2","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"2.0.0"},{"fixed":"2.0.4"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/beego/beego/v2/server/web","symbols":["AddNamespace","AddViewPath","Any","AutoPrefix","AutoRouter","BuildTemplate","Compare","CompareNot","Controller.Abort","Controller.Bind","Controller.BindForm","Controller.BindJSON","Controller.BindProtobuf","Controller.BindXML","Controller.BindYAML","Controller.CheckXSRFCookie","Controller.CustomAbort","Controller.Delete","Controller.DestroySession","Controller.Get","Controller.GetBool","Controller.GetFile","Controller.GetFloat","Controller.GetInt","Controller.GetInt16","Controller.GetInt32","Controller.GetInt64","Controller.GetInt8","Controller.GetSecureCookie","Controller.GetString","Controller.GetStrings","Controller.GetUint16","Controller.GetUint32","Controller.GetUint64","Controller.GetUint8","Controller.Head","Controller.Input","Controller.IsAjax","Controller.JSONResp","Controller.Options","Controller.ParseForm","Controller.Patch","Controller.Post","Controller.Put","Controller.Redirect","Controller.Render","Controller.RenderBytes","Controller.RenderString","Controller.Resp","Controller.SaveToFile","Controller.SaveToFileWithBuffer","Controller.ServeFormatted","Controller.ServeJSON","Controller.ServeJSONP","Controller.ServeXML","Controller.ServeYAML","Controller.SessionRegenerateID","Controller.SetData","Controller.SetSecureCookie","Controller.Trace","Controller.URLFor","Controller.XMLResp","Controller.XSRFFormHTML","Controller.XSRFToken","Controller.YamlResp","ControllerRegister.Add","ControllerRegister.AddAuto","ControllerRegister.AddAutoPrefix","ControllerRegister.AddMethod","ControllerRegister.AddRouterMethod","ControllerRegister.Any","ControllerRegister.CtrlAny","ControllerRegister.CtrlDelete","ControllerRegister.CtrlGet","ControllerRegister.CtrlHead","ControllerRegister.CtrlOptions","ControllerRegister.CtrlPatch","ControllerRegister.CtrlPost","ControllerRegister.CtrlPut","ControllerRegister.Delete","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.Get","ControllerRegister.GetContext","ControllerRegister.Handler","ControllerRegister.Head","ControllerRegister.Include","ControllerRegister.Init","ControllerRegister.InsertFilter","ControllerRegister.Options","ControllerRegister.Patch","ControllerRegister.Post","ControllerRegister.Put","ControllerRegister.ServeHTTP","ControllerRegister.URLFor","CtrlAny","CtrlDelete","CtrlGet","CtrlHead","CtrlOptions","CtrlPatch","CtrlPost","CtrlPut","Date","DateFormat","DateParse","Delete","Exception","ExecuteTemplate","ExecuteViewPathTemplate","FileSystem.Open","FilterRouter.ValidRouter","FlashData.Error","FlashData.Notice","FlashData.Set","FlashData.Store","FlashData.Success","FlashData.Warning","Get","GetConfig","HTML2str","Handler","Head","Htmlquote","Htmlunquote","HttpServer.Any","HttpServer.AutoPrefix","HttpServer.AutoRouter","HttpServer.CtrlAny","HttpServer.CtrlDelete","HttpServer.CtrlGet","HttpServer.CtrlHead","HttpServer.CtrlOptions","HttpServer.CtrlPatch","HttpServer.CtrlPost","HttpServer.CtrlPut","HttpServer.Delete","HttpServer.Get","HttpServer.Handler","HttpServer.Head","HttpServer.Include","HttpServer.InsertFilter","HttpServer.LogAccess","HttpServer.Options","HttpServer.Patch","HttpServer.Post","HttpServer.PrintTree","HttpServer.Put","HttpServer.RESTRouter","HttpServer.Router","HttpServer.RouterWithOpts","HttpServer.Run","Include","InitBeegoBeforeTest","InsertFilter","LoadAppConfig","LogAccess","MapGet","Namespace.Any","Namespace.AutoPrefix","Namespace.AutoRouter","Namespace.Cond","Namespace.CtrlAny","Namespace.CtrlDelete","Namespace.CtrlGet","Namespace.CtrlHead","Namespace.CtrlOptions","Namespace.CtrlPatch","Namespace.CtrlPost","Namespace.CtrlPut","Namespace.Delete","Namespace.Filter","Namespace.Get","Namespace.Handler","Namespace.Head","Namespace.Include","Namespace.Namespace","Namespace.Options","Namespace.Patch","Namespace.Post","Namespace.Put","Namespace.Router","NewControllerRegister","NewControllerRegisterWithCfg","NewHttpServerWithCfg","NewHttpSever","NewNamespace","NotNil","Options","ParseForm","Patch","Policy","Post","PrintTree","Put","RESTRouter","ReadFromRequest","RenderForm","Router","RouterWithOpts","Run","RunWithMiddleWares","TestBeegoInit","Tree.AddRouter","Tree.AddTree","Tree.Match","URLFor","URLMap.GetMap","URLMap.GetMapData","Walk","adminApp.Run","adminController.AdminIndex","adminController.Healthcheck","adminController.ListConf","adminController.ProfIndex","adminController.PrometheusMetrics","adminController.QpsIndex","adminController.TaskStatus","beegoAppConfig.Bool","beegoAppConfig.DefaultBool"]}]}}],"references":[{"type":"FIX","url":"https://github.com/beego/beego/pull/5025"},{"type":"FIX","url":"https://github.com/beego/beego/pull/5025/commits/ea5ae58d40589d249cf577a053e490509de2bf57"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0569"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0569.json.gz000066400000000000000000000032061456050377100243310ustar00rootroot00000000000000o])-\ LIN'mU_9 I$\]<wl| 7u. =@"/]8r,2;nnj2Y(Np3NJu`MD%З;v//Gz*mP<bȕEDXߌDޑ7"9` :.Ԍr&D#\GʾTFbE84A;"dk,a!;`ǐeCH3:ZhZGW"H$97ud_1'R10eyGe44U! 29J`GnH-%G| Y~f,4#Tz0%yDR|aB" eZ;x@R=jjs{A It2zvuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0572.json000066400000000000000000000120721456050377100237050ustar00rootroot00000000000000{"schema_version":"1.3.1","id":"GO-2022-0572","modified":"2023-04-03T15:57:51Z","published":"2022-08-22T17:56:17Z","aliases":["CVE-2021-30080","GHSA-28r6-jm5h-mrgg"],"details":"An issue was discovered in the route lookup process in beego which attackers to bypass access control.","affected":[{"package":{"name":"github.com/astaxie/beego","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/astaxie/beego","symbols":["App.Run","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.ServeHTTP","FilterRouter.ValidRouter","InitBeegoBeforeTest","Run","RunWithMiddleWares","TestBeegoInit","Tree.Match","adminApp.Run"]}]}},{"package":{"name":"github.com/beego/beego","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/beego/beego","symbols":["App.Run","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.ServeHTTP","FilterRouter.ValidRouter","InitBeegoBeforeTest","Run","RunWithMiddleWares","TestBeegoInit","Tree.Match","adminApp.Run"]}]}},{"package":{"name":"github.com/beego/beego/v2","ecosystem":"Go"},"ranges":[{"type":"SEMVER","events":[{"introduced":"2.0.0"},{"fixed":"2.0.3"}]}],"ecosystem_specific":{"imports":[{"path":"github.com/beego/beego/v2/server/web","symbols":["AddNamespace","AddViewPath","Any","AutoPrefix","AutoRouter","BuildTemplate","Compare","CompareNot","Controller.Abort","Controller.CheckXSRFCookie","Controller.CustomAbort","Controller.Delete","Controller.DestroySession","Controller.Get","Controller.GetBool","Controller.GetFile","Controller.GetFloat","Controller.GetInt","Controller.GetInt16","Controller.GetInt32","Controller.GetInt64","Controller.GetInt8","Controller.GetSecureCookie","Controller.GetString","Controller.GetStrings","Controller.GetUint16","Controller.GetUint32","Controller.GetUint64","Controller.GetUint8","Controller.Head","Controller.Input","Controller.IsAjax","Controller.Options","Controller.ParseForm","Controller.Patch","Controller.Post","Controller.Put","Controller.Redirect","Controller.Render","Controller.RenderBytes","Controller.RenderString","Controller.SaveToFile","Controller.ServeFormatted","Controller.ServeJSON","Controller.ServeJSONP","Controller.ServeXML","Controller.ServeYAML","Controller.SessionRegenerateID","Controller.SetData","Controller.SetSecureCookie","Controller.Trace","Controller.URLFor","Controller.XSRFFormHTML","Controller.XSRFToken","ControllerRegister.Add","ControllerRegister.AddAuto","ControllerRegister.AddAutoPrefix","ControllerRegister.AddMethod","ControllerRegister.Any","ControllerRegister.Delete","ControllerRegister.FindPolicy","ControllerRegister.FindRouter","ControllerRegister.Get","ControllerRegister.GetContext","ControllerRegister.Handler","ControllerRegister.Head","ControllerRegister.Include","ControllerRegister.InsertFilter","ControllerRegister.InsertFilterChain","ControllerRegister.Options","ControllerRegister.Patch","ControllerRegister.Post","ControllerRegister.Put","ControllerRegister.ServeHTTP","ControllerRegister.URLFor","Date","DateFormat","DateParse","Delete","Exception","ExecuteTemplate","ExecuteViewPathTemplate","FileSystem.Open","FilterRouter.ValidRouter","FlashData.Error","FlashData.Notice","FlashData.Set","FlashData.Store","FlashData.Success","FlashData.Warning","Get","GetConfig","HTML2str","Handler","Head","Htmlquote","Htmlunquote","HttpServer.Any","HttpServer.AutoPrefix","HttpServer.AutoRouter","HttpServer.Delete","HttpServer.Get","HttpServer.Handler","HttpServer.Head","HttpServer.Include","HttpServer.InsertFilter","HttpServer.InsertFilterChain","HttpServer.LogAccess","HttpServer.Options","HttpServer.Patch","HttpServer.Post","HttpServer.PrintTree","HttpServer.Put","HttpServer.RESTRouter","HttpServer.Router","HttpServer.Run","Include","InitBeegoBeforeTest","InsertFilter","InsertFilterChain","LoadAppConfig","LogAccess","MapGet","Namespace.Any","Namespace.AutoPrefix","Namespace.AutoRouter","Namespace.Cond","Namespace.Delete","Namespace.Filter","Namespace.Get","Namespace.Handler","Namespace.Head","Namespace.Include","Namespace.Namespace","Namespace.Options","Namespace.Patch","Namespace.Post","Namespace.Put","Namespace.Router","NewControllerRegister","NewControllerRegisterWithCfg","NewHttpServerWithCfg","NewHttpSever","NewNamespace","NotNil","Options","ParseForm","Patch","Policy","Post","PrintTree","Put","RESTRouter","ReadFromRequest","RenderForm","Router","Run","RunWithMiddleWares","TestBeegoInit","Tree.AddRouter","Tree.AddTree","Tree.Match","URLFor","URLMap.GetMap","URLMap.GetMapData","Walk","adminApp.Run","adminController.AdminIndex","adminController.Healthcheck","adminController.ListConf","adminController.ProfIndex","adminController.PrometheusMetrics","adminController.QpsIndex","adminController.TaskStatus","beegoAppConfig.Bool","beegoAppConfig.DefaultBool"]}]}}],"references":[{"type":"FIX","url":"https://github.com/beego/beego/pull/4459"},{"type":"FIX","url":"https://github.com/beego/beego/commit/d5df5e470d0a8ed291930ae802fd7e6b95226519"}],"database_specific":{"url":"https://pkg.go.dev/vuln/GO-2022-0572"}}vuln-1.0.4/internal/client/testdata/vulndb-v1/ID/GO-2022-0572.json.gz000066400000000000000000000027231456050377100243260ustar00rootroot00000000000000Ksں 1 y#@tu*A[~ә.⮂~GSA1!)ghG ѧǮ~A1'tMH|?z]d AoD"*]t}?Άs3GKh]?ݚϻ>-F]Buǃ84hFCyŲC eBGpqI'<)lאa+-QzO3Δk\!PƎ(o ?1!P𸇥oz7 ]*8;H`I @=1ӧ۹25&:H}L k%hpqX`\!x:|$\36T*22 s`,_r9CHfO8 ʨvk.` R!eZ5{*RB"x$r.0+XSĉĔzٿ/╺:Ū9廞!5}ɟ boªRBp 2 (v1ˑV|&`M<WFd qaiT W`tB9RTT'gh&mә14 sȶK, 6-/SЭT V&__$` XPAǓ/AZDhB9ZDGQtpv>qLU zya59Kd&XPjq_Kw]NGWW~Oz67:vuln-1.0.4/internal/client/testdata/vulndb-v1/index/000077500000000000000000000000001456050377100223405ustar00rootroot00000000000000vuln-1.0.4/internal/client/testdata/vulndb-v1/index/db.json000066400000000000000000000000431456050377100236150ustar00rootroot00000000000000{"modified":"2023-04-03T15:57:51Z"}vuln-1.0.4/internal/client/testdata/vulndb-v1/index/db.json.gz000066400000000000000000000000731456050377100242370ustar00rootroot00000000000000VOLLMQR22025050142525RuB#vuln-1.0.4/internal/client/testdata/vulndb-v1/index/modules.json000066400000000000000000000027441456050377100247120ustar00rootroot00000000000000[{"path":"github.com/astaxie/beego","vulns":[{"id":"GO-2022-0463","modified":"2023-04-03T15:57:51Z"},{"id":"GO-2022-0569","modified":"2023-04-03T15:57:51Z"},{"id":"GO-2022-0572","modified":"2023-04-03T15:57:51Z"}]},{"path":"github.com/beego/beego","vulns":[{"id":"GO-2022-0463","modified":"2023-04-03T15:57:51Z","fixed":"1.12.9"},{"id":"GO-2022-0569","modified":"2023-04-03T15:57:51Z","fixed":"1.12.11"},{"id":"GO-2022-0572","modified":"2023-04-03T15:57:51Z"}]},{"path":"github.com/beego/beego/v2","vulns":[{"id":"GO-2022-0463","modified":"2023-04-03T15:57:51Z","fixed":"2.0.3"},{"id":"GO-2022-0569","modified":"2023-04-03T15:57:51Z","fixed":"2.0.4"},{"id":"GO-2022-0572","modified":"2023-04-03T15:57:51Z","fixed":"2.0.3"}]},{"path":"golang.org/x/crypto","vulns":[{"id":"GO-2022-0229","modified":"2023-04-03T15:57:51Z","fixed":"0.0.0-20200124225646-8b5121be2f68"}]},{"path":"stdlib","vulns":[{"id":"GO-2021-0159","modified":"2023-04-03T15:57:51Z","fixed":"1.4.3"},{"id":"GO-2021-0240","modified":"2023-04-03T15:57:51Z","fixed":"1.16.5"},{"id":"GO-2021-0264","modified":"2023-04-03T15:57:51Z","fixed":"1.17.3"},{"id":"GO-2022-0229","modified":"2023-04-03T15:57:51Z","fixed":"1.13.7"},{"id":"GO-2022-0273","modified":"2023-04-03T15:57:51Z","fixed":"1.17.1"}]},{"path":"toolchain","vulns":[{"id":"GO-2021-0068","modified":"2023-04-03T15:57:51Z","fixed":"1.15.7"},{"id":"GO-2022-0475","modified":"2023-04-03T15:57:51Z","fixed":"1.15.5"},{"id":"GO-2022-0476","modified":"2023-04-03T15:57:51Z","fixed":"1.15.5"}]}]vuln-1.0.4/internal/client/testdata/vulndb-v1/index/modules.json.gz000066400000000000000000000004621456050377100253240ustar00rootroot000000000000000eؙA^jE!X A $Q2nS,Ϋndp95`d va7^Y ¸'ܳלq9ǿ-da3S}<$ђ/ /<9KjGk-.I d=^̔kJ/z @#Dsxy{ahU߳MAʝ$Nz+2( umN٪Ŧ8YjWACR ?4`lU"F= 0 || mm == "" { return funcSymNameGo120 } else if sv.Compare(mm, "v1.18") >= 0 { return funcSymNameGo119Lower } return "" } // Additions to the original package from cmd/internal/objabi/funcdata.go const ( pcdata_InlTreeIndex = 2 funcdata_InlTree = 3 ) // InlineTree returns the inline tree for Func f as a sequence of InlinedCalls. // goFuncValue is the value of the gosym.FuncSymName symbol. // baseAddr is the address of the memory region (ELF Prog) containing goFuncValue. // progReader is a ReaderAt positioned at the start of that region. func (t *LineTable) InlineTree(f *Func, goFuncValue, baseAddr uint64, progReader io.ReaderAt) ([]InlinedCall, error) { if f.inlineTreeCount == 0 { return nil, nil } if f.inlineTreeOffset == ^uint32(0) { return nil, nil } var offset int64 if t.version >= ver118 { offset = int64(goFuncValue - baseAddr + uint64(f.inlineTreeOffset)) } else { offset = int64(uint64(f.inlineTreeOffset) - baseAddr) } r := io.NewSectionReader(progReader, offset, 1<<32) // pick a size larger than we need var ics []InlinedCall for i := 0; i < f.inlineTreeCount; i++ { if t.version >= ver120 { var ric rawInlinedCall120 if err := binary.Read(r, t.binary, &ric); err != nil { return nil, err } ics = append(ics, InlinedCall{ FuncID: ric.FuncID, Name: t.funcName(uint32(ric.NameOff)), ParentPC: ric.ParentPC, }) } else { var ric rawInlinedCall112 if err := binary.Read(r, t.binary, &ric); err != nil { return nil, err } ics = append(ics, InlinedCall{ FuncID: ric.FuncID, Name: t.funcName(uint32(ric.Func_)), ParentPC: ric.ParentPC, }) } } return ics, nil } // InlinedCall describes a call to an inlined function. type InlinedCall struct { FuncID uint8 // type of the called function Name string // name of called function ParentPC int32 // position of an instruction whose source position is the call site (offset from entry) } // rawInlinedCall112 is the encoding of entries in the FUNCDATA_InlTree table // from Go 1.12 through 1.19. It is equivalent to runtime.inlinedCall. type rawInlinedCall112 struct { Parent int16 // index of parent in the inltree, or < 0 FuncID uint8 // type of the called function _ byte File int32 // perCU file index for inlined call. See cmd/link:pcln.go Line int32 // line number of the call site Func_ int32 // offset into pclntab for name of called function ParentPC int32 // position of an instruction whose source position is the call site (offset from entry) } // rawInlinedCall120 is the encoding of entries in the FUNCDATA_InlTree table // from Go 1.20. It is equivalent to runtime.inlinedCall. type rawInlinedCall120 struct { FuncID uint8 // type of the called function _ [3]byte NameOff int32 // offset into pclntab for name of called function ParentPC int32 // position of an instruction whose source position is the call site (offset from entry) StartLine int32 // line number of start of function (func keyword/TEXT directive) } func (f funcData) npcdata() uint32 { return f.field(7) } func (f funcData) nfuncdata(numFuncFields uint32) uint32 { return uint32(f.data[f.fieldOffset(numFuncFields-1)+3]) } func (f funcData) funcdataOffset(i uint8, numFuncFields uint32) uint32 { if uint32(i) >= f.nfuncdata(numFuncFields) { return ^uint32(0) } var off uint32 if f.t.version >= ver118 { off = f.fieldOffset(numFuncFields) + // skip fixed part of _func f.npcdata()*4 + // skip pcdata uint32(i)*4 // index of i'th FUNCDATA } else { off = f.fieldOffset(numFuncFields) + // skip fixed part of _func f.npcdata()*4 off += uint32(i) * f.t.ptrsize } return f.t.binary.Uint32(f.data[off:]) } func (f funcData) fieldOffset(n uint32) uint32 { // In Go 1.18, the first field of _func changed // from a uintptr entry PC to a uint32 entry offset. sz0 := f.t.ptrsize if f.t.version >= ver118 { sz0 = 4 } return sz0 + (n-1)*4 // subsequent fields are 4 bytes each } func (f funcData) pcdataOffset(i uint8, numFuncFields uint32) uint32 { if uint32(i) >= f.npcdata() { return ^uint32(0) } off := f.fieldOffset(numFuncFields) + // skip fixed part of _func uint32(i)*4 // index of i'th PCDATA return f.t.binary.Uint32(f.data[off:]) } // maxInlineTreeIndexValue returns the maximum value of the inline tree index // pc-value table in info. This is the only way to determine how many // IndexedCalls are in an inline tree, since the data of the tree itself is not // delimited in any way. func (t *LineTable) maxInlineTreeIndexValue(info funcData, numFuncFields uint32) int { if info.npcdata() <= pcdata_InlTreeIndex { return -1 } off := info.pcdataOffset(pcdata_InlTreeIndex, numFuncFields) p := t.pctab[off:] val := int32(-1) max := int32(-1) var pc uint64 for t.step(&p, &pc, &val, pc == 0) { if val > max { max = val } } return int(max) } type inlTree struct { inlineTreeOffset uint32 // offset from go.func.* symbol inlineTreeCount int // number of entries in inline tree } vuln-1.0.4/internal/gosym/additions_test.go000066400000000000000000000047241456050377100210350ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gosym import ( "debug/elf" "runtime" "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" ) func TestFuncSymName(t *testing.T) { for _, test := range []struct { v string want string }{ {"go1.15", ""}, {"go1.18", funcSymNameGo119Lower}, {"go1.19", funcSymNameGo119Lower}, {"devel go1.19", funcSymNameGo119Lower}, {"go1.19-pre4", funcSymNameGo119Lower}, {"go1.20", funcSymNameGo120}, {"devel bd56cb90a72e6725e", funcSymNameGo120}, {"go1.21", funcSymNameGo120}, {"unknown version", funcSymNameGo120}, } { if got := FuncSymName(test.v); got != test.want { t.Errorf("got %s; want %s", got, test.want) } } } func TestInlineTree(t *testing.T) { t.Skip("to temporarily resolve #61511") pclinetestBinary, cleanup := dotest(t) defer cleanup() f, err := elf.Open(pclinetestBinary) if err != nil { t.Fatal(err) } defer f.Close() pclndat, err := f.Section(".gopclntab").Data() if err != nil { t.Fatalf("reading %s gopclntab: %v", pclinetestBinary, err) } // The test binaries will be compiled with the same Go version // used to run the tests. goFunc := lookupSymbol(f, FuncSymName(runtime.Version())) if goFunc == nil { t.Fatal("couldn't find go.func.*") } prog := progContaining(f, goFunc.Value) if prog == nil { t.Fatal("couldn't find go.func.* Prog") } pcln := NewLineTable(pclndat, f.Section(".text").Addr) s := f.Section(".gosymtab") if s == nil { t.Fatal("no .gosymtab section") } d, err := s.Data() if err != nil { t.Fatal(err) } tab, err := NewTable(d, pcln) if err != nil { t.Fatal(err) } fun := tab.LookupFunc("main.main") got, err := pcln.InlineTree(fun, goFunc.Value, prog.Vaddr, prog.ReaderAt) if err != nil { t.Fatal(err) } want := []InlinedCall{ {FuncID: 0, Name: "main.inline1"}, {FuncID: 0, Name: "main.inline2"}, } if !cmp.Equal(got, want, cmpopts.IgnoreFields(InlinedCall{}, "ParentPC")) { t.Errorf("got\n%+v\nwant\n%+v", got, want) } } func progContaining(f *elf.File, addr uint64) *elf.Prog { for _, p := range f.Progs { if addr >= p.Vaddr && addr < p.Vaddr+p.Filesz { return p } } return nil } func lookupSymbol(f *elf.File, name string) *elf.Symbol { syms, err := f.Symbols() if err != nil { return nil } for _, s := range syms { if s.Name == name { return &s } } return nil } vuln-1.0.4/internal/gosym/pclntab.go000066400000000000000000000460011456050377100174350ustar00rootroot00000000000000// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /* * Line tables */ package gosym import ( "bytes" "encoding/binary" "sort" "sync" ) // version of the pclntab type version int const ( verUnknown version = iota ver11 ver12 ver116 ver118 ver120 ) // A LineTable is a data structure mapping program counters to line numbers. // // In Go 1.1 and earlier, each function (represented by a Func) had its own LineTable, // and the line number corresponded to a numbering of all source lines in the // program, across all files. That absolute line number would then have to be // converted separately to a file name and line number within the file. // // In Go 1.2, the format of the data changed so that there is a single LineTable // for the entire program, shared by all Funcs, and there are no absolute line // numbers, just line numbers within specific files. // // For the most part, LineTable's methods should be treated as an internal // detail of the package; callers should use the methods on Table instead. type LineTable struct { Data []byte PC uint64 Line int // This mutex is used to keep parsing of pclntab synchronous. mu sync.Mutex // Contains the version of the pclntab section. version version // Go 1.2/1.16/1.18 state binary binary.ByteOrder quantum uint32 ptrsize uint32 textStart uint64 // address of runtime.text symbol (1.18+) funcnametab []byte cutab []byte funcdata []byte functab []byte nfunctab uint32 filetab []byte pctab []byte // points to the pctables. nfiletab uint32 funcNames map[uint32]string // cache the function names strings map[uint32]string // interned substrings of Data, keyed by offset // fileMap varies depending on the version of the object file. // For ver12, it maps the name to the index in the file table. // For ver116, it maps the name to the offset in filetab. fileMap map[string]uint32 } // NOTE(rsc): This is wrong for GOARCH=arm, which uses a quantum of 4, // but we have no idea whether we're using arm or not. This only // matters in the old (pre-Go 1.2) symbol table format, so it's not worth // fixing. const oldQuantum = 1 func (t *LineTable) parse(targetPC uint64, targetLine int) (b []byte, pc uint64, line int) { // The PC/line table can be thought of as a sequence of // * // batches. Each update batch results in a (pc, line) pair, // where line applies to every PC from pc up to but not // including the pc of the next pair. // // Here we process each update individually, which simplifies // the code, but makes the corner cases more confusing. b, pc, line = t.Data, t.PC, t.Line for pc <= targetPC && line != targetLine && len(b) > 0 { code := b[0] b = b[1:] switch { case code == 0: if len(b) < 4 { b = b[0:0] break } val := binary.BigEndian.Uint32(b) b = b[4:] line += int(val) case code <= 64: line += int(code) case code <= 128: line -= int(code - 64) default: pc += oldQuantum * uint64(code-128) continue } pc += oldQuantum } return b, pc, line } func (t *LineTable) slice(pc uint64) *LineTable { data, pc, line := t.parse(pc, -1) return &LineTable{Data: data, PC: pc, Line: line} } // PCToLine returns the line number for the given program counter. // // Deprecated: Use Table's PCToLine method instead. func (t *LineTable) PCToLine(pc uint64) int { if t.isGo12() { return t.go12PCToLine(pc) } _, _, line := t.parse(pc, -1) return line } // LineToPC returns the program counter for the given line number, // considering only program counters before maxpc. // // Deprecated: Use Table's LineToPC method instead. func (t *LineTable) LineToPC(line int, maxpc uint64) uint64 { if t.isGo12() { return 0 } _, pc, line1 := t.parse(maxpc, line) if line1 != line { return 0 } // Subtract quantum from PC to account for post-line increment return pc - oldQuantum } // NewLineTable returns a new PC/line table // corresponding to the encoded data. // Text must be the start address of the // corresponding text segment. func NewLineTable(data []byte, text uint64) *LineTable { return &LineTable{Data: data, PC: text, Line: 0, funcNames: make(map[uint32]string), strings: make(map[uint32]string)} } // Go 1.2 symbol table format. // See golang.org/s/go12symtab. // // A general note about the methods here: rather than try to avoid // index out of bounds errors, we trust Go to detect them, and then // we recover from the panics and treat them as indicative of a malformed // or incomplete table. // // The methods called by symtab.go, which begin with "go12" prefixes, // are expected to have that recovery logic. // isGo12 reports whether this is a Go 1.2 (or later) symbol table. func (t *LineTable) isGo12() bool { t.parsePclnTab() return t.version >= ver12 } const ( go12magic = 0xfffffffb go116magic = 0xfffffffa go118magic = 0xfffffff0 go120magic = 0xfffffff1 ) // uintptr returns the pointer-sized value encoded at b. // The pointer size is dictated by the table being read. func (t *LineTable) uintptr(b []byte) uint64 { if t.ptrsize == 4 { return uint64(t.binary.Uint32(b)) } return t.binary.Uint64(b) } // parsePclnTab parses the pclntab, setting the version. func (t *LineTable) parsePclnTab() { t.mu.Lock() defer t.mu.Unlock() if t.version != verUnknown { return } // Note that during this function, setting the version is the last thing we do. // If we set the version too early, and parsing failed (likely as a panic on // slice lookups), we'd have a mistaken version. // // Error paths through this code will default the version to 1.1. t.version = ver11 if !disableRecover { defer func() { // If we panic parsing, assume it's a Go 1.1 pclntab. _ = recover() }() } // Check header: 4-byte magic, two zeros, pc quantum, pointer size. if len(t.Data) < 16 || t.Data[4] != 0 || t.Data[5] != 0 || (t.Data[6] != 1 && t.Data[6] != 2 && t.Data[6] != 4) || // pc quantum (t.Data[7] != 4 && t.Data[7] != 8) { // pointer size return } var possibleVersion version leMagic := binary.LittleEndian.Uint32(t.Data) beMagic := binary.BigEndian.Uint32(t.Data) switch { case leMagic == go12magic: t.binary, possibleVersion = binary.LittleEndian, ver12 case beMagic == go12magic: t.binary, possibleVersion = binary.BigEndian, ver12 case leMagic == go116magic: t.binary, possibleVersion = binary.LittleEndian, ver116 case beMagic == go116magic: t.binary, possibleVersion = binary.BigEndian, ver116 case leMagic == go118magic: t.binary, possibleVersion = binary.LittleEndian, ver118 case beMagic == go118magic: t.binary, possibleVersion = binary.BigEndian, ver118 case leMagic == go120magic: t.binary, possibleVersion = binary.LittleEndian, ver120 case beMagic == go120magic: t.binary, possibleVersion = binary.BigEndian, ver120 default: return } t.version = possibleVersion // quantum and ptrSize are the same between 1.2, 1.16, and 1.18 t.quantum = uint32(t.Data[6]) t.ptrsize = uint32(t.Data[7]) offset := func(word uint32) uint64 { return t.uintptr(t.Data[8+word*t.ptrsize:]) } data := func(word uint32) []byte { return t.Data[offset(word):] } switch possibleVersion { case ver118, ver120: t.nfunctab = uint32(offset(0)) t.nfiletab = uint32(offset(1)) t.textStart = t.PC // use the start PC instead of reading from the table, which may be unrelocated t.funcnametab = data(3) t.cutab = data(4) t.filetab = data(5) t.pctab = data(6) t.funcdata = data(7) t.functab = data(7) functabsize := (int(t.nfunctab)*2 + 1) * t.functabFieldSize() t.functab = t.functab[:functabsize] case ver116: t.nfunctab = uint32(offset(0)) t.nfiletab = uint32(offset(1)) t.funcnametab = data(2) t.cutab = data(3) t.filetab = data(4) t.pctab = data(5) t.funcdata = data(6) t.functab = data(6) functabsize := (int(t.nfunctab)*2 + 1) * t.functabFieldSize() t.functab = t.functab[:functabsize] case ver12: t.nfunctab = uint32(t.uintptr(t.Data[8:])) t.funcdata = t.Data t.funcnametab = t.Data t.functab = t.Data[8+t.ptrsize:] t.pctab = t.Data functabsize := (int(t.nfunctab)*2 + 1) * t.functabFieldSize() fileoff := t.binary.Uint32(t.functab[functabsize:]) t.functab = t.functab[:functabsize] t.filetab = t.Data[fileoff:] t.nfiletab = t.binary.Uint32(t.filetab) t.filetab = t.filetab[:t.nfiletab*4] default: panic("unreachable") } } // go12Funcs returns a slice of Funcs derived from the Go 1.2+ pcln table. func (t *LineTable) go12Funcs() []Func { // Assume it is malformed and return nil on error. if !disableRecover { defer func() { _ = recover() }() } ft := t.funcTab() funcs := make([]Func, ft.Count()) syms := make([]Sym, len(funcs)) for i := range funcs { f := &funcs[i] f.Entry = ft.pc(i) f.End = ft.pc(i + 1) info := t.funcData(uint32(i)) f.LineTable = t f.FrameSize = int(info.deferreturn()) // Additions: // numFuncField is the number of (32 bit) fields in _func (src/runtime/runtime2.go) // Note that the last 4 fields are 32 bits combined. This number is 11 for go1.20, // 10 for earlier versions down to go1.16, and 9 before that. var numFuncFields uint32 = 11 if t.version < ver116 { numFuncFields = 9 } else if t.version < ver120 { numFuncFields = 10 } f.inlineTreeOffset = info.funcdataOffset(funcdata_InlTree, numFuncFields) f.inlineTreeCount = 1 + t.maxInlineTreeIndexValue(info, numFuncFields) syms[i] = Sym{ Value: f.Entry, Type: 'T', Name: t.funcName(info.nameOff()), GoType: 0, Func: f, goVersion: t.version, } f.Sym = &syms[i] } return funcs } // findFunc returns the funcData corresponding to the given program counter. func (t *LineTable) findFunc(pc uint64) funcData { ft := t.funcTab() if pc < ft.pc(0) || pc >= ft.pc(ft.Count()) { return funcData{} } idx := sort.Search(int(t.nfunctab), func(i int) bool { return ft.pc(i) > pc }) idx-- return t.funcData(uint32(idx)) } // readvarint reads, removes, and returns a varint from *pp. func (t *LineTable) readvarint(pp *[]byte) uint32 { var v, shift uint32 p := *pp for shift = 0; ; shift += 7 { b := p[0] p = p[1:] v |= (uint32(b) & 0x7F) << shift if b&0x80 == 0 { break } } *pp = p return v } // funcName returns the name of the function found at off. func (t *LineTable) funcName(off uint32) string { if s, ok := t.funcNames[off]; ok { return s } i := bytes.IndexByte(t.funcnametab[off:], 0) s := string(t.funcnametab[off : off+uint32(i)]) t.funcNames[off] = s return s } // stringFrom returns a Go string found at off from a position. func (t *LineTable) stringFrom(arr []byte, off uint32) string { if s, ok := t.strings[off]; ok { return s } i := bytes.IndexByte(arr[off:], 0) s := string(arr[off : off+uint32(i)]) t.strings[off] = s return s } // string returns a Go string found at off. func (t *LineTable) string(off uint32) string { return t.stringFrom(t.funcdata, off) } // functabFieldSize returns the size in bytes of a single functab field. func (t *LineTable) functabFieldSize() int { if t.version >= ver118 { return 4 } return int(t.ptrsize) } // funcTab returns t's funcTab. func (t *LineTable) funcTab() funcTab { return funcTab{LineTable: t, sz: t.functabFieldSize()} } // funcTab is memory corresponding to a slice of functab structs, followed by an invalid PC. // A functab struct is a PC and a func offset. type funcTab struct { *LineTable sz int // cached result of t.functabFieldSize } // Count returns the number of func entries in f. func (f funcTab) Count() int { return int(f.nfunctab) } // pc returns the PC of the i'th func in f. func (f funcTab) pc(i int) uint64 { u := f.uint(f.functab[2*i*f.sz:]) if f.version >= ver118 { u += f.textStart } return u } // funcOff returns the funcdata offset of the i'th func in f. func (f funcTab) funcOff(i int) uint64 { return f.uint(f.functab[(2*i+1)*f.sz:]) } // uint returns the uint stored at b. func (f funcTab) uint(b []byte) uint64 { if f.sz == 4 { return uint64(f.binary.Uint32(b)) } return f.binary.Uint64(b) } // funcData is memory corresponding to an _func struct. type funcData struct { t *LineTable // LineTable this data is a part of data []byte // raw memory for the function } // funcData returns the ith funcData in t.functab. func (t *LineTable) funcData(i uint32) funcData { data := t.funcdata[t.funcTab().funcOff(int(i)):] return funcData{t: t, data: data} } // IsZero reports whether f is the zero value. func (f funcData) IsZero() bool { return f.t == nil && f.data == nil } // entryPC returns the func's entry PC. func (f *funcData) entryPC() uint64 { // In Go 1.18, the first field of _func changed // from a uintptr entry PC to a uint32 entry offset. if f.t.version >= ver118 { // TODO: support multiple text sections. // See runtime/symtab.go:(*moduledata).textAddr. return uint64(f.t.binary.Uint32(f.data)) + f.t.textStart } return f.t.uintptr(f.data) } func (f funcData) nameOff() uint32 { return f.field(1) } func (f funcData) deferreturn() uint32 { return f.field(3) } func (f funcData) pcfile() uint32 { return f.field(5) } func (f funcData) pcln() uint32 { return f.field(6) } func (f funcData) cuOffset() uint32 { return f.field(8) } // field returns the nth field of the _func struct. // It panics if n == 0 or n > 9; for n == 0, call f.entryPC. // Most callers should use a named field accessor (just above). func (f funcData) field(n uint32) uint32 { if n == 0 || n > 9 { panic("bad funcdata field") } // Addition: some code deleted here to support inlining. off := f.fieldOffset(n) data := f.data[off:] return f.t.binary.Uint32(data) } // step advances to the next pc, value pair in the encoded table. func (t *LineTable) step(p *[]byte, pc *uint64, val *int32, first bool) bool { uvdelta := t.readvarint(p) if uvdelta == 0 && !first { return false } if uvdelta&1 != 0 { uvdelta = ^(uvdelta >> 1) } else { uvdelta >>= 1 } vdelta := int32(uvdelta) pcdelta := t.readvarint(p) * t.quantum *pc += uint64(pcdelta) *val += vdelta return true } // pcvalue reports the value associated with the target pc. // off is the offset to the beginning of the pc-value table, // and entry is the start PC for the corresponding function. func (t *LineTable) pcvalue(off uint32, entry, targetpc uint64) int32 { p := t.pctab[off:] val := int32(-1) pc := entry for t.step(&p, &pc, &val, pc == entry) { if targetpc < pc { return val } } return -1 } // findFileLine scans one function in the binary looking for a // program counter in the given file on the given line. // It does so by running the pc-value tables mapping program counter // to file number. Since most functions come from a single file, these // are usually short and quick to scan. If a file match is found, then the // code goes to the expense of looking for a simultaneous line number match. func (t *LineTable) findFileLine(entry uint64, filetab, linetab uint32, filenum, line int32, cutab []byte) uint64 { if filetab == 0 || linetab == 0 { return 0 } fp := t.pctab[filetab:] fl := t.pctab[linetab:] fileVal := int32(-1) filePC := entry lineVal := int32(-1) linePC := entry fileStartPC := filePC for t.step(&fp, &filePC, &fileVal, filePC == entry) { fileIndex := fileVal if t.version == ver116 || t.version == ver118 || t.version == ver120 { fileIndex = int32(t.binary.Uint32(cutab[fileVal*4:])) } if fileIndex == filenum && fileStartPC < filePC { // fileIndex is in effect starting at fileStartPC up to // but not including filePC, and it's the file we want. // Run the PC table looking for a matching line number // or until we reach filePC. lineStartPC := linePC for linePC < filePC && t.step(&fl, &linePC, &lineVal, linePC == entry) { // lineVal is in effect until linePC, and lineStartPC < filePC. if lineVal == line { if fileStartPC <= lineStartPC { return lineStartPC } if fileStartPC < linePC { return fileStartPC } } lineStartPC = linePC } } fileStartPC = filePC } return 0 } // go12PCToLine maps program counter to line number for the Go 1.2+ pcln table. func (t *LineTable) go12PCToLine(pc uint64) (line int) { defer func() { if !disableRecover && recover() != nil { line = -1 } }() f := t.findFunc(pc) if f.IsZero() { return -1 } entry := f.entryPC() linetab := f.pcln() return int(t.pcvalue(linetab, entry, pc)) } // go12PCToFile maps program counter to file name for the Go 1.2+ pcln table. func (t *LineTable) go12PCToFile(pc uint64) (file string) { defer func() { if !disableRecover && recover() != nil { file = "" } }() f := t.findFunc(pc) if f.IsZero() { return "" } entry := f.entryPC() filetab := f.pcfile() fno := t.pcvalue(filetab, entry, pc) if t.version == ver12 { if fno <= 0 { return "" } return t.string(t.binary.Uint32(t.filetab[4*fno:])) } // Go ≥ 1.16 if fno < 0 { // 0 is valid for ≥ 1.16 return "" } cuoff := f.cuOffset() if fnoff := t.binary.Uint32(t.cutab[(cuoff+uint32(fno))*4:]); fnoff != ^uint32(0) { return t.stringFrom(t.filetab, fnoff) } return "" } // go12LineToPC maps a (file, line) pair to a program counter for the Go 1.2+ pcln table. func (t *LineTable) go12LineToPC(file string, line int) (pc uint64) { defer func() { if !disableRecover && recover() != nil { pc = 0 } }() t.initFileMap() filenum, ok := t.fileMap[file] if !ok { return 0 } // Scan all functions. // If this turns out to be a bottleneck, we could build a map[int32][]int32 // mapping file number to a list of functions with code from that file. var cutab []byte for i := uint32(0); i < t.nfunctab; i++ { f := t.funcData(i) entry := f.entryPC() filetab := f.pcfile() linetab := f.pcln() if t.version == ver116 || t.version == ver118 || t.version == ver120 { if f.cuOffset() == ^uint32(0) { // skip functions without compilation unit (not real function, or linker generated) continue } cutab = t.cutab[f.cuOffset()*4:] } pc := t.findFileLine(entry, filetab, linetab, int32(filenum), int32(line), cutab) if pc != 0 { return pc } } return 0 } // initFileMap initializes the map from file name to file number. func (t *LineTable) initFileMap() { t.mu.Lock() defer t.mu.Unlock() if t.fileMap != nil { return } m := make(map[string]uint32) if t.version == ver12 { for i := uint32(1); i < t.nfiletab; i++ { s := t.string(t.binary.Uint32(t.filetab[4*i:])) m[s] = i } } else { var pos uint32 for i := uint32(0); i < t.nfiletab; i++ { s := t.stringFrom(t.filetab, pos) m[s] = pos pos += uint32(len(s) + 1) } } t.fileMap = m } // go12MapFiles adds to m a key for every file in the Go 1.2 LineTable. // Every key maps to obj. That's not a very interesting map, but it provides // a way for callers to obtain the list of files in the program. func (t *LineTable) go12MapFiles(m map[string]*Obj, obj *Obj) { if !disableRecover { defer func() { _ = recover() }() } t.initFileMap() for file := range t.fileMap { m[file] = obj } } // disableRecover causes this package not to swallow panics. // This is useful when making changes. const disableRecover = true vuln-1.0.4/internal/gosym/pclntab_test.go000066400000000000000000000222601456050377100204750ustar00rootroot00000000000000// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gosym import ( "bytes" "compress/gzip" "debug/elf" "io" "os" "runtime" "strings" "testing" "golang.org/x/vuln/internal/test" "golang.org/x/vuln/internal/testenv" ) func dotest(t *testing.T) (binaryName string, cleanup func()) { testenv.NeedsGoBuild(t) // For now, only works on amd64 platforms. if runtime.GOARCH != "amd64" { t.Skipf("skipping on non-AMD64 system %s", runtime.GOARCH) } // This test builds a Linux/AMD64 binary. Skipping in short mode if cross compiling. if runtime.GOOS != "linux" && testing.Short() { t.Skipf("skipping in short mode on non-Linux system %s", runtime.GOARCH) } return test.GoBuild(t, "testdata", "", false, "GOOS", "linux") } // skipIfNotELF skips the test if we are not running on an ELF system. // These tests open and examine the test binary, and use elf.Open to do so. func skipIfNotELF(t *testing.T) { switch runtime.GOOS { case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris", "illumos": // OK. default: t.Skipf("skipping on non-ELF system %s", runtime.GOOS) } } func getTable(t *testing.T) *Table { f, tab := crack(os.Args[0], t) f.Close() return tab } func crack(file string, t *testing.T) (*elf.File, *Table) { // Open self f, err := elf.Open(file) if err != nil { t.Fatal(err) } return parse(file, f, t) } func parse(file string, f *elf.File, t *testing.T) (*elf.File, *Table) { s := f.Section(".gosymtab") if s == nil { t.Skip("no .gosymtab section") } symdat, err := s.Data() if err != nil { f.Close() t.Fatalf("reading %s gosymtab: %v", file, err) } pclndat, err := f.Section(".gopclntab").Data() if err != nil { f.Close() t.Fatalf("reading %s gopclntab: %v", file, err) } pcln := NewLineTable(pclndat, f.Section(".text").Addr) tab, err := NewTable(symdat, pcln) if err != nil { f.Close() t.Fatalf("parsing %s gosymtab: %v", file, err) } return f, tab } func TestLineFromAline(t *testing.T) { skipIfNotELF(t) tab := getTable(t) if tab.go12line != nil { // aline's don't exist in the Go 1.2 table. t.Skip("not relevant to Go 1.2 symbol table") } // Find the sym package pkg := tab.LookupFunc("debug/gosym.TestLineFromAline").Obj if pkg == nil { t.Fatalf("nil pkg") } // Walk every absolute line and ensure that we hit every // source line monotonically lastline := make(map[string]int) final := -1 for i := 0; i < 10000; i++ { path, line := pkg.lineFromAline(i) // Check for end of object if path == "" { if final == -1 { final = i - 1 } continue } else if final != -1 { t.Fatalf("reached end of package at absolute line %d, but absolute line %d mapped to %s:%d", final, i, path, line) } // It's okay to see files multiple times (e.g., sys.a) if line == 1 { lastline[path] = 1 continue } // Check that the is the next line in path ll, ok := lastline[path] if !ok { t.Errorf("file %s starts on line %d", path, line) } else if line != ll+1 { t.Fatalf("expected next line of file %s to be %d, got %d", path, ll+1, line) } lastline[path] = line } if final == -1 { t.Errorf("never reached end of object") } } func TestLineAline(t *testing.T) { skipIfNotELF(t) tab := getTable(t) if tab.go12line != nil { // aline's don't exist in the Go 1.2 table. t.Skip("not relevant to Go 1.2 symbol table") } for _, o := range tab.Files { // A source file can appear multiple times in a // object. alineFromLine will always return alines in // the first file, so track which lines we've seen. found := make(map[string]int) for i := 0; i < 1000; i++ { path, line := o.lineFromAline(i) if path == "" { break } // cgo files are full of 'Z' symbols, which we don't handle if len(path) > 4 && path[len(path)-4:] == ".cgo" { continue } if minline, ok := found[path]; path != "" && ok { if minline >= line { // We've already covered this file continue } } found[path] = line a, err := o.alineFromLine(path, line) if err != nil { t.Errorf("absolute line %d in object %s maps to %s:%d, but mapping that back gives error %s", i, o.Paths[0].Name, path, line, err) } else if a != i { t.Errorf("absolute line %d in object %s maps to %s:%d, which maps back to absolute line %d\n", i, o.Paths[0].Name, path, line, a) } } } } func TestPCLine(t *testing.T) { pclinetestBinary, cleanup := dotest(t) defer cleanup() f, tab := crack(pclinetestBinary, t) defer f.Close() text := f.Section(".text") textdat, err := text.Data() if err != nil { t.Fatalf("reading .text: %v", err) } // Test PCToLine sym := tab.LookupFunc("main.linefrompc") wantLine := 0 for pc := sym.Entry; pc < sym.End; pc++ { off := pc - text.Addr // TODO(rsc): should not need off; bug in 8g if textdat[off] == 255 { break } wantLine += int(textdat[off]) t.Logf("off is %d %#x (max %d)", off, textdat[off], sym.End-pc) file, line, fn := tab.PCToLine(pc) if fn == nil { t.Errorf("failed to get line of PC %#x", pc) } else if !strings.HasSuffix(file, "pclinetest.s") || line != wantLine || fn != sym { t.Errorf("PCToLine(%#x) = %s:%d (%s), want %s:%d (%s)", pc, file, line, fn.Name, "pclinetest.s", wantLine, sym.Name) } } // Test LineToPC sym = tab.LookupFunc("main.pcfromline") lookupline := -1 wantLine = 0 off := uint64(0) // TODO(rsc): should not need off; bug in 8g for pc := sym.Value; pc < sym.End; pc += 2 + uint64(textdat[off]) { file, line, fn := tab.PCToLine(pc) off = pc - text.Addr if textdat[off] == 255 { break } wantLine += int(textdat[off]) if line != wantLine { t.Errorf("expected line %d at PC %#x in pcfromline, got %d", wantLine, pc, line) off = pc + 1 - text.Addr continue } if lookupline == -1 { lookupline = line } for ; lookupline <= line; lookupline++ { pc2, fn2, err := tab.LineToPC(file, lookupline) if lookupline != line { // Should be nothing on this line if err == nil { t.Errorf("expected no PC at line %d, got %#x (%s)", lookupline, pc2, fn2.Name) } } else if err != nil { t.Errorf("failed to get PC of line %d: %s", lookupline, err) } else if pc != pc2 { t.Errorf("expected PC %#x (%s) at line %d, got PC %#x (%s)", pc, fn.Name, line, pc2, fn2.Name) } } off = pc + 1 - text.Addr } } func TestSymVersion(t *testing.T) { skipIfNotELF(t) table := getTable(t) if table.go12line == nil { t.Skip("not relevant to Go 1.2+ symbol table") } for _, fn := range table.Funcs { if fn.goVersion == verUnknown { t.Fatalf("unexpected symbol version: %v", fn) } } } // read115Executable returns a hello world executable compiled by Go 1.15. // // The file was compiled in /tmp/hello.go: // // package main // // func main() { // println("hello") // } func read115Executable(tb testing.TB) []byte { zippedDat, err := os.ReadFile("testdata/pcln115.gz") if err != nil { tb.Fatal(err) } var gzReader *gzip.Reader gzReader, err = gzip.NewReader(bytes.NewBuffer(zippedDat)) if err != nil { tb.Fatal(err) } var dat []byte dat, err = io.ReadAll(gzReader) if err != nil { tb.Fatal(err) } return dat } // Test that we can parse a pclntab from 1.15. func Test115PclnParsing(t *testing.T) { dat := read115Executable(t) const textStart = 0x1001000 pcln := NewLineTable(dat, textStart) tab, err := NewTable(nil, pcln) if err != nil { t.Fatal(err) } var f *Func var pc uint64 pc, f, err = tab.LineToPC("/tmp/hello.go", 3) if err != nil { t.Fatal(err) } if pcln.version != ver12 { t.Fatal("Expected pcln to parse as an older version") } if pc != 0x105c280 { t.Fatalf("expect pc = 0x105c280, got 0x%x", pc) } if f.Name != "main.main" { t.Fatalf("expected to parse name as main.main, got %v", f.Name) } } var ( sinkLineTable *LineTable sinkTable *Table ) func Benchmark115(b *testing.B) { dat := read115Executable(b) const textStart = 0x1001000 b.Run("NewLineTable", func(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { sinkLineTable = NewLineTable(dat, textStart) } }) pcln := NewLineTable(dat, textStart) b.Run("NewTable", func(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { var err error sinkTable, err = NewTable(nil, pcln) if err != nil { b.Fatal(err) } } }) tab, err := NewTable(nil, pcln) if err != nil { b.Fatal(err) } b.Run("LineToPC", func(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { var f *Func var pc uint64 pc, f, err = tab.LineToPC("/tmp/hello.go", 3) if err != nil { b.Fatal(err) } if pcln.version != ver12 { b.Fatalf("want version=%d, got %d", ver12, pcln.version) } if pc != 0x105c280 { b.Fatalf("want pc=0x105c280, got 0x%x", pc) } if f.Name != "main.main" { b.Fatalf("want name=main.main, got %q", f.Name) } } }) b.Run("PCToLine", func(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { file, line, fn := tab.PCToLine(0x105c280) if file != "/tmp/hello.go" { b.Fatalf("want name=/tmp/hello.go, got %q", file) } if line != 3 { b.Fatalf("want line=3, got %d", line) } if fn.Name != "main.main" { b.Fatalf("want name=main.main, got %q", fn.Name) } } }) } vuln-1.0.4/internal/gosym/symtab.go000066400000000000000000000436751456050377100173270ustar00rootroot00000000000000// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package gosym implements access to the Go symbol // and line number tables embedded in Go binaries generated // by the gc compilers. package gosym import ( "bytes" "encoding/binary" "fmt" "strconv" "strings" ) /* * Symbols */ // A Sym represents a single symbol table entry. type Sym struct { Value uint64 Type byte Name string GoType uint64 // If this symbol is a function symbol, the corresponding Func Func *Func goVersion version } // Static reports whether this symbol is static (not visible outside its file). func (s *Sym) Static() bool { return s.Type >= 'a' } // nameWithoutInst returns s.Name if s.Name has no brackets (does not reference an // instantiated type, function, or method). If s.Name contains brackets, then it // returns s.Name with all the contents between (and including) the outermost left // and right bracket removed. This is useful to ignore any extra slashes or dots // inside the brackets from the string searches below, where needed. func (s *Sym) nameWithoutInst() string { start := strings.Index(s.Name, "[") if start < 0 { return s.Name } end := strings.LastIndex(s.Name, "]") if end < 0 { // Malformed name, should contain closing bracket too. return s.Name } return s.Name[0:start] + s.Name[end+1:] } // PackageName returns the package part of the symbol name, // or the empty string if there is none. func (s *Sym) PackageName() string { name := s.nameWithoutInst() // Since go1.20, a prefix of "type:" and "go:" is a compiler-generated symbol, // they do not belong to any package. // // See cmd/compile/internal/base/link.go:ReservedImports variable. if s.goVersion >= ver120 && (strings.HasPrefix(name, "go:") || strings.HasPrefix(name, "type:")) { return "" } // For go1.18 and below, the prefix are "type." and "go." instead. if s.goVersion <= ver118 && (strings.HasPrefix(name, "go.") || strings.HasPrefix(name, "type.")) { return "" } pathend := strings.LastIndex(name, "/") if pathend < 0 { pathend = 0 } if i := strings.Index(name[pathend:], "."); i != -1 { return name[:pathend+i] } return "" } // ReceiverName returns the receiver type name of this symbol, // or the empty string if there is none. A receiver name is only detected in // the case that s.Name is fully-specified with a package name. func (s *Sym) ReceiverName() string { name := s.nameWithoutInst() // If we find a slash in name, it should precede any bracketed expression // that was removed, so pathend will apply correctly to name and s.Name. pathend := strings.LastIndex(name, "/") if pathend < 0 { pathend = 0 } // Find the first dot after pathend (or from the beginning, if there was // no slash in name). l := strings.Index(name[pathend:], ".") // Find the last dot after pathend (or the beginning). r := strings.LastIndex(name[pathend:], ".") if l == -1 || r == -1 || l == r { // There is no receiver if we didn't find two distinct dots after pathend. return "" } // Given there is a trailing '.' that is in name, find it now in s.Name. // pathend+l should apply to s.Name, because it should be the dot in the // package name. r = strings.LastIndex(s.Name[pathend:], ".") return s.Name[pathend+l+1 : pathend+r] } // BaseName returns the symbol name without the package or receiver name. func (s *Sym) BaseName() string { name := s.nameWithoutInst() if i := strings.LastIndex(name, "."); i != -1 { if s.Name != name { brack := strings.Index(s.Name, "[") if i > brack { // BaseName is a method name after the brackets, so // recalculate for s.Name. Otherwise, i applies // correctly to s.Name, since it is before the // brackets. i = strings.LastIndex(s.Name, ".") } } return s.Name[i+1:] } return s.Name } // A Func collects information about a single function. type Func struct { Entry uint64 *Sym End uint64 Params []*Sym // nil for Go 1.3 and later binaries Locals []*Sym // nil for Go 1.3 and later binaries FrameSize int LineTable *LineTable Obj *Obj // Addition: extra data to support inlining. inlTree } // An Obj represents a collection of functions in a symbol table. // // The exact method of division of a binary into separate Objs is an internal detail // of the symbol table format. // // In early versions of Go each source file became a different Obj. // // In Go 1 and Go 1.1, each package produced one Obj for all Go sources // and one Obj per C source file. // // In Go 1.2, there is a single Obj for the entire program. type Obj struct { // Funcs is a list of functions in the Obj. Funcs []Func // In Go 1.1 and earlier, Paths is a list of symbols corresponding // to the source file names that produced the Obj. // In Go 1.2, Paths is nil. // Use the keys of Table.Files to obtain a list of source files. Paths []Sym // meta } /* * Symbol tables */ // Table represents a Go symbol table. It stores all of the // symbols decoded from the program and provides methods to translate // between symbols, names, and addresses. type Table struct { Syms []Sym // nil for Go 1.3 and later binaries Funcs []Func Files map[string]*Obj // for Go 1.2 and later all files map to one Obj Objs []Obj // for Go 1.2 and later only one Obj in slice go12line *LineTable // Go 1.2 line number table } type sym struct { value uint64 gotype uint64 typ byte name []byte } var ( littleEndianSymtab = []byte{0xFD, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00} bigEndianSymtab = []byte{0xFF, 0xFF, 0xFF, 0xFD, 0x00, 0x00, 0x00} oldLittleEndianSymtab = []byte{0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0x00} ) func walksymtab(data []byte, fn func(sym) error) error { if len(data) == 0 { // missing symtab is okay return nil } var order binary.ByteOrder = binary.BigEndian newTable := false switch { case bytes.HasPrefix(data, oldLittleEndianSymtab): // Same as Go 1.0, but little endian. // Format was used during interim development between Go 1.0 and Go 1.1. // Should not be widespread, but easy to support. data = data[6:] order = binary.LittleEndian case bytes.HasPrefix(data, bigEndianSymtab): newTable = true case bytes.HasPrefix(data, littleEndianSymtab): newTable = true order = binary.LittleEndian } var ptrsz int if newTable { if len(data) < 8 { return &DecodingError{len(data), "unexpected EOF", nil} } ptrsz = int(data[7]) if ptrsz != 4 && ptrsz != 8 { return &DecodingError{7, "invalid pointer size", ptrsz} } data = data[8:] } var s sym p := data for len(p) >= 4 { var typ byte if newTable { // Symbol type, value, Go type. typ = p[0] & 0x3F wideValue := p[0]&0x40 != 0 goType := p[0]&0x80 != 0 if typ < 26 { typ += 'A' } else { typ += 'a' - 26 } s.typ = typ p = p[1:] if wideValue { if len(p) < ptrsz { return &DecodingError{len(data), "unexpected EOF", nil} } // fixed-width value if ptrsz == 8 { s.value = order.Uint64(p[0:8]) p = p[8:] } else { s.value = uint64(order.Uint32(p[0:4])) p = p[4:] } } else { // varint value s.value = 0 shift := uint(0) for len(p) > 0 && p[0]&0x80 != 0 { s.value |= uint64(p[0]&0x7F) << shift shift += 7 p = p[1:] } if len(p) == 0 { return &DecodingError{len(data), "unexpected EOF", nil} } s.value |= uint64(p[0]) << shift p = p[1:] } if goType { if len(p) < ptrsz { return &DecodingError{len(data), "unexpected EOF", nil} } // fixed-width go type if ptrsz == 8 { s.gotype = order.Uint64(p[0:8]) p = p[8:] } else { s.gotype = uint64(order.Uint32(p[0:4])) p = p[4:] } } } else { // Value, symbol type. s.value = uint64(order.Uint32(p[0:4])) if len(p) < 5 { return &DecodingError{len(data), "unexpected EOF", nil} } typ = p[4] if typ&0x80 == 0 { return &DecodingError{len(data) - len(p) + 4, "bad symbol type", typ} } typ &^= 0x80 s.typ = typ p = p[5:] } // Name. var i int var nnul int for i = 0; i < len(p); i++ { if p[i] == 0 { nnul = 1 break } } switch typ { case 'z', 'Z': p = p[i+nnul:] for i = 0; i+2 <= len(p); i += 2 { if p[i] == 0 && p[i+1] == 0 { nnul = 2 break } } } if len(p) < i+nnul { return &DecodingError{len(data), "unexpected EOF", nil} } s.name = p[0:i] i += nnul p = p[i:] if !newTable { if len(p) < 4 { return &DecodingError{len(data), "unexpected EOF", nil} } // Go type. s.gotype = uint64(order.Uint32(p[:4])) p = p[4:] } _ = fn(s) } return nil } // NewTable decodes the Go symbol table (the ".gosymtab" section in ELF), // returning an in-memory representation. // Starting with Go 1.3, the Go symbol table no longer includes symbol data. func NewTable(symtab []byte, pcln *LineTable) (*Table, error) { var n int err := walksymtab(symtab, func(s sym) error { n++ return nil }) if err != nil { return nil, err } var t Table if pcln.isGo12() { t.go12line = pcln } fname := make(map[uint16]string) t.Syms = make([]Sym, 0, n) nf := 0 nz := 0 lasttyp := uint8(0) err = walksymtab(symtab, func(s sym) error { n := len(t.Syms) t.Syms = t.Syms[0 : n+1] ts := &t.Syms[n] ts.Type = s.typ ts.Value = s.value ts.GoType = s.gotype ts.goVersion = pcln.version switch s.typ { default: // rewrite name to use . instead of · (c2 b7) w := 0 b := s.name for i := 0; i < len(b); i++ { if b[i] == 0xc2 && i+1 < len(b) && b[i+1] == 0xb7 { i++ b[i] = '.' } b[w] = b[i] w++ } ts.Name = string(s.name[0:w]) case 'z', 'Z': if lasttyp != 'z' && lasttyp != 'Z' { nz++ } for i := 0; i < len(s.name); i += 2 { eltIdx := binary.BigEndian.Uint16(s.name[i : i+2]) elt, ok := fname[eltIdx] if !ok { return &DecodingError{-1, "bad filename code", eltIdx} } if n := len(ts.Name); n > 0 && ts.Name[n-1] != '/' { ts.Name += "/" } ts.Name += elt } } switch s.typ { case 'T', 't', 'L', 'l': nf++ case 'f': fname[uint16(s.value)] = ts.Name } lasttyp = s.typ return nil }) if err != nil { return nil, err } t.Funcs = make([]Func, 0, nf) t.Files = make(map[string]*Obj) var obj *Obj if t.go12line != nil { // Put all functions into one Obj. t.Objs = make([]Obj, 1) obj = &t.Objs[0] t.go12line.go12MapFiles(t.Files, obj) } else { t.Objs = make([]Obj, 0, nz) } // Count text symbols and attach frame sizes, parameters, and // locals to them. Also, find object file boundaries. lastf := 0 for i := 0; i < len(t.Syms); i++ { sym := &t.Syms[i] switch sym.Type { case 'Z', 'z': // path symbol if t.go12line != nil { // Go 1.2 binaries have the file information elsewhere. Ignore. break } // Finish the current object if obj != nil { obj.Funcs = t.Funcs[lastf:] } lastf = len(t.Funcs) // Start new object n := len(t.Objs) t.Objs = t.Objs[0 : n+1] obj = &t.Objs[n] // Count & copy path symbols var end int for end = i + 1; end < len(t.Syms); end++ { if c := t.Syms[end].Type; c != 'Z' && c != 'z' { break } } obj.Paths = t.Syms[i:end] i = end - 1 // loop will i++ // Record file names depth := 0 for j := range obj.Paths { s := &obj.Paths[j] if s.Name == "" { depth-- } else { if depth == 0 { t.Files[s.Name] = obj } depth++ } } case 'T', 't', 'L', 'l': // text symbol if n := len(t.Funcs); n > 0 { t.Funcs[n-1].End = sym.Value } if sym.Name == "runtime.etext" || sym.Name == "etext" { continue } // Count parameter and local (auto) syms var np, na int var end int countloop: for end = i + 1; end < len(t.Syms); end++ { switch t.Syms[end].Type { case 'T', 't', 'L', 'l', 'Z', 'z': break countloop case 'p': np++ case 'a': na++ } } // Fill in the function symbol n := len(t.Funcs) t.Funcs = t.Funcs[0 : n+1] fn := &t.Funcs[n] sym.Func = fn fn.Params = make([]*Sym, 0, np) fn.Locals = make([]*Sym, 0, na) fn.Sym = sym fn.Entry = sym.Value fn.Obj = obj if t.go12line != nil { // All functions share the same line table. // It knows how to narrow down to a specific // function quickly. fn.LineTable = t.go12line } else if pcln != nil { fn.LineTable = pcln.slice(fn.Entry) pcln = fn.LineTable } for j := i; j < end; j++ { s := &t.Syms[j] switch s.Type { case 'm': fn.FrameSize = int(s.Value) case 'p': n := len(fn.Params) fn.Params = fn.Params[0 : n+1] fn.Params[n] = s case 'a': n := len(fn.Locals) fn.Locals = fn.Locals[0 : n+1] fn.Locals[n] = s } } i = end - 1 // loop will i++ } } if t.go12line != nil && nf == 0 { t.Funcs = t.go12line.go12Funcs() } if obj != nil { obj.Funcs = t.Funcs[lastf:] } return &t, nil } // PCToFunc returns the function containing the program counter pc, // or nil if there is no such function. func (t *Table) PCToFunc(pc uint64) *Func { funcs := t.Funcs for len(funcs) > 0 { m := len(funcs) / 2 fn := &funcs[m] switch { case pc < fn.Entry: funcs = funcs[0:m] case fn.Entry <= pc && pc < fn.End: return fn default: funcs = funcs[m+1:] } } return nil } // PCToLine looks up line number information for a program counter. // If there is no information, it returns fn == nil. func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func) { if fn = t.PCToFunc(pc); fn == nil { return } if t.go12line != nil { file = t.go12line.go12PCToFile(pc) line = t.go12line.go12PCToLine(pc) } else { file, line = fn.Obj.lineFromAline(fn.LineTable.PCToLine(pc)) } return } // LineToPC looks up the first program counter on the given line in // the named file. It returns UnknownPathError or UnknownLineError if // there is an error looking up this line. func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error) { obj, ok := t.Files[file] if !ok { return 0, nil, UnknownFileError(file) } if t.go12line != nil { pc := t.go12line.go12LineToPC(file, line) if pc == 0 { return 0, nil, &UnknownLineError{file, line} } return pc, t.PCToFunc(pc), nil } abs, err := obj.alineFromLine(file, line) if err != nil { return } for i := range obj.Funcs { f := &obj.Funcs[i] pc := f.LineTable.LineToPC(abs, f.End) if pc != 0 { return pc, f, nil } } return 0, nil, &UnknownLineError{file, line} } // LookupSym returns the text, data, or bss symbol with the given name, // or nil if no such symbol is found. func (t *Table) LookupSym(name string) *Sym { // TODO(austin) Maybe make a map for i := range t.Syms { s := &t.Syms[i] switch s.Type { case 'T', 't', 'L', 'l', 'D', 'd', 'B', 'b': if s.Name == name { return s } } } return nil } // LookupFunc returns the text, data, or bss symbol with the given name, // or nil if no such symbol is found. func (t *Table) LookupFunc(name string) *Func { for i := range t.Funcs { f := &t.Funcs[i] if f.Sym.Name == name { return f } } return nil } // SymByAddr returns the text, data, or bss symbol starting at the given address. func (t *Table) SymByAddr(addr uint64) *Sym { for i := range t.Syms { s := &t.Syms[i] switch s.Type { case 'T', 't', 'L', 'l', 'D', 'd', 'B', 'b': if s.Value == addr { return s } } } return nil } /* * Object files */ // This is legacy code for Go 1.1 and earlier, which used the // Plan 9 format for pc-line tables. This code was never quite // correct. It's probably very close, and it's usually correct, but // we never quite found all the corner cases. // // Go 1.2 and later use a simpler format, documented at golang.org/s/go12symtab. func (o *Obj) lineFromAline(aline int) (string, int) { type stackEnt struct { path string start int offset int prev *stackEnt } noPath := &stackEnt{"", 0, 0, nil} tos := noPath pathloop: for _, s := range o.Paths { val := int(s.Value) switch { case val > aline: break pathloop case val == 1: // Start a new stack tos = &stackEnt{s.Name, val, 0, noPath} case s.Name == "": // Pop if tos == noPath { return "", 0 } tos.prev.offset += val - tos.start tos = tos.prev default: // Push tos = &stackEnt{s.Name, val, 0, tos} } } if tos == noPath { return "", 0 } return tos.path, aline - tos.start - tos.offset + 1 } func (o *Obj) alineFromLine(path string, line int) (int, error) { if line < 1 { return 0, &UnknownLineError{path, line} } for i, s := range o.Paths { // Find this path if s.Name != path { continue } // Find this line at this stack level depth := 0 var incstart int line += int(s.Value) pathloop: for _, s := range o.Paths[i:] { val := int(s.Value) switch { case depth == 1 && val >= line: return line - 1, nil case s.Name == "": depth-- if depth == 0 { break pathloop } else if depth == 1 { line += val - incstart } default: if depth == 1 { incstart = val } depth++ } } return 0, &UnknownLineError{path, line} } return 0, UnknownFileError(path) } /* * Errors */ // UnknownFileError represents a failure to find the specific file in // the symbol table. type UnknownFileError string func (e UnknownFileError) Error() string { return "unknown file: " + string(e) } // UnknownLineError represents a failure to map a line to a program // counter, either because the line is beyond the bounds of the file // or because there is no code on the given line. type UnknownLineError struct { File string Line int } func (e *UnknownLineError) Error() string { return "no code at " + e.File + ":" + strconv.Itoa(e.Line) } // DecodingError represents an error during the decoding of // the symbol table. type DecodingError struct { off int msg string val any } func (e *DecodingError) Error() string { msg := e.msg if e.val != nil { msg += fmt.Sprintf(" '%v'", e.val) } msg += fmt.Sprintf(" at byte %#x", e.off) return msg } vuln-1.0.4/internal/gosym/symtab_test.go000066400000000000000000000104361456050377100203530ustar00rootroot00000000000000// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gosym import ( "fmt" "testing" ) func assertString(t *testing.T, dsc, out, tgt string) { if out != tgt { t.Fatalf("Expected: %q Actual: %q for %s", tgt, out, dsc) } } func TestStandardLibPackage(t *testing.T) { s1 := Sym{Name: "io.(*LimitedReader).Read"} s2 := Sym{Name: "io.NewSectionReader"} assertString(t, fmt.Sprintf("package of %q", s1.Name), s1.PackageName(), "io") assertString(t, fmt.Sprintf("package of %q", s2.Name), s2.PackageName(), "io") assertString(t, fmt.Sprintf("receiver of %q", s1.Name), s1.ReceiverName(), "(*LimitedReader)") assertString(t, fmt.Sprintf("receiver of %q", s2.Name), s2.ReceiverName(), "") } func TestStandardLibPathPackage(t *testing.T) { s1 := Sym{Name: "debug/gosym.(*LineTable).PCToLine"} s2 := Sym{Name: "debug/gosym.NewTable"} assertString(t, fmt.Sprintf("package of %q", s1.Name), s1.PackageName(), "debug/gosym") assertString(t, fmt.Sprintf("package of %q", s2.Name), s2.PackageName(), "debug/gosym") assertString(t, fmt.Sprintf("receiver of %q", s1.Name), s1.ReceiverName(), "(*LineTable)") assertString(t, fmt.Sprintf("receiver of %q", s2.Name), s2.ReceiverName(), "") } func TestGenericNames(t *testing.T) { s1 := Sym{Name: "main.set[int]"} s2 := Sym{Name: "main.(*value[int]).get"} s3 := Sym{Name: "a/b.absDifference[c/d.orderedAbs[float64]]"} s4 := Sym{Name: "main.testfunction[.shape.int]"} assertString(t, fmt.Sprintf("package of %q", s1.Name), s1.PackageName(), "main") assertString(t, fmt.Sprintf("package of %q", s2.Name), s2.PackageName(), "main") assertString(t, fmt.Sprintf("package of %q", s3.Name), s3.PackageName(), "a/b") assertString(t, fmt.Sprintf("package of %q", s4.Name), s4.PackageName(), "main") assertString(t, fmt.Sprintf("receiver of %q", s1.Name), s1.ReceiverName(), "") assertString(t, fmt.Sprintf("receiver of %q", s2.Name), s2.ReceiverName(), "(*value[int])") assertString(t, fmt.Sprintf("receiver of %q", s3.Name), s3.ReceiverName(), "") assertString(t, fmt.Sprintf("receiver of %q", s4.Name), s4.ReceiverName(), "") assertString(t, fmt.Sprintf("base of %q", s1.Name), s1.BaseName(), "set[int]") assertString(t, fmt.Sprintf("base of %q", s2.Name), s2.BaseName(), "get") assertString(t, fmt.Sprintf("base of %q", s3.Name), s3.BaseName(), "absDifference[c/d.orderedAbs[float64]]") assertString(t, fmt.Sprintf("base of %q", s4.Name), s4.BaseName(), "testfunction[.shape.int]") } func TestRemotePackage(t *testing.T) { s1 := Sym{Name: "github.com/docker/doc.ker/pkg/mflag.(*FlagSet).PrintDefaults"} s2 := Sym{Name: "github.com/docker/doc.ker/pkg/mflag.PrintDefaults"} assertString(t, fmt.Sprintf("package of %q", s1.Name), s1.PackageName(), "github.com/docker/doc.ker/pkg/mflag") assertString(t, fmt.Sprintf("package of %q", s2.Name), s2.PackageName(), "github.com/docker/doc.ker/pkg/mflag") assertString(t, fmt.Sprintf("receiver of %q", s1.Name), s1.ReceiverName(), "(*FlagSet)") assertString(t, fmt.Sprintf("receiver of %q", s2.Name), s2.ReceiverName(), "") } func TestIssue29551(t *testing.T) { tests := []struct { sym Sym pkgName string }{ {Sym{goVersion: ver120, Name: "type:.eq.[9]debug/elf.intName"}, ""}, {Sym{goVersion: ver120, Name: "type:.hash.debug/elf.ProgHeader"}, ""}, {Sym{goVersion: ver120, Name: "type:.eq.runtime._panic"}, ""}, {Sym{goVersion: ver120, Name: "type:.hash.struct { runtime.gList; runtime.n int32 }"}, ""}, {Sym{goVersion: ver120, Name: "go:(*struct { sync.Mutex; math/big.table [64]math/big"}, ""}, {Sym{goVersion: ver120, Name: "go.uber.org/zap/buffer.(*Buffer).AppendString"}, "go.uber.org/zap/buffer"}, {Sym{goVersion: ver118, Name: "type..eq.[9]debug/elf.intName"}, ""}, {Sym{goVersion: ver118, Name: "type..hash.debug/elf.ProgHeader"}, ""}, {Sym{goVersion: ver118, Name: "type..eq.runtime._panic"}, ""}, {Sym{goVersion: ver118, Name: "type..hash.struct { runtime.gList; runtime.n int32 }"}, ""}, {Sym{goVersion: ver118, Name: "go.(*struct { sync.Mutex; math/big.table [64]math/big"}, ""}, // unfortunate {Sym{goVersion: ver118, Name: "go.uber.org/zap/buffer.(*Buffer).AppendString"}, ""}, } for _, tc := range tests { assertString(t, fmt.Sprintf("package of %q", tc.sym.Name), tc.sym.PackageName(), tc.pkgName) } } vuln-1.0.4/internal/gosym/testdata/000077500000000000000000000000001456050377100172735ustar00rootroot00000000000000vuln-1.0.4/internal/gosym/testdata/main.go000066400000000000000000000003141456050377100205440ustar00rootroot00000000000000package main func linefrompc() func pcfromline() func main() { // Prevent GC of our test symbols linefrompc() pcfromline() inline1() } func inline1() { inline2() } func inline2() { println(1) } vuln-1.0.4/internal/gosym/testdata/pclinetest.h000066400000000000000000000001121456050377100216100ustar00rootroot00000000000000// +build ignore // Empty include file to generate z symbols // EOF vuln-1.0.4/internal/gosym/testdata/pclinetest.s000066400000000000000000000237151456050377100216410ustar00rootroot00000000000000TEXT ·linefrompc(SB),4,$0 // Each byte stores its line delta BYTE $2; BYTE $1; BYTE $1; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $1; BYTE $1; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $1; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; BYTE $0; #include "pclinetest.h" BYTE $2; #include "pclinetest.h" BYTE $2; BYTE $255; TEXT ·pcfromline(SB),4,$0 // Each record stores its line delta, then n, then n more bytes BYTE $32; BYTE $0; BYTE $1; BYTE $1; BYTE $0; BYTE $1; BYTE $0; BYTE $2; BYTE $4; BYTE $0; BYTE $0; BYTE $0; BYTE $0; #include "pclinetest.h" BYTE $4; BYTE $0; BYTE $3; BYTE $3; BYTE $0; BYTE $0; BYTE $0; #include "pclinetest.h" BYTE $4; BYTE $3; BYTE $0; BYTE $0; BYTE $0; BYTE $255; vuln-1.0.4/internal/gosym/testdata/pcln115.gz000066400000000000000000003637131456050377100210350ustar00rootroot00000000000000}|UEr=yI( %% UA"݂< HPD +ʳcǎb,誋=t-c? V773g9s;w0I **-w` 6#H? 遣lG; c8cp(C|8_ӡpn~]8 a-EgB^mJ7\<~2n6*;n>/>gAbw pQpO?N^NJ`}`ؘ*en9x;C!7\^yBG? GW#^ۀ_ O*P^-_uznXyg^س xp3 \ ܲY/C`?+_ptMxf8|قWß.}?k!V`enw^Wvw;A.\< څ oߍH8+'!&~0p6wEh_AׁGCmQ}ҷ>˓p}#=NVYO#稿V+󳨏QAo?p+p"y#y?o{{s MȗཇPߩҧ9x((p[:ҿ  >n|>` '}_ۀCup7;;Lj/=>)pa6A(0q9+s/~Ϝ(+^5yA!B| _B;`.(Nou CyE~GpO?=%~~ ?.C?B?{^@} F?Cm/pO|=~#_wpC9{16XuWC t>埣{nLGCW xpYo 'B~{!f, ҟ?c_炿tl{C~rpE%:U'Ue5I@~?G[GiH_x҅(/!>#>J.9xg= 9m\/As{;Rm+ߩ#aհ(k~tpAInY޷M`;t k3Lr-lWs!/p+𶭐</|x畈?_}*a߫t;ʟ`cG"<Ȼ!~>jwH Qq\n<7;86@(/A~Y7Ae+QrppBsFw>֠ /ppK {`(pb/A~VC"~Q&Co#'p #[!ϣHA~(px?y@}\V~~{[v~OP?O6~߅F} |#wn7<~GQY{8t3y7Go?<~m? W߅" sʻ/G?|DW08?|O %>?|a78<{+"(#y u׻_{ y~ k .!⁏|Bp` ~!}þ"1^| }>C~Oa)B %`P@[k7=B? +GaoaP=s{2/K7l98  y~A{ŸQIW"}[[S@sp8 g9(B|m^LJu_{v_W wNpRp>am=<>t|g>aLė \<alg ౰w!>~] ab? O>=T g~J`C-3Q~ğ +s"=~|o+Ч !o5yg 8 pxE| 3 !pp)o=`rkF"~4.a1p WE~8_nß8t>\yNGZ{o ʯ@y.G}~[Q߆Sv7Q?]hg|8|#w'yݰlu><¿xE\ 0?* B? yA~`QG<tZ8E^Vz 5~G.A? 7!xp 8~W3N_q'2 xr3@UM^FEЯ |/A稿K@ }6@ ?p8|g3r_̹qjǁ#^Hot6Ezql8Nv3wo9x]I\#FOAy7>37zn3LHg:8x;gC;s|5Dy]` }> _zEz(p7@?}\꧟7aG? Q} π {>\{ < {>w~; n4CVB>\>YNh?#({^~8Z |_<({, yQ?h!0p+?3ϗ`Vב~F2_ 8.G{@_- +>\6ʿ.z. ۀK߃<._8 \>A|> jCG~#z o~0#U/j߁% ף}?GonMof-_ oGy#C=H݉wK\@}{!}a/ϐ0p ?`E9~?[(pK?D">/m[=U?yCGA>6{4P pCg"?F$ O~#} O/!_ C 2 d(_ ?@_6y珰/p'7!)陳fO>T ] b:xE7[>ܒ7{zCė`}+J}CЧ?|8_o7 |8Z}848x'ppثg(>à G~= 81# r}FBmPPs?A<)? g/wpx7'@QEg 4pxD;ca3aq5' }+,/pH+QӠpp:+\|8BmSg!tf>F~;3_BYO[CQQ9(Qy84砼? {nFC\X*V8FE?.n+!_y-GZo +~"xR~Q"[n.Z}#?p9po^jByQz ~ ȿp9xr> ^W_ۀg5AUOh! ,?/-ρkޖCߋp`e_^q%_{\V 'phn!{W#O^6Y!迀Cˁ@?mm[on>`'!VࢋQ `Jp8jȷCraK!/ (p+p+W+;ۀˁ.C+נ~7 P.o=m}+{[W?ppvp* VY;t;n> 8 [[E |oB(o/8 |8 <?xVЭσXyoECaoVCGPw 8?~Pw"p-蟁A'p{)?~}4G[C_gОBP>p _UϿ%sV99{m_+_$zW_)!ъZqHc]em%jk*kkVETڿ3<<[(>ƹ6gQfґ)[x ⑀PxQ;gYecmB%P)YjmD/t2mԩkLt*˶d#V϶Q`_M831ͱ?w@^vbk1 \vFX- ϏΟD/:~iB|4$+{ (~.U! sSxqAeӂ# %l:&,{̈ͱ_mx8|3&SjʻBk ο:ҁ?D@"cߋ R+EIMQ>) Kq窘<F}*[>W,BeNo: "݁-¿*ΟQR([ Qsw_ dpˊ_OGÔaUr†pMjnQOUgi6k(>2N׾,o? XHru4dv/9Vzej acD_F (h[U( ٯ:o LĦK'y# h$Z9^)sSqKʹ(#%v9w/(HCQx7яNy:*k;~ʔ}?h/5HM嚡J2[9 )|Q ^v]3N|߻ۏwBӸX/皯fYdR}H1T͏&Ȧ~d[œX~7O _x3Eyz -q0<\ [i9}*yAAMSG*3];Px0"ϥpLw^[[{zާ-T-XUXCSͦ:M4tI)?y4OhaeYj񑬀MJ䶟gw=@w>pR?DW;)xq2h@d:dzr4d<>pd=Wu,_75W(gpw7N_O,ښi +]&-gtI)(*A-CKT󞴲6e=LdR}JAwOT2/*9vžse9~)ҸLTclԱ_XZ?M[U[_ȝ5TM7ʎT7F*c˺D*F47oY]x%s_"+;ڳ/~a} b_>>gRp:K!dȠ0dK6X`LUh|ڕV~~KTLGye"'vXԷÆxq{ KWL~L&-L~CI:d0{%d]3|\|Y0 i% _,S=^񤌭U*׊^T}JO6dT<(?IP$Fkم[+S=#]JL&LkSh}'r%4~)Kz_21ؒf/㉬4ӲohkLzT)jYuGeekpB'Q\d" fO2!X&KrSa_Ƞ};Kx'S'8Fvz, I%%iVn`h%ߟ5 8y0[Qa^Iψ;xÍ'Ö'v#iX{}X\dvYJ>NOl/Rn ;Gf,=JL*Ӆ奼 zM]c*>}Y0Y(a*"XL>8~>vz En=YNrQjAe]4Ŀ1iAJ=lcdՀ3 ^b0-] q3}|ZRRBoȍl3C4ۭUL^ll[AFU!#?'|wޱkq-r׏MXJ#u/d@q!?:ǝ'\*ar*Jp>λS=48U^XJ88f̚4s\ZwL5KK"uKFF)~yTGo;v"#lL,J .{%SLOh5cxͼ)doj+<t V=~|%j\4anb?h/N%Bp%W)%̖* "M41<uI[[٬zB=Ü[X;,geoj{gR{DVdzd&Y_j{ GѬZ/,*h$8{9 Y9s,9%)9GnN:$;$IݓE^g S'53tflf{9X_Q k\=D았׭:uԱw`sтp6?h_tZM`|ff'9©XxIL'%^ q JBWo8%/mץEUcg,Pz􈵾TeC^4lz J[Re2پ%O /r^Ga{m}$ןggӂ ,87@5 S.ŶFm#據gyKk,`7D=QD@}"-,Hf><Ւ4KAqcWC9Mh#7jE;GW$.xԊ_E1++;F*NwVn΢E&7WCՌ>nfG&҈5 y4r&ON)hT'8lKe7-#Go36<ng Qd:LCPֶz_=Qޏx!̪;>O#s?6vʾ0>fr2# <-hYy1˽ٵi+{=;*op뱎]֣-{}6\G֩;C.>fVe$XGiYԭLAUcy%آ1~dYb}j{AUd1F+̸xOYADzΦ%K~[[_*e*P"G5sw~p5ƈ-;) nW^A}C~Y7ZJ7MT:X=o{O0 QB]|ʳA{lKlpPQmCۿKg^htO D}p[:w~Hsünc=%iQ&=cԿr%Vb4t4V#X^Jez'Smc4qɳ\f Mn{^Gᛉnor''+Xwn_ѩ/6lj4۪46S}) *,vKZ 햖RO&GK]e46mXi_CCCzB]3{JUrsy/.t/L}-y|F:.䬽Ql*xĦ1UDt2WΣeI[!x^_}ZViNإ&)}G&'4L">|&A2AA3fӾ5%)T.z% ZM#Ox=G9mdrwp#Ѳ宾_R(Qْc;y\sesE.}G",'fa 9ì|^pjo^2"+OY%<4(aT=-/y4[Uczz]emH298[[%<Z%)O40ӈD Ao't/ҿ][),ϓPF;3*]$WyJy*Y&=7~Mh} P60y?D똼C<﫜>U`rSŲarKRCJZT54u2`&ʄ{OKȔ2K-$d׺^<\tO!DOD6JIO( 5TIjojw֏V{]9ͅNC~*zɹ(a4ߖò [H3{|  Gjxyo;̕J6J)4 L kةɌ#EnO{+52G~w9/=iii츍t=8U.Lg&mel;=}[i2>׳`fFOfQVУ5~\ b֛l<ʂVj e)Ԡs6?XvQZ /]6͓ev HC?uC1|$(]3ui0>ش'=(S_ϼAjf}$rq^BG-'8)n?yj٧UέL{^MMvx\ZWJel|2lf+tA]G&_QXxx<Ӂemq?R -|{;kuGn6:/*玴w {sT2 WcV^z{s;O6R(rk[Η^v!{WuǿI{[/=/=szmJOR^^湔kԺl^H0Wea ,:k,1|\DD/\| x?󘏤o<ͯHc67bn5أ cV476GHѼ6~gm|b/ zInG˖bVF 0!{3ZSiewOv5G~G&}I?q4aYA+ 9{job>-AUdO,n&/@6BE=6vJDW# z)3F gM.4sxݼF3\X4otuBNڝw } 򬾞n JkDVOZ3ZeIVӌ}ˋ(<In'ge_hY>3hY1NՑB׹u8e}0ֹ~p ڿNs{֋m[ nKӂ̟P7 v_TU?/Мդ*PugE>l^]OgS3|ΘNZ"r݈ a>ғ߫M?YTQ{,Ona w:+XcM%VL's()54(u;U͸^D:s?u==j#͑91#Oa(cmFfm US_ꩰ/THHh}]~v1xKSޓw7w/k55ӼZqmߦ5qi9,c)y[OL)˧uI{Xqn4:[vΗb{ڏ's()˱sk( n݀{N|߳_t`oRfwAՠǴSOMB,@FoSѐ|)MZrپd dQŞO}bU|^q#jؕ/]¯m<^nTڣϱfܥl#/4rRxќMP 7x%;noz{]Ax L#$z=Ro OMYzfRfHMpL-If/Х/E-x/_xvXMPUMD8Y5-CKjpY_l;Ry% TW;b}gD5k9\^#rBQM|aq犠OSlNH{'=Fo1D&)e~w\Y/T5ْfF..ZZ7I ^žYB$FtjLOP д +Reߴ9*edl(·xiٽH.=DD^ٟ)ϚQITYvnc=ޣmj&f:gc6QՕc8O"|fj]=kȬ'Ah̏ (qAMeZ;qoA(֓a 1 t&5\eaηLyfזZz`ӑ0vXMQNapK{?h/Կ~:2)[;|%uWvS+O~zqe- O87.]i썼z"̴F5|FaX5< ;4~/EdИ8 26ggYf#3vN3,GiمJw{ $ZxOl:֧(] d:ϫۏ4liIu;͘W"fy 9%B|ҼV4gc(d1=z]bVУh,zt-NQ@G(RǭB9l1,ij O?Z3EIS\BRF:rP4CQ5ƐgTc*x h\c4뙓Jd3"?7yW吥4zL5#ꖦНPM jq7j8tHl)o#O\u@=R.1v^b E 5f?.0c?Ƭ팴4UTeSLjRFZfiȧ Үkė۠^Ό~lzXebu?b| + P1<]]3-A-7Ҳ̮DO?ѷ[fnp` ~)Ծng;]>7XQc?̫߯w\Km8 ͼJE7)EOIb^oW}#IzϞh<:qytJUIZ sG?FszL%K4-DqwkE^AtK'ca}x`qܱv ɗ~N#WSRyٗ K&_2fyjȲʚM!{؝qr$ˑMܝ׸Khصn=NNQaNB9w %Kk#;1T6u!n5̟i,ysuͲ)Ԇʺj+:+G3"-~OD%ZO*#5uB^ASj꼊jNF>ԝ5_+W Jkd`DO_B}Fᓾ?yPi'MaItuo]O,͐A.SMyn0Ԑ0xgx>2s>.$Jg߾4c p475~,n2C3r8Mmz䟸xzSgXȿr-hii 9"=LLXT#}hi qSS6L$I&F8UV+f {>b-<%0ĴOB0[=U{xC}yOxBF}|^/̻cgš<(v?'{enTVU;V%ʸ^?D7TG"Ƿߓ:WO[Uypa jf,Sv\| ':82>To߸6Z-,qǎӪ*Zv|#_ά֛p_~<7FB0ٛONDZfvb}F ,V חsn߹έu{$@:]w;z@#N<0RXY[{tHC{KRgaO4>/3+=MfEW4{ |-Eӥd?WEVA҄ -k{ϼ˻>CuN ؗų9c*x}<ŌVGSPWcזUhxq+'J>uպ hg(S?'>2BEGwEa]n(|ꮓr++WWs+iXB;)GG3taZ{.*/8KGq}{+A C.׿ln@_t`u}Ux=L\PP7F &ۖOKXRvK;Z3ceW>^ )cy[OP7zdܨ(yD]omBMt<#++;>zMCm~w8;idi;JE#z,C\< ~$׫iB=#6$x3 Vxt=Ezd"B}tv=U#$V_x4|O?Z/%8[{f>9`7Ǐ uGuil!5;UlMZۘn>WK6>lUZwvBDw5*ВXQj^Y٩oo%WW]}EW-gLQgZ{)W,Ģ7fL蕡TSKS+V!Tx@Sɱp|˯OK{g7i|i &Bq}ɂ%ς GR4ԱW)O@@V)F@Ly/ݝ|"[IV7Uɬ0%E}5]~oB4u'&6Oއ\N25 uU<>olIl 4^C #Dq<Y^I 4ە>9)JXG_ u6o*kxsuC*O)n~oxW?PXYQ7c+m;RSl,ďh4)D a圠RQLSHVs-2Q RL[ I&h{8AI'rT)ؘ%oW/ɽ5q#əb _$n Фjh %Q.Gnp?Ϳ -XlƺeF+|-S54y&0cgڗ,s&Dsez (sioq}~[:nuQͭiI_N,=ǥwNi>Að1Rn{mr;'?!rh/˟jjE˄gfh~vnYAUƂA͟4l*|odḰ&zZO"X}z:VޭB~$=k%/Bo=Au3iJ+Ӧ[8 u{t-Y=ՇY4[^3`f~., _{ f58Ȍ>x!{[)2_oA[IG8|deb}eʪz@KE.l|x2_l UC ϕ6o?Lm.sIk s5xk’j [ٝvĒȮ\$&={L w.~c?38j`~ &#~9\߸.FnpbBt~/ߨqFƦZZ/mh%-Naa9ޟG Gwc*- Άfb|>͍ğqF;T+d={!88+8==ow.9Kz`ԕ$,rzA1'T̢`@Q3f<3&'z_ٝeftWWWWuWW13qL垙af2)3a>gt!É xZ#ϗXMZ{c1kW0tu&ĕ5`/e \-=LǜEv J)9zu {$T l2K{f-ca'^[6>qˢZEۡ =Czu5iJfӳomsNhN S&@FRM4餦m"mQzMagN?߻=eF 6kNvFsx Яю\j=uXŀ]@Rҕ4yeX_F#ApwUqmlaZ]ҁ9i]0jbB+({&n/i\"#d9Չtq KH^ 1; g*C#w(;"~9a9|aÓw؉_̙>mf Ri#j*bM3OiɊBbήy)?N`lF`so\mn:}S1j씣IFiT 2ǫUp,cn§JM)M:Ǟ~Nz{+S!gr{8y^g[wq]rn9l?K4{P~;X/3l_TKO"F vpM,\zH,[YXXEūވ@c o 2f$g 2Q 8b `cޱcYaY5K]n$'5Rg~@9C;Fs' 3F]F Đ[PAOjmN|fS@!r$GɉHTj̓+%#BaA0lsܔ_&8Oƌɥ&a$R"R 4QսV@ uѭOw; @5!]U۳p/]q>pWԏgV/wgͳwjgL.D'j z{4 jkGށbQʹߑj%{~hִ?*PoG!QƔqek^ wT{ ߫i_Z!.-(O[]SΘryS`\Yz-RGރ@Ybл?))Sg܁@ =AphC9iõQn8@ʱ)O8\y_c{9+1՘nyk_$6o+,y1MPvK8MH 8KӖE?e%IR2L%eqD@fw Sl*+g#v wbqf_3݅IF+9V6$?{ Y/eW|/&/E2xvϩY(-&KjJW@Ne[=ϒ'1hO# שe5<+[b$ǐy~ _e(Hd츸 NƕR OŃ bcfƌ1x* $yo# A兮p5_tfŽYRY̔a t(c%S4gd:IRjF('0f e6> JQVw*Qk^Qk+%Tu @ |@Cz^/c3A"ۡwG~GUپ qe;?fNO[No9p*}Z^nD.dOBެ1ewag_Ç3yF# l?C԰/A: olJ o`TzeQjgx1h0>]QU:{)1új Mߌ 3|-5KPd|IB`> 7QѴGοFlacj$#0=@\ms&Vkfr)M>fv8aw>ƿwzx@ӣίY֣'[ٸ|5.zUXy"Nmb( H`46D\C-@\!ԂCjY 0۪k09j:co2c&_d*}Z"g&1hAQl4ޗ8E]+H^ ֡ ӹb!ޔ/s֩6nVΖrPQA✰l %݁h%bgʩcr cǴ*YscF?a 1)_0{)ޖv67mQv <יҬFrV4+j2gCYfm(#QYVJK e"RfUR̫kAtґֳδJ(o[$ԏTq휗uF85H4(M9W%hqUU|A ,jiXuxMy>sWg:I`MrEvhnUH[C\˰{OJ`0Pֱχ75>р pQy"wv%dJb@t6 9Yذ82pb5qU_'^x4Q~V?z<)Ş}ݖv4C6 hUUEa՞7ni1t?>cF d}n*zʚQUV@JI ;dQ]SiRc$ȹ:,ի?+oe_{{(^|Ia<$t)oBh^GEU~tvR$yVƩ ̪{ 0_@(k}\aU6Vh~>gu#oVGxxr}n옦sS_脹0|r),-ZP@YjO,:zW 3d|Ccĉ M\VZ(MF~) hPpFsCP%_H<=)M pS-o'Sgh(:OH fhq5H2V(EÂ3u:@ZĝB&#I/t`ՕKHa7x)L$~"5-ML<t@:P+B(IMli^_Gg}*SQOm7cGU&%5Qew E8coǐ]D^}rPѷQoOG:L8{J- cvU{w'HٮiFp&Yҙ.%A3*%LMvDQbdXF* =RC. @܏]t~,vaqA8%3@JiE_r*z1DXlo5 *`9x&-K×Jp>|d|LatxՉ= _( <&+^{.σ 00>Ffv~C '5̜t \W!cV7 eqʐ#78V[+U8O$BI}J;[xv pJZ~EVCs ;,N?naBw:1y;|# ?RSA&΢T : M]3rCvg,Q^[c=ͻִGt_o;:loti<~@_@@6 V |/ ӑ78[#Xm%4CWkJBYBco'p'ܙŬ@ ˨)t&3 Ӥ,04v|NVt&PkJJU(NB׉j\V{aǵwܲ6񂦹/#Qx@{}E6#8nZa@Е@lj`;(xIg/jjIIJ+C_!>3pTYV 32Ii1!98k^d _l5]'}#!7 H-SI | @K;W:{ݐwl 1,:W L w=2D6,3uRO:1mRuϹ6T.*K1)5C'oYWQ"&U[JVJ5)%QDjD ~i^b^f?/wqu<+tv73o`e){Z=cyb.R"ydQ>^)hނU3픇Q]ICZݪ!F)` =i\n"bBՖ5o-W@ = *J)oRds{ĩlMlfpLFY, >uA]|n^D@|@NƏM }]4.ԴZ/f:n, Ė4נ򯫻kk3à|j"#82h[T\<s3O^]ߌ;7w±ߟ8[N:fIs{tErN ni h i2aH4 Lw&QXU7E%,ĊWEr~ YQB!Ki6$+o& 8s[ YLiғOT _zڻ+C)\I=!gt%Agi2҇$f/R:%Ê# 5K~r3°ޑԻ8>f4 c3-^zϷo?ȍM3&_k`ئ4FJuFA쯭.+%pkFuvZbl/ g0Ų$PULIo)nZv@6t~N9]=+RA%JԺd-Wqpgy|vOp"*$/ xځTEN^ץt>>/!GB;:zQE.j)~|СBzΥu@u~dh!g 8}w8/D b5jv7M]QPESaL,bfl:k`9Q鍙bmPNQRUx,Ã2PhQ%;BKqFT&[/U0Zs{Qy.۔Q{oO5kYMj=/x}jSC㨸seH- R$Һ~ }~iCa0KlerwOKpbv.WUmxC䚶 f8pQ#nNoD{68!a{7RghQAW vcv‰'u":#%6Y%:V?;9'j5QG9#uʔ";dil$A=18}xCn%FN&13MMH R}-( i]>Pq*L֟Plx,QӪm3? vg'͌8 zbz}Z] 4xpsC8;cf^wznb8ޛ Qv F2 95-ٲ`)=VŷPV .1GE:,I|ͼG`\/v̟ߟӊfaT2L{/F=ZԾa0Eأذz1Ab+^D #>7Zhkt2ڤA**CxHn NPU!m%H;7'LdpBPj{<g/߯O0?mԴ;Ahc):hSQU6[ +|o/6ތfjא 19*6ʝћDhU>kp?n~}}?|Nh*[ 5Nmq#t!9dt);Hũ_3Id.BK3 u JϨc4""Jc9 wbk>Iqf7P,""]?&g㓈.7Ov+w?ݎ.*&b':DA:l04ux*ps_vΎR!F6nk8TP\*VV OYT* zO#S xOF|7uK%ͬQ,BlД1iPU`]Ćꄔ uJ}8S T0VV~0$p\G*bO#~WߵLvdZKg(mW,=9@H2ީ$pc9X?joXY'*,ҰSu6M6[~IЏlXrp2>D[H 70A*W=VU`@|c>uGep}>|yi0d-KQi+HV, 렧AAppceG|>m^_h/~O6iD3 3fLw3L ^F VKOec\P:/  %:;)At"C^mN;h:Z%7=uk-AU<ޏa]BET/x=[syUX;-I`:FSֻqF[}ѩ&d(#uz!Ż{X Jl|>0=ϔq>SN4w cP{ϔg*cy_++X?lJ˷Q+8` A74p7J)/E4be8-a^׿P}3k& o?gW<4jJzboTӪMl "67s3gt1}\hKt537. Xc^zٽyI/m5 )O@s^+pA'*(%XU;,d~"(uaH&u_aժWDU[i \ P9OH%-_ݧHGHz/~:Ah1߄=f~'fov6ImTk>#mߦ@S њ=|>l T`𥉉A;dT*m_j)3ېڔyW%Es\Sn7T$zcil#MjtI:+Y7sm6DF*ĩ$e qe#aꁂVѯޛM[M+M=8=?nܝ 7Z>'CErTqT9J2jYH[c8dRj*A&p#p% I(H1Fp;G۳z-_~|V+eŐE' F6,GɅL-r:V2g \P? {0fcT]O U!.#DenKOf'`lٴM VͪX76Y|b6I[V$f dxg&,}t]?J@7#as6Gټg^jO߃mq;Y𳘪$HI\עP'uLh_ W v0:Qjk,ts U%8'D6OY/dbˊAB"Eg _"h'j d>C H~~&`~gяSS#R"u aD6x s%sm:m4yΤcVRSGLxn\T~`V+@jPwNK,;܅@H'\" K8: Vw-`TB *߭ZjA&ЍqELZŧgu,t_vKdayNb$/[g/pŨG}脜:Z&+Kp =}N={j<}:GXO9I0s9no͡[ϯK_al=_-f~?z:ʲdӇoɿ`Ŧ86a8wq( 411#t&h6MM1b:Nc*H]ga/@8("h&%b(hsCJw8 sE.5zXe&r컐g@ԃc(ץ$J.|zeeie2"t,^1WW(WIYg2f0Y0 Yjy1^(e$yO '[~%_;ʧ<(vd}^> %sSt#-VQ].qp 7ù^[*pd$^=^H%ʿK-ំpɲIG to2@'iţcQ}oI+5?#܉Eth<*!_U* X.` ̨&w ~X>׷w)̏mo`S[a8pk8?Ov3O)O>3cph'U?;RN,{GE^磻zk@C_Ԗ'qsʜC@Iwx).j~qaF9cRm,ϷU䀦z\ːne*;#U#2sˑC=P`;7NZVE>w/*J2}1_^ɨ|ΡꠟO ퟟ"^CPi{wǞ^nG`,svHPu2;w*-:>/B\se]`ur6@PL* w3(~. BM _ByWˏ\ÿKz3:l C

G>_wmsADzk!Ps`kXG̡)n0n%;a(c+GY#ٹI{ڛ@PUrYA1^0Ġ+~0_09 `{("WYaOB Tl+P"B$Aڒcp@<, iV`OYAx!A`vr@6#Z=ow x=#mϏ*mPD@^ʎ:FElpiT~*͕ƭ)Mb tIAkY%peK+*[s$4-SesrrO: —k~IƷ,o{}X%no!Ͽѐv1 'pܬ*6WR\*NOqc0<.*PCo@m25(sE*tQ_T7cJ`RtEZJ:D09O"*YO&tdA]i˲C@[UIvu07mn9}Z~Z-xC>@[U*ʫ]x ܹ62½03ԢxJ\eqpʵ F\SO;n9c'sNQ\l퐳}O`7kPIE V]FD%S}aO+@ = =Įƃ綟N8Eއҵy,=|||p~JWIlfZ1}!$)1"2umu36+])Qc,mD-ذcA? 88~οg팋Ug[8Vt`x>j=Ҟ!ACHv`B| Oi& rV~eŒ=KiE{qнL $- )za1wЕ4Gm%y=Yh$llL³4 R@@"#1l=jO7O[C;1i>/GqN5`lm^xq@/Zն-IG )M/Zh :%*Z}뇚ϣbĶ`'%o>ٶ+'Q[Oi>gn}Y'9V1^ߴ&)x|^a_>Q Q#H;i}(4:$-P{G6/MR.ޙőmke%44q8 qPz H9.]l\Kl-FGjC2-aځڐHY(#qVh0RDu? [|w3o3lծ鯜  Λ2~ m@6cL]m<vT5kJ9'03yO,cTPu\:("Yj42Ter;uD_C5z#;A U4՜e Eg0b M']<4Z1H@qsnV)[olM X~˫cXڦNR,*]FOˠH԰;P$ kԶkG8Erpl"CĊdwnhV_O=@am'=}r6ij[o |]9iH*ư & Whok]mJ{)'c 0V 8ܭ mly":JΙrcu)]Ԉ PR> Po'Dmf*RՀA%Ѓ&_kRvd+ /v _^c`}ӘrVZ eΏUOq?OtyVo8–q0gK,p*$/@W J@NGr.\K3vKU(+eɾnNJI=cDGtrp<7 H\'໷/l̵đ InQ[rvQC)ΌlQjnЅwSg70/N9iߙS,| F p Ak ;dbv@ɏԆVj$ԀOυ%dL$Tv'L)ܮ,-I N#, g,kPѱ,  #ۥSy]K)TRZ?hSQwz(>>Jn@_%`l=ɻSxN]#g7M O=en]9La:o љ kLt[Tk_xj:! wiFz-BD9;i1$g"Iv'9}q =[w"cR*>d<`-J2MďEo!Y3qYA*2q*Yڸfklf v5bX7gfK1G]_wauvDAd Ke=Y?v7b#VFd7̾b1gP@xsKJ\TX]a? $؞OLǓ$"(%N\T1<"\9S-&U!]TL*?v(^3}]8\f 6vW9h~W^{чT* O$ Ys(1LoaIV*qCCD>@6eY $#}ccl&0ξvNm\AoGqR.Kt4AXn=yͫ3]ȊY'S,/%JhA(X@]sb.@Mcqd>n׸F$;j~uZ"/y-d 7bqʤ_ oͽ1>_QֳKgcbe 3qK&֭T\@dE޵Z.*_۪A/T{,uW:,t;G^@⟈]/ =}?zK]s-~A-uL{$7!V/D^wқ3fX-ٮé2avLMQ;j؇qP-b%n\~9}KvxIMJ`U;͈s̞פ-` &ޙ^R@ Lh`tm@qqǏMc-rl@73vuxc`JfLrtKVއMYDWdq|xH1-UNw`vjD 3$39AXƫSĩԧ3P aCK/wUpId' Dnלc&EYѬ@ w6JLOE{_JQk<2 XV˵y @X/^ݺ)3 j#ǴQ`m`Dm`n~å6f5M+ZW!Ӎ7 GԀ"rt B>ܱt0NAqxl+t/ccӘhH4 "1ȜNc-K9Z6>q&]>G7Ǎ3&zׯ;@JfZJq26]b]늧 j3 'nb.#\[vWB_`yaBߊs^Ǹq_JNYػWΕvvriIs.26%T^uD^qxw)\+ $/;]چMA*|ntRKc,E2O%<3qJ0t2hb WM۠mS'jZS,)cEJ Y0!TK 򨟌@ڟNq]ĻilI' #h B(8uEIhi fDU wB*18# )qO?'UX:W:V}NGj?s%B7a$E_2Y'M! $B?R]#tQ*7O!wJw~/CG^iI=$9~:48؂΋T :lo>6ݼ89퉬b a$^D?fAt55V:y:;YYğvgm(O;/kIW&ٽN%\j.\iPGrS\ =q]NA ?2"˾O82oNt}ug̔ B=V!O i_g 3!3QBsĮ:̖(J"+eP[ڿmW^nڳnvcьSO*Z-`'0lH6e*c1m`qAJ\P}/Tw|ORGPp'EIvD=qiUHyQҹ ƳSD͆GC0Q/}'6aQPK(_;pK})'۞95;G_=2ゆIxCMe\[# R``/kQ_nGe4^E@ `E.FL>o.13zw ] g>J0q0 lY'Ӽѝx@0{ȇs /ax<8Wzq.:rScDCo-x^P0cD259y andƽ b^Ì|SpY^ӰX }㬠e?КW@4)C7 VykQ ?`rEsQŸ$xb5 g[<'6sL-\:t`ȣ8,rX ʢ1@K ?`z-whO.8FTWwmrpxIr7K&lPΊBrk/mձ8e᛼CӔ,0J Ϛxgp#'! {@̂>q˶Ҁ'ia]X]v ٳѝs뚚&jǥƬ9g{O_(ޝuQac[CP7yA=}a?P* /l^ׯsrt{gTAoz߳iqM^Q/GX'H@=HQ YVޝWifERכ|6 F=@L# 47N32`)ڬ1}tCYkǭ~"F938~4!߮$F;wNb{((-7X꽖X>g˨C5$ri*B*%#SR"j"kZTQ*Pu*xft"򤧈Fbe*+YaXvw<B~'|&Itq~1_ꎨ]PۣIM!#ƟA` a؆+#H}`,n+++:hp< u@xP1 HwԹq}|_ȌB{|ګP_;@jgͩ?غ MxQ.w;AJ- xcAoq)lyoI;@wlh gt.UP} OZL0 Kނ,KKWW&5\p a=mK*(,D[* (Ê" ;#4˲6+0ӱA졭@±7 ˷zu b>"I@5.ti7FҌ Ѡp?6nÞd ;.:Mj)KnE:1TMM-m" yp63b؂a̐HL9i< |v25Oݧ~[͟ efgA;gg;tX6{-h[|L GﺆWҌp3=LQ7&R".!NDqêl1OS+Ul|2/o,/gdSo?g^r|QWuPTn9_Qu<"\b=LRKhӳJ67+Bo y` taH(_>`V܄IsϘS_;ĺ3O%%{o}^(Kv3Q$ĴW:HUavV/ݵBxS5{&9$OaѪ0VVn1R2}1 S^`{?7Ox&{uȺ^G;[M/ll-ݜPKJI7V5\VSdAAlh4] ڿa_Ipm_w6;GWeLK>Ms k?4.,ql7O I06LH)'tuiHarlYM4d'e[ fݱ/[4)Y*) Qzv0yk; CrO%||z >8szQzNI/N'ltLXW:ϐHL\ 5`4jsA? !sA ZD«g ^P]x,N@:Yx>pE>( "9=d˷{Uƿ35=]1Fk"y;}kT+U>e ą ­zDYL% B9Hpҧ.ڻdZi(R o(*c+op*y .joaQR0FGB}c_Jz!tpȷ'CHQJ:Ν+-h7n<$k9Đ'+_&Nx `4خcG0xT7<ΖBc@E(<V0LM[Dyzp6+"dEAT&"EYl+- n_ kg>eS>;oh_Հ x( zuM M AJJl5# lנUE|h}L]8GFGȚQc%\0:2f1j+//_ª t]?R>p̫'mC7h׋yEGMtS]52sQ@v=vR#s-#<ƒ# ".+b%EqRw8Hrd(l%:6#0+F| P[+X"-BG]diq tt%Gq!dVw] M27ߵzA}Z2XB 򳟩bv PtRݭ0u,VAq(KbqeN1Ԓ8ֲiN.aћ.RQ V\uJ+J!ӋkM84~g¼'w'8RGcȄVoN@ϏEk߈xZprz>-0oƜ&/KN pƷ{wH1j#$?5xd&y0KUzb?6H Mk# ey=JݹJOF4͔N4~A > @'lZ"T VaTiJXCZ493`s2TJ#@bo:trLխ@}z#A1Gvٱ쬺Y g.4 R3evF]ltrX`ʴIc܌1T5MMb& nh#f:FIRr] ЏFw }9aƌ=ӳDi,Q>v\mJ<5x2*w!6*`‡+߾׍H\4uLDe7 K}h Kk1JaM+}:hϺQ!7~}ڳF>ȾZF]uPj5|@zn4L-gPI'(_'UkU('yuXTT ywk<;ԫL4HQcʛ,Ksϵi]QW(@&7Rr)q-,#TUs|, Dn #v ?ƄЗcBn\(s?uRtqaRgE_rZ~TGj5͘Ht64հcO?"ݪ'93w֜Y%tc P9tda0a:0mԹh% Ku l+>o \46lC?53yF\O08 +(/Q3eU5q7oDf4ZU9{ӯ=!A ܫI8v!|vWe 挅Yk̓s$P3՚R?I٢Q 3%" #Y^s>gϟ#AH_|(^n}fW;?9g~Q:E_(#qԲad,i/]Ž+&].SD9䋄؏ÁR$1`!wuRmP߭fU?!np|yҔdH>+hU[*6}2Cr^B;piMks))u\Ʃ2RŢЌHTq/ Q$td#~_Iju~U+B-jU^K%ϚOoܞϏ|Y)QyC~l[~gZK"7q*H$574XL`[Π]W˽?Fc|ۼV_;o8~_~P'TT$z"J}n ׆5FCX=Fꗚi[X]Ռ ҹ%uN_-y7~~'h5Aѵuk'6̫;ڣ/lWs $^kzb$BJa l==Kݚvn%Q<8[,+4.>+=;_$ҽ O]0h%1Dtԝ4/}oB+~~}vrvQu3jK\.:AB)+ZPhv/2KǼRy1bW6R]2 d8Ͱt&#;WFkp`6'Myk'D'v^>@m7˦A ^L"\AkN/{idwPϐAU u T. i؝36?@3 N Y=ooǾ>-Ըْ&/&b. )?&Ƽ: i-%-AHZ6tC9Ss(Wⷿ[JKߤ6O;EMz˘~ R>Cy-ƒ֌a<~ ;O 3˧Lz-]uώ7g=Tל[yF fhQDuaӘ2-as]L4H`qmH5un}$]NB;P97ā)Ljh V+R:\noh]~:S+ Ǎz\7#/?q>-\z?i!} 2<;n쓾#螬?2Ҩm;]ώX瘿D7"\~a1"OwK5o ϙLDeGT.pM3c`o%':8rzɾbK`\Xɓ x)6dJm0p&Ee8vh?}s&(1pKZZ߁\6bm t|c^0{l;)rqg̰o'^'f+>/f=:l kJ0L\`Ѵվϣ!` ¥:0Lw0L {w}4_%>=gl"| CBzFց2`vۃuu|G'jwYv?SU\n|Ub!G߲^ s|`Ӳ޵Yj[vzyOI[s WGnHLp tS5@+hh a;?b!}ҙLe|S/BR8gaI߀2iYkS6}u%qJ@gX&ōl.?Ş} ?Łd;5xӏ<_'_/al&Y˔_dcUx xFk3Y?`w/˓5`~nuM[[ E078wZΑŤ.1}& mޜN,,55qv%oގ U=)'\H"N '{Cw=y>X&E)I?Pz3U&#sU!MӤ[ ~Ϳ-hwp@ N 瀒7^Ӂm];kVM-tRy13s|+g`'U:Bl*CL3g%d\PX0%4 SgAk0BX-boFc4ǩp,ޔ%&"᫔|{U &8=[=8 ą,V`['RDdyB2h \jc$ay_ Rsq hN#av[4o=gn݌$'spTXn$c BmSָ![pNsUVKtŌ{-U/xy߿'_@ߺ?"x!}AJlz=G e ğڢU@6Cٙˡap[ʢf<ABOR7;Zy,LQysGzY1$EJt杉BR\-M|zp|J5콹mvH y;@|ͯ m8o~-+e| 9J2ρ{^E9SӜ.ќ|x]Qu=&( -49\R$YzSq)8c$D1ARfscCi=X (9$nfUF.aһ=MGQΗuJas: b7I(ZzO-m0 \i"3]4 aD js \LLf|ضl0?~#lOVY_5{3jC)|Z\]fV9^i}8\&| pMWw2~Y hް:sq*\%N(tj8)ʺSlIyx8_eaMk@V7dej=_q5@= HpXCH_W5m ϧknؓ#jOnk?XBN ۣG}n֒玮nu%ŞXD\Pgdv19?^Xo+jׄFqTNx?}7PYF=/MpS>9EK#aRq>p4% x ˨e"&yF-rh4;*"6$O.)~n"8b~׹M\6dUu^]R4ayj/(X]}½?o;jZtq)7>Nn! Op7} EBٻAKE2R;8)4{4# a+MhW8CT%]hvs}[s78wa>=@G[#)ׇDaRP [? [3omqmo]hV_bsηX -0A?έ`ji>YkK)@ T_vfu6I"[uME5*\5."-J& Q?Bb0}WJ/Гz,KJtg$4ŮX'yw qM7-ݨL"sy}fۛWr\x yzSa) #H_B5B? 103_Wu::obv} m׻$E^.sh'c>D8_uoa)]|Ypt34GJDnai/`"+'5/Џ4-FWIYp(('D3LzE*!6a 0cXԖF#Ndp2bH^5;yeB(@Z~O)o [8qPqS~|ߞË@y` o|fq~Teqe;nn-oMjn/Y2g{_SRvv\_r ݕ =BM[7R#^fo揤֙OF&uF֭UROńtYQffč(U_cS=uЯgf/P}y.60-fg {'g1Oz/D  q9dL0HTEU{-v;Z2]JW9Rg)Xd;(1`°ccDWW05Z_ᇀ.PȺy ͧyun~. wȸO!(>W*5=C/эFz^$^x3hx שUNFwF #.MU>ס Qێ =I݄Z5X(HV=R ʌr/!?kj9rf[ 6P-Ed|XZ\\%Ͷz=Aq*)zmyX 8IOhcq-y-Z1iJVLHHLDn|~LOME]g=]8KAV v7B=]v Hzw/筵wL[ҹsܿ?) A%WC))[9սh:M 3Ȧd1,;ta iLHb:$?P=&I`P-Eƃf-lxp< ?Qkj:4T| 0̃UC+zWҺe2z[Q#EĦM(O #A!G8;C%'ۖ=hl#[m۷;7!hmepphܟ9/{K)9@vB3R,7?ueeɵf&z꼕c}j'֬ilf|\db# ۢ}o4[MF#)k-?'4m~|ޤ'_a@yU]`ul^ &\}7'q#`!7Ʈ Q IZԳ y0HJ{|邬&b+aESw5WtbN7VeTjUn%룁,A ދ 2=>H9)'Xn/uXpF/p$S* w12hD7qPy2JQ3=[4sqr_U˼ +e/EՍ̋rF77HFd4%;Yut[AbV+%GgO+@hjž84 * ʑ9~erH/jeeڬk0cv-Zk= nl.k.Yjl5r  `y0oWXk .]΃w(E@\չvϖ%H=-?Evz*H#SPI͏#2 ( h i8ɔ>rPԊJC,fA[nf}Ŵ\cU21 yp/52Ft*7H4S`qv4"o<3+UMZ#$I_A<Z$, `*CJ*KRA40aD$gڤ{c7b̀הY j`| сgr 5g5lPsv>Y{ @yPyu༜;`kB,v*RpZ m/b>X4|:0>TA MHU^R<1AuzRa0pb|9"*OjE2=& \$"kN7{EFq90^$ ȷOBz >Х OyZ) _UI@/L_AZ*m>4!ETB$]U.Mxw5bFI^9VN,IG-Bq:'\ Yyr!]_zN&~o[oRupS?I>)l8],ˆ% yZ%t bɨ, =p- נ 8'c~"WsnG8wy5B()V#k<7년o"ܐ&{vSW@ x$%P!fa,`a.`aЕ,taJhS ~l@?Z']^%'r] nu(϶u1cz`vrtp>&UW_k~mO_Fl%viE--kB> txTQ稻Fx}`QUΊMF*(N'}g  ˏ !w~tt[9:\{t^K9y #K%ْ݂O'7b.ȳFCm7!,Fޑ߇lpeRd[QT 3sre{i_Sƹ2i,[lΙT5RIr%;j T`dqсן*ԯ>`Ua#NG|m֞Z׊aTu)zSٟ kFKtQUbXig dcItA^1:v*T+2+f0 ,߻CN@C(ʏ52-gswuȏi}uȏG  OK|yxo^3|i^ZpA4MpIc/8F{Άl vIY/&P7Q9 uEI?~8;#Ewu*YeB۶k>^>·|<޴>YL ]jŌ_c<~W[78z,c ;'~fbؖ|:G9l§4Ut}ӟ;7?^'õg`݊K|"-#'wmc<Y ="ζ|Hf.ɲ>sn%MP!б'CҚJ`T`,ӕERMLxI5lZ a`2?fki}sr{ģ5WL]8C2y^z(&(6_Iɡ 5k5Af ag.{!)Z`g_j9eI<xm MfͬM(g۵~.¿%ߵVl$]gڎw_Wn~3?U1ҽÝ\&s:ʈֹՀEn=9Cyq>\1wRL;:_liqSK`jatK-Hsr0.CQYTְϦP&|7;Թ}~™4R*_'4z׾Alվ wul Q}OjE]0oKR/5VCR%Z]MtjWFG+ԩX7&2LpXϓeIT,iV(UN󮬀' "{cތY4pKfG, ~-5 ^tXs5p~ 07$09e3Z7}pjp}(CP}kٻ΍?mS*R| ~<&ds-RK~mqT%P+l"tIXZw]Ӭ` LC2;&E7C @%~cFM]:Ȗ=̆sd#OGqHfX;r?~%hǼ^;Y |WuL^)^"?/Vr%voaA3?F:ϑaWgqYtv_G~T*S ;JBKG&J( >ꂓ>y$83Lq\ǹ7q l\qA|Eca!u\9nwzP!$Q:e~SdG!lxt Ԕ3Mlҍ @` ^ϯY!9w#T +QWYn֢Ln̎:6x&f$yOu_g { VP9.o|X#q6w rTv ]E/3*AM[ Vn&Θi+DNf73A<}᛼4=4R(31ܦje>54n ֙]? vyE{?/ FFV=OōA;jn QK6{vPC~VQwlIMwi蕒q4u*EaV -=J nDe;0E-uL]ӂZ/}\uR(B~(0]#bUx Jۂ=o;ڎ;:~9kJ]b$$5$m<4}$w!_"#Kɏw,\oƅO3 2Igw1 2';bewDF}g<ٱɼd4x`@LnڑUOУSjF՚y^X ;ɞ1pm2ɪPI+ Yhz$-'bW<:;>`mҾ>b{ι3ݞd7$&!!@j(*HP򞨈~nq,rV!& s-~Wd~NiM aYց =ڭpl!ތCxL;9|pnl.7ipzZGd2r^Z%rAe>Qj<>ґQ:r _e4K 'ոC(<߽Zu( ~q2M\ᨙ|k__n#IEņ]JPGC>3@&BYvL}uy N;y<}<yd_3 YG,#vH 2n 41٠PP-0i<߮Ax,iBcɸ f./C€wx`JGϏ4*3N\\Ƞ08't~9͛` t_lWt]I*n!M7HnKn~ >pN[@ [ gB%Q;JFm r B2b,w* ES^p~oC#p7/ߵ DnN2jKczki CMyy3Ѩ4ۈW@2pBρ饌+^'irGb{]3 7و!tҶ]ybq @kǹJՍ ‹^eɟXNi@\u{#J҉|rFp$-{wUiү$ylS0;W5x@k3$Rۙ8y8FC8YI-sCu|8ansZZ.kl̕ytY|#A~U^$y;ۙqCs($Z?f.v-# >jԂ~Ssn;]|cCjo?k_^sPFږ9sf>3A{f9*RRM-c38Mh aƘ8>3r0{yWqǼ<G=ֽnP70ɉ[Tws EǦcJ׺>/g.?yT[vgK4]@{ 6"pO?k?TZd{+v߿:wFQz׹Oi'ΡҖn ^'vmYKᶳi7|Ρ[j'w3Oo팓>jFww7ewjn =S%/ݚp۩{jvNiP h};Oylm?D4T~:o|ΊZ/!PELHHwG>?tw~?iބS*LWly8c QL&NKa]5nGIpئs9gҷ3?uަz8OD}}M@#9A[ltߴGo"כH#ov\%=POs3nsJF#^G]Vm0{ \u.G5(/잰پ`\ZaN!L28ӈ","C9_օ`2vkos6{z?Fb7ޱ[4 -\=8iqK/5O~瀿&~$-Kű-KsS1v&XЌ-(浯(U5Eĉ;4Qg#Io(cyxJ#@!224*R#.#5:;-ްQ[d_#KxHҗjf'p7SN7>]F|pͳ|?>w1[4N?:]֣^|[k/nih[jCCVBQ$?oux#>)!﹮yRC0|mW:w׺hD9Rɬ#UaYèԧ;3&k22X(dxO:+FyP%zw9o} a =N{%i'sZ?9݆+]yx9YIԀ@nS22`!zQeOTfw5$GBl+!f3SFXu%7BLߟ)Lk`TU ?Y(;8&@6XF` JU2ɛ81@e~y1N*YHg83Oa΂Ym2ć x5㾬CzwyVΛ u[@0F,}#~<}2']{Uo"k^臈*@jN9hva&ͱe![ѕK٧3n?j^2 ׏f`yte)^̵O(x_)G h?\zd9;>}_'Ruݙ cHiƎ:*ra^̶ r)-YY-\>3pBɯ匦,d^srw*H?9y]{5?C!+_p{E7uk6r *kQqx1|(' hOP&CNjWL&(K$? ubБ䣰 ͒*22R > +Ñ,oĦe2)3u "Tq"7$EܳLz7yz[o#70iтٵZM?]5q Ap_hFQR,hd)~YB u>ozy[Dp[:m" aHgŽ}"iVTfO4xE Y"nqt; D!NF4)Ӛ&yi`sE]a٠YOXh6٤!:o~w[ozAʻz0"*?$Ktۢf1P~0rzo~DʲQ=ZG,Y^$Tfe}lPr,%zFȂQs5Ykmf&( t@Ǚ?b0弒J Z%zO/',e Y+r {ؠMZZ"k:cQ¬F@.M.$\1 Fe9 &_ 'P\O(Z"3m~fDӿ#|xA$ODw2*IX]^˽ߚru†I$&0@_YMfm\$Tj^jJ4Y4G$lXVN&I-W(pˢOGz3R/e?]soBh}g!~˥֓g:{5=(grE>1Fz]3ۻsS/Mn\=DIl 4'f 7-DZƒIa!?Hz?>eBY ^l#7Tq"UW}'~g5A>w뢺^۪~#[rOGSi~FY&^rxmx} ["tX]9M^BB5J\Ru5| gؐ;)D[@>2*Ib =$O@;r'֢Ks7mZ0jr=at*Se3/ :y{ЉhP'+3$P#jMSAUjV C;ݜ9NHHBڎ&dgJiиgchdS`Z 8?;ʼnsNks t3>>nE&FR.0&L6DQ0@JDIltU7͈/EÌ|?ڇE_#xB /C|98mJ|WpgdnrD`dQ"Es4 1ů W]~+?J)AO 3P!4E"w]#ՈA@|G{UJ_Km42! ݴnԐZsZ=;*xcys|Q@s#|Ds?d{7f[ ɟ;gASHBFq+fo-ʤQd)1E)~hhXRۙj+ PLϭqh5bGE Hqf_ Co9XRs)?P s'х'~t)?yaVOAK(sJ6GS"?OE\Psৈ8sඳ@:_R A1*pE>SEmJ;Hz/ѭpc\i [| j JGn|g^1|{Oڝɱ!G>Ӷ r-!u^Yv `WG(D/rlOFI1iIr$ҟKmw vn;z<fnȋ?w{}A;$i[so'A[769Bv䱜@}'PS#vO>ɟ>>߳q݉NmTٵm[CNspxE/gDoS^Eؔ_D #^kҲ{yz[ T*G9!@&5{U]AKB*9|SP{IJy`UA6R0=ԉ(*yA!0Z'hvׯA8vƋ?QH.O8Mı|g~E7ϦM?d^KfM>A+x\K,)}*DiPizoRkBiJ}ʁhJN%W=szgq."~#J~JPV dS `Xf)YX̋1Ɗcz}]g5̀D?·P.qv >BP$+ŮSU]G<Gp& w?9yyuGvI>Rz)nUA5'.Zⶳde_pێz {kX}Yk/4Ip25|H_I(P9YX?&T%9@Z }P *A M{š8ܵq z/p?/n痾py޷~"tWLJ%'i!~v/8ʽ<%- `SNr{kq/6G~"G(YWח\0fi2>w^⡦O4c ׋ކ/3Aʣ뱈7#ƺ^9&oq2E[/ģNI+AJۂbQ[$D, J׀ٿp_ 7s>#Yly' sʴr}iswGe4L<_,6Q+O O[ X9?S'*Z1;'ڛAiU5I=#^p]_G]/^^ʶ Cq%(VAY %㯼l(b[.'tB!u3a[N+.cIZAͽؒY\ΐ?⩠?@7UKUU?fW?:hZ)SXO~i7:dd]/oz8o<ɖo\^-q(=ؒS x6ovG}1r')=Zz xow~߿Rz-ۑ_߿[o ~•}<3\)߷BC/%r> kS.mw^E;oLA|*N.m\ʼni~=l& KŦ=J:E\9[5{5|j[,JIRijniu>"._`O~%qu<狓C#FPiv U.F>㩦Wkd"g<׬I^qiX4GÝz%t6L3;U'Q~ϮCF7 7@9HA?v?=9yC`%yqG{uZIwx(kdTj$̗WnE=B=~Z6X;œ2@Ҳ5 >xRk j`YbBǢ6 }[H9& / FJgwg~/&ף? E u/vI9h7vՅ<${oyLC †$SҤ;Z=jAc\MSQFi#)}=Hwh0.}A5&NQyPcD^ 7(j?{W?x  mX+[b\PPCGS܇)>K])u|G"vxNITU!Zkh:N9؎4g[]rw7O/F;;~CjZqE>BvMRs$}DzMORJ"$}Z.;3oDg_" j}{wvXoDž -mCOHٴ3iy34SJW 4>аEHu̫^6hIuDݧ#ӒќOԄT?/C!yejQ h Ca l^F8Da !\AH֣)"t g _1BA7EZoqv -3E CG=lGTKAF6[yEB[8`0A]ņxVuJk9/?QO{I4qZ:Cx)s Yh~(B~[g ЫqC=_ba~,6b?BJ,zq\g8累I]Z$:RnEz9g>˞M͇kʌm7,^0WdH# [ /Lm5 4HN1bä~^/yFmJb4Z20YF\dp< mݰ9A)䫠12"J NyhƕU~ES>%4,#`1?O>vQ=7!B oX}&{g @6#I-͊Ip9VƟҏA=01#@H DQff6DaA-CATũ"xhq3±Q\YHU8$rA?Eng#׼-bbVR/u\:9WPNIR=tOn?vĿG7BЫk,{>תWz f>ErUsE @n)*^s\lNcH%zW>ӿ9_p9w3w?4whX@ d3B ũR-V]RYtbJ.uhus)WAϹ6,ntv~qag 074K5&ptOϜSxGz-YȻr9[(Pdⳕ=]㑆!~*z}ضu*H,rqȼ uz6Ƙw_v7uʊ4¿{%ę*?n+/}3d>8r~D$S4hqv^~rOZ,/ӒO!zACAa*0"l V%<47PQZ?.!dϸ, QrC6E;b췐ynujL!ɾ,fV'>-Wi\XiWnA81nXĴfi%YCcsls]ܵ4o߉[4o>y=߯[vW圈J[vrDž3iLZ&MBDQp"ա(s5ipk(G,CEZٸMVw댫Y.=4CE[$pu^f>e,DOlBµib\;JR2b"J}^'+>LEf&cᢑ)d|\GȨnh~ZЏMb߯2㷁U%%3p=Mbi.=3K"0eaRnhb~%Ƅ~ 7<:M"7|na 6,J.F 綻'8FYzLژmCN~8eo@ђ+PgQ; wF˜dN) g/κ$;d< Jdҏ,MI2(ԘTS_Ex3hH~#u|'.iǡį/$#9 xC󚬃]|Dp8icme{.!^Db?H~ۨNm8qnƧLD J}zq#Ϋyaj~"φ&KJ/!B"a5,J%RaX(׋? Q&js6D} .0 VWO(2=X"fn>θ؞sW#q_i>}>)}Wkp fhd%rz{G@2vkO"; 7j E/7!C7g3'xer./VkDs4n{!IғIHVdJTsɕ7J?ՕٺFst.אCf<ţ(2"*U2{fNh*\UcE xO{{]ϭ曉PcDZ/h;QpC#ߥ{AK[;86ɿͤy5:q>=Ao\7"aCp쁢+vgw7,l^PzVӊ&QcLh8(aO!mKE(y"Q(?{"N_%#}VFB؎f8(8Rw!oG#>7?7 W{cwzm-D8:+(,-mcTCxoI_%o#kg'/-yRaw lVv+~J^ ǞȅWrU grxu!N%qhz$ ڟDQOTIFIYKX ı/V$f!jYfৱ@&,/3|g;|4Ƨw=ː͋=w?p G IxH&@P吟9U/(4?~<I[93OT)Opx~;y>Bs?^+~zˆ:ubI{JBg@iy6olV"yJOG=~uG=z8B3;_}|/ ;8+/0"WQl,#.AnL$-ɬlPwN6~̐)U3p3Mo5×*U#I:={ _nH(YOH᮹Us7 >:I(@F+E,_9PT~̙LmN 4䥳;ˈ08ۣȁws4g*9e~Cˌ/ ǣ=T@z"iYnR#+U|<0 LT:4_Ў\JF>Z[Icǔ+JD*4rC>n-򐵣z_B0|e]EPoLAumg>7Q?M(ar/+pmg_c[Aunì#XLe1ׁ5f>c~<q$r np<-xQHOu" R-~="H` @= n.p3}:Xk\)ķ~.s7;`$=A緛gb娄pԆlv2PzTPu: ~_bz' ~Eqˮ|W讳1*rIp[$3#lX4yODY HK/U9)͟ R!0ďAh;9~ٳɉC | ۃUZ'S|*1 م$W<2&+VFe7|ZQ8P%xA%] דW#/9y !9^i(R+俼Zʌ*d_},"68O79O#|ɹSG$r+P 鎛x=vTPvbz.Au.)<Χ}# =VU 4{`A`?UJ[B]Fn/wXT֏QvqkLip{^3!Ze+}@Y/4; /q1n !v;dX!qAK,"/#>VTwq!WLoo䳆ˆpBUiWoʏ>"vn%VVB}Eܚ."S|r?0]ޏܐy"3 M4'o˺oFs:ORS zYj#O%2ԃmv6X)Re!|lD|?}*Pul)Pֶ”ouj ODMKBz{ TXb껋e8FMe"ge:кyr)QQ~dMZ{¯,#nڪ²"KWleߴ5ցZku-6y~;㔍aSm)e?m5ΔkkTe m$Rw Ne^4;#9߉*D%DPup2{ 3.jbi%I$QGB%CP,st̿u1d=b屻+U~=+|$%t|f&,gT>1zu11/#)lz1caOF8U }ƾʻDaE%SYr gp(>ThP1MْJL͢N"$Rŝ y>T@KƊ+>sT>d1S+vo5Z WGGgC3'[Or9@B2̓ Zv8:Z;W/j/<A9jRG|_H >B^ʓ+pDj.顿pM""f}Dijɔ#Hה$D p](y &~e$dD8O8ΉTQ/G)o\ akʓ!yjzԆZ> IR\ ΡO,{mnaε9#yRۏtWMD C~,D|qQSlp4G;D~C1B>`].n'sC`U7*2.-n~M% ]0Ͻgۺ|7z)?aV[=]ac?cfeVa{ТE N}q >ϩ4Zx,DGg33z<8'GbW8do/#z|̖LY)UaH-Ebw@}Qx\=M}orvrr"C?%djօKO3pH.)W.( "サ/yļϴKȥW/ux2{it< ~uѪ>ze1 c~`:Ƨ/ˈ95Y G vVGI쌔Hp_2+m`\?6˥ +s~]pHk\¢ U|0A豳sYGpNY U8[2 @DfOwUHJ!,~W\Bv p#Z~y1 XU)J(ك\CR֥IQ|Xp񵳶|/)3)2rNY`ujh-~bߧ¿uΧS3x<ۗ*(-ri `ls_vG_1tf:/AFs 5gRĖ10A>.V+E3uΐӛi\6e4ӕ$GGdxLPT5BTF"̗XN8{.. |a՝f{맴3wH?oF~:YgvG+K$)HQ|ذy;/aҪ~I% R*ŒHvoe$eg+a+r%VrJP<\~__ݗdwvӪe;|S Hy:xЗl*i"Ҏzly3ƴU5gNtsr=(y}=:8\S{Uwꡞ@}qL^UoOJ'dB\3=C <0'}KC#C/H_#=B'د\з'{ˑSNLpOQ$ r$}9K/దOuE9fb\p#jF*>"ipYS#S BF@tƩ ZoEk7͒gy;n24;LLKJ=̖VOp^M:U"zLTB}4Qn+vEM\iCgsz{63=$G瑈A89wOww;S$[NdC.MW$j|pͦ5r^Y]:⾮<,Ibbr,6_n|+.7aG8%ytjC| y.~|4alLy?߷v60,-ixUstH&7Er!ӕyb1tI:NZk7 A*Ѿ$县[OeƹEDGV]\z΃z b/ u%3[]4L$2O=!{*8kTmFK*Tuׇ^]|6MiBslz.q<4L(hsJZ}kY kCٸXm<306-39.( ~ɫ:_^Eٙ.}Wި#EUvgqƁ<@w4|8w`&OF8s7"6a[{4Te':h{͈ߍG+z+ez&/lgc Ha8$\S)(֥Wi\58Єp8?)?Tϛ~ 9K͸DpC3=aн7;|7w։"!}9tׇc?E pt \q5]*"SU$U\]z hm'3PWM)TXr3a޸+ﰮC[?i/G\\ߴ^|r8{RJ)K_m$QjUJ)=(= (9X(,Vu2xvFc !WwS~{NW<'.zI:Xӓ}J<:5q1]%.+,`B猐d>^N2&qǵ/jo>~@|'B޵g^u&8wwS:p/¬@H}k%%`F?`8rr3~5ė",w ^=wfKj6%3MR "R_Y91f(&I(ϭd+Gx i>_:bg=W|}yb rTYxR~J^EV/WU]weOǞ4X%;MSȓFc.wDLX8sѡJFztoQ-^Wr{7L]ΥֳKX'^yoa',t n4}=*qؖ[dk'#+R2lGn `BXEZ0Plw&=1vKHG>[#߲ȕL"faŔbGmrr"_!ǯs"G/N]vd6+4@s/O(oߎѫ{ogna~<7׼IC\mg3j$% fr?]uW׿Zyx;^]4KϷFr4#"B;N)m;}G4-!Ԏqz^򙿫?UoY4LמY-o]V/NodBڽBARҊ6L%j[? Gi{g]&geiòrYFO*v΢ rr]eZ$FgP` F aM#xa~`ri҂B@xqc,Hc=zum\^6E:}9`.f!.DmU!Bw2t$(5/ܫVlHwj;{xHZsC|q{q[mCg=P0۫mj/._.W:I' ^EL;ƭ~Pr_rJC:p{5ΣDF?.##<Ρcda/zMC6']y0O1`u8iQǩ g 8{kł'< W)l#$Ní@X`AWr C[dŰ/R^|2H6Bdr^y3^=Mo/kx^qhe.ȶ`au߿'|^|=vaOlf˥ݗrXHCTwXCFmk^◯hJ0F|:S >ʉoO67ͪDvSZ:&yBԙ)*M׃?麗&QH33[x 4+}׮o"!'SbT6V~,E/ ?K Ă1T*ba'%{s$z_zA_C#CM)}—NJ=BrנXذ+#Eg6hnUZU# ̲(^[$(iv+\BlHd3)j%Vld'~QjPM'M~3 fE-5Y%!ȓ#d}$;_8#a!rQ41R]n䫑#{G;G׎!9#c ej] ;cȣcCcR%i ׹BUDgY^x̀Gw` bG#<#nI$JT+/g=syx쵢7s~)e7-tNn^y mҺY,A0 K[ďMnƛDWs,]i-%W!dO+Ɛ'$J`Pbd蓪-ߙj3VdXXMɉ0̸aN Z Q0m]7nm,;B eq+-DdlҨa+ fm ("ˡ #4WyF0Zְ -~q$q\6E|>'ogqr.YJOU żf,c#(tu֌3Ï+ &E9Gȷ!5U`hj2۬W @JLd= Kyr ܨ5Mp8Ct̳+z+0J-ji dH$8Q8DjQTK){R.3ko&"0YZKSDl[E>zo7#eC=Lz̈́/KӰ zy\""H&EJcT-R('Z"e e?30BX:^'m֗ftmG|/¯gB3OLyi拝Ptqn҂Ӑ:%_;l< }P8XP;MT es v8Jhj$a t=q&n|~p W"|rjOGO'2oDnd2)i^ULTߞLdAU ~No/EEޙ$fIBhSX'g$ea_.K2w%\ W"864[ΎLĚ4ȃXԄwr t5Q|cR4gj>?D0LqSuU  x$,ƉΉge||p2M58EADإ/]|v{d mETlt.vf;I̎HT*8$ ]͔ !,9fRR'$ü)[/֯W>=` {`aЕ}@\RkO.4sO;uvϭug%O?1e9n"L IbjR_' )0U ĄdSuݝpֈsB ̄ ۣbRm}g|2:#o™ @XzGm.򍸚S;(5%Ą#/7(9B3ZxC|!`O'"zLC?2}SSuPdq*ɉ:P¶o ;'UMbE% 2ba4,!'JP.뱬Ygڨ`YDհף8( KINr`2AE<IccGD>?".qD &a^6Mfmh",x 3&&"lN1>QMP}:8 t$ĝXHĆ83hO,ԋF6w"ku pQgCS>^߃hwuҎi8XG45΁Èdzv$ ޗ{-ֻ[ʼ]ȪL'AmMn-u*L  @ಬ#7p]s!oUS(K*+* [?`m!Ua:aKAbk 'r_>\>s}g[ѢJ7)?JN) pos"'f,UA8\U^9t/NV`Nn"%QԶH 29Vv0K~^QW r1va埁5Ґ0-*W *pEAYTTu [eXө꟦j <ot02J8ۧj;%0ACы6wMc]ߴa=9r̙{} RX6'B?Z%+M88B,'ʡrʞrI?ݣrX9?TNDYkO%yt98_B0Iwr ֶҤgf%8v#崄sWFLTa35I1W!5 gw|^G~!n){|C#`/IPhe`]oY|b[^:证W׃5a)s * WN\Mߐ7dr&!fRQĭcjzD|.95A=l?? pf,kR&l13l!]`9i-ii1]p& /$ՐaK1F9xIFahmGyRKz^H'!,*DaE A9YOOfdv- j iUHzmu:a 1&dp pË́Yصw >|hG?/|!T.h՞&H̒AH31" !LMAMTFy iHZrC{eh3z|ҡ~|{hWyS%7;rp3ysF*m TvyڿqKw$٥!Dׅ yM[K~65RQ5ּ~0Div\xb󼴪S\~~_"E!3O9%TYpSadSSp^3,5B=٫'I>- i㢟{m ܹeU!O`vR'AC#JhzvmrQ~\ķ@buAyNGAQ⎪(WP]L3 u@Dpmk=%|CpI~@׃d֟X_~|v ^|/]PiK+L}2MQb3ۆ * ؟}:NoM.Wq6oaFcbX94ArWdzF}W}r:LS~/o~ud j/XJ2F")'LHHJlTy_{> '.9oLwI9ˆ}<,h6B@<*Pgɓ)+CGC@gC}񣒔u鉭k}8?.k::p#[ҜaHkt хn"YdWtDK&^B2p$X"ML^q=Xеv/ g[ڽ]^smSs$ Ub x"r5,ȅث#r.$tƸVy{la7̧'AӬ|輠0G^=g*mlSUC(P+6c6E$YjH$<89KT '5$!UK6iu!]ÚIf3OƧQezH&Q/LV <7 ]JI{;67߸ȣ[(4IH:r"<"G2Hp8`|FS/Gx_8˻\Xg%݀{ &)EX7 Ƥ5ǘc/'W"_zrr/7XsF"=FҞ!jY1גS}AzdϛG| %VL7aTx\3¿*=B^m55T-ٺ,<ʽ JH1 }!fL2tY>iTc] qS6bbnN{+>+X$ ~ͼq Sȕ+$Is)BRh`+61S]lt7ƂY^CPE/}DT~@iAXP8y DIZX=O =MdqVM y ) C0P!ͯ<7liÜhŒBdohYCZ} //@KKj*Idp",`E|™"V#\{I7Zyříy_ K mqg"~;Y}{Զ>t#kI)-8?44qa09Od+@+!:w1Z6$ӌX"D+beMaEZlX& =Y>o,ͦ6J6А\$ZZ2̻}`$1oU0~\w7OcCsusmy׉#"}W6b=+jgy?LC\+G.>G=nf"?/ .i Zu[WttbGϚeK6vXwk[8ES].o7u}{Ү.ovq׷v}{P׷wykbtZ.me~wtyW,=e'NFJJ CC<=q^S9Yd .̐ Kz:rxFG%JMq$UX>Ts!!a.jΰHаDZlHI!ZbIFRA͔QN4JR$;14M ̬N/cxSD Csb2D%fAv-rmAAƤT2Y7JqBb9:4=>4ͽN>Y^ wϽu}’Ay`O5=/)qC'slx{:ҽ_1|{5CܗWeN^Dz_X_?vՍu}YӢqyn7N8T]%Nkc>,B(  ꞑ T2ND0N", ( bv<Ε{Q(Q/QW24RFsw WB⪬9<;0~ylOl",b J4 'dUU.c!rءt J8wSkEG˂ ][G^Rku-4Y]S(NrTMz+|l=)L5OPT h%QPbBQFRV&BƧ b^B~}ty0O#WՄ +8utkFb]%뛄YtYäou͓7xVTxHiGT^P Xo%!% V]5P~ ?cTnHC6(ZJO0Jri`w3f1p>),48C:yn9 rLq˒TE$X=QQ,,AɆW?ڠ'#>aڠwΒ zUw{5U\ذ}{mYS|lQeXX$e1(b!fȸ^vel*kBX]|+QCte@?WψNWìK1M+w[:\:UWIVT'}loy) Ԃ%)]óeoKes_ƭbJ a==N2Qډ*ԯ_DmD;B˧ ~b-=Qv^IuͿW7_[z`X<Q!tt.W P. uwj;ǩMy,]>ōH^?W/%!9J&rh1= Jlm/A'0@Iqcʚעwa9LnPv)!y#LP!2=P"oiYz*@ ZXq|S"k^5PqU7]?v~W4a^6Yt^kN5,kjծ qonVed|-mN'yE-_I)kB"\t@~yWzDQYEBLxYa35PTɞ.Ps|VY)`3s#nAIo$I+,еDoW\| H !lyo8s]ik3rTUh4ΟJ-y"Eئ=Vq{lt74}jg=:{6~y~QB^7 p{ ۶- K1_7)fs5R=铜%v26)lmf\"[\uqG 9xNw(5g^!6YҥB}ù^(J]yLu \lJXe aQA>j,kڎN00Z[xCYb~^F`pzfpޮLMMtNsЇD OhP9xL)`o*-6MGsEiZoL'jPz?#oims dpʋ*d\5=g@u4/EP<]an9!f9\sř S7S,Iqp䭪MU*pA=/T§'z{92lI*b=z׉+T_QZ֦\5"K]*QTa5_WǡƢ6 x\X>@{"]?d:؈ DT"g;vH䄋c4Zbj& k&af.zHnvs<\koaM<-T4p hvZbVuRx2M`c3yV9ߍN/6y|HC>:Es݉ɍw~|ܢ 7ܫ%K:G]o =zDL&s"˗ QGag!PElȕ~ԳAIgzv]Ub:+ ɐ{SĸGzOMi.M<RU p0dS ]\]f@ַE?E%9N L!-*WG]mu^fSb5ٸ`ρSQ/&! f#<3u4ա }2GmgtDF0mmjkUDusG#ނys0/FM7XI߭ذěEtWQm9\@|k>4l0Y&6I6Q1T1(db^j2rbnRFܬ'>Lt牗QyԈi=xL}_!IOsןX^"jU4/# 5ޣm;lyt-dpBbR23|US7QbѳubI4-]^Sa+|$dz]GsC8C(]k$?vѢB17V:Lֈ.w= [.Hoy݁R}gэAnl]n<вx]U 5BX.m"6Đ<%Yĵ6ݢkFD (Cț$_,{κ)/ ^pManwmR˗WW ,lpQzK`%))p8 ,!1[X` LFvm Hkj6<lPCi!YBja$mnEG zsO!>v_p'VuCfO*gW]^f-(:6:yLF*,DP/h}:-+ u$U鞵ZݝfyKZ!_zQYz@V _l%-Dc݆*qj.qc&C >@>xi]/Х R!vfF4zbnVhn /Y[viTT@j lfb"ȿ10%"3 0{2@' ;vH=M=pk@vcI?w'zמ)Ѕ^;t\lGp|:u.*F"% W\;kI2$Ub( Uޛߖ`\ju[:[zۖ;>`UW|Wfe *a}=c͸&SD|8/50skPᾭ'~x\jk:K6bOea5z>tsui7ڼ`fՑ&:qd9 9WP2,FD{He XJk"3ɐ> $«\~%:2ȨH-g#^P[G{εx}m^}v:'$iq]pz{qm}7̯UGU-=v43%2ph$s-!d-BQ4|eU^xy}o976,Ho]SeƊ7&vOy&vrxH6R2\1r:'G:b(fZAIREp}J_K~E&iae:QD&^#1$+9 [@@40e%z3F_4'?߁~,Axt|%4nB62iIznw5` d9IY_vWS@%BYGj"WRQ뷵$3t2,Id;cJ4-100%LK 1"۩(됒1Z3t5NNcF2D %}\==捴;AD}g^vNn`o,uMͭtϔZ3f$4'PJp@{&֕GB=`HLILX5ZD (;}Ǻ)r.nXX,JGA*JeUpN]w!~6w "||WGyu}-E964,^D;u.mnzym$gf0328C15C Rb F/F2Lr'* mdf~wҸ] s)0 a ktLTFsVWUww>n?G'noAc\'E4UL2tcaD1E.+pv`ߥɾ~{OP?7#~{D+^ω.g~E (_"2Ph7"P:=et ˎrw4r5J SK~=3;ip+eTj(/8$wk+=ٟS?i&_mK<.3>1ZfTJv =uDRfWJg=Vi"A/SM _V' G&F-㋉`95Y<}n*(]XT~C*6KU*ΉgFB2Cg=6ϫ];Kw~v}k;v /uY_ v]~8m)ɐZneٕV⪢ꊓX+tswQп%v?C}JF[iEb\c >/J. p"K@5nIzIE9)<}ݝZMjB< %0FBKp&aXLȦ ږ\Hga+1$2/8(#i㡠>! Y< g3K-9[E[{`_A*.nxp<ߺ_x_|qDߐ7DՎ@'>FzR$40d4Q=Yd)<r2'j&B$A+d:3[jzz{X@kMnGđZn&Ub'G"!iG$ǍAE#TQOaĚ *Y($1Jz ;Ud/`<˨;ui[5i?sJ侊 jL0D5|fNش/obٴUYVyu/5&?g"4/1z x̏C˿;!O=)Pm[}.O!xr^ui:@E^rӝDg›RsLc1+BQTX6M <Qy_Y+')\GX DuvL'W?>15Ίx:Ċa`S[(_F]CH6aB1b;aɫ*p9A鷄̈́A?DN%KD9xҐS} 'x.7 ~'}t_3VwOQhnr7V @m=]ߎ _\*.D%TQNfF.F{A2HŽd:iRB6 MntNFsn4PO^lj*QSm iyv"!cAr |t Z}HPD$"LO.Ub Kg40O&+6VkPGP{H/uղS3$s(Ot9I@cQJYaOFv0U!yx]ԍ}Ğ͵ M~xeu`W8?NRvb& t-MH\[4dSl[JG> ? .? %m^y3 E ؕDAWO ` 1yx3 vKg!Oz2?jٍWuu*UW6C1ɠ姐_ $?Ǧi$^Ox},iugZ!jؐHy6d!IR Bu@2ŊZJqYb$kţ3}CT /۪PgbmWΡtXP尪#,dPæ,,{WB&LdUt @}꧃8A f5ľ FDD:,Jb P2γYGG!n|*†7;t ~C$Yv#X|!=07-11A.=:[4dkJmrhf"e8P~6w҇ċd=CmgILgm}'ek{M+ece:GqP;J gő!'nD]> J+_"~3[3u Vᅪ5GAͦIb^)i5Or|LA"5yqϗcCn~d%:wtZl#'*8c 6aD2'!UMYR!2 =)/{*#* =rN_)~%N`50Qd0Qo7*Q_P:ק ?Gٟ34*FHY#o, K1Z ֑D|+=COw-]}|y,dE0BB[:1*Hta6!PdVݤraRt YfH4}xdRMIVTE Q7D̝3P0}(վs=J@8\@ߌA: y~Ft/`'ϯ^8:vH7[{zq{\`2 BE&UiB(+ԐͰHx,1^' TD_7[72ƨҭGtrƙiFz2mkyxd6`ʩ2gu2^W$JQp$98Hֱ?2DLXGpun' T tf)[ȅ`( &pW-3ώ 4gOI立:W~c~ @9ה:Z coay>׬hM(] 7m:ǣsK|3w R0? g'^vשcNSf}[5sRЏ̗AJCz9` |)z5-]\.չ#LV;*y~kPvߋrmx97EQ'ڕyHV\Ӫ[fUvkM Ym/̺i IUB' "=\^ g) \JxHW~ _n]٢Pllv7s}3ŶrV9J 35A]Q>,jk%.V'yHEGoj@O?G {]^$4~buKO[nk%Uz-|*/*:Õe i_t/Fi^ LjSr; P6ߍ}Ո?bqwhR:o4w7aa<8!Wz]]d.{m~=L;Nf*R Na}+p̓u{8pKҷx5f [k!EGPm;[NDe^Ue5$G'!DQ7_Z82T\CYN)U1C6 ['㵠]@akAy/~Ǐ=} Tt rP=ěZskzIx`g,?W;=?K@/yt"Q}!JdPe( j2{^_9# s}ev٥oK}!~ƒ1mC;SKòJd^$s!%1de''#Ker <ˬ8rұ8_GCg(_vmo6g˗ۍFkh3j8Z50&);z{95#:?|0}+.}[~YҫFFI,p9+AReO/t7;^>SV3hw^ּ遯0QqdI߀%`OwJ̹_WzK?"^=:ǨQ#ad7#!KȓiXB]s$fvo ~סSAv[_zYW,k@ xBGrqk_>ںonUF6-`,9h|w9n7574-]:?,>W)I2vCcK]=i]I*Jq?=]F1q,(I)VbRұttTxpt^t<$I6ݟqw8:$1sW4,o]rZfCIbs;qB\~:]nƥ]JRJpisxo0o?NjIMNN ĎX F12t<̕=ĿB0ݣ.~^t@&-T5t}sT'_}|O-T-h$>{qARE![GbįE> 祭r/Nպ#uXm~[4a%ؽӇsx;pB(A젅Nj 5 ?) DseQvi~dF6P^MsTM=0:BIŵ\I`ZrEIZ.OǞ9v<.S'q8COE>9$|'|мz5rr"5]e-|SqVF)lAP-#|#eȸdP):~#g+ү8SXko+F4u^ ;: Qi\"Y0 2߱<(?Ĥ>=Lr[VAT"ȇK 5_$-iLb şLS|)iYf,33[>N؇x=iGXpQ"znc5rяQɊRo:hQ-5j"zI(Op6Z| 陉=3st#-7?4htLF=^Lz!4L }- LO zk_W{aGNwljêP.[;9p>T ׼ϤupRB7r!EIR,L"PF1lTIӕ$'2Vn%ԍ$#He=DЌ㈖nJYAH :3l "dG_wBsDQd|FZS1OF X(CƇ"-(߯)&[HUn<Ǟ| A|BǞwu߂6 tQvUE(򀃎X*sIvծ~"4Z.P8̵:vkoSպvꦪI"\F"8PgFH(8SS2M6[#9ܿHDJfMA<' bd|\F!i,z9~҉|*[gT//&s?==>@(ke#ޯ3lU|ħFG3؆} So ~8E5jL'ဌ)'́r"T@aS^*w+ Ʈu()F?@=dJo0!BMqϱ,Qd`Y¢;O=xz|0>P;G^缗74ԯݰ!FwgT;hef \OMC0]2qK.N':Vh,:M0U gdoO\g3&k#Qί|+} #8i-D:)]ө> 5yB[aC7ׅj Ȝ̦h6;rkHn=O6RuMPOj;8C_R(jv?reM (0[sݰcN?ϼvrN;hSώ*fNe^9F5<SU[DsA`֢覊i":HG=QJ/X .6apsx:ReM D;Y-Q6mhAdVJU x!~h3XA~x} |u7By8% [W6wdh1ptG\t"2?\TmYH[9}")dHL?I7{t>SJM7F){ _#V.B[ts5ae$Dt4-\ TJ֨&c탊mu!4Ƃyvw~vP2GO#~>y '2Bt3;oW 2/~K _GȣL~~~Ô 2j\?YB3q}ap:FQ ߵ,@\Bp#]ܦδM&@v8c0԰@;B}1 VD0^$Nw~޽?xIC|{(VyqKP)yc9S Y#dKOя82 6~ĿCP~7>ΡnjzHzm2M' m=׽J:ӫ5v+߾k@.,Qʶ>en_#כ8*HCC .3$$B=aɍlJ3L@?6//hwm8zCot'7U`M˕ݶ<"'#U[Z{+HJ8ꮝf@QYAxo:!%#3|p2R^T?{:%4V^ckl8󔜪Jly'3Qs"hpBt1t~[, ~/_m8$#d^%]V~7R\F- H\i^(t\6RYMgYt<’!iRQ],$Rf()xs/^; {7w:ۊ"4) `}bmn~Ʊ9/B8W Oof{Ca@sPE sopxޢѿh h|n_yz,k3HlRVt}Pg R+s쨩744;,] f* 5DJSNrwv>GBtcxHƋCWs}lqM %t@1h YmeBP^W|=e^_)ʳJr`4~71UR.E;oGG=Io]mkArvb~$Iυgmd{F:]/u>޸4ن!u)O"=a>;{8?ǿI"|H3_ۻg}; z>L LL:TsN}^mE*W6Qs,0?20ylAM4֯@ȹx.z%Z}(v䖿-ᣘg=Ohl)@aksδJm0 4lQle:8#5S8b6?XsQO'`u< w~{)ğGOO{Լ<ܔ1FX4qaӘx8x]K22gYtlJw2ehos{iL.9ZVkpf|&|*_ %z8}N"J iv,W9a=)*~P[Y8k"rtԳ}h_1H…~kܼ[ţ=_csvڰlɂ+ꛛV}vƫO|ݷ:Դ?7AʠO)r/Rm٫X/ <'o?1}ɳPy12ͼ*Ӱ<>! (dSk+h-ҷ쟪`,]#i#,  1Y!~Z%ͬL /#jf}i`=ȓ [9͕TÎS>K@@X1e-$j:|,Iy @3)_8vݩhlX5qQ (*CDY~0&꿑 _  L x%X|44t1eJʇ&P'(y!.BѲsmg"_SDBſ(dȓ BX},ܿSkV0!otk"Z¹G #E?!r&@l}4=-Pͯ b hub֤4d^жQn:hwRxR5>* |B 1MuvQζ󇁦 x_UCslm , t{*h["YB{&X 1,W3 n*. ?[jOrK. g`#V$2t(?*ԻxCQo`Ol4WJ+IT,-;]]@׭F>P^lmo~+#E( f-7Pm>t@ـQ4d8c#PLHYɊ9]Àbfc_E< jX_OLBB쒟 B?yQ7Ca7\\Z\uhG5؟i4_4uIj^LfK0BcPHjJWSRB1>#^ 7XMO&b SXV~;-+6 B b)ibՒ Ի]W3|94|ho sjBMR  kz E鎗8<;̳{D ӝ\9t`,ܜ0Q(%չF_rT:yK4ѫTl67l$DKwnE2/F( F"~)BDNiTSck<@GqUm_ѝr ym3>V@ ~O )y`f l_C",4TpB܏\V,m Uƿ={5h}PhuW+~ź =\]f9l_0 ۞l 'K2ZZ\H/V Ỳ^zN؃ I:huy=컝\fB ';[Oa/s|v{\OE]v#>2Gw7#y;^'k|("Зs:S7h\@e ¥! G~K5E}#A$6OAQqR$߈ Uf:t'K"f{93\w;կF| caG\DI8O:ȉ75q&My=mJоnْf)/ _9Sd0Gsn&$+9,C{3K/,%(B>G -">E{w'ޒr`#HoqӍ58;p =a_! K8+%9=ޡg(TE"gpD|^!~ ºDoلU-3FN6({(yUtMv;WZ3$&I?PvXH :~|(St>uR<{ uSX_><9ҹ9ًM+V.ilXF| l~qRp})OubIɻ2m܅E'~oNO/4b`2n7B!RLZΧ3` 1sKQ< |T?oE؝gV#.Hsq83Zw>퐞/@ePx5(97Qt:;pru @1W>#~USW><=P/ 2HL菬I`%f@hPa!1S/a@ _mYf/b?$ܓNB+%`"Hjs>B0;f&)aRՀCμ_=x tO/x7x~U Vڹҿ3;,^~><_V6AM,ǃ3 #`)I1*C 'u"Ym_z#B#yRqu[:q~C=5 ݪξhס%{@v;'m\I r_HЙ7EZD #Z8$5C{MÜB!x.AB {"| )!Wh; .京SN=ceKδû*iUv<<-+P\8^t;P df{Ի 쯭m_;ΑPhnC (=0ߞ@'h2,Dpܜmr'7|@><v4qs[hnU=4bWiqS0~ %8|o^Mi/ӳIOO8'!tS ǡ8ԣ մ|yS#(*DE%F3r 3syo?&u?/s<\FRr=ɼ~D6.joQzUy!A2B Wfj5>F F2;z_cA^&oF_\}{ēz0ҫWpeWzcU84mGi-MNk٫kbR[hXa~+>jqćz~;C: 3?ȸ44COs%?qEJ_@>/B >\sǬFBY$5PRHDv}Sȣ]S>͔? '%?/hvu3۩p<وBAG.~_==~MF| ™==~nOz~#NX;6nЎqz,d-G. Q S<$k2P?4ud}ק,زfst!SEyuͫ( oQrʩ+:ë4_=}1{ qd>;5y{~7id/2y¤GA|i*a-L/GkD_W|;.4AqJ [OEZn>OAP=,@TzNF}(rmt /İJ &)z.,/KbB ?:'>fVt$_G[ a\Aa+IR焇)րn٩!~_oFkY1#"l,v 緞`T~Y X^x_";xƹK#rz:NSzc}d_3?|k_q~t~B:썝=MX/ <UjZ%L% EZB+ TA;lxO=nׇkpPJK@4I(r7I1ϪD)?yH ׊,]hӓ9c2&$ᠧY"UC&4*=U$J)4 (|է#ZKd)ye"ƄҢT+J/_v5 D*> QIۄ7)iJmڔ5%v Gv|ՋY9.hٓ%atQHZ Cp6! P&(J]Ηfz)6S ='4009:*7<чR5zT+ MgiuaXXwGT M`1fj$@p8-;!-|T0ɮumU_OG|)BS_ϿH?N/!֎_bI $)5Az=,=R;F#=[e ;UNu%^#~šOo%=ƖQr uһԠ~zj7Dn7/y:NtftksE\: ;б>߉+ )uT㇬Z=ټdݪQIIzs" >t?ƧKU2?$=u4 3'@~PlAe^i./QŢ^TX'ijR*c~6!^*%R?F|R?eu>o㞃Z|MX({sִ&/FΌ"҆&M悐Y~Mӷ&oP#ihCo@$L*Q:a9EN}˼ߎVWߤrFz -wsy:R}si%ʬv/:`yKvA.7^SerU}W6A|| Ջ $.oqXǏldC_?O`2{0M^UrrD%LJ'o#l_y|w Z|>EIhMȈȈ.A |R~bf$>}"Jd}t*|Ѽ=n<>(,_YîQ5F}{8z%HOv+2wZa\_#)t/y/f8RU*X&iIY %DӰ鳳 ]ó vx X}ncğFYUE:6|供gNۺ>~;]ae[F5>Rd!Y5"f=-W+pd[:0~ +Z64w$K5*crP+vʻ>]wGn6FX\$ =آƐJ RuDQPANCP2:[  g ~5XӃUw/k5K|dH:8u1ȿioRJf =JG5K#X-#7aw@d]`wa֫bWB8eW-km;a|hͪn~2s@I&UNgn/'(haw0T!F*dUiu4ԕcC<:x;Ÿx|Ga:V: n+##˨FDmGGʇzt C|#1a%aɑB3H2BQb2$1Ukб=CvK{ma$;:}ھhm¥8DhμEi2EO-0Oԩ~F0ЈcAwLJyZ:yV͝!{0?}p'gSfs7ƱBױC?Q ȴdWݿ+FL'\:nCϺʇ<)gkHZ(f#׾GEr'_;Bs)7rpFӊLF3+j~BA7SGD(п*/& "B[B qJc{5׈JFzVzz=;NS#CvǤp 3o8@1(J-LAZEoV $*:dAؤͲzS\c~ ]='_]><5ޑ)mY&xHci}乺c0Hd%(kɐhU{^ʑ(4UTL{!J ־jǜ*pB?"~3ƒ|*>tW,]8'Fn8m|29 \ïkr'UQU|REW-7G Fz " QVu?[D( g;x{.t`dW  Fx8\" 1V?^h6s}aɧ54.KH.Y_D&G#.F!-8(8><,v(&=}R}8B6MZhQѢB3* َ rjkj50~ACk3tM%M-rg~ `5nbc#t͟Pa>iyÌy+Dy}X7.0S%B/ @;v/hƺc]G׍߅51tS n(atJW<@e|DH1R0-V8dw6p5-c=ykG.6.ƙxOm67zS[)v0vƂ)viLI~J̅s`:$<}O еl'P_KgF6(Sq@HST?ҜJEqOC8u/nx F\- u`Oh:2;.W B[|`7鷨ʋ^Ej*<*xooρ -|Lt *\rŧ?73D[4IG7ۿr>!lC~;9~>e슦]D:*7bْESW.G{)ef۩l-N~ (|d7 8%1J}oB\jFAգ"냠 銢g}Çjt:08F&#/F⸣ð{D+ȟ s>_@G4԰mL׭/!UwSJYMIΧrktuXÇblyǎg@3`m?4IDj(Acs&BC.jg^k?z;sy튦s'jKXC/R(w'r&xU`je#%9߁QtJzm?w{EԵ.{}_8l\xGG/KOXMNrӳ$J18lb)H2X2dÐ:1?&z|S'1R8x{ŋ5ng'fo~!j4oh4+b$OfB JK#h7J>aBԷ8nJELy/#YHo'SO=,5UCSjs10j -fmJ;i.ݬ`|-fsxܨKsm*|3TI:;lt 4C *@6F3XOB /ﶱD|'5 ))edXѭ?`{ Ƞ!sG[F/4ڇAB7YPC92~"|_E/z#r2$c*$˙ P췃hY-Վ=8]@kȳ_{ ZTKxqJZVb搭F&`}T'dV49KGdO>:Ni˵Ft zY5 %-JBz}MXOL׀}=VNlpr2LUn5tՀ_0'ǧZ 3I趙,a>Ieԃ\İ`Z_ Sm/}Mp烦xD)S2u2gsr헉{3jaePr Gc6DE \68B??[Gɬ_XZ+m\ ~6%\`$6=hzgL1?KŔQ#%}l!ʷ;Eto~#dwx$᳸/I4ͣg23fOYnȥlɎ!dmD.Eۮ0r 5~翌ncqvB;4g4X๳uk%\yƇu.2;FbT÷H.XQ;ݥ/Q25x/t'9Q'x/ 7K[iAjA#OB:D@dI%KL%TN7ӽOBaaKEUIFJǓi޲ǔs5>]xJE˖zcɳRΒ N~>ër_A00ڰBֺ'oJC'JvˇSiG_6+)rc[pL:ė͌OG,bL\! זUв޶&Ûi9zvSNn-+:-ƝF'.4\ן.⬓4Z꒳ޓ+hrKa>05XhI,-LS {O;4cObB5>8+]s:IDE]:?'p ұ$?:Dɺ׵gzA4ѵnyb=|Sf4;1g6f$/ W!QcN!@_3coOΘuyޅ:DvHpjשL}cqu6#ٞ\yfe\ڃ?z,hhi]tu={mYܹ\*#ޭ sp2T{U9 \׎po;>?r2#'wW=yg*YETALL'O//n^ o]Fwo7"`Ωt_L_$VYїZHT۷T!%)n|fg%%i7qd?S0G? nG@DU4dWQMnw9/:W1*"M@|o^h3f͏gHJh 8U4DC.U.IIȕ[zȴEfa>U7 Ac|_v/d'ǩxѝU`9&m<,XZ-q&!\+ZoFؼ4wc5McOr2Ej'Tr>HRuK1 FI 4GzE/:րv=,]\k.vBK(g'Z\|Emm'ļg8TS :O %RY px;o͎IMx2QOk $[Q2Ip7#4W _xsVZB&=MJdC j%C krڽQ^Il G_b$&=І<]Z߿I4 D("iF4p;w eUˬ ]5O'YgUΨ2&ͧa'OTx wmxy6V |6ѿ)x|k6x.xt[yN'kgh9$l[7d|?^;bב]3cQąs#+7H|ozM3fWWUh&L]:73|wҸoWOTΪ2Nyn?q>߈do^re 7}au]d+ *WU3gVWWQ" /|0;{?jfT@( ït[pWRjEB+P9}ia÷5o}R[]5z&eV$2 )&g7}wJz2_R5b @Hhe_sA[g{}~Q[I9 PR[a\4!7t_V&?0˻Kޟ$۬;j I~+WCz͘]{ O1˹sCEH9?*ZGxWWCQ:A<պ/y 79,A{R($~)ֻeB7&ߋ|)ۍ2n3?L#V%l("٘S {Dwlp-QpX*{/&pJW\H*+N J &coh0ʤ XG ]v+mp]|G33UջwhUp~|h>c\Q1꿯 V=eҵ?3l僼yҪ[Fz{Q|ގ_<0?fM%O8wZqܙg1lpmpC45^Fz*M8}68Y6Pᜲ8?Nc VykYv tlȋ3=i3LbY̾e{wW>*a pY̎;">ӽ6 ^kmE0ep8KQ!-}[]g]zڃtpRR0/h\xQN#>k _FCbu)l^p8OT!zH?޼9mu ZӿW(bBӻJu"Nƕ!*!c 5P2,>gL?kpAs!7+,F# IE*&up#Hw{)m.EGܫ%$$X|/s)=24Arθ8j)4]q ephUڜeZpKpkHnMOr]kv-ssmi8yR2K)4qʬ 0HMZ_ Ubè歍) ([UVLS%bƧnhӬWY5aiK?yߌpq[rYz"|_Qz]{_|؀/3J~5IYIQ-i n~ߙ5v`ZOsTrhpM8?fdIOAOHOz$yI!g_l`$2vK+_I_D{mƉD0` IYZ=K[M~ >6|kd:tT52cd|ad&+r{! ɬ['RDӱɚiX(EU`uU w¿d;~xNƊ4gDuUvO}ViB9~T27m݆n6$9ѿAD-I^1RU3eanjx |SosZo<#Fn ᕐ n"QM |ZiOπ /y~?љ7CmmOG8(2-y/FZLUr?U$KYTp1Z?V&+ͯWa-n6pkBȢ-"]Q> ~ˬ{։"$'L vIwX)OLNߵMEr]&$VkpV+n*p27o>‹Vm[md8[/ѪLjm_Ias~NP N'>hW"<rŃVΥ`*V.99}rYw7! dx63`kz֩:LdSfN=hm|mHdc i$6|)j<ٔHZ؏ܪ{Qo[R]>og5O@NĒ%'&8Gu#F&onf[w2ah&W[s:~ iߛ&Vv ܟ?`#u;~Б7$ eHVW2) wX3gՎf 7>lw# &~"n)m%ax hI&ak (;K|[gCXwyWF >=tN$f:Cs륅 YA|q2u46:$=&O G2y«[y7fuH'O~Nz.vjk8zf /h aų:[O 3qvF8tD,ìH:QG;ϐ@`]n AH.COgz/J+gL-gRphî3'bp J2_ۈ+!HSV_ff Di$*}L vzv;HW{*n{a{%}߄b{@ Ul fn 4d#Z}I~7B{1uaw2S ը}qGvQm_Gx!Gwβ/ot^4vtU1\+;qs]-ϝ q]}S+ߓ<}ƦJ_R/@B#!US!. c=j4@njt"<21gZdIo7'SJJKX%e[63zI㒱kKY:kUJceC7QwcgIZR;wp;|A7p/ARȕs^>i͙>m 4@q<)8>,io8'柭kٳT? ̮`   ᥐ#|{G(o({Yq;Sr.9O> _߰N!xʞ0x"\ixYĖ<8hߢpPD : %Śu&wodN 67ν[3W.!yB]j^"77;cJqP"]Epp.]{;"_%}F!w c\ck _8UD0'ѐ= |(苎bwh*Қmw?JȬ_ѕ]lh:%hls4+ 5ʀ]^Կ35߁jߞFC6ȣ9FP$[}JvgKس]l-8`z2;~'}}Oyϕˌͷ42Y^]xEa!A!!o  2 ӣ {,\(אݐ (Cm4A* k!;! lR wv4_T؏!OBV@A}́L>x@6C! #!x}q*DC ;酴B  @}Va@B  {rr9d4佃 ;g'bp8:=I&6+OQOߋ1ѓE7 7:0p,@8^ |ip]]:~\s,7 qx-_,Pt|52Bn,rR]GZRmmvLh FDX{AJIEBN)^`[ȧH0MShE,g7dh"02Y;FR洦Y-->Q.4Z: =r=yK"VM:ۻΓ4_<w:}CBE{>XYEUӚs.h(vجjg8 vT[. 0 ϭ~qh6m}e)Ш{G6=%ИQÄޭK#˚bфSD<+^"oD-WR\\' Im)&rZk4jKšg7[:8u(Ȏky.? PtӁΫNkg afF' _TVЍ(?)"\Hq SO$BD~?#?lIlP/p=D78!_?i4vuln-1.0.4/internal/govulncheck/000077500000000000000000000000001456050377100166345ustar00rootroot00000000000000vuln-1.0.4/internal/govulncheck/govulncheck.go000066400000000000000000000164311456050377100215000ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package govulncheck contains the JSON output structs for govulncheck. // // govulncheck supports streaming JSON by emitting a series of Message // objects as it analyzes user code and discovers vulnerabilities. // Streaming JSON is useful for displaying progress in real-time for // large projects where govulncheck execution might take some time. // // govulncheck JSON emits configuration used to perform the analysis, // a user-friendly message about what is being analyzed, and the // vulnerability findings. Findings for the same vulnerability can // can be emitted several times. For instance, govulncheck JSON will // emit a finding when it sees that a vulnerable module is required // before proceeding to check if the vulnerability is imported or called. // Please see documentation on Message and related types for precise // details on the stream encoding. // // There are no guarantees on the order of messages. The pattern of emitted // messages can change in the future. Clients can follow code in handler.go // for consuming the streaming JSON programmatically. package govulncheck import ( "time" "golang.org/x/vuln/internal/osv" ) const ( // ProtocolVersion is the current protocol version this file implements ProtocolVersion = "v1.0.0" ) // Message is an entry in the output stream. It will always have exactly one // field filled in. type Message struct { Config *Config `json:"config,omitempty"` Progress *Progress `json:"progress,omitempty"` OSV *osv.Entry `json:"osv,omitempty"` Finding *Finding `json:"finding,omitempty"` } // Config must occur as the first message of a stream and informs the client // about the information used to generate the findings. // The only required field is the protocol version. type Config struct { // ProtocolVersion specifies the version of the JSON protocol. ProtocolVersion string `json:"protocol_version"` // ScannerName is the name of the tool, for example, govulncheck. // // We expect this JSON format to be used by other tools that wrap // govulncheck, which will have a different name. ScannerName string `json:"scanner_name,omitempty"` // ScannerVersion is the version of the tool. ScannerVersion string `json:"scanner_version,omitempty"` // DB is the database used by the tool, for example, // vuln.go.dev. DB string `json:"db,omitempty"` // LastModified is the last modified time of the data source. DBLastModified *time.Time `json:"db_last_modified,omitempty"` // GoVersion is the version of Go used for analyzing standard library // vulnerabilities. GoVersion string `json:"go_version,omitempty"` // ScanLevel instructs govulncheck to analyze at a specific level of detail. // Valid values include module, package and symbol. ScanLevel ScanLevel `json:"scan_level,omitempty"` } // Progress messages are informational only, intended to allow users to monitor // the progress of a long running scan. // A stream must remain fully valid and able to be interpreted with all progress // messages removed. type Progress struct { // A time stamp for the message. Timestamp *time.Time `json:"time,omitempty"` // Message is the progress message. Message string `json:"message,omitempty"` } // Finding contains information on a discovered vulnerability. Each vulnerability // will likely have multiple findings in JSON mode. This is because govulncheck // emits findings as it does work, and therefore could emit one module level, // one package level, and potentially multiple symbol level findings depending // on scan level. // Multiple symbol level findings can be emitted when multiple symbols of the // same vuln are called or govulncheck decides to show multiple traces for the // same symbol. type Finding struct { // OSV is the id of the detected vulnerability. OSV string `json:"osv,omitempty"` // FixedVersion is the module version where the vulnerability was // fixed. This is empty if a fix is not available. // // If there are multiple fixed versions in the OSV report, this will // be the fixed version in the latest range event for the OSV report. // // For example, if the range events are // {introduced: 0, fixed: 1.0.0} and {introduced: 1.1.0}, the fixed version // will be empty. // // For the stdlib, we will show the fixed version closest to the // Go version that is used. For example, if a fix is available in 1.17.5 and // 1.18.5, and the GOVERSION is 1.17.3, 1.17.5 will be returned as the // fixed version. FixedVersion string `json:"fixed_version,omitempty"` // Trace contains an entry for each frame in the trace. // // Frames are sorted starting from the imported vulnerable symbol // until the entry point. The first frame in Frames should match // Symbol. // // In binary mode, trace will contain a single-frame with no position // information. // // For module level source findings, the trace will contain a single-frame // with no symbol, position, or package information. For package level source // findings, the trace will contain a single-frame with no symbol or position // information. Trace []*Frame `json:"trace,omitempty"` } // Frame represents an entry in a finding trace. type Frame struct { // Module is the module path of the module containing this symbol. // // Importable packages in the standard library will have the path "stdlib". Module string `json:"module"` // Version is the module version from the build graph. Version string `json:"version,omitempty"` // Package is the import path. Package string `json:"package,omitempty"` // Function is the function name. Function string `json:"function,omitempty"` // Receiver is the receiver type if the called symbol is a method. // // The client can create the final symbol name by // prepending Receiver to FuncName. Receiver string `json:"receiver,omitempty"` // Position describes an arbitrary source position // including the file, line, and column location. // A Position is valid if the line number is > 0. Position *Position `json:"position,omitempty"` } // Position represents arbitrary source position. type Position struct { Filename string `json:"filename,omitempty"` // filename, if any Offset int `json:"offset"` // byte offset, starting at 0 Line int `json:"line"` // line number, starting at 1 Column int `json:"column"` // column number, starting at 1 (byte count) } // ScanLevel represents the detail level at which a scan occurred. // This can be necessary to correctly interpret the findings, for instance if // a scan is at symbol level and a finding does not have a symbol it means the // vulnerability was imported but not called. If the scan however was at // "package" level, that determination cannot be made. type ScanLevel string const ( ScanLevelModule = "module" ScanLevelPackage = "package" ScanLevelSymbol = "symbol" ) // WantSymbols can be used to check whether the scan level is one that is able // to generate symbols called findings. func (l ScanLevel) WantSymbols() bool { return l == ScanLevelSymbol } // WantPackages can be used to check whether the scan level is one that is able // to generate package func (l ScanLevel) WantPackages() bool { return l == ScanLevelPackage || l == ScanLevelSymbol } vuln-1.0.4/internal/govulncheck/govulncheck_test.go000066400000000000000000000006011456050377100225270ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package govulncheck_test import ( "testing" "golang.org/x/vuln/internal/test" ) func TestImports(t *testing.T) { test.VerifyImports(t, "golang.org/x/vuln/internal/osv", // allowed to pull in the osv json entries ) } vuln-1.0.4/internal/govulncheck/handler.go000066400000000000000000000025551456050377100206070ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package govulncheck import ( "encoding/json" "io" "golang.org/x/vuln/internal/osv" ) // Handler handles messages to be presented in a vulnerability scan output // stream. type Handler interface { // Config communicates introductory message to the user. Config(config *Config) error // Progress is called to display a progress message. Progress(progress *Progress) error // OSV is invoked for each osv Entry in the stream. OSV(entry *osv.Entry) error // Finding is called for each vulnerability finding in the stream. Finding(finding *Finding) error } // HandleJSON reads the json from the supplied stream and hands the decoded // output to the handler. func HandleJSON(from io.Reader, to Handler) error { dec := json.NewDecoder(from) for dec.More() { msg := Message{} // decode the next message in the stream if err := dec.Decode(&msg); err != nil { return err } // dispatch the message var err error if msg.Config != nil { err = to.Config(msg.Config) } if msg.Progress != nil { err = to.Progress(msg.Progress) } if msg.OSV != nil { err = to.OSV(msg.OSV) } if msg.Finding != nil { err = to.Finding(msg.Finding) } if err != nil { return err } } return nil } vuln-1.0.4/internal/govulncheck/jsonhandler.go000066400000000000000000000022351456050377100214740ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package govulncheck import ( "encoding/json" "io" "golang.org/x/vuln/internal/osv" ) type jsonHandler struct { enc *json.Encoder } // NewJSONHandler returns a handler that writes govulncheck output as json. func NewJSONHandler(w io.Writer) Handler { enc := json.NewEncoder(w) enc.SetIndent("", " ") return &jsonHandler{enc: enc} } // Config writes config block in JSON to the underlying writer. func (h *jsonHandler) Config(config *Config) error { return h.enc.Encode(Message{Config: config}) } // Progress writes a progress message in JSON to the underlying writer. func (h *jsonHandler) Progress(progress *Progress) error { return h.enc.Encode(Message{Progress: progress}) } // OSV writes an osv entry in JSON to the underlying writer. func (h *jsonHandler) OSV(entry *osv.Entry) error { return h.enc.Encode(Message{OSV: entry}) } // Finding writes a finding in JSON to the underlying writer. func (h *jsonHandler) Finding(finding *Finding) error { return h.enc.Encode(Message{Finding: finding}) } vuln-1.0.4/internal/internal.go000066400000000000000000000017511456050377100164730ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package internal contains functionality for x/vuln. package internal // IDDirectory is the name of the directory that contains entries // listed by their IDs. const IDDirectory = "ID" // Pseudo-module paths used for parts of the Go system. // These are technically not valid module paths, so we // mustn't pass them to module.EscapePath. // Keep in sync with vulndb/internal/database/generate.go. const ( // GoStdModulePath is the internal Go module path string used // when listing vulnerabilities in standard library. GoStdModulePath = "stdlib" // GoCmdModulePath is the internal Go module path string used // when listing vulnerabilities in the go command. GoCmdModulePath = "toolchain" // UnknownModulePath is a special module path for when we cannot work out // the module for a package. UnknownModulePath = "unknown" ) vuln-1.0.4/internal/osv/000077500000000000000000000000001456050377100151335ustar00rootroot00000000000000vuln-1.0.4/internal/osv/osv.go000066400000000000000000000226461456050377100163030ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package osv implements the Go OSV vulnerability format // (https://go.dev/security/vuln/database#schema), which is a subset of // the OSV shared vulnerability format // (https://ossf.github.io/osv-schema), with database and // ecosystem-specific meanings and fields. // // As this package is intended for use with the Go vulnerability // database, only the subset of features which are used by that // database are implemented (for instance, only the SEMVER affected // range type is implemented). package osv import "time" // RangeType specifies the type of version range being recorded and // defines the interpretation of the RangeEvent object's Introduced // and Fixed fields. // // In this implementation, only the "SEMVER" type is supported. // // See https://ossf.github.io/osv-schema/#affectedrangestype-field. type RangeType string // RangeTypeSemver indicates a semantic version as defined by // SemVer 2.0.0, with no leading "v" prefix. const RangeTypeSemver RangeType = "SEMVER" // Ecosystem identifies the overall library ecosystem. // In this implementation, only the "Go" ecosystem is supported. type Ecosystem string // GoEcosystem indicates the Go ecosystem. const GoEcosystem Ecosystem = "Go" // Pseudo-module paths used to describe vulnerabilities // in the Go standard library and toolchain. const ( // GoStdModulePath is the pseudo-module path string used // to describe vulnerabilities in the Go standard library. GoStdModulePath = "stdlib" // GoCmdModulePath is the pseudo-module path string used // to describe vulnerabilities in the go command. GoCmdModulePath = "toolchain" ) // Module identifies the Go module containing the vulnerability. // Note that this field is called "package" in the OSV specification. // // See https://ossf.github.io/osv-schema/#affectedpackage-field. type Module struct { // The Go module path. Required. // For the Go standard library, this is "stdlib". // For the Go toolchain, this is "toolchain." Path string `json:"name"` // The ecosystem containing the module. Required. // This should always be "Go". Ecosystem Ecosystem `json:"ecosystem"` } // RangeEvent describes a single module version that either // introduces or fixes a vulnerability. // // Exactly one of Introduced and Fixed must be present. Other range // event types (e.g, "last_affected" and "limit") are not supported in // this implementation. // // See https://ossf.github.io/osv-schema/#affectedrangesevents-fields. type RangeEvent struct { // Introduced is a version that introduces the vulnerability. // A special value, "0", represents a version that sorts before // any other version, and should be used to indicate that the // vulnerability exists from the "beginning of time". Introduced string `json:"introduced,omitempty"` // Fixed is a version that fixes the vulnerability. Fixed string `json:"fixed,omitempty"` } // Range describes the affected versions of the vulnerable module. // // See https://ossf.github.io/osv-schema/#affectedranges-field. type Range struct { // Type is the version type that should be used to interpret the // versions in Events. Required. // In this implementation, only the "SEMVER" type is supported. Type RangeType `json:"type"` // Events is a list of versions representing the ranges in which // the module is vulnerable. Required. // The events should be sorted, and MUST represent non-overlapping // ranges. // There must be at least one RangeEvent containing a value for // Introduced. // See https://ossf.github.io/osv-schema/#examples for examples. Events []RangeEvent `json:"events"` } // ReferenceType is a reference (link) type. type ReferenceType string const ( // ReferenceTypeAdvisory is a published security advisory for // the vulnerability. ReferenceTypeAdvisory = ReferenceType("ADVISORY") // ReferenceTypeArticle is an article or blog post describing the vulnerability. ReferenceTypeArticle = ReferenceType("ARTICLE") // ReferenceTypeReport is a report, typically on a bug or issue tracker, of // the vulnerability. ReferenceTypeReport = ReferenceType("REPORT") // ReferenceTypeFix is a source code browser link to the fix (e.g., a GitHub commit). ReferenceTypeFix = ReferenceType("FIX") // ReferenceTypePackage is a home web page for the package. ReferenceTypePackage = ReferenceType("PACKAGE") // ReferenceTypeEvidence is a demonstration of the validity of a vulnerability claim. ReferenceTypeEvidence = ReferenceType("EVIDENCE") // ReferenceTypeWeb is a web page of some unspecified kind. ReferenceTypeWeb = ReferenceType("WEB") ) // Reference is a reference URL containing additional information, // advisories, issue tracker entries, etc., about the vulnerability. // // See https://ossf.github.io/osv-schema/#references-field. type Reference struct { // The type of reference. Required. Type ReferenceType `json:"type"` // The fully-qualified URL of the reference. Required. URL string `json:"url"` } // Affected gives details about a module affected by the vulnerability. // // See https://ossf.github.io/osv-schema/#affected-fields. type Affected struct { // The affected Go module. Required. // Note that this field is called "package" in the OSV specification. Module Module `json:"package"` // The module version ranges affected by the vulnerability. Ranges []Range `json:"ranges,omitempty"` // Details on the affected packages and symbols within the module. EcosystemSpecific EcosystemSpecific `json:"ecosystem_specific"` } // Package contains additional information about an affected package. // This is an ecosystem-specific field for the Go ecosystem. type Package struct { // Path is the package import path. Required. Path string `json:"path,omitempty"` // GOOS is the execution operating system where the symbols appear, if // known. GOOS []string `json:"goos,omitempty"` // GOARCH specifies the execution architecture where the symbols appear, if // known. GOARCH []string `json:"goarch,omitempty"` // Symbols is a list of function and method names affected by // this vulnerability. Methods are listed as .. // // If included, only programs which use these symbols will be marked as // vulnerable by `govulncheck`. If omitted, any program which imports this // package will be marked vulnerable. Symbols []string `json:"symbols,omitempty"` } // EcosystemSpecific contains additional information about the vulnerable // module for the Go ecosystem. // // See https://go.dev/security/vuln/database#schema. type EcosystemSpecific struct { // Packages is the list of affected packages within the module. Packages []Package `json:"imports,omitempty"` } // Entry represents a vulnerability in the Go OSV format, documented // in https://go.dev/security/vuln/database#schema. // It is a subset of the OSV schema (https://ossf.github.io/osv-schema). // Only fields that are published in the Go Vulnerability Database // are supported. type Entry struct { // SchemaVersion is the OSV schema version used to encode this // vulnerability. SchemaVersion string `json:"schema_version,omitempty"` // ID is a unique identifier for the vulnerability. Required. // The Go vulnerability database issues IDs of the form // GO--. ID string `json:"id"` // Modified is the time the entry was last modified. Required. Modified time.Time `json:"modified,omitempty"` // Published is the time the entry should be considered to have // been published. Published time.Time `json:"published,omitempty"` // Withdrawn is the time the entry should be considered to have // been withdrawn. If the field is missing, then the entry has // not been withdrawn. Withdrawn *time.Time `json:"withdrawn,omitempty"` // Aliases is a list of IDs for the same vulnerability in other // databases. Aliases []string `json:"aliases,omitempty"` // Summary gives a one-line, English textual summary of the vulnerability. // It is recommended that this field be kept short, on the order of no more // than 120 characters. Summary string `json:"summary,omitempty"` // Details contains additional English textual details about the vulnerability. Details string `json:"details"` // Affected contains information on the modules and versions // affected by the vulnerability. Affected []Affected `json:"affected"` // References contains links to more information about the // vulnerability. References []Reference `json:"references,omitempty"` // Credits contains credits to entities that helped find or fix the // vulnerability. Credits []Credit `json:"credits,omitempty"` // DatabaseSpecific contains additional information about the // vulnerability, specific to the Go vulnerability database. DatabaseSpecific *DatabaseSpecific `json:"database_specific,omitempty"` } // Credit represents a credit for the discovery, confirmation, patch, or // other event in the life cycle of a vulnerability. // // See https://ossf.github.io/osv-schema/#credits-fields. type Credit struct { // Name is the name, label, or other identifier of the individual or // entity being credited. Required. Name string `json:"name"` } // DatabaseSpecific contains additional information about the // vulnerability, specific to the Go vulnerability database. // // See https://go.dev/security/vuln/database#schema. type DatabaseSpecific struct { // The URL of the Go advisory for this vulnerability, of the form // "https://pkg.go.dev/GO-YYYY-XXXX". URL string `json:"url,omitempty"` } vuln-1.0.4/internal/osv/osv_test.go000066400000000000000000000005101456050377100173240ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package osv_test import ( "testing" "golang.org/x/vuln/internal/test" ) func TestImports(t *testing.T) { test.VerifyImports(t) // no non stdlib imports allowed } vuln-1.0.4/internal/sarif/000077500000000000000000000000001456050377100154305ustar00rootroot00000000000000vuln-1.0.4/internal/sarif/sarif.go000066400000000000000000000146171456050377100170740ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package sarif defines Static Analysis Results Interchange Format // (SARIF) types supported by govulncheck. // // See https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=sarif // for more information on the SARIF format. package sarif import "golang.org/x/vuln/internal/govulncheck" // Log is the top-level SARIF object encoded in UTF-8. type Log struct { // Version should always be "2.1.0" Version string `json:"version,omitempty"` // Schema should always be "https://json.schemastore.org/sarif-2.1.0.json" Schema string `json:"$schema,omitempty"` // Runs describes executions of static analysis tools. For govulncheck, // there will be only one run object. Runs []Run `json:"runs,omitempty"` } // Run summarizes results of a single invocation of a static analysis tool, // in this case govulncheck. type Run struct { Tool Tool `json:"tool,omitempty"` // Results contain govulncheck findings. There should be exactly one // Result per a detected OSV. Results []Result `json:"results,omitempty"` // URIBaseIDs encodes the SARIF originalUriBaseIds property URIBaseIDs map[string]ArtifactLocation `json:"originalUriBaseIds,omitempty"` } // Tool captures information about govulncheck analysis that was run. type Tool struct { Driver Driver `json:"driver,omitempty"` } // Driver provides details about the govulncheck binary being executed. type Driver struct { // Name should be "govulncheck" Name string `json:"name,omitempty"` // Version should be the govulncheck version Version string `json:"semanticVersion,omitempty"` // InformationURI should point to the description of govulncheck tool InformationURI string `json:"informationUri,omitempty"` // Properties are govulncheck run metadata, such as vuln db, Go version, etc. Properties govulncheck.Config `json:"properties,omitempty"` Rules []Rule `json:"rules,omitempty"` } // Rule corresponds to the static analysis rule/analyzer that // produces findings. For govulncheck, rules are OSVs. type Rule struct { // ID is OSV.ID ID string `json:"id,omitempty"` ShortDescription Description `json:"shortDescription,omitempty"` FullDescription Description `json:"fullDescription,omitempty"` Help Description `json:"help,omitempty"` HelpURI string `json:"helpUri,omitempty"` // Properties should contain OSV.Aliases (CVEs and GHSAs) as tags. // Consumers of govulncheck SARIF can use these tags to filter // results based on, say, CVEs. Properties RuleTags `json:"properties,omitempty"` } // RuleTags defines properties.tags. type RuleTags struct { Tags []string `json:"tags,omitempty"` } // Description is a text in its raw or markdown form. type Description struct { Text string `json:"text,omitempty"` Markdown string `json:"markdown,omitempty"` } // Result is a set of govulncheck findings for an OSV. For call stack // mode, it will contain call stacks for the OSV. There is exactly // one Result per detected OSV. Only findings at the lowest possible // level appear in the Result. For instance, if there are findings // with call stacks for an OSV, those findings will be in the Result, // but not the “imports” and “requires” findings for the same OSV. type Result struct { // RuleID is the Rule.ID/OSV producing the finding. RuleID string `json:"ruleId,omitempty"` // Level is one of "error", "warning", "note", and "none". Level string `json:"level,omitempty"` // Message explains the overall findings. Message Description `json:"message,omitempty"` // Locations to which the findings are associated. Locations []Location `json:"locations,omitempty"` // CodeFlows can encode call stacks produced by govulncheck. CodeFlows []CodeFlow `json:"codeFlows,omitempty"` // Stacks can encode call stacks produced by govulncheck. Stacks []Stack `json:"stacks,omitempty"` // TODO: support Fixes when integration points to the same } // CodeFlow describes a detected offending flow of information in terms of // code locations. More precisely, it can contain several related information // flows, keeping them together. In govulncheck, those can be all call stacks // for, say, a particular symbol or package. type CodeFlow struct { // ThreadFlows is effectively a set of related information flows. ThreadFlows []ThreadFlow `json:"threadFlows,omitempty"` } // ThreadFlow encodes an information flow as a sequence of locations. // For govulncheck, it can encode a call stack. type ThreadFlow struct { Locations []ThreadFlowLocation `json:"locations,omitempty"` } type ThreadFlowLocation struct { Module string `json:"module,omitempty"` // Location also contains a Message field. Location Location `json:"location,omitempty"` // Can also contain Stack field that encodes a call stack // leading to this thread flow location. } // Stack is a sequence of frames and can encode a govulncheck call stack. type Stack struct { Message Description `json:"message,omitempty"` Frames []Frame `json:"frames,omitempty"` } // Frame is effectively a module location. It can also contain thread and // parameter info, but those are not needed for govulncheck. type Frame struct { Module string `json:"module,omitempty"` Location Location `json:"location,omitempty"` } // Location is currently a physical location annotated with a message. type Location struct { PhysicalLocation PhysicalLocation `json:"physicalLocation,omitempty"` Message Description `json:"message,omitempty"` } type PhysicalLocation struct { ArtifactLocation ArtifactLocation `json:"artifactLocation,omitempty"` Region Region `json:"region,omitempty"` } // ArtifactLocation is a path to an offending file. type ArtifactLocation struct { // URI is a path to the artifact. If URIBaseID is empty, then // URI is absolute and it needs to start with, say, "file://." URI string `json:"uri,omitempty"` // URIBaseID is offset for URI. An example is %SRCROOT%, used by // Github Code Scanning to point to the root of the target repo. // Its value must be defined in URIBaseIDs of a Run. URIBaseID string `json:"uriBaseId,omitempty"` } // Region is a target region within a file. type Region struct { StartLine int `json:"startLine,omitempty"` StartColumn int `json:"startColumn,omitempty"` EndLine int `json:"endLine,omitempty"` EndColumn int `json:"endColumn,omitempty"` } vuln-1.0.4/internal/scan/000077500000000000000000000000001456050377100152505ustar00rootroot00000000000000vuln-1.0.4/internal/scan/binary.go000066400000000000000000000050701456050377100170650ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package scan import ( "context" "encoding/json" "errors" "io" "os" "runtime/debug" "golang.org/x/vuln/internal/buildinfo" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/derrors" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/vulncheck" ) // runBinary detects presence of vulnerable symbols in an executable or its minimal blob representation. func runBinary(ctx context.Context, handler govulncheck.Handler, cfg *config, client *client.Client) (err error) { defer derrors.Wrap(&err, "govulncheck") bin, err := createBin(cfg.patterns[0]) if err != nil { return err } p := &govulncheck.Progress{Message: binaryProgressMessage} if err := handler.Progress(p); err != nil { return err } return vulncheck.Binary(ctx, handler, bin, &cfg.Config, client) } func createBin(path string) (*vulncheck.Bin, error) { f, err := os.Open(path) if err != nil { return nil, err } defer f.Close() // First check if the path points to a Go binary. Otherwise, blob // parsing might json decode a Go binary which takes time. // // TODO(#64716): use fingerprinting to make this precise, clean, and fast. mods, packageSymbols, bi, err := buildinfo.ExtractPackagesAndSymbols(f) if err == nil { return &vulncheck.Bin{ Modules: mods, PkgSymbols: packageSymbols, GoVersion: bi.GoVersion, GOOS: findSetting("GOOS", bi), GOARCH: findSetting("GOARCH", bi), }, nil } // Otherwise, see if the path points to a valid blob. bin := parseBlob(f) if bin != nil { return bin, nil } return nil, errors.New("unrecognized binary format") } // parseBlob extracts vulncheck.Bin from a valid blob. If it // cannot recognize a valid blob, returns nil. func parseBlob(from io.Reader) *vulncheck.Bin { dec := json.NewDecoder(from) var h header if err := dec.Decode(&h); err != nil { return nil // no header } else if h.Name != extractModeID || h.Version != extractModeVersion { return nil // invalid header } var b vulncheck.Bin if err := dec.Decode(&b); err != nil { return nil // no body } if dec.More() { return nil // we want just header and body, nothing else } return &b } // findSetting returns value of setting from bi if present. // Otherwise, returns "". func findSetting(setting string, bi *debug.BuildInfo) string { for _, s := range bi.Settings { if s.Key == setting { return s.Value } } return "" } vuln-1.0.4/internal/scan/color.go000066400000000000000000000046701456050377100167240ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan const ( // These are all the constants for the terminal escape strings colorEscape = "\033[" colorEnd = "m" colorReset = colorEscape + "0" + colorEnd colorBold = colorEscape + "1" + colorEnd colorFaint = colorEscape + "2" + colorEnd colorUnderline = colorEscape + "4" + colorEnd colorBlink = colorEscape + "5" + colorEnd fgBlack = colorEscape + "30" + colorEnd fgRed = colorEscape + "31" + colorEnd fgGreen = colorEscape + "32" + colorEnd fgYellow = colorEscape + "33" + colorEnd fgBlue = colorEscape + "34" + colorEnd fgMagenta = colorEscape + "35" + colorEnd fgCyan = colorEscape + "36" + colorEnd fgWhite = colorEscape + "37" + colorEnd bgBlack = colorEscape + "40" + colorEnd bgRed = colorEscape + "41" + colorEnd bgGreen = colorEscape + "42" + colorEnd bgYellow = colorEscape + "43" + colorEnd bgBlue = colorEscape + "44" + colorEnd bgMagenta = colorEscape + "45" + colorEnd bgCyan = colorEscape + "46" + colorEnd bgWhite = colorEscape + "47" + colorEnd fgBlackHi = colorEscape + "90" + colorEnd fgRedHi = colorEscape + "91" + colorEnd fgGreenHi = colorEscape + "92" + colorEnd fgYellowHi = colorEscape + "93" + colorEnd fgBlueHi = colorEscape + "94" + colorEnd fgMagentaHi = colorEscape + "95" + colorEnd fgCyanHi = colorEscape + "96" + colorEnd fgWhiteHi = colorEscape + "97" + colorEnd bgBlackHi = colorEscape + "100" + colorEnd bgRedHi = colorEscape + "101" + colorEnd bgGreenHi = colorEscape + "102" + colorEnd bgYellowHi = colorEscape + "103" + colorEnd bgBlueHi = colorEscape + "104" + colorEnd bgMagentaHi = colorEscape + "105" + colorEnd bgCyanHi = colorEscape + "106" + colorEnd bgWhiteHi = colorEscape + "107" + colorEnd ) const ( _ = colorReset _ = colorBold _ = colorFaint _ = colorUnderline _ = colorBlink _ = fgBlack _ = fgRed _ = fgGreen _ = fgYellow _ = fgBlue _ = fgMagenta _ = fgCyan _ = fgWhite _ = fgBlackHi _ = fgRedHi _ = fgGreenHi _ = fgYellowHi _ = fgBlueHi _ = fgMagentaHi _ = fgCyanHi _ = fgWhiteHi _ = bgBlack _ = bgRed _ = bgGreen _ = bgYellow _ = bgBlue _ = bgMagenta _ = bgCyan _ = bgWhite _ = bgBlackHi _ = bgRedHi _ = bgGreenHi _ = bgYellowHi _ = bgBlueHi _ = bgMagentaHi _ = bgCyanHi _ = bgWhiteHi ) vuln-1.0.4/internal/scan/errors.go000066400000000000000000000047211456050377100171170ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "errors" "strings" ) //lint:file-ignore ST1005 Ignore staticcheck message about error formatting var ( // ErrVulnerabilitiesFound indicates that vulnerabilities were detected // when running govulncheck. This returns exit status 3 when running // without the -json flag. errVulnerabilitiesFound = &exitCodeError{message: "vulnerabilities found", code: 3} // errHelp indicates that usage help was requested. errHelp = &exitCodeError{message: "help requested", code: 0} // errUsage indicates that there was a usage error on the command line. // // In this case, we assume that the user does not know how to run // govulncheck, and print the usage message with exit status 2. errUsage = &exitCodeError{message: "invalid usage", code: 2} // errGoVersionMismatch is used to indicate that there is a mismatch between // the Go version used to build govulncheck and the one currently on PATH. errGoVersionMismatch = errors.New(`Loading packages failed, possibly due to a mismatch between the Go version used to build govulncheck and the Go version on PATH. Consider rebuilding govulncheck with the current Go version.`) // errNoGoMod indicates that a go.mod file was not found in this module. errNoGoMod = errors.New(`no go.mod file govulncheck only works with Go modules. Try navigating to your module directory. Otherwise, run go mod init to make your project a module. See https://go.dev/doc/modules/managing-dependencies for more information.`) // errNoBinaryFlag indicates that govulncheck was run on a file, without // the -mode=binary flag. errNoBinaryFlag = errors.New(`By default, govulncheck runs source analysis on Go modules. Did you mean to run govulncheck with -mode=binary? For details, run govulncheck -h.`) ) type exitCodeError struct { message string code int } func (e *exitCodeError) Error() string { return e.message } func (e *exitCodeError) ExitCode() int { return e.code } // isGoVersionMismatchError checks if err is due to mismatch between // the Go version used to build govulncheck and the one currently // on PATH. func isGoVersionMismatchError(err error) bool { msg := err.Error() // See golang.org/x/tools/go/packages/packages.go. return strings.Contains(msg, "This application uses version go") && strings.Contains(msg, "It may fail to process source files") } vuln-1.0.4/internal/scan/extract.go000066400000000000000000000030421456050377100172500ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package scan import ( "encoding/json" "fmt" "io" "sort" "golang.org/x/vuln/internal/derrors" "golang.org/x/vuln/internal/vulncheck" ) const ( // extractModeID is the unique name of the extract mode protocol extractModeID = "govulncheck-extract" extractModeVersion = "0.1.0" ) // header information for the blob output. type header struct { Name string `json:"name"` Version string `json:"version"` } // runExtract dumps the extracted abstraction of binary at cfg.patterns to out. // It prints out exactly two blob messages, one with the header and one with // the vulncheck.Bin as the body. func runExtract(cfg *config, out io.Writer) (err error) { defer derrors.Wrap(&err, "govulncheck") bin, err := createBin(cfg.patterns[0]) if err != nil { return err } sortBin(bin) // sort for easier testing and validation header := header{ Name: extractModeID, Version: extractModeVersion, } enc := json.NewEncoder(out) if err := enc.Encode(header); err != nil { return fmt.Errorf("marshaling blob header: %v", err) } if err := enc.Encode(bin); err != nil { return fmt.Errorf("marshaling blob body: %v", err) } return nil } func sortBin(bin *vulncheck.Bin) { sort.SliceStable(bin.PkgSymbols, func(i, j int) bool { return bin.PkgSymbols[i].Pkg+"."+bin.PkgSymbols[i].Name < bin.PkgSymbols[j].Pkg+"."+bin.PkgSymbols[j].Name }) } vuln-1.0.4/internal/scan/filepath.go000066400000000000000000000014101456050377100173670ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "path/filepath" "strings" ) // AbsRelShorter takes path and returns its path relative // to the current directory, if shorter. Returns path // when path is an empty string or upon any error. func AbsRelShorter(path string) string { if path == "" { return "" } c, err := filepath.Abs(".") if err != nil { return path } r, err := filepath.Rel(c, path) if err != nil { return path } rSegments := strings.Split(r, string(filepath.Separator)) pathSegments := strings.Split(path, string(filepath.Separator)) if len(rSegments) < len(pathSegments) { return r } return path } vuln-1.0.4/internal/scan/filepath_test.go000066400000000000000000000010671456050377100204360ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "path/filepath" "testing" ) func TestAbsRelShorter(t *testing.T) { thisFileAbs, _ := filepath.Abs("filepath_test.go") for _, test := range []struct { l string want string }{ {"filepath_test.go", "filepath_test.go"}, {thisFileAbs, "filepath_test.go"}, } { if got := AbsRelShorter(test.l); got != test.want { t.Errorf("want %s; got %s", test.want, got) } } } vuln-1.0.4/internal/scan/flags.go000066400000000000000000000131501456050377100166730ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "flag" "fmt" "io" "os" "strings" "golang.org/x/tools/go/buildutil" "golang.org/x/vuln/internal/govulncheck" ) type config struct { govulncheck.Config patterns []string mode string db string json bool dir string tags []string test bool show []string env []string } const ( modeBinary = "binary" modeSource = "source" modeConvert = "convert" // only intended for use by gopls modeQuery = "query" // only intended for use by gopls modeExtract = "extract" // currently, only binary extraction is supported ) func parseFlags(cfg *config, stderr io.Writer, args []string) error { var tagsFlag buildutil.TagsFlag var showFlag showFlag var version bool flags := flag.NewFlagSet("", flag.ContinueOnError) flags.SetOutput(stderr) flags.BoolVar(&cfg.json, "json", false, "output JSON") flags.BoolVar(&cfg.test, "test", false, "analyze test files (only valid for source mode, default false)") flags.StringVar(&cfg.dir, "C", "", "change to `dir` before running govulncheck") flags.StringVar(&cfg.db, "db", "https://vuln.go.dev", "vulnerability database `url`") flags.StringVar(&cfg.mode, "mode", modeSource, "supports source or binary") flags.Var(&tagsFlag, "tags", "comma-separated `list` of build tags") flags.Var(&showFlag, "show", "enable display of additional information specified by the comma separated `list`\nThe supported values are 'traces','color', 'version', and 'verbose'") flags.BoolVar(&version, "version", false, "print the version information") scanLevel := flags.String("scan", "symbol", "set the scanning level desired, one of module, package or symbol") flags.Usage = func() { fmt.Fprint(flags.Output(), `Govulncheck reports known vulnerabilities in dependencies. Usage: govulncheck [flags] [patterns] govulncheck -mode=binary [flags] [binary] `) flags.PrintDefaults() fmt.Fprintf(flags.Output(), "\n%s\n", detailsMessage) } if err := flags.Parse(args); err != nil { if err == flag.ErrHelp { return errHelp } return err } cfg.patterns = flags.Args() cfg.tags = tagsFlag cfg.show = showFlag if version { cfg.show = append(cfg.show, "version") } cfg.ScanLevel = govulncheck.ScanLevel(*scanLevel) if err := validateConfig(cfg); err != nil { fmt.Fprintln(flags.Output(), err) return errUsage } return nil } var supportedModes = map[string]bool{ modeSource: true, modeBinary: true, modeConvert: true, modeQuery: true, modeExtract: true, } var supportedLevels = map[string]bool{ govulncheck.ScanLevelModule: true, govulncheck.ScanLevelPackage: true, govulncheck.ScanLevelSymbol: true, } func validateConfig(cfg *config) error { if _, ok := supportedModes[cfg.mode]; !ok { return fmt.Errorf("%q is not a valid mode", cfg.mode) } if _, ok := supportedLevels[string(cfg.ScanLevel)]; !ok { return fmt.Errorf("%q is not a valid scan level", cfg.ScanLevel) } switch cfg.mode { case modeSource: if len(cfg.patterns) == 1 && isFile(cfg.patterns[0]) { return fmt.Errorf("%q is a file.\n\n%v", cfg.patterns[0], errNoBinaryFlag) } if cfg.ScanLevel == govulncheck.ScanLevelModule && len(cfg.patterns) != 0 { return fmt.Errorf("patterns are not accepted for module only scanning") } case modeBinary: if cfg.test { return fmt.Errorf("the -test flag is not supported in binary mode") } if len(cfg.tags) > 0 { return fmt.Errorf("the -tags flag is not supported in binary mode") } if len(cfg.patterns) != 1 { return fmt.Errorf("only 1 binary can be analyzed at a time") } if !isFile(cfg.patterns[0]) { return fmt.Errorf("%q is not a file", cfg.patterns[0]) } case modeExtract: if cfg.test { return fmt.Errorf("the -test flag is not supported in extract mode") } if len(cfg.tags) > 0 { return fmt.Errorf("the -tags flag is not supported in extract mode") } if len(cfg.patterns) != 1 { return fmt.Errorf("only 1 binary can be extracted at a time") } if cfg.json { return fmt.Errorf("the -json flag must be off in extract mode") } if !isFile(cfg.patterns[0]) { return fmt.Errorf("%q is not a file (source extraction is not supported)", cfg.patterns[0]) } case modeConvert: if len(cfg.patterns) != 0 { return fmt.Errorf("patterns are not accepted in convert mode") } if cfg.dir != "" { return fmt.Errorf("the -C flag is not supported in convert mode") } if cfg.test { return fmt.Errorf("the -test flag is not supported in convert mode") } if len(cfg.tags) > 0 { return fmt.Errorf("the -tags flag is not supported in convert mode") } case modeQuery: if cfg.test { return fmt.Errorf("the -test flag is not supported in query mode") } if len(cfg.tags) > 0 { return fmt.Errorf("the -tags flag is not supported in query mode") } if !cfg.json { return fmt.Errorf("the -json flag must be set in query mode") } for _, pattern := range cfg.patterns { // Parse the input here so that we can catch errors before // outputting the Config. if _, _, err := parseModuleQuery(pattern); err != nil { return err } } } if cfg.json && len(cfg.show) > 0 { return fmt.Errorf("the -show flag is not supported for JSON output") } return nil } func isFile(path string) bool { s, err := os.Stat(path) if err != nil { return false } return !s.IsDir() } type showFlag []string func (v *showFlag) Set(s string) error { *v = append(*v, strings.Split(s, ",")...) return nil } func (f *showFlag) Get() interface{} { return *f } func (f *showFlag) String() string { return "" } vuln-1.0.4/internal/scan/print_test.go000066400000000000000000000043011456050377100177700ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan_test import ( "bytes" "flag" "io/fs" "os" "path/filepath" "strings" "testing" "github.com/google/go-cmp/cmp" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/scan" ) var update = flag.Bool("update", false, "update test files with results") func TestPrinting(t *testing.T) { testdata := os.DirFS("testdata") inputs, err := fs.Glob(testdata, "*.json") if err != nil { t.Fatal(err) } for _, input := range inputs { name := strings.TrimSuffix(input, ".json") rawJSON, _ := fs.ReadFile(testdata, input) textfiles, err := fs.Glob(testdata, name+"*.txt") if err != nil { t.Fatal(err) } for _, textfile := range textfiles { textname := strings.TrimSuffix(textfile, ".txt") t.Run(textname, func(t *testing.T) { wantText, _ := fs.ReadFile(testdata, textfile) got := &bytes.Buffer{} handler := scan.NewTextHandler(got) handler.Show(strings.Split(textname, "_")[1:]) testRunHandler(t, rawJSON, handler) if diff := cmp.Diff(string(wantText), got.String()); diff != "" { if *update { // write the output back to the file os.WriteFile(filepath.Join("testdata", textfile), got.Bytes(), 0644) return } t.Errorf("Readable mismatch (-want, +got):\n%s", diff) } }) } t.Run(name+"_json", func(t *testing.T) { // this effectively tests that we can round trip the json got := &strings.Builder{} testRunHandler(t, rawJSON, govulncheck.NewJSONHandler(got)) if diff := cmp.Diff(strings.TrimSpace(string(rawJSON)), strings.TrimSpace(got.String())); diff != "" { t.Errorf("JSON mismatch (-want, +got):\n%s", diff) } }) } } func testRunHandler(t *testing.T, rawJSON []byte, handler govulncheck.Handler) { if err := govulncheck.HandleJSON(bytes.NewReader(rawJSON), handler); err != nil { t.Fatal(err) } err := scan.Flush(handler) switch e := err.(type) { case nil: case interface{ ExitCode() int }: if e.ExitCode() != 0 && e.ExitCode() != 3 { // not success or vulnerabilities found t.Fatal(err) } default: t.Fatal(err) } } vuln-1.0.4/internal/scan/query.go000066400000000000000000000035451456050377100167530ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "context" "fmt" "regexp" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/govulncheck" isem "golang.org/x/vuln/internal/semver" ) // runQuery reports vulnerabilities that apply to the queries in the config. func runQuery(ctx context.Context, handler govulncheck.Handler, cfg *config, c *client.Client) error { reqs := make([]*client.ModuleRequest, len(cfg.patterns)) for i, query := range cfg.patterns { mod, ver, err := parseModuleQuery(query) if err != nil { return err } if err := handler.Progress(queryProgressMessage(mod, ver)); err != nil { return err } reqs[i] = &client.ModuleRequest{ Path: mod, Version: ver, } } resps, err := c.ByModules(ctx, reqs) if err != nil { return err } ids := make(map[string]bool) for _, resp := range resps { for _, entry := range resp.Entries { if _, ok := ids[entry.ID]; !ok { err := handler.OSV(entry) if err != nil { return err } ids[entry.ID] = true } } } return nil } func queryProgressMessage(module, version string) *govulncheck.Progress { return &govulncheck.Progress{ Message: fmt.Sprintf("Looking up vulnerabilities in %s at %s...", module, version), } } var modQueryRegex = regexp.MustCompile(`(.+)@(.+)`) func parseModuleQuery(pattern string) (_ string, _ string, err error) { matches := modQueryRegex.FindStringSubmatch(pattern) // matches should be [module@version, module, version] if len(matches) != 3 { return "", "", fmt.Errorf("invalid query %s: must be of the form module@version", pattern) } mod, ver := matches[1], matches[2] if !isem.Valid(ver) { return "", "", fmt.Errorf("version %s is not valid semver", ver) } return mod, ver, nil } vuln-1.0.4/internal/scan/query_test.go000066400000000000000000000100031456050377100177750ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "context" "strings" "testing" "github.com/google/go-cmp/cmp" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/test" ) func TestRunQuery(t *testing.T) { e := &osv.Entry{ ID: "GO-1999-0001", Affected: []osv.Affected{{ Module: osv.Module{Path: "bad.com"}, Ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}, {Fixed: "1.2.3"}}, }}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "bad.com", }, { Path: "bad.com/bad", }}, }, }, { Module: osv.Module{Path: "unfixable.com"}, Ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}}, // no fix }}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "unfixable.com", }}, }, }}, } e2 := &osv.Entry{ ID: "GO-1999-0002", Affected: []osv.Affected{{ Module: osv.Module{Path: "bad.com"}, Ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}, {Fixed: "1.2.0"}}, }}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "bad.com/pkg", }, }, }, }}, } stdlib := &osv.Entry{ ID: "GO-2000-0003", Affected: []osv.Affected{{ Module: osv.Module{Path: "stdlib"}, Ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}, {Fixed: "1.19.4"}}, }}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "net/http", }}, }, }}, } c, err := client.NewInMemoryClient([]*osv.Entry{e, e2, stdlib}) if err != nil { t.Fatal(err) } ctx := context.Background() for _, tc := range []struct { query []string want []*osv.Entry }{ { query: []string{"stdlib@go1.18"}, want: []*osv.Entry{stdlib}, }, { query: []string{"stdlib@1.18"}, want: []*osv.Entry{stdlib}, }, { query: []string{"stdlib@v1.18.0"}, want: []*osv.Entry{stdlib}, }, { query: []string{"bad.com@1.2.3"}, want: nil, }, { query: []string{"bad.com@v1.1.0"}, want: []*osv.Entry{e, e2}, }, { query: []string{"unfixable.com@2.0.0"}, want: []*osv.Entry{e}, }, { // each entry should only show up once query: []string{"bad.com@1.1.0", "unfixable.com@2.0.0"}, want: []*osv.Entry{e, e2}, }, { query: []string{"stdlib@1.18", "unfixable.com@2.0.0"}, want: []*osv.Entry{stdlib, e}, }, } { t.Run(strings.Join(tc.query, ","), func(t *testing.T) { h := test.NewMockHandler() err := runQuery(ctx, h, &config{patterns: tc.query}, c) if err != nil { t.Fatal(err) } if diff := cmp.Diff(h.OSVMessages, tc.want); diff != "" { t.Errorf("runQuery: unexpected diff:\n%s", diff) } }) } } func TestParseModuleQuery(t *testing.T) { for _, tc := range []struct { pattern, wantMod, wantVer string wantErr string }{ { pattern: "stdlib@go1.18", wantMod: "stdlib", wantVer: "go1.18", }, { pattern: "golang.org/x/tools@v0.0.0-20140414041502-123456789012", wantMod: "golang.org/x/tools", wantVer: "v0.0.0-20140414041502-123456789012", }, { pattern: "golang.org/x/tools", wantErr: "invalid query", }, { pattern: "golang.org/x/tools@1.0.0.2", wantErr: "not valid semver", }, } { t.Run(tc.pattern, func(t *testing.T) { gotMod, gotVer, err := parseModuleQuery(tc.pattern) if tc.wantErr == "" { if err != nil { t.Fatal(err) } if gotMod != tc.wantMod || gotVer != tc.wantVer { t.Errorf("parseModuleQuery = (%s, %s), want (%s, %s)", gotMod, gotVer, tc.wantMod, tc.wantVer) } } else { if err == nil || !strings.Contains(err.Error(), tc.wantErr) { t.Errorf("parseModuleQuery = %v, want err containing %s", err, tc.wantErr) } } }) } } vuln-1.0.4/internal/scan/result_test.go000066400000000000000000000037151456050377100201620ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "strings" "testing" "golang.org/x/vuln/internal/govulncheck" ) func TestFrame(t *testing.T) { for _, test := range []struct { name string frame *govulncheck.Frame short bool wantFunc string wantPos string }{ { name: "position and function", frame: &govulncheck.Frame{ Package: "golang.org/x/vuln/internal/vulncheck", Function: "Foo", Position: &govulncheck.Position{Filename: "some/path/file.go", Line: 12}, }, wantFunc: "golang.org/x/vuln/internal/vulncheck.Foo", wantPos: "some/path/file.go:12", }, { name: "receiver", frame: &govulncheck.Frame{ Package: "golang.org/x/vuln/internal/vulncheck", Receiver: "Bar", Function: "Foo", }, wantFunc: "golang.org/x/vuln/internal/vulncheck.Bar.Foo", }, { name: "function and receiver", frame: &govulncheck.Frame{Receiver: "*ServeMux", Function: "Handle"}, wantFunc: "ServeMux.Handle", }, { name: "package and function", frame: &govulncheck.Frame{Package: "net/http", Function: "Get"}, wantFunc: "net/http.Get", }, { name: "package, function and receiver", frame: &govulncheck.Frame{Package: "net/http", Receiver: "*ServeMux", Function: "Handle"}, wantFunc: "net/http.ServeMux.Handle", }, { name: "short", frame: &govulncheck.Frame{Package: "net/http", Function: "Get"}, short: true, wantFunc: "http.Get", }, } { t.Run(test.name, func(t *testing.T) { buf := &strings.Builder{} addSymbolName(buf, test.frame, test.short) got := buf.String() if got != test.wantFunc { t.Errorf("want %v func name; got %v", test.wantFunc, got) } if got := posToString(test.frame.Position); got != test.wantPos { t.Errorf("want %v call position; got %v", test.wantPos, got) } }) } } vuln-1.0.4/internal/scan/run.go000066400000000000000000000063731456050377100164140ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "context" "fmt" "io" "os/exec" "path" "path/filepath" "runtime/debug" "strings" "time" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/govulncheck" ) // RunGovulncheck performs main govulncheck functionality and exits the // program upon success with an appropriate exit status. Otherwise, // returns an error. func RunGovulncheck(ctx context.Context, env []string, r io.Reader, stdout io.Writer, stderr io.Writer, args []string) error { cfg := &config{env: env} if err := parseFlags(cfg, stderr, args); err != nil { return err } client, err := client.NewClient(cfg.db, nil) if err != nil { return fmt.Errorf("creating client: %w", err) } prepareConfig(ctx, cfg, client) var handler govulncheck.Handler switch { case cfg.json: handler = govulncheck.NewJSONHandler(stdout) default: th := NewTextHandler(stdout) th.Show(cfg.show) handler = th } // Write the introductory message to the user. if err := handler.Config(&cfg.Config); err != nil { return err } switch cfg.mode { case modeSource: dir := filepath.FromSlash(cfg.dir) err = runSource(ctx, handler, cfg, client, dir) case modeBinary: err = runBinary(ctx, handler, cfg, client) case modeExtract: return runExtract(cfg, stdout) case modeQuery: err = runQuery(ctx, handler, cfg, client) case modeConvert: err = govulncheck.HandleJSON(r, handler) } if err != nil { return err } return Flush(handler) } func prepareConfig(ctx context.Context, cfg *config, client *client.Client) { cfg.ProtocolVersion = govulncheck.ProtocolVersion cfg.DB = cfg.db if cfg.mode == modeSource && cfg.GoVersion == "" { const goverPrefix = "GOVERSION=" for _, env := range cfg.env { if val := strings.TrimPrefix(env, goverPrefix); val != env { cfg.GoVersion = val } } if cfg.GoVersion == "" { if out, err := exec.Command("go", "env", "GOVERSION").Output(); err == nil { cfg.GoVersion = strings.TrimSpace(string(out)) } } } if bi, ok := debug.ReadBuildInfo(); ok { scannerVersion(cfg, bi) } if mod, err := client.LastModifiedTime(ctx); err == nil { cfg.DBLastModified = &mod } } // scannerVersion reconstructs the current version of // this binary used from the build info. func scannerVersion(cfg *config, bi *debug.BuildInfo) { if bi.Path != "" { cfg.ScannerName = path.Base(bi.Path) } if bi.Main.Version != "" && bi.Main.Version != "(devel)" { cfg.ScannerVersion = bi.Main.Version return } // TODO(https://go.dev/issue/29228): we need to manually construct the // version string when it is "(devel)" until #29228 is resolved. var revision, at string for _, s := range bi.Settings { if s.Key == "vcs.revision" { revision = s.Value } if s.Key == "vcs.time" { at = s.Value } } buf := strings.Builder{} buf.WriteString("v0.0.0") if revision != "" { buf.WriteString("-") buf.WriteString(revision[:12]) } if at != "" { // commit time is of the form 2023-01-25T19:57:54Z p, err := time.Parse(time.RFC3339, at) if err == nil { buf.WriteString("-") buf.WriteString(p.Format("20060102150405")) } } cfg.ScannerVersion = buf.String() } vuln-1.0.4/internal/scan/run_test.go000066400000000000000000000011471456050377100174450ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "runtime/debug" "testing" ) func TestGovulncheckVersion(t *testing.T) { bi := &debug.BuildInfo{ Settings: []debug.BuildSetting{ {Key: "vcs.revision", Value: "1234567890001234"}, {Key: "vcs.time", Value: "2023-01-25T19:57:54Z"}, }, } want := "v0.0.0-123456789000-20230125195754" got := &config{} scannerVersion(got, bi) if got.ScannerVersion != want { t.Errorf("got %s; want %s", got.ScannerVersion, want) } } vuln-1.0.4/internal/scan/source.go000066400000000000000000000071101456050377100170760ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "context" "fmt" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/derrors" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/vulncheck" ) // runSource reports vulnerabilities that affect the analyzed packages. // // Vulnerabilities can be called (affecting the package, because a vulnerable // symbol is actually exercised) or just imported by the package // (likely having a non-affecting outcome). func runSource(ctx context.Context, handler govulncheck.Handler, cfg *config, client *client.Client, dir string) (err error) { defer derrors.Wrap(&err, "govulncheck") if cfg.ScanLevel.WantPackages() && len(cfg.patterns) == 0 { return nil // don't throw an error here } if !gomodExists(dir) { return errNoGoMod } var pkgs []*packages.Package var mods []*packages.Module graph := vulncheck.NewPackageGraph(cfg.GoVersion) pkgConfig := &packages.Config{ Dir: dir, Tests: cfg.test, Env: cfg.env, } pkgs, mods, err = graph.LoadPackagesAndMods(pkgConfig, cfg.tags, cfg.patterns) if err != nil { if isGoVersionMismatchError(err) { return fmt.Errorf("%v\n\n%v", errGoVersionMismatch, err) } return fmt.Errorf("loading packages: %w", err) } if err := handler.Progress(sourceProgressMessage(pkgs, len(mods)-1, cfg.ScanLevel)); err != nil { return err } if cfg.ScanLevel.WantPackages() && len(pkgs) == 0 { return nil // early exit } return vulncheck.Source(ctx, handler, pkgs, mods, &cfg.Config, client, graph) } // sourceProgressMessage returns a string of the form // // "Scanning your code and P packages across M dependent modules for known vulnerabilities..." // // P is the number of strictly dependent packages of // topPkgs and Y is the number of their modules. If P // is 0, then the following message is returned // // "No packages matching the provided pattern." func sourceProgressMessage(topPkgs []*packages.Package, mods int, mode govulncheck.ScanLevel) *govulncheck.Progress { var pkgsPhrase, modsPhrase string if mode.WantPackages() { if len(topPkgs) == 0 { // The package pattern is valid, but no packages are matching. // Example is pkg/strace/... (see #59623). return &govulncheck.Progress{Message: "No packages matching the provided pattern."} } pkgs := depPkgs(topPkgs) pkgsPhrase = fmt.Sprintf(" and %d package%s", pkgs, choose(pkgs != 1, "s", "")) } modsPhrase = fmt.Sprintf(" %d dependent module%s", mods, choose(mods != 1, "s", "")) msg := fmt.Sprintf("Scanning your code%s across%s for known vulnerabilities...", pkgsPhrase, modsPhrase) return &govulncheck.Progress{Message: msg} } // depPkgs returns the number of packages that topPkgs depend on func depPkgs(topPkgs []*packages.Package) int { tops := make(map[string]bool) depPkgs := make(map[string]bool) for _, t := range topPkgs { tops[t.PkgPath] = true } var visit func(*packages.Package, bool) visit = func(p *packages.Package, top bool) { path := p.PkgPath if depPkgs[path] { return } if tops[path] && !top { // A top package that is a dependency // will not be in depPkgs, so we skip // reiterating on it here. return } // We don't count a top-level package as // a dependency even when they are used // as a dependent package. if !tops[path] { depPkgs[path] = true } for _, d := range p.Imports { visit(d, false) } } for _, t := range topPkgs { visit(t, true) } return len(depPkgs) } vuln-1.0.4/internal/scan/source_test.go000066400000000000000000000032741456050377100201440ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "strings" "testing" "golang.org/x/vuln/internal/govulncheck" ) func TestSummarizeCallStack(t *testing.T) { for _, test := range []struct { in, want string }{ {"ma.a.F", "a.F"}, {"m1.p1.F", "p1.F"}, {"mv.v.V", "v.V"}, { "m1.p1.F mv.v.V", "p1.F calls v.V", }, { "m1.p1.F m1.p2.G mv.v.V1 mv.v.v2", "p2.G calls v.V1, which calls v.v2", }, { "m1.p1.F m1.p2.G mv.v.V$1 mv.v.V1", "p2.G calls v.V, which calls v.V1", }, { "m1.p1.F m1.p2.G$1 mv.v.V1", "p2.G calls v.V1", }, { "m1.p1.F m1.p2.G$1 mv.v.V$1 mv.v.V1", "p2.G calls v.V, which calls v.V1", }, { "m1.p1.F w.x.Y m1.p2.G ma.a.H mb.b.I mc.c.J mv.v.V", "p2.G calls a.H, which eventually calls v.V", }, { "m1.p1.F w.x.Y m1.p2.G ma.a.H mb.b.I mc.c.J mv.v.V$1 mv.v.V1", "p2.G calls a.H, which eventually calls v.V1", }, { "m1.p1.F m1.p1.F$1 ma.a.H mb.b.I mv.v.V1", "p1.F calls a.H, which eventually calls v.V1", }, } { in := stringToFinding(test.in) got := compactTrace(in) if got != test.want { t.Errorf("%s:\ngot %s\nwant %s", test.in, got, test.want) } } } func stringToFinding(s string) *govulncheck.Finding { f := &govulncheck.Finding{} entries := strings.Fields(s) for i := len(entries) - 1; i >= 0; i-- { e := entries[i] firstDot := strings.Index(e, ".") lastDot := strings.LastIndex(e, ".") f.Trace = append(f.Trace, &govulncheck.Frame{ Module: e[:firstDot], Package: e[:firstDot] + "/" + e[firstDot+1:lastDot], Function: e[lastDot+1:], }) } return f } vuln-1.0.4/internal/scan/stdlib.go000066400000000000000000000041511456050377100170610ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "fmt" "strings" "golang.org/x/mod/semver" ) // Support functions for standard library packages. // These are copied from the internal/stdlib package in the pkgsite repo. // semverToGoTag returns the Go standard library repository tag corresponding // to semver, a version string without the initial "v". // Go tags differ from standard semantic versions in a few ways, // such as beginning with "go" instead of "v". func semverToGoTag(v string) string { if strings.HasPrefix(v, "v0.0.0") { return "master" } // Special case: v1.0.0 => go1. if v == "v1.0.0" { return "go1" } if !semver.IsValid(v) { return fmt.Sprintf("", v) } goVersion := semver.Canonical(v) prerelease := semver.Prerelease(goVersion) versionWithoutPrerelease := strings.TrimSuffix(goVersion, prerelease) patch := strings.TrimPrefix(versionWithoutPrerelease, semver.MajorMinor(goVersion)+".") if patch == "0" { versionWithoutPrerelease = strings.TrimSuffix(versionWithoutPrerelease, ".0") } goVersion = fmt.Sprintf("go%s", strings.TrimPrefix(versionWithoutPrerelease, "v")) if prerelease != "" { // Go prereleases look like "beta1" instead of "beta.1". // "beta1" is bad for sorting (since beta10 comes before beta9), so // require the dot form. i := finalDigitsIndex(prerelease) if i >= 1 { if prerelease[i-1] != '.' { return fmt.Sprintf("", v) } // Remove the dot. prerelease = prerelease[:i-1] + prerelease[i:] } goVersion += strings.TrimPrefix(prerelease, "-") } return goVersion } // finalDigitsIndex returns the index of the first digit in the sequence of digits ending s. // If s doesn't end in digits, it returns -1. func finalDigitsIndex(s string) int { // Assume ASCII (since the semver package does anyway). var i int for i = len(s) - 1; i >= 0; i-- { if s[i] < '0' || s[i] > '9' { break } } if i == len(s)-1 { return -1 } return i + 1 } vuln-1.0.4/internal/scan/template.go000066400000000000000000000152401456050377100174140ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "go/token" "io" "path" "sort" "strconv" "strings" "unicode" "unicode/utf8" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/osv" ) type findingSummary struct { *govulncheck.Finding Compact string OSV *osv.Entry } type summaryCounters struct { VulnerabilitiesCalled int ModulesCalled int VulnerabilitiesImported int VulnerabilitiesRequired int StdlibCalled bool } func fixupFindings(osvs []*osv.Entry, findings []*findingSummary) { for _, f := range findings { f.OSV = getOSV(osvs, f.Finding.OSV) } } func groupByVuln(findings []*findingSummary) [][]*findingSummary { return groupBy(findings, func(left, right *findingSummary) int { return -strings.Compare(left.OSV.ID, right.OSV.ID) }) } func groupByModule(findings []*findingSummary) [][]*findingSummary { return groupBy(findings, func(left, right *findingSummary) int { return strings.Compare(left.Trace[0].Module, right.Trace[0].Module) }) } func groupBy(findings []*findingSummary, compare func(left, right *findingSummary) int) [][]*findingSummary { switch len(findings) { case 0: return nil case 1: return [][]*findingSummary{findings} } sort.SliceStable(findings, func(i, j int) bool { return compare(findings[i], findings[j]) < 0 }) result := [][]*findingSummary{} first := 0 for i, next := range findings { if i == first { continue } if compare(findings[first], next) != 0 { result = append(result, findings[first:i]) first = i } } result = append(result, findings[first:]) return result } func isRequired(findings []*findingSummary) bool { for _, f := range findings { if f.Trace[0].Module != "" { return true } } return false } func isImported(findings []*findingSummary) bool { for _, f := range findings { if f.Trace[0].Package != "" { return true } } return false } func isCalled(findings []*findingSummary) bool { for _, f := range findings { if f.Trace[0].Function != "" { return true } } return false } func getOSV(osvs []*osv.Entry, id string) *osv.Entry { for _, entry := range osvs { if entry.ID == id { return entry } } return &osv.Entry{ ID: id, DatabaseSpecific: &osv.DatabaseSpecific{}, } } func newFindingSummary(f *govulncheck.Finding) *findingSummary { return &findingSummary{ Finding: f, Compact: compactTrace(f), } } // platforms returns a string describing the GOOS, GOARCH, // or GOOS/GOARCH pairs that the vuln affects for a particular // module mod. If it affects all of them, it returns the empty // string. // // When mod is an empty string, returns platform information for // all modules of e. func platforms(mod string, e *osv.Entry) []string { if e == nil { return nil } platforms := map[string]bool{} for _, a := range e.Affected { if mod != "" && a.Module.Path != mod { continue } for _, p := range a.EcosystemSpecific.Packages { for _, os := range p.GOOS { // In case there are no specific architectures, // just list the os entries. if len(p.GOARCH) == 0 { platforms[os] = true continue } // Otherwise, list all the os+arch combinations. for _, arch := range p.GOARCH { platforms[os+"/"+arch] = true } } // Cover the case where there are no specific // operating systems listed. if len(p.GOOS) == 0 { for _, arch := range p.GOARCH { platforms[arch] = true } } } } var keys []string for k := range platforms { keys = append(keys, k) } sort.Strings(keys) return keys } func posToString(p *govulncheck.Position) string { if p == nil || p.Line <= 0 { return "" } return token.Position{ Filename: AbsRelShorter(p.Filename), Offset: p.Offset, Line: p.Line, Column: p.Column, }.String() } func symbol(frame *govulncheck.Frame, short bool) string { buf := &strings.Builder{} addSymbolName(buf, frame, short) return buf.String() } // compactTrace returns a short description of the call stack. // It prefers to show you the edge from the top module to other code, along with // the vulnerable symbol. // Where the vulnerable symbol directly called by the users code, it will only // show those two points. // If the vulnerable symbol is in the users code, it will show the entry point // and the vulnerable symbol. func compactTrace(finding *govulncheck.Finding) string { if len(finding.Trace) < 1 { return "" } iTop := len(finding.Trace) - 1 topModule := finding.Trace[iTop].Module // search for the exit point of the top module for i, frame := range finding.Trace { if frame.Module == topModule { iTop = i break } } if iTop == 0 { // all in one module, reset to the end iTop = len(finding.Trace) - 1 } buf := &strings.Builder{} topPos := posToString(finding.Trace[iTop].Position) if topPos != "" { buf.WriteString(topPos) buf.WriteString(": ") } if iTop > 0 { addSymbolName(buf, finding.Trace[iTop], true) buf.WriteString(" calls ") } if iTop > 1 { addSymbolName(buf, finding.Trace[iTop-1], true) buf.WriteString(", which") if iTop > 2 { buf.WriteString(" eventually") } buf.WriteString(" calls ") } addSymbolName(buf, finding.Trace[0], true) return buf.String() } // notIdentifier reports whether ch is an invalid identifier character. func notIdentifier(ch rune) bool { return !('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || '0' <= ch && ch <= '9' || ch == '_' || ch >= utf8.RuneSelf && (unicode.IsLetter(ch) || unicode.IsDigit(ch))) } // importPathToAssumedName is taken from goimports, it works out the natural imported name // for a package. // This is used to get a shorter identifier in the compact stack trace func importPathToAssumedName(importPath string) string { base := path.Base(importPath) if strings.HasPrefix(base, "v") { if _, err := strconv.Atoi(base[1:]); err == nil { dir := path.Dir(importPath) if dir != "." { base = path.Base(dir) } } } base = strings.TrimPrefix(base, "go-") if i := strings.IndexFunc(base, notIdentifier); i >= 0 { base = base[:i] } return base } func addSymbolName(w io.Writer, frame *govulncheck.Frame, short bool) { if frame.Function == "" { return } if frame.Package != "" { pkg := frame.Package if short { pkg = importPathToAssumedName(frame.Package) } io.WriteString(w, pkg) io.WriteString(w, ".") } if frame.Receiver != "" { if frame.Receiver[0] == '*' { io.WriteString(w, frame.Receiver[1:]) } else { io.WriteString(w, frame.Receiver) } io.WriteString(w, ".") } funcname := strings.Split(frame.Function, "$")[0] io.WriteString(w, funcname) } vuln-1.0.4/internal/scan/testdata/000077500000000000000000000000001456050377100170615ustar00rootroot00000000000000vuln-1.0.4/internal/scan/testdata/binary.json000066400000000000000000000030011456050377100212320ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "GO-0000-0001", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": { "imports": [ { "goos": [ "amd" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0001" } } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod", "function": "Vuln" } ] } } { "osv": { "id": "GO-0000-0002", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Stdlib vulnerability", "affected": [ { "package": { "name": "stdlib", "ecosystem": "" }, "ecosystem_specific": {} } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0002" } } } { "finding": { "osv": "GO-0000-0002", "trace": [ { "module": "stdlib", "version": "v0.0.1", "package": "net/http", "function": "Vuln2" } ] } }vuln-1.0.4/internal/scan/testdata/binary.txt000066400000000000000000000013371456050377100211120ustar00rootroot00000000000000=== Symbol Results === Vulnerability #1: GO-0000-0002 Stdlib vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0002 Standard library Found in: net/http@go0.0.1 Fixed in: N/A Example traces found: #1: http.Vuln2 Vulnerability #2: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Example traces found: #1: vmod.Vuln Your code is affected by 2 vulnerabilities from 1 module and the Go standard library. This scan found no other vulnerabilities in packages you import or modules you require. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/mixed-calls.json000066400000000000000000000023521456050377100221600ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "GO-0000-0001", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": { "imports": [ { "goos": [ "amd" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0001" } } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1" } ] } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod", "function": "VulnFoo" }, { "module": "golang.org/main", "version": "v0.0.1", "package": "golang.org/main", "function": "main" } ] } }vuln-1.0.4/internal/scan/testdata/mixed-calls.txt000066400000000000000000000007661456050377100220350ustar00rootroot00000000000000=== Symbol Results === Vulnerability #1: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Example traces found: #1: main.main calls vmod.VulnFoo Your code is affected by 1 vulnerability from 1 module. This scan found no other vulnerabilities in packages you import or modules you require. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/module-vuln.json000066400000000000000000000015321456050377100222240ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "module" } } { "osv": { "id": "GO-0000-0001", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": { "imports": [ { "goos": [ "amd" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0001" } } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1" } ] } }vuln-1.0.4/internal/scan/testdata/module-vuln.txt000066400000000000000000000005571456050377100221000ustar00rootroot00000000000000=== Module Results === Vulnerability #1: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Your code may be affected by 1 vulnerability. Use '-scan symbol' for more fine grained vulnerability detection. vuln-1.0.4/internal/scan/testdata/multi-stack-modlevel.json000066400000000000000000000026711456050377100240240ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "module" } } { "osv": { "id": "GO-0000-0001", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": { "imports": [ { "goos": [ "amd" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0001" } } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1" } ] } } { "osv": { "id": "GO-0000-0002", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": {} } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0002" } } } { "finding": { "osv": "GO-0000-0002", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1" } ] } }vuln-1.0.4/internal/scan/testdata/multi-stack-modlevel.txt000066400000000000000000000011051456050377100236610ustar00rootroot00000000000000=== Module Results === Vulnerability #1: GO-0000-0002 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0002 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Vulnerability #2: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Your code may be affected by 2 vulnerabilities. Use '-scan symbol' for more fine grained vulnerability detection. vuln-1.0.4/internal/scan/testdata/multi-stacks.json000066400000000000000000000042131456050377100223740ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "GO-0000-0001", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": { "imports": [ { "goos": [ "amd" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0001" } } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "vmod", "function": "Vuln" }, { "module": "golang.org/main", "version": "v0.0.1", "package": "main", "function": "main" } ] } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "vmod", "function": "VulnFoo" }, { "module": "golang.org/main", "version": "v0.0.1", "package": "main", "function": "main" } ] } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.0.4", "trace": [ { "module": "golang.org/vmod1", "version": "v0.0.3", "package": "vmod1", "function": "Vuln" }, { "module": "golang.org/other", "version": "v2.0.3", "package": "other", "function": "Foo" } ] } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.0.4", "trace": [ { "module": "golang.org/vmod1", "version": "v0.0.3", "package": "vmod1", "function": "VulnFoo" }, { "module": "golang.org/other", "version": "v2.0.3", "package": "other", "function": "Bar" } ] } }vuln-1.0.4/internal/scan/testdata/multi-stacks.txt000066400000000000000000000013701456050377100222430ustar00rootroot00000000000000=== Symbol Results === Vulnerability #1: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Example traces found: #1: main.main calls vmod.Vuln #2: main.main calls vmod.VulnFoo Module: golang.org/vmod1 Found in: golang.org/vmod1@v0.0.3 Fixed in: golang.org/vmod1@v0.0.4 Example traces found: #1: other.Foo calls vmod1.Vuln #2: other.Bar calls vmod1.VulnFoo Your code is affected by 1 vulnerability from the Go standard library. This scan found no other vulnerabilities in packages you import or modules you require. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/package-vuln.json000066400000000000000000000020711456050377100223310ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "package" } } { "osv": { "id": "GO-0000-0001", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": { "imports": [ { "goos": [ "amd" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0001" } } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1" } ] } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod" } ] } } vuln-1.0.4/internal/scan/testdata/package-vuln.txt000066400000000000000000000007241456050377100222020ustar00rootroot00000000000000=== Package Results === Vulnerability #1: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Your code may be affected by 1 vulnerability. This scan also found 0 vulnerabilities in modules you require. Use '-scan symbol' for more fine grained vulnerability detection and '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/platform-all.json000066400000000000000000000010631456050377100223460ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "All", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "", "affected": null, "database_specific": { "url": "https://pkg.go.dev/vuln/All" } } } { "finding": { "osv": "All", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod" } ] } }vuln-1.0.4/internal/scan/testdata/platform-all.txt000066400000000000000000000004531456050377100222160ustar00rootroot00000000000000=== Symbol Results === No vulnerabilities found. Your code is affected by 0 vulnerabilities. This scan also found 1 vulnerability in packages you import and 0 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/platform-one-arch-only.json000066400000000000000000000020551456050377100242530ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "one-arch-only", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "1.2.0" } ] } ], "ecosystem_specific": { "imports": [ { "goos": [ "amd64" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/one-arch-only" } } } { "finding": { "osv": "one-arch-only", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod" } ] } }vuln-1.0.4/internal/scan/testdata/platform-one-arch-only.txt000066400000000000000000000004531456050377100241210ustar00rootroot00000000000000=== Symbol Results === No vulnerabilities found. Your code is affected by 0 vulnerabilities. This scan also found 1 vulnerability in packages you import and 0 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/platform-one-import.json000066400000000000000000000022321456050377100236660ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "one-import", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "1.2.0" } ] } ], "ecosystem_specific": { "imports": [ { "goos": [ "windows", "linux" ], "goarch": [ "amd64", "wasm" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/one-import" } } } { "finding": { "osv": "one-import", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod" } ] } }vuln-1.0.4/internal/scan/testdata/platform-one-import.txt000066400000000000000000000004531456050377100235370ustar00rootroot00000000000000=== Symbol Results === No vulnerabilities found. Your code is affected by 0 vulnerabilities. This scan also found 1 vulnerability in packages you import and 0 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/platform-two-imports.json000066400000000000000000000024141456050377100241030ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "two-imports", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "1.2.0" } ] } ], "ecosystem_specific": { "imports": [ { "goos": [ "windows" ], "goarch": [ "amd64" ] }, { "goos": [ "linux" ], "goarch": [ "amd64" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/two-imports" } } } { "finding": { "osv": "two-imports", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod" } ] } }vuln-1.0.4/internal/scan/testdata/platform-two-imports.txt000066400000000000000000000004531456050377100237520ustar00rootroot00000000000000=== Symbol Results === No vulnerabilities found. Your code is affected by 0 vulnerabilities. This scan also found 1 vulnerability in packages you import and 0 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/platform-two-os-only.json000066400000000000000000000020601456050377100240030ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "two-os-only", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ranges": [ { "type": "SEMVER", "events": [ { "introduced": "1.2.0" } ] } ], "ecosystem_specific": { "imports": [ { "goos": [ "windows, linux" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/two-os-only" } } } { "finding": { "osv": "two-os-only", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "golang.org/vmod" } ] } }vuln-1.0.4/internal/scan/testdata/platform-two-os-only.txt000066400000000000000000000004531456050377100236550ustar00rootroot00000000000000=== Symbol Results === No vulnerabilities found. Your code is affected by 0 vulnerabilities. This scan also found 1 vulnerability in packages you import and 0 vulnerabilities in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/source.json000066400000000000000000000031411456050377100212530ustar00rootroot00000000000000{ "config": { "protocol_version": "v0.1.0", "scanner_name": "govulncheck", "scan_level": "symbol" } } { "osv": { "id": "GO-0000-0001", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Third-party vulnerability", "affected": [ { "package": { "name": "golang.org/vmod", "ecosystem": "" }, "ecosystem_specific": { "imports": [ { "goos": [ "amd" ] } ] } } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0001" } } } { "finding": { "osv": "GO-0000-0001", "fixed_version": "v0.1.3", "trace": [ { "module": "golang.org/vmod", "version": "v0.0.1", "package": "vmod", "function": "Vuln" }, { "module": "golang.org/app", "version": "v0.0.1", "package": "main", "function": "main" } ] } } { "osv": { "id": "GO-0000-0002", "modified": "0001-01-01T00:00:00Z", "published": "0001-01-01T00:00:00Z", "details": "Stdlib vulnerability", "affected": [ { "package": { "name": "stdlib", "ecosystem": "" }, "ecosystem_specific": {} } ], "database_specific": { "url": "https://pkg.go.dev/vuln/GO-0000-0002" } } } { "finding": { "osv": "GO-0000-0002", "trace": [ { "module": "stdlib", "version": "v0.0.1", "package": "net/http" } ] } }vuln-1.0.4/internal/scan/testdata/source.txt000066400000000000000000000011201456050377100211140ustar00rootroot00000000000000=== Symbol Results === Vulnerability #1: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Example traces found: #1: main.main calls vmod.Vuln Your code is affected by 1 vulnerability from the Go standard library. This scan also found 0 vulnerabilities in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/testdata/source_traces.txt000066400000000000000000000011611456050377100224620ustar00rootroot00000000000000=== Symbol Results === Vulnerability #1: GO-0000-0001 Third-party vulnerability More info: https://pkg.go.dev/vuln/GO-0000-0001 Module: golang.org/vmod Found in: golang.org/vmod@v0.0.1 Fixed in: golang.org/vmod@v0.1.3 Platforms: amd Example traces found: #1: for function vmod.Vuln main.main vmod.Vuln Your code is affected by 1 vulnerability from the Go standard library. This scan also found 0 vulnerabilities in packages you import and 1 vulnerability in modules you require, but your code doesn't appear to call these vulnerabilities. Use '-show verbose' for more details. vuln-1.0.4/internal/scan/text.go000066400000000000000000000303351456050377100165670ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "fmt" "io" "strings" "golang.org/x/vuln/internal" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/vulncheck" ) type style int const ( defaultStyle = style(iota) osvCalledStyle osvImportedStyle detailsStyle sectionStyle keyStyle valueStyle ) // NewtextHandler returns a handler that writes govulncheck output as text. func NewTextHandler(w io.Writer) *TextHandler { return &TextHandler{w: w} } type TextHandler struct { w io.Writer osvs []*osv.Entry findings []*findingSummary scanLevel govulncheck.ScanLevel err error showColor bool showTraces bool showVersion bool showAllVulns bool } const ( detailsMessage = `For details, see https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck.` binaryProgressMessage = `Scanning your binary for known vulnerabilities...` noVulnsMessage = `No vulnerabilities found.` noOtherVulnsMessage = `No other vulnerabilities found.` verboseMessage = `'-show verbose' for more details` symbolMessage = `'-scan symbol' for more fine grained vulnerability detection` ) func (h *TextHandler) Show(show []string) { for _, show := range show { switch show { case "traces": h.showTraces = true case "color": h.showColor = true case "version": h.showVersion = true case "verbose": h.showAllVulns = true } } } func Flush(h govulncheck.Handler) error { if th, ok := h.(interface{ Flush() error }); ok { return th.Flush() } return nil } func (h *TextHandler) Flush() error { if len(h.findings) == 0 { h.print(noVulnsMessage + "\n") } else { fixupFindings(h.osvs, h.findings) counters := h.allVulns(h.findings) h.summary(counters) } if h.err != nil { return h.err } // We found vulnerabilities when the findings' level matches the scan level. if (isCalled(h.findings) && h.scanLevel == govulncheck.ScanLevelSymbol) || (isImported(h.findings) && h.scanLevel == govulncheck.ScanLevelPackage) || (isRequired(h.findings) && h.scanLevel == govulncheck.ScanLevelModule) { return errVulnerabilitiesFound } return nil } // Config writes version information only if --version was set. func (h *TextHandler) Config(config *govulncheck.Config) error { if config.ScanLevel != "" { h.scanLevel = config.ScanLevel } if !h.showVersion { return nil } if config.GoVersion != "" { h.style(keyStyle, "Go: ") h.print(config.GoVersion, "\n") } if config.ScannerName != "" { h.style(keyStyle, "Scanner: ") h.print(config.ScannerName) if config.ScannerVersion != "" { h.print(`@`, config.ScannerVersion) } h.print("\n") } if config.DB != "" { h.style(keyStyle, "DB: ") h.print(config.DB, "\n") if config.DBLastModified != nil { h.style(keyStyle, "DB updated: ") h.print(*config.DBLastModified, "\n") } } h.print("\n") return h.err } // Progress writes progress updates during govulncheck execution. func (h *TextHandler) Progress(progress *govulncheck.Progress) error { h.print(progress.Message, "\n\n") return h.err } // OSV gathers osv entries to be written. func (h *TextHandler) OSV(entry *osv.Entry) error { h.osvs = append(h.osvs, entry) return nil } // Finding gathers vulnerability findings to be written. func (h *TextHandler) Finding(finding *govulncheck.Finding) error { if err := validateFindings(finding); err != nil { return err } h.findings = append(h.findings, newFindingSummary(finding)) return nil } func (h *TextHandler) allVulns(findings []*findingSummary) summaryCounters { byVuln := groupByVuln(findings) var called, imported, required [][]*findingSummary mods := map[string]struct{}{} stdlibCalled := false for _, findings := range byVuln { switch { case isStdFindings(findings): if isCalled(findings) { called = append(called, findings) stdlibCalled = true } else { required = append(required, findings) } case isCalled(findings): called = append(called, findings) mods[findings[0].Trace[0].Module] = struct{}{} case isImported(findings): imported = append(imported, findings) default: required = append(required, findings) } } if h.scanLevel.WantSymbols() { h.style(sectionStyle, "=== Symbol Results ===\n\n") if len(called) == 0 { h.print(noVulnsMessage, "\n\n") } for index, findings := range called { h.vulnerability(index, findings) } } if h.scanLevel == govulncheck.ScanLevelPackage || (h.scanLevel.WantPackages() && h.showAllVulns) { h.style(sectionStyle, "=== Package Results ===\n\n") if len(imported) == 0 { h.print(choose(!h.scanLevel.WantSymbols(), noVulnsMessage, noOtherVulnsMessage), "\n\n") } for index, findings := range imported { h.vulnerability(index, findings) } } if h.showAllVulns || h.scanLevel == govulncheck.ScanLevelModule { h.style(sectionStyle, "=== Module Results ===\n\n") if len(required) == 0 { h.print(choose(!h.scanLevel.WantPackages(), noVulnsMessage, noOtherVulnsMessage), "\n\n") } for index, findings := range required { h.vulnerability(index, findings) } } return summaryCounters{ VulnerabilitiesCalled: len(called), VulnerabilitiesImported: len(imported), VulnerabilitiesRequired: len(required), ModulesCalled: len(mods), StdlibCalled: stdlibCalled, } } func (h *TextHandler) vulnerability(index int, findings []*findingSummary) { h.style(keyStyle, "Vulnerability") h.print(" #", index+1, ": ") if isCalled(findings) { h.style(osvCalledStyle, findings[0].OSV.ID) } else { h.style(osvImportedStyle, findings[0].OSV.ID) } h.print("\n") h.style(detailsStyle) description := findings[0].OSV.Summary if description == "" { description = findings[0].OSV.Details } h.wrap(" ", description, 80) h.style(defaultStyle) h.print("\n") h.style(keyStyle, " More info:") h.print(" ", findings[0].OSV.DatabaseSpecific.URL, "\n") byModule := groupByModule(findings) first := true for _, module := range byModule { //TODO: this assumes all traces on a module are found and fixed at the same versions lastFrame := module[0].Trace[0] mod := lastFrame.Module path := lastFrame.Module if path == internal.GoStdModulePath { path = lastFrame.Package } foundVersion := moduleVersionString(lastFrame.Module, lastFrame.Version) fixedVersion := moduleVersionString(lastFrame.Module, module[0].FixedVersion) if !first { h.print("\n") } first = false h.print(" ") if mod == internal.GoStdModulePath { h.print("Standard library") } else { h.style(keyStyle, "Module: ") h.print(mod) } h.print("\n ") h.style(keyStyle, "Found in: ") h.print(path, "@", foundVersion, "\n ") h.style(keyStyle, "Fixed in: ") if fixedVersion != "" { h.print(path, "@", fixedVersion) } else { h.print("N/A") } h.print("\n") platforms := platforms(mod, module[0].OSV) if len(platforms) > 0 { h.style(keyStyle, " Platforms: ") for ip, p := range platforms { if ip > 0 { h.print(", ") } h.print(p) } h.print("\n") } h.traces(module) } h.print("\n") } func (h *TextHandler) traces(traces []*findingSummary) { first := true count := 1 for _, entry := range traces { if entry.Compact == "" { continue } if first { h.style(keyStyle, " Example traces found:\n") } first = false h.print(" #", count, ": ") count++ if !h.showTraces { h.print(entry.Compact, "\n") } else { h.print("for function ", symbol(entry.Trace[0], false), "\n") for i := len(entry.Trace) - 1; i >= 0; i-- { t := entry.Trace[i] h.print(" ") if t.Position != nil { h.print(posToString(t.Position), ": ") } h.print(symbol(t, false), "\n") } } } } func (h *TextHandler) summary(c summaryCounters) { // print short summary of findings identified at the desired level of scan precision var vulnCount int h.print("Your code ", choose(h.scanLevel.WantSymbols(), "is", "may be"), " affected by ") switch h.scanLevel { case govulncheck.ScanLevelSymbol: vulnCount = c.VulnerabilitiesCalled case govulncheck.ScanLevelPackage: vulnCount = c.VulnerabilitiesImported case govulncheck.ScanLevelModule: vulnCount = c.VulnerabilitiesRequired } h.style(valueStyle, vulnCount) h.print(choose(vulnCount == 1, ` vulnerability`, ` vulnerabilities`)) if h.scanLevel.WantSymbols() { h.print(choose(c.ModulesCalled > 0 || c.StdlibCalled, ` from `, ``)) if c.ModulesCalled > 0 { h.style(valueStyle, c.ModulesCalled) h.print(choose(c.ModulesCalled == 1, ` module`, ` modules`)) } if c.StdlibCalled { if c.ModulesCalled != 0 { h.print(` and `) } h.print(`the Go standard library`) } } h.print(".\n") // print summary for vulnerabilities found at other levels of scan precision if other := h.summaryOtherVulns(c); other != "" { h.wrap("", other, 80) h.print("\n") } // print suggested flags for more/better info depending on scan level and if in verbose mode if sugg := h.summarySuggestion(); sugg != "" { h.wrap("", sugg, 80) h.print("\n") } } func (h *TextHandler) summaryOtherVulns(c summaryCounters) string { var summary strings.Builder if c.VulnerabilitiesRequired+c.VulnerabilitiesImported == 0 { summary.WriteString("This scan found no other vulnerabilities in ") if h.scanLevel.WantSymbols() { summary.WriteString("packages you import or ") } summary.WriteString("modules you require.") } else { summary.WriteString(choose(h.scanLevel.WantPackages(), "This scan also found ", "")) if h.scanLevel.WantSymbols() { summary.WriteString(fmt.Sprint(c.VulnerabilitiesImported)) summary.WriteString(choose(c.VulnerabilitiesImported == 1, ` vulnerability `, ` vulnerabilities `)) summary.WriteString("in packages you import and ") } if h.scanLevel.WantPackages() { summary.WriteString(fmt.Sprint(c.VulnerabilitiesRequired)) summary.WriteString(choose(c.VulnerabilitiesRequired == 1, ` vulnerability `, ` vulnerabilities `)) summary.WriteString("in modules you require") summary.WriteString(choose(h.scanLevel.WantSymbols(), ", but your code doesn't appear to call these vulnerabilities.", ".")) } } return summary.String() } func (h *TextHandler) summarySuggestion() string { var sugg strings.Builder switch h.scanLevel { case govulncheck.ScanLevelSymbol: if !h.showAllVulns { sugg.WriteString("Use " + verboseMessage + ".") } case govulncheck.ScanLevelPackage: sugg.WriteString("Use " + symbolMessage) if !h.showAllVulns { sugg.WriteString(" and " + verboseMessage) } sugg.WriteString(".") case govulncheck.ScanLevelModule: sugg.WriteString("Use " + symbolMessage + ".") } return sugg.String() } func (h *TextHandler) style(style style, values ...any) { if h.showColor { switch style { default: h.print(colorReset) case osvCalledStyle: h.print(colorBold, fgRed) case osvImportedStyle: h.print(colorBold, fgGreen) case detailsStyle: h.print(colorFaint) case sectionStyle: h.print(fgBlue) case keyStyle: h.print(colorFaint, fgYellow) case valueStyle: h.print(colorBold, fgCyan) } } h.print(values...) if h.showColor && len(values) > 0 { h.print(colorReset) } } func (h *TextHandler) print(values ...any) int { total, w := 0, 0 for _, v := range values { if h.err != nil { return total } // do we need to specialize for some types, like time? w, h.err = fmt.Fprint(h.w, v) total += w } return total } // wrap wraps s to fit in maxWidth by breaking it into lines at whitespace. If a // single word is longer than maxWidth, it is retained as its own line. func (h *TextHandler) wrap(indent string, s string, maxWidth int) { w := 0 for _, f := range strings.Fields(s) { if w > 0 && w+len(f)+1 > maxWidth { // line would be too long with this word h.print("\n") w = 0 } if w == 0 { // first field on line, indent w = h.print(indent) } else { // not first word, space separate w += h.print(" ") } // now write the word w += h.print(f) } } func choose[t any](b bool, yes, no t) t { if b { return yes } return no } func isStdFindings(findings []*findingSummary) bool { for _, f := range findings { if vulncheck.IsStdPackage(f.Trace[0].Package) || f.Trace[0].Module == internal.GoStdModulePath { return true } } return false } vuln-1.0.4/internal/scan/util.go000066400000000000000000000033751456050377100165640ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package scan import ( "fmt" "os" "os/exec" "golang.org/x/vuln/internal" "golang.org/x/vuln/internal/govulncheck" ) // validateFindings checks that the supplied findings all obey the protocol // rules. func validateFindings(findings ...*govulncheck.Finding) error { for _, f := range findings { if f.OSV == "" { return fmt.Errorf("invalid finding: all findings must have an associated OSV") } if len(f.Trace) < 1 { return fmt.Errorf("invalid finding: all callstacks must have at least one frame") } for _, frame := range f.Trace { if frame.Version != "" && frame.Module == "" { return fmt.Errorf("invalid finding: if Frame.Version is set, Frame.Module must also be") } if frame.Package != "" && frame.Module == "" { return fmt.Errorf("invalid finding: if Frame.Package is set, Frame.Module must also be") } if frame.Function != "" && frame.Package == "" { return fmt.Errorf("invalid finding: if Frame.Function is set, Frame.Package must also be") } } } return nil } func moduleVersionString(modulePath, version string) string { if version == "" { return "" } if modulePath == internal.GoStdModulePath || modulePath == internal.GoCmdModulePath { version = semverToGoTag(version) } return version } func gomodExists(dir string) bool { cmd := exec.Command("go", "env", "GOMOD") cmd.Dir = dir out, err := cmd.Output() output := string(out) // If module-aware mode is enabled, but there is no go.mod, GOMOD will be os.DevNull // If module-aware mode is disabled, GOMOD will be the empty string. return err == nil && !(output == os.DevNull || output == "") } vuln-1.0.4/internal/semver/000077500000000000000000000000001456050377100156255ustar00rootroot00000000000000vuln-1.0.4/internal/semver/affects.go000066400000000000000000000043141456050377100175710ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package semver import ( "sort" "golang.org/x/vuln/internal/osv" ) func Affects(a []osv.Range, v string) bool { if len(a) == 0 { // No ranges implies all versions are affected return true } var semverRangePresent bool for _, r := range a { if r.Type != osv.RangeTypeSemver { continue } semverRangePresent = true if ContainsSemver(r, v) { return true } } // If there were no semver ranges present we // assume that all semvers are affected, similarly // to how to we assume all semvers are affected // if there are no ranges at all. return !semverRangePresent } // ContainsSemver checks if semver version v is in the // range encoded by ar. If ar is not a semver range, // returns false. A range is interpreted as a left-closed // and right-open interval. // // Assumes that // - exactly one of Introduced or Fixed fields is set // - ranges in ar are not overlapping // - beginning of time is encoded with .Introduced="0" // - no-fix is not an event, as opposed to being an // event where Introduced="" and Fixed="" func ContainsSemver(ar osv.Range, v string) bool { if ar.Type != osv.RangeTypeSemver { return false } if len(ar.Events) == 0 { return true } // Strip and then add the semver prefix so we can support bare versions, // versions prefixed with 'v', and versions prefixed with 'go'. v = canonicalizeSemverPrefix(v) // Sort events by semver versions. Event for beginning // of time, if present, always comes first. sort.SliceStable(ar.Events, func(i, j int) bool { e1 := ar.Events[i] v1 := e1.Introduced if v1 == "0" { // -inf case. return true } if e1.Fixed != "" { v1 = e1.Fixed } e2 := ar.Events[j] v2 := e2.Introduced if v2 == "0" { // -inf case. return false } if e2.Fixed != "" { v2 = e2.Fixed } return Less(v1, v2) }) var affected bool for _, e := range ar.Events { if !affected && e.Introduced != "" { affected = e.Introduced == "0" || !Less(v, e.Introduced) } else if affected && e.Fixed != "" { affected = Less(v, e.Fixed) } } return affected } vuln-1.0.4/internal/semver/affects_test.go000066400000000000000000000077561456050377100206450ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package semver import ( "testing" "golang.org/x/vuln/internal/osv" ) func TestAffectsSemver(t *testing.T) { cases := []struct { affects []osv.Range version string want bool }{ { // empty []Range indicates everything is affected affects: []osv.Range{}, version: "v0.0.0", want: true, }, { // []Range containing an empty SEMVER range also indicates // everything is affected affects: []osv.Range{{Type: osv.RangeTypeSemver}}, version: "v0.0.0", want: true, }, { // []Range containing a SEMVER range with only an "introduced":"0" // also indicates everything is affected affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}}}}, version: "v0.0.0", want: true, }, { // v1.0.0 < v2.0.0 affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}, {Fixed: "2.0.0"}}}}, version: "v1.0.0", want: true, }, { // v0.0.1 <= v1.0.0 affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0.0.1"}}}}, version: "v1.0.0", want: true, }, { // v1.0.0 <= v1.0.0 affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}}}}, version: "v1.0.0", want: true, }, { // v1.0.0 <= v1.0.0 < v2.0.0 affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "2.0.0"}}}}, version: "v1.0.0", want: true, }, { // v0.0.1 <= v1.0.0 < v2.0.0 affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0.0.1"}, {Fixed: "2.0.0"}}}}, version: "v1.0.0", want: true, }, { // v2.0.0 < v3.0.0 affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "2.0.0"}}}}, version: "v3.0.0", want: false, }, { // Multiple ranges affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "2.0.0"}, {Introduced: "3.0.0"}}}}, version: "v3.0.0", want: true, }, { affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}, {Fixed: "1.18.6"}, {Introduced: "1.19.0"}, {Fixed: "1.19.1"}}}}, version: "v1.18.6", want: false, }, { affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}, {Introduced: "1.19.0"}, {Fixed: "1.19.1"}}}}, version: "v1.18.6", want: true, }, { // Multiple non-sorted ranges. affects: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.19.0"}, {Fixed: "1.19.1"}, {Introduced: "0"}, {Fixed: "1.18.6"}}}}, version: "v1.18.1", want: true, }, { // Wrong type range affects: []osv.Range{{Type: osv.RangeType("unspecified"), Events: []osv.RangeEvent{{Introduced: "3.0.0"}}}}, version: "v3.0.0", want: true, }, { // Semver ranges don't match affects: []osv.Range{ {Type: osv.RangeType("unspecified"), Events: []osv.RangeEvent{{Introduced: "3.0.0"}}}, {Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "4.0.0"}}}, }, version: "v3.0.0", want: false, }, { // Semver ranges do match affects: []osv.Range{ {Type: osv.RangeType("unspecified"), Events: []osv.RangeEvent{{Introduced: "3.0.0"}}}, {Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "3.0.0"}}}, }, version: "v3.0.0", want: true, }, { // Semver ranges match (go prefix) affects: []osv.Range{ {Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "3.0.0"}}}, }, version: "go3.0.1", want: true, }, } for _, c := range cases { got := Affects(c.affects, c.version) if c.want != got { t.Errorf("%#v.AffectsSemver(%s): want %t, got %t", c.affects, c.version, c.want, got) } } } vuln-1.0.4/internal/semver/fixed.go000066400000000000000000000020001456050377100172430ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package semver import "golang.org/x/vuln/internal/osv" // NonSupersededFix returns a fixed version from ranges // that is not superseded by any other fix or any other // introduction of a vulnerability. Returns "" in case // there is no such fixed version. func NonSupersededFix(ranges []osv.Range) string { var latestFixed string for _, r := range ranges { if r.Type == "SEMVER" { for _, e := range r.Events { fixed := e.Fixed if fixed != "" && Less(latestFixed, fixed) { latestFixed = fixed } } // If the vulnerability was re-introduced after the latest fix // we found, there is no latest fix for this range. for _, e := range r.Events { introduced := e.Introduced if introduced != "" && introduced != "0" && Less(latestFixed, introduced) { latestFixed = "" break } } } } return latestFixed } vuln-1.0.4/internal/semver/fixed_test.go000066400000000000000000000045401456050377100203150ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package semver import ( "testing" "golang.org/x/vuln/internal/osv" ) func TestNonSupersededFix(t *testing.T) { tests := []struct { name string ranges []osv.Range want string }{ { name: "empty", ranges: []osv.Range{}, want: "", }, { name: "no fix", ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ { Introduced: "0", }, }, }}, want: "", }, { name: "no latest fix", ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Introduced: "0"}, {Fixed: "1.0.4"}, {Introduced: "1.1.2"}, }, }}, want: "", }, { name: "unsorted no latest fix", ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Fixed: "1.0.4"}, {Introduced: "0"}, {Introduced: "1.1.2"}, {Introduced: "1.5.0"}, {Fixed: "1.1.4"}, }, }}, want: "", }, { name: "unsorted with fix", ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ { Fixed: "1.0.0", }, { Introduced: "0", }, { Fixed: "0.1.0", }, { Introduced: "0.5.0", }, }, }}, want: "1.0.0", }, { name: "multiple ranges", ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ { Introduced: "0", }, { Fixed: "0.1.0", }, }, }, { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ { Introduced: "0", }, { Fixed: "0.2.0", }, }, }}, want: "0.2.0", }, { name: "pseudoversion", ranges: []osv.Range{{ Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ { Introduced: "0", }, { Fixed: "0.0.0-20220824120805-abc", }, { Introduced: "0.0.0-20230824120805-efg", }, { Fixed: "0.0.0-20240824120805-hij", }, }, }}, want: "0.0.0-20240824120805-hij", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { got := NonSupersededFix(test.ranges) if got != test.want { t.Errorf("want %q; got %q", test.want, got) } }) } } vuln-1.0.4/internal/semver/semver.go000066400000000000000000000047511456050377100174640ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package semver provides shared utilities for manipulating // Go semantic versions. package semver import ( "regexp" "strings" "golang.org/x/mod/semver" ) // addSemverPrefix adds a 'v' prefix to s if it isn't already prefixed // with 'v' or 'go'. This allows us to easily test go-style SEMVER // strings against normal SEMVER strings. func addSemverPrefix(s string) string { if !strings.HasPrefix(s, "v") && !strings.HasPrefix(s, "go") { return "v" + s } return s } // removeSemverPrefix removes the 'v' or 'go' prefixes from go-style // SEMVER strings, for usage in the public vulnerability format. func removeSemverPrefix(s string) string { s = strings.TrimPrefix(s, "v") s = strings.TrimPrefix(s, "go") return s } // canonicalizeSemverPrefix turns a SEMVER string into the canonical // representation using the 'v' prefix, as used by the OSV format. // Input may be a bare SEMVER ("1.2.3"), Go prefixed SEMVER ("go1.2.3"), // or already canonical SEMVER ("v1.2.3"). func canonicalizeSemverPrefix(s string) string { return addSemverPrefix(removeSemverPrefix(s)) } // Less returns whether v1 < v2, where v1 and v2 are // semver versions with either a "v", "go" or no prefix. func Less(v1, v2 string) bool { return semver.Compare(canonicalizeSemverPrefix(v1), canonicalizeSemverPrefix(v2)) < 0 } // Valid returns whether v is valid semver, allowing // either a "v", "go" or no prefix. func Valid(v string) bool { return semver.IsValid(canonicalizeSemverPrefix(v)) } var ( // Regexp for matching go tags. The groups are: // 1 the major.minor version // 2 the patch version, or empty if none // 3 the entire prerelease, if present // 4 the prerelease type ("beta" or "rc") // 5 the prerelease number tagRegexp = regexp.MustCompile(`^go(\d+\.\d+)(\.\d+|)((beta|rc|-pre)(\d+))?$`) ) // This is a modified copy of pkgsite/internal/stdlib:VersionForTag. func GoTagToSemver(tag string) string { if tag == "" { return "" } tag = strings.Fields(tag)[0] // Special cases for go1. if tag == "go1" { return "v1.0.0" } if tag == "go1.0" { return "" } m := tagRegexp.FindStringSubmatch(tag) if m == nil { return "" } version := "v" + m[1] if m[2] != "" { version += m[2] } else { version += ".0" } if m[3] != "" { if !strings.HasPrefix(m[4], "-") { version += "-" } version += m[4] + "." + m[5] } return version } vuln-1.0.4/internal/semver/semver_test.go000066400000000000000000000014171456050377100205170ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package semver import ( "testing" ) func TestCanonicalize(t *testing.T) { for _, test := range []struct { v string want string }{ {"v1.2.3", "v1.2.3"}, {"1.2.3", "v1.2.3"}, {"go1.2.3", "v1.2.3"}, } { got := canonicalizeSemverPrefix(test.v) if got != test.want { t.Errorf("want %s; got %s", test.want, got) } } } func TestGoTagToSemver(t *testing.T) { for _, test := range []struct { v string want string }{ {"go1.19", "v1.19.0"}, {"go1.20-pre4", "v1.20.0-pre.4"}, } { got := GoTagToSemver(test.v) if got != test.want { t.Errorf("want %s; got %s", test.want, got) } } } vuln-1.0.4/internal/test/000077500000000000000000000000001456050377100153035ustar00rootroot00000000000000vuln-1.0.4/internal/test/buildtest.go000066400000000000000000000052731456050377100176400ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package test import ( "errors" "fmt" "os" "os/exec" "path/filepath" "runtime" "strings" "testing" "golang.org/x/vuln/internal/testenv" ) var unsupportedGoosGoarch = map[string]bool{ "darwin/386": true, "darwin/arm": true, } // GoBuild runs "go build" on dir using the additional environment variables in // envVarVals, which should be an alternating list of variables and values. // It returns the path to the resulting binary, and a function // to call when finished with the binary. func GoBuild(t *testing.T, dir, tags string, strip bool, envVarVals ...string) (binaryPath string, cleanup func()) { testenv.NeedsGoBuild(t) if len(envVarVals)%2 != 0 { t.Fatal("last args should be alternating variables and values") } var env []string if len(envVarVals) > 0 { env = os.Environ() for i := 0; i < len(envVarVals); i += 2 { env = append(env, fmt.Sprintf("%s=%s", envVarVals[i], envVarVals[i+1])) } } gg := lookupEnv("GOOS", env, runtime.GOOS) + "/" + lookupEnv("GOARCH", env, runtime.GOARCH) if unsupportedGoosGoarch[gg] { t.Skipf("skipping unsupported GOOS/GOARCH pair %s", gg) } tmpDir, err := os.MkdirTemp("", "buildtest") if err != nil { t.Fatal(err) } abs, err := filepath.Abs(dir) if err != nil { t.Fatal(err) } binaryPath = filepath.Join(tmpDir, filepath.Base(abs)) var exeSuffix string if runtime.GOOS == "windows" { exeSuffix = ".exe" } // Make sure we use the same version of go that is running this test. goCommandPath := filepath.Join(runtime.GOROOT(), "bin", "go"+exeSuffix) if _, err := os.Stat(goCommandPath); err != nil { t.Fatal(err) } args := []string{"build", "-o", binaryPath + exeSuffix} if tags != "" { args = append(args, "-tags", tags) } if strip { args = append(args, "-ldflags", "-s -w") } cmd := exec.Command(goCommandPath, args...) cmd.Dir = dir cmd.Env = env cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { if ee := (*exec.ExitError)(nil); errors.As(err, &ee) && len(ee.Stderr) > 0 { t.Fatalf("%v: %v\n%s", cmd, err, ee.Stderr) } t.Fatalf("%v: %v", cmd, err) } return binaryPath + exeSuffix, func() { os.RemoveAll(tmpDir) } } // lookEnv looks for name in env, a list of "VAR=VALUE" strings. It returns // the value if name is found, and defaultValue if it is not. func lookupEnv(name string, env []string, defaultValue string) string { for _, vv := range env { i := strings.IndexByte(vv, '=') if i < 0 { // malformed env entry; just ignore it continue } if name == vv[:i] { return vv[i+1:] } } return defaultValue } vuln-1.0.4/internal/test/handler.go000066400000000000000000000050471456050377100172550ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package test import ( "sort" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/osv" ) // MockHandler implements govulncheck.Handler but (currently) // does nothing. // // For use in tests. type MockHandler struct { ConfigMessages []*govulncheck.Config ProgressMessages []*govulncheck.Progress OSVMessages []*osv.Entry FindingMessages []*govulncheck.Finding } func NewMockHandler() *MockHandler { return &MockHandler{} } func (h *MockHandler) Config(config *govulncheck.Config) error { h.ConfigMessages = append(h.ConfigMessages, config) return nil } func (h *MockHandler) Progress(progress *govulncheck.Progress) error { h.ProgressMessages = append(h.ProgressMessages, progress) return nil } func (h *MockHandler) OSV(entry *osv.Entry) error { h.OSVMessages = append(h.OSVMessages, entry) return nil } func (h *MockHandler) Finding(finding *govulncheck.Finding) error { h.FindingMessages = append(h.FindingMessages, finding) return nil } func (h *MockHandler) Sort() { sort.Slice(h.FindingMessages, func(i, j int) bool { if h.FindingMessages[i].OSV > h.FindingMessages[j].OSV { return true } if h.FindingMessages[i].OSV < h.FindingMessages[j].OSV { return false } iframe := h.FindingMessages[i].Trace[0] jframe := h.FindingMessages[j].Trace[0] if iframe.Module < jframe.Module { return true } if iframe.Module > jframe.Module { return false } if iframe.Package < jframe.Package { return true } if iframe.Package > jframe.Package { return false } return iframe.Function < jframe.Function }) } func (h *MockHandler) Write(to govulncheck.Handler) error { h.Sort() for _, config := range h.ConfigMessages { if err := to.Config(config); err != nil { return err } } for _, progress := range h.ProgressMessages { if err := to.Progress(progress); err != nil { return err } } seen := map[string]bool{} for _, finding := range h.FindingMessages { if !seen[finding.OSV] { seen[finding.OSV] = true // first time seeing this osv, so find and write the osv message for _, osv := range h.OSVMessages { if osv.ID == finding.OSV { if err := to.OSV(osv); err != nil { return err } } } } if err := to.Finding(finding); err != nil { return err } } for _, osv := range h.OSVMessages { if !seen[osv.ID] { if err := to.OSV(osv); err != nil { return err } } } return nil } vuln-1.0.4/internal/test/packages.go000066400000000000000000000016421456050377100174130ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package test import ( "os/exec" "strings" "testing" "golang.org/x/tools/go/packages" ) func VerifyImports(t *testing.T, allowed ...string) { if _, err := exec.LookPath("go"); err != nil { t.Skipf("skipping: %v", err) } cfg := &packages.Config{Mode: packages.NeedImports | packages.NeedDeps} pkgs, err := packages.Load(cfg, ".") if err != nil { t.Fatal(err) } check := map[string]struct{}{} for _, imp := range allowed { check[imp] = struct{}{} } for _, p := range pkgs { for _, imp := range p.Imports { // this is an approximate stdlib check that is good enough for these tests if !strings.ContainsRune(imp.ID, '.') { continue } if _, ok := check[imp.ID]; !ok { t.Errorf("include of %s is not allowed", imp.ID) } } } } vuln-1.0.4/internal/test/testenv.go000066400000000000000000000007121456050377100173220ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package test import ( "os/exec" "testing" ) // NeedsGoEnv skips t if the current system can't get the environment with // “go env” in a subprocess. func NeedsGoEnv(t testing.TB) { t.Helper() if _, err := exec.LookPath("go"); err != nil { t.Skip("skipping test: can't run go env") } } vuln-1.0.4/internal/testenv/000077500000000000000000000000001456050377100160145ustar00rootroot00000000000000vuln-1.0.4/internal/testenv/testenv.go000066400000000000000000000063671456050377100200470ustar00rootroot00000000000000// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package testenv import ( "errors" "flag" "fmt" "os" "os/exec" "path/filepath" "runtime" "sync" "testing" ) var origEnv = os.Environ() // NeedsExec checks that the current system can start new processes // using os.StartProcess or (more commonly) exec.Command. // If not, NeedsExec calls t.Skip with an explanation. // // On some platforms NeedsExec checks for exec support by re-executing the // current executable, which must be a binary built by 'go test'. // We intentionally do not provide a HasExec function because of the risk of // inappropriate recursion in TestMain functions. func NeedsExec(t testing.TB) { tryExecOnce.Do(func() { tryExecErr = tryExec() }) if tryExecErr != nil { t.Helper() t.Skipf("skipping test: cannot exec subprocess on %s/%s: %v", runtime.GOOS, runtime.GOARCH, tryExecErr) } } var ( tryExecOnce sync.Once tryExecErr error ) func tryExec() error { switch runtime.GOOS { case "aix", "android", "darwin", "dragonfly", "freebsd", "illumos", "linux", "netbsd", "openbsd", "plan9", "solaris", "windows": // Known OS that isn't ios or wasm; assume that exec works. return nil default: } // ios has an exec syscall but on real iOS devices it might return a // permission error. In an emulated environment (such as a Corellium host) // it might succeed, so if we need to exec we'll just have to try it and // find out. // // As of 2023-04-19 wasip1 and js don't have exec syscalls at all, but we // may as well use the same path so that this branch can be tested without // an ios environment. if flag.Lookup("test.list") == nil { // This isn't a standard 'go test' binary, so we don't know how to // self-exec in a way that should succeed without side effects. // Just forget it. return errors.New("can't probe for exec support with a non-test executable") } // We know that this is a test executable. We should be able to run it with a // no-op flag to check for overall exec support. exe, err := os.Executable() if err != nil { return fmt.Errorf("can't probe for exec support: %w", err) } cmd := exec.Command(exe, "-test.list=^$") cmd.Env = origEnv return cmd.Run() } func NeedsGoBuild(t testing.TB) { goBuildOnce.Do(func() { dir, err := os.MkdirTemp("", "testenv-*") if err != nil { goBuildErr = err return } defer os.RemoveAll(dir) mainGo := filepath.Join(dir, "main.go") if err := os.WriteFile(mainGo, []byte("package main\nfunc main() {}\n"), 0644); err != nil { t.Fatal(err) } cmd := exec.Command("go", "build", "-o", os.DevNull, mainGo) cmd.Dir = dir if err := cmd.Run(); err != nil { goBuildErr = fmt.Errorf("%v: %v", cmd, err) } }) if goBuildErr != nil { t.Helper() t.Skipf("skipping test: 'go build' not supported on %s/%s", runtime.GOOS, runtime.GOARCH) } } var ( goBuildOnce sync.Once goBuildErr error ) // NeedsLocalhostNet skips t if networking does not work for ports opened // with "localhost". func NeedsLocalhostNet(t testing.TB) { switch runtime.GOOS { case "js", "wasip1": t.Skipf(`Listening on "localhost" fails on %s; see https://go.dev/issue/59718`, runtime.GOOS) } } vuln-1.0.4/internal/vulncheck/000077500000000000000000000000001456050377100163065ustar00rootroot00000000000000vuln-1.0.4/internal/vulncheck/binary.go000066400000000000000000000125301456050377100201220ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package vulncheck import ( "context" "fmt" "sort" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal" "golang.org/x/vuln/internal/buildinfo" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/govulncheck" ) // Bin is an abstraction of Go binary containing // minimal information needed by govulncheck. type Bin struct { Modules []*packages.Module `json:"modules,omitempty"` PkgSymbols []buildinfo.Symbol `json:"pkgSymbols,omitempty"` GoVersion string `json:"goVersion,omitempty"` GOOS string `json:"goos,omitempty"` GOARCH string `json:"goarch,omitempty"` } // Binary detects presence of vulnerable symbols in bin and // emits findings to handler. func Binary(ctx context.Context, handler govulncheck.Handler, bin *Bin, cfg *govulncheck.Config, client *client.Client) error { vr, err := binary(ctx, handler, bin, cfg, client) if err != nil { return err } if cfg.ScanLevel.WantSymbols() { return emitCallFindings(handler, binaryCallstacks(vr)) } return nil } // binary detects presence of vulnerable symbols in bin. // It does not compute call graphs so the corresponding // info in Result will be empty. func binary(ctx context.Context, handler govulncheck.Handler, bin *Bin, cfg *govulncheck.Config, client *client.Client) (*Result, error) { graph := NewPackageGraph(bin.GoVersion) graph.AddModules(bin.Modules...) mods := append(bin.Modules, graph.GetModule(internal.GoStdModulePath)) mv, err := FetchVulnerabilities(ctx, client, mods) if err != nil { return nil, err } // Emit OSV entries immediately in their raw unfiltered form. if err := emitOSVs(handler, mv); err != nil { return nil, err } if bin.GOOS == "" || bin.GOARCH == "" { fmt.Printf("warning: failed to extract build system specification GOOS: %s GOARCH: %s\n", bin.GOOS, bin.GOARCH) } affVulns := affectingVulnerabilities(mv, bin.GOOS, bin.GOARCH) if err := emitModuleFindings(handler, affVulns); err != nil { return nil, err } if !cfg.ScanLevel.WantPackages() || len(affVulns) == 0 { return &Result{}, nil } // Group symbols per package to avoid querying affVulns all over again. var pkgSymbols map[string][]string if len(bin.PkgSymbols) == 0 { // The binary exe is stripped. We currently cannot detect inlined // symbols for stripped binaries (see #57764), so we report // vulnerabilities at the go.mod-level precision. pkgSymbols = allKnownVulnerableSymbols(affVulns) } else { pkgSymbols = make(map[string][]string) for _, sym := range bin.PkgSymbols { pkgSymbols[sym.Pkg] = append(pkgSymbols[sym.Pkg], sym.Name) } } impVulns := binImportedVulnPackages(graph, pkgSymbols, affVulns) // Emit information on imported vulnerable packages now to // mimic behavior of source. if err := emitPackageFindings(handler, impVulns); err != nil { return nil, err } // Return result immediately if not in symbol mode to mimic the // behavior of source. if !cfg.ScanLevel.WantSymbols() || len(impVulns) == 0 { return &Result{Vulns: impVulns}, nil } symVulns := binVulnSymbols(graph, pkgSymbols, affVulns) return &Result{Vulns: symVulns}, nil } func binImportedVulnPackages(graph *PackageGraph, pkgSymbols map[string][]string, affVulns affectingVulns) []*Vuln { var vulns []*Vuln for pkg := range pkgSymbols { for _, osv := range affVulns.ForPackage(pkg) { vuln := &Vuln{ OSV: osv, Package: graph.GetPackage(pkg), } vulns = append(vulns, vuln) } } return vulns } func binVulnSymbols(graph *PackageGraph, pkgSymbols map[string][]string, affVulns affectingVulns) []*Vuln { var vulns []*Vuln for pkg, symbols := range pkgSymbols { // sort symbols for deterministic results sort.SliceStable(symbols, func(i, j int) bool { return symbols[i] < symbols[j] }) for _, symbol := range symbols { for _, osv := range affVulns.ForSymbol(pkg, symbol) { vuln := &Vuln{ OSV: osv, Symbol: symbol, Package: graph.GetPackage(pkg), } vulns = append(vulns, vuln) } } } return vulns } // allKnownVulnerableSymbols returns all known vulnerable symbols for packages in graph. // If all symbols of a package are vulnerable, that is modeled as a wild car symbol "/*". func allKnownVulnerableSymbols(affVulns affectingVulns) map[string][]string { pkgSymbols := make(map[string][]string) for _, mv := range affVulns { for _, osv := range mv.Vulns { for _, affected := range osv.Affected { for _, p := range affected.EcosystemSpecific.Packages { syms := p.Symbols if len(syms) == 0 { // If every symbol of pkg is vulnerable, we would ideally // compute every symbol mentioned in the pkg and then add // Vuln entry for it, just as we do in Source. However, // we don't have code of pkg here and we don't even have // pkg symbols used in stripped binary, so we add a placeholder // symbol. // // Note: this should not affect output of govulncheck since // in binary mode no symbol/call stack information is // communicated back to the user. syms = []string{fmt.Sprintf("%s/*", p.Path)} } pkgSymbols[p.Path] = append(pkgSymbols[p.Path], syms...) } } } } return pkgSymbols } vuln-1.0.4/internal/vulncheck/binary_test.go000066400000000000000000000052171456050377100211650ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.18 // +build go1.18 package vulncheck import ( "context" "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal/buildinfo" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/test" ) func TestBinary(t *testing.T) { bin := &Bin{ Modules: []*packages.Module{ {Path: "golang.org/entry"}, {Path: "golang.org/cmod", Version: "v1.1.3"}, {Path: "golang.org/amod", Version: "v1.1.3"}, {Path: "golang.org/bmod", Version: "v0.5.0"}, }, GoVersion: "go1.20", GOOS: "linux", GOARCH: "amd64", PkgSymbols: []buildinfo.Symbol{ {Pkg: "golang.org/entry", Name: "main"}, {Pkg: "golang.org/cmod/c", Name: "C"}, {Pkg: "golang.org/amod/avuln", Name: "VulnData.Vuln1"}, // assume linker skips VulnData.Vuln2 {Pkg: "golang.org/bmod/bvuln", Name: "NoVuln"}, // assume linker skips NoVuln {Pkg: "archive/zip", Name: "OpenReader"}, }, } c, err := newTestClient() if err != nil { t.Fatal(err) } // Test imports only mode cfg := &govulncheck.Config{ScanLevel: "package"} res, err := binary(context.Background(), test.NewMockHandler(), bin, cfg, c) if err != nil { t.Fatal(err) } // With package scan level, all vulnerable packages should be detected. want := []*Vuln{ {Package: &packages.Package{PkgPath: "golang.org/bmod/bvuln"}}, {Package: &packages.Package{PkgPath: "golang.org/amod/avuln"}}, {Package: &packages.Package{PkgPath: "archive/zip"}}, } less := func(v1, v2 *Vuln) bool { return (v1.Package.PkgPath + "." + v1.Symbol) < (v2.Package.PkgPath + "." + v2.Symbol) } equal := func(v1, v2 *Vuln) bool { if v1.Symbol != v2.Symbol { return false } if v1.Package != nil && v2.Package != nil { return v1.Package.PkgPath == v2.Package.PkgPath } return true // we don't care about these cases here } if diff := cmp.Diff(want, res.Vulns, cmpopts.SortSlices(less), cmp.Comparer(equal)); diff != "" { t.Errorf("(-want, +got): %s", diff) } // Test the symbols. cfg.ScanLevel = "symbol" res, err = binary(context.Background(), test.NewMockHandler(), bin, cfg, c) if err != nil { t.Fatal(err) } want = []*Vuln{ {Symbol: "OpenReader", Package: &packages.Package{PkgPath: "archive/zip"}}, {Symbol: "VulnData.Vuln1", Package: &packages.Package{PkgPath: "golang.org/amod/avuln"}}, } if diff := cmp.Diff(want, res.Vulns, cmpopts.SortSlices(less), cmp.Comparer(equal)); diff != "" { t.Errorf("(-want, +got): %s", diff) } } vuln-1.0.4/internal/vulncheck/doc.go000066400000000000000000000041361456050377100174060ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /* Package vulncheck detects uses of known vulnerabilities in Go programs. Vulncheck identifies vulnerability uses in Go programs at the level of call graph, package import graph, and module requires graph. For instance, vulncheck identifies which vulnerable functions and methods are transitively called from the program entry points. vulncheck also detects transitively imported packages and required modules that contain known vulnerable functions and methods. We recommend using the command line tool [govulncheck] to detect vulnerabilities in your code. # Usage The two main APIs of vulncheck, [Source] and [Binary], allow vulnerability detection in Go source code and binaries, respectively. [Source] accepts a list of [Package] objects, which are a trimmed version of [golang.org/x/tools/go/packages.Package] objects to reduce memory consumption. [Binary] accepts a path to a Go binary file that must have been compiled with Go 1.18 or greater. Both [Source] and [Binary] require information about known vulnerabilities in the form of a vulnerability database, specifically a [golang.org/x/vuln/internal/client.Client]. The vulnerabilities are modeled using the [golang.org/x/vuln/internal/osv] format. # Results The results of vulncheck are slices of the call graph, package imports graph, and module requires graph leading to the use of an identified vulnerability. The parts of these graphs not related to any vulnerabilities are omitted. The [CallStacks] and [ImportChains] functions search the returned slices for user-friendly representative call stacks and import chains. These call stacks and import chains are provided as examples of vulnerability uses in the client code. # Limitations There are some limitations with vulncheck. Please see the [documented limitations] for more information. [govulncheck]: https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck [documented limitations]: https://go.dev/security/vulncheck#limitations. */ package vulncheck vuln-1.0.4/internal/vulncheck/emit.go000066400000000000000000000103171456050377100175750ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "go/token" "sort" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/osv" ) // emitOSVs emits all OSV vuln entries in modVulns to handler. func emitOSVs(handler govulncheck.Handler, modVulns []*ModVulns) error { for _, mv := range modVulns { for _, v := range mv.Vulns { if err := handler.OSV(v); err != nil { return err } } } return nil } // emitModuleFindings emits module-level findings for vulnerabilities in modVulns. func emitModuleFindings(handler govulncheck.Handler, affVulns affectingVulns) error { for _, vuln := range affVulns { for _, osv := range vuln.Vulns { if err := handler.Finding(&govulncheck.Finding{ OSV: osv.ID, FixedVersion: FixedVersion(modPath(vuln.Module), modVersion(vuln.Module), osv.Affected), Trace: []*govulncheck.Frame{frameFromModule(vuln.Module, osv.Affected)}, }); err != nil { return err } } } return nil } // emitPackageFinding emits package-level findings fod vulnerabilities in vulns. func emitPackageFindings(handler govulncheck.Handler, vulns []*Vuln) error { for _, v := range vulns { if err := handler.Finding(&govulncheck.Finding{ OSV: v.OSV.ID, FixedVersion: FixedVersion(modPath(v.Package.Module), modVersion(v.Package.Module), v.OSV.Affected), Trace: []*govulncheck.Frame{frameFromPackage(v.Package)}, }); err != nil { return err } } return nil } // emitCallFindings emits call-level findings for vulnerabilities // that have a call stack in callstacks. func emitCallFindings(handler govulncheck.Handler, callstacks map[*Vuln]CallStack) error { var vulns []*Vuln for v := range callstacks { vulns = append(vulns, v) } sort.SliceStable(vulns, func(i, j int) bool { return vulns[i].Symbol < vulns[j].Symbol }) for _, vuln := range vulns { stack := callstacks[vuln] if stack == nil { continue } fixed := FixedVersion(modPath(vuln.Package.Module), modVersion(vuln.Package.Module), vuln.OSV.Affected) if err := handler.Finding(&govulncheck.Finding{ OSV: vuln.OSV.ID, FixedVersion: fixed, Trace: traceFromEntries(stack), }); err != nil { return err } } return nil } // traceFromEntries creates a sequence of // frames from vcs. Position of a Frame is the // call position of the corresponding stack entry. func traceFromEntries(vcs CallStack) []*govulncheck.Frame { var frames []*govulncheck.Frame for i := len(vcs) - 1; i >= 0; i-- { e := vcs[i] fr := frameFromPackage(e.Function.Package) fr.Function = e.Function.Name fr.Receiver = e.Function.Receiver() isSink := i == (len(vcs) - 1) fr.Position = posFromStackEntry(e, isSink) frames = append(frames, fr) } return frames } func posFromStackEntry(e StackEntry, sink bool) *govulncheck.Position { var p *token.Position if sink && e.Function != nil && e.Function.Pos != nil { // For sinks, i.e., vulns we take the position // of the symbol. p = e.Function.Pos } else if e.Call != nil && e.Call.Pos != nil { // Otherwise, we take the position of // the call statement. p = e.Call.Pos } if p == nil { return nil } return &govulncheck.Position{ Filename: p.Filename, Offset: p.Offset, Line: p.Line, Column: p.Column, } } func frameFromPackage(pkg *packages.Package) *govulncheck.Frame { fr := &govulncheck.Frame{} if pkg != nil { fr.Module = pkg.Module.Path fr.Version = pkg.Module.Version fr.Package = pkg.PkgPath } if pkg.Module.Replace != nil { fr.Module = pkg.Module.Replace.Path fr.Version = pkg.Module.Replace.Version } return fr } func frameFromModule(mod *packages.Module, affected []osv.Affected) *govulncheck.Frame { fr := &govulncheck.Frame{ Module: mod.Path, Version: mod.Version, } if mod.Path == internal.GoStdModulePath { for _, a := range affected { if a.Module.Path != mod.Path { continue } fr.Package = a.EcosystemSpecific.Packages[0].Path } } if mod.Replace != nil { fr.Module = mod.Replace.Path fr.Version = mod.Replace.Version } return fr } vuln-1.0.4/internal/vulncheck/entries.go000066400000000000000000000034151456050377100203110ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "strings" "golang.org/x/tools/go/ssa" ) // entryPoints returns functions of topPackages considered entry // points of govulncheck analysis: main, inits, and exported methods // and functions. // // TODO(https://go.dev/issue/57221): currently, entry functions // that are generics are not considered an entry point. func entryPoints(topPackages []*ssa.Package) []*ssa.Function { var entries []*ssa.Function for _, pkg := range topPackages { if pkg.Pkg.Name() == "main" { // for "main" packages the only valid entry points are the "main" // function and any "init#" functions, even if there are other // exported functions or types. similarly to isEntry it should be // safe to ignore the validity of the main or init# signatures, // since the compiler will reject malformed definitions, // and the init function is synthetic entries = append(entries, memberFuncs(pkg.Members["main"], pkg.Prog)...) for name, member := range pkg.Members { if strings.HasPrefix(name, "init#") || name == "init" { entries = append(entries, memberFuncs(member, pkg.Prog)...) } } continue } for _, member := range pkg.Members { for _, f := range memberFuncs(member, pkg.Prog) { if isEntry(f) { entries = append(entries, f) } } } } return entries } func isEntry(f *ssa.Function) bool { // it should be safe to ignore checking that the signature of the "init" function // is valid, since it is synthetic if f.Name() == "init" && f.Synthetic == "package initializer" { return true } return f.Synthetic == "" && f.Object() != nil && f.Object().Exported() } vuln-1.0.4/internal/vulncheck/fetch.go000066400000000000000000000020031456050377100177210ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "context" "fmt" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal/client" ) // FetchVulnerabilities fetches vulnerabilities that affect the supplied modules. func FetchVulnerabilities(ctx context.Context, c *client.Client, modules []*packages.Module) ([]*ModVulns, error) { mreqs := make([]*client.ModuleRequest, len(modules)) for i, mod := range modules { modPath := mod.Path if mod.Replace != nil { modPath = mod.Replace.Path } mreqs[i] = &client.ModuleRequest{ Path: modPath, } } resps, err := c.ByModules(ctx, mreqs) if err != nil { return nil, fmt.Errorf("fetching vulnerabilities: %v", err) } var mv []*ModVulns for i, resp := range resps { if len(resp.Entries) == 0 { continue } mv = append(mv, &ModVulns{ Module: modules[i], Vulns: resp.Entries, }) } return mv, nil } vuln-1.0.4/internal/vulncheck/fetch_test.go000066400000000000000000000044321456050377100207700ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck_test import ( "context" "testing" "github.com/google/go-cmp/cmp" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/vulncheck" ) func TestFetchVulnerabilities(t *testing.T) { a := &osv.Entry{ID: "a", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/a"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Fixed: "2.0.0"}}}}}}} b := &osv.Entry{ID: "b", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/b"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Fixed: "1.1.1"}}}}}}} c := &osv.Entry{ID: "c", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/d"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Fixed: "2.0.0"}}}}}}} d := &osv.Entry{ID: "e", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/e"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Fixed: "2.2.0"}}}}}}} mc, err := client.NewInMemoryClient([]*osv.Entry{a, b, c, d}) if err != nil { t.Fatal(err) } got, err := vulncheck.FetchVulnerabilities(context.Background(), mc, []*packages.Module{ {Path: "example.mod/a", Version: "v1.0.0"}, {Path: "example.mod/b", Version: "v1.0.4"}, {Path: "example.mod/c", Replace: &packages.Module{Path: "example.mod/d", Version: "v1.0.0"}, Version: "v2.0.0"}, {Path: "example.mod/e", Replace: &packages.Module{Path: "../local/example.mod/d", Version: "v1.0.1"}, Version: "v2.1.0"}, }) if err != nil { t.Fatalf("FetchVulnerabilities failed: %s", err) } want := []*vulncheck.ModVulns{ { Module: &packages.Module{Path: "example.mod/a", Version: "v1.0.0"}, Vulns: []*osv.Entry{a}, }, { Module: &packages.Module{Path: "example.mod/b", Version: "v1.0.4"}, Vulns: []*osv.Entry{b}, }, { Module: &packages.Module{Path: "example.mod/c", Replace: &packages.Module{Path: "example.mod/d", Version: "v1.0.0"}, Version: "v2.0.0"}, Vulns: []*osv.Entry{c}, }, } if diff := cmp.Diff(got, want); diff != "" { t.Fatalf("mismatch (-want, +got):\n%s", diff) } } vuln-1.0.4/internal/vulncheck/helpers_test.go000066400000000000000000000056151456050377100213450ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "runtime" "sort" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/semver" ) // newTestClient returns a client that reads // a database with the following vulnerable symbols: // // golang.org/amod/avuln.{VulnData.Vuln1, vulnData.Vuln2} // golang.org/bmod/bvuln.Vuln // archive/zip.OpenReader func newTestClient() (*client.Client, error) { return client.NewInMemoryClient( []*osv.Entry{ { ID: "VA", Affected: []osv.Affected{{ Module: osv.Module{Path: "golang.org/amod"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "1.0.4"}, {Introduced: "1.1.2"}}}}, EcosystemSpecific: osv.EcosystemSpecific{Packages: []osv.Package{{ Path: "golang.org/amod/avuln", Symbols: []string{"VulnData.Vuln1", "VulnData.Vuln2"}}, }}, }}, }, { ID: "VB", Affected: []osv.Affected{{ Module: osv.Module{Path: "golang.org/bmod"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver}}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "golang.org/bmod/bvuln", Symbols: []string{"Vuln"}, }}, }, }}, }, { ID: "STD", Affected: []osv.Affected{{ Module: osv.Module{Path: osv.GoStdModulePath}, // Range is populated also using runtime info for testing binaries since // setting fixed Go version for binaries is very difficult. Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.18"}, {Introduced: semver.GoTagToSemver(runtime.Version())}}}}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "archive/zip", Symbols: []string{"OpenReader"}, }}, }, }}, }}) } type edge struct { // src and dest are ids of source and // destination nodes in a callgraph edge. src, dst string } func callGraphToStrMap(r *Result) map[string][]string { // seen edges, to avoid repetitions seen := make(map[edge]bool) m := make(map[string][]string) for _, v := range r.Vulns { updateCallGraph(m, v.CallSink, seen) } sortStrMap(m) return m } func updateCallGraph(callGraph map[string][]string, f *FuncNode, seen map[edge]bool) { fName := f.String() for _, callsite := range f.CallSites { e := edge{src: callsite.Parent.Name, dst: f.Name} if seen[e] { continue } seen[e] = true callerName := callsite.Parent.String() callGraph[callerName] = append(callGraph[callerName], fName) updateCallGraph(callGraph, callsite.Parent, seen) } } // sortStrMap sorts the map string slice values to make them deterministic. func sortStrMap(m map[string][]string) { for _, strs := range m { sort.Strings(strs) } } vuln-1.0.4/internal/vulncheck/packages.go000066400000000000000000000122701456050377100204150ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "fmt" "strings" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal" "golang.org/x/vuln/internal/semver" ) // PackageGraph holds a complete module and package graph. // Its primary purpose is to allow fast access to the nodes by path. type PackageGraph struct { modules map[string]*packages.Module packages map[string]*packages.Package } func NewPackageGraph(goVersion string) *PackageGraph { graph := &PackageGraph{ modules: map[string]*packages.Module{}, packages: map[string]*packages.Package{}, } graph.AddModules(&packages.Module{ Path: internal.GoStdModulePath, Version: semver.GoTagToSemver(goVersion), }) return graph } // AddModules adds the modules and any replace modules provided. // It will ignore modules that have duplicate paths to ones the graph already holds. func (g *PackageGraph) AddModules(mods ...*packages.Module) { for _, mod := range mods { if _, found := g.modules[mod.Path]; found { //TODO: check duplicates are okay? continue } g.modules[mod.Path] = mod if mod.Replace != nil { g.AddModules(mod.Replace) } } } // . func (g *PackageGraph) GetModule(path string) *packages.Module { if mod, ok := g.modules[path]; ok { return mod } mod := &packages.Module{ Path: path, Version: "", } g.AddModules(mod) return mod } // AddPackages adds the packages and the full graph of imported packages. // It will ignore packages that have duplicate paths to ones the graph already holds. func (g *PackageGraph) AddPackages(pkgs ...*packages.Package) { for _, pkg := range pkgs { if _, found := g.packages[pkg.PkgPath]; found { //TODO: check duplicates are okay? continue } g.packages[pkg.PkgPath] = pkg g.fixupPackage(pkg) for _, child := range pkg.Imports { g.AddPackages(child) } } } func (g *PackageGraph) fixupPackage(pkg *packages.Package) { if pkg.Module != nil { g.AddModules(pkg.Module) return } pkg.Module = g.findModule(pkg.PkgPath) } // findModule finds a module for package. // It does a longest prefix search amongst the existing modules, if that does // not find anything, it returns the "unknown" module. func (g *PackageGraph) findModule(pkgPath string) *packages.Module { //TODO: better stdlib test if !strings.Contains(pkgPath, ".") { return g.GetModule(internal.GoStdModulePath) } for _, m := range g.modules { //TODO: not first match, best match... if pkgPath == m.Path || strings.HasPrefix(pkgPath, m.Path+"/") { return m } } return g.GetModule(internal.UnknownModulePath) } // GetPackage returns the package matching the path. // If the graph does not already know about the package, a new one is added. func (g *PackageGraph) GetPackage(path string) *packages.Package { if pkg, ok := g.packages[path]; ok { return pkg } pkg := &packages.Package{ PkgPath: path, } g.AddPackages(pkg) return pkg } // LoadPackages loads the packages specified by the patterns into the graph. // See golang.org/x/tools/go/packages.Load for details of how it works. func (g *PackageGraph) LoadPackagesAndMods(cfg *packages.Config, tags []string, patterns []string) ([]*packages.Package, []*packages.Module, error) { if len(tags) > 0 { cfg.BuildFlags = []string{fmt.Sprintf("-tags=%s", strings.Join(tags, ","))} } cfg.Mode |= packages.NeedDeps | packages.NeedImports | packages.NeedModule | packages.NeedSyntax | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedName pkgs, err := packages.Load(cfg, patterns...) if err != nil { return nil, nil, err } var perrs []packages.Error packages.Visit(pkgs, nil, func(p *packages.Package) { perrs = append(perrs, p.Errors...) }) if len(perrs) > 0 { err = &packageError{perrs} } g.AddPackages(pkgs...) return pkgs, extractModules(pkgs), err } // extractModules collects modules in `pkgs` up to uniqueness of // module path and version. func extractModules(pkgs []*packages.Package) []*packages.Module { modMap := map[string]*packages.Module{} seen := map[*packages.Package]bool{} var extract func(*packages.Package, map[string]*packages.Module) extract = func(pkg *packages.Package, modMap map[string]*packages.Module) { if pkg == nil || seen[pkg] { return } if pkg.Module != nil { if pkg.Module.Replace != nil { modMap[pkg.Module.Replace.Path] = pkg.Module } else { modMap[pkg.Module.Path] = pkg.Module } } seen[pkg] = true for _, imp := range pkg.Imports { extract(imp, modMap) } } for _, pkg := range pkgs { extract(pkg, modMap) } modules := []*packages.Module{} for _, mod := range modMap { modules = append(modules, mod) } return modules } // packageError contains errors from loading a set of packages. type packageError struct { Errors []packages.Error } func (e *packageError) Error() string { var b strings.Builder fmt.Fprintln(&b, "\nThere are errors with the provided package patterns:") fmt.Fprintln(&b, "") for _, e := range e.Errors { fmt.Fprintln(&b, e) } fmt.Fprintln(&b, "\nFor details on package patterns, see https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns.") return b.String() } vuln-1.0.4/internal/vulncheck/slicing.go000066400000000000000000000024151456050377100202670ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "golang.org/x/tools/go/callgraph" "golang.org/x/tools/go/ssa" ) // forwardSlice computes the transitive closure of functions forward reachable // via calls in cg or referred to in an instruction starting from `sources`. func forwardSlice(sources map[*ssa.Function]bool, cg *callgraph.Graph) map[*ssa.Function]bool { seen := make(map[*ssa.Function]bool) var visit func(f *ssa.Function) visit = func(f *ssa.Function) { if seen[f] { return } seen[f] = true if n := cg.Nodes[f]; n != nil { for _, e := range n.Out { if e.Site != nil { visit(e.Callee.Func) } } } var buf [10]*ssa.Value // avoid alloc in common case for _, b := range f.Blocks { for _, instr := range b.Instrs { for _, op := range instr.Operands(buf[:0]) { if fn, ok := (*op).(*ssa.Function); ok { visit(fn) } } } } } for source := range sources { visit(source) } return seen } // pruneSet removes functions in `set` that are in `toPrune`. func pruneSet(set, toPrune map[*ssa.Function]bool) { for f := range set { if !toPrune[f] { delete(set, f) } } } vuln-1.0.4/internal/vulncheck/slicing_test.go000066400000000000000000000043171456050377100213310ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "path" "reflect" "testing" "golang.org/x/tools/go/callgraph/cha" "golang.org/x/tools/go/packages/packagestest" "golang.org/x/tools/go/ssa" "golang.org/x/tools/go/ssa/ssautil" ) // funcNames returns a set of function names for `funcs`. func funcNames(funcs map[*ssa.Function]bool) map[string]bool { fs := make(map[string]bool) for f := range funcs { fs[dbFuncName(f)] = true } return fs } func TestSlicing(t *testing.T) { // test program p := ` package slice func X() {} func Y() {} // not reachable func id(i int) int { return i } // not reachable func inc(i int) int { return i + 1 } func Apply(b bool, h func()) { if b { func() { print("applied") }() return } h() } type I interface { Foo() } type A struct{} func (a A) Foo() {} // not reachable func (a A) Bar() {} type B struct{} func (b B) Foo() {} func debug(s string) { print(s) } func Do(i I, input string) { debug(input) i.Foo() func(x string) { func(l int) { print(l) }(len(x)) }(input) }` e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "some/module", Files: map[string]interface{}{"slice/slice.go": p}, }, }) graph := NewPackageGraph("go1.18") pkgs, _, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "/module/slice")}) if err != nil { t.Fatal(err) } prog, ssaPkgs := ssautil.AllPackages(pkgs, 0) prog.Build() pkg := ssaPkgs[0] sources := map[*ssa.Function]bool{pkg.Func("Apply"): true, pkg.Func("Do"): true} fs := funcNames(forwardSlice(sources, cha.CallGraph(prog))) want := map[string]bool{ "Apply": true, "Apply$1": true, "X": true, "Y": true, "Do": true, "Do$1": true, "Do$1$1": true, "debug": true, "A.Foo": true, "B.Foo": true, } if !reflect.DeepEqual(want, fs) { t.Errorf("want %v; got %v", want, fs) } } vuln-1.0.4/internal/vulncheck/source.go000066400000000000000000000206701456050377100201420ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "context" "sync" "golang.org/x/tools/go/callgraph" "golang.org/x/tools/go/packages" "golang.org/x/tools/go/ssa" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/osv" ) // Source detects vulnerabilities in pkgs and emits the findings to handler. func Source(ctx context.Context, handler govulncheck.Handler, pkgs []*packages.Package, mods []*packages.Module, cfg *govulncheck.Config, client *client.Client, graph *PackageGraph) error { vr, err := source(ctx, handler, pkgs, mods, cfg, client, graph) if err != nil { return err } if cfg.ScanLevel.WantSymbols() { return emitCallFindings(handler, sourceCallstacks(vr)) } return nil } // source detects vulnerabilities in packages. It emits findings to handler // and produces a Result that contains info on detected vulnerabilities. // // Assumes that pkgs are non-empty and belong to the same program. func source(ctx context.Context, handler govulncheck.Handler, pkgs []*packages.Package, mods []*packages.Module, cfg *govulncheck.Config, client *client.Client, graph *PackageGraph) (*Result, error) { ctx, cancel := context.WithCancel(ctx) defer cancel() // If we are building the callgraph, build ssa and the callgraph in parallel // with fetching vulnerabilities. If the vulns set is empty, return without // waiting for SSA construction or callgraph to finish. var ( wg sync.WaitGroup // guards entries, cg, and buildErr entries []*ssa.Function cg *callgraph.Graph buildErr error ) if cfg.ScanLevel.WantSymbols() { fset := pkgs[0].Fset wg.Add(1) go func() { defer wg.Done() prog, ssaPkgs := buildSSA(pkgs, fset) entries = entryPoints(ssaPkgs) cg, buildErr = callGraph(ctx, prog, entries) }() } mv, err := FetchVulnerabilities(ctx, client, mods) if err != nil { return nil, err } // Emit OSV entries immediately in their raw unfiltered form. if err := emitOSVs(handler, mv); err != nil { return nil, err } affVulns := affectingVulnerabilities(mv, "", "") if err := emitModuleFindings(handler, affVulns); err != nil { return nil, err } if !cfg.ScanLevel.WantPackages() || len(affVulns) == 0 { return &Result{}, nil } impVulns := importedVulnPackages(pkgs, affVulns) // Emit information on imported vulnerable packages now as // call graph computation might take a while. if err := emitPackageFindings(handler, impVulns); err != nil { return nil, err } // Return result immediately if not in symbol mode or // if there are no vulnerabilities imported. if !cfg.ScanLevel.WantSymbols() || len(impVulns) == 0 { return &Result{Vulns: impVulns}, nil } wg.Wait() // wait for build to finish if buildErr != nil { return nil, err } entryFuncs, callVulns := calledVulnSymbols(entries, affVulns, cg, graph) return &Result{EntryFunctions: entryFuncs, Vulns: callVulns}, nil } // importedVulnPackages detects imported vulnerable packages. func importedVulnPackages(pkgs []*packages.Package, affVulns affectingVulns) []*Vuln { var vulns []*Vuln analyzed := make(map[*packages.Package]bool) // skip analyzing the same package multiple times var vulnImports func(pkg *packages.Package) vulnImports = func(pkg *packages.Package) { if analyzed[pkg] { return } osvs := affVulns.ForPackage(pkg.PkgPath) // Create Vuln entry for each OSV entry for pkg. for _, osv := range osvs { vuln := &Vuln{ OSV: osv, Package: pkg, } vulns = append(vulns, vuln) } analyzed[pkg] = true for _, imp := range pkg.Imports { vulnImports(imp) } } for _, pkg := range pkgs { vulnImports(pkg) } return vulns } // calledVulnSymbols detects vuln symbols transitively reachable from sources // via call graph cg. // // A slice of call graph is computed related to the reachable vulnerabilities. Each // reachable Vuln has attached FuncNode that can be upward traversed to the entry points. // Entry points that reach the vulnerable symbols are also returned. func calledVulnSymbols(sources []*ssa.Function, affVulns affectingVulns, cg *callgraph.Graph, graph *PackageGraph) ([]*FuncNode, []*Vuln) { sinksWithVulns := vulnFuncs(cg, affVulns) // Compute call graph backwards reachable // from vulnerable functions and methods. var sinks []*callgraph.Node for n := range sinksWithVulns { sinks = append(sinks, n) } bcg := callGraphSlice(sinks, false) // Interesect backwards call graph with forward // reachable graph to remove redundant edges. var filteredSources []*callgraph.Node for _, e := range sources { if n, ok := bcg.Nodes[e]; ok { filteredSources = append(filteredSources, n) } } fcg := callGraphSlice(filteredSources, true) // Get the sinks that are in fact reachable from entry points. filteredSinks := make(map[*callgraph.Node][]*osv.Entry) for n, vs := range sinksWithVulns { if fn, ok := fcg.Nodes[n.Func]; ok { filteredSinks[fn] = vs } } // Transform the resulting call graph slice into // vulncheck representation. return vulnCallGraph(filteredSources, filteredSinks, graph) } // callGraphSlice computes a slice of callgraph beginning at starts // in the direction (forward/backward) controlled by forward flag. func callGraphSlice(starts []*callgraph.Node, forward bool) *callgraph.Graph { g := &callgraph.Graph{Nodes: make(map[*ssa.Function]*callgraph.Node)} visited := make(map[*callgraph.Node]bool) var visit func(*callgraph.Node) visit = func(n *callgraph.Node) { if visited[n] { return } visited[n] = true var edges []*callgraph.Edge if forward { edges = n.Out } else { edges = n.In } for _, edge := range edges { nCallee := g.CreateNode(edge.Callee.Func) nCaller := g.CreateNode(edge.Caller.Func) callgraph.AddEdge(nCaller, edge.Site, nCallee) if forward { visit(edge.Callee) } else { visit(edge.Caller) } } } for _, s := range starts { visit(s) } return g } // vulnCallGraph creates vulnerability call graph in terms of sources and sinks. func vulnCallGraph(sources []*callgraph.Node, sinks map[*callgraph.Node][]*osv.Entry, graph *PackageGraph) ([]*FuncNode, []*Vuln) { var entries []*FuncNode var vulns []*Vuln nodes := make(map[*ssa.Function]*FuncNode) // First create entries and sinks and store relevant information. for _, s := range sources { fn := createNode(nodes, s.Func, graph) entries = append(entries, fn) } for s, osvs := range sinks { f := s.Func funNode := createNode(nodes, s.Func, graph) // Populate CallSink field for each detected vuln symbol. for _, osv := range osvs { vulns = append(vulns, calledVuln(funNode, osv, dbFuncName(f), funNode.Package)) } } visited := make(map[*callgraph.Node]bool) var visit func(*callgraph.Node) visit = func(n *callgraph.Node) { if visited[n] { return } visited[n] = true for _, edge := range n.In { nCallee := createNode(nodes, edge.Callee.Func, graph) nCaller := createNode(nodes, edge.Caller.Func, graph) call := edge.Site cs := &CallSite{ Parent: nCaller, Name: call.Common().Value.Name(), RecvType: callRecvType(call), Resolved: resolved(call), Pos: instrPosition(call), } nCallee.CallSites = append(nCallee.CallSites, cs) visit(edge.Caller) } } for s := range sinks { visit(s) } return entries, vulns } // vulnFuncs returns vulnerability information for vulnerable functions in cg. func vulnFuncs(cg *callgraph.Graph, affVulns affectingVulns) map[*callgraph.Node][]*osv.Entry { m := make(map[*callgraph.Node][]*osv.Entry) for f, n := range cg.Nodes { vulns := affVulns.ForSymbol(pkgPath(f), dbFuncName(f)) if len(vulns) > 0 { m[n] = vulns } } return m } // pkgPath returns the path of the f's enclosing package, if any. // Otherwise, returns "". func pkgPath(f *ssa.Function) string { if f.Package() != nil && f.Package().Pkg != nil { return f.Package().Pkg.Path() } return "" } func createNode(nodes map[*ssa.Function]*FuncNode, f *ssa.Function, graph *PackageGraph) *FuncNode { if fn, ok := nodes[f]; ok { return fn } fn := &FuncNode{ Name: f.Name(), Package: graph.GetPackage(pkgPath(f)), RecvType: funcRecvType(f), Pos: funcPosition(f), } nodes[f] = fn return fn } func calledVuln(call *FuncNode, osv *osv.Entry, symbol string, pkg *packages.Package) *Vuln { return &Vuln{ Symbol: symbol, Package: pkg, OSV: osv, CallSink: call, } } vuln-1.0.4/internal/vulncheck/source_test.go000066400000000000000000000262201456050377100211760ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "context" "path" "reflect" "testing" "golang.org/x/tools/go/packages/packagestest" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/test" ) // TestCalls checks for call graph vuln slicing correctness. // The inlined test code has the following call graph // // x.X // / | \ // / d.D1 avuln.VulnData.Vuln1 // / / | // c.C1 d.internal.Vuln1 // | // avuln.VulnData.Vuln2 // // --------------------y.Y------------------------------- // / / \ \ \ \ // / / \ \ \ \ // / / \ \ \ \ // c.C4 c.vulnWrap.V.Vuln1(=nil) c.C2 bvuln.Vuln c.C3 c.C3$1 // | | | // y.benign e.E // // and this slice // // x.X // / | \ // / d.D1 avuln.VulnData.Vuln1 // / / // c.C1 // | // avuln.VulnData.Vuln2 // // y.Y // | // bvuln.Vuln // | | // e.E // // related to avuln.VulnData.{Vuln1, Vuln2} and bvuln.Vuln vulnerabilities. func TestCalls(t *testing.T) { e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/entry", Files: map[string]interface{}{ "x/x.go": ` package x import ( "golang.org/cmod/c" "golang.org/dmod/d" ) func X(x bool) { if x { c.C1().Vuln1() // vuln use: Vuln1 } else { d.D1() // no vuln use } } `, "y/y.go": ` package y import ( "golang.org/cmod/c" ) func Y(y bool) { if y { c.C2()() // vuln use: bvuln.Vuln } else { c.C3()() w := c.C4(benign) w.V.Vuln1() // no vuln use: Vuln1 does not belong to vulnerable type } } func benign(i c.I) {} `}}, { Name: "golang.org/cmod@v1.1.3", Files: map[string]interface{}{"c/c.go": ` package c import ( "golang.org/amod/avuln" "golang.org/bmod/bvuln" ) type I interface { Vuln1() } func C1() I { v := avuln.VulnData{} v.Vuln2() // vuln use return v } func C2() func() { return bvuln.Vuln } func C3() func() { return func() {} } type vulnWrap struct { V I } func C4(f func(i I)) vulnWrap { f(avuln.VulnData{}) return vulnWrap{} } `}, }, { Name: "golang.org/dmod@v0.5.0", Files: map[string]interface{}{"d/d.go": ` package d import ( "golang.org/cmod/c" ) type internal struct{} func (i internal) Vuln1() {} func D1() { c.C1() // transitive vuln use var i c.I i = internal{} i.Vuln1() // no vuln use } `}, }, { Name: "golang.org/amod@v1.1.3", Files: map[string]interface{}{"avuln/avuln.go": ` package avuln type VulnData struct {} func (v VulnData) Vuln1() {} func (v VulnData) Vuln2() {} `}, }, { Name: "golang.org/bmod@v0.5.0", Files: map[string]interface{}{"bvuln/bvuln.go": ` package bvuln import ( "golang.org/emod/e" ) func Vuln() { e.E(Vuln) } `}, }, { Name: "golang.org/emod@v1.5.0", Files: map[string]interface{}{"e/e.go": ` package e func E(f func()) { f() } `}, }, }) defer e.Cleanup() // Load x and y as entry packages. graph := NewPackageGraph("go1.18") pkgs, mods, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x"), path.Join(e.Temp(), "entry/y")}) if err != nil { t.Fatal(err) } if len(pkgs) != 2 { t.Fatal("failed to load x and y test packages") } c, err := newTestClient() if err != nil { t.Fatal(err) } cfg := &govulncheck.Config{ScanLevel: "symbol"} result, err := source(context.Background(), test.NewMockHandler(), pkgs, mods, cfg, c, graph) if err != nil { t.Fatal(err) } // Check that we find the right number of vulnerabilities. // There should be three entries as there are three vulnerable // symbols in the two import-reachable OSVs. if len(result.Vulns) != 3 { t.Errorf("want 3 Vulns, got %d", len(result.Vulns)) } // Check that call graph entry points are present. if got := len(result.EntryFunctions); got != 2 { t.Errorf("want 2 call graph entry points; got %v", got) } // Check that vulnerabilities are connected to the call graph. // For the test example, all vulns should have a call sink. for _, v := range result.Vulns { if v.CallSink == nil { t.Errorf("want CallSink !=0 for %v; got 0", v.Symbol) } } wantCalls := map[string][]string{ "golang.org/entry/x.X": {"golang.org/amod/avuln.VulnData.Vuln1", "golang.org/cmod/c.C1", "golang.org/dmod/d.D1"}, "golang.org/cmod/c.C1": {"golang.org/amod/avuln.VulnData.Vuln2"}, "golang.org/dmod/d.D1": {"golang.org/cmod/c.C1"}, "golang.org/entry/y.Y": {"golang.org/bmod/bvuln.Vuln"}, "golang.org/bmod/bvuln.Vuln": {"golang.org/emod/e.E"}, "golang.org/emod/e.E": {"golang.org/bmod/bvuln.Vuln"}, } if callStrMap := callGraphToStrMap(result); !reflect.DeepEqual(wantCalls, callStrMap) { t.Errorf("want %v call graph; got %v", wantCalls, callStrMap) } } func TestAllSymbolsVulnerable(t *testing.T) { e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/entry", Files: map[string]interface{}{ "x/x.go": ` package x import "golang.org/vmod/vuln" func X() { vuln.V1() }`, }, }, { Name: "golang.org/vmod@v1.2.3", Files: map[string]interface{}{"vuln/vuln.go": ` package vuln func V1() {} func V2() {} func v() {} type a struct{} func (x a) foo() {} func (x *a) bar() {} `}, }, }) defer e.Cleanup() client, err := client.NewInMemoryClient( []*osv.Entry{ { ID: "V", Affected: []osv.Affected{{ Module: osv.Module{Path: "golang.org/vmod"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.2.0"}}}}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "golang.org/vmod/vuln", Symbols: []string{}, }}, }, }}, }, }, ) if err != nil { t.Fatal(err) } // Load x as entry package. graph := NewPackageGraph("go1.18") pkgs, mods, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}) if err != nil { t.Fatal(err) } if len(pkgs) != 1 { t.Fatal("failed to load x test package") } cfg := &govulncheck.Config{ScanLevel: "symbol"} result, err := source(context.Background(), test.NewMockHandler(), pkgs, mods, cfg, client, graph) if err != nil { t.Fatal(err) } if len(result.Vulns) != 2 { // init and V1 t.Errorf("want 2 Vulns, got %d", len(result.Vulns)) } for _, v := range result.Vulns { if v.CallSink == nil { t.Errorf("expected a call sink for %s; got none", v.Symbol) } } } // TestNoSyntheticNodes checks that removing synthetic wrappers from // call graph still produces correct results. func TestNoSyntheticNodes(t *testing.T) { e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/entry", Files: map[string]interface{}{ "x/x.go": ` package x import "golang.org/amod/avuln" type i interface { Vuln1() } func X() { v := &avuln.VulnData{} var x i = v // to force creatation of wrapper method *avuln.VulnData.Vuln1 x.Vuln1() }`, }, }, { Name: "golang.org/amod@v1.1.3", Files: map[string]interface{}{"avuln/avuln.go": ` package avuln type VulnData struct {} func (v VulnData) Vuln1() {} func (v VulnData) Vuln2() {} `}, }, }) defer e.Cleanup() // Load x as entry package. graph := NewPackageGraph("go1.18") pkgs, mods, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}) if err != nil { t.Fatal(err) } if len(pkgs) != 1 { t.Fatal("failed to load x test package") } c, err := newTestClient() if err != nil { t.Fatal(err) } cfg := &govulncheck.Config{ScanLevel: "symbol"} result, err := source(context.Background(), test.NewMockHandler(), pkgs, mods, cfg, c, graph) if err != nil { t.Fatal(err) } if len(result.Vulns) != 1 { t.Errorf("want 1 Vuln, got %d", len(result.Vulns)) } vuln := result.Vulns[0] if vuln.Symbol != "VulnData.Vuln1" { t.Fatalf("expected VulnData.Vuln1 as called symbol; got %s", vuln.Symbol) } stack := sourceCallstacks(result)[vuln] // We don't want the call stack X -> *VulnData.Vuln1 (wrapper) -> VulnData.Vuln1. // We want X -> VulnData.Vuln1. if len(stack) != 2 { t.Errorf("want stack of length 2; got stack of length %v", len(stack)) } } func TestRecursion(t *testing.T) { e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/entry", Files: map[string]interface{}{ "x/x.go": ` package x import "golang.org/bmod/bvuln" func X() { y() bvuln.Vuln() z() } func y() { X() } func z() {} `, }, }, { Name: "golang.org/bmod@v0.5.0", Files: map[string]interface{}{"bvuln/bvuln.go": ` package bvuln func Vuln() {} `}, }, }) defer e.Cleanup() // Load x as entry package. graph := NewPackageGraph("go1.18") pkgs, mods, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}) if err != nil { t.Fatal(err) } if len(pkgs) != 1 { t.Fatal("failed to load x test package") } c, err := newTestClient() if err != nil { t.Fatal(err) } cfg := &govulncheck.Config{ScanLevel: "symbol"} result, err := source(context.Background(), test.NewMockHandler(), pkgs, mods, cfg, c, graph) if err != nil { t.Fatal(err) } wantCalls := map[string][]string{ "golang.org/entry/x.X": {"golang.org/bmod/bvuln.Vuln", "golang.org/entry/x.y"}, "golang.org/entry/x.y": {"golang.org/entry/x.X"}, } if callStrMap := callGraphToStrMap(result); !reflect.DeepEqual(wantCalls, callStrMap) { t.Errorf("want %v call graph; got %v", wantCalls, callStrMap) } } func TestIssue57174(t *testing.T) { e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/entry", Files: map[string]interface{}{ "x/x.go": ` package x import "golang.org/bmod/bvuln" func P(d [][3]int) { p(d) } func p[E interface{ [3]int | [4]int }](d []E) { c := d[0] if c[0] > 0 { bvuln.Vuln() } } `, }, }, { Name: "golang.org/bmod@v0.5.0", Files: map[string]interface{}{"bvuln/bvuln.go": ` package bvuln func Vuln() {} `}, }, }) defer e.Cleanup() // Load x as entry package. graph := NewPackageGraph("go1.18") pkgs, mods, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}) if err != nil { t.Fatal(err) } if len(pkgs) != 1 { t.Fatal("failed to load x test package") } c, err := newTestClient() if err != nil { t.Fatal(err) } cfg := &govulncheck.Config{ScanLevel: "symbol"} _, err = source(context.Background(), test.NewMockHandler(), pkgs, mods, cfg, c, graph) if err != nil { t.Fatal(err) } } vuln-1.0.4/internal/vulncheck/utils.go000066400000000000000000000217201456050377100177770ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "bytes" "context" "go/token" "go/types" "sort" "strings" "golang.org/x/tools/go/callgraph" "golang.org/x/tools/go/callgraph/cha" "golang.org/x/tools/go/callgraph/vta" "golang.org/x/tools/go/packages" "golang.org/x/tools/go/ssa/ssautil" "golang.org/x/tools/go/types/typeutil" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/semver" "golang.org/x/tools/go/ssa" ) // buildSSA creates an ssa representation for pkgs. Returns // the ssa program encapsulating the packages and top level // ssa packages corresponding to pkgs. func buildSSA(pkgs []*packages.Package, fset *token.FileSet) (*ssa.Program, []*ssa.Package) { prog := ssa.NewProgram(fset, ssa.InstantiateGenerics) imports := make(map[*packages.Package]*ssa.Package) var createImports func(map[string]*packages.Package) createImports = func(pkgs map[string]*packages.Package) { for _, p := range pkgs { if _, ok := imports[p]; !ok { i := prog.CreatePackage(p.Types, p.Syntax, p.TypesInfo, true) imports[p] = i createImports(p.Imports) } } } for _, tp := range pkgs { createImports(tp.Imports) } var ssaPkgs []*ssa.Package for _, tp := range pkgs { if sp, ok := imports[tp]; ok { ssaPkgs = append(ssaPkgs, sp) } else { sp := prog.CreatePackage(tp.Types, tp.Syntax, tp.TypesInfo, false) ssaPkgs = append(ssaPkgs, sp) } } prog.Build() return prog, ssaPkgs } // callGraph builds a call graph of prog based on VTA analysis. func callGraph(ctx context.Context, prog *ssa.Program, entries []*ssa.Function) (*callgraph.Graph, error) { entrySlice := make(map[*ssa.Function]bool) for _, e := range entries { entrySlice[e] = true } if err := ctx.Err(); err != nil { // cancelled? return nil, err } initial := cha.CallGraph(prog) allFuncs := ssautil.AllFunctions(prog) fslice := forwardSlice(entrySlice, initial) // Keep only actually linked functions. pruneSet(fslice, allFuncs) if err := ctx.Err(); err != nil { // cancelled? return nil, err } vtaCg := vta.CallGraph(fslice, initial) // Repeat the process once more, this time using // the produced VTA call graph as the base graph. fslice = forwardSlice(entrySlice, vtaCg) pruneSet(fslice, allFuncs) if err := ctx.Err(); err != nil { // cancelled? return nil, err } cg := vta.CallGraph(fslice, vtaCg) cg.DeleteSyntheticNodes() return cg, nil } // dbTypeFormat formats the name of t according how types // are encoded in vulnerability database: // - pointer designation * is skipped // - full path prefix is skipped as well func dbTypeFormat(t types.Type) string { switch tt := t.(type) { case *types.Pointer: return dbTypeFormat(tt.Elem()) case *types.Named: return tt.Obj().Name() default: return types.TypeString(t, func(p *types.Package) string { return "" }) } } // dbFuncName computes a function name consistent with the namings used in vulnerability // databases. Effectively, a qualified name of a function local to its enclosing package. // If a receiver is a pointer, this information is not encoded in the resulting name. If // a function has type argument/parameter, this information is omitted. The name of // anonymous functions is simply "". The function names are unique subject to the enclosing // package, but not globally. // // Examples: // // func (a A) foo (...) {...} -> A.foo // func foo(...) {...} -> foo // func (b *B) bar (...) {...} -> B.bar // func (c C[T]) do(...) {...} -> C.do func dbFuncName(f *ssa.Function) string { selectBound := func(f *ssa.Function) types.Type { // If f is a "bound" function introduced by ssa for a given type, return the type. // When "f" is a "bound" function, it will have 1 free variable of that type within // the function. This is subject to change when ssa changes. if len(f.FreeVars) == 1 && strings.HasPrefix(f.Synthetic, "bound ") { return f.FreeVars[0].Type() } return nil } selectThunk := func(f *ssa.Function) types.Type { // If f is a "thunk" function introduced by ssa for a given type, return the type. // When "f" is a "thunk" function, the first parameter will have that type within // the function. This is subject to change when ssa changes. params := f.Signature.Params() // params.Len() == 1 then params != nil. if strings.HasPrefix(f.Synthetic, "thunk ") && params.Len() >= 1 { if first := params.At(0); first != nil { return first.Type() } } return nil } var qprefix string if recv := f.Signature.Recv(); recv != nil { qprefix = dbTypeFormat(recv.Type()) } else if btype := selectBound(f); btype != nil { qprefix = dbTypeFormat(btype) } else if ttype := selectThunk(f); ttype != nil { qprefix = dbTypeFormat(ttype) } if qprefix == "" { return funcName(f) } return qprefix + "." + funcName(f) } // funcName returns the name of the ssa function f. // It is f.Name() without additional type argument // information in case of generics. func funcName(f *ssa.Function) string { n, _, _ := strings.Cut(f.Name(), "[") return n } // memberFuncs returns functions associated with the `member`: // 1) `member` itself if `member` is a function // 2) `member` methods if `member` is a type // 3) empty list otherwise func memberFuncs(member ssa.Member, prog *ssa.Program) []*ssa.Function { switch t := member.(type) { case *ssa.Type: methods := typeutil.IntuitiveMethodSet(t.Type(), &prog.MethodSets) var funcs []*ssa.Function for _, m := range methods { if f := prog.MethodValue(m); f != nil { funcs = append(funcs, f) } } return funcs case *ssa.Function: return []*ssa.Function{t} default: return nil } } // funcPosition gives the position of `f`. Returns empty token.Position // if no file information on `f` is available. func funcPosition(f *ssa.Function) *token.Position { pos := f.Prog.Fset.Position(f.Pos()) return &pos } // instrPosition gives the position of `instr`. Returns empty token.Position // if no file information on `instr` is available. func instrPosition(instr ssa.Instruction) *token.Position { pos := instr.Parent().Prog.Fset.Position(instr.Pos()) return &pos } func resolved(call ssa.CallInstruction) bool { if call == nil { return true } return call.Common().StaticCallee() != nil } func callRecvType(call ssa.CallInstruction) string { if !call.Common().IsInvoke() { return "" } buf := new(bytes.Buffer) types.WriteType(buf, call.Common().Value.Type(), nil) return buf.String() } func funcRecvType(f *ssa.Function) string { v := f.Signature.Recv() if v == nil { return "" } buf := new(bytes.Buffer) types.WriteType(buf, v.Type(), nil) return buf.String() } func FixedVersion(modulePath, version string, affected []osv.Affected) string { fixed := earliestValidFix(modulePath, version, affected) // Add "v" prefix if one does not exist. moduleVersionString // will later on replace it with "go" if needed. if fixed != "" && !strings.HasPrefix(fixed, "v") { fixed = "v" + fixed } return fixed } // earliestValidFix returns the earliest fix for version of modulePath that // itself is not vulnerable in affected. // // Suppose we have a version "v1.0.0" and we use {...} to denote different // affected regions. Assume for simplicity that all affected apply to the // same input modulePath. // // {[v0.1.0, v0.1.9), [v1.0.0, v2.0.0)} -> v2.0.0 // {[v1.0.0, v1.5.0), [v2.0.0, v2.1.0}, {[v1.4.0, v1.6.0)} -> v2.1.0 func earliestValidFix(modulePath, version string, affected []osv.Affected) string { var moduleAffected []osv.Affected for _, a := range affected { if a.Module.Path == modulePath { moduleAffected = append(moduleAffected, a) } } vFixes := validFixes(version, moduleAffected) for _, fix := range vFixes { if !fixNegated(fix, moduleAffected) { return fix } } return "" } // validFixes computes all fixes for version in affected and // returns them sorted increasingly. Assumes that all affected // apply to the same module. func validFixes(version string, affected []osv.Affected) []string { var fixes []string for _, a := range affected { for _, r := range a.Ranges { if r.Type != osv.RangeTypeSemver { continue } for _, e := range r.Events { fix := e.Fixed if fix != "" && semver.Less(version, fix) { fixes = append(fixes, fix) } } } } sort.SliceStable(fixes, func(i, j int) bool { return semver.Less(fixes[i], fixes[j]) }) return fixes } // fixNegated checks if fix is negated to by a re-introduction // of a vulnerability in affected. Assumes that all affected apply // to the same module. func fixNegated(fix string, affected []osv.Affected) bool { for _, a := range affected { for _, r := range a.Ranges { if semver.ContainsSemver(r, fix) { return true } } } return false } func modPath(mod *packages.Module) string { if mod.Replace != nil { return mod.Replace.Path } return mod.Path } func modVersion(mod *packages.Module) string { if mod.Replace != nil { return mod.Replace.Version } return mod.Version } vuln-1.0.4/internal/vulncheck/utils_test.go000066400000000000000000000120151456050377100210330ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "path" "testing" "github.com/google/go-cmp/cmp" "golang.org/x/tools/go/packages/packagestest" "golang.org/x/tools/go/ssa/ssautil" "golang.org/x/vuln/internal/osv" ) func TestFixedVersion(t *testing.T) { for _, test := range []struct { name string module string version string in []osv.Affected want string }{ { name: "empty", want: "", }, { name: "no semver", module: "example.com/module", version: "v1.2.0", in: []osv.Affected{ { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeType("unspecified"), Events: []osv.RangeEvent{ {Introduced: "v1.0.0"}, {Fixed: "v1.2.3"}, }, }}, }, }, want: "", }, { name: "one", module: "example.com/module", version: "v1.0.1", in: []osv.Affected{ { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Introduced: "v1.0.0"}, {Fixed: "v1.2.3"}, }, }}, }, }, want: "v1.2.3", }, { name: "several", module: "example.com/module", version: "v1.2.0", in: []osv.Affected{ { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Introduced: "v1.0.0"}, {Fixed: "v1.2.3"}, {Introduced: "v1.5.0"}, {Fixed: "v1.5.6"}, }, }}, }, { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Introduced: "v1.3.0"}, {Fixed: "v1.4.1"}, }, }}, }, { // This should be ignored. Module: osv.Module{ Path: "example.com/anothermodule", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Introduced: "0"}, {Fixed: "v1.6.0"}, }, }}, }, }, want: "v1.2.3", }, { name: "no v prefix", version: "1.18.1", module: "example.com/module", in: []osv.Affected{ { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Fixed: "1.17.2"}, }, }}, }, { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Introduced: "1.18.0"}, {Fixed: "1.18.4"}, }, }}, }, }, want: "v1.18.4", }, { name: "overlapping", module: "example.com/module", in: []osv.Affected{ { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ // v1.2.3 is nominally the earliest fix, // but it is contained in vulnerable range // for the next affected value. {Introduced: "v1.0.0"}, {Fixed: "v1.2.3"}, {Introduced: "v1.5.0"}, }, }}, }, { Module: osv.Module{ Path: "example.com/module", }, Ranges: []osv.Range{ { Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{ {Introduced: "v1.2.0"}, {Fixed: "v1.4.1"}, }, }}, }, }, want: "v1.4.1", }, } { t.Run(test.name, func(t *testing.T) { got := FixedVersion(test.module, test.version, test.in) if got != test.want { t.Errorf("got %q, want %q", got, test.want) } }) } } func TestDbSymbolName(t *testing.T) { e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/package", Files: map[string]interface{}{ "x/x.go": ` package x func Foo() { // needed for ssautil.Allfunctions x := a{} x.Do() x.NotDo() b := B[a]{} b.P() b.Q(x) Z[a]() } func bar() {} type a struct{} func (x a) Do() {} func (x *a) NotDo() { } type B[T any] struct{} func (b *B[T]) P() {} func (b B[T]) Q(t T) {} func Z[T any]() {} `}, }, }) defer e.Cleanup() graph := NewPackageGraph("go1.18") pkgs, _, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "package/x")}) if err != nil { t.Fatal(err) } want := map[string]bool{ "init": true, "bar": true, "B.P": true, "B.Q": true, "a.Do": true, "a.NotDo": true, "Foo": true, "Z": true, } // test dbFuncName prog, _ := buildSSA(pkgs, pkgs[0].Fset) got := make(map[string]bool) for f := range ssautil.AllFunctions(prog) { got[dbFuncName(f)] = true } if diff := cmp.Diff(want, got); diff != "" { t.Errorf("(-want;got+): %s", diff) } } vuln-1.0.4/internal/vulncheck/vulncheck.go000066400000000000000000000215451456050377100206260ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "fmt" "go/token" "strings" "time" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/semver" ) // Result contains information on detected vulnerabilities. // For call graph analysis, it provides information on reachability // of vulnerable symbols through entry points of the program. type Result struct { // EntryFunctions are a subset of Functions representing vulncheck entry points. EntryFunctions []*FuncNode // Vulns contains information on detected vulnerabilities. Vulns []*Vuln } // Vuln provides information on a detected vulnerability. For call // graph mode, Vuln will also contain the information on how the // vulnerability is reachable in the user call graph. type Vuln struct { // OSV contains information on the detected vulnerability in the shared // vulnerability format. // // OSV, Symbol, and Package identify a vulnerability. // // Note that *osv.Entry may describe multiple symbols from multiple // packages. OSV *osv.Entry // Symbol is the name of the detected vulnerable function or method. Symbol string // CallSink is the FuncNode corresponding to Symbol. // // When analyzing binaries, Symbol is not reachable, or cfg.ScanLevel // is symbol, CallSink will be unavailable and set to nil. CallSink *FuncNode // Package of Symbol. // // When the package of symbol is not imported, Package will be // unavailable and set to nil. Package *packages.Package } // A FuncNode describes a function in the call graph. type FuncNode struct { // Name is the name of the function. Name string // RecvType is the receiver object type of this function, if any. RecvType string // Package is the package the function is part of. Package *packages.Package // Position describes the position of the function in the file. Pos *token.Position // CallSites is a set of call sites where this function is called. CallSites []*CallSite } func (fn *FuncNode) String() string { if fn.RecvType == "" { return fmt.Sprintf("%s.%s", fn.Package.PkgPath, fn.Name) } return fmt.Sprintf("%s.%s", fn.RecvType, fn.Name) } // Receiver returns the FuncNode's receiver, with package path removed. // Pointers are preserved if present. func (fn *FuncNode) Receiver() string { return strings.Replace(fn.RecvType, fmt.Sprintf("%s.", fn.Package.PkgPath), "", 1) } // A CallSite describes a function call. type CallSite struct { // Parent is the enclosing function where the call is made. Parent *FuncNode // Name stands for the name of the function (variable) being called. Name string // RecvType is the full path of the receiver object type, if any. RecvType string // Position describes the position of the function in the file. Pos *token.Position // Resolved indicates if the called function can be statically resolved. Resolved bool } // affectingVulns is an internal structure for querying // vulnerabilities that apply to the current program // and platform under consideration. type affectingVulns []*ModVulns // ModVulns groups vulnerabilities per module. type ModVulns struct { Module *packages.Module Vulns []*osv.Entry } func affectingVulnerabilities(vulns []*ModVulns, os, arch string) affectingVulns { now := time.Now() var filtered affectingVulns for _, mod := range vulns { module := mod.Module modVersion := module.Version if module.Replace != nil { modVersion = module.Replace.Version } // TODO(https://golang.org/issues/49264): if modVersion == "", try vcs? var filteredVulns []*osv.Entry for _, v := range mod.Vulns { // Ignore vulnerabilities that have been withdrawn if v.Withdrawn != nil && v.Withdrawn.Before(now) { continue } var filteredAffected []osv.Affected for _, a := range v.Affected { // Vulnerabilities from some databases might contain // information on related but different modules that // were, say, reported in the same CVE. We filter such // information out as it might lead to incorrect results: // Computing a latest fix could consider versions of these // different packages. if a.Module.Path != module.Path { continue } // A module version is affected if // - it is included in one of the affected version ranges // - and module version is not "" if modVersion == "" { // Module version of "" means the module version is not available, // and so we don't want to spam users with potential false alarms. continue } if !semver.Affects(a.Ranges, modVersion) { continue } var filteredImports []osv.Package for _, p := range a.EcosystemSpecific.Packages { if matchesPlatform(os, arch, p) { filteredImports = append(filteredImports, p) } } // If we pruned all existing Packages, then the affected is // empty and we can filter it out. Note that Packages can // be empty for vulnerabilities that have no package or // symbol information available. if len(a.EcosystemSpecific.Packages) != 0 && len(filteredImports) == 0 { continue } a.EcosystemSpecific.Packages = filteredImports filteredAffected = append(filteredAffected, a) } if len(filteredAffected) == 0 { continue } // save the non-empty vulnerability with only // affected symbols. newV := *v newV.Affected = filteredAffected filteredVulns = append(filteredVulns, &newV) } filtered = append(filtered, &ModVulns{ Module: module, Vulns: filteredVulns, }) } return filtered } func matchesPlatform(os, arch string, e osv.Package) bool { return matchesPlatformComponent(os, e.GOOS) && matchesPlatformComponent(arch, e.GOARCH) } // matchesPlatformComponent reports whether a GOOS (or GOARCH) // matches a list of GOOS (or GOARCH) values from an osv.EcosystemSpecificImport. func matchesPlatformComponent(s string, ps []string) bool { // An empty input or an empty GOOS or GOARCH list means "matches everything." if s == "" || len(ps) == 0 { return true } for _, p := range ps { if s == p { return true } } return false } // ForPackage returns the vulnerabilities for the module which is the most // specific prefix of importPath, or nil if there is no matching module with // vulnerabilities. func (aff affectingVulns) ForPackage(importPath string) []*osv.Entry { isStd := IsStdPackage(importPath) var mostSpecificMod *ModVulns for _, mod := range aff { md := mod if isStd && mod.Module.Path == internal.GoStdModulePath { // standard library packages do not have an associated module, // so we relate them to the artificial stdlib module. mostSpecificMod = md } else if strings.HasPrefix(importPath, md.Module.Path) { if mostSpecificMod == nil || len(mostSpecificMod.Module.Path) < len(md.Module.Path) { mostSpecificMod = md } } } if mostSpecificMod == nil { return nil } if mostSpecificMod.Module.Replace != nil { // standard libraries do not have a module nor replace module importPath = fmt.Sprintf("%s%s", mostSpecificMod.Module.Replace.Path, strings.TrimPrefix(importPath, mostSpecificMod.Module.Path)) } vulns := mostSpecificMod.Vulns packageVulns := []*osv.Entry{} Vuln: for _, v := range vulns { for _, a := range v.Affected { if len(a.EcosystemSpecific.Packages) == 0 { // no packages means all packages are vulnerable packageVulns = append(packageVulns, v) continue Vuln } for _, p := range a.EcosystemSpecific.Packages { if p.Path == importPath { packageVulns = append(packageVulns, v) continue Vuln } } } } return packageVulns } // ForSymbol returns vulnerabilities for symbol in aff.ForPackage(importPath). func (aff affectingVulns) ForSymbol(importPath, symbol string) []*osv.Entry { vulns := aff.ForPackage(importPath) if vulns == nil { return nil } symbolVulns := []*osv.Entry{} vulnLoop: for _, v := range vulns { for _, a := range v.Affected { if len(a.EcosystemSpecific.Packages) == 0 { // no packages means all symbols of all packages are vulnerable symbolVulns = append(symbolVulns, v) continue vulnLoop } for _, p := range a.EcosystemSpecific.Packages { if p.Path != importPath { continue } if len(p.Symbols) > 0 && !contains(p.Symbols, symbol) { continue } symbolVulns = append(symbolVulns, v) continue vulnLoop } } } return symbolVulns } func contains(symbols []string, target string) bool { for _, s := range symbols { if s == target { return true } } return false } func IsStdPackage(pkg string) bool { if pkg == "" { return false } // std packages do not have a "." in their path. For instance, see // Contains in pkgsite/+/refs/heads/master/internal/stdlbib/stdlib.go. if i := strings.IndexByte(pkg, '/'); i != -1 { pkg = pkg[:i] } return !strings.Contains(pkg, ".") } vuln-1.0.4/internal/vulncheck/vulncheck_test.go000066400000000000000000000304131456050377100216570ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "reflect" "testing" "time" "github.com/google/go-cmp/cmp" "golang.org/x/tools/go/packages" "golang.org/x/vuln/internal/osv" ) func TestFilterVulns(t *testing.T) { past := time.Now().Add(-3 * time.Hour) mv := []*ModVulns{ { Module: &packages.Module{ Path: "example.mod/a", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "a", Affected: []osv.Affected{ {Module: osv.Module{Path: "example.mod/a"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "2.0.0"}}}}}, {Module: osv.Module{Path: "a.example.mod/a"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "2.0.0"}}}}}, // should be filtered out {Module: osv.Module{Path: "example.mod/a"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0"}, {Fixed: "0.9.0"}}}}}, // should be filtered out }}, {ID: "b", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/a"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.1"}}}}, EcosystemSpecific: osv.EcosystemSpecific{Packages: []osv.Package{{ GOOS: []string{"windows", "linux"}, }}, }}}}, {ID: "c", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/a"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "1.0.1"}}}}, EcosystemSpecific: osv.EcosystemSpecific{Packages: []osv.Package{{ GOARCH: []string{"arm64", "amd64"}, }}, }}}}, {ID: "d", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/a"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"windows"}, }}, }}}}, }, }, { Module: &packages.Module{ Path: "example.mod/b", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "e", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOARCH: []string{"arm64"}, }}, }}}}, {ID: "f", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"linux"}, }}, }}}}, {ID: "g", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOARCH: []string{"amd64"}, }}, }, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0.0.1"}, {Fixed: "2.0.1"}}}}}}}, {ID: "h", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"windows"}, GOARCH: []string{"amd64"}, }}, }}}}, }, }, { Module: &packages.Module{ Path: "example.mod/c", }, Vulns: []*osv.Entry{ {ID: "i", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/c"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOARCH: []string{"amd64"}, }}, }, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0.0.0"}}}}}}}, {ID: "j", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/c"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOARCH: []string{"amd64"}, }}, }, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Fixed: "3.0.0"}}}}}}}, {ID: "k"}, }, }, { Module: &packages.Module{ Path: "example.mod/d", Version: "v1.2.0", }, Vulns: []*osv.Entry{ {ID: "l", Affected: []osv.Affected{ {Module: osv.Module{Path: "example.mod/d"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"windows"}, // should be filtered out }}, }}, {Module: osv.Module{Path: "example.mod/d"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"linux"}, }}, }}, }}, }, }, { Module: &packages.Module{ Path: "example.mod/w", Version: "v1.3.0", }, Vulns: []*osv.Entry{ {ID: "m", Withdrawn: &past, Affected: []osv.Affected{ // should be filtered out {Module: osv.Module{Path: "example.mod/w"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"linux"}, }}, }}, }}, {ID: "n", Affected: []osv.Affected{ {Module: osv.Module{Path: "example.mod/w"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"linux"}, }}, }}, }}, }, }, } want := affectingVulns{ { Module: &packages.Module{ Path: "example.mod/a", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "a", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/a"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "2.0.0"}}}}}}}, {ID: "c", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/a"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOARCH: []string{"arm64", "amd64"}, }}, }, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "1.0.0"}, {Fixed: "1.0.1"}}}}}}}, }, }, { Module: &packages.Module{ Path: "example.mod/b", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "f", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"linux"}, }}, }}}}, {ID: "g", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOARCH: []string{"amd64"}, }}, }, Ranges: []osv.Range{{Type: osv.RangeTypeSemver, Events: []osv.RangeEvent{{Introduced: "0.0.1"}, {Fixed: "2.0.1"}}}}}}}, }, }, { Module: &packages.Module{ Path: "example.mod/c", }, }, { Module: &packages.Module{ Path: "example.mod/d", Version: "v1.2.0", }, Vulns: []*osv.Entry{ {ID: "l", Affected: []osv.Affected{{Module: osv.Module{Path: "example.mod/d"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"linux"}, }}, }}}}, }, }, { Module: &packages.Module{ Path: "example.mod/w", Version: "v1.3.0", }, Vulns: []*osv.Entry{ {ID: "n", Affected: []osv.Affected{ {Module: osv.Module{Path: "example.mod/w"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ GOOS: []string{"linux"}, }}, }}, }}, }, }, } got := affectingVulnerabilities(mv, "linux", "amd64") if diff := cmp.Diff(want, got, cmp.Exporter(func(t reflect.Type) bool { return reflect.TypeOf(affectingVulns{}) == t || reflect.TypeOf(ModVulns{}) == t })); diff != "" { t.Errorf("(-want,+got):\n%s", diff) } } func TestVulnsForPackage(t *testing.T) { aff := affectingVulns{ { Module: &packages.Module{ Path: "example.mod/a", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "a", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", }}, }, }}}, }, }, { Module: &packages.Module{ Path: "example.mod/a/b", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "b", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", }}, }, }}}, }, }, { Module: &packages.Module{ Path: "example.mod/d", Version: "v0.0.1", }, Vulns: []*osv.Entry{ {ID: "d", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/d"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/d", }}, }, }}}, }, }, } got := aff.ForPackage("example.mod/a/b/c") want := []*osv.Entry{ {ID: "b", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", }}, }, }}}, } if diff := cmp.Diff(want, got); diff != "" { t.Errorf("(-want,+got):\n%s", diff) } } func TestVulnsForPackageReplaced(t *testing.T) { aff := affectingVulns{ { Module: &packages.Module{ Path: "example.mod/a", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "a", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", }}, }, }}}, }, }, { Module: &packages.Module{ Path: "example.mod/a/b", Replace: &packages.Module{ Path: "example.mod/b", }, Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "c", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/b/c", }}, }, }}}, }, }, } got := aff.ForPackage("example.mod/a/b/c") want := []*osv.Entry{ {ID: "c", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/b/c", }}, }, }}}, } if diff := cmp.Diff(want, got); diff != "" { t.Errorf("(-want,+got):\n%s", diff) } } func TestVulnsForSymbol(t *testing.T) { aff := affectingVulns{ { Module: &packages.Module{ Path: "example.mod/a", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "a", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", }}, }, }}}, }, }, { Module: &packages.Module{ Path: "example.mod/a/b", Version: "v1.0.0", }, Vulns: []*osv.Entry{ {ID: "b", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", Symbols: []string{"a"}, }}, }, }}}, {ID: "c", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", Symbols: []string{"b"}, }}, }, }}}, }, }, } got := aff.ForSymbol("example.mod/a/b/c", "a") want := []*osv.Entry{ {ID: "b", Affected: []osv.Affected{{ Module: osv.Module{Path: "example.mod/a/b"}, EcosystemSpecific: osv.EcosystemSpecific{ Packages: []osv.Package{{ Path: "example.mod/a/b/c", Symbols: []string{"a"}, }}, }, }}}, } if diff := cmp.Diff(want, got); diff != "" { t.Errorf("(-want,+got):\n%s", diff) } } func TestReceiver(t *testing.T) { tcs := []struct { name string fn *FuncNode want string }{ { name: "empty", fn: &FuncNode{ RecvType: "", Package: &packages.Package{PkgPath: "example.com/a/pkg"}, }, want: "", }, { name: "pointer", fn: &FuncNode{ RecvType: "*example.com/a/pkg.Atype", Package: &packages.Package{PkgPath: "example.com/a/pkg"}, }, want: "*Atype", }, { name: "not pointer", fn: &FuncNode{ RecvType: "example.com/a/pkg.Atype", Package: &packages.Package{PkgPath: "example.com/a/pkg"}, }, want: "Atype", }, { name: "no prefix", fn: &FuncNode{ RecvType: "Atype", Package: &packages.Package{PkgPath: "example.com/a/pkg"}, }, want: "Atype", }, } for _, tc := range tcs { t.Run(tc.name, func(t *testing.T) { got := tc.fn.Receiver() if got != tc.want { t.Errorf("want %s; got %s", tc.want, got) } }) } } vuln-1.0.4/internal/vulncheck/witness.go000066400000000000000000000307141456050377100203360ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "container/list" "fmt" "go/ast" "go/token" "sort" "strconv" "strings" "sync" "unicode" "golang.org/x/tools/go/packages" ) // CallStack is a call stack starting with a client // function or method and ending with a call to a // vulnerable symbol. type CallStack []StackEntry // StackEntry is an element of a call stack. type StackEntry struct { // Function whose frame is on the stack. Function *FuncNode // Call is the call site inducing the next stack frame. // nil when the frame represents the last frame in the stack. Call *CallSite } // sourceCallstacks returns representative call stacks for each // vulnerability in res. The returned call stacks are heuristically // ordered by how seemingly easy is to understand them: shorter // call stacks with less dynamic call sites appear earlier in the // returned slices. // // sourceCallstacks performs a breadth-first search of res.CallGraph // starting at the vulnerable symbol and going up until reaching an entry // function or method in res.CallGraph.Entries. During this search, // each function is visited at most once to avoid potential // exponential explosion. Hence, not all call stacks are analyzed. func sourceCallstacks(res *Result) map[*Vuln]CallStack { var ( wg sync.WaitGroup mu sync.Mutex ) stackPerVuln := make(map[*Vuln]CallStack) for _, vuln := range res.Vulns { vuln := vuln wg.Add(1) go func() { cs := sourceCallstack(vuln, res) mu.Lock() stackPerVuln[vuln] = cs mu.Unlock() wg.Done() }() } wg.Wait() updateInitPositions(stackPerVuln) return stackPerVuln } // sourceCallstack finds a representative call stack for vuln. // This is a shortest unique call stack with the least // number of dynamic call sites. func sourceCallstack(vuln *Vuln, res *Result) CallStack { vulnSink := vuln.CallSink if vulnSink == nil { return nil } entries := make(map[*FuncNode]bool) for _, e := range res.EntryFunctions { entries[e] = true } seen := make(map[*FuncNode]bool) // Do a BFS from the vuln sink to the entry points // and find the representative call stack. This is // the shortest call stack that goes through the // least number of dynamic call sites. We first // collect all candidate call stacks of the shortest // length and then pick the best one accordingly. var candidates []CallStack candDepth := 0 queue := list.New() queue.PushBack(&callChain{f: vulnSink}) // We want to avoid call stacks that go through // other vulnerable symbols of the same package // for the same vulnerability. In other words, // we want unique call stacks. skipSymbols := make(map[*FuncNode]bool) for _, v := range res.Vulns { if v.CallSink != nil && v != vuln && v.OSV == vuln.OSV && v.Package == vuln.Package { skipSymbols[v.CallSink] = true } } for queue.Len() > 0 { front := queue.Front() c := front.Value.(*callChain) queue.Remove(front) f := c.f if seen[f] { continue } seen[f] = true // Pick a single call site for each function in determinstic order. // A single call site is sufficient as we visit a function only once. for _, cs := range callsites(f.CallSites, seen) { nStack := &callChain{f: cs.Parent, call: cs, child: c} if !skipSymbols[cs.Parent] { queue.PushBack(nStack) } if entries[cs.Parent] { ns := nStack.CallStack() if len(candidates) == 0 || len(ns) == candDepth { // The case where we either have not identified // any call stacks or just found one of the same // length as the previous ones. candidates = append(candidates, ns) candDepth = len(ns) } else { // We just found a candidate call stack whose // length is greater than what we previously // found. We can thus safely disregard this // call stack and stop searching since we won't // be able to find any better candidates. queue.Init() // clear the list, effectively exiting the outer loop } } } } // Sort candidate call stacks by their number of dynamic call // sites and return the first one. sort.SliceStable(candidates, func(i int, j int) bool { s1, s2 := candidates[i], candidates[j] if w1, w2 := weight(s1), weight(s2); w1 != w2 { return w1 < w2 } // At this point, the stableness/determinism of // sorting is guaranteed by the determinism of // the underlying call graph and the call stack // search algorithm. return true }) if len(candidates) == 0 { return nil } return candidates[0] } // callsites picks a call site from sites for each non-visited function. // For each such function, the smallest (posLess) call site is chosen. The // returned slice is sorted by caller functions (funcLess). Assumes callee // of each call site is the same. func callsites(sites []*CallSite, visited map[*FuncNode]bool) []*CallSite { minCs := make(map[*FuncNode]*CallSite) for _, cs := range sites { if visited[cs.Parent] { continue } if csLess(cs, minCs[cs.Parent]) { minCs[cs.Parent] = cs } } var fs []*FuncNode for _, cs := range minCs { fs = append(fs, cs.Parent) } sort.SliceStable(fs, func(i, j int) bool { return funcLess(fs[i], fs[j]) }) var css []*CallSite for _, f := range fs { css = append(css, minCs[f]) } return css } // callChain models a chain of function calls. type callChain struct { call *CallSite // nil for entry points f *FuncNode child *callChain } // CallStack converts callChain to CallStack type. func (c *callChain) CallStack() CallStack { if c == nil { return nil } return append(CallStack{StackEntry{Function: c.f, Call: c.call}}, c.child.CallStack()...) } // weight computes an approximate measure of how easy is to understand the call // stack when presented to the client as a witness. The smaller the value, the more // understandable the stack is. Currently defined as the number of unresolved // call sites in the stack. func weight(stack CallStack) int { w := 0 for _, e := range stack { if e.Call != nil && !e.Call.Resolved { w += 1 } } return w } // csLess compares two call sites by their locations and, if needed, // their string representation. func csLess(cs1, cs2 *CallSite) bool { if cs2 == nil { return true } // fast code path if p1, p2 := cs1.Pos, cs2.Pos; p1 != nil && p2 != nil { if posLess(*p1, *p2) { return true } if posLess(*p2, *p1) { return false } // for sanity, should not occur in practice return fmt.Sprintf("%v.%v", cs1.RecvType, cs2.Name) < fmt.Sprintf("%v.%v", cs2.RecvType, cs2.Name) } // code path rarely exercised if cs2.Pos == nil { return true } if cs1.Pos == nil { return false } // should very rarely occur in practice return fmt.Sprintf("%v.%v", cs1.RecvType, cs2.Name) < fmt.Sprintf("%v.%v", cs2.RecvType, cs2.Name) } // posLess compares two positions by their line and column number, // and filename if needed. func posLess(p1, p2 token.Position) bool { if p1.Line < p2.Line { return true } if p2.Line < p1.Line { return false } if p1.Column < p2.Column { return true } if p2.Column < p1.Column { return false } return strings.Compare(p1.Filename, p2.Filename) == -1 } // funcLess compares two function nodes by locations of // corresponding functions and, if needed, their string representation. func funcLess(f1, f2 *FuncNode) bool { if p1, p2 := f1.Pos, f2.Pos; p1 != nil && p2 != nil { if posLess(*p1, *p2) { return true } if posLess(*p2, *p1) { return false } // for sanity, should not occur in practice return f1.String() < f2.String() } if f2.Pos == nil { return true } if f1.Pos == nil { return false } // should happen only for inits return f1.String() < f2.String() } // updateInitPositions populates non-existing positions of init functions // and their respective calls in callStacks (see #51575). func updateInitPositions(callStacks map[*Vuln]CallStack) { for _, cs := range callStacks { for i := range cs { updateInitPosition(&cs[i]) if i != len(cs)-1 { updateInitCallPosition(&cs[i], cs[i+1]) } } } } // updateInitCallPosition updates the position of a call to init in a stack frame, if // one already does not exist: // // P1.init -> P2.init: position of call to P2.init is the position of "import P2" // statement in P1 // // P.init -> P.init#d: P.init is an implicit init. We say it calls the explicit // P.init#d at the place of "package P" statement. func updateInitCallPosition(curr *StackEntry, next StackEntry) { call := curr.Call if !isInit(next.Function) || (call.Pos != nil && call.Pos.IsValid()) { // Skip non-init functions and inits whose call site position is available. return } var pos token.Position if curr.Function.Name == "init" && curr.Function.Package == next.Function.Package { // We have implicit P.init calling P.init#d. Set the call position to // be at "package P" statement position. pos = packageStatementPos(curr.Function.Package) } else { // Choose the beginning of the import statement as the position. pos = importStatementPos(curr.Function.Package, next.Function.Package.PkgPath) } call.Pos = &pos } func importStatementPos(pkg *packages.Package, importPath string) token.Position { var importSpec *ast.ImportSpec spec: for _, f := range pkg.Syntax { for _, impSpec := range f.Imports { // Import spec paths have quotation marks. impSpecPath, err := strconv.Unquote(impSpec.Path.Value) if err != nil { panic(fmt.Sprintf("import specification: package path has no quotation marks: %v", err)) } if impSpecPath == importPath { importSpec = impSpec break spec } } } if importSpec == nil { // for sanity, in case of a wild call graph imprecision return token.Position{} } // Choose the beginning of the import statement as the position. return pkg.Fset.Position(importSpec.Pos()) } func packageStatementPos(pkg *packages.Package) token.Position { if len(pkg.Syntax) == 0 { return token.Position{} } // Choose beginning of the package statement as the position. Pick // the first file since it is as good as any. return pkg.Fset.Position(pkg.Syntax[0].Package) } // updateInitPosition updates the position of P.init function in a stack frame if one // is not available. The new position is the position of the "package P" statement. func updateInitPosition(se *StackEntry) { fun := se.Function if !isInit(fun) || (fun.Pos != nil && fun.Pos.IsValid()) { // Skip non-init functions and inits whose position is available. return } pos := packageStatementPos(fun.Package) fun.Pos = &pos } func isInit(f *FuncNode) bool { // A source init function, or anonymous functions used in inits, will // be named "init#x" by vulncheck (more precisely, ssa), where x is a // positive integer. Implicit inits are named simply "init". return f.Name == "init" || strings.HasPrefix(f.Name, "init#") } // binaryCallstacks computes representative call stacks for binary results. func binaryCallstacks(vr *Result) map[*Vuln]CallStack { callstacks := map[*Vuln]CallStack{} for _, vv := range uniqueVulns(vr.Vulns) { f := &FuncNode{Package: vv.Package, Name: vv.Symbol} parts := strings.Split(vv.Symbol, ".") if len(parts) != 1 { f.RecvType = parts[0] f.Name = parts[1] } callstacks[vv] = CallStack{StackEntry{Function: f}} } return callstacks } // uniqueVulns does for binary mode what sourceCallstacks does for source mode. // It tries not to report redundant symbols. Since there are no call stacks in // binary mode, the following approximate approach is used. Do not report unexported // symbols for a triple if there are some exported symbols. // Otherwise, report all unexported symbols to avoid not reporting anything. func uniqueVulns(vulns []*Vuln) []*Vuln { type key struct { id string pkg string mod string } hasExported := make(map[key]bool) for _, v := range vulns { if isExported(v.Symbol) { k := key{id: v.OSV.ID, pkg: v.Package.PkgPath, mod: v.Package.Module.Path} hasExported[k] = true } } var uniques []*Vuln for _, v := range vulns { k := key{id: v.OSV.ID, pkg: v.Package.PkgPath, mod: v.Package.Module.Path} if isExported(v.Symbol) || !hasExported[k] { uniques = append(uniques, v) } } return uniques } // isExported checks if the symbol is exported. Assumes that the // symbol is of the form "identifier" or "identifier1.identifier2". func isExported(symbol string) bool { parts := strings.Split(symbol, ".") if len(parts) == 1 { return unicode.IsUpper(rune(symbol[0])) } return unicode.IsUpper(rune(parts[1][0])) } vuln-1.0.4/internal/vulncheck/witness_test.go000066400000000000000000000166541456050377100214040ustar00rootroot00000000000000// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package vulncheck import ( "context" "fmt" "path" "path/filepath" "reflect" "strings" "testing" "github.com/google/go-cmp/cmp" "golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages/packagestest" "golang.org/x/vuln/internal/client" "golang.org/x/vuln/internal/govulncheck" "golang.org/x/vuln/internal/osv" "golang.org/x/vuln/internal/test" ) // stacksToString converts map *Vuln:stack to Vuln.Symbol:"f1->...->fN" // string representation. func stacksToString(stacks map[*Vuln]CallStack) map[string]string { m := make(map[string]string) for v, st := range stacks { var stStr []string for _, call := range st { stStr = append(stStr, call.Function.Name) } m[v.Symbol] = strings.Join(stStr, "->") } return m } func TestSourceCallstacks(t *testing.T) { // Call graph structure for the test program // entry1 entry2 // | | // interm1 | // | \ / // | interm2(interface) // | / | // vuln1 vuln2 o := &osv.Entry{ID: "o"} e1 := &FuncNode{Name: "entry1"} e2 := &FuncNode{Name: "entry2"} i1 := &FuncNode{Name: "interm1", CallSites: []*CallSite{{Parent: e1, Resolved: true}}} i2 := &FuncNode{Name: "interm2", CallSites: []*CallSite{{Parent: e2, Resolved: true}, {Parent: i1, Resolved: true}}} v1 := &FuncNode{Name: "vuln1", CallSites: []*CallSite{{Parent: i1, Resolved: true}, {Parent: i2, Resolved: false}}} v2 := &FuncNode{Name: "vuln2", CallSites: []*CallSite{{Parent: i2, Resolved: false}}} vp := &packages.Package{PkgPath: "v1", Module: &packages.Module{Path: "m1"}} vuln1 := &Vuln{CallSink: v1, Package: vp, OSV: o, Symbol: "vuln1"} vuln2 := &Vuln{CallSink: v2, Package: vp, OSV: o, Symbol: "vuln2"} res := &Result{ EntryFunctions: []*FuncNode{e1, e2}, Vulns: []*Vuln{vuln1, vuln2}, } want := map[string]string{ "vuln1": "entry1->interm1->vuln1", "vuln2": "entry2->interm2->vuln2", } stacks := sourceCallstacks(res) if got := stacksToString(stacks); !reflect.DeepEqual(want, got) { t.Errorf("want %v; got %v", want, got) } } func TestSourceUniqueCallStack(t *testing.T) { // Call graph structure for the test program // entry1 entry2 // | | // vuln1 interm1 // | | // | interm2 // | / // vuln2 o := &osv.Entry{ID: "o"} e1 := &FuncNode{Name: "entry1"} e2 := &FuncNode{Name: "entry2"} i1 := &FuncNode{Name: "interm1", CallSites: []*CallSite{{Parent: e2}}} i2 := &FuncNode{Name: "interm2", CallSites: []*CallSite{{Parent: i1}}} v1 := &FuncNode{Name: "vuln1", CallSites: []*CallSite{{Parent: e1}}} v2 := &FuncNode{Name: "vuln2", CallSites: []*CallSite{{Parent: v1}, {Parent: i2}}} vp := &packages.Package{PkgPath: "v1", Module: &packages.Module{Path: "m1"}} vuln1 := &Vuln{CallSink: v1, Package: vp, OSV: o, Symbol: "vuln1"} vuln2 := &Vuln{CallSink: v2, Package: vp, OSV: o, Symbol: "vuln2"} res := &Result{ EntryFunctions: []*FuncNode{e1, e2}, Vulns: []*Vuln{vuln1, vuln2}, } want := map[string]string{ "vuln1": "entry1->vuln1", "vuln2": "entry2->interm1->interm2->vuln2", } stacks := sourceCallstacks(res) if got := stacksToString(stacks); !reflect.DeepEqual(want, got) { t.Errorf("want %v; got %v", want, got) } } // TestInits checks for correct positions of init functions // and their respective calls (see #51575). func TestInits(t *testing.T) { testClient, err := client.NewInMemoryClient( []*osv.Entry{ { ID: "A", Affected: []osv.Affected{{Module: osv.Module{Path: "golang.org/amod"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver}}, EcosystemSpecific: osv.EcosystemSpecific{Packages: []osv.Package{{ Path: "golang.org/amod/avuln", Symbols: []string{"A"}}, }}, }}, }, { ID: "C", Affected: []osv.Affected{{Module: osv.Module{Path: "golang.org/cmod"}, Ranges: []osv.Range{{Type: osv.RangeTypeSemver}}, EcosystemSpecific: osv.EcosystemSpecific{Packages: []osv.Package{{ Path: "golang.org/cmod/cvuln", Symbols: []string{"C"}}, }}, }}, }, }) if err != nil { t.Fatal(err) } e := packagestest.Export(t, packagestest.Modules, []packagestest.Module{ { Name: "golang.org/entry", Files: map[string]interface{}{ "x/x.go": ` package x import ( _ "golang.org/amod/avuln" _ "golang.org/bmod/b" ) `, }, }, { Name: "golang.org/amod@v0.5.0", Files: map[string]interface{}{"avuln/avuln.go": ` package avuln func init() { A() } func A() {} `}, }, { Name: "golang.org/bmod@v0.5.0", Files: map[string]interface{}{"b/b.go": ` package b import _ "golang.org/cmod/cvuln" `}, }, { Name: "golang.org/cmod@v0.5.0", Files: map[string]interface{}{"cvuln/cvuln.go": ` package cvuln var x int = C() func C() int { return 0 } `}, }, }) defer e.Cleanup() // Load x as entry package. graph := NewPackageGraph("go1.18") pkgs, mods, err := graph.LoadPackagesAndMods(e.Config, nil, []string{path.Join(e.Temp(), "entry/x")}) if err != nil { t.Fatal(err) } if len(pkgs) != 1 { t.Fatal("failed to load x test package") } cfg := &govulncheck.Config{ScanLevel: "symbol"} result, err := source(context.Background(), test.NewMockHandler(), pkgs, mods, cfg, testClient, graph) if err != nil { t.Fatal(err) } cs := sourceCallstacks(result) want := map[string][]string{ "A": { // Entry init's position is the package statement. // It calls avuln.init at avuln import statement. "N:golang.org/entry/x.init F:x.go:2:4 C:x.go:5:5", // implicit avuln.init is calls explicit init at the avuln // package statement. "N:golang.org/amod/avuln.init F:avuln.go:2:4 C:avuln.go:2:4", "N:golang.org/amod/avuln.init#1 F:avuln.go:4:9 C:avuln.go:5:6", "N:golang.org/amod/avuln.A F:avuln.go:8:9 C:", }, "C": { "N:golang.org/entry/x.init F:x.go:2:4 C:x.go:6:5", "N:golang.org/bmod/b.init F:b.go:2:4 C:b.go:4:11", "N:golang.org/cmod/cvuln.init F:cvuln.go:2:4 C:cvuln.go:4:17", "N:golang.org/cmod/cvuln.C F:cvuln.go:6:9 C:", }, } if diff := cmp.Diff(want, fullStacksToString(cs)); diff != "" { t.Errorf("modules mismatch (-want, +got):\n%s", diff) } } // fullStacksToString is like stacksToString but the stack stringification // is a slice of strings, each containing detailed information on each on // the corresponding frame. func fullStacksToString(callStacks map[*Vuln]CallStack) map[string][]string { m := make(map[string][]string) for v, cs := range callStacks { var scs []string for _, se := range cs { fPos := se.Function.Pos fp := fmt.Sprintf("%s:%d:%d", filepath.Base(fPos.Filename), fPos.Line, fPos.Column) var cp string if se.Call != nil && se.Call.Pos.IsValid() { cPos := se.Call.Pos cp = fmt.Sprintf("%s:%d:%d", filepath.Base(cPos.Filename), cPos.Line, cPos.Column) } sse := fmt.Sprintf("N:%s.%s\tF:%v\tC:%v", se.Function.Package.PkgPath, se.Function.Name, fp, cp) scs = append(scs, sse) } m[v.OSV.ID] = scs } return m } func TestIsExported(t *testing.T) { for _, tc := range []struct { symbol string want bool }{ {"foo", false}, {"Foo", true}, {"x.foo", false}, {"X.foo", false}, {"x.Foo", true}, {"X.Foo", true}, } { tc := tc t.Run(tc.symbol, func(t *testing.T) { if got := isExported(tc.symbol); tc.want != got { t.Errorf("want %t; got %t", tc.want, got) } }) } } vuln-1.0.4/internal/web/000077500000000000000000000000001456050377100151015ustar00rootroot00000000000000vuln-1.0.4/internal/web/url.go000066400000000000000000000076001456050377100162350ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Code copied from // https://github.com/golang/go/blob/2ebe77a2fda1ee9ff6fd9a3e08933ad1ebaea039/src/cmd/go/internal/web/url.go // TODO(https://go.dev/issue/32456): if accepted, use the new API. package web import ( "errors" "net/url" "path/filepath" "runtime" "strings" ) var errNotAbsolute = errors.New("path is not absolute") // URLToFilePath converts a file-scheme url to a file path. func URLToFilePath(u *url.URL) (string, error) { if u.Scheme != "file" { return "", errors.New("non-file URL") } checkAbs := func(path string) (string, error) { if !filepath.IsAbs(path) { return "", errNotAbsolute } return path, nil } if u.Path == "" { if u.Host != "" || u.Opaque == "" { return "", errors.New("file URL missing path") } return checkAbs(filepath.FromSlash(u.Opaque)) } path, err := convertFileURLPath(u.Host, u.Path) if err != nil { return path, err } return checkAbs(path) } // URLFromFilePath converts the given absolute path to a URL. func URLFromFilePath(path string) (*url.URL, error) { if !filepath.IsAbs(path) { return nil, errNotAbsolute } // If path has a Windows volume name, convert the volume to a host and prefix // per https://blogs.msdn.microsoft.com/ie/2006/12/06/file-uris-in-windows/. if vol := filepath.VolumeName(path); vol != "" { if strings.HasPrefix(vol, `\\`) { path = filepath.ToSlash(path[2:]) i := strings.IndexByte(path, '/') if i < 0 { // A degenerate case. // \\host.example.com (without a share name) // becomes // file://host.example.com/ return &url.URL{ Scheme: "file", Host: path, Path: "/", }, nil } // \\host.example.com\Share\path\to\file // becomes // file://host.example.com/Share/path/to/file return &url.URL{ Scheme: "file", Host: path[:i], Path: filepath.ToSlash(path[i:]), }, nil } // C:\path\to\file // becomes // file:///C:/path/to/file return &url.URL{ Scheme: "file", Path: "/" + filepath.ToSlash(path), }, nil } // /path/to/file // becomes // file:///path/to/file return &url.URL{ Scheme: "file", Path: filepath.ToSlash(path), }, nil } func convertFileURLPath(host, path string) (string, error) { if runtime.GOOS == "windows" { return convertFileURLPathWindows(host, path) } switch host { case "", "localhost": default: return "", errors.New("file URL specifies non-local host") } return filepath.FromSlash(path), nil } func convertFileURLPathWindows(host, path string) (string, error) { if len(path) == 0 || path[0] != '/' { return "", errNotAbsolute } path = filepath.FromSlash(path) // We interpret Windows file URLs per the description in // https://blogs.msdn.microsoft.com/ie/2006/12/06/file-uris-in-windows/. // The host part of a file URL (if any) is the UNC volume name, // but RFC 8089 reserves the authority "localhost" for the local machine. if host != "" && host != "localhost" { // A common "legacy" format omits the leading slash before a drive letter, // encoding the drive letter as the host instead of part of the path. // (See https://blogs.msdn.microsoft.com/freeassociations/2005/05/19/the-bizarre-and-unhappy-story-of-file-urls/.) // We do not support that format, but we should at least emit a more // helpful error message for it. if filepath.VolumeName(host) != "" { return "", errors.New("file URL encodes volume in host field: too few slashes?") } return `\\` + host + path, nil } // If host is empty, path must contain an initial slash followed by a // drive letter and path. Remove the slash and verify that the path is valid. if vol := filepath.VolumeName(path[1:]); vol == "" || strings.HasPrefix(vol, `\\`) { return "", errors.New("file URL missing drive letter") } return path[1:], nil } vuln-1.0.4/internal/web/url_test.go000066400000000000000000000123651456050377100173000ustar00rootroot00000000000000// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package web import ( "net/url" "runtime" "testing" ) func TestURLToFilePath(t *testing.T) { for _, tc := range urlTests() { if tc.url == "" { continue } tc := tc t.Run(tc.url, func(t *testing.T) { u, err := url.Parse(tc.url) if err != nil { t.Fatalf("url.Parse(%q): %v", tc.url, err) } path, err := URLToFilePath(u) if err != nil { if err.Error() == tc.wantErr { return } if tc.wantErr == "" { t.Fatalf("urlToFilePath(%v): %v; want ", u, err) } else { t.Fatalf("urlToFilePath(%v): %v; want %s", u, err, tc.wantErr) } } if path != tc.filePath || tc.wantErr != "" { t.Fatalf("urlToFilePath(%v) = %q, ; want %q, %s", u, path, tc.filePath, tc.wantErr) } }) } } func TestURLFromFilePath(t *testing.T) { for _, tc := range urlTests() { if tc.filePath == "" { continue } tc := tc t.Run(tc.filePath, func(t *testing.T) { u, err := URLFromFilePath(tc.filePath) if err != nil { if err.Error() == tc.wantErr { return } if tc.wantErr == "" { t.Fatalf("urlFromFilePath(%v): %v; want ", tc.filePath, err) } else { t.Fatalf("urlFromFilePath(%v): %v; want %s", tc.filePath, err, tc.wantErr) } } if tc.wantErr != "" { t.Fatalf("urlFromFilePath(%v) = ; want error: %s", tc.filePath, tc.wantErr) } wantURL := tc.url if tc.canonicalURL != "" { wantURL = tc.canonicalURL } if u.String() != wantURL { t.Errorf("urlFromFilePath(%v) = %v; want %s", tc.filePath, u, wantURL) } }) } } func urlTests() []urlTest { if runtime.GOOS == "windows" { return urlTestsWindows } return urlTestsOthers } type urlTest struct { url string filePath string canonicalURL string // If empty, assume equal to url. wantErr string } var urlTestsOthers = []urlTest{ // Examples from RFC 8089: { url: `file:///path/to/file`, filePath: `/path/to/file`, }, { url: `file:/path/to/file`, filePath: `/path/to/file`, canonicalURL: `file:///path/to/file`, }, { url: `file://localhost/path/to/file`, filePath: `/path/to/file`, canonicalURL: `file:///path/to/file`, }, // We reject non-local files. { url: `file://host.example.com/path/to/file`, wantErr: "file URL specifies non-local host", }, } var urlTestsWindows = []urlTest{ // Examples from https://blogs.msdn.microsoft.com/ie/2006/12/06/file-uris-in-windows/: { url: `file://laptop/My%20Documents/FileSchemeURIs.doc`, filePath: `\\laptop\My Documents\FileSchemeURIs.doc`, }, { url: `file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc`, filePath: `C:\Documents and Settings\davris\FileSchemeURIs.doc`, }, { url: `file:///D:/Program%20Files/Viewer/startup.htm`, filePath: `D:\Program Files\Viewer\startup.htm`, }, { url: `file:///C:/Program%20Files/Music/Web%20Sys/main.html?REQUEST=RADIO`, filePath: `C:\Program Files\Music\Web Sys\main.html`, canonicalURL: `file:///C:/Program%20Files/Music/Web%20Sys/main.html`, }, { url: `file://applib/products/a-b/abc_9/4148.920a/media/start.swf`, filePath: `\\applib\products\a-b\abc_9\4148.920a\media\start.swf`, }, { url: `file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf`, wantErr: "file URL missing drive letter", }, { url: `C:\Program Files\Music\Web Sys\main.html?REQUEST=RADIO`, wantErr: "non-file URL", }, // The example "file://D:\Program Files\Viewer\startup.htm" errors out in // url.Parse, so we substitute a slash-based path for testing instead. { url: `file://D:/Program Files/Viewer/startup.htm`, wantErr: "file URL encodes volume in host field: too few slashes?", }, // The blog post discourages the use of non-ASCII characters because they // depend on the user's current codepage. However, when we are working with Go // strings we assume UTF-8 encoding, and our url package refuses to encode // URLs to non-ASCII strings. { url: `file:///C:/exampleㄓ.txt`, filePath: `C:\exampleㄓ.txt`, canonicalURL: `file:///C:/example%E3%84%93.txt`, }, { url: `file:///C:/example%E3%84%93.txt`, filePath: `C:\exampleㄓ.txt`, }, // Examples from RFC 8089: // We allow the drive-letter variation from section E.2, because it is // simpler to support than not to. However, we do not generate the shorter // form in the reverse direction. { url: `file:c:/path/to/file`, filePath: `c:\path\to\file`, canonicalURL: `file:///c:/path/to/file`, }, // We encode the UNC share name as the authority following section E.3.1, // because that is what the Microsoft blog post explicitly recommends. { url: `file://host.example.com/Share/path/to/file.txt`, filePath: `\\host.example.com\Share\path\to\file.txt`, }, // We decline the four- and five-slash variations from section E.3.2. // The paths in these URLs would change meaning under path.Clean. { url: `file:////host.example.com/path/to/file`, wantErr: "file URL missing drive letter", }, { url: `file://///host.example.com/path/to/file`, wantErr: "file URL missing drive letter", }, } vuln-1.0.4/scan/000077500000000000000000000000001456050377100134345ustar00rootroot00000000000000vuln-1.0.4/scan/scan.go000066400000000000000000000047731456050377100147220ustar00rootroot00000000000000// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /* Package scan provides functionality for running govulncheck. See [cmd/govulncheck/main.go] as a usage example. [cmd/govulncheck/main.go]: https://go.googlesource.com/vuln/+/master/cmd/govulncheck/main.go */ package scan import ( "context" "errors" "io" "os" "golang.org/x/vuln/internal/scan" ) // Cmd represents an external govulncheck command being prepared or run, // similar to exec.Cmd. type Cmd struct { // Stdin specifies the standard input. If provided, it is expected to be // the output of govulncheck -json. Stdin io.Reader // Stdout specifies the standard output. If nil, Run connects os.Stdout. Stdout io.Writer // Stderr specifies the standard error. If nil, Run connects os.Stderr. Stderr io.Writer // Env is the environment to use. // If Env is nil, the current environment is used. // As in os/exec's Cmd, only the last value in the slice for // each environment key is used. To specify the setting of only // a few variables, append to the current environment, as in: // // opt.Env = append(os.Environ(), "GOOS=plan9", "GOARCH=386") // Env []string ctx context.Context args []string done chan struct{} err error } // Command returns the Cmd struct to execute govulncheck with the given // arguments. func Command(ctx context.Context, arg ...string) *Cmd { return &Cmd{ ctx: ctx, args: arg, } } // Start starts the specified command but does not wait for it to complete. // // After a successful call to Start the Wait method must be called in order to // release associated system resources. func (c *Cmd) Start() error { if c.done != nil { return errors.New("vuln: already started") } if c.Stdin == nil { c.Stdin = os.Stdin } if c.Stdout == nil { c.Stdout = os.Stdout } if c.Stderr == nil { c.Stderr = os.Stderr } if c.Env == nil { c.Env = os.Environ() } c.done = make(chan struct{}) go func() { defer close(c.done) c.err = c.scan() }() return nil } // Wait waits for the command to exit. The command must have been started by // Start. // // Wait releases any resources associated with the Cmd. func (c *Cmd) Wait() error { if c.done == nil { return errors.New("vuln: start must be called before wait") } <-c.done return c.err } func (c *Cmd) scan() error { if err := c.ctx.Err(); err != nil { return err } return scan.RunGovulncheck(c.ctx, c.Env, c.Stdin, c.Stdout, c.Stderr, c.args) }