-
-A monorepository containing all the contracts and packages related to Andromeda Protocol. Full documentation for all the contracts can be found [here](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/introduction).
-
-## ADO Categories
-
-The contracts are classified based on their functionality. Currently we have 8 different contract categories.
-
-| Category| Description |
-| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [app](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/app)| Contracts used for building Andromeda apps. |
-| [data-storage](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/data-storage/andromeda-primitive) | Contracts used to store any type of data (uint, string, bool ect...).|
-| [ecosystem](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/ecosystem) | Contracts that are allow interaction with different ecosystem protocols.|
-| [finance](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance) | Contracts used by fungible tokens to perform defi operations.|
-| [fungible tokens](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens) | Contracts that integrate with fungible tokens (CW-20 tokens).|
-| [non-fungible-tokens](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens) | Contacts that integrate with non-funible toknes (NFTs). Includes a standard CW721 contract with some custom features.|
-| [modules](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/modules) |Andromeda modules that are attached to other ADOs to extend functionality.|
- | [defunct](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/defunct) |Andromeda contracts that are no longer supported.|
-
-
-
-## ADOs
-
-| Contract | Category | Description | Documentation |
-| ---------------------------|------------------------|-------------------------------------------|----------------------------------------------------- |
-| [andromeda-app-contract](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/app/andromeda-app-contract)| app | Contract used to create Andromeda Apps. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/andromeda-apps/app)|
-| [andromeda-factory](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/app/andromeda-factory)| app |Contract used to save the code Ids of all Andromeda ADOs. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/andromeda-apps/andromeda-factory)|
-| [andromeda-primitive](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/data-storage/andromeda-primitive) | data-storage | Contract that stores any type of data that can be referenced by other ADOs. |[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/data-storage/primitive) |
-| [andromeda-vault](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/ecosystem/andromeda-vault)|ecosystem| Contract that can receive and store funds. Acts as a central bank for projects. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/ecosystem/vault) |
-| [andromeda-rate-limiting-withdrawals](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-rate-limiting-withdrawals) | finance | Contract that puts restrictions on the withdrawal of funds by users. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/rate-limiting-withdrawals)|
-| [andromeda-splitter](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-splitter) | finance| Contract used to split any sent funds amongst defined addresses. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/andromeda-splitter)|
-| [andromeda-timelock](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-timelock) | finance| Contract used to store funds until a condition has been satisfied before being released, similar to Escrow.|[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/timelock)|
-| [andromeda-vesting](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-vesting) |finance | Contract used to custom vest tokens for a single recipient.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/vesting-ado)|
-| [andromeda-weighted-distribution-splitter](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-weighted-distribution-splitter) | finance | Contract used to split any sent funds amongst defined addresses. Similar to the splitter but uses weights instead of percentages.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/weighted-splitter)|
-| [andromeda-cw20](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/app/andromeda-factory) | fungible tokens |Contract to create standard cw-20 tokens. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/cw20-token)
-| [andromeda-cw20-staking](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-cw20-staking) | fungible tokens | Contract that allows the staking of cw-20 tokens for rewards. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/cw20-staking)|
-| [andromeda-lockdrop](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-lockdrop) | fungible tokens| Contract that allows users to deposit a netive token in exchange for the project's cw-20 token |[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/lockdrop)|
-| [andromeda-merkle-airdrop](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-merkle-airdrop) | fungible tokens| Contract used to perform a merkle airdrop on cw20-tokens| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/merkle-airdrop)|
-| [andromeda-auction](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-auction)|non-fungible-tokens| Contract that can receive an NFT and run an auction on it.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/auction)|
-| [andromeda-crowdfund](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-crowdfund)|non-fungible-tokens| Contracts used to perform a crowdfund by selling NFTs.|[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/crowdfund)|
-| [andromeda-cw721](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-cw721)| non-fungible-tokens| Contract used to create cw-721 standard NFTs. Has a custom message that allows selling the NFTs.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/andromeda-digital-object)|
-| [andromeda-cw721-staking](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-cw721-staking)|non-fungible-tokens| Contract that allows custom staking of NFTs.|[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/cw721-staking)|
-| [andromeda-gumball](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-gumball)|non-fungible-tokens| Contract that allows users to pay a price to get a random NFT.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/gumball)|
-| [andromeda-nft-timelock](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-nft-timelock)|non-fungible-tokens| Contract that locks an NFT for a certain period of time.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/nft-timelock)|
-| [andromeda-wrapped-cw721](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-wrapped-cw721)| non-fungible-tokens| Contract that wraps an NFT and mints an Andromeda NFT that can leverage our custom messages and modules instead. The token can be unwrapped.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/wrapped-cw721)|
-
-## Modules
-
-Modules are smart contracts that can be added to other ADOs on instantiation to extend their functionality. The communication between ADOs and our modules is achieved using our custom [Hooks](https://docs.andromedaprotocol.io/andromeda/andromeda-hooks/hooks). We currently have 4 modules:
-
-|Module| Description| Documentation|
-|-------------------------------|---------------------------|-----------------------------|
-| [address-list](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/modules/andromeda-address-list)| A module used to whitelist/blacklist a list of addresses to interact with the ADO.|[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/modules/address-list)|
-| [rates](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/modules/andromeda-rates)| A module used to add rates (taxes/royalties) on fund transfers| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/modules/rates)|
-| [cw721-bids](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-cw721-bids)|Module that can be attached to the cw721 ADO as another way to buy and sell NFTs.|[Gitbook](https://docs.andromedaprotocol.io/andromeda/andromeda-digital-objects/cw721-bids)|
-| [receipts](https://docs.andromedaprotocol.io/andromeda/smart-contracts/modules/receipt-contract)| A module that can be attached to ADOs that saves the events of messages.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/modules/receipt-contract)|
-
-## Packages
-
+
+
+
+ AndromedaOS is a revolutionary software layer that provides a massively
+ abstracted environment and user experience for the next generation of
+ blockchain innovators to create, develop and get paid.
+
+# Introduction to AndromedaOS
+
+### Mission
+
+**Andromeda** **Protocol** is a rapid development framework and a next-generation user interface that brings an Easier, Better, and Faster capability to Web 3.0, and the blockchain industry.
+
+
+#### What is a blockchain operating system?
+
+In short, a blockchain operating system provides an environment filled with ready to use tooling, common interfaces for applications and features familiar to modern computer users. As Andromeda is the first true operating system designed to run on distributed computing frameworks, the details are quite technical.
+
+AndromedaOS, or _aOS_ for short, is comprised of several interoperating systems that work together to bring clarity and ease of use to the user. It's important to understand the basic concepts and architecture of the system to develop.
+
+A quick description of each of the components that make up the aOS:
+
+* [Andromeda Digital Objects](https://docs.andromedaprotocol.io/andromeda/andromeda-digital-objects/introduction-to-ados) - the building blocks of the system
+* [Andromeda Apps](https://docs.andromedaprotocol.io/andromeda/andromeda-apps/introduction-to-apps) - advanced functionality built with ADOs
+* [aOS Kernel](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/kernel) - the system for enforcing and coordinating the different systems
+* [aOS File System](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/virtual-file-system) - common namespace for referencing ADOs, services, network, etc
+* [aOS Economics](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/economics-engine) - developer and creator incentives
+
+It's important to note that each of these systems exist 100% on-chain. All logic, interactions, objects, economics, etc. are deployed on-chain.
+
+### Powered by the Cosmos Ecosystem
+
+The power and performance of the Rust/CosmWasm combo is what allowed this breakthrough in interoperability and complexity.
+
+#### Infinite Reach Through IBC
+
+Just like an operating system that can be seamlessly installed on any device, the AndromedaOS transcends limitations tied to the Andromeda chain. It is designed for universal compatibility and can be effortlessly deployed on any chain within the expansive Cosmos ecosystem.
+
+The operating system can be employed for local development on the chain, yet its true potential shines through Inter-Blockchain Communication (IBC). This capability allows the creation of Apps that extend seamlessly across multiple interconnected chains.
+
+Here is a visual representation of how this system is connected.
+
+
+
+
+
+
+As we can see, each of the Cosmos chains has AndromedaOS deployed . Since AndromedaOS can communicate using IBC, then users can build Applications that span accross many chains taking advantage of all the benefits that come along.
+
+For example, a user can build an NFT collection on Stargaze selling the NFTs using one of our ADOs and then using a splitter to send part of the funds to Terra to leverage some protocol and another part to Injective to leverage some functionality there. The user's imagination is the only limit to what can be built using the aOS.
+
+**Note**: IBC functionality is being slowly introduced into the system. Not all features mentioned above are currently available.
+
+### What is the benefit of using aOS
+
+* **For Projects:**
+
+Before **Andromeda**, projects would need to hire a full development teams in order to build their projects and custom smart contracts. Andromeda eliminates this need by providing a very large amount of custom smart contracts that upcoming projects can pick and chose from to achieve their desired utility. These projects can then use our **No-Code-Builder** to build their projects in a matter of minutes on any of the chains that Andromeda is deployed on.
+
+* **For Developers:**
+
+Developers can use our **Andromeda Logic Library** (ALL) which contains all our contracts to build from. Similar to how [**cw-plus**](https://github.com/CosmWasm/cw-plus) contracts are used as a base for production quality builds, the ALL will act as a base for all developers to create their own ADOs that use the superior interoperable system.
+
+As it stands, the ALL contains around 25 ADOs which is the tip of the iceberg. More and more ADOs are being added by the Andromeda team, and as we continue building, the ALL will eventually reach a state with thousands of ADOs where every use case imagined can be built using it.
+
+Furthermore, developers are incentivized for their contributions and the ADOs they create. This incentive system operates through our[ economic engine](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/economics-engine), enabling developers to set custom fees on their ADOs when it is published. Users utilizing these ADOs pay these fees, which are then returned to the developer responsible for their creation.
+
+* **For Chains:**
+
+ AndromedaOS provides a whole suite of tooling that can be quickly installed on any chain in the Cosmos ecosystem. Installing the aOS would instantly give a chain and its users access to the following:
+
+1. A large number of production ready ADOs to be used.
+2. The best no-code-builder in Cosmos and perhaps the entire blockchain industry.
+3. IBC capable applications.
+4. An incredible all in one CLI that is easy to use and manage.
+5. Exposure to the chain, as users on any chain that implements the aOS will be able to to see where aOS is also deployed and might consider building applications on said chain.
+
+# Andromeda Core Repo
+
+A monorepository containing all the contracts and packages related to Andromeda Protocol. Full documentation for all the contracts can be found [here](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/introduction).
+
+## ADO Categories
+
+The contracts are classified based on their functionality. Currently we have 7 different contract categories.
+
+| Category| Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [app](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/app)| Contracts used for building Andromeda apps. |
+| [ecosystem](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/ecosystem) | Contracts that are allow interaction with different ecosystem protocols.|
+| [finance](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance) | Contracts used by fungible tokens to perform defi operations.|
+| [fungible tokens](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens) | Contracts that integrate with fungible tokens (CW-20 tokens).|
+| [non-fungible-tokens](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens) | Contacts that integrate with non-funible toknes (NFTs). Includes a standard CW721 contract with some custom features.|
+| [os](https://github.com/andromedaprotocol/andromeda-core/tree/1.0.rc-1/contracts/os) | Contacts that make up the aOS architecture |
+
+
+## Audited ADOs
+The list of ADOs that have been audited and are available on our web-application.
+
+| Contract | Category | Description | Documentation |
+| ---------------------------|------------------------|-------------------------------------------|----------------------------------------------------- |
+| [andromeda-app-contract](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/app/andromeda-app-contract)| app | Contract used to create Andromeda Apps. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/andromeda-apps/app)|
+| [andromeda-rate-limiting-withdrawals](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-rate-limiting-withdrawals) | finance | Contract that puts restrictions on the withdrawal of funds by users. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/rate-limiting-withdrawals)|
+| [andromeda-splitter](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-splitter) | finance| Contract used to split any sent funds amongst defined addresses. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/andromeda-splitter)|
+| [andromeda-timelock](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/finance/andromeda-timelock) | finance| Contract used to store funds until a condition has been satisfied before being released, similar to Escrow.|[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/finance/timelock)|
+| [andromeda-cw20](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-cw20) | fungible tokens |Contract to create standard CW20 tokens. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/cw20-token)
+| [andromeda-cw20-staking](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-cw20-staking) | fungible tokens | Contract that allows the staking of CW20 tokens for rewards. | [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/cw20-staking)|
+| [andromeda-cw20-exchange](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-cw20-exchange) | fungible tokens | Contract that allows the exchanging native tokens for a specified CW20 | [Gitbook](https://docs.andromedaprotocol.io/andromeda/andromeda-digital-objects/cw20-exchange)|
+| [andromeda-lockdrop](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-lockdrop) | fungible tokens| Contract that allows users to deposit a netive token in exchange for the project's cw-20 token |[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/lockdrop)|
+| [andromeda-merkle-airdrop](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/fungible-tokens/andromeda-merkle-airdrop) | fungible tokens| Contract used to perform a merkle airdrop on cw20-tokens| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/fungible-tokens/merkle-airdrop)|
+| [andromeda-auction](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-auction)|non-fungible-tokens| Contract that can receive an NFT and run an auction on it.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/auction)|
+| [andromeda-marketplace](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-marketplace)|non-fungible-tokens| Contract that can receive an NFT and run an a sale on it.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/andromeda-digital-objects/marketplace)|
+| [andromeda-crowdfund](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-crowdfund)|non-fungible-tokens| Contracts used to perform a crowdfund by selling NFTs.|[Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/crowdfund)|
+| [andromeda-cw721](https://github.com/andromedaprotocol/andromeda-core/tree/development/contracts/non-fungible-tokens/andromeda-cw721)| non-fungible-tokens| Contract used to create CW721 standard NFTs. Has a custom message that allows selling the NFTs.| [Gitbook](https://docs.andromedaprotocol.io/andromeda/smart-contracts/non-fungible-tokens/andromeda-digital-object)|
+| [andromeda-adodb](https://github.com/andromedaprotocol/andromeda-core/tree/1.0.rc-1/contracts/os/andromeda-adodb)| os| The ADO database responsible for publishing new ADOs into the aOS| [Gitbook](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/andromeda-factory)|
+| [andromeda-economics](https://github.com/andromedaprotocol/andromeda-core/tree/1.0.rc-1/contracts/os/andromeda-economics)| os | The contract responsible for handling ADO fees| [Gitbook](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/economics-engine)|
+| [andromeda-kernel](https://github.com/andromedaprotocol/andromeda-core/tree/1.0.rc-1/contracts/os/andromeda-kernel)| os | The contract responsible for handling communication between ADOs| [Gitbook](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/kernel)|
+| [andromeda-vfs](https://github.com/andromedaprotocol/andromeda-core/tree/1.0.rc-1/contracts/os/andromeda-vfs)| os| The contract responsible for managing the usernames and paths of ADOs and users in the aOs | [Gitbook](https://docs.andromedaprotocol.io/andromeda/platform-and-framework/andromeda-messaging-protocol/virtual-file-system)|
+
+**Note**: Other ADOs can be found in our repo, but they have not gone through the auditing process yet.
+
+## Packages
+
| Contract | Description |
| -------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| [andromeda_protocol](https://github.com/andromedaprotocol/andromeda-core/tree/development/packages) | Package used to define message types and various utility methods used by Andromeda ADO Contracts.|
@@ -67,12 +129,20 @@ Modules are smart contracts that can be added to other ADOs on instantiation to
### ADO Base
The packages also includes the [ado_base](https://github.com/andromedaprotocol/andromeda-core/tree/development/packages/ado-base). Since all our ADOs are built using the same architecture, redundency was inevitable. So we decided to bundle up all the functions/messages/structures that are used by all ADOs into the ado_base which can be referenced by any new ADOs.
-
-## Development
-
-### Testing
-
-All tests can be run using:
+
+## Development
+
+### Andromeda Template and Crate
+
+A starting template for ADO development can be found [here](https://github.com/andromedaprotocol/andr-cw-template).
+The andromeda-std crate can be found [here](https://crates.io/crates/andromeda-std).
+
+### Integration Tests
+Check out our cw-multi-test based testing [library](https://github.com/andromedaprotocol/andromeda-core/tree/1.0.rc-1/packages/andromeda-testing) to setup custom ADO integration tests.
+
+### Testing
+
+All tests can be run using:
`cargo test --workspace`
@@ -133,9 +203,12 @@ rustup toolchain install nightly
cargo clippy --all --all-targets -- -D warnings
```
### Creating and Interacting with ADOs
-
-Andromeda is deployed on many of the Cosmos chains. Usually this will require you to set up an environment for each chain. Luckily, Andromeda has built the Andromeda CLI, an all in one tool to build, interact, and manage ADOs and wallets for any of the chains. The CLI documentation can be found [here](https://docs.andromedaprotocol.io/andromeda/andromeda-cli/introduction).
-
-## Licensing
-
-[Terms and Conditions](https://github.com/andromedaprotocol/andromeda-core/blob/development/LICENSE/LICENSE.md)
+
+Andromeda is deployed on many of the Cosmos chains. Usually this will require you to set up an environment for each chain. Luckily, Andromeda has built the Andromeda CLI, an all in one tool to build, interact, and manage ADOs and wallets for any of the chains. The CLI documentation can be found [here](https://docs.andromedaprotocol.io/andromeda/andromeda-cli/introduction).
+
+### Andromeda JS
+[Andromeda.js](https://github.com/andromedaprotocol/andromeda.js) is a JavaScript SDK for writing applications that interact with ADOs on any of the blockchains that Andromeda is deployed on. More on the AndromedaJS can be found [here](https://docs.andromedaprotocol.io/andromeda.js/).
+
+## Licensing
+
+[Terms and Conditions](https://github.com/andromedaprotocol/andromeda-core/blob/development/LICENSE/LICENSE.md)
diff --git a/andromeda-core/build.sh b/andromeda-core/build.sh
index c746f63..14e51a6 100755
--- a/andromeda-core/build.sh
+++ b/andromeda-core/build.sh
@@ -5,18 +5,31 @@
# Builds "andromeda-contract" contract and "some-category" category
# LOG all the contracts compiled with there compressed file size
-local FILE_LOG=""
+FILE_LOG=""
-build_contract () {
+get_version_filename (){
local CONTRACT=$1
- echo "Building contract $CONTRACT..."
- cargo wasm -p $CONTRACT -q
-
# Get the version of the contract processed
local BUILD_VERSION=$(cargo pkgid $CONTRACT | cut -d# -f2 | cut -d: -f2)
local BUILD_TARGET=${CONTRACT//-/_}
+
+ echo "$BUILD_TARGET@$BUILD_VERSION";
+}
+
+build_contract () {
+ local CONTRACT_PATH=$1;
+
+ local CONTRACT=`basename $CONTRACT_PATH`;
+ echo "Building contract $CONTRACT..."
+ if ! cargo wasm -p $CONTRACT -q; then
+ exit 1
+ fi
+
+ local BUILD_TARGET=${CONTRACT//-/_}
+ local VERSION_FILENAME=$(get_version_filename $CONTRACT);
+
local IN_FILE="./target/wasm32-unknown-unknown/release/$BUILD_TARGET.wasm"
- local OUT_FILE="./artifacts/$BUILD_TARGET@$BUILD_VERSION.wasm"
+ local OUT_FILE="./artifacts/$VERSION_FILENAME.wasm"
wasm-opt -Os $IN_FILE -o $OUT_FILE
# NOT SO IMPORTANT STEPS
@@ -32,7 +45,7 @@ build_category () {
if [[ "$(basename $directory)" = "$1" ]]; then
echo "Building all contracts in category $(basename $directory)..."
for contract in $directory/*/; do
- build_contract $(basename $contract)
+ build_contract $contract;
done
break
fi
@@ -73,6 +86,7 @@ rm -rf ./target
rm -rf ./artifacts
mkdir artifacts
+set -e
for target in "$@"; do
if [[ "$target" = "all" ]]; then
build_all
diff --git a/andromeda-core/build_all.sh b/andromeda-core/build_all.sh
index 1789632..250475d 100755
--- a/andromeda-core/build_all.sh
+++ b/andromeda-core/build_all.sh
@@ -2,4 +2,4 @@
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
- cosmwasm/workspace-optimizer:0.13.0
\ No newline at end of file
+ cosmwasm/optimizer:0.15.1
\ No newline at end of file
diff --git a/andromeda-core/build_schema.sh b/andromeda-core/build_schema.sh
index d5250d2..2168d6f 100755
--- a/andromeda-core/build_schema.sh
+++ b/andromeda-core/build_schema.sh
@@ -3,8 +3,38 @@
set -e
set -o pipefail
+get_version_filename (){
+ local CONTRACT=$1
+ # Get the version of the contract processed
+ local BUILD_VERSION=$(cargo pkgid $CONTRACT | cut -d# -f2 | cut -d: -f2)
+ local BUILD_TARGET=${CONTRACT//-/_}
+
+ echo "$BUILD_TARGET@$BUILD_VERSION";
+}
+
+copy_schema () {
+ local CONTRACT_PATH=$1;
+ local CONTRACT=$(basename $CONTRACT_PATH);
+ echo "$CONTRACT"
+ local VERSION_FILENAME=$(get_version_filename $CONTRACT);
+ rm -rf ./artifacts/$VERSION_FILENAME
+ mkdir ./artifacts/$VERSION_FILENAME
+ # Loop through all the schema for this contract
+ for schema in $CONTRACT_PATH/schema/*.json; do
+ local SCHEMA_NAME=$(basename $schema);
+ cp "$schema" "./artifacts/$VERSION_FILENAME/$SCHEMA_NAME"
+
+ done
+
+}
+
+if [ ! -d "./artifacts" ]; then
+ mkdir artifacts;
+fi;
+
for directory in contracts/*/; do
for contract in $directory/*/; do
( cd $contract && cargo schema )
+ copy_schema $contract
done
done
\ No newline at end of file
diff --git a/andromeda-core/bump-version.sh b/andromeda-core/bump-version.sh
new file mode 100755
index 0000000..36d1bec
--- /dev/null
+++ b/andromeda-core/bump-version.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# Check if directory and version bump type are provided
+if [ $# -ne 2 ]; then
+ echo "Usage: $0 "
+ echo "version_bump should be one of: patch, minor, major"
+ exit 1
+fi
+
+DIRECTORY=$1
+VERSION_BUMP=$2
+
+# Function to bump the version in a Cargo.toml file
+bump_version() {
+ FILE=$1
+ VERSION_BUMP=$2
+
+ # Extract the current version
+ VERSION=$(grep '^version =' "$FILE" | sed -E 's/version = "(.*)"/\1/')
+
+ if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "No valid version found in $FILE"
+ return 1
+ fi
+
+ IFS='.' read -r -a VERSION_PARTS <<< "$VERSION"
+
+ MAJOR=${VERSION_PARTS[0]}
+ MINOR=${VERSION_PARTS[1]}
+ PATCH=${VERSION_PARTS[2]}
+
+ # Bump the version based on the input
+ case $VERSION_BUMP in
+ major)
+ MAJOR=$((MAJOR + 1))
+ MINOR=0
+ PATCH=0
+ ;;
+ minor)
+ MINOR=$((MINOR + 1))
+ PATCH=0
+ ;;
+ patch)
+ PATCH=$((PATCH + 1))
+ ;;
+ *)
+ echo "Invalid version bump type. Use 'patch', 'minor', or 'major'."
+ return 1
+ ;;
+ esac
+
+ NEW_VERSION="$MAJOR.$MINOR.$PATCH"
+
+ # Update the version in the Cargo.toml file
+ sed -i.bak "s/version = \"$VERSION\"/version = \"$NEW_VERSION\"/" "$FILE"
+ rm "$FILE.bak"
+
+ echo "Updated $FILE to version $NEW_VERSION"
+}
+
+export -f bump_version
+
+# Find all Cargo.toml files and bump their versions
+find "$DIRECTORY" -name "Cargo.toml" -exec bash -c 'bump_version "$0" "$1"' {} "$VERSION_BUMP" \;
diff --git a/andromeda-core/ci-scripts/install_binaryen.sh b/andromeda-core/ci-scripts/install_binaryen.sh
new file mode 100644
index 0000000..0c579a0
--- /dev/null
+++ b/andromeda-core/ci-scripts/install_binaryen.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+wget https://github.com/WebAssembly/binaryen/releases/download/version_117/binaryen-version_117-x86_64-linux.tar.gz
+tar -xf binaryen-version_117-x86_64-linux.tar.gz
+mv binaryen-version_117/bin/wasm-opt /usr/local/bin
+rm -rf binaryen-version_117*
diff --git a/andromeda-core/ci-scripts/localrelayer/Makefile b/andromeda-core/ci-scripts/localrelayer/Makefile
deleted file mode 100644
index e2af7cc..0000000
--- a/andromeda-core/ci-scripts/localrelayer/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-init: clean build
-
-build:
- @DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f docker-compose.yml build
-
-start:
- @docker-compose -f docker-compose.yml up
-
-startd:
- @docker-compose -f docker-compose.yml up -d
-
-stop:
- @docker-compose -f docker-compose.yml down -t 3
-
-
-restart: stop
- @docker-compose -f docker-compose.yml up --force-recreate
-
-restartd: stop
- @docker-compose -f docker-compose.yml up --force-recreate -d
-
-clean:
- @rm -rfI ./template/.osmosisd-local-a
- @rm -rfI ./template/.osmosisd-local-b
diff --git a/andromeda-core/ci-scripts/localrelayer/README.md b/andromeda-core/ci-scripts/localrelayer/README.md
deleted file mode 100644
index c6403b2..0000000
--- a/andromeda-core/ci-scripts/localrelayer/README.md
+++ /dev/null
@@ -1,221 +0,0 @@
-# Localrelayer
-
-Localrelayer is a local testing environment composed of two localOsmosis instances connected by a relayer.
-
-![Architecture](./assets/architecture.png)
-
-## Endpoints
-
-| Chain ID | Component | Endpoint |
-| ---------------- | ---------- | ------------------------ |
-| `localosmosis-a` | `RPC` | |
-| `localosmosis-a` | `REST/LCD` | |
-| `localosmosis-a` | `gRPC` | |
-| `localosmosis-a` | `faucet` | |
-| `localosmosis-b` | `RPC` | |
-| `localosmosis-b` | `REST/LCD` | |
-| `localosmosis-b` | `gRPC` | |
-| `localosmosis-b` | `faucet` | |
-| `-` | `hermes` | |
-
-## Accounts
-
-By default the following mnemonics are used:
-
-| Chain ID | Account | Mnemonic |
-| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `localosmosis-a` | `validator-a` | _family album bird seek tilt color pill danger message abuse manual tent almost ridge boost blast high comic core quantum spoon coconut oyster remove_ |
-| `localosmosis-a` | `faucet` | _increase bread alpha rigid glide amused approve oblige print asset idea enact lawn proof unfold jeans rabbit audit return chuckle valve rather cactus great_ |
-| `localosmosis-a` | `relayer` | _black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken_ |
-| `localosmosis-b` | `validator-b` | _family album bird seek tilt color pill danger message abuse manual tent almost ridge boost blast high comic core quantum spoon coconut oyster remove_ |
-| `localosmosis-b` | `faucet` | _increase bread alpha rigid glide amused approve oblige print asset idea enact lawn proof unfold jeans rabbit audit return chuckle valve rather cactus great_ |
-| `localosmosis-b` | `relayer` | _black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken_ |
-
-## Deploy
-
-Build a local docker image with current changes
-
-```bash
-make build
-```
-
-Start the testing environment:
-
-```bash
-make start
-```
-
-The command will:
-
-1. create a local docker network:
-
-```bash
- ⠿ Network localrelayer_localosmosis Created
-```
-
-2. run the following containers:
-
-```bash
- ⠿ Container localrelayer-localosmosis-b-1 Created
- ⠿ Container localrelayer-localosmosis-a-1 Created
- ⠿ Container localrelayer-faucet-a-1 Created
- ⠿ Container localrelayer-faucet-b-1 Created
- ⠿ Container localrelayer-hermes-1 Created
-```
-
-> If you don't want the logs, you can start in detached mode with the following command:
->
-> `make startd`
-
-Check that everything is running:
-
-```bash
-docker ps
-```
-
-Expected output:
-
-```bash
-❯ docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-318c89d3015f informalsystems/hermes:1.1.0 "/home/hermes/setup.…" About a minute ago Up 2 seconds 0.0.0.0:3000->3000/tcp localrelayer-hermes-1
-ff7abb62fdb3 confio/faucet:0.28.11 "/app/packages/fauce…" About a minute ago Up 2 seconds 0.0.0.0:38000->8000/tcp localrelayer-faucet-b-1
-7e7ca3ff8a67 confio/faucet:0.28.11 "/app/packages/fauce…" About a minute ago Up 2 seconds 0.0.0.0:8000->8000/tcp localrelayer-faucet-a-1
-d90ec29c7a6f local:osmosis "/osmosis/setup.sh" About a minute ago Up 3 seconds 26656/tcp, 0.0.0.0:31317->1317/tcp, 0.0.0.0:39090->9090/tcp, 0.0.0.0:36657->26657/tcp localrelayer-localosmosis-b-1
-e36cead49a07 local:osmosis "/osmosis/setup.sh" About a minute ago Up 3 seconds 0.0.0.0:1317->1317/tcp, 0.0.0.0:9090->9090/tcp, 0.0.0.0:26657->26657/tcp, 26656/tcp localrelayer-localosmosis-a-1
-```
-
-## Usage
-
-### Interact with chain
-
-Check `localosmosis-a` status:
-
-```bash
-curl -s http://localhost:26657/status
-```
-
-Check `localosmosis-b` status:
-
-```bash
-curl -s http://localhost:36657/status
-```
-
-### Faucet
-
-The faucet used is `confio/faucet:0.28.11`. The source code and additional documentation are available [here](https://github.com/cosmos/cosmjs/tree/main/packages/faucet).
-
-Create a new account:
-
-```bash
-❯ osmosisd keys add my-account --keyring-backend test
-
-- name: my-account
- type: local
- address: osmo1e5zmvznxr0zuulsstna0rd3959sw858e5ctw2j
- pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AougdpyGftv+BMBXzQWFVJx9ASz/QRoBDM0nRI/xq90Y"}'
- mnemonic: ""
-```
-
-Request founds:
-
-```bash
-FAUCET_ENDPOINT=http://localhost:8080
-
-# Use the following endpoint for localosmosis-b:
-# FAUCET_ENDPOINT=http://localhost:38080
-
-curl --header "Content-Type: application/json" \
- --request POST \
- --data '{"denom":"uosmo","address":"osmo1e5zmvznxr0zuulsstna0rd3959sw858e5ctw2j"}' \
- http://localhost:8000/credit
-```
-
-Check balance:
-
-```bash
-LCD_ENDPOINT=\localhost:1317
-
-# Use the following endpoint for localosmosis-b:
-# LCD_ENDPOINT=localhost:31317
-
-curl -s http://$LCD_ENDPOINT/cosmos/bank/v1beta1/balances/osmo1e5zmvznxr0zuulsstna0rd3959sw858e5ctw2j
-```
-
-### Hermes
-
-You can test that hermes is working by sending a test IBC transaction.
-
-Make sure `hermes` is running:
-
-```bash
-❯ docker ps | grep hermes
-```
-
-Expected output:
-
-```bash
-318c89d3015f informalsystems/hermes:1.1.0 "/home/hermes/setup.…" 23 minutes ago Up 22 minutes 0.0.0.0:3000->3000/tcp
-```
-
-Exec inside the container:
-
-```bash
-docker exec -ti localrelayer-hermes-1 sh
-```
-
-Send a transaction:
-
-```bash
-hermes tx ft-transfer --timeout-seconds 1000 \
- --dst-chain localosmosis-a \
- --src-chain localosmosis-b \
- --src-port transfer \
- --src-channel channel-0 \
- --amount 100 \
- --denom uosmo
-```
-
-Expected output:
-
-```bash
-2022-12-01T11:41:22.351909Z INFO ThreadId(01) using default configuration from '/root/.hermes/config.toml'
-SUCCESS [
- IbcEventWithHeight {
- event: SendPacket(
- SendPacket {
- packet: Packet {
- sequence: Sequence(
- 1,
- ),
- source_port: PortId(
- "transfer",
- ),
- source_channel: ChannelId(
- "channel-0",
- ),
- destination_port: PortId(
- "transfer",
- ),
- destination_channel: ChannelId(
- "channel-0",
- ),
- data: [123, 34, 97, 109, 111, 117, 110, 116, 34, 58, 34, 49, 48, 48, 34, 44, 34, 100, 101, 110, 111, 109, 34, 58, 34, 117, 111, 115, 109, 111, 34, 44, 34, 114, 101, 99, 101, 105, 118, 101, 114, 34, 58, 34, 111, 115, 109, 111, 49, 113, 118, 100, 101, 117, 52, 120, 51, 52, 114, 97, 112, 112, 51, 119, 99, 56, 102, 121, 109, 53, 103, 52, 119, 117, 51, 52, 51, 109, 115, 119, 120, 50, 101, 120, 107, 117, 103, 34, 44, 34, 115, 101, 110, 100, 101, 114, 34, 58, 34, 111, 115, 109, 111, 49, 113, 118, 100, 101, 117, 52, 120, 51, 52, 114, 97, 112, 112, 51, 119, 99, 56, 102, 121, 109, 53, 103, 52, 119, 117, 51, 52, 51, 109, 115, 119, 120, 50, 101, 120, 107, 117, 103, 34, 125],
- timeout_height: Never,
- timeout_timestamp: Timestamp {
- time: Some(
- Time(
- 2022-12-01 11:57:59.365129852,
- ),
- ),
- },
- },
- },
- ),
- height: Height {
- revision: 0,
- height: 1607,
- },
- },
-]
-```
diff --git a/andromeda-core/ci-scripts/localrelayer/config/hermes/config.toml b/andromeda-core/ci-scripts/localrelayer/config/hermes/config.toml
deleted file mode 100644
index 70e5378..0000000
--- a/andromeda-core/ci-scripts/localrelayer/config/hermes/config.toml
+++ /dev/null
@@ -1,101 +0,0 @@
-[global]
-log_level = 'info'
-
-[mode.clients]
-enabled = true
-refresh = true
-misbehaviour = true
-
-[mode.connections]
-enabled = true
-
-[mode.channels]
-enabled = true
-
-[mode.packets]
-enabled = true
-clear_interval = 120
-clear_on_start = false
-tx_confirmation = true
-
-[rest]
-enabled = true
-host = '0.0.0.0'
-port = 3000
-
-[telemetry]
-enabled = true
-host = '0.0.0.0'
-port = 3001
-
-[[chains]]
-id = 'localosmosis-b'
-type = 'CosmosSdk'
-rpc_addr = 'http://localosmosis-b:26657'
-grpc_addr = 'http://localosmosis-b:9090'
-websocket_addr = 'ws://localosmosis-b:26657/websocket'
-rpc_timeout = '10s'
-account_prefix = 'osmo'
-key_name = 'localosmosis-b'
-key_store_type = 'Test'
-store_prefix = 'ibc'
-default_gas = 1000000
-max_gas = 40000000
-gas_multiplier = 1.1
-max_msg_num = 30
-max_tx_size = 2097152
-clock_drift = '5s'
-max_block_time = '30s'
-memo_prefix = ''
-sequential_batch_tx = true
-
-[chains.trust_threshold]
-numerator = '1'
-denominator = '3'
-
-[chains.gas_price]
-price = 0.1
-denom = 'uosmo'
-
-[chains.packet_filter]
-policy = 'allow'
-list = [['transfer', 'channel-*']]
-
-[chains.address_type]
-derivation = 'cosmos'
-
-[[chains]]
-id = 'localosmosis-a'
-type = 'CosmosSdk'
-rpc_addr = 'http://localosmosis-a:26657'
-grpc_addr = 'http://localosmosis-a:9090'
-websocket_addr = 'ws://localosmosis-a:26657/websocket'
-rpc_timeout = '10s'
-account_prefix = 'osmo'
-key_name = 'localosmosis-a'
-key_store_type = 'Test'
-store_prefix = 'ibc'
-default_gas = 1000000
-max_gas = 4000000
-gas_multiplier = 1.1
-max_msg_num = 30
-max_tx_size = 2097152
-clock_drift = '5s'
-max_block_time = '30s'
-memo_prefix = ''
-sequential_batch_tx = true
-
-[chains.trust_threshold]
-numerator = '1'
-denominator = '3'
-
-[chains.gas_price]
-price = 0.1
-denom = 'uosmo'
-
-[chains.packet_filter]
-policy = 'allow'
-list = [['transfer', 'channel-*']]
-
-[chains.address_type]
-derivation = 'cosmos'
diff --git a/andromeda-core/ci-scripts/localrelayer/docker-compose.yml b/andromeda-core/ci-scripts/localrelayer/docker-compose.yml
deleted file mode 100644
index c55a6c9..0000000
--- a/andromeda-core/ci-scripts/localrelayer/docker-compose.yml
+++ /dev/null
@@ -1,74 +0,0 @@
-version: "3"
-
-services:
- localosmosis-a:
- build:
- context: https://github.com/osmosis-labs/osmosis.git#main
- args:
- RUNNER_IMAGE: alpine:3.17
- GO_VERSION: "1.20"
- volumes:
- - ./scripts/setup_chain.sh:/osmosis/setup.sh
- - ./template/.osmosisd-local-a/:/osmosis/.osmosisd/
- entrypoint:
- - /osmosis/setup.sh
- environment:
- - CHAIN_ID=localosmosis-a
- - VALIDATOR_MONIKER=validator-a
- - VALIDATOR_MNEMONIC=family album bird seek tilt color pill danger message abuse manual tent almost ridge boost blast high comic core quantum spoon coconut oyster remove
- - FAUCET_MNEMONIC=notice oak worry limit wrap speak medal online prefer cluster roof addict wrist behave treat actual wasp year salad speed social layer crew genius
- - RELAYER_MNEMONIC=black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken
- ports:
- - 26657:26657
- - 1317:1317
- - 9090:9090
- networks:
- - localosmosis
-
- localosmosis-b:
- build:
- context: https://github.com/osmosis-labs/osmosis.git#main
- args:
- RUNNER_IMAGE: alpine:3.17
- GO_VERSION: "1.20"
- volumes:
- - ./scripts/setup_chain.sh:/osmosis/setup.sh
- - ./template/.osmosisd-local-b:/osmosis/.osmosisd
- entrypoint:
- - /osmosis/setup.sh
- environment:
- - CHAIN_ID=localosmosis-b
- - VALIDATOR_MONIKER=validator-b
- - VALIDATOR_MNEMONIC=family album bird seek tilt color pill danger message abuse manual tent almost ridge boost blast high comic core quantum spoon coconut oyster remove
- - FAUCET_MNEMONIC=notice oak worry limit wrap speak medal online prefer cluster roof addict wrist behave treat actual wasp year salad speed social layer crew genius
- - RELAYER_MNEMONIC=black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken
- ports:
- # Can't use the same ports
- - 36657:26657
- - 31317:1317
- - 39090:9090
- networks:
- - localosmosis
- hermes:
- image: informalsystems/hermes:1.1.0
- user: root:root
- volumes:
- - ./scripts/setup_hermes.sh:/home/hermes/setup.sh
- - ./config/hermes/config.toml:/root/.hermes/config.toml
- entrypoint:
- - /home/hermes/setup.sh
- environment:
- - CHAIN_A_ID=localosmosis-a
- - CHAIN_A_MNEMONIC=black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken
- - CHAIN_B_ID=localosmosis-b
- - CHAIN_B_MNEMONIC=black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken
- ports:
- - 3000:3000
- depends_on:
- - localosmosis-a
- - localosmosis-b
- networks:
- - localosmosis
-
-networks:
- localosmosis:
diff --git a/andromeda-core/ci-scripts/localrelayer/go.mod b/andromeda-core/ci-scripts/localrelayer/go.mod
deleted file mode 100644
index b7a9f01..0000000
--- a/andromeda-core/ci-scripts/localrelayer/go.mod
+++ /dev/null
@@ -1,335 +0,0 @@
-module github.com/osmosis-labs/osmosis/v16
-
-go 1.20
-
-require (
- cosmossdk.io/errors v1.0.0-beta.7
- github.com/CosmWasm/wasmd v0.31.0
- github.com/cosmos/cosmos-proto v1.0.0-beta.2
- github.com/cosmos/cosmos-sdk v0.47.3
- github.com/cosmos/go-bip39 v1.0.0
- github.com/cosmos/ibc-apps/modules/async-icq/v4 v4.0.0-20230524151648-c02fa46c2860
- github.com/cosmos/ibc-go/v4 v4.3.1
- github.com/gogo/protobuf v1.3.3
- github.com/golang/mock v1.6.0
- github.com/golang/protobuf v1.5.3
- github.com/golangci/golangci-lint v1.52.2
- github.com/gorilla/mux v1.8.0
- github.com/grpc-ecosystem/grpc-gateway v1.16.0
- github.com/iancoleman/orderedmap v0.2.0
- github.com/mattn/go-sqlite3 v1.14.17
- github.com/ory/dockertest/v3 v3.10.0
- github.com/osmosis-labs/go-mutesting v0.0.0-20221208041716-b43bcd97b3b3
- github.com/osmosis-labs/osmosis/osmomath v0.0.3-dev.0.20230516205127-c213fddde069
- github.com/osmosis-labs/osmosis/osmoutils v0.0.0-20230608190634-3395abe098ce
- github.com/osmosis-labs/osmosis/x/epochs v0.0.0-20230328024000-175ec88e4304
- github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.0-20230602130523-f9a94d8bbd10
- github.com/pkg/errors v0.9.1
- github.com/rakyll/statik v0.1.7
- github.com/spf13/cast v1.5.1
- github.com/spf13/cobra v1.7.0
- github.com/spf13/pflag v1.0.5
- github.com/spf13/viper v1.16.0
- github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.5
- github.com/stretchr/testify v1.8.4
- github.com/tendermint/tendermint v0.37.0-rc1
- github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b
- github.com/tidwall/btree v1.6.0
- github.com/tidwall/gjson v1.14.4
- go.uber.org/multierr v1.11.0
- golang.org/x/exp v0.0.0-20230131160201-f062dba9d201
- google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1
- google.golang.org/grpc v1.55.0
- gopkg.in/yaml.v2 v2.4.0
- mvdan.cc/gofumpt v0.5.0
-)
-
-require (
- 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect
- github.com/Abirdcfly/dupword v0.0.11 // indirect
- github.com/Djarvur/go-err113 v0.1.0 // indirect
- github.com/alingse/asasalint v0.0.11 // indirect
- github.com/benbjohnson/clock v1.3.0 // indirect
- github.com/bytedance/sonic v1.9.1 // indirect
- github.com/cosmos/gogoproto v1.4.6 // indirect
- github.com/cosmos/iavl v0.19.5 // indirect
- github.com/creachadair/taskgroup v0.3.2 // indirect
- github.com/curioswitch/go-reassign v0.2.0 // indirect
- github.com/docker/distribution v2.8.2+incompatible // indirect
- github.com/felixge/httpsnoop v1.0.2 // indirect
- github.com/go-playground/locales v0.14.0 // indirect
- github.com/goccy/go-json v0.10.2 // indirect
- github.com/gogo/gateway v1.1.0 // indirect
- github.com/google/btree v1.1.2 // indirect
- github.com/junk1tm/musttag v0.5.0 // indirect
- github.com/kkHAIKE/contextcheck v1.1.4 // indirect
- github.com/maratori/testableexamples v1.0.0 // indirect
- github.com/nunnatsa/ginkgolinter v0.9.0 // indirect
- github.com/regen-network/cosmos-proto v0.3.1 // indirect
- github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
- github.com/sashamelentyev/usestdlibvars v1.23.0 // indirect
- github.com/sivchari/nosnakecase v1.7.0 // indirect
- github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect
- github.com/tidwall/match v1.1.1 // indirect
- github.com/tidwall/pretty v1.2.0 // indirect
- github.com/timonwong/loggercheck v0.9.4 // indirect
- github.com/zimmski/go-mutesting v0.0.0-20210610104036-6d9217011a00 // indirect
- github.com/zondax/ledger-go v0.14.1 // indirect
- go.uber.org/atomic v1.10.0 // indirect
- go.uber.org/goleak v1.1.12 // indirect
- go.uber.org/zap v1.24.0 // indirect
-)
-
-require (
- 4d63.com/gochecknoglobals v0.2.1 // indirect
- filippo.io/edwards25519 v1.0.0-rc.1 // indirect
- github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
- github.com/99designs/keyring v1.2.1 // indirect
- github.com/Antonboom/errname v0.1.9 // indirect
- github.com/Antonboom/nilnil v0.1.3 // indirect
- github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
- github.com/BurntSushi/toml v1.2.1 // indirect
- github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
- github.com/CosmWasm/wasmvm v1.2.1
- github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 // indirect
- github.com/Masterminds/semver v1.5.0 // indirect
- github.com/Microsoft/go-winio v0.6.0 // indirect
- github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect
- github.com/OpenPeeDeeP/depguard v1.1.1 // indirect
- github.com/Workiva/go-datastructures v1.0.53 // indirect
- github.com/alexkohler/prealloc v1.0.0 // indirect
- github.com/armon/go-metrics v0.4.1 // indirect
- github.com/ashanbrown/forbidigo v1.5.1 // indirect
- github.com/ashanbrown/makezero v1.1.1 // indirect
- github.com/beorn7/perks v1.0.1 // indirect
- github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect
- github.com/bkielbasa/cyclop v1.2.0 // indirect
- github.com/blizzy78/varnamelen v0.8.0 // indirect
- github.com/bombsimon/wsl/v3 v3.4.0 // indirect
- github.com/breml/bidichk v0.2.4 // indirect
- github.com/breml/errchkjson v0.3.1 // indirect
- github.com/btcsuite/btcd v0.22.3 // indirect
- github.com/butuzov/ireturn v0.1.1 // indirect
- github.com/cenkalti/backoff/v4 v4.1.3 // indirect
- github.com/cespare/xxhash v1.1.0 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
- github.com/charithe/durationcheck v0.0.10 // indirect
- github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 // indirect
- github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect
- github.com/confio/ics23/go v0.9.0 // indirect
- github.com/containerd/continuity v0.3.0 // indirect
- github.com/cosmos/btcutil v1.0.5
- github.com/cosmos/gorocksdb v1.2.0 // indirect
- github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect
- github.com/daixiang0/gci v0.10.1 // indirect
- github.com/danieljoos/wincred v1.1.2 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/denis-tingaikin/go-header v0.4.3 // indirect
- github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
- github.com/dgraph-io/badger/v3 v3.2103.2 // indirect
- github.com/dgraph-io/ristretto v0.1.0 // indirect
- github.com/docker/cli v20.10.17+incompatible // indirect
- github.com/docker/docker v20.10.24+incompatible // indirect
- github.com/docker/go-connections v0.4.0 // indirect
- github.com/docker/go-units v0.5.0 // indirect
- github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect
- github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
- github.com/esimonov/ifshort v1.0.4 // indirect
- github.com/ettle/strcase v0.1.1 // indirect
- github.com/fatih/color v1.15.0 // indirect
- github.com/fatih/structtag v1.2.0 // indirect
- github.com/firefart/nonamedreturns v1.0.4 // indirect
- github.com/fsnotify/fsnotify v1.6.0 // indirect
- github.com/fzipp/gocyclo v0.6.0 // indirect
- github.com/go-critic/go-critic v0.7.0 // indirect
- github.com/go-kit/kit v0.12.0 // indirect
- github.com/go-kit/log v0.2.1 // indirect
- github.com/go-logfmt/logfmt v0.5.1 // indirect
- github.com/go-toolsmith/astcast v1.1.0 // indirect
- github.com/go-toolsmith/astcopy v1.1.0 // indirect
- github.com/go-toolsmith/astequal v1.1.0 // indirect
- github.com/go-toolsmith/astfmt v1.1.0 // indirect
- github.com/go-toolsmith/astp v1.1.0 // indirect
- github.com/go-toolsmith/strparse v1.1.0 // indirect
- github.com/go-toolsmith/typep v1.1.0 // indirect
- github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect
- github.com/gobwas/glob v0.2.3 // indirect
- github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
- github.com/gofrs/flock v0.8.1 // indirect
- github.com/golang/glog v1.0.0 // indirect
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/snappy v0.0.4 // indirect
- github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect
- github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect
- github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe // indirect
- github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 // indirect
- github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 // indirect
- github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca // indirect
- github.com/golangci/misspell v0.4.0 // indirect
- github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 // indirect
- github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect
- github.com/google/flatbuffers v1.12.1 // indirect
- github.com/google/go-cmp v0.5.9 // indirect
- github.com/google/gofuzz v1.2.0 // indirect
- github.com/google/orderedcode v0.0.1 // indirect
- github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
- github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 // indirect
- github.com/gorilla/handlers v1.5.1 // indirect
- github.com/gorilla/websocket v1.5.0 // indirect
- github.com/gostaticanalysis/analysisutil v0.7.1 // indirect
- github.com/gostaticanalysis/comment v1.4.2 // indirect
- github.com/gostaticanalysis/forcetypeassert v0.1.0 // indirect
- github.com/gostaticanalysis/nilerr v0.1.1 // indirect
- github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
- github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
- github.com/gtank/merlin v0.1.1 // indirect
- github.com/gtank/ristretto255 v0.1.2 // indirect
- github.com/hashicorp/errwrap v1.1.0 // indirect
- github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
- github.com/hashicorp/go-multierror v1.1.1 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
- github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
- github.com/hashicorp/hcl v1.0.0 // indirect
- github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect
- github.com/hexops/gotextdiff v1.0.3 // indirect
- github.com/imdario/mergo v0.3.13 // indirect
- github.com/improbable-eng/grpc-web v0.15.0 // indirect
- github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/jessevdk/go-flags v1.4.0 // indirect
- github.com/jgautheron/goconst v1.5.1 // indirect
- github.com/jingyugao/rowserrcheck v1.1.1 // indirect
- github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect
- github.com/jmhodges/levigo v1.0.0 // indirect
- github.com/joho/godotenv v1.5.1
- github.com/julz/importas v0.1.0 // indirect
- github.com/kisielk/errcheck v1.6.3 // indirect
- github.com/kisielk/gotool v1.0.0 // indirect
- github.com/klauspost/compress v1.15.11 // indirect
- github.com/kulti/thelper v0.6.3 // indirect
- github.com/kunwardeep/paralleltest v1.0.6 // indirect
- github.com/kyoh86/exportloopref v0.1.11 // indirect
- github.com/ldez/gomoddirectives v0.2.3 // indirect
- github.com/ldez/tagliatelle v0.4.0 // indirect
- github.com/leonklingele/grouper v1.1.1 // indirect
- github.com/lib/pq v1.10.7 // indirect
- github.com/libp2p/go-buffer-pool v0.1.0 // indirect
- github.com/lufeee/execinquery v1.2.1 // indirect
- github.com/magiconair/properties v1.8.7 // indirect
- github.com/maratori/testpackage v1.1.1 // indirect
- github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 // indirect
- github.com/mattn/go-colorable v0.1.13 // indirect
- github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/mattn/go-runewidth v0.0.10 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
- github.com/mbilski/exhaustivestruct v1.2.0 // indirect
- github.com/mgechev/revive v1.3.1 // indirect
- github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect
- github.com/minio/highwayhash v1.0.2 // indirect
- github.com/mitchellh/go-homedir v1.1.0 // indirect
- github.com/mitchellh/mapstructure v1.5.0 // indirect
- github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae // indirect
- github.com/moricho/tparallel v0.3.1 // indirect
- github.com/mtibben/percent v0.2.1 // indirect
- github.com/nakabonne/nestif v0.3.1 // indirect
- github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect
- github.com/nishanths/exhaustive v0.9.5 // indirect
- github.com/nishanths/predeclared v0.2.2 // indirect
- github.com/olekukonko/tablewriter v0.0.5 // indirect
- github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
- github.com/opencontainers/runc v1.1.5 // indirect
- github.com/pelletier/go-toml/v2 v2.0.8 // indirect
- github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/polyfloyd/go-errorlint v1.4.0 // indirect
- github.com/prometheus/client_golang v1.15.1
- github.com/prometheus/client_model v0.3.0 // indirect
- github.com/prometheus/common v0.42.0 // indirect
- github.com/prometheus/procfs v0.9.0 // indirect
- github.com/quasilyte/go-ruleguard v0.3.19 // indirect
- github.com/quasilyte/gogrep v0.5.0 // indirect
- github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
- github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect
- github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
- github.com/rivo/uniseg v0.2.0 // indirect
- github.com/rs/cors v1.8.2 // indirect
- github.com/rs/zerolog v1.27.0 // indirect
- github.com/ryancurrah/gomodguard v1.3.0 // indirect
- github.com/ryanrolds/sqlclosecheck v0.4.0 // indirect
- github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect
- github.com/sasha-s/go-deadlock v0.3.1 // indirect
- github.com/securego/gosec/v2 v2.15.0 // indirect
- github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect
- github.com/sirupsen/logrus v1.9.0 // indirect
- github.com/sivchari/containedctx v1.0.2 // indirect
- github.com/sivchari/tenv v1.7.1 // indirect
- github.com/sonatard/noctx v0.0.2 // indirect
- github.com/sourcegraph/go-diff v0.7.0 // indirect
- github.com/spf13/afero v1.9.5 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
- github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
- github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
- github.com/subosito/gotenv v1.4.2 // indirect
- github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
- github.com/tdakkota/asciicheck v0.2.0 // 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/tetafro/godot v1.4.11 // indirect
- github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e // indirect
- github.com/tomarrell/wrapcheck/v2 v2.8.1 // indirect
- github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
- github.com/ultraware/funlen v0.0.3 // indirect
- github.com/ultraware/whitespace v0.0.5 // indirect
- github.com/uudashr/gocognit v1.0.6 // indirect
- github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
- github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
- github.com/xeipuuv/gojsonschema v1.2.0 // indirect
- github.com/yagipy/maintidx v1.0.0 // indirect
- github.com/yeya24/promlinter v0.2.0 // indirect
- github.com/zimmski/go-tool v0.0.0-20150119110811-2dfdc9ac8439 // indirect
- github.com/zimmski/osutil v0.0.0-20190128123334-0d0b3ca231ac // indirect
- github.com/zondax/hid v0.9.1 // indirect
- gitlab.com/bosi/decorder v0.2.3 // indirect
- go.etcd.io/bbolt v1.3.6 // indirect
- go.opencensus.io v0.24.0 // indirect
- golang.org/x/crypto v0.9.0 // indirect
- golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2 // indirect
- golang.org/x/mod v0.10.0 // indirect
- golang.org/x/net v0.10.0 // indirect
- golang.org/x/sync v0.1.0 // indirect
- golang.org/x/sys v0.8.0 // indirect
- golang.org/x/term v0.8.0 // indirect
- golang.org/x/text v0.9.0 // indirect
- golang.org/x/tools v0.8.0 // indirect
- google.golang.org/protobuf v1.30.0 // indirect
- gopkg.in/ini.v1 v1.67.0 // indirect
- gopkg.in/yaml.v3 v3.0.1
- honnef.co/go/tools v0.4.3 // indirect
- mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect
- mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect
- mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d // indirect
- nhooyr.io/websocket v1.8.7 // indirect
-)
-
-replace (
- // osmosis-patched wasmd.
- github.com/CosmWasm/wasmd => github.com/osmosis-labs/wasmd v0.31.0-osmo-v16
- // Security patch for wasmvm. See https://github.com/CosmWasm/advisories/blob/main/CWAs/CWA-2023-002.md
- github.com/CosmWasm/wasmvm => github.com/CosmWasm/wasmvm v1.2.3
- // dragonberry
- github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0
- // Our cosmos-sdk branch is: https://github.com/osmosis-labs/cosmos-sdk, current branch: v16.x. Direct commit link: https://github.com/osmosis-labs/cosmos-sdk/commit/93d9d4851b92bcbc1ede8c031ca1559b35ecc708
- github.com/cosmos/cosmos-sdk => github.com/osmosis-labs/cosmos-sdk v0.45.1-0.20230603004404-93d9d4851b92
-
- // N.B. v0.19.5 contains a breaking change to the IAVL API
- github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4
- // use cosmos-compatible protobufs
- github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
-
- // Informal Tendermint fork
- github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24
- // use grpc compatible with cosmos protobufs
- google.golang.org/grpc => google.golang.org/grpc v1.33.2
-)
diff --git a/andromeda-core/ci-scripts/localrelayer/go.sum b/andromeda-core/ci-scripts/localrelayer/go.sum
deleted file mode 100644
index d8f5b47..0000000
--- a/andromeda-core/ci-scripts/localrelayer/go.sum
+++ /dev/null
@@ -1,1855 +0,0 @@
-4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA=
-4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs=
-4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc=
-4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU=
-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=
-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
-cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
-cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
-cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
-cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
-cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
-cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
-cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
-cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
-cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
-cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
-cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
-cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
-cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
-cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
-collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE=
-cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w=
-cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU=
-filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
-git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw=
-git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA=
-github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
-github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
-github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o=
-github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA=
-github.com/Abirdcfly/dupword v0.0.11 h1:z6v8rMETchZXUIuHxYNmlUAuKuB21PeaSymTed16wgU=
-github.com/Abirdcfly/dupword v0.0.11/go.mod h1:wH8mVGuf3CP5fsBTkfWwwwKTjDnVVCxtU8d8rgeVYXA=
-github.com/Antonboom/errname v0.1.9 h1:BZDX4r3l4TBZxZ2o2LNrlGxSHran4d1u4veZdoORTT4=
-github.com/Antonboom/errname v0.1.9/go.mod h1:nLTcJzevREuAsgTbG85UsuiWpMpAqbKD1HNZ29OzE58=
-github.com/Antonboom/nilnil v0.1.3 h1:6RTbx3d2mcEu3Zwq9TowQpQMVpP75zugwOtqY1RTtcE=
-github.com/Antonboom/nilnil v0.1.3/go.mod h1:iOov/7gRcXkeEU+EMGpBu2ORih3iyVEiWjeste1SJm8=
-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/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
-github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
-github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-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/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY=
-github.com/CosmWasm/wasmvm v1.2.3/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc=
-github.com/DATA-DOG/go-sqlmock v1.3.3/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.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
-github.com/Djarvur/go-err113 v0.1.0 h1:uCRZZOdMQ0TZPHYTdYpoC0bLYJKPEHPUJ8MeAa51lNU=
-github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
-github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts=
-github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0=
-github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
-github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
-github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
-github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
-github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
-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/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA=
-github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc=
-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/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
-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.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.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I=
-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=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-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/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw=
-github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE=
-github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw=
-github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I=
-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/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
-github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
-github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
-github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
-github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
-github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
-github.com/ashanbrown/forbidigo v1.5.1 h1:WXhzLjOlnuDYPYQo/eFlcFMi8X/kLfvWLYu6CSoebis=
-github.com/ashanbrown/forbidigo v1.5.1/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU=
-github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s=
-github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI=
-github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
-github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-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/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
-github.com/benbjohnson/clock v1.3.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=
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s=
-github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A=
-github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI=
-github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M=
-github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k=
-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/bombsimon/wsl/v3 v3.4.0 h1:RkSxjT3tmlptwfgEgTgU+KYKLI35p/tviNXNXiL2aNU=
-github.com/bombsimon/wsl/v3 v3.4.0/go.mod h1:KkIB+TXkqy6MvK9BDZVbZxKNYsE1/oLRJbIFtf14qqo=
-github.com/breml/bidichk v0.2.4 h1:i3yedFWWQ7YzjdZJHnPo9d/xURinSq3OM+gyM43K4/8=
-github.com/breml/bidichk v0.2.4/go.mod h1:7Zk0kRFt1LIZxtQdl9W9JwGAcLTTkOs+tN7wuEYGJ3s=
-github.com/breml/errchkjson v0.3.1 h1:hlIeXuspTyt8Y/UmP5qy1JocGNR00KQHgfaNtRAjoxQ=
-github.com/breml/errchkjson v0.3.1/go.mod h1:XroxrzKjdiutFyW3nWhw34VGg7kiMsDQox73yWCGI2U=
-github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8=
-github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
-github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs=
-github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y=
-github.com/btcsuite/btcd v0.22.3 h1:kYNaWFvOw6xvqP0vR20RP1Zq1DVMBxEO8QN5d1/EfNg=
-github.com/btcsuite/btcd v0.22.3/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y=
-github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
-github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/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-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
-github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
-github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts=
-github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ=
-github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o=
-github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
-github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
-github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I=
-github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
-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/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY=
-github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc=
-github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
-github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
-github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
-github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
-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/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/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
-github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
-github.com/census-instrumentation/opencensus-proto v0.2.1/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=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4=
-github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ=
-github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 h1:W9o46d2kbNL06lq7UNDPV0zYLzkrde/bjIqO02eoll0=
-github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8/go.mod h1:gakxgyXaaPkxvLw1XQxNGK4I37ys9iBRzNUx/B7pUCo=
-github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
-github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
-github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
-github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA=
-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/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
-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/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/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI=
-github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA=
-github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M=
-github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ=
-github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
-github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q=
-github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0=
-github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
-github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg=
-github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM=
-github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
-github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
-github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk=
-github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis=
-github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8=
-github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0=
-github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 h1:iKclrn3YEOwk4jQHT2ulgzuXyxmzmPczUalMwW4XH9k=
-github.com/cosmos/cosmos-sdk/ics23/go v0.8.0/go.mod h1:2a4dBq88TUoqoWAU5eu0lGvpFP3wWDPgdHPargtyw30=
-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=
-github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4=
-github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI=
-github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y=
-github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw=
-github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok=
-github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw=
-github.com/cosmos/ibc-apps/modules/async-icq/v4 v4.0.0-20230524151648-c02fa46c2860 h1:25/KpA4WJqdFjKFsa3VEL0ctWRovkEsqIn2phCAi9v0=
-github.com/cosmos/ibc-apps/modules/async-icq/v4 v4.0.0-20230524151648-c02fa46c2860/go.mod h1:X/dLZ6QxTImzno7qvD6huLhh6ZZBcRt2URn4YCLcXFY=
-github.com/cosmos/ibc-go/v4 v4.3.1 h1:xbg0CaCdxK3lvgGvSaI91ROOLd7s30UqEcexH6Ba4Ys=
-github.com/cosmos/ibc-go/v4 v4.3.1/go.mod h1:89E+K9CxpkS/etLEcG026jPM/RSnVMcfesvRYp/0aKI=
-github.com/cosmos/interchain-accounts v0.2.6 h1:TV2M2g1/Rb9MCNw1YePdBKE0rcEczNj1RGHT+2iRYas=
-github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA=
-github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI=
-github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
-github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM=
-github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk=
-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/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
-github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo=
-github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc=
-github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
-github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
-github.com/daixiang0/gci v0.10.1 h1:eheNA3ljF6SxnPD/vE4lCBusVHmV3Rs3dkKvFrJ7MR0=
-github.com/daixiang0/gci v0.10.1/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI=
-github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
-github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
-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 v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo=
-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/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU=
-github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c=
-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.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk=
-github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8=
-github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M=
-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/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
-github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI=
-github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug=
-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.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/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M=
-github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE=
-github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
-github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
-github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-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/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac h1:opbrjaN/L8gg6Xh5D04Tem+8xVcz6ajZlGCs49mQgyg=
-github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM=
-github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
-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 v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA=
-github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0=
-github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0=
-github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw=
-github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY=
-github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0=
-github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A=
-github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk=
-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
-github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
-github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
-github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
-github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
-github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
-github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y=
-github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI=
-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/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
-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/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
-github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
-github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
-github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
-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.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
-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-critic/go-critic v0.7.0 h1:tqbKzB8pqi0NsRZ+1pyU4aweAF7A7QN0Pi4Q02+rYnQ=
-github.com/go-critic/go-critic v0.7.0/go.mod h1:moYzd7GdVXE2C2hYTwd7h0CPcqlUeclsyBRwMa38v64=
-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/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.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-kit/log v0.2.1/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/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-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-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
-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/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
-github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
-github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
-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.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
-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.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8=
-github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU=
-github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s=
-github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw=
-github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4=
-github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw=
-github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ=
-github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco=
-github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4=
-github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA=
-github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA=
-github.com/go-toolsmith/pkgload v1.2.2 h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk=
-github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
-github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw=
-github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ=
-github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus=
-github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig=
-github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U=
-github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
-github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
-github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
-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=
-github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
-github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
-github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
-github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
-github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-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/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
-github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
-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/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
-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/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
-github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
-github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/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 h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-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/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0=
-github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
-github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM=
-github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
-github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo=
-github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ=
-github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY=
-github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs=
-github.com/golangci/golangci-lint v1.52.2 h1:FrPElUUI5rrHXg1mQ7KxI1MXPAw5lBVskiz7U7a8a1A=
-github.com/golangci/golangci-lint v1.52.2/go.mod h1:S5fhC5sHM5kE22/HcATKd1XLWQxX+y7mHj8B5H91Q/0=
-github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y=
-github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA=
-github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg=
-github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA=
-github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o=
-github.com/golangci/misspell v0.4.0 h1:KtVB/hTK4bbL/S6bs64rYyk8adjmh1BygbBiaAiX+a0=
-github.com/golangci/misspell v0.4.0/go.mod h1:W6O/bwV6lGDxUCChm2ykw9NQdd5bYd1Xkjo88UcWyJc=
-github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ=
-github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs=
-github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys=
-github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
-github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
-github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
-github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=
-github.com/google/flatbuffers v1.12.1/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=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-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/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-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/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=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
-github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
-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/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-20230107090616-13ace0543b28 h1:9alfqbrhuD+9fLZ4iaAVwhlp5PEhmnBt7yvK2Oy5C1U=
-github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
-github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
-github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
-github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-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.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
-github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk=
-github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc=
-github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado=
-github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q=
-github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM=
-github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70=
-github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak=
-github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk=
-github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A=
-github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M=
-github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY=
-github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc=
-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=
-github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=
-github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
-github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
-github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
-github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is=
-github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
-github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc=
-github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o=
-github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
-github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
-github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
-github.com/hashicorp/errwrap v1.1.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-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.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
-github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-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-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=
-github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
-github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-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.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/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
-github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
-github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU=
-github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE=
-github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
-github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
-github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA=
-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/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/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA=
-github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
-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/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
-github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
-github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ=
-github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8=
-github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
-github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY=
-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/informalsystems/tendermint v0.34.24 h1:2beNEg5tp+U5oj/Md+0xDBsMHGbdue31T3OrstS6xS0=
-github.com/informalsystems/tendermint v0.34.24/go.mod h1:rXVrl4OYzmIa1I91av3iLv2HS0fGSiucyW9J4aMTpKI=
-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 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
-github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
-github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM=
-github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4=
-github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c h1:XImQJfpJLmGEEd8ll5yPVyL/aEvmgGHW4WYTyNseLOM=
-github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs=
-github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c=
-github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48=
-github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0=
-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=
-github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U=
-github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ=
-github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
-github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
-github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
-github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-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.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY=
-github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0=
-github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
-github.com/junk1tm/musttag v0.5.0 h1:bV1DTdi38Hi4pG4OVWa7Kap0hi0o7EczuK6wQt9zPOM=
-github.com/junk1tm/musttag v0.5.0/go.mod h1:PcR7BA+oREQYvHwgjIDmw3exJeds5JzRcvEJTfjrA0M=
-github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0=
-github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8=
-github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw=
-github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kkHAIKE/contextcheck v1.1.4 h1:B6zAaLhOEEcjvUgIYEqystmnFk1Oemn8bvJhbt0GMb8=
-github.com/kkHAIKE/contextcheck v1.1.4/go.mod h1:1+i/gWqokIa+dm31mqGLZhZJ7Uh44DJGZVmr6QRBNJg=
-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.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c=
-github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
-github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio=
-github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
-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/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=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/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/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs=
-github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I=
-github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g=
-github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes=
-github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ=
-github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA=
-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/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA=
-github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0=
-github.com/ldez/tagliatelle v0.4.0 h1:sylp7d9kh6AdXN2DpVGHBRb5guTVAgOxqNGhbqc4b1c=
-github.com/ldez/tagliatelle v0.4.0/go.mod h1:mNtTfrHy2haaBAw+VT7IBV6VXBThS7TCreYWbBcJ87I=
-github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
-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/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt8ivzU=
-github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY=
-github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
-github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
-github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
-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/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM=
-github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM=
-github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
-github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
-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/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI=
-github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE=
-github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04=
-github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc=
-github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE=
-github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s=
-github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
-github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
-github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
-github.com/mattn/go-colorable v0.0.9/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.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-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-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
-github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.4/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.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
-github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-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.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg=
-github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
-github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
-github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
-github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
-github.com/mattn/goveralls v0.0.3/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
-github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo=
-github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc=
-github.com/mgechev/revive v1.3.1 h1:OlQkcH40IB2cGuprTPcjB0iIUddgVZgGmDX3IAMR8D4=
-github.com/mgechev/revive v1.3.1/go.mod h1:YlD6TTWl2B8A103R9KWJSPVI9DrEf+oqr15q21Ld+5I=
-github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-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/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/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=
-github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
-github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
-github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
-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.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
-github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4=
-github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
-github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI=
-github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
-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=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-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/moricho/tparallel v0.3.1 h1:fQKD4U1wRMAYNngDonW5XupoB/ZGJHdpzrWqgyg9krA=
-github.com/moricho/tparallel v0.3.1/go.mod h1:leENX2cUv7Sv2qDgdi0D0fCftN8fRC67Bcn8pqzeYNI=
-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/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=
-github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo=
-github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U=
-github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE=
-github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0=
-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/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
-github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
-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/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
-github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA=
-github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8=
-github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/nishanths/exhaustive v0.9.5 h1:TzssWan6orBiLYVqewCG8faud9qlFntJE30ACpzmGME=
-github.com/nishanths/exhaustive v0.9.5/go.mod h1:IbwrGdVMizvDcIxPYGVdQn5BqWJaOwpCvg4RGb8r/TA=
-github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
-github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c=
-github.com/nunnatsa/ginkgolinter v0.9.0 h1:Sm0zX5QfjJzkeCjEp+t6d3Ha0jwvoDjleP9XCsrEzOA=
-github.com/nunnatsa/ginkgolinter v0.9.0/go.mod h1:FHaMLURXP7qImeH6bvxWJUpyH+2tuqe5j4rW1gxJRmI=
-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
-github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
-github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
-github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
-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.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
-github.com/onsi/ginkgo/v2 v2.8.0 h1:pAM+oBNPrpXRs+E/8spkeGx9QgekbRVyr74EUvRVOUI=
-github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q=
-github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
-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.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034=
-github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ=
-github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs=
-github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg=
-github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
-github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
-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/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/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA=
-github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4=
-github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg=
-github.com/osmosis-labs/cosmos-sdk v0.45.1-0.20230603004404-93d9d4851b92 h1:BedgZf5yT5jYTrYsUJc7JF+4PXw2P/W0uuXHdG7MNho=
-github.com/osmosis-labs/cosmos-sdk v0.45.1-0.20230603004404-93d9d4851b92/go.mod h1:9KGhMg+7ZWgZ50Wa/x8w/jN19O0TSqYLlqUj+2wwxLU=
-github.com/osmosis-labs/go-mutesting v0.0.0-20221208041716-b43bcd97b3b3 h1:YlmchqTmlwdWSmrRmXKR+PcU96ntOd8u10vTaTZdcNY=
-github.com/osmosis-labs/go-mutesting v0.0.0-20221208041716-b43bcd97b3b3/go.mod h1:lV6KnqXYD/ayTe7310MHtM3I2q8Z6bBfMAi+bhwPYtI=
-github.com/osmosis-labs/osmosis/osmomath v0.0.3-dev.0.20230516205127-c213fddde069 h1:ZgDrTJ2GCH4CJGbV6rudw4O9rPMAuwWoLVZnG6cUr+A=
-github.com/osmosis-labs/osmosis/osmomath v0.0.3-dev.0.20230516205127-c213fddde069/go.mod h1:a7lhiXRpn8QJ21OhFpaEnUNErTSIafaYpp02q6uI/Dk=
-github.com/osmosis-labs/osmosis/osmoutils v0.0.0-20230608190634-3395abe098ce h1:RulJTKTrptrWjWb84wyNGTxoVnXcwIzEAl6cK0bBImc=
-github.com/osmosis-labs/osmosis/osmoutils v0.0.0-20230608190634-3395abe098ce/go.mod h1:FqFOfj9+e5S1I7hR3baGUHrqje3g32EOHAXoOf7R00M=
-github.com/osmosis-labs/osmosis/x/epochs v0.0.0-20230328024000-175ec88e4304 h1:RIrWLzIiZN5Xd2JOfSOtGZaf6V3qEQYg6EaDTAkMnCo=
-github.com/osmosis-labs/osmosis/x/epochs v0.0.0-20230328024000-175ec88e4304/go.mod h1:yPWoJTj5RKrXKUChAicp+G/4Ni/uVEpp27mi/FF/L9c=
-github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.0-20230602130523-f9a94d8bbd10 h1:XrES5AHZMZ/Y78boW35PTignkhN9h8VvJ1sP8EJDIu8=
-github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.0-20230602130523-f9a94d8bbd10/go.mod h1:Ln6CKcXg/CJLSBE6Fd96/MIKPyA4iHuQTKSbl9q7vYo=
-github.com/osmosis-labs/wasmd v0.31.0-osmo-v16 h1:X747cZYdnqc/+RV48iPVeGprpVb/fUWSaKGsZUWrdbg=
-github.com/osmosis-labs/wasmd v0.31.0-osmo-v16/go.mod h1:Rf8zW/GgBQyFRRB4s62VQHWA6sTlMFSjoDQQpoq64iI=
-github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw=
-github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE=
-github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
-github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
-github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
-github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
-github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
-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 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/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
-github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
-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/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/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.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
-github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ=
-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/polyfloyd/go-errorlint v1.4.0 h1:b+sQ5HibPIAjEZwtuwU8Wz/u0dMZ7YL+bk+9yWyHVJk=
-github.com/polyfloyd/go-errorlint v1.4.0/go.mod h1:qJCkPeBn+0EXkdKTrUCcuFStM2xrDKfxI3MGLXPexUs=
-github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
-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 v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
-github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI=
-github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
-github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
-github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.2.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.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.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM=
-github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
-github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
-github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
-github.com/quasilyte/go-ruleguard v0.3.19 h1:tfMnabXle/HzOb5Xe9CUZYWXKfkS1KwRmZyPmD9nVcc=
-github.com/quasilyte/go-ruleguard v0.3.19/go.mod h1:lHSn69Scl48I7Gt9cX3VrbsZYvYiBYszZOZW4A+oTEw=
-github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
-github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng=
-github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU=
-github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
-github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs=
-github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ=
-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=
-github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
-github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg=
-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/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
-github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-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.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
-github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U=
-github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
-github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs=
-github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U=
-github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
-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/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw=
-github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50=
-github.com/ryanrolds/sqlclosecheck v0.4.0 h1:i8SX60Rppc1wRuyQjMciLqIzV3xnoHB7/tXbr6RGYNI=
-github.com/ryanrolds/sqlclosecheck v0.4.0/go.mod h1:TBRRjzL31JONc9i4XMinicuo+s+E8yKZ5FN8X3G6CKQ=
-github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
-github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
-github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc=
-github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI=
-github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
-github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
-github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw=
-github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ=
-github.com/sashamelentyev/usestdlibvars v1.23.0 h1:01h+/2Kd+NblNItNeux0veSL5cBF1jbEOPrEhDzGYq0=
-github.com/sashamelentyev/usestdlibvars v1.23.0/go.mod h1:YPwr/Y1LATzHI93CqoPUN/2BzGQ/6N/cl/KwgR0B/aU=
-github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
-github.com/securego/gosec/v2 v2.15.0 h1:v4Ym7FF58/jlykYmmhZ7mTm7FQvN/setNm++0fgIAtw=
-github.com/securego/gosec/v2 v2.15.0/go.mod h1:VOjTrZOkUtSDt2QLSJmQBMWnvwiQPEjg0l+5juIqGk8=
-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/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU=
-github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs=
-github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
-github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
-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.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
-github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI=
-github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw=
-github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8=
-github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY=
-github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak=
-github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/sonatard/noctx v0.0.2 h1:L7Dz4De2zDQhW8S0t+KUjY0MAQJd6SgVwhzNIc4ok00=
-github.com/sonatard/noctx v0.0.2/go.mod h1:kzFz+CzWSjQ2OzIm46uJZoXuBpa2+0y3T36U18dWqIo=
-github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
-github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0=
-github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-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.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
-github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
-github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
-github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
-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.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
-github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
-github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-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.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
-github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
-github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0=
-github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I=
-github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
-github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc=
-github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I=
-github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.5 h1:KKUqeGhVBK38+1LwThC8IeIcsJZ6COX5kvhiJroFqCM=
-github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.5/go.mod h1:4zAtg449/JISRmf+sbmqolqSLP+QJBh+EtWkWtt/AKE=
-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/handy v0.0.0-20190108123426-d5acb3125c2a/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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-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=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
-github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
-github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
-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/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8=
-github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk=
-github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM=
-github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg=
-github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s=
-github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U=
-github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI=
-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/tm-db v0.6.8-0.20220506192307-f628bb5dc95b h1:Y3ZPG6gdDCAV2sdGkD759ji/09GzaNu1X3qKTmZIbTo=
-github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b/go.mod h1:ADqbS9NOSnBRK9R2RtYC61CdsHmVMD/yXAzcMuPexbU=
-github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA=
-github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0=
-github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag=
-github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY=
-github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw=
-github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8=
-github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
-github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
-github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM=
-github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
-github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
-github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
-github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
-github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM=
-github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo=
-github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ=
-github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4=
-github.com/timonwong/loggercheck v0.9.4/go.mod h1:caz4zlPcgvpEkXgVnAJGowHAMW2NwHaNlpS8xDbVhTg=
-github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
-github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg=
-github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI=
-github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/tomarrell/wrapcheck/v2 v2.8.1 h1:HxSqDSN0sAt0yJYsrcYVoEeyM4aI9yAm3KQpIXDJRhQ=
-github.com/tomarrell/wrapcheck/v2 v2.8.1/go.mod h1:/n2Q3NZ4XFT50ho6Hbxg+RV1uyo2Uow/Vdm9NQcl5SE=
-github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw=
-github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw=
-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/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
-github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
-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.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=
-github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
-github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA=
-github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA=
-github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI=
-github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA=
-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/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y=
-github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY=
-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/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.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=
-github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
-github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
-github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
-github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
-github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
-github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
-github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
-github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
-github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
-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/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM=
-github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk=
-github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE=
-github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o=
-github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/zimmski/go-mutesting v0.0.0-20210610104036-6d9217011a00 h1:KNiPkpQpqXvq40f8hh/1T7QasLJT/1MuBoOYA2vlxJk=
-github.com/zimmski/go-mutesting v0.0.0-20210610104036-6d9217011a00/go.mod h1:RJt5SMnyha63GbdwCKJiX9djvvEC4KsfXJSZ5oTmSPw=
-github.com/zimmski/go-tool v0.0.0-20150119110811-2dfdc9ac8439 h1:yHqsjUkj0HWbKPw/6ZqC0/eMklaRpqubA199vaRLzzE=
-github.com/zimmski/go-tool v0.0.0-20150119110811-2dfdc9ac8439/go.mod h1:G4FVqCRvfz74AEB1crDNdQuvMfOoKtk7DlePsnV2yGs=
-github.com/zimmski/osutil v0.0.0-20190128123334-0d0b3ca231ac h1:uiFRlKzyIzHeLOthe0ethUkSGW7POlqxU3Tc21R8QpQ=
-github.com/zimmski/osutil v0.0.0-20190128123334-0d0b3ca231ac/go.mod h1:wJ9WGevuM/rw8aB2pQPFMUgXZWeaouI0ueFamR0DUPE=
-github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo=
-github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
-github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c=
-github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320=
-gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0=
-gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE=
-go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-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.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=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
-go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
-go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-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.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
-go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
-go.uber.org/goleak v1.1.12/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.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
-go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
-go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
-golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
-golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
-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=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-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-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-20201221181555-eec23a3978ad/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-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
-golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
-golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
-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=
-golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 h1:BEABXpNXLEz0WxtA+6CQIz2xkg80e+1zrhWyMcq8VzE=
-golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
-golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2 h1:J74nGeMgeFnYQJN59eFwh06jX/V8g0lB7LWpjSLxtgU=
-golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
-golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
-golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-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=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-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-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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-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-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
-golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
-golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/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-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-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-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-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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-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-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-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/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-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-20210510120138-977fb7262007/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-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-20210809222454-d867a43fc93e/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-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/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-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/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-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
-golang.org/x/sys v0.8.0/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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
-golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
-golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-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/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/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-20190910044552-dd2b5c81c578/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-20191018212557-ed542cd5b28a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-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-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/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-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
-golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/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-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-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
-golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
-golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
-golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
-golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
-golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
-golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
-golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k=
-golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
-golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-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/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=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
-google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
-google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
-google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
-google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-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=
-google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-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=
-google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/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-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
-google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
-google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
-google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-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-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.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
-gopkg.in/ini.v1 v1.67.0/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=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
-gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
-gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
-gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
-gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
-honnef.co/go/tools v0.4.3 h1:o/n5/K5gXqk8Gozvs2cnL0F2S1/g1vcGCAx2vETjITw=
-honnef.co/go/tools v0.4.3/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA=
-mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E=
-mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js=
-mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I=
-mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
-mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo=
-mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
-mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w=
-mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is=
-nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
-nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
-nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
-rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-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=
-rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA=
-sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/andromeda-core/ci-scripts/localrelayer/go.work b/andromeda-core/ci-scripts/localrelayer/go.work
deleted file mode 100644
index df8f616..0000000
--- a/andromeda-core/ci-scripts/localrelayer/go.work
+++ /dev/null
@@ -1,15 +0,0 @@
-go 1.20
-
-use ./osmomath
-
-use ./osmoutils
-
-use ./x/ibc-hooks
-
-use ./tests/cl-go-client
-
-use ./tests/cl-genesis-positions
-
-use .
-
-use ./x/epochs
diff --git a/andromeda-core/ci-scripts/localrelayer/scripts/setup_chain.sh b/andromeda-core/ci-scripts/localrelayer/scripts/setup_chain.sh
deleted file mode 100755
index 2930071..0000000
--- a/andromeda-core/ci-scripts/localrelayer/scripts/setup_chain.sh
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/sh
-set -eo pipefail
-
-DEFAULT_CHAIN_ID="localosmosis"
-DEFAULT_VALIDATOR_MONIKER="validator"
-DEFAULT_VALIDATOR_MNEMONIC="bottom loan skill merry east cradle onion journey palm apology verb edit desert impose absurd oil bubble sweet glove shallow size build burst effort"
-DEFAULT_FAUCET_MNEMONIC="increase bread alpha rigid glide amused approve oblige print asset idea enact lawn proof unfold jeans rabbit audit return chuckle valve rather cactus great"
-DEFAULT_RELAYER_MNEMONIC="black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken"
-
-# Override default values with environment variables
-CHAIN_ID=${CHAIN_ID:-$DEFAULT_CHAIN_ID}
-VALIDATOR_MONIKER=${VALIDATOR_MONIKER:-$DEFAULT_VALIDATOR_MONIKER}
-VALIDATOR_MNEMONIC=${VALIDATOR_MNEMONIC:-$DEFAULT_VALIDATOR_MNEMONIC}
-FAUCET_MNEMONIC=${FAUCET_MNEMONIC:-$DEFAULT_FAUCET_MNEMONIC}
-RELAYER_MNEMONIC=${RELAYER_MNEMONIC:-$DEFAULT_RELAYER_MNEMONIC}
-
-OSMOSIS_HOME=$HOME/.osmosisd
-CONFIG_FOLDER=$OSMOSIS_HOME/config
-
-install_prerequisites () {
- apk add dasel
-}
-
-edit_genesis () {
-
- GENESIS=$CONFIG_FOLDER/genesis.json
-
- # Update staking module
- dasel put string -f $GENESIS '.app_state.staking.params.bond_denom' 'uosmo'
- dasel put string -f $GENESIS '.app_state.staking.params.unbonding_time' '240s'
-
- # Update crisis module
- dasel put string -f $GENESIS '.app_state.crisis.constant_fee.denom' 'uosmo'
-
- # Udpate gov module
- dasel put string -f $GENESIS '.app_state.gov.voting_params.voting_period' '60s'
- dasel put string -f $GENESIS '.app_state.gov.deposit_params.min_deposit.[0].denom' 'uosmo'
-
- # Update epochs module
- dasel put string -f $GENESIS '.app_state.epochs.epochs.[1].duration' "60s"
-
- # Update poolincentives module
- dasel put string -f $GENESIS '.app_state.poolincentives.lockable_durations.[0]' "120s"
- dasel put string -f $GENESIS '.app_state.poolincentives.lockable_durations.[1]' "180s"
- dasel put string -f $GENESIS '.app_state.poolincentives.lockable_durations.[2]' "240s"
- dasel put string -f $GENESIS '.app_state.poolincentives.params.minted_denom' "uosmo"
-
- # Update incentives module
- dasel put string -f $GENESIS '.app_state.incentives.lockable_durations.[0]' "1s"
- dasel put string -f $GENESIS '.app_state.incentives.lockable_durations.[1]' "120s"
- dasel put string -f $GENESIS '.app_state.incentives.lockable_durations.[2]' "180s"
- dasel put string -f $GENESIS '.app_state.incentives.lockable_durations.[3]' "240s"
- dasel put string -f $GENESIS '.app_state.incentives.params.distr_epoch_identifier' "day"
-
- # Update mint module
- dasel put string -f $GENESIS '.app_state.mint.params.mint_denom' "uosmo"
- dasel put string -f $GENESIS '.app_state.mint.params.epoch_identifier' "day"
-
- # Update gamm module
- dasel put string -f $GENESIS '.app_state.gamm.params.pool_creation_fee.[0].denom' "uosmo"
-
- # Update txfee basedenom
- dasel put string -f $GENESIS '.app_state.txfees.basedenom' "uosmo"
-
- # Update wasm permission (Nobody or Everybody)
- dasel put string -f $GENESIS '.app_state.wasm.params.code_upload_access.permission' "Everybody"
-}
-
-add_genesis_accounts () {
-
- # Validator
- echo "⚖️ Add validator account"
- echo $VALIDATOR_MNEMONIC | osmosisd keys add $VALIDATOR_MONIKER --recover --keyring-backend=test --home $OSMOSIS_HOME
- VALIDATOR_ACCOUNT=$(osmosisd keys show -a $VALIDATOR_MONIKER --keyring-backend test --home $OSMOSIS_HOME)
- osmosisd add-genesis-account $VALIDATOR_ACCOUNT 100000000000uosmo,100000000000uion,100000000000stake --home $OSMOSIS_HOME
-
- # Faucet
- echo "🚰 Add faucet account"
- echo $FAUCET_MNEMONIC | osmosisd keys add faucet --recover --keyring-backend=test --home $OSMOSIS_HOME
- FAUCET_ACCOUNT=$(osmosisd keys show -a faucet --keyring-backend test --home $OSMOSIS_HOME)
- osmosisd add-genesis-account $FAUCET_ACCOUNT 100000000000uosmo,100000000000uion,100000000000stake --home $OSMOSIS_HOME
-
- # Relayer
- echo "🔗 Add relayer account"
- echo $RELAYER_MNEMONIC | osmosisd keys add relayer --recover --keyring-backend=test --home $OSMOSIS_HOME
- RELAYER_ACCOUNT=$(osmosisd keys show -a relayer --keyring-backend test --home $OSMOSIS_HOME)
- osmosisd add-genesis-account $RELAYER_ACCOUNT 1000000000uosmo,1000000000uion,1000000000stake --home $OSMOSIS_HOME
-
- osmosisd gentx $VALIDATOR_MONIKER 500000000uosmo --keyring-backend=test --chain-id=$CHAIN_ID --home $OSMOSIS_HOME
- osmosisd collect-gentxs --home $OSMOSIS_HOME
-}
-
-edit_config () {
- # Remove seeds
- dasel put string -f $CONFIG_FOLDER/config.toml '.p2p.seeds' ''
-
- # Expose the rpc
- dasel put string -f $CONFIG_FOLDER/config.toml '.rpc.laddr' "tcp://0.0.0.0:26657"
-
- dasel put string -f $CONFIG_FOLDER/config.toml '.consensus.timeout_commit' "1000ms"
-}
-
-if [[ ! -d $CONFIG_FOLDER ]]
-then
- install_prerequisites
- echo "🧪 Creating Osmosis home for $VALIDATOR_MONIKER"
- echo $VALIDATOR_MNEMONIC | osmosisd init -o --chain-id=$CHAIN_ID --home $OSMOSIS_HOME --recover $VALIDATOR_MONIKER
- edit_genesis
- add_genesis_accounts
- edit_config
-fi
-
-echo "🏁 Starting $CHAIN_ID..."
-osmosisd start --home $OSMOSIS_HOME
diff --git a/andromeda-core/ci-scripts/localrelayer/scripts/setup_hermes.sh b/andromeda-core/ci-scripts/localrelayer/scripts/setup_hermes.sh
deleted file mode 100755
index 5bd17b2..0000000
--- a/andromeda-core/ci-scripts/localrelayer/scripts/setup_hermes.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/sh
-set -e
-
-DEFAULT_CHAIN_A_ID="localosmosis-a"
-DEFAULT_CHAIN_A_MNEMONIC="black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken"
-DEFAULT_CHAIN_B_ID="localosmosis-b"
-DEFAULT_CHAIN_B_MNEMONIC="black frequent sponsor nice claim rally hunt suit parent size stumble expire forest avocado mistake agree trend witness lounge shiver image smoke stool chicken"
-
-CHAIN_A_MNEMONIC=${CHAIN_A_MNEMONIC:-$DEFAULT_CHAIN_A_MNEMONIC}
-CHAIN_A_ID=${CHAIN_A_ID:-$DEFAULT_CHAIN_A_ID}
-CHAIN_B_MNEMONIC=${CHAIN_B_MNEMONIC:-$DEFAULT_CHAIN_B_MNEMONIC}
-CHAIN_B_ID=${CHAIN_B_ID:-$DEFAULT_CHAIN_B_ID}
-
-install_prerequisites(){
- echo "🧰 Install prerequisites"
- apt update
- apt -y install curl
-}
-
-add_keys(){
-
- echo "🔑 Adding key for $CHAIN_A_ID"
- mkdir -p /home/hermes/mnemonics/
- echo $CHAIN_A_MNEMONIC > /home/hermes/mnemonics/$CHAIN_A_ID
-
- hermes keys add \
- --chain $CHAIN_A_ID \
- --mnemonic-file /home/hermes/mnemonics/$CHAIN_A_ID \
- --key-name $CHAIN_A_ID \
- --overwrite
-
- echo "🔑 Adding key for $CHAIN_B_ID"
- echo $CHAIN_B_MNEMONIC > /home/hermes/mnemonics/$CHAIN_B_ID
-
- hermes keys add \
- --chain $CHAIN_B_ID \
- --mnemonic-file /home/hermes/mnemonics/$CHAIN_B_ID \
- --key-name $CHAIN_B_ID \
- --overwrite
-}
-
-create_channel(){
- echo "🥱 Waiting for $CHAIN_A_ID to start"
- COUNTER=0
- until $(curl --output /dev/null --silent --head --fail http://$CHAIN_A_ID:26657/status); do
- printf '.'
- sleep 2
- done
-
- echo "🥱 Waiting for $CHAIN_B_ID to start"
- COUNTER=0
- until $(curl --output /dev/null --silent --head --fail http://$CHAIN_B_ID:26657/status); do
- printf '.'
- sleep 5
- done
-
- echo "📺 Creating channel $CHAIN_A_ID <> $CHAIN_B_ID"
- hermes create channel \
- --a-chain $CHAIN_A_ID \
- --b-chain $CHAIN_B_ID \
- --a-port transfer \
- --b-port transfer \
- --new-client-connection --yes
-}
-
-install_prerequisites
-add_keys
-create_channel
-
-echo "✉️ Start Hermes"
-hermes start
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/Cargo.toml b/andromeda-core/contracts/app/andromeda-app-contract/Cargo.toml
index fc6916b..892376d 100644
--- a/andromeda-core/contracts/app/andromeda-app-contract/Cargo.toml
+++ b/andromeda-core/contracts/app/andromeda-app-contract/Cargo.toml
@@ -1,8 +1,8 @@
[package]
name = "andromeda-app-contract"
-version = "0.2.1"
+version = "1.1.2"
edition = "2021"
-rust-version = "1.65.0"
+rust-version = "1.75.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -13,18 +13,14 @@ crate-type = ["cdylib", "rlib"]
cosmwasm-std = { workspace = true }
cosmwasm-schema = { workspace = true }
cw-storage-plus = { workspace = true }
-cw2 = { workspace = true }
-semver = { workspace = true }
-andromeda-app = { path = "../../../packages/andromeda-app" }
-andromeda-std = { workspace = true, features = ["instantiate"] }
+andromeda-app = { workspace = true }
+andromeda-std = { workspace = true }
enum-repr = { workspace = true }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
cw-multi-test = { workspace = true, optional = true }
-andromeda-testing = { workspace = true }
+andromeda-testing = { workspace = true, optional = true }
-[dev-dependencies]
-prost = "0.9"
[features]
-testing = ["cw-multi-test"]
+testing = ["cw-multi-test", "andromeda-testing"]
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/README.md b/andromeda-core/contracts/app/andromeda-app-contract/README.md
new file mode 100644
index 0000000..0e3d80f
--- /dev/null
+++ b/andromeda-core/contracts/app/andromeda-app-contract/README.md
@@ -0,0 +1,6 @@
+# Overview
+
+The App ADO is a smart contract that is used to bundle up ADOs that will be interacting with each other into what we call an "App". It also offers a naming system that allows the contracts to reference each other by their assigned names rather than contract addresses.
+An ADO in the App is called an AppComponent. Every App would be composed of many of these components (up to 50). Each component is assigned a name which can be used by other components to reference each other. The App ADO allows us to instantiate all of these components in one go.
+
+[App Full Documentation](https://docs.andromedaprotocol.io/andromeda/andromeda-digital-objects/app)
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/andromeda-app-contract.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/andromeda-app-contract.json
deleted file mode 100644
index 71ed5b9..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/andromeda-app-contract.json
+++ /dev/null
@@ -1,2025 +0,0 @@
-{
- "contract_name": "andromeda-app-contract",
- "contract_version": "0.2.1",
- "idl_version": "1.0.0",
- "instantiate": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "InstantiateMsg",
- "type": "object",
- "required": [
- "app_components",
- "kernel_address",
- "name"
- ],
- "properties": {
- "app_components": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/AppComponent"
- }
- },
- "chain_info": {
- "type": [
- "array",
- "null"
- ],
- "items": {
- "$ref": "#/definitions/ChainInfo"
- }
- },
- "kernel_address": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "owner": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false,
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AppComponent": {
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "ChainInfo": {
- "type": "object",
- "required": [
- "chain_name",
- "owner"
- ],
- "properties": {
- "chain_name": {
- "type": "string"
- },
- "owner": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- }
- }
- },
- "execute": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ExecuteMsg",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "add_app_component"
- ],
- "properties": {
- "add_app_component": {
- "type": "object",
- "required": [
- "component"
- ],
- "properties": {
- "component": {
- "$ref": "#/definitions/AppComponent"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "claim_ownership"
- ],
- "properties": {
- "claim_ownership": {
- "type": "object",
- "properties": {
- "name": {
- "type": [
- "string",
- "null"
- ]
- },
- "new_owner": {
- "anyOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "proxy_message"
- ],
- "properties": {
- "proxy_message": {
- "type": "object",
- "required": [
- "msg",
- "name"
- ],
- "properties": {
- "msg": {
- "$ref": "#/definitions/Binary"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_address"
- ],
- "properties": {
- "update_address": {
- "type": "object",
- "required": [
- "addr",
- "name"
- ],
- "properties": {
- "addr": {
- "type": "string"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "assign_app_to_components"
- ],
- "properties": {
- "assign_app_to_components": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "amp_receive"
- ],
- "properties": {
- "amp_receive": {
- "$ref": "#/definitions/AMPPkt"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_owner"
- ],
- "properties": {
- "update_owner": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_operators"
- ],
- "properties": {
- "update_operators": {
- "type": "object",
- "required": [
- "operators"
- ],
- "properties": {
- "operators": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_app_contract"
- ],
- "properties": {
- "update_app_contract": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "set_permission"
- ],
- "properties": {
- "set_permission": {
- "type": "object",
- "required": [
- "action",
- "actor",
- "permission"
- ],
- "properties": {
- "action": {
- "type": "string"
- },
- "actor": {
- "$ref": "#/definitions/AndrAddr"
- },
- "permission": {
- "$ref": "#/definitions/Permission"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "remove_permission"
- ],
- "properties": {
- "remove_permission": {
- "type": "object",
- "required": [
- "action",
- "actor"
- ],
- "properties": {
- "action": {
- "type": "string"
- },
- "actor": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "permission_action"
- ],
- "properties": {
- "permission_action": {
- "type": "object",
- "required": [
- "action"
- ],
- "properties": {
- "action": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "register_module"
- ],
- "properties": {
- "register_module": {
- "type": "object",
- "required": [
- "module"
- ],
- "properties": {
- "module": {
- "$ref": "#/definitions/Module"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "deregister_module"
- ],
- "properties": {
- "deregister_module": {
- "type": "object",
- "required": [
- "module_idx"
- ],
- "properties": {
- "module_idx": {
- "$ref": "#/definitions/Uint64"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "alter_module"
- ],
- "properties": {
- "alter_module": {
- "type": "object",
- "required": [
- "module",
- "module_idx"
- ],
- "properties": {
- "module": {
- "$ref": "#/definitions/Module"
- },
- "module_idx": {
- "$ref": "#/definitions/Uint64"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ],
- "definitions": {
- "AMPCtx": {
- "type": "object",
- "required": [
- "id",
- "origin",
- "previous_sender"
- ],
- "properties": {
- "id": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- },
- "origin": {
- "type": "string"
- },
- "origin_username": {
- "anyOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- },
- {
- "type": "null"
- }
- ]
- },
- "previous_sender": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "AMPMsg": {
- "description": "This struct defines how the kernel parses and relays messages between ADOs If the desired recipient is via IBC then namespacing must be employed The attached message must be a binary encoded execute message for the receiving ADO Funds can be attached for an individual message and will be attached accordingly",
- "type": "object",
- "required": [
- "config",
- "funds",
- "message",
- "recipient"
- ],
- "properties": {
- "config": {
- "description": "When the message should reply, defaults to Always",
- "allOf": [
- {
- "$ref": "#/definitions/AMPMsgConfig"
- }
- ]
- },
- "funds": {
- "description": "Any funds to be attached to the message, defaults to an empty vector",
- "type": "array",
- "items": {
- "$ref": "#/definitions/Coin"
- }
- },
- "message": {
- "description": "The message to be sent to the recipient",
- "allOf": [
- {
- "$ref": "#/definitions/Binary"
- }
- ]
- },
- "recipient": {
- "description": "The message recipient, can be a contract/wallet address or a namespaced URI",
- "allOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- "AMPMsgConfig": {
- "description": "The configuration of the message to be sent.\n\nUsed when a sub message is generated for the given AMP Msg (only used in the case of Wasm Messages).",
- "type": "object",
- "required": [
- "direct",
- "exit_at_error",
- "reply_on"
- ],
- "properties": {
- "direct": {
- "description": "Whether to send the message directly to the given recipient",
- "type": "boolean"
- },
- "exit_at_error": {
- "description": "Determines whether the operation should terminate or proceed upon a failed message",
- "type": "boolean"
- },
- "gas_limit": {
- "description": "An optional imposed gas limit for the message",
- "type": [
- "integer",
- "null"
- ],
- "format": "uint64",
- "minimum": 0.0
- },
- "ibc_config": {
- "anyOf": [
- {
- "$ref": "#/definitions/IBCConfig"
- },
- {
- "type": "null"
- }
- ]
- },
- "reply_on": {
- "description": "When the message should reply, defaults to Always",
- "allOf": [
- {
- "$ref": "#/definitions/ReplyOn"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- "AMPPkt": {
- "description": "An Andromeda packet contains all message protocol related data, this is what is sent between ADOs when communicating It contains an original sender, if used for authorisation the sender must be authorised The previous sender is the one who sent the message A packet may contain several messages which allows for message batching",
- "type": "object",
- "required": [
- "ctx",
- "messages"
- ],
- "properties": {
- "ctx": {
- "$ref": "#/definitions/AMPCtx"
- },
- "messages": {
- "description": "Any messages associated with the packet",
- "type": "array",
- "items": {
- "$ref": "#/definitions/AMPMsg"
- }
- }
- },
- "additionalProperties": false
- },
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AppComponent": {
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "Coin": {
- "type": "object",
- "required": [
- "amount",
- "denom"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Uint128"
- },
- "denom": {
- "type": "string"
- }
- }
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- "Expiration": {
- "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
- "oneOf": [
- {
- "description": "AtHeight will expire when `env.block.height` >= height",
- "type": "object",
- "required": [
- "at_height"
- ],
- "properties": {
- "at_height": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- },
- {
- "description": "AtTime will expire when `env.block.time` >= time",
- "type": "object",
- "required": [
- "at_time"
- ],
- "properties": {
- "at_time": {
- "$ref": "#/definitions/Timestamp"
- }
- },
- "additionalProperties": false
- },
- {
- "description": "Never will never expire. Used to express the empty variant",
- "type": "object",
- "required": [
- "never"
- ],
- "properties": {
- "never": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "IBCConfig": {
- "type": "object",
- "properties": {
- "recovery_addr": {
- "anyOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- "Module": {
- "description": "A struct describing a token module, provided with the instantiation message this struct is used to record the info about the module and how/if it should be instantiated",
- "type": "object",
- "required": [
- "address",
- "is_mutable"
- ],
- "properties": {
- "address": {
- "$ref": "#/definitions/AndrAddr"
- },
- "is_mutable": {
- "type": "boolean"
- },
- "name": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false
- },
- "Permission": {
- "description": "An enum to represent a user's permission for an action\n\n- **Blacklisted** - The user cannot perform the action until after the provided expiration - **Limited** - The user can perform the action while uses are remaining and before the provided expiration **for a permissioned action** - **Whitelisted** - The user can perform the action until the provided expiration **for a permissioned action**\n\nExpiration defaults to `Never` if not provided",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "blacklisted"
- ],
- "properties": {
- "blacklisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "limited"
- ],
- "properties": {
- "limited": {
- "type": "object",
- "required": [
- "uses"
- ],
- "properties": {
- "expiration": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- },
- "uses": {
- "type": "integer",
- "format": "uint32",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "whitelisted"
- ],
- "properties": {
- "whitelisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "ReplyOn": {
- "description": "Use this to define when the contract gets a response callback. If you only need it for errors or success you can select just those in order to save gas.",
- "oneOf": [
- {
- "description": "Always perform a callback after SubMsg is processed",
- "type": "string",
- "enum": [
- "always"
- ]
- },
- {
- "description": "Only callback if SubMsg returned an error, no callback on success case",
- "type": "string",
- "enum": [
- "error"
- ]
- },
- {
- "description": "Only callback if SubMsg was successful, no callback on error case",
- "type": "string",
- "enum": [
- "success"
- ]
- },
- {
- "description": "Never make a callback - this is like the original CosmosMsg semantics",
- "type": "string",
- "enum": [
- "never"
- ]
- }
- ]
- },
- "Timestamp": {
- "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
- "allOf": [
- {
- "$ref": "#/definitions/Uint64"
- }
- ]
- },
- "Uint128": {
- "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
- "type": "string"
- },
- "Uint64": {
- "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
- "type": "string"
- }
- }
- },
- "query": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "QueryMsg",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "get_address"
- ],
- "properties": {
- "get_address": {
- "type": "object",
- "required": [
- "name"
- ],
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "get_components"
- ],
- "properties": {
- "get_components": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "component_exists"
- ],
- "properties": {
- "component_exists": {
- "type": "object",
- "required": [
- "name"
- ],
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "get_addresses_with_names"
- ],
- "properties": {
- "get_addresses_with_names": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "config"
- ],
- "properties": {
- "config": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "owner"
- ],
- "properties": {
- "owner": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "operators"
- ],
- "properties": {
- "operators": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "type"
- ],
- "properties": {
- "type": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "kernel_address"
- ],
- "properties": {
- "kernel_address": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "original_publisher"
- ],
- "properties": {
- "original_publisher": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "block_height_upon_creation"
- ],
- "properties": {
- "block_height_upon_creation": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "is_operator"
- ],
- "properties": {
- "is_operator": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "version"
- ],
- "properties": {
- "version": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "balance"
- ],
- "properties": {
- "balance": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "permissions"
- ],
- "properties": {
- "permissions": {
- "type": "object",
- "required": [
- "actor"
- ],
- "properties": {
- "actor": {
- "type": "string"
- },
- "limit": {
- "type": [
- "integer",
- "null"
- ],
- "format": "uint32",
- "minimum": 0.0
- },
- "start_after": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "permissioned_actions"
- ],
- "properties": {
- "permissioned_actions": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "module"
- ],
- "properties": {
- "module": {
- "type": "object",
- "required": [
- "id"
- ],
- "properties": {
- "id": {
- "$ref": "#/definitions/Uint64"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "module_ids"
- ],
- "properties": {
- "module_ids": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "andr_hook"
- ],
- "properties": {
- "andr_hook": {
- "$ref": "#/definitions/AndromedaHook"
- }
- },
- "additionalProperties": false
- }
- ],
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AndromedaHook": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "on_execute"
- ],
- "properties": {
- "on_execute": {
- "type": "object",
- "required": [
- "payload",
- "sender"
- ],
- "properties": {
- "payload": {
- "$ref": "#/definitions/Binary"
- },
- "sender": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "on_funds_transfer"
- ],
- "properties": {
- "on_funds_transfer": {
- "type": "object",
- "required": [
- "amount",
- "payload",
- "sender"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Funds"
- },
- "payload": {
- "$ref": "#/definitions/Binary"
- },
- "sender": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "on_token_transfer"
- ],
- "properties": {
- "on_token_transfer": {
- "type": "object",
- "required": [
- "recipient",
- "sender",
- "token_id"
- ],
- "properties": {
- "recipient": {
- "type": "string"
- },
- "sender": {
- "type": "string"
- },
- "token_id": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "Coin": {
- "type": "object",
- "required": [
- "amount",
- "denom"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Uint128"
- },
- "denom": {
- "type": "string"
- }
- }
- },
- "Cw20Coin": {
- "type": "object",
- "required": [
- "address",
- "amount"
- ],
- "properties": {
- "address": {
- "type": "string"
- },
- "amount": {
- "$ref": "#/definitions/Uint128"
- }
- },
- "additionalProperties": false
- },
- "Funds": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "native"
- ],
- "properties": {
- "native": {
- "$ref": "#/definitions/Coin"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cw20"
- ],
- "properties": {
- "cw20": {
- "$ref": "#/definitions/Cw20Coin"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "Uint128": {
- "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
- "type": "string"
- },
- "Uint64": {
- "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
- "type": "string"
- }
- }
- },
- "migrate": null,
- "sudo": null,
- "responses": {
- "andr_hook": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Binary",
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "balance": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "BalanceResponse",
- "type": "object",
- "required": [
- "amount"
- ],
- "properties": {
- "amount": {
- "description": "Always returns a Coin with the requested denom. This may be of 0 amount if no such funds.",
- "allOf": [
- {
- "$ref": "#/definitions/Coin"
- }
- ]
- }
- },
- "definitions": {
- "Coin": {
- "type": "object",
- "required": [
- "amount",
- "denom"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Uint128"
- },
- "denom": {
- "type": "string"
- }
- }
- },
- "Uint128": {
- "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
- "type": "string"
- }
- }
- },
- "block_height_upon_creation": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "BlockHeightResponse",
- "type": "object",
- "required": [
- "block_height"
- ],
- "properties": {
- "block_height": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- },
- "component_exists": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ComponentExistsResponse",
- "type": "object",
- "required": [
- "component_exists"
- ],
- "properties": {
- "component_exists": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "config": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ConfigResponse",
- "type": "object",
- "required": [
- "name",
- "owner"
- ],
- "properties": {
- "name": {
- "type": "string"
- },
- "owner": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "get_address": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "String",
- "type": "string"
- },
- "get_addresses_with_names": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_AppComponent",
- "type": "array",
- "items": {
- "$ref": "#/definitions/AppComponent"
- },
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AppComponent": {
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- }
- }
- },
- "get_components": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "AppComponent",
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- }
- }
- },
- "is_operator": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "IsOperatorResponse",
- "type": "object",
- "required": [
- "is_operator"
- ],
- "properties": {
- "is_operator": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "kernel_address": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "KernelAddressResponse",
- "type": "object",
- "required": [
- "kernel_address"
- ],
- "properties": {
- "kernel_address": {
- "$ref": "#/definitions/Addr"
- }
- },
- "additionalProperties": false,
- "definitions": {
- "Addr": {
- "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.",
- "type": "string"
- }
- }
- },
- "module": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Module",
- "description": "A struct describing a token module, provided with the instantiation message this struct is used to record the info about the module and how/if it should be instantiated",
- "type": "object",
- "required": [
- "address",
- "is_mutable"
- ],
- "properties": {
- "address": {
- "$ref": "#/definitions/AndrAddr"
- },
- "is_mutable": {
- "type": "boolean"
- },
- "name": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false,
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- }
- }
- },
- "module_ids": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_String",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "operators": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "OperatorsResponse",
- "type": "object",
- "required": [
- "operators"
- ],
- "properties": {
- "operators": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- },
- "original_publisher": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "PublisherResponse",
- "type": "object",
- "required": [
- "original_publisher"
- ],
- "properties": {
- "original_publisher": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "owner": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ContractOwnerResponse",
- "type": "object",
- "required": [
- "owner"
- ],
- "properties": {
- "owner": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "permissioned_actions": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_String",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "permissions": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_PermissionInfo",
- "type": "array",
- "items": {
- "$ref": "#/definitions/PermissionInfo"
- },
- "definitions": {
- "Expiration": {
- "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
- "oneOf": [
- {
- "description": "AtHeight will expire when `env.block.height` >= height",
- "type": "object",
- "required": [
- "at_height"
- ],
- "properties": {
- "at_height": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- },
- {
- "description": "AtTime will expire when `env.block.time` >= time",
- "type": "object",
- "required": [
- "at_time"
- ],
- "properties": {
- "at_time": {
- "$ref": "#/definitions/Timestamp"
- }
- },
- "additionalProperties": false
- },
- {
- "description": "Never will never expire. Used to express the empty variant",
- "type": "object",
- "required": [
- "never"
- ],
- "properties": {
- "never": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "Permission": {
- "description": "An enum to represent a user's permission for an action\n\n- **Blacklisted** - The user cannot perform the action until after the provided expiration - **Limited** - The user can perform the action while uses are remaining and before the provided expiration **for a permissioned action** - **Whitelisted** - The user can perform the action until the provided expiration **for a permissioned action**\n\nExpiration defaults to `Never` if not provided",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "blacklisted"
- ],
- "properties": {
- "blacklisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "limited"
- ],
- "properties": {
- "limited": {
- "type": "object",
- "required": [
- "uses"
- ],
- "properties": {
- "expiration": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- },
- "uses": {
- "type": "integer",
- "format": "uint32",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "whitelisted"
- ],
- "properties": {
- "whitelisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "PermissionInfo": {
- "type": "object",
- "required": [
- "action",
- "actor",
- "permission"
- ],
- "properties": {
- "action": {
- "type": "string"
- },
- "actor": {
- "type": "string"
- },
- "permission": {
- "$ref": "#/definitions/Permission"
- }
- },
- "additionalProperties": false
- },
- "Timestamp": {
- "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
- "allOf": [
- {
- "$ref": "#/definitions/Uint64"
- }
- ]
- },
- "Uint64": {
- "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
- "type": "string"
- }
- }
- },
- "type": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "TypeResponse",
- "type": "object",
- "required": [
- "ado_type"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "version": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "VersionResponse",
- "type": "object",
- "required": [
- "version"
- ],
- "properties": {
- "version": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/execute.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/execute.json
deleted file mode 100644
index 2e6283f..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/execute.json
+++ /dev/null
@@ -1,797 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ExecuteMsg",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "add_app_component"
- ],
- "properties": {
- "add_app_component": {
- "type": "object",
- "required": [
- "component"
- ],
- "properties": {
- "component": {
- "$ref": "#/definitions/AppComponent"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "claim_ownership"
- ],
- "properties": {
- "claim_ownership": {
- "type": "object",
- "properties": {
- "name": {
- "type": [
- "string",
- "null"
- ]
- },
- "new_owner": {
- "anyOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "proxy_message"
- ],
- "properties": {
- "proxy_message": {
- "type": "object",
- "required": [
- "msg",
- "name"
- ],
- "properties": {
- "msg": {
- "$ref": "#/definitions/Binary"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_address"
- ],
- "properties": {
- "update_address": {
- "type": "object",
- "required": [
- "addr",
- "name"
- ],
- "properties": {
- "addr": {
- "type": "string"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "assign_app_to_components"
- ],
- "properties": {
- "assign_app_to_components": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "amp_receive"
- ],
- "properties": {
- "amp_receive": {
- "$ref": "#/definitions/AMPPkt"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_owner"
- ],
- "properties": {
- "update_owner": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_operators"
- ],
- "properties": {
- "update_operators": {
- "type": "object",
- "required": [
- "operators"
- ],
- "properties": {
- "operators": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "update_app_contract"
- ],
- "properties": {
- "update_app_contract": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "set_permission"
- ],
- "properties": {
- "set_permission": {
- "type": "object",
- "required": [
- "action",
- "actor",
- "permission"
- ],
- "properties": {
- "action": {
- "type": "string"
- },
- "actor": {
- "$ref": "#/definitions/AndrAddr"
- },
- "permission": {
- "$ref": "#/definitions/Permission"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "remove_permission"
- ],
- "properties": {
- "remove_permission": {
- "type": "object",
- "required": [
- "action",
- "actor"
- ],
- "properties": {
- "action": {
- "type": "string"
- },
- "actor": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "permission_action"
- ],
- "properties": {
- "permission_action": {
- "type": "object",
- "required": [
- "action"
- ],
- "properties": {
- "action": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "register_module"
- ],
- "properties": {
- "register_module": {
- "type": "object",
- "required": [
- "module"
- ],
- "properties": {
- "module": {
- "$ref": "#/definitions/Module"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "deregister_module"
- ],
- "properties": {
- "deregister_module": {
- "type": "object",
- "required": [
- "module_idx"
- ],
- "properties": {
- "module_idx": {
- "$ref": "#/definitions/Uint64"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "alter_module"
- ],
- "properties": {
- "alter_module": {
- "type": "object",
- "required": [
- "module",
- "module_idx"
- ],
- "properties": {
- "module": {
- "$ref": "#/definitions/Module"
- },
- "module_idx": {
- "$ref": "#/definitions/Uint64"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ],
- "definitions": {
- "AMPCtx": {
- "type": "object",
- "required": [
- "id",
- "origin",
- "previous_sender"
- ],
- "properties": {
- "id": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- },
- "origin": {
- "type": "string"
- },
- "origin_username": {
- "anyOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- },
- {
- "type": "null"
- }
- ]
- },
- "previous_sender": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "AMPMsg": {
- "description": "This struct defines how the kernel parses and relays messages between ADOs If the desired recipient is via IBC then namespacing must be employed The attached message must be a binary encoded execute message for the receiving ADO Funds can be attached for an individual message and will be attached accordingly",
- "type": "object",
- "required": [
- "config",
- "funds",
- "message",
- "recipient"
- ],
- "properties": {
- "config": {
- "description": "When the message should reply, defaults to Always",
- "allOf": [
- {
- "$ref": "#/definitions/AMPMsgConfig"
- }
- ]
- },
- "funds": {
- "description": "Any funds to be attached to the message, defaults to an empty vector",
- "type": "array",
- "items": {
- "$ref": "#/definitions/Coin"
- }
- },
- "message": {
- "description": "The message to be sent to the recipient",
- "allOf": [
- {
- "$ref": "#/definitions/Binary"
- }
- ]
- },
- "recipient": {
- "description": "The message recipient, can be a contract/wallet address or a namespaced URI",
- "allOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- "AMPMsgConfig": {
- "description": "The configuration of the message to be sent.\n\nUsed when a sub message is generated for the given AMP Msg (only used in the case of Wasm Messages).",
- "type": "object",
- "required": [
- "direct",
- "exit_at_error",
- "reply_on"
- ],
- "properties": {
- "direct": {
- "description": "Whether to send the message directly to the given recipient",
- "type": "boolean"
- },
- "exit_at_error": {
- "description": "Determines whether the operation should terminate or proceed upon a failed message",
- "type": "boolean"
- },
- "gas_limit": {
- "description": "An optional imposed gas limit for the message",
- "type": [
- "integer",
- "null"
- ],
- "format": "uint64",
- "minimum": 0.0
- },
- "ibc_config": {
- "anyOf": [
- {
- "$ref": "#/definitions/IBCConfig"
- },
- {
- "type": "null"
- }
- ]
- },
- "reply_on": {
- "description": "When the message should reply, defaults to Always",
- "allOf": [
- {
- "$ref": "#/definitions/ReplyOn"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- "AMPPkt": {
- "description": "An Andromeda packet contains all message protocol related data, this is what is sent between ADOs when communicating It contains an original sender, if used for authorisation the sender must be authorised The previous sender is the one who sent the message A packet may contain several messages which allows for message batching",
- "type": "object",
- "required": [
- "ctx",
- "messages"
- ],
- "properties": {
- "ctx": {
- "$ref": "#/definitions/AMPCtx"
- },
- "messages": {
- "description": "Any messages associated with the packet",
- "type": "array",
- "items": {
- "$ref": "#/definitions/AMPMsg"
- }
- }
- },
- "additionalProperties": false
- },
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AppComponent": {
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "Coin": {
- "type": "object",
- "required": [
- "amount",
- "denom"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Uint128"
- },
- "denom": {
- "type": "string"
- }
- }
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- "Expiration": {
- "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
- "oneOf": [
- {
- "description": "AtHeight will expire when `env.block.height` >= height",
- "type": "object",
- "required": [
- "at_height"
- ],
- "properties": {
- "at_height": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- },
- {
- "description": "AtTime will expire when `env.block.time` >= time",
- "type": "object",
- "required": [
- "at_time"
- ],
- "properties": {
- "at_time": {
- "$ref": "#/definitions/Timestamp"
- }
- },
- "additionalProperties": false
- },
- {
- "description": "Never will never expire. Used to express the empty variant",
- "type": "object",
- "required": [
- "never"
- ],
- "properties": {
- "never": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "IBCConfig": {
- "type": "object",
- "properties": {
- "recovery_addr": {
- "anyOf": [
- {
- "$ref": "#/definitions/AndrAddr"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- "Module": {
- "description": "A struct describing a token module, provided with the instantiation message this struct is used to record the info about the module and how/if it should be instantiated",
- "type": "object",
- "required": [
- "address",
- "is_mutable"
- ],
- "properties": {
- "address": {
- "$ref": "#/definitions/AndrAddr"
- },
- "is_mutable": {
- "type": "boolean"
- },
- "name": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false
- },
- "Permission": {
- "description": "An enum to represent a user's permission for an action\n\n- **Blacklisted** - The user cannot perform the action until after the provided expiration - **Limited** - The user can perform the action while uses are remaining and before the provided expiration **for a permissioned action** - **Whitelisted** - The user can perform the action until the provided expiration **for a permissioned action**\n\nExpiration defaults to `Never` if not provided",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "blacklisted"
- ],
- "properties": {
- "blacklisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "limited"
- ],
- "properties": {
- "limited": {
- "type": "object",
- "required": [
- "uses"
- ],
- "properties": {
- "expiration": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- },
- "uses": {
- "type": "integer",
- "format": "uint32",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "whitelisted"
- ],
- "properties": {
- "whitelisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "ReplyOn": {
- "description": "Use this to define when the contract gets a response callback. If you only need it for errors or success you can select just those in order to save gas.",
- "oneOf": [
- {
- "description": "Always perform a callback after SubMsg is processed",
- "type": "string",
- "enum": [
- "always"
- ]
- },
- {
- "description": "Only callback if SubMsg returned an error, no callback on success case",
- "type": "string",
- "enum": [
- "error"
- ]
- },
- {
- "description": "Only callback if SubMsg was successful, no callback on error case",
- "type": "string",
- "enum": [
- "success"
- ]
- },
- {
- "description": "Never make a callback - this is like the original CosmosMsg semantics",
- "type": "string",
- "enum": [
- "never"
- ]
- }
- ]
- },
- "Timestamp": {
- "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
- "allOf": [
- {
- "$ref": "#/definitions/Uint64"
- }
- ]
- },
- "Uint128": {
- "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
- "type": "string"
- },
- "Uint64": {
- "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/instantiate.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/instantiate.json
deleted file mode 100644
index 8934f07..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/instantiate.json
+++ /dev/null
@@ -1,142 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "InstantiateMsg",
- "type": "object",
- "required": [
- "app_components",
- "kernel_address",
- "name"
- ],
- "properties": {
- "app_components": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/AppComponent"
- }
- },
- "chain_info": {
- "type": [
- "array",
- "null"
- ],
- "items": {
- "$ref": "#/definitions/ChainInfo"
- }
- },
- "kernel_address": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "owner": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false,
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AppComponent": {
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "ChainInfo": {
- "type": "object",
- "required": [
- "chain_name",
- "owner"
- ],
- "properties": {
- "chain_name": {
- "type": "string"
- },
- "owner": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/query.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/query.json
deleted file mode 100644
index 933c265..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/query.json
+++ /dev/null
@@ -1,478 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "QueryMsg",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "get_address"
- ],
- "properties": {
- "get_address": {
- "type": "object",
- "required": [
- "name"
- ],
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "get_components"
- ],
- "properties": {
- "get_components": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "component_exists"
- ],
- "properties": {
- "component_exists": {
- "type": "object",
- "required": [
- "name"
- ],
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "get_addresses_with_names"
- ],
- "properties": {
- "get_addresses_with_names": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "config"
- ],
- "properties": {
- "config": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "owner"
- ],
- "properties": {
- "owner": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "operators"
- ],
- "properties": {
- "operators": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "type"
- ],
- "properties": {
- "type": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "kernel_address"
- ],
- "properties": {
- "kernel_address": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "original_publisher"
- ],
- "properties": {
- "original_publisher": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "block_height_upon_creation"
- ],
- "properties": {
- "block_height_upon_creation": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "is_operator"
- ],
- "properties": {
- "is_operator": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "version"
- ],
- "properties": {
- "version": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "balance"
- ],
- "properties": {
- "balance": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "permissions"
- ],
- "properties": {
- "permissions": {
- "type": "object",
- "required": [
- "actor"
- ],
- "properties": {
- "actor": {
- "type": "string"
- },
- "limit": {
- "type": [
- "integer",
- "null"
- ],
- "format": "uint32",
- "minimum": 0.0
- },
- "start_after": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "permissioned_actions"
- ],
- "properties": {
- "permissioned_actions": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "module"
- ],
- "properties": {
- "module": {
- "type": "object",
- "required": [
- "id"
- ],
- "properties": {
- "id": {
- "$ref": "#/definitions/Uint64"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "module_ids"
- ],
- "properties": {
- "module_ids": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "andr_hook"
- ],
- "properties": {
- "andr_hook": {
- "$ref": "#/definitions/AndromedaHook"
- }
- },
- "additionalProperties": false
- }
- ],
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AndromedaHook": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "on_execute"
- ],
- "properties": {
- "on_execute": {
- "type": "object",
- "required": [
- "payload",
- "sender"
- ],
- "properties": {
- "payload": {
- "$ref": "#/definitions/Binary"
- },
- "sender": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "on_funds_transfer"
- ],
- "properties": {
- "on_funds_transfer": {
- "type": "object",
- "required": [
- "amount",
- "payload",
- "sender"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Funds"
- },
- "payload": {
- "$ref": "#/definitions/Binary"
- },
- "sender": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "on_token_transfer"
- ],
- "properties": {
- "on_token_transfer": {
- "type": "object",
- "required": [
- "recipient",
- "sender",
- "token_id"
- ],
- "properties": {
- "recipient": {
- "type": "string"
- },
- "sender": {
- "type": "string"
- },
- "token_id": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "Coin": {
- "type": "object",
- "required": [
- "amount",
- "denom"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Uint128"
- },
- "denom": {
- "type": "string"
- }
- }
- },
- "Cw20Coin": {
- "type": "object",
- "required": [
- "address",
- "amount"
- ],
- "properties": {
- "address": {
- "type": "string"
- },
- "amount": {
- "$ref": "#/definitions/Uint128"
- }
- },
- "additionalProperties": false
- },
- "Funds": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "native"
- ],
- "properties": {
- "native": {
- "$ref": "#/definitions/Coin"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cw20"
- ],
- "properties": {
- "cw20": {
- "$ref": "#/definitions/Cw20Coin"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "Uint128": {
- "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
- "type": "string"
- },
- "Uint64": {
- "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_andr_hook.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_andr_hook.json
deleted file mode 100644
index a46573a..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_andr_hook.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Binary",
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_andr_query.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_andr_query.json
deleted file mode 100644
index 6068330..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_andr_query.json
+++ /dev/null
@@ -1,181 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "AndromedaQuery",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "get"
- ],
- "properties": {
- "get": {
- "anyOf": [
- {
- "$ref": "#/definitions/Binary"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "owner"
- ],
- "properties": {
- "owner": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "operators"
- ],
- "properties": {
- "operators": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "type"
- ],
- "properties": {
- "type": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "kernel_address"
- ],
- "properties": {
- "kernel_address": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "original_publisher"
- ],
- "properties": {
- "original_publisher": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "block_height_upon_creation"
- ],
- "properties": {
- "block_height_upon_creation": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "is_operator"
- ],
- "properties": {
- "is_operator": {
- "type": "object",
- "required": [
- "address"
- ],
- "properties": {
- "address": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "module"
- ],
- "properties": {
- "module": {
- "type": "object",
- "required": [
- "id"
- ],
- "properties": {
- "id": {
- "$ref": "#/definitions/Uint64"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "module_ids"
- ],
- "properties": {
- "module_ids": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "version"
- ],
- "properties": {
- "version": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ],
- "definitions": {
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "Uint64": {
- "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_balance.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_balance.json
deleted file mode 100644
index 4e3b16a..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_balance.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "BalanceResponse",
- "type": "object",
- "required": [
- "amount"
- ],
- "properties": {
- "amount": {
- "description": "Always returns a Coin with the requested denom. This may be of 0 amount if no such funds.",
- "allOf": [
- {
- "$ref": "#/definitions/Coin"
- }
- ]
- }
- },
- "definitions": {
- "Coin": {
- "type": "object",
- "required": [
- "amount",
- "denom"
- ],
- "properties": {
- "amount": {
- "$ref": "#/definitions/Uint128"
- },
- "denom": {
- "type": "string"
- }
- }
- },
- "Uint128": {
- "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_block_height_upon_creation.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_block_height_upon_creation.json
deleted file mode 100644
index 0ef1730..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_block_height_upon_creation.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "BlockHeightResponse",
- "type": "object",
- "required": [
- "block_height"
- ],
- "properties": {
- "block_height": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_component_exists.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_component_exists.json
deleted file mode 100644
index 43114e4..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_component_exists.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ComponentExistsResponse",
- "type": "object",
- "required": [
- "component_exists"
- ],
- "properties": {
- "component_exists": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_config.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_config.json
deleted file mode 100644
index caa7462..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_config.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ConfigResponse",
- "type": "object",
- "required": [
- "name",
- "owner"
- ],
- "properties": {
- "name": {
- "type": "string"
- },
- "owner": {
- "type": "string"
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get.json
deleted file mode 100644
index a2e5afd..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Nullable_Binary",
- "anyOf": [
- {
- "$ref": "#/definitions/Binary"
- },
- {
- "type": "null"
- }
- ],
- "definitions": {
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_address.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_address.json
deleted file mode 100644
index f689ace..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_address.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "String",
- "type": "string"
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_addresses_with_names.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_addresses_with_names.json
deleted file mode 100644
index b727b5e..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_addresses_with_names.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_AppComponent",
- "type": "array",
- "items": {
- "$ref": "#/definitions/AppComponent"
- },
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "AppComponent": {
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_components.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_components.json
deleted file mode 100644
index b44f6e4..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_get_components.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "AppComponent",
- "type": "object",
- "required": [
- "ado_type",
- "component_type",
- "name"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- },
- "component_type": {
- "$ref": "#/definitions/ComponentType"
- },
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- },
- "Binary": {
- "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .",
- "type": "string"
- },
- "ComponentType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "new"
- ],
- "properties": {
- "new": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "symlink"
- ],
- "properties": {
- "symlink": {
- "$ref": "#/definitions/AndrAddr"
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "cross_chain"
- ],
- "properties": {
- "cross_chain": {
- "$ref": "#/definitions/CrossChainComponent"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "CrossChainComponent": {
- "type": "object",
- "required": [
- "chain",
- "instantiate_msg"
- ],
- "properties": {
- "chain": {
- "type": "string"
- },
- "instantiate_msg": {
- "$ref": "#/definitions/Binary"
- }
- },
- "additionalProperties": false
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_is_operator.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_is_operator.json
deleted file mode 100644
index 9f750c8..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_is_operator.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "IsOperatorResponse",
- "type": "object",
- "required": [
- "is_operator"
- ],
- "properties": {
- "is_operator": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_kernel_address.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_kernel_address.json
deleted file mode 100644
index dc0e342..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_kernel_address.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "KernelAddressResponse",
- "type": "object",
- "required": [
- "kernel_address"
- ],
- "properties": {
- "kernel_address": {
- "$ref": "#/definitions/Addr"
- }
- },
- "additionalProperties": false,
- "definitions": {
- "Addr": {
- "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_module.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_module.json
deleted file mode 100644
index cecb73e..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_module.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Module",
- "description": "A struct describing a token module, provided with the instantiation message this struct is used to record the info about the module and how/if it should be instantiated",
- "type": "object",
- "required": [
- "address",
- "is_mutable"
- ],
- "properties": {
- "address": {
- "$ref": "#/definitions/AndrAddr"
- },
- "is_mutable": {
- "type": "boolean"
- },
- "name": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "additionalProperties": false,
- "definitions": {
- "AndrAddr": {
- "description": "An address that can be used within the Andromeda ecosystem. Inspired by the cosmwasm-std `Addr` type. https://github.com/CosmWasm/cosmwasm/blob/2a1c698520a1aacedfe3f4803b0d7d653892217a/packages/std/src/addresses.rs#L33\n\nThis address can be one of two things: 1. A valid human readable address e.g. `cosmos1...` 2. A valid Andromeda VFS path e.g. `/home/user/app/component`\n\nVFS paths can be local in the case of an app and can be done by referencing `./component` they can also contain protocols for cross chain communication. A VFS path is usually structured as so:\n\n`:///` or `ibc://cosmoshub-4/user/app/component`",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_module_ids.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_module_ids.json
deleted file mode 100644
index 4290cb1..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_module_ids.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_String",
- "type": "array",
- "items": {
- "type": "string"
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_operators.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_operators.json
deleted file mode 100644
index c812b4b..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_operators.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "OperatorsResponse",
- "type": "object",
- "required": [
- "operators"
- ],
- "properties": {
- "operators": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_original_publisher.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_original_publisher.json
deleted file mode 100644
index 2269741..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_original_publisher.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "PublisherResponse",
- "type": "object",
- "required": [
- "original_publisher"
- ],
- "properties": {
- "original_publisher": {
- "type": "string"
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_owner.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_owner.json
deleted file mode 100644
index cd196f7..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_owner.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "ContractOwnerResponse",
- "type": "object",
- "required": [
- "owner"
- ],
- "properties": {
- "owner": {
- "type": "string"
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_permissioned_actions.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_permissioned_actions.json
deleted file mode 100644
index 4290cb1..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_permissioned_actions.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_String",
- "type": "array",
- "items": {
- "type": "string"
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_permissions.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_permissions.json
deleted file mode 100644
index 7b918d8..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_permissions.json
+++ /dev/null
@@ -1,165 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Array_of_PermissionInfo",
- "type": "array",
- "items": {
- "$ref": "#/definitions/PermissionInfo"
- },
- "definitions": {
- "Expiration": {
- "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
- "oneOf": [
- {
- "description": "AtHeight will expire when `env.block.height` >= height",
- "type": "object",
- "required": [
- "at_height"
- ],
- "properties": {
- "at_height": {
- "type": "integer",
- "format": "uint64",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- },
- {
- "description": "AtTime will expire when `env.block.time` >= time",
- "type": "object",
- "required": [
- "at_time"
- ],
- "properties": {
- "at_time": {
- "$ref": "#/definitions/Timestamp"
- }
- },
- "additionalProperties": false
- },
- {
- "description": "Never will never expire. Used to express the empty variant",
- "type": "object",
- "required": [
- "never"
- ],
- "properties": {
- "never": {
- "type": "object",
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "Permission": {
- "description": "An enum to represent a user's permission for an action\n\n- **Blacklisted** - The user cannot perform the action until after the provided expiration - **Limited** - The user can perform the action while uses are remaining and before the provided expiration **for a permissioned action** - **Whitelisted** - The user can perform the action until the provided expiration **for a permissioned action**\n\nExpiration defaults to `Never` if not provided",
- "oneOf": [
- {
- "type": "object",
- "required": [
- "blacklisted"
- ],
- "properties": {
- "blacklisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "limited"
- ],
- "properties": {
- "limited": {
- "type": "object",
- "required": [
- "uses"
- ],
- "properties": {
- "expiration": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- },
- "uses": {
- "type": "integer",
- "format": "uint32",
- "minimum": 0.0
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- {
- "type": "object",
- "required": [
- "whitelisted"
- ],
- "properties": {
- "whitelisted": {
- "anyOf": [
- {
- "$ref": "#/definitions/Expiration"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "PermissionInfo": {
- "type": "object",
- "required": [
- "action",
- "actor",
- "permission"
- ],
- "properties": {
- "action": {
- "type": "string"
- },
- "actor": {
- "type": "string"
- },
- "permission": {
- "$ref": "#/definitions/Permission"
- }
- },
- "additionalProperties": false
- },
- "Timestamp": {
- "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
- "allOf": [
- {
- "$ref": "#/definitions/Uint64"
- }
- ]
- },
- "Uint64": {
- "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
- "type": "string"
- }
- }
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_type.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_type.json
deleted file mode 100644
index 27e96a9..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_type.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "TypeResponse",
- "type": "object",
- "required": [
- "ado_type"
- ],
- "properties": {
- "ado_type": {
- "type": "string"
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_version.json b/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_version.json
deleted file mode 100644
index 4a16f10..0000000
--- a/andromeda-core/contracts/app/andromeda-app-contract/schema/raw/response_to_version.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "VersionResponse",
- "type": "object",
- "required": [
- "version"
- ],
- "properties": {
- "version": {
- "type": "string"
- }
- },
- "additionalProperties": false
-}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/src/contract.rs b/andromeda-core/contracts/app/andromeda-app-contract/src/contract.rs
index 626f783..49f3ef6 100644
--- a/andromeda-core/contracts/app/andromeda-app-contract/src/contract.rs
+++ b/andromeda-core/contracts/app/andromeda-app-contract/src/contract.rs
@@ -1,28 +1,23 @@
-use crate::reply::{on_component_instantiation, ReplyId};
-use crate::state::{create_cross_chain_message, get_chain_info, APP_NAME};
-use andromeda_app::app::{
- AppComponent, ComponentType, CrossChainComponent, ExecuteMsg, InstantiateMsg, MigrateMsg,
- QueryMsg,
-};
+use crate::reply::on_component_instantiation;
+use crate::state::{add_app_component, create_cross_chain_message, ADO_ADDRESSES, APP_NAME};
+use andromeda_app::app::{ExecuteMsg, InstantiateMsg, QueryMsg};
use andromeda_std::ado_contract::ADOContract;
use andromeda_std::amp::AndrAddr;
use andromeda_std::common::context::ExecuteContext;
+use andromeda_std::common::reply::ReplyId;
use andromeda_std::os::vfs::{convert_component_name, ExecuteMsg as VFSExecuteMsg};
use andromeda_std::{
- ado_base::InstantiateMsg as BaseInstantiateMsg,
- common::encode_binary,
- error::{from_semver, ContractError},
+ ado_base::InstantiateMsg as BaseInstantiateMsg, ado_base::MigrateMsg, common::encode_binary,
+ error::ContractError,
};
#[cfg(not(feature = "library"))]
use cosmwasm_std::entry_point;
use cosmwasm_std::{
- ensure, to_json_binary, Binary, CosmosMsg, Deps, DepsMut, Empty, Env, MessageInfo, Reply,
- Response, StdError, SubMsg, WasmMsg,
+ ensure, wasm_execute, Addr, Binary, Deps, DepsMut, Env, MessageInfo, Reply, Response, StdError,
+ SubMsg,
};
-use cw2::{get_contract_version, set_contract_version};
use crate::{execute, query};
-use semver::Version;
// version info for migration info
const CONTRACT_NAME: &str = "crates.io:andromeda-app-contract";
@@ -35,7 +30,6 @@ pub fn instantiate(
info: MessageInfo,
msg: InstantiateMsg,
) -> Result {
- set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?;
APP_NAME.save(deps.storage, &msg.name)?;
ensure!(
@@ -49,94 +43,105 @@ pub fn instantiate(
deps.storage,
env.clone(),
deps.api,
+ &deps.querier,
info.clone(),
BaseInstantiateMsg {
- ado_type: "app-contract".to_string(),
+ ado_type: CONTRACT_NAME.to_string(),
ado_version: CONTRACT_VERSION.to_string(),
- operators: None,
kernel_address: msg.kernel_address.clone(),
owner: msg.owner.clone(),
},
)?
- .add_attribute("owner", &msg.owner.clone().unwrap_or(sender.clone()))
.add_attribute("andr_app", msg.name.clone());
- let mut msgs: Vec = vec![];
- let app_name = msg.name;
+ let vfs_address = ADOContract::default().get_vfs_address(deps.storage, &deps.querier)?;
+ let adodb_addr = ADOContract::default().get_adodb_address(deps.storage, &deps.querier)?;
+
+ let mut vfs_msgs: Vec = vec![];
+
for component in msg.app_components.clone() {
+ ensure!(
+ !ADO_ADDRESSES.has(deps.storage, &component.name),
+ ContractError::NameAlreadyTaken {}
+ );
component.verify(&deps.as_ref()).unwrap();
- match component.component_type {
- ComponentType::CrossChain(CrossChainComponent { chain, .. }) => {
- let chain_info = get_chain_info(chain.clone(), msg.chain_info.clone());
- ensure!(
- chain_info.is_some(),
- ContractError::InvalidComponent {
- name: component.name.clone()
- }
- );
- let owner_addr = chain_info.unwrap().owner;
- let name = component.name;
- let new_component = AppComponent {
- name: name.clone(),
- ado_type: component.ado_type,
- component_type: ComponentType::Symlink(AndrAddr::from_string(format!(
- "ibc://{chain}/home/{owner_addr}/{app_name}/{name}"
- ))),
- };
- let comp_resp = execute::handle_add_app_component(
- &deps.querier,
- deps.storage,
- &sender,
- new_component,
- )?;
- msgs.extend(comp_resp.messages);
- }
- _ => {
- let comp_resp = execute::handle_add_app_component(
- &deps.querier,
- deps.storage,
- &sender,
- component,
- )?;
- msgs.extend(comp_resp.messages);
- }
+
+ // Generate addresses and store expected address in state
+ let new_addr = component.get_new_addr(
+ deps.api,
+ &adodb_addr,
+ &deps.querier,
+ env.contract.address.clone(),
+ )?;
+ ADO_ADDRESSES.save(
+ deps.storage,
+ &component.name,
+ &new_addr.clone().unwrap_or(Addr::unchecked("")),
+ )?;
+
+ // Register components with VFS
+ // Sub message is optional as component may be hidden (Starts with a '.')
+ let register_submsg = component.generate_vfs_registration(
+ new_addr.clone(),
+ &env.contract.address,
+ &msg.name,
+ msg.chain_info.clone(),
+ &adodb_addr,
+ &vfs_address,
+ )?;
+
+ if let Some(register_submsg) = register_submsg {
+ vfs_msgs.push(register_submsg);
+ }
+
+ let event = component.generate_event(new_addr);
+ resp = resp.add_event(event);
+ }
+
+ let mut inst_msgs = vec![];
+
+ // This is done in a separate loop to ensure ordering, VFS registration first then instantiation after
+ for component in msg.app_components.clone() {
+ // Generate an ID for the component to help with tracking
+ let idx = add_app_component(deps.storage, &component)?;
+
+ // Generate an instantiation message if required
+ let inst_msg = component.generate_instantiation_message(
+ &deps.querier,
+ &adodb_addr,
+ &env.contract.address,
+ &sender,
+ idx,
+ )?;
+
+ if let Some(inst_msg) = inst_msg {
+ inst_msgs.push(inst_msg)
}
}
- let vfs_address = ADOContract::default().get_vfs_address(deps.storage, &deps.querier)?;
- let add_path_msg = VFSExecuteMsg::AddParentPath {
- name: convert_component_name(app_name.clone()),
+ // Register app under parent
+ let app_name = msg.name;
+ let add_path_msg = VFSExecuteMsg::AddChild {
+ name: convert_component_name(&app_name),
parent_address: AndrAddr::from_string(sender),
};
- let cosmos_msg: CosmosMsg = CosmosMsg::Wasm(WasmMsg::Execute {
- contract_addr: vfs_address.to_string(),
- msg: to_json_binary(&add_path_msg)?,
- funds: vec![],
- });
-
+ let cosmos_msg = wasm_execute(vfs_address.to_string(), &add_path_msg, vec![])?;
let register_msg = SubMsg::reply_on_error(cosmos_msg, ReplyId::RegisterPath.repr());
- let assign_app_msg = ExecuteMsg::AssignAppToComponents {};
- let assign_app_msg = SubMsg::reply_on_error(
- CosmosMsg::Wasm::(WasmMsg::Execute {
- contract_addr: env.contract.address.to_string(),
- msg: to_json_binary(&assign_app_msg)?,
- funds: vec![],
- }),
- ReplyId::AssignApp.repr(),
- );
+
resp = resp
.add_submessage(register_msg)
- .add_submessages(msgs)
- .add_submessage(assign_app_msg);
+ .add_submessages(vfs_msgs)
+ .add_submessages(inst_msgs);
if let Some(chain_info) = msg.chain_info {
- for chain in chain_info {
+ for chain in chain_info.clone() {
let sub_msg = create_cross_chain_message(
&deps,
app_name.clone(),
msg.owner.clone().unwrap_or(info.sender.to_string()),
msg.app_components.clone(),
chain,
+ chain_info.clone(),
)?;
resp = resp.add_submessage(sub_msg);
}
@@ -178,12 +183,9 @@ pub fn execute(
pub fn handle_execute(ctx: ExecuteContext, msg: ExecuteMsg) -> Result {
match msg {
- ExecuteMsg::AddAppComponent { component } => execute::handle_add_app_component(
- &ctx.deps.querier,
- ctx.deps.storage,
- ctx.info.sender.as_str(),
- component,
- ),
+ ExecuteMsg::AddAppComponent { component } => {
+ execute::handle_add_app_component(ctx, component)
+ }
ExecuteMsg::ClaimOwnership { name, new_owner } => {
execute::claim_ownership(ctx, name, new_owner)
}
@@ -196,36 +198,7 @@ pub fn handle_execute(ctx: ExecuteContext, msg: ExecuteMsg) -> Result Result {
- // New version
- let version: Version = CONTRACT_VERSION.parse().map_err(from_semver)?;
-
- // Old version
- let stored = get_contract_version(deps.storage)?;
- let storage_version: Version = stored.version.parse().map_err(from_semver)?;
-
- let contract = ADOContract::default();
-
- ensure!(
- stored.contract == CONTRACT_NAME,
- ContractError::CannotMigrate {
- previous_contract: stored.contract,
- }
- );
-
- // New version has to be newer/greater than the old version
- ensure!(
- storage_version < version,
- ContractError::CannotMigrate {
- previous_contract: stored.version,
- }
- );
-
- set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?;
-
- // Update the ADOContract's version
- contract.execute_update_version(deps)?;
-
- Ok(Response::default())
+ ADOContract::default().migrate(deps, CONTRACT_NAME, CONTRACT_VERSION)
}
#[cfg_attr(not(feature = "library"), entry_point)]
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/src/execute.rs b/andromeda-core/contracts/app/andromeda-app-contract/src/execute.rs
index 055aa30..02eb315 100644
--- a/andromeda-core/contracts/app/andromeda-app-contract/src/execute.rs
+++ b/andromeda-core/contracts/app/andromeda-app-contract/src/execute.rs
@@ -1,76 +1,109 @@
use crate::state::{
add_app_component, generate_assign_app_message, generate_ownership_message,
- load_component_addresses, ADO_ADDRESSES,
+ load_component_addresses, ADO_ADDRESSES, APP_NAME,
};
use andromeda_app::app::{AppComponent, ComponentType};
-use andromeda_std::common::context::ExecuteContext;
+use andromeda_std::common::{context::ExecuteContext, reply::ReplyId};
use andromeda_std::error::ContractError;
use andromeda_std::os::aos_querier::AOSQuerier;
use andromeda_std::os::vfs::ExecuteMsg as VFSExecuteMsg;
use andromeda_std::{ado_contract::ADOContract, amp::AndrAddr};
-use crate::reply::ReplyId;
use cosmwasm_std::{
ensure, to_json_binary, Addr, Binary, CosmosMsg, QuerierWrapper, ReplyOn, Response, Storage,
SubMsg, WasmMsg,
};
pub fn handle_add_app_component(
- querier: &QuerierWrapper,
- storage: &mut dyn Storage,
- sender: &str,
+ ctx: ExecuteContext,
component: AppComponent,
) -> Result {
+ let querier = &ctx.deps.querier;
+ let env = ctx.env;
+ let sender = ctx.info.sender.as_str();
+
+ let maybe_app_component = ADO_ADDRESSES.may_load(ctx.deps.storage, &component.name)?;
+ ensure!(
+ maybe_app_component.is_none(),
+ ContractError::InvalidComponent {
+ name: "Component name already taken".to_string()
+ }
+ );
+
+ ensure!(
+ !matches!(component.component_type, ComponentType::CrossChain(..)),
+ ContractError::CrossChainComponentsCurrentlyDisabled {}
+ );
let contract = ADOContract::default();
ensure!(
- contract.is_contract_owner(storage, sender)?,
+ contract.is_contract_owner(ctx.deps.storage, sender)?,
ContractError::Unauthorized {}
);
- let current_addr = ADO_ADDRESSES.may_load(storage, &component.name)?;
- ensure!(current_addr.is_none(), ContractError::NameAlreadyTaken {});
+ let idx = add_app_component(ctx.deps.storage, &component)?;
+ ensure!(idx < 50, ContractError::TooManyAppComponents {});
- let idx = add_app_component(storage, &component)?;
+ let adodb_addr = ADOContract::default().get_adodb_address(ctx.deps.storage, querier)?;
+ let vfs_addr = ADOContract::default().get_vfs_address(ctx.deps.storage, querier)?;
let mut resp = Response::new()
.add_attribute("method", "add_app_component")
.add_attribute("name", component.name.clone())
.add_attribute("type", component.ado_type.clone());
- match component.component_type {
- ComponentType::New(instantiate_msg) => {
- let inst_msg = contract.generate_instantiate_msg(
- storage,
- querier,
- idx,
- instantiate_msg,
- component.ado_type.clone(),
- sender.to_string(),
- )?;
- resp = resp.add_submessage(inst_msg);
- ADO_ADDRESSES.save(storage, &component.name, &Addr::unchecked(""))?;
- }
- ComponentType::Symlink(symlink) => {
- let msg = VFSExecuteMsg::AddSymlink {
- name: component.name,
- symlink,
- parent_address: None,
- };
- let cosmos_msg = CosmosMsg::Wasm(WasmMsg::Execute {
- contract_addr: AOSQuerier::vfs_address_getter(
- querier,
- &contract.get_kernel_address(storage)?,
- )?
- .to_string(),
- msg: to_json_binary(&msg)?,
- funds: vec![],
- });
- let sub_msg = SubMsg::reply_on_error(cosmos_msg, ReplyId::RegisterPath.repr());
- resp = resp.add_submessage(sub_msg);
- }
- _ => return Err(ContractError::Unauthorized {}),
+ let app_name = APP_NAME.load(ctx.deps.storage)?;
+ let new_addr = component.get_new_addr(
+ ctx.deps.api,
+ &adodb_addr,
+ querier,
+ env.contract.address.clone(),
+ )?;
+ let registration_msg = component.generate_vfs_registration(
+ new_addr.clone(),
+ &env.contract.address,
+ &app_name,
+ // TODO: Fix this in future for x-chain components
+ None,
+ &adodb_addr,
+ &vfs_addr,
+ )?;
+
+ if let Some(registration_msg) = registration_msg {
+ resp = resp.add_submessage(registration_msg);
+ }
+
+ let inst_msg = component.generate_instantiation_message(
+ querier,
+ &adodb_addr,
+ &env.contract.address,
+ sender,
+ idx,
+ )?;
+
+ if let Some(inst_msg) = inst_msg {
+ resp = resp.add_submessage(inst_msg);
}
+ if let ComponentType::Symlink(ref val) = component.component_type {
+ let component_address: Addr = val.get_raw_address(&ctx.deps.as_ref())?;
+ ADO_ADDRESSES.save(ctx.deps.storage, &component.name, &component_address)?;
+ } else if let ComponentType::New(_) = component.component_type {
+ ensure!(
+ new_addr.is_some(),
+ ContractError::InvalidComponent {
+ name: "Could not generate address for new component".to_string()
+ }
+ );
+ ADO_ADDRESSES.save(
+ ctx.deps.storage,
+ &component.name,
+ &new_addr.clone().unwrap(),
+ )?;
+ }
+
+ let event = component.generate_event(new_addr);
+ resp = resp.add_event(event);
+
Ok(resp)
}
@@ -153,6 +186,7 @@ pub fn update_address(
name: String,
addr: String,
) -> Result {
+ ctx.deps.api.addr_validate(addr.as_str())?;
let ExecuteContext { deps, info, .. } = ctx;
let ado_addr = ADO_ADDRESSES.load(deps.storage, &name)?;
ensure!(
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/src/mock.rs b/andromeda-core/contracts/app/andromeda-app-contract/src/mock.rs
index eb702a8..577e241 100644
--- a/andromeda-core/contracts/app/andromeda-app-contract/src/mock.rs
+++ b/andromeda-core/contracts/app/andromeda-app-contract/src/mock.rs
@@ -2,25 +2,26 @@
use crate::contract::{execute, instantiate, query, reply};
use andromeda_app::app::{AppComponent, ExecuteMsg, InstantiateMsg, QueryMsg};
use andromeda_testing::{
+ mock::MockApp,
mock_ado,
mock_contract::{AnyResult, MockADO, MockContract},
};
use cosmwasm_std::{Addr, Empty};
-use cw_multi_test::{App, AppResponse, Contract, ContractWrapper, Executor};
+use cw_multi_test::{AppResponse, Contract, ContractWrapper, Executor};
-pub struct MockApp(Addr);
-mock_ado!(MockApp, ExecuteMsg, QueryMsg);
+pub struct MockAppContract(Addr);
+mock_ado!(MockAppContract, ExecuteMsg, QueryMsg);
-impl MockApp {
+impl MockAppContract {
pub fn instantiate(
code_id: u64,
- sender: Addr,
- app: &mut App,
+ sender: &Addr,
+ app: &mut MockApp,
name: impl Into,
app_components: Vec,
kernel_address: impl Into,
owner: Option,
- ) -> MockApp {
+ ) -> MockAppContract {
let msg = mock_app_instantiate_msg(name, app_components, kernel_address, owner);
let addr = app
.instantiate_contract(
@@ -32,29 +33,38 @@ impl MockApp {
Some(sender.to_string()),
)
.unwrap();
- MockApp(Addr::unchecked(addr))
+ MockAppContract(Addr::unchecked(addr))
}
pub fn execute_claim_ownership(
&self,
- app: &mut App,
+ app: &mut MockApp,
sender: Addr,
component_name: Option,
) -> AnyResult {
self.execute(app, &mock_claim_ownership_msg(component_name), sender, &[])
}
- pub fn query_components(&self, app: &App) -> Vec {
+ pub fn execute_add_app_component(
+ &self,
+ app: &mut MockApp,
+ sender: Addr,
+ component: AppComponent,
+ ) -> AnyResult {
+ self.execute(app, &mock_add_app_component_msg(component), sender, &[])
+ }
+
+ pub fn query_components(&self, app: &MockApp) -> Vec {
self.query::>(app, mock_get_components_msg())
}
- pub fn query_component_addr(&self, app: &App, name: impl Into) -> Addr {
+ pub fn query_component_addr(&self, app: &MockApp, name: impl Into) -> Addr {
self.query::(app, mock_get_address_msg(name.into()))
}
pub fn query_ado_by_component_name>(
&self,
- app: &App,
+ app: &MockApp,
name: impl Into,
) -> C {
C::from(self.query_component_addr(app, name))
@@ -88,10 +98,18 @@ pub fn mock_claim_ownership_msg(component_name: Option) -> ExecuteMsg {
}
}
+pub fn mock_add_app_component_msg(component: AppComponent) -> ExecuteMsg {
+ ExecuteMsg::AddAppComponent { component }
+}
+
pub fn mock_get_components_msg() -> QueryMsg {
QueryMsg::GetComponents {}
}
-pub fn mock_get_address_msg(name: String) -> QueryMsg {
- QueryMsg::GetAddress { name }
+pub fn mock_get_adresses_with_names_msg() -> QueryMsg {
+ QueryMsg::GetAddressesWithNames {}
+}
+
+pub fn mock_get_address_msg(name: impl Into) -> QueryMsg {
+ QueryMsg::GetAddress { name: name.into() }
}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/src/reply.rs b/andromeda-core/contracts/app/andromeda-app-contract/src/reply.rs
index 91c83cc..c9e5259 100644
--- a/andromeda-core/contracts/app/andromeda-app-contract/src/reply.rs
+++ b/andromeda-core/contracts/app/andromeda-app-contract/src/reply.rs
@@ -1,20 +1,8 @@
-use andromeda_std::{
- ado_contract::ADOContract, common::response::get_reply_address, error::ContractError,
-};
-use cosmwasm_std::{DepsMut, Reply, Response};
-use enum_repr::EnumRepr;
+use andromeda_std::{common::response::get_reply_address, error::ContractError};
+use cosmwasm_std::{ensure_eq, Addr, DepsMut, Reply, Response};
-use crate::execute;
use crate::state::{ADO_ADDRESSES, ADO_DESCRIPTORS};
-#[EnumRepr(type = "u64")]
-pub enum ReplyId {
- ClaimOwnership = 101,
- AssignApp = 102,
- RegisterPath = 103,
- CrossChainCreate = 104,
-}
-
pub fn on_component_instantiation(deps: DepsMut, msg: Reply) -> Result {
let id = msg.id.to_string();
@@ -22,21 +10,17 @@ pub fn on_component_instantiation(deps: DepsMut, msg: Reply) -> Result = Map::new("ado_addresses");
/// Stores a record of the describing structs for each ADO
@@ -37,7 +41,7 @@ pub fn load_component_addresses(
storage: &dyn Storage,
min: Option<&str>,
) -> Result, ContractError> {
- let min = Some(Bound::inclusive(min.unwrap_or("1")));
+ let min = Some(Bound::inclusive(min.unwrap_or("0")));
let addresses: Vec = ADO_ADDRESSES
.range(storage, min, None, Order::Ascending)
.flatten()
@@ -77,9 +81,10 @@ pub fn load_component_descriptors(
}
pub fn generate_ownership_message(addr: Addr, owner: &str) -> Result {
- let msg = to_json_binary(&AndromedaMsg::UpdateOwner {
- address: owner.to_string(),
- })?;
+ let msg = to_json_binary(&AndromedaMsg::Ownership(OwnershipMessage::UpdateOwner {
+ new_owner: Addr::unchecked(owner),
+ expiration: None,
+ }))?;
Ok(SubMsg {
id: ReplyId::ClaimOwnership.repr(),
reply_on: ReplyOn::Error,
@@ -121,19 +126,28 @@ pub fn get_chain_info(chain_name: String, chain_info: Option>) ->
}
/// Creates a sub message to create a recpliant app on the target chain
+/// Apps are altered to be symlinks or instantiations depending on if they are for the target chain
+/// * `deps` - Standarad Dependencies
+/// * `app_name` - The name of the app to be created
+/// * `owner` - The owner of the app on the target chain
+/// * `sender` - The sender of the message
+/// * `components` - The components of the app to be created
+/// * `target_chain_info` - The chain info for the target chain
+/// * `all_chain_info` - The chain info for all chains
pub fn create_cross_chain_message(
deps: &DepsMut,
app_name: String,
owner: String,
components: Vec,
- chain_info: ChainInfo,
+ target_chain_info: ChainInfo,
+ all_chain_info: Vec,
) -> Result {
let kernel_address = ADOContract::default().get_kernel_address(deps.storage)?;
let curr_chain = AOSQuerier::get_current_chain(&deps.querier, &kernel_address)?;
let channel_info = AOSQuerier::get_chain_info(
&deps.querier,
&kernel_address,
- chain_info.chain_name.as_str(),
+ target_chain_info.chain_name.as_str(),
)?;
let mut new_components: Vec = Vec::new();
for component in components {
@@ -143,22 +157,33 @@ pub fn create_cross_chain_message(
chain,
instantiate_msg,
}) => {
- if chain == chain_info.chain_name {
+ // If component for target chain instantiate component
+ if chain == target_chain_info.chain_name {
AppComponent {
name,
ado_type: component.ado_type,
component_type: ComponentType::New(instantiate_msg),
}
+ // Otherwise use a symlink to the component
} else {
+ // Unwrap the owner on the chain for this component
+ let chain_info = all_chain_info.iter().find(|info| info.chain_name == chain);
+ ensure!(
+ chain_info.is_some(),
+ ContractError::InvalidComponent { name }
+ );
+ let owner = chain_info.unwrap().owner.clone();
+
AppComponent {
name: name.clone(),
ado_type: component.ado_type,
component_type: ComponentType::Symlink(AndrAddr::from_string(format!(
- "ibc://{curr_chain}/home/{owner}/{app_name}/{name}"
+ "ibc://{chain}/home/{owner}/{app_name}/{name}"
))),
}
}
}
+ // Must be some form of local component (symlink or new) so create symlink references
_ => AppComponent {
name: name.clone(),
ado_type: component.ado_type,
@@ -170,7 +195,7 @@ pub fn create_cross_chain_message(
new_components.push(new_component);
}
let msg = InstantiateMsg {
- owner: Some(chain_info.owner.clone()),
+ owner: Some(target_chain_info.owner.clone()),
app_components: new_components,
name: app_name,
chain_info: None,
@@ -180,8 +205,8 @@ pub fn create_cross_chain_message(
let kernel_msg = KernelExecuteMsg::Create {
ado_type: "app-contract".to_string(),
msg: to_json_binary(&msg)?,
- owner: Some(AndrAddr::from_string(chain_info.owner)),
- chain: Some(chain_info.chain_name),
+ owner: Some(AndrAddr::from_string(target_chain_info.owner)),
+ chain: Some(target_chain_info.chain_name),
};
let cosmos_msg = CosmosMsg::Wasm(WasmMsg::Execute {
@@ -198,3 +223,109 @@ pub fn create_cross_chain_message(
Ok(sub_msg)
}
+
+#[cfg(test)]
+mod test {
+ use andromeda_std::testing::mock_querier::mock_dependencies_custom;
+ use cosmwasm_std::from_json;
+
+ use super::*;
+
+ #[test]
+ fn test_create_cross_chain_message() {
+ let mut deps = mock_dependencies_custom(&[]);
+ let app_name = "test_app".to_string();
+ let target_owner = "test_owner".to_string();
+ let target_chain = "target_chain".to_string();
+ let target_chain_info = ChainInfo {
+ chain_name: target_chain.clone(),
+ owner: target_owner.clone(),
+ };
+ let second_chain_info = ChainInfo {
+ chain_name: "test-chain".to_string(),
+ owner: "test-chain-owner".to_string(),
+ };
+ let all_chain_info = vec![target_chain_info.clone(), second_chain_info.clone()];
+ let components = vec![
+ AppComponent {
+ name: "test_component".to_string(),
+ ado_type: "test_ado".to_string(),
+ component_type: ComponentType::CrossChain(CrossChainComponent {
+ chain: target_chain.clone(),
+ instantiate_msg: to_json_binary(&"test_instantiate").unwrap(),
+ }),
+ },
+ AppComponent {
+ name: "test_component".to_string(),
+ ado_type: "test_ado".to_string(),
+ component_type: ComponentType::CrossChain(CrossChainComponent {
+ chain: second_chain_info.chain_name.clone(),
+ instantiate_msg: to_json_binary(&"test_instantiate").unwrap(),
+ }),
+ },
+ AppComponent {
+ name: "test_component".to_string(),
+ ado_type: "test_ado".to_string(),
+ component_type: ComponentType::New(to_json_binary(&"test_instantiate").unwrap()),
+ },
+ ];
+ let expected_components = vec![
+ AppComponent {
+ name: "test_component".to_string(),
+ ado_type: "test_ado".to_string(),
+ component_type: ComponentType::New(to_json_binary(&"test_instantiate").unwrap()),
+ },
+ AppComponent {
+ name: "test_component".to_string(),
+ ado_type: "test_ado".to_string(),
+ component_type: ComponentType::Symlink(AndrAddr::from_string(format!(
+ "ibc://{}/home/{}/test_app/test_component",
+ second_chain_info.chain_name, second_chain_info.owner
+ ))),
+ },
+ AppComponent {
+ name: "test_component".to_string(),
+ ado_type: "test_ado".to_string(),
+ component_type: ComponentType::Symlink(AndrAddr::from_string(format!(
+ "ibc://andromeda/home/{}/test_app/test_component",
+ target_owner
+ ))),
+ },
+ ];
+
+ let SubMsg { msg, .. } = create_cross_chain_message(
+ &deps.as_mut(),
+ app_name.clone(),
+ target_owner.clone(),
+ components,
+ target_chain_info,
+ all_chain_info,
+ )
+ .unwrap();
+
+ assert!(matches!(msg, CosmosMsg::Wasm(WasmMsg::Execute { .. })));
+
+ let msg = match msg {
+ CosmosMsg::Wasm(WasmMsg::Execute { msg, .. }) => msg,
+ _ => panic!("Wrong message type"),
+ };
+ match from_json(msg).unwrap() {
+ KernelExecuteMsg::Create {
+ ado_type,
+ msg,
+ owner,
+ chain,
+ } => {
+ assert_eq!(ado_type, "app-contract");
+ assert_eq!(owner, Some(AndrAddr::from_string(target_owner.clone())));
+ assert_eq!(chain, Some(target_chain));
+ let msg: InstantiateMsg = from_json(msg).unwrap();
+ assert_eq!(msg.name, app_name);
+ assert_eq!(msg.owner, Some(target_owner));
+ assert_eq!(msg.chain_info, None);
+ assert_eq!(msg.app_components, expected_components);
+ }
+ _ => panic!("Wrong message type"),
+ }
+ }
+}
diff --git a/andromeda-core/contracts/app/andromeda-app-contract/src/testing/mod.rs b/andromeda-core/contracts/app/andromeda-app-contract/src/testing/mod.rs
index c91d867..a617531 100644
--- a/andromeda-core/contracts/app/andromeda-app-contract/src/testing/mod.rs
+++ b/andromeda-core/contracts/app/andromeda-app-contract/src/testing/mod.rs
@@ -1,10 +1,14 @@
-use crate::reply::ReplyId;
+use crate::state::{ADO_DESCRIPTORS, ADO_IDX};
use super::{contract::*, state::ADO_ADDRESSES};
use andromeda_app::app::{AppComponent, ComponentType, ExecuteMsg, InstantiateMsg};
-use andromeda_std::amp::AndrAddr;
-use andromeda_std::os::vfs::{convert_component_name, ExecuteMsg as VFSExecuteMsg};
-use andromeda_std::testing::mock_querier::{mock_dependencies_custom, MOCK_KERNEL_CONTRACT};
+use andromeda_std::ado_base::ownership::OwnershipMessage;
+// use andromeda_std::amp::AndrAddr;
+// use andromeda_std::common::reply::ReplyId;
+// use andromeda_std::os::vfs::{convert_component_name, ExecuteMsg as VFSExecuteMsg};
+use andromeda_std::testing::mock_querier::{
+ mock_dependencies_custom, MOCK_ANCHOR_CONTRACT, MOCK_CW20_CONTRACT, MOCK_KERNEL_CONTRACT,
+};
use andromeda_std::{ado_base::AndromedaMsg, error::ContractError};
@@ -13,6 +17,7 @@ use cosmwasm_std::{
testing::{mock_env, mock_info},
to_json_binary, Addr, CosmosMsg, Empty, ReplyOn, Response, StdError, SubMsg, WasmMsg,
};
+use cosmwasm_std::{Binary, Event, Reply, SubMsgResponse, SubMsgResult};
#[test]
fn test_empty_instantiation() {
@@ -29,111 +34,113 @@ fn test_empty_instantiation() {
// we can just call .unwrap() to assert this was a success
let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap();
- assert_eq!(2, res.messages.len());
+ assert_eq!(1, res.messages.len());
}
-#[test]
-fn test_instantiation() {
- let mut deps = mock_dependencies_custom(&[]);
+//TODO: Fix post CosmWasm 2.0
- let msg = InstantiateMsg {
- app_components: vec![AppComponent {
- name: "token".to_string(),
- ado_type: "cw721".to_string(),
- component_type: ComponentType::New(to_json_binary(&true).unwrap()),
- }],
- name: String::from("Some App"),
- kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
- owner: None,
- chain_info: None,
- };
- let info = mock_info("creator", &[]);
+// #[test]
+// fn test_instantiation() {
+// let mut deps = mock_dependencies_custom(&[]);
- let res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap();
- assert_eq!(3, res.messages.len());
- let inst_submsg: SubMsg = SubMsg {
- id: 1,
- msg: CosmosMsg::Wasm(WasmMsg::Instantiate {
- code_id: 1,
- msg: to_json_binary(&true).unwrap(),
- funds: vec![],
- label: "Instantiate: cw721".to_string(),
- admin: Some("creator".to_string()),
- }),
- reply_on: ReplyOn::Always,
- gas_limit: None,
- };
- let sender = info.sender;
- let register_submsg: SubMsg = SubMsg {
- id: ReplyId::RegisterPath.repr(),
- msg: CosmosMsg::Wasm(WasmMsg::Execute {
- contract_addr: "vfs_contract".to_string(),
- msg: to_json_binary(&VFSExecuteMsg::AddParentPath {
- name: convert_component_name("Some App".to_string()),
- parent_address: AndrAddr::from_string(format!("{sender}")),
- })
- .unwrap(),
- funds: vec![],
- }),
- reply_on: ReplyOn::Error,
- gas_limit: None,
- };
- let assign_msg: SubMsg = SubMsg {
- id: ReplyId::AssignApp.repr(),
- msg: CosmosMsg::Wasm(WasmMsg::Execute {
- contract_addr: "cosmos2contract".to_string(),
- msg: to_json_binary(&ExecuteMsg::AssignAppToComponents {}).unwrap(),
- funds: vec![],
- }),
- reply_on: ReplyOn::Error,
- gas_limit: None,
- };
- let expected = Response::new()
- .add_submessage(register_submsg)
- .add_submessage(inst_submsg)
- .add_submessage(assign_msg)
- .add_attributes(vec![
- attr("method", "instantiate"),
- attr("type", "app-contract"),
- attr("owner", "creator"),
- attr("andr_app", "Some App"),
- ]);
+// let msg = InstantiateMsg {
+// app_components: vec![AppComponent {
+// name: "token".to_string(),
+// ado_type: "cw721".to_string(),
+// component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+// }],
+// name: String::from("Some App"),
+// kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
+// owner: None,
+// chain_info: None,
+// };
+// let info = mock_info("creator", &[]);
- assert_eq!(expected, res);
+// let res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap();
+// assert_eq!(3, res.messages.len());
+// let inst_submsg: SubMsg = SubMsg {
+// id: 1,
+// msg: CosmosMsg::Wasm(WasmMsg::Instantiate {
+// code_id: 1,
+// msg: to_json_binary(&true).unwrap(),
+// funds: vec![],
+// label: "Instantiate: cw721".to_string(),
+// admin: Some("creator".to_string()),
+// }),
+// reply_on: ReplyOn::Always,
+// gas_limit: None,
+// };
+// let sender = info.sender;
+// let register_submsg: SubMsg = SubMsg {
+// id: ReplyId::RegisterPath.repr(),
+// msg: CosmosMsg::Wasm(WasmMsg::Execute {
+// contract_addr: "vfs_contract".to_string(),
+// msg: to_json_binary(&VFSExecuteMsg::AddChild {
+// name: convert_component_name("Some App"),
+// parent_address: AndrAddr::from_string(format!("{sender}")),
+// })
+// .unwrap(),
+// funds: vec![],
+// }),
+// reply_on: ReplyOn::Error,
+// gas_limit: None,
+// };
+// let assign_msg: SubMsg = SubMsg {
+// id: ReplyId::AssignApp.repr(),
+// msg: CosmosMsg::Wasm(WasmMsg::Execute {
+// contract_addr: "cosmos2contract".to_string(),
+// msg: to_json_binary(&ExecuteMsg::AssignAppToComponents {}).unwrap(),
+// funds: vec![],
+// }),
+// reply_on: ReplyOn::Error,
+// gas_limit: None,
+// };
+// let expected = Response::new()
+// .add_submessage(register_submsg)
+// .add_submessage(inst_submsg)
+// .add_submessage(assign_msg)
+// .add_attributes(vec![
+// attr("method", "instantiate"),
+// attr("type", "app-contract"),
+// attr("owner", "creator"),
+// attr("andr_app", "Some App"),
+// ]);
- assert_eq!(
- Addr::unchecked(""),
- ADO_ADDRESSES.load(deps.as_ref().storage, "token").unwrap()
- );
-}
+// assert_eq!(expected, res);
-#[test]
-fn test_instantiation_duplicate_components() {
- let mut deps = mock_dependencies_custom(&[]);
+// assert_eq!(
+// Addr::unchecked(""),
+// ADO_ADDRESSES.load(deps.as_ref().storage, "token").unwrap()
+// );
+// }
- let msg = InstantiateMsg {
- app_components: vec![
- AppComponent {
- name: "component".to_string(),
- ado_type: "cw721".to_string(),
- component_type: ComponentType::New(to_json_binary(&true).unwrap()),
- },
- AppComponent {
- name: "component".to_string(),
- ado_type: "cw20".to_string(),
- component_type: ComponentType::New(to_json_binary(&true).unwrap()),
- },
- ],
- name: String::from("Some App"),
- kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
- owner: None,
- chain_info: None,
- };
- let info = mock_info("creator", &[]);
+// #[test]
+// fn test_instantiation_duplicate_components() {
+// let mut deps = mock_dependencies_custom(&[]);
- let res = instantiate(deps.as_mut(), mock_env(), info, msg);
- assert_eq!(ContractError::NameAlreadyTaken {}, res.unwrap_err());
-}
+// let msg = InstantiateMsg {
+// app_components: vec![
+// AppComponent {
+// name: "component".to_string(),
+// ado_type: "cw721".to_string(),
+// component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+// },
+// AppComponent {
+// name: "component".to_string(),
+// ado_type: "cw20".to_string(),
+// component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+// },
+// ],
+// name: String::from("Some App"),
+// kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
+// owner: None,
+// chain_info: None,
+// };
+// let info = mock_info("creator", &[]);
+
+// let res = instantiate(deps.as_mut(), mock_env(), info, msg);
+// assert_eq!(ContractError::NameAlreadyTaken {}, res.unwrap_err());
+// }
#[test]
fn test_add_app_component_unauthorized() {
@@ -163,96 +170,96 @@ fn test_add_app_component_unauthorized() {
assert_eq!(ContractError::Unauthorized {}, err);
}
-#[test]
-fn test_add_app_component_duplicate_name() {
- let mut deps = mock_dependencies_custom(&[]);
- let env = mock_env();
- let info = mock_info("creator", &[]);
- let inst_msg = InstantiateMsg {
- app_components: vec![AppComponent {
- name: "token".to_string(),
- ado_type: "cw721".to_string(),
- component_type: ComponentType::New(to_json_binary(&true).unwrap()),
- }],
- name: String::from("Some App"),
- kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
- owner: None,
- chain_info: None,
- };
-
- instantiate(deps.as_mut(), env.clone(), info.clone(), inst_msg).unwrap();
- ADO_ADDRESSES
- .save(
- deps.as_mut().storage,
- "token",
- &Addr::unchecked("someaddress"),
- )
- .unwrap();
-
- let msg = ExecuteMsg::AddAppComponent {
- component: AppComponent {
- name: "token".to_string(),
- ado_type: "cw721".to_string(),
- component_type: ComponentType::New(to_json_binary(&true).unwrap()),
- },
- };
+// #[test]
+// fn test_add_app_component_duplicate_name() {
+// let mut deps = mock_dependencies_custom(&[]);
+// let env = mock_env();
+// let info = mock_info("creator", &[]);
+// let inst_msg = InstantiateMsg {
+// app_components: vec![AppComponent {
+// name: "token".to_string(),
+// ado_type: "cw721".to_string(),
+// component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+// }],
+// name: String::from("Some App"),
+// kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
+// owner: None,
+// chain_info: None,
+// };
- let err = execute(deps.as_mut(), env, info, msg).unwrap_err();
- assert_eq!(ContractError::NameAlreadyTaken {}, err);
-}
+// instantiate(deps.as_mut(), env.clone(), info.clone(), inst_msg).unwrap();
+// ADO_ADDRESSES
+// .save(
+// deps.as_mut().storage,
+// "token",
+// &Addr::unchecked("someaddress"),
+// )
+// .unwrap();
-#[test]
-fn test_add_app_component() {
- let mut deps = mock_dependencies_custom(&[]);
- let env = mock_env();
- let info = mock_info("creator", &[]);
- let inst_msg = InstantiateMsg {
- app_components: vec![],
- name: String::from("Some App"),
- kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
- owner: None,
- chain_info: None,
- };
+// let msg = ExecuteMsg::AddAppComponent {
+// component: AppComponent {
+// name: "token".to_string(),
+// ado_type: "cw721".to_string(),
+// component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+// },
+// };
- instantiate(deps.as_mut(), env.clone(), info.clone(), inst_msg).unwrap();
+// let err = execute(deps.as_mut(), env, info, msg).unwrap_err();
+// assert_eq!(ContractError::NameAlreadyTaken {}, err);
+// }
- let msg = ExecuteMsg::AddAppComponent {
- component: AppComponent {
- name: "token".to_string(),
- ado_type: "cw721".to_string(),
- component_type: ComponentType::New(to_json_binary(&true).unwrap()),
- },
- };
+// #[test]
+// fn test_add_app_component() {
+// let mut deps = mock_dependencies_custom(&[]);
+// let env = mock_env();
+// let info = mock_info("creator", &[]);
+// let inst_msg = InstantiateMsg {
+// app_components: vec![],
+// name: String::from("Some App"),
+// kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
+// owner: None,
+// chain_info: None,
+// };
- let res = execute(deps.as_mut(), env, info, msg).unwrap();
- assert_eq!(1, res.messages.len());
- let inst_submsg: SubMsg = SubMsg {
- id: 1,
- msg: CosmosMsg::Wasm(WasmMsg::Instantiate {
- code_id: 1,
- msg: to_json_binary(&true).unwrap(),
- funds: vec![],
- label: "Instantiate: cw721".to_string(),
- admin: Some("creator".to_string()),
- }),
- reply_on: ReplyOn::Always,
- gas_limit: None,
- };
- let expected = Response::new()
- .add_submessage(inst_submsg)
- .add_attributes(vec![
- attr("method", "add_app_component"),
- attr("name", "token"),
- attr("type", "cw721"),
- ]);
+// instantiate(deps.as_mut(), env.clone(), info.clone(), inst_msg).unwrap();
- assert_eq!(expected, res);
+// let msg = ExecuteMsg::AddAppComponent {
+// component: AppComponent {
+// name: "token".to_string(),
+// ado_type: "cw721".to_string(),
+// component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+// },
+// };
- assert_eq!(
- Addr::unchecked(""),
- ADO_ADDRESSES.load(deps.as_ref().storage, "token").unwrap()
- );
-}
+// let res = execute(deps.as_mut(), env, info, msg).unwrap();
+// assert_eq!(1, res.messages.len());
+// // let inst_submsg: SubMsg = SubMsg {
+// // id: 1,
+// // msg: CosmosMsg::Wasm(WasmMsg::Instantiate {
+// // code_id: 1,
+// // msg: to_json_binary(&true).unwrap(),
+// // funds: vec![],
+// // label: "Instantiate: cw721".to_string(),
+// // admin: Some("creator".to_string()),
+// // }),
+// // reply_on: ReplyOn::Always,
+// // gas_limit: None,
+// // };
+// // let expected = Response::new()
+// // .add_submessage(inst_submsg)
+// // .add_attributes(vec![
+// // attr("method", "add_app_component"),
+// // attr("name", "token"),
+// // attr("type", "cw721"),
+// // ]);
+
+// // assert_eq!(expected, res);
+
+// // assert_eq!(
+// // Addr::unchecked(""),
+// // ADO_ADDRESSES.load(deps.as_ref().storage, "token").unwrap()
+// // );
+// }
#[test]
fn test_claim_ownership_unauth() {
@@ -327,44 +334,43 @@ fn test_claim_ownership_empty() {
assert_eq!(0, res.messages.len());
}
-//TODO: Fix this test
-// #[test]
-// fn test_claim_ownership_all() {
-// let mut deps = mock_dependencies_custom(&[]);
-// let env = mock_env();
-// let info = mock_info("creator", &[]);
-// let inst_msg = InstantiateMsg {
-// app_components: vec![],
-// name: String::from("Some App"),
-// owner: None,
-// kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
-// chain_info: None,
-// };
+#[test]
+fn test_claim_ownership_all() {
+ let mut deps = mock_dependencies_custom(&[]);
+ let env = mock_env();
+ let info = mock_info("creator", &[]);
+ let inst_msg = InstantiateMsg {
+ app_components: vec![],
+ name: String::from("Some App"),
+ owner: None,
+ kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
+ chain_info: None,
+ };
-// instantiate(deps.as_mut(), env.clone(), info.clone(), inst_msg).unwrap();
-// ADO_ADDRESSES
-// .save(
-// deps.as_mut().storage,
-// "token",
-// &Addr::unchecked("tokenaddress".to_string()),
-// )
-// .unwrap();
-// ADO_ADDRESSES
-// .save(
-// deps.as_mut().storage,
-// "anchor",
-// &Addr::unchecked("anchoraddress".to_string()),
-// )
-// .unwrap();
+ instantiate(deps.as_mut(), env.clone(), info.clone(), inst_msg).unwrap();
+ ADO_ADDRESSES
+ .save(
+ deps.as_mut().storage,
+ "token",
+ &Addr::unchecked(MOCK_CW20_CONTRACT),
+ )
+ .unwrap();
+ ADO_ADDRESSES
+ .save(
+ deps.as_mut().storage,
+ "anchor",
+ &Addr::unchecked(MOCK_ANCHOR_CONTRACT),
+ )
+ .unwrap();
-// let msg = ExecuteMsg::ClaimOwnership {
-// name: None,
-// new_owner: None,
-// };
+ let msg = ExecuteMsg::ClaimOwnership {
+ name: None,
+ new_owner: None,
+ };
-// let res = execute(deps.as_mut(), env, info, msg).unwrap();
-// assert_eq!(2, res.messages.len());
-// }
+ let res = execute(deps.as_mut(), env, info, msg).unwrap();
+ assert_eq!(2, res.messages.len());
+}
#[test]
fn test_claim_ownership() {
@@ -404,12 +410,13 @@ fn test_claim_ownership() {
assert_eq!(1, res.messages.len());
let exec_submsg: SubMsg = SubMsg {
- id: 101,
+ id: 200,
msg: CosmosMsg::Wasm(WasmMsg::Execute {
contract_addr: "tokenaddress".to_string(),
- msg: to_json_binary(&AndromedaMsg::UpdateOwner {
- address: "creator".to_string(),
- })
+ msg: to_json_binary(&AndromedaMsg::Ownership(OwnershipMessage::UpdateOwner {
+ new_owner: Addr::unchecked("creator"),
+ expiration: None,
+ }))
.unwrap(),
funds: vec![],
}),
@@ -613,68 +620,83 @@ fn test_update_address() {
assert_eq!(Addr::unchecked("newtokenaddress"), addr)
}
-// TODO: UPDATE WITH 1.2 CHANGES
-// #[test]
-// fn test_reply_assign_app() {
-// let mut deps = mock_dependencies_custom(&[]);
-// let env = mock_env();
-// let mock_app_component = AppComponent {
-// ado_type: "cw721".to_string(),
-// name: "token".to_string(),
-// instantiate_msg: to_json_binary(&true).unwrap(),
-// };
-// let component_idx = 1;
-// ADO_DESCRIPTORS
-// .save(
-// deps.as_mut().storage,
-// &component_idx.to_string(),
-// &mock_app_component,
-// )
-// .unwrap();
+#[test]
+fn test_add_app_component_limit() {
+ let mut deps = mock_dependencies_custom(&[]);
+ let env = mock_env();
+ let info = mock_info("creator", &[]);
-// let mock_reply_event = Event::new("instantiate")
-// .add_attribute("contract_address".to_string(), "tokenaddress".to_string());
+ let msg = InstantiateMsg {
+ app_components: vec![],
+ name: String::from("Some App"),
+ kernel_address: MOCK_KERNEL_CONTRACT.to_string(),
+ owner: None,
+ chain_info: None,
+ };
-// let instantiate_reply = MsgInstantiateContractResponse {
-// contract_address: "tokenaddress".to_string(),
-// data: vec![],
-// };
-// let mut encoded_instantiate_reply = Vec::::with_capacity(instantiate_reply.encoded_len());
+ // we can just call .unwrap() to assert this was a success
+ instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap();
-// instantiate_reply
-// .encode(&mut encoded_instantiate_reply)
-// .unwrap();
+ let mut i = 0;
+ while i < 50 {
+ i += 1;
+ ADO_ADDRESSES
+ .save(deps.as_mut().storage, &i.to_string(), &Addr::unchecked(""))
+ .unwrap();
+ }
+ ADO_IDX.save(deps.as_mut().storage, &50).unwrap();
-// let mock_reply = Reply {
-// id: component_idx,
-// result: SubMsgResult::Ok(SubMsgResponse {
-// data: Some(encoded_instantiate_reply.into()),
-// events: vec![mock_reply_event],
-// }),
-// };
+ let msg = ExecuteMsg::AddAppComponent {
+ component: AppComponent {
+ name: "token".to_string(),
+ ado_type: "cw721".to_string(),
+ component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+ },
+ };
-// let res = reply(deps.as_mut(), env.clone(), mock_reply).unwrap();
-// assert_eq!(1, res.messages.len());
+ let err = execute(deps.as_mut(), env, info, msg).unwrap_err();
+ assert_eq!(ContractError::TooManyAppComponents {}, err);
+}
-// let exec_submsg: SubMsg = SubMsg {
-// id: 103,
-// msg: CosmosMsg::Wasm(WasmMsg::Execute {
-// contract_addr: "tokenaddress".to_string(),
-// msg: to_json_binary(&ExecuteMsg::AndrReceive(AndromedaMsg::UpdateAppContract {
-// address: env.contract.address.to_string(),
-// }))
-// .unwrap(),
-// funds: vec![],
-// }),
-// reply_on: ReplyOn::Error,
-// gas_limit: None,
-// };
-// let expected = Response::new().add_submessage(exec_submsg);
+#[test]
+fn test_reply_assign_app() {
+ let mut deps = mock_dependencies_custom(&[]);
+ let env = mock_env();
+ let mock_app_component = AppComponent {
+ ado_type: "cw721".to_string(),
+ name: "token".to_string(),
+ component_type: ComponentType::New(to_json_binary(&true).unwrap()),
+ };
+ let component_idx = 1;
+ ADO_DESCRIPTORS
+ .save(
+ deps.as_mut().storage,
+ &component_idx.to_string(),
+ &mock_app_component,
+ )
+ .unwrap();
+ ADO_ADDRESSES
+ .save(
+ deps.as_mut().storage,
+ &mock_app_component.name,
+ &Addr::unchecked("cosmos2contract"),
+ )
+ .unwrap();
-// assert_eq!(expected, res);
+ let mock_reply_event = Event::new("instantiate").add_attribute(
+ "contract_address".to_string(),
+ "cosmos2contract".to_string(),
+ );
-// assert_eq!(
-// Addr::unchecked("tokenaddress"),
-// ADO_ADDRESSES.load(deps.as_ref().storage, "token").unwrap()
-// );
-// }
+ let reply_resp = "Cg9jb3Ntb3MyY29udHJhY3QSAA==";
+ let mock_reply = Reply {
+ id: component_idx,
+ result: SubMsgResult::Ok(SubMsgResponse {
+ data: Some(Binary::from_base64(reply_resp).unwrap()),
+ events: vec![mock_reply_event],
+ }),
+ };
+
+ let res = reply(deps.as_mut(), env, mock_reply).unwrap();
+ assert!(res.messages.is_empty());
+}
diff --git a/andromeda-core/contracts/data-storage/andromeda-boolean/.cargo/config b/andromeda-core/contracts/data-storage/andromeda-boolean/.cargo/config
new file mode 100644
index 0000000..336b618
--- /dev/null
+++ b/andromeda-core/contracts/data-storage/andromeda-boolean/.cargo/config
@@ -0,0 +1,4 @@
+[alias]
+wasm = "build --release --target wasm32-unknown-unknown"
+unit-test = "test --lib"
+schema = "run --example schema"
diff --git a/andromeda-core/contracts/data-storage/andromeda-boolean/Cargo.toml b/andromeda-core/contracts/data-storage/andromeda-boolean/Cargo.toml
new file mode 100644
index 0000000..e5b5760
--- /dev/null
+++ b/andromeda-core/contracts/data-storage/andromeda-boolean/Cargo.toml
@@ -0,0 +1,40 @@
+[package]
+name = "andromeda-boolean"
+version = "2.0.2"
+authors = ["Mitar Djakovic "]
+edition = "2021"
+rust-version = "1.75.0"
+
+exclude = [
+ # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication.
+ "contract.wasm",
+ "hash.txt",
+]
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[features]
+# for more explicit tests, cargo test --features=backtraces
+backtraces = ["cosmwasm-std/backtraces"]
+# use library feature to disable all instantiate/execute/query exports
+library = []
+testing = ["cw-multi-test", "andromeda-testing"]
+
+[dependencies]
+cosmwasm-std = { workspace = true }
+cosmwasm-schema = { workspace = true }
+cw-storage-plus = { workspace = true }
+cw-utils = { workspace = true }
+cw20 = { workspace = true }
+
+
+andromeda-std = { workspace = true, features = ["rates"] }
+andromeda-data-storage = { workspace = true }
+
+
+[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
+cw-multi-test = { workspace = true, optional = true }
+andromeda-testing = { workspace = true, optional = true }
diff --git a/andromeda-core/contracts/data-storage/andromeda-boolean/examples/schema.rs b/andromeda-core/contracts/data-storage/andromeda-boolean/examples/schema.rs
new file mode 100644
index 0000000..d435a54
--- /dev/null
+++ b/andromeda-core/contracts/data-storage/andromeda-boolean/examples/schema.rs
@@ -0,0 +1,10 @@
+use andromeda_data_storage::boolean::{ExecuteMsg, InstantiateMsg, QueryMsg};
+use cosmwasm_schema::write_api;
+fn main() {
+ write_api! {
+ instantiate: InstantiateMsg,
+ query: QueryMsg,
+ execute: ExecuteMsg,
+
+ }
+}
diff --git a/andromeda-core/contracts/data-storage/andromeda-boolean/src/contract.rs b/andromeda-core/contracts/data-storage/andromeda-boolean/src/contract.rs
new file mode 100644
index 0000000..3e8675a
--- /dev/null
+++ b/andromeda-core/contracts/data-storage/andromeda-boolean/src/contract.rs
@@ -0,0 +1,94 @@
+#[cfg(not(feature = "library"))]
+use cosmwasm_std::entry_point;
+use cosmwasm_std::{Addr, Binary, Deps, DepsMut, Env, MessageInfo, Response};
+
+use crate::{
+ execute::handle_execute,
+ query::{get_data_owner, get_value},
+ state::RESTRICTION,
+};
+use andromeda_data_storage::boolean::{BooleanRestriction, ExecuteMsg, InstantiateMsg, QueryMsg};
+use andromeda_std::{
+ ado_base::{
+ permissioning::{LocalPermission, Permission},
+ InstantiateMsg as BaseInstantiateMsg, MigrateMsg,
+ },
+ ado_contract::ADOContract,
+ common::{context::ExecuteContext, encode_binary},
+ error::ContractError,
+};
+
+// version info for migration info
+const CONTRACT_NAME: &str = "crates.io:andromeda-boolean";
+const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION");
+
+pub const SET_DELETE_VALUE_ACTION: &str = "set_delete_value";
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn instantiate(
+ deps: DepsMut,
+ env: Env,
+ info: MessageInfo,
+ msg: InstantiateMsg,
+) -> Result {
+ let resp = ADOContract::default().instantiate(
+ deps.storage,
+ env,
+ deps.api,
+ &deps.querier,
+ info.clone(),
+ BaseInstantiateMsg {
+ ado_type: CONTRACT_NAME.to_string(),
+ ado_version: CONTRACT_VERSION.to_string(),
+ kernel_address: msg.kernel_address,
+ owner: msg.owner.clone(),
+ },
+ )?;
+ RESTRICTION.save(deps.storage, &msg.restriction)?;
+
+ if msg.restriction == BooleanRestriction::Private {
+ ADOContract::default().permission_action(SET_DELETE_VALUE_ACTION, deps.storage)?;
+
+ ADOContract::set_permission(
+ deps.storage,
+ SET_DELETE_VALUE_ACTION,
+ match msg.owner.clone() {
+ None => info.sender,
+ Some(owner) => Addr::unchecked(owner),
+ },
+ Permission::Local(LocalPermission::Whitelisted(None)),
+ )?;
+ }
+
+ Ok(resp)
+}
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn execute(
+ deps: DepsMut,
+ env: Env,
+ info: MessageInfo,
+ msg: ExecuteMsg,
+) -> Result {
+ let ctx = ExecuteContext::new(deps, info, env);
+ match msg {
+ ExecuteMsg::AMPReceive(pkt) => {
+ ADOContract::default().execute_amp_receive(ctx, pkt, handle_execute)
+ }
+ _ => handle_execute(ctx, msg),
+ }
+}
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> Result {
+ match msg {
+ QueryMsg::GetValue {} => encode_binary(&get_value(deps.storage)?),
+ QueryMsg::GetDataOwner {} => encode_binary(&get_data_owner(deps.storage)?),
+ _ => ADOContract::default().query(deps, env, msg),
+ }
+}
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn migrate(deps: DepsMut, _env: Env, _msg: MigrateMsg) -> Result {
+ ADOContract::default().migrate(deps, CONTRACT_NAME, CONTRACT_VERSION)
+}
diff --git a/andromeda-core/contracts/data-storage/andromeda-boolean/src/execute.rs b/andromeda-core/contracts/data-storage/andromeda-boolean/src/execute.rs
new file mode 100644
index 0000000..fe43e2c
--- /dev/null
+++ b/andromeda-core/contracts/data-storage/andromeda-boolean/src/execute.rs
@@ -0,0 +1,184 @@
+use andromeda_data_storage::boolean::{BooleanRestriction, ExecuteMsg};
+use andromeda_std::{
+ ado_base::rates::{Rate, RatesMessage},
+ ado_contract::ADOContract,
+ common::{actions::call_action, context::ExecuteContext, rates::get_tax_amount, Funds},
+ error::ContractError,
+};
+use cosmwasm_std::{
+ coin, ensure, BankMsg, Coin, CosmosMsg, Deps, MessageInfo, Response, SubMsg, Uint128,
+};
+use cw_utils::nonpayable;
+
+use crate::{
+ contract::SET_DELETE_VALUE_ACTION,
+ state::{DATA, DATA_OWNER, RESTRICTION},
+};
+
+pub fn handle_execute(mut ctx: ExecuteContext, msg: ExecuteMsg) -> Result {
+ let action = msg.as_ref().to_string();
+ call_action(
+ &mut ctx.deps,
+ &ctx.info,
+ &ctx.env,
+ &ctx.amp_ctx,
+ msg.as_ref(),
+ )?;
+
+ match msg.clone() {
+ ExecuteMsg::UpdateRestriction { restriction } => update_restriction(ctx, restriction),
+ ExecuteMsg::SetValue { value } => set_value(ctx, value, action),
+ ExecuteMsg::DeleteValue {} => delete_value(ctx),
+ ExecuteMsg::Rates(rates_message) => match rates_message {
+ RatesMessage::SetRate { rate, .. } => match rate {
+ Rate::Local(local_rate) => {
+ // Percent rates aren't applicable in this case, so we enforce Flat rates
+ ensure!(local_rate.value.is_flat(), ContractError::InvalidRate {});
+ ADOContract::default().execute(ctx, msg)
+ }
+ Rate::Contract(_) => ADOContract::default().execute(ctx, msg),
+ },
+ RatesMessage::RemoveRate { .. } => ADOContract::default().execute(ctx, msg),
+ },
+ _ => ADOContract::default().execute(ctx, msg),
+ }
+}
+
+pub fn update_restriction(
+ ctx: ExecuteContext,
+ restriction: BooleanRestriction,
+) -> Result {
+ nonpayable(&ctx.info)?;
+ let sender = ctx.info.sender;
+ ensure!(
+ ADOContract::default().is_owner_or_operator(ctx.deps.storage, sender.as_ref())?,
+ ContractError::Unauthorized {}
+ );
+ RESTRICTION.save(ctx.deps.storage, &restriction)?;
+ Ok(Response::new()
+ .add_attribute("method", "update_restriction")
+ .add_attribute("sender", sender))
+}
+
+pub fn set_value(
+ mut ctx: ExecuteContext,
+ value: bool,
+ action: String,
+) -> Result {
+ let sender = ctx.info.sender.clone();
+ let restriction = RESTRICTION.load(ctx.deps.storage)?;
+ if restriction == BooleanRestriction::Private {
+ let has_permission = ADOContract::default()
+ .is_permissioned(
+ ctx.deps.branch(),
+ ctx.env.clone(),
+ SET_DELETE_VALUE_ACTION,
+ ctx.info.sender.clone(),
+ )
+ .is_ok();
+ ensure!(has_permission, ContractError::Unauthorized {});
+ } else if restriction == BooleanRestriction::Restricted {
+ let addr = sender.as_str();
+ let is_operator = ADOContract::default().is_owner_or_operator(ctx.deps.storage, addr)?;
+ let allowed = match DATA_OWNER.load(ctx.deps.storage).ok() {
+ Some(owner) => addr == owner,
+ None => true,
+ };
+ ensure!(is_operator || allowed, ContractError::Unauthorized {});
+ }
+
+ let tax_response = tax_set_value(ctx.deps.as_ref(), &ctx.info, action)?;
+
+ DATA.save(ctx.deps.storage, &value.clone())?;
+ DATA_OWNER.save(ctx.deps.storage, &sender)?;
+
+ let mut response = Response::new()
+ .add_attribute("method", "set_value")
+ .add_attribute("sender", sender)
+ .add_attribute("value", format!("{value:?}"));
+
+ if let Some(tax_response) = tax_response {
+ response = response.add_submessages(tax_response.1);
+ let refund = tax_response.0.try_get_coin()?;
+ if !refund.amount.is_zero() {
+ return Ok(response.add_message(CosmosMsg::Bank(BankMsg::Send {
+ to_address: ctx.info.sender.into_string(),
+ amount: vec![refund],
+ })));
+ }
+ }
+
+ Ok(response)
+}
+
+pub fn delete_value(mut ctx: ExecuteContext) -> Result {
+ nonpayable(&ctx.info)?;
+ let sender = ctx.info.sender.clone();
+ let restriction = RESTRICTION.load(ctx.deps.storage)?;
+ if restriction == BooleanRestriction::Private {
+ let has_permission = ADOContract::default()
+ .is_permissioned(
+ ctx.deps.branch(),
+ ctx.env.clone(),
+ SET_DELETE_VALUE_ACTION,
+ ctx.info.sender.clone(),
+ )
+ .is_ok();
+ ensure!(has_permission, ContractError::Unauthorized {});
+ } else if restriction == BooleanRestriction::Restricted {
+ let addr = sender.as_str();
+ let is_operator = ADOContract::default().is_owner_or_operator(ctx.deps.storage, addr)?;
+ let allowed = match DATA_OWNER.load(ctx.deps.storage).ok() {
+ Some(owner) => addr == owner,
+ None => true,
+ };
+ ensure!(is_operator || allowed, ContractError::Unauthorized {});
+ }
+
+ DATA.remove(ctx.deps.storage);
+ DATA_OWNER.remove(ctx.deps.storage);
+ Ok(Response::new()
+ .add_attribute("method", "delete_value")
+ .add_attribute("sender", sender))
+}
+
+fn tax_set_value(
+ deps: Deps,
+ info: &MessageInfo,
+ action: String,
+) -> Result