From f0a5bc1e30daaa0be5ec11df1b786ab479020e10 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Tue, 26 Apr 2022 11:31:07 +0200 Subject: [PATCH] chore: update 02-client-refactor branch with latest main (#1286) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: allow the mock module to be used multiple times as base ibc application in middleware stack (#892) ## Description Currently the `AppModule` assumes a single scoped keeper. This doesn't allow the mock module to be used as a base application for different middleware stack (ica stack, fee stack, etc) I broke the API because I think it is cleaner. If we want this to be non API breaking, I can try to readjust ref: #891 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * feat: adding Pack/Unpack acknowledgement helper fns (#895) * feat: adding Pack/Unpack acknowledgement helper fns * chore: changelog * fix: docs * Update modules/core/04-channel/types/codec.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * imp: support custom keys for testing (#893) * chore: add ParsePacketFromEvents testing helper function (#904) ## Description ref: #891 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * fix: correctly claim capability for mock module, handle genesis exports (#921) ## Description This contains two fixes: - the capability being claimed by the scoped keeper was incorrect (mock.ModuleName -> port ID) - the mock module wasn't accounting for non empty genesis state in capabilities (after genesis export, capability will create the bound ports so rebinding doesn't need to happen) closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * docs: update migration docs for upgrade proposal in relation to ICS27 (#920) ## Description closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * chore(ica): add trail of bits audit report (#903) * chore(ica): add trail of bits audit report * relocate the audit report for ICA Co-authored-by: Carlos Rodriguez * testing: adding multiple sender accounts for testing purposes (#935) * testing: adding multiple sender accounts for testing puproses * fix genesis setup (#936) * Update testing/chain.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * refactor: code hygiene * Update testing/chain.go Co-authored-by: Aditya * fix: setting totalySupply to empty * nit: CamelCase not UPPERCASE Co-authored-by: Aditya Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Create test chain with multiple validators (#942) * testing: adding multiple sender accounts for testing puproses * fix genesis setup (#936) * Update testing/chain.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * refactor: code hygiene * Update testing/chain.go Co-authored-by: Aditya * multi validator commit taken from @saione * add function to pass custom valset * add changelog Co-authored-by: Sean King Co-authored-by: Sean King Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * add changelog entry for SDK bump * fix: classify client states without consensus states as expired (#941) ## Description closes: #850 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * chore: fix broken link (#972) * add backport actions for v1.3.x and v2.1.x (#958) * Revert "feat: adding Pack/Unpack acknowledgement helper fns (#895)" (#973) This reverts commit 843b459635da8cedd92945141c4efe3a762f305d. Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> * chore: update migration docs (#985) * chore: update migration docs * Update docs/migrations/v2-to-v3.md Co-authored-by: Damian Nolan Co-authored-by: Damian Nolan * chore: fix mispelled words (#991) * fix: remove go mod tidy from proto-gen script (#989) * bug: support base denoms with slashes (#978) * bug: support base denoms with slashes * add changelog entry Co-authored-by: Carlos Rodriguez * upgrade ics23 to v0.7 (#948) * upgrade ics23 to v0.7-rc * add changelog entry * update ics23 to final 0.7 Co-authored-by: Carlos Rodriguez * ibctesting: make `testing.T` public (#1020) * add changelog entry for #941 * fix package import (#1007) * feat: Add a function to initialize the ICS27 module via an upgrade proposal (#1037) ## Description closes: #1034 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * docs: add missing args to NewKeeper in integration docs (#1038) ## Description This add some missing arguments to `ibckeeper.NewKeeper` and `ibctransferkeeper.NewKeeper` in integration docs --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [x] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * small fixes for v2 to v3 migration (#1016) * small fixes for v2 to v3 migration * review comment * Update v2-to-v3.md * add store upgrade documentation Co-authored-by: Carlos Rodriguez * add missing slash * build(deps): bump actions/checkout from 2.4.0 to 3 (#1045) Bumps [actions/checkout](https://github.com/actions/checkout) from 2.4.0 to 3.
Release notes

Sourced from actions/checkout's releases.

v3.0.0

  • Update default runtime to node16
Changelog

Sourced from actions/checkout's changelog.

Changelog

v2.3.1

v2.3.0

v2.2.0

v2.1.1

  • Changes to support GHES (here and here)

v2.1.0

v2.0.0

v2 (beta)

  • Improved fetch performance
    • The default behavior now fetches only the SHA being checked-out
  • Script authenticated git commands
    • Persists with.token in the local git config
    • Enables your scripts to run authenticated git commands
    • Post-job cleanup removes the token
    • Coming soon: Opt out by setting with.persist-credentials to false
  • Creates a local branch
    • No longer detached HEAD when checking out a branch
    • A local branch is created with the corresponding upstream branch set
  • Improved layout

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=2.4.0&new-version=3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
* call packet.GetSequence() rather than passing the func as argument (#995) * Add counterpartyChannelID param to IBCModule.OnChanOpenAck (#1086) * add counterpartyChannelID param to IBCModule OnChanOpenAck() * change testing mock * change ica IBCModules ChannelOpenAck * change transfer IBCModules ChannelOpenAck * change core keeper ChannelOpenAck() * CHANGELOG.md * update v2-to-v3 migration doc * Update docs/migrations/v2-to-v3.md Co-authored-by: Carlos Rodriguez Co-authored-by: Carlos Rodriguez * fix mirgation docs (#1091) * fix: handle testing update client errors (#1094) * replace channel keeper with IBC keeper in AnteDecorator (#950) * replace channel keeper with IBC keeper in AnteDecorator and pass message to rpc handler * fix error checking condition * fix for proper way of getting go context * refactor tests for ante handler * review comment * review comments and some fixes * review comments * execute message for update client as well * add migration Co-authored-by: Carlos Rodriguez * add backport rules for v1.4.x and v2.2.x (#1085) * ibctesting: custom voting power reduction for testing (#939) * ibctesting: custom voting power reduction for testing * changelog * fix * make T public * fix * revert changes * fix test * build(deps): bump github.com/spf13/cobra from 1.3.0 to 1.4.0 (#1105) * build(deps): bump google.golang.org/grpc from 1.44.0 to 1.45.0 (#1098) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.44.0 to 1.45.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.44.0...v1.45.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: adjust InitModule to account for empty controller and host keepers (#1120) ## Description closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [x] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [x] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [x] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [x] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [x] Review `Codecov Report` in the comment section below once CI passes * Merge pull request from GHSA-j658-c98j-fww4 Co-authored-by: Carlos Rodriguez * fixes for the documentation about handling ack for SDK <= 0.45 (#1122) * fixes for documentation * review comment Co-authored-by: Carlos Rodriguez * Allow testing to update ValidatorSet (#1003) * testing: adding multiple sender accounts for testing puproses * fix genesis setup (#936) * Update testing/chain.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * refactor: code hygiene * Update testing/chain.go Co-authored-by: Aditya * multi validator commit taken from @saione * add function to pass custom valset * create simplest failing test * progress * fix changevalset test * fix errors in tendermint package * fix client types test * fix client keeper * fix cap functions * fix genesis core tests * fix ica tests * fix doc * CHANGELOG * replace signer array with signer map * add documentation * fix merge * documentation * ordered signer array doc * add new delegation and comment to change valset test Co-authored-by: Sean King Co-authored-by: Sean King Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Carlos Rodriguez * imp: create codeql-analysis action (#1128) ## Description Noticed that [CodeQL](https://codeql.github.com/) wasn't enabled on the IBC-go repo --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * update changelog (#1131) * update changelog * fix typo * build(deps): bump github.com/stretchr/testify from 1.7.0 to 1.7.1 (#1134) Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.7.0 to 1.7.1. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.7.0...v1.7.1) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Damian Nolan * call packet.GetSequence() rather than passing the func as argument (#1130) * call packet.GetSequence() rather than passing the func as argument * add changelog entry * fix: prefix ResponseResultType enum for proto linting (#1143) * build(deps): bump actions/cache from 2.1.7 to 3 (#1150) Bumps [actions/cache](https://github.com/actions/cache) from 2.1.7 to 3. - [Release notes](https://github.com/actions/cache/releases) - [Commits](https://github.com/actions/cache/compare/v2.1.7...v3) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fixes for go-releaser configuration (#1148) * set the pre-release status if the tag contains alpha, beta or rc * add separate filter for final releases * add banner image (#1158) Co-authored-by: Carlos Rodriguez * Add alpha, beta, and rc release definitions (#1151) ## Description The proposed definitions for each phase of our release cycle. Please feel free to adjust my wording closes: #881 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * build(deps): bump google.golang.org/protobuf from 1.27.1 to 1.28.0 (#1164) Bumps [google.golang.org/protobuf](https://github.com/protocolbuffers/protobuf-go) from 1.27.1 to 1.28.0.
Release notes

Sourced from google.golang.org/protobuf's releases.

v1.28.0

Overview

The release provides a new unmarshal option for limiting the recursion depth when unmarshalling nested messages to prevent stack overflows. (UnmarshalOptions.RecursionLimit).

Notable changes

New features:

  • CL/340489: testing/protocmp: add Message.Unwrap

Documentation improvements:

  • CL/339569: reflect/protoreflect: add more docs on Value aliasing

Updated supported versions:

UnmarshalOption RecursionLimit

  • CL/385854: all: implement depth limit for unmarshalling

The new UnmarshalOptions.RecursionLimit limits the maximum recursion depth when unmarshalling messages. The limit is applied for nested messages. When messages are nested deeper than the specified limit the unmarshalling will fail. If unspecified, a default limit of 10,000 is applied.

In addition to the configurable limit for message nesting a non-configurable recursion limit for group nesting of 10,000 was introduced.

Upcoming breakage changes

The default recursion limit of 10,000 introduced in the release is subject to change. We want to align this limit with implementations for other languages in the long term. C++ and Java use a limit of 100 which is also the target for the Go implementation.

Commits
  • 32051b4 all: release v1.28.0
  • 3992ea8 all: implement depth limit for unmarshaling
  • e5db296 all: update supported versions
  • 3a9e1dc all: gofmt all
  • 26e8bcb all: remove unnecessary string([]byte) conversion in fmt.Sprintf with %s
  • 5aec41b testing/protocmp: add Message.Unwrap
  • 05be61f reflect/protoreflect: add more docs on Value aliasing
  • b03064a all: start v1.27.1-devel
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/protobuf&package-manager=go_modules&previous-version=1.27.1&new-version=1.28.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
* fix typos in the controller params (#1172) ## Description closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * add versions for new releases (#1175) ## Description closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * fix: link checker reporting broken milestone link (#1200) * update roadmap for q2 2022 and deleted history roadmap (don't think we'll need it) * requirements document for ICA (#1173) * add requirements document for interchain accounts * fix branch * added number in tittle. * apply suggestions from review Co-authored-by: Aditya * review comment Co-authored-by: Carlos Rodriguez Co-authored-by: Aditya * imp: improve Logger performance (#1160) * fix: Logger marshal errors * changelog * update * ICS 29: Fee Middleware (#276) * scaffolding for 29-fee (#274) * scaffolding for 29-fee * fix build * update keeper test * remove module test * feat: adding proto files for fee payment middleware (#272) * feat: adding proto files for fee payment middleware * grammar * fix: remove generated .pb files * fix: comment * feat: adding PacketId type * refactor: fee / genesis * refactor: escrowed fees map * Apply suggestions from code review Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update proto/ibc/applications/middleware/fee/v1/tx.proto Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update proto/ibc/applications/middleware/fee/v1/tx.proto Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update proto/ibc/applications/middleware/fee/v1/tx.proto Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * refactor: use packetID + minor changes * feat: adding query for all incentivized packets + some fixes * feat: adding pagination to incentivized query * fix: removing generated ibc directory + adding import/yaml * fix: naming * increase max depth for proto file searching and make proto all * Update proto/ibc/applications/middleware/fee/v1/fee.proto Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * refactor: remove file imports/add yaml/add argument for requests * refactor: updating IdentifiedPacketFee * fix: remove hidden file * removing middleware dir & adding query * remove junk file and update query rpcs * Apply suggestions from code review * Apply suggestions from code review * remove query yaml, make proto-all Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Aditya Sripal * fix: removing unncessary fields MsgEscrow & adding query params (#300) * fix: removing unncessary fields MsgEscrow & adding query params * fix: grammar * fix: add yaml * feat: #258 Register Counterparty Address (#376) * feat: adding MsgServer for RegisterCounterPartyAddress & EscrowPacketFree * test: adding test for ValidateBasic * fix: removing validate basic check * fix: removing empty file * Update modules/apps/29-fee/keeper/msg_server.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update modules/apps/29-fee/types/msgs.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update modules/apps/29-fee/types/keys.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update modules/apps/29-fee/keeper/keeper.go Co-authored-by: Aditya * fix: fixing typos, variable names, comments * fix: updating import comments * test: adding test for KeyRelayerAddress * update: comments & key_test * Update modules/apps/29-fee/keeper/msg_server.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * fix: error message * docs: updating RegisterCounterpartyAddress fn description Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Aditya * fix: remove comments for imports (#385) * feat: Add handshake logic to ics29 (#307) * do handshake logic, create test file * do cap logic and fix build * open handshake implementation and tests * remove prints * Update modules/apps/29-fee/module.go Co-authored-by: Sean King * debugging progress * fee enabled flag * cleanup handshake logic * fix tests * much cleaner simapp * split module.go file * cleanup and docs * assert IBC interfaces are fulfilled in middleware * Update modules/apps/transfer/module.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * fix unnecessary crossing hello logic * fix version negotiation bugs and improve tests * cleanup tests * Apply suggestions from code review Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * address rest of colin comments Co-authored-by: Sean King Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Fee Middleware: Escrow logic (#465) * fix: adding second endpoint for async pay fee + renaming types * feat: adding escrow logic * feat: updating proto types & escrow logic * fix: stub fn & proto comment * feat: adding PayFee & PayFeeTimeout & escrow_test * test: adding happy path for EscrowPacketFee * fix: comments, error handling * fix: comments & grammar * test: adding unhappy path for escrow * tests(escrow): adding hasBalance check for module acc * test(PayFee): adding happy path for PayFee tests * tests(PayFee, PayFeeTimeout): adding tests * fix: adding relayers back to IdentifiedPacket * fix: removing refund acc from key * fix: storing IdentifiedPacketFee in state instead of Fee * feat: adding msg_server test for registerCPAddr, wiring for codec + stubs for sdk.Msg interface * test: adding msg_server test for PayPacketFee * test: adding PayPacketFeeAsync msg_server test * chore: updating PayFee -> DistributeFee & minor nits * nit: removing unnecessary nil check * refactor: add portId to store key & use packetId as param * fix: add DeleteFeeInEscrow & remove fee on successful distribution * tests: adding validation & signer tests for PayFee/Async & updating proto to use Signer sdk standard * chore: adding NewIdentifiedPacketFee fn * fix: getter/setter for counterparty address + fix NewIdentifiedPacketFee * fix: updating EscrowPacketFee with correct usage of coins api * test: adding balance check for refund acc after escrow * fix: remove unncessary errors * test: updating escrow tests + miscellaneous fixes * nit: updating var names * docs: godoc * refactor: IdentifiedPacketFee & Fee no longer pointers * fixes: small fixes * Update modules/apps/29-fee/keeper/escrow.go Co-authored-by: Aditya * Update modules/apps/29-fee/keeper/escrow.go Co-authored-by: Aditya * Update modules/apps/29-fee/keeper/keeper.go Co-authored-by: Aditya * Update modules/apps/29-fee/keeper/msg_server.go Co-authored-by: Aditya * Update modules/apps/29-fee/keeper/msg_server.go Co-authored-by: Aditya * Update modules/apps/29-fee/types/msgs.go Co-authored-by: Aditya * nit: proto doc & error fix * fix: escrow test * test: updating distribute fee tests * test: adding validation check for fee and updating tests * test: allow counterparty address to be arbitrary string * fix: message validation should pass if one fee is valid * Update modules/apps/29-fee/keeper/escrow.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update modules/apps/29-fee/keeper/escrow.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * fix: nits * Update modules/apps/29-fee/keeper/escrow.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * test: adding isZero check for msgs Co-authored-by: Aditya Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * feat: update protos, grpc queries (#488) * store refund address in IdentifiedPacketFee (#546) * 29-Fee: Genesis (#557) * proto: adding genesis state * feat: add GetAllIdentifiedPacketFees * feat: adding genesis.go & updating proto + app.go * fix: removing PortId from genesis * feat: adding GetAll for relayer addr/fee enabled chan + update genesis * test: TestExportGenesis * feat: update type + hook up to module.go * fix: remove PortKey * fix: imports + remove scoped keeper * nit: using NewPacketId helper and updating helper def to have correct params * feat: adding genesis validation + tests (#561) * feat: adding genesis validation + tests * fix: imports * Update modules/apps/29-fee/types/genesis.go * fix: nit * Update modules/apps/29-fee/types/genesis_test.go Co-authored-by: Aditya * nit: imporve default gen val test * chore: move packetId + val to channeltypes and use validate fn Co-authored-by: Aditya * feat: add incentivised ack proto (#564) * proto file * incentivized ack proto * Fee Closing Handshake (#551) * add iterate logic * add closing logic with tests * add comments for panic * change invariant breaking recovery to disabling middleware rather than panicing * docs, tests, minor refactor * Fee Middleware: Add ICS4 wrapper (#562) * chore: add ICS4 wrapper * fix: remove channelKeeper sender packet * chore: add WriteAck * feat: ics 29 packet callbacks (#357) * update imports to v3 * regenerate proto files * fix build * fix: event caching for fee distribution (#661) * proto file * initial impl * apply self review suggestions Deduplicate fee distribution code. Rename DistributeFee to DistributePacketFees. Rename DistributeFeeTimeout to DistributePacketFeesOnTimeout * fixup tests rename validCoins. DistributePacketFeesOnTimeout no longer has a valid error case Add test case for invalid forward relayer address on DistributePacketFees. * partially fix tests timeout fee is still being distributed depsite WriteFn() not being called * fix tests * address code nit Co-authored-by: Colin Axnér <25233464+colin-axner@users.noreply.github.com> * ics4 callbacks fee middleware (#580) * feat: adding WriteAcknowledgement * updating genesis & relayer prefix * fix: comment * fix: comments * Update modules/apps/29-fee/keeper/relay.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * feat: add DeleteForwardRelayerAddr helper + use Set in ack * fix: SetForwardAddr * chore: add panic * fix: remove fmt * test: add WriteAcknowledgement test * Update modules/apps/29-fee/ibc_module.go Co-authored-by: Aditya * fix: remove print * fix: WriteAck * fix: use constructor * Update modules/apps/29-fee/keeper/keeper.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * fix: nits * fix: remove found var not used * test: adding check that forward relayer address is successfully deleted if set * fix: merge issues Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Aditya * chore: making PacketId non nullable (#737) * nits: proto spacing + naming (#739) * nits: proto spacing + naming * nit: update comment * fix: go.mod * nit: option above import proto * fix: spacing * sean/fix-proto-identified-fee-not-null (#746) * nits: more ics29 nits (#741) * nits: remove capital from error + add godoc * nit: add Wrapf * nit: use strings.TrimSpace * nit: add err type for MsgPayPacketFee * refactor: app version + add comment (#750) * chore: remove error * test: add test for whitespaced empty string * nit: update err syntax (#747) * nit: update err syntax * nit: more * nit: err syntax * feat: adding Route, Type, GetSignBytes for all messages (#743) * feat: adding Route, Type, GetSignBytes for all messages * tests: adding tests for Route/Type/GetSignBytes * hygiene: add validate fn for Fee (#748) * hygiene: add validate fn for Fee * Update modules/apps/29-fee/types/msgs.go Co-authored-by: Damian Nolan * fix: error message * test: move Validate to fee.go & abstract out test * chore: remove test cases Co-authored-by: Damian Nolan * fix: app.go (#789) * refactor: ics29 json encoded version metadata (#883) * adding metadata type to ics29 protos * updating ics29 handshake handlers to support json encoded metadata * updating tests to support json encoded metadata * Update modules/apps/29-fee/ibc_module.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update modules/apps/29-fee/ibc_module.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * renaming metadata version to fee_version Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * fix: return nil on OnRecvPacket for async pay (#911) * nit: ics29 comments (#910) * fix: comments * Update modules/apps/29-fee/keeper/escrow.go Co-authored-by: Aditya * chore: Add transfer test for ics29 (#901) * begin writing transfer test for ics29 * finish writing transfer test * refactor: ics29 OnChanOpenInit callback tests now use mock module (#924) * refactor: OnChanOpenInit callback tests now use mock module * Update modules/apps/29-fee/fee_test.go * feat: allow multiple addrs to incentivize packets (#915) * [WIP] allow multiple addresses to incentivize a packet * distribute multiple fees, fix broken tests * use NewIdentifiedPacketFees in EscrowPacketFee * cleanup var naming * removing commented out code and adding test case * Update modules/apps/29-fee/ibc_module.go Co-authored-by: Aditya * fix: refund RecvFee if ForwardAddr is invalid * test: update tests to distribute multiple identified fees * refactor: clean up DistrPacketFees * refactor: using .Empty() helper func for code hygiene Co-authored-by: Aditya Co-authored-by: Sean King Co-authored-by: Sean King * chore: remove spec directory from ics29 (#934) * refactor: use mock module for ics29 closing handshakes (#926) * refactor: use mock module for closing handshakes in ics29 * self-review fix * refactor: use mock module for ics29 grpc_query_test.go (#933) * refactor: readjust keeper_test.go to use mock module (#930) * fix: fields for genesis should be non nullable (#938) * refactor: use mock module for ics29 escrow_test.go (#932) * refactor: use mock module for ics29 genesis_test.go (#931) * ics29:feat: emit event escrow (#914) * feat: emit EventTypeSendIncentivizedPacket event on EscrowPacket * fix: string conversion * refactor: add helper fn for emit event * chore: godoc * nit: use .String()) * refactor: OnRecvPacket to use mock module (#927) Co-authored-by: Sean King * refactor: ics29 OnChanOpenTry/Ack use mock module for testing instead of ics20 (#925) Co-authored-by: Sean King * refactor: use mock module for OnAcknowledgePacket callback testing (#929) Co-authored-by: Sean King * refactor: OnTimeoutPacket to use mock module (#928) Co-authored-by: Sean King * chore: add packet id arg to EscrowPacketFee (#951) * adding packet id arg to EscrowPacketFee * updating tests * review adaptations * chore: remove legacy testing functions (#954) * fix:ics29: WriteAck update + adding success bool to IncentivizedAck (#952) * fix: updating WriteAck & adding Success boolean to IncentivizedAcknowledgement * feat: adding check of is fee enabled * nit: change successful to underlying_application_success * test: adding seperate test for fee disabled write async * Update modules/apps/29-fee/ibc_module_test.go Co-authored-by: Aditya * test: adding check to compare hash of acks * fix: var name Co-authored-by: Aditya * chore: add cli cmd to incentivize existing packet (async) (#965) * chore: add cli to incentivize existing packets * Update modules/apps/29-fee/client/cli/cli.go * Update modules/apps/29-fee/client/cli/cli.go Co-authored-by: Aditya * chore: update cli example Co-authored-by: Aditya * ics29:fix: counterparty addr must contain channelID (#937) * fix: counterparty address must chain channelID * nit: updating var name * test: adding validation check for channelID * nit: fn names * chore: fix err msg (#971) * ics29:fix: store source address for query later on WriteAck (#912) * fix: for async WriteAck store source address for query later * ics29:fix: update genesis type (#913) * fix: adding ForwardRelayerAddresses to genesis * fix: trimspace on string check * nit: err + trimspace error case * refactor: updating WriteAck + keeper fn name * Update modules/apps/29-fee/keeper/relay.go Co-authored-by: Damian Nolan * chore: remove legacy testing functions (#954) * fix:ics29: WriteAck update + adding success bool to IncentivizedAck (#952) * fix: updating WriteAck & adding Success boolean to IncentivizedAcknowledgement * feat: adding check of is fee enabled * nit: change successful to underlying_application_success * test: adding seperate test for fee disabled write async * Update modules/apps/29-fee/ibc_module_test.go Co-authored-by: Aditya * test: adding check to compare hash of acks * fix: var name Co-authored-by: Aditya Co-authored-by: Damian Nolan Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Aditya * refactor: make fee storage more efficient (#956) * adding new proto types and codegen * refactoring ics29 fees for more efficient storage * updating tests * fixing typo in protodoc comments * chore: update ics29 genesis state to support multiple packet fees (#957) * adding new proto types and codegen * refactoring ics29 fees for more efficient storage * updating tests * updating genesis protos to use IdentifiedPacketFees * updating init/export genesis state functionality and tests * chore: update MsgPayPacketFeeAsync fields (#979) * adding new proto types and codegen * refactoring ics29 fees for more efficient storage * updating tests * fixing typo in protodoc comments * updating protos and codegen * updating MsgPayPacketFeeAsync handler and tests * chore: add ParseKeyFeesInEscrow helper function (#998) * chore: update grpc queries to handle multiple fees (#967) * adding new proto types and codegen * refactoring ics29 fees for more efficient storage * updating tests * updating protos and existing queries * updating grpc queries and refactoring tests * format error correct in favour of proto string() method * leveraging ParseKeyFeesInEscrow to obtain packet id in query * feat: CLI cmd for MsgRegisterCounterpartyAddress (#987) * feat: CLI cmd for MsgRegisterCounterpartyAddress * fix: examples * Update modules/apps/29-fee/client/cli/tx.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * Update modules/apps/29-fee/client/cli/tx.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * chore: remove print * nit: update address for counterparty Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * fix: ics29: switch source with destintion for chan/port IDs (#961) * fix: switch source with destintion for chan/port IDs * fix: blunder * test: adding tests in case of incorrect channel/port id * test: moving check to WriteAcknowledgement * add test case for Get/Set counterparty address * nit: path name * Update modules/apps/29-fee/keeper/msg_server_test.go * test: cleanup 29-fee/types tests (#1006) * feat: grpc query total recv packet fees (#1015) * adding query for total packet recv fees to proto query server * adding total packet recv fee query impl and tests * updating doc comments * chore: switch code ordering (#1025) * feat: Add ParseKeyFeeEnabled and rename FeeEnabledKey -> KeyFeeEnabled (#1023) * chore: add ParseKeyFeesInEscrow helper function * feat: add ParseKeyFeeEnabled function and rename FeeEnabledKey to KeyFeeEnabled * feat: ics29 cli for query total recv fees (#1035) * feat: grpc query total ack fees (#1032) * adding query for total packet recv fees to proto query server * adding total packet recv fee query impl and tests * updating doc comments * adding protos and codegen * adding total ack fees query and tests * fixing protodoc comment * feat: grpc query total timeout fees (#1033) * adding query for total packet recv fees to proto query server * adding total packet recv fee query impl and tests * updating doc comments * adding protos and codegen * adding total ack fees query and tests * adding protos and codegen * adding query total timeout fees and tests * fixing protodoc comment * fixing protodoc comment * feat: adding clis for total ack and timeout queries (#1043) * add ParseKeyForwardRelayerAddress function + test (#1046) * chore: remove unused ics29 keeper funcs (#1044) * removing keys, adding additional test, moving event attribute keys * removing unused code and updating tests * removing unused IdentifiedPacketFee type * chore: add gRPC for querying incentivized packets for a specific channel (#983) * generate proto files * feat: add gRPC for querying incentivized packets for a specific channel * test: add gRPC test for incentivized packets for channel query * fix build * partially fix tests * chore: fix tests * deduplicate code * chore: code cleanup * fix build * remove changes from merge conflict * nit: rename c to goCtx * add function EscrowAccountHasBalance (#1042) * add function EscrowAccountHasBalance * change API to use sdk.Coins * feat: ParseKeyCounterpartyRelayer function (#1047) * chore: adding queries to cmd builder (#1057) * chore: update ics29 protodocs (#1055) * updating protodocs comments and regen code/docs * Update proto/ibc/applications/fee/v1/tx.proto Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * updating incentivized ack doc Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> * add counter party channel ID to argument list of on channel open ack (#1159) Co-authored-by: Carlos Rodriguez * ADR 004: Fee module locking in the presence of severe bugs (#1060) * add adr 004 * add to README * Update docs/architecture/adr-004-ics29-lock-fee-module.md Co-authored-by: Aditya * Update docs/architecture/adr-004-ics29-lock-fee-module.md Co-authored-by: Aditya Co-authored-by: Carlos Rodriguez Co-authored-by: Aditya * nit: packetID var name (#1214) * ics29: update with changes from main (#1221) * add banner image (#1158) Co-authored-by: Carlos Rodriguez * Add alpha, beta, and rc release definitions (#1151) ## Description The proposed definitions for each phase of our release cycle. Please feel free to adjust my wording closes: #881 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * build(deps): bump google.golang.org/protobuf from 1.27.1 to 1.28.0 (#1164) Bumps [google.golang.org/protobuf](https://github.com/protocolbuffers/protobuf-go) from 1.27.1 to 1.28.0.
Release notes

Sourced from google.golang.org/protobuf's releases.

v1.28.0

Overview

The release provides a new unmarshal option for limiting the recursion depth when unmarshalling nested messages to prevent stack overflows. (UnmarshalOptions.RecursionLimit).

Notable changes

New features:

  • CL/340489: testing/protocmp: add Message.Unwrap

Documentation improvements:

  • CL/339569: reflect/protoreflect: add more docs on Value aliasing

Updated supported versions:

UnmarshalOption RecursionLimit

  • CL/385854: all: implement depth limit for unmarshalling

The new UnmarshalOptions.RecursionLimit limits the maximum recursion depth when unmarshalling messages. The limit is applied for nested messages. When messages are nested deeper than the specified limit the unmarshalling will fail. If unspecified, a default limit of 10,000 is applied.

In addition to the configurable limit for message nesting a non-configurable recursion limit for group nesting of 10,000 was introduced.

Upcoming breakage changes

The default recursion limit of 10,000 introduced in the release is subject to change. We want to align this limit with implementations for other languages in the long term. C++ and Java use a limit of 100 which is also the target for the Go implementation.

Commits
  • 32051b4 all: release v1.28.0
  • 3992ea8 all: implement depth limit for unmarshaling
  • e5db296 all: update supported versions
  • 3a9e1dc all: gofmt all
  • 26e8bcb all: remove unnecessary string([]byte) conversion in fmt.Sprintf with %s
  • 5aec41b testing/protocmp: add Message.Unwrap
  • 05be61f reflect/protoreflect: add more docs on Value aliasing
  • b03064a all: start v1.27.1-devel
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/protobuf&package-manager=go_modules&previous-version=1.27.1&new-version=1.28.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
* fix typos in the controller params (#1172) ## Description closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * add versions for new releases (#1175) ## Description closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * fix: link checker reporting broken milestone link (#1200) * update roadmap for q2 2022 and deleted history roadmap (don't think we'll need it) * requirements document for ICA (#1173) * add requirements document for interchain accounts * fix branch * added number in tittle. * apply suggestions from review Co-authored-by: Aditya * review comment Co-authored-by: Carlos Rodriguez Co-authored-by: Aditya * imp: improve Logger performance (#1160) * fix: Logger marshal errors * changelog * update Co-authored-by: Carlos Rodriguez Co-authored-by: Carlos Rodriguez Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Damian Nolan Co-authored-by: Aditya Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Sean King Co-authored-by: Charly Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Carlos Rodriguez Co-authored-by: Carlos Rodriguez Co-authored-by: Luke Rhoads <51463884+lukerhoads@users.noreply.github.com> Co-authored-by: Damian Nolan Co-authored-by: Dev Ojha Co-authored-by: Jack Zampolin Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: Leo Pang <34628052+allthatjazzleo@users.noreply.github.com> Co-authored-by: Barrie Byron Co-authored-by: Tyler <48813565+technicallyty@users.noreply.github.com> Co-authored-by: technicallyty <48813565+tytech3@users.noreply.github.com> Co-authored-by: Barrie Byron Co-authored-by: Marko Co-authored-by: Marko Baricevic Co-authored-by: Aleksandr Bezobchuk Co-authored-by: nir1218 Co-authored-by: Carlos Rodriguez Co-authored-by: Assaf Morami Co-authored-by: Dan McCandless Co-authored-by: Ramiro Carlucho Co-authored-by: frog power 4000 Co-authored-by: Sean King * build(deps): bump codecov/codecov-action from 2.1.0 to 3 (#1222) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 2.1.0 to 3. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v2.1.0...v3) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * ics29: feat: CLI query commands for packets (#1229) * feat: adding query for getting incentivized packet by packet-id * feat: add cli for getting all incentivized packets across all channels * nits: suggestions * Update modules/apps/29-fee/client/cli/query.go Co-authored-by: Damian Nolan * chore: changelog * nits: comments Co-authored-by: Damian Nolan * add check for blocked addr for forward relayer distribution (#1231) * feat: ics29 counterparty address grpc query and CLI (#1224) * generating codegen protobufs for query counterparty address * adding grpc query, tests and cli * Update modules/apps/29-fee/keeper/grpc_query_test.go Co-authored-by: Sean King * Update modules/apps/29-fee/keeper/grpc_query_test.go Co-authored-by: Sean King * updating godoc * adding changelog * updating cli descriptions for ics29 Co-authored-by: Sean King * chore: fix go ctx arg naming in ics29 grpc queries (#1226) * chore: ics29 module housekeeping cleanup (#1227) * feat: ics29 fee enabled channel queries (#1225) * adding protobuf codegen * adding grpc queries and tests * adding clis for queries * adding changelog * resolving nits from pr review * updating grpc gateway options * chore: cleanup OnAcknowledgement and OnTimeout code ics29 (#1228) * add changelog entry for #276 (#1233) * feat: adding CLI for getting incentivized packets on a specific channel (#1230) * feat: adding CLI for getting incentivized packets on a specific channel * chore: changelog * refactor: usage * chore: ics29 cleanup, addressing nits (#1236) * refactor: moving fn definition to bottom of file and switching params (#1232) ## Description closes: #868 #997 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * feat: allow ability to lock fee module in presence of severe bug (#1239) * apply code changes from pr #1031 * update comments * chore: update fee module is locked error string * update godoc to reference ADR 004 * add more references to ADR 004 * build(deps): bump actions/download-artifact from 2 to 3 (#1241) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2 to 3.
Release notes

Sourced from actions/download-artifact's releases.

v3.0.0

What's Changed

Breaking Changes

With the update to Node 16, all scripts will now be run with Node 16 rather than Node 12.

v2.1.0 Download Artifact

  • Improved output & logging
  • Fixed issue where downloading all artifacts could cause display percentages to be over 100%
  • Various small bug fixes & improvements

v2.0.10

  • Retry on HTTP 500 responses from the service

v2.0.9

  • Fixes to proxy related issues

v2.0.8

  • Improvements to retryability if an error is encountered during artifact download

v2.0.7 download-artifact

  • Improved download retry-ability if a partial download is encountered

v2.0.6

Update actions/core NPM package that is used internally

v2.0.5

  • Add Third Party License Information

v2.0.4

  • Use the latest version of the @actions/artifact NPM package

v2.0.3

  • Misc improvements

v2.0.2

  • Support for tilde expansion

v2.0.1

  • Download path output
  • Improved logging
Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/download-artifact&package-manager=github_actions&previous-version=2&new-version=3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
* build(deps): bump actions/upload-artifact from 2 to 3 (#1240) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3.
Release notes

Sourced from actions/upload-artifact's releases.

v3.0.0

What's Changed

  • Update default runtime to node16 (#293)
  • Update package-lock.json file version to 2 (#302)

Breaking Changes

With the update to Node 16, all scripts will now be run with Node 16 rather than Node 12.

v2.3.1

Fix for empty fails on Windows failing on upload #281

v2.3.0 Upload Artifact

  • Optimizations for faster uploads of larger files that are already compressed
  • Significantly improved logging when there are chunked uploads
  • Clarifications in logs around the upload size and prohibited characters that aren't allowed in the artifact name or any uploaded files
  • Various other small bugfixes & optimizations

v2.2.4

  • Retry on HTTP 500 responses from the service

v2.2.3

  • Fixes for proxy related issues

v2.2.2

  • Improved retryability and error handling

v2.2.1

  • Update used actions/core package to the latest version

v2.2.0

  • Support for artifact retention

v2.1.4

  • Add Third Party License Information

v2.1.3

  • Use updated version of the @action/artifact NPM package

v2.1.2

  • Increase upload chunk size from 4MB to 8MB
  • Detect case insensitive file uploads

v2.1.1

  • Fix for certain symlinks not correctly being identified as directories before starting uploads

v2.1.0

  • Support for uploading artifacts with multiple paths
  • Support for using exclude paths
  • Updates to dependencies

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/upload-artifact&package-manager=github_actions&previous-version=2&new-version=3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
* build(deps): bump actions/setup-go from 2 to 3 (#1242) Bumps [actions/setup-go](https://github.com/actions/setup-go) from 2 to 3.
Release notes

Sourced from actions/setup-go's releases.

v3.0.0

What's Changed

Breaking Changes

With the update to Node 16, all scripts will now be run with Node 16 rather than Node 12.

This new major release removes the stable input, so there is no need to specify additional input to use pre-release versions. This release also corrects the pre-release versions syntax to satisfy the SemVer notation (1.18.0-beta1 -> 1.18.0-beta.1, 1.18.0-rc1 -> 1.18.0-rc.1).

steps:
  - uses: actions/checkout@v2
  - uses: actions/setup-go@v3
    with:
      go-version: '1.18.0-rc.1'
  - run: go version

Add check-latest input

In scope of this release we add the check-latest input. If check-latest is set to true, the action first checks if the cached version is the latest one. If the locally cached version is not the most up-to-date, a Go version will then be downloaded from go-versions repository. By default check-latest is set to false. Example of usage:

steps:
  - uses: actions/checkout@v2
  - uses: actions/setup-go@v2
    with:
      go-version: '1.16'
      check-latest: true
  - run: go version

Moreover, we updated @actions/core from 1.2.6 to 1.6.0

v2.1.5

In scope of this release we updated matchers.json to improve the problem matcher pattern. For more information please refer to this pull request

v2.1.4

What's Changed

New Contributors

Full Changelog: https://github.com/actions/setup-go/compare/v2.1.3...v2.1.4

v2.1.3

  • Updated communication with runner to use environment files rather then workflow commands

v2.1.2

This release includes vendored licenses for this action's npm dependencies.

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-go&package-manager=github_actions&previous-version=2&new-version=3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
* build(deps): bump github.com/cosmos/cosmos-sdk from 0.45.1 to 0.45.3 (#1247) Bumps [github.com/cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) from 0.45.1 to 0.45.3. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.45.3/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/v0.45.1...v0.45.3) --- updated-dependencies: - dependency-name: github.com/cosmos/cosmos-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(ics29): refund fees on distribution failure (#1245) * attempt to refund fees if distribution fails * adapting logic and updating testcases * updating inline comments * updating refund address testcase * refactor: Fix RefundFeesOnChannel (#1244) ## Description read #1060 closes: #860 closes: #780 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [x] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [x] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [x] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [x] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [x] Review `Codecov Report` in the comment section below once CI passes * deprecate GetTransferAccount (#1250) * deprecate GetTransferAccount * add changelog entry * remove unused imports * docs: replace links in apps with correct ones (#1255) ## Description I noticed that 2 links at the bottom of the applications docs page were not correct. closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * update godoc of `RegisterInterchainAccount` (#1256) ## Description The godoc of `RegisterInterchainAccount` was still saying that the port identifier was constructed using as well the connection identifiers. I corrected that. closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * isolate packet fee distribution for on acknowledgement and on timeout into separate functions (#1253) ## Description Reduces the complexity contained in `DistributePacketFees` and `DistributePacketFeesOnAcknowledgement` in anticipation of #1251 closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * Update supported release lines (#1263) ## Description closes: #1152 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * ics29: gracefully handle escrow out of balance edge case during fee distribution (#1251) ## Description closes: #821 --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [x] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [x] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [x] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [x] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [x] Review `Codecov Report` in the comment section below once CI passes * build(deps): bump github.com/spf13/viper from 1.10.1 to 1.11.0 (#1264) Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.10.1 to 1.11.0. - [Release notes](https://github.com/spf13/viper/releases) - [Commits](https://github.com/spf13/viper/compare/v1.10.1...v1.11.0) --- updated-dependencies: - dependency-name: github.com/spf13/viper dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(ics29): make EscrowPacketFee private (#1252) * making EsrowPacketFee private, adapting test cases to conform * refactor msg server tests to accomoodate escrowPacketFee * adding assertions on escrow account balance * adding error checks on bank sends in tests, omitting loop as per review * adding escrow balance checks to TestPayPacketFee * adding assertions on expected fees in state * add missing changelog entry for bump of sdk 0.45.3 (#1272) ## Description closes: #XXXX --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [x] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes * feat: Add GetAppVersion to ICS4Wrapper (#1022) * feat: Add ICS4Wrapper function GetChannelVersion Add a function to 04-channel keeper which can be used in the ICS4Wrapper interface for obtaining the unwrapped channel verison * add docs * chore: rename GetChannelVersion to GetUnwrappedChannelVersion * add changelog entry * Update CHANGELOG.md * Update docs/ibc/middleware/develop.md * Update docs/ibc/middleware/develop.md * chore: GetUnwrappedChannelVersion -> GetAppVersion * add GetAppVersion for ics29 * add GetAppVersion to ics27 * add extra test for 29-fee * update docs * Apply suggestions from code review Co-authored-by: Sean King Co-authored-by: Sean King Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> * make URI path for getting all incentivized packets for channel consistent (#1278) * make URI path for getting all incentivized packets for a specific channel consistent * regenerate proto files and add changelog entry * something going with go.mod file... * update changelog entry Co-authored-by: Carlos Rodriguez * chore : add selected channel version to MsgChanOpenInitResponse and MsgChanOpenTryResponse (#1279) ## Description - Add a version field to MsgChannelOpenInitResponse and MsgChannelOpenTryResponse in proto and gen proto - Set the selected channel version in the [MsgChannelOpenInitResponse](https://github.com/notional-labs/ibc-go/blob/ed7a082565fadb9ce27067fa1efb56c23fafc8ef/modules/core/keeper/msg_server.go#L197) and [MsgChannelOpenTryResponse](https://github.com/notional-labs/ibc-go/blob/ed7a082565fadb9ce27067fa1efb56c23fafc8ef/modules/core/keeper/msg_server.go#L237) --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/master/CONTRIBUTING.md#testing) - [ ] Updated relevant documentation (`docs/`) or specification (`x//spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [ ] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes closes: #1204 * fixing workflow/test.yml merge Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Sean King Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: Carlos Rodriguez Co-authored-by: Carlos Rodriguez Co-authored-by: Aditya Co-authored-by: Sean King Co-authored-by: Tim Lind Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: daeMOn Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Bowman Co-authored-by: khanh <50263489+catShaark@users.noreply.github.com> Co-authored-by: Carlos Rodriguez Co-authored-by: Charly Co-authored-by: Luke Rhoads <51463884+lukerhoads@users.noreply.github.com> Co-authored-by: Dev Ojha Co-authored-by: Jack Zampolin Co-authored-by: Leo Pang <34628052+allthatjazzleo@users.noreply.github.com> Co-authored-by: Barrie Byron Co-authored-by: Tyler <48813565+technicallyty@users.noreply.github.com> Co-authored-by: technicallyty <48813565+tytech3@users.noreply.github.com> Co-authored-by: Barrie Byron Co-authored-by: Marko Co-authored-by: Marko Baricevic Co-authored-by: Aleksandr Bezobchuk Co-authored-by: nir1218 Co-authored-by: Assaf Morami Co-authored-by: Dan McCandless Co-authored-by: Ramiro Carlucho Co-authored-by: frog power 4000 Co-authored-by: vuong <56973102+nguyenvuong1122000@users.noreply.github.com> --- .github/workflows/release.yml | 5 +- .github/workflows/test.yml | 30 +- .goreleaser.yml | 3 +- CHANGELOG.md | 16 + README.md | 7 +- RELEASES.md | 40 +- docs/.vuepress/config.js | 22 +- docs/apps/interchain-accounts/requirements.md | 119 + docs/architecture/README.md | 1 + .../adr-004-ics29-lock-fee-module.md | 55 + docs/ibc-go-image.png | Bin 0 -> 1460199 bytes docs/ibc/apps.md | 4 +- docs/ibc/middleware/develop.md | 21 + docs/ibc/proto-docs.md | 1747 +++++-- docs/roadmap/history.md | 44 - docs/roadmap/roadmap.md | 107 +- docs/versions | 5 + go.mod | 99 +- go.sum | 587 +-- .../controller/ibc_module.go | 5 + .../controller/ibc_module_test.go | 21 + .../controller/keeper/account.go | 9 +- .../controller/keeper/keeper.go | 5 + .../controller/keeper/params.go | 6 +- .../types/expected_keepers.go | 1 + modules/apps/29-fee/client/cli/cli.go | 48 + modules/apps/29-fee/client/cli/query.go | 395 ++ modules/apps/29-fee/client/cli/tx.go | 124 + modules/apps/29-fee/fee_test.go | 73 + modules/apps/29-fee/ibc_module.go | 274 ++ modules/apps/29-fee/ibc_module_test.go | 912 ++++ modules/apps/29-fee/keeper/escrow.go | 232 + modules/apps/29-fee/keeper/escrow_test.go | 464 ++ modules/apps/29-fee/keeper/events.go | 25 + modules/apps/29-fee/keeper/genesis.go | 36 + modules/apps/29-fee/keeper/genesis_test.go | 113 + modules/apps/29-fee/keeper/grpc_query.go | 244 + modules/apps/29-fee/keeper/grpc_query_test.go | 641 +++ modules/apps/29-fee/keeper/keeper.go | 335 ++ modules/apps/29-fee/keeper/keeper_test.go | 259 + modules/apps/29-fee/keeper/msg_server.go | 79 + modules/apps/29-fee/keeper/msg_server_test.go | 310 ++ modules/apps/29-fee/keeper/relay.go | 65 + modules/apps/29-fee/keeper/relay_test.go | 172 + modules/apps/29-fee/module.go | 172 + modules/apps/29-fee/transfer_test.go | 72 + modules/apps/29-fee/types/ack.go | 27 + modules/apps/29-fee/types/ack.pb.go | 423 ++ modules/apps/29-fee/types/codec.go | 48 + modules/apps/29-fee/types/errors.go | 19 + modules/apps/29-fee/types/events.go | 10 + modules/apps/29-fee/types/expected_keepers.go | 42 + modules/apps/29-fee/types/fee.go | 92 + modules/apps/29-fee/types/fee.pb.go | 1182 +++++ modules/apps/29-fee/types/fee_test.go | 123 + modules/apps/29-fee/types/genesis.go | 81 + modules/apps/29-fee/types/genesis.pb.go | 1273 +++++ modules/apps/29-fee/types/genesis_test.go | 215 + modules/apps/29-fee/types/keys.go | 139 + modules/apps/29-fee/types/keys_test.go | 176 + modules/apps/29-fee/types/metadata.pb.go | 378 ++ modules/apps/29-fee/types/msgs.go | 164 + modules/apps/29-fee/types/msgs_test.go | 319 ++ modules/apps/29-fee/types/query.pb.go | 4162 +++++++++++++++++ modules/apps/29-fee/types/query.pb.gw.go | 1264 +++++ modules/apps/29-fee/types/tx.pb.go | 1544 ++++++ modules/apps/transfer/ibc_module_test.go | 14 +- modules/apps/transfer/keeper/genesis.go | 6 - modules/apps/transfer/keeper/keeper.go | 6 - modules/apps/transfer/keeper/keeper_test.go | 12 - modules/core/02-client/keeper/keeper_test.go | 3 +- modules/core/04-channel/keeper/events.go | 2 + modules/core/04-channel/keeper/keeper.go | 10 + modules/core/04-channel/keeper/keeper_test.go | 19 + modules/core/04-channel/keeper/packet.go | 7 +- modules/core/04-channel/keeper/timeout.go | 3 +- modules/core/04-channel/types/channel.pb.go | 360 +- modules/core/04-channel/types/events.go | 1 + modules/core/04-channel/types/packet.go | 22 + modules/core/04-channel/types/tx.pb.go | 265 +- modules/core/04-channel/types/version.go | 2 +- modules/core/05-port/types/module.go | 6 + modules/core/keeper/msg_server.go | 5 +- proto/ibc/applications/fee/v1/ack.proto | 17 + proto/ibc/applications/fee/v1/fee.proto | 56 + proto/ibc/applications/fee/v1/genesis.proto | 52 + proto/ibc/applications/fee/v1/metadata.proto | 16 + proto/ibc/applications/fee/v1/query.proto | 203 + proto/ibc/applications/fee/v1/tx.proto | 85 + proto/ibc/core/channel/v1/channel.proto | 14 + proto/ibc/core/channel/v1/tx.proto | 5 +- scripts/protocgen.sh | 3 +- testing/endpoint.go | 9 +- testing/simapp/app.go | 54 +- testing/values.go | 2 + 95 files changed, 19838 insertions(+), 1106 deletions(-) create mode 100644 docs/apps/interchain-accounts/requirements.md create mode 100644 docs/architecture/adr-004-ics29-lock-fee-module.md create mode 100644 docs/ibc-go-image.png delete mode 100644 docs/roadmap/history.md create mode 100644 modules/apps/29-fee/client/cli/cli.go create mode 100644 modules/apps/29-fee/client/cli/query.go create mode 100644 modules/apps/29-fee/client/cli/tx.go create mode 100644 modules/apps/29-fee/fee_test.go create mode 100644 modules/apps/29-fee/ibc_module.go create mode 100644 modules/apps/29-fee/ibc_module_test.go create mode 100644 modules/apps/29-fee/keeper/escrow.go create mode 100644 modules/apps/29-fee/keeper/escrow_test.go create mode 100644 modules/apps/29-fee/keeper/events.go create mode 100644 modules/apps/29-fee/keeper/genesis.go create mode 100644 modules/apps/29-fee/keeper/genesis_test.go create mode 100644 modules/apps/29-fee/keeper/grpc_query.go create mode 100644 modules/apps/29-fee/keeper/grpc_query_test.go create mode 100644 modules/apps/29-fee/keeper/keeper.go create mode 100644 modules/apps/29-fee/keeper/keeper_test.go create mode 100644 modules/apps/29-fee/keeper/msg_server.go create mode 100644 modules/apps/29-fee/keeper/msg_server_test.go create mode 100644 modules/apps/29-fee/keeper/relay.go create mode 100644 modules/apps/29-fee/keeper/relay_test.go create mode 100644 modules/apps/29-fee/module.go create mode 100644 modules/apps/29-fee/transfer_test.go create mode 100644 modules/apps/29-fee/types/ack.go create mode 100644 modules/apps/29-fee/types/ack.pb.go create mode 100644 modules/apps/29-fee/types/codec.go create mode 100644 modules/apps/29-fee/types/errors.go create mode 100644 modules/apps/29-fee/types/events.go create mode 100644 modules/apps/29-fee/types/expected_keepers.go create mode 100644 modules/apps/29-fee/types/fee.go create mode 100644 modules/apps/29-fee/types/fee.pb.go create mode 100644 modules/apps/29-fee/types/fee_test.go create mode 100644 modules/apps/29-fee/types/genesis.go create mode 100644 modules/apps/29-fee/types/genesis.pb.go create mode 100644 modules/apps/29-fee/types/genesis_test.go create mode 100644 modules/apps/29-fee/types/keys.go create mode 100644 modules/apps/29-fee/types/keys_test.go create mode 100644 modules/apps/29-fee/types/metadata.pb.go create mode 100644 modules/apps/29-fee/types/msgs.go create mode 100644 modules/apps/29-fee/types/msgs_test.go create mode 100644 modules/apps/29-fee/types/query.pb.go create mode 100644 modules/apps/29-fee/types/query.pb.gw.go create mode 100644 modules/apps/29-fee/types/tx.pb.go create mode 100644 proto/ibc/applications/fee/v1/ack.proto create mode 100644 proto/ibc/applications/fee/v1/fee.proto create mode 100644 proto/ibc/applications/fee/v1/genesis.proto create mode 100644 proto/ibc/applications/fee/v1/metadata.proto create mode 100644 proto/ibc/applications/fee/v1/query.proto create mode 100644 proto/ibc/applications/fee/v1/tx.proto diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ffffe3a4dae..06b91b20c75 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,8 @@ name: Release on: push: tags: - - 'v[0-9]+.[0-9]+.[0-9]+-?[a-z0-9]*' # Push events to matching v*, i.e. v1.0.0, v20.15.10, v3.0.0-alpha1 + - 'v[0-9]+.[0-9]+.[0-9]+' # Push events to matching v*, i.e. v1.0.0, v20.15.10 + - 'v[0-9]+.[0-9]+.[0-9]+-?[a-z0-9]+' # Push events to matching v*-[alpha/beta/rc], i.e. v3.0.0-alpha1, v3.0.0-beta1, v3.0.0-rc0 jobs: goreleaser: @@ -14,7 +15,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v3 with: go-version: '1.17' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fdcc086ae4f..31ef80c80f2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: install-tparse: runs-on: ubuntu-latest steps: - - uses: actions/setup-go@v2.1.5 + - uses: actions/setup-go@v3 with: go-version: 1.17 - name: Display go version @@ -26,7 +26,7 @@ jobs: - name: install tparse run: | export GO111MODULE="on" && go get github.com/mfridman/tparse@v0.8.3 - - uses: actions/cache@v2.1.7 + - uses: actions/cache@v3 with: path: ~/go/bin key: ${{ runner.os }}-go-tparse-binary @@ -38,7 +38,7 @@ jobs: go-arch: ["amd64", "arm", "arm64"] steps: - uses: actions/checkout@v3 - - uses: actions/setup-go@v2.1.5 + - uses: actions/setup-go@v3 with: go-version: 1.17 - uses: technote-space/get-diff-action@v6.0.1 @@ -60,19 +60,19 @@ jobs: - name: Split pkgs into 4 files run: split -d -n l/4 pkgs.txt pkgs.txt.part. # cache multiple - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: "${{ github.sha }}-00" path: ./pkgs.txt.part.00 - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: "${{ github.sha }}-01" path: ./pkgs.txt.part.01 - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: "${{ github.sha }}-02" path: ./pkgs.txt.part.02 - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: "${{ github.sha }}-03" path: ./pkgs.txt.part.03 @@ -86,7 +86,7 @@ jobs: part: ["00", "01", "02", "03"] steps: - uses: actions/checkout@v3 - - uses: actions/setup-go@v2.1.5 + - uses: actions/setup-go@v3 with: go-version: 1.17 - uses: technote-space/get-diff-action@v6.0.1 @@ -95,7 +95,7 @@ jobs: **/**.go go.mod go.sum - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: "${{ github.sha }}-${{ matrix.part }}" if: env.GIT_DIFF @@ -103,7 +103,7 @@ jobs: run: | cat pkgs.txt.part.${{ matrix.part }} | xargs go test -race -mod=readonly -timeout 30m -coverprofile=${{ matrix.part }}profile.out -covermode=atomic -tags='ledger test_ledger_mock' if: env.GIT_DIFF - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: "${{ github.sha }}-${{ matrix.part }}-coverage" path: ./${{ matrix.part }}profile.out @@ -119,19 +119,19 @@ jobs: **/**.go go.mod go.sum - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: "${{ github.sha }}-00-coverage" if: env.GIT_DIFF - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: "${{ github.sha }}-01-coverage" if: env.GIT_DIFF - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: "${{ github.sha }}-02-coverage" if: env.GIT_DIFF - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: "${{ github.sha }}-03-coverage" if: env.GIT_DIFF @@ -150,7 +150,7 @@ jobs: sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt done if: env.GIT_DIFF - - uses: codecov/codecov-action@v2.1.0 + - uses: codecov/codecov-action@v3 with: file: ./coverage.txt if: env.GIT_DIFF diff --git a/.goreleaser.yml b/.goreleaser.yml index a1df128c661..63ecd8822e7 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -24,6 +24,7 @@ checksum: release: mode: keep-existing + prerelease: auto archives: - name_template: "{{ .ProjectName }}_simd_v{{ .Version }}_{{ .Os }}_{{ .Arch }}" @@ -32,4 +33,4 @@ archives: - README.md - RELEASES.md - SECURITY.md - - CHANGELOG.md \ No newline at end of file + - CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index c2190232888..d243bcb0286 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,11 +38,20 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Dependencies +* [\#1247](https://github.com/cosmos/ibc-go/pull/1247) Bump SDK version to v0.45.3 and Tendermint to version 0.34.19 + ### API Breaking +* (transfer) [\#1250](https://github.com/cosmos/ibc-go/pull/1250) Deprecate `GetTransferAccount` since the `transfer` module account is never used. + ### State Machine Breaking ### Improvements + +* (middleware) [\#1022](https://github.com/cosmos/ibc-go/pull/1022) Add `GetAppVersion` to the ICS4Wrapper interface. This function should be used by IBC applications to obtain their own version since the version set in the channel structure may be wrapped many times by middleware. +* (modules/core/04-channel) [\#1160](https://github.com/cosmos/ibc-go/pull/1160) Improve `uint64 -> string` performance in `Logger`. +* (modules/core/04-channel) [\#1232](https://github.com/cosmos/ibc-go/pull/1232) Updating params on `NewPacketId` and moving to bottom of file. +* (modules/core/04-channel) [\#1279](https://github.com/cosmos/ibc-go/pull/1279) Add selected channel version to MsgChanOpenInitResponse and MsgChanOpenTryResponse. Emit channel version during OpenInit/OpenTry * (modules/light-clients/07-tendermint) [\#1118](https://github.com/cosmos/ibc-go/pull/1118) Deprecating `AllowUpdateAfterExpiry and AllowUpdateAfterMisbehaviour`. See ADR-026 for context. * (modules/core/02-client) [\#1188](https://github.com/cosmos/ibc-go/pull/1188/files) Routing `MsgSubmitMisbehaviour` to `UpdateClient` keeper function. Deprecating `SubmitMisbehaviour` endpoint. * (modules/core/02-client) [\#1208](https://github.com/cosmos/ibc-go/pull/1208) Replace `CheckHeaderAndUpdateState` usage in 02-client with calls to `VerifyClientMessage`, `CheckForMisbehaviour`, `UpdateStateOnMisbehaviour` and `UpdateState`. @@ -58,9 +67,16 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Features +* [\#276](https://github.com/cosmos/ibc-go/pull/276) Adding the Fee Middleware module v1 +* (apps/29-fee) [\#1229](https://github.com/cosmos/ibc-go/pull/1229) Adding CLI commands for getting all unrelayed incentivized packets and packet by packet-id. +* (apps/29-fee) [\#1224](https://github.com/cosmos/ibc-go/pull/1224) Adding Query/CounterpartyAddress and CLI to ICS29 fee middleware +* (apps/29-fee) [\#1225](https://github.com/cosmos/ibc-go/pull/1225) Adding Query/FeeEnabledChannel and Query/FeeEnabledChannels with CLIs to ICS29 fee middleware. +* (modules/apps/29-fee) [\#1230](https://github.com/cosmos/ibc-go/pull/1230) Adding CLI command for getting incentivized packets for a specific channel-id. + ### Bug Fixes * (modules/core/04-channel) [\#1130](https://github.com/cosmos/ibc-go/pull/1130) Call `packet.GetSequence()` rather than passing func in `WriteAcknowledgement` log output +* (apps/29-fee) [\#1278](https://github.com/cosmos/ibc-go/pull/1278) The URI path for the query to get all incentivized packets for a specifc channel did not follow the same format as the rest of queries. ## [v3.0.0](https://github.com/cosmos/ibc-go/releases/tag/v3.0.0) - 2022-03-15 diff --git a/README.md b/README.md index 61e1ab0c139..ff3e074b04f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ -# ibc-go +
+

ibc-go

+
+ +![banner](docs/ibc-go-image.png) +
Version diff --git a/RELEASES.md b/RELEASES.md index 27f0874c650..c92cc13aed0 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -21,6 +21,38 @@ To summarize: **All our ibc-go releases allow chains to communicate successfully We ensure all major releases are supported by relayers ([hermes](https://github.com/informalsystems/ibc-rs), [rly](https://github.com/strangelove-ventures/relayer) and [ts-relayer](https://github.com/confio/ts-relayer) at the moment) which can relay between the new major release and older releases. We have no plans of upgrading to an IBC protocol specification v2.0, as this would be very disruptive to the ecosystem. +## Release cycle + +IBC-Go follows a traditional release cycle involving an alpha, beta, and rc (release candidate) releases before finalizing a new version. As ibc-go works in a non-traditional area, we apply our own interpretation to each release type. We reserve the right to make both go API breaking changes and state machine breaking changes throughout the entire release cycle. The stable release guarentees do not go into affect until a final release is performed. + +It is never advisable to use a non-final release in production. + +### Alpha + +Alpha releases are intended to make available new features as soon as they are functional. No correctness guarentees are made and alpha releases **may** contain serious security vulnerabilities, bugs, and lack of user tooling, so long as they don't affect the core functionality. + +Initial users of alpha releases are expected to be advanced, patient, and capable of handling unusual errors. Very basic integration testing will be performed by the ibc-go development team before alpha releases. + +An internal audit is typically performed before the alpha release allowing the development team to guage the maturity and stability of changes included in the next release. + +### Beta + +Beta releases are intended to signal design stability. While the go API is still subject to change, the core design of the new features should not be. Developers integrating the new features should expect to handle breaking changes when upgrading to RC's. + +Beta releases should not be made with known bugs or security vulnerabilities. Beta releases should focus on ironing out remaining bugs and filling out the UX functionality required by a final release. Beta releases should have a clearly defined scope of the features that will be included in the release. Only highly requested feature additions should be acted upon in this phase. + +When the development team has determined a release is ready to enter the RC phase, a final security audit should be performed. The security audit should be limited to looking for bugs and security vulnerabilities. Code improvements may be noted, but they should not be acted upon unless highly desirable. + +### RC + +RC's are release candidates. Final releases should contain little to no changes in comparison to the latest RC. Changes included in between RC releases should be limited to: +- Improved testing +- UX additions +- Bug fixes +- Highly requested changes by the community + +A release should not be finalized until the development team and the external community have done sufficient integration tests on the targeted release. + ## Stable Release Policy The beginning of a new major release series is marked by the release of a new major version. A major release series is comprised of all minor and patch releases made under the same major version number. The series continues to receive bug fixes (released as minor or patch releases) until it reaches end of life. The date when a major release series reaches end of life is determined by one of the two following methods: @@ -33,9 +65,11 @@ Only the following major release series have a stable release status: |Release|End of Life Date| |-------|-------| -|`v1.1.x`|July 01, 2022| -|`v1.2.x`|July 01, 2022| -|`v2.0.x`|February 01, 2023| +|`v1.3.x`|July 01, 2022| +|`v1.4.x`|July 01, 2022| +|`v2.1.x`|February 01, 2023| +|`v2.2.x`|February 01, 2023| +|`v3.0.x`|March 15, 2023| **Note**: The v1 major release series will reach end of life 6 months after merging this policy. v2 will reach end of life one year after merging this policy. diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 8e83c7c7cd3..bdd58cd8d72 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -42,10 +42,30 @@ module.exports = { "label": "v1.2.0", "key": "v1.2.0" }, + { + "label": "v1.3.0", + "key": "v1.3.0" + }, + { + "label": "v1.4.0", + "key": "v1.4.0" + }, { "label": "v2.0.0", "key": "v2.0.0" - } + } , + { + "label": "v2.1.0", + "key": "v2.1.0" + }, + { + "label": "v2.2.0", + "key": "v2.2.0" + }, + { + "label": "v3.0.0", + "key": "v3.0.0" + } ], topbar: { banner: true diff --git a/docs/apps/interchain-accounts/requirements.md b/docs/apps/interchain-accounts/requirements.md new file mode 100644 index 00000000000..fff919f8088 --- /dev/null +++ b/docs/apps/interchain-accounts/requirements.md @@ -0,0 +1,119 @@ +# Business requirements + +> **TL;DR**: Rather than creating an IBC application to expose cross-chain access to every module's features, the Interchain Accounts feature would allow to leverage the capabilities of an account to access a blockchain's application-specific features. + +## Problem + +Without Interchain Accounts, cross-chain access to chain-specific features (such as staking, sending, voting, etc) has to be built as separate applications on top of the IBC TAO (Transport, Authentication, Ordering) layer. Creating new IBC application standards and implementations for each application-specific feature requires considerable time and resources. Interchain Accounts will allow new chain-specific features to be immediately available over IBC. + +## Objectives + +Provide a way to programmatically create accounts on a destination blockchain (called the host) and control them via transactions over IBC. An IBC packet will take a message from the controller blockchain to the host blockchain where it will be executed. This will allow new features on a blockchain to be immediately supported as IBC transactions, since the (destination blockchain) native messages are encapsulated in an IBC packet in an agnostic way. This will allow all of the modules on a chain to take advantage of the network effects created by the IBC ecosystem. + +## Scope + +| Features | Release | +| --------- | ------- | +| Deterministically create a new interchain account over IBC on the host chain. | v1 | +| Send over IBC a packet that contains the message to be executed by the interchain account on the host. | v1 | + +# User requirements + +## Use cases + +### Injective <> Band Chain + +Currently, Injective sends an IBC transaction to Band Chain via their custom IBC oracle module, which is a data request. When this IBC packet is executed on Band Chain, validators on Band Chain fetch prices for 10 different markets. A random selection of validators will post this selection on-chain. Once a minimum quorum has been reached, an IBC packet is sent to Injective with the prices of markets. The roundtrip latency of this flow is around 30 seconds when things go well (no packet timeouts or delays in validation). + +However, Injective wants to minimise as much as possible the latency between real world price updates and price updates on Injective. They can simplify this two-transaction flow to a single transaction using Interchain Accounts: Injective opens an interchain account on Band Chain, which would be able to pay for a continuous set of update transactions and maintain a standing request for the prices of marke. This would simplify the transaction flow to a single transaction, and introduce a simple flow to update the standing request if necessary. + +### Umee <> Cosmos Hub + +Users on the Hub would send their ATOM to Umee. In return, the user gets equivalent amount of meTokens (this token would be a form of a liquid staking token), which could then be staked on the Hub, in some other liquidity pool, etc, in addition to other business logic which Umee could perform on behalf of the users in return for the ATOM. + +Umee then stakes these ATOM tokens on the Hub on behalf of Umee (ATOMs get inflation rewards, etc). Without Interchain Accounts, Umee would have to use validator controlled multisig, because for this flow Umee needs an account on the Hub which can be controlled externally in a decentralised way. With Interchain Accounts, Umee can register an interchain account on the Hub and then receive the staking rewards for the ATOM, figure out distribution back to Umee chain, and send back to the corresponding existing account on Umee. + +### Hub custodial services + +The problem the Cosmos ecosystem faces is fragmentation of services. When a new chain goes live, they need to talk to custodial solutions and exchanges to integrate. Many exchanges and custodial solutions don't want to integrate tens of chains unless paid in advance. + +An alternative is offering the custodial service through the Hub. When a new chain goes live, the tokens of the chain are transferred through IBC to the Hub. This means that the custodial service would just have to integrate with one chain (the Hub), rather with an arbitrary number of them. + +Using Interchain Accounts, a service could be built in which a user sends tokens to an interchain account address on chain `X`, which corresponds to the registered interchain account of chain `X` on the Hub. This account would handle the token transfer to the Hub and then further on to the custodial wallet. + +# Functional requirements + +## Assumptions + +1. Interchain account packets will rarely timeout with application-set values. +2. Cosmos-SDK modules deployed on a chain are not malicious. +3. Authentication modules may implement their own permissioning scheme. + +## Features + +### 1 - Configuration + +| ID | Description | Verification | Status | +| --- | ----------- | ------------ | ------ | +| 1.01 | A chain shall have the ability to enable or disable Interchain Accounts controller functionality in the genesis state. | The controller parameters have a [flag](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/types/host.pb.go#L30) to enable/disable the controller submodule, and this flag [is stored during genesis initialization](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/params.go#L24). | `Implemented` | +| 1.02 | A chain shall have the ability to export the Interchain Accounts controller genesis state. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/genesis_test.go#L47) | `Implemented` | +| 1.03 | A chain shall have the ability to initialize the Interchain Accounts controller genesis state. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/genesis_test.go#L10) | `Implemented` | +| 1.04 | A chain shall have the ability to set the Interchain Accounts controller parameters when upgrading or via proposal. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/module_test.go#L33) | `Implemented` | +| 1.05 | A chain shall have the ability to enable or disable Interchain Accounts host functionality in the genesis state. | The host parameters have a [flag](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/types/host.pb.go#L30) to enable/disable the host submodule, and this flag [is stored during genesis initialization](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/params.go#L31) | `Implemented` | +| 1.06 | A chain shall have the ability to export the Interchain Accounts host genesis state. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/genesis_test.go#L46) | `Implemented` | +| 1.07 | A chain shall have the ability to initialize the Interchain Accounts host genesis state. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/genesis_test.go#L10) | `Implemented` | +| 1.08 | A chain shall have the ability to set the Interchain Accounts host parameters when upgrading or via proposal. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/module_test.go#L33) | `Implemented` | +| 1.09 | The host chain shall have the ability to whitelist what types of messages or transactions that it chooses to facilitate (e.g. it can decide that registered interchain accounts cannot execute staking messages). | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/params_test.go#L5) | `Implemented` | + +### 2 - Registration + +| ID | Description | Verification | Status | +| --- | ----------- | ------------ | ------ | +| 2.01 | The controller chain can programmatically create interchain accounts on the host chain that shall be controlled only by the owner account on the controller chain. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/account_test.go#L10) | `Implemented` | +| 2.02 | An interchain account shall be created by any actor without the approval of a third party (e.g. chain governance). | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/account_test.go#L10) | `Implemented` | + +### 3 - Control + +| ID | Description | Verification | Status | +| --- | ----------- | ------------ | ------ | +| 3.01 | The controller chain can programmatically control the interchain account by submitting transactions to be executed on the host chain on the behalf of the interchain account. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/relay_test.go#L29) | `Implemented` | +| 3.02 | Under no circumstances shall the owner account on the controller chain irretrievably lose control over the registered interchain account on the host chain. | If the channel between controller and host closes, then [a relayer can open a new channel on the existing controller port](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/account.go#L16-L17). | `Implemented` | + +### 4 - Host execution + +| ID | Description | Verification | Status | +| --- | ----------- | ------------ | ------ | +| 4.01 | Transactions shall be executed by an interchain account on the host chain in exactly the same order in which they are submitted by the controller chain. | IBC packets with SDK messages will be sent from the controller to the host over an [ordered channel](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/account.go#L60). | `Implemented` | +| 4.02 | The host shall execute only messages in the allow list. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/relay_test.go#L340) | `Implemented` | +| 4.03 | The controller chain shall know how the host chain will handle the transaction bytes in advance. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/handshake_test.go#L109-L133) | `Implemented` | +| 4.04 | Each transaction submitted by the controller chain shall be executed only once by the interchain account on the host chain. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/relay_test.go#L248) | `Implemented` | + +# Non-functional requirements + +## 5 - Security + +| ID | Description | Verification | Status | +| -- | ----------- | ------------ | ------ | +| 5.01 | There shall be no means for the interchain account to execute transactions that have not been submitted first by the respective owner account on the controller chain. |[Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/relay_test.go#L361) | `Implemented` | +| 5.02 | Every interchain account on the host chain shall have one and only one respective owner account on the controller chain. | The interchain account on the host [is generated using the host connection ID and the address of the owner on the controller](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/handshake.go#L73-L76). | `Implemented` | +| 5.03 | The owner account on a controller chain shall not be able to control interchain accounts registered by other owner accounts on the same controller chain. | Before the host logic executes the received messages, it [retrieves the interchain account associated with the port ID](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/keeper/relay.go#L94) over which it received the message. For owner address B to be able to execute a message with the interchain account registered with owner address A, it would need to send the messages over a channel that binds to a port ID that contains the owner address A, and since we have assumption number 3, this should not be allowed by applications. | `Implemented` | +| 5.04 | A controller chain shall not be able to control interchain accounts registered by owner accounts on different controller chains. | Same as 5.03. | `Implemented` | | +| 5.05 | Each interchain account on the host chain is owned by a single owner account on the controller chain. It shall not be possible to register a second interchain account with the same owner account on the controller chain. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/account_test.go#L42) | `Implemented` | + +# External interface requirements + +## 6 - CLI + +| ID | Description | Verification | Status | +| -- | ----------- | ------------ | ------ | +| 6.01 | There shall be a CLI command available to query the host parameters. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/client/cli/query.go#L22) | `Implemented` | +| 6.02 | There shall be a CLI command available to query the receive packet events on the host chain to check the result of the execution of the message on the host. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/host/client/cli/query.go#L51) | `Implemented` | +| 6.03 | There shall be a CLI command available to query the controller parameters. | [Acceptance tests](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/client/cli/query.go#L15) | `Implemented` | + + +## 7 - Application developers + +| ID | Description | Verification | Status | +| -- | ----------- | ------------ | ------ | +| 7.01 | An IBC application developer shall be able to develop an Interchain Accounts authentication module that can register interchain accounts. | The [`RegisterInterchainAccount` function](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/account.go#L18) is the entry point to registering an interchain account. | `Implemented` | +| 7.02 | An IBC application developer shall be able to develop an Interchain Accounts authentication module that can send messages from the controller to the host. | The [`SendTx` function](https://github.com/cosmos/ibc-go/blob/v3.0.0/modules/apps/27-interchain-accounts/controller/keeper/relay.go#L18) takes pre-built packet data containing messages to be executed on the host chain from an authentication module and attempts to send the packet. | `Implemented` | \ No newline at end of file diff --git a/docs/architecture/README.md b/docs/architecture/README.md index 091ba899dc6..edfbea4f0c8 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -30,6 +30,7 @@ To suggest an ADR, please make use of the [ADR template](./adr-template.md) prov | [001](./adr-001-coin-source-tracing.md) | ICS-20 coin denomination format | Accepted, Implemented | | [002](./adr-002-go-module-versioning.md) | Go module versioning | Accepted | | [003](./adr-003-ics27-acknowledgement.md) | ICS27 acknowledgement format | Accepted | +| [004](./adr-004-ics29-lock-fee-module.md) | ICS29 module locking upon escrow out of balance | Accepted | | [015](./adr-015-ibc-packet-receiver.md) | IBC Packet Routing | Accepted | | [025](./adr-025-ibc-passive-channels.md) | IBC passive channels | Deprecated | | [026](./adr-026-ibc-client-recovery-mechanisms.md) | IBC client recovery mechansisms | Accepted | diff --git a/docs/architecture/adr-004-ics29-lock-fee-module.md b/docs/architecture/adr-004-ics29-lock-fee-module.md new file mode 100644 index 00000000000..5b17717e669 --- /dev/null +++ b/docs/architecture/adr-004-ics29-lock-fee-module.md @@ -0,0 +1,55 @@ +# ADR 004: Lock fee module upon escrow out of balance + +## Changelog +* 03/03/2022: initial draft + +## Status + +Accepted + +## Context + +The fee module maintains an escrow account for all fees escrowed to incentivize packet relays. +It also tracks each packet fee escrowed separately from the escrow account. This is because the escrow account only maintains a total balance. It has no reference for which coins belonged to which packet fee. +In the presence of a severe bug, it is possible the escrow balance will become out of sync with the packet fees marked as escrowed. +The ICS29 module should be capable of elegantly handling such a scenario. + +## Decision + +We will allow for the ICS29 module to become "locked" if the escrow balance is determined to be out of sync with the packet fees marked as escrowed. +A "locked" fee module will not allow for packet escrows to occur nor will it distribute fees. All IBC callbacks will skip performing fee logic, similar to fee disabled channels. + +Manual intervention will be needed to unlock the fee module. + +### Sending side + +Special behaviour will have to be accounted for in `OnAcknowledgementPacket`. Since the counterparty will continue to send incentivized acknowledgements for fee enabled channels, the acknowledgement will still need to be unmarshalled into an incentivized acknowledgement before calling the underlying application `OnAcknowledgePacket` callback. + +When distributing fees, a cached context should be used. If the escrow account balance would become negative, the current state changes should be discarded and the fee module should be locked using the uncached context. This prevents fees from being partially distributed for a given packetID. + +### Receiving side + +`OnRecvPacket` should remain unaffected by the fee module becoming locked since escrow accounts only affect the sending side. + +## Consequences + +### Positive + +The fee module can be elegantly disabled in the presence of severe bugs. + +### Negative + +Extra logic is added to account for edge cases which are only possible in the presence of bugs. + +### Neutral + +## References + +Issues: +- [#821](https://github.com/cosmos/ibc-go/issues/821) +- [#860](https://github.com/cosmos/ibc-go/issues/860) + +PR's: +- [#1031](https://github.com/cosmos/ibc-go/pull/1031) +- [#1029](https://github.com/cosmos/ibc-go/pull/1029) +- [#1056](https://github.com/cosmos/ibc-go/pull/1056) diff --git a/docs/ibc-go-image.png b/docs/ibc-go-image.png new file mode 100644 index 0000000000000000000000000000000000000000..649c879bad963a747cc6042dad4b0fe14bc18dd4 GIT binary patch literal 1460199 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
  • iOZsD$GZeBN0@4>$%lrz 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%0Aq({=Vu3vHpjfV_Zl*0BwSnkU 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

    &96N)%duM4y@Mu&|%rR!TnPz$UXqQ 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

    0guc2B*pjrc8+#PxRh!<>Z*? zMt^gXo4%LT1f%V^tO?8-4B#LYzSr{(yK40en)QTQcNEu&8Q(`6HEBa1jE%yV=HH@c zPHy4pu57B3@Z}lNu?iVZxn>`dXFX@&BKRv&WejW42EkQyT^|Y#@U4&ExvDpW5$n|* zc=ec=rmRW-D>;oJI*MM47TT>DsI(w;f9mj}a9x%!Wqj6y6>x@pk;G&#kLu-v9mza? zG2(RxEXR>;8p&V*P_V`Xs}ix`F-e&R5W46+mfxIMg5HuUpvKAXp$}$`#>5=ROUaXd zX~bGO4stBKt2`S*f7-`EHlTEJjBM$)WJLL9HEqS09B#mUj6_pEY2%2MODvRbqic2R z{T_%ECc@lmOX3r-m1OAw9LQGTPWq3~kB~nmniP*{aK!Xc^gveRpk2ac>SZ>zO)xNd zUv+2&K$-7y2SxOOE;ISXx>4C@LDwVoHO4-O$Bj64|BOU1Q`#b6yzh1#u`|`t9Dyc7 zU{edPBl_C|)Uhj-lVURw89P@;B%yp00fJeP93Xq-$(mT|FqXLs3c;YjB@)vf$<^R1 z$&%1>N9f&M^An&hW^hY2%Pa5ipTOBV5|4YJZi^Dm`@4A-<-Vi#Jmg_)k?22VkWChe z$b~gACSM3}%AG7pT8$)U@>jj{`W(A~V+Y9?BLi$ZKO$j0gLj)%pPQxr^0JjXzkvq8 zzj~R>C~b|i3zNUwt`EqcM6gVxf}Y?#tKeVixsm?NKJNSbQzX1yc1Cwb!Z)?1V_6pk zgBM(QFM!H~VkEGCy}gj{o!*xZ@1D!24_~A%*xHHjdP-Y!Z?1oVeh{ z4=N)vjDj^&?nRn-{@dhMkG-Pz=mCYCz1>3$zDbJ!E zkPGs!#MvL!6#5)DbVbPDW=0}WqsCak9$R6NDkc=ooktmI-Irne553$IpjQ0{?N3;c z6g-19!B7dXqv`L8^mbn^RzBYfPU zvHNxsU%JjJ90Ko^pw{9o17B@PZ{LxPUGZAp>#Sb63t_z z9n!?HM)I_FWLvRR_LVkqmmS%NbNt7~87fu5!F;Aw3m7T}hRqyVDIi*L87f{$|HS(8 zA4y&4CC|6*EX=l`Gk7-_PKwjwmH@t8x9fJ@uG{rHT`(wX(vh7(PAcu!n-almJHJi; zzs-BUOS1Q9Oh;qkXTEJb>+io!AM1o_O$01cNvWpbP+C66$pD_8z`>E2Ty^Kq9oO~w z8V@`Z3M>**5beT1(?4CFhYRKFx{0x_Deh z(5ke_GS7Ex2}~%pqnLP!v=OcSt1NBSvl*02Cart6ysHaY(OBWrXmmzp*p`mtURKm& zR^g__WMT7!nK=f}9x3Tgr_5&PWnS=Joy`spY8-x5djAA>qh+L0lJa89Jp}a@s;#O zO)2>qnE;!h5d9+ni_&dsnk94n`3O{r2Tz7pfO3a@D9L+_`HUbH?ErM!RzW6^0A~_< z;B#x^(x8JUs<4yVu{Q%Y2D*(*Vxujby@tJ16?DV`jOq%C$Y zNVC^u8p31%Bay&%9YXheVgi=ZVXRD)Vz%ZlK zFmS(Pa4#u+mq}%uLkquSDXA${>Kgb#ka$92bQW{)j|PtI9OVfo-+Afi+5sZcN<3pc zL0ix>cTojz?Ppn=Zp9-ZXI`G$_t4uS;z+nd#_h^JcsXi5kCDp@!WSRS0Z^yQ<=$`X zg?yy%$#+lBtr`u3e~6l{f2GP%s<(9-{?12t@5%S?Kag+i zmHg!8r@3o4+XR@z4+ZteV5tTEGRfL_-7jl)Pl$F(en;uS`V91eKQ+z{EFAJeg7hC$ zNcThcXu^sy8QCNxF#R2utD>xC8Rzr^$hqCS{`BS7^24{D*BB|`THR`n3;OUJ!F+!b zgOV#>_{yJO(XI=ywzH;{y-i28!oNDSkwuM>x`Ngm0rJbdaQ;9?PuqaoZ zTtI%^4%b&-eHFZ|ZJhg;C--;qgZDn1xcQqu_|d%g#jBU{cR&A${M{wN`|6T_29G~~ z@|OJN@BLst^H0C|)#dkp?LI*)ddo3tEmkn{dup!HcQQ9r=bWl+mkH4~Xuf6t<=bIO z8H_=mNbtQ%Eyzm3Xzu((@;}Fc1r`i?@B_1tsK_Pn7|d%DyNEOih{*Y670kN z->z4! zMKB_T`!)v%j2P{vRMHDvX(wfg`4E+ouqz!t1>}=pw-i>4T(a`S+_h^p|AK9G1WDK* zqXjA8(=iimvwfAcZD~>(r&i?>?A9-{prpf!KgsB1 z=!#8p04hC+nXp<8v1~4AShU`R6y)U9*gdSS%Z#f5w2cs!3-w(s5UuABM$te?ZlNDz zVFf2^oocWVQoDe|2Tg9(Qam-kMA`h9Z(Z34(oF#h7Ozw%=6aTUeyl2Mc^(c zHQa{Ob2Nb~N69CJ)3K9S*{DKODt5kw9PJt;Ct`Ct$?QnZ{es<0^fuUH(Agf3e_SW= zO)$Q6j{`g;-Q)ZY!e;~NiuIUZi{9?YGoSb8+sG&Y(CK&mOtsZzr~;`%fcAdSW(HTK z0{RS}9JHZ_G$HPbNfReMtCSr(#nL7W4Mb*TtM;aozirog#ui>OnlH%pXVAN?o+bcd z3h#Y_*I0K%@Gxb8X?4vQfd|Oy=98gO2-5>R*n(3)Rysh5XZg3abCyEVM{=!SfhUaL z$D=h-r%7<6U`VzbpbfuG@|upjemdKOP7A?P1~C5m99W56^a_sL2@p7H6Xz>@d0*KL z0tTsr7rl=j59nqDkIJFCAo(rZBMGLi59V(|*m4y!q{1A|pIv7xU8nq0P%43k(5-_a zCKtUz+ts~gTvs*{uxjBbyP`X7@}D|I$iPZRuFAFWw1`68SCWluUm>8(dfA@1+mnR5 z4#KVvEQs(R73qV|J@Z!^Fub!K1&f0?A| zONj@@;v6#%7WQalj>L zl4H~=8EG+=+)ZLEOEZ)wUh*%n6}xjs!0ib@-(5KqZ~IQmZR@!rycZ#6rUyy2U-y%Xt1m7bV)i*z6snU z{Ckd?mBIG?WMUt0P3HQ}$?&yJo+V$ojq(RnLas^Zj*w0CQ*#1I++F$np%4b~WX*qzr;#Aa@3PvRLHa~4 ziS2jf-@Wy&{Pdd_@{@1An(bGj)R_HJC!jyH0T{o2@iqA>ZX=&uaP}7;eJp?Y!AG;y zGk*WOU;L~5_|sp>Pd@u~;%2rR`s{E1;E%JNpM3V4;M?Ls*nfX-)EVniyiP+1KDx$l zJ7?I4MiQ1*OCMmNfigdf<1{8rk@$;ehBceEzPqtphW$i>Rfr$J9|eJ1gl>xMuz=xC_5qBrtLj9CU+#TLKmK6 zExIsyoJ#jHBZ*Zd15_RfpDarfYj&LSjKKlNNCS7gYAg)ch(0uzrDxV%ucd}-OgUfG zk+O_7LgS>LA(rlehYAf4?#L%LpM=iF|2Wf1rU{t%9LX-Xvd19UBa zRZ01{KT%_^($evq6J2_2t^A^-PvBx4jZOd$+Vz*u_SQHJZ5!HesNN4RAq?!ho2a9+cu(W04Ib)a~pwi<|Cy4AP4FH zW6qLxQ}Q{`-PJK*4uo6ycsJ{P(qvf5i`7uKqoOj#m1P2GXEsDcB00r-n8zU+$M zWh;0x*8~f2!eoCT=WoQ%;`cL}B9Ej2Bl5Bj7RiaWHFw#Pq_%sd#}A+K~H(w&lPPW=B@(J|m(6 zxWF|gKP?HLupPldlcp8fwstBs&#rzlSaT&#*VMz*aZP5|1i^ZML2F`>AGs@&PEXK3 z`ioG3RIs~tI4Moe#5l2ijVV=GCc{GQ`nTC0FRNZy0+TIW=*1C-9%#}zI;kAuZ z1SnHX}3l^G?Rm3Hdxe^EXn?l{?>`KynAkhJ>Q z7oTNvM^*a*goMHE0xB?wR6iZ>|HijtxT#xUmm*P!gn_M&c*wl#E|unY3{AKoSt8rx@A;x5$TG)nz{AiXz=eel z8Ciarcw#=sm5|C0)vQ1wuFSO(ZU#NYl~si1l&E}=KEM*w37;15l@87xrQ0q^-^Ag@ z_$#Rl`b-^ss%Lp2g9&V0CEVN>D(L5eu<(oHbdV-bjPsgLTI~)_f3)V#8+-!nf@V`?2H>udhI_JIIEh)+v9?qh6%^e+e4b z8QfdwV3fEf8y%ZSHZET-68lFiVN!uFu@PTv#k_$5zvnzrGFm#ObhnBuNn~q$s0nlZ z2-_U`VfTND51@mN;&iE%v{zuMwk>VH2>ZbtZ*u@4+wRcRM;VefjBVC_-4ejJ>vr9) z+jYBs=j$jb$pOlvYki*Y^Y3fhZ|dvl{iF7IBHWS^Z-Djad0EE!Sh9oh#O*zXi~e2( zEa5zKn99E_!_MvZdlek#@oM`GeX^tR2x|P9`Nw3*V%G0Q69^NYSIE__SCQtEr_ZUF z7)d2hG0%l#4aZh1s0^nmT_de&)_e!0%Pf+x?t#+8ss0jZBEnc+@U1ifSR6e#c{R`1 zg3&t8xQTT5M5G5DtUU+BFwd-$)MI`FjhN5nV8q}Llcm{wvcgh$U)nqfH)=xK`!U{8 z$SfM4tE7*$&M_53;F58csE^52T{Sj6X5Y3G)!Q=ZflBB7cf=u5U36Rnz~mz-(=&|$v1it6BLD|AUt>}kg& z)6y20y+yWD(&zy=4`HzWjIBbzwlZ-dq-l@Qz9O4fhWAf^O7ERJa zX)DnQGGPIf9U3JT3N0LlBmj7pK`hWINU!BCabqhU^wICV2`yU|VCOk|R=*FF58fd{ zIa@}VSu3Lqzz`rBic+_pd3b6LbmcO+rZ;Y8f+U;vE=JC z%8$~yb2ozjxszoS1j)-0gr7ku+OdhpC^0aDme|P?B{|J%2PcBjNbHRa)cSeC*qsFb z>qwRyC)$)OK5kN_=&*w%ccVrV9Prz()8&6-+t2>B*e!a>fT=WXZmH1b?hP9W-;hdf z-bH_&gmPXTiUgqMZ! zfD>$y5#G#NvZUc#$ae#upGKkt@{dG`7ohYXX8<-g5P2J!s20gY;fWGaCoLn5w$FJs zU6hqhzEb(gt54;RpMEUgyCi~t{^~b^c~jyvk0G>0$3@ba$IbE)I{FWvek4!F{VeJOAJ&^`WOMTA4j^6){%Xuc=De>EFA_Cc^^LFkyhp)!^RXvWe`(5migxr3 zB&I*6QN%Z$3`v+ffIE}^6Q0QxE@+696AaLpZ{$JkzuDpG^ zm%sh>FXk?1O&nV8Xii*5o2&Wcr19Gqg#8bH^yl*DAALN}_1)k3*_WTmfBW2=@M`DbysXeYWUy@23X}}i}4R}*`6P=ic zpg*N#6$#MXjh;HzM7W>aN$faoCy=W&A(kZ2SDw&6$V0E<1C?hbR zm3^tJVSeM?Ip3J1zQa%HBU+BX=p1oU{9qz2))>66w#7nEI_G%u1Z=C1Z`(?DC#6Vs zp&K-P1mZPj#u(G&7qR5GqFGc|l7jh`0KQ$f>vr9)+x0tLM@h@|GoCA__xc`R-MO;% zcWwVozr865{HEW(ZLDkGy3AhJ@9X>Pvz$DBGb}LR{FmDTd_uqTGk#Ci+V^T(q|O2E zG^hZ@F6>1|q&%6Y=g>ZvqPj}-N(Go&U)G`N z6XW2!1jr)DDA^Cg4w!itAu$wViKjSB2&sFb>5d0~$ zn!Ts~Al$325b}5KSQ;ZT`?t3&dZLM2fixCB9dZk>&)rEo0B|i6mW$RwPT7nocs1M~u<}KPny9Bxguk z8t6jR9`GKTUQ}!hJ@CKCZ1Jug;Fd0udt9r?T-$p+Y$ijzp<{jMC1>ZkVtkaIv}&(( zPU&O>6DnNj1Ls|A9yB-=k8_)VjTX3U!X+bVC+!R>S=oo!5tT_s+U4V=-guEv1XP`c zS5$$wwxv@*knR||OFE=GRFFoxyJKh(>F#ckZs}$ONs(rVfuUoFAqKeI-}>&l_xl^p zS^J!|_wzn414jCXI6e<@{iq)K6gq2*QlpFE}5j^j=sncpOqlSUdD^9pn_>eyVs^D%y7aD+ZwBzry+F-qjZ7% zerL_3HIb^%=H?3Z>Qbn|<%n|0H^B+!5OqX#NansJv^gzZEl}Y0fHAhH9CEtOu2X~T z>NW=V&-g?Y>zqUgQ<+XOhJgADhaEvUHmzBVzC?zwM@)mdluSaHOjpStRyK;@xDPPn zLx}lO{c(EtQg1T;s5tECqP$x;E(UqwHz5yN$RX%9b_ADi4;*r1;_oPtAG51v8ZzsY zi{_HI=!ntVbef(rWcW=RRtWke@vd5~Yk|+y zT=cP%v@|B-)F@=0{t%Tg>r#qw0`$7$8F^50?Rz;|z|?_=1yb12(v}2ffxETZQM=Wr zrGf_1kSl~ZtOp7g7U#SjjK=sS=0RL3>NPxeZVB`mvonLlW+v$ruDiY@=*4gKWTxWX`1Rum!6 zlY3k3U>IYT+%y<4a_`hvq?{5R<=-7d2@K>EkHk?@h##y;p=|)*SQZ@&7O&!#(txi@$bkB1+i;&5gEn_BCb!msRD7CYajV>$?<{Q>oqsRBvQbkmT>E2b zrWW0j#^^SXKnjD_)N{tP+jb>(&3&R%5dwSqoMfH6npdZnRMe#x-^s?JE$dpQd6)>- zWb1M`GB>`kSNu%Qdk9d;&2E$Os;tY4UnP+i4`!RWXNZ7ei22AzQH7Yv_YGQ;-VxOT0+>{v*7ME33dxJ+1fOMfW$x3Hg;>e(|)S$1(c2cO#KM9(*C zZu*&?^}3n$`Ej1Wh2&ff{kwq^E_7t+9z>Hu;UPBvPway|+j~Szc{B{)PKFEEoHiLx#^VdTvjx zr0lnT@R|aZL_WaN@*SNj>DjZUFO3XJf{s|5Uj=eZYqFu_!1$B>)h=jDR#p1;4N?oy z$#I4GEJRi_$F{%DZ_Znt)SQQ?E~w_J_TxEzvAnA=iOg`ybMP_LpWEp8sR!{?1TC>T zZ(#Xy7M|Iro;GFD(uhL@g03N1rN2_Ju~u3jxn^YvaS{AlH17{vu!k)mx-*%kspk_C z*JJ?{Ab!R|=5V`V3`W)OT|ZsZ$GsE0o<79urY3a#X$wLRTgT?~Eo5^>is7H?M04#Y z6Y>A9Xs}|iwkM|t^|K#%HTC?J{bB^G)sqa$`h19pLTo+4A%Sq(@o5^Mfcs_)UB7Ox zJRq|LG#~0owm6pA)*A>fK-_Ps-7WVv`{m7P)tD$JME}i}YbJcHjf_Q&xq7Z~}G&DR@ zbtei@xsh6ebo)i?HstY~?yR8TZcr#bnDf*&(y8wM3)*xu${fA{P&Q{eY^$upEm zLI@ABMj&@rY%|4W@2M?$Aw&!8uhqLu1Nm>$OCi$hhWwqLCUsAtv!0j3QmBha%m+ei3X+p7XaroM0N2scCaEd(|Q8$I@d!T3Z z18t*q@?^O8uVK=@rlYVm$i&+M#p%c2yE?z(_`G#D#S?t9ejzUy)TOo34kUs6)6bO} zH`QX5P@Ylwx^dWJu^J?~IHN-HJ`R32!VX zdRyMA-`yB8PA!w3$Fs{-nzGr(nzViXvsD}}!YD$8&*RE{xliel@?lSQT0%JNurf{r zvby6^e5895RL56XNNlj}mmb-5n@b9S40dcr$>K10B090vJc3^%zL>LJ*BH#(SBvCI z3GwRE*s?^qtaO;GgzVd@(S@qjl79Jo;THEsyxRcE1}-tbO|mjG)XPjPc4ji`gevnULnC4NI0!O`RV+#&kQYL|7rGeK?xvu zu}&*J2w<+xNGKX&vd~MA^Ss$^hgtsfnFy=(-A%TgG1Hh@J~0DLAK-eK5TU+-ogT!y z#qEd#Z(_z%5CA3MuO!1BHg6lqRTrb{+m3Hi@I-ZvC!Dd|(G(EY>{>o!;xB{c)%OB4 ziP+%)!reelDjDa2?~W3rC*Scnrt6?y7p||R<7qB%iClus$~64=Dj1@6f6IsFc!bqi zAUmuzU;82w_vGTlX}ctVYluX33yLa8-p~kGhK4kw*?=0-wdUv28dBV$wx*ARMxr^hEtr%*yP)ED zOl#X$dxkh)C+u%E?juXb9f`7j$1#}avWo)Uyd@YsKbKu}@tWrT zVT!5m<2(y$1AVC(j&y68D*qKR_Cu~HuO{!s3&J3{wM>{F*6w^9jf)jUNbptn$n_sY zf0C{?XD;MBkGh(&uYi~3Ua?Z=XX*dZ4Uy85US;RAOaGSBH)6@^&OwPBE+-Z-H6WB@ zD?{GJVy`s&EkDg3>=iqA!61I1#^h{ri$-R#c1Wc@L}sF?*R00@dkV z;*vOB2%CF`WZI6(YTGcA0dlL&Ir8^~*=cMlq3g_+M+vfm?fa`Ci|?Bf1U9 zToOO1wn7&ZOYNysdZ)@z84OytOQu@?77e;yQ6GQjR=u41XI1Y-mCc%;J(<+sa}E2$ zP-B8rYdPkAzW2>!gNl`O4th{C_CR@{%oH+vplHb&qP;uv@_?*)c89urAzVE?cZsAo zu%qUWVk8Q<c4NfM-{2LC*&mFo!^{=X=;}hXfk= zrIF9DL~NE#01)i4<`#y)7{_-?E=)A(cweoysH8j?F&5ibOw@ovi*0*2&d1J14NuDZ zP;62tmlCa8e}cfzfB$PcHd-Hcvre=;H%)aA3mHU7htaF(L)PeSv2RgLDK=8MN1E+z zGy;}wXCc<`c+Rs3&n@`|{HMjUVBdnr$3m&+kEX8H__}87Xl1Q-5+}+`+o|u0FL@T9 z;bYJHAh0N=2Gth)k#qBL{^;abLun9v9XH;kRR}TzB2exQpoP2QflVR@r8#0q&PMwJ zV;6MfP|-YTXct(>nUO@=`~uX{o@~eYaG*!pu_rp1fsKCif=qk|;#8`Br_4XqoFIL~6wxxiBK(a=qGYR9#~0^Xm#mD-4m1gN{P`!gIw{ zGA%WA)dMM&?zqVEu9+`TZzk8WDc!m1AG&}J0LKqEO2F>5%d+aB(Fb1LXQIrOYOfb7 z4W~EBW^9{8_8EUO4=N@72SO?KpzlX-Fb#5o zX5PoU#9_W;e$^?I;%0s<&>iM7f7mH@(2uvl3gTuM2_EjnOuQvmntP;vCJ3sSmj(eR7r)t>DRLr$i^9WC87K|A*jv~E9B{3x%U5#vA<0Eh8DtU|D`r6#VqZG zQXBuHQajT8_U%d~(YQ6l>kPAkQRH9mzZ;Q@puc-MV8p3T;hIedt#c}U^n6p^CF@-3 z;L?_nZS`qLEx@I!-6{HEffag3)+09QRu@Gzf3NYdC`?mNV?#bY2`fhg-9dC~hz`cQ zf|#}%s8~aP+Zza`&l88ur&-RsRaqhnKR_;WcBg(*DQW)0(;@Kf?4Agl=kyTjthu@S zY2~w)zTp{=IFdUNx;OBNh}kH5X>=@T4*bqTiiql^d#%J?RYC!wky>}7ZzOlOc)q?5 zlyJ4^0XrQk-)xJzyb6Xear%H~{VqXSB1_o8lcAynua?-eZC*2!o_01enjW5vmSLwN zZ!!Vp2xd_H?Jl#(g>zb0RcBt3YjV@=4ceM_*(k{6#FNL(PvUm zrmm37l0Q&fwT`9mbFdb>;g+*uXe|a>09_j2-e@w>JdM1J1*nq%6vy>t*#c^Ee6v#| zn>IfYMP+o6gYkYF(O_pr>_*2%i)E3%R@`8gzPZ3EM;dlAP)=0rC^S8SLNjga82e!_ zDOrLBVjE*Ev(}Yp9`}j=;qC2mh2&}qkQJp$S;pkFkRdA-+WECED{NR}+;)EDjy0(U zQ|7eKBKqwuzjq)22FHPt;Iq@?8Wu8$8mEi4jFR35GVAP^1@qLSpNAf!+C zYnJ5>+>BCMIX(bB-!-@I#YSlo3sv0 z{__~VU)<~d3MG?aQb!!)&j**4C>s$xCR~xzJxDg51f9U6u3PSH>rjz%^?}Ar@5&(} z*Ce-!``KVl>9i<)K|h>4~Zl8 zgb1nU(a*DA07|h1GxhI-7_dSH%CcVpf?^;RlE-D!kxl7%98?(_>eQrN8q31!VuQ9* z*kpjf0o?4k$&p;WfWk-QHp+~+wF?t|>|j1!pY@j+#E7u298;Fmj`3B?brdpiGvy6h zCwwlnRG_Wk>pC>C55E6V=^?03M+SZW| zuAoKqiXll9l)7JJk=ZUjme$@0_9Xh&wq|S23Z;cxxoc5eE|CeB`*fkGN_{p7>af$4 zs&;PN^I`*!4SR$nURdpZ{;uMg?x0$Fz%o5kh}@9lbvOKeHcl&W{>wXamap2)oLsIQ z-gSt*JWd)BgAAAM=Y_*UrNq7wfi2Yez$}!%WeuteZ)>v>HfxV!B>%9~arY)-<-l2j zQ!0A;$lTF2!ZK5;sXj-K*~-6m37MRmbxCFSdAcCQ`}MXqW$a%V_s@}O8FY@MKsr+0 z9lDaMP@_Tpf$COC^-u;0gFaS_M?5d$0X#z9Li*0QO%qsKo!BvUS&dpurC$niZ<4jw zd%>NU>|xA$k~Z^hqZ61qH5uV(d8jP!k&G%%-1y5^)1&~wpwNYhe%sZyKkx*Mptq{e zH~BFk;C|unE0GMnQ5#hY`P3g-ke;wP9OjrUh&;zv`w;^2Z?HP6C7>|D=&v(OcJ8X#$?D!LEooaI z`HBtU{@lg$%1xX)Y}pRu*CI0M>c9o#W_w8(A;oq6YK>W0S3gwr@r9t_Q%0NRh|#sQ2rlpJ(zD7R!(-Q)JanrZX%3s4 zw!Pyq1Jb~T3giu(vjWa@dGFOJ)F1j>d+%4SQMQE4zC#PmQlNpZ^>ELyWCEO=KKQ>? zn0_BT_znau1RaSy`%0_%-6RqY8gac<<=axw$oW?ULi{FGX>aSVWWk+C=yZb2D*RSa z(#%;92cZn~i3KnSZG}xY5L2f@F>PGhZ<|HNloy%Dv%R>U`lF6uH|1-y5w zedaAMQti0LWpsJR1RSVTaoTuY#!vtSJ_RFuZ|x#?X(a%*} zeUOL#O;InBMIa^08uV*=nH-#S30p?H>lO5ipnv^)P-Sf-Yxyx^6WWmyX3oOJjXJH20&KRL^dbYxk&L;xYfsW{9kEotmO3r);Z>;G(~Jf8L@SaBy@@DhYl z{!W)$vzry8Tkh%e`Sv$z_-Lu#A8gU(%Bx|IIhQoV=3w^RhbP&w%|`4k;>rCEJ8m{~ zMiRCAH$qo|#w;alB*EmLM1Hsvg=oHr&p5~!xYqN#QE~zQ6K-``bai*%bm)0rf|f=e z=?vah#g7qoAs%!dl%_obaYktt8f(sn9dx!InewM|sum!G zsmXXK1!oC#s)|HjSQC^yMpU@TFSXa*r}9ekQZdz@x-FunYc}A_43}~PHMgiUMnP&~ zm2N}FW*fg*6!E1y$#3R@+yw;6q84bG#=-5v%sDO;8u_16fC(%V_H<4?`Yje4qyc^S zq!Lln>Wk^4j{LZN?fgkX6L2hdb?nU~@ui$nZs>fDTwNo3;A$P|d*$vi6>?;C-UBxv zAscL!9-KpQ(Pu5bKEOlqw@le#8#SN4riPoZZi+~vSbcWst5?Melul=(W8 zfXD6{m3;s9?+x_!N44Q~)MmTMfG(2mKcl%9Y9qTWiwMGQ`7Nd$&C-MNUlGRHrJm9CWfLbK8 z&nsDCOR;A&O1gRRgjg8WRD=65Mx6diKPFJ8%5jK%u-xWj+|olN${e}TVS(J)Priggv-lqWZyFd?~I1HXn=>&~%^&X&1iQ`}hUMW6cZ|Mk&Q?YUw!AN2U(J8pB=Yjo z>M*yBDx{7JU3&Ubpe6p2x)QJ5Oz64_Q@uPBS$a=X6 zN;f0Xs=r|c1WPEsly~vs-M+r8^yHwW4`{b)=KJ7~M^G~;;@q=^u+@fq0|~i=_1oGX7zlZ%;5-e% z%x%?cDH^!tJ-{Ebl@jvdq zL-X7pe>?_1WoX(Lcy;& z^<-82_S;k|G82)+Alb8}=PCC}9Lbqt$-b$I)&Bc=^D(JQjPAdc_+|8(ApTPIb5N@s zajVWmV?m}AuYYL5`{a`b6;sjAg+3~g)6bf(|2%4$yulGJay@t#Bi!(AL1=9G# zJlf$T%}eZGM{x-Hl@n(qKSwa@D8Jr$1!)ocPY|JS@+gYt_H2;RrdpigUlrl(-DM&6B!6Ib0@_w9X&Ujc6R zJlfe=gW*LVb38PEu6nD>hTotlwzb84$t2{MNyD_beY8rxn&jzKViM#Q(|wOzRV zE&T&CMUV$}&j&%a5Z$Ky#$&wbXJq<69ogy1YzNM^u@s4Doc8ly;4{q4bJ{QtXV@&s ziR0~3Sm?01sTbs{Lc}-e_fl$(|GTjPd(_6L_4b)jDMM8l!Q%J58)qtSoP&S%^;Mey zU4x(Z#c-db=b*C!N1jT42H-Jyq$&BW4ytC=nJ*=JmN2m18n49bU)|9m9nWNOuD^IO z?7>8b3!qrO5kvx%?zQQ?4k-D(^lxf=4O2%8G+X{~9`=}>I}R#(zCkyUu$12U3-8d9 z(P+`B`-xP0pI$w$dZc&i%(%BrIfr!TimnrLhTR{ef^#SLugS7#JqF?EtAZX31CeN-(pQqbwgm4`z{;n09aN`FvJ$5@sot9P{HpmR zV%R)hJiDq+=r(7gtod?2UniK+$56RG6{s>nwKCWzLf}OvfUlZU5rIZ;P`f7b7if5; zF~Iq+%ki}?I|Y8L^6>KxPcUgV$+O8WMYdGFA)E5deZxwV(CtuRc#6&bG~MMptqY!JvQqo1n}=6Ih)??z8#8jJ=l`R)+%Ror#(z zeIEsHXxpe~gq^c=gxGFKh}15NPdyHR1rtxg2x+g0G@W%`o%i_o;d-hlv+o71VKzY$ znNnEV^AlGTyriD5Ogpmra=)=h4P=BU*uQIqz)@wHNatD8BCpU0LT+9*>E}<`h@lts zQ6C?_cs}yB1#z)Zm|RCf(se2mbQhKBP2j!3<~bgVAv6?~!hIa> z!ff?IJD@j7Np1*fi1z0GSw>wmoXym&>Qw&g{PRZ51-{|T;@%&{OFf6NO*z)f>aRbV zcd5q=(u24Iez6ygNGXSFlo|+U5FH*+=4p?vK8$RK%VJTNLlqv3YvPL9ntzdp^zN6f zgd3wsAB@E%|I$=kE|IlWm{!2hy@EHUb&E^cX`=L`$7t;9tFq!{@Mut^o6?aj_st$M zjunVds>lfr{YszU^c7bET8t+%=O}Rv=HPyC%lH{LoO|J_3}gm3|Do>eAoN>x7CyU$ zj2v|@;oYNy+m|E@aS-w!dVgjGJ%KzO1}Y<0)oX=Dsy=AB3lYYk`tg@`%9saD;eXUo zL_Zmghwk`c&6HdbpMHV1SD5|r!0NSpmfj*S_vB;g7kae&G}tH@)OEVFb~Dyv?1yEL zF^87@3Zt-U2O}Lh$hLc)+!Ep-=E=uQQcVYPxujgCs}`a7>v4})+2Sh_fO5W@OjVp4 z85A)$&xaRb{Q0mXGLxhLX00+^6qAfFLf6CAtQ~Svwz={1QiD&V3hF z%_+Y!`czQ44~hGAQ!{9^%~si>H^2(8tcRA4#0&nlxjs_AyDr|pKd#Jc&ub&U<4^t! zQ+Gb*0JnK%3Zk6xo%-}4@nlrv-k9Z%(dL&+rmnz2xOdj*=)w&UrK$>TCZ3Ahp|GY3*x9n(Aw-jk3zO8K2 zTOaHbdX!BxoN|Wvl_}$K`C?5$$oEP4N@~mUOtzQ`YU@p1euyGsj~VHQPj=qL4^$h& ztz9=KK9Sli>ZV#{w%z z#{2w7lGR<^VD~hUUHL_Ws;b0rsJ0F4yD|g$t1oMxlC*T&WhmzjGo5Ea7O8Dr2p5z)%9oE)= zf)uXWKciWWDSxNxJ+`YTkqHR<7b7Wh#s!~+Wr+hrBhbsyV2A2$H5K)*5QOT+!;WD1!iLx4_2fnhJZ+ESZP$6o|x@( zH-@rSx0;ND)26Vn#6!;qCa&yv?SDgxd7!=;B2dv-GQ}&Q)dU#_5ndt^CdiWXO_PU_ z+P_!6@a=K{^c0*;Q0_C*^xTukSzWcR6s^VYi;DqX5dBIbNNphIv8vhzFX)KeJ2-WD z8Zl_7WUZHsDAU{}C{<1w*3+uQ3ZKy#^*_a~m9YeLB6ANaoe%*2L<*<$@wsSm4~@Mi zr0B|J=N-o?om-{oGHo7ixxs$*!0PGyBmJj_DfkW;SN_rcqL8N!^WM}YC;-T}b@u|p z*%lTNUz+999$|sNU4hTAGs!!T2SwmLOyG-|#|;sbf`J}y9TTy=?DWp-^^ezov+HXR zMu*;=1{ATTen zO-X2tAQHA49^`EQu$5>JxE2U2;HKfw$S_LQduiiiH%ooTkA%g>)`SlSW3;uC?&+ifaF&UoyNAjEWUdY#54fMvXgG&PNo)|0T$`D5M#NhU^ zMRMe^N&lAmY9!$rcJzHT!pjvv62tWIqJ+f4;KJ}6Xni4QZD}_C70G=~-hTGeeMRn3 z^WPA?qNUE`kPF+3)TKF>5?7i1)cYLqg4$0Rgauv8|E!W8LtZj-lurI@lgf8C57Ytj zYPJKy*avFR`P!`+PllQ)FdKxLO4|>rlo~1B(PUt;)u);an*01c-3gB zmGC!u$rDN&Yq21VOEi5J*JY|t0L&7Nps&r5AvCx(z30c@KN#IFpUra9d9-wJ#j(&E zKuy+qsn??~6`Z*|xqH*Y`bDv5dh*evj!&aXjWrA-)E0p);n70ZNdd| zlGB!~8?y>FGwA!p(OzEQHos75I8MibSBn>BZI35frG$?=3{B%iMrS)>CCW+ODVaHO zg?h(pje66n@s?ZgpRoJk~7g7?&^sdCX(B{0aM<#A}-Vc+|OFyL90{vIRk#flpdZ zJ$mR_OrSRVr!LuP=4ZXi+jO$-e_;*MGV&UJ#N^4Ja^%|A?ga|W6n#qk?`4CugNHvZ(MQ- zToQ9tcV9eym6*?rT60w_BQ8faeL}XYL&O90tfU{#pw%G8L7*t?pj2tN$jCsLl?gkk)vXiO($vHSfK-`$ZK{bISEU8oi~$M*RN zRzvDJc80(4AXBgop3sthHvUm2;p1>~(d>#uVNECP`_um5Zr^tWT}t2m+%xB_g2#Cm z`nJwMD=w-~a7(dd{(&N%^abb`9ds4dV*&|!(XVnj<5ch!?JV^-s?z7`RgD1R^x>GrP zAVzBWkVjPuDRdY>?mDSwh;aZpE@5qWsr^nI_OlZESq=q|>SW-tZhWQ9>9UET{mzYq zuUZ~k(Kp10G+KBhoX=683b#)lzls7)zjr-&7Lev@;C&Wlm03}~^DM!`)%iRo=8Ez( z75$UN)(lB~S#n%o=KbwaBk7DC<_|G9AuI``!q!vAIiwB?KN$nphrb8q>Rp@g^N{v< z4rc6w?e`~FuT@Bj-GemSIVqSaAfwTbr)^P)|J{?kkS+1O5U@b>gIdgB$0BPAOuha{}b^p4}qzKywf%JxR+gob5f8y@e z?ROAuBY|E*g(vq&?po$$GGK<{m6b)e_}IxcT!)7QN6#*_Hr52 z;A~)jHT+~4Op1p%E8($wg{jCmJ`^VKVe0h}o8K$%%tvCIt~sHibUtvUMamHL z0Oyaapua31ecI8*3bP%+u8^nH16%q}LcHGvQ|QR*JFD z|ET+Vs=JYci2e+Ua-L0ZcfjbcNKSJcL)=e+u%Rci3?N9E(XCFTYKP zpw<$YuTL9tnhE$h%`N%k{i;GsQ&`D{VcJZ&JMX6cxlEb<7kmX#(#Ykr)=(TodyMrY z_>f9*PFhr;`LSZbUflP|rBOWCT!|*;)3>7ouN2jfpYv=TL0}tT0(WNc7(;aD1iQIH zV4+ly=)?2v)1yHXr59Vs1gW%yq-65TKu+#n@pT72#{O)gw|`dYQwSvi@KpLawT$Cl zroY4+I9XStxJS3d?RFT6Q0?6x#QeEStol9?qK-?S+_2~NQ`^E%&dAc1cX-#fhx;aH< zmNi^6?DX9vzSiV0=n*;%&TQB8h2ir^rPjB5cDMI^zya*1C!wX6Whbp6MGsjImps>V zgTShK1cd;e9}+Rccck^b1NfKVkY^?7oO8r85LQnF2M0a{_4Z{(*z}TY>jX{Zf2+2v z`Htjd>#u8FGdg2)X@1t0r!`~Sf)Y@AT-88pmZ<{x`Wk@OPcbY28KdWi=|GN z5{wD(%b6~@>H&p3q66Jm#XWRZi8Zvh)AwuQ>f5p^5T;8)dl7#dDPl7{5ak$iVs-rA zeo*V)NL!n!RSG`}d8_agntB!BgA5h@dIjD~;UDvyuS^*d|AV(wadJ+aM4JXO64!9j7$z?jfS*imF+q!J~ zoMVt7iY|SfwOe)RvTXCc4b3V$jTy*RN;inRY{8-ji)3oA;`zuKxD-5~u1k3oJ?jqu zGZsiBX=&b8JfXWPU$CzIt?qMod3PWjI`FG?6vw45>TPbaBqKFTR%Q_&mo(|-J?QVo{i#^RyH*ofY{#?S>OSDvuM@$gQ4nxSBY*a{e?P1_ZmeR8GNp);9% zy8FI(t@C7iZ+fZq_*Djo-jqfKL7M_DFSr8mm8K75pC7ZQnmvR_@N5kHHiA`+G&nR+ zJu?>ucsFOvEcH@&R)TZn>+CLK`n_qJe&={&n0SZrP>6X{9EGVY=e5{xLzMNgO61-f zYu+Ajr*D&-AVDuf+Bo$<;H)`f5oqPB540HVuY&*i$3#$zzWEbF4AS1$-A0U(@P#v{ ztKOQAx4l31uxG0Y{iJ+~7W8Fq^EbGKa8D!p(~f61~ieka^^}T;;78%&t7Cv$DhoO2Zl0m z%lIKHx8DvT`r{=^Qdf&^w^@-&UA?Gx28zpxn{>!HMvug(JPY|; z^l4^7BP3!%K4_5-V9&fEUFqcjjPPq4 zPB_fDcCU4;YWB+ce%=nsQ-X%{y=;a&9`9V^7dVXmTKcQEX z`Hp9UVVw%B^NVaJr$Yzq-6GwZX_@EjT29$`WE$y~))F5@Ir}V;nRQFqvAP@;eD`8+ zsWdZ5>Gus_p?w;V(wR~baZV$U#Yo{S zb=Eatyg!kp(%`b@&Y}uD|v*5br!y^vSvA#_vt|?8EPS<#a^uT~G;Or-36<~s z=^?hh*Try=tT#&@c$V)AZ8qx;%J#T;YHo+rOFi{=`#tJDU9$9L^*!%*f%E$wATme<6BznBmu zt-mDPJ_gITSZ&+MO>fzj!%L;%t?YGEDmOvjt$&y8$MUgosjxKQEzFL3vix71CD5F!+7!@8yl>*c)#0+;IWe{62zqUz`K?~%fKfyw%)~PP*`y%7oO0J%abu4feX<&~xPH1Sg6+xCep9dWAL{cIZDxEz0(6t7PcpDFD-~J9*OZ#BcDN-bDQfm{Kl<1ueqLjl zVxU^jJxiI~l~>BsC+ZDVVHB(SYmooPI;F@+J<6gYwL`T3j5zq9xy)(ib7x;tGnLw) zi@c-sj%GPCa=`HFYbi&#uBkjE0BLZR@~_rVW(M%{X#N>Ng$0FPFiu6ZLhdk8Pv7Yw z`-<@pwanX~lK8#QviNND;|3$)d2h>Bqwf6tdu16#akxH9f>J1y}D6H zjG*x_B;?W~(KG>~aZ&OJJEjP;HI}QVVv~iB10!ZazykHvFa)hGkpm0H%-v5Dkaj>V zJQ?7CqKoaNoZ6^LkkZ0j-A|Sf;*>UACzC;o1bCaD3oQN*p z_z?m&BO$7(3G^6zdZqAX8lyNiU)AADS>@$fvFQ!s2_ZCJ|Bc#0jU0ri>c4K<>mT^; zC&B>*Y85GnYQYKvJszKd4Uj!-AfmvNlxIqJx@k;hdFkQ@qf?CX2}8YY^W=p=4zR#k ziFu-*GI@9tww6({eU{gvihbJP+*qEX_Cz_wN#k8#%$C#$z&AS7#sNyc&LdS87ka5# zqd!y5adt;P+nACv&HIGA#I8cv+e`*3O)|M~5AU)SG6yLaV?|Dx)gqAP2{Zr!nMr(@gf z*yz|cIyQEUj%}-hj&0laj?uB5{pbASjB&nmxi0Hs)p)CF&gZ!v3%?b=`uY~m0;*eW zlVO`$99E27i3qi~e=>Q^9;i|fO{aw%kCHl{h*4$`W_B>|5(NnN(l@Lj9j;QkhAx@} zoPu;UxKQUS$%bIsT8J5VrI%&W>fXz8p&i1v#rbD%c(P{fSb+sK*&y|9Z_ji`;T`~8 z&+i7iiA8r|t98-(H6Qjetv?C-!Cj5{--~tHCc8N{{vOcS3S>*c79%|heGYgC=K?^F z3x=Nk`h9O^IHMdm;i&U!?K5JYh&YPf&*u`U8-_`GxMvG;Y~CabX*C8%LFE8YIN<#H zHTEO1hiJ^lW4s^uVas`tHZs!lE`B?rb4 z68;GN;S!aCW}!!}$5&2}@2Y5TXnSNRZxzQx@eR;S@0Ybt-Yo+s=g-G0IqBEyF4QR9 z->4mjginb5*QK4)ZGPEv8Ye0g@GEi2Q75}V2Ikf9qGw6#_Jb?~?P5pnhOql+?E3DE z0cgT~J(SAUf3qO(jv`e(aOILiZ0P1skR*AGnsKHz+31}`VOP9~Z&+-gG`#O*9~v;L zy`#`Oxs;%n&n=sqgeb>olSlOw7tdKMv5&uBDR{uhjN=BQjQC9T)$N^w_vOa6?#LRIVN|dS$LGV# zC$W-1s{`n-lD|!%h~VrMZ&2l%;OvefdLF^#6^lT6eyHId%apKCfz{POUu+zn7A?!x z&(L5K4FwkBlJ*6=6-W%$iO6ETJ9#(ayOmHOxL>@o{TxS@*ym;h!2SWp_Q`gLO)06^ z3M%K*7gOH$Ao{srAzqOP%jnz$dg6nC{y8YAdFmCgEV`{P+lD7>E!q)&=NEu{Gm6nrSs=hDY#W3ORYaL}$tTc;~X#?;7z3M|4+AOw(R@Z{_dQ z4#nK?uOro1tT)g%G~!V`F2Y#F42b0?x1Ghmtdgo0ITNqa;}uY?F#Ps;Y!am}bi&z1 zSRlpHCelaJ_uOVq^;>uY{d()cqF~Ra`r%-{92w2Cr3o@|hefAV+n7dG%JN78)TNst z7=_^9W^X*DU~Sa-P}D=cWXNjgjG1y-!O@$G=hov>x^L3{js=E{y-K|N^a&|9QpJjZU2jMCUv2sU!PXZl!-ir%v6*;0bEp7>&! zZLvmaNumf2=#gQdnR8%UTiBs-Xh^4Ty{D}ZAk3>kI#r)E5 z?zPVuqgcM(aM%}3|J;k*><4w!68?x#>N$|^iQ=Z}5q2=wv3*m)rbNTm{>h`8J<@a2k97+f}uTmA$ zjXa-^e@)klYKSEMld+k{Um~O)W|HZ97qtm?Jv=`leRL$}j2S))?tG%q7GfuJy3x4= zT+t3`FWlqkg{_{nmcM?w7L@AgA5CWFL9bHI;p zCC4)=e2X}3zYe6<^sL%SP=KaLDJO0{KZ}PFS%hWu-hu=PEfZbKxU{Hze9K&uhc*#i zqIb6ONsjbFU{25sSHbZj=ci`TUOMZN!wpdcWaa~La7n}^|6h1ygjvz#_V}aXo1eny z%F}Z3!a5iKwl9%jPqWYB^jrhth-nXCP#I3U? z`>1k-8E(Y)b@$&$x(sG^xHCC^qU<%MBx>sBk>;2@)R=*O|KSu_hN5W)K$S6F;|_Pt zJ(~x{7}FrGRv4KE(N^lu!B-j#+~6v@CDiph$W>)BpfaJ7$h-Rly=5ZgY}0^cYV4tM z>8}g5$J5Z7$wAxBehI>@a4=NTK9k(hUG5S^R^fvZ(?dNu0hHYlaJ~fCIn>;M=Jk)D z9v3&C)cZ=vb2B03-2|L2hk{1iN(Hg9zJH^4CpHM;foP-3#;jUIC#-ic~nW;rcefB()7_jt?B_40UOFIyJ z@8maD|H9>@Hvf>@IHxSK+&JO(upTz~y|lcmRd{-QKThuTggOD# z#CUKh6CmzKzKu~L1>Lb$mA2(%KiaprZ)D)z!5&vSTQDej+_vp3p$c>~lTr9;{~EME z6y6Gp9u_d}6Yr~@+V#V#p>k3jA&8F>ThQxa@B&e?>Upg?oj6>Q%qZfAsAN1E)#8E8AIP4#YYc3j?6xRwtK zG}UVD60BlarEl2Rhxm~VW9ABl?^Rz5h9Pj)s{EC z!?+96(bZ}YKS-G$`W5@w)a&K(Vglv~ zuE%TxHh7p%Jt+JKJBGpHUhQv=uC8Yu!oL+nLlG14G3-6M{*R1cz8(K}ANFWnhOA&x z%x4S)aq@Oh#cYVn(!<_qk;QHFH*7K~O?M+LJ9Nb60vL=tW3LphS2|Ymwpfkd7YC2p z$1*vcuY&=V-yP#2V>RS4b>^SEClQrm)l0Hvf`cQ$Lh>-SA2&;E=LKbm5tW`#EOo*-;euwChSBnp+3}QQq;i!3 z^#ar|GxHUq_Z<%a^qtPR1En2GH1z^+6Y#+RZePo*drbIREA>8 z_ew6i>NsX)nAnJ4klI#13_SAJf}`64BXj+*Wuct50WgV97Inv2-)0kH53c+cbUmIyyO3V>7=uu3>2l?m=AIxmJP-L1z!l8C z<9##9k`Pjcg0HD8v+JWD^7;HXYUC0#<)!5^Vv`z7RMlc**T9>sg)HRBcX{}xBFrglT%_kP5J*aMBdCc|a9P8u zmm_8gLlVfL>-GD6M@j#a*c)Ado&rQ6Eb6$&tr+2?d+yMVxNsE>!w8}oDNbRi2K0cgx2|S@pCg7K zvYXW74j4rQDJZ4&%0?6szgHx0>?^;Um#Fvb6!>ez)6Azl!K|6i&6}tD^7jsu?Yv_! z&<8UhgXMEfie&68%HaQ$E4=`H2tw1M`I7YwCz`NONYPgG{f~y^ks7YdLYCP)c@;)| zkU2v%Zo?H{*nN}Evsg=-_4Re}c0&y3fyQsm7|4kU^59eooc0vkgbeJnY2tUuN{sr3 z{t_qBeZ1rIOzMeaeU|U@FS!*NooceOKyBcPBd{&`HLkX$mRb<_O z8!lcqztN{;jQ8Sf8>VW%>>_4jE1_TCtYVN;{V0S(Kis?oCre~ zt1!t9=+SEwwJ;;)fp9Uc$?;4^+ECS7!nbUzOq!HmDn~=qR&(8aOO4iidbg88;Set+ zuY^EZrhat8-f$b_GHnSl_ESD1)5oFT*KyL-E;w%g@(O)4!ZKWk_q60fCY64sW|{gu z|LhBww2v#?ZI>~ZE5Z=^Z8eZ2`iTLariy0GH)d@ofpY5d6SRS2|Nmjg5n{J8zX^K( z>Zy)4*R!p6wT}btif{bPLR`qy((NfTZQne@(Bbdw5t`ZeTws6x)XMtIp^ixm++f>} zj@!0Sd~YJ;ha_zJJG#i_zkRb|eAPq!ClUuuw&q!BmozPn#C`x~+_EjF_qIM}=!2s5!Q)2cs;qcV-J!W5r-k=CSqbcx+_->?&XI znja>7nd|(YJrK$0Z%z=HC);G?KM8rRQQ9TkKibEdS9uz`$dJ~duT7bYlKknT&HBhu z17`u+x3K&RG2Ghj5Hh%u{jzy?innE$SM$ZtrZyJqyT&)9vT{Yfq)40zM5F3uhFei2u z!3xQs=u?cII8L%jRgpkN=V4??6V#`%Ts3sv)TZwmU&Q+3k z#)$MO2i>V1Hi#_9lutQxH_qLyW*8kzfT^>;EAi0=7lsjyOXL3Rlj2}IRQU+-k9kUOY{H{^;NJ>+Y>bH<9>cQ1!cp{qr`vl&*)Uz zJsni4LJ4~C2>vl(Q}aiV%~^SV3MtQvT*qjIZtdS?Ju>Vc*q(mrJk*|7?l?E}EFapD z%R$t8Ceeq7JU%=MeQ;VXde8jOFB76Zc5Se4SZaG$}W z(&^{H?13jAR~M$J&_X(*T3-U`k|GZ+NO?$rilpc*xuYiva;5}Z1$_Vjua|cWAMaBJ zuWPb6!4APCu+uisu%r3|H~Q8;6J`2dhj5q+GY6%40>pxay5D`C67N6M&p$t|x%UI&9I9GXA4&dU?E;l|AIG`&GSU)C+d()nB>PCSk2}3qBu5n z31M~1eQkL#aO>6iJ+f^Fl1pkn7F#J|-tweiVYGWVfC&DrV3J^m;F);cHAvb}exCUP zL8I6e<0?XJI3czA(8hi%0{;}*d6@}yhE)6jFj7SEvM;UBBjSOrF%- z#QPs)v=a!!=iyFx5_#1?wCFx|t>|PGAz2}F%;_kpg0p~`h+j}Whj_hY1^i0o05JZU zivox>OLrn+l`pS6Eeju*;WW|gqvT=Y01Easl_%vsW$z6w9isMLt6AAT-6=T85WWZ7 zRE7xJKt^~qaku$G&ve9d4=ax#q%-O%uubk1mo)7FH*DM|rD~8Oaer=M^riJ}S8;^% z7sH{3%-Gw*P`7QA6O174(~jw=aLeCK?#tM8lp~gh|J-AD7~0mmAl=`76v?ThYz#Uu zmOtrs-mNzEw>E=Ho0m!ZZB}bA+?=03XjmtEhyaGh#?;`71x&y;#sZmHMbYPLM zwgz#dEh9F`y^$}Lcto>&F{>VjSrvJzaV_yu*cGIV&b9TB!+R?IFE8{jK5ai*u|8g6 zcGaPncT5SSP7~#-c2pg9rV>lA?CxYW>B6+Tq(~mDJjbj$pDV9+b$*cw%F3;w2o4k` zOhrIs8NJ_W4dV{%ZiSF0Z!JYF3m{msc~p2h(v^m*Qi38Q-QKD?#D16k9n!eFsW1UG zYUo8CpCcm@zC7O;ijfh0JViQbxm%6YELytJzAj@qZwem4)nUiS=p(rU)VO8~sr>lU z%j*EmUKZM0-o`0b2CB(7?FX8`OrAO*4Z~p7zSBO%?CT&&!4gFJjKE`w*Ro2P9H^u0 zqt>PbBDfk-jJ^z4M^At-qKWe;kTjIq|*W<=2?Y;gf6qjqVb)Oi*f{kL%Q^KVhA0`4O6?lttx~Sf?tBQLK2_Ta zKJq};nZ5Uw38IA>F$Szs31+wKf!*mJ>>R_zrCerR#p%3L^sU$_>XJHOg4pw>pper* zT`t~qwm}6ms3nq&4Wfwnk*1cOzB(k_!Kl@5kLsc1NkgD$z=ah@e`$P?M*kocY1ra zzWd32-ah#&b^AW3d>$LVi^f;If1n6wKfl)0k$YZGbCqv-$aV*Ebesb21k{{xecH_E z`Q&!VaK!5-1D@ouLC~#9;#RlWZZDd&xfqd6iph>FrQxZ$M-*(15#e)bGG)4?q&LVf zn2BJNIw?Eb3_ObbxD(N1gM>F#we9ZAGoWta+lv8<{OCca&6s&AjyT0BJTDam?U z0_&{Ac?$6VG~6=QSvf9QR_RWBdid`SGOs(_&g`3MC(H+qBV7HU*U8_1Eb^U}X*hxS zc-?EkwY-+!`~4hXZU%GX%9kQs;o2#Culx9;H~%hUki;M1rMZ^87VXdaK9{B{z!)R6 zGFRtav!kDK1pJj3v1BIMYVLh4z%A<7_^OOi^?6839J&(&C1U2HZ=u`v9rHepOHjmLB;NE5x(*B|V_d zuHvXuY&4w4vzRf6KD~JDdoE7naq>Mo_E8@~YAH+7Hn&yJmP&kCm2l{MHrvBO@F3v>KZ_8zN80P9ZCyxl(w(JDMY zD^JzFOZ%!Vx3$}(UPT7zcKd_zO9w2}BXrr*wO?m=9KuSj zm8}yYfT4^KQ0o_)4Lr29;$mkwyCHV^58>Qvh8@Ct=N#qPGQ29_xEB#PCq+^V-95vU&q-sY!(rv47UMD#T;mu8WA|%@|q| z$JFy|gW@RIsSS~xdy(1=$Lf~eh6V7aJP&N*Yy?JAHLiy^SK|yOr zVZI1}Gmt4@R=^0xlW6~x)sgtJ36BQEnxm&D`D(jn$sWs}VmMu!qRM1hSm2*7nKf)P z>z5!+)^GnYDH4P{F8&Y(opX%o*>w%xh=Wr zpl8hdBlnMW=Mw(c4x?LP%iILFk4aI`R&(A?=Ki#c>OS9hUPk=LAtog}+=eb9ASaAK z;4Auj9J_JBTR8mMmI!tU_+QxZ9o|(IYt=*oNs!x)i;~ ztvxze)M+AL6>lW_%b6>%8OG-Z@Vvkz8U(-j!VK*eRfU$|nz47wR$Vzm&6nLhQxq+Y z`res8geR0*-m)zZvcWuHc0z?XiwYFql}vKIHe{Hg;HF7LK+2b`XfHM&5B{ z!u2V$1uIn>3yEa-XSUX4a)E+LSKD3m!oIHs@1GwY2h7{Af$t9+08+rqGRooB4TBr{ zjDCH#O}%@LoPIkZTj601c( z+ufNVki?*zh%N;5?YnnLy-a+{U2Wr$F&>pPan&P~{^fwK=SJ>YKsO6Y#nT~7+2kTd zH^RxrGmrU~^Hk-vz{CryjOZ>%j)fRMqQ;whSLPX}vD2=DJ43(skN=&RFN8l-doLQ_ zKAwPijOUh+mTWnWv||uDSa8MnW^=X*nM)4wF|yOo0Sgw5{>8a-OfI!$*1F|-R#b=y z@^yPB@`W;#Mltrxr*Rmbk*^kckspF;#G`0zfT0mvpiUN3{2r>dd4Ipgw{46o1Bgja z|JHM)dfMOvLV-rO3SQ~Qu_ys?`al^IOz~d;S<^oY?kQ+L|4NYD=spa5xR_{RXJhvu z5jB!3svcur$6I(PaSjyCOC)-FNS!P?5bow&JoU z!^nF-ktr37VVP4$&)Q?`(r5R=b!NqU%V-?V9J5k8(Xc{1ysoaCB+!rdy~{MI(M~(G zU~ZmiUI@k1USs7aSy!3Abqe9YXWAw6Q1LK$^+ueRiRv;{G#${3!TH@;hGO%j?13d` z)}Qj2erg07<_U?P7ur7x9|fl5FGYY^CFOV-Ff$|afN7@gGY}JxffAiZt>s3#q|lT& zyHDS8dPQ$mil=@$<yH zN)Fm=G{T%at@;P94(`qutQha(arxcnfMfp)?{?p+-gwY85csZzQI6+JVcH?ou`O(q zhaq*=U<>Z10DJRx#vk|aK!rPvZ{OmPoCn?8H?WbrN&!Wm9$z|_|$S1dYHf&Gul&;P8(w-)}w{1 z-2~_-_dBCl=Ii)6;bUdbR+gWI+|vjAjKPJvBVj(G%^IM?!5K6Cb&x%PoXG z)Z1O7-b=z)kp~XvA_jIf;?6W!Rg+FyjHTn>tWRF$?}s{`TN1Y2n--IdP>vg@dHxV~ z1o_i7`Aosv^g5$;#YYCUMQ1IzibXniQhSCxw7eb(6b$yymcoz%rRPaWr?_U3eObSz zL3Gdw>vrT-o^WTThp^|X{O4gM&Jy!ljg5hefMVu9<*0zUyi}!}nbaG35_M%`vTKa} z*M{ROh3>aEW`A;EHpzS2&-eJq*?2iUZB{W^(2XKvq)$q+GvS5()flj`1?*0MK$o7i z{psU^JQq_u-(I5#KmRZg%KnN30t`IkxbS+ejW;^|G9~6O&|T;Y z+DI{UDykfrY8Lo@8;^tb&XzYTj-=oa9ugi6Bji9sFognVcxP8*TKShKf;*tA5L%&XxZ7#K3adS^`$| zpju07OH9vH8~)_7vuJe z-{ZJ4Fj}b3Eq9pBD4#822byb%WC%&bR?}X%AHo~S)w2y1F&wV5cI1XtB#+lrpY_#( zn0Zy3)G?&*^4&V+A5-^%x4YJrrZ*K-;C1_+4mRWl4fk(HPjGK*c_`X$*=fJ()4$=8 zh#2btp}G~cC0E@inHjEioZ;}QLR?Z@ful@Xf?3UWgLehtyB;P4i+kWk$X*UdDG7D2JQcukPVz+FK4LABw4vB5$H=dMf!nj=zn{P7*H$e&}@x;^&b1@7dOm6X@n^Dw6&8N}J<6X!{QJ-XMD;v64!j6)}U^@9+w zGCz1A1+46Fi^()GkS#lOFo`uKlY*7w@@%=f^2jW__+GPH`r?^jC_2Sp4Nr$P;+-8w&v-`cK5) z^|AXN6d1^BhwCI`9%D3=Xem+sA$YmVyg*QjGW<=Yh%$uuDGVnRZz7!y3KH!&_u zWC~H{=Hu|dQNOd_=n7pwOd!2s;)FxNKVzV|Jeo|33z+D@Ch`AMJ0R@A7So(?a{-OrRkol00BaS}RFQ zxroIAF#4pFtSgX4l*N2Ld|j-?&t5Ca-d_CSBgmOA^o>9n#TT8E|le%_mXG(@1FNpJCY!n ztXw!v5Zx{WwtBH>=g6Nn6r+B~04@!Mc~jmFuII{|75ra5%Y8pS z&2QyOTEaJzatPY7W)x_yJB-)hFAUJWTb40XJv5}!^8_qzW{9qS02_cXOY>uN9G0+p z1k4cyy;|1~l3X4o!%dcT3UK4Phd&dJ&;OP_Jd{m2|A|wCnQt)Q`q+pKTaz* zbiDw3D{;Smh1iD)p)aqNa5#YbqsYNKje2(H)R$S8fj7SsnLh$aa-JWVg+ApC^1yq9 z{ch}1E7f)ar55??kIa~bM&3=7B2q2XKVR-NDYC*BsjYRPiAgp)gumWhpCf&5cM{&? z0B+Ev$9DhHC*suc`j`WjLIv10tZWHEd8G#Yky~GchCR3nu9OzGaDzR! zu{P)#Rp){Njnr>yQ4(&48@TmMf9_z=tX6O};kak*chHc$EwEE+y99#6B!vfZ19Q-{ zWi8;3J`}Gtm>`Rc-am!nK-Zzh24v+O3}5W}g(K0TE^1w<#3&YY>$1P6A{&gxNWMXa zC1%9dB@03r^f~5RB!xwu#@%7ZI`v7;$fB~RC*PVyeR(7_+?fyL&VVzTBbtm#@=>PyGoIO@E<0ImQGlH-EaggoISgg4f z+mHC2f7&K3b(q+Qh}H@nP_y#TZm@FZ?bmXq!t$`u&3)WCDnY%blRNQOWLplWr=h<$ za9?hQDW$72wrT1Ld?VbbyF)T zfjHyZoN{p>X}`+5Z22b?<#c$~jysBM2O}&+z10>v(4{OFR{c9kv8;TyrwjW(WZfn_ z)%4JsWqFSZISfPwt*g^DelX8m6b;Bs*5=!#sa;hkSVZ%87F(iddXx;I?wj ziYhz68=w`)v-^~Av^PXx@oyocFJ0bn4)Bu7$+8Yzj}bQ*9Ox`NX~+;#A>I8IeW6K^pn}+xakj-?=T0yOY_nMC1@r4V71SZd~jWg9H(T8tKsDhYLCTZSG(r;TkSe4 zj)D)vS9pw&djBR0L6ow|36b#D72OX@u>%)&<7&tzZv!I`VD_Wdypj2_d_Z_Hfmh@0 z*B$kv*i}p6IZEkm4~@6y$8p2P(psd_-%OiZgB<(Uyw~o2jauB46Fy3}Pg(J6!YB0? zw5GoO8n`B~>t&%Dz7aF^`B1tNA*%sajHiLy8GI!ip5heiTT7xa=niao36Q74cMSw0 zE~O>J?0zRG7<3iyU#vnX<(RW?Nn3cFDl~+traZQy(dI?|UO(Wc$pEI%DzUnd-Lsd( zy)k^z*{a_w?K(VrX;U?{V*Ip^?$?d^rU}8H8C{%)K7rT*HTeA0oqyr+f0tblacbDL zjKE6U47zr9!80HgMgoXY%|?^M>h7)a4W^aX+Z;m3?ppMH+$t$z>+r6z=(u{2cnYvLtBDcX%}Tf|VQ2cz-_km9g93D=8j=PPWT#|1BOdZ~K!wT%_OT zA@KK4yI`qalb*2k46P+$S2olWGM)?|)63w^9h^-SpI&TMnyOe2OE|-Pw<|Pd`0Rbg zQBmA?I5kFea4C?BJ{4#I>+%wqZ8hwe4sf{-A4Vxmin^EX>em3LTMO>Z+pN+5s{uKY zSV87%L%Tle0%+UBRk5&wa+i~mvBS=H*gKXY4P4?4WQcz z`Z~=>1fp)^8!TrGo@sDu$xG~Reaw)a_ipyJKcnLEMx*?mt{edS{Gq03y?K(a$9bSn z>v^s|sOZkjxbwupzpB;W`L&53tE-}}yz!zrD}}|znq?<-?lJgh)ziE=a6sRv%kv6d zx=}-EN*D~ciT-#uqUZ&)pQXc58ffE)kFGsmQDqLZ7)h{~Gd3-uSi4i)TkmecD*g?X zrJ+wn$VK;OC|wx(#5$4ro)JNMFMmO@uhQsX_VeZ)3QJ?hAko1HqTQZ}HX`hXb+@Is zh4s6#BKid{*YVS!UstiL03^P(x%-+Gt4OLyfUGSHWiZ(=f_9M0I+I0yzq6i|i&1ZC zOql&TTaEZ~dT;r#7NUWyeJQJANMe5>adC=;L8D;NpmC!YR#-wpeKiyT_8o_IQnFaD z!Sf1L)B?2Zc3pN$5KQUcTKoP#WBQBBSk?XR>vX*{zR79mmo5>}kEA4x%9iu=;BDU^ zoySCuarOMtiFpQE*9WREtHRu8OYJ5!_We{#WAg@0XK~)++K_g>5$oqkFXGW;alxq+ ztbilIfM~2;@a?=7H9I3h8LR10+VU|DavADoVStvs9yF(NC$RHTvZh2@+;)XuuJ!7T zbQ;YIb*d1R<;ohq7j*`E6r>Fyi205!*f)}yiK#7*(&mW`i{FI^eRk2($q{dhDk6j~v3qegw)F)fzPkjyI6ybFc@ux)s> zgZp}8Tfp{jp@CO&DK7FJO50X?md({Vs1HfwntFRbr(3ps9<~u%T>h&u7K(JTH`8y< zzPm7bWEA}~aN-t@kM2SJqUtfo^iwLS6H3#g!PEoRY!;F}tBKQb`PTpf&Qy3>Hrc%A z;9y~xDoW|Jc9x%zc5Brd%y7+j5=c2o{MJly zBz)M}jfw^O>)^#pQVHtL6+LHLiCB9w!fLj2Md!%|*{YLo3Q`G*Xv5zZ6tIsd0;j<} z6++XrcA_=H@|`Rj2c|KsO)EytKd4HSSaX%j7Ws@|xpL6t`7btFm(x3U7*=65=X6wo zIFOk*vRmdo96LvP!Wv;PzmWN)#YU#J(BR)~=2?x|lt}cZWx@~Rz0nl$ui9wj%8z1+ zu9nlwtYzv++@YjoyFAgr@D?-pjh^(gR^1quD5e|v$o@L-z;%2>E50T|&qOYFe&$tv zE4!+$!d&fuF^iw(Q3>F2v*k%IO){&_WadvA!5;$1z%s$ZdCjrwDj@``J5a3*4CL3`10}8-QWQn@lnebBkcT>EV*Li z1pcZXJB)@fec8`mK0iio zrJjV7u5yHWJg({l_`6dLdwf_YqSTD6qFra6ZYYfEN&Wr_*E+lp@4-MeYRxp?7QnK# z+MI}u0yde6Q@Dl?U&3jtGoK0igb(A8h{^}~gNCrM9E%E=%$eN$`fK0-Q&CzAw};Q3 zkDod3&o?8^SBu*nJ0hbPDR%BGuhV@B%~7>15O#&pFem7Ytxh0jp%*pcocnE{AgHSo z8HVkjQyrDQWDgj`k#R}o_W_X_ahL~6$G7*jO5ZZ~1npDSJJ#b}nQo5HuVBt|TmwFk zmO+&Z^d7}*At(%ZZM@g-)pKLyf;mqT*%!X1T(Z;>E?l=_7Qez1PneIHw<<37h2S2i zU7)X>xEH04KBZL21X4g4(L$g{`9<&2mlR-0R3M_nqu4B5Kb%O(uhvg5;I?cs zN2wb&{RrL0F#b7NN9HEl$crq=BLNs6-n9Bmb#1D(2oe^&s9AQ{VKnn!$5qwDdx6jj zQdlL1HZ1zn#73E=7d}xiKS{K z_~UWtof1V7&piI3h)>_X?<&9<4;2X)vAmcTi|Mr`K_R~pBlV)!tg&ly7xh|)A=e!? z1p9GnB>cGx>nfN_xAgf*!U*5bq>~?D*Ox`kW^VOZWcRgpZ`E$Uy5DwTlKZ1@4x&qnD{Ktjc{(5 z$ym=eo0PUx$jH|}_#>yhNW-6BGZVa9CV75m4M zxl6e1KjVIxEt2!ChX6=yyXSuU^!uws9Wu+_>^fw*m;2?{~k)t6juU+M^ z1E05hM$ny~tssMnE^b%UyKPO!?<7LAo)6(Xvr{Ni0%)tUzKT4)U&hTXOBu6RCR61( z7(H@nOgX=An-;>(BCZCp>E$c2_eo8l#Yo9TdK8+6mGo7bmJAnl)`OT5_R77S{;3|B zS7dIO2>xBvFz$4#o-2RF+ai~8%PIpW{Qio~qY{`TA;f12(uJ_tUzSjeTP!3 z7@q}3^uSfUMx$hKZY!uV*OFmM?^+?86Jmv2ryRfZl4jUyGjDCToOH{cso#>Z{HfNZ zT_>~tW+MG2VVwg@GerY&ORpHsf33FEM0V`!M`jUstf0$nk2B&87@PL$^E#r*ug|T+ z88^gOroe#&F?BxCcL6yO{IQC?x6_BIzt~+N?D!xHpYpG!uD?AY!Y=T`!q;t@9?uXb z`;tB#K}Xn&x9?4@Gi^J!^MfZ|Mf5nYgrQxH+;x>BK3+Z-=%3J_k`Z|102%0)$&ei88b8ey~wUj=vW5vWP;;w0ngDNL?b1kd-H2-*Ozo2oWf ztz91Qv0I2J;?PTwA_0ClSGkEVOOH0tS`JE{e$-cokAA$}F2@zHw4^axR?`u^Ey|!D zBnq4GNL-v2V5vA8x-TzpzzG0%cXAoEr@>}-N=sS5ot%%7fEuIk!{^fb)4}zR?pDwN zCZs>v*T&EBc2nswqbPF7ouHye6^Bwt0)63rS>x^(7tqC`FVX*4eFS8rq7FeHK6r1W_-5ay?BpXidZvCp zIr{(W%jd~&=o@J3edJ+Qb3nzY$-zL>f-_%TZzea)d(WS~l68R%!^*h+;>nZweLws6 zKmX>pRVLv0^5ZA+?s$~1UcE|t0ez{tE^rb((CW(uKJ;cw*Qw=VtOh3OajM}_2AB4mFOU6eS(u=ow< z&2GtYjw{jwIbMmhU9OY*zAM&sSlEA(YAWz{NKI5@lh(q?;m25j2NYw0QLqvELagKl zIGNQVLqf@Ii46NVBRCnyh|Hj-6&`BNSl^p8mXIY)z=uX@dpN+|eRWd01F_iPZ3XiJ zRcNb?t(LTR-td&rsl!`Y<`eKE0>WFPpYYKX?z9w~O%7Jd#gIoUm=hhe=%WoKes9{b zVGqrIj>=rbXPqb9bn!xgL{RXxRle?^N%2SeA+-X#5RpwHEjnPAA)Ma-8UVgt*Xw#+ zuj}=lFAk!d2Q-%;i|iM452ji(+k_{P=dkg_5y4}j_j#hUwo?ZFSwJO>>}iaOQHo~~6?OtjOn z>f6f5lC)B3lA~v^3D<*9en-yiEoyUxk9$X}M+GZ^qduNEB;J|+>*RK6KMhV!k<1fm zezp?zyhmQ&1vxNV%45>IcE2VZa-p^QUXx@Xk(~mq&2>h)zg_vCh+q3eM*(jdyaWdU zj#qVo^sHGUx{{X!Jc!Af&n1*5?p2vmJ!g2L$#Oc6%yQRI6cK(+^ZzjPTNkvIKp%wr zPZeo$YRPDSNratgHBl0w0yU>`F(gN1>Dr`C;ty>?w|Hd@8t7}GU{lb6^+B|B#+*jG z4{Oye5!JLZCm7@gYWc~ zWMEKwP$}ghp801ya>O%&y3CG+L5bJU&ph8XaPPcgBtO9iQhjKU7h>ehIoP?0U?rH& zXhh?UN(FrPTR5*N`mVjWusgSQa=^h8fv7-e$(TsjIEDYSg$r;_1>94gpFR&EJI!&C z&YW--2kc{MH_v;OHS}&d+kO-yJUq0wWkRcOMK7JVly1@Dg?g!s)`iC+)N37+MVD zEA*Qz_)Oj)85&CUnNT2n%rjp1YsblrA`motA{wRy&+ z_sn;7NBU~Wwe!*F+_U58033zW47+wF9~52TICJ^PJ;Z@2E4e_no@8r-10IQ!w?o)9Lj6?J1zTd)VH` znQ?m)ymPe9XBBb)O5#n<)SG6YiTfu8Le;ozY-6eBVlfRJwg+?fH-7u}xx79FrWq%N zE2S|@42)iUoMwXCdbmEv7QaB4*Tn)2i8Bm|3IF-zs*c5r8ljmBi9^@020lkm}dZ6 z_C{(f(;7M4mKXW!@BeVty{CTWi*1qpLh9|2yw=E(wsFcL+6dGgln@f1-+c2d`v;a5 zg4-YZX!zh1sNU=TfB(}z1^?FbhxhNvk3RcM{{HK)gm=ydOGRI`^{=!%0(awV?Al*} zDV(yC@0MK6U$a@NYb*QhKnodWy_^nNFW7ye($`D%-NKSOgrL!)NwIEZUT{TUO(s6t zOue=5qC*;r+CxBN#8}q?LiI+-zXiB1i2#uXmJ9;O6!ey9~gTaDQe+I@`JGnSw)7^g)fcV5@H z0RaI`Nau;A9;!Z;&aLsUXr1%ls2g)Kw`=swt`{r25rJZyyUUAK$_{lcDpCL5_dG^J zqCZh~vL<9hVBcysJYiUpYk`Nd&6FQ$HV|;b<0;q}#|Nd392_w9F-MPUaJBTY%UFyd zZGlHDlpA#fSe|+9oFNE8rd_y~gw9EM@fLkiX3WFIgL@*qPf0_-N`AzY%dmG-mPvtQ zjz03d+Crp(3HS`$J#alUyNrNs>%1O}khrs&ySR-Ly4EUyPm`&nifza2gU^R>h>S@( zlxDLO;7p8`&LK56Gv#FZaquV0PwGJFJQX^#U;wX0l?C*b~2KfVo?yMonR_oa5$_t~heiO2q(j26Kp#)KVS=kLk|*z5k~ z$q-L;5FFN}-snI5mu#xuq z=~uzTPMHr`p1HcBQ3knn*1kjBq!~S*G%FZ^+LMRB%S%alZNMY^L1AlE3%D?pQp`fb@QO zn%+ay8NnMGWZXH49lD7eqLxY%>NYq!9jLeRzxPVVV~fwR5baf4&6@Otm`{oc_7BQ}x?TV{!gLoE%A zv)$$y$fL$X$my1280j9Vac(-fV%P1^&i6abjx(@jmGWOJU7i%?BzMz7#|JMTLvT%M z(Fw6tl!t=A*>J^=o}PJ6&3rTQxChhk$zcY6_aKt*E+3WlHU7Mn_oqMG{IjQP-cvR2 zRbywMIag%r>OEMD-Aj>;QT%LJso^mMHFu@Pxo`@84a{!PTT0__j)fIdG{y^pO>9S; z3OpVUCl24pt?)UQ6I--9&E+3~FNfsq@m79ePvz%tpUU^|KRE@1AJ3h^`}Y^exAMDp zFXumO2EqV+0Gcp4#Us!7SV>&7019?o&_r1KjLHFNc)5| zfWU@LY#L}CNA3{Kf!_hW8TA0?ZIPxURBHUM;3;Qh$wh8vvB)h{$-J*=k3cBQz_Uht zL5p9d0%_fM#omd~hGuPi1l9GXE8q1#^_1|yvF0%j-a!=B(vRMmMvKno z5roYfN_-u+Vxh&Emqy9=HYgCPMF-whxu$9c(`xiL7b}Y7!aG%|0IB%gVV{TYnO7iD zI_f;_38luy2JPw3D?Pa+4K1kH*65|u2S*z#is0iovLpic>4DJVBTYSA_)R(8;n^w( zT=l>{N{;gPxE;%FZKOHxaj3zfRq95#sR}RwP#^TM$Z2)__+A1dK>2 z0TxQ*Ayqyh+Kh~Op2c*&)ST>EIyNd~@-5fwo3;L;ncS6PH7W49hQ_WlYm-WbPxNwA zfi;PlFg?t$38jeDb5NtPoOFowNhus1QCJ(F1u<9nP?mqnDhpkYbU93NHUUqkGkOC! zQ4};<`JN_3g)m2KDo<(yfES48r(`-j=BR=Vw^bo ztGh!&3kNKZ?i3m2jF58br&CRrz~NSUIs@K_f|&2ZIpmpJqz@y6fHn>XcUkPtV(hMr zP6Vt$>*(7iqxy0O-Fn82hIBP7%h$NdKt>ehCZg=d=KsODtr5_>~D8*kgP~Rbl z9W=!F6ugRn>M_pBvte_w*B-dskPHcT{L;x;nc$&fpAQoH&cc0QBa>Ia2F7pTy2_>ept0vm=in@sP)i z6IlECyL+Jba0=?)Kk>%=9QWrcxqIUV=$^Z*_j>j-clZ80-`-4|?z?*5+`gNMSn-6d7k10JVskb!}+?Jx^v1uok{GxSbU|V z!`C3uUUuIBya#JjM|y){gD9nl73skbg%Hj6zIyjUzIy*sK04v`hYvnE1%e;TC-*** zA3ge9e*WgEJU@DRX{O_vb~Qb&!i$3a2l+R37Ad~w@JlGk1T z2<=d#u~W(!pF0VoI;7bbq_B^-a{-SC>AuO_O*V8%k1nGR?HE_yg%17b6oA!1I!p?G zX(#8q7si?t49g=(AUE!mZfZPqvB;y7oc{M8e=4tzNBO(w&vK{eA$Q+Le?;qLJj$_+ zbslIn3LiX{6=CMTckkZI%U5ruZSEFr!$0uxS3mfnJUrp)7tfv*ZD)U-j(`5e_vgL+ z{ND;jSkXeH@g>iVjPSkMSw%JJc#sMXOqoTh?YqMc<#hxwa#PU zC)LDpdmi@O`}I4X4;@v9}=U0er=TBY}mOfh1G z*RiC%*C^m)fh8WNu9Zbba{LL|Dyfr%o@h69=1?-pEQ4x7v^9(k*@Wg|Jfq11@F%v& ztx4ne=-C{<_n(I`h)*N~fYS!izWYDt#AfB6A(`~7F@-be3GhlwACQV76?6Xfe)(uu zb7Gf=V-M`pan8wjZe1Y)>AD@2}&;H5YS@FtVvQ@E$NBALv9CF+l}I9(U=EK zmfK3tG7Kt&`%&@+d`S7=RHf;Glz%7-@Hm${eO?2=*Xw#+uj_TazSG4)(KLYCgh}MC zpzivN2O_S6Kf7b%9FFz6otrMURy?@?kk=n^N?~t+1IGeTCM45~n zs$FbJ{bFP%Ui$8JRr=F*Xph=fCn-BdknqV0%=!{7f z418NB5sa1oiH>7OVQ6YTnQ`f*uSt>0e9k7z6|7k}p~S=*?K4A_tm7S)YZ9{5y2_}DPW1NkN#aaM4;3_)%w8R5-eI`v z{8nif_}TOV4&{!%o$-Ydg9jV|+VM1#zo$1fQJ>DXE%A<2V%dPOEQV9rq?{loo=R8P zp4wW9Je&!}wpiOWylvqWsTezq-P8P=aNALX_S7$;g2ZQ{3_07NK43PJny@8_Fb%i5p^Hv zOyQJ`_z!7pp;>SSZ|xTGXL%0mD0tR0OZR=J4^ChA5a%fxI$;H_na(?tPF^}W$Jr*EJ*i==$IBsHH3=gZwky<+yAs?zFX7n-LDR zxl@Al%>LSe#*}>*^nUK{Ve^#Od%*XB-g5^t0)#s_BhrVT{_Mf-+tZ)dr=a9^vT0|k z=G)te>myQ3OX*nbRxJHA2}Aa+Q~ogG3}m5&UaD=e8)O{)290MReWTs{Q3&aNvA`gA z_hz=g(sO;jC4vA0+TDVucX&R&c{IyB+ukPq>b;R|v+e^dd={~41@T@V-^+h{{k8n! z?KAoG-Xr7(>7{#}N(sQ0iAv8g@#5k7a()f;d8W z4{G(rWzf?VEaHpjGeXqG?&rzNR`br>ag364tSOy^Vaf!y!XPL_dT^%X-|sp7_VnSe zPW<`h!$)3fRNs@nvBTUQ+1hx4KPB<1ZJa9oTXqM|io`p86Sm&0r98ZM@E7 zIGTi7EhJ}gMn%D>MVtNJvwin3*PLznz1l4&^6&oaU(9!2ynS2E%^l*7*Ds$umS=C? z$nRdf3|f_pw)58uSrv5WE@;D^|DVhnvX@3hw-Mu3AFtB}pH-?bw>1~pjn zsl(EEBMlg`ZHmQIThUWU#{@4QV&T-reV?`{!34N~Lm^pbJ#HlE5j-EtXC%}3ZWJs` z-m%1YvKH~0UEmY9>$Y61DG3JIMF*rVma-ve+$(*;?a+KZe$Vo;lNLcwq>T>aAZ6U* z*beWz)zLBr(Tew{@Yp;P7ks^!*zJEATETwXq*B3SVc>3u9+UNX+$_JzWWb~wRFboP z^uwY~=vyiNt6;sQEs@4h&<oEAsn3;lGvckfS(&HG&AxMkfno`pPcrxK2x@v$)7 zJg}|nT%34aq3_ure0eN!*{;5KAF`$n7NNxt(4axrWYDPd8UVgt*Xw#+uj}=lE*^B& zKrO!C_1>l5>nE-n1YcjY;li zOXm*y2_raX<9Jn<6_nHl8PB}ixMrR(7R#Lkk|1c3foZdLuB#XY63_Tp5>G`NH_}$z zRymQo=&0u;jrWas0q?K%$Qf+gDg%AKmXnb*VzUtnw#R)oY}aPd{c}BlaxpR5df7Rd zkI8n$_%JbD0ha{2Qe}mVjdFCb^DyU5vgie1OXWe0Pex2!kO=997x}0DA@P_8`$Qoqlkj zMXKZ&RDFl=Am2nG7QtTxB@rM^-4cI>R)E9LmbKU+;DOA2XQ!tv9GU7cs!8_Q9Vs&f znuK!;XI#-Pzh?JnoO^5)1m|E697DeH{}AT@hy0TQQ1zX;*j)?S?eCfJ3wi#MCyF0wz>8&qHigV3!#{+@@F)motvD4-Dcr2Y9|6zQ@eK=wF ztAhD{j`RU3uFZNXWs_xxMu-FHRmjwyLixeCH-o$T;kq+bv-$3$J@_jdkru;bug zfBM->J^i1aelyP^2F%$C+87ns8#F$j@eq%p7k>?uM4#mO)=&ckiqpTwoM6bn$#m~M7P13#Aa7MqmE$wkyFDVZ+K!k<@_48#;8^&vC&Mu3r(#wrz1M#*a2FAN1`CIPSu&ln&qnB@jl=N&Q&|F zRqFy>n%RFwc0we}*Fr+CUQ6ueQ@0D)hHMDOr6YHHPa8OP5<5H_^{2++qL+B4oI{;c zJLP^Ly=leAlw6TrR!r$eq2xn})#lmOL?Jq@FDv2MpNZ z9`u7vn_2V9x5o1CytB3O-)ks+;YZh0s&FZ`@$sK!#<~vUxo^#rq+~`&zQbMtv-11o z`bwGGe;%$Wps&~Ux?b1odi^0+8=UAKuJzfa`)7mP9qoLmO)hiE0nN`Y!GBjv?aMIxb)5I8vI7wV+kEFOxMr{V44Y@1*Fk zi`H|hm?r=QzvW~f<#~a8PWlx6=s_-_$t+L$s=W?}^{II?z8OC#Rz`Ep_i&9f`39ic z;Xk_w8ncEYYFcPI;+v{;ku?=b#{oAlILFiEe46QHG#7squFBs9v!&B(}Qs49}OYa(K3pqdjLFi|T?OY0d*ic+#kGVFU)*5gydXm~~7umyX<`|eP2U3n=yxK$W?PkzW zW4Gz%f&D$Wx$gqT*|8g#+I$!6zB6`*aP9yfBX>VLz78=qBBd?*Q~^05J@1bDO)5y^ zcs+*W5sMT|Xc0~B`i}F2r53Zyg$sLa+kPJJm^+ns-nn-QYVU;(akiVr;kgsh(DJHzl!0tPHKkKVq(kkhY-s{>^KJ)Guq48XV0+N=ya#OC2${Ftpve3&&SM9Xb z-3fXmUfwsu93X3!^h{<|cUZIPJ?8F`t}CDswzMbx?lEN0c}m-&Jn$kMn;(ydv&|Q$ zfGq3ONkd8n&b)~-Q+Lj$!@;h#*kaXIzj^z727@1*0`-6T;8Xeh-beB;AAetdynQCm zZr{q!-u(U)g!UabyW?0k3Rncpsk_00$&2O4?!lyhH0V;}inJZ{Lgl@^7}-Ycq|9@j zX-q*G%QO56g=afBRdP`PY>KrE^I(p5g87hNd-~=3hdpqAEDSyxQEtjA&e%D z_Va(;Hq%u>=QCpxs<1r;Sm!Xh@!}lT#bk#BT8-ZG274fs zyX=cCVoVe1IEq5u<|w3@@pst24g@l1q=d2^Wkz;Xz@B!KrpZ_4P2fTX14#Bh!9%ji z>L`~Oh7Zv%1TXud!NO?iXvi+v19ccI@Hl?EBn z+1&kZmKkLnkFa3^|EML$jR@Ywvz-pdZPEWAlqjXv1us@V#74=^vI9Exo!|(O(XzwM z-UZAWG@Gc^u6LZoHJ`#FqXumLoDB%lg->*CCQZP{h?QtL2~i<_6%I(p`irk+P}Ob-@h4 zLLLPCAPHjw*RTjSg0fOaNwFS*+{|Ms_QkGK9-LO-yP*1{Q)VAZ`LBSy2%k?JfQ0Pj z`QX8X2x?pO6N_fc0I{~481v@>J@|UA8pJ|4EO3L2ZIm78ngaTIU9anPy{^|EcwGvZ z-W81H``^l67vq#4D06Zitot1tY1wcGTcY z4!o(st4^E7huYylzkn0xIa&CHcp?DGpSsYR;7?rFR7WtO5`dQSBYpC+SxtOE-YtQZ z3K~_AxdN4h7$rW+J{wJ33%7GZ)pid89wk2Lj0l$HHq{n7Rx8o&0^5F#h2On%ZGy+R zJd+PRwbCVM>nsQ?RsUK>0!FlRz9?srhg9JzazWPcmYylDnlvZBKu&}L=jTvYze7%q z4?piRl)=0%cw0E4P8LCGae)qB%Ul_xY2UFy3=h- zMy#~GNXyLljo@eCy3T8dqq+wo&m7+B4z9gr1TZ{Zb2u?b4h{92__@2*y9*E1VbAZ2 zfJ>x+c3H>HRg3(;p@&9|uOR7x9E8UR&Vrv*C=e7Y{2lH}KgoImoF%jy)}NLB^PR1Z zw+txne>UuHjW&|*B6Ys85${Ry7j)0=Kt5=)MCx3v-GWNAnf*W14qya8wiAellXLav z^ymF{n?ax5COaI*?Du~5FZlcrDF-Kys8Dc|cq$y6lcuyo+jnh@rk`CEZNUBP{k!@5^M?=R%_+DEo>Cga{B;$aF<#<`K<&u)fR7lY z&{B@!_iqmJfB5|S^8O@;|MBV9Ql_}2%z!Rf1PlCPjKy%DV?BM(6!%jWc=14)K6^XQ zp1qd0Z)2A_Up{&reQ)>pi7A-~b8!c*sC7$8_cE%baMila{sN)kT79Jag9(Gz zhOV|**(`00489FQmp)YTX`lk3xeXA* z4>n6b5-aQ+e{Rwiol5av&GjAs4e*A0EF^NgZj@#haADVL%@YcLxNsyb%D`TPE*jG9 z)!ElW=;{qG2j^(7oAEoxXu&ZKB@}wHIXL(W{)8MHPlAoiHD;N%A?GzC&z3#uA242f_71C2m*JAq-;j8yMx{GrSF&oR zelPfC%AoJAwti$87-U)SRQf{w6ot_-_ZSO34Q?=S)uvs!qXx3Ut6*#2&eQxdjf&;(E!i=ZcE}@9-mE5rtQM1F!LM75B zD$>Nc$v@TGbc_@WbS|nAtUojhXw5ftX;+pT3?CrL`B%Zm4hp5+-X_wVQA%`iRZ^3h za$IoA!Eq-4U19l0o+*k>rVJ~SC2t$+u9SnGcKVY1FRC-tgh|`>B~)hpt>qx9K%Nq7 z;2FLzIzrJ&I7f(1F@Y?-UK7ct57|MqEkV%PM(Ey4(jN?$0o2CBg|D-|Hx6Cz+tLOh zHz)1AXa=o$^jNB5SzpI=f6lU`DM#RE%StcxW4#4Fmei~JyZcVZn`%L@5UK`<6h^@;Se-0=jlOf2id;EU^~W+&%n(V=N`jhH&iZRLEcC%}z=VQ~E z5_u1dgno zr!$T7(3HhY5gFJ`enl$42$;zjxr2sPodpYkudy4P&vM;=Zz4_JP(kVhj9nZ&L*OfQ zcJz0%OgGJoW^A)Qx&|LG)RT^fk>?4sorupz7H!tMZr=ag=_db$8dhoIQ;GzH9pZ)Xer!ydov%!&C+!uQs z66X_Iikg8|gU0`~GYN(*<`hDB@p@bVsA#wS60eqHaE`?y)mGHCEw(Z;7~s{?#ZiaJ zvTH|Mp8(??0N%?zIsgYD#j32H(lHO-g!Oo<7d$Nk0i`){73r#T*{{iK=;gZ|yW`0*+D`%ZrT z^w|ssKY#l^`vlzn=<`qI`I~q0n^ORo^>@i>@5AK57~50+kp>=eNee31b7Daw)4EsU zuh|DI^hh}PJDP}ogO8YhowhY*czs)MGhYmTzBpG@VFjbKv$^^s!geU3(4QLFaj96W zwXuaj@Gfadlmt(NF0H^@=p!mq>BTD}L!H$f3uLxRNvu+Sfy{0sk~>L}LOsi5pV>~- zu7iWd*pa`^yL4Qb|HqY?cq8~+g`hB{+6{%k{u$@3IO4`AD3pOklG8|s%qf)7M3^+$ z2iQQ${0JT=e%>O@FXS_cm^#+Veu{w#G}?|^+J>UAYl3EmF+IjT(bS!OKcGQC&Wdd} zf(Ckd+d6J@B(s{6c0bL?;x;@W%mGM?GA^GMFu{+}b$t4?0zE?x0)r6q!~^ec-R}Ue z#9NeWWfLi~Q#;_&_I< zO}ieI88&g`d!A7T_8As@Ww00Xnb@i7c(kNv21o_FbTtLff*+InG5+Ww`Am2MPADmERaLnw;Q688=v@Kawf^<{TJQSY+9c&N z%pbacss2mw-v#&D{)g&3e+Hvv-lgX}(SlKdc053p!5kG?(>2$3y$b?4oAxN#_|hi| z?KN19Qj>0@i8l8dfdw~mcDtv}-_!7LARvL-yjiQ}P%rA?2|!xVnrWs8P=Se@4skq% zAuoaw0)x%#*~oy5`vRWmcq(gB&L)M0ORg%X6H@dq*%F%Ae&}*p!i1+kgV_fRD1Ek~ ziivK#6S(j2R(qAIPMf2<&R7*GCjt;&e3W$%P8yqwG-r#@tO+urJc*{>D78^QOTwFd zBGf0IwQ$wy4CG=$&ta}slo@rATUD9>T$D$X&YaQ&sTMLwdr-yLN!{PqrJhDhtw6AL zb(9mA&VwD-8VK|{N>(tLG2qWguBcrj#{!9bLo2ffQk7=P(gl6qFVa6ui-5uCR$GJv zFyqD4N$ky%;;s2%9aiA2DL|Cb{$2tMy{Y8Dh0aZaC^#B3_Q zGs{zH%P42Qrek@V7^$?48csb+{!pWH7Z+L0ow6HN?vK<{`{%|E7oqVZ>yNLb%XrZZ zbOGQSaPUs&mgL5mJ;3`wPodUr-wAwZ`uui4p0`}=l8a7MNDoW#ql`@1?67#2j|X~x zru*CPKa_iOhw&g@^Qy-T{=T={xwH56DY&}_uyGi&we-r0Hr-g@vtWUv=f^kl^yO=L`1+pw_|a$b>Ai>Y7axBiKRJEhVf&|- zPv!OTeWsS5{CGGl1cKfi1z*q*dUfvn3Ox#ik@BCmY{{c7+S^13eobsxwr4q3)EHFt z=V)Lw_9aG3FR&iWF*oYkQ$X+6=MNr;ym(H*eT-F-J9CxBIsBFs_bMX-y{xI$_Ikg! zr+)tUQ~B!c8~KNqFCZrQ+||{205LD(DMh@4>;g$1Fd8o{)nR^~{(tuLRXF-3=K>}j zPk;4CKa`IjK9v94-~IFy{QXkiop3dG04G&d9^5;~mrtI^fBWid!oNyi98vQ-5i-wG zmjdS_I9nS%v+L3Sqzltq;jTwLMF)%xH9TmkXOwe9h_=OgT?f?yH@zsnJpSR45&R9m zM0^Asm3b+QaOgU=_fRo#l;gj~7<<94(pcn!J6n`To3-6qm8icAd2MaSNJl6cDYh zL?ULS@KAoP`9JtDGmn_H?qyItcm`))rya6w#A8acbI z>RmIHwH|E{#H}>a@SERR{Yha$ zzA7i#&z0w^Y_{2)GIfs~hQ9DYn$t%_NVbb6p0TWt)#!+lOeG8)AYxrh;Ffb|)i-)! zP?UtVD(>%0$3mcvd2R0GoaX}{(m635SN>RNi?GZyUPZFp^!;Qoc%<_H6MhXnC1k72 z-K|DDe)lqwew2AT&!3F$x_*{ikuS`1COI|(=d*72jF;++-Fco8&7vQgfP2pny={bJDg1Z}NY||gJ7iD@0bDG4xY-W#oLq^WVcw}=CoQ_DdAjDk z&V5(P-sX)RW|4v2-$Qd@!ZFTkJMQ0xr(WFqe;eruD;;-b{Q#|i;~69mN2IfE*EZO_ z2FGFUJPE$q1A+)Vz&5PZn$BZYTLL{heR4BEkaa`SLj^u}&OE?k~A z>;|WCnHQ&U+F0N-nOlT(zU$-=3&CPjmiL`L8d(n!kVW;A8p8N1w_M?mv+) z?>&)kZePo9-oBKt-@TST?rM$$rHM!VR>`q`lo*n)d0$_Se%d_LlARjV-g z<=#oB{oC(-|J2?l|MB-e`=@^*&)>Wa`NBA4@~5ADHt+rPcVAPs220r6_)i$jAhCAS zBRgkZCgu=kacn{`0pO3Y#e6qIzx8^@sdAl*J%RJ5NiLhFVH=qiE~Sm8#QW`A^e`2O z2+uuuP6hpiaXp_$e>*_hOK(0h{Gioy~R7BIF#uc4=|+6@j{BXy+~{{5a<(Hz@#)D5-t(sC596sqRWX%*a)om zEPWc1$Dh#nubK-t%#snqbalKPk6Z8ddj0 z3*+IFGVybmi*`xlX1`dZpx;Cm-N3eql3n3E!aIU%k&^3*Xmg7M)dubmvY$0^4PIBN zg-;>{V_`bU9Y;7B;YqTunZ`V9K`d4k@DSH(wHUL;w^)QB82d-j2Rq)={)oVLlV@pi z4x2zoRxIG3cBMKTo@oiYd&}RdP0rZn6ye>)Dm-?$EvJF!xq#KA0?&oXc_oia>CRkW zLGf;M1M@gk!SF%HCss*kT?4?^>v~vg^Uplc0;-W5PygS+1)Sd9CZ%CGNSYHtn1 zUi!W|$G^+Puw3fbrF(eq+v;2Ir$IX>QJ5H64ED2y_#}h6Y7jnmCntq$ptj$bU|1`I zHrIFf-8Qv^K~CVn_@iob8h~JJR?6_x`(?v$08C+*)ud~$o9aS4B5YdmlYpJ)tntMS zi7OIBM?ny6{NRCdfRk09PiUWERJ5~Ka~sVe~I*D!o@7v0oMH8^^@qL)YflkfRtsXFty%?I|RDnkYO%8MQx%jv4wXv+u-*Xutf-yNp0GN zf+kj6kbj`V6GFu9)@p^fTV$oe!5PR}U$}vOQjHCN#V;Gd*@Li)o-wfFs>h}MPCYIN zY%M&YTz_`IKBdN~g8k(9KZVuq>y6~@5s?V9k@J^uf!&Tsed~^qk&7X+9UF-@b~w(y z43;Z%C(7v$9A+Z5xS|Bbai4sb>B*vxv);mQI`z?89d!<(xvoR7W=jV}1r3pkK2tgi zIke*Y-U4(iXmQLH`I;gz0|7K1v|YUWuG7Py#UI{PFGKL847h_i1CX1sngxcFW|^XR z?lN-6{uU0W{S3b&(oqMT&~dp#cB-{K)$uhSz_c%OdWvzxj5b}kl}skjd_9pPbr zc*Oaa6qqm}n@8l`i4(EZ?Wi6oH?~1Ywp`tN|8P$0&O1oWoMT!5cc4t219zQmw02{& zv6DuP%^jz)(bzk-ZMI1oqp@wo)LlBb6&G_6_d5 znu}xZ)j@m5qM#?*pmE;nI|J@GkVHACRFSvOUXPrEi!-cQ2kU%$D_Y%1xOYU@1u z7~kw_a@&*wxuZ&Z)T$JKwnpK4@)Y!CPH_~ENV@NibVZivULJ|re^@0x=}@_P-1u{r zbTbK97|KO$>`y7MEY;O3c+GjVeEZP?Ii)pP^EiO6^)Pd}*_8nL_}E`Ze(U4sxC^4b zd4DAtSv&vnd3RF6*Wp8F7u5t2)b{sN3q@%eS9^9c#15z}Yq@OTqZ_quzxnQO|nP}BdhG4S-b&FyACPeT4t2}m4>Ssg&pru{Cgf19yg z9k^&;`Z++IHM*PTb<@T7eh_>}4)gmc2rehewQY%e_5hDIgv$vJEV`il;5F41;^gz4 zi%Eo-P@jLGcJ7+V?`nVj{Z;Ve+%MzO=lL4=yfSA7(T2b8d$&?lmznkcp?M!NsgJd2 zB1{1yDqV3n!MhfAfqg;Z<#kILd<;tBhxO31GV!3n_`NrpJ~xYENKNsGLpJULD z`jZ_p7)Xh{T+7CSgv)RQ-$owIsVF|Q@`%ko8D>)QRaawN?z&K8<1ik(Xr>5Jh0kdvrq=bqX5E&= z5zq8|j}Gx4u>XfCf5%EX_puV zY>S0hNN*&Lksm#~dK^5O5%<4<))np0@|V3zy&Gd+Db&wx=rwFj>-0&HAUUuBN!!iQ zEzkUXuHaO(S#$gPa+Zp}_W+V!U-(Mo*aMHs*8Dd;Rrx%l5kK1*cLRGDqI+ZzfW0T! z<ZOdVky!DG8aQc~1Cv(hQg{O&jt0=u@^I>xIkK*7X9KT>I8(#U2W8opQs;y{ z>cKsc_{G4dwE6}H5Ean~J<6l~IP%NsWrGItqdl^%p)DyM$wDO!>rb(q+M)%9yDhnj zDa5yY;y9TrwKbpG#p`LRp>0L!`Ur!Q;HJFJP4Uzxn_TjhMtIO--A5&cJIV_!x&q5> z1W49ug0y((HJp344F%(_pRRPJtSApul_)Vodce!=q-|Jjpmw*7LSP>|i!>Awkx@}t(&)SWAk8>GU^3Bee z@fCbQqf%T$;I7s|jNHkt7$g4aapv8c?zm!Z*daWo2OfSkkibI7P(2pVxor$Q6W|-; z?BR%LoOktFjYp>$l5D_a49DO32-s>hu;P}wscj^F=2Baz2T~kuxcrkJosAT3SJUQq zce?U<#Af&>&sU;L0f!WuaD|_-TkI(NRGj8#b0w0KDq8lKG^h0on2md){ zxDaA^HMkad!rwa8cM11(&hlB_o?>rvg-4Uy5;q8 z=Kb}yqe`z``jsd^KK-*TnIRKvB;$ncJb=p?sagAg11}+ucP=y`*Kh<#KORTS9!W(Y z?}eS^tw@5f5$4*eCl0Du&`sg%c1jT@qvgc!dm=QrlYoa?++KjUa#UvCZtCJ&EAp~% zgB83&2RE5Yy;2e}!7y*scSn95P-cLB3+c;*rcz2pgsM@h8xh$eTp2a>)Q%W(&pceCrG47Kd98;C@$|T{8%Ofr#~{ysC$O zH}_ybGjm|NBM28SnVG zyRJ4;LX+Gp?`m}U?Z63O82i#gflUzPv=8QyRC zR}U#?^%QJY+o%q0*P>quAE@na1aecCd1K*0*M4)Ms3G&d_0M=jE{3(kXKP6LwKt#*V{aeapj^~emtCsTOM?|$x z$QYD~>4d-H1tKPXMRk)?Iec#biUDgC_-`hyXNv4cBXmThSKF{%Fl{)@O>1McJ=G^6 znDtNe;9r7d6Hlq5A5TneM^VLgE;g>@U}G3^7063z-n><2I|Qs#nA3)yp0Ni^gg& zF;Ke~tSmrF26m`Lh&14zO!pxPbGVL^k7{xS-w$7Ggq4Bk-mwn!IE;%Xvo9eZRrN!` zwa3j4lVQ^p$p&|iu}1Haap-7Wd{oZQ@#)Ns+QB_>>yxIr1^U}t3lMy3yj!v-+Bfnj!0yWu~fTiM+d=zldmr7EJ7q&yRR*|2f3Rp};8d5GY7(vY4LfJ2n;5 zqtKFlKz|m~b9d<0B%97*3)vZFS)4@tvh7 zJ4H_Sljk#}U$-xnt8Cs?0I8!))0w&d^2dojY($%8vRy+kGz^nKYr z->B7q!DB@Rk(v}W)hPwvNEtaj&&B*Q; z*wf#NP=Kk=b0o5N>FS`vHKCTfobIMY*Sd^fTBYh$c?PX}IN(`3ZVM)6Dn-_!QXdXK z14|<}%TjU1ZA18sEe)jb>KaRlcDuF*`jMSmHI6d+Bb(CRw*r2xD`cmzh(ZM_-6kin zlZd7gUy+*8+U!_FOyW(f8LEitW1^~-S|um?Z@hRNAsU>&=erG61<4Uq2|?p z%Mu-l>p;;(ekKwDycM|jLhhnRPCm#x`qclCM=iIgbC3zm--a_2qW-XtL>R<3;;ZJ> z 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�mH9P!QP)f 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�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

    )RDt(CkMhTt{hae9 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:?l==5p=cC|+mCOugrHK9 zz|{%j-mW&BvbZ|z!BXVHlYk9$dsoOod)2*@88nu>blBx}@!{K!dOPEgCEWPJ=8g$} zbA#}|apF!`5Lim0r|Kfl(s2cTrdO0w@22OdwuLq>w94-hMsF z`vHz)$80CMjARh=A|)-Vzs-$+mLFY8l z39ns6kj4$lOL=?Db25Uz&#T{3=^_$YtyleheY&DqZbwBWt=gvHE-`?eTpT?k^mjd>51AU;li^}sO zVz1sN`sqiWWA;#rPfh5;+|dTc{ga}a_LH*NF8Q0DAtcrgp7xYVdO?@jj#7e4zYL#s z7RE0xDxq@gO|6aW&alW`rV@SoQ?;<<(d9-MH*X(hX@mKrCrw8`Pf`3PZw8yDB=WP< z&_9(|l_BzYGdYp?_a4a<7^J0slQ=_qdI=6$LlE%WO5jb)4o=yg_TG?V=606Lp2SbE zdF zN*F1C#!8)S+xr;s49qmL%i+sXg#|G})3$nIRkBVfW9H*{!@}#i0&<=|N0{Hy=*_Tq zqos#{Gby=j&B!-;DRg&Q3b$1m-cL5Sdh&UT6D~sPc(aCm^#1$+!22RO#NGq#TP|z6>$HxMRP7ntuDkvL$;kA$#c{h0J;38{FvpaxR<7GLj&i7cj z1yu8>Y@zKVe>ic+vz<9)6l6(4j#n7}dBytJ-RiL4hUA+wJTNuEZ@5YP&@U%L#aAp+D<$%-Rc+!j5sivN zQ3`-`|1;bI5OrEo6n_x9YEIDsdk%}ELwT(L=>IZVK%V-2ZJs-x=USsRv9N$lF4__o z8Zoae#r)grF;}F$^AhOw=j0-Uvt6{Mv*`^mbT>;A5pvG*mt8OnRMH(cHEU5I1GQ>I z!(Aj|O6_`I$E8d~y@Ax!StY<-&awcxkmpvlqFf=u?f-y_VuD>QF)h4yt_jOUIMOz8PA)jz!K^1&(2Nj&Cj_D>z4y;Z%2;K3Deq_-)C}7M&7jSP;d34 zbc&AYClnFx<|8`VFQUj4iWgfsTzDYe38fLolr&hX7uC>IDA`>jKs>ava?$l~>G@pO zkH2kWv9uROVR1{Fe_ZLFHio3hSS?xq#5-EMOqnNSQxoikLuK_JuYX!hrW|J?g)Z=& zKmPG^8p6=p3Q^x1-|C5%css;w;tK{Ie6t%}uOuyo(G#IF>ygpy(U`N{k-;$J(%%zl zT=imHb4s0AxejWeHaQ+7VPT4$St9_3#g_ZMunoUU_;y1ubMyzdKp zscVlGJopL8iB+}aGD&)q2p8tsVm@DJh^P#d?zhyWI85QkhVrkJstvj1b^0TtECAMr zyUgdRKu{q-*TK){5N>1uavS?(g}MIrf9Bx8&y17=0c~fB0%h&ra?62UjT4VO$EEsK z0vTy*SNV;dnwX@||Y%aop6brM6RsQk+u-pUVfJgNnoDppDyVpDWYK0w~`nekhQEnOz^K7C^4L|qKWGFcLfUs{90 zE5d#z<={S9VEX)k@Np==i-|KkS(?`} z+S6{}U2{P63gAiY;@n*Ap*~=`J&(8&8f^KvFd}B{D*VAg@7sFj8ppnbz@FFGE)ty5 zxim1yU#&=nX9RWHx&5qlo(JjTGqguv(kn_8+-P&{1}~4;R~bk)Y1wlzS3K_Zl@+Se0?^4A~w7@BK*bJ_!8F z^Cj;L7XFUM_;1`Q<)cVzrAqjmL)Zq6I5mo9|G$jXrghHl%M?esCRzC6$E?nrN5FGA zsD{opXF0Bj(*r)K*Q|#=8!1oGWQ@hMUTR(W9ofPpk^BC-g(0i`9y zaAiolqdKC3j+)0YQ)=+bSD z*K1+s7muQl=L!0rab6fqAvU~CHxnX5_rp$ zKy4BDF%+^K=exSt6N)>#7tZkwRqLSbs{*f8o

    bt->3wkC2LAjKd8Y)n$3&Y}-UT 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 z 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

    VcD?Q%^jKvdP9hR{4;15 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

    iI1u#`%}CGKBk+{81B4B6*rtW;@B-Qm^^_ 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%0D80``zrp2J7JG|Zg-4yAzhc-RVI(mb${N) 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
    F&-yr8acL14HR|6hb3ZAj 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

    lVU})PP{DbWXcmgy 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�qYGO11+Yt_Ob> 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

  • uLzUU6*j9N#{SjF+L98x%y)ByF&-x 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 z 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 z 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

    Top

    -## ibc/applications/interchain_accounts/v1/account.proto +## ibc/applications/fee/v1/ack.proto - + -### InterchainAccount -An InterchainAccount is defined as a BaseAccount & the address of the account owner on the controller chain +### IncentivizedAcknowledgement +IncentivizedAcknowledgement is the acknowledgement format to be used by applications wrapped in the fee middleware | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `base_account` | [cosmos.auth.v1beta1.BaseAccount](#cosmos.auth.v1beta1.BaseAccount) | | | -| `account_owner` | [string](#string) | | | +| `result` | [bytes](#bytes) | | the underlying app acknowledgement result bytes | +| `forward_relayer_address` | [string](#string) | | the relayer address which submits the recv packet message | +| `underlying_app_success` | [bool](#bool) | | success flag of the base application callback | @@ -315,130 +385,138 @@ An InterchainAccount is defined as a BaseAccount & the address of the account ow - +

    Top

    -## ibc/applications/interchain_accounts/v1/genesis.proto +## ibc/core/client/v1/client.proto - + -### ActiveChannel -ActiveChannel contains a connection ID, port ID and associated active channel ID +### ClientConsensusStates +ClientConsensusStates defines all the stored consensus states for a given +client. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `connection_id` | [string](#string) | | | -| `port_id` | [string](#string) | | | -| `channel_id` | [string](#string) | | | +| `client_id` | [string](#string) | | client identifier | +| `consensus_states` | [ConsensusStateWithHeight](#ibc.core.client.v1.ConsensusStateWithHeight) | repeated | consensus states and their heights associated with the client | - + -### ControllerGenesisState -ControllerGenesisState defines the interchain accounts controller genesis state +### ClientUpdateProposal +ClientUpdateProposal is a governance proposal. If it passes, the substitute +client's latest consensus state is copied over to the subject client. The proposal +handler may fail if the subject and the substitute do not match in client and +chain parameters (with exception to latest height, frozen height, and chain-id). | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `active_channels` | [ActiveChannel](#ibc.applications.interchain_accounts.v1.ActiveChannel) | repeated | | -| `interchain_accounts` | [RegisteredInterchainAccount](#ibc.applications.interchain_accounts.v1.RegisteredInterchainAccount) | repeated | | -| `ports` | [string](#string) | repeated | | -| `params` | [ibc.applications.interchain_accounts.controller.v1.Params](#ibc.applications.interchain_accounts.controller.v1.Params) | | | +| `title` | [string](#string) | | the title of the update proposal | +| `description` | [string](#string) | | the description of the proposal | +| `subject_client_id` | [string](#string) | | the client identifier for the client to be updated if the proposal passes | +| `substitute_client_id` | [string](#string) | | the substitute client identifier for the client standing in for the subject client | - + -### GenesisState -GenesisState defines the interchain accounts genesis state +### ConsensusStateWithHeight +ConsensusStateWithHeight defines a consensus state with an additional height +field. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `controller_genesis_state` | [ControllerGenesisState](#ibc.applications.interchain_accounts.v1.ControllerGenesisState) | | | -| `host_genesis_state` | [HostGenesisState](#ibc.applications.interchain_accounts.v1.HostGenesisState) | | | +| `height` | [Height](#ibc.core.client.v1.Height) | | consensus state height | +| `consensus_state` | [google.protobuf.Any](#google.protobuf.Any) | | consensus state | - + -### HostGenesisState -HostGenesisState defines the interchain accounts host genesis state +### Height +Height is a monotonically increasing data type +that can be compared against another Height for the purposes of updating and +freezing clients + +Normally the RevisionHeight is incremented at each height while keeping +RevisionNumber the same. However some consensus algorithms may choose to +reset the height in certain conditions e.g. hard forks, state-machine +breaking changes In these cases, the RevisionNumber is incremented so that +height continues to be monitonically increasing even as the RevisionHeight +gets reset | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `active_channels` | [ActiveChannel](#ibc.applications.interchain_accounts.v1.ActiveChannel) | repeated | | -| `interchain_accounts` | [RegisteredInterchainAccount](#ibc.applications.interchain_accounts.v1.RegisteredInterchainAccount) | repeated | | -| `port` | [string](#string) | | | -| `params` | [ibc.applications.interchain_accounts.host.v1.Params](#ibc.applications.interchain_accounts.host.v1.Params) | | | +| `revision_number` | [uint64](#uint64) | | the revision that the client is currently on | +| `revision_height` | [uint64](#uint64) | | the height within the given revision | - + -### RegisteredInterchainAccount -RegisteredInterchainAccount contains a connection ID, port ID and associated interchain account address +### IdentifiedClientState +IdentifiedClientState defines a client state with an additional client +identifier field. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `connection_id` | [string](#string) | | | -| `port_id` | [string](#string) | | | -| `account_address` | [string](#string) | | | +| `client_id` | [string](#string) | | client identifier | +| `client_state` | [google.protobuf.Any](#google.protobuf.Any) | | client state | - - + - +### Params +Params defines the set of IBC light client parameters. - +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `allowed_clients` | [string](#string) | repeated | allowed_clients defines the list of allowed client state types. | - -

    Top

    -## ibc/applications/interchain_accounts/v1/metadata.proto - + -### Metadata -Metadata defines a set of protocol specific data encoded into the ICS27 channel version bytestring -See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning +### UpgradeProposal +UpgradeProposal is a gov Content type for initiating an IBC breaking +upgrade. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `version` | [string](#string) | | version defines the ICS27 protocol version | -| `controller_connection_id` | [string](#string) | | controller_connection_id is the connection identifier associated with the controller chain | -| `host_connection_id` | [string](#string) | | host_connection_id is the connection identifier associated with the host chain | -| `address` | [string](#string) | | address defines the interchain account address to be fulfilled upon the OnChanOpenTry handshake step NOTE: the address field is empty on the OnChanOpenInit handshake step | -| `encoding` | [string](#string) | | encoding defines the supported codec format | -| `tx_type` | [string](#string) | | tx_type defines the type of transactions the interchain account can execute | +| `title` | [string](#string) | | | +| `description` | [string](#string) | | | +| `plan` | [cosmos.upgrade.v1beta1.Plan](#cosmos.upgrade.v1beta1.Plan) | | | +| `upgraded_client_state` | [google.protobuf.Any](#google.protobuf.Any) | | An UpgradedClientState must be provided to perform an IBC breaking upgrade. This will make the chain commit to the correct upgraded (self) client state before the upgrade occurs, so that connecting chains can verify that the new upgraded client is valid by verifying a proof on the previous version of the chain. This will allow IBC connections to persist smoothly across planned chain upgrades | @@ -454,137 +532,150 @@ See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel- - +

    Top

    -## ibc/applications/interchain_accounts/v1/packet.proto +## ibc/core/channel/v1/channel.proto - + -### CosmosTx -CosmosTx contains a list of sdk.Msg's. It should be used when sending transactions to an SDK host chain. +### Acknowledgement +Acknowledgement is the recommended acknowledgement format to be used by +app-specific protocols. +NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental +conflicts with other protobuf message formats used for acknowledgements. +The first byte of any message with this format will be the non-ASCII values +`0xaa` (result) or `0xb2` (error). Implemented as defined by ICS: +https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `messages` | [google.protobuf.Any](#google.protobuf.Any) | repeated | | +| `result` | [bytes](#bytes) | | | +| `error` | [string](#string) | | | - + -### InterchainAccountPacketData -InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field. +### Channel +Channel defines pipeline for exactly-once packet delivery between specific +modules on separate blockchains, which has at least one end capable of +sending packets and one end capable of receiving packets. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `type` | [Type](#ibc.applications.interchain_accounts.v1.Type) | | | -| `data` | [bytes](#bytes) | | | -| `memo` | [string](#string) | | | - - - - - - +| `state` | [State](#ibc.core.channel.v1.State) | | current state of the channel end | +| `ordering` | [Order](#ibc.core.channel.v1.Order) | | whether the channel is ordered or unordered | +| `counterparty` | [Counterparty](#ibc.core.channel.v1.Counterparty) | | counterparty channel end | +| `connection_hops` | [string](#string) | repeated | list of connection identifiers, in order, along which packets sent on this channel will travel | +| `version` | [string](#string) | | opaque channel version, which is agreed upon during the handshake | - -### Type -Type defines a classification of message issued from a controller chain to its associated interchain accounts -host -| Name | Number | Description | -| ---- | ------ | ----------- | -| TYPE_UNSPECIFIED | 0 | Default zero value enumeration | -| TYPE_EXECUTE_TX | 1 | Execute a transaction on an interchain accounts host chain | - + - +### Counterparty +Counterparty defines a channel end counterparty - +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `port_id` | [string](#string) | | port on the counterparty chain which owns the other end of the channel. | +| `channel_id` | [string](#string) | | channel end on the counterparty chain | - -

    Top

    -## ibc/applications/transfer/v1/transfer.proto - + -### DenomTrace -DenomTrace contains the base denomination for ICS20 fungible tokens and the -source tracing information path. +### IdentifiedChannel +IdentifiedChannel defines a channel with additional port and channel +identifier fields. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `path` | [string](#string) | | path defines the chain of port/channel identifiers used for tracing the source of the fungible token. | -| `base_denom` | [string](#string) | | base denomination of the relayed fungible token. | - +| `state` | [State](#ibc.core.channel.v1.State) | | current state of the channel end | +| `ordering` | [Order](#ibc.core.channel.v1.Order) | | whether the channel is ordered or unordered | +| `counterparty` | [Counterparty](#ibc.core.channel.v1.Counterparty) | | counterparty channel end | +| `connection_hops` | [string](#string) | repeated | list of connection identifiers, in order, along which packets sent on this channel will travel | +| `version` | [string](#string) | | opaque channel version, which is agreed upon during the handshake | +| `port_id` | [string](#string) | | port identifier | +| `channel_id` | [string](#string) | | channel identifier | - -### Params -Params defines the set of IBC transfer parameters. -NOTE: To prevent a single token from being transferred, set the -TransfersEnabled parameter to true and then set the bank module's SendEnabled -parameter for the denomination to false. + + +### Packet +Packet defines a type that carries data across different chains through IBC | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `send_enabled` | [bool](#bool) | | send_enabled enables or disables all cross-chain token transfers from this chain. | -| `receive_enabled` | [bool](#bool) | | receive_enabled enables or disables all cross-chain token transfers to this chain. | +| `sequence` | [uint64](#uint64) | | number corresponds to the order of sends and receives, where a Packet with an earlier sequence number must be sent and received before a Packet with a later sequence number. | +| `source_port` | [string](#string) | | identifies the port on the sending chain. | +| `source_channel` | [string](#string) | | identifies the channel end on the sending chain. | +| `destination_port` | [string](#string) | | identifies the port on the receiving chain. | +| `destination_channel` | [string](#string) | | identifies the channel end on the receiving chain. | +| `data` | [bytes](#bytes) | | actual opaque bytes transferred directly to the application module | +| `timeout_height` | [ibc.core.client.v1.Height](#ibc.core.client.v1.Height) | | block height after which the packet times out | +| `timeout_timestamp` | [uint64](#uint64) | | block timestamp (in nanoseconds) after which the packet times out | - - + - +### PacketId +PacketId is an identifer for a unique Packet +Source chains refer to packets by source port/channel +Destination chains refer to packets by destination port/channel - +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `port_id` | [string](#string) | | channel port identifier | +| `channel_id` | [string](#string) | | channel unique identifier | +| `sequence` | [uint64](#uint64) | | packet sequence | - -

    Top

    -## ibc/applications/transfer/v1/genesis.proto - + -### GenesisState -GenesisState defines the ibc-transfer genesis state +### PacketState +PacketState defines the generic type necessary to retrieve and store +packet commitments, acknowledgements, and receipts. +Caller is responsible for knowing the context necessary to interpret this +state as a commitment, acknowledgement, or a receipt. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `port_id` | [string](#string) | | | -| `denom_traces` | [DenomTrace](#ibc.applications.transfer.v1.DenomTrace) | repeated | | -| `params` | [Params](#ibc.applications.transfer.v1.Params) | | | +| `port_id` | [string](#string) | | channel port identifier. | +| `channel_id` | [string](#string) | | channel unique identifier. | +| `sequence` | [uint64](#uint64) | | packet sequence. | +| `data` | [bytes](#bytes) | | embedded data that represents packet state. | @@ -592,6 +683,35 @@ GenesisState defines the ibc-transfer genesis state + + + +### Order +Order defines if a channel is ORDERED or UNORDERED + +| Name | Number | Description | +| ---- | ------ | ----------- | +| ORDER_NONE_UNSPECIFIED | 0 | zero-value for channel ordering | +| ORDER_UNORDERED | 1 | packets can be delivered in any order, which may differ from the order in which they were sent. | +| ORDER_ORDERED | 2 | packets are delivered exactly in the order which they were sent | + + + + + +### State +State defines if a channel is in one of the following states: +CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| STATE_UNINITIALIZED_UNSPECIFIED | 0 | Default State | +| STATE_INIT | 1 | A channel has just started the opening handshake. | +| STATE_TRYOPEN | 2 | A channel has acknowledged the handshake step on the counterparty chain. | +| STATE_OPEN | 3 | A channel has completed the handshake. Open channels are ready to send and receive packets. | +| STATE_CLOSED | 4 | A channel has been closed and can no longer be used to send or receive packets. | + + @@ -600,129 +720,155 @@ GenesisState defines the ibc-transfer genesis state - +

    Top

    -## ibc/applications/transfer/v1/query.proto +## ibc/applications/fee/v1/fee.proto - + -### QueryDenomHashRequest -QueryDenomHashRequest is the request type for the Query/DenomHash RPC -method +### Fee +Fee defines the ICS29 receive, acknowledgement and timeout fees | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `trace` | [string](#string) | | The denomination trace ([port_id]/[channel_id])+/[denom] | +| `recv_fee` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | the packet receive fee | +| `ack_fee` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | the packet acknowledgement fee | +| `timeout_fee` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | the packet timeout fee | - + -### QueryDenomHashResponse -QueryDenomHashResponse is the response type for the Query/DenomHash RPC -method. +### IdentifiedPacketFees +IdentifiedPacketFees contains a list of type PacketFee and associated PacketId | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `hash` | [string](#string) | | hash (in hex format) of the denomination trace information. | +| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | unique packet identifier comprised of the channel ID, port ID and sequence | +| `packet_fees` | [PacketFee](#ibc.applications.fee.v1.PacketFee) | repeated | list of packet fees | - + -### QueryDenomTraceRequest -QueryDenomTraceRequest is the request type for the Query/DenomTrace RPC -method +### PacketFee +PacketFee contains ICS29 relayer fees, refund address and optional list of permitted relayers | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `hash` | [string](#string) | | hash (in hex format) of the denomination trace information. | +| `fee` | [Fee](#ibc.applications.fee.v1.Fee) | | fee encapsulates the recv, ack and timeout fees associated with an IBC packet | +| `refund_address` | [string](#string) | | the refund address for unspent fees | +| `relayers` | [string](#string) | repeated | optional list of relayers permitted to receive fees | - + -### QueryDenomTraceResponse -QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC -method. +### PacketFees +PacketFees contains a list of type PacketFee | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `denom_trace` | [DenomTrace](#ibc.applications.transfer.v1.DenomTrace) | | denom_trace returns the requested denomination trace information. | +| `packet_fees` | [PacketFee](#ibc.applications.fee.v1.PacketFee) | repeated | list of packet fees | + - + -### QueryDenomTracesRequest -QueryConnectionsRequest is the request type for the Query/DenomTraces RPC -method + + + + + + + +

    Top

    + +## ibc/applications/fee/v1/genesis.proto + + + + + +### FeeEnabledChannel +FeeEnabledChannel contains the PortID & ChannelID for a fee enabled channel | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | +| `port_id` | [string](#string) | | unique port identifier | +| `channel_id` | [string](#string) | | unique channel identifier | - + -### QueryDenomTracesResponse -QueryConnectionsResponse is the response type for the Query/DenomTraces RPC -method. +### ForwardRelayerAddress +ForwardRelayerAddress contains the forward relayer address and PacketId used for async acknowledgements | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `denom_traces` | [DenomTrace](#ibc.applications.transfer.v1.DenomTrace) | repeated | denom_traces returns all denominations trace information. | -| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | +| `address` | [string](#string) | | the forward relayer address | +| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | unique packet identifer comprised of the channel ID, port ID and sequence | - + -### QueryParamsRequest -QueryParamsRequest is the request type for the Query/Params RPC method. +### GenesisState +GenesisState defines the ICS29 fee middleware genesis state +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `identified_fees` | [IdentifiedPacketFees](#ibc.applications.fee.v1.IdentifiedPacketFees) | repeated | list of identified packet fees | +| `fee_enabled_channels` | [FeeEnabledChannel](#ibc.applications.fee.v1.FeeEnabledChannel) | repeated | list of fee enabled channels | +| `registered_relayers` | [RegisteredRelayerAddress](#ibc.applications.fee.v1.RegisteredRelayerAddress) | repeated | list of registered relayer addresses | +| `forward_relayers` | [ForwardRelayerAddress](#ibc.applications.fee.v1.ForwardRelayerAddress) | repeated | list of forward relayer addresses | - -### QueryParamsResponse -QueryParamsResponse is the response type for the Query/Params RPC method. + + + +### RegisteredRelayerAddress +RegisteredRelayerAddress contains the address and counterparty address for a specific relayer (for distributing fees) | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `params` | [Params](#ibc.applications.transfer.v1.Params) | | params defines the parameters of the module. | +| `address` | [string](#string) | | the relayer address | +| `counterparty_address` | [string](#string) | | the counterparty relayer address | +| `channel_id` | [string](#string) | | unique channel identifier | @@ -734,155 +880,1076 @@ QueryParamsResponse is the response type for the Query/Params RPC method. + - -### Query -Query provides defines the gRPC querier service. -| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | -| ----------- | ------------ | ------------- | ------------| ------- | -------- | -| `DenomTrace` | [QueryDenomTraceRequest](#ibc.applications.transfer.v1.QueryDenomTraceRequest) | [QueryDenomTraceResponse](#ibc.applications.transfer.v1.QueryDenomTraceResponse) | DenomTrace queries a denomination trace information. | GET|/ibc/apps/transfer/v1/denom_traces/{hash}| -| `DenomTraces` | [QueryDenomTracesRequest](#ibc.applications.transfer.v1.QueryDenomTracesRequest) | [QueryDenomTracesResponse](#ibc.applications.transfer.v1.QueryDenomTracesResponse) | DenomTraces queries all denomination traces. | GET|/ibc/apps/transfer/v1/denom_traces| -| `Params` | [QueryParamsRequest](#ibc.applications.transfer.v1.QueryParamsRequest) | [QueryParamsResponse](#ibc.applications.transfer.v1.QueryParamsResponse) | Params queries all parameters of the ibc-transfer module. | GET|/ibc/apps/transfer/v1/params| -| `DenomHash` | [QueryDenomHashRequest](#ibc.applications.transfer.v1.QueryDenomHashRequest) | [QueryDenomHashResponse](#ibc.applications.transfer.v1.QueryDenomHashResponse) | DenomHash queries a denomination hash information. | GET|/ibc/apps/transfer/v1/denom_hashes/{trace}| + +

    Top

    + +## ibc/applications/fee/v1/metadata.proto + + + + + +### Metadata +Metadata defines the ICS29 channel specific metadata encoded into the channel version bytestring +See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `fee_version` | [string](#string) | | fee_version defines the ICS29 fee version | +| `app_version` | [string](#string) | | app_version defines the underlying application version, which may or may not be a JSON encoded bytestring | + + + + + + + + + + - +

    Top

    -## ibc/core/client/v1/client.proto +## ibc/applications/fee/v1/query.proto - + -### ClientConsensusStates -ClientConsensusStates defines all the stored consensus states for a given -client. +### QueryCounterpartyAddressRequest +QueryCounterpartyAddressRequest defines the request type for the CounterpartyAddress rpc | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `client_id` | [string](#string) | | client identifier | -| `consensus_states` | [ConsensusStateWithHeight](#ibc.core.client.v1.ConsensusStateWithHeight) | repeated | consensus states and their heights associated with the client | +| `channel_id` | [string](#string) | | unique channel identifier | +| `relayer_address` | [string](#string) | | the relayer address to which the counterparty is registered | - + -### ClientUpdateProposal -ClientUpdateProposal is a governance proposal. If it passes, the substitute -client's latest consensus state is copied over to the subject client. The proposal -handler may fail if the subject and the substitute do not match in client and -chain parameters (with exception to latest height, frozen height, and chain-id). +### QueryCounterpartyAddressResponse +QueryCounterpartyAddressResponse defines the response type for the CounterpartyAddress rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `counterparty_address` | [string](#string) | | the counterparty address used to compensate forward relaying | + + + + + + + + +### QueryFeeEnabledChannelRequest +QueryFeeEnabledChannelRequest defines the request type for the FeeEnabledChannel rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `port_id` | [string](#string) | | unique port identifier | +| `channel_id` | [string](#string) | | unique channel identifier | + + + + + + + + +### QueryFeeEnabledChannelResponse +QueryFeeEnabledChannelResponse defines the response type for the FeeEnabledChannel rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `fee_enabled` | [bool](#bool) | | boolean flag representing the fee enabled channel status | + + + + + + + + +### QueryFeeEnabledChannelsRequest +QueryFeeEnabledChannelsRequest defines the request type for the FeeEnabledChannels rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | +| `query_height` | [uint64](#uint64) | | block height at which to query | + + + + + + + + +### QueryFeeEnabledChannelsResponse +QueryFeeEnabledChannelsResponse defines the response type for the FeeEnabledChannels rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `fee_enabled_channels` | [FeeEnabledChannel](#ibc.applications.fee.v1.FeeEnabledChannel) | repeated | list of fee enabled channels | + + + + + + + + +### QueryIncentivizedPacketRequest +QueryIncentivizedPacketRequest defines the request type for the IncentivizedPacket rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | unique packet identifier comprised of channel ID, port ID and sequence | +| `query_height` | [uint64](#uint64) | | block height at which to query | + + + + + + + + +### QueryIncentivizedPacketResponse +QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPacket rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `incentivized_packet` | [IdentifiedPacketFees](#ibc.applications.fee.v1.IdentifiedPacketFees) | | the identified fees for the incentivized packet | + + + + + + + + +### QueryIncentivizedPacketsForChannelRequest +QueryIncentivizedPacketsForChannelRequest defines the request type for querying for all incentivized packets +for a specific channel + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | +| `port_id` | [string](#string) | | | +| `channel_id` | [string](#string) | | | +| `query_height` | [uint64](#uint64) | | Height to query at | + + + + + + + + +### QueryIncentivizedPacketsForChannelResponse +QueryIncentivizedPacketsResponse defines the response type for the incentivized packets RPC + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `incentivized_packets` | [IdentifiedPacketFees](#ibc.applications.fee.v1.IdentifiedPacketFees) | repeated | Map of all incentivized_packets | + + + + + + + + +### QueryIncentivizedPacketsRequest +QueryIncentivizedPacketsRequest defines the request type for the IncentivizedPackets rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | +| `query_height` | [uint64](#uint64) | | block height at which to query | + + + + + + + + +### QueryIncentivizedPacketsResponse +QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPackets rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `incentivized_packets` | [IdentifiedPacketFees](#ibc.applications.fee.v1.IdentifiedPacketFees) | repeated | list of identified fees for incentivized packets | + + + + + + + + +### QueryTotalAckFeesRequest +QueryTotalAckFeesRequest defines the request type for the TotalAckFees rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | the packet identifier for the associated fees | + + + + + + + + +### QueryTotalAckFeesResponse +QueryTotalAckFeesResponse defines the response type for the TotalAckFees rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `ack_fees` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | the total packet acknowledgement fees | + + + + + + + + +### QueryTotalRecvFeesRequest +QueryTotalRecvFeesRequest defines the request type for the TotalRecvFees rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | the packet identifier for the associated fees | + + + + + + + + +### QueryTotalRecvFeesResponse +QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `recv_fees` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | the total packet receive fees | + + + + + + + + +### QueryTotalTimeoutFeesRequest +QueryTotalTimeoutFeesRequest defines the request type for the TotalTimeoutFees rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | the packet identifier for the associated fees | + + + + + + + + +### QueryTotalTimeoutFeesResponse +QueryTotalTimeoutFeesResponse defines the response type for the TotalTimeoutFees rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `timeout_fees` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | the total packet timeout fees | + + + + + + + + + + + + + + +### Query +Query defines the ICS29 gRPC querier service. + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `IncentivizedPackets` | [QueryIncentivizedPacketsRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketsRequest) | [QueryIncentivizedPacketsResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketsResponse) | IncentivizedPackets returns all incentivized packets and their associated fees | GET|/ibc/apps/fee/v1/incentivized_packets| +| `IncentivizedPacket` | [QueryIncentivizedPacketRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketRequest) | [QueryIncentivizedPacketResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketResponse) | IncentivizedPacket returns all packet fees for a packet given its identifier | GET|/ibc/apps/fee/v1/incentivized_packet/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/{packet_id.sequence}| +| `IncentivizedPacketsForChannel` | [QueryIncentivizedPacketsForChannelRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelRequest) | [QueryIncentivizedPacketsForChannelResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelResponse) | Gets all incentivized packets for a specific channel | GET|/ibc/apps/fee/v1/incentivized_packets/port/{port_id}/channel/{channel_id}| +| `TotalRecvFees` | [QueryTotalRecvFeesRequest](#ibc.applications.fee.v1.QueryTotalRecvFeesRequest) | [QueryTotalRecvFeesResponse](#ibc.applications.fee.v1.QueryTotalRecvFeesResponse) | TotalRecvFees returns the total receive fees for a packet given its identifier | GET|/ibc/apps/fee/v1/total_recv_fees/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/{packet_id.sequence}| +| `TotalAckFees` | [QueryTotalAckFeesRequest](#ibc.applications.fee.v1.QueryTotalAckFeesRequest) | [QueryTotalAckFeesResponse](#ibc.applications.fee.v1.QueryTotalAckFeesResponse) | TotalAckFees returns the total acknowledgement fees for a packet given its identifier | GET|/ibc/apps/fee/v1/total_ack_fees/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/{packet_id.sequence}| +| `TotalTimeoutFees` | [QueryTotalTimeoutFeesRequest](#ibc.applications.fee.v1.QueryTotalTimeoutFeesRequest) | [QueryTotalTimeoutFeesResponse](#ibc.applications.fee.v1.QueryTotalTimeoutFeesResponse) | TotalTimeoutFees returns the total timeout fees for a packet given its identifier | GET|/ibc/apps/fee/v1/total_timeout_fees/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/{packet_id.sequence}| +| `CounterpartyAddress` | [QueryCounterpartyAddressRequest](#ibc.applications.fee.v1.QueryCounterpartyAddressRequest) | [QueryCounterpartyAddressResponse](#ibc.applications.fee.v1.QueryCounterpartyAddressResponse) | CounterpartyAddress returns the registered counterparty address for forward relaying | GET|/ibc/apps/fee/v1/counterparty_address/{relayer_address}/channel/{channel_id}| +| `FeeEnabledChannels` | [QueryFeeEnabledChannelsRequest](#ibc.applications.fee.v1.QueryFeeEnabledChannelsRequest) | [QueryFeeEnabledChannelsResponse](#ibc.applications.fee.v1.QueryFeeEnabledChannelsResponse) | FeeEnabledChannels returns a list of all fee enabled channels | GET|/ibc/apps/fee/v1/fee_enabled| +| `FeeEnabledChannel` | [QueryFeeEnabledChannelRequest](#ibc.applications.fee.v1.QueryFeeEnabledChannelRequest) | [QueryFeeEnabledChannelResponse](#ibc.applications.fee.v1.QueryFeeEnabledChannelResponse) | FeeEnabledChannel returns true if the provided port and channel identifiers belong to a fee enabled channel | GET|/ibc/apps/fee/v1/fee_enabled/port/{port_id}/channel/{channel_id}| + + + + + + +

    Top

    + +## ibc/applications/fee/v1/tx.proto + + + + + +### MsgPayPacketFee +MsgPayPacketFee defines the request type for the PayPacketFee rpc +This Msg can be used to pay for a packet at the next sequence send & should be combined with the Msg that will be +paid for + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `fee` | [Fee](#ibc.applications.fee.v1.Fee) | | fee encapsulates the recv, ack and timeout fees associated with an IBC packet | +| `source_port_id` | [string](#string) | | the source port unique identifier | +| `source_channel_id` | [string](#string) | | the source channel unique identifer | +| `signer` | [string](#string) | | account address to refund fee if necessary | +| `relayers` | [string](#string) | repeated | optional list of relayers permitted to the receive packet fees | + + + + + + + + +### MsgPayPacketFeeAsync +MsgPayPacketFeeAsync defines the request type for the PayPacketFeeAsync rpc +This Msg can be used to pay for a packet at a specified sequence (instead of the next sequence send) + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `packet_id` | [ibc.core.channel.v1.PacketId](#ibc.core.channel.v1.PacketId) | | unique packet identifier comprised of the channel ID, port ID and sequence | +| `packet_fee` | [PacketFee](#ibc.applications.fee.v1.PacketFee) | | the packet fee associated with a particular IBC packet | + + + + + + + + +### MsgPayPacketFeeAsyncResponse +MsgPayPacketFeeAsyncResponse defines the response type for the PayPacketFeeAsync rpc + + + + + + + + +### MsgPayPacketFeeResponse +MsgPayPacketFeeResponse defines the response type for the PayPacketFee rpc + + + + + + + + +### MsgRegisterCounterpartyAddress +MsgRegisterCounterpartyAddress defines the request type for the RegisterCounterpartyAddress rpc + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | the relayer address | +| `counterparty_address` | [string](#string) | | the counterparty relayer address | +| `channel_id` | [string](#string) | | unique channel identifier | + + + + + + + + +### MsgRegisterCounterpartyAddressResponse +MsgRegisterCounterpartyAddressResponse defines the response type for the RegisterCounterpartyAddress rpc + + + + + + + + + + + + + + +### Msg +Msg defines the ICS29 Msg service. + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `RegisterCounterpartyAddress` | [MsgRegisterCounterpartyAddress](#ibc.applications.fee.v1.MsgRegisterCounterpartyAddress) | [MsgRegisterCounterpartyAddressResponse](#ibc.applications.fee.v1.MsgRegisterCounterpartyAddressResponse) | RegisterCounterpartyAddress defines a rpc handler method for MsgRegisterCounterpartyAddress RegisterCounterpartyAddress is called by the relayer on each channelEnd and allows them to specify their counterparty address before relaying. This ensures they will be properly compensated for forward relaying since destination chain must send back relayer's source address (counterparty address) in acknowledgement. This function may be called more than once by a relayer, in which case, latest counterparty address is always used. | | +| `PayPacketFee` | [MsgPayPacketFee](#ibc.applications.fee.v1.MsgPayPacketFee) | [MsgPayPacketFeeResponse](#ibc.applications.fee.v1.MsgPayPacketFeeResponse) | PayPacketFee defines a rpc handler method for MsgPayPacketFee PayPacketFee is an open callback that may be called by any module/user that wishes to escrow funds in order to incentivize the relaying of the packet at the next sequence NOTE: This method is intended to be used within a multi msg transaction, where the subsequent msg that follows initiates the lifecycle of the incentivized packet | | +| `PayPacketFeeAsync` | [MsgPayPacketFeeAsync](#ibc.applications.fee.v1.MsgPayPacketFeeAsync) | [MsgPayPacketFeeAsyncResponse](#ibc.applications.fee.v1.MsgPayPacketFeeAsyncResponse) | PayPacketFeeAsync defines a rpc handler method for MsgPayPacketFeeAsync PayPacketFeeAsync is an open callback that may be called by any module/user that wishes to escrow funds in order to incentivize the relaying of a known packet (i.e. at a particular sequence) | | + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/controller/v1/controller.proto + + + + + +### Params +Params defines the set of on-chain interchain accounts parameters. +The following parameters may be used to disable the controller submodule. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `controller_enabled` | [bool](#bool) | | controller_enabled enables or disables the controller submodule. | + + + + + + + + + + + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/controller/v1/query.proto + + + + + +### QueryParamsRequest +QueryParamsRequest is the request type for the Query/Params RPC method. + + + + + + + + +### QueryParamsResponse +QueryParamsResponse is the response type for the Query/Params RPC method. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `params` | [Params](#ibc.applications.interchain_accounts.controller.v1.Params) | | params defines the parameters of the module. | + + + + + + + + + + + + + + +### Query +Query provides defines the gRPC querier service. + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `Params` | [QueryParamsRequest](#ibc.applications.interchain_accounts.controller.v1.QueryParamsRequest) | [QueryParamsResponse](#ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse) | Params queries all parameters of the ICA controller submodule. | GET|/ibc/apps/interchain_accounts/controller/v1/params| + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/host/v1/host.proto + + + + + +### Params +Params defines the set of on-chain interchain accounts parameters. +The following parameters may be used to disable the host submodule. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `host_enabled` | [bool](#bool) | | host_enabled enables or disables the host submodule. | +| `allow_messages` | [string](#string) | repeated | allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain. | + + + + + + + + + + + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/host/v1/query.proto + + + + + +### QueryParamsRequest +QueryParamsRequest is the request type for the Query/Params RPC method. + + + + + + + + +### QueryParamsResponse +QueryParamsResponse is the response type for the Query/Params RPC method. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `params` | [Params](#ibc.applications.interchain_accounts.host.v1.Params) | | params defines the parameters of the module. | + + + + + + + + + + + + + + +### Query +Query provides defines the gRPC querier service. + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `Params` | [QueryParamsRequest](#ibc.applications.interchain_accounts.host.v1.QueryParamsRequest) | [QueryParamsResponse](#ibc.applications.interchain_accounts.host.v1.QueryParamsResponse) | Params queries all parameters of the ICA host submodule. | GET|/ibc/apps/interchain_accounts/host/v1/params| + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/v1/account.proto + + + + + +### InterchainAccount +An InterchainAccount is defined as a BaseAccount & the address of the account owner on the controller chain + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `base_account` | [cosmos.auth.v1beta1.BaseAccount](#cosmos.auth.v1beta1.BaseAccount) | | | +| `account_owner` | [string](#string) | | | + + + + + + + + + + + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/v1/genesis.proto + + + + + +### ActiveChannel +ActiveChannel contains a connection ID, port ID and associated active channel ID + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `connection_id` | [string](#string) | | | +| `port_id` | [string](#string) | | | +| `channel_id` | [string](#string) | | | + + + + + + + + +### ControllerGenesisState +ControllerGenesisState defines the interchain accounts controller genesis state + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `active_channels` | [ActiveChannel](#ibc.applications.interchain_accounts.v1.ActiveChannel) | repeated | | +| `interchain_accounts` | [RegisteredInterchainAccount](#ibc.applications.interchain_accounts.v1.RegisteredInterchainAccount) | repeated | | +| `ports` | [string](#string) | repeated | | +| `params` | [ibc.applications.interchain_accounts.controller.v1.Params](#ibc.applications.interchain_accounts.controller.v1.Params) | | | + + + + + + + + +### GenesisState +GenesisState defines the interchain accounts genesis state + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `controller_genesis_state` | [ControllerGenesisState](#ibc.applications.interchain_accounts.v1.ControllerGenesisState) | | | +| `host_genesis_state` | [HostGenesisState](#ibc.applications.interchain_accounts.v1.HostGenesisState) | | | + + + + + + + + +### HostGenesisState +HostGenesisState defines the interchain accounts host genesis state + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `active_channels` | [ActiveChannel](#ibc.applications.interchain_accounts.v1.ActiveChannel) | repeated | | +| `interchain_accounts` | [RegisteredInterchainAccount](#ibc.applications.interchain_accounts.v1.RegisteredInterchainAccount) | repeated | | +| `port` | [string](#string) | | | +| `params` | [ibc.applications.interchain_accounts.host.v1.Params](#ibc.applications.interchain_accounts.host.v1.Params) | | | + + + + + + + + +### RegisteredInterchainAccount +RegisteredInterchainAccount contains a connection ID, port ID and associated interchain account address + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `connection_id` | [string](#string) | | | +| `port_id` | [string](#string) | | | +| `account_address` | [string](#string) | | | + + + + + + + + + + + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/v1/metadata.proto + + + + + +### Metadata +Metadata defines a set of protocol specific data encoded into the ICS27 channel version bytestring +See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `version` | [string](#string) | | version defines the ICS27 protocol version | +| `controller_connection_id` | [string](#string) | | controller_connection_id is the connection identifier associated with the controller chain | +| `host_connection_id` | [string](#string) | | host_connection_id is the connection identifier associated with the host chain | +| `address` | [string](#string) | | address defines the interchain account address to be fulfilled upon the OnChanOpenTry handshake step NOTE: the address field is empty on the OnChanOpenInit handshake step | +| `encoding` | [string](#string) | | encoding defines the supported codec format | +| `tx_type` | [string](#string) | | tx_type defines the type of transactions the interchain account can execute | + + + + + + + + + + + + + + + + +

    Top

    + +## ibc/applications/interchain_accounts/v1/packet.proto + + + + + +### CosmosTx +CosmosTx contains a list of sdk.Msg's. It should be used when sending transactions to an SDK host chain. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `messages` | [google.protobuf.Any](#google.protobuf.Any) | repeated | | + + + + + + + + +### InterchainAccountPacketData +InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `type` | [Type](#ibc.applications.interchain_accounts.v1.Type) | | | +| `data` | [bytes](#bytes) | | | +| `memo` | [string](#string) | | | + + + + + + + + + + +### Type +Type defines a classification of message issued from a controller chain to its associated interchain accounts +host + +| Name | Number | Description | +| ---- | ------ | ----------- | +| TYPE_UNSPECIFIED | 0 | Default zero value enumeration | +| TYPE_EXECUTE_TX | 1 | Execute a transaction on an interchain accounts host chain | + + + + + + + + + + + +

    Top

    + +## ibc/applications/transfer/v1/transfer.proto + + + + + +### DenomTrace +DenomTrace contains the base denomination for ICS20 fungible tokens and the +source tracing information path. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `path` | [string](#string) | | path defines the chain of port/channel identifiers used for tracing the source of the fungible token. | +| `base_denom` | [string](#string) | | base denomination of the relayed fungible token. | + + + + + + + + +### Params +Params defines the set of IBC transfer parameters. +NOTE: To prevent a single token from being transferred, set the +TransfersEnabled parameter to true and then set the bank module's SendEnabled +parameter for the denomination to false. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `send_enabled` | [bool](#bool) | | send_enabled enables or disables all cross-chain token transfers from this chain. | +| `receive_enabled` | [bool](#bool) | | receive_enabled enables or disables all cross-chain token transfers to this chain. | + + + + + + + + + + + + + + + + +

    Top

    + +## ibc/applications/transfer/v1/genesis.proto + + + + + +### GenesisState +GenesisState defines the ibc-transfer genesis state + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `port_id` | [string](#string) | | | +| `denom_traces` | [DenomTrace](#ibc.applications.transfer.v1.DenomTrace) | repeated | | +| `params` | [Params](#ibc.applications.transfer.v1.Params) | | | + + + + + + + + + + + + + + + + +

    Top

    + +## ibc/applications/transfer/v1/query.proto + + + + + +### QueryDenomHashRequest +QueryDenomHashRequest is the request type for the Query/DenomHash RPC +method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `trace` | [string](#string) | | The denomination trace ([port_id]/[channel_id])+/[denom] | + + + + + + + + +### QueryDenomHashResponse +QueryDenomHashResponse is the response type for the Query/DenomHash RPC +method. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `hash` | [string](#string) | | hash (in hex format) of the denomination trace information. | + + + + + + + + +### QueryDenomTraceRequest +QueryDenomTraceRequest is the request type for the Query/DenomTrace RPC +method | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `title` | [string](#string) | | the title of the update proposal | -| `description` | [string](#string) | | the description of the proposal | -| `subject_client_id` | [string](#string) | | the client identifier for the client to be updated if the proposal passes | -| `substitute_client_id` | [string](#string) | | the substitute client identifier for the client standing in for the subject client | +| `hash` | [string](#string) | | hash (in hex format) of the denomination trace information. | - + -### ConsensusStateWithHeight -ConsensusStateWithHeight defines a consensus state with an additional height -field. +### QueryDenomTraceResponse +QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC +method. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `height` | [Height](#ibc.core.client.v1.Height) | | consensus state height | -| `consensus_state` | [google.protobuf.Any](#google.protobuf.Any) | | consensus state | - +| `denom_trace` | [DenomTrace](#ibc.applications.transfer.v1.DenomTrace) | | denom_trace returns the requested denomination trace information. | - -### Height -Height is a monotonically increasing data type -that can be compared against another Height for the purposes of updating and -freezing clients + -Normally the RevisionHeight is incremented at each height while keeping -RevisionNumber the same. However some consensus algorithms may choose to -reset the height in certain conditions e.g. hard forks, state-machine -breaking changes In these cases, the RevisionNumber is incremented so that -height continues to be monitonically increasing even as the RevisionHeight -gets reset +### QueryDenomTracesRequest +QueryConnectionsRequest is the request type for the Query/DenomTraces RPC +method | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `revision_number` | [uint64](#uint64) | | the revision that the client is currently on | -| `revision_height` | [uint64](#uint64) | | the height within the given revision | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | - + -### IdentifiedClientState -IdentifiedClientState defines a client state with an additional client -identifier field. +### QueryDenomTracesResponse +QueryConnectionsResponse is the response type for the Query/DenomTraces RPC +method. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `client_id` | [string](#string) | | client identifier | -| `client_state` | [google.protobuf.Any](#google.protobuf.Any) | | client state | - - +| `denom_traces` | [DenomTrace](#ibc.applications.transfer.v1.DenomTrace) | repeated | denom_traces returns all denominations trace information. | +| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | - -### Params -Params defines the set of IBC light client parameters. + -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `allowed_clients` | [string](#string) | repeated | allowed_clients defines the list of allowed client state types. | +### QueryParamsRequest +QueryParamsRequest is the request type for the Query/Params RPC method. - + -### UpgradeProposal -UpgradeProposal is a gov Content type for initiating an IBC breaking -upgrade. +### QueryParamsResponse +QueryParamsResponse is the response type for the Query/Params RPC method. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `title` | [string](#string) | | | -| `description` | [string](#string) | | | -| `plan` | [cosmos.upgrade.v1beta1.Plan](#cosmos.upgrade.v1beta1.Plan) | | | -| `upgraded_client_state` | [google.protobuf.Any](#google.protobuf.Any) | | An UpgradedClientState must be provided to perform an IBC breaking upgrade. This will make the chain commit to the correct upgraded (self) client state before the upgrade occurs, so that connecting chains can verify that the new upgraded client is valid by verifying a proof on the previous version of the chain. This will allow IBC connections to persist smoothly across planned chain upgrades | +| `params` | [Params](#ibc.applications.transfer.v1.Params) | | params defines the parameters of the module. | @@ -894,6 +1961,19 @@ upgrade. + + + +### Query +Query provides defines the gRPC querier service. + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `DenomTrace` | [QueryDenomTraceRequest](#ibc.applications.transfer.v1.QueryDenomTraceRequest) | [QueryDenomTraceResponse](#ibc.applications.transfer.v1.QueryDenomTraceResponse) | DenomTrace queries a denomination trace information. | GET|/ibc/apps/transfer/v1/denom_traces/{hash}| +| `DenomTraces` | [QueryDenomTracesRequest](#ibc.applications.transfer.v1.QueryDenomTracesRequest) | [QueryDenomTracesResponse](#ibc.applications.transfer.v1.QueryDenomTracesResponse) | DenomTraces queries all denomination traces. | GET|/ibc/apps/transfer/v1/denom_traces| +| `Params` | [QueryParamsRequest](#ibc.applications.transfer.v1.QueryParamsRequest) | [QueryParamsResponse](#ibc.applications.transfer.v1.QueryParamsResponse) | Params queries all parameters of the ibc-transfer module. | GET|/ibc/apps/transfer/v1/params| +| `DenomHash` | [QueryDenomHashRequest](#ibc.applications.transfer.v1.QueryDenomHashRequest) | [QueryDenomHashResponse](#ibc.applications.transfer.v1.QueryDenomHashResponse) | DenomHash queries a denomination hash information. | GET|/ibc/apps/transfer/v1/denom_hashes/{trace}| + @@ -993,175 +2073,6 @@ https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transf - -

    Top

    - -## ibc/core/channel/v1/channel.proto - - - - - -### Acknowledgement -Acknowledgement is the recommended acknowledgement format to be used by -app-specific protocols. -NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental -conflicts with other protobuf message formats used for acknowledgements. -The first byte of any message with this format will be the non-ASCII values -`0xaa` (result) or `0xb2` (error). Implemented as defined by ICS: -https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `result` | [bytes](#bytes) | | | -| `error` | [string](#string) | | | - - - - - - - - -### Channel -Channel defines pipeline for exactly-once packet delivery between specific -modules on separate blockchains, which has at least one end capable of -sending packets and one end capable of receiving packets. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `state` | [State](#ibc.core.channel.v1.State) | | current state of the channel end | -| `ordering` | [Order](#ibc.core.channel.v1.Order) | | whether the channel is ordered or unordered | -| `counterparty` | [Counterparty](#ibc.core.channel.v1.Counterparty) | | counterparty channel end | -| `connection_hops` | [string](#string) | repeated | list of connection identifiers, in order, along which packets sent on this channel will travel | -| `version` | [string](#string) | | opaque channel version, which is agreed upon during the handshake | - - - - - - - - -### Counterparty -Counterparty defines a channel end counterparty - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `port_id` | [string](#string) | | port on the counterparty chain which owns the other end of the channel. | -| `channel_id` | [string](#string) | | channel end on the counterparty chain | - - - - - - - - -### IdentifiedChannel -IdentifiedChannel defines a channel with additional port and channel -identifier fields. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `state` | [State](#ibc.core.channel.v1.State) | | current state of the channel end | -| `ordering` | [Order](#ibc.core.channel.v1.Order) | | whether the channel is ordered or unordered | -| `counterparty` | [Counterparty](#ibc.core.channel.v1.Counterparty) | | counterparty channel end | -| `connection_hops` | [string](#string) | repeated | list of connection identifiers, in order, along which packets sent on this channel will travel | -| `version` | [string](#string) | | opaque channel version, which is agreed upon during the handshake | -| `port_id` | [string](#string) | | port identifier | -| `channel_id` | [string](#string) | | channel identifier | - - - - - - - - -### Packet -Packet defines a type that carries data across different chains through IBC - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `sequence` | [uint64](#uint64) | | number corresponds to the order of sends and receives, where a Packet with an earlier sequence number must be sent and received before a Packet with a later sequence number. | -| `source_port` | [string](#string) | | identifies the port on the sending chain. | -| `source_channel` | [string](#string) | | identifies the channel end on the sending chain. | -| `destination_port` | [string](#string) | | identifies the port on the receiving chain. | -| `destination_channel` | [string](#string) | | identifies the channel end on the receiving chain. | -| `data` | [bytes](#bytes) | | actual opaque bytes transferred directly to the application module | -| `timeout_height` | [ibc.core.client.v1.Height](#ibc.core.client.v1.Height) | | block height after which the packet times out | -| `timeout_timestamp` | [uint64](#uint64) | | block timestamp (in nanoseconds) after which the packet times out | - - - - - - - - -### PacketState -PacketState defines the generic type necessary to retrieve and store -packet commitments, acknowledgements, and receipts. -Caller is responsible for knowing the context necessary to interpret this -state as a commitment, acknowledgement, or a receipt. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `port_id` | [string](#string) | | channel port identifier. | -| `channel_id` | [string](#string) | | channel unique identifier. | -| `sequence` | [uint64](#uint64) | | packet sequence. | -| `data` | [bytes](#bytes) | | embedded data that represents packet state. | - - - - - - - - - - -### Order -Order defines if a channel is ORDERED or UNORDERED - -| Name | Number | Description | -| ---- | ------ | ----------- | -| ORDER_NONE_UNSPECIFIED | 0 | zero-value for channel ordering | -| ORDER_UNORDERED | 1 | packets can be delivered in any order, which may differ from the order in which they were sent. | -| ORDER_ORDERED | 2 | packets are delivered exactly in the order which they were sent | - - - - - -### State -State defines if a channel is in one of the following states: -CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - -| Name | Number | Description | -| ---- | ------ | ----------- | -| STATE_UNINITIALIZED_UNSPECIFIED | 0 | Default State | -| STATE_INIT | 1 | A channel has just started the opening handshake. | -| STATE_TRYOPEN | 2 | A channel has acknowledged the handshake step on the counterparty chain. | -| STATE_OPEN | 3 | A channel has completed the handshake. Open channels are ready to send and receive packets. | -| STATE_CLOSED | 4 | A channel has been closed and can no longer be used to send or receive packets. | - - - - - - - - - -

    Top

    @@ -1910,6 +2821,7 @@ MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | `channel_id` | [string](#string) | | | +| `version` | [string](#string) | | | @@ -1945,6 +2857,11 @@ value will be ignored by core IBC. MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `version` | [string](#string) | | | + + diff --git a/docs/roadmap/history.md b/docs/roadmap/history.md deleted file mode 100644 index 575ed5099e6..00000000000 --- a/docs/roadmap/history.md +++ /dev/null @@ -1,44 +0,0 @@ - -# Past roadmap ibc-go - -History of the roadmap for past quarters. - -## Q4 - 2021 - -### Interchain accounts - -- Finalize the issues raised during the internal audit. -- Prepare codebase & specification for two external audits. -- Write developer documentation. -- Integration with hermes relayer and end-2-end testing. -- Create alpha release. - -### Relayer incentivisation - -- Finalize implementation. -- Update specification and write documentation. -- Do internal audit and write issues that may arise. - -### Align implementation with ICS02 - -We will work to bring the ibc-go implementation in line with [ICS02](https://github.com/cosmos/ibc/tree/master/spec/core/ics-002-client-semantics): [#284](https://github.com/cosmos/ibc-go/issues/284), [#285](https://github.com/cosmos/ibc-go/issues/285), [#286](https://github.com/cosmos/ibc-go/issues/286), [#594](https://github.com/cosmos/ibc-go/issues/594) and [#599](https://github.com/cosmos/ibc-go/issues/599). The support for Wasm-based light clients relies on these issues as well. - -### Release schedule - -|Release|Milestone|Date| -|-------|---------|----| -|[`v1.1.0`](https://github.com/cosmos/ibc-go/releases/tag/v1.1.1)||Oct 04, 2021| -|[`v1.2.1`](https://github.com/cosmos/ibc-go/releases/tag/v1.2.1)||Oct 04, 2021| -|[`v2.0.0-rc0`](https://github.com/cosmos/ibc-go/releases/tag/v2.0.0-rc0)|[Link](https://github.com/cosmos/ibc-go/milestone/3)|Oct 05, 2021| -|[`v1.1.2`](https://github.com/cosmos/ibc-go/releases/tag/v1.1.2)||Oct 15, 2021| -|[`v1.2.2`](https://github.com/cosmos/ibc-go/releases/tag/v1.2.2)||Oct 15, 2021| -|[`v1.1.3`](https://github.com/cosmos/ibc-go/releases/tag/v1.1.3)||Nov 09, 2021| -|[`v1.2.3`](https://github.com/cosmos/ibc-go/releases/tag/v1.2.3)||Nov 09, 2021| -|[`v2.0.0`](https://github.com/cosmos/ibc-go/releases/tag/v2.0.0)|[Link](https://github.com/cosmos/ibc-go/milestone/3)|Nov 09, 2021| -|[`v1.1.4`](https://github.com/cosmos/ibc-go/releases/tag/v1.1.5)||Dec 06, 2021| -|[`v1.2.4`](https://github.com/cosmos/ibc-go/releases/tag/v1.2.4)||Dec 06, 2021| -|[`v2.0.1`](https://github.com/cosmos/ibc-go/releases/tag/v2.0.1)|[Link](https://github.com/cosmos/ibc-go/milestone/11)|Dec 06, 2021| -|[`v1.1.5`](https://github.com/cosmos/ibc-go/releases/tag/v1.1.5)||Dec 15, 2021| -|[`v1.2.5`](https://github.com/cosmos/ibc-go/releases/tag/v1.2.5)||Dec 15, 2021| -|[`v2.0.2`](https://github.com/cosmos/ibc-go/releases/tag/v2.0.2)|[Link](https://github.com/cosmos/ibc-go/milestone/20)|Dec 15, 2021| -|[`v3.0.0-alpha1`](https://github.com/cosmos/ibc-go/releases/tag/v3.0.0-alpha1)|[Link](https://github.com/cosmos/ibc-go/milestone/12)|Dec 21, 2021| \ No newline at end of file diff --git a/docs/roadmap/roadmap.md b/docs/roadmap/roadmap.md index 0a4819b4bb1..3ddc67399c7 100644 --- a/docs/roadmap/roadmap.md +++ b/docs/roadmap/roadmap.md @@ -4,102 +4,55 @@ order: 1 # Roadmap ibc-go -_Lastest update: Dec 22, 2021_ +_Lastest update: March 31, 2022_ -This document endeavours to inform the wider IBC community about plans and priorities for work on ibc-go byt the team at Interchain GmbH. It is intended to broadly inform all users of ibc-go, including developers and operators of IBC, relayer, chain and wallet applications. +This document endeavours to inform the wider IBC community about plans and priorities for work on ibc-go by the team at Interchain GmbH. It is intended to broadly inform all users of ibc-go, including developers and operators of IBC, relayer, chain and wallet applications. This roadmap should be read as a high-level guide, rather than a commitment to schedules and deliverables. The degree of specificity is inversely proportional to the timeline. We will update this document periodically to reflect the status and plans. -The release tags and timelines are educated guesses based on the information at hand at the moment of updating this document. Since predicting the final version number (specially for minor and patch numbers) can be challenging (since we might need to release unforeseen security vulnerability patches or urgent bug fixes), we are using alphabet letters as placeholders. Once we get closer to the release date, the placeholder will be replaced with the right number. An example for clarification... - -Let's assume that the planned release schedule looks like the following: -- At time `t0`: - - The first planned patch release for the `v2.0.x` release series with release tag `v2.0.a`. The placeholder is `a` since this is the first patch release in the planning. - - The first planned minor release for the `v2.x` release series with release tag `v2.a.0`. The placeholder is `a` since this is the first minor release in the planning. -- At time `t0 + delta`: - - The second planned patch release for the `v2.0.x` release series with release tag `v2.0.b`. The placehoder is `b` since this is the next patch release of this release series after `v2.0.a` in the planning. - - The first planned patch release for the new `v2.a.x` release series with release tag `v2.a.a`. The patch version placeholder is `a` because this is the first planned patch release of the `v2.a.x` release series. - -## Q1 - 2022 - -## Features - -### Interchain accounts - -- Work on any issues that may come out of the two external audits. -- Create beta, release candidate and final releases. - -### Relayer incentivisation - -- Work on issues that may arise from internal audit. -- External audit (issues may arise that we need to work on before release). -- Create alpha, beta, release candidate and final release. - -### Align implementation with ICS02 - -- Finalize work for: [#284](https://github.com/cosmos/ibc-go/issues/284), [#285](https://github.com/cosmos/ibc-go/issues/285), [#286](https://github.com/cosmos/ibc-go/issues/286), [#594](https://github.com/cosmos/ibc-go/issues/594) and [#599](https://github.com/cosmos/ibc-go/issues/599). - -### Interchain security - -- Testnet testing of [V1](https://github.com/cosmos/gaia/blob/main/docs/interchain-security.md#v1---full-validator-set). - -### Backlog issues - -- [#545](https://github.com/cosmos/ibc-go/issues/545): Remove the `GetTransferAccount` function, since we never use the ICS20 transfer module account (every escrow address is created as a regular account). -- [#559](https://github.com/cosmos/ibc-go/issues/559): Changes needed to support the migration to SMT storage. This is basically adding a new proof spec that will be used during connection handshake with a chain that has migrated to SMT to verify that the light client of the counterparty chain uses the correct proof specs to be able to verify proofs for that chain. -- And more to be added later! - -## Release schedule - -|Release|Milestone|Date| -|-------|---------|----| -|[`v3.0.0-alpha2`](https://github.com/cosmos/ibc-go/releases/tag/v3.0.0-alpha2)||Jan 07, 2021| - -During this quarter we will also probably release versions that bump the Cosmos SDK to `v0.45` and Tendermint to `v0.35`, but at the moment of writing it is difficult to estimate when. Check our roadmap regularly for updates. - -### H2 January - -- [`v2.0.a`](https://github.com/cosmos/ibc-go/milestone/11) -- [`v3.0.0-beta1`](https://github.com/cosmos/ibc-go/milestone/12): Beta 1 release of `v3.0.0` including Interchain Accounts, an update of Golang from `v1.15` to `v1.17`, and some core improvements. This is a Go-API breaking release because of [#472](https://github.com/cosmos/ibc-go/issues/472) and [#675](https://github.com/cosmos/ibc-go/pull/675). - -### H1 February - -- [`v3.0.0-rc0`](https://github.com/cosmos/ibc-go/milestone/12): Release candidate 0 of `v3.0.0` including Interchain Accounts, an update of Golang from `v1.15` to `v1.17`, and some core improvements. This is a Go-API breaking release because of [#472](https://github.com/cosmos/ibc-go/issues/472) and [#675](https://github.com/cosmos/ibc-go/pull/675). - -### H2 February +## Q2 - 2022 -- [`v3.a.0-alpha1`](https://github.com/cosmos/ibc-go/milestone/16): Alpha release of `v3.a.0` including Relayer Incentivisation. This release will include fixes to issues that surfaced during the internal audit. +At a high level we will focus on: -### H1 March +- Finishing the implementation of [relayer incentivisation](https://github.com/orgs/cosmos/projects/7/views/8). +- Finishing the [refactoring of 02-client](https://github.com/cosmos/ibc-go/milestone/16). +- Finishing the upgrade to Cosmos SDK v0.46 and Tendermint v0.35. +- Implementing and testing the changes needed to support the [transtion to SMT storage](https://github.com/cosmos/ibc-go/milestone/21) in the Cosmos SDK. +- Desiging the implementation and scoping the engineering work for [channel upgradability](https://github.com/cosmos/ibc/blob/master/spec/core/ics-004-channel-and-packet-semantics/UPGRADES.md). +- Improving the project's documentation and writing guides for [light client](https://github.com/cosmos/ibc-go/issues/59) and middleware implementation. +- Working on [core backlog issues](https://github.com/cosmos/ibc-go/milestone/8). +- Spending time on expanding and deepening our knowledge of IBC, but also other parts of the Cosmos stack. +- And last, but not least, onboarding new members to the team. -- [`v3.0.0`](https://github.com/cosmos/ibc-go/milestone/12): Final release of `v3.0.0` including Interchain Accounts, an update of Golang from `v1.15` to `v1.17`, and some core improvements. This is a Go-API breaking release because of [#472](https://github.com/cosmos/ibc-go/issues/472) and [#675](https://github.com/cosmos/ibc-go/pull/675). -- [`v3.a.0-beta1`](https://github.com/cosmos/ibc-go/milestone/16): Beta release of `v3.a.0` including Relayer Incentivisation. This release will include fixes to issues that surfaced during the external audit. +For a detail view of each iteration's planned work, please check out our [project board](https://github.com/orgs/cosmos/projects/7). -### H2 March +### Release schedule -- [`v3.a.0-rc0`](https://github.com/cosmos/ibc-go/milestone/16): Release candiate 0 `v3.1.0` including Relayer Incentivisation. +#### **April** -## Q2 - 2022 +In the first half of the month we will probably cut: -### Features +- Alpha/beta pre-releases with the upgrade to SDK 0.46 and Tendermint v0.35. +- [Alpha](https://github.com/cosmos/ibc-go/milestone/5) pre-release with the implementation of relayer incentivisation. -> Full scope still TBD. +In the second half, and depending on the date of the final release of Cosmos SDK 0.46, we will probably cut the final release with the upgrade to SDK 0.46 and Tendermint v0.35, and also a [beta](https://github.com/cosmos/ibc-go/milestone/23) pre-release with the implementation of relayer incentivisation. -### Support for Wasm-based light clients +In the second half of the month we also plan to do a second internal audit of the implementation of relayer incentivisation, and issues will most likely will be created from the audit. Depending on the nature and type of the issues we create, those would be released in a second beta pre-release or in a [release candidate](https://github.com/cosmos/ibc-go/milestone/24). -There is an open [PR](https://github.com/cosmos/ibc-go/pull/208) that implements support for Wasm-based light clients, but it needs to be updated after the finalization of the [ICS28](https://github.com/cosmos/ibc/tree/master/spec/client/ics-008-wasm-client) specification. The PR need thorough review, more tests and potentially implementation changes. +#### **May** -## Release schedule +In the first half we will probably start cutting release candidates with relayer incentivisation and the 02-client refactor. Final release would most likely come out at the end of the month or beginning of June. -During this quarter we will also probably release versions that bump the Cosmos SDK to `v0.46` and to `v1.0`, but at the moment of writing it is difficult to estimate when. Check our roadmap regularly for updates. +#### **June** -### H1 April +We will probably cut at the end of the month or beginning of Q3 patch or minor releases on all the supported release lines with the [small features and core improvements](https://github.com/cosmos/ibc-go/milestone/8) that we work on during the quarter. -- [`v3.a.0`](https://github.com/cosmos/ibc-go/milestone/16): Final release of `v3.a.0` including Relayer Incentivisation. -- [`v4.0.0-rc0`](https://github.com/cosmos/ibc-go/milestone/16): Release candidate 0 of `v4.0.0` including the work for the issues to bring ibc-go implementation in line with ICS02 (which are Go-API breaking changes). +## Q3 - 2022 -### H2 April +We will most likely start the implementation of [channel upgradability](https://github.com/cosmos/ibc/blob/master/spec/core/ics-004-channel-and-packet-semantics/UPGRADES.md). At the end of Q2 or maybe beginning of Q3 we might also work on designing the implementation and scoping the engineering work to add support for [ordered channels that can timeout](https://github.com/cosmos/ibc/pull/636), and we could potentially work on this feature also in Q3. -- [`v4.0.0`](https://github.com/cosmos/ibc-go/milestone/16): Release candidate 0 of `v4.0.0` including the work for the issues to bring ibc-go implementation in line with ICS02 (which are Go-API breaking changes). +We will also probably do an audit of the implementation of the [CCV application](https://github.com/cosmos/interchain-security/tree/main/x/ccv) for Interchain Security. +### Release schedule +In this quarter we will make the final release to support the migration to SMT storage. \ No newline at end of file diff --git a/docs/versions b/docs/versions index 45d6f133c48..e568f9a716f 100644 --- a/docs/versions +++ b/docs/versions @@ -1,4 +1,9 @@ +release/v3.0.x v3.0.0 +release/v2.2.x v2.2.0 +release/v2.1.x v2.1.0 release/v2.0.x v2.0.0 +release/v1.4.x v1.4.0 +release/v1.3.x v1.3.0 release/v1.2.x v1.2.0 release/v1.1.x v1.1.0 main main diff --git a/go.mod b/go.mod index 28d4e3091a8..4f56c03dd9e 100644 --- a/go.mod +++ b/go.mod @@ -5,13 +5,9 @@ module github.com/cosmos/ibc-go/v3 replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 require ( - //github.com/ComposableFi/go-merkle-trees v0.0.0-20211222084341-b74bcc23b75a - //github.com/ComposableFi/go-merkle-trees v0.0.0-20220119155315-3ce250c9ec59 - github.com/ComposableFi/go-merkle-trees v0.0.0-20220505132313-e976260288cc github.com/armon/go-metrics v0.3.10 github.com/confio/ics23/go v0.7.0 - github.com/cosmos/cosmos-sdk v0.45.1 - github.com/ethereum/go-ethereum v1.10.17 + github.com/cosmos/cosmos-sdk v0.45.3 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.2 github.com/gorilla/mux v1.8.0 @@ -20,41 +16,25 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 github.com/spf13/cast v1.4.1 github.com/spf13/cobra v1.4.0 - github.com/spf13/viper v1.10.1 + github.com/spf13/viper v1.11.0 github.com/stretchr/testify v1.7.1 - github.com/tendermint/tendermint v0.34.14 - github.com/tendermint/tm-db v0.6.4 - google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa + github.com/tendermint/tendermint v0.34.19 + github.com/tendermint/tm-db v0.6.6 + google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 ) -require ( - github.com/ChainSafe/gossamer v0.6.1-0.20220406182257-98400b30ca00 - github.com/jhump/protoreflect v1.9.1-0.20210817181203-db1a327a393e // indirect - github.com/klauspost/compress v1.15.1 // indirect - golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f // indirect - golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 // indirect - golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect -) - -require ( - github.com/ChainSafe/log15 v1.0.0 - github.com/ComposableFi/go-substrate-rpc-client/v4 v4.0.1-0.20220520095549-28b7c5a4e212 -) - require ( filippo.io/edwards25519 v1.0.0-beta.2 // indirect github.com/99designs/keyring v1.1.6 // indirect - github.com/ChainSafe/chaindb v0.1.5-0.20220322154826-c0d431995732 // indirect - github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect - github.com/OneOfOne/xxhash v1.2.8 // indirect - github.com/Workiva/go-datastructures v1.0.52 // indirect + github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect + github.com/DataDog/zstd v1.4.5 // indirect + github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect github.com/btcsuite/btcd v0.22.0-beta // indirect - github.com/btcsuite/btcd/btcec/v2 v2.1.2 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.0 // indirect @@ -65,12 +45,8 @@ require ( github.com/cosmos/ledger-go v0.9.2 // indirect github.com/danieljoos/wincred v1.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deckarep/golang-set v1.8.0 // indirect - github.com/decred/base58 v1.0.3 // indirect - github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/badger/v2 v2.2007.2 // indirect github.com/dgraph-io/ristretto v0.0.3 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.0 // indirect @@ -78,12 +54,12 @@ require ( github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/gin-gonic/gin v1.7.0 // indirect - github.com/go-kit/kit v0.10.0 // indirect - github.com/go-logfmt/logfmt v0.5.0 // indirect - github.com/go-stack/stack v1.8.1 // indirect + github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/log v0.2.0 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.3 // indirect github.com/google/btree v1.0.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -93,73 +69,54 @@ require ( github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 // indirect github.com/improbable-eng/grpc-web v0.14.1 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/ipfs/go-cid v0.0.7 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // indirect - github.com/kr/pretty v0.3.0 // indirect - github.com/lib/pq v1.10.2 // indirect + github.com/klauspost/compress v1.13.6 // indirect + github.com/lib/pq v1.10.4 // indirect github.com/libp2p/go-buffer-pool v0.0.2 // indirect - github.com/magiconair/properties v1.8.5 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect + github.com/magiconair/properties v1.8.6 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect - github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect - github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect - github.com/minio/highwayhash v1.0.1 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect + github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect + github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.4.3 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.0.3 // indirect - github.com/multiformats/go-base36 v0.1.0 // indirect - github.com/multiformats/go-multiaddr v0.5.0 // indirect - github.com/multiformats/go-multibase v0.0.3 // indirect - github.com/multiformats/go-multihash v0.0.15 // indirect - github.com/multiformats/go-varint v0.0.6 // indirect - github.com/opencontainers/image-spec v1.0.2 // indirect - github.com/opencontainers/runc v1.0.3 // indirect github.com/pelletier/go-toml v1.9.4 // indirect + github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect - github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect - github.com/qdm12/gotree v0.2.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect - github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/rs/cors v1.8.2 // indirect github.com/rs/zerolog v1.23.0 // indirect github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect - github.com/spf13/afero v1.6.0 // indirect + github.com/spf13/afero v1.8.2 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.2.0 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca // indirect github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/vedhavyas/go-subkey v1.0.3 // indirect github.com/zondax/hid v0.9.0 // indirect - go.etcd.io/bbolt v1.3.5 // indirect - golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect + go.etcd.io/bbolt v1.3.6 // indirect + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect + golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect + golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect - gopkg.in/ini.v1 v1.66.2 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect nhooyr.io/websocket v1.8.6 // indirect ) - -replace github.com/ChainSafe/go-schnorrkel v1.0.0 => github.com/ChainSafe/go-schnorrkel v0.0.0-20210222182958-bd440c890782 - -replace github.com/vedhavyas/go-subkey => github.com/vedhavyas/go-subkey v1.0.2 diff --git a/go.sum b/go.sum index 6988c00251d..a8f6d150085 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,13 @@ +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.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.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= 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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= 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= @@ -17,19 +17,32 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY 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 v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= 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/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= 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/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= 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= @@ -39,7 +52,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo 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= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +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= filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= @@ -47,9 +60,9 @@ github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcI github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= @@ -65,47 +78,39 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/chaindb v0.1.5-0.20220322154826-c0d431995732 h1:dOdDfWtgfucQHXder8eSItN03JgQzY1V0BiKJgNERnE= -github.com/ChainSafe/chaindb v0.1.5-0.20220322154826-c0d431995732/go.mod h1:P01m9E6xj6Mps1rtf7SurEX9oOcy1jYEyccZQAEw9+4= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v0.0.0-20201021020641-d3c6d3118d10/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v0.0.0-20210222182958-bd440c890782 h1:lwmjzta2Xu+3rPVY/VeNQj2xfNkyih4CwyRxYg3cpRQ= -github.com/ChainSafe/go-schnorrkel v0.0.0-20210222182958-bd440c890782/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/gossamer v0.6.1-0.20220406182257-98400b30ca00 h1:eetbMPdFfK09+WYo+snwcq2VeadwT/CrrGPHtAjQrZc= -github.com/ChainSafe/gossamer v0.6.1-0.20220406182257-98400b30ca00/go.mod h1:YPRks5U+FzhTT7ajfCntyHPjQFZtH+8ED/Qr/eUT99U= -github.com/ChainSafe/log15 v1.0.0 h1:vRDVtWtVwIH5uSCBvgTTZh6FA58UBJ6+QiiypaZfBf8= -github.com/ChainSafe/log15 v1.0.0/go.mod h1:5v1+ALHtdW0NfAeeoYyKmzCAMcAeqkdhIg4uxXWIgOg= -github.com/ComposableFi/go-merkle-trees v0.0.0-20220505132313-e976260288cc h1:5tpwyiPkFooPS7cG+bOVfCwVwhf91icRgs8EmRfqUEs= -github.com/ComposableFi/go-merkle-trees v0.0.0-20220505132313-e976260288cc/go.mod h1:h5z3TSbg27qqA6h62OH5t70MAoCUUiHPrkwjm9uYjus= -github.com/ComposableFi/go-substrate-rpc-client/v4 v4.0.1-0.20220520095549-28b7c5a4e212 h1:opy+UYhvggXemLFUv5OPU1PkgfPEg1nOiPiUa4qQROw= -github.com/ComposableFi/go-substrate-rpc-client/v4 v4.0.1-0.20220520095549-28b7c5a4e212/go.mod h1:sHHq+ppGGTrfM8TmltaIOp5XBLTsnff4LjeQTi557c4= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= -github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= +github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/adlio/schema v1.1.13 h1:LeNMVg5Z1FX+Qgz8tJUijBLRdcpbFUElz+d1489On98= github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= +github.com/adlio/schema v1.3.0 h1:eSVYLxYWbm/6ReZBCkLw4Fz7uqC+ZNoPvA39bOwi52A= +github.com/adlio/schema v1.3.0/go.mod h1:51QzxkpeFs6lRY11kPye26IaFPOV+HqEj01t5aXXKfs= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -115,9 +120,7 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= @@ -128,20 +131,17 @@ github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4 github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -150,9 +150,6 @@ github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= @@ -160,9 +157,6 @@ github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13P github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= -github.com/btcsuite/btcd/btcec/v2 v2.1.2 h1:YoYoC9J0jwfukodSBMzZYUVQ8PTiYg4BnOWiJVzTmLs= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -177,11 +171,13 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -195,10 +191,10 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= 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= @@ -206,7 +202,9 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzLaqF2mCNg= @@ -214,11 +212,10 @@ github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6 h1:NmTXa/uVnDyp0TY5MKi197+3HWcnYWfnHGyaFthlnGw= github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.2.1 h1:/EeEo2EtN3umhbbgCveyjifoMYg0pS+nMMEemaYw634= +github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -232,8 +229,8 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.45.1 h1:PY79YxPea5qlRLExRnzg8/rT1Scc8GGgRs22p7DX99Q= -github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= +github.com/cosmos/cosmos-sdk v0.45.3 h1:PiVSU3IkNEDPhoxOZHk2lPnhwBBJgEYAtAR0jGXRN4g= +github.com/cosmos/cosmos-sdk v0.45.3/go.mod h1:qYm5JEr0ZlbnmoP/Q3b+dYMOliHf4ddHirpILiwZzqg= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -249,46 +246,29 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/decred/base58 v1.0.3 h1:KGZuh8d1WEMIrK0leQRM47W85KqCAdl2N+uagbctdDI= -github.com/decred/base58 v1.0.3/go.mod h1:pXP9cXCfM2sFLb2viz2FNIdeMWmZDBKG3ZBYbiSM78E= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= +github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -296,8 +276,6 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -307,7 +285,6 @@ github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= @@ -319,10 +296,10 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= -github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= @@ -331,15 +308,18 @@ github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQD github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -347,49 +327,43 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= 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-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -399,19 +373,20 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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/groupcache v0.0.0-20210331224755-41bb18bfe9da/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= @@ -444,14 +419,11 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= 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= @@ -463,7 +435,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/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.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= @@ -471,6 +445,7 @@ github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6 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/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -482,15 +457,23 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf 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/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/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/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -501,6 +484,7 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -508,7 +492,6 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= @@ -529,19 +512,28 @@ github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uM github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -551,54 +543,45 @@ github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= 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/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 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/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 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/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jhump/protoreflect v1.9.0 h1:npqHz788dryJiR/l6K/RUQAyh2SwV91+d1dnh4RjO9w= github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= -github.com/jhump/protoreflect v1.9.1-0.20210817181203-db1a327a393e h1:Yb4fEGk+GtBSNuvy5rs0ZJt/jtopc/z9azQaj3xbies= -github.com/jhump/protoreflect v1.9.1-0.20210817181203-db1a327a393e/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= @@ -617,32 +600,22 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= 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/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= @@ -650,41 +623,34 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= 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/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= @@ -692,30 +658,28 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -725,10 +689,9 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -738,29 +701,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.5.0 h1:i/JuOoVg4szYQ4YEzDGtb2h0o8M7CG/Yq6cGlcjWZpM= -github.com/multiformats/go-multiaddr v0.5.0/go.mod h1:3KAxNkUqLTJ20AAwN4XVX4kZar+bR+gh4zgbfr3SNug= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -769,12 +712,19 @@ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -786,7 +736,6 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -801,8 +750,9 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= @@ -815,12 +765,13 @@ github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xA github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= @@ -833,34 +784,33 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0= +github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= -github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -883,14 +833,13 @@ github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7q github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -906,8 +855,6 @@ github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/qdm12/gotree v0.2.0 h1:+58ltxkNLUyHtATFereAcOjBVfY6ETqRex8XK90Fb/c= -github.com/qdm12/gotree v0.2.0/go.mod h1:1SdFaqKZuI46U1apbXIf25pDMNnrPuYLEqMF/qL4lY4= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -917,14 +864,10 @@ github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzy github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= @@ -937,18 +880,15 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= +github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= @@ -966,16 +906,17 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= +github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -986,22 +927,24 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn 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.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= +github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44= +github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1013,9 +956,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= @@ -1024,24 +966,25 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.14 h1:GCXmlS8Bqd2Ix3TQCpwYLUNHe+Y+QyJsm5YE+S/FkPo= github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= +github.com/tendermint/tendermint v0.34.19 h1:y0P1qI5wSa9IRuhKnTDA6IUcOrLi1hXJuALR+R7HFEk= +github.com/tendermint/tendermint v0.34.19/go.mod h1:R5+wgIwSxMdKQcmOaeudL0Cjkr3HDkhpcdum6VeU3R4= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= +github.com/tendermint/tm-db v0.6.6 h1:EzhaOfR0bdKyATqcd5PNeyeq8r+V4bRPHBfyFdD9kGM= +github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -1049,20 +992,12 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vedhavyas/go-subkey v1.0.2 h1:EW6U+1us4k38AtrBfFOEZTpW9FcF/cIUOxw/pHbNNQ0= -github.com/vedhavyas/go-subkey v1.0.2/go.mod h1:T9SEs84XZxRULMZLWtIl48s9rBNE7h6GnkqTgJR8+MU= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1074,12 +1009,20 @@ github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1094,14 +1037,17 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1110,24 +1056,28 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1171,6 +1121,7 @@ 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/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -1187,6 +1138,7 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn 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-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1212,24 +1164,31 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 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-20201110031124-69a78807bb2b/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-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211208012354-db4efeb81f4b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -1241,8 +1200,15 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= 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= @@ -1277,23 +1243,25 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/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= @@ -1311,45 +1279,58 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/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-20201221093633-bc327ba9c2f0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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= @@ -1364,8 +1345,8 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb 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/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1383,6 +1364,7 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw 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-20190907020128-2ca718005c18/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-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1396,7 +1378,6 @@ golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtn 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-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/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= @@ -1420,25 +1401,28 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc 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-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/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/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= @@ -1463,7 +1447,21 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1479,7 +1477,6 @@ google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRn 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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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= @@ -1487,7 +1484,6 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx 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-20200108215221-bd8f9a0ef82f/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= @@ -1514,16 +1510,47 @@ google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6D 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-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1551,11 +1578,18 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1576,18 +1610,17 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks 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-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1617,7 +1650,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh 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= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -1625,4 +1657,5 @@ rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/modules/apps/27-interchain-accounts/controller/ibc_module.go b/modules/apps/27-interchain-accounts/controller/ibc_module.go index c00c9f5d1c2..325ec70959b 100644 --- a/modules/apps/27-interchain-accounts/controller/ibc_module.go +++ b/modules/apps/27-interchain-accounts/controller/ibc_module.go @@ -163,3 +163,8 @@ func (im IBCModule) OnTimeoutPacket( return im.app.OnTimeoutPacket(ctx, packet, relayer) } + +// GetAppVersion returns the interchain accounts metadata. +func (im IBCModule) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return im.keeper.GetAppVersion(ctx, portID, channelID) +} diff --git a/modules/apps/27-interchain-accounts/controller/ibc_module_test.go b/modules/apps/27-interchain-accounts/controller/ibc_module_test.go index c0163e954e1..608996515c1 100644 --- a/modules/apps/27-interchain-accounts/controller/ibc_module_test.go +++ b/modules/apps/27-interchain-accounts/controller/ibc_module_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/tendermint/tendermint/crypto" + icacontroller "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/controller" "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/controller/types" icatypes "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/types" clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" @@ -702,3 +703,23 @@ func (suite *InterchainAccountsTestSuite) TestSingleHostMultipleControllers() { }) } } + +func (suite *InterchainAccountsTestSuite) TestGetAppVersion() { + path := NewICAPath(suite.chainA, suite.chainB) + suite.coordinator.SetupConnections(path) + + err := SetupICAPath(path, TestOwnerAddress) + suite.Require().NoError(err) + + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + controllerModule := cbs.(icacontroller.IBCModule) + + appVersion, found := controllerModule.GetAppVersion(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) + suite.Require().True(found) + suite.Require().Equal(path.EndpointA.ChannelConfig.Version, appVersion) +} diff --git a/modules/apps/27-interchain-accounts/controller/keeper/account.go b/modules/apps/27-interchain-accounts/controller/keeper/account.go index dd87348876e..03eeef69f1f 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/account.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/account.go @@ -10,11 +10,10 @@ import ( ) // RegisterInterchainAccount is the entry point to registering an interchain account. -// It generates a new port identifier using the owner address, connection identifier, -// and counterparty connection identifier. It will bind to the port identifier and -// call 04-channel 'ChanOpenInit'. An error is returned if the port identifier is -// already in use. Gaining access to interchain accounts whose channels have closed -// cannot be done with this function. A regular MsgChanOpenInit must be used. +// It generates a new port identifier using the owner address. It will bind to the +// port identifier and call 04-channel 'ChanOpenInit'. An error is returned if the port +// identifier is already in use. Gaining access to interchain accounts whose channels +// have closed cannot be done with this function. A regular MsgChanOpenInit must be used. func (k Keeper) RegisterInterchainAccount(ctx sdk.Context, connectionID, owner string) error { portID, err := icatypes.NewControllerPortID(owner) if err != nil { diff --git a/modules/apps/27-interchain-accounts/controller/keeper/keeper.go b/modules/apps/27-interchain-accounts/controller/keeper/keeper.go index 87af9ae9c6f..86099b954bd 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/keeper.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/keeper.go @@ -102,6 +102,11 @@ func (k Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability return k.scopedKeeper.ClaimCapability(ctx, cap, name) } +// GetAppVersion calls the ICS4Wrapper GetAppVersion function. +func (k Keeper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return k.ics4Wrapper.GetAppVersion(ctx, portID, channelID) +} + // GetActiveChannelID retrieves the active channelID from the store, keyed by the provided connectionID and portID func (k Keeper) GetActiveChannelID(ctx sdk.Context, connectionID, portID string) (string, bool) { store := ctx.KVStore(k.storeKey) diff --git a/modules/apps/27-interchain-accounts/controller/keeper/params.go b/modules/apps/27-interchain-accounts/controller/keeper/params.go index d199b8b554d..dce72c0c491 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/params.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/params.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/controller/types" ) -// IsControllerEnabled retrieves the host enabled boolean from the paramstore. +// IsControllerEnabled retrieves the controller enabled boolean from the paramstore. // True is returned if the controller submodule is enabled. func (k Keeper) IsControllerEnabled(ctx sdk.Context) bool { var res bool @@ -14,12 +14,12 @@ func (k Keeper) IsControllerEnabled(ctx sdk.Context) bool { return res } -// GetParams returns the total set of the host submodule parameters. +// GetParams returns the total set of the controller submodule parameters. func (k Keeper) GetParams(ctx sdk.Context) types.Params { return types.NewParams(k.IsControllerEnabled(ctx)) } -// SetParams sets the total set of the host submodule parameters. +// SetParams sets the total set of the controller submodule parameters. func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { k.paramSpace.SetParamSet(ctx, ¶ms) } diff --git a/modules/apps/27-interchain-accounts/types/expected_keepers.go b/modules/apps/27-interchain-accounts/types/expected_keepers.go index 4c6a1708e43..8fb0b743cda 100644 --- a/modules/apps/27-interchain-accounts/types/expected_keepers.go +++ b/modules/apps/27-interchain-accounts/types/expected_keepers.go @@ -21,6 +21,7 @@ type AccountKeeper interface { // ICS4Wrapper defines the expected ICS4Wrapper for middleware type ICS4Wrapper interface { SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error + GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) } // ChannelKeeper defines the expected IBC channel keeper diff --git a/modules/apps/29-fee/client/cli/cli.go b/modules/apps/29-fee/client/cli/cli.go new file mode 100644 index 00000000000..a0141c20f9a --- /dev/null +++ b/modules/apps/29-fee/client/cli/cli.go @@ -0,0 +1,48 @@ +package cli + +import ( + "github.com/cosmos/cosmos-sdk/client" + "github.com/spf13/cobra" +) + +// GetQueryCmd returns the query commands for 29-fee +func GetQueryCmd() *cobra.Command { + queryCmd := &cobra.Command{ + Use: "ibc-fee", + Short: "IBC relayer incentivization query subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + } + + queryCmd.AddCommand( + GetCmdIncentivizedPacket(), + GetCmdIncentivizedPackets(), + GetCmdTotalRecvFees(), + GetCmdTotalAckFees(), + GetCmdTotalTimeoutFees(), + GetCmdIncentivizedPacketsForChannel(), + GetCmdCounterpartyAddress(), + GetCmdFeeEnabledChannel(), + GetCmdFeeEnabledChannels(), + ) + + return queryCmd +} + +// NewTxCmd returns the transaction commands for 29-fee +func NewTxCmd() *cobra.Command { + txCmd := &cobra.Command{ + Use: "ibc-fee", + Short: "IBC relayer incentivization transaction subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + txCmd.AddCommand( + NewPayPacketFeeAsyncTxCmd(), + NewRegisterCounterpartyAddress(), + ) + + return txCmd +} diff --git a/modules/apps/29-fee/client/cli/query.go b/modules/apps/29-fee/client/cli/query.go new file mode 100644 index 00000000000..a183c8f89d3 --- /dev/null +++ b/modules/apps/29-fee/client/cli/query.go @@ -0,0 +1,395 @@ +package cli + +import ( + "fmt" + "strconv" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/version" + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + "github.com/spf13/cobra" +) + +// GetCmdIncentivizedPacket returns the unrelayed incentivized packet for a given packetID +func GetCmdIncentivizedPacket() *cobra.Command { + cmd := &cobra.Command{ + Use: "packet [port-id] [channel-id] [sequence]", + Short: "Query for an unrelayed incentivized packet by port-id, channel-id and packet sequence.", + Long: "Query for an unrelayed incentivized packet by port-id, channel-id and packet sequence.", + Args: cobra.ExactArgs(3), + Example: fmt.Sprintf("%s query ibc-fee packet-by-id", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + seq, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return err + } + + packetID := channeltypes.PacketId{ + PortId: args[0], + ChannelId: args[1], + Sequence: seq, + } + + req := &types.QueryIncentivizedPacketRequest{ + PacketId: packetID, + QueryHeight: uint64(clientCtx.Height), + } + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.IncentivizedPacket(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdIncentivizedPackets returns all of the unrelayed incentivized packets +func GetCmdIncentivizedPackets() *cobra.Command { + cmd := &cobra.Command{ + Use: "packets", + Short: "Query for all of the unrelayed incentivized packets and associated fees across all channels.", + Long: "Query for all of the unrelayed incentivized packets and associated fees across all channels.", + Args: cobra.NoArgs, + Example: fmt.Sprintf("%s query ibc-fee packets", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + req := &types.QueryIncentivizedPacketsRequest{ + Pagination: pageReq, + QueryHeight: uint64(clientCtx.Height), + } + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.IncentivizedPackets(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "packets") + + return cmd +} + +// GetCmdTotalRecvFees returns the command handler for the Query/TotalRecvFees rpc. +func GetCmdTotalRecvFees() *cobra.Command { + cmd := &cobra.Command{ + Use: "total-recv-fees [port-id] [channel-id] [sequence]", + Short: "Query the total receive fees for a packet", + Long: "Query the total receive fees for a packet", + Args: cobra.ExactArgs(3), + Example: fmt.Sprintf("%s query ibc-fee total-recv-fees transfer channel-5 100", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + portID, channelID := args[0], args[1] + seq, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return err + } + + packetID := channeltypes.NewPacketId(portID, channelID, seq) + + if err := packetID.Validate(); err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryTotalRecvFeesRequest{ + PacketId: packetID, + } + + res, err := queryClient.TotalRecvFees(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdTotalAckFees returns the command handler for the Query/TotalAckFees rpc. +func GetCmdTotalAckFees() *cobra.Command { + cmd := &cobra.Command{ + Use: "total-ack-fees [port-id] [channel-id] [sequence]", + Short: "Query the total acknowledgement fees for a packet", + Long: "Query the total acknowledgement fees for a packet", + Args: cobra.ExactArgs(3), + Example: fmt.Sprintf("%s query ibc-fee total-ack-fees transfer channel-5 100", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + portID, channelID := args[0], args[1] + seq, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return err + } + + packetID := channeltypes.NewPacketId(portID, channelID, seq) + + if err := packetID.Validate(); err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryTotalAckFeesRequest{ + PacketId: packetID, + } + + res, err := queryClient.TotalAckFees(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdTotalTimeoutFees returns the command handler for the Query/TotalTimeoutFees rpc. +func GetCmdTotalTimeoutFees() *cobra.Command { + cmd := &cobra.Command{ + Use: "total-timeout-fees [port-id] [channel-id] [sequence]", + Short: "Query the total timeout fees for a packet", + Long: "Query the total timeout fees for a packet", + Args: cobra.ExactArgs(3), + Example: fmt.Sprintf("%s query ibc-fee total-timeout-fees transfer channel-5 100", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + portID, channelID := args[0], args[1] + seq, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return err + } + + packetID := channeltypes.NewPacketId(portID, channelID, seq) + + if err := packetID.Validate(); err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryTotalTimeoutFeesRequest{ + PacketId: packetID, + } + + res, err := queryClient.TotalTimeoutFees(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdCounterpartyAddress returns the command handler for the Query/CounterpartyAddress rpc. +func GetCmdCounterpartyAddress() *cobra.Command { + cmd := &cobra.Command{ + Use: "counterparty-address [channel-id] [address]", + Short: "Query the relayer counterparty address on a given channel", + Long: "Query the relayer counterparty address on a given channel", + Args: cobra.ExactArgs(2), + Example: fmt.Sprintf("%s query ibc-fee counterparty-address channel-5 cosmos1layxcsmyye0dc0har9sdfzwckaz8sjwlfsj8zs", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + if _, err := sdk.AccAddressFromBech32(args[1]); err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryCounterpartyAddressRequest{ + ChannelId: args[0], + RelayerAddress: args[1], + } + + res, err := queryClient.CounterpartyAddress(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + return cmd +} + +// GetCmdFeeEnabledChannels returns the command handler for the Query/FeeEnabledChannels rpc. +func GetCmdFeeEnabledChannels() *cobra.Command { + cmd := &cobra.Command{ + Use: "channels", + Short: "Query the ibc-fee enabled channels", + Long: "Query the ibc-fee enabled channels", + Args: cobra.NoArgs, + Example: fmt.Sprintf("%s query ibc-fee channels", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + req := &types.QueryFeeEnabledChannelsRequest{ + Pagination: pageReq, + QueryHeight: uint64(clientCtx.Height), + } + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.FeeEnabledChannels(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "channels") + + return cmd +} + +// GetCmdFeeEnabledChannel returns the command handler for the Query/FeeEnabledChannel rpc. +func GetCmdFeeEnabledChannel() *cobra.Command { + cmd := &cobra.Command{ + Use: "channel [port-id] [channel-id]", + Short: "Query the ibc-fee enabled status of a channel", + Long: "Query the ibc-fee enabled status of a channel", + Args: cobra.ExactArgs(2), + Example: fmt.Sprintf("%s query ibc-fee channel transfer channel-6", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + req := &types.QueryFeeEnabledChannelRequest{ + PortId: args[0], + ChannelId: args[1], + } + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.FeeEnabledChannel(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdIncentivizedPacketsForChannel returns all of the unrelayed incentivized packets on a given channel +func GetCmdIncentivizedPacketsForChannel() *cobra.Command { + cmd := &cobra.Command{ + Use: "packets-for-channel [port-id] [channel-id]", + Short: "Query for all of the unrelayed incentivized packets on a given channel", + Long: "Query for all of the unrelayed incentivized packets on a given channel. These are packets that have not yet been relayed.", + Args: cobra.ExactArgs(2), + Example: fmt.Sprintf("%s query ibc-fee packets-for-channel", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + req := &types.QueryIncentivizedPacketsForChannelRequest{ + Pagination: pageReq, + PortId: args[0], + ChannelId: args[1], + QueryHeight: uint64(clientCtx.Height), + } + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.IncentivizedPacketsForChannel(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "packets-for-channel") + + return cmd +} diff --git a/modules/apps/29-fee/client/cli/tx.go b/modules/apps/29-fee/client/cli/tx.go new file mode 100644 index 00000000000..f1f858b60cd --- /dev/null +++ b/modules/apps/29-fee/client/cli/tx.go @@ -0,0 +1,124 @@ +package cli + +import ( + "fmt" + "strconv" + "strings" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/version" + "github.com/spf13/cobra" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" +) + +const ( + flagRecvFee = "recv-fee" + flagAckFee = "ack-fee" + flagTimeoutFee = "timeout-fee" +) + +// NewPayPacketFeeAsyncTxCmd returns the command to create a MsgPayPacketFeeAsync +func NewPayPacketFeeAsyncTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "pay-packet-fee [src-port] [src-channel] [sequence]", + Short: "Pay a fee to incentivize an existing IBC packet", + Long: strings.TrimSpace(`Pay a fee to incentivize an existing IBC packet.`), + Example: fmt.Sprintf("%s tx ibc-fee pay-packet-fee transfer channel-0 1 --recv-fee 10stake --ack-fee 10stake --timeout-fee 10stake", version.AppName), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + // NOTE: specifying non-nil relayers is currently unsupported + var relayers []string + + sender := clientCtx.GetFromAddress().String() + seq, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return err + } + + packetID := channeltypes.NewPacketId(args[0], args[1], seq) + + recvFeeStr, err := cmd.Flags().GetString(flagRecvFee) + if err != nil { + return err + } + + recvFee, err := sdk.ParseCoinsNormalized(recvFeeStr) + if err != nil { + return err + } + + ackFeeStr, err := cmd.Flags().GetString(flagAckFee) + if err != nil { + return err + } + + ackFee, err := sdk.ParseCoinsNormalized(ackFeeStr) + if err != nil { + return err + } + + timeoutFeeStr, err := cmd.Flags().GetString(flagTimeoutFee) + if err != nil { + return err + } + + timeoutFee, err := sdk.ParseCoinsNormalized(timeoutFeeStr) + if err != nil { + return err + } + + fee := types.Fee{ + RecvFee: recvFee, + AckFee: ackFee, + TimeoutFee: timeoutFee, + } + + packetFee := types.NewPacketFee(fee, sender, relayers) + msg := types.NewMsgPayPacketFeeAsync(packetID, packetFee) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().String(flagRecvFee, "", "Fee paid to a relayer for relaying a packet receive.") + cmd.Flags().String(flagAckFee, "", "Fee paid to a relayer for relaying a packet acknowledgement.") + cmd.Flags().String(flagTimeoutFee, "", "Fee paid to a relayer for relaying a packet timeout.") + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// NewRegisterCounterpartyAddress returns the command to create a MsgRegisterCounterpartyAddress +func NewRegisterCounterpartyAddress() *cobra.Command { + cmd := &cobra.Command{ + Use: "register-counterparty [address] [counterparty-address] [channel-id]", + Short: "Register a counterparty relayer address on a given channel.", + Long: strings.TrimSpace(`Register a counterparty relayer address on a given channel.`), + Example: fmt.Sprintf("%s tx ibc-fee register-counterparty cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh osmo1v5y0tz01llxzf4c2afml8s3awue0ymju22wxx2 channel-0", version.AppName), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgRegisterCounterpartyAddress(args[0], args[1], args[2]) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/modules/apps/29-fee/fee_test.go b/modules/apps/29-fee/fee_test.go new file mode 100644 index 00000000000..d2445adef22 --- /dev/null +++ b/modules/apps/29-fee/fee_test.go @@ -0,0 +1,73 @@ +package fee_test + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibcmock "github.com/cosmos/ibc-go/v3/testing/mock" +) + +type FeeTestSuite struct { + suite.Suite + + coordinator *ibctesting.Coordinator + + chainA *ibctesting.TestChain + chainB *ibctesting.TestChain + chainC *ibctesting.TestChain + + path *ibctesting.Path + pathAToC *ibctesting.Path +} + +func (suite *FeeTestSuite) SetupTest() { + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 3) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(2)) + suite.chainC = suite.coordinator.GetChain(ibctesting.GetChainID(3)) + + path := ibctesting.NewPath(suite.chainA, suite.chainB) + mockFeeVersion := string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})) + path.EndpointA.ChannelConfig.Version = mockFeeVersion + path.EndpointB.ChannelConfig.Version = mockFeeVersion + path.EndpointA.ChannelConfig.PortID = ibctesting.MockFeePort + path.EndpointB.ChannelConfig.PortID = ibctesting.MockFeePort + suite.path = path + + path = ibctesting.NewPath(suite.chainA, suite.chainC) + path.EndpointA.ChannelConfig.Version = mockFeeVersion + path.EndpointB.ChannelConfig.Version = mockFeeVersion + path.EndpointA.ChannelConfig.PortID = ibctesting.MockFeePort + path.EndpointB.ChannelConfig.PortID = ibctesting.MockFeePort + suite.pathAToC = path +} + +func TestIBCFeeTestSuite(t *testing.T) { + suite.Run(t, new(FeeTestSuite)) +} + +func (suite *FeeTestSuite) CreateMockPacket() channeltypes.Packet { + return channeltypes.NewPacket( + ibcmock.MockPacketData, + suite.chainA.SenderAccount.GetSequence(), + suite.path.EndpointA.ChannelConfig.PortID, + suite.path.EndpointA.ChannelID, + suite.path.EndpointB.ChannelConfig.PortID, + suite.path.EndpointB.ChannelID, + clienttypes.NewHeight(0, 100), + 0, + ) +} + +// helper function +func lockFeeModule(chain *ibctesting.TestChain) { + ctx := chain.GetContext() + storeKey := chain.GetSimApp().GetKey(types.ModuleName) + store := ctx.KVStore(storeKey) + store.Set(types.KeyLocked(), []byte{1}) +} diff --git a/modules/apps/29-fee/ibc_module.go b/modules/apps/29-fee/ibc_module.go new file mode 100644 index 00000000000..6ed9faa1f34 --- /dev/null +++ b/modules/apps/29-fee/ibc_module.go @@ -0,0 +1,274 @@ +package fee + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/keeper" + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v3/modules/core/exported" +) + +// IBCModule implements the ICS26 callbacks for the fee middleware given the fee keeper and the underlying application. +type IBCModule struct { + keeper keeper.Keeper + app porttypes.IBCModule +} + +// NewIBCModule creates a new IBCModule given the keeper and underlying application +func NewIBCModule(k keeper.Keeper, app porttypes.IBCModule) IBCModule { + return IBCModule{ + keeper: k, + app: app, + } +} + +// OnChanOpenInit implements the IBCModule interface +func (im IBCModule) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) error { + var versionMetadata types.Metadata + if err := types.ModuleCdc.UnmarshalJSON([]byte(version), &versionMetadata); err != nil { + // Since it is valid for fee version to not be specified, the above middleware version may be for a middleware + // lower down in the stack. Thus, if it is not a fee version we pass the entire version string onto the underlying + // application. + return im.app.OnChanOpenInit(ctx, order, connectionHops, portID, channelID, + chanCap, counterparty, version) + } + + if versionMetadata.FeeVersion != types.Version { + return sdkerrors.Wrapf(types.ErrInvalidVersion, "expected %s, got %s", types.Version, versionMetadata.FeeVersion) + } + + im.keeper.SetFeeEnabled(ctx, portID, channelID) + + // call underlying app's OnChanOpenInit callback with the appVersion + return im.app.OnChanOpenInit(ctx, order, connectionHops, portID, channelID, + chanCap, counterparty, versionMetadata.AppVersion) +} + +// OnChanOpenTry implements the IBCModule interface +// If the channel is not fee enabled the underlying application version will be returned +// If the channel is fee enabled we merge the underlying application version with the ics29 version +func (im IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + var versionMetadata types.Metadata + if err := types.ModuleCdc.UnmarshalJSON([]byte(counterpartyVersion), &versionMetadata); err != nil { + // Since it is valid for fee version to not be specified, the above middleware version may be for a middleware + // lower down in the stack. Thus, if it is not a fee version we pass the entire version string onto the underlying + // application. + return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, chanCap, counterparty, counterpartyVersion) + } + + if versionMetadata.FeeVersion != types.Version { + return "", sdkerrors.Wrapf(types.ErrInvalidVersion, "expected %s, got %s", types.Version, versionMetadata.FeeVersion) + } + + im.keeper.SetFeeEnabled(ctx, portID, channelID) + + // call underlying app's OnChanOpenTry callback with the app versions + appVersion, err := im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, chanCap, counterparty, versionMetadata.AppVersion) + if err != nil { + return "", err + } + + versionMetadata.AppVersion = appVersion + + versionBytes, err := types.ModuleCdc.MarshalJSON(&versionMetadata) + if err != nil { + return "", err + } + + return string(versionBytes), nil +} + +// OnChanOpenAck implements the IBCModule interface +func (im IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyChannelID string, + counterpartyVersion string, +) error { + // If handshake was initialized with fee enabled it must complete with fee enabled. + // If handshake was initialized with fee disabled it must complete with fee disabled. + if im.keeper.IsFeeEnabled(ctx, portID, channelID) { + var versionMetadata types.Metadata + if err := types.ModuleCdc.UnmarshalJSON([]byte(counterpartyVersion), &versionMetadata); err != nil { + return sdkerrors.Wrap(types.ErrInvalidVersion, "failed to unmarshal ICS29 counterparty version metadata") + } + + if versionMetadata.FeeVersion != types.Version { + return sdkerrors.Wrapf(types.ErrInvalidVersion, "expected counterparty fee version: %s, got: %s", types.Version, versionMetadata.FeeVersion) + } + + // call underlying app's OnChanOpenAck callback with the counterparty app version. + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, versionMetadata.AppVersion) + } + + // call underlying app's OnChanOpenAck callback with the counterparty app version. + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) +} + +// OnChanOpenConfirm implements the IBCModule interface +func (im IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // call underlying app's OnChanOpenConfirm callback. + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit implements the IBCModule interface +func (im IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + if err := im.app.OnChanCloseInit(ctx, portID, channelID); err != nil { + return err + } + + if err := im.keeper.RefundFeesOnChannelClosure(ctx, portID, channelID); err != nil { + return err + } + + return nil +} + +// OnChanCloseConfirm implements the IBCModule interface +func (im IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + if err := im.app.OnChanCloseConfirm(ctx, portID, channelID); err != nil { + return err + } + + if err := im.keeper.RefundFeesOnChannelClosure(ctx, portID, channelID); err != nil { + return err + } + + return nil +} + +// OnRecvPacket implements the IBCModule interface. +// If fees are not enabled, this callback will default to the ibc-core packet callback +func (im IBCModule) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) exported.Acknowledgement { + if !im.keeper.IsFeeEnabled(ctx, packet.DestinationPort, packet.DestinationChannel) { + return im.app.OnRecvPacket(ctx, packet, relayer) + } + + ack := im.app.OnRecvPacket(ctx, packet, relayer) + + // incase of async aknowledgement (ack == nil) store the relayer address for use later during async WriteAcknowledgement + if ack == nil { + im.keeper.SetRelayerAddressForAsyncAck(ctx, channeltypes.NewPacketId(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()), relayer.String()) + return nil + } + + // if forwardRelayer is not found we refund recv_fee + forwardRelayer, _ := im.keeper.GetCounterpartyAddress(ctx, relayer.String(), packet.GetDestChannel()) + + return types.NewIncentivizedAcknowledgement(forwardRelayer, ack.Acknowledgement(), ack.Success()) +} + +// OnAcknowledgementPacket implements the IBCModule interface +// If fees are not enabled, this callback will default to the ibc-core packet callback +func (im IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + if !im.keeper.IsFeeEnabled(ctx, packet.SourcePort, packet.SourceChannel) { + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) + } + + ack := new(types.IncentivizedAcknowledgement) + if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, ack); err != nil { + return sdkerrors.Wrapf(err, "cannot unmarshal ICS-29 incentivized packet acknowledgement: %v", ack) + } + + if im.keeper.IsLocked(ctx) { + // if the fee keeper is locked then fee logic should be skipped + // this may occur in the presence of a severe bug which leads to invalid state + // the fee keeper will be unlocked after manual intervention + // the acknowledgement has been unmarshalled into an ics29 acknowledgement + // since the counterparty is still sending incentivized acknowledgements + // for fee enabled channels + // + // Please see ADR 004 for more information. + return im.app.OnAcknowledgementPacket(ctx, packet, ack.Result, relayer) + } + + packetID := channeltypes.NewPacketId(packet.SourcePort, packet.SourceChannel, packet.Sequence) + feesInEscrow, found := im.keeper.GetFeesInEscrow(ctx, packetID) + if found { + im.keeper.DistributePacketFeesOnAcknowledgement(ctx, ack.ForwardRelayerAddress, relayer, feesInEscrow.PacketFees) + + // removes the fees from the store as fees are now paid + im.keeper.DeleteFeesInEscrow(ctx, packetID) + } + + // call underlying callback + return im.app.OnAcknowledgementPacket(ctx, packet, ack.Result, relayer) +} + +// OnTimeoutPacket implements the IBCModule interface +// If fees are not enabled, this callback will default to the ibc-core packet callback +func (im IBCModule) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + // if the fee keeper is locked then fee logic should be skipped + // this may occur in the presence of a severe bug which leads to invalid state + // the fee keeper will be unlocked after manual intervention + // + // Please see ADR 004 for more information. + if !im.keeper.IsFeeEnabled(ctx, packet.SourcePort, packet.SourceChannel) || im.keeper.IsLocked(ctx) { + return im.app.OnTimeoutPacket(ctx, packet, relayer) + } + + packetID := channeltypes.NewPacketId(packet.SourcePort, packet.SourceChannel, packet.Sequence) + feesInEscrow, found := im.keeper.GetFeesInEscrow(ctx, packetID) + if found { + im.keeper.DistributePacketFeesOnTimeout(ctx, relayer, feesInEscrow.PacketFees) + + // removes the fee from the store as fee is now paid + im.keeper.DeleteFeesInEscrow(ctx, packetID) + } + + // call underlying callback + return im.app.OnTimeoutPacket(ctx, packet, relayer) +} + +// GetAppVersion returns the application version of the underlying application +func (im IBCModule) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return im.keeper.GetAppVersion(ctx, portID, channelID) +} diff --git a/modules/apps/29-fee/ibc_module_test.go b/modules/apps/29-fee/ibc_module_test.go new file mode 100644 index 00000000000..3f5cf64635a --- /dev/null +++ b/modules/apps/29-fee/ibc_module_test.go @@ -0,0 +1,912 @@ +package fee_test + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + fee "github.com/cosmos/ibc-go/v3/modules/apps/29-fee" + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + transfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v3/modules/core/24-host" + "github.com/cosmos/ibc-go/v3/modules/core/exported" + ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibcmock "github.com/cosmos/ibc-go/v3/testing/mock" +) + +var ( + defaultRecvFee = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(100)}} + defaultAckFee = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(200)}} + defaultTimeoutFee = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(300)}} +) + +// Tests OnChanOpenInit on ChainA +func (suite *FeeTestSuite) TestOnChanOpenInit() { + testCases := []struct { + name string + version string + expPass bool + }{ + { + "success - valid fee middleware and mock version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})), + true, + }, + { + "success - fee version not included, only perform mock logic", + ibcmock.Version, + true, + }, + { + "invalid fee middleware version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: "invalid-ics29-1", AppVersion: ibcmock.Version})), + false, + }, + { + "invalid mock version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: "invalid-mock-version"})), + false, + }, + { + "mock version not wrapped", + types.Version, + false, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + // reset suite + suite.SetupTest() + suite.coordinator.SetupConnections(suite.path) + + // setup mock callback + suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnChanOpenInit = func(ctx sdk.Context, order channeltypes.Order, connectionHops []string, + portID, channelID string, chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, version string, + ) error { + if version != ibcmock.Version { + return fmt.Errorf("incorrect mock version") + } + return nil + } + + suite.path.EndpointA.ChannelID = ibctesting.FirstChannelID + + counterparty := channeltypes.NewCounterparty(suite.path.EndpointB.ChannelConfig.PortID, suite.path.EndpointB.ChannelID) + channel := &channeltypes.Channel{ + State: channeltypes.INIT, + Ordering: channeltypes.UNORDERED, + Counterparty: counterparty, + ConnectionHops: []string{suite.path.EndpointA.ConnectionID}, + Version: tc.version, + } + + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + chanCap, err := suite.chainA.App.GetScopedIBCKeeper().NewCapability(suite.chainA.GetContext(), host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + err = cbs.OnChanOpenInit(suite.chainA.GetContext(), channel.Ordering, channel.GetConnectionHops(), + suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, chanCap, counterparty, channel.Version) + + if tc.expPass { + suite.Require().NoError(err, "unexpected error from version: %s", tc.version) + } else { + suite.Require().Error(err, "error not returned for version: %s", tc.version) + } + }) + } +} + +// Tests OnChanOpenTry on ChainA +func (suite *FeeTestSuite) TestOnChanOpenTry() { + testCases := []struct { + name string + cpVersion string + crossing bool + expPass bool + }{ + { + "success - valid fee middleware version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})), + false, + true, + }, + { + "success - valid mock version", + ibcmock.Version, + false, + true, + }, + { + "success - crossing hellos: valid fee middleware", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})), + true, + true, + }, + { + "invalid fee middleware version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: "invalid-ics29-1", AppVersion: ibcmock.Version})), + false, + false, + }, + { + "invalid mock version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: "invalid-mock-version"})), + false, + false, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + // reset suite + suite.SetupTest() + suite.coordinator.SetupConnections(suite.path) + suite.path.EndpointB.ChanOpenInit() + + // setup mock callback + suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnChanOpenTry = func(ctx sdk.Context, order channeltypes.Order, connectionHops []string, + portID, channelID string, chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, counterpartyVersion string, + ) (string, error) { + if counterpartyVersion != ibcmock.Version { + return "", fmt.Errorf("incorrect mock version") + } + return ibcmock.Version, nil + } + + var ( + chanCap *capabilitytypes.Capability + ok bool + err error + ) + if tc.crossing { + suite.path.EndpointA.ChanOpenInit() + chanCap, ok = suite.chainA.GetSimApp().ScopedFeeMockKeeper.GetCapability(suite.chainA.GetContext(), host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) + suite.Require().True(ok) + } else { + chanCap, err = suite.chainA.App.GetScopedIBCKeeper().NewCapability(suite.chainA.GetContext(), host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) + suite.Require().NoError(err) + } + + suite.path.EndpointA.ChannelID = ibctesting.FirstChannelID + + counterparty := channeltypes.NewCounterparty(suite.path.EndpointB.ChannelConfig.PortID, suite.path.EndpointB.ChannelID) + channel := &channeltypes.Channel{ + State: channeltypes.INIT, + Ordering: channeltypes.UNORDERED, + Counterparty: counterparty, + ConnectionHops: []string{suite.path.EndpointA.ConnectionID}, + Version: tc.cpVersion, + } + + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + _, err = cbs.OnChanOpenTry(suite.chainA.GetContext(), channel.Ordering, channel.GetConnectionHops(), + suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, chanCap, counterparty, tc.cpVersion) + + if tc.expPass { + suite.Require().NoError(err) + } else { + suite.Require().Error(err) + } + }) + } +} + +// Tests OnChanOpenAck on ChainA +func (suite *FeeTestSuite) TestOnChanOpenAck() { + testCases := []struct { + name string + cpVersion string + malleate func(suite *FeeTestSuite) + expPass bool + }{ + { + "success", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})), + func(suite *FeeTestSuite) {}, + true, + }, + { + "invalid fee version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: "invalid-ics29-1", AppVersion: ibcmock.Version})), + func(suite *FeeTestSuite) {}, + false, + }, + { + "invalid mock version", + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: "invalid-mock-version"})), + func(suite *FeeTestSuite) {}, + false, + }, + { + "invalid version fails to unmarshal metadata", + "invalid-version", + func(suite *FeeTestSuite) {}, + false, + }, + { + "previous INIT set without fee, however counterparty set fee version", // note this can only happen with incompetent or malicious counterparty chain + string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})), + func(suite *FeeTestSuite) { + // do the first steps without fee version, then pass the fee version as counterparty version in ChanOpenACK + suite.path.EndpointA.ChannelConfig.Version = ibcmock.Version + suite.path.EndpointB.ChannelConfig.Version = ibcmock.Version + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.SetupConnections(suite.path) + + // setup mock callback + suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnChanOpenAck = func( + ctx sdk.Context, portID, channelID string, counterpartyChannelID string, counterpartyVersion string, + ) error { + if counterpartyVersion != ibcmock.Version { + return fmt.Errorf("incorrect mock version") + } + return nil + } + + // malleate test case + tc.malleate(suite) + + suite.path.EndpointA.ChanOpenInit() + suite.path.EndpointB.ChanOpenTry() + + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + err = cbs.OnChanOpenAck(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, suite.path.EndpointA.Counterparty.ChannelID, tc.cpVersion) + if tc.expPass { + suite.Require().NoError(err, "unexpected error for case: %s", tc.name) + } else { + suite.Require().Error(err, "%s expected error but returned none", tc.name) + } + }) + } +} + +func (suite *FeeTestSuite) TestOnChanCloseInit() { + var ( + refundAcc sdk.AccAddress + fee types.Fee + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", func() {}, true, + }, + { + "application callback fails", func() { + suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnChanCloseInit = func( + ctx sdk.Context, portID, channelID string, + ) error { + return fmt.Errorf("application callback fails") + } + }, false, + }, + { + "RefundFeesOnChannelClosure fails - invalid refund address", func() { + // store the fee in state & update escrow account balance + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(1)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, "invalid refund address", nil)}) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) // setup channel + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + fee = types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + } + + refundAcc = suite.chainA.SenderAccount.GetAddress() + packetFee := types.NewPacketFee(fee, refundAcc.String(), []string{}) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees([]types.PacketFee{packetFee})) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + tc.malleate() + + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + err = cbs.OnChanCloseInit(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) + + if tc.expPass { + suite.Require().NoError(err) + } else { + suite.Require().Error(err) + } + }) + } +} + +// Tests OnChanCloseConfirm on chainA +func (suite *FeeTestSuite) TestOnChanCloseConfirm() { + var ( + refundAcc sdk.AccAddress + fee types.Fee + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", func() {}, true, + }, + { + "application callback fails", func() { + suite.chainA.GetSimApp().FeeMockModule.IBCApp.OnChanCloseConfirm = func( + ctx sdk.Context, portID, channelID string, + ) error { + return fmt.Errorf("application callback fails") + } + }, false, + }, + { + "RefundChannelFeesOnClosure fails - refund address is invalid", func() { + // store the fee in state & update escrow account balance + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(1)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, "invalid refund address", nil)}) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) // setup channel + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + fee = types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + } + + refundAcc = suite.chainA.SenderAccount.GetAddress() + packetFee := types.NewPacketFee(fee, refundAcc.String(), []string{}) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees([]types.PacketFee{packetFee})) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + tc.malleate() + + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + err = cbs.OnChanCloseConfirm(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) + + if tc.expPass { + suite.Require().NoError(err) + } else { + suite.Require().Error(err) + } + + }) + } +} + +func (suite *FeeTestSuite) TestOnRecvPacket() { + testCases := []struct { + name string + malleate func() + // forwardRelayer bool indicates if there is a forwardRelayer address set + forwardRelayer bool + feeEnabled bool + }{ + { + "success", + func() {}, + true, + true, + }, + { + "async write acknowledgement: ack is nil", + func() { + // setup mock callback + suite.chainB.GetSimApp().FeeMockModule.IBCApp.OnRecvPacket = func( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, + ) exported.Acknowledgement { + return nil + } + }, + true, + true, + }, + { + "fee not enabled", + func() { + suite.chainB.GetSimApp().IBCFeeKeeper.DeleteFeeEnabled(suite.chainB.GetContext(), suite.path.EndpointB.ChannelConfig.PortID, suite.path.EndpointB.ChannelID) + }, + true, + false, + }, + { + "forward address is not found", + func() { + suite.chainB.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), "", suite.path.EndpointB.ChannelID) + }, + false, + true, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + // setup pathAToC (chainA -> chainC) first in order to have different channel IDs for chainA & chainB + suite.coordinator.Setup(suite.pathAToC) + // setup path for chainA -> chainB + suite.coordinator.Setup(suite.path) + + suite.chainB.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainB.GetContext(), suite.path.EndpointB.ChannelConfig.PortID, suite.path.EndpointB.ChannelID) + + packet := suite.CreateMockPacket() + + // set up module and callbacks + module, _, err := suite.chainB.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainB.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainB.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + suite.chainB.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), suite.chainB.SenderAccount.GetAddress().String(), suite.path.EndpointB.ChannelID) + + // malleate test case + tc.malleate() + + result := cbs.OnRecvPacket(suite.chainB.GetContext(), packet, suite.chainA.SenderAccount.GetAddress()) + + switch { + case tc.name == "success": + forwardAddr, _ := suite.chainB.GetSimApp().IBCFeeKeeper.GetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), suite.path.EndpointB.ChannelID) + + expectedAck := types.IncentivizedAcknowledgement{ + Result: ibcmock.MockAcknowledgement.Acknowledgement(), + ForwardRelayerAddress: forwardAddr, + UnderlyingAppSuccess: true, + } + suite.Require().Equal(expectedAck, result) + + case !tc.feeEnabled: + suite.Require().Equal(ibcmock.MockAcknowledgement, result) + + case tc.forwardRelayer && result == nil: + suite.Require().Equal(nil, result) + packetID := channeltypes.NewPacketId(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + + // retrieve the forward relayer that was stored in `onRecvPacket` + relayer, _ := suite.chainB.GetSimApp().IBCFeeKeeper.GetRelayerAddressForAsyncAck(suite.chainB.GetContext(), packetID) + suite.Require().Equal(relayer, suite.chainA.SenderAccount.GetAddress().String()) + + case !tc.forwardRelayer: + expectedAck := types.IncentivizedAcknowledgement{ + Result: ibcmock.MockAcknowledgement.Acknowledgement(), + ForwardRelayerAddress: "", + UnderlyingAppSuccess: true, + } + suite.Require().Equal(expectedAck, result) + } + }) + } +} + +// different channel than sending chain +func (suite *FeeTestSuite) TestOnAcknowledgementPacket() { + var ( + ack []byte + packetFee types.PacketFee + originalBalance sdk.Coins + expectedBalance sdk.Coins + expectedRelayerBalance sdk.Coins + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() { + expectedRelayerBalance = packetFee.Fee.RecvFee.Add(packetFee.Fee.AckFee[0]) + }, + true, + }, + { + "no op success without a packet fee", + func() { + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, suite.chainA.SenderAccount.GetSequence()) + suite.chainA.GetSimApp().IBCFeeKeeper.DeleteFeesInEscrow(suite.chainA.GetContext(), packetID) + + ack = types.IncentivizedAcknowledgement{ + Result: ibcmock.MockAcknowledgement.Acknowledgement(), + ForwardRelayerAddress: suite.chainA.SenderAccount.GetAddress().String(), + }.Acknowledgement() + + expectedBalance = originalBalance + }, + true, + }, + { + "ack wrong format", + func() { + ack = []byte("unsupported acknowledgement format") + + expectedBalance = originalBalance + }, + false, + }, + { + "channel is not fee not enabled, success", + func() { + suite.chainA.GetSimApp().IBCFeeKeeper.DeleteFeeEnabled(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) + ack = ibcmock.MockAcknowledgement.Acknowledgement() + + expectedBalance = originalBalance + }, + true, + }, + { + "success: fee module is disabled, skip fee logic", + func() { + lockFeeModule(suite.chainA) + + expectedBalance = originalBalance + }, + true, + }, + { + "fail on distribute receive fee (blocked address)", + func() { + blockedAddr := suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress() + + ack = types.IncentivizedAcknowledgement{ + Result: ibcmock.MockAcknowledgement.Acknowledgement(), + ForwardRelayerAddress: blockedAddr.String(), + }.Acknowledgement() + + expectedRelayerBalance = packetFee.Fee.AckFee + expectedBalance = expectedBalance.Add(packetFee.Fee.RecvFee...) + }, + true, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) + packet := suite.CreateMockPacket() + + expectedRelayerBalance = sdk.Coins{} // reset + + // set up module and callbacks + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + // escrow the packet fee + packetID := channeltypes.NewPacketId(packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) + packetFee = types.NewPacketFee( + types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + }, + suite.chainA.SenderAccount.GetAddress().String(), + []string{}, + ) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees([]types.PacketFee{packetFee})) + err = suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), types.ModuleName, packetFee.Fee.Total()) + suite.Require().NoError(err) + + relayerAddr := suite.chainB.SenderAccount.GetAddress() + + // must be changed explicitly + ack = types.IncentivizedAcknowledgement{ + Result: ibcmock.MockAcknowledgement.Acknowledgement(), + ForwardRelayerAddress: relayerAddr.String(), + }.Acknowledgement() + + // log original sender balance + // NOTE: balance is logged after escrowing tokens + originalBalance = sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), ibctesting.TestCoin.Denom)) + + // default to success case + expectedBalance = originalBalance.Add(packetFee.Fee.TimeoutFee[0]) + + // malleate test case + tc.malleate() + + err = cbs.OnAcknowledgementPacket(suite.chainA.GetContext(), packet, ack, relayerAddr) + + if tc.expPass { + suite.Require().NoError(err) + } else { + suite.Require().Error(err) + } + + suite.Require().Equal( + expectedBalance, + sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), ibctesting.TestCoin.Denom)), + ) + + relayerBalance := sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), relayerAddr, ibctesting.TestCoin.Denom)) + suite.Require().Equal( + expectedRelayerBalance, + relayerBalance, + ) + }) + } +} + +func (suite *FeeTestSuite) TestOnTimeoutPacket() { + var ( + relayerAddr sdk.AccAddress + packetFee types.PacketFee + originalBalance sdk.Coins + expectedBalance sdk.Coins + ) + testCases := []struct { + name string + malleate func() + expFeeDistributed bool + }{ + { + "success", + func() {}, + true, + }, + { + "fee not enabled", + func() { + suite.chainA.GetSimApp().IBCFeeKeeper.DeleteFeeEnabled(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) + + expectedBalance = originalBalance + }, + false, + }, + { + "fee module is disabled, skip fee logic", + func() { + lockFeeModule(suite.chainA) + + expectedBalance = originalBalance + }, + false, + }, + { + "no op if identified packet fee doesn't exist", + func() { + // delete packet fee + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, suite.chainA.SenderAccount.GetSequence()) + suite.chainA.GetSimApp().IBCFeeKeeper.DeleteFeesInEscrow(suite.chainA.GetContext(), packetID) + + expectedBalance = originalBalance + }, + false, + }, + { + "distribute fee fails for timeout fee (blocked address)", + func() { + relayerAddr = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress() + + expectedBalance = originalBalance. + Add(packetFee.Fee.RecvFee...). + Add(packetFee.Fee.AckFee...). + Add(packetFee.Fee.TimeoutFee...) + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) + packet := suite.CreateMockPacket() + + // set up module and callbacks + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + packetID := channeltypes.NewPacketId(packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) + + // must be explicitly changed + relayerAddr = suite.chainB.SenderAccount.GetAddress() + + packetFee = types.NewPacketFee( + types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + }, + suite.chainA.SenderAccount.GetAddress().String(), + []string{}, + ) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees([]types.PacketFee{packetFee})) + err = suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), types.ModuleName, packetFee.Fee.Total()) + suite.Require().NoError(err) + + // log original sender balance + // NOTE: balance is logged after escrowing tokens + originalBalance = sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), ibctesting.TestCoin.Denom)) + + // default to success case + expectedBalance = originalBalance. + Add(packetFee.Fee.RecvFee[0]). + Add(packetFee.Fee.AckFee[0]) + + // malleate test case + tc.malleate() + + err = cbs.OnTimeoutPacket(suite.chainA.GetContext(), packet, relayerAddr) + suite.Require().NoError(err) + + suite.Require().Equal( + expectedBalance, + sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), ibctesting.TestCoin.Denom)), + ) + + relayerBalance := sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), relayerAddr, ibctesting.TestCoin.Denom)) + if tc.expFeeDistributed { + // there should no longer be a fee in escrow for this packet + found := suite.chainA.GetSimApp().IBCFeeKeeper.HasFeesInEscrow(suite.chainA.GetContext(), packetID) + suite.Require().False(found) + + suite.Require().Equal(packetFee.Fee.TimeoutFee, relayerBalance) + } else { + suite.Require().Empty(relayerBalance) + } + }) + } +} + +func (suite *FeeTestSuite) TestGetAppVersion() { + var ( + portID string + channelID string + expAppVersion string + ) + testCases := []struct { + name string + malleate func() + expFound bool + }{ + { + "success for fee enabled channel", + func() { + expAppVersion = ibcmock.Version + }, + true, + }, + { + "success for non fee enabled channel", + func() { + path := ibctesting.NewPath(suite.chainA, suite.chainB) + path.EndpointA.ChannelConfig.PortID = ibctesting.MockFeePort + path.EndpointB.ChannelConfig.PortID = ibctesting.MockFeePort + // by default a new path uses a non fee channel + suite.coordinator.Setup(path) + portID = path.EndpointA.ChannelConfig.PortID + channelID = path.EndpointA.ChannelID + + expAppVersion = ibcmock.Version + }, + true, + }, + { + "channel does not exist", + func() { + channelID = "does not exist" + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) + + portID = suite.path.EndpointA.ChannelConfig.PortID + channelID = suite.path.EndpointA.ChannelID + + // malleate test case + tc.malleate() + + module, _, err := suite.chainA.App.GetIBCKeeper().PortKeeper.LookupModuleByPort(suite.chainA.GetContext(), ibctesting.MockFeePort) + suite.Require().NoError(err) + + cbs, ok := suite.chainA.App.GetIBCKeeper().Router.GetRoute(module) + suite.Require().True(ok) + + feeModule := cbs.(fee.IBCModule) + + appVersion, found := feeModule.GetAppVersion(suite.chainA.GetContext(), portID, channelID) + + if tc.expFound { + suite.Require().True(found) + suite.Require().Equal(expAppVersion, appVersion) + } else { + suite.Require().False(found) + suite.Require().Empty(appVersion) + } + }) + } +} diff --git a/modules/apps/29-fee/keeper/escrow.go b/modules/apps/29-fee/keeper/escrow.go new file mode 100644 index 00000000000..0ca84684440 --- /dev/null +++ b/modules/apps/29-fee/keeper/escrow.go @@ -0,0 +1,232 @@ +package keeper + +import ( + "bytes" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" +) + +// escrowPacketFee sends the packet fee to the 29-fee module account to hold in escrow +func (k Keeper) escrowPacketFee(ctx sdk.Context, packetID channeltypes.PacketId, packetFee types.PacketFee) error { + // check if the refund address is valid + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) + if err != nil { + return err + } + + refundAcc := k.authKeeper.GetAccount(ctx, refundAddr) + if refundAcc == nil { + return sdkerrors.Wrapf(types.ErrRefundAccNotFound, "account with address: %s not found", packetFee.RefundAddress) + } + + coins := packetFee.Fee.Total() + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, refundAddr, types.ModuleName, coins); err != nil { + return err + } + + // multiple fees may be escrowed for a single packet, firstly create a slice containing the new fee + // retrieve any previous fees stored in escrow for the packet and append them to the list + fees := []types.PacketFee{packetFee} + if feesInEscrow, found := k.GetFeesInEscrow(ctx, packetID); found { + fees = append(fees, feesInEscrow.PacketFees...) + } + + packetFees := types.NewPacketFees(fees) + k.SetFeesInEscrow(ctx, packetID, packetFees) + + EmitIncentivizedPacket(ctx, packetID, packetFee) + + return nil +} + +// DistributePacketFeesOnAcknowledgement pays all the acknowledgement & receive fees for a given packetID while refunding the timeout fees to the refund account. +func (k Keeper) DistributePacketFeesOnAcknowledgement(ctx sdk.Context, forwardRelayer string, reverseRelayer sdk.AccAddress, packetFees []types.PacketFee) { + // cache context before trying to distribute fees + // if the escrow account has insufficient balance then we want to avoid partially distributing fees + cacheCtx, writeFn := ctx.CacheContext() + + forwardAddr, _ := sdk.AccAddressFromBech32(forwardRelayer) + + for _, packetFee := range packetFees { + if !k.EscrowAccountHasBalance(cacheCtx, packetFee.Fee.Total()) { + // if the escrow account does not have sufficient funds then there must exist a severe bug + // the fee module should be locked until manual intervention fixes the issue + // a locked fee module will simply skip fee logic, all channels will temporarily function as + // fee disabled channels + // NOTE: we use the uncached context to lock the fee module so that the state changes from + // locking the fee module are persisted + k.lockFeeModule(ctx) + + return + } + + // check if refundAcc address works + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) + if err != nil { + panic(fmt.Sprintf("could not parse refundAcc %s to sdk.AccAddress", packetFee.RefundAddress)) + } + + k.distributePacketFeeOnAcknowledgement(cacheCtx, refundAddr, forwardAddr, reverseRelayer, packetFee) + } + + // write the cache + writeFn() + + // NOTE: The context returned by CacheContext() refers to a new EventManager, so it needs to explicitly set events to the original context. + ctx.EventManager().EmitEvents(cacheCtx.EventManager().Events()) +} + +// distributePacketFeeOnAcknowledgement pays the receive fee for a given packetID while refunding the timeout fee to the refund account associated with the Fee. +// If there was no forward relayer or the associated forward relayer address is blocked, the receive fee is refunded. +func (k Keeper) distributePacketFeeOnAcknowledgement(ctx sdk.Context, refundAddr, forwardRelayer, reverseRelayer sdk.AccAddress, packetFee types.PacketFee) { + // distribute fee to valid forward relayer address otherwise refund the fee + if !forwardRelayer.Empty() && !k.bankKeeper.BlockedAddr(forwardRelayer) { + // distribute fee for forward relaying + k.distributeFee(ctx, forwardRelayer, refundAddr, packetFee.Fee.RecvFee) + } else { + // refund onRecv fee as forward relayer is not valid address + k.distributeFee(ctx, refundAddr, refundAddr, packetFee.Fee.RecvFee) + } + + // distribute fee for reverse relaying + k.distributeFee(ctx, reverseRelayer, refundAddr, packetFee.Fee.AckFee) + + // refund timeout fee for unused timeout + k.distributeFee(ctx, refundAddr, refundAddr, packetFee.Fee.TimeoutFee) + +} + +// DistributePacketsFeesOnTimeout pays all the timeout fees for a given packetID while refunding the acknowledgement & receive fees to the refund account. +func (k Keeper) DistributePacketFeesOnTimeout(ctx sdk.Context, timeoutRelayer sdk.AccAddress, packetFees []types.PacketFee) { + // cache context before trying to distribute fees + // if the escrow account has insufficient balance then we want to avoid partially distributing fees + cacheCtx, writeFn := ctx.CacheContext() + + for _, packetFee := range packetFees { + if !k.EscrowAccountHasBalance(cacheCtx, packetFee.Fee.Total()) { + // if the escrow account does not have sufficient funds then there must exist a severe bug + // the fee module should be locked until manual intervention fixes the issue + // a locked fee module will simply skip fee logic, all channels will temporarily function as + // fee disabled channels + // NOTE: we use the uncached context to lock the fee module so that the state changes from + // locking the fee module are persisted + k.lockFeeModule(ctx) + + return + } + + // check if refundAcc address works + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) + if err != nil { + panic(fmt.Sprintf("could not parse refundAcc %s to sdk.AccAddress", packetFee.RefundAddress)) + } + + k.distributePacketFeeOnTimeout(cacheCtx, refundAddr, timeoutRelayer, packetFee) + } + + // write the cache + writeFn() + + // NOTE: The context returned by CacheContext() refers to a new EventManager, so it needs to explicitly set events to the original context. + ctx.EventManager().EmitEvents(cacheCtx.EventManager().Events()) +} + +// distributePacketFeeOnTimeout pays the timeout fee to the timeout relayer and refunds the acknowledgement & receive fee. +func (k Keeper) distributePacketFeeOnTimeout(ctx sdk.Context, refundAddr, timeoutRelayer sdk.AccAddress, packetFee types.PacketFee) { + // refund receive fee for unused forward relaying + k.distributeFee(ctx, refundAddr, refundAddr, packetFee.Fee.RecvFee) + + // refund ack fee for unused reverse relaying + k.distributeFee(ctx, refundAddr, refundAddr, packetFee.Fee.AckFee) + + // distribute fee for timeout relaying + k.distributeFee(ctx, timeoutRelayer, refundAddr, packetFee.Fee.TimeoutFee) +} + +// distributeFee will attempt to distribute the escrowed fee to the receiver address. +// If the distribution fails for any reason (such as the receiving address being blocked), +// the state changes will be discarded. +func (k Keeper) distributeFee(ctx sdk.Context, receiver, refundAccAddress sdk.AccAddress, fee sdk.Coins) { + // cache context before trying to distribute fees + cacheCtx, writeFn := ctx.CacheContext() + + err := k.bankKeeper.SendCoinsFromModuleToAccount(cacheCtx, types.ModuleName, receiver, fee) + if err != nil { + if bytes.Equal(receiver, refundAccAddress) { + return // if sending to the refund address already failed, then return (no-op) + } + + // if an error is returned from x/bank and the receiver is not the refundAccAddress + // then attempt to refund the fee to the original sender + err := k.bankKeeper.SendCoinsFromModuleToAccount(cacheCtx, types.ModuleName, refundAccAddress, fee) + if err != nil { + return // if sending to the refund address fails, no-op + } + } + + // write the cache + writeFn() + + // NOTE: The context returned by CacheContext() refers to a new EventManager, so it needs to explicitly set events to the original context. + ctx.EventManager().EmitEvents(cacheCtx.EventManager().Events()) +} + +// RefundFeesOnChannelClosure will refund all fees associated with the given port and channel identifiers. +// If the escrow account runs out of balance then fee module will become locked as this implies the presence +// of a severe bug. When the fee module is locked, no fee distributions will be performed. +// Please see ADR 004 for more information. +func (k Keeper) RefundFeesOnChannelClosure(ctx sdk.Context, portID, channelID string) error { + identifiedPacketFees := k.GetIdentifiedPacketFeesForChannel(ctx, portID, channelID) + + // cache context before trying to distribute fees + // if the escrow account has insufficient balance then we want to avoid partially distributing fees + cacheCtx, writeFn := ctx.CacheContext() + + for _, identifiedPacketFee := range identifiedPacketFees { + for _, packetFee := range identifiedPacketFee.PacketFees { + + if !k.EscrowAccountHasBalance(cacheCtx, packetFee.Fee.Total()) { + // if the escrow account does not have sufficient funds then there must exist a severe bug + // the fee module should be locked until manual intervention fixes the issue + // a locked fee module will simply skip fee logic, all channels will temporarily function as + // fee disabled channels + // NOTE: we use the uncached context to lock the fee module so that the state changes from + // locking the fee module are persisted + k.lockFeeModule(ctx) + + // return a nil error so state changes are committed but distribution stops + return nil + } + + refundAddr, err := sdk.AccAddressFromBech32(packetFee.RefundAddress) + if err != nil { + return err + } + + // if the refund address is blocked, skip and continue distribution + if k.bankKeeper.BlockedAddr(refundAddr) { + continue + } + + // refund all fees to refund address + // Use SendCoins rather than the module account send functions since refund address may be a user account or module address. + moduleAcc := k.GetFeeModuleAddress() + if err = k.bankKeeper.SendCoins(cacheCtx, moduleAcc, refundAddr, packetFee.Fee.Total()); err != nil { + return err + } + + } + + k.DeleteFeesInEscrow(cacheCtx, identifiedPacketFee.PacketId) + } + + // write the cache + writeFn() + + return nil +} diff --git a/modules/apps/29-fee/keeper/escrow_test.go b/modules/apps/29-fee/keeper/escrow_test.go new file mode 100644 index 00000000000..e2a43afe586 --- /dev/null +++ b/modules/apps/29-fee/keeper/escrow_test.go @@ -0,0 +1,464 @@ +package keeper_test + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/tendermint/tendermint/crypto/secp256k1" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + transfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" +) + +func (suite *KeeperTestSuite) TestDistributeFee() { + var ( + forwardRelayer string + forwardRelayerBal sdk.Coin + reverseRelayer sdk.AccAddress + reverseRelayerBal sdk.Coin + refundAcc sdk.AccAddress + refundAccBal sdk.Coin + packetFee types.PacketFee + packetFees []types.PacketFee + ) + + testCases := []struct { + name string + malleate func() + expResult func() + }{ + { + "success", + func() {}, + func() { + // check if the reverse relayer is paid + expectedReverseAccBal := reverseRelayerBal.Add(defaultAckFee[0]).Add(defaultAckFee[0]) + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), reverseRelayer, sdk.DefaultBondDenom) + suite.Require().Equal(expectedReverseAccBal, balance) + + // check if the forward relayer is paid + forward, err := sdk.AccAddressFromBech32(forwardRelayer) + suite.Require().NoError(err) + + expectedForwardAccBal := forwardRelayerBal.Add(defaultRecvFee[0]).Add(defaultRecvFee[0]) + balance = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), forward, sdk.DefaultBondDenom) + suite.Require().Equal(expectedForwardAccBal, balance) + + // check if the refund acc has been refunded the timeoutFee + expectedRefundAccBal := refundAccBal.Add(defaultTimeoutFee[0].Add(defaultTimeoutFee[0])) + balance = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + suite.Require().Equal(expectedRefundAccBal, balance) + + // check the module acc wallet is now empty + balance = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(0)), balance) + }, + }, + { + "escrow account out of balance, fee module becomes locked - no distribution", func() { + // pass in an extra packet fee + packetFees = append(packetFees, packetFee) + }, + func() { + suite.Require().True(suite.chainA.GetSimApp().IBCFeeKeeper.IsLocked(suite.chainA.GetContext())) + + // check if the module acc contains all the fees + expectedModuleAccBal := packetFee.Fee.Total().Add(packetFee.Fee.Total()...) + balance := suite.chainA.GetSimApp().BankKeeper.GetAllBalances(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress()) + suite.Require().Equal(expectedModuleAccBal, balance) + }, + }, + { + "invalid forward address", + func() { + forwardRelayer = "invalid address" + }, + func() { + // check if the refund acc has been refunded the timeoutFee & recvFee + expectedRefundAccBal := refundAccBal.Add(defaultTimeoutFee[0]).Add(defaultRecvFee[0]).Add(defaultTimeoutFee[0]).Add(defaultRecvFee[0]) + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + suite.Require().Equal(expectedRefundAccBal, balance) + }, + }, + { + "invalid forward address: blocked address", + func() { + forwardRelayer = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress().String() + }, + func() { + // check if the refund acc has been refunded the timeoutFee & recvFee + expectedRefundAccBal := refundAccBal.Add(defaultTimeoutFee[0]).Add(defaultRecvFee[0]).Add(defaultTimeoutFee[0]).Add(defaultRecvFee[0]) + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + suite.Require().Equal(expectedRefundAccBal, balance) + }, + }, + { + "invalid receiver address: ack fee returned to sender", + func() { + reverseRelayer = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress() + }, + func() { + // check if the refund acc has been refunded the timeoutFee & ackFee + expectedRefundAccBal := refundAccBal.Add(defaultTimeoutFee[0]).Add(defaultAckFee[0]).Add(defaultTimeoutFee[0]).Add(defaultAckFee[0]) + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + suite.Require().Equal(expectedRefundAccBal, balance) + }, + }, + { + "invalid refund address: no-op, timeout fee remains in escrow", + func() { + packetFees[0].RefundAddress = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress().String() + packetFees[1].RefundAddress = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress().String() + }, + func() { + // check if the module acc contains the timeoutFee + expectedModuleAccBal := sdk.NewCoin(sdk.DefaultBondDenom, defaultTimeoutFee.Add(defaultTimeoutFee...).AmountOf(sdk.DefaultBondDenom)) + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(expectedModuleAccBal, balance) + }, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + suite.SetupTest() // reset + suite.coordinator.Setup(suite.path) // setup channel + + // setup accounts + forwardRelayer = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()).String() + reverseRelayer = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + refundAcc = suite.chainA.SenderAccount.GetAddress() + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + // escrow the packet fees & store the fees in state + packetFee = types.NewPacketFee(fee, refundAcc.String(), []string{}) + packetFees = []types.PacketFee{packetFee, packetFee} + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees(packetFees)) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, packetFee.Fee.Total().Add(packetFee.Fee.Total()...)) + suite.Require().NoError(err) + + tc.malleate() + + // fetch the account balances before fee distribution (forward, reverse, refund) + forwardAccAddress, _ := sdk.AccAddressFromBech32(forwardRelayer) + forwardRelayerBal = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), forwardAccAddress, sdk.DefaultBondDenom) + reverseRelayerBal = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), reverseRelayer, sdk.DefaultBondDenom) + refundAccBal = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + + suite.chainA.GetSimApp().IBCFeeKeeper.DistributePacketFeesOnAcknowledgement(suite.chainA.GetContext(), forwardRelayer, reverseRelayer, packetFees) + + tc.expResult() + }) + } +} + +func (suite *KeeperTestSuite) TestDistributePacketFeesOnTimeout() { + var ( + timeoutRelayer sdk.AccAddress + timeoutRelayerBal sdk.Coin + refundAcc sdk.AccAddress + refundAccBal sdk.Coin + packetFee types.PacketFee + packetFees []types.PacketFee + ) + + testCases := []struct { + name string + malleate func() + expResult func() + }{ + { + "success", + func() {}, + func() { + // check if the timeout relayer is paid + expectedTimeoutAccBal := timeoutRelayerBal.Add(defaultTimeoutFee[0]).Add(defaultTimeoutFee[0]) + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), timeoutRelayer, sdk.DefaultBondDenom) + suite.Require().Equal(expectedTimeoutAccBal, balance) + + // check if the refund acc has been refunded the recv/ack fees + expectedRefundAccBal := refundAccBal.Add(defaultAckFee[0]).Add(defaultAckFee[0]).Add(defaultRecvFee[0]).Add(defaultRecvFee[0]) + balance = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + suite.Require().Equal(expectedRefundAccBal, balance) + + // check the module acc wallet is now empty + balance = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(0)), balance) + }, + }, + { + "escrow account out of balance, fee module becomes locked - no distribution", func() { + // pass in an extra packet fee + packetFees = append(packetFees, packetFee) + }, + func() { + suite.Require().True(suite.chainA.GetSimApp().IBCFeeKeeper.IsLocked(suite.chainA.GetContext())) + + // check if the module acc contains all the fees + expectedModuleAccBal := packetFee.Fee.Total().Add(packetFee.Fee.Total()...) + balance := suite.chainA.GetSimApp().BankKeeper.GetAllBalances(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress()) + suite.Require().Equal(expectedModuleAccBal, balance) + }, + }, + { + "invalid timeout relayer address: timeout fee returned to sender", + func() { + timeoutRelayer = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress() + }, + func() { + // check if the refund acc has been refunded the all the fees + expectedRefundAccBal := sdk.Coins{refundAccBal}.Add(packetFee.Fee.Total()...).Add(packetFee.Fee.Total()...)[0] + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + suite.Require().Equal(expectedRefundAccBal, balance) + }, + }, + { + "invalid refund address: no-op, recv and ack fees remain in escrow", + func() { + packetFees[0].RefundAddress = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress().String() + packetFees[1].RefundAddress = suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress().String() + }, + func() { + // check if the module acc contains the timeoutFee + expectedModuleAccBal := sdk.NewCoin(sdk.DefaultBondDenom, defaultRecvFee.Add(defaultRecvFee[0]).Add(defaultAckFee[0]).Add(defaultAckFee[0]).AmountOf(sdk.DefaultBondDenom)) + balance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(expectedModuleAccBal, balance) + }, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + suite.SetupTest() // reset + suite.coordinator.Setup(suite.path) // setup channel + + // setup accounts + timeoutRelayer = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + refundAcc = suite.chainA.SenderAccount.GetAddress() + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + // escrow the packet fees & store the fees in state + packetFee = types.NewPacketFee(fee, refundAcc.String(), []string{}) + packetFees = []types.PacketFee{packetFee, packetFee} + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees(packetFees)) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, packetFee.Fee.Total().Add(packetFee.Fee.Total()...)) + suite.Require().NoError(err) + + tc.malleate() + + // fetch the account balances before fee distribution (forward, reverse, refund) + timeoutRelayerBal = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), timeoutRelayer, sdk.DefaultBondDenom) + refundAccBal = suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), refundAcc, sdk.DefaultBondDenom) + + suite.chainA.GetSimApp().IBCFeeKeeper.DistributePacketFeesOnTimeout(suite.chainA.GetContext(), timeoutRelayer, packetFees) + + tc.expResult() + }) + } +} + +func (suite *KeeperTestSuite) TestRefundFeesOnChannelClosure() { + var ( + expIdentifiedPacketFees []types.IdentifiedPacketFees + expEscrowBal sdk.Coins + expRefundBal sdk.Coins + refundAcc sdk.AccAddress + fee types.Fee + locked bool + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", func() { + for i := 1; i < 6; i++ { + // store the fee in state & update escrow account balance + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(i)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, refundAcc.String(), nil)}) + identifiedPacketFees := types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expIdentifiedPacketFees = append(expIdentifiedPacketFees, identifiedPacketFees) + } + }, true, + }, + { + "success with undistributed packet fees on a different channel", func() { + for i := 1; i < 6; i++ { + // store the fee in state & update escrow account balance + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(i)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, refundAcc.String(), nil)}) + identifiedPacketFees := types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expIdentifiedPacketFees = append(expIdentifiedPacketFees, identifiedPacketFees) + } + + // set packet fee for a different channel + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, "channel-1", uint64(1)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, refundAcc.String(), nil)}) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, "channel-1") + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expEscrowBal = fee.Total() + expRefundBal = expRefundBal.Sub(fee.Total()) + }, true, + }, + { + "escrow account empty, module should become locked", func() { + locked = true + + // store the fee in state without updating escrow account balance + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(1)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, refundAcc.String(), nil)}) + identifiedPacketFees := types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + + expIdentifiedPacketFees = []types.IdentifiedPacketFees{identifiedPacketFees} + }, + true, + }, + { + "escrow account goes negative on second packet, module should become locked", func() { + locked = true + + // store 2 fees in state + packetID1 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(1)) + packetID2 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(2)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, refundAcc.String(), nil)}) + identifiedPacketFee1 := types.NewIdentifiedPacketFees(packetID1, packetFees.PacketFees) + identifiedPacketFee2 := types.NewIdentifiedPacketFees(packetID2, packetFees.PacketFees) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID1, packetFees) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID2, packetFees) + + // update escrow account balance for 1 fee + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expIdentifiedPacketFees = []types.IdentifiedPacketFees{identifiedPacketFee1, identifiedPacketFee2} + }, true, + }, + { + "invalid refund acc address", func() { + // store the fee in state & update escrow account balance + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(1)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, "invalid refund address", nil)}) + identifiedPacketFees := types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expIdentifiedPacketFees = []types.IdentifiedPacketFees{identifiedPacketFees} + }, false, + }, + { + "distributing to blocked address is skipped", func() { + blockedAddr := suite.chainA.GetSimApp().AccountKeeper.GetModuleAccount(suite.chainA.GetContext(), transfertypes.ModuleName).GetAddress().String() + + // store the fee in state & update escrow account balance + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, uint64(1)) + packetFees := types.NewPacketFees([]types.PacketFee{types.NewPacketFee(fee, blockedAddr, nil)}) + identifiedPacketFees := types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, packetFees) + + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), refundAcc, types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expIdentifiedPacketFees = []types.IdentifiedPacketFees{identifiedPacketFees} + + expEscrowBal = fee.Total() + expRefundBal = expRefundBal.Sub(fee.Total()) + }, true, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + suite.SetupTest() // reset + suite.coordinator.Setup(suite.path) // setup channel + expIdentifiedPacketFees = []types.IdentifiedPacketFees{} + expEscrowBal = sdk.Coins{} + locked = false + + // setup + refundAcc = suite.chainA.SenderAccount.GetAddress() + moduleAcc := suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress() + + // expected refund balance if the refunds are successful + // NOTE: tc.malleate() should transfer from refund balance to correctly set the escrow balance + expRefundBal = suite.chainA.GetSimApp().BankKeeper.GetAllBalances(suite.chainA.GetContext(), refundAcc) + + fee = types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + } + + tc.malleate() + + // refundAcc balance before distribution + originalRefundBal := suite.chainA.GetSimApp().BankKeeper.GetAllBalances(suite.chainA.GetContext(), refundAcc) + originalEscrowBal := suite.chainA.GetSimApp().BankKeeper.GetAllBalances(suite.chainA.GetContext(), moduleAcc) + + err := suite.chainA.GetSimApp().IBCFeeKeeper.RefundFeesOnChannelClosure(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) + + // refundAcc balance after RefundFeesOnChannelClosure + refundBal := suite.chainA.GetSimApp().BankKeeper.GetAllBalances(suite.chainA.GetContext(), refundAcc) + escrowBal := suite.chainA.GetSimApp().BankKeeper.GetAllBalances(suite.chainA.GetContext(), moduleAcc) + + if tc.expPass { + suite.Require().NoError(err) + } else { + suite.Require().Error(err) + } + + suite.Require().Equal(locked, suite.chainA.GetSimApp().IBCFeeKeeper.IsLocked(suite.chainA.GetContext())) + + if locked || !tc.expPass { + // refund account and escrow account balances should remain unchanged + suite.Require().Equal(originalRefundBal, refundBal) + suite.Require().Equal(originalEscrowBal, escrowBal) + + // ensure none of the fees were deleted + suite.Require().Equal(expIdentifiedPacketFees, suite.chainA.GetSimApp().IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) + } else { + suite.Require().Equal(expEscrowBal, escrowBal) // escrow balance should be empty + suite.Require().Equal(expRefundBal, refundBal) // all packets should have been refunded + + // all fees in escrow should be deleted for this channel + suite.Require().Empty(suite.chainA.GetSimApp().IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) + } + + }) + } +} diff --git a/modules/apps/29-fee/keeper/events.go b/modules/apps/29-fee/keeper/events.go new file mode 100644 index 00000000000..9ff6f320ffc --- /dev/null +++ b/modules/apps/29-fee/keeper/events.go @@ -0,0 +1,25 @@ +package keeper + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" +) + +// EmitIncentivizedPacket emits an event so that relayers know an incentivized packet is ready to be relayed +func EmitIncentivizedPacket(ctx sdk.Context, packetID channeltypes.PacketId, packetFee types.PacketFee) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeIncentivizedPacket, + sdk.NewAttribute(channeltypes.AttributeKeyPortID, packetID.PortId), + sdk.NewAttribute(channeltypes.AttributeKeyChannelID, packetID.ChannelId), + sdk.NewAttribute(channeltypes.AttributeKeySequence, fmt.Sprint(packetID.Sequence)), + sdk.NewAttribute(types.AttributeKeyRecvFee, packetFee.Fee.RecvFee.String()), + sdk.NewAttribute(types.AttributeKeyAckFee, packetFee.Fee.AckFee.String()), + sdk.NewAttribute(types.AttributeKeyTimeoutFee, packetFee.Fee.TimeoutFee.String()), + ), + ) +} diff --git a/modules/apps/29-fee/keeper/genesis.go b/modules/apps/29-fee/keeper/genesis.go new file mode 100644 index 00000000000..70b6a5012a2 --- /dev/null +++ b/modules/apps/29-fee/keeper/genesis.go @@ -0,0 +1,36 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" +) + +// InitGenesis initializes the fee middleware application state from a provided genesis state +func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) { + for _, identifiedFees := range state.IdentifiedFees { + k.SetFeesInEscrow(ctx, identifiedFees.PacketId, types.NewPacketFees(identifiedFees.PacketFees)) + } + + for _, relayer := range state.RegisteredRelayers { + k.SetCounterpartyAddress(ctx, relayer.Address, relayer.CounterpartyAddress, relayer.ChannelId) + } + + for _, forwardAddr := range state.ForwardRelayers { + k.SetRelayerAddressForAsyncAck(ctx, forwardAddr.PacketId, forwardAddr.Address) + } + + for _, enabledChan := range state.FeeEnabledChannels { + k.SetFeeEnabled(ctx, enabledChan.PortId, enabledChan.ChannelId) + } +} + +// ExportGenesis returns the fee middleware application exported genesis +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + return &types.GenesisState{ + IdentifiedFees: k.GetAllIdentifiedPacketFees(ctx), + FeeEnabledChannels: k.GetAllFeeEnabledChannels(ctx), + RegisteredRelayers: k.GetAllRelayerAddresses(ctx), + ForwardRelayers: k.GetAllForwardRelayerAddresses(ctx), + } +} diff --git a/modules/apps/29-fee/keeper/genesis_test.go b/modules/apps/29-fee/keeper/genesis_test.go new file mode 100644 index 00000000000..8aa30385e58 --- /dev/null +++ b/modules/apps/29-fee/keeper/genesis_test.go @@ -0,0 +1,113 @@ +package keeper_test + +import ( + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" +) + +func (suite *KeeperTestSuite) TestInitGenesis() { + // build PacketId & Fee + refundAcc := suite.chainA.SenderAccount.GetAddress() + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + fee := types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + } + + // relayer addresses + sender := suite.chainA.SenderAccount.GetAddress().String() + counterparty := suite.chainB.SenderAccount.GetAddress().String() + + genesisState := types.GenesisState{ + IdentifiedFees: []types.IdentifiedPacketFees{ + { + PacketId: packetID, + PacketFees: []types.PacketFee{ + { + Fee: fee, + RefundAddress: refundAcc.String(), + Relayers: nil, + }, + }, + }, + }, + FeeEnabledChannels: []types.FeeEnabledChannel{ + { + PortId: ibctesting.MockFeePort, + ChannelId: ibctesting.FirstChannelID, + }, + }, + RegisteredRelayers: []types.RegisteredRelayerAddress{ + { + Address: sender, + CounterpartyAddress: counterparty, + ChannelId: ibctesting.FirstChannelID, + }, + }, + } + + suite.chainA.GetSimApp().IBCFeeKeeper.InitGenesis(suite.chainA.GetContext(), genesisState) + + // check fee + feesInEscrow, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetFeesInEscrow(suite.chainA.GetContext(), packetID) + suite.Require().True(found) + suite.Require().Equal(genesisState.IdentifiedFees[0].PacketFees, feesInEscrow.PacketFees) + + // check fee is enabled + isEnabled := suite.chainA.GetSimApp().IBCFeeKeeper.IsFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + suite.Require().True(isEnabled) + + // check relayers + addr, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetCounterpartyAddress(suite.chainA.GetContext(), sender, ibctesting.FirstChannelID) + suite.Require().True(found) + suite.Require().Equal(genesisState.RegisteredRelayers[0].CounterpartyAddress, addr) +} + +func (suite *KeeperTestSuite) TestExportGenesis() { + // set fee enabled + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + + // setup & escrow the packet fee + refundAcc := suite.chainA.SenderAccount.GetAddress() + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + fee := types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + } + + packetFee := types.NewPacketFee(fee, refundAcc.String(), []string{}) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees([]types.PacketFee{packetFee})) + + // relayer addresses + sender := suite.chainA.SenderAccount.GetAddress().String() + counterparty := suite.chainB.SenderAccount.GetAddress().String() + // set counterparty address + suite.chainA.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainA.GetContext(), sender, counterparty, ibctesting.FirstChannelID) + + // set forward relayer address + suite.chainA.GetSimApp().IBCFeeKeeper.SetRelayerAddressForAsyncAck(suite.chainA.GetContext(), packetID, sender) + + // export genesis + genesisState := suite.chainA.GetSimApp().IBCFeeKeeper.ExportGenesis(suite.chainA.GetContext()) + + // check fee enabled + suite.Require().Equal(ibctesting.FirstChannelID, genesisState.FeeEnabledChannels[0].ChannelId) + suite.Require().Equal(ibctesting.MockFeePort, genesisState.FeeEnabledChannels[0].PortId) + + // check fee + suite.Require().Equal(packetID, genesisState.IdentifiedFees[0].PacketId) + suite.Require().Equal(fee, genesisState.IdentifiedFees[0].PacketFees[0].Fee) + suite.Require().Equal(refundAcc.String(), genesisState.IdentifiedFees[0].PacketFees[0].RefundAddress) + suite.Require().Equal([]string(nil), genesisState.IdentifiedFees[0].PacketFees[0].Relayers) + + // check registered relayer addresses + suite.Require().Equal(sender, genesisState.RegisteredRelayers[0].Address) + suite.Require().Equal(counterparty, genesisState.RegisteredRelayers[0].CounterpartyAddress) + + // check registered relayer addresses + suite.Require().Equal(sender, genesisState.ForwardRelayers[0].Address) + suite.Require().Equal(packetID, genesisState.ForwardRelayers[0].PacketId) +} diff --git a/modules/apps/29-fee/keeper/grpc_query.go b/modules/apps/29-fee/keeper/grpc_query.go new file mode 100644 index 00000000000..10da5bc5595 --- /dev/null +++ b/modules/apps/29-fee/keeper/grpc_query.go @@ -0,0 +1,244 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" +) + +var _ types.QueryServer = Keeper{} + +// IncentivizedPackets implements the Query/IncentivizedPackets gRPC method +func (k Keeper) IncentivizedPackets(goCtx context.Context, req *types.QueryIncentivizedPacketsRequest) (*types.QueryIncentivizedPacketsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx).WithBlockHeight(int64(req.QueryHeight)) + + var identifiedPackets []types.IdentifiedPacketFees + store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte(types.FeesInEscrowPrefix)) + _, err := query.Paginate(store, req.Pagination, func(key, value []byte) error { + packetID, err := types.ParseKeyFeesInEscrow(types.FeesInEscrowPrefix + string(key)) + if err != nil { + return err + } + + packetFees := k.MustUnmarshalFees(value) + identifiedPackets = append(identifiedPackets, types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees)) + return nil + }) + + if err != nil { + return nil, status.Error(codes.NotFound, err.Error()) + } + + return &types.QueryIncentivizedPacketsResponse{ + IncentivizedPackets: identifiedPackets, + }, nil +} + +// IncentivizedPacket implements the Query/IncentivizedPacket gRPC method +func (k Keeper) IncentivizedPacket(goCtx context.Context, req *types.QueryIncentivizedPacketRequest) (*types.QueryIncentivizedPacketResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx).WithBlockHeight(int64(req.QueryHeight)) + + feesInEscrow, exists := k.GetFeesInEscrow(ctx, req.PacketId) + if !exists { + return nil, status.Error( + codes.NotFound, + sdkerrors.Wrapf(types.ErrFeeNotFound, "channel: %s, port: %s, sequence: %d", req.PacketId.ChannelId, req.PacketId.PortId, req.PacketId.Sequence).Error()) + } + + return &types.QueryIncentivizedPacketResponse{ + IncentivizedPacket: types.NewIdentifiedPacketFees(req.PacketId, feesInEscrow.PacketFees), + }, nil +} + +// IncentivizedPacketsForChannel implements the Query/IncentivizedPacketsForChannel gRPC method +func (k Keeper) IncentivizedPacketsForChannel(goCtx context.Context, req *types.QueryIncentivizedPacketsForChannelRequest) (*types.QueryIncentivizedPacketsForChannelResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx).WithBlockHeight(int64(req.QueryHeight)) + + var packets []*types.IdentifiedPacketFees + keyPrefix := types.KeyFeesInEscrowChannelPrefix(req.PortId, req.ChannelId) + store := prefix.NewStore(ctx.KVStore(k.storeKey), keyPrefix) + _, err := query.Paginate(store, req.Pagination, func(key, value []byte) error { + packetID, err := types.ParseKeyFeesInEscrow(string(keyPrefix) + string(key)) + if err != nil { + return err + } + + packetFees := k.MustUnmarshalFees(value) + + identifiedPacketFees := types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees) + packets = append(packets, &identifiedPacketFees) + + return nil + }) + + if err != nil { + return nil, status.Error(codes.NotFound, err.Error()) + } + + return &types.QueryIncentivizedPacketsForChannelResponse{ + IncentivizedPackets: packets, + }, nil +} + +// TotalRecvFees implements the Query/TotalRecvFees gRPC method +func (k Keeper) TotalRecvFees(goCtx context.Context, req *types.QueryTotalRecvFeesRequest) (*types.QueryTotalRecvFeesResponse, error) { + + ctx := sdk.UnwrapSDKContext(goCtx) + + feesInEscrow, found := k.GetFeesInEscrow(ctx, req.PacketId) + if !found { + return nil, status.Errorf( + codes.NotFound, + sdkerrors.Wrapf(types.ErrFeeNotFound, "channel: %s, port: %s, sequence: %d", req.PacketId.ChannelId, req.PacketId.PortId, req.PacketId.Sequence).Error(), + ) + } + + var recvFees sdk.Coins + for _, packetFee := range feesInEscrow.PacketFees { + recvFees = recvFees.Add(packetFee.Fee.RecvFee...) + } + + return &types.QueryTotalRecvFeesResponse{ + RecvFees: recvFees, + }, nil +} + +// TotalAckFees implements the Query/TotalAckFees gRPC method +func (k Keeper) TotalAckFees(goCtx context.Context, req *types.QueryTotalAckFeesRequest) (*types.QueryTotalAckFeesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + feesInEscrow, found := k.GetFeesInEscrow(ctx, req.PacketId) + if !found { + return nil, status.Errorf( + codes.NotFound, + sdkerrors.Wrapf(types.ErrFeeNotFound, "channel: %s, port: %s, sequence: %d", req.PacketId.ChannelId, req.PacketId.PortId, req.PacketId.Sequence).Error(), + ) + } + + var ackFees sdk.Coins + for _, packetFee := range feesInEscrow.PacketFees { + ackFees = ackFees.Add(packetFee.Fee.AckFee...) + } + + return &types.QueryTotalAckFeesResponse{ + AckFees: ackFees, + }, nil +} + +// TotalTimeoutFees implements the Query/TotalTimeoutFees gRPC method +func (k Keeper) TotalTimeoutFees(goCtx context.Context, req *types.QueryTotalTimeoutFeesRequest) (*types.QueryTotalTimeoutFeesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + feesInEscrow, found := k.GetFeesInEscrow(ctx, req.PacketId) + if !found { + return nil, status.Errorf( + codes.NotFound, + sdkerrors.Wrapf(types.ErrFeeNotFound, "channel: %s, port: %s, sequence: %d", req.PacketId.ChannelId, req.PacketId.PortId, req.PacketId.Sequence).Error(), + ) + } + + var timeoutFees sdk.Coins + for _, packetFee := range feesInEscrow.PacketFees { + timeoutFees = timeoutFees.Add(packetFee.Fee.TimeoutFee...) + } + + return &types.QueryTotalTimeoutFeesResponse{ + TimeoutFees: timeoutFees, + }, nil +} + +// CounterpartyAddress implements the Query/CounterpartyAddress gRPC method and returns the registered counterparty address for forward relaying +func (k Keeper) CounterpartyAddress(goCtx context.Context, req *types.QueryCounterpartyAddressRequest) (*types.QueryCounterpartyAddressResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + counterpartyAddr, found := k.GetCounterpartyAddress(ctx, req.RelayerAddress, req.ChannelId) + if !found { + return nil, status.Errorf(codes.NotFound, "counterparty address not found for address: %s on channel: %s", req.RelayerAddress, req.ChannelId) + } + + return &types.QueryCounterpartyAddressResponse{ + CounterpartyAddress: counterpartyAddr, + }, nil +} + +// FeeEnabledChannels implements the Query/FeeEnabledChannels gRPC method and returns a list of fee enabled channels +func (k Keeper) FeeEnabledChannels(goCtx context.Context, req *types.QueryFeeEnabledChannelsRequest) (*types.QueryFeeEnabledChannelsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx).WithBlockHeight(int64(req.QueryHeight)) + + var feeEnabledChannels []types.FeeEnabledChannel + store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte(types.FeeEnabledKeyPrefix)) + _, err := query.Paginate(store, req.Pagination, func(key, value []byte) error { + portID, channelID, err := types.ParseKeyFeeEnabled(types.FeeEnabledKeyPrefix + string(key)) + if err != nil { + return err + } + + feeEnabledChannel := types.FeeEnabledChannel{ + PortId: portID, + ChannelId: channelID, + } + + feeEnabledChannels = append(feeEnabledChannels, feeEnabledChannel) + + return nil + }) + + if err != nil { + return nil, status.Error(codes.NotFound, err.Error()) + } + + return &types.QueryFeeEnabledChannelsResponse{ + FeeEnabledChannels: feeEnabledChannels, + }, nil +} + +// FeeEnabledChannel implements the Query/FeeEnabledChannel gRPC method and returns true if the provided +// port and channel identifiers belong to a fee enabled channel +func (k Keeper) FeeEnabledChannel(goCtx context.Context, req *types.QueryFeeEnabledChannelRequest) (*types.QueryFeeEnabledChannelResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + isFeeEnabled := k.IsFeeEnabled(ctx, req.PortId, req.ChannelId) + + return &types.QueryFeeEnabledChannelResponse{ + FeeEnabled: isFeeEnabled, + }, nil +} diff --git a/modules/apps/29-fee/keeper/grpc_query_test.go b/modules/apps/29-fee/keeper/grpc_query_test.go new file mode 100644 index 00000000000..d665c655ccf --- /dev/null +++ b/modules/apps/29-fee/keeper/grpc_query_test.go @@ -0,0 +1,641 @@ +package keeper_test + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/tendermint/tendermint/crypto/secp256k1" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" +) + +func (suite *KeeperTestSuite) TestQueryIncentivizedPackets() { + var ( + req *types.QueryIncentivizedPacketsRequest + expectedPackets []types.IdentifiedPacketFees + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() { + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), []string(nil)) + + for i := 0; i < 3; i++ { + // escrow packet fees for three different packets + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, uint64(i+1)) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees([]types.PacketFee{packetFee})) + + expectedPackets = append(expectedPackets, types.NewIdentifiedPacketFees(packetID, []types.PacketFee{packetFee})) + } + + req = &types.QueryIncentivizedPacketsRequest{ + Pagination: &query.PageRequest{ + Limit: 5, + CountTotal: false, + }, + QueryHeight: 0, + } + }, + true, + }, + { + "empty pagination", + func() { + expectedPackets = nil + req = &types.QueryIncentivizedPacketsRequest{} + }, + true, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + tc.malleate() // malleate mutates test data + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.IncentivizedPackets(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(expectedPackets, res.IncentivizedPackets) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryIncentivizedPacket() { + var ( + req *types.QueryIncentivizedPacketRequest + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "fees not found for packet id", + func() { + req = &types.QueryIncentivizedPacketRequest{ + PacketId: channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 100), + QueryHeight: 0, + } + }, + false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), []string(nil)) + + packetFees := []types.PacketFee{packetFee, packetFee, packetFee} + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees(packetFees)) + + req = &types.QueryIncentivizedPacketRequest{ + PacketId: packetID, + QueryHeight: 0, + } + + tc.malleate() // malleate mutates test data + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.IncentivizedPacket(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(types.NewIdentifiedPacketFees(packetID, []types.PacketFee{packetFee, packetFee, packetFee}), res.IncentivizedPacket) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryIncentivizedPacketsForChannel() { + var ( + req *types.QueryIncentivizedPacketsForChannelRequest + expIdentifiedPacketFees []*types.IdentifiedPacketFees + ) + + fee := types.Fee{ + AckFee: sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(100)}}, + RecvFee: sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(100)}}, + TimeoutFee: sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(100)}}, + } + + testCases := []struct { + msg string + malleate func() + expPass bool + }{ + { + "empty pagination", + func() { + expIdentifiedPacketFees = nil + req = &types.QueryIncentivizedPacketsForChannelRequest{} + }, + true, + }, + { + "success", + func() { + req = &types.QueryIncentivizedPacketsForChannelRequest{ + Pagination: &query.PageRequest{ + Limit: 5, + CountTotal: false, + }, + PortId: ibctesting.MockFeePort, + ChannelId: ibctesting.FirstChannelID, + QueryHeight: 0, + } + }, + true, + }, + { + "no packets for specified channel", + func() { + expIdentifiedPacketFees = nil + req = &types.QueryIncentivizedPacketsForChannelRequest{ + Pagination: &query.PageRequest{ + Limit: 5, + CountTotal: false, + }, + PortId: ibctesting.MockFeePort, + ChannelId: "channel-10", + QueryHeight: 0, + } + }, + true, + }, + } + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { + suite.SetupTest() // reset + + // setup + refundAcc := suite.chainA.SenderAccount.GetAddress() + packetFee := types.NewPacketFee(fee, refundAcc.String(), nil) + packetFees := types.NewPacketFees([]types.PacketFee{packetFee, packetFee, packetFee}) + + identifiedFees1 := types.NewIdentifiedPacketFees(channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1), packetFees.PacketFees) + identifiedFees2 := types.NewIdentifiedPacketFees(channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 2), packetFees.PacketFees) + identifiedFees3 := types.NewIdentifiedPacketFees(channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 3), packetFees.PacketFees) + + expIdentifiedPacketFees = append(expIdentifiedPacketFees, &identifiedFees1, &identifiedFees2, &identifiedFees3) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + for _, identifiedPacketFees := range expIdentifiedPacketFees { + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), identifiedPacketFees.PacketId, types.NewPacketFees(identifiedPacketFees.PacketFees)) + } + + tc.malleate() + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + + res, err := suite.queryClient.IncentivizedPacketsForChannel(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(expIdentifiedPacketFees, res.IncentivizedPackets) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryTotalRecvFees() { + var ( + req *types.QueryTotalRecvFeesRequest + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "packet not found", + func() { + req.PacketId = channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 100) + }, + false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), []string(nil)) + + packetFees := []types.PacketFee{packetFee, packetFee, packetFee} + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees(packetFees)) + + req = &types.QueryTotalRecvFeesRequest{ + PacketId: packetID, + } + + tc.malleate() + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.TotalRecvFees(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + + // expected total is three times the default recv fee + expectedFees := defaultRecvFee.Add(defaultRecvFee...).Add(defaultRecvFee...) + suite.Require().Equal(expectedFees, res.RecvFees) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryTotalAckFees() { + var ( + req *types.QueryTotalAckFeesRequest + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "packet not found", + func() { + req.PacketId = channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 100) + }, + false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), []string(nil)) + + packetFees := []types.PacketFee{packetFee, packetFee, packetFee} + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees(packetFees)) + + req = &types.QueryTotalAckFeesRequest{ + PacketId: packetID, + } + + tc.malleate() + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.TotalAckFees(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + + // expected total is three times the default acknowledgement fee + expectedFees := defaultAckFee.Add(defaultAckFee...).Add(defaultAckFee...) + suite.Require().Equal(expectedFees, res.AckFees) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryTotalTimeoutFees() { + var ( + req *types.QueryTotalTimeoutFeesRequest + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "packet not found", + func() { + req.PacketId = channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 100) + }, + false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), []string(nil)) + + packetFees := []types.PacketFee{packetFee, packetFee, packetFee} + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees(packetFees)) + + req = &types.QueryTotalTimeoutFeesRequest{ + PacketId: packetID, + } + + tc.malleate() + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.TotalTimeoutFees(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + + // expected total is three times the default acknowledgement fee + expectedFees := defaultTimeoutFee.Add(defaultTimeoutFee...).Add(defaultTimeoutFee...) + suite.Require().Equal(expectedFees, res.TimeoutFees) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryCounterpartyAddress() { + var ( + req *types.QueryCounterpartyAddressRequest + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "counterparty address not found: invalid channel", + func() { + req.ChannelId = "invalid-channel-id" + }, + false, + }, + { + "counterparty address not found: invalid address", + func() { + req.RelayerAddress = "invalid-addr" + }, + false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + pk := secp256k1.GenPrivKey().PubKey() + expectedCounterpartyAddr := sdk.AccAddress(pk.Address()) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress( + suite.chainA.GetContext(), + suite.chainA.SenderAccount.GetAddress().String(), + expectedCounterpartyAddr.String(), + suite.path.EndpointA.ChannelID, + ) + + req = &types.QueryCounterpartyAddressRequest{ + ChannelId: suite.path.EndpointA.ChannelID, + RelayerAddress: suite.chainA.SenderAccount.GetAddress().String(), + } + + tc.malleate() + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.CounterpartyAddress(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().Equal(expectedCounterpartyAddr.String(), res.CounterpartyAddress) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryFeeEnabledChannels() { + var ( + req *types.QueryFeeEnabledChannelsRequest + expFeeEnabledChannels []types.FeeEnabledChannel + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "success: empty pagination", + func() { + req = &types.QueryFeeEnabledChannelsRequest{} + }, + true, + }, + { + "success: with multiple fee enabled channels", + func() { + suite.coordinator.Setup(suite.pathAToC) + + expChannel := types.FeeEnabledChannel{ + PortId: suite.pathAToC.EndpointA.ChannelConfig.PortID, + ChannelId: suite.pathAToC.EndpointA.ChannelID, + } + + expFeeEnabledChannels = append(expFeeEnabledChannels, expChannel) + }, + true, + }, + { + "success: pagination with multiple fee enabled channels", + func() { + // start at index 1, as channel-0 is already added to expFeeEnabledChannels below + for i := 1; i < 10; i++ { + channelID := channeltypes.FormatChannelIdentifier(uint64(i)) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, channelID) + + expChannel := types.FeeEnabledChannel{ + PortId: ibctesting.MockFeePort, + ChannelId: channelID, + } + + if i < 5 { // add only the first 5 channels, as our default pagination limit is 5 + expFeeEnabledChannels = append(expFeeEnabledChannels, expChannel) + } + } + + suite.chainA.NextBlock() + }, + true, + }, + { + "empty response", + func() { + suite.chainA.GetSimApp().IBCFeeKeeper.DeleteFeeEnabled(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) + expFeeEnabledChannels = nil + + suite.chainA.NextBlock() + }, + true, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + suite.coordinator.Setup(suite.path) + + expChannel := types.FeeEnabledChannel{ + PortId: suite.path.EndpointA.ChannelConfig.PortID, + ChannelId: suite.path.EndpointA.ChannelID, + } + + expFeeEnabledChannels = []types.FeeEnabledChannel{expChannel} + + req = &types.QueryFeeEnabledChannelsRequest{ + Pagination: &query.PageRequest{ + Limit: 5, + CountTotal: false, + }, + QueryHeight: 0, + } + + tc.malleate() + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.FeeEnabledChannels(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().Equal(expFeeEnabledChannels, res.FeeEnabledChannels) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestQueryFeeEnabledChannel() { + var ( + req *types.QueryFeeEnabledChannelRequest + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "fee not enabled on channel", + func() { + req.ChannelId = "invalid-channel-id" + req.PortId = "invalid-port-id" + }, + false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() // reset + + suite.coordinator.Setup(suite.path) + + req = &types.QueryFeeEnabledChannelRequest{ + PortId: suite.path.EndpointA.ChannelConfig.PortID, + ChannelId: suite.path.EndpointA.ChannelID, + } + + tc.malleate() + + ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) + res, err := suite.queryClient.FeeEnabledChannel(ctx, req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().True(res.FeeEnabled) + } else { + suite.Require().False(res.FeeEnabled) + } + }) + } +} diff --git a/modules/apps/29-fee/keeper/keeper.go b/modules/apps/29-fee/keeper/keeper.go new file mode 100644 index 00000000000..e0317d3660a --- /dev/null +++ b/modules/apps/29-fee/keeper/keeper.go @@ -0,0 +1,335 @@ +package keeper + +import ( + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/tendermint/tendermint/libs/log" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v3/modules/core/24-host" +) + +// Middleware must implement types.ChannelKeeper and types.PortKeeper expected interfaces +// so that it can wrap IBC channel and port logic for underlying application. +var ( + _ types.ChannelKeeper = Keeper{} + _ types.PortKeeper = Keeper{} +) + +// Keeper defines the IBC fungible transfer keeper +type Keeper struct { + storeKey sdk.StoreKey + cdc codec.BinaryCodec + + authKeeper types.AccountKeeper + ics4Wrapper types.ICS4Wrapper + channelKeeper types.ChannelKeeper + portKeeper types.PortKeeper + bankKeeper types.BankKeeper +} + +// NewKeeper creates a new 29-fee Keeper instance +func NewKeeper( + cdc codec.BinaryCodec, key sdk.StoreKey, paramSpace paramtypes.Subspace, + ics4Wrapper types.ICS4Wrapper, channelKeeper types.ChannelKeeper, portKeeper types.PortKeeper, authKeeper types.AccountKeeper, bankKeeper types.BankKeeper, +) Keeper { + + return Keeper{ + cdc: cdc, + storeKey: key, + ics4Wrapper: ics4Wrapper, + channelKeeper: channelKeeper, + portKeeper: portKeeper, + authKeeper: authKeeper, + bankKeeper: bankKeeper, + } +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", "x/"+host.ModuleName+"-"+types.ModuleName) +} + +// BindPort defines a wrapper function for the port Keeper's function in +// order to expose it to module's InitGenesis function +func (k Keeper) BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability { + return k.portKeeper.BindPort(ctx, portID) +} + +// GetChannel wraps IBC ChannelKeeper's GetChannel function +func (k Keeper) GetChannel(ctx sdk.Context, portID, channelID string) (channeltypes.Channel, bool) { + return k.channelKeeper.GetChannel(ctx, portID, channelID) +} + +// GetNextSequenceSend wraps IBC ChannelKeeper's GetNextSequenceSend function +func (k Keeper) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) { + return k.channelKeeper.GetNextSequenceSend(ctx, portID, channelID) +} + +// GetFeeModuleAddress returns the ICS29 Fee ModuleAccount address +func (k Keeper) GetFeeModuleAddress() sdk.AccAddress { + return k.authKeeper.GetModuleAddress(types.ModuleName) +} + +// EscrowAccountHasBalance verifies if the escrow account has the provided fee. +func (k Keeper) EscrowAccountHasBalance(ctx sdk.Context, coins sdk.Coins) bool { + for _, coin := range coins { + if !k.bankKeeper.HasBalance(ctx, k.GetFeeModuleAddress(), coin) { + return false + } + } + + return true +} + +// lockFeeModule sets a flag to determine if fee handling logic should run for the given channel +// identified by channel and port identifiers. +// Please see ADR 004 for more information. +func (k Keeper) lockFeeModule(ctx sdk.Context) { + store := ctx.KVStore(k.storeKey) + store.Set(types.KeyLocked(), []byte{1}) +} + +// IsLocked indicates if the fee module is locked +// Please see ADR 004 for more information. +func (k Keeper) IsLocked(ctx sdk.Context) bool { + store := ctx.KVStore(k.storeKey) + return store.Has(types.KeyLocked()) +} + +// SetFeeEnabled sets a flag to determine if fee handling logic should run for the given channel +// identified by channel and port identifiers. +func (k Keeper) SetFeeEnabled(ctx sdk.Context, portID, channelID string) { + store := ctx.KVStore(k.storeKey) + store.Set(types.KeyFeeEnabled(portID, channelID), []byte{1}) +} + +// DeleteFeeEnabled deletes the fee enabled flag for a given portID and channelID +func (k Keeper) DeleteFeeEnabled(ctx sdk.Context, portID, channelID string) { + store := ctx.KVStore(k.storeKey) + store.Delete(types.KeyFeeEnabled(portID, channelID)) +} + +// IsFeeEnabled returns whether fee handling logic should be run for the given port. It will check the +// fee enabled flag for the given port and channel identifiers +func (k Keeper) IsFeeEnabled(ctx sdk.Context, portID, channelID string) bool { + store := ctx.KVStore(k.storeKey) + return store.Get(types.KeyFeeEnabled(portID, channelID)) != nil +} + +// GetAllFeeEnabledChannels returns a list of all ics29 enabled channels containing portID & channelID that are stored in state +func (k Keeper) GetAllFeeEnabledChannels(ctx sdk.Context) []types.FeeEnabledChannel { + store := ctx.KVStore(k.storeKey) + iterator := sdk.KVStorePrefixIterator(store, []byte(types.FeeEnabledKeyPrefix)) + defer iterator.Close() + + var enabledChArr []types.FeeEnabledChannel + for ; iterator.Valid(); iterator.Next() { + portID, channelID, err := types.ParseKeyFeeEnabled(string(iterator.Key())) + if err != nil { + panic(err) + } + ch := types.FeeEnabledChannel{ + PortId: portID, + ChannelId: channelID, + } + + enabledChArr = append(enabledChArr, ch) + } + + return enabledChArr +} + +// SetCounterpartyAddress maps the destination chain relayer address to the source relayer address +// The receiving chain must store the mapping from: address -> counterpartyAddress for the given channel +func (k Keeper) SetCounterpartyAddress(ctx sdk.Context, address, counterpartyAddress, channelID string) { + store := ctx.KVStore(k.storeKey) + store.Set(types.KeyCounterpartyRelayer(address, channelID), []byte(counterpartyAddress)) +} + +// GetCounterpartyAddress gets the relayer counterparty address given a destination relayer address +func (k Keeper) GetCounterpartyAddress(ctx sdk.Context, address, channelID string) (string, bool) { + store := ctx.KVStore(k.storeKey) + key := types.KeyCounterpartyRelayer(address, channelID) + + if !store.Has(key) { + return "", false + } + + addr := string(store.Get(key)) + return addr, true +} + +// GetAllRelayerAddresses returns all registered relayer addresses +func (k Keeper) GetAllRelayerAddresses(ctx sdk.Context) []types.RegisteredRelayerAddress { + store := ctx.KVStore(k.storeKey) + iterator := sdk.KVStorePrefixIterator(store, []byte(types.CounterpartyRelayerAddressKeyPrefix)) + defer iterator.Close() + + var registeredAddrArr []types.RegisteredRelayerAddress + for ; iterator.Valid(); iterator.Next() { + address, channelID, err := types.ParseKeyCounterpartyRelayer(string(iterator.Key())) + if err != nil { + panic(err) + } + + addr := types.RegisteredRelayerAddress{ + Address: address, + CounterpartyAddress: string(iterator.Value()), + ChannelId: channelID, + } + + registeredAddrArr = append(registeredAddrArr, addr) + } + + return registeredAddrArr +} + +// SetRelayerAddressForAsyncAck sets the forward relayer address during OnRecvPacket in case of async acknowledgement +func (k Keeper) SetRelayerAddressForAsyncAck(ctx sdk.Context, packetID channeltypes.PacketId, address string) { + store := ctx.KVStore(k.storeKey) + store.Set(types.KeyForwardRelayerAddress(packetID), []byte(address)) +} + +// GetRelayerAddressForAsyncAck gets forward relayer address for a particular packet +func (k Keeper) GetRelayerAddressForAsyncAck(ctx sdk.Context, packetID channeltypes.PacketId) (string, bool) { + store := ctx.KVStore(k.storeKey) + key := types.KeyForwardRelayerAddress(packetID) + if !store.Has(key) { + return "", false + } + + addr := string(store.Get(key)) + return addr, true +} + +// GetAllForwardRelayerAddresses returns all forward relayer addresses stored for async acknowledgements +func (k Keeper) GetAllForwardRelayerAddresses(ctx sdk.Context) []types.ForwardRelayerAddress { + store := ctx.KVStore(k.storeKey) + iterator := sdk.KVStorePrefixIterator(store, []byte(types.ForwardRelayerPrefix)) + defer iterator.Close() + + var forwardRelayerAddr []types.ForwardRelayerAddress + for ; iterator.Valid(); iterator.Next() { + packetID, err := types.ParseKeyForwardRelayerAddress(string(iterator.Key())) + if err != nil { + panic(err) + } + + addr := types.ForwardRelayerAddress{ + Address: string(iterator.Value()), + PacketId: packetID, + } + + forwardRelayerAddr = append(forwardRelayerAddr, addr) + } + + return forwardRelayerAddr +} + +// Deletes the forwardRelayerAddr associated with the packetID +func (k Keeper) DeleteForwardRelayerAddress(ctx sdk.Context, packetID channeltypes.PacketId) { + store := ctx.KVStore(k.storeKey) + key := types.KeyForwardRelayerAddress(packetID) + store.Delete(key) +} + +// GetFeesInEscrow returns all escrowed packet fees for a given packetID +func (k Keeper) GetFeesInEscrow(ctx sdk.Context, packetID channeltypes.PacketId) (types.PacketFees, bool) { + store := ctx.KVStore(k.storeKey) + key := types.KeyFeesInEscrow(packetID) + bz := store.Get(key) + if bz == nil { + return types.PacketFees{}, false + } + + return k.MustUnmarshalFees(bz), true +} + +// HasFeesInEscrow returns true if packet fees exist for the provided packetID +func (k Keeper) HasFeesInEscrow(ctx sdk.Context, packetID channeltypes.PacketId) bool { + store := ctx.KVStore(k.storeKey) + key := types.KeyFeesInEscrow(packetID) + + return store.Has(key) +} + +// SetFeesInEscrow sets the given packet fees in escrow keyed by the packetID +func (k Keeper) SetFeesInEscrow(ctx sdk.Context, packetID channeltypes.PacketId, fees types.PacketFees) { + store := ctx.KVStore(k.storeKey) + bz := k.MustMarshalFees(fees) + store.Set(types.KeyFeesInEscrow(packetID), bz) +} + +// DeleteFeesInEscrow deletes the fee associated with the given packetID +func (k Keeper) DeleteFeesInEscrow(ctx sdk.Context, packetID channeltypes.PacketId) { + store := ctx.KVStore(k.storeKey) + key := types.KeyFeesInEscrow(packetID) + store.Delete(key) +} + +// GetIdentifiedPacketFeesForChannel returns all the currently escrowed fees on a given channel. +func (k Keeper) GetIdentifiedPacketFeesForChannel(ctx sdk.Context, portID, channelID string) []types.IdentifiedPacketFees { + var identifiedPacketFees []types.IdentifiedPacketFees + + store := ctx.KVStore(k.storeKey) + iterator := sdk.KVStorePrefixIterator(store, types.KeyFeesInEscrowChannelPrefix(portID, channelID)) + + defer iterator.Close() + for ; iterator.Valid(); iterator.Next() { + packetID, err := types.ParseKeyFeesInEscrow(string(iterator.Key())) + if err != nil { + panic(err) + } + + packetFees := k.MustUnmarshalFees(iterator.Value()) + + identifiedFee := types.NewIdentifiedPacketFees(packetID, packetFees.PacketFees) + identifiedPacketFees = append(identifiedPacketFees, identifiedFee) + } + + return identifiedPacketFees +} + +// GetAllIdentifiedPacketFees returns a list of all IdentifiedPacketFees that are stored in state +func (k Keeper) GetAllIdentifiedPacketFees(ctx sdk.Context) []types.IdentifiedPacketFees { + store := ctx.KVStore(k.storeKey) + iterator := sdk.KVStorePrefixIterator(store, []byte(types.FeesInEscrowPrefix)) + defer iterator.Close() + + var identifiedFees []types.IdentifiedPacketFees + for ; iterator.Valid(); iterator.Next() { + packetID, err := types.ParseKeyFeesInEscrow(string(iterator.Key())) + if err != nil { + panic(err) + } + + feesInEscrow := k.MustUnmarshalFees(iterator.Value()) + + identifiedFee := types.IdentifiedPacketFees{ + PacketId: packetID, + PacketFees: feesInEscrow.PacketFees, + } + + identifiedFees = append(identifiedFees, identifiedFee) + } + + return identifiedFees +} + +// MustMarshalFees attempts to encode a Fee object and returns the +// raw encoded bytes. It panics on error. +func (k Keeper) MustMarshalFees(fees types.PacketFees) []byte { + return k.cdc.MustMarshal(&fees) +} + +// MustUnmarshalFees attempts to decode and return a Fee object from +// raw encoded bytes. It panics on error. +func (k Keeper) MustUnmarshalFees(bz []byte) types.PacketFees { + var fees types.PacketFees + k.cdc.MustUnmarshal(bz, &fees) + return fees +} diff --git a/modules/apps/29-fee/keeper/keeper_test.go b/modules/apps/29-fee/keeper/keeper_test.go new file mode 100644 index 00000000000..7446ecbab64 --- /dev/null +++ b/modules/apps/29-fee/keeper/keeper_test.go @@ -0,0 +1,259 @@ +package keeper_test + +import ( + "fmt" + "testing" + + "github.com/cosmos/cosmos-sdk/baseapp" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibcmock "github.com/cosmos/ibc-go/v3/testing/mock" +) + +var ( + defaultRecvFee = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(100)}} + defaultAckFee = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(200)}} + defaultTimeoutFee = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(300)}} + invalidCoins = sdk.Coins{sdk.Coin{Denom: "invalidDenom", Amount: sdk.NewInt(100)}} +) + +type KeeperTestSuite struct { + suite.Suite + + coordinator *ibctesting.Coordinator + + // testing chains used for convenience and readability + chainA *ibctesting.TestChain + chainB *ibctesting.TestChain + chainC *ibctesting.TestChain + + path *ibctesting.Path + pathAToC *ibctesting.Path + + queryClient types.QueryClient +} + +func (suite *KeeperTestSuite) SetupTest() { + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 3) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(2)) + suite.chainC = suite.coordinator.GetChain(ibctesting.GetChainID(3)) + + path := ibctesting.NewPath(suite.chainA, suite.chainB) + mockFeeVersion := string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})) + path.EndpointA.ChannelConfig.Version = mockFeeVersion + path.EndpointB.ChannelConfig.Version = mockFeeVersion + path.EndpointA.ChannelConfig.PortID = ibctesting.MockFeePort + path.EndpointB.ChannelConfig.PortID = ibctesting.MockFeePort + suite.path = path + + path = ibctesting.NewPath(suite.chainA, suite.chainC) + path.EndpointA.ChannelConfig.Version = mockFeeVersion + path.EndpointB.ChannelConfig.Version = mockFeeVersion + path.EndpointA.ChannelConfig.PortID = ibctesting.MockFeePort + path.EndpointB.ChannelConfig.PortID = ibctesting.MockFeePort + suite.pathAToC = path + + queryHelper := baseapp.NewQueryServerTestHelper(suite.chainA.GetContext(), suite.chainA.GetSimApp().InterfaceRegistry()) + types.RegisterQueryServer(queryHelper, suite.chainA.GetSimApp().IBCFeeKeeper) + suite.queryClient = types.NewQueryClient(queryHelper) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} + +// helper function +func lockFeeModule(chain *ibctesting.TestChain) { + ctx := chain.GetContext() + storeKey := chain.GetSimApp().GetKey(types.ModuleName) + store := ctx.KVStore(storeKey) + store.Set(types.KeyLocked(), []byte{1}) +} + +func (suite *KeeperTestSuite) TestEscrowAccountHasBalance() { + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + suite.Require().False(suite.chainA.GetSimApp().IBCFeeKeeper.EscrowAccountHasBalance(suite.chainA.GetContext(), fee.Total())) + + // set fee in escrow account + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), types.ModuleName, fee.Total()) + suite.Require().Nil(err) + + suite.Require().True(suite.chainA.GetSimApp().IBCFeeKeeper.EscrowAccountHasBalance(suite.chainA.GetContext(), fee.Total())) + + // increase ack fee + fee.AckFee = fee.AckFee.Add(defaultAckFee...) + suite.Require().False(suite.chainA.GetSimApp().IBCFeeKeeper.EscrowAccountHasBalance(suite.chainA.GetContext(), fee.Total())) +} + +func (suite *KeeperTestSuite) TestFeesInEscrow() { + suite.coordinator.Setup(suite.path) + + // escrow five fees for packet sequence 1 + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), nil) + packetFees := []types.PacketFee{packetFee, packetFee, packetFee, packetFee, packetFee} + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees(packetFees)) + + // retrieve the fees in escrow and assert the length of PacketFees + feesInEscrow, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetFeesInEscrow(suite.chainA.GetContext(), packetID) + suite.Require().True(found) + suite.Require().Len(feesInEscrow.PacketFees, 5, fmt.Sprintf("expected length 5, but got %d", len(feesInEscrow.PacketFees))) + + // delete fees for packet sequence 1 + suite.chainA.GetSimApp().IBCFeeKeeper.DeleteFeesInEscrow(suite.chainA.GetContext(), packetID) + hasFeesInEscrow := suite.chainA.GetSimApp().IBCFeeKeeper.HasFeesInEscrow(suite.chainA.GetContext(), packetID) + suite.Require().False(hasFeesInEscrow) +} + +func (suite *KeeperTestSuite) TestIsLocked() { + ctx := suite.chainA.GetContext() + suite.Require().False(suite.chainA.GetSimApp().IBCFeeKeeper.IsLocked(ctx)) + + lockFeeModule(suite.chainA) + + suite.Require().True(suite.chainA.GetSimApp().IBCFeeKeeper.IsLocked(ctx)) +} + +func (suite *KeeperTestSuite) TestGetIdentifiedPacketFeesForChannel() { + suite.coordinator.Setup(suite.path) + + // escrow a fee + refundAcc := suite.chainA.SenderAccount.GetAddress() + packetID1 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + packetID2 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 2) + packetID5 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 51) + + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + // escrow the packet fee + packetFee := types.NewPacketFee(fee, refundAcc.String(), []string{}) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID1, types.NewPacketFees([]types.PacketFee{packetFee})) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID2, types.NewPacketFees([]types.PacketFee{packetFee})) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID5, types.NewPacketFees([]types.PacketFee{packetFee})) + + // set fees in escrow for packetIDs on different channel + diffChannel := "channel-1" + diffPacketID1 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, diffChannel, 1) + diffPacketID2 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, diffChannel, 2) + diffPacketID5 := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, diffChannel, 5) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), diffPacketID1, types.NewPacketFees([]types.PacketFee{packetFee})) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), diffPacketID2, types.NewPacketFees([]types.PacketFee{packetFee})) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), diffPacketID5, types.NewPacketFees([]types.PacketFee{packetFee})) + + expectedFees := []types.IdentifiedPacketFees{ + { + PacketId: packetID1, + PacketFees: []types.PacketFee{ + { + Fee: fee, + RefundAddress: refundAcc.String(), + Relayers: nil, + }, + }, + }, + { + PacketId: packetID2, + PacketFees: []types.PacketFee{ + { + Fee: fee, + RefundAddress: refundAcc.String(), + Relayers: nil, + }, + }, + }, + { + PacketId: packetID5, + PacketFees: []types.PacketFee{ + { + Fee: fee, + RefundAddress: refundAcc.String(), + Relayers: nil, + }, + }, + }, + } + + identifiedFees := suite.chainA.GetSimApp().IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(suite.chainA.GetContext(), suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID) + suite.Require().Len(identifiedFees, len(expectedFees)) + suite.Require().Equal(identifiedFees, expectedFees) +} + +func (suite *KeeperTestSuite) TestGetAllIdentifiedPacketFees() { + suite.coordinator.Setup(suite.path) + + // escrow a fee + refundAcc := suite.chainA.SenderAccount.GetAddress() + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + // escrow the packet fee + packetFee := types.NewPacketFee(fee, refundAcc.String(), []string{}) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, types.NewPacketFees([]types.PacketFee{packetFee})) + + expectedFees := []types.IdentifiedPacketFees{ + { + PacketId: packetID, + PacketFees: []types.PacketFee{ + { + Fee: fee, + RefundAddress: refundAcc.String(), + Relayers: nil, + }, + }, + }, + } + + identifiedFees := suite.chainA.GetSimApp().IBCFeeKeeper.GetAllIdentifiedPacketFees(suite.chainA.GetContext()) + suite.Require().Len(identifiedFees, len(expectedFees)) + suite.Require().Equal(identifiedFees, expectedFees) +} + +func (suite *KeeperTestSuite) TestGetAllFeeEnabledChannels() { + validPortId := "ibcmoduleport" + // set two channels enabled + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), ibctesting.MockFeePort, ibctesting.FirstChannelID) + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeeEnabled(suite.chainA.GetContext(), validPortId, ibctesting.FirstChannelID) + + expectedCh := []types.FeeEnabledChannel{ + { + PortId: validPortId, + ChannelId: ibctesting.FirstChannelID, + }, + { + PortId: ibctesting.MockFeePort, + ChannelId: ibctesting.FirstChannelID, + }, + } + + ch := suite.chainA.GetSimApp().IBCFeeKeeper.GetAllFeeEnabledChannels(suite.chainA.GetContext()) + suite.Require().Len(ch, len(expectedCh)) + suite.Require().Equal(ch, expectedCh) +} + +func (suite *KeeperTestSuite) TestGetAllRelayerAddresses() { + sender := suite.chainA.SenderAccount.GetAddress().String() + counterparty := suite.chainB.SenderAccount.GetAddress().String() + + suite.chainA.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainA.GetContext(), sender, counterparty, ibctesting.FirstChannelID) + + expectedAddr := []types.RegisteredRelayerAddress{ + { + Address: sender, + CounterpartyAddress: counterparty, + ChannelId: ibctesting.FirstChannelID, + }, + } + + addr := suite.chainA.GetSimApp().IBCFeeKeeper.GetAllRelayerAddresses(suite.chainA.GetContext()) + suite.Require().Len(addr, len(expectedAddr)) + suite.Require().Equal(addr, expectedAddr) +} diff --git a/modules/apps/29-fee/keeper/msg_server.go b/modules/apps/29-fee/keeper/msg_server.go new file mode 100644 index 00000000000..69f6520c759 --- /dev/null +++ b/modules/apps/29-fee/keeper/msg_server.go @@ -0,0 +1,79 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" +) + +var _ types.MsgServer = Keeper{} + +// RegisterCounterpartyAddress is called by the relayer on each channelEnd and allows them to specify their counterparty address before relaying +// This ensures they will be properly compensated for forward relaying on the source chain since the destination chain must send back relayer's source address (counterparty address) in acknowledgement +// This function may be called more than once by relayers, in which case, the previous counterparty address will be overwritten by the new counterparty address +func (k Keeper) RegisterCounterpartyAddress(goCtx context.Context, msg *types.MsgRegisterCounterpartyAddress) (*types.MsgRegisterCounterpartyAddressResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + k.SetCounterpartyAddress( + ctx, msg.Address, msg.CounterpartyAddress, msg.ChannelId, + ) + + k.Logger(ctx).Info("Registering counterparty address for relayer.", "Address:", msg.Address, "Counterparty Address:", msg.CounterpartyAddress) + + return &types.MsgRegisterCounterpartyAddressResponse{}, nil +} + +// PayPacketFee defines a rpc handler method for MsgPayPacketFee +// PayPacketFee is an open callback that may be called by any module/user that wishes to escrow funds in order to relay the packet with the next sequence +func (k Keeper) PayPacketFee(goCtx context.Context, msg *types.MsgPayPacketFee) (*types.MsgPayPacketFeeResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if !k.IsFeeEnabled(ctx, msg.SourcePortId, msg.SourceChannelId) { + // users may not escrow fees on this channel. Must send packets without a fee message + return nil, types.ErrFeeNotEnabled + } + + if k.IsLocked(ctx) { + return nil, types.ErrFeeModuleLocked + } + + // get the next sequence + sequence, found := k.GetNextSequenceSend(ctx, msg.SourcePortId, msg.SourceChannelId) + if !found { + return nil, channeltypes.ErrSequenceSendNotFound + } + + packetID := channeltypes.NewPacketId(msg.SourcePortId, msg.SourceChannelId, sequence) + packetFee := types.NewPacketFee(msg.Fee, msg.Signer, msg.Relayers) + + if err := k.escrowPacketFee(ctx, packetID, packetFee); err != nil { + return nil, err + } + + return &types.MsgPayPacketFeeResponse{}, nil +} + +// PayPacketFee defines a rpc handler method for MsgPayPacketFee +// PayPacketFee is an open callback that may be called by any module/user that wishes to escrow funds in order to +// incentivize the relaying of a known packet +func (k Keeper) PayPacketFeeAsync(goCtx context.Context, msg *types.MsgPayPacketFeeAsync) (*types.MsgPayPacketFeeAsyncResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if !k.IsFeeEnabled(ctx, msg.PacketId.PortId, msg.PacketId.ChannelId) { + // users may not escrow fees on this channel. Must send packets without a fee message + return nil, types.ErrFeeNotEnabled + } + + if k.IsLocked(ctx) { + return nil, types.ErrFeeModuleLocked + } + + if err := k.escrowPacketFee(ctx, msg.PacketId, msg.PacketFee); err != nil { + return nil, err + } + + return &types.MsgPayPacketFeeAsyncResponse{}, nil +} diff --git a/modules/apps/29-fee/keeper/msg_server_test.go b/modules/apps/29-fee/keeper/msg_server_test.go new file mode 100644 index 00000000000..8a927559a51 --- /dev/null +++ b/modules/apps/29-fee/keeper/msg_server_test.go @@ -0,0 +1,310 @@ +package keeper_test + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" +) + +func (suite *KeeperTestSuite) TestRegisterCounterpartyAddress() { + var ( + sender string + counterparty string + ) + + testCases := []struct { + name string + expPass bool + malleate func() + }{ + { + "success", + true, + func() {}, + }, + { + "counterparty is an arbitrary string", + true, + func() { counterparty = "arbitrary-string" }, + }, + } + + for _, tc := range testCases { + suite.SetupTest() + ctx := suite.chainA.GetContext() + + sender = suite.chainA.SenderAccount.GetAddress().String() + counterparty = suite.chainB.SenderAccount.GetAddress().String() + tc.malleate() + msg := types.NewMsgRegisterCounterpartyAddress(sender, counterparty, ibctesting.FirstChannelID) + + _, err := suite.chainA.SendMsgs(msg) + + if tc.expPass { + suite.Require().NoError(err) // message committed + + counterpartyAddress, _ := suite.chainA.GetSimApp().IBCFeeKeeper.GetCounterpartyAddress(ctx, suite.chainA.SenderAccount.GetAddress().String(), ibctesting.FirstChannelID) + suite.Require().Equal(counterparty, counterpartyAddress) + } else { + suite.Require().Error(err) + } + } +} + +func (suite *KeeperTestSuite) TestPayPacketFee() { + var ( + expEscrowBalance sdk.Coins + expFeesInEscrow []types.PacketFee + msg *types.MsgPayPacketFee + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "success with existing packet fees in escrow", + func() { + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), nil) + feesInEscrow := types.NewPacketFees([]types.PacketFee{packetFee}) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, feesInEscrow) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expEscrowBalance = expEscrowBalance.Add(fee.Total()...) + expFeesInEscrow = append(expFeesInEscrow, packetFee) + }, + true, + }, + { + "fee module is locked", + func() { + lockFeeModule(suite.chainA) + }, + false, + }, + { + "fee module disabled on channel", + func() { + msg.SourcePortId = "invalid-port" + msg.SourceChannelId = "invalid-channel" + }, + false, + }, + { + "invalid refund address", + func() { + msg.Signer = "invalid-address" + }, + false, + }, + { + "refund account does not exist", + func() { + msg.Signer = suite.chainB.SenderAccount.GetAddress().String() + }, + false, + }, + { + "acknowledgement fee balance not found", + func() { + msg.Fee.AckFee = invalidCoins + }, + false, + }, + { + "receive fee balance not found", + func() { + msg.Fee.RecvFee = invalidCoins + }, + false, + }, + { + "timeout fee balance not found", + func() { + msg.Fee.TimeoutFee = invalidCoins + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) // setup channel + + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + msg = types.NewMsgPayPacketFee( + fee, + suite.path.EndpointA.ChannelConfig.PortID, + suite.path.EndpointA.ChannelID, + suite.chainA.SenderAccount.GetAddress().String(), + nil, + ) + + expEscrowBalance = fee.Total() + expPacketFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), nil) + expFeesInEscrow = []types.PacketFee{expPacketFee} + + tc.malleate() + + _, err := suite.chainA.GetSimApp().IBCFeeKeeper.PayPacketFee(sdk.WrapSDKContext(suite.chainA.GetContext()), msg) + + if tc.expPass { + suite.Require().NoError(err) // message committed + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + feesInEscrow, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetFeesInEscrow(suite.chainA.GetContext(), packetID) + suite.Require().True(found) + suite.Require().Equal(expFeesInEscrow, feesInEscrow.PacketFees) + + escrowBalance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(expEscrowBalance.AmountOf(sdk.DefaultBondDenom), escrowBalance.Amount) + } else { + suite.Require().Error(err) + + escrowBalance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(sdk.NewInt(0), escrowBalance.Amount) + } + }) + } +} + +func (suite *KeeperTestSuite) TestPayPacketFeeAsync() { + var ( + expEscrowBalance sdk.Coins + expFeesInEscrow []types.PacketFee + msg *types.MsgPayPacketFeeAsync + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "success with existing packet fees in escrow", + func() { + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), nil) + feesInEscrow := types.NewPacketFees([]types.PacketFee{packetFee}) + + suite.chainA.GetSimApp().IBCFeeKeeper.SetFeesInEscrow(suite.chainA.GetContext(), packetID, feesInEscrow) + err := suite.chainA.GetSimApp().BankKeeper.SendCoinsFromAccountToModule(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), types.ModuleName, fee.Total()) + suite.Require().NoError(err) + + expEscrowBalance = expEscrowBalance.Add(fee.Total()...) + expFeesInEscrow = append(expFeesInEscrow, packetFee) + }, + true, + }, + { + "fee module is locked", + func() { + lockFeeModule(suite.chainA) + }, + false, + }, + { + "fee module disabled on channel", + func() { + msg.PacketId.PortId = "invalid-port" + msg.PacketId.ChannelId = "invalid-channel" + }, + false, + }, + { + "invalid refund address", + func() { + msg.PacketFee.RefundAddress = "invalid-address" + }, + false, + }, + { + "refund account does not exist", + func() { + msg.PacketFee.RefundAddress = suite.chainB.SenderAccount.GetAddress().String() + }, + false, + }, + { + "acknowledgement fee balance not found", + func() { + msg.PacketFee.Fee.AckFee = invalidCoins + }, + false, + }, + { + "receive fee balance not found", + func() { + msg.PacketFee.Fee.RecvFee = invalidCoins + }, + false, + }, + { + "timeout fee balance not found", + func() { + msg.PacketFee.Fee.TimeoutFee = invalidCoins + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) // setup channel + + packetID := channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, suite.chainA.SenderAccount.GetAddress().String(), nil) + + expEscrowBalance = fee.Total() + expFeesInEscrow = []types.PacketFee{packetFee} + msg = types.NewMsgPayPacketFeeAsync(packetID, packetFee) + + tc.malleate() + + _, err := suite.chainA.GetSimApp().IBCFeeKeeper.PayPacketFeeAsync(sdk.WrapSDKContext(suite.chainA.GetContext()), msg) + + if tc.expPass { + suite.Require().NoError(err) // message committed + + feesInEscrow, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetFeesInEscrow(suite.chainA.GetContext(), packetID) + suite.Require().True(found) + suite.Require().Equal(expFeesInEscrow, feesInEscrow.PacketFees) + + escrowBalance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(expEscrowBalance.AmountOf(sdk.DefaultBondDenom), escrowBalance.Amount) + } else { + suite.Require().Error(err) + + escrowBalance := suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.GetSimApp().IBCFeeKeeper.GetFeeModuleAddress(), sdk.DefaultBondDenom) + suite.Require().Equal(sdk.NewInt(0), escrowBalance.Amount) + } + }) + } +} diff --git a/modules/apps/29-fee/keeper/relay.go b/modules/apps/29-fee/keeper/relay.go new file mode 100644 index 00000000000..476497bfbbb --- /dev/null +++ b/modules/apps/29-fee/keeper/relay.go @@ -0,0 +1,65 @@ +package keeper + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported" +) + +// SendPacket wraps IBC ChannelKeeper's SendPacket function +func (k Keeper) SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI) error { + return k.ics4Wrapper.SendPacket(ctx, chanCap, packet) +} + +// WriteAcknowledgement wraps IBC ChannelKeeper's WriteAcknowledgement function +// ICS29 WriteAcknowledgement is used for asynchronous acknowledgements +func (k Keeper) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error { + if !k.IsFeeEnabled(ctx, packet.GetDestPort(), packet.GetDestChannel()) { + // ics4Wrapper may be core IBC or higher-level middleware + return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, packet, acknowledgement) + } + + packetID := channeltypes.NewPacketId(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + + // retrieve the forward relayer that was stored in `onRecvPacket` + relayer, found := k.GetRelayerAddressForAsyncAck(ctx, packetID) + if !found { + return sdkerrors.Wrapf(types.ErrRelayerNotFoundForAsyncAck, "no relayer address stored for async acknowledgement for packet with portID: %s, channelID: %s, sequence: %d", packetID.PortId, packetID.ChannelId, packetID.Sequence) + } + + // it is possible that a relayer has not registered a counterparty address. + // if there is no registered counterparty address then write acknowledgement with empty relayer address and refund recv_fee. + forwardRelayer, _ := k.GetCounterpartyAddress(ctx, relayer, packet.GetDestChannel()) + + ack := types.NewIncentivizedAcknowledgement(forwardRelayer, acknowledgement.Acknowledgement(), acknowledgement.Success()) + + k.DeleteForwardRelayerAddress(ctx, packetID) + + // ics4Wrapper may be core IBC or higher-level middleware + return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, packet, ack) +} + +// GetAppVersion returns the underlying application version. +func (k Keeper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + version, found := k.ics4Wrapper.GetAppVersion(ctx, portID, channelID) + if !found { + return "", false + } + + if !k.IsFeeEnabled(ctx, portID, channelID) { + return version, true + } + + var metadata types.Metadata + if err := types.ModuleCdc.UnmarshalJSON([]byte(version), &metadata); err != nil { + panic(fmt.Errorf("unable to unmarshal metadata for fee enabled channel: %w", err)) + } + + return metadata.AppVersion, true +} diff --git a/modules/apps/29-fee/keeper/relay_test.go b/modules/apps/29-fee/keeper/relay_test.go new file mode 100644 index 00000000000..d0a9e620f9d --- /dev/null +++ b/modules/apps/29-fee/keeper/relay_test.go @@ -0,0 +1,172 @@ +package keeper_test + +import ( + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibcmock "github.com/cosmos/ibc-go/v3/testing/mock" +) + +func (suite *KeeperTestSuite) TestWriteAcknowledgementAsync() { + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() { + suite.chainB.GetSimApp().IBCFeeKeeper.SetRelayerAddressForAsyncAck(suite.chainB.GetContext(), channeltypes.NewPacketId(suite.path.EndpointB.ChannelConfig.PortID, suite.path.EndpointB.ChannelID, 1), suite.chainA.SenderAccount.GetAddress().String()) + suite.chainB.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), suite.chainB.SenderAccount.GetAddress().String(), suite.path.EndpointB.ChannelID) + }, + true, + }, + { + "relayer address not set for async WriteAcknowledgement", + func() {}, + false, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + + // open incentivized channels + // setup pathAToC (chainA -> chainC) first in order to have different channel IDs for chainA & chainB + suite.coordinator.Setup(suite.pathAToC) + // setup path for chainA -> chainB + suite.coordinator.Setup(suite.path) + + // build packet + timeoutTimestamp := ^uint64(0) + packet := channeltypes.NewPacket( + []byte("packetData"), + 1, + suite.path.EndpointA.ChannelConfig.PortID, + suite.path.EndpointA.ChannelID, + suite.path.EndpointB.ChannelConfig.PortID, + suite.path.EndpointB.ChannelID, + clienttypes.ZeroHeight(), + timeoutTimestamp, + ) + + ack := channeltypes.NewResultAcknowledgement([]byte("success")) + chanCap := suite.chainB.GetChannelCapability(suite.path.EndpointB.ChannelConfig.PortID, suite.path.EndpointB.ChannelID) + + // malleate test case + tc.malleate() + + err := suite.chainB.GetSimApp().IBCFeeKeeper.WriteAcknowledgement(suite.chainB.GetContext(), chanCap, packet, ack) + + if tc.expPass { + suite.Require().NoError(err) + _, found := suite.chainB.GetSimApp().IBCFeeKeeper.GetRelayerAddressForAsyncAck(suite.chainB.GetContext(), channeltypes.NewPacketId(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID, 1)) + suite.Require().False(found) + + expectedAck := types.NewIncentivizedAcknowledgement(suite.chainB.SenderAccount.GetAddress().String(), ack.Acknowledgement(), ack.Success()) + commitedAck, _ := suite.chainB.GetSimApp().GetIBCKeeper().ChannelKeeper.GetPacketAcknowledgement(suite.chainB.GetContext(), packet.DestinationPort, packet.DestinationChannel, 1) + suite.Require().Equal(commitedAck, channeltypes.CommitAcknowledgement(expectedAck.Acknowledgement())) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *KeeperTestSuite) TestWriteAcknowledgementAsyncFeeDisabled() { + // open incentivized channel + suite.coordinator.Setup(suite.path) + suite.chainB.GetSimApp().IBCFeeKeeper.DeleteFeeEnabled(suite.chainB.GetContext(), suite.path.EndpointB.ChannelConfig.PortID, "channel-0") + + // build packet + timeoutTimestamp := ^uint64(0) + packet := channeltypes.NewPacket( + []byte("packetData"), + 1, + suite.path.EndpointA.ChannelConfig.PortID, + suite.path.EndpointA.ChannelID, + suite.path.EndpointB.ChannelConfig.PortID, + suite.path.EndpointB.ChannelID, + clienttypes.ZeroHeight(), + timeoutTimestamp, + ) + + ack := channeltypes.NewResultAcknowledgement([]byte("success")) + chanCap := suite.chainB.GetChannelCapability(suite.path.EndpointB.ChannelConfig.PortID, suite.path.EndpointB.ChannelID) + + err := suite.chainB.GetSimApp().IBCFeeKeeper.WriteAcknowledgement(suite.chainB.GetContext(), chanCap, packet, ack) + suite.Require().NoError(err) + + packetAck, _ := suite.chainB.GetSimApp().GetIBCKeeper().ChannelKeeper.GetPacketAcknowledgement(suite.chainB.GetContext(), packet.DestinationPort, packet.DestinationChannel, 1) + suite.Require().Equal(packetAck, channeltypes.CommitAcknowledgement(ack.Acknowledgement())) +} + +func (suite *KeeperTestSuite) TestGetAppVersion() { + var ( + portID string + channelID string + expAppVersion string + ) + testCases := []struct { + name string + malleate func() + expFound bool + }{ + { + "success for fee enabled channel", + func() { + expAppVersion = ibcmock.Version + }, + true, + }, + { + "success for non fee enabled channel", + func() { + path := ibctesting.NewPath(suite.chainA, suite.chainB) + path.EndpointA.ChannelConfig.PortID = ibctesting.MockFeePort + path.EndpointB.ChannelConfig.PortID = ibctesting.MockFeePort + // by default a new path uses a non fee channel + suite.coordinator.Setup(path) + portID = path.EndpointA.ChannelConfig.PortID + channelID = path.EndpointA.ChannelID + + expAppVersion = ibcmock.Version + }, + true, + }, + { + "channel does not exist", + func() { + channelID = "does not exist" + }, + false, + }, + } + + for _, tc := range testCases { + tc := tc + suite.Run(tc.name, func() { + suite.SetupTest() + suite.coordinator.Setup(suite.path) + + portID = suite.path.EndpointA.ChannelConfig.PortID + channelID = suite.path.EndpointA.ChannelID + + // malleate test case + tc.malleate() + + appVersion, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetAppVersion(suite.chainA.GetContext(), portID, channelID) + + if tc.expFound { + suite.Require().True(found) + suite.Require().Equal(expAppVersion, appVersion) + } else { + suite.Require().False(found) + suite.Require().Empty(appVersion) + } + }) + } +} diff --git a/modules/apps/29-fee/module.go b/modules/apps/29-fee/module.go new file mode 100644 index 00000000000..e493e047837 --- /dev/null +++ b/modules/apps/29-fee/module.go @@ -0,0 +1,172 @@ +package fee + +import ( + "context" + "encoding/json" + "fmt" + "math/rand" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + abci "github.com/tendermint/tendermint/abci/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/client/cli" + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/keeper" + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + porttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types" +) + +var ( + _ module.AppModule = AppModule{} + _ porttypes.IBCModule = IBCModule{} + _ module.AppModuleBasic = AppModuleBasic{} +) + +// AppModuleBasic is the 29-fee AppModuleBasic +type AppModuleBasic struct{} + +// Name implements AppModuleBasic interface +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec implements AppModuleBasic interface +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers module concrete types into protobuf Any. +func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { + types.RegisterInterfaces(registry) +} + +// DefaultGenesis returns default genesis state as raw bytes for the ibc +// 29-fee module. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesisState()) +} + +// ValidateGenesis performs genesis state validation for the 29-fee module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var gs types.GenesisState + if err := cdc.UnmarshalJSON(bz, &gs); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + + return gs.Validate() +} + +// RegisterRESTRoutes implements AppModuleBasic interface +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for ics29 fee module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) +} + +// GetTxCmd implements AppModuleBasic interface +func (AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.NewTxCmd() +} + +// GetQueryCmd implements AppModuleBasic interface +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +// AppModule represents the AppModule for this module +type AppModule struct { + AppModuleBasic + keeper keeper.Keeper +} + +// NewAppModule creates a new 29-fee module +func NewAppModule(k keeper.Keeper) AppModule { + return AppModule{ + keeper: k, + } +} + +// RegisterInvariants implements the AppModule interface +func (AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { +} + +// Route implements the AppModule interface +func (am AppModule) Route() sdk.Route { + return sdk.Route{} +} + +// QuerierRoute implements the AppModule interface +func (AppModule) QuerierRoute() string { + return types.QuerierRoute +} + +// LegacyQuerierHandler implements the AppModule interface +func (am AppModule) LegacyQuerierHandler(*codec.LegacyAmino) sdk.Querier { + return nil +} + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), am.keeper) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// InitGenesis performs genesis initialization for the ibc-29-fee module. It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { + var genesisState types.GenesisState + cdc.MustUnmarshalJSON(data, &genesisState) + am.keeper.InitGenesis(ctx, genesisState) + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the exported genesis state as raw bytes for the ibc-29-fee +// module. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + gs := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(gs) +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock implements the AppModule interface +func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { +} + +// EndBlock implements the AppModule interface +func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.ValidatorUpdate { + return []abci.ValidatorUpdate{} +} + +// AppModuleSimulation functions + +// GenerateGenesisState creates a randomized GenState of the 29-fee module. +func (AppModule) GenerateGenesisState(_ *module.SimulationState) { +} + +// ProposalContents doesn't return any content functions for governance proposals. +func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { + return nil +} + +// RandomizedParams creates randomized ibc-29-fee param changes for the simulator. +func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { + return nil +} + +// RegisterStoreDecoder registers a decoder for 29-fee module's types +func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) { +} + +// WeightedOperations returns the all the 29-fee module operations with their respective weights. +func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + return nil +} diff --git a/modules/apps/29-fee/transfer_test.go b/modules/apps/29-fee/transfer_test.go new file mode 100644 index 00000000000..9d7557fd6c4 --- /dev/null +++ b/modules/apps/29-fee/transfer_test.go @@ -0,0 +1,72 @@ +package fee_test + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + transfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" +) + +// Integration test to ensure ics29 works with ics20 +func (suite *FeeTestSuite) TestFeeTransfer() { + path := ibctesting.NewPath(suite.chainA, suite.chainB) + feeTransferVersion := string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: transfertypes.Version})) + path.EndpointA.ChannelConfig.Version = feeTransferVersion + path.EndpointB.ChannelConfig.Version = feeTransferVersion + path.EndpointA.ChannelConfig.PortID = transfertypes.PortID + path.EndpointB.ChannelConfig.PortID = transfertypes.PortID + + suite.coordinator.Setup(path) + + // set up coin & ics20 packet + coin := ibctesting.TestCoin + fee := types.Fee{ + RecvFee: defaultRecvFee, + AckFee: defaultAckFee, + TimeoutFee: defaultTimeoutFee, + } + + msgs := []sdk.Msg{ + types.NewMsgPayPacketFee(fee, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, suite.chainA.SenderAccount.GetAddress().String(), nil), + transfertypes.NewMsgTransfer(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, coin, suite.chainA.SenderAccount.GetAddress().String(), suite.chainB.SenderAccount.GetAddress().String(), clienttypes.NewHeight(0, 100), 0), + } + res, err := suite.chainA.SendMsgs(msgs...) + suite.Require().NoError(err) // message committed + + // after incentivizing the packets + originalChainASenderAccountBalance := sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), ibctesting.TestCoin.Denom)) + + packet, err := ibctesting.ParsePacketFromEvents(res.GetEvents()) + suite.Require().NoError(err) + + // register counterparty address on chainB + // relayerAddress is address of sender account on chainB, but we will use it on chainA + // to differentiate from the chainA.SenderAccount for checking successful relay payouts + relayerAddress := suite.chainB.SenderAccount.GetAddress() + + msgRegister := types.NewMsgRegisterCounterpartyAddress(suite.chainB.SenderAccount.GetAddress().String(), relayerAddress.String(), ibctesting.FirstChannelID) + _, err = suite.chainB.SendMsgs(msgRegister) + suite.Require().NoError(err) // message committed + + // relay packet + err = path.RelayPacket(packet) + suite.Require().NoError(err) // relay committed + + // ensure relayers got paid + // relayer for forward relay: chainB.SenderAccount + // relayer for reverse relay: chainA.SenderAccount + + // check forward relay balance + suite.Require().Equal( + fee.RecvFee, + sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainB.SenderAccount.GetAddress(), ibctesting.TestCoin.Denom)), + ) + + suite.Require().Equal( + fee.AckFee.Add(fee.TimeoutFee...), // ack fee paid, timeout fee refunded + sdk.NewCoins(suite.chainA.GetSimApp().BankKeeper.GetBalance(suite.chainA.GetContext(), suite.chainA.SenderAccount.GetAddress(), ibctesting.TestCoin.Denom)).Sub(originalChainASenderAccountBalance), + ) + +} diff --git a/modules/apps/29-fee/types/ack.go b/modules/apps/29-fee/types/ack.go new file mode 100644 index 00000000000..229d8e4cc3f --- /dev/null +++ b/modules/apps/29-fee/types/ack.go @@ -0,0 +1,27 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// NewIncentivizedAcknowledgement creates a new instance of IncentivizedAcknowledgement +func NewIncentivizedAcknowledgement(relayer string, ack []byte, success bool) IncentivizedAcknowledgement { + return IncentivizedAcknowledgement{ + Result: ack, + ForwardRelayerAddress: relayer, + UnderlyingAppSuccess: success, + } +} + +// Success implements the Acknowledgement interface. The acknowledgement is +// considered successful if the forward relayer address is empty. Otherwise it is +// considered a failed acknowledgement. +func (ack IncentivizedAcknowledgement) Success() bool { + return ack.UnderlyingAppSuccess +} + +// Acknowledgement implements the Acknowledgement interface. It returns the +// acknowledgement serialised using JSON. +func (ack IncentivizedAcknowledgement) Acknowledgement() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&ack)) +} diff --git a/modules/apps/29-fee/types/ack.pb.go b/modules/apps/29-fee/types/ack.pb.go new file mode 100644 index 00000000000..4f6437da224 --- /dev/null +++ b/modules/apps/29-fee/types/ack.pb.go @@ -0,0 +1,423 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/applications/fee/v1/ack.proto + +package types + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// IncentivizedAcknowledgement is the acknowledgement format to be used by applications wrapped in the fee middleware +type IncentivizedAcknowledgement struct { + // the underlying app acknowledgement result bytes + Result []byte `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + // the relayer address which submits the recv packet message + ForwardRelayerAddress string `protobuf:"bytes,2,opt,name=forward_relayer_address,json=forwardRelayerAddress,proto3" json:"forward_relayer_address,omitempty" yaml:"forward_relayer_address"` + // success flag of the base application callback + UnderlyingAppSuccess bool `protobuf:"varint,3,opt,name=underlying_app_success,json=underlyingAppSuccess,proto3" json:"underlying_app_success,omitempty" yaml:"underlying_app_successl"` +} + +func (m *IncentivizedAcknowledgement) Reset() { *m = IncentivizedAcknowledgement{} } +func (m *IncentivizedAcknowledgement) String() string { return proto.CompactTextString(m) } +func (*IncentivizedAcknowledgement) ProtoMessage() {} +func (*IncentivizedAcknowledgement) Descriptor() ([]byte, []int) { + return fileDescriptor_ab2834946fb65ea4, []int{0} +} +func (m *IncentivizedAcknowledgement) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IncentivizedAcknowledgement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_IncentivizedAcknowledgement.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *IncentivizedAcknowledgement) XXX_Merge(src proto.Message) { + xxx_messageInfo_IncentivizedAcknowledgement.Merge(m, src) +} +func (m *IncentivizedAcknowledgement) XXX_Size() int { + return m.Size() +} +func (m *IncentivizedAcknowledgement) XXX_DiscardUnknown() { + xxx_messageInfo_IncentivizedAcknowledgement.DiscardUnknown(m) +} + +var xxx_messageInfo_IncentivizedAcknowledgement proto.InternalMessageInfo + +func (m *IncentivizedAcknowledgement) GetResult() []byte { + if m != nil { + return m.Result + } + return nil +} + +func (m *IncentivizedAcknowledgement) GetForwardRelayerAddress() string { + if m != nil { + return m.ForwardRelayerAddress + } + return "" +} + +func (m *IncentivizedAcknowledgement) GetUnderlyingAppSuccess() bool { + if m != nil { + return m.UnderlyingAppSuccess + } + return false +} + +func init() { + proto.RegisterType((*IncentivizedAcknowledgement)(nil), "ibc.applications.fee.v1.IncentivizedAcknowledgement") +} + +func init() { proto.RegisterFile("ibc/applications/fee/v1/ack.proto", fileDescriptor_ab2834946fb65ea4) } + +var fileDescriptor_ab2834946fb65ea4 = []byte{ + // 315 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0xb1, 0x4e, 0xf3, 0x30, + 0x14, 0x85, 0xeb, 0xff, 0x97, 0x2a, 0x88, 0x98, 0xa2, 0xd2, 0x56, 0x20, 0x85, 0x92, 0xa9, 0x4b, + 0x63, 0x95, 0x8a, 0x01, 0xb6, 0x76, 0x63, 0x42, 0x0a, 0x0b, 0xea, 0x12, 0x39, 0xf6, 0x6d, 0xb0, + 0xea, 0xd8, 0x96, 0xed, 0xa4, 0x0a, 0x4f, 0xc1, 0x63, 0x31, 0x76, 0x64, 0x42, 0xa8, 0x1d, 0xd9, + 0x78, 0x02, 0x94, 0xa6, 0x12, 0x1d, 0x60, 0xbb, 0xf7, 0x9c, 0x4f, 0x67, 0xf8, 0xbc, 0x4b, 0x9e, + 0x52, 0x4c, 0xb4, 0x16, 0x9c, 0x12, 0xc7, 0x95, 0xb4, 0x78, 0x01, 0x80, 0xcb, 0x31, 0x26, 0x74, + 0x19, 0x69, 0xa3, 0x9c, 0xf2, 0x7b, 0x3c, 0xa5, 0xd1, 0x21, 0x12, 0x2d, 0x00, 0xa2, 0x72, 0x7c, + 0xd6, 0xc9, 0x54, 0xa6, 0x76, 0x0c, 0xae, 0xaf, 0x06, 0x0f, 0x3f, 0x91, 0x77, 0x7e, 0x27, 0x29, + 0x48, 0xc7, 0x4b, 0xfe, 0x0c, 0x6c, 0x4a, 0x97, 0x52, 0xad, 0x04, 0xb0, 0x0c, 0x72, 0x90, 0xce, + 0xef, 0x7a, 0x6d, 0x03, 0xb6, 0x10, 0xae, 0x8f, 0x06, 0x68, 0x78, 0x12, 0xef, 0x3f, 0x7f, 0xee, + 0xf5, 0x16, 0xca, 0xac, 0x88, 0x61, 0x89, 0x01, 0x41, 0x2a, 0x30, 0x09, 0x61, 0xcc, 0x80, 0xb5, + 0xfd, 0x7f, 0x03, 0x34, 0x3c, 0x9e, 0x85, 0x5f, 0xef, 0x17, 0x41, 0x45, 0x72, 0x71, 0x1b, 0xfe, + 0x01, 0x86, 0xf1, 0xe9, 0xbe, 0x89, 0x9b, 0x62, 0xda, 0xe4, 0xfe, 0xa3, 0xd7, 0x2d, 0x24, 0x03, + 0x23, 0x2a, 0x2e, 0xb3, 0x84, 0x68, 0x9d, 0xd8, 0x82, 0xd2, 0x7a, 0xfa, 0xff, 0x00, 0x0d, 0x8f, + 0x0e, 0xa7, 0x7f, 0xe7, 0x44, 0x18, 0x77, 0x7e, 0x9a, 0xa9, 0xd6, 0x0f, 0x4d, 0x3e, 0xbb, 0x7f, + 0xdd, 0x04, 0x68, 0xbd, 0x09, 0xd0, 0xc7, 0x26, 0x40, 0x2f, 0xdb, 0xa0, 0xb5, 0xde, 0x06, 0xad, + 0xb7, 0x6d, 0xd0, 0x9a, 0x5f, 0x67, 0xdc, 0x3d, 0x15, 0x69, 0x44, 0x55, 0x8e, 0xa9, 0xb2, 0xb9, + 0xb2, 0x98, 0xa7, 0x74, 0x94, 0x29, 0x5c, 0x4e, 0x70, 0xae, 0x58, 0x21, 0xc0, 0xd6, 0xe6, 0x2d, + 0xbe, 0xba, 0x19, 0xd5, 0xd2, 0x5d, 0xa5, 0xc1, 0xa6, 0xed, 0x9d, 0xc5, 0xc9, 0x77, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x2e, 0x38, 0x5f, 0x80, 0x99, 0x01, 0x00, 0x00, +} + +func (m *IncentivizedAcknowledgement) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IncentivizedAcknowledgement) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IncentivizedAcknowledgement) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.UnderlyingAppSuccess { + i-- + if m.UnderlyingAppSuccess { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if len(m.ForwardRelayerAddress) > 0 { + i -= len(m.ForwardRelayerAddress) + copy(dAtA[i:], m.ForwardRelayerAddress) + i = encodeVarintAck(dAtA, i, uint64(len(m.ForwardRelayerAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.Result) > 0 { + i -= len(m.Result) + copy(dAtA[i:], m.Result) + i = encodeVarintAck(dAtA, i, uint64(len(m.Result))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintAck(dAtA []byte, offset int, v uint64) int { + offset -= sovAck(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *IncentivizedAcknowledgement) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Result) + if l > 0 { + n += 1 + l + sovAck(uint64(l)) + } + l = len(m.ForwardRelayerAddress) + if l > 0 { + n += 1 + l + sovAck(uint64(l)) + } + if m.UnderlyingAppSuccess { + n += 2 + } + return n +} + +func sovAck(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozAck(x uint64) (n int) { + return sovAck(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *IncentivizedAcknowledgement) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAck + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IncentivizedAcknowledgement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IncentivizedAcknowledgement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAck + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAck + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthAck + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Result = append(m.Result[:0], dAtA[iNdEx:postIndex]...) + if m.Result == nil { + m.Result = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForwardRelayerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAck + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAck + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAck + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForwardRelayerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnderlyingAppSuccess", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAck + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UnderlyingAppSuccess = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipAck(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAck + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAck(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAck + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAck + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAck + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthAck + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupAck + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthAck + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthAck = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAck = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupAck = fmt.Errorf("proto: unexpected end of group") +) diff --git a/modules/apps/29-fee/types/codec.go b/modules/apps/29-fee/types/codec.go new file mode 100644 index 00000000000..871f148b043 --- /dev/null +++ b/modules/apps/29-fee/types/codec.go @@ -0,0 +1,48 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +// RegisterLegacyAminoCodec registers the necessary x/ibc 29-fee interfaces and concrete types +// on the provided LegacyAmino codec. These types are used for Amino JSON serialization. +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(&MsgRegisterCounterpartyAddress{}, "cosmos-sdk/MsgRegisterCounterpartyAddress", nil) + cdc.RegisterConcrete(&MsgPayPacketFee{}, "cosmos-sdk/MsgPayPacketFee", nil) + cdc.RegisterConcrete(&MsgPayPacketFeeAsync{}, "cosmos-sdk/MsgPayPacketFeeAsync", nil) +} + +// RegisterInterfaces register the 29-fee module interfaces to protobuf +// Any. +func RegisterInterfaces(registry codectypes.InterfaceRegistry) { + registry.RegisterImplementations( + (*sdk.Msg)(nil), + &MsgRegisterCounterpartyAddress{}, + &MsgPayPacketFee{}, + &MsgPayPacketFeeAsync{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} + +var ( + amino = codec.NewLegacyAmino() + + // ModuleCdc references the global x/ibc-transfer module codec. Note, the codec + // should ONLY be used in certain instances of tests and for JSON encoding. + // + // The actual codec used for serialization should be provided to x/ibc transfer and + // defined at the application level. + ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry()) + + // AminoCdc is a amino codec created to support amino json compatible msgs. + AminoCdc = codec.NewAminoCodec(amino) +) + +func init() { + RegisterLegacyAminoCodec(amino) + amino.Seal() +} diff --git a/modules/apps/29-fee/types/errors.go b/modules/apps/29-fee/types/errors.go new file mode 100644 index 00000000000..812db0a43a4 --- /dev/null +++ b/modules/apps/29-fee/types/errors.go @@ -0,0 +1,19 @@ +package types + +import ( + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// 29-fee sentinel errors +var ( + ErrInvalidVersion = sdkerrors.Register(ModuleName, 2, "invalid ICS29 middleware version") + ErrRefundAccNotFound = sdkerrors.Register(ModuleName, 3, "no account found for given refund address") + ErrBalanceNotFound = sdkerrors.Register(ModuleName, 4, "balance not found for given account address") + ErrFeeNotFound = sdkerrors.Register(ModuleName, 5, "there is no fee escrowed for the given packetID") + ErrRelayersNotNil = sdkerrors.Register(ModuleName, 6, "relayers must be nil. This feature is not supported") + ErrCounterpartyAddressEmpty = sdkerrors.Register(ModuleName, 7, "counterparty address must not be empty") + ErrForwardRelayerAddressNotFound = sdkerrors.Register(ModuleName, 8, "forward relayer address not found") + ErrFeeNotEnabled = sdkerrors.Register(ModuleName, 9, "fee module is not enabled for this channel. If this error occurs after channel setup, fee module may not be enabled") + ErrRelayerNotFoundForAsyncAck = sdkerrors.Register(ModuleName, 10, "relayer address must be stored for async WriteAcknowledgement") + ErrFeeModuleLocked = sdkerrors.Register(ModuleName, 11, "the fee module is currently locked, a severe bug has been detected") +) diff --git a/modules/apps/29-fee/types/events.go b/modules/apps/29-fee/types/events.go new file mode 100644 index 00000000000..cac882d98d3 --- /dev/null +++ b/modules/apps/29-fee/types/events.go @@ -0,0 +1,10 @@ +package types + +// 29-fee events +const ( + EventTypeIncentivizedPacket = "incentivized_ibc_packet" + + AttributeKeyRecvFee = "recv_fee" + AttributeKeyAckFee = "ack_fee" + AttributeKeyTimeoutFee = "timeout_fee" +) diff --git a/modules/apps/29-fee/types/expected_keepers.go b/modules/apps/29-fee/types/expected_keepers.go new file mode 100644 index 00000000000..1d9d3439b07 --- /dev/null +++ b/modules/apps/29-fee/types/expected_keepers.go @@ -0,0 +1,42 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported" +) + +// AccountKeeper defines the contract required for account APIs. +type AccountKeeper interface { + GetModuleAddress(name string) sdk.AccAddress + GetAccount(sdk.Context, sdk.AccAddress) types.AccountI +} + +// ICS4Wrapper defines the expected ICS4Wrapper for middleware +type ICS4Wrapper interface { + WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error + SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error + GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) +} + +// ChannelKeeper defines the expected IBC channel keeper +type ChannelKeeper interface { + GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) + GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) +} + +// PortKeeper defines the expected IBC port keeper +type PortKeeper interface { + BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability +} + +// BankKeeper defines the expected bank keeper +type BankKeeper interface { + HasBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coin) bool + SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error + BlockedAddr(sdk.AccAddress) bool +} diff --git a/modules/apps/29-fee/types/fee.go b/modules/apps/29-fee/types/fee.go new file mode 100644 index 00000000000..1f979c732d8 --- /dev/null +++ b/modules/apps/29-fee/types/fee.go @@ -0,0 +1,92 @@ +package types + +import ( + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" +) + +// NewPacketFee creates and returns a new PacketFee struct including the incentivization fees, refund addres and relayers +func NewPacketFee(fee Fee, refundAddr string, relayers []string) PacketFee { + return PacketFee{ + Fee: fee, + RefundAddress: refundAddr, + Relayers: relayers, + } +} + +// Validate performs basic stateless validation of the associated PacketFee +func (p PacketFee) Validate() error { + _, err := sdk.AccAddressFromBech32(p.RefundAddress) + if err != nil { + return sdkerrors.Wrap(err, "failed to convert RefundAddress into sdk.AccAddress") + } + + // enforce relayer is nil + if p.Relayers != nil { + return ErrRelayersNotNil + } + + if err := p.Fee.Validate(); err != nil { + return err + } + + return nil +} + +// NewPacketFees creates and returns a new PacketFees struct including a list of type PacketFee +func NewPacketFees(packetFees []PacketFee) PacketFees { + return PacketFees{ + PacketFees: packetFees, + } +} + +// NewIdentifiedPacketFees creates and returns a new IdentifiedPacketFees struct containing a packet ID and packet fees +func NewIdentifiedPacketFees(packetID channeltypes.PacketId, packetFees []PacketFee) IdentifiedPacketFees { + return IdentifiedPacketFees{ + PacketId: packetID, + PacketFees: packetFees, + } +} + +// NewFee creates and returns a new Fee struct encapsulating the receive, acknowledgement and timeout fees as sdk.Coins +func NewFee(recvFee, ackFee, timeoutFee sdk.Coins) Fee { + return Fee{ + RecvFee: recvFee, + AckFee: ackFee, + TimeoutFee: timeoutFee, + } +} + +// Total returns the total amount for a given Fee +func (f Fee) Total() sdk.Coins { + return f.RecvFee.Add(f.AckFee...).Add(f.TimeoutFee...) +} + +// Validate asserts that each Fee is valid and all three Fees are not empty or zero +func (fee Fee) Validate() error { + var errFees []string + if !fee.AckFee.IsValid() { + errFees = append(errFees, "ack fee invalid") + } + if !fee.RecvFee.IsValid() { + errFees = append(errFees, "recv fee invalid") + } + if !fee.TimeoutFee.IsValid() { + errFees = append(errFees, "timeout fee invalid") + } + + if len(errFees) > 0 { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "contains invalid fees: %s", strings.Join(errFees, " , ")) + } + + // if all three fee's are zero or empty return an error + if fee.AckFee.IsZero() && fee.RecvFee.IsZero() && fee.TimeoutFee.IsZero() { + return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "all fees are zero") + } + + return nil +} diff --git a/modules/apps/29-fee/types/fee.pb.go b/modules/apps/29-fee/types/fee.pb.go new file mode 100644 index 00000000000..1867eb351e5 --- /dev/null +++ b/modules/apps/29-fee/types/fee.pb.go @@ -0,0 +1,1182 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/applications/fee/v1/fee.proto + +package types + +import ( + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Fee defines the ICS29 receive, acknowledgement and timeout fees +type Fee struct { + // the packet receive fee + RecvFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=recv_fee,json=recvFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"recv_fee" yaml:"recv_fee"` + // the packet acknowledgement fee + AckFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=ack_fee,json=ackFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"ack_fee" yaml:"ack_fee"` + // the packet timeout fee + TimeoutFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=timeout_fee,json=timeoutFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"timeout_fee" yaml:"timeout_fee"` +} + +func (m *Fee) Reset() { *m = Fee{} } +func (m *Fee) String() string { return proto.CompactTextString(m) } +func (*Fee) ProtoMessage() {} +func (*Fee) Descriptor() ([]byte, []int) { + return fileDescriptor_cb3319f1af2a53e5, []int{0} +} +func (m *Fee) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Fee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Fee.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Fee) XXX_Merge(src proto.Message) { + xxx_messageInfo_Fee.Merge(m, src) +} +func (m *Fee) XXX_Size() int { + return m.Size() +} +func (m *Fee) XXX_DiscardUnknown() { + xxx_messageInfo_Fee.DiscardUnknown(m) +} + +var xxx_messageInfo_Fee proto.InternalMessageInfo + +func (m *Fee) GetRecvFee() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.RecvFee + } + return nil +} + +func (m *Fee) GetAckFee() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.AckFee + } + return nil +} + +func (m *Fee) GetTimeoutFee() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.TimeoutFee + } + return nil +} + +// PacketFee contains ICS29 relayer fees, refund address and optional list of permitted relayers +type PacketFee struct { + // fee encapsulates the recv, ack and timeout fees associated with an IBC packet + Fee Fee `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee"` + // the refund address for unspent fees + RefundAddress string `protobuf:"bytes,2,opt,name=refund_address,json=refundAddress,proto3" json:"refund_address,omitempty" yaml:"refund_address"` + // optional list of relayers permitted to receive fees + Relayers []string `protobuf:"bytes,3,rep,name=relayers,proto3" json:"relayers,omitempty"` +} + +func (m *PacketFee) Reset() { *m = PacketFee{} } +func (m *PacketFee) String() string { return proto.CompactTextString(m) } +func (*PacketFee) ProtoMessage() {} +func (*PacketFee) Descriptor() ([]byte, []int) { + return fileDescriptor_cb3319f1af2a53e5, []int{1} +} +func (m *PacketFee) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PacketFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PacketFee.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PacketFee) XXX_Merge(src proto.Message) { + xxx_messageInfo_PacketFee.Merge(m, src) +} +func (m *PacketFee) XXX_Size() int { + return m.Size() +} +func (m *PacketFee) XXX_DiscardUnknown() { + xxx_messageInfo_PacketFee.DiscardUnknown(m) +} + +var xxx_messageInfo_PacketFee proto.InternalMessageInfo + +func (m *PacketFee) GetFee() Fee { + if m != nil { + return m.Fee + } + return Fee{} +} + +func (m *PacketFee) GetRefundAddress() string { + if m != nil { + return m.RefundAddress + } + return "" +} + +func (m *PacketFee) GetRelayers() []string { + if m != nil { + return m.Relayers + } + return nil +} + +// PacketFees contains a list of type PacketFee +type PacketFees struct { + // list of packet fees + PacketFees []PacketFee `protobuf:"bytes,1,rep,name=packet_fees,json=packetFees,proto3" json:"packet_fees" yaml:"packet_fees"` +} + +func (m *PacketFees) Reset() { *m = PacketFees{} } +func (m *PacketFees) String() string { return proto.CompactTextString(m) } +func (*PacketFees) ProtoMessage() {} +func (*PacketFees) Descriptor() ([]byte, []int) { + return fileDescriptor_cb3319f1af2a53e5, []int{2} +} +func (m *PacketFees) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PacketFees) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PacketFees.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PacketFees) XXX_Merge(src proto.Message) { + xxx_messageInfo_PacketFees.Merge(m, src) +} +func (m *PacketFees) XXX_Size() int { + return m.Size() +} +func (m *PacketFees) XXX_DiscardUnknown() { + xxx_messageInfo_PacketFees.DiscardUnknown(m) +} + +var xxx_messageInfo_PacketFees proto.InternalMessageInfo + +func (m *PacketFees) GetPacketFees() []PacketFee { + if m != nil { + return m.PacketFees + } + return nil +} + +// IdentifiedPacketFees contains a list of type PacketFee and associated PacketId +type IdentifiedPacketFees struct { + // unique packet identifier comprised of the channel ID, port ID and sequence + PacketId types1.PacketId `protobuf:"bytes,1,opt,name=packet_id,json=packetId,proto3" json:"packet_id" yaml:"packet_id"` + // list of packet fees + PacketFees []PacketFee `protobuf:"bytes,2,rep,name=packet_fees,json=packetFees,proto3" json:"packet_fees" yaml:"packet_fees"` +} + +func (m *IdentifiedPacketFees) Reset() { *m = IdentifiedPacketFees{} } +func (m *IdentifiedPacketFees) String() string { return proto.CompactTextString(m) } +func (*IdentifiedPacketFees) ProtoMessage() {} +func (*IdentifiedPacketFees) Descriptor() ([]byte, []int) { + return fileDescriptor_cb3319f1af2a53e5, []int{3} +} +func (m *IdentifiedPacketFees) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IdentifiedPacketFees) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_IdentifiedPacketFees.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *IdentifiedPacketFees) XXX_Merge(src proto.Message) { + xxx_messageInfo_IdentifiedPacketFees.Merge(m, src) +} +func (m *IdentifiedPacketFees) XXX_Size() int { + return m.Size() +} +func (m *IdentifiedPacketFees) XXX_DiscardUnknown() { + xxx_messageInfo_IdentifiedPacketFees.DiscardUnknown(m) +} + +var xxx_messageInfo_IdentifiedPacketFees proto.InternalMessageInfo + +func (m *IdentifiedPacketFees) GetPacketId() types1.PacketId { + if m != nil { + return m.PacketId + } + return types1.PacketId{} +} + +func (m *IdentifiedPacketFees) GetPacketFees() []PacketFee { + if m != nil { + return m.PacketFees + } + return nil +} + +func init() { + proto.RegisterType((*Fee)(nil), "ibc.applications.fee.v1.Fee") + proto.RegisterType((*PacketFee)(nil), "ibc.applications.fee.v1.PacketFee") + proto.RegisterType((*PacketFees)(nil), "ibc.applications.fee.v1.PacketFees") + proto.RegisterType((*IdentifiedPacketFees)(nil), "ibc.applications.fee.v1.IdentifiedPacketFees") +} + +func init() { proto.RegisterFile("ibc/applications/fee/v1/fee.proto", fileDescriptor_cb3319f1af2a53e5) } + +var fileDescriptor_cb3319f1af2a53e5 = []byte{ + // 525 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0x31, 0x6f, 0x13, 0x31, + 0x14, 0xc7, 0x73, 0x09, 0x6a, 0x1b, 0x47, 0x14, 0x74, 0x2a, 0x22, 0x8d, 0xe0, 0x52, 0x3c, 0x65, + 0x89, 0xad, 0xa4, 0x30, 0xc0, 0x04, 0x57, 0x29, 0x52, 0x27, 0xd0, 0x89, 0x89, 0x25, 0xf2, 0xd9, + 0x2f, 0xa9, 0x95, 0xdc, 0xf9, 0x74, 0xbe, 0x44, 0xca, 0xca, 0x27, 0xe0, 0x1b, 0xb0, 0xf3, 0x49, + 0xba, 0x20, 0x75, 0x64, 0x0a, 0x28, 0xf9, 0x06, 0xdd, 0x91, 0x90, 0x7d, 0x4e, 0x94, 0x82, 0xaa, + 0xaa, 0x12, 0xd3, 0xf9, 0xd9, 0xef, 0xef, 0xdf, 0xb3, 0xdf, 0xff, 0x8c, 0x5e, 0xc8, 0x98, 0x53, + 0x96, 0x65, 0x53, 0xc9, 0x59, 0x21, 0x55, 0xaa, 0xe9, 0x08, 0x80, 0xce, 0x7b, 0xe6, 0x43, 0xb2, + 0x5c, 0x15, 0xca, 0x7f, 0x2a, 0x63, 0x4e, 0x76, 0x53, 0x88, 0x59, 0x9b, 0xf7, 0x5a, 0x01, 0x57, + 0x3a, 0x51, 0x9a, 0xc6, 0x4c, 0x1b, 0x49, 0x0c, 0x05, 0xeb, 0x51, 0xae, 0x64, 0x5a, 0x0a, 0x5b, + 0x47, 0x63, 0x35, 0x56, 0x76, 0x48, 0xcd, 0xc8, 0xcd, 0x5a, 0x22, 0x57, 0x39, 0x50, 0x7e, 0xc1, + 0xd2, 0x14, 0xa6, 0x86, 0xe6, 0x86, 0x65, 0x0a, 0xfe, 0x5d, 0x45, 0xb5, 0x01, 0x80, 0xbf, 0x40, + 0x07, 0x39, 0xf0, 0xf9, 0x70, 0x04, 0xd0, 0xf4, 0x4e, 0x6a, 0x9d, 0x46, 0xff, 0x98, 0x94, 0x4c, + 0x62, 0x98, 0xc4, 0x31, 0xc9, 0x99, 0x92, 0x69, 0x78, 0x76, 0xb9, 0x6c, 0x57, 0xae, 0x97, 0xed, + 0x47, 0x0b, 0x96, 0x4c, 0xdf, 0xe0, 0x8d, 0x10, 0x7f, 0xfb, 0xd9, 0xee, 0x8c, 0x65, 0x71, 0x31, + 0x8b, 0x09, 0x57, 0x09, 0x75, 0x35, 0x97, 0x9f, 0xae, 0x16, 0x13, 0x5a, 0x2c, 0x32, 0xd0, 0x76, + 0x0f, 0x1d, 0xed, 0x1b, 0x99, 0x41, 0xcf, 0xd1, 0x3e, 0xe3, 0x13, 0x4b, 0xae, 0xde, 0x45, 0x0e, + 0x1d, 0xf9, 0xb0, 0x24, 0x3b, 0xdd, 0xfd, 0xc0, 0x7b, 0x8c, 0x4f, 0x0c, 0xf7, 0xb3, 0x87, 0x1a, + 0x85, 0x4c, 0x40, 0xcd, 0x0a, 0x0b, 0xaf, 0xdd, 0x05, 0x1f, 0x38, 0xb8, 0x5f, 0xc2, 0x77, 0xb4, + 0xf7, 0x2b, 0x00, 0x39, 0xe5, 0x00, 0x00, 0x7f, 0xf5, 0x50, 0xfd, 0x03, 0xe3, 0x13, 0x30, 0x91, + 0xff, 0x12, 0xd5, 0xca, 0x06, 0x78, 0x9d, 0x46, 0xff, 0x19, 0xb9, 0xc5, 0x0d, 0x64, 0x00, 0x10, + 0x3e, 0x30, 0xc5, 0x44, 0x26, 0xdd, 0x7f, 0x8b, 0x0e, 0x73, 0x18, 0xcd, 0x52, 0x31, 0x64, 0x42, + 0xe4, 0xa0, 0x75, 0xb3, 0x7a, 0xe2, 0x75, 0xea, 0xe1, 0xf1, 0xf5, 0xb2, 0xfd, 0x64, 0xd3, 0xa2, + 0xdd, 0x75, 0x1c, 0x3d, 0x2c, 0x27, 0xde, 0x95, 0xb1, 0xdf, 0x32, 0xdd, 0x9f, 0xb2, 0x05, 0xe4, + 0xda, 0x5e, 0x43, 0x3d, 0xda, 0xc6, 0x38, 0x41, 0x68, 0x5b, 0xa0, 0xf6, 0x87, 0xa8, 0x91, 0xd9, + 0xc8, 0x1c, 0x5b, 0x3b, 0xab, 0xe0, 0x5b, 0x2b, 0xdd, 0x2a, 0xc3, 0xd6, 0xcd, 0xcb, 0xdb, 0xd9, + 0x04, 0x47, 0x28, 0xdb, 0x02, 0xf0, 0x77, 0x0f, 0x1d, 0x9d, 0x0b, 0x48, 0x0b, 0x39, 0x92, 0x20, + 0x76, 0xc8, 0x1f, 0x51, 0xdd, 0x89, 0xa4, 0x70, 0x37, 0xf4, 0xdc, 0x72, 0x8d, 0xc1, 0xc9, 0xc6, + 0xd5, 0x5b, 0xe6, 0xb9, 0x08, 0x9b, 0x0e, 0xf9, 0xf8, 0x06, 0x52, 0x0a, 0x1c, 0x1d, 0x64, 0x2e, + 0xe7, 0xef, 0xf3, 0x54, 0xff, 0xf7, 0x79, 0xc2, 0xf7, 0x97, 0xab, 0xc0, 0xbb, 0x5a, 0x05, 0xde, + 0xaf, 0x55, 0xe0, 0x7d, 0x59, 0x07, 0x95, 0xab, 0x75, 0x50, 0xf9, 0xb1, 0x0e, 0x2a, 0x9f, 0x5e, + 0xfd, 0x6b, 0x18, 0x19, 0xf3, 0xee, 0x58, 0xd1, 0xf9, 0x29, 0x4d, 0x94, 0x98, 0x4d, 0x41, 0x9b, + 0xf7, 0x42, 0xd3, 0xfe, 0xeb, 0xae, 0x79, 0x2a, 0xac, 0x87, 0xe2, 0x3d, 0xfb, 0xe3, 0x9e, 0xfe, + 0x09, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x6c, 0xa2, 0x41, 0x4f, 0x04, 0x00, 0x00, +} + +func (m *Fee) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Fee) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Fee) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TimeoutFee) > 0 { + for iNdEx := len(m.TimeoutFee) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TimeoutFee[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintFee(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.AckFee) > 0 { + for iNdEx := len(m.AckFee) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AckFee[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintFee(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.RecvFee) > 0 { + for iNdEx := len(m.RecvFee) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.RecvFee[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintFee(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *PacketFee) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PacketFee) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PacketFee) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Relayers) > 0 { + for iNdEx := len(m.Relayers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Relayers[iNdEx]) + copy(dAtA[i:], m.Relayers[iNdEx]) + i = encodeVarintFee(dAtA, i, uint64(len(m.Relayers[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.RefundAddress) > 0 { + i -= len(m.RefundAddress) + copy(dAtA[i:], m.RefundAddress) + i = encodeVarintFee(dAtA, i, uint64(len(m.RefundAddress))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Fee.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintFee(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PacketFees) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PacketFees) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PacketFees) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PacketFees) > 0 { + for iNdEx := len(m.PacketFees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PacketFees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintFee(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *IdentifiedPacketFees) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IdentifiedPacketFees) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IdentifiedPacketFees) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PacketFees) > 0 { + for iNdEx := len(m.PacketFees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PacketFees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintFee(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.PacketId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintFee(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintFee(dAtA []byte, offset int, v uint64) int { + offset -= sovFee(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Fee) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.RecvFee) > 0 { + for _, e := range m.RecvFee { + l = e.Size() + n += 1 + l + sovFee(uint64(l)) + } + } + if len(m.AckFee) > 0 { + for _, e := range m.AckFee { + l = e.Size() + n += 1 + l + sovFee(uint64(l)) + } + } + if len(m.TimeoutFee) > 0 { + for _, e := range m.TimeoutFee { + l = e.Size() + n += 1 + l + sovFee(uint64(l)) + } + } + return n +} + +func (m *PacketFee) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Fee.Size() + n += 1 + l + sovFee(uint64(l)) + l = len(m.RefundAddress) + if l > 0 { + n += 1 + l + sovFee(uint64(l)) + } + if len(m.Relayers) > 0 { + for _, s := range m.Relayers { + l = len(s) + n += 1 + l + sovFee(uint64(l)) + } + } + return n +} + +func (m *PacketFees) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PacketFees) > 0 { + for _, e := range m.PacketFees { + l = e.Size() + n += 1 + l + sovFee(uint64(l)) + } + } + return n +} + +func (m *IdentifiedPacketFees) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PacketId.Size() + n += 1 + l + sovFee(uint64(l)) + if len(m.PacketFees) > 0 { + for _, e := range m.PacketFees { + l = e.Size() + n += 1 + l + sovFee(uint64(l)) + } + } + return n +} + +func sovFee(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozFee(x uint64) (n int) { + return sovFee(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Fee) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Fee: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Fee: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RecvFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RecvFee = append(m.RecvFee, types.Coin{}) + if err := m.RecvFee[len(m.RecvFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AckFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AckFee = append(m.AckFee, types.Coin{}) + if err := m.AckFee[len(m.AckFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TimeoutFee = append(m.TimeoutFee, types.Coin{}) + if err := m.TimeoutFee[len(m.TimeoutFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipFee(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthFee + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PacketFee) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PacketFee: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PacketFee: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Fee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RefundAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RefundAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Relayers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Relayers = append(m.Relayers, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipFee(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthFee + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PacketFees) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PacketFees: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PacketFees: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketFees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PacketFees = append(m.PacketFees, PacketFee{}) + if err := m.PacketFees[len(m.PacketFees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipFee(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthFee + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IdentifiedPacketFees) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IdentifiedPacketFees: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IdentifiedPacketFees: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketFees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowFee + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthFee + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthFee + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PacketFees = append(m.PacketFees, PacketFee{}) + if err := m.PacketFees[len(m.PacketFees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipFee(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthFee + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipFee(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowFee + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowFee + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowFee + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthFee + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupFee + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthFee + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthFee = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowFee = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupFee = fmt.Errorf("proto: unexpected end of group") +) diff --git a/modules/apps/29-fee/types/fee_test.go b/modules/apps/29-fee/types/fee_test.go new file mode 100644 index 00000000000..2b02e5b857b --- /dev/null +++ b/modules/apps/29-fee/types/fee_test.go @@ -0,0 +1,123 @@ +package types_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/crypto/secp256k1" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" +) + +var ( + // defaultRecvFee is the default packet receive fee used for testing purposes + defaultRecvFee = sdk.NewCoins(sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(100)}) + + // defaultAckFee is the default packet acknowledgement fee used for testing purposes + defaultAckFee = sdk.NewCoins(sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(200)}) + + // defaultTimeoutFee is the default packet timeout fee used for testing purposes + defaultTimeoutFee = sdk.NewCoins(sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(300)}) + + // invalidFee is an invalid coin set used to trigger error cases for testing purposes + invalidFee = sdk.Coins{sdk.Coin{Denom: "invalid-denom", Amount: sdk.NewInt(-2)}} + + // defaultAccAddress is the default account used for testing purposes + defaultAccAddress = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()).String() +) + +func TestFeeTotal(t *testing.T) { + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + + total := fee.Total() + require.Equal(t, sdk.NewInt(600), total.AmountOf(sdk.DefaultBondDenom)) +} + +func TestPacketFeeValidation(t *testing.T) { + var ( + packetFee types.PacketFee + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "should fail when refund address is invalid", + func() { + packetFee.RefundAddress = "invalid-address" + }, + false, + }, + { + "should fail when all fees are invalid", + func() { + packetFee.Fee.AckFee = invalidFee + packetFee.Fee.RecvFee = invalidFee + packetFee.Fee.TimeoutFee = invalidFee + }, + false, + }, + { + "should fail with single invalid fee", + func() { + packetFee.Fee.AckFee = invalidFee + }, + false, + }, + { + "should fail with two invalid fees", + func() { + packetFee.Fee.TimeoutFee = invalidFee + packetFee.Fee.AckFee = invalidFee + }, + false, + }, + { + "should pass with two empty fees", + func() { + packetFee.Fee.TimeoutFee = sdk.Coins{} + packetFee.Fee.AckFee = sdk.Coins{} + }, + true, + }, + { + "should pass with one empty fee", + func() { + packetFee.Fee.TimeoutFee = sdk.Coins{} + }, + true, + }, + { + "should fail if all fees are empty", + func() { + packetFee.Fee.AckFee = sdk.Coins{} + packetFee.Fee.RecvFee = sdk.Coins{} + packetFee.Fee.TimeoutFee = sdk.Coins{} + }, + false, + }, + } + + for _, tc := range testCases { + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee = types.NewPacketFee(fee, defaultAccAddress, nil) + + tc.malleate() // malleate mutates test data + + err := packetFee.Validate() + + if tc.expPass { + require.NoError(t, err) + } else { + require.Error(t, err) + } + } +} diff --git a/modules/apps/29-fee/types/genesis.go b/modules/apps/29-fee/types/genesis.go new file mode 100644 index 00000000000..be9299fcd94 --- /dev/null +++ b/modules/apps/29-fee/types/genesis.go @@ -0,0 +1,81 @@ +package types + +import ( + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + host "github.com/cosmos/ibc-go/v3/modules/core/24-host" +) + +// NewGenesisState creates a 29-fee GenesisState instance. +func NewGenesisState(identifiedFees []IdentifiedPacketFees, feeEnabledChannels []FeeEnabledChannel, registeredRelayers []RegisteredRelayerAddress, forwardRelayers []ForwardRelayerAddress) *GenesisState { + return &GenesisState{ + IdentifiedFees: identifiedFees, + FeeEnabledChannels: feeEnabledChannels, + RegisteredRelayers: registeredRelayers, + ForwardRelayers: forwardRelayers, + } +} + +// DefaultGenesisState returns a GenesisState with "transfer" as the default PortID. +func DefaultGenesisState() *GenesisState { + return &GenesisState{ + IdentifiedFees: []IdentifiedPacketFees{}, + ForwardRelayers: []ForwardRelayerAddress{}, + FeeEnabledChannels: []FeeEnabledChannel{}, + RegisteredRelayers: []RegisteredRelayerAddress{}, + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + // Validate IdentifiedPacketFees + for _, identifiedFees := range gs.IdentifiedFees { + if err := identifiedFees.PacketId.Validate(); err != nil { + return err + } + + for _, packetFee := range identifiedFees.PacketFees { + if err := packetFee.Validate(); err != nil { + return err + } + } + } + + // Validate FeeEnabledChannels + for _, feeCh := range gs.FeeEnabledChannels { + if err := host.PortIdentifierValidator(feeCh.PortId); err != nil { + return sdkerrors.Wrap(err, "invalid source port ID") + } + if err := host.ChannelIdentifierValidator(feeCh.ChannelId); err != nil { + return sdkerrors.Wrap(err, "invalid source channel ID") + } + } + + // Validate RegisteredRelayers + for _, rel := range gs.RegisteredRelayers { + if _, err := sdk.AccAddressFromBech32(rel.Address); err != nil { + return sdkerrors.Wrap(err, "failed to convert source relayer address into sdk.AccAddress") + } + + if strings.TrimSpace(rel.CounterpartyAddress) == "" { + return ErrCounterpartyAddressEmpty + } + } + + // Validate ForwardRelayers + for _, rel := range gs.ForwardRelayers { + if _, err := sdk.AccAddressFromBech32(rel.Address); err != nil { + return sdkerrors.Wrap(err, "failed to convert forward relayer address into sdk.AccAddress") + } + + if err := rel.PacketId.Validate(); err != nil { + return err + } + } + + return nil +} diff --git a/modules/apps/29-fee/types/genesis.pb.go b/modules/apps/29-fee/types/genesis.pb.go new file mode 100644 index 00000000000..af78add463e --- /dev/null +++ b/modules/apps/29-fee/types/genesis.pb.go @@ -0,0 +1,1273 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/applications/fee/v1/genesis.proto + +package types + +import ( + fmt "fmt" + types "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the ICS29 fee middleware genesis state +type GenesisState struct { + // list of identified packet fees + IdentifiedFees []IdentifiedPacketFees `protobuf:"bytes,1,rep,name=identified_fees,json=identifiedFees,proto3" json:"identified_fees" yaml:"identified_fees"` + // list of fee enabled channels + FeeEnabledChannels []FeeEnabledChannel `protobuf:"bytes,2,rep,name=fee_enabled_channels,json=feeEnabledChannels,proto3" json:"fee_enabled_channels" yaml:"fee_enabled_channels"` + // list of registered relayer addresses + RegisteredRelayers []RegisteredRelayerAddress `protobuf:"bytes,3,rep,name=registered_relayers,json=registeredRelayers,proto3" json:"registered_relayers" yaml:"registered_relayers"` + // list of forward relayer addresses + ForwardRelayers []ForwardRelayerAddress `protobuf:"bytes,4,rep,name=forward_relayers,json=forwardRelayers,proto3" json:"forward_relayers" yaml:"forward_relayers"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_7191992e856dff95, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetIdentifiedFees() []IdentifiedPacketFees { + if m != nil { + return m.IdentifiedFees + } + return nil +} + +func (m *GenesisState) GetFeeEnabledChannels() []FeeEnabledChannel { + if m != nil { + return m.FeeEnabledChannels + } + return nil +} + +func (m *GenesisState) GetRegisteredRelayers() []RegisteredRelayerAddress { + if m != nil { + return m.RegisteredRelayers + } + return nil +} + +func (m *GenesisState) GetForwardRelayers() []ForwardRelayerAddress { + if m != nil { + return m.ForwardRelayers + } + return nil +} + +// FeeEnabledChannel contains the PortID & ChannelID for a fee enabled channel +type FeeEnabledChannel struct { + // unique port identifier + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + // unique channel identifier + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` +} + +func (m *FeeEnabledChannel) Reset() { *m = FeeEnabledChannel{} } +func (m *FeeEnabledChannel) String() string { return proto.CompactTextString(m) } +func (*FeeEnabledChannel) ProtoMessage() {} +func (*FeeEnabledChannel) Descriptor() ([]byte, []int) { + return fileDescriptor_7191992e856dff95, []int{1} +} +func (m *FeeEnabledChannel) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FeeEnabledChannel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FeeEnabledChannel.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *FeeEnabledChannel) XXX_Merge(src proto.Message) { + xxx_messageInfo_FeeEnabledChannel.Merge(m, src) +} +func (m *FeeEnabledChannel) XXX_Size() int { + return m.Size() +} +func (m *FeeEnabledChannel) XXX_DiscardUnknown() { + xxx_messageInfo_FeeEnabledChannel.DiscardUnknown(m) +} + +var xxx_messageInfo_FeeEnabledChannel proto.InternalMessageInfo + +func (m *FeeEnabledChannel) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *FeeEnabledChannel) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +// RegisteredRelayerAddress contains the address and counterparty address for a specific relayer (for distributing fees) +type RegisteredRelayerAddress struct { + // the relayer address + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // the counterparty relayer address + CounterpartyAddress string `protobuf:"bytes,2,opt,name=counterparty_address,json=counterpartyAddress,proto3" json:"counterparty_address,omitempty" yaml:"counterparty_address"` + // unique channel identifier + ChannelId string `protobuf:"bytes,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` +} + +func (m *RegisteredRelayerAddress) Reset() { *m = RegisteredRelayerAddress{} } +func (m *RegisteredRelayerAddress) String() string { return proto.CompactTextString(m) } +func (*RegisteredRelayerAddress) ProtoMessage() {} +func (*RegisteredRelayerAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_7191992e856dff95, []int{2} +} +func (m *RegisteredRelayerAddress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RegisteredRelayerAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RegisteredRelayerAddress.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RegisteredRelayerAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_RegisteredRelayerAddress.Merge(m, src) +} +func (m *RegisteredRelayerAddress) XXX_Size() int { + return m.Size() +} +func (m *RegisteredRelayerAddress) XXX_DiscardUnknown() { + xxx_messageInfo_RegisteredRelayerAddress.DiscardUnknown(m) +} + +var xxx_messageInfo_RegisteredRelayerAddress proto.InternalMessageInfo + +func (m *RegisteredRelayerAddress) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *RegisteredRelayerAddress) GetCounterpartyAddress() string { + if m != nil { + return m.CounterpartyAddress + } + return "" +} + +func (m *RegisteredRelayerAddress) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +// ForwardRelayerAddress contains the forward relayer address and PacketId used for async acknowledgements +type ForwardRelayerAddress struct { + // the forward relayer address + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // unique packet identifer comprised of the channel ID, port ID and sequence + PacketId types.PacketId `protobuf:"bytes,2,opt,name=packet_id,json=packetId,proto3" json:"packet_id" yaml:"packet_id"` +} + +func (m *ForwardRelayerAddress) Reset() { *m = ForwardRelayerAddress{} } +func (m *ForwardRelayerAddress) String() string { return proto.CompactTextString(m) } +func (*ForwardRelayerAddress) ProtoMessage() {} +func (*ForwardRelayerAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_7191992e856dff95, []int{3} +} +func (m *ForwardRelayerAddress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ForwardRelayerAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ForwardRelayerAddress.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ForwardRelayerAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForwardRelayerAddress.Merge(m, src) +} +func (m *ForwardRelayerAddress) XXX_Size() int { + return m.Size() +} +func (m *ForwardRelayerAddress) XXX_DiscardUnknown() { + xxx_messageInfo_ForwardRelayerAddress.DiscardUnknown(m) +} + +var xxx_messageInfo_ForwardRelayerAddress proto.InternalMessageInfo + +func (m *ForwardRelayerAddress) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *ForwardRelayerAddress) GetPacketId() types.PacketId { + if m != nil { + return m.PacketId + } + return types.PacketId{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "ibc.applications.fee.v1.GenesisState") + proto.RegisterType((*FeeEnabledChannel)(nil), "ibc.applications.fee.v1.FeeEnabledChannel") + proto.RegisterType((*RegisteredRelayerAddress)(nil), "ibc.applications.fee.v1.RegisteredRelayerAddress") + proto.RegisterType((*ForwardRelayerAddress)(nil), "ibc.applications.fee.v1.ForwardRelayerAddress") +} + +func init() { + proto.RegisterFile("ibc/applications/fee/v1/genesis.proto", fileDescriptor_7191992e856dff95) +} + +var fileDescriptor_7191992e856dff95 = []byte{ + // 579 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x4d, 0x6f, 0xd4, 0x30, + 0x14, 0xdc, 0xb4, 0x55, 0x4b, 0x5d, 0xd4, 0x0f, 0xb7, 0xa5, 0x51, 0x11, 0x49, 0x31, 0x42, 0xaa, + 0x40, 0x4d, 0xb4, 0x2d, 0x1c, 0xe0, 0xc6, 0x22, 0x8a, 0xf6, 0x04, 0x32, 0x9c, 0xb8, 0x44, 0xf9, + 0x78, 0x49, 0x2d, 0xb2, 0x71, 0x64, 0xbb, 0x41, 0xcb, 0x8d, 0x0b, 0x1c, 0xe1, 0x17, 0x71, 0xee, + 0xb1, 0x47, 0x4e, 0x2b, 0xd4, 0xfe, 0x83, 0xfe, 0x02, 0x94, 0x38, 0xe9, 0x6e, 0x97, 0x0d, 0xe2, + 0xf6, 0x62, 0xcf, 0xbc, 0x19, 0x8f, 0xf3, 0x8c, 0x1e, 0xb2, 0x20, 0x74, 0xfd, 0x3c, 0x4f, 0x59, + 0xe8, 0x2b, 0xc6, 0x33, 0xe9, 0xc6, 0x00, 0x6e, 0xd1, 0x75, 0x13, 0xc8, 0x40, 0x32, 0xe9, 0xe4, + 0x82, 0x2b, 0x8e, 0x77, 0x58, 0x10, 0x3a, 0x93, 0x30, 0x27, 0x06, 0x70, 0x8a, 0xee, 0xee, 0x56, + 0xc2, 0x13, 0x5e, 0x61, 0xdc, 0xb2, 0xd2, 0xf0, 0xdd, 0xfb, 0x6d, 0x5d, 0x4b, 0xd6, 0x04, 0x24, + 0xe4, 0x02, 0xdc, 0xf0, 0xc4, 0xcf, 0x32, 0x48, 0xcb, 0xed, 0xba, 0xd4, 0x10, 0xf2, 0x7d, 0x01, + 0xdd, 0x7e, 0xad, 0x6d, 0xbc, 0x53, 0xbe, 0x02, 0x5c, 0xa0, 0x35, 0x16, 0x41, 0xa6, 0x58, 0xcc, + 0x20, 0xf2, 0x62, 0x00, 0x69, 0x1a, 0x7b, 0xf3, 0xfb, 0x2b, 0x87, 0x07, 0x4e, 0x8b, 0x3f, 0xa7, + 0x7f, 0x8d, 0x7f, 0xeb, 0x87, 0x1f, 0x41, 0x1d, 0x03, 0xc8, 0x9e, 0x75, 0x36, 0xb2, 0x3b, 0x57, + 0x23, 0xfb, 0xce, 0xd0, 0x1f, 0xa4, 0xcf, 0xc9, 0x54, 0x4f, 0x42, 0x57, 0xc7, 0x2b, 0x25, 0x1e, + 0x7f, 0x31, 0xd0, 0x56, 0x0c, 0xe0, 0x41, 0xe6, 0x07, 0x29, 0x44, 0x5e, 0x6d, 0x53, 0x9a, 0x73, + 0x95, 0xfa, 0xa3, 0x56, 0xf5, 0x63, 0x80, 0x57, 0x9a, 0xf3, 0x52, 0x53, 0x7a, 0x0f, 0x6a, 0xe9, + 0xbb, 0x5a, 0x7a, 0x56, 0x57, 0x42, 0x71, 0x3c, 0xcd, 0x93, 0xf8, 0xab, 0x81, 0x36, 0x05, 0x24, + 0x4c, 0x2a, 0x10, 0x10, 0x79, 0x02, 0x52, 0x7f, 0x08, 0x42, 0x9a, 0xf3, 0x95, 0x85, 0x6e, 0xab, + 0x05, 0x7a, 0xcd, 0xa1, 0x9a, 0xf2, 0x22, 0x8a, 0x04, 0x48, 0xd9, 0x23, 0xb5, 0x93, 0x5d, 0xed, + 0x64, 0x46, 0x6f, 0x42, 0xb1, 0x98, 0x66, 0x4b, 0xfc, 0x19, 0xad, 0xc7, 0x5c, 0x7c, 0xf2, 0xc5, + 0x84, 0x89, 0x85, 0xca, 0x84, 0xd3, 0x9e, 0x83, 0x26, 0x4c, 0x39, 0xb0, 0x6b, 0x07, 0x3b, 0x75, + 0x16, 0x53, 0x5d, 0x09, 0x5d, 0x8b, 0x6f, 0xf0, 0x24, 0x29, 0xd0, 0xc6, 0x5f, 0x91, 0xe2, 0xc7, + 0x68, 0x29, 0xe7, 0x42, 0x79, 0x2c, 0x32, 0x8d, 0x3d, 0x63, 0x7f, 0xb9, 0x87, 0xaf, 0x46, 0xf6, + 0xaa, 0xee, 0x59, 0x6f, 0x10, 0xba, 0x58, 0x56, 0xfd, 0x08, 0x3f, 0x41, 0xa8, 0xce, 0xb9, 0xc4, + 0xcf, 0x55, 0xf8, 0xed, 0xab, 0x91, 0xbd, 0xa1, 0xf1, 0xe3, 0x3d, 0x42, 0x97, 0xeb, 0x8f, 0x7e, + 0x44, 0x7e, 0x1a, 0xc8, 0x6c, 0x0b, 0x12, 0x9b, 0x68, 0xc9, 0xd7, 0xa5, 0xd6, 0xa7, 0xcd, 0x27, + 0xa6, 0x68, 0x2b, 0xe4, 0xa7, 0x99, 0x02, 0x91, 0xfb, 0x42, 0x0d, 0xbd, 0x06, 0xa6, 0x65, 0xed, + 0xf1, 0x6f, 0x30, 0x0b, 0x45, 0xe8, 0xe6, 0xe4, 0x72, 0xa3, 0x76, 0xf3, 0x00, 0xf3, 0xff, 0x79, + 0x80, 0x6f, 0x06, 0xda, 0x9e, 0x79, 0x09, 0xff, 0x70, 0xff, 0x1e, 0x2d, 0xe7, 0xd5, 0xcc, 0x34, + 0x49, 0xad, 0x1c, 0xde, 0xab, 0x6e, 0xb8, 0x9c, 0x5a, 0xa7, 0x19, 0xd5, 0xa2, 0xeb, 0xe8, 0xc9, + 0xea, 0x47, 0x3d, 0xb3, 0xbe, 0xd0, 0xf5, 0x3a, 0xfc, 0x86, 0x4d, 0xe8, 0xad, 0xbc, 0xc1, 0xbc, + 0x39, 0xbb, 0xb0, 0x8c, 0xf3, 0x0b, 0xcb, 0xf8, 0x7d, 0x61, 0x19, 0x3f, 0x2e, 0xad, 0xce, 0xf9, + 0xa5, 0xd5, 0xf9, 0x75, 0x69, 0x75, 0x3e, 0x3c, 0x4d, 0x98, 0x3a, 0x39, 0x0d, 0x9c, 0x90, 0x0f, + 0xdc, 0x90, 0xcb, 0x01, 0x97, 0x2e, 0x0b, 0xc2, 0x83, 0x84, 0xbb, 0xc5, 0x91, 0x3b, 0xe0, 0xd1, + 0x69, 0x0a, 0xb2, 0x7c, 0x54, 0xa4, 0x7b, 0xf8, 0xec, 0xa0, 0x7c, 0x4f, 0xd4, 0x30, 0x07, 0x19, + 0x2c, 0x56, 0x8f, 0xc5, 0xd1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x33, 0x0f, 0x78, 0xca, + 0x04, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ForwardRelayers) > 0 { + for iNdEx := len(m.ForwardRelayers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ForwardRelayers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.RegisteredRelayers) > 0 { + for iNdEx := len(m.RegisteredRelayers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.RegisteredRelayers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.FeeEnabledChannels) > 0 { + for iNdEx := len(m.FeeEnabledChannels) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FeeEnabledChannels[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.IdentifiedFees) > 0 { + for iNdEx := len(m.IdentifiedFees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.IdentifiedFees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *FeeEnabledChannel) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *FeeEnabledChannel) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FeeEnabledChannel) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RegisteredRelayerAddress) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RegisteredRelayerAddress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RegisteredRelayerAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.CounterpartyAddress) > 0 { + i -= len(m.CounterpartyAddress) + copy(dAtA[i:], m.CounterpartyAddress) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.CounterpartyAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ForwardRelayerAddress) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ForwardRelayerAddress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ForwardRelayerAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PacketId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.IdentifiedFees) > 0 { + for _, e := range m.IdentifiedFees { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.FeeEnabledChannels) > 0 { + for _, e := range m.FeeEnabledChannels { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.RegisteredRelayers) > 0 { + for _, e := range m.RegisteredRelayers { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.ForwardRelayers) > 0 { + for _, e := range m.ForwardRelayers { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *FeeEnabledChannel) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} + +func (m *RegisteredRelayerAddress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.CounterpartyAddress) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} + +func (m *ForwardRelayerAddress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = m.PacketId.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IdentifiedFees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IdentifiedFees = append(m.IdentifiedFees, IdentifiedPacketFees{}) + if err := m.IdentifiedFees[len(m.IdentifiedFees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeEnabledChannels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FeeEnabledChannels = append(m.FeeEnabledChannels, FeeEnabledChannel{}) + if err := m.FeeEnabledChannels[len(m.FeeEnabledChannels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RegisteredRelayers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RegisteredRelayers = append(m.RegisteredRelayers, RegisteredRelayerAddress{}) + if err := m.RegisteredRelayers[len(m.RegisteredRelayers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForwardRelayers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForwardRelayers = append(m.ForwardRelayers, ForwardRelayerAddress{}) + if err := m.ForwardRelayers[len(m.ForwardRelayers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FeeEnabledChannel) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FeeEnabledChannel: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FeeEnabledChannel: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RegisteredRelayerAddress) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RegisteredRelayerAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RegisteredRelayerAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ForwardRelayerAddress) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ForwardRelayerAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ForwardRelayerAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/modules/apps/29-fee/types/genesis_test.go b/modules/apps/29-fee/types/genesis_test.go new file mode 100644 index 00000000000..d574257e706 --- /dev/null +++ b/modules/apps/29-fee/types/genesis_test.go @@ -0,0 +1,215 @@ +package types_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/crypto/secp256k1" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + transfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" +) + +var ( + addr1 = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()).String() + addr2 = sdk.AccAddress("testaddr2").String() + validCoins = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(100)}} + validCoins2 = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(200)}} + validCoins3 = sdk.Coins{sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdk.NewInt(300)}} +) + +func TestValidateGenesis(t *testing.T) { + var ( + packetID channeltypes.PacketId + fee types.Fee + refundAcc string + sender string + forwardAddr string + counterparty string + portID string + channelID string + packetChannelID string + seq uint64 + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "valid genesis", + func() {}, + true, + }, + { + "invalid packetID: invalid channel", + func() { + packetID = channeltypes.NewPacketId( + portID, + "", + seq, + ) + }, + false, + }, + { + "invalid packetID: invalid port", + func() { + packetID = channeltypes.NewPacketId( + "", + channelID, + seq, + ) + }, + false, + }, + { + "invalid packetID: invalid sequence", + func() { + packetID = channeltypes.NewPacketId( + portID, + channelID, + 0, + ) + }, + false, + }, + { + "invalid packetID: invalid fee", + func() { + fee = types.Fee{ + sdk.Coins{}, + sdk.Coins{}, + sdk.Coins{}, + } + }, + false, + }, + { + "invalid packetID: invalid refundAcc", + func() { + refundAcc = "" + }, + false, + }, + { + "invalid FeeEnabledChannel: invalid ChannelID", + func() { + channelID = "" + }, + false, + }, + { + "invalid FeeEnabledChannel: invalid PortID", + func() { + portID = "" + }, + false, + }, + { + "invalid RegisteredRelayers: invalid sender", + func() { + sender = "" + }, + false, + }, + { + "invalid RegisteredRelayers: invalid counterparty", + func() { + counterparty = " " + }, + false, + }, + { + "invalid ForwardRelayerAddress: invalid forwardAddr", + func() { + forwardAddr = "" + }, + false, + }, + { + "invalid ForwardRelayerAddress: invalid packet", + func() { + packetChannelID = "1" + }, + false, + }, + } + + for _, tc := range testCases { + portID = transfertypes.PortID + channelID = ibctesting.FirstChannelID + packetChannelID = ibctesting.FirstChannelID + seq = uint64(1) + + // build PacketId & Fee + packetID = channeltypes.NewPacketId( + portID, + channelID, + seq, + ) + fee = types.Fee{ + validCoins, + validCoins2, + validCoins3, + } + + refundAcc = addr1 + + // relayer addresses + sender = addr1 + counterparty = addr2 + forwardAddr = addr2 + + tc.malleate() + + genState := types.GenesisState{ + IdentifiedFees: []types.IdentifiedPacketFees{ + { + PacketId: packetID, + PacketFees: []types.PacketFee{ + { + Fee: fee, + RefundAddress: refundAcc, + Relayers: nil, + }, + }, + }, + }, + FeeEnabledChannels: []types.FeeEnabledChannel{ + { + PortId: portID, + ChannelId: channelID, + }, + }, + RegisteredRelayers: []types.RegisteredRelayerAddress{ + { + Address: sender, + CounterpartyAddress: counterparty, + }, + }, + ForwardRelayers: []types.ForwardRelayerAddress{ + { + Address: forwardAddr, + PacketId: channeltypes.NewPacketId(portID, packetChannelID, 1), + }, + }, + } + + err := genState.Validate() + if tc.expPass { + require.NoError(t, err, tc.name) + } else { + require.Error(t, err, tc.name) + } + } +} + +func TestValidateDefaultGenesis(t *testing.T) { + err := types.DefaultGenesisState().Validate() + require.NoError(t, err) +} diff --git a/modules/apps/29-fee/types/keys.go b/modules/apps/29-fee/types/keys.go new file mode 100644 index 00000000000..188a75e7ac3 --- /dev/null +++ b/modules/apps/29-fee/types/keys.go @@ -0,0 +1,139 @@ +package types + +import ( + "fmt" + "strconv" + "strings" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" +) + +const ( + // ModuleName defines the 29-fee name + ModuleName = "feeibc" + + // StoreKey is the store key string for IBC fee module + StoreKey = ModuleName + + // RouterKey is the message route for IBC fee module + RouterKey = ModuleName + + // QuerierRoute is the querier route for IBC fee module + QuerierRoute = ModuleName + + Version = "fee29-1" + + // FeeEnabledPrefix is the key prefix for storing fee enabled flag + FeeEnabledKeyPrefix = "feeEnabled" + + // CounterpartyRelayerAddressKeyPrefix is the key prefix for relayer address mapping + CounterpartyRelayerAddressKeyPrefix = "relayerAddress" + + // FeesInEscrowPrefix is the key prefix for fee in escrow mapping + FeesInEscrowPrefix = "feesInEscrow" + + // ForwardRelayerPrefix is the key prefix for forward relayer addresses stored in state for async acknowledgements + ForwardRelayerPrefix = "forwardRelayer" +) + +// KeyLocked returns the key used to lock and unlock the fee module. This key is used +// in the presence of a severe bug. +func KeyLocked() []byte { + return []byte("locked") +} + +// KeyFeeEnabled returns the key that stores a flag to determine if fee logic should +// be enabled for the given port and channel identifiers. +func KeyFeeEnabled(portID, channelID string) []byte { + return []byte(fmt.Sprintf("%s/%s/%s", FeeEnabledKeyPrefix, portID, channelID)) +} + +// ParseKeyFeeEnabled parses the key used to indicate if the fee logic should be +// enabled for the given port and channel identifiers. +func ParseKeyFeeEnabled(key string) (portID, channelID string, err error) { + keySplit := strings.Split(key, "/") + if len(keySplit) != 3 { + return "", "", sdkerrors.Wrapf( + sdkerrors.ErrLogic, "key provided is incorrect: the key split has incorrect length, expected %d, got %d", 3, len(keySplit), + ) + } + + if keySplit[0] != FeeEnabledKeyPrefix { + return "", "", sdkerrors.Wrapf(sdkerrors.ErrLogic, "key prefix is incorrect: expected %s, got %s", FeeEnabledKeyPrefix, keySplit[0]) + } + + portID = keySplit[1] + channelID = keySplit[2] + + return portID, channelID, nil +} + +// KeyCounterpartyRelayer returns the key for relayer address -> counterparty address mapping +func KeyCounterpartyRelayer(address, channelID string) []byte { + return []byte(fmt.Sprintf("%s/%s/%s", CounterpartyRelayerAddressKeyPrefix, address, channelID)) +} + +// ParseKeyCounterpartyRelayer returns the registered relayer address and channelID used to store the counterpartyrelayer address +func ParseKeyCounterpartyRelayer(key string) (address string, channelID string, error error) { + keySplit := strings.Split(key, "/") + if len(keySplit) != 3 { + return "", "", sdkerrors.Wrapf( + sdkerrors.ErrLogic, "key provided is incorrect: the key split has incorrect length, expected %d, got %d", 3, len(keySplit), + ) + } + + return keySplit[1], keySplit[2], nil +} + +// KeyForwardRelayerAddress returns the key for packetID -> forwardAddress mapping +func KeyForwardRelayerAddress(packetID channeltypes.PacketId) []byte { + return []byte(fmt.Sprintf("%s/%s/%s/%d", ForwardRelayerPrefix, packetID.PortId, packetID.ChannelId, packetID.Sequence)) +} + +// ParseKeyForwardRelayerAddress parses the key used to store the forward relayer address and returns the packetID +func ParseKeyForwardRelayerAddress(key string) (channeltypes.PacketId, error) { + keySplit := strings.Split(key, "/") + if len(keySplit) != 4 { + return channeltypes.PacketId{}, sdkerrors.Wrapf( + sdkerrors.ErrLogic, "key provided is incorrect: the key split has incorrect length, expected %d, got %d", 4, len(keySplit), + ) + } + + seq, err := strconv.ParseUint(keySplit[3], 10, 64) + if err != nil { + return channeltypes.PacketId{}, err + } + + packetID := channeltypes.NewPacketId(keySplit[1], keySplit[2], seq) + return packetID, nil +} + +// KeyFeesInEscrow returns the key for escrowed fees +func KeyFeesInEscrow(packetID channeltypes.PacketId) []byte { + return []byte(fmt.Sprintf("%s/%d", KeyFeesInEscrowChannelPrefix(packetID.PortId, packetID.ChannelId), packetID.Sequence)) +} + +// ParseKeyFeesInEscrow parses the key used to store fees in escrow and returns the packet id +func ParseKeyFeesInEscrow(key string) (channeltypes.PacketId, error) { + keySplit := strings.Split(key, "/") + if len(keySplit) != 4 { + return channeltypes.PacketId{}, sdkerrors.Wrapf( + sdkerrors.ErrLogic, "key provided is incorrect: the key split has incorrect length, expected %d, got %d", 4, len(keySplit), + ) + } + + seq, err := strconv.ParseUint(keySplit[3], 10, 64) + if err != nil { + return channeltypes.PacketId{}, err + } + + packetID := channeltypes.NewPacketId(keySplit[1], keySplit[2], seq) + return packetID, nil +} + +// KeyFeesInEscrowChannelPrefix returns the key prefix for escrowed fees on the given channel +func KeyFeesInEscrowChannelPrefix(portID, channelID string) []byte { + return []byte(fmt.Sprintf("%s/%s/%s", FeesInEscrowPrefix, portID, channelID)) +} diff --git a/modules/apps/29-fee/types/keys_test.go b/modules/apps/29-fee/types/keys_test.go new file mode 100644 index 00000000000..22dc91b6a57 --- /dev/null +++ b/modules/apps/29-fee/types/keys_test.go @@ -0,0 +1,176 @@ +package types_test + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" +) + +var ( + validPacketID = channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) +) + +func TestKeyCounterpartyRelayer(t *testing.T) { + var ( + relayerAddress = "relayer_address" + channelID = "channel-0" + ) + + key := types.KeyCounterpartyRelayer(relayerAddress, channelID) + require.Equal(t, string(key), fmt.Sprintf("%s/%s/%s", types.CounterpartyRelayerAddressKeyPrefix, relayerAddress, channelID)) +} + +func TestKeyFeesInEscrow(t *testing.T) { + key := types.KeyFeesInEscrow(validPacketID) + require.Equal(t, string(key), fmt.Sprintf("%s/%s/%s/%d", types.FeesInEscrowPrefix, ibctesting.MockFeePort, ibctesting.FirstChannelID, 1)) +} + +func TestParseKeyFeeEnabled(t *testing.T) { + testCases := []struct { + name string + key string + expPass bool + }{ + { + "success", + string(types.KeyFeeEnabled(ibctesting.MockPort, ibctesting.FirstChannelID)), + true, + }, + { + "incorrect key - key split has incorrect length", + string(types.KeyFeesInEscrow(validPacketID)), + false, + }, + { + "incorrect key - key split has incorrect length", + fmt.Sprintf("%s/%s/%s", "fee", ibctesting.MockPort, ibctesting.FirstChannelID), + false, + }, + } + + for _, tc := range testCases { + portID, channelID, err := types.ParseKeyFeeEnabled(tc.key) + + if tc.expPass { + require.NoError(t, err) + require.Equal(t, ibctesting.MockPort, portID) + require.Equal(t, ibctesting.FirstChannelID, channelID) + } else { + require.Error(t, err) + require.Empty(t, portID) + require.Empty(t, channelID) + } + } +} + +func TestParseKeyFeesInEscrow(t *testing.T) { + + testCases := []struct { + name string + key string + expPass bool + }{ + { + "success", + string(types.KeyFeesInEscrow(validPacketID)), + true, + }, + { + "incorrect key - key split has incorrect length", + string(types.KeyFeeEnabled(validPacketID.PortId, validPacketID.ChannelId)), + false, + }, + { + "incorrect key - sequence cannot be parsed", + fmt.Sprintf("%s/%s", types.KeyFeesInEscrowChannelPrefix(validPacketID.PortId, validPacketID.ChannelId), "sequence"), + false, + }, + } + + for _, tc := range testCases { + packetID, err := types.ParseKeyFeesInEscrow(tc.key) + + if tc.expPass { + require.NoError(t, err) + require.Equal(t, validPacketID, packetID) + } else { + require.Error(t, err) + } + } +} + +func TestParseKeyForwardRelayerAddress(t *testing.T) { + + testCases := []struct { + name string + key string + expPass bool + }{ + { + "success", + string(types.KeyForwardRelayerAddress(validPacketID)), + true, + }, + { + "incorrect key - key split has incorrect length", + "forwardRelayer/transfer/channel-0", + false, + }, + { + "incorrect key - sequence is not correct", + "forwardRelayer/transfer/channel-0/sequence", + false, + }, + } + + for _, tc := range testCases { + packetID, err := types.ParseKeyForwardRelayerAddress(tc.key) + + if tc.expPass { + require.NoError(t, err) + require.Equal(t, validPacketID, packetID) + } else { + require.Error(t, err) + } + } +} + +func TestParseKeyCounterpartyRelayer(t *testing.T) { + var ( + relayerAddress = "relayer_address" + ) + + testCases := []struct { + name string + key string + expPass bool + }{ + { + "success", + string(types.KeyCounterpartyRelayer(relayerAddress, ibctesting.FirstChannelID)), + true, + }, + { + "incorrect key - key split has incorrect length", + "relayerAddress/relayer_address/transfer/channel-0", + false, + }, + } + + for _, tc := range testCases { + address, channelID, err := types.ParseKeyCounterpartyRelayer(tc.key) + + if tc.expPass { + require.NoError(t, err) + require.Equal(t, relayerAddress, address) + require.Equal(t, ibctesting.FirstChannelID, channelID) + } else { + require.Error(t, err) + } + } +} diff --git a/modules/apps/29-fee/types/metadata.pb.go b/modules/apps/29-fee/types/metadata.pb.go new file mode 100644 index 00000000000..95bb9244946 --- /dev/null +++ b/modules/apps/29-fee/types/metadata.pb.go @@ -0,0 +1,378 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/applications/fee/v1/metadata.proto + +package types + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Metadata defines the ICS29 channel specific metadata encoded into the channel version bytestring +// See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning +type Metadata struct { + // fee_version defines the ICS29 fee version + FeeVersion string `protobuf:"bytes,1,opt,name=fee_version,json=feeVersion,proto3" json:"fee_version,omitempty" yaml:"fee_version"` + // app_version defines the underlying application version, which may or may not be a JSON encoded bytestring + AppVersion string `protobuf:"bytes,2,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty" yaml:"app_version"` +} + +func (m *Metadata) Reset() { *m = Metadata{} } +func (m *Metadata) String() string { return proto.CompactTextString(m) } +func (*Metadata) ProtoMessage() {} +func (*Metadata) Descriptor() ([]byte, []int) { + return fileDescriptor_03d0f000eda681ce, []int{0} +} +func (m *Metadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Metadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Metadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_Metadata.Merge(m, src) +} +func (m *Metadata) XXX_Size() int { + return m.Size() +} +func (m *Metadata) XXX_DiscardUnknown() { + xxx_messageInfo_Metadata.DiscardUnknown(m) +} + +var xxx_messageInfo_Metadata proto.InternalMessageInfo + +func (m *Metadata) GetFeeVersion() string { + if m != nil { + return m.FeeVersion + } + return "" +} + +func (m *Metadata) GetAppVersion() string { + if m != nil { + return m.AppVersion + } + return "" +} + +func init() { + proto.RegisterType((*Metadata)(nil), "ibc.applications.fee.v1.Metadata") +} + +func init() { + proto.RegisterFile("ibc/applications/fee/v1/metadata.proto", fileDescriptor_03d0f000eda681ce) +} + +var fileDescriptor_03d0f000eda681ce = []byte{ + // 248 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcb, 0x4c, 0x4a, 0xd6, + 0x4f, 0x2c, 0x28, 0xc8, 0xc9, 0x4c, 0x4e, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x4f, 0x4b, 0x4d, + 0xd5, 0x2f, 0x33, 0xd4, 0xcf, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0x12, 0xcf, 0x4c, 0x4a, 0xd6, 0x43, 0x56, 0xa7, 0x97, 0x96, 0x9a, 0xaa, 0x57, + 0x66, 0x28, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa3, 0x0f, 0x62, 0x41, 0x94, 0x2b, 0xd5, + 0x70, 0x71, 0xf8, 0x42, 0x0d, 0x10, 0x32, 0xe7, 0xe2, 0x4e, 0x4b, 0x4d, 0x8d, 0x2f, 0x4b, 0x2d, + 0x2a, 0xce, 0xcc, 0xcf, 0x93, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x12, 0xfb, 0x74, 0x4f, 0x5e, + 0xa8, 0x32, 0x31, 0x37, 0xc7, 0x4a, 0x09, 0x49, 0x52, 0x29, 0x88, 0x2b, 0x2d, 0x35, 0x35, 0x0c, + 0xc2, 0x01, 0x69, 0x4c, 0x2c, 0x28, 0x80, 0x6b, 0x64, 0x42, 0xd7, 0x88, 0x24, 0xa9, 0x14, 0xc4, + 0x95, 0x58, 0x50, 0x00, 0xd5, 0xe8, 0xe4, 0x7f, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, + 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, + 0x0c, 0x51, 0xa6, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xc9, 0xf9, + 0xc5, 0xb9, 0xf9, 0xc5, 0xfa, 0x99, 0x49, 0xc9, 0xba, 0xe9, 0xf9, 0xfa, 0x65, 0xc6, 0xfa, 0xb9, + 0xf9, 0x29, 0xa5, 0x39, 0xa9, 0xc5, 0xa0, 0xe0, 0x28, 0xd6, 0x37, 0xb2, 0xd4, 0x05, 0x85, 0x44, + 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0x57, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x04, 0x84, 0x58, 0xe0, 0x2e, 0x01, 0x00, 0x00, +} + +func (m *Metadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Metadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Metadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AppVersion) > 0 { + i -= len(m.AppVersion) + copy(dAtA[i:], m.AppVersion) + i = encodeVarintMetadata(dAtA, i, uint64(len(m.AppVersion))) + i-- + dAtA[i] = 0x12 + } + if len(m.FeeVersion) > 0 { + i -= len(m.FeeVersion) + copy(dAtA[i:], m.FeeVersion) + i = encodeVarintMetadata(dAtA, i, uint64(len(m.FeeVersion))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintMetadata(dAtA []byte, offset int, v uint64) int { + offset -= sovMetadata(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Metadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FeeVersion) + if l > 0 { + n += 1 + l + sovMetadata(uint64(l)) + } + l = len(m.AppVersion) + if l > 0 { + n += 1 + l + sovMetadata(uint64(l)) + } + return n +} + +func sovMetadata(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozMetadata(x uint64) (n int) { + return sovMetadata(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Metadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Metadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FeeVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipMetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMetadata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipMetadata(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthMetadata + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupMetadata + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthMetadata + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthMetadata = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowMetadata = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupMetadata = fmt.Errorf("proto: unexpected end of group") +) diff --git a/modules/apps/29-fee/types/msgs.go b/modules/apps/29-fee/types/msgs.go new file mode 100644 index 00000000000..d2fec3e542f --- /dev/null +++ b/modules/apps/29-fee/types/msgs.go @@ -0,0 +1,164 @@ +package types + +import ( + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v3/modules/core/24-host" +) + +// msg types +const ( + TypeMsgPayPacketFee = "payPacketFee" + TypeMsgPayPacketFeeAsync = "payPacketFeeAsync" +) + +// NewMsgRegisterCounterpartyAddress creates a new instance of MsgRegisterCounterpartyAddress +func NewMsgRegisterCounterpartyAddress(address, counterpartyAddress, channelID string) *MsgRegisterCounterpartyAddress { + return &MsgRegisterCounterpartyAddress{ + Address: address, + CounterpartyAddress: counterpartyAddress, + ChannelId: channelID, + } +} + +// ValidateBasic performs a basic check of the MsgRegisterCounterpartyAddress fields +func (msg MsgRegisterCounterpartyAddress) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Address) + if err != nil { + return sdkerrors.Wrap(err, "failed to convert msg.Address into sdk.AccAddress") + } + + if strings.TrimSpace(msg.CounterpartyAddress) == "" { + return ErrCounterpartyAddressEmpty + } + + // validate channelId + if err := host.ChannelIdentifierValidator(msg.ChannelId); err != nil { + return err + } + + return nil +} + +// GetSigners implements sdk.Msg +func (msg MsgRegisterCounterpartyAddress) GetSigners() []sdk.AccAddress { + signer, err := sdk.AccAddressFromBech32(msg.Address) + if err != nil { + panic(err) + } + return []sdk.AccAddress{signer} +} + +// NewMsgPayPacketFee creates a new instance of MsgPayPacketFee +func NewMsgPayPacketFee(fee Fee, sourcePortId, sourceChannelId, signer string, relayers []string) *MsgPayPacketFee { + return &MsgPayPacketFee{ + Fee: fee, + SourcePortId: sourcePortId, + SourceChannelId: sourceChannelId, + Signer: signer, + Relayers: relayers, + } +} + +// ValidateBasic performs a basic check of the MsgPayPacketFee fields +func (msg MsgPayPacketFee) ValidateBasic() error { + // validate channelId + if err := host.ChannelIdentifierValidator(msg.SourceChannelId); err != nil { + return err + } + + // validate portId + if err := host.PortIdentifierValidator(msg.SourcePortId); err != nil { + return err + } + + // signer check + if _, err := sdk.AccAddressFromBech32(msg.Signer); err != nil { + return sdkerrors.Wrap(err, "failed to convert msg.Signer into sdk.AccAddress") + } + + // enforce relayer is nil + if msg.Relayers != nil { + return ErrRelayersNotNil + } + + if err := msg.Fee.Validate(); err != nil { + return err + } + + return nil +} + +// GetSigners implements sdk.Msg +func (msg MsgPayPacketFee) GetSigners() []sdk.AccAddress { + signer, err := sdk.AccAddressFromBech32(msg.Signer) + if err != nil { + panic(err) + } + return []sdk.AccAddress{signer} +} + +// Route implements sdk.Msg +func (msg MsgPayPacketFee) Route() string { + return RouterKey +} + +// Type implements sdk.Msg +func (msg MsgPayPacketFee) Type() string { + return TypeMsgPayPacketFee +} + +// GetSignBytes implements sdk.Msg. +func (msg MsgPayPacketFee) GetSignBytes() []byte { + return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) +} + +// NewMsgPayPacketAsync creates a new instance of MsgPayPacketFee +func NewMsgPayPacketFeeAsync(packetID channeltypes.PacketId, packetFee PacketFee) *MsgPayPacketFeeAsync { + return &MsgPayPacketFeeAsync{ + PacketId: packetID, + PacketFee: packetFee, + } +} + +// ValidateBasic performs a basic check of the MsgPayPacketFeeAsync fields +func (msg MsgPayPacketFeeAsync) ValidateBasic() error { + if err := msg.PacketId.Validate(); err != nil { + return err + } + + if err := msg.PacketFee.Validate(); err != nil { + return err + } + + return nil +} + +// GetSigners implements sdk.Msg +// The signer of the fee message must be the refund address +func (msg MsgPayPacketFeeAsync) GetSigners() []sdk.AccAddress { + signer, err := sdk.AccAddressFromBech32(msg.PacketFee.RefundAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{signer} +} + +// Route implements sdk.Msg +func (msg MsgPayPacketFeeAsync) Route() string { + return RouterKey +} + +// Type implements sdk.Msg +func (msg MsgPayPacketFeeAsync) Type() string { + return TypeMsgPayPacketFeeAsync +} + +// GetSignBytes implements sdk.Msg. +func (msg MsgPayPacketFeeAsync) GetSignBytes() []byte { + return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) +} diff --git a/modules/apps/29-fee/types/msgs_test.go b/modules/apps/29-fee/types/msgs_test.go new file mode 100644 index 00000000000..d314a4f4193 --- /dev/null +++ b/modules/apps/29-fee/types/msgs_test.go @@ -0,0 +1,319 @@ +package types_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" + channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v3/testing" + + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/crypto/secp256k1" +) + +func TestMsgRegisterCountepartyAddressValidation(t *testing.T) { + var ( + msg *types.MsgRegisterCounterpartyAddress + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "validate with incorrect destination relayer address", + func() { + msg.Address = "invalid-address" + }, + false, + }, + { + "invalid counterparty address", + func() { + msg.CounterpartyAddress = "" + }, + false, + }, + { + "invalid counterparty address: whitespaced empty string", + func() { + msg.CounterpartyAddress = " " + }, + false, + }, + { + "invalid channelID", + func() { + msg.ChannelId = "" + }, + false, + }, + } + + for i, tc := range testCases { + msg = types.NewMsgRegisterCounterpartyAddress(defaultAccAddress, defaultAccAddress, ibctesting.FirstChannelID) + + tc.malleate() + + err := msg.ValidateBasic() + + if tc.expPass { + require.NoError(t, err, "valid test case %d failed: %s", i, tc.name) + } else { + require.Error(t, err, "invalid test case %d passed: %s", i, tc.name) + } + } +} + +func TestRegisterCountepartyAddressGetSigners(t *testing.T) { + accAddress := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + msg := types.NewMsgRegisterCounterpartyAddress(accAddress.String(), defaultAccAddress, ibctesting.FirstChannelID) + require.Equal(t, []sdk.AccAddress{sdk.AccAddress(accAddress)}, msg.GetSigners()) +} + +func TestMsgPayPacketFeeValidation(t *testing.T) { + var ( + msg *types.MsgPayPacketFee + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "invalid channelID", + func() { + msg.SourceChannelId = "" + }, + false, + }, + { + "invalid portID", + func() { + msg.SourcePortId = "" + }, + false, + }, + { + "relayers is not nil", + func() { + msg.Relayers = []string{defaultAccAddress} + }, + false, + }, + { + "invalid signer address", + func() { + msg.Signer = "invalid-address" + }, + false, + }, + } + + for _, tc := range testCases { + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + msg = types.NewMsgPayPacketFee(fee, ibctesting.MockFeePort, ibctesting.FirstChannelID, defaultAccAddress, nil) + + tc.malleate() // malleate mutates test data + + err := msg.ValidateBasic() + + if tc.expPass { + require.NoError(t, err) + } else { + require.Error(t, err) + } + } +} + +func TestPayPacketFeeGetSigners(t *testing.T) { + refundAddr := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + msg := types.NewMsgPayPacketFee(fee, ibctesting.MockFeePort, ibctesting.FirstChannelID, refundAddr.String(), nil) + + require.Equal(t, []sdk.AccAddress{refundAddr}, msg.GetSigners()) +} + +func TestMsgPayPacketFeeRoute(t *testing.T) { + var msg types.MsgPayPacketFee + require.Equal(t, types.RouterKey, msg.Route()) +} + +func TestMsgPayPacketFeeType(t *testing.T) { + var msg types.MsgPayPacketFee + require.Equal(t, "payPacketFee", msg.Type()) +} + +func TestMsgPayPacketFeeGetSignBytes(t *testing.T) { + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + msg := types.NewMsgPayPacketFee(fee, ibctesting.MockFeePort, ibctesting.FirstChannelID, defaultAccAddress, nil) + + require.NotPanics(t, func() { + _ = msg.GetSignBytes() + }) +} + +func TestMsgPayPacketFeeAsyncValidation(t *testing.T) { + var ( + msg *types.MsgPayPacketFeeAsync + ) + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "invalid channelID", + func() { + msg.PacketId.ChannelId = "" + }, + false, + }, + { + "invalid portID", + func() { + msg.PacketId.PortId = "" + }, + false, + }, + { + "invalid sequence", + func() { + msg.PacketId.Sequence = 0 + }, + false, + }, + { + "relayers is not nil", + func() { + msg.PacketFee.Relayers = []string{defaultAccAddress} + }, + false, + }, + { + "invalid signer address", + func() { + msg.PacketFee.RefundAddress = "invalid-addr" + }, + false, + }, + { + "should fail when all fees are invalid", + func() { + msg.PacketFee.Fee.AckFee = invalidFee + msg.PacketFee.Fee.RecvFee = invalidFee + msg.PacketFee.Fee.TimeoutFee = invalidFee + }, + false, + }, + { + "should fail with single invalid fee", + func() { + msg.PacketFee.Fee.AckFee = invalidFee + }, + false, + }, + { + "should fail with two invalid fees", + func() { + msg.PacketFee.Fee.AckFee = invalidFee + msg.PacketFee.Fee.TimeoutFee = invalidFee + }, + false, + }, + { + "should pass with two empty fees", + func() { + msg.PacketFee.Fee.AckFee = sdk.Coins{} + msg.PacketFee.Fee.TimeoutFee = sdk.Coins{} + }, + true, + }, + { + "should pass with one empty fee", + func() { + msg.PacketFee.Fee.TimeoutFee = sdk.Coins{} + }, + true, + }, + { + "should fail if all fees are empty", + func() { + msg.PacketFee.Fee.AckFee = sdk.Coins{} + msg.PacketFee.Fee.RecvFee = sdk.Coins{} + msg.PacketFee.Fee.TimeoutFee = sdk.Coins{} + }, + false, + }, + } + + for _, tc := range testCases { + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, defaultAccAddress, nil) + + msg = types.NewMsgPayPacketFeeAsync(packetID, packetFee) + + tc.malleate() // malleate mutates test data + + err := msg.ValidateBasic() + + if tc.expPass { + require.NoError(t, err) + } else { + require.Error(t, err) + } + } +} + +func TestPayPacketFeeAsyncGetSigners(t *testing.T) { + refundAddr := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, refundAddr.String(), nil) + + msg := types.NewMsgPayPacketFeeAsync(packetID, packetFee) + + require.Equal(t, []sdk.AccAddress{refundAddr}, msg.GetSigners()) +} + +func TestMsgPayPacketFeeAsyncRoute(t *testing.T) { + var msg types.MsgPayPacketFeeAsync + require.Equal(t, types.RouterKey, msg.Route()) +} + +func TestMsgPayPacketFeeAsyncType(t *testing.T) { + var msg types.MsgPayPacketFeeAsync + require.Equal(t, "payPacketFeeAsync", msg.Type()) +} + +func TestMsgPayPacketFeeAsyncGetSignBytes(t *testing.T) { + packetID := channeltypes.NewPacketId(ibctesting.MockFeePort, ibctesting.FirstChannelID, 1) + fee := types.NewFee(defaultRecvFee, defaultAckFee, defaultTimeoutFee) + packetFee := types.NewPacketFee(fee, defaultAccAddress, nil) + + msg := types.NewMsgPayPacketFeeAsync(packetID, packetFee) + + require.NotPanics(t, func() { + _ = msg.GetSignBytes() + }) +} diff --git a/modules/apps/29-fee/types/query.pb.go b/modules/apps/29-fee/types/query.pb.go new file mode 100644 index 00000000000..32677378fe3 --- /dev/null +++ b/modules/apps/29-fee/types/query.pb.go @@ -0,0 +1,4162 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/applications/fee/v1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" + query "github.com/cosmos/cosmos-sdk/types/query" + types "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryIncentivizedPacketsRequest defines the request type for the IncentivizedPackets rpc +type QueryIncentivizedPacketsRequest struct { + // pagination defines an optional pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` + // block height at which to query + QueryHeight uint64 `protobuf:"varint,2,opt,name=query_height,json=queryHeight,proto3" json:"query_height,omitempty"` +} + +func (m *QueryIncentivizedPacketsRequest) Reset() { *m = QueryIncentivizedPacketsRequest{} } +func (m *QueryIncentivizedPacketsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryIncentivizedPacketsRequest) ProtoMessage() {} +func (*QueryIncentivizedPacketsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{0} +} +func (m *QueryIncentivizedPacketsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIncentivizedPacketsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIncentivizedPacketsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIncentivizedPacketsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIncentivizedPacketsRequest.Merge(m, src) +} +func (m *QueryIncentivizedPacketsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryIncentivizedPacketsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIncentivizedPacketsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIncentivizedPacketsRequest proto.InternalMessageInfo + +func (m *QueryIncentivizedPacketsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +func (m *QueryIncentivizedPacketsRequest) GetQueryHeight() uint64 { + if m != nil { + return m.QueryHeight + } + return 0 +} + +// QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPackets rpc +type QueryIncentivizedPacketsResponse struct { + // list of identified fees for incentivized packets + IncentivizedPackets []IdentifiedPacketFees `protobuf:"bytes,1,rep,name=incentivized_packets,json=incentivizedPackets,proto3" json:"incentivized_packets"` +} + +func (m *QueryIncentivizedPacketsResponse) Reset() { *m = QueryIncentivizedPacketsResponse{} } +func (m *QueryIncentivizedPacketsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryIncentivizedPacketsResponse) ProtoMessage() {} +func (*QueryIncentivizedPacketsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{1} +} +func (m *QueryIncentivizedPacketsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIncentivizedPacketsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIncentivizedPacketsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIncentivizedPacketsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIncentivizedPacketsResponse.Merge(m, src) +} +func (m *QueryIncentivizedPacketsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryIncentivizedPacketsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIncentivizedPacketsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIncentivizedPacketsResponse proto.InternalMessageInfo + +func (m *QueryIncentivizedPacketsResponse) GetIncentivizedPackets() []IdentifiedPacketFees { + if m != nil { + return m.IncentivizedPackets + } + return nil +} + +// QueryIncentivizedPacketRequest defines the request type for the IncentivizedPacket rpc +type QueryIncentivizedPacketRequest struct { + // unique packet identifier comprised of channel ID, port ID and sequence + PacketId types.PacketId `protobuf:"bytes,1,opt,name=packet_id,json=packetId,proto3" json:"packet_id"` + // block height at which to query + QueryHeight uint64 `protobuf:"varint,2,opt,name=query_height,json=queryHeight,proto3" json:"query_height,omitempty"` +} + +func (m *QueryIncentivizedPacketRequest) Reset() { *m = QueryIncentivizedPacketRequest{} } +func (m *QueryIncentivizedPacketRequest) String() string { return proto.CompactTextString(m) } +func (*QueryIncentivizedPacketRequest) ProtoMessage() {} +func (*QueryIncentivizedPacketRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{2} +} +func (m *QueryIncentivizedPacketRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIncentivizedPacketRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIncentivizedPacketRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIncentivizedPacketRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIncentivizedPacketRequest.Merge(m, src) +} +func (m *QueryIncentivizedPacketRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryIncentivizedPacketRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIncentivizedPacketRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIncentivizedPacketRequest proto.InternalMessageInfo + +func (m *QueryIncentivizedPacketRequest) GetPacketId() types.PacketId { + if m != nil { + return m.PacketId + } + return types.PacketId{} +} + +func (m *QueryIncentivizedPacketRequest) GetQueryHeight() uint64 { + if m != nil { + return m.QueryHeight + } + return 0 +} + +// QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPacket rpc +type QueryIncentivizedPacketResponse struct { + // the identified fees for the incentivized packet + IncentivizedPacket IdentifiedPacketFees `protobuf:"bytes,1,opt,name=incentivized_packet,json=incentivizedPacket,proto3" json:"incentivized_packet"` +} + +func (m *QueryIncentivizedPacketResponse) Reset() { *m = QueryIncentivizedPacketResponse{} } +func (m *QueryIncentivizedPacketResponse) String() string { return proto.CompactTextString(m) } +func (*QueryIncentivizedPacketResponse) ProtoMessage() {} +func (*QueryIncentivizedPacketResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{3} +} +func (m *QueryIncentivizedPacketResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIncentivizedPacketResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIncentivizedPacketResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIncentivizedPacketResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIncentivizedPacketResponse.Merge(m, src) +} +func (m *QueryIncentivizedPacketResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryIncentivizedPacketResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIncentivizedPacketResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIncentivizedPacketResponse proto.InternalMessageInfo + +func (m *QueryIncentivizedPacketResponse) GetIncentivizedPacket() IdentifiedPacketFees { + if m != nil { + return m.IncentivizedPacket + } + return IdentifiedPacketFees{} +} + +// QueryIncentivizedPacketsForChannelRequest defines the request type for querying for all incentivized packets +// for a specific channel +type QueryIncentivizedPacketsForChannelRequest struct { + // pagination defines an optional pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` + PortId string `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + ChannelId string `protobuf:"bytes,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // Height to query at + QueryHeight uint64 `protobuf:"varint,4,opt,name=query_height,json=queryHeight,proto3" json:"query_height,omitempty"` +} + +func (m *QueryIncentivizedPacketsForChannelRequest) Reset() { + *m = QueryIncentivizedPacketsForChannelRequest{} +} +func (m *QueryIncentivizedPacketsForChannelRequest) String() string { + return proto.CompactTextString(m) +} +func (*QueryIncentivizedPacketsForChannelRequest) ProtoMessage() {} +func (*QueryIncentivizedPacketsForChannelRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{4} +} +func (m *QueryIncentivizedPacketsForChannelRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIncentivizedPacketsForChannelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIncentivizedPacketsForChannelRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIncentivizedPacketsForChannelRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIncentivizedPacketsForChannelRequest.Merge(m, src) +} +func (m *QueryIncentivizedPacketsForChannelRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryIncentivizedPacketsForChannelRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIncentivizedPacketsForChannelRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIncentivizedPacketsForChannelRequest proto.InternalMessageInfo + +func (m *QueryIncentivizedPacketsForChannelRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +func (m *QueryIncentivizedPacketsForChannelRequest) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *QueryIncentivizedPacketsForChannelRequest) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *QueryIncentivizedPacketsForChannelRequest) GetQueryHeight() uint64 { + if m != nil { + return m.QueryHeight + } + return 0 +} + +// QueryIncentivizedPacketsResponse defines the response type for the incentivized packets RPC +type QueryIncentivizedPacketsForChannelResponse struct { + // Map of all incentivized_packets + IncentivizedPackets []*IdentifiedPacketFees `protobuf:"bytes,1,rep,name=incentivized_packets,json=incentivizedPackets,proto3" json:"incentivized_packets,omitempty"` +} + +func (m *QueryIncentivizedPacketsForChannelResponse) Reset() { + *m = QueryIncentivizedPacketsForChannelResponse{} +} +func (m *QueryIncentivizedPacketsForChannelResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryIncentivizedPacketsForChannelResponse) ProtoMessage() {} +func (*QueryIncentivizedPacketsForChannelResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{5} +} +func (m *QueryIncentivizedPacketsForChannelResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIncentivizedPacketsForChannelResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIncentivizedPacketsForChannelResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIncentivizedPacketsForChannelResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIncentivizedPacketsForChannelResponse.Merge(m, src) +} +func (m *QueryIncentivizedPacketsForChannelResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryIncentivizedPacketsForChannelResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIncentivizedPacketsForChannelResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIncentivizedPacketsForChannelResponse proto.InternalMessageInfo + +func (m *QueryIncentivizedPacketsForChannelResponse) GetIncentivizedPackets() []*IdentifiedPacketFees { + if m != nil { + return m.IncentivizedPackets + } + return nil +} + +// QueryTotalRecvFeesRequest defines the request type for the TotalRecvFees rpc +type QueryTotalRecvFeesRequest struct { + // the packet identifier for the associated fees + PacketId types.PacketId `protobuf:"bytes,1,opt,name=packet_id,json=packetId,proto3" json:"packet_id"` +} + +func (m *QueryTotalRecvFeesRequest) Reset() { *m = QueryTotalRecvFeesRequest{} } +func (m *QueryTotalRecvFeesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalRecvFeesRequest) ProtoMessage() {} +func (*QueryTotalRecvFeesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{6} +} +func (m *QueryTotalRecvFeesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalRecvFeesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalRecvFeesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalRecvFeesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalRecvFeesRequest.Merge(m, src) +} +func (m *QueryTotalRecvFeesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalRecvFeesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalRecvFeesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalRecvFeesRequest proto.InternalMessageInfo + +func (m *QueryTotalRecvFeesRequest) GetPacketId() types.PacketId { + if m != nil { + return m.PacketId + } + return types.PacketId{} +} + +// QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees rpc +type QueryTotalRecvFeesResponse struct { + // the total packet receive fees + RecvFees github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=recv_fees,json=recvFees,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"recv_fees" yaml:"recv_fees"` +} + +func (m *QueryTotalRecvFeesResponse) Reset() { *m = QueryTotalRecvFeesResponse{} } +func (m *QueryTotalRecvFeesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalRecvFeesResponse) ProtoMessage() {} +func (*QueryTotalRecvFeesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{7} +} +func (m *QueryTotalRecvFeesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalRecvFeesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalRecvFeesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalRecvFeesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalRecvFeesResponse.Merge(m, src) +} +func (m *QueryTotalRecvFeesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalRecvFeesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalRecvFeesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalRecvFeesResponse proto.InternalMessageInfo + +func (m *QueryTotalRecvFeesResponse) GetRecvFees() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.RecvFees + } + return nil +} + +// QueryTotalAckFeesRequest defines the request type for the TotalAckFees rpc +type QueryTotalAckFeesRequest struct { + // the packet identifier for the associated fees + PacketId types.PacketId `protobuf:"bytes,1,opt,name=packet_id,json=packetId,proto3" json:"packet_id"` +} + +func (m *QueryTotalAckFeesRequest) Reset() { *m = QueryTotalAckFeesRequest{} } +func (m *QueryTotalAckFeesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalAckFeesRequest) ProtoMessage() {} +func (*QueryTotalAckFeesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{8} +} +func (m *QueryTotalAckFeesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalAckFeesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalAckFeesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalAckFeesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalAckFeesRequest.Merge(m, src) +} +func (m *QueryTotalAckFeesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalAckFeesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalAckFeesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalAckFeesRequest proto.InternalMessageInfo + +func (m *QueryTotalAckFeesRequest) GetPacketId() types.PacketId { + if m != nil { + return m.PacketId + } + return types.PacketId{} +} + +// QueryTotalAckFeesResponse defines the response type for the TotalAckFees rpc +type QueryTotalAckFeesResponse struct { + // the total packet acknowledgement fees + AckFees github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=ack_fees,json=ackFees,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"ack_fees" yaml:"ack_fees"` +} + +func (m *QueryTotalAckFeesResponse) Reset() { *m = QueryTotalAckFeesResponse{} } +func (m *QueryTotalAckFeesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalAckFeesResponse) ProtoMessage() {} +func (*QueryTotalAckFeesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{9} +} +func (m *QueryTotalAckFeesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalAckFeesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalAckFeesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalAckFeesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalAckFeesResponse.Merge(m, src) +} +func (m *QueryTotalAckFeesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalAckFeesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalAckFeesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalAckFeesResponse proto.InternalMessageInfo + +func (m *QueryTotalAckFeesResponse) GetAckFees() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.AckFees + } + return nil +} + +// QueryTotalTimeoutFeesRequest defines the request type for the TotalTimeoutFees rpc +type QueryTotalTimeoutFeesRequest struct { + // the packet identifier for the associated fees + PacketId types.PacketId `protobuf:"bytes,1,opt,name=packet_id,json=packetId,proto3" json:"packet_id"` +} + +func (m *QueryTotalTimeoutFeesRequest) Reset() { *m = QueryTotalTimeoutFeesRequest{} } +func (m *QueryTotalTimeoutFeesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalTimeoutFeesRequest) ProtoMessage() {} +func (*QueryTotalTimeoutFeesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{10} +} +func (m *QueryTotalTimeoutFeesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalTimeoutFeesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalTimeoutFeesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalTimeoutFeesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalTimeoutFeesRequest.Merge(m, src) +} +func (m *QueryTotalTimeoutFeesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalTimeoutFeesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalTimeoutFeesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalTimeoutFeesRequest proto.InternalMessageInfo + +func (m *QueryTotalTimeoutFeesRequest) GetPacketId() types.PacketId { + if m != nil { + return m.PacketId + } + return types.PacketId{} +} + +// QueryTotalTimeoutFeesResponse defines the response type for the TotalTimeoutFees rpc +type QueryTotalTimeoutFeesResponse struct { + // the total packet timeout fees + TimeoutFees github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=timeout_fees,json=timeoutFees,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"timeout_fees" yaml:"timeout_fees"` +} + +func (m *QueryTotalTimeoutFeesResponse) Reset() { *m = QueryTotalTimeoutFeesResponse{} } +func (m *QueryTotalTimeoutFeesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalTimeoutFeesResponse) ProtoMessage() {} +func (*QueryTotalTimeoutFeesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{11} +} +func (m *QueryTotalTimeoutFeesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalTimeoutFeesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalTimeoutFeesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalTimeoutFeesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalTimeoutFeesResponse.Merge(m, src) +} +func (m *QueryTotalTimeoutFeesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalTimeoutFeesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalTimeoutFeesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalTimeoutFeesResponse proto.InternalMessageInfo + +func (m *QueryTotalTimeoutFeesResponse) GetTimeoutFees() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.TimeoutFees + } + return nil +} + +// QueryCounterpartyAddressRequest defines the request type for the CounterpartyAddress rpc +type QueryCounterpartyAddressRequest struct { + // unique channel identifier + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + // the relayer address to which the counterparty is registered + RelayerAddress string `protobuf:"bytes,2,opt,name=relayer_address,json=relayerAddress,proto3" json:"relayer_address,omitempty" yaml:"relayer_address"` +} + +func (m *QueryCounterpartyAddressRequest) Reset() { *m = QueryCounterpartyAddressRequest{} } +func (m *QueryCounterpartyAddressRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCounterpartyAddressRequest) ProtoMessage() {} +func (*QueryCounterpartyAddressRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{12} +} +func (m *QueryCounterpartyAddressRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCounterpartyAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCounterpartyAddressRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryCounterpartyAddressRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCounterpartyAddressRequest.Merge(m, src) +} +func (m *QueryCounterpartyAddressRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryCounterpartyAddressRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCounterpartyAddressRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCounterpartyAddressRequest proto.InternalMessageInfo + +func (m *QueryCounterpartyAddressRequest) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *QueryCounterpartyAddressRequest) GetRelayerAddress() string { + if m != nil { + return m.RelayerAddress + } + return "" +} + +// QueryCounterpartyAddressResponse defines the response type for the CounterpartyAddress rpc +type QueryCounterpartyAddressResponse struct { + // the counterparty address used to compensate forward relaying + CounterpartyAddress string `protobuf:"bytes,1,opt,name=counterparty_address,json=counterpartyAddress,proto3" json:"counterparty_address,omitempty" yaml:"counterparty_address"` +} + +func (m *QueryCounterpartyAddressResponse) Reset() { *m = QueryCounterpartyAddressResponse{} } +func (m *QueryCounterpartyAddressResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCounterpartyAddressResponse) ProtoMessage() {} +func (*QueryCounterpartyAddressResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{13} +} +func (m *QueryCounterpartyAddressResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCounterpartyAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCounterpartyAddressResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryCounterpartyAddressResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCounterpartyAddressResponse.Merge(m, src) +} +func (m *QueryCounterpartyAddressResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryCounterpartyAddressResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCounterpartyAddressResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCounterpartyAddressResponse proto.InternalMessageInfo + +func (m *QueryCounterpartyAddressResponse) GetCounterpartyAddress() string { + if m != nil { + return m.CounterpartyAddress + } + return "" +} + +// QueryFeeEnabledChannelsRequest defines the request type for the FeeEnabledChannels rpc +type QueryFeeEnabledChannelsRequest struct { + // pagination defines an optional pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` + // block height at which to query + QueryHeight uint64 `protobuf:"varint,2,opt,name=query_height,json=queryHeight,proto3" json:"query_height,omitempty"` +} + +func (m *QueryFeeEnabledChannelsRequest) Reset() { *m = QueryFeeEnabledChannelsRequest{} } +func (m *QueryFeeEnabledChannelsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryFeeEnabledChannelsRequest) ProtoMessage() {} +func (*QueryFeeEnabledChannelsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{14} +} +func (m *QueryFeeEnabledChannelsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryFeeEnabledChannelsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryFeeEnabledChannelsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryFeeEnabledChannelsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFeeEnabledChannelsRequest.Merge(m, src) +} +func (m *QueryFeeEnabledChannelsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryFeeEnabledChannelsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFeeEnabledChannelsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryFeeEnabledChannelsRequest proto.InternalMessageInfo + +func (m *QueryFeeEnabledChannelsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +func (m *QueryFeeEnabledChannelsRequest) GetQueryHeight() uint64 { + if m != nil { + return m.QueryHeight + } + return 0 +} + +// QueryFeeEnabledChannelsResponse defines the response type for the FeeEnabledChannels rpc +type QueryFeeEnabledChannelsResponse struct { + // list of fee enabled channels + FeeEnabledChannels []FeeEnabledChannel `protobuf:"bytes,1,rep,name=fee_enabled_channels,json=feeEnabledChannels,proto3" json:"fee_enabled_channels" yaml:"fee_enabled_channels"` +} + +func (m *QueryFeeEnabledChannelsResponse) Reset() { *m = QueryFeeEnabledChannelsResponse{} } +func (m *QueryFeeEnabledChannelsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryFeeEnabledChannelsResponse) ProtoMessage() {} +func (*QueryFeeEnabledChannelsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{15} +} +func (m *QueryFeeEnabledChannelsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryFeeEnabledChannelsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryFeeEnabledChannelsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryFeeEnabledChannelsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFeeEnabledChannelsResponse.Merge(m, src) +} +func (m *QueryFeeEnabledChannelsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryFeeEnabledChannelsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFeeEnabledChannelsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryFeeEnabledChannelsResponse proto.InternalMessageInfo + +func (m *QueryFeeEnabledChannelsResponse) GetFeeEnabledChannels() []FeeEnabledChannel { + if m != nil { + return m.FeeEnabledChannels + } + return nil +} + +// QueryFeeEnabledChannelRequest defines the request type for the FeeEnabledChannel rpc +type QueryFeeEnabledChannelRequest struct { + // unique port identifier + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + // unique channel identifier + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` +} + +func (m *QueryFeeEnabledChannelRequest) Reset() { *m = QueryFeeEnabledChannelRequest{} } +func (m *QueryFeeEnabledChannelRequest) String() string { return proto.CompactTextString(m) } +func (*QueryFeeEnabledChannelRequest) ProtoMessage() {} +func (*QueryFeeEnabledChannelRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{16} +} +func (m *QueryFeeEnabledChannelRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryFeeEnabledChannelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryFeeEnabledChannelRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryFeeEnabledChannelRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFeeEnabledChannelRequest.Merge(m, src) +} +func (m *QueryFeeEnabledChannelRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryFeeEnabledChannelRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFeeEnabledChannelRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryFeeEnabledChannelRequest proto.InternalMessageInfo + +func (m *QueryFeeEnabledChannelRequest) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *QueryFeeEnabledChannelRequest) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +// QueryFeeEnabledChannelResponse defines the response type for the FeeEnabledChannel rpc +type QueryFeeEnabledChannelResponse struct { + // boolean flag representing the fee enabled channel status + FeeEnabled bool `protobuf:"varint,1,opt,name=fee_enabled,json=feeEnabled,proto3" json:"fee_enabled,omitempty" yaml:"fee_enabled"` +} + +func (m *QueryFeeEnabledChannelResponse) Reset() { *m = QueryFeeEnabledChannelResponse{} } +func (m *QueryFeeEnabledChannelResponse) String() string { return proto.CompactTextString(m) } +func (*QueryFeeEnabledChannelResponse) ProtoMessage() {} +func (*QueryFeeEnabledChannelResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0638a8a78ca2503c, []int{17} +} +func (m *QueryFeeEnabledChannelResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryFeeEnabledChannelResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryFeeEnabledChannelResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryFeeEnabledChannelResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFeeEnabledChannelResponse.Merge(m, src) +} +func (m *QueryFeeEnabledChannelResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryFeeEnabledChannelResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFeeEnabledChannelResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryFeeEnabledChannelResponse proto.InternalMessageInfo + +func (m *QueryFeeEnabledChannelResponse) GetFeeEnabled() bool { + if m != nil { + return m.FeeEnabled + } + return false +} + +func init() { + proto.RegisterType((*QueryIncentivizedPacketsRequest)(nil), "ibc.applications.fee.v1.QueryIncentivizedPacketsRequest") + proto.RegisterType((*QueryIncentivizedPacketsResponse)(nil), "ibc.applications.fee.v1.QueryIncentivizedPacketsResponse") + proto.RegisterType((*QueryIncentivizedPacketRequest)(nil), "ibc.applications.fee.v1.QueryIncentivizedPacketRequest") + proto.RegisterType((*QueryIncentivizedPacketResponse)(nil), "ibc.applications.fee.v1.QueryIncentivizedPacketResponse") + proto.RegisterType((*QueryIncentivizedPacketsForChannelRequest)(nil), "ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelRequest") + proto.RegisterType((*QueryIncentivizedPacketsForChannelResponse)(nil), "ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelResponse") + proto.RegisterType((*QueryTotalRecvFeesRequest)(nil), "ibc.applications.fee.v1.QueryTotalRecvFeesRequest") + proto.RegisterType((*QueryTotalRecvFeesResponse)(nil), "ibc.applications.fee.v1.QueryTotalRecvFeesResponse") + proto.RegisterType((*QueryTotalAckFeesRequest)(nil), "ibc.applications.fee.v1.QueryTotalAckFeesRequest") + proto.RegisterType((*QueryTotalAckFeesResponse)(nil), "ibc.applications.fee.v1.QueryTotalAckFeesResponse") + proto.RegisterType((*QueryTotalTimeoutFeesRequest)(nil), "ibc.applications.fee.v1.QueryTotalTimeoutFeesRequest") + proto.RegisterType((*QueryTotalTimeoutFeesResponse)(nil), "ibc.applications.fee.v1.QueryTotalTimeoutFeesResponse") + proto.RegisterType((*QueryCounterpartyAddressRequest)(nil), "ibc.applications.fee.v1.QueryCounterpartyAddressRequest") + proto.RegisterType((*QueryCounterpartyAddressResponse)(nil), "ibc.applications.fee.v1.QueryCounterpartyAddressResponse") + proto.RegisterType((*QueryFeeEnabledChannelsRequest)(nil), "ibc.applications.fee.v1.QueryFeeEnabledChannelsRequest") + proto.RegisterType((*QueryFeeEnabledChannelsResponse)(nil), "ibc.applications.fee.v1.QueryFeeEnabledChannelsResponse") + proto.RegisterType((*QueryFeeEnabledChannelRequest)(nil), "ibc.applications.fee.v1.QueryFeeEnabledChannelRequest") + proto.RegisterType((*QueryFeeEnabledChannelResponse)(nil), "ibc.applications.fee.v1.QueryFeeEnabledChannelResponse") +} + +func init() { + proto.RegisterFile("ibc/applications/fee/v1/query.proto", fileDescriptor_0638a8a78ca2503c) +} + +var fileDescriptor_0638a8a78ca2503c = []byte{ + // 1281 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4f, 0x6f, 0x1b, 0x45, + 0x1c, 0xcd, 0xa4, 0xa1, 0x4d, 0x26, 0xa1, 0x4d, 0xc7, 0xa1, 0x4d, 0x4d, 0x62, 0xa7, 0x53, 0x0a, + 0x21, 0x28, 0xbb, 0x8a, 0x43, 0x9b, 0x96, 0x53, 0x6b, 0x43, 0x68, 0x04, 0x82, 0x76, 0x95, 0x0b, + 0x08, 0xe4, 0xae, 0x77, 0xc7, 0xce, 0x2a, 0xce, 0xce, 0x76, 0x77, 0x6d, 0x70, 0xd3, 0x20, 0x35, + 0x52, 0x84, 0x04, 0x15, 0x42, 0x42, 0xe2, 0x80, 0xb8, 0x22, 0x24, 0x24, 0xb8, 0xf3, 0x0d, 0x7a, + 0xaa, 0x2a, 0x71, 0xe1, 0x64, 0xaa, 0x84, 0x4f, 0x60, 0x71, 0x40, 0xe2, 0x82, 0x76, 0x66, 0x76, + 0xbd, 0xee, 0xee, 0x26, 0xde, 0x92, 0x88, 0x53, 0xec, 0xf9, 0xfd, 0x99, 0xf7, 0xde, 0xfc, 0x3c, + 0xf3, 0x14, 0x78, 0xc1, 0xa8, 0x68, 0xb2, 0x6a, 0x59, 0x75, 0x43, 0x53, 0x5d, 0x83, 0x9a, 0x8e, + 0x5c, 0x25, 0x44, 0x6e, 0x2e, 0xc8, 0x77, 0x1a, 0xc4, 0x6e, 0x49, 0x96, 0x4d, 0x5d, 0x8a, 0xce, + 0x1a, 0x15, 0x4d, 0x0a, 0x27, 0x49, 0x55, 0x42, 0xa4, 0xe6, 0x42, 0x76, 0xa2, 0x46, 0x6b, 0x94, + 0xe5, 0xc8, 0xde, 0x27, 0x9e, 0x9e, 0x9d, 0xaa, 0x51, 0x5a, 0xab, 0x13, 0x59, 0xb5, 0x0c, 0x59, + 0x35, 0x4d, 0xea, 0x8a, 0x22, 0x1e, 0xcd, 0x69, 0xd4, 0xd9, 0xa0, 0x8e, 0x5c, 0x51, 0x1d, 0x6f, + 0xa3, 0x0a, 0x71, 0xd5, 0x05, 0x59, 0xa3, 0x86, 0x29, 0xe2, 0x73, 0xe1, 0x38, 0x43, 0x11, 0x64, + 0x59, 0x6a, 0xcd, 0x30, 0x59, 0x33, 0x91, 0x7b, 0x3e, 0x09, 0xbd, 0x87, 0x8f, 0xa7, 0x5c, 0x4c, + 0x4a, 0xa9, 0x11, 0x93, 0x38, 0x86, 0x13, 0xee, 0xa4, 0x51, 0x9b, 0xc8, 0xda, 0x9a, 0x6a, 0x9a, + 0xa4, 0xee, 0xa5, 0x88, 0x8f, 0x3c, 0x05, 0x3f, 0x00, 0x30, 0x7f, 0xcb, 0xc3, 0xb3, 0x62, 0x6a, + 0xc4, 0x74, 0x8d, 0xa6, 0x71, 0x97, 0xe8, 0x37, 0x55, 0x6d, 0x9d, 0xb8, 0x8e, 0x42, 0xee, 0x34, + 0x88, 0xe3, 0xa2, 0x65, 0x08, 0xbb, 0x20, 0x27, 0xc1, 0x0c, 0x98, 0x1d, 0x2d, 0xbc, 0x2c, 0x71, + 0x46, 0x92, 0xc7, 0x48, 0xe2, 0xba, 0x0a, 0x46, 0xd2, 0x4d, 0xb5, 0x46, 0x44, 0xad, 0x12, 0xaa, + 0x44, 0xe7, 0xe1, 0x18, 0x4b, 0x2c, 0xaf, 0x11, 0xa3, 0xb6, 0xe6, 0x4e, 0x0e, 0xce, 0x80, 0xd9, + 0x21, 0x65, 0x94, 0xad, 0xdd, 0x60, 0x4b, 0xf8, 0x0b, 0x00, 0x67, 0x92, 0xe1, 0x38, 0x16, 0x35, + 0x1d, 0x82, 0xaa, 0x70, 0xc2, 0x08, 0x85, 0xcb, 0x16, 0x8f, 0x4f, 0x82, 0x99, 0x63, 0xb3, 0xa3, + 0x85, 0x79, 0x29, 0xe1, 0x60, 0xa5, 0x15, 0xdd, 0xab, 0xa9, 0x1a, 0x7e, 0xc7, 0x65, 0x42, 0x9c, + 0xe2, 0xd0, 0xc3, 0x76, 0x7e, 0x40, 0xc9, 0x18, 0xd1, 0xfd, 0xf0, 0x0e, 0x80, 0xb9, 0x04, 0x30, + 0xbe, 0x34, 0xd7, 0xe0, 0x08, 0xdf, 0xbd, 0x6c, 0xe8, 0x42, 0x99, 0x69, 0xb6, 0xbf, 0xa7, 0xba, + 0xe4, 0x4b, 0xdd, 0xf4, 0x34, 0xf1, 0xb2, 0x56, 0x74, 0xb1, 0xdf, 0xb0, 0x25, 0xbe, 0xf7, 0x23, + 0xca, 0xe7, 0xc9, 0x67, 0x14, 0x68, 0xa2, 0xc3, 0x4c, 0x8c, 0x26, 0x02, 0xd2, 0x33, 0x49, 0x82, + 0xa2, 0x92, 0xe0, 0x47, 0x00, 0xbe, 0x9a, 0x74, 0x3c, 0xcb, 0xd4, 0x2e, 0x71, 0xbe, 0x87, 0x3d, + 0x37, 0x67, 0xe1, 0x09, 0x8b, 0xda, 0x4c, 0x62, 0x4f, 0x9d, 0x11, 0xe5, 0xb8, 0xf7, 0x75, 0x45, + 0x47, 0xd3, 0x10, 0x0a, 0x89, 0xbd, 0xd8, 0x31, 0x16, 0x1b, 0x11, 0x2b, 0x31, 0xd2, 0x0e, 0x45, + 0xa5, 0xfd, 0x0a, 0xc0, 0xb9, 0x7e, 0x08, 0x09, 0x95, 0x6f, 0x1f, 0xe2, 0xe4, 0xc5, 0xcf, 0xdc, + 0xc7, 0xf0, 0x1c, 0xc3, 0xb3, 0x4a, 0x5d, 0xb5, 0xae, 0x10, 0xad, 0xc9, 0x52, 0x0f, 0x6b, 0xda, + 0xf0, 0x77, 0x00, 0x66, 0xe3, 0xfa, 0x0b, 0x7e, 0xf7, 0xe0, 0x88, 0x4d, 0xb4, 0x66, 0xb9, 0x4a, + 0x88, 0x4f, 0xea, 0x5c, 0xcf, 0x81, 0xf9, 0x47, 0x55, 0xa2, 0x86, 0x59, 0x7c, 0xd3, 0x6b, 0xde, + 0x69, 0xe7, 0xc7, 0x5b, 0xea, 0x46, 0xfd, 0x0d, 0x1c, 0x54, 0xe2, 0x9f, 0xfe, 0xc8, 0xcf, 0xd6, + 0x0c, 0x77, 0xad, 0x51, 0x91, 0x34, 0xba, 0x21, 0x8b, 0xbb, 0x8f, 0xff, 0x99, 0x77, 0xf4, 0x75, + 0xd9, 0x6d, 0x59, 0xc4, 0x61, 0x4d, 0x1c, 0x65, 0xd8, 0x16, 0x28, 0xf0, 0x47, 0x70, 0xb2, 0x8b, + 0xed, 0xba, 0xb6, 0x7e, 0xb8, 0xd4, 0xbf, 0x05, 0x61, 0x69, 0x83, 0xf6, 0x82, 0x79, 0x0b, 0x0e, + 0xab, 0xda, 0x7a, 0x9f, 0xc4, 0x4b, 0x82, 0xf8, 0x29, 0x4e, 0xdc, 0x2f, 0x4c, 0xc7, 0xfb, 0x84, + 0xca, 0x21, 0xe0, 0xdb, 0x70, 0xaa, 0x8b, 0x6b, 0xd5, 0xd8, 0x20, 0xb4, 0xe1, 0x1e, 0x2e, 0xf5, + 0x1f, 0x01, 0x9c, 0x4e, 0xd8, 0x42, 0xd0, 0xdf, 0x01, 0x70, 0xcc, 0xe5, 0xeb, 0x7d, 0x6a, 0xf0, + 0xb6, 0xd0, 0x20, 0xc3, 0x35, 0x08, 0x17, 0xa7, 0xd3, 0x61, 0xd4, 0xed, 0xe2, 0xc1, 0xdf, 0xfb, + 0x57, 0x5d, 0x89, 0x36, 0x4c, 0x97, 0xd8, 0x96, 0x6a, 0xbb, 0xad, 0xeb, 0xba, 0x6e, 0x13, 0x27, + 0xd0, 0xe3, 0xf5, 0x9e, 0x5f, 0xbd, 0x27, 0xc8, 0x48, 0xf1, 0x85, 0x4e, 0x3b, 0x7f, 0x9a, 0x23, + 0xe9, 0xc6, 0x70, 0xf8, 0x32, 0x28, 0xc1, 0x53, 0x36, 0xa9, 0xab, 0x2d, 0x62, 0x97, 0x55, 0xde, + 0x8f, 0x5f, 0x26, 0xc5, 0x6c, 0xa7, 0x9d, 0x3f, 0xe3, 0x4f, 0x70, 0x4f, 0x02, 0x56, 0x4e, 0x8a, + 0x15, 0x81, 0x00, 0x37, 0xc5, 0xeb, 0x14, 0x8b, 0x4e, 0x48, 0xa9, 0xc0, 0x09, 0x2d, 0x14, 0x0e, + 0x76, 0xe3, 0x40, 0xf3, 0x9d, 0x76, 0xfe, 0x45, 0x01, 0x34, 0x26, 0x0b, 0x2b, 0x19, 0x2d, 0xda, + 0x1b, 0x7f, 0xe9, 0xbf, 0x44, 0xcb, 0x84, 0xbc, 0x65, 0xaa, 0x95, 0x3a, 0xd1, 0xc5, 0xd5, 0xf4, + 0x7f, 0x3c, 0xd2, 0x3f, 0xf8, 0x87, 0x14, 0x87, 0x46, 0xa8, 0x70, 0x1f, 0xc0, 0x89, 0x2a, 0x21, + 0x65, 0xc2, 0xe3, 0x65, 0x71, 0x10, 0xfe, 0x60, 0xcd, 0x25, 0x5e, 0x95, 0x91, 0x9e, 0xc5, 0x0b, + 0x62, 0xd2, 0x84, 0x6c, 0x71, 0x5d, 0xb1, 0x82, 0xaa, 0x11, 0x2c, 0x78, 0xdb, 0x1f, 0xfb, 0x48, + 0x4f, 0x5f, 0xb4, 0xd7, 0xba, 0x2f, 0x0b, 0x3f, 0x1e, 0xd4, 0x69, 0xe7, 0x4f, 0xf2, 0x7d, 0x44, + 0x00, 0x07, 0xaf, 0x4d, 0xef, 0xdc, 0x0d, 0xf6, 0x37, 0x77, 0xf8, 0x83, 0xa4, 0x93, 0x0b, 0xa4, + 0x5a, 0x82, 0xa3, 0x21, 0x4e, 0x0c, 0xc8, 0x70, 0xf1, 0x4c, 0xa7, 0x9d, 0x47, 0x11, 0xc2, 0x58, + 0x81, 0x5d, 0x9e, 0x85, 0x5f, 0xc6, 0xe1, 0x73, 0xac, 0x37, 0xfa, 0x15, 0xc0, 0x4c, 0xcc, 0x0b, + 0x86, 0xae, 0x24, 0xca, 0x7c, 0x80, 0xe7, 0xcb, 0x5e, 0x7d, 0x86, 0x4a, 0xce, 0x07, 0xcf, 0x6f, + 0xff, 0xf6, 0xe7, 0x37, 0x83, 0xaf, 0xa0, 0x8b, 0xb2, 0x70, 0xa9, 0x81, 0x3b, 0x8d, 0x7b, 0x3b, + 0xd1, 0x83, 0x41, 0x88, 0xa2, 0xed, 0xd0, 0x52, 0x5a, 0x00, 0x3e, 0xf2, 0x2b, 0xe9, 0x0b, 0x05, + 0xf0, 0x6d, 0xc0, 0x90, 0xdf, 0x43, 0x77, 0xfb, 0x41, 0x2e, 0x7b, 0x63, 0x21, 0x6f, 0x06, 0x57, + 0xb3, 0x24, 0x06, 0x66, 0x2b, 0x30, 0xdb, 0xa1, 0x58, 0x77, 0x38, 0xb6, 0x64, 0xc7, 0x03, 0x6a, + 0x6a, 0x24, 0x1c, 0xf7, 0xd7, 0xb6, 0xd0, 0x3f, 0x00, 0x4e, 0xef, 0x6b, 0x46, 0x50, 0x31, 0xf5, + 0xd1, 0x44, 0xac, 0x59, 0xb6, 0xf4, 0x9f, 0x7a, 0x08, 0xbd, 0x6e, 0x31, 0xb9, 0xde, 0x41, 0x2b, + 0x7d, 0x1d, 0xb4, 0xaf, 0x57, 0x44, 0xa5, 0x90, 0x36, 0xe8, 0x6f, 0x00, 0x9f, 0xef, 0xb1, 0x26, + 0xa8, 0xb0, 0x3f, 0xd2, 0x38, 0x9f, 0x94, 0x5d, 0x4c, 0x55, 0x23, 0xd8, 0x7c, 0xc6, 0xd8, 0x7c, + 0x8a, 0x9a, 0x11, 0x36, 0xae, 0x97, 0x5f, 0x0e, 0xec, 0xcd, 0x11, 0x1d, 0xfc, 0x5f, 0x00, 0x8e, + 0x85, 0xad, 0x09, 0x5a, 0xe8, 0x83, 0x45, 0xaf, 0x4b, 0xca, 0x16, 0xd2, 0x94, 0x08, 0xde, 0x5b, + 0x8c, 0xf7, 0x27, 0xa8, 0x91, 0xc0, 0xdb, 0x77, 0x37, 0x47, 0x44, 0x7b, 0x67, 0x10, 0x8e, 0x3f, + 0x6d, 0x4b, 0xd0, 0xa5, 0x3e, 0x78, 0x44, 0x9d, 0x52, 0xf6, 0x72, 0xda, 0x32, 0x21, 0xc1, 0x7d, + 0xfe, 0xc3, 0xdf, 0x44, 0xad, 0x04, 0x0d, 0xc2, 0xee, 0xe6, 0x88, 0x74, 0x78, 0x02, 0x60, 0x26, + 0xc6, 0x56, 0x1c, 0x74, 0x85, 0x27, 0xfb, 0xa4, 0x83, 0xae, 0xf0, 0x7d, 0x3c, 0x0c, 0x5e, 0x65, + 0x7a, 0xbc, 0x87, 0xde, 0x8d, 0xe8, 0x11, 0x67, 0x5a, 0xe4, 0xcd, 0xa7, 0x8c, 0x53, 0xc2, 0x8f, + 0xfb, 0x67, 0x00, 0x51, 0xd4, 0x32, 0x1c, 0x74, 0xd3, 0x27, 0x5a, 0x9e, 0x83, 0x6e, 0xfa, 0x64, + 0x77, 0x82, 0x5f, 0x62, 0xfc, 0x72, 0x68, 0x2a, 0xc2, 0x2f, 0xf4, 0xd8, 0xa2, 0x47, 0x00, 0x9e, + 0x8e, 0x34, 0x41, 0x97, 0x53, 0xee, 0xea, 0xa3, 0x5d, 0x4a, 0x5d, 0x27, 0xc0, 0xde, 0x60, 0x60, + 0x8b, 0xe8, 0xda, 0x7e, 0x60, 0xfb, 0xb9, 0x5d, 0x8b, 0xef, 0x3f, 0xdc, 0xcd, 0x81, 0xc7, 0xbb, + 0x39, 0xf0, 0x64, 0x37, 0x07, 0xbe, 0xde, 0xcb, 0x0d, 0x3c, 0xde, 0xcb, 0x0d, 0xfc, 0xbe, 0x97, + 0x1b, 0xf8, 0xf0, 0x52, 0xd4, 0xae, 0x1b, 0x15, 0x6d, 0xbe, 0x46, 0xe5, 0xe6, 0xa2, 0xbc, 0x41, + 0xf5, 0x46, 0x9d, 0x38, 0x7c, 0xeb, 0xc2, 0xd5, 0x79, 0x6f, 0x77, 0xe6, 0xe0, 0x2b, 0xc7, 0xd9, + 0x3f, 0x91, 0x16, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x61, 0x8e, 0x05, 0x2f, 0x71, 0x13, 0x00, + 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // IncentivizedPackets returns all incentivized packets and their associated fees + IncentivizedPackets(ctx context.Context, in *QueryIncentivizedPacketsRequest, opts ...grpc.CallOption) (*QueryIncentivizedPacketsResponse, error) + // IncentivizedPacket returns all packet fees for a packet given its identifier + IncentivizedPacket(ctx context.Context, in *QueryIncentivizedPacketRequest, opts ...grpc.CallOption) (*QueryIncentivizedPacketResponse, error) + // Gets all incentivized packets for a specific channel + IncentivizedPacketsForChannel(ctx context.Context, in *QueryIncentivizedPacketsForChannelRequest, opts ...grpc.CallOption) (*QueryIncentivizedPacketsForChannelResponse, error) + // TotalRecvFees returns the total receive fees for a packet given its identifier + TotalRecvFees(ctx context.Context, in *QueryTotalRecvFeesRequest, opts ...grpc.CallOption) (*QueryTotalRecvFeesResponse, error) + // TotalAckFees returns the total acknowledgement fees for a packet given its identifier + TotalAckFees(ctx context.Context, in *QueryTotalAckFeesRequest, opts ...grpc.CallOption) (*QueryTotalAckFeesResponse, error) + // TotalTimeoutFees returns the total timeout fees for a packet given its identifier + TotalTimeoutFees(ctx context.Context, in *QueryTotalTimeoutFeesRequest, opts ...grpc.CallOption) (*QueryTotalTimeoutFeesResponse, error) + // CounterpartyAddress returns the registered counterparty address for forward relaying + CounterpartyAddress(ctx context.Context, in *QueryCounterpartyAddressRequest, opts ...grpc.CallOption) (*QueryCounterpartyAddressResponse, error) + // FeeEnabledChannels returns a list of all fee enabled channels + FeeEnabledChannels(ctx context.Context, in *QueryFeeEnabledChannelsRequest, opts ...grpc.CallOption) (*QueryFeeEnabledChannelsResponse, error) + // FeeEnabledChannel returns true if the provided port and channel identifiers belong to a fee enabled channel + FeeEnabledChannel(ctx context.Context, in *QueryFeeEnabledChannelRequest, opts ...grpc.CallOption) (*QueryFeeEnabledChannelResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) IncentivizedPackets(ctx context.Context, in *QueryIncentivizedPacketsRequest, opts ...grpc.CallOption) (*QueryIncentivizedPacketsResponse, error) { + out := new(QueryIncentivizedPacketsResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/IncentivizedPackets", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) IncentivizedPacket(ctx context.Context, in *QueryIncentivizedPacketRequest, opts ...grpc.CallOption) (*QueryIncentivizedPacketResponse, error) { + out := new(QueryIncentivizedPacketResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/IncentivizedPacket", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) IncentivizedPacketsForChannel(ctx context.Context, in *QueryIncentivizedPacketsForChannelRequest, opts ...grpc.CallOption) (*QueryIncentivizedPacketsForChannelResponse, error) { + out := new(QueryIncentivizedPacketsForChannelResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/IncentivizedPacketsForChannel", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalRecvFees(ctx context.Context, in *QueryTotalRecvFeesRequest, opts ...grpc.CallOption) (*QueryTotalRecvFeesResponse, error) { + out := new(QueryTotalRecvFeesResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/TotalRecvFees", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalAckFees(ctx context.Context, in *QueryTotalAckFeesRequest, opts ...grpc.CallOption) (*QueryTotalAckFeesResponse, error) { + out := new(QueryTotalAckFeesResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/TotalAckFees", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalTimeoutFees(ctx context.Context, in *QueryTotalTimeoutFeesRequest, opts ...grpc.CallOption) (*QueryTotalTimeoutFeesResponse, error) { + out := new(QueryTotalTimeoutFeesResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/TotalTimeoutFees", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) CounterpartyAddress(ctx context.Context, in *QueryCounterpartyAddressRequest, opts ...grpc.CallOption) (*QueryCounterpartyAddressResponse, error) { + out := new(QueryCounterpartyAddressResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/CounterpartyAddress", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) FeeEnabledChannels(ctx context.Context, in *QueryFeeEnabledChannelsRequest, opts ...grpc.CallOption) (*QueryFeeEnabledChannelsResponse, error) { + out := new(QueryFeeEnabledChannelsResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/FeeEnabledChannels", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) FeeEnabledChannel(ctx context.Context, in *QueryFeeEnabledChannelRequest, opts ...grpc.CallOption) (*QueryFeeEnabledChannelResponse, error) { + out := new(QueryFeeEnabledChannelResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Query/FeeEnabledChannel", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // IncentivizedPackets returns all incentivized packets and their associated fees + IncentivizedPackets(context.Context, *QueryIncentivizedPacketsRequest) (*QueryIncentivizedPacketsResponse, error) + // IncentivizedPacket returns all packet fees for a packet given its identifier + IncentivizedPacket(context.Context, *QueryIncentivizedPacketRequest) (*QueryIncentivizedPacketResponse, error) + // Gets all incentivized packets for a specific channel + IncentivizedPacketsForChannel(context.Context, *QueryIncentivizedPacketsForChannelRequest) (*QueryIncentivizedPacketsForChannelResponse, error) + // TotalRecvFees returns the total receive fees for a packet given its identifier + TotalRecvFees(context.Context, *QueryTotalRecvFeesRequest) (*QueryTotalRecvFeesResponse, error) + // TotalAckFees returns the total acknowledgement fees for a packet given its identifier + TotalAckFees(context.Context, *QueryTotalAckFeesRequest) (*QueryTotalAckFeesResponse, error) + // TotalTimeoutFees returns the total timeout fees for a packet given its identifier + TotalTimeoutFees(context.Context, *QueryTotalTimeoutFeesRequest) (*QueryTotalTimeoutFeesResponse, error) + // CounterpartyAddress returns the registered counterparty address for forward relaying + CounterpartyAddress(context.Context, *QueryCounterpartyAddressRequest) (*QueryCounterpartyAddressResponse, error) + // FeeEnabledChannels returns a list of all fee enabled channels + FeeEnabledChannels(context.Context, *QueryFeeEnabledChannelsRequest) (*QueryFeeEnabledChannelsResponse, error) + // FeeEnabledChannel returns true if the provided port and channel identifiers belong to a fee enabled channel + FeeEnabledChannel(context.Context, *QueryFeeEnabledChannelRequest) (*QueryFeeEnabledChannelResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) IncentivizedPackets(ctx context.Context, req *QueryIncentivizedPacketsRequest) (*QueryIncentivizedPacketsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IncentivizedPackets not implemented") +} +func (*UnimplementedQueryServer) IncentivizedPacket(ctx context.Context, req *QueryIncentivizedPacketRequest) (*QueryIncentivizedPacketResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IncentivizedPacket not implemented") +} +func (*UnimplementedQueryServer) IncentivizedPacketsForChannel(ctx context.Context, req *QueryIncentivizedPacketsForChannelRequest) (*QueryIncentivizedPacketsForChannelResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IncentivizedPacketsForChannel not implemented") +} +func (*UnimplementedQueryServer) TotalRecvFees(ctx context.Context, req *QueryTotalRecvFeesRequest) (*QueryTotalRecvFeesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalRecvFees not implemented") +} +func (*UnimplementedQueryServer) TotalAckFees(ctx context.Context, req *QueryTotalAckFeesRequest) (*QueryTotalAckFeesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalAckFees not implemented") +} +func (*UnimplementedQueryServer) TotalTimeoutFees(ctx context.Context, req *QueryTotalTimeoutFeesRequest) (*QueryTotalTimeoutFeesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalTimeoutFees not implemented") +} +func (*UnimplementedQueryServer) CounterpartyAddress(ctx context.Context, req *QueryCounterpartyAddressRequest) (*QueryCounterpartyAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CounterpartyAddress not implemented") +} +func (*UnimplementedQueryServer) FeeEnabledChannels(ctx context.Context, req *QueryFeeEnabledChannelsRequest) (*QueryFeeEnabledChannelsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FeeEnabledChannels not implemented") +} +func (*UnimplementedQueryServer) FeeEnabledChannel(ctx context.Context, req *QueryFeeEnabledChannelRequest) (*QueryFeeEnabledChannelResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FeeEnabledChannel not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_IncentivizedPackets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryIncentivizedPacketsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).IncentivizedPackets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/IncentivizedPackets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).IncentivizedPackets(ctx, req.(*QueryIncentivizedPacketsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_IncentivizedPacket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryIncentivizedPacketRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).IncentivizedPacket(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/IncentivizedPacket", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).IncentivizedPacket(ctx, req.(*QueryIncentivizedPacketRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_IncentivizedPacketsForChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryIncentivizedPacketsForChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).IncentivizedPacketsForChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/IncentivizedPacketsForChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).IncentivizedPacketsForChannel(ctx, req.(*QueryIncentivizedPacketsForChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalRecvFees_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalRecvFeesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalRecvFees(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/TotalRecvFees", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalRecvFees(ctx, req.(*QueryTotalRecvFeesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalAckFees_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalAckFeesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalAckFees(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/TotalAckFees", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalAckFees(ctx, req.(*QueryTotalAckFeesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalTimeoutFees_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalTimeoutFeesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalTimeoutFees(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/TotalTimeoutFees", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalTimeoutFees(ctx, req.(*QueryTotalTimeoutFeesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_CounterpartyAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCounterpartyAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CounterpartyAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/CounterpartyAddress", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CounterpartyAddress(ctx, req.(*QueryCounterpartyAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_FeeEnabledChannels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryFeeEnabledChannelsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).FeeEnabledChannels(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/FeeEnabledChannels", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).FeeEnabledChannels(ctx, req.(*QueryFeeEnabledChannelsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_FeeEnabledChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryFeeEnabledChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).FeeEnabledChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Query/FeeEnabledChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).FeeEnabledChannel(ctx, req.(*QueryFeeEnabledChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "ibc.applications.fee.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "IncentivizedPackets", + Handler: _Query_IncentivizedPackets_Handler, + }, + { + MethodName: "IncentivizedPacket", + Handler: _Query_IncentivizedPacket_Handler, + }, + { + MethodName: "IncentivizedPacketsForChannel", + Handler: _Query_IncentivizedPacketsForChannel_Handler, + }, + { + MethodName: "TotalRecvFees", + Handler: _Query_TotalRecvFees_Handler, + }, + { + MethodName: "TotalAckFees", + Handler: _Query_TotalAckFees_Handler, + }, + { + MethodName: "TotalTimeoutFees", + Handler: _Query_TotalTimeoutFees_Handler, + }, + { + MethodName: "CounterpartyAddress", + Handler: _Query_CounterpartyAddress_Handler, + }, + { + MethodName: "FeeEnabledChannels", + Handler: _Query_FeeEnabledChannels_Handler, + }, + { + MethodName: "FeeEnabledChannel", + Handler: _Query_FeeEnabledChannel_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "ibc/applications/fee/v1/query.proto", +} + +func (m *QueryIncentivizedPacketsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIncentivizedPacketsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIncentivizedPacketsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.QueryHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.QueryHeight)) + i-- + dAtA[i] = 0x10 + } + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryIncentivizedPacketsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIncentivizedPacketsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIncentivizedPacketsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IncentivizedPackets) > 0 { + for iNdEx := len(m.IncentivizedPackets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.IncentivizedPackets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryIncentivizedPacketRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIncentivizedPacketRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIncentivizedPacketRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.QueryHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.QueryHeight)) + i-- + dAtA[i] = 0x10 + } + { + size, err := m.PacketId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryIncentivizedPacketResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIncentivizedPacketResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIncentivizedPacketResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.IncentivizedPacket.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryIncentivizedPacketsForChannelRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIncentivizedPacketsForChannelRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIncentivizedPacketsForChannelRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.QueryHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.QueryHeight)) + i-- + dAtA[i] = 0x20 + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x12 + } + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryIncentivizedPacketsForChannelResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIncentivizedPacketsForChannelResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIncentivizedPacketsForChannelResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IncentivizedPackets) > 0 { + for iNdEx := len(m.IncentivizedPackets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.IncentivizedPackets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalRecvFeesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalRecvFeesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalRecvFeesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PacketId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTotalRecvFeesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalRecvFeesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalRecvFeesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.RecvFees) > 0 { + for iNdEx := len(m.RecvFees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.RecvFees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalAckFeesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalAckFeesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalAckFeesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PacketId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTotalAckFeesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalAckFeesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalAckFeesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AckFees) > 0 { + for iNdEx := len(m.AckFees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AckFees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalTimeoutFeesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalTimeoutFeesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalTimeoutFeesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PacketId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTotalTimeoutFeesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalTimeoutFeesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalTimeoutFeesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TimeoutFees) > 0 { + for iNdEx := len(m.TimeoutFees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TimeoutFees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryCounterpartyAddressRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryCounterpartyAddressRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCounterpartyAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.RelayerAddress) > 0 { + i -= len(m.RelayerAddress) + copy(dAtA[i:], m.RelayerAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.RelayerAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryCounterpartyAddressResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryCounterpartyAddressResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCounterpartyAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.CounterpartyAddress) > 0 { + i -= len(m.CounterpartyAddress) + copy(dAtA[i:], m.CounterpartyAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.CounterpartyAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryFeeEnabledChannelsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryFeeEnabledChannelsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFeeEnabledChannelsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.QueryHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.QueryHeight)) + i-- + dAtA[i] = 0x10 + } + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryFeeEnabledChannelsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryFeeEnabledChannelsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFeeEnabledChannelsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FeeEnabledChannels) > 0 { + for iNdEx := len(m.FeeEnabledChannels) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FeeEnabledChannels[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryFeeEnabledChannelRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryFeeEnabledChannelRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFeeEnabledChannelRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryFeeEnabledChannelResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryFeeEnabledChannelResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFeeEnabledChannelResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FeeEnabled { + i-- + if m.FeeEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryIncentivizedPacketsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.QueryHeight != 0 { + n += 1 + sovQuery(uint64(m.QueryHeight)) + } + return n +} + +func (m *QueryIncentivizedPacketsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.IncentivizedPackets) > 0 { + for _, e := range m.IncentivizedPackets { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryIncentivizedPacketRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PacketId.Size() + n += 1 + l + sovQuery(uint64(l)) + if m.QueryHeight != 0 { + n += 1 + sovQuery(uint64(m.QueryHeight)) + } + return n +} + +func (m *QueryIncentivizedPacketResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.IncentivizedPacket.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryIncentivizedPacketsForChannelRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.QueryHeight != 0 { + n += 1 + sovQuery(uint64(m.QueryHeight)) + } + return n +} + +func (m *QueryIncentivizedPacketsForChannelResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.IncentivizedPackets) > 0 { + for _, e := range m.IncentivizedPackets { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryTotalRecvFeesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PacketId.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTotalRecvFeesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.RecvFees) > 0 { + for _, e := range m.RecvFees { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryTotalAckFeesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PacketId.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTotalAckFeesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.AckFees) > 0 { + for _, e := range m.AckFees { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryTotalTimeoutFeesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PacketId.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTotalTimeoutFeesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TimeoutFees) > 0 { + for _, e := range m.TimeoutFees { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryCounterpartyAddressRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.RelayerAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryCounterpartyAddressResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CounterpartyAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryFeeEnabledChannelsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.QueryHeight != 0 { + n += 1 + sovQuery(uint64(m.QueryHeight)) + } + return n +} + +func (m *QueryFeeEnabledChannelsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.FeeEnabledChannels) > 0 { + for _, e := range m.FeeEnabledChannels { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryFeeEnabledChannelRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryFeeEnabledChannelResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.FeeEnabled { + n += 2 + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryIncentivizedPacketsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIncentivizedPacketsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIncentivizedPacketsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryHeight", wireType) + } + m.QueryHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.QueryHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIncentivizedPacketsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIncentivizedPacketsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIncentivizedPacketsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IncentivizedPackets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IncentivizedPackets = append(m.IncentivizedPackets, IdentifiedPacketFees{}) + if err := m.IncentivizedPackets[len(m.IncentivizedPackets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIncentivizedPacketRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIncentivizedPacketRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIncentivizedPacketRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryHeight", wireType) + } + m.QueryHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.QueryHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIncentivizedPacketResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIncentivizedPacketResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIncentivizedPacketResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IncentivizedPacket", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.IncentivizedPacket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIncentivizedPacketsForChannelRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIncentivizedPacketsForChannelRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIncentivizedPacketsForChannelRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryHeight", wireType) + } + m.QueryHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.QueryHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIncentivizedPacketsForChannelResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIncentivizedPacketsForChannelResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIncentivizedPacketsForChannelResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IncentivizedPackets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IncentivizedPackets = append(m.IncentivizedPackets, &IdentifiedPacketFees{}) + if err := m.IncentivizedPackets[len(m.IncentivizedPackets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalRecvFeesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalRecvFeesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalRecvFeesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalRecvFeesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalRecvFeesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalRecvFeesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RecvFees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RecvFees = append(m.RecvFees, types1.Coin{}) + if err := m.RecvFees[len(m.RecvFees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalAckFeesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalAckFeesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalAckFeesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalAckFeesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalAckFeesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalAckFeesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AckFees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AckFees = append(m.AckFees, types1.Coin{}) + if err := m.AckFees[len(m.AckFees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalTimeoutFeesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalTimeoutFeesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalTimeoutFeesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalTimeoutFeesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalTimeoutFeesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalTimeoutFeesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutFees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TimeoutFees = append(m.TimeoutFees, types1.Coin{}) + if err := m.TimeoutFees[len(m.TimeoutFees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCounterpartyAddressRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryCounterpartyAddressRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCounterpartyAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RelayerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RelayerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCounterpartyAddressResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryCounterpartyAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCounterpartyAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFeeEnabledChannelsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryFeeEnabledChannelsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFeeEnabledChannelsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryHeight", wireType) + } + m.QueryHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.QueryHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFeeEnabledChannelsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryFeeEnabledChannelsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFeeEnabledChannelsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeEnabledChannels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FeeEnabledChannels = append(m.FeeEnabledChannels, FeeEnabledChannel{}) + if err := m.FeeEnabledChannels[len(m.FeeEnabledChannels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFeeEnabledChannelRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryFeeEnabledChannelRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFeeEnabledChannelRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFeeEnabledChannelResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryFeeEnabledChannelResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFeeEnabledChannelResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FeeEnabled = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/modules/apps/29-fee/types/query.pb.gw.go b/modules/apps/29-fee/types/query.pb.gw.go new file mode 100644 index 00000000000..9b9e47c5939 --- /dev/null +++ b/modules/apps/29-fee/types/query.pb.gw.go @@ -0,0 +1,1264 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: ibc/applications/fee/v1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage + +var ( + filter_Query_IncentivizedPackets_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_IncentivizedPackets_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIncentivizedPacketsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IncentivizedPackets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.IncentivizedPackets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_IncentivizedPackets_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIncentivizedPacketsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IncentivizedPackets_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.IncentivizedPackets(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_IncentivizedPacket_0 = &utilities.DoubleArray{Encoding: map[string]int{"packet_id": 0, "port_id": 1, "channel_id": 2, "sequence": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) + +func request_Query_IncentivizedPacket_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIncentivizedPacketRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IncentivizedPacket_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.IncentivizedPacket(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_IncentivizedPacket_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIncentivizedPacketRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IncentivizedPacket_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.IncentivizedPacket(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_IncentivizedPacketsForChannel_0 = &utilities.DoubleArray{Encoding: map[string]int{"port_id": 0, "channel_id": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_Query_IncentivizedPacketsForChannel_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIncentivizedPacketsForChannelRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IncentivizedPacketsForChannel_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.IncentivizedPacketsForChannel(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_IncentivizedPacketsForChannel_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIncentivizedPacketsForChannelRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_IncentivizedPacketsForChannel_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.IncentivizedPacketsForChannel(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_TotalRecvFees_0 = &utilities.DoubleArray{Encoding: map[string]int{"packet_id": 0, "port_id": 1, "channel_id": 2, "sequence": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) + +func request_Query_TotalRecvFees_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalRecvFeesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalRecvFees_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TotalRecvFees(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TotalRecvFees_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalRecvFeesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalRecvFees_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TotalRecvFees(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_TotalAckFees_0 = &utilities.DoubleArray{Encoding: map[string]int{"packet_id": 0, "port_id": 1, "channel_id": 2, "sequence": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) + +func request_Query_TotalAckFees_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalAckFeesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalAckFees_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TotalAckFees(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TotalAckFees_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalAckFeesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalAckFees_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TotalAckFees(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_TotalTimeoutFees_0 = &utilities.DoubleArray{Encoding: map[string]int{"packet_id": 0, "port_id": 1, "channel_id": 2, "sequence": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) + +func request_Query_TotalTimeoutFees_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalTimeoutFeesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalTimeoutFees_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TotalTimeoutFees(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TotalTimeoutFees_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalTimeoutFeesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["packet_id.port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.port_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.port_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.port_id", err) + } + + val, ok = pathParams["packet_id.channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.channel_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.channel_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.channel_id", err) + } + + val, ok = pathParams["packet_id.sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "packet_id.sequence") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "packet_id.sequence", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "packet_id.sequence", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalTimeoutFees_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TotalTimeoutFees(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_CounterpartyAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCounterpartyAddressRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["relayer_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "relayer_address") + } + + protoReq.RelayerAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "relayer_address", err) + } + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + msg, err := client.CounterpartyAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_CounterpartyAddress_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCounterpartyAddressRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["relayer_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "relayer_address") + } + + protoReq.RelayerAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "relayer_address", err) + } + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + msg, err := server.CounterpartyAddress(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_FeeEnabledChannels_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_FeeEnabledChannels_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryFeeEnabledChannelsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_FeeEnabledChannels_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.FeeEnabledChannels(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_FeeEnabledChannels_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryFeeEnabledChannelsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_FeeEnabledChannels_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.FeeEnabledChannels(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_FeeEnabledChannel_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryFeeEnabledChannelRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + msg, err := client.FeeEnabledChannel(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_FeeEnabledChannel_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryFeeEnabledChannelRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + msg, err := server.FeeEnabledChannel(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_IncentivizedPackets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_IncentivizedPackets_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IncentivizedPackets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IncentivizedPacket_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_IncentivizedPacket_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IncentivizedPacket_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IncentivizedPacketsForChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_IncentivizedPacketsForChannel_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IncentivizedPacketsForChannel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalRecvFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TotalRecvFees_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalRecvFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalAckFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TotalAckFees_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalAckFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalTimeoutFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TotalTimeoutFees_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalTimeoutFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CounterpartyAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_CounterpartyAddress_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_CounterpartyAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_FeeEnabledChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_FeeEnabledChannels_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_FeeEnabledChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_FeeEnabledChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_FeeEnabledChannel_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_FeeEnabledChannel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_IncentivizedPackets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_IncentivizedPackets_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IncentivizedPackets_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IncentivizedPacket_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_IncentivizedPacket_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IncentivizedPacket_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IncentivizedPacketsForChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_IncentivizedPacketsForChannel_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IncentivizedPacketsForChannel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalRecvFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TotalRecvFees_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalRecvFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalAckFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TotalAckFees_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalAckFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalTimeoutFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TotalTimeoutFees_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalTimeoutFees_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CounterpartyAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_CounterpartyAddress_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_CounterpartyAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_FeeEnabledChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_FeeEnabledChannels_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_FeeEnabledChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_FeeEnabledChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_FeeEnabledChannel_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_FeeEnabledChannel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_IncentivizedPackets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ibc", "apps", "fee", "v1", "incentivized_packets"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_IncentivizedPacket_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9, 1, 0, 4, 1, 5, 10}, []string{"ibc", "apps", "fee", "v1", "incentivized_packet", "port", "packet_id.port_id", "channel", "packet_id.channel_id", "sequence", "packet_id.sequence"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_IncentivizedPacketsForChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8}, []string{"ibc", "apps", "fee", "v1", "incentivized_packets", "port", "port_id", "channel", "channel_id"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_TotalRecvFees_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9, 1, 0, 4, 1, 5, 10}, []string{"ibc", "apps", "fee", "v1", "total_recv_fees", "port", "packet_id.port_id", "channel", "packet_id.channel_id", "sequence", "packet_id.sequence"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_TotalAckFees_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9, 1, 0, 4, 1, 5, 10}, []string{"ibc", "apps", "fee", "v1", "total_ack_fees", "port", "packet_id.port_id", "channel", "packet_id.channel_id", "sequence", "packet_id.sequence"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_TotalTimeoutFees_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9, 1, 0, 4, 1, 5, 10}, []string{"ibc", "apps", "fee", "v1", "total_timeout_fees", "port", "packet_id.port_id", "channel", "packet_id.channel_id", "sequence", "packet_id.sequence"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_CounterpartyAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"ibc", "apps", "fee", "v1", "counterparty_address", "relayer_address", "channel", "channel_id"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_FeeEnabledChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"ibc", "apps", "fee", "v1", "fee_enabled"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_FeeEnabledChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8}, []string{"ibc", "apps", "fee", "v1", "fee_enabled", "port", "port_id", "channel", "channel_id"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_Query_IncentivizedPackets_0 = runtime.ForwardResponseMessage + + forward_Query_IncentivizedPacket_0 = runtime.ForwardResponseMessage + + forward_Query_IncentivizedPacketsForChannel_0 = runtime.ForwardResponseMessage + + forward_Query_TotalRecvFees_0 = runtime.ForwardResponseMessage + + forward_Query_TotalAckFees_0 = runtime.ForwardResponseMessage + + forward_Query_TotalTimeoutFees_0 = runtime.ForwardResponseMessage + + forward_Query_CounterpartyAddress_0 = runtime.ForwardResponseMessage + + forward_Query_FeeEnabledChannels_0 = runtime.ForwardResponseMessage + + forward_Query_FeeEnabledChannel_0 = runtime.ForwardResponseMessage +) diff --git a/modules/apps/29-fee/types/tx.pb.go b/modules/apps/29-fee/types/tx.pb.go new file mode 100644 index 00000000000..1cecc607dc9 --- /dev/null +++ b/modules/apps/29-fee/types/tx.pb.go @@ -0,0 +1,1544 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/applications/fee/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + types "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgRegisterCounterpartyAddress defines the request type for the RegisterCounterpartyAddress rpc +type MsgRegisterCounterpartyAddress struct { + // the relayer address + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + // the counterparty relayer address + CounterpartyAddress string `protobuf:"bytes,2,opt,name=counterparty_address,json=counterpartyAddress,proto3" json:"counterparty_address,omitempty" yaml:"counterparty_address"` + // unique channel identifier + ChannelId string `protobuf:"bytes,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` +} + +func (m *MsgRegisterCounterpartyAddress) Reset() { *m = MsgRegisterCounterpartyAddress{} } +func (m *MsgRegisterCounterpartyAddress) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterCounterpartyAddress) ProtoMessage() {} +func (*MsgRegisterCounterpartyAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_05c93128649f1b96, []int{0} +} +func (m *MsgRegisterCounterpartyAddress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterCounterpartyAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterCounterpartyAddress.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterCounterpartyAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterCounterpartyAddress.Merge(m, src) +} +func (m *MsgRegisterCounterpartyAddress) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterCounterpartyAddress) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterCounterpartyAddress.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterCounterpartyAddress proto.InternalMessageInfo + +// MsgRegisterCounterpartyAddressResponse defines the response type for the RegisterCounterpartyAddress rpc +type MsgRegisterCounterpartyAddressResponse struct { +} + +func (m *MsgRegisterCounterpartyAddressResponse) Reset() { + *m = MsgRegisterCounterpartyAddressResponse{} +} +func (m *MsgRegisterCounterpartyAddressResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterCounterpartyAddressResponse) ProtoMessage() {} +func (*MsgRegisterCounterpartyAddressResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_05c93128649f1b96, []int{1} +} +func (m *MsgRegisterCounterpartyAddressResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterCounterpartyAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterCounterpartyAddressResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterCounterpartyAddressResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterCounterpartyAddressResponse.Merge(m, src) +} +func (m *MsgRegisterCounterpartyAddressResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterCounterpartyAddressResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterCounterpartyAddressResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterCounterpartyAddressResponse proto.InternalMessageInfo + +// MsgPayPacketFee defines the request type for the PayPacketFee rpc +// This Msg can be used to pay for a packet at the next sequence send & should be combined with the Msg that will be +// paid for +type MsgPayPacketFee struct { + // fee encapsulates the recv, ack and timeout fees associated with an IBC packet + Fee Fee `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee"` + // the source port unique identifier + SourcePortId string `protobuf:"bytes,2,opt,name=source_port_id,json=sourcePortId,proto3" json:"source_port_id,omitempty" yaml:"source_port_id"` + // the source channel unique identifer + SourceChannelId string `protobuf:"bytes,3,opt,name=source_channel_id,json=sourceChannelId,proto3" json:"source_channel_id,omitempty" yaml:"source_channel_id"` + // account address to refund fee if necessary + Signer string `protobuf:"bytes,4,opt,name=signer,proto3" json:"signer,omitempty"` + // optional list of relayers permitted to the receive packet fees + Relayers []string `protobuf:"bytes,5,rep,name=relayers,proto3" json:"relayers,omitempty"` +} + +func (m *MsgPayPacketFee) Reset() { *m = MsgPayPacketFee{} } +func (m *MsgPayPacketFee) String() string { return proto.CompactTextString(m) } +func (*MsgPayPacketFee) ProtoMessage() {} +func (*MsgPayPacketFee) Descriptor() ([]byte, []int) { + return fileDescriptor_05c93128649f1b96, []int{2} +} +func (m *MsgPayPacketFee) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgPayPacketFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgPayPacketFee.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgPayPacketFee) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPayPacketFee.Merge(m, src) +} +func (m *MsgPayPacketFee) XXX_Size() int { + return m.Size() +} +func (m *MsgPayPacketFee) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPayPacketFee.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgPayPacketFee proto.InternalMessageInfo + +// MsgPayPacketFeeResponse defines the response type for the PayPacketFee rpc +type MsgPayPacketFeeResponse struct { +} + +func (m *MsgPayPacketFeeResponse) Reset() { *m = MsgPayPacketFeeResponse{} } +func (m *MsgPayPacketFeeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgPayPacketFeeResponse) ProtoMessage() {} +func (*MsgPayPacketFeeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_05c93128649f1b96, []int{3} +} +func (m *MsgPayPacketFeeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgPayPacketFeeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgPayPacketFeeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgPayPacketFeeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPayPacketFeeResponse.Merge(m, src) +} +func (m *MsgPayPacketFeeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgPayPacketFeeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPayPacketFeeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgPayPacketFeeResponse proto.InternalMessageInfo + +// MsgPayPacketFeeAsync defines the request type for the PayPacketFeeAsync rpc +// This Msg can be used to pay for a packet at a specified sequence (instead of the next sequence send) +type MsgPayPacketFeeAsync struct { + // unique packet identifier comprised of the channel ID, port ID and sequence + PacketId types.PacketId `protobuf:"bytes,1,opt,name=packet_id,json=packetId,proto3" json:"packet_id" yaml:"packet_id"` + // the packet fee associated with a particular IBC packet + PacketFee PacketFee `protobuf:"bytes,2,opt,name=packet_fee,json=packetFee,proto3" json:"packet_fee" yaml:"packet_fee"` +} + +func (m *MsgPayPacketFeeAsync) Reset() { *m = MsgPayPacketFeeAsync{} } +func (m *MsgPayPacketFeeAsync) String() string { return proto.CompactTextString(m) } +func (*MsgPayPacketFeeAsync) ProtoMessage() {} +func (*MsgPayPacketFeeAsync) Descriptor() ([]byte, []int) { + return fileDescriptor_05c93128649f1b96, []int{4} +} +func (m *MsgPayPacketFeeAsync) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgPayPacketFeeAsync) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgPayPacketFeeAsync.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgPayPacketFeeAsync) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPayPacketFeeAsync.Merge(m, src) +} +func (m *MsgPayPacketFeeAsync) XXX_Size() int { + return m.Size() +} +func (m *MsgPayPacketFeeAsync) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPayPacketFeeAsync.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgPayPacketFeeAsync proto.InternalMessageInfo + +// MsgPayPacketFeeAsyncResponse defines the response type for the PayPacketFeeAsync rpc +type MsgPayPacketFeeAsyncResponse struct { +} + +func (m *MsgPayPacketFeeAsyncResponse) Reset() { *m = MsgPayPacketFeeAsyncResponse{} } +func (m *MsgPayPacketFeeAsyncResponse) String() string { return proto.CompactTextString(m) } +func (*MsgPayPacketFeeAsyncResponse) ProtoMessage() {} +func (*MsgPayPacketFeeAsyncResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_05c93128649f1b96, []int{5} +} +func (m *MsgPayPacketFeeAsyncResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgPayPacketFeeAsyncResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgPayPacketFeeAsyncResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgPayPacketFeeAsyncResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPayPacketFeeAsyncResponse.Merge(m, src) +} +func (m *MsgPayPacketFeeAsyncResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgPayPacketFeeAsyncResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPayPacketFeeAsyncResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgPayPacketFeeAsyncResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgRegisterCounterpartyAddress)(nil), "ibc.applications.fee.v1.MsgRegisterCounterpartyAddress") + proto.RegisterType((*MsgRegisterCounterpartyAddressResponse)(nil), "ibc.applications.fee.v1.MsgRegisterCounterpartyAddressResponse") + proto.RegisterType((*MsgPayPacketFee)(nil), "ibc.applications.fee.v1.MsgPayPacketFee") + proto.RegisterType((*MsgPayPacketFeeResponse)(nil), "ibc.applications.fee.v1.MsgPayPacketFeeResponse") + proto.RegisterType((*MsgPayPacketFeeAsync)(nil), "ibc.applications.fee.v1.MsgPayPacketFeeAsync") + proto.RegisterType((*MsgPayPacketFeeAsyncResponse)(nil), "ibc.applications.fee.v1.MsgPayPacketFeeAsyncResponse") +} + +func init() { proto.RegisterFile("ibc/applications/fee/v1/tx.proto", fileDescriptor_05c93128649f1b96) } + +var fileDescriptor_05c93128649f1b96 = []byte{ + // 630 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4d, 0x4f, 0xdb, 0x40, + 0x10, 0x8d, 0x09, 0xa5, 0x64, 0x8b, 0x4a, 0xb3, 0x85, 0x62, 0x0c, 0xb5, 0xa9, 0x0f, 0x55, 0x2e, + 0xd8, 0xe5, 0x4b, 0x55, 0xb9, 0x20, 0x82, 0x84, 0xca, 0x01, 0x15, 0x59, 0x3d, 0x55, 0x95, 0x90, + 0xb3, 0x9e, 0x18, 0xb7, 0x89, 0xd7, 0xda, 0x75, 0xa2, 0xfa, 0x0f, 0x54, 0x3d, 0x72, 0xeb, 0x95, + 0x9f, 0xc3, 0xa9, 0xe2, 0xd0, 0x43, 0x4f, 0x56, 0x05, 0x97, 0x9e, 0xf3, 0x0b, 0xaa, 0xf5, 0x97, + 0x1c, 0x48, 0x22, 0xda, 0x9b, 0x77, 0xe6, 0xcd, 0xdb, 0x37, 0x6f, 0xc6, 0x8b, 0xd6, 0xbc, 0x16, + 0x31, 0xed, 0x20, 0xe8, 0x78, 0xc4, 0x0e, 0x3d, 0xea, 0x73, 0xb3, 0x0d, 0x60, 0xf6, 0x37, 0xcc, + 0xf0, 0x8b, 0x11, 0x30, 0x1a, 0x52, 0xbc, 0xe4, 0xb5, 0x88, 0x51, 0x46, 0x18, 0x6d, 0x00, 0xa3, + 0xbf, 0xa1, 0x2c, 0xb8, 0xd4, 0xa5, 0x09, 0xc6, 0x14, 0x5f, 0x29, 0x5c, 0x79, 0x31, 0x8e, 0x50, + 0x54, 0x95, 0x20, 0x84, 0x32, 0x30, 0xc9, 0x99, 0xed, 0xfb, 0xd0, 0x11, 0xe9, 0xec, 0x33, 0x85, + 0xe8, 0x3f, 0x24, 0xa4, 0x1e, 0x73, 0xd7, 0x02, 0xd7, 0xe3, 0x21, 0xb0, 0x03, 0xda, 0xf3, 0x43, + 0x60, 0x81, 0xcd, 0xc2, 0x68, 0xdf, 0x71, 0x18, 0x70, 0x8e, 0x65, 0xf4, 0xd0, 0x4e, 0x3f, 0x65, + 0x69, 0x4d, 0x6a, 0xd4, 0xac, 0xfc, 0x88, 0x2d, 0xb4, 0x40, 0x4a, 0x05, 0xa7, 0x39, 0x6c, 0x4a, + 0xc0, 0x9a, 0xda, 0x20, 0xd6, 0x56, 0x22, 0xbb, 0xdb, 0xd9, 0xd5, 0x47, 0xa1, 0x74, 0xeb, 0x29, + 0x19, 0x71, 0xdb, 0x36, 0x42, 0x99, 0xc2, 0x53, 0xcf, 0x91, 0xab, 0x09, 0xd3, 0xe2, 0x20, 0xd6, + 0xea, 0x19, 0x53, 0x91, 0xd3, 0xad, 0x5a, 0x76, 0x38, 0x72, 0x76, 0x67, 0xbf, 0x5d, 0x68, 0x95, + 0x3f, 0x17, 0x5a, 0x45, 0x6f, 0xa0, 0x97, 0x93, 0xfb, 0xb1, 0x80, 0x07, 0xd4, 0xe7, 0xa0, 0x9f, + 0x4f, 0xa1, 0xf9, 0x63, 0xee, 0x9e, 0xd8, 0xd1, 0x89, 0x4d, 0x3e, 0x43, 0x78, 0x08, 0x80, 0xb7, + 0x51, 0xb5, 0x0d, 0x90, 0xf4, 0xf9, 0x68, 0x73, 0xd5, 0x18, 0x33, 0x11, 0xe3, 0x10, 0xa0, 0x39, + 0x7d, 0x19, 0x6b, 0x15, 0x4b, 0xc0, 0xf1, 0x1e, 0x7a, 0xcc, 0x69, 0x8f, 0x11, 0x38, 0x0d, 0x28, + 0x0b, 0x85, 0xee, 0xd4, 0x81, 0xe5, 0x41, 0xac, 0x2d, 0xa6, 0xba, 0x87, 0xf3, 0xba, 0x35, 0x97, + 0x06, 0x4e, 0x28, 0x0b, 0x8f, 0x1c, 0xfc, 0x16, 0xd5, 0x33, 0xc0, 0x9d, 0xde, 0x57, 0x07, 0xb1, + 0x26, 0x0f, 0x71, 0x94, 0x2d, 0x98, 0x4f, 0x63, 0x07, 0xb9, 0x11, 0xf8, 0x19, 0x9a, 0xe1, 0x9e, + 0xeb, 0x03, 0x93, 0xa7, 0x93, 0x59, 0x65, 0x27, 0xac, 0xa0, 0x59, 0x06, 0x1d, 0x3b, 0x02, 0xc6, + 0xe5, 0x07, 0x6b, 0xd5, 0x46, 0xcd, 0x2a, 0xce, 0x25, 0xf3, 0x96, 0xd1, 0xd2, 0x2d, 0x47, 0x0a, + 0xb7, 0x7e, 0x4a, 0x68, 0xe1, 0x56, 0x6e, 0x9f, 0x47, 0x3e, 0xc1, 0xef, 0x51, 0x2d, 0x48, 0x22, + 0x42, 0x73, 0x6a, 0xdc, 0xf3, 0xc4, 0x38, 0xb1, 0x78, 0x46, 0xbe, 0x6d, 0xfd, 0x0d, 0x23, 0xad, + 0x3b, 0x72, 0x9a, 0xb2, 0x70, 0x6e, 0x10, 0x6b, 0x4f, 0xd2, 0xb6, 0x8a, 0x6a, 0xdd, 0x9a, 0x0d, + 0x32, 0x0c, 0xfe, 0x88, 0x50, 0x16, 0x17, 0xf3, 0x98, 0x4a, 0x68, 0xf5, 0xb1, 0xf3, 0x28, 0x24, + 0x35, 0x97, 0x33, 0xee, 0xfa, 0x10, 0x77, 0x1b, 0x40, 0xb7, 0x32, 0x99, 0x87, 0x00, 0xa5, 0x8e, + 0x55, 0xb4, 0x3a, 0xaa, 0xab, 0xbc, 0xed, 0xcd, 0xaf, 0x55, 0x54, 0x3d, 0xe6, 0x2e, 0xfe, 0x2e, + 0xa1, 0x95, 0x49, 0x3f, 0xc9, 0xeb, 0xb1, 0xda, 0x26, 0x6f, 0xa3, 0xb2, 0xf7, 0x9f, 0x85, 0xb9, + 0x42, 0xfc, 0x09, 0xcd, 0x0d, 0xad, 0x70, 0x63, 0x12, 0x61, 0x19, 0xa9, 0xbc, 0xba, 0x2f, 0xb2, + 0xb8, 0x2b, 0x42, 0xf5, 0xbb, 0x0b, 0xb0, 0x7e, 0x5f, 0x9a, 0x04, 0xae, 0xec, 0xfc, 0x13, 0x3c, + 0xbf, 0xba, 0xf9, 0xee, 0xf2, 0x5a, 0x95, 0xae, 0xae, 0x55, 0xe9, 0xf7, 0xb5, 0x2a, 0x9d, 0xdf, + 0xa8, 0x95, 0xab, 0x1b, 0xb5, 0xf2, 0xeb, 0x46, 0xad, 0x7c, 0xd8, 0x71, 0xbd, 0xf0, 0xac, 0xd7, + 0x32, 0x08, 0xed, 0x9a, 0x84, 0xf2, 0x2e, 0xe5, 0xa6, 0xd7, 0x22, 0xeb, 0x2e, 0x35, 0xfb, 0x5b, + 0x66, 0x97, 0x3a, 0xbd, 0x0e, 0x70, 0xf1, 0x50, 0x72, 0x73, 0xf3, 0xcd, 0xba, 0x78, 0x23, 0xc3, + 0x28, 0x00, 0xde, 0x9a, 0x49, 0x1e, 0xc0, 0xad, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xf7, + 0x58, 0xab, 0x99, 0x05, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // RegisterCounterpartyAddress defines a rpc handler method for MsgRegisterCounterpartyAddress + // RegisterCounterpartyAddress is called by the relayer on each channelEnd and allows them to specify their + // counterparty address before relaying. This ensures they will be properly compensated for forward relaying since + // destination chain must send back relayer's source address (counterparty address) in acknowledgement. This function + // may be called more than once by a relayer, in which case, latest counterparty address is always used. + RegisterCounterpartyAddress(ctx context.Context, in *MsgRegisterCounterpartyAddress, opts ...grpc.CallOption) (*MsgRegisterCounterpartyAddressResponse, error) + // PayPacketFee defines a rpc handler method for MsgPayPacketFee + // PayPacketFee is an open callback that may be called by any module/user that wishes to escrow funds in order to + // incentivize the relaying of the packet at the next sequence + // NOTE: This method is intended to be used within a multi msg transaction, where the subsequent msg that follows + // initiates the lifecycle of the incentivized packet + PayPacketFee(ctx context.Context, in *MsgPayPacketFee, opts ...grpc.CallOption) (*MsgPayPacketFeeResponse, error) + // PayPacketFeeAsync defines a rpc handler method for MsgPayPacketFeeAsync + // PayPacketFeeAsync is an open callback that may be called by any module/user that wishes to escrow funds in order to + // incentivize the relaying of a known packet (i.e. at a particular sequence) + PayPacketFeeAsync(ctx context.Context, in *MsgPayPacketFeeAsync, opts ...grpc.CallOption) (*MsgPayPacketFeeAsyncResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) RegisterCounterpartyAddress(ctx context.Context, in *MsgRegisterCounterpartyAddress, opts ...grpc.CallOption) (*MsgRegisterCounterpartyAddressResponse, error) { + out := new(MsgRegisterCounterpartyAddressResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Msg/RegisterCounterpartyAddress", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) PayPacketFee(ctx context.Context, in *MsgPayPacketFee, opts ...grpc.CallOption) (*MsgPayPacketFeeResponse, error) { + out := new(MsgPayPacketFeeResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Msg/PayPacketFee", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) PayPacketFeeAsync(ctx context.Context, in *MsgPayPacketFeeAsync, opts ...grpc.CallOption) (*MsgPayPacketFeeAsyncResponse, error) { + out := new(MsgPayPacketFeeAsyncResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.fee.v1.Msg/PayPacketFeeAsync", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // RegisterCounterpartyAddress defines a rpc handler method for MsgRegisterCounterpartyAddress + // RegisterCounterpartyAddress is called by the relayer on each channelEnd and allows them to specify their + // counterparty address before relaying. This ensures they will be properly compensated for forward relaying since + // destination chain must send back relayer's source address (counterparty address) in acknowledgement. This function + // may be called more than once by a relayer, in which case, latest counterparty address is always used. + RegisterCounterpartyAddress(context.Context, *MsgRegisterCounterpartyAddress) (*MsgRegisterCounterpartyAddressResponse, error) + // PayPacketFee defines a rpc handler method for MsgPayPacketFee + // PayPacketFee is an open callback that may be called by any module/user that wishes to escrow funds in order to + // incentivize the relaying of the packet at the next sequence + // NOTE: This method is intended to be used within a multi msg transaction, where the subsequent msg that follows + // initiates the lifecycle of the incentivized packet + PayPacketFee(context.Context, *MsgPayPacketFee) (*MsgPayPacketFeeResponse, error) + // PayPacketFeeAsync defines a rpc handler method for MsgPayPacketFeeAsync + // PayPacketFeeAsync is an open callback that may be called by any module/user that wishes to escrow funds in order to + // incentivize the relaying of a known packet (i.e. at a particular sequence) + PayPacketFeeAsync(context.Context, *MsgPayPacketFeeAsync) (*MsgPayPacketFeeAsyncResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) RegisterCounterpartyAddress(ctx context.Context, req *MsgRegisterCounterpartyAddress) (*MsgRegisterCounterpartyAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RegisterCounterpartyAddress not implemented") +} +func (*UnimplementedMsgServer) PayPacketFee(ctx context.Context, req *MsgPayPacketFee) (*MsgPayPacketFeeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PayPacketFee not implemented") +} +func (*UnimplementedMsgServer) PayPacketFeeAsync(ctx context.Context, req *MsgPayPacketFeeAsync) (*MsgPayPacketFeeAsyncResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PayPacketFeeAsync not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_RegisterCounterpartyAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRegisterCounterpartyAddress) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RegisterCounterpartyAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Msg/RegisterCounterpartyAddress", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RegisterCounterpartyAddress(ctx, req.(*MsgRegisterCounterpartyAddress)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_PayPacketFee_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgPayPacketFee) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).PayPacketFee(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Msg/PayPacketFee", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).PayPacketFee(ctx, req.(*MsgPayPacketFee)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_PayPacketFeeAsync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgPayPacketFeeAsync) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).PayPacketFeeAsync(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.fee.v1.Msg/PayPacketFeeAsync", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).PayPacketFeeAsync(ctx, req.(*MsgPayPacketFeeAsync)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "ibc.applications.fee.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "RegisterCounterpartyAddress", + Handler: _Msg_RegisterCounterpartyAddress_Handler, + }, + { + MethodName: "PayPacketFee", + Handler: _Msg_PayPacketFee_Handler, + }, + { + MethodName: "PayPacketFeeAsync", + Handler: _Msg_PayPacketFeeAsync_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "ibc/applications/fee/v1/tx.proto", +} + +func (m *MsgRegisterCounterpartyAddress) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterCounterpartyAddress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterCounterpartyAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.CounterpartyAddress) > 0 { + i -= len(m.CounterpartyAddress) + copy(dAtA[i:], m.CounterpartyAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintTx(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRegisterCounterpartyAddressResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterCounterpartyAddressResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterCounterpartyAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgPayPacketFee) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgPayPacketFee) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgPayPacketFee) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Relayers) > 0 { + for iNdEx := len(m.Relayers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Relayers[iNdEx]) + copy(dAtA[i:], m.Relayers[iNdEx]) + i = encodeVarintTx(dAtA, i, uint64(len(m.Relayers[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x22 + } + if len(m.SourceChannelId) > 0 { + i -= len(m.SourceChannelId) + copy(dAtA[i:], m.SourceChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.SourceChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.SourcePortId) > 0 { + i -= len(m.SourcePortId) + copy(dAtA[i:], m.SourcePortId) + i = encodeVarintTx(dAtA, i, uint64(len(m.SourcePortId))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Fee.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgPayPacketFeeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgPayPacketFeeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgPayPacketFeeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgPayPacketFeeAsync) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgPayPacketFeeAsync) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgPayPacketFeeAsync) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PacketFee.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.PacketId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgPayPacketFeeAsyncResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgPayPacketFeeAsyncResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgPayPacketFeeAsyncResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgRegisterCounterpartyAddress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.CounterpartyAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRegisterCounterpartyAddressResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgPayPacketFee) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Fee.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.SourcePortId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.SourceChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Relayers) > 0 { + for _, s := range m.Relayers { + l = len(s) + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgPayPacketFeeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgPayPacketFeeAsync) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PacketId.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.PacketFee.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgPayPacketFeeAsyncResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgRegisterCounterpartyAddress) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterCounterpartyAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterCounterpartyAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRegisterCounterpartyAddressResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterCounterpartyAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterCounterpartyAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgPayPacketFee) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgPayPacketFee: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgPayPacketFee: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Fee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourcePortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourcePortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourceChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Relayers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Relayers = append(m.Relayers, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgPayPacketFeeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgPayPacketFeeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgPayPacketFeeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgPayPacketFeeAsync) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgPayPacketFeeAsync: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgPayPacketFeeAsync: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PacketFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgPayPacketFeeAsyncResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgPayPacketFeeAsyncResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgPayPacketFeeAsyncResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/modules/apps/transfer/ibc_module_test.go b/modules/apps/transfer/ibc_module_test.go index 92d0f30d4c7..3dcb5518cbb 100644 --- a/modules/apps/transfer/ibc_module_test.go +++ b/modules/apps/transfer/ibc_module_test.go @@ -13,9 +13,10 @@ import ( func (suite *TransferTestSuite) TestOnChanOpenInit() { var ( - channel *channeltypes.Channel - path *ibctesting.Path - chanCap *capabilitytypes.Capability + channel *channeltypes.Channel + path *ibctesting.Path + chanCap *capabilitytypes.Capability + counterparty channeltypes.Counterparty ) testCases := []struct { @@ -64,7 +65,7 @@ func (suite *TransferTestSuite) TestOnChanOpenInit() { suite.coordinator.SetupConnections(path) path.EndpointA.ChannelID = ibctesting.FirstChannelID - counterparty := channeltypes.NewCounterparty(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) + counterparty = channeltypes.NewCounterparty(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID) channel = &channeltypes.Channel{ State: channeltypes.INIT, Ordering: channeltypes.UNORDERED, @@ -85,7 +86,7 @@ func (suite *TransferTestSuite) TestOnChanOpenInit() { tc.malleate() // explicitly change fields in channel and testChannel err = cbs.OnChanOpenInit(suite.chainA.GetContext(), channel.Ordering, channel.GetConnectionHops(), - path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, chanCap, channel.Counterparty, channel.GetVersion(), + path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, chanCap, counterparty, channel.GetVersion(), ) if tc.expPass { @@ -103,6 +104,7 @@ func (suite *TransferTestSuite) TestOnChanOpenTry() { channel *channeltypes.Channel chanCap *capabilitytypes.Capability path *ibctesting.Path + counterparty channeltypes.Counterparty counterpartyVersion string ) @@ -153,7 +155,7 @@ func (suite *TransferTestSuite) TestOnChanOpenTry() { suite.coordinator.SetupConnections(path) path.EndpointA.ChannelID = ibctesting.FirstChannelID - counterparty := channeltypes.NewCounterparty(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) + counterparty = channeltypes.NewCounterparty(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID) channel = &channeltypes.Channel{ State: channeltypes.TRYOPEN, Ordering: channeltypes.UNORDERED, diff --git a/modules/apps/transfer/keeper/genesis.go b/modules/apps/transfer/keeper/genesis.go index 35bbd231a59..d4020508cc9 100644 --- a/modules/apps/transfer/keeper/genesis.go +++ b/modules/apps/transfer/keeper/genesis.go @@ -28,12 +28,6 @@ func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) { } k.SetParams(ctx, state.Params) - - // check if the module account exists - moduleAcc := k.GetTransferAccount(ctx) - if moduleAcc == nil { - panic(fmt.Sprintf("%s module account has not been set", types.ModuleName)) - } } // ExportGenesis exports ibc-transfer module's portID and denom trace info into its genesis state. diff --git a/modules/apps/transfer/keeper/keeper.go b/modules/apps/transfer/keeper/keeper.go index 46e3c51aa2a..d3f32d95df7 100644 --- a/modules/apps/transfer/keeper/keeper.go +++ b/modules/apps/transfer/keeper/keeper.go @@ -4,7 +4,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -64,11 +63,6 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", "x/"+host.ModuleName+"-"+types.ModuleName) } -// GetTransferAccount returns the ICS20 - transfers ModuleAccount -func (k Keeper) GetTransferAccount(ctx sdk.Context) authtypes.ModuleAccountI { - return k.authKeeper.GetModuleAccount(ctx, types.ModuleName) -} - // IsBound checks if the transfer module is already bound to the desired port func (k Keeper) IsBound(ctx sdk.Context, portID string) bool { _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID)) diff --git a/modules/apps/transfer/keeper/keeper_test.go b/modules/apps/transfer/keeper/keeper_test.go index 1e29626c987..40ceb6d782f 100644 --- a/modules/apps/transfer/keeper/keeper_test.go +++ b/modules/apps/transfer/keeper/keeper_test.go @@ -4,9 +4,7 @@ import ( "testing" "github.com/cosmos/cosmos-sdk/baseapp" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - "github.com/tendermint/tendermint/crypto" "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" ibctesting "github.com/cosmos/ibc-go/v3/testing" @@ -46,16 +44,6 @@ func NewTransferPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { return path } -func (suite *KeeperTestSuite) TestGetTransferAccount() { - expectedMaccAddr := sdk.AccAddress(crypto.AddressHash([]byte(types.ModuleName))) - - macc := suite.chainA.GetSimApp().TransferKeeper.GetTransferAccount(suite.chainA.GetContext()) - - suite.Require().NotNil(macc) - suite.Require().Equal(types.ModuleName, macc.GetName()) - suite.Require().Equal(expectedMaccAddr, macc.GetAddress()) -} - func TestKeeperTestSuite(t *testing.T) { suite.Run(t, new(KeeperTestSuite)) } diff --git a/modules/core/02-client/keeper/keeper_test.go b/modules/core/02-client/keeper/keeper_test.go index 535b2f1685f..f56607e4dcf 100644 --- a/modules/core/02-client/keeper/keeper_test.go +++ b/modules/core/02-client/keeper/keeper_test.go @@ -66,7 +66,8 @@ type KeeperTestSuite struct { now time.Time past time.Time solomachine *ibctesting.Solomachine - signers map[string]tmtypes.PrivValidator + + signers map[string]tmtypes.PrivValidator // TODO: deprecate queryClient types.QueryClient diff --git a/modules/core/04-channel/keeper/events.go b/modules/core/04-channel/keeper/events.go index d299d6afeda..731d298a2ae 100644 --- a/modules/core/04-channel/keeper/events.go +++ b/modules/core/04-channel/keeper/events.go @@ -20,6 +20,7 @@ func EmitChannelOpenInitEvent(ctx sdk.Context, portID string, channelID string, sdk.NewAttribute(types.AttributeCounterpartyPortID, channel.Counterparty.PortId), sdk.NewAttribute(types.AttributeCounterpartyChannelID, channel.Counterparty.ChannelId), sdk.NewAttribute(types.AttributeKeyConnectionID, channel.ConnectionHops[0]), + sdk.NewAttribute(types.AttributeVersion, channel.Version), ), }) @@ -41,6 +42,7 @@ func EmitChannelOpenTryEvent(ctx sdk.Context, portID string, channelID string, c sdk.NewAttribute(types.AttributeCounterpartyPortID, channel.Counterparty.PortId), sdk.NewAttribute(types.AttributeCounterpartyChannelID, channel.Counterparty.ChannelId), sdk.NewAttribute(types.AttributeKeyConnectionID, channel.ConnectionHops[0]), + sdk.NewAttribute(types.AttributeVersion, channel.Version), ), }) ctx.EventManager().EmitEvents(sdk.Events{ diff --git a/modules/core/04-channel/keeper/keeper.go b/modules/core/04-channel/keeper/keeper.go index 65378039ad9..ca2f824ad48 100644 --- a/modules/core/04-channel/keeper/keeper.go +++ b/modules/core/04-channel/keeper/keeper.go @@ -86,6 +86,16 @@ func (k Keeper) SetChannel(ctx sdk.Context, portID, channelID string, channel ty store.Set(host.ChannelKey(portID, channelID), bz) } +// GetAppVersion gets the version for the specified channel. +func (k Keeper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + channel, found := k.GetChannel(ctx, portID, channelID) + if !found { + return "", false + } + + return channel.Version, true +} + // GetNextChannelSequence gets the next channel sequence from the store. func (k Keeper) GetNextChannelSequence(ctx sdk.Context) uint64 { store := ctx.KVStore(k.storeKey) diff --git a/modules/core/04-channel/keeper/keeper_test.go b/modules/core/04-channel/keeper/keeper_test.go index 60888f11c3c..f04664d71f4 100644 --- a/modules/core/04-channel/keeper/keeper_test.go +++ b/modules/core/04-channel/keeper/keeper_test.go @@ -7,6 +7,7 @@ import ( "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types" ibctesting "github.com/cosmos/ibc-go/v3/testing" + ibcmock "github.com/cosmos/ibc-go/v3/testing/mock" ) // KeeperTestSuite is a testing suite to test keeper functions. @@ -62,6 +63,24 @@ func (suite *KeeperTestSuite) TestSetChannel() { suite.Equal(expectedCounterparty, storedChannel.Counterparty) } +func (suite *KeeperTestSuite) TestGetAppVersion() { + // create client and connections on both chains + path := ibctesting.NewPath(suite.chainA, suite.chainB) + suite.coordinator.SetupConnections(path) + + version, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetAppVersion(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) + suite.Require().False(found) + suite.Require().Empty(version) + + // init channel + err := path.EndpointA.ChanOpenInit() + suite.NoError(err) + + channelVersion, found := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetAppVersion(suite.chainA.GetContext(), path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) + suite.Require().True(found) + suite.Require().Equal(ibcmock.Version, channelVersion) +} + // TestGetAllChannels creates multiple channels on chain A through various connections // and tests their retrieval. 2 channels are on connA0 and 1 channel is on connA1 func (suite KeeperTestSuite) TestGetAllChannels() { diff --git a/modules/core/04-channel/keeper/packet.go b/modules/core/04-channel/keeper/packet.go index 51b02f9bece..c3e8e45b89c 100644 --- a/modules/core/04-channel/keeper/packet.go +++ b/modules/core/04-channel/keeper/packet.go @@ -2,6 +2,7 @@ package keeper import ( "bytes" + "strconv" "time" sdk "github.com/cosmos/cosmos-sdk/types" @@ -129,7 +130,7 @@ func (k Keeper) SendPacket( k.Logger(ctx).Info( "packet sent", - "sequence", packet.GetSequence(), + "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), "src_channel", packet.GetSourceChannel(), "dst_port", packet.GetDestPort(), @@ -284,7 +285,7 @@ func (k Keeper) RecvPacket( // log that a packet has been received & executed k.Logger(ctx).Info( "packet received", - "sequence", packet.GetSequence(), + "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), "src_channel", packet.GetSourceChannel(), "dst_port", packet.GetDestPort(), @@ -494,7 +495,7 @@ func (k Keeper) AcknowledgePacket( // log that a packet has been acknowledged k.Logger(ctx).Info( "packet acknowledged", - "sequence", packet.GetSequence(), + "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), "src_channel", packet.GetSourceChannel(), "dst_port", packet.GetDestPort(), diff --git a/modules/core/04-channel/keeper/timeout.go b/modules/core/04-channel/keeper/timeout.go index b446aa7ea4c..5a14ef85b6b 100644 --- a/modules/core/04-channel/keeper/timeout.go +++ b/modules/core/04-channel/keeper/timeout.go @@ -2,6 +2,7 @@ package keeper import ( "bytes" + "strconv" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -159,7 +160,7 @@ func (k Keeper) TimeoutExecuted( k.Logger(ctx).Info( "packet timed-out", - "sequence", packet.GetSequence(), + "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), "src_channel", packet.GetSourceChannel(), "dst_port", packet.GetDestPort(), diff --git a/modules/core/04-channel/types/channel.pb.go b/modules/core/04-channel/types/channel.pb.go index 4ebbe01c977..3ce5ce3a2e1 100644 --- a/modules/core/04-channel/types/channel.pb.go +++ b/modules/core/04-channel/types/channel.pb.go @@ -347,6 +347,51 @@ func (m *PacketState) XXX_DiscardUnknown() { var xxx_messageInfo_PacketState proto.InternalMessageInfo +// PacketId is an identifer for a unique Packet +// Source chains refer to packets by source port/channel +// Destination chains refer to packets by destination port/channel +type PacketId struct { + // channel port identifier + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + // channel unique identifier + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + // packet sequence + Sequence uint64 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` +} + +func (m *PacketId) Reset() { *m = PacketId{} } +func (m *PacketId) String() string { return proto.CompactTextString(m) } +func (*PacketId) ProtoMessage() {} +func (*PacketId) Descriptor() ([]byte, []int) { + return fileDescriptor_c3a07336710636a0, []int{5} +} +func (m *PacketId) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PacketId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PacketId.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PacketId) XXX_Merge(src proto.Message) { + xxx_messageInfo_PacketId.Merge(m, src) +} +func (m *PacketId) XXX_Size() int { + return m.Size() +} +func (m *PacketId) XXX_DiscardUnknown() { + xxx_messageInfo_PacketId.DiscardUnknown(m) +} + +var xxx_messageInfo_PacketId proto.InternalMessageInfo + // Acknowledgement is the recommended acknowledgement format to be used by // app-specific protocols. // NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental @@ -367,7 +412,7 @@ func (m *Acknowledgement) Reset() { *m = Acknowledgement{} } func (m *Acknowledgement) String() string { return proto.CompactTextString(m) } func (*Acknowledgement) ProtoMessage() {} func (*Acknowledgement) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{5} + return fileDescriptor_c3a07336710636a0, []int{6} } func (m *Acknowledgement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -449,70 +494,72 @@ func init() { proto.RegisterType((*Counterparty)(nil), "ibc.core.channel.v1.Counterparty") proto.RegisterType((*Packet)(nil), "ibc.core.channel.v1.Packet") proto.RegisterType((*PacketState)(nil), "ibc.core.channel.v1.PacketState") + proto.RegisterType((*PacketId)(nil), "ibc.core.channel.v1.PacketId") proto.RegisterType((*Acknowledgement)(nil), "ibc.core.channel.v1.Acknowledgement") } func init() { proto.RegisterFile("ibc/core/channel/v1/channel.proto", fileDescriptor_c3a07336710636a0) } var fileDescriptor_c3a07336710636a0 = []byte{ - // 911 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xcd, 0x8e, 0xda, 0x56, - 0x14, 0xc6, 0x83, 0xf9, 0x3b, 0x0c, 0x0c, 0x73, 0xd3, 0x21, 0xae, 0x9b, 0x60, 0x62, 0x75, 0x31, - 0x4a, 0x15, 0xc8, 0x24, 0x51, 0xab, 0x66, 0xd5, 0xe1, 0x27, 0x1a, 0xab, 0x11, 0x8c, 0x0c, 0xb3, - 0x68, 0x36, 0x14, 0xec, 0x5b, 0xb0, 0x02, 0xbe, 0xd4, 0xbe, 0x30, 0x9a, 0x37, 0x88, 0x58, 0xf5, - 0x05, 0x90, 0x2a, 0x55, 0xed, 0x2b, 0xf4, 0x15, 0xb2, 0xcc, 0xb2, 0x2b, 0xab, 0x9a, 0x59, 0x74, - 0xcf, 0x0b, 0xb4, 0xf2, 0xbd, 0xd7, 0xfc, 0x4c, 0xa2, 0x2c, 0xbb, 0xca, 0x8a, 0x7b, 0xbe, 0xef, - 0x3b, 0x3f, 0x3e, 0xe7, 0x70, 0x2f, 0x3c, 0x70, 0x06, 0x56, 0xd5, 0x22, 0x1e, 0xae, 0x5a, 0xa3, - 0xbe, 0xeb, 0xe2, 0x71, 0x75, 0x7e, 0x12, 0x1d, 0x2b, 0x53, 0x8f, 0x50, 0x82, 0xee, 0x38, 0x03, - 0xab, 0x12, 0x4a, 0x2a, 0x11, 0x3e, 0x3f, 0x51, 0x3f, 0x1b, 0x92, 0x21, 0x61, 0x7c, 0x35, 0x3c, - 0x71, 0xa9, 0xaa, 0x6d, 0xa2, 0x8d, 0x1d, 0xec, 0x52, 0x16, 0x8c, 0x9d, 0xb8, 0x40, 0xff, 0x7d, - 0x0f, 0x52, 0x75, 0x1e, 0x05, 0x3d, 0x86, 0x84, 0x4f, 0xfb, 0x14, 0x2b, 0x52, 0x59, 0x3a, 0xce, - 0x3f, 0x51, 0x2b, 0x1f, 0xc8, 0x53, 0xe9, 0x84, 0x0a, 0x93, 0x0b, 0xd1, 0xd7, 0x90, 0x26, 0x9e, - 0x8d, 0x3d, 0xc7, 0x1d, 0x2a, 0x7b, 0x1f, 0x71, 0x6a, 0x87, 0x22, 0x73, 0xad, 0x45, 0xdf, 0xc3, - 0xbe, 0x45, 0x66, 0x2e, 0xc5, 0xde, 0xb4, 0xef, 0xd1, 0x2b, 0x25, 0x5e, 0x96, 0x8e, 0xb3, 0x4f, - 0x1e, 0x7c, 0xd0, 0xb7, 0xbe, 0x25, 0xac, 0xc9, 0x6f, 0x03, 0x2d, 0x66, 0xee, 0x38, 0xa3, 0x3a, - 0x1c, 0x58, 0xc4, 0x75, 0xb1, 0x45, 0x1d, 0xe2, 0xf6, 0x46, 0x64, 0xea, 0x2b, 0x72, 0x39, 0x7e, - 0x9c, 0xa9, 0xa9, 0xab, 0x40, 0x2b, 0x5e, 0xf5, 0x27, 0xe3, 0xe7, 0xfa, 0x2d, 0x81, 0x6e, 0xe6, - 0x37, 0xc8, 0x19, 0x99, 0xfa, 0x48, 0x81, 0xd4, 0x1c, 0x7b, 0xbe, 0x43, 0x5c, 0x25, 0x51, 0x96, - 0x8e, 0x33, 0x66, 0x64, 0x3e, 0x97, 0xdf, 0xfc, 0xaa, 0xc5, 0xf4, 0x7f, 0xf6, 0xe0, 0xd0, 0xb0, - 0xb1, 0x4b, 0x9d, 0x9f, 0x1c, 0x6c, 0x7f, 0xea, 0xd8, 0x47, 0x3a, 0x86, 0xee, 0x42, 0x6a, 0x4a, - 0x3c, 0xda, 0x73, 0x6c, 0x25, 0xc9, 0x98, 0x64, 0x68, 0x1a, 0x36, 0xba, 0x0f, 0x20, 0xca, 0x0c, - 0xb9, 0x14, 0xe3, 0x32, 0x02, 0x31, 0x6c, 0xd1, 0xe9, 0x4b, 0xd8, 0xdf, 0xfe, 0x00, 0xf4, 0xd5, - 0x26, 0x5a, 0xd8, 0xe5, 0x4c, 0x0d, 0xad, 0x02, 0x2d, 0xcf, 0x8b, 0x14, 0x84, 0xbe, 0xce, 0xf0, - 0x6c, 0x27, 0xc3, 0x1e, 0xd3, 0x1f, 0xad, 0x02, 0xed, 0x50, 0x7c, 0xd4, 0x9a, 0xd3, 0xdf, 0x4f, - 0xfc, 0x6f, 0x1c, 0x92, 0xe7, 0x7d, 0xeb, 0x35, 0xa6, 0x48, 0x85, 0xb4, 0x8f, 0x7f, 0x9e, 0x61, - 0xd7, 0xe2, 0xa3, 0x95, 0xcd, 0xb5, 0x8d, 0xbe, 0x81, 0xac, 0x4f, 0x66, 0x9e, 0x85, 0x7b, 0x61, - 0x4e, 0x91, 0xa3, 0xb8, 0x0a, 0x34, 0xc4, 0x73, 0x6c, 0x91, 0xba, 0x09, 0xdc, 0x3a, 0x27, 0x1e, - 0x45, 0xdf, 0x41, 0x5e, 0x70, 0x22, 0x33, 0x1b, 0x62, 0xa6, 0xf6, 0xf9, 0x2a, 0xd0, 0x8e, 0x76, - 0x7c, 0x05, 0xaf, 0x9b, 0x39, 0x0e, 0x44, 0xeb, 0xf6, 0x02, 0x0a, 0x36, 0xf6, 0xa9, 0xe3, 0xf6, - 0xd9, 0x5c, 0x58, 0x7e, 0x99, 0xc5, 0xf8, 0x62, 0x15, 0x68, 0x77, 0x79, 0x8c, 0xdb, 0x0a, 0xdd, - 0x3c, 0xd8, 0x82, 0x58, 0x25, 0x6d, 0xb8, 0xb3, 0xad, 0x8a, 0xca, 0x61, 0x63, 0xac, 0x95, 0x56, - 0x81, 0xa6, 0xbe, 0x1f, 0x6a, 0x5d, 0x13, 0xda, 0x42, 0xa3, 0xc2, 0x10, 0xc8, 0x76, 0x9f, 0xf6, - 0xd9, 0xb8, 0xf7, 0x4d, 0x76, 0x46, 0x3f, 0x42, 0x9e, 0x3a, 0x13, 0x4c, 0x66, 0xb4, 0x37, 0xc2, - 0xce, 0x70, 0x44, 0xd9, 0xc0, 0xb3, 0x3b, 0xfb, 0xce, 0x6f, 0xa2, 0xf9, 0x49, 0xe5, 0x8c, 0x29, - 0x6a, 0xf7, 0xc3, 0x65, 0xdd, 0xb4, 0x63, 0xd7, 0x5f, 0x37, 0x73, 0x02, 0xe0, 0x6a, 0x64, 0xc0, - 0x61, 0xa4, 0x08, 0x7f, 0x7d, 0xda, 0x9f, 0x4c, 0x95, 0x74, 0x38, 0xae, 0xda, 0xbd, 0x55, 0xa0, - 0x29, 0xbb, 0x41, 0xd6, 0x12, 0xdd, 0x2c, 0x08, 0xac, 0x1b, 0x41, 0x62, 0x03, 0xfe, 0x90, 0x20, - 0xcb, 0x37, 0x80, 0xfd, 0x67, 0xff, 0x87, 0xd5, 0xdb, 0xd9, 0xb4, 0xf8, 0xad, 0x4d, 0x8b, 0xba, - 0x2a, 0x6f, 0xba, 0x2a, 0x0a, 0x6d, 0xc3, 0xc1, 0xa9, 0xf5, 0xda, 0x25, 0x97, 0x63, 0x6c, 0x0f, - 0xf1, 0x04, 0xbb, 0x14, 0x29, 0x90, 0xf4, 0xb0, 0x3f, 0x1b, 0x53, 0xe5, 0x28, 0x94, 0x9f, 0xc5, - 0x4c, 0x61, 0xa3, 0x22, 0x24, 0xb0, 0xe7, 0x11, 0x4f, 0x29, 0x86, 0x35, 0x9d, 0xc5, 0x4c, 0x6e, - 0xd6, 0x00, 0xd2, 0x1e, 0xf6, 0xa7, 0xc4, 0xf5, 0xf1, 0xc3, 0x3f, 0x25, 0x48, 0x74, 0xc4, 0x05, - 0xa5, 0x75, 0xba, 0xa7, 0xdd, 0x66, 0xef, 0xa2, 0x65, 0xb4, 0x8c, 0xae, 0x71, 0xfa, 0xd2, 0x78, - 0xd5, 0x6c, 0xf4, 0x2e, 0x5a, 0x9d, 0xf3, 0x66, 0xdd, 0x78, 0x61, 0x34, 0x1b, 0x85, 0x98, 0x7a, - 0xb8, 0x58, 0x96, 0x73, 0x3b, 0x02, 0xa4, 0x00, 0x70, 0xbf, 0x10, 0x2c, 0x48, 0x6a, 0x7a, 0xb1, - 0x2c, 0xcb, 0xe1, 0x19, 0x95, 0x20, 0xc7, 0x99, 0xae, 0xf9, 0x43, 0xfb, 0xbc, 0xd9, 0x2a, 0xec, - 0xa9, 0xd9, 0xc5, 0xb2, 0x9c, 0x12, 0xe6, 0xc6, 0x93, 0x91, 0x71, 0xee, 0xc9, 0x98, 0x7b, 0xb0, - 0xcf, 0x99, 0xfa, 0xcb, 0x76, 0xa7, 0xd9, 0x28, 0xc8, 0x2a, 0x2c, 0x96, 0xe5, 0x24, 0xb7, 0x54, - 0xf9, 0xcd, 0x6f, 0xa5, 0xd8, 0xc3, 0x4b, 0x48, 0xb0, 0xbb, 0x12, 0x7d, 0x09, 0xc5, 0xb6, 0xd9, - 0x68, 0x9a, 0xbd, 0x56, 0xbb, 0xd5, 0xbc, 0x55, 0x2f, 0x0b, 0x19, 0xe2, 0x48, 0x87, 0x03, 0xae, - 0xba, 0x68, 0xb1, 0xdf, 0x66, 0xa3, 0x20, 0xa9, 0xb9, 0xc5, 0xb2, 0x9c, 0x59, 0x03, 0x61, 0xc1, - 0x5c, 0x13, 0x29, 0x44, 0xc1, 0xc2, 0xe4, 0x89, 0x6b, 0x9d, 0xb7, 0xd7, 0x25, 0xe9, 0xdd, 0x75, - 0x49, 0xfa, 0xfb, 0xba, 0x24, 0xfd, 0x72, 0x53, 0x8a, 0xbd, 0xbb, 0x29, 0xc5, 0xfe, 0xba, 0x29, - 0xc5, 0x5e, 0x7d, 0x3b, 0x74, 0xe8, 0x68, 0x36, 0xa8, 0x58, 0x64, 0x52, 0xb5, 0x88, 0x3f, 0x21, - 0x7e, 0xd5, 0x19, 0x58, 0x8f, 0x86, 0xa4, 0x3a, 0x7f, 0x5a, 0x9d, 0x10, 0x7b, 0x36, 0xc6, 0x3e, - 0x7f, 0x94, 0x1f, 0x3f, 0x7b, 0x14, 0xbd, 0xf2, 0xf4, 0x6a, 0x8a, 0xfd, 0x41, 0x92, 0xbd, 0xca, - 0x4f, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x31, 0x31, 0xe5, 0x06, 0x08, 0x00, 0x00, + // 925 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0xcd, 0x8e, 0x1a, 0x47, + 0x10, 0x66, 0x60, 0xf8, 0x2b, 0x16, 0x96, 0x6d, 0x67, 0xf1, 0x64, 0x62, 0x33, 0x78, 0x94, 0xc3, + 0xca, 0x91, 0xc1, 0x6b, 0x5b, 0x89, 0xe2, 0x53, 0x96, 0x1f, 0x6b, 0x47, 0xb1, 0x60, 0x35, 0xb0, + 0x87, 0xf8, 0x42, 0x60, 0xa6, 0x03, 0x23, 0xc3, 0x34, 0x99, 0x69, 0x58, 0xed, 0x1b, 0x58, 0x5c, + 0x92, 0x17, 0x40, 0x8a, 0x14, 0x25, 0xaf, 0x90, 0x57, 0xf0, 0xd1, 0xc7, 0x9c, 0x50, 0xb4, 0x7b, + 0xc8, 0x9d, 0x17, 0x48, 0x34, 0xdd, 0x3d, 0xfc, 0xac, 0xad, 0x3d, 0x26, 0x17, 0x9f, 0xe8, 0xaa, + 0xef, 0xab, 0xaa, 0x6f, 0xaa, 0x8a, 0x56, 0xc3, 0x03, 0xa7, 0x6f, 0x55, 0x2c, 0xe2, 0xe1, 0x8a, + 0x35, 0xec, 0xb9, 0x2e, 0x1e, 0x55, 0x66, 0xc7, 0xe1, 0xb1, 0x3c, 0xf1, 0x08, 0x25, 0xe8, 0x8e, + 0xd3, 0xb7, 0xca, 0x01, 0xa5, 0x1c, 0xfa, 0x67, 0xc7, 0xea, 0x27, 0x03, 0x32, 0x20, 0x0c, 0xaf, + 0x04, 0x27, 0x4e, 0x55, 0xb5, 0x4d, 0xb6, 0x91, 0x83, 0x5d, 0xca, 0x92, 0xb1, 0x13, 0x27, 0xe8, + 0xbf, 0x45, 0x21, 0x59, 0xe3, 0x59, 0xd0, 0x63, 0x88, 0xfb, 0xb4, 0x47, 0xb1, 0x22, 0x95, 0xa4, + 0xa3, 0xdc, 0x13, 0xb5, 0xfc, 0x81, 0x3a, 0xe5, 0x76, 0xc0, 0x30, 0x39, 0x11, 0x7d, 0x09, 0x29, + 0xe2, 0xd9, 0xd8, 0x73, 0xdc, 0x81, 0x12, 0xbd, 0x25, 0xa8, 0x15, 0x90, 0xcc, 0x35, 0x17, 0x7d, + 0x0b, 0x7b, 0x16, 0x99, 0xba, 0x14, 0x7b, 0x93, 0x9e, 0x47, 0x2f, 0x95, 0x58, 0x49, 0x3a, 0xca, + 0x3c, 0x79, 0xf0, 0xc1, 0xd8, 0xda, 0x16, 0xb1, 0x2a, 0xbf, 0x5d, 0x6a, 0x11, 0x73, 0x27, 0x18, + 0xd5, 0x60, 0xdf, 0x22, 0xae, 0x8b, 0x2d, 0xea, 0x10, 0xb7, 0x3b, 0x24, 0x13, 0x5f, 0x91, 0x4b, + 0xb1, 0xa3, 0x74, 0x55, 0x5d, 0x2d, 0xb5, 0xc2, 0x65, 0x6f, 0x3c, 0x7a, 0xae, 0xdf, 0x20, 0xe8, + 0x66, 0x6e, 0xe3, 0x39, 0x25, 0x13, 0x1f, 0x29, 0x90, 0x9c, 0x61, 0xcf, 0x77, 0x88, 0xab, 0xc4, + 0x4b, 0xd2, 0x51, 0xda, 0x0c, 0xcd, 0xe7, 0xf2, 0x9b, 0x5f, 0xb4, 0x88, 0xfe, 0x77, 0x14, 0x0e, + 0x0c, 0x1b, 0xbb, 0xd4, 0xf9, 0xc1, 0xc1, 0xf6, 0xc7, 0x8e, 0xdd, 0xd2, 0x31, 0x74, 0x17, 0x92, + 0x13, 0xe2, 0xd1, 0xae, 0x63, 0x2b, 0x09, 0x86, 0x24, 0x02, 0xd3, 0xb0, 0xd1, 0x7d, 0x00, 0x21, + 0x33, 0xc0, 0x92, 0x0c, 0x4b, 0x0b, 0x8f, 0x61, 0x8b, 0x4e, 0x5f, 0xc0, 0xde, 0xf6, 0x07, 0xa0, + 0x2f, 0x36, 0xd9, 0x82, 0x2e, 0xa7, 0xab, 0x68, 0xb5, 0xd4, 0x72, 0x5c, 0xa4, 0x00, 0xf4, 0x75, + 0x85, 0x67, 0x3b, 0x15, 0xa2, 0x8c, 0x7f, 0xb8, 0x5a, 0x6a, 0x07, 0xe2, 0xa3, 0xd6, 0x98, 0xfe, + 0x7e, 0xe1, 0x7f, 0x62, 0x90, 0x38, 0xeb, 0x59, 0xaf, 0x31, 0x45, 0x2a, 0xa4, 0x7c, 0xfc, 0xe3, + 0x14, 0xbb, 0x16, 0x1f, 0xad, 0x6c, 0xae, 0x6d, 0xf4, 0x15, 0x64, 0x7c, 0x32, 0xf5, 0x2c, 0xdc, + 0x0d, 0x6a, 0x8a, 0x1a, 0x85, 0xd5, 0x52, 0x43, 0xbc, 0xc6, 0x16, 0xa8, 0x9b, 0xc0, 0xad, 0x33, + 0xe2, 0x51, 0xf4, 0x0d, 0xe4, 0x04, 0x26, 0x2a, 0xb3, 0x21, 0xa6, 0xab, 0x9f, 0xae, 0x96, 0xda, + 0xe1, 0x4e, 0xac, 0xc0, 0x75, 0x33, 0xcb, 0x1d, 0xe1, 0xba, 0xbd, 0x80, 0xbc, 0x8d, 0x7d, 0xea, + 0xb8, 0x3d, 0x36, 0x17, 0x56, 0x5f, 0x66, 0x39, 0x3e, 0x5b, 0x2d, 0xb5, 0xbb, 0x3c, 0xc7, 0x4d, + 0x86, 0x6e, 0xee, 0x6f, 0xb9, 0x98, 0x92, 0x16, 0xdc, 0xd9, 0x66, 0x85, 0x72, 0xd8, 0x18, 0xab, + 0xc5, 0xd5, 0x52, 0x53, 0xdf, 0x4f, 0xb5, 0xd6, 0x84, 0xb6, 0xbc, 0xa1, 0x30, 0x04, 0xb2, 0xdd, + 0xa3, 0x3d, 0x36, 0xee, 0x3d, 0x93, 0x9d, 0xd1, 0xf7, 0x90, 0xa3, 0xce, 0x18, 0x93, 0x29, 0xed, + 0x0e, 0xb1, 0x33, 0x18, 0x52, 0x36, 0xf0, 0xcc, 0xce, 0xbe, 0xf3, 0x9b, 0x68, 0x76, 0x5c, 0x3e, + 0x65, 0x8c, 0xea, 0xfd, 0x60, 0x59, 0x37, 0xed, 0xd8, 0x8d, 0xd7, 0xcd, 0xac, 0x70, 0x70, 0x36, + 0x32, 0xe0, 0x20, 0x64, 0x04, 0xbf, 0x3e, 0xed, 0x8d, 0x27, 0x4a, 0x2a, 0x18, 0x57, 0xf5, 0xde, + 0x6a, 0xa9, 0x29, 0xbb, 0x49, 0xd6, 0x14, 0xdd, 0xcc, 0x0b, 0x5f, 0x27, 0x74, 0x89, 0x0d, 0xf8, + 0x5d, 0x82, 0x0c, 0xdf, 0x00, 0xf6, 0x9f, 0xfd, 0x0f, 0x56, 0x6f, 0x67, 0xd3, 0x62, 0x37, 0x36, + 0x2d, 0xec, 0xaa, 0xbc, 0xe9, 0xaa, 0x10, 0xfa, 0x93, 0x04, 0x29, 0x2e, 0xd4, 0xb0, 0xff, 0x67, + 0x95, 0x42, 0x51, 0x0b, 0xf6, 0x4f, 0xac, 0xd7, 0x2e, 0xb9, 0x18, 0x61, 0x7b, 0x80, 0xc7, 0xd8, + 0xa5, 0x48, 0x81, 0x84, 0x87, 0xfd, 0xe9, 0x88, 0x2a, 0x87, 0xc1, 0x07, 0x9c, 0x46, 0x4c, 0x61, + 0xa3, 0x02, 0xc4, 0xb1, 0xe7, 0x11, 0x4f, 0x29, 0x04, 0xf5, 0x4f, 0x23, 0x26, 0x37, 0xab, 0x00, + 0x29, 0x0f, 0xfb, 0x13, 0xe2, 0xfa, 0xf8, 0xe1, 0x1f, 0x12, 0xc4, 0xdb, 0xe2, 0xca, 0xd4, 0xda, + 0x9d, 0x93, 0x4e, 0xa3, 0x7b, 0xde, 0x34, 0x9a, 0x46, 0xc7, 0x38, 0x79, 0x69, 0xbc, 0x6a, 0xd4, + 0xbb, 0xe7, 0xcd, 0xf6, 0x59, 0xa3, 0x66, 0xbc, 0x30, 0x1a, 0xf5, 0x7c, 0x44, 0x3d, 0x98, 0x2f, + 0x4a, 0xd9, 0x1d, 0x02, 0x52, 0x00, 0x78, 0x5c, 0xe0, 0xcc, 0x4b, 0x6a, 0x6a, 0xbe, 0x28, 0xc9, + 0xc1, 0x19, 0x15, 0x21, 0xcb, 0x91, 0x8e, 0xf9, 0x5d, 0xeb, 0xac, 0xd1, 0xcc, 0x47, 0xd5, 0xcc, + 0x7c, 0x51, 0x4a, 0x0a, 0x73, 0x13, 0xc9, 0xc0, 0x18, 0x8f, 0x64, 0xc8, 0x3d, 0xd8, 0xe3, 0x48, + 0xed, 0x65, 0xab, 0xdd, 0xa8, 0xe7, 0x65, 0x15, 0xe6, 0x8b, 0x52, 0x82, 0x5b, 0xaa, 0xfc, 0xe6, + 0xd7, 0x62, 0xe4, 0xe1, 0x05, 0xc4, 0xd9, 0xed, 0x8d, 0x3e, 0x87, 0x42, 0xcb, 0xac, 0x37, 0xcc, + 0x6e, 0xb3, 0xd5, 0x6c, 0xdc, 0xd0, 0xcb, 0x52, 0x06, 0x7e, 0xa4, 0xc3, 0x3e, 0x67, 0x9d, 0x37, + 0xd9, 0x6f, 0xa3, 0x9e, 0x97, 0xd4, 0xec, 0x7c, 0x51, 0x4a, 0xaf, 0x1d, 0x81, 0x60, 0xce, 0x09, + 0x19, 0x42, 0xb0, 0x30, 0x79, 0xe1, 0x6a, 0xfb, 0xed, 0x55, 0x51, 0x7a, 0x77, 0x55, 0x94, 0xfe, + 0xba, 0x2a, 0x4a, 0x3f, 0x5f, 0x17, 0x23, 0xef, 0xae, 0x8b, 0x91, 0x3f, 0xaf, 0x8b, 0x91, 0x57, + 0x5f, 0x0f, 0x1c, 0x3a, 0x9c, 0xf6, 0xcb, 0x16, 0x19, 0x57, 0x2c, 0xe2, 0x8f, 0x89, 0x5f, 0x71, + 0xfa, 0xd6, 0xa3, 0x01, 0xa9, 0xcc, 0x9e, 0x56, 0xc6, 0xc4, 0x9e, 0x8e, 0xb0, 0xcf, 0x9f, 0x09, + 0x8f, 0x9f, 0x3d, 0x0a, 0xdf, 0x1d, 0xf4, 0x72, 0x82, 0xfd, 0x7e, 0x82, 0xbd, 0x13, 0x9e, 0xfe, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0x47, 0xf5, 0x82, 0xa6, 0x98, 0x08, 0x00, 0x00, } func (m *Channel) Marshal() (dAtA []byte, err error) { @@ -811,6 +858,48 @@ func (m *PacketState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *PacketId) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PacketId) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PacketId) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Sequence != 0 { + i = encodeVarintChannel(dAtA, i, uint64(m.Sequence)) + i-- + dAtA[i] = 0x18 + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintChannel(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintChannel(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Acknowledgement) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1028,6 +1117,26 @@ func (m *PacketState) Size() (n int) { return n } +func (m *PacketId) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovChannel(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovChannel(uint64(l)) + } + if m.Sequence != 0 { + n += 1 + sovChannel(uint64(m.Sequence)) + } + return n +} + func (m *Acknowledgement) Size() (n int) { if m == nil { return 0 @@ -2067,6 +2176,139 @@ func (m *PacketState) Unmarshal(dAtA []byte) error { } return nil } +func (m *PacketId) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChannel + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PacketId: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PacketId: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChannel + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthChannel + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthChannel + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChannel + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthChannel + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthChannel + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + } + m.Sequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowChannel + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Sequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipChannel(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthChannel + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Acknowledgement) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/modules/core/04-channel/types/events.go b/modules/core/04-channel/types/events.go index 4154b856c5d..e9f909a695d 100644 --- a/modules/core/04-channel/types/events.go +++ b/modules/core/04-channel/types/events.go @@ -11,6 +11,7 @@ const ( AttributeKeyConnectionID = "connection_id" AttributeKeyPortID = "port_id" AttributeKeyChannelID = "channel_id" + AttributeVersion = "version" AttributeCounterpartyPortID = "counterparty_port_id" AttributeCounterpartyChannelID = "counterparty_channel_id" diff --git a/modules/core/04-channel/types/packet.go b/modules/core/04-channel/types/packet.go index 0df4d8edd8d..dd59c8bfde9 100644 --- a/modules/core/04-channel/types/packet.go +++ b/modules/core/04-channel/types/packet.go @@ -111,3 +111,25 @@ func (p Packet) ValidateBasic() error { } return nil } + +// Validates a PacketId +func (p PacketId) Validate() error { + if err := host.PortIdentifierValidator(p.PortId); err != nil { + return sdkerrors.Wrap(err, "invalid source port ID") + } + + if err := host.ChannelIdentifierValidator(p.ChannelId); err != nil { + return sdkerrors.Wrap(err, "invalid source channel ID") + } + + if p.Sequence == 0 { + return sdkerrors.Wrap(ErrInvalidPacket, "packet sequence cannot be 0") + } + + return nil +} + +// NewPacketId returns a new instance of PacketId +func NewPacketId(portId, channelId string, seq uint64) PacketId { + return PacketId{PortId: portId, ChannelId: channelId, Sequence: seq} +} diff --git a/modules/core/04-channel/types/tx.pb.go b/modules/core/04-channel/types/tx.pb.go index 8f9ebe6ec63..fe6f344384d 100644 --- a/modules/core/04-channel/types/tx.pb.go +++ b/modules/core/04-channel/types/tx.pb.go @@ -105,6 +105,7 @@ var xxx_messageInfo_MsgChannelOpenInit proto.InternalMessageInfo // MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. type MsgChannelOpenInitResponse struct { ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` } func (m *MsgChannelOpenInitResponse) Reset() { *m = MsgChannelOpenInitResponse{} } @@ -147,6 +148,13 @@ func (m *MsgChannelOpenInitResponse) GetChannelId() string { return "" } +func (m *MsgChannelOpenInitResponse) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + // MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel // on Chain B. The version field within the Channel field has been deprecated. Its // value will be ignored by core IBC. @@ -198,6 +206,7 @@ var xxx_messageInfo_MsgChannelOpenTry proto.InternalMessageInfo // MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. type MsgChannelOpenTryResponse struct { + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` } func (m *MsgChannelOpenTryResponse) Reset() { *m = MsgChannelOpenTryResponse{} } @@ -233,6 +242,13 @@ func (m *MsgChannelOpenTryResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgChannelOpenTryResponse proto.InternalMessageInfo +func (m *MsgChannelOpenTryResponse) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + // MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge // the change of channel state to TRYOPEN on Chain B. type MsgChannelOpenAck struct { @@ -902,87 +918,88 @@ func init() { func init() { proto.RegisterFile("ibc/core/channel/v1/tx.proto", fileDescriptor_bc4637e0ac3fc7b7) } var fileDescriptor_bc4637e0ac3fc7b7 = []byte{ - // 1275 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0xd6, 0x5f, 0x64, 0x67, 0xe4, 0xda, 0x32, 0x65, 0x3b, 0x32, 0x65, 0x8b, 0x2a, 0x0f, 0xb1, - 0xe1, 0xc2, 0x52, 0x6c, 0xa7, 0x28, 0x62, 0x14, 0x28, 0x2c, 0x55, 0x41, 0x8d, 0xd6, 0x3f, 0xa0, - 0xe4, 0x02, 0x75, 0x8b, 0x0a, 0x12, 0xb5, 0x91, 0x09, 0x49, 0x5c, 0x95, 0xa4, 0x94, 0xe8, 0x0d, - 0x02, 0x9f, 0x72, 0x0e, 0x60, 0x20, 0x45, 0x4f, 0x45, 0x0f, 0xe9, 0x63, 0xe4, 0x98, 0x53, 0x5b, - 0xf4, 0x20, 0x14, 0xf6, 0xa5, 0x67, 0x3d, 0x41, 0xc1, 0xe5, 0x92, 0xa2, 0x24, 0x12, 0xa6, 0x13, - 0xdb, 0xcd, 0x6d, 0x77, 0xe6, 0xdb, 0xd9, 0xd9, 0xef, 0x1b, 0xee, 0x0f, 0x61, 0x49, 0xaa, 0x88, - 0x19, 0x11, 0x2b, 0x28, 0x23, 0x9e, 0x94, 0x65, 0x19, 0x35, 0x32, 0x9d, 0x8d, 0x8c, 0xf6, 0x2c, - 0xdd, 0x52, 0xb0, 0x86, 0x99, 0x98, 0x54, 0x11, 0xd3, 0xba, 0x37, 0x4d, 0xbd, 0xe9, 0xce, 0x06, - 0x3b, 0x57, 0xc3, 0x35, 0x4c, 0xfc, 0x19, 0xbd, 0x65, 0x40, 0x59, 0x6e, 0x10, 0xa8, 0x21, 0x21, - 0x59, 0xd3, 0xe3, 0x18, 0x2d, 0x0a, 0xf8, 0xd8, 0x69, 0x26, 0x33, 0x2c, 0x81, 0xf0, 0x3f, 0xfb, - 0x81, 0xd9, 0x53, 0x6b, 0x39, 0xc3, 0x78, 0xd0, 0x42, 0xf2, 0xae, 0x2c, 0x69, 0xcc, 0x27, 0x30, - 0xd1, 0xc2, 0x8a, 0x56, 0x92, 0xaa, 0x71, 0x7f, 0xca, 0xbf, 0x7a, 0x37, 0xcb, 0xf4, 0x7b, 0xdc, - 0x74, 0xb7, 0xdc, 0x6c, 0x6c, 0xf3, 0xd4, 0xc1, 0x0b, 0x61, 0xbd, 0xb5, 0x5b, 0x65, 0x3e, 0x87, - 0x09, 0x1a, 0x34, 0x1e, 0x48, 0xf9, 0x57, 0x23, 0x9b, 0x4b, 0x69, 0x87, 0x45, 0xa4, 0xe9, 0x1c, - 0xd9, 0xd0, 0x9b, 0x1e, 0xe7, 0x13, 0xcc, 0x21, 0xcc, 0x02, 0x84, 0x55, 0xa9, 0x26, 0x23, 0x25, - 0x1e, 0xd4, 0x67, 0x12, 0x68, 0x6f, 0x7b, 0xf2, 0xf9, 0x2b, 0xce, 0xf7, 0xef, 0x2b, 0xce, 0xc7, - 0x0b, 0xc0, 0x8e, 0xa7, 0x28, 0x20, 0xb5, 0x85, 0x65, 0x15, 0x31, 0x0f, 0x01, 0x68, 0xa8, 0x41, - 0xb6, 0xf3, 0xfd, 0x1e, 0x37, 0x6b, 0x64, 0x3b, 0xf0, 0xf1, 0xc2, 0x5d, 0xda, 0xd9, 0xad, 0xf2, - 0x7f, 0x04, 0x61, 0x76, 0x38, 0x68, 0x51, 0xe9, 0x5e, 0x6d, 0xd9, 0xfb, 0x10, 0x6b, 0x29, 0xa8, - 0x23, 0xe1, 0xb6, 0x5a, 0xb2, 0x65, 0x10, 0x20, 0x03, 0x93, 0xfd, 0x1e, 0xc7, 0xd2, 0x81, 0xe3, - 0x20, 0x5e, 0x98, 0x35, 0xad, 0x39, 0x33, 0x25, 0x3b, 0x8d, 0xc1, 0xab, 0xd3, 0x28, 0xc0, 0x9c, - 0x88, 0xdb, 0xb2, 0x86, 0x94, 0x56, 0x59, 0xd1, 0xba, 0xa5, 0x0e, 0x52, 0x54, 0x09, 0xcb, 0xf1, - 0x10, 0x49, 0x87, 0xeb, 0xf7, 0xb8, 0x04, 0x25, 0xc4, 0x01, 0xc5, 0x0b, 0x31, 0xbb, 0xf9, 0x5b, - 0xc3, 0xaa, 0x53, 0xdb, 0x52, 0x30, 0x7e, 0x52, 0x92, 0x64, 0x49, 0x8b, 0xdf, 0x49, 0xf9, 0x57, - 0xa7, 0xec, 0xd4, 0x0e, 0x7c, 0xbc, 0x70, 0x97, 0x74, 0x48, 0xed, 0x1c, 0xc3, 0x94, 0xe1, 0x39, - 0x41, 0x52, 0xed, 0x44, 0x8b, 0x87, 0xc9, 0x62, 0x58, 0xdb, 0x62, 0x8c, 0x1a, 0xed, 0x6c, 0xa4, - 0xbf, 0x22, 0x88, 0x6c, 0x42, 0x5f, 0x4a, 0xbf, 0xc7, 0xc5, 0xec, 0x71, 0x8d, 0xd1, 0xbc, 0x10, - 0x21, 0x5d, 0x03, 0x69, 0x2b, 0x96, 0x09, 0x97, 0x62, 0x49, 0xc0, 0xe2, 0x98, 0xae, 0x66, 0xad, - 0xf0, 0x7f, 0x8e, 0xa9, 0xbe, 0x23, 0xd6, 0xaf, 0xa6, 0xfa, 0x70, 0xb9, 0x05, 0xbc, 0x95, 0x1b, - 0x73, 0x0c, 0xf7, 0x86, 0x78, 0xb7, 0x85, 0x20, 0x55, 0x9f, 0xe5, 0xfb, 0x3d, 0x2e, 0xe9, 0x20, - 0x90, 0x3d, 0xde, 0xbc, 0xdd, 0x33, 0xa8, 0x9b, 0x9b, 0x50, 0x7e, 0x03, 0x0c, 0x41, 0x4b, 0x9a, - 0xd2, 0xa5, 0xc2, 0xcf, 0xf5, 0x7b, 0x5c, 0xd4, 0x2e, 0x90, 0xa6, 0x74, 0x79, 0x61, 0x92, 0xb4, - 0xf5, 0x6f, 0xe7, 0x03, 0x93, 0x7d, 0x47, 0xac, 0x5b, 0xb2, 0xff, 0x16, 0x80, 0xf9, 0x61, 0x6f, - 0x0e, 0xcb, 0x4f, 0x24, 0xa5, 0x79, 0x1b, 0xd2, 0x5b, 0x54, 0x96, 0xc5, 0x3a, 0x11, 0xdb, 0x81, - 0xca, 0xb2, 0x58, 0x37, 0xa9, 0xd4, 0x0b, 0x72, 0x94, 0xca, 0xd0, 0x8d, 0x50, 0x79, 0xc7, 0x85, - 0x4a, 0x0e, 0x96, 0x1d, 0xc9, 0xb2, 0xe8, 0x7c, 0xe9, 0x87, 0xd8, 0x00, 0x91, 0x6b, 0x60, 0x15, - 0x5d, 0xfd, 0xd0, 0x78, 0x37, 0x32, 0x2f, 0x3f, 0x2c, 0x96, 0x21, 0xe1, 0x90, 0x9b, 0x95, 0xfb, - 0xeb, 0x00, 0x2c, 0x8c, 0xf8, 0x6f, 0xb1, 0x16, 0x86, 0x37, 0xd4, 0xe0, 0x3b, 0x6e, 0xa8, 0xb7, - 0x5b, 0x0e, 0x29, 0x48, 0x3a, 0x13, 0x66, 0x71, 0xfa, 0x22, 0x00, 0x1f, 0xed, 0xa9, 0x35, 0x01, - 0x89, 0x9d, 0xc3, 0xb2, 0x58, 0x47, 0x1a, 0xf3, 0x08, 0xc2, 0x2d, 0xd2, 0x22, 0x4c, 0x46, 0x36, - 0x13, 0x8e, 0x27, 0x99, 0x01, 0xa6, 0x07, 0x19, 0x1d, 0xc0, 0x3c, 0x86, 0xa8, 0x91, 0xae, 0x88, - 0x9b, 0x4d, 0x49, 0x6b, 0x22, 0x59, 0x23, 0xf4, 0x4e, 0x65, 0x13, 0xfd, 0x1e, 0x77, 0xcf, 0xbe, - 0xa0, 0x01, 0x82, 0x17, 0x66, 0x88, 0x29, 0x67, 0x59, 0xc6, 0x48, 0x0b, 0xde, 0x08, 0x69, 0x21, - 0x17, 0xd2, 0x7e, 0x24, 0x1b, 0xce, 0x80, 0x11, 0xeb, 0xb6, 0xf2, 0x05, 0x84, 0x15, 0xa4, 0xb6, - 0x1b, 0x06, 0x33, 0xd3, 0x9b, 0x2b, 0x8e, 0xcc, 0x98, 0x70, 0x81, 0x40, 0x8b, 0xdd, 0x16, 0x12, - 0xe8, 0xb0, 0xed, 0x90, 0x3e, 0x07, 0xff, 0x77, 0x00, 0x60, 0x4f, 0xad, 0x15, 0xa5, 0x26, 0xc2, - 0xed, 0xeb, 0xe1, 0xbb, 0x2d, 0x2b, 0x48, 0x44, 0x52, 0x07, 0x55, 0xdd, 0xf8, 0x1e, 0x20, 0x4c, - 0xbe, 0x8f, 0x2c, 0xcb, 0x8d, 0xf2, 0xfd, 0x35, 0x30, 0x32, 0x7a, 0xa6, 0x95, 0x54, 0xf4, 0x53, - 0x1b, 0xc9, 0x22, 0x2a, 0x29, 0x48, 0xec, 0x10, 0xee, 0x43, 0xd9, 0xe5, 0x7e, 0x8f, 0x5b, 0x34, - 0x22, 0x8c, 0x63, 0x78, 0x21, 0xaa, 0x1b, 0x0b, 0xd4, 0xa6, 0xeb, 0xe1, 0xa1, 0xe2, 0xbf, 0x27, - 0x57, 0x62, 0xca, 0xed, 0x75, 0x2b, 0xf7, 0xd2, 0xb8, 0x82, 0xd0, 0xe8, 0x07, 0x32, 0xf9, 0xa2, - 0x3e, 0x04, 0x01, 0x3f, 0x83, 0x08, 0xfd, 0xac, 0xf4, 0x8c, 0xe8, 0xe6, 0xb4, 0xd0, 0xef, 0x71, - 0xcc, 0xd0, 0x37, 0xa7, 0x3b, 0x79, 0xc1, 0xd8, 0xc6, 0x8c, 0xdc, 0x6f, 0x72, 0x7b, 0x72, 0x56, - 0xfe, 0xce, 0xfb, 0x2a, 0x1f, 0x76, 0x51, 0xbe, 0x42, 0x6e, 0x11, 0xc3, 0xda, 0x5c, 0x77, 0x01, - 0xfc, 0x1e, 0x20, 0xe5, 0xb5, 0x23, 0xd6, 0x65, 0xfc, 0xb4, 0x81, 0xaa, 0x35, 0x44, 0xf6, 0xab, - 0xf7, 0xa8, 0x80, 0x55, 0x98, 0x29, 0x0f, 0x47, 0x33, 0x0a, 0x40, 0x18, 0x35, 0x0f, 0x34, 0xd6, - 0x07, 0x56, 0xdd, 0x34, 0x26, 0x4e, 0x53, 0xe3, 0x1d, 0xbd, 0xf3, 0x3f, 0x1f, 0x41, 0x22, 0x79, - 0x00, 0x8e, 0x30, 0x76, 0xcd, 0xba, 0xac, 0xfd, 0xea, 0x07, 0x66, 0x1c, 0xc4, 0x7c, 0x0a, 0x29, - 0x21, 0x5f, 0x38, 0x3c, 0xd8, 0x2f, 0xe4, 0x4b, 0x42, 0xbe, 0x70, 0xf4, 0x4d, 0xb1, 0x54, 0xfc, - 0xee, 0x30, 0x5f, 0x3a, 0xda, 0x2f, 0x1c, 0xe6, 0x73, 0xbb, 0x8f, 0x77, 0xf3, 0x5f, 0x46, 0x7d, - 0xec, 0xcc, 0xe9, 0x59, 0x2a, 0x62, 0x33, 0x31, 0x2b, 0xb0, 0xe8, 0x38, 0x6c, 0xff, 0xe0, 0xe0, - 0x30, 0xea, 0x67, 0x27, 0x4f, 0xcf, 0x52, 0x21, 0xbd, 0xcd, 0xac, 0xc3, 0x92, 0x23, 0xb0, 0x70, - 0x94, 0xcb, 0xe5, 0x0b, 0x85, 0x68, 0x80, 0x8d, 0x9c, 0x9e, 0xa5, 0x26, 0x68, 0x97, 0x0d, 0x3d, - 0xff, 0x25, 0xe9, 0xdb, 0x7c, 0x3d, 0x09, 0xc1, 0x3d, 0xb5, 0xc6, 0xd4, 0x61, 0x66, 0xf4, 0xe5, - 0xee, 0xbc, 0xfa, 0xf1, 0xf7, 0x33, 0x9b, 0xf1, 0x08, 0xb4, 0x78, 0x3e, 0x81, 0xe9, 0x91, 0xe7, - 0xf2, 0x7d, 0x0f, 0x21, 0x8a, 0x4a, 0x97, 0x4d, 0x7b, 0xc3, 0xb9, 0xcc, 0xa4, 0xdf, 0x88, 0xbd, - 0xcc, 0xb4, 0x23, 0xd6, 0x3d, 0xcd, 0x64, 0x7b, 0x19, 0x30, 0x1a, 0x30, 0x0e, 0xaf, 0x82, 0x35, - 0x0f, 0x51, 0x28, 0x96, 0xdd, 0xf4, 0x8e, 0xb5, 0x66, 0x95, 0x21, 0x3a, 0x76, 0x79, 0x5e, 0xbd, - 0x24, 0x8e, 0x85, 0x64, 0x1f, 0x78, 0x45, 0x5a, 0xf3, 0x3d, 0x85, 0x98, 0xe3, 0x85, 0xd7, 0x4b, - 0x20, 0x73, 0x9d, 0x5b, 0x57, 0x00, 0x5b, 0x13, 0xff, 0x00, 0x60, 0xbb, 0x15, 0xf2, 0x6e, 0x21, - 0x06, 0x18, 0x76, 0xed, 0x72, 0x8c, 0x15, 0xbd, 0x00, 0x13, 0xe6, 0x05, 0x88, 0x73, 0x1b, 0x46, - 0x01, 0xec, 0xca, 0x25, 0x00, 0x7b, 0xed, 0x8d, 0x9c, 0xcd, 0xf7, 0x2f, 0x19, 0x4a, 0x71, 0xee, - 0xb5, 0xe7, 0x72, 0x9e, 0xd4, 0x61, 0x66, 0xf4, 0x10, 0x70, 0xcd, 0x72, 0x04, 0xe8, 0xfe, 0xf1, - 0xba, 0x6c, 0x92, 0xd9, 0xc2, 0x9b, 0xf3, 0xa4, 0xff, 0xed, 0x79, 0xd2, 0xff, 0xcf, 0x79, 0xd2, - 0xff, 0xe2, 0x22, 0xe9, 0x7b, 0x7b, 0x91, 0xf4, 0xfd, 0x75, 0x91, 0xf4, 0x1d, 0x3f, 0xaa, 0x49, - 0xda, 0x49, 0xbb, 0x92, 0x16, 0x71, 0x33, 0x23, 0x62, 0xb5, 0x89, 0xd5, 0x8c, 0x54, 0x11, 0xd7, - 0x6b, 0x38, 0xd3, 0xd9, 0xca, 0x34, 0x71, 0xb5, 0xdd, 0x40, 0xaa, 0xf1, 0x13, 0xf1, 0xc1, 0xc3, - 0x75, 0xf3, 0x3f, 0xa2, 0xd6, 0x6d, 0x21, 0xb5, 0x12, 0x26, 0xff, 0x10, 0xb7, 0xfe, 0x0b, 0x00, - 0x00, 0xff, 0xff, 0xec, 0xba, 0x10, 0x62, 0xd2, 0x14, 0x00, 0x00, + // 1294 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0xe2, 0x56, + 0x17, 0xc6, 0x40, 0x20, 0x39, 0xe4, 0x4d, 0x88, 0x49, 0x32, 0xc4, 0x24, 0x98, 0xd7, 0x8b, 0x49, + 0x94, 0x2a, 0x30, 0x49, 0x66, 0x54, 0x4d, 0x54, 0xa9, 0x0a, 0x94, 0x51, 0xa3, 0x36, 0x1f, 0x32, + 0xa4, 0x52, 0xd3, 0xaa, 0x08, 0xcc, 0x1d, 0x62, 0x01, 0x36, 0xb5, 0x0d, 0x33, 0xfc, 0x83, 0x51, + 0x56, 0xb3, 0x1e, 0x29, 0xd2, 0x54, 0x5d, 0x55, 0x5d, 0x4c, 0x7f, 0xc6, 0x2c, 0x67, 0xd5, 0x56, + 0x5d, 0xa0, 0x2a, 0xd9, 0x74, 0xcd, 0x2f, 0xa8, 0x7c, 0x7d, 0x6d, 0x0c, 0xd8, 0x8a, 0x33, 0x93, + 0x64, 0xba, 0xf3, 0xbd, 0xe7, 0xb9, 0xe7, 0x9c, 0xfb, 0x9c, 0xe7, 0x7e, 0x19, 0x96, 0xc5, 0x8a, + 0x90, 0x11, 0x64, 0x05, 0x65, 0x84, 0xd3, 0xb2, 0x24, 0xa1, 0x46, 0xa6, 0xb3, 0x99, 0xd1, 0x9e, + 0xa7, 0x5b, 0x8a, 0xac, 0xc9, 0x74, 0x4c, 0xac, 0x08, 0x69, 0xdd, 0x9a, 0x26, 0xd6, 0x74, 0x67, + 0x93, 0x99, 0xaf, 0xc9, 0x35, 0x19, 0xdb, 0x33, 0xfa, 0x97, 0x01, 0x65, 0xd8, 0x81, 0xa3, 0x86, + 0x88, 0x24, 0x4d, 0xf7, 0x63, 0x7c, 0x11, 0xc0, 0xff, 0x9d, 0x22, 0x99, 0x6e, 0x31, 0x84, 0xfb, + 0x89, 0x02, 0x7a, 0x5f, 0xad, 0xe5, 0x8c, 0xce, 0xc3, 0x16, 0x92, 0xf6, 0x24, 0x51, 0xa3, 0x3f, + 0x81, 0x70, 0x4b, 0x56, 0xb4, 0x92, 0x58, 0x8d, 0x53, 0x29, 0x6a, 0x6d, 0x2a, 0x4b, 0xf7, 0x7b, + 0xec, 0x4c, 0xb7, 0xdc, 0x6c, 0xec, 0x70, 0xc4, 0xc0, 0xf1, 0x21, 0xfd, 0x6b, 0xaf, 0x4a, 0x7f, + 0x06, 0x61, 0xe2, 0x34, 0xee, 0x4f, 0x51, 0x6b, 0x91, 0xad, 0xe5, 0xb4, 0xc3, 0x24, 0xd2, 0x24, + 0x46, 0x36, 0xf8, 0xb6, 0xc7, 0xfa, 0x78, 0x73, 0x08, 0xbd, 0x08, 0x21, 0x55, 0xac, 0x49, 0x48, + 0x89, 0x07, 0xf4, 0x48, 0x3c, 0x69, 0xed, 0x4c, 0xbe, 0x78, 0xcd, 0xfa, 0xfe, 0x79, 0xcd, 0xfa, + 0xb8, 0x06, 0x30, 0xe3, 0x29, 0xf2, 0x48, 0x6d, 0xc9, 0x92, 0x8a, 0xe8, 0x87, 0x00, 0xc4, 0xd5, + 0x20, 0xdb, 0x85, 0x7e, 0x8f, 0x9d, 0x33, 0xb2, 0x1d, 0xd8, 0x38, 0x7e, 0x8a, 0x34, 0xf6, 0xaa, + 0x74, 0x1c, 0xc2, 0x1d, 0xa4, 0xa8, 0xa2, 0x2c, 0xe1, 0x9c, 0xa7, 0x78, 0xb3, 0xc9, 0xfd, 0x1e, + 0x80, 0xb9, 0xe1, 0x70, 0x45, 0xa5, 0x7b, 0x3d, 0x42, 0x0e, 0x20, 0xd6, 0x52, 0x50, 0x47, 0x94, + 0xdb, 0x6a, 0xc9, 0x96, 0x1b, 0x0e, 0x94, 0x4d, 0xf6, 0x7b, 0x2c, 0x43, 0x06, 0x8e, 0x83, 0x38, + 0x7e, 0xce, 0xec, 0xcd, 0x59, 0xc9, 0xda, 0x08, 0x0e, 0x5c, 0x9f, 0x60, 0x1e, 0xe6, 0x05, 0xb9, + 0x2d, 0x69, 0x48, 0x69, 0x95, 0x15, 0xad, 0x5b, 0x32, 0xe7, 0x1d, 0xc4, 0xe9, 0xb0, 0xfd, 0x1e, + 0x9b, 0x20, 0x54, 0x39, 0xa0, 0x38, 0x3e, 0x66, 0xef, 0xfe, 0xc6, 0xe8, 0xd5, 0x49, 0x6f, 0x29, + 0xb2, 0xfc, 0xb4, 0x24, 0x4a, 0xa2, 0x16, 0x9f, 0x48, 0x51, 0x6b, 0xd3, 0x76, 0xd2, 0x07, 0x36, + 0x8e, 0x9f, 0xc2, 0x0d, 0xac, 0xaa, 0x13, 0x98, 0x36, 0x2c, 0xa7, 0x48, 0xac, 0x9d, 0x6a, 0xf1, + 0x10, 0x9e, 0x0c, 0x63, 0x9b, 0x8c, 0xa1, 0xde, 0xce, 0x66, 0xfa, 0x4b, 0x8c, 0xc8, 0x26, 0xf4, + 0xa9, 0xf4, 0x7b, 0x6c, 0xcc, 0xee, 0xd7, 0x18, 0xcd, 0xf1, 0x11, 0xdc, 0x34, 0x90, 0x36, 0x19, + 0x85, 0x5d, 0x64, 0xf4, 0x08, 0x96, 0xc6, 0xea, 0x6a, 0xa9, 0xc8, 0xa6, 0x07, 0x6a, 0x58, 0x0f, + 0x7f, 0x8c, 0xe9, 0x61, 0x57, 0xa8, 0x5f, 0x4f, 0x0f, 0xc3, 0x12, 0xf5, 0x7b, 0x94, 0xe8, 0x09, + 0xdc, 0x1b, 0xaa, 0x88, 0xcd, 0x05, 0x5e, 0x29, 0x59, 0xae, 0xdf, 0x63, 0x93, 0x0e, 0xa5, 0xb3, + 0xfb, 0x5b, 0xb0, 0x5b, 0x06, 0x8a, 0xba, 0x0d, 0x4d, 0x6c, 0x82, 0x51, 0xea, 0x92, 0xa6, 0x74, + 0x89, 0x24, 0xe6, 0xfb, 0x3d, 0x36, 0x6a, 0x2f, 0x9d, 0xa6, 0x74, 0x39, 0x7e, 0x12, 0x7f, 0xeb, + 0xab, 0xea, 0xe3, 0x0a, 0x22, 0x31, 0x2a, 0x88, 0x5d, 0xa1, 0x6e, 0x0a, 0x82, 0xfb, 0xd5, 0x0f, + 0x0b, 0xc3, 0xd6, 0x9c, 0x2c, 0x3d, 0x15, 0x95, 0xe6, 0x5d, 0x94, 0xde, 0xa2, 0xb2, 0x2c, 0xd4, + 0x71, 0xb1, 0x1d, 0xa8, 0x2c, 0x0b, 0x75, 0x93, 0x4a, 0x5d, 0x90, 0xa3, 0x54, 0x06, 0x6f, 0x85, + 0xca, 0x09, 0x17, 0x2a, 0x59, 0x58, 0x71, 0x24, 0xcb, 0xa2, 0xf3, 0x15, 0x05, 0xb1, 0x01, 0x22, + 0xd7, 0x90, 0x55, 0x74, 0xfd, 0x83, 0xe6, 0xfd, 0xc8, 0xbc, 0xfa, 0x80, 0x59, 0x81, 0x84, 0x43, + 0x6e, 0x56, 0xee, 0x6f, 0xfc, 0xb0, 0x38, 0x62, 0xbf, 0x43, 0x2d, 0x0c, 0x6f, 0xb5, 0x81, 0xf7, + 0xdc, 0x6a, 0xef, 0x56, 0x0e, 0x29, 0x48, 0x3a, 0x13, 0x66, 0x71, 0xfa, 0xd2, 0x0f, 0xff, 0xdb, + 0x57, 0x6b, 0x3c, 0x12, 0x3a, 0x47, 0x65, 0xa1, 0x8e, 0x34, 0xfa, 0x31, 0x84, 0x5a, 0xf8, 0x0b, + 0x33, 0x19, 0xd9, 0x4a, 0x38, 0x9e, 0x71, 0x06, 0x98, 0x1c, 0x71, 0x64, 0x00, 0xfd, 0x04, 0xa2, + 0x46, 0xba, 0x82, 0xdc, 0x6c, 0x8a, 0x5a, 0x13, 0x49, 0x1a, 0xa6, 0x77, 0x3a, 0x9b, 0xe8, 0xf7, + 0xd8, 0x7b, 0xf6, 0x09, 0x0d, 0x10, 0x1c, 0x3f, 0x8b, 0xbb, 0x72, 0x56, 0xcf, 0x18, 0x69, 0x81, + 0x5b, 0x21, 0x2d, 0xe8, 0x42, 0xda, 0x0f, 0x78, 0xc3, 0x19, 0x30, 0x62, 0x9d, 0x4d, 0x9f, 0x43, + 0x48, 0x41, 0x6a, 0xbb, 0x61, 0x30, 0x33, 0xb3, 0xb5, 0xea, 0xc8, 0x8c, 0x09, 0xe7, 0x31, 0xb4, + 0xd8, 0x6d, 0x21, 0x9e, 0x0c, 0xdb, 0x09, 0xea, 0x31, 0xb8, 0xbf, 0xfc, 0x00, 0xfb, 0x6a, 0xad, + 0x28, 0x36, 0x91, 0xdc, 0xbe, 0x19, 0xbe, 0xdb, 0x92, 0x82, 0x04, 0x24, 0x76, 0x50, 0xd5, 0x8d, + 0xef, 0x01, 0xc2, 0xe4, 0xfb, 0xd8, 0xea, 0xb9, 0x55, 0xbe, 0xbf, 0x02, 0x5a, 0x42, 0xcf, 0xb5, + 0x92, 0x8a, 0x7e, 0x6c, 0x23, 0x49, 0x40, 0x25, 0x05, 0x09, 0x1d, 0xcc, 0x7d, 0x30, 0xbb, 0xd2, + 0xef, 0xb1, 0x4b, 0x86, 0x87, 0x71, 0x0c, 0xc7, 0x47, 0xf5, 0xce, 0x02, 0xe9, 0xd3, 0xeb, 0xe1, + 0x41, 0xf1, 0xdf, 0xe1, 0x6b, 0x34, 0xe1, 0xf6, 0xa6, 0x2b, 0xf7, 0xca, 0xb8, 0x82, 0x10, 0xef, + 0x87, 0x12, 0x5e, 0x51, 0xff, 0x85, 0x02, 0x7e, 0x0a, 0x11, 0xb2, 0xac, 0xf4, 0x8c, 0xc8, 0xe6, + 0xb4, 0xd8, 0xef, 0xb1, 0xf4, 0xd0, 0x9a, 0xd3, 0x8d, 0x1c, 0x6f, 0x6c, 0x63, 0x46, 0xee, 0xb7, + 0xb9, 0x3d, 0x39, 0x57, 0x7e, 0xe2, 0x43, 0x2b, 0x1f, 0x72, 0xa9, 0x7c, 0x05, 0xdf, 0x22, 0x86, + 0x6b, 0x73, 0xd3, 0x02, 0xf8, 0xcd, 0x8f, 0xe5, 0xb5, 0x2b, 0xd4, 0x25, 0xf9, 0x59, 0x03, 0x55, + 0x6b, 0x08, 0xef, 0x57, 0x1f, 0xa0, 0x80, 0x35, 0x98, 0x2d, 0x0f, 0x7b, 0x33, 0x04, 0xc0, 0x8f, + 0x76, 0x0f, 0x6a, 0xac, 0x0f, 0xac, 0xba, 0xd5, 0x18, 0x1b, 0xcd, 0x1a, 0xef, 0xea, 0x8d, 0x8f, + 0x7c, 0x04, 0x09, 0xf8, 0xd1, 0x38, 0xc2, 0xd8, 0x0d, 0xd7, 0x65, 0xfd, 0x17, 0x0a, 0xe8, 0x71, + 0x10, 0xfd, 0x08, 0x52, 0x7c, 0xbe, 0x70, 0x74, 0x78, 0x50, 0xc8, 0x97, 0xf8, 0x7c, 0xe1, 0xf8, + 0xeb, 0x62, 0xa9, 0xf8, 0xed, 0x51, 0xbe, 0x74, 0x7c, 0x50, 0x38, 0xca, 0xe7, 0xf6, 0x9e, 0xec, + 0xe5, 0xbf, 0x88, 0xfa, 0x98, 0xd9, 0xb3, 0xf3, 0x54, 0xc4, 0xd6, 0x45, 0xaf, 0xc2, 0x92, 0xe3, + 0xb0, 0x83, 0xc3, 0xc3, 0xa3, 0x28, 0xc5, 0x4c, 0x9e, 0x9d, 0xa7, 0x82, 0xfa, 0x37, 0xbd, 0x01, + 0xcb, 0x8e, 0xc0, 0xc2, 0x71, 0x2e, 0x97, 0x2f, 0x14, 0xa2, 0x7e, 0x26, 0x72, 0x76, 0x9e, 0x0a, + 0x93, 0x26, 0x13, 0x7c, 0xf1, 0x73, 0xd2, 0xb7, 0xf5, 0x66, 0x12, 0x02, 0xfb, 0x6a, 0x8d, 0xae, + 0xc3, 0xec, 0xe8, 0x6b, 0xdf, 0x79, 0xf6, 0xe3, 0x6f, 0x6e, 0x26, 0xe3, 0x11, 0x68, 0xf1, 0x7c, + 0x0a, 0x33, 0x23, 0x0f, 0xe9, 0xfb, 0x1e, 0x5c, 0x14, 0x95, 0x2e, 0x93, 0xf6, 0x86, 0x73, 0x89, + 0xa4, 0xdf, 0x88, 0xbd, 0x44, 0xda, 0x15, 0xea, 0x9e, 0x22, 0xd9, 0x5e, 0x06, 0xb4, 0x06, 0xb4, + 0xc3, 0xab, 0x60, 0xdd, 0x83, 0x17, 0x82, 0x65, 0xb6, 0xbc, 0x63, 0xad, 0xa8, 0x12, 0x44, 0xc7, + 0x2e, 0xcf, 0x6b, 0x57, 0xf8, 0xb1, 0x90, 0xcc, 0x03, 0xaf, 0x48, 0x2b, 0xde, 0x33, 0x88, 0x39, + 0x5e, 0x78, 0xbd, 0x38, 0x32, 0xe7, 0xb9, 0x7d, 0x0d, 0xb0, 0x15, 0xf8, 0x7b, 0x00, 0xdb, 0xad, + 0x90, 0x73, 0x73, 0x31, 0xc0, 0x30, 0xeb, 0x57, 0x63, 0x2c, 0xef, 0x05, 0x08, 0x9b, 0x17, 0x20, + 0xd6, 0x6d, 0x18, 0x01, 0x30, 0xab, 0x57, 0x00, 0xec, 0xda, 0x1b, 0x39, 0x9b, 0xef, 0x5f, 0x31, + 0x94, 0xe0, 0xdc, 0xb5, 0xe7, 0x72, 0x9e, 0xd4, 0x61, 0x76, 0xf4, 0x10, 0x70, 0xcd, 0x72, 0x04, + 0xe8, 0xbe, 0x78, 0x5d, 0x36, 0xc9, 0x6c, 0xe1, 0xed, 0x45, 0x92, 0x7a, 0x77, 0x91, 0xa4, 0xfe, + 0xbe, 0x48, 0x52, 0x2f, 0x2f, 0x93, 0xbe, 0x77, 0x97, 0x49, 0xdf, 0x9f, 0x97, 0x49, 0xdf, 0xc9, + 0xe3, 0x9a, 0xa8, 0x9d, 0xb6, 0x2b, 0x69, 0x41, 0x6e, 0x66, 0x04, 0x59, 0x6d, 0xca, 0x6a, 0x46, + 0xac, 0x08, 0x1b, 0x35, 0x39, 0xd3, 0xd9, 0xce, 0x34, 0xe5, 0x6a, 0xbb, 0x81, 0x54, 0xe3, 0xc7, + 0xe3, 0x83, 0x87, 0x1b, 0xe6, 0xbf, 0x47, 0xad, 0xdb, 0x42, 0x6a, 0x25, 0x84, 0xff, 0x3b, 0x6e, + 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x51, 0x2e, 0xf7, 0xe5, 0x06, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1478,6 +1495,13 @@ func (m *MsgChannelOpenInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, err _ = i var l int _ = l + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x12 + } if len(m.ChannelId) > 0 { i -= len(m.ChannelId) copy(dAtA[i:], m.ChannelId) @@ -1586,6 +1610,13 @@ func (m *MsgChannelOpenTryResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0xa + } return len(dAtA) - i, nil } @@ -2326,6 +2357,10 @@ func (m *MsgChannelOpenInitResponse) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -2368,6 +2403,10 @@ func (m *MsgChannelOpenTryResponse) Size() (n int) { } var l int _ = l + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -2877,6 +2916,38 @@ func (m *MsgChannelOpenInitResponse) Unmarshal(dAtA []byte) error { } m.ChannelId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3205,6 +3276,38 @@ func (m *MsgChannelOpenTryResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgChannelOpenTryResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/modules/core/04-channel/types/version.go b/modules/core/04-channel/types/version.go index 15477635e7f..a2696d291ed 100644 --- a/modules/core/04-channel/types/version.go +++ b/modules/core/04-channel/types/version.go @@ -4,7 +4,7 @@ import "strings" const ChannelVersionDelimiter = ":" -// SplitChannelVersion splits the channel version string +// SplitChannelVersion middleware version will split the channel version string // into the outermost middleware version and the underlying app version. // It will use the default delimiter `:` for middleware versions. // In case there's no delimeter, this function returns an empty string for the middleware version (first return argument), diff --git a/modules/core/05-port/types/module.go b/modules/core/05-port/types/module.go index 9f754fe0a3e..e6ba8f3449b 100644 --- a/modules/core/05-port/types/module.go +++ b/modules/core/05-port/types/module.go @@ -113,6 +113,12 @@ type ICS4Wrapper interface { packet exported.PacketI, ack exported.Acknowledgement, ) error + + GetAppVersion( + ctx sdk.Context, + portID, + channelID string, + ) (string, bool) } // Middleware must implement IBCModule to wrap communication from core IBC to underlying application diff --git a/modules/core/keeper/msg_server.go b/modules/core/keeper/msg_server.go index 4893f82dd66..c7a8e87dffe 100644 --- a/modules/core/keeper/msg_server.go +++ b/modules/core/keeper/msg_server.go @@ -196,6 +196,7 @@ func (k Keeper) ChannelOpenInit(goCtx context.Context, msg *channeltypes.MsgChan return &channeltypes.MsgChannelOpenInitResponse{ ChannelId: channelID, + Version: msg.Channel.Version, }, nil } @@ -234,7 +235,9 @@ func (k Keeper) ChannelOpenTry(goCtx context.Context, msg *channeltypes.MsgChann // Write channel into state k.ChannelKeeper.WriteOpenTryChannel(ctx, msg.PortId, channelID, msg.Channel.Ordering, msg.Channel.ConnectionHops, msg.Channel.Counterparty, version) - return &channeltypes.MsgChannelOpenTryResponse{}, nil + return &channeltypes.MsgChannelOpenTryResponse{ + Version: version, + }, nil } // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. diff --git a/proto/ibc/applications/fee/v1/ack.proto b/proto/ibc/applications/fee/v1/ack.proto new file mode 100644 index 00000000000..728c7536c6b --- /dev/null +++ b/proto/ibc/applications/fee/v1/ack.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package ibc.applications.fee.v1; + +option go_package = "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"; + +import "gogoproto/gogo.proto"; + +// IncentivizedAcknowledgement is the acknowledgement format to be used by applications wrapped in the fee middleware +message IncentivizedAcknowledgement { + // the underlying app acknowledgement result bytes + bytes result = 1; + // the relayer address which submits the recv packet message + string forward_relayer_address = 2 [(gogoproto.moretags) = "yaml:\"forward_relayer_address\""]; + // success flag of the base application callback + bool underlying_app_success = 3 [(gogoproto.moretags) = "yaml:\"underlying_app_successl\""]; +} diff --git a/proto/ibc/applications/fee/v1/fee.proto b/proto/ibc/applications/fee/v1/fee.proto new file mode 100644 index 00000000000..e7a1fa438df --- /dev/null +++ b/proto/ibc/applications/fee/v1/fee.proto @@ -0,0 +1,56 @@ +syntax = "proto3"; + +package ibc.applications.fee.v1; + +option go_package = "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +import "ibc/core/channel/v1/channel.proto"; + +// Fee defines the ICS29 receive, acknowledgement and timeout fees +message Fee { + // the packet receive fee + repeated cosmos.base.v1beta1.Coin recv_fee = 1 [ + (gogoproto.moretags) = "yaml:\"recv_fee\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + // the packet acknowledgement fee + repeated cosmos.base.v1beta1.Coin ack_fee = 2 [ + (gogoproto.moretags) = "yaml:\"ack_fee\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + // the packet timeout fee + repeated cosmos.base.v1beta1.Coin timeout_fee = 3 [ + (gogoproto.moretags) = "yaml:\"timeout_fee\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// PacketFee contains ICS29 relayer fees, refund address and optional list of permitted relayers +message PacketFee { + // fee encapsulates the recv, ack and timeout fees associated with an IBC packet + Fee fee = 1 [(gogoproto.nullable) = false]; + // the refund address for unspent fees + string refund_address = 2 [(gogoproto.moretags) = "yaml:\"refund_address\""]; + // optional list of relayers permitted to receive fees + repeated string relayers = 3; +} + +// PacketFees contains a list of type PacketFee +message PacketFees { + // list of packet fees + repeated PacketFee packet_fees = 1 [(gogoproto.moretags) = "yaml:\"packet_fees\"", (gogoproto.nullable) = false]; +} + +// IdentifiedPacketFees contains a list of type PacketFee and associated PacketId +message IdentifiedPacketFees { + // unique packet identifier comprised of the channel ID, port ID and sequence + ibc.core.channel.v1.PacketId packet_id = 1 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"packet_id\""]; + // list of packet fees + repeated PacketFee packet_fees = 2 [(gogoproto.moretags) = "yaml:\"packet_fees\"", (gogoproto.nullable) = false]; +} diff --git a/proto/ibc/applications/fee/v1/genesis.proto b/proto/ibc/applications/fee/v1/genesis.proto new file mode 100644 index 00000000000..cae132239d6 --- /dev/null +++ b/proto/ibc/applications/fee/v1/genesis.proto @@ -0,0 +1,52 @@ +syntax = "proto3"; + +package ibc.applications.fee.v1; + +option go_package = "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"; + +import "gogoproto/gogo.proto"; +import "ibc/applications/fee/v1/fee.proto"; +import "ibc/core/channel/v1/channel.proto"; + +// GenesisState defines the ICS29 fee middleware genesis state +message GenesisState { + // list of identified packet fees + repeated IdentifiedPacketFees identified_fees = 1 + [(gogoproto.moretags) = "yaml:\"identified_fees\"", (gogoproto.nullable) = false]; + // list of fee enabled channels + repeated FeeEnabledChannel fee_enabled_channels = 2 + [(gogoproto.moretags) = "yaml:\"fee_enabled_channels\"", (gogoproto.nullable) = false]; + // list of registered relayer addresses + repeated RegisteredRelayerAddress registered_relayers = 3 + [(gogoproto.moretags) = "yaml:\"registered_relayers\"", (gogoproto.nullable) = false]; + // list of forward relayer addresses + repeated ForwardRelayerAddress forward_relayers = 4 + [(gogoproto.moretags) = "yaml:\"forward_relayers\"", (gogoproto.nullable) = false]; +} + +// FeeEnabledChannel contains the PortID & ChannelID for a fee enabled channel +message FeeEnabledChannel { + // unique port identifier + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + // unique channel identifier + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; +} + +// RegisteredRelayerAddress contains the address and counterparty address for a specific relayer (for distributing fees) +message RegisteredRelayerAddress { + // the relayer address + string address = 1; + // the counterparty relayer address + string counterparty_address = 2 [(gogoproto.moretags) = "yaml:\"counterparty_address\""]; + // unique channel identifier + string channel_id = 3 [(gogoproto.moretags) = "yaml:\"channel_id\""]; +} + +// ForwardRelayerAddress contains the forward relayer address and PacketId used for async acknowledgements +message ForwardRelayerAddress { + // the forward relayer address + string address = 1; + // unique packet identifer comprised of the channel ID, port ID and sequence + ibc.core.channel.v1.PacketId packet_id = 2 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"packet_id\""]; +} diff --git a/proto/ibc/applications/fee/v1/metadata.proto b/proto/ibc/applications/fee/v1/metadata.proto new file mode 100644 index 00000000000..0afb3e09b2e --- /dev/null +++ b/proto/ibc/applications/fee/v1/metadata.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +package ibc.applications.fee.v1; + +option go_package = "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"; + +import "gogoproto/gogo.proto"; + +// Metadata defines the ICS29 channel specific metadata encoded into the channel version bytestring +// See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning +message Metadata { + // fee_version defines the ICS29 fee version + string fee_version = 1 [(gogoproto.moretags) = "yaml:\"fee_version\""]; + // app_version defines the underlying application version, which may or may not be a JSON encoded bytestring + string app_version = 2 [(gogoproto.moretags) = "yaml:\"app_version\""]; +} diff --git a/proto/ibc/applications/fee/v1/query.proto b/proto/ibc/applications/fee/v1/query.proto new file mode 100644 index 00000000000..acab12f5161 --- /dev/null +++ b/proto/ibc/applications/fee/v1/query.proto @@ -0,0 +1,203 @@ +syntax = "proto3"; + +package ibc.applications.fee.v1; + +option go_package = "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "ibc/applications/fee/v1/fee.proto"; +import "ibc/applications/fee/v1/genesis.proto"; +import "ibc/core/channel/v1/channel.proto"; + +// Query defines the ICS29 gRPC querier service. +service Query { + // IncentivizedPackets returns all incentivized packets and their associated fees + rpc IncentivizedPackets(QueryIncentivizedPacketsRequest) returns (QueryIncentivizedPacketsResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/incentivized_packets"; + } + + // IncentivizedPacket returns all packet fees for a packet given its identifier + rpc IncentivizedPacket(QueryIncentivizedPacketRequest) returns (QueryIncentivizedPacketResponse) { + option (google.api.http).get = + "/ibc/apps/fee/v1/incentivized_packet/port/{packet_id.port_id}/channel/{packet_id.channel_id}/sequence/" + "{packet_id.sequence}"; + } + + // Gets all incentivized packets for a specific channel + rpc IncentivizedPacketsForChannel(QueryIncentivizedPacketsForChannelRequest) + returns (QueryIncentivizedPacketsForChannelResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/incentivized_packets/port/{port_id}/channel/{channel_id}"; + } + + // TotalRecvFees returns the total receive fees for a packet given its identifier + rpc TotalRecvFees(QueryTotalRecvFeesRequest) returns (QueryTotalRecvFeesResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/total_recv_fees/port/{packet_id.port_id}/channel/" + "{packet_id.channel_id}/sequence/{packet_id.sequence}"; + } + + // TotalAckFees returns the total acknowledgement fees for a packet given its identifier + rpc TotalAckFees(QueryTotalAckFeesRequest) returns (QueryTotalAckFeesResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/total_ack_fees/port/{packet_id.port_id}/channel/" + "{packet_id.channel_id}/sequence/{packet_id.sequence}"; + } + + // TotalTimeoutFees returns the total timeout fees for a packet given its identifier + rpc TotalTimeoutFees(QueryTotalTimeoutFeesRequest) returns (QueryTotalTimeoutFeesResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/total_timeout_fees/port/{packet_id.port_id}/channel/" + "{packet_id.channel_id}/sequence/{packet_id.sequence}"; + } + + // CounterpartyAddress returns the registered counterparty address for forward relaying + rpc CounterpartyAddress(QueryCounterpartyAddressRequest) returns (QueryCounterpartyAddressResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/counterparty_address/{relayer_address}/channel/{channel_id}"; + } + + // FeeEnabledChannels returns a list of all fee enabled channels + rpc FeeEnabledChannels(QueryFeeEnabledChannelsRequest) returns (QueryFeeEnabledChannelsResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/fee_enabled"; + } + + // FeeEnabledChannel returns true if the provided port and channel identifiers belong to a fee enabled channel + rpc FeeEnabledChannel(QueryFeeEnabledChannelRequest) returns (QueryFeeEnabledChannelResponse) { + option (google.api.http).get = "/ibc/apps/fee/v1/fee_enabled/port/{port_id}/channel/{channel_id}"; + } +} + +// QueryIncentivizedPacketsRequest defines the request type for the IncentivizedPackets rpc +message QueryIncentivizedPacketsRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; + // block height at which to query + uint64 query_height = 2; +} + +// QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPackets rpc +message QueryIncentivizedPacketsResponse { + // list of identified fees for incentivized packets + repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1 [(gogoproto.nullable) = false]; +} + +// QueryIncentivizedPacketRequest defines the request type for the IncentivizedPacket rpc +message QueryIncentivizedPacketRequest { + // unique packet identifier comprised of channel ID, port ID and sequence + ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; + // block height at which to query + uint64 query_height = 2; +} + +// QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPacket rpc +message QueryIncentivizedPacketResponse { + // the identified fees for the incentivized packet + ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packet = 1 [(gogoproto.nullable) = false]; +} + +// QueryIncentivizedPacketsForChannelRequest defines the request type for querying for all incentivized packets +// for a specific channel +message QueryIncentivizedPacketsForChannelRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; + string port_id = 2; + string channel_id = 3; + // Height to query at + uint64 query_height = 4; +} + +// QueryIncentivizedPacketsResponse defines the response type for the incentivized packets RPC +message QueryIncentivizedPacketsForChannelResponse { + // Map of all incentivized_packets + repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1; +} + +// QueryTotalRecvFeesRequest defines the request type for the TotalRecvFees rpc +message QueryTotalRecvFeesRequest { + // the packet identifier for the associated fees + ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; +} + +// QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees rpc +message QueryTotalRecvFeesResponse { + // the total packet receive fees + repeated cosmos.base.v1beta1.Coin recv_fees = 1 [ + (gogoproto.moretags) = "yaml:\"recv_fees\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// QueryTotalAckFeesRequest defines the request type for the TotalAckFees rpc +message QueryTotalAckFeesRequest { + // the packet identifier for the associated fees + ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; +} + +// QueryTotalAckFeesResponse defines the response type for the TotalAckFees rpc +message QueryTotalAckFeesResponse { + // the total packet acknowledgement fees + repeated cosmos.base.v1beta1.Coin ack_fees = 1 [ + (gogoproto.moretags) = "yaml:\"ack_fees\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// QueryTotalTimeoutFeesRequest defines the request type for the TotalTimeoutFees rpc +message QueryTotalTimeoutFeesRequest { + // the packet identifier for the associated fees + ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; +} + +// QueryTotalTimeoutFeesResponse defines the response type for the TotalTimeoutFees rpc +message QueryTotalTimeoutFeesResponse { + // the total packet timeout fees + repeated cosmos.base.v1beta1.Coin timeout_fees = 1 [ + (gogoproto.moretags) = "yaml:\"timeout_fees\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// QueryCounterpartyAddressRequest defines the request type for the CounterpartyAddress rpc +message QueryCounterpartyAddressRequest { + // unique channel identifier + string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + // the relayer address to which the counterparty is registered + string relayer_address = 2 [(gogoproto.moretags) = "yaml:\"relayer_address\""]; +} + +// QueryCounterpartyAddressResponse defines the response type for the CounterpartyAddress rpc +message QueryCounterpartyAddressResponse { + // the counterparty address used to compensate forward relaying + string counterparty_address = 1 [(gogoproto.moretags) = "yaml:\"counterparty_address\""]; +} + +// QueryFeeEnabledChannelsRequest defines the request type for the FeeEnabledChannels rpc +message QueryFeeEnabledChannelsRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; + // block height at which to query + uint64 query_height = 2; +} + +// QueryFeeEnabledChannelsResponse defines the response type for the FeeEnabledChannels rpc +message QueryFeeEnabledChannelsResponse { + // list of fee enabled channels + repeated ibc.applications.fee.v1.FeeEnabledChannel fee_enabled_channels = 1 + [(gogoproto.moretags) = "yaml:\"fee_enabled_channels\"", (gogoproto.nullable) = false]; +} + +// QueryFeeEnabledChannelRequest defines the request type for the FeeEnabledChannel rpc +message QueryFeeEnabledChannelRequest { + // unique port identifier + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + // unique channel identifier + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; +} + +// QueryFeeEnabledChannelResponse defines the response type for the FeeEnabledChannel rpc +message QueryFeeEnabledChannelResponse { + // boolean flag representing the fee enabled channel status + bool fee_enabled = 1 [(gogoproto.moretags) = "yaml:\"fee_enabled\""]; +} diff --git a/proto/ibc/applications/fee/v1/tx.proto b/proto/ibc/applications/fee/v1/tx.proto new file mode 100644 index 00000000000..7a0044cd363 --- /dev/null +++ b/proto/ibc/applications/fee/v1/tx.proto @@ -0,0 +1,85 @@ +syntax = "proto3"; + +package ibc.applications.fee.v1; + +option go_package = "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"; + +import "gogoproto/gogo.proto"; +import "ibc/applications/fee/v1/fee.proto"; +import "ibc/core/channel/v1/channel.proto"; + +// Msg defines the ICS29 Msg service. +service Msg { + // RegisterCounterpartyAddress defines a rpc handler method for MsgRegisterCounterpartyAddress + // RegisterCounterpartyAddress is called by the relayer on each channelEnd and allows them to specify their + // counterparty address before relaying. This ensures they will be properly compensated for forward relaying since + // destination chain must send back relayer's source address (counterparty address) in acknowledgement. This function + // may be called more than once by a relayer, in which case, latest counterparty address is always used. + rpc RegisterCounterpartyAddress(MsgRegisterCounterpartyAddress) returns (MsgRegisterCounterpartyAddressResponse); + + // PayPacketFee defines a rpc handler method for MsgPayPacketFee + // PayPacketFee is an open callback that may be called by any module/user that wishes to escrow funds in order to + // incentivize the relaying of the packet at the next sequence + // NOTE: This method is intended to be used within a multi msg transaction, where the subsequent msg that follows + // initiates the lifecycle of the incentivized packet + rpc PayPacketFee(MsgPayPacketFee) returns (MsgPayPacketFeeResponse); + + // PayPacketFeeAsync defines a rpc handler method for MsgPayPacketFeeAsync + // PayPacketFeeAsync is an open callback that may be called by any module/user that wishes to escrow funds in order to + // incentivize the relaying of a known packet (i.e. at a particular sequence) + rpc PayPacketFeeAsync(MsgPayPacketFeeAsync) returns (MsgPayPacketFeeAsyncResponse); +} + +// MsgRegisterCounterpartyAddress defines the request type for the RegisterCounterpartyAddress rpc +message MsgRegisterCounterpartyAddress { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // the relayer address + string address = 1; + // the counterparty relayer address + string counterparty_address = 2 [(gogoproto.moretags) = "yaml:\"counterparty_address\""]; + // unique channel identifier + string channel_id = 3 [(gogoproto.moretags) = "yaml:\"channel_id\""]; +} + +// MsgRegisterCounterpartyAddressResponse defines the response type for the RegisterCounterpartyAddress rpc +message MsgRegisterCounterpartyAddressResponse {} + +// MsgPayPacketFee defines the request type for the PayPacketFee rpc +// This Msg can be used to pay for a packet at the next sequence send & should be combined with the Msg that will be +// paid for +message MsgPayPacketFee { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // fee encapsulates the recv, ack and timeout fees associated with an IBC packet + ibc.applications.fee.v1.Fee fee = 1 [(gogoproto.nullable) = false]; + // the source port unique identifier + string source_port_id = 2 [(gogoproto.moretags) = "yaml:\"source_port_id\""]; + // the source channel unique identifer + string source_channel_id = 3 [(gogoproto.moretags) = "yaml:\"source_channel_id\""]; + // account address to refund fee if necessary + string signer = 4; + // optional list of relayers permitted to the receive packet fees + repeated string relayers = 5; +} + +// MsgPayPacketFeeResponse defines the response type for the PayPacketFee rpc +message MsgPayPacketFeeResponse {} + +// MsgPayPacketFeeAsync defines the request type for the PayPacketFeeAsync rpc +// This Msg can be used to pay for a packet at a specified sequence (instead of the next sequence send) +message MsgPayPacketFeeAsync { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // unique packet identifier comprised of the channel ID, port ID and sequence + ibc.core.channel.v1.PacketId packet_id = 1 + [(gogoproto.moretags) = "yaml:\"packet_id\"", (gogoproto.nullable) = false]; + // the packet fee associated with a particular IBC packet + PacketFee packet_fee = 2 [(gogoproto.moretags) = "yaml:\"packet_fee\"", (gogoproto.nullable) = false]; +} + +// MsgPayPacketFeeAsyncResponse defines the response type for the PayPacketFeeAsync rpc +message MsgPayPacketFeeAsyncResponse {} diff --git a/proto/ibc/core/channel/v1/channel.proto b/proto/ibc/core/channel/v1/channel.proto index 68c6ec17b19..177f2c85fd1 100644 --- a/proto/ibc/core/channel/v1/channel.proto +++ b/proto/ibc/core/channel/v1/channel.proto @@ -132,6 +132,20 @@ message PacketState { bytes data = 4; } +// PacketId is an identifer for a unique Packet +// Source chains refer to packets by source port/channel +// Destination chains refer to packets by destination port/channel +message PacketId { + option (gogoproto.goproto_getters) = false; + + // channel port identifier + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + // channel unique identifier + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + // packet sequence + uint64 sequence = 3; +} + // Acknowledgement is the recommended acknowledgement format to be used by // app-specific protocols. // NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto index 15714173a1a..d34b00e9124 100644 --- a/proto/ibc/core/channel/v1/tx.proto +++ b/proto/ibc/core/channel/v1/tx.proto @@ -68,6 +68,7 @@ message MsgChannelOpenInit { // MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. message MsgChannelOpenInitResponse { string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string version = 2; } // MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel @@ -91,7 +92,9 @@ message MsgChannelOpenTry { } // MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. -message MsgChannelOpenTryResponse {} +message MsgChannelOpenTryResponse { + string version = 1; +} // MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge // the change of channel state to TRYOPEN on Chain B. diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index efcfb36b30a..4736b47540b 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -31,7 +31,8 @@ buf protoc \ -I "third_party/proto" \ --doc_out=./docs/ibc \ --doc_opt=./docs/protodoc-markdown.tmpl,proto-docs.md \ - $(find "$(pwd)/proto" -maxdepth 5 -name '*.proto') + $(find "$(pwd)/proto" -maxdepth 7 -name '*.proto') +go mod tidy # move proto files to the right places cp -r github.com/cosmos/ibc-go/v*/modules/* modules/ diff --git a/testing/endpoint.go b/testing/endpoint.go index e466bd781e9..7c272d7847f 100644 --- a/testing/endpoint.go +++ b/testing/endpoint.go @@ -328,7 +328,14 @@ func (endpoint *Endpoint) ChanOpenAck() error { proof, height, endpoint.Chain.SenderAccount.GetAddress().String(), ) - return endpoint.Chain.sendMsgs(msg) + + if err = endpoint.Chain.sendMsgs(msg); err != nil { + return err + } + + endpoint.ChannelConfig.Version = endpoint.GetChannel().Version + + return nil } // ChanOpenConfirm will construct and execute a MsgChannelOpenConfirm on the associated endpoint. diff --git a/testing/simapp/app.go b/testing/simapp/app.go index ee148806852..738e29cdd59 100644 --- a/testing/simapp/app.go +++ b/testing/simapp/app.go @@ -89,6 +89,9 @@ import ( icahostkeeper "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/host/keeper" icahosttypes "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/host/types" icatypes "github.com/cosmos/ibc-go/v3/modules/apps/27-interchain-accounts/types" + ibcfee "github.com/cosmos/ibc-go/v3/modules/apps/29-fee" + ibcfeekeeper "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/keeper" + ibcfeetypes "github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types" transfer "github.com/cosmos/ibc-go/v3/modules/apps/transfer" ibctransferkeeper "github.com/cosmos/ibc-go/v3/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" @@ -111,6 +114,11 @@ import ( const appName = "SimApp" +// IBC application testing ports +const ( + MockFeePort string = ibcmock.ModuleName + ibcfeetypes.ModuleName +) + var ( // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string @@ -142,6 +150,7 @@ var ( ica.AppModuleBasic{}, authzmodule.AppModuleBasic{}, vesting.AppModuleBasic{}, + ibcfee.AppModuleBasic{}, ) // module account permissions @@ -153,6 +162,7 @@ var ( stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, + ibcfeetypes.ModuleName: nil, icatypes.ModuleName: nil, } ) @@ -192,6 +202,7 @@ type SimApp struct { ParamsKeeper paramskeeper.Keeper AuthzKeeper authzkeeper.Keeper IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + IBCFeeKeeper ibcfeekeeper.Keeper ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper EvidenceKeeper evidencekeeper.Keeper @@ -201,6 +212,8 @@ type SimApp struct { // make scoped keepers public for test purposes ScopedIBCKeeper capabilitykeeper.ScopedKeeper ScopedTransferKeeper capabilitykeeper.ScopedKeeper + ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper + ScopedFeeMockKeeper capabilitykeeper.ScopedKeeper ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper ScopedICAHostKeeper capabilitykeeper.ScopedKeeper ScopedIBCMockKeeper capabilitykeeper.ScopedKeeper @@ -209,6 +222,7 @@ type SimApp struct { // make IBC modules public for test purposes // these modules are never directly routed to by the IBC Router ICAAuthModule ibcmock.IBCModule + FeeMockModule ibcmock.IBCModule // the module manager mm *module.Manager @@ -235,7 +249,6 @@ func NewSimApp( homePath string, invCheckPeriod uint, encodingConfig simappparams.EncodingConfig, appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp), ) *SimApp { - appCodec := encodingConfig.Marshaler legacyAmino := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry @@ -250,7 +263,7 @@ func NewSimApp( minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, icacontrollertypes.StoreKey, icahosttypes.StoreKey, capabilitytypes.StoreKey, - authzkeeper.StoreKey, + authzkeeper.StoreKey, ibcfeetypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) @@ -281,6 +294,7 @@ func NewSimApp( // NOTE: the IBC mock keeper and application module is used only for testing core IBC. Do // not replicate if you do not need to test core IBC or light clients. scopedIBCMockKeeper := app.CapabilityKeeper.ScopeToModule(ibcmock.ModuleName) + scopedFeeMockKeeper := app.CapabilityKeeper.ScopeToModule(MockFeePort) scopedICAMockKeeper := app.CapabilityKeeper.ScopeToModule(ibcmock.ModuleName + icacontrollertypes.SubModuleName) // seal capability keeper after scoping modules @@ -339,18 +353,35 @@ func NewSimApp( &stakingKeeper, govRouter, ) - // Create Transfer Keepers + app.IBCFeeKeeper = ibcfeekeeper.NewKeeper(appCodec, keys[ibcfeetypes.StoreKey], app.GetSubspace(ibcfeetypes.ModuleName), + app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, + ) + + // Create Transfer Keeper and pass IBCFeeKeeper as expected Channel and PortKeeper + // since fee middleware will wrap the IBCKeeper for underlying application. app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), - app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, + app.IBCFeeKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, scopedTransferKeeper, ) transferModule := transfer.NewAppModule(app.TransferKeeper) transferIBCModule := transfer.NewIBCModule(app.TransferKeeper) + // create fee-wrapped transfer module + feeTransferModule := ibcfee.NewIBCModule(app.IBCFeeKeeper, transferIBCModule) + + feeModule := ibcfee.NewAppModule(app.IBCFeeKeeper) + // NOTE: the IBC mock keeper and application module is used only for testing core IBC. Do // not replicate if you do not need to test core IBC or light clients. mockModule := ibcmock.NewAppModule(&app.IBCKeeper.PortKeeper) + + // create fee wrapped mock module + feeMockModule := ibcmock.NewIBCModule(&mockModule, ibcmock.NewMockIBCApp(MockFeePort, scopedFeeMockKeeper)) + app.FeeMockModule = feeMockModule + + feeWithMockModule := ibcfee.NewIBCModule(app.IBCFeeKeeper, feeMockModule) + mockIBCModule := ibcmock.NewIBCModule(&mockModule, ibcmock.NewMockIBCApp(ibcmock.ModuleName, scopedIBCMockKeeper)) app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( @@ -376,12 +407,15 @@ func NewSimApp( icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) // Create static IBC router, add app routes, then set and seal it + // pass in top-level (fully-wrapped) IBCModules to IBC Router ibcRouter := porttypes.NewRouter() ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). AddRoute(ibcmock.ModuleName+icacontrollertypes.SubModuleName, icaControllerIBCModule). // ica with mock auth module stack route to ica (top level of middleware stack) - AddRoute(ibctransfertypes.ModuleName, transferIBCModule). - AddRoute(ibcmock.ModuleName, mockIBCModule) + AddRoute(ibctransfertypes.ModuleName, feeTransferModule). + AddRoute(ibcmock.ModuleName, mockIBCModule). + AddRoute(MockFeePort, feeWithMockModule) + app.IBCKeeper.SetRouter(ibcRouter) // create evidence keeper with router @@ -421,6 +455,7 @@ func NewSimApp( params.NewAppModule(app.ParamsKeeper), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), transferModule, + feeModule, icaModule, mockModule, ) @@ -434,13 +469,13 @@ func NewSimApp( upgradetypes.ModuleName, capabilitytypes.ModuleName, minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, evidencetypes.ModuleName, stakingtypes.ModuleName, ibchost.ModuleName, ibctransfertypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, govtypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, authz.ModuleName, feegrant.ModuleName, - paramstypes.ModuleName, vestingtypes.ModuleName, icatypes.ModuleName, ibcmock.ModuleName, + paramstypes.ModuleName, vestingtypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, ibcmock.ModuleName, ) app.mm.SetOrderEndBlockers( crisistypes.ModuleName, govtypes.ModuleName, stakingtypes.ModuleName, ibchost.ModuleName, ibctransfertypes.ModuleName, capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, minttypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, - upgradetypes.ModuleName, vestingtypes.ModuleName, icatypes.ModuleName, ibcmock.ModuleName, + upgradetypes.ModuleName, vestingtypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, ibcmock.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -452,7 +487,7 @@ func NewSimApp( capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, stakingtypes.ModuleName, slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName, ibchost.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, ibctransfertypes.ModuleName, - icatypes.ModuleName, ibcmock.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, + icatypes.ModuleName, ibcfeetypes.ModuleName, ibcmock.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, ) app.mm.RegisterInvariants(&app.CrisisKeeper) @@ -529,6 +564,7 @@ func NewSimApp( // note replicate if you do not need to test core IBC or light clients. app.ScopedIBCMockKeeper = scopedIBCMockKeeper app.ScopedICAMockKeeper = scopedICAMockKeeper + app.ScopedFeeMockKeeper = scopedFeeMockKeeper return app } diff --git a/testing/values.go b/testing/values.go index 6bdf782c65a..655a4731a74 100644 --- a/testing/values.go +++ b/testing/values.go @@ -14,6 +14,7 @@ import ( commitmenttypes "github.com/cosmos/ibc-go/v3/modules/core/23-commitment/types" ibctmtypes "github.com/cosmos/ibc-go/v3/modules/light-clients/07-tendermint/types" "github.com/cosmos/ibc-go/v3/testing/mock" + "github.com/cosmos/ibc-go/v3/testing/simapp" ) const ( @@ -33,6 +34,7 @@ const ( // Application Ports TransferPort = ibctransfertypes.ModuleName MockPort = mock.ModuleName + MockFeePort = simapp.MockFeePort // used for testing proposals Title = "title"

    av2fjL-LGJ4S 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/ibc/apps.md b/docs/ibc/apps.md index bb2716fa0b1..f729d7dfd71 100644 --- a/docs/ibc/apps.md +++ b/docs/ibc/apps.md @@ -464,13 +464,13 @@ which implements everything discussed above. Here are the useful parts of the module to look at: [Binding to transfer -port](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/types/genesis.go) +port](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/genesis.go) [Sending transfer packets](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/relay.go) [Implementing IBC -callbacks](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/module.go) +callbacks](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/ibc_module.go) ## Next {hide} diff --git a/docs/ibc/middleware/develop.md b/docs/ibc/middleware/develop.md index 1d75e3965a8..705040b1db7 100644 --- a/docs/ibc/middleware/develop.md +++ b/docs/ibc/middleware/develop.md @@ -49,6 +49,7 @@ type Middleware interface { type ICS4Wrapper interface { SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.Packet) error WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.Packet, ack []byte) error + GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) } ``` @@ -239,4 +240,24 @@ func SendPacket(appPacket channeltypes.Packet) { return ics4Keeper.SendPacket(packet) } + +// middleware must return the underlying application version +func GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + version, found := ics4Keeper.GetAppVersion(ctx, portID, channelID) + if !found { + return "", false + } + + if !MiddlewareEnabled { + return version, true + } + + // unwrap channel version + metadata, err := Unmarshal(version) + if err != nil { + panic(fmt.Errof("unable to unmarshal version: %w", err)) + } + + return metadata.AppVersion, true +} ``` diff --git a/docs/ibc/proto-docs.md b/docs/ibc/proto-docs.md index 4c628fdc10c..863983e7a95 100644 --- a/docs/ibc/proto-docs.md +++ b/docs/ibc/proto-docs.md @@ -4,6 +4,95 @@ ## Table of Contents +- [ibc/applications/fee/v1/ack.proto](#ibc/applications/fee/v1/ack.proto) + - [IncentivizedAcknowledgement](#ibc.applications.fee.v1.IncentivizedAcknowledgement) + +- [ibc/core/client/v1/client.proto](#ibc/core/client/v1/client.proto) + - [ClientConsensusStates](#ibc.core.client.v1.ClientConsensusStates) + - [ClientUpdateProposal](#ibc.core.client.v1.ClientUpdateProposal) + - [ConsensusStateWithHeight](#ibc.core.client.v1.ConsensusStateWithHeight) + - [Height](#ibc.core.client.v1.Height) + - [IdentifiedClientState](#ibc.core.client.v1.IdentifiedClientState) + - [Params](#ibc.core.client.v1.Params) + - [UpgradeProposal](#ibc.core.client.v1.UpgradeProposal) + +- [ibc/core/channel/v1/channel.proto](#ibc/core/channel/v1/channel.proto) + - [Acknowledgement](#ibc.core.channel.v1.Acknowledgement) + - [Channel](#ibc.core.channel.v1.Channel) + - [Counterparty](#ibc.core.channel.v1.Counterparty) + - [IdentifiedChannel](#ibc.core.channel.v1.IdentifiedChannel) + - [Packet](#ibc.core.channel.v1.Packet) + - [PacketId](#ibc.core.channel.v1.PacketId) + - [PacketState](#ibc.core.channel.v1.PacketState) + + - [Order](#ibc.core.channel.v1.Order) + - [State](#ibc.core.channel.v1.State) + +- [ibc/applications/fee/v1/fee.proto](#ibc/applications/fee/v1/fee.proto) + - [Fee](#ibc.applications.fee.v1.Fee) + - [IdentifiedPacketFees](#ibc.applications.fee.v1.IdentifiedPacketFees) + - [PacketFee](#ibc.applications.fee.v1.PacketFee) + - [PacketFees](#ibc.applications.fee.v1.PacketFees) + +- [ibc/applications/fee/v1/genesis.proto](#ibc/applications/fee/v1/genesis.proto) + - [FeeEnabledChannel](#ibc.applications.fee.v1.FeeEnabledChannel) + - [ForwardRelayerAddress](#ibc.applications.fee.v1.ForwardRelayerAddress) + - [GenesisState](#ibc.applications.fee.v1.GenesisState) + - [RegisteredRelayerAddress](#ibc.applications.fee.v1.RegisteredRelayerAddress) + +- [ibc/applications/fee/v1/metadata.proto](#ibc/applications/fee/v1/metadata.proto) + - [Metadata](#ibc.applications.fee.v1.Metadata) + +- [ibc/applications/fee/v1/query.proto](#ibc/applications/fee/v1/query.proto) + - [QueryCounterpartyAddressRequest](#ibc.applications.fee.v1.QueryCounterpartyAddressRequest) + - [QueryCounterpartyAddressResponse](#ibc.applications.fee.v1.QueryCounterpartyAddressResponse) + - [QueryFeeEnabledChannelRequest](#ibc.applications.fee.v1.QueryFeeEnabledChannelRequest) + - [QueryFeeEnabledChannelResponse](#ibc.applications.fee.v1.QueryFeeEnabledChannelResponse) + - [QueryFeeEnabledChannelsRequest](#ibc.applications.fee.v1.QueryFeeEnabledChannelsRequest) + - [QueryFeeEnabledChannelsResponse](#ibc.applications.fee.v1.QueryFeeEnabledChannelsResponse) + - [QueryIncentivizedPacketRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketRequest) + - [QueryIncentivizedPacketResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketResponse) + - [QueryIncentivizedPacketsForChannelRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelRequest) + - [QueryIncentivizedPacketsForChannelResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketsForChannelResponse) + - [QueryIncentivizedPacketsRequest](#ibc.applications.fee.v1.QueryIncentivizedPacketsRequest) + - [QueryIncentivizedPacketsResponse](#ibc.applications.fee.v1.QueryIncentivizedPacketsResponse) + - [QueryTotalAckFeesRequest](#ibc.applications.fee.v1.QueryTotalAckFeesRequest) + - [QueryTotalAckFeesResponse](#ibc.applications.fee.v1.QueryTotalAckFeesResponse) + - [QueryTotalRecvFeesRequest](#ibc.applications.fee.v1.QueryTotalRecvFeesRequest) + - [QueryTotalRecvFeesResponse](#ibc.applications.fee.v1.QueryTotalRecvFeesResponse) + - [QueryTotalTimeoutFeesRequest](#ibc.applications.fee.v1.QueryTotalTimeoutFeesRequest) + - [QueryTotalTimeoutFeesResponse](#ibc.applications.fee.v1.QueryTotalTimeoutFeesResponse) + + - [Query](#ibc.applications.fee.v1.Query) + +- [ibc/applications/fee/v1/tx.proto](#ibc/applications/fee/v1/tx.proto) + - [MsgPayPacketFee](#ibc.applications.fee.v1.MsgPayPacketFee) + - [MsgPayPacketFeeAsync](#ibc.applications.fee.v1.MsgPayPacketFeeAsync) + - [MsgPayPacketFeeAsyncResponse](#ibc.applications.fee.v1.MsgPayPacketFeeAsyncResponse) + - [MsgPayPacketFeeResponse](#ibc.applications.fee.v1.MsgPayPacketFeeResponse) + - [MsgRegisterCounterpartyAddress](#ibc.applications.fee.v1.MsgRegisterCounterpartyAddress) + - [MsgRegisterCounterpartyAddressResponse](#ibc.applications.fee.v1.MsgRegisterCounterpartyAddressResponse) + + - [Msg](#ibc.applications.fee.v1.Msg) + +- [ibc/applications/interchain_accounts/controller/v1/controller.proto](#ibc/applications/interchain_accounts/controller/v1/controller.proto) + - [Params](#ibc.applications.interchain_accounts.controller.v1.Params) + +- [ibc/applications/interchain_accounts/controller/v1/query.proto](#ibc/applications/interchain_accounts/controller/v1/query.proto) + - [QueryParamsRequest](#ibc.applications.interchain_accounts.controller.v1.QueryParamsRequest) + - [QueryParamsResponse](#ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse) + + - [Query](#ibc.applications.interchain_accounts.controller.v1.Query) + +- [ibc/applications/interchain_accounts/host/v1/host.proto](#ibc/applications/interchain_accounts/host/v1/host.proto) + - [Params](#ibc.applications.interchain_accounts.host.v1.Params) + +- [ibc/applications/interchain_accounts/host/v1/query.proto](#ibc/applications/interchain_accounts/host/v1/query.proto) + - [QueryParamsRequest](#ibc.applications.interchain_accounts.host.v1.QueryParamsRequest) + - [QueryParamsResponse](#ibc.applications.interchain_accounts.host.v1.QueryParamsResponse) + + - [Query](#ibc.applications.interchain_accounts.host.v1.Query) + - [ibc/applications/interchain_accounts/v1/account.proto](#ibc/applications/interchain_accounts/v1/account.proto) - [InterchainAccount](#ibc.applications.interchain_accounts.v1.InterchainAccount) @@ -42,15 +131,6 @@ - [Query](#ibc.applications.transfer.v1.Query) -- [ibc/core/client/v1/client.proto](#ibc/core/client/v1/client.proto) - - [ClientConsensusStates](#ibc.core.client.v1.ClientConsensusStates) - - [ClientUpdateProposal](#ibc.core.client.v1.ClientUpdateProposal) - - [ConsensusStateWithHeight](#ibc.core.client.v1.ConsensusStateWithHeight) - - [Height](#ibc.core.client.v1.Height) - - [IdentifiedClientState](#ibc.core.client.v1.IdentifiedClientState) - - [Params](#ibc.core.client.v1.Params) - - [UpgradeProposal](#ibc.core.client.v1.UpgradeProposal) - - [ibc/applications/transfer/v1/tx.proto](#ibc/applications/transfer/v1/tx.proto) - [MsgTransfer](#ibc.applications.transfer.v1.MsgTransfer) - [MsgTransferResponse](#ibc.applications.transfer.v1.MsgTransferResponse) @@ -60,17 +140,6 @@ - [ibc/applications/transfer/v2/packet.proto](#ibc/applications/transfer/v2/packet.proto) - [FungibleTokenPacketData](#ibc.applications.transfer.v2.FungibleTokenPacketData) -- [ibc/core/channel/v1/channel.proto](#ibc/core/channel/v1/channel.proto) - - [Acknowledgement](#ibc.core.channel.v1.Acknowledgement) - - [Channel](#ibc.core.channel.v1.Channel) - - [Counterparty](#ibc.core.channel.v1.Counterparty) - - [IdentifiedChannel](#ibc.core.channel.v1.IdentifiedChannel) - - [Packet](#ibc.core.channel.v1.Packet) - - [PacketState](#ibc.core.channel.v1.PacketState) - - - [Order](#ibc.core.channel.v1.Order) - - [State](#ibc.core.channel.v1.State) - - [ibc/core/channel/v1/genesis.proto](#ibc/core/channel/v1/genesis.proto) - [GenesisState](#ibc.core.channel.v1.GenesisState) - [PacketSequence](#ibc.core.channel.v1.PacketSequence) @@ -283,23 +352,24 @@ - +

  • Bb6?ehyMyA0m4=k2?> z2_U|o3)IZrPbVLyzik^M41|GAeTwrX9SBZ;(+ms=13P~&lYFHEPV}xI=D4L$PT)>z z0MlH{`5RLPf9fP=oXG*Wwx)kzh zcHV9iE&UL6NvF$O%DL+CM3A=`RVJd|yHKPFOqV@Hzy12ZAX2HL`rpWoPlKs;0GQxzIz;*!LA1}r=z|8uGC9!2eupcnbY^;ob}Ma_7m4WFHT)(Sx6}zS zOq{+E6R^E#amiKDd)E(XR9T#O0T01H{m1_se&P-PZ+zBYzIdyC$L*f~`RjfZ-|#Kp zg*)!L4{Se}#t8gJBSZC(I4zy#GLb)q-=X%$dT3wBM{r1U25TME}eE?H{=ZKlERI33s1(5YKtWlX3LOrMMXBInTHW|Lb3UVaDy< z@B5J9C%VlxR190YFEr^K=~2oTn(Yq%jn|vq78IausXgZFB%Di{-y4rgK2y`KGu`OO zu9c5pXqB?Ke(SlnIha}bA67GtLBD}ldv)TZr*E)<4}w*?82#;@?^}Uw8hlu0kpLruC|9Q{5fG zHCtkJ!1PJ+GXLDlS2?3Ck0Gr8MxMrY$95~c14ESLleaFxL;WruS?pFgwVi=}T95PW z;O-ipwAjMNfXwC)ct5bQhRyYIJ)Y$|UXQ<9>*e2O{_XPbl?Mk|8iKr|Ejhclms@gR zd_UwrvbBy&HrAboRXiRzvx9q2pEDeIOrd&LbgDW13 zbgs9VcAeWy=eNsjmSN(P@)E?qV7uVDptyA2bp`qM@{R1P9FdQww#{YH1hJ9dn$PH3 zK~&nX%V_QHTyGHY0LhlI4s$+6;1|gxh<0X&kwUxUuaN%>=XcXbhkl*;T+0Rhm#CjY zI07x6)TSA@OuK*w$*0i!DUF2qnMkITubdx&-+}I($^-F1+_qRhQ;Wp2${9)GxfL>(UgSwlC0_=*GUH)*puPa9WApus+t`vg3RrADG(B*L0?Lkn5U9 zKfcR2)0~e6y}Nd21h}l$_+F(G3^yy^CiWp}-Du?5eF~S)_U}_~z8qiqm7jtWCr;zv z|G+zjAn(oi;xBm?PM_Mr>C@%knE8>1AH(mz<1U=I_fdTI=R75s|E;%w#J1}f)`9vb zu#)G6S(dABZR7t`=Q)gc@IFGg9gVD}=^_zS`>X+C_4^?{N0$;&qft83jdpH_6*%=Q z*ZOA;&HN()LV2BNWp9jhbE_K10L^*9RFMvH`6)$Qv$ND9P7~w0D%B^n;ZD6}R^0rn z`M?Q52=W3z`_X{Ym76T~^_y?KId$4%o4xFWA)GtW;GucmI@vt<35_~mwbXE%teGj| ztB&bj>m>P+w*EAgNxq+vuAnI@KgBWb(2QWr5!SkRC8P2t@Q`X8uQ|w?;7-5cAv46l z>_dmKq#(;!$t?}OEqs{#E6uH>=t`j$qZTIyJN*d2X%|r4M}|pG*hWcPRU5p9>0D!G zrdU_l?FteD1iob41?^wLFysl+ElJN@MndB| zxx8w#Y!?d=!&P;$V?F`VH%N}dxIkfjz01F*&MD?k^sI%I+gF*B^{~>QTN|zyMJMu# zY^5XDPj;Cn0Ks-eiVpX!oT{KA+8U#aODvdE&V#t!G*6x;YWQd;u9r<*F$8*p{V0tO zct4o-aNlAluOttBIpwi_+1M%84)?{_<{(TKxBb6}cXtFYxFpRr9TzVKkbvqN z8IKWG`G%Wu&zl3vvTgzA9AUiH2z3Qq+lcjvlGp}kUc+3x=*}}P9eW~;S z(X*~lh5Lc2;!*Ont94l(8o?!c_H|_`Qd|ja_*XmITU%9@LGq%wH(M%K7@zs#8}ZuL zeIEYPe|$H7{6D=r=Np5-U-Px)L*rlmrCal=;BiZ6oqzlNKX?^xyX_%-?^Aaje3$FVkpUQzghvjN~^R= ztMun3O($B@()WLs=jVH;@6T6$F5rBjdFSAliG_S+_br_Aj$f3Hd#;@JrRrRGIho+) zTRqZbM|DhN*_y`?2I5GFM+{ClAw&dxF6GH7ro_&#ITK_+Ep2Cvo6kpxVd zrMHRl*Z-WD9*_(fL(R?;%@<{x+dt)*;~nAcml9gO`#`A;((2@)FxrG)LNk!vC$CVY zlWT&(Uqx$s&#yC}%!oW7Jzz>2t~QZDK@6XzLHL?d98%N?ndL5|4gPX{5t&3tX&oF? zk?<$V!VFcw6Omw&(0d}H;o7!G<(l7Rc!+c~eF)4{GDevOV&F>V@Tr8D<^9ASs-$+t zZ=OI5cnE^6vGR@nvp(<(#+kAkPJw5w{tFDZG-pq8na;Bd)uJ{M-j+6y9DZHELk%qV zuD~q&)Sh5_y!{B-JWq5>HptpJm>f2U;iC= z<6D0f+dI4UT%ryhhM&`kZdO*@hB;5#)f=9*;ZK#34l(#^WyQ;kSG-DdoP_UG4<>r9 zeU1ir9cG{Woy=@8$}2r}dtp#N)Y=$rPr*%aatNmX@~{5^-tzNr$Boxrg{M8`I$Vr& z^zbG4U;pY0aQ(Gc;!ke96Q@s~t!=CsYI{NY5cpN?9NRYK#ZJGA-60URC0k{sWu3T- z+jF|kwO{{t9S09o@73-|5Un0+Bh-Eab7vTj9}A4$bmuqF4<*`jBS{iJEgtla?d!mPEU(%Vp zsob=`h3^P-E4D&dgq0Ied*SjcU_Z**Fg)KJ^4+k0!0<2pcA9COx9^?BLqiZz&!2Al zD$SVr(QzM!;B%=g3-M2JPOOWy2=}$)C9ewaI-zc?d|0467H~hNd6jZf#Y1L-pJ2Ha zKQC8^hAeM7F)eMI2&U^o4dB*mUJ1m%?28Juk>MHM+84|`AA`RmO+UPI)?`yzRaUWz z(MRcf_ld{wzysS*9TMtyjK@@lc{T=rKkKHeaAtRrgTJT7;P3F?&BOE0d&-mWNta!U zjX_s-_ImvKhabovtDHD}4sXBXK@a}IaWtJLo|vR}Za2kn@_R+u=}NSjSz*aEZQ(~^(EEnhE`02 zMhxtN&1c4w=$jlC+v;91ph4ypw!z`-P7{Au>CjQRPNGhl3?bkofrrc!;)~Lv zZ4>i-B0pXan1_fwbv|mP443F{uqD7|*@Q?K6FFUl26Y0Lc|@9{;y2M1t-D>B2rdY( zR^>{0)bZ1Nt^M!#cMSM$ZFD$zpse;C`^>Z33Fn4?dkYQZI?^Ih*0s(!zLSY8C&M?k z!|5A8f|W)_jV4JyFp=;Z{#FDRoslU%itAh+ z59kCBaB>g!c-={YIuHB>s6>=zt2VC&jz#MW*h0i;Kf&xuQ0vWpJ1R5eI%9$lJgfZ~J~`RdXk;fXz0VzvL`V=R9q^ z*$tzG98Z~-%~o)#Pu?)!VYi(2GS2m6^6Mp8&JvXk&U1>F2-xk%>*cy>xf}Y;tt#b7 z98E>`o53!slMR`wR}ftk~W; zSqY>T5|V~L6P852Hrj7_(hN#P%~}~rLAH2!$9bYWM1GO7I%-RmD&FQ*rdXbs2c{dT zT@f#~iZP(m;C$@p5xnNrUx#n}x>w+0raSIFfxrKczbglTLt@#rK|SEIR{kizj5cU= z#d5no%0wpEo=xpQqY5q`+Goh9dUdx5fO;r_LbUCHB?j)yhoEIKY}-thJR%4n5&z-h z32A&ApCBLW*I@O_zUXuCt*`vD91Omg>Brvq|G|&^AOCF#Zahqr7ajHH68w~C4P?@P z3Xvh65rKHYh<0idJHp9)DZ6(4VDVy_ zISFXhTIib!y;H(u#kTtbLSpJTZAzJ(-WYf`uDcw!^c|mX3^Z9E-i_NlAC>jWYM1-` zVT!n4amVgCJd*ajPbMFf%d!kOzHU5N?xoF-xQ#O3!^vU##(^i@_F5;>^P-t9+Hjln zraJYy{eZ*D$TWDs_q>&JnkgIV5LQX?pnliX*VH8vdBZ^up$S#q0(xtp`(HYE6b}wT z``dTVnC%h7RloXhJQMrQyUyUzle_*=k|5ZF)_3#(xCehv?=0{uWAJwf=pH|O5HGy$ zG8{j2(CRw9yN6%A^+f(sVJDZH(;p=;|-!F)zc+TUuM0*a)Uo%<&uAb(#`me>v@QD_4-kuL=k8gm|Rj!d4% zz!lSsVWc?r6P80Zd5&?sufL>MUM}*bj8B0{m(E=y*-?>DLr9?>2E(or!JbqZohSQf z%jn-Fuhg9w49Pb?tugqon3h!B;7do>mYS8&^{ z4^?Vc865JAXaBzB3!aYS#}DK5>Fs6+KQ{<=WOdu zjtaAgwqz^%#lq;TLC$1~#4_ynnRfZM(A(?Kygk`Kmnp@|?Om;}@0~8SErk*7YUhIY zh_e`w%G*x7%~0G>=~MD$zr42BIM&Fa^H7{mq#vsQ@G7m+Dy`BJFlpzRNmIB39lY-_Tx+g1?>LC7-Dzs!Hv@o>bTTXvocbm??3iC>;pMJcM@{X! zC4;GD_jTwC@{S1&4#Y;f@I;fNoG=|-V+QUFM(U(7J_$ZJuZ`0$^Acpf?e58we8+8` zSq2&iwHYZ+R31aIs=Fcx0zA>H*x55mQ)Be()`JGI(WWrM&=vLf}Oif-J zpD9oDe9UD!#YPj-O1&zEN)a zDm1#1w-opOSpxyd3tJr-Hfo^NaIC>EwQIF54$zIs12Sqz1hLZ+((4!i_E>`lXA=Bl zA|ZORZTQw#{vEvRZ+*^14Fs2Mp??l<{l(wK%(f!sCO0k^klb*mYiXPEbwk#0<;LX$ z57#EPmtBX^Ul>=5j^+77DyN~^>Qbls2Oi`Mx+w5%mq)%-0DYYp;;oZa;(DZD(@I#K;A5G}D`|U|mC5lF)Q9ORbURZ_ZHE#q*d=N++bL=r+jRBG@=A80 zk0)wFxqZ$DI&+!*U2SW3bn@=)7O#-z46*;c^`e$TeQgV??o>nI-{ zjDg#c=j-E&SCs1#+#M#+`$F3dJ98I74mhC7_Q-EN=xcZnK({WeSi8@NAOuUT$zKqYp>7Cmg*I^T#2@L~{XLxL?NOWacG3L2I+Dctv=Az}f1irAk z2e}AlOc+Jeksxcr#L?%e(dFtFq?vXyNy7(VptdM6NtVJp#OH`~b6U(~4DaS1YO@oS zbwAVk$F?mMV48LtR@d?&jLW!YPM90fmx?SL^locGCo=l6Vw8qDKsLdzP@w+ zx;HrLYbM48De$E4DTvlrzDwCETd1uXK-XY)*$z87Z4`R5O*Cfk2+xvk3Eh`1vZ+oR ztJiwGe2VSSp9+fu#mwXoeAeq~Bgd?^#dRw9z4T?z!Z-cH7v+4v{aYW!yZ`6}K6u;1 z*4E?458-J~yE3l^9@B{vr|`9=*9NeXj%HfRRDOER%w-1>Ca2zNvKaW zSo?VMXub=n_Y(J+EH$T4MrMdiYZNfZVX5tE?0PV4ezu$^7X`8Ah{D9dv&jU+(H@mfY3 zg~9D(nUsl;k&FboOCz&BWV8ANV1lHid<;TQ#XVS^fT>*yGLJ@BW(0x@v3;&}MR~6) zt!C`Sm|pzpFU0r!%WuK+o_#YeX8Nh0`Bi-TzxaV6@O!%H2c;Fz{G+ng>XnsQqLHo( z@tw<;OhA+%bZZN0K*OG=Mu&xLEP<1fyM7c;!7Bfq^4p(zuo2MhaTQ&i%t>_J(fPrs z^>&SZ*zOQjc5WDgzyIVLzV!bQ=L7%4|NTGW_uh32CLdT-`|YcP^`n};Zug9!M>+U5 z{2pC9f&*O%b|}4dqO5=y>dy*f<&j=nO75p~&Z3sx#5YnN!SrKl%VN7EOo%E!)fQ9bq0boKtPkPYG2faLUX6j= zv2E*psdpn4_+wyqZNRmwW!LM+8DjDvfj7bS5C7#U%Aw3&S5}KGhOFapiTT3-l zXzhK%*fh4Qj^lI{uLdYJ{|gTu%kTbh`%!p6d%EiQ?Aa3h-P!4*7>9n)Y3pn&&;H^y z$8xZD4F3Ms9S`O0o^QVVP{!lL5b(X?;1;&lJG}paNAZrkA2GNbd^Z_q;$XQ-GNwEH2Wg34S_` zGoGf{ekU@u_y5b@p8#u?WaWY2ckcgQL}td4dsbD}0!52Oz(_)fRib7ZgoLJ5g{DV? zP$SxA42c4Sjm=P1VtSaF7HiwI1O?b26BLDw^=JVE)*}ieK?B_^Qn3_8BX%e#sw($A zGcqD0;=Omz{JxxXzT@})FCv*Xi&We1nJ@mkxF0{~`0?Y*cio-hoH;DO@6WuY<M#sD2@G;_yF~(bdXg;Eekm`(T;vH{2W?-7TrgR1I_d_fLD8F zMGy9(m-2 zD4&V*hM(bUqPLaGNIDGvG7rz_qlr!{=9b%aY^0~oKOA7U@@jyr*FQnZx7l9TquM#U z3MAgb7Ft9GtY_!1`EFZ<9V?5~>%r_kyq#k_d{Cfa598`%Pn+~O*jKkx>9)8BfcIe^ z_F*6XXA*d_nkTJK160Q}yW)-UZ^XmR@_O2P3pe6_jCbR_0aY9Lzz5^%y+#@0-V|A) zmDBK`xV?|gqz$Oks$c39S>x}MrN<26=x)O+S_$cOXm+6493 zvmS;qu~O=|$C9F#OV;aBr&$gw)1WabZW%SdkMCPZwriP|S5e3D?4NpK_0r}s{?y_pC&@qxIh zv_tFi-{+sW3 z8$S6HJ{q?&{J_8bd3@`4|Hu{)elmO(H*`h++y;65ljH(S#*3SCxUf0jBSpK}zJ_1% zwcQr1%uAfjwC+3Oql9j2+p;>*llr^q{G7lh#G0=Rd+7DQoKri)%b0zj$>Bl6cjbPk zlCKQ;*;Xp3ShtIwcDQ??U+s3@R}3^sQ=XM$ZT1=cp7;oeKYp0H-!GF=o4!?YlY{%D zx&AX-wY)?qUDJ8_Jr(-UZMt^}np3EK`BDmf}eIguL_>fK4$}w+CMjHg&;+(^=fVIZS0_ zWl-$*QeU-lK{mCF%l*?Q$9QHwc3Y644IA4&-)R7uk7#Dax)8$(UIQ=fU88ArrGZh} z-^KaT;cv5T*LR)Qsh_LJA6ZylW>+KdD&&`qXOAaQSI4{)KJy?v}Pr7f!^o%@`? zPXncgt)ngO`ON|T^x2DeYQByS9A9a+w+S6sJ$d?>Yk2sPE0|A)zJyt(`KUEHw&Bli zf!_lD7JK~A^H=cEcb%(X?<1G4;@PW5_}F{T`JiI4agUbTQ_6K4`d_xc`k3i=C(Y&1nHM~gx||hj>!$BI+1M`l&$f|StHqb zq!|U^h59L;3{kC)b$w~Ci|jjAw^ioyoR+$2@pg;}lb$6U6Q_+To_qxRH=oZyF1y4B zMme!QR!Jhzypy*fnO@3M*Ya+OY}jNGbuEvPp&=jRd!C1x2>+)ur<4=XcJlo~5&ZE$ zC9yF~7OjE0+&7r#CDX-Um({+9n?~w*+jLwznzz5|eUv0N<&i-1Ie1y{*yH=IH`;-v z6knG#d%48wR`nOG+XR#<+#cEodE%h2?S?XffaqHGBQcz1UCKlG8Ndl|mkBV_#8Bj^ z;&eln6`iWXu31N2*KKzf-(wpNT!QoJ_B}W7bhfi^yX`YgmkXMBa9%u}>1B2~+beZ* zoN1M8tcdQ9whrSpuRe!A^C_>!o8I(Mb!+Id^0$!u{oj8Yk3D(`KT}o*|H{K8yGD6X z0kNFQzoc{b)2YnOunb(ybd8S5V#k;?4m7qSCq62mI!WJ>8A+!;UqZ%KSLv3q!qksq z>18LZf6P?BL&k70Gx;&N&9wa5v$+Gs<^IH0Igd73liG)70UBF+izBA1XgBr%@ILIr zKJ3FQHLP}CZ!*r!KEIhfINq-GyMAvbj~mfki+3~m=6Jx3#gs+7SUF6Czkaz!&pMN7 z#N%PtbM(=enwhju(AV?OW_Z$tEVBM$ z{E$P8K6YBsx=bP%3ZC@Qw&Pg~Ru5acWOM+2mrP3ad}@~N37 zsPJT&=YkUn2gdp$`)BvJ4iK8s%Wt=lf#<}W2#?t^pIjg8*PbOdi4WszVS_ntR1I+! zqr%CG$BjvPC0|&!crM#Lm%m%N-E%qT_gmiiefXz8^sj^C6`k+0Q?H4vmmW07=r@C{ z0iIv1z@&EC-EIbP*&i=iBA?yV8{vI!JL0e2hu8*it&x zLzwP*yQU2wW*=Er0+$uRxB7hGfB298Wj!PKg-b6Dbwj*w#O+D~AAwY6=ce21YG5V$ znNHt&n1LR|VQT4NpgJ$SzQ~h?| zKSJBe(Gsg|q1;y6R`^^yz}tTh-2b<7nY?~aWEbIU=Sgea0@lvGc9w|8+lXZ)?%ZWQ zD)%TLF6xJiCs5Z{vY%7hQ{HNO=}ly{y)mAnO>W^0o7-^DbO0~4?g%e$x%|W9tCjED zw)d|(IE#y0Ah>KdeQitV^435eIX=R5DCHIUu(`i+Yik+WI4^d{5_F>YzTL0;qYj>$ ztObbodV<0Cg$^KDx7J>ctA-hLGkRPtWE=;3StYZ{lKlIn`c>IZLQE$+74kf;1@CWg{to;46uemGf>aok$ z@cu`i#cM9yflqz#E?mBTjGy?!C-KbH>sil!V|8aJ2cqddtlRA*41x+Zk8yssP?{ zc_n#){9XpTmz)`s(LrX{xOhi0(GI^lVA1;4G0!qEO8`O`>da_OSI#!41*Zel|& zqVMDG+-Z)suk*MXdfRNg)w}L10_=uGI+v6+$Sh+Kq=f1>g#XOOwJQHt< z=v$)kURL>@J>0gVo7R3`KQ60%x9#4En$TH)#D09t*q)_bRXnfuk1xud8N@Z6%q|P- zhk14V>+(5z+veTgbjI+gS9N0v&=TGcX4>gJ38cE4}Ak3XyX2w$!0RX`VV#0q6zJ&R7K%PE@PM1Rx{K6G}*@?GkC?X>v-X~7{o`HW7z(h^dEjWR!19OW_L};IUQWy zJpjB9`>+rD@QMjzM|ph`o*UzwcJ2ADd`_eBa=_c04I@npF9#TY`SD^vrPTSdG{FN> zyaxIT#cgS0JLhQ3$F%FAO*+=;E7}s8(~n%Qf~M+Yw$&4 zsZTQ9DEL4{;vPwk3<83>+%at2CD*#1M;&Gn*6Y$*SbMi_Q!(*$T2PRE5pz+unD>~- zk860R+rb6r;AN}^CS_T^&i_yb#;Z-n?XFLn^*}v%pOm+}NgvZG^+UlE81_KYo6g=! z8Rs}YKm~S}Qs;R^1C-BbKd}PB`|iRdWksI2pZrWmU@-$`DaNxhck(YOHOpj!Ph0si z+6sRezsSeRva{hbE66v7KH3CbOmz4J7LunWmSv?7Besk_fG0^cfD|P^*yLHU3jvlo zT+yklm$%nfr$y;y2d$Kc48Cdr^W07wV8Y<{mweG%@Lzw!+g=gp{Qjfw`@wo$L(Ie` zKj^YhL5#lP=E_2LzUN6|*C`07pm>cJx<+5c*(XO0Ebuy<$_U+j1n%d=fU?Q$ShEqj zCI*s;M_*Q8C}~Rev3SZ~J#EL)jMkTmSKo;0J!>-!{9R z!bS|dEFpBh)~dEAXEukpYr1m_IBxulexbI)>l2kjq9XhOfg~OZTLnnm(D|;lK2B|m z-YD08#xJ*@EA5$(kEr?D%I*%N78|Nya&PBtrArCLJ~kaVGW$%s40IheFnR)?q3s_z zy8N+qb+tdPqop=%8bG~Ks;}Gp56TMY0=V_L!gBs?3FSQ8Or5^-v-(IBD-q?wg>i1Om+#7(B7}zJDpxhM20+N2SAMmGXL4L7whw1z5YTa z$mbrPY;ED;hp*t7XRl-J!vM=iX*?CXTeRx}{(j1{Viy3X$9v3fE6(*Zp)_85~9i8}~+AEU7)x zh2GnHu5+H9NWv*0qiu~gB+2|m;zned#`;p~c5K9g9>$+FI#!NAlF94HV28RwuU<|x zrW$N5BH>OC_%2DFOBinuAK^L^fko>au znXT^ztOBZ5+30zKp*4{tPLR@h|4%`4M&d7&TUgC}>OjA0Nh70RGiXL1R4En|RkXkF=h{Rj?*xm;>x9PNQ~t^*$$a#$b2uKk@y$Z@mMBF*?d_|io>S2634 zR&{zAD7^n`fHbGq#GH+LSMoGK6`}K>qm-xRPkAHEECZ);ZTvFdv-KU*xvxq5khhO+i|!bl?(+f6i=}}&Unvh6^yqn+qM zuy8ZrXiRe6*oD6wFn6STGih%`b65PE<%{DpZ#R?2@_F>97UPBX6bAlU-eAh5g z(pav?rDv8y3{*PDx-!7jtb3u6?XC|ia8uGQgG({iAAT>3QGDvuVX1(Wj(KG+vj#^o zB*hRP_(Y{xaR@2DBx3`N!^KnGXzrqBL! z_`0{hwVwBTE5mz!{Aclh`G)VTtAEW1eTD5xxhLP`ZEyH_p)_8uSn-GX0lkU|XD=|Y zJU$=cL))?pn!wS~j6e9JOSpPy@(+FGGB$oK?x(!^?z-}~yt%%$m*0Hq5`Oc^ z=W%AU!C(5A2XOBlXYqSazldLabB-K1EsQ#zNg#G z6t?PpI+m|05XnA3{v5Id#4+&iJS*D?+~)}CFX+>Fg7{&Z;rbw)4+Z0i`}_=+x9col z@T+vT`ask!eUl60tMTaF7(v#D|C*-=TSsO+WK8cQzmwfvTVcEC_jw$&p3bw;DF_-i~ub3bPc+`ndGK&lrOcaaxAaB>|KR|Ch@NhgB3h1yrZHd-3?km5E4H9&II zrzZXQ2Y|x*3%TvAUKq#8aPq2Mw=KVpZKQh)Q;-`v1F*ckv+K*tBA-voTU5`W`8+Bk zTlHal2SCp&jYIa9m*z4dUfNh{uC*^#<3`*?8F0QeGU%Rd$?Q{Ir_B~^98mX+=^yEy zc(cMlY~!!zI%nSb;{bF39tP~z{OSDOp04#3W-rfhbzyfIB%i&_mTtoiSbOE0sanka zXcP^H&=Q)i_WtZHF>>0o@qGy#=SCpyt~BGbKQ8Y#%Kzoix|uw7%asQ- zLC5+^JRBIq`twM;{>(Zm?N`!!Yic9!A#MN12R}X}*Cb1T7Qt!aXLu%qR2(C%I#QW&8__ z(}_b8jltwN>0qqLxIC8Q?RdVbC5@FXHX)!q+7+%}--)QMdc{1=410he+f2f>Y`70JAr`U?u zlZk{DW(3R#TWGdcNp#yg!LlyP;;vQyfk!WMV#}TnsbeCUe8?&KHoL^aw`QOy`6M?* zS(I?Q7x3iZC`T$|!7@%JhJ~^@-oP8@<6>#ZM45W>yYIY+|K~Tn9bfuIZ^o?*Klk4E z<6FM{`|2-v@()5LFnln=wqd$py#Yhnuh@Umr9UJ;POrV5L^>}T*Spcvh+}?AC*;Xn zB%fb~>i%{0Xd5Iy6{_c%`Xxg;vsXE#@oE!Iw$p&bWR$d3AHruauJG6AUy|XKbAkVx z?|d6x|KNSNm7%Nz{dvV~V0-lKNsApqJ$e(Gp9shs^@b;EhyQMa^bUrJJp$dU0Ky!wu#)dRmHxTVQTHERjCs+5Es%w^0FE_K7yE% z59RZiW10&ti-LT$2HhOx)79 zNa3s0pMm2@E?1$l^7_9mgICERUOgS+!zb7AtRD9xzw;K;$;S{4+Y#n)`~1#>13b7n zgR|XtT-y4Cr%sOX^8_VB|FCOC$x8QGERL0DP{^Hr-@3!ImnFD;z>+i#Z7jCa-{{B`0exG^)N837j z&mCv*`EPun#`)F9p2zzidk!+_52S0a$~}(vA*nwZTYBgIKLhPy1R(!vWthviek@^Q zDp@H@2_1~~VLI}pT-X@OgUKL#C9D zbY;cB`VL-*^eB6G0G<{YWWuuVhUlNA^1ymJm#3RmYGQRvI}ie8?t}>(<#*K6i4Rxd z{RCYjtApGYN#lbc17{N(BooV$KV(#I`#BC1V;V}4d7j6?9$kW=ARU&oeanhpJKz4= zb;Z$p{=zZv2Nni1c-stjKvaU-j7b+v) zu6DM573Zb>=#0*j60pzmE@!`7Rq%sErXS5Tkbj9j1F>!-Kx_pDQD)Rb2{4@w%Wi< z^D|!WeHD8Lei3?!`riQ4G8UR0e8(W~?EM~JDcmDX{p@Aq*;Yz-ZHIlg-eYV7tt+6r z^lLjp&Eg=oMvuHrCh2@P@Ym8bz2q~29ju;di)Ud+6RVh`p5(2jt4ss{8?fKop*;Y+ z5BsnW`|wH%Hv&t!(|)sQZx&!4pWP_VX}pZ@Zxr`N`7?-c^C0nBH^2Q_L)nsy@kZJh z=m|Z?DM1(XmT8u8>L5=$z^W0?b%-?Hi;l}M5i*d3iNFKEIP1dF20uEaZx0Rl?RrG? zF`c#z4kRXUIgi8>;#H(u*J~~_#H0mv(tV&2qvXNuEo&$tO&f0~r4%sr_ z4B*#aK2yZxqr&C#S}?d0RxF7Ee}T{7nx?viRr!_ZXMHT5$>O4S@+I4>r5lYk8G|6^ zL`I-F^2j7|9r33u``|~oOjDUh!N3R3I~44|*kD_n@2(Qct1COL(NIZ{vCi2b&;TY~ zWJ8k}kfpr=S?_6r%%?0UpJ_$sE55GlYxD~h@+Fc3889DU7D{}HxafZuk`@0Z;2?VkUucYYtf>)k)#x^Oc{2F+y%=&CKt zLZ?Y5pz>d>6Ow7swbhByH?y6kd?fsc^a+7UHV!hzWJfO%5wcB*^h5p6IzVnYi7(zJ zmSs*8uG%LiH0;U1Hr9dJ7yC>ly%=ybS(`pZ-7ayy_$_b3+rRREi#NRX)&apUT)KjH z{nMYqw|&ohod3!n#yZxXMlgTW^mTqZhw}&L+X_~4M65em@!=ero+64^pT;J~&~!a- zf`os5ZkpWUPg3aXiA*(Uftby3i_itDR=yy{=i% z?wfm2mu+C}BZ2aF+-+*MwxQt9a{zCtkJWW#=c}sm3nc%~D?C$wt-cqp8giHR{x9?v#Il;pxNA=v`Y8R6b$cQ8h z^K8C{`=hOy3;E3V3rk4lCzOv%CSF|aeqt37xJuhf3+HF?D8r!1aUxCjk91FISQdLf z36+Ut9$aVr!-qd}c(JZz|BWpGY%ABFcEC;gj#b zv%Y)g+7W*0kDkQkqqa5pCqHlzpYh;56%_ut4?m3$y>O-T)N7+D#q*P-m(VQrIb@2m zoH#8K9dWzwThkAI(^p`V?J!^FFYIFh0hxcdLHpoU!gv;C5gB$HnQ~vt(+byDuq(g< z#8uEHFXDC1t46Xp;ys<8J=kk7L}Ey28C=I}uNtbg!AqJBwpG3j_-$#*7S9FvJw73698}B#X<`J??kY$y z(&-AXNhW5vx2G(G#~Gewp4vYn@XB(VF4p8>FqHWUAR19%8urM1jd}C$+<{~+J1<{T zxEe5-`SUzAgthzy4FqKXG4xX|W<;_XBamAA2%1;Xn#`??I{@uzI-Q!i0iVQ^(II`B zh;v^N8u7UfA=9#cMz40W@&^G50~+UKOTnir!B(br{=}qI2766mGhH`+jGosC)uex2 z0aJza808nVeRfF=pjOu>x@>$7@CXi@Z}anjwSnoaH#7U$$}CSS_Y>j~uBW;4VZ6rN z=U{J|ZLAw@{j23ui=S6hcd&mC0Pn*-?8831vcd>VjA03Kt~{OPTU3qr^$7uyQn=|< zQt9pz=?0~{Yv^WRC;>&fyF)sM?#`iWD5;^lXMl(2#qWDv=Px)f_St8zwLYt4_qwF0 zC9R=u=A$vHhGXJT)Fs76luu`7O(eJxX1Si;uDm$yX{No=YLX~=Bq5>Uon zzf8eq3E^3CVLb>^t_W)-=rg2_D=O6f8p1Gw_`}y=N5=V!AV!Hwmwo1=XfuU`kXC+p z1)R_M9TA{cMpzaX{ce~|Wh?54Np3yKH%%wGsPspd7ASNi`Z;AihlhA~W?l)eJeDcHkvkMq z!hEm)25etccX+Xk_Yrzq*Bhx_#wRIyBk7v>%V}gq`;YAxP0zPIi_K=5kL!8ujrDL+ zu1V~D^BU@rQ`r>-O;k_2tn~QbfmedM+R;+(hy%Ec27ejewQC}1 ze9_!sNb?U)(ifF#N_l_SqOW|VYzaRfF1wD5vcS$Vit-$ETVC;6nm7He{LyCO$wqkc_RxztBK5=CR$kf z3K;%lv4OKs_x!=#oHk)KxyQD=#2Pd=DGF}=6dBN3SMlArn{N?0r#MHem0LpjOplzP z;VcdJqV)iqDm&)<50#(6_RvbMAX$>B2U84k$(+_2xG^nq7QI?nBn0Z)RfN=|>cohj zBO>V8lBK!6rIQ~cE}vMG5@RRslqoqFa4Wc!+{-pmjH!8Chq9WSAxdgrOW!#CuffxN z{%d+k~frlJ<}!Hk($v`_QDr%ky) zT**52StuA88LVr8t-)_0jBB6|Io=xstZ!F=Bi!26+Z%{~1Rh5){868-oc1Wq?oDcV z_cnCHyfA>EGSrH^!4>JoyrQd5D748bgeoiS{(a9;l#Xd?Ks{tCaeYH=?eOVMU514s zO|G%)Mq1OTN^V_J!X6OyTqZFRE>6d>V43488tu28^4ORsGxNk@;GEW?LE=Q#`MC(W zIiN;`R7as*Z`F=??kRS21D>s(Mav$_P6^=suNcdSczaTs#=p8fm|w>-vx zuZZN^BJ~FsKj~RK(aG4Xu30oEL=aI4p&xAVTTH6eGS<1@?Q1@LDfbq0%!_8Rsrzii z;j26>XfR|&lIc$`tyZ>cCmB-86VEg6z^pqeMx2sWO}kzBJKoQbb)SH&iT3>O1l9dy z6dZI$B;zWJZ1#Ry;zxzgmlf%w93i=qvO*xfFqyLrd9Q}sRm=K|!i)V~&f%1I$TgM8 ziYq!%zrT&We$m!^82pEG^>^xhel^2!V2TUg4iW|3TH(K|-#RwH_Vlf!)6agO8=&^z z(0+d$Y6SbcrrJQNmnKGjeeOI;4*Y&%X$LxNk@oTamsd&SdG2xQmi!?cqUxwG3i;0F zsHDrV=z$KYq-d-zZVU!b{Ft-JaCn>B^pjMC`oPt$3Gbsma=fDtF|B?QVAFM5T8htA z0&LhaF@J)*>Aw{I`sh=5f3*d69+7tGM>a8^>LCmdhP*^lTSz+{lW)i5-MD!cs%>*+ z64+Kb#|jFN@VAz|{kcPkj^(TqeqS5e@W2q*m&uED2`moZ>SL8WJld=>Xyjb|yreWb zW3hGAjT6xm)4$dAxE>+dQaydN_xN~}tIsTq?wxE&O<~QU<6Pf^;VRNx5`>|uBDhWQ zne%i__dL{mR59LCP5yY(kL7A!y8tcl*vEo1WxzM$SENNr!%dX(xeYb_?#N1ylCZdi z2oHYOa$Tzn5dBfsPrg&KH+i7E=-y-dx~^Et<$cJnYw&ubhqWdj_#M}WVk2t zv3^gyR;^i;h4BF40fvm5?7N;5{G+lwkKJ-1Ak7wC`Qd1E7K$Fa)%vI1^#O)h2pY?T z-2XYWn_&0$s+MiXg2@BWLYSfe@>-9AyO|qJ{?ejncUoa}6IZVw9p(FTshCC#;cNBk z{=nSJIW7JUiu1*)7FJviGwtkUie*)2=!b;6XXI~x&7t9zKX*m!^R@R>%^NFyDR=Pj zU2)(^fi;F9oD8_)7D-)TD@I6 zqGowDqn5nVA`ld>&Z+ggC#q*v(926yI5@B-OaG_qHb;!(wsBY@VbgL+hzWq0LlRj)~|U7>+!+lDal#!tpjF1sNc=WpgqNFDN-BiJV=hLddVWO^2@@`L0y)L z=YnfWR}wpn)|s=Tl7{!@_r&veLB>VZ9sR=>`RW%E&sXCFxp-)LmdCc;ND zyJEyc9b&!X)RPk#FO+;@B)H<0N1SuE=|D(TSYte^2F(X8kMyhbu{->6qFGjAES+j$ zoCNP*z@5~kFRBk_!(Kq707=u6j(9Pom1T31t|Au+P=5N(?jP?jX5$;gYiXx{CmMf% zo<(@Sk<#6Arg5ppY5zMJCps4uaoE*({EK$oacT{>>daI-6Mshs`{$3e4bc+$)L0M~ zc0W&VQu(`31odNwXnvMs64)EJl}rfb=&N7Xn3(I_)J1U9uG8MU<8klhjFFM4uvO?vsBJrD5TW7-VMts|<8^te|yv(o2$=&hdWCDvx*_K*nv0IG^ z)usJGZU2h7s5sPR8Rik;iBqVhc?Yz^s8o7>xShVGLguko0{Vonp`W`=^>E}l7u4~7 z@b4~B@Wm!YLDEYZ5z@n6dc)l2UK2uedETsPH64plIL6*VT;OI^CcCv-?{T)priJ|G zMDCbiu7yOyH)Edy=XX$DKeHiYfCti0?3IIyHiI>fYN7Q_c`4racYmT+`y{F<@lod>=O{@Ix2TFlZlpci}I<+Qs^O$)yOU^Gv9^bfkHj$fEoi#lju zJw}e?D;mbcIv)-nKcZDiDD-Bb26}4;J-*7T?+Nt zBfa^8D~)1e$Cw^o7mxQOd<}TJ&uq(^H?yR`!m4Lc$x8ziaV(v{slS)Y-S_}J4HvzAYRMK2XQ`0~8y?T6qVTQ&Y zU#Y6OKX$x2R@;9AGuv9ig@j}3|Ha>9f~9b|F8IQ%{1d9& zW5-77Swk@`IyA&4n=Fi)l@6c;Um(C7xXfIPr%dxjC=@59{7B>`DQ-v84v%-_=c<-w zFPU~)^!?IcpyCy#Bvyzq^`pAzImhe@8{N+-|JM2blsgj-3PxL%@=Si@Tm=!eg3|N^ zpKQ^Dt%OMj$&J2{+tdAKb|vA9B)@O6jy8BE^P> zV{qFw9#t&6t4iGfFO~}*>HKz%D=Mn2({Fl@w%ctl;I~ZPP)VWGx_AOWC!uzb#Rb% zgo=?@E_>MjT(TLL-y`Xw(dxOq11q#3G_{_!#9-^GE4QOYFMU+l-JU{ZNY?Rd+EjNi zclN=UniI=s2f~Kd%|a|3Kf6myDsw*=whpSgOg&&4(6Mp4$t6*_=`$7w1G_H8PdeUJ zxfTDgiG1`P)IuYF`QHE~B=JT9d_-kxjcCFW5I!ND-M!8n(nHMJRPTDwl6noiY|nJM z#I8AcVvF1xM$h)VpU<+z*}MreT(rGv?)B?kUq1NYjr4Al2hiO4pZpH`oGTwbr5YJU zHj%dkiHS0(fb2N^bQbZ-;lA3fBI%<%ke%q)t$6O}U-SFt)X2aH1isizPm<}pdLG($f zQwK%wB2R#4@Ok3kEe6g*O0PnU>BZ>pjV}0Zb*Nha)DyCR{_vZyjOV0}Ft6;rXWz%P z-)~6Xy9|-hUTpv9MoLr?M!pjb_-202-u;v4N3u^Xo;y6zf?yu9aHrWcpIq`r2%obB z@b~4vjJ5mzciM8wH?lTA=_>=>Ptli^8O$Td+IgX1A^Zzk<&1>4H6_+NKh?oM1CDOb zv`~61_4m)7ti^wNyZ$EoxRq`R=TxPN8g_)H<+U>t=@;4 z+FIj*?-;>ZdaA%r=O;4CLl-?tf#59ivl%&qIhY5ts9gv-b8Rq{lxPiMgyp2`$zkjySSBpuQZ8J2SK~}$0mp|UzwE#?lJix7lu2JBU+}rrasEkTSRo|zV&$k^BMy}Dwi~;X z9`G4EaI3Matwaj(YvSboA?DSt>2oMeO&e%&ZjY%zpQD{49x49Ro#i2YHoX9TSL3&F zVtpPK>BVz?_s{xEj8n6>uo&#-Zs8;kr0WGZ2Q08)z zLXCiqt{8DI<#>!e{CV&dvxS~lk;N4j&GF%@?%nog3PRfJbQWx|@D2A^(@$80`BANM zdSq$M9;f?-xeOb?rUnz4*WG5dIppJv`x-{T&#QxYwwhw`8%4JP!+0&_F-l(?-GLu= zlBLkeQQ0tc#nSO*^mzj!$TZ&w67NdV$xyjHXL4;t)6&2tFfW2+t+{Tdn~i6>sJK8? zX~6!o24Ds(Kx62Jc3@f^DjEXk7Q!}2@=WmH&|=L7i@iMxKiKc~DyduzJ7VJyaDVT< zdD3<17f&kHNvjNj>|wpl4V}hFQ9mzAR1X|Xgml*<--u-Yu}3d=^Bu?~*ox`VgWJmj z$2W5qMm|1$-4|q`R&J0A6&%r?olFdmuAAcB_npiwL~Wcb0Zk_cZh{p*3cZ9(4$~Ms z175x+d2@DzN%X+^a`@I!kPH07vt}4F&lQ$&JF%`f5^yZ3>_uxU(;87LPDS9{HXAB} z$4(0gV8sdG)=5x2fMkt+r5gugReOlnuAAO^$y2n? zec%AKG;HIw+9!D%fVuF)EdIG3`3|c^F%RFe5H9*nB2Nuhq1R-*SMU~A%cU@cGxkDWo8`m=ndUQ2 z^JirOC*3A8>Pk)Cs)(rkcN{GDXV=n1o?EvjA!n2~Tt|vFn}KL1R;U(vK+!duajw8X zJ|t3QEIu78+kbHjhg8Y6PgDnK$7=5ktfe?V;#^91OK`!w(!)o(Sc6wG|h5~ErmjmVAtgj;`V_oAxtf!SmmOZ6xWVCy@SCr=V=~amgw;! zo;8U7Z+@Fgfj}6-Wf?XRor_`mJ zXZ4V-*vSUoEFIC`#lap!mdzU4`oZTndrle|t$nxLwVNUNOOqr9V5NEFBRMsYKe<7F zAtlXc#l$ybSqu%NUfe(o^n!^WLn+c-B5DRT4S- zO$9Rr+FzxDr<^TGknzrQ>Ee1!6KLQC{ne%fLT=(}xC#ROCw`x8EP=vdajvg7*_UPG zTJTEN5D?EAqMSYHFkn??MqWsGYKv2DFm{8URwDK6HYM|}9Nx7k6}mIObN(A%H7Yb> zE?kg%CBkc^wMLYI7bSvvvQ#y+eX??tN5gjDhJ>JOu#-n@}|EMJPvqYCl z5fwHoKk#L>wc6i8GkXK9><-yOsumM)utsz0({w`(W}hbY;F_y0{{4&@`fabu+SG&v z&J;K9hcad2-ZqH#Z<`MB5j!zSiQVbP>eiBOCvLln9AKE|-29-q?quwvy9U9GHnQu4c-WNlt#p;iWoy~p9rAVpz~Ei z1VT!6@jmDBu0v^ZpEIhk12$S zLvdRw-7yE(Jv@kR&2<^6hq(H9&&w!0G}}c4^C6#_=o|KuakeqbT67Z7a8~>Hbb6kb z72q>Iltil}-nH#g46Sv3Q!^%afq%v#9R58ymG`0=LK#H=v_&dqELnmkuahRdpeO<>bL&hD$g_xqi-QyF z-D>3b{LU7(Ez(T-2N*VwU$zv5*~r80PkeOVee^k@s(^CP-%JiEy?U`El?Ai7Wkh6QL+CM;XQd4TTw&^K z?~IdEY6=r8u0PByDQi%)q0a~~O-q~6wu;zqYQAOsHT2C=n^fcZmJJox0A2U9RI*@K z|4-aA)e_!A87<>)$ln7>NDS%>WmMGHi5QRcOG7$$KBJ%MG-+dQnl`djpk|!bI=-K7 zD;%nurP5B72exnsGyK;Y|JQBRW?!$xg(4rYYmvX$)Axtx@3w_+z!8mAWOr`;QMW@v zC&w=4Lav0w>UlhX+&l}yLYKv2ymF&~LYY&%Q)fguql~_RF<$}{VXQNUV6@=wK8gdI zH;;E8V<>kMPEtgYkgn7EbD{s-!pY=kRM5vR!&F5&O|k9+?wUY-%v+foU3WKU{namf z80}@Fr9;p99-KcrhxqLCHj1PSi$L556(Y^2gn9|{c$Yz9BS*JZf(H~cF?}=LcXNE_m&>x~oYJ|(BI@nx0 zkTobxK{||p;$Mo$)qbyS;6wb+0K|j%9p@P@TLdx%pDFnCRiCnwn2yub^U z(^y3L*MhJxh*!Q)*7;SXp;I~}MOMiI9BP?o`WqouzM$lMLS8hZd zYd8DT8uxaN_715wEuN%;RIC4$Re|0MKUOA}1nHAz@=v+GS=ma@L8}qG0Z+JomNg% zAy00OSoidN6)r>ca6_sQ<}7-{rbt*$OEg3bL`>D?N-2I5$7q=1Oy!nF;m81-@h3iK zYyw$kz=o;~`nvq?bq$~@N}yBOqM`W zdq1U)2KkFD?z{ccpLjF#62 zBnrBjyEEw-VUQ}H!w%umO}M35XO;t>_m)#)9)?jZo8V`yBfC{P;$$kDE%x$s8JynE z)S-k-B;hgTJVj7ln?84Fl34zqv}jsd?5E=h@=8(&aHq3H12qvA@l`gu_HBu|v)xGY zrFh4TMPL{KBVk2MZPPzztjBCY8_}ih1oTI$to{h8UqJtSp>eDp*WMMLh_4Jb3IHk`%g8aDCJ|o$Sn? zw{S3Vf-1BU#O7`c@)na91#}+N_)EtJoe-)K3GIh%<-W2O`}Ni8C)B7oqtiIEl^q%q zRQ!3Jn@Z$MSDPzP9jwx^lVzVzo~V%4|G(tp@BK5Jm%|-kX8I;#$Q?2E&kA{ARlOVM z!E~j~8`$D=>f2OY&oT>dQl=qXFLGZ2X?9(*HLP+j?I_j5Vz`NT& zNTaw;7ovq_P9z`VM3aJ?!WoinBK&c!_}9-MN9U0QJkAH<|Aw4d?f*Uv4fM`LCn~5e zd8QgmCr2IK$JVRrPVMy74Ws#34MbRU&_8G+Vif5qEdLX@mT1g4gub(+rYEr9tTQl| zMtB|g)jOtqlKZo0k>uSk#b#+8esxIq^{#Fw=?#qV@w3X7syW>FTb7DQ^F|EpRr+xq zJX`E|Vs>Gc5{BK8U%Xx}%aar{XlrgwYh+TR3*q^xx#O*>H`zyjWn=&2&)3Zuh$4z* zl&gPgrW6cEWxpw!4>z*%)T&m(r6Ondc(42ettyhp$?lyTTSKtv+cnco`a@9HVjd3L zmg7k&%H*>pXenjcbi&WBog7K~QwH|PtTN7=V*-t4PKr*z+n&HQxOvnagH^@SJ5q(r zu7^c23@5)MeaDA~?hQC3fb8rUCLR(_<-hV&lru8URnHzican9syc&fnSjuT9#PhU# zm^MIH$0sZhx7$)renL~rN262X$Uj3-x9l}xZ6}<-VM1?fR(M!OP;~_E)YW zyRPo*_(wVBXYInXx8}Y#kJ(R zkF+`8(coXAT;tDq_Y|e;a0{>g1I%ft78i(V?}NXeLL31*&$#G0C!5~79}K_|0dWil z%;K6$y2Svy2t3ZE|15?x(u3Hn_ctDr^E%$6I_ZmPYWW#jI$91&f5Jy{D?`0rpR6GI zqN1q%EGU$Ik%wnISPsb?u$d+&0JLX<^>#x$$A7bh`F@v`26*Calvv~k{&n;| zD1}a7tUS|bcybJ+Ii@F(48gQ;y4j0^H~|Mh+PJy^)Z1d9^_jb;;H!wl~%9IIjEWfUre8w{>b@ zyqtUfa!zFuN!fRO*EE3i+ZOD0{1LAqwwj*Fc6H^l-7%p*v{WUJ*(7(>PsMZ@kF6NOUPB@B++=#d#$VO zKk2zEmruV`5cPH^j+(xX& zgGi_x9ql4r7Cei*pCJ_YT3H5B{+G{&#sLb=rIEH<8%ZlpQ_J1BdG!lghQph2XBEK=d z@%=vs)9OqtgRbq@z?^{{8x=RQsWBJXT=#aPZEIlDAZ%jPOYhnKA#1QN>Ym#6P1ZtR z+`zC@^M*uT(FglYQC#tapqNx82N9C)%#DGxZb1k=9v%N(u9mE72lo&yKaxlUOvRU} zS15M|&hv)s;2^ioGFHfp!YyEt;f;0O&!o6~ zYwnpf|C2%qe~AP+8+>Wv{EDfcpykD+scN*g!QRG@)7GP1z6}xQV*&w*rQpkc6vc17 zw+#qhF7M)=q}W|bDYc}{@X5j2>1$*|mZ$uRN91HlVoyS_6-|`#_b890 zU7iJt)Ex{WOZs6XkARlqVTZ`7dN%J;OIQ4|hbH>tLWJ0L3p$Hs04r$_z7%1ke0@(< z?YI*QZN_`OS@IBlS|=iizadA6v@?`3hyPV9d9c(gEuF%Bqqw(n#-8{U#=t?&Rf!1`Xk6HBqRn^*eP{=L+@H7E-L!0ilxb_GbCF9wvphZ zGo=u-w$x$ctLuWKCbAb%oE+AJcIF;oi-Z=+-$&k#*4BMb-~U;r_c8$VO|eW9LMFUO zU0(_Y%pc7DVMM}?*l{j$0iA`~90Gytz)ywVwZGn~{1&ZBbsMKHJfA-IM^ULb`-ac8g zXtG}pP?gU{Oz1I&;KoHHx&=LjzB`8}S~pH=DJK@vt@cvT3T|NRkaN?gI=iYjkXb$B zXrg^;rQ>|L;GEUXgmxm<9)zmk?-EKADk1+d_xsZqCq=g49O1ode@cJ!saeLs6RUk0 z>x7Ofescu@$f=fsyYU?2eq+`BJ*#rUdj8k?<@L3pwPE1}j*Tk4_cSdJtW>ol^;!K0 zs)yH-t7R)2P}6N?z{@vXH$Jth^j>L=6kO$?sW>Zq`y7;{>G%Tjk~_>W{5 z`B58rJ@X-kF{t}?w-bbnGSJro#tpqTRbPEe#FG?Tm(%iSZq%K?#!=@zlaMaNG!Eja zk(I`vd&AFBybTR>HtRng%`Hh-o5priiqd*wB{L#_syW*ruLWS->4KEl%PNcIJ$S zXJxbV>{(7e)+#7jmmCoX*c#;MOhW!jn zZc5E$EG=wp#*wuIcrU~ua#R^QezJg|fdkQc1?yt4b{JwMRl4t%5O=bX^LvA=t&(cq zxnB+IB6s)ze`98~p;Ng(s*?2e702b26ME-y0P*G*bCJ<80-J`l+pjGhCHLs-7Z@%z z*54F;jT|wv!;6ifGJ3zjoZII96Nu8Q(xbXt5g#~gSvVlk%3!1%*}b?kwS)12p;l;J z!r)4|$l=7V*p}8&TdN62t@;T^xDPz`efPw;_(%6b(-MOk8LR4|ENnt7ARVELUY8MI zok`(k;tkin6c=-(v4&@1_+KX#1ycLgcS|_;I)AR2O zEcwNpn*yym@FoVkFewEWwxZ>{;GjAW{f!ckZdhj|D~RnL#oDa+hhQsZ^7I6kZ!286 zDaPN{vhFDED$4&j>9)b^!RE-e@ppf#)W)qI>OR2wbAqUTi;r%98EnBC`hP*rm!41& zNvgZ;GriS}qFUzDDtGp9FRZpp!6>V2mcC%(Vpg87moh)Lbx+?G8fazPDlC$z8)7pA zJF4`Z1v^nSq{!&C;~lM`lT&;WS`vFKx|{Nd)rxp(;FzjYgrpqQznjCD$P|rS2`{5E zf8%dR`)S<=6-umbxP$x!1R2V%t~>17z5-^^Z`J7*w3LzcZ*m4LGnC^n{Y6;*)X6Xy zcOP_5K;>s{|DkRXC4Bxyjm+e&ZPq9!of?ce@LhVKF|z55f2wCOVPcXLQrP|KhjjF+)9d9zx8W7%8VFjOB|BP-&_G?94l9{{(SVwqgMjoRP4%k z%BPW6GjExxjKoA9g^Fv*iFDhI__nPadTo43mk_yPe4S#MPA3u^EocY&%G^4GmWPMM z^T+#lV_+4cfMvwsk&zqw`URnJ1iSB8&QK-xE^xE@;Sm&U?7eYzcSyXcIlEDp#S9q} z?DBFtt?D9xroml#;82wnN8jZo&jOKJa}TqX$)ZGW5B+U?Q||f7JdZtd@vtkuwy09T zu7k()JI$+bM)17Hl|PRAn#0?g#;x!AwiI~&T;zGE;ET(#37Mk=&hz9RYvHb%6|3rS z?xvRr*2WW-P4I+oH3t6E8dxHSHE|tHSUqeQkU9d@O1}2xpVLKh!R5@yb(@;|EVB^( zEnDcCe=sI`bpAxY?Q!VWE4&lzuaA@T zyuHehHxRdOT6|UX`?F??tKTL2YMm!ATK=esXNzDntaoG)@ zfd2z(*PEw(r7B>SHCrG1(+M9h*==j9cTU`X}7|luermri*!1abbSmbX5h#Qw{4xmDjLZPdA?%(GEivVAJYmZAvs% zMT~In6|9ymmj%MGhD4RN6Irda)W2_a_NX;>-77n9-K*YdfNLB?C!#r-;iZKHio%`& znN(?6RfRsP4>a*dIV z0L*PT?v)5gZEG@Nb=fce?WPDG$eTgCaVCMyWsM+7{kYdU+Ks7|Nvm*6vD#~bf^j=L z3hD`fw6EY;fa0OAs4ES5-Vv0!Xha$|6TEF_T>Eb2pWKI>zOo-;_p8x7Pe03GHQew| z65FV#sCnc7y_U#|9Hu6ujY`NglCQp~5}4(qEGABKRGs8vn^Y67dPtv8ZZ~h)FNz%iDn&P7toW`7){w#$}{}*s_KI$VAXvNwWIeFe4 z)E|TKOnIF=>8IKO@#9(DWC>7Qz0?-`(gd9yp>e1c%E=CxH^KMAwE>Q zSx|goioOm)OFVT;XE8ne^pNZImys%o25TR(Qth=~L+kw5LuH17^UDN%C2@F)o63a& zFuhIL!{|nQJ2N_ZPr6b4yD6DCDp()mgAV0ylNGY8j!kEXy`?B8tKQvq zBBA9ZNPwBKF(6oyoPj5+OL8+{)@w93-hk#y8qmfaU|$G>a07XYt!xZi112d%Gh{d zLm>P>9_sK)WmI(XrlwObt|fBmEX!miY;3(f8crlD>*msh`284$64hDq9-{avlt2}4U#;@jhnHd-yd1bW-i znIJJUdC5HG?TSya3gpRIADL3<5Rlj3D~0+?`=sz_2dBD&S{za3wR#E2dl`s%{Y5t>kv=!Og%BdbwuS_nSKuq#vUB+!9_LCvE=TF-P^-*={*JB$gUs zC9*HA&*sQjy!>7DFYf0Hq{X-KUBE1gEl0ubv++e|7P<1n`e@4U<2Oa-sQ1jrP&nTDKHNqKUCNZSB-YIwNF@dK&ge(-_Gv& zEu~z1(J(qW&dszCE01x_WnHNpxxv5C(f*W1-04Lrhe(goN5G7mqwzpHuH|QjC6<B|8tU;Vl>>fYTpNAy#R{v@u>36*-^^EMlOgX`L(f`$Ga-cCvE6Hbb3R9&5= z09{Bgi53xRh^YE%gQfe7&l2~32oi@l#gN6&TQyn-uO3BqMI+I1F5CkR-#Xp59aQ)K zWQ31WeR#Glp7T`?M4Sb$?-ibyNbj*_gL<;Ljpg~UpBmKpw(KbiN97XUw&IvQu!$Q) zPVLNQTc;~>iWz`Y1VIHyF(TGzi7U5{rOa#H1-B0J+%vWfi-yFWolcl&Z`wUAHmPBp zQ!}}ccFw-W<-5wXHap%&-?B7Wh@w0$8p&MQcPn%vDHF1CU&aE>!f?Jm^Uk9SfYH#q;XMXizLQQ0<=Vd{)xoe0vOw!iM`Q-om4&sT zN<2?4g3`fV-gCfLIBRv;k1rgHe(*+@ucdm#E(UDpa*E~y?(FOshJLMoL!cQU3&iEr zUmV668ygm@As+Dkf`Wuf+|jas36hgvl$if^;?HYw@oR-A4P=4padx@BqACJ7C5PoD zti*BYuSd|S1MTmB>4;Xmk?=EU`c-ojTX1LHP_>QIp|P$6@dn(=!-N$RotCPD7SzMm z4t<3dGRWMN6&eYl3fm+TLY`d;Lii~C9y%_owsIwl;C@ zOt{z^b!k)}d-xz+S7bdS(&aP+YrDT;_QOn?@GbVW(FFo|V`j!_a6KTfXtrZBEp z!zh?=JuN&*M978O9dEC}@xmV(f>%AU4 zNM%Sp5nYtKgRK#j&3A#6qj-544*JZ#d#$Up+GGhIcv=q;@Z68n`lBBwQI~~0 zm+Ydr)#W{PCl)>1cI}u7{&106?x6wp zer_{-%cY**gI`C_Z%WK2(;m(HjB!Qeua%QX*tcOS*d$h>^f~iscaO!$nJWJJX7~$F zMZ1DGb?K5fo}+D_d175$*WnJ*`pZ+=hd$!r$!^JB+{gg+(BSsJ5`pu!!9IG)KkTJY zSf0q89qSwAqd44Y7p>%TJ-LXc?cZ$Z27tE7Y`Y8CI4O< zfZV2$Qjfk3%c;D{cCYh`cR9T7@y2Er*Z@cpsH|v?ZlTU&lS&-n*{vVN0`0EWPYh~> z(jvZ>m=EC>;)Ri!!j>JtqcWcOZRSk^=&l4wRn=DY2K>KysfgE)frr_>KKZ^x%u&mb zP-@~bzrUi$jpI_{<|WnftDfF))syTd$-%M+{&f-Wo=`8h{K zLN}nkX<{8o)fLzQL14yf)_KO+A653f4{4$*7gTf9<<}N9`Yawa_Y#OL zAwOfeK&#eP)x*rhGS4hdrJ+WflOV!6s7>`wlmNBXGXe#e^_zT?M^b*ZR@mPP%| zz}bKlNTv;!w1TO}?x2^DZqX+x8}LQYOoQZa?DUXbKX;0zTu0w4K$G$Q4*tnIUm+b=a(lY2jLUs62I-@| zAPbdk=PjYXOy=_9KBJ={60UHp78T)C&8Fop|An%@B!-A`xZ3ZbEK|ne1$F|67r^dp}3egDqHN?#! zp@PmDP1?NcWRm!x5k`GA;IdG4voW&(NiA@cpXv(^vm~}Ax^i3m!PmM^wy>_s30?J`xr$=b?l`9p|ZWr z(^~Q~rSHhLJ&~ih$+|M+y$L&>fSy6up>1mG?Z7);9J7lh=ZU z;M=39CQNXmQyOcV0V%CX-xMBl5mkZIA9Ux0A%@tUGmPmH6|?<0gzsl< zwtuhN%Alv22lG;0-X4;{}D%;swH%PD7oRQglu}^8+a1-4w`X4<5Ga`21)4gpBg}mKs=N@?iD() zuyOwtxCZUQr@nc_a4G*P3cFj|h&g*)r!HL_(WXV5Ep_g`WdOAsFU6PWe;+OqTO*cR zHKR9rC*^B$Kw!ayH}%G;(%MH62qgmp=2o%;7q(xr!g0nhXEc(njS^B5Y%34(=EiW(Q~0iP{tB2xUGn8zu|F7f?G9kUirU!#oYsXA?hU5`eZXobeeO&d;8yy}ug;q1|37-&mwU&yAODG=^KOlk73>wza7wz>EF%2TcJd;?*^JX1Yq0+fEg6Cf&F09UvjO^5AL* zP0;|??@ev%Djyc>h-s3pcED>sjT6MhO#Cs5%)ze=vMZ?bz?AKC?8irDWVu;88~dY( zK}}WTfo;|H*NzJs4Z}B+IfC8#>-Tnue^}b*&y3j{!JYr#V9h>yj7oNObSN zRdlpZ1QSUH6uivHir1il_+Q7d2HLNeOId!7d#~&k0|bta{l{v5JTtH*Pag}nS`{jenyyYujs6F{maMbS?AW)$(r@aiKS~{1Wvx`J zg(P|1Th!+q;uYU_=d}qrZ6K(Y8FYx|9j*6b9)-d4>SE{2Gt4r}OlL)uh56AA6%=`Y zMViNzyJGu|63ItC6<{MZYVIYt({Sx*k!f|- z9&IMH`25EJsBFrUy^5x=`_il+=wxr>NqSmwm`ZJ8tpyL>rWe}pJa=G(Z?@@Jniqz3 zIM9B)wN$H~vNX$@!q$+FCwJ<>m8yawW1Z53%Ch19c^s=~o!F4d0S9sZC#ZK~shS$l zvuQu1&vD=1)WO$1d$eisc(iM8DGYbL+$(=f9`6iZ)RNbR^KSmI`B^Kp=GdbSn$luZ zZAf1NdOG|CTu#bAAFCxw_&CYikqH|&i8i{9Kt0HF%2==tl1IOCw8gN(@by;~xCfp zy91SV`)d5@Yx#7^&*J>J{bn{9=r@KKWnuyrF|}jbW1d>>nQvMHrK;pb^&Om;%4djr zR7kf_zKkN=Ct)%;f`FW{-~6k^Q(thAfK-cO^!r=F-ap`?F^fD5zpCZ`N7PxrHTgd9 zo)V-5q`O5@Qo5v5ksKx6-Ho6KNOyx0N|&Qs7%*UT4H!~`(K%wk;d`#@e9o`WA82&0G@AFlqvtGt)4ljJnxFb5L{nGN>H}mY^wXbL+rKFhA>vo5EuN8 zVjZbfbno~CdU8Rc=Id^-Lv~A4V#M~hJFq1(U+}_SfQp7wAJ!G8moS}0R|w@%E6W61 zoCuj%u9EQKe%agXj-I6Ug@7yaQ*zBGCY>BQDx; zj%%1sD7$W&o`etd&yPcf_dN*UBoNsWkS9`h^$TTj`wXYCugm@j`nfx8zp1naz8Hrd zD=N>m)#2)Ws_Bg&GqaByENJ!zl`WQIyqduhx>doe#Fc93b}UHezMA8t-mkPcs%(pV zPj7&clHNDLp#sofnK6>~l63{n)L!S?2-!8w;2HTRhL%a4y??_NIjW`X`6Sov+th=ij-nBFb+qPf>qwo&{K4(RC}ISO+%#yr zvCFdnU=}^s))$@zaV@UA_9m&!J0e!QBW>TvsP7z|zy2+#t=ipd7>?W*f`S+5^MA{E z7&Dt5v{eU%g-8YlDp|7#o(cYm2h(->)8}@ky2`B|5w8hqp7PC(db*PPo&yai-$EMa zwqqFEzk{=qe&?lyZqo8+9u^(fGPy4e-Hc`KZbJ8A0k>a>Q0h+4!9BK6c+W?J2e-aW zi{LZT!j7V)M@*qAj`X)toilEjT!-oVV z&ZGq~TU+XF{RG(jw-CU$y$Q7d&^b&4v=t@f_;mJl)Ws6p-l$0sGx3kUv3W20I>Db@ zK@$~27%?%U6*6aL2Ryvb(K2HX@mNe;6kh`t7}hc93$#WiNt-oV`vOEvNT|ka0r7C6 zUr}4LXuVx7C0y=@jX#h``d>BMOOS2$0vh+#`xiwi?&zC<4oS}Lsq=Yx*xLAJO?Ap8 zUhIY7F1Ovt^4-%8V_FK>&kS-2A=;B=W-OuIZ1|Q<4kg zW6i)n)_2cz6q<FAgnw_$-PQ9Dk5)5#^;%WBRPeB*(z4Rp#KlefV}$eq9IQ>WSQs!bfq67IVsPqBL= zI$yuA%8Zt&Bu-@^`pTGo60A!Z=>q*rJfn17lybtC!RhsvA1pO(TJfivJ3fdzM0_IT z0-e8+QT=qAL#B6KlMJQ~l)x|;YpFH}4z3tMw&`0_MpO&~cKGCjcH{)+&tHHY@MAfu z4mI<+I^FPZQnoG}zm5y}7rz~~>o1_>U+;Ms>WSgMr?vP7pbk6g>iO&*21m}rY{FfY zi7(LNX)EK{HL;y)mc8rZS-7&kH1N<_O~j+8*>);(8-T8Al1R{&-g3EWsr?c8!HYHa z`i8gCE!G~UtXF<5XfZhfdWPxq7jwieWGm=R?hKP+%RjHes;k(vT-oOi`T(<+WV+if z*2tuf5kTvqUz|lJ2vNFGPK(uJMdGOM#X)%N_sRtyucTMqvjU1Pe={bzKi)n{oA*46 zcDKDQVZ3MWJU4qRNAH`qY4D2Gr*lmmH>fR?ZH@5uQt2wHmJ`z}3Tb?SR>PHr-syzY zONZOh9v9aNRFinJ3GF1jYx%Yuad8^)tq$cHmW!as+WtJ~#!`eStm zUyp-Fu$597cqg>t-)6EKeq8~PC#C51dPvvj-h-xf!QTBAqEM=H!;F^SP&qii!3oPX z7HM7gG=*utg8km-+}2mD{*HfD5b+n_Wdqe=7hV-(k`S1|mE;|1brrM+w8JW;XZdMk z>CEcIlrw9MpqtF%#IBBq2quvcVVw0H4yhs!<^5~4z3qDQU(+B-d@#oujSlMA6ISIZulwnL!ZswS(n!jgdN2~+$B<`RzEeH<=i)6 z=0<~CR|LK(xcfo{9ovEz)7HFNy2!T}Dx}j$^)0t9gBl&|E~xa0x218uIX(kDtn8pd zjr+vN@Maou_alDuryrktm&{%jV`O)`aa#Ui?o*%Y!ioVxU3+fEGm%|r(?s50ST~qs zz0D5K^Z9ToGlMdUh`Rdc1b9Y==DpDa=6bG6rC2BwI%^p;IpK_{E3#1`? z`*0exfL$lx4)9!|{p+|&<)dQ@HD<+sRV`kkK*5a*BtduL-q6!kIbuN5o%e_ldG9EA z@WXpKxMQc&jjcy)IX2S_ijVCP7|oncwASE&N%riC^>XtaGjEldLxd-MzrIg}a{`z| z1_i&#lgjq|>QMbMd0Zld6)aVgR-A67#iOK|AK=d_!RvU|cTQCpocU&C%jfpje7o^9 ze!qqT=-2FJPOW0!%AUxMS8leA#AMCjHuDdvZ$yF0qWo=Ge<8u~0+~pbz*C?Q|8;=b`HHH|zXX7q*|( z%`$OwpXnY<*}Wg!Q}i)MzC$E@IIQloxxW9;#D1No+N^Dr7NhxwkA~uFKeSS}X8N-d zT%U)07~W5oE)tB$%%NCN%;O=k(iyhTVS%16?bop(x6-bD9y(#`xq5*%{X>UMq>q`G z?R1xcw!VmCf=iFm!9zZ*iM0oWqQo?2INI_8f%)zEmu-F9pD#j`_mGKU_N{{m862 z?ioMQ8(mKR__V{Vv-dfjYW6Z>p*jXTb{@&I3=3~(P8t-FoE)b(F$R$;&0fHyz3;i} zrPabz2-z%qqPEaixCnGitL9tJ=O-?D%MSb_F*!-oQx(Fr!VpWZ%#2By5%Ff6vAjEq zQJv@GClc7yw^=L1X|r{zzLs~ee^)!3+dQ@IzSqIFmvuHpIU#fz%pJpvXN#kmy$G(+ znT_Yrs5=qeEVXIswX4*kro!A2)zahl2LsP@KHICw{8}x7DhFKdyztk-xeOU|h6-l^ zZv$-bu^D4IV8rV7fyyc21!8#II*z+A0x}!vwbWbsJesyMw9=@N`LyJ1wsk=!G4aMrT8N5X{n(kJK%Q0;ckqB9+68 z4Yq=xfkn=2BoyaCz4*UY>ZhgsVNR}t$rNKzcFRY8(aOz&Y}gCOS4nrL%#!gFodNV) z&J~K*W3vmx-Vz!+Af$M>P6>Vr_b#9pma2tLU6IpY-Wcpt{@dlQ`$H}w`&%GSuyBlJ?LGtSd=lN%m;SX+pY>!Rt_{&- zYnkL?^D51#J7%!tm;7m~=i=e`hbsdeKGm+CCb0Y$jJc4K} zrSoRiXsa;3+pk=Qxt?02=q7rNADi5gEe3cVErbwxU_7WDH^k*av?#LJp_8~a#W-Na zh~~I9(CcmMj_Yjt2AT3T(ec`z%B7RG=O^tq=l|se!2Jnwy9W-c4Qauj$V!zHrv@9%UQkT-Sv^?*2(ykn!h!&~5RIWNiV5Mcq^-JrC_3d;6Nk zS6^qgA?y_YBr;5%+*j#kZ1J3N+X1oI+M(Czf)Yp45@lLI1Y3}s zFf%!3VsRIq4}pZ`kQHfI2(Xhu(I-`Tqo+ zpCR~xjcXhvlG4WjZE~pFFr!~_zEV`E3Ql7@$^uIJXli>EjEB(Le?~i2N44A5*VrZh z;yg4D`2aF_SoW*^;&hkWGgWj;{qunKPfM4=P2@!(isNi_JlEbr-?(rIq2rvj2;#YO zO&xXq(Y$hnkC9zD^AhUszWBMv;;JZ=;b9{Ds_jXhC?H0;pD4;+fe+&c4;V+Q*jI`T6D+xIn`g-J1B~VZo)Q%RPt6$jEI* z`$eyA)<9uE$LMcD?~O56&ke01>`td0b10g=0xvzZ>d31V=s3PV@BJ#AcjD3DxS7qSSYH1`D=Cn0B^D5#vZrkuB_ z=g_a-IC_}j5V~3KNQ>})ek-9+W|?agd8a!*wgn@idFjUoz|kgVQz(g(L=7E>Gu|)^ z!*6QxWDIe%%a$ z+6c1eC{p(AtIK@WH~!VSDPHBPaQ(b?)2)ieFYP)tvS-EDsbd>IKL2{l&6z`Lr$kNJ z@TKcwubpe5?mf|n|NLF-U9PGOk!Jj^_oIvLb!%}0jTa7Q&xUxZHe1sBAH2Te5yF{o zo1QTf6EEL2ZXkE5x_Y9=E+!WQUsUd~4S5!_DNRTPKV+7B;ywO|JwpN)&g0)c4g3}E zIaCs`5h2x~;+WqP5aNlu_*(*4YoTz9diAmglyHSc3kNyf429jTW-QIfdY?$PE zxs01w%P47P{+rHLN%@yl6p2sNqxceU5xMD}f0R3vR)t|)#qlq0f*9=|p@2vuT>6Z} zQIA9kHPj#dWx{&j)sHf?;Ue0yjK=M}YH)9${@6Tr=+;$BDi5a^Ci4GiqV?cq0$z9;~LF zpzYg^q`UPl!OoCuwMI#;dycLNSj$VQe1Geh|8BEgn8eh4zKPF1fKs@DOizVc0B<8f zY-CenhJ1TliUg{@05&!3W%5{Rs<)x!W_`zic0B4WZ4(S=ntD^`OY;}rKlJP52T~@n zK1E%aI@*$MD+r#n7~g2Tvs&}A<1-;!ThuF`3Fq)FPgW?w_wP=Pw>B5n@$=uPB#31c z*)iot5&8fkpLy=yn~w^6S#K`kYuxaOkS zdnc7XwVLRp7`>z9r*cKD7mt5fZ5qMD8;*#jwVDDeIfvPV4(SA99yVPXtYRwL{o9M% z8QaUK%^#>~wlyaB;>|TzxyUaqRkdzc@o_osmt~B z=(@5U)Pn?X0&>W9MVwt+HB58p40K$k=Vg-XamA8d8`kbYK55J0YN5uDa}6kE#`OEt z3}>il_vIsT3&Xzz09xzTspPqcNt@*DpL+B(=aDd^VcMLnrArT9O)N-2*W@&z(i`WZ zqfS6~a&*M^#k;RE}y#GQAzxj%GrcC3r z(K`}HQepba`^?;-bO#rO3MP4z-{-N_X%7spJ)t30g|GpSKxbptV3^! zO9|XQOU(X6-hGuJq$%awB-H^4mp#QSiWZ`Vf3MjU-zAgRJ~c4N7C-?GXT(X$O@}~@ zMAkW5XV5+4Ywp#I8lm4*hfF!rnUSz0$nOzEpjuqcT~510R6pF=4b=H4WFujx3b}vp zQ@BiB0hsik36z%jU@A+!dvz^}J@-k0vrt7@J@@Qf(>K8a^DrBZ#@Tn{Sic$QE1rLZ zCmk<2oxWCE{_{n9p|Gp;YLPP{f~|Y@nAQwX@;3GsvG&6mfE(=PVt+-k?vEBo(us91 zJ}R(B%_e)leD&~981U@8CS~n*S)^uY!}!(QhUCl@;#FO@o`0Zz#c?73dx`HP1Ju9UI`%Gp^DUw%NWH z;8qyp1AzN>BxEm4F+k)ub9&9nNnL@K;#P_1%GhEEq z>G{etIx{-EF?jr6nN}%Uin_bAd#WifFzjcD`_8>1+Ho!F@$HQX-Gp^%&wl8{KyA&_ z;~r-{SmLB=&v?=ulCEN$ySe2vAbGs28kF9wKpc%D>sZgxwaLasx&QpUSIj8+v=6UG zBW!-iIG=~(jQ3&s$?#dzGV44aVOljA&B6ARh8O#CjEXuZ?px^RQl*S(95vobN&OmYOd6&h$J^4-sXfgYY zomNh*0)OmnE^N`Z_07e=tJK#N-PA7r)!#poD`w`;=sq^hKo7qKDAWlK0bc_3!k%LI z7Rbc9e#7vatPO*&#GzXxotMtt4F4NF8ECzbYi|e#_%c~Ad%Bmc{V<_R*80-3e%F8( zmxVu!v>dUh5Gmx|&;Nc|3(EN_sD&l~m!9u(Dm@Gtom55paUxnEvn7WX?hUbLX)lLt z3B{Jzhg*lf3IR-{`W>l$%I>-FhN!~Xm&WFpZFHwOx%_vJ(cX-}WVLhd{toH#=|h@> zaiDQZM($CzWjCZ&T<3-cSQJZy&xIq}QOE@tDklJ%^{C(Z&=>5%t!Rvkn()7W%Mf@G z$PXL!etg^S6RulaBskJ6zKCH0U<&Z&Lol^G`xxfh}xv`b^=~lZ$wOP0<-y8>889YD7=D zkoLK*oax0?qEyQzcc=M#ZWWoZ1ODivAK~rgI5Qo`$@RO6&ySXuLC!5@NCE8=mp?aC z3tx{L!wm1{`6l4o#5UhG_A+_*yN8{ZSZcrEPhW^ z>s4niksA~*#B+Jw7r=Dwg6y!>_jrm(32U1sIyN@q=jJEgONHjRCD0+=aG- zpIJAt1gQ5*`?~X7iPdHR09jx_k{?>Q)>p?*zdnU)8yZDCc&awKdO~&N_!`Z;jcbRp z#;UF)@@Dvboup1Szk$U*%1RO^|1}ARCt$w~oCN$+Nv@#pf5)P2p!mA!oquu9ZGa)l z91;){WBZiY-*v>|N*Dswytz_x5^@=h`~~;_fClp$IxZJGww>F%+$>ZGEp1cHmq~01 z7k0oY%C7}ih7hY)puufVjVTU~W5t5q1WygX+h&KvWA99ao_B6lL4toPGb*LPNp{T( ziYASr6K!+wr_pl{L@B~wS$w)Vq8r`H_>NL=;;+thh96Tpjo%@^bqP1_ua}@e4okhw zrvPxVn(R59M|WM}HgD;n;pWe34p4p|)%D9P=9&J{u2h#y1N{b3cN6&IkT6y+O&xFI zC1l4YJ(JH>r66GA@K=V73uJ&%B?t z=xAGd^OT&|#!o0h4XD`w5MsiQKw^T!wv4))Owq6pY`TlKlvyqGj7|OA;K{ySJ8RSV z=4mn4Ec(kI85vLi249!PSqaz-l6vFaT*Mpu`y0sY*W-^I(p6>$fInba2zp*{wcJEJ4)#v2`?rM z>N{u6I)HRXzedp1dOOU}2rPN6L59!{%q}Gs)aVLe7(Vk^T^Jc}zNGmT^&G2LVyj2g zTHs?}whc?(VPkf|$@~{y!ll975@Q2%{*5(`Tq~>WgHO#O^K){+Jh9mX7AD`))MZ{H z3g0ZP4bE4^>BYroH#Bamxf4{|7yU(g1@W26nZ1xqa{s6OtVA!lS~IjHSp9pStlEw~ zMVQqW9UJK;c003!O7D*;ZFEb=oMB_(8Xv4P3FA?k{5xb|>i?afJ;7ke&3&!^y>|#$ zvIl2Hrhfb?hKoL{?MreIw6Fn{dAr?+Ysmt2TI@>{OxIhBgsS9HQ7os`6PSD{V-`ry zf|Yi%2~E0lR)Rd;{OdMJy#j)l4~IjXHuMPI?YGtEPjir$kI(jKL%J=>7sVPbNCNf^ z&B>_`C9-5um>DL@WXF=!LvA-l_q71c3fH>4@J-QG17HJaR!O>0VIdbhUB?!oW!~q~ z9etlV#!`OJT07Zo(#xdaraKT&DM7jeB9}ETBM)VszpgXlQz>8U`GzJw}CT;sOKPpwrNDS+uV9jHxp&1VR zyK1)5>%T<{BBP9w2r~qkFKk%!-qWjmh~NIvfN_&CHHDO|?kmryABQ1rVNK5NLAVxk z&s@-UCvk-6Bk=FUtAeSFBDjT~Wl=YGtC1jHj2xR~Q^uFtgN2tfO=w7vBOcVCIEy$TB6DitnoOu`enH~1Hzi|TsX0%do zBWK=S4iRd7(Bqly9!a*Z)Zw;u>>jP-N@~rT<^8lov7ly-Ageo@Ez-(igqZ&-LYt1v zhS<}qgpF10D@l!hNWx!=EqDm|#~@zx?06s`!Y1w;BB)pezhgw+dn==}e&WLqChl~s z0sLrL(SI319@;7?w^FC(+$SA1?T0QihgJJ3aY0hZ{F{<+DHxmPhMHlat@&#lKdt5u zqLq7VAjg8R&B(2Jx`nc4(KgUjWL<93S2}GNC4tkVjreUB(s;kjb#Db)Rv30>6AJU@*AycZz%(4(Ac5~)}0{%fHv795lZ*wSz0eI13w z-XJZm@}N)mxEd>WBR0GJ&hH8x;m)c9U9Abo+)%bP>YI2keoqa1RkK&I=RILNb@-B| zxYnXVN@LrIJ71^w!IiTf zTbusAo#jY&$A^h#oWgHq8)&QpW>F6^+G&HE)KeV}uz+6(M` z8J9QaUR+>NJu8lz>?NZ1j*gMQKP83_finoNx%wb8#ya>0(Rkrn{@fd1yhtAtn;UZA zdvQ)@X4d`+{ADfcuDP)Zl=pzLzwi#ThzC%QQun~lYG6@tJ~NCD!HSm8Zr~IH2VpBh zFXDw=Nd==Mv8fVd-pV{S9N5@*Bn#ToK3n2HWAgw)R3&!`%z38CZ)f@$FNS_MF#j9D zs=Uw!lBD=56H%oM|x5p0dA+ zs;`D5PU&1J&nM-29d`|%>8#-}CAUPTdjrWF4VHkTt8A{ctBt%D3n4e*pZSB%?VoPU zPtX<$*oo_-1?n2|P%i7t?Q}P~A}GId^-yb-u9hn)3itT8u7LBIom|sb^1j**km0;7 zd+FDY$Y5_ed%I%iQ(pkjX+M@&t2{EvdD%!DKa4EDU5avQ-eX!=m@rB3niG$}Z2}+( z6DBcU@um>`P3+c5cbsKMWX1EC{JiZk5g}hlgX+X-)MO1$%2FWQ-&hH)0wNmV*%mA)8`<*@}eea&xc@!6~r;H`}NIW z<5SlGZ10hJ@s`)-)6H_Ixc|-Xic#^Ng^)o%u29JtsLy%t6MH2VY1&)mCL8~=26B4{ z=iBse3FkS9?q)|e|vQ1@2wo$v6vyylu$ zzxX=NOUhB)dw#9rt5TDu_1c~RNh8;e4zK>K zQaMg`O^tHf{u3s(z%0P48UKevgz%fts+iuK<1K&#+gn^(jv2eTPBC7yWi^4Po;d#$ z;+4oM1b>B|*{~zBL(WppEbBo#%X7bJP29_4CZGtn^zhRW6bI^i^0U?g;yrP@ex{0K zqE3kfV23yH$p2g>CilXw!&LQsKz%nUr`>bacXZ8afB*4rz3D42zPv2A5s>Kw+kYjj zwZ@w>U~iP9)?9kxR^S8(pIa76XmSYz!>=N42NL)fVvX$y@jo1CAhLD z7x@pB#)m{4*MvfXo7V&a6KT5h#h`W3ROi(-og48cp?X`U5?{eN4(DpwLDpvNUL1+5 z<%@wd<89ISfmCGYx3B)ZZ;i$x2`8D7aI!V^T|HJLoo9q!S?AF1a#h8*!#-uP>NRpW z20NxPM9tqyqPr6^Ncor@H?uM(UIzS)^S@;q^j)sWu753;RB7XFFyuMIdKC=R!hT1a z5bFX;Ri{wPG(BSqk=D&gK0NqNgnh+npwK1UIl*}RTJJpJ=R`xbdD^?K2{ebljUU`P zlSF%~aKzox+cSQKE;*8|7;`pOCb{IH;^^WC2yhif7?e_l<&{;rQX?8730q=SS-$Bo zWTJ%LGR0CgQTV+jaeyCiXIQ?@vo&WO=Rs3@;^gscVqAwo{KL+9W#LHp+8y`x4(|yd zETQE&7|)U{;h<)K?yoPnyXgNCt_EvFe_tF+O&UsTT^eCPd)(KYV|kAg}lh$KUjwb;Hq48pc|R98A_ zs89_n(JLq3i0AB92?R5;&YY@VDszCnz-MG43$VeF7q>s^oe2GYxOCz`;b#;S8#- z0xzPE_?kp}i9iK((Autty&pMNU6lHjlOXs!P#R`_MRBRKUO#jbL1%B_j8d=Fp_U>& zTdJ9uZ!b|?DO?h6#@CNN!j!vY#226BBv9L_W%N_QHC5UTOm)!6Ha}rnbK$J#W3gh% z0gESBCy|a;t_N?UA=RJ?ZPj>TZjzq2Sc#r16&z%{@doa?hYt8OvY~`J(xHE9AGB<_ zKcykvBVju2`%(<8n>>jv823l#S*MZky7h0MGU(&z9VGOy%l8g$5wvkL8IJQC{~9oX zl5WBcy+3L)JmJ>qOuiUkEZ24fVY9*VU0I;q$i6el%13O3!q>Sq^H*~*!*)-hB8=!Z zDWh;@Cl&!}()H#UvLK?%Gqq;9!xDIfx!sivl6a(i_z3MODK(|mcv9(K;viT~+^&E$ zkQLs;dv8a^{i!rd)}S{#>ksAR0R(Fb7{{L2NIuM+9xjy z@^`w;kz5Q8S@AQoL=j_#PokODWEBD_3`)bQCQvK84nK~)Neh5V1Xsa9`(N74g?DC+ z%=M?A2x`K++@DuP9R{6WYNEj=OHd~7ii&22xzSWd_A0xg`*`Gxqxo1K@Kjw+RXLsa z#N8&`6Yax@>jWe~enSb5Win8zmv8-#Uf4t2JnnCC%|lL24smFhMtixh*MJoi*NB}- zT-P#F2*re8cAr=(c4^}6``7+6WFv_?72LlN1-oe3_R~6Blp(`xwf5Nl2}Nu%hEXQq z`p`oT~IUSZa#e2x9DGut`oMr!WBH8`OZHxD6 z8?WSs^#^gHGMTAUwmzHw)M|J7ea-C-4Aiw%VBC$EPNeX`D^i^NxRQDepb7aV{5~h* zV#_k9F>(Z!#%0Onzx8{4Wa=~uCqQLQIfis7lD?mlIy!*fyyETNmu#(i*DYMC871u3 z$v$c4sq_megXaTHEd%KZa%T|00M%y{lkGo zXWsN0MAMGyPB9?CmL!}VnZSMk>-l`OE&Ivi%`vLZ{fRwzyz=x$z4&=Nz?vi-)4$Ru zHD}eib~tia2M#fs5S@d1Je+)%#r##PrT2Ql2DWNP_uVjnVH>j_1B-E@hG2B5R|O|D z<2zG^?`YEDmnyC=v%rg1!E0T>y_;v(ZU_A(J*o2w*B{P}DgoDh#93#gY~zPPNnLF} z*GqkoiG4RmHUwTOwJ5{gOye9Jx5f+Tzak?_oq`6Cd4e}G+-PW6Ogx0%`+Ng|#essH zJ#c_0K$@b2L-oTYA)0<_UP6+3dcdCW2<6LN z@m@jWXSLw>25OW%WMnLi<^WeFhG@>VmBBf=J^y9l0678kQ5*GGXw=yK=AKUHCQdjwKj<}*2n@sZucfWt0c=)AXc*|X*OI%F-u{toC<&3YM9 zvjWu?BYf*3S;e%kEW}t_8NS{w$zT4wI+HPe+-ucP_N8DfCJ6xlnE#cdz8vOKg=aD&?(<0$-NN&k1#?k5v zRsmJQ8Budlc4R^sI+$f}@u)@)XFr8qII%Tzcoie(Dsg5=hCu*vNV?#_^LAnhEh70S zeqH1C9;uRDJoIkHH2&b9jLGKvF*I_N!?x^D_`jRypvU06FWb$i`+Fs zIzxC5Fp@$3fmnZgnNV$F*M%8_Eg>D+(G~y7XJe`RzL!n@RlC^y@pGm~3{g;sCAq@v z6g4z+(2rI^K;IZ3mBQa;{d-_HS@?z2=iA_jD)kR^r-?@n=YKJ*eyomu#aGCVEa(fs zHDGt0$%|=3G(yREV%kIH=rL|>IPniL$EYH3_z9$>0aRtlaX^jlRAbU~K z2SNvdw2DimZrLnt$p&{fKQXQdCw3iroQHVSc#R*{IRg^^Da{wyXw@w0B-*3CiV2z3 zGlJ!Uu=IEAtNDlh_L`hIUcMl^_yl-wx54n~6P%Tm`w9^8bY5co-_$99d|ABbk>GLn zseB555{^cgY>f@t@W915^WL>lzsIS4-^s{C$&?N#^{w^V4Yp~ErjF86A@pZ^W|h57 zMjBa0xcK&Wt@pPyAt6rW9Lw)YeD2pcJ`%VHntXx}h3Cj+|9Xg*6*|jvY$|Zs;!WWa zOZmu}!&tkCt?TTTJz(CMFx9zQpNXo-W}-noNlMzg@mVfhdEY@&JlM=hVHAW& zy_6dio2!zVzyiv3J!z+I6PG<_@2aBOw37rI!XegJxQsKKHcZ(a8cSb4+bt%40HyXB z8F>5gmM=J#VG2F$U^W=OBthr?Wl zp8z)LF+6=LVd3(ktu3e$<`+;dD=BW*;9dJVQ;@ZeY2P*&RCT}RrEl;MdNAmH-75KH zK5E^GiKQ6^87! zFHlzh(K4`Ps~9wF)S2%f@|3s5nug9Ef&mtb268ZrdvWnP8=JWBD4CPu zx{5>JOXj>1cTHcm+LXE*O4V)tfneZo1cYPjmVfq9N4P_?SAfXsR;#w*v27#n>zZ!| zI8@|E9;?c0vwzkkj>U=#{Zc>Bv$pG2$a|4N=se_a!W*fY(a{?{C~|3}>1Rg{JEke> zCjUuqbN}YuH|E(OzBwB;vALagER*?h){*RwrTyhhxc=aK-I;4h=3(&DQ3`1Bl`%d; z`{7I+YL5A4r*>q=C}H<>ENZ;Hc&YZMt2t(zbB@D)mVJS<3ul6A+J%cxZ|7wIc0UGD zY346%rnAh|riphJ_nY26-KPA*x9VpXpU=hP%-<|m8tC36oLvNhCz>F{)1m_ef;0(B zNb(9~m(<&Ilszr@Mbf-Ip1=&62ak`@CJ~df`-r9UT~QkpPzFR$ z$mu7e7<+i|k34K+Ggf>q9Q;)2LS4M6^fI~h?EQb<{WUS0fQKEDy*e_?dgYHWZb&e- za5hneh2}1TGByvx4rKUH7h7yz^GpotpED$r~2fS(f714cTwUk*j7a;@ZCG1n_Mx#lQG1s25s2r2A( z>SjU9R?(Y!-NN%d=(w?Tg`ibU0`pc9vRaZ4BoNv6wIEDWlNaN3%obymF+F_4m7_>9 z_S`Cv&lOMg()n9&NaMK2+FveJp@)Gh;7KfL+Iqf;;U010mSIXQ_@*54;PbyyKc4&T zc~K&O`eB5)8wYmg3QKtM_op7-r8*1rqEX4vY)Igj`e%luR#UpA?5!Xq?VR@I_5D6Wr$0W{Bl-Vw zQO>GJTET_em%$mZt>oVPA8(NzWNi#B-k zbBNxx0(jdG&F=un-~Fl#A$SjPAuKYupPM}hG!^IJO6qj&nnS13A=T2a$qN0FS?Z_v z0gw`!w#1%{#!`JV^-Ij(Wq%2z857_qDUKYbNUvts3}#Qd*C3hhwpkaB^e(lmCB_#R zM!c}9-msr=ia?Uxh%@7?#%UNOTw1AHW|fVfNQ-Xqp#poBdh- z00G-1*Oy+j$F9%!T}&FpcSa_t3O`%$Q*MGXU+RqUdxesE(yDuMl!%fZAuEhTyJvBy z&XJ^k;wkz094|9nmD7$eceQR_BwToY#xnEFR5RF+yk$u7O9|i5C%sQ5UlT3uP67|H zeU(}2ZP`BdbnVOwU@w|zP61EcvGl5&wi|BwT=8`{5KH}S3W#H8EH-x=({Pwj5R$dc zvxjEh|HACqOu><-j_`BAFisFC+aSA>6a#9`wbpx;c*BWB`!~~E`E-Tpe7;3cA_Ift#=-1?YXMfST^8mf;@s?B+ zLu6-w=#CRqUKH=cS!k0!14lbBhwQvJ< zBWEiu*lAU@VmC5vP~ZQgRaSCC=?7lV2o|x?_Wa1G-|nvdUSlzG0qkm`vJ5;w zWFITYx{Y@n=DQ{7xBzvp$h#*`UA0atuidAV`f1(f^e}}Nq3SeMLnB4|iOs-X+~)LW z7Eh~N&I>p#_9OOK7N(B{+Q<@D$#+d{>+%j6`3+V8ER`PlRPCp5zU=ktBM8vVdqMoT zTen_t{GcY)`7AoHzw^}Pn;P(vkm&V`5U7vJ{{g2!SiimZt{OW`>qj83_%ypX>A-BW zk2dLgxJ9CGE41de%J=ACJ7GJ4_zD|oV6g!QlDk2Q+@J6Mhds8{m+aGXdtn@>K16CC za=*cXeYj@ZurIo}7C-eB$PBv;d0py>d9`_qOZCtaN|xUMQ{NI^z|Jp~$wzO?^^Wbu z2XKrd8Rb&_C6&XF%_MgjFj`743S8zcmyy5(9c<{E{YrL1X ze)PAWzg$=0mg@)axD9{$-U~Q?aDXevC-|-Hy8;w@DNtMDAOE>5vITiBRKqp1T@700`Qape#cw;`_qgxis=9*?rRRAY{sF)1 z^{v)Bl~g{J7SAtf=Cih1^jvk6L%mH({rkj+=KDDqRZ44uCD}B`v#L;bM>v?8cPVbH zoQ+)0@h!iO`Dx?5fqs#P^Vek$xk47_kB&x7au{tTu&rw~fzCuOuc{Mg{##Tk;+RG zU#SeyX%jv4{CLi80rrZ}*~MWaDIYW)v?HrBs2$~PK)YrgVX0>wok6GJbw-f*sTM{n zikq#SEcD@dcH5}m4f{6Y4Ezr|=+}Dycpvs*ANJuD5O#x@>%iw2pVO7F_Kx3MSOa(e zIQ-tsyEPe^j~mhbmYg zt&N~G){Jo!<}7Eq9B65JF7%`ictYUTaZ)0vePSBifg(~c$+2q3={Z7kM#SRl3ilag zXm4Znk+Vl?73vg9F8`z!7H}=dID*7Ne*+I8OYjiqQV9cN5k52|+ z*9Q8snpTo;0GAo4PDxDU^PnFX%WUEblx?2**Ky*R>yTZOjxl@|kSZ!xiZhp!Make9 zYdGiZX+|*=2+$*5h=2`s$wyQc*h)TGd)F_F4BKzw3$o$^1nW*gmh5z<*&8%3GX-zL z?MAkqRF~5$vP04Z1Ht}|>~hjry| zGQp%T3f(Ux@Fe-jX)S?Yn!edTsy7|kt{1b5%v&<(m3y)guK&SG*kOtTNn1;%-#TL~ z3;SF8h!Uqnn2_s1tS%i_K?bmhW&O2luRr8#hW4qYVcR#o8gR;f3(42Zs2^|J;q_>m z;w)kZd|B=!e+M1{&#=%)9Z@hTMYz%`}h7NzVqEb)o#@KbKNge|EBK9(YI_a@6K(`;p#PE4cpKU$-PNr39lN;lY5cq z=lXusx!Wr^du|K%mhk-1G44Kli0fNJ_=8JV@cS=Z!4cPkU`i@-D#t(O%$HhwVqao=mh#Fu-o|^%Ke9b`v(o@gZc(ptg6AL1@czrzg>05GI1K zk9ynrO+fz;Z;f^;3z8#rLKl+#jLRZf*G(2gnoy)a%k%*ZT`tyHi`(s@UWZfTI9RzB zjKdIt?25l~&pxN-uh|YdML00g?}0QskOjpukJePtoC-CQ<)^InEn60szCi(gkNUZ; zwtK3#&78|JtMtsq=_wxfS%&o9-l=!mB8tYZwS&_6W3hv-Hsk3p#{A}f6hvZCb%>`u zKkJ*eyvoApqAMYGkBiQ>N;{z=PaS+k&M2L4tica@9{!#`iZQuM9ODTFV$IHHeLCo| zfsftRI?b7NOgi&b#|cD+(-F|hUeH+5WbMS-Pvq}n5SSV9P4^t1L2Z+PjKK9nv^DZw z0>=X{YrJUyqCV5;I@L(iGLN$J0tXm?WDqgzkbukKeaY{nuOfAwK(n5Rj=g6v+_pj9 zY>o8d#WVHy(xvOTdiALH0sBg017HPyEnQ&ii`Hvf>B~A0=B@w299yu60*sfG%^}jzZnWJKmb0tvQ?RqFXSy7USDKRO{b{b&Ex)rc(w?Rn&YngTy&DgOx%W_`vDfEuZ zywQ^3K4{tiB_`sd&e)`z4fsrFZDCpX#;mRtAkla*I|MFdM9(5AwyE}GV& z?O@j|qyl?4=-%r;lDyL61{)!h4t3i7iTTfN{{aSPkkfOXXlv&tQ1Arge#yY2@z=_= z>D|tIg~?yF)d5aYC6Pn(I}=V$+J{;Uf{4?d zJhFoa+rNt!?!cFQ@td|l@E71#hO#a6cWi;+AO2VGZ*7srN{I?!T115d!9{>_M)1Wm z7jc{1k!?@|7_EV9Z65UKD^z2Trx7uC_%q4cvD5_Q~yj zp1BUQ-;%L`r>ffPmphLPHl;QMx$PQ1W-z@ZFqQMsoaYjV7GexYeocdSZ+p0JWS&r( zk2K#_{$8^!@4L6<_yIYt=h9l+x$w!I?$}0-;IAO}*Q}{Vf7f_!#9|BJpjPuY@X74R z`RL_t{IM+w(g!EJRd2heYY85s&MN`LLT=i0kw0``H_rX1#WvO3aOI_AJpT9J$T0%e9mj`!7o4g zJpSm?ReaJt=kdwgzw+*AJ63uBlb7&EFJ6uFy6xQFaO$mRDp~n;F*%`v*&O0|=yGY( zAU&qI<|l@9EnjM5B%XQAOl?rE2VUO9N919A$F<|kQw9^gOndrBDpB3+op4_qxsC*@ z9bgR`2BmlY$QI+7jLm1V+jBb?z_k_{4% z1aLwa@gw#Ck&)Pm!FCelI0OR*13~Jh)skARKHYtu`>|$LRn5n5R;_QJBjRMsV|>-U z&$k{`v*w&NYu4kps!AZSWr%&1=rU-$dH`DM-U*BJ?5MP4_~&cWZqi zY?EpPZFd}0>%i$_Hd+Yv;1c zw;T^*v^;+aIZFJr5|~E52e24u*}HgYJhpeeES|Jm8EYSu3*_6jl~(?2)h^_l^g+f8 z@J0bZ;(G(8okuNaI~y2f^EMgs$$S$b2p1r-K$(Yu#VTG<6a{|)QnHpo^x(WRc!#zzeO2sK1*itcQMJ2Zjv9h{wfu=K-7YQ|l|`QhuC17% zC=dupvbg~TS)0fZKbS~m6nH1w^Bv61^)17F$lC{Azm>RG3m<(4`6mQH9b`?u$i^xJ z^uPw_oU-x&^-0JEvJAGx#M_g4j0AcRR==<#@e_GQF`twwWI7KnKC^xOpMET68jCGJvrS8jY!Yo{I#6ucF zc)wypW@ihbH-6z4(A)p?H(dBRzh%4UKl!#lPfz^1p7U!8GW#{(fI;8&b=Txy)3NIY z#*4mUUSi@En>${~7jE*sAa8b?3NzJ<Au=RC+6>U?js6xLI>YQ|79RPvVx5-!YO-b+y+HN*F*|hMv;nWtjZJ}q^ zn?O4AiB-RI2BOf0ypJL1w>W7dc|o-+27993d*asIUcS+eMG*lI$-2evq^qUjJXg~( zf>NHo^SzHRpwBmc-5;Q@{IcIk7a4xxUp!4;|II&K0pY^k3~h#OZEp1fw>d0%sqMgu)c(V~v~BWYBA1qO+B zGiVpe*>WYrc;3n!f$0pyM*T5g()@q+UAbP8&+%cKWUGVMe8@nLNw@5b_&vSgF>K#y z5hcL2nCjtDPMfd_yFX)sRwqKVhL!wkKr&RA+*jT-$0B{-Zhb^tGZ>B46tsB@@ zMKX#2BIUk{m0to7^gz@VhIii;x9nvEU`cY^Wz_x4w{mi|S04X{8 zt|-svzwA1F+OYme>Y8OjDbGZY{i=vZGVY7Uu@;ml`HCiI6o(fGGoTRNC5j-?hY6;Q* zcEYH2!!v93#(-GPcClhcZiaYI#3?^$va^1uPeAm*F1kYDr1*A)uanE$)v(62jWjo`L-OnPnt)H=S zlXTm3lh*+PhqVKMcVQQHVHf@t2tAM)lauEIs{Q-(;v@ZS^v>gDjsDuZH6D;=A8(B& zZPA5=08=Cei`2{K-GT0zP(Rec0Zjy*1ZN5WxF2yDErw1b#z`zl8kk#0H6~LfgTKfz z((NR{Co%LT+A^G5O`q~`k-7m9$g>8XZO@3cV-$H20Xf%~PV1%e$H_6A{OC&29t>sM zxU_|6S^wl6s8PLR8TJ#PLB{MbudpG|UB7+ca1C~e9|lZaekm}g4*zO-bH2>l*;a<@ zK*&fqY(MJbdYS~$Dkv6*l^xu48Brc zLz(6vppTe9C#MyFQV$G_dgIQ|v_U2T&uG&;>nEIre*_dHvc|`ql;beaoNxYP!hqvp@e!^iALPUG!560PMaA%b1xEWE}jo#D^A)Wc#)$X1j&h)Ea z6(OH&C$y`MKkx%Rk3INHP{#udVV5&}T1;$KAd>3Yp);1X!b!!59{AFjr|yu`@FQ2{E?>ZPI)uLu|ua=2!@P>YMI-^sQ(^gM++3 z0coGTtCOij=-bf*4>nT;ec$lN<$8|gvkNHO&Hz3k1U$>u(4V$|!7smbP#G+%f@{2c zr*!vhcK^P=6v(Tu9MY8qF#fFTS1QO`Ru2ExN3YcP&n(v;c;*GVU6#$EpIX_XnY>-- zo|~Q~_K%PZFh#p_e;0~u<%D{6KZ_qHwwGZC;5YSGU5Zvi1n;9sA-5S0o1Pfn2Q3$u z5fEm0Msc=t+O}Sjp19+s`4RSyi$foh?UF}1T3)V9mpPY3@Em6k15JuwJP$d1uhF28 zgZr*hJjZ+yAa_lyfYl*P=%_uHENij@9LJ!e5YQo|v}yFuiL_CPd}>w#$^jV&|7odK zrXcWj*y5I8bj!m20{q%HaVK@F=R61G?O4tN8%K)qoc?y{`-}l+p`M)d@%6%=3&k7_ z@W(x!8RHA}yqLci!9?xH07gnqA{I-H?wCEFPZIq0iL*Qlj`3F1zJ6Mr`N4T=H-L+@q~f=FrN+wwP_ef5u^ zmI(*!DLu%Zu2(~F78CrDNV*t_*h(I4AW7u=cB8Ixh6~T zPM+l{(Anj4_2A_vZ89#-PmZ$8`XWj|2&r6aWeOKD;VfPLoFk)d`-h45{2azw@usf} z9vAdp?m*m! zjt_Potp+Cm9Q1&7ITsD13k{to-B7L{r21cJgWT>IC%PlA8w>FJ4PW=i=*?gM$1ePw z-*5k}@1gg+@2|&0?&}?b_^Mx9k!jE1d2=gT1DK&ctN^B4^Hh7%vcd`DR`g&mBDy{7 z_^||S%@2KiyLPMY+USX=MqeWA+Uh;l#~hD=J*aD17UoARy|19v_y%|vvHX12 zS%?#8!`GBYajNPd8SKet!^yYR1o-hQoZVStZw>FemP+7!$T9t*lj6*wR}xhOegEVtd%nK%h40Q}YQHhoW8fI;I)6 zYfk#ZHk_eOTVJi`>0o*HnY2%LmUthU&QyQ7?Q;H!)n3D&A^;ZTbyXW15KB-$+r9B? zyF1jfm;$&J@J(8Db-HlV0qL6#w6s2T@RsYPuP%*5!6PFOta8A{2Br%JSAickmg{>9 z7<=>PJ$mluu}(~KY-O!}my-jmgs`!~LlN>A(E^UHX}4Z@FKG z((`AO+U|IVdZErX%#StwHmad_j&spnSJ7S=oxbY0%;{ddPDWe=aH0QA(f&_UPYY;5 zTK~RL{l4*uY3!okmfY;QUITxg9?#1KBkJk;IlwNUB%fd?8S?JDFaX!CpU5ZYC4}v? zJ;pP-UC)Vcvya5KJ_}F)ir-al_1|sEs*g~&lDqRMob^nU^G4s;i%wtimzx(J$4E(ZQO{At@SGj-*tv3hVE`bz}5uobv95AP2n?V2ipX)mO_&9TX0AAN;x zX6Hj(flVE@N)X|1!sitP%jFbmx*7%_~>-=;&yVo`3FcUG-l9 zPpD9Wz{ zbszIt;!NJggB~g4tA}k~`3&M=US>mJzfitO9}*t}u(oNs-S-Xv-i2M*gfF zyp*k{^J6D`)Q1^R9&{3stV*#(I;GQ-_6T-aSq|Y^o-i1+iHt6pbIVa=XzZ}a+AzsgSo-!+*mzd61V zM?SjCQJ$ex@RnB!9qdB#V@uL2I8UakzEG|$WdZ~vc)D$NfYLCvp^m^k5dy?p>%f{Z zIFA5ytZJ7PPy&0=>!ChzPIJrYX+vRi5jlgRa_j zKUe?N6|qydQrB4pU_b)M^0S-;bq=Mh=}hOi6NH1v6!b%+sBa|#Zr^KqYjTF);l4AH z{1DL7UpsrW`o*qKhP2QID(JfbTZB50SBG+FV)_5^S3F8@``Uk-zVZ)V?6%Ma2>#38 z`}gYkz_AT@b_=E`V?1b%?Key!SmUq*)u z`g?Fv&L3VLFL~YB2pw|(Ftb-9`zS!~m{YqGb982x?S3YL)pR`g>$Ns0zv$#)@Gn3M z?Xo7H3F4aFv9~SW$Kk#$VSCkmOrhzu{<%z=!7G>Yy0O&ZCl>Jc-W0UFjsc%lw|eb2<5f>{K9j$>F1xjliM-SqpaxDX;SzzD|4%}(YFu(YP%qWy+=8U z*J(T^$E&*G!BrWdtIXEb!;bo3YHvN%k5j&h@MHY>QM**oZ}JeW-gfZA$F@%}7; zMC2o6gZRiF1;7{bMZDR00X{@>y_xei%eW%hXx9|8*&%?a`W(T=8p=HC8PMUdvzA8V zhj&-|sb-%7|f9~eJc6K%Dg*5Lu>&x;nkh*mhGf#F_uz}?9y()m(5h)vJ zHEw(YUrnc5|Pi^Na-Lu>*j2 zVHb8`7cMOH6OU`4rN!yv_s_PaSrk1`mCi1W+hQwFY}QXUX2Q4^|+_dL()MiEh{JL==zX^a1yHz z<^8mxX9Ge;F8eF1i(o6O_MazTdk|=w4Vr!WSO6&6ge4Xn7CEOfTjTse@=~%zLRrhT zpZ~&ng30p$Ujla3OPql?dz+!hZ8Jm3KMxZ%MEwMld!cPBfID3kK3?~l$1Cvrsd3Kl zx6u<%ewdOysZY)hpeyIz2K0j=)-9u2{qJQbD9P;~2($@NUhxxM{?hZp>Br?jK3DSU zL#e-Qu)SXIBH2nk;NUH6iC6MLO^|PM8RGTrjMbMYBLl6n?>5l`L`74dz)q#(W!fkZ z3_g{i4w`R69)-Y8z@eBO)UqUkI?LhTxyjeIS#Fahq-V?)k`rgS;=>Ir;AzmyTK&hi zf>T|Fy2}}qM=;na;@Q4#14=_DlNigJb9)x9WweJ0eBR@)c#Qu1H~zor-}>TzjV?0$ zH$VB$=|A|(KTc0AfG`5!MaIJg_}!mdUAeb8YgWQ#>$!QE1g}f!>hHmHSixYHP3WAs z>w!}8#kfM)wxTWzfA^Q`BVBELpG&^Wd!6(`d&cdbQ+Jfuw=hm!8S^y+$53>2GNOSU zc74N|mu+i|Y0wt{pH}zXUuXiJruFtew)fC@_#p?>O$vHeHTRdapTYZddr{~Ub@gwq z%eb9v=rOf^Vb6@KpF`)?N1DL?T~a2f%fX+o78Ur=1LVfl#Ylsw2bO^k&T?4a$I7&U zYPp_sPrF-fT+WSt_PKlX@n`QY*WlYMG1`o}?3W!J&~Lteg|59{xkO&U*^Hyiplf75k(^k_ePp2=401JnQdiCgq9p1;#bs&7j{_2qqa z%JMrcf_RYD+9h^cy24)RFxU$x+d?pwbH0q_V0=a2mVr+h$_&aK%5*J$%HM6eU6>sc zcc8DyspXE~F`;Y|&;yymfLC}-d{9>=L7Px5m4{wd?(!o-_4FTRq&$7Qc#xT)8dGP0Nn;pLQO|e$20*=5U2?9FR%j?Ef6N4RcZi<)`xZBU=-!@}qBz*& z3UZcb$K}jgJPwm!I1x!#S+y7GqdAFolUC-C`ZlK{l;X7uCL0+wpv`!a%$US)pLhL8 zNdlZL=?%}Rv_$Hz4dqPVJuR=&$1JOTPZabuHUogNw1n7^=C4fHJAD~gSMc7R1#kEc z_Jv#xXnd7ZC0l}YQHDY(j6t|;#)I0I(GM#Yctz<91RGN5{f zzF^3Syj7qTbtnO(27pRQ&whsQ%Ie+d&=Ea)*6R9Ba3(#k1yyj{9vPX<4^K@s2Ka@Q2CV@zGD}1NXF|J&F=F za_j>-n{2WanJjN(eyvDUCV_#p=rbz|$gh{dqxYZ%mKFmmzV2W(9@;K}-9{P7K+~gR zg;Ik|gKX-HhMjMssJmN~MC;QD_Qvv~HPzJTd7DfqJL;IrsmDhaS9)6z$Ri@#|wj?-BXT_I?Q~M4w$#5-7Xs?8(RaAd%wZG17bpA%2WX0zJfvh5dsUAZneI; zolkV*`c?X~fBMZAe$MZQ7QpxG7U1_EE&y-|4vi1`=*wF#TqztjVU&0ReRTka8Mi*G zE7!dJ0|wpS^XMb>O-vki^~&19E%h;12_A}HAYY4P{Mp1Yw!wWGpUf3nsV|&l?7`Ip z2w?pef{&CqAms8U}Ho$&(O4twg)*TTd=l(NAM5J-&Q4C*@pTsN2~u+GSb?2(7gIS9HB36 zvue=(=e~i->hmS8mqy|%|KR7-+rIYqU+A{bCH##a|6k}oe&63;fZ*q=9DB>0&%wN@ z;Oo7qO%}HHr0sgLQBb{@i-A`Ad_b4>F4NKGGR4;7EA_tyPPSrdt?lCScX<#Bm_ zTvh}x56c$Obvx+U((p?8viHNnZuJev$7^1v*%vo@TCY=3PR*aGON9C?VI)LdUL|=f zmcllx1>femJT=?UA4{*q(wM<4Y=Y}@`LcPUM;D!abTiZQnhS!Q7BBi$-ZC_L6WBF{ z8_2q~ygPnTM#j8yyx7i}23-;G#*hZ(z_uctCrj2`1>tGs3|xzYvfa9UyiD5OufOwI zOmwcbP3G4wExxjB_59i^m+JFhyM2%T#jQJa8(7M*tAX*Bwqb&g`i!r=<)3mc@Na*~ zRk~7^6?OVBeSPruefq%1UQk`cR}u~ugPmi!gh-rpLtYM`D_RG3y^Y~)3l`6S$oObs z1(a3$wYp6BUfZ|ev(>Q)KOls6oM?ug+%|#!)Y~YpfX%DdlK9N4i?h83@A{1MJ!5*O z5ii;9nf*HTwK!}sWTeJpZ}%L0HQtDZ{_P+y$fCajc`}Xfn{rX0?j6R>&Q(iM20bP@ zy60V2A>KpNZ2b;~=MNPiUft>$wlXfOeNWDO2mxbL7^`jzk}uCo<84>UC}c_zO;&7g zh{!)m5}5Ir&G%y-UB1xY3ouEu(GRu?;JewhBT7mf1bs_9Yo`N5MEa6sWQlwc1jhKL zg}FP=7x^>31Dg_{$$nqytRPL&3JXG;b9h^7zVG>Ubgn+n77Pqio#{2(K+aaUM!uWk-N(*Y@f3bm@OR ze~*&Udwx-#b2@W)c0XpTei2wtfOa!BVq|1Qv*3bJ_o;v zZ}Z-|b@WWSwRiU}>(O*PLsKA;7gi!NzIFicF6_cC?81cwYiJ(k`5NF^!nSz7(fs>- z9u)t)=MS6bZ}4cr)&(I&@I#|kEeq|4d5)z(|} zGPW}DTp2okD-+5fKM=ZKVWZblgwoMwF;Wp_;y&IH^U&&EnJA%mS&(+o}hWp-PMl`Bmn@WEd(TWj-){ zd)Ak07l&O%9%TS3lPQe?VDX_(8@Asa(m|PYc9QCf=}qNd|L{SHz)yeUe8S8Rujnu) z4M!TtJJE{V%*pfE*4rYT52w(73E%K_UrlfSrZ+Dj@Wr0<`=0mxa6Rjnh;ki3zd>tl z1G}yFKAynaTAc8oQ2(tB(04Osv$Hx;X-u4SUmpvU-D(+jKGDmHp&g?x4Up@3UW-en z3Qjuki4*SSM%FrhIRlb);@(&IX&dgbvkaz(x(c}Gr6%X7Q(Yw#J6qS{*EXVoz8uU% z+Y9X!u5@?s*xMW9v~iE;-TIk@67pDlZ0B(0X349av0hV~aA@pJ)QPxU-t!ypjaBum!yRnZJ1H36=mR|267x(_e%ej>g_N&aM z%-`E9TY!S~Uxm+oig*z|Pv6_hRpbL#2PYp2z9Rt30H}?&scUa}_S$)`R`Xxwv*Ao$ zw@u|adn(X5_~mJ3#W4^e=my4zJ|JhRpGl?$e7gJO%va_W_~r29sE?$Zq%Wh*=8j$7 zVtXI|#NE1O@#ldN94=kxTUH%iqD`AD=xwp`W>Vi*BFJtM$L?Y3lnK zMA(NoT#%Hqg1Bt^{Ibgj^ytA}$bpLB>|_3U*#i3J9oM_bjctkR#?E66C3-u@$k!C~ z>+fXrBJ_5gSC(daruX_3mYe%-G|bMo*Ex{W3L>pucO680<3?NuUihFhq)%A}rc|fA zefRXnE7k+(gL--;>Dx;Ob8eTQe*&A0c%z(N2Zl4OgNCI|yn_x?9q9P7n#_LoZ~&e` zKk5~Exm&vS4D(KDF;5B^(^LhNBc@B4639qvdC(X*N0XeyL-Z+Hy{KC~@3r3waL%M3 zc!ce?=wt8GU+W7SPTIRQK4iF{xR>ZL_VEP!fBG+CPvXx6(sayF@F-mzhCGV@E8nCP zos>4QbY+eU=z9iyXx_1Em0SR9mm81H9U)d_aeXYRJXji(k2IbbQA{gYkDjN!>f#A* z5p9tq&Mc;sMly{gQ_wZOqx^w?>A~ODKKi>(VM4uJqAN&;B*LyV+v@rsWCFLBs(<$1QVe!bvxS^?l$`JTg|$+tMy{o8FE z)cS%p$C}TnHu?ri?*QOk*o9r#g$oWnn7Q^2?@NfrWV~OawMP44^S7{#kB8;yL3yrS zKa6g+$?5|l?GVR(3~cay{Mxhax*{8)Tc1Fa`hcPg?nHrHAc;8;jrYb>qq)KZ%FDc- z-s2LC{$z}6J+eMgN*8>R<|%@M#x#VY3?*~Ny2Q#LE29)6CUI?&4S`?Rc~6sZf+*xA zR6&=Ice30NLLJW6kXKO8L^;2Qfjqv)0!V!0akN_sv+=f4R!Dy>FsA`0_G)o(I_eI8 zEw`cbqS1{0Kd_E8A{(+Rg(JJtaNM+A1+IOn|L zg%`dtg7-c2^tM4r@V@-YeZ_5t*`&k2CCF3noqb=t`sLLWA`3!b|) zslLIs+gMf_|BL?3&!_MD5C1HE-sgTcU1WIodl%sMFO_qCZ*6HAKyOKCiaOT4Z>s8S zg_#mqvEqB3jF;t#4W)Jlc`N@+D;2%-yxf0a!6|wqXD=(?y1Lv?Q`dHPv{UvBI$@ub zFxt+a8$G-3;#IU2eILba%+B&|t1M^tg;u9b<>=GU#tlGi?SbaQ`Gb!BBd2!D4KUV~ ztVwoeN*|*T_qE=J{l2o;g{E9*8u**_Y|a+J)u`|Bu>}dH3Hq%eWVOp&?$K@sSYCex zeU^Gtp%tKZ`7QfB&aEF%fm>VoCfR3JUZ=@dVB3mc`xq`hen20aL4vX^^xM9+0l^m; zp8D`j`i}qT{qz(6_?O5WcA2P))tlpoLAhVmuFERn{pp~d6I`~5X5O^dVym+?Hr82= z_OCoH@%ENU_sjD#5x+bs^X~-&KG_QZ&Dt~}D;_N)Lf|t#JRr(jrQ5_Fwh`D)n#|aD zxAxTKg>p4lko{7WIfnjOwTY?oRpx`FTY(7m|N3InuaXUYWC84-=h=NP+BB|e?Z++# z{F*JB?4iFX8|vM)GHK^Eo4;j(J`eDsZYi}7h7B4Gqn?@uIx9RrnW1`L%hdw(%atQ~U4Sm|>Lwdv2OSI1g_&udxzIB(Lxp(XUXwsoOqW~mr z^iY7~mmclcRlYAR3Yks!$x0 zO}&yE*Regc#mwo9*(P;7nZe1I-6B6n>PSpVvIW zJ(=EG*_fSr9RS{=sspoAq={FoE52#ugC)w(-{(3#O_bXe6Ndu;XSjAU9QDfkvSv2i zv7UHP9ZZ>KRLv1&CZa(VsB7X#FPI1TpMefj@(tLpf~u6#u0EHJHud$P3-$v1cWLtL zieD}Cld}f?;_eY1pfkjryTy4-?b(20GLKHLj}OT^3|mlQD8Xal%y^ni(oul-m! zS6FmaanqeB%}ysqN663CmBf4GDbj(aBo!=ox%IgN&c>Ifx7E4GJA$E@4}o4A4_z7P zs$M1nnE^0Wo1N2{!UpC=zW#iU^r_5&E_J-v9MwFJhJkU6X^8>|-BRe>(-?rPg%`h_ zE;@rWkXx1F{E6iwwnGwmU+io?BO6!P2amV{x%DIG1pr?9yhjr~_ldi7W(Qvzkn5|s zaegxZ*#JRF7t?qQ2WU-RDL``Z+h?$iwDLmAo9Uym-DvsPZ`Lz+rvPKw?1IdnHQMtm zUN3@{5PW5z^-^~WlG%Y>^7ybHd{_2%ZGL>#ZKpA>9RR!wyRZwpaKRw}3z*!ez9SHE zd(agpAGXol1_rO?y)9pSci#OtDf53#GtvzrDY(m&VEZyS$N z>o`mlXGKsX_H6P!4p^+yWP?S4G%*0=?Q&Z>EN`H1-4&IVa?oC{Pg-EQF$@#g5}l@| zhP(}Af60{xVDaLN9hwUC|_qI zH9zgB_mh#9-oWwbl;&*gV$G(v>A=$Az&i(|byY|^@zUvovW!Trk8ANKtUKq}LimYnh;?Fb!pZFx2Z5HcoOrda;iRG$ zAV(cHIr^=yv%lwLszebtO&|d;K!{c(51Dmz!D4la*6Y8|q7mpR*Z)s@-D~K*@A?a$ z66gHBQ6_xx;*i-jR1iAygB6P>p#OUv^$wY@X-XcDC)Gy-XD15#Zdy#ru|{z|kd0oXwO zhjVsCtSsi>9Q%yc)>;3@XbC9N>NWF9Tazc#O@HOmS0ZbiscwPY%r7j3D8Rr*!&g|N z&w{dZ8Hk|YuoeQGDphc!;QMP{^%#B6U-&BeoX>g{U1azhKlU^9?(hHa>4^_N2jF4* zE$#kh0maG$SFsJY`hfm)k*C;|`IAcv5PY~PTSOlbQPkl%t=O34FBo4ZW!!D_9@M?91XZCwnA9o0QHUjbI{m?SJkU zkoUo+u3gOAIX6Kk1s^|sZd(Qa+GfuDuoVjreN5wFZ*OXo)9A-BUhV6#%TizA@?VXg z&ILAKq481nX$sFs1a%4Oj`cxO*Rt~^$YXOA_?%tt+joxX#aqX8^X9#3kLzVZ%7>;0 z|Ni);L;9?%m+8vh9^G3eP5;@=+w{!Isehzk?Lp?xd}RZ1Uv}8Q-U9qyKiG4foGdgB zrm(qk@$usm`ta@h^r7YNb8cLr&$@oum8_;gKfmzs3(wv04=JL#i5iuFLJt2G%|iHW zr0=^q5CErajGuDZFM2kUxXwS*VQUi$U?PnG=vMd_@;;r1dE`w5epL`(RXjlmz_mH3BjqG~$XzmzDA};2OZp+3YN~ zVRj&Sd1=S=*iJmNNJ`)6&%qDnd_@8XZgy^R&m=M$qR&6Nysa+AR@qtS4XAWQI{!TY zj0M}|j1{$ZelUy40?#RAY-3>qPr<(I;{Y}gd+GCTxUS?);JEH%Ug+Goaj^7_rELWb za=BjINKJonR&VIs%0R;Iz+mg#TWJ6)&pnWy(_@fs^{#=fW<#aTKhv$V+mS10&~0e> z%nI<%^C`tFgO>o=m~@_FH8GB6t^5Phjk;=nMN+v|{pn3ai&Zz4Pzz~B#3lr6H9As1C1U8bS>D((w@Trkz$OH2h=O}Y`~TeGHFaV7+kMY%CC%;#qvQY zV`s3ZVFj=bw2yg(Ua?*fP?b&}yf!<){S$^kHWpCKK4e{ODXlj0>w;`+Bz48L!%eLW@Or5L(a_A^Zlko~~Jk%SrdpA$U z5`GXM442Hg{wGrhNr6wVa}cgyyGn2V`aiz>eKp;Cb&9{oSAV`(!pA z^#KbL?3h3vR~-6zEYA#>Bt5JCaNEzQBclOg{wL0v$nI%3uV<8^OOE5pP zAFS6jevFWKqE2t!EFXfqeLA!=@Gt~3oIpd=&rQ^(6$C)wc<1ew>LKN)v>Ef$dTy(4 zE$Ie6VCwaT{?1l=nkTkZeEB0A1$8y!_LISRhWcDyR6trE*txPenQwrV0SIPuOl$2C zdz%khPHl4dRj#u8#1&-_0n4$b_HPkd9%4Gt_OzUv>}S7m05n9L@)vKPDCw>IZs3E4 zR#r{tU-4zXgWmQvzwg4&2QJ$}|Gy81!X^%1z}f3L0x zE-Qn}xxwz^DatG+!bsDUNhzTMogL0hN2l%iy`_VAuK>ZCTWl2z?K0Stl}-6kC@{9K zF7FMDlJfoIm*jWvEJU66 zJDlMbu16<&L~o#H z&p+_}_+9T>&;8sh?-(EJ0(j)yNP{v@#Ww0S zr$jz2JY$CUIFe-mC|SFQvd+WaGqbhH42q8QU4&m>qmv)92ncB_tseP;iYp%jMwQuJ}!x{x%h+d0bRp=I184Df> zgwxgJQV6J*{Bhv)Q*QHk63BkHlBDYFVWOXpK)L+r&N_Fc>$G8#kLIfRXGjGWv~>(v zkaDi&4@{=RHXX2keQdWRDX{U@p*`m$H2JMuKMpeN`9DhuZL=>x$#@OgU>j6sPIcc=Y_XPXI1?> zW-ot!N>tH!aY0*=TLynN`3JCW zJCU>wpNg!O7=cccBerE_>xLt>caEdWfJ0z>dP_(sWU4<~jCG5GbHnGClY*HpE{UIu ze$f!6jER_+z6f!PpvJcAmu*_lw>g8}{0Xz2My1nld@ifdcGRouxiN#ArI#EdJTCc{ z+P4q!)w&`w55Oi3jb&m0@Bi@n-~V-?Yvklm;;@o71s5+(W>dmtj_Kqr zrsfGqfX^ZHRQs`LcLUxTN^D~eAV+{tkM5UVTQ>=~DfUfG~venKU8#iw3J7tE}eaC6$A>EopOvymzKu4QYdkmT|mt zMh`|df<|@8;j4W)2O~9^%uTr631ufj!{~i%GO-r*u4erq6*H zz2uF0R3AX>t!i8fX3j<*SQcNi+~E!&FQa=$UFaKnD(1-V zbkRLCwa`~mn%{|J?O+wN58@8?>}f2}E#REla6bQCf4h}jFMmX%*lG{T2`?}%10DBR zvF`568%=N3DMzvK4M`1l5AyBdrnI)>qgzZF_F_UD+|(B`pM(aH%KBs$kLbcoS`M4K zOnR4PSx;xC&b$);&E-Osk8d9Wwe+!+9?^#Nga^!*CKmVbLn^m`pk-=5xkx`Hr_9|E zhNmJL#L16VlnhcAloRRh_uZvT)(fBHE#ZMU2J8#?hh+DG$7V;~tchK^U#Ev%$4K`;mO`4cHT)zzn{{$S*N!B;=i`t z_shX=^_uJHlq|;Yc6%Jy@E>PS+m?2eXj1($o6qG z^`gpET()9{+Y;~mD;ID}qrL4HcoKBC3ZT%1Ble(2_NC;+ z?f^coHWFLY9xK7e(Sp1D@oN zQI7$1Y=-UgL zdDl#bOB@Cuqs7gT>ZvE+eUHt{%5~-d@e=h}SWj`)&AVdX3t< zrWQKDq{3O0$lLzcoqmiOYCREI?>WF&jozORm^hGN`alM7Ty@T98&QB7y8zzcJKJY( zB{hV5?9AMtzt%Hk?d%kqPRI3W>h}=C$Q?{>Z@N2?6HM-dhZUysSNT$~L9L3!g z8?BE$jE_QZz`pITM$hJ^)JbVtvc&jOZ6;NCe;<_tywU*U^Vlk%fio94y*O=_Rx{4i zM#-?$k7G9Xtf``Wvvc>qu8vHaW$a&#QN-u9@pm{{+qq@zlZ#BP5eS3aR(PKj?cF&) zvG=+c`-Mz@>12K7JmCA^8&$LDq^4un=NLTE=|z#y>w~P=_MuyEjjhJ{peYZ>=me4d zL*(SUANv2U;9a&m{nk(VdexT%K0)(oG`Znc)RSVL3B8(tBah%)PZdll7>xN!{2%`x zCk#$ZN1t`ZaIO6F53k5B3BEL}5nOFpiDh%ji~+@k77_b42pLTk4DUef&_gzT*PO!) z;(jhmx|syshN=ZgE6})qYvqIE^SFGNScK#FmV|ey-=SN+OuB=BlWZ_1(~q;gp^;08 zdDiM(@v{*?!gd{9LOe<4lr&(U#j99s+AH_PF(BEL^q#EV;^pCM5U~AdzLn}VDHe$e zNW3A61k+P7M;p7UqL%yh3i&^5v0h^A+x07aQBzQ0ug>%%fb~}b{OTko;QFaD3PW&R z^zz)HKQ)8A0ykg7fueT$O2z-{O?&F(qFSQVDCea&s_T5Qut zv$>mpT;JC(bM?>NXju0KGe5G2HR|CWiCn(~pG_^eZ-i?}ZGSy`HOMa>I_;qaJ7HA@ znHLa!hoG65qn`7T+>jW~Or_lXP(}&O6RnYng?;$OTeO_c3$x8D4b~Kxel+c^ zDJzYX=nqCDDysd(tSoj(pd3u9eb{ehqo-c_+CVc38M)N-2RR{Dm6qsWiI4KDrk{N# z3QrfKe?IM2-v=BXmsH%E7K=M0^CtPo=Rc|HlA5}AoGPE_pK!+2zb*8();XP0>zXc4(ZnB0=M|SFvD}dp zI-q(`{}pu5QnCb^xkph0yWAu9y*v9Di=1vpU8wS`7PZ>eqXv?`yCCbyp`NPndmv8t zvvt%(($Nn3Zot;6t3=;*qdpNrH=Q{B21l?O{VGkj1LnJLYT_i^5-?FUe)Rk9>L2Ey zdBE~0G;Sl7_toCGYBW1a&TmBgrqv23X>5&|%}fPRo5dixHDH11j8BDg*g+7{`b6Wd z*Kz(VX%zpMlQ48hWyb4u%6{GF=#6?ugkS=>LrQye%wnnbLWml ztV43~WVzOL#d6UzpaiMjYf-f_qyvN3az6dxVf2;|i$a{hFXHEQSBt1OSH^aBeW7uV ze^#CbEZR|i-yH6#*J>EYZ_S=W`PuTha%Rd+y63NM$S%#DP8LVE2#d5T-mxf)V-pU& z8(N+OYhn<*$|eg^eHcFLt*cddk%KM0i}_sC50~j{7N!ObF163h9kaJ=%UAj->27X% zvT=PZRY3A=4)zB^e;?mBm=ZL!fKTdl{XB<3iqGK`822oij!SRR{c8{v!Hqs3IFWH! z-3Ly6tYB|EQ=?!s*w$wJXL5;sQg*d?iSP1F&h&EuD)S#J7PBu!Z|dq@mIlB4@wVwp z`mt3_qc)1^9Qt!hG;Yuu8LmG3FS%#X{3;+Nc-RxQAH@zX&9N_?R|C{=YEDa^nc&?O2w~+PF{%{?shT& zRrYNoZE9vWcKi>h5soik73K+8EW=MTzL*Cw($jhpoH6KAMAiuq6a40$GI~juYA2ew z6Otnb`e<a#*c6#} zno^$+Uyh<&-mJ`dlwtCmH=HY4`aa{Wcjzy~XyZECWytJ!4)A+I}48;}}`R7C)l?^XnjAqd0+= zMHl6tOgKqF*S;I7LE$vGy<9}!aqf)WZ_RubSU4AXcDgtxZW_E+eOq9r@zggzqYuo> zIX4QZpI$~fOe?8j_Z8d)ux&akEBzu5CC`sjy2mlf&NXV}9j;OjY`W1YUMP~Oo!?hW z<41aGE|$!BtEF5FwjB-K1vFSRapo2h2Qec#hSDvU_p{iYP;6*p?C*o>8X0u-ZT(ih z&{sJ-Z)A6_eu#{ImaH$4=*mL=1V9(vnIqUV&yW{0_A%EiaMn(;1vfw_Sl<@g zg)*S4d`7^veC~);B(wy$*gz;aHJ(G0K+fsz4g?1jpcM0&U=m)iKcbzEIf4J^Rt#7^ zxo~y3h}aS%GqHBFSVhXrnktL?@^ zBta;qf$uhhUQ%%1VSxQF9ZoY&BYj~7qs+l>eEFdUNn$YtF+?uj)?rxGWyK;L+m7S= z6rXtS7nezF3)V@=u}%Pc8Kr?@HI3n+(Z}t#WK=rio(i_q5;yzmFHY7kGpx4a-GQ%R zEX_ocKMIILJ(*T@xC;ViYL$xPnn=bF-)^26{EPWJ_%VxT4l8(nE6eE&tpn79hfA>( zPws<43Hb$7XUUY*mvLB?%_N|^5R%{FnyHrIR=Zt?f{;zYg#QVrpg1?#F^s6Lv z=_9(l?HN~Y*<91j*U$4!#+wxw73#KV>)>-AF4KekoITP{&#E)Qx1SOG!lG)HqO<6R zllF9t0l6(>-#TcXm;$AN;R&0h!NXIp{}NBIItxPM*nwD_KA_eeo#RpPu2VzPg#Wzw zm|q&JS<^NSW4Jpa&CH4J9*B}1WFgOI#KADxw^~@&#}y@`rJO*IKlWHB!w}V=T@&Ew zZZLVEc#mcvu*aCw#YAK9Fw012IPuca$J-ZM+A=y=1HDx}@Wtyw6PkAnq8NxXR_G>s zt>;^xam(tN1pH4JswG)Cd#vO2z1kUN-1#5s9?aD$v+Jqy3I}52ptiMV-0^43W^<~- zezkSx<{`mH+1xL&f3_93uwevG=B*O_@T&*Gn)5@%m35(4Q$@2_8c(U9PT#9&(EJ$dsLah^u}(0=ec*Al+cxPu~p>C#nJUW3D)blS-Z#Y zWZ&~}t3xh%v)Z$5hC8%|?o)=cAy-2k?Gq2au+HpEnI$cVCrPQ>sX3;68P^^@)mcn* z{bcdC9ATy>bTerH6iAt#)x>QUEoxxz2DLSwiMdSnE`5Jgy&|RdFIm@189q$pn9p-s z=~aa0Sd^VBawnRDwJ6=P;B%Je*|Ya*wu#Rjk;j8Tw!esT{9RmSmS62L1O@Ze11t1a z)wLc!dJRZEC1cZRp}AK5OBXC`k;QA%m7qV%TyY;nd6M<~wHk7%=>eyo+pY7+EI@_j zPSW2u6~-RJ#Se@dM$o+@u#`|POLBqR=?^p)v(?CUN+Qh1)Z<5-|3pp7IM)vC=*S5e z4b|7zRjD!AIuT@pJH&0n-Y{oUV6%ZV1d+GnL{E@n&f?WD9$;m95P*ga58pYou6ta? z-fNiT-f1ogN|Ki9S#4FV^-CzTrULaL`ow z3pk1Jl!L^);t>z`8Bf~1>YTE4tF5<29=6lDqV&o9d`>LKG;I%qq`=-(Fta;WfXiAD zrREq#o>wlN(ZjO@KVY>JLL6bxPTwA=#`CuSBU-?5*Vjr;6pio5{|)}@LfW^l4^G)7 zeBjMh&m>7v((hgf$>jE1u|GP#A{qH^Z3HMV@j?5Nq2T%v5TEVj#(i89!xq|0hr#-h zp3T$;a{JIW)0BT$IQb2AeV(h!ryjFSQy#s4_iB%$^D~|&`k4kzDgMI>c2j&_3gR{f z{?&cH(c_w-w93%X0MB?p(}3qC)f|N172+apwU7uN8q#7Fo^0q9srFT(J|VMjj>oxG zb&Wb0UKNn!^7jB2iS0&~m+lwj52tuqg3(7@(o%cPR~9z*uRSBf&J6kxFRPRp=RWR@ zc{YeYa+4FfGD~fx?jM=HW*1O8OuWbldprqH9Qzf3sV$bjZKsGx5BU+ z9OQ?uAqz3J(w+#&6=yHATE)fle(8#KO=NWzq46e%lS?bsO*+xfl{(r6gdrg75Ha69 zA8n}T!801O5Y~~U4tpa!z&(jDNiw}Fkh6z&+I^zQ!NB}pqh~(@EjyKY7s!J9JhS5Y z#f3rA%w%Ho+XqwRxnBXEC#wg=tvm#58Sg}B;`}9ZD=pw^23+o7*2zKi+YmZI?_LmH zH!D(Z5WG?>W-n>VlunApX1F17JI}Dv?x*6F236fW9Ufx73$EmF27DX-`0NB{QznT` zf7avSkNvzYwgWrBU@Q4j#Jz51_vCl>2y`+#i7XR1!z;|xNY80xq%O|7aw9f0(*abZ zvvpYeA7rW!?v&?9Z%b&^(QuzfmV3E=7W zgGFVr+G9-h)~Wjy9S)mh1SYh>wQB63-SdrzLZ@j9yQPUn3jHeoU*6YTOosGUq&upe zfrnb}ex~_r%eKmWp;ggfGH&f9+a5skqgYVgLI#-&@DCl(!hbObQ3-#$oOoNP87};_ z|LH$WQdZ9zYkS?;&Hm1ON4E#nTG^H4RZb?|g*(WQyv+M1N@><0jVjYKxn#Nw&7RE1 zzy&{cb^7#$Xp?egfS=aT3+s9U%QtVN%!uu_)3{d~tLc`$w$xZx4@gFZhd1geI`N^} zh%sh6T}BCHRAM+eugou{c0GrMH6`agv(=5x_@cy;)yR~y?pW*>;yh_G>fd@7%2(mmFwc#thtu}nLUz8eigD=r~ zel2gOUIEVS;|4ljUbIJ9+l-r!+vMq9eC&Yf+}tqF1g2uG{7ALLPB}PO8t`E|o)Q}4 z$PJ#@Ie*n(3!dsw6Rfaf)J==a=~E8~c5f|}ogVn!{+(R8p{FcfJI4PE-F$sv%^mxI z7E_O=ccvKo*)RmsU}eeq!WN^U9yIbWeJ&d~3cW9#6Fm4*+Rzn{1{bqHujM+ocqbP85?m-gLuce3fn2Lq@ka_&LQ0lk(V`^S=gQa?g)`7Dk zzyLYy-Z0Zbn69=cQKC zY0LRUHXJRz-&n5B-@Oe}@4Z_6P*7NATbpCBg6~)MeR81?C2Uh|TPS4VP#4&b1!4_F;*4+!VxddO3Y`cJEL!B}R^!H;GPRIz+N ze^2K7uh0?UUk8A?PtL7sL!W}H?V?a{4}T+rk5G3eu^ghcnmdxpS%VQLn?Vw`MCVHmBTjXlyt=kW-0XZRhu?V;^eudqv zaB3b~;6GJ0FkrMmEejr%bTkaVa0{m&K)5gdP@P5qE)R~oIz*>1#TfegaaG3mWzQsN zA{g{W`FC*+xhu8q?hbFyc0w-E_^hS*RWuR zo3#~W%57g34J+K!ivD?R_$mg0&qUs18$b1xXbBE;;BBPRdZtg&!s1{h`0)kMn$iGs zgSwsVNmKl1p6}&_Aj+UI@ip3<9X`10#fEi8-oYo_p+Jg4to2I+KrNF`&h+RDp-e%R zdthacmO$Q5#1BRc)MHFjH=?7lPtj3?l(4$-@7PFjP>cwrh`T4O#O(4C>+g9oRttx zXjnurw^-n`y{XerL!628U7y#%lSNs9w%?pdlZNt2lwRnRE$YTW5L?2!@dQ@i>JA%& z?y43P{i?*7GKtH76~hTx1%L^k3}$CQVdZ!Me=rAZ)t0^f4$iHU`#ewJ>Ew!Pb==^! z>$r6x8$qMu8)wO8lQp>nBoq;&h{O!oQ-7og$gRJ>6*s{dI;Pndfw{DwxCaED(F22^ zM@}v!tU3O_eS-&StA076b+WQx+OfCjd?HA*&|hm)TeufRsTfpryxJPvpTUBZ%`WOlLiXvkuVi$JQVj4aNzfk4lIl851+?5ID$BDRB+R@)jD`@X@%Xv zJCz`PL5-E8`3sAODDrhoktLPIgVf3+YT_r4iSk&reTmM*f?eZ9&_#3Y$41ibuFvZYr~ zEMACy=g0NA1(zT+hV&5vnU2RLjY7*JOd$xnKs}A7N<(a;w?Y=25urp=4yH)9_DgkG zfG}o^%uDw)I0$GHh}j z*sNtb7tiTPUcbP2{RA1`stZ|V;ALe>^gR0*;{aGI+P(*AmMG+4v-t?Wyvd1(>m$@}lHckhx+-m~$5MF^aT-A_X373KxKK=x4y8nbdq zuF(%7!6Pv!?4chz+20D_rJHP#u!7-|zEF?PlCNxXcK?bjjbLxIw)_Z1W~};r&^7OSM3zQc68pUb9ha;a1gilNxp8$O(gN#E&tNeXr%1B%EKA3q>TO~s@UW& z8Xc!+9#ljx7nF(`3!jy{d<26O=ryGQgSi)cAL*)8w`TWpgz;oea4X|`hK^q$qoxQf zzUAN|u8^3h*}&&xQxJP$37Mo|=NO%hrATANc+9hg)Z}xORetpHPEEkrb9>Ai=@#Jo zmEO>a3pZ_OB5?^9gIfRFM9Mw#js+j#rA)-pYS|qqTvvt4E zzb<=7IyW7y7a-8L@Zh*gf$s(O?lPAdNoST$KWK581_0F)Utd|Tzcm=Ri2IX&K&^n(`zLo?#YY9sFlD*e09(0gS(vPf! zaRC3m;Y*7Jf|L${8fb6T~eW=*I=qyd(sgo*&fj2S`-j75p9<{e81n@OIYa zR_7wE`f<}E@t>Tgq=MOX$!Zn+uAJy|BXb^xtdCo4jRztsCdT(T`>l@9ru|BZ93$U6 zbCa$EI)qXP5cThrvy&nfwRuQUhBD2t&Rs<)H@nu zd4UcPi~|Mwv?-ruq7Qw(;f~*$BEKAk25APVv8+V@w!r_kMF>pa&!@04dbx1Ek=)o- z^9(FOzx1BVj9lnWC&;$f%Snnw+){XvDy|#9F+0Opqg7KV?=0%+Ay`TdL-RE+)t*F@ zU8_z+D5B!+o85c2-DFpItEb+YwZFfC4S*h|MpBC#x>|w3V;3&%r}c=X)vKb5y%NR*B#+0_JLC#F{Rrsg7&YWFDD?njG zvlB}GAM|aWL{YJ$+3jG#hP=Rnc_CWV#pei$u{~J3Qee#vrTX`D8hWZR_WRGdT>04y z_h(o=Q0THm?fWU-B_(Wm@n+>KFq!>Jz^3b4mzuz>_d`@$D6U+;jxn7jaP!bM0=>#q zj2RN>uL3)};}Vq=DH5*=Ca4Jf6x@(xD$Qfq2M6TR2-9;~40$fZAt$g-fGb7akTc42 z;R0~ib((yl`Mm)_^ zl)Y%`7$@n#!XA9H4Gr$}Kex=WxYnft5}Jp$?{2t40;K*S+dkreauugOwM)aCCg=KBN>+jD)qYh1m{eJOu36Y*F2N>8l)9;+g zpwE!Q2tR%HA7*#H9L~t4()erH?_W8Wk&!>+s+*2wED(K4${!mtDV)>zAn;rsl3Fg$ z$u^r#4r+Rihxxg-Y4VhzK%7nq@Ry=L*L-M0&@coE_}~Ck&ttzA>1b}R%6Ykb2klAD zQ>X%r@LN$%2VbnSBYBz80aaQ`edmb{U6ki(DK4mNTV-o1B*t!xHG%JGGs#*Y7Y}u( z`R1Sbmm!mH@(4E5pH4nZElj+VP4dXh|j$=7{z#@p+aV z#5r!h-Uh$=M7#kly?nHNBWo0w+8D-JvTz~9n%%Pi`%JWv%Ke1S7GpKU*8WIS)=|07 zR@1QwYn0^pOkm!OP!@PpjIUc|9>o*-t&u)&y@vMxG|;)|e{iH+H>%^$-;Js4A}(CV z{H|Zqaf!2y_;@HnwlL1s(k-;|vWfPPJ4Ys{5i$nFHBm3BCgK(M;wpabl^E~1WaH6+ z7RKD1FanGwPsByGXN5?F$e-sVt891yWkP%Ao*j0z@_J(eaZ%nckF8f&l>9=nx~UrE ziUj@?h^pDh;?~ytBg?n>)qXrDoZH}Q@V}4Irp+rsE2jF4QOC4X;op#z3a&J#5hRu+ zeW%2@67XW!U@03=nUvFdjJ9ynMRI0x_r2C0!R_C0TdzTOWM^2FfSwi@DAM z26^n_8_z32o6}ViQZZxHW>$@(R$|;^82;23`w0DoG0)J_^C*j{4_>8m?Hzg5TMkh` zt>3}dNB3oD=J>*^o%1 z-u7{q`MA12hpDCfQx~s`fle&bA(~jolzRvyRPl z+M_vHPEgp>VDFy`@l*2}9d$Di3@5pXVjonRj{i29j(9OCZ8X0WHt`E$qOEPra%PEE z5ydbfcK@4DUe>JPH~E1m??Yyr$Qou9q*mT!@VGnfz;_QECq%h^8l$oqq*6>i`Oi79v`c!_p$BGB(7Bsu@3WmvFkaPQ3kR%9(VQt%;=C92OJI z+Nj1R5;}Pq2a33%u zEX-|fK$oALyqZgkI)1g}=2b(oiMx}y78T?#M~$h;XgZ1SYKXQR+LS+bPv^56tlRD^ zMv2e7{z)26`}ixs+u274rw%_Ti6s&Y|XnYFaZWc6usueOdhkCht?m_+JWN zvo^^5rDQj%Q2^f4*V)w_(m_0U-gY;)dhHXBqzME6<_4l28%0p=GnT@-Y$npyX;=r8KAzw!B| z>LdEa0<(ilUi8lJx_2#X5^#JXgnegz6FfDGkDKZGy_pcWc@m}_sL9i zQ$!;|M~!>J(1d_?gce2zga5$D`(obOV|}e_pl;-t3;2OJh-A;u<|e~sdA`HHJ9IOu z`x&$>e~&{G^q4XVf!Q1}1=GAsytw%z|DqB$TQ4s^b zp2$*`eeY_X&ceJa9`BoC?ET#YIX&^+>DQKC8~_M$FCn*3v7~&ZvvjBUR~aze;{UE+ zj>$XTCwfthylN^D9W=b}5$wGg-YtX?2LDl_c>vn02~<8-ubOv@*)J@SrXjmC0?PVe zd=ktJMZOEyl=X>?6=i=n_Ux}3x2BqCeN!Z^vw3QRt*75U(Jp_h+CzeS!Bo)Ecx?}3 zDUE~mhLIV51%be2eq1My9}^p>7-hWJsK#=|m8agTr?>T;nu#W>&6FkeN?GNQc>j_2c`eMQG5v7w}PYV$Jt)toZ89cP}Cu`%5O4l;P-n zSB767qKR33#ZIrf4&<1eECZ2_`TKP+Kp74>drN!MpUwOBXU~_Ot=p5)Yu%&`%YRdJ zxOua=#CPK48I}Ja_k)A%GOT9x8yFKq@^D2}GpdS5`jHF=pK4$nth4)m0)Bw6mW_ui zlq-nV#GI`NcDi-kcXY4rH993^EjdTOqMKUaTkwV--9u9Aovj*4UDgi=v&n-AFBMe zQ=8D{yq%P#@pqay7vDmG;UDP{yTjYe_S~@b0noQ z2fsu6Zpsxc0KOb&<5yDoXO=(uOv7D@#cMB6g}RRc>5TjQo;^kfuAT4P)ZCHffvDlk ze@f>YfXf1OY7HTzr)Fr142REXS%dwfIy@=Om?nl0KYW9lOh=P$aE+CX!Nu>D{SD0$ zY=)JvAMW(A_=09~P?42yT%o4~Uk|_@y={wKY5;dv^5dUvR;y(3qwo7MAz$Ixedo7t z(Iz$`C|(1xL**jf^(nNZ-?;i?HTsfYwPRze;%wRE5O`-Z>(MMx43-^aeA%~2S2CvS z9F&I)rpsv7Y|JlibHEQ|aRO~{W^?1@{v;E~u>R}^>}=RZ>W=kRJNdL5OZjg8I9d}c zSn@j3A)fZ5{@_x8qPTvGBx_8)?g#rc7)H>-iO>Jw?4om*2SW@6bWkV{V6bZ?I z1KrjbFZYdtMtv^LDG3~SD4nrXrOD!dADEQ1&#Amd-7&RYL#hM6(~U%qJhojBW3W9c zo*DbCQj5U~7Nz-#MeRZ(2NTayr!WuC_PHDyHUUI%aXjjWRMN3Qw(xVOBjJ<9an>Q1 zpH4BG3}IIe!!(;w@#dj>3D;@#&TE+vcYoZ|^)Y@PWWh5ux+EZ$yLx$2z;B4#HaUxEdrdGt zEy_HTrW zaZlV~25`Qf&ZGB@yy(^Bpjl9O>BIM8L6=iG@w2ri2Ox9NTYZ-yp_e9}j;hw!*FDH4 zQ;q3BKnhSmt@JtCO?Ro*SNdO==4ET2r@}5JGK6-g6*k$hV)^C#s2`wWs>$`ozXY;_ z^#lN9DT0Xh=sMv^$Jlo~p$}QtDZd#oA|OPfd;pi|htvQ9&1poF zGi_@WSBYHi$4tf6s+`}$=Gao*oitahzn!+98hKvmt$bhk!8kRkj8~Muq4|>Op!Pxi zp}_jP^Fe*%5-Ai|N*Z#o96dHtL|twQKo)_9=3^y0!Yma82<_~^Tt6^8f5a* z$F8T+s-af-Q0+xG`ccjV0zE&6`?bqL7jnz0#S}2{>nllD=2MfaMvmKX)3*8` zu&sdWP7x9hBZG2UE zbV7`J_Mm{Z$gzD`kj-Kn#5<}pT4&QvGCn%@^J?rBz4$vBg#u%i^4wz9)ZSf72lL88aSdd8j73Z&vPp?0X~|v30x7i@;ANKVsVCJi2UN zwNg-N8VAsQNcD08!G(G5y`4GFmr&$u^<6YzT12<@Pn;?|zs2dbXOa}xAavlHEAgf3 z*i)lG+wk`x&`;@+Yab{};5~~Pt!U8RX7o1mS63HbteCb=y=X@~c#y^>oeFvNOh`g= z@((fR4)*)-m)khfdcHZnH5A*r<_r30swX@N=?Lvh>28W?%K*ue*XTxSW9FFZJmepk zvZnw(Sk??Fs#%mNedkqojqw+$7=^#aWBPM^19ubeQ>xsRn>L=B@I?A>K z>bK_4Zmrf8#RXf|a8(vzgl1PEl!v4j311~iaMmDxpX?6U0p!o^eC)f zw29NFICG7%GOE(|daOR_VS^SYkz@s1$D0Rc`SZWQ61H*8%^Xx>Dn1u(P`WoI-={|B zi)IowB-Ki@$yXnU5XE?;u^~R3X1H&#G&evmPJD)J!XqV<)cDYOLI!wgQ{RYt&;4EMG!|-@cp{ znSQJcPzc<&YRc)9?XJMoL07B$LCR^9(`EKgEHDY^O0-N$e=ZMUK;6oJs|xwp4Bv~- zc)lxfgI?-oH>V1rnX8&;3UC*JUu%vlL=a1S97W#iNx|QT1SfrNxl{in!KIoh@Rii} zan$HATDyJjD!c>Xev?@{j5oM^5HD(3z-!_btoAqi-ttu;{O22$ca2pAkBt`}`#KrR zt5gReUmcyz%d__ts#N04x^C&WU)1#$Hj$omitl2oa!N|R+?U#WS6!}ll(`7L<6m%W zM)B_f>B!Jo6>(U9?LTw)`1q#{`F#p(s3{v+`prz{@Cu)qz;llECi{hwm_4}A+S1dh zuI|$s>q*>HMuVwaLk%5{2^pYKlnfU)-7A0DLB#m?i}V?h-GwEraZaT{k> z3Yi!v3wyX28H9zVi;CX&Ox&czvO$Mg*@9Y4LG7$hdZV_W zJRuPr{(6BWZzg6tuwAZKb`|TVICoo3R@EFH|C{O= z4(fEd(SDweB=*dDjo!^INpoA>H~6l!L}q}FtMWYY?7a^cf7IQ-pG%m_A;ut1uMB^X z_Y%Y)p^5#jekfer{cn*5h0Sn`Xg2(&in64@I^IZ()dzCH+19**Ce78)={gt#ftynd z8a>#N4_mDdbx)^aU3##?G*1m*`bmwqTWmZPi5Y>yxSNDLsZbabcF}DXKG)W1TD4=Y)YQQS=(F zO+g(Tg;Uwq>y=!%DIRNZ+k15FjP^Bd+&IPGS2UaVp8*`wG3HM-GfOW1(X(f`RTqhx zdWMsT!60o-4AHVW4_C(--Ya)pZ)e+zuQ6!8lx#KqjNbLS<+3YcaQsPaKyCZKKgPT^ zSky_umMVPl>y6g~!dp5-DaWK*jtfH8783O{J=o1nlE(hb>m7_TJ|VTf#^NYS`y|A> z{i60zrz+l@-i0-zTi!V$L^%9-?%|U&_Htv|}Lb z5Zl}tD9eyy(D|)@Zm?^TSp3tojqMm~$|aS|sTlD#b@Ed_=K#ID(a~{<`TxCGsc)n1 zanLG(i;{#IpD)JfvD<+2-VWDn#L(l-i__7>gdbKz_1@{MF%^GY%q}(n*2e!h*(=>t zgpnCyLTY#mjr98|ORtL`_!YVxv#DOy#1wMnjU`W8snL!KP}5vyOjeDLGX6b9Ankc2 zOEegjxxEbkl{QVCZ*1^yMNu6##tb+#psyE*o2uVBnvMOt@&>+0!C-NpbzD&D8mxZ4 z_)Jg5XoNxPr5nL>z!bUb)E`Bg&63^e};g;a#8WS3euygd5^Famz zJmY-59kQ$z@lm#aTm@mK+z#S9Z!CPz(Ql#mV|QivQt)euwR5>A?DXN?ivNR;O1(1m zH`F%O+tc!PZ|Xr#w-Z7vLFyOX;(Cv%Zs&L(4GPv|iM20ZCADzpS#q z{6KY%YIT-ruVH86TDOl1q#9(kXdkRd*0xA49rWnlS^{w&V}o!m#2QZg8`~*#c4?WP zoXvHLMWy24{F%&mJJYkZM=b`II7_0N8J*`^)ryaYP(P##IDr_00Q znq1(<+P#U#VIm`>bQ~Q15P8uQxB>rtXNzs#_kFf9V*;#NvFP@-y9A4%A*ukN+IqDH z4#;s|QsQF82^#brQ-T8_Z!&Km!Vy26Pqq1nkR67>RC|7J-F^@g4|4o#$I5#9-T0xuWRl7LT*TkFq)7AS!aRYRkvoAts18C!EzpVX^=jg~*%m4}T2buTU(=>Y0*}q5QlcH05w?F9>YzB!F{Mbw!e9l zj@|>bs^X#DD_zpp?Eszvf2zxnL-i@ludMOc{hVCn=0FdIP;2s|KK%98liT4_Ws`rX z`3FhhZ4sky0|16kthp*x%t`^c{=`Z;h4aJL#}ejrdbg(<*&rpj_;i!gtOXdKBPPPg zV~6__Xes+n6A|71rP^yJldBzfyE1L2k6}E<$X%(mrz2GQ;r3M=u?#dLmRQB#JF_P- zLWTma@4n7HrE!=!`{&_q^@sE2%Ny&Et0!by!~5zeY~73or19jM_z=aW=f+Q34j8+% zo+n!Re9GS(YpXU!C@i$n!q!|)VI5wXM^;IPyM3otqXxNnAgIssPD$4H-oNZjjHjai zlT(P#0B93*-X8)u<+*Sox@O;uO{>D+y5sNDN99YZK&^X@bJCQ`;3YL&JTfzw{6oPL z^`6ysRHBZ=uMIZw7=`#(Ir^;cAH*uFh<3M$ePihxK;_s}WzQMyaI zyM_{w4hhMjySuwPgaL-`jv)pZ7`{C3yPjvQ{mcFX_ON=S4E4XC9X6UdE`OZaWILaa!;r8~zFcmw_2Kw6DWOrD*xIdT z#>xl4nOIV=M=U~{K0>;*5dMxgk%25AIR(e*3n((Qar?d3r|O9qwl{8G+_<}pVl2Bc zvR=ZOKQkT~Evi|Q0%1LZzw5bte8~HW-_lEDKG$9hu0Qz~oqG>K53fYwE(ag`2%m@7 z3xQ9!=UQSLq=62_v09ahez>ScJlKb$({U}GR7am&5ojd* zoV+&Jquca6U=S{Xc;8A#0VPO8fzb!a%OAOhbZLbPB7Hg62}aS_PPgM5cfHep-*V~J zpymQ|ZM$}S_Xz2|tXYILR0r7#9SC`E&OfA_0~)>UFRBvB!ABIjinW7^LD z3`DxE|NKUpX3<(em9D1x=l>3SQKa7 z=h6??K3Yr#40Anj3uWb0zGtKFX#XNsla%KtY@{C{v8`UO0wE1}pu>laW9Y# z{gj?bs2{KfdnBF{e`4l^jr+Dg@=X7GG;{sR6iP(wBdIvP&S)bH5pNkXG)j%gwG} z#9`t99r+ef(72mB=i0?`=CI^f*^u$=_UoHQ^DKDcScH?J`L*t-BDdX)LpuJ5>7=$J z;dO5NoigXa=)V!;`>+)+Vyo#PcW^X;WV(9WqF#?NyyrcQ#DENy(cF7jqp+uzK;{XJ z>x31vwZiTOa%B7MLFW6&`% z<^5L@44OU5?TQ~+|K>-o6eYz36;i=!+2VQL9j?uOKV}!B*s;l6xXbvIrR`5YLmxC> z*W-{+RK@@CA+|$uIa$k+pRjrNLr>Y3LT5*P0NYP=O!GK#p=!{}SqnBj7o2fHtx2Hk z&0F)9%=%Kj^~^8X&V4mCCVx9A8knT`O>{UCvjy$%`2M_m`|G2|)$N!sURly&d#W*q zgC{FyrF*%8H}j=bv2}|z+;s@*M7$}?pBp`2Lc15{OgP6IBXe)#`5lN>A6PK46%R5b zhLkQ*A&KIPCiWICv*NFK)|cFTwwH~govvDh)MB-Ly;=h&>MGLQ^6aOiY$^Abzzv;; zsph1DVG%an++|Pq5yn2?t>rJq^XYclm5tpDM7kZ_r)5*!;^D`MIDiwG#Bw&REUQV$ z!)=oF|5K=Zr_CREO7ajnXnnPE%2)+?X^#enh5J)y@_5_SPeq1h!XC3eYg`VJ8c1Q^ z!HxhQ=cKYzH0B(yZ~Tm;@2DNxP`)XsOpp8{1v#L}Psp{ZX(fnQfF)(ew#nzhQ^{(~ z(>SbJ2gh`fxx!nN#GdHiPHu4j=4Srk?~BUg!hTPNP}=!>T?3yn&UX?^$F=hPSM=4# z1bh>K$}7avi7tM^V!E9Qc^4l5ozD9j{H+o%X$*aIeUvmIO+kb$wzo<7h8< zwt0@b9J}4XR+C}Ytqe`}ZS6a{jK7T@2@xWs?p{2bEI6f7jA-*^)3^vJs^1ON;q5Wi zLPS2RX8kyuad_SDR1%&@)GX$;*ck5K^?ognIkuwoLz^^!FGHpgYfqVYfXB9%5v+pD z0~dPuLVS+Ax@?ej=vXxEr80iQgRu>?!N_8NTmNZ`(w;lWgTb?1?wkeJ%oK-~$GL~D zST}2m%AEw-7P>j6b_Ve_M9C5**L`ko*RbF!H0J_GGl9(2ey;@GHbi$_a z@8wvxlcIZ;Y-0?g=5ZAyucl?FUOfc1n*N!!lN(9Dr%%!8=;88f&4 z_ul5&_UGSWpmH2fX5_0g;M-qz6rp-Pw+lXsa_gN8f>&ZK=tqj-S$U+kzE= zszA}vi?A_#B73^=@Z%8y^}Oh-D&WuWJC1$)BSar(NIMJ~MtB&iUz=Dy+kGq#to#lU zu2I%e?#!Jp<6U?bOoePghu;0{iXA5sQNVKJxoK~&61#BS)0ML4{WIstsnFP{xtIPo zhdRM!WK$2#D8Z9m|LJqU^>I<&mofINRdqmBQda<)(co=^J`IZ#HJIRV@FzGXMG$d~ zitaBl**+09iTUTICKuQntfGc9i^Z%@JX) z=J$TC{$1fyKQwRrwyw=kd@UaCU_Njb4e-T34U2PjD+3o#xhfIsG7r1}gyM@@h1*m} z+%4pSvQn?KEF2y=!7?T4d;a$Y+ftaCXU*!vtVhk^dF7l3bbLL#tX@mV-u>ol(cYpT z>OcRnl(zQaZ9a_MN;Vr^6(%w}O1!@+9BqW81jxbJR9psTA(;2)?(fk;yHN=B-ow-) zyv)}Jlk<~Q{!v}Sz(21#-foP`#Ln^A->d=5WCWbE&Rj-?w4%Qe9YhW{MKN#?V+y^^ z2AeY|Snt32bbAX9u2h|jO#(vf1S6Z<_6Sz=Hw)M)+0WSsQrWr}MA#(^>Y{S^aW%tg zUl%Bij@ETdpgt;3uqnF^oM%wcr}~Q<{H_I_1z$Gb`jYX_CR?E2yk4uC;o&vgHNSpF zP}7*3pmLFL4%YBuuWK95FA>RKvOfJ)_IeW`@Fm*9FC#G=T_lizV$awqitxN^{`y20 zuG9XeI>a|4xw~}z{m{dAu8T0{!sGLdD{^tOAQzAl1DdhGG6*X|t!t~y{Yf2x<@(ub zw;sD6LOf7drxo%on>oBazbn>;nV)=A`mtr>$N;UB7+~)gNItsg`6EvG6S>DQ`QTe! z)5y8T=5KLe?iM?&-ejOSP#)2F>7Gvn!j#WH&6wSh6xCv#idhUMVK*bqSaRDeWQM{J6O&9Um0H_ zE>!G$`&x2gtYI%B9st@FHgev6j8y<-LzA{>bdo%#!~RxAHOpof&~BR1;6b>>6RNNk zoIi{gxC~Iy4E*7@@T#MoXxRZziTTpou6*}u!$=r=6PvKaQ+7qR6+I%~SnR<2aBU#} z7#k^L5#B*3Dfsn6x7@et5B^U>1YfmHA1ON$8N-1MI6>8fIF(H$?+o$10l_c>2-zy8 zI{(Z$-MjZF4i>$sw*)-ttpBCCR*MS2ecv9TDTHzb_<%Nk@ER+K8JfVNiXqrlv;Bd> z34PY#ZYf?Eu30N-dO(}|OQT`H#Z@wFPBq{^_M$@l5Sz4VMsXLD`aCltAV*Rh>>on%pMVUzCQoJ^kGEM2*tSeKFLh_#^WB@3xjhq&nOm@QJ2)Rs)UZm~UG?PgXP} zo=sJ-(Gsdsiu<`2$_ z?9mvr9cY|#&&Gp(*zJLizBLR~`cGsa<+0qHu|(OF@=!`Wh2Hn&o!5ITz4NX&aO3=b z&Hoz^M)#a((C(vm<22}!c>ykJ%xlP8>R zn11jg9o97et{J(_ z9(DQh$o1NU7cC&t7gwBL*uh{UEG`*!oy7UU-1 zb?G75&c{efFOG|2X4h0_N}Q>JA{9E3$o)sU>~v4nx6Ru;T)QrDOqcPlr8n=k`O@>m zRg&$|$2T(phEd#GA5*pe+9zYJr4V;vrDHxOU-^v*baCZGOBy07d-9FFt_s%AM{7HHtj6(cN(RCP#vm5%epU(Z6bPdMEq zz68t`nS>355FbpVXnO&yyN4S(Z{)qt&HD}XNgYvqFKwiY?YZ6%o=ZlB&@rwl!&nu0 z*zdWXMj}e!ms*o7`@78CM zHc@q0@%Ga$4sUkw8V`WXPWpQ7H(m&DGo_V`_HBS}<>{_BmrN?#=dRI0@Ww?bXc>k7-o12Qr#d>T&0DS@hpP%rbPTCkCXflTHd zm85|j`cb~V{Ju}r{r?zR#LpjZ9oiOMKw$sCwW~Fnd=Gy(;mic7A;;e16X2h+TH!%3 z^cVR77Uuo1WSr) zdi_x1SeP&O_?>j5HXG*pNHoM-6s#EHy=#~GfIm3$I6dEwGF?bfIKwh=Q>J;~0z}+g zw{-2^T&HPvMHwJUQ|68ho}63VPiqx#a*DD_AkQbHKq(c_9r;7cF1$$e;%ap%9@j+a z`@#F&Vo0lB2N)ay`W-A_5TBwEAdO2|Ue;%fVRptszrTk>vl2kxLP|nqI|!-+GT~a6 z@*CSsO??-7<&MPdY7Jt@j4kLbDRyIgzeaJiUY*Cee{q*B5zmJQGfpeeD}0;%Ty2r= z#>t=(;PtF?rO6#{{fatq%t$eL<4Z$9BHMv(=U(Jt#f#)Re)F)%Fq`JC^En=La*k|A zjXV*G$xy1uOiLLmGABlhMC-S}C(5Tt^9ys}(ETt%gJoL?5}vu%n(Sxm!Vqi!dag;^ zoX={31{^AS^_S#!{tG?X#)*ZAN}6m_NbRNin7k%}tXU@USgHldB3Qa`F@_O(>pg#9 zB%C@#IJ$To`)|IxDvjX9E>o4|@OZuS)z4Nmysofd=F>G%=UbZPPnPL_tEbd8z(gXo z0qwDDUc$A28ot}xB!YRnWN^C5;Y+k2OE+NMr!^$!%0_hLNv`hMnfk(lnrhw-e9n&h z)PNYej^8D00s^&MA0z13#t3iSA}tEr@Scj!!9OG;WcmigwzG)%_m=B?xv z%+_1&`{%P@|PQr|9kVpnqz?e$zY_b*R61QM^W~eABAT#?>T2& zFdKNP!w86fW_%VN%58F8ri zUav=i>D8L9SwVq3i$PwVm;1(NH{ol}f1uR<2&2T1DC)xVK+EuUJr9W-yzJwRpE|p^ zx}Wh5^eHyN#i~&ZIfv&ekCoXfP34)RB|8Dr{bm@TD8_WOx+_f_O|CM0RNQEn07)$6 zy5*mMCC|p11Fwz`v7ff>?zZuHa|Acf42}bs24FQUp)F%WWc80G1ehp_775+~?+&%d z|6St_H&PYnmd|?iFf@f?+P@XKT~rf6YtF!6>7Mg-#}uu&T-a0F`(ZyJZX^IDfer&< z%ANGwlZ56}schp6uelxI3lN1euk@Vbipvtnw^ky;dG!J9qS=vY*plV5fCixrvR)VE z|1TQ2U?P6KqTM!VVRLu^>Fq&mMivz8<0AsQh$XH*{9?7~FTQ`Xw>r3n18Q2iIL#Oslr zCUs(ybf2GDs4G-g^u0avI(u?X`1a7&qtLm}RM>6E+`3lW#7~u+L!M2T99PS7wfiZ8 zWq?j>+ZiDf{6CW&9Sk}>7T;9+0!-eEO6vXnhnYwHjpKRy6A^$-wex-Z1&K&A8xsVs zRZ?`RS&BMy4`@;3|3QCjJH#cVGQ{xDF)oEc|2H<{o6BhLP~v-9l5c{a^kp_tvN6(un<|lKfSn}I(J>yHL3a`JH z#FXKaLKhqn%@S-AGiVh&0uhtefR>R7z^?F+dhsk6c0b^6z_MlIZgf?V>~Hl7&^Tc0Py$| ziV{(O3@gQoft@{YgQx`$kM!+zg($oKHkK~<`+i)}v<_*hu`FU2>1(jO>-gAqF$CU) zPR>g2dG9gi$v}@P6ToR{t?7nUW$b9P1SO`R$aC3_RCnrN{-Ldj&y8qw5QCAUAfw{( z?Q)Uq9wvGhN9OF6q9~)F_TH&LxpE_{n{|q@VLdvFG^#9G*wDU0KU{b6$uEQOkV(Ma z;@QM91bBCJxt*j(S~*AE@$=az{%5I$g0{;RvqKSbWn z|Fh%-j61Nr0YhJT+V0NLN0PDdk5r(&Z}w$}E`#wR%b(PJZU zlVGz`w|kb)Cy#r{;(w!$!QK0vb0BzL30$!9sGV&JGc~s!cpX*z)(3D zMN3HHEyO*2vOT#zA%ovFb&x1yJqdxcjH;{uzBBbRTGd|B$Qvbt94jmQN0JSfWm@oH z%50{yDE39+mmyUk|G}Neg>e9iZ#wZPSc09$D#b97QjL>wIxL;$d&DuPnzD^^v&dEx zrtRsJRUZ{qrmmWQ3_$~)Ep)gya>ZMf~^eSzyrw9T)C7?+@=>jXXF>r-mB z3_kcT);8clZ7!0kGcG0uFg3f2Dtvt+r=k*+HFT)qU?RAbJPB6ZTH4y=9Ze;)Gu+P@ z9Fw4AmglD57x-=srrf}EdMk1%oWSyynKD}A7%zPP(2CYyv2XcS8$3D}sD@DyM>X|a z(FMp~{$iGaHSDE08`g!@$&vMSi#rL(yEeRqTQ10uGG^P`V}P=ub~v%x5rX@m5HMIt z+F@TS<8P&5l%U^r3OW6)#&;Q?X7`4ra%|ibHBEfYJ$nBsEsdT$!h>&Sj%JHJ#!X%qwc4(B3V4$|#sD4qM4NsJ*@>RD9pZ4&yO}}&}9O2 z;`9+TJ_ntZ0n?%!q<8d5&n%{N5`IUua~i*)4R0E#iJ?Yq+#g_^Bek0f)0j1(37srR z@998SzLx(~wR1rbL!+=OlK0!>&?uit@~b2Djdobluu!K&!f5-xm8U%?hkG@XUDEKs zfiO<_bHQcwTh6Zmz}FcL$K!8;qyRzIn5@rIJzRsF6r)27I)Z49+8C@P-HfYm-PZPe zup>WR#T`GocO~Bh-tYs+PE>XKt4lJ_meEGvw+h9QidyWMwXsmU6!`w>%3gE#`~==H z_04xzr6N!r_GV}H8;f|+6h1#1zrg)d_kR06M-H#pMk8WILm-5As(@KXVB6l!uk7*Z zGcs41nZ{osp-N(*T0?<~W@K41UT^b{{j3AhMt-}b@7=7!#1NCG9}CZKxGyF$D+1r! zNq~-4P?f!}j3V&`ojZHJ@+>U*y=_#=@j&PBLF$gLKixl5Jf%9^c^sd2om_1DKZB<| zo-Yujs&`;UpBfG)kIKeFz?q2A2gd;9WlXLu69iKJ9p$j6E609%L~T*dfz;1Y72s)k zYsURo+~31OoZh?~aar z7KeE~SL_1T)O6sWQizL7n(gH9^De(2>HKG1$sYp?Tx`-m{4dln^vQ44JI1;cIZ8xJT_YqF>_lb}#CrPbuBBui|n7bEPOQuzmvRs~%fu1%2e{ zKIA$qc2?JTE^V{o6~ep5%Zu%m#Hwy9!o(y=_qy4OGiZ5C`b;A#Qpp^ojza;?Gbny< zE`7a=dZ&zVHJ>?cu-ZPyl|yWCdfh!PF?CcwigKRLSWxTd5>l@h6)DGz04+>!?dr?2 zzCSStZoPU+9+M@$V~vCVfh#=BHAZ;gU>vaS15&!4N)9_RF!aRMYq#L<1f^d*+oklN zNh*~ZlXbtiwzd_Luki?6On)NL(1fZQ{&$}s(D$r-Q_(XiKUcqDPdmTUFc_h@yv!pz z#)A-7ZxD9G0w9w<*0_KFTmQaomd$w=QBhBSxm&vDCP23R=Av&pi_`o`+aOhMj?{y@ z;yH)r-Tc?_clUBz@g0-WY1xdy@8c(zc>Zi`OpW0Mdij$)FiaCW1=RC4ifbb(vZW7Y z?{_`ESE)4H6OIr4K4w_^&PXFvk{@Di%A|LuPLVZFmQM% zCmiXqbuKRmitm)`PYpgGQ-M|qjG6zPTM2A8;r;~VquHh*ws}X1RLPP;2&3OCUMn%L zFH`FpYzghus}B!aST()E6Be>*WuamJM>vjsmndiI>@C1q85aZV*4OpX8~=3@_wzyU-krF^LMxFI+6H%L z$VPyL#56=)_hX#mily%w#w>dDBg+q=ec$VHGd{9WFLd?_R8iQl=;^uA{|I5|`LOBN zLYYrN?nb(rs8F}noIMuHKRb2N(S-b1i#HWrdtqNZZAQ<&w25KxAnmfMAm5Maz-r?T z!IO!=xv&7`+>w96xDLycx7o1&owRrFux&ODmWA5bjddSIvqJ2|&VvttzxS`U;Lab| z33F@o8S$fCsG}-sGQe2XDUyXevzF%wSAJe{%S(P*?YYnUKd!T7?v1yM^vo1(vnwHl zxx{ERGd;C#a-3Y{M3%QKfn5oVKNn6uq5bj`2>6*>#6zHL{tv-V+aJiV8(7Yus)l8d znZ;n1FPRFKF>M3sGfpZywD(vnVl4u{e!y@I| zE8RP27nk7sp5ffifx}Ya8m-+%$MgE(#(VJmB~z>P|LF@muSEWbBP%j%ml=j}z|Ds% z0W@SpM>5-7^wUmBl>wRaCYcE{(KI0(aa(~5uWtOu>wfW;%%c3T;(Vp3U$A|5(Z?9~ z!7v5mMk)`Pkxb#23x%YZr5r#6!c!Q=#rLgpDc|A?haVY0J<;z@TJweH9^n2A7tk<9 z(MSBJfvyL>gRVOvAhE?}DM2$lQeN54W5%#lboA!e6Ac6+g(Fp%J(LD&6z@uExyNS( znrsvq97HwtFAVT*syE>g1rdAsX{%_2Y07EdE*mMjC7+jf%c_P*|&>}_pbwMkdrTviCwlkuFt~AuFc6NcqTaS4rM$YyBsLZ=l2sb;qm1gE@sAk;6$$lUi>fHEP-Q zoD7`DbU6Fmrb!V7(hqhmx|;YMqJ*-*&YlfdyoHlq_~-!EMH-SCm5w7Lkz-4p>?~bP zQ-1em`uCnS>O}j^4jn21IkyR%KZnwFa!re9mbu zaGpHxoGspeoO~Vo`4KIRydCaa;IlU1RQUbbXsj1?iWCSdm={RHW+krOq;VYK_XuVo zyuzK;AAJz=H;ezJaVQ5*KhWaDDvv5+iyjQd2v{59Qhhz=sKC6&E1)z?IF~>j9GB&G zxLlPy|K6GMwT{B(=!gC5S%o}6s|Ds~#e9cI1GMr9uYrb{p~mh9efgs5TKGvhN)$1N z0a96cSz};#P26nmgSZaLYpoM=Q93d(*6>KDdEFwewpvHRr%dwzlJhH}NJ^vnPc0VE zUP+4T6iwctKCZ@bzD0uShUN|l{y)&!tm^A;k;#({|&Wlk_-E*_O~_iOCWj<6u#gEdXS`uAHbXcbPh_>uf#KW2a9Jy+vUM_{&`an&0P znHjB6g$2y2)E+j(i$|+3fak!CcTyPN64A>v!zEUBD}cp+2D^b({i+83<2eec&C%W0 zHKY2hjPJttP$)cBJu2t0N|=2PlX>C_`pUG-X^`%F;Uk`D;WHt?S=}bB!M;l}BwqUi z?o9nTCYl_RT3^-g&k1qQc%^8dJ-_+t{;N)_`}4@oix<}Z`N%LA(sAqb(oH}E+HX62 zfqR2puR_i;3@y6q{_LoVPX!;=dpgB1$37${ab{;!rF;Yr$>v|S&Qr2li17rwsGfLc z75_%Hc}KMSZPVf5!9R<}4YWahj1o*p6m%6DNJBAKen@*YGjMvJ%cegcrtOtw+oVx~ zZ#d>%=A3-q*7d~toC4_byPHCmf%83(4PDwzp^Z3TSA&|79nFe%Q@q3MU87vYTZP@e zO43Q%up7g2K=xV@j)l(|2<$>B4Ascch>IsNFCjv{yIh3US0a-Pb>+>yxDXnhi$CJb z?)&nappi<+TjT@sgzq}u>b?_&$y(i53zue)wNB0)4d#`Wew2{Ew}DqQMSI zxjHhs>}Pi)40wM0f$nd&7sjqAo(P{4JT)N`7P{d^a55;#M_i-)I z1v%WT0R;^pKXhzv{02Sk{LRus>iE~V9DCOQS;gQ;)JJOSA7W4UA!k@GZNPiILoc3$ z>)DPcj7O2;_Dr^RU>jgUWgS>q1{zr};QvihmUD>9fU zEr0;lZ<1iL%4i_EF)Q%EK_K8vbZN^p&2#7-_jE%-gJvbEMH}+_#JoGse<0fd!LZ(^ z4135B`fX(t1|p-?8zo~%((omITI5t{FU^7q<>^vN%xjQdv|lRKXJ&E1I^_cx{Yz=n z8om6F;>b$Xo?S_WXw*`s3A5K)hhfS_ucLfdAivH%CMdL%G^h?7?=atT6(LBQNOd)O z$Vw&Ndg<3z&J1!pK1O}WQn0UUo`X8RsxR=zaF=;!`gukuaf13ybRS`4!tx8-Bw1}A zy>oq&6qS8N0f<7bA~eXPTOZ|2+Gz!XrlfDC0%TB6uJ!kXVj-`aaH?fq^g9;Q@uE>& zZh=%YFF4_z%1iTLa((CY9IOWJ_^USygeEk#7n;#YJT0uUcIr{57nd*$`e)7z!{LeUX9lG9Jpvpe*B3Q7gON9DNW$oSf<)?ahwzq_z|>REnG? z-!1Y5H=UNdXw$B%ohiY+Xxx~qaEBrLGY)o@rVK#)Di{r|8|9qiA_32a?*btwS~G@^ zqxT-2g!>rdY`^>BL(lU69)p{Us~5sgdurA{-$iVSb5CyXxAQ~SGE)}r!uc2Er1_qO z9eL;Ij_P_UvYIaC)@F)WyJY(A@OaBzgroFa$1Qb*w~KM}94IgNX;*-d^?7boKrK4Q z{E+N4?}2jy+me9~N7PQc?*~H~%lKEX>33&x%{IQQ!_#W2FqVW&c*O&Sb-HzZzgsmT+@0Z#lMf}WU{xg)L4DBx&kYW1q^H5(6WJ|h&Iq`E_>u>V z`DXd~c$}+GEH6)mOr+>C7fYb-DXPb|-XJpmbSLL?>=a^UDyQrE)F0V9bqpXvq22&R+Pt;D_I_4e`awP8%&Hzi73s51U1vzPh-$7y5YdIQoYmW)vMEfM%?Drb_MbVW*hdV!Z+e2 z{J$AVGT(CsgXm{I#nD{~R2<-*k;AyOF+8IDpaL)U z<>%wvU#(jnL^s!-1cu`;w#5TFeV;QK(!*ESOejFx3lRTnaq5Ee_vL0UOGi=See;En zw|)d>=ze1PDco$Mq^~gs7f=1NQedEFTB=J=q-wkT4C3Ny@Q;Ogbn+E|WrE5f;a?os zW;vhBlYN-7kQHST;?~*9TC{zl`-ElrJG&egx+&0^JduHyvj^;JK=-p!;27B46!~C2Qs5d`u%5%MkbcCO8v#_QRXMX)tObk6OT!{WlW`j#x->B_-yCERMHq zlv8an+Q%t!bFZ|Rk{`<53@9`e&vR#ze7tJ1i3&t_!+&%LxzK;f>&??ClhD}(PFfGg zj{)V6G3K)RiHlHd^X%M{z3@t$CnoFakKzsxdU0e{o}@d3d@Gi+-^q`V+l$ zSWgqF%s@JB(qD3<#2wP+`l;7n{V{Ue$a7e0)}fa}69fzi#EjafK`yMvKrQ*Y00Ys# z>=p>A2M+N8g)%t1gcN_O=pC`9N~7Jjf5)WzW7YKd>DPVXl|lXjN%D5lx6|0>d%#|HyJABb64Fysntu<7veb} z@_p~(8_=xX8b6+ecNQh~$&&=RF4Y+%D?A z@9q*izYl!Q$s*KiW-jwS{$gNN=FNArBt_s$Ld9CUT4i*CDv=oci`47vC_mXQou&F{ zb&~LW%-F#TwBhB5@kp5BvCFcB`%V#XMRd&+lX~VySM``umvz zj2`6fy@CFc-jgud2s(Bu9Fo5je9s_sF3`Phj_Qo!#m>sd_kug@`ZO%Rd`sVCJDUNW z9;8BkhlQCgdW{Xp>BA@7twO3Vdb}r;jlKqrFL=c>=;ZD%Xm(`aO_@=`$F9wW)L+h}F_em|#rMM^nF|>^vd9w$>1M413AXCD{ZwZGOdJj?3aWelbmW;3b(dcU~w?NeSA}yReRbMOIGp zsz><)a&p^TlxgO7uH4kvIg6KX{w3COf)ylQG{cXXS|zA)P1oDs@M<1nLt8C^)$%&A z@s5BtH_GMU6(VoP;*hgkIr%-QXE_Z4Td1aJ!sqM@Ol6pWXzJlkbH&@NOMLx}ioIPi zwhQruE5@;|KQwoQ6kF!sXQ5v8Pl#lYve!qN1{M4E>?~_pfkY-NAZu>EgQ$52*_{*^*|7DGYv?Evv!^wh#^orlRHmQJ{6t!XCl-|KGWzbdfb z`K*7{3>PTR6&=WI-K@%xmaon@K!bc}6G-x%H~-YkCNpr=Ft;5CLOp#Et(|WCjEdOa zpU#C%D7J`em{LsTa#|GdA0a2aP>F@0xrV?hKdRDNAz)mAtDxnSncKA8)@}WAKc#Yi z#gf}w(G(Uszry)$^63&C8C|__Fd5&2f`uL4VS~3!*`w{|o7&{0BjB*cx?A`AqfU=^ z`MfKnAKkpfeV27omLoXZsAuV3F{_Rel`|(ebSO3A)Fxl-`9IqnOuZaNLAV)L2sUrH zkN@keAb=KcC85H(eD}+Bmr)79e~ZQrq`Z&DPw+n&XMj9=Ax0qo&hRJam5-|NSJNKR#&aiJw0Gr{sb9 zc7QF&oL*Jmoo_b}uSPfDk`j+tmNZB@g_ZY5zp-Xm%DhN+DawE|_GS)24TjXau@82E zIZ=VLZ(pmHe!}5HCz5k^aHiSMaF}|i>e$=n+h1F6`LI8V!-G6tJAZ_mR9|xiq}{pDk}i(8oa?&R>YgTGd0WFq_K;3Qn*b@WwwBNAc1p)}-o>fmv$^LyGmwPF z`f$kqq2g|Z9l5;tR&d#_o#l2A_pcu3I^%kNJ59J|wtd-VBfMsE7~mbJbaH&H=cNl> z)71Kj2$u@6Vh^r;_4s*_AI1L3l}%$7n$EVLR~e?#vqs8R6mVW* zhqZEg%Cyc;aqm|&(ph72-$8d#cAv9c@qLZdaHT&o`Ixf3$#8AZG{qxgy}|W){ph)0 zmvDQ=hV*WRalH$}t)+<~a6M(UIgr$#tq~(*-9z9Wxmkp$dAjm-4{wTM&D#EET%ZFzNTPDB;Pc6Ak~go=0q~ASzIN%4q2fg*(M9%4iJ3zQ873XWZgW`r23J z?AmNz55Y&T08WAF0D((wmVg$POm>6H*~1=a@oj|qM0*7+>2B=JWFosG9ZmejlrV!a z-muD7iV3DSL4+qxP9SuH>~_m$SQ{q9A4}KXU_4+UfHKfi)Wj_}Qzzyt`x0o-QAl?1>?Qva$UltmD`9Hp8#Fm*3$N;&|*(db=En?kgAzIXuDssffDZV#e0}dSM&dlL5RK!DwK! z-y{aQUJYFOnyg-oK*+DLi)ceOW^r(binkUm7xqcuzeLh~rLD?Ozup5T2mir@gX?03 zaI-Wgxx#sFJhn$#x99Xk+Cr_X>S6O^2!-{Hu#pjKPfNs2z~LPg%El1*B^#dA^1}XL z%yk7}tZ7g9y6?12O9BV4kqE((>Z0b%wb#5XhW+d4iRNjn~i5Z(_hsM}NjOF#^ujr#fKk z%+n_UW?WKyO*CZA4_f zpN=sZx-R~v0nvPOrQHby$c}O_Mrdj!1mpEtF)C73p|zW;z6;h%5INXOVT;|R@{y)Chh^t7s_rHG}NrFF#=96Qg{QxI2v5w|Ey1s7m zeZ$eX^05QAmDEh#3XfpA7hl41W7cbfsd3U3iBdu+O<`_`Bl3r8j7#h|_d_kj-_GsI z%(@c&)H#g^Z!^-P^XrwRML_V&|Bl(rqD}c$@j_F6JLY-;4O0}m)Fi?2ITL~;dDNsq z-G2l<@pTyEAv+NrDzAlnjOq@XcbQ7K4@3>WB}bf`z}32mYpWQS_2ABQ<{HtPa$F#N z5;I83PC$$sX@N*b`F}zdarHXxgD!1wyY<-XXWY(0zoN$qJviylTl@t<8L!(ybRg9l z$-^6j?0;Ev21OMvKMZdZVte78n>Wz&Fl+B)=z7T1qoiSYQzj^NNZNha;3J3=d#_B+ zB7rTHE4B}YL_fp}uNb9TN+F?rC5&1V9SVpfM)!X*dbm;#_n%p|ZAS)?MI=_B ztG$nJ#L(8BpeEjWdvo`|>JkGb@SQF#EM~kSPc{I?yI@yvW*wN^(R6g9T*k3;9siy7 zu8)n~aobfSsO?-ZBxs#61&X_6BY3sGtii_K++erbzTs63s2Lgk3y5i%n5!$QQPSQj zAqw60KrcTp=lU&pChH0JD)N`jzR4lVuc@fp=AXRqduCc}!|+ofa#Jx6BYO7@Ovgmg z?EiSPzqxk^zdamLSp`{d|33h=KuW(w1j7}jpM2z0?+W6rtJB|jx9RO-%OO*tr@U+L+Ol8ab`kb7Jb(0A zLOw7Ba2*`2q<5H$>;tdf?z8J)+W@ey%Kg0eP0acoj!vC4_(`Qj&tvzy;lE$&KEI&3 zJ?*zweN`&uo-MQEg7jzm^O9AWp;T7sR`+nl`lXSJ&;IqYyE5MA6nF`6)rz0R&1g)k zNxvH2^gdv(iFk>5ZSTB(_xGg1(yZ6<)E0QY%*wXMeAcdN@NouG#mZ-Xp?YRrG;Zgh zG1c$q75jDKH4A1y*#e@wt)#vFd5-X~0oTV$`itq;jI(2(d1l4kyYnpJwFOV1dw3DR zi#DnGGbo*Htjvo>sE?P{buA4V!B{J^=`#nH?S1Srv(gMv3Qt)DJW=o41#93utlZk* zJAJ&>bkfl2n0O0vHLY4cpTE(|T$vid-4H6R{1a{i+S=Lje8h{Mhxfn#HlBR)j`3&0 zo735#oE})}0ij<`F!l(}QQ2Mx*K<_<+3ueW zx1+LN=e>g0_lCLs8%`3S2j$Xx_m!kRSm9rX$JJd$6Hj=s!&OH*`2~NBt<)VLi4NC0 zVFZ?m^{ixx&ih_1Uk6M%J#!T;#x44nOYR3?JlG0cRS)sX$z^}9JFNPI>G5cDFzjF` z7!76bV$_dPuP1Nk-L>(hG?Gw{ispmU}5hd!OPjVxk%u49OI*rudhxDKD2U2c7<{jyc0+2s~W5+UculiY-_?Tw#{f&!@IOG z!Ki^es#9poSkm$F{N*qHHTd3d{m>5ndK$ss-}Q&S3U7Pto!R?2e~d4|uK9YS-&fcA zw#!0xC!cu%iT-$`6f8B{MtwGHLv?W;8Q;7Wq6S3yT`WBZ+H`a?(L6n z_ftlV`y#Om3hX}Qz=HB)Tjy)1+&52A-s`8}@bi{=w(!;#ww3lc+jl$PSLWZizAffU zc(lip@&5%UxGy?E9xH%H{&&b7JS91ada+Dhx?!gRejIM$3B8MVpQ6;)b*y5(*tVG7 za2wlCk5#Qrrv6vkG~YWd?1!V^R{9HM ze*Rbw@N;aX`1o-)F;L-&@0MUZ;;nm;wkv2v+PC0;54^@TebmByjQ(tTw_fG4EQL1T zSzuY5FA}yR_`9T?%x>56F)yXkytP8vih06_Gr4VhO+?wekGi~gS?SyGSQV*Y~Z z;WF#^csE#r=7cZfwN)k5b)NpNpZbg&R{se4-d)=`!s`d|xbqtopKLGU8_)_ITx+ej z!w-K3ZD{gABp<^G0p$J~SD>ZwPkTwvir)+G)AQqPEl5;Y4BzQ3{)*kGV)t9}djHVN zYL4-}jQ6$f!^D6k?g_8BwgnIVzSoPaKk8YDc!M2d`*Bb2b4OkZ)+*sN(wcb9JQT3B zGJFOw2W=}{yLXrdG=t6*NCpLNz0X3$P2jYde})+ZzJA@$bU*nXr$F%SyK`l*x5;b^ zwYpK-AmO6C=Z^w-m2cvtQDz1kmppfu1kv&5=ebp|U2j<`?QwRk;kv4ljGA(&W;qZH zdmh;?SMV(3Ml;Fk*y7l2daMj);Z&kuG`GEWc>o8XGgvzGa-8MtWz$ESp1!a4{qPUJ zg{PjndkO+S6GCdJTN~9?x6^M&;5*-~S-;ULfu%;!eZ#@atQk-Rs&cKGE1Rc(xDu^v zypJ;CtK$v7jrKLi6iTwOfD{oyld>_0cE5~1+PBQMG37Y`d`{{6O*wdHmCl>A22!SB*?^Ww3X4oVQ-{~AtQ;V^It3invLY~WXBjX2N$LunS2ko1 zF84sI7bluJEMh9FPL#PKP`hPSn&84-e#>1SWCsasn?QP*#jg$kw?GxKF($jvWotfl zotfvqN={Hvxguu=vc&kr^CT>hIhqyeut811G`ap4ojBr$?&&R$=gkWreH35x1%D7< z{-u8m4>G;wtv`o9{6$}iANp_KJRd0QZ<7nO7AcBB$!(hPPL_SJXf~om-UQQw>E2&( zzl1U|*75WgG5L2WERqw15VARpCI?#s!A8f-x3+C^W1<#$mNCoKv&jyKAKCXX8NFRn z_8sSCdnSP@^K+Jy3Xkky@NJh@{Em$Itl*IsJd7XuuCM)75&ZQuwu2r);5-vJZS6Lw z*K8RNRAt~H^<-;ll1)v{lguI;0(ovP2ikZ26*Xx0Yhps4+I|asNj?w!G=n|^w~JHY z`7*Yc%`;mKvX!fN#N=yIM*S$&XgckaCfn*>KSx&*-{=F#UNUU&_a@6o|5x4GBJ70W zIp<|;8)~DQ+s=Is-yZiumTkM^rP-9w`O>dvprPAA*Z=?HZ+{iO=nuU1fu9dNwuJuH z@BAlt`#atj&-g6f@;hFtG`~!u-DREU{N6b6@75_0I|8h?Mx<2*5hpw4yK^zmtbOWK zU<8D3pB~;-jbO{ze)>_pz(<^}MtbilAp1*lxvdQT@bv;8eu8`fYwJ_Fx1Jz8DH%m^ z{6;`^1cOKZN95YJLdf%spwHNH`62tLLfDS!l#7Aa=yskwP4tbGyyN~97RHlm#}`5~ za0v+>4e@>G;sXE1wOe@P^!v;y$J_7T!8^BYp@EyHLeD$N`6t|Z-WJsTm$#qBN1p=5 zFTQ?bJKxade4z8*vBmT4+uK&pV}TY2SzT|IzVs4g3Sjy9%vjiSXxNe21zDeFI^r+} z{M@cI1A)Dd;DBk`Fhs8KZ$kHz&a_iY2wUklkTx;FQho3?blMR1vjm7$$QIUqE$|Qb zIpO<9TQ%5P<&AM>T!Rd^*&wn+>JA4?hhPT>QUmX3`6vFyBceO(6*!O^NFSaBEQA*d zPK{;`COiKar^b)E?ej68AlTC+B<4;N;l$0JbtjKdXiNV4n55>fd}Ca=Ji}9e38cM~ zVDZNHo3>r;wj;r1(i5;y%W*3Fuz!l5*L9^Qsj%8GKT>yrH(z0`G;3sJL^_azYrnr& z(uRi~6wwB|Wr+Sxq34M3~a?|zv&JwU-D1EYp}3%Dxr zq32Cr=l$Tv_3J0U;$q6vw11gs=T{zITqt<%NK8EdhHaKS3+5 zaJsVbJP=)0qN_$fU4qywL;lem!JFd@=DQxk%kyp#{_=YF($qXZXy2V3jO0<-3L317 zi5Ez@{OsguYu0!-1HgB-RlqDr;h$4IX>Z2!c{ZC$jEIz_Uq2e=8xgsJo_VdtE(uNFTCfY0fi&gq;!q*4!< zUiJK{eD{KJl&3!%>DkI&1@D6?yU#1_eLA9b`{%15w&2l~^&$p037>IiPW`n(mFr?tQ+J#4%lk!?Bb$jEbXAgDuCYq-4m%N40D-?YL}TUiN`! z!K~$1cPxeQ?ZH@J*RWo9<4N95r-&z78C}kIrOe2l1-t4!ThL--ZxPe%2UyiFb zRR8E7`F#Az4}o)jzy8m?0pIXV--35P{zNt-;XczryBw;A>}{eOS9ow#n!RM6rQEoj z7Tw;}D=9$nNbZ4W2I7j?a5>HEU0wh^$m#)xot#M$9U*X4r&!>8MQIgsOt z(*hwqcR5tgz-5g9FNXv8O15e?M$#3v`0)(Z?qB(3e+Xaj`~Q9XYD<6qJN|3D?rXjS zMHoqzy`5L0HRY+==FJw{js%@QK=up{kApv(y>Umx@Nks;oaSO_yHq80sYZwW z*WI(=F-reGgI?>ly3;3FhQG9!KCGeBt{1c9#z$0sJ2&Qe$kxM}uRDUk|KVqSG9G#U zO+2VHwuSzNZ+;WL=lg#;{T!qm_yn?$j7>S3a^{n9zKVM`|6CI|-rVDQu9Oko+Thu3YD?hEx4yw!`X?h#16g@x?e#B;2U{U7w1&32A$ zqQ}|251&HB;~d|`J{%nZ-zQG6pFI7&{}f7nDx`64-MpPaj1jn&EpR-_Uf8eKGrKK` zHhogJwHX_}w@=saKgr8z-?7E?Q`;n;;6)eL@zU!z@w|%#@4R#86#QNA=yDM>ykotK z4_~g~)`hJoKRq9Ce(~;I{QN0sd{@(sMldRD2&laz_!$9twl(Y-xg9Y_Fim}qEu|8j zeLiiiQ9oje0*Q~Lo}~@R`>+JE*VphJCGARq8MYRC+bQA&(gsyTD=($hBhE7rJbS%u zKTfg$3XC!=skC{&;B`1IY$M$UXIYf9b2ES1b#5!66~F?N)xwVBNFD&jm3fS>3)5~N z1&j=|Qa74i=zQk5H@TDj*3nT{k&$}ut8|rl%y}gFGVwvQIf&jFzz4W}Lq3Gt0}T&? z&F{dtJHIshTFT>1c=Niga@TpzuZKALrYeEAGW-MlS}Ofnqi3J@c$nkW#(lag#h>6h zwTy*y`!Ki66@;F({udRlU#Fd^b!CQqIe(xnPc4&Ucz>n`FhTvF=eOZ6)x)qVvZW5j ziOZ{A`P}QRflbasFx2q0Z=dG5sugD9FfZ1X=8d$&oG+5zStf$6$a({}c2+MM?lYFB zmbcSEaM!HM>tR^?-w7z-#KKv}!+6{R)HlZV(AQ*J9Xz&&etN75zP&cu2?xR@>EM7V zz`Xtx?VAm$2W8ctYr{ucd7XjMkOLU5W(Xo6E1(tO3J%`# zcF(abvLMTYgR;>;gmZna$Y*XF6sZG~hbunfBW~g8r|;r@BLGZ-7rc_huL~ImOI0aY z>a?;FOyYxv(O=CYQJnuPa{hZw-U_uPlIKc_6(6_GyUBYC(u3g4!29T^E<>lbCh~y1 z(Kq=t1Kix!Q^vM2(>VZqPUmz^=ky@c{RK;}&cg%Rdj)zw7(DM)zT?=-F>W=V_j4ZT z<^1Cvjd*5h%Zoa|*kCF4X8_mwd)*Ts9Kh(XDPI|tpbpA3gQtgqRC~4?FgYGlpP}T- zfTox?w>bg_^^`j0I4~YKu-uHi{7En6omsUE+|0#=wBKHT5W>8M z+mM1o$lxpvM!NI;tlx7DSYz^IjW0Bj6AU{hFxad3epTK3r#x6La)z9MuQCruF7vy5 z8$r@W@);B=#O+AnCX)X0Dq0$>s_RK(mSe8Ej^bEG16{Hma@@KuN8`WkEJqJ^u>CRT z8K^-+$3>Idgx;>j+Fb_p{H#oEc<o_o=V>x3<9VIPdpCrf>Vpe;t3~ zb+5;J9?unGY^%0^JO8@eu`OV!lY6)x=gkDeSq!uucBIQX4-CPdYJV033=v+R^WkGt8~7h z)u2LsM(xik9skkq{|tQ9DFFPdHNEc7d`+l^L{TcSFnHMzM8m!H_*$G zT_E93dX3kcUsVl(x6KT?BX~8EPY8a@i(hyO1iuEq`?q}}9%Op#9Z%pte%<%sr~bve z%JYzA&3@CbeRZh&Rxa6WL*&4AEIL=`-Z*8vaSDizEv0V(TM*XG*pQv44bt=I`S@qs zLfp2NAFX|9a(B)4WgRPZ-+z*q5$Jv2>F$|rvaQ)&`^V)EioIPNGIRPFD}~2~j zI1Bmt7uy=-Q*e8(ct&t0c{bLp+%`Y^(F@;-+WRo#59T?_@4UQ=U%I@+<2Kp2@l;4B zS*Kl=%F0v;9ZehK?O{4@{pXR-#{E)uBa=5rKF(3u)Q7~w`?f-}=?mEJLvFc?+CX6c zD^|=p&rK#+m$@9HzVw|Lqy}bpL2Z+L?!tONxdzPhebBzNEv~r^d%uHC*AdvY>#)T{ zp9lGa9&bOl(Yz`b*|yv7!CAefJjtt+=k=WA#bE7tMZXTW&>$%FLrAuvl^*9uyN<46 zxAOL&j$}Zq8?_CISIoCkPvq6wt}^Z6IOF%)#caM2_`R##E-1WWe7Jv&AVZ==_wC~l zsYQ>H+oArROx~`Zd@^z2@^V#0UW_uwxV*rd1c%>?>Pz{9f|nlDr8R$jm!3xnz;Y#e zki9><>fQkQGl$Q84e#s<^`IdE(+1c4%fPwS*Mr1u0b9<;Ftka4s?nsZsnCWzFQtX2U(CSaJ{{R;Gf=q*b8rL zTXsMG#51uibn=lE2!z)Rc!QMHgSOjh=Jhh^MF=PhE3LS0?KPPXMFzYbk8Pa6TYbwK zy!F7b(>-zZpt9YY9ru;S!C&KB+1?t~)`a&aBir!t8~{G2b2_JUdSL0QfaLv@?ax1$ zVDC{q&t>X3g@YEqQtoG-baLD1r(JVBUWT9M#CGP(`n`^hQybglAWF0L`1L`TIVeXc z9t~pZfQl#69EYu!FN4U0mqCkw#`S~8F;W819lc;z*Iad)Eni)(z(KqDM1~JO5(UXdpt6}VfD$#6j4#V^;QgKw%%gPr z<-vUTme8s*K-sdY22D|LEdf~ru$Qim9}UzcCmNH-jd$DzWsoliuoHfH$UN|NTxvTO zSi&n+ax&0^f)Tu6QE?&QXI(o+fmx{~@RmB~JdXS2K%6vnf0&hP*GtNt`T z<9Gghc#!D_|G}H^`aknu;s<~DAH_4aLwi}6Id<35?U%m}CHG9=08wo}NnSB7T$>Mo zeP*u7RMe^3bVCjdMW&GJXlxYO>F1t$hWt>b@+T*2Ngn8Z;E8099Lkmi-K>E{lNrwL z*^!J(QMTL)UkYzJ{;Zb?vudr|<(Iwm*Wd^L`q$#oM;^wn*7V*dp2WZVd;b*P_V!I@G?ktj4r8xB@e<5xMPLx(%>fymnJEEiVvpHgUmBfy!wH3n>||M zytQdd5&G_BV{5nQpNz<5GQfGCTY2mD+|MHQ9YH+kvhns}$q$0E%IYw-Myf$^|5x#n zkA5NE@O7X4z_*3|?(hF8e8XRS6Mp^|-nX~$YUiF>+r*rh$r-o*NUNO(tY$}woPx@l zO&QxiUpw(^1YF1V(bsHMu8=3nGz(X!R`ef>qw-5y#-EOu1Zu~!2ICfv%J~%P`2en1;U!r9LcTgKU zFAjsF3OlP+>?~&~IEB^?AHXH@Cy*EtElZR$gWR*!dZ(65@jh zt49QYIhg8vt8}2s8L!|Ce2wQGs4aM*)GbScYq&3g2k}Wv|Lwl4WL|6(Wn~-=!-xPi zvOWE5-mII-BCoeBzH@jBbnnXIfX?6pYJEf-qTRLTHGG9&jlZ##`;CkFYy^GpmN6U2 zy&OCXh0J>L<6i1@SqG_^6Ha{>^=Peg5h5WK-Z~P$s`F2Q{q|et zaj5o$Ss!YFi;6PemY~su)}M9QM=;AAlK){J1O~y%XIh@A|3m%hti$@*a;|RXcmI*` z)n2E;iAA5gZJ8^c9DsG4Dn9LAQC6tNoPpKpaP)w-q}%CGxN{u$%5+&Ma!p`f-?}nU z1|P|5H9Xx1*kt~sPq%I?xOR;L!Rrn`Ey#CzD=z$O&ehZ)>%f+`Irh1Pm4dWAa2#6~ zueJWkk7SUBTqZ82O@aHm)^l{n+m+A01@`m?-HCSwoHgi*AZPI3gPNBntMw~|l>*Tq zd?x%AAO2ytwynDT3}AjgdEjFJJ6Cs^uqquIre~u)=2?~KPUmz^=k!3+y`5>$ z;4^=FP_|6;JYzbjz~E<` z6h3HqHk`^JrswxgUK(u2FCJ+OW_NWcVJkUc4g?A%2MGE*DN|xJ7_;_)IU5Uos;tSs z&Wt(mPKf+m>={q~_TNrzIGA)LHaW{Rh|~aQmxn294O1ztL~k;HT3G6`W^E@z9HvpQ z1})h>LV!e4H~K_BJJizJekn5#PQ6xrqq=+|G46T5ZG2>060{Jm0v{~#%wR3-K4e@oVuLU-j$ppwigx`H%kbKZP%O-Rtp| zx4k{p1T{D#VEOC6DMkL6%et%z*{dzXlJe(_3tI-7gg$6TuCK^T=$JQ);4t`$nm^$* zn35CKp!(c?c^%HPak+$kQ{Bqt8chWUB(97X@sZyPxE`AvS(YMmR1xVN*`G!)NH0`V zZjazOf2{Tbd)$qczpwtJSKwE3x^?q9UiOj~;k&;7P22qpu%wg*)yop{n*B!F5f99C zo#I}WZI^_x6`Gu9TWPtM^a++Y4_ab{MD%MK#y9&-Z*%N**rcoK8R>CBSmGaK@MQ97 zVYyW;`U0X}qJ-mMeef3KvwRWo;r=v_DsUSzS3R$(i-xb*fs6{)smX%n6om90CVVCF z_Ph8BKgqYqMqXk3^OkG!zOl5+C1pn&f)JU;R-$_6v{W<3H}#;E@+Rm~Ek7 z`Ef78@Bge%+Hm{P|NiYIu)oRAiT+EQM3$xY!HeV;&AvicwaKa2`P1f`I&Zf!r@wL5 z?^yZ!1TOJjS@G^=ohxnC^~~DT z&yy#lMlkw$-0 z!LHAdXbHHuyDn^VnM6zWb4&IQvZsqz!m@5#xc0+BcFJvq zKVKyKMfZ0%L19+FH8MxyRjBKP6A46bsrVjC{q( z`CZyU5)RWJ{kb4$8-Ew$oZoGW*^}+iu{Hd(A>MXqFu|ntJV-w-^u(>2>}lw5f#W)= z3}eUld|2@XwQcaM)xmY6)a|;919_8pk7oZwYW^L4j3ao=SZUz<)c@pT*cifPaiCYw zD9mH4SR38UAAaUHTHZ7Bm^i~r1x041<#$@0mrBD~riK6QGSo3C2qPIxTRWFmB9JTK zOyAh^`hW?ga^rq9W*x5)T!Xh=YioBJWcQLn$j$)i$sf3*xN}!=W1JIwZQ7-~cPnj< zOQ$(-aax#OQcSUDbH%KaZM*(}KYVUNS!g9nx7Ilte6um7fR!F%5GIDD|9i7z} z<$yn3AbTE79C8ww^GF5Nggj*I;9OnSjf$cans7uOD_ar1t%?1y6pY5;j|}TQv#0HdiDrv~A$TU?E$v1uzHV+lrWF^ED?As=aV{qtJz|s^peji{I_I*%rn^ z{srm%3m(3S&-<)T#uxs92YUp-*cSR5zxf~GZ*1oSPvm@+rQ;7s?S^&E56`wEFTrWu z`f`^uKazvx8Cz+PPxky%@b|@fW4{?e=XvcK0?^DX3$@RdvGk zH!w<>K`o>30CAgK*12Mx{qL+!%9uym;iOJ~!k+i0;-Sdt?_?m+Z3g>#lhnF0+1m<| zu4e{MCCVk=sUK{90Z-H}OO++ZS9rBB=)K*zT?E;Uzz;bt4VxjAj%ZI%y~6EAD_oN) zWTzZ8sX=0@R|prD2Zy^XG+uO4Jiy;q_)?z{L3F_`?_s_zPs7j43)Nldg$0A@dE`sF zOZ%2QUJ=7{+_bE6PTM>4d-6cB!)87eJedwqe!D-Z6>eOUt)CmV@Al=~u(PPjL0Lh< z04kkm?~e1MCYNogZg=(9YOmWrm<|8gvMSZxhFi~`1a*)}@By+1sCg7znHAU#6qS5i zl#i6?b$!S84pJM=_KfGb+%|?Uk6O0Wtz0HoWdgOXzN&XVn-4ndI4)F)H}sz2E3Kd% zI3J(GYx8F6*IEA#@0H3%ol2`sO`706wR4I;V4b zfT;&j`~6jUkFM`kw!^qr@b)N3b+5cfu-Qfw6#m>?a z!1i+BCa8KLSB-=PaW;&X&s8*9XspF@;*iI?vctWWieNF4zgKLg@x zJOV$RNy_b8w5L`q$7QsYDk5>n0O_DA&LN+m$&bpP8TeXva1*NMi!mDA(>ty9DQVh5 z6g$wL_Nl)GfAUNJ*aJW3cWn3khrj4g;H__a49ZLw3i|N&p7yTtnm-&slQHHcJ?rdt zUV`LSgyfjr%K zt9ZM;x5;4T4_>N{N~1T?5CYBgv#w>OPUBS{1eE90c7O9*Uw;Y$zY5P~dhg>;;>Uja zU*d25z>naKZ~kX^&*Se8TweZ?kHROu^5uBVCw~Hd$8Y^)JlE-mf8?j|nV^g;Jv%~xXP}JZI^Pg=cG$)zo8Bn?U)wf>dj}d$uY1LxHNJhP*vHZ4j z_F}o1U(kDfxnE?^ILcknR@MmdA)RBLG=9u^qm-X9{WjjuZO?4gEX1~a9{K8rW-k9u zBkP&-%2xpUd*2p&n~WQQ0=1wpvcHa`liu-&C-262!sX0gqj{9Qd%14B7|)!4JfZ1y zyHGew!8_ZW-oND6K8i2=ga0;u_iuY}yF!fg_ERAE^Zw)S+I}a0=q%=qj+9pp%#LR< zH@UE-bh{{}uiW17S-oWFe;sb&re<(Wtk%=iAl`y!a2Key&|w*`!v`}vxtI+5ImTdr z4bUznwn_DICI!#Xg(%n1uerf%g!lPq_H{2aqz5afX zaM6O1s)?O{)FG^oNbhX1;BD3=(Ux5n!6ZGeSfAZVHyeO0}*ey9ZbkbZdf zqiHjyec=FG23R@8s$i+@;~xUdn`PI{b3Qm&((`c@v~nK6wwkv9Z9B&{G=OR4I)!*4 zM5`pfvfi|%yh=9CgZJa)4QR&nrEZlhD1HwIMeF&*$?L`I_U8mg+I8aU7ueOyt8ZCk zqT4JyK-u0}8lNhzds+e~gT2@}+Oe80_*C&Oq9yt6`o#?X4iI-vN_fY0uE8nS$orrV zTIKhO{EmOiHsyf6+x32`=m?Gzo7%)FA3Cg{y_X^1mtOfTq`Z+%5mw6I!rSZpL&UVq@ z)qwMnBLMu=9X$E|+p%>uSP7U8uit65psvGQ=}cv5_)R#M8)aJ{S-3sdW`or7NVZ?J zi`B7ShE3nLieBaleyG zz;hp%>DNbr)gu^3Fpq-B9|&F_$omf-=Iof5&dlFoXyoUBaCXKtfP0o6j>{b7uY)5F z276wsk4IO~9CVJp)(2#ndpZ&}LJJ&dP{-iE%00kf0Kr3%s5HZkmxP^!vy8XH#5RT80JOwU1ibU#KmkSQ0?nbx4E9U`JG&u-g#~-oo+NUq!6Xoh#P3xJwX?fF!lkg{) z{s{2;YTn}KAoPXX#J48iaJkI(;Q=&!D0wF%?V*50cJ zsi+U4%TM`DAA_&_(%*Ip2tR@cnZD=ye;R-GTi%Sv-tj*0hkQZmg4%U%tzun9>qoAGqzuTyWZY{z%wnSk6sStz4lUmcC2dJPi{k& z?fm$ne9|@V1l!iw5sdSliBNY_h~O#F%67r=^pAO*7IrHfDbFj^Z+abpw+hOleT&)! znjqUxHfgKRKU@_=`w}5!cDvore$ML&JeBfG^%Tl;spAW2eU(_hE|NTSeW!nd7odJn zY@2+B2gcLSt@USy=eDwaRtO(=Y$cYIm7s&_6eLfHY1_}jD{(sye03|IF)Rs7YQf+| z$0M4Djt+?DQiJEQeRA27yFPO~N&wg3b6e**$SCI}bFj9Q-=1s1Zx`70_M&?*-I8?{ zx!dJu+N97KKAhBd%*(M|?2TnA=625Ssx!8=B!0{*px<+_o5vfV%*VfS^j;6@>G>?9 z>;N4OcQec2N&iN+CqeX?0jR-_YkRNztXG!v{8v<+^EPI86*w%A{S)f=U-Macr}^W- zq^%mQB`ey=2p#7|*9YPQd)W2t=hfbsPA*X=`9@6J|R zm8{GcupA*ivfWOj(E|k~ev080;{*?K6R*!_0H4!2ozpozz|@1i{;W?99tDYx@*Kgx zD)@W!`+>r}DqU6fh`xNcgK_{vS#&C{TGI-Xv2vExC|2qDLju#Ta4SJj!a}C zlaMRko<&8<;0cXC%2nG)bdVFgXgr&wX1*4w0;vWtwGw zuhT_38{WKXf!kb+DLKKYhc?9F6*)4Rq~JYiTJEXia&YbSqwqB*+nTz08@rAj1&AZ( zj=d5YbCr!`@R!6xfLKL0SMSW1BiqtpHu-VqoaMk@IxN!W#5aCPw$YNo4mBES;hr3pya>>YEe=)M4*|JT@aCVuXa7fEiSPUWzZp+Gb7v>Bi?A$CzC8ZEC-K8S`cwGJ-}6Iw)hk|( zm%Zd8@m!=wU+^%#>+ihDXkCbx)O>*#2XiFlN9(G|NZkL>`x^A|{Ieff;BX^+5v|I- z+!l=UdlU05h`CgqDdM=TXtThr=E}N6ch>mS2rpH8yDEU!eKg3;uo9QzR- zMB|USvY(xLaba7+!SvaKv>`V}@5N#(e3#^T`bab28~v3CO~4`g#5s9pXWi17w@yd@ z7|m^4`t_3~V=Lxw{mvi7V?RI62mYuBdOq-PeeK8Mk>}sUoBzq%H~ME_7iIvHhd%e| zvK6wVmA+}}vYfBZ-u^9tA;A+TsPECcc>gKz@{4j8zj(S{?OpuWbcoMjpKX+Kp?*%W z)z0$B{X>yexXeh?_v)KVv7OS|dC7iDQ$_$PQ*<7!pOn`3rvJVhlfi9zt^zJTkMKtf z8SvGDj+C>SCs3&?Gz;B{cfLb@3_`eNUef*OMws6DY;k=wy{}N2>t2NDBs>C6-fu8{ z%Vp-_f`Xfu3*Iaqe6RRQtE1i{g3*b?%;VciOTjH!kTQ@ovVYEJCs+O>V1ZeBu*!Kk zpwr)vRra_1oZr*C5f{3vS>9!;(CY6FS2`=T4dEE?35GxB_o(^UM@Xhqdx;$KVL9MY zmOH@hDxMPFaGHUAJ9gekqfPekr2P@;$wwbk<7!$;!7dNt{tg32u>mDN_I1RI=~!5k zOQ|yI0ii8ajv2-9EO~cZ=NJ;!ZU`}Z05qs+8~hqsKIa&+KP(8CyhnUbP~iXv;~MOf zc&YUBf=3qU4G>W;icgzms4lXooC4XKJfn5+R&zmr% z&{yyi?AkJXai!foNRB$JhaS3)XP&vc1)sBRmXPs{2IEuA@c|ygjpS6s2e!Hf_8#yT zLSAE@U@d*B+xM971meu)_*k7+2NNQGbdK}D+W^!C61;a=Aen$h5SXd*)yR(iIRJc4 z=X6fz^ng=#mLGV2zV7!&&yUI;-9KBMSN;BS64UFG3Vuzw+Iu<7BXaC13VU58e{=96 zWry3Hm0I4MHl?XUcPy;SC+{|qkzI8GXB#ZoGj|{=A?e9RptqnYyL?Bq2MqR*S$2RN zpcnAQd(C&nk?n(md!*yRfxx$HtN_Q6}XVcr-$xooq=v9kOA!dGac=oof#CIu((TmOg7wvEz46J{NN+(U-RejMr3 zuCFHWQHFWh^RiqY^)<{dw;gWF=}#L>0Zn|AYKf~m{0#Xt3=n+lu>BEZcV0(u*LbXEUvl*s!74boEPCK{i8cypH=D;M zAcH}Ky&`Qaq*zDCjX%l&>Xc)OQI%%}2VkYx)d6qY7Mdn_roX{k+VajE6=$EI8R^38 z2!BX5>Rpx$D!ZOU;F9D$`;)}+!nSvJJGmfrhxNyG(dE-|?tv%gl?OscJ6{;=pZb}1 z;_tojXSV#G^y@zw4$krWPrUE;38!C#p`7i`HdS)l|eN)owS;Yd-3(+`VFEyXrbkqr6?x$HN!DVFDle|v*QgjEIoDcrt0*ZVB+3%s) zC4S%g1-je&6(v}iIpZBUg;l?$=pP85uzy5vG?OIk{HUb0j}Y$sjM{#QEtj+Xx&Q6; z#kCOcq}3_O4;X^Or>(c=3-i0t?>e}2Je+lGuk)T|vCwL`O9@;j{>rpT z=HY9!-yKf~e$d=jB?k;@i%BoTwY(mji|w*AUpar;%8bD8jf|QG3;K;0#>LWp{0^lp+q;5W_G_gW^T8e*(rlPWHJ$+*TE3&`S&|UPuQ+U| zNnm}g(;`s^x7&WqM>rw-{T+X`^EJmJk-s{WTX`+VgC)EkwDmkWQm1>R=TvvW5k8-T z@Z-m-*xPsJmc6%b&aLmqy*G`d@FgH-Dc@`UiZG@?ZuP6#?$Y{C2QSI1ZX@NOQNJ`?5&T9PfmDk(kud=+iw2D_T@3%WwPcuVt5|5O&Td2;LS1O$qpjk_lI0 z+x9#v1;MijD7$}V0sV6T_?*t^oX+V(Ac@GcKFf(a-Q_vT>uJ}C$yHr34&n0ky#m!A z2;2_4KHvZP*}wMWS$;Y73EyS+-pl#Gk|zXta%t9Z#NX^`%LER27ShhZD=4>MV0T8` z8)ghNoIZahm7a`(1$>Dw0wwXo0skun`*gtOojejwF@XeXLcujyEW7cMmsjGCAz(O=UZUIwP1Y!&C-uwB`M%e|oR%FT(nj-+3(I>94D7ep6%){>``_>zJ`vyk7rzl-{$+m* zFMRY-JgD^F{DXgpfA2GXAHMUie=nZCeY*}mjtn#n7Il}cO$6@RR&b<1{#C6HVAY<7 zP87SjP+Link*fW*AL}v__*1+3B!_gm8ULQ7)ht~J5~svPgFbY72^{mS!D$(4-uTFf z^j~^e3!s@!2QS3A2eT1-Ue&(STTBX`95`_OL!lS=9sj$33%~P!`1)2>uj2pt zwSTDyVQ9tKE^YoF!_NyT9Zs9|Kd9#aVvZ+2IQ<+syakSOrgWlH2BKn10g#g@R&p>&iSk zb8h=4xgDxK_Z{DsY?S$&+Q&cYUzP*?3@wzZ z>^?#qf3ZYgpKVwJwy{dp<&12*L%E3ltxD%=5ae1A5^%FL-Hp4De1a?#7j8$C=c5)*MH3*XL)aSlUCviw>z~-vXE&^c)R)q zfxiRpJ_`50`7GPbnanu*YV&|cTS9Za%rl3%;j`q}g#*W#M`Fce1d6$>8=WC@?Hvx@ zOM8$0jOxxZr~&n|s#o%UA-?c0P*(;^r3)-eRCeL|W!5wPZd}Y&zr);&!0&CXAI~wb zJ1*r+Ws$^rY30$%CAg?7X+z3N*f8gXP`e>g=TG6aP;m~1mo`I@3C_D@)fMGv1qDJWj!m7Bo8YN9iM%R<2jbk4B%_ z=I3VCoI`@31dp_Ua+@~Gq@58oG*S9IDqmo6eiu$~PfDvJgK~mZCNrefpjX`Oc{7OI z^@GZ6tT=d|?%VlZ6}r@d!o0Y=oc`hSo_B%k*9CX(Vn0772lGQnUQgGi_g{$TESSz? z_kS`lFXl)4X|N4k`sYzQ~NYFlyE%^+Pk4$2vyw z{PX_WwTsjE>H<$bdAIb(qrwzr!(TLI(eZM9qp{BP|CQ`U_V=0tfN;2DyJ;4B%PuYLpU@^tt-YS=NllETj1rVv!PgncB-~you`~<-Mgpu@&8_vkknTiZ>?P*q0yK3 zj$3`$uB1Kr=E~$^qC1TCkIPN2g~_UyN|GhGI_N@Tp34I6ZDm4U0p?_)(v&5MxP=rG zjk~62xcQ{n0G0ez;>+ZLHUX{g@G@@M+h485s#H1U$ZD5J53N=8(>I~(!!(|5Ask*& z3BlgFV`1D19>KT}+~zkeFZMCm`!tx|Z5Lx`27eMM-`nQw_OQdnM%#Dl=O5{`yDiKe z_t?(jdA;8{ zVuEQ*4fbzLT=C_i71z;K#=pp1ZzoI@G0i(tyM(i1!@kEdf-CtdrTfF5<R zy%IOCg72o!NIs9&H@8V%$i%AdW7@z?YG+5!N(Y< zT%35XIZk{!UnRR@vgL7+&nZBgO!%NPuunTY*6131J_`W-<=I z&ELnrJM`W|5+TIJGjlLo4x}&Gof#PIF{mMo3JxpkQbZw#T8YP5iCpG7n!@P3KWUQW zG#J*#eZDglZBb{o`*%J41e0%mL{T@AT>G!$yc+92ig;d{cUbXeJxhFyOzll(;2UsW zMf%a1MJK*O25gM;Ek+?#d4Cno%mb#+o};xBE4Ks92DA`$E(zj6pQtxM6KE?7{E?!+EdELeAgTeh%SV&9CWo%EWo;kj@!mH?@>^5= zxOOzqw)^Vq_p3DLH8~HWnZh?x2rYG*K=qOE(>^3vE-#y1!tvUbp*yvw8MyFxfw`CX zcj_Azx-CqX*_n+nlO^M$pHbZHb|E}CR>-8w1(|RjBhIUtjM!U*O$3*FsZG~7@f()RG<}d^IRqGz#&$lC}dNf?V?ZKA=PeZhJ_^DOzTe$EQWI zNMOfpX%H3JIL&;3Ey>v1+hiIs>&y`ca|&;&){6$cOs~gBGk;X9r(sn5Q-i)8Z|$eF zDdmw#0rc$DIJ}xL^?Y;K9Xq*lD>_Rn+QRbqZJpx7DetqSU}~#7&bPNh<7ga@@76!c zd}n9PJZ`WkR@SBSG&H^@ZhT8a@UxiIPrn#=0W6WY?taQQj#N)qR~&%v~+iDJxz{o_eOsp=4 z?E42zCYF^a{UeOk)M|^_jNHjbsR129@HBroyO1wuJO3BHWa6j@T50n=I8{$G;w6VS zBL$#($jj0~>=cRJy`<3Y4F=gIJ)$;;PyJeWsTYwa=|mSihHlc}lYumw;6A9nf&spM z^Q*1P>7s9E)t$?47~U55TqOl`H6t7)PM=ewd#${r55_0Wcgggf|0kG9C$_ki*DU_| zc=X;`HO%ksyZ}PID)yWL`z}7&G+&-g_N>(HbsdPDbe8PFxRp8Xx}!Wd#8oV*&t+{* zC)5t#bxhln710ujehD7&Z&ShoDGAwmi}N1lgj9qstApv!J_8TF#Ae{6&fnB-L@BCdS_fJyVB#*)cg4Y8+Sc13FTg1*A>i%sCslI5BX|szD;pI|yh92^jZGk)9i~|K^SFwRuG`f{ep|$kgv#s{�H1 zfK_hCRIXP%vU5g9nimKI1?HJW^>JCkqD=>%SWh6wFtB8!GF4cx37;)%-%7QY_CD*C z|M8;H9k+xBViT1})EJHlX~JZwPd}$|Qh*B-YQg4jX_RvRSM5p}ddZtYjBPSWPZIM@ zb6atZY$nd;a2wap_kjP#d^Gaw`st|}lZ>Y}kLNsJKsdTw3v2Sp&t;XKA zZ7z7k>I6r0Te{Y|e2I#sX)E74YY#@yO8BdA&W+@St;Noni!c8TNBhm&c$h`JO$1+i zr>pbAwf|sCxcwAS=+bw#y6aoNKsD+qP3;@(Cb)HU?Yht3|81gBDzo-43q_tweg33c z^GQ`LOt*)d@1y;cs>}^fOHxv-(lm?TJmQ;Ukam4+YmRSE*L_R&?_XiOpFA>y zikv)4M()KxRoC2|E8bXx;~ptMlDNhZ1eBEOSQ5kKTgyEV;gQweKhO{BXP5HoJN_NS zKBdsI6^RK-W5s7d_%8g|#wKHkYs zz-P(YT?cvnMcc(aSCYqCi~8m=VR3;-mqLC}2W&On{^x6ry=R-iYDg;lB^%r5--R)T z3QzfSC2!#h=ztJ34huzeY~>X^5|VIsNg6z9)MrtIN}Y-&rn;SN5hTw{lVee5xd#vf z+ee+FLzukut){LTI+vqbrfZ0l+;o3=t=ea2K`3M`$`qPo`TB8b5fy1hi7FBSCdBLp zIfnk?sLJH^Rb~4LJL|s0^?k`RgTDljLW2?(&JYZA(9R{LCVZ1~C60fn2is7>T?GzU z!azqYWUVL@6FxMc&e#;F%QpuR&i=04p0Nxbb(#S1 z*y`EpdfV^;d;*bl*H*IfuDY`CR1)68zt>2=hf!pd9js943}%A^uK$8QgYx(0tovbF z*SFdv&-uYE1ekBogNa>y^)8yQBP3ZHZrw(|-(0PO5{}t?m9Ye9eMnNIJw~vs!ZYlD z9FV)%O1}I^v!K^jp9Ldx$Y}_?ti8)-t~ar+)OyZ znsg%>ntJ`2ckHlGeTI~kg0K`B)&ycChG}VzsSp?f_d;3X%j)=MX zOH(8kBsTsb{%VplrFmFFj%;`95dZQC@fdn;XZ|>Q{%rb4@fGg_iGZ+3y;QX`kEZ5O z1(%xE+T(0mcX>gky!0NFUhuEU0fx;5x}jU0DA_>)q<=;ZjODk@AXFqTi7KNZUA1+W z1|r2bVMT=2W(x&cKL~E~k3&*l{40RBNuF3mDWJk#6{OK+npdo6c;VFd=p*b#tk@%> zs?gPXml4h@6;UhjWo*oco~=ShqrKq|p9Xy@HcV&!W2bViXr6#YTci~UR|1|Zm@lM) zVgK|1H!=wJUsB}r`y~21Gmq6q^zIP8TarfmI+4Hnhyq;WUCZ`e#RKTO!Vcp+k3~nZ zu^|o^jFP4T+|b_&7J6VgAzh+t5Zz{dbuJi{PZB%}VTPRk&1_w|5tzoUC@oZ2BW1dH z3Ai7A{mjZ@ANu|TpPTt+)H zC$dZOgC`CXjhc+V(;n>*eIkg)uhNRbV|Hp>D&xXImt>(b|K{;|gQY+X3^Sg-+bpKH`xU)NI(@u0MTa6%b@@hn&W3xFW72uwKM$P=Vo zMyF`0-RL67x!zkGB-S_ee;pzW&fJl&M~|ICGG4s*-(-pCO_5b>lyHrF)#@IJ7Oha6&N=p;2S=mxB|aV^?={UKG@oyI--jr@xhX)-+%d+mx6QZ zSbly7xV+=e$$+X#t4Wf7iPd~zkF|rcXxdrS37@u-n9t9TD`@%R(qvu<9#B&%JDrJ8 zBbDtb6!*}Z7G*duGZHRehD=D%LqYt-j_v|V_QHN*L+xA0fsxxbTht!eZ`c{;*KfoKRZwm>c$} z#74cu^z7Bfc;}YsYQ!1wv~c|Iu+bfR_HRY{4=y(+S?_Rf`(3Wo-UTY7y>Cq}3oAi1 zABO(~E$W}tf-WjY%0++T>qvpdmS%`7U$aDb>KP{B$bhAv#QlorBv0H-4G#M(iIEEH zc{KkML_A&S$feiBx0}t1Gzz%Mv19emr-ScFe#3rz5TSio-WE8#2E{wIvGjwh*OS%T z!Q*$AMsjbJsl1!`#!O;FIH&YQOYXOWTFqd^g|&UwDm^Fn_-lo0DmG;smbrYbI`aK6 zR;}Q(vgaZrsyvWWlOp~{Xi z`Q|sMP&xE6ArF{2G5!h!*2bJMR%DEF4>Q0gbUfrX+({aj9i-vtcu5{|Oe}qqOd7jz zN3?rOl)bO)k`~NP==%^jwa|pCMA`wpncDJu^+ENX8-0hIU0be{F~dS*lRju zOxKlVH>YJc@BghHcyUe?3~yNAleGmk6Y=w-K+ge8DN|5!jC>+}5+^lPAD=*`E%G|< zoU?~JK;c%O2W^6TlCqZ#ABk}+6BRT1EJ`q;MlRHDfv<`^wxO>9fDb)8Unoqg9Lwy?WtuOucSGlU038 z2IYSf)!%+>J1b~Ix>K&(IBfU7Hr&5f_6F^LUo-H%vP+*k8=6(U|04CN3ZdtyTMZ)L zGtacqR8L_`t;;`zY2+>CCYk;{NyN-Ze)~cI&0!W1Dr_GywshmcnV7Nl@ixrSNGOp2 z4}htiBL}F8o-Afdui5=O$ma1ejm^3PofK_fp>^EIt-PgKEc7T9i<%ru8Kd_-R-F2D z{zN8J8p^R*HgqWMsPwoV?#$PFcs8c`yOyrrf62Pwkz|VKFa@lpL6CI?^#0DU%GIC} z>c;9q(55WVAG?#sfAr*#aR(go?DG^#ZkTyR2^*alFWWZjKvS01zSnNE_txKtG(7Il zTGen6(Eq)ne)s1D!)(4T^I|}QpP50qky~Rkk4xuhlJ~GyPsY{!u8)^PThW{!!|xTT zo}UuZfCc~WPN`6a&VaS0jZDkN1DXQ>w`@9h^`1c7H$}>}6NhbWL$s%%sU{~M^V!zv zm1&3OT_*>)`zjn`7U;^JaUK|b=e z6{!IBX1L->gX+E`fz*L@YU4q-E~djI?dnC>GvUPw=2?xG>Tj8jxAgw(NGr2rjLS)$ zE_`{`8{3C4TLTV;&DO6lH4~TLZfj<$Tie4g0$AN(VqG3z0HDC38xH|+)wY87!`7N# zZt2 zA)GEX;p0$APm3J^#Vdb8KvL3+tO__`pO{4Fu;Hrv^7ot`Is+CFc-kOtEYLpti^>n( z1T8x%{?||exdb&gBRkVb(>r(j_u)qsC>q$|Oth6kD%?lX&neD?_Bj8~$MHWAzS66e z{bTo4-za(|b5T4AcmF(g7h;kxC&qFkuA#rDWZ#1^fteMTSUbUcw)XAQ>vR3|=xTqV zKR<%pbFpy`2roEsj4DAi10RuN<}0z^Dl$ZT>?!%{4Qi(GxFW~AE14Z+xqKWqg^N*| z`NdO6k;tz-?u=${=V?zphT1-j(<0YwFJ50&kv>QdU?bmRNLAxtTP5_xR!!UZ!x(_S zj*TGav~gQX7pHa;$gvE3<{1rF>61IN-=z|LuWVRAbQYrltTrZkriZr;zaUrmT8mSkvhKG>x_K*U<`!C;w_9GF=toG1Ljt#-``T< zO#~qG*sozs zExtSgzs$VSj2-%_x5kbU(62_FI$;0Y7{KIW=h($6^80KvYazh${idoFBEuuXyY=y>5m zEe6wZnjc<>CVwgvabQU;7V;0O0Kq6!fiU}6xycJzG$ysLXJnS+LjCmfo{l(DYnrex zC>7&pAd4aA*Wa`)K36eEI(mck_3xaXC%}_e{ZF1-K9QqtS?%mhfgQFv3eEzURO>%{b)m5u3|CSh)V;SA z5a_SN7kcF!1fMtBIB=Rse+tn5XWO-B?d(Uh zA5pa4<19!U@@}bJCk>3@O*xAxP!kHXVf+vs z&VJxi%hx!Gs>J&Eia)jxD!fclH3agLdsIJdtFXEE>5U6i$s${3KzPZbF>7mE(JS$| z13nOSu%}_ZN1R9F?R^-=o-vQj)9;37e49z1w1pi#68avPtLkev^9eD`c z5br53bmqeF-f1(UJKFV;GXhOYG_ZSG#ZebYP5x9Lx52Hd?X#wot@@g zwC>N-kuU!S=NeDd(X7{(RyamO&thR|ry^<$vsigp-r(20e4-ap=0}72o zCGehht95>Lhx!pf!Y>5RG$+&EOd}SISCoUlsRAF|lvFL9RD2{}3ei-o2|1i>aNnm{ zn<^g@dc?$eIwV^zYxO2Ss5a0SVF|nA)o{x*xPGsh0z3$Gw{JKmicLLq4Y*L-Msz!4 z``n*i_qh;z`7u0p`7BM@NW=<|fMKjr1|Kf(Pa7eL;*qlLG&@J zFkB_G==?ioDHKL*$6tIvNh@`pU;CP;Nba41j*r zjGt&j+m|e!a2t1)%HzJ6pm_fOjmQ%k#la~TtYL`^SsBV}N_F@cj|_?Ld|5gNFB|@u zA1{Q@oAy&d3;gB+=*Fv9EVRC z+`r`4NYDcb-J5*6eo8z-cJZ+N6jp(ZqH=@6T7Wb6=_tBu)*>#dzD^?BowSnwa4cML z2EF>VAv&za9kGid{hTWG>ZxS)bELNRXf@)ElpZ*YSdR%{QddzcKjZ`q9B5T zxL03K=9>4MsO+b|Hh^(}n0pf=VAf{r#eFp^spI(rs$1|;MUeOA(6@H7BG@Z-U zAo$m_F~Q==k9~tSee>?ip({3sw_|d&6_Zb)UU~H7tl0CJR|8tR3JsZJgDU}kc?c&W zmn-jwZsZf&wKa;?y}t3=hh+4CmBe)^g?#0@W!r zGU)A%LK8|bIjqX8Z`j6S-b)UL9CzgmAiQo>gv_^7b;_wgM%O~@*nHxTaeAJ8O>cRh zjY#bq{w=V|^HNGL<4nHkC?NM;1=o;1O)klDAp}$C2`L?139?*76L3J_XKxG%NPiaX zDj^w7CaL^!ANpSWeQm>v9{$t%GF_e36@LCap#I?-fbKn$1W8&K0lUVH#_q9no;w2q zPaJ6~{t@p6($I#_XE6}}F7)OWmH+$Rtm^!(ZK=(y<*G9j0YkUCcoWJ3-5_^3?Cj8@ zg;T48su0tDXbq}rBq`MWJEm8r>iU+!q3SoCs6W@pEvpc|@0eNzzt$yyiVMXg27%f1 zvMx9y99I&w%Rc_-D?6L*EAjYqe2Iu9Ry9aooM?o3xU>D5pFDWpNAZ1=iR@cFwyHem zl0^6Q*J^yonKf#HdkVWJosatTiPk;r5ygAnd4qyztQbHNUie+yffdHcK$@{CjdM5R6K1I$~S91W8+-?_$v)Yr4S$KgU z|1Fv20o5FWM%HK8rNhLT9&4+-z|`V9wpXSkHd+J`)KRiO>Dyx8*&ZAo!BXytO)r`L zjGJt~8N@#D#Fq&yrx3O*^iN)uPoPd@l9qN_85mtP{$h!XgF8?Xfr%w+}9~NUIsh~DD2KJ z3rTxh#en%CqGcgQ0qIxfO#8Onysw9stS^x1I9n_raCh`7HT0w=ZqvnKQRO^A0RKv} z&Q5U0#K-1MYjY#fe)yP7q$eAFMoGIQ;n?opRHz;1ZnLabl12}q@S2!|I{85cPMv8j z=xc704QX=lI+%H8vraCFP(7J%|IK8Q`Z;-3Pz|+1m?$d*U`j!FFYrH%Fa@TTa3oh`+@?Xhi;xl$A)I&#-a1BONGwQUf^Xf*o}fz z$fjHJT@+X?%nzWl45TWE+8?wwgO@z*H&5!@WoX#{USvJ1Iz^%t%S*W0(l*@z8Ri%H z`X&;hW#zc9Zx;XfQ5MZQf9v>1|H^FGiRDU>)3RXI=Z;AqUCjCFO&>N98m!0D?vl(m zOd3sw5Yf-`2LoXZ9jk@ouV`$f6=9Uqp7$KurzOFg`%^_l%4om1V#tO&pS~r*~z*A0Nj`Rl4#YPa2w&0si*%Ex4 zrLp2e*PhPlPZl!UK!@%P5NFcFu;fNiAuz^^yG8m>$kL|%NhQQc&C{1!mXc9uouCV; zD2KB5INb-x0%Tw9yFm!Bz?=ub$EO_b_q%DDieKg|lyi7RZaDKB3;fQ!Pbd)Mb#Z7j z5F`~X05-Hnqr4d-k-tLfz0|zcqPU1{x_~p3;{Eb~23FIt@x9V%Y4&S`A>V9{)Njdh z^2Y|6*7oW*XyXfJIa7j-egPjHKGK$pWSJi&d$)GHr~RD6v~cc_-a~WYI*tCgqff25 zAzi{Pl6a)UxNqxQ!d99LW}E!ozngGqJ6UISwUO!I0YnVRoBtUy>?_1r9=^W|QeX5L z;u(AHm*-Iq`S^oVT{jT(rrBY&I_TBlZiwX={r-matk89OwKFFO(grsGkuo?qEAZ^~!;ZVUeY1yS4%m}=wft;p5h zGz;V~MY2@>0@aFsO!w>fNz)=rj>XxjQNg3!TG_DM7~X)B>ou(*Y%u~ZltL^MisX41zK-hMYuIhOG|8YC{b zFcJ37slO~Ah8^QdYKZ7ROV1a-2cxr&NVA?a^Frx0Kul1wc~h1jdndSxw5$4&uj|DE zFP*rfa@a_`utr!N2#aq8NqN||DV5O1$l)8h9}M(4+;)A*#5)&#F6Nu32q1f{=ge%^ z_^af#Cp;*(P{7+L7EHmb1uo2%%m_a$>k;75V~aAXM7W;Y(r})Mgr}`VI`MSWXcZx7 znL^>UQ%+v&Q@_aW%egt?t9(ccIM>BMO`U0W)M;UO?Gz%Kp!JD4Bc?_wJ(+o8?1U6SFy>R)AFtLC=PH)M6*{lO1&UFR5FE$K(cce#0W<}!+eE$fQ$bXSI z$5ZIbAN^LpPJh;=nsLTK+Zbk+@x{~iDYD}Ox8|lXrg9H1>&5|kN7SmVE>MHQO3x+uO*|(y(U%(Yy#@a$YmHP_JboU z7@{8f14?-1ISs=w_vpdpCfmf?x^}$e5M)tDZ@OK-)KgpGw!94$$vwYC_<_kg^vL1e z!Z1d}yS1ZusTk7-^0Tg%%~Lw!>NaWgkYFdLl;P0}0+Kj?#&}WAgNpfx5&LW|dOZ{2 zewzj(W3MEk#M+@nJNh$I^0&<_vE-2Ysfop5i5Cz%&bV#J-|@0a z`Dg_7sBe_l>12UFgW%e9D2VlC3F{#PnYj(pOP+ljXy-${Jb6dL^@_fqXlCo<>>ZO5 zB!dLOlT|NaE^r(#Ttzw%{v6P7k|3+sDj>h2GppD8{n{Yt%WwIZ=Ju&K^5(s@P#{Uk zLbKgLHfn>#aVNa+PX+c1w^uk0!~NzYkmecJROu=(*_Ir|4@5XTQu6Z9(Q|*-D7%f_ zGEsRq`|`CjYqHK~gES)ayrP3``WS0mCS58bIo{sY2p;1=RMm$yLBx+!6z__r06t?RdFeR?%*SiHy-z+n? ze>RR@o%G+KKgAfC-Hs{i@^05Ha1MuRe>+hs;P2R^j?u>w#}p2ea=~eI%wN%|Usgp; zDBruKCLlyM@r%3%t~Mqh@{i}^0d$P#`pe86_c9>j!2Q18XgLq=Y|Z*~HGD`X z_=)e&mAhfn6Fh4BZ^|1arz*xnWV1d^_>;IkyXL2ETjTV(%N(jYb8r-Wal~76ywEx( zffP<&It&qmUnl|QXuUUW){e(vV?j|_JM zWB5Ud{QF<;#(YM~ue6dY@?gLT8dqt47hmD#wcfJ@5w&(N0mAIXa}dhHvK+|@-g#gm8h<2)Hwmfm@(^x-`-T9mot*1I`^ z!v?*yBKEo<@27;lyx(Jhm4IO@@|x(CNYoxi%{X!|3)Sclvs=Zeto22vKiW#ql|w4l z6%mnbe1{DLx9^bKD+S5X)d5k(H@)UyR5!1I8n{&p<~tl_ec*RZb%i7$7$I|c%ytwh zhuB{tOtI^KbT)eO3`KSV&b=vN#~ws(_hJcQE|hqsch=kdH4zVB(Im-Ypj=#^9?2|a zbb1ctmb^$r!{56hC8~@i(95g-P<|T?d#6 zo-b|Mv7%IVVc7V|U-r5DsgAn-%jN1N(F`;^@F1 z{wNfoh4wy2{AMENy(?cUQ944Vta664Lj7T3wQFC0roPdJ1sPbuVLAo^_ zE61d3=wU#_xkn9efV*VUhc=FLt$64lu!=(PbFk$DD!O(9 zH(m8`dXGha0!9SzPa&sg1??PQTp@OQozR>dmgb~`1?WnNklQZ$m6%DC$GXQXGx0BI z)o11P+^YfooG|Gnb2EC%UIxz4O%(@Yh+5Wc6{0~rD*>6IX8~8{8)WYn)lQPDE+2IU zSNaxxTV*Y_kOK56SW>gGV_Y6w%-bQjbRAa5Ztvzc|X zu88fdi3#e>Q}JG>XT~qzdp^auT1S!F(A$tax(Qf+@9z*I3Afy~rehXT zg8Aw1%hwmW+k;s4-Ymo`04L9ZGb2cQ(TYgK4#sVI*rNdLXW;{-O^n}G-8CC`KaJat zRCHbbRK7mI+7pCagfk9Rjk-?HoNbL_IEpLN?P(BB^euh$;?J=U%V0hirzj% zc-zdqh{8{rt>}GK(#Wa@8u}g&Id{_cTxVZC78AhBGu*!oY1SY98a=Y=I3wE&oYW-= zX{=Wlh^BxARM}mhlGZHD$RyC_7`1T}a@?|2$o(Okl6TSKm2cLnP@bD|(*W?{9R2!>y;Z38~;cN<2O*Z(D-idC~ zz6WPkJ%BF>T>0ntXM49W$DPhdFagWl0#oaH_D?3-#O}kH^i3@s0cVUM5rTqw6%hKPI-xCn;S&t%sV9RSKWMhMe{ zd9jJ%NC;k#l%#1TFrB=Lk9(R;OCG5IrEF~f`Fc-Og7=sRrdb|?zRojO=YQHF?mlz+ z!-uz62b4?;xb1dO_c*h;Q!}Or2;x?%=wMcsC%D15tNshdA`9f3bEsxT^ zJGSO;{*g>+5%_45vFZl)(nZU&?$H=@dz0Ez)dn|e+D!h)vuTOhj}Ac z7Q3w?@D>*${sHod!QXpB;hp2W)e{)8>tB`r;H-Qun(jnj?&qSg7N^d7tKA<%!$h{4 za&D^(`ko^4XVdYK{0*}rgQ4ZJZgb%6_us77RldET*RU^t>1w}EZ2BM+IGFS1)dMf+ zH)Y(N@$|QEs{LLc8YO#!2FbQN`Nox5V*R|t_Np7|)WX!9nBYa<}6k<{Xk)EH_ zJEq7ALFSb=mgqcT}`!NXn*BwoW6F;d+IEI^RwcA z{Y|gf#PI~7DH$xMST5>wQq-PVc?bV+)TO3Z6IZY=yqfSNa6@rP-SI{Vz;7IP+wN(` zPCc6JJ+J+tC<}-0XfD+77%t-fD4}UwZkwQa;^qdDeDZKl1UH2Ey3 zpQ&|;-I)pfW^{JQN$6*xty;*0z0q>(jFp?{{^QQDmr&(wmSy$>ayc_y<74^rjF{!s z7rp)Yd%boOC+O(2md(aQz`vM;N5I*>?1RT%ZW6?wCChQC7EYx-TUeM$kHZ~-C+)A>jZhXLANtL8obm7ED2sLVDDevj zXlU|I=9`ioNGN0_bEqsoVCTKD6S*RLIB17W)i+FHQfOZwea~Gl80mP4C5WP;pCF-r z|24G+Q=V+VE3o&d-;XgbeW8#ZfiH{9B6ou>>2Xo?+O+Cm3T}XTDIu@CnmsdhUbz}T zc+*P)9$YPJew@gRUu1?xNmimAJ5m>n#uc= zH=}KC5Z;m&HwLb1$PlO-8fHil)Q@qDF`=r5c}vGFcnUwo2fuuMC)$x4*b|ttu4)a- zl^MP()Z9AORu#zl7GRAZ{V&QjCH~?~v0@Z-bJRa0cqeVWn`ZYi_=P_&5u$f9 zcX@-BljehPm2fRlM%X)0BwT^xj{p6huam6N52uQgAoM8Qb199sZ!hDbpF)RvG>VS9 zE0xcX@Ll*SX|{-ZyFbffL5xO7D}}%l@uM16%JBRyxgbmZ&dU@^)eO$`{+A_%u_ z;4z%V@_X;!MI>`W5(lA5CFeH_0pWo`?8d<9|7}*1#yUe{m;_Jza}uJTb@AhQz&z1C zzw35&l}-{b^QVVUrQfQ5nL4dLr_%mT<=~m#tyF-^87haf2nZO*&*v&8$p1#lcCGT-ARCF*`;O6`^8Te>KJr4fz?_?;jP#AjMaSuunncc4 z9Yx|eX#Eb!+nm`|{7;n^3lc?gJGp(T>Zdw!PsvOJRqv%}UVYm6Kg<}pY)IdX;2&p? zGf>XZ{Q=&h_sq{M)2%5IHdm_7sS|`BL z_Wau0n1AqL)3cmk&tXif8GX$cW#ZXo=4{$lz8NK-WV7c?Je73mWKl6?-<6L-;IS;z z3kz*mU-e_OA?vLweN41>ZfLFMukeJ=G}t*v6?C#XLI0+}vUw^s>3j-(+VP&H?%X}_ z6}dkZfMmT_I^A~Lu1#InU5(|daTJ#V&V3+vX1)b3dEV073!VV&z?8`ghTBwm^sf{s zO%?Dt68&mkE8mA75gcMCe`g+nrDu?mSTYU5?w*g|XJK=W(`}w@ovcS4VcNFim{cX6 zzsd{~j)|)6HIi*H4toQU5Gs>;IGKh7h8YfC65izcEaP0Rrjq`4$yG+i;=VX_t^Hko zblWRS6*$Pu#Fc?#)xq`WrSiue^Fx+qz1%zdfL%X|{?lSL{D|qnP4;@DAxtJ7{1UW3 zYct}%eZVk(vk860KGNKwU(UI3&O4OS4SqBC#&}9IGEz{s4{YNbG10oe~{8v)IF}nxyZZ`w?Lo&6TNcld5rBW zmi5=OyQH~J)EIoCwT$`bM<2-0W_}yLGbeU1}2Bw z0P&N4P%s1FsaZmEzP3}r`eto6^H`-6q5fO)S>FD&-D=~?Qc_1m?up4oUT^7yyH=WA zlH5n$oAOXA?5wgW>#H@rovl=YcKvIjU+PTNJV2cvOH1)y?#5V0Q~gYEVb*3b?(Fq zDj&T=3220c5$PNruU_!72RbvkTz%$SNSsO9Bd;(59CbAK2T z)+Ar7t37cZn#}pdyawE?xVYN=&Gi(r{>lxBUXprnv(RrC^GI^r)A7=A6`xEc9$q7Q zT!WDg901TA zh~%rIlZko?_1mO0or%519<-{tZbl>+53J?Olswk*cE7r(vSX%MYx`Vkc=6T4vlc`V*RX%|XC)b91^qBxynJ5nA~|~9M-N`Lee8Y!74_>GKryRrw09I}bVy@)n?ri1#C71csOCb^W?UiBepKaVN=EidhcuyNB1s-Lm z{($6W$z@E-ve!XxYlf*i-2mBljSm)b!dhZGS?)(zW*FDlg+Oz=Vt?1|x#O5fNXUW9 z8QX@^53$K6J>-t7o@FOdsgjS&{(tsAC^%=|oxhvS@cO}KFelF&d!s(Tj%s9|d!EOK z;zP4J-P)Ym+3TMC(Ouu`_R@W1_Y=IX-mi)^FyoG0zY0`grE((eh@YgjxJ^P}i3YzH zvP1beb-gtWrj^AeTGs4pdOm!g(}T2`s>lV0izrSWs6wd`3ZwZZLx# zS2s-rzQHIeoA@=nN?+tviR|@8>IWJkz)r##&jglzD#3zO+yg1n{{px5GfAV#fDjMD zR?AN3%|nT!G(i2Wmyf5Op8nky1TN@{jbA2laa@6fzsEper4a0_K20h1HIcvaM9nQ@Z3=hc?p44a9_!Duw7o_Zkc`JjT;xZ zduNUQwfKA{KluTy;Y=T2JM-#x-~LfZJ*oyl|D@Y}c<%o<9&5ISb_Mb#_4y$(uwqCD zR}Iz}Z;Ua_q#HY)rs<;(a_vQYtPc14ZERpA&H>CU_R@q4w)A3wszWFKIxh7rjOz7uOe6ewvJ!d z-DC_;vUs`Kr%DWXK+amgayPtVnh;qesR;+if`c z`EZIF1!T(L=0L`NnMvqh$JPfJ1!ocHl|V?YS?{2!^!~1(TxByR%Lyx&wIi$vMB!yj z0+1f?EE0b~90RcqTWDM3)|S%hgQDm^$bOZ~K?nD>Z0B;qG5d|CiJBiTL3l#dS0OSL zPM81(t;h9rU7S-Ftj~snq)q2Z)6_$I=Bpy(pI*P#I@_!A88@1 z)hmA;Ui<1#h-yNIG23OeU|Q8ciNfFik#uaKO%jKsN9u>O+7bdCOhf?am{pZ1W0U9M)S@>HKzOB-6Rb4z5m zvpE4e%g+^`w$0g!B71?O^`F}Wm~c>5Y@v@cX>8SbiE2Z&tMm4Bt`weM(W|&DOu4NS zH}<9d;Q83v?qaDcfH8TrShULdesP+d(P%S7aDU^1O)SL(nPW=+Rc!5xs^PAm-X42X zl(5nI5SL#L#%<3_AQ?6vX4YC#|2-gfvE)SJ6u~2<{@{|^L8oDpAHzAfg`9{kX|RH} z*~ewypH>XD|FOQ<&k1&U-q}CXf42Z}KC{8|Rpi+NQH{o9K32q65xV`D+x$uPGt}5S z6RM`ywwg4z@$>RZVYiwR%+#w(!>qf0Q0d-%@TztEZt8aEzvXh768149 zTg!Rs-Hey-K4;NytsRRJVD1jPUoz5a_9u}+(jE2F`F}!kB{X?0xqWKjWc^NdKQ#Fq zH6{ncSFn0qwUzIS(PcQOu!UPD?XQSbn~+(^SCQtgP+sS;a=ldL?pk*5s?bThO`HPf z1*H!Od2ybj;*a*1b*Ijb`-{_yTi51x&qEBJIt703*csfZ{niGK7Oi5ghPc(ubnaFo zU%?MKx(>3wJdmW3ZICNs%p5U4 zC4CklelScJeqDE|dy6*9zJh#=XnP+Ev_fEEMH^$zv>HV2v%UWt{=}V=@ws_p$@*Y!fr63EISgEI%}i?<@cH&607dzHJ&4PCgGqe&k1gGm6kdAq5Lyt zZ|U>US%(pQbD!1itji(Qh*EJg95sdR|D;6&7gWh95r*_v_~~fY0fi&gq;!BolXPl7TAL9^uynR%- zL;%-m-&Pf0T$`l39GISm&9>*4r=YU08g>)!=X832dFs!^&jX9jD?tWsT~0;n$5v*3 zw|7HiXY(|hr)iqzS;gsBDv!FBvu)DSY!6%N zK34KTWZS!_X;T?Y-;f#JV6UIC(~1JhR!E zrS)G{cC~&n_(%N6timoT>I5~)yYxq-$frc-Gi7A@K18c9-%*|~%f78V!&WBDh~n5c zNdzN!O?Z=tr*a2Ns+{k}KD~~Ex`pVAda2#FT>_$r5N_m^J5SvIcLk8t*FaUI(C0QK z@-K;t3#<@+fh+kPLLwOL)#%iIO|JtsJ>2Z`2#%ft1`pjBAMF57p8~&6Uuq%9={cfx zA%iT9$HKG_e|;`Ou*ZpiYhC;SwbxzCF#pCD&*O~Wab9h>ugsLtqXdv26xY8}4p-dw zymF9N+aIzF4X^XL<8qMiN<11qdH_56a^3SqwU(cwA{PJfk;dTamg_Y$C~a_%{1fFi8H$&r;Ie=rcgRBcUM` zr|7%ckX^xBJ-Ffz+uXn6J}UH(`QrFXZxGb&y6qzLQS-SFlH51@eZZF_#QQGS%cq~w zt>3wE{Q^vW5?<%QmWFc%DM5A3pV)ndo^Lpm51?jR!PcM_iy8*8%_fjceQc+qW-c+*%fGNGekBlX3QXP1d(Q;$kVbCH-eb zwzk-~c&Ri($d3B_ndR5)WwRN?c0+Sa5bP=0P@wmv&N2gqbkcp&6RjS@T^js=tGU{kot)idNo#~E zn}VG5l|myI%?W4DlV!SW^Kd|z4id7Eb#EU=`)B|bBPA3k64w56LeO2tChMhY7bO2j zkv^vn8mKkQ!DNWLAUaEs4K#}2xHCvJlGM|HDRn6MgbGWY-f%gi3La(i0C37N*)^-j zK?@@!wcR7oC&}9gVlj#7_Jf0xT3Lf&M6f0C$s9fz<^vbP9WjmojhD8;4HgP6f@okQ zP-W}>6T>F%)9i@14a-Fa>VX|IfgD7*%tON#*FH)cHV#l4scJA9{l(xjNn1$E+K2iB z28VVdyfSEyhRaQoq*Oc@QItd&N3_*T;DJBlobbhGLR}W5>VJR_og^MGUWZA7KR~v( zfK+J5V}#Aid>RAUv;oPmXzQb%p~%5}zp%~G-YYpPBy8EwKK2WE@8eJ6e$s1R{R!LO zY%<%5SZIsiQE!=8nEk4M{N%dn!Om0##c%)L{3d+P@4CML@LS*hi+JoEzf}6_WywjJ zF^0dkEW~fuIV2C)Tp6Hn+rN;gxQ&XgB31(X{FI-;E7Z^UM3N#uP;prgyDU5rl(+?I z+gYm3{`lk!dN9W1#B55~bfFKsBw>tq7q-px)~2WHvHF&qQdsDr#qNh;27-V7kSD%N5(!_n#({=6Svvt9*SDXSCN0*lJGbDeM0{BW&~i z#+hCouh*&B#iv@POmA{D@(92aP8%PV^o?Z_95^G|a9%I=0hI^y-9C=LzAEE>QaL*g z^@EMcR1?i6apTP$dX!C&WhG$)w1a_65xxi?kje^~0GDfZ`{S@_GT)z5 z-|O9femoHk5O8~!ns6oT6OWCPF1p?bVGbhu^6(Y<2L(i{+sJ5BfJbQVALZ&Y!kt9G zt#R5f&{?-AxT_K(hJ%;!J}1Bz#6xvccM4IOZRdSLp%u|Tgj+)G(1Rb49(WOJhG0}sMkHe zHvnAs(??J;k{+x$N;G6EehP_xHgvlt6TT~_2lZ&HXNL>r-90?W%(!X83G~}R1&ci} zrhVRRFAyW}KDLCuE?IB1L^9a8QRuI_LF!AZTd z=Zm1*VnJ=+;K*h#>>bIdGHf6MbYc4$K6MnOJCK@DNUuHbZg?TNdO2-Q@@22@7~i_AWAoMC(8hJDnzRNHrG*9or(40fi8?DQviw!o3K zAM3Ax@Ygka=Yl)W(@HUXsQsql;r>8v>l`aK5T(!L`Qu4ao}GK^#>M6jjI)%pa>+}- z4PO|g|3|cqq)f)nKvt(oy!WH|fdtLyg`FUrW%})l?Vu%eY>e|F=ZpT_ zuL?w8H6e6V=e|sKp8Tv&iqB5Yx?t^eW~Vyq;a}O+!}pmoNSv_f3+RqNdD&ur4hOCC zjo&~;YtT0+u>PJ_E+C6EdU=Jel(T(#b+0@11&_$+-XA$ldUZgiIBA55P`+>tcV78k zezLv0T-1pr&eQpD6mZ&=6e--wdZZ8{pf)D??4adnQz&l_5PF-%VAL_Ok%^Y4 zg5tS*8%28&9ga?XA}$H#U{EjzXc7%4RF$}%L3jEIRL3)Lt<^Tq8wFP(-i!G5IxIm{ zCX^pwh}(AR4Xti7^*|m}^tJfoPy4$y*;bM)?>zHJ#7{e7VnH)%GT__GekD{M^Hv zXE8PzB)(KDL^92CNrp$2t;ycjhmAnm8MafkZ>2Io3@%a42J!o-Yz|Q8ueWuZSVsm0 zX~v^bkhm(*ivs0HZ-wwO9&e9%65L7Rk5>}Taw_n*e&9{G-}Lpb{{lSv$iq-Fwz0Ai z)aK?#L=enuU%t2YI{m%uB_D~e_>$j;`%ORmqd#5Fm2%rLtD6C)vGQ_MI)kL~FTGes34?S2;PuG{~8|vBpn%kp6vQvvml+m7x2i!6!v+{%z>SS#EU8Meapm+-m z+g9S8z_SyuIC|aj|4On+@Bp zmpXwLX-$(3YWI0g?HcmtG<)lAI4%e9K8Um|9Gq{H;s9c`cvc_n#=5z>40E4TO*WJ| zWe*HT{?={qq?(mB{Xx+M*CvJcL-W1knED#3WO!-mcfk5DVjl)@S1V0dcx7gtOaz4Z zk=>XqbwXLF<8fTr)!dG^$sRGwxQc=71o1NK2=Gi|KGXCQcoI^Pa>@K-KC>-~j|SNO zaD{^&ULob%w-<#+>J-%{?DwD|nY7pbmDH))uSR33Nb5s(ubp8McqD`8BPIX8W^tJ% z^b*G)GJQO@G2E=KE7AN?(d)@^a61b2MFi2OC7teC=h7#~RR9t6XddKn?@1^)I)8@0B$_|f^ zU6%U;9Q?xdE$w2%2dxa@&HBBuW`WsaB^asyX!JP@_HErRDbd0ux{Y(Va$vx`KWE+o zNAJlG5VEmKIJ&NwvKPDNm`Q0}+_|GCAMT{f*OvHDBj45=7hU(v7qod?ZE^w0k9nAx zgrE0U?!#2#Yx@OUK^ZeRt_sed3dm!bJW7uRwteu2)HV0_)sJX7{dev9vaS9F;oL;P z`hUXPKXO}r%pl}vWxINRldxj;0{)?-FZN+R1?2VK>M{;|24gjCiIi1rveF&wapsY`{^*lUb^nnIu`#W|} zdeHVNIJ*JY74NSKYNsQ>6V=0o-)B#4H2&(V2k6qGX zb;m*5AVw zT@H(7p#QRW%W}i?@<76$RkWnQtKt?d6zvx7(9YxJ>-JJ|(zULfLvg6nSwlL7oDKUr z`ap*>?;Ll|iGz-v6eSX3pEN2AV;`ebryxCM%! z1&sfMed^87jU`RkxIXUe>CDh%ph!X52GXrEZtv#kK>usMoX@_H+F9_IzWWDozi9+(|He1}sVxXxc&JU@WiI$A zt2<}r(4&Fqqc3;}Z}{3TzVEYtNBS#&Io+>XYiMM&#OP9oU; z93-*&SF&T?CvSSWt)P%{uI@r-60cYPkXXMhi+_ro@C=hfD$!05qu1mXmv8Rbd znDhBL-US7#D11176XhkT6F!5v!k^<@s=U1$*Edc<--oYH{ycMv6FhaPP{yC~$E_4~ zjCL`!3oV@|^(=MbThv3X)_5aDex&e~T!Mi0(21rSOKm5q{IK!Hb!oCvZB4OJlw!2z`09a>Yegjb8g3K*IL_Wd_cmdxG5m*$OtiNtX0*$a z?ZY;WY4T%Hcx)TEAQ>_~c)Yj}JaaPa8s)`FOR-oOR*-HyN-2`{E$}_;e zNX=Cs?$Gh7QSpgZKR;I_;4?>}c1awzc2oMYUUC9Q8;LwJQ(}(tZ^IvjMOU>k%eJ)A zN2%Au@*}(2-DzU}@*p5qLY87FyLM6Un|v3BvlC2@>i{{p(tUIAWGDx6oU$^$kOPj1 zNr>jTj>;9#BpD$agUC8}q+lnOJ#3!jB*Gv&DX!PKWvK))$^zGLNJrcinFbz0UuQyh zGLHsE$*FfAo+k;lw9#?$m0LV|==g>sPVamW9db}+FFyF>=8(TG4_tACKTTej5t5K? zR1!F^XFhkkHsSjK4b=X}NZw2Tn{wWpFGc+YN&}yijIx%6+L`(^&*=HJdKqhfxFTq&yV5RyXqdtVO@l4M}3v{9%Z^}|xgE_Tb?#mnxD4&^EN zie1Qwg_N1e*B|@Ie|g{AK#%l^uXylLSJz=Y~;GKoUFm75lsH> zzwl*v)hk|x`%Po}=YRO${qw+KYo9g0D9`PP(R{7h{xJ!+YWCZU*>)@A_QZpg8g@F< z42>@F5QaV9VZqzcHhu>8(by#0q}uguYrl(}q;pALxeXOD1_*vB z;{0LoxW{GOac1M{uQly^bw?$~7?P8ni>>^Y(sg+MRwt-e@_lCgtouo_EgrDQx<{s~`8V5Yl7%Ls{%6Y*y zm-Dc|)S^V27I{@|m`Unv;M(wrI^CA}7SR6Kp4Blr$iHs5dU2`Ol{AT}U0#$>aej^8 zMJg>eX8-4i`e-BH|KQTi#_wW|huY8NJfGt<2+jSpZu zlh?hi!)8g=iNv7ts=*k~{Jh^A3n6L-#(e@Ubfx_%rctPzl5In6@?z|@-o}kIQj}~3 z{l@t2;IF9bxW7kU#)a`@v#r?Y_dJYS_8SCBtIoL%^S)^%gH&i%I~RCvj#6ai==V@% zi>?stCVxk;Vizzj%r>s+lE_|H8EDiaVfN#h$dUdhS8|1C!`rVZ7+CzrgT%V3SwpiM zMS>z%>KdY7?Rw@PnDfUcM>xAeZhoKJpx#c5g<#jWEU_a?71q(CjIE5XUEAB6pjiT8 zv}9k29g z_FGLC3h6RCd})IsA4nW+6~a)IMkZRR$gZe3oOwee@Pzk=K{&a%enN3K+8~)9cmiH3S2X)?B5>B!`wFl}GMY?O%mNaS86miw6 z!P@Yc*T>KAH@QvN_Y<j@uL>ZOHT>3>~ zU+f&y$;CBS-8ueR@+Mv+wPbS%zJey!8P|PXUK8sT{gg?C7`zj#4Ay&JM3|_86tJZD zSc>~My7Cp9b#k@pklXPro$ccj37IwV-VIij^6cm$qp+ia`;>(7-Y1@XPF4Yr^r}~k zAn=#tb3XIakP|IRd`UW&CGFm}G1lqvYhV3Je9v=guzr)h+>sDD3esIWJE;&P!I#eGF~dc zkg7xj%uH3(3MGRVtjr8png9t3Rw{x?l}I4@Z-6l=pvnQ~T)%gB-o01e3L zr>!0dGxlwxiH-OEy1Z@al*!K0qCI~O$PURjTMzz!r;2H@=l}NPm81HU>#-p0I zGA0pc2-_fkSD0^55LMc6NGD~?6ThA)M)QESC2ee@j&ehf$QJLBPqgMHg{IK2qhw4$ zdP&zn`$$xa;~*tmJGtWT`UX$(&UrK1#5`#WuExS$#yv8}eHCKD(J(9izVqaL_njCA zhKBgeM1x+yi&~n00=r+L87uxO{94q|@PRP8kn{A3WT&P26401_(RCg+{kXp4)Oq?b zlk_D)y309SA?Snt=Ul@=AIqsB0bH_80$rig;h__wa=gbHv^qgXwu0?o*jUXzV(cYl zg@QP#MYArXm~=44W}4@?u5xdMPlE!C$0SqCSlIEXqQZWbQ10)VIp4 zE1|cV{N-XYRZn`9`WBLZzhB}8b^GhK^_k;czmG<}7oV8Cyu01kxi8hkWWrVRvy4H* znRyDQyrQ>s&-Bq)bkkMZIzFFtGftTX4_Jm}5kG`ep!&l(mG&Z1Le365?)l%&?RK(r zmatw+>89=8=4_`L&J4%yZ$9}ES>P~qEtDnvvWU+7@;Yz3b4Sl?sg9(&WOLo;N!rLR zHyAo;Z3Aab*#H6jfRGw@rHm`fcEb&SY}yJ9!7nZC(-xUvL)J#}++}>;sAW~>WX7#E zh?pUt@QaF8`kR_U=Tvi^gj3YQwkDaM|IKnWXssQs`m8sh`^mQ_Ph=#33oRa7=o}Y> zt8=GU=H|+WcservftZy1RoD@aM^vlrh%kcVpWVXWY|Z~fB06k&+B_w`U@p$DzXLGIv8Uldid@GaF zeJvs5G>QYA2N*je{wSEBc%l#J@`%ZD?7~jP_zLkb`#Ws)H357r*K#e_@(ECiGi=wi zInq_Vp7>R*r+e*HMCB_O9k2UfmBk0Dzrs5f#EcgYlmeD?s`;CvnL3G^aiM_LIAG7@ z6BaDSHS_*$39A;R$N5o$Y!T-L2_AezSeY|5is&>>ix@#Zn|hsd!ALS-5*i;vJ;t57 zSBj*NxNRX*k|~r2kePR4$>~V^G|@ z`7Ldgqz;M|;9kdK0wkCaO8Ss&%7{zaKe1x#a80by8j_Ou@?c?X`eqp1G$H1oKk~n6 zmnyG=daLqCpry(}@^JFEm{^96D3L)6ycUjU0$X_GT^rS7-&mUJgfwx&X>+?08$_Zn zsS{GD9<_b%w|$qqS>-qZ{LO#n%jCm<>Fe$ix}Ompx(9LD^;3;DPF{Y_J3n1M_}~7g zcgf$cc~c(yjPgzI`|$Z0B2Kc6NA{lY04;tnOW3__ytnrJ1vg6XQ{|*d^mqKXAwetA zZ?(HsNTE-nxe%ltd$9e+dvy=kw=RnV2O4ebF31RO;t9M%Y~9a~WbMG`c<(R6iv?6O z>9#cV-aKk@y0&-%h5Nc;90x01r{X$ux8spGMGU!m8u@RR;O`O!@QpS0!EAV)Iz*2unvj#hj2dJFX6 z>~~MxMWoCPvMw)}`k2_*JOP~9rkPb+quwFMJBTUp8;|vla2&Qw>Vn+h75I`o%J@3R z6w7qo;z#6-xI?VyC*Uxyuu;|GN{qESUoig66=lui2M|X+ex7{UvAKZPud}p+tf5lGQ1!hM-0npWILV3VdmPhfapCZuXwsaj0V{3|G<& z;97toJeaMvfVF~I@TT9ux5vvo$1H!;_e6}fKBcw`I_R3oq90*9tF2PSZTKUR$Lj9| z?uBI`e2a*%?_eE}u5aF!e?@GmHq||XO{v{DrV%dUM;{LzUm9lNsmH|($$MpKevUZYpijW_5 zUU@P$fj)ewwO_4mc+CZCPg?lK{m~$R=K`Ix^!JmHiDdkbYq<_2WFL8RBQ|msLtZ%I zu&w%HA)F(=QK#?tzxn)!$K#)0d@|a2>}%Eyjs%b6jwPRXu!_8?#N22IvW0AF7Z}8u zw4u^GR^fLKb1X5fhZ7F5hCuLRjhy1Kh*883EnuS~D)_kDz87H*zT1fBAIP;_%e7p~ zwY+7eCrUX%y1Is@-Cq zzQZdEdZA8CN|YnGsgLM4gpU_J7W%0bUirQt#2O8ptQ`{;e{^NVI>(e}JJ35Z4vizQ zjKzOTT8llHjWo@&g4}(l-mCdOQ34RDpw+boGTn+S#lKPv( zL^aimZG`ZENFTG9@LGj0*6d{T-{_{gQmD{W!%0*K7nap>pC-ht+jQR?e@+6#g7w~b z(XcCDwP7D}XZ6#2LDES5(XUnirTB&|^wFdzD=yj6vq{CA%3{C%^_cYOE<(RE(5M7^WnoqNTwmDfNy7V z`X&Wh=MmOR>*;if#X<>I zx-YVn`yxaHTeZp%n|$S16Aouh42X{$%zl(Q?GG{E8J0W=zk0@^<80|*Kopq z)25TmK_ZH1Qo7CXJ5E~IM!H8}VLRO%8|fTX(qpa>n)@_$<0A_kwKvR-#3FBbj&^I7p6NnRXO}8zKbXwDFE?_8Cu0 zrR_MWeVhb-*?hB5$6xZdkpWSUx0cEc;bx+E$jK%{mu$}sO<}Lto{C2Nbcp#*{UPos zrd@^R%vN}nXzDb$iWt#xjg7nkiZ{+AVUfh%-H#9(;A0^l;UAk^hb;kqCgFo~&SaCG z3>0Z@Y*xmFNi^;Zb^BOF9rT#+&Zq3$@#lEF@yjpY_Tfz%Xu08MZ|jcMJJOUp^M4Rm zjaXbFR)}%6dN76swX6>p{*L&O`JxR$i6U67#vbIx(j`2V)@UL<7xngG6*Yq^$d`2;NYC3jI)3FG^|-v^^7fA7OFT*Z@TXf@zM3=K^7Ikl7p~BBhu$7z{^8|sV_~e2yqF|c`q5TYT!iklHkoc?P zS7~Ow@Ptn+C=LV?f>A4cZh^lk;Vn|dP?RQXDM@7yu97Ymc2~yt#j{8x8QB}=@w7VQ zSYRQ~geIC=Sg!;#_@I~Yp~3OCrJ+a_NfXJ5m4t1Zwd}PQ=3PZs>sMnrqETi831mg7 zKFc^yPLh_i9gy#|DO$EM6a2uf^-rrLb>fp_T_hCM32fA8&)+XS>*x!cBuMycA-T&- zL=z@+%`R<>Q`{UrC6g;Q%dA#=S8W`P_SVLTb;|2k4Hgg+-_JxHWK*j6>S~-Eu1({I zuShg1=^0uyd(6YFNz2!M{a<=h6Tm3PiQwb!x4!GM<)3GH&-=bB^bEW`lXfgZZ2RM@ z3O|ByEYw4eT-QCRbKX9x`&tFw*NPrsi>+AzvA)TW{g{#L_n0p61TBcgV)KEMh)qAK zt7%`(TbB0d>@s%Ln-c`=HToO&MdCfKDYvc%d(wc#7VS1$#|E<}XY$iwnkCL8a) z=6(yD$`^^mis1cvqxKH@GkWBu|T7(tJ8ym%0fg9)m3WSjwRt zn~1F5YBQ3;>BEb9TBC_+W!tq^n}CfTuo-cOP9QD$0=cIXHC!9|i&u42|4)k1J86t# zzUG)nB`S0V@>$`GD#nAsAHoo1F}G4e6!2%;Qt{3f4nvh)IaMQHtKlvf{o!0h`0>6Z%G^ZQaj^zEryDuN# zYhu+F{V}gfa!{&%6}k_7+NC6?>v+};Lf}XE4S^pOitQR-&#bTz1Et7|3XPFS8E@#F zqcZHeCxMTfro2WVk^ENjKa3Xx?{XN|Bw-JjxfyXK>x^#rBIxx_JS9H4_J+U*-vEA> zh@-i1V%5Z|f4%#Aa%aTi1Tc8i6gXtf70O6}5UbTSz3d=G%n~+uO|c^4X@1qi=uZ80 zH4+}?=wqk#O*4kc^lR`WVj%ET>UuI_!xMIl%s}Nx06%$hTauo6H-&JVex>fgi#_>O z*Q=dOTsP>3NeTFp9KV%wB5V{D;)eq*ZBoyOeiF)!86ngr^A9gz&gM`!2zd(oF! zYnpt|ID$jCRcGVM3Ck>k8peaU%nO-XdiDDq_DX(OhS3J}8SPf%Hd8O$TMZofGrPl> zo75!c{iWbe4R0(?Bu{mM$77D* z(qiI~3#%SICjKI#YxR~`q}NVYenB7HD!*yL8+z??mI@~VaHrL;#rqIA7S zMruB86n{n=Lee;<=yn?fxl@v-(UB1HdCg@l9-9hX7x<#o%h|VRvFXb6psSr0OIhDo zzRhwn$ZcDjYFgR^m3=Up>5PxWB-#oMB7H2NBYMFX@CLqItvW`dN!Y`WT=?d1-Vl(4AQhog0<-xoj)i~Ev&iBnC0qJ8+<3IF& zXBJ4&1_dq>HhB2?Es(~$e{mx8tiO%lXI*;dZG;zI4+|>CrESY)j|0`)NdD3$NEz=J z8}@Fyt7EyaMoBiGZu#SJ^h~+3yrZFzjt4uGsY(T${?5@ zE1vxbEeMVJane>`Q!tJud5+wKl=lsnINc!vzJ5jM9|o;#iMVUplL%w%Yum4jnrl`}|01 zxMe1taq-Ht#CB$8xNy4eNbt-LHf_~D-q{b+M^NUnnr|d)nIHPpX?mZO?j?VV%&x|QAL_m zWqg|m92I!%&e$7c&&n(!b&b}tKgR9u?=G)-%E{JjGyK|+CrzFUeD_REeVV| zs|0TE>uCw&r{Ug{!Fe)*7DihJiWk*lp-?gbAYv1Zb-@93>hBD!nLfT>7cL?QAHSpq zq(WFv zdF%@6mb2%QmNKlG-2?DJIjNW*jgJU_@P>_MLids!XH!N zMa{Kzy#B(_cw#99$1Zc01h%mW!SH&aqqU~Q_Xcw&>;^8$oGERcgsh9>Zj!w za{0(de^$QneIF`|Xn03w$O2*>@l%+)KI%@^h+nba3^%Y%7cjc>@Jw zc(dh(26H=}wm_@RAZI(`8(6d{%6pBZnR}igmlZ4;4sr1A=+u$jN z!h)-4)elWs>c%wVviu$J5ofp_j-l3&fBw$Motsx9`_BGQr^QahSfY4zw}Fvi%fm!% zHJ&RA$TINU+z@Os`{5y`G?pZa94lJzCdVl*h>(`h2*g-wUQm`amaoRMqYb}@)sY^c z(*N_=qix5TeRh{r*ah`OJBM4L8CosC=z|zYebOa?9Po0qI5mJniSc}fTZDOSzj*n6Y?DX zrv8orj|nk?&uu9W zAiYd==rin`)_YM3a;ZmBWKxU135ngIOUANHG>BAtkaAsd8gz6)&U=V)L)-~x4WVIM zrj;(OYd!4O(600FzGABjg}>pA$&TQD-#n)E6Z&19n6O&{ZRzW&Z>J@FXvNtU;{x9D zT9=Uk)J;z+-9|Fpvf;=(D1MUSm`o%J;gmCC#LA36uBA-mx^Ko2^FRh~{MWJMj|ZB<=h0xj~`E^HUJ(3vnvt(S(!EBeA{}T}O-{^!un2e3hJ& zZ9aE9s>McLxBIX$Muv~qTvD&Lg6SDkID*@Db5^@1fUo6RuH{XRmSrM=wNID?C<-z;P}d-PnZ~ z>~{J)`e#lN(U(@hkGyzRXe*J;4vGNy{KKKm~&)Fcxy;7(>m!)g?ECm(4Q504XC7g_9zqqc=)1_Cm2Y@M6Geh1+WAUCGU@GcMfvdulla z{Ixr8C~Lil@x37Z*Pyp>qPPx9zV2&Xg|KcD*R!unI=b}SX~>oZ_N z!{?H7g6ZI9_}WjQ4h~>BOhMce^^TL!&O!hbbaV+eNs#p#F3hQK6Ny5UKI4*f6&rvmegfUs3@i9_s1w z=oZL)@95Kr_m+J`eb$+s5djWZro>h+l4Y+Lx@=q@pYSGWczBWgDx7St~C?EK9 zxNFshIbdI=Q)ND{dxTztrw#fTsKg3`$WkfH&0U|!8NcE)vdUpp`5d5P8&q-~K9c>? zGT^EuLq zXs>`*uOhZ-(_o?$im7F@#^%`ZQY!R^|_{sCP1ljP_JItk)Qu={?UA<~>>{Q(J z)4OR2+BTb>=0ROd>3r1SrZ373eT1&J?mRr%(4OsI=>pT?7cG`mVNB?_1_PX!1@{w# zw>=|=px?36J?ku=d$utE{AV%e-viKcAvg@RsqimVWB=t>qq(GH353GU_(X-jS*Ztp zMr1aDwA!UHVr6Xmm{D#DPC~95>Hq%fa>Bt`dqNow(bcxhqPBkt^fa)DU1(yHlKgXa z8w=K=k|IN+fBeEu%wD2uj85))GfrDbm)`27P&(`Be0S>y^C+A`H7%WpRqMYvI0ktV ztK_nJEHTggEkhU}hL~wNOSVY46)VtXyBWWFvc!YJviohGG{yF))(e846v!$fO{+bN zSy`v`HJM5xV8WQoz*?!?t#>cmH-=7>nq104{ZK3!JGx4EPfSjWMsUoQzrJ?&pjKnSz~lY-(6*@_ERy-0(_*k*d%f91U<9< zW++}c@cC9+ zWZOcK1QAtBDDM0Z7RNT zpk05LA)zx3oZ>ZTyT^b2n zay>~BSRjX3ebU(c51vpste+_5T!D+wrp3(-Jm1M5mQH?h7$kk1g%qGF31hg+Y*sqS zw$S_Ma2=R%vPTzDStAm9BGR2Id{#s_s~6xF8bb-#;IG4?eV5+FM>7%#-kWSub_)5)jsB8X`nr1E^~RBuDCroDC`VA8H@+{eq80I^562B7WS7I{`{M3 z1CLy-B=`or|3x>2H>fq7ZmP@6a;RBVuT^lqzwdEzYjRXyk6CmvvLEM8+D?_W^)H2O ze8^JX`|S6mX#HXqCAh1AOsH=wE|*z9VsBxkA-gp@z*7`py+!_pk6NX7?eb$epLWhf zqb=0D*=VZa$%B}>6F^bNcvWBZSHYk+((fg;iu`NXo+qhbEUr+;Wr4T$+3{~aWA2yM zS6k@k+wxe|?7!mfnu&cHykqj2XxAH1bhlzr`p0hunx^Pg2|3(Xc&O6#mLRDUJlv~; zb=DDr`q!6CdrUCrqk#1IjHX_63d0c_5AF;|JLy@y!TD&7nJsNt< z1Y@jdogO}Z5VENd(p;D)jRUWRH)uy(-wUix4-K_jTZiTS!_h7W>Y+&p-t{_lr=OJlLmYyQ3kM5<6vg-e}BZqqAsrWO2gi zcCiTT#5Ct<;`HdK<8O;7;Di^pf{?x_`jJ}3$@^I)tGDf1a?K$6bv}-T$e60bz(Y!) zpEEq#W3bUcTUnP>tWlpeEu<`ai zj*w5b7<;pfcb*TRwN4fEaX1lcuNupbHhOwDuc8nbw(QXfkrPGn8`?FrE8I#jydHIB zmV9oK!8OY7iqoZh_J(JHqZ(jpsx-vA`!xB#ylT^ri zAet3j8-46^tDjAZtDS{(TuPMxX^!@zDMg>lkqTZLce%eC1agXuCZ(-_^`FsQH=Lk= z3+w!e!&&8xC_d&Kq26#^;kc*v`Yp+O?yWS@h{dosf%arwCe$>Zulg&v)kWyp`?qs? z=m(M?L|$+6dh?IN)apm)HUWqP)m#TYqc=V3Zhce-A(7twN_41-loX;kg^47rAIXn-1AaWt;ke`3XjO841g?jz@Z!EzdId z&vNT6C0w<7Ptw@<(Z@7__D(*S_Z)V=X_BOyxNL@`75;w4xnIkgc|BUqseKYTrzjRA zl~YL50@iSGLEGrZCtCQ^Df@Y}!^_ZqH=8%^`9lNKecLQkdL z!M&s79B+q_T&C^@j0VMD_WQWMH%unDP@VGd6JED+bLp1^QU|^#Vi@B_b=z6c2&@(1 z0>G*ikD{u?;8V-xp?Psc6tbc^;=$I}&Iqv;MmGVgzesp*Tkn?A;Zpzm4%UJ8fW<{; z#YLyImK+Qnw?+FCYmbbsJopscp5w%z~*+eIdA3Ko<#et2Y@ zKu%YaqqLE%y6)=HIh6aR&N*ywr5vz9`RSyGVh~J-nSuYbD&S(+ong}&DGwpZvBaXa zjjLAJI5lABuC~V2SWF_CW~7Z82PCbR4Yr0RpfiX&RPRJ_Z5Aky3xF;t6hP0!`O$KC z!?6(wa*GkAwaSB63{XN+@()v=f)5OO93F}W!nSj!{!!}M)v`q)1+ zr(~&6M{Wk%(c2p0X!su1OoLtkj*9c2SKbzAnJ_AYeMqYTj=Am+N5S)*=HB%kxP}$i z6&#-M_0!RlsJC-ex|-!&O8FM1Y}g}-r;fRN^l~l{e)kxr5oYry6bfsum9fOwA1DGJ z`L*xn&wX&c27aVTy)V1HOa`wx*LnH)Z|l`m2u=Z}Ul-$}`L=~o2HWN|4gZX?-G~f$ zPAPOW;1br&{Mw$rzDi;Zt;=m^7VV%)_c7THA41r%sTg4N|6RHVvwtv%U3YYVncEZf zm>-(+T+Q2)b-moYVSydN9DgL>gl3(}@AGTO_UwA_{-eGf0U+7S9_1G+(H--O{Z4vX z<3|hvIPFW-6J2fo%jcv4Np*d$8{Xs-eBqk<$scw?wTuz<)=V%CI^%nyC$ zv0o*y6h0bzGV>GEE8B`Re*CFdPP^l8j_Id>QDr3D_PIiWM<0O})2~<6Emrm`y@#;G zl|BwcCMXVndWXsKOgu3Aou~aHCBI(t6fCvMZ`Jd?MQrvI+(!taTXcN)P5L(>3-@PiN5`z`$d5*LT zp;8z|lPvJPlSK^k%IGJg1}UU7*!lo4qZmEO!s#ATm$}|WH&6Yut;Yr|o`+Jx;=io% zA+k73RkAbMtbAKN#Ju^5F}A+qH0^m;&LHGAO`UffkIm-02~nHPeeO1gw)KOBu+F=H zUY6CUqx5>}AC5~4WxZqFn>9 z1gqBH@!*bBw3O=~X#O%f(tmvhc%6b~oG4y%yDfbibs^r-quB9>SSvgO%$x%Ksg9~f zDf6*-=m<0%3zS@qtxqLgZ&cRca$O~KZw)nCVo|}dm)~Ad_Mq)YHOk+V{%SomHP9Ht zE_o*a_s@HlkuMM;6ShX)0l{_gaEiUtq)yMq^RUXN@qhPP7-PmFG*)yOxTKap*R%$j zy{MNgf@jOVMqIm2rE>7sZ*cV)dymyFI*w?P6Yz+A?prumNr ze*82S_4inlTxr@2GsdXmTx7Ye=jKSbGL25JEk)Ukn_R@DG(#~dofgIT%cthE$ZM>y zb&`1wX{(o~m^SV{?W*fHqI>Zlo$o(V-~2pv?<3{5I)b(y_dL>j(t)Tfgq*&umRykr z!k&JvW7>6bVkAXKGs#~z0g1ZhQ?^}qxJQM>)80AzJqk$TejBO)N5lZ_-vsK=UvsJ- z^~r?hPq$8|0sebRt_Ukduq zh8rXp(wIqC2(E*IDLfm4N3$_d5~*YX4_SS6mhL~imW`PVf=;_NRXhAbsgUS;=D#+- zAXbi)&szHF6x+j|;OkpmbKF*Z9Vqjhdt5mK;wDynIuqAxVyDu}ueam*dkKnkkXi~F zx|`kT35iDuq#GQ6Dd^$q7AjiJVS`|)pH^!*;Q{_$`BNzFOK|aL7@w6&pWUTm#uDCK zqfPnp$K%Bt{(c{9i=3z)Q~U<7(5rXPy5|r>0O5_0_(S+PQt%naq~ECU3*A?|gCAzN zon4l)u@Ntxld8d-tHTAAk`d72t0Nes3<{V7BlbFL@X-q6(p26K7*33ig0Dk`E~{?j zG-XA)!;#U%1Nd7G-6MYzhvA>ZncWiByYV0v?t&ywViId~DDs_!IiAZ4PSfEU<+Z`^ zR`eql&37y*I|OUd7{i{Q9vU``%EuxJ^WG9Of`YbR^@#u-p(r_}6{3tQ+A#;m^?i+= z>oIq>o1T_pl!rcz`nc^7i{OL`#;x7eE*flA(ILcF35BRB#z`if@ z2i2zJzYcKv2888ro|OLiMVX|c32t}4_@ua(YdQPIi^c+W_dAPL)`?=QnKmeW4SeQb zW#dBl8Ou66U}zUqB5w@#`X8(R!8e1(bqAW+-l>y!K*t`n;Ks`XrnTGa+2Ihhh2eK` z+q1UC7V{`KNQ2WbY(C6PXyMB3OB>9<-;eK(Y8}(dApYs$etppVLB+9mkTrDW-Be>e&??Y)PQR*YXVP@%(z222qN zH&xqWu0!N9pL$tHGuQUx8$lH3xDe%~Y7X6q=#%<3B~jmT z)s_t!HM2W$+e@;R-C`jAf{lb|San2p_XAtGWJDkpI4qWa2ZKa&iV9D8ir>fv)P@J# zZs9WV-C%(=?NFpX)m*-XYP4%CBUhHT*I77k0Hw5=ghalt*fo5~Io2Xg&Ug#ShMd{l z%IXqys^rqzrA&w!t|{JLA*l@vnOSt_D>tscY!a_sQ$W)sAIN*{*FKKTQv4yFQ~8 z=+cQp|7hWuPb|oglIVwof@L2}%P6atSmsA{PWD6dr~_pC7l%8tlrfOMEu1ucbS%e; zVDIPw6MG8_J0i@Q2bSUEf<=7Koa6(W zM-v(#bc)^v-go2(H5Sd|B8f-7vk0qjnAr$kRb4Hn!m?P&IiJYohD!^29Msh$-4_@KHw7Q(w9ABVQVQg3Z2Ipe zlcOnjIAzdoIH~AtXEgA-YO2c8ncCVSs53GD+^Ch0>9)hD-oIrmCADAQBk`QI*y9%sW4L+Q8173fzU5&i}6n`}JL2la!o>SSnSJZ~<4wTW}GSybao zn~Fo|^F)~%#%$dYzG2%aOn?9JHr!Rm9f^#1iOmny*IjuW_(k z1m0(Lt+^Ozj}Be~63n<<$_1+(U0^Ca`7<@scg%cqFc){wIpxZ>c1y{z-MY#k_jcje z`L)j>-F(?Fnsz3KeC4p7u5(q`eSghi=AbNlGCeE zP_C627FdGD9g8!OhuSHPWa&NdZ7fl`SUcCVcg_hxJd?hn$~4T@a<4Rz?8p0r%mW47 zhp+7jw-zIJMEn<~H&*69L!r5SFo+n+wzxkY;|-v(Yo+z-u#^mpeiFbH3^FqJq*->r zewvGY(tWBw{g`knuT}PAxZtpPZMz0kH7^l<)Heaf+fFFSSQOiX(l0SIRO)F>^w47{ z>8Q^&N8##fpF?};4L%wC^#qj0fqoyJ&mHzJv7NoBqrwt)4r4_O*5lmZoI8JFr%Sw= zopk(?Me2sA6ff(*4)(do1w^}gLZ$?a5cSBrV0-$NJo_QHgb(5uoD)dY2UL;~Gb;c` zoSweWM4AluigaosIOu3>pL}lYx=`bBMq1>n$8Qlf`TdUEKx=`u`A*e%kpat<{qJr& zVIS`J`_%r?x|F#7RGT8GBaK)l0Ts~ze|L@8gR8c*o8%t*HywF;$udkLs{PXI{=)w2 z2Ik-U^~?L&!2V#|(CqgIdvtUYRzR`m;w%95j3kkyiw5u- zQ2Td}rm$Y2fnD#^8B>+$S3qwNyT@@YJE8D~7MJ}!(?#fH@k-{Bz(I zuZ~JE92t*{e*DeiRY=^LkSfI$l1EWi97no=bKD7ao0e=L=)v@FuX@@*o1)&5Qv6K@ z!3M3H8YPj|1als-q2@01zGTx+a(L4rhq3S18dXD*KT%aPR?8biaL^VSJ`~_5PUy~H z87TxU&IQ^;B=rOR@rT18Rhvh(?z&2MaJVy!>+T#`;4I(Wbzu#}tGoGV+gCZ`X+8vx znExk5wkvh}*+rF7OM^fFFFwQ+D*^r(AJ|60X)~m#_Gn1_#g`K8l4E3d5SmwIg21u4 z)aLylD9YL|NZ~$+`V9GFHdcCqPzG{+=7Op6T z6IvxUUM7zebC+9=jMA_*S`&z6RkS6T&_n&5lB@FF47jSFjI(>DiG#=9`9ngyDftVX za9ja6{q2&KeZq-QCmGvmB6@O<)*{cpx_Qiy`(I6;Up!$Wy5UG*$S504-F&9MGcLL2 zy0vI-ToOXLnhoi-+SMEqKgP^aVqF(WoAwjDs;OUe+_PNam_-~1*2%(>M{d{Nm#+!G zw6Lr36$9b?@Kv%4#BpZ#zMwZru^em`q$c?{?Try(M^BLDISq8j1f8kaPMp)s^=ht= zGThSZ%qE!lE#+gC&u-S8mZjdHQD-5dV3VPC{;0TZgCLqnIK1y)7;2(-s*o2gB3lSt zkf!?T@_p0LJ1Qgq0dB3G;05(nt9-B|n(iO|^ z@M6#^P|lP+DMB}5J82g`ggv8T9E=OXq$#xnO6^t;Nmi*?HT!45hHZus?G7<`BuKe6 z^x9O0Gre(fCev?mU<>8*hcB)ZYX30*CgvMMjVzv zN`MMCDo`NEoEWiWHJG;j-T2S&Q3KR{EQKfa!LqV^2yT*x;&LHkw`fv)Z@W&E-$VWQ zVCPJ#{iV;cyuVYDpLV_U(meh9o(4MEj!2%So3n_iV8MTmVWEgr zqjSBUff1SdfTg**I}EYI7^8WO3X_fBq=;(=9VSy$^e<;Uh&<6Mol_uP`jd&OdFEAD zv`GGZFT4;oKuQ(_dGxF(~gHsAmpCd@oiTYMEM;%N|E@z#a9TrIa;1> z^P#MxoyzCLuqMFL$>o1vG^B}QQyS{Nr$ih)@BTdv`_40yzr_C62z_eC>50Hc$~q0H zBiBH*C#y_or`+Fi>4DTJZ_=OWburX9#s4tcVE&iZsJb(;F<=3hf-F2S`are-aC-yR zGFL~BSC9>!K7t0}X>gNbLxvp`MBlEd?sxYJP(U?Y-ya_*i z6G|ajwJZ?g0@C6*)&Cfb%E57ms+9yHWMEqF#4;+Df##~s^u0~c8sY}eSiaat+Q|Xb0=$S>{}-5K&k`_@dlCK*& zh{3MZg9ZF4$;51>tVxZopNeC3q-J?mxgs3XvRksbeSus=M|G?KznIp?u3f{bSfYkO8ORqprBl7SBnT51Iu`IBD)~W zF6o;S?8^_qH;dKdJCfFlE*%BKjW#!7h;1Z;T<~%IV$oGdE3q5gPM#Ee?tWh-^!aP{ z?CSKWe0ZkjzCIuS$8D15^Kt#Gas%+YAos({*dwt zH^l?+@e`?a*`g6gKYmH%zcsZ6aUko0cx*XsP0?C9K{C*lnzImS0<@W?fpB`89ZcU9 zBuQjUvWi0Z18vFHA-cJ@t&<-Jq)Na~Yv8iR!VfOB$`8L4z3BH0i$%`)?gfn>=xyHh zsYYv32E#Y1WYjk(Y$ycw?<~_Nyz<-Oh)I4 zUT`>YO|lJce$N z^{}bb;6grz{Xwac(+DrURzW9O;CC8#LgQrW7)^C&)81s2PEihw*ngK z=1a%)Gasm4o8Y=HxR(!n_Mx&N*OWrSWHWz@PKkNGgx2ko4K;L8uRf%Q(a!J_Y2^5? z{yUrVeM}x-NQgz!16}XzkvT>FBqBXc@SvE;BrlZ}2FPmQeK!v9H^BO{1GAE!i>lYd zGHLW`3tl9d5FC{sSNti=f&9KE9ueFViML8<;Qw#c!}DrJw4wxyN+kaM3zVb^PG>C7 zEtUta@9J1vCoE6#$Yc8+|458o@2JenwxGScO}qFaMib4F{}h5L?o>r&Ioy7Ss@2rT zQ-kA^Yy<7HX=?1UXB!~u^xe5l9aR9oW6;asB(`NG+9qN@r30-)5={Cg{a0&wxO$%3 z3&gVNB2HoawVK)JoZXUjR_<Ju4EpxQ@z9 zVhT~vfzUbfeobH%{_F1{PVwA`qyNu+m&137!2EH6@K+{+NB-q(I3iEhm2va>u>*rO zW5a-!5GUP%{}bykU-yBvp(7y?V~_+EjH(tV2@+K3Q0HT}{^A+HeaR=b5g3QfpR_|~ zZm3NClR&n@yl?qAc4t4DI-LnmR)fqc4%oEtR<_7ySIpq3Ldqy(#xkY+)C0%0;4%ox zK}0DaHMkX`@IYDmX$a&Wg%9iwtVQ?Au$+|TvVck5p!zmCszf$mTrzJ;My)``7taLQ zUUF4n36k{)B(wFP`9Zumaz~B*b4G=nh8(R+Lo7B%>#-H>%A|+Hk^)^AFg`W-r-iETXqxgpjK0T?8Ye#rfu33memmxw1$> zWzBMxfi%6#Bvn|v0=t2uQA>L6>qMKqp;1`eFat_8&DMFUJlpI&@tS?e)_^ zYfSx3WtiVJ8_MTC3?WNjhYg4Mc zY6~4o#e#MG#V$)&O}a3rxIv$FFFS(DmsRB!Jx^4YUF^eTFM-C1np%^1# zl)6mnA-Nlu^K`}HHY|nd@Nglc$_;%x9f6*;BG7SJX9R2}bF4|$;|@YEaSE`5f;=e3 z3mwY_v8To3p-<^yXM2pgQ4&JD>d!sREcxFYLZ_wxl(1-)4VW>dbJ6z>nfq#Vlb~&z zR=`Ky4vxT-agm5RbIITp?G&la+3N-_i7hEsQG39z4U&QDz!Xsa5g7d!m!U=Kv+RoW zP7lJ?Z^D! z7b6cTpBrnH$e&v&|ejk`M+lTO-U zb60rBuw#4@#Zu&!@O7RLO~UIEU8lU9Ycs(0hV>bhSOvrV_crEjso;*B$`-;NBao;^W%Cm! zm+YK%WJILw+$)31Kx{Pjj3OwY^Ap8@vFi6u4UC>q^pJF>)nwBU41g%s{cjHlObrgk zK`>|=WBcTcNR!axiv8qxP#dyejgZHwV9cmjueY>m+GlS{w5oRFechx;*k!HN7~&e? zuLS?Hhc?HvC2+_8-e$eyr~BUshCn|e)5g653WYk7k8>VrgY?(hmy1X5 zzCl+mnwXBtU(Egm)3hhFQB))EW_iZXdw{Hiq(s1pV74<1Ii_Y6dQ7Txi;7Ep0G`@e zzXA-a2slP5>2SGua_I=-XT(gDG-0$y{x7BCdJe_D!58;)07iS5gfuVKJMRoiK>EGK zMp)s#j_1Z9|E|+!)!=e7eVU~0_kQJqLC8b;#A1+UQhn)!n4Ls}h>qC5J~DJ-?Ff;- z(|#F`Un;1~(2s?D3(^ZoXesj+3sj&_xB?D@K~^W8P5}r(s`cGXl7*O6nY#1-K0N+} zT-bU*-AF1K6#L(Put;tN?ALfZc=y0ZF-lH9)u~f1>qfdXA1uNIj_BI{tF9$u3_I?T zeZRG+wLT|d@ye+Pf&MloGwd8pt0BMG&W(uShqE~{tLBA>9MkkiYg zaqkAxU`sP~@zQ%dk}Bf-o^|=C%9UMYqFA>a3O;MD{BMtYbbBsmKI=P!&w73IqcBSK z{Zn=R6F1ZD**o9zPKEy z())btSM9S6_wm#7F}0_1?$kwz+k{F%H^;}NN1Ogik)ECBTXaFhVjBZ?=&!rLO=%xx zLWhc2^0b-++;cr;bJT3^#4PWD;b}MIo}wJP*i^g408*4d6w?1=!E@hI#P^&)fs8&q`s;%Op@VL#})*> z4z=)2^+hg-8{*usRFAadn(q{^6Il^Oh?DB%x1;Uu^j+E|@fAC!9=ucaIDAkgS;;jr zW$nyy4SzqEoS1_x8Pa!nl!x%g@%`ub7Ui3nI}|)kaHnb#w6jE(?mlK_G6&_f@EReKAK4qQSWk0?W6osq@Ht0Fu#!7pDC@;SBSUr-RcWvW4xDiJ(9mZ^RLIh zG<9psfvpq_r*sMtrCYT6raYaJ3SH*-S{_Sz_@`dw_WSiaoQ={$fLXo2r#bZgG_PYt0c zTm=Hxi)MhIw$RG+vu8@Zm1cw@2X9E*#OgBRY32A9Io4R3p({%T_cqh!FOfZ(FA-(S zPyu(RE6m(y0BW>ir606PBcdXI&JqKPnsD|88viZPsRmm!rROjY9QJmh4K#Cx!R}gN zJHkrZ3Txj!sTHQva2)whT+`)4oU(QdTBD_qO9PP%^EGG0jo0&hxm65#@Nyeb?v^M( zR;D5StT?MGjc1R4BAweg`KZM5GLv*8C3~kXzX|F>WMw!K%(W5K13#FYn+O2d?G_l zbww8NjgFL~dO4GkRdKj;AYKC`qH0$EUd11GsTB*WKE!4qe;xocsLk^v`^2M*U=RN7%<1sL3AFx8-r} zW3+u+KPS$UP{)A>C|=UUUC-(T&fxps-Lq_=wq$YzM0Y<+9u-_0 z8IO2(lI=!N6c%sxm*n5IpCR3P53zetU#%7ci9}m`WwWXAyM$v26_?FfZuOuk zDz0ju|N35fi;pX4SxJhp1dRG6u}K82jty}0nJc0+?E_gMoDCLTb3)+?y_YB`s|JQ# z!5B)XB>^ZO#ERUf1nxYoHRoSRfRYa}l|Y)QsA2+jkt5wPa0x8k#q7) zhd5%1liZ=NLgT+-M1w#pMol()>& zWoQfuNc7u(p>l5E1GA3xq4kRb$}u5nNf-9OU*&1q`sj;;%eC#6Rxo`Y)9cXviVZ&X zsPxd2d7EgQEFlw=1|CtbdbwfAZ5CO4@fi_ z&74rZ>c52sx1v>3;cdu#J%s-zN=2fB)WwjfFHFGRNR^bMVb8+p%Y=4+6mW}s9#L`*ryUekvZ0gxD&C14==4aw z&>?nNN=)xSx=WZcBqEELj%w0wmVimrsdi-+=tnygZnfc!T|}7K0HtY`M6hTKG(KU) z_=}VRP7l&`!DD%5SQ#03MhwN>>npA!OQR->AD z&KyrvQ zo0OzxMGGiBpWVbSbGP=+{2v?cA6Cyv3VxYBBc=WsUHgf-i3*;t>rkz^ufLf_1>gVW ziWU6sejiHsy^-I<13sdCF0Q_VB%nxvX?N>jE~4kRRd9GBaR8f5(Vj=X zO|P3We(@JsN%n7==YbsuC6JVYR*sQ;n^9&4`UYQ0J$3lb>-xS#ZysHrM*ccE0R_9~ z`E{axk4q!=u-)C4;HNl`?{e}L4qO5Em2a68pNa!d*ZKt>cLnS^nZ(U5(h%sVakF@L zv&S59M8{E4h)C<9a<491jyg3%0l%&{$b2G=c-u<5vS?n?=q_UnNu7@HwGThmQ z{q24^R$z~ejkbyF#%>!MaSm=<=x<9BCz&D;ulZnKUD2=aL};F!A9W#dQ4CI}R^RQr zsaogFvkQ{jT0Ir&VwITaX#7fta?oM*`)T zb>Y+Hs-w%3U7~SpR@foHk#9D_qas8p@0gEDWhy(^ybeX}$-ay$__AuL`%qtI&qmc3 z(=iHeLK2D=2uPKNX6;E^S8*n{jDl1?Lwe=O15gd9g!c&weG}N_TpY)E)UrcKbQ&Ft zYK6IF8xIDQtY(fbkK+i$Yo0W0;KC8$)iihbW^nCJH>r4oP#)OlOFDydi9B$OVl+zs z{9xZw)m)|@aLdFZKB#iba{6OztDJYPDoc9V4-YUHx6RGp`uY-jl6sNDtjlQrxX&&pj!Mq$8}>aLOe%-e+_nJb^GzXPUn+2mDibYCq} z25u?Ue3w|9bY{#-+D7#Ic^a5aV@5TbUjLA+w5l=I50fR5g?N<$%aV^bqNHbj{RYcs z83xkEFrk+``rkqiMmrH1=iT#?ab+sM&jW=IddMOyMdhu7a8evvzDkqHTvHPAA!n`3 z9BbD@Fwx?aLx85K9VWnV_A4YwKiVKU4YUOv@{KXZZgLm{CXOT1FZ)$m(3HqC2R530xF**NB^^xwlem7{mT<+QA49-dLmEEsyW2s(XyQG@O zHoIh^NBED>va^ct=XU8kFRIg-!3}$Gpunw>*$e17*QX^L0`@Xzq5tMI%k~)78k@>7 z)=nbf0mbXYE}`Zbx?4{5U{miJ_WIrKqpO|#=0?SL#oU!=2N(hyu3d}EgqXm>2DfgU zJwk#7O;*Zknj*#L#8b~IrFo%$EH)GWR{uUAB{n1?y7%v&pp280g^2Gb0ujRQvA>bW zoh%yas&s}sg<{Vo!tWr6SP+11hfEkrq;#1QqME7QWy3V z7xdG|DEX#39n{-!F#JaD&L^+wFB??s{o$?0{ikyk=D48Ze}q4IcytCaOX?$fOny-|rh$7{6{ z#c|b%vkP6LZ@<}YXNI*I20KoS=C;fu-*_)q=n3-?KBg4R!eHv=1L0Fr9~WHM*;QK@ z)H08r(*sF78}yuzOE0UPz&x*sf9k@~`)ykz$t}k+B4z%%o#^n=t?>-E?52!u&W-;$j`4 zJy5RE9GwCnIFNVQPqwj^MtVCe4)`4s^%58-MlGdGhQn^FdchhPdCz=XKA-WfF~^Q$ z^T>ITGX4u~)ggn`kJE-2+jTq0#yPj0I0x~2n=X3xV^OlNV)M_k7i~1cLaRSwbd!J? z?7W?J1<0mwd3GAA+#JbXuDxcm=UT3CME76yp0hPB_{?HmJVx_&y+o{pdr#c$I!hV` zKk&N!UKC@Z+d5DoGnoSK32yM>&2rp{*C#2b1wQJ(*JB-^Vf7~3S8DSNY4Z*}D39l5 zqODND()5L21J70(e{$IsLCheiawDN{nX5)!Xbc*;`bOtNnguGXCi*g?jau7J<#+`S zvkz)a*qP;-4@733-VyZtN8|5EZ)b8c%Hef1hmMaA12I(0-V)ob8+%q`-@Xu%*iC`m z`r8iHZ7AQzkvI_v<>*HMg`q2sYEW}8&lPz;;YFKF8c#A&KP@~~bN1z-z)OYayCGVLaou)#R?oa8+Qja>-U7B5$RWPE=ynJbe9NHSw9%?r z4mc*c8YVK{HtuCC7|s{{rT47=q>@fqOA{4}mbH(FxzDsfozdDe5ryMnG#AQ6DYsP3 zH0FRT27XtHpfI)@=%muP#`wXM7W$Dizay`%z`N}rFAU9*{~n?ro&^0DOI>8g-2V_pPS#=BgR*XQv|yJQTE;VOuR9%QBnK7 z1Q$mGo;Se#zo$Lu^?N?dj2R#2HqSmPKqp0KoD@ZCYRD--g7Jl&-2CnB+J9cvn~uVC z+On3bXCBwL$ekCf0{S5{lYWRM@o@KbN?;|7#e!J)15l-nNgR$D)%Nj$+QbL^^gLbeUle9<3 z*2J&AVZ=r*n_5L8YitzV%}cKUBQHhxKi;8nVi*Q`EXD?Snemt-7yQ^61HrGN!s~Np z5B#LnSL#SiyO$o3=w0~Tm%KH^+MJgA*fJV3$q6Gg6Y2)g{w;C@>a&nCNKxA~$jb*_ zR`1EjD3vn)6$y;{E#e5v2HeTV65XPq8bG+avSbHwH;LEj!s#m|MrTx7ny+CA%yqsb zN~4%9uiQfvO!Dk)#CUI(~BrK4{lG9=ZYC(cZlUlBDY;QolZ}Q!q=|2Y(>LNG*X@WJLY5l(!I={mror; z|8c55(1{}A)|<;NVQDDuL&+NZ#yX6DG!Ai9C*2`_5VVwgXI1&^qxYt8?DWK8Apa`3 zF1B4f38g!nJ<+Qz^jjg4=vVm#QjMC?nm{12&h@FEyS1=Kk&;dA9~_zVWewU6n{trw z#zP>|)&;HVUDzFwv^e`%T4=Ql(mcl-Oqxa_{I?Tz@-95?18(GI$bI)%#cf!Lj7M5p zyj`5_;#KeWXzX$hwD2_LJ~xvM-6aaTOxvR~Yc#QmNk9W;&5Px%e)i#6@@%rA7m;pz ztjUm(M(ncK^BSng_HrG#NSJ|#*$_j;-8pZT>utZ}ds4jK!+M0o+dRJQbH?ECH$j@{Cqv>wnw6_=UdkfEGJnE)}HW?q9mdFTRB4taLJlYhxy@ zyV?2@F_`!h#s0?8&8kB`cO7=))KY1elxY&vL8Y65gu^6hu(@d8=CPQU6-6F-0wEM6 z;VnD~iOwFDx=|A+Ba@?Qr@<$zY}!Q;Fd|zoR?*&RRP%{pGHf33qq3S3k49o7Kb*$u zBNHzOC_Gld8mU99yJZ^JjN$G}Qwl#D#-<2zLRY6D=o9u;GADo_CREb#8!VJag^{wt z*J*kWg5XiAhBjiNl3eS4{^aW+xHX(JzRkTF==%`9Z>?Hhrxwylyimnj1Jw5bu0;p# zE;roExR^$o@`A9=&|A2>oya8m4iJ@aV3#RI;BaGtA7{BJk)-|I>|F{d8ksOpq0Ym} zR>z01=o>6XrN%OU3&Xev2)W5PiUmD-0GF9W+IFT$v`S=qg#`X0q_+EYW z-KkQ+i2<29;KqUjzB2DBYb;Uria%fhxNN2VQpi>z_GLS>S_c{NL{pA92=^cT$c%Tf zvVhB5c|8p*4W1~Ow?+ZGaO8Y@K=gW#*_?qAv?%;{>|3O3Y|l%T9y~M;@fe}paojXs zJfi0P1k%oVzc`Tbd9h3SxUlLs_=)$jJvLx< z4-ZtMU+A$D{bb_tFi<%XFJw}P>q*PhOomrjq=~pAbP>Ouc)?Io8!V{*%>ITck8-SI z@^-GWLf}W@G&>gsKk)CqtzPln6wEO+yL$e{qvCdeZ}Kg4gU+S$q5xKTmExK!MIAr6 z=X~L>i5)mIDE)@O(Rl298#qh>4Ij1n`=c$d(pbbm;Xd0svAAjiw%4H#1Dud9%N$)7 z^sOHY>nlI#0*2$l&x2@Z&*3d)>#NV+v5`~enH`ma;PAZRu$rkqsr^SpmSdC$M&HtVQFEvLWVeJ;b8pW3zOK^J+oRqwD{#XXX;G`U-5%$h zCcjgWSLRt$*o~|<^|(PZ)#CeUEG)(?@7ke6t*2a#E;7XCd2;8{T#Rup?I1I^|HkrJ z6TO2Xv(m}-$`pn76_)s2rTo{m#$z9SoQq%w5RBBt%k6lXUHRD~>jJG$U7wh@c;jEJ zm8dvZEg?86+xTtY9XzZ1>n|~lk-N>LCx5}l!Aw}+d%2-^LQhDv+3V{}23Ezzrjt{4 zvVm(yQkkX&VAFZSX1j;BoB<~4vA|F=cF*@GHDUVaXT5OzSGNJU;X~bo_1^Wx*U!U7 z*;NqEP3*=6?QcODFSPi-;WxFT<48A1?SHD{?BEJI#k3N88< zeTXd1+ZtTQRO$2%?SDp=_y3%UeSL^?Dvp)#x|QTtG;yiHCW@_#o|@|_32uv~ zVq{Rv-K6~*?!?ES`5jTvu|kj$m`+I#oZ1U1Fl+gfyoG!7msj z;!E@7IeME7Kok&lD#QDkMk6Z@8o5VAKMoQvAlrl&SGE>Y6dFt3c)7jaP!%qP(u6cH z4~8lkiV=pKuZL3hsE7e77jriZ6X)2bP&LvXo)D)C@0)wn;#UmtCQMiR1y51N4K@9?7r~AN{9hz_xD6Ixf1*Omm;-qujLLF zzyV6gJRs>8h0xPHR^x4Ku-_4MHuc zByY5jKU}JD;8capNyIh6?Ta_g`|i9Cm@$Fz z?IM@4rr2w@earpbd%sYC-uLXqN4@JUaNDLyQ^;Vea8(oTZwQvlJ4`)|5@FJJI z`{3q1x?S}0C<}zBhKVVuTNg)Kgcs-5LFH1f*J~;*EWM_i9Lzwt zeJ|A^;;N6enp(P9h&@o`^-bf!O&09=JN68qU2N2DqcxX?5uJTJ;VI?q&ujPYO&$Xm zd}Ne~xP@6`GJ~t;xsIB64h9?o_YTPgIMEj5F%m}e)#$~iVHj?wuRACC3E}Ci`B&bg zz7HE+Sjx(F*e?ny0Xjx@_F2WxF2;6LPsKcARjwz>w>%5rgnVS zQW3{|Ycy(%JB!N_xigv%y8Vr4E2UMVxb{$8?tUh2#K*(XtB+njw=A+X#`7SYKRMI7 zX1n-)Gy{{5)^9~aByv+_c$}`J0lu!Z@pN<|CKO4|x4|WF-AxgC==={3#LbjGtM2M> zi74-kfuIwYs3AIifZp)384(c(efcK-A0vMqH|6LtCKaWvPLoSwxs3_?EGjE%7gY~o zDe7fs5%DkzQOtQ|@@?iW!%>?XM^0;e7>kmG)zQ%IOa(eECGDkR0~j$K>l!hktGBHF zvoW~4DyH^p!OMov;2MV}w=7vFoUZn2XjdHJ-Jg<23KzoH-nM{X!NGPQ+c4zY?ZXc& zUCY7luempL7y#Tbv&-8ZpekNn^jK@Gibwbmv*hK%a|`9Wfe!r72#cY4-ES?0-|iO- z`bnQ}jTx+vPe=(1w^|1-!UtQH_q?w`6>Nl(|5{Dce``neKV>A=Dymvrj0DzC)=K9V z%NEGpbI{lV4id-b#%4M$T0t(v0pZhzG^O46axgFgkbaR3IV zb@v0`teGKLqg_mW`{Mq)S%6CP1W_sH7r4kdS^XmShJ2~S^Kt9!-cc{06=;PO&@n!$ zPqwkguqongbtUeIE#LZS@uzu1uXSbvq8`>IjdI%evYq+svQ86o2Z&uL^Opn$NVj3d zhA}|e=KPFr3M;-997%lnlCslb*Rz&3!q4U}mZx;b z3OCw90As>q(QWl??xRTei%RypPBL(IM(_T`r{Q(8`(1AY%e%J*owy_+9CAnRsUHtN z%(e6yFmR*yIPLp!CjU-&;Kcu;mhBs{A|$0oLiPR=1Qb69lnx89tX;(Uak~51g%%}? zVe@XKUZ~yM85qf-$vYEve%0pKJK)se)W@f1k6ZpB3H=LzY*Ls*ANr1JUl z!`|+#h_R16ACSPo(o=dqgy`bCOtpHxZ^NbM)VDGgKmf*#BKi@SGP%AnC%nMLV0`4~ z)QkS6Nub}PB`Ike#6y+&~tDZ#Xi9>3S!A&)+P0y!y;8 zTPKYi;0I)dH9JCE)e6T-bhdH8@)WFnBUhWbHhL}a3l(u-T8|8RG6eJ+)eo#F8?@z@ zqpwy&sgeHCL6I+k4Y7Gub2QQ0VN5HaL*0TTx5qs|`c(n3N(H@j<*uJY;LTn?JdIuZ zxDr9^Uq1Oa{txEKcs6aG)!G3_s=fY{rKx~pG_4RR>rvRzJRSvifI0!D*8OAjnGdKc24x4W> z^#4wTcZ0im^xO@m5;E?feH<`TDBB`>30Tl0<3{)2``|M@=?K;??!+54sDc!{>eB{S ztx#|Km8bLabOe>HuLY1>Geh+l?AoJH zZZ{fE0~?rS91||=_K1Hc(VYUH`Q4aiud7LUBaDMr-bRc>9!6#;7ICnIlexvPYdkWb zhtR8#5b8Zm6p)9Gu}vmJ@k{|#hsOp*knt5FmM{x=;}d^2%DDvVY=Ex4OPx>?5@k^1 zT;PrVBLm_uls(xRt#7M$$RwY!M2`jkw~ig#WGYR5X30flvETp^U^>-vSP56Y|6e#< zzhWfb^fJ!~u54-Uz(M|w3E`kbIF6JNs5 zKL=%#wOS)`P_L0yllS7V6&>$WEpI;iRT%)KZqU}0)lJ?;tDLBG|K+H{gLXG>{u^tDSBgkx{{XifxO z;u-hHeXAuHEQZx**P6xC^@t(GJBDpefUUuWwlO8Z;-k5u-oq zZI*^?WOSf%=eo@^gB)?y@6Y@Ke_kb=%q-;bxR*@O+=k0Vw66YzTtO(jN!bkRgywx2pt3VzsM{m^6idu zr55uRxr(p=F*K*(EWuK=23ropR~wSZuN`BrfhIruDDNZ$WRmk6nP?KxTyTF|Gdr-U zqM{PshLMlvJnY*U`3_Rhw92LryabeTr&jyRS2htJC$iZgNy){Pz9TB^HX-?ly&ye6 zlpD6L~mhxA@21@zhR zO(uvk_8z*!1_H~!z36gy1Q zh=|!X!@;Tt&2H6nUH~3I4$ltT(HWGV>F7RZO8J(RONvigD5@e8K&Q1JEpPb zcQEd(@1Ua0N54d~j&@97b}74NUZJ)`5mkW$3uw9c4f{rHVF%-Lyo?HAA@=ub^16)- zRVX2y=XH(?Rc%wlHx6VqSp-3?d7NsHD@{VlBWT2xPF;yCc@m}9yC=AV>KkD*uf$D+yA-LWK1nJK4Xv`G?U=(xh~q$o3UFN@Bl^W$_8OC|pGxvNUX4Qi zvQUAULi~0`bUkW02xee6C^B)NyhY_GDl?iXT46j<($u8S>g%>}AlUyEM z-Okev2aKbceAaF=mW3C?@2fZ0U3MRY?u7>pK8uWrZoZ@KL$Q3@BD~KEFP2mLPQtzo zQW^^=xxeE60XUY-y?45$boNzwE0vw*vFu91rm5w}B-ZB6+E3z*xK~wu;4OCKxW9Wq zC!>bJuEkZHQMwdLjF~!Hq_6Nkw}W95X2Lw^FoYLaSz9O&ZfB}etQV?%TwFzY1UO3Jh zj_0k4=Xm7<{Xq``r9_6{57!#d;SmTQDf55-Xi%V9L?013l{}4$JoHnDir&8_y$q7C zn<8Zgy5X(snv$R7OD-b>*_$LT6wh_fnUY@#wzk&Q5sQj(R)6XInxS>{i0j3!k+iA|h&MtI+R~rgYK@fw4eb`2rrF2M z^*n2j-5Hm8UsLru6v{Ks@fw5J4u|zJL3ZHZ%2kXDtY4+ul=CH!zf4>@=?2(T|)Nw|{kSF6iaVt!4+cbHxG za=~sUnS7-*H@gys(=dHvaTzJOr&Ub)W<;hlBNWa6r%ih;^QM7FA?4fy`lX=FMVYj* z!9h|(+F_x{=3dU)L?wIih>rbL3XvqNb<@G32D)1KevT2p+m1b!0~uQbOhxyCIu9j( z?4t9bd|NoAudpO>9!C-B7Cpk|BqkGG}=}OO4KSRH& zMc%vxlNnlg*L1~ZANLC#2B^bHM26ky0=kaThM{?gm>(;89<3N+kidkHeJ2~4KyiCY zELC_qL*~dqe1mI1a>Ve|+BaccuL>PeK3z#*Ptv-%P{0+|H=IeT0Ov2gff_li)4^Em zLP+v;#@RAet?E0A2Ve*?jYfzGp5IWGBQj13X71858ZLqR z+eu9<(X$8P&qx$t{0;Bxe&XIV&V_@en~JJ}=u$^PnJO#nVf%dzbmyvxsfIGb?CLq~ zHsR^hN_pi{D*{pGi+m&>*IX<{^2IG*_fb?ctj}wLd}vcj?{sm+;^{e!b@fzHQ{66qf492)LG%iPBgSe z2{V%RwI0vcXWsF>tocBGn&UXR1^owSG-l>tYJJ!nizjX2`WoXadmL)#v90$+v`^+{ zzis|h;pQ9v*@A4B*rqY9XqbFG-vS7tLx;kcmcx-?X9Wab*TBQcRvd9pKZH`zDBtDB#=*L$o;wAPaU^J zsj>+UZ5n(YgG_)&(m+rC(o$bA;#R*owLjGm8?z6ZS^mUmYIslhJ}V_7!tK7b_eeGk z2Is)WtYw7iAis7Jb(FU52nUw__^}dA7{bOvzuRI=LTk*OyQ;rFf+EJIyHRR*fqpMq zF@@U;qwONZTs>~nf~R$hh;QTIt(aPwys~bpao~8;rhQzkG5FY3;W-91>$PN(WkA&$ zPv3==S2(=pHpB>71J>d}h^J6sN@;cdwVn{V=3Fsa^TTBHa4c^}wdgcb(uvOzC#6IP z0k2qlTveadE0N)r^XlyJcFb6PCpUy>rxZ?dC|zHjWD%`v1q16@r6w`n0w+EAN-Q9K zGV(Cnf=@1!z_GZ!b=E5(VEDVFIGntn%92;nZ7g`LI3jDPTh+xq<73`syvv=hdYaJy zmF$pM5A87O5TdXh)r&oW$5!IBFE2^e%vokwLu64<9n9*Evs-#SP$F#1Q7-H zV{@4&C51z;@Y0{7oPaz~-|cbGDpum@FG`T&bS9T>99N}K`ToPA@H4K$sQzft^l}i- zrN0_+KSU|SH0jlzt18rSFh3W_Xb#;d&n19bH1r_6us&@9J$TK1;0^XSiFsq}@NWiZ z@ioy<3eny`&9DatG;FK{z4@{3wlqOei&fJ zgD$`K#~+#US?#%0bUWw6ewcm`Xywg)Xac@PO@<7*ktxn!MLT3D=Bq7c8B_(wii$>^ z{17K)+V&l*J1X~?(u`4#lycikf-GIbRO|NjFdOCVTyIp0OU!Qbg$WHoT9V(KtR^(LQy_ zTcg-WYuL3Gcj!uqgv~siAyCsAu-1xm9~`P>j|1H$ zs^uDKqS^5Pf<`cHcUm(%g|cBkL0JySH?XNf)u~NAlc~ ziRSSWt?|v9V5!TH>UXpdMZurIR*&qK$_Lk2`+HBfV=BZu#uJC{Q8#(+6KpOT>(8g$ z4c49k(l3k0YDiFD?hv^8(;}qf+4OY}@@}-pjmi{bl)LRb4_A&!ulL4D89OF;iJ5+P zVjHQG5VxVMLuIR^gOI>}VssPGB&he(HmNRvWbG5-QrgxMZq&@N4URFe{64(0RTrxHU27M9W&2)ZzC0?1qK~Vlm8?W2*4Pt-U-*hf(glOEYeNEIqot#E z)TwPSQ3t)g;AMl?%8t4M4l9NU`})<0q<%ko{bcl}cQPW&FudGpiAlqDvaWo!o1UI- zWdZ)2gR7)28cGY==AclVVVMdo!+v_NofX+R00T2wp5FG5n)MZCidL#tt*>^1vty$O zyOMI!$aIF2s#lHY0ov-vTw63=zt&iHeuZ`r4^4Y8rLGRe5Est&Soy+LN?l%M0(Xx2 zkEk9p5lQNySb6|H$`qS+$;ms0V8LfxTiS%X5?)9|k^C{nAk>+$)NzhB*3kFh{y zrKZI9-v3>W845cG59!P9i(y}N)rEO%Fz*45=!N_26b-`$zhUrf>A#^iLC*o*lL@1~ zzc_K!Y`oNe!02Y0ls{03vCx)yw zI1aj`cVuP>82eI)dDiwx^~UsaX!gi4ppHfYr{WWls$h!u?~bJx?b#5%;VRhj^Yxa=t#X^ndRjQvTbK(75De-te@A>%O8R@*av**f>EP#rFv-a(qK+gS?aHHaLQEPdGO}bL0HVYw48pj{Lrx)b%G^3Z zlST2BE{-0|*xEinaEt8owp<&c#yW(C0AwigI_Pb0I#J=JIG4t*(W}4tUG51{pg1$Z z&aB`o62qE}0%?u_#m}$m!_%P08I%!}_nFvnJo*nX$UF75UhkE$q$Y2;WUv71gu)Bv zc5XX}ZOh_}*UUY{obX^NL%V^_78i7LAWCoN!!m^ET2h8F?7c`=Yx?75AIr#Jcut=D z^2(sK_xy2cbm9{Udywt1T+>>>2?s)6dv({4`2e@=lJ@8Z+a2?Hq!=+5gsBJ=29hPO zHshj$_|}s44lcw4WHJ!fuNM32hL2H7p$(?Tpz2C4x92RtiI}0Itb=6Hv4agx4H&D4 zvpeHb{<(&M7YN=h)0f?20fVKZjZ*xsS&St_1dZpM1eWKe#65wr%?&o%sl-A2p?4Gg_X*?R`J&Mxv14B#@03V*Z&s2|#oP`BL-S!w*IO zBDlCQwu@D%Cm6@L?fq96h1AZt5?NO#ics1p@glEqR%eZM$I427kaUa3iMZLHh6hY4 zQDm>WXruk+CdU5#5TT6-U%9*k9bAfMjBM}aHP?Mb3_(QYFL1-*9TCXiFgo7cDntShG@A4}@SF`Y z@xM#W9x9R$<#1--Z;UYtg9rPY_<>R7+UC1Q|3qlheCU6|@g!h;ReE0g(wnRxd!^4Pi4KcbSX5x*#Tkvv$z zC6-z^xgmO2vIo6PJ#I}`k`Sc=Sfc~B@2X}YbHr4YjVtSt&vnF>_pwy4MjO-Ev!bSf zC%W|8%JziXT!*A4{AF~s-Qu^&O*$64pof97no5G^e8Z(m5*|2tlB7Acqv~Dl`$6 ziH38#z~N2U2mPZUt=ZIv7SZ$>&wn?A&Lt$CuCCsR>1d0z`&^)D>q6`rUsT)%Ie;pc zsiml-%*@7NpEQrqChfh_k44(^+4 zO5tTycd!$=k4abojyi>{t_OWBmLD+=k%{uHH*r{2o=QTer%1cSEM71{srEGfPq=p* zv+T{0f~mMu-Wo8xX$H8!&~?HMn@o0HEaRU&eZ$Yt(r_-_Z<(QS`O2c1EBm1ewB zHIDqaw1Fw?rEyOLlMNs8?^$;@Bc;TxKKDXMrMz3>L!n0wyD|_tP|K$x4KZyt%p~a% zbt#hA2FPrv-(5Le$O=XNq%cW;QI^ch}dF*HTHN?{wBBA^JUiQx*;y*9%0l0b_ zz`@;XXi-_O0g48QNJl~8qA`B`+gK&f0sd(-eWvP;`eqe6#a%8qFY@@W#w{ z$36;?iTk~H4XB6AfA(4w;RfeJiUc27jngcWFDPBfbhg*{bZ?_0j@`*>X0fF*uw?5p zt6A}oE-V+feKlkLaj++b(YligD@`J~ib#<^6;2QgOOvxF`f&$`V;OhoE=FCa{e;HYS_etFK5dh z&)Y$Kq|7u$70;FUKYdUwS9{wPx1w}Z8fq>cea*{S|Jq@o?IT2ro>LS0Hw5}GksOf8 zpb^J|LxRNLVzvPa)_sF9v<^o(Ik=EU^j1C(K9-TVQW}Vs*Nr~{KK@n{)Y>x-^44OP zPK{W|goL9vrLe%a!>oIp_4dC_**I0G6J0}efX5|AiBnc_sZ($S_jqTy zS4Nf$v8O*7yGJl!xemSMeJN2`QHcCmWm>ys>Z=J@anEoOQ~GMXM2oCED@5@93Nn6|&i|e4e@co?@61pcT zg*<*s?i=5oP@i)-F4$MkuH)^5?JFzagJa;-QI^y)Q1o&##SwP3N4T&=fZ*q%=si~_ z(W+#<7TUWWDcneKY0`($Z|~sQqSLx73lU8imTL#*(@UN~gdU^H(R)iVitc#reOqsN zO;072H`bbuho0?JFa82G&N`OrQUUuFt(*$%(O6!MiFe=aPr{r_EE3e7G+2#$rWrM; zZt0*YpIbYemNZB*cw&3~FX0|-7j8o8;Ur%28xQ#|=yxs$%z47Sb)m2RtD`B8_BY-Vfa==pI!E zhrbe#hj)qGgc&j2(m!tbZ*pffJTtcX_M<3{iYG^U#@4_!F@2^vG8(Sw+5=PpDS+uCj)r$Uht2q zxrN(a`=dm-7gPP>$M+?B#*(qV*P7}N&w0lA7XtqeQa&U1rh%eF9ed(L+E#bo?%}k` z?>4Jl81-kUpw^2}U(_lK)1E&dQ9N77rN?l1a?X9HneXqzzR66gs#iOeaBnDtgr&X| z=iYmhu4;%cw_55)yg*-tu?P}s0k{#$=OmwbN`{>cIhltKS%tjPy1KasRrqh>a0q(M znV<26i2GBqR;#y?LEQ&@PFVO17XED0rs#y?;m10A_IE-$v8cZoX06kkEdAMa2VtvB zc_Dxw9zjn%*cKl2p~H~m?sZLawR1k~AJ$BQs5JqmQt|Ej2*LhuWA8s|DFZe^HVdyEeJQgpd!;dIP7$^S>DZ+28AD3wn3mMNN0OHa zA@SO{$V;Ut(?C6y zhkmZZ)*_t$>>@*W>7hD=3P~CDOYm~pjFJjx+YqLr;nRm_q|3QO?){fM3fTbBmLw&g ztJ_Oho*cYS(iSc-{w|GTxQpz<{%vNH-$ETZeQa;;jCR%RwXtLF#9l`EQUg`9s)^v9 z>_R0(SGRBMw+vqtjavjM`e6_VH;(cKIAStxfQob53v)7V#n z^!I8}utEgkpElS+1==QB6Z!rByDq2p(YsCYc_jXit^55n^j%kW1X=?2E7zg$gMo-^ z-44yMI0YR*kUwVIcVFR+!kuNz{R_6^J_xbjLSqCQ0OznX%wLGS%-W*zo43UEzm*<3oyp?>rIT>);>NkkEF^PWMF@nzP z`r6+VZdI?L*y;2a^f*;o(kv$ecf;zr)(~xN*e6XP5aJL>r}1xoI5zrLYZQLFj}eM} zUt}xG@pzLVMaq-_BzAe*^NrwvV?|~V8ytdo1uHB0uEi!oVn#)HSc=!2Qr5_8L8tlF z@4k+;(E>U2#l%SmJ>laOPDiD$*<2X~wx25@nX>GC0a}VcIFWOeLGoVhjl)EMb;x%c z^;7wffe=Ke9^LjmRES4o_^G{-T~SSWTVXAB+n`6Ix?$N67%1IkRva6}Mz{a1sjG1* ziDKowkEDJ%DwE0M{fTV*MFI5APiYOof1_iUI{o_UCRr?wOV9pPW%;SU+jBkOlEEKW zxc=Dvj0U#uUXFJu89Pa@Un5@trLB~@{<&_BvzVOOvwAK}VjNGsVoZ9Jua4(9C)WMB zsc{B)w0&dowF_IbiDMEFUO}ql>6xiEflObdN=k9Fkukqy7&7vp`J0-IBF_PE^dMwozAD6i@ z2_KX{+y?3t4>&r)Js$r*^XTS$YRwBT+(vwN-c=<#s33jBdz!z4YL8QL0~YD-?TC3d zf1e3rJZ$_-ha_pMInFcSgw3QW3xE;!S84O@ZZsy2Rmey6sW}w7(0}v3ot`rh?X6;d z3J1z_E-iAQnURnFt_k34xt43WmbbX@LOT|f@w?yeNmu^elc@~jY5m7yw$^0w)7tdk zbCP5oU9aF{!BQhQUL= z`57k|gNPC>=U58HGjH-_BifUIj{wyo_+-T5^;^~^5hajTf+Ifp5fZXGc|$-9+{Pnk zvh!13HW8XaG{z?1HQ-9)m$z3fP>i`kc9h=%eBRBOCv_xEKXn?fopdgCDm!mOzxK*M zDUbhbf+QEz;k6d@Zw<0DaH;>ow!(^hp~kHLsV7n_G zZ(?D^sxDwmG4`Ns46P-K9AA(Q1nv{UO6rpTYT!qANN;&OvG{b9FZ&O^=*>C(``*7v zaxLeR0924D^;2G6?d!%mvav5Eg|*yl z6UyYcrw&QT`##R9`u#l?aDvLdKxOn8HsE}I3@+T@q$u|(IPtrkG2Hp*2;;lPq7iJ4 z#Utay{qPRnh)ulP+|NU2HafX{!rpN$7kn`0;Pa+6ad+}(ml8feRyj<}L@OnM9g%np zuq%+Y)3@U7wqmE>Xffx3rU*bzSzJ`hSYsS;FXGmaTMK^T)f-6UgBKt*7G_0bJell6 z|997w{h8aU`7p;<>?U=0y^hU-6S|z7+i*T-?c5&5QAa4?E8h z887OdH*W-gaYfT)KpsU{|Ft?fOTT8>#l(9f(c@TBVyx=MMZ`IU&QO-dJFWN#U)N%K zf;ZamCAaKKU$3+NgP`I`!p^Du=v@N%A0r9uf1mNLx1WELziq!2c7q=;?Ee}QMR?Yb zkWMqJ6kZ=cpLw*&vyX?r`}hmHymD)WY~eBQFoon)iSKxfc!-q=Pj!M1juWc|+cPO~ zq|`Af_(<@mCSjy&MFRwC+%7WRM5nd+buY(jJonCb;}Ni_KL}fS_im}MD8+GRf3~Qm z)Cb?N2H!69Rn{H&IzE-!+l4yxIgQogZ&kPB$+WHNi9G%K31h(v<`?eqScRW7f@W1J z>{Z~il4aPujtltl%qDf71-)T?S;#fpL+eObQL(Tmz5XSB2HtG5G))rVD-c`^GMiS^ zHv*hhwIX6R^HsHUu@xcpuLX?O+y1$Q!5kNMiVs*0F<%t75wTVxn0Ke|CGb%mcvkIATmozT(8SdOg?#qS$-K zA(Wh#M&fweB9J>_9F3X*okOqJH|XIWlzr6p=^Sg;2F2cwOq@!T+6k* zWo24q;~=F)r$uSfKKnrA?j;&hSN*lg8*1 zZE7Hr2{aB)bZV3RZNi~dgbUmk0$#vHB?NHc@il@)W6BW(n+fxR4=9@=xn@M5FE*%( zNIf-i_My1|$_2qn)Q#~0==)_Vf<$TZN>QcKzg{uw*W_(}&)>m7Nodw^!*5wmUVAbk z0zh!yl242uK_m=oy^FqPuWVEhX@+<1?SKh#ieCN8{hc z%XE}bqEEm10aJ?_L8f%Fan+}gnXgz~901L+Y&N3o9)r#5O zjeqr*e5(AxfBy^Rjg}wy2R|ww_~73aCCTB<4Y4>u{)NY7!kIq#5x^qE_q)IMyzfKu zv7dil-e~!+|K#tB9#30DvQ!^mw#B1zk2rx7fp}apZ+eI%t?=WNiEjLB=_7^X6tb%M z4SF<^m9a8I@`-hmbK%(hOVA+aDT9q3HMdcCWtIyaCa`HEp`Wzo3Mljw$zIlZKJmzY zW2d;sBomI-j0%#188PI^ftzh>i&oBWk%&j~@z2Taonv10Hrq%VvX3}moR7HHv~4)0 zdh%n-L~byf;wZov{1WodX8a#ZAk?RaCQNSo#+0CqJP2bfzU zn~eJK-}oJm;&a=^G6i@$0q<_@&^Npv`HcHulPzNxz>m#ux`oVzmifYH(BJ?xf>(^E z$+Y3lY2^1EA7#>it*6m*!%yA^w8gw8T6+&x!H3`!y1IOF{cPu?#wTbvx;h>Qef$L` zcV9l^^WHAM=JVbWzf-g{dN-2u8ta&JG-wDtmhU%{s$+B1@vh%TciGD$>HF~)$99`w zrD|#C?lk5oX@gq)=>)T{B?Ty;?=Mvb3QxO{YII^=z5o|IV4X`jseKvI#N)=SIle!X ziCqG@Ik7P!qV<i)3dqrWcqWp1m|ri)h0OZ6KBBzQ3xYSea`^QEH_j)R#2)ple&F$s_2 zo^J?@E^2?prE1Rq3H54I2uC6N@$iw#lP8uN@d$OmikQa;mp(5s@<>PQB3fvcVyn3u zCH{8U*^qq`#vNl4v;Y5>z5fsTHB0Wou}BA$zMpSiUn1~atc*axZ+AVL0D9hKP(~1f20yXvISL=k&sgrgk+mFMu?O{ zkP%8!VHK^ZtRU>n?%aE4=6yQv^PK*4f4a~4zW46j>zZ}d_sqQa`}{aRy8HC6bNZa~ zESX%xZo!9s{m}!tz1`)>liN|=;47q#&7+h>*q+q{yR4aJ131vB5^_vR#*kxzM+D>cu_RNoyib{iqPHd4}( z2hUVjds;ZxB3+Y6io8%i?%8Jw{uLp;#RDJ>9D4wzGyxrH6nrb`f2foKSyI4*?d1fmh)n$k)<1j5 zApcYc>!G0l=vBo5RU6GljvbJjU|E!E3l>TdKi36=j^Fi1J|-_CeaD~pGszFZ6QCK< zLh*gg9pnEqad1>*d_yaOhwRI!hO8gApZVD3X*jW$3Czr8H z^!C;yT_1DGDeY+0JNlb+-|_tEp&|dPHFcah)^Gxcrm7~P@e9OfY9H=h%Qr$Mme~>Kl!{35> zixQgsV9X1sK=O}GKV1eSu+`}f4!%fvSixyoVSzpK9=m}5?|w zGkW899sb6-`&U!xbzU`M^pVXb9UAjgD*4$8u7vGF6Ur{Xu-$`>O`#i3a?rBK zZlya%k?|tczR9Z(Z{+Da`xyl8@E|aI{-=Ot;I`W?tGVa&p$5=-5}Smeon@VdCe$w~ z6)(Tnm*tZgF`Yht6*+7cpRMVf!b%)e<}6gXAkh^1ePuHuG;8u_4hrf z4394TrQ;nO$EY<2qsH~7GpdVG3_F~5!Aoc7jN1!%DZjFD7ERl&=}1n^XkCF9&XMJ` zwG|I7AxJ-rpWD<*@JD@^HHL%H9KTlP61$jKaa4+fueH5>oZwjC8vd)sv&41$!Cy`o zIv^^!8(a%y+#iew`{f3QjTeuAN4p@}F9hmyA;6l6^gDuN`D#!jbn(l-TzsIgDC1r8mmu~?kPuFx`$9;Z@SF$E= zOu3?6qmHg@xUDKr0kU3K)yu}ZfMJtdfB+uBzz6)XHQPtpN-|WV(sg1-RHq98gXgu= z%UCB0FKAHL%h^8XwT39lr451(GkTtjstEdZGLcS5@N7^%2AWD`s`47BfUZm%t#o6- zCc}W>lT9$Oy~gfDBh}CRVWpj~{B^%ZKK?KL9(mDp?EL+uPyI^ht{d#WbDeSQWkMhe zdIt+qR<=17=X6~|x*>d=yZ^rb&;4KIlXvaEX!@Uh`+rwH^2Y1a_atjz)(V`^k7YA8<(Wn0oM7a>pX* z47^SqA76b>{dNP}O|$_Gv0yOti>53eZH)l0#BPb3?dH^g=lA6`1L)`bJtvOxm}JsV zVaL)=AXs_S3;92e7ItzIFEuG(p*SrZ zgYFly0Y(0ecKm}!$R=4Y11P$kcew#S=27Do`QYbj+npYCF~WxUxu|mL2<~I<9~{#N zoV3_-k+geBRpiA5S;*pl1}=AP{QOUSM*hxEy;=OpfBK)l3j*H-f*ZieyMdmCJZ=&i#qE1}YN%&+>lzF&y{aR{R*W25-XXNQf*t#s9lL*D* z>6^bD=?h7v;d~FQdZB#3*2VRzi}k`UzYlN-r&Zk|_w@6M7KO)G*X#L`fN9YedXWM6 zrztMKJ;d~ZvM!YhBmRZH;TJ>@E(iTlzzP|$@`BV{l@HisN3@SWGp|;JL$;N4i?(O9 zutdvjM9~p>#4ZI%NiPZ6A=RoB+5T5V9a00H-N&*blE_=ekr#)=~?Xs&s&U49nHu|{lopKgfHF=`(OEECxh4*xPiVO`J#ui-T`X`{vX<6FHXJfKNuDzoOZ9C@(#RnjLR-%&|ply^dY8w3LM_C=@h68x=nJt#=u zLDn+1L5|b^mx6l0f=Aq63OEUEF`8>vNf~T)R)3vlGxT}{^fg`6HC@veL}J61E2C9b z!BWnHbSZdzDHzLja{%_f)Ppeh1)RB^`^v0>${E-b$>2eE-_soC5zsX#%)5lcsZyaq zd2>>=YueAQR-Cer~PFl*N3 zjsrWsF$qO<3{VPwN=}ptRVon}R^Y4QL{2bFeQAw%66enA<8PG1j^derE$G%}D`K*_ zce+(@a!|JSg$+uB98FSKYdJe3Cp<35&2m!0XrRY1mS^lN`vjFp8_;Rt8X-CHDx?oi zMEhi~l`?&D%}NVZ7n!eIRAC*K6Ihs0!_hrjn#^6e8C*synE1x3(JUCj6Jdn2n+$_G z$XS0Og?u6l`T=$>kvc8uaH-El<;7DMBi90RlN$Yu!E_lcG+k^grA5iHmKix#6Hr|5 z_?6%jA(_sw{rE3-2ubG8!Pi*Hi*gtoHD;HYE>(bH&q4TZTIDVh{)XU7{`f1;JbkQ^X6Hh<23U zg7CwNZ9aK+28ToZ$tP&KV7F#Z-7h?8qa65hUR1lNzTQu|!S~O?CT-D|>4&DDK6ZBO zY;0qvaM0fE1$K}0bkJqT4iWgM0vuU)1XTtLr;-gD5Q`l`Uydqw(yPb6{dmXVUf^X$ zJPQ7|>Ssur5Gl}!qy*%{vIwWyDIwin{QsT#-f;yO2L8yPW9o+jk_@jZWggR)+GLGt ziFWoRUFerR6rxQF^+FC|(n)UwER7A||7%v0Foi8+Y(&bTDm1pKRa?-?GFzz#-SYEy z0pR10t2_e0|J4WrGyH*E1;J`gg*r3r^iKId(yMpTqYphgPPs67`^hekpH}%V_Frq= zJ#qK7p^;$h5c-41zU6vR)_+raq~LuXTm6bktfNJK0u=t*g{q|(xPlZ>o%yNxPpM1C zqX(@XvsxL8;wpvCA1an~ZiQ`G3FoyA!+d?Bu&zS7E3N(#GTy=O>|y}Vv{ z*U56eyF_PMz-0H_S5;Hmutk5c?@)M&>M*I#gRaF0Db-gOG8}&oy4?87@Dq%JQk=KQ zH0ggGO%{E%>b#ZCkr4TKqN$9h;w7IKp5{wR=jJ=6UFd0Zav67y2-`SmD$a_au$^jP zyUj~KD6NYK=`zwauvvsawOQ1_g9mypgumTQbVV#w_*}|3%bhUL#tUtEW6_`_O;5iC zE858u8a$E};Y1JMpFS!x2QA)2$K9oeuiczGp5K1^J*k5hw?pQiLjm0-=l=i}PX2+6 z?|h_C;F!8BSUNznfR$wgWugQLr|m{TTz}2ZIk>`T{?;tU|9R?}^TI-(;u9lUkQify zSlkHSJ+p3M=P*B+!Sg+2P17mJn(cZ7^fg`6HC@veM5-&Rtvu`bE(L1WE9z^?$*?-` z>-U_$U*A{vC7AgA9JrqIYw-lrZO%aOnOl^;e-@Lr?`XmCRG^b+!ef- zpa~Yt=UqDbebQyUFu@4ME*Fs>^rbohOBrAkw$lR9wARAkDR>k3bObVIX&;LPm>lS% za*QYXFQ_WSoMRGR366Ny07>bW7^t7zx@rBEp1;KS1btoxJi?hP{h~3iXLq`<^sj0w z?}aar@bgRRy<%A}>Q-q30HZ7bU!{#Tw-|f@_GGywbJT%UL#ogNytp-a@f+qHZG&p0 zIJ%YFEW@VOcUt=m{mn87)Gz_BZBVCEbykkttdJM%^WCJQCqgx4)Y>$;n2Opd_EnudjO@}lX_{MmnB{{E*vUErvy z*FsP2p(Af-wRqDRmJ3G8;td4wbp-Q^zQ4Qqp?~ia@`<1Od-9^`+duYE`HC<55?Tch zjg#8bjP)PEt`e)xbKc2Uo=5*`Q4dPjLi%CY(#_>qN8NF(v&0TO6yqw6w1sf7I-&`u z-TGWrZ)mB+W%8 zMc6YPwo=nJ5{*v0Ol7I&KHp@y;2@tR4sq-BJaLR~>2jyq{JDehcf|WD^%V!g6Anoq z-=D=I22C#!fojNQb*GJj|5D^GuAq>p-$p%T5pZ;)=Z&@`dr(8cO7#8a^2@tzl=!hH z1)U_tA5gFl4w#0YaXJknFNca$C!IeYH=^py_Y^-EYX({7YXfI;=5Y z@?om(HGhZ>aSh#XREITqy|#Qt zIg|i2<7X1YRNj5RLISX>#sc$(QpZ{YmSYF-JMZqK z!*qh%iQ;1_)qNYf8v5>LHRlR+u;+b`(f;4p>9k3EWC>GE_CrIJ9Ywt@6y(%Z#?RO zudR*)&si7|c|MYx=Ve_^y=^OgHw&Fny~#)UYvlir=eyD3IilflbqxSt(=}bwHGKi3 z)gb*yJs`@#+h+x0k#|*Jf3^zr_WZd@{jw8uU%CWy4%QLKlNiLSUUFe`;wB7ZbG*2I zrdy_TEU{ZyweA2xTlj|CY7hwUjT{zkyzB~->TI2L7Z3S#VFE8qwuBE5UKe&drH8lX z21&fxLD9A{G92+0wGm)seyR?;SsT@?Xd&q&ISK?L*J-USSxlDIvL4+>>y&hHjlgq0P12g=ziGw#o%k|%k_Hx#f7MVYHfBAs zo*W>^N)anf%(EH^8Q)^6pLa20qW{EOBnIxl5pX9g!w~T|MzKJJX_=f>^?;PO6(`n} zfGr2ZgrinE6(2wvO+@4(EBfFcV^@}9XQm(k_-duOIyPg0g32HNm;a!=X!_(Y|B8J7 zpZ&>%jCH?c&}4V8&%Lu}&~NuM+uH&gA)QZ0`?8Kl@Ch=WtFTr6%^&zn@}lY31^k`g z_TPzbS3y^?&%(BIZ}v_K4l?B1d3q;*kta`_JW?;3EIJHO&Aabj#dkFEB4?w&gC;a7!t#FP@826nknp70Zc!JWrDbts{NLl< z`E6jY44(kF_0vhlf^(~SWNLUQnnj?uW7xZ&(4Wem%Zd6t)|#$!c22Q5V($@f0HG) znUb`}sRrBve{WjJhtq6w?B2dnVbwnToqhDx@g2GN#5!wLtKaf<2H!1%&^*c5POc8P z`DVyZ$^-|e73X;?wMPj&((|ax=uUQ$^@OX1AZdXsDkrJ2+I;6Ko`~Ogpk-Az38BG@ zEATmx>OZG`;ql6#67yc}#4dJqVK>kozzJz1{i+P8&ba>kProVu*SrYqwQgr!_wcztYRXj zQ+0e}^y_Z(G<@v(bUf3dQ{$N|`dv$={L#c9+7?-k?>T!ebjtSFUNCH^7yibU9UwyW z#e%%H3;4m!(BtpEn@oUtq^b|Bv=ehL4R0o&ES5ya}QxA;Ds+1!`hjHGjN zwn@%waaokE8#t@P{kNorN*OqHHelx}TqyXR65%%Ck&oG;0)nUVde4@`Et9+V@{*S3 z*6yB#|I7U|IlT+e352eP0y@zeoDYFesne*VimiRGg@G``Fha|qQHqmHu#`4jQD6cKFnj+PL6_io z<(7F6IKaRNgXs)T&$4U6a+Q;|?9B53giBvwxz95ZQ|JX5ark*c>cp#k^A7{D39d=; zv2B@zmuLV!u3W(rjl5!&7t4TsSHUi@H;ry&#+hL2FybAHq^(2rt7k3-x${bM7iN|J z1#HS$>Y|#I_Yp9H4TqY@#Srwb)pw<7u@s@%m=cDTy2wD9O7~%l20k$nvhqWqN*MJ! z1Nbf9^ilcBFaJ_`(e(X)?kDAwpZc^{pNl($o^1X%&>jTRBue5W%mP;A6?x8DeYa=- z4%Cr8@i+gT{I!>`3;3IV|JTXy`kLS5gLapXO$!f207kMq)9lznrbiy|>0Ty}RB}OB zcKvpbjfKwK>5~ZRd=T?n#O)I_vCL&9$^{9F>{>E`6A@Os_F!d5v;t-9iLyarf&_$|Bail zWrKE_G?(;`@VAG(tx4o^$3<6qlXMRji&=wJLwKt#1 zp$^Y5vdYe=Tj1_2r-^kZ#7z3Yu}n;r7RCi8 zDxw}jC&SBdkhDOGlGOok&K)C<{MOpBl0~veI-h1U?XklJ4XF@aiQrk5DCQm}9IJeW zI_l&ZfHf0(p77QF@5t0F;Z&)#iLcS=1%*azix*rceJ|43q0LE5ren0x`hnYs$+IMH zIDq_LL6be;2IG(`V>D%Q-jfP75tt?TAMI{I$l6_YSzcA8jkSVLc%roPv@(!PGo#%a z#B0X&gAhtO%Pa;IqpLc=I?IL-j729`NnA~xzqILe;>`(Wt&?@=>ptFz=VF)jArU-z zq}s67Q0NozECT%onNW>qN-(GVk9_FH;5o4CN*RS5Ut%~^riD(S|F|y+s}xf$1L=@+ zuXEpXa5iXdLFD^vvSuf`yyQyZY$xG39&M^+K+3h1tBz~A)`Su5w{(8iJt-IcK$08v znItWbydQbvL-Jk!@*k2HO`rVbPs^YAvp<D&eE|Lqh|N}oVrG)PaH+gokAoB9X*Av96qb;i!t^Rcgd zmxcTXdpK>(iac)3KApds@|1!4Tx@ri+r+@Ore-{gNBuO;UhxmwnSdG4hEQVT_Vl%dJBzf%*iFc?2yaU?^ zTVWzXo9a{P3;0(BcHOLX2|ZA6k5G_4$z6ko<}{KigYz;ii{5z!S73-NHs ztBv}^#G+^GVzvAtpX>OEqz!Ii*kykH zJV|9;hu-t|A}Pun{q?k>3s}>_d_Q-w>%a{JLMz5*QG}~!% z%xY*76p~ww_bUR9mODRdYYR&FQa32cJ7|=??FD%$%%Zg}t8&XJ0CCqU9_Bb` z&>^fo^o4fWR_XFzgQ((k(s*~+%Hw2)ci&4LZiV42eV;-s5v!dOco)0r?~+70He}kK zP3}nu*kS&>Q7TF97y?xXt@GIAWHNBh7k$yIr$6)d<9DS8CDGQUxp4R|dmGn;e+?f% zax5Nlf=+H@8t`J_?D#ZHa%u4)rNRXQ;*=hvK0CilOuQKOU$iL>%W)I+w^=H#-52d; zfH}*;Z{e{ip_6n72M}+!YXJC~uIZYt>4Qw#j9*Xuj(>X)nDh7RvVyEV)72>H^LW1s zSl@>a%FgvNTuSv{s>SG+k7GN^rXl6;`2xmTr!CuICkYOH$-|C;0R|l1mrfb^EL33$ z?Rt5k!KFK6Z8(HUOc?aw2U#cc_AsHud8_|iCnl5~(q5mJp1!-L&I{+Cw)~tg9qsg^ z_SWCor%dRX=al+f78uHuU*LdY6u>iM(z;2Ejs*4RyGa?bbR_Xg-C@)Ujs*>(rF2k< z2I1gt?6ezut3HSuwBn#&J{tx39lYLXBXHIHmHY-uMbD%Xi3b~rZ}w;Lo=<+xNxPI; zOCZE*DK1{%08V+pa`qnv0tQ+_r+7O6Idv7|lJr{XiT-@F;rLA77v&ulnox(1liD}$ zJL!e%1o(sx@+LtI$-#E^fAF60;Gy!~3WON5^cOkwn@cmix7Z0uK_>H zF$PqS&oTqkpwoWgxD19M{72&NdJb4}cMBRg{>3*0L0hGPa}LyI9f~}urnJ4Nbiu0N zpr^x}DzBa*KpC^$$;kTASCiCLP!V`zHHS{@lJGzIAOHTBvitYDzwa-ekYJbPc|5D^ zMHQd=%L#}hT@xBjx+>ea*=`g&VG=satOkyc$?3oUsedRx_(MM>FPe@Wz{lU1B-)B? zhW^OKDS$v_Obqva9^WO4BcLVajqM%U>AWtNbd#!opLZe4Y#-_P5@>fVf;s*@i)=H0 zN!ZX)2FIDPzJTa!vEP+*ZOop8p4cSe&hHJgeu6KPZ6WRZZTSXqrAx}|F}-qbFm~T0 zztK9{+KMk@Zgcb5z%%XWu$@7E?*on9ky(og)(rs0p(C`Ya2#oV^2m<%z%}E0ZCjI% zoVb%0PMC;g{&D0fk0f11%X93ujh(j|SqF`M*Yuvsx%l)-^y5jyuq)BDiZSj@v07VP> z)J973f1<%>d3)mrzx-!E{Zw~n2_br_=+&OqPJpzpEk_Za(r?#X_BW3s1o z35LEPm3*c+c)}Pf5GWe+dNjHVbz*l|?|+e|=eb>?>v25&>kr26+NXC>->0_;^U`Og z4mU{?#IKU0>R4+9SJuXT-`|a0RBOL?u9UNBuhZ6L%0sJd+agPU7?18D8Ig(%gj`G| zzdSqN^W=Te@_OOA$VcLy7|Zuo~asB~J-NTco$FHTc?1?Jiw` ztZQmilWVCbQEZ#@aoczsHYl3YsxpeL&{Ai|%gVT_f#2{jf}Q>Gc&FKxl5T>XI_;|{ z`8*3u7yf{Vke`qzvkaZ5W$4*$D%0wrf5iDX{u%XQOoAG6VQ;}q;1jcHDxx1gl@&Tg z4JJ~9(OQQ{UFz6}@-k(v!?KOAk5Ev0oI-JP=70S5d*N$vF!xx<$m3jVoev2pfzl*$ zypP~&QwF^Fs^sNgH$<9+1}uBd>%i|Uupa+~n5)3gz){lUcPoqjjtrYGb_@xkKEc9) zkbh^3b9b;&ALu++buNCi?DzQON9oH^*EIlqP1kfy*Yp7<4#=`mex7m&U?8o^Ju6VW z3J71ScNO%#RBwl2m2ZV_!gan0!_1aliznY5hw1^0W1@K?qd6I(OCPxotXqZ?9P+%} zu?Si+Y+5P|qp$SL$XUf`GIs*UDEn*@Qy(I><`b)R!>MdO(LBa!J0`M!lD>daRb(2; z7@Vo_{CslHii5~0#z!<5uP7y?mw2vDB-P(34Z;X$S{$#&QkabGlU0FJC;g()*hvMr z$W1Sk*p7Iv__Xl3wGTeSK_@;3|6zcjTSGhhA#s-QbGsZyU{u-;7QQC`U&$G+qrW;Z z1MKWT=iIIHspbTZ5==V{ev*nY21r?o5l_C~V?sR{46-)*z>3yLI>;LLz#BCw7$pfD z+3Eyxk^75``gx{F#x(T+pwKZnp#)Qq&DJ*JEUB~ZBMR0$*{!vJD3v9swAu#ay3kjX z?ATPj;l0scqF#DqDh_4?Ud(rzD#PeqVXg!)2Wm3x4vurmz=`t#mutAJk`jA`U<5oW z86?AFEp-lg_V$e`r4l0CkC1=Kt^-?9QKfoHaHuvfUv(Gw{jTr$W_i(c?Ed|C{=NTD z;&@ZnPrR1d+;*mZ7&}Mtu0Uope*-5D%$+E0Y@?jfRYH!A^lyIukIS2HJ(d?u|GR(f ze;C0O{6WW~FIm)r|3%|lrGWDcR%+@^_U}TM?qfG;w^hiy6?;4E6?V9v?b1^tJv zY-}Cp)9bqXkRp}(eZ!H?=f4^7SJ|Qt@1~@a3CWnGHMO+eG%a?PKZAw-UR_6R+fA`Y zLl$&=%eC2&5nrQS)H)`Gu)}swm0Zeh%KfPkh!tv&eiFv$C)ZI_5AaEn8sRMw90os$ zXyoT$`0YLdLtFT^wQpWD1ut_NrOy4ymE(mnCR_kwNc0oB|&lK#~o<~Uv( z%&X*&k|}Yy!f|{7XZ(wa#pK2DruE%UyUN2HjEnqq0Q0m3jsQFAau_yf0R#U@d}p{! zda6l5P8W+ick)%Omrrez6OLB;tmqbDIwnz?_AP#vQC(;!Y#uY6L8hsqsRiz*tbEWu zamS*Ft=LYo|5C?>cs{vp=p&a$;C9`CIh4RzXTYvX10Q`6VgSP_F#lw;@s?JuU>+^?Xss`7NogeSxBkw` z>wMM}C*-|X3q4kqtW#ds`CGQqmR@SZE?2|Vtx&%&J*$ioInQgGpWRpY=kvU$lYW=# zw>7NKYAZC3&Ch}tXSH;(j*GY~bk30%3pJ_^71Ax0$C0Xx%(`yL$NoU0PK^i5;(a_~ z!ey%bQ!NcO%ibZI(##weHZ3nKk{SG47+)qtip`VW3zwf+j zIi6q#AfTgifK4ln8oFfLM0jki&WPzt<~$)5v61PLSkT^xZq0Wo^9JBUr^9i*-3ifa zk8b4Y(_NlCB}JY<)iDE6U&*&I?%?oUr3y^~SDG=#t0`lQbI>|yjH8+BT$mJG3&t2FZ3+uL0m|x~6NorZ1GV zG^(EN3lOi$aemIj_1y=#sD}EF6}K6Ux_nZW;seI+;UGg*Hc* zM@t2UQ4gFZRh!-``5@tZi^TUtc;L@Lj`&rb2NcNH-YGdfa2>+27IJ)4OWjMySm10Y zk>GITHd&NpS}cD>>tLjV zV>!?Ou^B{}GcpovQKr;d)67_b)J(klN2QX|evH2@uFQn|U5Hxfta zCz2`cgSy2)I&+&`WCfEdtE3A;$5`p@v=pUVQ*u`NYH9n8Y^Eh|L!P?kFlF66TKnTK zA^3ZwKk_I3j9}76Sf*gR!VYYwz22P;H-0k5067H2(E~2+`%Q`kOrzd?=kKdSn7kgB z{^hGPZ#s5|Af zE&?E2ozKo)lMch?x-Ob`h8%%C%Sj{$aohStPjXJtKZe?J$M6W`Tj;Fw@_^w+gFnx2 z@JjCNK!rU(3b|JQ#%|aahxg!{Tf05$Ja?Gy<~zMCzrkkyZBomLp|SejVKXZMRp@-s z3-u0h&TsH~rZl(8!5E3jD3Cn@qL#ZlBk*KNX|ReiKNbIjbY2>=5d_|pblJ;GX<9Vw zfurqxoiO1AZX?((gp>0D@2)=b-Oy<@5wM9od(j<8VMZLL+@)fYYJO0UBrVGBW<|%R zNz&k#^q;c*=%-@8rR>HIk=F`u@W4GYd)PV6P8jE1{eIl-EAl{{n9H0rdX=yAATZ+q`~Tp9%7KDy3b4&7}bb7cP7G5d9 zOZe*2@IhURBFp|ho;8Kx4=DK4b@)qmdn*Ut94HKnhuXluyaL*+G|_TzdyUXxj{W0Ud=kE_Hq53NlB&x zMj)-QCzsiI`MeX%^;qD5xuXR=^*#m=2|o%jmT$wycoFTuCg??)#0C;BBvS0r#6GQ4 z80J?Wj3c1meUE{rjJlXlZR3`>q~b<)J^hWEITxa7)H!@9otokCtct`ORW5cUALjgL zw2?tmk=H-;;CwlD|0c~800(+n+b!hKsVwY3d^Y5GPK)^%?=29JqN8)3#-AM5+h}KZ z!vmi``Q8dWVq*gQe@VPF7M5-err|h*|80`v3hriyH5MT&P_Te4>1a-SEO_MkQs#Jn zvR#jWzNTxsrfd3wN%sY8r$MNy^i|kloM{4t?^pG4Ue3q$^>V8Kbg%C|+~$G$>@s3- zJ?a;70F3fjyq7*qH2y^!RwtCGEiQ|}JdTnc_@!f2ClldV60E%mk>y}&dQX|uCy-9l zt;0bWPEU0#!xLdpRJb4`O)8q+`&nXkzMpY62k#tK;_$AWS85N7k zr*Q9xBoqCD7kPlt|6lJtf#MpUtN7_7C z5Oi+z5sASX8fA`C^htJa0V#BpE0a>Y(}VRGXul$*E(T-C76XRLzjGz!yOl4R&@~|v z_tdH0%dR*oO(k^#!CZKon{76!@IBd;^ESq2S_Z2av;=T~kp|UPI4QsqM&24co%B%H z+;g5?n6r=Ka4$#oXXHQn*`H5ZNa~?;CtvSR)22I; zYTD#BkdhRouor$^f^%o&(~1ciuT*~U&;OMC(x?8BylDDYzwP(Q8*jW8Z64p0$^}Uj z5HeyL9D5tbDu9pUDt1eU-7k8s+n~|T?)kub=X;abZG5Di8Pd`&ju{axK3`1W&@=Yo z)FCZ?tjNNLtbyL0`p{c-eRt&B&)_!#>BFw==TW13^M5vvupbKv5K!Mm$R7awBj|kg zkNcHpeh^(k?bJ3FxWqTtPF~tV?{T>}63}VS@`?Tl-$vkbrA-_=UNvP!QxZ-XoUg$z zuxZEljLl`N5cmZW+uGe`|8AoRK}R|AI>5q#?ij0R?&dH}-HW60Q@+s>7E4(46<&LF z4K_bAF)0-Gj^zV8v&e%Go-76aWHyDehHRq~_Vy_fOfE)!;xrHsnvwD&^%g#)Nw#f` z|4AL3bz-4H_gNWs$S7WbcbxrVr*(`eiaqBZ2Ar`hBjMNNKQ@u(&w?J^j!NRYQPdZU zF32=^-CAhHecx^DM*3iSpN*5%s{Tk55D{m<#a-OCR>7=8Za zJ(G8CM=osurG`&Tonw1lVWX{Mvr%JPjm^evlEzkJ+qP}1v2CldZDYk+$;!#Q_u2cL zUobz-=bG~w_ZYWki}bRmZ@ao#c`;JKe4E69g&1UOR-&S4%}7ZNzRZo;S}TIxU4(*X z#H8FAk=1Y6CD%0+=)oyqZo!{ZU6s(CbB^_n3IOl%TZj}|6xa{;tHgjrL{%0@| zjmy90PUtnHPOSWh&!c_rZh^BnmxpEc-|`%5=xXO5{4j#`utoGX%sxB&Fjq8p_VW0>-N{k^ zlUE#UK#<>LodmGOee2(&#`-Mtgr$ZCu8K#@?FHSJU4(w@NUcOJxW3S3@j2AT%ZB?5 z?mQP|J22A?^Yq)T%2h*9P$UJMV22J{Gdmlut0?B)5mV#7s_e2viiBcp|L=t!BFUq{ z6`jF^$g--zQ;+lb>XTzqf=6tNn(5mYq1q#OrgF=ESBB;fjdHeIQhh|oD+*8@iQV6% zo$yFtzF0D6&a(p{wPX_zB5O0&f1)cCQ2yBJm;Fceqaju#WM2oLubstcc3mOkC7!nr z%aO=}dusZwi#Kn>rfxx)MD0(~sP*sMAgd+G36R(nJ&`s~pwqlEGXdMAl2}uLX_Hv* z_Q=`G$Zq9wUb7U+B8&eoX{tqM5Lfb7UzuVp9SrYuxTO(%0t!f9Xs!MG;g{gp^M$`SZeHl$W=)!cA^-#=DYFi9 z$h&MKuU|s7lJl;0E27-Pr!eTJBZ@hov<#v$!d})g%d{OOeILEg6>9V13a@FMF>c+| z4SfFzqUPe+-XBN!)KnQMv9Vb6L0g6Rnzf>3;}xImyVblnAIXjh`BvqE=E8L(fXVd_ zU|G*I^P81$#^-Q_v?~}>=`A2DBA-jtAN}yRCD)m;!3rpVWXBAv6RP41h#S>^$|9NoyshF)7Oil--duS4-anu59eDMoPS}GN6=xZ~ z{}QDRSM!7Qnedn#K%aY4zym|`G{_z3`gZfK zuQoLdF`T9CG5V=l;C?I^#>?auMtMS#;l$Z4n{Da`x``9dE>1uOI@#n7mGatnFH1L_ z(k|9p?`Rt^{AT6y7zk-VQqoi&7d28@ z&yeu%{$^>G7%b_tCJoTK5?>t?z?|n(NB1`JwjR0 zw){nbgP}beGYZvpDmV7$ID#+jWIouOQF*i}hv;T7>RoGk5I>t+x~&o&A(-HKajxBP zKs40RJC!eRuI4K&6+Ger%z^gEt-lwg2>!Zr$@jtoS-)K2f&JfaLtzZm8n%~TIo+yY zsmM$djY0F1PTd#aKF6JlPd-V)IwuuGCP}Hl zNsHnSyUXxmT)O98!+Gsq&tj(;26*ujBPCAjeK_DsiY)IXCLSR5jYHGIVG*Gv2Ng9G zmUF(Z(H7|FE&nwqm2~>Edt;DDLx^MXF~~}08W`#^A2~>)^e29PlAT~6Z)y!S1C|QU zUg@VQsQ5KBrpJ3qcj^c^DO#ETj+X{AD|?6F2RAvZ2)l3TiO3|3{uv}u2&TyexqA_A z`o8J~t{eg;B~UlRojtTLm$EGHMfFcaoUO^Xc^`wn;|uwG_b==t7{@srJij{y(=28u zMEKf&?Et0c)X*m;B-?(#(d)^1uH4;P_K^oC9qG^3UTE2;9t)cx{dtc$Qeb-6D!r#L zCg8bnf!jm(iNk+@Boxs$$C$CVVN)#fS+Wc}AypfD+Ymo?|WbQKo`t5&j9Mrdqtpww)W|S zlQNijeipJPdQ_V*muzDN56e*qjF7E%y>7t0bnmczhUpeXPb(1cUh=5{THks9504B7 z_Le*0GeZE@dRyp?IK9lTmaA@z^%)xxr#lfyT!t%_V|tT6#e^HaFRoHY%AWzg zmX&m5Hlre*f8gn*6e7(5wG-6D|6&_XDC9qDYzuaU7MW9wNVW*^w3W z)xsoEtXoLXFOEU~ZAni?u+{*R>6xMb5+_LCYY!Db>GC4k^MLhg*83WDbQ~~oLX_17 ztdYOQU1tz1`_@HggjgEInwbo@5__RVag9ShG~X>FN?gX=v=wp@C!E7P+pKDA<8{L2K~>1dQ)>h*NwDu&BZtV0GR{B)zMv^P7U$-5PDO7 zYo(gG8$m~=%nImn1~=3o4qmrL#%-1}(VemP=gqq2FVu`_sdW>Y0g7RXCD-DmXc#2B zaDSC%^SK$l;mCBt-rg=1|0B_+&1`DGR2TC2@D-@hrQ^ks^)$+U{M=%;H37|#$D>@= zX&k*hG29$lVIUvnre>acphS9O>}%eD(Y!Sf4doZzTVy+>qS2Lm@NzOJDcJMLciQj1 zK@p`I&xqY$ae+fAi2ref$$74wP{9@XVfPea9f++X30)pF^g5Ty4?Jah@k-yG>3O`S zs4MepkCW%IFTjms*__W;y#1o3T8utb6Ya-^s9wL?b6hXK5+$hmjf)4uUA1tc+J$dh zT_;~Y!F(p6o4c8#qp>eUvYURVa)*5a4s-|0jH?K2ra`oqP?nsz8n|FcFGv49OOPp8 zx2T>XFms3itI6Em3&`Ej>%PD+t?av^+ugW-Zh7H?NNr(l9|f|HVxwi#x6V(L3Bck`|<>85o0s^I+ zn)u!;@pS{FK1@moZZ0tNH60EzD25(%#jg~Wp-=9l4zjFyEVO?7C67FR2|q*|dNt(k zp&P#C+Q)HQ4b1BT!R5X|jpC`1M>BjEBRrWGg5Y%2l>K#XU}gykjuO=oqN7W%!YC?QCB?jVi0+#Y=}BC&Gn957r2Lp0yFez>_mb$7f6w*g zlmRG2UpefAsD`=K*o$XBBL9yVky6JP=JdefYBbWImvVKcl0dc!+P9Ma^Bp0WE%LZ! zXwCwn=JONJZ0hwS)@)P8(M<))ImS+N(%#(D*ph5xO!;&&1flHwBt)&K)dFtm8;U=hCoS4fl8ruS{X zgSfG%Qbo{R*^#0zAWm%Oe$L*^0MWBgM=(WR4u$M&5nZFe`h zL`g-@M#(9<6A-$=_&W3c8%_pB%Ew4UOm2_w=(G)DfJqq-1IaR$x-wraQgMfBM5iE zy;>?gHhb)Gv;{cbYkR_^6x8L7< zmku{3QD^J-Jw>N^nq{%g44q9eIT1H*Hpu=OomfAY)>l?X;Cx7;6hd4iV*`6jx$MPx z3F&=WV?!gD+7STFrfrVdy+ZcNw7_b;Z=yiBX|K8#x%I7lsb&k;VbLkjq&=1*xiZWn zwk?DO+M=`sJb&a8clz%5Fu%%b3y3~0nxI8%{R*@xJ9#c4gB8Eg^ktQW+OFyjt7*br zRPOH<-d&!!-#>0HlzB~Ex_DQ}I{@WYG(;oLcOT)TXacW_d!be$@!#%IMk}iITnj8G z03{M-u1@0nI-0$@yAy&_BsK`uN_+W;_u>Z&1HEc)zgXG%|6DhieZ4`CQjKgmBN%de z^vD=&Me_q{o@T?;Y5O?8<{<2B*bH?T2RWBj>BVc-P`I>gk{Nv^0*uu!D{If;KyNBv z5x-~i0Oqq{SoMwcUQD0bPpY`45^|P3hGEWHs3q(iDeC$7dA}>}w=WIrRjZvbHS-8% z|5Vsj&z1w*w1dl23;T4MfuuwNgwGa`9vBO?yzRzdfG{juVCiLJ@Tl8I zZN^HW(k^W&?3EmnSbH&6+w?q1l8v`EqKg@^Gx>JBVSnj!Mta^F)3C~;5YpeYYSKlg zMU){js2&8?JB*c$sgWlWCoIvz=pVgh?1?Qd%_~YA?O}8*yN5+kKwN<5?Tb`Bqqh^R z9u%&_T9FjU&|Ag6@)Wz>-Qzaf-N13?RH28BX-{|tllF};!(R4`QAl1_e-%Y%CMlhy zG!sp(`}ymmN+#K^_U(4@L`Lm{dr;z$e-%28H#PflylGaBG35n%29?mk{Be2kp){>n z%&zl8j08u;P=)D_b>YQKp{2=z++F>gyhK*QPwjJ&1iW`L)}h_1eX&Q{$KEIGN&$X# z;acG$5yRSoRm0E%R8DcxW0~VNQbF)dUwxYvF`+o#kVBzc*1)4SP^#Vg>FdW1j{NBL zj{e(`etV$xzVo*7}52OZpp1$1kIzxbT8 zheDuUP@(t!iJmvk4VT{_Ab#hSqgRQc7kkTR?6?U{?YOa?@{WZ-wq zcu>z04y{{=!guQ1+1f^q<#)fR)lyWWgB5W^6d%9i57+`*uBdLhd1@4)q!PP852oLi zPx(0J(O0`O-x!Y53l(Y7aZTg|(rjcWdP}C1$3kTYoZeZLVa{Qh_>$G0*IAq@Zrs>O3IPOL)0_dj7NM4i8UB}|tm?}LV z#bN5C+qnbw@J#Q3_h>6R8tHinjiN%1{KeNGxlFY$V{k>{cQYA1S)c*9*Hjolt&vFr zBR~?6x17s8eKWHFDr16U*R%*>v_9yC5SnwU?D_?)-|$OWmsNf+eQ10+tUeiKq7IY6 zJo<+~^!NDlaYcyQ@40rCE8uG`_0G!nFz+Ksp8-{Gqe1@Sw^gu7u9YB$8OQX6-`*(V z8_U-T^z6iY*99`*i}Usc#1a$rS~+xp13$$z3hTD4HfHeyc(d#uKS(=W z@$>TaQ44xL9F9G+IB8nm$LO^(-NibG>%-J}>;aiG2a%Sb1=xf%tq`7H`^mlas@ftO zp4#p?l-8q^M;QT|Ik0qvb)2hQim`JB4kqRmC)ynaCGz@72&>L&`u#ocZHo`Q+9dU$ z{FPES?Qj=lZDp%d%|{nFTYM1k55p!r_t1guUKK6A5(i z2vOf1j#tYa_!YEU@=n1;9U6SHaK`_!L(gZrCs6h&=?gliiHMJSwR{#?5~>ai>0XPL z$f>8%X7CQlE~Ciq^Z#{T;X9E$nE^0Qy$Ndr)fgB!RG(fRxN*^YH$G(e$x!P24$IFZJzDAYIQ-bqbSjtRWQ+Y!^tOA+n84CG zdYd**8VPS#nY2pADNjaqcvyFHAuLnw=vj+2BB8llgy$N}@^acm6jX*0*4;nhBJ;-? z)`Q!fH_gFwD4Z(bJ7i9Z%9wtF~ioxxu$a6lJ`ZO0yg+cIuudh|EhokK_e|W)h;a6S1OS&PT%&1z(JM%;85wT|Om^w^-VuLxI(VVD%ZEechljdNlvmtu$C&71}uA1h1gZXoq4KQY& zLVA&NBxQ(qt>@kNsQ@?6hlJzxG-KBDKXCzh&>Q zg7{?=Y43r%Ilb>6sW_R0&x70*78I>lw?O#$hQIRWq}cQfKlK1yi1*y*B>?`$YX7UD zX;)CHPx`-jT7uT}ChR*?SCgF>XI_A1!~Rby#X29fJ!!X>QL0Uww|}?hw`+0}fl7Kq z;H&O)%Y6ZO4C4{XUn}6&-x`EbLh5GvjxqR)E26sAZ|16$RZ2w`x|zvDRp|yKK6Zn` zYAd`?IZ_lq-i=>-KMu13mTp1hpDFmS9YQaahjWs)U4clpb@GVZ&ZQ{uo`qQ>N~xQ-$6g+R@h7qP!yc)>$!N%vC``&JXE4Gszt@e-51Wtf6cDQL7#K z)O~B^4@}v0TR{*iUgp7XZ`p#_dZ%k;mL5!6U#YQ3A@DAZI?i`tfQmO$*c;IS&++5l z?J!g6S{BlL}T8Qe(0B6;=4u(zy8X-HrH>BFv zZ*uJ&7CFR8rW`L`JqZtjd_=EN(s|+-%8)`AcXcmgmGvb!F6!#+*>}fFc_Vm4r_jnQ zRNs@;Vcm8SSIA&B59e-+qvENDmo!{Vs7Zo1#j8=G)$-&Uct?fsYm0~it5Xkv-3nv! z!A61xL^a+TqZns2MkK!y7f|v?@`aN}nazFsT5Vj6EC!gcwQMx>day^Bm&hr3EvCJgrWZwa%fkfg z>3r{n0lx>c3Y|qTB$kX|6Bc**a=N{&%C3C?w|1U!M*8%AoTkxTrGFH^{*L&m z81E7G8>M0JSo50u$PC+CW*y1V1aB1L9^G)Ygb(h>x(B-|P$0pDD^7z9;Fmym^t=udR=Cnd9-%!gP&JqmL=SxJ@_G_8gMW_MXBTJxXnics88ZDYbh3n4Q?C zAX5CjmB{O`1McKo!~>M1p{Bd_`VuF@H>u$@=6SW85GEx3T`MrG6t3LbKXr?FTcFBc zOOhDM0#^yh%9CXJTGCTI>#nzzYBSgwDt<-$*&8dZ5(9vmaAZ}H3Z?K4Ef}#5q{nU# z{!sMSBpQWkTFmL2tt{3Dk5UpKfdjT>bJe;$8CpI$8TN+(sFvcuZvLxy!TAdG1J=Kn zeV%arREzVQCb{wZjFLdpI3H?S-4s%pe;Y+4in=zS=o>+Ce!-_8Fn?a^q*=PCjm6vc z9X;IAu9z_lnPwf39aEF+!V~AkS*pKk1PFqg^iFudgjgF z%@uwF#e2|1xg9F_!p)Lic810tzS|P8O2p(Gaw>Yl{hoX4@5fMFspEDEAQ$lHP{Hp; zb?m9Vak-#pa7OIixU-WRridBrU9v3Ot;E(ch(6pMq%MEzW~?DK*Y{}~FAA$2I~Z+s zQ2ypvPbuhFi(M<;iNgKP!_dKaV1Nrg4fcCMG3IvU~mP_?| zc^>9^0{)YVf^8#a1S*cr2;6HI;abaTP40g}q8>-xW3YDJC zz1(bC#|Ib!PCncH*MamnFUILex#_a0xb-dw)UQ2;RomovOmx}VjM^o-Te{-mf6gsKJ7uuHt$h&{zt2j}TTqV|EM%F4c- zsz!x;__F2{=6N1!9pTg&4mnpCz2iqW%#)w?ca?)#cL2t3@<#Tg!BPKMrxkp2#)~F* zFL>=Ea~C_{{^S;V3!Smr{Orp~>-P}{SwLCfH21%azo#E+&~Jzc3Jd8*EByQOa)F?o z(?^5R?U0+FO+Ly<(k7hd9}|Qr+y4+G?#KjtfVc zvnNA_9nqw#%n~6$3ua3KM_sUxQjNSZ5RA5|aul+s@>-$)Tyl47_x`uboY(b}XjG`^ znEW(q%Tkh8)DOS8o2xW@D_;+6C(A778~lf&;1b%>gq3?N=V(GQr|ZCj;LU@;&L_s* zv3A^%_`)YhALxFo)H17kkVn*3k5&1TW*CPt9>nJt@fm|@UdMTk^M=hrMZ~YN>IlW6 zx=ic7q&}oQFyMO9d~8YwQLg7Su!|!Y|b6ORV}$@g~PVE&3LtxI8-q+Ti@9tW+ieuBPL9Z6J}VC<3?|@D@y-B z-5p4!$|w>nGJ}DbL^oMiULIFNCBg^0E?%%!n`cgDg}c~^-_p2d|A@Xra#tf#O+;K; zlm%8-59Pj*D*DnGgQM>W3*OaV&$wp3Tjjh*xiY%lpKz5#5DE9e%?I|n|7rqO!3WKf z7rFj~oPYkBGs;qE6)m5K0{@AKOliuhrJSKaaV$=*d|9TSPt542D6j`IMDPpB^KK%y zS;VnGg(g(HZPCJ+xcQFx)XTmj*6(;E)*|c5{;-;_vz{CxmDA~~PaLH$2y7W&aC2H) zVE(wGzRLpv?I?2q^B4L}<0~Jiu_X2iSJ;037T81ayTfvs?3Vc=D1}6Lh(qqNj(MHF zfE)KmCZ>;T!bZPqLiz`_z$C+F7$tPrrjw2U2TQ8X(;(T1M@zvUXM%z!Uinc7?~D)- z&m5~^i7HPd-&_KvQ`~x5LM1DIQR8+A=|bq|B|Hl@dExpHA7#Ykg+QKIT5FRT$07){84+`65=!y~6(O%(a1W9E#c+vHjvQLNIR=><<20ErhTn0-jfY z2rfQf1ki2Oiygi{X5CUnkVwt!ui!m843OzMv>9dlM1R_S4ewBlQq`xEK3FpGBXsR~ z0rXnks+93(?@hO{eD)y`9VE; z$RU6?{x7x?q=5cT1Nr=#8T41DM(F2&$?*w3MUP$JiSmzEWkLe6T!&u+Us5=-vtOFp zl-#-6_=`6R{F;mUge})LRt{scHJDvd2OHj|+!)^}G^}LsrP<<^Jey7&H#dVC+_eZd zmkCmI$_CgHMJlT##gBY*Mb>#0hoHi-MpNm^e#8FTM5X8aXCRk`dYs_Q0n1p$GoqIL zI?$ScR;ARTu$sbsst#C80b%1taYD* zZItl)9*>X`K*U_lpBKHA*QEBdf^;Mp3JK=nYp3#1J4AePtV%Ujwy{B0Vj`bkb0*ld zJV4=x(WQD|MVpe_77J82N1?(i=|K z7|V||ZJli^P^USOG9!@V*-3hkFV5J7wCvgYy;pW74 zE*kGj`DwkjU+o!>>50kn4y^QU0^HheXnd}yP&S=X#T)=o%xzC;%+L${>cH~2MV?gB zkBg9B6tz#c@E+oXX*BCL=jh0ohxMdyR&o8^G8}LU87$#*bAl;u^*{*P$10Z?ocx==9aJYnv|*E5O3)q+^|uEm@Pq@Eyl{ zj7{kWiUtB*&yB?Kvf6wP9D}-=Z9<7XW&kujEjfOp2?cpxj%9%R`&ID$&l3QDY94TI zW~@^YV{`=&*xP&18<)vIwSoxCqC=PSA04{@9&&^@|&j}(*?$aX95>4=`_VA5ql zbi^Rv9Q8fYOuBW)RLx)*V%Mdy=!mW1iPJkbv70SLDE?8|pd(`7<+}elpDnWlu9ju+ zx@RY_5t*QrqMW~#7pnKGWidu-aRysm$7#9$AYhR#CEUk%-~4s+!|QqXjE~POJKlgp zJ=NKBBS}E{j%UM8rxK2N6?td9_+R_dZ7($cymvB6%j?VM%QaxHtmpB#a{)LTr56Cr zCex2N^D|EKTrfF^xOT{Hi7V;BLu{*q(Q9HkjJJM6rNi<|*f7@fX1Le?H@UW@(Yd@z{vC zpTVw6^6h4v^nbO&I(k4a0WH#YwpMB$GvF*xBBkV_k%KsDnmxw;ETJuPQcReBES(v` zqF?3fy7F_^{fsbg!kifmdM>}WfUER!HGxnd9?OyRWh*$C)g6Qlp zO>g^vQu9dZ@>~SVYQ@>!>qR=*Ukb_Ew3+nURucspDVjFeo9?bSO70F+5 zSYdiqCoaCx^>H#qmr*4oH9HNqi6ZnPW|-ss8Lx9L|19R61;Lrii92i(5O+(whlTCy zTn%Yw!zoEFTvtWh#yzDXRQ$9|yC7zxQ`y@Wo~$=5EYeK1I4tPAudY(YV=D&C-*eh5 z#zlj6Y9?pfC}yyy6kTi4yoLjdgR1{tSCzpCNi^#}9(@LTzi0L6>9KzdDSlk8e&CM* zY*nm;^8IAEDiUkz7u%_ZL3SoZrQ`OKcgCUvkLa#ciQ7`TF*%uZ#R}6G?Q6<+0LrdgLbIx!e&>vMG(bADxvb^JqKW!zF zG+1L1Xrl_(}X1zx>l4qgH}J_zt4e=ljMuQ zOCrdbIn>{J5)s;C!1=tfY~oDkxb^^u3*KEj-3}$>153rko;fOM*srVcaRv0TX7S6qbNV8OsNhZT<9KLFUMuAvm({OxDRQs{ z4uorxh`fCA86Yz8Pv=jh2Y3wQalq;lQc%SM<7Iw@varD14S-vAtd}P33Rltdiw(VIa7AG z^11by*Y(WqrcB7^-+P@UxG%C>Aq#;upM=dRkHeXIyZjf@lM7ga`JY7M;rz66rrYXn zyZXnl%yzK{H3$9D4{B)c<4WbwyWq`;$ILWdY5EDg7cKC z5;&HKTZ_0(N}MB&RKsR94YlN}o94t6_1TCagn@*$9&9sb`de#Fw^utlP0(IBzMaWL z$e)nA^+M(;pn@Xh0-R=A+rehEmKNwNKG!5q0Y2slwlkzON%FX@DOCOLgx0SqN@f{6 z9q`6Pl$A@whKMr8^#!+}kDc-lUWqybCQvcdsfXvS7sDw1yU_y|llyyW7BmF>fc{!* zxHoN=rrfCXZ-WE@$W;c+aqlxU2lAb{~|JD~OiFw7}2N+!SV2R%ID8P1e-TyLT zd;utsvIJsN!X+tglKUs`lQY0hRXzdY)?S&)4t1OQpkOO)_hsvJ`@F{`eN}qEfNT3; z62_i|ywkRlwl*&^32qm!|G%vstPtH}12fKAcJ$Gd5n=xeqcRi}QXS5e?>YxD@otq8 zm3QIOhnyyCWQXrsQ%T#c>M7F~*&RT^Q@vN1rpn+(Jq8ix2l<}%MO%PS6ldCHr9I^2 zpnEQs7H@iW&TgmurUa;7HssuZIR2eaDFYT|8O?E&>*7}WKK<3fS8tx;l`Kc;khGM3 zs^LCcgekY}Tc%XD6k_Q7C4d+0F2b5Rk`cGT$iAn6H-fpuCZ|p!InIk8 ziuqY)37PxgnY*@rI0o5sGxDrmIBdRHR($KSa6qo!MbvW=4Bs(XTTaiXnY>TN54I9{ zMUGTNc+FbYn9wdM1+-9KS-eu+L>g4QT*>gxcS$OFtMPz;HCB-k$G$1)6-a)xR0(Sm z0qqQ?a9!TMmDt7Tl|I4RmHm2X7%l|xqoUZ#+PdLfvDS(@Y6l~;Y?-V$vjsDR2ARjM zuREE(e}`1U){F02lt)!xir2s0gqfl66`1S{owFs(uk;l~=X7cao6(I>WxfU64b|T{ z61;ZhND30W*%3+#0%PmvS4!UVN3!yIQhL7v3vO2k;BbUrOSexg!c1@ z#e6z>y|ZG(o@o+j9Bx!y;B`9yDv)Z=WB@eFD;NcJ-WkmWvSg-*kWf{F z`SDi-h=}z^>mAB%K z@{lQGD-}_J&5Y}i$a@Rt--TGJDiWjETW_d$D+53$(row&`Hr4-r78}7&WJ+O>>Tp5 zeXy_+(}F;*8_D@R_IdiltRSu&oRPxm#dsG%U$m$HrH%bD=ua#X6Yn%$!6q%R zeq1L}SMsXaY~wH-^QYZS)mh*Q54LH#p-5Ux1bI^lkc3L-3eFzDw@%U`yJJ@qt#L~a z0TX@JZdk`B*^GD8zbm(~@vySHlY)@DIF%NYGy_@`T&4R11_w&)#3&$v)pjOT8hPP= zaA_E$kQj1^6in-OhsMk#6rS?IT`MVcT10glL{RJ_G3ml^YQWuGu1ABNGZ-SId$Ji0 z^pP4?9hwoNOSWxyQMQ{lRk5erRNtHK3n{9rO;$WjubA($7U3r~CCWS}!zl?3plY3F zGx>i+pt*z@)fpo>AO#ikoANJF<(TmAojn7mcOnbC`|=)OrNsuy1|rGde5l3?d;7I_ z$9c89>M>PWl9EfEj2K`Bof7nF6oi}Tv&1qc%#r-X(7dGt%N#mxD2hS}5|Qa$w9kab zkQ$w01FI5RI0)#L?v_MzgrCc)YV#xe*w|3J4}Vs&*6Y9In#z*Zswi=&8d1g}GcP$Nb z`$U@2`QwY(75v8c2RYmQw%cSSBUqK)U$;AdSdWT;!on7Nr+eL4)EhDPcZ%hGI&Eh- z9wQvcTl2TH6&;onukr0&YZivp2BXavhoq2qmw(?7z)J4;*exvS+B4D^rzFQD4N zR=|>8<3F<>iroT~uelg+PZH?vO(TeScNHB>`pVzUGrboM^R`ThqWGUu^gM{+OEE_U z^0XE_kbKAtajglO%`P3ALQJXSY?q+4n2`8Dw$J-#C`79PS@3pMH*`KYZ7{t#@51{@ zR7K2s4Y=x%GvI=JXSofToXqx=-T0h}3r{&EFImeVq|Ox)dX(f)BD8YB#C$)D*mE|T zxn>SEH;N3-UHwRRuab>tfY(buoJwCVOm;C5tuEij7 zZ?J_!46lw5RZa8TU0x%Bzq%JV?B#4wZEmOExNQO;s{StVd58|6y|B3`eN$AOpOW&_ zp3wZ!dajSopp^T7Zw8Y6?oXZYb4AJbc0pIzqztpZV;_#w~ z-K0u9h^@Pf1m&%KO?a_z0@~1} z>fnr_kIEgGaFy3Eg98$q*spB*Hn20T%B6m?-(wfp`fTeszE{79yZnGJQx$hN8}<*N zV&njgFOLB)ck6G{tjX@%SBxK+?mO6Il7e}p`k)B1aZ0O8W^BpF`XymyvVM;^J>=<} z7V%W`lCunvKh&f~u}M&1xG{_&g&uMwa~6L!fSNQ}j(y%qb_Kx0CI1y~ozBSENjy+MqJ zvxGRuG$Oz#^Yh^U!W3`I7e3`#VGa&b&`E7+qZn>Rnu5y)Rbj+?~y(QRsy(*Y% zq8;BTNYj7J*kM}1q)rAWN5lWR>8IBq5O#FCUQO%g3!=iV$cI5eyWD_^3XT2NIhAPa zrOSRSrv}{9V7E`=TSAw^VET!0_p}UIAM+f`%Ae50hca3p-q||%q|};Ru%W%brXie0 zg2XqDp>xhnO-$^^m9-7*UYVipM+xz>QZ*BG6PZ|LgkU5S;@eHWu`%nC0Wuem?`y3Q z?-A}H)gD5KyLiv}q3J)wcLJ#rcS4BX zQ`O+wBtPn$qA*Z}vkSBw_fs$K8Kj{+*>p@#9Y|kM1IL?$$=sbcZIL=Dw~J=1fNS3t zX!-}P&zbPo>c*@&7l^s{LSN|$h~HiOs2TR)`l^%U z;i`H(WLCYv=gP!$jLc?}x?7MlQjzMkDg6f82l?zOf^KfA}<-yLml}0J~N*4=! z;rNQgkAH zr<%7CmU>SU$g!H-w)cl{+2ae-i3cMb5WjT0%7Yr~zr}12PNzpO=~(6#Pfg5|{{2z$ zgTJguVl>nsklj)}2H*sSw%DFTjf4Xo93e7zxQm4bsc$jZw*(P7AaX@Ro;T*AM3FfxTNB;Y&u^{%WAn4aa zWNc&&~$cG62@Z*_+<= znJ~+PeLaE-dU(J+e8ckcJle_9$&uJ2qVf%AH-RU0bT?HIAa zu^_eeP(V69SZD?>Nx)FnU`3)JrpL~Uzqfr2VQP)3l-YV4bV`31^G?;^Sh;P-d$QWX z=;{#G3{G&_8}90W?3q&>C63)bW(Ng`81Tj1z1F68n}@7Q?RF=iMV%hJpDkx4&LHp! z2PMybFSldIVTNr)M~{caGl)e>#Y`McO}37)?f0FdBT1ObUOUVuT~(S zXEIS#@VJOZSJgf((vj2n+iO&v@sDZ^r#CXmsmPvCoaK|E*e2n z085ZPQL8N8InMfUUKB=044R$F0ik~>H(O5>>Q57M8D3?ig)ov&ghm}^{SG9B*aG`< z^*+boAbM}D^x!$i#$D)8?E=@$h|RF(1-5&icDe5~54Sq0h=sOBjc_aLAl+OQMapz2 zq#s)vJj$DWrj1jo&GK?IS^_KSb3?d9Hj|K>H#Y0G=et?GY13c&PHZEsaE z?@0r$cbxDXB6Fqf9=~Hm;K^l6Zt&@Bu&u*$tGzoZW&jhLqu^0fG}Q>>IjYpowMyxt zyPb7fDQPZ^Vl9(hf~BT2RJ(Cq&;k}HNPdam+yD7LOq~OFW>L4SW7|%r!;Wot$LiR& zZQDu5wr$(C`NrlO`{q06-gE94`yZ^aYpgYARXvukbQmft=LZ3>!vux#48Ux51LbXT zVlgsve;(35Y)(DV==V_;M&OcMie6Z$yL6k>;JL9mC8wDA&*#;hqepKG+ITDXhiPL2e&3i>EeA5}cm~6BhO7xJ2 zhBqH#;aTb-j$s`LyMStj00NOj&&>Fq>|&j!13VV+Xx4V(Qz<&Q;(v1)nI1o|p$dAg zLDP=QY6Nt-5X8^*GRBJpZ>ei&^}4^>;v4deTJ^l(gNB55{BMjifvQR1@`|$5hDsq6 z)Vqv*`VB{!yLk7jZ|F8+{m+yN$O955I$Yeb2026clWy|B^cn-^VgW&(S8R}93uc0Pm_+cTZ{-ZbxVK*tn(q5h;i|hVY+F)(m^M> zYMj8_d71T~6dL$LfCyaH-u-|d)oRym{2DK6vt%w zMqZGuH^FP##%N0y-T@s#I+p|@Fesm1NRoGNRi!bHGeUV-uUN@T=u>&zFZu4Sw-f|U zTIO4dDLW%mGSFYk4qS1;NqLnSFHEf+n$ktP>WC|D5ohybO6HgB&`g_`OuMnFhRMPQfCg3aG zPT-60ghf@ci?b+3JuXhIE?71%p z-5HwJ!`e;4w!MDTgA}Zr_3aVEK2+r$)4g*gWR{BPLU)(0W}VK$dydB&pF^hpJl?kb zO>}N#N|YqqJngZ=cz!Gwi6Q?G3BxS~1wVy};#Gq7N3Iyl;Ah-ksOD|Y=nlpD@-L>R zI2g|W>Y;=9s0NnWy~5N)MALu$NuRWVAMvj`YF~B@l46>ck11qZ7HJS#rx>^iZwqJM zbGU;gBXKh$Pb2_$)07#$ZPM9Te&XVpbnS6|+I zud!%GsoVa%ljvuXY!F?PE#&#m&%ZO;lXA8)+1;9a+?Nk|JQCP_{FZs7bLr2FBWCfP z=*|@r#AAp}G+HV~eWXcCkr$0l`1SNvXxrM!&f4Xa&nvA+zmk%D@+Q;{h7Yrca+@Mf zU)_OsU3{iK)0USS*w@B!re&1e>Pk1T3o|@LHa1V~AsbU)U5tqMR*FTBl|J(rE&T_d z@y^66EB2{2O^0_Wv^18PPCwae;o7lb%4F%+Und^R8yJ8|3Rw^wM9Cv66Je`lE2R@K zDQ=}dQv>J78PsmkK_l33i1-L{3fzvjw%ms-_$Ue&aKx-@DQ`Cw9l6z-o_^l)UX{ps zm^BS-ag0i0u`?~mUw>EqIJ^$p_H>2nmP?DZ=^>}RRGk4+5fu>KTpy=0`B%fx_%juu zucbb+Nn&JFh#vZKFw3CW7^8PikxWFSMBxz-*iZ*JH%DT&(>w3ddZ(d747jmMvTI*V zL+d>oqrT++KJvYbljGgBMwo+jxBfqxZ8wM_V)f~LWlx6_;9MQjzwJ}G_GLSFJ-Cza zrh|GT(0{-^jvLlQ(t0xH8s;pf9zikGesLlp8uLj*6c&rdc<0ZLq6LeCKj*CW1F{Y{ zo@2ZvFD50@?Ua@;=c1XE)In!4^D4WUttEVV&};z`8t3$~*mE(i%w`olv7=U(=8w*| z5r@n*6a-_oyJ4VJ{2;P!PP`I8KZu4Fgq^HCT?UYlo)?Ip_mq zY-gA=)AR#LvTOr35IoQ^VDR&7G`NONFEU8G!fU75T!j7YGNG5^;~a6a6xxUp#R*N*mpI&dgR@AlNu4TtQ9r@iGmAu zgPRG&LFe^C7deptvYq!O-4_vQ@*(#YGFIvyAqH%DheJA&8-YGdau2;#;V{$vt^F`c z4U8~)ben(P|Nrn7ls(sC2PymyG{1FE%&49=H4R5372GSirYcBS= z)wtSBZ@Z0{m*%2CTY#*n^V?9(A-mm4kQjeKt)BifbI5PRY;WvCyN)?6(IVmEMd}sh z=3m#;Atx+K&dm?Lq=W$QT(t{ScD=t~E({-%Qd^~C1!j8(yH&{@xBFk?`5*xu5RU4q zA+*fi`o0xiFkDRs;ElFHudLbVHy>EMf!z8WBq_`HO4Kk(7L8!y3f3BDVyL4*>cNQL zTlm($#VJ_GoxPY3lFMr!zC_<#%=ihZs(FKIA>vgpQNFWOHN23aAnmMsG5PiQZi7PK ztcZhH!nBxzcmXf$cfNq)9M6qdFPo{*DDae{FUAv<5{vwfXL(ds`$5^!>(pmyN9tFVH3escygS(FF08@o!y%r&cBe7!BXWG7W$DC|D zo0jkrMe1BQaV0P0KP}r{n_VdQ87a>16=b(?S=fY#P0> zx{>yR3)Hm%-+QPj;Z;Awj2U|V8h$%+x70(CPon2SS4~OxTz*b~z=MN(b!d*vVVIpa zZ%c@}p_tj27)1DOezm@#{KB%$xSM)6>dStAxx;pl8Q`WaF7oFvY{8MjgjqG$MP*rleeZA?*OacX_nb{hAbD5X6&Nm_I%CcF=hqIV z8$G{old1=}Hw}G1Juk@rs+=D>a+s<)CY8@N^OignxJQHMM(g4cwRjg2+2F>rGEkDq z9RIiWz(JBE6oLqIX@&Jomh+T#m3~GKOC@ATDkq~gn?`q#VPHzGwflCIKz;i_JRNe2 ztb8{j1z2+df()6lC$({X1S3sBLA?IjYt{;h-efMS)g=V2KdZaO2UDX!wxyLgtU4A+9on@ z+;o}5k`pF+?ro;NNEf?mp2DlJzsFc{pDrZU11V3EmyCsOsobsMRjMYh@!ABa$aqj= zwTzCCK(4B?xD7cWFsPq5hn=V+_cz;LWZtsfdCIk!=vud)nfm)rG}Hm{S`N6Fc>bNn z#fG9B3+mTACKo98s&2(&a?_s>4k!kz_CY1$ImD&+2R=}&Jhw;}emxl`RC@tQ_9TNr z%?WgNa;<11{A=Dq%1w{3Qbnrs2O`vX5YllH^re#t(lh)pJ*lOL5--1Ni5>|20Vz#y zPoX~drkxV=Ak|XLdahb?X~lEVJN}C(OhRA_o7Qw2QlxKHumdM=nN$&<_Adef2{8YF ze;{pt!*=X35?^|MmqQu5-&Ku#w*>gUQSxH}M5jgYgCc5lRO6U$b7kxlpN_835Z%a6 z$qa>mf^Fu(L)%ZcejKgrPUO}Xel;tr6ZILMA=g$F`C#4T2tZF>6F&O#xU7#uw&6$X z-3m%8`K$P#;y=hl1_@^gLm_E5)#(=DjlkK)!?W)Ia2{lDvLvK+445`<>(8hOQ*o~PGvy~<>|{`T8!{xvXL5Dq9Iq@}zf zI*n!W8$Z~mmU+)wERkrnTOhp7a)NjZF7Gpk8cxQ7B=Cl{i5)w`1jUzijHrJuQ%V)J&N1 zu}N{YwI-62DpHK&uym(=6JQQNzWVeAF4GIV85&YDx_u>)!o0r${xQ7C)WFqwiDX-) zuzvXN*<=*!A6kr1+W42smTFw< z<@eP?}0XDnIux=ii>OpX?~2sf%?&tGvE4I-CSZ}oHI2HQ(g@<#C-;ZnS% zS=pKVCwjLQ!+Uvd1y;Bfb`_D0$Z^X0g)&v0hXk{V=bQ>b;CLk(pH;~}KJ2uk>Q-w9 zp+B1{gflukvMz2j)1)8hH_fRML0;lJ75ZXQfe@P8Qm?es<_z#(17A`(0&~r0s*DU+ zAIg_ofjnDZCr#f&&W)CMdzD!Wsjf0sVksXAtQfo`9s#<2xyVXO)}8C-UYHScpEz6dNy3~ZSYNGuo<1;-4C#JTo!B^ZW=NM{EaZ5);E!@A=X8wX zdnp3csX!Inj|6L-9?<_={q9ex)6^unCCDeIv)xr|f$Z+NwsfbQ4fB|m#NKvQr2pVL zB)@o;=~fMl0U+atJf-z)e1XO$dCF!*nKbMx10ruuH1Xf})09VA-0G@arcj7Y;Y|Cs z+85OIuCp@Lr0Z{7uclk)DG-53xX9;$Wy(t582e7~{2~J;qvHM6 zo1~MRE;9P$?_a$62>I>)sJe&R_Vf)+Evw{Rr{oiKpA}OPY#GZNIiNLDhqf#YqyTl6 z??zyZI+J-GATANwom?6FjR~cs22E6gaJfmuc={ge<5GO_=KypyvM}GYv3I&7RZY6U zY#(38sy5lzy2&_V2w9pL9q-`PPmVf=`NRX+!mL2>H#*pDHk4ISK3vtTnH1whaz~Pb z;EcCcdE{}Sn2NYG>%yZ-r1lt1@&}{<^|8WfUjz5p+(E^OMKjIFzV}aFxvSW68UD{` z-7f`~ug|jUw>XG|AKWop3a9PUUMqr+3%4#MfvLCnowi1vgC>uDNV1|+>9k`bJWQ@F z`W?z{(U@E8-Hsj#s%)#5EVf;A0yhJ`$~vsxLn$8?FU{Y$)WbK$u(C4n86X2UG*$DZ z$vubQ_I#keX7X7DJ+(fP{m-4HmzW;pSijG!4CN`T`u)_Mle@beTL7vJg^a54j*KBx zL)1UYroAn4?lx7c{Tziw;>H&J1Lq#+o5p7@qD>IdG9w ztS&6b{FK|;C!Qtn9V@HZ9mjCK-(q-OTX8Q{uxPN+y&Q63 zI+BK;uR~^wDu?(BHn2?OsTB+{@xm5NLn&$jedPJl(MSs-_#!!c#x{5p~7D> zo*{w5wq9ll-;7z{{i*g%3xv$vIjGHITCXhX*A%fQOH3et zM5hBs_?O(5W6eZO7d)6FA?QH19qK>I9Pg97@j%t9Gw+duF`n#5CrCRgFF|%@VyI+R zin5xur2U8}>IwQLg>3B(qod%T>g255qc!i`%q(H>oP}dj6;jDn;y*0dQ_eZs%ZE*} zqmJuCj={*fp5J7XT#^83vWie`e*2D{9f`IgUr9B9YX+x}pEXGUDMpK$O}w1b;QB&j zo5X`5;7jSeFq8>^V*>^SZ>k`+)NcOQgA;T-9k<-Hy0_wk^n$6#P}~mXJDf9RR^7s* z1l!X%-ynP1ZO4za^x8fg96sOYv)tQ-5}p@I>uxH+MO@!{%Vsmx;`h^mM=u;w^|B4& zC!&_)=fPI(X49tMEj$!&vjwULr#v0LPuQ16o}1jhR%zaBv_~|&5L#r|gG*czbX6~t zCqW#s*FQT@ZTd=A5jRJg_Bo9o6!n}oA{0`s2%UZQQY9n;fZF3Eb}$!}^Z$;gmF9CI z+QB)Zvu0`mo;+otyFA!> zZP&L=lO6Cp&dh+oYv-If+PEBb2tVRYEQ)07g`qsO0x&hB0IlA{(uhQ6%G` zSI)nV2JyAL%1*HKitfWpN}@zaZ|jNZ@5~Wg0TkeP{fUeMa7FJ6iG^S=zDE z*0{$wRMaS<8B@e;Hc=HBH=4+AqYxw%pl;|@R)S~t-i@fBm!Eg-WOh5G2@;H#&GMmB z_0>$mdny0+j2v`)jz(U8er)vId?gD!6$sGfvR#12oDq6=yn&Sv$YSg0-hA4-`Ut4h z@oWy?&KHv)3w~J{j_9lpZiuMn(sB?RW$eN%Yu&pbm0o8PCXktZ1vwK7SrO>M@^i)b ze-_DokbdWAvjDH2htbGA?7540t&gFt|E|!HI@&0wl=j{#ZV~Al$T=-^X)dtH*@a5SDU74-qriyNR zFLp_+|GVhGmkn{^2B=ofv*vU z2m8#rAhuXnEe?5QaLNhfzFB#$=Gai_H5d8BedNv?n;A$1;ZO#46w)vM6UCAG;DvB{hZAWj@NXnhhz(U`F?)l6BF?i#Ax@(ZLh)q$hGW4 zoTA=cRO@MlGE=6BwtG8h=y<=-^|(WT3Pg@|6+?NR@YxT{Q!OL9V$mWV$?v(k-5YTg zx_GitRD?g5hfi$~N_Q8IDBCv15OW4eDdeF;rTtDn`cJ+Yd$|;DVJ3CB0AH!TO!;$hE+n6MyB&X9e#3WP8LEi7{mednH%N6pxf zCXftYLir*n=$-6*M;ujZ9Xn4rZ*JIo1u*|1rEqFH5(M3Tsd;f=A@O_FW`WLko%~5h zr+U_mo4GHmnpBmR-~o5d8p0>`IrMsZzOC9oB_*t> zT4*}axe=8de0J?v!>gj(34oe>(SmJTqRY#i zWsk3gh^0-91?kD(XC^b!dlvi+Q#}fhmgQ-&L;!zVF?w$EtB1yhTx%OQHA{DWiIS*u zVs|I^s_a~toakZBo8#>`YSnmnE#~hVQ2j+CDsv`Cmtpg-UOHyqsopsI`M^Ia@fA0A&Plde z6{L8$D^XguoDD?^a~PAn#$eCUm4QpuJV3Q9Y)oNPJy{iAZQh?9uf#3~LYTi)GQZ-8 zW)9B^ri;8YW0NuhzL9x^5NZ!E@*g;Rks$lQ&vg-m; z`fN(>m^jeBTk^zs#dfG$xWrwi&o=Pd+qK;IZ%PjvrdNykodi^$JuM^Di>aX9%mSiX zOw9Q=@_Y~4tOF3%>H*2T38c9%#x!F}c6jnpM|pLRP-g-N`+iQ0 zCGAYvBjS(MuQh~jKY2MPy>6yFiwFpfz?~{fx7#NACS-n7l@Q*ujd}gxa>T+mp12!92o%ky1ruG5ocm8)$(zwa@m!() z;MLJ*rV2E{W8E3jgHZuom1XE!{N&>|+nsr*>iLbl(|W0Rq}9e`8&s|M>pcUIfYmZr z25Q5Ii}UK~^vKzT@}9TNfW{*vT;04F3r1x4!ZG?q)IL~wHjD0(RE|!ThP`PIaj&cZ zuo}#ytfc2T)ZF~!U{|J@iwL8OZ$$P^acIVL|C?`|a9qkz)H|MF1#K9SDM)NS6LvRg zfcJF|MSkc@J1Mk%Unj2%?}4!a)9P%&c_~i6hr&|-^;7B#03dc9v7h<&qa+;#z; zw!d$~RL7F4!MFy`Y}QK=vddIN`{o8=`;VKj?a@+8SQL+y8d)wd@ji+rZ8MP*R+1+!nD%Woa9eP{6pzI%usw&)Mcy0yeM2ln3AV+CNLiU9ZnjL1&vKTCU^>$+lx7+We>Ss4)(Q< z!DZ}os=s-*N?qy~YDythT z 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≥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