pax_global_header00006660000000000000000000000064146621561040014517gustar00rootroot0000000000000052 comment=67243bb6fbf6d49eddb6ab644e8e2c1395f9cb00 glow-2.0.0/000077500000000000000000000000001466215610400124665ustar00rootroot00000000000000glow-2.0.0/.github/000077500000000000000000000000001466215610400140265ustar00rootroot00000000000000glow-2.0.0/.github/CODEOWNERS000066400000000000000000000000321466215610400154140ustar00rootroot00000000000000* @charmbracelet/everyone glow-2.0.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001466215610400162115ustar00rootroot00000000000000glow-2.0.0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000015541466215610400207100ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **Setup** Please complete the following information along with version numbers, if applicable. - OS [e.g. Ubuntu, macOS] - Shell [e.g. zsh, fish] - Terminal Emulator [e.g. kitty, iterm] - Terminal Multiplexer [e.g. tmux] - Locale [e.g. en_US.UTF-8, zh_CN.UTF-8, etc.] **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Source Code** Please include source code if needed to reproduce the behavior. **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** Add screenshots to help explain your problem. **Additional context** Add any other context about the problem here. glow-2.0.0/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000001701466215610400201770ustar00rootroot00000000000000blank_issues_enabled: true contact_links: - name: Discord url: https://charm.sh/discord about: Chat on our Discord. glow-2.0.0/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011341466215610400217350ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: enhancement assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. glow-2.0.0/.github/dependabot.yml000066400000000000000000000006251466215610400166610ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "gomod" directory: "/" schedule: interval: "daily" labels: - "dependencies" commit-message: prefix: "chore" include: "scope" - package-ecosystem: "github-actions" directory: "/" schedule: interval: "daily" labels: - "dependencies" commit-message: prefix: "chore" include: "scope" glow-2.0.0/.github/workflows/000077500000000000000000000000001466215610400160635ustar00rootroot00000000000000glow-2.0.0/.github/workflows/build.yml000066400000000000000000000010711466215610400177040ustar00rootroot00000000000000name: build on: [push, pull_request] jobs: build: uses: charmbracelet/meta/.github/workflows/build.yml@main snapshot: uses: charmbracelet/meta/.github/workflows/snapshot.yml@main secrets: goreleaser_key: ${{ secrets.GORELEASER_KEY }} govulncheck: uses: charmbracelet/meta/.github/workflows/govulncheck.yml@main with: go-version: stable semgrep: uses: charmbracelet/meta/.github/workflows/semgrep.yml@main ruleguard: uses: charmbracelet/meta/.github/workflows/ruleguard.yml@main with: go-version: stable glow-2.0.0/.github/workflows/coverage.yml000066400000000000000000000011211466215610400203740ustar00rootroot00000000000000name: coverage on: [push, pull_request] jobs: coverage: runs-on: ubuntu-latest env: GO111MODULE: "on" steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Go uses: actions/setup-go@v5 with: go-version: stable - name: Coverage env: COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | go test -race -covermode atomic -coverprofile=profile.cov ./... go install github.com/mattn/goveralls@latest goveralls -coverprofile=profile.cov -service=github glow-2.0.0/.github/workflows/goreleaser.yml000066400000000000000000000013071466215610400207370ustar00rootroot00000000000000# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json name: goreleaser on: push: tags: - v*.*.* concurrency: group: goreleaser cancel-in-progress: true jobs: goreleaser: uses: charmbracelet/meta/.github/workflows/goreleaser.yml@main secrets: docker_username: ${{ secrets.DOCKERHUB_USERNAME }} docker_token: ${{ secrets.DOCKERHUB_TOKEN }} gh_pat: ${{ secrets.PERSONAL_ACCESS_TOKEN }} goreleaser_key: ${{ secrets.GORELEASER_KEY }} fury_token: ${{ secrets.FURY_TOKEN }} nfpm_gpg_key: ${{ secrets.NFPM_GPG_KEY }} nfpm_passphrase: ${{ secrets.NFPM_PASSPHRASE }} snapcraft_token: ${{ secrets.SNAPCRAFT_TOKEN }} glow-2.0.0/.github/workflows/lint.yml000066400000000000000000000007141466215610400175560ustar00rootroot00000000000000name: lint on: push: pull_request: jobs: golangci: name: lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: golangci-lint uses: golangci/golangci-lint-action@v6 with: # Optional: golangci-lint command line arguments. args: --issues-exit-code=0 # Optional: show only new issues if it's a pull request. The default value is `false`. only-new-issues: true glow-2.0.0/.gitignore000066400000000000000000000000501466215610400144510ustar00rootroot00000000000000glow dist/ .envrc completions/ manpages/glow-2.0.0/.golangci.yml000066400000000000000000000007321466215610400150540ustar00rootroot00000000000000run: tests: false issues: include: - EXC0001 - EXC0005 - EXC0011 - EXC0012 - EXC0013 max-issues-per-linter: 0 max-same-issues: 0 linters: enable: - bodyclose - dupl - exportloopref - goconst - godot - godox - gofumpt - goimports - goprintffuncname - gosec # - ifshort - misspell - prealloc - revive - rowserrcheck - sqlclosecheck - unconvert - unparam - whitespace glow-2.0.0/.goreleaser.yml000066400000000000000000000007111466215610400154160ustar00rootroot00000000000000# yaml-language-server: $schema=https://goreleaser.com/static/schema-pro.json version: 2 includes: - from_url: url: charmbracelet/meta/main/goreleaser-glow.yaml variables: description: "Render markdown on the CLI, with pizzazz!" github_url: "https://github.com/charmbracelet/soft-serve" maintainer: "Christian Muehlhaeuser " brew_commit_author_name: "Christian Muehlhaeuser" brew_commit_author_email: "muesli@charm.sh" glow-2.0.0/Dockerfile000066400000000000000000000001411466215610400144540ustar00rootroot00000000000000FROM gcr.io/distroless/static COPY glow /usr/local/bin/glow ENTRYPOINT [ "/usr/local/bin/glow" ] glow-2.0.0/LICENSE000066400000000000000000000020701466215610400134720ustar00rootroot00000000000000MIT License Copyright (c) 2019-2024 Charmbracelet, Inc Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. glow-2.0.0/Makefile000066400000000000000000000003121466215610400141220ustar00rootroot00000000000000# This Makefile is just for development purposes .PHONY: default clean glow run log default: glow clean: rm -f ./glow glow: go build run: clean glow ./glow log: tail -f ~/.cache/glow/glow.log glow-2.0.0/README.md000066400000000000000000000127101466215610400137460ustar00rootroot00000000000000# Glow Render markdown on the CLI, with _pizzazz_!

Glow Logo Latest Release GoDoc Build Status Go ReportCard

Glow UI Demo

## What is it? Glow is a terminal based markdown reader designed from the ground up to bring out the beauty—and power—of the CLI. Use it to discover markdown files, read documentation directly on the command line. Glow will find local markdown files in subdirectories or a local Git repository. ## Installation ### Package Manager ```bash # macOS or Linux brew install glow # macOS (with MacPorts) sudo port install glow # Arch Linux (btw) pacman -S glow # Void Linux xbps-install -S glow # Nix shell nix-shell -p glow --command glow # FreeBSD pkg install glow # Solus eopkg install glow # Windows (with Chocolatey, Scoop, or Winget) choco install glow scoop install glow winget install charmbracelet.glow # Android (with termux) pkg install glow # Debian/Ubuntu sudo mkdir -p /etc/apt/keyrings curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list sudo apt update && sudo apt install glow # Fedora/RHEL echo '[charm] name=Charm baseurl=https://repo.charm.sh/yum/ enabled=1 gpgcheck=1 gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repo sudo yum install glow ``` Or download a binary from the [releases][releases] page. MacOS, Linux, Windows, FreeBSD and OpenBSD binaries are available, as well as Debian, RPM, and Alpine packages. ARM builds are also available for macOS, Linux, FreeBSD and OpenBSD. ### Go Or just install it with `go`: ```bash go install github.com/charmbracelet/glow@latest ``` ### Build (requires Go 1.21+) ```bash git clone https://github.com/charmbracelet/glow.git cd glow go build ``` [releases]: https://github.com/charmbracelet/glow/releases ## The TUI Simply run `glow` without arguments to start the textual user interface and browse local. Glow will find local markdown files in the current directory and below or, if you’re in a Git repository, Glow will search the repo. Markdown files can be read with Glow's high-performance pager. Most of the keystrokes you know from `less` are the same, but you can press `?` to list the hotkeys. ## The CLI In addition to a TUI, Glow has a CLI for working with Markdown. To format a document use a markdown source as the primary argument: ```bash # Read from file glow README.md # Read from stdin echo "[Glow](https://github.com/charmbracelet/glow)" | glow - # Fetch README from GitHub / GitLab glow github.com/charmbracelet/glow # Fetch markdown from HTTP glow https://host.tld/file.md ``` ### Word Wrapping The `-w` flag lets you set a maximum width at which the output will be wrapped: ```bash glow -w 60 ``` ### Paging CLI output can be displayed in your preferred pager with the `-p` flag. This defaults to the ANSI-aware `less -r` if `$PAGER` is not explicitly set. ### Styles You can choose a style with the `-s` flag. When no flag is provided `glow` tries to detect your terminal's current background color and automatically picks either the `dark` or the `light` style for you. ```bash glow -s [dark|light] ``` Alternatively you can also supply a custom JSON stylesheet: ```bash glow -s mystyle.json ``` For additional usage details see: ```bash glow --help ``` Check out the [Glamour Style Section](https://github.com/charmbracelet/glamour/blob/master/styles/gallery/README.md) to find more styles. Or [make your own](https://github.com/charmbracelet/glamour/tree/master/styles)! ## The Config File If you find yourself supplying the same flags to `glow` all the time, it's probably a good idea to create a config file. Run `glow config`, which will open it in your favorite $EDITOR. Alternatively you can manually put a file named `glow.yml` in the default config path of you platform. If you're not sure where that is, please refer to `glow --help`. Here's an example config: ```yaml # style name or JSON path (default "auto") style: "light" # mouse wheel support (TUI-mode only) mouse: true # use pager to display markdown pager: true # at which column should we word wrap? width: 80 ``` ## Feedback We’d love to hear your thoughts on this project. Feel free to drop us a note! - [Twitter](https://twitter.com/charmcli) - [The Fediverse](https://mastodon.social/@charmcli) - [Discord](https://charm.sh/chat) ## License [MIT](https://github.com/charmbracelet/glow/raw/master/LICENSE) --- Part of [Charm](https://charm.sh). The Charm logo Charm热爱开源 • Charm loves open source glow-2.0.0/config_cmd.go000066400000000000000000000040721466215610400151100ustar00rootroot00000000000000package main import ( "errors" "fmt" "io/fs" "os" "path" "path/filepath" "github.com/charmbracelet/x/editor" "github.com/spf13/cobra" "github.com/spf13/viper" ) const defaultConfig = `# style name or JSON path (default "auto") style: "auto" # mouse support (TUI-mode only) mouse: false # use pager to display markdown pager: false # word-wrap at width width: 80 ` var configCmd = &cobra.Command{ Use: "config", Hidden: false, Short: "Edit the glow config file", Long: paragraph(fmt.Sprintf("\n%s the glow config file. We’ll use EDITOR to determine which editor to use. If the config file doesn't exist, it will be created.", keyword("Edit"))), Example: paragraph("glow config\nglow config --config path/to/config.yml"), Args: cobra.NoArgs, RunE: func(*cobra.Command, []string) error { if err := ensureConfigFile(); err != nil { return err } c, err := editor.Cmd("Glow", configFile) if err != nil { return err } c.Stdin = os.Stdin c.Stdout = os.Stdout c.Stderr = os.Stderr if err := c.Run(); err != nil { return err } fmt.Println("Wrote config file to:", configFile) return nil }, } func ensureConfigFile() error { if configFile == "" { configFile = viper.GetViper().ConfigFileUsed() if err := os.MkdirAll(filepath.Dir(configFile), 0o755); err != nil { return fmt.Errorf("could not write configuration file: %w", err) } } if ext := path.Ext(configFile); ext != ".yaml" && ext != ".yml" { return fmt.Errorf("'%s' is not a supported configuration type: use '%s' or '%s'", ext, ".yaml", ".yml") } if _, err := os.Stat(configFile); errors.Is(err, fs.ErrNotExist) { // File doesn't exist yet, create all necessary directories and // write the default config file if err := os.MkdirAll(filepath.Dir(configFile), 0o700); err != nil { return err } f, err := os.Create(configFile) if err != nil { return err } defer func() { _ = f.Close() }() if _, err := f.WriteString(defaultConfig); err != nil { return err } } else if err != nil { // some other error occurred return err } return nil } glow-2.0.0/console_windows.go000066400000000000000000000007441466215610400162360ustar00rootroot00000000000000// +build windows package main import ( "os" "golang.org/x/sys/windows" ) // enableAnsiColors enables support for ANSI color sequences in Windows // default console. Note that this only works with Windows 10. func enableAnsiColors() { stdout := windows.Handle(os.Stdout.Fd()) var originalMode uint32 windows.GetConsoleMode(stdout, &originalMode) windows.SetConsoleMode(stdout, originalMode|windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING) } func init() { enableAnsiColors() } glow-2.0.0/example.png000066400000000000000000017463071466215610400146510ustar00rootroot00000000000000PNG  IHDR qy̎IDATxkmU7knݖZIF-z)b=yT%" T9@jp%eN|  C0&() Kz?@-k{sG=~sou>>g;ƜcfȜ8P[ pK@n (-p%ԡ oK7_|39x_Ǐ?~Ǐ?~og?<p9kS[<76|{7w6cǏ?~Ǐ?~$9⎵KN\ 1c<~&jow瑥pކ4Ǐ?~Ǐ?~T~X8@H?q6isAjs&n?\hǏ?~Ǐ?~ipBhu3:`6H>(Y9<΂IǏ?~Ǐ?~?jp[B]PWx>﫳5y $ ?~Ǐ?~Ǐ?~ODKu")؋;Ke UiO/n:-8^Ï?~Ǐ?~Ǐ?o31X+.H̲ߎA&~Q?~Ǐ?~Ǐ?~J~sF@~7~d@^9y-ǘcJ0YǏ?~Ǐ?~Ǐk8 Vu.X. }@g~x$$~Ǐ?~Ǐ?~ߎ~jJ@^5r>0nY$ث@v sN);wLsA8C?<>Ǐ?~Ǐ?~ǿ;(P{ ucAYٍ5|9Fop-GJ=bE?~Ǐ?~Ǐ]_In;n~ 8@t9h3޷-Bn ffiYyE*̓_׌??FzGCƏ?~Ǐ?~Ǐ;~.;xlj(\%~vc 5`NWT'fE>2Ǐ?~Ǐ?~xʿP[oѽtFYل&Eh={1WZ)O++}tǏ?~Ǐ?~=IVv'w#yYW  -p AmcAmw?O-ʊ6q$:&-~Ǐ?~Ǐ?~t͞`?q BT7/MI^Z X35&Z!xٻcac߻:~b}ܹۂYc;s?΍Y^/Ǐ?~Ǐ?~ j/otuP  p{(KAT)|6/2s\@ {yNI:f:7d䎩33??Ǐ?~Ǐ?~ 7ڇTh)Wp$e k0#0I ANcHk"ANҟf*6g(2vw;O1~Ǐ?~Ǐ?~oW V8G?>ciM' 0jn֠$,SԜJko IPy ?~Ǐ?~Ǐ?r'].PVNҦ?s|Y~\Z7nKkS6A7z۟h{i U;>\=s:&3gǏ?~Ǐ?~|[%u?]?eMRi.W=ߙ6seᆵ}gL}xg.y}[~"{%ikg}&w^[^eem$`\oǏ?~Ǐ?~ǿXcn?}g'&nDWdYy+X]Pgonf+ xyȌ~_,K=~f,1in1z/{Ǐ?~Ǐ?~[UI5u|dug pԿ4)\pR/di$02H@~5ꃤf>zAX#+ry 4m?~Ǐ?~Ǐ?~cDrvoD(1hWK~V}|.8?'fFѽjv?MUfP-&|b7PVIu4jK&{EǏ?~Ǐ?~}:EmCIƿm8셟![h]I݂Ͼ1Z`5(Ho3}ی?~Ǐ?~Ǐ?~gZk38~6')h{/d;L (@X}`a ,9/Lr1.LcV])L:^@qC0/>AHI`x."o&ǟŵJ?r)h%xT;?~Ǐ?~Ǐ?dmo+{M ̿:̾@2OgYl(\/M`_nG}m|&kտ%yr6ߏCY)~Ǐ?~Ǐ?hF忶:wsKO)ϕEŝ$65~}ֻ)2/ f{矹`s[ۜȟ$\deMq}T/3T5?dzǏ?~Ǐ?~ߜCObCo'?4\̲M%Pw-YcKd%y71;)>/?I_X?>vS03Sw]w<e-h?~Ǐ?~Ǐ5*]Mſ?ebuS~ә>03(⺟goK՟%hoS0~U靌,'Yww[S21~On)o9~Ǐ?~Ǐ?~o?nmʿm3];emMqzs<p YhKR\N~-ׯ(O2kA=o;:4+2Ψ<N?/]Ư'kہmǿ?~Ǐ?~Ǐ1?S$}/aS]Ư}ƿ?l3&cݔ\&(P  pk^wrT+s}ǵɞ+,K3"}cyoh(TxaSeeu}̖I"}|мǏ?~Ǐ?~ߞcDoc ی?cu_5Xe6 =~kj{a XN2N[ߘ82;q[7GLF3 }{uOwqM[2` 죓6t}Ǐ?~Ǐ?~u]ǿοsPo:9hw~yuAծyM&ZO忩P[Z)hr^{4$S{߹ه7i")s/) ?scKku;$p#I`<5~0BUAǏ?~Ǐ?~ߚ]vO|SƟ5(roswjq*lA>{7P(E;r:Ƃ+},n?xγ@fdvx&~76niI ۂ}Ч~0ߝ?~Ǐ?~Ǐʿ377lb¦}۞7i$k"8pxی'ٛ@Ȭ;s3L5;zع@Է R/TUآ|,CJ߂vC͝nb/Ɵ$aAl4~h&?s?~Ǐ?~Ǐ*{*.km?m"k68<~KK/>iA$ DLA`6S'A]nmxzٍS,E[ Ig.?[377$e 3fm׿nG?~Ǐ?~Ǐ?~?vnL,?4koz=A(M,,IA@4ŷ0Z{,{~߂go ,;7ɍ%#nb?&v%.mο?$5}KǏ?~Ǐ?~6.Smj7?ۖo6)oN埻 e prY>'Y您~>YEtl$ 2߰OҼwߦ'$+`M?ׂY:~-G~?~->;~Ǐ?~Ǐ?~i-I5mߔq-7T]oʿw}WeQ/ARFߒƯoIuA~t`h.AkYOs "iHASM4$~Y}P,o~9٘uYm*kƏ?~Ǐ?~ǏeQs[#4(0~S )hIp{=QsߙZpyMӂn~\NfuEy_9ߟ~XeLmk_,fPF~?Q z5"(Y7OnǏ?~Ǐ?~o/߶?jk_o6Ƕe/6.ȿچk G_%CUk&ڡP~L&}[pUmR9Ӌ&\`d'{ b`Ic$OwQ7٨S70qSיp uQok^?~Ǐ?~Ǐk͎O[?oS9Dzʿn֕878IQ 5=G )O&.Cp}TUWg6xu҂'MnҖISNuWTϿNlkw9~Ǐ?~Ǐ?~_}wGu!X':s'5%_|.Mky_ǟgygLhL 'x49I߂c5i '浠&_dO/gye"Zwߏ?{ӆvCMmƏ?~Ǐ?~Ǐ[?mOkb-ȯEMl{95m3K M4uŸ&ƿm; $-8\")ϚӶ-Z~"v:{wn֌ __OSiǏ?~Ǐ?~??Q/M6城Z4c_kn* SmMO_&!oiE;+( (|')lG{M[I1LٙEf}d<&AGv,+-أEoߞh # &% HO(nBdl¯UYE'}phǏ?~Ǐ?~Ǽ_󟑿I].*?m"&ySo,/wr)֬hD(% &Y~x/AYTmrfDp<Rf.֤N탣^2;~y0E&]-ZSe o\vǏ?~Ǐ?~oc>_o;"\1(wL(}{砥s >FwگoEoͿ8L*_(ϥ%-fzY ~cq65{u͝m\S] mWiuY/ޯ|W1'9_:cuǏ?~Ǐ?~}KO}sʟdղKpNuC%T _ȿڄ ?;俋IuM{*$} ~ϫ{| f"_% s*mk]C?M H{t??NZݙdA4s-Əg.`KS~}ǟ_u?~Ǐ?~Ǐ?[ u~]抶}aXQN-j{ܔ pdJ-lN"eIDWݱ\,m6悰&2H߹&fdoUw,1`ƢIѹ(q_OѮ~}lStǏ?~Ǐ?~㿝oS7}Uj3!iA -3G_S5c㔠pK(`w 6 F|+\-`in֟HS,3ͼ6;o9r_`GWv'qfuj'y=y13TV`8s)5x[ρ'yߨ?Ǐ?~Ǐ?~Ǐ?cZp )g|XP@$į-ۋ ?܂}n[sp|ݔZ %(¶ pJ %pxsEZXpnb`vs0WHo]q5k] l{5m̵IAXtNٌ`Ɵo2?~Ǐ?~Ǐ?[߂1>u,A5Ɋy'utr[xm}KuSۂ  W !/R-m/>c\q8@Ae.$-g\3u"KrH{,C/Pqkgh&Z.`8q"wǏ?~Ǐ?~[nm+;`h[V>4`YݔnVs5Iٶk{@Ik;2߃*t? D}PhPƂ;>ةrL zyZrH)ׂx O'k5ʹy P`IIܤ5?_dG@8VM4/?W" V ۊ?~Ǐ?~Ǐd| oUyCJz*{LgyLpl7O_[Ԏ-Ot ߧIv;P7kAkBkMf*ᚬ6i3`b^/:gEf? Lft `iuo&t Cd_mO22 :F?~Ǐ?~ǏvWh}pM(OM(ʿ-mMV&+Lؔ(l2٢h]wtLHәnI܊"f`:10I06һ}fv,:ܘG9gXmYSe5Ed,4D[$]E{;_şNRnf?~Ǐ?~Ǐ?ǯuEv7I-Xt<4ڻbKlf?|q3g1?[||>0<Y|~n?~=~\7||p~}?n{~>cgc3|=m~wcg]x?~Ǐ?~5{1|8Q> cݮ.WA9c\pۇǘ_~tXxw3f]fҎ}&+snA[z><&)* S%!$[pXCYeSUfe Vj0 ͯNWL'ע-Jϊ+N?c3 $U}._ݫW'womoxշ˯w<}k}3_җMozkenfffo4^ggx.?Il5Bٚwrgn6r&ʿ`;4:Psp1"J?.F.2ͷ{A0˾)R߉_?/>ط{@?}?׿oxq6o____>>>>>xJ,roo.sЇozӛ^׽R3V)Z_o_xIM9?G$yM=ϲpd:P) VJPNl,_LU~kk׵i&IPE+k}1oy+^zի-ߟ'"z!{';,r?́~_Wկ]J_ڡ-?`k/ASnN%f?C$|_dVIۖ,3rpA˖~¯jwnmcKPn\Ԧ},3[q|+_>,[=fvڲ5"7ȑUZLx.Y)[gQo;ܜɱ .nA>O1&8C%KqX}Reյ9Gۺ5"G|k_״0}d)ի+^b#ssI9g@&nI._pp.ufn[/E~\uO.80Wx̀M瘆` ҚfeMɘ| s=Zc-[,=ۍEnt#]tǼrKg׸o r-?޻ܮ/kmM=6~_Ȏesn0n{낙hI ~c̃3T4ї$EfEcQ;kR.1-~{7ۣ>ve#s/x ?)y~M`]wuEgb|&ħ c{&~r9柫[5)h ojq 7~n*&_ ]}EZEyb?nK_sRo 5wuW֖ܰ7Ό{/zW׺|m r& LZS}\HNthI%S{KpIcM$8i2{IMsqڮJd̲2ݏ=dFWw]7cPp;3J ]7ZM-X]]EM iMۯn<ȏv~ow&Қ]uwe5 8emRn/>~sc잃q ՟+Ƴ:[/lzN+|GJ${ӟf kO|7|wE/x>7|Ug++?է/ן?OX޶ύί.vϟ=+b_7gu}͏_?f{>p<Eδr"M&\8ʿ}Z6s>a[' %nΝI$/|"Q1pcһIۯr-n%EV/)h'H݉=s\}`žHP~= 2 -Џw>~~/ڷu^|{V+r1?uU?~O-sYb/}WT33^^O|_\^!{K~4W~{vvOY~zyծܞ^򣝽ϖYJ9Gsϳ$$Y>ojsy|&yMos}}S=_QK8 5ϽiJ.խ|L${eHVjg)xLƓ`?&RQL7$g.r}bw=+E~ݙ040S^;K?gpߋ컾+Nr~GvYoU<,"mV3~9|^tgӪYRr"ⴺ4-t3^(o_ #EMv,-?y)dY՝dzJ.KA\0w?tsǿ^{v'v=4 W/]g'{C}؏~oVk9$U|v&Qbw?ُ~}N-͟jZ^皖˼(ZV{|_YՌ~etYG3_b?E˥Թ'\|} <_o||yco-Wy(l͉LC~u@x;(${s-ȿr"kA{]7uFBvvnA.;7Yٮwm&pPխnAg,si7cwknf\@cg协X|)2=+˫ zi v7/K|{ÊEA6ڋ/c+o i}ywyc~Wouk(/>.ix_l?co;_y߹r%dφ6i\Ar=ߑ׹v>?$\%/cѼg~Iد s掵m{{u;\2n^C?3N/YY.\up2ݧ3kzQE񗴞MZ 8-سJY>U1_^ni.V\7}볞q,vJ?^:>*buUϫ1*ϖ=sZ;8uU0_8c3^-|87mf:kEb_Jfx5m矧~5WBGo f埳tmw QdΩp Pq{:M[z&-B&ړ7q|炇K!:Ɍӻ6IK1;8kЏSNu?xs3Ks-ּpU<9;|{2Y]^Ī%CФgeWʪ^7s.A?fZIMV$1J݂=͓{.. krOiww"t}wtQ oRYc,/n{w?_Z_ieQ _EKUƽ`)/?_s慎˯W-ͳkB5_P^xBtW`=5;-+>>k(wM䟋}]j}M}ʯ]KAr,IZ47_Ÿ^"E - ;{֜_w2{|ihV+|,Ֆru*nKu*}Q3^mb6ˋq _/ǔ_{[m|q2<2Ӱz=zqEڇ=J}Xym_}RZY]"er'S]J=w r-˶81.)pEe%hg̓1Ʌy9寁$ޯòo "]p.!-?Mld>,OS+CçE9cū?q_h"{],aE/̋ދnuYZnuUX^_ oMs~=. ݮV+Wjab+zj4˗?if>WkvenW9`wJ"9m]ͽm979Ny w{3'_25hw3״KurҲfΥKߋ7?~IPN_f$,v7}tն|껿^Nݾ^IW-ǧ1ܧ4vG9.F/V{,/ۤv{<ۓ:籀_@u}loCaNM﷬ڢ5{V'>ȄI}X,r ]ﹴJ--}wu=ħI߽v5nP8=UfhfD/YH郋v.Ax{M~/ι<&]q.zs.E~FonfW]f.-۸;%ׂazVӓV[KvZhǾ<)Bb5x]_v~-VӸ]pzv>/ڵ4<_X^~c˅mĈX3,ʮkgڄ'|kQw&]3IwSق@`)V/6;/c­"{ŵזּed{@wۙo8i{+r{/Rvy|37{<|s3mX:E=Ǘr2}\=~b/ O;/}(~rnv(b4 ܃|xaewՊ]\[/:wMnO)I 7-s$n~%اAHww62y|Q|yܦ UQ -۪j٪q_{۟ã~Wz#bSCUyQPΫSGU_^هUD:H4W?p]3ﭫ}qIg1_<\Vp7AwA9|pn{U{k? O 'bBTcrm]j;Kb< ~_3>F[ !sY)|ycxzqO~fuv} +WݡEz^;O6ȯ`q1G?5˰\/^E;zv|=Gh?],^d_ -//V}O>屎ͻk0޼j~qZ]WoY_X}rxX> W{0y`Ѳ}[M8lߓVE/B?gp4Z$ؚmnv,gs'ŧ߾\w'Η/vN pR&6w1esM-hw묺7Mfk3&o}.Ym~CӟO竽( {~/۝r[N9- __|s'{ܯW'iX}néV=b}d̻/ DՂIH s9䃋k/-j"uk~bUyeݎ`U;~NKuy }p' YZ7%=m(8[ )Xmd?*AA=aFu%O=k>/=e{_ /xV'{oK_}>|_f?3UJ-_ŗ쟼~gz_?dllLJ7KZ^߫f;G9+NC V&G.XxhA9˅3tFYrmd~t .gΟ\Og"7)5ܪpw]-=`Ϳ>jQ|sfw ܾ|m(>#5{]ˏ~lP81>gsʽ ؚ[sMc~7WD2&'ENokAI>7*ȯ]6ނ65:u2Pg^3^ p ۛ'i=&W_G6V:{iQ96vg? %Ʌ>ɬ$hn2̷-mgI,H?zfnMڮ@!jS'ڠg8scKAۚXM D >;Jq+I4閙[6ׅ_gnտONpeU~1]R:>&g|D*/#ͷ Fx5Xi>Vdf=d-T]W s o'i9>0߂wG{*^daDP8}QL7]{R֋y .x݉2s39/ϣȪmgLMsLu-x^94ݚMPj&?W96߭} ނ޿oNp⫯bVqd,rV+uV߹~'qL.%%h2NfE o?I4\_&m}"M5ͣTAԠHk0SHE${d8d)7Ÿ1E};v1{PXdiyIrNf!.G t'3t+K6ɿh>;i䴳OMV`k;ʿ E;ʿWw$OWճPxB~\Sp.no\;פI]VG665ܝݧI-7'.:UMuqgR o_]=GƯV DAത`K[~J/>eZ/nK{ߺe37*3z$Mq;r"~pku({ok&M;ȿ5߂pZ\de@gnvع}ۛ%}][}Jwk?s6;{UV{-,g{ț6)f-O+}!<"_+ޔNuβ*9_ʿgɿ *@ഔ핂,InUU.-h#S-[o;oP:|ZIAu,NYV6`̩w9o5m{ߧp"(mw⃆f5Yv̲=~.3LVp2sw;rAVMOܮn%qǚ1t8ѬBaX8$:=n/䥫mkϾ+濛g)fQ{Sy*noI$m=NpK%:,U~>+܌.Z 6د%p(快䴣{; ?5w!pZ *$DhWA7mvrğs샢m/}*~F6id\޴WqEL+v}.wwAHZWZ547r P8=E.j]{(FZΘނ=Er(~v.3L.MƟd?3JF[k <}S6Ӛ/.G_ǞOD)Mm{/Z0 Np3(Yf{+c+yϵɌ;soR,NA_7͵8eϙ߹gٛ,B5M7E_=S;Y\]6ϦM~e9K!vȿۚ{!"{e< {V]qŵwggs-8ƙ[U~Voل\"¹g عے[~?VIұ8x=n._VcJud*kAY>psv9Mg5Lrp9AD͐Ӗ/V:gwA5ig0 ݭmaY.nE^d_D~sws.Q[dw7=kU򿺧x ߑ~>.կ!? {ֻsoܬ^s$~Yb{-)ؓ%댺7mdOp_ !Kݟ OMxRw;zI^Wۛk?Wa pz|~Ċ.=64qM_>mh&|on?Jx|ZD~$yp7H&g=Ħ)ȿ W|1-X4MQt];Mϥ6F} pzfwL $ix> vƯ6wmr,<>i?NEND7]l>i pq3Ħp3&f6G_$ݶ)[%5h^nP}S?t8"NKr-е} &O#.;vmvdQџ61ol;O2csǙmbb ~t[R}s>Aێߔ:pz43w̲uu\.6r 9[WB77Os[62גen}}Y|@ߜP8<8r{u'PWy\WP`ETK~,3ֶߋ)u?M=Ϝ?q;BUеn~\7KN}\>gIy]3l'ʿ=S8 r1gZ }}Q9YdUگ[n]yiKaE\ |ZVl{ ta9=Tcd%qN>dR%aY Wzo=w?`e.,'n{߳&+3N8q,^ Z[p[ Fi{\dX Z{\V_k&{ho<:i龼JIg^>j|oWsO忻'Y$md\S~UޢAࠗmMf 0A{nn.(Kݷm2C/&Dկ3Ӛ61lq)+]z᪥V4KB?wp~܍G>Jtֵ~Lg(C~K,g}[8t`0(S𿗮j<I Ѝޒ΍a=na hjk;F XN?s+ݏEޤGXv2%nS7c{voXF?n]6=KTX[s=UahOtxP3fA ͬJ~ C s[ͦ++}ڟlG}i|00W̰;My۸Am]J&8@7zqȔ rYc~][T@ 5+C _ne~f nзe.p؛f~j`!q`1ߙWԶة0UQ&s o~?:wtclhpn͍ApF6 .c;3Ubn$8!6D?7cяN?ZRӏMN~ݼnܵ9& cG\&a9 ?o;!&OqgpztF-8*fTo]ۖURď_Ϧ5 /x^h?%$cbI,c)Cø˄IcBZ+qYc݉m z}|<@0sgG3Y";fEWfUytM+f Z?\`JNQ AaU|ϡ;?D$2Ba*p-ڃ li!lLtWǵƄ9wߔ?7ՓC- \e- '트1TKqO+bzcez 8e7x,+c$R Y~ 'nE6$|:fAqkS;MCHzJbٔV Z4d |tK=`*9o~B麜d !ОT o4ŵsFs!̲ͬE"7ޖ/ ɤyKؠ7>1kҽ-yaXI47G0D:z?ar.72``{Sihcb_.ؘHX&hhP84\j:? $|Y;/C'[ gJrD pn׏mRFޏ"nyv0i9ӤM07 6P;Z }:Kb ~nnr-Mi'Um;! 2'*}Y7tS*&xO5;oYfZkMmŽ~  ^9&& q‹RhmSvYC07F1Vl+岄 ݈,5Ooo&]zdE7Lpۊn{ʗ=j"GIWVڦiY]Xaߠ'ܱjp*]W[I'%}QtʹltO9 O?(s<=[S*1168L@{ gc[{.`5u;J?wEBeB}kD6׷8.3Ύ'wnVFT-鱺W16VL|V*߆mk-7ԃ L~Wiڦ4W Bf#>Yo0a<JSWX%?Om&8@7|k g}[Ug|o/~ϵzk 5Ƅ &}i/7GaQlXwV$Dno䀃*{2N͕:<똷ʳ^տ<-#}u%vbswhGW dž cf:lQkl741q(0.c7D8MT24dY6BgکgTX6eYr 1ј:S?qcj昺 n|E~U^yK奯~g[v?>jK8whp,-1FVz毸 ;& m7ifc[D7HR?7( L\J"ZWBǘnAiGJs5~#{[%j^~i.?ZU/w׾7sT+vqQn'4]u ±z8M+LQlo\mϣ}#s8@{JcԢvr[77ͮgױ7^Zą3'җ)m6V)$Rmem%M2|]E~OU_?IRח{@Um䖷;o{6lt[jߣkB>'etkm^(Ovזη[?.NS/4eG{M/tbW ]mk Z#*Ɛ lAp1 m~t|'R!%ĕAnqY \n3 =T~2tn:^9\yQx~>~n߿ܗ<]sQyʝsMn8umI-?*e oHZYoZ@AqyaOz_l_/A,ݍC*3lz{}ߦt}?l37Lk2CH`Eo~{-]ngp{{~16UGǡ ? 'wElk`ch}^G.}s>w{G˷sjտxrgݸzx.ڷk^Kd.^{-w/\9?RuUT,I 3dY3ly&?s 8v*U03Co'.D̀ob-! #R8c'm1^y4uA_lHsLohm.vT wP ۪E>;]qgt>sݱM?d5AN~}Kvv7rEWϟ~u+/WF{_"]%{sIWi9glm%ztm;N8~PJMX\LiQ󢟻s1VLhf 8㙹y=]3DVLYf2aKK՟gR}jy]p7:mz<'˓j:でݮoڴ_gmr~\=§h~hS>Uo{?=hϫgssS3YCSgJxh@7 x[Y X>0ԷG nN?s미1N~ڧ$~f8K5ƨ\m"SNouխ.77Gۏ6 |:^՗rWR'?ޭW۷qoRͯ{sו+ 7jg]ssFE"qC~L`93loYc]6}hpPhm ]*4F)2R#gMK |iwF9l~o/hJjl{=Xݯ|09ϔWW<[~=Oǵn=FlA+tEo(yo9g{\=6>^ g}\+K~AyQҹ?c]{5ؠwH$P 0S!`w6g;xpig.ج itVCþ1vYa}s-e7~H/ͺ_$?e4yyW^q*ˮnMD~~5)=o!۶]Z,eh09s1w41\ B`RV6^_1yd=us~gg$Evb+XԺ1&|غNƨ\;9$[x-/];&-NlhpPJ1ViY?7mUR&ԏL6$2XEZTKT Oetލ;tp+m'\_U1=fy^X앿i^Wk5׹,WwWmT7PRɳUURGWvGr}.<rlo(S*a~xl3M@lXזɴ? 2Gw7Ȝ-K ]Hn]im -Jf*ksye~Kl7ntk>JIHͩ팉juS5cpЋdk]༽ƿ#6R=>Z]6Wz~97]'tKrOV8W{ W˝}$$$ “`'9p"cm=OveV??jp =VvFmxb敮ex閷[lX u6=MXpFtCB qͬ[gHݭO<忿xꅻSe"o/UP[ߓaۜK z&M/~vv㓉!_ouj/~VkGsܧZ^\rɞr寮wڣO?Z~Ι{}ryW-s3@rvs9E0A$}1وk:' S%J4۪d4 nl_n~h>idշ۶~+_>Û%'˱rێ'?㵲ΗIs򵲏~^&/!Η_=M/7Lil#ォwͪV{I'}ٛg^KwM?eKW=˛_Ai,WvJ뜳]O]_px i5z9lMC5MÄ"|\)߻µhx/C6MK< %7ˉ1}cD{(F׮6|MYW}$bfd  ?&[kW]!7Sؗqq[k |SY/Ƶ')֊u Xo?ZX|3o-?w8c4e~}+A=ef/bڣULY0cnh2΂Y07_:l~֠;C66U׏MTaIʐ[װͧn^ uJg kX蟞2Ql k7, m)LcLc4bbk1x6b]X6x0Idm~9E0B?6 :n Saw㼯0m2b0xf)/C G`Ը־~Z7l+lܸ6@LQ2 cJfĵh¶7}Yf`vG6H7/MK |^v.גD@ܾ߆Ŧm VrTc2hN> VAS]Lml=K?Lpń2s}eM-M旘21F8fy#YgX_gfҨi|o_E4^wl[>6$+SciWq1a o`+`T' {o{bl>8@{1XBl 7; ]?scJdB kw.&H+eK&d5͝o\_?sX0*\ܱ !% i g*LsyeDYl{[B07-/M 57Puo$_<43ӗӚ9ti ڏQ6iu<X2ZL;j[\?%o gJ2- -RJc8@{1kw%1crqVX:Y`^?3y nE_/'/Z`4&x7߬wZ笅fߣw]i9O %\<)ዉoI!Z 5|N@ '7Klar`ZgکgTm5yCv//~/Dp e-FeYߋ370}hp,-1FVz毸 /;& m7ifc&:`47?Kb(0Ew} }I@ t!u،,w@ t9(1ΎEb[ wiڥLՏf{B=K->~ٰeZM I\?K NBhO &F8 ܽssn4YsK7͋L+S,O t0%.y 3?s&}bx-hOtoI .Pn-! 4?֊Gp4Oh Ӣ7~/SZSIBb":'qg`{T[2QLB=6K\5hgLr~MFXk/ Mc%MbBIϽ%V_\gM %\<5܍E0.[$ڣ7FHa 9ޒ @P>[;uEc]6}hpPfRtF)4dwHֿ.sgυLcǖ A$&ft?wWq\<Yc; Ɛ<ƨeڛܬZ7nȴ&ZjFG-5ja34;1aow1mqg+@;'Ƕ7TY2|LiϜ~6g[5b;efIP `k?;n=:E,qB>LpneEk@][̴S fϭW!/D_ZۛL IpERT>yU[}?Vx}{ Ѝ_flX u{mn{6蛛` TߵkM;_ /F˄~s8@<:a|BܷDn|܍]y-b1 ַǥ~oLz @kpI `rm7uџ=/ yL@ xxc%51\LXtcz7ϳ 7/Ku~0*`V?9Uk\qLpn50µC @m ƈQ_vދ &lQ8 -`_FpcqV(hpnDcܢ{nۢpe"ѽV4{ʜ~~LO :M.~peB6@KtGp$XΨqO(Ƅal6ws1~6er`L3EЗ zN0\fVڟC\xd3戭.3Y~9cQ0?79]2m Eͱ zt,? ZB=!kX!:+MZc{sb]X6x0IdM[7׬7.{Z& yt8@7j/q*ScZ7k7~ifmw2TY2B;}l1@םÓ_߰ig ½ ?#+3mRlXnַ㉗&KLF#d3ȼ[Q#Ӆ91B'`:0gCrtd8}gc܏U2~߶`X{Ab+oGWXLpn.KU%>+6)jk/ m'R-lb`nѧ-A?sv@ g1\Y&s7Jtㅗḛr^o 3} 0g8\[DG7K=/ݸ* B=>KF֭ ?^?7gYHdͶ% ӺeeB?o8\GIʶu4з,Q ^&]?EJigLy?FuWrf=.Im;.IT~ޠ͑>f6i f3?o 7 }hpclKhZDSn[h˜f)"~B[X2~E }@J' _1 oH?OGW!~L ОŃ g tQ/ e a&ݸi5\$marWEspA$@E?sZ@=i_b3l&Wm6=N=8~pmSӬ~Di!M_\̉8lL}hp,-1FVz毸 /;& m7ifcɶ>$sodv`8#я~Tos/=6TW??{-nQCraq,g/ }hpx6#,3\`WDF[1j) (J@-=X9u{w=9Cwl۶wӛTgu{~Ї>tu5q 9ƚvqǩ'>rG9#:o]v6ӡʉ ϳ՗DGSfYb"4w]'cXqCL=xͰ`U谙D~zsiav8z|k]K>`> xЃT}f}cn87q;ݩJ׾:>guֆj .`{Uet@nrT.;)~׻U%Jl&^O<@n&Ik~&"]wݕ= ]"w7@Kxs h_\Q14Od{ ӏ/~2WN7WJ9a=Z頃ڴl5(_ZN?Mխn%׿3o\틶 GY]z)R l ʲ38cC5}٫~T؛|#r7+h|[<X3ykf'Z絯}meC=fsZ@A጑5p1jyp^ez biڨ]JdYhg+ԳD~~٠o_n'׹u׾v"W`?>MEQQGUU?IO'zn|Y&h`WZ]H|;Nx;q?al] 4HַpAm5yMlerϳ/~tS:&7o%1H7w8"v<ܵ[/M\4iE_&)h_Pǣl /\~_}hsϕ+87:<}nuW/Iwu˫y\rIx\^_jG%/YW2Uԧ> ??]c~[ߺJS v͵P݄%':leI03n'.D@v@+1.8"3y¨F_-)+ZM*Ї#Vd׎kUgڤx>/w-}aUToy[V߿Za=IʓyoV͛ռ. 7ZϿ/UϵG k?eEۼ:/tэnTы^fVRkTJ?5oGkǽ u?ߏiFsWu.ꗉb:" XAg<37gڤD$AY1gγ5o/~oC 䓟d5O{j+g?򖷼jc9F|;\WFx3u{]ՖO'>UkQwUmo?rܦqm|6&i yϛjGQ+ i1yoVqU`=ou r{k|p;Yww\^>5 䩦~/"o呏|dk=sRlԘZ)c o+ WUsW{7u8w=7 g<]}X _ehݥ|_H[~O|\۩KC!yH5mNwڙzN\|=V:^n j^7;i[v?֟qX/5~+ fF[[}q61l{sI?[bUM[;yֳU zN65??O^UR kqUu8w=7ռ? ZW?s_|p5vg=7~]=dPV)i7өN$zN&]vNuy&[AjWǺl ݯRh*r7L0xiC?bKVi J&wڠG=)_U긫lnۯ[WƵU>&Oxv]ѧT՗%5़*H5H77x#dvvyϳB:wMB/˫߯}nwۚ:*I1?O5^q1_UtԀa]iG>5kST~g>sC'Viaݖ6wyϳBZZO  d lEA Sya1թ>gUzNi0W?sg>f:1k_Z$Hi+_nW'v[ߺz| k/KW*/}K~>u.F弚X[9餓Vvxk^SU׀j5?a'[Vu"1-!!4H_)Eas[ 4eA_k:_i7}|W|Q[j7Gtض8}~8@{{l۩xC%Θ.q>ͬ*)gsZz^#q~5@V#zꩫU.hqrW^}dNwZǫZ͚ ]"l92#xxs9Mh[J\oW&kHMj /p<]GqjR4A(w]^I<תjߝ@m~?iE5Xۆzp>C6toS>/{Mws!A'M>v~ _:_vi&f4 u8p)8"z\Sʌϲw7Ȝ-KF<.\XtY^Ѽf dߵEL;`zA^_8rNq uvU2p[ߪo8Z(.k*/˫SUT~PU)d|[ڢя~t ߌYhEq:x94磢a=6ch3r>>E:LNSڽ@{x] 4FkvHVA+zt=ZdirVkz pZL_ {vN;kFߣ~j77`2Lu8!ls۳AdcXgusL{V58 0m \vy}дu\Gqj#+PJo{L]9&̡1{Nz~5g5B 8[V+ڽ?kաtm;8?u<|lEO:es\p(}16^&Y-!>=ΨgX,-QVm$ f^pcXl rCGޤR`;_Opmo{۩A6Uv{ê}s[Mg\_+^Tk@Z)kޠkEUӤ{Zsg1c9hV?qgF%?~.U}orO^NhPy{^ o(GqV+gp5Nh&Z>Vn|WIOZ~{ܣw̡6#SN9Eko|֪s^F?Ay;Qwq/펃.-j)׽ZO=`?g9E=_+6t ;7W]E;FsTYGU ~G~O!2׿^笶/Mo*~%i㏯Rn`W^Y}}ؤLʥ^\W ?%M5!xy]>oR``µh&8@7l`@kXkh38"|M,Y/KVc=+_JrAub<xр E`^j Cuoy[VZP?č\SuN1J=oe Sh[Ir>@g]wMo]ϫ."ir;Y=X*Y-Y}kXO|n_\ۢO{q$ NM?яZmSۘk5]>t|! 0=*YoosL|RPu w\YY"/͂8@71n=mDEAr}ff|^k̶1Yf©nmw@G+ePI:i0>U5-j`$u Q-^=֖ '=IU@\y`4G ʝt'o׊Bl{b8蠃6K7Fg>S=ֱ5@eU>?OY괒Vh=uxmϫ."ia}}= {^Bygd:__'|XMW\qe/ڂ9E;qQD$\Vm70 M )/}K*YU7]d_&i=x!=5V3jvܓ31al4)\LMY_ n k $L iVpdұZ_WVzV~\?-nq yP^T$ j KPJw Fk@c@zֳxjg!_Wm Hj{޷??Vcky=?O7MCjs|K'>kKԵ|#&&w:Wַ&O[TI}Mwݗ'?UjtIU`[B -od%A+O50VjPT7mϫ.Qx8O MK7 6wAzܚx:vjkO89S7|7fg}Z깩׿nn]vu 8~+p Z"DY .3+wO!eoeJĝsV,[@_xt<Ӻr]~]+ 4mcw*wW+5Guz׻ Pn׽GahK[r)ն5`z,"R.<̪:iS/~qTj{.[O ||׭+7Zע&'|߭ M\sD x ؿ<}^O o/|au׈VCe]&oV})'駟^7ZIh}mwSN8\G]ssC8OO>y5 /uVKÕa6u4nZ"X~=wq:a~#d+_gc\~ylo.V̼06iXQCjnB+ u<1cġ'Xf50UG-O*_ժ_UZQ%ʼn'(~Ӟ{M_]O&UOݦVq|?Q4?.zԣukVjcOG}<򑏬*uJ~jaS+@=sz3QO}SjL&Fh\?#8:|@^kZiW]ǹ98Or^ Cߪ訣_=AUG,ԡ"ϯSq׽U}:iBiǮI"}f}E-졁M$$&ǽ&&E #{5k ~b% ЍpEg ck~l"q-7k7~ifmw28" .b~PUzEL:^Y T:V]tEcS_]OnurLr=1iK9zNjp= Zy|O|=\Gzg}vUw>*UzU+ԧ hM [T`.N__?*Do|Ukh\s'-a{@=~U]Z+bأm5h }Z|K_+o} OZʩk6Ї>iYǚ;Qw G)})t<{l>8@{1XZnnܐG; ]?scJ&۶> 7nm &8@7r%*]\T5yߵ]kuqSLXzKO t혮Z[ܠ?p^,R%K2]LfX9X7~վm~3}Z?f Z4d .{\Q_qUz&8@{|$5[4;~x~n22l0moKu4˄~cE ۺ{_YF@z/ݮ"43&#D:`֫k9D6 $OdMC?oH X4ff{.n ؖݹ7NѴ>"ܶZ f[,9ҍ REj*thp΀im`t[Ik=7OcGll035~Sϛ_wLl[~ m 8cVL/$(6~nڪ3͙~hoo,'05~xt7Wf ۸Am]J&8@7zq5k -Jfک֫ s/-ܼtN .bigh{tVߏ^W8[A}sc &˿Tg{ ܍*l77cYw8kLN Vhre'qߣ xЯcw}VvpڞGgԂ3bOU(l6K3/E~6~ ~oR}:eFҗD<&\<nD֚ d{e&C,1=mҗ%L %lV?9Uk\qLpn50< %w71#3Ff~qD{/6,YgҧU,[ `KΉ~P݈ƸEܶE/6E{6=3ۊؖf֏3ҧj0{E΋~peB -!bۓXc;f=;Fb$ٔ*l`?2BpA"i&8@{];~Hp[,`btzF03/g?j` !=?M Eͱ zt,hO4F?;VJ!&Ƹylo.V̼06iX`zt8C[k=-̍m KA8EZor:o3{,2e^NI7,;&-a{@_ĵc3s}eMv~cL'm}AoGWXLpn.KU%>+6)jk/ m'Riؚ4V?7g2ܮW:}hp01+7d&TnҴLV덡sF{L@oKbߏn󀒛fbl =@BBKC `z z/ %P[Sil1۽Vљ]HWzzM=B!@7ZGR߳+\W !UB8!=$dck4~9><\|YN{nJݒ|/D~K!=4(4d~FB=B !F3űFNR+m|mHwC"NHmGH !b[_u\2ͺ$fp6.I*S- nɧҀBz:!!l7BZ$nnп-yn'ĀpBjxUg;'_>UDNsw%ӳ"F~*$ ݤfsUʗ {u!B!B!BHWG$NmQs0oE;|?dmpBH5!Xe0w# yOY!Uʗ&R>!B!B!"ȚieIZk~jaBpBjҳ͕<0)+ܱٱ"mnK>^!B!BHԪmsIJ˟ OJ/Zړ+pTJ3@U:uT}%߱Ҧ2ᝦ{m$_,4қBi28!cB!璵_[Aobw+O G{it>kHoQ2]oQkM.|k'Bit!cB!Š%D>!$4'd檿ϵ vQ}}Z2ڣ7ɧRB!B!B¡%$cEBb@8!Ԡ5(E${j:N0ob~Rɘ5Ǎ鴘|U>BB!B!BH$-m#n:mxĄd&2!i'c TȀq*B~ޒkoB!B!BMNRO 69[\5NDOQT>}u>-߉)ߋE7B2c0A!B!]z-nRϒ[{ߊB'ĀpBY& [[ Y$WLYߥuDz)+ݺ|Y[ȗ*ۑa}{@'v~Cc)y;Cw|3ߒ,puB!+p-ms3ϫe莒O!1a!$>eɀgo@Vh:"yk0M W)Z-,ߩB)FRG'n?Tl-65wk%-]e[>&..2d>zի}n VCd{PUf,>E&a!B i;_}꿻OYQ"ȵ|/$R%4%<]k_ZI-#cM@y*<="@~ mIv$;v#.TY *쑏f]:kE /H%rcSF!̺2{Ec?g{xAnpy_؂K/§F7>"K$2r%rh|K.2j%G[51wêA_~ 2'w#Wh>dȌ叅GD!˱SC,2xH )vDW˴7az3u{4XFL{G~~Α,es6y*I[o œ]/.z.s|Bzyse?LF 5(B!BmZjտ6Z*o]^|'B>!$4R{rՠ[AҨS֧cy9!Ҵ*eۓw=⾱SO&ƛcW9V+ulQ3œ$xX{/Z>ֿ)32gȰfF/YLc}ܫmo{lq͕.jq:M!B!N瞓Z'Āh1Dz,8j _Qk 95إWXNeZ7o\Y*ưzZI]_oywMXC.w>y2HiAZc+ejh Ca߄ʜAI~KڶUPrnJBH,"BH0g{9X󬭄ăpBjЗXYTb fe:^qO*a]KdĢbʎB'(_4󋟝7ܷ{\nbc;=ح - |Xzq3,W2yB?cڎMח[6nҍ/KTYp^CQ<+ϖɯwOd<κ^#~v QkJWw2oα*QÀx㟕˜A.籛vW/_E#gP쟟lG|]dPku' !1^tzaqB!y,(5_JRg|h&R%4R:d)oyx sVZWS7f: }J[&/1勚T*}Xbz5 kwcq q Եc]A"3?N*ɮ|y"7)DYf-^/'"ˬ]4g6߈g-0PN"2g+-\W.D6H*-YCWIG{$Z5<_,wIeTg]GkC˸D]@dYuKIv|E+h~UN2૏-]x̯w=d~hh7 poy;"ٟ- E2D/C똳M]pyK,2b ?"K ]ƐT}QgO]oĻB9_S,;y-%店iRcEF-~/GsjۈKu֛~Q}鶿r ,Ulc;?u֍RΞ2g?^ 3%9~eAw| 2LdeꁷIz]Ր7m6Y=[_~+'']ɵBHcaqB!f,Uz}+\˷ 7LFHLh'6rjbX<o/ Mz756J~W+J,|ךeRf&*=DJgЅ][3\Zd OɈS֖I+ȓy}lq|>k$i/Iv*.UO".5}Kw%^[ktf%ݬ< ~YeI$s2j"]ؿ13 0r˅)Wp[:-~\SdꉿgX>v tgq+d7H2.# R9CCmXSoMpB83 ~;~؟gIe?kȐ/Ɉ)ɘx~.֫_~ ɼd Ba}CNMdby= ~ΞxpuT~[YpIH5S-FsB!SZ )0b$CBbCHm{5Q\roY0oΙSLwWaM #I c_>?Y|\OyN2̫w3o=V?,oޯY&Q΋zZκvky ؒ>''} }' x6;k };O5~^-\^=oeo!h?+: T .U<ߤ{CY+u'S?|ON"B!BF1p&oGNhqiOh'6a[z`[PRWɭ V8ֵh{Jy5B( 3c$ w9{DF9md7dW޶?=/~}! yRF ~ʶIN:x,al /`?~7? ٭OJ[JfΎuˬ/5wHv{m iw<вG ;Auf_ӟ|~9W8/D4)HOҏ6n3s0&UQyXK~5 a}vBFHGDԫNqeԫJ+)+/^me>uR68xr7 蠟'V~r04!B!](M[^$8ZqV-ȋpBjWoolGk//m$ۧV\l=7H~[(Xq3XO>8v"kY2K"Qwn+Hp}Q~k"JwU5B=+Xd ۖw=n_VZԵ^ w2%˅3=;MIvcJOP#c~XɮM%c;w;~SsK/#"a}՝y>D,݄䦹WTMQ~rXοh5U*o6-}DJjszEի瞠R+oFf;Ld|t¿jB? ^Rd]Os\dfWB!BHˣmw% O/lBbB8!5Btz=XAM{E?d`4hSl5F|ȲEt~Fseɛ 7'hL| v2υ;t~^ |yzX{3W"TΓEw/ 3|v2{آu*gfG+D=:B!BV|)#?o!f !U@8!q,ϬDX[%V^fZsDGV,> 9oZoۼ\, ;s=uKk1`YI:??|5̛3ޓ7I毿Dn=ŀ~2-4]iys$%棲Sd3;Z#_u; RC/q:`L{;y-yOMfGdo;w:9tS-wآ2**|=[z$WCfLzk}$t㻢v_#AΈ%ԫⱳ0+ַz%#>!2{e*?o:`хrϧHb?y[T?YLB!e! (ү\sN>BX L]-/ݷp~NzSVLtH;zw<k;WH/n-f,^l\Hf WL=m\6boq&|m{"bFÙ2ħeʞ$v{z5;qj* ~6xRa2kEAxxn?g M! |MUύB!7R2䄐J_c__Iwus(pBjpBj \5χE3 HYSr\i{[~߸y/*]Db _ _Gulͱcy!2%un%w`c^9jenrHOwB NnA;˴Vsʬ#"F-Jo,2hp ם;vLUr; G%I̋Ha: qasOإnsRۈd9/`?ն)ŝւFs-%3`+̚iŌ7-7/!am7NB"^}_2 *EvԍND]sg:F\ճi7j *6#}[/̷DV~J!t#~rk~rpX(!֢]!9^| $!?! h'w + AUUiRXJ(2Qcmڃ$W[7oeݧX[Mu2km~0)łȽⱦxZfRd}嫃o~[܂o-̛>/=n~dȯ.)It_*#noJ$;eɮcqqOI7"/YGBt'ϕIg%{ܳ"?9A ӫHrBhL\Jܑ{{* }z2O/l~X޿^wfCF=G'zΒOJ;%D~rPAޤ%ݎk6#H%{̓2ȇD?WX7Ysy${轒=y'n7e7QKDQQdBꉠ^M6J jLH*8_JtV̼ yc????/q9A?'(,S^1' !QB!Ҏs</-! ,TӞ;Uޟ>}k1nURT@~[b+v'FMwL(s[h*Vp)eSw CT]:ԭ:BK>@Ȩw7?7VWU' "PYPp_|qB .' yl៑d?K䫙yBy@H~rO.b?}zq9k+#x !B!zǼ#P\_Qߊֹ!UB8!<$dP_ :uXiR¢sVzZ]SǘgDZkKyFLa;s`ߐϧHe:rzı7c ^>;sz}.rmGLy |_2V2MED\ me %sa2O++7忐ǎǎ1G-+N3?͇VZ_ Y$3qeTIm닺/y/WJ:gs}*5ew~ܵ{~js.:0~Uɖ󶖅d~OXp=_'L{E2o&KǟRH2$|Vu`Ies TƜd\*._7h$#NY[2W^op]mSzT2\Ax.rs*W.ԫ| )~Z>vMm!~KJ?W˘֔l*/A>ad>A~sFA7W%S:.rΦ9uB0$qOamu~mF2丠A?9ɘ')UE!B!A6 o7#Vd>γBb@8!D \)ך)U|kpOLKW ?m 9K~N&h6bS^>zCϓ77'4"26C` 2g5u ʫ 7'Yw k8FYr~ /"\z`ЯXy?a3T^}/E)n|_:'7W W-H>'X wg>gjO<;'}n[5B!ҌAV9j=lo:DۮJ嗻Z[Hr^%T ASu)D{hiOTw+Q)QVkP|JTwﵑ|SF!BH/YB!(Mkտ9$ŒV( 5hHoO}dߢ[ך\:#n/OH?!BBEBz?7V'ĀpBㄬס=\=a܎wB<ʰT S[{&!7lB!1pA!p\$_en| (XQNH|<5,o aɞZñ8j0[놘T2fq#?d:-&_jOe4!Bz*kI4!BHδ^Ⱥ6B CIӞ\5HS!nǩyKVE>фB!95!eiWG:,!6;I?!$4R o Fzsՠw,O/;ez=FSRLtbo|'|/B>/TB!C.!R=i᜚*[k1s{|2V:!$4D6A2J: g.m#OY=5+4ښET!ߎ3:!R%TBl8&B8&mM-ms3ϫe莒O!1a!$>eɀgo@Vh:"yk0M W)Z-,ߩB)tB!ROB!5q>䧬sQZLG  Lhb /Ҥܱ& !$4R{rՠ[AxyOsBҪw-nwb%B!B!@:3x:Ӣ޴fk_iYvגBpBj#[^`Ң*0qf@SB~ޒ5|)_RB!B!BVkFhp-^+DY[  FNM ku6=R:!v4I2:6Fɯj[|!B!B!׃޴&kg䋒^|c˱ a`=AͱVQS\fASkm-߭@姫RB!B!BJMׄh{| 1!!1`!Ɂ=XIך(.Oy{C̷p9gN3U߭B~^}ɗ6O!B!B!Ģ8[~ʷVv #T Ԇ6lPLZy+Jʚ0Ѵ^GıESʋFg tB!B!BJQo&Ǒw /BC8!ͷiѽp奍vt"\J~ZW~)ЙB!B!R JfǑXT a`ӓ*e jzݓ5(!FӞbsE5݄{ _FB!B!BbV/e-w>$,! h'$>噕ҟC{˵QkrQrJ~^6^嗻B!B!B!EPS io+OtTe3RMHLh'$> ۙ(ZM,B!B!BHw__Iwus( /BjpBj \5χE3 HYSr\i{[~߸y/* !"j-6B!B!$wN뽳Zk>iawyʟR4{=oQڗҤh:^')/Qeaڴ=H\oO!dЁB!- !%;n||BH h':5`r۳ q笁OZkkT+?"n/O!B!N|:uiʏVToE %'ʻ˳R^\&%,l=+ݹ=8*"uGWs-61S!Q&5RT ߫| B!B!BfVHB?'VcC'T ![-!{-Xs7€n%?"?]|i*B!B!B)IZM=Lv>BHNHm؞^z`'&eE;58;\V-m#b:QB!BL#ZN5|ߒ_iBb@8!I%CK{rB4^JbȴJX;V=X"Ӵ|%/B!B !޴Vk+M"_,n !1h/-QԧX^zM)m;Jk-juɅo3"B!B!B*ʗNH|:G>2NGQjasRk$݄B!- B!R)7 /!e+j 5=A1,"Sw8qG ykJƬ9n䧔LK4%Bi]H!̄BZ]Fo/dt !L\&N{r9 *j M Ⱥ"-[A~TB!B!%|o&NKX mr#=jP;2=o Jt)i}|:B 17ZS!__ OvB!0BB!lKeĈ,&SO=U:,KdfBaL!+(Qs]R5XN5j/OA͵ÜRx+,ڲck3B{8q,2,0h Yq/+Rd~?~|#'xb {Vh K/ƎmvA{Y!Uz뭃#<>ӧ=:"R?NHN:gՋ>:h 뮻. @g?|2x!K~xNH||oN<6u>6WRiU他|;1E%:^ꪊۯ-\1v<`܅[ɷ~+&M 套^u0@\sYw=ZF-X`o%35ꫬuumgg2֫>|xoydJtfL[ǙO yK$%|QJ P& 6k1& P`;#cׯ? ཡX'w]Dsrp8+`޽~_v8xx+2F?aa {DBZDT5IoֿV4on"Ӭă3Bj#&5:ʃQ`)k;ܼ͵Χ)=樁QkZV*^'|r> {W}wu&1Ι3G>Xsu<{WxľacJ >L^x/ 7nl߯z Gd8$cIO{~#>m/&ufn Գ9֢MX\Oֿɗ#"݀E@HM{5Q\ro|sΜ:g[ /m*HwM7$W\qz:zh҅sc }^;wA.LIzj 뱡 A暠48Gݱ~m6䮵Z䚭uYGN:$: $5Fh(xtx?lPR&^~{s7[o۷䱥 [mUG1a9gE=CG!$칠T ~6ӟ㎓'^׷RK;B٠=gA{]G)~_lm3h8ꫯE*0Y4?Ova%OMod} }Y^psN ( /0h{ơYBRE:=6gd{5cĉE}Dyc ,{'Z9c^{N6mڈdYs 60PV51O6>"5ֈnr6r6l/1awy#Ƽd2Q_lP?A)]P7{`l0pxԬ\wq_nޢPR;Vp! h'6a[z`[PR 95ՠ=:"u-R^d6J>#'^b Yh5^O?= i5N8|v0B}!Ї2Je(ba S0^ d:^:P%&| ΍tzf3a]E[X-] ٳg_&CJǜJ(?{A<`/E>rv ΃cPP*n%׋ bq/ 1ch χP7. F6\2M-c Fn<L|Q;boFdJx駃%8'xb0`˹sF:")Z^$8ZqVEH|h'F=| ^^HnOW/[ߙ5չ|5z7=-o|)eK~C40;Ë3<|7|p(RA<ٱAi2y# ^a8Kpl&:P(@`#0 8DxCg(p/˱H!e66ho_dc:D~G #2/K}xV86;2 8w:nRVA(gDYBa Gu(۱0 !b!bu r|뭷%jRQAW #׉gQ($"68oy@IrG)F!&~Qg;*p.8l Cta)l 0 yVgPR=Nn9"F$Q?D T ӝw(}Ñ޺m^^z)(&M+ K"*UPb}ƎMۈ)'9v=#R u3fuO]Tx7|=%YpQ}w_="4c/,Qmk 1pBɎP"?f3~e40͹#WFR }ĠF_ `Jr$dOCQ7*V?\1ޡ #"ejѵ(G̗q +A1̱HwLbp)f<8qjR#zs<8Ѣǵxl?`'Pa}WuuxS'c]pSáe]#E=qji _[F|HYBHNH 8gVJq,-׊O+/3G9EI+y|{ _/1 Ơ4˭iPe:,}1N@(*xBsrp"4D*@Q`k=,vQJ1jBc xfݎ5,8., FsPL!5" x#ecu,(4fOwuRih8ĭ'۔g>"- e\Xx<`d3 DsqY;]~z>DTaN/j \s\3BS%}hH[lqk[Zx'9oDJ܈:>im3o`D,c\"*NYՂY& Gv#դ̨pL1ew ZLT2zE"פGjk3 me` s4uTf, 9;?6fܻ8J!V}TY:*zʲf&$&4RnA BzkSb|[O.}9[-~Wc|{-i&O.(`|zZR4rsL4q=R>ꗉR*ypկ~\o^XL;| PGMtPAjv′2cNcu0r#Bk1\"ET?T3J+QZZC>!I$o6)1aN;&0E("έ8 e3C!nvF5e[bQ`R1sJ^r,~asèJϷUFE9 8RYN?6in i)"|MsdL1p1¼+]mU!. RVK1ENo{t@d YȖrwwۢޡ{7'n[ rDVuZX|7D~޺'T" $6zޢqW/WI^c)u^OS_u/PJ/l QlƘu:l#Y~e(F#iq/܈5~$LJ$9(zIn#C8㌠_E>Û-z͵ԫRϡwI^36,GcV7O12r!uiG?z:'2VD[et0ŵKX"ƹKpT=Ռ)pZ0("-ɓ'=cMXB,e :&΂e4kVG:뚱u-/-! a,Rn{ֺ!5]kq{jBI~P.` =' cuv߿;s vHֆj_uxMjx0~/rpJd; :s^!Tyāa|w!$4;LRqIRŷ TtQa^t֠$i2L>h;E OI(.3R[ѥr-p ծ[2J?/E#^{,n~g#aB Gu@9s.]P(aM_'x |+x(=#~_xkh)j@6Vԅ= 7MD"Jꪫvq:콩jB\w])B٨xiGYZ=R\.ͺK?90Vèzy(s~.`;̰~7CuF{b^0N=K/w=e_tA]îG}DcNr)A}s:3;"z-ygz}s= FQiG]w]0guo`%D!`f)k60D@ E_&yJqKo\+8RFZ9.x6H-0` @_ C2g}. CmHQR߈ (ǜA9`Ÿt9;sFZF@OU#oo35كtI\dR'Zy8;8@&"OÜ8[q>G;9`碋. ")l2GDZn5xذc0";-E5([sD,4xCD>Ώ>m:aQX9ÉF0y+Ͻj b|UNR+m|mHwC"NHmGH !b[_u\2ͺ$fp6.I*S- ngxB@a?)xLD CylM^j"c/}roĉaF_\86l'هYfD@^Y{(`<SpfkR D0l݀E$ Pe\5Ia‹>0 e/[p"vKPt@g(p[=HEE/²ʡj3kau HC E .Ͷ^y#گk-#WhG0 Sx_XFȃrJS16-I&8!}zK$ P ZQp)jZ@A|,('RsZ+_3a+<īZSjtq?!(?7Tv9C,Qw!{nᴃ(I0F`c{NqD;׊}2k911Npr1E :TOp@xa)0{wP([Y K`aNDGgxTn9s]FsϢIBڌ$nnп-yn'ĀpBֳҝۃR*"\ZqԹ|;גYkxj}#?nRh*K:ǐߖ /R[Q_x1H) "ߐaIBI-Csa|w}kSx@ـ6DWwm`>+%WoQeZG#",;8'a@!qRe=30# =a傩[0(=<ҳ#uX/azZgvpa׋\/R|-} G = bLI_8-& [mmmȴ~8gE:PprHPQfQFZ7n9C c%52A}B?h&qA?rlQ܀r/~DBQFO$`t}KO7c0 ~hRR߈ "0 ('ZϷQ}lfՖU3̟mp< QHq.m3(gDrƜ;`+ul+͑׋gK%1G7Ӿ%e%Jsػ[dsl2!u}4-CЏY.),iPwpȖG`'PhkE^7-zՀ!PbCꑎC_KD&F\s8`쩹C#ov'˪2'BHl> ꫯDM0!H7tj#8" %Bl͂"m]t.a9BZZN5|ߒ_iBb@8!I%CK{rB4^JbȴJX;V=X"Ӵ|%/B 9 xE R{b+"H=bĈ 酱%!n )7pH1MX΄֧7U |K[|BH h'$>KKԠ#=)^D玒Zl]kr[댸H>!y&XW+'x"SObz;N*kq!c1b,pZ߂`tb9O"%D>!$4'd檿ϵ vQ}}Z2ڣ7g tB$Ss{og̙#=\pyKQbA b$Qc$QŎa "b,Fo؍XNPټ;{s;s{}uYgӧs粀R_V/.J]LbYPNM5:1|<|Qֳ !BIeVbXDr 9P%k6+s/^+W4BSO!B!#a-dBM+ 4gr%g)Q%i!D!~\!d/ E]٘O?!;B!B!koq !ARFRB=k2d)@QDX}&u?Q|/|y}>Y] Hڵa!B!BHܠ7ș9-K~rܗ(tBH'$:Hmb+U! gEkxJUse:-W ȷ#DPB!B!Ee;%%o9kɧV!r,EV+K>"%KBjY/-oʟLB!B!B '3ov VԹR~LGi: \U`R)Ky{E&l9=kgX'k_l@>!B!B!p\쿞x/Io^vx)_Ym;!n-T%+Bܷ&PvP(GHI/Y}K~B!B!bQɜjM,렆||BH'ĽB)-X%iVyR QxHVB['B!B!$EHszB"CHt1Jw E*WO(5RmB6їwV"`iABHQ\uNZ:>r!: wyg۫vI 8P-r(+&Ӫbe`> !$`yyswg/A|kck%$t0OҞ-YUE)Qⷌ, z E|A{|H֭Zr%~MSgIR#=:rH駟b+fꮞGq䦛nڲ?Qߧ9nKYG8vqGR^x tYg׳gfYu9I B!9Ii'y9D!$Ք)StI;ԥ^.շov 7X=飶rKuUW>[p z &h' EdDN\s:#t@YA\/QGV[mxꩧV}y͛mY0@nѾ袋h{Ek 7ܠ''ժ UW]5k:nޜ'tR\s=WmVFrm.ckٳn8c;t{vs]p@lm :_]Ygwp}q4ẻZsZ.VYev׌#.β˜!~ZqA}R.:g]f8M_FB~!$VMYGYߓN/D'ʪ`)5I!ѬF+[F1R [lvfF^`@8裫  0\ VXA=c|pkmQ\pկ~*}6, b.th 6@? `B;z"]wvZkU5~Or`@aL硞{qa~8%`8c^ZM_~yvA![=zh|0Rp Dh €{lIsx(UqVqe0׼RK^ۆ<[>*#W¢XoZ )+A[(?0VQ >pFEMh'/ >7v&kkv}vs[/^؏^yckOЁyBG9O>$Tի9Qu|Nk܀4ׅp}8ఉ*Os4k9A}R.:vMwuv>X?.m2 =<(FB~|DƝwoN,w)$,!'$:2`?x-ߊ/UfsDF+!(wK)Rx1bEW/ѥ#\As@.NaNpA:{=D̅`]wկ0r}Qﯺw\D`e9MV5Xv׸#/k\8mF m0rཋ/X7h @g/9r6=33MSq8@f[[7nO?]=Sն۶;'nX1{l}/o_Ñ9~ӧO_}cGI>e` ~׫!ӟ;_|^}UbƑO6.ꫯ:k}W%3vO.Ѯ\dl}-tK[nѲ1f]ve9^AZ˹q.7:8ƜF7u܀3\30gΜv׌îUVY3t6vя\٥ơSԯK_ o1cƌEmiAAG?|Dɰyf fOME]XL{?va Ƴ{NVfҩ*lqB i BBBJD- lP0(vm m̟?_G#Eiv( 2sNrׇyF#! GyX7M=;R&M4qud7h_{h'3:Vr9ela@7iLN],~C;BW\s޽ۥ4ڳKMs4gq7ި^ח_~ߛ7o^kƁyS#gi4k98tJu a?cNIƫ<]dyХ/я<Bb'Տ`-|[..P07' ʖ/ T>/E3 (XSom'[|UYtom8 a|t~0豲Dzd7{:6ǃ? Ca>,fT8O?thKdG97v׹I}cGY֬g&ݞeff֑5 KiL\ ;gc?ri.:/`\Dg$tVi+f_AW?ry>"##ڟӗw : NY(,e}C|m^%/ȟ {챇sСFA)kGki}죣 =>Ld7mʼn&weGʼn|7)lxR.s8KD/5/bD`@ ~2YD_lא5A4_~q̸!?ذbܴU&y>O=:ҵbVȅU3(k΋u78ghΜ!}~ &]Do&&.σmךW qV}V%$`Z_ /YEitn" ͎dRSbuW`.WqyVh6+LJ,Ċ:%J 7\>ՇF<"` m3S<+NZ~뭷nCV;Vs1xG#C{BJv|f@Vke6޳ZOyli0x`VƍSrn'pBbrΠQ~bfܯ+׿0b%gcѺ1rgv~ܸqg8=Im=Ϙ1kU3(16v:he=5gc?rEe/9 s^zITa<jv6vmyPzΕߧN!=qK]\C~gߊ |BHh'$:0%WA|Ƿ&vJ_x R+2,WC~RmbBo-r.ҩV#{_qUȈ"&]{:{O>{_~W'O#ήL?`nUnQVFbo_תW^-9p6;qz -b?@OvV¤Rs}Qd0B.:<[kԪ%XbqkrUޘ;wnaLAj^;k0iQ'Xkh#s=27+ָUVq]ڤN= ebGhR Q{z&.σ.}"Q:%@H+Yѓ2uw_$KG 'DpBLYQ!>yF4l&,r_BJ8j3$e"?ktjS}_G?_Lc=nj=\p +OGd_,P8餓",Rup߿z ^YF/Z?pX 쌷zK0,'HtEHur^xᅵqetfLƊ_Z'DF駟4UyW}Ժfh[]Hh˨/Dqg}V7+󳬌9iYYeŪ]Mz+=3#vꪫ.3oi_As}uJZ}#Oh/Y~/D>!$tO(Jwn+H}R2Պ'~,[2ko@/bBMj)AAKy%FiOgys60l؋.{oNӎI&VZIGir-νe{ .@W>Ī71nI:(5eʔ~/a;yx裏VW\q0d4yD`;#_^ {ĔEg{56Mk{__ĵN8Q}:^GҽޫEh[7tk_r}I,|.L-)SǏ_Ї]k}W(˹ާOOq}aE[;;0mEوܴڕ˹.c{T0\2wmt0d# z8iL1杵zoC*:ku9q# ]V9Ӛ3I~R.}Ed/1b2fΜ>y<'<j,V_ % QqSs0ي,吽 ! CmR|o=apۿۙ%"ؠ|}vbuwJ lхs9GG5JC@ꪫt<"p !RzܐPѣާp<}O`Ԁ!#گq)aVB :,H1h{DUH{~%Mk27,xuJsG=`AY'1QFZŢ.m T<AhoXTa{/RCD3ƅO<%#:ǀ́tIܯq~}\tkq02E~a@Ĺӧc?Vr9ΝzFL`0_: C|uz#uxTuc]ht|NsH˪LcΐV?r)g>誏 \ǡ8A$ҮL+W_m=jL<ZBvtJZ}Vsjf:{7^r`VsdvZEY-Yj/ Em~ Wk:ZiH+1gWśCFy |Cds֖9-wz:0/8*q󛵢at1ߑɉ< HCpj#jd=`/a饗qFx0\̛7/<dyttM~u{k>cu]wtF>pV>XPh7F2dnHZ9)zȋ64&b}~顟q]2b`h:ZcƌQCY8a # rqmz6vm5Y:jꈨ]|Qp7`D#Z6!3shW.v6:j} `Ƹk]FEtR>kDǀ&UGߨZ.sZ|j6U i#rvQuk}zFs?a |~w'ҮV[m5w}u E]]BsҡiBZWkυ/[-BH'$:DВ+ !$A7<(ȢHYJ,{V, 5VIA W\VvwНpDCn3qovcozwqp@ p8}ppJ7Ҏ>p.yf4@@{ĂyhQ&~Gg C.nfZY 8jjyE7O>znZ*/ +8 Cd,Tk]ssFVhVY1gmE/DiWbQG y}ХM]]B(K}R髮<؟K,~ !UZJ(-Z%Qoג[P5([]H>!8H9`q3h K/f͚!m|ׯN4}b$" !d8b;:BЊ4ڟӕBB"@8!B+|V|#ĽexX&M8 \Q֕T tB Hٿw񃴜Db&LЩ]{SbTlS-#ؒ{lB:@/|w:—{}v Bt嫐5OD'JM*"g'2,YYd̞F~Ar&_ʧhh@H)%\tJWyW_x QSO=t|BH駟-c箴u! $J-dBM+ 4gr%g)Q%i!D!~\!d/ EtBiҝ:u6mvN6kRV&MRgu>bjܹ, B!B+f: q,e$/߳Vz)KB D@K)gR~YPCi"jȗ#NpBi>̾A8G!BH> ٟӒߑ?-}يB'DpBX L&,[[ +X}D~+z V͕:"_5 ߎ_g tBI .>"p#B!$Բ_bΒx߷ݵӇGHDyNrx@`9wK"+hP%kL !J,Db{ 7O$!B!B!ڙLw;+\r)? #4DGR*0Д<}뽢HR5a3_ΓPC~[ /6 dFB!B! \쿞x/Io^vx)_Ym;!n-T%+Bܷ&PvP(GHI/Y}K~OgkgՌ'B]B!7/oYA ^ N{R*[Jɫ+Jx _Z)(<_iiC~'B!BB!BJڟ'߷+vB#WyVO(R+{B2lʮ ηW,YtY4B!B!BTMinrxC~[YKlDpBS^t*R2 ^TH&߷E/'ugJHB! Lʨ !B!gs5FJKoɗva ! B8!n뒵 l*ϤlҢ"QE]3ŌMўvuW='L}DHg5fwxa#FaÆ_ M:nBr5fsӶW!Nr_|q[o_wj̙o+jee9'XVy,F7n&LP3y%PSL;cvmze `R(m2HFԓJ+TѪ#տyCYc vyg۫vI 8P-rl$6vMqcWgPYHU ʷKVv #4!RJdQҡ QmBR+>"u-^Ґ%x)J:QB#GT~)De馛]%XVdO~\rIju]7;SK/"[i|n%?ϛogwQ~ꩧԅ^8 uYgTfϞB"ѣGM*v3b"dYgQʭl/Ӣ!rtόr- E[elf/$)FN{O͝;a"9d-l}#BHꫯԜ9s_B!ѻwo>S'NT/z7լYԌ3Է~B"lt4߬ؿ,A| 8Bdz RYJj4Rl5hD e?ɚ}oȃ#> T`!4 Po* 0sdt,HSm=6._ױGy߮Ly`-w)<ꅮ2M"7U'Kӻi\E@H'keVJ"[%^<爌.WBNQ/R,=[mNu/9眣va߯#R6L]~o{z:pᄏ=8餓샅_wu:&{kv"pN:UH1u=.*-kQGqNH;wǫɓ'믿^]zꨣ)~zj0)O|RG*?reh[kuY={ּQFQNN;MaܸnGQgI5f֑lb m4I\2,=+1i$^{bxW6z.hk3f  U/Zu 7CrXҞӺf6i]<,.}R͜fmqoT֜ߥ^n`UViqꪱ?lf0@~a%Ri'4nSh.:"z纎dʰyfqP+  0K8!蔅Ob@SB*k9&kVKB1֒_^[~1s7|կl[]c6\}j_~yխ[7-cǎU /psV\qE{ku첋~ G}6NuDkvZu~=5Q7pb^< `w96/GC.`߿e5dmkb6l_dMڝ@|~˥e[o Y1 U5>G;O} t}|wڈ}fĵx≺!uokvͮ#T5ύz+?~:P&XCڱxGF_[Z 0FJF.續uq.9kv!5Qisu.f8K97{Nv?rGiӚ#ԡwm ~NYjB?G絜.|2OF:ŵMs.6rAHj#9%߷ p'E@Fq-_)|f ^ fPR*}O|Ƿ~7n*[!%~xCyÃ;`W~wVK_[0a9r~gnvAV~cڴiu_;kU裏8_oDf\~EG7bĈ{=S;ƍO?C׶۶;:":#ٳgTXn%KIae>}[9zO8P8)zCG~|x衇}ZV0vkD>NP/f+ʲr.7:2G -B ~!r)4i#9Զz.79K?۟x ޜ9s}vYK954Uƍ4uKt .續defҨ|?D~ɺ'4D[ %4)rXA//%V)=+l%iVuE;&8adƒWǸ΍0s=Yf'媒>z`|`:VS#+}m|lb}W:2 Zg{UMN#p? uӧ9믿i~mf :>RVj#pEhwqFι^˘VG暒#"lnpȮD48ޯ05t{vhc\p`Ƌȵ~] 8eUe~:NfLzGb;7X:ƺUZ5olҺfyNUsZs´˜ߥmD_WVoQX, ͛N}drNk>i \[^ƍtKt Qu7ɬq[hN_߁|BH'$:er; rYO[{{4*"~t/g{L?K`=sL 쟅0C a||;Y19O];w)Wש$E "4aE ,?_A$pчr0E0j7 <ڸ$L4Y0~MDHRQs.DsH I&sR髊b5\:~+d^#w}ڎ5{nc]1֥Һf)olҺ,(ȥӞ6E6_WF}Ngy7]˹yҙެZ_ /YEi: q`RSbuW`.WqyVh6+LJ,Ċ:%B tU ƴ^800QX%'Hf?8K'Zf_ /r5  ԯ1vTVHӐnvi+qȺ 1mN)ӟa"W]uU>L_jF}5҇" 0 uXAQouoD"2"(1NՊz_2cJ82Ec($F$K[isZ4s\Q99aQ9muտio~J{Οq#/zХ/y;!!fa-ues }+2\X !ثÔP\ߚ)U~Hʰr^EKY 2&%RpxȒp3_ðW'Mn1o4]@s=M*]vE5JM2E=ZQ qU {aϷA> b7Rc`>a7Cmwh vFMzO~Dmi֑Mj+N̨, *c`u%Rqun͸渍qzW375GdA5{е5:^E'6_WF}Ngy7]˹yҙ>m[a!V+}IW !sXD^BTuQhrps~A-m̾e&[;v:cZ컊hR|fqwqƩSN9E_ 'XG`/8,@dM.0cƌ>z:Sk'4F,)oE?i֑)Kd)q;A\':rks\*s3˹|i36ɫ.s- Fǫs$F:3[Kf+ ]9dǍF+W?ӼSqU ؿ/~H$x"" ĩ)P%oXHgkЁL/Qf"%)TC~|?C[_:Vp8jp8k?OVG#K,@:VO>Q=&Oǽ;qoԩ)w"_Vy~& ä7ozwjXt>Yf;Y#\ /PmO钨,R[f%QcKYq|匨Ç#,F9yeqsazͥE6ѿ-lVV+%{F9JǍ7 X#K?뼝:'dS?'a/ZK OD6ҝʩ,REDL*$(tEokPC~R-0"6'`0*M74t54毽Z¼p [oro+k4B s-a{ݻ" 7MtU k6RkQ]t>`f~~m@@]{ .ƕ /񂽄 s+RjĉVO>d{0o&]_߿,1QkQs&v_,{ҤIz;7mڴʼѲޅ0t>huWjm|Qǿ),\ Yf^u]1-z?zyHk~7ʥ~]SǏ_́8krn\c]3FZלNq,ꫯ^}=s̖=n}dHr]rNkNV?r uѿio^ Ip ?]vez/x rNk>q# r˸AHq\Ȉ%'DpBSK -:LT~)Q,tꞥTBgMʲPcu|eo=U%wNsnN8zì !K# F%Jt .續Ms:U|BH'$:^~rE/^ۊϷv u+ {A+ʺJw`oF"Y2Q}QÀq׋Ll<"];~O?Iyn+ {ᚱosZB5a9pYyǺt^\eլkc9&]X,HTY*fs愮c˜?Ӫ߼#\ rn\%F}ܬ k9U*$gEB"@8! Rʬd)Ű@Ys< K־!mV*縑_2W[):!Bu-6e7ξA!B⚦B dt;!L|BPIn&WryUBBDžKPy_tO!BI={NG%7!B!1koq !ARFRB=k2d)@QDX}&u?Q|/|y}>'B!Im(Y B!$O9?%#`/[ND'Ml%X*d9Zh#"/Xj,V֑v}>SB!.VPB!Biuj_Ny?gI~I[Z#$"$B!B!~ڟ'߷+vB#WyVO(R+{B2lʮ ηW,YtYtRB!BlͅB!]Lݔ,w9䷕%JH4'fbTlE,eX+l'#V%Lo3&ߋ(_N,O!B!Ć e !ҕʹb7uhU)۟Uw7-2.L>!A'čx]VU^eTmVZ_S7 hgr,AF䫈򕘼+B!B!B@,tiMlEK^&JH4'č611,%\8j/`bG*ߓN߂X= Ś|/7*JC!B!B0HBnd\ι3JȗN Dݵ : q'Xi˖R,Ū"(e[FIC=y"R_ =GFT>P(5XCuޝA!zq]0P9Ii'y9D!$`vvuj'LJ$瓭3U}wS#FPÆ S/< dOso͈;geU "$:tFY(LDU^InO_/R>3ʵ(o w-|F'_}ӟT-u/kz뭷N͜9ڕ+ݺuS{챇2e4i;v u]zjuS(1vrs!K/Uz߿".LvijmY+RʣQGm*vSkGS;vլq3j3S! vyg۫vI 8P-r, BBMl͊;|ϒȧqN/D'ʪ`)5I!ѬF+[F1R;NGJm,R*t=rH駟] >3>죖Zjp57N:lL),䒡NJ+6duGt\OXbE׍7XuQ@?Qۻ^\c^xvdƍi 甬+;~SOźx9묳p &!i˴7U'KӻitZUҟC/ XK~z-n 'd-~ZOC@O+B}97ߨ;CtMsh!sZeh̊)cR~>>mܼ߯?/~.6N6 R"Z  ?Մ ??կ~<΋W_}U;}.Q7߼oW{^z]*/}ΝciMH*Dۿ[zJ8yaWR%gॐh&+uJ-?w|w㖯* s'O֑.7)EW[m}:nWW{:u'q-Пw{xjذa5 !wNhE| 7P;*}5\S"ee-z .}ww׿}V{КcÉ(ѯ_ <йˈxCήaԨQ|QNc웊2R~UeƓN:ڮPVjjc>o~0|A?ײ/#=]cƌџЈ{XrתnA :4D_o.Yflsc>1<4PQo+=k/=ƦC=T}kƢ҃i.m2k}%Nk#g饗9ךּꪜqѲK6J\dWq'x>r郮9c23]\}:Yh;ZGi=;<>*ҮKBڏި|?D~ɺ'4D[ %4)rXA//%V)=+l%iVuEz` #"`l' s{omLG@l8pçF1E~oC Cv=SsCk s^z{@\DW^yׄ24qA\^ `70Ժ_{ tdt/Db]v%3ʵ~Ƥ6۬o' ba 0ׁo\QR.ߙ?6r-::AѣG{6a7.9nwu!ثFw޹e ]vYNaG).U}LkLM&Rʱ1.l`zB:BjVsnXQHw|p/\(e:gp'6r7z>r)8~~Q 2$AMzo߾;X#j9M}ֳk_@5}ק*! 7|NHtBa)+v` (o<߷*iT~!D. e@,VnA qbbE-蠃x`Q]U"$0lv5" w}ѿ/jyu0򼭭MۈO?]*+շvvp8@aipa5;.2_[o0ӧ/>Wm04Aӽ9RyJ+T-O (?}|>P((0v~}tFy=;0lw.́(z߸ڕjpQYTTwyφ^h@~׫;[9'xh۶A_uq6{-0NMaAx/Fڍ6(]gn߱꣨z0:JM&tzǹMo4ZG_|EuPR8Oy*eZV?O+Q<ίEq##rNC<ӹ(u68\qf9G8 KGp8QI0gΜvGc!t@skVT|+d!A'čKY N]^YiR¢۬2++w<뼖J)aCmݦa97o֪֮{G+_U/ =~8 jٗ uE(Z+B -pK:Dgـ{mpp؃$Vc9`@P'|GX0$?sYf'41 _u s3D:h~q?@"aGy!mq*`o/G97zqF4\8" |F~`u۹[#<[9=DbB_EGCܛo/vgc}L{ã;Sq0oR˜oĪ>'jI[W_E/ԑqoKj2ppv[KYի1&וdWF7x>r)3K_RG(O>D6n8=\>ݻw*ή}!$t{u [;J/<)ӕXT+!h)6K~1!^T 棏>lA~P & Du1 K-}_00dw̙u^0~]ڱʂ*RJ7 3hC|Xs5Ĺs[n'>:2Қw߭9ξ(!DE(c#I8]B,Pv3#.}EvVG(ɴd`q{e)8gPGnh;,Fi"" , ;=A\qU#וdW_|Ri .ud* i裴 *tz[ ^`HremJi: K(M8=\XyBVߞ"$R)?ߖ5n@j3쯅tcH c1(wtQ`m0e"Nm4`Hq"`%8a:kBԺ_`߯ia#>%)_v~eے> |rA~"D}ȴRq8ήmf\AI=FfA_ٹQp u_׺_%t BK#W]qV|3PX@L OD#%k;JaH48\L:U/ ; q2je~=󫴞\9-3]}X bR7s!$=+_Z|HC"N[)R GR;E"ޏkZ2;,S>Skد3Nv%0bKs(>*Q%,5GH0ϥ#8e$1Rfرى{E읉ϐ`ubQIطWf/vءᖆ> +4(6z62q:?h'B+}qOp8m&=}ΓΦ@ڄdeoRH(rnO♮RG؞)ppa+\Up}FԳٮ$ m2j9G],f_ >ljڟ㶿Vg/ NivBS_9$[hqr5v&`//6(_e@~A-2;tJQFO>,LwX=o޼XCJ äCbZG=SljvmGޗXbR6fEDZyZi}LW+?g::_:vm1Z|zZ 86tЈ8xQY*8ەٯ/)m"/dHًѶ\9:B{u83m'[o)c`ݛ̙S}a$g}VFzGiqɭJwyꠃR&Lp/э1Nu]WO>d*I딬f:NvjK93Ytu6QpGy_~@R4!$v\y?2"lɯ !DBK*DJ "g)ղYiS,X&-$_Y[& :;ca*r# F}{6H=W^!p!2p6өwqv {'c=nj=\){'xN% q_"2M(oc{s_i+kN_Yl¸}ʪQ.D93p@h #Gԋ.༒LZnc|G}3|>Cz}Ħ'O:$"4]y/Q^YGqQ"qI\Yx9Dbl< P3f̨.R\%>їar-q2 eL*-}Ri\8XL=-7L5&5z$UΝ-M/B3c\ʈ|eODGRBiH@U /'LzEgB[{G]uJ?_M8Q}:()g?>V}+P{N/  c0,* Q8H Գ0 D &ɽޫNM7ݤu@){vI&t{pM6%A^tEz;L\);RSLpJ?>,sZninéo(;EqƏƴ(rNp_6 F_~rhC27^#=}Q{G{3P0:h&\#},?*lW.KYߴeHKszΥ/ԑqC(o,={~di4 ټiNG OD ٯCk[c܎BVnbZ6`/rEYW2)ЍQ R.:bάYg=U"Lofu%A k8h뀣Ԑd?yQ0vྑn6uUWSjղ.SqHw {0@Ɨ_~e#=e=}t5vXmȱh:J9ծP< ~Ϸ;Qvk(2s .J{rN c82}1=Z=!U$]s5=00[Μ9Smta}(pv)(:Mr-H8̍C?kcYQ@:V{[Wծ\ɨe%̆˸>r)3K_p#8;vs?I<9;@ڟӕB2zV\G-Ó zc]7jr刨1 T7nNyg7x#c8dq|qϫzeU\?z3ߑ:EšӪ8$(#gyflqmܸvmDڡ6V L=u eZVWR"8ɼͯ\FZG.}zε/D#aô dcrBuY^wTko ٿ}#$"<3A sSHt3˳e?.Ԑ_䗅΃VA+2i x;21L6  }28re@o(oXX駟rznvz~yrN]40ؙrN ď>(>vJ6CehI:R}衇RV8ٕʪͯG,g4 !1koq !ARFRB=k2d)@QDX}&u?Q|/|y}>Z |g:fmWO-2:U\߾}9眣ٚD,!BHg t4A{/Qg:>ӱ !ܠ7ș9-K~rܗ(tBH'$:Hmb+U!ǂYGD'^ҭb\YN #+UH0eLU@Ä t ={Tjnʔ)SNQlzo1B!fR_/D>R\rjo2ED`eitAEAAXe)ҥ.M>?Hѿ(6D4 | ("ENs^罞=NSD/"_gStwW,*5 ġ xGDGh8STMy7=ƀ9ɶW_ Fw Myմ7R:i-;쮫m(7@92J31yMrʣDGH'F~lL~ֆ|sߛЙ_IM~sPRʌRZDwJIQL\bU1 q&{"؟N~lV>8:j,2N"HuWR2l(eWSۨ22n/b3UvSc#?5,gOP|TrF&:C9RTY<|b1j!;.|lSVhu]?ߵ 6u]|h娫ωLW aʢĪzPu^Piw;2ZUɲ*ݶ?wlp- uF+@1p^ "d#etX 䡼,=H)n/{YM)pȎwnZZ9sH򝒯ik0Z{){y$Jd꩚"Z~< ȏJʯ+_qshOVln'y# P*+TWb!QSm66k6'o|7L/۬ĔhLrprhǶVZ1^)R3/A6+#tvTY7ݒO6@Cjneq'Nvi7{oؿOL/Tu$y8@m2.d(/$gd滠\J~]m+S6UˌKA4/P16m;3ɓ]`Qv~Osc(p_.OU(5abC4e^.ڑW,?^FA6۸N:瞜4i[nϭ}_i~_XcW~/t\uQ~m 'T6PDfL?$2[(HNɩ+Z6G:hD5ck_[gu KUVYŗDַk+Zk5&2y裏ϯ9sfıj\򕯸SN9ŝ~K/Ep"2nXc zy򖷠yy^ Խ0jWە@6A:*^3~:[a8@Ap'SJH+?+gsJ&k~5LX>QVzXGjX`SOqG/NN$wqtzH/| n]wr"J Mv9Cy^wu0:EqoǦ.pធP+3J?Q)m~g{'9bx ) ZOZ&6ۭZUJ2$W^q=w〱 +O>{W$wzϞO~CU~x)S.27k,W׽ye02?:jF}lR~#?1w pvJU5VS~⩊r*)%IGY%Q C?@}  ?gyW<ϒ.rk{>1rgu{'\E]俗<xn #*A`߻؟/?F>8@q2)!Rz~(>~lz^%ʯȟ5,Nyl A o}]uU"o~->p ݉'YγwHp?GAjLR}$¹RҟZN/B_|RƽJd 7|~\Gm^z%Yv{m cg]viԩS}/{"裏c9޲OA/ȵsJ+N=Ԯ<ۋE{G/#ez =5GbVdgWxbm5匂s*+5KlWdʤe7Ly)t*b,5ۉz)P3ɰRKϣr-SVb&LtwZbw!qνoNE]}tgq[{T0qV\q&%;m&eLɓ'33=2¾?p| \rX?Գ>VN8?e|ԧ ^t\=0T7G&3\PűaN)Z&6/JfdSais(׍RmɏzLĹ"5?;N)CUwa[nˈ=yJdz RRwN^qJjq&H& 6LR7 yG2o{leԐcFqȼ/9ku'[o?;\^{ ~nĉn's"籓Hd0ꫯn{h4駟Ss;o\7x_ju^{mdzTiYBOna2In+,EܻDw/Ї>T+g7LJd+_qm8e,_$V&qTul-;*{/:&r~{ps$+7^xg6ȘgGч~NRd{W0k0I;i;lo=;SۙLrgZ@(r9JS+Ȭ֯ȳX-D5ԶgOT*9&P`#5\3*dI+3B{ΗBcGhwK>n֬Y>\J ŗ*$8D8 moZOw뼓{嗽OD⼑cs+&NASrdO~})+?aY߇&.s5. +e{N"tc<=*N0q!/VH&8_u%sU\k|M)<;7^Gm 8yCVux[o5<#OrUoeځp'ā.Hmq8!sU_n^vs?>Y+[oeS峽}կ~8)   o!oes'u#?1~(G>8@q"lSS*L>TF.mejLMoT k9Y4hS=RnCF ),=W'> _B]9l8 j@2]Y<0_R>ZJnKNiuI2{ϝ>!kGދ/7ڽgRKl\;I[2׷܏ϫP\ ھʑ]s_F9AcR7ʱ}jgLxdg9Myŗd~dGap$f'9mw= ֦|pM0m+8=U%MJS}6۸moO>GH󻉔 u][nNf̘;8?okJ.uwcϻ;`/bdD/"Y'|??,rGXCzwR!={]sr9)YO7X3~#>LkQGrcuEo̽3Z훞?LN?۫"ר ?eK_\?P*_#t$W-':L6(AAU9(LɏL,k-Ӵt;#hMBI&~/b6tS+}tmj#UJ'ުnw_7}t?_~eAx<`ȭ -k!b|׎x&E7*K{Ei~(o{vyՍ{AZ(w0_:v\U .r3q%[b%x@Wi_|gǣPҙީL ⚟[Ɍgml^.2g$G8u]77M\rhӈ+8zߧ~z9kFCbe㻉'XwVsr{W@=PO}c,rC?u}<[TpU9oK_^{\rI]) U7wuG湪j7`ayW96h#7m4{:k|swPʼnru舰X}/6q!Dɼ *R-O~C9k곎(O)?b=s(SΏ/ kQ /ϛmw+FNSO/o3^ _/ۊG}>` @2V8aٖYW7x$Xqgnub꒙y 7\o2:CP[xl N4VZi捗|phvmJ^o|-ez磌vo&OrxDy77|,qӟ[s57tSO<۫g#X`O|nM6 Rz\AHpI ] /]NEd@p'UJM+(żTzzH) 7L)s<ȯ)Qwe"t} 9/}KG>㍰1lu? .pz;s 'aGy晳90^z].#qV|_{zG\p!,%jzW}Wo?Ⱥ_wHSN9ŝviug e?#iǨ~3f M;/|s%yāt1-IE]^z饞Ϛ뮻ˑ'7_ve;FsyE=Y^aA(3R%B?R2ya9n| >˗{xw?W_= Fz^o/ ҟ]q>蠃WU?eYqN z^fR\*y:\ܓ@Jةq/?p}`Gg?MLJPnj^brʤt$WdS}\k!?13A~A[h/N_|;^8$3PO>d첈NTm(IV2ಽVC@z.2>3 )c̙ dJ9t ~~]_yF{:uwqGpHO e]P"Ý2H 8d\EBT8ӪB'I'vyg}*dr-s,;ʌ qWy"NIه~nXZiyP%.#d ϳo\yխ{A\OYC|28[t^tevRT<26富k p N8e_E~_Q6iM-S#?3d@p'5 ̩&V fyrn~5Sn=UQsNK+]m}L-?%Kf{gO:3QǺ?8:,NeW_}c}햚-kff@|gz*{+cYw7VdI|etVrЂܛ#!%7t7t;s麟>p _tp?؟N~lV>hr'R:+UGJF6mTXCz 1v?G`qxg9vF~h(pd.b3,5^I|iZʪɏGQ'࿈ʹi7-mlvkAlD<&8QW(L}dÔEU90f' #?1 we@_vi{f|+RS`5'f*ӷ"X%g7|z*X?svR׊YۿG|Os] P %L((V%Q2$3POռQO@~TR~]C[2׊ϝm{|$r@yʽXer֜JUW"2#j*͆f܆D͓T>Qp*ޗz/۬ĔhLrprhǶVZ1^)R3/A6+#tvTY7ݒz=xGE'xd*:Rn_EOs2uv3VE2]Pu%)eeZ~%Dݴb."?2 ;˓heU3JM=i(#fvO,͋>xc ߍ ?1N$,pD&2fʟ!ފMx]EE.wJN]OԲI]?)]lbkk\FzlYPwRBZ^!>KUS5i_S5aR'赪{X>@AP6EqoǦ.pធP+3J?Q)m~g{'9bx ) ZOZ&6ۭZUnCD?b26vIo*9y8@ql?oxXIQc5'/"ʜR‘tU!1|?(&@lV؟/?F>8@q2)!Rz~(>~lz^%ʯȟ5({i[3^ prL$3 ΩԔ.Q\)M0ej3 өl'2 |Ћ`np&BHdR# ⪩eb`Kd_xJ;6׫B~(Ն_M EڿG+OMog2ɝi m86(M8#nPhxX"blaP۞#?Q[o|zI@ n zt*nߝqN&x# KJyf9JqfyR#3% 9$H*Zȏ{H>F ww {O ʑPR)wnSJd*#\ZԶ2\ld7H,PEo)ߍB~aI0{ W(j{?3⑑6(Nb_r{8-yn;ȯ)ZϠz@gwj&UrfgF=h少^!Ds%&̖,%|gS ?K_\?P*_#t$W-':L6(AAU9(LɏL,k-Ӵt;#!1~i7-ks#R>8@qtSJKgz3^'k~n%36RyLx,`].G>8@q~:",V⋍cfG9e2oT˓P#Ɠ|pa .'w9e#5PT)52Sտ#2u" 7$,0dB dF}&ߕQ~3swVwiNt|x!VZ,LNGrEF:Hk9 Yǵ#?S  #IE^=lP 1H+X)5d"l(TQOU>3=8-?*(?m!__,Y8rڴ}f}f8Ti3u9}@Ϳ5]kz2W6Lr*VQ9ReGڜfkJȏ{L~TP~|J6]Ϯw7|h'8@9sb2啩ﴂl(*fݬa'F~#]ANV>(TwYkn۟;mL6o{:8P/QGj ^:flP^eٞvTXk=]GvR׊YۿG|Os] P %L((V%Q2$3POռQO@~TR~]@O2@QZmϓrY<(7@\NԚS\UXfzzDMP۬5ېy݀\ 35^YʷY):hЎmb<Sf^2l(%ZWJQG~>"|(nȏ%Z??@o@`{oؿOL/Tu$y8@922.d(/$gd滠\J~]m+S6UˌKm +"##?͑ @ApxG0BtyjF' t,rюbitPamGAA~bINYhʼnLdV͔?C",2T]e.O,* S1o?ȯs5㧳fQPL)!t{*B)4b0bqD)VfZ=,X"ۣVeYM8q\>~ocscHQk\*뭃 r$y8@9ʌOrJIν^jtJCmS|vzU>cGMvӦMsgy>} \X &X]kRJq_6P)%+VeRtXM*˩2pd&AfdjkG/~ѝtInVz뭽\;q6m=s=:ϓ&Mr-<|W_}Xolm`  ,a@px_V ˙۩+7ǦǸUҮZY@>`v_4.#΄b-6V/ò*-oy˘_|Hp,~[edUSy~ݣ>?kn̙}_9^9k[x{^`lz^oQd/ыzZ f0oeLV|fz'f[&8Q3\(8RSFqELJ^6yÔ(L"RȬ7QS &XOq2y32o}[C1FA$>;S2<@m+Ywuel *!TaMƳ F>8@qltSK-~*TdX\> uTF~COY+S^z%OM/2'ew: +tIRC[[ϱ{G:v&ܙ֫&8c#\Ԋ32k*,V&9f Y9UJiF'7_a |Я`g4w4LҥwBv9i|(qr.*(y#ęeKk:З$(¢r"ժ_k!?!dҟtԩO GV[m˞oܮ?|wUW3f}so}뭿cu^zgC=~ޭXh{.wWs=}3eGÆnN2|6` 26z^ܝv+yFTu8}݅^/vomQ2F>.-|Xf)kx=0}t;'^uU}86|:ϋ.[q瘖[nae[kv$fjqJ5?PW^y\of/cZ:34OEd?_xY{&9;$2ilt^\'> ~TvVXaI)b lwlIkTt?C붺7徒e/;zg<{{'qgq>e.h6*a oc\= rz@p'1/v9=ͱ8|Gqns{~U%'S1XK2_wf-[o?;)^{[nϗ}8qbϜgɺ0]}mg\N:ɽމ{x/536裏2Iǻ8\)^|E />^-N0~ 70|nJQ?n +g}+h4駟s;k7l]'z!=yO6cW;0&WYe=믿 N'|8y^Wqy.o2dJioٞWnԐ p8 \7 w믧YfK.d9KVvQRZόў(pT#j9aHD ʩGFfJ~dʦheYk$1ے2IyVH֜p]w͑'F4Zy;loIfΜ?p~9d( pq`> qAǾ|F׬d<$9|/RwvN2icF\q;q![BUr,%PX vk섌v[=ߩcR]ZeHyvOE=We@A?wWˑP(_gbQND̛"7>눲$ӟ pى/Nwy)dJJ掼?V; Wkz~U;=N[p"ٔ:d0J-M:gwq~^~>yRZP.C)S^tZnn>3ZXi\΢7ArTYdo1)DzK>|mq;"^P FR؟*TL<8@qRԴ2KRHNUȬ׉2LLߐ|Ô =ǃ|WV>?|4\sMn0I?^3'Sjxj?:.^pZu9}Pnj^b5.S&~#"DRZ )ew>?C(o~&q.B .K&Wnr-Ϻoѝn}uӧO}aNO<[tE}Iq܅pq؉c\2| k+ݺȽ袋ܽ.ҲACIB;Y(n{׺+_?ZkQ%UA~*R# 0U8ʽ$Fi+L-2*RWgZ~3G}G-xحD BEh7x9v : Ό 70w0O?缒K]JbVsr/~{U;Sc8q$U78 6`N!xA;BUr%c-¯#ކ cH֦73sgO83P(0JX% wuGDr멊TtZj^ڐo3gjyJzꪫmvr'Ov~ݺoYnfYmfOn5tM}ꩧ_yY\-b _gyZ/<З'fu}g~ r^š$]3#S=*+e]xDsw t /ϛm8qw{tDnY|hZ_b%Gw+ P8]@jz(@K2NL(ZR͔Dh Aesy󥀏>hwꩧs=חLǫgYJ2z: կ~՝r)48!qJI_8f̘14~d2)NTqI_ٯ뾏PCro/]venM6Fsխ{Aʳj x嗽S΋ixiBꫯ>ƏcwUVEs9N +4|;>Ϝ9dͰ!fΝ Ӝd:hёXDiͼ*'yd^ *,VyZZo z _C //w +xx( :i$i+Ǘ^z]uUuxCBJ͆iy@m8U$O ,x7m4Xm8Ȏ;8w_~yOweYr,4wf{BV=W2 RXƄ.;ZUu{X)cU26Dsr9Wݺ:%W%5@?G_'SO$PKys]q[F/hBs=/&9+_[#5~Z36>>~tbc2&$*Ύ;~>YKzy*8cԩS6XxʍZX|1]u5{NQ^kNk{!}?e_#Ϲ\\ ^J*/7PT\xYkb:m!?j! =+J kod"2-Qȯ3cos|uı!=XeWXT#MQGWmAy_jwwF~@޵vR׊YۿG|Os] P %L((V%Q2$3POռQO@~TR~]@<3 vVln'y# P*+TWb!QSm66k6'o|7`,100zw؟oS=2u8ʡZjd{y$JͼePJ}D"/^SQdݐwK>0ocw#" <2gI^PL)ˢ9:K;".(׺_WʔM2c-?|2 n^i|P I4RrcFӑbE;]? 'T6PDfL?$2[(HNɩ+Z6G:~h"ϛ%k\FzlYlPL)!t{*B)4b0bqD)VfZ=,椨5.`]N9SʁAqeF'J9lo$^ /5S:UW[Z>RfUw*FFokM >W)?Α;8cy;cuŪLu?TE~9Q̤#Ȭ Qm( Z-2nĉ  w~@6ˏPⷧRXΔNMߐX)G=a^?6=mvrq~O6͝ynnɜh` ) ؟;+?3Ym@(GDr9JM2)y S^fJ;0Kv"@@п|_t't[i8xn2i$r7[}91N|Ks R}Z7G&3\PűaN)Z&6/JfdSais(׍RmɏzL>Ƒ!Ώ}knui8GdNl믲*~z[ /G}~̙3ַkbqk^xLU3 +s rҩ[[ϱ{G:v&ܙ֫&8c#\Ԋ32k*,V&9f Y9UJiF8R=wxVs ,{ꩧZ.'YfFh#8xo[_/sq>!!IC!]Jw'kGz (w)RY=BY^zA }Ir/,/I-'R Ox8+{]pOm_꿻k$I?^<VXa't*7ww {O ʑPH)Ԕ;)SO2KDj[Z.62S$UEZNz(͢7ڔF!?|sIgo{nlJn؊v~7<ܾycw@svv|K/%a_ЭaUoܧydGF~ڄ8Q|YNLxdq HkF~#ަ|kmʇ ,c<|]w՝r3fp|9XfeԩS}o}[.sG}/ǼM6$qz~/w\r+;\ܢlF~wO2ŝxnM7mVWZi9%}=P7}tw;K/=~l^ޕW^Wѱwwt\2=v'?9ƥLR}$9쳴%c=\>ۏm8nGup?^,Bn"g>W[o^{5zXor[g_}?.R?6 c4 ϊ:jh!|#mLlAG|Ae5|UrfgF=h少^!Ds%&̖,%|gUV1^j2B2V[EYM0-޹+{>N;ͽ^{;Zk-wǻ-rNnWmǕ8Ύ;8&̖^DnQ u؉UW]խ:C8e~wqGvZtEqnn;[,Ǔ%`qne exR[ndz,+N9я~1KO}S~F/b-每}^ȹfqSv8@qtSJKgz3^'k~n%36RyLxɇi4x5tܑ Cq׿v={93o] EJsEKd9/;%;S [f͚'9`Ԓ]x uz'w]w7W&g}nqz>u /c<|oK׋6 p9~Rlg%Cd ,q}{sI[_ߖO~R>-2)}hlvs%|۩~沿gd|ӟt螓{?;S}fv'r~%@FƤY/}k`01%cCϗGPڰ0؟+(NӯCGU|q ('LMPjy^SuDxOD~>~+n9$9s,v-!,u]Y'@P\yGѣ*厖p뮛Vp!3 }syc_XolKW1s8" !G(vÕخqwvY!Up<).RZ5-r}fw99gh㥕!sw廜ɚ(NVfQyɩ:RoR2x_S2>'5!0C\sAy>@i;@4o:>-2 n~?38od8o6߫Xw];)]%e 8*h,gpTx[Oe;Hݍ$ o^(I֦73sgO83P(0JX%j滺#LTEe*:-5Swmȷy3<%1'o{챖8]d%?ɐ.pqKV8ʟo^뮼JwR*:1 7?|ӧ7{_yjG+3d, tn.3=Rd~TI2#p(=uJr1B .K&<x>W\aG?QK`s/O8[LJPndr^R(&FUZqb$Frj'DKGmhq8C^;{ɒx} A+mqHvʼnal0Fu-z]m>k/~ ߋ5UQvE?CqUf'!UB<\pAߟy-_x'y8.\W_ĉ}<伅u7pe|ۂ"-nsr6rӦMs{챇;묳3' }M80f5E#3sȯs2ȵ4'8@qt$3Q`Z9`OO>{gg ?C<3}$=}G2]o7|,zюcOڭnicA~V< 2~5nM6A@o 0q`[7R:i-;쮫m(7@92J31yMrʣDGH'F~lL~ֆ|)w?ov{:us=37X*e(zsp7!:ܘp%CYA).cRΙdKXw&vf,Yd=A,^V*""vB6TVEZZZ["D33{ι9l5{9gwÇUVU}|n9s|n_H guYtG>w}c~? vXy?xw}(N9sЌ3L?/E裏~Kv~Μ9=ڇߤ?w@9Èmc8O^r*ZQRfNr#-k(%U Ĕ/, dYd 566,h. ^rSΚlr+$90]}NBZ[ v.O >WqQӚX= >\=!NYmi>;i!gԲ.Kzg~k&h2۟w7p|h%P$px(PEy3 ,+ʩ[QYІ|_*D>ŔOPo[d E'i-PeKW<`8HFV<8J:"KF{0O 䶼Z=D#k'=Xpm!ΙԕjdTPۿIrx"k'!_:wl p9A=Rsb% q]%۲J2@"R[; g/J@]`7o=S}5Үr܋ned@C [f]_$TY3b[PNG$>U5ZQx^kb#Q8H$RYyJɾ'YhdZpQ|7eAwkG@^j[ rzfE8 Udʟ!rUxFD9.'!'#~e`9fԂ{b,Q~S~:]a-b8 O Y "H(W?'^ˇ^VE}skiT|@=ܐ <K\V;-- H8$y 8HU\RPNA3܏CJdŶ2Z~ ji˧J P\@ap +ǰ:UlNS!W5"Uw2)2j~⁈"QFB ;jdZIڨl=GVD\~n1Ba*!PR|r}W׽JE_[`w.qgUV|zj["dx*#%:QeRɳJR$"GWQT@!iz?ߞUr@p⣣H(.O|UJd:Ȱ ^TJ~D  ٍA4&P}C<67aUw;@&IN*H PZN)uB EF,m{ /b{Y4-R> ?(|?|"ݺuI&Q޽w^\7Zd2v7t'7/sOݜ)S.b^?t饗gMw͝;y睒tݜ.]B`@Rz0>h̺_p!&jQ! au= qG#z #2)lqG9<t{J!?S|^Ap;?S裏*rWXA/n^V\Y7燳+KW\A?<kы/HV*ɺ'uc=X9-1cƘ՞gZgiuLkWmQQ $CGzɧH2]SY?TQyB~F(d-߭!l 6'aÆn_=9[*=dr-#?mGuTu?9s&]{f_1cJ߶=C?9~tuёGiJyW7L?㎣Ç{q '`wĈ>-bnk>6m߼/<XN2xq?_JdРA\c[`9~ˌb]2g;Txt뭷Ҍ3RڪY^>}n~k?.l+}+3>|n؆ b< :僸Bvs9ʬ 8co;Ɵ<{<:i]w5׃{キ9̍8`sTNR.w4Il?P\^!8ѯCFV|r q'"kjQ2zL8ь)|͒bg;h^?Cy~g /`㠃2&džz>8('4zhtM+x/婧2qW\-Zں~!zVC t7oq֜uYO]|_~9Ϛ|%&L0Ỹ>hh2$,;yuϊ ;yr5kLaf[[dgJqcOz慯 #Τn+kCdmwq(ꪫs Ovz?sGkFW\qE^.Aw})wڵ&K'3s93syeؙK/c=f Q ;Frj_9" 2pF鷾KXeߛsb ߶'<^?|pg<{#96:lN${82 JMH/]2W 1eQ.%#ϤPlOfrwbȗ1Nʀ8M/?p\墰NC.;bi}?-Mro،j(Z g.g.?e~ؼXںg !f 6d{SN:LzOc q~'+ӼeQ{l BDi̍|נ }n(h}.KrF}@ Uf.*}1J(m`ZJ~(ğgT/F A:>-E/roLRQ7g]β德=06mN%[N3fZpOJs[cF1KwX2\̀ɶ';O*xy{}Nri\Şj裴tYcRMrH_vb$xU| &xO0(GYFDBTC!%Z2U,)BdW%E초T`R:;ڏ7 3%ӧO7q<yя~#Hg.ωyVwuqy^Iƒ?+FqvvG0$7vTv2կ~U/)ΜLri_jJeG@@]ڞ7|Oe d:@@|d$(0H)OWeRB$w "\'G~g[J۷owM_"W:4-Erovmt0+[)%;S{qzL?Or2<Ϲt孷jw[ywW\kl^.Io4iva%= ϕc=fN8gsitꩧұK[lE6lXW^yd۶C]w\;w-Ҕꫯ*v9;y>hs=qO? ݻhv0_2N[kPR+LGT3@R؟;N*\<GF9܉# PjRY< ˊkY~Q}CV>JxU/㕳ؙy '/~ 袋3g'xպw]~=ZϋvtM&A7p]yƨCox+pmGM+H޽z+]s5tUWX0aWv\qtLRU(|NW_Mgy3'|Bwygk .<|N9cf͢oє`f'gȻ'LoRX,e͚5tyQ߿?7d Xnvu٩¥Pý|?-;1™{ g̗^zΝk\y\"8fXe˖TXbgg^p%˶M<`r|nmi^Tk>[s-beUJ~cG;4ytAtGkk|/[eۺGq&o{Fc^ϥ4}y_y/XgqLzʡS$(IuGT#"35Moϥ*\׽mtx@2QJ\sG,6KFyO&U֪I 'X%?W|@yhzv1ov8*x=vhuTV1 ;ʸ'x -\}ߘB8T|N g{B#ɘ]*wye٩ g6dݻ C{4~衇:s6s}/Ge6ը|RFQA2Ȝi[ߜE|嗛,K>s뮻~R\`rN3g;`%n!8uFU/t_hwTr ұ-TLʡx*ìPe#}wODC[.0d\z{-sRh"H_==S&~nFԎba< ,0Jr;b#WUq@| B,Dd(/$ק+3\3B~Fl+6ha#Q5Ú5k+;@ _߰iwU_o\@ d@2 r r~ĵhU|X (= (ާ__iw#jPpϛw2)2j~⁈"QFB ;jdZIڨl=Y`p@?؟/mC> pP(,R%7QUOWIk@>~ca.|PeŇW(8H"H)8]*]U&%*::w\K_x J re QJ5gJ$ߩ0( NC֪P~$'zP$pEJS*NGknD+GDeŶFE4&Z p%R<%{>/zVmȴ}Ir,/|/|øv~ϝ;ϟOW_}5 864nnϥg|_ @P*wS(J"#\ZqĶB=W To@,t[E) XC>UEiui%uҜ9shܸqzryLZ`ڴixf͚I\s.8*4N׭Rs(2%? (\<W/0w8vۓ)~L{E)ҫW/n1&L)SP~^wٲepB>_~K=:t|2Ld!C~ZZ$큌f@-ϔ]/m^ٟӶGvGmP$p %l4"tYOe;P)gG |䓒mlzQ޽iС4f JN>dcV,uO?t:iɒ%Pv>c 1j֖Z gBJ~Kd"$An(bdFSwR |GM&5$|bRk_va'[oEW`U y =~'%-P> pEBiL@%%{Pv>zMBٺ"T}F:RK.2?r-cm d={4Q ޭ/_FjWxN` ʧ@|~2"sc\g;e^TvOe$:u*544лK_{ 70:\2yܹ4i$w̙to~/Is)^*a)W_M7|3g?;]˜9sg[o[of̘Ѽ.}>3ݻoxڪګl^ zpN;n&3Ʒ~;]tEv>!B?ͺ]wy䑦{[p%>Y.q7n\sw9ԷotIFs|gV*x_8kn+~H2YgemJ-wMynj :;v,8bwm7@v`tRΝS88O9Gl@7K/6۬Rt]ra";792CWmڅl^F]t|vt2'pq ;Jc0`YO>;y>h:SiM61ry 9ǝw[c=ļO>i>\r m6f?3@;όG 8ϟO ό O`^%6s෿mjȐ!{Isĝ@S} &xHZ0LLFr9JP^BױGBWLNrp^0 )>P6yGg>3v n/gBsF5ұk=;,^=G>s=^.9zso[ZhQw.\hvYjy/Kyy'Z3grv]΂wĈtk:G5a'׿w})sܼ; }Yiwl;=ۏfϞmAD'N,X{s/;y'4f2 ȗ3tv̳ӛO~b6t̫y=4?ةEt>A9YT)Um`w@  ÁTpPjGEzR(r)}&b{2Cݍpԗ[S~G?Tpɓ[nƑh޳QF ԩNfggsˑ/]yiή۔>^l]x Sf ޡCZ ;)WF3׹t;;m?#ذ#.e>Fpj&#O?5oqlW_}|@ζes=g{+%Kmwu0[gLe]f9s%V}.ors|M3< Xlv^|f#Jksy|N9P/Rܐ}43'17*&,T\۲J~Bp(FVrRDl>˨>"ʭ"j.iZ*E>!_gGQ=ElsƵ0v&['m{Y!( opz뭗_jΦռͯm`LJfG_|svnrxS@Rde>"R^R |_hT|v<[lymdc^rYQXglvqd.!e̳,\d7eI9% P[sd92΄?\֛Who33l0. O)Vpf&J!*q#ߗ,$ #)vNkn@MA(@ڞ7|Oe d:@@|d$(0H)OWeRB$w "\'G~gR`̘1͙[o5?l^/.{w:uMOdܧ/O6vi}+bϑt>ڲ~[A;ٷvۂdsO3fZf _Kbǰy8 m_iCqPS?p< Pw 쿎xjR>)gwFl><bd-2]`eGGqT_|WԘbIݽf7eȑMW>O>MHͣGi?{좷UVNL&q7?qm-2m]{ۊ\ =u/c38#K0s 8$Wis}5GGP-lIV[uGG> prR RrDwBIZ:*RΉPx(Ӓ-@WgA {^dw6^LoemZS#?؜/x%۷ow__o5\cs)>:m|E.oVj+gvZ,KJ(4WMC "(!\a8[|@ p5r'P2+;BJf:*,+eG [(㘌 7ܐ d^?OG. ܹsKoTw~pV3uP_ev1ܫ=*K7xɂO wm\? o>7ty=u@ 3P"ACޔNŋ7*νLMkCj_"V$# i͍ێΝKv]~Jd\v(˽Warx&%l pPT"饝G[֊=QV%J&߉)_>X,ɰW\dp.岌7tӲ3;>cz]vnݺ56i${s_R`.nok^|4`Vy߉'>±;p@:Sc5i{g^~~iQ.]W4)騣]6 >:Ӛ5kJ2;Ҡ౱ͭva(5rvTf3./p!* ,TQ^L*Ȭ*rVafzV!7!W O1xx)T>H-kN|qr2;aSV/+?|f`'Lo( 0r83.__nHgqG]w]rD|Zǎ;se 7`3Ys '/~ s\Ҝ ;|~1~b2vZKW_}5y<_ywyg)͕~+,K}J{^1ӟӗ.c9#خ^B^|.i {O?P[KRkr۟KmU6{ f+ddŃ#"XlTMn_kcP咟bR>HQk;oy+l9`g;1gr>}{[\9dZpYB1KW^1!C.5/فhߕ;ؖ/_nyĈF_b#:Mxw 89,wŊtgk>Sܥ\wV߹k[n1~|A-/qr68zK/rmoy8suGb}mmG 7vs9Icnqc7r_S?UnnO> Dȷ,f+ y+Ge(ؖUp=G I(?S|Q`ٲe&T̙3%}[Y٣Yg{&v&7N-޿ӧOjD=3 s̡3fn^8cGm]v.%W.rya's9ǔsq`/{駟9;gc})'x<(mȚ{?ˁ|mC5YP sc1ը|P_EY(lŋv0LK ?N=뻭bÎ4|.Yxy.%gZtqf0;!T|.܀<$Z@?֋9@:+W%\(8HtlK(r(z0+hF(E%8j_QdK>/9Tj+Gz;,! @2BB,Dd(/$ק+3\3B~Fl+6ha#(w`5+Gc@g/D'SJM=*F(F&#֪b),e4o#WNo?, >T?Q[ψ(3G$d|_|/;~[^z%zL_xAk[ =1()?0 71B I'{,b$Ex/P赴g*X>ĵ1aۿӒ諭2=@ɀdX* >ӽk>xtJVl+#|T( ߢ8Ű1NۿӔFE? >7 %eRdԘ'֗E"v"#ȴQmz&~$A$\~n1Ba*!PR|r}W׽JE_[V r?V~>C+W $S\@.Q\*MUe p%R<%{>/zVmȴ}Ir,/|/|#[I\ {F6Pεr EPdR+V(* "VnKH"Scв`_'V9m{?T⎒F .+Fd~SDRryz|?B~HT" *(oQf/m^ٟӶGvGmP$p %l4"tYOe;P)gG |䓒~*)YZ gBJ~Kd"$An(bdFSwR |GM&5$|d"g7Mj_!Iw GFiPZ2;IExɞ {O^PzUjO18:dD+^k*Ǹw""%?+x-#I>JP?_2\Ծ)1BIe+ZOe諾!YUJ=!ө2T> 6[C o:|x< "BFIןH.G)QԋP:P(jI"KU+8Hp+e$+Q^db ʨ\JFDI؞Pw#Ĕ/o8Q.x)i \.m%?TPeb8 #QD+P9o)H6SeTOS5@-"3((!n;j?W|_*Gw>\<'Tox\~W,#"}GWԋP-*!ߎ?~L4 !߭{*DD$p##HEIFJy꽌(*'y#+ZߺtOٝۆ rxK qW=X8B9BQ#}%U35&?,B>"@ `Jj-Zr<<1א+R'+JFyyꯣ"2-{u&PC@k="`(o1@|dԘʝ8B@*e먰w7nU7 ~B1#MJ @< >z-˩hEEJ*K;m {J|Ww+LS|(X>2 `l3M_SRTbJL(8HFFUXBTYUԭ̨BnhC"b'R|RC .^6< @< Y`(%.#%#<'Dg*kcP咟bR>Ppwn9rw{IȗN Be1[$xNPeCXI|?*C\D Ŷ C=9 ?NBbR>"C !5es)%"a<@ p@++Z#h/WDSvYM/[|_O5*8 AM=`z -^aY*:@@2c[*@t/_CUYD3B)/GQ""+|\aDrV;|_wTYBdBY=Q^IOW gVfV(m 2GVd-^t8$Bت[)8%?C(1_,O"{UJ1P6MFUwSY~{j d `Ԏ|_9J"8*2SOdGEo*K<#sDf}] 2o\I-A'=fa &pP(!d}"Brs{|heU1|?LКW77bwZ][pH p B}g7q-ڇONɊme@|qvӖO*`[W?שbwڿG&]q}Lx "HDPŽZdV6-[ՃY@G#`.| @|BHTW(G~V)>z^%"䯭@=@UE?sa.|PeŇW(8H"H)8]*]U&%*W% ["[fs)%W~'B> pG(@;)OB.K8b[d7H X^D-"gOJ,ߏ!jD_'V9m{?T⎒F .+Fd~SDRryz|?B~HT"@h"7'm߫6s(ӎp#SU$. ,rG*(<}!?#֐|RjWG#Gnݺa0@lzXAWj  @|d %3T Bzd5 e몇PqH>HvF 6&L@ÇL&A4gΜV駟XƍѣGS1y߿#iɉ7m4sfEPœ郡:!р.-01tpWj{(55:$cFW|;y\6ι*dZO sv T?W>EpDax:C܉(DZp{ⵌ('N^zQGEկ?q ]~c9zA"T ^_~9 bK+9ru/g=vdxMKצ%[8qa-MYn@_qBvMO 5&'!ڮS.Ds ;@u0A2?47sx>m 2u빱qz9hE 6^Zvrkk*w m9ٰͫdNYA}['/W_\fQQQY@|Ԥ2RHDG'q2U*%c{[T|J*%ГӧOis>}'fSN;Х^Jo~C'|rr=\f=LBKQ.Xpi!|L28ħNq8c㏧%KজC#Ӵr׹{=2WU^M \Lci>V^ujr{xjܬozeDO#ZDr=oMд%E_vZj;z5sG*粹~eDF^FeS͍uʵ0⋭>뮻v^{Eoy8çON3gΤo\GR]v8 [oիqCN9ԔsXHe*":qCz44iKauS* ;I#=Ŧi쥯dжv~W[淼^'Tve4JokF;JpZ9ѭrUWs~Yt$PTiq~`HpkS &wT.+2(gR~('3G};1ys9N_y}# ]s6Pq}0z~cˈ豥D/%+v)3.-VeשzgV2<Fc{ѧ;/N-ܨ5n҇=K(}Nt;D}-$\AR{5E:P{ysTjӳqtZ4'Hch;V^/yuN8Wܱ=iMjg<"96ـrz)]Y79;sԋU\Ӗ{GD#R6"K9ȬJ) ֈy+^7ג2/=8Zo'q]jmL]6 WVel_zo[_LMw{61f|/k^m9׫niƼZ΋do[ _EC}nw%%,T\۲J~Bp(FVrRDkYgGDT@Dͅ":-PKȧ"L(>Jnhh2,rhOo6>餓\.#}gҤIj\{j+3p|ch3lذk_}f.9sǐ5gV P\5UҀ{N/gk3ǏOxӢk!8s^.^}#8TG{ĕW^I?ޟ$ 2k5.X܃x]_|pU7a1iuN4o~lmWf(ev-i,8\^'j.g>ʍ4ּ0&}&M.+6UWAsy"-?|7N#hœ)<֞MJv.>=l\opiјe;]qܼd 5ESҢ'QXwjz D'o(сFB> Xkn歓zY9mF47Qqn:)עqzmI+NKru-Ğ-z^g9=;zXzfÉfGI-+,ؕKsy6[7miqwÈJt(ouIsoܸymwnL 3z:fNsF4:V ܘ;w/yd`u[@zMǻ^շ35l㎲_\I}Ç@Lp̔~n2'q 'YFDBTC!%Z2U,)B~9YG~vw}Y+p!S.Ύ 6؀omYu=vXξkjܿcΔלY{Ǡd̘1f[/r `>}KL&.|gf?yG{M87hg=?Ku Jl 9޿~q]?ra1;79^f$NQZt_졇gyT7 \ IǙ^ѣG.bZ3=?\w62󝏙!C=hfۼC֕N;O?{1 EvnQLvd.;Er"ۃ8OCuDVk:e\wܢv*O]زdR.[quO]L}}o>&cX'ڬϺ5jXTC1hhervčݼ}4~ MۥOtv_&޺7g>=so5ϻCFq樚5|=hMcӜ);_cloS }޲⸞mM^ohWuZߠ }tVoA? w{En|w u ;sM^w-TY bP2ذ+сu˴A]h-32/&3Y.}R\Ξӽ"ZyoЖC_uf1аW_v6'VW?r8hdw ݳhUa2vS#("DSsנkzҲxntoߡ.kn]s{l49X fkmJIdKAD2H >2TThˈ2)r;ꁁigΓ#?[3E Yf)M9άY3P8&.~f f_Wĉ[x2`'믿ޜYU -Z^O_|0WQOJ{o*[k!8~& .wygsi~nT`5w;l>櫮8z})[2Πh';vbݥ3F5>YKJ%kCg>?pXzfey(EN-? ˠynDfZ==P55D_'b%};h6۱rxX4ma`2Pǂ˗›nJ?a˱_dY.0b777>w,1nwWDo|N/nZ|)4ZMD+j5YغQK3ײpBL ')6'ڹ:k:9M`>}{uӲrm5[+:{8#lޅ]e@JVΒm˶绳w:w?;ۗd  ,$Y$% `Hf첁 3~=ӯߛ7aT}&~]]]U=L_;ZOZ6vg @H4x (Yčt%Q ˶@OwCpUn'uA[pBvWlʼ WV]EAe, CAÜoXn7\0ܼ\6pIA+zvJ5?SyeF,^O INčQUoBuP=Wxn Q&=ؘ: ~=vu=Q;~/F1W;0< CQEOێ}4?{›$^ % _ S4VAf~ ɣav@y/\$6Bg`?~ƍbl 8tz\6rOD`ogc ^8O)9U  CR{~ 1r%w۹L߿]gA[YЏSs9H?4vB͏?A忇_E˺}?_xV 4@Jw"5v{eu9d=ghOD1sτldð)b~i^d.#wt@ !-2 ! @| IL =&IuW^ 夜|RqF||\ٙE`8{y睘/z;W*za?p7k?裘 9̳΀@F&tߣ! Ue4:! \46dG#4raoҥ߄,>#[`915⥗^Jw_}UދG4IcccHC;\cd𹦦&^ǫ4neuuü=f6Bq{??: IP#MFöN >.FC!y^VW™!zo]GGv{?®(7 j2>S^fIz];~qVvWdGf)^mAvRK3(۬nra T5@Us/c)v^j]Sf3fl yW }%=>jS2vyFXsHmqc4ޒ>bʤa`zծv,PV}[>n9 .7}mJw;̏wx)qXcvP&8t l;703 (+qn$;^#ؒzmr&h>s2u1i&srYnJ0:A4~`yAwv@?vC7U3(mɾHbcIáb g]v^$yVA|v: }j6@W0V`GߧzO  !f)7(gC|d&;T^=Ʋ| Jp)c^rL )z}[bލhh100.F9o6v IETWW3Z{5 mo o-޽:=-BH5~U{k, 5Q hiTǎcS);&4cuaV5bPb6s!.)N׿C˩Գh9o7[!6%i픪a>YðCm%Sc|WV/R既[ߢeɻ(yD~o0q\ʳ !?E=TvPt؝,PROc pX{~WgxntZ}tN.Qr+虔 K!tl}{B|@ϖ4\ :@ yuƠud=of<lLPwW7຃1C0JO|rGy6(#$Bz 8քާlD5[Ǹ|K5<Q*:>o7Ҥ//,<+!7o 7n|}Y)=x bnnal}>=14MGcE+F$11Xܻ;G>&y<[o IKHq{~'`8Xj>ˆONߋn;|L 9O.dc!MՑMc,ϰc!ٳhe2\H'3As.`WcM6$;alLTI?&99eLDzɓK6EVƳKAG4s4Ȣo4DZ|I9qA! .e9D%_)Gʾޏ,{o;Y'>ې|s5<Уsxq$r]'#tu%,1tz~Avvueֿl˩c0*19d$O_YS鴗@ Q \O[k_ ü C. | }NG@ A, 2B@zQN)/uELa%,O .&̀RNL9.# ii}=_';e cbE~Yb4[_S wG$gs1![fǜh;3wyͦ-1^'Pχ<0 =T0|v≗ߜ~OۨgxW3^ۻ9`{#Cz1o;Aa. ì0 Q1%$?r>9or sFhpW4tOTxze}ů,Qk.ژk繐'e*ǀ6;Hucs9{A 3&iϿtGc.l:W70]mu]qJM -pM9+yZuxhrq z"ͿT$O4ܔMT+.4Z{_v80n 3p?x\i@HsX@ dUG&..qK>WoPyCN:\3m*}%! `Ho~|̫+Bƽ+Y}QOXÇCww[A!OXjiLq}^Є0|4yd={~n477\Λ7˗__u]7";Ƃl`C{ߝ1z+I5l˻-,o6kvc CaZʳ 4bͽQn4힤ѩ%x9:'K?,y[کȏ7ۄxnd71ՐC*RHkFKMM )vS8R{ ,w;mMM'FQ%9FGcP,1lN !ڃ1:Y@0Y؂,,?|;}F𨆾݅IZ @p!2 :qfƐN ѐ&jSyJ~$72Hʇ&0./̙3TUU r]4" ,z QXX N@/Bx3{饗&V C%K0 286У\/zK |bDn=s΍160\;P:t `mR!kkkW&Mb9Qb]®gFv]v圫cC(> {* w E٩dЕm)ﵳɶĄsKs [IF;(Wi:0*0j+ʡw"?:Ivmd_Ɯ0UCIDr|NF~*^^g}s裩7/lM#o =/VƂI^C7CI#/C2Sja^I!C|,|3nMBs4*Xޗx W]u3< s!w]]{żhp]hۿ[W_.\nV[㊊ Ƈ??KVas4A??a\ǏzP]tQ|Q/f_yg6mb@ W駟 7xcDw}~p\YY ^L 7 kg— 9mu:+O2yBjh8%09 kJ6ug[ (> f:5EYwdE a|~Lb߳{~gWpRNlV aoX<`j>L̒mk .czv?Ν~E?jC 0HIyNᲁcF6(d= ҟA@ yXCeU ""N dٰmh@#C+ 1I4 M/9E6SdA7\)zfp"~o['?f^`^bEB׳Wiя~_ŞC塏th<ֿ}sYY⋎e1kc}{?L>= WN(Įn}_\\lG SO}vB&1?t ڢ=* ?˖-+Wh8GH 4ؾ}0~HorΟ E"qKqഉ3 dfsgmfs2\]ܰ{+m\Þ{ذ7PJuD^=?'x5J~ކCP?;36M=3> (m>^|~)_{#ϱÛ9eoo<{pA_i:zǕ'? mğU賶%K\ƃ1RgUN"QDгYِdՉώ̆꣣]RxEYS|nll ~ i~Ҥ\_~z>+䎷%-LeLe 2=1xj ד4gm8岞b|qp֤<g@ cּ<Gw:#J.pC8 E 2oS&~t T&Iħ>)&&׀D? =˔&ۨtɦo} |k.sbfjD`^<7l >[PPڵko ǎq#4adJɉ@#< VhXw4w.7h` ,P ߑlޟ w3cLg!xj*?c 3gNL~Y\N3zۣgKX_>Cp;LڛL;2ZgKhFgG7m۶1 P=ӟ4>;+JG:fCB_q]hwC猽P!&>b !jx@=b tziA6OfM: Ή1Msi €l#YeS6@n넩Z؁jNFܞ0T޿ݣ7s: C{ag> lH9Y#aoN*^}rnd`D[sвC煌rLC3~HB>F{!!sMnj 5rQom ݯf2b]r5:wq=TsgsCq(|t fh ;?[-MpKn=9+nsJ5e=)e "@yv4t >-J4Ap! Cӄ?'&2)QFO *TL?:B!fַŌKhlCo 匞h\rš5k(zbWgFoy(^03~QpǬge{?hqѳSU+{k(s{lz{A:}'&9)hz;a}LFQFQ4vCPnw.;:v.16B?M~U~0lÍ:naޖص[y$6{Yu>ozola`+lzQyP#||UJCu̸X:gXIG\E=xR m*^Wy:ye9GoFy]#&IނC ~[\^{A/S{8LyOS'647sFF5Pm{}4(>o+Yn~S-_j-y.ϟ\W5C0ı-^:ŦﴺRnM&խIlAq nw ,z߻aca?f26;'C2(Gc5^赎|#E4|g@ '՘);<6lf@ _!_+v:5,qi B0IH\!8J'@\΄_z//.ri1{DGk٦ Cp_wu_"HȞh@kk+g"Cwy,mY?묳X4cW_}5a @8D2^ @ @vKc٢Szˇ @2Gɋ@ d'2LeҏHSM ьE+Sҳ*t!Sm0RRoe]zcga(,<~XJ MQ$~򓟰Co&q4|RԘ_*/J'@:Q$l(|L$ũxORh:,@HhĜǘC󰣡pPoo~xY$0ʕ+Y4L,;,!@ }pt??} }N S@ UQ>L|ryc\U*}8O -#իs[+wpǦMD Z:,H @ ;/@CKiTM%WxDy@Hd'2_9鮨D=e(aRta%_ ʄ ҉C)7&)g@ gZ@ @fc72')rB@ 2C=)5 J!A:<(jX"O^M@ @ 'xV: +æo?œԫ!E@`=-MZfi(eń&3toDs,,={PC?"n&~x'&HSA @ al';aeՒW9tw6a }ِxG5 B 8CDLjP+W*'&ר MDLb"%kNe߁oѧ?'@ ᤀF!_0?{@Q>@Hd'2XJmT wNNĔ@?@ @ ~N6 o?g{]o*B')>"gj@ @ @ ,`D?ũ!Ѷwy!E@ I/y NsEdjXEn(Mer6a~@U1DJ''@ 0hB+ B 8>R|˯9&#j=ÐB 2 S7IՔJy;NG}P1!*I'@ 0`f:##>(}4@p!}ȧ@dO /9'Xg;)Al}T}@ FS@87AȎLa@@ <L]53(;$|2@ a|aT&o:4A@'05a\245<# }SG@&&|4iӠ;//3%ELgLq9[A.iCIGgjewe #ѻ: I`EQ25M(+bHOOY6">|a(LgoНw@ I_XK/ Zo:o%^~̸pN=|V!te#임wl{T;^wYםW=ݼs*$@ zwgs@ 2-"d$Op>iR?I/5dzDR.% >duP?4G2giy{5oVue;q7ÁZw^v.;Ds 뮁}g:^ɍ(MMPza ʏ͚E=93y4 7@ڵPPx81t s-">|Na{iE067WX7i 'uD#KBݕWhAM7v@^. @W@X*{UZ#8NÍagÞJ0~?/ȏZ又uiB 0`eEm?7ýx4@p!}D &$h*[ [~巀GD'W­GSst:-\#>@_7\f}1 !?yan @Nj(km$9""/nUw@#Pu~sQ#3F16煚\K7n?)|nJ>1xlgЫ0 [8O} Lo^g-+|_89У$fY<f??0 p %Rw!sW ch ܵ `|*pl v(=z_h{$s@ &5i;_:Ƀ\8Ap!}'@9&OhL>廀&T䆲`@H'|>w><{iRCz\hV+q>:\t!t@_Q!Ӈ۾ƗoЙKɃw6n /:'X ezrNO&" UWzOgy,$飛,>1xm>"(,)-4ے:>~Y$h眝!tżkls 8L pq]7;Qסl"9W嗹mG]wUaloZFgzg|zrm^RCKk@c{l n۞ԐF]g]0{DcǬ#Q֡nuɁǡ{ ֽb &[g1-[UWA @ w&NI-jx>(liL-OCܧ,, i3 6 b(9B"Bߧ1f Vt4bSG?PX qM_zЉ!k fh< yqBTVNX]46>0BMա1 MrGcYz8e{+J(]1Vol/#ike>A|lAsk7sxhd/f9^ǟu0/ 0?0[aXڶ *zfZʫܠFhJ1y9 g'dVz0ۉ:V֓}'-O\Jԓs>|| x=ǍPē|P~gH`8WuM Ѐ,ɕ8k7\$gr2| 㗍q+1a#ҏ>byk[\lM㪧Y?\6ƗnGȣyuOohvY29s_.Cxt|uc9sCwy]f oȼ΅/Bsk06ҟ>CQ')+'.)͡0<`ڶ aޯ{a@sucB [B^W ,V0ppо61=Mǵ y.* ^{=R k#-uqN\w//eş۫%V^Mͱ:( {b[Aƒd Syc|c0q}yۛv fFo/e-PhT};}:};J}lj_L ыƳ;lwA쳲;\oAwzz.=]Pc9><\5s*uqu:>\םt]{u-x A]g?@QK:̍(0A!,sv&[m9kܽcsr=̡Zam@cj$^-MsN]S \u%W@ )e"ҴzC*{u ,ރ?o( @ alloJ'~T1xgB?BJ 2TTԉ ,R"GԺ~)Oa4 btS9‹[07Y$a2MS\2x.,B7&l3|==% )9ѫ+ 4| f/@nwu1o"G7vS"03.z:,;K,eM`tY.ɖ.ߚZ46 36OBswx oˌ-#sZW$ 2QtAxO8 )âkیtNF&Kgvvg/0cIj;>-H4楊≠пhd6(ޜ{Ќ5Թ3'u|޻BFa;;cIE~QqXM7D?%#)zzEnuv+qke(h<^_dF9 ۢEE53ta&麦f^hb޴}w"l+Ĺ; ^0pp濄=^u5QΪ)|NQ05czr{{ҳ tP<˝I`ƲlA.mDrY;7s*lA @ cg4žiYa!>hO R FS`r˔~'Ȱ'Sf@)'&~tЇ4郴xJlAp)<<'3Xy8'Jh*wP%rg^z n"?B55_XrsS5| 7cPbsV #yYD7$#2}0=LafFn e#veFj4l[lJ,岸1SA0FL Pmp:j̜ȋzXc^v\tZ$e9Xyw3̮Nc9Yp=ØLOAm@.of!G|hg,^ud/D>NϰruX: l=IOvu%eXi4JMg㝑T?d}iK&w:477!9e ޖ 1}8R/5YGLOT/cXq']{B>ccM9*Ó'u钮yUXUg<ȣ0>O>cx?5;v;ƒ)n9^x]o,[n9&;ҥpםNh6m1u{bjKn읷΍y5\?)U:Ÿ@ 'HߙfswzTejp5@J 2!,- e5\t^ 0'D&d_:=fHpϴfP>#Y:sRpVӮ7#j: GMq憎vs@]owzKC z=)s [D0]⠻(7\tc;tp聉y1/8φeC3:#Up)xn0Ӊ}dPB F8}:F0>&[)uIԄ |4$^ysx%ʣN:ݹr]ǼM]gǛ~aϣ-}e|]φ'>G~.ܙ@ꈤt1`ξ{Eu|+zzc~ -<=?YPZ<_c~ m`eM~m{Fco`0RQD@ cmfgs'}(L&N dNPžʤf(+H<Ր(,1IA=*}g(Ed>'!@P>c ջ>KYϫ濶-!W7f< ,<'3áabbQ@dMD#-&yt aff@laFsY ,k,nqDCme;;mV6U貶`B&*M΍T< dO`ax7l3V Q@Cu5oi4SFH` R_9ua'^ڢ{,= ӹ\m96Aa3@sϥphHK6l43d9b҉%|}mxGy0=9Nq^pNSn}9A98H t,:yXQH8gsmݘ:sx94X/!t)ζ.V}9'<ȬiB%hЄGdy>GWAgy|eo(Ӭ,jyY>/cY<۬rƒ:v{ /g+/zL @Kh5CIuAc$75BC d8P'+МZWT:N;݆5ggϾGW}&AzAm:N>iwA~<#Fwo@po둓 jyQS!RaqCéקĦ=3'VxzBowURѣEȢ]Ōʙ( ŁLWЮXf,xAMh+c]wşBt@Fu7&Y)F_R8UǐIxRW=Ӛ Cނx Jcp 6_;ЅWB>Xjl&֡HH.l%k54έqCga#1ĽSs|0s0BPs[h >%{">0B|b^fV(kAn?La(0֡=H$%o&s@ c^x6G }+=hd@ 8dö<#C+ 1I4 M/9E6SdA7\TtPZhqZN"Oss/zu,^Xqv4`e%j0n}W 7pp_`pOolLS~^heV5qe. Xq[-k:k6VXRtDz".EC&L?Ÿ? C|pdl·$17ћ/xvԉtHJ$o6,>n>*xA[gaA7!5׶ <<4iD(0Hsfu6Oa#|>|bECM3mZ\ ♽XKc}ZГ-0%qªVIsC @FN~Dn(gaL;yC 2&7S,Ej)&&׀D? =˔&ۨtɦo=YhXLn"56M=ž..B|)MC lOiӍΗ\=W] -:O7xO|>hg.W\ t@])ÞJ,3bL;~r-4DQSeNFlli.'V]NiєE:s<^L.k8qVd|M'BH'w~] պh!3ȲZ2nk3Xv0ʇ⋸wXWKEy89eWhErˁ{/E?O9Ega9+`Cgxp<M3Jug 'N@9t|hECSp#h;xd,`:6S,`sj%1=aS$!cP惣n:6tŖ4;hs!p! C8Ьjh8H}^`u-uul~y:CF t,=9WWJW96 !|~7⋡+tc86ne k> >_N1|¾Xٹ*~\||q]Pqk]q6 Bo8w,F 6@bO{!*֧)U@ c Ҿh)7Q }$@Hd'2X#(B$dW&59IXM(N'E*}Yf?.I$F\7\o| Bw|wpJٻ媫; tXx/@{'DE ǐM7B+ tFC6& 1fB {h"M)i%:`fǘ ғ4yY'ՖgF<׸ZV붲(71äϦ"wZq\?Q 3n*nBwp&)@u\W 0a"@O/Ta7c!2&X]_BW_MPc|G ~ zG_"δ j Z>2綯r|ӽn\PλL^y/=__htRw6UT@uέ_hjU(Yn\UO}VdžƯ;n8Ca{|*9kCGk=.2g/2ƺ|vF~upI_g1?/V8y(o ϝw UWMS:i ~7]y%D_W]w@uK կp]w[0%Ho/T:CZYIo6;bW> b$GÐI /zqg^{57; l̽="Oe1 *˾= @ a6@Џ(F&,@Hd'҇+O!rz˧xSfsD.N@ 0O'uf5;f9^8| F$t7%MY4,7`b-F>6BfZg;cHae ~oX$ƙ|<s0$7r`^ ;S+[@T7Ѩ6j=Š,zI#/ԍlFġlx0NG- S/'sg`BR> ye 2(b^6KfnPvg&zC~!_}͑lύ47á|A 7X/!`|=weedOr2CO09Y˻jDPͺ `{5"->{umYk',KӁPac< g7B7mC!y,̴c۶3aeOa'MQ+w3epғXcGGbu-y3⿫1r Xo|6[caXH|Lg$c:# .uX34ɑnՁP~=\+ؙ}^Z=~:5 .ƫp8+^Xvf@YϿh4u=KDn_Tcp:{#w@ͦd_#4f)/ۈz"}^s@޹rA0I'we5th@7#BoS^d@ ѳh"2X / )_өfN 2Ô&!ys,*ir^^\H߅b>41:яXײM?0z+ka=5k> !G\ =ee[eˈ/J y~|5Y W=`K:1|9 P0U|}$YYyO?5>uc!Ј[PFTk,mE#e=7M>;އ=+wϿӂe(ϔooeew&]L7>ǴC'<тV=Ϯu`3Bpj! \T=4*<,ƛsGq֌skxRs='h0Z9!ws7>>T>|^ӟyয়zC`'a3Bٺu0 ŗ |ۍF'ڲ2~W?$i>ymu޲j[ӞyZ,`D"|!|a۫l|a+tly{Tِ?[(xPat|Xp#g|HnX7\= \nuhStZZ!!G8w㈅rT4ah\ \<ҮRlw)>^ k:q`ÍW>Rzi zuw{gTAkA$]S6TCoңGX*u愀,PCJZ&^v&*Vʎ'9LgΪ0hOM6 &Ǡ(Lǻ&=2GqB20`Iۊ8[ac0S1d=)˓h+uOM3p p$Q %)^ WGRT5q"BW]&~v#cXrj5"&P4Zr(ʎKU/b:l^`C7<J yf|@ UӦIc٤Џ(@ /A, ҆I'/&E>5^/N4 % S'Iq-<w-_e@h=UwoxݓZ.S!.߿k~c.}rRۼܩߖyD.y8.Zo^`Bg:\bkD\.ttXyz*[*kڻY ?3?#Y?/ӴU'Wrf-Tw]Yw,^՞iBW_ɇɾ7m?t\r m]<^.3ƃ{h\.׌'? .~:"YwyD'uZg7Yrc4ճ`oM'v7{8bۗ̏p<!)I"t2/8wBu=/t>YVfˡn%M6tS[ϳsʘ%@ ??} }N S@*yC|(V&>O1*I_Cp#+R g1ýgS7S<7@b-:gʍMKvnCZ!CV ^.26rC?3%~g+9c<4$0[##It9eMeo ;AJ.)QGTIv1F,'Xg#3.k4ev)LNHlf@L0y`.:J>oUfN[Ջ9 E>Q]WC>fuA_;htNOn~4ljôuAG֝ʸ7t퓾7&JF_φfl|' QUׯFk:ȁ{mzE?L|SSyMv >5sTpXc ۼjhO >_\?exC/#,C]hP1d^N =0 @w\IL m{ZNo*# G@ ~$趥T]bh 3Uo^ƯVHj臥ecX= BvNʿr~e 祗aS>˩m+4W:]—9-׬#oWz[;VHPVjtPIx©:*S&2xYM;V˛,4;Y\d\ҩ+5kk17:u+K;JMΝǷ mM"O+tw+/;Yt wI޻鐕t\t.[דȕNءODW>L\L|jۛ0G`NIJw]iSu[W:Ii?+Qo:dzq >Jyq>%_ß:nk/gth3u""\m/K c dD'FxvlߧE! @࿁r: /SjHSBt2,j xP&հB?0DF| 39A0%l8pfl{}|(1@Hp;wA!~^} ;wl:XJ?YJoPfT ~"H<Џ1H @ a$h0 lMCP蛚!E!GDL7h{-n(s]}n2~~DC?"})'@  !}@ [g)sm}m9?{w&GY-|TUgO  !"zQY\+(( es*r}UEh@Bl]UVu͜9S=]ݓS]]o{%"~h p9jZs%&0=l gįԈ%U ~JCq-0\MֿvBs&c@qD-aZT} O %5g X̰) jN./&>F֛6[ a߯3>HVZ -;RbZx9A}Z1}7gEydKN|r-|-|=Ľe1Z^Joݢl4gDGƗe=k@$"U,4b^H:* C3oH| %9TLK6]l,N:꿣yq@U L3L}NL!* r d}5&~ N_j&>h 'gp۸ 4wqHp*ieLMa#5\JI>cz^Qz|[ K.u?:yVIǦ:HE5-cy@*Rh/bT՛RvG&缶!G+P pS,2-l<#֨5J^|,W0;>h0nδZotk eeu7uGDhNIV`itY1âj8,y C?jR0zVtp׿Ǧ7o z8ZbHͩ je-k[fۛ<^ey= T1O#7 "5#FojiS-;{$x?U8ZbHM\'acSy`|^q;$J^++$cPc[D^KWCp5p`4nKN<ΉN[XIN5Q-"W-b3W-׬ }^|qh?mJ\$Ķ.udp( Ê*DKP-<"|T+T|z`hLFG_&Ef.pό8+t#4'V[lâG9=u+/$积sYZRKbUFj?$?0F4&CF/UoR]$gG9 "4q` Ó*0b 8`ZbkE#ǏF8P0P7vB|"~haH@(3-3?3|KZyjݻ\Tep?ÆfL7F ?PSï&OgG(8oUObϳHUb~Pk_jp ^19XW@o߭yuQ N^@sH *svn0\.3tJEVI-oGjyO-mu|ið~:3zֿne|?'~h/oh p8;BW痯IѭOos4?ȉf]+{,Vרc+>6s48МSjKl+. כb b LQ-":Y+d>ڗj؊p4?׈?Toz"@$l0QWER%6GjtQ-âz:LZ1Kk<5tXQ5XEK9Z]odӓ\ԫDhw*1g 4=x~Zj0YEvOoP@'p ݭ.:r(8HTv1˻X^VF% EKTkEF|_럇d&oP p8ON$V=P+zX-盘$Rd^,:~RGhw1߈Ԉ%rnu{^lz{&~378qŅsz~Kbz{&aH*~`9K Ɨ644]vEE5b2㭮͖V׿{C{= "4ǶW Ykд$gMC db5[ AďMz?HjBK rZiQ5<5$JV@p)Tc3æ2:MǏ( P'QQw7[ a߯3>HVZ -;RbZx9A}Z1}7gEP'FF=G6P p9ua|I^N2R-/~E%nQ6 Q<%gDYP pHj0 M#9Rwxf= -_1Cdsgl|:꿣yq@U L3L}NL!* r d}5&~ N_j&>mV(8Ah #]P{2=4bQp)%LǏ~N~{G5]oN%yfƶf:36O7XuXH?2cM/tL&jh[&y+9TydfHU%4ϋY~ wS6{Ȳ ߥsZ&NgM^#O}gRRDJc|svrϞM :ggw_N.ٽD9Qd]-KVuHbEflMi" 6E^++8?+e"Hyylf/^ֿ֪cY)vx_L^P'М$u⾹Ta63s*~h&~ !gm/2a\z[xТ=6fLyfauǏ?^dtMglS]r}q7~ȸRe3yDqC&r7e{7~2y{n7\uLa"-=^zyXx;0$F1G{6+ɘ/tPX /f^Ӻ^|@<@q՘g2 *HuHB7aEvZ߶ sY/yCFm|v}?~Oz?cDzv*Q] =طOmȖko"=&=B[wkJܶ8|Y5i}4|:nbzj$;꼨3Y];AzR;b(6^Mq{zu\\\ݐyďL;ym1CV@q[b *1YdZz$y6GTQjXY|`|}aQwnþR>&TK }ϺSyZ꺓;wu[˶[ǚX>|IGId}ᙙJWINn2~jĮ>{ OVOXG}Fʧ*=(3n.Hуyzm9?swI7?6L\OϹGgywIy[w|uȶoI>_Gf&[ƶoQߕJ̿Jd읇[|w|ߤ|au/K]igi_$1}ɰAb.c._+~W_U?~2C&/S}uvHU{\W^xmgfl\ rSr SߙR>z[5iZk!_I33'&Lr7x,?Ri-v=ŮzҺR>)v</ʪX/χ9}oH?n߬9Ntl)~[}/Ȫ䯛lsd?oPl`8)O,7}4ݮ>U*/ޙV~WWmap s&h@H)C ,6온YY1âj8,y C?jR0zwY;owG=i{ٓjczdn3\Ou.U/.2G?ns!}ƛ۴ٵa$YpM"{&F鑴T׼SwTN]ӻe 7w^~Yd8-w諤։\Ͷ1̂]#"W;>|}m}V{Ta-g'7 "E5zmʬ;o{$4Gd$.;,v gȿ^}ЀUmȻ?wB6;92]D={<;c~]=}{"}Bg+!2cD~5"m1C]ѷm%w;LʦQzNZ6xT}'ˣ[: nyCE^}`7Ȭ yl%^_ߺo_w|6MҹmU2 oCF_oxH2Jid=q4?&NHz'_>'q[/w8/,˞Pt?;IU)[g9}GsO īOMߺ1gU.}&ֽ7os{o͊[~ylG'IdO枟 NٗGzL~vlwGD}27yP]R|8þGLsWk緗H_ײcւ OqW4`_[i+gxL\xSx@}C"O>ޚ=0ӷ Ʉŋ#Y全麾Ț=3D:WK/,q/>#=BpW\-0_IYlsDnȭߖ㦴d$<$ٔ' %ۆg7MVOJ7"E3đ}0=^?p?츪4t\c61 -}GIgQƸF3r?O]׊×ڜʝcd*yr_{E}SHvξ7B9 l@ɢ,zp !m>Z6o{fvox*Lс8.\%0:+DKP-<"|T+TnqmI-'AVN[:e_y@κeVNKkmUt \XQ=x rљ\O's2sMI?(wm{l0/58+ј/WI#ZW&N: <>Ǿ_(-ϒoS6ڣ;M-K2??X_Ծt}8VMWZ: K?o/msvnX 8&x0ady^m9skZq}o,FJFɎUzпN_&Ef.pό8+ XH͉UQNpK'Eb\VTzXZfmǏG(~W vCU1~,>wM^󮾣q+e+麋NEZ+zWfóK_.>ze\#ghkDtײ۪;]Co'2s?ϗJ} 1Px,Tb~ֺNeɩ۠ƺQ >㛇<|WD^>C/EgQG_-KtNYT=-.l)Pɐxj_kz?4fv8<L$c:zB@-E~rz;ߨM]bCP<{<xjACVWo+@v;Csjq48PgZff=gZoxI2Ԝ#w8%?Tˆ#?CWY%"+Vy_H{^ս&y")비\[,}yp^=mK: ,`s)뤟Xu^OFwz_#{}{^`}tɯ:䗞,j% Hi}ܷҩCYYQk()<@znFz1kD e+lSeȓLTu KJķo"l&m'ځmic{E{?XYu:ݚ^귟yd?F\\@7VK̖~{8.)w)ggoz_qR ?%Ȇ3E-Y€uˇ]*~&rٽ/o͗E(O?)?sțOw ug!u2kd݇ιGgUҞ5y3w<<OV=)R>d?ˑʂ{_tn%ÓWã# sמUUqY}eǔ@ǕoQz8:)ΣsΣ1sq<CƹUOrk8)C|_8^ni){"??|u\w?sǐ瞻͢{E()84Yx_yWEȽjrJE{hhpe$#$>HŪS.k*S}3ǸAN5 ~WX{z/}JJ+^Kv e3nݕ/ȋoַn,3<b{S7|=7,huO̹`)es[D:F_wDI<ņ)"?KE/27Y[?Y/=9pō̘+2m0lcz̹"^#bȺlM\?\{x9 tz5"eN]w޵'&='yȓ՞SDSf}?E5y܋ʦSoL fm)̜ ǫe7/UZ#Od% 5o_ܷ~ts\93ǔ^qGΣhQ=:oZ)~>m|iWT;&Z~Vuywգ9Wy/0i{1ww79WMu5?]<اD=wuS;}2_&.]2ldy|(k>&c2&=_LXXzn8=}.ѝw\-{Bz;Q枹lt2Cds_lOiK߹q$=gnnMMgu9;FW-sk+{kJϣCȝCsO!=(x2yTknn n~]ƾ﷓cp"2gNgW?{o93=%JtUr:r[kmsϙC|?onsVۯ,=?=_JkV.%@g&{- GssCg^/2@(ζUpj\!Ub3_xL2,W#~4L662SUzsȟMQAeU:Z|'?b]2min(BY漢dւdmhX7^w²';jYe»d4YNy'q5#6\;5+z]pl?G++~Ύ"o'X) f' R_VO*2g'I !F$`4{EK9Z]odӓ\ԫD(ζBSfMgZ6iaVQ&'~nie('~C@b76%J#+n,+N{ɂ_d¸d(Ypݭ.:r(8HTv1˻X^VF% EKTkEF|.TV|He"9˲EAD6#rdaku/@GkE?L?G{Mˉ@q*l#3ܹ-b5IzVo[QZL8gnp  M=Lܯ@;Ts/m?h0>/KmIuޓޮ9^ztV:LVfuZs!c[z髆5WhZaaӋ3ǦpLJ_RwQ|1i M&~@$5|n[r9ô%+ Kj8uaStahG]_L|j uֿvBs&@qBKԽ^zNm_VL-ElGQ|4FƗ ס[o[&1n{{9-ccTK`ߺEhORQ<%gDYP pHj0 M#9Rwxf= -_1Cdsgl|:꿣yq@U L3L}NL!* r d}5&~ N_j&>;am\8Ma 8_jϴC@0.Zz=CIԏt|`F|}K\|v@Ѱ(qQ?T#?6BP p`6`l3HzJf=x`[TXṊ]KmOZ!Ё+sа(_!_;q$k'\ D&Q MAVR-"UfANg=$HtC^zQNg: "[bi 41o+aRb$3Fvy}[yfOWT° @o[UԹ̼!6>3U?Ix9-&~ C(.6TlA%0LK/$5j@ 76/,ՙVMmap s&h@H)C ,6b. +fX_ %^V $~hGm_ uRo|z7[ߑ\YG+P p9uaBS-et b{gë1j=橂u7F㛡|`sMտ9⋊QN,wWh!4q`=M時Uy=(zUB=Ryfn߯#~{M/5_ 诩?gϋ/9I8'8y.la%9DTk/_͜^^^37?TyKZFtU>Z6o{fvt@stb[`syf8\daE%U(_zlNHG*>C@ *;M꿋\qVGhN ErzV^:InO_/µkŪ2k;~$Z6^^3uCo'Ծf "BH~z{E5XŴχ`?^kuR T/Pwpwf^oݸ@T=@s+6~ <9 RQURZSu[_5>?c(i;͵~a_[ω@(-aRt@T/Q-DždZUFc|*mh ^\n֧yP p: U`r;2pԏWLvF9׌:5xRmGƯU^+<4A$%NT ]b[qyf3L`VS`j1z]'FiEo8k7=z@qu+P"#5daQuRKPaY|uRt=lRNoy$3*-$g 4=x~Zj0YEvOpE_x4& ZףnetAp׉t?'x@$=DJ 8sYƪ5$f6/IV8g,z^ Z+5m:GG1 0zp߇tVTppԿL 62Ý)VCĪGjS|32sDj~,~ =Eǯ4_ s@|LH. }/S[QZL8gnp  M=Lܯ@;Ts/m?h0>ʍb7[[]W ?48K_5dBӒ ^?6gWjU*m|⋉Olk'?m?6 Kt -ݒ+iEԐ(YYRé{PU| ˠF4?b3G\ 0UM⋉@$t+-Q{1- R۾v[Ta뛋3⏢AxtpZCƗ ס[o[&1n{{9-ccTK`ߺEhOQ0J~xqMϾovQ<%gDYP pHj0 M#9Rwxf= -_1Cdsgl|~(u/*]T̛N(hZheas%g QQiS 8?4cUwBR3$ =m\8Ma 8_jϴC@0.Zz=CIԏt|`F|}KFR)  ϤG&~l@q)D mb $o%gJ>0ϕ<"z> Vsj[ė۞yc9< N&-9IeCST HơG$4iS*~h)up| ZhP1׹:~ә@HMVV`@Sx汒&%6Ir\08cT3_kP#~ lk_O=6Rm$Kq͉M[! Ov*`ÜQ<3GH&o◺,~@|:J#])z_G5{5(89B)6WuW ɬW`=R)|5LK(-C7ek/oN8j3Ýx խ" 5Uj}*eg L>]ϟ/[lL4:7u =9Fډwb@1$&z8[P)"&ɳy>mZ?PêM|{ w돚[O>O76gΜ-h|_w__wyrȷmg>$V[m%mL6@ ѸHLM׿WFY] |_wˋA$ߡiV^zN3,S ̒Y/+ ?46/㋺x7~Wz _|.2uV* ] 䓟MfqNu W|(ǒ;3;-4[ߑ\YG+P p9uaBS-et b{gë1j=橂u7F㛡|:ކn(~{O?t.t́(;S_$~!ȑG)W]uY&Iޟp 2aQa:TmqsC_'Y Ch: {B3z!QbZY!z":_Gh-_j4ʧ?^."adժU|G/67N'.\P(^zI~_׿)Sֶ]໘nujS@V4p}M4U?y%'IP'Ł-$՚\jbëkVk>/tiw {7g?Y@uXΏ ?|[n:nr饗&/9e6]$?99v=]o}[~W?𖬫]o}7dvϟo.zj-oo~=nk}ng-W_}ump&9 >uu9nWzhhL: 4G'u &;GhC @VVT!ZRn̶{ZD|wˏ0 +s=Wz꩎f<5/m&K,d.luCo, /WU 6ߗ~7xvCqu3sLH%'Oݽ~YguƌI5kVͽ<zh2w[oWwvoy[zZomR]$~ḧm8䵻*b=[y$=?}5Hl ג_R6RˬW+Wo%m_bE~_,7tS]r7K?$K>cI>z@#7[0{g{{e_%:{キoLv}t|rw'vaIZ{ᇓDv[|y~~5om&'?LXG>"Gur-q'Nȷ6`Dc'R]$gG9 "4q` Ó*0b 8`ZbkE#ǏF8P#dر}R)Kֺ$ 7ܐ }3Ț5k䡇J wM&nurv?g+$7ڶaA3fIo=Imv?&-Z$_d^.w{ݞ{w-Hȣ(ٮl};?I0;_w3,F6-3?3|KZyjݻ\Tep?:ԝwåg=͇A裏p?H͸dӓ_x%װ=/'[}=jժ$!#t3WTm ?PSï&OgG(8D*t YZ*\[_\QULk1| ZjV/q|t &$X89`` ^c<d{p= >袋#H뮻.@F~߸[7z\)CU8Eaι]f蔊zZƏZ7Ү9nB'V^no7߷|^ 7zְ%Γ{7֬Y򶷽MN:$+3HË^VshkXVsf?y*}u~jj,P#KT2Qgn-$VmJȑ|~2nܸmVn%!̩?O .SN9E>я':UzǚBW=c~&5oA͸eժUosb-z~Gz3fLiomYhϓ=k73ybo6׽Nn >:~75UzP p8:LTe|s`T|2]T˰^%SVL0,~W 9eʔ~ &> {{RI7 a_%Uc=V[oO|"%]6>lN89uCooכ54-l}_wɎ;vʒn%O8d~N:$\ݜarC-'W48Pm%9.8=nVóWˆ9-*-į[nzD[w;sz?=}k-[l[믗|0%گ 7)w3Hv[?ir峟|_:K? vC(wgSO=uX$ |#rey睗:(Y/K2?`~%%\sM߮ /cǎMwk\p&Iq}.6F7WT[CwW{8D<ʉ@s"%RgS9B,nczY 3$+ =/IR6U=[a쒢Yy8.!85HpIq%/X [oK{Kznv׃G?Q@|7ӧ>nٰ^d?3}{ 6Hzp^{|K_t}ݗKlp=uF Ad~s."s̑^z)׀ h4 ^/x9@(Smd;S>Up=Ԋ^+V&fd"Y z64_i0?a%};kK~$HիįQ풴]tQu=?O=Ssݛn)YONzfuQI? C9CN\_3f3J5 n?'ICz. z~r衇&7׋[n]K#HओN~,-S,ZQZL8gnp  M=Lܯ@;Ts/m?h0Z)Ý\r }]wSO=U߉h"yǓWQ=v/^8yϮA3Dž{Vkz衇dɒ%[0oWd~7[[]W ?48K_5dBӒ ^?6gWjU*m|⋉?"T"ֿvBs&c@qD-aZT} O %5g X̰) jN./&>CzQ7m6/&_g|ӭDZwŴsHoڵboQo..b3ψ?CƗ ס[o[&1n{{9-ccTK`ߺEhp瑍/9#z<HEPӅYh żɑ3u0ϕ<"z> Vsj[ė۞yc~-]/Ҁ z}lHvJQ^ 4PMhB2 ̽gZy9i?eAhTmJڋz((Np'*HuHB7aEvZ߶ sY/yCFm|*4}QW?3 )@- ?t&"% H@*]:& B(b"E@EH;3szr2{lsٻwf?\TM?/)x9? C(.5t*Ә%-g|$K?RӪMg tɉm>b|nο60+-?Knz]^|5ԧǦXjzy1@ʹ(N=k0KfAGO$/eW**"&McvH1cĉeV#G6-o/fZo}ZХ(M֛mdfS3\Ƿkg#K[b()4e%{Ef;<^O}#{,P k7StÇ^{%_~vi{Yg/lM[aʶn9#'x|re̙3}1VXa9^\/t:9[W]_T|]Org2V @ f4jiXEm7BNced ꉺ/0k' ~PgRT>]aĈx[b-&͓sJOO,]OV9"9#k_,2'ٗɓ'DC^wura^nf|.~@Օmp[ϋ/9E4'Jrz^!5=JUn5ďϼҥʮ*+rꩧ~'3f̐o|_o:6yv[_o~+޻: ?Qz-yW{/?N$POhJ'N0)3@ (хmɮP"s5eՈT{~uD\t=RZ?lUnIԛm~ 7~}]9sv?O=~K/I$9qrEǗXb tM=fErqa tf`tJm.?6kfYA^BjRs[O׽t~>CHjג_RJUcmuE&FHX8_ݶ5Gz뭹ߏv\sL0A=Pn1#kvSqgٽN:ɯ.+K/TJc=zuF]d۸30:ur]E&~v@A:z!zzXEQ랔M4Yo4Sǜ\?lp›o@w7:OV8m]6OW=ў3gW^{mݨ~~tK.)/45Ï;8fm܋ PXc.'NS{2uF~=~ 709_~W^?0:4#h _w3,P LϬL LЌ/^fZsD.j۸npw㊧`?ݚ^ܔ[nYq/~:{H~+7yu}M.ޔ)S|ggyƏ$w#ʯzyzu׻i❍6(yex(/Ҍ-J N2PӯGNgg (8P\!B,Q=D5qv듋!꾲-VUX-~\6F!t?i4t˅6m/Bϝ;ׯqlwK.Dy?s\Cw=q{zz%vx\p̜9Snf_D馛{Y`_7Zk)ӵرcuW_PEaoFͺ޺s{p>d WjX5NI16xYN"3uJY} q_5~3fѷ~[>RnG<?^mvnm{キm]C9T­Jv-tYeUK-T[Hq4:n} K̔ۉY7$Tl>hk?ʉ3w}G6tSX8 t;ɦwӉ犿{B;C intܗ_~yi]Ç/|o%yPW "cs,5'2=4pzw%fۋ+0Ӥ&/e"3ST'0uen}]w-ҟ{mdw &-XܔlIgoF9裫^;>Fu#\q}ue{9y7 Y3sJKL|PD5\&4'vJԬ)E K*dղ_jRwn%\"<@X}e뭷q5yKW~aɴiw?}u˟>Vgq ߃qn^U\N y"RN[uŌ$*Q=$ g`4~xzj8YY''~nid$'~w6LկW_}̙3cL2EfϞ-{~}SO|fV?g6Zqe7_hz*n&+tӟ0/ch,72@OtAu!= PpϏ"%Qg5Bl.C~Y3[$k.IS*6U#H_}>}/ >C_Jƌ{鋛:=+,J%:ujS;]1=ѣGl/cq+?_`gZk%_җ$ d{ץZ7:￿??O!iT4"6)8܌{ďM ȉ @qjl3ݹmR5IFVuTmY$QdQ,:~2IwCi³b[3sΩzkH_<3+_p~+R=XYfe|.zk}zw;y'stIrYg + ?k]((^xaŭ, .Q5,z~t}.nF 4,35"?7:OOsP#><@qiҜߒ)U ŏL8'~wW2dHCu5Ǝ+NvmM{===r'ʭv'K.ut `~W+iݔnJp7bcK,GgÇ鍊T0aMzo pRLF:-{^?'~Ԉ8PK5dbӓN Q䁹90U*~I56~E n:q7y4tC9DsO9sM}~_܍v)"||[ߒϓoOwyݏ̞7o^~}\QQq}r#M_w-uͿvB9j?@"5}{rE9ôr@M5%5z`T̴)N./&>kمo\.˳>+?<#oԴK/J+nSϙ37+77 M⋉0>(^Z-=;Q?kH=v. Ej Q|cM&ӧOwcO?͋EskKN|P r=Bu6|)AN2wS-/~Y#u](Lf tt^OK?uT;wnhϭ/93f<(%QӍYlżɉZ#0}fݐlJ&[s<Aŗz3::rqrQG[o 4[=mVG(䬛N (ИPʤ9ӤtO4(A֟JOU Kg7:ɼy+kVz!f:7ش hmw# wrH7pjSǦAL4ꉚ.z:[?(?_?ЍI[b⧦pQ L&LMVrɆ{F汒YGD'k.UsiRC|;>/~g tZ5')vCSP%d 1rmlꁖ86Ħ1rTŏ-?{@OhoJ{u.j P# @q'^`Ax澒&%5E08CTϳP kT%~ jZ}Dg4hۯlu_u_3󿝒Sb%uljx@A|x،͉E@5q(Y#$Vc?4K]?!>4 P_[~**@3F)5RPwWɬWd~\jG,>4"@ǩt'@(P5NՐ_F-4aY5v +ϲ&0  Y`Qq9S7%h'[Lw+P p|S ,1=l<[#\zV%/~hm?(_X 8>I-t:n,*.gZɛ֝m`WZ&u 4@jDOI]M/Jc,iQB5z`~Yo%UTu_`OAZ㫩|СCe„ 2i$7n~Mk=矛S$Os(PɁm$ך\bY#41QvXCX̋/],RrAC9Se֬Yrg_,;DQ6=7zo`P`T=8&?K9mvTzlh:5Gu&GlC @U#ZR sH"kEUiѣOOR*d+HOO,䒲.ȑG6/.FeĈGK5oG$]$~ľҭE8PT5nEOrF^^Hn?Z_$5ekI/cM6:~ڢ]UtW*,_N:Iw_9e}9sm]w]tMr ',pyczo? _@PyNKHOr3(8P9Y/DOO4jzݓiӜ1덦{Z 8~Wpk~oW_-=Xc\r%oۮ?O|g?#_~A}aÆum~y'_~}r+モ&M_veru'xL2}]o۽u8qbn&rUW]+YgsL f(Y|޻! #Zj S FH7~z9KT1Qk\blzc0VWz5:~w7b`];i]q?]{_3go,-9R>fm&rJݷf_` zΐ!C|ӧWw#8ݾn[=7]vmWuw];0Yk|ڍwkc"V[mOO1(\EaoFͺ޺s{p>d WjX5NI16xYN"3uJY} q_5`HW;vr]wuFow!p/."E_=o*5c(]wU: {6SN6h}rKg>㯻.."3f̐G}ӽޮmop {b[=1b=.E t+:@wO7kͿA?̉p8F~: ]8DS3*>5kXjDOdzriDJ%W`IM^6Dfju1 c9N`CG?tI~te] nnw{ʔ)]>ܯ~/| ~*sw'[[L\s|A?y~믿ovLc?_qS{ߓRK``Tx0矫/zPp8;LTmBs`TIzቚ2]Tϰ_iKQ-&,~h{LyO*sW#ݺ#G* zn[^n wQb>2dӭ+)˹O'x?~l6r衇ʅ^({Mt(*E򿥜o?1~I.fU5g{xIN5hzlH< նqN:vONXMINr,E1W_}ذaswvͯ ?O:Joʌ37[{T*- um L';[gN~?ߋcnu\NSw72+]nF|]HsF'9@HIT4v1ۻP_ָ&}%EKTkDJw~N;Tuzz޺ؚ[C|뭷qƵ~[䪫ӕEy>_ve{ӝ!K,B#qyHpz5yΙ3G=\ԧ h)Рoؤos3%?6u '>(MtqJ'Z ԱR]hb&fmD/ŏrFgS'Mܨn%YnrY{{gPqkϞ=[k/9}1ݸ)̳tZkf 믟;/R?\s[VdMr >Oɓz?׻az@gc))AN7syԌL4gmp5/-9{-yXn_ďsj/m?1~WpϟלvEۏ~ %IBz_mN4I?|9餓3ϔ|;Y/?uW@KNkr~}Fpu] {7lp~9墋.]vo;n9#SNm3AN?Gm?5(8P\/=tO(wT)QSL6E7Qi:~E=/t?S1cHѣGw}sykwZqW okV{=>|?я+wW4w͛7*خ3w)'pP`Ǐ;8n'}:W_}q-י~_cφn(W*z󯝐$(8P%#SL/&TcWМ\fp:nm?ޏbvTWu#4ߧzk9s=e̙0Q;S>r|ƌrai]?cmd]ww no~0}Gۭո"+؇~׽fu[,`n׿uoˡFn>X4X. Ɨ ס{mBS#ăe!Z^*GQ6wnTC?.NXzbܹsW_k%&ɀFR/_g^z)ww__y8P˗f\v#]F}`Q,w@%gFPpD5j1M7"9Qwf?Oجm_6Sdkg#3Ro|> B m)C'(䬛N (ИPʤ9ӤtO4(A֟JOU K'@Nhttߍ(8PAl#QӷN1QӨ'j}xzzSou`J|B7<#h߯5?*~_OM>5@(.1 Ml#-LJfxd[OTTNK̥]K Hڞ)  PAZ5')vCSP-9')mcӐTD5ƱYG$6iӨ*~h)upO/`fȡRkߔB#3\r?LF:LL/0ݠi<@qX`; TC{%v4eEj+>z2h32&IJ;žKSMӜcnz:Piɳu>ʥGiU&~fŀ32 L+yӺ J&h@()^^zL7e3-JS̒/k?66/:yh|A,5k#?7;:]+<y^ COY T.x.Yo/,2*=xcjX[?5 @Dn@RC]_T|]Org2V @ f4jiXEm7BNced ꉺ/0k' ~PgRT> ڤ 6z~TOfou=/Ӝx wr`+&Wz{Xj* ~v̲:fT?V?K`pPt, Q鱙=0Ԁ8P] nZ%2'YcXVhI5^G$0E#ՋV'(VZI&M$+Jv &; {キ~>׾5Y~TmwY <03 (IU㖚zZ$gD奋ERXָT:VDm-ԯn%2k,9ӧ˨Qw_9S_lV[>9vme喫+O"Qmw'iD'эUd5I4iNØF=zE-OZjr'b-&q?)2tP:ur)*0 [nCx㎓ٳg/\u;LfΜ)믿~q0X)hG _w3,P LϬL LЌ/^fZsD.j۸Gc=?P.BW"￿Γ_k\sMy#s='O?~?`ЫMp`sg?Re_L0?H @ҍ^+~CLTWnG>+baX5Ǖk_j@n6_{#(?\z'#Gl6lTAXEaoFͺ޺s{ />d WjX5NI16xYN"3uJY} q_5>_kVNv}wK/ݔ8n!C}ꫯns" 7 R)w 7OY~eu]'_|~2qĪ}Yiz0aeEy^o7p=`ZqoFsj@(ή-+TӤ^c_'_zjs=l#j+m 7"{38OA/|>s|A>n[oM7/_q7]G!묳,5O8ᄪ2f?O_\>Dz+>@˨C[?#>(ť3vb U/O5Z%Ər h=ӏ#]ķz'7l3_l_~[n)g9s 첋̘1C}Q{5Zk=e̙(>}y{ӟcwyB@+Xe ƯOͨԬcp>%ջ+1S^\&%o4yL/4z%8ٯ+wb }md {饗]s#w_?5СCsΕN;tQ><32o<{{ eYwk{^[aK9n4~b3\ҫjD(FS77kymfeu잜vO"~Gnvp#ݨO;<__9r~oͭysR)5|S16 Fs9JIOtAu!= PpϏ"%Qg5Bl.C~Y3[$k.IS*6Oi]ϗrȁ(f-nO:UV]ut,˹[vؠ߰I߰fK&~lAN|P Tcm㔪OR5"\OcjL Z_$BϦf5ƗO?.uo~oG?ȞӓO>ά͜NYQ. rafx`9k4|ioYCh*t{G&~Tc|iQQs殥]s5(묳瞲;WW_>__lzwz/ҹf>d_ۼlYPylN?7:w<5g Yo$Dfy`nqLr_R vQ|1R ?;X( #W^yy 6mN2~mV\qo{o[dMrY|yEu`04 u_;!I @qD=aZR9FDȒN=0jfXFUzIeq,_~zrW-"_|tArm5<#<"oOq Lq|;_w#7{uWD2e0Ewݴ,[|-'&KP@7MͿvB9nb @qFKNO1= Rn]-fhjlCsruFA 抺~\{2g7o^Si?|_x;v|;O>Y9wGK.diϝoQ^|EH>`~ 'x\tE.m~aZ=%\\]GSfNr[_r(8P\^ Ma܎rzjy˪G`~i{ԨQjɘ1c^xAfϞ-/׭ ~qn.Gab[o%W_}qMMСC}|7z_<QF%gFPpD5j1M7"9Qwf?Oجm_6Sdkg#3Ro| x֭f>/d~rI'=}t9zWtv^r˱+r?֭*I'J;,sLg͚%{챇F{$6> .'9S 4!T=z7Ln=ӈjHY*c?U p'/_~rnn{Lz!/|<7+n V%zzzYGttߍ(8PAl#QӷN1QӨ'j}xzzSou`J|BݏPHZc7sOLS3 @Ӏ6)J: 5< ><@;L[rNS(Ʀ!+hjcHl(QMUXMRA ןz`ES ǫ̆sQ#u$g0Qޡ01t& }%5MJj9apgꝧ֨Jr/kokfSvx_LM (Pu9Tc6Ι%0k*~l&~5gz00*JԛmuSNPpP4JA]j$^^rANiZ 2p><@qX`; TC{%v4eEj+>z2h>˙)E?14bǼ[b(ť溞N6TbElrQGjZY`|}b1Lrigir] B_ˋFKM/T=Ȳ%Tөg f5CIėE 4>@QͿ62s ۵³%ޭ@1ՉA`@ಏ="NMMc=UZ㛩|Xo*yӺ ?/jweޭ@1:̴iӰ>o%UTu_`OAZ㫩|_O=矛S$Os(PɁm$ך\bY#41QvXCX̋/]`T sچLuj@.lP7Lv-L1,FEK#碋E֊a{A}L*yӎIHجgA^@q:/-5IΈpK3T다汬q-%uT5fQO[/:N`0QyNKHOr q` ӓ*2^l4azb=䢖a'-wQf͚%{7/]褷k;!?6E8gY5YD[%^R].*NIŏնq '-_/K,D6'Nfر{7N&M$&L :$z ?Re_L0? @qjt DոƕۑO.ʦXXy:А!CdԨQMUTwP o Em@) 7*~h֝ Dyb'kRǪqJ*ٵbvSX%MhҮINQ՜K=|ר5nd0'~l_zޢP}B5M5z%GF80݃6Y`Th?Æ ,v]s}PpT5XbN̺!jeCƸ]QNA4 +vm'ᄏlVK2yd9Γ/\>l9eW~2{.f򏹢+K/TJc=:{Mw_9媫:KO+~Wr䟛Z?5SVxlFD'NTL]b{qfe3LdV`1fϨb' ѣH{o93| _}9x;,3gΔ7X[n99r|#6LN9YwunPXc.'Nc=VNo; |̘1rꩧʖ[n),,b2vX_?CxsFhF@l0Q W IR%5'jtQ=Ò~/Fl◚?hL {mC ޺Idv9o/mw}o.~zSL &3<#]w\|r /F[o}dV㼙XR .'b:[$[vk{b^P# @q4 ̾YTϳPm0+cď-/[|Fo~Ds_vm7?}x3|rG/tq#1b̙3Gn&?7{O_+Bܥ\.M&\pQ~7{c~W_-̟?_~a9餓Ԗ4l\pndW ݌Or(8PGO3i!bwjqMK5 ^$ֈQagXl \ۭ +W_>zGi[Z_w{sUW]]wݵ㯾<䓼. [nFdǦnPp@56N$U#T+:V MĬ EQ(lj\c|@QѣG7tZn4} 묳-u]5x77  t2:ʉ5"?7:OOsP#><@qiҜߒ)U ŏL8'~NkvOӶxz|ŏw~uݺ;l5?nx _$I_TN@rZ9}vnt=/?xjD\If(NM*cd?bⓜm7zo$~}!?|rQG7M1cFs_-DN?Gm?5(Lr\uU裏u;Ӕ_jrv?(U_;!I|1Pp8KKTGz'꧘^zM\Ǯ34E59H:# (wqB zzz+;Sm!Cz~z|5lJW_}'?Ʌ_r%eɼЮ?6Pp g#,Tm¸!(s Q=U=Ru)$cC+vktArmsuE[n)#F}lזګ)qHW^y_e]STcǎ#j cnH}L%9ŏT̠KI5Q}˵^+s̑ẙ&M?_N:$93;<}/;09S(裏e]; ,b~q7ru8묳d%op4tEO#:9E$gtjx@A|xƜ V&͙&>{rՐF9 GU&~N_'> ++һu.=Z~)2n80a3>w;?Omnd@Nb.T^v4F=QӥT3?U#ÜB}'UѦ:?,;S̟??w'|wvMFqϘ1Ïg}k#wm7u]婧Zh#8y<.{キx͏w8c#I[b⧦pQ L&LMVrɆF汒YGD'k.UsiRC|;>/~g tb nmoK3u_z%yCU˿_;%Ncuh S  $PMCVR=f4QNg?# _kߔB#3\r?LFtO,1t& }%5MJj9apgꝧ֨Jr/kokfSvx_LM (Pu9Tc6Ι%0k*~l&~5g t0*3g֛muSNPpP4JA]j$^^rANiZ D'S^tCs(N t'jHuDTưHo{gYouCm|Gg4E?14bǼ[b(ť溞N6TbElrQGjZY`|}b1$@7CFq9J޴k49P# @}JzlzW dLԳd!}ďMMKN^_muԌZV @} 0lzpuz{`Y'Ď&ϦW1EH TڪiT>lHTu_N;<_|Qu<ɉʼ[b(u'iSӨa}q;%J5*'-,AKWSA;wROfou=/Ӝx wr`+&Wz{Xj* ~v̲:fT?V?KC%a|;*=6SfpP ۺ ]#6ӡD k ˪-FQ{z"~ت43I%o630 (8P_ո涞={y"|j}<5%6Q,iⓠ4DM;9."?ɉOr(8P9Y/DOO4jzݓiӜ1덦{Z 8~?%! )z93p̊'z (e5GrQqJ*~[?iq~4srI%w N2PӯGNgg%D(.UnZ!sb׸r;Ru_ +Ǫa?^ktRG3fL8QV[m59r$/rGˬYdʔ)X_ߴߍuuQA^@}(4jcvm8糘Dfꔲ:VImo'j@m6:kn2ȅ^(_|lЄlr9#'x|re̙3}1"kL4I]vY^ 4[:,Wk5. :8aN<@ (E5|jk,RKT2Qp`.m$^m~eo~|QɑG)_|^M\ɓ''> 8D>(8P\,1Sn'fݐP5iYcܮURk('~ ߕF%[l~뭷JggvA[o=/n{_.===R*䠃Çw?ev}t.W?77~jFŧf @(LO.1 ] 4)yfzL.c,1 ~][@?/Cy}זqyꩧO^zI$w}W袋K,lm4yjtqaÆ@]@mx0矫/zPp8;LTmBs`TIzቚ2]Tϰ_iKQ-&,~W&_|qjۑ[zȑ孷ؚ[|ٲڴiۯFƯ:SLOѸ|UV/}KrW?Oǿ/ʥ^*W]u{{o9gu9( &ȡ׍?cd=g}5kOJc=Smt::@|?StH@'fo1#, F:F+9Ypf߬AgGYszձ{rjFOr-~7&۷f?}m<]16OWM̙3G~_kcRKW^y媯 ٮӀ3d8q/Vnq]ݿ;n8]mV6puv[n9رc}7l3wG/;mw=: CŽ>nZc=VNoF]m=_+aݍJ俛_ÜIN|P)Rx9]#D2T5I1uI9;aD9=??l]WpM7,| "+:{Unr-4,+F_ə?~{6F5^wueƌ~$^{Gqo&O5O8? =_.>ƍ_7 up-ڻw}wqSg\޽y?܍(^??ӈoؤos3%?6u '>(MtqJ'Z ԱR]hb&fmD/ŏrFgS'M5zk?={]w z|ӟn(g"FOn)һo)\p_|nsʓO>)}<s`z}AskKN|P r=Bu6|)AN2wS-/~Y#u](Lf*lkg-/~ \[n9ɓlx5l2nܸ=^zIW>#vL6mCݯyse}s%#G.X=q!W\[fx^znd?6(Q FM7fiF$'j TcuCf*l,~b_-SO[oe~'|߾۪kʔ)2{lkO8]zJ>|6?_x,+b 7bYguv^g9˥^*GuB6xi?O,\^h_|\wus+oHg>$)ߪͻ,Ⱥ ewD+`N$D b% PIʧ("*"HP ,م%/tU}szg:wNշ:<>JG(eN ȉМ_JӤtO.4 A֟JďU οoKyvwygr'?InFƻ)·vynWoF7l|yW(0`{Wp>f7!5k}k_p#b7$ 77͠m W]uU2rnqߨϭ?T?2cS(t9PL&jjƦx+뀔*s]#t5i9K|#i?V)Л.<.QnqL֧vs ݚn:?񏃶[,_<9Y}s1r!c+^'M$묳Nۍ6w#ӏ=d:fm?w#M)կ~u)׹?aRv7<> dt+3hn'#S|zJc+xN?LS?T]->5< '><@1M[2"S(׷ MCVP="f4AF:̌TrkY<W>蠃d:*U<W0vӲn*'xxɔwuWmnn7Oɨ槟~Z9˫=NWwۻ)]C9$yno7E{3ۺ瞾܈sM.sEvm=L.k>I}ҥC.\sM۷GqD_7"<-[nztЇQ= t1A3\r?LN~cLL/0ݠi<}sYAM"gq癯z5 u-|7\qŢoHfv]׭͝gvO<^dI nĶ{?|]۹}FmzhFhZSdSvx_L1)xF34#}s`S l1=g UMBŏO h1tJ^k󿝒:߫@?Cjb(yUzwEL+(뙞r^FiZJ5X|6U@yoOt'jHuHTư@mo{gY3놌@^,ʛ)x-&~Ȼȇ8o N6TbEtrUjZY|/g|}`Qs|~h>%Dz9*MJ2w]7M|=.+>:QSPXlzy:@̴(N=m0 fA7Dď$/@W A@[f*%-Tv?h(s⋊QFvW Ch8L{F3 gSF2VH]晵Et|(_7cx;&SP 6MvQF|~9Q8F0ItcFM{R2b0tO^spQO| ̒c^7;! ?4E0cYu癞YD[%^P<].*NAmďZp+! /=5z`tvYr@NbOb?g!&q +>.+b~P5⇕k͎_h_߸͊uuQA^@c(I4juvm0㳘fꔒ{6fǗvϭ0Gw3C?:Pyj}4)XG痨eaϜt2HJc19-NZO "@/V )#nG}y4|z{߬1n*7~w `Y2瑍_-QY+<4N'NTL]b{qyf%3L`V`1v]D;NHY0TΡp,矫.zp ?;LT N#5eaQeB Q-Y| H:rM.:'[vk=Ȭ-f$Wԉ8j1 gM4~x}zaFތvO B utSw73+]g2ȁ8GO3h!bnNvi 3]$m.IS*6O\:0#[{Mˈ  @~jl#3ݹmb5IFVLhAďMZ?(jCK 2ziQ><5%J@tiTc3Ӧ2;MǏ(La F%oha߯1>(^Z-=;RkH{bQo.bΈ? =8c nm|Ɉ  @~^zG o vѣ]6NTˊ_R@{LLq\` ϭ/3zf<(EQӍYhŬɑZ3m<fݐ%3Lx?P1/gT.GSr4W=Rq4:ݓ34h8?4cwBB#h&:Uߝ]mnf@BW>^v4F=RӥT3?VGVrƏ׏w6fM;L\g7sLc3 @"Ӏ6)J: \W03zzŪwZdN_oGgŏj v~:R?LS?T]->5< '><@~)xK@d i ZЬ#4hTc?TS:8WGtw͈v~@SͿQFQ`:u{b41o.+iRbS$3N_[Q^r4UFɫһ+Rdz$)e4xTC`@Am y@"?^|5>^cS j|Tcm,xfݐ1$7hPA t+Pϣ?28yPȇt*ӘE-|DS>PӪdM|{9㓴@r9J޴kp] |_ˊN^^N7%3-SÔ.m ?46/9:x5>@QͿ63Hc3\Ƿk# [|()4e){f;<^ܟ.Vo7SFW _;<=\|Qu<ʈJ[|( 'icӨyauvJXWHƪ<?^ WSj(Hou=+dxr4vp`+&Wz{Xl* ~z%uA_GP͊/]`Ts܆Lu@h.lP7Lv-L1,FEK#ǢE֊~3: Tɛv|Myf-p8+ 4&V[liѣẗ.ϧuiZP bF6?nQ|@CM;9.<=?ʈOrȉ81Y/DOO4jzݓi㌆1퍦{zM8p0X7;! ?4E0cYu癞YD[%^P<].*NAmďZpӟW@o'Ծ끩fq9QU#?VE5bdzC0VVz5;~hT,Wjy~ofͺ޺s{ /1Ƥ WlP5NQ:6xYL3uJIWAƏ=uoKƯdf8Vh tF7znf|?#~h_P @~v=oQ>_&E z=HգLT#왓AfɴW[i,gT 7MPe7މЭ9rGTgDϭ@U%fȬQ_^2 7k۵Jd5E~ <+?I^\}-^gԭ3w0# 繒"6kԉ8ИKl/.L5d bLQ="s?ٮ+~dUW)w,]u K|fDylћyf|FqR j rJL|9PD5\o*Y/ydw3j}rW^#Mt,q*JG".#r4SD3yFۻx]ڸFCL%IEKdTkFJ|wg9._6{럼/)f#5mb:MW^9{'E=V[\GdG%W盫Aay(4Vm_:ȟQ05#Poqy$?4/#>(ytq'Z}vA"H?N͢/5ďF8~#~wqdCUw\Zj[QQ𡶭ӬEwZxE^}|O/|oU?-mhN<'MjJ ~h`7#e?7;qď3P'><@~i⌑ߒ)U ~aFB u Mwѷ''2Plmf)vͶm/_m[*gR|QRjH{s'&0=s>6g◪Ujm|⋉=nZ.^O2rn\˗=DʶnNW[]̔E{zo*Mv큗ӌuGNwDz*KOnM!{y{,?JM2M"&,ZO](ŷU}"(!2iȌY"I>*)j"Wά^Nݼha;3׮>5F{.F)j~^\cYz/Dj3kyr5ryt?thyq$@~_;!Iįuȁ8_/=tO wUSS dAMF5V=3mn,*t⋉=뙥t.!A)gm}xZ2`}Ooy.'S&]ח{ypˏdkO'CW!$9_wdׯ1K#/-I˯͵˜){ȏYk3WЋ9.Y>۳e6_{ȭ?+_a;qZvG.M&VNsӼۮ}qD^^!}EϺ[5-k OǽYzL"|ʲ-x|c7g,Co/ }1;+2.KwUM{|gO}qryryr:|~v~N{o5kкG?ʅr e'Z.|cM߬K,f?k^C'/LgeE 'ֿ6s&k  @~FK_1= "dM"+2ď(t1떌N߿.>@z_,3-E%]_ו/˗ۺ%mC+u1.>H־7Ou72饲n~V'/zM^Z.SyD6 YzLz NYxف"˗_gʣcu5`W- 3Xz~ !w]+3C$}!syU_-?g. SVpӳ'P+9 ak!@~+gס{0nG{=eTO%U`GX5 {oLN2iվGN>^rWmӢ`O䲾m=UmVzURj]!W<7r>^.jtqˊ-:s6;|]ݥ+{>mWz__"=fRHq5yy,*k4ke?cs:]όcw/yҿ'=W)=>uu}s&io+V-Zq_#ok9b_o;Eyֲݟ/І /Ge#wq$@c?6d(QrFM7fiF$GjlTcuCۗT2i@:,4#) RKWV&V6Gd*f[ʶm2sԶ3˷}^}yZ ߇+Vxfi/W;yz9 OKrpp 3Q;(/F=ZGVL{_:9O?X[|82Lͭ\,m>-ŷϔ׳A!:G&NmnRv?)d4\g8kV{*Ocβo*єgo?qUw^ֆ`\FQoרxW[e?% o4aJrы]~Ws@::f@h 4n|ըeLMi#5]JA>cuzQou|/gJ||7+T>r'l v{FR򆻟zbֺj-q?ă![]eIۋ\y׈<͢S<Ⱦ85@<߯/SaćY)^w?\OHV?Ã6-E޶HCO:y{킸]1 ^#רs~v/93w>g|, A嗓o7xgrc[U#3uXUG&~l   @~iDMmbo%ctx^`+uDz⁙n=Rb;-2v/uķ#]3y"/,_x|ٳOTKȒE[V[e+ʫs˗-[V{Α}> i-#f\G޷Ϋ/N[C„۬6Cs/J [\~DIј4gZQ~kCʗV<_y߾$k>r|_}zFe޸KgI/.=^x2mC2GF3GSM} FnJM%?mfo~~g>HFg6&ɿvJrŧć/6o8L\64 YA@TcuDBӘjjBꈟs~sE{pvH>\GYʶ>7|o/2k~j־F^ljtk]{t[]n00[Iu⢷~S^*4}^tjj5+2^dmSo4{t3^>G[~Tf0>DC[:m0L9-&:_t5F"MF;V^5ӵ=G6{^F2=y:+yyǟo+/Θ'Fɷ:G 4Gpߘu.je P' @~'^`Ax沂&%6Er08T3_ kP%~ 5qEfg\ZQ^~4kCKݰ5@YSCB\fWϸj7QRzY9y5), %yHuZ}]dse:[ ;DAF)}βt KC[\WG9o,G}IﺛKq%M^\}-g|8 5͈3o]4q[-R ~džW(= {*?׿^6`UWɇg7~~5eɞH://u~>Jw-+w{׿y蘛wE_䟿Z[OɊ~$ǿ/Ń~!י=t,ڑ:L]&ѷI;ւNyX|I\!ţnyu~ESfϽ3 ')}?3yD^3'ٗs=y7W;Sy$^O_(kj+ѷʊ}uw)#5!-}hxr~y65>-<$HJd"^]q%̅"wo?;KW[)q5Gwq0*Ϳ:)o**@h3F)6WwW4)*i)?cssHOJPdzG??wI bm򹏶q|Yn7=*OӧLJ.}o*(Y[__|A˂ r /.g|@kyl?"swq'ċ=^ψSeϏ5W9VV?ikjfF+dY!FI^^x>yz.=05ZtM❷KL,L]EswJn?GdJy?/E~X5_{o80\@ *?^|5>^c)x!ս"uSoÒjVRe}Ϭ2fwK"Kˋ˧I.C}yL^XmRe哟}lt;ce_7ן}3zڠ|_}_ns?.=/ LzRz~~zWLLc˙N~d߬Սe+SEfE>V4=7H;Kϑ7Gl*=_YOzn<c6לL.2ˢ(=7=b{/bv׷'K&dћJ_I/CWPZSK :̙Ns__͌g@h `ՈiRt@mT/Q=D5ž9dL{b|F?`48cN:͑n}|r4P )#nG}y4|z{߬1n*7~w FG1&hcJG;#Z?6cVxh @( LO.1 ]4)YKfzL.c,22> #4r%dzc9\%pߌ E&>(a@7vJج)E *j_0j/P|ⓜ@~Ոp=Պ+VMȬ EA(tjTg|!~4glFnv=+➉g N|xB#%c}1=S0?0Ì:K1h0KG6;ޮοgag:Qc{z飆7Whzia33c8{&~JP/(: .F'HN?m?6krKt-ݓ+EԔ(iYPө{QU|LˠJ4?b3 J޴k'6/&_c|9PӽD5Zzw[\f tϏrhFƗreס{0nG{=eTO%U`GX4 .@%cFYόp H5j1 M5"9Rwxf;Ь޾dIO*a::E(ctjx@N|x V*Θ&^{ryՐ U&~N_h$>#$q9P;8Mc8_5jgzz)C FjHMRPtXݟg[?_?>ߍYau2u?*PďM>6@/2 Ml#dR u^O<0ӭG\zE.v}VXݞ)@:- R-s;)tWO ȉ_l ޒq0Bmh84누1 2X-?mC<67:\7&=(~`FAGԉ8%n4IM3 8WtT_:Zk.o:bwA75< '><@cbS֍fhFS0czϬ.`T4muSz_GU{Uȁ8gWRl%JH5i/LO9/4-c,>t`|[k|9ӽ<3݉R+R=ը1,.P^a%Yַ̺!c6>Ӎw\KytGgܷ!V  @~_Ob*1Ydzz"yGT95JV|,3>9>E%`4i%op_iqYF8eP' @c M/X]ȒWө fl6ㆈQėE0?[tk3?t=6u|Vx:ȇ8И:0L#\zO^X` UzozyamUF\o|3`d~,EQ>7s|٪C6mr9pEE(#~Z+n4p`=M晆UF)Qbu_i#z.":_Ch{ /_M0tkQ;94cH瑌{V|(h6VkMTHUجU>K>y_4> D8аJұ0)=3@(хmɮPs6%ՈT{~uD.+b~P5⇕k͎_hZ5F-4ZhPy~ofͺ޺s{ /1Ƥ WlP5NQ:6xYL3uJIWAƏ=uoK') s`lpyMzaf3eugՈiRt@mT/Q=D5ž9dL{b|F4X:n}|rK̔ۑY7Wd>ok?Ȉ;@?f:ж\VCs_DhL`zriD%gIM^2fju1 clו)h04 o1:w`3X?W?\7#v  @M0Q Wn㛃;Jl ԔzE 5/FdF(fI0  soA͓-d5]kd3\ҫDFS76myۆ=J{3jfƏ2-~&ӃT}  Sw73+]g2ȁ8GO3h!bnNvi 3]$m.IS*6ߕ#o?9{O~23ϷyG(8<@z/Xc„ N;%}o~S,Yw#sNriMozӰ+=ղ}UV,7m#7QcƗreס{0nG{=eTO%U`GXO7L+馛uLWggM_o2M/~Q8dO?=ykv]a=}׾\ \xryC?ޔm7 rG~я~sXxqϟ/zh)oz׻\N[mU}[1#]tQ=V8Z^!1gFȁ8_5ݘQ;d\.@lt `ttȁ8Ah#Q=N1RӨGj}u?P^Q.K\dΜ9SK?y㓿R)XW\q\pl2/Zܙ1cFHww;wJcлn9쳓"W^w߿mZ["{=tR9䓓(pWxwSz3<3ۯX"w_Fa"hߨϭ?T?2cS(t9PL&jjƦx+뀤\W03zzŪwZdN_oGgŏ2SOMߗnܸ`+U^o>}Ep7=Kz~YܔԩSk6l#o??Ӷb3:: <:#S3[Lw+p S ,2=l<]#zV%+om_X)ড়rJ22i_'ohV[M˝Ne Pr`7}vɓsO~e.ߍf[}Ї>$mYrwŋ ߟg+_ u{*n=tw\{kp] |_ˊN^^N7%3-SÔ.m ?46/9:x5>N"[;^~r=$orgy']tyɚs9E׭ ~Yg ' 裏_Rݭ |zrkĶ?O 3<3Y=}cm׿&skI+\/d]p~ZYl?>׿s[7:Kj|k4o#hp߮Fu#]v~7"=˗˥^*ַ-f]gV݇ =srQGɟd_iqEqбI-: `g+ʿ69wx{"x?ݕxP8N0ӞǦQL*Y#(UA=Ryfm߯!~4 ?TOFI'W,I{xG9\2)INKwuWm4n;7_>re%뮲.$k[rH2M^M#J qK_J?yw}]ܽ^{챇iw믿>nx7=^{/7ލfԧ><WHgKЉ F+k#Q$3ȁm$ך\bYë4}}~C7+ti~ꩧ4׍NiRIb2 .O>dM۹bҥKGMF7\!G4#$9];/ݩps{Qt F@S{gЁX?mߎJ\¶nudt(9HÒjD Q=:"y,^d*~7& o&#]>N≠'|2mh:>&8@}GH #DnYIנx^8,z^LBOFg*H@#~~x  LskB$T#uO+TF30sj~X?0 =N͢5KA )ۯ饝uP:@=W4%?7q s@xS0/L- {-_!nۛ~5K?Ԩv{rgw[?vaww: H\si7ޮύ'^5B>lO/*d6-Lƌ"g+~Vd﷑9~x2eJL8@z:t0_7q;BKQ R=Ւ*QuO6oo}[o;wGK~1PHC sKBFYόHO6fcF$j1,yC&LvZqi=Pˢ(KTH?8@}cQӟ=˦L/4JUϴ~G RhA&㏗2h ?~|xw 8 *oֲjɰaâwa9sy-.>: :wq˗%>| I^sK v}~'z :zɻ1of6pC{」.U}Aɩ*s̑L&#Gyd@ ]yٲeQ;LfΜ)w7ވ~aY{99#7b}_8F(HF}r)rG߭ZO|J *_P}认O  %4&-  m ƐeU@゙G`i&JRd[X߫A?.F ~׿4j(9 ,\.{7ofkd|r5kV1f̘#?F?cE>y'nTv- ~}/YdIޓJ^xᅨweJ+~yGe…E]$oVFmݷ rڛ7M?cFAtP#ң{b uY&%4Ar<08gꝧ k~ 5x\`Ϗ Gs^c>7wґFa?eu׍FJ_~R(t;7ovW_}c`.ln |>`~ԩG0׸whaA?Ժf[mSk}1:61oqQpǧ>k/{Wws{r'ˉ'Poqn~AOp>S7b-F@mHpNb c^6HjJ}{)E=$]zn)uuiuZw ;nVG^zI^uyw4|_~;(^ZݖndF_K!P:q M/P} dޤEU:`f~Aԃ~D_RzxV) / 7Вo_W~]wÇw~РAun[ԩS\]Js'1~x'>Hhz=o_ks \, # ]w]cu/\(нꪫ&ly.d…5oF4Pa?Է &Eg@ P&;GCɘ*{~yD<[t=zWܫ|oQ3좷6_bq۸6v[]?lyݕW^M/K΍*O. ' vtIr衇%\"-JWF͆&K{S;[A?S3&Ng3b@RBi ,P=DBsFԺ-旾/(XIPhl?Fpt&0i~ oFf^oݹ@T=`@}pq Jٹ m1~Ș)yuj{Om6Z_>A{h} 3СVk!kaw#}I5@ =v>oQFWWiRt_'_z2žYt2k$^mψU^AR@ =2XbRnf_G>o 7s۹Jj$/PK?7W?4C3Wx j8@}dLO.1NT.<&%i4yޤɘb c9gkK}R6tf6[ }32\}Hpa WFm㛇R%4*eaAilYcTF?$}3p!M&]~oyŌ$3*p^`4̾AgT3_m[HaW^_P[$>#aиA:uw#f@0r77vawwhg.:DoV?}J}Hp^ZW1= Rzo]I7E[<\f ڱ8~x2eJLzurgD߹@+կ䪫kV>[=zto^o۬Ѻ>|1tvO}*\6`>-+6l뮻NnhSN9Ef̘QN>ד]v٥zr0B%ߋUI&]I@Jh<u<$< &P-CU=e f1*Jђma}%٢ g̳>[Ow)<][CFk}?a„F}m.*; 2~_Ͼf*[&f7}~yuovݶGhy*͛?~Ú~G]wunnx4hP~u-k& F\EJ#]1qƍ^-ZeY9Zk-k~ 'ȑG)w}w{ذa]s|駗wy'ZwtY%*RSmMRB,y-$G!_0϶~X>ZVZ)z+\{k. _Uoh7,wuWn4t̎q]q=׻ 5-*N^1cƔ&OmnBج]k&Z{ovY Ҙ(e\V*{ oC2J1J^]2q/yLO9/*MK hȟ^z<*YT.Ro]GTv$ups3ҥK:ݲeˢnNpCij 4^cIw)C{곧oa^ ˫̼!V uWu'M}~8zoӠǟ/||}kQ|+Q0|i@8}^1 x _8@zB^SJ1 LO/$JrFUIj}cIR;黩uݙ3gNԲo}\7wľ{woF;^xV3gΌw4ᄏ|_RzѺj@u8_LU_c4FGV/^`ﴁ̛(J̬/6ȃz/KJ}Q/C₷!C+n6l67:{EcE>h l͢uYfEm/̓ܮmwpݼqPVn:KN\> u_[ݛ(}] u<'1j1O!nSX U@=P<3VW~V}ZgyF-[s=f^3Sנ_PIҦТ4wqGޥwW]uըgQzo.P8лFAawرrI':g&@=JiԶKURs1~OOԩSk.oHsIuPCԆQ0P2 6yeD(_z|Ϩ^d}>Aog}6z;e]}ʩ \qx.so}[>^z\tEQ sE]Rsϕ;}O>)jQmQϕ.FGϙ3'Z˩CYOG~gG~FAq>`~Gݜ_}TOTg(oHRַ\8+ Hpq g=H{y m_$45X2fE}v=ڵ%̙3nF;FLuu#]4)8F:_pph[ѣ38C>C"͙=q(x/ǏWɍp衇zW^KvI>/r/ed9{Ki[zews9' nģ>*?я䩧> -Tg(o{F?HЧ'9@J` I=&Ƹ7)<\Ԣ7X?cοm{」Qčzo_KӟFN8!%OVRQŧr}Q@ur7h;N]ťD=j\ s<zOXDndƍvr㻑zhFQGq\wuQ@\/rAE˗%Tio+K/.$d ʘ'z(e9GrQ:Y_P@?cοp|nMt-Zsv#s\G7x'0sF݈Va=(Ͻ}w;}XVnv_}^G}v,j Qef 8@zBesvbk9뇋Aj]Ka_(^k~w^4.n}39us7hnv- GG:8)a yuQA>b_P)(}g/$! cRձj{=oh}7 ªqs̑K/XtZHZH}?A`~_R@ /b2j_J{ez>@գL̢{Y#jD}Fo@Ҏ~r뭷\ '|rDu~ r;08yccUR~&Ah \^{p rG4. \JЌ\s,1=8QLy^&cR1z8ٯ-I_ #&7oa +p_` c{2\olJzUgQl~ORc?pA~4l]v[Hr1S@H% FSN4=xF<նfyu A~XAF1e { ާ =@_ۙѩ67C_A>8@}GH #DnYIנx^8,z^LBOFg*H G= M}n=k &n%@ T;)TOB5"\ZԱBo437H3 ,Z?_T4YBvjK-n=` _0[3Z3sB7/$gkԗ~QJ&Hvn=t<a{z駆7W$ia2fg>8{F?_A [}6`y L?~) J_{h\at OD dVSQ gҦhc;Mm/F@Fg1ϒ_[\'b* ң{i2Zzw^sH=v%M߼el}pyFg1cb[}IH0_&0nG{ =ܺAZ~^3Q6q $o%!gF@ 'PFM1I#5gx̼!yJ&s<(M^}BTmM'@c|C+&LHn=*~nR@1FʨϞeSA T@KɪgZ?T#@}_{) n7ApDAJ'`C(tHpƀJmb`h0H1e<"z>I^sK v}~':@;CMK%ߋUI&]I@Jh< M[(!˪h23HLQ ~AhɶW~\hSu;+:liC3fԹZ?HL5B ='^`ڠ1YUiRB$cyyڰf*@?[>4:l_ZuۦbYulbx)GhhqҲ\QiU}3}/~Z@t34!6AdF_K!PY`zW2oҢ*zl0f A`~/)E=T5B`6mf4ַs#ϳVtz0T.1qzx:QiMcF2T@"Z߯B?X^ZU*hC{`s3/ A0AR@+I&Wz{XhJ?>f^3Sנ_PIҦ`( (Q3ԇlk ˣ`ҡd@l ʈfQ=<"-:QB+}F'w7myo?/=qV*:-z0"\Ar>}5HhkVgձBel͊HG5@r{' @ߴF3A>mӓhc1FM{7F1L0qo4SlyEo~?t/Lлij8@z<3+cҟC<{7ijѣEd~Am[{;lwP/.U)U;[A?S3&Ng3H p:o(#+Ķ@e\ ^?\ R򦷘_ c%BZXwZje$O [(};  2NA;;7x!-:%U[@mm|sFKgNՀ| <-z-n_0/_¤e}վ|&E˨|%G(#E F2Ֆ8v*>{}}Hp`IyC|e1|z1n*U?|Tצ1.] XP##czr1pzw&u4)I&LƤVc0E q<_[3Zjuq^Ψ~oߌ FR@ =w(ÕQ!T |J.gXP/[~ռ6IgvPæfV̼bFzj8@zl/I0pzfؠ3癯-$0˫c/O/-MNACC:uw#f@0?757 )ct8*IFT+:Vf` "~&azEkԗ*&R@?I<@ߡf6%?7q s@xS0/L- {-_!nۛ~5K?Ԩ/<[nlrvn=t<a{z駆7W$ia2fg>8{F?_A [}跌s'@б/PY L?~) J_{h\at OD dVSQ gҦhc;Mm/F,@u_[\'b* ң{i2Zzw^sH=v%M߼el}pyFg"@sK>8@z:t0_7q;BKQ R=Ւ*QuaSg 8kg"@+ܧQ3 (YŤɁ3}hXT 2+K~* ;cW07܎Inw>s;fquTNmO܎Jn$߹kѪͿF8w{Ygj!m׊}f6^:Q?UWV7DZY eXYxMFg=tטܸ<ɝYIaHnKgE&l"2qz3K]8L!2tn: .wn߳eщ7v6r?/AfOJrUäͣIkDv6_rrP jZ5;|ּ{]sjqښJWk~AM>1q2g{EAxV~tyq߳wޒUzAVyUޙ2ts۲h?wZu_zH:rोd-V&3;pȕӢ#Fwɸ9hiǿ3B^V{ɾ6E,&nQ|]tf5^кrVzj]3C:61m;?|~:AukBϫW+ +Zx_7Ra鷖ʧQ52q}_prz8wɪ9fa\ x"jWz)j[}1׵q\upN.Iӎ=֯|SݫtY=G?0;[jpEώ_*o]A}>8@mWF)L' TꙞr^U|66]r/΃-Çw3%|d3Ѻܗ/+;cn*mcM*n˻}2ө^]t',=&;rym37Ӓ;WѼ>+ܗ/9mѽ7z>?;mu@GZr$s~k$wϣuv/U}u͊erMd*N7I+siմ=ug$wS;)q6D3Jnn;Wc2R}>b=qʿ_H_FlkqeZSK珛{U_lspqݡŽxS-Q;ɝN}@r;[ _:mrlؽc{y%{*/D^U]؎e/(HuKr'{ΐ6xcU[r{\㧗yk?x,ͪs_i_{v>Qrg>Y1U~$Geg${umdٰђ$w;?˲ktN+W/>P]>]w㺗}FŶY?loFE绵|8ܝ;by9[]|_ߋ۫ǾZ9};i}n 26Djӎuknc9GبQOؤ}=IJrJeRJ8G?|*zVh=j '.T  k@ztᶱ!սY1+cQ^ayՖ67d귍lME `ǧ5lH10%?QC{xG(7o;na;bDg;TV]zc[YSG9B :xa#E6|p̯%]wp)Qם&buI|de#ƈȄdův|?YEf\f/Yip4oyp5ء~kɊQQ´dG]/gEHin维tn+QHn;qɼ&M?:ݛ9A7錫;9bGc+!miU) D:RËyٱ 9f"S+.-5Բpօ#Ǩn[nq݆Jwpy7lՋYyV^UW'mrl5e'EFVNc螲[%'Fkt]eXZ On Z#VVsL>QwJ#^]9&W68ua~6NMSlj T1?Or-ٓ(>{ u6 $옳%Q+u=ׅ#T}@5'k_ڄβo_6׵l~np;jmyXw_Yyti}Z{vQ]mFTF3N\ym(r;VdvA|+_8B;*s|]9*zFf_3fBgY2F$S.nс?GV=]3]۞W~`a± PyөXC%Ƙ |e?Ҫ$Fg^J}`Q~J=Cuul|=W|~ڹkϕt7zlONU5u J|u.6lo?I:NPָ`/+ߔ'o]gNJo!#;Ɣ⛷и˶dϝ].fn'gl*띹E;"8Y۰]ir":|-lqSDf?%r"7Y|7P[,qx[FƟ"jի<]!z[}miGn&;se܏>Y^䎟W9PdٲgYe/MںAv6/<Z柯m'gnَb;JǾY"#FovOYgc v[ C.߿fҽy2vrl==[jG{|+Ҿ5V? qYRY]jH@5ZO%{te2q2,givtA>pla7@o_מYvIP##L/@MZ_S fA=~O%k5Qt2J\tP^_ ϔR_yܾl c/ح/jDٹ}+yW}׸p6{]iߧ_E]lUuL#FۮLxaYE.?\} /40.]iu X81"˾ O?`Lx!G;|5Rmp}W7]PMN}reCF<{9#F~7QY7ZeUYtX8Ȼ#-FN\{k|zhCd=}s[:_xÍҎw#u}n.-5Nd-^:\YeOY^ud0Yw#6S-_*^w *;=U^VSJeuoz9ӮָRUB@ ݧ4d]?P|v~e{:36fC3\۹Yj+@:G^=xzSKK˘yBh8rs<ͨc2}_T>-MGCT.W#X{z/?,O)Z@s>ː@By8;lUA>ӷw}KĥXZܜnNUs~BV{st*v5_w7|I߯U/<,[cri\UZ4 <{_OmE~fOۥwKFU|1AwRЯrN{#"9;(|t'dآWvwA8 ~WW[}b}zc'tA/nWCݨ_lwn:b&KWYKd<؀9ڠq/6ͻVo*[jO2e53}Qo*]~"~~ghnk]2ߴ.ka{A~8@ &yhg F۔(:Vl$CP:-*թU_ii毽vv蒣S]:zmI[tȕJnoRuV]Ծi]tUwهUP6Of|Frn9Y}="X˸ecg'2n A RՋpYsCwߕ 9W ͽ[\.:@FU!W8 |;_`('aI^N~sӺGWP;HɳYXJ[wHn%^Am|wTzTR}0oP}DI^2 GQmuK\)6Ar[$ܧ-=4~p ܽ3~{½n˝u#e\n^½dݻLkxihuxTpfEuet{}@J(U?o TV,aOk䢹k6=#U΅AC_ Pa1683̈J3e}hg,T{mK]$}I z@}XIB5Q=W=BJ?>f^3Sנ_PIҦm黋|'뾱ɥ}y ]/;^"re…{/dkB&Iҥd.՘@;F-W+] yोiye]gUgR!|GZz_H=OwQ~iÝuonT=r*Eg^rV׳*qsQw\q]En9SE/*ַ}1nT +>y>ì^:_Du\]ݼT?.\:n'psG˪+v^]oWS^U\+n{`!([,||\e{QgWla GE=祶Tӆ:ji*_*=p(Uc;9nKK.o*7SŖ@gU Gg}L9LgĂq}&G:{l<ڏߴF`LYiA^+*:-z0"\Ar>}5HhkVgձBel͊H-RK9ψAwy:J^.Aq9O˪Hx}7J>#.o>#xA짻۰'qw2l+eѫ2 lFkX\JiςHF|D^%2f,t\m*Y},Qus~xNyOW˜-M|-k}mWqtKỪ\*on|V ^~#tO-~1tkT#ܽGUϣ,96w /׍+O5 nˤHdz^}ZFI>g$F)cIou .Sڠ.yeS4W-ĺEkﱽs*ڲF=_ ae.]ǫYq[z*N[+WHCSz=VԎJ,a(~nW*r>>i)%{47meo~RSAg3_NOU5=I00ƽtO}Av-OI,zs_/KyGmqڼUe6_:=i}dJz%]˾~޷1 tsf.-vxg=7^Z{]`;#pOGKA/҈pK Sb7o_\xk;[rvzc}K\*2n}eBu譜k?'m-~Nro߽>Еv9/]uϲQ>TjE6u4.;6nTG:ao)mQC{Ս{]1}ҽp@k:lS^4X[ .//Mې޼\#Qm-so56)ZnG;Ԏxㅲ܍?mݜSW>P;}v4"?{==]9nWjۊm[KnJ&m=/LлPC.9H8g>e'$s轋t[*(^^TD^i"El( RDP&X "DHo ș$߳'N%{'{&'ͼ-eV?Vz7L+9b{0cn<ɀw{c!n,.S{խقxK,!z2qW/o!I/} =Æ{A"f/{Cb^Ͼ#L׎Y_趚U<_}yr'ܿ"++;\R6x)  &o6l<3;I?7;o0~,OB99N90qLl'"8[\o֝DZs"'K: w8N`+]^JpL96('y{xfOr"d[6|Gs5XZ{שk݋[7:\sW>Ak? Åf, [zt.fvo]Ї:Żɝm:u%q~AYڲ,hv;:dv˲v YO&ֶDj@gmϣ29(gFMl,r_k_l_c/xզYE;"|o_~2+d>ɼ/{>U%Ydyo=U %Lޝdy_%Z̗Z*{r*{> rZCjwߏ~^k:\{T[bḫtjɫ|b;<9@2ߓyo{"8urvlt%~F\z= >rˑWw=v; ؕMK/#O?2?ɼ]+i7s<6mkN|xŗ&[ eއ./cAɓ:nֵnu?6%|\s.^p}ewϟ-wŽ|s+[w5.o|XW;Rz<}x>ꚶkNC&XvkkNvgs:+n,[𖂾֬,sV]|lMGϣKk7ȼ]-}"K-/r+; /zϰQ~:g>P՜}uKi_U- љ #,&j.0ֿ%+~ $zՐ )s~n\o"7tJӼVì'f׭; k {|۞G.s~BXq]LukS[Sg=d9SulnnXcj%1_yVYwQ?&e er`s]f '}'<Ȳ+mtOgɐΩo%{aA>*\ߞ#"˻wK2-xڧI."}: _ 6 ֏S\?"OKdx^ZGE~tRٟR=\?Blx{iY2\Xi_2D~L>jMzL>z'sǢ{ٹ2㺿)AxL{%=ul\ٺes[ckm<l˭4uܿXB~.cAOBr+.^{sjs_$z٧=7R}EvӱH,xή9ל5vi|M绲)o_-د~ ZLvF_z}ˉYKoP1|fAzϰs'?Wsygo<>3u1WˊzwW!YVyLZ+GW~M68"5G}5.QpwÂ?>y)Cs~fj,2KL21׶ dު9fuL\u892qsdS/[pK7OjwC2qX+/V75?=W:ym?ϢЂ{h]{e\V;igY=dϽV&*;dX{ dw%NC2md3{JOgv/e=eMe÷C7_tݏ>~O~]c9h,qZvβg_+sR&~tI,T6:lSYu~<?s &ֵul/xltl9:Osps;dm,x#']v){1f^sלm6.*`⢏oxL&C&>=bs{D9rmo{od?߬,s}Y_}ݫڽߣ[w.mk߃^c؝8qY듯?FYme⬷RܝY\MNuS^cOI8mYs#ɯ7ݯ8iYWdzz,]]RꉯeNs52qLۯU Y>:]/==wR`ej4#dž6bn͎R\m =&gXܟk]7;g390 ʲuJGcb>` ?u=?-@8ybW=`~q0$vqAFeG}訙nzFK'@5k[sŮ%&rw o S y"2 2U_G9P p _b[hٖ\QA0+iF`D ȆN=pjjn[XFmZ/`40۵MֿBs<${@yBNOq- ݿv]La3΢P6ǴT+4 n[ͦaL-7/#<H%PY Ţɉ#pmSnސ|J&s<ŗ4]4fwfQwR0o:9<$NдКY0Lζ \!* d{Gm.~j Qߨ S:Thf:@vsp)߁kL]a3\Jô>SzzXtdM|ڒ/`Y\"dS.q^J L&L]V i~FG'j.5 K|#i_?53:8C`TQ _.R2laU.~8dE:Vie26o]Q|}"T0ǮXZy9[@6ݰ(N=/0n@!~'C_Jsk|azWw]6+~b:{ݺ˰g.X@6sK׸Do0u +@(-aRlloOL/1-[l 2_Hښ1i0L!?@ $ u7v Mhon9\%Ə ϟ`F1{V=꟧7~O\{-}"T\ 817toaRz72Z]\)X^'pۍe|*GkRNuƳMnnK\|%\Y't7~H!Ŵ KZ5zpjoLS`S̆/g4|?z2q5~y$7*>-дg 4;x}dZfݸYӼIAŧ" NCCv:e 꿧#M=J T;))<ӂB"n}]3k!f>/I^87,v^Z6!OpW:@p?OG{ŏ] (@y)l7ܹ/R3IjzۡVZY/t177HbGYlf4ǏK`8o&@wQGoPPhsE!i/--{-y&_[ŏ 7/C?3>EGqߋ.^@H^!od~X"ߩ+&~l7Lc_\|zM@P Iu(8P^d/-lKu^#0Cd B557l-,6ld⋋ϼyMֿBs<${@yBNOq- ݿv]La3΢ (k0l|)@yA|EXh~_㾇xPТLcZo{d~-fS|@f88kPGt||& /#<H%PY Ţɉ#pmSnސ|J&s<ŗ矟-)>+(QwR0o:9<$NдʥälKb Ҩ@q&~⧦*gse>s:@vsp)߁kL]a3\Jô>SzzXtdM|ȚIpzGtvHgo2bσߩ?qSO]/t%K\&fh_.y+4[?#\#bpi5i[%/,Ѯ5R:*?6..>9<$N%f qrn i8vĮ0 ď-?$3Xn)ߋď\s1=m3>ʳ-ĵ3t50)KA1-B:Q1#>Xvyl:GoKv7kJI]!v)`Q7GHl.~7,~G|@wAе/z}*qk[02gYwueM6ZK0tm:8gױko,sΕeYur*q{y`Pkt}@s(4R Myg~\PPffYd/o-:+[6`u4aꪫ}[N/f}s똠8>O]oe3<3[Z蹗SS#wq?y9ò0>I}G/g>9O̎ʎKKz{vylÕ+=>{uO99Ce~171a({Oώc9&s9rGʆnX\:9kl2EI/1e}0cZ?\5>8yl wԶJ߁)BW6Ma}9:7dU+h/-oy[ڮө&WXal=ٸF]W庞(\gmW\1[o饗^_|j3Zgj ^9䨣%\rms;=_28~я~tO<1ubuj9ml喲~ecr4im,]V^yXL$e<9ccurP*e|c QlFyf'.1G+P pB݈ *qYZz$y>GZ#3JQ,~P29>X&p6|ۿE/~Ο?nzԧ>%;v~fC]9䐬5\=CH"ۼ=5\3&};zzY//<[g6w}j;3CS"_/߮J}Cr'> կ~==a.V[e_{Y=S{x&h}'v\uU;TԻ+czvuWkuMܝzr%dkÐNS ;qߞ]f-z0K˶gQ|宾j[dWWU=oC5~g? bkHy~vp$ ƓMz?S/O /?ouumǰZgud&wZz{:zS#$\nV\pxrV>N[La84[!{nu@56m @[0ߩxJ|~;ߙ-{キ|/|!끮 3 N=WMfkߣ) XW㹎0\c2EkFa*0 QƤwGf_fq%*]B~v%5;62ۛ9汦k-M.~jVw2+ϗȒڻP͗[o ég)XCmO^y.MiM3Xw}_<g?W^y厯?/ܹs>]c5yuG}=m/l?^Wf@cǩΣ >H95c:r z*SfG#lkX7n^o۸@L=P @5yB?6Sz M@Nij}ĬuBuǗaOr=\r%Yǽګzޚ;Y㎅kG҄)}O? ?WYw vkM+Mhkb[ys/K\ם?E]8i0znvHw]| iH*A_cLBYQwuֿ%3~X?v_@y~>o1xhί b[Ef{;xbZ~iQ&b[B2o֜񩈄ufI-آ^{'&6aѢ5:T'tozckvv(\g]vV~te=t{*~me=PuNr2yt﫯:]K/͇~!>H奦7v Mhon9\%Ə ϟ)|{L׿'s$&Zk-Ygu UW]rӟsOqGh.2YoϞ/0yW_}joǖ&qLWyKk_-liTz*^m喲~J+:o.|p&/ڎ纮pVP`[ߥS+>us8PMZr+ĴJ%WI)MtDnhuqc{m7񩀅(H>&%Tt8_MKàO~R>.}{G駟w:\~yəg)g}:k_"v>yW#o~&§K9wgl 38#;G :k$vyyT=4𾧎x6?߭?t=v@yu+2&3daIkFPmi Y|*fM|^{ p~UVYE_NCO9 n1;|(-㪛/K*wˆn4gz}Y\O6c% ^~>RKɫ_j;.=?]v٬7~D6v]s eʔ鸎/x4z2q5~y$7*>-дg 4;x}dZfݸYӼIAŧkdv؋OutDznG{?zQ?ӹu;O=uQ|/ kKO& g9s z 5]]\>T=u4ѣ1xGf ' tr!S:\'u-[s衇f} _fG!?iݣء16O (8PC$L y?GuYlI$y߰yIjuď(>MO<%,s,l6&q9?4p?OG{ŏ] (@z S&ns_8fCR^b&nn/Ǐ zC>KiX^AAo8u׿xs'P^ !xan#?.3 A5ӍRSwoި?]^Tt_zDƷw ykص$DyN]6ca d?3 Z: ѐO]^?HEfB˶ ZYI53$J^@6p+TS?pæ2j:O(N޴j(?C_\J g[i)lO "kH<#,Y@e?6P p`",4/tqC<(hQ1-Պ7M=2e)>CTf ꁀQ <hk%Į0\h 5wZz!cW &f 0lԼ$?(?i& 37pFֶdS.q^J L&L]V i~FG'j.5 K|#i_?53: pFBװK?S<Dw8yR𖂛%+Zb #4*(TS?6C4F8~G|S9 ֿvM^$~zAn'8Pm%-{aII]I󑴖f R?t!oo,zϐ̂2{;T{Te26o]Q|}"T0ǮXZy9[@6ݰ(N=/0n@!~'C_Jsk|PS0c(jk\yG+P p1\!\,yk/,r*٤odZ`T?7'0#u)y_kNG[|1m<)@9$ nj+XŬ_C $X'3?o|31Fb(V6O_k//I 8yj7VkbZp%WhZnNU4EeL M$ wk5-c7D{: pض-\%r7ya4h嗝G$pMG ⇃O Jzӑ2c7xF:yIMᖺIAp&ER\^6LyYgO" %So:R]&~'J"TGpIlaB{tbZP0lK梟aƗ-̬q%~qH@(/p-"7?$pBKaZfۻ\LuO-fd pby2 / h_z}B <a/ @I$RSϳĴSƭ#󻽹ckbaǭkuo qwo}XXmsϗe,t.clkX7n^o۸@L=8P pJ])i= & rC4k5>~b:{ݺ˰^::DAga8Xeaaa0_?,h p}s?*?ޜS}ҺV!꟧7~O\{-}"T\ 817toaRz72Z]\)X^'pۍe|[gssC3nJ [)"Nn*/<1Cik զߘŧb/b麙 0k Low\{'noq=M O$| /)(4mmogY7.ha4= ~ln3~R9lF0/4q*uOG|H z'@v!RSx#D,f פC|^poX$QAK:GmC 0v5df(0 QNSo8o@]N$5=P+yԬ$1^,6~Cd%M( \C@=u?]^T⁋ O<@y+҂R0Kmuŏ\ ~2>ZtD(|Q?8Poe\kI懅\/9pm&~>~8FŧwZ: ѐO]^?HEfB˶ ZYI53$J^@6p+TS?pæ2j:O(oN޴j(?C_\J g[i)lO "kH<#, σ/@(/(ö ]b ZcsLKM`El`1 0*h?4(^J Bf+z$'fmg LayCn(|<~db#_Ƨ 4t6cT̛N(!4-ri09ے+p4*(y)G!~J|*:@vsp)߁kL]a3\Jô>SzzXtdM|$8JMFyP;'.~@y+ m %o`fgkyD|n=1R:-q˰ė>ES>CP2]װK?S<Dw8yR𖂛%+Zb #4*(TS?6C4F8~G|(C`앭VRH:ӃO : p<K\+0[+UmWǦwT6dwü69<$N%m⡻La6.%ps&~.~c}gVsFXkԯo66@~PJ]iݕB2ok)xCh0Zk|%pVc$0mS0l.2VaMs.u7oȬO h.`6:SSoJO\;-xmqcV@:NT ĵI|7GfXYd|{cs|*x4֙M+׿X+iyŷ p=vR+5E pypc?R2^fZQko,sΕeY[p4ʦn*~% {H[o=ldʶ0 uZf*꺋- ~i`zwTw]6+#夓N39 a@`Ъ7TZss:⋉oIAɋ^"Y~E{}O|Ηbְ깯k1ppܯy~9yr!YҿK/tv.,H6t=-Կ\<]^_ iA<%pn|a%ĴJLkдKݜA_i^3j?6?˘G ve[^{|#=S{o9 qMxKÀy{dΗ>;;: y-]tQ[l!ozӛVH]v~P=W\mW[m59eQ72XK;_?֩|꼷=#__Wc= ;HjKMXib駟|+_ }=E{ =vUN^yqeU˯Y̦szWo5[nGyDlwi,[vj6rP;$en.8+t#T-uaѓᶕM34pm Z)lLO!+ҹlҞjEW<oq0{SOs=WN99du-\_:d]>9Mk/|ӹU឵o~3K{!\07C>6lv뼩:?&K4h"IIYbI/^*jJڃS;(eFu!ǞA]79uRn6hjg=Ym,rElj/Sf۹_e[i%͵qܷ,Qni:tǮ@1LO S Dp Ó*r Ŵ`[ٖbE?Ú'M2n7ګw]Vp:&~VYelTCTԧ>U L{i$_tH`Mh8NU$s߫lZ>,Y,MJi@}sL6k _4t[.~չ`uM74ej"RM2#HUP]O|h`sZkIe/JB %l 'oE iW9z]ӟSA]7\'+z]y.{^iqg=5y=:cLm~m(NG/_8z2pʌA(ė.c F@ykO!k^ ,0sb4Lج ~2?*Xfe:e]pr'ʅ^ڃ\W#L{}o:&itTTu=]t՜VkDڻLS=k-۪WUZW XW}mM6YKs'?Yq]4Aikwڟv_W`*QtmJ+b-V6 =Sk)wN;Ny{;WVv=V!&g^zk|P׍I}O_}{Qai*V"՟s:&+u.j]иo{]rA烯(UD)mTsuu&!g/c4PFΓֹ2?220ïG.OGD(/5-\!d_,T"Ɏ` nq{֩0t>iclMszemMNW2~?Djc~+=}oԥѩS+>us8PMZr+ĴJ%WI)MtDnhuqc{m7i^M^ٽKtTFC>햣:j˔:6ڨswP}^8C2PmC(ݮx6?߭?t=v@yu+2&3daIkFPmi Y|@oܱAUԷ=?k^+_ tU{鐽:찱J+TNpԤts饗fC~riekOێsx$Vo/=G4i'W)72Zj)'KZev:e 꿧#M=J T;))<ӂB"n}]3k!f>/I^87,v^Z6!Otx؟'p^ڳO+ĵ^͇2JsM4 WUY޺T6{w=߾]ni[=^~gkoeSPozӛ~~dn5u!UϭJ[n<ѦKnjuוmS /b,\rImR9$K.QIV[mjݮ?U QuR-2u,jU.,馛M[h޺2e:fN=ܳ1NKi ?|曳߷~{93GUs> m å~YEI'ϪêvC6QΥ:jo<BW+fkEmݲu4I^l?a_4P=l?zH9R5C~Ȓ9'AccS=ڣAV{!?ef_z6tmmP~B#4%B?+&<ud>ܹs_kyZ\kff¸unki#~8Fŧ5sMy,>dT<tP˰S /̶^~|ȆO!Qc8Ina۩;CP{!@$MiHBo}k_p}M|wk]zWh"pwdǁڛWzi2j}r)ٱw̶tEϏQס^k>v~UUq}Wݮ6ҡ ҸG&ৣ\-~?fU&A44`fQJQ$~@(/2×Z%WT:JZ!QaS\6Qi6~2FK[ʹҡm÷N Ʊyrwg IjX'=|U'}yO^=瞡GY: 7 =s[ȌU Qu_Zio}AU Aeh[o53Vu!/.~c|%ʳZwb~ke b \npƗJ a[w_.1{-9ZQIGwۢl6ŧ2YѰ@/ ?4(^J Bf+z$'fmg LayCn(|<~db#_ƧlDc`m(QwR0o:9<$NдʥälKb Ҩ@q&~⧦*FwP pA #[P2=vbbQOp) OaA~6joP(7ATKܧ:H%3/Sy@{GnĴKM-_{O c|Jտ]_Gy%'T^Rp3D]7vYô@KLayDbWFjjfz=0p>lkߔEG׹6~RЙ@HL\+0[+TL3*{kZ]o`QC 8yjRfz"0]` ظ`x\gf**bGJT-&jl{Wlb#"`WlQcԿk,QcC T`E9sgݝٽ[ xsTG(RώPjR<1^Geĵ,qTߐN+NOhmn s;X7)>V8 {YNE+*R,P^In|i*Q]%߭1NLh({ q@3ebkTe3U./Jp}(P|'dFEqE9u0SjU]ڐ+AȧI<+U@'_iPeKW5|$w4iRtWҘ1chm1r@ٓ<@/ .? 7@koO_=]vetW\AW]umʎ;aFz+]z7O8:iRKэ7huӟN Xs5Zke5X'>k?M7ݔ&L@wy@lA5/^lO?z낲vdoΝ;f͚e~s>}C1#2bYzs=t)x-k?ؽޛN>dZmo~【3<8a%0`q"v*@nZǑ^8KH >py[(P}eуp%tEP}gkJOuBbVI>ɓ'өjN;."zwl>c:t?eu _q tM&O#<z!i=l5/;瞣>8Y=Xzw|vT-2eRi&}^Nj/h/i~wFW>^s![w}d,3ةS9cGVZ}  P ݴb#Q0n8H$RYyJɾ'hdbpQ|*ooa3xOwޡk}Q=;_~vS.5ޠZ-e$p_[2?ygu]O;S,ْg6e.\h>K:uf25qr67O?ѵ^K|&4luYǼ?ZLrxǹߔr-o.r{QzI=:tfmf?`3f̠ykfJ Wi2   ڑ+QiPpGEfy-WeD#zrrRB/ ?OwA2xeؙc0^?㎣D. 'ڋ򗿘>o~w[n8>hРAtI'w}ͽDZp{=\#z9{K>sIV:Sىd]Gyļ͖ ftB뭷ycC.e]89]4?8l#<f+lx+ L|_ Ǝ[T= |_|{n{*<:oܼ]{9|]uiܸq;.Quܣo7;뵟d,mQ.9sfcV Fփ|OKG_NW@|BBu1Z<^>\t2*Z} XH^+T ,Q}:o?T,[@]z%Df㻩Ɍ~gNg.[38k.<1„ &;y=l?hvvl$ 7[敳feP 6`(dk\6mZq|=X'T߾}[8GF2tZIuh74|I@s^۔{ќ%cv07)8֖e WU{đ5c -|r9v3D7ץ*Wze5m"8d38(qn oXrwU_o\@ d@2 r r~ĵh90w-ض7{(GV0l0}|3e?W(7\%;x=Lv:-c9teW^we6kq/litvpkYdx}ܗ V_*WJ7c|9RSTsmp EvB9xW׽JJE_ 2em9'PLoDFjvٌ: h:)wTϳAΙLdxW{v4TYblRڠ\K]wՔ H8ӗ3Q\.bFqG,JJ8W\`Գ>_^ff&[.}ꩧe&Hc{ngc3y+n~qe:ϵ,M!=l{ /gxRTWOΎl#yoco+7x:o~gp=pP~I.q/dUV|zj]dx*#%:QeR3JR$"GkH\ۇjx(b7HK.83O,͵pCwFUyήӓ-.jt9wus"r5ט|p[odx㍴V[EWv pFBqybW=*$"ÂܸTSJfT;5&`/ivr~{N4>Vbs+﫜6tSsnH#Pc0o<:M6/gzr/W0r\Οaǒu Zlv0P>͹&Lw$ pQNYƜ8q" uu8=p9,X.\N8vUW]vi':餓Les9+t6r~v!:9–V]{^{+s` {|9ؠg2m71cz~nN6Xm~$'zP"pEJS*NG M=yeX(RNALɇ|L>G;0vV}\-F2bt.:foJW k,MZϯr X`3;N9a+(=2Ö|wXnV\>X Wl |^rFk#[6|d3^]6W ͽ]w]?ƎG|uO)\3gqfLcޢv~e<;x%KbKJo&KwK `|Hw#2@GH #BjyqVmȴ}Ir,/V^n ɇ1sWtrn%ewO>f@F}vhc{2Q/W_}J2V;{asfш~|fln%[AFd0zhk|΢b-Z,+W>}"gsF6AuM616^h{{]Ō=ۺo0<ɶcAaP9au+dul=oDperZ9I(2eG+˹JfzEd,R~DTA/pP[S 1k@dglfKl Lt:m2Z LΈ\Ynѽ{wLkz頃2.mD+l?裦u >C^\\9# j|`K*"?y48_{_XQ!YṉCϞ=[{{[Ǧ}]k?Xɰa6^z饴~XW\AǏ7- бTJ*e@evZn]嶿GvGP"$ %l4"tYOe;sg PZ@Iǟ cs2gGyR]w1d6YjLB>y{rs)}wߍ:`\R3jޣ'x¼r|>wy<ʹl#]:N'^*8֖5g'w;A۪ˠwqt 7'ΰR:-DȼϹE]d_|q3ӧO7a gÞy 'og \rC 1m?OzoK.i|şs~ұ-u_,|NR Tz?{5"?T@|sYnVLh>93I&NT*?ۛ[fyKpKG6gN|EINs=c;&>F||&L@A:蛳9,; 9ϼy󌓒}%TE{;;H+Bv3믛s9x[̘1X.%-~'%-R> pEBiL@=A(^LW'l]p>#n' |<=˰.C?d4r)tG7S>K5dIxY^g=ZnV2.cGKogجӖvmc%3k,:9a '3裏6W^yɸ핷33뺘Xa|+YrE,KWsq*5;s9O|;sLGa YvF2|=SͽNc9/r9/<(Oopz\k6mٯ瞒;. :C Q`|lj!#\^+>W9uQH(`{Q֙zO?>s  9g$\f3fΜB~zŽwy^z%\*|N2t |L^ٯg.>븿vG%۫u'op@;jQ2m\UQQQY@|Ԥ2RHDGc }7.Qdlq+2:OI#ctF`T8uֳADt .-KQ&]'#DI(R/B!+ WCA~*F[/G=5M]k]N? pWH*8W(5Q^db ʨ\JJDIXPw#ՖĔ/XD~W{@@ P%:?WK~[@>TY@|H6J0T[bz껔#"{z BVS u}P,߰%,_\K}1UB &xO0(G\W,%"}GWԋP-: 8IN\k{V=uN"\"%8XB#<]5/%ʤI 4#_Bk!#U[/o]:^'NuÇ@LpP9U,`( * Y+Й?!I.1z}$\B]P6Ss"+ʴdu2.p6.dswk1@"QNHeW >;BJfxײ\Q}C:|;tgs;X7)>V8 {YNE+*R,P^In|i*Q]%߭1NLhff&KU?So*2.J>D )WQ` wRAfTYWS 3Yܥ Ԉ|)KDwRk9ն?Wlp)_ )pR;b^2S}Bt6-XO:}==Z-I?,U*P99i"kaۿۓOBt.x@U8 Ʒ @ ^w֠|J$C:IU9O=XeJ4%}D[QdՐVK>8J+Dk& 2zꅝ:5Q}<8p :WzۈP/Ҹqh5(zL탮]R޽k} >rսFq*$#-TeY "#\FyI'>]_$TYSb]PXUr) ץwޙ:ꪫM0nYmհ:9k:vӧvi4i$3 ŋӊ+h޺ ?9^ 7wu f bud?3i]w-j=K,'ݻwFփ|jG~DY@ @|'\%Qf9"II X֯~v- gAvatmg;?xѣG}](J`Vcѣ﫯*z,;sO瞣>N9:cw5Ѽ24zO?5ޡrv\Ž|{|NJss1?k3}-j~GAP6ZVV`ؗ()?0 %1SO Y "H(W?E1/PrOհ|nݺ.b޿{t̙3㧟~G}Ԕe\rIl"{TPZ_j"r\ܱEI(z;*FleitXl&ٳo ϜEgs 1vps`w$v9;D~ڕ~283fмy^n!=_veL7 kuc:KzI^$paW/SN#E)X^XU-|U3 )˙C=ӷ~kޯ-r\Pw|ϙvrZNƍ3߱3p7lx`r\)c7dBY /̖[ni>sdԨQgn_p9Up .vfo0f̘d-aG ;C9SK?Egkt%"駟; -q:2oqݏ7 9Ciqq0 k[F\}׿8:Bp; ΰk[o+;80`@EAl {3H8InsCC'ji(FW?שcw9}? >7 %eRdԘ'~⁈"QFB ;jdZIڨLgrb`e|IzWCESSS﵃3yxvsF&̲׬|d,g@19 Κ[;yv^C͗gO.;xy[fZʲ>k/×o~j ;Aj'v2j<[ZagAs9sJ˽9S6mZ9:Xc [ʜ^v횿l_l,\ -kN;/oC^/pPݧn+A0^ngϞ:XK"^m,^;o8(@- `| @|BHTW(G9?WI;|^zW.3%w]qE.;83qi^ ;)xZ馛{累>,cSj^z)>0mθrYfBg,YyiȑȽO j~Wj5+mn=gds7_s2k,zM*u V`7x1^ddsise*+>T}.@@2<EJ T2)QU^SI)LcZ5|a!Xxl>\ C0'OnL2:8:-Yc^g'4gMpӛpeͯ~ΫZW˳١N[,uGlus5Kݳz-/Nsvzsyx8۪\Aז>|=sE[n,ʯ5{Lu_ˊ# Y)۳*3\ |@  FBqybW=*$"ÂܸTSJfT;5& fYɕ˥%G;ͥu&uhK8hs%Iwٛ뚒c\kaI\-_vVSg//3ql=b3=\P8/$~w{"pРm%lPBu]i}5vySc3?$q쿩oڿ7LrRW%8^4tXdp;gX֏0ˈu/-DԚ|DS7qߥl_ݼegmrso_~9:^N:5%t!bQκD7Nh"q̾}w謳2 ^^#6۶-`7g`s4XP8D%)WB >|pnh:Bۖacz1 p@Щ Pz,drߕ/nD&x!8Hv)Pa=BH-SW1*נ /UE%""!+ ߭!0J$:3rt$#2\{ySe/b1QpN$.,|^~58wο˼NtI'܇畃btB~Є NFk/XQr9VgU; eFL&\4i;8ohw^ ^z|{)Uw8+ VV\ {J$+mʝk'VP,* "VnKHS c1.kVc.馛Jb{Wz)S̶o76d0W'';Yz@vz{Sc[wuMO`A e'wYJ+E._Qr>d>N_Aۻr˙lolGE#G4p2Rcƌ1i!Ǖ`xzxl%TUau\n{?T⎒F.+Fd~SDRrz|?B~DT̜93P\3O>dq[̷Yw޵yq>K-{רˤN gG8;9Qka_q)'|=z4]{f>gn bNAK߭#_}U\v-]ڼ _c5|{ZG8[y\v~ z˔} )N <uULm՛(ӎJp#SU$. ,rG}rvL YwH>)(K{d2K2ZD.m7n5U{3N1.̎(Gf ct6<^}5tPjLwͿ/ǜrNRYdk{gSΉK\aa77r-ոwӟ+]v}O?\݁o[Y(c,5\u%9}РA==t6~9I`jD~1x|В\^Dt$ȭ%QLrR免)RYzӤ䓒?! 2ڏ?yϥ9+O>9z<-3vJw63NacW\qE:3-`N>'KmvHCc1!hQ`޴4d "ka_㏧3<8RK-߆λ_iWx_IpB1\ښ0`tA|]qi>G}Vrql=b3(; rΜ7^,IaÆW_M^z?^ |\q4~x.]t&|ꕜ4~'%-R> PEBiL@=A(^LW'l]p>#n'KӧO7fMo9N4U_;vzfu]GW]uqU.Ks/\v+Y6ʟ[2˛\\Vg2|iZW䞿۸E]d.bgmn?l~?; %<[ySpf7b ߏ;w&Lh1)<;l̟wyhP岿'O}ל~B.D.a%)C/! C12tYhvR>;҆LC=~*?#i8h|r)tG7sF2qgyqӦM3 s=%76 H d"Ç@LpPWDhYˆ2;(%JBz Y^^ \SI \~8s3oIs)j͚,h8- Ovj+vl={vYfZl WR~/q<~j䱠8W8עa޼yUC8H?nko ۿip=JI &?;*KLB D@KI3)?nsxq;c=̼)S %:?WK~[@>TY@|H6J0T[bӦ<]J=Un=QsN T+:>J~(G t s̥f3": P_\K}1UB &xH0(G\W,%"}GWԋP-: d?;qD3fLd_l34qCؿ[T9 r)?H$x~ TThDP9tgΓ+ ?S%dNw}7i B_G̫^ߺtOٝ rxK qW=X8B9BQ#}%US &?,A>lbWr_mAN@kJ)TJ)%i xHGDb9܉# gG(5W)ÌPv2Z8oH? L玑(wnR}pVTY"rb1eUJ[cEQ Np3C\8(vbkTe3U./Jp}(P|'dFEqE9u0SjU]ڐ+AȧI<+ g}p|>";j۟+mU6{V8ȈG)YGDp1h/>!:ܖWY'sb*_Ng즉e?unnO> Dȷ V8 TP)5G)VGe(XUpbzHn$*U>5ܗjD2۟+)($#bdZYQD@D{"B,T==·̈uzn }%T>P;J/LgusXuVJ;*Pp ؖ P*&WP<`aF(єP2KqowODUC[-0j(@鬺ֈ;|_wTYBdB,Dd(/$ק+;\SB~J+6tJ}7Pb#Qx &pA IR}O2J)FHnU(a8sKO%3߭ ڑ+QiPpGEfy-WeD#zrrRB/ ?@9 7~g7{b_:t,+1B I'{,b$ᢋQbn{_(B\ZjX>n@=ưul.|W$H$*P)}_( G\!SS2b])[nT}@ǁ ʫ`R~ Srw#E@ @|t?oJח+ʤȨ1OE"v$#ȴQm(Yp"a| @eHTW(G9?WI;|И%  se*+>T}.@@2<EJ T2)QU^SI)LcZ5|fD%rl. =2@p⣣H(.O,㪇]R%TQ2DdX*B~J)Ռ|䣬8iH$I;lo*ۨb巷M*TU@@|tE(M85*4?܎D+#"2b݋#tK93& ' drߕ/nD&x!8Hv)Pa=BH-SW1*נ /UE%""!+ ߭!hau+dul=oDperZ9I(2eG+˹JfzEd,R~DT  =@U3au"nڟm*CQÈ@||ˆoA*[Qs]=GO(j@W|jp\n{iG~%8Б^Fs*LT>J9;J~|_O $|O 8P"I`jD~1x|В\^Dt$ȭ%QLrR免)RYzӤ䓒 TprvӤz?5"|H@|d %3J*K{B2]uEH>At>`|lj!#\^+>W9uQH(`{Q֙#k(h=UsUSDEYGeb8 RWJ1*#9;5Nq2U|F=ǭ|OtL>%?:+l =W]ԳADt .xDtr%H,c|_$G(5@٨ko ۿip=JI &?;*KLB D@KI3)?nsxX?D#F5a Kuf*}1J(m`${w)GDT@Dͅ":-PSȧL(X%0n;z?ג|_w| .*7E< Q."K@(c_2"j(DK;%ȷ4M\k{V=uN"\"%8XB#<]5/%ʤI**@CZy֋[I9Sb\<$Ri*CUPvP~DyG|_wTK?$ɕp zkj-uP@S@> prR Rr DwBIzuT\Q%S|Pٗ#swk1@|dԘʝ8B@|vRs2e:*,#etZp@3l3vS؟;F~aĺIq8Or*ZQRfNr#MxOU*nwbʗEGIfhm9ibkTe3U./Jp}(P|'dFEqE9u0SjU]ڐ+AȧI<+@d'[msupy @< `(%.#&%#<'Dg*cPՒtRR>~QsvD2۟:'|"[]g+ y+2uIP*P81QE|AwO*_d< 3<~Nb-mON0B xHpED D+"B)|ΌX QA%3w;9A:+W%\(8HtlK(r(z0#hJ(E%8H'Ȫ!߭|>7nkGz;,! @2BBYE"2etEBU)!?% ee:Z~X% ֳVq;J~!mb8 TYD*+O)5$bm4[.JY~Pem?uIuoVY2ݗΨcԅ; J#A>#WNo?, >T?Q[O(3G$䤄|_,WA~Pem?uGz7>:yq)5y&ܓ&QʪZ4 .+z} 08O(T~W!FBϞx/.y-b,$E[~7cj9<E=?9Lҏ}ЬAҗ֥=z?-ӏݻ6 ~~qztC6Ч7mt_ң5WW77cw仪 . p@2 VqJB9top?Z*J@,e\r˧Zdl(@ PzJ񴙷`(=4[acy/wƳfK^{C7E魎Y/1OЂO>UJWpIKf?~RCo%yS'3oL-i+<\q~O}gT A4se:p ѠfePijNT@lK1Nۿ)ߍ%8I(q2)2je?@D~(#52$mT[3oH ;{v'ލD4ka<Ӓ_Rx,/ӣOͬOWҍ;l?D8F]N'lѵG|G5~;T΁OCۋ\ tKUcR-ђKEb"wq3}6th4貭'AR%A m؟/mC> p࿧PXJno+QOwUqݫT^ŝ@~g2Pm~$ 㜋͏M_Ʋ933els,Z[d?yst4pFDw1 {fHpW rO. ~hC5w-C) sfWcT w3ZχU8J@r؟++?TYuJpH.R DtWJ(.GI&Ϩ2*NJa z5!7 |V}>5-Wc# \҃h#i/>u5.ܳ}4O6G;]Z2]hc`l߬e%zF-#t Bd$qIaLj\ϔU/tom#t uڑ_cDbv+_|}o9ܒGnJl/ Q rl. =2@p⣣H(.O,㪇]R%TQ2DdX*B~J)Ռ|7q$N> J:Q%6 bdvكώs^"ڎ]K-/hV([Z7AeޜLw#8pÖ|]>n2&zlqH.n1q%(})=C/'>&w֫y]{w މk/4#׫ ˯l=n )}MG,jž)2/o}-B-7c_GӞvFmߞSs#>r&{ٙoWZ#ryr?Mn>KdQzTy~cuߡ>z+X*{~nr>-xv_cdd&>xf\2f\4={GݐO9PzϋhQTWa;R۳r/N^Luݵ"oKtVv~^js:j}La y=>nJ9y4J65@(قONv8TQooT&9֫/PRq:jUh3W,GDeĺGEr"gjM~G'Kd'Iϛɻy7$gmƪ=rc=5v 16 6<$ջ}Z~/ %ZcoW^*9S0CF4`] .Qwm0n=/V#ZuhvSuvlwܭ9ø߬)9a%r;O3gF/o3c̲}i汓6E2s爑4{֊/VNsN;-;{,ߏhc#Zv@wze^?K=C4C3mwmmy|%%Zs)4 7oZrrW;G1ZMMoy-:v4U#bon>[@D]hDI2zFݥDM$j8+לKkZ8ꨂg*nwCCD=o}H؋?z"?[w57(塅NgGA/Mf?1(x bIC!Y_jw%KG Dp]?DJ guRU5hCKb}`}IHr wkH~[yh'3.4'z<G6͗'={g_ZcŚ35y5=}Mi/huiD_v';hTǮ&zB'%ݖcnƛG߭yMCnv6GofZϗ~>^k{ɯiK%z쪶74O"v4:akZ}~*r}{}&uhdzDw1R/E֯g3?}]{Lj1ߙc@c4hvDޗn74i7h%{×1zjuQkn5M^;55^k1Xx%۞Ddvt[~D>ny>{t w~x>wh1kWhۿMZ_bN6~yh>rqԔ~2߭0hϋwmNM֣Aؐsr7}j5m}H7Аqé钭i6 z=vC/' U?WR}eXr"b8q TsBQ$Ԋ#\%3PA_"mi)?S|*B~Pa~ Ͽn$D?hxy D뱖;ώRyc{2o-xnf!D!DGMEM\CM8fݶbWSӫwE̾ހ-LY8xo<5353ZbD-}'Ҡϙܕ?BC>hUmM%Fv¬%o;"1\!>9QD R*=h~U1 2w>F|^i}= uqv"Qo?7)*yq2oֹCv-;={}3;3< y tEߛ=A~J?~Vorun}Li9 ZfN~)=oGkM {N9|~9=u9Dox}/ k!O]E=]D>虛2=ƓQ5_'֩(2%? (\<W/0w 8zۓ)~T{%o8òicD=z=:G_55M}L~:;7vu[_\_fO-@cH%dv-fh.iϧVfq0Pi٫-[l˫gV{>}r6| ܹgökga1]j=<ʻd_>J]ƒ4,73U Z|g?,ղϽW&ꓛ]ٱw㠍 ν,y'GMS(;nDځÎ斋A6`-oj|jzcgxv:_\ٟm;ȏZD :K>5h._E0"wP)gG )|䓒=;۝DߜJLEAk2doԼR+f]oac{/]f" )j dJs7Kx0~\WE~{NdG s"u|\}߯?ؽ ]{=vXsivYl5ѫOu5(i(Q=];%Wh5tȌ=QS'(=^b? pO/^EDI:Q*Ȕ(( *"W :MH>) aNDێ&Q3wz>;l?x=F c3u1Ogn$ǮO1͙IʏkkfNm?綻jɏ]ŏ{!S{/3e]lS*^~vU>Tqsm~鿣f_hL&'ZaA*%_DbC^ \).G>ۥYae2ܸMn~?pX>Ȧd+ONjs^C3 iI}z؟hf}GA߮BPuPI`kD>)n1(-JKfzT Bz݅d= e몇Pq;`5[٢zޜ3p !^˾vMߥgfޘwO"J0ގSlwjO hQCя?35eͶ?FK~=C:j_s p'_s{\NDD""բgeDYg1:s ͚FA5=3-}y DG,}y짹]gG~Qp_Hhfv=Pw)}G:[v L ca4R2r?גDwLnz4^^m @W^HB )_B:mC@w#n\ۻ3i{fgFY3MWG{93oMXЗxk358xvUb[-j!uS]={V73D50W K/-[Z^)_y_$xHy <|wUX<B EB!BH0?V>"ڪyBHh'$<ҩYJV$JC+10 Ojd"(3*#xJ=$n> [@⦓Oݜ7Dw6*eo:Q+wg/*e_o*dfQλf[@/ 3P=}ᐝKpv'7c†>À;-rć ~8+Ef{ j|Jvr%DZ,低xiTj\S͐M;-lUFيeiC JO~-7>X[{T{ʌJ!a?yU;kQ@̻ Ǽso9KCk-*kdys2}iMkrU{>jԥ+a{.A+ nŏrbzU * z~w=jš랧bшO#GyCk ~;Z(kN{a1LX{s~os]~%;z;֮'6uȏ{{uMS!!3_>u96z5:H?#ꜿ<Ľ=f?#w˨Wk@׮ގEr&BH{B!)ko;SO  DHLSӭ#2=ubp)qL(SWR7BʷWE@G1.?T rm'|죔&sl#dTF?'`A{Ewa]3Ogon=+t^*lWnoj3au,/lwgkuOuS>7nܞT,ԲSe?x{;s6?XݸK3{벷`yBb }禎'_aUo`޵X5|g>eYvҞ7>3^]; [7 UCwur{tٛMH oe'G_t9"1wmm,Ծ~_WO 7K-9:Xz uavE${[8ˁN1,;]6`]?XDZu_bسl~W3* l~$s뢩y7y;-j`&BH{B!q e.&  u`PB蝠o$~iŵ<"j>nV;ֶ"Ww;Ltaju ķdž>#xC*qF~wdfeyǒ0g/ lMܕ.]͍ÃL PW^ l=°oɞ#{h``-g`S DvˎTg);&kMm||n=&ֳyjgU~9jj;a?ͭW)6lw/jY+γ`OiaApT#=U; }$Х+ЩS59?ĿG=ү=ȼOb#S80x4ХoқlnȖ݆oƠ?η9WēWbs,}ܷ}oo<:w1'c>n>]7/=nUxmibsM?;~o ݡ=ѻއ~Vfo'#qOP{NMGb5zm~3!Bڥ F]VKPL~L[ue*XLG)  LРu]\ hFrC0癩xk,d/@>iON"ًzA~c-UW/llUoLigY׿ֹ:o$\νQ{xg|m0[[8<}}5Ze*^+, _>z׆Jn_.J_0H֣׊1XyռzB!v3(C'lQ'llߏTDk6|ךrUЌqش>JfjaRbJy+,<>7d)iKn\vہ)?ŘڷzǨA< ,X0k1aԼ7ys[wIׁ(B!B!%*sRFcC\ppBhp*zG35O/H[R>U ojv&)_X-%Җt^OgČ0eqH9~- q7H~/*nm '!B!BH[":Ӵ4_XVֿvS. O) F\yҼQ~S;ȤT©f\+w-Oiv"!C+B!B! (QZwG[ s+lpBTl* ToL3T^S|-!BHdB!ԩұ$gB!* !B!ezEZdsk/=H>NWEB!B!BH&3ϥo  tXBnZSZǧ7zB7l !B!B!wzϭ+?V;Zv,BHNH4b'w.ѽ -LJj^&VaBZ)a !Q` B!B!t4}G1YE~. Wٚ|BHh'$ !B!B!$bV%?=Oiv#@>!$4Clm-ܹ99JGYZ1c9~&rJ~_~,`E,P>oTB !BǴR(5fꟋ; qC'B“:>'`7{@[-nhs3]?n.1M~*@~@hc'ҺeB) 4ZBᘖBbM\l{!?xh^JidzX>;ZlhYqCH>4B!tP8#B!$:ϱv"[NHxbJCKxcJH+ Su6E,cYTvM>WB!B!BFZoUZT;M|BHh'$<NK]m+<Ԝ H׏Mٚۑ|B!B!B!Asi#@>!$4# _f* q#LP<Ղ'{LyzmOҡa B!B!DG@DYC[5O  V:53KibЊd[ah2!I-sܗSde&Q8DɇB!B!)koyi#$$|x)T<|0o'uP:X@>DZ,S|GA~<|!t#B!l뿋'pB RZgvpҩ K:D[ n+R*QP7 oog)l ! !B!)N_ϥߒ;VBB@8!ᱵ Jht4-$ӯ1GD'­ۊלx^J ?CB!B!BHv_r?'){S3tgO!!CHx}SZGW4cw\96mx!p4i60P:T@xCR4&?;ȧ3!BHGsG!BH__K-ZvFNHgT:%G딌,]I^^1<匀T´$B!WB!R8iGRN+>YX-B!Bi+MimҺw)-Ey 8Q:7GEV^^\>M%wqE~\9tO[wJ$FBHDE!B N؄FI74v|* D#hB$jg:55IRFS=E!"˷K,?BZB!6a{wr/!vo9G) 4K) yfŴ'jC2UqPrˡȉ+SʾȷK,?B!B!LcJ'_BYM?A[cJ]Jf#ONHy +DlC JJ)E]R3ӿ1T{X>!B!BHИK5C2KV m."$4 rN?tNv7=7x*Y1-tJR9V\_o+>vbG{*!B!d{ sC!i_S!F뿋) / !@8!yCM20)XL)/(eP:aCT2ڒۣ|Nd )X,tڕA& p|DH>7Rϥo  tXBnZSZǧ7zB7l !y"k7pn&TWWR$!rT[caM/;n,o>!B!9A1֕Mh-WxJ;!@h'$1͓ ZŻB^\&%h5yR /BC0xq \ߑt:KpWct~a{Ym;qdu 'ɓ'6.B{0`@N:m;rM6sjúv]7(kVߟ2,kنN1Xw]@F:XGxJھ}Q1/ *[O)|E |l9Vׯ_ɵv(7c;ewڱic +Kk p\=oҤIR7nvaXիWcsa̜93"wD_1R7gq;0|8CqQG 2Ľw8& qиڻk&š-.qs ^Bt]blDss6iMo;#ǨjiXU0_ ƒ!C[אe*X%+eb׭+ʱi)n]SUԇ28*+NpϞ^}u6ȭ7}>!~Y)W=,8nxʾr)%tK1M~GY-\QQ={iu3!|Μ9jRJ\|/ XeW\qv}^1؋Ix7_~9*\wuXhE6koHVhbkڧs;qڰtɹ[0p~6SE*k_#Ǣ /{|X4b?PQ *ǽr법5T>NvǠG>!XN^`!!pBPzL.@UCO  D{~)y:#U*nA$V ,v$ʭĘ1cWJP:qؼysVY$Z 7x#}wYGMorŸcOj/~Y0n]f^[wي-I-l[ԩ65J 1oۆ *;P\4=m˿N[+չ6o)_-ekY( `JB)m]Q'CHP J_п5)mPl'pB"M띓>qjC9gj2m-7VYT#v+OOk*|~Hl8*sE#+0!E^,ksegK֞dܔaϻSNnkŌ& =Fy~BY߷mi2rsSɜ۶Զ5]zu{DrhXzڳ/zaNy~F%Lò ?}nvE^}6%26&ӣF7K/B>?u},[bl{=f*UxYsuTʫ30?$THYg Ɋ tT9m9Fʵ_! ;hqJzl/cboJ5 KyJg!5=َܔrCk2?[w> N)><'u|NoZ f~\cTx O$c7<;^z)&L(~dlW_}"w vn}E4( |I׻>׿5We]w޹UYB?M7^_|Lj6]ۭ[7L<ٕ--+N?tt%pN8=헿eζt%4n]zyi%?l{w\{oݽҾ^/~x^R^6lXsmx0Źܚr9w}k ]rr-mSNq&FT¶IA˾rn,?O?KR)Wk̹j726T;%oL嗎u8XW_XWL@OxN ;. `7'm}c8v'̻~G̻aG̻t(l(i j^N=:4X}_ھ}avhㆪJǍF([/csu:XFS'X :lX kݽ-`:(Xk^#ǂC2fVp<~Xz҉2D^ {5Uxt~ʦWX^{:;60H~vk{>˫:䮧XG\a91cwX#kp_ׯu>0,<(J| Ӹ[8Lz8ݽg+/[vo?pZp',=h=zmGrO:I;y{9CbŒ1{GoUm5wO9C9$^Ɨm=& {P1O,D?п7{Z>1/#xcJɤ_LֿG) 饎|oIi uΆ&?E~JW:d]فCOoa~ &&MrsuQ; tC["p!b8dtPw:Oru Xepgugyzm+VpE!%?U3p2ׯ(vnzHN"ҭOHA_!&;\g1w 1GӦ#1XyܱToưat䑰&Nhgio?zLy>GDwܱ>@QxmXpE&*35`8#ٷWO`ISzjɨc(c${˼б?f 0=0\-WׯwC7l9vۭ;1rUǥ[9lDF?y~%/w",.Y BZr?ډ|GoBB@8!tJCKxcJH+ Su6E,cYTvM>M2dk@?w%Å^n/kL;s)x6mڄ:?6~/-9|A3¼y"7hR.r!J;}# .~#wK/~/הkK绬^}Y^䈢ErK=9cTI&BXV̾ob>S2e ~4nⱟsq?{2W^)u1`Qdn;z>\|֯_w[tisMoQ9r>SQ mRK{WQWڛ(3𩧞rW|[Ÿ'נ,bo &U*D&7xl=BlV5K3WeJXr>-ol bk4:YnRՃ:' i2K Xd@s  tU_VnkꅫLl:k옑ꅴGɉ!EƤIm/<^Ӟܼ҆kؚ*Fik4: غktoߧNpkv'eQ_]履Sc=;ÞT_|C~=N.~ؽYb i'NAG0?bݑlUж \XVU96(7?ӧ{W1 + lO?F]wԩc1+H:; |1Szrz :^ss]vӗ^Х˚_1AXiNA}SY uYV5{Cvi+b#|1s ! |q@ *"~={PQ_;^w ̩ :V^@+|ϩwЇ)/9x`<ee䏽l[5aG"cv7Àt k׮Ś5k>kU{:Oy cf%{]Np$ 0.u!N&!=o-sȇ&S>!$4[SAwt K {d{( .-ψd2( x|ȒIŋq7cݺu 6WrcCG&" Urw=^|ŢPnN~H {r2QK~nٲwy3YM+eE8HFbG"GlAb\}}aƓQ QH{GkuUWWj~/r\Y-FK9Jqw7Ɯ-Va[(6hkD? RW~ ^9v5+Yr[椷H9m^]w6[ŶNMMh:VCave {#q$Z#3롇MN[/fz$_GvV|7pd3)2`h ?5z2ղ*f8|9Pc#M&eyQekg{d:)T7]㜚QHu}m=ݏSOr۶.9^;w.b Ιx2M[p 5-F^_oճ[+Ao6x7[B+x{u$OKnY;[ulVSF_0%kdX/d;@$ju0(ccR5J1 ڪiIs6xƄżö%QJ+9++Fzyv=3"[νQ!-Ϯ.|D5UNHxlSS;)HVN-c(aJB9}1EQfU~G .^ݲSg-#>|JT|GF|!7_>ƕb^Bߝwyw>!=#"A'?x7\l5BVmEOerE#+++y (Ya"!eEWr*BL)bz}).FϜ&U㿹w:{$u~3l*.52 \ؘ-O_5XxXWu,5!%.=l< xqb;awr_2G]9 QIzhuA74-2szZ*OްjjsO_a\/cc`YYm`Y?1{ Wr/:ָqv nb)Go~G*{`}$X kt>4Fj$qsgRwoX;kljpIЩs?S쨺S~]>o*`c'{{+͈esذ`<evTʱwF)WApY;2zLX簥+>9+w%ZL@t3WҦ퀼><g`*ZDzrZ' #ts"?wǣ_n._}OVe"CS}uyˇb$ЍK:,$|WN4[ݜi'NBӟx≍9[lP/,Je:Qa[__f׫|F{y~[Yh5T#ƣK}>OUM9?밁Xq=#.@*1ܹKFI:mZ] ܫؽX ,}zbW,C ?~r1SY3 Nag 1>g#a& 4˻+_3(m+[. Lt q:#ޭ_"WFo%m^eeUO'y=3NG_c`.M+͏/<{yTw >!?P][ˉg=ts=$vh5L v[g<F32f;F*;\ |'!űA5l Ƅž}[ 3~B ;μ䫯J#!mj)go;SO 3FbipBpfO5}64O/=dzJmEf+R*QP7 oog)ҎjzGq饗fݮꪼonb-`o~. '5kָmB_s5nxbr駻E1uTp n~v9~w8ݽ!u߷(~nBeź0moYak[}.O=.#=ñܻ|3?hTDw1z ]gubs qe\tƆ~U ygnY <{}dIRT~Xg=B+峵i74N<,!By/w ].j(׫l![ ߲d j?&\2$nԥy}ikn6$Xa3[onŖ b\ w-' &:MɦnW[7VgF.زE5>la.:-}5Ik:y9g9,a7K>봺^uݐډR- ,4 kؠsü0 3j3|W5sPnlYdTɉŋkt]UF z^gz'jjۿNQ`Rcx^df z23"e kxlrN~nwY٢qE8r7D"Hnr#g}6?|wk6aƓQ aHQ<1[|[:(JV/\tz_.FF1ˊui_zR K5*1p*ݏd߅?3f 8 2B븃fkۓɧ !$*R3x#`0`kruߔ֑4[SZ֙:UGRBXQF5%W{Wud,Vʝ0a87_7QE\ƍk{*FxdռJ1.+Z$`sm7Ϡ(Ʉw=pwvm⋋vKe5TD-р` QTK??`Jێw`p#Qڱ:n*7%5O,V+b[Tq-$$-i2D6+PK6+aة':7uɸ4iU*Llǖ+*1mOܭFoBxl_1%dkT|X ,;bxa~鑚nZneK̞#/:**ZmՎƚO:5رP~m3&—fTZBqP\ nѶl@Xcl`Kx[U\ k$+6|;סC|HHyMn^󲤍2#U1{ X~X?{"m{6W̗BV2 p;挩m{ 0 /%Gj62f;F:W5N&~֘kj|%mr\1n{]s.ܪϯo4i Hu;<7%\?1R0aǴUPVtH ڡAI/Ǐ'ܨY aѾ`쳿ܰ2?;і n?UQ &Cu~L&͠A]"rA{5l׾*Y-W({ /G׿u.3M<ٽ7r΢(:oH׻xb,Y}ꩧ>/ЩC\b6%Èo :/pXWOwҷ86VWm]sFb/ns mΔ M\!˕nط$foV7_拱Q~0Oo=7:G,,x,z"pϻ'b'b&R X|x,I׼U#-(7w)0.-kyC2m6MX;ۻ ֐(q``aaeufylE?5JNll!5*Eeڷ|74`&SbA 5jwIy8.tSJl:(ȊDݛS釕8֤ImW_qˆy! 1OA3;^tK1F;]?f˘HVFAB*5b8V~J<GO>M0(c|HoFQ޾w}u "OVWW㗿e5_{1ǸUrbl^ιsrÖ<4GEڜ%\裏Ir!S WBB_6[Sqش>͗' ?y($wQt%r>?P"S[ WPi~[o{$+/+D$li"S?Y?-V,ͨ>\ȈO1J[3^/ ޖ5śú;V6H?fv7&H:y唲N ۑ:Ѯj[nt1}X : ~ԋ3Cws7y,.ѱ3&Z31sC !6Œ'#Ib]e, w}{nz_5sR|[-r1Bmsrq[(sĉ3>úuZL5u9Q[k;|#|BHh'$3d*Nq jhrA7M%LK2L~B&&-# ,Qd]:jUtH_W櫌d/7 G_>kr +=z4c5U܉@T*&bE͛ݕrb{'q=u:W!++rbHAϻwo;wnIx#o۶x\/_WB"69Qy$>+!3`BXoS!6)/[wH"ԑ9ަ45GYˌ#Z=/ c՟B[rta[`Ũ@*)KPz x_@]1/P=}:(+nŰӀ$1 !'a]h9cj|KgRe ==Mz!O0,ldWjXicByKlu Ț3ßz SU H.mɛ-Y uڵ>҆WuhlW"sJѮ$FO9$<S(HL~}%gH#Gwr*we;`27Հ[X5/;*Nm03:f;F2Ub%3pW>ksR$5ԓG>:✃9-9l1k:~o;yߏe˖''3!_N+>=l*H ?k?E9ʏ\\9[nf'%>Xt=>ejwG\ma2#ZH|4=;F>w~n#ȣ>$NCe}}ϗPbM&Q3wnAh2u U6}$n=M|8MGw'y];10 'kz~ :խͷ˒ǼrVnC5?vbBdb N̜bCԩ䓨^$ :m\7W>jjR2~eEiѮD2֧_O< 1㣬FOdW>Ԣܾ+W"쿐+˳[QFPȶaÆVDOF3D#E{KXf)eel +Vp-{1CF)G"k*x1qksy{[s(uuv>"e^${_FcCbk%$4a7]ZLӌr0`bCϞ=<쎓Q-`@Qz/Gy[.x2!)[dJYY&trԹFe4+ܪQ)*裏nLm h&$s)DֿQwn`jՅvA !YDӽs Ѽ~¢J8uÌk)MN#|(|B!ºX/hz|vY~;&:r~wChh]5YOVd_zj\?Ə4K]u$vVO7]{ׅY$3[{|uyӀ-P,mPYR lueۂ,۵e:03~ag8,?d]%x > ,XNG߾ATpBi-$-ӑG?餓$1' zTk1?V\'QpNH4:YCW6z{`1-OҠO51CXK%?;BB!8rQ;ջN?DхPVyܡ%i4/smkmf4Ob</stuZ1dɰF9H^оuKT.o\ \ۚvcd֝Ԟzkh e<ʽۙzo=[Ff3мKh^sf۳O6>۳?ݑ9iLerg{޵G}yCx5׬nt$?ڗBH.$Y7x#.ձb) E?R߃#H#!zg5(\e*bHw11cfSk|tP5>WB!횡KbҊy9 7df!񟗑6^~V\|V !퉵k<7xᄐWSZf!C8!P z`E(\)-JLaRDJz~yD \T{L"+|T|!B!PB!Rղw)-Ey tnY nWT#|J~G\r,GlmeH>WB! h_B!B:,go{oh 0FI*ujjޓ):z5hBEoX~'BHRB!BK:#fND% :Ë,FSNGm49x'2\o0K}7Y}QE?]n<Lm hͅ^HW\qU\z\mFh80`;#'N{キiz9+{Τ[n-vѝVbۨvkT>G?2nҤIU}8h=2d$mݵ..@Atw!Tb@k X1@dGH -F^Bj}^vq ь%s"%,je_5e|wXo|wyg3Zm4~x<5{oԿGs̕ rg…駟{>hwC-Q.o|-={Zc2dHYw**ɽ#QNի n喸Fa̹>uFcR_ "P[$[bs1)﫸c #mʝk'.K8b_XU$DezTEԧ"1޽{,쌎. AN:ɔ .e :ˌjpUxj ?)]pti]>eyG׷,6wNVZ('ƍg'T 1S!Vw?T#Z : -#2 Yz{J߷ԧ2ԯ:?9cs=j_  c_ҪU:\wɒ%4{eҥeD9Iorb 603f0p@?=9*7ZυNp3SCL2]SPgG駳B?% wH~UΏYfe̙4e[g1[ߢ[}yᑄm|-.9!cnO#vZm,ɹyK}Y;(5J/MC3WgR'梛 <h JNhIsJx,?$:ɲvU4$1)^J?O/Z2˳dI>Q%2)QNQF5*"%;MUOJFֽ -3ƺygy<'OL'? M0>ꪫhԨQtwmnytGZ*]KO4$ 7tzԭ[vgAm>f\q3ۗKOsy|<|tݼnzm٦}|>_O?C'p ڷϣjyyO99rdя犓L.bmp_yjy>;EѕW^I;C{IE]dvmM Ehɑށx%%z4]7 c몇P3֐~M!˒vҥwk|;& z[ncw=h 6pCg*NO>9Dlhh=8E4 ϣ.8 `2d ޱ;H8̣Llspї\r έŁ|\RWWg1bDy^%^xb8}0gum&͛77p[>gӆ{1믫}X?g=$ =?\q~>l۳Ismsu]M o Kgqvhҕ4vڋR^+WGGO8F ]i:y8!#i}Wgֽ7=2x$uszO[vA JB77lsiɢDZ!3\6| %߫j6{oQVK5S2gpb':6ό:#<uQY@a<;׮]k<<"uf=X<-N6kW^y|Aσ>6qyʕtG嗿e,]SN|Ќ&{衇hڴi}qGKsϵzhxtk8oφJl#y.%y)\|yt3C{ yߗF}]=s0}>2GPuz:]cN{oկ~E~ _j|,xN=ԖGDvIW nL`׈׏﫣j>~Gph"g[nW_5IpϑDb;Wp𸩩9@^N;='ٖ)'%Mx9Wl ,[P9=CGe i9g}F?[46J=2O@MO͡}|N?jfyC{MЅN<5g_7g=^\%կ JjO>i9s7K~ܟ#mj饗^*ȵӲp2I}^l#1#xm9`]wE .4ߟG=r^ʔh>|xcch;\E·z$2{ _敯yGs6l2L;m+ ق3I9i}TmG^fI.XeYbEG' ?/<;q A2>ܖիW}{O?tp>/|ܾ{Pn繳i8H#|%Urϑpz}gEE+N.`IS!fĉmq>fz)44w\=']}y%t֝zz~,]@.^H3+?M^]0K̶[ʬwPBF-%l+[E2o:bx< "C+"IןL.GQԳdُ,TjupS#xn]; qK4F>jUsЇl\~Y^C+x=];+]L4ɜ[繳I |jVEZ 6 H|ϴ}NV|w1cƴy̞=k߬K{˗5iv;m /`sóWWpJ4^Ao]{NFAqLҞnswtٞJE1O>̠)3CMm;Ôe۾g~LK7Yv uRzyՊ=..~{@*pQ @|eH6F0T[μz곔GD'rȚ EvZrѧSvi6&Tl,lT~z]9)NWG2Fm6?o\vǜDIⲴ6?'@: .(c 혹oR&0X.sVZO'L@;)˭?A˖-3l믿ny`r-[scp 7д^{-=':h1cƴ,3wٳgypB_׮iy?Wf]҈.kxڻvNe?^>4hv0SN{tכ`8@9I`J-R\Y, @> 8Ya$#O^)X +ʴsjLf_j^ynQUݼn&tAwT'llTC O?݌bM >;l>[:f=-A/+>7.&Hp`vIt9楗^2ƙmd-|/8g./u9@x㍲9戡C҉'hn1s{dG,]ڏlB^y8ۖ~}dzI`ltNf˔Q.8o:(pp==F!R|j-:SLiI4(=>3wLo;h ::gx^~Ή̙3i֬Y>Timy;wyԥKzN}uJZ4OxVtL~=zѝeFjgM^Scʥg?r!vݚuOZ^t&s Jg%?w^sȬ1G 9p!_#aZ;OlҢ/u5oHJ)69΁p ?: S(7tqr e=RFpY`){]wn zgu[sz++"ܾ<2pM“O>i^ǏOv9G7pG5cNHK4viL4o틃 xB(PNt>FsKOsp39戧~SmytǛc>x)-g)SWϋm9>hR߯ oƜ3[Xר3slvpB' ގWr!ty-H/؀^YCPi-jANG]o+W˫ޛ^=;t4=bwYgVjw}K(  ; s*ZMJGk P-˩hCEʘ*Kɣy>$DY2wbiDynsvcƍ3TwEH3JmAv$O>x >C Vz91SfQ̨L >+e{27v:@fULϻm{iqTG*sŋ0bwnvsN9r~Lg}2e9#?#s\|l_z" m[-\MyoϷw˥rK/5AXM>vXziqk=3cϸ^{U&m@olw>ysx9C<{ jllx۲9c s\d.*\޾7 X?>ZJ4il rN;oysti"ǥu <rxj:tLj,Hs1׃%23&[js2n*}9ΦHFJ,Pey3i Ӫ,+ʩG3 r];DbxxUJy/#u{1>8XrI'B2sUt .Z˯{/]7#yt<>p wp.7p`G r #8,<_n.c6Z,_:GsYnfg}ˎ^C=; y̥:W Hq`3qg6 q`938MrUz9B.X_n76ZB{H. mmD ;:rBA׿6ߏKL%;δNA蘢#FsP織mpՃhoru81_ۋ/T)_?GmUFm9ImrWv׼rr&m5}*m;rgtբ:Kp:D_jM,AТ:"K @d{"C,Tsz83-eW>U>0DHUE[x^g.g;sn k)㿚E~ST=]=9l,==l]7`sr>h6}N%Ԋ9,C}=*W%5 ؖP&=ʡx 2iaDS(/9E=EV }T(^wM7|_}U\Ppqj~qҒ% j)kЎѯϧWW/it9_kP";wTY /8q eY2"\fy _$TE5%Sb_0Xcb5v:\Sʞ}]3_9ŋ{ɓ'믿Nin5̪ -SMϝnMw/[L|'>J;>p<#BdyiGMˆLr>@d~(#a 2m$t-9ʎr~f]jJB n; @|BaHԼ!02|r{W1*W߳7Հ>P{)H@"ϟߍ?W??TC5WH2H8]*]U&6:;:z%UB5_x J 2ۥrO)V";e_3:@)DO~8ߔ[\;HrRSp3b4tԶAG{" wE[ X妏0 `3J:2Y_w1e ݵ, @#Kx#!>/bȸhFD9z`xLB{Y2G 8P\ {J*nX1@8ܹ6N(}Ԋ#\A1HYFGY~:O}A?(C$ D!Vw?T#Z : -#2 Yz{J߷ԧ2Z Eo$O(7ZυNp3SCL2]SPgG駳B?% wH>C s)^J?Kd,a GD dJSwQ ʦHceNAǏP$*4~wsp#H-9;2 [;&al]pyF?V, @||2#k!X2:fO'e,lA%vKO5'FM3_Eۈ@607$Z?JDsGt*L9.H[бydo˼t R&]&3eDIRbe?J?SIT߅b8|esQwT.+2(gR?#]KNL <>G#VJ"S93Jsdwb8+R%+F2ԫ2sEt^@ wk5r'02+wQs1L cuVXZe Y}>I~s-&OT"e饃<Afi{MUn;1E Px t:_*qWˁv6}@ @2Ro_e*+IVeQ\QN=2)]d~P&SK h kJľBalNg%҇4H6ߴ(61AjYD+O59IZbl4)֤.w X-}@WAoRiGefy?Q[%YfsD.'X/~Pb?Ps=xtJZ+%Xj֧rG`"w0}@mԽ!_TEWg;<@IqW/WIYc^'/e$AdՖE}ˣA#Y}@.ێ> P,R%5o+|? UsJ,M5="Yߙ?W??TC5WH2H8]*]U&6)}bw=9A$~zbudfyb/aC/+s:I0`=ݽ{wdM=:jz|n:!E&^J?Kd,a GD dJSwQ ʦHceNAٰ҇~@${WAᱩaADq06hؔ0,e]F7|y-ݣGz'xbQc…矛>b 裏mҰ)mP)zBdID> Ehɑށx%%z4]7 c몇P3֐>fP\>釳l^[`gϞԫW/ZiܸquzkӧYGgt5טyG ,ƟfAH PQw.$rEcCfom\#KFW'2li`21z;#Fᘟ>Y;eY/s6Xvm;E}1c^zo. -@;?.>Y*:j< @5i|em#18jސh*%9{Bө0}JG|2Vln^I 1995;7tJpC ַE׏6`yNǝ+/vZZcsr۶0$y[q/^#/Uq9aH)riׇzzrjvB5j7l)W*y &<ZLLfr9ʈ0 ~e~( p%角 9KڼX`a4u4u;w}q40շآ!X Cܺ>K^+ggӇWGM|~6$~ߤnT y޻҃CnH$ Qmekݠӏ[k[oW]NwͺhOݺuoO_~9m=H:h ;vls2zw̘1f]@.b)̼;]tEPuF׏ݺ._҆ Ѯ]nyo`o¬?6vguK &r=v'^G.Y.Аh6z5 me+c5tmX i/uѨMhl&Tѡ?]j%twXu+ڮڤە65Q6 'TT}Fb8 #QDPo2H:Rj9ʭ"k.iZE#mX% Cu;d4B"ZKUO_L?s 5we-r<e14~^ߜkItJci_8K?3gF}u5m^?vlf[qA{I6Fx/ӏ8=Pzjf_g>&6.U9s&͝;oP}}yoȐ!4rHzhڵ6h#3ysϥN8*5kyGG}5O G#GPS?X_5wj8g,mt6on'W>c™6im~ Awc鋦K~~z3Dnuq=is<ˢ Z)r tgG P0@\W,%2a}5g1ET;yG# Ctk+e~j?+MXyOgMO<5~M3Bht:b xnDz4aKs^Wl]ylZ^J/S"[3yw|s ~rX9u{2WUzyIz3V)Ѥ>{2믿N]t-¼(JYڵ+oxZh555Ѵi3m&fWBz>O(a~B/9U7rPG6=C>hxDyD=Ҽ^}UZjU O>ݻwi?u\}s|vvҿYQRu|w֖ͧ3y fd$k3m]&[*C[xŴm&kt7phJtg;LئK_J݀zbͫ)B@ٓ./ISb߈t4! G;GXRQsBWOU~>J'nai}°չl4yN7ַYl8ϺtzNԏazf@1raGKϴe5@?4/Z$Xn|CgFu M3mm18ݿdFw|6)~_ORk:Ȣdp!W%=ɒ#E$dۧFms]@8s5W}@ yӵaHeW *c묰rGRܱu8|/pKe @waG6Ƿmk4mjgUd,{&2 zΙt o#y>}Ђ ̈pݻᄏ9W< xtӅ^H^ziU)k?' &]x42Siӆq^`Z4+u BmáMnn ]wVkN,WۤѝV_8w>nw@9 x}Z'Tjh4TY2t<#,Mb{OUJ-3}'|Y% e@/z8v,#{3`ݵyi~\!z˃U-쥙m,zN C[?]/Sf:cŲ`9*zw-˿|SL+yonϟO+V6h9/Oj(m0ȭd0eż˟S&"주(gmY6WF(#G+M[n%՟^ẩ_ w7phg $C֌UXB4iU#RE}_eO1I<?GVȤFVI6s"c龽zƙ-ۿwl70Շjزe>d͚9pem>uErr 8O3;ݵ7iX+k^n͔@_ ,2s3浝k} 7Κۙk˜Wǣ7շZYكS>7m#zF{ܮwJ9kduPI\l{FK}=Wx4sHFZ<8:"K%`'D&ʫ4ɠ'aXK;1?yغ,z@!=y=zl\fѦ [K{gZ5iQz(H:Nfv\poDNCGJۍS]w}znG.fuC!?%rRF^7F6W`^7ߌX1טtKgmSjG:_{^K0#ȩm|;k?1ȞѲ\ZnNxMsyt~?[9#Y [nmc62mjLP{ti3ݷm{3뵚g#thݿ6atֺMĴI.e5?H (vFk 9A=Qsa%m.}EF2@稹E~ NBTij~n9]Nj.UOy=;W^G}U6^6$ ]|`#wP'Ŭgc/ֻ>MYnzvi7XdoG#紐Fg^sTۋ>u?}Ñx}qſ蹕IwGE~=7zfwj5 g.+sϙW} 7y 7l(s3b^nxSꃄN9za) Ap 5zx_%ۈE~n[:nϛu=:~%Lo'M5K̽Rcqd$c:5ekߡ}f_@õf%u7ՇT_rS}N>x}4/sv覯kuڬV~=oVL>4-,5#öy3wxCC3cN#G{<&|y$Ô*p|'8sma߬if:cڞZ?8HotܳhG/t?댳h:rsLsi{RSvy޾4ˣ&ёsϡfJy0<4^;9:ujf=y'NK.."?lJwq4i$yd73[N:ɼz<*M;8\.~gm{em7/ye `iiQۘ~4`&sM|tmc'8m]|1eݯMM?u\s}*m1vuk>Pd|i-w}_A^p ˲eDAr?]1H>kJľBalNg%GCAo>o(ZŬi_&;y>WBӋ;;v.cz4SbٳiܹfnsfnsM_vݙmMF(oZrw~`чs @g5_,O"$bh1Q6kRJЖjV>u﫠o4 2>xB=C$߳7mW?ש`w!]vy8y0_(" *C_]H$?DJ gh1zRR/kЎf4/Id9/gT+E-#}pF(# uuK.=}7p, @|alU\P> ňpYj z _$,У,R?>Yߏ@I@B&;@! u,_Bυ!(278 Oy _hM=HwT@HSE?>>%(lmz.w:з' %l._e0E8;J?E)a[E4B<@_+앉~s= @|)}EoZ gLI9b8YZ$WR^rNMU0z<#n  KO}@  >e抿sU`\w,e^TEˌZGDsiRQQ1@¨Ic+h;WDU)hHNSR}@̻ f('*[E2o:bx< "C+"IןL.GQԳdُ,T} P.T߅b8|esQwT.+2(gR?#]KNL <>Ga Fb70sJ?TPBp(F6 ޒetS<"r>qO[D\(>塯GC>J@_e|DblWkI*НM1<b@~*M@庾2d)cyD|eL=Q /J*XC?:@ '+׎!m=5rXpT4hK2) ;ꁁgΓˢT* wBk6#+Rߺt'N}#@LyHFhj,aa`}KyG }_J?Uea=XDdΓ_K ((9Ya$,/O:*Sαއs@L2L<}W:Yc*wC*G5Wô0v^gE_8jސG *}o s*ZMJGk P-˩hCEʘ*Kɣy>$DY2wb~aioZ@/LE˸@;> O )񷯲BϤL((̔.2uJ?(}O%W}ZHoj4sG#Shp2ҟ;bd ѣɣ*Mj21GR'a*X>P9@-M_ +ݑ> },Q. @< s*{*(Jb}q]%d(xQsH}7|E)UF8~^'\LRmd =@ yHpYHdp"bhiO/7}_J(2j\H lK( WP<ô0)ae旜GQ""+[*}ePd-w}_A^p ˲eDAr?]1H>kJľBalNg%Gj"9v~J;>p<#Bdyi6^ )e_ne}]R7uLmGCo? V: !B!Bi\6=]/WoF#nՎϩ !@8!ѣ ňe*iR^c.e{u!P!XbgB!jx[+ܫ!tR7\ZO.hJ.KK]24)N-KK`B1fi1횤> B!$B!4\Ίh!kk7pu;K'DD; r)KR PzYa5q7>#O!B!$ %j;l4nߦ~moi~C$6*!$B'ke8,@3mw)=Le]C3 }%3B!BHoPB!aiKM_4x諎t!r'DQSX>FŔl0V qI9¢Kr }W}=!B!B!8_3Nf=?ǣݭ{5O: C1\7NV"T+/[Y4-mlK_$rBfQ=# }+(4r3!B!F$Ə$CH۟cok↦o; N !Q@8!uM0^#TzУLKRz9{K(;-Ƹ vz:?v,BFɓq}aʔ)hݺqK#Wby ͐=|=g\|<΃۝j>ݿ։%B!R?ׯ>2Zvjb.t`Ş5[b9 ZվE,'@Vqի~*SO=~z+F̸o~~>-Z4zi׮] 5&uM֥mۆ"٩K.m F_ P5d+^|v۶SGՓ1c"^T}Oe9h1!)t_4#G%NB!BHuone?!$ 'n/^TS{5h)i-%][}uQ_FV}L4_ z0[wt׭['+4\E}Dzb}ըouh*Z;yn߾*a4hxm߱ۥϯ6Ν.akbx-,c헰sŰl ac%B!mkm6ۿ黴s(䪾LG: '^`Af7NSg`{D!ͺcR:MY•^平C֗ Ly IJ. Ls4S)?;Oe\YxMXm6: ƃmn; 5ov/8FHAq#3A ?Z!⸞QSL>G}_~9:w~׮]qM74_!CT/# 9RdҤIaWV9mAAx1- s{Wv6nrw/,X/G>VP/B!r ϲVnm,jY[!(Cbl(!zwY riSp0x'1m`غ0|ozq?#zv$x o @)`$Ww̍aw\[kΖZn}n6߆e?Hv\Ln}I5rF:sJ>еw(p5~)] /rcpzhb_=W0>z`U25Oht߂.]T"EO>*<֯_/Sm_r%ROr^=0}Ybumq37||,X kN:uDwy,~w}-"kp hX[o%;(ٳg}"㎓߿ Y!.ڋ/2vX˲ڷ \`6mOصѮooQ66q>WƫNGW6qz<爏aԵѬY(6n&?R@]B!B99q>!$ x=j1}h_C1j/KPCb\z0r/ڸ!>;;{b3֔֞F}c`?XV$}k|UKJWፒOzݡS6;,ۄJ~Åҟi'mT5gpgb ,5`^Z5գKrZe逇iЎgpʺ[0uLCL>n[-2|皊Me+%o9Dz_J{g7xCWQQ!ӧOh:Tܷo {n۶|1ܹDKu&@qQ؏=trsrݻ6'tz޽xꩧdg˲uV+X|*౬#0sĈ~k&W dtA\rJL*de]% G҃ v { "+1m͗De=;;3akw1l!B!"~+ClN9m}Cj%$:'$zlNE7TЌҝq>,TlRҪ8雚(=^ҁֳ98gyݻ[g;S zvk{}J'iGw+evPmxza)¸ ,./?gwX?$XRi|wmiӦO}骜yr|j ǴpfNe/\tyD^tL\bYV 9=O-9Y߼>varUlÏ k,9ɕsx|a''@H`^H!|B >:ư8~SW !B8!uí|jl,S GKb*ӭm0I5{5}#J}(//ꓸ!"km{ȫfZ-mCxWVlt_d*$5PS}g!L$_37b0\E:t'Ej:KN/]^v;^cE zY']-RdeocetC p?q| 999fe **n66܉sV{}׻확ŇLWxbL^/߽GzA}pN^jAgx"^\ny0f">o !T{V׵5w[W?ݼZ : Ќҗsi䁖 mץ3Z_u=;R}-%U[w>~GpvT;py69O8e+tJO8l.)޽v9iA{x?!4 &BSk۟F]>} n9|w%NHNHf ͰBY)B\Ob+ I[q[ZY$B1m 8KW9:[qiY9v*NعkB^eص7=!4!!Bi.1n~};In;B7!u{9ЍzAe)Ly ӣی@߫|:飉x\2Eo8 Yv qvohq{[W`[@wkm+{PlKO﨣Bfe˖UYv '9s`֬Y2y͚5ؼy3爊n=0tPt!̺SvRvcI!οB!B}ѷ6hXq "$z'n؊qմCDKu/bkխ軕}يuoד>#b2OpN]hzxITeI 7L9+-(]}vYp3 6f̓<;c4<$Å-)cyx.pU)X 10/ ;=DN6mбcGo߾8sp}#_*c/;|O<ĠSZݻt*˓L: X+Wy{Kg.uMQ17Oљᢋ.b]/裏.\:RiuL܆:Ý,gdg.à$ wK7FK!B! Bi7m ;}CӷٸMHNHB$riFMģE0z=*H[_:vbYױ?|,^t:\RAG̪>xy] Ot<%0%R{vRmǶF pVTu\s~[j۾|i<|RL ܞr4j)X],6˻E͇ǥ&Lz<&N#GQꫯ⧟~ͼy䧈~'?0n6aw"cUgffʈ^F%?5}ɒ5XvsBY5PVa]t !B!TmA{5!,!$'$z gKKbhL-Jܭ231Gr(:nE߫}k;RG0\90` ws0ŧRm]űmvȱmoi?&cwr:F\XX8 EeSK1r$Ijܔހ+5 *z&uBp_e6%uG;w.%⠤.aۼ 0a}X^.R]f`vl/OS')Řsw܁/8ٳo>999oYb o\|8)) 2)IW8#iźAz8)EEE-RɋE$(%KH'xyyy}Y:/2fΜ)Ey(Qeee0eY:˄;0SI^#<"?Q-ZQbv[oq)Xx,=3ڵ@s;]گ>{ٱ3kwzG\8Ivҥإk̛1ӄٗ913\B!BIJF]JYJu3̲(#?u>bPk 'K\$)#mV>YaW:F~e*[7?+}zyv~(۸Bٿ'^7^A. 4 >y.^߁^+BcrWN]vZs=im۶1g,Nߖ/ǏNG}W]uJ9cҽ"o] =7Io,X7|Gk. ,۽WG7UGJJ.d٧o&f\7.wLgo!B!mE݈ۿcojz 8-yR7'n }b,2}lpýx piS<ʾo(~c<`dg埛*"l.<|cw"(Qjכ~36lMD 'e(GeMb+]eҖ,Ҏ3z(m1+nݺZcQGu%mY8fq E@Sgp3p 'n=bFe3vWTD7t(/`/Ex9 C@YY-Z_x4$ !f##mFk4X^ʟt=xP_&E5RW_PzA1†6=t#9n4a [ƭ{?T8-?kwcPBi2|! !Ҡm$۟_߬At=bܶqCL8=S71J"w9W1b+B!B!X"!?W?TEX^m_zrA3pPzwYZIq&he\ZjuhJ1Kۏm$ۿ򗭏b–{Ξ/YB!BH31s _BS W4}BHNHà.)UlmpKIg[3M'}L#˒_(*`!B!&H}.0prѴjw -Ы{xhж 4u.癩uaQ]URRr44}! B!B!`PSwDzM;#t !Q@8!u)b!{@746}uwGPB!B!BAz9NF-N#D zia\Zmk=![1Ⱥل2!B!B!8Sj nBpBǥ/Q{h=\T,> %%J@tfTmEҦwo5!}h*XVB!B!ڟ D>!$ '$z^ZPm)zxc]w(MSؚ˅3b@$-O!B!B ۟W(1P{wc\7zyIJO5'}`w)e>B!B! ۟We -jt=bTcՌSDah۩1jhdc]QW}=IpԞ1Yrk׮HKK;=}n<=}C!B!qҘP0n:}xD oBb`*=iejO.C3P +Wӷugwq.f?vܔqbҠ_L'O}݇)Suyggg{/Ï\]r(zb8ʟ9Ʈۏ25q)GᡇσbB!B DztRfTg*FMzz)ӽA4ꖒ.ŭ>Smejਯo}#J}+z|p [&A|_u8.ܴXwDj.ЪU+ӧO8v,spaypXKQ܏wO4 dlЎp(x*SCQpq,|btKǝ!B!4F\_5[9m- t=f6э9o0ҖqD]ZuK5g+,mj(@_wҷ=؂gW%X(!86/NL?-ӫW/`v}O99!\Я CI+HLoʩ2a v(n$uo_)OT7FyB!B_Z_KsC*MJ>۷o~aرxqGE?p]{8q"=]/xeC˒ ny[nMW9>$GւQP.1 y>Es;}lڛX!0NJ':N_WW}>f- X ƣO}شi B"B!4mfw5}u%\շ!B8!ѣĂ L5hЌs+iRlInh/ $癩S + #oQ#LS]a{xJ)PvG6mtvO:/ϟǃT8$vx^]ozhӶK˪B碝H*)OK1SIR^Au{]3{ǸnDǙ9s~C %B!7um k(Xڿ>4g[7}xD oBꆭ9U"MPXCzC#ī{5}Sw71};}@0T_oφm(0meְ'ÿ?rJ,[ K,w}^zIF) l1n8[Yw؃_]jrƱ53&꯶i!cUS?N4P mD%iD1Z;o84UDX pa[=_0!B!6nm,jY[!(Cb'#D.K1Uih= g*iZA.Xm&羃GkH3; ?w}˺<f_Fg;>B}, S#S{n'Q)sq; ϴKsgc~X_xm7끙Û2yg JX o;Vp!8'E)SG_Ν;;ߵkWtM)-!`Ȑ!U# y|'#GɓM7pC8ꨣp/瞓ct,ҿa ޱ`l_N'a(9m :ɷ!mQ@?@pY(hkެvkz@}ǣ'2|y僺_ճ9 83Ơ?}o~EjRLJeo g3`տAΩxwgP(:'^އC]Ph:/&im^hZO¯(u -Gcmgݵy-zב1:::oۏE QVFOL"س4`@_2!B!=۟ojB7!ѣc Ő,oC1jf =s)<ʽchJ4i 6rw'\utgiOSZO)u  L=ZYmLtKn)皗Ɇ?aiCWJGZ+w64;6;R seR7O>Ֆs9r\i@mٲti ½ދWF5.))w:u2_Lb_ND[m=zNyyyr k{15\:HFnٲEF ptIq)ҲU6}M 7Ŀ;dzgڷ=9Ч&kFZBv 0,Z-,'8pdGg߄u7_|(]04OwR@3oۇODm2 gKyV v%UZԤbHYAq[ 7)dq\6@c;2Cz .ҿ|VE'`\ah-t}'t]پz OMu4;*׹jxĹAazԣGB!BH}ecsb-m;W+!A8!ckt*f,$a e{VIoDXuޭ/cغ0|en^ψzl7إ[\l gn# ]7}Făsy\r N [Ǡ1yhF!hUⱝݯcQي?1 1l{1W2??mY{>Ohaݺu{.U##{%#|t^yx~zK.֙DDꁩXϪHǮn}[oI}`={v *0i$\s=Wr۷tӦmq/.//'sq@+t]7_[1N^e߷>&~o|NaȩSo \6WFyB>*Yņ9UkV\1o!̷ 28 "m+۫l^#fmCꄹ=mƿ| VϨPpp[޾?_C1o| #Ë6h??1fp_WpjݖoׅQ`٤Os0H@ t@Wh}nNܯ |QddgEB!po|i_cznFU髁vNy^`VңE1tֶ @>pI ݋7D:yKKWc_COrޜ}__t5(Dq;D1eGo w%Kpg6\U6>lqc]xaci\~l^]= *Si2 <)L>Sk-}Ke.uWN+%o9DDp~xo***ur-ZCCaaapz}ܶm۪Ν;Op> L%%%ao+ą3_D~sWii)^u7o^0y9de~]^#{s 7 {#I n 6"c~}R{ :K'x&jsI$st>dw#rXC:KFW/Ij ZD"?|!ȟU>FYeȽ+t^O,[qC47 `?[J*"_8o֩5+,t?,f.[Un!wEUh%U!d-Zsٍ'~@]uud23{vj՝ B!BHQnwEXs7VBpBGy104#k(=2z{=\8!z4yWOucbXKoG!1B \m_lfk[*yv cξſNpװ"7}pYGwK|P^~XJZg*uRT/^;SmM6gdIS_>Hy~GWy6׿%@GDr;Tx/xg\Rqnz-%-ci]}k]WZȟ"L]vJ*-B+ ;Dw^'xL3Ŵ EE+ƺgD&PuX/Tx*deB!B'm&gצE_u[ߝW+!A8!uxOҞۚQ34 e}q=%+`$mšn) mlU CJQG}wJ*C ZZSj&>Vy69.YY!NsWe`+ʝ+.*_;#ifJͷ (ʩa[`h y,Ƣ2dLM~YgɩJǁM4K.c~ D|>?!''A{yGv:1`Wp.o>6/.t4Om5g6Go͛,8y+l븸vzYn`l\r]rHdaG^p>ǺQި0:r.n5jv$[R*ؖA!BWxw>䶃!$ xRX\TzZ7}z}{O'}4Q}ȜU*63Өܲ}Uf_a{cVqR03]\61ӆr:V[Q&"O=/gQF㎋ H=")Sl21cǎ>|8jocy {Kwa-曳6nk+\67P}p9BXw]f:$3,Q?l@X. ﮔvG{I߸{D`cz*_6z= ۝;m߸߾޻w!`'cB! nzTWKnkC8!uCulP5LX^-K{CbD݊QT{~ڱwҋ>g 8 4/N+c!*VĦV:b[SD5;Q lFΝuUY&ΧztHG{o_׸S}'[nc=&Qcy-wuWBCbWvQ;&m$&`}^]h-}]ϕ? kwIÌ %ݮ}KyeeصFs!&d}oiF߫nhg /BpBꆭ7[[Mn9DT'~",`\݊[ٗ[KY'v=3:!nW~PqѨ.-UԻw5(Jkţg7uQh̗WD p sΜ95k/^5k`(..1RG:t(:t(nq_|^x|x饗|~ xlىeg=;/O[@~z!Nٹn#ҠuC1&P Iշ=59k _ 6ˊٰY{K+SGκ* @fU9ǒ["?[A]bamr(_tQuQOLx i-i~ҧ{pRfg <OQXWz #@OW>;d#M1}c'+U>p 6#P.~mWH9[η?kt+2vU)a=PЧUŧ+}2+诃KAvsۥ| $^f) !Bj}_35ƠRPү4?a/D D!cb\)]}HRybW1kw7`}RG_[Xuy[r22~h/‰8.v].]gncILLjyR{vLcf`g`@I44uy\$bϫmJ;EgH_t~w~F~p_Xw\9xT,.Y0gx\j„ x衇`ĉ9rL}._}UOն7oQO>m݆Q:iD,K:rED?gy>,n8ٳƿkbѸ{BN]tW\!*Lcǎ󳳳\O>ۑ,e}qυS\PPP ƴc/Ν{0i/u ^?.?1~oAf(~: r~ɇak>KL7Ơ`Y(ޣ 7BƒQ8t< 6[_tGWU?;E3?r/t}Shƙ(ۼq&pQٷ5Vt<9X9z]_3Ǡ_H]hYF>!>p{eMBQG3 ph u1WG-ki t]_2!B!Mfv#nv.pEHݠ0\fqb%N(r+cj>>?N \N;0RkSfRؼ^.c7݅uvw ̍QT٥8mm.F6|Άem?v<33'wGzRf);z'u ]~GI+0c.$%%%2xܹ;_:y={6'#E |x7 1SO=˗IIIȐNat>Dup 둔WIGpv&ѹ :_L9 Ǽ "C׮]e]zDŲcŬY_]CGD7OrĔ Z>5]6b5},*njFi;6y~^غhyض9ޣ9.2:9нsNS3htoK^۝~]{9b+@T{JYuYGuD9龪2jL|! Sm^GQ[}|>_7~\G1b1i'm7>m4L%M!BHá#WoF#nՎϩ !@8!ѣ ňe*iR^c.e{uEYoǘ7-]Ϳ]}O:a.Ν? }c5ڏ|秞y{5wEs[?Au!olH } ! "Y=GDi3xsjf:Ru[ R:;-9IyEȿ]e5S^?=~v]$KOg?V5^v&$$FeB!F7k'DԡMC1Xb,mS1|fMmq}H]>ioUTagwػ^,+[[ @UR1! 6lM8x3YVQN(g1NHuE$ycA8碢"|#-=SgbŊG0"WfW:!gS1nE;v y\@{nU`z»hno,[ߏk"J]Qβí#Yu.)7 z8v/{|񣣡$?uB!|B!MXqj59nM߫ }BHNHtq'Z1}ziicX"}Cz 5Pa[qFOH~йLBxBBHmj, _?Ǻݩ" Mv!yflo8-Zf]A>+B}B!B!B!~DVcY5X;;!tR7^[C7WIqiQgC*n f҇B!B!Bq@mM?'DDKI_R{rzX}JJt+ ͨڊMQ+D4UjB9F,B!B!Blmumm M St=j/-(FKOh=1A;}blM1 } !BHc8YVBIl_}8BpBpCf*ugjq=BpQ&%)=՜=ݥ|W{Ht6aظG!r;=ˊflW}8d5yBHNHXQSW3Nɖ2~mnc(ЫXߣ 9w)F#G]C=B!B!O֘P0n:}xD oBb`*=iejO.C3P +Wӷu$h!zx'B!ޝGRUU's92N21À ˂{ŃeQXW]AEDfs0W9E(:jPÝ"#!25Se Yb{*,!e 97K'DDDDDDeDKc,vC fj%D9\/r8QAefj+S|8+İ*aM,F"QCDDDDDDDD)lL,3 Ms.c/\zSŗQXNoV`jdPâb8TSۥ2A*S"1>Ki ]"""""""""]DC\_Y[B7 O<1E p$ą2YCbI-,5OM^WOVZ!2bWCP ]"""""""""%1A`Ny.v˼{e%?Uw`j%D9\'a]*cX?JePwc[D73 C|#l㋡|J'DT"r*ss!=,>B*ݐxDO.tfVk--\5d}&>3 . 9 J@e?%_J\GDY`8QndŶeƤp(He D([~yD Zd%Z#YGDDDDDDDT|iNTZrӲ/-(m5F;yE pENHpKVTcb_lpw??J@)vRtD/R)P"D9\#B$2T&=IL SdK^uqM|3">w:@#cCF%,(kd2RßC zTc!!D|[k!SC⛈x}HDDD#h2!%!_T=aeD(2 O3G\Kܗⱄj-f"cLZ;~etODDDDC"""e2.W|S-@T;EV&q*ӷEs1u`Sb_1 (,""""^DDDDT.׭5W;BQoķ ;DVEMq~bj ED&lE әdU[b4g!$`l|IDDDDex7OD(:WdXPCn;jSdc\Um|+$~(ODDDDÌDDDDD}4Zesa+wUxWn}QXNK Zw9j݊Pä&Oe,5:T bQ1v#2> _#6iUor;G'XNnqYbS]!U\5_#Lh2SjBŏ(Qb9:ud9lXHH-4PQ~C$z pt /d24Զ M-L,!C3?QjPqHݝ_BėfHOp'$>E p9D#2O7$s@-bT 35/I*sN]yIjooP|'""""""""" _@f˟ QSmUo`'XN!2[G w3'W }rC*q"VH/,2~" SvDT؀߷DDDDDb|!f?=U=  ē(:[e|nHo[Pf tߡ[*?e|@|+ÎDy1FDD%""""#'""""""""" GȈ5OD(:Gdj23U#wj;!2C[Z?I9oFG9:QZe];ʿyYGO\ V2L~N2T& Z!<4mp9ď*.g?E p.l P-1#Kg2+'{!ŎoD契/_f%8Qqp""""""eSfŊ?X⻪UЉ(VE bh !$[K=S-5ܺ#Z͹uR,a]>@'"*"6@"""""""*y_!_˥qSUt:,lNꇹ⩹X0I,7amۅ2w?<֙I-thqT h{,*+'kى΃kAޏZ**63_o6]U sޑLWpp:y~D%DDDD4 AY<|Mui|"'Qt՘`l *3LVa q.u 5oȨ|=7q>\3۶1-BUVNy 4* ^f%L<Ki=ƢƓ^}Ϯ0\U,$]9n/zzvu{t5yX2|Tt5~ӕLWkOW^JDDDDDD%+3,vC fj%DѹNEgTPZzJ<N-1JX|S7K,18>@gcYqMiKrޮN ւӌbL$8v77'}l:wq;~+* 9}{s:;tϰy0Xtr$Ĭz=*x&:EsڗZSj/qұw`KMWK%o y[؏u$]'.MWUjb/]݉5KQI\%Sk˟2/*>D|Y O%Za8Q js72Ue-!"v>t|307r6ʇrMQ毭ΙLb08r*z$ON4 w S/qor೧U&4VLrW9gdwF"q%cCnmwoX7,?^gOm o8a ?,y[7JEm_QWm7.Xjn=x1s{͓F_1iяUƛuspob҄b", 5U`z1뚏i%s{չ0Mm\]msPaKWFڥuzts"觟 A1 O3*JkK^+# ft՗&k硶ftUĪW {jQNӕjyކ1^1͘>"k\1yY81=QTB/v{X|T!(G-grԱ|.m fvލObϺoPΠp8~f+pdmt 4\v/d祈/T#7mkyooA^7cU͞ᠲzx~'j'+;lu_wV2ܺO}D>s{lxm&5-EOq7鵟 e/$M4奠iG_oxbEx~GkCsU͘< mƧ`Y0#]{ M6t)ޜ˳?AgfD\s=xx#/zȸ WZ{s>**{5E&}N6-- e8wZal^?[ګ3E[wmsk.ӕ4?j;0OWsuX&JOH$gl=]^b^f銈 \rr.-(  mXN5/DO"3+Kejrޓݐ1MU7)r?˶wv'kb!?޼'17yBg|u%K}W!ŎU}L~-ݺoNtgU/+v Kށu'WmCW6buh!~p>l?[G{}C 8¶ØOU￳NztLmw;ǻ?/XcsSr{zr`ܸ ]wߗ`!׹y -8޻qK5].3EhJms84~qd3C""""""LW3B[oqDN^Da8QnR2}[dNN9S:%!XjR)`op;B:0=>9}3oWY9YN՘%٬7f6Ezo݋??Թ?jִ ҕSt|%V4JQ#$]yyJsnhٖ2.g|3$^_',(:=7D&näVc^'_- 2aC-$S1>cjO~OdY;5 ~L05`D\3d7ygO7N_)5l{{G{gMo;W w8abSV޼2F̪Mgc PS3#tdCie;~_,Ve4yD\Vg7&MxۀkkfclܜxۧN#gOp"*t?zo߶mIW´UtF9 '9]Wu{UjWtR&-4M8uvu1vΐ_DDDDDD4:C,.~|sD+sEU6yCL9*ۛjq=WI >+}n'x)- bu7D4WuVa 4BG`8Zˌ`=/{G%7p#4wfgmjcoۙ {^oPp̟`s뮾nL}{5_kv-P$a 6]`<, 9nytwϚ!Ltbf &; Zihpǯ֯Ŋ.`â=@&kߌNhvu'l o>7MsWR3n+E)29}YWFNCs %S#[ vwvw ]]]Yn{dH]yۋ1X<+8qɭX:pbDm ߸[H$:wUV4bpqwZq1ϝ}5m<_NշoirXXV,_| f`xqX,[|wkV?um7n8ipqw`/Mؽ;/'3 {)-xL?]⥫tUZ:8aяpo/]}{tYFE!HWw%arʐt?]:沾֡-KWWVietj=/]oJ^=_OWwj3v.QߔQk=˟T=vOD(:: ":CjpG 2 e?2Մ+P|s\Qv,[o|g]Mz]_AGC74VYj*|k<>z`N}%0NSSjlSsVN`ܱ8j1.GϣˏBߟ{.6ډ[ŶOh]b^gǰj' ~WXWۊ)p]X;vi<8y++3kB/Ujf?|F}lUBmʹ++c*j_!.ǽǼ1!zΠAmǾ`+i8nzzk7\+S|g]y;tu%x?^iEUd0]$^l<7 Tx*VajZt:4,CFHdr iL_\cX Χ#j͆;2dDo4Y7R;R˿3?wԼP=ɡ^%,(: !8 m*C󇧶D3Sk0K}ķ-OZ|]ٿ@;nE^ Gϡ[߇_P@;tD}FCm^dr-8}0mGmmtz*hgx`Cmk! 8;׿;{{zض'[x/+xkjxbxq/ޏ\h?{= >s.},QQ9N/l=ݨӌ%7c⛱Z^{/^oMtQj݅*/]ͼ݄eoC],&h o4 .忩ʭ9aGDYb8QntK/yՐjedzXK"7ʜ ?&-D#(>T|l pP;Zu17};}^=-^;W@Q`Ύ ]f""""""AZZVwUL?E p,1|l%[rY!$'؇!DIe112UW7԰)2ҴN*>#]x}Xҗjn㗰m]<@-]9t}jKLWDDDDDD44r(K$>T|3D+ 2-P- }i..\5ψ9QfX\OD(:#d"ugqCiQ=V!ZO vKܗ-FS|NDDDDDDDDDōe k"`8QtdffL1G#0vrCd7$~B %s<12\st""U(Vvq`Hfpj饇LUa1\JL>]?C /v|#b|'M|L+;BY:eV\;**] "`8Qt 6љ*o2H"s15ORí;՜+Z9j)"ist"""""""""ҕCKs)ŷ㦪NuxD!UpTE\VYL@sDflyDlZ!+bX7:NDDT &6F#"""""*UQ_*uY= zC tD%VE'[bATibbWUS!ZuX4# ~,DDDT &6F#"""""*ٟl9+5c,-o=tUfQDE(:jLW"#!25Se Yb{*,!e YA/OE|~Ӱƍw^2WޖM-_xcۊM@$qds"""╙rS?O|GUx!o3E pK}9Ψ23Gҕy>`[bXoX|#b|yaq|j&`$rx6 &^Żw0X5emjv"?O"""*IlcNDDD4\2Ӡ4<(p70U|.,>eDjV^xNf 5,)SOe1]*C$;%C\de7¸o/_nK ٖ׍DDDDDDDD4υ.wUop_ycj%DI CehZ{`'D&O ҫ'+}-zkl㫡|(]hڲoޮݼȶ{@ϑ4Fo4$/R'{ۘnQ?ӨI!x0ם{?B,b#*:A""""""?Fh|ʳ ?x?xwAe88f^n߀-FA7#8ֈ~f!~Tį{3ⷾ??Ϝ¦˗㪫w]?w\qXp! YDDDDkK"*R`|+VCΒ(:VFVl PfLz.[ b TfhLd嗜GPEV[Y1ŊϞy:5su@h )iBO8 [ +_z P.?kyڒJK;J|[ngN^Dѱ(7\ .[yJr}~b~W=\c"~L#n%/M~,.>'uV tԱG{3 h`nݘb̆L.ˇcVX߈)[V4\v/Kx)[:t0y߻=t{zy.Q\+[(~C| VvHDVEgYDb[% 1]'&b]"S< DlxR1)Ûa8뇷&oRP&Sj}`^N&s>|84bŊ~=f{zzpݻ=c{;oqͳO< ""*q#񻕈>!%!_T=a_D(:WdB2s- 2W;Ex,Zŷk+/:?Г\5IhD=/<ڳϏ~g7Vɯy['ok+`WZy;k֬\r%pODcc#Q\ +.( Q_n+ *v" +rʸ\"srvȹ) X_wXTw|j|Ih)S^zd8X8-haK)CloW})J8+%é_6ۋ~Xv_܌+WK/ō7ވ+,PS 67%bCDDD#tm(|7C"+yCd8L1Ll5fj9q눖_- 2a]g%[L2ժ-1z;TqRÞ߲G%XrOqF>xCULKWPTsJo)/I}Ыb9'0{/ڏzԗdxe>܃ךWP<& ý9۷oǃ>?5558餓gRU5kjmu jye\DDDDDDDDeΫ:ӕW վ(K'ʍZrAep5tneaRz'2Z*Äh1j-ԇ릟fcGvѡրYaj[!Fhv *üqz5w0Ν;'|2ϟ?็~9ɽJ|'Ǘ+Oy_=\q% {(%h.NS 9*>E pt0"@1d:D0'.AT*~@J|(+ws %r1#A9qdw"M /XTro!8K} ---[t)6m[{nO7'oz,N;ٱt(e+Ge)6Jo,wgyzCMJDYb8QtB2MqjT&OmogXia o[ (cjXllԶ.ZBڿAwc]qOm|NrlKOԏAo>_X,䶩qђ뫯Dmj޶Vmg޲h xrr6_= 7 \ #[zx޽\ߟqk+㩧bz$"""""""ȼNCA!9tw>1ʿ _V!=D+r;)<ݐL^TR3HԼ$9u"%BZ#&YB}:<7p ?(?YfBD)5 Tk1VFH|"D"up:sr'.Z1ľ\b:jnG/oBO "' ;oGO9h;h;V>sۏK>}'kuh{􁻁+@}FGmǡ^qkr|1mGmvrI-nAnGW.m݁Na=;::}]v>ç?i'/~ tuu1AQ^p<"y*5B2-w{Xz*278e'Qtܐ*4zCŷT|;$~,(V4n;5;1=0$m6_W;e"7_ϸ7[P2$&忩ʭ9aGDYb8QntK/yՐjedzXK"7ʜ ?&-D#(>T|fQ靈kk9?[%U3=D+%le`%ApT]PæJ:MwFP|KDDDDDDDDD妹C]"'XNliɞގj%Ap_;]LS݇lMuqyFQF1v ˟!(VEg![LU1{!-ʼ*DK QnEh!hbˆ\`sQ#dDYC'XN#25*S ;  IPCɤOŷDL#,!""*B _"J"""䒡GP2o:"C SJqCIɖ\D!2R+$C籕&".\⳰HG̃AYpw>(Vvq`Hfpj饇LUa1\JL>]?C /v|#b|'M|L =Jg{N?+`慠{WB'XN20Mt&[n-\L#"ph5iZJ%>{ڇw!Qy` Ѩ\ʟK)-7UEw#'Q T7B.UQ.׵UF-j[eVH%V,⧎?+^F0VPFC,R!zNHg:"+r] 20V`2CE(:jPÝ"#!25Se Yb{*,!e 3A%2'"""""[JbwTo6S+Q4'Up*:KWpWloaU*YbE3F%mM56L^iPnskQg]*h2n}[sU+/W<'3Ȅé2̘.!W V!.^2OYX%9DŲAsә8dܰ7l\l;_v+[oϗ(_-N\^9~Gkk>]\wW\ᩞ1VhX.F00T&k\yCuT 0K{WUh=fXs}nP>DkW[_Bn;eZ#~>!"e#Dv|7Tg˿_V;!S?LDѰD(5칫25CeCb_LxPsfao?m|1QV,DU`)2<VxP3m.TXf f ~k߮w%=1RӝkOw-94VU |c,H0J+ॷB+/=}}_w hb^NDDDS.y..dbGH%"CŁάj #Z{0 ?τاofa1BEIA|GOnýؼ %=]ѕoCmGth #K&H1- 106+(dg?%_Jg#D2VáX &D&l%1khEVf K:Ud*czB"1(+s5BK񻷽fmO{;.2̇̀eY7ʱ̒`٭pO@c!PGBoGo 5,ɋ(:V=Ვ$)qs5&ľ\:b)>@'$87+T4_{n}5f-ŝ/ė: KG rς7-.\E7⦺p)cc1 5Yom; <˗/UW]~|;+p9V= D8Vmkj7;?gGDDDDDDQ\[*Q*?"b8Qj9<̬,yO*StC2Tk4RW]\ds|zDOnC\g^ M]5qgOhLo Q]aayX|xܦDΟFv_q4Q?&;*ވނL.8{|=\G;]vΝ qcW~{৞zp'1l1FᎍݾB fDDDDT6x(-"*aUhc8QtjeO!je^1sqb"-ֵ)r?QȈ_ 6 _q ,{_ƹ|jݾae͘Xϗ(u!c󮶉8e{ܾ,>pz<~)X:z'^B1ZDMG1,w83wy'>㓟$>ࡇ?Q]]=,`zXe*9%1""""H%s%w7!%!_T=a_D(k{ O3G\Kܗⱄj-f"cLZ;~emOW\Y -pc=e/OaY[Yأ$LuyM^ۅٌ]zl|-X렿ɻN)93)8$݇7ÍoC=p];=^% |X<;e_|o)CqCMdgQ2*zbM5qO)ϳ8Mo'.[o8-S˗nm\jY8n(2䶩z۶u>|8jXbEӞ~{/˻]0n\Z[fV'q6msA7] 𝇼[q^zv_pm(|7C"+yCd8L1Ll5f|hѢ "6"[L2ժ-1s)//l}?x[&oї5Ɇ3pIri _GL ҙV<Ζ}k+,F%f{sm.O|u.Ӗ|ne1 {Okri MGy{k֬\r%pODccclx3uX76x/?FmLDDDDDD4ڈ,.~|sD+sE՟Q"s'T'7zl[!{GA|apeEoߎ_ۗ0u;ΖLovifH=Ӽ@%f/4[ӷ7hW^mp[|n[ο@`^ٵ+x:խbۗ~Z۶];{Ϸo漽^|_ڵkXr%.Rx㍸+{6q{`Xw R?VծA|u hTJӕW վ(K'ʍZrAep5tneaRz'2Z*Äh1j>{K_;:zUqq\`LJ~޿?lGL7z_@ɓocs+iԇmO&g/|#6mW\-_wm}_M7ܹ_=*?ţ>u1~<UIm\co|+"u Q^{iUor;G'XNnqYbS]!U\5_#L7rbďL5 (# uWsg{;Гj+;ſ: #ƛ<AٝT>, u${~fX&Gw*5۷oǃ>?5558餓J} NŹs0clkDDDDDu-e9lXHH-4PQ~C$z pt /d24Զ M-L,!C3?QjYJBő"nCGrNog5d~WY}UمΞ)By<^`Ͻyϙ3O qGGJq#~F} iܹ81= *̊M#/8mx|Y39T/U"""""";'(wCw#eE OD;.?VU$LNr\I>T 9W\WQQVWYeUX]@QQp9D]V?(7 WIB{OUwO޼S=]==Lě!SG'59s=9EN=ST=G\:y䨙cvtv='~s\Fú=چKj\DS/X̙c{|/_^˕_aӴ뮜g\G6kPC5u?"1}qHp =GN$T#T+W皘Y$P{ S2K S4mmr3$?9y|9%ړ$SG|Ƕ2Cn,W){+yHN=瞭k\~˿.9s>2c ٴi}r5H5Nu}~jz:a{|.4NBS-)~V5{oݣl0gH5]Gu|Y՗G_ԉ~@#\0cFHp @j0M4"9Pw8f; C߬Rx~L%SXsS1&/ƧxֺU)7>*gc{M HNU=7'Ln=S*HY^g*O&={eW3 *)tBMvLO/;eo @MR2nBC};)EF?~I^0R MWЌB @z)DMmb 4J: =XƬ#t5i4J|)#i?Tg t;`'nf?7R|_biR*a%2r\d-PoMa%)Z2M)#~8n>w$moHG|ό:5\( @;T&./I M#c* Ut3e$4Z,jm:^؝Q HLhu⮩X8sT'L5B|7]?3egz00JTwYw @琫 JN]*$ YM>oZQ}_7 mwYV  fj)XE=?i%T*jP}Y[DwKC|r㫩|㫧kϵ_{R|Ih$Hr` +I&Wz{Xhp~aYO/-#0K9lvTohw:en.Z3BaUhF^G1E7{Y=Oi}LyӦ6H;M|߬gA^@z4^R[hniуẗn$秫 c5gԾBU9?S|~$t`0Qyf6J;M|R` ӓ3^$k 0`,F=źL墜nudmG|4z 3( @zO!QQkdT|_=ׯCH0! =^:juϴf2RH/T.Z!< T1QuEݗ5*ת?[F6^Ϳ)a翫5zyL M)?fB%3Sdվ26~fՎ/D,hfUM] 3or~jw%@8][T!UӤ^c^'_z*s=l!YՖ4uhA^Hp PXb̺!*YS]Ƹ]^BAt;$\}/egzr)D %cIIM5xfju1cُc5 ``R`sH L|)g{*<T*Y/h zjek_7 #RS  yFGV]p zYXP8*,z]/Z5{E c_F_Z3&o RHQm`;S> Ոp=Պ&f` "^(,:~RBPEt2m_'!6ihF;&~682q F~KbF;-ҀnW|gʌ/ +3>uh5uj ksIIP&؞^P回dvZό"wΎ-W3@_L|k3䟽RHSӗZ';L pԔ(2SwL6E^i:~0⋉`_!7H|1Hp =KKTGzZL/&.5*l]S:# ( ƗRHIXCs߶sMø!$(kQ=ՒgU=S|@0(0HS \0cFHp @j0M4"9Pw8f; C߬Rx~L%SXsS1&/' 4/*G/H[h ӆTZa41ݓ1K(y*!~$h$Mmw5RrHp*mS@ 4ꁚ.%zڟ&4;2~P$~}n4ڔ7H ,\?4  Siu@k<1=3zzͅwZ`._ʈoG'+uȿ6K~4tO'^h%2r\d-PoMa%)Z2M)#~g8$K+3E tD8%./I M#c* Ut3e$4Z,jm:^؝Q HLhu⮩X8sT'L5B|7]?3eg t03gVwYw @琫 JN]*$ 8yt1Lw⨂T mGj) WXV9Y7dg p/:!htHP-QG|?O4x hҡH/4TlA%0 LO/H^X#_V%)k I_W,JO tHP-Q478Z9,5οv( @e2o M/P= ȬUө ̌ٮP 7/)㋪_wЌZᅑV dU1zpu)=ۋi@a 0MmwY 13 h* Ӣ #u//HnOW/ kFϨ} s;~X$(+6,]nΛR%#ˁ!w}P{Lfdo̞a9heߖ=]-2mY⺭5(s7g%o/>rmsOvp0Wt $*oFAB|@J4z!zz]XyPdM&hX\߭r1 +?Z]x|/e̫yS:ii)-ukhiɌ]꾸N*CkXY '   }2Cj3+.8+W*=V&TwzN2nN¥}n|{+7{ln9-o/6>%a=5xG˦$ k>Wƌ?W~&_VVǷn}U:ZV/-S&C2_oq#eoˋGG랟4PNx0Ϳ)a翫5zyL M)?fB%3Sdվ26~fՎ/5*y+Yc wJON#w=~|Yviӥu=Y:?}tDϷK}1sׅu[_΅dV`?Iyǻ'H%1Ck޽c mg8X^r,;mO,lAeo[1':>sxWB]^~O0}kr(~}]7gt:\tY>"4q݄y}I?2gUq&Ez=@գLT!ld,j^+8r4!2,#2zH[gwH{Ȑz}DHCLh>Ddfȶ{t0%9v7Kzwo3]^1"'tҖ;\F 9zt5ԫ[vOΚ5mύuMg~TJ;r9s᾿996?+Y].kݵmCFo;S7r۾ily0(C%>h U%fd` qUϚOo5Z%w ơ2₻D.֬H'r"]"n̽{Mi΅E޹{d99(rɽ"׋xȇ0a=(Ͻ]&{G|-ז?HW ˔&Ga4uodΛeD|Fǥ?+6͗V|4MVL# edkYU࣏Օ>ei_Ev9WI$_ES@(M6loo-}W?ܚE7,پ.=nWoA a@sF׭Q׭s' 3@8 Lwn PM}zG+TsM E Q腩YtlA)#iǣF,9uwe~/C?r/e?Uf., DX/}Z[fe^7u\|k]__ w19~vkv&+ ]u4\{R?4#?LX@8y|S #%a}1`i@+g 3eƗՆj Fq9,Қdv7<.{P:E?ZƼAFfv}EuP8y<7/xtِƦ-o߈oM>lTiiG,kxa"=vn=#~z3%wةZS.fj ksIIP&؞^P回dvZό"wΎ-W3@_L|I YzD'A'25{<Ja.%,6:gަv%?^D>r˾ƕYcm; ߯q)ÿϹ*'Nkko#['jQåc?x?4i5k3䟽RHSӗZ';L pԔ(2SwL6E^i:~0⋉HZU4H'|v_d܍JW{k'ݹh{/BG ͝GMZq{朒=gq̙kWp[e2dȤ:-['\QY5\Q]wt^wȹ{:z<3Smvz+m-ym5b -чZo4˞Fwq<=Cr^7{T\tLxZ|hs=\-\0nG; =ʢZTOYuvqRk kȘa"7=!soFD#G&2MdXkqr.=^O~dyߑcW޸!{+?>Q_xozcnWo?x^gO}ݝ0w=Nn<Yn++nGT`s^ + v'u]So[Nyeee?ƍAba(*ya2?l=e>ycdU_|oI %c!04uHpʁo #]PӷN1PӨj}jzP_NAQFp`pxq 9ދ吻._rew=w-PU ,\?4  Siu@k<1=3zzͅwZ`._ʈoG'ʨ[c (nf?7R|_biR*i%2r\d-PoMa%)Z2M)#~gPEԭ1 p׾!=3\r?HLL4T^`@Sx澌&%4䎩0DZT3WW$~vϔ$W3hr_u_-͒Sb3jߴ)q M.4}3B5 Gv*`QF&kgX4Pb$A@5*Ϳ;,o^E;EHpsURh %H@\;Pjl A@~@A0.5>8yt1Lw⨂T mGj) WXV9Y7dƧ!r(g'~`Ä}sTS,0=l#ya R{jZ6X|'e|](9>?TT `Pc=(ss_:知wnz]R|eLF^`t5Ӣj:B1 ^&~ %e|QR ꏤsTfZC3\ǷkFg8Zth*UewԥK:!v4yaz.?c*X?,7J*8\{sG[Tr9lw_E׍ABB]Hpz<4c VQO!nD վ ducߩ0~j* Ҁ e)uUIZƯw=)$4 TV9$ZՃ+P\C,4kz8ϬڧWIe !N)?pdoGfv Pm]ɮP?܁h*#B$L=ɚB1L( tO.S('[AcX?MclF{k"o TYR`f/}M0,2瘞YD[%Q].*NFs:EdwɄ^MR:D;Eo3{=Ngg% D8^ !]Byb W?SE/kz}U0{U;~c V~ s>kv]2;dySʤͿ)a翫5zyL M)?fB%3Sdվ26~fՎ/]P2ٵҲy;oRZ\R__Ռ&Kzp =BU痫Iѽ<^OEd{OO*?Qptۥc s}|18*~ݝ 'ȶCɲ,+/9H K,AsmfT|h ;p2%ջ+0S^\&%i4yL/㙩zf?n@'^cDv'[&r"ZDF @|Lio9ytyZ]toȿ)r4m"[E&9j7zb<`Jr"o2?=wl߯Mcrϟ.˯>Z䄹"q{̔:J2U{:M79s}s9s 9+FZP9j.kF@ 4a .O=5;Jh Ԕz2%ϘB5kgji4 UJ"["-ķ?|k7[dI;mֹwݸ}L~2E>vE2ȇ0?$Ͻ=wy">OOy"/S8+rߋ#fyU{>O3gs\<p5a r*i򿙄@?0~I.fUe -' t̶M^S=\\?YV+!nf !~ӀT%-)J#;eskE}.1hy-"w. dĊMmc*o?{θab!n.^};=ՕF:EWmO9WI$_dфEo"l͛7'^6ŗMut{mW4rMzjek_7 #RS  yFujB.Ip.TX$^BOjw(>rS%ymӎ꾵[UyY:t\pN{iCwoȡ,x¯s\Z6nVnRw?Nŭ/nI_nۗ?W-(j:kϘi7pHp =GN$T#T+W皘Y$P{ S2K SG)y3E:,͕K{ʋ+P 2M͞dSfc71F@?FIMv=)⎉& L<@z)„ߒi0w432KʌJaϏI} ơ+y^u'\q?'r",^Bc#.iqJe@5E>Lޫ-\{R#~p25zs'3s;4cgU*m|wQdUrR9qBe%r"+rR/C/G/!QʨKqҽbU*oyS{^/{_+Sf?{ ?4K}@8/=tO./w)Q dFMB5T3m.,"t`)U "O/ ރq+22 2{mn|KgС6| kky=L&mm2v-E>oZi~-1>hӽDZzwkHob1]5Ь3T46$;O5w =xyb^~lx1'_/|? >Wt / @8^檿m皆q;BIQעz%ϪvO{ L^0,:yag^/rssdOsω"ܷhP\2ӝZ}{Yx пWEvF%aFYnj @z*taB1iDrpvzuC Ϛd k{*dtP(%Ϸ=Tb"WU/Ώ$ם$ם_yr34,Os%E":RM HNU= „ic QQP +7CU7CL%TAsM]*qR>,)+2Ed."cϿ8 =Ldt[zXkNגp}qmB*`io翫 @eFsUo;27bQT^F>C?=BMhw|'eH|(F#xe:>tt3xlqqߝr}龞 s-2Cwʘ 9g&H\?^ptbvkmO9lw|@(SN&,34Y^{&~hC3 @ 45-Cx+ dמy,c{f@ U\%ߎO)(嵹@&._'_X'n׎z@+uȿ6K~4tO'^h%2r\d-PoMa%)Z2M)#~0#N`To,TEk_ߐwu.j$ P&tO,1t&t}5MJhSagꝧ VH)#>}"qpSJ|+@ߧRb_GWo:7mx@J<@eB MߌwMQ X?azǬ?,#>?t}g&J-Cp+ϏJ6K[ANRrUB)һ+Pd&ks mN/4>,Q龙1p2a[`kyf:T aVU(_zǼ^d+>SyӦ6H;M|߬gA^@z4 UzZ aDEBXpͨPzN)Pyf6J;M|R` ӓ3^$k 0`,F=źL墜nu %`m/#1vz(SdƌyP]! ifP ~zYD[%Q].*NFs:Ƈ/ַ%W\qE _{2rȆ:,ŗ>/R.vF,7:Mf|7!o^_ 4EzIѽ<^OC:zy買\tSn{\^ٸ>8^%w\y2fhXk*: RZ}C259~+rK_,so_*?}zg9c=F>#w-޳L.3~Ft.DBO9%:΢cqj{Ӧ-n.۶mѵۈ~U?˟fen /o/~Q>ųج\_?Coנuf2Qٓ/Befˣ[~=c uBuuk"mwΪω,> syG!fe>/aʱDy(]Xo0X2s㻽 @cU`6fW)YcܮURn|/!~ ?Ǘs֭W_}mRѿlm@՛eq(mn4 #{cK,_zK׀.s%,y}v{y4k hj4LO.1]r4)IɳfzL.c,0qv2~GVQ9Qؾq k3G-+ǮbN\'ڑxS[_SN;pYIWi7m)B9ﯔetio0Ǽ~Iz+9kIۦ~ĕ _tXƍÕ8wK>:uN sPjUM_W{tn Q- Q_fh?шaÆ7f8Mf6q{؞ߩK{${ᙋ{~~8%,;}5?5Z[Dg!,))y~s; I~֌On^{_jv٩_0矋+z.[_a .O=5;Jh Ԕz2%ϘB5kgjiEYgdr'EktAo|;ߑwE\GE]}/~6mZz_uUo;SOy {gqWU9sz3c {^\4`woz}^sڣlڎg>1/>GG̔<_n;}IS̐cǨQkΕ!_?v|rkFf^r "xBS;MYݗ^ONGg 'חt1ss8rVS4z GΌ׸{ɝS9fؾ_ɇ*ם #ǚ:W=[n;ca&4}`]ણȸaۥM>{%|3eI#Ȗp԰%oaڎp.QgwX |ssdS]4iD|Lޚ?6r\9zfsF9:;ewO2CZڹr }.ڥs!Q`sa\rP)¨x{c\s|{mș L+F֝;f{k]w;vX߮;_a¹} gyvz޴2D+++fDב墋.sK/4~sYg5\_K\7|ttnժ# :M)ioo_oT?^{TG|׻ޕ>o|#DO7,M=ʍ[Ϩ"\с-~~g7:s6mNr_i.acFȑ=Oλr7,҇m> .[ kX}vÆ8vmm24^~aefwY;g}I|cVkiO Ո[4~YVʯ0Iwb^P&l/I(4um ^?z~BwWB|_MRABlŧ/5|ϙ3'qI'?>8NvDIhŋ'&6wEe]O0A=xݵE%ƞ5kV{q򨣎2dLMN(>'Gϖæ >$#G17됃vchd Qֱsvaj̎5$6J:R:2&ʪ6zh|L3;U揋 kȽ]J;oNyxf9d(1$&+{LlO:=nMd8"ϕ]Zȿ;Wz!?b7io͍_=v>B)R>] ˜_U[zlYcΕ#fQCZd6_Z3rண_->#>둗~옢鞰:z0E:jv":z9cK<_ByQ|L3;>&c#ti C'{9&|uwx ɔQCe1}賏υѹaw6ir{ikiI#Zs°9~n\q 埏)saX&>9vNs]s܈M}ȝWF&4ѹw!uot~ap.(VݴFk~~~#F;,=e BԩSw?DjՑ5EFuYO}Sq=5D;Q'|qJ[ϨԖٺ~y'Vy<lj/| K/I>;.F|򓟔/}Kv'"N9唚'|dY7'<@X9{l^hT_7,GϨG #P_}FQx8yG|ǣ jbѶqfE^K4]{Lm*9'>"{vD=#U޽L]E܋Z1c2z+6cΧscc2wN[Z%%?|Wυ ѹĞ|WO<?}/},e6\O!g.ޫ>_s)LbJ _+7|<^!Z|t/y%чkxqcJr7cc6n4M47c&MBg}6YD 7;]:PH6m%D1r-ȵ^|wn>=ozwpT?Uݳ˒YrA( _E=D2LJ9#*gE@ "AҒy4]Uϩ={z{:˧UW׽9瞛w5c뮻."o*8*Gi`E?Rސ?^Sϔԫz[o.sȈl,٪g`}9niNܗ5s=kv}>`9`u=mfVh5i7l7ӏrcr8%IbfR+Wb>:ح E2R,4կ4/um֏ 4ĕW^:x2eJ7ߜ:믿>}ͯa{̙3GS9眓~fɲ[X -Gf͚:[ЛkfǫߞUWK1(jh ?u9~6<@g!7{,=;k~̑W1i`ƌiK.կnڬc8|f˟-s %*O[L.zYeE]5P#N)g:]f>\G79mOxͲlQ,+D*)6o4- g䲇\-^Q{f?'Sf/{f/3KW>h,^!,^]"Zru4<yE>GK%R+7=)w i<*kCU ӋVȔY?.O-^}rʊPP'{ZzՇ<&]n75lFr 6=_I״6J{;'4yhΒt6w(wKV׏^Gٶ,K%Gl0m ̫ ʟ`T-\[-Hg?'߽ez m׭o=^3Npn+O_<?[68l._}ϧ>8;Tx ұ/kzֶ]hv/4yD^j̈́nV4ڷ@ؽE <fN?YP$g!nxah%ԗ./50 DEqs;< w]MK,B,TW_}VfVs(Og%,KWg ǜ >iyekfN=gGl`pbsr3fȳ 9,]*߻uzdi/\}-'/ȣ}$I5ș=͞`>2{V`߽yz:=N=ҫ΀_床ALjך 3f][4G{mZ*+6Uڷn&<>d؝guO.HI䳗 ]Wzͮ^W]<-u?۴{,q#ugl5Z;ck5[\.͹&51/X'sBPMm LO;.ypv~DGO,k åm/M]G!9!R]X[th s|4:C]Rm s:m/{O,{57[„UOBҾu]@h@KU(#s'9t欏AGVc)Nc3zvjVb7>ϽOxe\t,[Q$O:ԝ5la{'.O!mϙ0zȺ9r}Yy rp[h+j3BajžN_u( o^?F4p^vԐesE.̗)Yws+5#_6}/N57瞩A v>cyN@iudAq!ѥZP-Mx;ҵ^[ar(mFiY^[v#[ȅ)_}'^kv~rO!mlKuͣ\trك5ma2d=[ Q2h#~5{wRAC]֧~[Fk֮b=w_CkW<$q߷% -|G]?$o9K~ӮN@6p>[ 昵v֋.}px,{?Gsc Gj_sHnkκF3>e=GD’%Ql9wθ7Z=FZlYCEZ1ygIk>ѩz/_z1=}N/ݗ<]uZ}N,q( ?wD_ra3B ',˛L< sQ6Q1CI^ver%u 3gŋڇ-mkpSa$rzUǫl^T*m=Ͻ,;rsqޔg;~xRp,\VYi6=Q Wgu]q?&)onƄ Xs-߆qla[)5 'wjqUah L;-sm9yxγ2qҤj#msF/l_^R}KMo75+=m)gQmM2]'ya5vvI/vt[ F[Jznȩ9{ɠ|oNq]nwVkn'˶Ym-ox#_cRDA&ko +9KպAkrՎyRE+ryk(S׆Rrh]B" %elkN%\ u+rߴHzz;/M֘LjbĊ8wpT.I>X~jFߍyn#ivt&>c;5~ߨ̙:M{Zǽb7Vu4]cI9ˣHq?69#ݗmȻ/5ʌO4Iks3~O״u=go]U@#wn:12=8#*Ɛr mǥOr3ds9s;ag^Zfo~s]|S:Ht[uzW 9Ns 7wm79ꨣV&>9SQ-Xe k"3}N-jKQ;Y;P ʵDĔyse%iH&x-k)z_裏5V'tV)M_j4Rն=S51k>̋fuuv:N;47!ԧ}g)|7 9GZ+рv hG.gfWQϓo\>GM޿ǯU~]G*_v3Vkgk6SZ;Y˅!>~/yNlA!>N}CNI_K?v)oyj\P0u;o(8~OɑzZJ\OsΪιiypR)|mcvzg=m{o6h||푹5{_^5J򉃷Y-vwˌrCTC":j7z݉2{ΧևlfTr]۷k[3&H/M[ڿ^lU .={5=orcᚴm{ú9pk mݕ¤fX+mAKks=mʶ|#]^]vIoz*YImjkuos^vdh$u=Dk/>X_c"xǧzVtuYG>OˏtvgK_Җ4PkO]CЈc,:=F;N1讹暖cb<ֿQ7ʊKeuוqӱd DzGo90cX$O%}i,^C?uY2yd[~=k_iB&h6}Ng?tfsYeYfQ3Exk=f @6{)O\>q;&7 J: ߒ{뉗$d%&;-vnїL<|_gy\3u-Y$Rl{]#/w5oQ:f̘!mY:Fy3ow3l9R3{F_e޼ymQu\g5XcXþmf˗W+IQ:A9|/?w$uW3ݒT9Y%2&Kƀlc k|o5'x'A4P7$1 K+\="/Q.5ΗWM -+lykzkeҊ?!qNU eAMӫ۵7]3߸Im3dApͲڲkɊ8>:OsJ`6,Nҽ??˴Pvhܶ3~vrӥj xIC夡MOȏ,W:EQ;s,mAuJȜ E&~[n%l}DERY~dcDBܗ=#i[Va{M+tx;;#ݿ[:Xg FmjN׿RflXf'C#hΎy衇_vW vצ}_m]vY'?> Lz-xI'5 ?ϧ? N>Ygwfx4 k}-ǂΎ3GSg{O@z~]fj\}{z󭿳VbKJc^*]|8kue8 )>(9{w<%Qȫ{w]3ɗ> <Κ7޺ :U<.yyw%:N"$ydXTzFN'^y˟^vكrS;L_ۡ}?}FChsWN]|{{gI\y7Y%۟YO?|.~\/KE*]}=9Kڻ¶n')-jm-\j[K]rgN[?͵W>j]͒}+N =tMV⑏ɗ<('c^Ts^ymz¹wgpm)y理Ǭi[p`UW

`/YՓ~任#S.[מD|']/#Xk-Wkj3es9˗ܗz5׳-ӪShq%ycc`&jU|#ll C#WhRo1uԶДu4o{5u.fՏs&@(f 8ʦLJ0(&,4yְjW@܀>@GPǞxWaNFt6mZ[/0{<88ǫSO=s,g/3gOΚ97oq^q"_*O.\;$Y6(nݟ~=#uLL_|LzjTyKsnlFi..ndmam!^ 7Z,_;5`<`Y~=LmAYuǪ-s5%ce܅Cd!ےڗy2gN{ -\ x)Y`pGtz#&͛]kfDZ?wo43Og?G{IZ_c@Ҭ70+o_: v;} x[XF9QFHd#:r' s]Wrv7S1W_Wl2P.=QN@S.UmJfW|o99|ҙ򋗿SnЈjiok5oC1J~IԠFvWldvg\r)Дiԡ_g= 0^l ed{e?~֫fI` ͿcBg +ؕ>+bڲL #W5těo}MWN|-'~E/^ 21D}oylcNr-N?j(p&s[N*q,v^>HWf):v`Q>={rwk5p}@Pioڴ_Yqۉvy lG. ,qY^yȊ+r,2<0~.їb/$05mv7³eVbh&˿Ge3Jn?<+2g%=)fҨ+0UiS/F,vWj(p& yZ %QH&&Џ@?hRܨ)]~1)k=O_rI+Zld%nMj}V>K Go>T; 't큛\ @9l`@kZ+RrV-h3:";|/,N臝 %7CGT=wȭ$/hۖEsf,/$34$̸~+166kCZs3}>*w9t!b˓XcUrFͮ{RqF11Y6tFgo/( zG9f4q2J]?$p[%^6YfYs.S6l} 0$~~ɜ_/80 #d]+ķd1Q%.k-VߏaUZ_b}0!@) J?tz1I^A92Õ8WkG9m1\锊W|Lj}V}y@7½ !@|Ҩ5* zJ0G?rǗw41>we`дДIYc%]O<6_b2=l7YV[e f̸#hfd9uIJ9j/Hv{G.n@'06vνqJLV|.t[$6dYYi_iP_Џ۬U?O '9k@x9×=\<@Mr-T@ tK}ϭQ B9|5d\$eaJny88J 藍Aam`mg(A0R٤ϥ.O~ @8%SfhLRNv%#0%Q2Y6gT)XjdYsz(@~fD_~X>8@qlegz毸 /&T} s16tĭ3#}d fϝ՗}(p9u،)?wV_r*n<8@qbcԬ1Q̛;&00rdR2ٚ~h=/3;&=#wn:1ٟ;ԏk u7Ap\q;??v 'n:8@qbgĔ6F0q[YR[r:"v=+d-ҀiSnk qmzZpkI?2.]K@Ah<M㻀 b(!+ ȭ#9cZ1яLr g0fpྉ`,LQ_G&W/Ybf[8g24p&f 8ʦLJ0(&,4yְjW@܀>@1q8 nZ/of Bhь ,cc`([#$2~q@{@N f۞븆~PC @68<%7prA MJq;@g i@z4&+M&VʝƐ;0F-tưb]l*-nݐq?@7}ӏZA8{n˩xC%Θ.ɳu>cl_2eUCv~PP,'x 1@_8'5mW:6m tv]>4p(K\Wb޳ʢzf0n 9KKArk 05mv7³eVbh&˿Ge3Jn?<+2g%=)fҨ+ӯhZ5m9qhbm0 y NN%'H@h< 51\ MX?gTw؀~dK>9 jbx?']gGD{&@hض&Gʡ 3cD(/HK&aqpJo.яZ8+L(pHqKܿmY8gFAr>CHˌk;clcO:OS&chF/]D?pq>7!b˓XcUrFͮ{RqF11Y6tF,T&/G.T Pef\~HಷB7Kl戝].Fl#٨qG]x 9\9)^rq:_a@A40F?Vogc\K\ *.[,XK?fZ] `EaoVn]o\ &3 94Gfg#c{~m(-f+R1*{|>0 ~[/ݪ# =Pwoׇ7 R?яhy1i_)bJf{xl2d1{ 2o$xfMyp}(p$`+uCBcg[cܯUҨ~)Gp@A2;@{w^Z͊OZ4p(L.qNLvWJ,IɛM^qeJ8)&c,v v}O6:@o<@{1FF\C4fb cJ3*[/<6%du藝Q8r.'kF&a9~׫?ݺf[z8@q|Mk8mf%yF9fȔni~_6}VlVз0g&x \%Rbc<#y}L0e5A3[$3ـŮKRTk~~E-m?^v9P ]soS$13m+1 f"~)gzVWԗ:6G;Q*49' o {j{?q3  B(N _3[r7[ SS@Ѭϥ.O~ @8%SfhLRNv%#0%Q2Y6gT)XjdYt=BoڬQ(cLesZ{.؆npuFq P g.0g9eڀTӯ{<eIofm&V[` ضj @'L4KNE͚(Nl5f3y3c~GඳFnݐWJ&[s]w]m(s)3>9(5dhe$9e{6+pFT!-dێK5# f2o<5kVݏ mm zVDYfL/_2=r16ecS.lϬ~bgg9NB/Ap N>cٶw J@H=H'.pYPʼnSo%gJoɽWvKzlGK~}~b>W%`|CP}"0(^?w~d^]>1+bڲL 8#7 CǪfylcNr-N?j(p$- 8cL/$A}ɔU~eAA};[Ҏ}pŸZj ik anӷA4G<\XⲼ5W%43Yvey`]/ ^>[جNOlp fZA9*f`8# .~`Y+uBlʠ۟ LX` kIGgWM_[Nz=}s]'3j3b>7CܗDI̾2#zl^ "V?C?IrrfuZ1@o0ibs;;ӗ y478Jrdp&+4b[#lRa/}057_Wt큛\ @9l`@kZ+RrV-h3:";|/,N臝ǁ*Ui]D?rk0 8#1-qe6} "{/3e_6JgZ?>%o>{-"ӏsl B1[/Ė'ƪ䌚]bcl4)6-֏;?)ePqi^ЗQ#r*@hb2J]?$p[%^6YfYs.S6l}!`\-c_220K.N+2(p$Yg ,6bbkTw<Ze#ckGV뗻Xz)*EaoVn]o\ &3 94Gfg#c{~m(-f+R1*{|>0 ~[/ݪ`.H~ݍ_ߠ߭s#w|y8@qzbxhWhʤجޮ'/1ebp6,2 h^?w^?A @81XJnnݐGz>}k4_PEՉC۫_Y[+8@9u،_qd53 zL_Iϗw/笛N  4 BILQ1cm;.Џ~b p/藛 `Lio[hnp9cd \hw2|ؔQM>ٟ;ԏk yFw`0$ ?wJ$O,t(p΀)m`₷H+uDz%Wn=6YsNݣ[}?>O?1:@mj_Q&ȼ@w-}bx'qo .Pn?9CV6h1Ƒ[G$rƴcT-?3H`9d2_G&W/Ybf[8g24pL,qY`֠3{lʤ$.H2`2Bg k~ z#G,ШIk-o`^kW߾t.}(9F3r3C7 rʣnGN?t>Ogvج^sj@4߆Bcg]1YW \\cBSR~iq P5r'16+6Q 1cW2i3[7dSZb'8vylcNr-N?j(p$- 8cL/$A}ɔU~eAA};[Lxh>B}UGgi Bo'@hy,ey%=k +,Jhʩg ӏD_ ԫ4̨FJ>k`|a|_[~lyb3e{ ['&ʫ ٠odưvJ4J^fDRmGM_[Nz=}s]'3j3b>7CܗDI̾2#zl^ "V?C?Ir@g>)k=O_rI+Zld%nMj}V>K Go>@W`1x?']gGD{&@hض&Gʡ 3cD(/HK&a1q v :x?.яZ8+L(pHqKܿmY8gFAr>CHˌk;clcO:O` z`0~^v~}!b˓XcUrFͮ{RqF11Y6tF@Xͼ/G.T Pef\~HಷB7Kl戝].Fl#٨qGe™ =mWw?{Ade`ʯ\W(p$Yg ,6bbkTw<Ze#ckGV뗻X+N5,Mz*Эm c&y4p W~dS\}ϯ lPrS*f_ey3o[q.D+RT_ߠ߭s#w|y8@qzbxhWhʤجޮ'/1ebp6,2)/ *Lyp}(p$`+uCBcg[cܯUҨ~)Gp`y@mV*Ix`]n~-f'n 8@s\&8'&+vK|Wʤ&2%WZ]1nǹ q`+1V??t3vhbLJ Mt1aquregT+N& ~$_b|&[[^Ѿ7\ҫ 3$hZm3f϶/̳|60}GtK+J;ZkuS&(J78Wy7.:[>CÜq>8@sǖHLr_#D1lxl]8g.I)'Sa#ygWU9eM7c /}K78Wy7umosv{G.n@4k06vνqJLV|.t[$6dYYi_iP_Џ۬qղE#WJ/g>ӗď|#{;~,{Mo~r>9msߵQt9餓NO>Yַ&l(Gڦ/pkNickM/)_|k_KwK_}mGj7sn=?h3!\&/ SrWjGFl H_(|1Ǥ6} /~!{oO>wfmwisΑO~鬕~!4}L̙3VVn&9묳ӟtqgvd)78WZ|CJ&qi b 6/W"MT*2g &ȡ*_W %j@i R'N P)_b3l&W)';W(,r3\k,K5Ӭ~G>pt6:u]wmfϞ-3f~hB:4ܑ Hg3+{\z#ȴi䡇?l{D]oOg=rw:z']opoͿщ'VYb?N4wF78 гYk/.֩ P%hٙޱ+.ˮ "~ߵ4C\ "q댄H]58w6tӺ_c5Wn4RPp0[zѶ4z[mUrw )rzJdf&cߣ\nk+?aGu4i}իM窙kwn߷~VVXpr|B#}Wn7A]G{j`\pwqh<F3[n;3;sg%G @}z6#,4Ͻ ]`r2_1yn3Ɠ~_߀mrK.DΝfս]?<;G_򒗤k7wiIO?]vuQoxu-<]Q|^guڢ'@nя~$oSC9dDMuky]QN_|e-ַ?}2tOzhǹ+7gozG,p1ji;>KLkuװY0UzjD@;γAv-k:f/Ǭc}{:V9SGS7M6yoAV[K^xj.ǬWYǏzmh~KӚk6d%OmGSQ6pfYbތج61[7$|ŕKF31}iVKpo[~t4|Z0۾S~}_uiPOaYu}H: 3 *r5}?-0/_?ݧjk@VJz\'pBmԙN7ͩS/oƎ:=N; `s5赶;?ve;=YuVzvYsAkW{_~:cwdujPE׽utCӍpt>Oۑ8Iy赬mGA}]t}O ܯ6 ծ hҵulֿ q-[u6t9 W^W'hzt{]C֣mG?3sp7,s裏x̙#w_Jz^s 2foKgRWz^'4?p=58%<[@TZsNv Og|C~_i=\zm'CgBjѵ?t6~o=:KU8W6/5a583utM{UPzMg A :hI-ffJ"w~K;LA=WbzJaJk7miLhMR򗿤mAgkk[z11Z3וak34 \uUu>j_t-;4esMRn㛛oyv#4Ǣ$͒ٱ7AljsO\'tR:>oD۰7v[&xo^Oka6tU8]n @A䌑5p1j߁%#gcSF=6R&'fvz~PP?o/TQjTXwu*ʰSQH5?)u^ۭԹjŵ351DWФwӶ瞫|^+.4ǫKgyNEϕKYh~Vg`j[ߨhŹR1=?/vW<~{ѶvMLwvʹ/z]5kmF]g͚=ɛyYNtlo䊞s֠2RpUgjNo4=s}:n{\g >dvdme z~ǺhDuA]MgFz;cIN2e=ZvUOl\u*Ҏ`n#߸ϝ;7  @83`bJx#R-nxɕ[M\bb}i@ϴO$g]cmҺ1\$F>hOJԄ4hxnhh]RH/QU` ުꂖN MA[g9<51\s~9{͹.cs̖k+- l(̀R貊zby,0cOOos%sԝ*)ߞRg~g\c[rjC{ 3ַSyV,+}ʧ|K6W/˪V,K7~ͬ 䂴>R{/kAi5}ΕUf:9ZⒺq.ڰ "m-ah|ZG |{ +w "2S֪[uUS["ر'bk\g&= -̳%kYтp{tƒݢ\An.YU(޺]Y8{y3]}Է _ڏ؏ڣy'L_=xW%z_I tl7vS(-\Zuq9"E1XT/E |ЂVჸ)dpAu,8k3 0#**M2?&UgA_kfU-zyp EJ.L̳F#|s\٦-iߣo?wݪl#fc ik怞Z5ڜq,n>ױU|F ֥uמK6shf6sc3v||ASռYZt#V!:w6viXp6AVik>T2? FkfV`l^￾}aҺkkե^ZMyt.]=`Z\PN! pXFl8-JMnw%S. ڴL+gLAa\?3%ǂz 5TkїЏ{2}mzӛtfBEꭺz?R)sϕ3?3[-_=g9=ڟ'B3I|%Fgf׊&Z`^6^+-k^׈?OթDX܅9V|`Yz]{Golc 3֒򖷤N|+[1C}|I[ϧuobW 1[ÿguw# .yȪl3iZr:,}nχ?gl:d${$r߃KWDlu^h^Z}o37L,N[H}Wug Nn5+lre,sCYl̸OlZ+-sS+ ʯL]ߕ>3>%3vIgUAUw>6 trZϭC@LOOoFji~D -Z[K1=۹YV>5b\['ڜs:o ZvΗϯ(>%c?%V%hv l2z(+n -ia6%`))a5KK/yϜyeC"9>#vwo~%Ey=ߵiy%IK6Y۾-аMoGJDc`#.TI*^$|~tmU"AL?oUf3獭X`n[;'搙qu?>(2*||?Եg6} V9l\Y"my~hYtGh74Fݚ$sϕ{:ؼ/L?(Vk氙?OL֗}ූͿ77S^YpL9z[A?u``~~[×|ɗXk)K,a p?ue陮U{~״ ,V_zv~>S?=ἴw/>ڬa |~ߓ5ph^ ?ۿۯoF|zIcMs5c3z׻nuyy/yſ/?|岙Z˭Aԥ:kj?j`Ƽ} oxmط7ϴ]s^`,??ລ'Kؙ͋]|ng}si\DK$?f % js}4me:6Sއג},%m>sK|o c>-9^ouޏVnS,&W_];yKٟ}X?gkk撵v5j3=-H[)Xڍd3l֥ ֲ*p6\y~gF_ _;V>5]޾] d{sj3T`k9:KpfZ+SگM`շr{/m3-Xo [U֖˿˟tXޫVA8>X%չ:統y]PºX{9Ή}v{n>/k[?]cX}]{vڱ%?}`k넃ύyl멽?,ik˹k%W̉sv̖giozӛz9s>s]lYB?s;}ؾ>m }N/%{ծcɚc9>.$ۣ [ A!p>Aڞ7YԲ,]?ז(׼H6P,EBްqfFZ+Jykz/6s._ӫj_^W[W|W\ڂ\og|\_*W,k-:4[tݯ}fj~t-`ihV}bqkEn{k Y˹*I>}mZEҜ\3d:f&V=5?.mD{uZUrakmdR0Z򕯼jo\?|[~}KvVa DZn73UkޏVqڥ׃:=+\wUu/6,7sdSVgt<|n{,łIVןsgt|(bզ|kO׈c݊uoi~~Zf%{6Z(Q iϟ>ȏϳl_aWOG]kqaC^ b{÷~ؾr>w/%}|zh{WZU}^۾2:֗"9Wwyuhƒ cۯz2{[ә#[p@d%U]2Ě7}N> 7fY Ӫ;upoM^xZZT^vٴ?'N oy[N6m3M&*[{MakMz[8 9oc#B9TlN 63֞Oܱ*/]{uV'Ӿ }=~ݿ%^g?7.U[ KbN?ȢS){ç=^y|a)ת"-ڳ 8 _tGv(lpr->X|}tYdw?\P~[-b9KeoVMiApkU oךo"tSMyl8y4imkP|\ߟ/os;w_-]?7<8>c?Ӫnz6}^^?r}^ljxXE*L6f[[\kkn[_>caw 8pߧޢEl6B= Ib5ʢL(`a|^6п& P6%1ڎRi8mR DӀc|J16}ߧ^xZۜfz,g,WOl}V]nct&-Ϸῧ#E%4 '@5J??$K U;e_]wr R oxuf<Ap?No}[k__?ykқO|;z<M~;|o~ %Gw.k>JN;ql8v[g y7~s]6Ip{q cO.{N{c{[L8m s}rArJy8z/{q:ersWꮟuK S5=!cIyZz}I!/'@`;:;Eֹܷ(-rYZ̳HdŰv 2]$笶D 9~*j~a1ݭ  inJrܐ-I>Af묒S@ FPXa(pwXoV7o2+}8Q2,pewUi]Y\YڤD䓴z3*v[ Gnwg=Vc*g|Ǖ]gp ^ Z4^]2v;YT'ݐ~~I1p_^}K.tU~'$O2zN8v4+_8v^{)--XuFH+ŵ.hsIyް$cv ?܂~@ p _sGw_$n}pdViw>nY6 YZdw_M6IAܚO+~=C9~)sG9ԙtyoO} ]?\I=Ck" _ *S0#Ix ESG?߂~s,cZ:|[g/G>p1-re Vi2geEs H?>A3 qTP\>SD ڗ -5azZ eeYT6/c'; A?>_.]$&};u?O s! T`㳴tOLtwOs'h2gdp:Tl':|F\Ӆ/9'-(2"GQvdĜktR5 5YwdM/Uڟ E׷)R=:|O^xKw olڤ|&WE4t d>;EuMv_gQ hx^#`mb?˒K`Y[߳dzi" bumL>ݟP@i_.dA_{u״,?V9/[ ~1H0N,l9]S0d:;v2G$uvUM7VsJaA?~sק:m}S}p\9_I{~q^ Nw 6U壴 eU#Rd1E96T?/OF>dQ5kb/kG:ORDI;pL$Y`~AKxrεIi$9CRdi~!觎>e6~$= *o[ߵuO޹&<$"l,[[`K%UI2\%yAv5Dj-sx|ϗ&}kG?w` nQj(Nvo3o,FW79XצeZ?ނ~=A:C8~8/>sF76uR v>pعYdy57@Neps'G E*WO}U$gpߣk:s@O ߼n'o:+|CL|p9'w?~/+}[XY𓝟;6ߧsr? etKzZ^E{:8~ (e @ ;(/?G$ce8dݤ~ǯE}=ϑn]"tMyl8y45ݷEAEAr}nH͋}5Vw%v >[r?e[E> {!p->ZBzf3|Nf$iG\Yr ߧQ?_%nxrT%{WC~8y-{ Y沴Lin~Da,dHYmS觠^͠{re##Cj3IÂ>l8v[ܮ27Dg$&$3uVɩcU0~ ~ .?#s ,󳲟F{~oR6@l8y"g`J$׷W%isIЫ27mY.? sQ&~w T,s=Rٜ?gw=;]ޟo߉~A46@`;>[ݹ.N~nٷZ\*5ןNo1/-="9HhrKfAJW?A#7I);݀M*ij`68oh)d3N]gɪk2+_.d%FVt58~8`]3etdkzt|w=rG>G'B<4ԃd*,/enn2v}]viV,=ѯ+spfhaђ:.')wIῧ{ T`.>l8vF׾gh`dy@Kn'y$ll<7/KC0[e/2cfZV?3o#5w5zTgO,u+`IIEIxZhmU}<~*$sK,K%;h4H\rÑc>75Mۑ@;ovK{ `y>#otf4(|D d̝.o7ƠsNZz'v1M .Otw:G{E?eTlǷYE1Hn~Gd2_%E|~ۨ?tO~G]|_]g{Y)g߳|}{T.p 2mo>+"B: "{.e-O9?]+k2Udη䲴?G?%p6o^,^6Y}`nvɌkNG Dk-P\S[Sk zI~?8v,`ɵ6E❂9 { W Nk8?ƥ#zcGe"-w%:~?_E1=Y=tE<79YZGo]w=}ߋNMrLm:NsP\Bs_"sD4\~AwukG?9Oo >h^$0?y~a:K9tTUff_)[?{{:Nr<:{OߟG翇 ((L7A,x~B 58~qqY>'7Cy>fP8ŧM\sӑ wގiNr]8S_5en!_~#3Y '؍R=&و$yBB?/׎^T}EdvZǼRL;M)}dy%ܜQeV=SN ۉ,bIbgzi|Q2v FDK77Y{mK[ጒYWe]|-7y+5ԼSP^ 17-Nw# .!pb$Kw $ek2/;ݼ ?Z/_7uvwO3_&iK/t?++߼ :<˘Gj^UBs FSVWUwx_ߧ ߷k!YSpp,(3¯-`i3^%îs{ܟn!B5%E~9߃l^{%{o&_+^ ^byVniJgcGW, I*'.[&wg_J[t[𿧕R\'@<|`/~aYEڡz-[G(/?G$ceM~[on30o}Y2N6 m4zye}~orLpxȘj^싚G]{h!GY25ws v?#wrݔm#YYS~q ΢Io^p\˙&ם߹jn:=AQmt& )ww_m~oײ:`8<;bz/Լw?s?sK)Y{%:M*{KOҩ6_]^?~ hߞ/V,j-h,-Xl4YwfzA Z}_eqNv 8MǕbo?zO ?w}Cm>c>&;ݿ;}'~bO|'K_s]}G}G}G}G}GOO<oyx;~<Ǐ= Ї_k}v9'|'p|{/ɞpG}G}G}G}G}ѿyЇ>`w7R?^unKo?'iq>V{{yݍp[E/~Yv!\|_G}G}G}G}GW#}̷:\|;8^t#?Ӵo|㷼-/j^/ҏϠ*y:kxEA*\;^f']zӂ?H/.K{ p $+`6x ދ&`)yGsrnqVo9O+sg@Ɇ_?ɼSJ;l')M)}ҫ29)9y)/<|AJSJ_R_SJ_rK~K)}UJkRJ_RW.71)o9͔7 H)ҷ.[kJo~=)v?=\﵇}r}wqspsow?.N͚uOw~\C}G}G}G}Ggu#>u_ww;9^㼫ɏ_uo?iq^qG@z8} p\l56J*pdeь6HyvLt,-X&`$p-Q@< ($ IfW4kP'SuI[qjGNri>裏>裏>裏>l'U˧*-/⡎{]g裏>裏>裏>~s)+EXGO,@v)>oF8H6 H?(#Ie3QewrkeS7c sI6Mfhc9ً =dzV 6Z<;d¶@@^f<O->裏>裏>裏>裏Am?ϝ=:Sp_V[5?HKTk%#O' Gw}ޝkc{O?j߂ pApv*c-F(,Q,k0}E=kmIo\>uAlPlKSᨒ$@;ҹzȷѹMGzd&Kž&s|YI.R$↓=~=+裏>裏>裏>裏>ׯ+՗\?8t_t<'oWR~w;O~} ϋxI$cP?tZ$kQ{::{&AZ;MV H|$Y_\wfrL_g P2ʌi~ 6g]ɦ?!؈Ox"z}~G}G}G}G}ѿ~o`|1m'?mKО~Z:K[aԮ5oCl{~=U+su)kmo_Զ@NdI-WY`ЂVڃl = WloidcFidZƷ/"Q2uS>l1}ZMQr:|l:Wjm&˗AK•l2~OG2Kk0S }G}G}G}GEfL nG] xKS+ǟ{ GS]?:wjr-pA)s^7IZ97B>&ԂHR-%`>tzE^E;YSxNѯR 3rwydVxr =hcvE:/\5n5sMbljptX= ן;Q&-JS[BDKQܹٻ/6=*'G}G}G}G}ѿ1%)ڧO5OUM5II OMA<ڱr8>xs?t״nl^?ߴLsO E$d AkTkF(,O/A 175~s6zd2Q 6K|WA^Ael7yl1x]MId|͟|YJ6E6йSE!8}?}XqG}G}G}G}ѿ$^$*ӂ1"ϩWׂ`9:1oe:Ji5"u ~xhG-SrFg EHTgZ/c';-mOQvas}RОg795nA IfL靎נEN%I;r\-闠}P 5}(/>$١?ޟ߽|qX xG}G}G}G}ѿ1Z'i??y-Ծ\[ 謹_MO >kLF~[_[u'i$);/TџI+ T5^.+~sYycgӧAAfbϋNUAf O-8&3f!B6嚥W?S$geo 3 *YS'nsێ950k}Z8y?ʄl$%~ٗ裏>裏>裏>裏>_^ r,?_iGACMAqZ~?eM)n5h fo 띜 #?W"{[qo); T6$`.#@g$MVZσ,ۂ leٻ7CUs58I~u?f TYx47)ms5m4k?'E~|+L9̣)8(SV7цvPոK0w-؛$&}0 }G}G}G}G/AYeTdVu)3#K.'PoR\mߖ5u0];E2FoPt)6 +ԷK+)L~YG=h$Y6@{Ihuٻ,۽l /-SҠz]Suǝ~t9Y:58ӅG}G}G}G}/u;?堲z AQ}t`6MNro"s`$=} 6&8"kA&]Ԣ{ d>]K$$sd׭~Z{ؠ_&~u#˹kf[0{H&ηE:Z?v~dC9شkVoTMd%݂,*-؏>_ZPw2z'>裏>裏>裏>裏oeԂMZOAkgOAv]]C{Iڠ_B?_S16mY=yv?dARgYk'+q'splL`VnzҾThcӏ?I{{7;ɼOΒy=$-G}ق~ *5;r/٘V)%h^;K6T pȾ?s57:s KB}G}G}G}Gk0[ۂ1MG-U O+"zS:wk/. k',ߗ}8| l!7m'sDܑQ63elg'>$0[dX(msvA̙i~uFv7I6:g?5I]Uonc9H:G5>/|r 6k TVodvP ݧ }G}G}G}G_O% Ƒ59?V"}-:;Z}k nZcwv{/AK4n 60B\rQ6LU2uQ @.2ӥ_2+ksL?&맠}Rqǯ-llF&Ȏ~ۗ@Wػ ]O?9l' t/1-ڋ{\Z?989~߻A.>裏>裏>裏>裿]/7 N2kzfq/OU;gORg]:~;[ǘ$8ǿ,7ST=;w:?GkQAN p /r y=rg:#& ONhG&sY `d12G+u'ɤ$Y!jYm`ͤ͝djz裏>裏>裏>裏>N8?t{|+joWi`y_PA{ ShY6)(JrUyؑySy ww?濏|S @SyIZy7Ȕ=JZ$=JAQ" |T<ٌ$o8Ǡw&,-~WIsFI~/"}/Ih*ٓl<*> a\5w迗6C:wr'˷ q,>蚃EqpGۊ#tDO~$tm.=ɦuZf(O7-岗,&EZLj$IM~}_gy'u?/&ǟ%8_q[3{IZmyG}G}G}G}ߦ,cSO=-Kmߪ֤翧_[(ϋ[c5s 1(Z*>}:Ä́OgZg hy7J;o\w% xC0kZ{IVt!jۢSGɒYښ&fp+~NnӝEIb`ʒ@sR0~ q 2jKІI[_k5Lϲ)h ]U G}G}G}G}ѿ$3I 裏>裏>裏>裏߆ k`-ɫ_EݾQ*$Unc Fcm?}v\G`6APx:wt0(A J_H8}~\"e`iB:yiAwGSֶB{.5ovj{lnOJvlx~ &&lT7.A{ΊdN|hv_[(%RFR?裏>裏>裏>裏>?=ґEZ{jTv%`?o8hibxSPU?:t"Y2{Mݜ9괙ig8BX%078Y2઴N_,R5D{3oN?(e@im}),"ԯ_F9П,IYeD)h-8/0}yDmA?,s§`nj?}G}G}G}G %#_wVbAZN v-p)A"o/ޔ%U.UOA|ucs/A7%=wKƠx/-Q,c% ,K,5Я~=Q-ډ)-Ƴ<(uZfeL"kfd{j $,m6٘'9:{&c(qMrnt">=ӓdV 1/ <%H(@}G}G}G}Gk E,UAB)h^K+ JSKY!8̛_Oz9VF=mwR]lf'3[ܤ`d4ʆtd+&oZK<,m5ۂl[@o/tAvR0뗠 J㜅w*Ӥ$U&gV9_M6|ymRGW>3裏>裏>裏>裏>Ϝ?u˂6HI$j%hϧlA @۽O2QG?ڕRvFk 40=JNAz_팒 P:v2\= p>Ȋ8E]G((a]u($ pɽl,^_3GMnr0G&-ds 9mK0&f}U=Dʆ&9Mo6"::(K>}G}G}G}G'-ҝjA?s[P#tP%9򳗢$K?$H_U.쿯/NwZT:Z4+98s WdoK.h992~-diq)HvFI6DY2{;or=$pyv̓OA' \k;}0 Ʋk:uS0__2裏>裏>裏>裏>N*K'_o; $^oS!Ox18~ (t$mk?NRmܧں[|ooQiRtі4-i2W}eSCG_e}'*IucV]$-.}$eZ=q>v:&K<Tcv;3r)k?U"ϙǝMGI@ }G}G}G}G_oIyx^9m =~ ZW:nη!h|7 o=I0td@M^N1-SP<Ȇbt}\Y(g} y&vZe\⿤>>u'ȲIdSQmr~d&w}0gF+liڙWFVBW\䠝(ͣmqVو\x)s^%goҞHm,^TG}G}G}G}GW/үRu5H+ 2RWRqY{ :rXVΟNyJ#[+g;ם:;9uI$5p>2di;,x$`$.+I=,Gfp'fNvVBYGi4o.Ǵ;2ٜI^G=I羓Gsկd.QY|C{֞vUs0J6X5᏿ cA+Yqp#w)p 9z?裏>裏>裏>裏>DC=U_=ON_OA+s۫Vމ=}p:-cuTsp^| Ou8ohM0jҪ=jE7U9lث$1D-&y O?Y& 3_$clկ}G}G}G}G_vOE^mvMZ?TX+fg;7_藠Esw- fGwc{Zῗ~HfYԆ*x "_Y?oAոn(οOrs{ǟ$3}G}G}G}Gߦ AtƌՓxoI"Z)D3sEZv _{}<_㿧@?Kp{I 24݂LDJZyo?~Q*O72~9w/OMl fFAk T9%?TҙSAYtʡ^_㧠{#I)=٧"_RJ,~K0+ }G}G}G}GgG_HW/Q""AT,o۵g4?Gu\d FV~G ~߈xpdϒi6JM7d*)XT&'π,Wz~(lUZk_r5vMfߴ&L84c2Ic2X0N&)ޫA$?}C٘eö[ i6lsnق$}*:-GO_(G}G}G}G}zc#oKW_EՂ{o?kPzIڔ'_סZ25u&>Tя]g+<̒$.K.pb;/;YT'߭5>km'(.(mܿ/A*WmA<lGkm4~LQlr| ๋گ]?3I5;~ Z% U$FI8O'>裏>裏>裏>裏>蟮_7? ^I̚AA%+\"gk#gAσ 8W=EGZI嵸~O t2d3e8Ȇg-)4ϛ]_e[,AfDfd2?]0kɦ(%g$jy~|6 |B%}_-פ5ysՂ;X5֟m$43s 53pkpCZM^#{eՙ裏>裏>裏>裏>og?EoM^V_+)>t\'I(uxlA?X5w6kqa:9^uAi/AgO@:v*L}9FLF`I(/;2E_qAw D,kp,Fu*ţJY|~sYM6%h^ﻠ}i)ꗊ,}GAp}Z0NV(uο_~~8P裏>裏>裏>裏>ӏOV_i!WZS7-XQK|߲V?#5/Fc{sϿ%.k?NQ POr_} 裏>裏>裏>裏өok d@i$_szd-Κ3Ӽ29Nr/Aѝ %(-ߓxCՖ ]-H6X߷@ޒ`gYsɢKr}ݐΙi+s0OH?_&9&Rkr裏>裏>裏>K_)Пzn[+A#u*f}7&3>E2xQ]ۖs~e ֠EJMg?KdM` 3ѯA0W7"f!o5\L'jrǾl&7ڂ\7I69، pNn=A&nk[g͕*lb} Ru3:~k[5W?裏>裏>裏>裏>OKOdKǏ&U⾋Nro+$]֪x kMϻ{ y^w=kJ8}f ây zQ;V:Nf a0D 61It}v<>}:ӧN8o 5.u6TOfku{ԍ$ّ{yl @3YS}Y*rR0\<ꗕdUKZ}P;Ǐ>裏>裏>裏>裏5Л$(<_2:D_ۣ;NWO*OTGc OuGD4I:-kՙo$#*_tR 6s}l?Ȇ^ujG}G}G}G}n} ,BnAX N"(zsA\6Cgf{ wwNni]O { dUQ o6~s,$Ѿ :mU_3uiyb{*8/$:znY*ufw٪~f>흉r#IDqYqIt<7kn#2UEȁtIv<!]iFvU&y^6'ʻ%A^CWŸnsyÇ>|Ç>|~GUnߚJ!~G+ -s W\?Ty8{1Ijϸ+O]a.E?B8Bِ;-a`7;pbYOV뎕"f;vDZtuBb^}ںofqE $, . uPOSwIBlRa4IfMFG~%-7͒>r;Ç>|Ç>|_ȹO? +CAewW~`Ɋ+Ң4篸yE3@0d;= Yq֟=}yG~;ߟBv=Ih8fʇ&'qv5IKw?v|`~u7$`fDw13;3h.Kbټ޿dlBM$L5ݙyK)#acuĝ~?wt-N7 >|Ç>|Çkg+|])~ey1Ї9ћkHe4WŌ#wk]<Ān񿵩Crd>9p}\wTgZ>-8n-nv?IRuƯ!cz$Jp ݏsIf5Q'I'@겳gͮLٌWQM]uݩ^꒨} ݯ8vJdk叝_Ç>|Ç>|]Xogyf%ޯA#)$,IfNw|z=:S`P?8UJfYY)cuM+Џ4;^t4L:+yH$DGssxSt=ݤdpJ$ett=Gj3{p6IbM_7IHhɸ,}Mn C~u$P Mu%i/!'U|Ç>|Ç>z_o{/ -;[,"=?ӁyIW! HLUNgӼȡ)Aa&iN}#D] O$Q!MR4o,N$& h{1Y3ftDj=6y&bM2{|Ç>|Ç5q9oŮowO⍪V{Ŀ]E,گ]mpEGw}N;wi1~;]! i[SB[<+fGʩ!X k͜8Ot l$4:N(KPh7V0kg按G'ۢ>q$S7X.E 5>mL$%IN=)?&_ ?^MF >|Ç>||}\O{9~+hUs{zViF*8}m{?[Rr2[mqb?7gv!syʾd}?b!  ]S ÌGf4M2$P_)r=ɸ!^ ޛ"l2I )p>͉k7w($h3aރifΔi3Yd$zQ|Ç>c?q9Ȳw?IZOF7S Rt0PīnN_a&{r]F\{6!D_8;˟"t?u,&Stҕ .sosHiUœd\%; 0hZ, ӜIiyݸ.d,&C\Im9pݭ]NE7&:'1QfDPZ+ꦑ!/,|Ç>|Ç>oՌ?͎-r_,;OW*o<_ǹ~L?+V3"=ſtK^+E!Dg/[$!MfMģ*f7Nn8r'I!:&t f}nMILtvthdHG`ݤ>>nv,eUCvh){+Vf$~?OIÇ>|Ç>|&]w gy_k,fqTo.#s7__E.7z_4<ߧ K*?q! &ixJY[Kq3b>ly[y7o~3o8fdNN]UNbS-=Iwk#ۓutlKT/ r?6}@@LϓH7?:)&Iw_Mr6zÇ>|Ç>|ÿO⟩8n/wӑ|PR7__Eaq'sѮ8/ Y-Oy;~.`SyOG8B$cg[17ItJ@9Lgv_$Yo$fN2]C_z2v&3hC]!${OHoҵn$$:<#SƛO3*86i4O\Km+|'MM~ajm >|Ç>|ÇG;ik 9=d񿆉?s{?oPM2>Txoq {\=WZw>8B8B?^Yo&}%^0IJncgc sbb;\bqWi%.|}}ǼD?C"$S &%$ߟvMěihRNį&1qÇ>|Ç>|3_"OM#_fF;MGTdƁϼyQqOvevثkS&Mzߋ߫iT8i$ !D_!!#݇:Ռҹ#`ố:򧘓{HiF0څBcuf{^L.~}1\ttIfnE7'd{ @79ݟSFt?dş>|Ç>|Ç{#ɏ#_쫮}KƟ?^?zG0[NXzEGo]~5#Ч#(#hT3R&v.-ؘT&'{ofaƼwI49ݜB鴐NwofD||Ç>WI#[k o4 Lq>͈=}wc -mI[55wc͝ZB'D{M/iڨ⿏|=4?B8B4EFe^mݿ|5tiak&j$ ʯ&$;tR<&ўS/l$!>ǏtGѻg7IX9/ I()o]Ç>|Ç>|?o}=v3{ WnFw9euq{79i//U!4{1o{"\):G=^ <|p~}Zt͐0=G+~6?I43$+E^/vWA㒈, 㔢q7SdX$_D7]8_tz.|4d\QN*MYfC2\qMg"p8F+ϾÇ>|Ç>|?͡$WbA _S|V,c5>Nzls{_u_̉:~fCxYSbGtޏSƼf\! "xi>ut4{sQlNe@oL)Ln<3N"ɒtmfL8Kq{x7J5l2i ]>_,0|Ç>|OWz;qr V['E:5%SPn`$^4{۳{6BuR2I7$"[HJbʸ:4gI$"7tIF[͒s3ZkHkv(?'\di([xa_v=7tjBz e&y^>|Ç>|Çam8Ttm,"ig305Or]OE/_[ ?Kq=)[ϱq8˘.N=g'ONrmLGQGHd& K5't]&*LD.kf͛$lnMI=$HIFcMv MӥׄH&ﷅI6SM-t*~3N#&}N ?vKr 'y=B >|Ç>|Ç_g7? _ _o#o27{ o ?/{o#?uo2F0S=7BBb<]~IN׋켉ݓE^w&p+t 8%~}fPq#gzS~D7ɞ*SNI\؞2B> l(q cr:Ms»\,]nb<!;s]m'?Ç>|Ç>|ѳ!{Ht0;- /9yw׈'G[;NӻAc; zOur+B8B^Z҉]dY'ȵH^ew1:fHM1^ @!wC:'dI"Sjh$z쑙=huЧt6 4;i$tO&IDced,8/;g >|Ç>|Çky?_6L O{Zun^2ϋ\gߙe5Uj1}ٜhcu/9p(#L4$f{L†$IFL鼋_ߤS.IT|M?}e7ͮMỽCN6'Ix+H'7hRvʂ?v:爯ݙ .&Ç>|Ç>|?9-. l:=wd$_"o7򞓜Rlėts9- ~/'GQG+lN Фx{0'Xluo(q|,n/Sc6oǤnJwa"'|Ç>|?OIN_GIߴ_B<&)x3o|!c怺s ^wBB< s"9I‘LwZLhndTM6wX;gsI=|_ӥ~3c:5sAF'sr\Git:UMuq(;?}4,!KbT`zw]e >|Ç>|Çum4;{8 I?ϝM޳ٌpL'"#sxЯ9%XN;ofM,TjBQi" ׽qMS}1(=3Z{JG&I |m&RO!,fKCӌy_c9oMvfyΊ=IG&|$󥣷5G~iv/;k>|Ç>|Ç3+iF? xU-jH?ێ)gyZ\gzċv܁pLtPfHBvN!GK5$.|{o͜, Zt&*Z8f=|d3)ɒi~~ $<6NnY7I=x]d{?_>|Ç>|ÇE "a-N㏎Uo6~s5W[(LO~i7ߛ3{58o(#5%Ȧ=% Ԣh1]hqxLX+ DK<:Z]tNt =05ĕdPsR|o[1>Ӧ-F* U4tߞgS ?E3Ç>|Ç>|x _-0VQ i^WX} 5~2(ݎ+ov}m! ?.EȜMtV0|}:I"?iNkᶇfENk89M=Gg,gyU7W*?vn3&?Ç>|Ç>|qg'uszz&L/;z 'ws\~MxiN+-S|pЁ)&s"IU>ђͩ*I̊L2;Lr2C3C &)o&2J%c˵x߄?_oO>|Ç>|ÇO9̄gŌ6'Lˈ~P,~Mfv5&#VX4?'wm6@QGYq2$=Ss;- Dio&I|uq:|~6uy$tSk}פjHub"]M$Cw.g!Ux5>|Ç>|Ç1#'ſ]?O;?IU?'׹SȦ){Ǐg;-W! 'S1ЄeJ()tȭ\(8-N3$):&&]Fw[=͞ѝs[Gq:$Mu'P4%њ 'vGf9I?\actR6u 鎍I4|Ç>|Ç> ]z&zxNٌ(uR_c ,Nap AQG-Qe\K&dqOJ7;[\7/& &4-0w,SI)ƛpb™B7Ř)]1I"j ߯rOY{4$M /c?Ç>|Ç>|Çc/gg~YYOӛ#ȵ@1:<\}?O QG=o3oH7Ϲخy%|u40MFtft.)"_ Vn&{$eM)$9Wq|Ç>|ÇCkY 5Ir,IL 82qT=Y_W/6>B8BaM,!S7L'_EGb$3z&fD4ɒOG'+K\1M$I\d4IhI&$)<OO ~7IhYÇ>|Ç>|7"bW~"~I~;ٿ|Ç>|ϓrϋBߌ7;i?- g9u٤A1;;(3WfxGQG=j"M)0=(ws;ߤ^OOw-dJ|,n:~=! ݊__Mb %u{X=O=7kC|o Ç>|Ç>|ÇV{TX? ʟ?DFx:0"9U+;E ݏ! ';܆$M[c^$cIv?C*$SC CRudHbIj"w-\MM:5b4]]H}S::\R=9 ~d,?Irџ;?>|Ç>|Ç_*Yo+kUvw??ǎYwێY/ϦBBE*hIbA9I:tCy;ǿ' ռfdGf_Λs]-:6fwN܋SeN2倯S ܾ$lp/7Рw_Og>|Ç>|Çgǿ̉#qIjd3_ez7__]/CF9I#!D!Be3gq|ΐ}+I>؋wIR$'Z-#򂟅e_P7IMy7#5~OIR$CYA.fS"e4ek2Qt‡>|Ç>|3W=~?U:gk;;{n2s?NlG;B8B腚ˬȾU7{WzHF[Wͳ?οH$4oaN|Ç>|Çge*U+\ME&rk]c+9jVdfSphHrIvL鞛2:Β4%$Iv$9;ɳڹulz Kҁ|=Q>ZM2C2{I">.z|Ç>|?|3 )GϲYQGok'Н[ȝi_侌BBR,$C:4I[oHSs1G)!ي|}M15?=~6&&s{³t * 7Hwro8)_OiCÇ>|Ç>|Ὴ?cz=~i?FE|Ç>| O_]+\&^㧅k:?{0?s1kB3BBXOr9 I<>q$zwyTsz|5S~ [|={nd|6# R̿)Y$ݦodd*x_w]i?|Ç>|Ç>,'w?J/~deۻ]Qg$uevp3'u$MOqCU/&qV0#IR_ 6cu4'A1GaIvEw^.q"~Ç>|Ç>|VNxwDs1={^g S$rrz/~wx ~^;Mx! O֐$]s:en7-Mzx~[$w+~nyg .9tcW`<ī׿{aU]DԶ^MZW$]1IÇ>|Ç>|&ѷ/^;sG[ uObt2wv9YdIJ.,Ģ=9r HaK݌5t5GS _7d׵gI"_wLIcҤQ<+~~׳7ɉwqK/'?>|Ç>|| #<_ſ;Sߋu/Mfy6{]Q! /R!ȋ1I2F.dbrZsiG1׾h#;#1űGٙ^.I/;?q:J0>|Ç>|ÇvTQ~'?_Z!ʏtNˠp3g|/THӻH1Lof$Kn]E Ŋ_-uVnNz ?c$g7Ç>|Ç>| |Ç>|Ç#oY锓#m⿿&u7I9}=(/ D!u5Hs:-$񱋮bMvT3.;IMNk?]?u$z7 '?&ZO~ݏzó3׿Y~i:I5!Ç>|Ç>|??WG*+#s??s?vE!D! ԥñ]0c^<4Su$nB3낯Iz5of7t(ΝC{yw?|Ç>|Ç>|jk ?/!{W*Y5?CW! oͩ:4  ]t)|/Kk$wd'Kd/Ko0GV1_@:Iaב5VĿw$e'~7>|Ç>|Ç>W} 3Uc{w~Wo"\8N$?WS3p,OQB2:$S.BdaH;?&=MS?#~߿.uW~ďվ⟹?|Ç>|Ç>_o#ܻ<{Ӄ\#(#y|Ç>|Ç_忩?^={?&yl6gop7W_$41AHuH=t$M>C %I$t6LS/71ٿ'⿙?%rM6i|Ç>|Çw_L{kG?o'cBBPS{|Ç>|Çw_ͅw%+UGfg⏯u&xEu/_ů*9Tu3! _R c%$I&FEcWe5zccBr\oe#7y-"Xi5!lղßOÇ>|Ç>|Ç*Aq4_~A+{$?:{9:?W3t`7BB?X#t= l q7p7'裘uR-&s"38(Bq,Ibדt%vMX7{ЫÇ>|Ç>| ~U?Gۙ]gGϦJZE"Eݲ蘛2nFn.)OQ*mrk*iwy&s>|Ç>|Çw_Ɠ|=E_/7B8BuDR;ߥQT.)]o ~7y?$q>q?sA_3If:{;LzÇ>|Ç>|Mӫ{I ?3! _vĤ8~mLEu8Orſ~~{ij߻_ݱq4ԙL؇>|Ç>|Çu&g_?^GoS}vp//.$Eb3v a&OǮ*!]Id9~?9|?aJ/O\Ç>|Ç>|&_gWƿ??#pJGh^;[⸢pħ˦05]Dg /"'Ƌ->"mFfǶw4QWuRIB&|Ç>|Ç>|_v܋YƟEgߏB8B_w;\d yL$%#0ŒIk lw9GjIS3~6IsY*?ÿ;|FSƩ?Ç>|Ç>|Ç?ۍ ~s>?_u^3WSv#(#п%y&! J z7z&0IP/3PMKsg~I悿wÇ>|Ç>|Ç+-ɾ|_ .X.7'KX$c/&Q{oأ!IcwhF.ݕÇ>|Ç>|߈_b0^qsxg!GgzJC"IMLPI!IhLyNW9}O t0;i8CwLk,?QC1Qsws4!>|Ç>|Ç^|!D!"&Qp^!J|lh%Y>I<7dx=6w?R>|Ç>|Ç1?(_b"o5\zn!Y)TX*v-ΐP% nXU]dQ|?I[YOfNb'Il?BÇ>|Ç>| 6_LB8Bj!陒ĤK^&f.)ٌMIUkvO#IblF#%ÏPʲO'If!;v\#<,߾Ç>|Ç>|_?jG9o2-BQG}t!S,Izr~~*>ÿ'qa/aLQ;qK(5Y$ݧCF|Ç>|_SWW3O_/BB,O6&PEIױ9I^抟wI8gH8o=>.]gI~9W>|Ç>|Çkc?;.E|,7B8BJB5QJ 0hHUX$I4ITdnŏIZ~L4E/xn g>|Ç>|Ç?7>܋gW!D!-{Gwt3GuW=!n.H?Inȯ¿'o;!ŏϯ-Մ՟o>|Ç>|Çw?㿥Qc>}MFQG}"x U`R,r W[4y={ׄWu5"{?=I:@㞦. =!~k‡>|Ç>|ÇS~7;zBB? qL8eyϒXkwd2]#$sռÇ>|Ç>|ÇHA_MBBRLԮ.$kI&u#:I݉M#~V~_o5{x >|Ç>|Ç>_r:~g} pЏP(J! &Kǡ&V1]˦8G3$],_ ]ʯ ~LbkHJً>|Ç>|Ç|(z#(#~tx⾙lƒ:U3tƄWΛ,$_uÿ'q<-\tz‡>|Ç>|ÇCNT<ç!a vI$SJRn';.54m ?&MUÇ>|Ç>|zzzQ-'EopZ T02hHaZYb_?zs6fcTkį⏧n~1f3|Ç>|Ç>|O_g{T>op:$ oLfcwsÜtt7C m|;ؤaD{x4Ç>|Ç>|?<~S!D!(4=$[EYna.UI: Ç>|Ç>|Ç7v5B請8B;*&YSA)$ {)I]6]Ӂ>|Ç>|Ç>W!(#_*ϐ͐!S%D>|Ç>|Ç>| ,8!D!pA|F]ͨ,#skHJ$>|Ç>|Ç>|?3GQGROј%&~)ɳ|Ç>|Ç#S8BBŧI&sn._Ȇ>|Ç>|Ç>#~s!D!п4®wr~׫;'w M>|Ç>|Ç' |!B!u8:I":Bg l"9|/22>|Ç>|Ç>|_Mq!(#З/VC絆tji2bϒEÇ>|Ç>|aNc?B$ !}tNsDŽ{.Ç>|Ç>||BB!B!B!BpB!B!B!B?BB!B!B!BQG!B!B!B!#D!B!B!B!ЏpB!B!B!B?BB!B!B!BQG!B!B!B!#D!B!B!B!Џ)dqqIENDB`glow-2.0.0/github.go000066400000000000000000000022621466215610400143010ustar00rootroot00000000000000package main import ( "encoding/json" "errors" "fmt" "io" "net/http" "net/url" "strings" ) // findGitHubREADME tries to find the correct README filename in a repository using GitHub API. func findGitHubREADME(u *url.URL) (*source, error) { owner, repo, ok := strings.Cut(strings.TrimPrefix(u.Path, "/"), "/") if !ok { return nil, fmt.Errorf("invalid url: %s", u.String()) } type readme struct { DownloadURL string `json:"download_url"` } apiURL := fmt.Sprintf("https://api.%s/repos/%s/%s/readme", u.Hostname(), owner, repo) // nolint:bodyclose // it is closed on the caller res, err := http.Get(apiURL) // nolint: gosec if err != nil { return nil, err } body, err := io.ReadAll(res.Body) if err != nil { return nil, err } var result readme if err := json.Unmarshal(body, &result); err != nil { return nil, err } if res.StatusCode == http.StatusOK { // nolint:bodyclose // it is closed on the caller resp, err := http.Get(result.DownloadURL) if err != nil { return nil, err } if resp.StatusCode == http.StatusOK { return &source{resp.Body, result.DownloadURL}, nil } } return nil, errors.New("can't find README in GitHub repository") } glow-2.0.0/gitlab.go000066400000000000000000000024531466215610400142630ustar00rootroot00000000000000package main import ( "encoding/json" "errors" "fmt" "io" "net/http" "net/url" "strings" ) // findGitLabREADME tries to find the correct README filename in a repository using GitLab API. func findGitLabREADME(u *url.URL) (*source, error) { owner, repo, ok := strings.Cut(strings.TrimPrefix(u.Path, "/"), "/") if !ok { return nil, fmt.Errorf("invalid url: %s", u.String()) } projectPath := url.QueryEscape(owner + "/" + repo) type readme struct { ReadmeURL string `json:"readme_url"` } apiURL := fmt.Sprintf("https://%s/api/v4/projects/%s", u.Hostname(), projectPath) // nolint:bodyclose // it is closed on the caller res, err := http.Get(apiURL) // nolint: gosec if err != nil { return nil, err } body, err := io.ReadAll(res.Body) if err != nil { return nil, err } var result readme if err := json.Unmarshal(body, &result); err != nil { return nil, err } readmeRawURL := strings.Replace(result.ReadmeURL, "blob", "raw", -1) if res.StatusCode == http.StatusOK { // nolint:bodyclose // it is closed on the caller resp, err := http.Get(readmeRawURL) // nolint: gosec if err != nil { return nil, err } if resp.StatusCode == http.StatusOK { return &source{resp.Body, readmeRawURL}, nil } } return nil, errors.New("can't find README in GitLab repository") } glow-2.0.0/glow_test.go000066400000000000000000000021031466215610400150200ustar00rootroot00000000000000package main import ( "bytes" "testing" ) func TestGlowSources(t *testing.T) { tt := []string{ ".", "README.md", "github.com/charmbracelet/glow", "github://charmbracelet/glow", "https://github.com/charmbracelet/glow", } for _, v := range tt { t.Run(v, func(t *testing.T) { buf := &bytes.Buffer{} err := executeArg(rootCmd, v, buf) if err != nil { t.Errorf("Error during execution (args: %s): %v", v, err) } if buf.Len() == 0 { t.Errorf("Output buffer should not be empty (args: %s)", v) } }) } } func TestGlowFlags(t *testing.T) { tt := []struct { args []string check func() bool }{ { args: []string{"-p"}, check: func() bool { return pager }, }, { args: []string{"-s", "light"}, check: func() bool { return style == "light" }, }, { args: []string{"-w", "40"}, check: func() bool { return width == 40 }, }, } for _, v := range tt { err := rootCmd.ParseFlags(v.args) if err != nil { t.Fatal(err) } if !v.check() { t.Errorf("Parsing flag failed: %s", v.args) } } } glow-2.0.0/go.mod000066400000000000000000000062471466215610400136050ustar00rootroot00000000000000module github.com/charmbracelet/glow/v2 go 1.21.4 require ( github.com/atotto/clipboard v0.1.4 github.com/caarlos0/env/v11 v11.0.1 github.com/charmbracelet/bubbles v0.18.0 github.com/charmbracelet/bubbletea v0.26.7-0.20240711210516-ea13ffb9a18d github.com/charmbracelet/glamour v0.8.0 github.com/charmbracelet/lipgloss v0.12.2-0.20240712161825-87dd58def709 github.com/charmbracelet/log v0.4.0 github.com/charmbracelet/x/editor v0.0.0-20240625164403-2627ec16405d github.com/dustin/go-humanize v1.0.1 github.com/mattn/go-runewidth v0.0.15 github.com/mitchellh/go-homedir v1.1.0 github.com/muesli/gitcha v0.3.0 github.com/muesli/go-app-paths v0.2.2 github.com/muesli/mango-cobra v1.2.0 github.com/muesli/reflow v0.3.0 github.com/muesli/roff v0.1.0 github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a github.com/sahilm/fuzzy v0.1.1 github.com/spf13/cobra v1.7.0 github.com/spf13/viper v1.15.0 golang.org/x/sys v0.22.0 golang.org/x/term v0.22.0 golang.org/x/text v0.16.0 ) require ( github.com/alecthomas/chroma/v2 v2.14.0 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/charmbracelet/x/ansi v0.1.4 // indirect github.com/charmbracelet/x/input v0.1.2 // indirect github.com/charmbracelet/x/term v0.1.1 // indirect github.com/charmbracelet/x/windows v0.1.2 // indirect github.com/dlclark/regexp2 v1.11.0 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/gorilla/css v1.0.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/microcosm-cc/bluemonday v1.0.27 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/mango v0.1.0 // indirect github.com/muesli/mango-pflag v0.1.0 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 // indirect github.com/spf13/afero v1.9.3 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/yuin/goldmark v1.7.4 // indirect github.com/yuin/goldmark-emoji v1.0.3 // indirect golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect golang.org/x/net v0.27.0 // indirect golang.org/x/sync v0.7.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) glow-2.0.0/go.sum000066400000000000000000001640201466215610400136240ustar00rootroot00000000000000cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8= github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/caarlos0/env/v11 v11.0.1 h1:A8dDt9Ub9ybqRSUF3fQc/TA/gTam2bKT4Pit+cwrsPs= github.com/caarlos0/env/v11 v11.0.1/go.mod h1:2RC3HQu8BQqtEK3V4iHPxj0jOdWdbPpWJ6pOueeU1xM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0= github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw= github.com/charmbracelet/bubbletea v0.26.7-0.20240711210516-ea13ffb9a18d h1:IHcf2pu0D9dau/Z1Jff53mke0Yc62lf1sVRl0vWsAew= github.com/charmbracelet/bubbletea v0.26.7-0.20240711210516-ea13ffb9a18d/go.mod h1:MT/hMxp8fkrH8YV7AZ0KM7SeveivHPy0lUaZL0sBOxU= github.com/charmbracelet/glamour v0.8.0 h1:tPrjL3aRcQbn++7t18wOpgLyl8wrOHUEDS7IZ68QtZs= github.com/charmbracelet/glamour v0.8.0/go.mod h1:ViRgmKkf3u5S7uakt2czJ272WSg2ZenlYEZXT2x7Bjw= github.com/charmbracelet/lipgloss v0.12.2-0.20240712161825-87dd58def709 h1:xKyYI89iCZPBA4QOBN1WQ8Fqt+iH09K3Ywx0qOKVPUo= github.com/charmbracelet/lipgloss v0.12.2-0.20240712161825-87dd58def709/go.mod h1:lVwxBOJ0KkZflL9y+DObgGY8V90IZUJ1e6jjZ+PBcnE= github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM= github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM= github.com/charmbracelet/x/ansi v0.1.4 h1:IEU3D6+dWwPSgZ6HBH+v6oUuZ/nVawMiWj5831KfiLM= github.com/charmbracelet/x/ansi v0.1.4/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= github.com/charmbracelet/x/editor v0.0.0-20240625164403-2627ec16405d h1:QCbdJx9CBznXPO5Wk/5FWXft/mSPzeWX5HMdIH9bNAA= github.com/charmbracelet/x/editor v0.0.0-20240625164403-2627ec16405d/go.mod h1:oivrEbcP/AYt/Hpvk5pwDXXrQ933gQS6UzL6fxqAGSA= github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4 h1:6KzMkQeAF56rggw2NZu1L+TH7j9+DM1/2Kmh7KUxg1I= github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= github.com/charmbracelet/x/input v0.1.2 h1:QJAZr33eOhDowkkEQ24rsJy4Llxlm+fRDf/cQrmqJa0= github.com/charmbracelet/x/input v0.1.2/go.mod h1:LGBim0maUY4Pitjn/4fHnuXb4KirU3DODsyuHuXdOyA= github.com/charmbracelet/x/term v0.1.1 h1:3cosVAiPOig+EV4X9U+3LDgtwwAoEzJjNdwbXDjF6yI= github.com/charmbracelet/x/term v0.1.1/go.mod h1:wB1fHt5ECsu3mXYusyzcngVWWlu1KKUmmLhfgr/Flxw= github.com/charmbracelet/x/windows v0.1.2 h1:Iumiwq2G+BRmgoayww/qfcvof7W/3uLoelhxojXlRWg= github.com/charmbracelet/x/windows v0.1.2/go.mod h1:GLEO/l+lizvFDBPLIOk+49gdX49L9YWMB5t+DZd0jkQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= github.com/muesli/gitcha v0.3.0 h1:+PJkVKrDXVB0VgRn/yVx2CqSVSDGMSepzvohsCrPYtQ= github.com/muesli/gitcha v0.3.0/go.mod h1:vX3jFL+XcEUq1uY74RCjLSZfAV+ZuvLg70/NGPdXn84= github.com/muesli/go-app-paths v0.2.2 h1:NqG4EEZwNIhBq/pREgfBmgDmt3h1Smr1MjZiXbpZUnI= github.com/muesli/go-app-paths v0.2.2/go.mod h1:SxS3Umca63pcFcLtbjVb+J0oD7cl4ixQWoBKhGEtEho= github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI= github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4= github.com/muesli/mango-cobra v1.2.0 h1:DQvjzAM0PMZr85Iv9LIMaYISpTOliMEg+uMFtNbYvWg= github.com/muesli/mango-cobra v1.2.0/go.mod h1:vMJL54QytZAJhCT13LPVDfkvCUJ5/4jNUKF/8NC2UjA= github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe7Sg= github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8= github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig= github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg= github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 h1:G04eS0JkAIVZfaJLjla9dNxkJCPiKIGZlw9AfOhzOD0= github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA= github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark-emoji v1.0.3 h1:aLRkLHOuBR2czCY4R8olwMjID+tENfhyFDMCRhbIQY4= github.com/yuin/goldmark-emoji v1.0.3/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= glow-2.0.0/log.go000066400000000000000000000014711466215610400136010ustar00rootroot00000000000000package main import ( "io" "os" "path/filepath" "github.com/charmbracelet/log" gap "github.com/muesli/go-app-paths" ) func getLogFilePath() (string, error) { dir, err := gap.NewScope(gap.User, "glow").CacheDir() if err != nil { return "", err } return filepath.Join(dir, "glow.log"), nil } func setupLog() (func() error, error) { log.SetOutput(io.Discard) // Log to file, if set logFile, err := getLogFilePath() if err != nil { return nil, err } if err := os.MkdirAll(filepath.Dir(logFile), 0o755); err != nil { // log disabled return func() error { return nil }, nil } f, err := os.OpenFile(logFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0o644) if err != nil { // log disabled return func() error { return nil }, nil } log.SetOutput(f) log.SetLevel(log.DebugLevel) return f.Close, nil } glow-2.0.0/main.go000066400000000000000000000250471466215610400137510ustar00rootroot00000000000000package main import ( "errors" "fmt" "io" "io/fs" "net/http" "net/url" "os" "os/exec" "path/filepath" "strings" "github.com/caarlos0/env/v11" "github.com/charmbracelet/glamour" "github.com/charmbracelet/glamour/styles" "github.com/charmbracelet/glow/v2/ui" "github.com/charmbracelet/glow/v2/utils" "github.com/charmbracelet/lipgloss" "github.com/charmbracelet/log" gap "github.com/muesli/go-app-paths" "github.com/spf13/cobra" "github.com/spf13/viper" "golang.org/x/term" ) var ( // Version as provided by goreleaser. Version = "" // CommitSHA as provided by goreleaser. CommitSHA = "" readmeNames = []string{"README.md", "README", "Readme.md", "Readme", "readme.md", "readme"} configFile string pager bool style string width uint showAllFiles bool showLineNumbers bool preserveNewLines bool mouse bool rootCmd = &cobra.Command{ Use: "glow [SOURCE|DIR]", Short: "Render markdown on the CLI, with pizzazz!", Long: paragraph( fmt.Sprintf("\nRender markdown on the CLI, %s!", keyword("with pizzazz")), ), SilenceErrors: false, SilenceUsage: true, TraverseChildren: true, Args: cobra.MaximumNArgs(1), ValidArgsFunction: func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { return nil, cobra.ShellCompDirectiveDefault }, PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { return validateOptions(cmd) }, RunE: execute, } ) // source provides a readable markdown source. type source struct { reader io.ReadCloser URL string } // sourceFromArg parses an argument and creates a readable source for it. func sourceFromArg(arg string) (*source, error) { // from stdin if arg == "-" { return &source{reader: os.Stdin}, nil } // a GitHub or GitLab URL (even without the protocol): src, err := readmeURL(arg) if src != nil && err == nil { // if there's an error, try next methods... return src, nil } // HTTP(S) URLs: if u, err := url.ParseRequestURI(arg); err == nil && strings.Contains(arg, "://") { if u.Scheme != "" { if u.Scheme != "http" && u.Scheme != "https" { return nil, fmt.Errorf("%s is not a supported protocol", u.Scheme) } // consumer of the source is responsible for closing the ReadCloser. resp, err := http.Get(u.String()) // nolint:bodyclose if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("HTTP status %d", resp.StatusCode) } return &source{resp.Body, u.String()}, nil } } // a directory: if len(arg) == 0 { // use the current working dir if no argument was supplied arg = "." } st, err := os.Stat(arg) if err == nil && st.IsDir() { var src *source _ = filepath.Walk(arg, func(path string, _ os.FileInfo, err error) error { if err != nil { return err } for _, v := range readmeNames { if strings.EqualFold(filepath.Base(path), v) { r, err := os.Open(path) if err != nil { continue } u, _ := filepath.Abs(path) src = &source{r, u} // abort filepath.Walk return errors.New("source found") } } return nil }) if src != nil { return src, nil } return nil, errors.New("missing markdown source") } // a file: r, err := os.Open(arg) u, _ := filepath.Abs(arg) return &source{r, u}, err } func validateOptions(cmd *cobra.Command) error { // grab config values from Viper width = viper.GetUint("width") mouse = viper.GetBool("mouse") pager = viper.GetBool("pager") preserveNewLines = viper.GetBool("preserveNewLines") // validate the glamour style style = viper.GetString("style") if style != styles.AutoStyle && styles.DefaultStyles[style] == nil { style = utils.ExpandPath(style) if _, err := os.Stat(style); errors.Is(err, fs.ErrNotExist) { return fmt.Errorf("Specified style does not exist: %s", style) } else if err != nil { return err } } isTerminal := term.IsTerminal(int(os.Stdout.Fd())) // We want to use a special no-TTY style, when stdout is not a terminal // and there was no specific style passed by arg if !isTerminal && !cmd.Flags().Changed("style") { style = "notty" } // Detect terminal width if !cmd.Flags().Changed("width") { if isTerminal && width == 0 { w, _, err := term.GetSize(int(os.Stdout.Fd())) if err == nil { width = uint(w) } if width > 120 { width = 120 } } if width == 0 { width = 80 } } return nil } func stdinIsPipe() (bool, error) { stat, err := os.Stdin.Stat() if err != nil { return false, err } if stat.Mode()&os.ModeCharDevice == 0 || stat.Size() > 0 { return true, nil } return false, nil } func execute(cmd *cobra.Command, args []string) error { // if stdin is a pipe then use stdin for input. note that you can also // explicitly use a - to read from stdin. if yes, err := stdinIsPipe(); err != nil { return err } else if yes { src := &source{reader: os.Stdin} defer src.reader.Close() //nolint:errcheck return executeCLI(cmd, src, os.Stdout) } switch len(args) { // TUI running on cwd case 0: return runTUI("") // TUI with possible dir argument case 1: // Validate that the argument is a directory. If it's not treat it as // an argument to the non-TUI version of Glow (via fallthrough). info, err := os.Stat(args[0]) if err == nil && info.IsDir() { p, err := filepath.Abs(args[0]) if err == nil { return runTUI(p) } } fallthrough // CLI default: for _, arg := range args { if err := executeArg(cmd, arg, os.Stdout); err != nil { return err } } } return nil } func executeArg(cmd *cobra.Command, arg string, w io.Writer) error { // create an io.Reader from the markdown source in cli-args src, err := sourceFromArg(arg) if err != nil { return err } defer src.reader.Close() //nolint:errcheck return executeCLI(cmd, src, w) } func executeCLI(cmd *cobra.Command, src *source, w io.Writer) error { b, err := io.ReadAll(src.reader) if err != nil { return err } b = utils.RemoveFrontmatter(b) // render var baseURL string u, err := url.ParseRequestURI(src.URL) if err == nil { u.Path = filepath.Dir(u.Path) baseURL = u.String() + "/" } isCode := !utils.IsMarkdownFile(src.URL) // initialize glamour r, err := glamour.NewTermRenderer( glamour.WithColorProfile(lipgloss.ColorProfile()), utils.GlamourStyle(style, isCode), glamour.WithWordWrap(int(width)), glamour.WithBaseURL(baseURL), glamour.WithPreservedNewLines(), ) if err != nil { return err } s := string(b) ext := filepath.Ext(src.URL) if isCode { s = utils.WrapCodeBlock(string(b), ext) } out, err := r.Render(s) if err != nil { return err } // display if pager || cmd.Flags().Changed("pager") { pagerCmd := os.Getenv("PAGER") if pagerCmd == "" { pagerCmd = "less -r" } pa := strings.Split(pagerCmd, " ") c := exec.Command(pa[0], pa[1:]...) // nolint:gosec c.Stdin = strings.NewReader(out) c.Stdout = os.Stdout return c.Run() } _, err = fmt.Fprint(w, out) return err } func runTUI(workingDirectory string) error { // Read environment to get debugging stuff cfg, err := env.ParseAs[ui.Config]() if err != nil { return fmt.Errorf("error parsing config: %v", err) } cfg.WorkingDirectory = workingDirectory cfg.ShowAllFiles = showAllFiles cfg.ShowLineNumbers = showLineNumbers cfg.GlamourMaxWidth = width cfg.GlamourStyle = style cfg.EnableMouse = mouse cfg.PreserveNewLines = preserveNewLines // Run Bubble Tea program if _, err := ui.NewProgram(cfg).Run(); err != nil { return err } return nil } func main() { closer, err := setupLog() if err != nil { fmt.Println(err) os.Exit(1) } if err := rootCmd.Execute(); err != nil { _ = closer() os.Exit(1) } _ = closer() } func init() { tryLoadConfigFromDefaultPlaces() if len(CommitSHA) >= 7 { vt := rootCmd.VersionTemplate() rootCmd.SetVersionTemplate(vt[:len(vt)-1] + " (" + CommitSHA[0:7] + ")\n") } if Version == "" { Version = "unknown (built from source)" } rootCmd.Version = Version rootCmd.InitDefaultCompletionCmd() // "Glow Classic" cli arguments rootCmd.PersistentFlags().StringVar(&configFile, "config", "", fmt.Sprintf("config file (default %s)", viper.GetViper().ConfigFileUsed())) rootCmd.Flags().BoolVarP(&pager, "pager", "p", false, "display with pager") rootCmd.Flags().StringVarP(&style, "style", "s", styles.AutoStyle, "style name or JSON path") rootCmd.Flags().UintVarP(&width, "width", "w", 0, "word-wrap at width (set to 0 to disable)") rootCmd.Flags().BoolVarP(&showAllFiles, "all", "a", false, "show system files and directories (TUI-mode only)") rootCmd.Flags().BoolVarP(&showLineNumbers, "line-numbers", "l", false, "show line numbers (TUI-mode only)") rootCmd.Flags().BoolVarP(&preserveNewLines, "preserve-new-lines", "n", false, "preserve newlines in the output") rootCmd.Flags().BoolVarP(&mouse, "mouse", "m", false, "enable mouse wheel (TUI-mode only)") _ = rootCmd.Flags().MarkHidden("mouse") // Config bindings _ = viper.BindPFlag("style", rootCmd.Flags().Lookup("style")) _ = viper.BindPFlag("width", rootCmd.Flags().Lookup("width")) _ = viper.BindPFlag("debug", rootCmd.Flags().Lookup("debug")) _ = viper.BindPFlag("mouse", rootCmd.Flags().Lookup("mouse")) _ = viper.BindPFlag("preserveNewLines", rootCmd.Flags().Lookup("preserve-new-lines")) _ = viper.BindPFlag("showLineNumbers", rootCmd.Flags().Lookup("line-numbers")) _ = viper.BindPFlag("showAllFiles", rootCmd.Flags().Lookup("all")) viper.SetDefault("style", styles.AutoStyle) viper.SetDefault("width", 0) rootCmd.AddCommand(configCmd, manCmd) } func tryLoadConfigFromDefaultPlaces() { scope := gap.NewScope(gap.User, "glow") dirs, err := scope.ConfigDirs() if err != nil { fmt.Println("Could not load find configuration directory.") os.Exit(1) } if c := os.Getenv("XDG_CONFIG_HOME"); c != "" { dirs = append([]string{filepath.Join(c, "glow")}, dirs...) } if c := os.Getenv("GLOW_CONFIG_HOME"); c != "" { dirs = append([]string{c}, dirs...) } for _, v := range dirs { viper.AddConfigPath(v) } viper.SetConfigName("glow") viper.SetConfigType("yaml") viper.SetEnvPrefix("glow") viper.AutomaticEnv() if err := viper.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); !ok { log.Warn("Could not parse configuration file", "err", err) } } if used := viper.ConfigFileUsed(); used != "" { log.Debug("Using configuration file", "path", viper.ConfigFileUsed()) return } if viper.ConfigFileUsed() == "" { configFile = filepath.Join(dirs[0], "glow.yml") } if err := ensureConfigFile(); err != nil { log.Error("Could not create default configuration", "error", err) } } glow-2.0.0/man_cmd.go000066400000000000000000000011071466215610400144120ustar00rootroot00000000000000package main import ( "fmt" "os" mcobra "github.com/muesli/mango-cobra" "github.com/muesli/roff" "github.com/spf13/cobra" ) var manCmd = &cobra.Command{ Use: "man", Short: "Generates manpages", SilenceUsage: true, DisableFlagsInUseLine: true, Hidden: true, Args: cobra.NoArgs, RunE: func(*cobra.Command, []string) error { manPage, err := mcobra.NewManPage(1, rootCmd) if err != nil { return err } _, err = fmt.Fprint(os.Stdout, manPage.Build(roff.NewDocument())) return err }, } glow-2.0.0/style.go000066400000000000000000000003471466215610400141610ustar00rootroot00000000000000package main import "github.com/charmbracelet/lipgloss" var ( keyword = lipgloss.NewStyle(). Foreground(lipgloss.Color("#04B575")). Render paragraph = lipgloss.NewStyle(). Width(78). Padding(0, 0, 0, 2). Render ) glow-2.0.0/ui/000077500000000000000000000000001466215610400131035ustar00rootroot00000000000000glow-2.0.0/ui/config.go000066400000000000000000000010541466215610400146770ustar00rootroot00000000000000package ui // Config contains TUI-specific configuration. type Config struct { ShowAllFiles bool ShowLineNumbers bool Gopath string `env:"GOPATH"` HomeDir string `env:"HOME"` GlamourMaxWidth uint GlamourStyle string EnableMouse bool PreserveNewLines bool // Which directory should we start from? WorkingDirectory string // For debugging the UI HighPerformancePager bool `env:"GLOW_HIGH_PERFORMANCE_PAGER" envDefault:"true"` GlamourEnabled bool `env:"GLOW_ENABLE_GLAMOUR" envDefault:"true"` } glow-2.0.0/ui/editor.go000066400000000000000000000006631466215610400147250ustar00rootroot00000000000000package ui import ( tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/x/editor" ) type editorFinishedMsg struct{ err error } func openEditor(path string, lineno int) tea.Cmd { cb := func(err error) tea.Msg { return editorFinishedMsg{err} } cmd, err := editor.Cmd("Glow", path, editor.OpenAtLine(uint(lineno))) if err != nil { return func() tea.Msg { return cb(err) } } return tea.ExecProcess(cmd, cb) } glow-2.0.0/ui/ignore_darwin.go000066400000000000000000000003421466215610400162600ustar00rootroot00000000000000//go:build darwin // +build darwin package ui import "path/filepath" func ignorePatterns(m commonModel) []string { return []string{ filepath.Join(m.cfg.HomeDir, "Library"), m.cfg.Gopath, "node_modules", ".*", } } glow-2.0.0/ui/ignore_general.go000066400000000000000000000002411466215610400164070ustar00rootroot00000000000000//go:build !darwin // +build !darwin package ui func ignorePatterns(m commonModel) []string { return []string{ m.cfg.Gopath, "node_modules", ".*", } } glow-2.0.0/ui/keys.go000066400000000000000000000000741466215610400144060ustar00rootroot00000000000000package ui const ( keyEnter = "enter" keyEsc = "esc" ) glow-2.0.0/ui/markdown.go000066400000000000000000000053771466215610400152700ustar00rootroot00000000000000package ui import ( "math" "time" "unicode" "github.com/charmbracelet/log" "github.com/dustin/go-humanize" "golang.org/x/text/runes" "golang.org/x/text/transform" "golang.org/x/text/unicode/norm" ) type markdown struct { // Full path of a local markdown file. Only relevant to local documents and // those that have been stashed in this session. localPath string // Value we filter against. This exists so that we can maintain positions // of filtered items if notes are edited while a filter is active. This // field is ephemeral, and should only be referenced during filtering. filterValue string Body string Note string Modtime time.Time } // Generate the value we're doing to filter against. func (m *markdown) buildFilterValue() { note, err := normalize(m.Note) if err != nil { log.Error("error normalizing", "note", m.Note, "error", err) m.filterValue = m.Note } m.filterValue = note } func (m markdown) relativeTime() string { return relativeTime(m.Modtime) } // Normalize text to aid in the filtering process. In particular, we remove // diacritics, "ö" becomes "o". Note that Mn is the unicode key for nonspacing // marks. func normalize(in string) (string, error) { t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) out, _, err := transform.String(t, in) return out, err } // Return the time in a human-readable format relative to the current time. func relativeTime(then time.Time) string { now := time.Now() if ago := now.Sub(then); ago < time.Minute { return "just now" } else if ago < humanize.Week { return humanize.CustomRelTime(then, now, "ago", "from now", magnitudes) } return then.Format("02 Jan 2006 15:04 MST") } // Magnitudes for relative time. var magnitudes = []humanize.RelTimeMagnitude{ {D: time.Second, Format: "now", DivBy: time.Second}, {D: 2 * time.Second, Format: "1 second %s", DivBy: 1}, {D: time.Minute, Format: "%d seconds %s", DivBy: time.Second}, {D: 2 * time.Minute, Format: "1 minute %s", DivBy: 1}, {D: time.Hour, Format: "%d minutes %s", DivBy: time.Minute}, {D: 2 * time.Hour, Format: "1 hour %s", DivBy: 1}, {D: humanize.Day, Format: "%d hours %s", DivBy: time.Hour}, {D: 2 * humanize.Day, Format: "1 day %s", DivBy: 1}, {D: humanize.Week, Format: "%d days %s", DivBy: humanize.Day}, {D: 2 * humanize.Week, Format: "1 week %s", DivBy: 1}, {D: humanize.Month, Format: "%d weeks %s", DivBy: humanize.Week}, {D: 2 * humanize.Month, Format: "1 month %s", DivBy: 1}, {D: humanize.Year, Format: "%d months %s", DivBy: humanize.Month}, {D: 18 * humanize.Month, Format: "1 year %s", DivBy: 1}, {D: 2 * humanize.Year, Format: "2 years %s", DivBy: 1}, {D: humanize.LongTime, Format: "%d years %s", DivBy: humanize.Year}, {D: math.MaxInt64, Format: "a long while %s", DivBy: 1}, } glow-2.0.0/ui/pager.go000066400000000000000000000250611466215610400145340ustar00rootroot00000000000000package ui import ( "fmt" "math" "path/filepath" "strings" "time" "github.com/atotto/clipboard" "github.com/charmbracelet/bubbles/viewport" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/glamour" "github.com/charmbracelet/glow/v2/utils" "github.com/charmbracelet/lipgloss" "github.com/charmbracelet/log" runewidth "github.com/mattn/go-runewidth" "github.com/muesli/reflow/ansi" "github.com/muesli/reflow/truncate" "github.com/muesli/termenv" ) const ( statusBarHeight = 1 lineNumberWidth = 4 ) var ( pagerHelpHeight int mintGreen = lipgloss.AdaptiveColor{Light: "#89F0CB", Dark: "#89F0CB"} darkGreen = lipgloss.AdaptiveColor{Light: "#1C8760", Dark: "#1C8760"} lineNumberFg = lipgloss.AdaptiveColor{Light: "#656565", Dark: "#7D7D7D"} statusBarNoteFg = lipgloss.AdaptiveColor{Light: "#656565", Dark: "#7D7D7D"} statusBarBg = lipgloss.AdaptiveColor{Light: "#E6E6E6", Dark: "#242424"} statusBarScrollPosStyle = lipgloss.NewStyle(). Foreground(lipgloss.AdaptiveColor{Light: "#949494", Dark: "#5A5A5A"}). Background(statusBarBg). Render statusBarNoteStyle = lipgloss.NewStyle(). Foreground(statusBarNoteFg). Background(statusBarBg). Render statusBarHelpStyle = lipgloss.NewStyle(). Foreground(statusBarNoteFg). Background(lipgloss.AdaptiveColor{Light: "#DCDCDC", Dark: "#323232"}). Render statusBarMessageStyle = lipgloss.NewStyle(). Foreground(mintGreen). Background(darkGreen). Render statusBarMessageScrollPosStyle = lipgloss.NewStyle(). Foreground(mintGreen). Background(darkGreen). Render statusBarMessageHelpStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("#B6FFE4")). Background(green). Render helpViewStyle = lipgloss.NewStyle(). Foreground(statusBarNoteFg). Background(lipgloss.AdaptiveColor{Light: "#f2f2f2", Dark: "#1B1B1B"}). Render lineNumberStyle = lipgloss.NewStyle(). Foreground(lineNumberFg). Render ) type ( contentRenderedMsg string ) type pagerState int const ( pagerStateBrowse pagerState = iota pagerStateStatusMessage ) type pagerModel struct { common *commonModel viewport viewport.Model state pagerState showHelp bool statusMessage string statusMessageTimer *time.Timer // Current document being rendered, sans-glamour rendering. We cache // it here so we can re-render it on resize. currentDocument markdown } func newPagerModel(common *commonModel) pagerModel { // Init viewport vp := viewport.New(0, 0) vp.YPosition = 0 vp.HighPerformanceRendering = config.HighPerformancePager return pagerModel{ common: common, state: pagerStateBrowse, viewport: vp, } } func (m *pagerModel) setSize(w, h int) { m.viewport.Width = w m.viewport.Height = h - statusBarHeight if m.showHelp { if pagerHelpHeight == 0 { pagerHelpHeight = strings.Count(m.helpView(), "\n") } m.viewport.Height -= (statusBarHeight + pagerHelpHeight) } } func (m *pagerModel) setContent(s string) { m.viewport.SetContent(s) } func (m *pagerModel) toggleHelp() { m.showHelp = !m.showHelp m.setSize(m.common.width, m.common.height) if m.viewport.PastBottom() { m.viewport.GotoBottom() } } type pagerStatusMessage struct { message string isError bool } // Perform stuff that needs to happen after a successful markdown stash. Note // that the the returned command should be sent back the through the pager // update function. func (m *pagerModel) showStatusMessage(msg pagerStatusMessage) tea.Cmd { // Show a success message to the user m.state = pagerStateStatusMessage m.statusMessage = msg.message if m.statusMessageTimer != nil { m.statusMessageTimer.Stop() } m.statusMessageTimer = time.NewTimer(statusMessageTimeout) return waitForStatusMessageTimeout(pagerContext, m.statusMessageTimer) } func (m *pagerModel) unload() { if m.showHelp { m.toggleHelp() } if m.statusMessageTimer != nil { m.statusMessageTimer.Stop() } m.state = pagerStateBrowse m.viewport.SetContent("") m.viewport.YOffset = 0 } func (m pagerModel) update(msg tea.Msg) (pagerModel, tea.Cmd) { var ( cmd tea.Cmd cmds []tea.Cmd ) switch msg := msg.(type) { case tea.KeyMsg: switch msg.String() { case "q", keyEsc: if m.state != pagerStateBrowse { m.state = pagerStateBrowse return m, nil } case "home", "g": m.viewport.GotoTop() if m.viewport.HighPerformanceRendering { cmds = append(cmds, viewport.Sync(m.viewport)) } case "end", "G": m.viewport.GotoBottom() if m.viewport.HighPerformanceRendering { cmds = append(cmds, viewport.Sync(m.viewport)) } case "e": lineno := int(math.RoundToEven(float64(m.viewport.TotalLineCount()) * m.viewport.ScrollPercent())) if m.viewport.AtTop() { lineno = 0 } log.Info( "opening editor", "file", m.currentDocument.localPath, "line", fmt.Sprintf("%d/%d", lineno, m.viewport.TotalLineCount()), ) return m, openEditor(m.currentDocument.localPath, lineno) case "c": // Copy using OSC 52 termenv.Copy(m.currentDocument.Body) // Copy using native system clipboard _ = clipboard.WriteAll(m.currentDocument.Body) cmds = append(cmds, m.showStatusMessage(pagerStatusMessage{"Copied contents", false})) case "r": return m, loadLocalMarkdown(&m.currentDocument) case "?": m.toggleHelp() if m.viewport.HighPerformanceRendering { cmds = append(cmds, viewport.Sync(m.viewport)) } } // Glow has rendered the content case contentRenderedMsg: m.setContent(string(msg)) if m.viewport.HighPerformanceRendering { cmds = append(cmds, viewport.Sync(m.viewport)) } // We've finished editing the document, potentially making changes. Let's // retrieve the latest version of the document so that we display // up-to-date contents. case editorFinishedMsg: return m, loadLocalMarkdown(&m.currentDocument) // We've received terminal dimensions, either for the first time or // after a resize case tea.WindowSizeMsg: return m, renderWithGlamour(m, m.currentDocument.Body) case statusMessageTimeoutMsg: m.state = pagerStateBrowse } m.viewport, cmd = m.viewport.Update(msg) cmds = append(cmds, cmd) return m, tea.Batch(cmds...) } func (m pagerModel) View() string { var b strings.Builder fmt.Fprint(&b, m.viewport.View()+"\n") // Footer m.statusBarView(&b) if m.showHelp { fmt.Fprint(&b, "\n"+m.helpView()) } return b.String() } func (m pagerModel) statusBarView(b *strings.Builder) { const ( minPercent float64 = 0.0 maxPercent float64 = 1.0 percentToStringMagnitude float64 = 100.0 ) showStatusMessage := m.state == pagerStateStatusMessage // Logo logo := glowLogoView() // Scroll percent percent := math.Max(minPercent, math.Min(maxPercent, m.viewport.ScrollPercent())) scrollPercent := fmt.Sprintf(" %3.f%% ", percent*percentToStringMagnitude) if showStatusMessage { scrollPercent = statusBarMessageScrollPosStyle(scrollPercent) } else { scrollPercent = statusBarScrollPosStyle(scrollPercent) } // "Help" note var helpNote string if showStatusMessage { helpNote = statusBarMessageHelpStyle(" ? Help ") } else { helpNote = statusBarHelpStyle(" ? Help ") } // Note var note string if showStatusMessage { note = m.statusMessage } else { note = m.currentDocument.Note } note = truncate.StringWithTail(" "+note+" ", uint(max(0, m.common.width- ansi.PrintableRuneWidth(logo)- ansi.PrintableRuneWidth(scrollPercent)- ansi.PrintableRuneWidth(helpNote), )), ellipsis) if showStatusMessage { note = statusBarMessageStyle(note) } else { note = statusBarNoteStyle(note) } // Empty space padding := max(0, m.common.width- ansi.PrintableRuneWidth(logo)- ansi.PrintableRuneWidth(note)- ansi.PrintableRuneWidth(scrollPercent)- ansi.PrintableRuneWidth(helpNote), ) emptySpace := strings.Repeat(" ", padding) if showStatusMessage { emptySpace = statusBarMessageStyle(emptySpace) } else { emptySpace = statusBarNoteStyle(emptySpace) } fmt.Fprintf(b, "%s%s%s%s%s", logo, note, emptySpace, scrollPercent, helpNote, ) } func (m pagerModel) helpView() (s string) { col1 := []string{ "g/home go to top", "G/end go to bottom", "c copy contents", "e edit this document", "r reload this document", "esc back to files", "q quit", } s += "\n" s += "k/↑ up " + col1[0] + "\n" s += "j/↓ down " + col1[1] + "\n" s += "b/pgup page up " + col1[2] + "\n" s += "f/pgdn page down " + col1[3] + "\n" s += "u ½ page up " + col1[4] + "\n" s += "d ½ page down " if len(col1) > 5 { s += col1[5] } s = indent(s, 2) // Fill up empty cells with spaces for background coloring if m.common.width > 0 { lines := strings.Split(s, "\n") for i := 0; i < len(lines); i++ { l := runewidth.StringWidth(lines[i]) n := max(m.common.width-l, 0) lines[i] += strings.Repeat(" ", n) } s = strings.Join(lines, "\n") } return helpViewStyle(s) } // COMMANDS func renderWithGlamour(m pagerModel, md string) tea.Cmd { return func() tea.Msg { s, err := glamourRender(m, md) if err != nil { log.Error("error rendering with Glamour", "error", err) return errMsg{err} } return contentRenderedMsg(s) } } // This is where the magic happens. func glamourRender(m pagerModel, markdown string) (string, error) { trunc := lipgloss.NewStyle().MaxWidth(m.viewport.Width - lineNumberWidth).Render if !config.GlamourEnabled { return markdown, nil } isCode := !utils.IsMarkdownFile(m.currentDocument.Note) width := max(0, min(int(m.common.cfg.GlamourMaxWidth), m.viewport.Width)) if isCode { width = 0 } options := []glamour.TermRendererOption{ utils.GlamourStyle(m.common.cfg.GlamourStyle, isCode), glamour.WithWordWrap(width), } if m.common.cfg.PreserveNewLines { options = append(options, glamour.WithPreservedNewLines()) } r, err := glamour.NewTermRenderer(options...) if err != nil { return "", err } if isCode { markdown = utils.WrapCodeBlock(markdown, filepath.Ext(m.currentDocument.Note)) } out, err := r.Render(markdown) if err != nil { return "", err } if isCode { out = strings.TrimSpace(out) } // trim lines lines := strings.Split(out, "\n") var content strings.Builder for i, s := range lines { if isCode || m.common.cfg.ShowLineNumbers { content.WriteString(lineNumberStyle(fmt.Sprintf("%"+fmt.Sprint(lineNumberWidth)+"d", i+1))) content.WriteString(trunc(s)) } else { content.WriteString(s) } // don't add an artificial newline after the last split if i+1 < len(lines) { content.WriteRune('\n') } } return content.String(), nil } glow-2.0.0/ui/sort.go000066400000000000000000000002611466215610400144200ustar00rootroot00000000000000package ui import ( "cmp" "slices" ) func sortMarkdowns(mds []*markdown) { slices.SortStableFunc(mds, func(a, b *markdown) int { return cmp.Compare(a.Note, b.Note) }) } glow-2.0.0/ui/stash.go000066400000000000000000000513731466215610400145650ustar00rootroot00000000000000package ui import ( "errors" "fmt" "os" "sort" "strings" "time" "github.com/charmbracelet/bubbles/paginator" "github.com/charmbracelet/bubbles/spinner" "github.com/charmbracelet/bubbles/textinput" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" "github.com/charmbracelet/log" "github.com/muesli/reflow/ansi" "github.com/muesli/reflow/truncate" "github.com/sahilm/fuzzy" ) const ( stashIndent = 1 stashViewItemHeight = 3 // height of stash entry, including gap stashViewTopPadding = 5 // logo, status bar, gaps stashViewBottomPadding = 3 // pagination and gaps, but not help stashViewHorizontalPadding = 6 ) var stashingStatusMessage = statusMessage{normalStatusMessage, "Stashing..."} var ( dividerDot = darkGrayFg.SetString(" • ") dividerBar = darkGrayFg.SetString(" │ ") logoStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("#ECFD65")). Background(fuchsia). Bold(true) stashSpinnerStyle = lipgloss.NewStyle(). Foreground(gray) stashInputPromptStyle = lipgloss.NewStyle(). Foreground(yellowGreen). MarginRight(1) stashInputCursorStyle = lipgloss.NewStyle(). Foreground(fuchsia). MarginRight(1) ) // MSG type ( filteredMarkdownMsg []*markdown fetchedMarkdownMsg *markdown ) // MODEL // stashViewState is the high-level state of the file listing. type stashViewState int const ( stashStateReady stashViewState = iota stashStateLoadingDocument stashStateShowingError ) // The types of documents we are currently showing to the user. type sectionKey int const ( documentsSection = iota filterSection ) // section contains definitions and state information for displaying a tab and // its contents in the file listing view. type section struct { key sectionKey paginator paginator.Model cursor int } // map sections to their associated types. var sections = map[sectionKey]section{} // filterState is the current filtering state in the file listing. type filterState int const ( unfiltered filterState = iota // no filter set filtering // user is actively setting a filter filterApplied // a filter is applied and user is not editing filter ) // statusMessageType adds some context to the status message being sent. type statusMessageType int // Types of status messages. const ( normalStatusMessage statusMessageType = iota subtleStatusMessage errorStatusMessage ) // statusMessage is an ephemeral note displayed in the UI. type statusMessage struct { status statusMessageType message string } func initSections() { sections = map[sectionKey]section{ documentsSection: { key: documentsSection, paginator: newStashPaginator(), }, filterSection: { key: filterSection, paginator: newStashPaginator(), }, } } // String returns a styled version of the status message appropriate for the // given context. func (s statusMessage) String() string { switch s.status { case subtleStatusMessage: return dimGreenFg(s.message) case errorStatusMessage: return redFg(s.message) default: return greenFg(s.message) } } type stashModel struct { common *commonModel err error spinner spinner.Model filterInput textinput.Model stashFullyLoaded bool // have we loaded all available stashed documents from the server? viewState stashViewState filterState filterState showFullHelp bool showStatusMessage bool statusMessage statusMessage statusMessageTimer *time.Timer // Available document sections we can cycle through. We use a slice, rather // than a map, because order is important. sections []section // Index of the section we're currently looking at sectionIndex int // Tracks if docs were loaded loaded bool // The master set of markdown documents we're working with. markdowns []*markdown // Markdown documents we're currently displaying. Filtering, toggles and so // on will alter this slice so we can show what is relevant. For that // reason, this field should be considered ephemeral. filteredMarkdowns []*markdown // Page we're fetching stash items from on the server, which is different // from the local pagination. Generally, the server will return more items // than we can display at a time so we can paginate locally without having // to fetch every time. serverPage int64 } func (m stashModel) loadingDone() bool { return m.loaded } func (m stashModel) currentSection() *section { return &m.sections[m.sectionIndex] } func (m stashModel) paginator() *paginator.Model { return &m.currentSection().paginator } func (m *stashModel) setPaginator(p paginator.Model) { m.currentSection().paginator = p } func (m stashModel) cursor() int { return m.currentSection().cursor } func (m *stashModel) setCursor(i int) { m.currentSection().cursor = i } // Whether or not the spinner should be spinning. func (m stashModel) shouldSpin() bool { loading := !m.loadingDone() openingDocument := m.viewState == stashStateLoadingDocument return loading || openingDocument } func (m *stashModel) setSize(width, height int) { m.common.width = width m.common.height = height m.filterInput.Width = width - stashViewHorizontalPadding*2 - ansi.PrintableRuneWidth( m.filterInput.Prompt, ) m.updatePagination() } func (m *stashModel) resetFiltering() { m.filterState = unfiltered m.filterInput.Reset() m.filteredMarkdowns = nil sortMarkdowns(m.markdowns) // If the filtered section is present (it's always at the end) slice it out // of the sections slice to remove it from the UI. if m.sections[len(m.sections)-1].key == filterSection { m.sections = m.sections[:len(m.sections)-1] } // If the current section is out of bounds (it would be if we cut down the // slice above) then return to the first section. if m.sectionIndex > len(m.sections)-1 { m.sectionIndex = 0 } // Update pagination after we've switched sections. m.updatePagination() } // Is a filter currently being applied? func (m stashModel) filterApplied() bool { return m.filterState != unfiltered } // Should we be updating the filter? func (m stashModel) shouldUpdateFilter() bool { // If we're in the middle of setting a note don't update the filter so that // the focus won't jump around. return m.filterApplied() } // Update pagination according to the amount of markdowns for the current // state. func (m *stashModel) updatePagination() { _, helpHeight := m.helpView() availableHeight := m.common.height - stashViewTopPadding - helpHeight - stashViewBottomPadding m.paginator().PerPage = max(1, availableHeight/stashViewItemHeight) if pages := len(m.getVisibleMarkdowns()); pages < 1 { m.paginator().SetTotalPages(1) } else { m.paginator().SetTotalPages(pages) } // Make sure the page stays in bounds if m.paginator().Page >= m.paginator().TotalPages-1 { m.paginator().Page = max(0, m.paginator().TotalPages-1) } } // MarkdownIndex returns the index of the currently selected markdown item. func (m stashModel) markdownIndex() int { return m.paginator().Page*m.paginator().PerPage + m.cursor() } // Return the current selected markdown in the stash. func (m stashModel) selectedMarkdown() *markdown { i := m.markdownIndex() mds := m.getVisibleMarkdowns() if i < 0 || len(mds) == 0 || len(mds) <= i { return nil } return mds[i] } // Adds markdown documents to the model. func (m *stashModel) addMarkdowns(mds ...*markdown) { if len(mds) == 0 { return } m.markdowns = append(m.markdowns, mds...) if !m.filterApplied() { sortMarkdowns(m.markdowns) } m.updatePagination() } // Returns the markdowns that should be currently shown. func (m stashModel) getVisibleMarkdowns() []*markdown { if m.filterState == filtering || m.currentSection().key == filterSection { return m.filteredMarkdowns } return m.markdowns } // Command for opening a markdown document in the pager. Note that this also // alters the model. func (m *stashModel) openMarkdown(md *markdown) tea.Cmd { m.viewState = stashStateLoadingDocument cmd := loadLocalMarkdown(md) return tea.Batch(cmd, m.spinner.Tick) } func (m *stashModel) hideStatusMessage() { m.showStatusMessage = false m.statusMessage = statusMessage{} if m.statusMessageTimer != nil { m.statusMessageTimer.Stop() } } func (m *stashModel) moveCursorUp() { m.setCursor(m.cursor() - 1) if m.cursor() < 0 && m.paginator().Page == 0 { // Stop m.setCursor(0) return } if m.cursor() >= 0 { return } // Go to previous page m.paginator().PrevPage() m.setCursor(m.paginator().ItemsOnPage(len(m.getVisibleMarkdowns())) - 1) } func (m *stashModel) moveCursorDown() { itemsOnPage := m.paginator().ItemsOnPage(len(m.getVisibleMarkdowns())) m.setCursor(m.cursor() + 1) if m.cursor() < itemsOnPage { return } if !m.paginator().OnLastPage() { m.paginator().NextPage() m.setCursor(0) return } // During filtering the cursor position can exceed the number of // itemsOnPage. It's more intuitive to start the cursor at the // topmost position when moving it down in this scenario. if m.cursor() > itemsOnPage { m.setCursor(0) return } m.setCursor(itemsOnPage - 1) } // INIT func newStashModel(common *commonModel) stashModel { sp := spinner.New() sp.Spinner = spinner.Line sp.Style = stashSpinnerStyle si := textinput.New() si.Prompt = "Find:" si.PromptStyle = stashInputPromptStyle si.Cursor.Style = stashInputCursorStyle si.Focus() s := []section{ sections[documentsSection], } m := stashModel{ common: common, spinner: sp, filterInput: si, serverPage: 1, sections: s, } return m } func newStashPaginator() paginator.Model { p := paginator.New() p.Type = paginator.Dots p.ActiveDot = brightGrayFg("•") p.InactiveDot = darkGrayFg.Render("•") return p } // UPDATE func (m stashModel) update(msg tea.Msg) (stashModel, tea.Cmd) { var cmds []tea.Cmd switch msg := msg.(type) { case errMsg: m.err = msg case localFileSearchFinished: // We're finished searching for local files m.loaded = true case filteredMarkdownMsg: m.filteredMarkdowns = msg m.setCursor(0) return m, nil case spinner.TickMsg: if m.shouldSpin() { var cmd tea.Cmd m.spinner, cmd = m.spinner.Update(msg) cmds = append(cmds, cmd) } case statusMessageTimeoutMsg: if applicationContext(msg) == stashContext { m.hideStatusMessage() } } if m.filterState == filtering { cmds = append(cmds, m.handleFiltering(msg)) return m, tea.Batch(cmds...) } // Updates per the current state switch m.viewState { case stashStateReady: cmds = append(cmds, m.handleDocumentBrowsing(msg)) case stashStateShowingError: // Any key exists the error view if _, ok := msg.(tea.KeyMsg); ok { m.viewState = stashStateReady } } return m, tea.Batch(cmds...) } // Updates for when a user is browsing the markdown listing. func (m *stashModel) handleDocumentBrowsing(msg tea.Msg) tea.Cmd { var cmds []tea.Cmd numDocs := len(m.getVisibleMarkdowns()) switch msg := msg.(type) { // Handle keys case tea.KeyMsg: switch msg.String() { case "k", "ctrl+k", "up": m.moveCursorUp() case "j", "ctrl+j", "down": m.moveCursorDown() // Go to the very start case "home", "g": m.paginator().Page = 0 m.setCursor(0) // Go to the very end case "end", "G": m.paginator().Page = m.paginator().TotalPages - 1 m.setCursor(m.paginator().ItemsOnPage(numDocs) - 1) // Clear filter (if applicable) case keyEsc: if m.filterApplied() { m.resetFiltering() } // Next section case "tab", "L": if len(m.sections) == 0 || m.filterState == filtering { break } m.sectionIndex++ if m.sectionIndex >= len(m.sections) { m.sectionIndex = 0 } m.updatePagination() // Previous section case "shift+tab", "H": if len(m.sections) == 0 || m.filterState == filtering { break } m.sectionIndex-- if m.sectionIndex < 0 { m.sectionIndex = len(m.sections) - 1 } m.updatePagination() case "F": m.loaded = false return findLocalFiles(*m.common) // Edit document in EDITOR case "e": md := m.selectedMarkdown() return openEditor(md.localPath, 0) // Open document case keyEnter: m.hideStatusMessage() if numDocs == 0 { break } // Load the document from the server. We'll handle the message // that comes back in the main update function. md := m.selectedMarkdown() cmds = append(cmds, m.openMarkdown(md)) // Filter your notes case "/": m.hideStatusMessage() // Build values we'll filter against for _, md := range m.markdowns { md.buildFilterValue() } m.filteredMarkdowns = m.markdowns m.paginator().Page = 0 m.setCursor(0) m.filterState = filtering m.filterInput.CursorEnd() m.filterInput.Focus() return textinput.Blink // Toggle full help case "?": m.showFullHelp = !m.showFullHelp m.updatePagination() // Show errors case "!": if m.err != nil && m.viewState == stashStateReady { m.viewState = stashStateShowingError return nil } } } // Update paginator. Pagination key handling is done here, but it could // also be moved up to this level, in which case we'd use model methods // like model.PageUp(). newPaginatorModel, cmd := m.paginator().Update(msg) m.setPaginator(newPaginatorModel) cmds = append(cmds, cmd) // Extra paginator keystrokes if key, ok := msg.(tea.KeyMsg); ok { switch key.String() { case "b", "u": m.paginator().PrevPage() case "f", "d": m.paginator().NextPage() } } // Keep the index in bounds when paginating itemsOnPage := m.paginator().ItemsOnPage(len(m.getVisibleMarkdowns())) if m.cursor() > itemsOnPage-1 { m.setCursor(max(0, itemsOnPage-1)) } return tea.Batch(cmds...) } // Updates for when a user is in the filter editing interface. func (m *stashModel) handleFiltering(msg tea.Msg) tea.Cmd { var cmds []tea.Cmd // Handle keys if msg, ok := msg.(tea.KeyMsg); ok { switch msg.String() { case keyEsc: // Cancel filtering m.resetFiltering() case keyEnter, "tab", "shift+tab", "ctrl+k", "up", "ctrl+j", "down": m.hideStatusMessage() if len(m.markdowns) == 0 { break } h := m.getVisibleMarkdowns() // If we've filtered down to nothing, clear the filter if len(h) == 0 { m.viewState = stashStateReady m.resetFiltering() break } // When there's only one filtered markdown left we can just // "open" it directly if len(h) == 1 { m.viewState = stashStateReady m.resetFiltering() cmds = append(cmds, m.openMarkdown(h[0])) break } // Add new section if it's not present if m.sections[len(m.sections)-1].key != filterSection { m.sections = append(m.sections, sections[filterSection]) } m.sectionIndex = len(m.sections) - 1 m.filterInput.Blur() m.filterState = filterApplied if m.filterInput.Value() == "" { m.resetFiltering() } } } // Update the filter text input component newFilterInputModel, inputCmd := m.filterInput.Update(msg) currentFilterVal := m.filterInput.Value() newFilterVal := newFilterInputModel.Value() m.filterInput = newFilterInputModel cmds = append(cmds, inputCmd) // If the filtering input has changed, request updated filtering if newFilterVal != currentFilterVal { cmds = append(cmds, filterMarkdowns(*m)) } // Update pagination m.updatePagination() return tea.Batch(cmds...) } // VIEW func (m stashModel) view() string { var s string switch m.viewState { case stashStateShowingError: return errorView(m.err, false) case stashStateLoadingDocument: s += " " + m.spinner.View() + " Loading document..." case stashStateReady: loadingIndicator := " " if m.shouldSpin() { loadingIndicator = m.spinner.View() } // Only draw the normal header if we're not using the header area for // something else (like a note or delete prompt). header := m.headerView() // Rules for the logo, filter and status message. logoOrFilter := " " if m.showStatusMessage && m.filterState == filtering { logoOrFilter += m.statusMessage.String() } else if m.filterState == filtering { logoOrFilter += m.filterInput.View() } else { logoOrFilter += glowLogoView() if m.showStatusMessage { logoOrFilter += " " + m.statusMessage.String() } } logoOrFilter = truncate.StringWithTail(logoOrFilter, uint(m.common.width-1), ellipsis) help, helpHeight := m.helpView() populatedView := m.populatedView() populatedViewHeight := strings.Count(populatedView, "\n") + 2 // We need to fill any empty height with newlines so the footer reaches // the bottom. availHeight := m.common.height - stashViewTopPadding - populatedViewHeight - helpHeight - stashViewBottomPadding blankLines := strings.Repeat("\n", max(0, availHeight)) var pagination string if m.paginator().TotalPages > 1 { pagination = m.paginator().View() // If the dot pagination is wider than the width of the window // use the arabic paginator. if ansi.PrintableRuneWidth(pagination) > m.common.width-stashViewHorizontalPadding { // Copy the paginator since m.paginator() returns a pointer to // the active paginator and we don't want to mutate it. In // normal cases, where the paginator is not a pointer, we could // safely change the model parameters for rendering here as the // current model is discarded after reuturning from a View(). // One could argue, in fact, that using pointers in // a functional framework is an antipattern and our use of // pointers in our model should be refactored away. p := *(m.paginator()) p.Type = paginator.Arabic pagination = paginationStyle.Render(p.View()) } // We could also look at m.stashFullyLoaded and add an indicator // showing that we don't actually know how many more pages there // are. } s += fmt.Sprintf( "%s%s\n\n %s\n\n%s\n\n%s %s\n\n%s", loadingIndicator, logoOrFilter, header, populatedView, blankLines, pagination, help, ) } return "\n" + indent(s, stashIndent) } func glowLogoView() string { return logoStyle.Render(" Glow ") } func (m stashModel) headerView() string { localCount := len(m.markdowns) var sections []string //nolint:prealloc // Filter results if m.filterState == filtering { if localCount == 0 { return grayFg("Nothing found.") } if localCount > 0 { sections = append(sections, fmt.Sprintf("%d local", localCount)) } for i := range sections { sections[i] = grayFg(sections[i]) } return strings.Join(sections, dividerDot.String()) } // Tabs for i, v := range m.sections { var s string switch v.key { case documentsSection: s = fmt.Sprintf("%d documents", localCount) case filterSection: s = fmt.Sprintf("%d “%s”", len(m.filteredMarkdowns), m.filterInput.Value()) } if m.sectionIndex == i && len(m.sections) > 1 { s = selectedTabStyle.Render(s) } else { s = tabStyle.Render(s) } sections = append(sections, s) } return strings.Join(sections, dividerBar.String()) } func (m stashModel) populatedView() string { mds := m.getVisibleMarkdowns() var b strings.Builder // Empty states if len(mds) == 0 { f := func(s string) { b.WriteString(" " + grayFg(s)) } switch m.sections[m.sectionIndex].key { case documentsSection: if m.loadingDone() { f("No files found.") } else { f("Looking for local files...") } case filterSection: return "" } } if len(mds) > 0 { start, end := m.paginator().GetSliceBounds(len(mds)) docs := mds[start:end] for i, md := range docs { stashItemView(&b, m, i, md) if i != len(docs)-1 { fmt.Fprintf(&b, "\n\n") } } } // If there aren't enough items to fill up this page (always the last page) // then we need to add some newlines to fill up the space where stash items // would have been. itemsOnPage := m.paginator().ItemsOnPage(len(mds)) if itemsOnPage < m.paginator().PerPage { n := (m.paginator().PerPage - itemsOnPage) * stashViewItemHeight if len(mds) == 0 { n -= stashViewItemHeight - 1 } for i := 0; i < n; i++ { fmt.Fprint(&b, "\n") } } return b.String() } // COMMANDS func loadLocalMarkdown(md *markdown) tea.Cmd { return func() tea.Msg { if md.localPath == "" { return errMsg{errors.New("could not load file: missing path")} } data, err := os.ReadFile(md.localPath) if err != nil { log.Debug("error reading local file", "error", err) return errMsg{err} } md.Body = string(data) return fetchedMarkdownMsg(md) } } func filterMarkdowns(m stashModel) tea.Cmd { return func() tea.Msg { if m.filterInput.Value() == "" || !m.filterApplied() { return filteredMarkdownMsg(m.markdowns) // return everything } targets := []string{} mds := m.markdowns for _, t := range mds { targets = append(targets, t.filterValue) } ranks := fuzzy.Find(m.filterInput.Value(), targets) sort.Stable(ranks) filtered := []*markdown{} for _, r := range ranks { filtered = append(filtered, mds[r.Index]) } return filteredMarkdownMsg(filtered) } } glow-2.0.0/ui/stashhelp.go000066400000000000000000000154761466215610400154420ustar00rootroot00000000000000package ui import ( "fmt" "strings" "github.com/muesli/reflow/ansi" ) // helpEntry is a entry in a help menu containing values for a keystroke and // it's associated action. type helpEntry struct{ key, val string } // helpColumn is a group of helpEntries which will be rendered into a column. type helpColumn []helpEntry // newHelpColumn creates a help column from pairs of string arguments // representing keys and values. If the arguments are not even (and therein // not every key has a matching value) the function will panic. func newHelpColumn(pairs ...string) (h helpColumn) { if len(pairs)%2 != 0 { panic("help text group must have an even number of items") } for i := 0; i < len(pairs); i = i + 2 { h = append(h, helpEntry{key: pairs[i], val: pairs[i+1]}) } return } // render returns styled and formatted rows from keys and values. func (h helpColumn) render(height int) (rows []string) { keyWidth, valWidth := h.maxWidths() for i := 0; i < height; i++ { var ( b = strings.Builder{} k, v string ) if i < len(h) { k = h[i].key v = h[i].val switch k { case "s": k = greenFg(k) v = semiDimGreenFg(v) default: k = grayFg(k) v = midGrayFg(v) } } b.WriteString(k) b.WriteString(strings.Repeat(" ", keyWidth-ansi.PrintableRuneWidth(k))) // pad keys b.WriteString(" ") // gap b.WriteString(v) b.WriteString(strings.Repeat(" ", valWidth-ansi.PrintableRuneWidth(v))) // pad vals rows = append(rows, b.String()) } return } // maxWidths returns the widest key and values in the column, respectively. func (h helpColumn) maxWidths() (maxKey int, maxVal int) { for _, v := range h { kw := ansi.PrintableRuneWidth(v.key) vw := ansi.PrintableRuneWidth(v.val) if kw > maxKey { maxKey = kw } if vw > maxVal { maxVal = vw } } return } // helpView returns either the mini or full help view depending on the state of // the model, as well as the total height of the help view. func (m stashModel) helpView() (string, int) { numDocs := len(m.getVisibleMarkdowns()) // Help for when we're filtering if m.filterState == filtering { var h []string switch numDocs { case 0: h = []string{"enter/esc", "cancel"} case 1: h = []string{"enter", "open", "esc", "cancel"} default: h = []string{"enter", "confirm", "esc", "cancel", "ctrl+j/ctrl+k ↑/↓", "choose"} } return m.renderHelp(h) } var ( isEditable bool navHelp []string filterHelp []string selectionHelp []string editHelp []string sectionHelp []string appHelp []string ) if numDocs > 0 && m.showFullHelp { navHelp = []string{"enter", "open", "j/k ↑/↓", "choose"} } if len(m.sections) > 1 { if m.showFullHelp { navHelp = append(navHelp, "tab/shift+tab", "section") } else { navHelp = append(navHelp, "tab", "section") } } if m.paginator().TotalPages > 1 { navHelp = append(navHelp, "h/l ←/→", "page") } // If we're browsing a filtered set if m.filterApplied() { filterHelp = []string{"/", "edit search", "esc", "clear filter"} } else { filterHelp = []string{"/", "find"} if m.stashFullyLoaded { filterHelp = append(filterHelp, "t", "team filter") } } if isEditable { editHelp = []string{"e", "edit"} } // If there are errors if m.err != nil { appHelp = append(appHelp, "!", "errors") } appHelp = append(appHelp, "r", "refresh") appHelp = append(appHelp, "q", "quit") // Detailed help if m.showFullHelp { if m.filterState != filtering { appHelp = append(appHelp, "?", "close help") } return m.renderHelp(navHelp, filterHelp, append(selectionHelp, editHelp...), sectionHelp, appHelp) } // Mini help if m.filterState != filtering { appHelp = append(appHelp, "?", "more") } return m.renderHelp(navHelp, filterHelp, selectionHelp, editHelp, sectionHelp, appHelp) } const minHelpViewHeight = 5 // renderHelp returns the rendered help view and associated line height for // the given groups of help items. func (m stashModel) renderHelp(groups ...[]string) (string, int) { if m.showFullHelp { str := m.fullHelpView(groups...) numLines := strings.Count(str, "\n") + 1 return str, max(numLines, minHelpViewHeight) } return m.miniHelpView(concatStringSlices(groups...)...), 1 } // Builds the help view from various sections pieces, truncating it if the view // would otherwise wrap to two lines. Help view entries should come in as pairs, // with the first being the key and the second being the help text. func (m stashModel) miniHelpView(entries ...string) string { if len(entries) == 0 { return "" } var ( truncationChar = subtleStyle.Render("…") truncationWidth = ansi.PrintableRuneWidth(truncationChar) ) var ( next string leftGutter = " " maxWidth = m.common.width - stashViewHorizontalPadding - truncationWidth - ansi.PrintableRuneWidth(leftGutter) s = leftGutter ) for i := 0; i < len(entries); i = i + 2 { k := entries[i] v := entries[i+1] k = grayFg(k) v = midGrayFg(v) next = fmt.Sprintf("%s %s", k, v) if i < len(entries)-2 { next += dividerDot.String() } // Only this (and the following) help text items if we have the // horizontal space if ansi.PrintableRuneWidth(s)+ansi.PrintableRuneWidth(next) >= maxWidth { s += truncationChar break } s += next } return s } func (m stashModel) fullHelpView(groups ...[]string) string { var tallestCol int columns := make([]helpColumn, 0, len(groups)) renderedCols := make([][]string, 0, len(groups)) // final rows grouped by column // Get key/value pairs for _, g := range groups { if len(g) == 0 { continue // ignore empty columns } columns = append(columns, newHelpColumn(g...)) } // Find the tallest column for _, c := range columns { if len(c) > tallestCol { tallestCol = len(c) } } // Build columns for _, c := range columns { renderedCols = append(renderedCols, c.render(tallestCol)) } // Merge columns return mergeColumns(renderedCols...) } // Merge columns together to build the help view. func mergeColumns(cols ...[]string) string { const minimumHeight = 3 // Find the tallest column var tallestCol int for _, v := range cols { n := len(v) if n > tallestCol { tallestCol = n } } // Make sure the tallest column meets the minimum height if tallestCol < minimumHeight { tallestCol = minimumHeight } b := strings.Builder{} for i := 0; i < tallestCol; i++ { for j, col := range cols { if i >= len(col) { continue // skip if we're past the length of this column } if j == 0 { b.WriteString(" ") // gutter } else if j > 0 { b.WriteString(" ") // gap } b.WriteString(col[i]) } if i < tallestCol-1 { b.WriteRune('\n') } } return b.String() } func concatStringSlices(s ...[]string) (agg []string) { for _, v := range s { agg = append(agg, v...) } return } glow-2.0.0/ui/stashitem.go000066400000000000000000000065631466215610400154450ustar00rootroot00000000000000package ui import ( "fmt" "strings" "github.com/charmbracelet/lipgloss" "github.com/charmbracelet/log" "github.com/muesli/reflow/truncate" "github.com/sahilm/fuzzy" ) const ( verticalLine = "│" fileListingStashIcon = "• " ) func stashItemView(b *strings.Builder, m stashModel, index int, md *markdown) { var ( truncateTo = uint(m.common.width - stashViewHorizontalPadding*2) gutter string title = truncate.StringWithTail(md.Note, truncateTo, ellipsis) date = md.relativeTime() editedBy = "" hasEditedBy = false icon = "" separator = "" ) isSelected := index == m.cursor() isFiltering := m.filterState == filtering singleFilteredItem := isFiltering && len(m.getVisibleMarkdowns()) == 1 // If there are multiple items being filtered don't highlight a selected // item in the results. If we've filtered down to one item, however, // highlight that first item since pressing return will open it. if isSelected && !isFiltering || singleFilteredItem { // Selected item if m.statusMessage == stashingStatusMessage { gutter = greenFg(verticalLine) icon = dimGreenFg(icon) title = greenFg(title) date = semiDimGreenFg(date) editedBy = semiDimGreenFg(editedBy) separator = semiDimGreenFg(separator) } else { gutter = dullFuchsiaFg(verticalLine) if m.currentSection().key == filterSection && m.filterState == filterApplied || singleFilteredItem { s := lipgloss.NewStyle().Foreground(fuchsia) title = styleFilteredText(title, m.filterInput.Value(), s, s.Underline(true)) } else { title = fuchsiaFg(title) icon = fuchsiaFg(icon) } date = dimFuchsiaFg(date) editedBy = dimDullFuchsiaFg(editedBy) separator = dullFuchsiaFg(separator) } } else { gutter = " " if m.statusMessage == stashingStatusMessage { icon = dimGreenFg(icon) title = greenFg(title) date = semiDimGreenFg(date) editedBy = semiDimGreenFg(editedBy) separator = semiDimGreenFg(separator) } else if isFiltering && m.filterInput.Value() == "" { icon = dimGreenFg(icon) title = dimNormalFg(title) date = dimBrightGrayFg(date) editedBy = dimBrightGrayFg(editedBy) separator = dimBrightGrayFg(separator) } else { icon = greenFg(icon) s := lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#1a1a1a", Dark: "#dddddd"}) title = styleFilteredText(title, m.filterInput.Value(), s, s.Underline(true)) date = grayFg(date) editedBy = midGrayFg(editedBy) separator = brightGrayFg(separator) } } fmt.Fprintf(b, "%s %s%s%s%s\n", gutter, icon, separator, separator, title) fmt.Fprintf(b, "%s %s", gutter, date) if hasEditedBy { fmt.Fprintf(b, " %s", editedBy) } } func styleFilteredText(haystack, needles string, defaultStyle, matchedStyle lipgloss.Style) string { b := strings.Builder{} normalizedHay, err := normalize(haystack) if err != nil { log.Error("error normalizing", "haystack", haystack, "error", err) } matches := fuzzy.Find(needles, []string{normalizedHay}) if len(matches) == 0 { return defaultStyle.Render(haystack) } m := matches[0] // only one match exists for i, rune := range []rune(haystack) { styled := false for _, mi := range m.MatchedIndexes { if i == mi { b.WriteString(matchedStyle.Render(string(rune))) styled = true } } if !styled { b.WriteString(defaultStyle.Render(string(rune))) } } return b.String() } glow-2.0.0/ui/styles.go000066400000000000000000000052401466215610400147560ustar00rootroot00000000000000package ui import "github.com/charmbracelet/lipgloss" // Colors. var ( normalDim = lipgloss.AdaptiveColor{Light: "#A49FA5", Dark: "#777777"} gray = lipgloss.AdaptiveColor{Light: "#909090", Dark: "#626262"} midGray = lipgloss.AdaptiveColor{Light: "#B2B2B2", Dark: "#4A4A4A"} darkGray = lipgloss.AdaptiveColor{Light: "#DDDADA", Dark: "#3C3C3C"} brightGray = lipgloss.AdaptiveColor{Light: "#847A85", Dark: "#979797"} dimBrightGray = lipgloss.AdaptiveColor{Light: "#C2B8C2", Dark: "#4D4D4D"} cream = lipgloss.AdaptiveColor{Light: "#FFFDF5", Dark: "#FFFDF5"} yellowGreen = lipgloss.AdaptiveColor{Light: "#04B575", Dark: "#ECFD65"} fuchsia = lipgloss.AdaptiveColor{Light: "#EE6FF8", Dark: "#EE6FF8"} dimFuchsia = lipgloss.AdaptiveColor{Light: "#F1A8FF", Dark: "#99519E"} dullFuchsia = lipgloss.AdaptiveColor{Dark: "#AD58B4", Light: "#F793FF"} dimDullFuchsia = lipgloss.AdaptiveColor{Light: "#F6C9FF", Dark: "#7B4380"} green = lipgloss.Color("#04B575") red = lipgloss.AdaptiveColor{Light: "#FF4672", Dark: "#ED567A"} semiDimGreen = lipgloss.AdaptiveColor{Light: "#35D79C", Dark: "#036B46"} dimGreen = lipgloss.AdaptiveColor{Light: "#72D2B0", Dark: "#0B5137"} ) // Ulimately, we'll transition to named styles. var ( dimNormalFg = lipgloss.NewStyle().Foreground(normalDim).Render brightGrayFg = lipgloss.NewStyle().Foreground(brightGray).Render dimBrightGrayFg = lipgloss.NewStyle().Foreground(dimBrightGray).Render grayFg = lipgloss.NewStyle().Foreground(gray).Render midGrayFg = lipgloss.NewStyle().Foreground(midGray).Render darkGrayFg = lipgloss.NewStyle().Foreground(darkGray) greenFg = lipgloss.NewStyle().Foreground(green).Render semiDimGreenFg = lipgloss.NewStyle().Foreground(semiDimGreen).Render dimGreenFg = lipgloss.NewStyle().Foreground(dimGreen).Render fuchsiaFg = lipgloss.NewStyle().Foreground(fuchsia).Render dimFuchsiaFg = lipgloss.NewStyle().Foreground(dimFuchsia).Render dullFuchsiaFg = lipgloss.NewStyle().Foreground(dullFuchsia).Render dimDullFuchsiaFg = lipgloss.NewStyle().Foreground(dimDullFuchsia).Render redFg = lipgloss.NewStyle().Foreground(red).Render tabStyle = lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#909090", Dark: "#626262"}) selectedTabStyle = lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#333333", Dark: "#979797"}) errorTitleStyle = lipgloss.NewStyle().Foreground(cream).Background(red).Padding(0, 1) subtleStyle = lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#9B9B9B", Dark: "#5C5C5C"}) paginationStyle = subtleStyle ) glow-2.0.0/ui/ui.go000066400000000000000000000223571466215610400140600ustar00rootroot00000000000000package ui import ( "fmt" "os" "path/filepath" "strings" "time" "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/glamour/styles" "github.com/charmbracelet/glow/v2/utils" "github.com/charmbracelet/lipgloss" "github.com/charmbracelet/log" "github.com/muesli/gitcha" te "github.com/muesli/termenv" ) const ( statusMessageTimeout = time.Second * 3 // how long to show status messages like "stashed!" ellipsis = "…" ) var ( config Config markdownExtensions = []string{ "*.md", "*.mdown", "*.mkdn", "*.mkd", "*.markdown", } ) // NewProgram returns a new Tea program. func NewProgram(cfg Config) *tea.Program { log.Debug( "Starting glow", "high_perf_pager", cfg.HighPerformancePager, "glamour", cfg.GlamourEnabled, ) config = cfg opts := []tea.ProgramOption{tea.WithAltScreen()} if cfg.EnableMouse { opts = append(opts, tea.WithMouseCellMotion()) } m := newModel(cfg) return tea.NewProgram(m, opts...) } type errMsg struct{ err error } func (e errMsg) Error() string { return e.err.Error() } type ( initLocalFileSearchMsg struct { cwd string ch chan gitcha.SearchResult } ) type ( foundLocalFileMsg gitcha.SearchResult localFileSearchFinished struct{} statusMessageTimeoutMsg applicationContext ) // applicationContext indicates the area of the application something applies // to. Occasionally used as an argument to commands and messages. type applicationContext int const ( stashContext applicationContext = iota pagerContext ) // state is the top-level application state. type state int const ( stateShowStash state = iota stateShowDocument ) func (s state) String() string { return map[state]string{ stateShowStash: "showing file listing", stateShowDocument: "showing document", }[s] } // Common stuff we'll need to access in all models. type commonModel struct { cfg Config cwd string width int height int } type model struct { common *commonModel state state fatalErr error // Sub-models stash stashModel pager pagerModel // Channel that receives paths to local markdown files // (via the github.com/muesli/gitcha package) localFileFinder chan gitcha.SearchResult } // unloadDocument unloads a document from the pager. Note that while this // method alters the model we also need to send along any commands returned. func (m *model) unloadDocument() []tea.Cmd { m.state = stateShowStash m.stash.viewState = stashStateReady m.pager.unload() m.pager.showHelp = false var batch []tea.Cmd if m.pager.viewport.HighPerformanceRendering { batch = append(batch, tea.ClearScrollArea) } if !m.stash.shouldSpin() { batch = append(batch, m.stash.spinner.Tick) } return batch } func newModel(cfg Config) tea.Model { initSections() if cfg.GlamourStyle == styles.AutoStyle { if te.HasDarkBackground() { cfg.GlamourStyle = styles.DarkStyle } else { cfg.GlamourStyle = styles.LightStyle } } teamList := list.New([]list.Item{}, list.NewDefaultDelegate(), 0, 0) teamList.Styles.Title = lipgloss.NewStyle().Foreground(yellowGreen) teamList.SetStatusBarItemName("team", "teams") teamList.SetShowHelp(true) // We use the team list status message as a permanent placeholder. teamList.StatusMessageLifetime = time.Hour common := commonModel{ cfg: cfg, } return model{ common: &common, state: stateShowStash, pager: newPagerModel(&common), stash: newStashModel(&common), } } func (m model) Init() tea.Cmd { cmds := []tea.Cmd{m.stash.spinner.Tick} cmds = append(cmds, findLocalFiles(*m.common)) return tea.Batch(cmds...) } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { // If there's been an error, any key exits if m.fatalErr != nil { if _, ok := msg.(tea.KeyMsg); ok { return m, tea.Quit } } var cmds []tea.Cmd switch msg := msg.(type) { case tea.KeyMsg: switch msg.String() { case "esc": if m.state == stateShowDocument || m.stash.viewState == stashStateLoadingDocument { batch := m.unloadDocument() return m, tea.Batch(batch...) } case "r": if m.state == stateShowStash { m.stash.markdowns = nil return m, m.Init() } case "q": var cmd tea.Cmd switch m.state { case stateShowStash: // pass through all keys if we're editing the filter if m.stash.filterState == filtering { m.stash, cmd = m.stash.update(msg) return m, cmd } } return m, tea.Quit case "left", "h", "delete": if m.state == stateShowDocument { cmds = append(cmds, m.unloadDocument()...) return m, tea.Batch(cmds...) } case "ctrl+z": return m, tea.Suspend // Ctrl+C always quits no matter where in the application you are. case "ctrl+c": return m, tea.Quit } // Window size is received when starting up and on every resize case tea.WindowSizeMsg: m.common.width = msg.Width m.common.height = msg.Height m.stash.setSize(msg.Width, msg.Height) m.pager.setSize(msg.Width, msg.Height) case initLocalFileSearchMsg: m.localFileFinder = msg.ch m.common.cwd = msg.cwd cmds = append(cmds, findNextLocalFile(m)) case fetchedMarkdownMsg: // We've loaded a markdown file's contents for rendering m.pager.currentDocument = *msg body := string(utils.RemoveFrontmatter([]byte(msg.Body))) cmds = append(cmds, renderWithGlamour(m.pager, body)) case contentRenderedMsg: m.state = stateShowDocument case localFileSearchFinished: // Always pass these messages to the stash so we can keep it updated // about network activity, even if the user isn't currently viewing // the stash. stashModel, cmd := m.stash.update(msg) m.stash = stashModel return m, cmd case foundLocalFileMsg: newMd := localFileToMarkdown(m.common.cwd, gitcha.SearchResult(msg)) m.stash.addMarkdowns(newMd) if m.stash.filterApplied() { newMd.buildFilterValue() } if m.stash.shouldUpdateFilter() { cmds = append(cmds, filterMarkdowns(m.stash)) } cmds = append(cmds, findNextLocalFile(m)) case filteredMarkdownMsg: if m.state == stateShowDocument { newStashModel, cmd := m.stash.update(msg) m.stash = newStashModel cmds = append(cmds, cmd) } } // Process children switch m.state { case stateShowStash: newStashModel, cmd := m.stash.update(msg) m.stash = newStashModel cmds = append(cmds, cmd) case stateShowDocument: newPagerModel, cmd := m.pager.update(msg) m.pager = newPagerModel cmds = append(cmds, cmd) } return m, tea.Batch(cmds...) } func (m model) View() string { if m.fatalErr != nil { return errorView(m.fatalErr, true) } switch m.state { case stateShowDocument: return m.pager.View() default: return m.stash.view() } } func errorView(err error, fatal bool) string { exitMsg := "press any key to " if fatal { exitMsg += "exit" } else { exitMsg += "return" } s := fmt.Sprintf("%s\n\n%v\n\n%s", errorTitleStyle.Render("ERROR"), err, subtleStyle.Render(exitMsg), ) return "\n" + indent(s, 3) } // COMMANDS func findLocalFiles(m commonModel) tea.Cmd { return func() tea.Msg { log.Info("findLocalFiles") var ( cwd = m.cfg.WorkingDirectory err error ) if cwd == "" { cwd, err = os.Getwd() } else { var info os.FileInfo info, err = os.Stat(cwd) if err == nil && info.IsDir() { cwd, err = filepath.Abs(cwd) } } // Note that this is one error check for both cases above if err != nil { log.Error("error finding local files", "error", err) return errMsg{err} } log.Debug("local directory is", "cwd", cwd) // Switch between FindFiles and FindAllFiles to bypass .gitignore rules var ch chan gitcha.SearchResult if m.cfg.ShowAllFiles { ch, err = gitcha.FindAllFilesExcept(cwd, markdownExtensions, nil) } else { ch, err = gitcha.FindFilesExcept(cwd, markdownExtensions, ignorePatterns(m)) } if err != nil { log.Error("error finding local files", "error", err) return errMsg{err} } return initLocalFileSearchMsg{ch: ch, cwd: cwd} } } func findNextLocalFile(m model) tea.Cmd { return func() tea.Msg { res, ok := <-m.localFileFinder if ok { // Okay now find the next one return foundLocalFileMsg(res) } // We're done log.Debug("local file search finished") return localFileSearchFinished{} } } func waitForStatusMessageTimeout(appCtx applicationContext, t *time.Timer) tea.Cmd { return func() tea.Msg { <-t.C return statusMessageTimeoutMsg(appCtx) } } // ETC // Convert a Gitcha result to an internal representation of a markdown // document. Note that we could be doing things like checking if the file is // a directory, but we trust that gitcha has already done that. func localFileToMarkdown(cwd string, res gitcha.SearchResult) *markdown { md := &markdown{ localPath: res.Path, Note: stripAbsolutePath(res.Path, cwd), Modtime: res.Info.ModTime(), } return md } func stripAbsolutePath(fullPath, cwd string) string { return strings.ReplaceAll(fullPath, cwd+string(os.PathSeparator), "") } // Lightweight version of reflow's indent function. func indent(s string, n int) string { if n <= 0 || s == "" { return s } l := strings.Split(s, "\n") b := strings.Builder{} i := strings.Repeat(" ", n) for _, v := range l { fmt.Fprintf(&b, "%s%s\n", i, v) } return b.String() } func min(a, b int) int { if a < b { return a } return b } func max(a, b int) int { if a > b { return a } return b } glow-2.0.0/url.go000066400000000000000000000030431466215610400136170ustar00rootroot00000000000000package main import ( "net/url" "strings" "sync" ) const ( protoGithub = "github://" protoGitlab = "gitlab://" protoHTTPS = "https://" ) var ( githubURL *url.URL gitlabURL *url.URL urlsOnce sync.Once ) func init() { urlsOnce.Do(func() { githubURL, _ = url.Parse("https://github.com") gitlabURL, _ = url.Parse("https://gitlab.com") }) } func readmeURL(path string) (*source, error) { switch { case strings.HasPrefix(path, protoGithub): if u := githubReadmeURL(path); u != nil { return readmeURL(u.String()) } return nil, nil case strings.HasPrefix(path, protoGitlab): if u := gitlabReadmeURL(path); u != nil { return readmeURL(u.String()) } return nil, nil } if !strings.HasPrefix(path, protoHTTPS) { path = protoHTTPS + path } u, err := url.Parse(path) if err != nil { return nil, err } switch { case u.Hostname() == githubURL.Hostname(): return findGitHubREADME(u) case u.Hostname() == gitlabURL.Hostname(): return findGitLabREADME(u) } return nil, nil } func githubReadmeURL(path string) *url.URL { path = strings.TrimPrefix(path, protoGithub) parts := strings.Split(path, "/") if len(parts) != 2 { // custom hostnames are not supported yet return nil } u, _ := url.Parse(githubURL.String()) return u.JoinPath(path) } func gitlabReadmeURL(path string) *url.URL { path = strings.TrimPrefix(path, protoGitlab) parts := strings.Split(path, "/") if len(parts) != 2 { // custom hostnames are not supported yet return nil } u, _ := url.Parse(gitlabURL.String()) return u.JoinPath(path) } glow-2.0.0/url_test.go000066400000000000000000000025711466215610400146630ustar00rootroot00000000000000package main import "testing" func TestURLParser(t *testing.T) { for path, url := range map[string]string{ "github.com/charmbracelet/glow": "https://raw.githubusercontent.com/charmbracelet/glow/master/README.md", "github://charmbracelet/glow": "https://raw.githubusercontent.com/charmbracelet/glow/master/README.md", "github://caarlos0/dotfiles.fish": "https://raw.githubusercontent.com/caarlos0/dotfiles.fish/main/README.md", "github://tj/git-extras": "https://raw.githubusercontent.com/tj/git-extras/main/Readme.md", "https://github.com/goreleaser/nfpm": "https://raw.githubusercontent.com/goreleaser/nfpm/main/README.md", "gitlab.com/caarlos0/test": "https://gitlab.com/caarlos0/test/-/raw/master/README.md", "gitlab://caarlos0/test": "https://gitlab.com/caarlos0/test/-/raw/master/README.md", "https://gitlab.com/terrakok/gitlab-client": "https://gitlab.com/terrakok/gitlab-client/-/raw/develop/Readme.md", } { t.Run(path, func(t *testing.T) { t.Skip("test uses network, sometimes fails for no reason") got, err := readmeURL(path) if err != nil { t.Fatalf("expected no error, got %v", err) } if got == nil { t.Fatalf("should not be nil") } if url != got.URL { t.Errorf("expected url for %s to be %s, was %s", path, url, got.URL) } }) } } glow-2.0.0/utils/000077500000000000000000000000001466215610400136265ustar00rootroot00000000000000glow-2.0.0/utils/utils.go000066400000000000000000000052751466215610400153260ustar00rootroot00000000000000package utils import ( "os" "path/filepath" "regexp" "strings" "github.com/charmbracelet/glamour" "github.com/charmbracelet/glamour/ansi" "github.com/charmbracelet/glamour/styles" "github.com/charmbracelet/lipgloss" "github.com/mitchellh/go-homedir" ) // RemoveFrontmatter removes the front matter header of a markdown file. func RemoveFrontmatter(content []byte) []byte { if frontmatterBoundaries := detectFrontmatter(content); frontmatterBoundaries[0] == 0 { return content[frontmatterBoundaries[1]:] } return content } var yamlPattern = regexp.MustCompile(`(?m)^---\r?\n(\s*\r?\n)?`) func detectFrontmatter(c []byte) []int { if matches := yamlPattern.FindAllIndex(c, 2); len(matches) > 1 { return []int{matches[0][0], matches[1][1]} } return []int{-1, -1} } // Expands tilde and all environment variables from the given path. func ExpandPath(path string) string { s, err := homedir.Expand(path) if err == nil { return os.ExpandEnv(s) } return os.ExpandEnv(path) } // WrapCodeBlock wraps a string in a code block with the given language. func WrapCodeBlock(s, language string) string { return "```" + language + "\n" + s + "```" } var markdownExtensions = []string{ ".md", ".mdown", ".mkdn", ".mkd", ".markdown", } // IsMarkdownFile returns whether the filename has a markdown extension. func IsMarkdownFile(filename string) bool { ext := filepath.Ext(filename) if ext == "" { // By default, assume it's a markdown file. return true } for _, v := range markdownExtensions { if strings.EqualFold(ext, v) { return true } } // Has an extension but not markdown // so assume this is a code file. return false } func GlamourStyle(style string, isCode bool) glamour.TermRendererOption { if !isCode { if style == styles.AutoStyle { return glamour.WithAutoStyle() } else { return glamour.WithStylePath(style) } } // If we are rendering a pure code block, we need to modify the style to // remove the indentation. var styleConfig ansi.StyleConfig switch style { case styles.AutoStyle: if lipgloss.HasDarkBackground() { styleConfig = styles.DarkStyleConfig } else { styleConfig = styles.LightStyleConfig } case styles.DarkStyle: styleConfig = styles.DarkStyleConfig case styles.LightStyle: styleConfig = styles.LightStyleConfig case styles.PinkStyle: styleConfig = styles.PinkStyleConfig case styles.NoTTYStyle: styleConfig = styles.NoTTYStyleConfig case styles.DraculaStyle: styleConfig = styles.DraculaStyleConfig case styles.TokyoNightStyle: styleConfig = styles.DraculaStyleConfig default: return glamour.WithStylesFromJSONFile(style) } var margin uint styleConfig.CodeBlock.Margin = &margin return glamour.WithStyles(styleConfig) }